Skip to content

Commit 8d32089

Browse files
committed
fix: also validate enums in views
1 parent 09083ea commit 8d32089

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed

src/PostgrestFilterBuilder.ts

+18-16
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import PostgrestTransformBuilder from './PostgrestTransformBuilder'
2-
import { GenericSchema, GenericTable } from './types'
2+
import { GenericSchema } from './types'
33

44
type FilterOperator =
55
| 'eq'
@@ -31,28 +31,30 @@ type FilterOperator =
3131
// assume that all tables have valid relationships to each other, despite
3232
// nonexistent foreign keys.
3333
type ResolveFilterValue<
34-
Tables extends Record<string, GenericTable>,
34+
Schema extends GenericSchema,
3535
Row extends Record<string, unknown>,
3636
ColumnName extends string
3737
> = ColumnName extends `${infer RelationshipTable}.${infer Remainder}`
3838
? Remainder extends `${infer _}.${infer _}`
39-
? ResolveFilterValue<Tables, Row, Remainder>
40-
: ResolveFilterRelationshipValue<Tables, RelationshipTable, Remainder>
39+
? ResolveFilterValue<Schema, Row, Remainder>
40+
: ResolveFilterRelationshipValue<Schema, RelationshipTable, Remainder>
4141
: ColumnName extends keyof Row
4242
? Row[ColumnName]
4343
: never
4444

4545
type ResolveFilterRelationshipValue<
46-
Tables extends Record<string, GenericTable>,
46+
Schema extends GenericSchema,
4747
RelationshipTable extends string,
4848
RelationshipColumn extends string
49-
> = RelationshipTable extends keyof Tables
50-
? 'Row' extends keyof Tables[RelationshipTable]
51-
? RelationshipColumn extends keyof Tables[RelationshipTable]['Row']
52-
? Tables[RelationshipTable]['Row'][RelationshipColumn]
49+
> = Schema['Tables'] & Schema['Views'] extends infer TablesAndViews
50+
? RelationshipTable extends keyof TablesAndViews
51+
? 'Row' extends keyof TablesAndViews[RelationshipTable]
52+
? RelationshipColumn extends keyof TablesAndViews[RelationshipTable]['Row']
53+
? TablesAndViews[RelationshipTable]['Row'][RelationshipColumn]
54+
: unknown
5355
: unknown
5456
: unknown
55-
: unknown
57+
: never
5658

5759
export default class PostgrestFilterBuilder<
5860
Schema extends GenericSchema,
@@ -71,9 +73,9 @@ export default class PostgrestFilterBuilder<
7173
*/
7274
eq<ColumnName extends string>(
7375
column: ColumnName,
74-
value: ResolveFilterValue<Schema['Tables'], Row, ColumnName> extends never
76+
value: ResolveFilterValue<Schema, Row, ColumnName> extends never
7577
? NonNullable<unknown>
76-
: NonNullable<ResolveFilterValue<Schema['Tables'], Row, ColumnName>>
78+
: NonNullable<ResolveFilterValue<Schema, Row, ColumnName>>
7779
): this {
7880
this.url.searchParams.append(column, `eq.${value}`)
7981
return this
@@ -87,9 +89,9 @@ export default class PostgrestFilterBuilder<
8789
*/
8890
neq<ColumnName extends string>(
8991
column: ColumnName,
90-
value: ResolveFilterValue<Schema['Tables'], Row, ColumnName> extends never
92+
value: ResolveFilterValue<Schema, Row, ColumnName> extends never
9193
? unknown
92-
: ResolveFilterValue<Schema['Tables'], Row, ColumnName>
94+
: ResolveFilterValue<Schema, Row, ColumnName>
9395
): this {
9496
this.url.searchParams.append(column, `neq.${value}`)
9597
return this
@@ -267,9 +269,9 @@ export default class PostgrestFilterBuilder<
267269
*/
268270
in<ColumnName extends string>(
269271
column: ColumnName,
270-
values: ResolveFilterValue<Schema['Tables'], Row, ColumnName> extends never
272+
values: ResolveFilterValue<Schema, Row, ColumnName> extends never
271273
? unknown[]
272-
: ReadonlyArray<ResolveFilterValue<Schema['Tables'], Row, ColumnName>>
274+
: ReadonlyArray<ResolveFilterValue<Schema, Row, ColumnName>>
273275
): this {
274276
const cleanedValues = Array.from(new Set(values))
275277
.map((s) => {

0 commit comments

Comments
 (0)