@prisma-next/target-postgres 0.5.0-dev.44 → 0.5.0-dev.46
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-CojIXVf9.mjs → codec-ids-ckQX9Kcg.mjs} +3 -2
- package/dist/{codec-ids-CojIXVf9.mjs.map → codec-ids-ckQX9Kcg.mjs.map} +1 -1
- package/dist/codec-ids.d.mts +2 -1
- package/dist/codec-ids.d.mts.map +1 -1
- package/dist/codec-ids.mjs +2 -2
- package/dist/codec-types.d.mts +1 -1
- package/dist/codec-types.mjs +1 -1
- package/dist/{codecs-CE5EUsNM.d.mts → codecs-B03dFv94.d.mts} +11 -1
- package/dist/codecs-B03dFv94.d.mts.map +1 -0
- package/dist/{codecs-dzZ_dMpK.mjs → codecs-D0oXyJIH.mjs} +18 -3
- package/dist/codecs-D0oXyJIH.mjs.map +1 -0
- package/dist/codecs.d.mts +1 -1
- package/dist/codecs.mjs +1 -1
- package/dist/control.mjs +6 -56
- package/dist/control.mjs.map +1 -1
- package/dist/{data-transform-C83dy0vk.mjs → data-transform-Be_i_DBc.mjs} +22 -5
- package/dist/data-transform-Be_i_DBc.mjs.map +1 -0
- package/dist/{data-transform-D8x5m1YV.d.mts → data-transform-CrpmG4uJ.d.mts} +12 -11
- package/dist/data-transform-CrpmG4uJ.d.mts.map +1 -0
- package/dist/data-transform.d.mts +1 -1
- package/dist/data-transform.mjs +1 -1
- package/dist/issue-planner.d.mts +1 -1
- package/dist/migration.d.mts +2 -2
- package/dist/migration.mjs +2 -2
- package/dist/pack.d.mts +1 -1
- package/dist/{planner-B4ZSLHRI.mjs → planner-Cm-ZLutk.mjs} +2 -2
- package/dist/{planner-B4ZSLHRI.mjs.map → planner-Cm-ZLutk.mjs.map} +1 -1
- package/dist/{planner-produced-postgres-migration-C0GNhHGw.mjs → planner-produced-postgres-migration-Bi-RWO4-.mjs} +2 -2
- package/dist/{planner-produced-postgres-migration-C0GNhHGw.mjs.map → planner-produced-postgres-migration-Bi-RWO4-.mjs.map} +1 -1
- package/dist/{planner-produced-postgres-migration-Dw_mPMKt.d.mts → planner-produced-postgres-migration-M3EfhWSS.d.mts} +2 -2
- package/dist/planner-produced-postgres-migration-M3EfhWSS.d.mts.map +1 -0
- package/dist/planner-produced-postgres-migration.d.mts +3 -2
- package/dist/planner-produced-postgres-migration.mjs +1 -1
- package/dist/planner.d.mts +4 -3
- package/dist/planner.d.mts.map +1 -1
- package/dist/planner.mjs +1 -1
- package/dist/{postgres-migration-DcfWGqhe.d.mts → postgres-migration-BFjbb25b.d.mts} +4 -3
- package/dist/postgres-migration-BFjbb25b.d.mts.map +1 -0
- package/dist/{postgres-migration-EGSlO4jO.mjs → postgres-migration-BS9vQW97.mjs} +2 -2
- package/dist/postgres-migration-BS9vQW97.mjs.map +1 -0
- package/package.json +16 -16
- package/src/core/codec-ids.ts +1 -0
- package/src/core/codecs.ts +36 -0
- package/src/core/migrations/operations/data-transform.ts +78 -21
- package/src/core/migrations/postgres-migration.ts +3 -6
- package/src/core/migrations/runner.ts +16 -121
- package/dist/codecs-CE5EUsNM.d.mts.map +0 -1
- package/dist/codecs-dzZ_dMpK.mjs.map +0 -1
- package/dist/data-transform-C83dy0vk.mjs.map +0 -1
- package/dist/data-transform-D8x5m1YV.d.mts.map +0 -1
- package/dist/planner-produced-postgres-migration-Dw_mPMKt.d.mts.map +0 -1
- package/dist/postgres-migration-DcfWGqhe.d.mts.map +0 -1
- package/dist/postgres-migration-EGSlO4jO.mjs.map +0 -1
|
@@ -12,7 +12,6 @@ import type {
|
|
|
12
12
|
} from '@prisma-next/family-sql/control';
|
|
13
13
|
import { runnerFailure, runnerSuccess } from '@prisma-next/family-sql/control';
|
|
14
14
|
import { verifySqlSchema } from '@prisma-next/family-sql/schema-verify';
|
|
15
|
-
import type { DataTransformOperation } from '@prisma-next/framework-components/control';
|
|
16
15
|
import { SqlQueryError } from '@prisma-next/sql-errors';
|
|
17
16
|
import { ifDefined } from '@prisma-next/utils/defined';
|
|
18
17
|
import type { Result } from '@prisma-next/utils/result';
|
|
@@ -44,18 +43,6 @@ const DEFAULT_CONFIG: RunnerConfig = {
|
|
|
44
43
|
|
|
45
44
|
const LOCK_DOMAIN = 'prisma_next.contract.marker';
|
|
46
45
|
|
|
47
|
-
function isDataTransformOperation(op: unknown): op is DataTransformOperation {
|
|
48
|
-
return (
|
|
49
|
-
typeof op === 'object' &&
|
|
50
|
-
op !== null &&
|
|
51
|
-
'operationClass' in op &&
|
|
52
|
-
(op as { operationClass: string }).operationClass === 'data' &&
|
|
53
|
-
'name' in op &&
|
|
54
|
-
'check' in op &&
|
|
55
|
-
'run' in op
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
46
|
/**
|
|
60
47
|
* Deep clones and freezes a record object to prevent mutation.
|
|
61
48
|
* Recursively clones nested objects and arrays to ensure complete isolation.
|
|
@@ -174,23 +161,18 @@ class PostgresMigrationRunner implements SqlMigrationRunner<PostgresPlanTargetDe
|
|
|
174
161
|
});
|
|
175
162
|
}
|
|
176
163
|
|
|
177
|
-
// Self-edge no-op detection: a self-edge migration
|
|
178
|
-
//
|
|
179
|
-
// change. Skip the marker +
|
|
180
|
-
// of a self-edge data
|
|
181
|
-
//
|
|
182
|
-
//
|
|
183
|
-
//
|
|
184
|
-
//
|
|
185
|
-
//
|
|
186
|
-
//
|
|
187
|
-
//
|
|
188
|
-
|
|
189
|
-
// subtraction empties `effectiveRequired` first and short-circuits
|
|
190
|
-
// before we run; the non-CLI re-apply path needs a per-op `executed`
|
|
191
|
-
// flag threaded through `executeDataTransform` to recover the
|
|
192
|
-
// intended check. See review thread A13 / future M5 ADR draft.
|
|
193
|
-
const incomingInvariants = options.plan.providedInvariants;
|
|
164
|
+
// Self-edge no-op detection: a self-edge migration whose ops all
|
|
165
|
+
// self-skipped (every op pre-satisfied) and that brings no new
|
|
166
|
+
// invariants produced no observable change. Skip the marker +
|
|
167
|
+
// ledger writes so an idempotent re-apply of a self-edge data
|
|
168
|
+
// transform doesn't churn updatedAt or pile up empty ledger
|
|
169
|
+
// entries. With data transforms now flowing through the unified
|
|
170
|
+
// op loop, a pre-satisfied DT lands in the
|
|
171
|
+
// `postcheckAlreadySatisfied` skip path which does not increment
|
|
172
|
+
// `operationsExecuted`, so the check below correctly distinguishes
|
|
173
|
+
// "every op self-skipped" from "the plan had ops that ran". `db
|
|
174
|
+
// update` no-ops still write a ledger entry as audit trail.
|
|
175
|
+
const incomingInvariants = options.plan.providedInvariants ?? [];
|
|
194
176
|
const existingInvariants = new Set(existingMarker?.invariants ?? []);
|
|
195
177
|
const incomingIsSubsetOfExisting = incomingInvariants.every((id) =>
|
|
196
178
|
existingInvariants.has(id),
|
|
@@ -235,19 +217,6 @@ class PostgresMigrationRunner implements SqlMigrationRunner<PostgresPlanTargetDe
|
|
|
235
217
|
for (const operation of options.plan.operations) {
|
|
236
218
|
options.callbacks?.onOperationStart?.(operation);
|
|
237
219
|
try {
|
|
238
|
-
// Data transform operations have a different execution lifecycle
|
|
239
|
-
if (operation.operationClass === 'data' && isDataTransformOperation(operation)) {
|
|
240
|
-
const dtResult = await this.executeDataTransform(driver, operation, {
|
|
241
|
-
runIdempotency,
|
|
242
|
-
});
|
|
243
|
-
if (!dtResult.ok) {
|
|
244
|
-
return dtResult;
|
|
245
|
-
}
|
|
246
|
-
executedOperations.push(operation);
|
|
247
|
-
operationsExecuted += 1;
|
|
248
|
-
continue;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
220
|
// Idempotency probe: only run if both postchecks and idempotency checks are enabled
|
|
252
221
|
if (runPostchecks && runIdempotency) {
|
|
253
222
|
const postcheckAlreadySatisfied = await this.expectationsAreSatisfied(
|
|
@@ -300,80 +269,6 @@ class PostgresMigrationRunner implements SqlMigrationRunner<PostgresPlanTargetDe
|
|
|
300
269
|
return ok({ operationsExecuted, executedOperations });
|
|
301
270
|
}
|
|
302
271
|
|
|
303
|
-
/**
|
|
304
|
-
* Executes a data transform operation with the check → (skip or run) → check lifecycle.
|
|
305
|
-
*
|
|
306
|
-
* 1. If check is a query AST: render to SQL, execute. Empty result = already applied (skip).
|
|
307
|
-
* 2. If check is `true`: always skip. If `false`: always run.
|
|
308
|
-
* 3. Execute run ASTs (rendered to SQL) sequentially.
|
|
309
|
-
* 4. Re-execute check as post-run validation. If violations remain, fail.
|
|
310
|
-
*/
|
|
311
|
-
private async executeDataTransform(
|
|
312
|
-
driver: SqlMigrationRunnerExecuteOptions<PostgresPlanTargetDetails>['driver'],
|
|
313
|
-
op: DataTransformOperation,
|
|
314
|
-
options: { runIdempotency: boolean },
|
|
315
|
-
): Promise<Result<void, SqlMigrationRunnerFailure>> {
|
|
316
|
-
// Step 1: Check (skip guard)
|
|
317
|
-
if (op.check === true) {
|
|
318
|
-
// Always skip, regardless of idempotency setting
|
|
319
|
-
return okVoid();
|
|
320
|
-
}
|
|
321
|
-
if (options.runIdempotency && op.check !== null && op.check !== false) {
|
|
322
|
-
const checkResult = await driver.query(op.check.sql, op.check.params);
|
|
323
|
-
if (checkResult.rows.length === 0) {
|
|
324
|
-
// No violations — already applied, skip
|
|
325
|
-
return okVoid();
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
// Step 2: Execute run steps
|
|
330
|
-
if (op.run) {
|
|
331
|
-
for (const plan of op.run) {
|
|
332
|
-
try {
|
|
333
|
-
await driver.query(plan.sql, plan.params);
|
|
334
|
-
} catch (error: unknown) {
|
|
335
|
-
if (SqlQueryError.is(error)) {
|
|
336
|
-
return runnerFailure(
|
|
337
|
-
'EXECUTION_FAILED',
|
|
338
|
-
`Data transform "${op.name}" failed: ${error.message}`,
|
|
339
|
-
{
|
|
340
|
-
why: error.message,
|
|
341
|
-
meta: {
|
|
342
|
-
operationId: op.id,
|
|
343
|
-
dataTransformName: op.name,
|
|
344
|
-
sql: plan.sql,
|
|
345
|
-
sqlState: error.sqlState,
|
|
346
|
-
},
|
|
347
|
-
},
|
|
348
|
-
);
|
|
349
|
-
}
|
|
350
|
-
throw error;
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
// Step 3: Post-run validation (check again)
|
|
356
|
-
if (op.check !== null && op.check !== false) {
|
|
357
|
-
const checkResult = await driver.query(op.check.sql, op.check.params);
|
|
358
|
-
if (checkResult.rows.length > 0) {
|
|
359
|
-
return runnerFailure(
|
|
360
|
-
'POSTCHECK_FAILED',
|
|
361
|
-
`Data transform "${op.name}" did not resolve all violations (${checkResult.rows.length} remaining)`,
|
|
362
|
-
{
|
|
363
|
-
why: `After executing the data transform, the check query still returns ${checkResult.rows.length} violation(s).`,
|
|
364
|
-
meta: {
|
|
365
|
-
operationId: op.id,
|
|
366
|
-
dataTransformName: op.name,
|
|
367
|
-
remainingViolations: checkResult.rows.length,
|
|
368
|
-
},
|
|
369
|
-
},
|
|
370
|
-
);
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
return okVoid();
|
|
375
|
-
}
|
|
376
|
-
|
|
377
272
|
private async ensureControlTables(
|
|
378
273
|
driver: SqlMigrationRunnerExecuteOptions<PostgresPlanTargetDetails>['driver'],
|
|
379
274
|
): Promise<void> {
|
|
@@ -389,7 +284,7 @@ class PostgresMigrationRunner implements SqlMigrationRunner<PostgresPlanTargetDe
|
|
|
389
284
|
phase: 'precheck' | 'postcheck',
|
|
390
285
|
): Promise<Result<void, SqlMigrationRunnerFailure>> {
|
|
391
286
|
for (const step of steps) {
|
|
392
|
-
const result = await driver.query(step.sql);
|
|
287
|
+
const result = await driver.query(step.sql, step.params ?? []);
|
|
393
288
|
if (!this.stepResultIsTrue(result.rows)) {
|
|
394
289
|
const code = phase === 'precheck' ? 'PRECHECK_FAILED' : 'POSTCHECK_FAILED';
|
|
395
290
|
return runnerFailure(
|
|
@@ -415,7 +310,7 @@ class PostgresMigrationRunner implements SqlMigrationRunner<PostgresPlanTargetDe
|
|
|
415
310
|
): Promise<Result<void, SqlMigrationRunnerFailure>> {
|
|
416
311
|
for (const step of steps) {
|
|
417
312
|
try {
|
|
418
|
-
await driver.query(step.sql);
|
|
313
|
+
await driver.query(step.sql, step.params ?? []);
|
|
419
314
|
} catch (error: unknown) {
|
|
420
315
|
// Catch SqlQueryError and include normalized metadata
|
|
421
316
|
if (SqlQueryError.is(error)) {
|
|
@@ -479,7 +374,7 @@ class PostgresMigrationRunner implements SqlMigrationRunner<PostgresPlanTargetDe
|
|
|
479
374
|
return false;
|
|
480
375
|
}
|
|
481
376
|
for (const step of steps) {
|
|
482
|
-
const result = await driver.query(step.sql);
|
|
377
|
+
const result = await driver.query(step.sql, step.params ?? []);
|
|
483
378
|
if (!this.stepResultIsTrue(result.rows)) {
|
|
484
379
|
return false;
|
|
485
380
|
}
|
|
@@ -651,7 +546,7 @@ class PostgresMigrationRunner implements SqlMigrationRunner<PostgresPlanTargetDe
|
|
|
651
546
|
options: SqlMigrationRunnerExecuteOptions<PostgresPlanTargetDetails>,
|
|
652
547
|
existingMarker: ContractMarkerRecord | null,
|
|
653
548
|
): Promise<void> {
|
|
654
|
-
const incomingInvariants = options.plan.providedInvariants;
|
|
549
|
+
const incomingInvariants = options.plan.providedInvariants ?? [];
|
|
655
550
|
const writeStatements = buildMergeMarkerStatements({
|
|
656
551
|
storageHash: options.plan.destination.storageHash,
|
|
657
552
|
profileHash:
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codecs-CE5EUsNM.d.mts","names":[],"sources":["../src/core/codecs.ts"],"sourcesContent":[],"mappings":";;;;;;cA2kBM,8CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+BC;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA/BD,SAAA,KAAA,OAAA,CAAA,aAAA,EAAA,SAAA,CAAA,UAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,MAAA,EAAA,MAAA,QAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,CAAA;IA+BC,SAAA,KAAA,EAA0C,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAC1C,SAA4B,MAAA,EAAA,QAAA;IAE7B,SAAU,KAAA,OAAA,CAAU,aAAO,EAAA,SAAU,CAAA,UAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,MAAA,EAAA,MAAA,QAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAFpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAED,UAAA,UAAoB,MAAA,CAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codecs-dzZ_dMpK.mjs","names":["arktype"],"sources":["../src/core/codecs.ts"],"sourcesContent":["/**\n * Unified codec definitions for Postgres adapter.\n *\n * This file contains a single source of truth for all codec information:\n * - Scalar names\n * - Type IDs\n * - Codec implementations (runtime)\n * - Type information (compile-time)\n *\n * This structure is used both at runtime (to populate the registry) and\n * at compile time (to derive CodecTypes).\n */\n\nimport type { JsonValue } from '@prisma-next/contract/types';\nimport type { Codec, CodecMeta, CodecTrait } from '@prisma-next/sql-relational-core/ast';\nimport { codec, defineCodecs, sqlCodecDefinitions } from '@prisma-next/sql-relational-core/ast';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { type as arktype } from 'arktype';\nimport {\n PG_BIT_CODEC_ID,\n PG_BOOL_CODEC_ID,\n PG_CHAR_CODEC_ID,\n PG_ENUM_CODEC_ID,\n PG_FLOAT_CODEC_ID,\n PG_FLOAT4_CODEC_ID,\n PG_FLOAT8_CODEC_ID,\n PG_INT_CODEC_ID,\n PG_INT2_CODEC_ID,\n PG_INT4_CODEC_ID,\n PG_INT8_CODEC_ID,\n PG_INTERVAL_CODEC_ID,\n PG_JSON_CODEC_ID,\n PG_JSONB_CODEC_ID,\n PG_NUMERIC_CODEC_ID,\n PG_TEXT_CODEC_ID,\n PG_TIME_CODEC_ID,\n PG_TIMESTAMP_CODEC_ID,\n PG_TIMESTAMPTZ_CODEC_ID,\n PG_TIMETZ_CODEC_ID,\n PG_VARBIT_CODEC_ID,\n PG_VARCHAR_CODEC_ID,\n} from './codec-ids';\n\nconst lengthParamsSchema = arktype({\n length: 'number.integer > 0',\n});\n\nconst numericParamsSchema = arktype({\n precision: 'number.integer > 0 & number.integer <= 1000',\n 'scale?': 'number.integer >= 0',\n});\n\nconst precisionParamsSchema = arktype({\n 'precision?': 'number.integer >= 0 & number.integer <= 6',\n});\n\nfunction renderLength(typeName: string, typeParams: Record<string, unknown>): string | undefined {\n const length = typeParams['length'];\n if (length === undefined) {\n return undefined;\n }\n if (typeof length !== 'number' || !Number.isFinite(length) || !Number.isInteger(length)) {\n throw new Error(\n `renderOutputType: expected integer \"length\" in typeParams for ${typeName}, got ${String(length)}`,\n );\n }\n return `${typeName}<${length}>`;\n}\n\nfunction renderPrecision(typeName: string, typeParams: Record<string, unknown>): string {\n const precision = typeParams['precision'];\n if (precision === undefined) {\n return typeName;\n }\n if (\n typeof precision !== 'number' ||\n !Number.isFinite(precision) ||\n !Number.isInteger(precision)\n ) {\n throw new Error(\n `renderOutputType: expected integer \"precision\" in typeParams for ${typeName}, got ${String(precision)}`,\n );\n }\n return `${typeName}<${precision}>`;\n}\n\n// Phase C: postgres' raw json/jsonb codecs no longer carry a\n// `renderOutputType` slot — the schema-typed JSON surface that drove\n// `typeParams: { schemaJson, type? }` retired in favor of the per-library\n// extension package (`@prisma-next/extension-arktype-json`). Untyped\n// json/jsonb columns have no typeParams; the framework emit path falls\n// through to the generic `CodecTypes['pg/jsonb@1']['output']` accessor\n// (which resolves to `JsonValue` via the codec-types map).\n\nfunction aliasCodec<\n Id extends string,\n TTraits extends readonly CodecTrait[],\n TWire,\n TJs,\n TParams,\n THelper,\n>(\n base: Codec<string, TTraits, TWire, TJs, TParams, THelper>,\n options: {\n readonly typeId: Id;\n readonly targetTypes: readonly string[];\n readonly meta?: CodecMeta;\n },\n): Codec<Id, TTraits, TWire, TJs, TParams, THelper> {\n return {\n id: options.typeId,\n targetTypes: options.targetTypes,\n ...ifDefined('meta', options.meta),\n ...ifDefined('paramsSchema', base.paramsSchema),\n ...ifDefined('init', base.init),\n ...ifDefined('encode', base.encode),\n ...ifDefined('traits', base.traits),\n ...ifDefined('renderOutputType', base.renderOutputType),\n decode: base.decode,\n encodeJson: base.encodeJson,\n decodeJson: base.decodeJson,\n } as Codec<Id, TTraits, TWire, TJs, TParams, THelper>;\n}\n\nconst sqlCharCodec = sqlCodecDefinitions.char.codec;\nconst sqlVarcharCodec = sqlCodecDefinitions.varchar.codec;\nconst sqlIntCodec = sqlCodecDefinitions.int.codec;\nconst sqlFloatCodec = sqlCodecDefinitions.float.codec;\nconst sqlTextCodec = sqlCodecDefinitions.text.codec;\nconst sqlTimestampCodec = sqlCodecDefinitions.timestamp.codec;\n\n// Create individual codec instances\nconst pgTextCodec = codec({\n typeId: PG_TEXT_CODEC_ID,\n targetTypes: ['text'],\n traits: ['equality', 'order', 'textual'],\n encode: (value: string): string => value,\n decode: (wire: string): string => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'text',\n },\n },\n },\n },\n});\n\nconst pgCharCodec = aliasCodec(sqlCharCodec, {\n typeId: PG_CHAR_CODEC_ID,\n targetTypes: ['character'],\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'character',\n },\n },\n },\n },\n});\n\nconst pgVarcharCodec = aliasCodec(sqlVarcharCodec, {\n typeId: PG_VARCHAR_CODEC_ID,\n targetTypes: ['character varying'],\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'character varying',\n },\n },\n },\n },\n});\n\nconst pgIntCodec = aliasCodec(sqlIntCodec, {\n typeId: PG_INT_CODEC_ID,\n targetTypes: ['int4'],\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'integer',\n },\n },\n },\n },\n});\n\nconst pgFloatCodec = aliasCodec(sqlFloatCodec, {\n typeId: PG_FLOAT_CODEC_ID,\n targetTypes: ['float8'],\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'double precision',\n },\n },\n },\n },\n});\n\nconst pgInt4Codec = codec({\n typeId: PG_INT4_CODEC_ID,\n targetTypes: ['int4'],\n traits: ['equality', 'order', 'numeric'],\n encode: (value: number): number => value,\n decode: (wire: number): number => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'integer',\n },\n },\n },\n },\n});\n\nconst pgNumericCodec = codec<\n typeof PG_NUMERIC_CODEC_ID,\n readonly ['equality', 'order', 'numeric'],\n string,\n string\n>({\n typeId: PG_NUMERIC_CODEC_ID,\n targetTypes: ['numeric', 'decimal'],\n traits: ['equality', 'order', 'numeric'],\n encode: (value: string): string => value,\n decode: (wire: string | number): string => {\n if (typeof wire === 'number') return String(wire);\n return wire;\n },\n paramsSchema: numericParamsSchema,\n renderOutputType: (typeParams) => {\n const precision = typeParams['precision'];\n if (precision === undefined) return undefined;\n if (\n typeof precision !== 'number' ||\n !Number.isFinite(precision) ||\n !Number.isInteger(precision)\n ) {\n throw new Error(\n `renderOutputType: expected integer \"precision\" in typeParams for Numeric, got ${String(precision)}`,\n );\n }\n const scale = typeParams['scale'];\n return typeof scale === 'number' ? `Numeric<${precision}, ${scale}>` : `Numeric<${precision}>`;\n },\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'numeric',\n },\n },\n },\n },\n});\n\nconst pgInt2Codec = codec({\n typeId: PG_INT2_CODEC_ID,\n targetTypes: ['int2'],\n traits: ['equality', 'order', 'numeric'],\n encode: (value: number): number => value,\n decode: (wire: number): number => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'smallint',\n },\n },\n },\n },\n});\n\nconst pgInt8Codec = codec({\n typeId: PG_INT8_CODEC_ID,\n targetTypes: ['int8'],\n traits: ['equality', 'order', 'numeric'],\n encode: (value: number): number => value,\n decode: (wire: number): number => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'bigint',\n },\n },\n },\n },\n});\n\nconst pgFloat4Codec = codec({\n typeId: PG_FLOAT4_CODEC_ID,\n targetTypes: ['float4'],\n traits: ['equality', 'order', 'numeric'],\n encode: (value: number): number => value,\n decode: (wire: number): number => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'real',\n },\n },\n },\n },\n});\n\nconst pgFloat8Codec = codec({\n typeId: PG_FLOAT8_CODEC_ID,\n targetTypes: ['float8'],\n traits: ['equality', 'order', 'numeric'],\n encode: (value: number): number => value,\n decode: (wire: number): number => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'double precision',\n },\n },\n },\n },\n});\n\nconst pgTimestampCodec = codec<\n typeof PG_TIMESTAMP_CODEC_ID,\n readonly ['equality', 'order'],\n Date,\n Date\n>({\n typeId: PG_TIMESTAMP_CODEC_ID,\n targetTypes: ['timestamp'],\n traits: ['equality', 'order'],\n encode: (value: Date): Date => value,\n decode: (wire: Date): Date => wire,\n encodeJson: (value: Date) => value.toISOString(),\n decodeJson: (json) => {\n if (typeof json !== 'string') {\n throw new Error(`Expected ISO date string for pg/timestamp@1, got ${typeof json}`);\n }\n const date = new Date(json);\n if (Number.isNaN(date.getTime())) {\n throw new Error(`Invalid ISO date string for pg/timestamp@1: ${json}`);\n }\n return date;\n },\n paramsSchema: precisionParamsSchema,\n renderOutputType: (typeParams) => renderPrecision('Timestamp', typeParams),\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'timestamp without time zone',\n },\n },\n },\n },\n});\n\nconst pgTimestamptzCodec = codec<\n typeof PG_TIMESTAMPTZ_CODEC_ID,\n readonly ['equality', 'order'],\n Date,\n Date\n>({\n typeId: PG_TIMESTAMPTZ_CODEC_ID,\n targetTypes: ['timestamptz'],\n traits: ['equality', 'order'],\n encode: (value: Date): Date => value,\n decode: (wire: Date): Date => wire,\n encodeJson: (value: Date) => value.toISOString(),\n decodeJson: (json) => {\n if (typeof json !== 'string') {\n throw new Error(`Expected ISO date string for pg/timestamptz@1, got ${typeof json}`);\n }\n const date = new Date(json);\n if (Number.isNaN(date.getTime())) {\n throw new Error(`Invalid ISO date string for pg/timestamptz@1: ${json}`);\n }\n return date;\n },\n paramsSchema: precisionParamsSchema,\n renderOutputType: (typeParams) => renderPrecision('Timestamptz', typeParams),\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'timestamp with time zone',\n },\n },\n },\n },\n});\n\nconst pgTimeCodec = codec<typeof PG_TIME_CODEC_ID, readonly ['equality', 'order'], string, string>({\n typeId: PG_TIME_CODEC_ID,\n targetTypes: ['time'],\n traits: ['equality', 'order'],\n encode: (value: string): string => value,\n decode: (wire: string): string => wire,\n paramsSchema: precisionParamsSchema,\n renderOutputType: (typeParams) => renderPrecision('Time', typeParams),\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'time',\n },\n },\n },\n },\n});\n\nconst pgTimetzCodec = codec<\n typeof PG_TIMETZ_CODEC_ID,\n readonly ['equality', 'order'],\n string,\n string\n>({\n typeId: PG_TIMETZ_CODEC_ID,\n targetTypes: ['timetz'],\n traits: ['equality', 'order'],\n encode: (value: string): string => value,\n decode: (wire: string): string => wire,\n paramsSchema: precisionParamsSchema,\n renderOutputType: (typeParams) => renderPrecision('Timetz', typeParams),\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'timetz',\n },\n },\n },\n },\n});\n\nconst pgBoolCodec = codec({\n typeId: PG_BOOL_CODEC_ID,\n targetTypes: ['bool'],\n traits: ['equality', 'boolean'],\n encode: (value: boolean): boolean => value,\n decode: (wire: boolean): boolean => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'boolean',\n },\n },\n },\n },\n});\n\nconst pgBitCodec = codec<typeof PG_BIT_CODEC_ID, readonly ['equality', 'order'], string, string>({\n typeId: PG_BIT_CODEC_ID,\n targetTypes: ['bit'],\n traits: ['equality', 'order'],\n encode: (value: string): string => value,\n decode: (wire: string): string => wire,\n paramsSchema: lengthParamsSchema,\n renderOutputType: (typeParams) => renderLength('Bit', typeParams),\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'bit',\n },\n },\n },\n },\n});\n\nconst pgVarbitCodec = codec<\n typeof PG_VARBIT_CODEC_ID,\n readonly ['equality', 'order'],\n string,\n string\n>({\n typeId: PG_VARBIT_CODEC_ID,\n targetTypes: ['bit varying'],\n traits: ['equality', 'order'],\n encode: (value: string): string => value,\n decode: (wire: string): string => wire,\n paramsSchema: lengthParamsSchema,\n renderOutputType: (typeParams) => renderLength('VarBit', typeParams),\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'bit varying',\n },\n },\n },\n },\n});\n\nconst pgEnumCodec = codec({\n typeId: PG_ENUM_CODEC_ID,\n targetTypes: ['enum'],\n traits: ['equality', 'order'],\n encode: (value: string): string => value,\n decode: (wire: string): string => wire,\n renderOutputType: (typeParams) => {\n const values = typeParams['values'];\n if (!Array.isArray(values)) {\n throw new Error(\n `renderOutputType: expected array \"values\" in typeParams for enum, got ${typeof values}`,\n );\n }\n return values\n .map((value) => `'${String(value).replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`)\n .join(' | ');\n },\n});\n\nconst pgIntervalCodec = codec<\n typeof PG_INTERVAL_CODEC_ID,\n readonly ['equality', 'order'],\n string | Record<string, unknown>,\n string\n>({\n typeId: PG_INTERVAL_CODEC_ID,\n targetTypes: ['interval'],\n traits: ['equality', 'order'],\n encode: (value: string): string => value,\n decode: (wire: string | Record<string, unknown>): string => {\n if (typeof wire === 'string') return wire;\n return JSON.stringify(wire);\n },\n paramsSchema: precisionParamsSchema,\n renderOutputType: (typeParams) => renderPrecision('Interval', typeParams),\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'interval',\n },\n },\n },\n },\n});\n\nconst pgJsonCodec = codec({\n typeId: PG_JSON_CODEC_ID,\n targetTypes: ['json'],\n traits: [],\n encode: (value: string | JsonValue): string => JSON.stringify(value),\n decode: (wire: string | JsonValue): JsonValue =>\n typeof wire === 'string' ? JSON.parse(wire) : wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'json',\n },\n },\n },\n },\n});\n\nconst pgJsonbCodec = codec({\n typeId: PG_JSONB_CODEC_ID,\n targetTypes: ['jsonb'],\n traits: ['equality'],\n encode: (value: string | JsonValue): string => JSON.stringify(value),\n decode: (wire: string | JsonValue): JsonValue =>\n typeof wire === 'string' ? JSON.parse(wire) : wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'jsonb',\n },\n },\n },\n },\n});\n\n// Build codec definitions using the builder DSL\nconst codecs = defineCodecs()\n .add('char', sqlCharCodec)\n .add('varchar', sqlVarcharCodec)\n .add('int', sqlIntCodec)\n .add('float', sqlFloatCodec)\n .add('sql-text', sqlTextCodec)\n .add('sql-timestamp', sqlTimestampCodec)\n .add('text', pgTextCodec)\n .add('character', pgCharCodec)\n .add('character varying', pgVarcharCodec)\n .add('integer', pgIntCodec)\n .add('double precision', pgFloatCodec)\n .add('int4', pgInt4Codec)\n .add('int2', pgInt2Codec)\n .add('int8', pgInt8Codec)\n .add('float4', pgFloat4Codec)\n .add('float8', pgFloat8Codec)\n .add('numeric', pgNumericCodec)\n .add('timestamp', pgTimestampCodec)\n .add('timestamptz', pgTimestamptzCodec)\n .add('time', pgTimeCodec)\n .add('timetz', pgTimetzCodec)\n .add('bool', pgBoolCodec)\n .add('bit', pgBitCodec)\n .add('bit varying', pgVarbitCodec)\n .add('interval', pgIntervalCodec)\n .add('enum', pgEnumCodec)\n .add('json', pgJsonCodec)\n .add('jsonb', pgJsonbCodec);\n\n// Export derived structures directly from codecs builder\nexport const codecDefinitions = codecs.codecDefinitions;\nexport const dataTypes = codecs.dataTypes;\n\nexport type CodecTypes = typeof codecs.CodecTypes;\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-transform-C83dy0vk.mjs","names":["runClosures: readonly DataTransformClosure[]"],"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.count().where(({ email }) => email.isNull()),\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 for `ops.json`. The free factory remains usable standalone\n * (tests, ad-hoc tooling, non-class contexts) by passing the adapter\n * explicitly as the fourth argument.\n */\n\nimport type { Contract } from '@prisma-next/contract/types';\nimport { errorDataTransformContractMismatch } from '@prisma-next/errors/migration';\nimport type { SqlControlAdapter } from '@prisma-next/family-sql/control-adapter';\nimport type {\n DataTransformOperation,\n SerializedQueryPlan,\n} 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';\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 /** Optional pre-flight query. `undefined` means \"no check\". */\n readonly check?: DataTransformClosure;\n /** One or more mutation queries to execute. */\n readonly run: DataTransformClosure | readonly DataTransformClosure[];\n}\n\n/**\n * Concrete Postgres flavor of `DataTransformOperation`, re-exported so the\n * `PostgresMigration.dataTransform` instance method can name it without\n * leaking the framework-components symbol into call sites.\n */\nexport type PostgresDataTransformOperation = DataTransformOperation;\n\nexport function dataTransform<TContract extends Contract<SqlStorage>>(\n contract: TContract,\n name: string,\n options: DataTransformOptions,\n adapter: SqlControlAdapter<'postgres'>,\n): DataTransformOperation {\n const runClosures: readonly DataTransformClosure[] = Array.isArray(options.run)\n ? options.run\n : [options.run as DataTransformClosure];\n return {\n id: `data_migration.${name}`,\n label: `Data transform: ${name}`,\n operationClass: 'data',\n name,\n ...ifDefined('invariantId', options.invariantId),\n source: 'migration.ts',\n check: options.check ? invokeAndLower(options.check, contract, adapter, name) : null,\n run: runClosures.map((closure) => invokeAndLower(closure, contract, adapter, name)),\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":";;;;AAuEA,SAAgB,cACd,UACA,MACA,SACA,SACwB;CACxB,MAAMA,cAA+C,MAAM,QAAQ,QAAQ,IAAI,GAC3E,QAAQ,MACR,CAAC,QAAQ,IAA4B;AACzC,QAAO;EACL,IAAI,kBAAkB;EACtB,OAAO,mBAAmB;EAC1B,gBAAgB;EAChB;EACA,GAAG,UAAU,eAAe,QAAQ,YAAY;EAChD,QAAQ;EACR,OAAO,QAAQ,QAAQ,eAAe,QAAQ,OAAO,UAAU,SAAS,KAAK,GAAG;EAChF,KAAK,YAAY,KAAK,YAAY,eAAe,SAAS,UAAU,SAAS,KAAK,CAAC;EACpF;;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-D8x5m1YV.d.mts","names":[],"sources":["../src/core/migrations/operations/data-transform.ts"],"sourcesContent":[],"mappings":";;;;;;;;UAyCU;WACC,aAAa;;;;;;KAOZ,oBAAA,SAA6B,eAAe;UAEvC,oBAAA;;;;;;;;mBAQE;;gBAEH,gCAAgC;;;;;;;KAQpC,8BAAA,GAAiC;iBAE7B,gCAAgC,SAAS,uBAC7C,kCAED,+BACA,gCACR"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"planner-produced-postgres-migration-Dw_mPMKt.d.mts","names":[],"sources":["../src/core/migrations/planner-produced-postgres-migration.ts"],"sourcesContent":[],"mappings":";;;;;;;;;KAmCK,EAAA,GAAK,0BAA0B;cAEvB,qCAAA,SACH,iBAAA,YACG;;8BAKiB,+BAA+B;6BAMvB;cAIf"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-migration-DcfWGqhe.d.mts","names":[],"sources":["../src/core/migrations/postgres-migration.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;AAiCA;;;;;;;;;;;;;;;;;;uBAAsB,iBAAA,SAA0B,UAC9C;;;;;;;;qCAWmC;sBAEf;;;;;;4CAesB,SAAS,uBACvC,kCAED,uBACR"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-migration-EGSlO4jO.mjs","names":["SqlMigration"],"sources":["../src/core/migrations/postgres-migration.ts"],"sourcesContent":["import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlControlAdapter } from '@prisma-next/family-sql/control-adapter';\nimport { Migration as SqlMigration } from '@prisma-next/family-sql/migration';\nimport type { ControlStack } from '@prisma-next/framework-components/control';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport { errorPostgresMigrationStackMissing } from '../errors';\nimport {\n type DataTransformOptions,\n dataTransform,\n type PostgresDataTransformOperation,\n} from './operations/data-transform';\nimport type { PostgresPlanTargetDetails } from './planner-target-details';\n\n/**\n * Target-owned base class for Postgres migrations.\n *\n * Fixes the `SqlMigration` generic to `PostgresPlanTargetDetails` and the\n * abstract `targetId` to the Postgres target-id string literal, so both\n * user-authored migrations and renderer-generated scaffolds (the output of\n * `renderCallsToTypeScript`) can extend `PostgresMigration` directly without\n * redeclaring target-local identity.\n *\n * Mirrors `MongoMigration` in `@prisma-next/family-mongo`: the renderer\n * emits `extends Migration` against a target-specific re-export of this\n * class from `@prisma-next/target-postgres/migration`, keeping the\n * authoring surface target-scoped rather than family-scoped.\n *\n * The constructor materializes a single Postgres `SqlControlAdapter` from\n * `stack.adapter.create(stack)` and stores it; the protected `dataTransform`\n * instance method forwards to the free `dataTransform` factory with that\n * stored adapter, so user migrations can write `this.dataTransform(...)`\n * without threading the adapter through every call.\n */\nexport abstract class PostgresMigration extends SqlMigration<\n PostgresPlanTargetDetails,\n 'postgres'\n> {\n readonly targetId = 'postgres' as const;\n\n /**\n * Materialized Postgres control adapter, created once per migration\n * instance from the injected stack. `undefined` only when the migration\n * was instantiated without a stack (test fixtures); `dataTransform`\n * throws in that case to surface the misuse.\n */\n protected readonly controlAdapter: SqlControlAdapter<'postgres'> | undefined;\n\n constructor(stack?: ControlStack<'sql', 'postgres'>) {\n super(stack);\n // The descriptor `create()` is typed as the wider `ControlAdapterInstance`;\n // the Postgres descriptor concretely returns a `SqlControlAdapter<'postgres'>`,\n // so the cast holds for any Postgres-target stack assembled at runtime.\n this.controlAdapter = stack?.adapter\n ? (stack.adapter.create(stack) as SqlControlAdapter<'postgres'>)\n : undefined;\n }\n\n /**\n * Instance-method wrapper around the free `dataTransform` factory that\n * supplies the stored control adapter. Authors call this from inside\n * `get operations()`; the adapter argument is hidden from the call site.\n */\n protected dataTransform<TContract extends Contract<SqlStorage>>(\n contract: TContract,\n name: string,\n options: DataTransformOptions,\n ): PostgresDataTransformOperation {\n if (!this.controlAdapter) {\n throw errorPostgresMigrationStackMissing();\n }\n return dataTransform(contract, name, options, this.controlAdapter);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,IAAsB,oBAAtB,cAAgDA,UAG9C;CACA,AAAS,WAAW;;;;;;;CAQpB,AAAmB;CAEnB,YAAY,OAAyC;AACnD,QAAM,MAAM;AAIZ,OAAK,iBAAiB,OAAO,UACxB,MAAM,QAAQ,OAAO,MAAM,GAC5B;;;;;;;CAQN,AAAU,cACR,UACA,MACA,SACgC;AAChC,MAAI,CAAC,KAAK,eACR,OAAM,oCAAoC;AAE5C,SAAO,cAAc,UAAU,MAAM,SAAS,KAAK,eAAe"}
|