@prisma-next/family-sql 0.14.0-dev.39 → 0.14.0-dev.40

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 (46) hide show
  1. package/dist/contract-to-schema-ir-S-evq8E6.mjs +264 -0
  2. package/dist/contract-to-schema-ir-S-evq8E6.mjs.map +1 -0
  3. package/dist/{control-adapter-B2q9WN1V.d.mts → control-adapter-DHYFuOBy.d.mts} +14 -17
  4. package/dist/{control-adapter-B2q9WN1V.d.mts.map → control-adapter-DHYFuOBy.d.mts.map} +1 -1
  5. package/dist/control-adapter.d.mts +1 -1
  6. package/dist/control.d.mts +17 -2
  7. package/dist/control.d.mts.map +1 -1
  8. package/dist/control.mjs +42 -943
  9. package/dist/control.mjs.map +1 -1
  10. package/dist/{schema-verify.d.mts → diff.d.mts} +4 -4
  11. package/dist/diff.d.mts.map +1 -0
  12. package/dist/{verify-sql-schema-CEY7b78t.mjs → diff.mjs} +154 -244
  13. package/dist/diff.mjs.map +1 -0
  14. package/dist/migration.d.mts +1 -1
  15. package/dist/psl-infer.d.mts +80 -0
  16. package/dist/psl-infer.d.mts.map +1 -0
  17. package/dist/psl-infer.mjs +334 -0
  18. package/dist/psl-infer.mjs.map +1 -0
  19. package/dist/{verify-sql-schema-B8uEjw2s.d.mts → sql-schema-diff-6z36dZt6.d.mts} +43 -4
  20. package/dist/sql-schema-diff-6z36dZt6.d.mts.map +1 -0
  21. package/dist/{types-BxsFkHYv.d.mts → types-CkOIJXxU.d.mts} +83 -16
  22. package/dist/types-CkOIJXxU.d.mts.map +1 -0
  23. package/package.json +23 -22
  24. package/src/core/control-adapter.ts +12 -24
  25. package/src/core/control-instance.ts +113 -45
  26. package/src/core/{schema-verify/verify-sql-schema.ts → diff/sql-schema-diff.ts} +196 -8
  27. package/src/core/{schema-verify → diff}/verify-helpers.ts +12 -0
  28. package/src/core/migrations/contract-to-schema-ir.ts +48 -13
  29. package/src/core/migrations/field-event-planner.ts +3 -8
  30. package/src/core/migrations/schema-differ.ts +40 -0
  31. package/src/core/migrations/types.ts +43 -2
  32. package/src/core/psl-contract-infer/printer-config.ts +0 -6
  33. package/src/exports/control.ts +1 -0
  34. package/src/exports/diff.ts +18 -0
  35. package/src/exports/psl-infer.ts +36 -0
  36. package/dist/schema-verify.d.mts.map +0 -1
  37. package/dist/schema-verify.mjs +0 -2
  38. package/dist/types-BxsFkHYv.d.mts.map +0 -1
  39. package/dist/verify-sql-schema-B8uEjw2s.d.mts.map +0 -1
  40. package/dist/verify-sql-schema-CEY7b78t.mjs.map +0 -1
  41. package/src/core/psl-contract-infer/postgres-default-mapping.ts +0 -16
  42. package/src/core/psl-contract-infer/postgres-type-map.ts +0 -157
  43. package/src/core/psl-contract-infer/sql-schema-ir-to-psl-ast.ts +0 -795
  44. package/src/exports/schema-verify.ts +0 -18
  45. /package/src/core/{schema-verify → diff}/control-verify-emit.ts +0 -0
  46. /package/src/core/{schema-verify → diff}/verifier-disposition.ts +0 -0
