A simple and powerful fetch wrapper with interceptors.
npm install @ga-ut/fetcher
# or
bun add @ga-ut/fetcher
# or
yarn add @ga-ut/fetcher
# or
pnpm add @ga-ut/fetcherimport { Fetcher } from '@ga-ut/fetcher';
const fetcher = new Fetcher({
baseUrl: 'https://api.example.com',
});
interface Post {
id: number;
title: string;
body: string;
}
// GET request
const post = await fetcher.get<Post>('/posts/1');
// POST request
const newPost = await fetcher.post<Post>('/posts', {
title: 'foo',
body: 'bar',
userId: 1,
});Interceptors allow you to modify requests and responses.
fetcher.addRequestInterceptor(async (request) => {
const token = localStorage.getItem('token');
if (token) {
request.headers.set('Authorization', `Bearer ${token}`);
}
return request;
});fetcher.addResponseInterceptor(async ({ request, response }) => {
if (response.status === 401) {
// Handle unauthorized requests
// e.g., redirect to login page
}
return { request, response };
});The FetcherError class is thrown when a request fails.
import { Fetcher, FetcherError } from '@ga-ut/fetcher';
const fetcher = new Fetcher();
try {
await fetcher.get('https://httpbin.org/status/404');
} catch (error) {
if (error instanceof FetcherError) {
console.error('URL:', error.url);
console.error('Status Code:', error.statusCode);
}
}You can provide a custom error handler to the Fetcher constructor.
class MyCustomError extends FetcherError {
constructor(public url: string, public statusCode: number) {
super(`Request to ${url} failed with status ${statusCode}`);
}
}
const fetcher = new Fetcher({
baseError: (response) => {
return new MyCustomError(response.url, response.status);
},
});
try {
await fetcher.get('https://httpbin.org/status/404');
} catch (error) {
if (error instanceof MyCustomError) {
console.error(error.message);
}
}Creates a new Fetcher instance.
options.baseUrl: The base URL for all requests.options.baseHeaders: Headers to be sent with every request.options.baseOptions: Default options for every request.options.baseError: A function that returns a custom error instance.
Adds a request interceptor.
Adds a response interceptor.
Sends a GET request.
Sends a POST request.
Sends a PATCH request.
Sends a PUT request.
Sends a DELETE request.