cogsbox-shape 0.5.4 → 0.5.5

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 CHANGED
@@ -1243,6 +1243,12 @@ type Prettify<T> = {
1243
1243
  } & {};
1244
1244
  type InferSchema<T> = {
1245
1245
  [K in keyof T as K extends "_tableName" | "__schemaId" ? never : K]: T[K] extends {
1246
+ type: "reference";
1247
+ to: () => infer RefField;
1248
+ } ? RefField extends {
1249
+ zodClientSchema: infer ClientType extends z.ZodTypeAny;
1250
+ toClient?: (dbValue: any) => infer TransformedType;
1251
+ } ? RefField["toClient"] extends Function ? z.ZodType<TransformedType> : ClientType extends z.ZodNever ? z.ZodOptional<z.ZodDate> : ClientType : never : T[K] extends {
1246
1252
  zodClientSchema: infer ClientType extends z.ZodTypeAny;
1247
1253
  toClient?: (dbValue: any) => infer TransformedType;
1248
1254
  } ? T[K]["toClient"] extends Function ? z.ZodType<TransformedType> : ClientType extends z.ZodNever ? z.ZodOptional<z.ZodDate> : ClientType : T[K] extends () => {
@@ -1250,6 +1256,12 @@ type InferSchema<T> = {
1250
1256
  schema: infer S;
1251
1257
  } ? z.ZodArray<z.ZodObject<{
1252
1258
  [P in keyof S as P extends "_tableName" | "__schemaId" ? never : P]: S[P] extends {
1259
+ type: "reference";
1260
+ to: () => infer RefField;
1261
+ } ? RefField extends {
1262
+ zodClientSchema: z.ZodTypeAny;
1263
+ toClient?: (dbValue: any) => any;
1264
+ } ? RefField["toClient"] extends Function ? z.ZodType<ReturnType<RefField["toClient"]>> : RefField["zodClientSchema"] extends z.ZodNever ? z.ZodOptional<z.ZodDate> : RefField["zodClientSchema"] : never : S[P] extends {
1253
1265
  zodClientSchema: z.ZodTypeAny;
1254
1266
  toClient?: (dbValue: any) => any;
1255
1267
  } ? S[P]["toClient"] extends Function ? z.ZodType<ReturnType<S[P]["toClient"]>> : S[P]["zodClientSchema"] extends z.ZodNever ? z.ZodOptional<z.ZodDate> : S[P]["zodClientSchema"] : never;
@@ -1258,6 +1270,12 @@ type InferSchema<T> = {
1258
1270
  schema: infer S;
1259
1271
  } ? z.ZodObject<{
1260
1272
  [P in keyof S as P extends "_tableName" | "__schemaId" ? never : P]: S[P] extends {
1273
+ type: "reference";
1274
+ to: () => infer RefField;
1275
+ } ? RefField extends {
1276
+ zodClientSchema: z.ZodTypeAny;
1277
+ toClient?: (dbValue: any) => any;
1278
+ } ? RefField["toClient"] extends Function ? z.ZodType<ReturnType<RefField["toClient"]>> : RefField["zodClientSchema"] extends z.ZodNever ? z.ZodOptional<z.ZodDate> : RefField["zodClientSchema"] : never : S[P] extends {
1261
1279
  zodClientSchema: z.ZodTypeAny;
1262
1280
  toClient?: (dbValue: any) => any;
1263
1281
  } ? S[P]["toClient"] extends Function ? z.ZodType<ReturnType<S[P]["toClient"]>> : S[P]["zodClientSchema"] extends z.ZodNever ? z.ZodOptional<z.ZodDate> : S[P]["zodClientSchema"] : never;
@@ -1265,6 +1283,11 @@ type InferSchema<T> = {
1265
1283
  };
1266
1284
  export type InferDBSchema<T> = {
1267
1285
  [K in keyof T as K extends "_tableName" | "__schemaId" ? never : K]: T[K] extends {
1286
+ type: "reference";
1287
+ to: () => infer RefField;
1288
+ } ? RefField extends {
1289
+ zodDbSchema: infer DbType extends z.ZodTypeAny;
1290
+ } ? DbType : never : T[K] extends {
1268
1291
  zodDbSchema: infer DbType extends z.ZodTypeAny;
1269
1292
  } ? DbType : T[K] extends {
1270
1293
  dbType: infer DbType extends z.ZodTypeAny;
@@ -1273,6 +1296,11 @@ export type InferDBSchema<T> = {
1273
1296
  schema: infer S;
1274
1297
  } ? z.ZodArray<z.ZodObject<{
1275
1298
  [P in keyof S as P extends "_tableName" | "__schemaId" ? never : P]: S[P] extends {
1299
+ type: "reference";
1300
+ to: () => infer RefField;
1301
+ } ? RefField extends {
1302
+ zodDbSchema: infer DbType extends z.ZodTypeAny;
1303
+ } ? DbType : never : S[P] extends {
1276
1304
  zodDbSchema: infer DbType extends z.ZodTypeAny;
1277
1305
  } ? DbType : never;
1278
1306
  }>> : T[K] extends () => {
@@ -1280,6 +1308,11 @@ export type InferDBSchema<T> = {
1280
1308
  schema: infer S;
1281
1309
  } ? z.ZodObject<{
1282
1310
  [P in keyof S as P extends "_tableName" | "__schemaId" ? never : P]: S[P] extends {
1311
+ type: "reference";
1312
+ to: () => infer RefField;
1313
+ } ? RefField extends {
1314
+ zodDbSchema: infer DbType extends z.ZodTypeAny;
1315
+ } ? DbType : never : S[P] extends {
1283
1316
  zodDbSchema: infer DbType extends z.ZodTypeAny;
1284
1317
  } ? DbType : never;
1285
1318
  }> : never;
@@ -1408,9 +1441,9 @@ type InferSerializedSchema<T> = {
1408
1441
  };
1409
1442
  } : never;
1410
1443
  };
1411
- export declare function reference<T extends () => BaseSchemaField>(config: {
1412
- to: T;
1413
- }): SchemaField;
1444
+ export declare function reference<T extends BaseSchemaField>(config: {
1445
+ to: () => T;
1446
+ }): ReferenceField<T>;
1414
1447
  export declare function createSchema<T extends Schema<any>>(schema: T): {
1415
1448
  dbSchema: z.ZodObject<Prettify<InferDBSchema<T>>>;
1416
1449
  clientSchema: z.ZodObject<Prettify<OmitNever<InferSchema<T>>>>;
package/dist/schema.js CHANGED
@@ -388,13 +388,14 @@ function createSerializableSchema(schema) {
388
388
  }
389
389
  return serializableSchema;
390
390
  }
391
+ // Update the createSchema function to handle references in the main loop
391
392
  export function createSchema(schema) {
392
393
  const serialized = createSerializableSchema(schema);
393
394
  const dbFields = {};
394
395
  const clientFields = {};
395
396
  const defaultValues = {};
396
397
  for (const [key, value] of Object.entries(schema)) {
397
- if (key === "_tableName")
398
+ if (key === "_tableName" || key === "__schemaId")
398
399
  continue;
399
400
  if (typeof value === "function") {
400
401
  const relation = value();
@@ -436,10 +437,22 @@ export function createSchema(schema) {
436
437
  }
437
438
  continue;
438
439
  }
439
- dbFields[key] = value.zodDbSchema;
440
- clientFields[key] = value.zodClientSchema;
441
- defaultValues[key] =
442
- value.defaultValue ?? inferDefaultFromZod(value.zodClientSchema);
440
+ // Handle references - this is the key addition
441
+ if (value && typeof value === "object" && value.type === "reference") {
442
+ const referencedField = value.to();
443
+ dbFields[key] = referencedField.zodDbSchema;
444
+ clientFields[key] = referencedField.zodClientSchema;
445
+ defaultValues[key] =
446
+ referencedField.defaultValue ??
447
+ inferDefaultFromZod(referencedField.zodClientSchema);
448
+ }
449
+ else {
450
+ // Handle regular fields
451
+ dbFields[key] = value.zodDbSchema;
452
+ clientFields[key] = value.zodClientSchema;
453
+ defaultValues[key] =
454
+ value.defaultValue ?? inferDefaultFromZod(value.zodClientSchema);
455
+ }
443
456
  }
444
457
  return {
445
458
  dbSchema: z.object(dbFields),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cogsbox-shape",
3
- "version": "0.5.4",
3
+ "version": "0.5.5",
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",