solid-fetch
Version:
Http request client promise-based supporting injectable request properties like: headers, parameters, query, body, etc.
54 lines (53 loc) • 2.63 kB
TypeScript
type HTTPMethods = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'TRACE' | 'CONNECT';
type InjectableFuncProps<Injectables> = Injectables;
type InjectableFunc<Injectables> = (p: InjectableFuncProps<Injectables>) => Exclude<InjectableValue<Injectables>, InjectableFunc<Injectables>>;
type InjectableObject<Injectables> = (p: InjectableFuncProps<Injectables>) => Record<string, Exclude<InjectableValue<Injectables>, InjectableFunc<Injectables>>>;
type InjectableValue<Injectables> = string | number | boolean | null | InjectableFunc<Injectables>;
interface RequestCaller<Injectables> {
query?: Record<string, InjectableValue<Injectables>> | InjectableObject<Injectables>;
method?: HTTPMethods;
headers?: Record<string, InjectableValue<Injectables>> | InjectableObject<Injectables>;
body?: string | object | FormData | Record<string, InjectableValue<Injectables>> | InjectableValue<Injectables> | any[];
}
type ResponseTypes = string | ArrayBuffer | any;
interface Result<RequestOptions, Data extends ResponseTypes> {
request: {
url: string;
requestOptions: RequestOptions;
};
headers: RequestInit['headers'];
ok: boolean;
redirected: boolean;
status: number;
statusText: string;
data: Data;
}
interface RequestOptions {
method: RequestInit['method'];
headers: RequestInit['headers'];
body?: string | FormData;
}
declare class SolidFetch<Injectables extends Record<string, any>> {
#private;
injectables: () => Injectables | Record<string, any>;
interceptedReq: any[];
interceptedRes: any[];
interceptedErr: any[];
globalQuery: any;
globalHeaders: any;
constructor({ initInjectables, interceptedReq, interceptedRes, interceptedErr, globalQuery, globalHeaders, }: {
initInjectables?: {} | undefined;
interceptedReq?: never[] | undefined;
interceptedRes?: never[] | undefined;
interceptedErr?: never[] | undefined;
globalQuery?: {} | undefined;
globalHeaders?: {} | undefined;
});
setConfig(config: Partial<SolidFetch<Injectables>>): void;
setInjectables(newInjectables: Partial<Injectables>): void;
getInjectables(): Injectables;
resolveDynamic(dynamicParams: any): {};
generateRequest(pathStructure: any, ...dynamicParams: any): any;
request<Data extends ResponseTypes = any>(pathStructure: TemplateStringsArray, ...dynamicParams: Array<InjectableValue<Injectables>>): ({ method, query: rawQuery, headers: rawHeaders, body, }?: RequestCaller<Injectables>) => Promise<Result<RequestOptions, Data>>;
}
export default SolidFetch;