cogsbox-shape 0.5.119 → 0.5.120

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 +95 -33
  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 Reference<any> ? Resolution : Field extends PlaceholderRelation<infer RelType> ? Resolution extends {
225
+ type ResolveField<Field, Resolution> = 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>;
@@ -235,17 +235,17 @@ type ResolveField<Field, Resolution, AllSchemas extends Record<string, any>> = F
235
235
  } : RelType extends "manyToMany" ? BaseRelationConfig<TargetSchema> & {
236
236
  type: "manyToMany";
237
237
  } : never, RelType extends "hasMany" | "manyToMany" ? z.ZodArray<z.ZodObject<any>> : z.ZodObject<any>, RelType extends "hasMany" | "manyToMany" ? z.ZodArray<z.ZodObject<any>> : z.ZodObject<any>, RelType extends "hasMany" | "manyToMany" ? any[] : any, RelType extends "hasMany" | "manyToMany" ? z.ZodArray<z.ZodObject<any>> : z.ZodObject<any>, RelType extends "hasMany" | "manyToMany" ? z.ZodArray<z.ZodObject<any>> : z.ZodObject<any>> : never : never : Field;
238
- type ResolveSchema<Schema extends SchemaWithPlaceholders, Resolutions extends Record<string, any>, AllSchemas extends Record<string, any>> = {
239
- [K in keyof Schema]: K extends keyof Resolutions ? ResolveField<Schema[K], Resolutions[K], AllSchemas> : Schema[K];
238
+ type ResolveSchema<Schema extends SchemaWithPlaceholders, Resolutions extends Record<string, any>> = {
239
+ [K in keyof Schema]: K extends keyof Resolutions ? ResolveField<Schema[K], Resolutions[K]> : Schema[K];
240
240
  };
241
241
  type ResolvedRegistryWithSchemas<S extends Record<string, SchemaWithPlaceholders>, R extends ResolutionMap<S>> = {
242
242
  [K in keyof S]: {
243
- rawSchema: ResolveSchema<S[K], K extends keyof R ? (R[K] extends object ? R[K] : {}) : {}, S>;
243
+ rawSchema: ResolveSchema<S[K], K extends keyof R ? (R[K] extends object ? R[K] : {}) : {}>;
244
244
  zodSchemas: {
245
- sqlSchema: z.ZodObject<Prettify<DeriveSchemaByKey<ResolveSchema<S[K], K extends keyof R ? (R[K] extends object ? R[K] : {}) : {}, S>, "zodSqlSchema">>>;
246
- clientSchema: z.ZodObject<Prettify<DeriveSchemaByKey<ResolveSchema<S[K], K extends keyof R ? (R[K] extends object ? R[K] : {}) : {}, S>, "zodClientSchema">>>;
247
- validationSchema: z.ZodObject<Prettify<DeriveSchemaByKey<ResolveSchema<S[K], K extends keyof R ? (R[K] extends object ? R[K] : {}) : {}, S>, "zodValidationSchema">>>;
248
- defaultValues: Prettify<DeriveDefaults<ResolveSchema<S[K], K extends keyof R ? (R[K] extends object ? R[K] : {}) : {}, S>>>;
245
+ sqlSchema: z.ZodObject<Prettify<DeriveSchemaByKey<ResolveSchema<S[K], K extends keyof R ? (R[K] extends object ? R[K] : {}) : {}>, "zodSqlSchema">>>;
246
+ clientSchema: z.ZodObject<Prettify<DeriveSchemaByKey<ResolveSchema<S[K], K extends keyof R ? (R[K] extends object ? R[K] : {}) : {}>, "zodClientSchema">>>;
247
+ validationSchema: z.ZodObject<Prettify<DeriveSchemaByKey<ResolveSchema<S[K], K extends keyof R ? (R[K] extends object ? R[K] : {}) : {}>, "zodValidationSchema">>>;
248
+ defaultValues: Prettify<DeriveDefaults<ResolveSchema<S[K], K extends keyof R ? (R[K] extends object ? R[K] : {}) : {}>>>;
249
249
  toClient: (dbObject: any) => any;
250
250
  toDb: (clientObject: any) => any;
251
251
  };
@@ -259,17 +259,96 @@ type IsRelationField<Field> = Field extends {
259
259
  };
260
260
  };
261
261
  } ? true : false;
262
- type GetRelationRegistryKey<Field, TRegistry extends RegistryShape> = Field extends {
262
+ type GetRelationRegistryKey<Field, TRegistry> = Field extends {
263
263
  config: {
264
264
  sql: {
265
- schema: () => infer TargetSchema;
265
+ schema: () => infer S;
266
266
  };
267
267
  };
268
- } ? TargetSchema extends {
269
- _tableName: infer TableName;
268
+ } ? S extends {
269
+ _tableName: infer T;
270
270
  } ? {
271
- [K in keyof TRegistry]: TRegistry[K]["rawSchema"]["_tableName"] extends TableName ? K : never;
271
+ [K in keyof TRegistry]: TRegistry[K] extends {
272
+ definition: {
273
+ _tableName: T;
274
+ };
275
+ } ? K : never;
272
276
  }[keyof TRegistry] : never : never;
277
+ type OmitRelationFields<Shape, RawSchema> = Omit<Shape, {
278
+ [K in keyof Shape]: K extends keyof RawSchema ? IsRelationField<RawSchema[K]> extends true ? K : never : never;
279
+ }[keyof Shape]>;
280
+ type _DeriveViewShape<TTableName extends keyof TRegistry, TSelection, TRegistry extends Record<string, {
281
+ definition: Record<string, any>;
282
+ schemas: {
283
+ client: z.ZodObject<any>;
284
+ validation: z.ZodObject<any>;
285
+ };
286
+ }>, TKey extends "client" | "validation", Depth extends any[] = []> = Depth["length"] extends 10 ? any : TRegistry[TTableName]["schemas"][TKey] extends z.ZodObject<infer BaseShape> ? TSelection extends Record<string, any> ? Prettify<OmitRelationFields<BaseShape, TRegistry[TTableName]["definition"]> & {
287
+ [K in keyof TSelection & keyof TRegistry[TTableName]["definition"] as IsRelationField<TRegistry[TTableName]["definition"][K]> extends true ? K : never]: GetRelationRegistryKey<TRegistry[TTableName]["definition"][K], TRegistry> extends infer TargetKey ? TargetKey extends keyof TRegistry ? TRegistry[TTableName]["definition"][K] extends {
288
+ config: {
289
+ sql: {
290
+ type: infer RelType;
291
+ };
292
+ };
293
+ } ? RelType extends "hasMany" | "manyToMany" ? z.ZodArray<z.ZodObject<_DeriveViewShape<TargetKey, TSelection[K], TRegistry, TKey, [
294
+ ...Depth,
295
+ 1
296
+ ]>>> : z.ZodOptional<z.ZodObject<_DeriveViewShape<TargetKey, TSelection[K], TRegistry, TKey, [
297
+ ...Depth,
298
+ 1
299
+ ]>>> : never : never : never;
300
+ }> : OmitRelationFields<BaseShape, TRegistry[TTableName]["definition"]> : never;
301
+ type DeriveViewDefaults<TTableName extends keyof TRegistry, TSelection, TRegistry extends Record<string, {
302
+ definition: Record<string, any>;
303
+ defaults: Record<string, any>;
304
+ }>, Depth extends any[] = []> = Prettify<TRegistry[TTableName]["defaults"] & (TSelection extends Record<string, any> ? {
305
+ -readonly [K in keyof TSelection & keyof TRegistry[TTableName]["definition"]]?: TRegistry[TTableName]["definition"][K] extends {
306
+ config: {
307
+ sql: {
308
+ type: infer RelType;
309
+ schema: any;
310
+ };
311
+ };
312
+ } ? GetRelationRegistryKey<TRegistry[TTableName]["definition"][K], TRegistry> extends infer TargetKey ? TargetKey extends keyof TRegistry ? RelType extends "hasMany" | "manyToMany" ? DeriveViewDefaults<TargetKey, TSelection[K], TRegistry, [
313
+ ...Depth,
314
+ 1
315
+ ]>[] : DeriveViewDefaults<TargetKey, TSelection[K], TRegistry, [
316
+ ...Depth,
317
+ 1
318
+ ]> | null : never : never : never;
319
+ } : {})>;
320
+ type _Internal_DeriveViewDefaults<TTableName extends keyof TRegistry, TSelection, TRegistry extends RegistryShape, Depth extends any[] = []> = Prettify<TRegistry[TTableName]["zodSchemas"]["defaultValues"] & (TSelection extends Record<string, any> ? {
321
+ -readonly [K in keyof TSelection & keyof TRegistry[TTableName]["rawSchema"]]?: TRegistry[TTableName]["rawSchema"][K] extends {
322
+ config: {
323
+ sql: {
324
+ type: infer RelType;
325
+ schema: any;
326
+ };
327
+ };
328
+ } ? GetRelationRegistryKey<TRegistry[TTableName]["rawSchema"][K], TRegistry> extends infer TargetKey ? TargetKey extends keyof TRegistry ? RelType extends "hasMany" | "manyToMany" ? _Internal_DeriveViewDefaults<TargetKey, TSelection[K], TRegistry, [
329
+ ...Depth,
330
+ 1
331
+ ]>[] : _Internal_DeriveViewDefaults<TargetKey, TSelection[K], TRegistry, [
332
+ ...Depth,
333
+ 1
334
+ ]> | null : never : never : never;
335
+ } : {})>;
336
+ export type DeriveViewResult<TTableName extends keyof TRegistry, TSelection, TRegistry extends Record<string, {
337
+ definition: Record<string, any> & {
338
+ _tableName: string;
339
+ };
340
+ schemas: {
341
+ sql: z.ZodObject<any>;
342
+ client: z.ZodObject<any>;
343
+ validation: z.ZodObject<any>;
344
+ };
345
+ defaults: Record<string, any>;
346
+ }>> = {
347
+ sql: TRegistry[TTableName]["schemas"]["sql"];
348
+ client: z.ZodObject<_DeriveViewShape<TTableName, TSelection, TRegistry, "client">>;
349
+ validation: z.ZodObject<_DeriveViewShape<TTableName, TSelection, TRegistry, "validation">>;
350
+ defaults: DeriveViewDefaults<TTableName, TSelection, TRegistry>;
351
+ };
273
352
  type NavigationProxy<CurrentTable extends string, Registry extends RegistryShape> = CurrentTable extends keyof Registry ? {
274
353
  [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;
275
354
  } : {};
@@ -308,23 +387,6 @@ type RegistryShape = Record<string, {
308
387
  toDb: (clientObject: any) => any;
309
388
  };
310
389
  }>;
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> ? {
312
- -readonly [K in keyof TSelection & keyof TRegistry[TTableName]["rawSchema"]]?: TRegistry[TTableName]["rawSchema"][K] extends {
313
- config: {
314
- sql: {
315
- type: infer RelType;
316
- schema: any;
317
- };
318
- };
319
- } ? GetRelationRegistryKey<TRegistry[TTableName]["rawSchema"][K], TRegistry> extends infer TargetKey ? TargetKey extends keyof TRegistry ? RelType extends "hasMany" | "manyToMany" ? DeriveViewDefaults<TargetKey, TSelection[K], TRegistry, [
320
- ...Depth,
321
- 1
322
- ]>[] : // Recursively call with the CORRECT key (TargetKey)
323
- DeriveViewDefaults<TargetKey, TSelection[K], TRegistry, [
324
- ...Depth,
325
- 1
326
- ]> | null : never : never : never;
327
- } : {})>;
328
390
  type CreateSchemaBoxReturn<S extends Record<string, SchemaWithPlaceholders>, R extends ResolutionMap<S>, Resolved extends RegistryShape = ResolvedRegistryWithSchemas<S, R> extends RegistryShape ? ResolvedRegistryWithSchemas<S, R> : RegistryShape> = {
329
391
  [K in keyof Resolved]: {
330
392
  definition: Resolved[K]["rawSchema"];
@@ -342,9 +404,9 @@ type CreateSchemaBoxReturn<S extends Record<string, SchemaWithPlaceholders>, R e
342
404
  RelationSelection: NavigationToSelection<NavigationProxy<K & string, Resolved>>;
343
405
  createView: <const TSelection extends NavigationToSelection<NavigationProxy<K & string, Resolved>>>(selection: TSelection) => {
344
406
  sql: Resolved[K]["zodSchemas"]["sqlSchema"];
345
- client: z.ZodObject<BuildZodShape<K, TSelection, "clientSchema", Resolved>>;
346
- validation: z.ZodObject<BuildZodShape<K, TSelection, "validationSchema", Resolved>>;
347
- defaults: Prettify<DeriveViewDefaults<K & string, TSelection, Resolved>>;
407
+ client: z.ZodObject<BuildZodShape<K & string, TSelection, "clientSchema", Resolved>>;
408
+ validation: z.ZodObject<BuildZodShape<K & string, TSelection, "validationSchema", Resolved>>;
409
+ defaults: Prettify<_Internal_DeriveViewDefaults<K & string, TSelection, Resolved>>;
348
410
  };
349
411
  };
350
412
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cogsbox-shape",
3
- "version": "0.5.119",
3
+ "version": "0.5.120",
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",