repo_description: Promise based HTTP client for the browser and node.js
repo_topics: hacktoberfest http-client javascript nodejs promise
code: 'use strict';
  
  import utils from './utils.js';
  import bind from './helpers/bind.js';
  import Axios from './core/Axios.js';
  import mergeConfig from './core/mergeConfig.js';
  import defaults from './defaults/index.js';
  import formDataToJSON from './helpers/formDataToJSON.js';
  import CanceledError from './cancel/CanceledError.js';
  import CancelToken from './cancel/CancelToken.js';
  import isCancel from './cancel/isCancel.js';
  import { VERSION } from './env/data.js';
  import toFormData from './helpers/toFormData.js';
  import AxiosError from './core/AxiosError.js';
  import spread from './helpers/spread.js';
  import isAxiosError from './helpers/isAxiosError.js';
  import AxiosHeaders from './core/AxiosHeaders.js';
  import adapters from './adapters/adapters.js';
  import HttpStatusCode from './helpers/HttpStatusCode.js';
  
  /**
   * Create an instance of Axios
   *
   * @param {Object} defaultConfig The default config for the instance
   *
   * @returns {Axios} A new instance of Axios
   */
  function createInstance(defaultConfig) {
    const context = new Axios(defaultConfig);
    const instance = bind(Axios.prototype.request, context);
  
    // Copy axios.prototype to instance
    utils.extend(instance, Axios.prototype, context, { allOwnKeys: true });
  
    // Copy context to instance
    utils.extend(instance, context, null, { allOwnKeys: true });
  
    // Factory for creating new instances
    instance.create = function create(instanceConfig) {
      return createInstance(mergeConfig(defaultConfig, instanceConfig));
    };
  
    return instance;
  }
  
  // Create the default instance to be exported
  const axios = createInstance(defaults);
  
  // Expose Axios class to allow class inheritance
  axios.Axios = Axios;
  
  // Expose Cancel & CancelToken
  axios.CanceledError = CanceledError;
  axios.CancelToken = CancelToken;
  axios.isCancel = isCancel;
  axios.VERSION = VERSION;
  axios.toFormData = toFormData;
  
  // Expose AxiosError class
  axios.AxiosError = AxiosError;
  
  // alias for CanceledError for backward compatibility
  axios.Cancel = axios.CanceledError;
  
  // Expose all/spread
  axios.all = function all(promises) {
    return Promise.all(promises);
  };
  
  axios.spread = spread;
  
  // Expose isAxiosError
  axios.isAxiosError = isAxiosError;
  
  // Expose mergeConfig
  axios.mergeConfig = mergeConfig;
  
  axios.AxiosHeaders = AxiosHeaders;
  
  axios.formToJSON = (thing) => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);
  
  axios.getAdapter = adapters.getAdapter;
  
  axios.HttpStatusCode = HttpStatusCode;
  
  axios.default = axios;
  
  // this module should only have a default export
  export default axios;
  