@volverjs/data
Version:
Repository pattern implementation with a tiny HttpClient based on Fetch API.
80 lines (79 loc) • 4.22 kB
TypeScript
import type { Hooks, KyResponse, Options, ResponsePromise } from 'ky';
import type { KyInstance } from 'ky/distribution/types/ky';
import type { HttpMethod, Input, KyHeadersInit, RetryOptions } from 'ky/distribution/types/options';
import type { ParamMap } from './types';
import type { UrlBuilderInstance, UrlBuilderOptions } from './UrlBuilder';
import { HTTPError, TimeoutError } from 'ky';
export type HttpClientResponse = KyResponse;
export type HttpClientResponsePromise = ResponsePromise;
export type HttpClientOptions = Omit<Options, 'searchParams'> & {
searchParams?: UrlBuilderOptions;
};
export type HttpClientRequestOptions = HttpClientOptions & {
abortController?: AbortController;
};
export type HttpClientMethod = HttpMethod;
export type HttpClientHeaders = KyHeadersInit;
export type HttpClientRetryOptions = RetryOptions;
export type HttpClientHooks = Hooks;
export type HttpClientInput = Input;
export type HttpClientUrlTemplate = {
template: string;
params: ParamMap;
};
export type HttpClientInputTemplate = Input | HttpClientUrlTemplate;
export interface HttpClientInstance {
get: (url: HttpClientInputTemplate, options?: HttpClientOptions) => HttpClientResponsePromise;
post: (url: HttpClientInputTemplate, options?: HttpClientOptions) => HttpClientResponsePromise;
put: (url: HttpClientInputTemplate, options?: HttpClientOptions) => HttpClientResponsePromise;
delete: (url: HttpClientInputTemplate, options?: HttpClientOptions) => HttpClientResponsePromise;
patch: (url: HttpClientInputTemplate, options?: HttpClientOptions) => HttpClientResponsePromise;
head: (url: HttpClientInputTemplate, options?: HttpClientOptions) => HttpClientResponsePromise;
extend: (options: HttpClientOptions) => void;
clone: (options?: HttpClientOptions) => HttpClientInstance;
fetch: (request: Request) => HttpClientResponsePromise;
request: (method: HttpClientMethod, url: HttpClientInputTemplate, options?: HttpClientOptions) => {
responsePromise: HttpClientResponsePromise;
abort: (reason?: string) => void;
signal: AbortSignal;
};
setBearerToken: (token: string) => void;
buildUrl: (url: HttpClientInputTemplate, options?: UrlBuilderOptions) => HttpClientInput;
}
export type HttpClientInstanceOptions = HttpClientOptions & {
client?: KyInstance;
urlBuilder?: UrlBuilderInstance;
};
export { HTTPError, TimeoutError };
export declare class HttpClient implements HttpClientInstance {
private _client;
private _urlBuilder;
private _prefixUrl;
constructor(options?: HttpClientInstanceOptions);
get: (url: HttpClientInputTemplate, options?: HttpClientOptions) => ResponsePromise<unknown>;
post: (url: HttpClientInputTemplate, options?: HttpClientOptions) => ResponsePromise<unknown>;
put: (url: HttpClientInputTemplate, options?: HttpClientOptions) => ResponsePromise<unknown>;
delete: (url: HttpClientInputTemplate, options?: HttpClientOptions) => ResponsePromise<unknown>;
patch: (url: HttpClientInputTemplate, options?: HttpClientOptions) => ResponsePromise<unknown>;
head: (url: HttpClientInputTemplate, options?: HttpClientOptions) => ResponsePromise;
request: (method: HttpClientMethod, url: HttpClientInputTemplate, options?: HttpClientRequestOptions) => {
responsePromise: ResponsePromise<unknown>;
abort: (reason?: string) => void;
signal: AbortSignal;
};
fetch: (request: Request) => ResponsePromise<unknown>;
extend: (options?: HttpClientOptions) => void;
clone: (options?: HttpClientOptions) => HttpClient;
setBearerToken: (token: string | undefined | null, { headerName, prefix }?: {
headerName?: string | undefined;
prefix?: string | undefined;
}) => void;
get stop(): symbol;
buildUrl(url: HttpClientInputTemplate, options?: UrlBuilderOptions): HttpClientInput;
static readonly buildUrl: (url: HttpClientInputTemplate, options?: UrlBuilderOptions, builder?: UrlBuilderInstance) => Input;
private static isUrlTemplate;
static readonly createAbortController: (abortController?: AbortController) => {
controller: AbortController;
signal: AbortSignal;
};
}