@@ -1,157 +0,0 @@
1
- import type {
2
- EnumInfo,
3
- PslNativeTypeAttribute,
4
- PslTypeMap,
5
- PslTypeResolution,
6
- } from './printer-config';
7
-
8
- const POSTGRES_TO_PSL: Record<string, string> = {
9
- text: 'String',
10
- bool: 'Boolean',
11
- boolean: 'Boolean',
12
- int4: 'Int',
13
- integer: 'Int',
14
- int8: 'BigInt',
15
- bigint: 'BigInt',
16
- float8: 'Float',
17
- 'double precision': 'Float',
18
- numeric: 'Decimal',
19
- decimal: 'Decimal',
20
- timestamptz: 'DateTime',
21
- 'timestamp with time zone': 'DateTime',
22
- jsonb: 'Json',
23
- bytea: 'Bytes',
24
- };
25
-
26
- const PRESERVED_NATIVE_TYPES: Record<
27
- string,
28
- { readonly pslType: string; readonly attributeName: string }
29
- > = {
30
- 'character varying': { pslType: 'String', attributeName: 'db.VarChar' },
31
- character: { pslType: 'String', attributeName: 'db.Char' },
32
- char: { pslType: 'String', attributeName: 'db.Char' },
33
- varchar: { pslType: 'String', attributeName: 'db.VarChar' },
34
- uuid: { pslType: 'String', attributeName: 'db.Uuid' },
35
- int2: { pslType: 'Int', attributeName: 'db.SmallInt' },
36
- smallint: { pslType: 'Int', attributeName: 'db.SmallInt' },
37
- float4: { pslType: 'Float', attributeName: 'db.Real' },
38
- real: { pslType: 'Float', attributeName: 'db.Real' },
39
- timestamp: { pslType: 'DateTime', attributeName: 'db.Timestamp' },
40
- 'timestamp without time zone': { pslType: 'DateTime', attributeName: 'db.Timestamp' },
41
- date: { pslType: 'DateTime', attributeName: 'db.Date' },
42
- time: { pslType: 'DateTime', attributeName: 'db.Time' },
43
- 'time without time zone': { pslType: 'DateTime', attributeName: 'db.Time' },
44
- timetz: { pslType: 'DateTime', attributeName: 'db.Timetz' },
45
- 'time with time zone': { pslType: 'DateTime', attributeName: 'db.Timetz' },
46
- json: { pslType: 'Json', attributeName: 'db.Json' },
47
- };
48
-
49
- const PARAMETERIZED_NATIVE_TYPES: Record<
50
- string,
51
- { readonly pslType: string; readonly attributeName: string }
52
- > = {
53
- 'character varying': { pslType: 'String', attributeName: 'db.VarChar' },
54
- character: { pslType: 'String', attributeName: 'db.Char' },
55
- char: { pslType: 'String', attributeName: 'db.Char' },
56
- varchar: { pslType: 'String', attributeName: 'db.VarChar' },
57
- numeric: { pslType: 'Decimal', attributeName: 'db.Numeric' },
58
- timestamp: { pslType: 'DateTime', attributeName: 'db.Timestamp' },
59
- timestamptz: { pslType: 'DateTime', attributeName: 'db.Timestamptz' },
60
- time: { pslType: 'DateTime', attributeName: 'db.Time' },
61
- timetz: { pslType: 'DateTime', attributeName: 'db.Timetz' },
62
- };
63
-
64
- const PARAMETERIZED_TYPE_PATTERN = /^(.+?)\((.+)\)$/;
65
-
66
- function getOwnMappingValue(map: Record<string, string>, key: string): string | undefined {
67
- return Object.hasOwn(map, key) ? map[key] : undefined;
68
- }
69
-
70
- function getOwnRecordValue<T>(map: Record<string, T>, key: string): T | undefined {
71
- return Object.hasOwn(map, key) ? map[key] : undefined;
72
- }
73
-
74
- function createNativeTypeAttribute(name: string, args?: readonly string[]): PslNativeTypeAttribute {
75
- return args && args.length > 0 ? { name, args } : { name };
76
- }
77
-
78
- function splitTypeParameterList(params: string): readonly string[] {
79
- return params
80
- .split(',')
81
- .map((part) => part.trim())
82
- .filter((part) => part.length > 0);
83
- }
84
-
85
- export function createPostgresTypeMap(enumTypeNames?: ReadonlySet<string>): PslTypeMap {
86
- return {
87
- resolve(nativeType: string): PslTypeResolution {
88
- if (enumTypeNames?.has(nativeType)) {
89
- return { pslType: nativeType, nativeType };
90
- }
91
-
92
- const paramMatch = nativeType.match(PARAMETERIZED_TYPE_PATTERN);
93
- if (paramMatch) {
94
- const [, baseType = nativeType, params = ''] = paramMatch;
95
- const template = getOwnRecordValue(PARAMETERIZED_NATIVE_TYPES, baseType);
96
- if (template) {
97
- return {
98
- pslType: template.pslType,
99
- nativeType,
100
- typeParams: { baseType, params },
101
- nativeTypeAttribute: createNativeTypeAttribute(
102
- template.attributeName,
103
- splitTypeParameterList(params),
104
- ),
105
- };
106
- }
107
- }
108
-
109
- const preservedType = getOwnRecordValue(PRESERVED_NATIVE_TYPES, nativeType);
110
- if (preservedType) {
111
- return {
112
- pslType: preservedType.pslType,
113
- nativeType,
114
- nativeTypeAttribute: createNativeTypeAttribute(preservedType.attributeName),
115
- };
116
- }
117
-
118
- const pslType = getOwnMappingValue(POSTGRES_TO_PSL, nativeType);
119
- if (pslType) {
120
- return {
121
- pslType,
122
- nativeType,
123
- };
124
- }
125
-
126
- return { unsupported: true, nativeType };
127
- },
128
- };
129
- }
130
-
131
- export function extractEnumInfo(annotations?: Record<string, unknown>): EnumInfo {
132
- const pgAnnotations = annotations?.['pg'] as Record<string, unknown> | undefined;
133
- const nativeEnumTypeNames = pgAnnotations?.['nativeEnumTypeNames'];
134
-
135
- const typeNames = new Set<string>();
136
- const definitions = new Map<string, readonly string[]>();
137
-
138
- if (Array.isArray(nativeEnumTypeNames)) {
139
- for (const name of nativeEnumTypeNames) {
140
- if (typeof name === 'string') {
141
- typeNames.add(name);
142
- }
143
- }
144
- }
145
-
146
- return { typeNames, definitions };
147
- }
148
-
149
- export function extractEnumTypeNames(annotations?: Record<string, unknown>): ReadonlySet<string> {
150
- return extractEnumInfo(annotations).typeNames;
151
- }
152
-
153
- export function extractEnumDefinitions(
154
- annotations?: Record<string, unknown>,
155
- ): ReadonlyMap<string, readonly string[]> {
156
- return extractEnumInfo(annotations).definitions;
157
- }