@prisma-next/sql-contract-ts 0.3.0-dev.134 → 0.3.0-dev.135
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/README.md +141 -4
- package/dist/contract-builder.d.mts +732 -15
- package/dist/contract-builder.d.mts.map +1 -1
- package/dist/contract-builder.mjs +1254 -131
- package/dist/contract-builder.mjs.map +1 -1
- package/package.json +7 -7
- package/src/authoring-helper-runtime.ts +139 -0
- package/src/authoring-type-utils.ts +168 -0
- package/src/composed-authoring-helpers.ts +254 -0
- package/src/contract-builder.ts +236 -335
- package/src/contract-ir-builder.ts +475 -0
- package/src/contract.ts +6 -0
- package/src/exports/contract-builder.ts +24 -2
- package/src/semantic-contract.ts +86 -0
- package/src/staged-contract-dsl.ts +1490 -0
- package/src/staged-contract-lowering.ts +705 -0
- package/src/staged-contract-types.ts +494 -0
- package/src/staged-contract-warnings.ts +245 -0
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
import type { ExtensionPackRef, TargetPackRef } from '@prisma-next/contract/framework-components';
|
|
2
|
+
import type { ColumnDefault } from '@prisma-next/contract/types';
|
|
3
|
+
import type {
|
|
4
|
+
ContractWithTypeMaps,
|
|
5
|
+
Index,
|
|
6
|
+
ReferentialAction,
|
|
7
|
+
SqlContract,
|
|
8
|
+
StorageTypeInstance,
|
|
9
|
+
TypeMaps,
|
|
10
|
+
} from '@prisma-next/sql-contract/types';
|
|
11
|
+
import type { UnionToIntersection } from './authoring-type-utils';
|
|
12
|
+
import type {
|
|
13
|
+
AttributeStageIdFieldNames,
|
|
14
|
+
FieldStateOf,
|
|
15
|
+
ScalarFieldBuilder,
|
|
16
|
+
} from './staged-contract-dsl';
|
|
17
|
+
|
|
18
|
+
export type ExtractCodecTypesFromPack<P> = P extends { __codecTypes?: infer C }
|
|
19
|
+
? C extends Record<string, { output: unknown }>
|
|
20
|
+
? C
|
|
21
|
+
: Record<string, never>
|
|
22
|
+
: Record<string, never>;
|
|
23
|
+
|
|
24
|
+
export type MergeExtensionCodecTypes<Packs extends Record<string, unknown>> = UnionToIntersection<
|
|
25
|
+
{
|
|
26
|
+
[K in keyof Packs]: ExtractCodecTypesFromPack<Packs[K]>;
|
|
27
|
+
}[keyof Packs]
|
|
28
|
+
>;
|
|
29
|
+
|
|
30
|
+
type MergeExtensionCodecTypesSafe<Packs> =
|
|
31
|
+
Packs extends Record<string, unknown>
|
|
32
|
+
? keyof Packs extends never
|
|
33
|
+
? Record<string, never>
|
|
34
|
+
: MergeExtensionCodecTypes<Packs>
|
|
35
|
+
: Record<string, never>;
|
|
36
|
+
|
|
37
|
+
export type MergeExtensionPackRefs<
|
|
38
|
+
Existing extends Record<string, unknown> | undefined,
|
|
39
|
+
Added extends Record<string, ExtensionPackRef<'sql', string>>,
|
|
40
|
+
> = Existing extends Record<string, unknown> ? Existing & Added : Added;
|
|
41
|
+
|
|
42
|
+
type StagedDefinitionExtensionPacks<Definition> = Definition extends {
|
|
43
|
+
readonly extensionPacks?: infer Packs extends Record<string, ExtensionPackRef<'sql', string>>;
|
|
44
|
+
}
|
|
45
|
+
? Packs
|
|
46
|
+
: Record<never, never>;
|
|
47
|
+
|
|
48
|
+
type StagedDefinitionCapabilities<Definition> = Definition extends {
|
|
49
|
+
readonly capabilities?: infer Capabilities extends Record<string, Record<string, boolean>>;
|
|
50
|
+
}
|
|
51
|
+
? Capabilities
|
|
52
|
+
: undefined;
|
|
53
|
+
|
|
54
|
+
type StagedDefinitionTargetId<Definition> = Definition extends {
|
|
55
|
+
readonly target: TargetPackRef<'sql', infer Target>;
|
|
56
|
+
}
|
|
57
|
+
? Target
|
|
58
|
+
: never;
|
|
59
|
+
|
|
60
|
+
type StagedDefinitionStorageHash<Definition> = Definition extends {
|
|
61
|
+
readonly storageHash?: infer StorageHash extends string;
|
|
62
|
+
}
|
|
63
|
+
? StorageHash
|
|
64
|
+
: undefined;
|
|
65
|
+
|
|
66
|
+
type Present<T> = Exclude<T, undefined>;
|
|
67
|
+
|
|
68
|
+
type CodecTypesFromStagedDefinition<Definition> = ExtractCodecTypesFromPack<
|
|
69
|
+
Definition extends { readonly target: infer Target } ? Target : never
|
|
70
|
+
> &
|
|
71
|
+
MergeExtensionCodecTypesSafe<StagedDefinitionExtensionPacks<Definition>>;
|
|
72
|
+
|
|
73
|
+
type StagedDefinitionModels<Definition> = Definition extends {
|
|
74
|
+
readonly models?: unknown;
|
|
75
|
+
}
|
|
76
|
+
? Present<Definition['models']> extends Record<string, unknown>
|
|
77
|
+
? Present<Definition['models']>
|
|
78
|
+
: Record<never, never>
|
|
79
|
+
: Record<never, never>;
|
|
80
|
+
|
|
81
|
+
type StagedDefinitionTypes<Definition> = Definition extends {
|
|
82
|
+
readonly types?: unknown;
|
|
83
|
+
}
|
|
84
|
+
? Present<Definition['types']> extends Record<string, StorageTypeInstance>
|
|
85
|
+
? Present<Definition['types']>
|
|
86
|
+
: Record<never, never>
|
|
87
|
+
: Record<never, never>;
|
|
88
|
+
|
|
89
|
+
type StagedDefinitionTableNaming<Definition> = Definition extends {
|
|
90
|
+
readonly naming?: { readonly tables?: infer Strategy extends string };
|
|
91
|
+
}
|
|
92
|
+
? Strategy
|
|
93
|
+
: undefined;
|
|
94
|
+
|
|
95
|
+
type StagedDefinitionColumnNaming<Definition> = Definition extends {
|
|
96
|
+
readonly naming?: { readonly columns?: infer Strategy extends string };
|
|
97
|
+
}
|
|
98
|
+
? Strategy
|
|
99
|
+
: undefined;
|
|
100
|
+
|
|
101
|
+
type FirstChar<S extends string> = S extends `${infer First}${string}` ? First : '';
|
|
102
|
+
|
|
103
|
+
type CharKind<C extends string> = C extends ''
|
|
104
|
+
? 'end'
|
|
105
|
+
: C extends Lowercase<C>
|
|
106
|
+
? C extends Uppercase<C>
|
|
107
|
+
? 'other'
|
|
108
|
+
: 'lower'
|
|
109
|
+
: 'upper';
|
|
110
|
+
|
|
111
|
+
type ShouldInsertSnakeUnderscore<
|
|
112
|
+
PrevKind extends 'start' | 'lower' | 'upper' | 'other' | 'end',
|
|
113
|
+
Current extends string,
|
|
114
|
+
Next extends string,
|
|
115
|
+
> = CharKind<Current> extends 'upper'
|
|
116
|
+
? PrevKind extends 'start'
|
|
117
|
+
? false
|
|
118
|
+
: PrevKind extends 'lower' | 'other'
|
|
119
|
+
? true
|
|
120
|
+
: CharKind<Next> extends 'lower'
|
|
121
|
+
? true
|
|
122
|
+
: false
|
|
123
|
+
: false;
|
|
124
|
+
|
|
125
|
+
type SnakeCaseInternal<
|
|
126
|
+
S extends string,
|
|
127
|
+
PrevKind extends 'start' | 'lower' | 'upper' | 'other' | 'end' = 'start',
|
|
128
|
+
> = S extends `${infer Current}${infer Rest}`
|
|
129
|
+
? `${ShouldInsertSnakeUnderscore<PrevKind, Current, FirstChar<Rest>> extends true
|
|
130
|
+
? '_'
|
|
131
|
+
: ''}${Lowercase<Current>}${SnakeCaseInternal<Rest, CharKind<Current>>}`
|
|
132
|
+
: '';
|
|
133
|
+
|
|
134
|
+
type SnakeCase<S extends string> = string extends S ? string : SnakeCaseInternal<S>;
|
|
135
|
+
|
|
136
|
+
type ApplyNamingType<Name extends string, Strategy extends string | undefined> = string extends Name
|
|
137
|
+
? string
|
|
138
|
+
: Strategy extends 'snake_case'
|
|
139
|
+
? SnakeCase<Name>
|
|
140
|
+
: Name;
|
|
141
|
+
|
|
142
|
+
type StagedModelNames<Definition> = keyof StagedDefinitionModels<Definition> & string;
|
|
143
|
+
|
|
144
|
+
type StagedModelFields<
|
|
145
|
+
Definition,
|
|
146
|
+
ModelName extends StagedModelNames<Definition>,
|
|
147
|
+
> = StagedDefinitionModels<Definition>[ModelName] extends {
|
|
148
|
+
readonly stageOne: {
|
|
149
|
+
readonly fields: Record<string, ScalarFieldBuilder>;
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
? StagedDefinitionModels<Definition>[ModelName]['stageOne']['fields']
|
|
153
|
+
: Record<never, never>;
|
|
154
|
+
|
|
155
|
+
type StagedModelFieldNames<
|
|
156
|
+
Definition,
|
|
157
|
+
ModelName extends StagedModelNames<Definition>,
|
|
158
|
+
> = keyof StagedModelFields<Definition, ModelName> & string;
|
|
159
|
+
|
|
160
|
+
type StagedModelFieldState<
|
|
161
|
+
Definition,
|
|
162
|
+
ModelName extends StagedModelNames<Definition>,
|
|
163
|
+
FieldName extends StagedModelFieldNames<Definition, ModelName>,
|
|
164
|
+
> = FieldStateOf<StagedModelFields<Definition, ModelName>[FieldName]>;
|
|
165
|
+
|
|
166
|
+
type StagedModelSql<
|
|
167
|
+
Definition,
|
|
168
|
+
ModelName extends StagedModelNames<Definition>,
|
|
169
|
+
> = StagedDefinitionModels<Definition>[ModelName] extends {
|
|
170
|
+
readonly __sql: infer SqlSpec;
|
|
171
|
+
}
|
|
172
|
+
? SqlSpec
|
|
173
|
+
: undefined;
|
|
174
|
+
|
|
175
|
+
type StagedModelAttributes<
|
|
176
|
+
Definition,
|
|
177
|
+
ModelName extends StagedModelNames<Definition>,
|
|
178
|
+
> = StagedDefinitionModels<Definition>[ModelName] extends {
|
|
179
|
+
readonly __attributes: infer AttributesSpec;
|
|
180
|
+
}
|
|
181
|
+
? AttributesSpec
|
|
182
|
+
: undefined;
|
|
183
|
+
|
|
184
|
+
type FieldDescriptorOf<FieldState> = Present<
|
|
185
|
+
FieldState extends { readonly descriptor?: infer Descriptor } ? Descriptor : never
|
|
186
|
+
>;
|
|
187
|
+
|
|
188
|
+
type FieldTypeRefOf<FieldState> = Present<
|
|
189
|
+
FieldState extends { readonly typeRef?: infer TypeRef } ? TypeRef : never
|
|
190
|
+
>;
|
|
191
|
+
|
|
192
|
+
type FieldNullableOf<FieldState> = FieldState extends {
|
|
193
|
+
readonly nullable: infer Nullable extends boolean;
|
|
194
|
+
}
|
|
195
|
+
? Nullable
|
|
196
|
+
: boolean;
|
|
197
|
+
|
|
198
|
+
type FieldColumnOverrideOf<FieldState> = Present<
|
|
199
|
+
FieldState extends { readonly columnName?: infer ColumnName } ? ColumnName : never
|
|
200
|
+
>;
|
|
201
|
+
|
|
202
|
+
type FieldInlineIdSpecOf<FieldState> = Present<
|
|
203
|
+
FieldState extends { readonly id?: infer IdSpec } ? IdSpec : never
|
|
204
|
+
>;
|
|
205
|
+
|
|
206
|
+
type DescriptorCodecId<Descriptor> = Descriptor extends {
|
|
207
|
+
readonly codecId: infer CodecId extends string;
|
|
208
|
+
}
|
|
209
|
+
? CodecId
|
|
210
|
+
: string;
|
|
211
|
+
|
|
212
|
+
type DescriptorNativeType<Descriptor> = Descriptor extends {
|
|
213
|
+
readonly nativeType: infer NativeType extends string;
|
|
214
|
+
}
|
|
215
|
+
? NativeType
|
|
216
|
+
: string;
|
|
217
|
+
|
|
218
|
+
type DescriptorTypeParams<Descriptor> = Descriptor extends {
|
|
219
|
+
readonly typeParams: infer TypeParams extends Record<string, unknown>;
|
|
220
|
+
}
|
|
221
|
+
? TypeParams
|
|
222
|
+
: undefined;
|
|
223
|
+
|
|
224
|
+
type DescriptorTypeRef<Descriptor> = Descriptor extends {
|
|
225
|
+
readonly typeRef: infer TypeRef extends string;
|
|
226
|
+
}
|
|
227
|
+
? TypeRef
|
|
228
|
+
: undefined;
|
|
229
|
+
|
|
230
|
+
type LookupNamedStorageTypeKeyByValue<Definition, TypeRef extends StorageTypeInstance> = {
|
|
231
|
+
[TypeName in keyof StagedDefinitionTypes<Definition> & string]: [TypeRef] extends [
|
|
232
|
+
StagedDefinitionTypes<Definition>[TypeName],
|
|
233
|
+
]
|
|
234
|
+
? [StagedDefinitionTypes<Definition>[TypeName]] extends [TypeRef]
|
|
235
|
+
? TypeName
|
|
236
|
+
: never
|
|
237
|
+
: never;
|
|
238
|
+
}[keyof StagedDefinitionTypes<Definition> & string];
|
|
239
|
+
|
|
240
|
+
type ResolveNamedStorageTypeKey<Definition, TypeRef> = TypeRef extends string
|
|
241
|
+
? TypeRef
|
|
242
|
+
: TypeRef extends StorageTypeInstance
|
|
243
|
+
? [LookupNamedStorageTypeKeyByValue<Definition, TypeRef>] extends [never]
|
|
244
|
+
? string
|
|
245
|
+
: LookupNamedStorageTypeKeyByValue<Definition, TypeRef>
|
|
246
|
+
: never;
|
|
247
|
+
|
|
248
|
+
type ResolveNamedStorageType<Definition, TypeRef> =
|
|
249
|
+
ResolveNamedStorageTypeKey<Definition, TypeRef> extends infer TypeName extends string
|
|
250
|
+
? TypeName extends keyof StagedDefinitionTypes<Definition>
|
|
251
|
+
? StagedDefinitionTypes<Definition>[TypeName]
|
|
252
|
+
: StorageTypeInstance
|
|
253
|
+
: StorageTypeInstance;
|
|
254
|
+
|
|
255
|
+
type ResolveFieldDescriptor<Definition, FieldState> = [FieldDescriptorOf<FieldState>] extends [
|
|
256
|
+
never,
|
|
257
|
+
]
|
|
258
|
+
? ResolveNamedStorageType<Definition, FieldTypeRefOf<FieldState>>
|
|
259
|
+
: FieldDescriptorOf<FieldState>;
|
|
260
|
+
|
|
261
|
+
type ResolveFieldColumnTypeRef<Definition, FieldState> = [FieldTypeRefOf<FieldState>] extends [
|
|
262
|
+
never,
|
|
263
|
+
]
|
|
264
|
+
? DescriptorTypeRef<FieldDescriptorOf<FieldState>>
|
|
265
|
+
: ResolveNamedStorageTypeKey<Definition, FieldTypeRefOf<FieldState>>;
|
|
266
|
+
|
|
267
|
+
type ResolveFieldColumnTypeParams<Definition, FieldState> = [
|
|
268
|
+
ResolveFieldColumnTypeRef<Definition, FieldState>,
|
|
269
|
+
] extends [string]
|
|
270
|
+
? undefined
|
|
271
|
+
: DescriptorTypeParams<FieldDescriptorOf<FieldState>>;
|
|
272
|
+
|
|
273
|
+
type StagedModelTableName<Definition, ModelName extends StagedModelNames<Definition>> = [
|
|
274
|
+
Present<
|
|
275
|
+
StagedModelSql<Definition, ModelName> extends { readonly table?: infer TableName }
|
|
276
|
+
? TableName
|
|
277
|
+
: never
|
|
278
|
+
>,
|
|
279
|
+
] extends [never]
|
|
280
|
+
? ApplyNamingType<ModelName, StagedDefinitionTableNaming<Definition>>
|
|
281
|
+
: Present<
|
|
282
|
+
StagedModelSql<Definition, ModelName> extends { readonly table?: infer TableName }
|
|
283
|
+
? TableName
|
|
284
|
+
: never
|
|
285
|
+
> extends infer ExplicitTableName extends string
|
|
286
|
+
? ExplicitTableName
|
|
287
|
+
: ApplyNamingType<ModelName, StagedDefinitionTableNaming<Definition>>;
|
|
288
|
+
|
|
289
|
+
type StagedModelColumnName<
|
|
290
|
+
Definition,
|
|
291
|
+
ModelName extends StagedModelNames<Definition>,
|
|
292
|
+
FieldName extends StagedModelFieldNames<Definition, ModelName>,
|
|
293
|
+
> = [FieldColumnOverrideOf<StagedModelFieldState<Definition, ModelName, FieldName>>] extends [never]
|
|
294
|
+
? ApplyNamingType<FieldName, StagedDefinitionColumnNaming<Definition>>
|
|
295
|
+
: FieldColumnOverrideOf<
|
|
296
|
+
StagedModelFieldState<Definition, ModelName, FieldName>
|
|
297
|
+
> extends infer ExplicitColumnName extends string
|
|
298
|
+
? ExplicitColumnName
|
|
299
|
+
: ApplyNamingType<FieldName, StagedDefinitionColumnNaming<Definition>>;
|
|
300
|
+
|
|
301
|
+
type StagedFieldNamesToColumnNames<
|
|
302
|
+
Definition,
|
|
303
|
+
ModelName extends StagedModelNames<Definition>,
|
|
304
|
+
FieldNames extends readonly string[],
|
|
305
|
+
> = FieldNames extends readonly []
|
|
306
|
+
? readonly []
|
|
307
|
+
: FieldNames extends readonly [
|
|
308
|
+
infer First extends StagedModelFieldNames<Definition, ModelName>,
|
|
309
|
+
...infer Rest extends readonly string[],
|
|
310
|
+
]
|
|
311
|
+
? readonly [
|
|
312
|
+
StagedModelColumnName<Definition, ModelName, First>,
|
|
313
|
+
...StagedFieldNamesToColumnNames<Definition, ModelName, Rest>,
|
|
314
|
+
]
|
|
315
|
+
: readonly string[];
|
|
316
|
+
|
|
317
|
+
type StagedInlineIdFieldName<Definition, ModelName extends StagedModelNames<Definition>> = {
|
|
318
|
+
[FieldName in StagedModelFieldNames<Definition, ModelName>]: [
|
|
319
|
+
FieldInlineIdSpecOf<StagedModelFieldState<Definition, ModelName, FieldName>>,
|
|
320
|
+
] extends [never]
|
|
321
|
+
? never
|
|
322
|
+
: FieldName;
|
|
323
|
+
}[StagedModelFieldNames<Definition, ModelName>];
|
|
324
|
+
|
|
325
|
+
type StagedInlineIdFieldNames<Definition, ModelName extends StagedModelNames<Definition>> = [
|
|
326
|
+
StagedInlineIdFieldName<Definition, ModelName>,
|
|
327
|
+
] extends [never]
|
|
328
|
+
? undefined
|
|
329
|
+
: readonly [StagedInlineIdFieldName<Definition, ModelName>];
|
|
330
|
+
|
|
331
|
+
type StagedInlineIdName<Definition, ModelName extends StagedModelNames<Definition>> = {
|
|
332
|
+
[FieldName in StagedModelFieldNames<Definition, ModelName>]: FieldInlineIdSpecOf<
|
|
333
|
+
StagedModelFieldState<Definition, ModelName, FieldName>
|
|
334
|
+
> extends { readonly name?: infer Name extends string }
|
|
335
|
+
? Name
|
|
336
|
+
: never;
|
|
337
|
+
}[StagedModelFieldNames<Definition, ModelName>];
|
|
338
|
+
|
|
339
|
+
type StagedAttributeIdFieldNames<
|
|
340
|
+
Definition,
|
|
341
|
+
ModelName extends StagedModelNames<Definition>,
|
|
342
|
+
> = AttributeStageIdFieldNames<StagedModelAttributes<Definition, ModelName>>;
|
|
343
|
+
|
|
344
|
+
type StagedAttributeIdName<Definition, ModelName extends StagedModelNames<Definition>> = Present<
|
|
345
|
+
StagedModelAttributes<Definition, ModelName> extends {
|
|
346
|
+
readonly id?: { readonly name?: infer Name extends string };
|
|
347
|
+
}
|
|
348
|
+
? Name
|
|
349
|
+
: never
|
|
350
|
+
>;
|
|
351
|
+
|
|
352
|
+
type StagedModelIdFieldNames<Definition, ModelName extends StagedModelNames<Definition>> = [
|
|
353
|
+
StagedAttributeIdFieldNames<Definition, ModelName>,
|
|
354
|
+
] extends [undefined]
|
|
355
|
+
? StagedInlineIdFieldNames<Definition, ModelName>
|
|
356
|
+
: StagedAttributeIdFieldNames<Definition, ModelName>;
|
|
357
|
+
|
|
358
|
+
type StagedModelIdName<Definition, ModelName extends StagedModelNames<Definition>> = [
|
|
359
|
+
StagedAttributeIdName<Definition, ModelName>,
|
|
360
|
+
] extends [never]
|
|
361
|
+
? Present<StagedInlineIdName<Definition, ModelName>>
|
|
362
|
+
: StagedAttributeIdName<Definition, ModelName>;
|
|
363
|
+
|
|
364
|
+
type StagedStorageColumn<
|
|
365
|
+
CodecId extends string,
|
|
366
|
+
Nullable extends boolean,
|
|
367
|
+
NativeType extends string,
|
|
368
|
+
TypeRef extends string | undefined = undefined,
|
|
369
|
+
TypeParams extends Record<string, unknown> | undefined = undefined,
|
|
370
|
+
> = {
|
|
371
|
+
readonly nativeType: NativeType;
|
|
372
|
+
readonly codecId: CodecId;
|
|
373
|
+
readonly nullable: Nullable;
|
|
374
|
+
readonly default?: ColumnDefault;
|
|
375
|
+
} & (TypeRef extends string ? { readonly typeRef: TypeRef } : Record<string, never>) &
|
|
376
|
+
(TypeParams extends Record<string, unknown>
|
|
377
|
+
? { readonly typeParams: TypeParams }
|
|
378
|
+
: Record<string, never>);
|
|
379
|
+
|
|
380
|
+
type StagedModelStorageColumn<
|
|
381
|
+
Definition,
|
|
382
|
+
ModelName extends StagedModelNames<Definition>,
|
|
383
|
+
FieldName extends string,
|
|
384
|
+
> = FieldName extends StagedModelFieldNames<Definition, ModelName>
|
|
385
|
+
? StagedStorageColumn<
|
|
386
|
+
DescriptorCodecId<
|
|
387
|
+
ResolveFieldDescriptor<Definition, StagedModelFieldState<Definition, ModelName, FieldName>>
|
|
388
|
+
>,
|
|
389
|
+
FieldNullableOf<StagedModelFieldState<Definition, ModelName, FieldName>>,
|
|
390
|
+
DescriptorNativeType<
|
|
391
|
+
ResolveFieldDescriptor<Definition, StagedModelFieldState<Definition, ModelName, FieldName>>
|
|
392
|
+
>,
|
|
393
|
+
ResolveFieldColumnTypeRef<
|
|
394
|
+
Definition,
|
|
395
|
+
StagedModelFieldState<Definition, ModelName, FieldName>
|
|
396
|
+
>,
|
|
397
|
+
ResolveFieldColumnTypeParams<
|
|
398
|
+
Definition,
|
|
399
|
+
StagedModelFieldState<Definition, ModelName, FieldName>
|
|
400
|
+
>
|
|
401
|
+
>
|
|
402
|
+
: never;
|
|
403
|
+
|
|
404
|
+
type StagedBuiltModels<Definition> = {
|
|
405
|
+
readonly [ModelName in StagedModelNames<Definition>]: {
|
|
406
|
+
readonly storage: {
|
|
407
|
+
readonly table: StagedModelTableName<Definition, ModelName>;
|
|
408
|
+
};
|
|
409
|
+
readonly fields: {
|
|
410
|
+
readonly [FieldName in StagedModelFieldNames<Definition, ModelName>]: {
|
|
411
|
+
readonly column: StagedModelColumnName<Definition, ModelName, FieldName>;
|
|
412
|
+
};
|
|
413
|
+
};
|
|
414
|
+
};
|
|
415
|
+
};
|
|
416
|
+
|
|
417
|
+
type StagedBuiltModelFields<
|
|
418
|
+
Definition,
|
|
419
|
+
ModelName extends StagedModelNames<Definition>,
|
|
420
|
+
> = StagedBuiltModels<Definition>[ModelName]['fields'];
|
|
421
|
+
|
|
422
|
+
type StagedBuiltModelTableName<
|
|
423
|
+
Definition,
|
|
424
|
+
ModelName extends StagedModelNames<Definition>,
|
|
425
|
+
> = StagedBuiltModels<Definition>[ModelName]['storage']['table'];
|
|
426
|
+
|
|
427
|
+
type StagedBuiltStorageTableColumns<Definition, ModelName extends StagedModelNames<Definition>> = {
|
|
428
|
+
readonly [FieldName in keyof StagedBuiltModelFields<Definition, ModelName> &
|
|
429
|
+
string as StagedBuiltModelFields<
|
|
430
|
+
Definition,
|
|
431
|
+
ModelName
|
|
432
|
+
>[FieldName]['column']]: StagedModelStorageColumn<Definition, ModelName, FieldName>;
|
|
433
|
+
};
|
|
434
|
+
|
|
435
|
+
type StagedBuiltStorageTables<Definition> = {
|
|
436
|
+
readonly [ModelName in StagedModelNames<Definition> as StagedBuiltModelTableName<
|
|
437
|
+
Definition,
|
|
438
|
+
ModelName
|
|
439
|
+
>]: {
|
|
440
|
+
readonly columns: StagedBuiltStorageTableColumns<Definition, ModelName>;
|
|
441
|
+
readonly uniques: ReadonlyArray<{
|
|
442
|
+
readonly columns: readonly string[];
|
|
443
|
+
readonly name?: string;
|
|
444
|
+
}>;
|
|
445
|
+
readonly indexes: ReadonlyArray<Index>;
|
|
446
|
+
readonly foreignKeys: ReadonlyArray<{
|
|
447
|
+
readonly columns: readonly string[];
|
|
448
|
+
readonly references: { readonly table: string; readonly columns: readonly string[] };
|
|
449
|
+
readonly name?: string;
|
|
450
|
+
readonly onDelete?: ReferentialAction;
|
|
451
|
+
readonly onUpdate?: ReferentialAction;
|
|
452
|
+
readonly constraint: boolean;
|
|
453
|
+
readonly index: boolean;
|
|
454
|
+
}>;
|
|
455
|
+
} & (StagedModelIdFieldNames<Definition, ModelName> extends readonly string[]
|
|
456
|
+
? {
|
|
457
|
+
readonly primaryKey: {
|
|
458
|
+
readonly columns: StagedFieldNamesToColumnNames<
|
|
459
|
+
Definition,
|
|
460
|
+
ModelName,
|
|
461
|
+
StagedModelIdFieldNames<Definition, ModelName>
|
|
462
|
+
>;
|
|
463
|
+
readonly name?: StagedModelIdName<Definition, ModelName>;
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
: Record<string, never>);
|
|
467
|
+
};
|
|
468
|
+
|
|
469
|
+
type StagedBuiltStorage<Definition> = {
|
|
470
|
+
readonly tables: StagedBuiltStorageTables<Definition>;
|
|
471
|
+
readonly types: StagedDefinitionTypes<Definition>;
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
export type SqlContractResult<Definition> = ContractWithTypeMaps<
|
|
475
|
+
SqlContract<StagedBuiltStorage<Definition>, StagedBuiltModels<Definition>> & {
|
|
476
|
+
readonly schemaVersion: '1';
|
|
477
|
+
readonly target: StagedDefinitionTargetId<Definition>;
|
|
478
|
+
readonly targetFamily: 'sql';
|
|
479
|
+
readonly storageHash: StagedDefinitionStorageHash<Definition> extends string
|
|
480
|
+
? StagedDefinitionStorageHash<Definition>
|
|
481
|
+
: string;
|
|
482
|
+
} & {
|
|
483
|
+
readonly extensionPacks: keyof StagedDefinitionExtensionPacks<Definition> extends never
|
|
484
|
+
? Record<string, never>
|
|
485
|
+
: StagedDefinitionExtensionPacks<Definition>;
|
|
486
|
+
readonly capabilities: StagedDefinitionCapabilities<Definition> extends Record<
|
|
487
|
+
string,
|
|
488
|
+
Record<string, boolean>
|
|
489
|
+
>
|
|
490
|
+
? StagedDefinitionCapabilities<Definition>
|
|
491
|
+
: Record<string, Record<string, boolean>>;
|
|
492
|
+
},
|
|
493
|
+
TypeMaps<CodecTypesFromStagedDefinition<Definition>, Record<string, never>>
|
|
494
|
+
>;
|