@prisma-next/family-sql 0.5.0-dev.4 → 0.5.0-dev.41

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 (42) hide show
  1. package/README.md +2 -2
  2. package/dist/control-adapter.d.mts +12 -1
  3. package/dist/control-adapter.d.mts.map +1 -1
  4. package/dist/control.d.mts +3 -2
  5. package/dist/control.d.mts.map +1 -1
  6. package/dist/control.mjs +1025 -11
  7. package/dist/control.mjs.map +1 -1
  8. package/dist/migration.d.mts +14 -2
  9. package/dist/migration.d.mts.map +1 -1
  10. package/dist/migration.mjs +16 -1
  11. package/dist/migration.mjs.map +1 -1
  12. package/dist/schema-verify.d.mts +2 -2
  13. package/dist/{types-C6K4mxDM.d.mts → types-gLyIyd2X.d.mts} +36 -11
  14. package/dist/types-gLyIyd2X.d.mts.map +1 -0
  15. package/dist/verify-BdES8wgQ.mjs +82 -0
  16. package/dist/verify-BdES8wgQ.mjs.map +1 -0
  17. package/dist/verify-sql-schema-Ovz7RXR5.mjs.map +1 -1
  18. package/dist/{verify-sql-schema-BBhkqEDo.d.mts → verify-sql-schema-_EoNcGIq.d.mts} +2 -2
  19. package/dist/{verify-sql-schema-BBhkqEDo.d.mts.map → verify-sql-schema-_EoNcGIq.d.mts.map} +1 -1
  20. package/dist/verify.d.mts +16 -20
  21. package/dist/verify.d.mts.map +1 -1
  22. package/dist/verify.mjs +2 -2
  23. package/package.json +19 -19
  24. package/src/core/control-adapter.ts +12 -0
  25. package/src/core/control-instance.ts +43 -15
  26. package/src/core/migrations/plan-helpers.ts +1 -0
  27. package/src/core/migrations/types.ts +29 -6
  28. package/src/core/operation-preview.ts +62 -0
  29. package/src/core/psl-contract-infer/default-mapping.ts +56 -0
  30. package/src/core/psl-contract-infer/name-transforms.ts +178 -0
  31. package/src/core/psl-contract-infer/postgres-default-mapping.ts +16 -0
  32. package/src/core/psl-contract-infer/postgres-type-map.ts +165 -0
  33. package/src/core/psl-contract-infer/printer-config.ts +55 -0
  34. package/src/core/psl-contract-infer/raw-default-parser.ts +91 -0
  35. package/src/core/psl-contract-infer/relation-inference.ts +196 -0
  36. package/src/core/psl-contract-infer/sql-schema-ir-to-psl-ast.ts +832 -0
  37. package/src/core/sql-migration.ts +16 -1
  38. package/src/core/verify.ts +46 -108
  39. package/src/exports/verify.ts +1 -1
  40. package/dist/types-C6K4mxDM.d.mts.map +0 -1
  41. package/dist/verify-4GshvY4p.mjs +0 -122
  42. package/dist/verify-4GshvY4p.mjs.map +0 -1
@@ -1,10 +1,11 @@
1
- import { ControlAdapterDescriptor, ControlDriverInstance, ControlExtensionDescriptor, ControlFamilyInstance, ControlStack, DataTransformOperation, MigratableTargetDescriptor, MigrationOperationPolicy, MigrationPlan, MigrationPlanOperation, MigrationPlannerConflict, MigrationPlannerFailureResult, MigrationPlannerSuccessResult, MigrationRunnerExecutionChecks, MigrationRunnerFailure, MigrationRunnerSuccessValue, OperationContext, SchemaIssue, SchemaViewCapable, SignDatabaseResult, VerifyDatabaseResult, VerifyDatabaseSchemaResult } from "@prisma-next/framework-components/control";
1
+ import { ControlAdapterDescriptor, ControlDriverInstance, ControlExtensionDescriptor, ControlFamilyInstance, ControlStack, DataTransformOperation, MigratableTargetDescriptor, MigrationOperationPolicy, MigrationPlan, MigrationPlanOperation, MigrationPlannerConflict, MigrationPlannerFailureResult, MigrationPlannerSuccessResult, MigrationRunnerExecutionChecks, MigrationRunnerFailure, MigrationRunnerSuccessValue, OperationContext, OperationPreview, OperationPreviewCapable, PslContractInferCapable, SchemaIssue, SchemaViewCapable, SignDatabaseResult, VerifyDatabaseResult, VerifyDatabaseSchemaResult } from "@prisma-next/framework-components/control";
2
2
  import { Result } from "@prisma-next/utils/result";
