Code Monkey home page Code Monkey logo

Comments (5)

melloware avatar melloware commented on May 28, 2024

I marked as question. I feel like what you want to do is possible with Orval but I have not done it myself. Hopefully someone who has done this can chime in like @soartec-lab ?

from orval.

soartec-lab avatar soartec-lab commented on May 28, 2024

no, I haven't tried it too.

from orval.

Papooch avatar Papooch commented on May 28, 2024

I have done a similar thing as OP with openapi-generator. Orval seems much more lightweight, but sadly the lack of this feature is a deal breaker for truly type-safe APIs.

from orval.

soartec-lab avatar soartec-lab commented on May 28, 2024

@aurbano @Papooch

I inspected this.
If you change the type in the transformer, only primitive types are supported.
In orval, if the user input type is not a primitive type and not an object, it returns unknown as an unintended type. Becouse, orval cannot determine whether it is really an unknown type or whether the user intended to enter the type.

https://github.com/anymaniax/orval/blob/master/packages/core/src/getters/object.ts#L207

If there is a better way to determine the user-defined one, I will fix this issue.

from orval.

Papooch avatar Papooch commented on May 28, 2024

I think the easiest way to solve this would be to create a new configuration option - something like customTypeMapping, which would take a map of openapi type to typescript type (or possibly the format field - which is how it works in openapi-generator).

Some other inspiration could be found in a similar feature for schema-first GraphQL for NestJS (see customScalarTypeMapping, and also notice the additionalHeader setting)

With that in mind, based on OP's example, I would suggest the following API:

Say the OpenAPI schema looks like this:

type: object
properties:
  id:
    type: string
    format: 'x-user-id' # for example
  name:
    type: string

I would lean towards using the format field as the source for custom types, following the example of openapi-generator

The configuration could then look as follows:

customFormatMapping: {
  'x-user-id': {
    typeName: 'UserId', // use the type name as a string
    importFrom: './custom-types' // optionally add an import (although a custom static header could be enough)
  }
}

from orval.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.