@prisma-next/family-sql 0.14.0-dev.6 → 0.14.0-dev.60

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 (79) hide show
  1. package/dist/{authoring-type-constructors-CjFfO6LM.mjs → authoring-type-constructors-CXd-8ydc.mjs} +7 -30
  2. package/dist/authoring-type-constructors-CXd-8ydc.mjs.map +1 -0
  3. package/dist/{control-adapter-Cmw9LvEP.d.mts → control-adapter-BeN8TDZ5.d.mts} +29 -8
  4. package/dist/control-adapter-BeN8TDZ5.d.mts.map +1 -0
  5. package/dist/control-adapter.d.mts +1 -1
  6. package/dist/control.d.mts +238 -6
  7. package/dist/control.d.mts.map +1 -1
  8. package/dist/control.mjs +347 -942
  9. package/dist/control.mjs.map +1 -1
  10. package/dist/diff.d.mts +102 -0
  11. package/dist/diff.d.mts.map +1 -0
  12. package/dist/diff.mjs +14 -0
  13. package/dist/diff.mjs.map +1 -0
  14. package/dist/ir.d.mts +26 -9
  15. package/dist/ir.d.mts.map +1 -1
  16. package/dist/ir.mjs +2 -2
  17. package/dist/ir.mjs.map +1 -1
  18. package/dist/migration.d.mts +11 -2
  19. package/dist/migration.d.mts.map +1 -1
  20. package/dist/migration.mjs +7 -0
  21. package/dist/migration.mjs.map +1 -1
  22. package/dist/pack.mjs +1 -1
  23. package/dist/psl-infer.d.mts +108 -0
  24. package/dist/psl-infer.d.mts.map +1 -0
  25. package/dist/psl-infer.mjs +353 -0
  26. package/dist/psl-infer.mjs.map +1 -0
  27. package/dist/schema-differ-DnoopSXm.d.mts +45 -0
  28. package/dist/schema-differ-DnoopSXm.d.mts.map +1 -0
  29. package/dist/schema-verify-W3r631Jh.mjs +226 -0
  30. package/dist/schema-verify-W3r631Jh.mjs.map +1 -0
  31. package/dist/{sql-contract-serializer-BR2vC7Z-.mjs → sql-contract-serializer-C75cfMSS.mjs} +46 -20
  32. package/dist/sql-contract-serializer-C75cfMSS.mjs.map +1 -0
  33. package/dist/{types-kgstZ_Zd.d.mts → types-COTsneBU.d.mts} +34 -139
  34. package/dist/types-COTsneBU.d.mts.map +1 -0
  35. package/package.json +23 -23
  36. package/src/core/authoring-entity-types.ts +12 -37
  37. package/src/core/control-adapter.ts +10 -5
  38. package/src/core/control-instance.ts +210 -42
  39. package/src/core/control-target-descriptor.ts +98 -0
  40. package/src/core/diff/schema-verify.ts +324 -0
  41. package/src/core/diff/sql-schema-diff.ts +41 -0
  42. package/src/core/diff/verifier-disposition.ts +30 -0
  43. package/src/core/ir/sql-contract-serializer-base.ts +70 -56
  44. package/src/core/ir/sql-contract-serializer.ts +5 -7
  45. package/src/core/ir/sql-schema-verifier-base.ts +5 -5
  46. package/src/core/migrations/contract-to-schema-ir.ts +126 -32
  47. package/src/core/migrations/field-event-planner.ts +2 -2
  48. package/src/core/migrations/native-type-expander.ts +28 -0
  49. package/src/core/migrations/schema-differ.ts +41 -0
  50. package/src/core/migrations/types.ts +31 -34
  51. package/src/core/psl-contract-infer/name-transforms.ts +15 -0
  52. package/src/core/psl-contract-infer/printer-config.ts +12 -6
  53. package/src/core/psl-contract-infer/relation-inference.ts +9 -1
  54. package/src/core/sql-migration.ts +12 -1
  55. package/src/exports/control.ts +11 -1
  56. package/src/exports/diff.ts +25 -0
  57. package/src/exports/psl-infer.ts +40 -0
  58. package/dist/authoring-type-constructors-CjFfO6LM.mjs.map +0 -1
  59. package/dist/control-adapter-Cmw9LvEP.d.mts.map +0 -1
  60. package/dist/schema-verify.d.mts +0 -39
  61. package/dist/schema-verify.d.mts.map +0 -1
  62. package/dist/schema-verify.mjs +0 -2
  63. package/dist/sql-contract-serializer-BR2vC7Z-.mjs.map +0 -1
  64. package/dist/test-utils.d.mts +0 -2
  65. package/dist/test-utils.mjs +0 -2
  66. package/dist/types-kgstZ_Zd.d.mts.map +0 -1
  67. package/dist/verify-sql-schema-thU-jKpf.d.mts +0 -66
  68. package/dist/verify-sql-schema-thU-jKpf.d.mts.map +0 -1
  69. package/dist/verify-sql-schema-xT4udQLQ.mjs +0 -1501
  70. package/dist/verify-sql-schema-xT4udQLQ.mjs.map +0 -1
  71. package/src/core/psl-contract-infer/postgres-default-mapping.ts +0 -16
  72. package/src/core/psl-contract-infer/postgres-type-map.ts +0 -157
  73. package/src/core/psl-contract-infer/sql-schema-ir-to-psl-ast.ts +0 -795
  74. package/src/core/schema-verify/control-verify-emit.ts +0 -46
  75. package/src/core/schema-verify/verifier-disposition.ts +0 -58
  76. package/src/core/schema-verify/verify-helpers.ts +0 -820
  77. package/src/core/schema-verify/verify-sql-schema.ts +0 -1311
  78. package/src/exports/schema-verify.ts +0 -18
  79. package/src/exports/test-utils.ts +0 -9
