express-zod-api 9.2.0 → 10.0.0-beta1

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 (182) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +28 -20
  3. package/dist/esm/index.js +58 -0
  4. package/dist/esm/index.js.map +1 -0
  5. package/dist/esm/package.json +1 -0
  6. package/dist/index.d.ts +776 -21
  7. package/dist/index.js +55 -69
  8. package/dist/index.js.map +1 -1
  9. package/package.json +31 -25
  10. package/dist/api-response.d.ts +0 -16
  11. package/dist/api-response.js +0 -3
  12. package/dist/api-response.js.map +0 -1
  13. package/dist/client-helpers.d.ts +0 -23
  14. package/dist/client-helpers.js +0 -71
  15. package/dist/client-helpers.js.map +0 -1
  16. package/dist/client.d.ts +0 -15
  17. package/dist/client.js +0 -120
  18. package/dist/client.js.map +0 -1
  19. package/dist/common-helpers.d.ts +0 -46
  20. package/dist/common-helpers.js +0 -207
  21. package/dist/common-helpers.js.map +0 -1
  22. package/dist/config-type.d.ts +0 -59
  23. package/dist/config-type.js +0 -11
  24. package/dist/config-type.js.map +0 -1
  25. package/dist/date-in-schema.d.ts +0 -11
  26. package/dist/date-in-schema.js +0 -46
  27. package/dist/date-in-schema.js.map +0 -1
  28. package/dist/date-out-schema.d.ts +0 -10
  29. package/dist/date-out-schema.js +0 -31
  30. package/dist/date-out-schema.js.map +0 -1
  31. package/dist/depends-on-method.d.ts +0 -10
  32. package/dist/depends-on-method.js +0 -32
  33. package/dist/depends-on-method.js.map +0 -1
  34. package/dist/endpoint.d.ts +0 -98
  35. package/dist/endpoint.js +0 -261
  36. package/dist/endpoint.js.map +0 -1
  37. package/dist/endpoints-factory.d.ts +0 -161
  38. package/dist/endpoints-factory.js +0 -68
  39. package/dist/endpoints-factory.js.map +0 -1
  40. package/dist/errors.d.ts +0 -35
  41. package/dist/errors.js +0 -64
  42. package/dist/errors.js.map +0 -1
  43. package/dist/extend-zod.d.ts +0 -22
  44. package/dist/extend-zod.js +0 -33
  45. package/dist/extend-zod.js.map +0 -1
  46. package/dist/file-schema.d.ts +0 -23
  47. package/dist/file-schema.js +0 -55
  48. package/dist/file-schema.js.map +0 -1
  49. package/dist/io-schema.d.ts +0 -16
  50. package/dist/io-schema.js +0 -21
  51. package/dist/io-schema.js.map +0 -1
  52. package/dist/logger.d.ts +0 -3
  53. package/dist/logger.js +0 -54
  54. package/dist/logger.js.map +0 -1
  55. package/dist/logical-container.d.ts +0 -16
  56. package/dist/logical-container.js +0 -85
  57. package/dist/logical-container.js.map +0 -1
  58. package/dist/metadata.d.ts +0 -27
  59. package/dist/metadata.js +0 -58
  60. package/dist/metadata.js.map +0 -1
  61. package/dist/method.d.ts +0 -8
  62. package/dist/method.js +0 -5
  63. package/dist/method.js.map +0 -1
  64. package/dist/middleware.d.ts +0 -32
  65. package/dist/middleware.js +0 -16
  66. package/dist/middleware.js.map +0 -1
  67. package/dist/mime.d.ts +0 -2
  68. package/dist/mime.js +0 -10
  69. package/dist/mime.js.map +0 -1
  70. package/dist/mock.d.ts +0 -38
  71. package/dist/mock.js +0 -66
  72. package/dist/mock.js.map +0 -1
  73. package/dist/open-api-helpers.d.ts +0 -83
  74. package/dist/open-api-helpers.js +0 -621
  75. package/dist/open-api-helpers.js.map +0 -1
  76. package/dist/open-api.d.ts +0 -25
  77. package/dist/open-api.js +0 -98
  78. package/dist/open-api.js.map +0 -1
  79. package/dist/result-handler.d.ts +0 -151
  80. package/dist/result-handler.js +0 -71
  81. package/dist/result-handler.js.map +0 -1
  82. package/dist/routing-walker.d.ts +0 -12
  83. package/dist/routing-walker.js +0 -55
  84. package/dist/routing-walker.js.map +0 -1
  85. package/dist/routing.d.ts +0 -15
  86. package/dist/routing.js +0 -25
  87. package/dist/routing.js.map +0 -1
  88. package/dist/schema-walker.d.ts +0 -23
  89. package/dist/schema-walker.js +0 -26
  90. package/dist/schema-walker.js.map +0 -1
  91. package/dist/security.d.ts +0 -72
  92. package/dist/security.js +0 -3
  93. package/dist/security.js.map +0 -1
  94. package/dist/serve-static.d.ts +0 -9
  95. package/dist/serve-static.js +0 -17
  96. package/dist/serve-static.js.map +0 -1
  97. package/dist/server.d.ts +0 -20
  98. package/dist/server.js +0 -131
  99. package/dist/server.js.map +0 -1
  100. package/dist/startup-logo.d.ts +0 -1
  101. package/dist/startup-logo.js +0 -27
  102. package/dist/startup-logo.js.map +0 -1
  103. package/dist/upload-schema.d.ts +0 -11
  104. package/dist/upload-schema.js +0 -42
  105. package/dist/upload-schema.js.map +0 -1
  106. package/dist/zts-helpers.d.ts +0 -37
  107. package/dist/zts-helpers.js +0 -60
  108. package/dist/zts-helpers.js.map +0 -1
  109. package/dist/zts.d.ts +0 -31
  110. package/dist/zts.js +0 -147
  111. package/dist/zts.js.map +0 -1
  112. package/dist-esm/api-response.js +0 -2
  113. package/dist-esm/api-response.js.map +0 -1
  114. package/dist-esm/client-helpers.js +0 -48
  115. package/dist-esm/client-helpers.js.map +0 -1
  116. package/dist-esm/client.js +0 -113
  117. package/dist-esm/client.js.map +0 -1
  118. package/dist-esm/common-helpers.js +0 -188
  119. package/dist-esm/common-helpers.js.map +0 -1
  120. package/dist-esm/config-type.js +0 -7
  121. package/dist-esm/config-type.js.map +0 -1
  122. package/dist-esm/date-in-schema.js +0 -42
  123. package/dist-esm/date-in-schema.js.map +0 -1
  124. package/dist-esm/date-out-schema.js +0 -27
  125. package/dist-esm/date-out-schema.js.map +0 -1
  126. package/dist-esm/depends-on-method.js +0 -28
  127. package/dist-esm/depends-on-method.js.map +0 -1
  128. package/dist-esm/endpoint.js +0 -256
  129. package/dist-esm/endpoint.js.map +0 -1
  130. package/dist-esm/endpoints-factory.js +0 -64
  131. package/dist-esm/endpoints-factory.js.map +0 -1
  132. package/dist-esm/errors.js +0 -54
  133. package/dist-esm/errors.js.map +0 -1
  134. package/dist-esm/extend-zod.js +0 -16
  135. package/dist-esm/extend-zod.js.map +0 -1
  136. package/dist-esm/file-schema.js +0 -51
  137. package/dist-esm/file-schema.js.map +0 -1
  138. package/dist-esm/index.js +0 -19
  139. package/dist-esm/index.js.map +0 -1
  140. package/dist-esm/io-schema.js +0 -17
  141. package/dist-esm/io-schema.js.map +0 -1
  142. package/dist-esm/logger.js +0 -47
  143. package/dist-esm/logger.js.map +0 -1
  144. package/dist-esm/logical-container.js +0 -78
  145. package/dist-esm/logical-container.js.map +0 -1
  146. package/dist-esm/metadata.js +0 -51
  147. package/dist-esm/metadata.js.map +0 -1
  148. package/dist-esm/method.js +0 -2
  149. package/dist-esm/method.js.map +0 -1
  150. package/dist-esm/middleware.js +0 -12
  151. package/dist-esm/middleware.js.map +0 -1
  152. package/dist-esm/mime.js +0 -4
  153. package/dist-esm/mime.js.map +0 -1
  154. package/dist-esm/mock.js +0 -57
  155. package/dist-esm/mock.js.map +0 -1
  156. package/dist-esm/open-api-helpers.js +0 -575
  157. package/dist-esm/open-api-helpers.js.map +0 -1
  158. package/dist-esm/open-api.js +0 -94
  159. package/dist-esm/open-api.js.map +0 -1
  160. package/dist-esm/package.json +0 -1
  161. package/dist-esm/result-handler.js +0 -66
  162. package/dist-esm/result-handler.js.map +0 -1
  163. package/dist-esm/routing-walker.js +0 -51
  164. package/dist-esm/routing-walker.js.map +0 -1
  165. package/dist-esm/routing.js +0 -21
  166. package/dist-esm/routing.js.map +0 -1
  167. package/dist-esm/schema-walker.js +0 -22
  168. package/dist-esm/schema-walker.js.map +0 -1
  169. package/dist-esm/security.js +0 -2
  170. package/dist-esm/security.js.map +0 -1
  171. package/dist-esm/serve-static.js +0 -10
  172. package/dist-esm/serve-static.js.map +0 -1
  173. package/dist-esm/server.js +0 -98
  174. package/dist-esm/server.js.map +0 -1
  175. package/dist-esm/startup-logo.js +0 -23
  176. package/dist-esm/startup-logo.js.map +0 -1
  177. package/dist-esm/upload-schema.js +0 -38
  178. package/dist-esm/upload-schema.js.map +0 -1
  179. package/dist-esm/zts-helpers.js +0 -50
  180. package/dist-esm/zts-helpers.js.map +0 -1
  181. package/dist-esm/zts.js +0 -140
  182. package/dist-esm/zts.js.map +0 -1
