docusaurus-plugin-openapi-docs 1.5.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,7 @@
7
7
  * ========================================================================== */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.createResponseSchema = exports.mergeAllOf = void 0;
10
+ const createArrayBracket_1 = require("./createArrayBracket");
10
11
  const createDescription_1 = require("./createDescription");
11
12
  const createDetails_1 = require("./createDetails");
12
13
  const createDetailsSummary_1 = require("./createDetailsSummary");
@@ -47,46 +48,55 @@ exports.mergeAllOf = mergeAllOf;
47
48
  */
48
49
  function createAnyOneOf(schema) {
49
50
  const type = schema.oneOf ? "oneOf" : "anyOf";
50
- return (0, utils_1.create)("div", {
51
+ return (0, utils_1.create)("li", {
51
52
  children: [
52
- (0, utils_1.create)("div", {
53
- children: [
54
- (0, utils_1.create)("span", {
55
- className: "badge badge--info",
56
- children: type,
57
- }),
58
- (0, utils_1.create)("SchemaTabs", {
59
- children: schema[type].map((anyOneSchema, index) => {
60
- const label = anyOneSchema.title
61
- ? anyOneSchema.title
62
- : `MOD${index + 1}`;
63
- const anyOneChildren = [];
64
- if (anyOneSchema.properties !== undefined) {
65
- anyOneChildren.push(createProperties(anyOneSchema));
66
- }
67
- if (anyOneSchema.allOf !== undefined) {
68
- anyOneChildren.push(createNodes(anyOneSchema));
69
- }
70
- if (anyOneSchema.items !== undefined) {
71
- anyOneChildren.push(createItems(anyOneSchema));
72
- }
73
- if (anyOneSchema.type === "string" ||
74
- anyOneSchema.type === "number" ||
75
- anyOneSchema.type === "integer" ||
76
- anyOneSchema.type === "boolean") {
77
- anyOneChildren.push(createNodes(anyOneSchema));
78
- }
79
- if (anyOneChildren.length) {
80
- return (0, utils_1.create)("TabItem", {
81
- label: label,
82
- value: `${index}-item-properties`,
83
- children: anyOneChildren,
84
- });
85
- }
86
- return undefined;
87
- }),
88
- }),
89
- ],
53
+ (0, utils_1.create)("span", {
54
+ className: "badge badge--info",
55
+ children: type,
56
+ }),
57
+ (0, utils_1.create)("SchemaTabs", {
58
+ children: schema[type].map((anyOneSchema, index) => {
59
+ const label = anyOneSchema.title
60
+ ? anyOneSchema.title
61
+ : `MOD${index + 1}`;
62
+ const anyOneChildren = [];
63
+ if (anyOneSchema.properties !== undefined) {
64
+ anyOneChildren.push(createProperties(anyOneSchema));
65
+ }
66
+ if (anyOneSchema.allOf !== undefined) {
67
+ anyOneChildren.push(createNodes(anyOneSchema));
68
+ }
69
+ if (anyOneSchema.items !== undefined) {
70
+ anyOneChildren.push(createItems(anyOneSchema));
71
+ }
72
+ if (anyOneSchema.type === "string" ||
73
+ anyOneSchema.type === "number" ||
74
+ anyOneSchema.type === "integer" ||
75
+ anyOneSchema.type === "boolean") {
76
+ anyOneChildren.push(createNodes(anyOneSchema));
77
+ }
78
+ if (anyOneChildren.length) {
79
+ if (schema.type === "array") {
80
+ return (0, utils_1.create)("TabItem", {
81
+ label: label,
82
+ value: `${index}-item-properties`,
83
+ children: [
84
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
85
+ anyOneChildren,
86
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
87
+ ]
88
+ .filter(Boolean)
89
+ .flat(),
90
+ });
91
+ }
92
+ return (0, utils_1.create)("TabItem", {
93
+ label: label,
94
+ value: `${index}-item-properties`,
95
+ children: anyOneChildren,
96
+ });
97
+ }
98
+ return undefined;
99
+ }),
90
100
  }),
91
101
  ],
92
102
  });
@@ -189,15 +199,27 @@ function createAdditionalProperties(schema) {
189
199
  }
190
200
  // TODO: figure out how to handle array of objects
191
201
  function createItems(schema) {
192
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
202
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
193
203
  if (((_a = schema.items) === null || _a === void 0 ? void 0 : _a.properties) !== undefined) {
194
- return createProperties(schema.items);
204
+ return [
205
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
206
+ createProperties(schema.items),
207
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
208
+ ].flat();
195
209
  }
196
210
  if (((_b = schema.items) === null || _b === void 0 ? void 0 : _b.additionalProperties) !== undefined) {
197
- return createAdditionalProperties(schema.items);
211
+ return [
212
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
213
+ createAdditionalProperties(schema.items),
214
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
215
+ ].flat();
198
216
  }
199
217
  if (((_c = schema.items) === null || _c === void 0 ? void 0 : _c.oneOf) !== undefined || ((_d = schema.items) === null || _d === void 0 ? void 0 : _d.anyOf) !== undefined) {
200
- return createAnyOneOf(schema.items);
218
+ return [
219
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
220
+ createAnyOneOf(schema.items),
221
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
222
+ ].flat();
201
223
  }
202
224
  if (((_e = schema.items) === null || _e === void 0 ? void 0 : _e.allOf) !== undefined) {
203
225
  // TODO: figure out if and how we should pass merged required array
@@ -206,41 +228,54 @@ function createItems(schema) {
206
228
  if ((mergedSchemas.oneOf !== undefined ||
207
229
  mergedSchemas.anyOf !== undefined) &&
208
230
  mergedSchemas.properties) {
209
- return (0, utils_1.create)("div", {
210
- children: [
211
- createAnyOneOf(mergedSchemas),
212
- createProperties(mergedSchemas),
213
- ],
214
- });
231
+ return [
232
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
233
+ createAnyOneOf(mergedSchemas),
234
+ createProperties(mergedSchemas),
235
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
236
+ ].flat();
215
237
  }
216
238
  // Handles only anyOf/oneOf
217
239
  if (mergedSchemas.oneOf !== undefined ||
218
240
  mergedSchemas.anyOf !== undefined) {
219
- return (0, utils_1.create)("div", {
220
- children: [createAnyOneOf(mergedSchemas)],
221
- });
241
+ return [
242
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
243
+ createAnyOneOf(mergedSchemas),
244
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
245
+ ].flat();
222
246
  }
223
247
  // Handles properties
224
248
  if (mergedSchemas.properties !== undefined) {
225
- return (0, utils_1.create)("div", {
226
- children: [createProperties(mergedSchemas)],
227
- });
249
+ return [
250
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
251
+ createProperties(mergedSchemas),
252
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
253
+ ].flat();
228
254
  }
229
255
  }
230
256
  if (((_g = schema.items) === null || _g === void 0 ? void 0 : _g.type) === "string" ||
231
257
  ((_h = schema.items) === null || _h === void 0 ? void 0 : _h.type) === "number" ||
232
258
  ((_j = schema.items) === null || _j === void 0 ? void 0 : _j.type) === "integer" ||
233
- ((_k = schema.items) === null || _k === void 0 ? void 0 : _k.type) === "boolean") {
234
- return createNodes(schema.items);
259
+ ((_k = schema.items) === null || _k === void 0 ? void 0 : _k.type) === "boolean" ||
260
+ ((_l = schema.items) === null || _l === void 0 ? void 0 : _l.type) === "object") {
261
+ return [
262
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
263
+ createNodes(schema.items),
264
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
265
+ ].flat();
235
266
  }
236
267
  // TODO: clean this up or eliminate it?
237
- return Object.entries(schema.items).map(([key, val]) => createEdges({
238
- name: key,
239
- schema: val,
240
- required: Array.isArray(schema.required)
241
- ? schema.required.includes(key)
242
- : false,
243
- }));
268
+ return [
269
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
270
+ Object.entries(schema.items).map(([key, val]) => createEdges({
271
+ name: key,
272
+ schema: val,
273
+ required: Array.isArray(schema.required)
274
+ ? schema.required.includes(key)
275
+ : false,
276
+ })),
277
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
278
+ ].flat();
244
279
  }
245
280
  /**
246
281
  * For handling discriminators that do not map to a same-level property
@@ -339,7 +374,7 @@ function createItems(schema) {
339
374
  // }),
340
375
  // });
341
376
  // }
342
- function createDetailsNode(name, schemaName, schema, required) {
377
+ function createDetailsNode(name, schemaName, schema, required, nullable) {
343
378
  return (0, utils_1.create)("SchemaItem", {
344
379
  collapsible: true,
345
380
  className: "schemaItem",
@@ -353,7 +388,19 @@ function createDetailsNode(name, schemaName, schema, required) {
353
388
  style: { opacity: "0.6" },
354
389
  children: ` ${schemaName}`,
355
390
  }),
356
- (0, utils_1.guard)(schema.required && schema.required === true, () => [
391
+ (0, utils_1.guard)((schema.nullable && schema.nullable === true) ||
392
+ (nullable && nullable === true), () => [
393
+ (0, utils_1.create)("strong", {
394
+ style: {
395
+ fontSize: "var(--ifm-code-font-size)",
396
+ color: "var(--openapi-nullable)",
397
+ },
398
+ children: " nullable",
399
+ }),
400
+ ]),
401
+ (0, utils_1.guard)(Array.isArray(required)
402
+ ? required.includes(name)
403
+ : required === true, () => [
357
404
  (0, utils_1.create)("strong", {
358
405
  style: {
359
406
  fontSize: "var(--ifm-code-font-size)",
@@ -453,24 +500,24 @@ function createEdges({ name, schema, required, discriminator, }) {
453
500
  return createPropertyDiscriminator(name, "string", schema, discriminator, required);
454
501
  }
455
502
  if (schema.oneOf !== undefined || schema.anyOf !== undefined) {
456
- return createDetailsNode(name, schemaName, schema, required);
503
+ return createDetailsNode(name, schemaName, schema, required, schema.nullable);
457
504
  }
458
505
  if (schema.allOf !== undefined) {
459
506
  const { mergedSchemas, required, } = mergeAllOf(schema.allOf);
460
507
  const mergedSchemaName = (0, schema_1.getSchemaName)(mergedSchemas);
461
508
  if (mergedSchemas.oneOf !== undefined ||
462
509
  mergedSchemas.anyOf !== undefined) {
463
- return createDetailsNode(name, mergedSchemaName, mergedSchemas, required);
510
+ return createDetailsNode(name, mergedSchemaName, mergedSchemas, required, schema.nullable);
464
511
  }
465
512
  if (mergedSchemas.properties !== undefined) {
466
- return createDetailsNode(name, mergedSchemaName, mergedSchemas, required);
513
+ return createDetailsNode(name, mergedSchemaName, mergedSchemas, required, schema.nullable);
467
514
  }
468
515
  if (mergedSchemas.additionalProperties !== undefined) {
469
- return createDetailsNode(name, mergedSchemaName, mergedSchemas, required);
516
+ return createDetailsNode(name, mergedSchemaName, mergedSchemas, required, schema.nullable);
470
517
  }
471
518
  // array of objects
472
519
  if (((_a = mergedSchemas.items) === null || _a === void 0 ? void 0 : _a.properties) !== undefined) {
473
- return createDetailsNode(name, mergedSchemaName, mergedSchemas, required);
520
+ return createDetailsNode(name, mergedSchemaName, mergedSchemas, required, schema.nullable);
474
521
  }
475
522
  if (mergedSchemas.writeOnly && mergedSchemas.writeOnly === true) {
476
523
  return undefined;
@@ -479,25 +526,23 @@ function createEdges({ name, schema, required, discriminator, }) {
479
526
  collapsible: false,
480
527
  name,
481
528
  required: false,
482
- deprecated: mergedSchemas.deprecated,
483
- schemaDescription: mergedSchemas.description,
484
529
  schemaName: schemaName,
485
530
  qualifierMessage: (0, schema_1.getQualifierMessage)(schema),
486
- defaultValue: mergedSchemas.default,
531
+ schema: mergedSchemas,
487
532
  });
488
533
  }
489
534
  if (schema.properties !== undefined) {
490
- return createDetailsNode(name, schemaName, schema, required);
535
+ return createDetailsNode(name, schemaName, schema, required, schema.nullable);
491
536
  }
492
537
  if (schema.additionalProperties !== undefined) {
493
- return createDetailsNode(name, schemaName, schema, required);
538
+ return createDetailsNode(name, schemaName, schema, required, schema.nullable);
494
539
  }
495
540
  // array of objects
496
541
  if (((_b = schema.items) === null || _b === void 0 ? void 0 : _b.properties) !== undefined) {
497
- return createDetailsNode(name, schemaName, schema, required);
542
+ return createDetailsNode(name, schemaName, schema, required, schema.nullable);
498
543
  }
499
544
  if (((_c = schema.items) === null || _c === void 0 ? void 0 : _c.anyOf) !== undefined || ((_d = schema.items) === null || _d === void 0 ? void 0 : _d.oneOf) !== undefined) {
500
- return createDetailsNode(name, schemaName, schema, required);
545
+ return createDetailsNode(name, schemaName, schema, required, schema.nullable);
501
546
  }
502
547
  if (schema.writeOnly && schema.writeOnly === true) {
503
548
  return undefined;
@@ -507,40 +552,43 @@ function createEdges({ name, schema, required, discriminator, }) {
507
552
  collapsible: false,
508
553
  name,
509
554
  required: false,
510
- deprecated: schema.deprecated,
511
- schemaDescription: schema.description,
512
555
  schemaName: schemaName,
513
556
  qualifierMessage: (0, schema_1.getQualifierMessage)(schema),
514
- defaultValue: schema.default,
557
+ schema: schema,
515
558
  });
516
559
  }
517
560
  /**
518
561
  * Creates a hierarchical level of a schema tree. Nodes produce edges that can branch into sub-nodes with edges, recursively.
519
562
  */
520
563
  function createNodes(schema) {
564
+ const nodes = [];
521
565
  // if (schema.discriminator !== undefined) {
522
566
  // return createDiscriminator(schema);
523
567
  // }
524
568
  if (schema.oneOf !== undefined || schema.anyOf !== undefined) {
525
- return createAnyOneOf(schema);
569
+ nodes.push(createAnyOneOf(schema));
526
570
  }
527
571
  if (schema.allOf !== undefined) {
528
572
  const { mergedSchemas } = mergeAllOf(schema.allOf);
529
- // allOf seems to always result in properties
530
573
  if (mergedSchemas.properties !== undefined) {
531
- return createProperties(mergedSchemas);
574
+ nodes.push(createProperties(mergedSchemas));
575
+ }
576
+ if (mergedSchemas.items !== undefined) {
577
+ nodes.push(createItems(mergedSchemas));
532
578
  }
533
579
  }
534
580
  if (schema.properties !== undefined) {
535
- return createProperties(schema);
581
+ nodes.push(createProperties(schema));
536
582
  }
537
- // Could be set to false to just check if evals to true
538
- if (schema.additionalProperties) {
539
- return createAdditionalProperties(schema);
583
+ if (schema.additionalProperties !== undefined) {
584
+ nodes.push(createAdditionalProperties(schema));
540
585
  }
541
586
  // TODO: figure out how to handle array of objects
542
587
  if (schema.items !== undefined) {
543
- return createItems(schema);
588
+ nodes.push(createItems(schema));
589
+ }
590
+ if (nodes.length && nodes.length > 0) {
591
+ return nodes.filter(Boolean).flat();
544
592
  }
545
593
  // primitive
546
594
  if (schema.type !== undefined) {
@@ -566,7 +614,7 @@ function createNodes(schema) {
566
614
  }
567
615
  // Unknown node/schema type should return undefined
568
616
  // So far, haven't seen this hit in testing
569
- return undefined;
617
+ return "any";
570
618
  }
571
619
  function createResponseSchema({ title, body, ...rest }) {
572
620
  if (body === undefined ||
@@ -581,9 +629,10 @@ function createResponseSchema({ title, body, ...rest }) {
581
629
  return (0, utils_1.create)("MimeTabs", {
582
630
  schemaType: "response",
583
631
  children: mimeTypes.map((mimeType) => {
632
+ var _a;
584
633
  const responseExamples = body.content[mimeType].examples;
585
634
  const responseExample = body.content[mimeType].example;
586
- const firstBody = body.content[mimeType].schema;
635
+ const firstBody = (_a = body.content[mimeType].schema) !== null && _a !== void 0 ? _a : body.content[mimeType];
587
636
  if (firstBody === undefined &&
588
637
  responseExample === undefined &&
589
638
  responseExamples === undefined) {
@@ -616,10 +665,6 @@ function createResponseSchema({ title, body, ...rest }) {
616
665
  style: { textAlign: "left" },
617
666
  children: [
618
667
  (0, utils_1.create)("strong", { children: `${title}` }),
619
- (0, utils_1.guard)(firstBody.type === "array", (format) => (0, utils_1.create)("span", {
620
- style: { opacity: "0.6" },
621
- children: ` array`,
622
- })),
623
668
  (0, utils_1.guard)(body.required && body.required === true, () => [
624
669
  (0, utils_1.create)("strong", {
625
670
  style: {
@@ -66,7 +66,9 @@ function createResponseHeaders(responseHeaders) {
66
66
  style: { marginLeft: "1rem" },
67
67
  children: [
68
68
  Object.entries(responseHeaders).map(([headerName, headerObj]) => {
69
- const { description, schema: { type }, example, } = headerObj;
69
+ var _a, _b;
70
+ const { description, example } = headerObj;
71
+ const type = (_b = (_a = headerObj.schema) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : "any";
70
72
  return (0, utils_1.create)("li", {
71
73
  className: "schemaItem",
72
74
  children: [
@@ -110,12 +112,10 @@ function createResponseExamples(responseExamples, mimeType) {
110
112
  language = "xml";
111
113
  }
112
114
  return Object.entries(responseExamples).map(([exampleName, exampleValue]) => {
113
- const camelToSpaceName = exampleName.replace(/([A-Z])/g, " $1");
114
- let finalFormattedName = camelToSpaceName.charAt(0).toUpperCase() + camelToSpaceName.slice(1);
115
115
  if (typeof exampleValue.value === "object") {
116
116
  return (0, utils_1.create)("TabItem", {
117
- label: `${finalFormattedName}`,
118
- value: `${finalFormattedName}`,
117
+ label: `${exampleName}`,
118
+ value: `${exampleName}`,
119
119
  children: [
120
120
  (0, utils_2.guard)(exampleValue.summary, (summary) => [
121
121
  (0, utils_1.create)("p", {
@@ -130,8 +130,8 @@ function createResponseExamples(responseExamples, mimeType) {
130
130
  });
131
131
  }
132
132
  return (0, utils_1.create)("TabItem", {
133
- label: `${finalFormattedName}`,
134
- value: `${finalFormattedName}`,
133
+ label: `${exampleName}`,
134
+ value: `${exampleName}`,
135
135
  children: [
136
136
  (0, utils_2.guard)(exampleValue.summary, (summary) => [
137
137
  (0, utils_1.create)("p", {
@@ -48,7 +48,7 @@ exports.createApiPageMD = createApiPageMD;
48
48
  function createInfoPageMD({ info: { title, version, description, contact, license, termsOfService, logo, darkLogo, }, securitySchemes, downloadUrl, }) {
49
49
  return (0, utils_1.render)([
50
50
  `import ApiLogo from "@theme/ApiLogo";\n`,
51
- `import Tabs from "@theme/Tabs";\n`,
51
+ `import SchemaTabs from "@theme/SchemaTabs";\n`,
52
52
  `import TabItem from "@theme/TabItem";\n`,
53
53
  `import Export from "@theme/ApiDemoPanel/Export";\n\n`,
54
54
  (0, createVersionBadge_1.createVersionBadge)(version),
@@ -11,13 +11,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.sampleRequestFromSchema = void 0;
13
13
  const chalk_1 = __importDefault(require("chalk"));
14
+ const merge_1 = __importDefault(require("lodash/merge"));
14
15
  const createRequestSchema_1 = require("../markdown/createRequestSchema");
15
16
  const primitives = {
16
17
  string: {
17
18
  default: () => "string",
18
19
  email: () => "user@example.com",
19
20
  date: () => new Date().toISOString().substring(0, 10),
20
- "date-time": () => new Date().toISOString().substring(0, 10),
21
+ "date-time": () => new Date().toISOString(),
21
22
  uuid: () => "3fa85f64-5717-4562-b3fc-2c963f66afa6",
22
23
  hostname: () => "example.com",
23
24
  ipv4: () => "198.51.100.42",
@@ -60,15 +61,27 @@ function sampleRequestFromProp(name, prop, obj) {
60
61
  }
61
62
  const sampleRequestFromSchema = (schema = {}) => {
62
63
  try {
63
- let { type, example, allOf, properties, items, oneOf, anyOf } = schema;
64
+ // deep copy schema before processing
65
+ let schemaCopy = JSON.parse(JSON.stringify(schema));
66
+ let { type, example, allOf, properties, items, oneOf, anyOf } = schemaCopy;
64
67
  if (example !== undefined) {
65
68
  return example;
66
69
  }
67
70
  if (oneOf) {
71
+ if (properties) {
72
+ const combinedSchemas = (0, merge_1.default)(schemaCopy, oneOf[0]);
73
+ delete combinedSchemas.oneOf;
74
+ return (0, exports.sampleRequestFromSchema)(combinedSchemas);
75
+ }
68
76
  // Just go with first schema
69
77
  return (0, exports.sampleRequestFromSchema)(oneOf[0]);
70
78
  }
71
79
  if (anyOf) {
80
+ if (properties) {
81
+ const combinedSchemas = (0, merge_1.default)(schemaCopy, anyOf[0]);
82
+ delete combinedSchemas.anyOf;
83
+ return (0, exports.sampleRequestFromSchema)(combinedSchemas);
84
+ }
72
85
  // Just go with first schema
73
86
  return (0, exports.sampleRequestFromSchema)(anyOf[0]);
74
87
  }
@@ -81,6 +94,11 @@ const sampleRequestFromSchema = (schema = {}) => {
81
94
  }
82
95
  }
83
96
  }
97
+ if (properties) {
98
+ const combinedSchemas = (0, merge_1.default)(schemaCopy, mergedSchemas);
99
+ delete combinedSchemas.allOf;
100
+ return (0, exports.sampleRequestFromSchema)(combinedSchemas);
101
+ }
84
102
  return (0, exports.sampleRequestFromSchema)(mergedSchemas);
85
103
  }
86
104
  if (!type) {
@@ -133,16 +151,17 @@ const sampleRequestFromSchema = (schema = {}) => {
133
151
  }
134
152
  return [(0, exports.sampleRequestFromSchema)(items)];
135
153
  }
136
- if (schema.enum) {
137
- if (schema.default) {
138
- return schema.default;
154
+ if (schemaCopy.enum) {
155
+ if (schemaCopy.default) {
156
+ return schemaCopy.default;
139
157
  }
140
- return normalizeArray(schema.enum)[0];
158
+ return normalizeArray(schemaCopy.enum)[0];
141
159
  }
142
- if ((schema.readOnly && schema.readOnly === true) || schema.deprecated) {
160
+ if ((schema.readOnly && schema.readOnly === true) ||
161
+ schemaCopy.deprecated) {
143
162
  return undefined;
144
163
  }
145
- return primitive(schema);
164
+ return primitive(schemaCopy);
146
165
  }
147
166
  catch (err) {
148
167
  console.error(chalk_1.default.yellow("WARNING: failed to create example from schema object:", err));
@@ -11,13 +11,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.sampleResponseFromSchema = void 0;
13
13
  const chalk_1 = __importDefault(require("chalk"));
14
+ const merge_1 = __importDefault(require("lodash/merge"));
14
15
  const createResponseSchema_1 = require("../markdown/createResponseSchema");
15
16
  const primitives = {
16
17
  string: {
17
18
  default: () => "string",
18
19
  email: () => "user@example.com",
19
20
  date: () => new Date().toISOString().substring(0, 10),
20
- "date-time": () => new Date().toISOString().substring(0, 10),
21
+ "date-time": () => new Date().toISOString(),
21
22
  uuid: () => "3fa85f64-5717-4562-b3fc-2c963f66afa6",
22
23
  hostname: () => "example.com",
23
24
  ipv4: () => "198.51.100.42",
@@ -60,7 +61,9 @@ function sampleResponseFromProp(name, prop, obj) {
60
61
  }
61
62
  const sampleResponseFromSchema = (schema = {}) => {
62
63
  try {
63
- let { type, example, allOf, oneOf, anyOf, properties, items } = schema;
64
+ // deep copy schema before processing
65
+ let schemaCopy = JSON.parse(JSON.stringify(schema));
66
+ let { type, example, allOf, properties, items, oneOf, anyOf } = schemaCopy;
64
67
  if (example !== undefined) {
65
68
  return example;
66
69
  }
@@ -74,13 +77,28 @@ const sampleResponseFromSchema = (schema = {}) => {
74
77
  }
75
78
  }
76
79
  }
80
+ if (properties) {
81
+ const combinedSchemas = (0, merge_1.default)(schemaCopy, mergedSchemas);
82
+ delete combinedSchemas.allOf;
83
+ return (0, exports.sampleResponseFromSchema)(combinedSchemas);
84
+ }
77
85
  return (0, exports.sampleResponseFromSchema)(mergedSchemas);
78
86
  }
79
87
  if (oneOf) {
88
+ if (properties) {
89
+ const combinedSchemas = (0, merge_1.default)(schemaCopy, oneOf[0]);
90
+ delete combinedSchemas.oneOf;
91
+ return (0, exports.sampleResponseFromSchema)(combinedSchemas);
92
+ }
80
93
  // Just go with first schema
81
94
  return (0, exports.sampleResponseFromSchema)(oneOf[0]);
82
95
  }
83
96
  if (anyOf) {
97
+ if (properties) {
98
+ const combinedSchemas = (0, merge_1.default)(schemaCopy, anyOf[0]);
99
+ delete combinedSchemas.anyOf;
100
+ return (0, exports.sampleResponseFromSchema)(combinedSchemas);
101
+ }
84
102
  // Just go with first schema
85
103
  return (0, exports.sampleResponseFromSchema)(anyOf[0]);
86
104
  }
@@ -134,16 +152,17 @@ const sampleResponseFromSchema = (schema = {}) => {
134
152
  }
135
153
  return [(0, exports.sampleResponseFromSchema)(items)];
136
154
  }
137
- if (schema.enum) {
138
- if (schema.default) {
139
- return schema.default;
155
+ if (schemaCopy.enum) {
156
+ if (schemaCopy.default) {
157
+ return schemaCopy.default;
140
158
  }
141
- return normalizeArray(schema.enum)[0];
159
+ return normalizeArray(schemaCopy.enum)[0];
142
160
  }
143
- if ((schema.writeOnly && schema.writeOnly === true) || schema.deprecated) {
161
+ if ((schemaCopy.writeOnly && schemaCopy.writeOnly === true) ||
162
+ schemaCopy.deprecated) {
144
163
  return undefined;
145
164
  }
146
- return primitive(schema);
165
+ return primitive(schemaCopy);
147
166
  }
148
167
  catch (err) {
149
168
  console.error(chalk_1.default.yellow("WARNING: failed to create example from schema object:", err));
@@ -66,7 +66,7 @@ function createItems(openapiData, options, sidebarOptions) {
66
66
  let items = [];
67
67
  const infoIdSpaces = openapiData.info.title.replace(" ", "-").toLowerCase();
68
68
  const infoId = (0, kebabCase_1.default)(infoIdSpaces);
69
- if (openapiData.info.description) {
69
+ if (openapiData.info.description || openapiData.info.title) {
70
70
  // Only create an info page if we have a description.
71
71
  const infoDescription = (_a = openapiData.info) === null || _a === void 0 ? void 0 : _a.description;
72
72
  let splitDescription;
@@ -173,6 +173,9 @@ function createItems(openapiData, options, sidebarOptions) {
173
173
  .replace(/\s+$/, "")
174
174
  : "",
175
175
  ...((options === null || options === void 0 ? void 0 : options.proxy) && { proxy: options.proxy }),
176
+ ...((options === null || options === void 0 ? void 0 : options.hideSendButton) && {
177
+ hide_send_button: options.hideSendButton,
178
+ }),
176
179
  },
177
180
  api: {
178
181
  ...defaults,
@@ -264,6 +267,9 @@ function createItems(openapiData, options, sidebarOptions) {
264
267
  .replace(/\s+$/, "")
265
268
  : "",
266
269
  ...((options === null || options === void 0 ? void 0 : options.proxy) && { proxy: options.proxy }),
270
+ ...((options === null || options === void 0 ? void 0 : options.hideSendButton) && {
271
+ hide_send_button: options.hideSendButton,
272
+ }),
267
273
  },
268
274
  api: {
269
275
  ...defaults,
@@ -114,6 +114,19 @@ async function loadAndResolveSpec(specUrlOrObject) {
114
114
  // Force dereference ?
115
115
  // bundleOpts["dereference"] = true;
116
116
  const { bundle: { parsed }, } = await (0, openapi_core_1.bundle)(bundleOpts);
117
+ //Pre-processing before resolving JSON refs
118
+ if (parsed.components) {
119
+ for (let [component, type] of Object.entries(parsed.components)) {
120
+ if (component === "schemas") {
121
+ for (let [schemaKey, schemaValue] of Object.entries(type)) {
122
+ const title = schemaValue["title"];
123
+ if (!title) {
124
+ schemaValue.title = schemaKey;
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
117
130
  const resolved = await resolveJsonRefs(parsed);
118
131
  // Force serialization and replace circular $ref pointers
119
132
  // @ts-ignore
package/lib/options.js CHANGED
@@ -25,6 +25,7 @@ exports.OptionsSchema = utils_validation_1.Joi.object({
25
25
  outputDir: utils_validation_1.Joi.string().required(),
26
26
  template: utils_validation_1.Joi.string(),
27
27
  downloadUrl: utils_validation_1.Joi.string(),
28
+ hideSendButton: utils_validation_1.Joi.boolean(),
28
29
  sidebarOptions: sidebarOptions,
29
30
  version: utils_validation_1.Joi.string().when("versions", {
30
31
  is: utils_validation_1.Joi.exist(),