@prisma-next/sql-contract-ts 0.5.0-dev.9 → 0.5.1

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.
@@ -1,8 +1,9 @@
1
- import { ColumnDefault, ColumnDefaultLiteralInputValue, Contract, ContractRelation, ExecutionMutationDefaultValue, StorageHashBase } from "@prisma-next/contract/types";
1
+ import { ColumnDefault, ColumnDefaultLiteralInputValue, Contract, ContractRelation, ExecutionMutationDefaultPhases, ExecutionMutationDefaultPhases as ExecutionMutationDefaultPhases$1, ExecutionMutationDefaultValue, StorageHashBase } from "@prisma-next/contract/types";
2
+ import { IndexTypeRegistration } from "@prisma-next/sql-contract/index-types";
2
3
  import { ContractWithTypeMaps, Index as Index$1, ReferentialAction, SqlStorage, StorageTypeInstance, TypeMaps } from "@prisma-next/sql-contract/types";
3
4
  import { AuthoringArgumentDescriptor, AuthoringFieldNamespace, AuthoringFieldPresetDescriptor, AuthoringTypeConstructorDescriptor, AuthoringTypeNamespace } from "@prisma-next/framework-components/authoring";
4
- import { ColumnTypeDescriptor, ForeignKeyDefaultsState } from "@prisma-next/contract-authoring";
5
- import { CodecLookup } from "@prisma-next/framework-components/codec";
5
+ import { ForeignKeyDefaultsState } from "@prisma-next/contract-authoring";
6
+ import { CodecLookup, ColumnTypeDescriptor } from "@prisma-next/framework-components/codec";
6
7
  import { ExtensionPackRef, FamilyPackRef, TargetPackRef } from "@prisma-next/framework-components/components";
7
8
 
8
9
  //#region src/contract-dsl.d.ts
@@ -12,25 +13,25 @@ type NamingConfig = {
12
13
  readonly columns?: NamingStrategy;
13
14
  };
14
15
  type NamedStorageTypeRef = string | StorageTypeInstance;
