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.
- package/README.md +4 -111
- package/lib-commonjs/index.js +1687 -32
- package/lib-esm/index.js +1664 -0
- package/lib-types/extendZod.d.ts +4 -0
- package/package.json +4 -4
- package/lib-commonjs/api.js +0 -11
- package/lib-commonjs/api.js.map +0 -1
- package/lib-commonjs/create/components.js +0 -264
- package/lib-commonjs/create/components.js.map +0 -1
- package/lib-commonjs/create/content.js +0 -41
- package/lib-commonjs/create/content.js.map +0 -1
- package/lib-commonjs/create/document.js +0 -20
- package/lib-commonjs/create/document.js.map +0 -1
- package/lib-commonjs/create/parameters.js +0 -113
- package/lib-commonjs/create/parameters.js.map +0 -1
- package/lib-commonjs/create/paths.js +0 -85
- package/lib-commonjs/create/paths.js.map +0 -1
- package/lib-commonjs/create/responses.js +0 -114
- package/lib-commonjs/create/responses.js.map +0 -1
- package/lib-commonjs/create/schema/index.js +0 -101
- package/lib-commonjs/create/schema/index.js.map +0 -1
- package/lib-commonjs/create/schema/metadata.js +0 -19
- package/lib-commonjs/create/schema/metadata.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/array.js +0 -17
- package/lib-commonjs/create/schema/parsers/array.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/boolean.js +0 -8
- package/lib-commonjs/create/schema/parsers/boolean.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/brand.js +0 -7
- package/lib-commonjs/create/schema/parsers/brand.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/catch.js +0 -7
- package/lib-commonjs/create/schema/parsers/catch.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/date.js +0 -8
- package/lib-commonjs/create/schema/parsers/date.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/default.js +0 -15
- package/lib-commonjs/create/schema/parsers/default.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/discriminatedUnion.js +0 -46
- package/lib-commonjs/create/schema/parsers/discriminatedUnion.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/enum.js +0 -9
- package/lib-commonjs/create/schema/parsers/enum.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/index.js +0 -131
- package/lib-commonjs/create/schema/parsers/index.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/intersection.js +0 -14
- package/lib-commonjs/create/schema/parsers/intersection.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/lazy.js +0 -10
- package/lib-commonjs/create/schema/parsers/lazy.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/literal.js +0 -9
- package/lib-commonjs/create/schema/parsers/literal.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/manual.js +0 -19
- package/lib-commonjs/create/schema/parsers/manual.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/nativeEnum.js +0 -43
- package/lib-commonjs/create/schema/parsers/nativeEnum.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/null.js +0 -8
- package/lib-commonjs/create/schema/parsers/null.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/nullable.js +0 -61
- package/lib-commonjs/create/schema/parsers/nullable.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/number.js +0 -50
- package/lib-commonjs/create/schema/parsers/number.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/object.js +0 -107
- package/lib-commonjs/create/schema/parsers/object.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/optional.js +0 -45
- package/lib-commonjs/create/schema/parsers/optional.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/pipeline.js +0 -20
- package/lib-commonjs/create/schema/parsers/pipeline.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/preprocess.js +0 -7
- package/lib-commonjs/create/schema/parsers/preprocess.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/readonly.js +0 -8
- package/lib-commonjs/create/schema/parsers/readonly.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/record.js +0 -43
- package/lib-commonjs/create/schema/parsers/record.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/refine.js +0 -7
- package/lib-commonjs/create/schema/parsers/refine.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/set.js +0 -18
- package/lib-commonjs/create/schema/parsers/set.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/string.js +0 -95
- package/lib-commonjs/create/schema/parsers/string.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/transform.js +0 -28
- package/lib-commonjs/create/schema/parsers/transform.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/tuple.js +0 -54
- package/lib-commonjs/create/schema/parsers/tuple.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/union.js +0 -12
- package/lib-commonjs/create/schema/parsers/union.js.map +0 -1
- package/lib-commonjs/create/schema/parsers/unknown.js +0 -6
- package/lib-commonjs/create/schema/parsers/unknown.js.map +0 -1
- package/lib-commonjs/create/specificationExtension.js +0 -6
- package/lib-commonjs/create/specificationExtension.js.map +0 -1
- package/lib-commonjs/extendZod.js +0 -48
- package/lib-commonjs/extendZod.js.map +0 -1
- package/lib-commonjs/index.js.map +0 -1
- package/lib-commonjs/openapi.js +0 -13
- package/lib-commonjs/openapi.js.map +0 -1
- package/lib-commonjs/openapi3-ts/dist/dsl/openapi-builder30.js +0 -3
- package/lib-commonjs/openapi3-ts/dist/dsl/openapi-builder30.js.map +0 -1
- package/lib-commonjs/openapi3-ts/dist/dsl/openapi-builder31.js +0 -3
- package/lib-commonjs/openapi3-ts/dist/dsl/openapi-builder31.js.map +0 -1
- package/lib-commonjs/openapi3-ts/dist/index.js +0 -29
- package/lib-commonjs/openapi3-ts/dist/index.js.map +0 -1
- package/lib-commonjs/openapi3-ts/dist/model/oas-common.js +0 -3
- package/lib-commonjs/openapi3-ts/dist/model/oas-common.js.map +0 -1
- package/lib-commonjs/openapi3-ts/dist/model/openapi30.js +0 -18
- package/lib-commonjs/openapi3-ts/dist/model/openapi30.js.map +0 -1
- package/lib-commonjs/openapi3-ts/dist/model/openapi31.js +0 -18
- package/lib-commonjs/openapi3-ts/dist/model/openapi31.js.map +0 -1
- package/lib-commonjs/openapi3-ts/dist/model/server.js +0 -3
- package/lib-commonjs/openapi3-ts/dist/model/server.js.map +0 -1
- package/lib-commonjs/openapi3-ts/dist/model/specification-extension.js +0 -3
- package/lib-commonjs/openapi3-ts/dist/model/specification-extension.js.map +0 -1
- package/lib-commonjs/openapi3-ts/dist/oas30.js +0 -19
- package/lib-commonjs/openapi3-ts/dist/oas30.js.map +0 -1
- package/lib-commonjs/openapi3-ts/dist/oas31.js +0 -19
- package/lib-commonjs/openapi3-ts/dist/oas31.js.map +0 -1
- package/lib-commonjs/openapi3-ts/oas30.js +0 -19
- package/lib-commonjs/openapi3-ts/oas30.js.map +0 -1
- package/lib-commonjs/openapi3-ts/oas31.js +0 -19
- package/lib-commonjs/openapi3-ts/oas31.js.map +0 -1
- package/lib-commonjs/zodType.js +0 -9
- package/lib-commonjs/zodType.js.map +0 -1
- package/lib-es2015/api.js +0 -4
- package/lib-es2015/api.js.map +0 -1
- package/lib-es2015/create/components.js +0 -256
- package/lib-es2015/create/components.js.map +0 -1
- package/lib-es2015/create/content.js +0 -36
- package/lib-es2015/create/content.js.map +0 -1
- package/lib-es2015/create/document.js +0 -16
- package/lib-es2015/create/document.js.map +0 -1
- package/lib-es2015/create/parameters.js +0 -105
- package/lib-es2015/create/parameters.js.map +0 -1
- package/lib-es2015/create/paths.js +0 -80
- package/lib-es2015/create/paths.js.map +0 -1
- package/lib-es2015/create/responses.js +0 -105
- package/lib-es2015/create/responses.js.map +0 -1
- package/lib-es2015/create/schema/index.js +0 -92
- package/lib-es2015/create/schema/index.js.map +0 -1
- package/lib-es2015/create/schema/metadata.js +0 -15
- package/lib-es2015/create/schema/metadata.js.map +0 -1
- package/lib-es2015/create/schema/parsers/array.js +0 -13
- package/lib-es2015/create/schema/parsers/array.js.map +0 -1
- package/lib-es2015/create/schema/parsers/boolean.js +0 -4
- package/lib-es2015/create/schema/parsers/boolean.js.map +0 -1
- package/lib-es2015/create/schema/parsers/brand.js +0 -3
- package/lib-es2015/create/schema/parsers/brand.js.map +0 -1
- package/lib-es2015/create/schema/parsers/catch.js +0 -3
- package/lib-es2015/create/schema/parsers/catch.js.map +0 -1
- package/lib-es2015/create/schema/parsers/date.js +0 -4
- package/lib-es2015/create/schema/parsers/date.js.map +0 -1
- package/lib-es2015/create/schema/parsers/default.js +0 -11
- package/lib-es2015/create/schema/parsers/default.js.map +0 -1
- package/lib-es2015/create/schema/parsers/discriminatedUnion.js +0 -41
- package/lib-es2015/create/schema/parsers/discriminatedUnion.js.map +0 -1
- package/lib-es2015/create/schema/parsers/enum.js +0 -5
- package/lib-es2015/create/schema/parsers/enum.js.map +0 -1
- package/lib-es2015/create/schema/parsers/index.js +0 -127
- package/lib-es2015/create/schema/parsers/index.js.map +0 -1
- package/lib-es2015/create/schema/parsers/intersection.js +0 -10
- package/lib-es2015/create/schema/parsers/intersection.js.map +0 -1
- package/lib-es2015/create/schema/parsers/lazy.js +0 -6
- package/lib-es2015/create/schema/parsers/lazy.js.map +0 -1
- package/lib-es2015/create/schema/parsers/literal.js +0 -5
- package/lib-es2015/create/schema/parsers/literal.js.map +0 -1
- package/lib-es2015/create/schema/parsers/manual.js +0 -15
- package/lib-es2015/create/schema/parsers/manual.js.map +0 -1
- package/lib-es2015/create/schema/parsers/nativeEnum.js +0 -37
- package/lib-es2015/create/schema/parsers/nativeEnum.js.map +0 -1
- package/lib-es2015/create/schema/parsers/null.js +0 -4
- package/lib-es2015/create/schema/parsers/null.js.map +0 -1
- package/lib-es2015/create/schema/parsers/nullable.js +0 -57
- package/lib-es2015/create/schema/parsers/nullable.js.map +0 -1
- package/lib-es2015/create/schema/parsers/number.js +0 -44
- package/lib-es2015/create/schema/parsers/number.js.map +0 -1
- package/lib-es2015/create/schema/parsers/object.js +0 -99
- package/lib-es2015/create/schema/parsers/object.js.map +0 -1
- package/lib-es2015/create/schema/parsers/optional.js +0 -40
- package/lib-es2015/create/schema/parsers/optional.js.map +0 -1
- package/lib-es2015/create/schema/parsers/pipeline.js +0 -16
- package/lib-es2015/create/schema/parsers/pipeline.js.map +0 -1
- package/lib-es2015/create/schema/parsers/preprocess.js +0 -3
- package/lib-es2015/create/schema/parsers/preprocess.js.map +0 -1
- package/lib-es2015/create/schema/parsers/readonly.js +0 -4
- package/lib-es2015/create/schema/parsers/readonly.js.map +0 -1
- package/lib-es2015/create/schema/parsers/record.js +0 -39
- package/lib-es2015/create/schema/parsers/record.js.map +0 -1
- package/lib-es2015/create/schema/parsers/refine.js +0 -3
- package/lib-es2015/create/schema/parsers/refine.js.map +0 -1
- package/lib-es2015/create/schema/parsers/set.js +0 -14
- package/lib-es2015/create/schema/parsers/set.js.map +0 -1
- package/lib-es2015/create/schema/parsers/string.js +0 -91
- package/lib-es2015/create/schema/parsers/string.js.map +0 -1
- package/lib-es2015/create/schema/parsers/transform.js +0 -23
- package/lib-es2015/create/schema/parsers/transform.js.map +0 -1
- package/lib-es2015/create/schema/parsers/tuple.js +0 -50
- package/lib-es2015/create/schema/parsers/tuple.js.map +0 -1
- package/lib-es2015/create/schema/parsers/union.js +0 -8
- package/lib-es2015/create/schema/parsers/union.js.map +0 -1
- package/lib-es2015/create/schema/parsers/unknown.js +0 -2
- package/lib-es2015/create/schema/parsers/unknown.js.map +0 -1
- package/lib-es2015/create/specificationExtension.js +0 -2
- package/lib-es2015/create/specificationExtension.js.map +0 -1
- package/lib-es2015/extendZod.js +0 -44
- package/lib-es2015/extendZod.js.map +0 -1
- package/lib-es2015/index.js +0 -6
- package/lib-es2015/index.js.map +0 -1
- package/lib-es2015/openapi.js +0 -9
- package/lib-es2015/openapi.js.map +0 -1
- package/lib-es2015/openapi3-ts/dist/dsl/openapi-builder30.js +0 -2
- package/lib-es2015/openapi3-ts/dist/dsl/openapi-builder30.js.map +0 -1
- package/lib-es2015/openapi3-ts/dist/dsl/openapi-builder31.js +0 -2
- package/lib-es2015/openapi3-ts/dist/dsl/openapi-builder31.js.map +0 -1
- package/lib-es2015/openapi3-ts/dist/index.js +0 -5
- package/lib-es2015/openapi3-ts/dist/index.js.map +0 -1
- package/lib-es2015/openapi3-ts/dist/model/oas-common.js +0 -2
- package/lib-es2015/openapi3-ts/dist/model/oas-common.js.map +0 -1
- package/lib-es2015/openapi3-ts/dist/model/openapi30.js +0 -2
- package/lib-es2015/openapi3-ts/dist/model/openapi30.js.map +0 -1
- package/lib-es2015/openapi3-ts/dist/model/openapi31.js +0 -2
- package/lib-es2015/openapi3-ts/dist/model/openapi31.js.map +0 -1
- package/lib-es2015/openapi3-ts/dist/model/server.js +0 -2
- package/lib-es2015/openapi3-ts/dist/model/server.js.map +0 -1
- package/lib-es2015/openapi3-ts/dist/model/specification-extension.js +0 -2
- package/lib-es2015/openapi3-ts/dist/model/specification-extension.js.map +0 -1
- package/lib-es2015/openapi3-ts/dist/oas30.js +0 -3
- package/lib-es2015/openapi3-ts/dist/oas30.js.map +0 -1
- package/lib-es2015/openapi3-ts/dist/oas31.js +0 -3
- package/lib-es2015/openapi3-ts/dist/oas31.js.map +0 -1
- package/lib-es2015/openapi3-ts/oas30.js +0 -3
- package/lib-es2015/openapi3-ts/oas30.js.map +0 -1
- package/lib-es2015/openapi3-ts/oas31.js +0 -3
- package/lib-es2015/openapi3-ts/oas31.js.map +0 -1
- package/lib-es2015/zodType.js +0 -4
- 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
|
-
##
|
|
570
|
+
## Comparisons
|
|
569
571
|
|
|
570
|
-
### [@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
|
|