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.
- package/README.md +1 -1
- package/lib/markdown/createLogo.d.ts +2 -0
- package/lib/markdown/createLogo.js +19 -0
- package/lib/markdown/createRequestBodyDetails.d.ts +9 -2
- package/lib/markdown/createRequestBodyDetails.js +2 -2
- package/lib/markdown/createRequestSchema.d.ts +21 -0
- package/lib/markdown/createRequestSchema.js +680 -0
- package/lib/markdown/{createSchemaDetails.d.ts → createResponseSchema.d.ts} +2 -2
- package/lib/markdown/{createSchemaDetails.js → createResponseSchema.js} +289 -48
- package/lib/markdown/createStatusCodes.js +117 -4
- package/lib/markdown/index.d.ts +1 -1
- package/lib/markdown/index.js +12 -3
- package/lib/markdown/schema.js +50 -14
- package/lib/markdown/schema.test.js +18 -18
- package/lib/openapi/createExample.js +27 -14
- package/lib/openapi/openapi.d.ts +1 -1
- package/lib/openapi/openapi.js +30 -19
- package/lib/openapi/types.d.ts +8 -1
- package/lib/openapi/utils/loadAndResolveSpec.js +13 -0
- package/lib/sidebars/index.d.ts +1 -1
- package/lib/sidebars/index.js +14 -5
- package/lib/types.d.ts +1 -1
- package/package.json +8 -8
- package/src/markdown/createLogo.ts +21 -0
- package/src/markdown/createRequestBodyDetails.ts +11 -4
- package/src/markdown/createRequestSchema.ts +848 -0
- package/src/markdown/{createSchemaDetails.ts → createResponseSchema.ts} +350 -54
- package/src/markdown/createStatusCodes.ts +149 -9
- package/src/markdown/index.ts +34 -3
- package/src/markdown/schema.test.ts +18 -18
- package/src/markdown/schema.ts +60 -14
- package/src/openapi/createExample.ts +31 -14
- package/src/openapi/openapi.ts +21 -13
- package/src/openapi/types.ts +9 -1
- package/src/openapi/utils/loadAndResolveSpec.ts +13 -0
- package/src/sidebars/index.ts +17 -7
- 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
|
|
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.
|
|
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
|
-
|
|
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 (((
|
|
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
|
|
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
|
-
//
|
|
384
|
-
|
|
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
|
-
|
|
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,
|
|
403
|
-
|
|
630
|
+
(0, utils_1.create)("TabItem", {
|
|
631
|
+
label: randomFirstKey,
|
|
632
|
+
value: `${randomFirstKey}-schema`,
|
|
404
633
|
children: [
|
|
405
|
-
(0,
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
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.
|
|
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
|
|
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)("
|
|
33
|
-
children:
|
|
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
|
}),
|
package/lib/markdown/index.d.ts
CHANGED
|
@@ -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;
|
package/lib/markdown/index.js
CHANGED
|
@@ -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)({
|
|
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),
|