zod-openapi 2.9.0 → 2.10.0-beta.1

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 (227) hide show
  1. package/lib-commonjs/index.js +1675 -32
  2. package/lib-commonjs/index.js.map +7 -1
  3. package/lib-esm/index.js +1652 -0
  4. package/lib-esm/index.js.map +7 -0
  5. package/package.json +7 -7
  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 -43
  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/openapi.js +0 -13
  89. package/lib-commonjs/openapi.js.map +0 -1
  90. package/lib-commonjs/openapi3-ts/dist/dsl/openapi-builder30.js +0 -3
  91. package/lib-commonjs/openapi3-ts/dist/dsl/openapi-builder30.js.map +0 -1
  92. package/lib-commonjs/openapi3-ts/dist/dsl/openapi-builder31.js +0 -3
  93. package/lib-commonjs/openapi3-ts/dist/dsl/openapi-builder31.js.map +0 -1
  94. package/lib-commonjs/openapi3-ts/dist/index.js +0 -29
  95. package/lib-commonjs/openapi3-ts/dist/index.js.map +0 -1
  96. package/lib-commonjs/openapi3-ts/dist/model/oas-common.js +0 -3
  97. package/lib-commonjs/openapi3-ts/dist/model/oas-common.js.map +0 -1
  98. package/lib-commonjs/openapi3-ts/dist/model/openapi30.js +0 -18
  99. package/lib-commonjs/openapi3-ts/dist/model/openapi30.js.map +0 -1
  100. package/lib-commonjs/openapi3-ts/dist/model/openapi31.js +0 -18
  101. package/lib-commonjs/openapi3-ts/dist/model/openapi31.js.map +0 -1
  102. package/lib-commonjs/openapi3-ts/dist/model/server.js +0 -3
  103. package/lib-commonjs/openapi3-ts/dist/model/server.js.map +0 -1
  104. package/lib-commonjs/openapi3-ts/dist/model/specification-extension.js +0 -3
  105. package/lib-commonjs/openapi3-ts/dist/model/specification-extension.js.map +0 -1
  106. package/lib-commonjs/openapi3-ts/dist/oas30.js +0 -19
  107. package/lib-commonjs/openapi3-ts/dist/oas30.js.map +0 -1
  108. package/lib-commonjs/openapi3-ts/dist/oas31.js +0 -19
  109. package/lib-commonjs/openapi3-ts/dist/oas31.js.map +0 -1
  110. package/lib-commonjs/openapi3-ts/oas30.js +0 -19
  111. package/lib-commonjs/openapi3-ts/oas30.js.map +0 -1
  112. package/lib-commonjs/openapi3-ts/oas31.js +0 -19
  113. package/lib-commonjs/openapi3-ts/oas31.js.map +0 -1
  114. package/lib-commonjs/zodType.js +0 -9
  115. package/lib-commonjs/zodType.js.map +0 -1
  116. package/lib-es2015/api.js +0 -4
  117. package/lib-es2015/api.js.map +0 -1
  118. package/lib-es2015/create/components.js +0 -256
  119. package/lib-es2015/create/components.js.map +0 -1
  120. package/lib-es2015/create/content.js +0 -36
  121. package/lib-es2015/create/content.js.map +0 -1
  122. package/lib-es2015/create/document.js +0 -16
  123. package/lib-es2015/create/document.js.map +0 -1
  124. package/lib-es2015/create/parameters.js +0 -105
  125. package/lib-es2015/create/parameters.js.map +0 -1
  126. package/lib-es2015/create/paths.js +0 -80
  127. package/lib-es2015/create/paths.js.map +0 -1
  128. package/lib-es2015/create/responses.js +0 -105
  129. package/lib-es2015/create/responses.js.map +0 -1
  130. package/lib-es2015/create/schema/index.js +0 -92
  131. package/lib-es2015/create/schema/index.js.map +0 -1
  132. package/lib-es2015/create/schema/metadata.js +0 -15
  133. package/lib-es2015/create/schema/metadata.js.map +0 -1
  134. package/lib-es2015/create/schema/parsers/array.js +0 -13
  135. package/lib-es2015/create/schema/parsers/array.js.map +0 -1
  136. package/lib-es2015/create/schema/parsers/boolean.js +0 -4
  137. package/lib-es2015/create/schema/parsers/boolean.js.map +0 -1
  138. package/lib-es2015/create/schema/parsers/brand.js +0 -3
  139. package/lib-es2015/create/schema/parsers/brand.js.map +0 -1
  140. package/lib-es2015/create/schema/parsers/catch.js +0 -3
  141. package/lib-es2015/create/schema/parsers/catch.js.map +0 -1
  142. package/lib-es2015/create/schema/parsers/date.js +0 -4
  143. package/lib-es2015/create/schema/parsers/date.js.map +0 -1
  144. package/lib-es2015/create/schema/parsers/default.js +0 -11
  145. package/lib-es2015/create/schema/parsers/default.js.map +0 -1
  146. package/lib-es2015/create/schema/parsers/discriminatedUnion.js +0 -41
  147. package/lib-es2015/create/schema/parsers/discriminatedUnion.js.map +0 -1
  148. package/lib-es2015/create/schema/parsers/enum.js +0 -5
  149. package/lib-es2015/create/schema/parsers/enum.js.map +0 -1
  150. package/lib-es2015/create/schema/parsers/index.js +0 -127
  151. package/lib-es2015/create/schema/parsers/index.js.map +0 -1
  152. package/lib-es2015/create/schema/parsers/intersection.js +0 -10
  153. package/lib-es2015/create/schema/parsers/intersection.js.map +0 -1
  154. package/lib-es2015/create/schema/parsers/lazy.js +0 -6
  155. package/lib-es2015/create/schema/parsers/lazy.js.map +0 -1
  156. package/lib-es2015/create/schema/parsers/literal.js +0 -5
  157. package/lib-es2015/create/schema/parsers/literal.js.map +0 -1
  158. package/lib-es2015/create/schema/parsers/manual.js +0 -15
  159. package/lib-es2015/create/schema/parsers/manual.js.map +0 -1
  160. package/lib-es2015/create/schema/parsers/nativeEnum.js +0 -37
  161. package/lib-es2015/create/schema/parsers/nativeEnum.js.map +0 -1
  162. package/lib-es2015/create/schema/parsers/null.js +0 -4
  163. package/lib-es2015/create/schema/parsers/null.js.map +0 -1
  164. package/lib-es2015/create/schema/parsers/nullable.js +0 -57
  165. package/lib-es2015/create/schema/parsers/nullable.js.map +0 -1
  166. package/lib-es2015/create/schema/parsers/number.js +0 -44
  167. package/lib-es2015/create/schema/parsers/number.js.map +0 -1
  168. package/lib-es2015/create/schema/parsers/object.js +0 -99
  169. package/lib-es2015/create/schema/parsers/object.js.map +0 -1
  170. package/lib-es2015/create/schema/parsers/optional.js +0 -38
  171. package/lib-es2015/create/schema/parsers/optional.js.map +0 -1
  172. package/lib-es2015/create/schema/parsers/pipeline.js +0 -16
  173. package/lib-es2015/create/schema/parsers/pipeline.js.map +0 -1
  174. package/lib-es2015/create/schema/parsers/preprocess.js +0 -3
  175. package/lib-es2015/create/schema/parsers/preprocess.js.map +0 -1
  176. package/lib-es2015/create/schema/parsers/readonly.js +0 -4
  177. package/lib-es2015/create/schema/parsers/readonly.js.map +0 -1
  178. package/lib-es2015/create/schema/parsers/record.js +0 -39
  179. package/lib-es2015/create/schema/parsers/record.js.map +0 -1
  180. package/lib-es2015/create/schema/parsers/refine.js +0 -3
  181. package/lib-es2015/create/schema/parsers/refine.js.map +0 -1
  182. package/lib-es2015/create/schema/parsers/set.js +0 -14
  183. package/lib-es2015/create/schema/parsers/set.js.map +0 -1
  184. package/lib-es2015/create/schema/parsers/string.js +0 -91
  185. package/lib-es2015/create/schema/parsers/string.js.map +0 -1
  186. package/lib-es2015/create/schema/parsers/transform.js +0 -23
  187. package/lib-es2015/create/schema/parsers/transform.js.map +0 -1
  188. package/lib-es2015/create/schema/parsers/tuple.js +0 -50
  189. package/lib-es2015/create/schema/parsers/tuple.js.map +0 -1
  190. package/lib-es2015/create/schema/parsers/union.js +0 -8
  191. package/lib-es2015/create/schema/parsers/union.js.map +0 -1
  192. package/lib-es2015/create/schema/parsers/unknown.js +0 -2
  193. package/lib-es2015/create/schema/parsers/unknown.js.map +0 -1
  194. package/lib-es2015/create/specificationExtension.js +0 -2
  195. package/lib-es2015/create/specificationExtension.js.map +0 -1
  196. package/lib-es2015/extendZod.js +0 -44
  197. package/lib-es2015/extendZod.js.map +0 -1
  198. package/lib-es2015/index.js +0 -6
  199. package/lib-es2015/index.js.map +0 -1
  200. package/lib-es2015/openapi.js +0 -9
  201. package/lib-es2015/openapi.js.map +0 -1
  202. package/lib-es2015/openapi3-ts/dist/dsl/openapi-builder30.js +0 -2
  203. package/lib-es2015/openapi3-ts/dist/dsl/openapi-builder30.js.map +0 -1
  204. package/lib-es2015/openapi3-ts/dist/dsl/openapi-builder31.js +0 -2
  205. package/lib-es2015/openapi3-ts/dist/dsl/openapi-builder31.js.map +0 -1
  206. package/lib-es2015/openapi3-ts/dist/index.js +0 -5
  207. package/lib-es2015/openapi3-ts/dist/index.js.map +0 -1
  208. package/lib-es2015/openapi3-ts/dist/model/oas-common.js +0 -2
  209. package/lib-es2015/openapi3-ts/dist/model/oas-common.js.map +0 -1
  210. package/lib-es2015/openapi3-ts/dist/model/openapi30.js +0 -2
  211. package/lib-es2015/openapi3-ts/dist/model/openapi30.js.map +0 -1
  212. package/lib-es2015/openapi3-ts/dist/model/openapi31.js +0 -2
  213. package/lib-es2015/openapi3-ts/dist/model/openapi31.js.map +0 -1
  214. package/lib-es2015/openapi3-ts/dist/model/server.js +0 -2
  215. package/lib-es2015/openapi3-ts/dist/model/server.js.map +0 -1
  216. package/lib-es2015/openapi3-ts/dist/model/specification-extension.js +0 -2
  217. package/lib-es2015/openapi3-ts/dist/model/specification-extension.js.map +0 -1
  218. package/lib-es2015/openapi3-ts/dist/oas30.js +0 -3
  219. package/lib-es2015/openapi3-ts/dist/oas30.js.map +0 -1
  220. package/lib-es2015/openapi3-ts/dist/oas31.js +0 -3
  221. package/lib-es2015/openapi3-ts/dist/oas31.js.map +0 -1
  222. package/lib-es2015/openapi3-ts/oas30.js +0 -3
  223. package/lib-es2015/openapi3-ts/oas30.js.map +0 -1
  224. package/lib-es2015/openapi3-ts/oas31.js +0 -3
  225. package/lib-es2015/openapi3-ts/oas31.js.map +0 -1
  226. package/lib-es2015/zodType.js +0 -4
  227. package/lib-es2015/zodType.js.map +0 -1
