docusaurus-plugin-openapi-docs 1.1.2 → 1.1.5

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 (37) hide show
  1. package/README.md +1 -1
  2. package/lib/markdown/createLogo.d.ts +2 -0
  3. package/lib/markdown/createLogo.js +19 -0
  4. package/lib/markdown/createRequestBodyDetails.d.ts +9 -2
  5. package/lib/markdown/createRequestBodyDetails.js +2 -2
  6. package/lib/markdown/createRequestSchema.d.ts +21 -0
  7. package/lib/markdown/createRequestSchema.js +680 -0
  8. package/lib/markdown/{createSchemaDetails.d.ts → createResponseSchema.d.ts} +2 -2
  9. package/lib/markdown/{createSchemaDetails.js → createResponseSchema.js} +289 -48
  10. package/lib/markdown/createStatusCodes.js +117 -4
  11. package/lib/markdown/index.d.ts +1 -1
  12. package/lib/markdown/index.js +12 -3
  13. package/lib/markdown/schema.js +50 -14
  14. package/lib/markdown/schema.test.js +18 -18
  15. package/lib/openapi/createExample.js +27 -14
  16. package/lib/openapi/openapi.d.ts +1 -1
  17. package/lib/openapi/openapi.js +30 -19
  18. package/lib/openapi/types.d.ts +8 -1
  19. package/lib/openapi/utils/loadAndResolveSpec.js +13 -0
  20. package/lib/sidebars/index.d.ts +1 -1
  21. package/lib/sidebars/index.js +14 -5
  22. package/lib/types.d.ts +1 -1
  23. package/package.json +8 -8
  24. package/src/markdown/createLogo.ts +21 -0
  25. package/src/markdown/createRequestBodyDetails.ts +11 -4
  26. package/src/markdown/createRequestSchema.ts +848 -0
  27. package/src/markdown/{createSchemaDetails.ts → createResponseSchema.ts} +350 -54
  28. package/src/markdown/createStatusCodes.ts +149 -9
  29. package/src/markdown/index.ts +34 -3
  30. package/src/markdown/schema.test.ts +18 -18
  31. package/src/markdown/schema.ts +60 -14
  32. package/src/openapi/createExample.ts +31 -14
  33. package/src/openapi/openapi.ts +21 -13
  34. package/src/openapi/types.ts +9 -1
  35. package/src/openapi/utils/loadAndResolveSpec.ts +13 -0
  36. package/src/sidebars/index.ts +17 -7
  37. package/src/types.ts +1 -1
@@ -7,8 +7,8 @@ interface Props {
7
7
  [key: string]: MediaTypeObject;
8
8
  };
9
9
  description?: string;
10
- required?: boolean;
10
+ required?: string[] | boolean;
11
11
  };
12
12
  }
13
- export declare function createSchemaDetails({ title, body, ...rest }: Props): string | undefined;
13
+ export declare function createResponseSchema({ title, body, ...rest }: Props): string | undefined;
14
14
  export {};
@@ -6,7 +6,7 @@
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  * ========================================================================== */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.createSchemaDetails = void 0;
9
+ exports.createResponseSchema = void 0;
10
10
  const createDescription_1 = require("./createDescription");
11
11
  const createDetails_1 = require("./createDetails");
12
12
  const createDetailsSummary_1 = require("./createDetailsSummary");
@@ -86,12 +86,14 @@ function createAnyOneOf(schema) {
86
86
  });
87
87
  }
88
88
  function createProperties(schema) {
89
+ const discriminator = schema.discriminator;
89
90
  return Object.entries(schema.properties).map(([key, val]) => createEdges({
90
91
  name: key,
91
92
  schema: val,
92
93
  required: Array.isArray(schema.required)
93
94
  ? schema.required.includes(key)
94
95
  : false,
96
+ discriminator,
95
97
  }));
96
98
  }
