cogsbox-shape 0.5.114 → 0.5.116

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/schema.d.ts +17 -26
  2. package/package.json +1 -1
package/dist/schema.d.ts CHANGED
@@ -222,7 +222,7 @@ type ResolutionMap<S extends Record<string, SchemaWithPlaceholders>> = {
222
222
  } : never;
223
223
  };
224
224
  };
225
- type ResolveField<Field, Resolution, AllSchemas extends Record<string, any>> = Field extends PlaceholderReference ? Resolution : Field extends PlaceholderRelation<infer RelType> ? Resolution extends {
225
+ type ResolveField<Field, Resolution, AllSchemas extends Record<string, any>> = Field extends PlaceholderReference ? Resolution : Field extends Reference<any> ? Resolution : Field extends PlaceholderRelation<infer RelType> ? Resolution extends {
226
226
  toKey: infer ToKey;
227
227
  } ? ToKey extends {
228
228
  __parentTableType: infer TargetSchema extends Schema<any>;
@@ -259,7 +259,7 @@ type IsRelationField<Field> = Field extends {
259
259
  };
260
260
  };
261
261
  } ? true : false;
262
- type GetRelationTarget<Field> = Field extends {
262
+ type GetRelationRegistryKey<Field, TRegistry extends RegistryShape> = Field extends {
263
263
  config: {
264
264
  sql: {
265
265
  schema: () => infer TargetSchema;
@@ -267,35 +267,28 @@ type GetRelationTarget<Field> = Field extends {
267
267
  };
268
268
  } ? TargetSchema extends {
269
269
  _tableName: infer TableName;
270
- } ? TableName : never : never;
270
+ } ? {
271
+ [K in keyof TRegistry]: TRegistry[K]["rawSchema"]["_tableName"] extends TableName ? K : never;
272
+ }[keyof TRegistry] : never : never;
271
273
  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;
274
+ [K in keyof Registry[CurrentTable]["rawSchema"] as IsRelationField<Registry[CurrentTable]["rawSchema"][K]> extends true ? K : never]: GetRelationRegistryKey<Registry[CurrentTable]["rawSchema"][K], Registry> extends infer TargetKey ? TargetKey extends keyof Registry ? NavigationProxy<TargetKey & string, Registry> : never : never;
273
275
  } : {};
274
276
  type NavigationToSelection<Nav> = Nav extends object ? {
275
277
  [K in keyof Nav]?: boolean | NavigationToSelection<Nav[K]>;
276
278
  } : never;
277
279
  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> ? // First get the base fields without relations
278
280
  {
279
- [K in keyof Base as K extends keyof TRegistry[TTableName]["rawSchema"] ? TRegistry[TTableName]["rawSchema"][K] extends {
280
- config: {
281
- sql: {
282
- schema: any;
283
- };
284
- };
285
- } ? never : K : K]: Base[K];
281
+ [K in keyof Base as K extends keyof TRegistry[TTableName]["rawSchema"] ? IsRelationField<TRegistry[TTableName]["rawSchema"][K]> extends true ? never : K : K]: Base[K];
286
282
  } & {
287
- [K in keyof TSelection & keyof TRegistry[TTableName]["rawSchema"]]: TRegistry[TTableName]["rawSchema"][K] extends {
283
+ [K in keyof TSelection & keyof TRegistry[TTableName]["rawSchema"] as IsRelationField<TRegistry[TTableName]["rawSchema"][K]> extends true ? K : never]: GetRelationRegistryKey<TRegistry[TTableName]["rawSchema"][K], TRegistry> extends infer TargetKey ? TargetKey extends keyof TRegistry ? TRegistry[TTableName]["rawSchema"][K] extends {
288
284
  config: {
289
285
  sql: {
290
286
  type: infer RelType;
291
- schema: () => infer S;
292
287
  };
293
288
  };
294
- } ? S extends {
295
- _tableName: infer Target;
296
- } ? 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;
289
+ } ? RelType extends "hasMany" | "manyToMany" ? z.ZodArray<z.ZodObject<TSelection[K] extends true ? OmitRelations<TRegistry[TargetKey]["zodSchemas"][TKey] extends z.ZodObject<infer Shape> ? Shape : never, TRegistry[TargetKey]["rawSchema"]> : BuildZodShape<TargetKey, TSelection[K], TKey, TRegistry>>> : z.ZodOptional<z.ZodObject<TSelection[K] extends true ? OmitRelations<TRegistry[TargetKey]["zodSchemas"][TKey] extends z.ZodObject<infer Shape> ? Shape : never, TRegistry[TargetKey]["rawSchema"]> : BuildZodShape<TargetKey, TSelection[K], TKey, TRegistry>>> : never : never : never;
297
290
  } : Base : never;
298
- type OmitRelations<Shape, RawSchema> = Omit<Shape, {
291
+ export type OmitRelations<Shape, RawSchema> = Omit<Shape, {
299
292
  [K in keyof Shape]: K extends keyof RawSchema ? RawSchema[K] extends {
300
293
  config: {
301
294
  sql: {
@@ -315,25 +308,23 @@ type RegistryShape = Record<string, {
315
308
  toDb: (clientObject: any) => any;
316
309
  };
317
310
  }>;
318
- type DeriveViewDefaults<TTableName extends keyof TRegistry, TSelection, TRegistry extends RegistryShape, Depth extends any[] = []> = Depth["length"] extends 10 ? any : // 1. Start with the base defaults for the table (id, name, etc.)
319
- DeriveDefaults<TRegistry[TTableName]["rawSchema"]> & (TSelection extends Record<string, any> ? {
311
+ type DeriveViewDefaults<TTableName extends keyof TRegistry, TSelection, TRegistry extends RegistryShape, Depth extends any[] = []> = Depth["length"] extends 10 ? any : Prettify<DeriveDefaults<TRegistry[TTableName]["rawSchema"]> & (TSelection extends Record<string, any> ? {
320
312
  -readonly [K in keyof TSelection & keyof TRegistry[TTableName]["rawSchema"]]?: TRegistry[TTableName]["rawSchema"][K] extends {
321
313
  config: {
322
314
  sql: {
323
315
  type: infer RelType;
324
- schema: () => infer S;
316
+ schema: any;
325
317
  };
326
318
  };
327
- } ? S extends {
328
- _tableName: infer Target;
329
- } ? Target extends keyof TRegistry ? RelType extends "hasMany" | "manyToMany" ? DeriveViewDefaults<Target, TSelection[K], TRegistry, [
319
+ } ? GetRelationRegistryKey<TRegistry[TTableName]["rawSchema"][K], TRegistry> extends infer TargetKey ? TargetKey extends keyof TRegistry ? RelType extends "hasMany" | "manyToMany" ? DeriveViewDefaults<TargetKey, TSelection[K], TRegistry, [
330
320
  ...Depth,
331
321
  1
332
- ]>[] : DeriveViewDefaults<Target, TSelection[K], TRegistry, [
322
+ ]>[] : // Recursively call with the CORRECT key (TargetKey)
323
+ DeriveViewDefaults<TargetKey, TSelection[K], TRegistry, [
333
324
  ...Depth,
334
325
  1
335
- ]> | null | undefined : never : never : never;
336
- } : {});
326
+ ]> | null : never : never : never;
327
+ } : {})>;
337
328
  type CreateSchemaBoxReturn<S extends Record<string, SchemaWithPlaceholders>, R extends ResolutionMap<S>, Resolved extends RegistryShape = ResolvedRegistryWithSchemas<S, R> extends RegistryShape ? ResolvedRegistryWithSchemas<S, R> : RegistryShape> = {
338
329
  [K in keyof Resolved]: {
339
330
  definition: Resolved[K]["rawSchema"];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cogsbox-shape",
3
- "version": "0.5.114",
3
+ "version": "0.5.116",
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",