Skip to content
This repository was archived by the owner on Oct 9, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,9 @@ type Simplify<T> = T extends object ? { [K in keyof T]: T[K] } : T
type MergeDeep<New, Row> = {
[K in keyof New | keyof Row]: K extends keyof New
? K extends keyof Row
? // Check if the override is on a embeded relation (array)
? Row[K] extends SelectQueryError<string>
? New[K]
: // Check if the override is on a embeded relation (array)
New[K] extends any[]
? Row[K] extends any[]
? Array<Simplify<MergeDeep<NonNullable<New[K][number]>, NonNullable<Row[K][number]>>>>
Expand Down
52 changes: 52 additions & 0 deletions test/override-types.test-d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -435,3 +435,55 @@ const postgrest = new PostgrestClient<Database>(REST_URL)
>
>(true)
}

// Test overrideTypes single object with error embeded relation
{
const result = await postgrest.from('users').select('*, somerelation(*)').overrideTypes<
{
somerelation: { created_at: Date; data: string }
}[]
>()
if (result.error) {
throw new Error(result.error.message)
}
let data: typeof result.data
expectType<
TypeEqual<
typeof data,
{
username: string
data: CustomUserDataType | null
age_range: unknown
catchphrase: unknown
status: 'ONLINE' | 'OFFLINE' | null
somerelation: { created_at: Date; data: string }
}[]
>
>(true)
}

// Test overrideTypes array object with error embeded relation
{
const result = await postgrest.from('users').select('*, somerelation(*)').overrideTypes<
{
somerelation: { created_at: Date; data: string }[]
}[]
>()
if (result.error) {
throw new Error(result.error.message)
}
let data: typeof result.data
expectType<
TypeEqual<
typeof data,
{
username: string
data: CustomUserDataType | null
age_range: unknown
catchphrase: unknown
status: 'ONLINE' | 'OFFLINE' | null
somerelation: { created_at: Date; data: string }[]
}[]
>
>(true)
}
Loading