zod-openapi 2.9.1 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/README.md +4 -111
  2. package/lib-commonjs/index.js +1687 -32
  3. package/lib-esm/index.js +1664 -0
  4. package/lib-types/extendZod.d.ts +4 -0
  5. package/package.json +4 -4
  6. package/lib-commonjs/api.js +0 -11
  7. package/lib-commonjs/api.js.map +0 -1
  8. package/lib-commonjs/create/components.js +0 -264
  9. package/lib-commonjs/create/components.js.map +0 -1
  10. package/lib-commonjs/create/content.js +0 -41
  11. package/lib-commonjs/create/content.js.map +0 -1
  12. package/lib-commonjs/create/document.js +0 -20
  13. package/lib-commonjs/create/document.js.map +0 -1
  14. package/lib-commonjs/create/parameters.js +0 -113
  15. package/lib-commonjs/create/parameters.js.map +0 -1
  16. package/lib-commonjs/create/paths.js +0 -85
  17. package/lib-commonjs/create/paths.js.map +0 -1
  18. package/lib-commonjs/create/responses.js +0 -114
  19. package/lib-commonjs/create/responses.js.map +0 -1
  20. package/lib-commonjs/create/schema/index.js +0 -101
  21. package/lib-commonjs/create/schema/index.js.map +0 -1
  22. package/lib-commonjs/create/schema/metadata.js +0 -19
  23. package/lib-commonjs/create/schema/metadata.js.map +0 -1
  24. package/lib-commonjs/create/schema/parsers/array.js +0 -17
  25. package/lib-commonjs/create/schema/parsers/array.js.map +0 -1
  26. package/lib-commonjs/create/schema/parsers/boolean.js +0 -8
  27. package/lib-commonjs/create/schema/parsers/boolean.js.map +0 -1
  28. package/lib-commonjs/create/schema/parsers/brand.js +0 -7
  29. package/lib-commonjs/create/schema/parsers/brand.js.map +0 -1
  30. package/lib-commonjs/create/schema/parsers/catch.js +0 -7
  31. package/lib-commonjs/create/schema/parsers/catch.js.map +0 -1
  32. package/lib-commonjs/create/schema/parsers/date.js +0 -8
  33. package/lib-commonjs/create/schema/parsers/date.js.map +0 -1
  34. package/lib-commonjs/create/schema/parsers/default.js +0 -15
  35. package/lib-commonjs/create/schema/parsers/default.js.map +0 -1
  36. package/lib-commonjs/create/schema/parsers/discriminatedUnion.js +0 -46
  37. package/lib-commonjs/create/schema/parsers/discriminatedUnion.js.map +0 -1
  38. package/lib-commonjs/create/schema/parsers/enum.js +0 -9
  39. package/lib-commonjs/create/schema/parsers/enum.js.map +0 -1
  40. package/lib-commonjs/create/schema/parsers/index.js +0 -131
  41. package/lib-commonjs/create/schema/parsers/index.js.map +0 -1
  42. package/lib-commonjs/create/schema/parsers/intersection.js +0 -14
  43. package/lib-commonjs/create/schema/parsers/intersection.js.map +0 -1
  44. package/lib-commonjs/create/schema/parsers/lazy.js +0 -10
  45. package/lib-commonjs/create/schema/parsers/lazy.js.map +0 -1
  46. package/lib-commonjs/create/schema/parsers/literal.js +0 -9
  47. package/lib-commonjs/create/schema/parsers/literal.js.map +0 -1
  48. package/lib-commonjs/create/schema/parsers/manual.js +0 -19
  49. package/lib-commonjs/create/schema/parsers/manual.js.map +0 -1
  50. package/lib-commonjs/create/schema/parsers/nativeEnum.js +0 -43
  51. package/lib-commonjs/create/schema/parsers/nativeEnum.js.map +0 -1
  52. package/lib-commonjs/create/schema/parsers/null.js +0 -8
  53. package/lib-commonjs/create/schema/parsers/null.js.map +0 -1
  54. package/lib-commonjs/create/schema/parsers/nullable.js +0 -61
  55. package/lib-commonjs/create/schema/parsers/nullable.js.map +0 -1
  56. package/lib-commonjs/create/schema/parsers/number.js +0 -50
  57. package/lib-commonjs/create/schema/parsers/number.js.map +0 -1
  58. package/lib-commonjs/create/schema/parsers/object.js +0 -107
  59. package/lib-commonjs/create/schema/parsers/object.js.map +0 -1
  60. package/lib-commonjs/create/schema/parsers/optional.js +0 -45
  61. package/lib-commonjs/create/schema/parsers/optional.js.map +0 -1
  62. package/lib-commonjs/create/schema/parsers/pipeline.js +0 -20
  63. package/lib-commonjs/create/schema/parsers/pipeline.js.map +0 -1
  64. package/lib-commonjs/create/schema/parsers/preprocess.js +0 -7
  65. package/lib-commonjs/create/schema/parsers/preprocess.js.map +0 -1
  66. package/lib-commonjs/create/schema/parsers/readonly.js +0 -8
  67. package/lib-commonjs/create/schema/parsers/readonly.js.map +0 -1
  68. package/lib-commonjs/create/schema/parsers/record.js +0 -43
  69. package/lib-commonjs/create/schema/parsers/record.js.map +0 -1
  70. package/lib-commonjs/create/schema/parsers/refine.js +0 -7
  71. package/lib-commonjs/create/schema/parsers/refine.js.map +0 -1
  72. package/lib-commonjs/create/schema/parsers/set.js +0 -18
  73. package/lib-commonjs/create/schema/parsers/set.js.map +0 -1
  74. package/lib-commonjs/create/schema/parsers/string.js +0 -95
  75. package/lib-commonjs/create/schema/parsers/string.js.map +0 -1
  76. package/lib-commonjs/create/schema/parsers/transform.js +0 -28
  77. package/lib-commonjs/create/schema/parsers/transform.js.map +0 -1
  78. package/lib-commonjs/create/schema/parsers/tuple.js +0 -54
  79. package/lib-commonjs/create/schema/parsers/tuple.js.map +0 -1
  80. package/lib-commonjs/create/schema/parsers/union.js +0 -12
  81. package/lib-commonjs/create/schema/parsers/union.js.map +0 -1
  82. package/lib-commonjs/create/schema/parsers/unknown.js +0 -6
  83. package/lib-commonjs/create/schema/parsers/unknown.js.map +0 -1
  84. package/lib-commonjs/create/specificationExtension.js +0 -6
  85. package/lib-commonjs/create/specificationExtension.js.map +0 -1
  86. package/lib-commonjs/extendZod.js +0 -48
  87. package/lib-commonjs/extendZod.js.map +0 -1
  88. package/lib-commonjs/index.js.map +0 -1
  89. package/lib-commonjs/openapi.js +0 -13
  90. package/lib-commonjs/openapi.js.map +0 -1
  91. package/lib-commonjs/openapi3-ts/dist/dsl/openapi-builder30.js +0 -3
  92. package/lib-commonjs/openapi3-ts/dist/dsl/openapi-builder30.js.map +0 -1
  93. package/lib-commonjs/openapi3-ts/dist/dsl/openapi-builder31.js +0 -3
  94. package/lib-commonjs/openapi3-ts/dist/dsl/openapi-builder31.js.map +0 -1
  95. package/lib-commonjs/openapi3-ts/dist/index.js +0 -29
  96. package/lib-commonjs/openapi3-ts/dist/index.js.map +0 -1
  97. package/lib-commonjs/openapi3-ts/dist/model/oas-common.js +0 -3
  98. package/lib-commonjs/openapi3-ts/dist/model/oas-common.js.map +0 -1
  99. package/lib-commonjs/openapi3-ts/dist/model/openapi30.js +0 -18
  100. package/lib-commonjs/openapi3-ts/dist/model/openapi30.js.map +0 -1
  101. package/lib-commonjs/openapi3-ts/dist/model/openapi31.js +0 -18
  102. package/lib-commonjs/openapi3-ts/dist/model/openapi31.js.map +0 -1
  103. package/lib-commonjs/openapi3-ts/dist/model/server.js +0 -3
  104. package/lib-commonjs/openapi3-ts/dist/model/server.js.map +0 -1
  105. package/lib-commonjs/openapi3-ts/dist/model/specification-extension.js +0 -3
  106. package/lib-commonjs/openapi3-ts/dist/model/specification-extension.js.map +0 -1
  107. package/lib-commonjs/openapi3-ts/dist/oas30.js +0 -19
  108. package/lib-commonjs/openapi3-ts/dist/oas30.js.map +0 -1
  109. package/lib-commonjs/openapi3-ts/dist/oas31.js +0 -19
  110. package/lib-commonjs/openapi3-ts/dist/oas31.js.map +0 -1
  111. package/lib-commonjs/openapi3-ts/oas30.js +0 -19
  112. package/lib-commonjs/openapi3-ts/oas30.js.map +0 -1
  113. package/lib-commonjs/openapi3-ts/oas31.js +0 -19
  114. package/lib-commonjs/openapi3-ts/oas31.js.map +0 -1
  115. package/lib-commonjs/zodType.js +0 -9
  116. package/lib-commonjs/zodType.js.map +0 -1
  117. package/lib-es2015/api.js +0 -4
  118. package/lib-es2015/api.js.map +0 -1
  119. package/lib-es2015/create/components.js +0 -256
  120. package/lib-es2015/create/components.js.map +0 -1
  121. package/lib-es2015/create/content.js +0 -36
  122. package/lib-es2015/create/content.js.map +0 -1
  123. package/lib-es2015/create/document.js +0 -16
  124. package/lib-es2015/create/document.js.map +0 -1
  125. package/lib-es2015/create/parameters.js +0 -105
  126. package/lib-es2015/create/parameters.js.map +0 -1
  127. package/lib-es2015/create/paths.js +0 -80
  128. package/lib-es2015/create/paths.js.map +0 -1
  129. package/lib-es2015/create/responses.js +0 -105
  130. package/lib-es2015/create/responses.js.map +0 -1
  131. package/lib-es2015/create/schema/index.js +0 -92
  132. package/lib-es2015/create/schema/index.js.map +0 -1
  133. package/lib-es2015/create/schema/metadata.js +0 -15
  134. package/lib-es2015/create/schema/metadata.js.map +0 -1
  135. package/lib-es2015/create/schema/parsers/array.js +0 -13
  136. package/lib-es2015/create/schema/parsers/array.js.map +0 -1
  137. package/lib-es2015/create/schema/parsers/boolean.js +0 -4
  138. package/lib-es2015/create/schema/parsers/boolean.js.map +0 -1
  139. package/lib-es2015/create/schema/parsers/brand.js +0 -3
  140. package/lib-es2015/create/schema/parsers/brand.js.map +0 -1
  141. package/lib-es2015/create/schema/parsers/catch.js +0 -3
  142. package/lib-es2015/create/schema/parsers/catch.js.map +0 -1
  143. package/lib-es2015/create/schema/parsers/date.js +0 -4
  144. package/lib-es2015/create/schema/parsers/date.js.map +0 -1
  145. package/lib-es2015/create/schema/parsers/default.js +0 -11
  146. package/lib-es2015/create/schema/parsers/default.js.map +0 -1
  147. package/lib-es2015/create/schema/parsers/discriminatedUnion.js +0 -41
  148. package/lib-es2015/create/schema/parsers/discriminatedUnion.js.map +0 -1
  149. package/lib-es2015/create/schema/parsers/enum.js +0 -5
  150. package/lib-es2015/create/schema/parsers/enum.js.map +0 -1
  151. package/lib-es2015/create/schema/parsers/index.js +0 -127
  152. package/lib-es2015/create/schema/parsers/index.js.map +0 -1
  153. package/lib-es2015/create/schema/parsers/intersection.js +0 -10
  154. package/lib-es2015/create/schema/parsers/intersection.js.map +0 -1
  155. package/lib-es2015/create/schema/parsers/lazy.js +0 -6
  156. package/lib-es2015/create/schema/parsers/lazy.js.map +0 -1
  157. package/lib-es2015/create/schema/parsers/literal.js +0 -5
  158. package/lib-es2015/create/schema/parsers/literal.js.map +0 -1
  159. package/lib-es2015/create/schema/parsers/manual.js +0 -15
  160. package/lib-es2015/create/schema/parsers/manual.js.map +0 -1
  161. package/lib-es2015/create/schema/parsers/nativeEnum.js +0 -37
  162. package/lib-es2015/create/schema/parsers/nativeEnum.js.map +0 -1
  163. package/lib-es2015/create/schema/parsers/null.js +0 -4
  164. package/lib-es2015/create/schema/parsers/null.js.map +0 -1
  165. package/lib-es2015/create/schema/parsers/nullable.js +0 -57
  166. package/lib-es2015/create/schema/parsers/nullable.js.map +0 -1
  167. package/lib-es2015/create/schema/parsers/number.js +0 -44
  168. package/lib-es2015/create/schema/parsers/number.js.map +0 -1
  169. package/lib-es2015/create/schema/parsers/object.js +0 -99
  170. package/lib-es2015/create/schema/parsers/object.js.map +0 -1
  171. package/lib-es2015/create/schema/parsers/optional.js +0 -40
  172. package/lib-es2015/create/schema/parsers/optional.js.map +0 -1
  173. package/lib-es2015/create/schema/parsers/pipeline.js +0 -16
  174. package/lib-es2015/create/schema/parsers/pipeline.js.map +0 -1
  175. package/lib-es2015/create/schema/parsers/preprocess.js +0 -3
  176. package/lib-es2015/create/schema/parsers/preprocess.js.map +0 -1
  177. package/lib-es2015/create/schema/parsers/readonly.js +0 -4
  178. package/lib-es2015/create/schema/parsers/readonly.js.map +0 -1
  179. package/lib-es2015/create/schema/parsers/record.js +0 -39
  180. package/lib-es2015/create/schema/parsers/record.js.map +0 -1
  181. package/lib-es2015/create/schema/parsers/refine.js +0 -3
  182. package/lib-es2015/create/schema/parsers/refine.js.map +0 -1
  183. package/lib-es2015/create/schema/parsers/set.js +0 -14
  184. package/lib-es2015/create/schema/parsers/set.js.map +0 -1
  185. package/lib-es2015/create/schema/parsers/string.js +0 -91
  186. package/lib-es2015/create/schema/parsers/string.js.map +0 -1
  187. package/lib-es2015/create/schema/parsers/transform.js +0 -23
  188. package/lib-es2015/create/schema/parsers/transform.js.map +0 -1
  189. package/lib-es2015/create/schema/parsers/tuple.js +0 -50
  190. package/lib-es2015/create/schema/parsers/tuple.js.map +0 -1
  191. package/lib-es2015/create/schema/parsers/union.js +0 -8
  192. package/lib-es2015/create/schema/parsers/union.js.map +0 -1
  193. package/lib-es2015/create/schema/parsers/unknown.js +0 -2
  194. package/lib-es2015/create/schema/parsers/unknown.js.map +0 -1
  195. package/lib-es2015/create/specificationExtension.js +0 -2
  196. package/lib-es2015/create/specificationExtension.js.map +0 -1
  197. package/lib-es2015/extendZod.js +0 -44
  198. package/lib-es2015/extendZod.js.map +0 -1
  199. package/lib-es2015/index.js +0 -6
  200. package/lib-es2015/index.js.map +0 -1
  201. package/lib-es2015/openapi.js +0 -9
  202. package/lib-es2015/openapi.js.map +0 -1
  203. package/lib-es2015/openapi3-ts/dist/dsl/openapi-builder30.js +0 -2
  204. package/lib-es2015/openapi3-ts/dist/dsl/openapi-builder30.js.map +0 -1
  205. package/lib-es2015/openapi3-ts/dist/dsl/openapi-builder31.js +0 -2
  206. package/lib-es2015/openapi3-ts/dist/dsl/openapi-builder31.js.map +0 -1
  207. package/lib-es2015/openapi3-ts/dist/index.js +0 -5
  208. package/lib-es2015/openapi3-ts/dist/index.js.map +0 -1
  209. package/lib-es2015/openapi3-ts/dist/model/oas-common.js +0 -2
  210. package/lib-es2015/openapi3-ts/dist/model/oas-common.js.map +0 -1
  211. package/lib-es2015/openapi3-ts/dist/model/openapi30.js +0 -2
  212. package/lib-es2015/openapi3-ts/dist/model/openapi30.js.map +0 -1
  213. package/lib-es2015/openapi3-ts/dist/model/openapi31.js +0 -2
  214. package/lib-es2015/openapi3-ts/dist/model/openapi31.js.map +0 -1
  215. package/lib-es2015/openapi3-ts/dist/model/server.js +0 -2
  216. package/lib-es2015/openapi3-ts/dist/model/server.js.map +0 -1
  217. package/lib-es2015/openapi3-ts/dist/model/specification-extension.js +0 -2
  218. package/lib-es2015/openapi3-ts/dist/model/specification-extension.js.map +0 -1
  219. package/lib-es2015/openapi3-ts/dist/oas30.js +0 -3
  220. package/lib-es2015/openapi3-ts/dist/oas30.js.map +0 -1
  221. package/lib-es2015/openapi3-ts/dist/oas31.js +0 -3
  222. package/lib-es2015/openapi3-ts/dist/oas31.js.map +0 -1
  223. package/lib-es2015/openapi3-ts/oas30.js +0 -3
  224. package/lib-es2015/openapi3-ts/oas30.js.map +0 -1
  225. package/lib-es2015/openapi3-ts/oas31.js +0 -3
  226. package/lib-es2015/openapi3-ts/oas31.js.map +0 -1
  227. package/lib-es2015/zodType.js +0 -4
  228. package/lib-es2015/zodType.js.map +0 -1
