UNPKG

bknd

Version:

Lightweight Firebase/Supabase alternative built to run anywhere — incl. Next.js, React Router, Astro, Cloudflare, Bun, Node, AWS Lambda & more.

94 lines (93 loc) 3.74 kB
import { type PrimaryFieldType } from "../core"; import type { ApiFetcher } from "../Api"; export type { PrimaryFieldType }; export type BaseModuleApiOptions = { host: string; basepath?: string; token?: string; headers?: Headers; token_transport?: "header" | "cookie" | "none"; verbose?: boolean; }; /** @deprecated */ export type ApiResponse<Data = any> = { success: boolean; status: number; body: Data; data?: Data extends { data: infer R; } ? R : any; res: Response; }; export type TInput = string | (string | number | PrimaryFieldType)[]; export declare abstract class ModuleApi<Options extends BaseModuleApiOptions = BaseModuleApiOptions> { protected readonly _options: Partial<Options>; protected fetcher: ApiFetcher; constructor(_options?: Partial<Options>, fetcher?: ApiFetcher); protected getDefaultOptions(): Partial<Options>; get options(): Options; /** * used for SWR invalidation of basepath */ key(): string; protected getUrl(path: string): string; protected request<Data = any>(_input: TInput, _query?: Record<string, any> | URLSearchParams, _init?: RequestInit): FetchPromise<ResponseObject<Data>>; get<Data = any>(_input: TInput, _query?: Record<string, any> | URLSearchParams, _init?: RequestInit): FetchPromise<ResponseObject<Data, Data extends { data: infer R; } ? R : Data>>; post<Data = any>(_input: TInput, body?: any, _init?: RequestInit): FetchPromise<ResponseObject<Data, Data extends { data: infer R; } ? R : Data>>; patch<Data = any>(_input: TInput, body?: any, _init?: RequestInit): FetchPromise<ResponseObject<Data, Data extends { data: infer R; } ? R : Data>>; put<Data = any>(_input: TInput, body?: any, _init?: RequestInit): FetchPromise<ResponseObject<Data, Data extends { data: infer R; } ? R : Data>>; delete<Data = any>(_input: TInput, body?: any, _init?: RequestInit): FetchPromise<ResponseObject<Data, Data extends { data: infer R; } ? R : Data>>; } export type ResponseObject<Body = any, Data = Body extends { data: infer R; } ? R : Body> = Data & { raw: Response; res: Response; data: Data; body: Body; ok: boolean; status: number; toJSON(): Data; }; export declare function createResponseProxy<Body = any, Data = any>(raw: Response, body: Body, data?: Data): ResponseObject<Body, Data>; export declare class FetchPromise<T = ApiResponse<any>> implements Promise<T> { request: Request; protected options?: { fetcher?: ApiFetcher; verbose?: boolean; } | undefined; protected refineData?: ((data: any) => any) | undefined; [Symbol.toStringTag]: "FetchPromise"; constructor(request: Request, options?: { fetcher?: ApiFetcher; verbose?: boolean; } | undefined, refineData?: ((data: any) => any) | undefined); get verbose(): boolean; refine<N>(fn: (data: T) => N): FetchPromise<ApiResponse<N>>; execute(): Promise<ResponseObject<T>>; then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined): Promise<TResult1 | TResult2>; catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined): Promise<T | TResult>; finally(onfinally?: (() => void) | null | undefined): Promise<T>; path(): string; key(options?: { search: boolean; }): string; keyArray(options?: { search: boolean; }): string[]; toString(): string; toJSON(): { url: string; method: string; }; }