@@ -1,575 +0,0 @@
1
- import { omit } from "ramda";
2
- import { z } from "zod";
3
- import { getExamples, getRoutePathParams, hasCoercion, hasTopLevelTransformingEffect, routePathParamsRegex, tryToTransform, } from "./common-helpers.js";
4
- import { isoDateRegex } from "./date-in-schema.js";
5
- import { OpenAPIError } from "./errors.js";
6
- import { andToOr, mapLogicalContainer, } from "./logical-container.js";
7
- import { copyMeta } from "./metadata.js";
8
- import { walkSchema, } from "./schema-walker.js";
9
- const shortDescriptionLimit = 50;
10
- const isoDateDocumentationUrl = "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString";
11
- const samples = {
12
- integer: 0,
13
- number: 0,
14
- string: "",
15
- boolean: false,
16
- object: {},
17
- null: null,
18
- array: [],
19
- };
20
- /* eslint-disable @typescript-eslint/no-use-before-define */
21
- export const reformatParamsInPath = (path) => path.replace(routePathParamsRegex, (param) => `{${param.slice(1)}}`);
22
- export const depictDefault = ({ schema: { _def: { innerType, defaultValue }, }, next, }) => ({
23
- ...next({ schema: innerType }),
24
- default: defaultValue(),
25
- });
26
- export const depictCatch = ({ schema: { _def: { innerType }, }, next, }) => next({ schema: innerType });
27
- export const depictAny = () => ({
28
- format: "any",
29
- });
30
- export const depictUpload = ({ isResponse }) => {
31
- if (isResponse) {
32
- throw new OpenAPIError("Please use z.upload() only for input.");
33
- }
34
- return {
35
- type: "string",
36
- format: "binary",
37
- };
38
- };
39
- export const depictFile = ({ schema: { isBinary, isBase64 }, isResponse, }) => {
40
- if (!isResponse) {
41
- throw new OpenAPIError("Please use z.file() only within ResultHandler.");
42
- }
43
- return {
44
- type: "string",
45
- format: isBinary ? "binary" : isBase64 ? "byte" : "file",
46
- };
47
- };
48
- export const depictUnion = ({ schema: { options }, next }) => ({
49
- oneOf: options.map((option) => next({ schema: option })),
50
- });
51
- export const depictDiscriminatedUnion = ({ schema: { options, discriminator }, next }) => {
52
- return {
53
- discriminator: { propertyName: discriminator },
54
- oneOf: Array.from(options.values()).map((option) => next({ schema: option })),
55
- };
56
- };
57
- export const depictIntersection = ({ schema: { _def: { left, right }, }, next, }) => ({
58
- allOf: [left, right].map((entry) => next({ schema: entry })),
59
- });
60
- export const depictOptional = ({ schema, next, }) => next({ schema: schema.unwrap() });
61
- export const depictNullable = ({ schema, next, }) => ({
62
- nullable: true,
63
- ...next({ schema: schema.unwrap() }),
64
- });
65
- export const depictEnum = ({ schema, }) => ({
66
- type: typeof Object.values(schema.enum)[0],
67
- enum: Object.values(schema.enum),
68
- });
69
- export const depictLiteral = ({ schema: { value }, }) => ({
70
- type: typeof value,
71
- enum: [value],
72
- });
73
- export const depictObject = ({ schema, isResponse, next, }) => {
74
- const required = Object.keys(schema.shape).filter((key) => {
75
- const prop = schema.shape[key];
76
- const isOptional = isResponse && hasCoercion(prop)
77
- ? prop instanceof z.ZodOptional
78
- : prop.isOptional();
79
- return !isOptional;
80
- });
81
- return {
82
- type: "object",
83
- properties: depictObjectProperties({ schema, isResponse, next }),
84
- ...(required.length ? { required } : {}),
85
- };
86
- };
87
- /**
88
- * @see https://swagger.io/docs/specification/data-models/data-types/
89
- * @todo use type:"null" for OpenAPI 3.1
90
- * */
91
- export const depictNull = () => ({
92
- type: "string",
93
- nullable: true,
94
- format: "null",
95
- });
96
- export const depictDateIn = ({ isResponse }) => {
97
- if (isResponse) {
98
- throw new OpenAPIError("Please use z.dateOut() for output.");
99
- }
100
- return {
101
- description: "YYYY-MM-DDTHH:mm:ss.sssZ",
102
- type: "string",
103
- format: "date-time",
104
- pattern: isoDateRegex.source,
105
- externalDocs: {
106
- url: isoDateDocumentationUrl,
107
- },
108
- };
109
- };
110
- export const depictDateOut = ({ isResponse }) => {
111
- if (!isResponse) {
112
- throw new OpenAPIError("Please use z.dateIn() for input.");
113
- }
114
- return {
115
- description: "YYYY-MM-DDTHH:mm:ss.sssZ",
116
- type: "string",
117
- format: "date-time",
118
- externalDocs: {
119
- url: isoDateDocumentationUrl,
120
- },
121
- };
122
- };
123
- /** @throws OpenAPIError */
124
- export const depictDate = ({ isResponse }) => {
125
- throw new OpenAPIError(`Using z.date() within ${isResponse ? "output" : "input"} schema is forbidden. Please use z.date${isResponse ? "Out" : "In"}() instead. Check out the documentation for details.`);
126
- };
127
- export const depictBoolean = () => ({
128
- type: "boolean",
129
- });
130
- export const depictBigInt = () => ({
131
- type: "integer",
132
- format: "bigint",
133
- });
134
- export const depictRecord = ({ schema: { keySchema, valueSchema }, isResponse, next, }) => {
135
- if (keySchema instanceof z.ZodEnum || keySchema instanceof z.ZodNativeEnum) {
136
- const keys = Object.values(keySchema.enum);
137
- const shape = keys.reduce((carry, key) => ({
138
- ...carry,
139
- [key]: valueSchema,
140
- }), {});
141
- return {
142
- type: "object",
143
- properties: depictObjectProperties({
144
- schema: z.object(shape),
145
- isResponse,
146
- next,
147
- }),
148
- ...(keys.length ? { required: keys } : {}),
149
- };
150
- }
151
- if (keySchema instanceof z.ZodLiteral) {
152
- return {
153
- type: "object",
154
- properties: depictObjectProperties({
155
- schema: z.object({
156
- [keySchema.value]: valueSchema,
157
- }),
158
- isResponse,
159
- next,
160
- }),
161
- required: [keySchema.value],
162
- };
163
- }
164
- if (keySchema instanceof z.ZodUnion) {
165
- const areOptionsLiteral = keySchema.options.reduce((carry, option) => carry && option instanceof z.ZodLiteral, true);
166
- if (areOptionsLiteral) {
167
- const shape = keySchema.options.reduce((carry, option) => ({
168
- ...carry,
169
- [option.value]: valueSchema,
170
- }), {});
171
- return {
172
- type: "object",
173
- properties: depictObjectProperties({
174
- schema: z.object(shape),
175
- isResponse,
176
- next,
177
- }),
178
- required: keySchema.options.map((option) => option.value),
179
- };
180
- }
181
- }
182
- return {
183
- type: "object",
184
- additionalProperties: next({ schema: valueSchema }),
185
- };
186
- };
187
- export const depictArray = ({ schema: { _def: def, element }, next, }) => ({
188
- type: "array",
189
- items: next({ schema: element }),
190
- ...(def.minLength !== null && { minItems: def.minLength.value }),
191
- ...(def.maxLength !== null && { maxItems: def.maxLength.value }),
192
- });
193
- /** @todo improve it when OpenAPI 3.1.0 will be released */
194
- export const depictTuple = ({ schema: { items }, next, }) => {
195
- const types = items.map((item) => next({ schema: item }));
196
- return {
197
- type: "array",
198
- minItems: types.length,
199
- maxItems: types.length,
200
- items: {
201
- oneOf: types,
202
- format: "tuple",
203
- ...(types.length > 0 && {
204
- description: types
205
- .map((item, index) => `${index}: ${item.type}`)
206
- .join(", "),
207
- }),
208
- },
209
- };
210
- };
211
- export const depictString = ({ schema: { isEmail, isURL, minLength, maxLength, isUUID, isCUID, isCUID2, isULID, isIP, isEmoji, isDatetime, _def: { checks }, }, }) => {
212
- const regexCheck = checks.find((check) => check.kind === "regex");
213
- const datetimeCheck = checks.find((check) => check.kind === "datetime");
214
- const regex = regexCheck
215
- ? regexCheck.regex
216
- : datetimeCheck
217
- ? datetimeCheck.offset
218
- ? new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(([+-]\\d{2}:\\d{2})|Z)$`)
219
- : new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$`)
220
- : undefined;
221
- return {
222
- type: "string",
223
- ...(isDatetime && { format: "date-time" }),
224
- ...(isEmail && { format: "email" }),
225
- ...(isURL && { format: "url" }),
226
- ...(isUUID && { format: "uuid" }),
227
- ...(isCUID && { format: "cuid" }),
228
- ...(isCUID2 && { format: "cuid2" }),
229
- ...(isULID && { format: "ulid" }),
230
- ...(isIP && { format: "ip" }),
231
- ...(isEmoji && { format: "emoji" }),
232
- ...(minLength !== null && { minLength }),
233
- ...(maxLength !== null && { maxLength }),
234
- ...(regex && { pattern: `/${regex.source}/${regex.flags}` }),
235
- };
236
- };
237
- /** @todo support exclusive min/max as numbers in case of OpenAPI v3.1.x */
238
- export const depictNumber = ({ schema }) => {
239
- const minCheck = schema._def.checks.find(({ kind }) => kind === "min");
240
- const isMinInclusive = minCheck ? minCheck.inclusive : true;
241
- const maxCheck = schema._def.checks.find(({ kind }) => kind === "max");
242
- const isMaxInclusive = maxCheck ? maxCheck.inclusive : true;
243
- return {
244
- type: schema.isInt ? "integer" : "number",
245
- format: schema.isInt ? "int64" : "double",
246
- minimum: schema.minValue === null
247
- ? schema.isInt
248
- ? Number.MIN_SAFE_INTEGER
249
- : Number.MIN_VALUE
250
- : schema.minValue,
251
- exclusiveMinimum: !isMinInclusive,
252
- maximum: schema.maxValue === null
253
- ? schema.isInt
254
- ? Number.MAX_SAFE_INTEGER
255
- : Number.MAX_VALUE
256
- : schema.maxValue,
257
- exclusiveMaximum: !isMaxInclusive,
258
- };
259
- };
260
- export const depictObjectProperties = ({ schema: { shape }, next, }) => {
261
- return Object.keys(shape).reduce((carry, key) => ({
262
- ...carry,
263
- [key]: next({ schema: shape[key] }),
264
- }), {});
265
- };
266
- const makeSample = (depicted) => {
267
- const type = (Array.isArray(depicted.type) ? depicted.type[0] : depicted.type);
268
- return samples?.[type];
269
- };
270
- export const depictEffect = ({ schema, isResponse, next, }) => {
271
- const input = next({ schema: schema.innerType() });
272
- const { effect } = schema._def;
273
- if (isResponse && effect.type === "transform") {
274
- const outputType = tryToTransform({ effect, sample: makeSample(input) });
275
- if (outputType && ["number", "string", "boolean"].includes(outputType)) {
276
- return { type: outputType };
277
- }
278
- else {
279
- return next({ schema: z.any() });
280
- }
281
- }
282
- if (!isResponse && effect.type === "preprocess") {
283
- const { type: inputType, ...rest } = input;
284
- return {
285
- ...rest,
286
- format: `${rest.format || inputType} (preprocessed)`,
287
- };
288
- }
289
- return input;
290
- };
291
- export const depictPipeline = ({ schema, isResponse, next, }) => next({ schema: schema._def[isResponse ? "out" : "in"] });
292
- export const depictBranded = ({ schema, next, }) => next({ schema: schema.unwrap() });
293
- export const depictExamples = (schema, isResponse, omitProps = []) => {
294
- const examples = getExamples(schema, isResponse);
295
- if (examples.length === 0) {
296
- return {};
297
- }
298
- return {
299
- examples: examples.reduce((carry, example, index) => ({
300
- ...carry,
301
- [`example${index + 1}`]: {
302
- value: omit(omitProps, example),
303
- },
304
- }), {}),
305
- };
306
- };
307
- export const depictParamExamples = (schema, isResponse, param) => {
308
- const examples = getExamples(schema, isResponse);
309
- if (examples.length === 0) {
310
- return {};
311
- }
312
- return {
313
- examples: examples.reduce((carry, example, index) => param in example
314
- ? {
315
- ...carry,
316
- [`example${index + 1}`]: {
317
- value: example[param],
318
- },
319
- }
320
- : carry, {}),
321
- };
322
- };
323
- export function extractObjectSchema(subject) {
324
- if (subject instanceof z.ZodObject) {
325
- return subject;
326
- }
327
- let objectSchema;
328
- if (subject instanceof z.ZodUnion ||
329
- subject instanceof z.ZodDiscriminatedUnion) {
330
- objectSchema = Array.from(subject.options.values())
331
- .map((option) => extractObjectSchema(option))
332
- .reduce((acc, option) => acc.merge(option.partial()), z.object({}));
333
- }
334
- else if (subject instanceof z.ZodEffects) {
335
- if (hasTopLevelTransformingEffect(subject)) {
336
- throw new OpenAPIError("Using transformations on the top level of input schema is not allowed.");
337
- }
338
- objectSchema = extractObjectSchema(subject._def.schema); // object refinement
339
- }
340
- else {
341
- // intersection
342
- objectSchema = extractObjectSchema(subject._def.left).merge(extractObjectSchema(subject._def.right));
343
- }
344
- return copyMeta(subject, objectSchema);
345
- }
346
- export const depictRequestParams = ({ path, method, endpoint, inputSources, }) => {
347
- const schema = endpoint.getSchema("input");
348
- const shape = extractObjectSchema(schema).shape;
349
- const pathParams = getRoutePathParams(path);
350
- const isQueryEnabled = inputSources.includes("query");
351
- const isParamsEnabled = inputSources.includes("params");
352
- const isPathParam = (name) => isParamsEnabled && pathParams.includes(name);
353
- return Object.keys(shape)
354
- .filter((name) => isQueryEnabled || isPathParam(name))
355
- .map((name) => ({
356
- name,
357
- in: isPathParam(name) ? "path" : "query",
358
- required: !shape[name].isOptional(),
359
- schema: {
360
- description: `${method.toUpperCase()} ${path} parameter`,
361
- ...walkSchema({
362
- schema: shape[name],
363
- isResponse: false,
364
- rules: depicters,
365
- onEach,
366
- onMissing,
367
- }),
368
- },
369
- ...depictParamExamples(schema, false, name),
370
- }));
371
- };
372
- export const depicters = {
373
- ZodString: depictString,
374
- ZodNumber: depictNumber,
375
- ZodBigInt: depictBigInt,
376
- ZodBoolean: depictBoolean,
377
- ZodDateIn: depictDateIn,
378
- ZodDateOut: depictDateOut,
379
- ZodNull: depictNull,
380
- ZodArray: depictArray,
381
- ZodTuple: depictTuple,
382
- ZodRecord: depictRecord,
383
- ZodObject: depictObject,
384
- ZodLiteral: depictLiteral,
385
- ZodIntersection: depictIntersection,
386
- ZodUnion: depictUnion,
387
- ZodFile: depictFile,
388
- ZodUpload: depictUpload,
389
- ZodAny: depictAny,
390
- ZodDefault: depictDefault,
391
- ZodEnum: depictEnum,
392
- ZodNativeEnum: depictEnum,
393
- ZodEffects: depictEffect,
394
- ZodOptional: depictOptional,
395
- ZodNullable: depictNullable,
396
- ZodDiscriminatedUnion: depictDiscriminatedUnion,
397
- ZodBranded: depictBranded,
398
- ZodDate: depictDate,
399
- ZodCatch: depictCatch,
400
- ZodPipeline: depictPipeline,
401
- };
402
- export const onEach = ({ schema, isResponse, }) => {
403
- const { description } = schema;
404
- const examples = getExamples(schema, isResponse);
405
- return {
406
- ...(description && { description }),
407
- ...(schema.isNullable() &&
408
- !(isResponse && hasCoercion(schema)) && { nullable: true }),
409
- ...(examples.length > 0 && { example: examples[0] }),
410
- };
411
- };
412
- export const onMissing = (schema) => {
413
- throw new OpenAPIError(`Zod type ${schema.constructor.name} is unsupported`);
414
- };
415
- export const excludeParamsFromDepiction = (depicted, pathParams) => {
416
- const properties = depicted.properties
417
- ? omit(pathParams, depicted.properties)
418
- : undefined;
419
- const example = depicted.example
420
- ? omit(pathParams, depicted.example)
421
- : undefined;
422
- const required = depicted.required
423
- ? depicted.required.filter((name) => !pathParams.includes(name))
424
- : undefined;
425
- const allOf = depicted.allOf
426
- ? depicted.allOf.map((entry) => excludeParamsFromDepiction(entry, pathParams))
427
- : undefined;
428
- const oneOf = depicted.oneOf
429
- ? depicted.oneOf.map((entry) => excludeParamsFromDepiction(entry, pathParams))
430
- : undefined;
431
- return omit(Object.entries({ properties, required, example, allOf, oneOf })
432
- .filter(([{}, value]) => value === undefined)
433
- .map(([key]) => key), {
434
- ...depicted,
435
- properties,
436
- required,
437
- example,
438
- allOf,
439
- oneOf,
440
- });
441
- };
442
- export const excludeExampleFromDepiction = (depicted) => omit(["example"], depicted);
443
- export const depictResponse = ({ method, path, description, endpoint, isPositive, }) => {
444
- const schema = isPositive
445
- ? endpoint.getSchema("positive")
446
- : endpoint.getSchema("negative");
447
- const mimeTypes = isPositive
448
- ? endpoint.getMimeTypes("positive")
449
- : endpoint.getMimeTypes("negative");
450
- const depictedSchema = excludeExampleFromDepiction(walkSchema({
451
- schema,
452
- isResponse: true,
453
- rules: depicters,
454
- onEach,
455
- onMissing,
456
- }));
457
- const examples = depictExamples(schema, true);
458
- return {
459
- description: `${method.toUpperCase()} ${path} ${description}`,
460
- content: mimeTypes.reduce((carry, mimeType) => ({
461
- ...carry,
462
- [mimeType]: {
463
- schema: depictedSchema,
464
- ...examples,
465
- },
466
- }), {}),
467
- };
468
- };
469
- const depictBasicSecurity = () => ({
470
- type: "http",
471
- scheme: "basic",
472
- });
473
- const depictBearerSecurity = ({ format: bearerFormat, }) => ({
474
- type: "http",
475
- scheme: "bearer",
476
- ...(bearerFormat && { bearerFormat }),
477
- });
478
- // @todo add description on actual input placement
479
- const depictInputSecurity = ({ name }) => ({
480
- type: "apiKey",
481
- in: "query",
482
- name,
483
- });
484
- const depictHeaderSecurity = ({ name }) => ({
485
- type: "apiKey",
486
- in: "header",
487
- name,
488
- });
489
- const depictCookieSecurity = ({ name }) => ({
490
- type: "apiKey",
491
- in: "cookie",
492
- name,
493
- });
494
- const depictOpenIdSecurity = ({ url: openIdConnectUrl, }) => ({
495
- type: "openIdConnect",
496
- openIdConnectUrl,
497
- });
498
- const depictOAuth2Security = ({ flows = {} }) => ({
499
- type: "oauth2",
500
- flows: Object.keys(flows).reduce((acc, key) => {
501
- const flow = flows[key];
502
- if (!flow) {
503
- return acc;
504
- }
505
- const { scopes = {}, ...rest } = flow;
506
- return { ...acc, [key]: { ...rest, scopes } };
507
- }, {}),
508
- });
509
- export const depictSecurity = (container) => {
510
- const methods = {
511
- basic: depictBasicSecurity,
512
- bearer: depictBearerSecurity,
513
- input: depictInputSecurity,
514
- header: depictHeaderSecurity,
515
- cookie: depictCookieSecurity,
516
- openid: depictOpenIdSecurity,
517
- oauth2: depictOAuth2Security,
518
- };
519
- return mapLogicalContainer(container, (security) => methods[security.type](security));
520
- };
521
- export const depictSecurityRefs = (container) => {
522
- if (typeof container === "object") {
523
- if ("or" in container) {
524
- return container.or.map((entry) => ("and" in entry
525
- ? entry.and
526
- : [entry]).reduce((agg, { name, scopes }) => ({
527
- ...agg,
528
- [name]: scopes,
529
- }), {}));
530
- }
531
- if ("and" in container) {
532
- return depictSecurityRefs(andToOr(container));
533
- }
534
- }
535
- return depictSecurityRefs({ or: [container] });
536
- };
537
- export const depictRequest = ({ method, path, endpoint, }) => {
538
- const pathParams = getRoutePathParams(path);
539
- const bodyDepiction = excludeExampleFromDepiction(excludeParamsFromDepiction(walkSchema({
540
- schema: endpoint.getSchema("input"),
541
- isResponse: false,
542
- rules: depicters,
543
- onEach,
544
- onMissing,
545
- }), pathParams));
546
- const bodyExamples = depictExamples(endpoint.getSchema("input"), false, pathParams);
547
- return {
548
- content: endpoint.getMimeTypes("input").reduce((carry, mimeType) => ({
549
- ...carry,
550
- [mimeType]: {
551
- schema: {
552
- description: `${method.toUpperCase()} ${path} request body`,
553
- ...bodyDepiction,
554
- },
555
- ...bodyExamples,
556
- },
557
- }), {}),
558
- };
559
- };
560
- export const depictTags = (tags) => Object.keys(tags).map((tag) => {
561
- const def = tags[tag];
562
- return {
563
- name: tag,
564
- description: typeof def === "string" ? def : def.description,
565
- ...(typeof def === "object" &&
566
- def.url && { externalDocs: { url: def.url } }),
567
- };
568
- });
569
- export const ensureShortDescription = (description) => {
570
- if (description.length <= shortDescriptionLimit) {
571
- return description;
572
- }
573
- return description.slice(0, shortDescriptionLimit - 1) + "…";
574
- };
575
- //# sourceMappingURL=open-api-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"open-api-helpers.js","sourceRoot":"","sources":["../src/open-api-helpers.ts"],"names":[],"mappings":"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"}