97
99
  function createAdditionalProperties(schema) {
@@ -190,7 +192,8 @@ function createItems(schema) {
190
192
  return createAnyOneOf(schema.items);
191
193
  }
192
194
  if (((_e = schema.items) === null || _e === void 0 ? void 0 : _e.allOf) !== undefined) {
193
- const { mergedSchemas } = mergeAllOf((_f = schema.items) === null || _f === void 0 ? void 0 : _f.allOf);
195
+ // TODO: figure out if and how we should pass merged required array
196
+ const { mergedSchemas, } = mergeAllOf((_f = schema.items) === null || _f === void 0 ? void 0 : _f.allOf);
194
197
  // Handles combo anyOf/oneOf + properties
195
198
  if ((mergedSchemas.oneOf !== undefined ||
196
199
  mergedSchemas.anyOf !== undefined) &&
@@ -228,6 +231,93 @@ function createItems(schema) {
228
231
  : false,
229
232
  }));
230
233
  }
234
+ /**
235
+ * For handling discriminators that do not map to a same-level property
236
+ */
237
+ function createDiscriminator(schema) {
238
+ var _a;
239
+ const discriminator = schema.discriminator;
240
+ const propertyName = discriminator === null || discriminator === void 0 ? void 0 : discriminator.propertyName;
241
+ const propertyType = "string"; // should always be string
242
+ const mapping = discriminator === null || discriminator === void 0 ? void 0 : discriminator.mapping;
243
+ // Explicit mapping is required since we can't support implicit
244
+ if (mapping === undefined) {
245
+ return undefined;
246
+ }
247
+ // Attempt to get the property description we want to display
248
+ // TODO: how to make it predictable when handling allOf
249
+ let propertyDescription;
250
+ const firstMappingSchema = mapping[Object.keys(mapping)[0]];
251
+ if (firstMappingSchema.properties !== undefined) {
252
+ propertyDescription =
253
+ firstMappingSchema.properties[propertyName].description;
254
+ }
255
+ if (firstMappingSchema.allOf !== undefined) {
256
+ const { mergedSchemas } = mergeAllOf(firstMappingSchema.allOf);
257
+ if (mergedSchemas.properties !== undefined) {
258
+ propertyDescription =
259
+ (_a = mergedSchemas.properties[propertyName]) === null || _a === void 0 ? void 0 : _a.description;
260
+ }
261
+ }
262
+ if (propertyDescription === undefined) {
263
+ if (schema.properties !== undefined &&
264
+ schema.properties[propertyName] !== undefined) {
265
+ propertyDescription = schema.properties[propertyName].description;
266
+ }
267
+ }
268
+ return (0, utils_1.create)("div", {
269
+ className: "discriminatorItem",
270
+ children: (0, utils_1.create)("div", {
271
+ children: [
272
+ (0, utils_1.create)("strong", {
273
+ style: { paddingLeft: "1rem" },
274
+ children: propertyName,
275
+ }),
276
+ (0, utils_1.guard)(propertyType, (name) => (0, utils_1.create)("span", {
277
+ style: { opacity: "0.6" },
278
+ children: ` ${propertyType}`,
279
+ })),
280
+ (0, utils_1.guard)((0, schema_1.getQualifierMessage)(schema.discriminator), (message) => (0, utils_1.create)("div", {
281
+ style: {
282
+ paddingLeft: "1rem",
283
+ },
284
+ children: (0, createDescription_1.createDescription)(message),
285
+ })),
286
+ (0, utils_1.guard)(propertyDescription, (description) => (0, utils_1.create)("div", {
287
+ style: {
288
+ paddingLeft: "1rem",
289
+ },
290
+ children: (0, createDescription_1.createDescription)(description),
291
+ })),
292
+ (0, utils_1.create)("DiscriminatorTabs", {
293
+ children: Object.keys(mapping).map((key, index) => {
294
+ if (mapping[key].allOf !== undefined) {
295
+ const { mergedSchemas } = mergeAllOf(mapping[key].allOf);
296
+ // Cleanup duplicate property from mapping schema
297
+ delete mergedSchemas.properties[propertyName];
298
+ mapping[key] = mergedSchemas;
299
+ }
300
+ if (mapping[key].properties !== undefined) {
301
+ // Cleanup duplicate property from mapping schema
302
+ delete mapping[key].properties[propertyName];
303
+ }
304
+ const label = key;
305
+ return (0, utils_1.create)("TabItem", {
306
+ label: label,
307
+ value: `${index}-item-discriminator`,
308
+ children: [
309
+ (0, utils_1.create)("div", {
310
+ style: { marginLeft: "-4px" },
311
+ children: createNodes(mapping[key]),
312
+ }),
313
+ ],
314
+ });
315
+ }),
316
+ }),
317
+ ],
318
+ }),
319
+ });
320
+ }
231
321
  function createDetailsNode(name, schemaName, schema, required) {
232
322
  return (0, utils_1.create)("SchemaItem", {
233
323
  collapsible: true,
@@ -242,7 +332,7 @@ function createDetailsNode(name, schemaName, schema, required) {
242
332
  style: { opacity: "0.6" },
243
333
  children: ` ${schemaName}`,
244
334
  }),
245
- (0, utils_1.guard)(required, () => [
335
+ (0, utils_1.guard)(schema.required && schema.required === true, () => [
246
336
  (0, utils_1.create)("strong", {
247
337
  style: {
248
338
  fontSize: "var(--ifm-code-font-size)",
@@ -272,12 +362,76 @@ function createDetailsNode(name, schemaName, schema, required) {
272
362
  ],
273
363
  });
274
364
  }
365
+ /**
366
+ * For handling discriminators that map to a same-level property (like 'petType').
367
+ * Note: These should only be encountered while iterating through properties.
368
+ */
369
+ function createPropertyDiscriminator(name, schemaName, schema, discriminator, required) {
370
+ if (schema === undefined) {
371
+ return undefined;
372
+ }
373
+ if (discriminator.mapping === undefined) {
374
+ return undefined;
375
+ }
376
+ return (0, utils_1.create)("div", {
377
+ className: "discriminatorItem",
378
+ children: (0, utils_1.create)("div", {
379
+ children: [
380
+ (0, utils_1.create)("strong", { style: { paddingLeft: "1rem" }, children: name }),
381
+ (0, utils_1.guard)(schemaName, (name) => (0, utils_1.create)("span", {
382
+ style: { opacity: "0.6" },
383
+ children: ` ${schemaName}`,
384
+ })),
385
+ (0, utils_1.guard)(required, () => [
386
+ (0, utils_1.create)("strong", {
387
+ style: {
388
+ fontSize: "var(--ifm-code-font-size)",
389
+ color: "var(--openapi-required)",
390
+ },
391
+ children: " required",
392
+ }),
393
+ ]),
394
+ (0, utils_1.guard)((0, schema_1.getQualifierMessage)(discriminator), (message) => (0, utils_1.create)("div", {
395
+ style: {
396
+ paddingLeft: "1rem",
397
+ },
398
+ children: (0, createDescription_1.createDescription)(message),
399
+ })),
400
+ (0, utils_1.guard)(schema.description, (description) => (0, utils_1.create)("div", {
401
+ style: {
402
+ paddingLeft: "1rem",
403
+ },
404
+ children: (0, createDescription_1.createDescription)(description),
405
+ })),
406
+ (0, utils_1.create)("DiscriminatorTabs", {
407
+ children: Object.keys(discriminator === null || discriminator === void 0 ? void 0 : discriminator.mapping).map((key, index) => {
408
+ const label = key;
409
+ return (0, utils_1.create)("TabItem", {
410
+ label: label,
411
+ value: `${index}-item-discriminator`,
412
+ children: [
413
+ (0, utils_1.create)("div", {
414
+ style: { marginLeft: "-4px" },
415
+ children: createNodes(discriminator === null || discriminator === void 0 ? void 0 : discriminator.mapping[key]),
416
+ }),
417
+ ],
418
+ });
419
+ }),
420
+ }),
421
+ ],
422
+ }),
423
+ });
424
+ }
275
425
  /**
276
426
  * Creates the edges or "leaves" of a schema tree. Edges can branch into sub-nodes with createDetails().
277
427
  */
278
- function createEdges({ name, schema, required }) {
279
- var _a;
428
+ function createEdges({ name, schema, required, discriminator, }) {
429
+ var _a, _b;
280
430
  const schemaName = (0, schema_1.getSchemaName)(schema);
431
+ // if (name === "id") console.log(name, schema, required);
432
+ if (discriminator !== undefined && discriminator.propertyName === name) {
433
+ return createPropertyDiscriminator(name, "string", schema, discriminator, required);
434
+ }
281
435
  if (schema.oneOf !== undefined || schema.anyOf !== undefined) {
282
436
  return createDetailsNode(name, schemaName, schema, required);
283
437
  }
@@ -294,13 +448,21 @@ function createEdges({ name, schema, required }) {
294
448
  if (mergedSchemas.additionalProperties !== undefined) {
295
449
  return createDetailsNode(name, mergedSchemaName, mergedSchemas, required);
296
450
  }
451
+ // array of objects
452
+ if (((_a = mergedSchemas.items) === null || _a === void 0 ? void 0 : _a.properties) !== undefined) {
453
+ return createDetailsNode(name, mergedSchemaName, mergedSchemas, required);
454
+ }
455
+ if (mergedSchemas.writeOnly && mergedSchemas.writeOnly === true) {
456
+ return undefined;
457
+ }
297
458
  return (0, utils_1.create)("SchemaItem", {
298
459
  collapsible: false,
299
460
  name,
300
- required,
461
+ required: false,
301
462
  schemaDescription: mergedSchemas.description,
302
463
  schemaName: schemaName,
303
464
  qualifierMessage: (0, schema_1.getQualifierMessage)(schema),
465
+ defaultValue: mergedSchemas.default,
304
466
  });
305
467
  }
306
468
  if (schema.properties !== undefined) {
@@ -310,23 +472,30 @@ function createEdges({ name, schema, required }) {
310
472
  return createDetailsNode(name, schemaName, schema, required);
311
473
  }
312
474
  // array of objects
313
- if (((_a = schema.items) === null || _a === void 0 ? void 0 : _a.properties) !== undefined) {
475
+ if (((_b = schema.items) === null || _b === void 0 ? void 0 : _b.properties) !== undefined) {
314
476
  return createDetailsNode(name, schemaName, schema, required);
315
477
  }
478
+ if (schema.writeOnly && schema.writeOnly === true) {
479
+ return undefined;
480
+ }
316
481
  // primitives and array of non-objects
317
482
  return (0, utils_1.create)("SchemaItem", {
318
483
  collapsible: false,
319
484
  name,
320
- required,
485
+ required: false,
321
486
  schemaDescription: schema.description,
322
487
  schemaName: schemaName,
323
488
  qualifierMessage: (0, schema_1.getQualifierMessage)(schema),
489
+ defaultValue: schema.default,
324
490
  });
325
491
  }
326
492
  /**
327
493
  * Creates a hierarchical level of a schema tree. Nodes produce edges that can branch into sub-nodes with edges, recursively.
328
494
  */
329
495
  function createNodes(schema) {
496
+ if (schema.discriminator !== undefined) {
497
+ return createDiscriminator(schema);
498
+ }
330
499
  if (schema.oneOf !== undefined || schema.anyOf !== undefined) {
331
500
  return createAnyOneOf(schema);
332
501
  }
@@ -373,15 +542,78 @@ function createNodes(schema) {
373
542
  // So far, haven't seen this hit in testing
374
543
  return undefined;
375
544
  }
376
- function createSchemaDetails({ title, body, ...rest }) {
545
+ function createResponseSchema({ title, body, ...rest }) {
377
546
  if (body === undefined ||
378
547
  body.content === undefined ||
379
548
  Object.keys(body).length === 0 ||
380
549
  Object.keys(body.content).length === 0) {
381
550
  return undefined;
382
551
  }
383
- // NOTE: We just pick a random content-type.
384
- // How common is it to have multiple?
552
+ // Get all MIME types, including vendor-specific
553
+ const mimeTypes = Object.keys(body.content);
554
+ if (mimeTypes && mimeTypes.length > 1) {
555
+ return (0, utils_1.create)("MimeTabs", {
556
+ groupId: "mime-type",
557
+ children: mimeTypes.map((mimeType) => {
558
+ const firstBody = body.content[mimeType].schema;
559
+ if (firstBody === undefined) {
560
+ return undefined;
561
+ }
562
+ if (firstBody.properties !== undefined) {
563
+ if (Object.keys(firstBody.properties).length === 0) {
564
+ return undefined;
565
+ }
566
+ }
567
+ return (0, utils_1.create)("TabItem", {
568
+ label: mimeType,
569
+ value: `${mimeType}`,
570
+ children: [
571
+ (0, createDetails_1.createDetails)({
572
+ "data-collapsed": false,
573
+ open: true,
574
+ ...rest,
575
+ children: [
576
+ (0, createDetailsSummary_1.createDetailsSummary)({
577
+ style: { textAlign: "left" },
578
+ children: [
579
+ (0, utils_1.create)("strong", { children: `${title}` }),
580
+ (0, utils_1.guard)(firstBody.type === "array", (format) => (0, utils_1.create)("span", {
581
+ style: { opacity: "0.6" },
582
+ children: ` array`,
583
+ })),
584
+ (0, utils_1.guard)(body.required && body.required === true, () => [
585
+ (0, utils_1.create)("strong", {
586
+ style: {
587
+ fontSize: "var(--ifm-code-font-size)",
588
+ color: "var(--openapi-required)",
589
+ },
590
+ children: " required",
591
+ }),
592
+ ]),
593
+ ],
594
+ }),
595
+ (0, utils_1.create)("div", {
596
+ style: { textAlign: "left", marginLeft: "1rem" },
597
+ children: [
598
+ (0, utils_1.guard)(body.description, () => [
599
+ (0, utils_1.create)("div", {
600
+ style: { marginTop: "1rem", marginBottom: "1rem" },
601
+ children: (0, createDescription_1.createDescription)(body.description),
602
+ }),
603
+ ]),
604
+ ],
605
+ }),
606
+ (0, utils_1.create)("ul", {
607
+ style: { marginLeft: "1rem" },
608
+ children: createNodes(firstBody),
609
+ }),
610
+ ],
611
+ }),
612
+ ],
613
+ });
614
+ }),
615
+ });
616
+ }
385
617
  const randomFirstKey = Object.keys(body.content)[0];
386
618
  const firstBody = body.content[randomFirstKey].schema;
387
619
  if (firstBody === undefined) {
@@ -393,47 +625,56 @@ function createSchemaDetails({ title, body, ...rest }) {
393
625
  return undefined;
394
626
  }
395
627
  }
396
- // Root-level schema dropdown
397
- return (0, createDetails_1.createDetails)({
398
- "data-collapsed": false,
399
- open: true,
400
- ...rest,
628
+ return (0, utils_1.create)("MimeTabs", {
401
629
  children: [
402
- (0, createDetailsSummary_1.createDetailsSummary)({
403
- style: { textAlign: "left" },
630
+ (0, utils_1.create)("TabItem", {
631
+ label: randomFirstKey,
632
+ value: `${randomFirstKey}-schema`,
404
633
  children: [
405
- (0, utils_1.create)("strong", { children: `${title}` }),
406
- (0, utils_1.guard)(firstBody.type === "array", (format) => (0, utils_1.create)("span", {
407
- style: { opacity: "0.6" },
408
- children: ` array`,
409
- })),
410
- (0, utils_1.guard)(body.required, () => [
411
- (0, utils_1.create)("strong", {
412
- style: {
413
- fontSize: "var(--ifm-code-font-size)",
414
- color: "var(--openapi-required)",
415
- },
416
- children: " required",
417
- }),
418
- ]),
419
- ],
420
- }),
421
- (0, utils_1.create)("div", {
422
- style: { textAlign: "left", marginLeft: "1rem" },
423
- children: [
424
- (0, utils_1.guard)(body.description, () => [
425
- (0, utils_1.create)("div", {
426
- style: { marginTop: "1rem", marginBottom: "1rem" },
427
- children: (0, createDescription_1.createDescription)(body.description),
428
- }),
429
- ]),
634
+ (0, createDetails_1.createDetails)({
635
+ "data-collapsed": false,
636
+ open: true,
637
+ ...rest,
638
+ children: [
639
+ (0, createDetailsSummary_1.createDetailsSummary)({
640
+ style: { textAlign: "left" },
641
+ children: [
642
+ (0, utils_1.create)("strong", { children: `${title}` }),
643
+ (0, utils_1.guard)(firstBody.type === "array", (format) => (0, utils_1.create)("span", {
644
+ style: { opacity: "0.6" },
645
+ children: ` array`,
646
+ })),
647
+ (0, utils_1.guard)(body.required, () => [
648
+ (0, utils_1.create)("strong", {
649
+ style: {
650
+ fontSize: "var(--ifm-code-font-size)",
651
+ color: "var(--openapi-required)",
652
+ },
653
+ children: " required",
654
+ }),
655
+ ]),
656
+ ],
657
+ }),
658
+ (0, utils_1.create)("div", {
659
+ style: { textAlign: "left", marginLeft: "1rem" },
660
+ children: [
661
+ (0, utils_1.guard)(body.description, () => [
662
+ (0, utils_1.create)("div", {
663
+ style: { marginTop: "1rem", marginBottom: "1rem" },
664
+ children: (0, createDescription_1.createDescription)(body.description),
665
+ }),
666
+ ]),
667
+ ],
668
+ }),
669
+ (0, utils_1.create)("ul", {
670
+ style: { marginLeft: "1rem" },
671
+ children: createNodes(firstBody),
672
+ }),
673
+ ],
674
+ }),
430
675
  ],
431
676
  }),
432
- (0, utils_1.create)("ul", {
433
- style: { marginLeft: "1rem" },
434
- children: createNodes(firstBody),
435
- }),
436
677
  ],
437
678
  });
438
679
  }
439
- exports.createSchemaDetails = createSchemaDetails;
680
+ exports.createResponseSchema = createResponseSchema;
@@ -8,8 +8,67 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.createStatusCodes = void 0;
10
10
  const createDescription_1 = require("./createDescription");
11
- const createSchemaDetails_1 = require("./createSchemaDetails");
11
+ const createDetails_1 = require("./createDetails");
12
+ const createDetailsSummary_1 = require("./createDetailsSummary");
13
+ const createResponseSchema_1 = require("./createResponseSchema");
12
14
  const utils_1 = require("./utils");
15
+ const utils_2 = require("./utils");
16
+ function createResponseHeaders(responseHeaders) {
17
+ return (0, utils_2.guard)(responseHeaders, () => (0, utils_1.create)("ul", {
18
+ style: { marginLeft: "1rem" },
19
+ children: [
20
+ Object.entries(responseHeaders).map(([headerName, headerObj]) => {
21
+ const { description, schema: { type }, example, } = headerObj;
22
+ return (0, utils_1.create)("li", {
23
+ class: "schemaItem",
24
+ children: [
25
+ (0, createDetailsSummary_1.createDetailsSummary)({
26
+ children: [
27
+ (0, utils_1.create)("strong", { children: headerName }),
28
+ (0, utils_2.guard)(type, () => [
29
+ (0, utils_1.create)("span", {
30
+ style: { opacity: "0.6" },
31
+ children: ` ${type}`,
32
+ }),
33
+ ]),
34
+ ],
35
+ }),
36
+ (0, utils_1.create)("div", {
37
+ children: [
38
+ (0, utils_2.guard)(description, (description) => (0, utils_1.create)("div", {
39
+ style: {
40
+ marginTop: ".5rem",
41
+ marginBottom: ".5rem",
42
+ },
43
+ children: [
44
+ (0, utils_2.guard)(example, () => `Example: ${example}`),
45
+ (0, createDescription_1.createDescription)(description),
46
+ ],
47
+ })),
48
+ ],
49
+ }),
50
+ ],
51
+ });
52
+ }),
53
+ ],
54
+ }));
55
+ }
56
+ function createResponseExamples(responseExamples) {
57
+ return Object.entries(responseExamples).map(([exampleName, exampleValue]) => {
58
+ var _a;
59
+ const camelToSpaceName = exampleName.replace(/([A-Z])/g, " $1");
60
+ let finalFormattedName = camelToSpaceName.charAt(0).toUpperCase() + camelToSpaceName.slice(1);
61
+ return (0, utils_1.create)("TabItem", {
62
+ label: `${finalFormattedName}`,
63
+ value: `${finalFormattedName}`,
64
+ children: [
65
+ (0, utils_1.create)("ResponseSamples", {
66
+ responseExample: JSON.stringify((_a = exampleValue.value) !== null && _a !== void 0 ? _a : exampleValue, null, 2),
67
+ }),
68
+ ],
69
+ });
70
+ });
71
+ }
13
72
  function createStatusCodes({ responses }) {
14
73
  if (responses === undefined) {
15
74
  return undefined;
@@ -22,6 +81,12 @@ function createStatusCodes({ responses }) {
22
81
  children: [
23
82
  (0, utils_1.create)("ApiTabs", {
24
83
  children: codes.map((code) => {
84
+ const responseHeaders = responses[code].headers;
85
+ const responseContent = responses[code].content;
86
+ const responseContentKey = responseContent && Object.keys(responseContent)[0];
87
+ const responseExamples = responseContentKey &&
88
+ (responseContent[responseContentKey].examples ||
89
+ responseContent[responseContentKey].example);
25
90
  return (0, utils_1.create)("TabItem", {
26
91
  label: code,
27
92
  value: code,
@@ -29,14 +94,62 @@ function createStatusCodes({ responses }) {
29
94
  (0, utils_1.create)("div", {
30
95
  children: (0, createDescription_1.createDescription)(responses[code].description),
31
96
  }),
32
- (0, utils_1.create)("div", {
33
- children: (0, createSchemaDetails_1.createSchemaDetails)({
97
+ (0, utils_2.guard)(responseExamples, () => (0, utils_1.create)("SchemaTabs", {
98
+ children: [
99
+ (0, utils_1.create)("TabTtem", {
100
+ label: "Schema",
101
+ value: "Schema",
102
+ children: [
103
+ responseHeaders &&
104
+ (0, createDetails_1.createDetails)({
105
+ "data-collaposed": false,
106
+ open: true,
107
+ style: { textAlign: "left", marginBottom: "1rem" },
108
+ children: [
109
+ (0, createDetailsSummary_1.createDetailsSummary)({
110
+ children: [
111
+ (0, utils_1.create)("strong", {
112
+ children: "Response Headers",
113
+ }),
114
+ ],
115
+ }),
116
+ createResponseHeaders(responseHeaders),
117
+ ],
118
+ }),
119
+ (0, utils_1.create)("div", {
120
+ children: (0, createResponseSchema_1.createResponseSchema)({
121
+ title: "Schema",
122
+ body: {
123
+ content: responses[code].content,
124
+ },
125
+ }),
126
+ }),
127
+ ],
128
+ }),
129
+ createResponseExamples(responseExamples),
130
+ ],
131
+ })),
132
+ (0, utils_2.guard)(responseHeaders && !responseExamples, () => (0, createDetails_1.createDetails)({
133
+ "data-collaposed": false,
134
+ open: true,
135
+ style: { textAlign: "left" },
136
+ children: [
137
+ (0, createDetailsSummary_1.createDetailsSummary)({
138
+ children: [
139
+ (0, utils_1.create)("strong", { children: "Response Headers" }),
140
+ ],
141
+ }),
142
+ createResponseHeaders(responseHeaders),
143
+ ],
144
+ })),
145
+ (0, utils_2.guard)(!responseExamples, () => (0, utils_1.create)("div", {
146
+ children: (0, createResponseSchema_1.createResponseSchema)({
34
147
  title: "Schema",
35
148
  body: {
36
149
  content: responses[code].content,
37
150
  },
38
151
  }),
39
- }),
152
+ })),
40
153
  ],
41
154
  });
42
155
  }),
@@ -1,4 +1,4 @@
1
1
  import { ApiPageMetadata, InfoPageMetadata, TagPageMetadata } from "../types";
2
2
  export declare function createApiPageMD({ title, api: { deprecated, "x-deprecated-description": deprecatedDescription, description, parameters, requestBody, responses, }, }: ApiPageMetadata): string;
3
- export declare function createInfoPageMD({ info: { title, version, description, contact, license, termsOfService }, securitySchemes, }: InfoPageMetadata): string;
3
+ export declare function createInfoPageMD({ info: { title, version, description, contact, license, termsOfService, logo, darkLogo, }, securitySchemes, }: InfoPageMetadata): string;
4
4
  export declare function createTagPageMD({ tag: { description } }: TagPageMetadata): string;
@@ -13,6 +13,7 @@ const createContactInfo_1 = require("./createContactInfo");
13
13
  const createDeprecationNotice_1 = require("./createDeprecationNotice");
14
14
  const createDescription_1 = require("./createDescription");
15
15
  const createLicense_1 = require("./createLicense");
16
+ const createLogo_1 = require("./createLogo");
16
17
  const createParamsDetails_1 = require("./createParamsDetails");
17
18
  const createRequestBodyDetails_1 = require("./createRequestBodyDetails");
18
19
  const createStatusCodes_1 = require("./createStatusCodes");
@@ -21,10 +22,13 @@ const createVersionBadge_1 = require("./createVersionBadge");
21
22
  const utils_1 = require("./utils");
22
23
  function createApiPageMD({ title, api: { deprecated, "x-deprecated-description": deprecatedDescription, description, parameters, requestBody, responses, }, }) {
23
24
  return (0, utils_1.render)([
25
+ `import ApiTabs from "@theme/ApiTabs";\n`,
26
+ `import MimeTabs from "@theme/MimeTabs";\n`,
24
27
  `import ParamsItem from "@theme/ParamsItem";\n`,
28
+ `import ResponseSamples from "@theme/ResponseSamples";\n`,
25
29
  `import SchemaItem from "@theme/SchemaItem"\n`,
26
- `import ApiTabs from "@theme/ApiTabs";\n`,
27
30
  `import SchemaTabs from "@theme/SchemaTabs";\n`,
31
+ `import DiscriminatorTabs from "@theme/DiscriminatorTabs";\n`,
28
32
  `import TabItem from "@theme/TabItem";\n\n`,
29
33
  `## ${(0, lodash_1.escape)(title)}\n\n`,
30
34
  (0, createDeprecationNotice_1.createDeprecationNotice)({ deprecated, description: deprecatedDescription }),
@@ -33,17 +37,22 @@ function createApiPageMD({ title, api: { deprecated, "x-deprecated-description":
33
37
  (0, createParamsDetails_1.createParamsDetails)({ parameters, type: "query" }),
34
38
  (0, createParamsDetails_1.createParamsDetails)({ parameters, type: "header" }),
35
39
  (0, createParamsDetails_1.createParamsDetails)({ parameters, type: "cookie" }),
36
- (0, createRequestBodyDetails_1.createRequestBodyDetails)({ title: "Request Body", body: requestBody }),
40
+ (0, createRequestBodyDetails_1.createRequestBodyDetails)({
41
+ title: "Request Body",
42
+ body: requestBody,
43
+ }),
37
44
  (0, createStatusCodes_1.createStatusCodes)({ responses }),
38
45
  ]);
39
46
  }
40
47
  exports.createApiPageMD = createApiPageMD;
41
- function createInfoPageMD({ info: { title, version, description, contact, license, termsOfService }, securitySchemes, }) {
48
+ function createInfoPageMD({ info: { title, version, description, contact, license, termsOfService, logo, darkLogo, }, securitySchemes, }) {
42
49
  return (0, utils_1.render)([
50
+ `import ApiLogo from "@theme/ApiLogo";\n`,
43
51
  `import Tabs from "@theme/Tabs";\n`,
44
52
  `import TabItem from "@theme/TabItem";\n\n`,
45
53
  (0, createVersionBadge_1.createVersionBadge)(version),
46
54
  `# ${(0, lodash_1.escape)(title)}\n\n`,
55
+ (0, createLogo_1.createLogo)(logo, darkLogo),
47
56
  (0, createDescription_1.createDescription)(description),
48
57
  (0, createAuthentication_1.createAuthentication)(securitySchemes),
49
58
  (0, createContactInfo_1.createContactInfo)(contact),