UNPKG

eden-swr

Version:

React/NextJS SWR hooks for Elysia applications with fully typed Eden

57 lines 2.17 kB
export type IsAny<T> = 0 extends 1 & T ? true : false; export type IsNever<T> = [T] extends [never] ? true : false; export type IsUnknown<T> = IsAny<T> extends true ? false : unknown extends T ? true : false; export type AnyTypedRoute = { body?: unknown; headers?: unknown; query?: unknown; params?: unknown; response: Record<number, unknown>; }; export type Prettify<T> = { [K in keyof T]: T[K]; } & {}; export type UnionToIntersect<U> = (U extends any ? (arg: U) => any : never) extends (arg: infer I) => void ? I : never; export type UnionToTuple<T> = UnionToIntersect<T extends any ? (t: T) => T : never> extends (_: any) => infer W ? [...UnionToTuple<Exclude<T, W>>, W] : []; export type TreatyToPath<T, Path extends string = ""> = UnionToIntersect<T extends Record<string, unknown> ? { [K in keyof T]: T[K] extends AnyTypedRoute ? { [path in Path]: { [method in K]: T[K]; }; } : unknown extends T[K] ? { [path in Path]: { [method in K]: T[K]; }; } : TreatyToPath<T[K], `${Path}/${K & string}`>; }[keyof T] : {}>; export declare class EdenFetchError<Status extends number = number, Value = unknown> extends Error { status: Status; value: Value; constructor(status: Status, value: Value); } type Enumerate<N extends number, Acc extends number[] = []> = Acc["length"] extends N ? Acc[number] : Enumerate<N, [...Acc, Acc["length"]]>; type Range<F extends number, T extends number> = Exclude<Enumerate<T>, Enumerate<F>>; type ErrorRange = Range<300, 599>; export type MapError<T extends Record<number, unknown>> = [ { [K in keyof T]-?: K extends ErrorRange ? K : never; }[keyof T] ] extends [infer A extends number] ? { [K in A]: EdenFetchError<K, T[K]>; }[A] : false; export type EdenResponse<T> = { data: T; error: null; status: number; headers: Record<string, unknown>; retry(): Promise<void>; }; export type EdenErrorResponse = { data: null; error: EdenFetchError<number, unknown>; status: number; headers: Record<string, unknown>; retry(): Promise<void>; }; export {}; //# sourceMappingURL=types.d.ts.map