orval icon indicating copy to clipboard operation
orval copied to clipboard

Invalid hooks generation using custom instance

Open nctay opened this issue 2 years ago • 3 comments

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

nctay avatar Aug 23 '22 17:08 nctay

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

nctay avatar Aug 23 '22 17:08 nctay

Gonna check that asap

anymaniax avatar Aug 23 '22 19:08 anymaniax

Should be fixed with the next version

anymaniax avatar Aug 23 '22 19:08 anymaniax