Enhanced fetch API with cache strategy, retry pattern, timeout, helper methods and enhanced types.
yarn add @alwatr/fetch
import {fetch} from 'https://esm.run/@alwatr/fetch';
const response = await fetch({
url: '/api/products',
queryParameters: {limit: 10},
timeout: 5_000,
retry: 3,
cacheStrategy: 'stale_while_revalidate',
});
if (!response.ok) throw new Error('fetch_failed');
const productList = await response.json();
console.log(productList);
FetchOptions
inherited from the fetch standard parameters and some other...
-
url
: Request URL. -
bodyJson
: Body as JS Object. -
queryParameters
: URL Query Parameters as JS Object. -
timeout
: A timeout in ms for the fetch request (default10_000
ms). -
retry
: If fetch response not acceptable or timed out, it will retry the request (default3
). -
retryDelay
: Delay before each retries (default1_000
). -
removeDuplicate
: Simple memory caching for remove duplicate/parallel requests (defaultnever
).-
never
: Never use memory caching. -
always
: Always use memory caching and remove all duplicate requests (just by method+url). -
until_load
: Cache parallel requests until request completed (it will be removed after the promise resolved). -
auto
: If CacheStorage was supported useuntil_load
strategy else usealways
.
-
-
cacheStrategy
: Strategies for caching (defaultnetwork_only
).-
network_only
: Only network request without any cache. -
network_first
: Network first, falling back to cache. -
cache_only
: Cache only without any network request. -
cache_first
: Cache first, falling back to network. -
stale_while_revalidate
: Fastest strategy, Use cached first but always request network to update the cache.
-
-
revalidateCallback
: Revalidate callback forstale_while_revalidate
cache strategy. -
cacheStorageName
: Cache storage custom name (defaultalwatr_fetch_cache
).
Read more about standard cache strategies
The following companies, organizations, and individuals support Nanolib ongoing maintenance and development. Become a Sponsor to get your logo on our README and website.
Contributions are welcome! Please read our contribution guidelines before submitting a pull request.
This project is licensed under the AGPL-3.0 License.