Install Kubb Dependencies
>_ Terminal
yarn add -D @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-client @kubb/plugin-ts
>_ Terminal
yarn add -D @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-client @kubb/plugin-ts
Adjustment need to be made in this file.
>_ Terminal
echo "" > .\src\lib\axios-instance.ts
axios-instance.ts
import type { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'
import axios from 'axios'
import env from '@/utils/env'
/**
* Subset of AxiosRequestConfig
*/
export type RequestConfig<TData = unknown> = {
url?: string
method: any
params?: unknown
data?: TData
responseType?:
| 'arraybuffer'
| 'blob'
| 'document'
| 'json'
| 'text'
| 'stream'
signal?: AbortSignal
headers?: AxiosRequestConfig['headers']
}
/**
* Subset of AxiosResponse
*/
export type ResponseConfig<TData = unknown> = {
data: TData
status: number
statusText: string
headers?: AxiosResponse['headers']
}
export type ResponseErrorConfig<TError = unknown> = AxiosError<TError>
export const axiosInstance = axios.create({
baseURL: env.API_URL,
})
export const axiosClient = async <
TData,
TError = unknown,
TVariables = unknown,
>(
config: RequestConfig<TVariables>
): Promise<ResponseConfig<TData>> => {
const accessToken = await getYourAccessToken()
return axiosInstance
.request<TVariables, ResponseConfig<TData>>({
...config,
headers: {
Authorization: `Bearer ${accessToken}`,
},
})
.catch((e: AxiosError<TError>) => {
throw e
})
}
export default axiosClient
Note that you need to have the swagger file locally.
>_ Terminal
echo "" > kubb.config.ts
kubb.config.ts
import { rmSync, writeFileSync } from 'node:fs'
import { defineConfig } from '@kubb/core'
import { pluginClient } from '@kubb/plugin-client'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import axios from 'axios'
const downloadSwagger = async () => {
const { data } = await axios.get('YOUR_SWAGGER_URL')
rmSync('swagger.json', { force: true })
writeFileSync('swagger.json', JSON.stringify(data))
}
const main = async () => {
await downloadSwagger()
const config = defineConfig({
root: '.',
input: {
path: './swagger.json',
},
output: {
path: './src/services',
clean: true,
},
plugins: [
pluginOas({
validate: true,
}),
pluginTs(),
pluginClient({
client: 'axios',
importPath: 'YOUR_GOOD_IMPORT_PATH',
}),
],
})
return config
}
export default main
Add a script into you package.json file.
package.json
"scripts": {
...
"gen": "kubb generate && eslint --fix . && prettier --write .",
"gen-nolint": "kubb kubb generate"
},
>_ Terminal
yarn run gen