File size: 1,803 Bytes
5ef6e9d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | import { defineConfig, InputTransformerFn } from "orval";
import path from "path";
const root = path.resolve(__dirname, "..", "..");
const apiClientReactSrc = path.resolve(root, "lib", "api-client-react", "src");
const apiZodSrc = path.resolve(root, "lib", "api-zod", "src");
// Our exports make assumptions about the title of the API being "Api" (i.e. generated output is `api.ts`).
const titleTransformer: InputTransformerFn = (config) => {
config.info ??= {};
config.info.title = "Api";
return config;
};
export default defineConfig({
"api-client-react": {
input: {
target: "./openapi.yaml",
override: {
transformer: titleTransformer,
},
},
output: {
workspace: apiClientReactSrc,
target: "generated",
client: "react-query",
mode: "split",
baseUrl: "/api",
clean: true,
prettier: true,
override: {
fetch: {
includeHttpResponseReturnType: false,
},
mutator: {
path: path.resolve(apiClientReactSrc, "custom-fetch.ts"),
name: "customFetch",
},
},
},
},
zod: {
input: {
target: "./openapi.yaml",
override: {
transformer: titleTransformer,
},
},
output: {
workspace: apiZodSrc,
client: "zod",
target: "generated",
schemas: { path: "generated/types", type: "typescript" },
mode: "split",
clean: true,
prettier: true,
override: {
zod: {
coerce: {
query: ['boolean', 'number', 'string'],
param: ['boolean', 'number', 'string'],
body: ['bigint', 'date'],
response: ['bigint', 'date'],
},
},
useDates: true,
useBigInt: true,
},
},
},
});
|