@prisma-next/sql-contract-ts 0.14.0-dev.64 → 0.14.0-dev.66

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/package.json CHANGED
@@ -1,27 +1,27 @@
1
1
  {
2
2
  "name": "@prisma-next/sql-contract-ts",
3
- "version": "0.14.0-dev.64",
3
+ "version": "0.14.0-dev.66",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "description": "SQL-specific TypeScript contract authoring surface for Prisma Next",
8
8
  "dependencies": {
9
- "@prisma-next/config": "0.14.0-dev.64",
10
- "@prisma-next/contract": "0.14.0-dev.64",
11
- "@prisma-next/contract-authoring": "0.14.0-dev.64",
12
- "@prisma-next/framework-components": "0.14.0-dev.64",
13
- "@prisma-next/sql-contract": "0.14.0-dev.64",
14
- "@prisma-next/utils": "0.14.0-dev.64",
9
+ "@prisma-next/config": "0.14.0-dev.66",
10
+ "@prisma-next/contract": "0.14.0-dev.66",
11
+ "@prisma-next/contract-authoring": "0.14.0-dev.66",
12
+ "@prisma-next/framework-components": "0.14.0-dev.66",
13
+ "@prisma-next/sql-contract": "0.14.0-dev.66",
14
+ "@prisma-next/utils": "0.14.0-dev.66",
15
15
  "arktype": "^2.2.0",
16
16
  "pathe": "^2.0.3",
17
17
  "ts-toolbelt": "^9.6.0"
18
18
  },
19
19
  "devDependencies": {
20
- "@prisma-next/test-utils": "0.14.0-dev.64",
21
- "@prisma-next/tsconfig": "0.14.0-dev.64",
20
+ "@prisma-next/test-utils": "0.14.0-dev.66",
21
+ "@prisma-next/tsconfig": "0.14.0-dev.66",
22
22
  "@types/pg": "8.20.0",
23
23
  "pg": "8.21.0",
24
- "@prisma-next/tsdown": "0.14.0-dev.64",
24
+ "@prisma-next/tsdown": "0.14.0-dev.66",
25
25
  "tsdown": "0.22.1",
26
26
  "typescript": "5.9.3",
27
27
  "vitest": "4.1.8"
@@ -2,6 +2,7 @@ import type {
2
2
  AuthoringArgumentDescriptor,
3
3
  AuthoringFieldPresetDescriptor,
4
4
  } from '@prisma-next/framework-components/authoring';
5
+ import type { ColumnTypeDescriptor } from '@prisma-next/framework-components/codec';
5
6
  import type { ScalarFieldBuilder, ScalarFieldState } from './contract-dsl';
6
7
 
7
8
  export type UnionToIntersection<U> = (U extends unknown ? (value: U) => void : never) extends (
@@ -114,9 +115,11 @@ export type FieldBuilderFromPresetDescriptor<
114
115
  ConstraintName extends string | undefined = undefined,
115
116
  > = ScalarFieldBuilder<
116
117
  ScalarFieldState<
117
- ResolveTemplateValue<Descriptor['output']['codecId'], Args> extends string
118
- ? ResolveTemplateValue<Descriptor['output']['codecId'], Args>
119
- : string,
118
+ ColumnTypeDescriptor<
119
+ ResolveTemplateValue<Descriptor['output']['codecId'], Args> extends string
120
+ ? ResolveTemplateValue<Descriptor['output']['codecId'], Args>
121
+ : string
122
+ >,
120
123
  undefined,
121
124
  ResolveTemplateValue<Descriptor['output']['nullable'], Args> extends true ? true : false,
122
125
  undefined,
@@ -40,7 +40,7 @@ type NamedConstraintNameSpec<Name extends string = string> = {
40
40
  };
41
41
 
42
42
  export type ScalarFieldState<
43
- CodecId extends string = string,
43
+ Descriptor extends ColumnTypeDescriptor = ColumnTypeDescriptor,
44
44
  TypeRef extends NamedStorageTypeRef | undefined = undefined,
45
45
  Nullable extends boolean = boolean,
46
46
  ColumnName extends string | undefined = string | undefined,
@@ -49,7 +49,7 @@ export type ScalarFieldState<
49
49
  Many extends boolean = false,
50
50
  > = {
51
51
  readonly kind: 'scalar';
52
- readonly descriptor?: (ColumnTypeDescriptor & { readonly codecId: CodecId }) | undefined;
52
+ readonly descriptor?: Descriptor | undefined;
53
53
  readonly typeRef?: TypeRef | undefined;
54
54
  readonly nullable: Nullable;
55
55
  readonly columnName?: ColumnName | undefined;
@@ -63,7 +63,7 @@ export type ScalarFieldState<
63
63
 
64
64
  type AnyScalarFieldState = {
65
65
  readonly kind: 'scalar';
66
- readonly descriptor?: (ColumnTypeDescriptor & { readonly codecId: string }) | undefined;
66
+ readonly descriptor?: ColumnTypeDescriptor | undefined;
67
67
  readonly typeRef?: NamedStorageTypeRef | undefined;
68
68
  readonly nullable: boolean;
69
69
  readonly columnName?: string | undefined;
@@ -76,7 +76,7 @@ type AnyScalarFieldState = {
76
76
 
77
77
  type HasNamedConstraintId<State extends AnyScalarFieldState> =
78
78
  State extends ScalarFieldState<
79
- string,
79
+ ColumnTypeDescriptor,
80
80
  NamedStorageTypeRef | undefined,
81
81
  boolean,
82
82
  string | undefined,
@@ -91,7 +91,7 @@ type HasNamedConstraintId<State extends AnyScalarFieldState> =
91
91
 
92
92
  type HasNamedConstraintUnique<State extends AnyScalarFieldState> =
93
93
  State extends ScalarFieldState<
94
- string,
94
+ ColumnTypeDescriptor,
95
95
  NamedStorageTypeRef | undefined,
96
96
  boolean,
97
97
  string | undefined,
@@ -118,7 +118,7 @@ type ApplyFieldSqlSpec<
118
118
  Spec extends FieldSqlSpecForState<State>,
119
119
  > =
120
120
  State extends ScalarFieldState<
121
- infer CodecId,
121
+ infer Descriptor,
122
122
  infer TypeRef,
123
123
  infer Nullable,
124
124
  infer ColumnName,
@@ -127,7 +127,7 @@ type ApplyFieldSqlSpec<
127
127
  infer Many
128
128
  >
129
129
  ? ScalarFieldState<
130
- CodecId,
130
+ Descriptor,
131
131
  TypeRef,
132
132
  Nullable,
133
133
  Spec extends { readonly column: infer NextColumn extends string } ? NextColumn : ColumnName,
@@ -176,7 +176,7 @@ export class ScalarFieldBuilder<State extends AnyScalarFieldState = AnyScalarFie
176
176
 
177
177
  optional(): ScalarFieldBuilder<
178
178
  State extends ScalarFieldState<
179
- infer CodecId,
179
+ infer Descriptor,
180
180
  infer TypeRef,
181
181
  boolean,
182
182
  infer ColumnName,
@@ -184,30 +184,35 @@ export class ScalarFieldBuilder<State extends AnyScalarFieldState = AnyScalarFie
184
184
  infer UniqueSpec,
185
185
  infer Many
186
186
  >
187
- ? ScalarFieldState<CodecId, TypeRef, true, ColumnName, IdSpec, UniqueSpec, Many>
187
+ ? ScalarFieldState<Descriptor, TypeRef, true, ColumnName, IdSpec, UniqueSpec, Many>
188
188
  : AnyScalarFieldState
189
189
  > {
190
- return new ScalarFieldBuilder({
191
- ...this.state,
192
- nullable: true,
193
- } as unknown as State extends ScalarFieldState<
194
- infer CodecId,
195
- infer TypeRef,
196
- boolean,
197
- infer ColumnName,
198
- infer IdSpec,
199
- infer UniqueSpec,
200
- infer Many
201
- >
202
- ? ScalarFieldState<CodecId, TypeRef, true, ColumnName, IdSpec, UniqueSpec, Many>
203
- : AnyScalarFieldState);
190
+ return new ScalarFieldBuilder(
191
+ blindCast<
192
+ State extends ScalarFieldState<
193
+ infer Descriptor,
194
+ infer TypeRef,
195
+ boolean,
196
+ infer ColumnName,
197
+ infer IdSpec,
198
+ infer UniqueSpec,
199
+ infer Many
200
+ >
201
+ ? ScalarFieldState<Descriptor, TypeRef, true, ColumnName, IdSpec, UniqueSpec, Many>
202
+ : AnyScalarFieldState,
203
+ 'object spread does not narrow the generic State conditional; runtime shape is correct'
204
+ >({
205
+ ...this.state,
206
+ nullable: true,
207
+ }),
208
+ );
204
209
  }
205
210
 
206
211
  column<ColumnName extends string>(
207
212
  name: ColumnName,
208
213
  ): ScalarFieldBuilder<
209
214
  State extends ScalarFieldState<
210
- infer CodecId,
215
+ infer Descriptor,
211
216
  infer TypeRef,
212
217
  infer Nullable,
213
218
  string | undefined,
@@ -215,28 +220,33 @@ export class ScalarFieldBuilder<State extends AnyScalarFieldState = AnyScalarFie
215
220
  infer UniqueSpec,
216
221
  infer Many
217
222
  >
218
- ? ScalarFieldState<CodecId, TypeRef, Nullable, ColumnName, IdSpec, UniqueSpec, Many>
223
+ ? ScalarFieldState<Descriptor, TypeRef, Nullable, ColumnName, IdSpec, UniqueSpec, Many>
219
224
  : AnyScalarFieldState
220
225
  > {
221
- return new ScalarFieldBuilder({
222
- ...this.state,
223
- columnName: name,
224
- } as unknown as State extends ScalarFieldState<
225
- infer CodecId,
226
- infer TypeRef,
227
- infer Nullable,
228
- string | undefined,
229
- infer IdSpec,
230
- infer UniqueSpec,
231
- infer Many
232
- >
233
- ? ScalarFieldState<CodecId, TypeRef, Nullable, ColumnName, IdSpec, UniqueSpec, Many>
234
- : AnyScalarFieldState);
226
+ return new ScalarFieldBuilder(
227
+ blindCast<
228
+ State extends ScalarFieldState<
229
+ infer Descriptor,
230
+ infer TypeRef,
231
+ infer Nullable,
232
+ string | undefined,
233
+ infer IdSpec,
234
+ infer UniqueSpec,
235
+ infer Many
236
+ >
237
+ ? ScalarFieldState<Descriptor, TypeRef, Nullable, ColumnName, IdSpec, UniqueSpec, Many>
238
+ : AnyScalarFieldState,
239
+ 'object spread does not narrow the generic State conditional; runtime shape is correct'
240
+ >({
241
+ ...this.state,
242
+ columnName: name,
243
+ }),
244
+ );
235
245
  }
236
246
 
237
247
  many(): ScalarFieldBuilder<
238
248
  State extends ScalarFieldState<
239
- infer CodecId,
249
+ infer Descriptor,
240
250
  infer TypeRef,
241
251
  infer Nullable,
242
252
  infer ColumnName,
@@ -244,13 +254,13 @@ export class ScalarFieldBuilder<State extends AnyScalarFieldState = AnyScalarFie
244
254
  infer UniqueSpec,
245
255
  boolean
246
256
  >
247
- ? ScalarFieldState<CodecId, TypeRef, Nullable, ColumnName, IdSpec, UniqueSpec, true>
257
+ ? ScalarFieldState<Descriptor, TypeRef, Nullable, ColumnName, IdSpec, UniqueSpec, true>
248
258
  : AnyScalarFieldState
249
259
  > {
250
260
  return new ScalarFieldBuilder(
251
261
  blindCast<
252
262
  State extends ScalarFieldState<
253
- infer CodecId,
263
+ infer Descriptor,
254
264
  infer TypeRef,
255
265
  infer Nullable,
256
266
  infer ColumnName,
@@ -258,7 +268,7 @@ export class ScalarFieldBuilder<State extends AnyScalarFieldState = AnyScalarFie
258
268
  infer UniqueSpec,
259
269
  boolean
260
270
  >
261
- ? ScalarFieldState<CodecId, TypeRef, Nullable, ColumnName, IdSpec, UniqueSpec, true>
271
+ ? ScalarFieldState<Descriptor, TypeRef, Nullable, ColumnName, IdSpec, UniqueSpec, true>
262
272
  : AnyScalarFieldState,
263
273
  'object spread does not narrow the generic State conditional; runtime shape is correct'
264
274
  >({
@@ -286,7 +296,7 @@ export class ScalarFieldBuilder<State extends AnyScalarFieldState = AnyScalarFie
286
296
  options?: NamedConstraintSpec<Name>,
287
297
  ): ScalarFieldBuilder<
288
298
  State extends ScalarFieldState<
289
- infer CodecId,
299
+ infer Descriptor,
290
300
  infer TypeRef,
291
301
  infer Nullable,
292
302
  infer ColumnName,
@@ -295,7 +305,7 @@ export class ScalarFieldBuilder<State extends AnyScalarFieldState = AnyScalarFie
295
305
  infer Many
296
306
  >
297
307
  ? ScalarFieldState<
298
- CodecId,
308
+ Descriptor,
299
309
  TypeRef,
300
310
  Nullable,
301
311
  ColumnName,
@@ -305,35 +315,40 @@ export class ScalarFieldBuilder<State extends AnyScalarFieldState = AnyScalarFie
305
315
  >
306
316
  : AnyScalarFieldState
307
317
  > {
308
- return new ScalarFieldBuilder({
309
- ...this.state,
310
- id: options?.name ? { name: options.name } : {},
311
- } as unknown as State extends ScalarFieldState<
312
- infer CodecId,
313
- infer TypeRef,
314
- infer Nullable,
315
- infer ColumnName,
316
- NamedConstraintSpec | undefined,
317
- infer UniqueSpec,
318
- infer Many
319
- >
320
- ? ScalarFieldState<
321
- CodecId,
322
- TypeRef,
323
- Nullable,
324
- ColumnName,
325
- NamedConstraintSpec<Name>,
326
- UniqueSpec,
327
- Many
318
+ return new ScalarFieldBuilder(
319
+ blindCast<
320
+ State extends ScalarFieldState<
321
+ infer Descriptor,
322
+ infer TypeRef,
323
+ infer Nullable,
324
+ infer ColumnName,
325
+ NamedConstraintSpec | undefined,
326
+ infer UniqueSpec,
327
+ infer Many
328
328
  >
329
- : AnyScalarFieldState);
329
+ ? ScalarFieldState<
330
+ Descriptor,
331
+ TypeRef,
332
+ Nullable,
333
+ ColumnName,
334
+ NamedConstraintSpec<Name>,
335
+ UniqueSpec,
336
+ Many
337
+ >
338
+ : AnyScalarFieldState,
339
+ 'object spread does not narrow the generic State conditional; runtime shape is correct'
340
+ >({
341
+ ...this.state,
342
+ id: options?.name ? { name: options.name } : {},
343
+ }),
344
+ );
330
345
  }
331
346
 
332
347
  unique<const Name extends string | undefined = undefined>(
333
348
  options?: NamedConstraintSpec<Name>,
334
349
  ): ScalarFieldBuilder<
335
350
  State extends ScalarFieldState<
336
- infer CodecId,
351
+ infer Descriptor,
337
352
  infer TypeRef,
338
353
  infer Nullable,
339
354
  infer ColumnName,
@@ -342,7 +357,7 @@ export class ScalarFieldBuilder<State extends AnyScalarFieldState = AnyScalarFie
342
357
  infer Many
343
358
  >
344
359
  ? ScalarFieldState<
345
- CodecId,
360
+ Descriptor,
346
361
  TypeRef,
347
362
  Nullable,
348
363
  ColumnName,
@@ -352,28 +367,33 @@ export class ScalarFieldBuilder<State extends AnyScalarFieldState = AnyScalarFie
352
367
  >
353
368
  : AnyScalarFieldState
354
369
  > {
355
- return new ScalarFieldBuilder({
356
- ...this.state,
357
- unique: options?.name ? { name: options.name } : {},
358
- } as unknown as State extends ScalarFieldState<
359
- infer CodecId,
360
- infer TypeRef,
361
- infer Nullable,
362
- infer ColumnName,
363
- infer IdSpec,
364
- NamedConstraintSpec | undefined,
365
- infer Many
366
- >
367
- ? ScalarFieldState<
368
- CodecId,
369
- TypeRef,
370
- Nullable,
371
- ColumnName,
372
- IdSpec,
373
- NamedConstraintSpec<Name>,
374
- Many
370
+ return new ScalarFieldBuilder(
371
+ blindCast<
372
+ State extends ScalarFieldState<
373
+ infer Descriptor,
374
+ infer TypeRef,
375
+ infer Nullable,
376
+ infer ColumnName,
377
+ infer IdSpec,
378
+ NamedConstraintSpec | undefined,
379
+ infer Many
375
380
  >
376
- : AnyScalarFieldState);
381
+ ? ScalarFieldState<
382
+ Descriptor,
383
+ TypeRef,
384
+ Nullable,
385
+ ColumnName,
386
+ IdSpec,
387
+ NamedConstraintSpec<Name>,
388
+ Many
389
+ >
390
+ : AnyScalarFieldState,
391
+ 'object spread does not narrow the generic State conditional; runtime shape is correct'
392
+ >({
393
+ ...this.state,
394
+ unique: options?.name ? { name: options.name } : {},
395
+ }),
396
+ );
377
397
  }
378
398
 
379
399
  sql<const Spec extends FieldSqlSpecForState<State>>(
@@ -406,7 +426,12 @@ export class ScalarFieldBuilder<State extends AnyScalarFieldState = AnyScalarFie
406
426
 
407
427
  export class EnumScalarFieldBuilder<
408
428
  Handle extends EnumTypeHandle,
409
- State extends AnyScalarFieldState = ScalarFieldState<Handle['codecId'], Handle, false, undefined>,
429
+ State extends AnyScalarFieldState = ScalarFieldState<
430
+ ColumnTypeDescriptor,
431
+ Handle,
432
+ false,
433
+ undefined
434
+ >,
410
435
  > extends ScalarFieldBuilder<State> {
411
436
  readonly #handle: Handle;
412
437
 
@@ -436,7 +461,7 @@ export class EnumScalarFieldBuilder<
436
461
 
437
462
  function columnField<Descriptor extends ColumnTypeDescriptor>(
438
463
  descriptor: Descriptor,
439
- ): ScalarFieldBuilder<ScalarFieldState<Descriptor['codecId'], undefined, false, undefined>> {
464
+ ): ScalarFieldBuilder<ScalarFieldState<Descriptor, undefined, false, undefined>> {
440
465
  return new ScalarFieldBuilder({
441
466
  kind: 'scalar',
442
467
  descriptor,
@@ -446,7 +471,7 @@ function columnField<Descriptor extends ColumnTypeDescriptor>(
446
471
 
447
472
  function generatedField<Descriptor extends ColumnTypeDescriptor>(
448
473
  spec: GeneratedFieldSpec & { readonly type: Descriptor },
449
- ): ScalarFieldBuilder<ScalarFieldState<Descriptor['codecId'], undefined, false, undefined>> {
474
+ ): ScalarFieldBuilder<ScalarFieldState<Descriptor, undefined, false, undefined>> {
450
475
  return new ScalarFieldBuilder({
451
476
  kind: 'scalar',
452
477
  descriptor: {
@@ -460,10 +485,12 @@ function generatedField<Descriptor extends ColumnTypeDescriptor>(
460
485
 
461
486
  function namedTypeField<TypeRef extends string>(
462
487
  typeRef: TypeRef,
463
- ): ScalarFieldBuilder<ScalarFieldState<string, TypeRef, false, undefined>>;
488
+ ): ScalarFieldBuilder<ScalarFieldState<ColumnTypeDescriptor, TypeRef, false, undefined>>;
464
489
  function namedTypeField<TypeRef extends StorageTypeInstance>(
465
490
  typeRef: TypeRef,
466
- ): ScalarFieldBuilder<ScalarFieldState<TypeRef['codecId'], TypeRef, false, undefined>>;
491
+ ): ScalarFieldBuilder<
492
+ ScalarFieldState<ColumnTypeDescriptor<TypeRef['codecId']>, TypeRef, false, undefined>
493
+ >;
467
494
  function namedTypeField<Handle extends EnumTypeHandle>(
468
495
  typeRef: Handle,
469
496
  ): EnumScalarFieldBuilder<Handle>;
@@ -471,7 +498,7 @@ function namedTypeField(typeRef: NamedStorageTypeRef): ScalarFieldBuilder {
471
498
  if (isEnumTypeHandle(typeRef)) {
472
499
  return new EnumScalarFieldBuilder(
473
500
  blindCast<
474
- ScalarFieldState<string, typeof typeRef, false, undefined>,
501
+ ScalarFieldState<ColumnTypeDescriptor, typeof typeRef, false, undefined>,
475
502
  'literal object lacks explicit many; cast to the full ScalarFieldState so optional() conditional resolves Many = false'
476
503
  >({
477
504
  kind: 'scalar',
@@ -695,6 +695,31 @@ type EnumValueUnion<FieldState> = [FieldTypeRefOf<FieldState>] extends [
695
695
  : Values[number]
696
696
  : never;
697
697
 
698
+ // The member-value literal tuple carried on a descriptor's `entityRef.entity`
699
+ // (e.g. a target's native-enum entity), or `never` when the descriptor has no
700
+ // entityRef, its entity has no `members`, or `members` is widened to
701
+ // `readonly string[]` — this is checked with non-optional property shapes so
702
+ // a descriptor genuinely lacking `entityRef` fails the structural match
703
+ // instead of matching vacuously through the framework type's optional slot.
704
+ type DescriptorEntityMembers<Descriptor> = Descriptor extends {
705
+ readonly entityRef: {
706
+ readonly entity: { readonly members: infer Members extends readonly string[] };
707
+ };
708
+ }
709
+ ? Members
710
+ : never;
711
+
712
+ // The value-set member union for a descriptor-carried entity (the type-level
713
+ // mirror of the runtime's generic `deriveValueSetFromEntity` fold), or
714
+ // `never` for a field with no descriptor, a descriptor with no entityRef.entity,
715
+ // or a widened (non-literal) members tuple — mirroring `EnumValueUnion`'s
716
+ // erasure guard.
717
+ type DescriptorValueSetUnion<FieldState> = [FieldDescriptorOf<FieldState>] extends [never]
718
+ ? never
719
+ : readonly string[] extends DescriptorEntityMembers<FieldDescriptorOf<FieldState>>
720
+ ? never
721
+ : DescriptorEntityMembers<FieldDescriptorOf<FieldState>>[number];
722
+
698
723
  // The codec's `output` / `input` JS type for a field's column, before
699
724
  // nullability. `unknown` when the codec is not in the definition's codec map.
700
725
  type CodecChannelType<
@@ -711,19 +736,27 @@ type CodecChannelType<
711
736
  : unknown
712
737
  : unknown;
713
738
 
714
- // A field's read/write JS type: the enum value union when the field is
715
- // enum-typed, otherwise the codec channel type, with column nullability applied.
739
+ // The literal value union for a field: the enum-typed union takes precedence
740
+ // (matching today's behavior), falling back to the descriptor-carried
741
+ // value-set union; `never` when neither applies.
742
+ type FieldValueUnion<FieldState> = [EnumValueUnion<FieldState>] extends [never]
743
+ ? DescriptorValueSetUnion<FieldState>
744
+ : EnumValueUnion<FieldState>;
745
+
746
+ // A field's read/write JS type: the value union (enum or descriptor value-set)
747
+ // when the field carries one, otherwise the codec channel type, with column
748
+ // nullability applied.
716
749
  type FieldChannelType<
717
750
  Definition,
718
751
  ModelName extends ModelNames<Definition>,
719
752
  FieldName extends ModelFieldNames<Definition, ModelName>,
720
753
  Channel extends 'output' | 'input',
721
754
  > =
722
- | ([EnumValueUnion<ModelFieldState<Definition, ModelName, FieldName>>] extends [never]
755
+ | ([FieldValueUnion<ModelFieldState<Definition, ModelName, FieldName>>] extends [never]
723
756
  ? CodecChannelType<Definition, ModelName, FieldName, Channel>
724
757
  : StorageColumnManyOf<ModelStorageColumn<Definition, ModelName, FieldName>> extends true
725
- ? ReadonlyArray<EnumValueUnion<ModelFieldState<Definition, ModelName, FieldName>>>
726
- : EnumValueUnion<ModelFieldState<Definition, ModelName, FieldName>>)
758
+ ? ReadonlyArray<FieldValueUnion<ModelFieldState<Definition, ModelName, FieldName>>>
759
+ : FieldValueUnion<ModelFieldState<Definition, ModelName, FieldName>>)
727
760
  | (FieldNullableOf<ModelFieldState<Definition, ModelName, FieldName>> extends true
728
761
  ? null
729
762
  : never);