intereq
TypeScript icon, indicating that this package has built-in type declarations

1.1.0 • Public • Published

intereq

License Library minified size Library minified + gzipped size

Apply interceptors to fetch and create a custom request function.

  • ⚡️ Dependency free and pretty small, 0.3KB (minified + gzipped);
  • 🏷 Well type defined with TypeScript (with generics);
  • 📦 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 intereq

Usage

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

  • onError

    onError?: (reason?: Error) => Promise<never>;

    Handle request and response errors.

  • onRequest

    onRequest?: <A extends any[] = [RequestOptions]>(...params: A) => RequestOptions;

    Handle request and define request arguments. A generic type defines returned request function arguments type.

     GIF

  • onRequestError

    onRequestError?: (reason?: Error) => Promise<never>;

    Handle request errors. Overwrites onError handling request errors.

  • onResponse

    onResponse?: <R = Response>(response: R) => R | PromiseLike<R>;

    Handle response and define the request return. R generic type defines returned request function result type.

     GIF

  • onResponseError

    onResponseError?: (reason?: Error) => Promise<never>;

    Handle response errors. Overwrites onError handling response errors.

Usage on unsupported browsers

Do I support fetch?

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.

Package Sidebar

Install

npm i intereq

Weekly Downloads

0

Version

1.1.0

License

MIT

Unpacked Size

14.8 kB

Total Files

9

Last publish

Collaborators

  • vitorluizc