Skip to content

Improve error reporting on insert/upsert callsΒ #1652

@olee

Description

@olee

I noticed that the postgrest client has issues with error highlighting on insert/upsert calls when there is a type missmatch between the expected and provided properties.
I was able to trace this back to the overload defined on insert / upsert which is causing typescript to have problems with determining the correct signature if there's an error in the payload and therefore error-highlighting the whole function call:

image

As an example, if I define a function without any overload, the error highlights works way better:
image

And if I define my test function with an overload the same way as it is done in the client, it breaks again:
image

A solution would be either to unify both calls into a single signature (which would just mean that defaultToNull option would be defined unnecessarily for non-bulk operations) or to just split it into insert & insertBulk / upsert & upsertBulk or something like that.


Original post (less relevant than actual issue) As far as I can see, functions like `insert` and `upsert` in the query builder use a generic type `Row` for the values to insert when in fact this type should not be necessary at all.

So instead of this:
https://github.com/supabase/postgrest-js/blob/c9cebf8a0a5a3c8dff4a511d70fd53079781f563/src/PostgrestQueryBuilder.ts#L101-L106

It should work better if it is defined like this instead:

 insert( 
   values: Relation extends { Insert: unknown } ? Relation['Insert'] : never,
   options?: { 
     count?: 'exact' | 'planned' | 'estimated' 
   } 
 ): PostgrestFilterBuilder<Schema, Relation['Row'], null, RelationName, Relationships> 

This would improve type discovery a bit and improve error reporting.

The reason I say it's not required is because the generic type is only used for the input and not used anywhere on the output.

Metadata

Metadata

Assignees

No one assigned

    Labels

    postgrest-jsRelated to the postgrest-js library.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions