1
1
import PostgrestTransformBuilder from './PostgrestTransformBuilder'
2
+ import { JsonPathToAccessor , JsonPathToType } from './select-query-parser/utils'
2
3
import { GenericSchema } from './types'
3
4
4
5
type FilterOperator =
@@ -40,6 +41,12 @@ type ResolveFilterValue<
40
41
: ResolveFilterRelationshipValue < Schema , RelationshipTable , Remainder >
41
42
: ColumnName extends keyof Row
42
43
? 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
43
50
: never
44
51
45
52
type ResolveFilterRelationshipValue <
@@ -73,11 +80,14 @@ export default class PostgrestFilterBuilder<
73
80
*/
74
81
eq < ColumnName extends string > (
75
82
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
81
91
) : this {
82
92
this . url . searchParams . append ( column , `eq.${ value } ` )
83
93
return this
@@ -91,11 +101,11 @@ export default class PostgrestFilterBuilder<
91
101
*/
92
102
neq < ColumnName extends string > (
93
103
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
99
109
) : this {
100
110
this . url . searchParams . append ( column , `neq.${ value } ` )
101
111
return this
@@ -274,11 +284,14 @@ export default class PostgrestFilterBuilder<
274
284
in < ColumnName extends string > (
275
285
column : ColumnName ,
276
286
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
282
295
>
283
296
) : this {
284
297
const cleanedValues = Array . from ( new Set ( values ) )
0 commit comments