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
TypeScript
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;
};
}