orval icon indicating copy to clipboard operation
orval copied to clipboard

Zod: preprocess enable except on response?

Open mktktmr opened this issue 1 year ago • 7 comments

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 avatar Aug 28 '24 08:08 mktktmr

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 avatar Aug 28 '24 08:08 mktktmr

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

melloware avatar Aug 28 '24 12:08 melloware

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

mktktmr avatar Aug 28 '24 23:08 mktktmr

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

melloware avatar Aug 29 '24 00:08 melloware

@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 avatar Aug 29 '24 03:08 mktktmr

@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 avatar Aug 29 '24 12:08 melloware

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

mktktmr avatar Aug 30 '24 07:08 mktktmr

@mktktmr any progress?

melloware avatar Mar 27 '25 00:03 melloware

@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

mktktmr avatar Apr 02 '25 06:04 mktktmr

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

lucademian avatar May 29 '25 14:05 lucademian