15
- type NamedConstraintNameSpec<Name$1 extends string = string> = {
16
- readonly name: Name$1;
16
+ type NamedConstraintNameSpec<Name extends string = string> = {
17
+ readonly name: Name;
17
18
  };
18
- type ScalarFieldState<CodecId$1 extends string = string, TypeRef$1 extends NamedStorageTypeRef | undefined = undefined, Nullable$1 extends boolean = boolean, ColumnName extends string | undefined = string | undefined, IdSpec$1 extends NamedConstraintSpec | undefined = undefined, UniqueSpec$1 extends NamedConstraintSpec | undefined = undefined> = {
19
+ type ScalarFieldState<CodecId extends string = string, TypeRef extends NamedStorageTypeRef | undefined = undefined, Nullable extends boolean = boolean, ColumnName extends string | undefined = string | undefined, IdSpec extends NamedConstraintSpec | undefined = undefined, UniqueSpec extends NamedConstraintSpec | undefined = undefined> = {
19
20
  readonly kind: 'scalar';
20
21
  readonly descriptor?: (ColumnTypeDescriptor & {
21
- readonly codecId: CodecId$1;
22
+ readonly codecId: CodecId;
22
23
  }) | undefined;
23
- readonly typeRef?: TypeRef$1 | undefined;
24
- readonly nullable: Nullable$1;
24
+ readonly typeRef?: TypeRef | undefined;
25
+ readonly nullable: Nullable;
25
26
  readonly columnName?: ColumnName | undefined;
26
27
  readonly default?: ColumnDefault | undefined;
27
- readonly executionDefault?: ExecutionMutationDefaultValue | undefined;
28
- } & (IdSpec$1 extends NamedConstraintSpec ? {
29
- readonly id: IdSpec$1;
28
+ readonly executionDefaults?: ExecutionMutationDefaultPhases | undefined;
29
+ } & (IdSpec extends NamedConstraintSpec ? {
30
+ readonly id: IdSpec;
30
31
  } : {
31
32
  readonly id?: undefined;
32
- }) & (UniqueSpec$1 extends NamedConstraintSpec ? {
33
- readonly unique: UniqueSpec$1;
33
+ }) & (UniqueSpec extends NamedConstraintSpec ? {
34
+ readonly unique: UniqueSpec;
34
35
  } : {
35
36
  readonly unique?: undefined;
36
37
  });
@@ -43,7 +44,7 @@ type AnyScalarFieldState = {
43
44
  readonly nullable: boolean;
44
45
  readonly columnName?: string | undefined;
45
46
  readonly default?: ColumnDefault | undefined;
46
- readonly executionDefault?: ExecutionMutationDefaultValue | undefined;
47
+ readonly executionDefaults?: ExecutionMutationDefaultPhases | undefined;
47
48
  readonly id?: NamedConstraintSpec | undefined;
48
49
  readonly unique?: NamedConstraintSpec | undefined;
49
50
  };
@@ -80,8 +81,8 @@ declare class ScalarFieldBuilder<State extends AnyScalarFieldState = AnyScalarFi
80
81
  column<ColumnName extends string>(name: ColumnName): ScalarFieldBuilder<State extends ScalarFieldState<infer CodecId, infer TypeRef, infer Nullable, string | undefined, infer IdSpec, infer UniqueSpec> ? ScalarFieldState<CodecId, TypeRef, Nullable, ColumnName, IdSpec, UniqueSpec> : never>;
81
82
  default(value: ColumnDefaultLiteralInputValue | ColumnDefault): ScalarFieldBuilder<State>;
82
83
  defaultSql(expression: string): ScalarFieldBuilder<State>;
83
- id<const Name$1 extends string | undefined = undefined>(options?: NamedConstraintSpec<Name$1>): ScalarFieldBuilder<State extends ScalarFieldState<infer CodecId, infer TypeRef, infer Nullable, infer ColumnName, NamedConstraintSpec | undefined, infer UniqueSpec> ? ScalarFieldState<CodecId, TypeRef, Nullable, ColumnName, NamedConstraintSpec<Name$1>, UniqueSpec> : never>;
84
- unique<const Name$1 extends string | undefined = undefined>(options?: NamedConstraintSpec<Name$1>): ScalarFieldBuilder<State extends ScalarFieldState<infer CodecId, infer TypeRef, infer Nullable, infer ColumnName, infer IdSpec, NamedConstraintSpec | undefined> ? ScalarFieldState<CodecId, TypeRef, Nullable, ColumnName, IdSpec, NamedConstraintSpec<Name$1>> : never>;
84
+ id<const Name extends string | undefined = undefined>(options?: NamedConstraintSpec<Name>): ScalarFieldBuilder<State extends ScalarFieldState<infer CodecId, infer TypeRef, infer Nullable, infer ColumnName, NamedConstraintSpec | undefined, infer UniqueSpec> ? ScalarFieldState<CodecId, TypeRef, Nullable, ColumnName, NamedConstraintSpec<Name>, UniqueSpec> : never>;
85
+ unique<const Name extends string | undefined = undefined>(options?: NamedConstraintSpec<Name>): ScalarFieldBuilder<State extends ScalarFieldState<infer CodecId, infer TypeRef, infer Nullable, infer ColumnName, infer IdSpec, NamedConstraintSpec | undefined> ? ScalarFieldState<CodecId, TypeRef, Nullable, ColumnName, IdSpec, NamedConstraintSpec<Name>> : never>;
85
86
  sql<const Spec extends FieldSqlSpecForState<State>>(spec: Spec): ScalarFieldBuilder<ApplyFieldSqlSpec<State, Spec>>;
86
87
  build(): State;
87
88
  }
@@ -89,44 +90,44 @@ declare function columnField<Descriptor extends ColumnTypeDescriptor>(descriptor
89
90
  declare function generatedField<Descriptor extends ColumnTypeDescriptor>(spec: GeneratedFieldSpec & {
90
91
  readonly type: Descriptor;
91
92
  }): ScalarFieldBuilder<ScalarFieldState<Descriptor['codecId'], undefined, false, undefined>>;
92
- declare function namedTypeField<TypeRef$1 extends string>(typeRef: TypeRef$1): ScalarFieldBuilder<ScalarFieldState<string, TypeRef$1, false, undefined>>;
93
- declare function namedTypeField<TypeRef$1 extends StorageTypeInstance>(typeRef: TypeRef$1): ScalarFieldBuilder<ScalarFieldState<TypeRef$1['codecId'], TypeRef$1, false, undefined>>;
93
+ declare function namedTypeField<TypeRef extends string>(typeRef: TypeRef): ScalarFieldBuilder<ScalarFieldState<string, TypeRef, false, undefined>>;
94
+ declare function namedTypeField<TypeRef extends StorageTypeInstance>(typeRef: TypeRef): ScalarFieldBuilder<ScalarFieldState<TypeRef['codecId'], TypeRef, false, undefined>>;
94
95
  type RelationModelRefSource = 'string' | 'token' | 'lazyToken';
95
96
  type TargetFieldRefSource = 'string' | 'token';
96
- type EagerRelationModelName<ModelName$1 extends string = string, Source extends Exclude<RelationModelRefSource, 'lazyToken'> = Exclude<RelationModelRefSource, 'lazyToken'>> = {
97
+ type EagerRelationModelName<ModelName extends string = string, Source extends Exclude<RelationModelRefSource, 'lazyToken'> = Exclude<RelationModelRefSource, 'lazyToken'>> = {
97
98
  readonly kind: 'relationModelName';
98
99
  readonly source: Source;
99
- readonly modelName: ModelName$1;
100
+ readonly modelName: ModelName;
100
101
  };
101
- type LazyRelationModelName<ModelName$1 extends string = string> = {
102
+ type LazyRelationModelName<ModelName extends string = string> = {
102
103
  readonly kind: 'lazyRelationModelName';
103
104
  readonly source: 'lazyToken';
104
- readonly resolve: () => ModelName$1;
105
+ readonly resolve: () => ModelName;
105
106
  };
106
- type RelationModelSource<ModelName$1 extends string = string> = EagerRelationModelName<ModelName$1> | LazyRelationModelName<ModelName$1>;
107
- type BelongsToRelation<ToModel$1 extends string = string, FromField$1 extends string | readonly string[] = string | readonly string[], ToField$1 extends string | readonly string[] = string | readonly string[], SqlSpec extends BelongsToRelationSqlSpec | undefined = undefined> = {
107
+ type RelationModelSource<ModelName extends string = string> = EagerRelationModelName<ModelName> | LazyRelationModelName<ModelName>;
108
+ type BelongsToRelation<ToModel extends string = string, FromField extends string | readonly string[] = string | readonly string[], ToField extends string | readonly string[] = string | readonly string[], SqlSpec extends BelongsToRelationSqlSpec | undefined = undefined> = {
108
109
  readonly kind: 'belongsTo';
109
- readonly toModel: RelationModelSource<ToModel$1>;
110
- readonly from: FromField$1;
111
- readonly to: ToField$1;
110
+ readonly toModel: RelationModelSource<ToModel>;
111
+ readonly from: FromField;
112
+ readonly to: ToField;
112
113
  readonly sql?: SqlSpec;
113
114
  };
114
- type HasManyRelation<ToModel$1 extends string = string, ByField extends string | readonly string[] = string | readonly string[]> = {
115
+ type HasManyRelation<ToModel extends string = string, ByField extends string | readonly string[] = string | readonly string[]> = {
115
116
  readonly kind: 'hasMany';
116
- readonly toModel: RelationModelSource<ToModel$1>;
117
+ readonly toModel: RelationModelSource<ToModel>;
117
118
  readonly by: ByField;
118
119
  };
119
- type HasOneRelation<ToModel$1 extends string = string, ByField extends string | readonly string[] = string | readonly string[]> = {
120
+ type HasOneRelation<ToModel extends string = string, ByField extends string | readonly string[] = string | readonly string[]> = {
120
121
  readonly kind: 'hasOne';
121
- readonly toModel: RelationModelSource<ToModel$1>;
122
+ readonly toModel: RelationModelSource<ToModel>;
122
123
  readonly by: ByField;
123
124
  };
124
- type ManyToManyRelation<ToModel$1 extends string = string, ThroughModel extends string = string, FromField$1 extends string | readonly string[] = string | readonly string[], ToField$1 extends string | readonly string[] = string | readonly string[]> = {
125
+ type ManyToManyRelation<ToModel extends string = string, ThroughModel extends string = string, FromField extends string | readonly string[] = string | readonly string[], ToField extends string | readonly string[] = string | readonly string[]> = {
125
126
  readonly kind: 'manyToMany';
126
- readonly toModel: RelationModelSource<ToModel$1>;
127
+ readonly toModel: RelationModelSource<ToModel>;
127
128
  readonly through: RelationModelSource<ThroughModel>;
128
- readonly from: FromField$1;
129
- readonly to: ToField$1;
129
+ readonly from: FromField;
130
+ readonly to: ToField;
130
131
  };
131
132
  type RelationState = BelongsToRelation<string, string | readonly string[], string | readonly string[], BelongsToRelationSqlSpec | undefined> | HasManyRelation | HasOneRelation | ManyToManyRelation;
132
133
  type AnyRelationState = RelationState;
@@ -139,79 +140,82 @@ declare class RelationBuilder<State extends RelationState = AnyRelationState> {
139
140
  sql<const SqlSpec extends BelongsToRelationSqlSpec>(this: State extends BelongsToRelation<string, string | readonly string[], string | readonly string[], BelongsToRelationSqlSpec | undefined> ? RelationBuilder<State> : never, spec: SqlSpec): RelationBuilder<ApplyBelongsToRelationSqlSpec<State, SqlSpec>>;
140
141
  build(): State;
141
142
  }
142
- type ColumnRef<FieldName$1 extends string = string> = {
143
+ type ColumnRef<FieldName extends string = string> = {
143
144
  readonly kind: 'columnRef';
144
- readonly fieldName: FieldName$1;
145
+ readonly fieldName: FieldName;
145
146
  };
146
- type TargetFieldRef<ModelName$1 extends string = string, FieldName$1 extends string = string, Source extends TargetFieldRefSource = TargetFieldRefSource> = {
147
+ type TargetFieldRef<ModelName extends string = string, FieldName extends string = string, Source extends TargetFieldRefSource = TargetFieldRefSource> = {
147
148
  readonly kind: 'targetFieldRef';
148
149
  readonly source: Source;
149
- readonly modelName: ModelName$1;
150
- readonly fieldName: FieldName$1;
151
- };
152
- type ModelTokenRefs<ModelName$1 extends string, Fields$1 extends Record<string, ScalarFieldBuilder>> = { readonly [K in keyof Fields$1]: TargetFieldRef<ModelName$1, K & string> };
153
- type ConstraintOptions<Name$1 extends string | undefined = string | undefined> = {
154
- readonly name?: Name$1;
155
- };
156
- type IndexOptions<Name$1 extends string | undefined = string | undefined> = ConstraintOptions<Name$1> & {
157
- readonly using?: string;
158
- readonly config?: Record<string, unknown>;
159
- };
160
- type ForeignKeyOptions<Name$1 extends string | undefined = string | undefined> = ConstraintOptions<Name$1> & {
150
+ readonly modelName: ModelName;
151
+ readonly fieldName: FieldName;
152
+ };
153
+ type ModelTokenRefs<ModelName extends string, Fields extends Record<string, ScalarFieldBuilder>> = { readonly [K in keyof Fields]: TargetFieldRef<ModelName, K & string> };
154
+ type ConstraintOptions<Name extends string | undefined = string | undefined> = {
155
+ readonly name?: Name;
156
+ };
157
+ type IndexTypeMap = Record<string, {
158
+ readonly options: unknown;
159
+ }>;
160
+ type IndexInput<Name extends string | undefined, IndexTypes extends IndexTypeMap> = keyof IndexTypes extends never ? ConstraintOptions<Name> : (ConstraintOptions<Name> & {
161
+ readonly type?: never;
162
+ readonly options?: never;
163
+ }) | { readonly [K in keyof IndexTypes & string]: ConstraintOptions<Name> & {
164
+ readonly type: K;
165
+ readonly options: IndexTypes[K]['options'];
166
+ } }[keyof IndexTypes & string];
167
+ type ForeignKeyOptions<Name extends string | undefined = string | undefined> = ConstraintOptions<Name> & {
161
168
  readonly onDelete?: 'noAction' | 'restrict' | 'cascade' | 'setNull' | 'setDefault';
162
169
  readonly onUpdate?: 'noAction' | 'restrict' | 'cascade' | 'setNull' | 'setDefault';
163
170
  readonly constraint?: boolean;
164
171
  readonly index?: boolean;
165
172
  };
166
- type BelongsToRelationSqlSpec<Name$1 extends string | undefined = string | undefined> = {
167
- readonly fk?: ForeignKeyOptions<Name$1>;
173
+ type BelongsToRelationSqlSpec<Name extends string | undefined = string | undefined> = {
174
+ readonly fk?: ForeignKeyOptions<Name>;
168
175
  };
169
- type IdConstraint<FieldNames extends readonly string[] = readonly string[], Name$1 extends string | undefined = string | undefined> = {
176
+ type IdConstraint<FieldNames extends readonly string[] = readonly string[], Name extends string | undefined = string | undefined> = {
170
177
  readonly kind: 'id';
171
178
  readonly fields: FieldNames;
172
- readonly name?: Name$1;
179
+ readonly name?: Name;
173
180
  };
174
181
  type UniqueConstraint<FieldNames extends readonly string[] = readonly string[]> = {
175
182
  readonly kind: 'unique';
176
183
  readonly fields: FieldNames;
177
184
  readonly name?: string;
178
185
  };
179
- type IndexConstraint<FieldNames extends readonly string[] = readonly string[], Name$1 extends string | undefined = string | undefined> = {
186
+ type IndexConstraint<FieldNames extends readonly string[] = readonly string[], Name extends string | undefined = string | undefined> = {
180
187
  readonly kind: 'index';
181
188
  readonly fields: FieldNames;
182
- readonly name?: Name$1;
183
- readonly using?: string;
184
- readonly config?: Record<string, unknown>;
189
+ readonly name?: Name;
190
+ readonly type?: string;
191
+ readonly options?: Record<string, unknown>;
185
192
  };
186
- type ForeignKeyConstraint<SourceFieldNames extends readonly string[] = readonly string[], TargetModelName extends string = string, TargetFieldNames extends readonly string[] = readonly string[], Name$1 extends string | undefined = string | undefined> = {
193
+ type ForeignKeyConstraint<SourceFieldNames extends readonly string[] = readonly string[], TargetModelName extends string = string, TargetFieldNames extends readonly string[] = readonly string[], Name extends string | undefined = string | undefined> = {
187
194
  readonly kind: 'fk';
188
195
  readonly fields: SourceFieldNames;
189
196
  readonly targetModel: TargetModelName;
190
197
  readonly targetFields: TargetFieldNames;
191
198
  readonly targetSource?: TargetFieldRefSource;
192
- readonly name?: Name$1;
199
+ readonly name?: Name;
193
200
  readonly onDelete?: 'noAction' | 'restrict' | 'cascade' | 'setNull' | 'setDefault';
194
201
  readonly onUpdate?: 'noAction' | 'restrict' | 'cascade' | 'setNull' | 'setDefault';
195
202
  readonly constraint?: boolean;
196
203
  readonly index?: boolean;
197
204
  };
198
- declare function createConstraintsDsl(): {
199
- ref: <ModelName$1 extends string, FieldName$1 extends string>(modelName: ModelName$1, fieldName: FieldName$1) => TargetFieldRef<ModelName$1, FieldName$1>;
205
+ declare function createConstraintsDsl<IndexTypes extends IndexTypeMap = Record<never, never>>(): {
206
+ ref: <ModelName extends string, FieldName extends string>(modelName: ModelName, fieldName: FieldName) => TargetFieldRef<ModelName, FieldName>;
200
207
  id: {
201
- <FieldName$1 extends string, Name$1 extends string | undefined = undefined>(field: ColumnRef<FieldName$1>, options?: NamedConstraintSpec<Name$1>): IdConstraint<readonly [FieldName$1], Name$1>;
202
- <FieldNames extends readonly string[], Name$1 extends string | undefined = undefined>(fields: { readonly [K in keyof FieldNames]: ColumnRef<FieldNames[K] & string> }, options?: NamedConstraintSpec<Name$1>): IdConstraint<FieldNames, Name$1>;
208
+ <FieldName extends string, Name extends string | undefined = undefined>(field: ColumnRef<FieldName>, options?: NamedConstraintSpec<Name>): IdConstraint<readonly [FieldName], Name>;
209
+ <FieldNames extends readonly string[], Name extends string | undefined = undefined>(fields: { readonly [K in keyof FieldNames]: ColumnRef<FieldNames[K] & string> }, options?: NamedConstraintSpec<Name>): IdConstraint<FieldNames, Name>;
203
210
  };
204
211
  unique: {
205
- <FieldName$1 extends string>(field: ColumnRef<FieldName$1>, options?: ConstraintOptions): UniqueConstraint<readonly [FieldName$1]>;
212
+ <FieldName extends string>(field: ColumnRef<FieldName>, options?: ConstraintOptions): UniqueConstraint<readonly [FieldName]>;
206
213
  <FieldNames extends readonly string[]>(fields: { readonly [K in keyof FieldNames]: ColumnRef<FieldNames[K] & string> }, options?: ConstraintOptions): UniqueConstraint<FieldNames>;
207
214
  };
208
- index: {
209
- <FieldName$1 extends string, Name$1 extends string | undefined = undefined>(field: ColumnRef<FieldName$1>, options?: IndexOptions<Name$1>): IndexConstraint<readonly [FieldName$1], Name$1>;
210
- <FieldNames extends readonly string[], Name$1 extends string | undefined = undefined>(fields: { readonly [K in keyof FieldNames]: ColumnRef<FieldNames[K] & string> }, options?: IndexOptions<Name$1>): IndexConstraint<FieldNames, Name$1>;
211
- };
215
+ index: <FieldNames extends readonly string[], Name extends string | undefined = undefined>(fields: { readonly [K in keyof FieldNames]: ColumnRef<FieldNames[K] & string> }, options?: IndexInput<Name, IndexTypes>) => IndexConstraint<FieldNames, Name>;
212
216
  foreignKey: {
213
- <SourceFieldName extends string, TargetModelName extends string, TargetFieldName extends string, Name$1 extends string | undefined = undefined>(field: ColumnRef<SourceFieldName>, target: TargetFieldRef<TargetModelName, TargetFieldName>, options?: ForeignKeyOptions<Name$1>): ForeignKeyConstraint<readonly [SourceFieldName], TargetModelName, readonly [TargetFieldName], Name$1>;
214
- <SourceFieldNames extends readonly string[], TargetModelName extends string, TargetFieldNames extends readonly string[], Name$1 extends string | undefined = undefined>(fields: { readonly [K in keyof SourceFieldNames]: ColumnRef<SourceFieldNames[K] & string> }, target: { readonly [K in keyof TargetFieldNames]: TargetFieldRef<TargetModelName, TargetFieldNames[K] & string> }, options?: ForeignKeyOptions<Name$1>): ForeignKeyConstraint<SourceFieldNames, TargetModelName, TargetFieldNames, Name$1>;
217
+ <SourceFieldName extends string, TargetModelName extends string, TargetFieldName extends string, Name extends string | undefined = undefined>(field: ColumnRef<SourceFieldName>, target: TargetFieldRef<TargetModelName, TargetFieldName>, options?: ForeignKeyOptions<Name>): ForeignKeyConstraint<readonly [SourceFieldName], TargetModelName, readonly [TargetFieldName], Name>;
218
+ <SourceFieldNames extends readonly string[], TargetModelName extends string, TargetFieldNames extends readonly string[], Name extends string | undefined = undefined>(fields: { readonly [K in keyof SourceFieldNames]: ColumnRef<SourceFieldNames[K] & string> }, target: { readonly [K in keyof TargetFieldNames]: TargetFieldRef<TargetModelName, TargetFieldNames[K] & string> }, options?: ForeignKeyOptions<Name>): ForeignKeyConstraint<SourceFieldNames, TargetModelName, TargetFieldNames, Name>;
215
219
  };
216
220
  };
217
221
  type ConstraintsDsl = ReturnType<typeof createConstraintsDsl>;
@@ -224,32 +228,38 @@ type SqlStageSpec = {
224
228
  readonly indexes?: readonly IndexConstraint[];
225
229
  readonly foreignKeys?: readonly ForeignKeyConstraint[];
226
230
  };
227
- type FieldRefs<Fields$1 extends Record<string, ScalarFieldBuilder>> = { readonly [K in keyof Fields$1]: ColumnRef<K & string> };
228
- type AttributeContext<Fields$1 extends Record<string, ScalarFieldBuilder>> = {
229
- readonly fields: FieldRefs<Fields$1>;
231
+ type FieldRefs<Fields extends Record<string, ScalarFieldBuilder>> = { readonly [K in keyof Fields]: ColumnRef<K & string> };
232
+ type AttributeContext<Fields extends Record<string, ScalarFieldBuilder>> = {
233
+ readonly fields: FieldRefs<Fields>;
230
234
  readonly constraints: Pick<ConstraintsDsl, 'id' | 'unique'>;
231
235
  };
232
- type SqlContext<Fields$1 extends Record<string, ScalarFieldBuilder>> = {
233
- readonly cols: FieldRefs<Fields$1>;
234
- readonly constraints: Pick<ConstraintsDsl, 'index' | 'foreignKey' | 'ref'>;
236
+ type PackAwareIndex<IndexTypes extends IndexTypeMap> = <FieldNames extends readonly string[], Name extends string | undefined = undefined>(fields: { readonly [K in keyof FieldNames]: ColumnRef<FieldNames[K] & string> }, options?: IndexInput<Name, IndexTypes>) => IndexConstraint<FieldNames, Name>;
237
+ type PackAwareSqlConstraints<IndexTypes extends IndexTypeMap> = {
238
+ readonly foreignKey: ConstraintsDsl['foreignKey'];
239
+ readonly ref: ConstraintsDsl['ref'];
240
+ readonly index: PackAwareIndex<IndexTypes>;
241
+ };
242
+ type SqlContext<Fields extends Record<string, ScalarFieldBuilder>, IndexTypes extends IndexTypeMap = Record<never, never>> = {
243
+ readonly cols: FieldRefs<Fields>;
244
+ readonly constraints: PackAwareSqlConstraints<IndexTypes>;
235
245
  };
236
246
  type StageInput<Context, Spec> = Spec | ((context: Context) => Spec);
237
- type StaticLiteralName<Name$1> = Name$1 extends string ? (string extends Name$1 ? never : Name$1) : never;
247
+ type StaticLiteralName<Name> = Name extends string ? (string extends Name ? never : Name) : never;
238
248
  type NamedConstraintLiteralName<Constraint> = Constraint extends {
239
249
  readonly name?: infer Name;
240
250
  } ? StaticLiteralName<Name> : never;
241
251
  type DuplicateLiteralNames<Items extends readonly unknown[], Seen extends string = never, Duplicates extends string = never> = Items extends readonly [infer First, ...infer Rest extends readonly unknown[]] ? NamedConstraintLiteralName<First> extends infer Name extends string ? Name extends Seen ? DuplicateLiteralNames<Rest, Seen, Duplicates | Name> : DuplicateLiteralNames<Rest, Seen | Name, Duplicates> : DuplicateLiteralNames<Rest, Seen, Duplicates> : Duplicates;
242
- type InlineIdLiteralName<Fields$1 extends Record<string, ScalarFieldBuilder>> = { readonly [FieldName in keyof Fields$1]: FieldStateOf<Fields$1[FieldName]> extends {
252
+ type InlineIdLiteralName<Fields extends Record<string, ScalarFieldBuilder>> = { readonly [FieldName in keyof Fields]: FieldStateOf<Fields[FieldName]> extends {
243
253
  readonly id: {
244
254
  readonly name?: infer Name;
245
255
  };
246
- } ? StaticLiteralName<Name> : never }[keyof Fields$1];
256
+ } ? StaticLiteralName<Name> : never }[keyof Fields];
247
257
  type AttributeIdLiteralName<AttributesSpec extends ModelAttributesSpec | undefined> = AttributesSpec extends {
248
258
  readonly id?: {
249
259
  readonly name?: infer Name;
250
260
  };
251
261
  } ? StaticLiteralName<Name> : never;
252
- type ModelIdLiteralName<Fields$1 extends Record<string, ScalarFieldBuilder>, AttributesSpec extends ModelAttributesSpec | undefined> = [AttributeIdLiteralName<AttributesSpec>] extends [never] ? InlineIdLiteralName<Fields$1> : AttributeIdLiteralName<AttributesSpec>;
262
+ type ModelIdLiteralName<Fields extends Record<string, ScalarFieldBuilder>, AttributesSpec extends ModelAttributesSpec | undefined> = [AttributeIdLiteralName<AttributesSpec>] extends [never] ? InlineIdLiteralName<Fields> : AttributeIdLiteralName<AttributesSpec>;
253
263
  type SqlIndexes<SqlSpec extends SqlStageSpec> = SqlSpec extends {
254
264
  readonly indexes?: infer Indexes extends readonly unknown[];
255
265
  } ? Indexes : readonly [];
@@ -257,43 +267,44 @@ type SqlForeignKeys<SqlSpec extends SqlStageSpec> = SqlSpec extends {
257
267
  readonly foreignKeys?: infer ForeignKeys extends readonly unknown[];
258
268
  } ? ForeignKeys : readonly [];
259
269
  type SqlNamedObjects<SqlSpec extends SqlStageSpec> = [...SqlIndexes<SqlSpec>, ...SqlForeignKeys<SqlSpec>];
260
- type ValidateSqlStageSpec<Fields$1 extends Record<string, ScalarFieldBuilder>, AttributesSpec extends ModelAttributesSpec | undefined, SqlSpec extends SqlStageSpec> = [DuplicateLiteralNames<SqlNamedObjects<SqlSpec>>] extends [never] ? [Extract<ModelIdLiteralName<Fields$1, AttributesSpec>, NamedConstraintLiteralName<SqlNamedObjects<SqlSpec>[number]>>] extends [never] ? SqlSpec : never : never;
261
- type ValidateAttributesStageSpec<Fields$1 extends Record<string, ScalarFieldBuilder>, SqlSpec extends SqlStageSpec | undefined, AttributesSpec extends ModelAttributesSpec> = SqlSpec extends SqlStageSpec ? [Extract<ModelIdLiteralName<Fields$1, AttributesSpec>, NamedConstraintLiteralName<SqlNamedObjects<SqlSpec>[number]>>] extends [never] ? AttributesSpec : never : AttributesSpec;
262
- declare class ContractModelBuilder<ModelName$1 extends string | undefined, Fields$1 extends Record<string, ScalarFieldBuilder>, Relations extends Record<string, AnyRelationBuilder> = Record<never, never>, AttributesSpec extends ModelAttributesSpec | undefined = undefined, SqlSpec extends SqlStageSpec | undefined = undefined> {
270
+ type ValidateSqlStageSpec<Fields extends Record<string, ScalarFieldBuilder>, AttributesSpec extends ModelAttributesSpec | undefined, SqlSpec extends SqlStageSpec> = [DuplicateLiteralNames<SqlNamedObjects<SqlSpec>>] extends [never] ? [Extract<ModelIdLiteralName<Fields, AttributesSpec>, NamedConstraintLiteralName<SqlNamedObjects<SqlSpec>[number]>>] extends [never] ? SqlSpec : never : never;
271
+ type ValidateAttributesStageSpec<Fields extends Record<string, ScalarFieldBuilder>, SqlSpec extends SqlStageSpec | undefined, AttributesSpec extends ModelAttributesSpec> = SqlSpec extends SqlStageSpec ? [Extract<ModelIdLiteralName<Fields, AttributesSpec>, NamedConstraintLiteralName<SqlNamedObjects<SqlSpec>[number]>>] extends [never] ? AttributesSpec : never : AttributesSpec;
272
+ declare class ContractModelBuilder<ModelName extends string | undefined, Fields extends Record<string, ScalarFieldBuilder>, Relations extends Record<string, AnyRelationBuilder> = Record<never, never>, AttributesSpec extends ModelAttributesSpec | undefined = undefined, SqlSpec extends SqlStageSpec | undefined = undefined, IndexTypes extends IndexTypeMap = Record<never, never>> {
263
273
  readonly stageOne: {
264
- readonly modelName?: ModelName$1;
265
- readonly fields: Fields$1;
274
+ readonly modelName?: ModelName;
275
+ readonly fields: Fields;
266
276
  readonly relations: Relations;
267
277
  };
268
- readonly attributesFactory?: StageInput<AttributeContext<Fields$1>, AttributesSpec> | undefined;
269
- readonly sqlFactory?: StageInput<SqlContext<Fields$1>, SqlSpec> | undefined;
270
- readonly __name: ModelName$1;
271
- readonly __fields: Fields$1;
278
+ readonly attributesFactory?: StageInput<AttributeContext<Fields>, AttributesSpec> | undefined;
279
+ readonly sqlFactory?: StageInput<SqlContext<Fields, IndexTypes>, SqlSpec> | undefined;
280
+ readonly __name: ModelName;
281
+ readonly __fields: Fields;
272
282
  readonly __relations: Relations;
273
283
  readonly __attributes: AttributesSpec;
274
284
  readonly __sql: SqlSpec;
275
- readonly refs: ModelName$1 extends string ? ModelTokenRefs<ModelName$1, Fields$1> : never;
285
+ readonly __indexTypes: IndexTypes;
286
+ readonly refs: ModelName extends string ? ModelTokenRefs<ModelName, Fields> : never;
276
287
  constructor(stageOne: {
277
- readonly modelName?: ModelName$1;
278
- readonly fields: Fields$1;
288
+ readonly modelName?: ModelName;
289
+ readonly fields: Fields;
279
290
  readonly relations: Relations;
280
- }, attributesFactory?: StageInput<AttributeContext<Fields$1>, AttributesSpec> | undefined, sqlFactory?: StageInput<SqlContext<Fields$1>, SqlSpec> | undefined);
281
- ref<FieldName$1 extends keyof Fields$1 & string>(this: ModelName$1 extends string ? ContractModelBuilder<ModelName$1, Fields$1, Relations, AttributesSpec, SqlSpec> : never, fieldName: FieldName$1): TargetFieldRef<ModelName$1 & string, FieldName$1>;
282
- relations<const NextRelations extends Record<string, AnyRelationBuilder>>(relations: NextRelations): ContractModelBuilder<ModelName$1, Fields$1, Relations & NextRelations, AttributesSpec, SqlSpec>;
283
- attributes<const NextAttributesSpec extends ModelAttributesSpec>(specOrFactory: StageInput<AttributeContext<Fields$1>, ValidateAttributesStageSpec<Fields$1, SqlSpec, NextAttributesSpec>>): ContractModelBuilder<ModelName$1, Fields$1, Relations, NextAttributesSpec, SqlSpec>;
284
- sql<const NextSqlSpec extends SqlStageSpec>(specOrFactory: StageInput<SqlContext<Fields$1>, NextSqlSpec>): [ValidateSqlStageSpec<Fields$1, AttributesSpec, NextSqlSpec>] extends [never] ? ContractModelBuilder<ModelName$1, Fields$1, Relations, AttributesSpec, never> : ContractModelBuilder<ModelName$1, Fields$1, Relations, AttributesSpec, NextSqlSpec>;
291
+ }, attributesFactory?: StageInput<AttributeContext<Fields>, AttributesSpec> | undefined, sqlFactory?: StageInput<SqlContext<Fields, IndexTypes>, SqlSpec> | undefined);
292
+ ref<FieldName extends keyof Fields & string>(this: ModelName extends string ? ContractModelBuilder<ModelName, Fields, Relations, AttributesSpec, SqlSpec, IndexTypes> : never, fieldName: FieldName): TargetFieldRef<ModelName & string, FieldName>;
293
+ relations<const NextRelations extends Record<string, AnyRelationBuilder>>(relations: NextRelations): ContractModelBuilder<ModelName, Fields, Relations & NextRelations, AttributesSpec, SqlSpec, IndexTypes>;
294
+ attributes<const NextAttributesSpec extends ModelAttributesSpec>(specOrFactory: StageInput<AttributeContext<Fields>, ValidateAttributesStageSpec<Fields, SqlSpec, NextAttributesSpec>>): ContractModelBuilder<ModelName, Fields, Relations, NextAttributesSpec, SqlSpec, IndexTypes>;
295
+ sql<const NextSqlSpec extends SqlStageSpec>(specOrFactory: StageInput<SqlContext<Fields, IndexTypes>, NextSqlSpec>): [ValidateSqlStageSpec<Fields, AttributesSpec, NextSqlSpec>] extends [never] ? ContractModelBuilder<ModelName, Fields, Relations, AttributesSpec, never, IndexTypes> : ContractModelBuilder<ModelName, Fields, Relations, AttributesSpec, NextSqlSpec, IndexTypes>;
285
296
  buildAttributesSpec(): AttributesSpec;
286
297
  buildSqlSpec(): SqlSpec;
287
298
  }
288
- type NamedModelTokenShape<ModelName$1 extends string = string, Fields$1 extends Record<string, ScalarFieldBuilder> = Record<string, ScalarFieldBuilder>> = {
299
+ type NamedModelTokenShape<ModelName extends string = string, Fields extends Record<string, ScalarFieldBuilder> = Record<string, ScalarFieldBuilder>> = {
289
300
  readonly stageOne: {
290
- readonly modelName?: ModelName$1;
291
- readonly fields: Fields$1;
301
+ readonly modelName?: ModelName;
302
+ readonly fields: Fields;
292
303
  };
293
304
  };
294
305
  type AnyNamedModelToken = NamedModelTokenShape<string, Record<string, ScalarFieldBuilder>>;
295
- type LazyNamedModelToken<Token$1 extends AnyNamedModelToken = AnyNamedModelToken> = () => Token$1;
296
- type RelationFieldSelection<FieldName$1 extends string> = FieldName$1 | readonly FieldName$1[];
306
+ type LazyNamedModelToken<Token extends AnyNamedModelToken = AnyNamedModelToken> = () => Token;
307
+ type RelationFieldSelection<FieldName extends string> = FieldName | readonly FieldName[];
297
308
  type RelationModelName<Target> = Target extends NamedModelTokenShape<infer ModelName extends string, Record<string, ScalarFieldBuilder>> ? ModelName : Target extends (() => infer Token) ? RelationModelName<Token> : never;
298
309
  type RelationModelFieldNames<Target> = Target extends NamedModelTokenShape<string, infer Fields> ? keyof Fields & string : Target extends (() => infer Token) ? RelationModelFieldNames<Token> : never;
299
310
  type ContractInput<Family extends FamilyPackRef<string> = FamilyPackRef<string>, Target extends TargetPackRef<'sql', string> = TargetPackRef<'sql', string>, Types extends Record<string, StorageTypeInstance> = Record<never, never>, Models extends Record<string, ContractModelBuilder<string | undefined, Record<string, ScalarFieldBuilder>, Record<string, AnyRelationBuilder>, ModelAttributesSpec | undefined, SqlStageSpec | undefined>> = Record<never, never>, ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined = undefined, Capabilities extends Record<string, Record<string, boolean>> | undefined = undefined> = {
@@ -308,44 +319,44 @@ type ContractInput<Family extends FamilyPackRef<string> = FamilyPackRef<string>,
308
319
  readonly models?: Models;
309
320
  readonly codecLookup?: CodecLookup;
310
321
  };
311
- declare function model<const ModelName$1 extends string, Fields$1 extends Record<string, ScalarFieldBuilder>, Relations extends Record<string, AnyRelationBuilder> = Record<never, never>>(modelName: ModelName$1, input: {
312
- readonly fields: Fields$1;
322
+ declare function model<const ModelName extends string, Fields extends Record<string, ScalarFieldBuilder>, Relations extends Record<string, AnyRelationBuilder> = Record<never, never>>(modelName: ModelName, input: {
323
+ readonly fields: Fields;
313
324
  readonly relations?: Relations;
314
- }): ContractModelBuilder<ModelName$1, Fields$1, Relations>;
315
- declare function model<Fields$1 extends Record<string, ScalarFieldBuilder>, Relations extends Record<string, AnyRelationBuilder> = Record<never, never>>(input: {
316
- readonly fields: Fields$1;
325
+ }): ContractModelBuilder<ModelName, Fields, Relations>;
326
+ declare function model<Fields extends Record<string, ScalarFieldBuilder>, Relations extends Record<string, AnyRelationBuilder> = Record<never, never>>(input: {
327
+ readonly fields: Fields;
317
328
  readonly relations?: Relations;
318
- }): ContractModelBuilder<undefined, Fields$1, Relations>;
319
- declare function belongsTo<Token$1 extends AnyNamedModelToken, FromField$1 extends string | readonly string[], ToField$1 extends RelationFieldSelection<RelationModelFieldNames<Token$1>>>(toModel: Token$1 | LazyNamedModelToken<Token$1>, options: {
320
- readonly from: FromField$1;
321
- readonly to: ToField$1;
322
- }): RelationBuilder<BelongsToRelation<RelationModelName<Token$1>, FromField$1, ToField$1>>;
323
- declare function belongsTo<ToModel$1 extends string, FromField$1 extends string | readonly string[], ToField$1 extends string | readonly string[]>(toModel: ToModel$1, options: {
324
- readonly from: FromField$1;
325
- readonly to: ToField$1;
326
- }): RelationBuilder<BelongsToRelation<ToModel$1, FromField$1, ToField$1>>;
327
- declare function hasMany<Token$1 extends AnyNamedModelToken, ByField extends RelationFieldSelection<RelationModelFieldNames<Token$1>>>(toModel: Token$1 | LazyNamedModelToken<Token$1>, options: {
329
+ }): ContractModelBuilder<undefined, Fields, Relations>;
330
+ declare function belongsTo<Token extends AnyNamedModelToken, FromField extends string | readonly string[], ToField extends RelationFieldSelection<RelationModelFieldNames<Token>>>(toModel: Token | LazyNamedModelToken<Token>, options: {
331
+ readonly from: FromField;
332
+ readonly to: ToField;
333
+ }): RelationBuilder<BelongsToRelation<RelationModelName<Token>, FromField, ToField>>;
334
+ declare function belongsTo<ToModel extends string, FromField extends string | readonly string[], ToField extends string | readonly string[]>(toModel: ToModel, options: {
335
+ readonly from: FromField;
336
+ readonly to: ToField;
337
+ }): RelationBuilder<BelongsToRelation<ToModel, FromField, ToField>>;
338
+ declare function hasMany<Token extends AnyNamedModelToken, ByField extends RelationFieldSelection<RelationModelFieldNames<Token>>>(toModel: Token | LazyNamedModelToken<Token>, options: {
328
339
  readonly by: ByField;
329
- }): RelationBuilder<HasManyRelation<RelationModelName<Token$1>, ByField>>;
330
- declare function hasMany<ToModel$1 extends string, ByField extends string | readonly string[]>(toModel: ToModel$1, options: {
340
+ }): RelationBuilder<HasManyRelation<RelationModelName<Token>, ByField>>;
341
+ declare function hasMany<ToModel extends string, ByField extends string | readonly string[]>(toModel: ToModel, options: {
331
342
  readonly by: ByField;
332
- }): RelationBuilder<HasManyRelation<ToModel$1, ByField>>;
333
- declare function hasOne<Token$1 extends AnyNamedModelToken, ByField extends RelationFieldSelection<RelationModelFieldNames<Token$1>>>(toModel: Token$1 | LazyNamedModelToken<Token$1>, options: {
343
+ }): RelationBuilder<HasManyRelation<ToModel, ByField>>;
344
+ declare function hasOne<Token extends AnyNamedModelToken, ByField extends RelationFieldSelection<RelationModelFieldNames<Token>>>(toModel: Token | LazyNamedModelToken<Token>, options: {
334
345
  readonly by: ByField;
335
- }): RelationBuilder<HasOneRelation<RelationModelName<Token$1>, ByField>>;
336
- declare function hasOne<ToModel$1 extends string, ByField extends string | readonly string[]>(toModel: ToModel$1, options: {
346
+ }): RelationBuilder<HasOneRelation<RelationModelName<Token>, ByField>>;
347
+ declare function hasOne<ToModel extends string, ByField extends string | readonly string[]>(toModel: ToModel, options: {
337
348
  readonly by: ByField;
338
- }): RelationBuilder<HasOneRelation<ToModel$1, ByField>>;
339
- declare function manyToMany<ToToken extends AnyNamedModelToken, ThroughToken extends AnyNamedModelToken, FromField$1 extends RelationFieldSelection<RelationModelFieldNames<ThroughToken>>, ToField$1 extends RelationFieldSelection<RelationModelFieldNames<ThroughToken>>>(toModel: ToToken | LazyNamedModelToken<ToToken>, options: {
349
+ }): RelationBuilder<HasOneRelation<ToModel, ByField>>;
350
+ declare function manyToMany<ToToken extends AnyNamedModelToken, ThroughToken extends AnyNamedModelToken, FromField extends RelationFieldSelection<RelationModelFieldNames<ThroughToken>>, ToField extends RelationFieldSelection<RelationModelFieldNames<ThroughToken>>>(toModel: ToToken | LazyNamedModelToken<ToToken>, options: {
340
351
  readonly through: ThroughToken | LazyNamedModelToken<ThroughToken>;
341
- readonly from: FromField$1;
342
- readonly to: ToField$1;
343
- }): RelationBuilder<ManyToManyRelation<RelationModelName<ToToken>, RelationModelName<ThroughToken>, FromField$1, ToField$1>>;
344
- declare function manyToMany<ToModel$1 extends string, ThroughModel extends string, FromField$1 extends string | readonly string[], ToField$1 extends string | readonly string[]>(toModel: ToModel$1, options: {
352
+ readonly from: FromField;
353
+ readonly to: ToField;
354
+ }): RelationBuilder<ManyToManyRelation<RelationModelName<ToToken>, RelationModelName<ThroughToken>, FromField, ToField>>;
355
+ declare function manyToMany<ToModel extends string, ThroughModel extends string, FromField extends string | readonly string[], ToField extends string | readonly string[]>(toModel: ToModel, options: {
345
356
  readonly through: ThroughModel;
346
- readonly from: FromField$1;
347
- readonly to: ToField$1;
348
- }): RelationBuilder<ManyToManyRelation<ToModel$1, ThroughModel, FromField$1, ToField$1>>;
357
+ readonly from: FromField;
358
+ readonly to: ToField;
359
+ }): RelationBuilder<ManyToManyRelation<ToModel, ThroughModel, FromField, ToField>>;
349
360
  declare const rel: {
350
361
  belongsTo: typeof belongsTo;
351
362
  hasMany: typeof hasMany;
@@ -365,17 +376,19 @@ type AttributeStageIdFieldNames<T> = T extends {
365
376
  //#endregion
366
377
  //#region src/authoring-type-utils.d.ts
367
378
  type UnionToIntersection<U> = (U extends unknown ? (value: U) => void : never) extends ((value: infer I) => void) ? I : never;
368
- type NamedConstraintSpec<Name$1 extends string | undefined = string | undefined> = {
369
- readonly name?: Name$1;
379
+ type NamedConstraintSpec<Name extends string | undefined = string | undefined> = {
380
+ readonly name?: Name;
370
381
  };
371
- type NamedConstraintState<Enabled extends boolean, Name$1 extends string | undefined = undefined> = Enabled extends true ? NamedConstraintSpec<Name$1> : undefined;
372
- type OptionalObjectArgumentKeys<Properties$1 extends Record<string, AuthoringArgumentDescriptor>> = { readonly [K in keyof Properties$1]: Properties$1[K] extends {
382
+ type NamedConstraintState<Enabled extends boolean, Name extends string | undefined = undefined> = Enabled extends true ? NamedConstraintSpec<Name> : undefined;
383
+ type OptionalObjectArgumentKeys<Properties extends Record<string, AuthoringArgumentDescriptor>> = { readonly [K in keyof Properties]: Properties[K] extends {
373
384
  readonly optional: true;
374
- } ? K : never }[keyof Properties$1];
375
- type ObjectArgumentType<Properties$1 extends Record<string, AuthoringArgumentDescriptor>> = { readonly [K in Exclude<keyof Properties$1, OptionalObjectArgumentKeys<Properties$1>>]: ArgTypeFromDescriptor<Properties$1[K]> } & { readonly [K in OptionalObjectArgumentKeys<Properties$1>]?: ArgTypeFromDescriptor<Properties$1[K]> };
385
+ } ? K : never }[keyof Properties];
386
+ type ObjectArgumentType<Properties extends Record<string, AuthoringArgumentDescriptor>> = { readonly [K in Exclude<keyof Properties, OptionalObjectArgumentKeys<Properties>>]: ArgTypeFromDescriptor<Properties[K]> } & { readonly [K in OptionalObjectArgumentKeys<Properties>]?: ArgTypeFromDescriptor<Properties[K]> };
376
387
  type ArgTypeFromDescriptor<Arg extends AuthoringArgumentDescriptor> = Arg extends {
377
388
  readonly kind: 'string';
378
389
  } ? string : Arg extends {
390
+ readonly kind: 'boolean';
391
+ } ? boolean : Arg extends {
379
392
  readonly kind: 'number';
380
393
  } ? number : Arg extends {
381
394
  readonly kind: 'stringArray';
@@ -383,64 +396,31 @@ type ArgTypeFromDescriptor<Arg extends AuthoringArgumentDescriptor> = Arg extend
383
396
  readonly kind: 'object';
384
397
  readonly properties: infer Properties extends Record<string, AuthoringArgumentDescriptor>;
385
398
  } ? ObjectArgumentType<Properties> : never;
386
- type TupleFromArgumentDescriptors<Args$1 extends readonly AuthoringArgumentDescriptor[]> = { readonly [K in keyof Args$1]: Args$1[K] extends AuthoringArgumentDescriptor ? ArgTypeFromDescriptor<Args$1[K]> : never };
399
+ type TupleFromArgumentDescriptors<Args extends readonly AuthoringArgumentDescriptor[]> = { readonly [K in keyof Args]: Args[K] extends AuthoringArgumentDescriptor ? ArgTypeFromDescriptor<Args[K]> : never };
387
400
  type SupportsNamedConstraintOptions<Descriptor extends AuthoringFieldPresetDescriptor> = Descriptor['output'] extends {
388
401
  readonly id: true;
389
402
  } ? true : Descriptor['output'] extends {
390
403
  readonly unique: true;
391
404
  } ? true : false;
392
- type ResolveTemplateValue<Template, Args$1 extends readonly unknown[]> = Template extends {
405
+ type ResolveTemplateValue<Template, Args extends readonly unknown[]> = Template extends {
393
406
  readonly kind: 'arg';
394
407
  readonly index: infer Index extends number;
395
408
  readonly path?: infer Path extends readonly string[] | undefined;
396
409
  readonly default?: infer Default;
397
- } ? ResolveTemplateArgValue<Args$1[Index], Path, Default, Args$1> : Template extends readonly unknown[] ? { readonly [K in keyof Template]: ResolveTemplateValue<Template[K], Args$1> } : Template extends Record<string, unknown> ? { readonly [K in keyof Template]: ResolveTemplateValue<Template[K], Args$1> } : Template;
398
- type ResolveTemplatePathValue<Value, Path$1 extends readonly string[] | undefined> = Path$1 extends readonly [infer Segment extends string, ...infer Rest extends readonly string[]] ? Segment extends keyof NonNullable<Value> ? ResolveTemplatePathValue<NonNullable<Value>[Segment], Rest> : never : Value;
399
- type ResolveTemplateDefaultValue<Value, Default$1, Args$1 extends readonly unknown[]> = Default$1 extends undefined ? Value : [Value] extends [never] ? ResolveTemplateValue<Default$1, Args$1> : undefined extends Value ? Exclude<Value, undefined> | ResolveTemplateValue<Default$1, Args$1> : Value;
400
- type ResolveTemplateArgValue<Value, Path$1 extends readonly string[] | undefined, Default$1, Args$1 extends readonly unknown[]> = ResolveTemplateDefaultValue<ResolveTemplatePathValue<Value, Path$1>, Default$1, Args$1>;
401
- type FieldBuilderFromPresetDescriptor<Descriptor extends AuthoringFieldPresetDescriptor, Args$1 extends readonly unknown[] = readonly [], ConstraintName extends string | undefined = undefined> = ScalarFieldBuilder<ScalarFieldState<ResolveTemplateValue<Descriptor['output']['codecId'], Args$1> extends string ? ResolveTemplateValue<Descriptor['output']['codecId'], Args$1> : string, undefined, ResolveTemplateValue<Descriptor['output']['nullable'], Args$1> extends true ? true : false, undefined, NamedConstraintState<ResolveTemplateValue<Descriptor['output']['id'], Args$1> extends true ? true : false, ConstraintName>, NamedConstraintState<ResolveTemplateValue<Descriptor['output']['unique'], Args$1> extends true ? true : false, ConstraintName>>>;
410
+ } ? ResolveTemplateArgValue<Args[Index], Path, Default, Args> : Template extends readonly unknown[] ? { readonly [K in keyof Template]: ResolveTemplateValue<Template[K], Args> } : Template extends Record<string, unknown> ? { readonly [K in keyof Template]: ResolveTemplateValue<Template[K], Args> } : Template;
411
+ type ResolveTemplatePathValue<Value, Path extends readonly string[] | undefined> = Path extends readonly [infer Segment extends string, ...infer Rest extends readonly string[]] ? Segment extends keyof NonNullable<Value> ? ResolveTemplatePathValue<NonNullable<Value>[Segment], Rest> : never : Value;
412
+ type ResolveTemplateDefaultValue<Value, Default, Args extends readonly unknown[]> = Default extends undefined ? Value : [Value] extends [never] ? ResolveTemplateValue<Default, Args> : undefined extends Value ? Exclude<Value, undefined> | ResolveTemplateValue<Default, Args> : Value;
413
+ type ResolveTemplateArgValue<Value, Path extends readonly string[] | undefined, Default, Args extends readonly unknown[]> = ResolveTemplateDefaultValue<ResolveTemplatePathValue<Value, Path>, Default, Args>;
414
+ type FieldBuilderFromPresetDescriptor<Descriptor extends AuthoringFieldPresetDescriptor, Args extends readonly unknown[] = readonly [], ConstraintName extends string | undefined = undefined> = ScalarFieldBuilder<ScalarFieldState<ResolveTemplateValue<Descriptor['output']['codecId'], Args> extends string ? ResolveTemplateValue<Descriptor['output']['codecId'], Args> : string, undefined, ResolveTemplateValue<Descriptor['output']['nullable'], Args> extends true ? true : false, undefined, NamedConstraintState<ResolveTemplateValue<Descriptor['output']['id'], Args> extends true ? true : false, ConstraintName>, NamedConstraintState<ResolveTemplateValue<Descriptor['output']['unique'], Args> extends true ? true : false, ConstraintName>>>;
402
415
  type FieldHelperFunctionWithoutNamedConstraint<Descriptor extends AuthoringFieldPresetDescriptor> = Descriptor extends {
403
416
  readonly args: infer Args extends readonly AuthoringArgumentDescriptor[];
404
417
  } ? <const Params extends TupleFromArgumentDescriptors<Args>>(...args: Params) => FieldBuilderFromPresetDescriptor<Descriptor, Params> : () => FieldBuilderFromPresetDescriptor<Descriptor, readonly []>;
405
418
  type FieldHelperFunctionWithNamedConstraint<Descriptor extends AuthoringFieldPresetDescriptor> = Descriptor extends {
406
419
  readonly args: infer Args extends readonly AuthoringArgumentDescriptor[];
407
- } ? <const Params extends TupleFromArgumentDescriptors<Args>, const Name$1 extends string | undefined = undefined>(...args: [...params: Params, options?: NamedConstraintSpec<Name$1>]) => FieldBuilderFromPresetDescriptor<Descriptor, Params, Name$1> : <const Name$1 extends string | undefined = undefined>(options?: NamedConstraintSpec<Name$1>) => FieldBuilderFromPresetDescriptor<Descriptor, readonly [], Name$1>;
420
+ } ? <const Params extends TupleFromArgumentDescriptors<Args>, const Name extends string | undefined = undefined>(...args: [...params: Params, options?: NamedConstraintSpec<Name>]) => FieldBuilderFromPresetDescriptor<Descriptor, Params, Name> : <const Name extends string | undefined = undefined>(options?: NamedConstraintSpec<Name>) => FieldBuilderFromPresetDescriptor<Descriptor, readonly [], Name>;
408
421
  type FieldHelperFunction<Descriptor extends AuthoringFieldPresetDescriptor> = SupportsNamedConstraintOptions<Descriptor> extends true ? FieldHelperFunctionWithNamedConstraint<Descriptor> : FieldHelperFunctionWithoutNamedConstraint<Descriptor>;
409
422
  type FieldHelpersFromNamespace<Namespace> = { readonly [K in keyof Namespace]: Namespace[K] extends AuthoringFieldPresetDescriptor ? FieldHelperFunction<Namespace[K]> : Namespace[K] extends Record<string, unknown> ? FieldHelpersFromNamespace<Namespace[K]> : never };
410
423
  //#endregion
411
- //#region src/composed-authoring-helpers.d.ts
412
- type ExtractTypeNamespaceFromPack<Pack> = Pack extends {
413
- readonly authoring?: {
414
- readonly type?: infer Namespace extends AuthoringTypeNamespace;
415
- };
416
- } ? Namespace : Record<never, never>;
417
- type ExtractFieldNamespaceFromPack<Pack> = Pack extends {
418
- readonly authoring?: {
419
- readonly field?: infer Namespace extends AuthoringFieldNamespace;
420
- };
421
- } ? Namespace : Record<never, never>;
422
- type MergeExtensionTypeNamespaces<ExtensionPacks> = ExtensionPacks extends Record<string, unknown> ? keyof ExtensionPacks extends never ? Record<never, never> : UnionToIntersection<{ [K in keyof ExtensionPacks]: ExtractTypeNamespaceFromPack<ExtensionPacks[K]> }[keyof ExtensionPacks]> : Record<never, never>;
423
- type MergeExtensionFieldNamespaces<ExtensionPacks> = ExtensionPacks extends Record<string, unknown> ? keyof ExtensionPacks extends never ? Record<never, never> : UnionToIntersection<{ [K in keyof ExtensionPacks]: ExtractFieldNamespaceFromPack<ExtensionPacks[K]> }[keyof ExtensionPacks]> : Record<never, never>;
424
- type StorageTypeFromDescriptor<Descriptor extends AuthoringTypeConstructorDescriptor, Args$1 extends readonly unknown[]> = {
425
- readonly codecId: ResolveTemplateValue<Descriptor['output']['codecId'], Args$1>;
426
- readonly nativeType: ResolveTemplateValue<Descriptor['output']['nativeType'], Args$1>;
427
- } & (Descriptor['output'] extends {
428
- readonly typeParams: infer TypeParams extends Record<string, unknown>;
429
- } ? {
430
- readonly typeParams: ResolveTemplateValue<TypeParams, Args$1>;
431
- } : Record<never, never>);
432
- type TypeHelperFunction<Descriptor extends AuthoringTypeConstructorDescriptor> = Descriptor extends {
433
- readonly args: infer Args extends readonly AuthoringArgumentDescriptor[];
434
- } ? <const Params extends TupleFromArgumentDescriptors<Args>>(...args: Params) => StorageTypeFromDescriptor<Descriptor, Params> : () => StorageTypeFromDescriptor<Descriptor, readonly []>;
435
- type TypeHelpersFromNamespace<Namespace> = { readonly [K in keyof Namespace]: Namespace[K] extends AuthoringTypeConstructorDescriptor ? TypeHelperFunction<Namespace[K]> : Namespace[K] extends Record<string, unknown> ? TypeHelpersFromNamespace<Namespace[K]> : never };
436
- type CoreFieldHelpers = Pick<typeof field, 'column' | 'generated' | 'namedType'>;
437
- type ComposedAuthoringHelpers<Family extends FamilyPackRef<string>, Target extends TargetPackRef<'sql', string>, ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined> = {
438
- readonly field: CoreFieldHelpers & FieldHelpersFromNamespace<ExtractFieldNamespaceFromPack<Family> & ExtractFieldNamespaceFromPack<Target> & MergeExtensionFieldNamespaces<ExtensionPacks>>;
439
- readonly model: typeof model;
440
- readonly rel: typeof rel;
441
- readonly type: TypeHelpersFromNamespace<ExtractTypeNamespaceFromPack<Family> & ExtractTypeNamespaceFromPack<Target> & MergeExtensionTypeNamespaces<ExtensionPacks>>;
442
- };
443
- //#endregion
444
424
  //#region src/contract-types.d.ts
445
425
  type ExtractCodecTypesFromPack<P> = P extends {
446
426
  __codecTypes?: infer C;
@@ -449,6 +429,13 @@ type ExtractCodecTypesFromPack<P> = P extends {
449
429
  }> ? C : Record<string, never> : Record<string, never>;
450
430
  type MergeExtensionCodecTypes<Packs extends Record<string, unknown>> = UnionToIntersection<{ [K in keyof Packs]: ExtractCodecTypesFromPack<Packs[K]> }[keyof Packs]>;
451
431
  type MergeExtensionCodecTypesSafe<Packs> = Packs extends Record<string, unknown> ? keyof Packs extends never ? Record<string, never> : MergeExtensionCodecTypes<Packs> : Record<string, never>;
432
+ type ExtractIndexTypesFromPack<P> = P extends {
433
+ readonly indexTypes: IndexTypeRegistration<infer M>;
434
+ } ? M : Record<never, never>;
435
+ type AllIndexTypeLiterals<Packs> = Packs extends Record<string, unknown> ? { [K in keyof Packs]: keyof ExtractIndexTypesFromPack<Packs[K]> }[keyof Packs] & string : never;
436
+ type MergeExtensionIndexTypes<Packs extends Record<string, unknown>> = { readonly [Lit in AllIndexTypeLiterals<Packs>]: Extract<{ [K in keyof Packs]: Lit extends keyof ExtractIndexTypesFromPack<Packs[K]> ? ExtractIndexTypesFromPack<Packs[K]>[Lit] : never }[keyof Packs], {
437
+ readonly options: unknown;
438
+ }> };
452
439
  type DefinitionExtensionPacks<Definition> = Definition extends {
453
440
  readonly extensionPacks?: infer Packs extends Record<string, ExtensionPackRef<'sql', string>>;
454
441
  } ? Packs : Record<never, never>;
@@ -480,28 +467,28 @@ type DefinitionColumnNaming<Definition> = Definition extends {
480
467
  } ? Strategy : undefined;
481
468
  type FirstChar<S extends string> = S extends `${infer First}${string}` ? First : '';
482
469
  type CharKind<C extends string> = C extends '' ? 'end' : C extends Lowercase<C> ? C extends Uppercase<C> ? 'other' : 'lower' : 'upper';
483
- type ShouldInsertSnakeUnderscore<PrevKind extends 'start' | 'lower' | 'upper' | 'other' | 'end', Current$1 extends string, Next extends string> = CharKind<Current$1> extends 'upper' ? PrevKind extends 'start' ? false : PrevKind extends 'lower' | 'other' ? true : CharKind<Next> extends 'lower' ? true : false : false;
470
+ type ShouldInsertSnakeUnderscore<PrevKind extends 'start' | 'lower' | 'upper' | 'other' | 'end', Current extends string, Next extends string> = CharKind<Current> extends 'upper' ? PrevKind extends 'start' ? false : PrevKind extends 'lower' | 'other' ? true : CharKind<Next> extends 'lower' ? true : false : false;
484
471
  type SnakeCaseInternal<S extends string, PrevKind extends 'start' | 'lower' | 'upper' | 'other' | 'end' = 'start'> = S extends `${infer Current}${infer Rest}` ? `${ShouldInsertSnakeUnderscore<PrevKind, Current, FirstChar<Rest>> extends true ? '_' : ''}${Lowercase<Current>}${SnakeCaseInternal<Rest, CharKind<Current>>}` : '';
485
472
  type SnakeCase<S extends string> = string extends S ? string : SnakeCaseInternal<S>;
486
- type ApplyNamingType<Name$1 extends string, Strategy extends string | undefined> = string extends Name$1 ? string : Strategy extends 'snake_case' ? SnakeCase<Name$1> : Name$1;
473
+ type ApplyNamingType<Name extends string, Strategy extends string | undefined> = string extends Name ? string : Strategy extends 'snake_case' ? SnakeCase<Name> : Name;
487
474
  type ModelNames<Definition> = keyof DefinitionModels<Definition> & string;
488
- type ModelFields<Definition, ModelName$1 extends ModelNames<Definition>> = DefinitionModels<Definition>[ModelName$1] extends {
475
+ type ModelFields<Definition, ModelName extends ModelNames<Definition>> = DefinitionModels<Definition>[ModelName] extends {
489
476
  readonly stageOne: {
490
477
  readonly fields: Record<string, ScalarFieldBuilder>;
491
478
  };
492
- } ? DefinitionModels<Definition>[ModelName$1]['stageOne']['fields'] : Record<never, never>;
493
- type ModelFieldNames<Definition, ModelName$1 extends ModelNames<Definition>> = keyof ModelFields<Definition, ModelName$1> & string;
494
- type StagedModelRelations<Definition, ModelName$1 extends ModelNames<Definition>> = DefinitionModels<Definition>[ModelName$1] extends {
479
+ } ? DefinitionModels<Definition>[ModelName]['stageOne']['fields'] : Record<never, never>;
480
+ type ModelFieldNames<Definition, ModelName extends ModelNames<Definition>> = keyof ModelFields<Definition, ModelName> & string;
481
+ type StagedModelRelations<Definition, ModelName extends ModelNames<Definition>> = DefinitionModels<Definition>[ModelName] extends {
495
482
  readonly stageOne: {
496
483
  readonly relations: infer R;
497
484
  };
498
485
  } ? R extends Record<string, unknown> ? R : Record<never, never> : Record<never, never>;
499
- type StagedModelRelationNames<Definition, ModelName$1 extends ModelNames<Definition>> = keyof StagedModelRelations<Definition, ModelName$1> & string;
500
- type ModelFieldState<Definition, ModelName$1 extends ModelNames<Definition>, FieldName$1 extends ModelFieldNames<Definition, ModelName$1>> = FieldStateOf<ModelFields<Definition, ModelName$1>[FieldName$1]>;
501
- type ModelSql<Definition, ModelName$1 extends ModelNames<Definition>> = DefinitionModels<Definition>[ModelName$1] extends {
486
+ type StagedModelRelationNames<Definition, ModelName extends ModelNames<Definition>> = keyof StagedModelRelations<Definition, ModelName> & string;
487
+ type ModelFieldState<Definition, ModelName extends ModelNames<Definition>, FieldName extends ModelFieldNames<Definition, ModelName>> = FieldStateOf<ModelFields<Definition, ModelName>[FieldName]>;
488
+ type ModelSql<Definition, ModelName extends ModelNames<Definition>> = DefinitionModels<Definition>[ModelName] extends {
502
489
  readonly __sql: infer SqlSpec;
503
490
  } ? SqlSpec : undefined;
504
- type ModelAttributes<Definition, ModelName$1 extends ModelNames<Definition>> = DefinitionModels<Definition>[ModelName$1] extends {
491
+ type ModelAttributes<Definition, ModelName extends ModelNames<Definition>> = DefinitionModels<Definition>[ModelName] extends {
505
492
  readonly __attributes: infer AttributesSpec;
506
493
  } ? AttributesSpec : undefined;
507
494
  type FieldDescriptorOf<FieldState> = Present<FieldState extends {
@@ -531,43 +518,43 @@ type DescriptorTypeParams<Descriptor> = Descriptor extends {
531
518
  type DescriptorTypeRef<Descriptor> = Descriptor extends {
532
519
  readonly typeRef: infer TypeRef extends string;
533
520
  } ? TypeRef : undefined;
534
- type LookupNamedStorageTypeKeyByValue<Definition, TypeRef$1 extends StorageTypeInstance> = { [TypeName in keyof DefinitionTypes<Definition> & string]: [TypeRef$1] extends [DefinitionTypes<Definition>[TypeName]] ? [DefinitionTypes<Definition>[TypeName]] extends [TypeRef$1] ? TypeName : never : never }[keyof DefinitionTypes<Definition> & string];
535
- type ResolveNamedStorageTypeKey<Definition, TypeRef$1> = TypeRef$1 extends string ? TypeRef$1 : TypeRef$1 extends StorageTypeInstance ? [LookupNamedStorageTypeKeyByValue<Definition, TypeRef$1>] extends [never] ? string : LookupNamedStorageTypeKeyByValue<Definition, TypeRef$1> : never;
536
- type ResolveNamedStorageType<Definition, TypeRef$1> = ResolveNamedStorageTypeKey<Definition, TypeRef$1> extends infer TypeName extends string ? TypeName extends keyof DefinitionTypes<Definition> ? DefinitionTypes<Definition>[TypeName] : StorageTypeInstance : StorageTypeInstance;
521
+ type LookupNamedStorageTypeKeyByValue<Definition, TypeRef extends StorageTypeInstance> = { [TypeName in keyof DefinitionTypes<Definition> & string]: [TypeRef] extends [DefinitionTypes<Definition>[TypeName]] ? [DefinitionTypes<Definition>[TypeName]] extends [TypeRef] ? TypeName : never : never }[keyof DefinitionTypes<Definition> & string];
522
+ type ResolveNamedStorageTypeKey<Definition, TypeRef> = TypeRef extends string ? TypeRef : TypeRef extends StorageTypeInstance ? [LookupNamedStorageTypeKeyByValue<Definition, TypeRef>] extends [never] ? string : LookupNamedStorageTypeKeyByValue<Definition, TypeRef> : never;
523
+ type ResolveNamedStorageType<Definition, TypeRef> = ResolveNamedStorageTypeKey<Definition, TypeRef> extends infer TypeName extends string ? TypeName extends keyof DefinitionTypes<Definition> ? DefinitionTypes<Definition>[TypeName] : StorageTypeInstance : StorageTypeInstance;
537
524
  type ResolveFieldDescriptor<Definition, FieldState> = [FieldDescriptorOf<FieldState>] extends [never] ? ResolveNamedStorageType<Definition, FieldTypeRefOf<FieldState>> : FieldDescriptorOf<FieldState>;
538
525
  type ResolveFieldColumnTypeRef<Definition, FieldState> = [FieldTypeRefOf<FieldState>] extends [never] ? DescriptorTypeRef<FieldDescriptorOf<FieldState>> : ResolveNamedStorageTypeKey<Definition, FieldTypeRefOf<FieldState>>;
539
526
  type ResolveFieldColumnTypeParams<Definition, FieldState> = [ResolveFieldColumnTypeRef<Definition, FieldState>] extends [string] ? undefined : DescriptorTypeParams<FieldDescriptorOf<FieldState>>;
540
- type ModelTableName<Definition, ModelName$1 extends ModelNames<Definition>> = [Present<ModelSql<Definition, ModelName$1> extends {
527
+ type ModelTableName<Definition, ModelName extends ModelNames<Definition>> = [Present<ModelSql<Definition, ModelName> extends {
541
528
  readonly table?: infer TableName;
542
- } ? TableName : never>] extends [never] ? ApplyNamingType<ModelName$1, DefinitionTableNaming<Definition>> : Present<ModelSql<Definition, ModelName$1> extends {
529
+ } ? TableName : never>] extends [never] ? ApplyNamingType<ModelName, DefinitionTableNaming<Definition>> : Present<ModelSql<Definition, ModelName> extends {
543
530
  readonly table?: infer TableName;
544
- } ? TableName : never> extends infer ExplicitTableName extends string ? ExplicitTableName : ApplyNamingType<ModelName$1, DefinitionTableNaming<Definition>>;
545
- type ModelColumnName<Definition, ModelName$1 extends ModelNames<Definition>, FieldName$1 extends ModelFieldNames<Definition, ModelName$1>> = [FieldColumnOverrideOf<ModelFieldState<Definition, ModelName$1, FieldName$1>>] extends [never] ? ApplyNamingType<FieldName$1, DefinitionColumnNaming<Definition>> : FieldColumnOverrideOf<ModelFieldState<Definition, ModelName$1, FieldName$1>> extends infer ExplicitColumnName extends string ? ExplicitColumnName : ApplyNamingType<FieldName$1, DefinitionColumnNaming<Definition>>;
546
- type FieldNamesToColumnNames<Definition, ModelName$1 extends ModelNames<Definition>, FieldNames extends readonly string[]> = FieldNames extends readonly [] ? readonly [] : FieldNames extends readonly [infer First extends ModelFieldNames<Definition, ModelName$1>, ...infer Rest extends readonly string[]] ? readonly [ModelColumnName<Definition, ModelName$1, First>, ...FieldNamesToColumnNames<Definition, ModelName$1, Rest>] : readonly string[];
547
- type InlineIdFieldName<Definition, ModelName$1 extends ModelNames<Definition>> = { [FieldName in ModelFieldNames<Definition, ModelName$1>]: [FieldInlineIdSpecOf<ModelFieldState<Definition, ModelName$1, FieldName>>] extends [never] ? never : FieldName }[ModelFieldNames<Definition, ModelName$1>];
548
- type InlineIdFieldNames<Definition, ModelName$1 extends ModelNames<Definition>> = [InlineIdFieldName<Definition, ModelName$1>] extends [never] ? undefined : readonly [InlineIdFieldName<Definition, ModelName$1>];
549
- type InlineIdName<Definition, ModelName$1 extends ModelNames<Definition>> = { [FieldName in ModelFieldNames<Definition, ModelName$1>]: FieldInlineIdSpecOf<ModelFieldState<Definition, ModelName$1, FieldName>> extends {
531
+ } ? TableName : never> extends infer ExplicitTableName extends string ? ExplicitTableName : ApplyNamingType<ModelName, DefinitionTableNaming<Definition>>;
532
+ type ModelColumnName<Definition, ModelName extends ModelNames<Definition>, FieldName extends ModelFieldNames<Definition, ModelName>> = [FieldColumnOverrideOf<ModelFieldState<Definition, ModelName, FieldName>>] extends [never] ? ApplyNamingType<FieldName, DefinitionColumnNaming<Definition>> : FieldColumnOverrideOf<ModelFieldState<Definition, ModelName, FieldName>> extends infer ExplicitColumnName extends string ? ExplicitColumnName : ApplyNamingType<FieldName, DefinitionColumnNaming<Definition>>;
533
+ type FieldNamesToColumnNames<Definition, ModelName extends ModelNames<Definition>, FieldNames extends readonly string[]> = FieldNames extends readonly [] ? readonly [] : FieldNames extends readonly [infer First extends ModelFieldNames<Definition, ModelName>, ...infer Rest extends readonly string[]] ? readonly [ModelColumnName<Definition, ModelName, First>, ...FieldNamesToColumnNames<Definition, ModelName, Rest>] : readonly string[];
534
+ type InlineIdFieldName<Definition, ModelName extends ModelNames<Definition>> = { [FieldName in ModelFieldNames<Definition, ModelName>]: [FieldInlineIdSpecOf<ModelFieldState<Definition, ModelName, FieldName>>] extends [never] ? never : FieldName }[ModelFieldNames<Definition, ModelName>];
535
+ type InlineIdFieldNames<Definition, ModelName extends ModelNames<Definition>> = [InlineIdFieldName<Definition, ModelName>] extends [never] ? undefined : readonly [InlineIdFieldName<Definition, ModelName>];
536
+ type InlineIdName<Definition, ModelName extends ModelNames<Definition>> = { [FieldName in ModelFieldNames<Definition, ModelName>]: FieldInlineIdSpecOf<ModelFieldState<Definition, ModelName, FieldName>> extends {
550
537
  readonly name?: infer Name extends string;
551
- } ? Name : never }[ModelFieldNames<Definition, ModelName$1>];
552
- type AttributeIdFieldNames<Definition, ModelName$1 extends ModelNames<Definition>> = AttributeStageIdFieldNames<ModelAttributes<Definition, ModelName$1>>;
553
- type AttributeIdName<Definition, ModelName$1 extends ModelNames<Definition>> = Present<ModelAttributes<Definition, ModelName$1> extends {
538
+ } ? Name : never }[ModelFieldNames<Definition, ModelName>];
539
+ type AttributeIdFieldNames<Definition, ModelName extends ModelNames<Definition>> = AttributeStageIdFieldNames<ModelAttributes<Definition, ModelName>>;
540
+ type AttributeIdName<Definition, ModelName extends ModelNames<Definition>> = Present<ModelAttributes<Definition, ModelName> extends {
554
541
  readonly id?: {
555
542
  readonly name?: infer Name extends string;
556
543
  };
557
544
  } ? Name : never>;
558
- type ModelIdFieldNames<Definition, ModelName$1 extends ModelNames<Definition>> = [AttributeIdFieldNames<Definition, ModelName$1>] extends [undefined] ? InlineIdFieldNames<Definition, ModelName$1> : AttributeIdFieldNames<Definition, ModelName$1>;
559
- type ModelIdName<Definition, ModelName$1 extends ModelNames<Definition>> = [AttributeIdName<Definition, ModelName$1>] extends [never] ? Present<InlineIdName<Definition, ModelName$1>> : AttributeIdName<Definition, ModelName$1>;
560
- type StorageColumn<CodecId$1 extends string, Nullable$1 extends boolean, NativeType extends string, TypeRef$1 extends string | undefined = undefined, TypeParams$1 extends Record<string, unknown> | undefined = undefined> = {
545
+ type ModelIdFieldNames<Definition, ModelName extends ModelNames<Definition>> = [AttributeIdFieldNames<Definition, ModelName>] extends [undefined] ? InlineIdFieldNames<Definition, ModelName> : AttributeIdFieldNames<Definition, ModelName>;
546
+ type ModelIdName<Definition, ModelName extends ModelNames<Definition>> = [AttributeIdName<Definition, ModelName>] extends [never] ? Present<InlineIdName<Definition, ModelName>> : AttributeIdName<Definition, ModelName>;
547
+ type StorageColumn<CodecId extends string, Nullable extends boolean, NativeType extends string, TypeRef extends string | undefined = undefined, TypeParams extends Record<string, unknown> | undefined = undefined> = {
561
548
  readonly nativeType: NativeType;
562
- readonly codecId: CodecId$1;
563
- readonly nullable: Nullable$1;
549
+ readonly codecId: CodecId;
550
+ readonly nullable: Nullable;
564
551
  readonly default?: ColumnDefault;
565
- } & (TypeRef$1 extends string ? {
566
- readonly typeRef: TypeRef$1;
567
- } : Record<string, never>) & (TypeParams$1 extends Record<string, unknown> ? {
568
- readonly typeParams: TypeParams$1;
552
+ } & (TypeRef extends string ? {
553
+ readonly typeRef: TypeRef;
554
+ } : Record<string, never>) & (TypeParams extends Record<string, unknown> ? {
555
+ readonly typeParams: TypeParams;
569
556
  } : Record<string, never>);
570
- type ModelStorageColumn<Definition, ModelName$1 extends ModelNames<Definition>, FieldName$1 extends string> = FieldName$1 extends ModelFieldNames<Definition, ModelName$1> ? StorageColumn<DescriptorCodecId<ResolveFieldDescriptor<Definition, ModelFieldState<Definition, ModelName$1, FieldName$1>>>, FieldNullableOf<ModelFieldState<Definition, ModelName$1, FieldName$1>>, DescriptorNativeType<ResolveFieldDescriptor<Definition, ModelFieldState<Definition, ModelName$1, FieldName$1>>>, ResolveFieldColumnTypeRef<Definition, ModelFieldState<Definition, ModelName$1, FieldName$1>>, ResolveFieldColumnTypeParams<Definition, ModelFieldState<Definition, ModelName$1, FieldName$1>>> : never;
557
+ type ModelStorageColumn<Definition, ModelName extends ModelNames<Definition>, FieldName extends string> = FieldName extends ModelFieldNames<Definition, ModelName> ? StorageColumn<DescriptorCodecId<ResolveFieldDescriptor<Definition, ModelFieldState<Definition, ModelName, FieldName>>>, FieldNullableOf<ModelFieldState<Definition, ModelName, FieldName>>, DescriptorNativeType<ResolveFieldDescriptor<Definition, ModelFieldState<Definition, ModelName, FieldName>>>, ResolveFieldColumnTypeRef<Definition, ModelFieldState<Definition, ModelName, FieldName>>, ResolveFieldColumnTypeParams<Definition, ModelFieldState<Definition, ModelName, FieldName>>> : never;
571
558
  type BuiltModels<Definition> = { readonly [ModelName in ModelNames<Definition>]: {
572
559
  readonly storage: {
573
560
  readonly table: ModelTableName<Definition, ModelName>;
@@ -584,9 +571,9 @@ type BuiltModels<Definition> = { readonly [ModelName in ModelNames<Definition>]:
584
571
  } };
585
572
  readonly relations: { readonly [RelName in StagedModelRelationNames<Definition, ModelName>]: ContractRelation };
586
573
  } };
587
- type BuiltModelColumnMappings<Definition, ModelName$1 extends ModelNames<Definition>> = BuiltModels<Definition>[ModelName$1]['storage']['fields'];
588
- type BuiltModelTableName<Definition, ModelName$1 extends ModelNames<Definition>> = BuiltModels<Definition>[ModelName$1]['storage']['table'];
589
- type BuiltStorageTableColumns<Definition, ModelName$1 extends ModelNames<Definition>> = { readonly [FieldName in keyof BuiltModelColumnMappings<Definition, ModelName$1> & string as BuiltModelColumnMappings<Definition, ModelName$1>[FieldName]['column']]: ModelStorageColumn<Definition, ModelName$1, FieldName> };
574
+ type BuiltModelColumnMappings<Definition, ModelName extends ModelNames<Definition>> = BuiltModels<Definition>[ModelName]['storage']['fields'];
575
+ type BuiltModelTableName<Definition, ModelName extends ModelNames<Definition>> = BuiltModels<Definition>[ModelName]['storage']['table'];
576
+ type BuiltStorageTableColumns<Definition, ModelName extends ModelNames<Definition>> = { readonly [FieldName in keyof BuiltModelColumnMappings<Definition, ModelName> & string as BuiltModelColumnMappings<Definition, ModelName>[FieldName]['column']]: ModelStorageColumn<Definition, ModelName, FieldName> };
590
577
  type BuiltStorageTables<Definition> = { readonly [ModelName in ModelNames<Definition> as BuiltModelTableName<Definition, ModelName>]: {
591
578
  readonly columns: BuiltStorageTableColumns<Definition, ModelName>;
592
579
  readonly uniques: ReadonlyArray<{
@@ -617,7 +604,7 @@ type BuiltStorage<Definition> = {
617
604
  readonly tables: BuiltStorageTables<Definition>;
618
605
  readonly types: DefinitionTypes<Definition>;
619
606
  };
620
- type FieldOutputType<Definition, ModelName$1 extends ModelNames<Definition>, FieldName$1 extends ModelFieldNames<Definition, ModelName$1>> = ModelStorageColumn<Definition, ModelName$1, FieldName$1> extends infer Col ? Col extends {
607
+ type FieldOutputType<Definition, ModelName extends ModelNames<Definition>, FieldName extends ModelFieldNames<Definition, ModelName>> = ModelStorageColumn<Definition, ModelName, FieldName> extends infer Col ? Col extends {
621
608
  readonly codecId: infer Id extends string;
622
609
  } ? Id extends keyof CodecTypesFromDefinition<Definition> ? CodecTypesFromDefinition<Definition>[Id] extends {
623
610
  readonly output: infer O;
@@ -633,6 +620,53 @@ type SqlContractResult<Definition> = ContractWithTypeMaps<Contract<BuiltStorage<
633
620
  readonly capabilities: DefinitionCapabilities<Definition> extends Record<string, Record<string, boolean>> ? DefinitionCapabilities<Definition> : Record<string, Record<string, boolean>>;
634
621
  }, TypeMaps<CodecTypesFromDefinition<Definition>, Record<string, never>, Record<string, never>, FieldOutputTypes<Definition>>>;
635
622
  //#endregion
623
+ //#region src/composed-authoring-helpers.d.ts
624
+ type ExtractTypeNamespaceFromPack<Pack> = Pack extends {
625
+ readonly authoring?: {
626
+ readonly type?: infer Namespace extends AuthoringTypeNamespace;
627
+ };
628
+ } ? Namespace : Record<never, never>;
629
+ type ExtractFieldNamespaceFromPack<Pack> = Pack extends {
630
+ readonly authoring?: {
631
+ readonly field?: infer Namespace extends AuthoringFieldNamespace;
632
+ };
633
+ } ? Namespace : Record<never, never>;
634
+ type MergeExtensionTypeNamespaces<ExtensionPacks> = ExtensionPacks extends Record<string, unknown> ? keyof ExtensionPacks extends never ? Record<never, never> : UnionToIntersection<{ [K in keyof ExtensionPacks]: ExtractTypeNamespaceFromPack<ExtensionPacks[K]> }[keyof ExtensionPacks]> : Record<never, never>;
635
+ type MergeExtensionFieldNamespaces<ExtensionPacks> = ExtensionPacks extends Record<string, unknown> ? keyof ExtensionPacks extends never ? Record<never, never> : UnionToIntersection<{ [K in keyof ExtensionPacks]: ExtractFieldNamespaceFromPack<ExtensionPacks[K]> }[keyof ExtensionPacks]> : Record<never, never>;
636
+ type StorageTypeFromDescriptor<Descriptor extends AuthoringTypeConstructorDescriptor, Args extends readonly unknown[]> = {
637
+ readonly codecId: ResolveTemplateValue<Descriptor['output']['codecId'], Args>;
638
+ readonly nativeType: ResolveTemplateValue<Descriptor['output']['nativeType'], Args>;
639
+ } & (Descriptor['output'] extends {
640
+ readonly typeParams: infer TypeParams extends Record<string, unknown>;
641
+ } ? {
642
+ readonly typeParams: ResolveTemplateValue<TypeParams, Args>;
643
+ } : Record<never, never>);
644
+ type TypeHelperFunction<Descriptor extends AuthoringTypeConstructorDescriptor> = Descriptor extends {
645
+ readonly args: infer Args extends readonly AuthoringArgumentDescriptor[];
646
+ } ? <const Params extends TupleFromArgumentDescriptors<Args>>(...args: Params) => StorageTypeFromDescriptor<Descriptor, Params> : () => StorageTypeFromDescriptor<Descriptor, readonly []>;
647
+ type TypeHelpersFromNamespace<Namespace> = { readonly [K in keyof Namespace]: Namespace[K] extends AuthoringTypeConstructorDescriptor ? TypeHelperFunction<Namespace[K]> : Namespace[K] extends Record<string, unknown> ? TypeHelpersFromNamespace<Namespace[K]> : never };
648
+ type CoreFieldHelpers = Pick<typeof field, 'column' | 'generated' | 'namedType'>;
649
+ type MergeAllPackIndexTypes<Family, Target, ExtensionPacks> = MergeExtensionIndexTypes<{
650
+ readonly __family: Family;
651
+ readonly __target: Target;
652
+ } & (ExtensionPacks extends Record<string, unknown> ? ExtensionPacks : Record<never, never>)>;
653
+ type PackAwareModel<IndexTypes extends IndexTypeMap> = {
654
+ <const ModelName extends string, Fields extends Record<string, ScalarFieldBuilder>, Relations extends Record<string, AnyRelationBuilder> = Record<never, never>>(modelName: ModelName, input: {
655
+ readonly fields: Fields;
656
+ readonly relations?: Relations;
657
+ }): ContractModelBuilder<ModelName, Fields, Relations, undefined, undefined, IndexTypes>;
658
+ <Fields extends Record<string, ScalarFieldBuilder>, Relations extends Record<string, AnyRelationBuilder> = Record<never, never>>(input: {
659
+ readonly fields: Fields;
660
+ readonly relations?: Relations;
661
+ }): ContractModelBuilder<undefined, Fields, Relations, undefined, undefined, IndexTypes>;
662
+ };
663
+ type ComposedAuthoringHelpers<Family extends FamilyPackRef<string>, Target extends TargetPackRef<'sql', string>, ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined> = {
664
+ readonly field: CoreFieldHelpers & FieldHelpersFromNamespace<ExtractFieldNamespaceFromPack<Family> & ExtractFieldNamespaceFromPack<Target> & MergeExtensionFieldNamespaces<ExtensionPacks>>;
665
+ readonly model: PackAwareModel<MergeAllPackIndexTypes<Family, Target, ExtensionPacks>>;
666
+ readonly rel: typeof rel;
667
+ readonly type: TypeHelpersFromNamespace<ExtractTypeNamespaceFromPack<Family> & ExtractTypeNamespaceFromPack<Target> & MergeExtensionTypeNamespaces<ExtensionPacks>>;
668
+ };
669
+ //#endregion
636
670
  //#region src/contract-definition.d.ts
637
671
  interface FieldNode {
638
672
  readonly fieldName: string;
@@ -640,7 +674,7 @@ interface FieldNode {
640
674
  readonly descriptor: ColumnTypeDescriptor;
641
675
  readonly nullable: boolean;
642
676
  readonly default?: ColumnDefault;
643
- readonly executionDefault?: ExecutionMutationDefaultValue;
677
+ readonly executionDefaults?: ExecutionMutationDefaultPhases$1;
644
678
  readonly many?: boolean;
645
679
  }
646
680
  interface PrimaryKeyNode {
@@ -654,8 +688,8 @@ interface UniqueConstraintNode {
654
688
  interface IndexNode {
655
689
  readonly columns: readonly string[];
656
690
  readonly name?: string;
657
- readonly using?: string;
658
- readonly config?: Record<string, unknown>;
691
+ readonly type?: string;
692
+ readonly options?: Record<string, unknown>;
659
693
  }
660
694
  interface ForeignKeyNode {
661
695
  readonly columns: readonly string[];
@@ -693,7 +727,7 @@ interface ValueObjectFieldNode {
693
727
  readonly valueObjectName: string;
694
728
  readonly nullable: boolean;
695
729
  readonly default?: ColumnDefault;
696
- readonly executionDefault?: ExecutionMutationDefaultValue;
730
+ readonly executionDefaults?: ExecutionMutationDefaultPhases$1;
697
731
  readonly many?: boolean;
698
732
  }
699
733
  interface ValueObjectNode {