0.0.4 • Published 2 years ago

@drpiou/axios v0.0.4

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

@drpiou/axios

Licence Package.json version Stage

The @drpiou/axios package wraps the axios package.

  • make axios request as usual.
  • test the requests before the api implementation as it will be.
  • cancel axios requests.
  • log axios responses.
  • written in TypeScript.

Installation

yarn add @drpiou/axios

Peer Dependencies

yarn add axios@^0.27.2

Example

import { prepareAxios } from '@drpiou/axios';

const request = prepareAxios({
  baseURL: 'https://api.domain.com',
  url: 'test',
});

const response = await request.start();

// or
//
// void request.start().then((response) => {});
//
// setTimeout(request.abort, 1000);

Documentation

import axios, {
  AxiosError,
  AxiosRequestConfig,
  AxiosResponse as AxiosResponse_Import,
} from 'axios';

export type prepareAxios = <SD = any, ED = any, CD = any>(
  config: AxiosConfig<CD>,
  options?: AxiosOptions<SD, ED>,
) => AxiosRequest<SD, ED, CD>;

export type AxiosConfig<CD = any> = AxiosRequestConfig<CD>;

export type AxiosLog =
  | 'verbose'
  | 'info'
  | 'success'
  | 'error'
  | 'response'
  | 'none';

export type AxiosOptions<SD = any, ED = any> = {
  axios?: typeof axios;
  isNetworkConnected?: () => Promise<boolean>;
  log?: AxiosLog;
  test?: boolean;
  testCancel?: boolean;
  testData?: SD | ED;
  testNetworkError?: boolean;
  testSleep?: number;
  testStatus?: number;
};

export type AxiosResponse<SD = any, ED = any, CD = any> =
  | AxiosResponseSuccess<SD, CD>
  | AxiosResponseError<ED, CD>;

export type AxiosResponseSuccess<SD = any, CD = any> = AxiosResponseBase & {
  data: SD;
  isError: false;
  response: AxiosResponse_Import<SD, CD>;
};

export type AxiosResponseError<ED = any, CD = any> = AxiosResponseBase & {
  data?: ED;
  error: AxiosError<ED, CD> | Error;
  isAxiosError: boolean;
  isError: true;
  isCancel: boolean;
  isConnexionError: boolean;
  isConnexionTimeoutError: boolean;
  isNetworkError?: boolean;
  response?: AxiosResponse_Import<ED, CD>;
};

type AxiosResponseBase = {
  elapsedTime: number;
};

export type AxiosRequest<SD = any, ED = any, CD = any> = {
  start: AxiosRequestStart<SD, ED, CD>;
  abort: AxiosRequestAbort;
};

export type AxiosRequestStart<SD = any, ED = any, CD = any> = () => Promise<
  AxiosResponseRequest<SD, ED, CD>
>;

export type AxiosRequestAbort = () => void;