@peppierre/typesafe-http-iots
Version:
Type-safe HTTP client for Angular using io-ts and fp-ts
296 lines (290 loc) • 18.8 kB
TypeScript
import { HttpHeaders, HttpContext, HttpParams, HttpClient, HttpEvent, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import * as iots from 'io-ts';
import * as i0 from '@angular/core';
import { Provider } from '@angular/core';
interface HttpOptionsBase<AllowedResponseType = undefined> {
responseType?: AllowedResponseType;
observe?: 'body' | 'events' | 'response' | undefined;
headers?: HttpHeaders | Record<string, string | string[]> | undefined;
context?: HttpContext | undefined;
params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]> | undefined;
reportProgress?: boolean | undefined;
withCredentials?: boolean | undefined;
credentials?: RequestCredentials | undefined;
keepalive?: boolean | undefined;
priority?: RequestPriority | undefined;
cache?: RequestCache | undefined;
mode?: RequestMode | undefined;
redirect?: RequestRedirect | undefined;
referrer?: string | undefined;
integrity?: string | undefined;
transferCache?: boolean | {
includeHeaders?: string[] | undefined;
} | undefined;
timeout?: number | undefined;
body?: unknown;
}
type ArrayBufferBodyOptionsBase = HttpOptionsBase<'arraybuffer'> & {
observe?: 'body' | undefined;
};
type ArrayBufferEventsOptionsBase = HttpOptionsBase<'arraybuffer'> & {
observe: 'events';
};
type ArrayBufferResponseOptionsBase = HttpOptionsBase<'arraybuffer'> & {
observe: 'response';
};
type BlobBodyOptionsBase = HttpOptionsBase<'blob'> & {
observe?: 'body' | undefined;
};
type BlobEventsOptionsBase = HttpOptionsBase<'blob'> & {
observe: 'events';
};
type BlobResponseOptionsBase = HttpOptionsBase<'blob'> & {
observe: 'response';
};
type TextBodyOptionsBase = HttpOptionsBase<'text'> & {
observe?: 'body' | undefined;
};
type TextEventsOptionsBase = HttpOptionsBase<'text'> & {
observe: 'events';
};
type TextResponseOptionsBase = HttpOptionsBase<'text'> & {
observe: 'response';
};
type JsonBodyOptionsBase = HttpOptionsBase<'json' | undefined> & {
observe?: 'body' | undefined;
};
type JsonEventsOptionsBase = HttpOptionsBase<'json' | undefined> & {
observe: 'events';
};
type JsonResponseOptionsBase = HttpOptionsBase<'json' | undefined> & {
observe: 'response';
};
type JsonTypedOptionsBase<T> = JsonBodyOptionsBase & {
runtimeType: iots.Type<T, unknown, unknown>;
};
type JsonEventsTypedOptionsBase<T> = JsonEventsOptionsBase & {
runtimeType: iots.Type<T, unknown, unknown>;
};
type JsonResponseTypedOptionsBase<T> = JsonResponseOptionsBase & {
runtimeType: iots.Type<T, unknown, unknown>;
};
type GetJsonTypedOptions<T> = JsonTypedOptionsBase<T>;
type DeleteJsonTypedOptions<T> = JsonTypedOptionsBase<T>;
type HeadJsonTypedOptions<T> = JsonTypedOptionsBase<T>;
type OptionsJsonTypedOptions<T> = JsonTypedOptionsBase<T>;
type PatchJsonTypedOptions<T> = JsonTypedOptionsBase<T>;
type PostJsonTypedOptions<T> = JsonTypedOptionsBase<T>;
type PutJsonTypedOptions<T> = JsonTypedOptionsBase<T>;
type GetJsonEventsTypedOptions<T> = JsonEventsTypedOptionsBase<T>;
type DeleteJsonEventsTypedOptions<T> = JsonEventsTypedOptionsBase<T>;
type HeadJsonEventsTypedOptions<T> = JsonEventsTypedOptionsBase<T>;
type OptionsJsonEventsTypedOptions<T> = JsonEventsTypedOptionsBase<T>;
type PatchJsonEventsTypedOptions<T> = JsonEventsTypedOptionsBase<T>;
type PostJsonEventsTypedOptions<T> = JsonEventsTypedOptionsBase<T>;
type PutJsonEventsTypedOptions<T> = JsonEventsTypedOptionsBase<T>;
type GetJsonResponseTypedOptions<T> = JsonResponseTypedOptionsBase<T>;
type DeleteJsonResponseTypedOptions<T> = JsonResponseTypedOptionsBase<T>;
type HeadJsonResponseTypedOptions<T> = JsonResponseTypedOptionsBase<T>;
type OptionsJsonResponseTypedOptions<T> = JsonResponseTypedOptionsBase<T>;
type PatchJsonResponseTypedOptions<T> = JsonResponseTypedOptionsBase<T>;
type PostJsonResponseTypedOptions<T> = JsonResponseTypedOptionsBase<T>;
type PutJsonResponseTypedOptions<T> = JsonResponseTypedOptionsBase<T>;
type GetArrayBufferOptions = ArrayBufferBodyOptionsBase;
type DeleteArrayBufferOptions = ArrayBufferBodyOptionsBase;
type HeadArrayBufferOptions = ArrayBufferBodyOptionsBase;
type OptionsArrayBufferOptions = ArrayBufferBodyOptionsBase;
type PatchArrayBufferOptions = ArrayBufferBodyOptionsBase;
type PostArrayBufferOptions = ArrayBufferBodyOptionsBase;
type PutArrayBufferOptions = ArrayBufferBodyOptionsBase;
type GetBlobOptions = BlobBodyOptionsBase;
type DeleteBlobOptions = BlobBodyOptionsBase;
type HeadBlobOptions = BlobBodyOptionsBase;
type OptionsBlobOptions = BlobBodyOptionsBase;
type PatchBlobOptions = BlobBodyOptionsBase;
type PostBlobOptions = BlobBodyOptionsBase;
type PutBlobOptions = BlobBodyOptionsBase;
type GetTextOptions = TextBodyOptionsBase;
type DeleteTextOptions = TextBodyOptionsBase;
type HeadTextOptions = TextBodyOptionsBase;
type OptionsTextOptions = TextBodyOptionsBase;
type PatchTextOptions = TextBodyOptionsBase;
type PostTextOptions = TextBodyOptionsBase;
type PutTextOptions = TextBodyOptionsBase;
type GetJsonOptions = JsonBodyOptionsBase;
type DeleteJsonOptions = JsonBodyOptionsBase;
type HeadJsonOptions = JsonBodyOptionsBase;
type OptionsJsonOptions = JsonBodyOptionsBase;
type PatchJsonOptions = JsonBodyOptionsBase;
type PostJsonOptions = JsonBodyOptionsBase;
type PutJsonOptions = JsonBodyOptionsBase;
type GetArrayBufferEventsOptions = ArrayBufferEventsOptionsBase;
type DeleteArrayBufferEventsOptions = ArrayBufferEventsOptionsBase;
type HeadArrayBufferEventsOptions = ArrayBufferEventsOptionsBase;
type OptionsArrayBufferEventsOptions = ArrayBufferEventsOptionsBase;
type PatchArrayBufferEventsOptions = ArrayBufferEventsOptionsBase;
type PostArrayBufferEventsOptions = ArrayBufferEventsOptionsBase;
type PutArrayBufferEventsOptions = ArrayBufferEventsOptionsBase;
type GetArrayBufferResponseOptions = ArrayBufferResponseOptionsBase;
type DeleteArrayBufferResponseOptions = ArrayBufferResponseOptionsBase;
type HeadArrayBufferResponseOptions = ArrayBufferResponseOptionsBase;
type OptionsArrayBufferResponseOptions = ArrayBufferResponseOptionsBase;
type PatchArrayBufferResponseOptions = ArrayBufferResponseOptionsBase;
type PostArrayBufferResponseOptions = ArrayBufferResponseOptionsBase;
type PutArrayBufferResponseOptions = ArrayBufferResponseOptionsBase;
type GetBlobEventsOptions = BlobEventsOptionsBase;
type DeleteBlobEventsOptions = BlobEventsOptionsBase;
type HeadBlobEventsOptions = BlobEventsOptionsBase;
type OptionsBlobEventsOptions = BlobEventsOptionsBase;
type PatchBlobEventsOptions = BlobEventsOptionsBase;
type PostBlobEventsOptions = BlobEventsOptionsBase;
type PutBlobEventsOptions = BlobEventsOptionsBase;
type GetBlobResponseOptions = BlobResponseOptionsBase;
type DeleteBlobResponseOptions = BlobResponseOptionsBase;
type HeadBlobResponseOptions = BlobResponseOptionsBase;
type OptionsBlobResponseOptions = BlobResponseOptionsBase;
type PatchBlobResponseOptions = BlobResponseOptionsBase;
type PostBlobResponseOptions = BlobResponseOptionsBase;
type PutBlobResponseOptions = BlobResponseOptionsBase;
type GetTextEventsOptions = TextEventsOptionsBase;
type DeleteTextEventsOptions = TextEventsOptionsBase;
type HeadTextEventsOptions = TextEventsOptionsBase;
type OptionsTextEventsOptions = TextEventsOptionsBase;
type PatchTextEventsOptions = TextEventsOptionsBase;
type PostTextEventsOptions = TextEventsOptionsBase;
type PutTextEventsOptions = TextEventsOptionsBase;
type GetTextResponseOptions = TextResponseOptionsBase;
type DeleteTextResponseOptions = TextResponseOptionsBase;
type HeadTextResponseOptions = TextResponseOptionsBase;
type OptionsTextResponseOptions = TextResponseOptionsBase;
type PatchTextResponseOptions = TextResponseOptionsBase;
type PostTextResponseOptions = TextResponseOptionsBase;
type PutTextResponseOptions = TextResponseOptionsBase;
type GetJsonEventsOptions = JsonEventsOptionsBase;
type DeleteJsonEventsOptions = JsonEventsOptionsBase;
type HeadJsonEventsOptions = JsonEventsOptionsBase;
type OptionsJsonEventsOptions = JsonEventsOptionsBase;
type PatchJsonEventsOptions = JsonEventsOptionsBase;
type PostJsonEventsOptions = JsonEventsOptionsBase;
type PutJsonEventsOptions = JsonEventsOptionsBase;
type GetJsonResponseOptions = JsonResponseOptionsBase;
type DeleteJsonResponseOptions = JsonResponseOptionsBase;
type HeadJsonResponseOptions = JsonResponseOptionsBase;
type OptionsJsonResponseOptions = JsonResponseOptionsBase;
type PatchJsonResponseOptions = JsonResponseOptionsBase;
type PostJsonResponseOptions = JsonResponseOptionsBase;
type PutJsonResponseOptions = JsonResponseOptionsBase;
declare class TypesafeHttpService {
private http;
constructor(http: HttpClient);
delete(url: string, options: DeleteArrayBufferOptions): Observable<ArrayBuffer>;
delete(url: string, options: DeleteArrayBufferEventsOptions): Observable<HttpEvent<ArrayBuffer>>;
delete(url: string, options: DeleteArrayBufferResponseOptions): Observable<HttpResponse<ArrayBuffer>>;
delete(url: string, options: DeleteBlobOptions): Observable<Blob>;
delete(url: string, options: DeleteBlobEventsOptions): Observable<HttpEvent<Blob>>;
delete(url: string, options: DeleteBlobResponseOptions): Observable<HttpResponse<Blob>>;
delete(url: string, options: DeleteTextOptions): Observable<string>;
delete(url: string, options: DeleteTextEventsOptions): Observable<HttpEvent<string>>;
delete(url: string, options: DeleteTextResponseOptions): Observable<HttpResponse<string>>;
delete(url: string, options?: DeleteJsonOptions | undefined): Observable<object>;
delete(url: string, options: DeleteJsonEventsOptions): Observable<HttpEvent<object>>;
delete(url: string, options: DeleteJsonResponseOptions): Observable<HttpResponse<object>>;
delete<T>(url: string, options?: DeleteJsonTypedOptions<T> | undefined): Observable<T>;
delete<T>(url: string, options: DeleteJsonEventsTypedOptions<T>): Observable<HttpEvent<T>>;
delete<T>(url: string, options: DeleteJsonResponseTypedOptions<T>): Observable<HttpResponse<T>>;
get(url: string, options: GetArrayBufferOptions): Observable<ArrayBuffer>;
get(url: string, options: GetArrayBufferEventsOptions): Observable<HttpEvent<ArrayBuffer>>;
get(url: string, options: GetArrayBufferResponseOptions): Observable<HttpResponse<ArrayBuffer>>;
get(url: string, options: GetBlobOptions): Observable<Blob>;
get(url: string, options: GetBlobEventsOptions): Observable<HttpEvent<Blob>>;
get(url: string, options: GetBlobResponseOptions): Observable<HttpResponse<Blob>>;
get(url: string, options: GetTextOptions): Observable<string>;
get(url: string, options: GetTextEventsOptions): Observable<HttpEvent<string>>;
get(url: string, options: GetTextResponseOptions): Observable<HttpResponse<string>>;
get(url: string, options?: GetJsonOptions | undefined): Observable<object>;
get(url: string, options: GetJsonEventsOptions): Observable<HttpEvent<object>>;
get(url: string, options: GetJsonResponseOptions): Observable<HttpResponse<object>>;
get<T>(url: string, options?: GetJsonTypedOptions<T> | undefined): Observable<T>;
get<T>(url: string, options: GetJsonEventsTypedOptions<T>): Observable<HttpEvent<T>>;
get<T>(url: string, options: GetJsonResponseTypedOptions<T>): Observable<HttpResponse<T>>;
head(url: string, options: HeadArrayBufferOptions): Observable<ArrayBuffer>;
head(url: string, options: HeadArrayBufferEventsOptions): Observable<HttpEvent<ArrayBuffer>>;
head(url: string, options: HeadArrayBufferResponseOptions): Observable<HttpResponse<ArrayBuffer>>;
head(url: string, options: HeadBlobOptions): Observable<Blob>;
head(url: string, options: HeadBlobEventsOptions): Observable<HttpEvent<Blob>>;
head(url: string, options: HeadBlobResponseOptions): Observable<HttpResponse<Blob>>;
head(url: string, options: HeadTextOptions): Observable<string>;
head(url: string, options: HeadTextEventsOptions): Observable<HttpEvent<string>>;
head(url: string, options: HeadTextResponseOptions): Observable<HttpResponse<string>>;
head(url: string, options?: HeadJsonOptions | undefined): Observable<object>;
head(url: string, options: HeadJsonEventsOptions): Observable<HttpEvent<object>>;
head(url: string, options: HeadJsonResponseOptions): Observable<HttpResponse<object>>;
head<T>(url: string, options?: HeadJsonTypedOptions<T> | undefined): Observable<T>;
head<T>(url: string, options: HeadJsonEventsTypedOptions<T>): Observable<HttpEvent<T>>;
head<T>(url: string, options: HeadJsonResponseTypedOptions<T>): Observable<HttpResponse<T>>;
options(url: string, options: OptionsArrayBufferOptions): Observable<ArrayBuffer>;
options(url: string, options: OptionsArrayBufferEventsOptions): Observable<HttpEvent<ArrayBuffer>>;
options(url: string, options: OptionsArrayBufferResponseOptions): Observable<HttpResponse<ArrayBuffer>>;
options(url: string, options: OptionsBlobOptions): Observable<Blob>;
options(url: string, options: OptionsBlobEventsOptions): Observable<HttpEvent<Blob>>;
options(url: string, options: OptionsBlobResponseOptions): Observable<HttpResponse<Blob>>;
options(url: string, options: OptionsTextOptions): Observable<string>;
options(url: string, options: OptionsTextEventsOptions): Observable<HttpEvent<string>>;
options(url: string, options: OptionsTextResponseOptions): Observable<HttpResponse<string>>;
options(url: string, options?: OptionsJsonOptions | undefined): Observable<object>;
options(url: string, options: OptionsJsonEventsOptions): Observable<HttpEvent<object>>;
options(url: string, options: OptionsJsonResponseOptions): Observable<HttpResponse<object>>;
options<T>(url: string, options?: OptionsJsonTypedOptions<T> | undefined): Observable<T>;
options<T>(url: string, options: OptionsJsonEventsTypedOptions<T>): Observable<HttpEvent<T>>;
options<T>(url: string, options: OptionsJsonResponseTypedOptions<T>): Observable<HttpResponse<T>>;
patch(url: string, body: unknown, options: PatchArrayBufferOptions): Observable<ArrayBuffer>;
patch(url: string, body: unknown, options: PatchArrayBufferEventsOptions): Observable<HttpEvent<ArrayBuffer>>;
patch(url: string, body: unknown, options: PatchArrayBufferResponseOptions): Observable<HttpResponse<ArrayBuffer>>;
patch(url: string, body: unknown, options: PatchBlobOptions): Observable<Blob>;
patch(url: string, body: unknown, options: PatchBlobEventsOptions): Observable<HttpEvent<Blob>>;
patch(url: string, body: unknown, options: PatchBlobResponseOptions): Observable<HttpResponse<Blob>>;
patch(url: string, body: unknown, options: PatchTextOptions): Observable<string>;
patch(url: string, body: unknown, options: PatchTextEventsOptions): Observable<HttpEvent<string>>;
patch(url: string, body: unknown, options: PatchTextResponseOptions): Observable<HttpResponse<string>>;
patch(url: string, body: unknown, options?: PatchJsonOptions | undefined): Observable<object>;
patch(url: string, body: unknown, options: PatchJsonEventsOptions): Observable<HttpEvent<object>>;
patch(url: string, body: unknown, options: PatchJsonResponseOptions): Observable<HttpResponse<object>>;
patch<T>(url: string, body: unknown, options?: PatchJsonTypedOptions<T> | undefined): Observable<T>;
patch<T>(url: string, body: unknown, options: PatchJsonEventsTypedOptions<T>): Observable<HttpEvent<T>>;
patch<T>(url: string, body: unknown, options: PatchJsonResponseTypedOptions<T>): Observable<HttpResponse<T>>;
post(url: string, body: any, options: PostArrayBufferOptions): Observable<ArrayBuffer>;
post(url: string, body: any, options: PostArrayBufferEventsOptions): Observable<HttpEvent<ArrayBuffer>>;
post(url: string, body: any, options: PostArrayBufferResponseOptions): Observable<HttpResponse<ArrayBuffer>>;
post(url: string, body: any, options: PostBlobOptions): Observable<Blob>;
post(url: string, body: any, options: PostBlobEventsOptions): Observable<HttpEvent<Blob>>;
post(url: string, body: any, options: PostBlobResponseOptions): Observable<HttpResponse<Blob>>;
post(url: string, body: any, options: PostTextOptions): Observable<string>;
post(url: string, body: any, options: PostTextEventsOptions): Observable<HttpEvent<string>>;
post(url: string, body: any, options: PostTextResponseOptions): Observable<HttpResponse<string>>;
post(url: string, body: any, options?: PostJsonOptions | undefined): Observable<object>;
post(url: string, body: any, options: PostJsonEventsOptions): Observable<HttpEvent<object>>;
post(url: string, body: any, options: PostJsonResponseOptions): Observable<HttpResponse<object>>;
post<T>(url: string, body: any, options?: PostJsonTypedOptions<T> | undefined): Observable<T>;
post<T>(url: string, body: any, options: PostJsonEventsTypedOptions<T>): Observable<HttpEvent<T>>;
post<T>(url: string, body: any, options: PostJsonResponseTypedOptions<T>): Observable<HttpResponse<T>>;
put(url: string, body: any, options: PutArrayBufferOptions): Observable<ArrayBuffer>;
put(url: string, body: any, options: PutArrayBufferEventsOptions): Observable<HttpEvent<ArrayBuffer>>;
put(url: string, body: any, options: PutArrayBufferResponseOptions): Observable<HttpResponse<ArrayBuffer>>;
put(url: string, body: any, options: PutBlobOptions): Observable<Blob>;
put(url: string, body: any, options: PutBlobEventsOptions): Observable<HttpEvent<Blob>>;
put(url: string, body: any, options: PutBlobResponseOptions): Observable<HttpResponse<Blob>>;
put(url: string, body: any, options: PutTextOptions): Observable<string>;
put(url: string, body: any, options: PutTextEventsOptions): Observable<HttpEvent<string>>;
put(url: string, body: any, options: PutTextResponseOptions): Observable<HttpResponse<string>>;
put(url: string, body: any, options?: PutJsonOptions | undefined): Observable<object>;
put(url: string, body: any, options: PutJsonEventsOptions): Observable<HttpEvent<object>>;
put(url: string, body: any, options: PutJsonResponseOptions): Observable<HttpResponse<object>>;
put<T>(url: string, body: any, options?: PutJsonTypedOptions<T> | undefined): Observable<T>;
put<T>(url: string, body: any, options: PutJsonEventsTypedOptions<T>): Observable<HttpEvent<T>>;
put<T>(url: string, body: any, options: PutJsonResponseTypedOptions<T>): Observable<HttpResponse<T>>;
static ɵfac: i0.ɵɵFactoryDeclaration<TypesafeHttpService, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<TypesafeHttpService>;
}
declare function provideTypesafeHttp(): Provider;
export { TypesafeHttpService, provideTypesafeHttp };