Skip to content

Commit 697cc60

Browse files
committed
fix: validate deeply nested filters
1 parent 6143dd1 commit 697cc60

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

src/PostgrestFilterBuilder.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ type ResolveFilterValue<
3131
Tables extends Record<string, GenericTable>,
3232
Row extends Record<string, unknown>,
3333
ColumnName extends string
34-
> = ColumnName extends `${infer RelationshipTable}.${infer RelationshipColumn}`
35-
? ResolveFilterRelationshipValue<Tables, RelationshipTable, RelationshipColumn>
34+
> = ColumnName extends `${infer RelationshipTable}.${infer Remainder}`
35+
? Remainder extends `${infer _}.${infer _}`
36+
? ResolveFilterValue<Tables, Row, Remainder>
37+
: ResolveFilterRelationshipValue<Tables, RelationshipTable, Remainder>
3638
: ColumnName extends keyof Row
3739
? Row[ColumnName]
3840
: never

test/index.test-d.ts

+10
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@ const postgrest = new PostgrestClient<Database>(REST_URL)
4040
.select('users!first_user(status)')
4141
.in('users.status', ['invalid'])
4242
)
43+
// Validate deeply nested embedded tables
44+
expectError(
45+
postgrest.from('users').select('messages(channels(*))').eq('messages.channels.id', 'invalid')
46+
)
47+
expectError(
48+
postgrest.from('users').select('messages(channels(*))').neq('messages.channels.id', 'invalid')
49+
)
50+
expectError(
51+
postgrest.from('users').select('messages(channels(*))').in('messages.channels.id', ['invalid'])
52+
)
4353

4454
{
4555
const { data, error } = await postgrest.from('users').select('status').eq('status', 'ONLINE')

0 commit comments

Comments
 (0)