@@ -1,123 +1,13 @@
1
- import { r as SqlControlAdapter } from "./control-adapter-Cmw9LvEP.mjs";
2
- import { ContractSerializer, ContractSpace, ControlAdapterDescriptor, ControlExtensionDescriptor, ControlFamilyInstance, ControlStack, MigratableTargetDescriptor, MigrationOperationPolicy, MigrationPlan, MigrationPlanOperation, MigrationPlannerConflict, MigrationPlannerFailureResult, MigrationPlannerSuccessResult, MigrationRunnerExecutionChecks, MigrationRunnerFailure, MigrationRunnerPerSpaceSuccessValue, MigrationRunnerResult, OpFactoryCall, OperationContext, OperationPreview, OperationPreviewCapable, PslContractInferCapable, SchemaIssue, SchemaVerifier, SchemaViewCapable, SignDatabaseResult, VerifyDatabaseResult, VerifyDatabaseSchemaResult } from "@prisma-next/framework-components/control";
3
- import { SqlControlDriverInstance, SqlStorage, StorageColumn, StorageTable, StorageTypeInstance } from "@prisma-next/sql-contract/types";
4
- import { PslDocumentAst } from "@prisma-next/framework-components/psl-ast";
1
+ import { r as SqlControlAdapter } from "./control-adapter-BeN8TDZ5.mjs";
2
+ import { ContractSpace, ControlAdapterDescriptor, ControlExtensionDescriptor, MigrationOperationPolicy, MigrationPlan, MigrationPlanOperation, MigrationPlannerConflict, MigrationPlannerFailureResult, MigrationPlannerSuccessResult, MigrationRunnerExecutionChecks, MigrationRunnerFailure, MigrationRunnerPerSpaceSuccessValue, MigrationRunnerResult, OpFactoryCall, OperationContext, SchemaDiffIssue, SchemaOwnership } from "@prisma-next/framework-components/control";
5
3
  import { Contract } from "@prisma-next/contract/types";
4
+ import { SqlControlDriverInstance, SqlStorage, StorageColumn, StorageTable, StorageTypeInstance } from "@prisma-next/sql-contract/types";
5
+ import { SqlSchemaIRNode } from "@prisma-next/sql-schema-ir/types";
6
6
  import { Result } from "@prisma-next/utils/result";
7
- import { AnyQueryAst, DdlNode, LowererContext, SqlExecuteRequest } from "@prisma-next/sql-relational-core/ast";
8
- import { SqlSchemaIR } from "@prisma-next/sql-schema-ir/types";
9
7
  import { TargetBoundComponentDescriptor } from "@prisma-next/framework-components/components";
