@prisma-next/sql-contract-ts 0.3.0-pr.99.5 → 0.3.0

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