orval-labs / orval

orval is able to generate client with appropriate type-signatures (TypeScript) from any valid OpenAPI v3 or Swagger v2 specification, either in yaml or json formats. 🍺
https://orval.dev
MIT License
3.03k stars 333 forks source link

Zod: preprocess enable except on response? #1601

Open mktktmr opened 2 months ago

mktktmr commented 2 months ago

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',
            },
          },
        },
      },
    },
  },
}
mktktmr commented 2 months ago

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?

melloware commented 2 months ago

@mktktmr is this your issue: https://github.com/orval-labs/orval/issues/1586 ???

mktktmr commented 2 months ago

@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.

melloware commented 2 months ago

How about this one https://github.com/orval-labs/orval/issues/1575 ???

mktktmr commented 2 months ago

@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
          },
melloware commented 2 months ago

@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?

mktktmr commented 2 months ago

@melloware I see. I'll give it a try.