@prisma-next/family-sql 0.3.0-dev.5 → 0.3.0-dev.52

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.
Files changed (100) hide show
  1. package/README.md +12 -6
  2. package/dist/assembly-BVS641kd.mjs +106 -0
  3. package/dist/assembly-BVS641kd.mjs.map +1 -0
  4. package/dist/control-adapter.d.mts +60 -0
  5. package/dist/control-adapter.d.mts.map +1 -0
  6. package/dist/control-adapter.mjs +1 -0
  7. package/dist/control-instance-CWKSpACr.d.mts +292 -0
  8. package/dist/control-instance-CWKSpACr.d.mts.map +1 -0
  9. package/dist/control.d.mts +64 -0
  10. package/dist/control.d.mts.map +1 -0
  11. package/dist/control.mjs +536 -0
  12. package/dist/control.mjs.map +1 -0
  13. package/dist/runtime.d.mts +27 -0
  14. package/dist/runtime.d.mts.map +1 -0
  15. package/dist/runtime.mjs +38 -0
  16. package/dist/runtime.mjs.map +1 -0
  17. package/dist/schema-verify.d.mts +48 -0
  18. package/dist/schema-verify.d.mts.map +1 -0
  19. package/dist/schema-verify.mjs +4 -0
  20. package/dist/test-utils.d.mts +2 -0
  21. package/dist/test-utils.mjs +3 -0
  22. package/dist/verify-BfMETJcM.mjs +108 -0
  23. package/dist/verify-BfMETJcM.mjs.map +1 -0
  24. package/dist/verify-sql-schema-CpAVEi8A.mjs +1058 -0
  25. package/dist/verify-sql-schema-CpAVEi8A.mjs.map +1 -0
  26. package/dist/verify-sql-schema-DhHnkpPa.d.mts +67 -0
  27. package/dist/verify-sql-schema-DhHnkpPa.d.mts.map +1 -0
  28. package/dist/verify.d.mts +31 -0
  29. package/dist/verify.d.mts.map +1 -0
  30. package/dist/verify.mjs +3 -0
  31. package/package.json +36 -47
  32. package/src/core/assembly.ts +158 -59
  33. package/src/core/control-adapter.ts +15 -0
  34. package/src/core/control-descriptor.ts +37 -0
  35. package/src/core/{instance.ts → control-instance.ts} +108 -241
  36. package/src/core/migrations/types.ts +62 -163
  37. package/src/core/runtime-descriptor.ts +19 -41
  38. package/src/core/runtime-instance.ts +11 -133
  39. package/src/core/schema-verify/verify-helpers.ts +187 -97
  40. package/src/core/schema-verify/verify-sql-schema.ts +910 -392
  41. package/src/core/verify.ts +4 -13
  42. package/src/exports/control.ts +9 -6
  43. package/src/exports/runtime.ts +2 -6
  44. package/src/exports/schema-verify.ts +10 -2
  45. package/src/exports/test-utils.ts +0 -1
  46. package/dist/chunk-6K3RPBDP.js +0 -580
  47. package/dist/chunk-6K3RPBDP.js.map +0 -1
  48. package/dist/chunk-BHEGVBY7.js +0 -772
  49. package/dist/chunk-BHEGVBY7.js.map +0 -1
  50. package/dist/chunk-SU7LN2UH.js +0 -96
  51. package/dist/chunk-SU7LN2UH.js.map +0 -1
  52. package/dist/core/assembly.d.ts +0 -25
  53. package/dist/core/assembly.d.ts.map +0 -1
  54. package/dist/core/control-adapter.d.ts +0 -42
  55. package/dist/core/control-adapter.d.ts.map +0 -1
  56. package/dist/core/descriptor.d.ts +0 -31
  57. package/dist/core/descriptor.d.ts.map +0 -1
  58. package/dist/core/instance.d.ts +0 -142
  59. package/dist/core/instance.d.ts.map +0 -1
  60. package/dist/core/migrations/plan-helpers.d.ts +0 -20
  61. package/dist/core/migrations/plan-helpers.d.ts.map +0 -1
  62. package/dist/core/migrations/policies.d.ts +0 -6
  63. package/dist/core/migrations/policies.d.ts.map +0 -1
  64. package/dist/core/migrations/types.d.ts +0 -280
  65. package/dist/core/migrations/types.d.ts.map +0 -1
  66. package/dist/core/runtime-descriptor.d.ts +0 -19
  67. package/dist/core/runtime-descriptor.d.ts.map +0 -1
  68. package/dist/core/runtime-instance.d.ts +0 -54
  69. package/dist/core/runtime-instance.d.ts.map +0 -1
  70. package/dist/core/schema-verify/verify-helpers.d.ts +0 -50
  71. package/dist/core/schema-verify/verify-helpers.d.ts.map +0 -1
  72. package/dist/core/schema-verify/verify-sql-schema.d.ts +0 -45
  73. package/dist/core/schema-verify/verify-sql-schema.d.ts.map +0 -1
  74. package/dist/core/verify.d.ts +0 -39
  75. package/dist/core/verify.d.ts.map +0 -1
  76. package/dist/exports/control-adapter.d.ts +0 -2
  77. package/dist/exports/control-adapter.d.ts.map +0 -1
  78. package/dist/exports/control-adapter.js +0 -1
  79. package/dist/exports/control-adapter.js.map +0 -1
  80. package/dist/exports/control.d.ts +0 -13
  81. package/dist/exports/control.d.ts.map +0 -1
  82. package/dist/exports/control.js +0 -149
  83. package/dist/exports/control.js.map +0 -1
  84. package/dist/exports/runtime.d.ts +0 -8
  85. package/dist/exports/runtime.d.ts.map +0 -1
  86. package/dist/exports/runtime.js +0 -64
  87. package/dist/exports/runtime.js.map +0 -1
  88. package/dist/exports/schema-verify.d.ts +0 -11
  89. package/dist/exports/schema-verify.d.ts.map +0 -1
  90. package/dist/exports/schema-verify.js +0 -11
  91. package/dist/exports/schema-verify.js.map +0 -1
  92. package/dist/exports/test-utils.d.ts +0 -7
  93. package/dist/exports/test-utils.d.ts.map +0 -1
  94. package/dist/exports/test-utils.js +0 -17
  95. package/dist/exports/test-utils.js.map +0 -1
  96. package/dist/exports/verify.d.ts +0 -2
  97. package/dist/exports/verify.d.ts.map +0 -1
  98. package/dist/exports/verify.js +0 -11
  99. package/dist/exports/verify.js.map +0 -1
  100. package/src/core/descriptor.ts +0 -37
