orval
orval copied to clipboard
Zod: preprocess enable except on response?
Thanks developers for this awesome tool.
I have a question for zod preprocess.
Expectation
zod preprocess is enabled on body. (In my environment, preprocess is enabled on response only)
Version
System:
OS: macOS 13.6.7
CPU: (8) arm64 Apple M1 Pro
Memory: 84.08 MB / 32.00 GB
Shell: 3.2.57 - /bin/bash
npmPackages:
axios: ^1.7.4 => 1.7.4
msw: ^2.3.0 => 2.3.0
orval: ^7.0.1 => 7.0.1
react: ^18 => 18.3.1
swr: ^2.2.5 => 2.2.5
zod: ^3.23.8 => 3.23.8
My configuration
https://orval.dev/reference/configuration/output#preprocess
orval.config.js
module.exports = {
client: {
input: {
target: './swagger.yaml',
},
output: {
mode: 'tags-split',
client: 'swr',
target: 'src/gen/endpoints',
schemas: 'src/gen/models',
mock: true,
},
},
zod: {
input: {
target: './swagger.yaml',
},
output: {
mode: 'tags-split',
client: 'zod',
target: 'src/gen/endpoints',
fileExtension: '.zod.ts',
override: {
zod: {
strict: {
response: true,
query: true,
param: true,
header: true,
body: true
},
coerce: {
response: true,
query: true,
param: true,
header: true,
body: true
},
preprocess: {
body: { // This does not work
name: 'bar',
path: './src/mutators.ts',
},
},
},
},
},
},
}
I read this code and I was convinced preprocess is enabled on response only now.
Do you have a plan to be enable preprocess except on response?
In addition, do you have method to enable preprocess except on response without orval.config.js at the moment?
@mktktmr is this your issue: https://github.com/orval-labs/orval/issues/1586 ???
@mktktmr is this your issue: #1586 ???
@melloware No. I want to use zod preprocess in request body. So, I think #1586 is different to this issue.
How about this one https://github.com/orval-labs/orval/issues/1575 ???
@melloware Thanks. #1575 is almost same. I think the both issues mention that preprocess does not work except on response.
// ...
override: {
zod: {
preprocess: {
response: { /**/ }, // work well
body: { /**/ }, // This does not work (mentioned by this issue)
query: { /**/ }, // This does not work (mentioned by #1575)
param: { /**/ }, // Maybe this does not work too
header: { /**/ }, // Maybe This does not work too
},
@mktktmr thanks for the clarification. Interested in investigating and providing a PR? If it works for Resposne then it should be easy to implement that code for the other sections?
@melloware I see. I'll give it a try.
@mktktmr any progress?
@melloware Sorry for the delay in working on this issue. I think this issue has been resolved by https://github.com/orval-labs/orval/pull/1940. Thanks you @anymaniax
@melloware When trying to add a preprocessor for query params, there is no effect unless you add a preprocess for response. See my comment on #1940: https://github.com/orval-labs/orval/pull/1940/files#r2114145873. The same issue is present for the other preprocessors.