@@ -8,7 +8,9 @@ import type {
88 TableColumnNames ,
99 TableColumns ,
1010 TableSchemaComponent ,
11+ Writable ,
1112} from '..' ;
13+ import type { ColumnTypeToken } from '../../../sql/tokens/columnTokens' ;
1214
1315export type ExtractSchemaNames < DB > =
1416 DB extends DatabaseSchemaComponent < infer Schemas extends DatabaseSchemas >
@@ -27,24 +29,124 @@ export type ExtractColumnNames<Table extends AnyTableSchemaComponent> =
2729 ? TableColumnNames < TableSchemaComponent < Columns > >
2830 : never ;
2931
30- export type AllColumnReferences < DB > =
31- DB extends DatabaseSchemaComponent < infer Schemas extends DatabaseSchemas >
32+ export type ExtractColumnTypeName < T > =
33+ T extends ColumnTypeToken <
34+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
35+ any ,
36+ infer TypeName ,
37+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38+ any ,
39+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
40+ any
41+ >
42+ ? Uppercase < TypeName & string >
43+ : never ;
44+
45+ export type AllColumnTypes < Schemas extends DatabaseSchemas > = {
46+ [ SchemaName in keyof Schemas ] : Schemas [ SchemaName ] extends DatabaseSchemaSchemaComponent <
47+ infer Tables
48+ >
49+ ? Writable < {
50+ [ TableName in keyof Tables ] : Tables [ TableName ] extends TableSchemaComponent <
51+ infer Columns
52+ >
53+ ? Writable < {
54+ [ ColumnName in keyof Columns ] : {
55+ columnTypeName : ExtractColumnTypeName <
56+ Columns [ ColumnName ] [ 'type' ]
57+ > ;
58+ } ;
59+ } >
60+ : never ;
61+ } >
62+ : never ;
63+ } ;
64+
65+ export type AllColumnReferences < Schemas extends DatabaseSchemas > = {
66+ [ SchemaName in keyof Schemas ] : Schemas [ SchemaName ] extends DatabaseSchemaSchemaComponent <
67+ infer Tables
68+ >
69+ ? {
70+ [ TableName in keyof Tables ] : Tables [ TableName ] extends TableSchemaComponent <
71+ infer Columns
72+ >
73+ ? {
74+ [ ColumnName in keyof Columns ] : `${SchemaName &
75+ string } .${TableName & string } .${ColumnName & string } `;
76+ } [ keyof Columns ]
77+ : never ;
78+ } [ keyof Tables ]
79+ : never ;
80+ } [ keyof Schemas ] ;
81+
82+ export type AllColumnTypesInSchema <
83+ Schema extends AnyDatabaseSchemaSchemaComponent ,
84+ > =
85+ Schema extends DatabaseSchemaSchemaComponent < infer Tables >
86+ ? {
87+ [ TableName in keyof Tables ] : Tables [ TableName ] extends TableSchemaComponent <
88+ infer Columns
89+ >
90+ ? {
91+ [ ColumnName in keyof Columns ] : {
92+ columnTypeName : ExtractColumnTypeName <
93+ Columns [ ColumnName ] [ 'type' ]
94+ > ;
95+ } ;
96+ }
97+ : never ;
98+ }
99+ : never ;
100+
101+ export type AllColumnReferencesInSchema <
102+ Schema extends AnyDatabaseSchemaSchemaComponent ,
103+ SchemaName extends string ,
104+ > =
105+ Schema extends DatabaseSchemaSchemaComponent < infer Tables >
32106 ? {
33- [ SchemaName in keyof Schemas ] : Schemas [ SchemaName ] extends DatabaseSchemaSchemaComponent <
34- infer Tables
107+ [ TableName in keyof Tables ] : Tables [ TableName ] extends TableSchemaComponent <
108+ infer Columns
35109 >
36110 ? {
37- [ TableName in keyof Tables ] : Tables [ TableName ] extends TableSchemaComponent <
38- infer Columns
39- >
40- ? {
41- [ ColumnName in keyof Columns ] : `${SchemaName &
42- string } .${TableName & string } .${ColumnName & string } `;
43- } [ keyof Columns ]
44- : never ;
45- } [ keyof Tables ]
111+ [ ColumnName in keyof Columns ] : `${SchemaName & string } .${TableName &
112+ string } .${ColumnName & string } `;
113+ } [ keyof Columns ]
46114 : never ;
47- } [ keyof Schemas ]
115+ } [ keyof Tables ]
116+ : never ;
117+
118+ export type NormalizeReferencePath <
119+ Path extends string ,
120+ CurrentSchema extends string ,
121+ CurrentTable extends string ,
122+ > = Path extends `${infer Schema } .${infer Table } .${infer Column } `
123+ ? `${Schema } .${Table } .${Column } `
124+ : Path extends `${infer Table } .${infer Column } `
125+ ? `${CurrentSchema } .${Table } .${Column } `
126+ : Path extends string
127+ ? `${CurrentSchema } .${CurrentTable } .${Path } `
128+ : never ;
129+
130+ export type ParseReferencePath < Path extends string > =
131+ Path extends `${infer Schema } .${infer Table } .${infer Column } `
132+ ? { schema : Schema ; table : Table ; column : Column }
133+ : never ;
134+
135+ export type LookupColumnType < AllTypes , Path extends string > =
136+ ParseReferencePath < Path > extends {
137+ schema : infer S ;
138+ table : infer T ;
139+ column : infer C ;
140+ }
141+ ? S extends keyof AllTypes
142+ ? T extends keyof AllTypes [ S ]
143+ ? C extends keyof AllTypes [ S ] [ T ]
144+ ? AllTypes [ S ] [ T ] [ C ] extends { columnTypeName : infer TypeName }
145+ ? TypeName
146+ : never
147+ : never
148+ : never
149+ : never
48150 : never ;
49151
50152export type RelationshipType =
0 commit comments