10
- import { TypesImportSpec } from "@prisma-next/framework-components/emission";
11
8
  import { AggregateMigrationEdgeRef } from "@prisma-next/migration-tools/aggregate";
12
9
  import { SqlOperationDescriptors } from "@prisma-next/sql-operations";
13
10
 
14
- //#region src/core/control-instance.d.ts
15
- interface SqlTypeMetadata {
16
- readonly typeId: string;
17
- readonly familyId: 'sql';
18
- readonly targetId: string;
19
- readonly nativeType?: string;
20
- }
21
- type SqlTypeMetadataRegistry = Map<string, SqlTypeMetadata>;
22
- interface SqlFamilyInstanceState {
23
- readonly codecTypeImports: ReadonlyArray<TypesImportSpec>;
24
- readonly extensionIds: ReadonlyArray<string>;
25
- readonly typeMetadataRegistry: SqlTypeMetadataRegistry;
26
- }
27
- interface SqlControlFamilyInstance extends ControlFamilyInstance<'sql', SqlSchemaIR>, SchemaViewCapable<SqlSchemaIR>, PslContractInferCapable<SqlSchemaIR>, OperationPreviewCapable, SqlFamilyInstanceState {
28
- /**
29
- * The family seam-of-record for on-disk contract reads. Structurally
30
- * validates the JSON envelope, then hydrates IR-class instances via
31
- * the per-target ContractSerializer. The single named entry point
32
- * every CLI on-disk read crosses (TML-2536) — `as Contract` casts
33
- * in production package sources are a serializer-bypass smell guarded
34
- * by `pnpm lint:no-contract-cast`.
35
- */
36
- deserializeContract(contractJson: unknown): Contract;
37
- verify(options: {
38
- readonly driver: SqlControlDriverInstance<string>;
39
- readonly contract: unknown;
40
- readonly expectedTargetId: string;
41
- readonly contractPath: string;
42
- readonly configPath?: string;
43
- }): Promise<VerifyDatabaseResult>;
44
- /**
45
- * Verify a contract against an already-introspected schema slice.
46
- *
47
- * Callers that need to verify against the live database compose
48
- * `introspect({ driver })` + `verifySchema({ contract, schema, ... })`.
49
- * The aggregate verifier projects each member's claimed slice via
50
- * `projectSchemaToSpace` and hands the projected slice in — this
51
- * keeps per-member verification from surfacing sibling-space tables
52
- * as `extras`.
53
- */
54
- verifySchema(options: {
55
- readonly contract: unknown;
56
- readonly schema: SqlSchemaIR;
57
- readonly strict: boolean;
58
- readonly frameworkComponents: ReadonlyArray<TargetBoundComponentDescriptor<'sql', string>>;
59
- }): VerifyDatabaseSchemaResult;
60
- sign(options: {
61
- readonly driver: SqlControlDriverInstance<string>;
62
- readonly contract: unknown;
63
- readonly contractPath: string;
64
- readonly configPath?: string;
65
- }): Promise<SignDatabaseResult>;
66
- introspect(options: {
67
- readonly driver: SqlControlDriverInstance<string>;
68
- readonly contract?: unknown;
69
- }): Promise<SqlSchemaIR>;
70
- inferPslContract(schemaIR: SqlSchemaIR): PslDocumentAst;
71
- lowerAst(ast: AnyQueryAst | DdlNode, context: LowererContext<unknown>): Promise<SqlExecuteRequest>;
72
- /**
73
- * Inserts the initial marker row for `space` (upsert on `space`).
74
- * Delegates to the target control adapter's write SPI; see
75
- * `SqlControlAdapter.initMarker`.
76
- */
77
- initMarker(options: {
78
- readonly driver: SqlControlDriverInstance<string>;
79
- readonly space: string;
80
- readonly destination: {
81
- readonly storageHash: string;
82
- readonly profileHash: string;
83
- readonly invariants?: readonly string[];
84
- };
85
- }): Promise<void>;
86
- /**
87
- * Compare-and-swap advance of the marker row for `space`. Returns `true`
88
- * when the swap matched a row; see `SqlControlAdapter.updateMarker`.
89
- */
90
- updateMarker(options: {
91
- readonly driver: SqlControlDriverInstance<string>;
92
- readonly space: string;
93
- readonly expectedFrom: string;
94
- readonly destination: {
95
- readonly storageHash: string;
96
- readonly profileHash: string;
97
- readonly invariants?: readonly string[];
98
- };
99
- }): Promise<boolean>;
100
- /**
101
- * Appends a ledger entry for `space`; see
102
- * `SqlControlAdapter.writeLedgerEntry`.
103
- */
104
- writeLedgerEntry(options: {
105
- readonly driver: SqlControlDriverInstance<string>;
106
- readonly space: string;
107
- readonly entry: {
108
- readonly edgeId: string;
109
- readonly from: string;
110
- readonly to: string;
111
- readonly migrationName: string;
112
- readonly migrationHash: string;
113
- readonly operations: readonly unknown[];
114
- };
115
- }): Promise<void>;
116
- bootstrapControlTableQueries(): readonly DdlNode[];
117
- bootstrapSignMarkerQueries(): readonly DdlNode[];
118
- toOperationPreview(operations: readonly MigrationPlanOperation[]): OperationPreview;
119
- }
120
- //#endregion
121
11
  //#region src/core/migrations/types.d.ts
