typed-openapi
typed-openapi copied to clipboard
Generate a headless Typescript API client from an OpenAPI spec
Hi, Seems like when applying default values to some parameters in the OpenAPI spec, those defaults are not carried over in the codegen. This could be useful especially for Zod,...
Hello, I've noticed that the code generation doesn't allow for having both required **and** optional parameters for an endpoint. [Example](https://typed-openapi-web.vercel.app/?input=N4KABGBED2AOCmA7AhrAlpAXFAzAOgAZDIAacKNRAM2izFAgkgBc1mAbeOyAFXgGdmYAIIAFAJKlyTAG7wATvzTRE3IusjkAvmSaxkzABb86DRpAD0zAc1PTzAc3i3sZxubgKDyxOIAm3NaCUu7ukPryyAC2zgom2ADa9qH0ySlQKDGBNgD68vAAjgCuaPkBuulhlNzFCgCeIZXm%2BcWl8AHYzPJF8BVNUPwAxobwUch2-WHMdQjcgvKUDpqTYFpp7jrrjG5NkJlc2Cy5cKwqyOw5AIyN-ZDVh7XyDX27LSVldFTn-L1bYUMjMYTFZQaazQ7zRbLSZrfqbfo7Sp7aIHUHHWCnFAXABMN129ygj2ef2ahXe7U%2B31%2BK0gANG41cJKmM1RtK6UKZqxJsPSAF0XmF8vxYCofvFUrc-PAvkV2C4JZNIFKhgsMT5uMJEGAioh4AAPBCDax%2BMAKeTQeRgIUixA-PB4pGDFTWRDyxG7VCwdhoQbeFQWABW-BUph5cO5WzDjCjPPhUCdURtSGY4rMazWQA) ```yaml "parameters": [ { "name": "test_required", "in": "query", "required": true,...
I've copied the output of the standard PetStore example into a [TypeScript playground](https://www.typescriptlang.org/play?#code/KYDwDg9gTgLgBAOwIYFtgGcxIMbDgZWwAtgUl04BvAKDjgHp64AeQks9APlrlEljgwAnmDwB5KABNgUOAF44ABSSwAlkgA2zGnTqrJALkQBXFACMZAbh51RMAJKGT5qzbgBHY0gQxVwowimFlDWunDoRKpgACJIMMBG6DBQqggA5qG6SXHG6EYARGAaOMCS+XAAPnD5SGBgUBAAbqXlVfnSGqrNUC2ZdNgQKEXA8UZmEBAawN6ZAL6cmXzQ8MKicACCkpI96BQKymqa2uHJwCOJyakZcNh+Qhcp6ZYncQknj9cAXlEPV3Dzi3Ay0EIjwAGFcjBBjJ5EoVL4jpQ4PoAkErHBcjJkGhfk84Egtjs8hsoFAkEJmJtthguP8FjwlgJVuDXmloEJYQcEVokSjnMFnti3kkPnTAfwVqC4ABVdAw-bw9Q8tx8wIuEJuTFQIW4jJuABmqigSQAcqhhZcnm5iqbzbq+rwyKoNPa3FhdgB3aBOEVXB1gIgQBAWj4OrX4GA5YlqgU8AEMoFMqUAFSQaU5isRyKcMfROvef3jdEZkrWihGsJ0un0AH5UerKhiENJDcHJA7876rWFsKz2XW4GC+1AOVVjM3gK3Sv7A1DpVANMT1qTycwu2l6WFI2l0APl2SKamN43xy3UtO3NkYLkBzVGkhnUgzFNWtVRM2rq-8uhJmUTxOp3bONxWBZkNjAVQACUMEgBA5QzQ4eRuCBpHrAUQVEe04DQXY0xDQt6R4RgWHoNhSHIbhZmoagS0Qc1MBKOAAFFm0gVIYAoKtiOYFjJDYnwuGo4tE1LPAwGMGAAH1pTASRXnLeAFCrOg0BgQMnHyRRpWTfJ-TiIgCnoOxdLdFRzXiY0jGU3Rxkke4CGIcj0AAOgUh1ZgdHZYLlIwyI4VyRjmECkzWSAkkkqkFMrNxVPUgpFDEfAdL0tTDOMvSyVUmRiWsuhbPsvzyACmB3M8mCgx8hz2CKtzgITCUMLwNIRkkgAxVJJAU9AACEhAjKNorCWKUIKABxJjktM1LqiMkZ6FbSRev6690BMsIsEykZsqstw6E8GR7K5JVjivXICiQe9H2fYAv3fSRP0bb9f3KItdA8twvIqt591XQqXIUzd-mC0S4GaqT2ubLreqPPYqBikY4uqcbJvW-S0rmhbobTVaMvM7a4bCPbjAOowjqzbclxXCl104MU3HesJPrg76qdYRz-IBoL6tAqUwck0aRgU3rHEG3Rho05G1t0LBpvyWaYHoSg7EcWYpdsMysssgnCZlgyqDgZWczRWQGbesrMC+3z2ZqwK6uEhqwLCqSZLk+IFIAdT8IhWugFBRZUhGRuqBKkrVg20ZmuxFcN1Xcc1nLdo8YmR1JzMkM7S1rlO4l1zpwnw+mpFDbQmFTboMu4CZyrxwAawQCAPQQLn7Z5tYOi2yTomAKY3YrJT4bUoP8miJiABkJqYsPdfRhWlZGFWp41ratdygu9aL+ejYbCu6BIAkZFTxDjlqVRJJr4B7Nz17y-N7y3lr+vG+b3gRMag2IHCmSNAgAl2qmf3sKBw0iHFG0sI5yyjnPBwkhZj0GMEUH+kh7BkGaovTaFkE7532inOER8kQEnur4IMmgACyIwCRxCQLqPOOsI4b2gSXE21hE75VdGECuVc3h-WcusCC0ELbM2frRMCfMBYOAQM0Hw7IAHizGhNRest6BJGgMAegqRJFQhHGgvGWtgzdFvpbJsdcG5Nzti-B2UonaSUUMUXAEhpCyH7kNIB8VEqgPVoo5RPR6DehkNo+OO186sKqk5Zy9jXDsIMczK21UXLhI1DfbmIUmotTEfE4WkgZEuKRvIlKes5ZeNUb4qAitikLzjsvTBtDC5wDKVvYIQN6ZRMqtw+JQjX5gXbvETu3ctrxKyYPDSI9x7JknnkwyhSfFSBkKU6ZUBymmXQfjVe099Z1MYY0yJH1yrRKMY-UxiSW7JPfuFMEPRXiynlNrAOgzXGh3GTNLU-jKmBMJsE7hlyElm22QIlp1sXKfPaRY0KH8pJnOmPET56BPZqVHqoJI9gEDiUUtcwBtzg5uIUfkuBcoSnYHOfEGFRA4VJGeRg15YRgk-QpB83FgNDm6E4TE0JgKzHCN5i1UeEA0ipE+QMxG+RJYPLllqeg38eUIDJcsxO2DDpp2OFqDOoZw6em9NQ6+mzGU7MquuIFrcUlSS5WyCSfKnFi2yYK3JU1sWivFRACSUrdHAH0T8u+RgH4mL1cc0RIxPm9TNGgflQ8hXWsMqKygirzSx0WToqpqMamRpxAWdImqGV0CZSE-yrKGXstChJaSskLm4qDcA7SWKw24sVom4A0bUZLJXonVZSJq3quYUElCBV-nOWzd8xm2r74IGMU-NlHSpRdOAD0nuwBTWotkdUYZE9y2PMrRG3FQpa1gPrXGsBCa112mTemCuHD+3usHfsrmREmDMHoLxfiHFKLUW4reiA7FepkMGdwXNeBn2vqEO+9SotkUUsjiMfIRgf0CWcsigtrtgC1TCCKld1bVbgdYi+yD0GXZFoiZqp2wGIGgdQ3xdDHEoOgoilseDugCOzxjmB5iaH2IuSsVh3uMAiU+ygCgB0NHo6b1gfA7+BJkF4XoxB0jLGEG-2dMAHjSjNFFLmWJxjGHyM2JKG0twiG-FEbvcx8j4LsNfLoNpvFBLgBEpJTAZTxGmNkdOeZqFln4XiORc-MG+H5bzQ6ktSMK0bN6ecnzCGnURg9T6n53Icmo6YyEDDALJGXLBY6lDOL2NotzSgQvXTiWgupMFiMDJcnJnqOAFIrROW7M+vERo9kxWFNTIcbMhx2WGO2cg9V9JQhHBydtdy1ICWqucv6wgHtJmcUzLtQ6yrHXhvGpgGN5dMzV1YijYN2bUkxF+qEAG2TZjx2ecgXRmbpHx2Tq2lR8bkzinNZkK18TLkztdynZphDE2Skre1Gtk7j3endOe1tHt713rUG4jelTMA31AO4KDq94moeDOcvgQMsAiDeEkIJL9SgJIPdhPDv9QCADahQHUAF1rBY8UKC3HCh8f-pQsTp2+Ryc0VHWsMRNO2t3oR+pYnYNmcU7Z3gAH8ROd06J+0P7N0WdY-WBoDQYuIc84Z+fIQEB9Rc5I8ryQLOwfi8R8j5YaPmyCVhywXhqgwSdDKzAZMoJMdC81+xA4sbRb5QHB64dRMDoDmggMKQa5M4ABo9kmMBnvBxvvgD+8kIHj4IfPcIEBrrKPMe49XAT2esP1gQdY5IRJOIqggz08yQoQooLboOsejLYgX5x0mTz0A2E+R+ePQj6+fPfmi8IBL8wrHXd9RIGMBoGA4nANLwwQOcTLv47-jPG2TIGbE8577478TzBkxgiDIadMoB4gm7gAPofI+x8KCP8P0fEPaZmogKIMkRCECODYWixGveeCrN1e-if2UByb+36oNIRnb-Y0AXHgVSKhVFTQdQHOTOB0NHdAGfF5OAcYSYaYA5XQFQODYA9AaCTwI0UoMYCYKYGYMxDNP-BAHfYnThUAkHMCVqEYRyRxOAAACjAOyRLyDx4GMAXF1E4PVi3Snwh0QIwTn0nHPEkE4IAEp5BaZFAGgUB4VgAeIIcqD+1mdCIwJcDjB8DJAABpC+dADfa-bWQnRQZEBAOAVXdXOAZMUnAAWg9wAnEJfn3wxxsNMNJzgBrEQGdRhFJhz0JysI11sOYTAhIXJAsDEDAAf00GXDSCMNhC0J0P0KEEMOTFpj3zKzcL0RhG8MJwGAoIAN-08KMHyP-zSCMBCMfSvXoAtyt1UBtzt1EFN24jqOtx8E-VfmwBtAoDaIaJ8G1jMHIGnR4IPWbxMh4AKJFGMGwE0WYPEmfFUGwDgH1AYJICgCMHoJgEYOkMoCoh4DlEh2GPnA0GYKGLlBON1F2LcDUnhWcnOJGI0FhAeJOLKmvG1EEEiHQDmCEgYCvT6Jtygwkm4FsAkmYGUDUhcKyIoCCOx0v3aw4hD1GQhyhIP0UBxwh3QFMP0lJ04FYPjT1ghKID4N0GcjJI2lQGJHCKEEiOiO71iKgHiORIRKAK3XUJ4EkNJnkMUI33E1UN+Wl1pmsh6HeIsNuJclWO2PWOYJJ2sxD3FPuOOIXDgAAGo14Q8KSUAsSAAGUnSQn4ugMHAEnwIEmAGHQ0-4iCeowEp2EEk5GAcE-SVEtw2EqnJIB7JEsfTItE6nTE7EtSXE-EndQk-SEkugMkqDDWKkiI4AKImIjQOI3klQwobA9kugTkpQbkuUJMlk-Iag3E1FEU7gsUr45ySUxgmUpneU0sl45UtU3WDUqMwnXU-UuMS9EiY0mAezM0341oq09orssGO0sGR0yE70l0i+awjnTEz0lE8cigachErEokwM0NOENSMMuACMzU6Mmk2Muk4hBMxknMu9Vk2NNMuADMuQwYHk5k08vMtQgs4UkYYsz4u48s6UlvUDasu42sp4+s0M8OTKHUvUg0v4js-s-owckYc08CykSCwE8dO08dUcogZ0mEycjXEXYAD0mwr0kAVwigbCh7f0ogVcgk1ODctwbcqMowak2k+MxMu8kjM8+OC8q8rMpQ5i9ifku+dQwsl8j4hUj8mQGU+vH8lyP81U9UoCyk5s0Ctsi0iCy3Ac5yJC6gfY2ifUccWY7vG4czTs5gkSjYuALYxgkPP8gcdca49NQSiw4MD0cCFSqCoytYmQSQ5yQ47qJU04qSmsbw-IfIVs-Y+gAAKlCtoCYhAFQGGAxHQDwgMFoCmPgBPlhHxQhWAEMuYPFgTwXEbOAukLkDtJWLWOYO4I0BDyRByuQI7SMAACl8AxATRPLM5VB9QhB5iozpDZgPK1IytmDmCdhCraYdhnIAArH8BAZgyQyQvg1s-ECCPLGAGU97VaXqkgKasq3FdAYa5COCVA5ycVLa7KGa0IE+bslarUVaSqmquyKyOiJNfIOqiAIgSVf4f4da-q46qAXaqYg6o6rUU62gc65FS67a+gAwfQfIG6ptbMIwAARn+Astqv1nzCeperetmA+ucj6s2sBpkL2p-CmEOu5W+qBtCvoGqOUutJ8GoiSoqhSogjSoMoQp8AGuqvKvyspOGpsA-LKryv1mquCQaqapao+Dao6p3O6s+s2qGoJtGomqDGmtmtoFbOBsWrBhWpix8wiyjCCuYSAA). At the end, I've created an api and tried to invoke `findByStatus`: ``` const api = createApiClient((method,...
When we have a union of multiple objects, all of them have a type property, we cannot check the type property because of the union with an array. And the...
Hi @astahmer, Sorry for 2 issues in one day 🥲 I would like to use this library because of the runtime validation support (zod mainly) it provides. Based on this...
The following spec throws an error "TypeError: Cannot read properties of undefined (reading 'normalized')" ```yaml openapi: 3.0.3 info: version: 1.0.0 paths: '/example': post: parameters: - name: example schema: $ref: '#/definitions/DefinitionA'...
Should we have to manually replace the path params? If I have an endpoint, `/Patient/{patient_id}`, the patient_id is not getting replaced by the parameter. Here is how I am doing...
The OpenAPI spec allows for portions of the spec to be split out to separate files which are referenced from the main spec. When attempting to run `typed-openapi` CLI on...
Hi I'm working on an API where we write do api-spec-first development. Currently we are manually creating the schemas using Zod and keeping them aligned. This tool seems promising, but...
The issue is coming from a FHIRPrimitiveExtension type. What are my options here? I am having the same problem with `openapi-zod-client`. Reference: [fhir-extensions](https://cloud.google.com/healthcare-api/docs/concepts/fhir-extensions#extensions_on_primitive_types) Here is the OpenAPI file: [openapi.json](https://github.com/astahmer/typed-openapi/files/13495322/openapi.json) ```...