@@ -1,34 +1,1677 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
- };
21
- var __importStar = (this && this.__importStar) || function (mod) {
22
- if (mod && mod.__esModule) return mod;
23
- var result = {};
24
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
- __setModuleDefault(result, mod);
26
- return result;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ api: () => api_exports,
24
+ createDocument: () => createDocument,
25
+ extendZodWithOpenApi: () => extendZodWithOpenApi,
26
+ oas30: () => oas30_exports,
27
+ oas31: () => oas31_exports
28
+ });
29
+ module.exports = __toCommonJS(src_exports);
30
+
31
+ // src/zodType.ts
32
+ var isZodType = (zodType, typeName) => zodType?._def?.typeName === typeName;
33
+ var isAnyZodType = (zodType) => Boolean(
34
+ zodType?._def?.typeName
35
+ );
36
+
37
+ // src/create/schema/metadata.ts
38
+ var enhanceWithMetadata = (schemaObject, metadata) => {
39
+ if ("$ref" in schemaObject) {
40
+ if (Object.values(metadata).every((val) => val === void 0)) {
41
+ return schemaObject;
42
+ }
43
+ return {
44
+ allOf: [schemaObject, metadata]
45
+ };
46
+ }
47
+ return {
48
+ ...schemaObject,
49
+ ...metadata
50
+ };
51
+ };
52
+
53
+ // src/create/schema/parsers/array.ts
54
+ var createArraySchema = (zodArray, state) => {
55
+ const zodType = zodArray._def.type;
56
+ const minItems = zodArray._def.exactLength?.value ?? zodArray._def.minLength?.value;
57
+ const maxItems = zodArray._def.exactLength?.value ?? zodArray._def.maxLength?.value;
58
+ return {
59
+ type: "array",
60
+ items: createSchemaObject(zodType, state, ["array items"]),
61
+ ...minItems !== void 0 && { minItems },
62
+ ...maxItems !== void 0 && { maxItems }
63
+ };
64
+ };
65
+
66
+ // src/create/schema/parsers/boolean.ts
67
+ var createBooleanSchema = (_zodBoolean) => ({
68
+ type: "boolean"
69
+ });
70
+
71
+ // src/create/schema/parsers/brand.ts
72
+ var createBrandedSchema = (zodBranded, state) => createSchemaObject(zodBranded._def.type, state, ["brand"]);
73
+
74
+ // src/create/schema/parsers/catch.ts
75
+ var createCatchSchema = (zodCatch, state) => createSchemaObject(zodCatch._def.innerType, state, ["catch"]);
76
+
77
+ // src/create/schema/parsers/date.ts
78
+ var createDateSchema = (_zodDate) => ({
79
+ type: "string"
80
+ });
81
+
82
+ // src/create/schema/parsers/default.ts
83
+ var createDefaultSchema = (zodDefault, state) => {
84
+ const schemaObject = createSchemaObject(zodDefault._def.innerType, state, [
85
+ "default"
86
+ ]);
87
+ return enhanceWithMetadata(schemaObject, {
88
+ default: zodDefault._def.defaultValue()
89
+ });
90
+ };
91
+
92
+ // src/create/schema/parsers/discriminatedUnion.ts
93
+ var createDiscriminatedUnionSchema = (zodDiscriminatedUnion, state) => {
94
+ const options = zodDiscriminatedUnion.options;
95
+ const schemas = options.map(
96
+ (option, index) => createSchemaObject(option, state, [`discriminated union option ${index}`])
97
+ );
98
+ const discriminator = mapDiscriminator(
99
+ schemas,
100
+ options,
101
+ zodDiscriminatedUnion.discriminator,
102
+ state
103
+ );
104
+ return {
105
+ oneOf: schemas,
106
+ ...discriminator && { discriminator }
107
+ };
108
+ };
109
+ var mapDiscriminator = (schemas, zodObjects, discriminator, state) => {
110
+ if (typeof discriminator !== "string") {
111
+ return void 0;
112
+ }
113
+ const mapping = {};
114
+ for (const [index, zodObject] of zodObjects.entries()) {
115
+ const schema = schemas[index];
116
+ const componentSchemaRef = "$ref" in schema ? schema?.$ref : void 0;
117
+ if (!componentSchemaRef) {
118
+ return void 0;
119
+ }
120
+ const value = zodObject.shape[discriminator];
121
+ if (isZodType(value, "ZodEnum")) {
122
+ for (const enumValue of value._def.values) {
123
+ mapping[enumValue] = componentSchemaRef;
124
+ }
125
+ continue;
126
+ }
127
+ const literalValue = (value?._def).value;
128
+ if (typeof literalValue !== "string") {
129
+ throw new Error(
130
+ `Discriminator ${discriminator} could not be found in on index ${index} of a discriminated union at ${state.path.join(
131
+ " > "
132
+ )}`
133
+ );
134
+ }
135
+ mapping[literalValue] = componentSchemaRef;
136
+ }
137
+ return {
138
+ propertyName: discriminator,
139
+ mapping
140
+ };
141
+ };
142
+
143
+ // src/create/schema/parsers/enum.ts
144
+ var createEnumSchema = (zodEnum) => ({
145
+ type: "string",
146
+ enum: zodEnum._def.values
147
+ });
148
+
149
+ // src/create/schema/parsers/intersection.ts
150
+ var createIntersectionSchema = (zodIntersection, state) => ({
151
+ allOf: [
152
+ createSchemaObject(zodIntersection._def.left, state, ["intersection left"]),
153
+ createSchemaObject(zodIntersection._def.right, state, [
154
+ "intersection right"
155
+ ])
156
+ ]
157
+ });
158
+
159
+ // src/create/schema/parsers/lazy.ts
160
+ var createLazySchema = (zodLazy, state) => {
161
+ const innerSchema = zodLazy._def.getter();
162
+ return createSchemaObject(innerSchema, state, ["lazy schema"]);
163
+ };
164
+
165
+ // src/create/schema/parsers/literal.ts
166
+ var createLiteralSchema = (zodLiteral) => ({
167
+ type: typeof zodLiteral.value,
168
+ enum: [zodLiteral._def.value]
169
+ });
170
+
171
+ // src/create/schema/parsers/manual.ts
172
+ var createManualTypeSchema = (zodSchema, state) => {
173
+ if (!zodSchema._def.openapi?.type) {
174
+ const zodType = zodSchema.constructor.name;
175
+ if (isZodType(zodSchema, "ZodEffects")) {
176
+ const schemaName = `${zodType} - ${zodSchema._def.effect.type}`;
177
+ throw new Error(
178
+ `Unknown schema ${schemaName} at ${state.path.join(
179
+ " > "
180
+ )}. Please assign it a manual 'type', wrap it in a ZodPipeline or change the 'effectType'.`
181
+ );
182
+ }
183
+ throw new Error(
184
+ `Unknown schema ${zodType}. Please assign it a manual 'type'.`
185
+ );
186
+ }
187
+ return {
188
+ type: zodSchema._def.openapi.type
189
+ };
190
+ };
191
+
192
+ // src/openapi.ts
193
+ var openApiVersions = [
194
+ "3.0.0",
195
+ "3.0.1",
196
+ "3.0.2",
197
+ "3.0.3",
198
+ "3.1.0"
199
+ ];
200
+ var satisfiesVersion = (test, against) => openApiVersions.indexOf(test) >= openApiVersions.indexOf(against);
201
+
202
+ // src/create/schema/parsers/nativeEnum.ts
203
+ var createNativeEnumSchema = (zodEnum, state) => {
204
+ const enumValues = getValidEnumValues(zodEnum._def.values);
205
+ const { numbers, strings } = sortStringsAndNumbers(enumValues);
206
+ if (strings.length && numbers.length) {
207
+ if (satisfiesVersion(state.components.openapi, "3.1.0"))
208
+ return {
209
+ type: ["string", "number"],
210
+ enum: [...strings, ...numbers]
211
+ };
212
+ return {
213
+ oneOf: [
214
+ { type: "string", enum: strings },
215
+ { type: "number", enum: numbers }
216
+ ]
217
+ };
218
+ }
219
+ if (strings.length) {
220
+ return {
221
+ type: "string",
222
+ enum: strings
223
+ };
224
+ }
225
+ return {
226
+ type: "number",
227
+ enum: numbers
228
+ };
229
+ };
230
+ var getValidEnumValues = (enumValues) => {
231
+ const keys = Object.keys(enumValues).filter(
232
+ (key) => typeof enumValues[enumValues[key]] !== "number"
233
+ );
234
+ return keys.map((key) => enumValues[key]);
235
+ };
236
+ var sortStringsAndNumbers = (values) => ({
237
+ strings: values.filter((value) => typeof value === "string"),
238
+ numbers: values.filter((value) => typeof value === "number")
239
+ });
240
+
241
+ // src/create/schema/parsers/null.ts
242
+ var createNullSchema = (_zodNull) => ({
243
+ type: "null"
244
+ });
245
+
246
+ // src/create/schema/parsers/nullable.ts
247
+ var createNullableSchema = (zodNullable, state) => {
248
+ const schemaObject = createSchemaObject(zodNullable.unwrap(), state, [
249
+ "nullable"
250
+ ]);
251
+ if ("$ref" in schemaObject || schemaObject.allOf) {
252
+ return {
253
+ oneOf: mapNullOf([schemaObject], state.components.openapi)
254
+ };
255
+ }
256
+ if (schemaObject.oneOf) {
257
+ const { oneOf, ...schema2 } = schemaObject;
258
+ return {
259
+ oneOf: mapNullOf(oneOf, state.components.openapi),
260
+ ...schema2
261
+ };
262
+ }
263
+ if (schemaObject.anyOf) {
264
+ const { anyOf, ...schema2 } = schemaObject;
265
+ return {
266
+ anyOf: mapNullOf(anyOf, state.components.openapi),
267
+ ...schema2
268
+ };
269
+ }
270
+ const { type, ...schema } = schemaObject;
271
+ if (satisfiesVersion(state.components.openapi, "3.1.0")) {
272
+ return {
273
+ type: mapNullType(type),
274
+ ...schema
275
+ };
276
+ }
277
+ return {
278
+ type,
279
+ nullable: true,
280
+ ...schema,
281
+ // https://github.com/OAI/OpenAPI-Specification/blob/main/proposals/2019-10-31-Clarify-Nullable.md#if-a-schema-specifies-nullable-true-and-enum-1-2-3-does-that-schema-allow-null-values-see-1900
282
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
283
+ ...schema.enum && { enum: [...schema.enum, null] }
284
+ };
285
+ };
286
+ var mapNullType = (type) => {
287
+ if (!type) {
288
+ return "null";
289
+ }
290
+ if (Array.isArray(type)) {
291
+ return [...type, "null"];
292
+ }
293
+ return [type, "null"];
294
+ };
295
+ var mapNullOf = (ofSchema, openapi) => {
296
+ if (satisfiesVersion(openapi, "3.1.0")) {
297
+ return [...ofSchema, { type: "null" }];
298
+ }
299
+ return [...ofSchema, { nullable: true }];
300
+ };
301
+
302
+ // src/create/schema/parsers/number.ts
303
+ var createNumberSchema = (zodNumber, state) => {
304
+ const zodNumberChecks = getZodNumberChecks(zodNumber);
305
+ const minimum = mapMinimum(zodNumberChecks, state.components.openapi);
306
+ const maximum = mapMaximum(zodNumberChecks, state.components.openapi);
307
+ return {
308
+ type: mapNumberType(zodNumberChecks),
309
+ ...minimum && minimum,
310
+ // Union types are not easy to tame
311
+ ...maximum && maximum
312
+ };
313
+ };
314
+ var mapMaximum = (zodNumberCheck, openapi) => {
315
+ if (!zodNumberCheck.max) {
316
+ return void 0;
317
+ }
318
+ const maximum = zodNumberCheck.max.value;
319
+ if (zodNumberCheck.max.inclusive) {
320
+ return { ...maximum !== void 0 && { maximum } };
321
+ }
322
+ if (satisfiesVersion(openapi, "3.1.0")) {
323
+ return { exclusiveMaximum: maximum };
324
+ }
325
+ return { maximum, exclusiveMaximum: true };
326
+ };
327
+ var mapMinimum = (zodNumberCheck, openapi) => {
328
+ if (!zodNumberCheck.min) {
329
+ return void 0;
330
+ }
331
+ const minimum = zodNumberCheck.min.value;
332
+ if (zodNumberCheck.min.inclusive) {
333
+ return { ...minimum !== void 0 && { minimum } };
334
+ }
335
+ if (satisfiesVersion(openapi, "3.1.0")) {
336
+ return { exclusiveMinimum: minimum };
337
+ }
338
+ return { minimum, exclusiveMinimum: true };
339
+ };
340
+ var getZodNumberChecks = (zodNumber) => zodNumber._def.checks.reduce((acc, check) => {
341
+ acc[check.kind] = check;
342
+ return acc;
343
+ }, {});
344
+ var mapNumberType = (zodNumberChecks) => zodNumberChecks.int ? "integer" : "number";
345
+
346
+ // src/create/schema/parsers/optional.ts
347
+ var createOptionalSchema = (zodOptional, state) => (
348
+ // Optional doesn't change OpenAPI schema
349
+ createSchemaObject(zodOptional.unwrap(), state, ["optional"])
350
+ );
351
+ var isOptionalSchema = (zodSchema, state) => {
352
+ if (isZodType(zodSchema, "ZodOptional")) {
353
+ return true;
354
+ }
355
+ if (isZodType(zodSchema, "ZodDefault")) {
356
+ return state.type === "input";
357
+ }
358
+ if (isZodType(zodSchema, "ZodNullable") || isZodType(zodSchema, "ZodCatch")) {
359
+ return isOptionalSchema(zodSchema._def.innerType, state);
360
+ }
361
+ if (isZodType(zodSchema, "ZodEffects")) {
362
+ return isOptionalSchema(zodSchema._def.schema, state);
363
+ }
364
+ if (isZodType(zodSchema, "ZodUnion") || isZodType(zodSchema, "ZodDiscriminatedUnion")) {
365
+ return zodSchema._def.options.some(
366
+ (schema) => isOptionalSchema(schema, state)
367
+ );
368
+ }
369
+ if (isZodType(zodSchema, "ZodIntersection")) {
370
+ return [zodSchema._def.left, zodSchema._def.right].some(
371
+ (schema) => isOptionalSchema(schema, state)
372
+ );
373
+ }
374
+ if (isZodType(zodSchema, "ZodPipeline")) {
375
+ if (state.effectType === "input" || state.type === "input" && state.effectType !== "output") {
376
+ return isOptionalSchema(zodSchema._def.in, state);
377
+ }
378
+ if (state.effectType === "output" || state.type === "output" && state.effectType !== "input") {
379
+ return isOptionalSchema(zodSchema._def.out, state);
380
+ }
381
+ }
382
+ if (isZodType(zodSchema, "ZodLazy")) {
383
+ return isOptionalSchema(zodSchema._def.getter(), state);
384
+ }
385
+ return zodSchema.isOptional();
386
+ };
387
+
388
+ // src/create/schema/parsers/object.ts
389
+ var createObjectSchema = (zodObject, state) => {
390
+ const extendedSchema = createExtendedSchema(
391
+ zodObject,
392
+ zodObject._def.extendMetadata?.extends,
393
+ state
394
+ );
395
+ if (extendedSchema) {
396
+ return extendedSchema;
397
+ }
398
+ return createObjectSchemaFromShape(
399
+ zodObject.shape,
400
+ {
401
+ unknownKeys: zodObject._def.unknownKeys,
402
+ catchAll: zodObject._def.catchall
403
+ },
404
+ state
405
+ );
406
+ };
407
+ var createExtendedSchema = (zodObject, baseZodObject, state) => {
408
+ if (!baseZodObject) {
409
+ return void 0;
410
+ }
411
+ const component = state.components.schemas.get(baseZodObject);
412
+ if (component ?? baseZodObject._def.openapi?.ref) {
413
+ createSchemaObject(baseZodObject, state, ["extended schema"]);
414
+ }
415
+ const completeComponent = state.components.schemas.get(baseZodObject);
416
+ if (!completeComponent) {
417
+ return void 0;
418
+ }
419
+ const diffOpts = createDiffOpts(
420
+ {
421
+ unknownKeys: baseZodObject._def.unknownKeys,
422
+ catchAll: baseZodObject._def.catchall
423
+ },
424
+ {
425
+ unknownKeys: zodObject._def.unknownKeys,
426
+ catchAll: zodObject._def.catchall
427
+ }
428
+ );
429
+ if (!diffOpts) {
430
+ return void 0;
431
+ }
432
+ const diffShape = createShapeDiff(
433
+ baseZodObject._def.shape(),
434
+ zodObject._def.shape()
435
+ );
436
+ if (!diffShape) {
437
+ return void 0;
438
+ }
439
+ return {
440
+ allOf: [{ $ref: createComponentSchemaRef(completeComponent.ref) }],
441
+ ...createObjectSchemaFromShape(diffShape, diffOpts, state)
442
+ };
443
+ };
444
+ var createDiffOpts = (baseOpts, extendedOpts) => {
445
+ if (baseOpts.unknownKeys === "strict" || !isZodType(baseOpts.catchAll, "ZodNever")) {
446
+ return void 0;
447
+ }
448
+ return {
449
+ catchAll: extendedOpts.catchAll,
450
+ unknownKeys: extendedOpts.unknownKeys
451
+ };
452
+ };
453
+ var createShapeDiff = (baseObj, extendedObj) => {
454
+ const acc = {};
455
+ for (const [key, val] of Object.entries(extendedObj)) {
456
+ const baseValue = baseObj[key];
457
+ if (val === baseValue) {
458
+ continue;
459
+ }
460
+ if (baseValue === void 0) {
461
+ acc[key] = extendedObj[key];
462
+ continue;
463
+ }
464
+ return null;
465
+ }
466
+ return acc;
467
+ };
468
+ var createObjectSchemaFromShape = (shape, { unknownKeys, catchAll }, state) => {
469
+ const properties = mapProperties(shape, state);
470
+ const required = mapRequired(shape, state);
471
+ return {
472
+ type: "object",
473
+ ...properties && { properties },
474
+ ...required && { required },
475
+ ...unknownKeys === "strict" && { additionalProperties: false },
476
+ ...!isZodType(catchAll, "ZodNever") && {
477
+ additionalProperties: createSchemaObject(catchAll, state, [
478
+ "additional properties"
479
+ ])
480
+ }
481
+ };
482
+ };
483
+ var mapRequired = (shape, state) => {
484
+ const required = Object.entries(shape).filter(([_key, zodSchema]) => !isOptionalSchema(zodSchema, state)).map(([key]) => key);
485
+ if (!required.length) {
486
+ return void 0;
487
+ }
488
+ return required;
489
+ };
490
+ var mapProperties = (shape, state) => Object.entries(shape).reduce(
491
+ (acc, [key, zodSchema]) => {
492
+ acc[key] = createSchemaObject(zodSchema, state, [`property: ${key}`]);
493
+ return acc;
494
+ },
495
+ {}
496
+ );
497
+
498
+ // src/create/schema/parsers/pipeline.ts
499
+ var createPipelineSchema = (zodPipeline, state) => {
500
+ if (zodPipeline._def.openapi?.effectType === "input") {
501
+ return createSchemaObject(zodPipeline._def.in, state, ["pipeline input"]);
502
+ }
503
+ if (zodPipeline._def.openapi?.effectType === "output") {
504
+ return createSchemaObject(zodPipeline._def.out, state, ["pipeline output"]);
505
+ }
506
+ if (state.type === "input") {
507
+ state.effectType = "input";
508
+ return createSchemaObject(zodPipeline._def.in, state, ["pipeline input"]);
509
+ }
510
+ state.effectType = "output";
511
+ return createSchemaObject(zodPipeline._def.out, state, ["pipeline output"]);
512
+ };
513
+
514
+ // src/create/schema/parsers/preprocess.ts
515
+ var createPreprocessSchema = (zodPreprocess, state) => createSchemaObject(zodPreprocess._def.schema, state, ["preprocess schema"]);
516
+
517
+ // src/create/schema/parsers/readonly.ts
518
+ var createReadonlySchema = (zodReadonly, state) => (
519
+ // Readonly doesn't change OpenAPI schema
520
+ createSchemaObject(zodReadonly._def.innerType, state, ["readonly"])
521
+ );
522
+
523
+ // src/create/schema/parsers/record.ts
524
+ var createRecordSchema = (zodRecord, state) => {
525
+ const additionalProperties = createSchemaObject(
526
+ zodRecord.valueSchema,
527
+ state,
528
+ ["record value"]
529
+ );
530
+ const keySchema = createSchemaObject(zodRecord.keySchema, state, [
531
+ "record key"
532
+ ]);
533
+ const maybeComponent = "$ref" in keySchema && state.components.schemas.get(zodRecord.keySchema);
534
+ const maybeSchema = maybeComponent && maybeComponent.type === "complete" && maybeComponent.schemaObject;
535
+ const renderedKeySchema = maybeSchema || keySchema;
536
+ if ("enum" in renderedKeySchema && renderedKeySchema.enum) {
537
+ return {
538
+ type: "object",
539
+ properties: renderedKeySchema.enum.reduce((acc, key) => {
540
+ acc[key] = additionalProperties;
541
+ return acc;
542
+ }, {}),
543
+ additionalProperties: false
544
+ };
545
+ }
546
+ if (satisfiesVersion(state.components.openapi, "3.1.0") && "type" in renderedKeySchema && renderedKeySchema.type === "string" && Object.keys(renderedKeySchema).length > 1) {
547
+ return {
548
+ type: "object",
549
+ // @ts-expect-error FIXME: https://github.com/metadevpro/openapi3-ts/pull/120
550
+ propertyNames: keySchema,
551
+ additionalProperties
552
+ };
553
+ }
554
+ return {
555
+ type: "object",
556
+ additionalProperties
557
+ };
558
+ };
559
+
560
+ // src/create/schema/parsers/refine.ts
561
+ var createRefineSchema = (zodRefine, state) => createSchemaObject(zodRefine._def.schema, state, ["refine schema"]);
562
+
563
+ // src/create/schema/parsers/set.ts
564
+ var createSetSchema = (zodSet, state) => {
565
+ const schema = zodSet._def.valueType;
566
+ const minItems = zodSet._def.minSize?.value;
567
+ const maxItems = zodSet._def.maxSize?.value;
568
+ return {
569
+ type: "array",
570
+ items: createSchemaObject(schema, state, ["set items"]),
571
+ uniqueItems: true,
572
+ ...minItems !== void 0 && { minItems },
573
+ ...maxItems !== void 0 && { maxItems }
574
+ };
575
+ };
576
+
577
+ // src/create/schema/parsers/string.ts
578
+ var createStringSchema = (zodString) => {
579
+ const zodStringChecks = getZodStringChecks(zodString);
580
+ const format = mapStringFormat(zodStringChecks);
581
+ const patterns = mapPatterns(zodStringChecks);
582
+ const minLength = zodStringChecks.length?.[0]?.value ?? zodStringChecks.min?.[0]?.value;
583
+ const maxLength = zodStringChecks.length?.[0]?.value ?? zodStringChecks.max?.[0]?.value;
584
+ if (patterns.length <= 1) {
585
+ return {
586
+ type: "string",
587
+ ...format && { format },
588
+ ...patterns[0] && { pattern: patterns[0] },
589
+ ...minLength !== void 0 && { minLength },
590
+ ...maxLength !== void 0 && { maxLength }
591
+ };
592
+ }
593
+ return {
594
+ allOf: [
595
+ {
596
+ type: "string",
597
+ ...format && { format },
598
+ ...patterns[0] && { pattern: patterns[0] },
599
+ ...minLength !== void 0 && { minLength },
600
+ ...maxLength !== void 0 && { maxLength }
601
+ },
602
+ ...patterns.slice(1).map(
603
+ (pattern) => ({
604
+ type: "string",
605
+ pattern
606
+ })
607
+ )
608
+ ]
609
+ };
610
+ };
611
+ var getZodStringChecks = (zodString) => zodString._def.checks.reduce(
612
+ (acc, check) => {
613
+ const mapping = acc[check.kind];
614
+ if (mapping) {
615
+ mapping.push(check);
616
+ return acc;
617
+ }
618
+ acc[check.kind] = [check];
619
+ return acc;
620
+ },
621
+ {}
622
+ );
623
+ var mapPatterns = (zodStringChecks) => {
624
+ const startsWith = mapStartsWith(zodStringChecks);
625
+ const endsWith = mapEndsWith(zodStringChecks);
626
+ const regex = mapRegex(zodStringChecks);
627
+ const includes = mapIncludes(zodStringChecks);
628
+ const patterns = [
629
+ ...regex ?? [],
630
+ ...startsWith ? [startsWith] : [],
631
+ ...endsWith ? [endsWith] : [],
632
+ ...includes ?? []
633
+ ];
634
+ return patterns;
635
+ };
636
+ var mapStartsWith = (zodStringChecks) => {
637
+ if (zodStringChecks.startsWith?.[0]?.value) {
638
+ return `^${zodStringChecks.startsWith[0].value}`;
639
+ }
640
+ return void 0;
641
+ };
642
+ var mapEndsWith = (zodStringChecks) => {
643
+ if (zodStringChecks.endsWith?.[0]?.value) {
644
+ return `${zodStringChecks.endsWith[0].value}$`;
645
+ }
646
+ return void 0;
647
+ };
648
+ var mapRegex = (zodStringChecks) => zodStringChecks.regex?.map((regexCheck) => regexCheck.regex.source);
649
+ var mapIncludes = (zodStringChecks) => zodStringChecks.includes?.map((includeCheck) => {
650
+ if (includeCheck.position === 0) {
651
+ return `^${includeCheck.value}`;
652
+ }
653
+ if (includeCheck.position) {
654
+ return `^.{${includeCheck.position}}${includeCheck.value}`;
655
+ }
656
+ return includeCheck.value;
657
+ });
658
+ var mapStringFormat = (zodStringChecks) => {
659
+ if (zodStringChecks.uuid) {
660
+ return "uuid";
661
+ }
662
+ if (zodStringChecks.datetime) {
663
+ return "date-time";
664
+ }
665
+ if (zodStringChecks.email) {
666
+ return "email";
667
+ }
668
+ if (zodStringChecks.url) {
669
+ return "uri";
670
+ }
671
+ return void 0;
672
+ };
673
+
674
+ // src/create/schema/parsers/transform.ts
675
+ var createTransformSchema = (zodTransform, state) => {
676
+ if (zodTransform._def.openapi?.effectType === "output") {
677
+ return createManualTypeSchema(zodTransform, state);
678
+ }
679
+ if (zodTransform._def.openapi?.effectType === "input") {
680
+ return createSchemaObject(zodTransform._def.schema, state, [
681
+ "transform input"
682
+ ]);
683
+ }
684
+ if (state.type === "output") {
685
+ return createManualTypeSchema(zodTransform, state);
686
+ }
687
+ state.effectType = "input";
688
+ return createSchemaObject(zodTransform._def.schema, state, [
689
+ "transform input"
690
+ ]);
691
+ };
692
+ var throwTransformError = (zodType, state) => {
693
+ throw new Error(
694
+ `${JSON.stringify(zodType)} at ${state.path.join(
695
+ " > "
696
+ )} contains a transformation but is used in both an input and an output. This is likely a mistake. Set an \`effectType\`, wrap it in a ZodPipeline or assign it a manual type to resolve`
697
+ );
698
+ };
699
+
700
+ // src/create/schema/parsers/tuple.ts
701
+ var createTupleSchema = (zodTuple, state) => {
702
+ const items = zodTuple.items;
703
+ const rest = zodTuple._def.rest;
704
+ return {
705
+ type: "array",
706
+ ...mapItemProperties(items, rest, state)
707
+ };
708
+ };
709
+ var mapPrefixItems = (items, state) => {
710
+ if (items.length) {
711
+ return items.map(
712
+ (item, index) => createSchemaObject(item, state, [`tuple item ${index}`])
713
+ );
714
+ }
715
+ return void 0;
716
+ };
717
+ var mapItemProperties = (items, rest, state) => {
718
+ const prefixItems = mapPrefixItems(items, state);
719
+ if (satisfiesVersion(state.components.openapi, "3.1.0")) {
720
+ if (!rest) {
721
+ return {
722
+ maxItems: items.length,
723
+ minItems: items.length,
724
+ ...prefixItems && { prefixItems }
725
+ };
726
+ }
727
+ return {
728
+ items: createSchemaObject(rest, state, ["tuple items"]),
729
+ ...prefixItems && { prefixItems }
730
+ };
731
+ }
732
+ if (!rest) {
733
+ return {
734
+ maxItems: items.length,
735
+ minItems: items.length,
736
+ ...prefixItems && { items: { oneOf: prefixItems } }
737
+ };
738
+ }
739
+ return {
740
+ ...prefixItems && {
741
+ items: {
742
+ oneOf: [
743
+ ...prefixItems,
744
+ createSchemaObject(rest, state, ["tuple items"])
745
+ ]
746
+ }
747
+ }
748
+ };
749
+ };
750
+
751
+ // src/create/schema/parsers/union.ts
752
+ var createUnionSchema = (zodUnion, state) => {
753
+ const schemas = zodUnion.options.map(
754
+ (option, index) => createSchemaObject(option, state, [`union option ${index}`])
755
+ );
756
+ return {
757
+ anyOf: schemas
758
+ };
27
759
  };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.api = void 0;
