11import PostgrestTransformBuilder from './PostgrestTransformBuilder'
2+ import { JsonPathToAccessor , JsonPathToType } from './select-query-parser/utils'
23import { GenericSchema } from './types'
34
45type FilterOperator =
@@ -40,6 +41,12 @@ type ResolveFilterValue<
4041 : ResolveFilterRelationshipValue < Schema , RelationshipTable , Remainder >
4142 : ColumnName extends keyof Row
4243 ? Row [ ColumnName ]
44+ : // If the column selection is a jsonpath like `data->value` we attempt to match
45+ // the expected type with the parsed custom json type
46+ JsonPathToType < Row , JsonPathToAccessor < ColumnName > > extends infer JsonPathValue
47+ ? JsonPathValue extends never
48+ ? never
49+ : JsonPathValue
4350 : never
4451
4552type ResolveFilterRelationshipValue <
@@ -73,11 +80,14 @@ export default class PostgrestFilterBuilder<
7380 */
7481 eq < ColumnName extends string > (
7582 column : ColumnName ,
76- value : ResolveFilterValue < Schema , Row , ColumnName > extends infer ResolvedFilterValue
77- ? ResolvedFilterValue extends never
78- ? unknown
79- : NonNullable < ResolvedFilterValue >
80- : unknown
83+ value : ResolveFilterValue < Schema , Row , ColumnName > extends never
84+ ? NonNullable < unknown >
85+ : // We want to infer the type before wrapping it into a `NonNullable` to avoid too deep
86+ // type resolution error
87+ ResolveFilterValue < Schema , Row , ColumnName > extends infer ResolvedFilterValue
88+ ? NonNullable < ResolvedFilterValue >
89+ : // We should never enter this case as all the branches are covered above
90+ never
8191 ) : this {
8292 this . url . searchParams . append ( column , `eq.${ value } ` )
8393 return this
@@ -91,11 +101,11 @@ export default class PostgrestFilterBuilder<
91101 */
92102 neq < ColumnName extends string > (
93103 column : ColumnName ,
94- value : ResolveFilterValue < Schema , Row , ColumnName > extends infer ResolvedFilterValue
95- ? ResolvedFilterValue extends never
96- ? unknown
97- : NonNullable < ResolvedFilterValue >
98- : unknown
104+ value : ResolveFilterValue < Schema , Row , ColumnName > extends never
105+ ? unknown
106+ : ResolveFilterValue < Schema , Row , ColumnName > extends infer ResolvedFilterValue
107+ ? ResolvedFilterValue
108+ : never
99109 ) : this {
100110 this . url . searchParams . append ( column , `neq.${ value } ` )
101111 return this
@@ -274,11 +284,14 @@ export default class PostgrestFilterBuilder<
274284 in < ColumnName extends string > (
275285 column : ColumnName ,
276286 values : ReadonlyArray <
277- ResolveFilterValue < Schema , Row , ColumnName > extends infer ResolvedFilterValue
278- ? ResolvedFilterValue extends never
279- ? unknown [ ]
280- : ResolvedFilterValue
281- : never
287+ ResolveFilterValue < Schema , Row , ColumnName > extends never
288+ ? unknown
289+ : // We want to infer the type before wrapping it into a `NonNullable` to avoid too deep
290+ // type resolution error
291+ ResolveFilterValue < Schema , Row , ColumnName > extends infer ResolvedFilterValue
292+ ? ResolvedFilterValue
293+ : // We should never enter this case as all the branches are covered above
294+ never
282295 >
283296 ) : this {
284297 const cleanedValues = Array . from ( new Set ( values ) )
0 commit comments