UNPKG

@volverjs/data

Version:

Repository pattern implementation with a tiny HttpClient based on Fetch API.

80 lines (79 loc) 4.22 kB
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; }; }