From 07e0304198ff0b7db5d11d39fbd83ea9a5b83d6e Mon Sep 17 00:00:00 2001 From: Maximilian Hammerl Date: Fri, 17 Jan 2025 09:48:10 +0100 Subject: [PATCH] Export ResolveFilterValue and ResolveFilterRelationshipValue --- src/PostgrestFilterBuilder.ts | 33 +-------------------------------- src/types.ts | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/PostgrestFilterBuilder.ts b/src/PostgrestFilterBuilder.ts index 4dbee83c..5de46fb2 100644 --- a/src/PostgrestFilterBuilder.ts +++ b/src/PostgrestFilterBuilder.ts @@ -1,5 +1,5 @@ import PostgrestTransformBuilder from './PostgrestTransformBuilder' -import { GenericSchema } from './types' +import { GenericSchema, ResolveFilterValue } from './types' type FilterOperator = | 'eq' @@ -25,37 +25,6 @@ type FilterOperator = | 'phfts' | 'wfts' -// Match relationship filters with `table.column` syntax and resolve underlying -// column value. If not matched, fallback to generic type. -// TODO: Validate the relationship itself ala select-query-parser. Currently we -// assume that all tables have valid relationships to each other, despite -// nonexistent foreign keys. -type ResolveFilterValue< - Schema extends GenericSchema, - Row extends Record, - ColumnName extends string -> = ColumnName extends `${infer RelationshipTable}.${infer Remainder}` - ? Remainder extends `${infer _}.${infer _}` - ? ResolveFilterValue - : ResolveFilterRelationshipValue - : ColumnName extends keyof Row - ? Row[ColumnName] - : never - -type ResolveFilterRelationshipValue< - Schema extends GenericSchema, - RelationshipTable extends string, - RelationshipColumn extends string -> = 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 - : never - export default class PostgrestFilterBuilder< Schema extends GenericSchema, Row extends Record, diff --git a/src/types.ts b/src/types.ts index fd1378ce..32fa21d1 100644 --- a/src/types.ts +++ b/src/types.ts @@ -89,3 +89,34 @@ type ConditionalSimplifyDeep< type NonRecursiveType = BuiltIns | Function | (new (...arguments_: any[]) => unknown) type BuiltIns = Primitive | void | Date | RegExp type Primitive = null | undefined | string | number | boolean | symbol | bigint + +// Match relationship filters with `table.column` syntax and resolve underlying +// column value. If not matched, fallback to generic type. +// TODO: Validate the relationship itself ala select-query-parser. Currently we +// assume that all tables have valid relationships to each other, despite +// nonexistent foreign keys. +export type ResolveFilterValue< + Schema extends GenericSchema, + Row extends Record, + ColumnName extends string +> = ColumnName extends `${infer RelationshipTable}.${infer Remainder}` + ? Remainder extends `${infer _}.${infer _}` + ? ResolveFilterValue + : ResolveFilterRelationshipValue + : ColumnName extends keyof Row + ? Row[ColumnName] + : never + +export type ResolveFilterRelationshipValue< + Schema extends GenericSchema, + RelationshipTable extends string, + RelationshipColumn extends string +> = 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 + : never