122
12
  type AnyRecord = Readonly<Record<string, unknown>>;
123
13
  interface StorageTypePlanResult<TTargetDetails> {
@@ -180,20 +70,29 @@ interface FieldEventContext {
180
70
  readonly newField?: StorageColumn;
181
71
  }
182
72
  interface CodecControlHooks<TTargetDetails = unknown> {
73
+ /**
74
+ * `schema` is typed as the family-level `SqlSchemaIRNode` (not the concrete
75
+ * `SqlSchemaIR` class) because the actual value handed in is whatever
76
+ * per-namespace node the calling target's tree shape produces — a flat
77
+ * `SqlSchemaIR` for SQLite, a `PostgresNamespaceSchemaNode` for Postgres —
78
+ * read structurally for its `tables`/`nativeEnumTypeNames` fields. Hooks
79
+ * that need the concrete Postgres shape narrow via
80
+ * `PostgresNamespaceSchemaNode.is(schema)`.
81
+ */
183
82
  planTypeOperations?: (options: {
184
83
  readonly typeName: string;
185
84
  readonly typeInstance: StorageTypeInstance;
186
85
  readonly contract: Contract<SqlStorage>;
187
- readonly schema: SqlSchemaIR;
86
+ readonly schema: SqlSchemaIRNode;
188
87
  readonly schemaName?: string;
189
88
  readonly policy: MigrationOperationPolicy;
190
89
  }) => StorageTypePlanResult<TTargetDetails>;
191
90
  verifyType?: (options: {
192
91
  readonly typeName: string;
193
92
  readonly typeInstance: StorageTypeInstance;
194
- readonly schema: SqlSchemaIR;
93
+ readonly schema: SqlSchemaIRNode;
195
94
  readonly schemaName?: string;
196
- }) => readonly SchemaIssue[];
95
+ }) => readonly SchemaDiffIssue[];
197
96
  introspectTypes?: (options: {
198
97
  readonly driver: SqlControlDriverInstance<string>;
199
98
  readonly schemaName?: string;
@@ -356,7 +255,12 @@ interface SqlPlannerFailureResult extends Omit<MigrationPlannerFailureResult, 'c
356
255
  type SqlPlannerResult<TTargetDetails> = SqlPlannerSuccessResult<TTargetDetails> | SqlPlannerFailureResult;
357
256
  interface SqlMigrationPlannerPlanOptions {
358
257
  readonly contract: Contract<SqlStorage>;
359
- readonly schema: SqlSchemaIR;
258
+ /**
259
+ * The "from"/live schema as the target's introspected node (SQLite a flat
260
+ * `SqlSchemaIR`, Postgres a `PostgresDatabaseSchemaNode` root). Structure-aware
261
+ * consumers narrow the concrete shape before walking it.
262
+ */
263
+ readonly schema: SqlSchemaIRNode;
360
264
  readonly policy: MigrationOperationPolicy;
361
265
  readonly schemaName?: string;
362
266
  /**
@@ -391,6 +295,16 @@ interface SqlMigrationPlannerPlanOptions {
391
295
  * All components must have matching familyId ('sql') and targetId.
392
296
  */
393
297
  readonly frameworkComponents: ReadonlyArray<TargetBoundComponentDescriptor<'sql', string>>;
298
+ /**
299
+ * Ownership oracle over the whole contract-space composition (the passive
300
+ * aggregate). The planner asks it, per live extra node, whether any space
301
+ * declares that entity: a sibling-owned node is left untouched, an unowned
302
+ * node is a genuine extra it may drop under a destructive policy. The
303
+ * planner holds no list of other spaces' names — ownership lives in the
304
+ * aggregate; it only asks. Absent for a single-space plan handed no
305
+ * aggregate. See {@link SchemaOwnership}.
306
+ */
307
+ readonly ownership?: SchemaOwnership;
394
308
  }
395
309
  interface SqlMigrationPlanner<TTargetDetails> {
396
310
  plan(options: SqlMigrationPlannerPlanOptions): SqlPlannerResult<TTargetDetails>;
@@ -479,25 +393,6 @@ interface SqlMigrationRunner<TTargetDetails> {
479
393
  */
480
394
  executeOnConnection(options: SqlMigrationRunnerExecuteOptions<TTargetDetails>): Promise<SqlMigrationRunnerResult>;
481
395
  }
482
- interface SqlControlTargetDescriptor<TTargetId extends string, TTargetDetails, TContract extends Contract<SqlStorage> = Contract<SqlStorage>> extends MigratableTargetDescriptor<'sql', TTargetId, SqlControlFamilyInstance> {
483
- readonly queryOperations?: () => SqlOperationDescriptors;
484
- /**
485
- * JSON ⇄ class boundary for the SQL target's contract. The descriptor
486
- * composes a concrete `SqlContractSerializerBase` subclass; the rest
487
- * of the control stack reaches `descriptor.contractSerializer` rather
488
- * than importing a per-target deserialization function.
489
- */
490
- readonly contractSerializer: ContractSerializer<TContract>;
491
- /**
492
- * Per-target schema verifier walking the contract against
493
- * `SqlSchemaIR`. The descriptor composes a concrete
494
- * `SqlSchemaVerifierBase` subclass; the family-shared walk lives on
495
- * the base, the target-specific dispatch on the subclass.
496
- */
497
- readonly schemaVerifier: SchemaVerifier<TContract, SqlSchemaIR>;
498
- createPlanner(adapter: SqlControlAdapter<TTargetId>): SqlMigrationPlanner<TTargetDetails>;
499
- createRunner(family: SqlControlFamilyInstance): SqlMigrationRunner<TTargetDetails>;
500
- }
501
396
  interface CreateSqlMigrationPlanOptions<TTargetDetails> {
502
397
  readonly targetId: string;
503
398
  /**
@@ -516,5 +411,5 @@ interface CreateSqlMigrationPlanOptions<TTargetDetails> {
516
411
  readonly meta?: AnyRecord;
517
412
  }
518
413
  //#endregion
519
- export { SqlPlannerResult as A, SqlMigrationRunnerResult as C, SqlPlannerConflictKind as D, SqlPlannerConflict as E, StorageTypePlanResult as M, SqlControlFamilyInstance as N, SqlPlannerConflictLocation as O, SqlMigrationRunnerFailure as S, SqlPlanTargetDetails as T, SqlMigrationPlannerPlanOptions as _, FieldEvent as a, SqlMigrationRunnerExecuteCallbacks as b, SqlControlAdapterDescriptor as c, SqlMigrationPlan as d, SqlMigrationPlanContractInfo as f, SqlMigrationPlanner as g, SqlMigrationPlanOperationTarget as h, ExpandNativeTypeInput as i, SqlPlannerSuccessResult as j, SqlPlannerFailureResult as k, SqlControlExtensionDescriptor as l, SqlMigrationPlanOperationStep as m, CodecControlHooks as n, FieldEventContext as o, SqlMigrationPlanOperation as p, CreateSqlMigrationPlanOptions as r, ResolveIdentityValueInput as s, AnyRecord as t, SqlControlTargetDescriptor as u, SqlMigrationRunner as v, SqlMigrationRunnerSuccessValue as w, SqlMigrationRunnerExecuteOptions as x, SqlMigrationRunnerErrorCode as y };
520
- //# sourceMappingURL=types-kgstZ_Zd.d.mts.map
414
+ export { SqlPlannerSuccessResult as A, SqlMigrationRunnerSuccessValue as C, SqlPlannerConflictLocation as D, SqlPlannerConflictKind as E, SqlPlannerFailureResult as O, SqlMigrationRunnerResult as S, SqlPlannerConflict as T, SqlMigrationRunner as _, FieldEvent as a, SqlMigrationRunnerExecuteOptions as b, SqlControlAdapterDescriptor as c, SqlMigrationPlanContractInfo as d, SqlMigrationPlanOperation as f, SqlMigrationPlannerPlanOptions as g, SqlMigrationPlanner as h, ExpandNativeTypeInput as i, StorageTypePlanResult as j, SqlPlannerResult as k, SqlControlExtensionDescriptor as l, SqlMigrationPlanOperationTarget as m, CodecControlHooks as n, FieldEventContext as o, SqlMigrationPlanOperationStep as p, CreateSqlMigrationPlanOptions as r, ResolveIdentityValueInput as s, AnyRecord as t, SqlMigrationPlan as u, SqlMigrationRunnerErrorCode as v, SqlPlanTargetDetails as w, SqlMigrationRunnerFailure as x, SqlMigrationRunnerExecuteCallbacks as y };
415
+ //# sourceMappingURL=types-COTsneBU.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-COTsneBU.d.mts","names":[],"sources":["../src/core/migrations/types.ts"],"mappings":"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"}
package/package.json CHANGED
@@ -1,34 +1,34 @@
1
1
  {
2
2
  "name": "@prisma-next/family-sql",
3
- "version": "0.14.0-dev.6",
3
+ "version": "0.14.0-dev.60",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "description": "SQL family descriptor for Prisma Next",
8
8
  "dependencies": {
9
- "@prisma-next/contract": "0.14.0-dev.6",
10
- "@prisma-next/emitter": "0.14.0-dev.6",
11
- "@prisma-next/framework-components": "0.14.0-dev.6",
12
- "@prisma-next/migration-tools": "0.14.0-dev.6",
13
- "@prisma-next/operations": "0.14.0-dev.6",
14
- "@prisma-next/sql-contract": "0.14.0-dev.6",
15
- "@prisma-next/sql-contract-emitter": "0.14.0-dev.6",
16
- "@prisma-next/sql-contract-ts": "0.14.0-dev.6",
17
- "@prisma-next/sql-operations": "0.14.0-dev.6",
18
- "@prisma-next/sql-relational-core": "0.14.0-dev.6",
19
- "@prisma-next/sql-runtime": "0.14.0-dev.6",
20
- "@prisma-next/sql-schema-ir": "0.14.0-dev.6",
21
- "@prisma-next/utils": "0.14.0-dev.6",
9
+ "@prisma-next/contract": "0.14.0-dev.60",
10
+ "@prisma-next/emitter": "0.14.0-dev.60",
11
+ "@prisma-next/framework-components": "0.14.0-dev.60",
12
+ "@prisma-next/migration-tools": "0.14.0-dev.60",
13
+ "@prisma-next/operations": "0.14.0-dev.60",
14
+ "@prisma-next/sql-contract": "0.14.0-dev.60",
15
+ "@prisma-next/sql-contract-emitter": "0.14.0-dev.60",
16
+ "@prisma-next/sql-contract-ts": "0.14.0-dev.60",
17
+ "@prisma-next/sql-operations": "0.14.0-dev.60",
18
+ "@prisma-next/sql-relational-core": "0.14.0-dev.60",
19
+ "@prisma-next/sql-runtime": "0.14.0-dev.60",
20
+ "@prisma-next/sql-schema-ir": "0.14.0-dev.60",
21
+ "@prisma-next/utils": "0.14.0-dev.60",
22
22
  "arktype": "^2.2.0"
23
23
  },
24
24
  "devDependencies": {
25
- "@prisma-next/driver-postgres": "0.14.0-dev.6",
26
- "@prisma-next/psl-parser": "0.14.0-dev.6",
27
- "@prisma-next/psl-printer": "0.14.0-dev.6",
28
- "@prisma-next/sql-contract-psl": "0.14.0-dev.6",
29
- "@prisma-next/test-utils": "0.14.0-dev.6",
30
- "@prisma-next/tsconfig": "0.14.0-dev.6",
31
- "@prisma-next/tsdown": "0.14.0-dev.6",
25
+ "@prisma-next/driver-postgres": "0.14.0-dev.60",
26
+ "@prisma-next/psl-parser": "0.14.0-dev.60",
27
+ "@prisma-next/psl-printer": "0.14.0-dev.60",
28
+ "@prisma-next/sql-contract-psl": "0.14.0-dev.60",
29
+ "@prisma-next/test-utils": "0.14.0-dev.60",
30
+ "@prisma-next/tsconfig": "0.14.0-dev.60",
31
+ "@prisma-next/tsdown": "0.14.0-dev.60",
32
32
  "tsdown": "0.22.1",
33
33
  "typescript": "5.9.3",
34
34
  "vitest": "4.1.8"
@@ -48,12 +48,12 @@
48
48
  "exports": {
49
49
  "./control": "./dist/control.mjs",
50
50
  "./control-adapter": "./dist/control-adapter.mjs",
51
+ "./diff": "./dist/diff.mjs",
51
52
  "./ir": "./dist/ir.mjs",
52
53
  "./migration": "./dist/migration.mjs",
53
54
  "./pack": "./dist/pack.mjs",
55
+ "./psl-infer": "./dist/psl-infer.mjs",
54
56
  "./runtime": "./dist/runtime.mjs",
55
- "./schema-verify": "./dist/schema-verify.mjs",
56
- "./test-utils": "./dist/test-utils.mjs",
57
57
  "./verify": "./dist/verify.mjs",
58
58
  "./package.json": "./package.json"
59
59
  },
@@ -1,21 +1,15 @@
1
1
  import type { JsonValue } from '@prisma-next/contract/types';
2
- import type {
3
- AuthoringEntityContext,
4
- AuthoringEntityTypeDescriptor,
5
- AuthoringEntityTypeNamespace,
6
- AuthoringPslBlockDescriptorNamespace,
7
- PslExtensionBlock,
2
+ import {
3
+ type AuthoringEntityContext,
4
+ type AuthoringEntityTypeDescriptor,
5
+ type AuthoringEntityTypeNamespace,
6
+ type AuthoringPslBlockDescriptorNamespace,
7
+ type PslExtensionBlock,
8
+ resolveEnumCodecId,
8
9
  } from '@prisma-next/framework-components/authoring';
9
10
  import { type EnumTypeHandle, enumType } from '@prisma-next/sql-contract-ts/contract-builder';
10
11
  import { blindCast } from '@prisma-next/utils/casts';
11
12
 
12
- function parseQuotedString(raw: string): string | undefined {
13
- if (raw.startsWith('"') && raw.endsWith('"') && raw.length >= 2) {
14
- return raw.slice(1, -1);
15
- }
16
- return undefined;
17
- }
18
-
19
13
  export const sqlFamilyEnumEntityDescriptor = {
20
14
  kind: 'entity' as const,
21
15
  discriminator: 'enum',
@@ -27,49 +21,30 @@ export const sqlFamilyEnumEntityDescriptor = {
27
21
  const sourceId = ctx.sourceId ?? 'unknown';
28
22
  const diagnostics = ctx.diagnostics;
29
23
 
30
- const typeAttr = block.blockAttributes.find((a) => a.name === 'type');
31
- if (!typeAttr) {
32
- diagnostics?.push({
33
- code: 'PSL_ENUM_MISSING_TYPE',
34
- message: `enum "${block.name}" is missing a @@type("codecId") attribute`,
35
- sourceId,
36
- span: block.span,
37
- });
38
- return undefined;
39
- }
40
-
41
- const rawCodecArg = typeAttr.args[0]?.value;
42
- const codecId = rawCodecArg !== undefined ? parseQuotedString(rawCodecArg) : undefined;
43
- if (!codecId) {
44
- diagnostics?.push({
45
- code: 'PSL_ENUM_MISSING_TYPE',
46
- message: `enum "${block.name}" @@type attribute must have a quoted codec id argument`,
47
- sourceId,
48
- span: typeAttr.span,
49
- });
24
+ const resolved = resolveEnumCodecId(block, ctx);
25
+ if (resolved === undefined) {
50
26
  return undefined;
51
27
  }
28
+ const { codecId, codecSpan } = resolved;
52
29
 
53
30
  const nativeType = ctx.codecLookup?.targetTypesFor(codecId)?.[0];
54
31
  if (nativeType === undefined) {
55
- const typeArgSpan = typeAttr.args[0]?.span ?? typeAttr.span;
56
32
  diagnostics?.push({
57
33
  code: 'PSL_EXTENSION_INVALID_VALUE',
58
34
  message: `enum "${block.name}" @@type references unknown codec "${codecId}"`,
59
35
  sourceId,
60
- span: typeArgSpan,
36
+ span: codecSpan,
61
37
  });
62
38
  return undefined;
63
39
  }
64
40
 
65
41
  const codec = ctx.codecLookup?.get(codecId);
66
42
  if (codec === undefined) {
67
- const typeArgSpan = typeAttr.args[0]?.span ?? typeAttr.span;
68
43
  diagnostics?.push({
69
44
  code: 'PSL_EXTENSION_INVALID_VALUE',
70
45
  message: `enum "${block.name}" @@type codec "${codecId}" resolves in targetTypesFor but is absent from codecLookup.get`,
71
46
  sourceId,
72
- span: typeArgSpan,
47
+ span: codecSpan,
73
48
  });
74
49
  return undefined;
75
50
  }
@@ -11,8 +11,8 @@ import type {
11
11
  LowererContext,
12
12
  SqlExecuteRequest,
13
13
  } from '@prisma-next/sql-relational-core/ast';
14
- import type { SqlSchemaIR } from '@prisma-next/sql-schema-ir/types';
15
- import type { DefaultNormalizer, NativeTypeNormalizer } from './schema-verify/verify-sql-schema';
14
+ import type { SqlSchemaIRNode } from '@prisma-next/sql-schema-ir/types';
15
+ import type { DefaultNormalizer, NativeTypeNormalizer } from './diff/sql-schema-diff';
16
16
 
17
17
  /**
18
18
  * Structural interface for anything that can lower a SQL/DDL AST node to a
@@ -157,22 +157,27 @@ export interface SqlControlAdapter<TTarget extends string = string>
157
157
  ): Promise<void>;
158
158
 
159
159
  /**
160
- * Introspects a database schema and returns a raw SqlSchemaIR.
160
+ * Introspects a database schema and returns the target's schema-IR node.
161
161
  *
162
162
  * This is a pure schema discovery operation that queries the database catalog
163
163
  * and returns the schema structure without type mapping or contract enrichment.
164
164
  * Type mapping and enrichment are handled separately by enrichment helpers.
165
165
  *
166
+ * The return type is the family-base `SqlSchemaIRNode` so each target returns
167
+ * its own node shape: SQLite returns a flat `SqlSchemaIR`, Postgres returns a
168
+ * `PostgresDatabaseSchemaNode` tree root. Consumers `ensure` the concrete
169
+ * target type before walking it.
170
+ *
166
171
  * @param driver - ControlDriverInstance instance for executing queries (target-specific)
167
172
  * @param contract - Optional contract for contract-guided introspection (filtering, optimization)
168
173
  * @param schema - Schema name to introspect (defaults to 'public')
169
- * @returns Promise resolving to SqlSchemaIR representing the live database schema
174
+ * @returns Promise resolving to the live database schema node
170
175
  */
171
176
  introspect(
172
177
  driver: SqlControlDriverInstance<TTarget>,
173
178
  contract?: unknown,
174
179
  schema?: string,
175
- ): Promise<SqlSchemaIR>;
180
+ ): Promise<SqlSchemaIRNode>;
176
181
 
177
182
  /**
178
183
  * Optional target-specific normalizer for raw database default expressions.