Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/odd-ligers-jump.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@hey-api/openapi-ts": patch
---

fix(client-axios): allow passing `AxiosInstance` into `axios` field
23 changes: 20 additions & 3 deletions docs/openapi-ts/clients/axios.md
Original file line number Diff line number Diff line change
Expand Up @@ -210,12 +210,29 @@ console.log(url); // prints '/foo/1?bar=baz'
You can implement your own `axios` instance. This is useful if you need to extend the default `axios` instance with extra functionality, or replace it altogether.

```js
import axios from 'axios';
import { client } from 'client/client.gen';

// Customize the default axios instance
axios.defaults.baseURL = 'https://example.com';

client.setConfig({
axios: () => {
/* custom `axios` instance */
},
axios: axios,
});
```

or you can pass an `AxiosInstance` created with `axios.create()`:

```js
import axios from 'axios';
import { client } from 'client/client.gen';

const customAxiosInstance = axios.create({
baseURL: 'https://example.com',
});

client.setConfig({
axios: customAxiosInstance,
});
```

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { AxiosError, RawAxiosRequestHeaders } from 'axios';
import type { AxiosError, AxiosInstance, RawAxiosRequestHeaders } from 'axios';
import axios from 'axios';

import type { Client, Config } from './types';
Expand All @@ -13,9 +13,15 @@ import {
export const createClient = (config: Config = {}): Client => {
let _config = mergeConfigs(createConfig(), config);

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
const instance = axios.create(configWithoutAuth);
let instance: AxiosInstance;

if (_config.axios && !('Axios' in _config.axios)) {
instance = _config.axios;
} else {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
instance = axios.create(configWithoutAuth);
}

const getConfig = (): Config => ({ ..._config });

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ export interface Config<T extends ClientOptions = ClientOptions>
extends Omit<CreateAxiosDefaults, 'auth' | 'baseURL' | 'headers' | 'method'>,
CoreConfig {
/**
* Axios implementation. You can use this option to provide a custom
* Axios instance.
* Axios implementation. You can use this option to provide either an
* `AxiosStatic` or an `AxiosInstance`.
*
* @default axios
*/
axios?: AxiosStatic;
axios?: AxiosStatic | AxiosInstance;
/**
* Base URL for all requests made by this client.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { AxiosError, RawAxiosRequestHeaders } from 'axios';
import type { AxiosError, AxiosInstance, RawAxiosRequestHeaders } from 'axios';
import axios from 'axios';

import type { Client, Config } from './types';
Expand All @@ -13,9 +13,15 @@ import {
export const createClient = (config: Config = {}): Client => {
let _config = mergeConfigs(createConfig(), config);

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
const instance = axios.create(configWithoutAuth);
let instance: AxiosInstance;

if (_config.axios && !('Axios' in _config.axios)) {
instance = _config.axios;
} else {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
instance = axios.create(configWithoutAuth);
}

const getConfig = (): Config => ({ ..._config });

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ export interface Config<T extends ClientOptions = ClientOptions>
extends Omit<CreateAxiosDefaults, 'auth' | 'baseURL' | 'headers' | 'method'>,
CoreConfig {
/**
* Axios implementation. You can use this option to provide a custom
* Axios instance.
* Axios implementation. You can use this option to provide either an
* `AxiosStatic` or an `AxiosInstance`.
*
* @default axios
*/
axios?: AxiosStatic;
axios?: AxiosStatic | AxiosInstance;
/**
* Base URL for all requests made by this client.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { AxiosError, RawAxiosRequestHeaders } from 'axios';
import type { AxiosError, AxiosInstance, RawAxiosRequestHeaders } from 'axios';
import axios from 'axios';

import type { Client, Config } from './types';
Expand All @@ -13,9 +13,15 @@ import {
export const createClient = (config: Config = {}): Client => {
let _config = mergeConfigs(createConfig(), config);

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
const instance = axios.create(configWithoutAuth);
let instance: AxiosInstance;

if (_config.axios && !('Axios' in _config.axios)) {
instance = _config.axios;
} else {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
instance = axios.create(configWithoutAuth);
}

const getConfig = (): Config => ({ ..._config });

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ export interface Config<T extends ClientOptions = ClientOptions>
extends Omit<CreateAxiosDefaults, 'auth' | 'baseURL' | 'headers' | 'method'>,
CoreConfig {
/**
* Axios implementation. You can use this option to provide a custom
* Axios instance.
* Axios implementation. You can use this option to provide either an
* `AxiosStatic` or an `AxiosInstance`.
*
* @default axios
*/
axios?: AxiosStatic;
axios?: AxiosStatic | AxiosInstance;
/**
* Base URL for all requests made by this client.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { AxiosError, RawAxiosRequestHeaders } from 'axios';
import type { AxiosError, AxiosInstance, RawAxiosRequestHeaders } from 'axios';
import axios from 'axios';

import type { Client, Config } from './types';
Expand All @@ -13,9 +13,15 @@ import {
export const createClient = (config: Config = {}): Client => {
let _config = mergeConfigs(createConfig(), config);

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
const instance = axios.create(configWithoutAuth);
let instance: AxiosInstance;

if (_config.axios && !('Axios' in _config.axios)) {
instance = _config.axios;
} else {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
instance = axios.create(configWithoutAuth);
}

const getConfig = (): Config => ({ ..._config });

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ export interface Config<T extends ClientOptions = ClientOptions>
extends Omit<CreateAxiosDefaults, 'auth' | 'baseURL' | 'headers' | 'method'>,
CoreConfig {
/**
* Axios implementation. You can use this option to provide a custom
* Axios instance.
* Axios implementation. You can use this option to provide either an
* `AxiosStatic` or an `AxiosInstance`.
*
* @default axios
*/
axios?: AxiosStatic;
axios?: AxiosStatic | AxiosInstance;
/**
* Base URL for all requests made by this client.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { AxiosError, RawAxiosRequestHeaders } from 'axios';
import type { AxiosError, AxiosInstance, RawAxiosRequestHeaders } from 'axios';
import axios from 'axios';

import type { Client, Config } from './types';
Expand All @@ -13,9 +13,15 @@ import {
export const createClient = (config: Config = {}): Client => {
let _config = mergeConfigs(createConfig(), config);

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
const instance = axios.create(configWithoutAuth);
let instance: AxiosInstance;

if (_config.axios && !('Axios' in _config.axios)) {
instance = _config.axios;
} else {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
instance = axios.create(configWithoutAuth);
}

const getConfig = (): Config => ({ ..._config });

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ export interface Config<T extends ClientOptions = ClientOptions>
extends Omit<CreateAxiosDefaults, 'auth' | 'baseURL' | 'headers' | 'method'>,
CoreConfig {
/**
* Axios implementation. You can use this option to provide a custom
* Axios instance.
* Axios implementation. You can use this option to provide either an
* `AxiosStatic` or an `AxiosInstance`.
*
* @default axios
*/
axios?: AxiosStatic;
axios?: AxiosStatic | AxiosInstance;
/**
* Base URL for all requests made by this client.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { AxiosError, RawAxiosRequestHeaders } from 'axios';
import type { AxiosError, AxiosInstance, RawAxiosRequestHeaders } from 'axios';
import axios from 'axios';

import type { Client, Config } from './types';
Expand All @@ -13,9 +13,15 @@ import {
export const createClient = (config: Config = {}): Client => {
let _config = mergeConfigs(createConfig(), config);

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
const instance = axios.create(configWithoutAuth);
let instance: AxiosInstance;

if (_config.axios && !('Axios' in _config.axios)) {
instance = _config.axios;
} else {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
instance = axios.create(configWithoutAuth);
}

const getConfig = (): Config => ({ ..._config });

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ export interface Config<T extends ClientOptions = ClientOptions>
extends Omit<CreateAxiosDefaults, 'auth' | 'baseURL' | 'headers' | 'method'>,
CoreConfig {
/**
* Axios implementation. You can use this option to provide a custom
* Axios instance.
* Axios implementation. You can use this option to provide either an
* `AxiosStatic` or an `AxiosInstance`.
*
* @default axios
*/
axios?: AxiosStatic;
axios?: AxiosStatic | AxiosInstance;
/**
* Base URL for all requests made by this client.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { AxiosError, RawAxiosRequestHeaders } from 'axios';
import type { AxiosError, AxiosInstance, RawAxiosRequestHeaders } from 'axios';
import axios from 'axios';

import type { Client, Config } from './types';
Expand All @@ -13,9 +13,15 @@ import {
export const createClient = (config: Config = {}): Client => {
let _config = mergeConfigs(createConfig(), config);

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
const instance = axios.create(configWithoutAuth);
let instance: AxiosInstance;

if (_config.axios && !('Axios' in _config.axios)) {
instance = _config.axios;
} else {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
instance = axios.create(configWithoutAuth);
}

const getConfig = (): Config => ({ ..._config });

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ export interface Config<T extends ClientOptions = ClientOptions>
extends Omit<CreateAxiosDefaults, 'auth' | 'baseURL' | 'headers' | 'method'>,
CoreConfig {
/**
* Axios implementation. You can use this option to provide a custom
* Axios instance.
* Axios implementation. You can use this option to provide either an
* `AxiosStatic` or an `AxiosInstance`.
*
* @default axios
*/
axios?: AxiosStatic;
axios?: AxiosStatic | AxiosInstance;
/**
* Base URL for all requests made by this client.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { AxiosError, RawAxiosRequestHeaders } from 'axios';
import type { AxiosError, AxiosInstance, RawAxiosRequestHeaders } from 'axios';
import axios from 'axios';

import type { Client, Config } from './types';
Expand All @@ -13,9 +13,15 @@ import {
export const createClient = (config: Config = {}): Client => {
let _config = mergeConfigs(createConfig(), config);

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
const instance = axios.create(configWithoutAuth);
let instance: AxiosInstance;

if (_config.axios && !('Axios' in _config.axios)) {
instance = _config.axios;
} else {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
instance = axios.create(configWithoutAuth);
}

const getConfig = (): Config => ({ ..._config });

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ export interface Config<T extends ClientOptions = ClientOptions>
extends Omit<CreateAxiosDefaults, 'auth' | 'baseURL' | 'headers' | 'method'>,
CoreConfig {
/**
* Axios implementation. You can use this option to provide a custom
* Axios instance.
* Axios implementation. You can use this option to provide either an
* `AxiosStatic` or an `AxiosInstance`.
*
* @default axios
*/
axios?: AxiosStatic;
axios?: AxiosStatic | AxiosInstance;
/**
* Base URL for all requests made by this client.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { AxiosError, RawAxiosRequestHeaders } from 'axios';
import type { AxiosError, AxiosInstance, RawAxiosRequestHeaders } from 'axios';
import axios from 'axios';

import type { Client, Config } from './types';
Expand All @@ -13,9 +13,15 @@ import {
export const createClient = (config: Config = {}): Client => {
let _config = mergeConfigs(createConfig(), config);

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
const instance = axios.create(configWithoutAuth);
let instance: AxiosInstance;

if (_config.axios && !('Axios' in _config.axios)) {
instance = _config.axios;
} else {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { auth, ...configWithoutAuth } = _config;
instance = axios.create(configWithoutAuth);
}

const getConfig = (): Config => ({ ..._config });

Expand Down
Loading
Loading