🔗 Query Fetch
Lightweight and Easy-to-Use Fetch API Extension Library.
English
•
한국어
What is Query Fetch?
The Fetch API often lacks necessary features, requiring direct implementation. You have to handle retries on failure, token renewal, request and response logging, request cancellation, and more on your own. Additionally, you often need to repeat the same configurations for every request.
Moreover, dealing with Promise objects can be quite challenging. Using Promises for asynchronous processing can lead to complex structures and difficult error handling. Managing multiple asynchronous requests sequentially or in parallel can reduce code readability and maintainability.
To address these issues, Query Fetch was created. It alleviates the burden of network communication, allowing you to focus on your core logic!
Features
- Instance Management: Query Fetch allows you to create multiple instances, each with different settings. This makes it easy to manage integrations with various API endpoints or services.
- Automatic Retries: Automatically retries requests in case of network errors or server issues.
- Request Cancellation: Provides the ability to cancel unnecessary requests.
- Token Management: Automatically refreshes authentication tokens when they expire and retries the request.
- Type Safe: Fully supports TypeScript, ensuring accurate type inference and minimizing unnecessary types.
Installation
Query Fetch is available on npm. You can install it using the following commands.
npm i @gwansikk/query-fetch
pnpm add @gwansikk/query-fetch
yarn add @gwansikk/query-fetch
Usage
[!IMPORTANT]
Query Fetch is currently in development. The provided API is subject to change.
Instance
const queryFetch = createQueryFetch({
baseURL: 'https://jsonplaceholder.typicode.com',
});
server.get({ url: 'posts/1' }).then((data) => console.log(data));
Interceptor
const queryFetch = createQueryFetch({
baseURL: 'https://jsonplaceholder.typicode.com',
interceptors: {
request: (request) => {
console.log('** request interceptor **');
request.headers = {
...request.headers,
Authorization: 'Bearer YOUR_ACCESS_TOKEN',
};
return request;
},
response: (response) => {
console.log('** response interceptor **');
return response;
},
error: (response) => {
console.log('** error interceptor **');
return response;
},
},
});
server.get({ url: 'posts/1' }).then((data) => console.log(data));
FetchOptions
const queryFetch = createQueryFetch({
baseURL: 'https://jsonplaceholder.typicode.com',
});
function postsFetchOptions(id: number) {
return fetchOptions({
endpoint: ['post', id],
});
}
queryFetch.get<FetchResponse>(postsFetchOptions(1)).then((data) => console.log(data));
Roadmap
Here is the roadmap for the official release (v1.0.0):
Contributing
We welcome contribution from everyone in the community. Read below for detailed contribution guide.
CONTRIBUTING.md
License
For more details, please refer to the LICENSE.
MIT © gwansikk