New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

angular-http-handler

Package Overview
Dependencies
Maintainers
0
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

angular-http-handler - npm Package Compare versions

Comparing version
0.0.2
to
1.0.0
+37
-24
esm2022/lib/http-handler.mjs
import { catchError, finalize, of, retry, tap } from "rxjs";
export function handle(dataSetter, loadingSetter, errorHandler, retryCount = 0, retryDelay) {
return (source$) => source$.pipe(tap(() => {
let defaultErrorHandler;
export function setDefaultErrorHandler(handler) {
defaultErrorHandler = handler;
}
let defaultRetryCount = 0;
export function setDefaultRetryCount(count) {
defaultRetryCount = count;
}
let defaultRetryDelay = 0;
export function setDefaultRetryDelay(delay) {
defaultRetryDelay = delay;
}
export function handle(dataSetter, loadingSetter, fallbackValue, errorHandler, retryCount = defaultRetryCount, retryDelay = defaultRetryDelay) {
return (source$) => {
if (loadingSetter) {
loadingSetter(true);
}
}), retry({
count: retryCount,
delay: retryDelay,
resetOnSuccess: true
}), tap((data) => dataSetter(data)), catchError((error) => {
/* const errorMsg = error.error instanceof ErrorEvent
? `Error: ${error.error.message}` // Client-side error
: `Error Code: ${error.status}, Message: ${error.message}`; // Server-side error
console.error(errorMsg); */
// Call the provided error handler if it exists
if (errorHandler) {
errorHandler(error);
}
const fallback = (Array.isArray([]) ? [] : null);
dataSetter(fallback);
return of(fallback);
}), finalize(() => {
if (loadingSetter) {
loadingSetter(false);
}
}));
return source$.pipe(retry({
count: retryCount,
delay: retryDelay,
resetOnSuccess: true
}), tap((data) => dataSetter(data)), catchError((error, caught) => {
if (errorHandler) {
errorHandler(error);
}
else if (defaultErrorHandler) {
defaultErrorHandler(error);
}
if (fallbackValue !== undefined) {
dataSetter(fallbackValue);
return of(fallbackValue);
}
return of(null);
}), finalize(() => {
if (loadingSetter) {
loadingSetter(false);
}
}));
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1odHRwLWhhbmRsZXIvc3JjL2xpYi9odHRwLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEUsTUFBTSxVQUFVLE1BQU0sQ0FDbEIsVUFBaUMsRUFDakMsYUFBMEMsRUFDMUMsWUFBaUQsRUFDakQsYUFBcUIsQ0FBQyxFQUN0QixVQUFtQjtJQUVuQixPQUFPLENBQUMsT0FBc0IsRUFBRSxFQUFFLENBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNQLElBQUcsYUFBYSxFQUFDO1lBQ2YsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxDQUFDO1FBQ0osS0FBSyxFQUFFLFVBQVU7UUFDakIsS0FBSyxFQUFFLFVBQVU7UUFDakIsY0FBYyxFQUFFLElBQUk7S0FDckIsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLElBQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ2xDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzdCOzs7K0NBR3VDO1FBRTNCLCtDQUErQztRQUMvQyxJQUFJLFlBQVksRUFBRTtZQUNkLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QjtRQUVELE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFNLENBQUM7UUFFdEUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JCLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDWixJQUFHLGFBQWEsRUFBQztZQUNmLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QjtJQUNILENBQUMsQ0FBQyxDQUNMLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIE9ic2VydmFibGUsIG9mLCByZXRyeSwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGU8VD4oXHJcbiAgICBkYXRhU2V0dGVyOiAocmVzcG9uc2U6IFQpID0+IHZvaWQsXHJcbiAgICBsb2FkaW5nU2V0dGVyPzogKGxvYWRpbmc6IGJvb2xlYW4pID0+IHZvaWQsXHJcbiAgICBlcnJvckhhbmRsZXI/OiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB2b2lkLFxyXG4gICAgcmV0cnlDb3VudDogbnVtYmVyID0gMCxcclxuICAgIHJldHJ5RGVsYXk/OiBudW1iZXIsXHJcbiAgKTogKHNvdXJjZSQ6IE9ic2VydmFibGU8VD4pID0+IE9ic2VydmFibGU8VD4ge1xyXG4gICAgcmV0dXJuIChzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+KSA9PlxyXG4gICAgICBzb3VyY2UkLnBpcGUoXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIGlmKGxvYWRpbmdTZXR0ZXIpe1xyXG4gICAgICAgICAgICBsb2FkaW5nU2V0dGVyKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHJldHJ5KHtcclxuICAgICAgICAgIGNvdW50OiByZXRyeUNvdW50LFxyXG4gICAgICAgICAgZGVsYXk6IHJldHJ5RGVsYXksXHJcbiAgICAgICAgICByZXNldE9uU3VjY2VzczogdHJ1ZVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRhcCgoZGF0YTogVCkgPT4gZGF0YVNldHRlcihkYXRhKSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuLyogICAgICAgICAgICAgY29uc3QgZXJyb3JNc2cgPSBlcnJvci5lcnJvciBpbnN0YW5jZW9mIEVycm9yRXZlbnQgXHJcbiAgICAgICAgICAgID8gYEVycm9yOiAke2Vycm9yLmVycm9yLm1lc3NhZ2V9YCAvLyBDbGllbnQtc2lkZSBlcnJvclxyXG4gICAgICAgICAgICA6IGBFcnJvciBDb2RlOiAke2Vycm9yLnN0YXR1c30sIE1lc3NhZ2U6ICR7ZXJyb3IubWVzc2FnZX1gOyAvLyBTZXJ2ZXItc2lkZSBlcnJvclxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yTXNnKTsgKi9cclxuICAgICAgICBcclxuICAgICAgICAgICAgLy8gQ2FsbCB0aGUgcHJvdmlkZWQgZXJyb3IgaGFuZGxlciBpZiBpdCBleGlzdHNcclxuICAgICAgICAgICAgaWYgKGVycm9ySGFuZGxlcikge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmFsbGJhY2sgPSAoQXJyYXkuaXNBcnJheShbXSBhcyB1bmtub3duIGFzIFQpID8gW10gOiBudWxsKSBhcyBUO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZGF0YVNldHRlcihmYWxsYmFjayk7XHJcbiAgICAgICAgICAgIHJldHVybiBvZihmYWxsYmFjayk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgaWYobG9hZGluZ1NldHRlcil7XHJcbiAgICAgICAgICAgIGxvYWRpbmdTZXR0ZXIoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG4gIH0iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1odHRwLWhhbmRsZXIvc3JjL2xpYi9odHRwLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEUsSUFBSSxtQkFBcUUsQ0FBQztBQUMxRSxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBMkM7SUFDaEYsbUJBQW1CLEdBQUcsT0FBTyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxJQUFJLGlCQUFpQixHQUFXLENBQUMsQ0FBQztBQUNsQyxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBYTtJQUNoRCxpQkFBaUIsR0FBRyxLQUFLLENBQUM7QUFDNUIsQ0FBQztBQUVELElBQUksaUJBQWlCLEdBQVcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxLQUFhO0lBQ2hELGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUM1QixDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FDbEIsVUFBaUMsRUFDakMsYUFBMEMsRUFDMUMsYUFBbUIsRUFDbkIsWUFBaUQsRUFDakQsYUFBcUIsaUJBQWlCLEVBQ3RDLGFBQXFCLGlCQUFpQjtJQUV0QyxPQUFPLENBQUMsT0FBc0IsRUFBRSxFQUFFO1FBQ2hDLElBQUcsYUFBYSxFQUFDO1lBQ2YsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUVqQixLQUFLLENBQUM7WUFDSixLQUFLLEVBQUUsVUFBVTtZQUNqQixLQUFLLEVBQUUsVUFBVTtZQUNqQixjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFDLEVBRUYsR0FBRyxDQUFDLENBQUMsSUFBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFFbEMsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxNQUFxQixFQUFFLEVBQUU7WUFDN0QsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNyQjtpQkFBTSxJQUFJLG1CQUFtQixFQUFFO2dCQUM5QixtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM1QjtZQUVELElBQUcsYUFBYSxLQUFLLFNBQVMsRUFBQztnQkFDN0IsVUFBVSxDQUFDLGFBQWtCLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxFQUFFLENBQUMsYUFBa0IsQ0FBQyxDQUFDO2FBQy9CO1lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBUyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLEVBRUYsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUcsYUFBYSxFQUFDO2dCQUNmLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0QjtRQUNILENBQUMsQ0FBQyxDQUVILENBQUM7SUFDSixDQUFDLENBQUE7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIE9ic2VydmFibGUsIG9mLCByZXRyeSwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmxldCBkZWZhdWx0RXJyb3JIYW5kbGVyOiAoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0RXJyb3JIYW5kbGVyKGhhbmRsZXI6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHZvaWQpIHtcclxuICBkZWZhdWx0RXJyb3JIYW5kbGVyID0gaGFuZGxlcjtcclxufVxyXG5cclxubGV0IGRlZmF1bHRSZXRyeUNvdW50OiBudW1iZXIgPSAwO1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdFJldHJ5Q291bnQoY291bnQ6IG51bWJlcikge1xyXG4gIGRlZmF1bHRSZXRyeUNvdW50ID0gY291bnQ7XHJcbn1cclxuXHJcbmxldCBkZWZhdWx0UmV0cnlEZWxheTogbnVtYmVyID0gMDtcclxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRSZXRyeURlbGF5KGRlbGF5OiBudW1iZXIpIHtcclxuICBkZWZhdWx0UmV0cnlEZWxheSA9IGRlbGF5O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlPFQ+KFxyXG4gICAgZGF0YVNldHRlcjogKHJlc3BvbnNlOiBUKSA9PiB2b2lkLFxyXG4gICAgbG9hZGluZ1NldHRlcj86IChsb2FkaW5nOiBib29sZWFuKSA9PiB2b2lkLFxyXG4gICAgZmFsbGJhY2tWYWx1ZT86IGFueSxcclxuICAgIGVycm9ySGFuZGxlcj86IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHZvaWQsXHJcbiAgICByZXRyeUNvdW50OiBudW1iZXIgPSBkZWZhdWx0UmV0cnlDb3VudCxcclxuICAgIHJldHJ5RGVsYXk6IG51bWJlciA9IGRlZmF1bHRSZXRyeURlbGF5LFxyXG4gICk6IChzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+KSA9PiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIHJldHVybiAoc291cmNlJDogT2JzZXJ2YWJsZTxUPikgPT4ge1xyXG4gICAgICBpZihsb2FkaW5nU2V0dGVyKXtcclxuICAgICAgICBsb2FkaW5nU2V0dGVyKHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzb3VyY2UkLnBpcGUoXHJcblxyXG4gICAgICAgIHJldHJ5KHtcclxuICAgICAgICAgIGNvdW50OiByZXRyeUNvdW50LFxyXG4gICAgICAgICAgZGVsYXk6IHJldHJ5RGVsYXksXHJcbiAgICAgICAgICByZXNldE9uU3VjY2VzczogdHJ1ZVxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICB0YXAoKGRhdGE6IFQpID0+IGRhdGFTZXR0ZXIoZGF0YSkpLFxyXG5cclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsIGNhdWdodDogT2JzZXJ2YWJsZTxUPikgPT4ge1xyXG4gICAgICAgICAgaWYgKGVycm9ySGFuZGxlcikge1xyXG4gICAgICAgICAgICBlcnJvckhhbmRsZXIoZXJyb3IpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkZWZhdWx0RXJyb3JIYW5kbGVyKSB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmKGZhbGxiYWNrVmFsdWUgIT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIGRhdGFTZXR0ZXIoZmFsbGJhY2tWYWx1ZSBhcyBUKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbGxiYWNrVmFsdWUgYXMgVCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCBhcyBUKTtcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgaWYobG9hZGluZ1NldHRlcil7XHJcbiAgICAgICAgICAgIGxvYWRpbmdTZXR0ZXIoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=

@@ -1,29 +0,42 @@

import { tap, retry, catchError, of, finalize } from 'rxjs';
import { retry, tap, catchError, of, finalize } from 'rxjs';
function handle(dataSetter, loadingSetter, errorHandler, retryCount = 0, retryDelay) {
return (source$) => source$.pipe(tap(() => {
let defaultErrorHandler;
function setDefaultErrorHandler(handler) {
defaultErrorHandler = handler;
}
let defaultRetryCount = 0;
function setDefaultRetryCount(count) {
defaultRetryCount = count;
}
let defaultRetryDelay = 0;
function setDefaultRetryDelay(delay) {
defaultRetryDelay = delay;
}
function handle(dataSetter, loadingSetter, fallbackValue, errorHandler, retryCount = defaultRetryCount, retryDelay = defaultRetryDelay) {
return (source$) => {
if (loadingSetter) {
loadingSetter(true);
}
}), retry({
count: retryCount,
delay: retryDelay,
resetOnSuccess: true
}), tap((data) => dataSetter(data)), catchError((error) => {
/* const errorMsg = error.error instanceof ErrorEvent
? `Error: ${error.error.message}` // Client-side error
: `Error Code: ${error.status}, Message: ${error.message}`; // Server-side error
console.error(errorMsg); */
// Call the provided error handler if it exists
if (errorHandler) {
errorHandler(error);
}
const fallback = (Array.isArray([]) ? [] : null);
dataSetter(fallback);
return of(fallback);
}), finalize(() => {
if (loadingSetter) {
loadingSetter(false);
}
}));
return source$.pipe(retry({
count: retryCount,
delay: retryDelay,
resetOnSuccess: true
}), tap((data) => dataSetter(data)), catchError((error, caught) => {
if (errorHandler) {
errorHandler(error);
}
else if (defaultErrorHandler) {
defaultErrorHandler(error);
}
if (fallbackValue !== undefined) {
dataSetter(fallbackValue);
return of(fallbackValue);
}
return of(null);
}), finalize(() => {
if (loadingSetter) {
loadingSetter(false);
}
}));
};
}

@@ -35,3 +48,3 @@

export { handle };
export { handle, setDefaultErrorHandler, setDefaultRetryCount, setDefaultRetryDelay };
//# sourceMappingURL=angular-http-handler.mjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"angular-http-handler.mjs","sources":["../../../projects/angular-http-handler/src/lib/http-handler.ts","../../../projects/angular-http-handler/src/angular-http-handler.ts"],"sourcesContent":["import { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { catchError, finalize, Observable, of, retry, tap } from \"rxjs\";\r\n\r\nexport function handle<T>(\r\n dataSetter: (response: T) => void,\r\n loadingSetter?: (loading: boolean) => void,\r\n errorHandler?: (error: HttpErrorResponse) => void,\r\n retryCount: number = 0,\r\n retryDelay?: number,\r\n ): (source$: Observable<T>) => Observable<T> {\r\n return (source$: Observable<T>) =>\r\n source$.pipe(\r\n tap(() => {\r\n if(loadingSetter){\r\n loadingSetter(true);\r\n }\r\n }),\r\n retry({\r\n count: retryCount,\r\n delay: retryDelay,\r\n resetOnSuccess: true\r\n }),\r\n tap((data: T) => dataSetter(data)),\r\n catchError((error) => {\r\n/* const errorMsg = error.error instanceof ErrorEvent \r\n ? `Error: ${error.error.message}` // Client-side error\r\n : `Error Code: ${error.status}, Message: ${error.message}`; // Server-side error\r\n console.error(errorMsg); */\r\n \r\n // Call the provided error handler if it exists\r\n if (errorHandler) {\r\n errorHandler(error);\r\n }\r\n\r\n const fallback = (Array.isArray([] as unknown as T) ? [] : null) as T;\r\n \r\n dataSetter(fallback);\r\n return of(fallback);\r\n }),\r\n finalize(() => {\r\n if(loadingSetter){\r\n loadingSetter(false);\r\n }\r\n })\r\n );\r\n }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;AAGgB,SAAA,MAAM,CAClB,UAAiC,EACjC,aAA0C,EAC1C,YAAiD,EACjD,UAAA,GAAqB,CAAC,EACtB,UAAmB,EAAA;AAEnB,IAAA,OAAO,CAAC,OAAsB,KAC5B,OAAO,CAAC,IAAI,CACV,GAAG,CAAC,MAAK;AACP,QAAA,IAAG,aAAa,EAAC;YACf,aAAa,CAAC,IAAI,CAAC,CAAC;AACrB,SAAA;KACF,CAAC,EACF,KAAK,CAAC;AACJ,QAAA,KAAK,EAAE,UAAU;AACjB,QAAA,KAAK,EAAE,UAAU;AACjB,QAAA,cAAc,EAAE,IAAI;AACrB,KAAA,CAAC,EACF,GAAG,CAAC,CAAC,IAAO,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,EAClC,UAAU,CAAC,CAAC,KAAK,KAAI;AAC7B;;;AAGuC;;AAG3B,QAAA,IAAI,YAAY,EAAE;YACd,YAAY,CAAC,KAAK,CAAC,CAAC;AACvB,SAAA;AAED,QAAA,MAAM,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,EAAkB,CAAC,GAAG,EAAE,GAAG,IAAI,CAAM,CAAC;QAEtE,UAAU,CAAC,QAAQ,CAAC,CAAC;AACrB,QAAA,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;AACxB,KAAC,CAAC,EACF,QAAQ,CAAC,MAAK;AACZ,QAAA,IAAG,aAAa,EAAC;YACf,aAAa,CAAC,KAAK,CAAC,CAAC;AACtB,SAAA;KACF,CAAC,CACL,CAAC;AACJ;;AC7CF;;AAEG;;;;"}
{"version":3,"file":"angular-http-handler.mjs","sources":["../../../projects/angular-http-handler/src/lib/http-handler.ts","../../../projects/angular-http-handler/src/angular-http-handler.ts"],"sourcesContent":["import { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { catchError, finalize, Observable, of, retry, tap } from \"rxjs\";\r\n\r\nlet defaultErrorHandler: ((error: HttpErrorResponse) => void) | undefined;\r\nexport function setDefaultErrorHandler(handler: (error: HttpErrorResponse) => void) {\r\n defaultErrorHandler = handler;\r\n}\r\n\r\nlet defaultRetryCount: number = 0;\r\nexport function setDefaultRetryCount(count: number) {\r\n defaultRetryCount = count;\r\n}\r\n\r\nlet defaultRetryDelay: number = 0;\r\nexport function setDefaultRetryDelay(delay: number) {\r\n defaultRetryDelay = delay;\r\n}\r\n\r\nexport function handle<T>(\r\n dataSetter: (response: T) => void,\r\n loadingSetter?: (loading: boolean) => void,\r\n fallbackValue?: any,\r\n errorHandler?: (error: HttpErrorResponse) => void,\r\n retryCount: number = defaultRetryCount,\r\n retryDelay: number = defaultRetryDelay,\r\n ): (source$: Observable<T>) => Observable<T> {\r\n return (source$: Observable<T>) => {\r\n if(loadingSetter){\r\n loadingSetter(true);\r\n }\r\n return source$.pipe(\r\n\r\n retry({\r\n count: retryCount,\r\n delay: retryDelay,\r\n resetOnSuccess: true\r\n }),\r\n\r\n tap((data: T) => dataSetter(data)),\r\n\r\n catchError((error: HttpErrorResponse, caught: Observable<T>) => {\r\n if (errorHandler) {\r\n errorHandler(error);\r\n } else if (defaultErrorHandler) {\r\n defaultErrorHandler(error);\r\n }\r\n\r\n if(fallbackValue !== undefined){\r\n dataSetter(fallbackValue as T);\r\n return of(fallbackValue as T);\r\n }\r\n return of(null as T);\r\n }),\r\n\r\n finalize(() => {\r\n if(loadingSetter){\r\n loadingSetter(false);\r\n }\r\n })\r\n\r\n );\r\n }\r\n}\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;AAGA,IAAI,mBAAqE,CAAC;AACpE,SAAU,sBAAsB,CAAC,OAA2C,EAAA;IAChF,mBAAmB,GAAG,OAAO,CAAC;AAChC,CAAC;AAED,IAAI,iBAAiB,GAAW,CAAC,CAAC;AAC5B,SAAU,oBAAoB,CAAC,KAAa,EAAA;IAChD,iBAAiB,GAAG,KAAK,CAAC;AAC5B,CAAC;AAED,IAAI,iBAAiB,GAAW,CAAC,CAAC;AAC5B,SAAU,oBAAoB,CAAC,KAAa,EAAA;IAChD,iBAAiB,GAAG,KAAK,CAAC;AAC5B,CAAC;AAEe,SAAA,MAAM,CAClB,UAAiC,EACjC,aAA0C,EAC1C,aAAmB,EACnB,YAAiD,EACjD,UAAA,GAAqB,iBAAiB,EACtC,aAAqB,iBAAiB,EAAA;IAEtC,OAAO,CAAC,OAAsB,KAAI;AAChC,QAAA,IAAG,aAAa,EAAC;YACf,aAAa,CAAC,IAAI,CAAC,CAAC;AACrB,SAAA;AACD,QAAA,OAAO,OAAO,CAAC,IAAI,CAEjB,KAAK,CAAC;AACJ,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,cAAc,EAAE,IAAI;SACrB,CAAC,EAEF,GAAG,CAAC,CAAC,IAAO,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,EAElC,UAAU,CAAC,CAAC,KAAwB,EAAE,MAAqB,KAAI;AAC7D,YAAA,IAAI,YAAY,EAAE;gBAChB,YAAY,CAAC,KAAK,CAAC,CAAC;AACrB,aAAA;AAAM,iBAAA,IAAI,mBAAmB,EAAE;gBAC9B,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC5B,aAAA;YAED,IAAG,aAAa,KAAK,SAAS,EAAC;gBAC7B,UAAU,CAAC,aAAkB,CAAC,CAAC;AAC/B,gBAAA,OAAO,EAAE,CAAC,aAAkB,CAAC,CAAC;AAC/B,aAAA;AACD,YAAA,OAAO,EAAE,CAAC,IAAS,CAAC,CAAC;AACvB,SAAC,CAAC,EAEF,QAAQ,CAAC,MAAK;AACZ,YAAA,IAAG,aAAa,EAAC;gBACf,aAAa,CAAC,KAAK,CAAC,CAAC;AACtB,aAAA;SACF,CAAC,CAEH,CAAC;AACJ,KAAC,CAAA;AACL;;AC9DA;;AAEG;;;;"}
import { HttpErrorResponse } from "@angular/common/http";
import { Observable } from "rxjs";
export declare function handle<T>(dataSetter: (response: T) => void, loadingSetter?: (loading: boolean) => void, errorHandler?: (error: HttpErrorResponse) => void, retryCount?: number, retryDelay?: number): (source$: Observable<T>) => Observable<T>;
export declare function setDefaultErrorHandler(handler: (error: HttpErrorResponse) => void): void;
export declare function setDefaultRetryCount(count: number): void;
export declare function setDefaultRetryDelay(delay: number): void;
export declare function handle<T>(dataSetter: (response: T) => void, loadingSetter?: (loading: boolean) => void, fallbackValue?: any, errorHandler?: (error: HttpErrorResponse) => void, retryCount?: number, retryDelay?: number): (source$: Observable<T>) => Observable<T>;
{
"name": "angular-http-handler",
"version": "0.0.2",
"version": "1.0.0",
"description": "This is the http handler utility for Angular http requests",

@@ -5,0 +5,0 @@ "keywords": [

+55
-12

@@ -56,2 +56,3 @@ # Angular HTTP Handler

},
[], // OPTIONAL - custom fallback value
(error) => { // OPTIONAL - custom error handler

@@ -68,16 +69,6 @@ console.log(error);

## Fallback Response Behavior
The `handle` function guarantees that a fallback response will always be returned in case of an error, based on the type of the response (`T`).
- **If the expected response is an array type (e.g., `string[]`, `any[]`)**, the fallback will be an empty array (`[]`).
- **If the expected response is any other type (e.g., `string`, `number`, `object`)**, the fallback will be `null`.
This ensures that the `dataSetter` will always receive a value of type `T` even in the case of an error, simplifying error handling and avoiding undefined values in your application.
## API
The handle function manages HTTP requests with loading state, error handling and retry.
The `handle` function manages HTTP requests with loading state, error handling and retry.
Parameters:

@@ -91,2 +82,5 @@

- fallbackValue?: any
Value that will be returned in case of error.
- errorHandler?: (error: HttpErrorResponse) => void

@@ -102,2 +96,51 @@ Optional function to handle errors (e.g., console.error(error)).

- Returns
An Observable<T> that handles the request, error, retry.
An Observable<T> that handles the request, error, retry.
The `setDefaultErrorHandler` set default error handler for every handler request. In case custom error handler is passed as a parameter to handle function it will overwrite the default one.
Use it on root component on init method:
```typescript
import { HttpErrorResponse } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { setDefaultErrorHandler } from 'angular-http-handler';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
ngOnInit(): void {
setDefaultErrorHandler((error: HttpErrorResponse) => {
console.log('deafult handler', error);
customErrorHandlerFuction(error);
});
}
}
```
The `defaultRetryCount` and `setDefaultRetryDelay` set default number of retry in case of error and time between the calls. If you pass it as a parameter it will overwrite the default value.
Use it on root component on init method:
```typescript
import { HttpErrorResponse } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { setDefaultRetryCount, setDefaultRetryDelay } from 'angular-http-handler';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
ngOnInit(): void {
setDefaultRetryCount(2);
setDefaultRetryDelay(500);
}
}
```
## Fallback Response Behavior
The `handle` function returns a fallback response in case you define it as a 3rd parameter. In case you do not define it it will remain undefined and it will not trigger dataSetter function.