orval
orval copied to clipboard
Invalid hooks generation using custom instance
Original closed issue https://github.com/anymaniax/orval/issues/525
@anymaniax still the case with 6.9.6.
Here i have a base useCustomInstance :
import Axios, { AxiosInstance, AxiosRequestConfig } from 'axios'
import { useCredentials } from '../store/useCredentials'
export const useCustomInstance = <T>(
AXIOS_INSTANCE: AxiosInstance
): ((config: AxiosRequestConfig) => Promise<T>) => {
const [credentials] = useCredentials()
return (config: AxiosRequestConfig) => {
const source = Axios.CancelToken.source()
const promise = AXIOS_INSTANCE({
...config,
cancelToken: source.token,
headers: {
Authorization: `Bearer ${credentials}`,
...config.headers
}
})
.then(({ data }) => data)
.catch((err) => {
if (err.response.status !== 401 && err.response.status !== 403) {
// todo error
}
return Promise.reject(err)
})
// @ts-ignore
promise.cancel = () => {
source.cancel('Query was cancelled by React Query')
}
return promise
}
}
export default useCustomInstance
And then I'm using a wrapper useCustomInstanceAuth over base custom instance :
import Axios, { AxiosRequestConfig } from 'axios'
import useCustomInstance from './use-custom-instance'
export const AXIOS_INSTANCE = Axios.create({
baseURL: process.env.NODE_ENV === 'development' ? '/auth/api' : '/auth'
})
export const useCustomInstanceAuth = <T>(): ((config: AxiosRequestConfig) => Promise<T>) => {
return useCustomInstance(AXIOS_INSTANCE)
}
export default useCustomInstanceAuth
Using just plane useCustomInstance results in correct hook generation. But using useCustomInstanceAuth results in problem that was explained in original issue.
Interesting, though, this pattern worked on <=6.9.4
I suppose this condition can't handle a wrapper over a custom instance https://github.com/anymaniax/orval/blob/6975aff41f915b019b7b66184427ac5ac09ca4bf/src/core/generators/mutator.ts#L85
Gonna check that asap
Should be fixed with the next version