cogsbox-shape 0.5.108 → 0.5.110
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/schema.d.ts +90 -546
- package/dist/schema.js +160 -83
- package/package.json +1 -1
package/dist/schema.d.ts
CHANGED
|
@@ -110,6 +110,10 @@ export type Builder<TStage extends Stage, T extends SQLType | RelationConfig<any
|
|
|
110
110
|
zodValidationSchema: TValidation;
|
|
111
111
|
};
|
|
112
112
|
} & Pick<IBuilderMethods<T, TSql, TNew, TInitialValue, TClient, TValidation>, StageMethods[TStage]>;
|
|
113
|
+
type HasManyDefault = true | undefined | [] | {
|
|
114
|
+
count: number;
|
|
115
|
+
};
|
|
116
|
+
type HasOneDefault = true | undefined | null;
|
|
113
117
|
export type Reference<TGetter extends () => any> = {
|
|
114
118
|
__type: "reference";
|
|
115
119
|
getter: TGetter;
|
|
@@ -117,12 +121,11 @@ export type Reference<TGetter extends () => any> = {
|
|
|
117
121
|
interface ShapeAPI {
|
|
118
122
|
sql: <T extends SQLType>(sqlConfig: T) => Builder<"sql", T, SQLToZodType<T, false>, SQLToZodType<T, false>, z.infer<SQLToZodType<T, false>>, SQLToZodType<T, false>, SQLToZodType<T, false>>;
|
|
119
123
|
reference: <TGetter extends () => any>(getter: TGetter) => Reference<TGetter>;
|
|
120
|
-
hasMany: (config?:
|
|
121
|
-
|
|
122
|
-
}) => PlaceholderRelation<"hasMany">;
|
|
123
|
-
hasOne: () => PlaceholderRelation<"hasOne">;
|
|
124
|
+
hasMany: <T extends HasManyDefault>(config?: T) => PlaceholderRelation<"hasMany">;
|
|
125
|
+
hasOne: (config?: HasOneDefault) => PlaceholderRelation<"hasOne">;
|
|
124
126
|
manyToMany: (config?: {
|
|
125
127
|
defaultCount?: number;
|
|
128
|
+
defaultConfig?: HasManyDefault;
|
|
126
129
|
}) => PlaceholderRelation<"manyToMany">;
|
|
127
130
|
}
|
|
128
131
|
export declare const s: ShapeAPI;
|
|
@@ -187,6 +190,7 @@ export type PlaceholderRelation<T extends RelationType> = {
|
|
|
187
190
|
__type: "placeholder-relation";
|
|
188
191
|
relationType: T;
|
|
189
192
|
defaultCount?: number;
|
|
193
|
+
defaultConfig?: HasManyDefault | HasOneDefault;
|
|
190
194
|
};
|
|
191
195
|
type SchemaWithPlaceholders = {
|
|
192
196
|
_tableName: string;
|
|
@@ -195,11 +199,6 @@ type SchemaWithPlaceholders = {
|
|
|
195
199
|
type KnownKeys<T> = keyof {
|
|
196
200
|
[K in keyof T as string extends K ? never : K]: T[K];
|
|
197
201
|
};
|
|
198
|
-
/**
|
|
199
|
-
* This is the new, core type. It is NOT a validator. It is a strict TEMPLATE
|
|
200
|
-
* that defines the exact shape the resolver's return object must have.
|
|
201
|
-
* It provides the structure for autocompletion and error checking.
|
|
202
|
-
*/
|
|
203
202
|
type ResolutionMap<S extends Record<string, SchemaWithPlaceholders>> = {
|
|
204
203
|
[TableName in keyof S]?: {
|
|
205
204
|
[FieldName in keyof S[TableName] as S[TableName][FieldName] extends PlaceholderReference | PlaceholderRelation<any> ? FieldName : never]?: S[TableName][FieldName] extends PlaceholderRelation<any> ? {
|
|
@@ -252,508 +251,85 @@ type ResolvedRegistryWithSchemas<S extends Record<string, SchemaWithPlaceholders
|
|
|
252
251
|
};
|
|
253
252
|
};
|
|
254
253
|
};
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
config: {
|
|
261
|
-
sql: {
|
|
262
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
263
|
-
schema: () => any;
|
|
264
|
-
};
|
|
265
|
-
};
|
|
266
|
-
} ? true : false : never : never) extends true ? K : never]: (ResolvedRegistryWithSchemas<S, R>[T]["rawSchema"][K] extends infer T_2 ? T_2 extends ResolvedRegistryWithSchemas<S, R>[T]["rawSchema"][K] ? T_2 extends {
|
|
267
|
-
config: {
|
|
268
|
-
sql: {
|
|
269
|
-
schema: () => infer TargetSchema;
|
|
270
|
-
};
|
|
271
|
-
};
|
|
272
|
-
} ? TargetSchema extends {
|
|
273
|
-
_tableName: infer TableName;
|
|
274
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_3 ? T_3 extends TargetTable & string ? T_3 extends keyof S ? { [K_1 in keyof ResolvedRegistryWithSchemas<S, R>[T_3]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_3]["rawSchema"][K_1] extends infer T_4 ? T_4 extends ResolvedRegistryWithSchemas<S, R>[T_3]["rawSchema"][K_1] ? T_4 extends {
|
|
275
|
-
config: {
|
|
276
|
-
sql: {
|
|
277
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
278
|
-
schema: () => any;
|
|
279
|
-
};
|
|
280
|
-
};
|
|
281
|
-
} ? true : false : never : never) extends true ? K_1 : never]: (ResolvedRegistryWithSchemas<S, R>[T_3]["rawSchema"][K_1] extends infer T_5 ? T_5 extends ResolvedRegistryWithSchemas<S, R>[T_3]["rawSchema"][K_1] ? T_5 extends {
|
|
282
|
-
config: {
|
|
283
|
-
sql: {
|
|
284
|
-
schema: () => infer TargetSchema;
|
|
285
|
-
};
|
|
286
|
-
};
|
|
287
|
-
} ? TargetSchema extends {
|
|
288
|
-
_tableName: infer TableName;
|
|
289
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_6 ? T_6 extends TargetTable & string ? T_6 extends keyof S ? { [K_2 in keyof ResolvedRegistryWithSchemas<S, R>[T_6]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_6]["rawSchema"][K_2] extends infer T_7 ? T_7 extends ResolvedRegistryWithSchemas<S, R>[T_6]["rawSchema"][K_2] ? T_7 extends {
|
|
290
|
-
config: {
|
|
291
|
-
sql: {
|
|
292
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
293
|
-
schema: () => any;
|
|
294
|
-
};
|
|
295
|
-
};
|
|
296
|
-
} ? true : false : never : never) extends true ? K_2 : never]: (ResolvedRegistryWithSchemas<S, R>[T_6]["rawSchema"][K_2] extends infer T_8 ? T_8 extends ResolvedRegistryWithSchemas<S, R>[T_6]["rawSchema"][K_2] ? T_8 extends {
|
|
297
|
-
config: {
|
|
298
|
-
sql: {
|
|
299
|
-
schema: () => infer TargetSchema;
|
|
300
|
-
};
|
|
301
|
-
};
|
|
302
|
-
} ? TargetSchema extends {
|
|
303
|
-
_tableName: infer TableName;
|
|
304
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_9 ? T_9 extends TargetTable & string ? T_9 extends keyof S ? { [K_3 in keyof ResolvedRegistryWithSchemas<S, R>[T_9]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_9]["rawSchema"][K_3] extends infer T_10 ? T_10 extends ResolvedRegistryWithSchemas<S, R>[T_9]["rawSchema"][K_3] ? T_10 extends {
|
|
305
|
-
config: {
|
|
306
|
-
sql: {
|
|
307
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
308
|
-
schema: () => any;
|
|
309
|
-
};
|
|
310
|
-
};
|
|
311
|
-
} ? true : false : never : never) extends true ? K_3 : never]: (ResolvedRegistryWithSchemas<S, R>[T_9]["rawSchema"][K_3] extends infer T_11 ? T_11 extends ResolvedRegistryWithSchemas<S, R>[T_9]["rawSchema"][K_3] ? T_11 extends {
|
|
312
|
-
config: {
|
|
313
|
-
sql: {
|
|
314
|
-
schema: () => infer TargetSchema;
|
|
315
|
-
};
|
|
316
|
-
};
|
|
317
|
-
} ? TargetSchema extends {
|
|
318
|
-
_tableName: infer TableName;
|
|
319
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_12 ? T_12 extends TargetTable & string ? T_12 extends keyof S ? { [K_4 in keyof ResolvedRegistryWithSchemas<S, R>[T_12]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_12]["rawSchema"][K_4] extends infer T_13 ? T_13 extends ResolvedRegistryWithSchemas<S, R>[T_12]["rawSchema"][K_4] ? T_13 extends {
|
|
320
|
-
config: {
|
|
321
|
-
sql: {
|
|
322
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
323
|
-
schema: () => any;
|
|
324
|
-
};
|
|
325
|
-
};
|
|
326
|
-
} ? true : false : never : never) extends true ? K_4 : never]: (ResolvedRegistryWithSchemas<S, R>[T_12]["rawSchema"][K_4] extends infer T_14 ? T_14 extends ResolvedRegistryWithSchemas<S, R>[T_12]["rawSchema"][K_4] ? T_14 extends {
|
|
327
|
-
config: {
|
|
328
|
-
sql: {
|
|
329
|
-
schema: () => infer TargetSchema;
|
|
330
|
-
};
|
|
331
|
-
};
|
|
332
|
-
} ? TargetSchema extends {
|
|
333
|
-
_tableName: infer TableName;
|
|
334
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_15 ? T_15 extends TargetTable & string ? T_15 extends keyof S ? { [K_5 in keyof ResolvedRegistryWithSchemas<S, R>[T_15]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_15]["rawSchema"][K_5] extends infer T_16 ? T_16 extends ResolvedRegistryWithSchemas<S, R>[T_15]["rawSchema"][K_5] ? T_16 extends {
|
|
335
|
-
config: {
|
|
336
|
-
sql: {
|
|
337
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
338
|
-
schema: () => any;
|
|
339
|
-
};
|
|
340
|
-
};
|
|
341
|
-
} ? true : false : never : never) extends true ? K_5 : never]: (ResolvedRegistryWithSchemas<S, R>[T_15]["rawSchema"][K_5] extends infer T_17 ? T_17 extends ResolvedRegistryWithSchemas<S, R>[T_15]["rawSchema"][K_5] ? T_17 extends {
|
|
342
|
-
config: {
|
|
343
|
-
sql: {
|
|
344
|
-
schema: () => infer TargetSchema;
|
|
345
|
-
};
|
|
346
|
-
};
|
|
347
|
-
} ? TargetSchema extends {
|
|
348
|
-
_tableName: infer TableName;
|
|
349
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_18 ? T_18 extends TargetTable & string ? T_18 extends keyof S ? { [K_6 in keyof ResolvedRegistryWithSchemas<S, R>[T_18]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_18]["rawSchema"][K_6] extends infer T_19 ? T_19 extends ResolvedRegistryWithSchemas<S, R>[T_18]["rawSchema"][K_6] ? T_19 extends {
|
|
350
|
-
config: {
|
|
351
|
-
sql: {
|
|
352
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
353
|
-
schema: () => any;
|
|
354
|
-
};
|
|
355
|
-
};
|
|
356
|
-
} ? true : false : never : never) extends true ? K_6 : never]: (ResolvedRegistryWithSchemas<S, R>[T_18]["rawSchema"][K_6] extends infer T_20 ? T_20 extends ResolvedRegistryWithSchemas<S, R>[T_18]["rawSchema"][K_6] ? T_20 extends {
|
|
357
|
-
config: {
|
|
358
|
-
sql: {
|
|
359
|
-
schema: () => infer TargetSchema;
|
|
360
|
-
};
|
|
361
|
-
};
|
|
362
|
-
} ? TargetSchema extends {
|
|
363
|
-
_tableName: infer TableName;
|
|
364
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_21 ? T_21 extends TargetTable & string ? T_21 extends keyof S ? { [K_7 in keyof ResolvedRegistryWithSchemas<S, R>[T_21]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_21]["rawSchema"][K_7] extends infer T_22 ? T_22 extends ResolvedRegistryWithSchemas<S, R>[T_21]["rawSchema"][K_7] ? T_22 extends {
|
|
365
|
-
config: {
|
|
366
|
-
sql: {
|
|
367
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
368
|
-
schema: () => any;
|
|
369
|
-
};
|
|
370
|
-
};
|
|
371
|
-
} ? true : false : never : never) extends true ? K_7 : never]: (ResolvedRegistryWithSchemas<S, R>[T_21]["rawSchema"][K_7] extends infer T_23 ? T_23 extends ResolvedRegistryWithSchemas<S, R>[T_21]["rawSchema"][K_7] ? T_23 extends {
|
|
372
|
-
config: {
|
|
373
|
-
sql: {
|
|
374
|
-
schema: () => infer TargetSchema;
|
|
375
|
-
};
|
|
376
|
-
};
|
|
377
|
-
} ? TargetSchema extends {
|
|
378
|
-
_tableName: infer TableName;
|
|
379
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_24 ? T_24 extends TargetTable & string ? T_24 extends keyof S ? { [K_8 in keyof ResolvedRegistryWithSchemas<S, R>[T_24]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_24]["rawSchema"][K_8] extends infer T_25 ? T_25 extends ResolvedRegistryWithSchemas<S, R>[T_24]["rawSchema"][K_8] ? T_25 extends {
|
|
380
|
-
config: {
|
|
381
|
-
sql: {
|
|
382
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
383
|
-
schema: () => any;
|
|
384
|
-
};
|
|
385
|
-
};
|
|
386
|
-
} ? true : false : never : never) extends true ? K_8 : never]: (ResolvedRegistryWithSchemas<S, R>[T_24]["rawSchema"][K_8] extends infer T_26 ? T_26 extends ResolvedRegistryWithSchemas<S, R>[T_24]["rawSchema"][K_8] ? T_26 extends {
|
|
387
|
-
config: {
|
|
388
|
-
sql: {
|
|
389
|
-
schema: () => infer TargetSchema;
|
|
390
|
-
};
|
|
391
|
-
};
|
|
392
|
-
} ? TargetSchema extends {
|
|
393
|
-
_tableName: infer TableName;
|
|
394
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_27 ? T_27 extends TargetTable & string ? T_27 extends keyof S ? { [K_9 in keyof ResolvedRegistryWithSchemas<S, R>[T_27]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_27]["rawSchema"][K_9] extends infer T_28 ? T_28 extends ResolvedRegistryWithSchemas<S, R>[T_27]["rawSchema"][K_9] ? T_28 extends {
|
|
395
|
-
config: {
|
|
396
|
-
sql: {
|
|
397
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
398
|
-
schema: () => any;
|
|
399
|
-
};
|
|
400
|
-
};
|
|
401
|
-
} ? true : false : never : never) extends true ? K_9 : never]: (ResolvedRegistryWithSchemas<S, R>[T_27]["rawSchema"][K_9] extends infer T_29 ? T_29 extends ResolvedRegistryWithSchemas<S, R>[T_27]["rawSchema"][K_9] ? T_29 extends {
|
|
402
|
-
config: {
|
|
403
|
-
sql: {
|
|
404
|
-
schema: () => infer TargetSchema;
|
|
405
|
-
};
|
|
406
|
-
};
|
|
407
|
-
} ? TargetSchema extends {
|
|
408
|
-
_tableName: infer TableName;
|
|
409
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_30 ? T_30 extends TargetTable & string ? T_30 extends keyof S ? { [K_10 in keyof ResolvedRegistryWithSchemas<S, R>[T_30]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_30]["rawSchema"][K_10] extends infer T_31 ? T_31 extends ResolvedRegistryWithSchemas<S, R>[T_30]["rawSchema"][K_10] ? T_31 extends {
|
|
410
|
-
config: {
|
|
411
|
-
sql: {
|
|
412
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
413
|
-
schema: () => any;
|
|
414
|
-
};
|
|
415
|
-
};
|
|
416
|
-
} ? true : false : never : never) extends true ? K_10 : never]: (ResolvedRegistryWithSchemas<S, R>[T_30]["rawSchema"][K_10] extends infer T_32 ? T_32 extends ResolvedRegistryWithSchemas<S, R>[T_30]["rawSchema"][K_10] ? T_32 extends {
|
|
417
|
-
config: {
|
|
418
|
-
sql: {
|
|
419
|
-
schema: () => infer TargetSchema;
|
|
420
|
-
};
|
|
421
|
-
};
|
|
422
|
-
} ? TargetSchema extends {
|
|
423
|
-
_tableName: infer TableName;
|
|
424
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? /*elided*/ any : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never;
|
|
425
|
-
RelationSelection: (key & string extends infer T_66 ? T_66 extends key & string ? T_66 extends keyof S ? { [K_22 in keyof ResolvedRegistryWithSchemas<S, R>[T_66]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_66]["rawSchema"][K_22] extends infer T_67 ? T_67 extends ResolvedRegistryWithSchemas<S, R>[T_66]["rawSchema"][K_22] ? T_67 extends {
|
|
426
|
-
config: {
|
|
427
|
-
sql: {
|
|
428
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
429
|
-
schema: () => any;
|
|
430
|
-
};
|
|
431
|
-
};
|
|
432
|
-
} ? true : false : never : never) extends true ? K_22 : never]: (ResolvedRegistryWithSchemas<S, R>[T_66]["rawSchema"][K_22] extends infer T_68 ? T_68 extends ResolvedRegistryWithSchemas<S, R>[T_66]["rawSchema"][K_22] ? T_68 extends {
|
|
433
|
-
config: {
|
|
434
|
-
sql: {
|
|
435
|
-
schema: () => infer TargetSchema;
|
|
436
|
-
};
|
|
437
|
-
};
|
|
438
|
-
} ? TargetSchema extends {
|
|
439
|
-
_tableName: infer TableName;
|
|
440
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_69 ? T_69 extends TargetTable & string ? T_69 extends keyof S ? { [K_23 in keyof ResolvedRegistryWithSchemas<S, R>[T_69]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_69]["rawSchema"][K_23] extends infer T_70 ? T_70 extends ResolvedRegistryWithSchemas<S, R>[T_69]["rawSchema"][K_23] ? T_70 extends {
|
|
441
|
-
config: {
|
|
442
|
-
sql: {
|
|
443
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
444
|
-
schema: () => any;
|
|
445
|
-
};
|
|
446
|
-
};
|
|
447
|
-
} ? true : false : never : never) extends true ? K_23 : never]: (ResolvedRegistryWithSchemas<S, R>[T_69]["rawSchema"][K_23] extends infer T_71 ? T_71 extends ResolvedRegistryWithSchemas<S, R>[T_69]["rawSchema"][K_23] ? T_71 extends {
|
|
448
|
-
config: {
|
|
449
|
-
sql: {
|
|
450
|
-
schema: () => infer TargetSchema;
|
|
451
|
-
};
|
|
452
|
-
};
|
|
453
|
-
} ? TargetSchema extends {
|
|
454
|
-
_tableName: infer TableName;
|
|
455
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_72 ? T_72 extends TargetTable & string ? T_72 extends keyof S ? { [K_24 in keyof ResolvedRegistryWithSchemas<S, R>[T_72]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_72]["rawSchema"][K_24] extends infer T_73 ? T_73 extends ResolvedRegistryWithSchemas<S, R>[T_72]["rawSchema"][K_24] ? T_73 extends {
|
|
456
|
-
config: {
|
|
457
|
-
sql: {
|
|
458
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
459
|
-
schema: () => any;
|
|
460
|
-
};
|
|
461
|
-
};
|
|
462
|
-
} ? true : false : never : never) extends true ? K_24 : never]: (ResolvedRegistryWithSchemas<S, R>[T_72]["rawSchema"][K_24] extends infer T_74 ? T_74 extends ResolvedRegistryWithSchemas<S, R>[T_72]["rawSchema"][K_24] ? T_74 extends {
|
|
463
|
-
config: {
|
|
464
|
-
sql: {
|
|
465
|
-
schema: () => infer TargetSchema;
|
|
466
|
-
};
|
|
467
|
-
};
|
|
468
|
-
} ? TargetSchema extends {
|
|
469
|
-
_tableName: infer TableName;
|
|
470
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_75 ? T_75 extends TargetTable & string ? T_75 extends keyof S ? { [K_25 in keyof ResolvedRegistryWithSchemas<S, R>[T_75]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_75]["rawSchema"][K_25] extends infer T_76 ? T_76 extends ResolvedRegistryWithSchemas<S, R>[T_75]["rawSchema"][K_25] ? T_76 extends {
|
|
471
|
-
config: {
|
|
472
|
-
sql: {
|
|
473
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
474
|
-
schema: () => any;
|
|
475
|
-
};
|
|
476
|
-
};
|
|
477
|
-
} ? true : false : never : never) extends true ? K_25 : never]: (ResolvedRegistryWithSchemas<S, R>[T_75]["rawSchema"][K_25] extends infer T_77 ? T_77 extends ResolvedRegistryWithSchemas<S, R>[T_75]["rawSchema"][K_25] ? T_77 extends {
|
|
478
|
-
config: {
|
|
479
|
-
sql: {
|
|
480
|
-
schema: () => infer TargetSchema;
|
|
481
|
-
};
|
|
482
|
-
};
|
|
483
|
-
} ? TargetSchema extends {
|
|
484
|
-
_tableName: infer TableName;
|
|
485
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_78 ? T_78 extends TargetTable & string ? T_78 extends keyof S ? { [K_26 in keyof ResolvedRegistryWithSchemas<S, R>[T_78]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_78]["rawSchema"][K_26] extends infer T_79 ? T_79 extends ResolvedRegistryWithSchemas<S, R>[T_78]["rawSchema"][K_26] ? T_79 extends {
|
|
486
|
-
config: {
|
|
487
|
-
sql: {
|
|
488
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
489
|
-
schema: () => any;
|
|
490
|
-
};
|
|
491
|
-
};
|
|
492
|
-
} ? true : false : never : never) extends true ? K_26 : never]: (ResolvedRegistryWithSchemas<S, R>[T_78]["rawSchema"][K_26] extends infer T_80 ? T_80 extends ResolvedRegistryWithSchemas<S, R>[T_78]["rawSchema"][K_26] ? T_80 extends {
|
|
493
|
-
config: {
|
|
494
|
-
sql: {
|
|
495
|
-
schema: () => infer TargetSchema;
|
|
496
|
-
};
|
|
497
|
-
};
|
|
498
|
-
} ? TargetSchema extends {
|
|
499
|
-
_tableName: infer TableName;
|
|
500
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_81 ? T_81 extends TargetTable & string ? T_81 extends keyof S ? { [K_27 in keyof ResolvedRegistryWithSchemas<S, R>[T_81]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_81]["rawSchema"][K_27] extends infer T_82 ? T_82 extends ResolvedRegistryWithSchemas<S, R>[T_81]["rawSchema"][K_27] ? T_82 extends {
|
|
501
|
-
config: {
|
|
502
|
-
sql: {
|
|
503
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
504
|
-
schema: () => any;
|
|
505
|
-
};
|
|
506
|
-
};
|
|
507
|
-
} ? true : false : never : never) extends true ? K_27 : never]: (ResolvedRegistryWithSchemas<S, R>[T_81]["rawSchema"][K_27] extends infer T_83 ? T_83 extends ResolvedRegistryWithSchemas<S, R>[T_81]["rawSchema"][K_27] ? T_83 extends {
|
|
508
|
-
config: {
|
|
509
|
-
sql: {
|
|
510
|
-
schema: () => infer TargetSchema;
|
|
511
|
-
};
|
|
512
|
-
};
|
|
513
|
-
} ? TargetSchema extends {
|
|
514
|
-
_tableName: infer TableName;
|
|
515
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_84 ? T_84 extends TargetTable & string ? T_84 extends keyof S ? { [K_28 in keyof ResolvedRegistryWithSchemas<S, R>[T_84]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_84]["rawSchema"][K_28] extends infer T_85 ? T_85 extends ResolvedRegistryWithSchemas<S, R>[T_84]["rawSchema"][K_28] ? T_85 extends {
|
|
516
|
-
config: {
|
|
517
|
-
sql: {
|
|
518
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
519
|
-
schema: () => any;
|
|
520
|
-
};
|
|
521
|
-
};
|
|
522
|
-
} ? true : false : never : never) extends true ? K_28 : never]: (ResolvedRegistryWithSchemas<S, R>[T_84]["rawSchema"][K_28] extends infer T_86 ? T_86 extends ResolvedRegistryWithSchemas<S, R>[T_84]["rawSchema"][K_28] ? T_86 extends {
|
|
523
|
-
config: {
|
|
524
|
-
sql: {
|
|
525
|
-
schema: () => infer TargetSchema;
|
|
526
|
-
};
|
|
527
|
-
};
|
|
528
|
-
} ? TargetSchema extends {
|
|
529
|
-
_tableName: infer TableName;
|
|
530
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_87 ? T_87 extends TargetTable & string ? T_87 extends keyof S ? { [K_29 in keyof ResolvedRegistryWithSchemas<S, R>[T_87]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_87]["rawSchema"][K_29] extends infer T_88 ? T_88 extends ResolvedRegistryWithSchemas<S, R>[T_87]["rawSchema"][K_29] ? T_88 extends {
|
|
531
|
-
config: {
|
|
532
|
-
sql: {
|
|
533
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
534
|
-
schema: () => any;
|
|
535
|
-
};
|
|
536
|
-
};
|
|
537
|
-
} ? true : false : never : never) extends true ? K_29 : never]: (ResolvedRegistryWithSchemas<S, R>[T_87]["rawSchema"][K_29] extends infer T_89 ? T_89 extends ResolvedRegistryWithSchemas<S, R>[T_87]["rawSchema"][K_29] ? T_89 extends {
|
|
538
|
-
config: {
|
|
539
|
-
sql: {
|
|
540
|
-
schema: () => infer TargetSchema;
|
|
541
|
-
};
|
|
542
|
-
};
|
|
543
|
-
} ? TargetSchema extends {
|
|
544
|
-
_tableName: infer TableName;
|
|
545
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_90 ? T_90 extends TargetTable & string ? T_90 extends keyof S ? { [K_30 in keyof ResolvedRegistryWithSchemas<S, R>[T_90]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_90]["rawSchema"][K_30] extends infer T_91 ? T_91 extends ResolvedRegistryWithSchemas<S, R>[T_90]["rawSchema"][K_30] ? T_91 extends {
|
|
546
|
-
config: {
|
|
547
|
-
sql: {
|
|
548
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
549
|
-
schema: () => any;
|
|
550
|
-
};
|
|
551
|
-
};
|
|
552
|
-
} ? true : false : never : never) extends true ? K_30 : never]: (ResolvedRegistryWithSchemas<S, R>[T_90]["rawSchema"][K_30] extends infer T_92 ? T_92 extends ResolvedRegistryWithSchemas<S, R>[T_90]["rawSchema"][K_30] ? T_92 extends {
|
|
553
|
-
config: {
|
|
554
|
-
sql: {
|
|
555
|
-
schema: () => infer TargetSchema;
|
|
556
|
-
};
|
|
557
|
-
};
|
|
558
|
-
} ? TargetSchema extends {
|
|
559
|
-
_tableName: infer TableName;
|
|
560
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_93 ? T_93 extends TargetTable & string ? T_93 extends keyof S ? { [K_31 in keyof ResolvedRegistryWithSchemas<S, R>[T_93]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_93]["rawSchema"][K_31] extends infer T_94 ? T_94 extends ResolvedRegistryWithSchemas<S, R>[T_93]["rawSchema"][K_31] ? T_94 extends {
|
|
561
|
-
config: {
|
|
562
|
-
sql: {
|
|
563
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
564
|
-
schema: () => any;
|
|
565
|
-
};
|
|
566
|
-
};
|
|
567
|
-
} ? true : false : never : never) extends true ? K_31 : never]: (ResolvedRegistryWithSchemas<S, R>[T_93]["rawSchema"][K_31] extends infer T_95 ? T_95 extends ResolvedRegistryWithSchemas<S, R>[T_93]["rawSchema"][K_31] ? T_95 extends {
|
|
568
|
-
config: {
|
|
569
|
-
sql: {
|
|
570
|
-
schema: () => infer TargetSchema;
|
|
571
|
-
};
|
|
572
|
-
};
|
|
573
|
-
} ? TargetSchema extends {
|
|
574
|
-
_tableName: infer TableName;
|
|
575
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_96 ? T_96 extends TargetTable & string ? T_96 extends keyof S ? { [K_32 in keyof ResolvedRegistryWithSchemas<S, R>[T_96]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_96]["rawSchema"][K_32] extends infer T_97 ? T_97 extends ResolvedRegistryWithSchemas<S, R>[T_96]["rawSchema"][K_32] ? T_97 extends {
|
|
576
|
-
config: {
|
|
577
|
-
sql: {
|
|
578
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
579
|
-
schema: () => any;
|
|
580
|
-
};
|
|
581
|
-
};
|
|
582
|
-
} ? true : false : never : never) extends true ? K_32 : never]: (ResolvedRegistryWithSchemas<S, R>[T_96]["rawSchema"][K_32] extends infer T_98 ? T_98 extends ResolvedRegistryWithSchemas<S, R>[T_96]["rawSchema"][K_32] ? T_98 extends {
|
|
583
|
-
config: {
|
|
584
|
-
sql: {
|
|
585
|
-
schema: () => infer TargetSchema;
|
|
586
|
-
};
|
|
587
|
-
};
|
|
588
|
-
} ? TargetSchema extends {
|
|
589
|
-
_tableName: infer TableName;
|
|
590
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? /*elided*/ any : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never : never : never; } : {} : never : never) extends infer T_99 ? T_99 extends (key & string extends infer T_110 ? T_110 extends key & string ? T_110 extends keyof S ? { [K_44 in keyof ResolvedRegistryWithSchemas<S, R>[T_110]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_110]["rawSchema"][K_44] extends infer T_111 ? T_111 extends ResolvedRegistryWithSchemas<S, R>[T_110]["rawSchema"][K_44] ? T_111 extends {
|
|
591
|
-
config: {
|
|
592
|
-
sql: {
|
|
593
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
594
|
-
schema: () => any;
|
|
595
|
-
};
|
|
596
|
-
};
|
|
597
|
-
} ? true : false : never : never) extends true ? K_44 : never]: (ResolvedRegistryWithSchemas<S, R>[T_110]["rawSchema"][K_44] extends infer T_112 ? T_112 extends ResolvedRegistryWithSchemas<S, R>[T_110]["rawSchema"][K_44] ? T_112 extends {
|
|
598
|
-
config: {
|
|
599
|
-
sql: {
|
|
600
|
-
schema: () => infer TargetSchema;
|
|
601
|
-
};
|
|
602
|
-
};
|
|
603
|
-
} ? TargetSchema extends {
|
|
604
|
-
_tableName: infer TableName;
|
|
605
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_113 ? T_113 extends TargetTable & string ? T_113 extends keyof S ? { [K_45 in keyof ResolvedRegistryWithSchemas<S, R>[T_113]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_113]["rawSchema"][K_45] extends infer T_114 ? T_114 extends ResolvedRegistryWithSchemas<S, R>[T_113]["rawSchema"][K_45] ? T_114 extends {
|
|
606
|
-
config: {
|
|
607
|
-
sql: {
|
|
608
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
609
|
-
schema: () => any;
|
|
610
|
-
};
|
|
611
|
-
};
|
|
612
|
-
} ? true : false : never : never) extends true ? K_45 : never]: (ResolvedRegistryWithSchemas<S, R>[T_113]["rawSchema"][K_45] extends infer T_115 ? T_115 extends ResolvedRegistryWithSchemas<S, R>[T_113]["rawSchema"][K_45] ? T_115 extends {
|
|
613
|
-
config: {
|
|
614
|
-
sql: {
|
|
615
|
-
schema: () => infer TargetSchema;
|
|
616
|
-
};
|
|
617
|
-
};
|
|
618
|
-
} ? TargetSchema extends {
|
|
619
|
-
_tableName: infer TableName;
|
|
620
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_116 ? T_116 extends TargetTable & string ? T_116 extends keyof S ? { [K_46 in keyof ResolvedRegistryWithSchemas<S, R>[T_116]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_116]["rawSchema"][K_46] extends infer T_117 ? T_117 extends ResolvedRegistryWithSchemas<S, R>[T_116]["rawSchema"][K_46] ? T_117 extends {
|
|
621
|
-
config: {
|
|
622
|
-
sql: {
|
|
623
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
624
|
-
schema: () => any;
|
|
625
|
-
};
|
|
626
|
-
};
|
|
627
|
-
} ? true : false : never : never) extends true ? K_46 : never]: (ResolvedRegistryWithSchemas<S, R>[T_116]["rawSchema"][K_46] extends infer T_118 ? T_118 extends ResolvedRegistryWithSchemas<S, R>[T_116]["rawSchema"][K_46] ? T_118 extends {
|
|
628
|
-
config: {
|
|
629
|
-
sql: {
|
|
630
|
-
schema: () => infer TargetSchema;
|
|
631
|
-
};
|
|
632
|
-
};
|
|
633
|
-
} ? TargetSchema extends {
|
|
634
|
-
_tableName: infer TableName;
|
|
635
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_119 ? T_119 extends TargetTable & string ? T_119 extends keyof S ? { [K_47 in keyof ResolvedRegistryWithSchemas<S, R>[T_119]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_119]["rawSchema"][K_47] extends infer T_120 ? T_120 extends ResolvedRegistryWithSchemas<S, R>[T_119]["rawSchema"][K_47] ? T_120 extends {
|
|
636
|
-
config: {
|
|
637
|
-
sql: {
|
|
638
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
639
|
-
schema: () => any;
|
|
640
|
-
};
|
|
641
|
-
};
|
|
642
|
-
} ? true : false : never : never) extends true ? K_47 : never]: (ResolvedRegistryWithSchemas<S, R>[T_119]["rawSchema"][K_47] extends infer T_121 ? T_121 extends ResolvedRegistryWithSchemas<S, R>[T_119]["rawSchema"][K_47] ? T_121 extends {
|
|
643
|
-
config: {
|
|
644
|
-
sql: {
|
|
645
|
-
schema: () => infer TargetSchema;
|
|
646
|
-
};
|
|
647
|
-
};
|
|
648
|
-
} ? TargetSchema extends {
|
|
649
|
-
_tableName: infer TableName;
|
|
650
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_122 ? T_122 extends TargetTable & string ? T_122 extends keyof S ? { [K_48 in keyof ResolvedRegistryWithSchemas<S, R>[T_122]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_122]["rawSchema"][K_48] extends infer T_123 ? T_123 extends ResolvedRegistryWithSchemas<S, R>[T_122]["rawSchema"][K_48] ? T_123 extends {
|
|
651
|
-
config: {
|
|
652
|
-
sql: {
|
|
653
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
654
|
-
schema: () => any;
|
|
655
|
-
};
|
|
656
|
-
};
|
|
657
|
-
} ? true : false : never : never) extends true ? K_48 : never]: (ResolvedRegistryWithSchemas<S, R>[T_122]["rawSchema"][K_48] extends infer T_124 ? T_124 extends ResolvedRegistryWithSchemas<S, R>[T_122]["rawSchema"][K_48] ? T_124 extends {
|
|
658
|
-
config: {
|
|
659
|
-
sql: {
|
|
660
|
-
schema: () => infer TargetSchema;
|
|
661
|
-
};
|
|
662
|
-
};
|
|
663
|
-
} ? TargetSchema extends {
|
|
664
|
-
_tableName: infer TableName;
|
|
665
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_125 ? T_125 extends TargetTable & string ? T_125 extends keyof S ? { [K_49 in keyof ResolvedRegistryWithSchemas<S, R>[T_125]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_125]["rawSchema"][K_49] extends infer T_126 ? T_126 extends ResolvedRegistryWithSchemas<S, R>[T_125]["rawSchema"][K_49] ? T_126 extends {
|
|
666
|
-
config: {
|
|
667
|
-
sql: {
|
|
668
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
669
|
-
schema: () => any;
|
|
670
|
-
};
|
|
671
|
-
};
|
|
672
|
-
} ? true : false : never : never) extends true ? K_49 : never]: (ResolvedRegistryWithSchemas<S, R>[T_125]["rawSchema"][K_49] extends infer T_127 ? T_127 extends ResolvedRegistryWithSchemas<S, R>[T_125]["rawSchema"][K_49] ? T_127 extends {
|
|
673
|
-
config: {
|
|
674
|
-
sql: {
|
|
675
|
-
schema: () => infer TargetSchema;
|
|
676
|
-
};
|
|
677
|
-
};
|
|
678
|
-
} ? TargetSchema extends {
|
|
679
|
-
_tableName: infer TableName;
|
|
680
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_128 ? T_128 extends TargetTable & string ? T_128 extends keyof S ? { [K_50 in keyof ResolvedRegistryWithSchemas<S, R>[T_128]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_128]["rawSchema"][K_50] extends infer T_129 ? T_129 extends ResolvedRegistryWithSchemas<S, R>[T_128]["rawSchema"][K_50] ? T_129 extends {
|
|
681
|
-
config: {
|
|
682
|
-
sql: {
|
|
683
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
684
|
-
schema: () => any;
|
|
685
|
-
};
|
|
686
|
-
};
|
|
687
|
-
} ? true : false : never : never) extends true ? K_50 : never]: (ResolvedRegistryWithSchemas<S, R>[T_128]["rawSchema"][K_50] extends infer T_130 ? T_130 extends ResolvedRegistryWithSchemas<S, R>[T_128]["rawSchema"][K_50] ? T_130 extends {
|
|
688
|
-
config: {
|
|
689
|
-
sql: {
|
|
690
|
-
schema: () => infer TargetSchema;
|
|
691
|
-
};
|
|
692
|
-
};
|
|
693
|
-
} ? TargetSchema extends {
|
|
694
|
-
_tableName: infer TableName;
|
|
695
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_131 ? T_131 extends TargetTable & string ? T_131 extends keyof S ? { [K_51 in keyof ResolvedRegistryWithSchemas<S, R>[T_131]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_131]["rawSchema"][K_51] extends infer T_132 ? T_132 extends ResolvedRegistryWithSchemas<S, R>[T_131]["rawSchema"][K_51] ? T_132 extends {
|
|
696
|
-
config: {
|
|
697
|
-
sql: {
|
|
698
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
699
|
-
schema: () => any;
|
|
700
|
-
};
|
|
701
|
-
};
|
|
702
|
-
} ? true : false : never : never) extends true ? K_51 : never]: (ResolvedRegistryWithSchemas<S, R>[T_131]["rawSchema"][K_51] extends infer T_133 ? T_133 extends ResolvedRegistryWithSchemas<S, R>[T_131]["rawSchema"][K_51] ? T_133 extends {
|
|
703
|
-
config: {
|
|
704
|
-
sql: {
|
|
705
|
-
schema: () => infer TargetSchema;
|
|
706
|
-
};
|
|
707
|
-
};
|
|
708
|
-
} ? TargetSchema extends {
|
|
709
|
-
_tableName: infer TableName;
|
|
710
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_134 ? T_134 extends TargetTable & string ? T_134 extends keyof S ? { [K_52 in keyof ResolvedRegistryWithSchemas<S, R>[T_134]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_134]["rawSchema"][K_52] extends infer T_135 ? T_135 extends ResolvedRegistryWithSchemas<S, R>[T_134]["rawSchema"][K_52] ? T_135 extends {
|
|
711
|
-
config: {
|
|
712
|
-
sql: {
|
|
713
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
714
|
-
schema: () => any;
|
|
715
|
-
};
|
|
716
|
-
};
|
|
717
|
-
} ? true : false : never : never) extends true ? K_52 : never]: (ResolvedRegistryWithSchemas<S, R>[T_134]["rawSchema"][K_52] extends infer T_136 ? T_136 extends ResolvedRegistryWithSchemas<S, R>[T_134]["rawSchema"][K_52] ? T_136 extends {
|
|
718
|
-
config: {
|
|
719
|
-
sql: {
|
|
720
|
-
schema: () => infer TargetSchema;
|
|
721
|
-
};
|
|
722
|
-
};
|
|
723
|
-
} ? TargetSchema extends {
|
|
724
|
-
_tableName: infer TableName;
|
|
725
|
-
} ? TableName : never : never : never : never) extends infer TargetTable ? TargetTable extends keyof S ? TargetTable & string extends infer T_137 ? T_137 extends TargetTable & string ? T_137 extends keyof S ? { [K_53 in keyof ResolvedRegistryWithSchemas<S, R>[T_137]["rawSchema"] as (ResolvedRegistryWithSchemas<S, R>[T_137]["rawSchema"][K_53] extends infer T_138 ? T_138 extends ResolvedRegistryWithSchemas<S, R>[T_137]["rawSchema"][K_53] ? T_138 extends {
|
|
726
|
-
config: {
|
|
727
|
-
sql: {
|
|
728
|
-
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
729
|
-
schema: () => any;
|
|
730
|
-
};
|
|
254
|
+
type IsRelationField<Field> = Field extends {
|
|
255
|
+
config: {
|
|
256
|
+
sql: {
|
|
257
|
+
type: "hasMany" | "hasOne" | "belongsTo" | "manyToMany";
|
|
258
|
+
schema: () => any;
|
|
731
259
|
};
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
260
|
+
};
|
|
261
|
+
} ? true : false;
|
|
262
|
+
type GetRelationTarget<Field> = Field extends {
|
|
263
|
+
config: {
|
|
264
|
+
sql: {
|
|
265
|
+
schema: () => infer TargetSchema;
|
|
737
266
|
};
|
|
738
|
-
}
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
267
|
+
};
|
|
268
|
+
} ? TargetSchema extends {
|
|
269
|
+
_tableName: infer TableName;
|
|
270
|
+
} ? TableName : never : never;
|
|
271
|
+
type NavigationProxy<CurrentTable extends string, Registry extends RegistryShape> = CurrentTable extends keyof Registry ? {
|
|
272
|
+
[K in keyof Registry[CurrentTable]["rawSchema"] as IsRelationField<Registry[CurrentTable]["rawSchema"][K]> extends true ? K : never]: GetRelationTarget<Registry[CurrentTable]["rawSchema"][K]> extends infer TargetTable ? TargetTable extends keyof Registry ? NavigationProxy<TargetTable & string, Registry> : never : never;
|
|
273
|
+
} : {};
|
|
274
|
+
type NavigationToSelection<Nav> = Nav extends object ? {
|
|
275
|
+
[K in keyof Nav]?: boolean | NavigationToSelection<Nav[K]>;
|
|
276
|
+
} : never;
|
|
277
|
+
type BuildZodShape<TTableName extends keyof TRegistry, TSelection, TKey extends "clientSchema" | "validationSchema", TRegistry extends RegistryShape> = TRegistry[TTableName]["zodSchemas"][TKey] extends z.ZodObject<infer Base> ? TSelection extends Record<string, any> ? Omit<Base, keyof TSelection> & {
|
|
278
|
+
[K in keyof TSelection & keyof TRegistry[TTableName]["rawSchema"]]: TRegistry[TTableName]["rawSchema"][K] extends {
|
|
279
|
+
config: {
|
|
280
|
+
sql: {
|
|
281
|
+
type: infer RelType;
|
|
282
|
+
schema: () => infer S;
|
|
745
283
|
};
|
|
746
284
|
};
|
|
747
|
-
} ?
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
285
|
+
} ? S extends {
|
|
286
|
+
_tableName: infer Target;
|
|
287
|
+
} ? Target extends keyof TRegistry ? RelType extends "hasMany" | "manyToMany" ? TSelection[K] extends true ? TRegistry[Target]["zodSchemas"][TKey] extends z.ZodObject<infer Shape extends Record<string, any>> ? z.ZodArray<z.ZodObject<OmitRelations<Shape, TRegistry[Target]["rawSchema"]>>> : never : z.ZodArray<z.ZodObject<BuildZodShape<Target, TSelection[K], TKey, TRegistry>>> : TSelection[K] extends true ? TRegistry[Target]["zodSchemas"][TKey] extends z.ZodObject<infer Shape extends Record<string, any>> ? z.ZodOptional<z.ZodObject<OmitRelations<Shape, TRegistry[Target]["rawSchema"]>>> : never : z.ZodOptional<z.ZodObject<BuildZodShape<Target, TSelection[K], TKey, TRegistry>>> : never : never : never;
|
|
288
|
+
} : Base : never;
|
|
289
|
+
type OmitRelations<Shape, RawSchema> = Omit<Shape, {
|
|
290
|
+
[K in keyof Shape]: K extends keyof RawSchema ? RawSchema[K] extends {
|
|
291
|
+
config: {
|
|
292
|
+
sql: {
|
|
293
|
+
schema: any;
|
|
294
|
+
};
|
|
295
|
+
};
|
|
296
|
+
} ? K : never : never;
|
|
297
|
+
}[keyof Shape]>;
|
|
298
|
+
type RegistryShape = Record<string, {
|
|
299
|
+
rawSchema: any;
|
|
300
|
+
zodSchemas: {
|
|
301
|
+
sqlSchema: z.ZodObject<any>;
|
|
302
|
+
clientSchema: z.ZodObject<any>;
|
|
303
|
+
validationSchema: z.ZodObject<any>;
|
|
304
|
+
defaultValues: any;
|
|
305
|
+
toClient: (dbObject: any) => any;
|
|
306
|
+
toDb: (clientObject: any) => any;
|
|
307
|
+
};
|
|
308
|
+
}>;
|
|
309
|
+
type CreateSchemaBoxReturn<S extends Record<string, SchemaWithPlaceholders>, R extends ResolutionMap<S>, Resolved extends RegistryShape = ResolvedRegistryWithSchemas<S, R> extends RegistryShape ? ResolvedRegistryWithSchemas<S, R> : RegistryShape> = {
|
|
310
|
+
[K in keyof Resolved]: {
|
|
311
|
+
definition: Resolved[K]["rawSchema"];
|
|
312
|
+
schemas: {
|
|
313
|
+
sql: Resolved[K]["zodSchemas"]["sqlSchema"];
|
|
314
|
+
client: Resolved[K]["zodSchemas"]["clientSchema"];
|
|
315
|
+
validation: Resolved[K]["zodSchemas"]["validationSchema"];
|
|
316
|
+
};
|
|
317
|
+
transforms: {
|
|
318
|
+
toClient: Resolved[K]["zodSchemas"]["toClient"];
|
|
319
|
+
toDb: Resolved[K]["zodSchemas"]["toDb"];
|
|
320
|
+
};
|
|
321
|
+
defaults: Resolved[K]["zodSchemas"]["defaultValues"];
|
|
322
|
+
nav: NavigationProxy<K & string, Resolved>;
|
|
323
|
+
RelationSelection: NavigationToSelection<NavigationProxy<K & string, Resolved>>;
|
|
324
|
+
createView: <const TSelection extends NavigationToSelection<NavigationProxy<K & string, Resolved>>>(selection: TSelection) => {
|
|
325
|
+
sql: Resolved[K]["zodSchemas"]["sqlSchema"];
|
|
326
|
+
client: z.ZodObject<BuildZodShape<K, TSelection, "clientSchema", Resolved>>;
|
|
327
|
+
validation: z.ZodObject<BuildZodShape<K, TSelection, "validationSchema", Resolved>>;
|
|
328
|
+
defaults: any;
|
|
752
329
|
};
|
|
753
|
-
}
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
}; };
|
|
330
|
+
};
|
|
331
|
+
};
|
|
332
|
+
export declare function createSchemaBox<S extends Record<string, SchemaWithPlaceholders>, R extends ResolutionMap<S>>(schemas: S, resolver: (proxy: SchemaProxy<S>) => R): CreateSchemaBoxReturn<S, R>;
|
|
757
333
|
type SchemaProxy<S extends Record<string, SchemaWithPlaceholders>> = {
|
|
758
334
|
[K in keyof S]: {
|
|
759
335
|
[F in keyof S[K] as F extends "_tableName" ? never : F]: S[K][F] extends {
|
|
@@ -777,31 +353,7 @@ type DeriveSchemaByKey<T, Key extends "zodSqlSchema" | "zodClientSchema" | "zodV
|
|
|
777
353
|
type: "hasMany" | "manyToMany" | "hasOne" | "belongsTo";
|
|
778
354
|
};
|
|
779
355
|
};
|
|
780
|
-
} ?
|
|
781
|
-
config: {
|
|
782
|
-
[P in Key]: infer ZodSchema extends z.ZodTypeAny;
|
|
783
|
-
};
|
|
784
|
-
} ? ZodSchema : never : T[K] extends {
|
|
785
|
-
config: {
|
|
786
|
-
sql: {
|
|
787
|
-
type: "hasMany" | "manyToMany";
|
|
788
|
-
schema: () => infer S;
|
|
789
|
-
};
|
|
790
|
-
};
|
|
791
|
-
} ? S extends {
|
|
792
|
-
_tableName: string;
|
|
793
|
-
} ? z.ZodArray<z.ZodObject<Prettify<DeriveSchemaByKey<S, Key, [...Depth, 1]>>>> : never : T[K] extends {
|
|
794
|
-
config: {
|
|
795
|
-
sql: {
|
|
796
|
-
schema: () => infer S;
|
|
797
|
-
};
|
|
798
|
-
};
|
|
799
|
-
} ? S extends {
|
|
800
|
-
_tableName: string;
|
|
801
|
-
} ? z.ZodObject<Prettify<DeriveSchemaByKey<S, Key, [...Depth, 1]>>> : z.ZodObject<any> : T[K] extends {
|
|
802
|
-
type: "reference";
|
|
803
|
-
to: () => infer RefField;
|
|
804
|
-
} ? RefField extends {
|
|
356
|
+
} ? never : K : never]: T[K] extends Reference<infer TGetter> ? ReturnType<TGetter> extends {
|
|
805
357
|
config: {
|
|
806
358
|
[P in Key]: infer ZodSchema extends z.ZodTypeAny;
|
|
807
359
|
};
|
|
@@ -812,29 +364,21 @@ type DeriveSchemaByKey<T, Key extends "zodSqlSchema" | "zodClientSchema" | "zodV
|
|
|
812
364
|
} ? ZodSchema : never;
|
|
813
365
|
};
|
|
814
366
|
type DeriveDefaults<T, Depth extends any[] = []> = Prettify<Depth["length"] extends 10 ? any : {
|
|
815
|
-
[K in keyof T as K extends "_tableName" | typeof SchemaWrapperBrand ? never : K
|
|
367
|
+
[K in keyof T as K extends "_tableName" | typeof SchemaWrapperBrand ? never : K extends keyof T ? T[K] extends Reference<any> ? K : T[K] extends {
|
|
816
368
|
config: {
|
|
817
|
-
|
|
369
|
+
sql: {
|
|
370
|
+
type: "hasMany" | "manyToMany" | "hasOne" | "belongsTo";
|
|
371
|
+
};
|
|
818
372
|
};
|
|
819
|
-
} ?
|
|
373
|
+
} ? never : K : never]: T[K] extends Reference<infer TGetter> ? ReturnType<TGetter> extends {
|
|
820
374
|
config: {
|
|
821
|
-
sql: infer SqlConfig;
|
|
822
375
|
initialValue: infer D;
|
|
823
376
|
};
|
|
824
|
-
} ?
|
|
825
|
-
type: "hasMany" | "manyToMany";
|
|
826
|
-
schema: () => infer S;
|
|
827
|
-
} ? Array<DeriveDefaults<S, [...Depth, 1]>> : SqlConfig extends {
|
|
828
|
-
type: "hasOne" | "belongsTo";
|
|
829
|
-
schema: () => infer S;
|
|
830
|
-
} ? DeriveDefaults<S, [...Depth, 1]> : D extends () => infer R ? R : D : T[K] extends {
|
|
831
|
-
type: "reference";
|
|
832
|
-
to: () => infer RefField;
|
|
833
|
-
} ? RefField extends {
|
|
377
|
+
} ? D extends () => infer R ? R : D : never : T[K] extends {
|
|
834
378
|
config: {
|
|
835
379
|
initialValue: infer D;
|
|
836
380
|
};
|
|
837
|
-
} ? D extends () => infer R ? R : D : never
|
|
381
|
+
} ? D extends () => infer R ? R : D : never;
|
|
838
382
|
}>;
|
|
839
383
|
export type InferFromSchema<T extends {
|
|
840
384
|
_tableName: string;
|
package/dist/schema.js
CHANGED
|
@@ -57,11 +57,15 @@ export const s = {
|
|
|
57
57
|
hasMany: (config) => ({
|
|
58
58
|
__type: "placeholder-relation",
|
|
59
59
|
relationType: "hasMany",
|
|
60
|
-
defaultCount: config
|
|
60
|
+
defaultCount: config && typeof config === "object" && "count" in config
|
|
61
|
+
? config.count
|
|
62
|
+
: 0,
|
|
63
|
+
defaultConfig: config,
|
|
61
64
|
}),
|
|
62
|
-
hasOne: () => ({
|
|
65
|
+
hasOne: (config) => ({
|
|
63
66
|
__type: "placeholder-relation",
|
|
64
67
|
relationType: "hasOne",
|
|
68
|
+
defaultConfig: config, // This line is the crucial fix
|
|
65
69
|
}),
|
|
66
70
|
manyToMany: (config) => ({
|
|
67
71
|
__type: "placeholder-relation",
|
|
@@ -440,14 +444,12 @@ export function createSchema(schema, relations) {
|
|
|
440
444
|
const definition = fullSchema[key];
|
|
441
445
|
// Handle new-style references
|
|
442
446
|
if (isReference(definition)) {
|
|
443
|
-
// Call the getter to get the actual field
|
|
444
447
|
const targetField = definition.getter();
|
|
445
448
|
if (targetField && targetField.config) {
|
|
446
449
|
const config = targetField.config;
|
|
447
450
|
sqlFields[key] = config.zodSqlSchema;
|
|
448
451
|
clientFields[key] = config.zodClientSchema;
|
|
449
452
|
validationFields[key] = config.zodValidationSchema;
|
|
450
|
-
// For references, typically use undefined as default
|
|
451
453
|
defaultValues[key] = inferDefaultFromZod(config.zodClientSchema, {
|
|
452
454
|
...config.sql,
|
|
453
455
|
default: undefined,
|
|
@@ -472,49 +474,24 @@ export function createSchema(schema, relations) {
|
|
|
472
474
|
if (definition && definition.config) {
|
|
473
475
|
const config = definition.config;
|
|
474
476
|
const sqlConfig = config.sql;
|
|
475
|
-
if (
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
const childSchema = createSchema(relatedSchemaFactory());
|
|
489
|
-
return childSchema.defaultValues;
|
|
490
|
-
});
|
|
491
|
-
}
|
|
492
|
-
else {
|
|
493
|
-
baseClientSchema = z.any().optional();
|
|
494
|
-
// Make it a FUNCTION that returns the object
|
|
495
|
-
defaultValues[key] = () => {
|
|
496
|
-
const childSchema = createSchema(relatedSchemaFactory());
|
|
497
|
-
return childSchema.defaultValues;
|
|
498
|
-
};
|
|
499
|
-
}
|
|
500
|
-
clientFields[key] = config.clientTransform
|
|
501
|
-
? config.clientTransform(baseClientSchema)
|
|
502
|
-
: baseClientSchema;
|
|
503
|
-
validationFields[key] = clientFields[key];
|
|
504
|
-
}
|
|
505
|
-
else {
|
|
506
|
-
// Handle regular fields
|
|
507
|
-
sqlFields[key] = config.zodSqlSchema;
|
|
508
|
-
clientFields[key] = config.zodClientSchema;
|
|
509
|
-
validationFields[key] = config.zodValidationSchema;
|
|
510
|
-
if (config.transforms) {
|
|
511
|
-
fieldTransforms[key] = config.transforms;
|
|
512
|
-
}
|
|
513
|
-
const initialValueOrFn = config.initialValue;
|
|
514
|
-
defaultValues[key] = isFunction(initialValueOrFn)
|
|
515
|
-
? initialValueOrFn()
|
|
516
|
-
: initialValueOrFn;
|
|
477
|
+
if (sqlConfig &&
|
|
478
|
+
typeof sqlConfig === "object" &&
|
|
479
|
+
["hasMany", "hasOne", "belongsTo", "manyToMany"].includes(sqlConfig.type)) {
|
|
480
|
+
console.log(`Skipping relation: ${key}`);
|
|
481
|
+
continue;
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
// Handle regular fields
|
|
485
|
+
sqlFields[key] = config.zodSqlSchema;
|
|
486
|
+
clientFields[key] = config.zodClientSchema;
|
|
487
|
+
validationFields[key] = config.zodValidationSchema;
|
|
488
|
+
if (config.transforms) {
|
|
489
|
+
fieldTransforms[key] = config.transforms;
|
|
517
490
|
}
|
|
491
|
+
const initialValueOrFn = config.initialValue;
|
|
492
|
+
defaultValues[key] = isFunction(initialValueOrFn)
|
|
493
|
+
? initialValueOrFn()
|
|
494
|
+
: initialValueOrFn;
|
|
518
495
|
}
|
|
519
496
|
}
|
|
520
497
|
}
|
|
@@ -545,8 +522,56 @@ export function createSchema(schema, relations) {
|
|
|
545
522
|
toDb,
|
|
546
523
|
};
|
|
547
524
|
}
|
|
525
|
+
function createViewObject(tableName, selection, registry) {
|
|
526
|
+
// A recursive helper that builds ONE schema (client or validation) for a view.
|
|
527
|
+
function buildView(currentTable, schemaType, subSelection) {
|
|
528
|
+
const registryEntry = registry[currentTable];
|
|
529
|
+
const rawSchema = registryEntry.rawSchema;
|
|
530
|
+
const baseSchema = registryEntry.zodSchemas[`${schemaType}Schema`];
|
|
531
|
+
// Get all relation keys
|
|
532
|
+
const relationsToOmit = {};
|
|
533
|
+
for (const key in rawSchema) {
|
|
534
|
+
if (rawSchema[key]?.config?.sql?.schema) {
|
|
535
|
+
relationsToOmit[key] = true;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
// Start with primitive fields only
|
|
539
|
+
const schemaWithPrimitives = baseSchema.omit(relationsToOmit);
|
|
540
|
+
// If selection is just `true`, return primitives only (no nested relations)
|
|
541
|
+
if (subSelection === true) {
|
|
542
|
+
return schemaWithPrimitives;
|
|
543
|
+
}
|
|
544
|
+
// Otherwise, add selected relations
|
|
545
|
+
const selectedRelationShapes = {};
|
|
546
|
+
if (typeof subSelection === "object") {
|
|
547
|
+
for (const key in subSelection) {
|
|
548
|
+
if (subSelection[key] && relationsToOmit[key]) {
|
|
549
|
+
const relationConfig = rawSchema[key].config.sql;
|
|
550
|
+
const targetTable = relationConfig.schema()._tableName;
|
|
551
|
+
// Recursively build the sub-schema
|
|
552
|
+
const subSchema = buildView(targetTable, schemaType, subSelection[key]);
|
|
553
|
+
if (relationConfig.type === "hasMany" ||
|
|
554
|
+
relationConfig.type === "manyToMany") {
|
|
555
|
+
selectedRelationShapes[key] = z.array(subSchema);
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
selectedRelationShapes[key] = subSchema.optional();
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
return schemaWithPrimitives.extend(selectedRelationShapes);
|
|
564
|
+
}
|
|
565
|
+
// The main function builds the final object with all three schemas.
|
|
566
|
+
const sourceRegistryEntry = registry[tableName];
|
|
567
|
+
return {
|
|
568
|
+
sql: sourceRegistryEntry.zodSchemas.sqlSchema, // Changed from sqlSchema
|
|
569
|
+
client: buildView(tableName, "client", selection), // Changed from clientSchema
|
|
570
|
+
validation: buildView(tableName, "validation", selection), // Changed from validationSchema
|
|
571
|
+
};
|
|
572
|
+
}
|
|
548
573
|
export function createSchemaBox(schemas, resolver) {
|
|
549
|
-
//
|
|
574
|
+
// Your existing implementation stays exactly the same
|
|
550
575
|
const schemaProxy = new Proxy({}, {
|
|
551
576
|
get(target, tableName) {
|
|
552
577
|
const schema = schemas[tableName];
|
|
@@ -555,8 +580,6 @@ export function createSchemaBox(schemas, resolver) {
|
|
|
555
580
|
return new Proxy({}, {
|
|
556
581
|
get(target, fieldName) {
|
|
557
582
|
const field = schema[fieldName];
|
|
558
|
-
// Enrich the field with metadata when accessed through the proxy.
|
|
559
|
-
// This metadata is crucial for resolving relationships later.
|
|
560
583
|
if (field && typeof field === "object") {
|
|
561
584
|
return {
|
|
562
585
|
...field,
|
|
@@ -572,31 +595,24 @@ export function createSchemaBox(schemas, resolver) {
|
|
|
572
595
|
});
|
|
573
596
|
},
|
|
574
597
|
});
|
|
575
|
-
// Get the user-defined resolution configuration
|
|
576
598
|
const resolutionConfig = resolver(schemaProxy);
|
|
577
|
-
// Start with a deep copy of the initial schemas
|
|
578
599
|
const resolvedSchemas = { ...schemas };
|
|
579
|
-
//
|
|
580
|
-
// FIX: Implement a two-stage resolution process to avoid deadlock
|
|
581
|
-
// ===============================================================
|
|
582
|
-
// STAGE 1: Resolve all `s.reference()` fields first.
|
|
600
|
+
// STAGE 1: Resolve references
|
|
583
601
|
for (const tableName in schemas) {
|
|
584
602
|
for (const fieldName in schemas[tableName]) {
|
|
585
603
|
const field = schemas[tableName][fieldName];
|
|
586
604
|
if (isReference(field)) {
|
|
587
|
-
// A reference is defined in the base schema, so its getter gives the target
|
|
588
605
|
const targetField = field.getter();
|
|
589
606
|
if (targetField && targetField.config) {
|
|
590
|
-
// Replace the reference placeholder with the actual field it points to
|
|
591
607
|
resolvedSchemas[tableName][fieldName] = targetField;
|
|
592
608
|
}
|
|
593
609
|
else {
|
|
594
|
-
throw new Error(`Could not resolve reference for ${tableName}.${fieldName}
|
|
610
|
+
throw new Error(`Could not resolve reference for ${tableName}.${fieldName}`);
|
|
595
611
|
}
|
|
596
612
|
}
|
|
597
613
|
}
|
|
598
614
|
}
|
|
599
|
-
// STAGE 2:
|
|
615
|
+
// STAGE 2: Resolve relations
|
|
600
616
|
for (const tableName in schemas) {
|
|
601
617
|
const tableConfig = resolutionConfig[tableName];
|
|
602
618
|
if (!tableConfig)
|
|
@@ -604,12 +620,10 @@ export function createSchemaBox(schemas, resolver) {
|
|
|
604
620
|
for (const fieldName in tableConfig) {
|
|
605
621
|
const field = schemas[tableName][fieldName];
|
|
606
622
|
const resolution = tableConfig[fieldName];
|
|
607
|
-
// Ensure this is a relation placeholder we are trying to resolve
|
|
608
623
|
if (field && field.__type === "placeholder-relation") {
|
|
609
624
|
const targetKey = resolution.toKey;
|
|
610
|
-
// The target key should now be a fully resolved field from STAGE 1
|
|
611
625
|
if (!targetKey || !targetKey.__parentTableType) {
|
|
612
|
-
throw new Error(`Could not resolve relation for ${tableName}.${fieldName}
|
|
626
|
+
throw new Error(`Could not resolve relation for ${tableName}.${fieldName}`);
|
|
613
627
|
}
|
|
614
628
|
const targetSchema = targetKey.__parentTableType;
|
|
615
629
|
const relationType = field.relationType;
|
|
@@ -620,15 +634,15 @@ export function createSchemaBox(schemas, resolver) {
|
|
|
620
634
|
const initialValue = relationType === "hasMany" || relationType === "manyToMany"
|
|
621
635
|
? Array.from({ length: defaultCount || 0 }, () => ({}))
|
|
622
636
|
: {};
|
|
623
|
-
// Create the full relation builder now that the dependency is available
|
|
624
637
|
const resolvedBuilder = createBuilder({
|
|
625
638
|
stage: "relation",
|
|
626
639
|
sqlConfig: {
|
|
627
640
|
type: relationType,
|
|
628
641
|
fromKey: resolution.fromKey,
|
|
629
|
-
toKey: () => targetKey,
|
|
642
|
+
toKey: () => targetKey,
|
|
630
643
|
schema: () => targetSchema,
|
|
631
644
|
defaultCount: defaultCount,
|
|
645
|
+
defaultConfig: field.defaultConfig,
|
|
632
646
|
},
|
|
633
647
|
sqlZod: zodSchema,
|
|
634
648
|
newZod: zodSchema,
|
|
@@ -636,15 +650,10 @@ export function createSchemaBox(schemas, resolver) {
|
|
|
636
650
|
clientZod: zodSchema,
|
|
637
651
|
validationZod: zodSchema,
|
|
638
652
|
});
|
|
639
|
-
// Replace the placeholder in our schemas object with the final builder
|
|
640
|
-
if (!resolvedSchemas[tableName]) {
|
|
641
|
-
throw new Error(`Could not resolve relation for ${tableName}.${fieldName}. The 'toKey' (${targetKey}) is invalid.`);
|
|
642
|
-
}
|
|
643
653
|
resolvedSchemas[tableName][fieldName] = resolvedBuilder;
|
|
644
654
|
}
|
|
645
655
|
}
|
|
646
656
|
}
|
|
647
|
-
// Update the createSchemaBoxRegistry function's final section:
|
|
648
657
|
const finalRegistry = {};
|
|
649
658
|
for (const tableName in resolvedSchemas) {
|
|
650
659
|
const zodSchemas = createSchema(resolvedSchemas[tableName]);
|
|
@@ -653,7 +662,6 @@ export function createSchemaBox(schemas, resolver) {
|
|
|
653
662
|
zodSchemas: zodSchemas,
|
|
654
663
|
};
|
|
655
664
|
}
|
|
656
|
-
// Simple navigation proxy creator
|
|
657
665
|
const createNavProxy = (currentTable, registry) => {
|
|
658
666
|
return new Proxy({}, {
|
|
659
667
|
get(target, relationName) {
|
|
@@ -664,7 +672,7 @@ export function createSchemaBox(schemas, resolver) {
|
|
|
664
672
|
if (!field?.config?.sql?.schema)
|
|
665
673
|
return undefined;
|
|
666
674
|
const targetSchema = field.config.sql.schema();
|
|
667
|
-
const targetTable = targetSchema?._tableName;
|
|
675
|
+
const targetTable = targetSchema?._tableName;
|
|
668
676
|
if (targetTable && registry[targetTable]) {
|
|
669
677
|
return createNavProxy(targetTable, registry);
|
|
670
678
|
}
|
|
@@ -672,19 +680,88 @@ export function createSchemaBox(schemas, resolver) {
|
|
|
672
680
|
},
|
|
673
681
|
});
|
|
674
682
|
};
|
|
675
|
-
|
|
676
|
-
for (const tableName in
|
|
677
|
-
const
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
+
const cleanerRegistry = {};
|
|
684
|
+
for (const tableName in finalRegistry) {
|
|
685
|
+
const entry = finalRegistry[tableName];
|
|
686
|
+
cleanerRegistry[tableName] = {
|
|
687
|
+
definition: entry.rawSchema,
|
|
688
|
+
schemas: {
|
|
689
|
+
sql: entry.zodSchemas.sqlSchema,
|
|
690
|
+
client: entry.zodSchemas.clientSchema,
|
|
691
|
+
validation: entry.zodSchemas.validationSchema,
|
|
692
|
+
},
|
|
693
|
+
transforms: {
|
|
694
|
+
toClient: entry.zodSchemas.toClient,
|
|
695
|
+
toDb: entry.zodSchemas.toDb,
|
|
696
|
+
},
|
|
697
|
+
defaults: entry.zodSchemas.defaultValues,
|
|
698
|
+
nav: createNavProxy(tableName, finalRegistry),
|
|
699
|
+
// Add this
|
|
700
|
+
RelationSelection: {},
|
|
701
|
+
createView: function (selection) {
|
|
702
|
+
const view = createViewObject(tableName, selection, finalRegistry);
|
|
703
|
+
const defaults = computeViewDefaults(tableName, selection, finalRegistry);
|
|
704
|
+
console.log("View defaults:", defaults); // ADD THIS
|
|
705
|
+
return {
|
|
706
|
+
...view,
|
|
707
|
+
defaults: defaults,
|
|
708
|
+
};
|
|
709
|
+
},
|
|
683
710
|
};
|
|
684
711
|
}
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
712
|
+
return cleanerRegistry;
|
|
713
|
+
}
|
|
714
|
+
function computeViewDefaults(tableName, selection, registry, visited = new Set()) {
|
|
715
|
+
if (visited.has(tableName)) {
|
|
716
|
+
return undefined; // Prevent circular references
|
|
717
|
+
}
|
|
718
|
+
visited.add(tableName);
|
|
719
|
+
const entry = registry[tableName];
|
|
720
|
+
const rawSchema = entry.rawSchema;
|
|
721
|
+
const baseDefaults = { ...entry.zodSchemas.defaultValues };
|
|
722
|
+
if (selection === true || typeof selection !== "object") {
|
|
723
|
+
return baseDefaults;
|
|
724
|
+
}
|
|
725
|
+
// Add relation defaults based on selection
|
|
726
|
+
for (const key in selection) {
|
|
727
|
+
if (!selection[key])
|
|
728
|
+
continue;
|
|
729
|
+
const field = rawSchema[key];
|
|
730
|
+
if (!field?.config?.sql?.schema)
|
|
731
|
+
continue;
|
|
732
|
+
const relationConfig = field.config.sql;
|
|
733
|
+
const targetTable = relationConfig.schema()._tableName;
|
|
734
|
+
// ----- FIX IS HERE -----
|
|
735
|
+
// Look for the defaultConfig on the nested relationConfig object.
|
|
736
|
+
const defaultConfig = relationConfig.defaultConfig;
|
|
737
|
+
// Handle different default configurations
|
|
738
|
+
if (defaultConfig === undefined) {
|
|
739
|
+
// Don't include in defaults
|
|
740
|
+
delete baseDefaults[key];
|
|
741
|
+
}
|
|
742
|
+
else if (defaultConfig === null) {
|
|
743
|
+
baseDefaults[key] = null;
|
|
744
|
+
}
|
|
745
|
+
else if (Array.isArray(defaultConfig)) {
|
|
746
|
+
baseDefaults[key] = [];
|
|
747
|
+
}
|
|
748
|
+
else if (defaultConfig === true) {
|
|
749
|
+
// Generate based on nested selection
|
|
750
|
+
if (relationConfig.type === "hasMany" ||
|
|
751
|
+
relationConfig.type === "manyToMany") {
|
|
752
|
+
const count = relationConfig.defaultCount || 1;
|
|
753
|
+
baseDefaults[key] = Array.from({ length: count }, () => computeViewDefaults(targetTable, selection[key], registry, new Set(visited)));
|
|
754
|
+
}
|
|
755
|
+
else {
|
|
756
|
+
baseDefaults[key] = computeViewDefaults(targetTable, selection[key], registry, new Set(visited));
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
else if (typeof defaultConfig === "object" && "count" in defaultConfig) {
|
|
760
|
+
baseDefaults[key] = Array.from({ length: defaultConfig.count }, () => computeViewDefaults(targetTable, selection[key], registry, new Set(visited)));
|
|
761
|
+
}
|
|
688
762
|
}
|
|
689
|
-
|
|
763
|
+
// NOTE: This was in the original code but is not needed for the recursive logic.
|
|
764
|
+
// It's safe to remove, but also safe to keep.
|
|
765
|
+
// visited.delete(tableName);
|
|
766
|
+
return baseDefaults;
|
|
690
767
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cogsbox-shape",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.110",
|
|
4
4
|
"description": "A TypeScript library for creating type-safe database schemas with Zod validation, SQL type definitions, and automatic client/server transformations. Unifies client, server, and database types through a single schema definition, with built-in support for relationships and serialization.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|