@@ -0,0 +1,536 @@
1
+ import { a as extractOperationTypeImports, i as extractExtensionIds, n as extractCodecControlHooks, o as extractParameterizedRenderers, r as extractCodecTypeImports, s as extractParameterizedTypeImports, t as assembleOperationRegistry } from "./assembly-BVS641kd.mjs";
2
+ import { t as verifySqlSchema } from "./verify-sql-schema-CpAVEi8A.mjs";
3
+ import { r as readMarker, t as collectSupportedCodecTypeIds } from "./verify-BfMETJcM.mjs";
4
+ import { sqlTargetFamilyHook } from "@prisma-next/sql-contract-emitter";
5
+ import { emit } from "@prisma-next/core-control-plane/emission";
6
+ import { validateContract } from "@prisma-next/sql-contract/validate";
7
+ import { ensureSchemaStatement, ensureTableStatement, writeContractMarker } from "@prisma-next/sql-runtime";
8
+ import { ifDefined } from "@prisma-next/utils/defined";
9
+ import { notOk, ok } from "@prisma-next/utils/result";
10
+
11
+ //#region src/core/control-instance.ts
12
+ function extractCodecTypeIdsFromContract(contract) {
13
+ const typeIds = /* @__PURE__ */ new Set();
14
+ if (typeof contract === "object" && contract !== null && "storage" in contract && typeof contract.storage === "object" && contract.storage !== null && "tables" in contract.storage) {
15
+ const storage = contract.storage;
16
+ if (storage.tables && typeof storage.tables === "object") {
17
+ for (const table of Object.values(storage.tables)) if (typeof table === "object" && table !== null && "columns" in table && typeof table.columns === "object" && table.columns !== null) {
18
+ const columns = table.columns;
19
+ for (const column of Object.values(columns)) if (column && typeof column === "object" && "codecId" in column && typeof column.codecId === "string") typeIds.add(column.codecId);
20
+ }
21
+ }
22
+ }
23
+ return Array.from(typeIds).sort();
24
+ }
25
+ function createVerifyResult(options) {
26
+ const contract = { storageHash: options.contractStorageHash };
27
+ if (options.contractProfileHash) contract.profileHash = options.contractProfileHash;
28
+ const target = { expected: options.expectedTargetId };
29
+ if (options.actualTargetId) target.actual = options.actualTargetId;
30
+ const meta = { contractPath: options.contractPath };
31
+ if (options.configPath) meta.configPath = options.configPath;
32
+ const result = {
33
+ ok: options.ok,
34
+ summary: options.summary,
35
+ contract,
36
+ target,
37
+ meta,
38
+ timings: { total: options.totalTime }
39
+ };
40
+ if (options.code) result.code = options.code;
41
+ if (options.marker) result.marker = {
42
+ storageHash: options.marker.storageHash,
43
+ profileHash: options.marker.profileHash
44
+ };
45
+ if (options.missingCodecs) result.missingCodecs = options.missingCodecs;
46
+ if (options.codecCoverageSkipped) result.codecCoverageSkipped = options.codecCoverageSkipped;
47
+ return result;
48
+ }
49
+ function isSqlControlAdapter(value) {
50
+ return typeof value === "object" && value !== null && "introspect" in value && typeof value.introspect === "function";
51
+ }
52
+ function buildSqlTypeMetadataRegistry(options) {
53
+ const { target, adapter, extensionPacks: extensions } = options;
54
+ const registry = /* @__PURE__ */ new Map();
55
+ const targetId = adapter.targetId;
56
+ const descriptors = [
57
+ target,
58
+ adapter,
59
+ ...extensions
60
+ ];
61
+ for (const descriptor of descriptors) {
62
+ const storageTypes = descriptor.types?.storage;
63
+ if (!storageTypes) continue;
64
+ for (const storageType of storageTypes) if (storageType.familyId === "sql" && storageType.targetId === targetId) registry.set(storageType.typeId, {
65
+ typeId: storageType.typeId,
66
+ familyId: "sql",
67
+ targetId: storageType.targetId,
68
+ ...storageType.nativeType !== void 0 ? { nativeType: storageType.nativeType } : {}
69
+ });
70
+ }
71
+ return registry;
72
+ }
73
+ function createSqlFamilyInstance(options) {
74
+ const { target, adapter, extensionPacks: extensions = [] } = options;
75
+ const descriptors = [
76
+ target,
77
+ adapter,
78
+ ...extensions
79
+ ];
80
+ const operationRegistry = assembleOperationRegistry(descriptors);
81
+ const codecTypeImports = extractCodecTypeImports(descriptors);
82
+ const operationTypeImports = extractOperationTypeImports(descriptors);
83
+ const extensionIds = extractExtensionIds(adapter, target, extensions);
84
+ const parameterizedRenderers = extractParameterizedRenderers(descriptors);
85
+ const parameterizedTypeImports = extractParameterizedTypeImports(descriptors);
86
+ const typeMetadataRegistry = buildSqlTypeMetadataRegistry({
87
+ target,
88
+ adapter,
89
+ extensionPacks: extensions
90
+ });
91
+ function stripMappings(contract) {
92
+ if (typeof contract === "object" && contract !== null && "mappings" in contract) {
93
+ const { mappings: _mappings, ...contractIR } = contract;
94
+ return contractIR;
95
+ }
96
+ return contract;
97
+ }
98
+ function normalizeProviderContractIR(contract) {
99
+ const { mappings: _mappings, ...contractIR } = validateContract(stripMappings(contract));
100
+ return contractIR;
101
+ }
102
+ return {
103
+ familyId: "sql",
104
+ operationRegistry,
105
+ codecTypeImports,
106
+ operationTypeImports,
107
+ extensionIds,
108
+ typeMetadataRegistry,
109
+ validateContractIR(contractJson) {
110
+ return normalizeProviderContractIR(contractJson);
111
+ },
112
+ async verify(verifyOptions) {
113
+ const { driver, contractIR, expectedTargetId, contractPath, configPath } = verifyOptions;
114
+ const startTime = Date.now();
115
+ if (typeof contractIR !== "object" || contractIR === null || !("storageHash" in contractIR) || !("target" in contractIR) || typeof contractIR.storageHash !== "string" || typeof contractIR.target !== "string") throw new Error("Contract is missing required fields: storageHash or target");
116
+ const contractStorageHash = contractIR.storageHash;
117
+ const contractProfileHash = "profileHash" in contractIR && typeof contractIR.profileHash === "string" ? contractIR.profileHash : void 0;
118
+ const contractTarget = contractIR.target;
119
+ const marker = await readMarker(driver);
120
+ let missingCodecs;
121
+ let codecCoverageSkipped = false;
122
+ const supportedTypeIds = collectSupportedCodecTypeIds([
123
+ adapter,
124
+ target,
125
+ ...extensions
126
+ ]);
127
+ if (supportedTypeIds.length === 0) codecCoverageSkipped = true;
128
+ else {
129
+ const supportedSet = new Set(supportedTypeIds);
130
+ const missing = extractCodecTypeIdsFromContract(contractIR).filter((id) => !supportedSet.has(id));
131
+ if (missing.length > 0) missingCodecs = missing;
132
+ }
133
+ if (!marker) return createVerifyResult({
134
+ ok: false,
135
+ code: "PN-RTM-3001",
136
+ summary: "Marker missing",
137
+ contractStorageHash,
138
+ expectedTargetId,
139
+ contractPath,
140
+ totalTime: Date.now() - startTime,
141
+ ...contractProfileHash ? { contractProfileHash } : {},
142
+ ...missingCodecs ? { missingCodecs } : {},
143
+ ...codecCoverageSkipped ? { codecCoverageSkipped } : {},
144
+ ...configPath ? { configPath } : {}
145
+ });
146
+ if (contractTarget !== expectedTargetId) return createVerifyResult({
147
+ ok: false,
148
+ code: "PN-RTM-3003",
149
+ summary: "Target mismatch",
150
+ contractStorageHash,
151
+ marker,
152
+ expectedTargetId,
153
+ actualTargetId: contractTarget,
154
+ contractPath,
155
+ totalTime: Date.now() - startTime,
156
+ ...contractProfileHash ? { contractProfileHash } : {},
157
+ ...missingCodecs ? { missingCodecs } : {},
158
+ ...codecCoverageSkipped ? { codecCoverageSkipped } : {},
159
+ ...configPath ? { configPath } : {}
160
+ });
161
+ if (marker.storageHash !== contractStorageHash) return createVerifyResult({
162
+ ok: false,
163
+ code: "PN-RTM-3002",
164
+ summary: "Hash mismatch",
165
+ contractStorageHash,
166
+ marker,
167
+ expectedTargetId,
168
+ contractPath,
169
+ totalTime: Date.now() - startTime,
170
+ ...contractProfileHash ? { contractProfileHash } : {},
171
+ ...missingCodecs ? { missingCodecs } : {},
172
+ ...codecCoverageSkipped ? { codecCoverageSkipped } : {},
173
+ ...configPath ? { configPath } : {}
174
+ });
175
+ if (contractProfileHash && marker.profileHash !== contractProfileHash) return createVerifyResult({
176
+ ok: false,
177
+ code: "PN-RTM-3002",
178
+ summary: "Hash mismatch",
179
+ contractStorageHash,
180
+ contractProfileHash,
181
+ marker,
182
+ expectedTargetId,
183
+ contractPath,
184
+ totalTime: Date.now() - startTime,
185
+ ...missingCodecs ? { missingCodecs } : {},
186
+ ...codecCoverageSkipped ? { codecCoverageSkipped } : {},
187
+ ...configPath ? { configPath } : {}
188
+ });
189
+ return createVerifyResult({
190
+ ok: true,
191
+ summary: "Database matches contract",
192
+ contractStorageHash,
193
+ marker,
194
+ expectedTargetId,
195
+ contractPath,
196
+ totalTime: Date.now() - startTime,
197
+ ...contractProfileHash ? { contractProfileHash } : {},
198
+ ...missingCodecs ? { missingCodecs } : {},
199
+ ...codecCoverageSkipped ? { codecCoverageSkipped } : {},
200
+ ...configPath ? { configPath } : {}
201
+ });
202
+ },
203
+ async schemaVerify(options$1) {
204
+ const { driver, contractIR, strict, context, frameworkComponents } = options$1;
205
+ const contract = validateContract(contractIR);
206
+ const controlAdapter = adapter.create();
207
+ if (!isSqlControlAdapter(controlAdapter)) throw new Error("Adapter does not implement SqlControlAdapter.introspect()");
208
+ return verifySqlSchema({
209
+ contract,
210
+ schema: await controlAdapter.introspect(driver, contractIR),
211
+ strict,
212
+ ...ifDefined("context", context),
213
+ typeMetadataRegistry,
214
+ frameworkComponents,
215
+ ...ifDefined("normalizeDefault", controlAdapter.normalizeDefault),
216
+ ...ifDefined("normalizeNativeType", controlAdapter.normalizeNativeType)
217
+ });
218
+ },
219
+ async sign(options$1) {
220
+ const { driver, contractIR, contractPath, configPath } = options$1;
221
+ const startTime = Date.now();
222
+ const contract = validateContract(contractIR);
223
+ const contractStorageHash = contract.storageHash;
224
+ const contractProfileHash = "profileHash" in contract && typeof contract.profileHash === "string" ? contract.profileHash : contractStorageHash;
225
+ const contractTarget = contract.target;
226
+ await driver.query(ensureSchemaStatement.sql, ensureSchemaStatement.params);
227
+ await driver.query(ensureTableStatement.sql, ensureTableStatement.params);
228
+ const existingMarker = await readMarker(driver);
229
+ let markerCreated = false;
230
+ let markerUpdated = false;
231
+ let previousHashes;
232
+ if (!existingMarker) {
233
+ const write = writeContractMarker({
234
+ storageHash: contractStorageHash,
235
+ profileHash: contractProfileHash,
236
+ contractJson: contractIR,
237
+ canonicalVersion: 1
238
+ });
239
+ await driver.query(write.insert.sql, write.insert.params);
240
+ markerCreated = true;
241
+ } else {
242
+ const existingStorageHash = existingMarker.storageHash;
243
+ const existingProfileHash = existingMarker.profileHash;
244
+ if (!(existingStorageHash === contractStorageHash) || !(existingProfileHash === contractProfileHash)) {
245
+ previousHashes = {
246
+ storageHash: existingStorageHash,
247
+ profileHash: existingProfileHash
248
+ };
249
+ const write = writeContractMarker({
250
+ storageHash: contractStorageHash,
251
+ profileHash: contractProfileHash,
252
+ contractJson: contractIR,
253
+ canonicalVersion: existingMarker.canonicalVersion ?? 1
254
+ });
255
+ await driver.query(write.update.sql, write.update.params);
256
+ markerUpdated = true;
257
+ }
258
+ }
259
+ let summary;
260
+ if (markerCreated) summary = "Database signed (marker created)";
261
+ else if (markerUpdated) summary = `Database signed (marker updated from ${previousHashes?.storageHash ?? "unknown"})`;
262
+ else summary = "Database already signed with this contract";
263
+ const totalTime = Date.now() - startTime;
264
+ return {
265
+ ok: true,
266
+ summary,
267
+ contract: {
268
+ storageHash: contractStorageHash,
269
+ profileHash: contractProfileHash
270
+ },
271
+ target: {
272
+ expected: contractTarget,
273
+ actual: contractTarget
274
+ },
275
+ marker: {
276
+ created: markerCreated,
277
+ updated: markerUpdated,
278
+ ...previousHashes ? { previous: previousHashes } : {}
279
+ },
280
+ meta: {
281
+ contractPath,
282
+ ...configPath ? { configPath } : {}
283
+ },
284
+ timings: { total: totalTime }
285
+ };
286
+ },
287
+ async readMarker(options$1) {
288
+ return readMarker(options$1.driver);
289
+ },
290
+ async introspect(options$1) {
291
+ const { driver, contractIR } = options$1;
292
+ const controlAdapter = adapter.create();
293
+ if (!isSqlControlAdapter(controlAdapter)) throw new Error("Adapter does not implement SqlControlAdapter.introspect()");
294
+ return controlAdapter.introspect(driver, contractIR);
295
+ },
296
+ toSchemaView(schema) {
297
+ const rootLabel = "contract";
298
+ const tableNodes = Object.entries(schema.tables).map(([tableName, table]) => {
299
+ const children = [];
300
+ const columnNodes = [];
301
+ for (const [columnName, column] of Object.entries(table.columns)) {
302
+ const label = `${columnName}: ${column.nativeType} (${column.nullable ? "nullable" : "not nullable"})`;
303
+ columnNodes.push({
304
+ kind: "field",
305
+ id: `column-${tableName}-${columnName}`,
306
+ label,
307
+ meta: {
308
+ nativeType: column.nativeType,
309
+ nullable: column.nullable,
310
+ ...ifDefined("default", column.default)
311
+ }
312
+ });
313
+ }
314
+ if (columnNodes.length > 0) children.push({
315
+ kind: "collection",
316
+ id: `columns-${tableName}`,
317
+ label: "columns",
318
+ children: columnNodes
319
+ });
320
+ if (table.primaryKey) {
321
+ const pkColumns = table.primaryKey.columns.join(", ");
322
+ children.push({
323
+ kind: "index",
324
+ id: `primary-key-${tableName}`,
325
+ label: `primary key: ${pkColumns}`,
326
+ meta: {
327
+ columns: table.primaryKey.columns,
328
+ ...table.primaryKey.name ? { name: table.primaryKey.name } : {}
329
+ }
330
+ });
331
+ }
332
+ for (const unique of table.uniques) {
333
+ const name = unique.name ?? `${tableName}_${unique.columns.join("_")}_unique`;
334
+ const label = `unique ${name}`;
335
+ children.push({
336
+ kind: "index",
337
+ id: `unique-${tableName}-${name}`,
338
+ label,
339
+ meta: {
340
+ columns: unique.columns,
341
+ unique: true
342
+ }
343
+ });
344
+ }
345
+ for (const index of table.indexes) {
346
+ const name = index.name ?? `${tableName}_${index.columns.join("_")}_idx`;
347
+ const label = index.unique ? `unique index ${name}` : `index ${name}`;
348
+ children.push({
349
+ kind: "index",
350
+ id: `index-${tableName}-${name}`,
351
+ label,
352
+ meta: {
353
+ columns: index.columns,
354
+ unique: index.unique
355
+ }
356
+ });
357
+ }
358
+ const tableMeta = {};
359
+ if (table.primaryKey) {
360
+ tableMeta["primaryKey"] = table.primaryKey.columns;
361
+ if (table.primaryKey.name) tableMeta["primaryKeyName"] = table.primaryKey.name;
362
+ }
363
+ if (table.foreignKeys.length > 0) tableMeta["foreignKeys"] = table.foreignKeys.map((fk) => ({
364
+ columns: fk.columns,
365
+ referencedTable: fk.referencedTable,
366
+ referencedColumns: fk.referencedColumns,
367
+ ...fk.name ? { name: fk.name } : {}
368
+ }));
369
+ return {
370
+ kind: "entity",
371
+ id: `table-${tableName}`,
372
+ label: `table ${tableName}`,
373
+ ...Object.keys(tableMeta).length > 0 ? { meta: tableMeta } : {},
374
+ ...children.length > 0 ? { children } : {}
375
+ };
376
+ });
377
+ const extensionNodes = schema.extensions.map((extName) => ({
378
+ kind: "extension",
379
+ id: `extension-${extName}`,
380
+ label: `${extName} extension is enabled`
381
+ }));
382
+ const rootChildren = [...tableNodes, ...extensionNodes];
383
+ return { root: {
384
+ kind: "root",
385
+ id: "sql-schema",
386
+ label: rootLabel,
387
+ ...rootChildren.length > 0 ? { children: rootChildren } : {}
388
+ } };
389
+ },
390
+ async emitContract({ contractIR }) {
391
+ const result = await emit(normalizeProviderContractIR(contractIR), {
392
+ outputDir: "",
393
+ operationRegistry,
394
+ codecTypeImports,
395
+ operationTypeImports,
396
+ extensionIds,
397
+ parameterizedRenderers,
398
+ parameterizedTypeImports
399
+ }, sqlTargetFamilyHook);
400
+ return {
401
+ contractJson: result.contractJson,
402
+ contractDts: result.contractDts,
403
+ storageHash: result.storageHash,
404
+ ...result.executionHash ? { executionHash: result.executionHash } : {},
405
+ profileHash: result.profileHash
406
+ };
407
+ }
408
+ };
409
+ }
410
+
411
+ //#endregion
412
+ //#region src/core/control-descriptor.ts
413
+ var SqlFamilyDescriptor = class {
414
+ kind = "family";
415
+ id = "sql";
416
+ familyId = "sql";
417
+ version = "0.0.1";
418
+ hook = sqlTargetFamilyHook;
419
+ create(stack) {
420
+ const target = stack.target;
421
+ const adapter = stack.adapter;
422
+ const extensionPacks = stack.extensionPacks;
423
+ return createSqlFamilyInstance({
424
+ target,
425
+ adapter,
426
+ extensionPacks
427
+ });
428
+ }
429
+ };
430
+
431
+ //#endregion
432
+ //#region src/core/migrations/plan-helpers.ts
433
+ const readOnlyEmptyObject = Object.freeze({});
434
+ function cloneRecord(value) {
435
+ if (value === readOnlyEmptyObject) return value;
436
+ return Object.freeze({ ...value });
437
+ }
438
+ function freezeSteps(steps) {
439
+ if (steps.length === 0) return Object.freeze([]);
440
+ return Object.freeze(steps.map((step) => Object.freeze({
441
+ description: step.description,
442
+ sql: step.sql,
443
+ ...step.meta ? { meta: cloneRecord(step.meta) } : {}
444
+ })));
445
+ }
446
+ function freezeDetailsValue(value) {
447
+ if (value === null || value === void 0) return value;
448
+ if (typeof value !== "object") return value;
449
+ if (Array.isArray(value)) return Object.freeze([...value]);
450
+ return Object.freeze({ ...value });
451
+ }
452
+ function freezeTargetDetails(target) {
453
+ return Object.freeze({
454
+ id: target.id,
455
+ ...target.details !== void 0 ? { details: freezeDetailsValue(target.details) } : {}
456
+ });
457
+ }
458
+ function freezeOperation(operation) {
459
+ return Object.freeze({
460
+ id: operation.id,
461
+ label: operation.label,
462
+ ...operation.summary ? { summary: operation.summary } : {},
463
+ operationClass: operation.operationClass,
464
+ target: freezeTargetDetails(operation.target),
465
+ precheck: freezeSteps(operation.precheck),
466
+ execute: freezeSteps(operation.execute),
467
+ postcheck: freezeSteps(operation.postcheck),
468
+ ...operation.meta ? { meta: cloneRecord(operation.meta) } : {}
469
+ });
470
+ }
471
+ function freezeOperations(operations) {
472
+ if (operations.length === 0) return Object.freeze([]);
473
+ return Object.freeze(operations.map((operation) => freezeOperation(operation)));
474
+ }
475
+ function createMigrationPlan(options) {
476
+ return Object.freeze({
477
+ targetId: options.targetId,
478
+ ...options.origin !== void 0 ? { origin: options.origin ? Object.freeze({ ...options.origin }) : null } : {},
479
+ destination: Object.freeze({ ...options.destination }),
480
+ operations: freezeOperations(options.operations),
481
+ ...options.meta ? { meta: cloneRecord(options.meta) } : {}
482
+ });
483
+ }
484
+ function plannerSuccess(plan) {
485
+ return Object.freeze({
486
+ kind: "success",
487
+ plan
488
+ });
489
+ }
490
+ function plannerFailure(conflicts) {
491
+ return Object.freeze({
492
+ kind: "failure",
493
+ conflicts: Object.freeze(conflicts.map((conflict) => Object.freeze({
494
+ kind: conflict.kind,
495
+ summary: conflict.summary,
496
+ ...conflict.why ? { why: conflict.why } : {},
497
+ ...conflict.location ? { location: Object.freeze({ ...conflict.location }) } : {},
498
+ ...conflict.meta ? { meta: cloneRecord(conflict.meta) } : {}
499
+ })))
500
+ });
501
+ }
502
+ /**
503
+ * Creates a successful migration runner result.
504
+ */
505
+ function runnerSuccess(value) {
506
+ return ok(Object.freeze({
507
+ operationsPlanned: value.operationsPlanned,
508
+ operationsExecuted: value.operationsExecuted
509
+ }));
510
+ }
511
+ /**
512
+ * Creates a failed migration runner result.
513
+ */
514
+ function runnerFailure(code, summary, options) {
515
+ return notOk(Object.freeze({
516
+ code,
517
+ summary,
518
+ ...options?.why ? { why: options.why } : {},
519
+ ...options?.meta ? { meta: cloneRecord(options.meta) } : {}
520
+ }));
521
+ }
522
+
523
+ //#endregion
524
+ //#region src/core/migrations/policies.ts
525
+ /**
526
+ * Policy used by `db init`: additive-only operations, no widening/destructive steps.
527
+ */
528
+ const INIT_ADDITIVE_POLICY = Object.freeze({ allowedOperationClasses: Object.freeze(["additive"]) });
529
+
530
+ //#endregion
531
+ //#region src/exports/control.ts
532
+ var control_default = new SqlFamilyDescriptor();
533
+
534
+ //#endregion
535
+ export { INIT_ADDITIVE_POLICY, createMigrationPlan, control_default as default, extractCodecControlHooks, plannerFailure, plannerSuccess, runnerFailure, runnerSuccess };
536
+ //# sourceMappingURL=control.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.mjs","names":["contract: { storageHash: string; profileHash?: string }","target: { expected: string; actual?: string }","meta: { contractPath: string; configPath?: string }","result: VerifyDatabaseResult","descriptors: SqlControlDescriptorWithContributions[]","missingCodecs: readonly string[] | undefined","options","previousHashes: { storageHash?: string; profileHash?: string } | undefined","summary: string","tableNodes: readonly SchemaTreeNode[]","children: SchemaTreeNode[]","columnNodes: SchemaTreeNode[]","tableMeta: Record<string, unknown>","extensionNodes: readonly SchemaTreeNode[]","readOnlyEmptyObject: Record<string, never>","INIT_ADDITIVE_POLICY: MigrationOperationPolicy"],"sources":["../src/core/control-instance.ts","../src/core/control-descriptor.ts","../src/core/migrations/plan-helpers.ts","../src/core/migrations/policies.ts","../src/exports/control.ts"],"sourcesContent":["import type {\n TargetBoundComponentDescriptor,\n TargetDescriptor,\n} from '@prisma-next/contract/framework-components';\nimport type { ContractIR } from '@prisma-next/contract/ir';\nimport type { ContractMarkerRecord, TypesImportSpec } from '@prisma-next/contract/types';\nimport { emit } from '@prisma-next/core-control-plane/emission';\nimport type { CoreSchemaView, SchemaTreeNode } from '@prisma-next/core-control-plane/schema-view';\nimport type {\n ControlDriverInstance,\n ControlFamilyInstance,\n EmitContractResult,\n OperationContext,\n SignDatabaseResult,\n VerifyDatabaseResult,\n VerifyDatabaseSchemaResult,\n} from '@prisma-next/core-control-plane/types';\nimport type { OperationRegistry } from '@prisma-next/operations';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { validateContract } from '@prisma-next/sql-contract/validate';\nimport { sqlTargetFamilyHook } from '@prisma-next/sql-contract-emitter';\nimport {\n ensureSchemaStatement,\n ensureTableStatement,\n writeContractMarker,\n} from '@prisma-next/sql-runtime';\nimport type { SqlSchemaIR, SqlTableIR } from '@prisma-next/sql-schema-ir/types';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport {\n assembleOperationRegistry,\n extractCodecTypeImports,\n extractExtensionIds,\n extractOperationTypeImports,\n extractParameterizedRenderers,\n extractParameterizedTypeImports,\n type SqlControlDescriptorWithContributions,\n} from './assembly';\nimport type { SqlControlAdapter } from './control-adapter';\nimport type {\n SqlControlAdapterDescriptor,\n SqlControlExtensionDescriptor,\n} from './migrations/types';\nimport { verifySqlSchema } from './schema-verify/verify-sql-schema';\nimport { collectSupportedCodecTypeIds, readMarker } from './verify';\n\nfunction extractCodecTypeIdsFromContract(contract: unknown): readonly string[] {\n const typeIds = new Set<string>();\n\n // Type guard for SQL contract structure\n if (\n typeof contract === 'object' &&\n contract !== null &&\n 'storage' in contract &&\n typeof contract.storage === 'object' &&\n contract.storage !== null &&\n 'tables' in contract.storage\n ) {\n const storage = contract.storage as { tables?: Record<string, unknown> };\n if (storage.tables && typeof storage.tables === 'object') {\n for (const table of Object.values(storage.tables)) {\n if (\n typeof table === 'object' &&\n table !== null &&\n 'columns' in table &&\n typeof table.columns === 'object' &&\n table.columns !== null\n ) {\n const columns = table.columns as Record<string, { codecId: string } | undefined>;\n for (const column of Object.values(columns)) {\n if (\n column &&\n typeof column === 'object' &&\n 'codecId' in column &&\n typeof column.codecId === 'string'\n ) {\n typeIds.add(column.codecId);\n }\n }\n }\n }\n }\n }\n\n return Array.from(typeIds).sort();\n}\n\nfunction createVerifyResult(options: {\n ok: boolean;\n code?: string;\n summary: string;\n contractStorageHash: string;\n contractProfileHash?: string;\n marker?: ContractMarkerRecord;\n expectedTargetId: string;\n actualTargetId?: string;\n missingCodecs?: readonly string[];\n codecCoverageSkipped?: boolean;\n configPath?: string;\n contractPath: string;\n totalTime: number;\n}): VerifyDatabaseResult {\n const contract: { storageHash: string; profileHash?: string } = {\n storageHash: options.contractStorageHash,\n };\n if (options.contractProfileHash) {\n contract.profileHash = options.contractProfileHash;\n }\n\n const target: { expected: string; actual?: string } = {\n expected: options.expectedTargetId,\n };\n if (options.actualTargetId) {\n target.actual = options.actualTargetId;\n }\n\n const meta: { contractPath: string; configPath?: string } = {\n contractPath: options.contractPath,\n };\n if (options.configPath) {\n meta.configPath = options.configPath;\n }\n\n const result: VerifyDatabaseResult = {\n ok: options.ok,\n summary: options.summary,\n contract,\n target,\n meta,\n timings: {\n total: options.totalTime,\n },\n };\n\n if (options.code) {\n (result as { code?: string }).code = options.code;\n }\n\n if (options.marker) {\n (result as { marker?: { storageHash: string; profileHash: string } }).marker = {\n storageHash: options.marker.storageHash,\n profileHash: options.marker.profileHash,\n };\n }\n\n if (options.missingCodecs) {\n (result as { missingCodecs?: readonly string[] }).missingCodecs = options.missingCodecs;\n }\n\n if (options.codecCoverageSkipped) {\n (result as { codecCoverageSkipped?: boolean }).codecCoverageSkipped =\n options.codecCoverageSkipped;\n }\n\n return result;\n}\n\ninterface SqlTypeMetadata {\n readonly typeId: string;\n readonly familyId: 'sql';\n readonly targetId: string;\n readonly nativeType?: string;\n}\n\ntype SqlTypeMetadataRegistry = Map<string, SqlTypeMetadata>;\n\ninterface SqlFamilyInstanceState {\n readonly operationRegistry: OperationRegistry;\n readonly codecTypeImports: ReadonlyArray<TypesImportSpec>;\n readonly operationTypeImports: ReadonlyArray<TypesImportSpec>;\n readonly extensionIds: ReadonlyArray<string>;\n readonly typeMetadataRegistry: SqlTypeMetadataRegistry;\n}\n\nexport interface SchemaVerifyOptions {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly strict: boolean;\n readonly context?: OperationContext;\n /**\n * Active framework components participating in this composition.\n * All components must have matching familyId ('sql') and targetId.\n */\n readonly frameworkComponents: ReadonlyArray<TargetBoundComponentDescriptor<'sql', string>>;\n}\n\nexport interface SqlControlFamilyInstance\n extends ControlFamilyInstance<'sql'>,\n SqlFamilyInstanceState {\n validateContractIR(contractJson: unknown): ContractIR;\n\n verify(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly expectedTargetId: string;\n readonly contractPath: string;\n readonly configPath?: string;\n }): Promise<VerifyDatabaseResult>;\n\n schemaVerify(options: SchemaVerifyOptions): Promise<VerifyDatabaseSchemaResult>;\n\n sign(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly contractPath: string;\n readonly configPath?: string;\n }): Promise<SignDatabaseResult>;\n\n introspect(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR?: unknown;\n }): Promise<SqlSchemaIR>;\n\n toSchemaView(schema: SqlSchemaIR): CoreSchemaView;\n\n emitContract(options: { readonly contractIR: ContractIR | unknown }): Promise<EmitContractResult>;\n}\n\nexport type SqlFamilyInstance = SqlControlFamilyInstance;\n\ninterface CreateSqlFamilyInstanceOptions<TTargetId extends string> {\n readonly target: TargetDescriptor<'sql', TTargetId> &\n SqlControlDescriptorWithContributions &\n DescriptorWithStorageTypes;\n readonly adapter: SqlControlAdapterDescriptor<TTargetId> & DescriptorWithStorageTypes;\n readonly extensionPacks: readonly (SqlControlExtensionDescriptor<TTargetId> &\n DescriptorWithStorageTypes)[];\n}\n\nfunction isSqlControlAdapter<TTargetId extends string>(\n value: unknown,\n): value is SqlControlAdapter<TTargetId> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'introspect' in value &&\n typeof (value as { introspect: unknown }).introspect === 'function'\n );\n}\n\ninterface DescriptorWithStorageTypes {\n readonly targetId?: string | undefined;\n readonly types?:\n | {\n readonly storage?:\n | ReadonlyArray<{\n readonly typeId: string;\n readonly familyId: string;\n readonly targetId: string;\n readonly nativeType?: string | undefined;\n }>\n | undefined;\n }\n | undefined;\n}\n\nfunction buildSqlTypeMetadataRegistry(options: {\n readonly target: DescriptorWithStorageTypes;\n readonly adapter: DescriptorWithStorageTypes & { readonly targetId: string };\n readonly extensionPacks: readonly DescriptorWithStorageTypes[];\n}): SqlTypeMetadataRegistry {\n const { target, adapter, extensionPacks: extensions } = options;\n const registry = new Map<string, SqlTypeMetadata>();\n const targetId = adapter.targetId;\n const descriptors = [target, adapter, ...extensions];\n\n for (const descriptor of descriptors) {\n const types = descriptor.types;\n const storageTypes = types?.storage;\n\n if (!storageTypes) {\n continue;\n }\n\n for (const storageType of storageTypes) {\n if (storageType.familyId === 'sql' && storageType.targetId === targetId) {\n registry.set(storageType.typeId, {\n typeId: storageType.typeId,\n familyId: 'sql',\n targetId: storageType.targetId,\n ...(storageType.nativeType !== undefined ? { nativeType: storageType.nativeType } : {}),\n });\n }\n }\n }\n\n return registry;\n}\n\nexport function createSqlFamilyInstance<TTargetId extends string>(\n options: CreateSqlFamilyInstanceOptions<TTargetId>,\n): SqlFamilyInstance {\n const { target, adapter, extensionPacks: extensions = [] } = options;\n\n const descriptors: SqlControlDescriptorWithContributions[] = [target, adapter, ...extensions];\n\n const operationRegistry = assembleOperationRegistry(descriptors);\n const codecTypeImports = extractCodecTypeImports(descriptors);\n const operationTypeImports = extractOperationTypeImports(descriptors);\n const extensionIds = extractExtensionIds(adapter, target, extensions);\n const parameterizedRenderers = extractParameterizedRenderers(descriptors);\n const parameterizedTypeImports = extractParameterizedTypeImports(descriptors);\n\n const typeMetadataRegistry = buildSqlTypeMetadataRegistry({\n target,\n adapter,\n extensionPacks: extensions,\n });\n\n function stripMappings(contract: unknown): unknown {\n if (typeof contract === 'object' && contract !== null && 'mappings' in contract) {\n const { mappings: _mappings, ...contractIR } = contract as {\n mappings?: unknown;\n [key: string]: unknown;\n };\n return contractIR;\n }\n return contract;\n }\n\n function normalizeProviderContractIR(contract: unknown): ContractIR {\n const contractWithoutMappings = stripMappings(contract);\n const validated = validateContract<SqlContract<SqlStorage>>(contractWithoutMappings);\n const { mappings: _mappings, ...contractIR } = validated;\n return contractIR as ContractIR;\n }\n\n return {\n familyId: 'sql',\n operationRegistry,\n codecTypeImports,\n operationTypeImports,\n extensionIds,\n typeMetadataRegistry,\n\n validateContractIR(contractJson: unknown): ContractIR {\n return normalizeProviderContractIR(contractJson);\n },\n\n async verify(verifyOptions: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly expectedTargetId: string;\n readonly contractPath: string;\n readonly configPath?: string;\n }): Promise<VerifyDatabaseResult> {\n const { driver, contractIR, expectedTargetId, contractPath, configPath } = verifyOptions;\n const startTime = Date.now();\n\n if (\n typeof contractIR !== 'object' ||\n contractIR === null ||\n !('storageHash' in contractIR) ||\n !('target' in contractIR) ||\n typeof contractIR.storageHash !== 'string' ||\n typeof contractIR.target !== 'string'\n ) {\n throw new Error('Contract is missing required fields: storageHash or target');\n }\n\n const contractStorageHash = contractIR.storageHash;\n const contractProfileHash =\n 'profileHash' in contractIR && typeof contractIR.profileHash === 'string'\n ? contractIR.profileHash\n : undefined;\n const contractTarget = contractIR.target;\n\n const marker = await readMarker(driver);\n\n let missingCodecs: readonly string[] | undefined;\n let codecCoverageSkipped = false;\n const supportedTypeIds = collectSupportedCodecTypeIds([adapter, target, ...extensions]);\n if (supportedTypeIds.length === 0) {\n codecCoverageSkipped = true;\n } else {\n const supportedSet = new Set(supportedTypeIds);\n const usedTypeIds = extractCodecTypeIdsFromContract(contractIR);\n const missing = usedTypeIds.filter((id) => !supportedSet.has(id));\n if (missing.length > 0) {\n missingCodecs = missing;\n }\n }\n\n if (!marker) {\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: false,\n code: 'PN-RTM-3001',\n summary: 'Marker missing',\n contractStorageHash,\n expectedTargetId,\n contractPath,\n totalTime,\n ...(contractProfileHash ? { contractProfileHash } : {}),\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n }\n\n if (contractTarget !== expectedTargetId) {\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: false,\n code: 'PN-RTM-3003',\n summary: 'Target mismatch',\n contractStorageHash,\n marker,\n expectedTargetId,\n actualTargetId: contractTarget,\n contractPath,\n totalTime,\n ...(contractProfileHash ? { contractProfileHash } : {}),\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n }\n\n if (marker.storageHash !== contractStorageHash) {\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: false,\n code: 'PN-RTM-3002',\n summary: 'Hash mismatch',\n contractStorageHash,\n marker,\n expectedTargetId,\n contractPath,\n totalTime,\n ...(contractProfileHash ? { contractProfileHash } : {}),\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n }\n\n if (contractProfileHash && marker.profileHash !== contractProfileHash) {\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: false,\n code: 'PN-RTM-3002',\n summary: 'Hash mismatch',\n contractStorageHash,\n contractProfileHash,\n marker,\n expectedTargetId,\n contractPath,\n totalTime,\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n }\n\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: true,\n summary: 'Database matches contract',\n contractStorageHash,\n marker,\n expectedTargetId,\n contractPath,\n totalTime,\n ...(contractProfileHash ? { contractProfileHash } : {}),\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n },\n\n async schemaVerify(options: SchemaVerifyOptions): Promise<VerifyDatabaseSchemaResult> {\n const { driver, contractIR, strict, context, frameworkComponents } = options;\n\n const contract = validateContract<SqlContract<SqlStorage>>(contractIR);\n\n const controlAdapter = adapter.create();\n if (!isSqlControlAdapter(controlAdapter)) {\n throw new Error('Adapter does not implement SqlControlAdapter.introspect()');\n }\n const schemaIR = await controlAdapter.introspect(driver, contractIR);\n\n return verifySqlSchema({\n contract,\n schema: schemaIR,\n strict,\n ...ifDefined('context', context),\n typeMetadataRegistry,\n frameworkComponents,\n // Wire up target-specific normalizers if available\n ...ifDefined('normalizeDefault', controlAdapter.normalizeDefault),\n ...ifDefined('normalizeNativeType', controlAdapter.normalizeNativeType),\n });\n },\n async sign(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly contractPath: string;\n readonly configPath?: string;\n }): Promise<SignDatabaseResult> {\n const { driver, contractIR, contractPath, configPath } = options;\n const startTime = Date.now();\n\n const contract = validateContract<SqlContract<SqlStorage>>(contractIR);\n\n const contractStorageHash = contract.storageHash;\n const contractProfileHash =\n 'profileHash' in contract && typeof contract.profileHash === 'string'\n ? contract.profileHash\n : contractStorageHash;\n const contractTarget = contract.target;\n\n await driver.query(ensureSchemaStatement.sql, ensureSchemaStatement.params);\n await driver.query(ensureTableStatement.sql, ensureTableStatement.params);\n\n const existingMarker = await readMarker(driver);\n\n let markerCreated = false;\n let markerUpdated = false;\n let previousHashes: { storageHash?: string; profileHash?: string } | undefined;\n\n if (!existingMarker) {\n const write = writeContractMarker({\n storageHash: contractStorageHash,\n profileHash: contractProfileHash,\n contractJson: contractIR,\n canonicalVersion: 1,\n });\n await driver.query(write.insert.sql, write.insert.params);\n markerCreated = true;\n } else {\n const existingStorageHash = existingMarker.storageHash;\n const existingProfileHash = existingMarker.profileHash;\n\n const storageHashMatches = existingStorageHash === contractStorageHash;\n const profileHashMatches = existingProfileHash === contractProfileHash;\n\n if (!storageHashMatches || !profileHashMatches) {\n previousHashes = {\n storageHash: existingStorageHash,\n profileHash: existingProfileHash,\n };\n const write = writeContractMarker({\n storageHash: contractStorageHash,\n profileHash: contractProfileHash,\n contractJson: contractIR,\n canonicalVersion: existingMarker.canonicalVersion ?? 1,\n });\n await driver.query(write.update.sql, write.update.params);\n markerUpdated = true;\n }\n }\n\n let summary: string;\n if (markerCreated) {\n summary = 'Database signed (marker created)';\n } else if (markerUpdated) {\n summary = `Database signed (marker updated from ${previousHashes?.storageHash ?? 'unknown'})`;\n } else {\n summary = 'Database already signed with this contract';\n }\n\n const totalTime = Date.now() - startTime;\n\n return {\n ok: true,\n summary,\n contract: {\n storageHash: contractStorageHash,\n profileHash: contractProfileHash,\n },\n target: {\n expected: contractTarget,\n actual: contractTarget,\n },\n marker: {\n created: markerCreated,\n updated: markerUpdated,\n ...(previousHashes ? { previous: previousHashes } : {}),\n },\n meta: {\n contractPath,\n ...(configPath ? { configPath } : {}),\n },\n timings: {\n total: totalTime,\n },\n };\n },\n async readMarker(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n }): Promise<ContractMarkerRecord | null> {\n return readMarker(options.driver);\n },\n async introspect(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR?: unknown;\n }): Promise<SqlSchemaIR> {\n const { driver, contractIR } = options;\n\n const controlAdapter = adapter.create();\n if (!isSqlControlAdapter(controlAdapter)) {\n throw new Error('Adapter does not implement SqlControlAdapter.introspect()');\n }\n return controlAdapter.introspect(driver, contractIR);\n },\n\n toSchemaView(schema: SqlSchemaIR): CoreSchemaView {\n const rootLabel = 'contract';\n\n const tableNodes: readonly SchemaTreeNode[] = Object.entries(schema.tables).map(\n ([tableName, table]: [string, SqlTableIR]) => {\n const children: SchemaTreeNode[] = [];\n\n const columnNodes: SchemaTreeNode[] = [];\n for (const [columnName, column] of Object.entries(table.columns)) {\n const typeDisplay = column.nativeType;\n const nullability = column.nullable ? 'nullable' : 'not nullable';\n const label = `${columnName}: ${typeDisplay} (${nullability})`;\n columnNodes.push({\n kind: 'field',\n id: `column-${tableName}-${columnName}`,\n label,\n meta: {\n nativeType: column.nativeType,\n nullable: column.nullable,\n ...ifDefined('default', column.default),\n },\n });\n }\n\n if (columnNodes.length > 0) {\n children.push({\n kind: 'collection',\n id: `columns-${tableName}`,\n label: 'columns',\n children: columnNodes,\n });\n }\n\n if (table.primaryKey) {\n const pkColumns = table.primaryKey.columns.join(', ');\n children.push({\n kind: 'index',\n id: `primary-key-${tableName}`,\n label: `primary key: ${pkColumns}`,\n meta: {\n columns: table.primaryKey.columns,\n ...(table.primaryKey.name ? { name: table.primaryKey.name } : {}),\n },\n });\n }\n\n for (const unique of table.uniques) {\n const name = unique.name ?? `${tableName}_${unique.columns.join('_')}_unique`;\n const label = `unique ${name}`;\n children.push({\n kind: 'index',\n id: `unique-${tableName}-${name}`,\n label,\n meta: {\n columns: unique.columns,\n unique: true,\n },\n });\n }\n\n for (const index of table.indexes) {\n const name = index.name ?? `${tableName}_${index.columns.join('_')}_idx`;\n const label = index.unique ? `unique index ${name}` : `index ${name}`;\n children.push({\n kind: 'index',\n id: `index-${tableName}-${name}`,\n label,\n meta: {\n columns: index.columns,\n unique: index.unique,\n },\n });\n }\n\n const tableMeta: Record<string, unknown> = {};\n if (table.primaryKey) {\n tableMeta['primaryKey'] = table.primaryKey.columns;\n if (table.primaryKey.name) {\n tableMeta['primaryKeyName'] = table.primaryKey.name;\n }\n }\n if (table.foreignKeys.length > 0) {\n tableMeta['foreignKeys'] = table.foreignKeys.map((fk) => ({\n columns: fk.columns,\n referencedTable: fk.referencedTable,\n referencedColumns: fk.referencedColumns,\n ...(fk.name ? { name: fk.name } : {}),\n }));\n }\n\n const node: SchemaTreeNode = {\n kind: 'entity',\n id: `table-${tableName}`,\n label: `table ${tableName}`,\n ...(Object.keys(tableMeta).length > 0 ? { meta: tableMeta } : {}),\n ...(children.length > 0 ? { children: children as readonly SchemaTreeNode[] } : {}),\n };\n return node;\n },\n );\n\n const extensionNodes: readonly SchemaTreeNode[] = schema.extensions.map((extName) => ({\n kind: 'extension',\n id: `extension-${extName}`,\n label: `${extName} extension is enabled`,\n }));\n\n const rootChildren = [...tableNodes, ...extensionNodes];\n\n const rootNode: SchemaTreeNode = {\n kind: 'root',\n id: 'sql-schema',\n label: rootLabel,\n ...(rootChildren.length > 0 ? { children: rootChildren } : {}),\n };\n\n return {\n root: rootNode,\n };\n },\n\n async emitContract({ contractIR }): Promise<EmitContractResult> {\n const normalizedIR = normalizeProviderContractIR(contractIR);\n\n const result = await emit(\n normalizedIR,\n {\n outputDir: '',\n operationRegistry,\n codecTypeImports,\n operationTypeImports,\n extensionIds,\n parameterizedRenderers,\n parameterizedTypeImports,\n },\n sqlTargetFamilyHook,\n );\n\n return {\n contractJson: result.contractJson,\n contractDts: result.contractDts,\n storageHash: result.storageHash,\n ...(result.executionHash ? { executionHash: result.executionHash } : {}),\n profileHash: result.profileHash,\n };\n },\n };\n}\n","import type { TargetDescriptor } from '@prisma-next/contract/framework-components';\nimport type {\n ControlFamilyDescriptor,\n ControlPlaneStack,\n} from '@prisma-next/core-control-plane/types';\nimport { sqlTargetFamilyHook } from '@prisma-next/sql-contract-emitter';\nimport type { SqlControlDescriptorWithContributions } from './assembly';\nimport { createSqlFamilyInstance, type SqlControlFamilyInstance } from './control-instance';\nimport type {\n SqlControlAdapterDescriptor,\n SqlControlExtensionDescriptor,\n} from './migrations/types';\n\nexport class SqlFamilyDescriptor\n implements ControlFamilyDescriptor<'sql', SqlControlFamilyInstance>\n{\n readonly kind = 'family' as const;\n readonly id = 'sql';\n readonly familyId = 'sql' as const;\n readonly version = '0.0.1';\n readonly hook = sqlTargetFamilyHook;\n\n create<TTargetId extends string>(\n stack: ControlPlaneStack<'sql', TTargetId>,\n ): SqlControlFamilyInstance {\n const target = stack.target as unknown as TargetDescriptor<'sql', TTargetId> &\n SqlControlDescriptorWithContributions;\n const adapter = stack.adapter as unknown as SqlControlAdapterDescriptor<TTargetId>;\n const extensionPacks =\n stack.extensionPacks as unknown as readonly SqlControlExtensionDescriptor<TTargetId>[];\n return createSqlFamilyInstance({\n target,\n adapter,\n extensionPacks,\n });\n }\n}\n","import type { NotOk, Ok } from '@prisma-next/utils/result';\nimport { notOk, ok } from '@prisma-next/utils/result';\nimport type {\n AnyRecord,\n CreateSqlMigrationPlanOptions,\n SqlMigrationPlan,\n SqlMigrationPlanOperation,\n SqlMigrationPlanOperationStep,\n SqlMigrationPlanOperationTarget,\n SqlMigrationRunnerErrorCode,\n SqlMigrationRunnerFailure,\n SqlMigrationRunnerSuccessValue,\n SqlPlannerConflict,\n SqlPlannerFailureResult,\n SqlPlannerSuccessResult,\n} from './types';\n\nconst readOnlyEmptyObject: Record<string, never> = Object.freeze({});\n\nfunction cloneRecord<T extends AnyRecord>(value: T): T {\n if (value === readOnlyEmptyObject) {\n return value;\n }\n return Object.freeze({ ...value }) as T;\n}\n\nfunction freezeSteps(\n steps: readonly SqlMigrationPlanOperationStep[],\n): readonly SqlMigrationPlanOperationStep[] {\n if (steps.length === 0) {\n return Object.freeze([]);\n }\n return Object.freeze(\n steps.map((step) =>\n Object.freeze({\n description: step.description,\n sql: step.sql,\n ...(step.meta ? { meta: cloneRecord(step.meta) } : {}),\n }),\n ),\n );\n}\n\nfunction freezeDetailsValue<T>(value: T): T {\n // Primitives and null/undefined are already immutable, return as-is\n if (value === null || value === undefined) {\n return value;\n }\n if (typeof value !== 'object') {\n return value;\n }\n // Arrays: shallow clone and freeze\n if (Array.isArray(value)) {\n return Object.freeze([...value]) as T;\n }\n // Objects: shallow clone and freeze (matching cloneRecord pattern)\n return Object.freeze({ ...value }) as T;\n}\n\nfunction freezeTargetDetails<TTargetDetails>(\n target: SqlMigrationPlanOperationTarget<TTargetDetails>,\n): SqlMigrationPlanOperationTarget<TTargetDetails> {\n return Object.freeze({\n id: target.id,\n ...(target.details !== undefined ? { details: freezeDetailsValue(target.details) } : {}),\n });\n}\n\nfunction freezeOperation<TTargetDetails>(\n operation: SqlMigrationPlanOperation<TTargetDetails>,\n): SqlMigrationPlanOperation<TTargetDetails> {\n return Object.freeze({\n id: operation.id,\n label: operation.label,\n ...(operation.summary ? { summary: operation.summary } : {}),\n operationClass: operation.operationClass,\n target: freezeTargetDetails(operation.target),\n precheck: freezeSteps(operation.precheck),\n execute: freezeSteps(operation.execute),\n postcheck: freezeSteps(operation.postcheck),\n ...(operation.meta ? { meta: cloneRecord(operation.meta) } : {}),\n });\n}\n\nfunction freezeOperations<TTargetDetails>(\n operations: readonly SqlMigrationPlanOperation<TTargetDetails>[],\n): readonly SqlMigrationPlanOperation<TTargetDetails>[] {\n if (operations.length === 0) {\n return Object.freeze([]);\n }\n return Object.freeze(operations.map((operation) => freezeOperation(operation)));\n}\n\nexport function createMigrationPlan<TTargetDetails>(\n options: CreateSqlMigrationPlanOptions<TTargetDetails>,\n): SqlMigrationPlan<TTargetDetails> {\n return Object.freeze({\n targetId: options.targetId,\n ...(options.origin !== undefined\n ? { origin: options.origin ? Object.freeze({ ...options.origin }) : null }\n : {}),\n destination: Object.freeze({ ...options.destination }),\n operations: freezeOperations(options.operations),\n ...(options.meta ? { meta: cloneRecord(options.meta) } : {}),\n });\n}\n\nexport function plannerSuccess<TTargetDetails>(\n plan: SqlMigrationPlan<TTargetDetails>,\n): SqlPlannerSuccessResult<TTargetDetails> {\n return Object.freeze({\n kind: 'success',\n plan,\n });\n}\n\nexport function plannerFailure(conflicts: readonly SqlPlannerConflict[]): SqlPlannerFailureResult {\n return Object.freeze({\n kind: 'failure' as const,\n conflicts: Object.freeze(\n conflicts.map((conflict) =>\n Object.freeze({\n kind: conflict.kind,\n summary: conflict.summary,\n ...(conflict.why ? { why: conflict.why } : {}),\n ...(conflict.location ? { location: Object.freeze({ ...conflict.location }) } : {}),\n ...(conflict.meta ? { meta: cloneRecord(conflict.meta) } : {}),\n }),\n ),\n ),\n });\n}\n\n/**\n * Creates a successful migration runner result.\n */\nexport function runnerSuccess(value: {\n operationsPlanned: number;\n operationsExecuted: number;\n}): Ok<SqlMigrationRunnerSuccessValue> {\n return ok(\n Object.freeze({\n operationsPlanned: value.operationsPlanned,\n operationsExecuted: value.operationsExecuted,\n }),\n );\n}\n\n/**\n * Creates a failed migration runner result.\n */\nexport function runnerFailure(\n code: SqlMigrationRunnerErrorCode,\n summary: string,\n options?: { why?: string; meta?: AnyRecord },\n): NotOk<SqlMigrationRunnerFailure> {\n const failure: SqlMigrationRunnerFailure = Object.freeze({\n code,\n summary,\n ...(options?.why ? { why: options.why } : {}),\n ...(options?.meta ? { meta: cloneRecord(options.meta) } : {}),\n });\n return notOk(failure);\n}\n","import type { MigrationOperationPolicy } from '@prisma-next/core-control-plane/types';\n\n/**\n * Policy used by `db init`: additive-only operations, no widening/destructive steps.\n */\nexport const INIT_ADDITIVE_POLICY: MigrationOperationPolicy = Object.freeze({\n allowedOperationClasses: Object.freeze(['additive'] as const),\n});\n","import { SqlFamilyDescriptor } from '../core/control-descriptor';\n\n// Re-export core types from canonical source\nexport type {\n MigrationOperationClass,\n MigrationOperationPolicy,\n MigrationPlan,\n MigrationPlanner,\n MigrationPlannerConflict,\n MigrationPlannerResult,\n MigrationPlanOperation,\n TargetMigrationsCapability,\n} from '@prisma-next/core-control-plane/types';\nexport type { SqlControlDescriptorWithContributions } from '../core/assembly';\nexport { extractCodecControlHooks } from '../core/assembly';\nexport type { SchemaVerifyOptions, SqlControlFamilyInstance } from '../core/control-instance';\nexport {\n createMigrationPlan,\n plannerFailure,\n plannerSuccess,\n runnerFailure,\n runnerSuccess,\n} from '../core/migrations/plan-helpers';\nexport { INIT_ADDITIVE_POLICY } from '../core/migrations/policies';\n// SQL-specific types\nexport type {\n CodecControlHooks,\n ComponentDatabaseDependencies,\n ComponentDatabaseDependency,\n CreateSqlMigrationPlanOptions,\n ExpandNativeTypeInput,\n SqlControlAdapterDescriptor,\n SqlControlExtensionDescriptor,\n SqlControlStaticContributions,\n SqlControlTargetDescriptor,\n SqlMigrationPlan,\n SqlMigrationPlanContractInfo,\n SqlMigrationPlanner,\n SqlMigrationPlannerPlanOptions,\n SqlMigrationPlanOperation,\n SqlMigrationPlanOperationStep,\n SqlMigrationPlanOperationTarget,\n SqlMigrationRunner,\n SqlMigrationRunnerErrorCode,\n SqlMigrationRunnerExecuteCallbacks,\n SqlMigrationRunnerExecuteOptions,\n SqlMigrationRunnerFailure,\n SqlMigrationRunnerResult,\n SqlMigrationRunnerSuccessValue,\n SqlPlannerConflict,\n SqlPlannerConflictKind,\n SqlPlannerConflictLocation,\n SqlPlannerFailureResult,\n SqlPlannerResult,\n SqlPlannerSuccessResult,\n StorageTypePlanResult,\n} from '../core/migrations/types';\n\nexport default new SqlFamilyDescriptor();\n"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { RuntimeFamilyDescriptor, RuntimeFamilyInstance } from "@prisma-next/core-execution-plane/types";
2
+
3
+ //#region src/core/runtime-instance.d.ts
4
+
5
+ /**
6
+ * SQL execution-plane family instance interface.
7
+ *
8
+ * Note: this is currently named `SqlRuntimeFamilyInstance` because the execution plane
9
+ * framework types are still using the `Runtime*` naming (`RuntimeFamilyInstance`, etc.).
10
+ *
11
+ * This will be renamed to `SqlExecutionFamilyInstance` as part of `TML-1842`.
12
+ */
13
+ interface SqlRuntimeFamilyInstance extends RuntimeFamilyInstance<'sql'> {}
14
+ //#endregion
15
+ //#region src/core/runtime-descriptor.d.ts
16
+ /**
17
+ * SQL execution-plane family descriptor.
18
+ *
19
+ * Note: this is currently named `sqlRuntimeFamilyDescriptor` because the execution plane
20
+ * framework types are still using the `Runtime*` naming (`RuntimeFamilyDescriptor`, etc.).
21
+ *
22
+ * This will be renamed to `sqlExecutionFamilyDescriptor` as part of `TML-1842`.
23
+ */
24
+ declare const sqlRuntimeFamilyDescriptor: RuntimeFamilyDescriptor<'sql', SqlRuntimeFamilyInstance>;
25
+ //#endregion
26
+ export { sqlRuntimeFamilyDescriptor as default };
27
+ //# sourceMappingURL=runtime.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.mts","names":[],"sources":["../src/core/runtime-instance.ts","../src/core/runtime-descriptor.ts"],"sourcesContent":[],"mappings":";;;;;;AAUA;;;;ACCA;;UDDiB,wBAAA,SAAiC;;;;AAAlD;;;;ACCA;;;cAAa,4BAA4B,+BAA+B"}