diff --git a/src/PostgrestFilterBuilder.ts b/src/PostgrestFilterBuilder.ts index e6b658da..4dbee83c 100644 --- a/src/PostgrestFilterBuilder.ts +++ b/src/PostgrestFilterBuilder.ts @@ -1,5 +1,5 @@ import PostgrestTransformBuilder from './PostgrestTransformBuilder' -import { GenericSchema, GenericTable } from './types' +import { GenericSchema } from './types' type FilterOperator = | 'eq' @@ -31,28 +31,30 @@ type FilterOperator = // assume that all tables have valid relationships to each other, despite // nonexistent foreign keys. type ResolveFilterValue< - Tables extends Record, + Schema extends GenericSchema, Row extends Record, ColumnName extends string > = ColumnName extends `${infer RelationshipTable}.${infer Remainder}` ? Remainder extends `${infer _}.${infer _}` - ? ResolveFilterValue - : ResolveFilterRelationshipValue + ? ResolveFilterValue + : ResolveFilterRelationshipValue : ColumnName extends keyof Row ? Row[ColumnName] : never type ResolveFilterRelationshipValue< - Tables extends Record, + Schema extends GenericSchema, RelationshipTable extends string, RelationshipColumn extends string -> = RelationshipTable extends keyof Tables - ? 'Row' extends keyof Tables[RelationshipTable] - ? RelationshipColumn extends keyof Tables[RelationshipTable]['Row'] - ? Tables[RelationshipTable]['Row'][RelationshipColumn] +> = Schema['Tables'] & Schema['Views'] extends infer TablesAndViews + ? RelationshipTable extends keyof TablesAndViews + ? 'Row' extends keyof TablesAndViews[RelationshipTable] + ? RelationshipColumn extends keyof TablesAndViews[RelationshipTable]['Row'] + ? TablesAndViews[RelationshipTable]['Row'][RelationshipColumn] + : unknown : unknown : unknown - : unknown + : never export default class PostgrestFilterBuilder< Schema extends GenericSchema, @@ -71,9 +73,9 @@ export default class PostgrestFilterBuilder< */ eq( column: ColumnName, - value: ResolveFilterValue extends never + value: ResolveFilterValue extends never ? NonNullable - : NonNullable> + : NonNullable> ): this { this.url.searchParams.append(column, `eq.${value}`) return this @@ -87,9 +89,9 @@ export default class PostgrestFilterBuilder< */ neq( column: ColumnName, - value: ResolveFilterValue extends never + value: ResolveFilterValue extends never ? unknown - : ResolveFilterValue + : ResolveFilterValue ): this { this.url.searchParams.append(column, `neq.${value}`) return this @@ -267,9 +269,9 @@ export default class PostgrestFilterBuilder< */ in( column: ColumnName, - values: ResolveFilterValue extends never + values: ResolveFilterValue extends never ? unknown[] - : ReadonlyArray> + : ReadonlyArray> ): this { const cleanedValues = Array.from(new Set(values)) .map((s) => {