@elysiajs/eden
Version:
Fully type-safe Elysia client
49 lines (45 loc) • 2.12 kB
TypeScript
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.js';
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 };