intereq v1.1.0
intereq
Apply interceptors to fetch and create a custom request function.
- :zap: Dependency free and pretty small, 0.3KB (minified + gzipped);
- :label: Well type defined with TypeScript (with generics);
- :package: There are ESM, CommonJS and UMD distributions;
Installation
This library is published in the NPM registry and can be installed using any compatible package manager.
npm install intereq --save
# Use the command below if you're using Yarn.
yarn add intereqUsage
intereq is curry function, which applies interceptors to fetch and returns a new request function.
import intereq from 'intereq';
type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
const request = intereq(window.fetch, {
onRequest: (method: Method, route: string, data: any = undefined) => ({
url: 'https://api.example.com' + route,
body: JSON.stringify(data),
method,
headers: { 'Content-Type': 'application/json' }
}),
onResponse: (response: Response) => {
if (response.status === 403)
throw new Error('Authorization error.');
return response.json();
},
onError: (error:? Error) => {
sentry.captureException(error);
return Promise.reject(message);
}
});
request('POST', '/user', {
name: 'Vitor'
})
.then((response) => response.success && alert('User was created!'));Interceptors
onErroronError?: (reason?: Error) => Promise<never>;Handle request and response errors.
onRequestonRequest?: <A extends any[] = [RequestOptions]>(...params: A) => RequestOptions;Handle request and define request arguments.
Ageneric type defines returnedrequestfunction arguments type.
onRequestErroronRequestError?: (reason?: Error) => Promise<never>;Handle request errors. Overwrites
onErrorhandling request errors.onResponseonResponse?: <R = Response>(response: R) => R | PromiseLike<R>;Handle response and define the request return.
Rgeneric type defines returnedrequestfunction result type.
onResponseErroronResponseError?: (reason?: Error) => Promise<never>;Handle response errors. Overwrites
onErrorhandling response errors.
Usage on unsupported browsers
Older browsers don't support Fetch API, but you can use unfetch or other polyfill to achieve it.
import fetch from 'unfetch';
import intereq from 'intereq';
export default intereq(fetch, {
onRequest: (options) => ({
...options,
headers: {
...options.headers,
'Content-Type': 'application/json'
}
}),
onResponse: (response) => response.json()
});Usage on Node.js
Node environment does not provide global fetch function, but you can use node-fetch to achieve it.
const fetch = require('node-fetch');
const intereq = require('intereq');
module.exports = intereq(fetch, {
onResponse (response) {
return response.json();
}
});License
Released under MIT License.