30
- __exportStar(require("./create/document"), exports);
31
- __exportStar(require("./extendZod"), exports);
32
- __exportStar(require("./openapi3-ts/dist"), exports);
33
- exports.api = __importStar(require("./api"));
34
- //# sourceMappingURL=index.js.map
760
+
761
+ // src/create/schema/parsers/unknown.ts
762
+ var createUnknownSchema = (_zodUnknown) => ({});
763
+
764
+ // src/create/schema/parsers/index.ts
765
+ var createSchemaSwitch = (zodSchema, state) => {
766
+ if (zodSchema._def.openapi?.type) {
767
+ return createManualTypeSchema(zodSchema, state);
768
+ }
769
+ if (isZodType(zodSchema, "ZodString")) {
770
+ return createStringSchema(zodSchema);
771
+ }
772
+ if (isZodType(zodSchema, "ZodNumber")) {
773
+ return createNumberSchema(zodSchema, state);
774
+ }
775
+ if (isZodType(zodSchema, "ZodBoolean")) {
776
+ return createBooleanSchema(zodSchema);
777
+ }
778
+ if (isZodType(zodSchema, "ZodEnum")) {
779
+ return createEnumSchema(zodSchema);
780
+ }
781
+ if (isZodType(zodSchema, "ZodLiteral")) {
782
+ return createLiteralSchema(zodSchema);
783
+ }
784
+ if (isZodType(zodSchema, "ZodNativeEnum")) {
785
+ return createNativeEnumSchema(zodSchema, state);
786
+ }
787
+ if (isZodType(zodSchema, "ZodArray")) {
788
+ return createArraySchema(zodSchema, state);
789
+ }
790
+ if (isZodType(zodSchema, "ZodObject")) {
791
+ return createObjectSchema(zodSchema, state);
792
+ }
793
+ if (isZodType(zodSchema, "ZodUnion")) {
794
+ return createUnionSchema(zodSchema, state);
795
+ }
796
+ if (isZodType(zodSchema, "ZodDiscriminatedUnion")) {
797
+ return createDiscriminatedUnionSchema(zodSchema, state);
798
+ }
799
+ if (isZodType(zodSchema, "ZodNull")) {
800
+ return createNullSchema(zodSchema);
801
+ }
802
+ if (isZodType(zodSchema, "ZodNullable")) {
803
+ return createNullableSchema(zodSchema, state);
804
+ }
805
+ if (isZodType(zodSchema, "ZodOptional")) {
806
+ return createOptionalSchema(zodSchema, state);
807
+ }
808
+ if (isZodType(zodSchema, "ZodReadonly")) {
809
+ return createReadonlySchema(zodSchema, state);
810
+ }
811
+ if (isZodType(zodSchema, "ZodDefault")) {
812
+ return createDefaultSchema(zodSchema, state);
813
+ }
814
+ if (isZodType(zodSchema, "ZodRecord")) {
815
+ return createRecordSchema(zodSchema, state);
816
+ }
817
+ if (isZodType(zodSchema, "ZodTuple")) {
818
+ return createTupleSchema(zodSchema, state);
819
+ }
820
+ if (isZodType(zodSchema, "ZodDate")) {
821
+ return createDateSchema(zodSchema);
822
+ }
823
+ if (isZodType(zodSchema, "ZodPipeline")) {
824
+ return createPipelineSchema(zodSchema, state);
825
+ }
826
+ if (isZodType(zodSchema, "ZodEffects") && zodSchema._def.effect.type === "transform") {
827
+ return createTransformSchema(zodSchema, state);
828
+ }
829
+ if (isZodType(zodSchema, "ZodEffects") && zodSchema._def.effect.type === "preprocess") {
830
+ return createPreprocessSchema(zodSchema, state);
831
+ }
832
+ if (isZodType(zodSchema, "ZodEffects") && zodSchema._def.effect.type === "refinement") {
833
+ return createRefineSchema(zodSchema, state);
834
+ }
835
+ if (isZodType(zodSchema, "ZodNativeEnum")) {
836
+ return createNativeEnumSchema(zodSchema, state);
837
+ }
838
+ if (isZodType(zodSchema, "ZodIntersection")) {
839
+ return createIntersectionSchema(zodSchema, state);
840
+ }
841
+ if (isZodType(zodSchema, "ZodCatch")) {
842
+ return createCatchSchema(zodSchema, state);
843
+ }
844
+ if (isZodType(zodSchema, "ZodUnknown") || isZodType(zodSchema, "ZodAny")) {
845
+ return createUnknownSchema(zodSchema);
846
+ }
847
+ if (isZodType(zodSchema, "ZodLazy")) {
848
+ return createLazySchema(zodSchema, state);
849
+ }
850
+ if (isZodType(zodSchema, "ZodBranded")) {
851
+ return createBrandedSchema(zodSchema, state);
852
+ }
853
+ if (isZodType(zodSchema, "ZodSet")) {
854
+ return createSetSchema(zodSchema, state);
855
+ }
856
+ return createManualTypeSchema(zodSchema, state);
857
+ };
858
+
859
+ // src/create/schema/index.ts
860
+ var newSchemaState = (state) => ({
861
+ type: state.type,
862
+ components: state.components,
863
+ path: [...state.path],
864
+ visited: new Set(state.visited)
865
+ });
866
+ var createNewSchema = (zodSchema, newState, subpath) => {
867
+ newState.path.push(...subpath);
868
+ if (newState.visited.has(zodSchema)) {
869
+ throw new Error(
870
+ `The schema at ${newState.path.join(
871
+ " > "
872
+ )} needs to be registered because it's circularly referenced`
873
+ );
874
+ }
875
+ newState.visited.add(zodSchema);
876
+ const { effectType, param, header, ref, refType, ...additionalMetadata } = zodSchema._def.openapi ?? {};
877
+ const schema = createSchemaSwitch(zodSchema, newState);
878
+ const description = zodSchema.description;
879
+ const schemaWithMetadata = enhanceWithMetadata(schema, {
880
+ ...description && { description },
881
+ ...additionalMetadata
882
+ });
883
+ return {
884
+ schema: schemaWithMetadata,
885
+ newState
886
+ };
887
+ };
888
+ var createNewRef = (ref, zodSchema, state, subpath) => {
889
+ state.components.schemas.set(zodSchema, {
890
+ type: "in-progress",
891
+ ref
892
+ });
893
+ const newSchema = createNewSchema(
894
+ zodSchema,
895
+ newSchemaState({ ...state, visited: /* @__PURE__ */ new Set() }),
896
+ subpath
897
+ );
898
+ state.components.schemas.set(zodSchema, {
899
+ type: "complete",
900
+ ref,
901
+ schemaObject: newSchema.schema,
902
+ creationType: newSchema.newState?.effectType
903
+ });
904
+ return {
905
+ schema: { $ref: createComponentSchemaRef(ref) },
906
+ newState: newSchema.newState
907
+ };
908
+ };
909
+ var createExistingRef = (zodSchema, component, state, subpath) => {
910
+ const newState = newSchemaState(state);
911
+ newState.path.push(...subpath);
912
+ if (component && component.type === "complete") {
913
+ if (component.creationType && component.creationType !== state.type) {
914
+ throwTransformError(zodSchema, newState);
915
+ }
916
+ return {
917
+ schema: { $ref: createComponentSchemaRef(component.ref) },
918
+ newState: {
919
+ ...newState,
920
+ effectType: component.creationType
921
+ }
922
+ };
923
+ }
924
+ if (component && component.type === "in-progress") {
925
+ return {
926
+ schema: { $ref: createComponentSchemaRef(component.ref) },
927
+ newState
928
+ };
929
+ }
930
+ return;
931
+ };
932
+ var createSchemaOrRef = (zodSchema, state, subpath) => {
933
+ const component = state.components.schemas.get(zodSchema);
934
+ const existingRef = createExistingRef(zodSchema, component, state, subpath);
935
+ if (existingRef) {
936
+ return existingRef;
937
+ }
938
+ const ref = zodSchema._def.openapi?.ref ?? component?.ref;
939
+ if (ref) {
940
+ return createNewRef(ref, zodSchema, state, subpath);
941
+ }
942
+ return createNewSchema(zodSchema, newSchemaState(state), subpath);
943
+ };
944
+ var createSchemaObject = (zodSchema, state, subpath) => {
945
+ const { schema, newState } = createSchemaOrRef(zodSchema, state, subpath);
946
+ if (newState?.effectType) {
947
+ if (state.type !== newState?.effectType || state.effectType && newState.effectType !== state.effectType) {
948
+ throwTransformError(zodSchema, newState);
949
+ }
950
+ state.effectType = newState.effectType;
951
+ }
952
+ return schema;
953
+ };
954
+
955
+ // src/create/parameters.ts
956
+ var createComponentParamRef = (ref) => `#/components/parameters/${ref}`;
957
+ var createBaseParameter = (schema, components, subpath) => {
958
+ const { ref, ...rest } = schema._def.openapi?.param ?? {};
959
+ const state = newSchemaState({
960
+ components,
961
+ type: "input",
962
+ path: [],
963
+ visited: /* @__PURE__ */ new Set()
964
+ });
965
+ const schemaObject = createSchemaObject(schema, state, [
966
+ ...subpath,
967
+ "schema"
968
+ ]);
969
+ const required = !isOptionalSchema(schema, state);
970
+ return {
971
+ ...rest,
972
+ ...schema && { schema: schemaObject },
973
+ ...required && { required }
974
+ };
975
+ };
976
+ var createParamOrRef = (zodSchema, components, subpath, type, name) => {
977
+ const component = components.parameters.get(zodSchema);
978
+ const paramType = zodSchema._def?.openapi?.param?.in ?? component?.in ?? type;
979
+ const paramName = zodSchema._def?.openapi?.param?.name ?? component?.name ?? name;
980
+ if (!paramType) {
981
+ throw new Error("Parameter type missing");
982
+ }
983
+ if (!paramName) {
984
+ throw new Error("Parameter name missing");
985
+ }
986
+ if (component && component.type === "complete") {
987
+ if (!("$ref" in component.paramObject) && (component.in !== type || component.name !== name)) {
988
+ throw new Error(`parameterRef "${component.ref}" is already registered`);
989
+ }
990
+ return {
991
+ $ref: createComponentParamRef(component.ref)
992
+ };
993
+ }
994
+ const baseParamOrRef = createBaseParameter(zodSchema, components, subpath);
995
+ if ("$ref" in baseParamOrRef) {
996
+ throw new Error("Unexpected Error: received a reference object");
997
+ }
998
+ const ref = zodSchema?._def?.openapi?.param?.ref ?? component?.ref;
999
+ const paramObject = {
1000
+ in: paramType,
1001
+ name: paramName,
1002
+ ...baseParamOrRef
1003
+ };
1004
+ if (ref) {
1005
+ components.parameters.set(zodSchema, {
1006
+ type: "complete",
1007
+ paramObject,
1008
+ ref,
1009
+ in: paramType,
1010
+ name: paramName
1011
+ });
1012
+ return {
1013
+ $ref: createComponentParamRef(ref)
1014
+ };
1015
+ }
1016
+ return paramObject;
1017
+ };
1018
+ var createParameters = (type, zodObject, components, subpath) => {
1019
+ if (!zodObject) {
1020
+ return [];
1021
+ }
1022
+ return Object.entries(zodObject.shape).map(
1023
+ ([key, zodSchema]) => createParamOrRef(zodSchema, components, [...subpath, key], type, key)
1024
+ );
1025
+ };
1026
+ var createRequestParams = (requestParams, components, subpath) => {
1027
+ if (!requestParams) {
1028
+ return [];
1029
+ }
1030
+ const pathParams = createParameters("path", requestParams.path, components, [
1031
+ ...subpath,
1032
+ "path"
1033
+ ]);
1034
+ const queryParams = createParameters(
1035
+ "query",
1036
+ requestParams.query,
1037
+ components,
1038
+ [...subpath, "query"]
1039
+ );
1040
+ const cookieParams = createParameters(
1041
+ "cookie",
1042
+ requestParams.cookie,
1043
+ components,
1044
+ [...subpath, "cookie"]
1045
+ );
1046
+ const headerParams = createParameters(
1047
+ "header",
1048
+ requestParams.header,
1049
+ components,
1050
+ [...subpath, "header"]
1051
+ );
1052
+ return [...pathParams, ...queryParams, ...cookieParams, ...headerParams];
1053
+ };
1054
+ var createManualParameters = (parameters, components, subpath) => parameters?.map((param, index) => {
1055
+ if (isAnyZodType(param)) {
1056
+ return createParamOrRef(param, components, [
1057
+ ...subpath,
1058
+ `param index ${index}`
1059
+ ]);
1060
+ }
1061
+ return param;
1062
+ }) ?? [];
1063
+ var createParametersObject = (parameters, requestParams, components, subpath) => {
1064
+ const manualParameters = createManualParameters(
1065
+ parameters,
1066
+ components,
1067
+ subpath
1068
+ );
1069
+ const createdParams = createRequestParams(requestParams, components, subpath);
1070
+ const combinedParameters = [
1071
+ ...manualParameters,
1072
+ ...createdParams
1073
+ ];
1074
+ return combinedParameters.length ? combinedParameters : void 0;
1075
+ };
1076
+
1077
+ // src/create/content.ts
1078
+ var createMediaTypeSchema = (schemaObject, components, type, subpath) => {
1079
+ if (!schemaObject) {
1080
+ return void 0;
1081
+ }
1082
+ if (!isAnyZodType(schemaObject)) {
1083
+ return schemaObject;
1084
+ }
1085
+ return createSchemaObject(
1086
+ schemaObject,
1087
+ newSchemaState({
1088
+ components,
1089
+ type,
1090
+ path: [],
1091
+ visited: /* @__PURE__ */ new Set()
1092
+ }),
1093
+ subpath
1094
+ );
1095
+ };
1096
+ var createMediaTypeObject = (mediaTypeObject, components, type, subpath) => {
1097
+ if (!mediaTypeObject) {
1098
+ return void 0;
1099
+ }
1100
+ return {
1101
+ ...mediaTypeObject,
1102
+ schema: createMediaTypeSchema(mediaTypeObject.schema, components, type, [
1103
+ ...subpath,
1104
+ "schema"
1105
+ ])
1106
+ };
1107
+ };
1108
+ var createContent = (contentObject, components, type, subpath) => Object.entries(contentObject).reduce(
1109
+ (acc, [mediaType, zodOpenApiMediaTypeObject]) => {
1110
+ const mediaTypeObject = createMediaTypeObject(
1111
+ zodOpenApiMediaTypeObject,
1112
+ components,
1113
+ type,
1114
+ [...subpath, mediaType]
1115
+ );
1116
+ if (mediaTypeObject) {
1117
+ acc[mediaType] = mediaTypeObject;
1118
+ }
1119
+ return acc;
1120
+ },
1121
+ {}
1122
+ );
1123
+
1124
+ // src/create/specificationExtension.ts
1125
+ var isISpecificationExtension = (key) => key.startsWith("x-");
1126
+
1127
+ // src/create/responses.ts
1128
+ var createResponseHeaders = (responseHeaders, components) => {
1129
+ if (!responseHeaders) {
1130
+ return void 0;
1131
+ }
1132
+ if (isAnyZodType(responseHeaders)) {
1133
+ return Object.entries(responseHeaders.shape).reduce((acc, [key, zodSchema]) => {
1134
+ acc[key] = createHeaderOrRef(zodSchema, components);
1135
+ return acc;
1136
+ }, {});
1137
+ }
1138
+ return responseHeaders;
1139
+ };
1140
+ var createHeaderOrRef = (schema, components) => {
1141
+ const component = components.headers.get(schema);
1142
+ if (component && component.type === "complete") {
1143
+ return {
1144
+ $ref: createComponentHeaderRef(component.ref)
1145
+ };
1146
+ }
1147
+ const baseHeader = createBaseHeader(schema, components);
1148
+ if ("$ref" in baseHeader) {
1149
+ throw new Error("Unexpected Error: received a reference object");
1150
+ }
1151
+ const ref = schema._def?.openapi?.header?.ref ?? component?.ref;
1152
+ if (ref) {
1153
+ components.headers.set(schema, {
1154
+ type: "complete",
1155
+ headerObject: baseHeader,
1156
+ ref
1157
+ });
1158
+ return {
1159
+ $ref: createComponentHeaderRef(ref)
1160
+ };
1161
+ }
1162
+ return baseHeader;
1163
+ };
1164
+ var createBaseHeader = (schema, components) => {
1165
+ const { ref, ...rest } = schema._def.openapi?.header ?? {};
1166
+ const state = newSchemaState({
1167
+ components,
1168
+ type: "output",
1169
+ path: [],
1170
+ visited: /* @__PURE__ */ new Set()
1171
+ });
1172
+ const schemaObject = createSchemaObject(schema, state, ["header"]);
1173
+ const required = !isOptionalSchema(schema, state);
1174
+ return {
1175
+ ...rest,
1176
+ ...schema && { schema: schemaObject },
1177
+ ...required && { required }
1178
+ };
1179
+ };
1180
+ var createComponentHeaderRef = (ref) => `#/components/headers/${ref}`;
1181
+ var createResponse = (responseObject, components, subpath) => {
1182
+ if ("$ref" in responseObject) {
1183
+ return responseObject;
1184
+ }
1185
+ const component = components.responses.get(responseObject);
1186
+ if (component && component.type === "complete") {
1187
+ return { $ref: createComponentResponseRef(component.ref) };
1188
+ }
1189
+ const { content, headers, ref, ...rest } = responseObject;
1190
+ const maybeHeaders = createResponseHeaders(headers, components);
1191
+ const response = {
1192
+ ...rest,
1193
+ ...maybeHeaders && { headers: maybeHeaders },
1194
+ ...content && {
1195
+ content: createContent(content, components, "output", [
1196
+ ...subpath,
1197
+ "content"
1198
+ ])
1199
+ }
1200
+ };
1201
+ const responseRef = ref ?? component?.ref;
1202
+ if (responseRef) {
1203
+ components.responses.set(responseObject, {
1204
+ responseObject: response,
1205
+ ref: responseRef,
1206
+ type: "complete"
1207
+ });
1208
+ return {
1209
+ $ref: createComponentResponseRef(responseRef)
1210
+ };
1211
+ }
1212
+ return response;
1213
+ };
1214
+ var createResponses = (responsesObject, components, subpath) => Object.entries(responsesObject).reduce(
1215
+ (acc, [statusCode, responseObject]) => {
1216
+ if (isISpecificationExtension(statusCode)) {
1217
+ acc[statusCode] = responseObject;
1218
+ return acc;
1219
+ }
1220
+ acc[statusCode] = createResponse(responseObject, components, [
1221
+ ...subpath,
1222
+ statusCode
1223
+ ]);
1224
+ return acc;
1225
+ },
1226
+ {}
1227
+ );
1228
+
1229
+ // src/create/paths.ts
1230
+ var createRequestBody = (requestBodyObject, components, subpath) => {
1231
+ if (!requestBodyObject) {
1232
+ return void 0;
1233
+ }
1234
+ const component = components.requestBodies.get(requestBodyObject);
1235
+ if (component && component.type === "complete") {
1236
+ return {
1237
+ $ref: createComponentRequestBodyRef(component.ref)
1238
+ };
1239
+ }
1240
+ const ref = requestBodyObject.ref ?? component?.ref;
1241
+ const requestBody = {
1242
+ ...requestBodyObject,
1243
+ content: createContent(requestBodyObject.content, components, "input", [
1244
+ ...subpath,
1245
+ "content"
1246
+ ])
1247
+ };
1248
+ if (ref) {
1249
+ components.requestBodies.set(requestBodyObject, {
1250
+ type: "complete",
1251
+ ref,
1252
+ requestBodyObject: requestBody
1253
+ });
1254
+ return {
1255
+ $ref: createComponentRequestBodyRef(ref)
1256
+ };
1257
+ }
1258
+ return requestBody;
1259
+ };
1260
+ var createOperation = (operationObject, components, subpath) => {
1261
+ const { parameters, requestParams, requestBody, responses, ...rest } = operationObject;
1262
+ const maybeParameters = createParametersObject(
1263
+ parameters,
1264
+ requestParams,
1265
+ components,
1266
+ [...subpath, "parameters"]
1267
+ );
1268
+ const maybeRequestBody = createRequestBody(
1269
+ operationObject.requestBody,
1270
+ components,
1271
+ [...subpath, "request body"]
1272
+ );
1273
+ const maybeResponses = createResponses(
1274
+ operationObject.responses,
1275
+ components,
1276
+ [...subpath, "responses"]
1277
+ );
1278
+ return {
1279
+ ...rest,
1280
+ ...maybeParameters && { parameters: maybeParameters },
1281
+ ...maybeRequestBody && { requestBody: maybeRequestBody },
1282
+ ...maybeResponses && { responses: maybeResponses }
1283
+ };
1284
+ };
1285
+ var createPathItem = (pathObject, components, path) => Object.entries(pathObject).reduce(
1286
+ (acc, [key, value]) => {
1287
+ if (!value) {
1288
+ return acc;
1289
+ }
1290
+ if (key === "get" || key === "put" || key === "post" || key === "delete" || key === "options" || key === "head" || key === "patch" || key === "trace") {
1291
+ acc[key] = createOperation(
1292
+ value,
1293
+ components,
1294
+ [path, key]
1295
+ );
1296
+ return acc;
1297
+ }
1298
+ acc[key] = value;
1299
+ return acc;
1300
+ },
1301
+ {}
1302
+ );
1303
+ var createPaths = (pathsObject, components) => {
1304
+ if (!pathsObject) {
1305
+ return void 0;
1306
+ }
1307
+ return Object.entries(pathsObject).reduce(
1308
+ (acc, [path, pathItemObject]) => {
1309
+ if (isISpecificationExtension(path)) {
1310
+ acc[path] = pathItemObject;
1311
+ return acc;
1312
+ }
1313
+ acc[path] = createPathItem(pathItemObject, components, path);
1314
+ return acc;
1315
+ },
1316
+ {}
1317
+ );
1318
+ };
1319
+
1320
+ // src/create/components.ts
1321
+ var getDefaultComponents = (componentsObject, openapi = "3.1.0") => {
1322
+ const defaultComponents = {
1323
+ schemas: /* @__PURE__ */ new Map(),
1324
+ parameters: /* @__PURE__ */ new Map(),
1325
+ headers: /* @__PURE__ */ new Map(),
1326
+ requestBodies: /* @__PURE__ */ new Map(),
1327
+ responses: /* @__PURE__ */ new Map(),
1328
+ openapi
1329
+ };
1330
+ if (!componentsObject) {
1331
+ return defaultComponents;
1332
+ }
1333
+ getSchemas(componentsObject.schemas, defaultComponents);
1334
+ getParameters(componentsObject.parameters, defaultComponents);
1335
+ getRequestBodies(componentsObject.requestBodies, defaultComponents);
1336
+ getHeaders(componentsObject.headers, defaultComponents);
1337
+ getResponses(componentsObject.responses, defaultComponents);
1338
+ return defaultComponents;
1339
+ };
1340
+ var getSchemas = (schemas, components) => {
1341
+ if (!schemas) {
1342
+ return;
1343
+ }
1344
+ Object.entries(schemas).forEach(([key, schema]) => {
1345
+ if (isAnyZodType(schema)) {
1346
+ if (components.schemas.has(schema)) {
1347
+ throw new Error(
1348
+ `Schema ${JSON.stringify(schema._def)} is already registered`
1349
+ );
1350
+ }
1351
+ const ref = schema._def.openapi?.ref ?? key;
1352
+ components.schemas.set(schema, {
1353
+ type: "manual",
1354
+ ref
1355
+ });
1356
+ }
1357
+ });
1358
+ };
1359
+ var getParameters = (parameters, components) => {
1360
+ if (!parameters) {
1361
+ return;
1362
+ }
1363
+ Object.entries(parameters).forEach(([key, schema]) => {
1364
+ if (isAnyZodType(schema)) {
1365
+ if (components.parameters.has(schema)) {
1366
+ throw new Error(
1367
+ `Parameter ${JSON.stringify(schema._def)} is already registered`
1368
+ );
1369
+ }
1370
+ const ref = schema._def.openapi?.param?.ref ?? key;
1371
+ const name = schema._def.openapi?.param?.name;
1372
+ const location = schema._def.openapi?.param?.in;
1373
+ if (!name || !location) {
1374
+ throw new Error("`name` or `in` missing in .openapi()");
1375
+ }
1376
+ components.parameters.set(schema, {
1377
+ type: "manual",
1378
+ ref,
1379
+ in: location,
1380
+ name
1381
+ });
1382
+ }
1383
+ });
1384
+ };
1385
+ var getHeaders = (responseHeaders, components) => {
1386
+ if (!responseHeaders) {
1387
+ return;
1388
+ }
1389
+ Object.entries(responseHeaders).forEach(([key, schema]) => {
1390
+ if (isAnyZodType(schema)) {
1391
+ if (components.parameters.has(schema)) {
1392
+ throw new Error(
1393
+ `Header ${JSON.stringify(schema._def)} is already registered`
1394
+ );
1395
+ }
1396
+ const ref = schema._def.openapi?.param?.ref ?? key;
1397
+ components.headers.set(schema, {
1398
+ type: "manual",
1399
+ ref
1400
+ });
1401
+ }
1402
+ });
1403
+ };
1404
+ var getResponses = (responses, components) => {
1405
+ if (!responses) {
1406
+ return;
1407
+ }
1408
+ Object.entries(responses).forEach(([key, responseObject]) => {
1409
+ if (components.responses.has(responseObject)) {
1410
+ throw new Error(
1411
+ `Header ${JSON.stringify(responseObject)} is already registered`
1412
+ );
1413
+ }
1414
+ const ref = responseObject?.ref ?? key;
1415
+ components.responses.set(responseObject, {
1416
+ type: "manual",
1417
+ ref
1418
+ });
1419
+ });
1420
+ };
1421
+ var getRequestBodies = (requestBodies, components) => {
1422
+ if (!requestBodies) {
1423
+ return;
1424
+ }
1425
+ Object.entries(requestBodies).forEach(([key, requestBody]) => {
1426
+ if (components.requestBodies.has(requestBody)) {
1427
+ throw new Error(
1428
+ `Header ${JSON.stringify(requestBody)} is already registered`
1429
+ );
1430
+ }
1431
+ const ref = requestBody?.ref ?? key;
1432
+ components.requestBodies.set(requestBody, {
1433
+ type: "manual",
1434
+ ref
1435
+ });
1436
+ });
1437
+ };
1438
+ var createComponentSchemaRef = (schemaRef) => `#/components/schemas/${schemaRef}`;
1439
+ var createComponentResponseRef = (responseRef) => `#/components/responses/${responseRef}`;
1440
+ var createComponentRequestBodyRef = (requestBodyRef) => `#/components/requestBodies/${requestBodyRef}`;
1441
+ var createComponents = (componentsObject, components) => {
1442
+ const combinedSchemas = createSchemaComponents(componentsObject, components);
1443
+ const combinedParameters = createParamComponents(
1444
+ componentsObject,
1445
+ components
1446
+ );
1447
+ const combinedHeaders = createHeaderComponents(componentsObject, components);
1448
+ const combinedResponses = createResponseComponents(components);
1449
+ const combinedRequestBodies = createRequestBodiesComponents(components);
1450
+ const { schemas, parameters, headers, responses, requestBodies, ...rest } = componentsObject;
1451
+ const finalComponents = {
1452
+ ...rest,
1453
+ ...combinedSchemas && { schemas: combinedSchemas },
1454
+ ...combinedParameters && { parameters: combinedParameters },
1455
+ ...combinedRequestBodies && { requestBodies: combinedRequestBodies },
1456
+ ...combinedHeaders && { headers: combinedHeaders },
1457
+ ...combinedResponses && { responses: combinedResponses }
1458
+ };
1459
+ return Object.keys(finalComponents).length ? finalComponents : void 0;
1460
+ };
1461
+ var createSchemaComponents = (componentsObject, components) => {
1462
+ Array.from(components.schemas).forEach(([schema, { type }], index) => {
1463
+ if (type === "manual") {
1464
+ const state = newSchemaState({
1465
+ components,
1466
+ type: schema._def.openapi?.refType ?? "output",
1467
+ path: [],
1468
+ visited: /* @__PURE__ */ new Set()
1469
+ });
1470
+ createSchemaObject(schema, state, [`component schema index ${index}`]);
1471
+ }
1472
+ });
1473
+ const customComponents = Object.entries(
1474
+ componentsObject.schemas ?? {}
1475
+ ).reduce(
1476
+ (acc, [key, value]) => {
1477
+ if (isAnyZodType(value)) {
1478
+ return acc;
1479
+ }
1480
+ if (acc[key]) {
1481
+ throw new Error(`Schema "${key}" is already registered`);
1482
+ }
1483
+ acc[key] = value;
1484
+ return acc;
1485
+ },
1486
+ {}
1487
+ );
1488
+ const finalComponents = Array.from(components.schemas).reduce((acc, [_zodType, component]) => {
1489
+ if (component.type === "complete") {
1490
+ if (acc[component.ref]) {
1491
+ throw new Error(`Schema "${component.ref}" is already registered`);
1492
+ }
1493
+ acc[component.ref] = component.schemaObject;
1494
+ }
1495
+ return acc;
1496
+ }, customComponents);
1497
+ return Object.keys(finalComponents).length ? finalComponents : void 0;
1498
+ };
1499
+ var createParamComponents = (componentsObject, components) => {
1500
+ Array.from(components.parameters).forEach(([schema, component], index) => {
1501
+ if (component.type === "manual") {
1502
+ createParamOrRef(
1503
+ schema,
1504
+ components,
1505
+ [`component parameter index ${index}`],
1506
+ component.in,
1507
+ component.ref
1508
+ );
1509
+ }
1510
+ });
1511
+ const customComponents = Object.entries(
1512
+ componentsObject.parameters ?? {}
1513
+ ).reduce(
1514
+ (acc, [key, value]) => {
1515
+ if (!isAnyZodType(value)) {
1516
+ if (acc[key]) {
1517
+ throw new Error(`Parameter "${key}" is already registered`);
1518
+ }
1519
+ acc[key] = value;
1520
+ }
1521
+ return acc;
1522
+ },
1523
+ {}
1524
+ );
1525
+ const finalComponents = Array.from(components.parameters).reduce((acc, [_zodType, component]) => {
1526
+ if (component.type === "complete") {
1527
+ if (acc[component.ref]) {
1528
+ throw new Error(`Parameter "${component.ref}" is already registered`);
1529
+ }
1530
+ acc[component.ref] = component.paramObject;
1531
+ }
1532
+ return acc;
1533
+ }, customComponents);
1534
+ return Object.keys(finalComponents).length ? finalComponents : void 0;
1535
+ };
1536
+ var createHeaderComponents = (componentsObject, components) => {
1537
+ Array.from(components.headers).forEach(([schema, component]) => {
1538
+ if (component.type === "manual") {
1539
+ createHeaderOrRef(schema, components);
1540
+ }
1541
+ });
1542
+ const headers = componentsObject.headers ?? {};
1543
+ const customComponents = Object.entries(headers).reduce((acc, [key, value]) => {
1544
+ if (!isAnyZodType(value)) {
1545
+ if (acc[key]) {
1546
+ throw new Error(`Header Ref "${key}" is already registered`);
1547
+ }
1548
+ acc[key] = value;
1549
+ }
1550
+ return acc;
1551
+ }, {});
1552
+ const finalComponents = Array.from(components.headers).reduce((acc, [_zodType, component]) => {
1553
+ if (component.type === "complete") {
1554
+ if (acc[component.ref]) {
1555
+ throw new Error(`Header "${component.ref}" is already registered`);
1556
+ }
1557
+ acc[component.ref] = component.headerObject;
1558
+ }
1559
+ return acc;
1560
+ }, customComponents);
1561
+ return Object.keys(finalComponents).length ? finalComponents : void 0;
1562
+ };
1563
+ var createResponseComponents = (components) => {
1564
+ Array.from(components.responses).forEach(([schema, component], index) => {
1565
+ if (component.type === "manual") {
1566
+ createResponse(schema, components, [`component response index ${index}`]);
1567
+ }
1568
+ });
1569
+ const finalComponents = Array.from(components.responses).reduce((acc, [_zodType, component]) => {
1570
+ if (component.type === "complete") {
1571
+ if (acc[component.ref]) {
1572
+ throw new Error(`Response "${component.ref}" is already registered`);
1573
+ }
1574
+ acc[component.ref] = component.responseObject;
1575
+ }
1576
+ return acc;
1577
+ }, {});
1578
+ return Object.keys(finalComponents).length ? finalComponents : void 0;
1579
+ };
1580
+ var createRequestBodiesComponents = (components) => {
1581
+ Array.from(components.requestBodies).forEach(([schema, component], index) => {
1582
+ if (component.type === "manual") {
1583
+ createRequestBody(schema, components, [
1584
+ `component request body ${index}`
1585
+ ]);
1586
+ }
1587
+ });
1588
+ const finalComponents = Array.from(components.requestBodies).reduce((acc, [_zodType, component]) => {
1589
+ if (component.type === "complete") {
1590
+ if (acc[component.ref]) {
1591
+ throw new Error(`RequestBody "${component.ref}" is already registered`);
1592
+ }
1593
+ acc[component.ref] = component.requestBodyObject;
1594
+ }
1595
+ return acc;
1596
+ }, {});
1597
+ return Object.keys(finalComponents).length ? finalComponents : void 0;
1598
+ };
1599
+
1600
+ // src/create/document.ts
1601
+ var createDocument = (zodOpenApiObject) => {
1602
+ const { paths, webhooks, components = {}, ...rest } = zodOpenApiObject;
1603
+ const defaultComponents = getDefaultComponents(
1604
+ components,
1605
+ zodOpenApiObject.openapi
1606
+ );
1607
+ const createdPaths = createPaths(paths, defaultComponents);
1608
+ const createdWebhooks = createPaths(webhooks, defaultComponents);
1609
+ const createdComponents = createComponents(components, defaultComponents);
1610
+ return {
1611
+ ...rest,
1612
+ ...createdPaths && { paths: createdPaths },
1613
+ ...createdWebhooks && { webhooks: createdWebhooks },
1614
+ ...createdComponents && { components: createdComponents }
1615
+ };
1616
+ };
1617
+
1618
+ // src/extendZod.ts
1619
+ function extendZodWithOpenApi(zod) {
1620
+ if (typeof zod.ZodType.prototype.openapi !== "undefined") {
1621
+ return;
1622
+ }
1623
+ zod.ZodType.prototype.openapi = function(openapi) {
1624
+ const result = new this.constructor({
1625
+ ...this._def,
1626
+ openapi
1627
+ });
1628
+ return result;
1629
+ };
1630
+ const zodObjectExtend = zod.ZodObject.prototype.extend;
1631
+ zod.ZodObject.prototype.extend = function(...args) {
1632
+ const extendResult = zodObjectExtend.apply(this, args);
1633
+ extendResult._def.extendMetadata = {
1634
+ extends: this
1635
+ };
1636
+ delete extendResult._def.openapi;
1637
+ return extendResult;
1638
+ };
1639
+ const zodObjectOmit = zod.ZodObject.prototype.omit;
1640
+ zod.ZodObject.prototype.omit = function(...args) {
1641
+ const omitResult = zodObjectOmit.apply(this, args);
1642
+ delete omitResult._def.extendMetadata;
1643
+ delete omitResult._def.openapi;
1644
+ return omitResult;
1645
+ };
1646
+ const zodObjectPick = zod.ZodObject.prototype.pick;
1647
+ zod.ZodObject.prototype.pick = function(...args) {
1648
+ const pickResult = zodObjectPick.apply(this, args);
1649
+ delete pickResult._def.extendMetadata;
1650
+ delete pickResult._def.openapi;
1651
+ return pickResult;
1652
+ };
1653
+ }
1654
+
1655
+ // src/openapi3-ts/dist/oas30.ts
1656
+ var oas30_exports = {};
1657
+
1658
+ // src/openapi3-ts/dist/oas31.ts
1659
+ var oas31_exports = {};
1660
+
1661
+ // src/api.ts
1662
+ var api_exports = {};
1663
+ __export(api_exports, {
1664
+ createComponents: () => createComponents,
1665
+ createMediaTypeSchema: () => createMediaTypeSchema,
1666
+ createParamOrRef: () => createParamOrRef,
1667
+ getDefaultComponents: () => getDefaultComponents
1668
+ });
1669
+ // Annotate the CommonJS export names for ESM import in node:
1670
+ 0 && (module.exports = {
1671
+ api,
1672
+ createDocument,
1673
+ extendZodWithOpenApi,
1674
+ oas30,
1675
+ oas31
1676
+ });
1677
+ //# sourceMappingURL=index.js.map