import { Elysia } from 'elysia';
import { T as TreatyToPath, a as IsNever, I as IsUnknown, P as Prettify, M as MapError, E as EdenFetchError } from './types-C41kuZ-K.mjs';

declare namespace EdenFetch {
    type Create<App extends Elysia<any, any, any, any, any, any, any>> = App extends {
        '~Routes': infer Schema extends Record<string, unknown>;
    } ? EdenFetch.Fn<TreatyToPath<Schema>> : 'Please install Elysia before using Eden';
    interface Config extends RequestInit {
        fetcher?: typeof globalThis.fetch;
    }
    type Fn<Schema extends Record<string, any>> = <Endpoint extends keyof Schema, Method extends Uppercase<Extract<keyof Schema[Endpoint], string>>, Route extends Schema[Endpoint][Lowercase<Method>]>(endpoint: Endpoint, options: Omit<RequestInit, 'body' | 'method' | 'headers'> & ('GET' extends Method ? {
        method?: Method;
    } : {
        method: Method;
    }) & (IsNever<keyof Route['params']> extends true ? {
        params?: Record<never, string>;
    } : {
        params: Route['params'];
    }) & (IsNever<keyof Route['query']> extends true ? {
        query?: Record<never, string>;
    } : {
        query: Route['query'];
    }) & (undefined extends Route['headers'] ? {
        headers?: Record<string, string>;
    } : {
        headers: Route['headers'];
    }) & (IsUnknown<Route['body']> extends false ? {
        body: Route['body'];
    } : {
        body?: unknown;
    })) => Promise<Prettify<{
        data: Awaited<Route['response'][200]>;
        error: null;
        status: number;
        headers: Record<string, unknown>;
        retry(): Promise<void>;
    } | {
        data: null;
        error: MapError<Route['response']> extends infer Errors ? IsNever<Errors> extends true ? EdenFetchError<number, string> : Errors : EdenFetchError<number, string>;
        status: number;
        headers: Record<string, unknown>;
        retry(): Promise<void>;
    }>>;
}

declare const edenFetch: <App extends Elysia<any, any, any, any, any, any, any>>(server: string, config?: EdenFetch.Config) => EdenFetch.Create<App>;

export { EdenFetch, edenFetch };
