1+ import type { CallbackData } from "./index.ts" ;
2+
13export type Prettify < T > = { [ Key in keyof T ] : T [ Key ] } & { } ;
24
3- type AllowedTypes = "string" | "number" | "boolean" | "enum" | "uuid" ;
5+ type AllowedTypes = "string" | "number" | "boolean" | "enum" | "uuid" | "data" ;
46
57export interface FieldTypeToTsType <
68 Enum extends unknown [ ] | readonly unknown [ ] ,
9+ Data extends CallbackData = never ,
710> {
811 string : string ;
912 number : number ;
1013 boolean : boolean ;
1114 enum : Enum ;
1215 uuid : string ;
16+ data : InferDataPack < Data > ;
1317}
1418
1519export type AddFieldOutput <
1620 T extends AllowedTypes ,
1721 Key extends string ,
1822 Optional extends boolean = false ,
1923 Enum extends unknown [ ] = never ,
20- Default extends FieldTypeToTsType < Enum > [ T ] = never ,
24+ Default extends FieldTypeToTsType < Enum , Data > [ T ] = never ,
25+ Data extends CallbackData = never ,
2126> = [ Default ] extends [ never ]
2227 ? Optional extends true
23- ? { [ K in Key ] ?: FieldTypeToTsType < Enum > [ T ] }
24- : { [ K in Key ] : FieldTypeToTsType < Enum > [ T ] }
25- : { [ K in Key ] : FieldTypeToTsType < Enum > [ T ] } ;
28+ ? { [ K in Key ] ?: FieldTypeToTsType < Enum , Data > [ T ] }
29+ : { [ K in Key ] : FieldTypeToTsType < Enum , Data > [ T ] }
30+ : { [ K in Key ] : FieldTypeToTsType < Enum , Data > [ T ] } ;
2631
2732export type AddFieldInput <
2833 T extends AllowedTypes ,
2934 Key extends string ,
3035 Optional extends boolean = false ,
3136 Enum extends unknown [ ] = never ,
32- Default extends FieldTypeToTsType < Enum > [ T ] = never ,
37+ Default extends FieldTypeToTsType < Enum , Data > [ T ] = never ,
38+ Data extends CallbackData = never ,
3339> = [ Default ] extends [ never ]
3440 ? Optional extends true
35- ? { [ K in Key ] ?: FieldTypeToTsType < Enum > [ T ] }
36- : { [ K in Key ] : FieldTypeToTsType < Enum > [ T ] }
37- : { [ K in Key ] ?: FieldTypeToTsType < Enum > [ T ] } ;
41+ ? { [ K in Key ] ?: FieldTypeToTsType < Enum , Data > [ T ] }
42+ : { [ K in Key ] : FieldTypeToTsType < Enum , Data > [ T ] }
43+ : { [ K in Key ] ?: FieldTypeToTsType < Enum , Data > [ T ] } ;
3844
3945export type EnumField < T extends unknown [ ] > = {
4046 enumValues : T ;
@@ -60,11 +66,13 @@ export type Schema = {
6066 key : string ;
6167 type : AllowedTypes ;
6268 enumValues ?: string [ ] | readonly string [ ] ;
69+ data ?: CallbackData ;
6370 } [ ] ;
6471 optional : {
6572 key : string ;
6673 type : AllowedTypes ;
6774 enumValues ?: string [ ] | readonly string [ ] ;
75+ data ?: CallbackData ;
6876 default ?: any ;
6977 } [ ] ;
7078} ;
@@ -74,3 +82,16 @@ export type IsOptionalType<T> = {
7482} [ keyof T ] extends true
7583 ? true
7684 : false ;
85+
86+ export type InferDataPack < T extends CallbackData > = T extends CallbackData <
87+ infer SchemaType ,
88+ infer SchemaTypeInput
89+ >
90+ ? SchemaTypeInput
91+ : never ;
92+ export type InferDataUnpack < T extends CallbackData > = T extends CallbackData <
93+ infer SchemaType ,
94+ infer SchemaTypeInput
95+ >
96+ ? SchemaType
97+ : never ;
0 commit comments