Skip to content

Commit 18f82f1

Browse files
committed
feat(postgrest): add embeded functions inference
1 parent ad49a57 commit 18f82f1

25 files changed

+4504
-1450
lines changed

packages/core/postgrest-js/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
"type-check:test": "tsc --noEmit --project tsconfig.test.json",
5454
"db:clean": "cd test/db && docker compose down --volumes",
5555
"db:run": "cd test/db && docker compose up --detach && wait-for-localhost 3000",
56-
"db:generate-test-types": "cd test/db && docker compose up --detach && wait-for-localhost 8080 && curl --location 'http://0.0.0.0:8080/generators/typescript?included_schemas=public,personal&detect_one_to_one_relationships=true' > ../types.generated.ts && node ../scripts/update-json-type.js && prettier --write ../types.generated.ts"
56+
"db:generate-test-types": "cd test/db && docker compose up --detach && wait-for-localhost 8080 && wait-for-localhost 3000 && curl --location 'http://0.0.0.0:8080/generators/typescript?included_schemas=public,personal&detect_one_to_one_relationships=true' > ../types.generated.ts && node ../scripts/update-json-type.js && prettier --write ../types.generated.ts"
5757
},
5858
"dependencies": {
5959
"@supabase/node-fetch": "2.6.15"

packages/core/postgrest-js/src/PostgrestClient.ts

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import PostgrestQueryBuilder from './PostgrestQueryBuilder'
22
import PostgrestFilterBuilder from './PostgrestFilterBuilder'
3-
import { Fetch, GenericSchema, ClientServerOptions } from './types'
3+
import {
4+
Fetch,
5+
GenericSchema,
6+
ClientServerOptions,
7+
GetRpcFunctionFilterBuilderByArgs,
8+
} from './types'
49

510
/**
611
* PostgREST client.
@@ -131,9 +136,17 @@ export default class PostgrestClient<
131136
* `"estimated"`: Uses exact count for low numbers and planned count for high
132137
* numbers.
133138
*/
134-
rpc<FnName extends string & keyof Schema['Functions'], Fn extends Schema['Functions'][FnName]>(
139+
rpc<
140+
FnName extends string & keyof Schema['Functions'],
141+
Args extends Schema['Functions'][FnName]['Args'] = never,
142+
FilterBuilder extends GetRpcFunctionFilterBuilderByArgs<
143+
Schema,
144+
FnName,
145+
Args
146+
> = GetRpcFunctionFilterBuilderByArgs<Schema, FnName, Args>,
147+
>(
135148
fn: FnName,
136-
args: Fn['Args'] = {},
149+
args: Args = {} as Args,
137150
{
138151
head = false,
139152
get = false,
@@ -146,14 +159,10 @@ export default class PostgrestClient<
146159
): PostgrestFilterBuilder<
147160
ClientOptions,
148161
Schema,
149-
Fn['Returns'] extends any[]
150-
? Fn['Returns'][number] extends Record<string, unknown>
151-
? Fn['Returns'][number]
152-
: never
153-
: never,
154-
Fn['Returns'],
155-
FnName,
156-
null,
162+
FilterBuilder['Row'],
163+
FilterBuilder['Result'],
164+
FilterBuilder['RelationName'],
165+
FilterBuilder['Relationships'],
157166
'RPC'
158167
> {
159168
let method: 'HEAD' | 'GET' | 'POST'

packages/core/postgrest-js/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export type {
2929
PostgrestSingleResponse,
3030
PostgrestMaybeSingleResponse,
3131
ClientServerOptions as PostgrestClientOptions,
32+
GetRpcFunctionFilterBuilderByArgs,
3233
} from './types'
3334
// https://github.com/supabase/postgrest-js/issues/551
3435
// To be replaced with a helper type that only uses public types

packages/core/postgrest-js/src/select-query-parser/parser.ts

Lines changed: 226 additions & 233 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)