my-http-resource
Version:
Reactive Angular HttpClient wrapper with RxJS & Signals. Angular 17+.
75 lines (69 loc) • 2.11 kB
TypeScript
import { Signal, WritableSignal } from '@angular/core';
import { Observable, UnaryFunction } from 'rxjs';
import { HttpErrorResponse } from '@angular/common/http';
type TQueryParams = {
[key: string]: string | number | boolean;
};
type TUrlParams = {
[key: string]: string | number;
};
type TFetchData = {
urlParams?: TUrlParams;
mergeValues?: boolean;
};
type Get = {
queryParams?: TQueryParams;
} & TFetchData;
type Delete = {
queryParams?: TQueryParams;
} & TFetchData;
type Post = {
body?: object;
} & TFetchData;
type Patch = {
body?: object;
} & TFetchData;
type Put = {
body?: object;
} & TFetchData;
interface IHttpResource<Method, T = any> {
loading: Signal<boolean>;
value: WritableSignal<T>;
error: WritableSignal<unknown>;
fetch: (fetData?: Method) => void;
request$: (fetData?: Method) => Observable<any>;
}
interface IBaseRequestData<T> {
url: string;
afterSuccess?: (data: T) => void;
afterError?: (error: HttpErrorResponse) => void;
headers?: Record<string, string | number>;
initialValue?: any;
manual?: boolean;
mergeValues?: boolean;
pipe?: UnaryFunction<Observable<T>, Observable<T>>;
urlParams?: TUrlParams;
}
interface IGetOrDeleteData<T> extends IBaseRequestData<T> {
queryParams?: TQueryParams;
}
interface IPostOrPutOrPatchData<T> extends IBaseRequestData<T> {
body?: object;
}
declare class MyHttpService {
private http;
private destroyRef;
private getAfterActions;
private mergeResult;
private createUrl;
private getHttp;
get<T = any>(data: IGetOrDeleteData<T>): IHttpResource<Get, T>;
post<T = any>(data: IPostOrPutOrPatchData<T>): IHttpResource<Post, T>;
patch<T = any>(data: IPostOrPutOrPatchData<T>): IHttpResource<Patch, T>;
put<T = any>(data: IPostOrPutOrPatchData<T>): IHttpResource<Put, T>;
delete<T = any>(data: IGetOrDeleteData<T>): IHttpResource<Delete, T>;
private createResource;
}
declare function myHttpResource(): MyHttpService;
export { myHttpResource };
export type { Delete, Get, IHttpResource, Patch, Post, Put };