cogsbox-shape 0.5.2 → 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 +44 -8
- package/dist/schema.js +18 -6
- package/package.json +1 -1
package/dist/schema.d.ts
CHANGED
|
@@ -1216,9 +1216,9 @@ type BaseSchemaField<T extends SQLType = SQLType> = {
|
|
|
1216
1216
|
toClient?: (dbValue: any) => any;
|
|
1217
1217
|
toDb?: (clientValue: any) => any;
|
|
1218
1218
|
};
|
|
1219
|
-
type ReferenceField = {
|
|
1219
|
+
type ReferenceField<T extends BaseSchemaField = BaseSchemaField> = {
|
|
1220
1220
|
type: "reference";
|
|
1221
|
-
to: () =>
|
|
1221
|
+
to: () => T;
|
|
1222
1222
|
};
|
|
1223
1223
|
type SchemaField<T extends SQLType = SQLType> = BaseSchemaField<T> | ReferenceField;
|
|
1224
1224
|
export type Schema<T extends Record<string, SchemaField | (() => Relation<any>)>> = {
|
|
@@ -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,19 +1441,22 @@ type InferSerializedSchema<T> = {
|
|
|
1408
1441
|
};
|
|
1409
1442
|
} : never;
|
|
1410
1443
|
};
|
|
1411
|
-
export declare function reference(config: {
|
|
1412
|
-
to: () =>
|
|
1413
|
-
}):
|
|
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
|
-
clientSchema: z.ZodObject<Prettify<
|
|
1417
|
-
defaultValues: Prettify<
|
|
1418
|
-
initialValues: () => Prettify<
|
|
1449
|
+
clientSchema: z.ZodObject<Prettify<OmitNever<InferSchema<T>>>>;
|
|
1450
|
+
defaultValues: Prettify<OmitNever<ConfigWithOptionalProps<T>>>;
|
|
1451
|
+
initialValues: () => Prettify<OmitNever<ConfigWithOptionalProps<T>>>;
|
|
1419
1452
|
serialized: Prettify<InferSerializedSchema<T>> & {
|
|
1420
1453
|
_tableName: string;
|
|
1421
1454
|
__schemaId: string;
|
|
1422
1455
|
};
|
|
1423
1456
|
};
|
|
1457
|
+
type OmitNever<T> = {
|
|
1458
|
+
[K in keyof T as T[K] extends never ? never : K]: T[K];
|
|
1459
|
+
};
|
|
1424
1460
|
type DefaultValue<T> = Prettify<DeepWriteable<InferDefaultValues<T>>>;
|
|
1425
1461
|
type GetMandatoryKeys<T> = {
|
|
1426
1462
|
[P in keyof T]: T[P] extends Exclude<T[P], undefined> ? P : never;
|
package/dist/schema.js
CHANGED
|
@@ -305,7 +305,6 @@ function inferDefaultFromZod(zodType, sqlConfig) {
|
|
|
305
305
|
}
|
|
306
306
|
return undefined;
|
|
307
307
|
}
|
|
308
|
-
// Update reference function
|
|
309
308
|
export function reference(config) {
|
|
310
309
|
return {
|
|
311
310
|
type: "reference",
|
|
@@ -389,13 +388,14 @@ function createSerializableSchema(schema) {
|
|
|
389
388
|
}
|
|
390
389
|
return serializableSchema;
|
|
391
390
|
}
|
|
391
|
+
// Update the createSchema function to handle references in the main loop
|
|
392
392
|
export function createSchema(schema) {
|
|
393
393
|
const serialized = createSerializableSchema(schema);
|
|
394
394
|
const dbFields = {};
|
|
395
395
|
const clientFields = {};
|
|
396
396
|
const defaultValues = {};
|
|
397
397
|
for (const [key, value] of Object.entries(schema)) {
|
|
398
|
-
if (key === "_tableName")
|
|
398
|
+
if (key === "_tableName" || key === "__schemaId")
|
|
399
399
|
continue;
|
|
400
400
|
if (typeof value === "function") {
|
|
401
401
|
const relation = value();
|
|
@@ -437,10 +437,22 @@ export function createSchema(schema) {
|
|
|
437
437
|
}
|
|
438
438
|
continue;
|
|
439
439
|
}
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
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
|
+
}
|
|
444
456
|
}
|
|
445
457
|
return {
|
|
446
458
|
dbSchema: z.object(dbFields),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cogsbox-shape",
|
|
3
|
-
"version": "0.5.
|
|
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",
|