cogsbox-shape 0.5.5 → 0.5.7

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
@@ -1216,9 +1216,15 @@ type BaseSchemaField<T extends SQLType = SQLType> = {
1216
1216
  toClient?: (dbValue: any) => any;
1217
1217
  toDb?: (clientValue: any) => any;
1218
1218
  };
1219
- type ReferenceField<T extends BaseSchemaField = BaseSchemaField> = {
1219
+ type ReferenceField = {
1220
1220
  type: "reference";
1221
- to: () => T;
1221
+ to: () => any;
1222
+ sql: SQLType;
1223
+ zodDbSchema: z.ZodType<any>;
1224
+ zodClientSchema: z.ZodType<any>;
1225
+ defaultValue?: any;
1226
+ toClient?: (dbValue: any) => any;
1227
+ toDb?: (clientValue: any) => any;
1222
1228
  };
1223
1229
  type SchemaField<T extends SQLType = SQLType> = BaseSchemaField<T> | ReferenceField;
1224
1230
  export type Schema<T extends Record<string, SchemaField | (() => Relation<any>)>> = {
@@ -1243,12 +1249,6 @@ type Prettify<T> = {
1243
1249
  } & {};
1244
1250
  type InferSchema<T> = {
1245
1251
  [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 {
1252
1252
  zodClientSchema: infer ClientType extends z.ZodTypeAny;
1253
1253
  toClient?: (dbValue: any) => infer TransformedType;
1254
1254
  } ? T[K]["toClient"] extends Function ? z.ZodType<TransformedType> : ClientType extends z.ZodNever ? z.ZodOptional<z.ZodDate> : ClientType : T[K] extends () => {
@@ -1256,12 +1256,6 @@ type InferSchema<T> = {
1256
1256
  schema: infer S;
1257
1257
  } ? z.ZodArray<z.ZodObject<{
1258
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 {
1265
1259
  zodClientSchema: z.ZodTypeAny;
1266
1260
  toClient?: (dbValue: any) => any;
1267
1261
  } ? 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;
@@ -1270,12 +1264,6 @@ type InferSchema<T> = {
1270
1264
  schema: infer S;
1271
1265
  } ? z.ZodObject<{
1272
1266
  [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 {
1279
1267
  zodClientSchema: z.ZodTypeAny;
1280
1268
  toClient?: (dbValue: any) => any;
1281
1269
  } ? 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;
@@ -1283,11 +1271,6 @@ type InferSchema<T> = {
1283
1271
  };
1284
1272
  export type InferDBSchema<T> = {
1285
1273
  [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 {
1291
1274
  zodDbSchema: infer DbType extends z.ZodTypeAny;
1292
1275
  } ? DbType : T[K] extends {
1293
1276
  dbType: infer DbType extends z.ZodTypeAny;
@@ -1296,11 +1279,6 @@ export type InferDBSchema<T> = {
1296
1279
  schema: infer S;
1297
1280
  } ? z.ZodArray<z.ZodObject<{
1298
1281
  [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 {
1304
1282
  zodDbSchema: infer DbType extends z.ZodTypeAny;
1305
1283
  } ? DbType : never;
1306
1284
  }>> : T[K] extends () => {
@@ -1308,11 +1286,6 @@ export type InferDBSchema<T> = {
1308
1286
  schema: infer S;
1309
1287
  } ? z.ZodObject<{
1310
1288
  [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 {
1316
1289
  zodDbSchema: infer DbType extends z.ZodTypeAny;
1317
1290
  } ? DbType : never;
1318
1291
  }> : never;
@@ -1441,9 +1414,11 @@ type InferSerializedSchema<T> = {
1441
1414
  };
1442
1415
  } : never;
1443
1416
  };
1444
- export declare function reference<T extends BaseSchemaField>(config: {
1417
+ type ShapeFieldReturn = ReturnType<typeof shape.sql>;
1418
+ export declare function reference<T = any>(config: {
1445
1419
  to: () => T;
1446
- }): ReferenceField<T>;
1420
+ field: ShapeFieldReturn;
1421
+ }): ReferenceField;
1447
1422
  export declare function createSchema<T extends Schema<any>>(schema: T): {
1448
1423
  dbSchema: z.ZodObject<Prettify<InferDBSchema<T>>>;
1449
1424
  clientSchema: z.ZodObject<Prettify<OmitNever<InferSchema<T>>>>;
package/dist/schema.js CHANGED
@@ -309,6 +309,12 @@ export function reference(config) {
309
309
  return {
310
310
  type: "reference",
311
311
  to: config.to,
312
+ sql: config.field.sql,
313
+ zodDbSchema: config.field.zodDbSchema,
314
+ zodClientSchema: config.field.zodClientSchema,
315
+ defaultValue: config.field.defaultValue,
316
+ toClient: config.field.toClient,
317
+ toDb: config.field.toDb,
312
318
  };
313
319
  }
314
320
  function createSerializableSchema(schema) {
@@ -388,14 +394,13 @@ function createSerializableSchema(schema) {
388
394
  }
389
395
  return serializableSchema;
390
396
  }
391
- // Update the createSchema function to handle references in the main loop
392
397
  export function createSchema(schema) {
393
398
  const serialized = createSerializableSchema(schema);
394
399
  const dbFields = {};
395
400
  const clientFields = {};
396
401
  const defaultValues = {};
397
402
  for (const [key, value] of Object.entries(schema)) {
398
- if (key === "_tableName" || key === "__schemaId")
403
+ if (key === "_tableName")
399
404
  continue;
400
405
  if (typeof value === "function") {
401
406
  const relation = value();
@@ -437,22 +442,10 @@ export function createSchema(schema) {
437
442
  }
438
443
  continue;
439
444
  }
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
- }
445
+ dbFields[key] = value.zodDbSchema;
446
+ clientFields[key] = value.zodClientSchema;
447
+ defaultValues[key] =
448
+ value.defaultValue ?? inferDefaultFromZod(value.zodClientSchema);
456
449
  }
457
450
  return {
458
451
  dbSchema: z.object(dbFields),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cogsbox-shape",
3
- "version": "0.5.5",
3
+ "version": "0.5.7",
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",