3
- import { SqlSchemaIR } from "@prisma-next/sql-schema-ir/types";
4
3
  import { Contract } from "@prisma-next/contract/types";
4
+ import { SqlSchemaIR } from "@prisma-next/sql-schema-ir/types";
5
5
  import { TargetBoundComponentDescriptor } from "@prisma-next/framework-components/components";
6
6
  import { SqlStorage, StorageTypeInstance } from "@prisma-next/sql-contract/types";
7
7
  import { TypesImportSpec } from "@prisma-next/framework-components/emission";
8
+ import { PslDocumentAst } from "@prisma-next/framework-components/psl-ast";
8
9
  import { SqlOperationDescriptor } from "@prisma-next/sql-operations";
9
10
 
10
11
  //#region src/core/control-instance.d.ts
@@ -32,7 +33,7 @@ interface SchemaVerifyOptions {
32
33
  */
33
34
  readonly frameworkComponents: ReadonlyArray<TargetBoundComponentDescriptor<'sql', string>>;
34
35
  }
35
- interface SqlControlFamilyInstance extends ControlFamilyInstance<'sql', SqlSchemaIR>, SchemaViewCapable<SqlSchemaIR>, SqlFamilyInstanceState {
36
+ interface SqlControlFamilyInstance extends ControlFamilyInstance<'sql', SqlSchemaIR>, SchemaViewCapable<SqlSchemaIR>, PslContractInferCapable<SqlSchemaIR>, OperationPreviewCapable, SqlFamilyInstanceState {
36
37
  validateContract(contractJson: unknown): Contract;
37
38
  verify(options: {
38
39
  readonly driver: ControlDriverInstance<'sql', string>;
@@ -52,6 +53,8 @@ interface SqlControlFamilyInstance extends ControlFamilyInstance<'sql', SqlSchem
52
53
  readonly driver: ControlDriverInstance<'sql', string>;
53
54
  readonly contract?: unknown;
54
55
  }): Promise<SqlSchemaIR>;
56
+ inferPslContract(schemaIR: SqlSchemaIR): PslDocumentAst;
57
+ toOperationPreview(operations: readonly MigrationPlanOperation[]): OperationPreview;
55
58
  }
56
59
  //#endregion
57
60
  //#region src/core/migrations/types.d.ts
@@ -193,6 +196,15 @@ interface SqlMigrationPlan<TTargetDetails> extends MigrationPlan {
193
196
  */
194
197
  readonly destination: SqlMigrationPlanContractInfo;
195
198
  readonly operations: readonly SqlMigrationPlanOperation<TTargetDetails>[];
199
+ /**
200
+ * Sorted, deduplicated invariant ids declared by this plan's data-transform
201
+ * ops. Required at the SQL-family layer (the SQL runners consume this as
202
+ * the source of truth for marker writes and self-edge no-op checks); the
203
+ * framework-level {@link MigrationPlan.providedInvariants} stays optional
204
+ * because `db init` / `db update` plans don't have a corresponding
205
+ * migration manifest.
206
+ */
207
+ readonly providedInvariants: readonly string[];
196
208
  readonly meta?: AnyRecord;
197
209
  }
198
210
  type SqlPlannerConflictKind = 'typeMismatch' | 'nullabilityConflict' | 'indexIncompatible' | 'foreignKeyConflict' | 'missingButNonAdditive' | 'unsupportedOperation';
@@ -223,14 +235,21 @@ interface SqlMigrationPlannerPlanOptions {
223
235
  readonly policy: MigrationOperationPolicy;
224
236
  readonly schemaName?: string;
225
237
  /**
226
- * The "from" contract (state the planner assumes the database starts at).
227
- * Only `migration plan` supplies this; `db update` / `db init` reconcile
228
- * against the live schema with no old contract. Strategies that need
229
- * from/to column-shape comparisons (unsafe type change, nullability
238
+ * The "from" contract (state the planner assumes the database starts at),
239
+ * or `null` for reconciliation flows that have no prior contract.
240
+ *
241
+ * Required at every call site so the structural fact "I have a prior
242
+ * contract / I don't" is visible in the type. `migration plan` supplies
243
+ * the previous bundle's `metadata.toContract`; `db update` / `db init`
244
+ * reconcile against the live schema and pass `null`. Strategies that
245
+ * need from/to column-shape comparisons (unsafe type change, nullability
230
246
  * tightening) use this to decide whether to emit `dataTransform`
231
- * placeholders.
247
+ * placeholders; they short-circuit when it is `null`.
248
+ *
249
+ * Planners also derive the "from" identity they stamp onto the produced
250
+ * plan's `describe()` as `fromContract?.storage.storageHash ?? null`.
232
251
  */
233
- readonly fromContract?: Contract<SqlStorage> | null;
252
+ readonly fromContract: Contract<SqlStorage> | null;
234
253
  /**
235
254
  * Active framework components participating in this composition.
236
255
  * SQL targets can interpret this list to derive database dependencies.
@@ -274,7 +293,7 @@ interface SqlMigrationRunnerExecuteOptions<TTargetDetails> {
274
293
  */
275
294
  readonly frameworkComponents: ReadonlyArray<TargetBoundComponentDescriptor<'sql', string>>;
276
295
  }
277
- type SqlMigrationRunnerErrorCode = 'DESTINATION_CONTRACT_MISMATCH' | 'MARKER_ORIGIN_MISMATCH' | 'POLICY_VIOLATION' | 'PRECHECK_FAILED' | 'POSTCHECK_FAILED' | 'SCHEMA_VERIFY_FAILED' | 'EXECUTION_FAILED';
296
+ type SqlMigrationRunnerErrorCode = 'DESTINATION_CONTRACT_MISMATCH' | 'MARKER_ORIGIN_MISMATCH' | 'POLICY_VIOLATION' | 'PRECHECK_FAILED' | 'POSTCHECK_FAILED' | 'SCHEMA_VERIFY_FAILED' | 'FOREIGN_KEY_VIOLATION' | 'EXECUTION_FAILED';
278
297
  interface SqlMigrationRunnerFailure extends MigrationRunnerFailure {
279
298
  readonly code: SqlMigrationRunnerErrorCode;
280
299
  readonly meta?: AnyRecord;
@@ -294,8 +313,14 @@ interface CreateSqlMigrationPlanOptions<TTargetDetails> {
294
313
  readonly origin?: SqlMigrationPlanContractInfo | null;
295
314
  readonly destination: SqlMigrationPlanContractInfo;
296
315
  readonly operations: readonly SqlMigrationPlanOperation<TTargetDetails>[];
316
+ /**
317
+ * Sorted, deduplicated invariant ids for this plan; mirrors the required
318
+ * field on {@link SqlMigrationPlan}. Callers without a migration manifest
319
+ * (`db init`, `db update`, planner-built plans) pass `[]`.
320
+ */
321
+ readonly providedInvariants: readonly string[];
297
322
  readonly meta?: AnyRecord;
298
323
  }
299
324
  //#endregion
300
325
  export { SqlPlannerFailureResult as A, SqlMigrationRunnerFailure as C, SqlPlannerConflict as D, SqlPlanTargetDetails as E, isDatabaseDependencyProvider as F, SchemaVerifyOptions as I, SqlControlFamilyInstance as L, SqlPlannerSuccessResult as M, StorageTypePlanResult as N, SqlPlannerConflictKind as O, collectInitDependencies as P, SqlMigrationRunnerExecuteOptions as S, SqlMigrationRunnerSuccessValue as T, SqlMigrationPlanner as _, ComponentDatabaseDependency as a, SqlMigrationRunnerErrorCode as b, ResolveIdentityValueInput as c, SqlControlTargetDescriptor as d, SqlMigrationPlan as f, SqlMigrationPlanOperationTarget as g, SqlMigrationPlanOperationStep as h, ComponentDatabaseDependencies as i, SqlPlannerResult as j, SqlPlannerConflictLocation as k, SqlControlAdapterDescriptor as l, SqlMigrationPlanOperation as m, AnySqlMigrationOperation as n, CreateSqlMigrationPlanOptions as o, SqlMigrationPlanContractInfo as p, CodecControlHooks as r, ExpandNativeTypeInput as s, AnyRecord as t, SqlControlExtensionDescriptor as u, SqlMigrationPlannerPlanOptions as v, SqlMigrationRunnerResult as w, SqlMigrationRunnerExecuteCallbacks as x, SqlMigrationRunner as y };
301
- //# sourceMappingURL=types-C6K4mxDM.d.mts.map
326
+ //# sourceMappingURL=types-gLyIyd2X.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-gLyIyd2X.d.mts","names":[],"sources":["../src/core/control-instance.ts","../src/core/migrations/types.ts"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { type } from "arktype";
2
+
3
+ //#region src/core/verify.ts
4
+ const MetaSchema = type({ "[string]": "unknown" });
5
+ function parseMeta(meta) {
6
+ if (meta === null || meta === void 0) return {};
7
+ let parsed;
8
+ if (typeof meta === "string") try {
9
+ parsed = JSON.parse(meta);
10
+ } catch {
11
+ return {};
12
+ }
13
+ else parsed = meta;
14
+ const result = MetaSchema(parsed);
15
+ if (result instanceof type.errors) return {};
16
+ return result;
17
+ }
18
+ /**
19
+ * SQLite stores `contract_json` as TEXT, so the wire shape is a JSON string;
20
+ * Postgres uses `jsonb` and returns an already-parsed value. Normalize both
21
+ * here so `ContractMarkerRecord.contractJson` is always the structured form.
22
+ */
23
+ function parseContractJson(value) {
24
+ if (value === null || value === void 0) return null;
25
+ if (typeof value !== "string") return value;
26
+ try {
27
+ return JSON.parse(value);
28
+ } catch {
29
+ return null;
30
+ }
31
+ }
32
+ const ContractMarkerRowSchema = type({
33
+ core_hash: "string",
34
+ profile_hash: "string",
35
+ "contract_json?": "unknown | null",
36
+ "canonical_version?": "number | null",
37
+ "updated_at?": "Date | string",
38
+ "app_tag?": "string | null",
39
+ "meta?": "unknown | null",
40
+ invariants: type("string").array()
41
+ });
42
+ /**
43
+ * Parses a contract marker row from database query result.
44
+ * This is SQL-specific parsing logic (handles SQL row structure with snake_case columns).
45
+ */
46
+ function parseContractMarkerRow(row) {
47
+ const result = ContractMarkerRowSchema(row);
48
+ if (result instanceof type.errors) {
49
+ const messages = result.map((p) => p.message).join("; ");
50
+ throw new Error(`Invalid contract marker row: ${messages}`);
51
+ }
52
+ const updatedAt = result.updated_at ? result.updated_at instanceof Date ? result.updated_at : new Date(result.updated_at) : /* @__PURE__ */ new Date();
53
+ return {
54
+ storageHash: result.core_hash,
55
+ profileHash: result.profile_hash,
56
+ contractJson: parseContractJson(result.contract_json),
57
+ canonicalVersion: result.canonical_version ?? null,
58
+ updatedAt,
59
+ appTag: result.app_tag ?? null,
60
+ meta: parseMeta(result.meta),
61
+ invariants: result.invariants
62
+ };
63
+ }
64
+ /**
65
+ * Collects supported codec type IDs from adapter and extension manifests.
66
+ * Returns a sorted, unique array of type IDs that are declared in the manifests.
67
+ * This enables coverage checks by comparing contract column types against supported types.
68
+ *
69
+ * Note: This extracts type IDs from manifest type imports, not from runtime codec registries.
70
+ * The manifests declare which codec types are available, but the actual type IDs
71
+ * are defined in the codec-types TypeScript modules that are imported.
72
+ *
73
+ * For MVP, we return an empty array since extracting type IDs from TypeScript modules
74
+ * would require runtime evaluation or static analysis. This can be enhanced later.
75
+ */
76
+ function collectSupportedCodecTypeIds(descriptors) {
77
+ return [];
78
+ }
79
+
80
+ //#endregion
81
+ export { parseContractMarkerRow as n, collectSupportedCodecTypeIds as t };
82
+ //# sourceMappingURL=verify-BdES8wgQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-BdES8wgQ.mjs","names":["parsed: unknown"],"sources":["../src/core/verify.ts"],"sourcesContent":["import type { ContractMarkerRecord } from '@prisma-next/contract/types';\nimport { type } from 'arktype';\n\nconst MetaSchema = type({ '[string]': 'unknown' });\n\nfunction parseMeta(meta: unknown): Record<string, unknown> {\n if (meta === null || meta === undefined) {\n return {};\n }\n\n let parsed: unknown;\n if (typeof meta === 'string') {\n try {\n parsed = JSON.parse(meta);\n } catch {\n return {};\n }\n } else {\n parsed = meta;\n }\n\n const result = MetaSchema(parsed);\n if (result instanceof type.errors) {\n return {};\n }\n\n return result as Record<string, unknown>;\n}\n\n/**\n * SQLite stores `contract_json` as TEXT, so the wire shape is a JSON string;\n * Postgres uses `jsonb` and returns an already-parsed value. Normalize both\n * here so `ContractMarkerRecord.contractJson` is always the structured form.\n */\nfunction parseContractJson(value: unknown): unknown {\n if (value === null || value === undefined) return null;\n if (typeof value !== 'string') return value;\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n}\n\n/**\n * Wire shape of a `prisma_contract.marker` row as it comes out of a SQL\n * driver. Snake-cased to match the on-disk column names. Shared by every\n * SQL target's `readMarker` so each runner doesn't redeclare it inline.\n */\nexport type ContractMarkerRow = {\n core_hash: string;\n profile_hash: string;\n contract_json: unknown | null;\n canonical_version: number | null;\n updated_at: Date | string;\n app_tag: string | null;\n meta: unknown | null;\n // SQLite stores arrays as JSON-TEXT, so this is `string` on the wire from\n // a SQLite driver and `string[]` from a Postgres driver. Targets normalize\n // before passing to `parseContractMarkerRow`.\n invariants: unknown;\n};\n\nconst ContractMarkerRowSchema = type({\n core_hash: 'string',\n profile_hash: 'string',\n 'contract_json?': 'unknown | null',\n 'canonical_version?': 'number | null',\n 'updated_at?': 'Date | string',\n 'app_tag?': 'string | null',\n 'meta?': 'unknown | null',\n invariants: type('string').array(),\n});\n\n/**\n * Parses a contract marker row from database query result.\n * This is SQL-specific parsing logic (handles SQL row structure with snake_case columns).\n */\nexport function parseContractMarkerRow(row: unknown): ContractMarkerRecord {\n const result = ContractMarkerRowSchema(row);\n if (result instanceof type.errors) {\n const messages = result.map((p: { message: string }) => p.message).join('; ');\n throw new Error(`Invalid contract marker row: ${messages}`);\n }\n\n const updatedAt = result.updated_at\n ? result.updated_at instanceof Date\n ? result.updated_at\n : new Date(result.updated_at)\n : new Date();\n\n return {\n storageHash: result.core_hash,\n profileHash: result.profile_hash,\n contractJson: parseContractJson(result.contract_json),\n canonicalVersion: result.canonical_version ?? null,\n updatedAt,\n appTag: result.app_tag ?? null,\n meta: parseMeta(result.meta),\n invariants: result.invariants,\n };\n}\n\n/**\n * Collects supported codec type IDs from adapter and extension manifests.\n * Returns a sorted, unique array of type IDs that are declared in the manifests.\n * This enables coverage checks by comparing contract column types against supported types.\n *\n * Note: This extracts type IDs from manifest type imports, not from runtime codec registries.\n * The manifests declare which codec types are available, but the actual type IDs\n * are defined in the codec-types TypeScript modules that are imported.\n *\n * For MVP, we return an empty array since extracting type IDs from TypeScript modules\n * would require runtime evaluation or static analysis. This can be enhanced later.\n */\nexport function collectSupportedCodecTypeIds(\n descriptors: ReadonlyArray<{ readonly id: string }>,\n): readonly string[] {\n // For MVP, return empty array\n // Future enhancement: Extract type IDs from codec-types modules via static analysis\n // or require manifests to explicitly list supported type IDs\n void descriptors;\n return [];\n}\n"],"mappings":";;;AAGA,MAAM,aAAa,KAAK,EAAE,YAAY,WAAW,CAAC;AAElD,SAAS,UAAU,MAAwC;AACzD,KAAI,SAAS,QAAQ,SAAS,OAC5B,QAAO,EAAE;CAGX,IAAIA;AACJ,KAAI,OAAO,SAAS,SAClB,KAAI;AACF,WAAS,KAAK,MAAM,KAAK;SACnB;AACN,SAAO,EAAE;;KAGX,UAAS;CAGX,MAAM,SAAS,WAAW,OAAO;AACjC,KAAI,kBAAkB,KAAK,OACzB,QAAO,EAAE;AAGX,QAAO;;;;;;;AAQT,SAAS,kBAAkB,OAAyB;AAClD,KAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,KAAI;AACF,SAAO,KAAK,MAAM,MAAM;SAClB;AACN,SAAO;;;AAuBX,MAAM,0BAA0B,KAAK;CACnC,WAAW;CACX,cAAc;CACd,kBAAkB;CAClB,sBAAsB;CACtB,eAAe;CACf,YAAY;CACZ,SAAS;CACT,YAAY,KAAK,SAAS,CAAC,OAAO;CACnC,CAAC;;;;;AAMF,SAAgB,uBAAuB,KAAoC;CACzE,MAAM,SAAS,wBAAwB,IAAI;AAC3C,KAAI,kBAAkB,KAAK,QAAQ;EACjC,MAAM,WAAW,OAAO,KAAK,MAA2B,EAAE,QAAQ,CAAC,KAAK,KAAK;AAC7E,QAAM,IAAI,MAAM,gCAAgC,WAAW;;CAG7D,MAAM,YAAY,OAAO,aACrB,OAAO,sBAAsB,OAC3B,OAAO,aACP,IAAI,KAAK,OAAO,WAAW,mBAC7B,IAAI,MAAM;AAEd,QAAO;EACL,aAAa,OAAO;EACpB,aAAa,OAAO;EACpB,cAAc,kBAAkB,OAAO,cAAc;EACrD,kBAAkB,OAAO,qBAAqB;EAC9C;EACA,QAAQ,OAAO,WAAW;EAC1B,MAAM,UAAU,OAAO,KAAK;EAC5B,YAAY,OAAO;EACpB;;;;;;;;;;;;;;AAeH,SAAgB,6BACd,aACmB;AAKnB,QAAO,EAAE"}