package/README.md CHANGED
@@ -53,6 +53,7 @@ Use the `.openapi()` method to add metadata to a specific Zod type. The `.openap
53
53
  | `ref` | Use this to [auto register a schema](#creating-components) |
54
54
  | `refType` | Use this to set the creation type for a component which is not referenced in the document. |
55
55
  | `type` | Use this to override the generated type. If this is provided no metadata will be generated. |
56
+ | `unionOneOf` | Set to `true` to force a ZodUnion to output `oneOf` instead of `allOf` |
56
57
 
57
58
  ### `createDocument`
58
59
 
@@ -543,6 +544,7 @@ For example in `z.string().nullable()` will be rendered differently
543
544
  - `items` mapping for `.rest()`
544
545
  - `prefixItems` mapping for OpenAPI 3.1.0+
545
546
  - ZodUnion
547
+ - By default it outputs an `allOf` schema. Use `unionOneOf` to change this to output `oneOf` instead.
546
548
  - ZodUnknown
547
549
 
548
550
  If this library cannot determine a type for a Zod Schema, it will throw an error. To avoid this, declare a manual `type` in the `.openapi()` section of that schema.
@@ -565,118 +567,9 @@ See the library in use in the [examples](./examples/) folder.
565
567
 
566
568
  - [eslint-plugin-zod-openapi](https://github.com/samchungy/eslint-plugin-zod-openapi) - Eslint rules for zod-openapi. This includes features which can autogenerate Typescript comments for your Zod types based on your `description`, `example` and `deprecated` fields.
567
569
 
568
- ## Credits
570
+ ## Comparisons
569
571
 
570
- ### [@asteasolutions/zod-to-openapi](https://github.com/asteasolutions/zod-to-openapi)
571
-
572
- zod-openapi was created while trying to add a feature to support auto registering schemas. This proved to be extra challenging given the overall structure of the library so I decided re-write the whole thing. I was a big contributor to this library and love everything it's done, however I could not go past a few issues.
573
-
574
- 1. The underlying structure of the library consists of tightly coupled classes which require you to create an awkward Registry class to create references. This would mean you would need to ship a registry class instance along with your types which makes sharing types difficult.
575
-
576
- 2. No auto registering schema. Most users do not want to think about this so having to import and call `.register()` is a nuisance.
577
- 3. When you register a schema using the registry you need to use the outputted type from the `.register()` call. You do not need to do such a thing with this library.
578
-
579
- 4. No transform support or safety. You can use a `type` to override the transform type but what happens when that transform logic changes?
580
-
581
- 5. No input/output validation with components. What happens when you register a component with a transform which technically comprises of two types in a request and a response?
582
-
583
- Did I really rewrite an entire library just for this? Absolutely. I believe that creating documentation and types should be as simple and as frictionless as possible.
584
-
585
- #### Migration
586
-
587
- 1. Delete the OpenAPIRegistry and OpenAPIGenerator classes
588
- 2. Replace any `.register()` call made and replace them with `ref` in `.openapi()` or alternatively, add them directly to the components section of the schema.
589
-
590
- ```ts
591
- const registry = new OpenAPIRegistry();
592
-
593
- const foo = registry.register(
594
- 'foo',
595
- z.string().openapi({ description: 'foo' }),
596
- );
597
- const bar = z.object({ foo });
598
-
599
- // Replace with:
600
- const foo = z.string().openapi({ ref: 'foo', description: 'foo' });
601
- const bar = z.object({ foo });
602
-
603
- // or
604
- const foo = z.string().openapi({ description: 'foo' });
605
- const bar = z.object({ foo });
606
-
607
- const document = createDocument({
608
- components: {
609
- schemas: {
610
- foo,
611
- },
612
- },
613
- });
614
- ```
615
-
616
- 3. Replace `registry.registerComponent()` with a regular OpenAPI component in the document.
617
-
618
- ```ts
619
- const registry = new OpenAPIRegistry();
620
-
621
- registry.registerComponent('securitySchemes', 'auth', {
622
- type: 'http',
623
- scheme: 'bearer',
624
- bearerFormat: 'JWT',
625
- description: 'An auth token issued by oauth',
626
- });
627
- // Replace with regular component declaration
628
-
629
- const document = createDocument({
630
- components: {
631
- // declare directly in components
632
- securitySchemes: {
633
- auth: {
634
- type: 'http',
635
- scheme: 'bearer',
636
- bearerFormat: 'JWT',
637
- description: 'An auth token issued by oauth',
638
- },
639
- },
640
- },
641
- });
642
- ```
643
-
644
- 4. Replace `registry.registerPath()` with a regular OpenAPI paths in the document.
645
-
646
- ```ts
647
- const registry = new OpenAPIRegistry();
648
-
649
- registry.registerPath({
650
- method: 'get',
651
- path: '/foo',
652
- request: {
653
- query: z.object({ a: z.string() }),
654
- params: z.object({ b: z.string() }),
655
- body: z.object({ c: z.string() }),
656
- headers: z.object({ d: z.string() })
657
- },
658
- responses: {},
659
- });
660
- // Replace with regular path declaration
661
-
662
- const getFoo: ZodOpenApiPathItemObject = {
663
- get: {
664
- requestParams: {
665
- query: z.object({ a: z.string() }),
666
- path: z.object({ b: z.string() }), // params -> path
667
- header: z.object({ c: z.string() }) // headers -> header
668
- }, // renamed from request -> requestParams
669
- requestBody: z.object({c: z.string() }) // request.body -> requestBody
670
- responses: {},
671
- },
672
- };
673
-
674
- const document = createDocument({
675
- paths: {
676
- '/foo': getFoo,
677
- },
678
- });
679
- ```
572
+ ### [@asteasolutions/zod-to-openapi](./docs/comparisons.md)
680
573
 
681
574
  ## Development
682
575