@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.
- package/dist/contract-to-schema-ir-S-evq8E6.mjs +264 -0
- package/dist/contract-to-schema-ir-S-evq8E6.mjs.map +1 -0
- package/dist/{control-adapter-B2q9WN1V.d.mts → control-adapter-DHYFuOBy.d.mts} +14 -17
- package/dist/{control-adapter-B2q9WN1V.d.mts.map → control-adapter-DHYFuOBy.d.mts.map} +1 -1
- package/dist/control-adapter.d.mts +1 -1
- package/dist/control.d.mts +17 -2
- package/dist/control.d.mts.map +1 -1
- package/dist/control.mjs +42 -943
- package/dist/control.mjs.map +1 -1
- package/dist/{schema-verify.d.mts → diff.d.mts} +4 -4
- package/dist/diff.d.mts.map +1 -0
- package/dist/{verify-sql-schema-CEY7b78t.mjs → diff.mjs} +154 -244
- package/dist/diff.mjs.map +1 -0
- package/dist/migration.d.mts +1 -1
- package/dist/psl-infer.d.mts +80 -0
- package/dist/psl-infer.d.mts.map +1 -0
- package/dist/psl-infer.mjs +334 -0
- package/dist/psl-infer.mjs.map +1 -0
- package/dist/{verify-sql-schema-B8uEjw2s.d.mts → sql-schema-diff-6z36dZt6.d.mts} +43 -4
- package/dist/sql-schema-diff-6z36dZt6.d.mts.map +1 -0
- package/dist/{types-BxsFkHYv.d.mts → types-CkOIJXxU.d.mts} +83 -16
- package/dist/types-CkOIJXxU.d.mts.map +1 -0
- package/package.json +23 -22
- package/src/core/control-adapter.ts +12 -24
- package/src/core/control-instance.ts +113 -45
- package/src/core/{schema-verify/verify-sql-schema.ts → diff/sql-schema-diff.ts} +196 -8
- package/src/core/{schema-verify → diff}/verify-helpers.ts +12 -0
- package/src/core/migrations/contract-to-schema-ir.ts +48 -13
- package/src/core/migrations/field-event-planner.ts +3 -8
- package/src/core/migrations/schema-differ.ts +40 -0
- package/src/core/migrations/types.ts +43 -2
- package/src/core/psl-contract-infer/printer-config.ts +0 -6
- package/src/exports/control.ts +1 -0
- package/src/exports/diff.ts +18 -0
- package/src/exports/psl-infer.ts +36 -0
- package/dist/schema-verify.d.mts.map +0 -1
- package/dist/schema-verify.mjs +0 -2
- package/dist/types-BxsFkHYv.d.mts.map +0 -1
- package/dist/verify-sql-schema-B8uEjw2s.d.mts.map +0 -1
- package/dist/verify-sql-schema-CEY7b78t.mjs.map +0 -1
- package/src/core/psl-contract-infer/postgres-default-mapping.ts +0 -16
- package/src/core/psl-contract-infer/postgres-type-map.ts +0 -157
- package/src/core/psl-contract-infer/sql-schema-ir-to-psl-ast.ts +0 -795
- package/src/exports/schema-verify.ts +0 -18
- /package/src/core/{schema-verify → diff}/control-verify-emit.ts +0 -0
- /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
|
-
}
|