import type { EdenClient, EmptyToVoid, ExtractEdenTreatyRouteParams, ExtractEdenTreatyRouteParamsInput, InferRouteError, InferRouteOptions, InferRouteOutput, } from '@aydee-app/eden' import type { SuspenseQueriesOptions, UseSuspenseQueryResult } from '@tanstack/react-query' import type { AnyElysia, RouteSchema } from 'elysia' import type { UseQueryOptionsForUseSuspenseQueries } from '../../integration/internal/use-query-options-for-use-suspense-queries' import { createTreatyUseQueriesProxy } from './use-queries' export type EdenTreatyUseSuspenseQueries = < TData extends any[], TQueriesOptions extends SuspenseQueriesOptions, >( queriesCallback: (t: EdenTreatyUseSuspenseQueriesProxy) => readonly [...TQueriesOptions], ) => UseSuspenseQueriesResult /** * A proxy object that returns {@link CreateQueryOptions} (instead of an actual create query result). * Passed to `createQueries` caller to use. */ export type EdenTreatyUseSuspenseQueriesProxy = T extends { _routes: infer TSchema extends Record } ? EdenTreatyUseSuspenseQueriesProxyMapping : 'Please install Elysia before using Eden' export type EdenTreatyUseSuspenseQueriesProxyMapping< TSchema extends Record, TPath extends any[] = [], TRouteParams = ExtractEdenTreatyRouteParams, > = { [K in Exclude]: TSchema[K] extends RouteSchema ? UseSuspenseQueriesHook : EdenTreatyUseSuspenseQueriesProxyMapping } & ({} extends TRouteParams ? {} : ( params: ExtractEdenTreatyRouteParamsInput, ) => EdenTreatyUseSuspenseQueriesProxyMapping< TSchema[Extract], TPath >) /** * When a route is encountered, it is replaced with a callable function that takes the same inputs. */ export type UseSuspenseQueriesHook< TRoute extends RouteSchema, _TPath extends any[] = [], TInput = InferRouteOptions['query'], TOutput = InferRouteOutput, TError = InferRouteError, > = ( input: EmptyToVoid, opts?: UseQueryOptionsForUseSuspenseQueries, ) => UseQueryOptionsForUseSuspenseQueries export function createTreatyUseSuspenseQueriesProxy( client: EdenClient, paths: string[] = [], ): EdenTreatyUseSuspenseQueriesProxy { return createTreatyUseQueriesProxy(client, paths) as any } export type UseSuspenseQueriesResult< TQueriesOptions extends UseQueryOptionsForUseSuspenseQueries[], > = [ { [TKey in keyof TQueriesOptions]: TQueriesOptions[TKey] extends UseQueryOptionsForUseSuspenseQueries< infer TQueryFnData, any, infer TData, any > ? unknown extends TData ? TQueryFnData : TData : never }, { [TKey in keyof TQueriesOptions]: TQueriesOptions[TKey] extends UseQueryOptionsForUseSuspenseQueries< infer TQueryFnData, infer TError, infer TData, any > ? UseSuspenseQueryResult : never }, ]