docusaurus-theme-openapi-docs 4.1.0 → 4.2.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.
- package/lib/theme/ApiExplorer/CodeSnippets/index.js +2 -1
- package/lib/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +50 -0
- package/lib/theme/ApiItem/Layout/index.js +6 -2
- package/lib/theme/ApiItem/index.js +15 -4
- package/lib/theme/ApiTabs/_ApiTabs.scss +0 -1
- package/lib/theme/ArrayBrackets/index.d.ts +3 -0
- package/lib/theme/ArrayBrackets/index.js +50 -0
- package/lib/theme/ParamsDetails/index.d.ts +6 -0
- package/lib/theme/ParamsDetails/index.js +134 -0
- package/lib/theme/ParamsItem/index.d.ts +1 -0
- package/lib/theme/ParamsItem/index.js +10 -6
- package/lib/theme/RequestSchema/index.d.ts +15 -0
- package/lib/theme/RequestSchema/index.js +235 -0
- package/lib/theme/ResponseExamples/index.d.ts +48 -0
- package/lib/theme/ResponseExamples/index.js +290 -0
- package/lib/theme/ResponseSchema/index.d.ts +15 -0
- package/lib/theme/ResponseSchema/index.js +206 -0
- package/lib/theme/Schema/index.d.ts +8 -0
- package/lib/theme/Schema/index.js +879 -0
- package/lib/theme/SchemaItem/index.d.ts +8 -8
- package/lib/theme/SchemaItem/index.js +9 -5
- package/lib/theme/SkeletonLoader/index.d.ts +6 -0
- package/lib/theme/SkeletonLoader/index.js +20 -0
- package/lib/theme/StatusCodes/index.d.ts +9 -0
- package/lib/theme/StatusCodes/index.js +78 -0
- package/lib/theme/styles.scss +56 -9
- package/package.json +6 -5
- package/src/theme/ApiExplorer/CodeSnippets/index.tsx +2 -1
- package/src/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +50 -0
- package/src/theme/ApiItem/Layout/index.tsx +5 -2
- package/src/theme/ApiItem/index.tsx +14 -2
- package/src/theme/ApiTabs/_ApiTabs.scss +0 -1
- package/src/theme/ArrayBrackets/index.tsx +37 -0
- package/src/theme/ParamsDetails/index.tsx +88 -0
- package/src/theme/ParamsItem/index.tsx +10 -7
- package/src/theme/RequestSchema/index.tsx +164 -0
- package/src/theme/ResponseExamples/index.tsx +290 -0
- package/src/theme/ResponseSchema/index.tsx +151 -0
- package/src/theme/Schema/index.tsx +928 -0
- package/src/theme/SchemaItem/index.tsx +15 -13
- package/src/theme/SkeletonLoader/index.tsx +18 -0
- package/src/theme/StatusCodes/index.tsx +72 -0
- package/src/theme/styles.scss +56 -9
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export declare function json2xml(o: Record<string, any>, tab: string): string;
|
|
3
|
+
interface ParameterProps {
|
|
4
|
+
in: string;
|
|
5
|
+
name: string;
|
|
6
|
+
schema?: {
|
|
7
|
+
type?: string;
|
|
8
|
+
items?: Record<string, any>;
|
|
9
|
+
};
|
|
10
|
+
enumDescriptions?: [string, string][];
|
|
11
|
+
}
|
|
12
|
+
interface ResponseHeaderProps {
|
|
13
|
+
description?: string;
|
|
14
|
+
example?: string;
|
|
15
|
+
schema?: {
|
|
16
|
+
type?: string;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
interface ResponseExampleProps {
|
|
20
|
+
value: any;
|
|
21
|
+
summary?: string;
|
|
22
|
+
}
|
|
23
|
+
interface Props {
|
|
24
|
+
parameters?: ParameterProps[];
|
|
25
|
+
type: string;
|
|
26
|
+
responseHeaders?: Record<string, ResponseHeaderProps>;
|
|
27
|
+
responseExamples?: Record<string, ResponseExampleProps>;
|
|
28
|
+
responseExample?: any;
|
|
29
|
+
schema?: any;
|
|
30
|
+
mimeType: string;
|
|
31
|
+
}
|
|
32
|
+
export declare const ParamsDetails: React.FC<Props>;
|
|
33
|
+
export declare const ResponseHeaders: React.FC<{
|
|
34
|
+
responseHeaders?: Record<string, ResponseHeaderProps>;
|
|
35
|
+
}>;
|
|
36
|
+
export declare const ResponseExamples: React.FC<{
|
|
37
|
+
responseExamples: any;
|
|
38
|
+
mimeType: string;
|
|
39
|
+
}>;
|
|
40
|
+
export declare const ResponseExample: React.FC<{
|
|
41
|
+
responseExample: any;
|
|
42
|
+
mimeType: string;
|
|
43
|
+
}>;
|
|
44
|
+
export declare const ExampleFromSchema: React.FC<{
|
|
45
|
+
schema: any;
|
|
46
|
+
mimeType: string;
|
|
47
|
+
}>;
|
|
48
|
+
export {};
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* ============================================================================
|
|
3
|
+
* Copyright (c) Palo Alto Networks
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
* ========================================================================== */
|
|
8
|
+
var __importDefault =
|
|
9
|
+
(this && this.__importDefault) ||
|
|
10
|
+
function (mod) {
|
|
11
|
+
return mod && mod.__esModule ? mod : { default: mod };
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ExampleFromSchema =
|
|
15
|
+
exports.ResponseExample =
|
|
16
|
+
exports.ResponseExamples =
|
|
17
|
+
exports.ResponseHeaders =
|
|
18
|
+
exports.ParamsDetails =
|
|
19
|
+
exports.json2xml =
|
|
20
|
+
void 0;
|
|
21
|
+
const react_1 = __importDefault(require("react"));
|
|
22
|
+
const ParamsItem_1 = __importDefault(require("@theme/ParamsItem"));
|
|
23
|
+
const ResponseSamples_1 = __importDefault(require("@theme/ResponseSamples"));
|
|
24
|
+
const TabItem_1 = __importDefault(require("@theme/TabItem"));
|
|
25
|
+
const createDescription_1 = require("docusaurus-plugin-openapi-docs/lib/markdown/createDescription");
|
|
26
|
+
const createResponseExample_1 = require("docusaurus-plugin-openapi-docs/lib/openapi/createResponseExample");
|
|
27
|
+
const xml_formatter_1 = __importDefault(require("xml-formatter"));
|
|
28
|
+
// Utility function
|
|
29
|
+
function json2xml(o, tab) {
|
|
30
|
+
const toXml = (v, name, ind) => {
|
|
31
|
+
let xml = "";
|
|
32
|
+
if (v instanceof Array) {
|
|
33
|
+
for (let i = 0, n = v.length; i < n; i++) {
|
|
34
|
+
xml += ind + toXml(v[i], name, ind + "\t") + "\n";
|
|
35
|
+
}
|
|
36
|
+
} else if (typeof v === "object") {
|
|
37
|
+
let hasChild = false;
|
|
38
|
+
xml += ind + "<" + name;
|
|
39
|
+
for (const m in v) {
|
|
40
|
+
if (m.charAt(0) === "@") {
|
|
41
|
+
xml += " " + m.substr(1) + '="' + v[m].toString() + '"';
|
|
42
|
+
} else {
|
|
43
|
+
hasChild = true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
xml += hasChild ? ">" : "/>";
|
|
47
|
+
if (hasChild) {
|
|
48
|
+
for (const m2 in v) {
|
|
49
|
+
if (m2 === "#text") xml += v[m2];
|
|
50
|
+
else if (m2 === "#cdata") xml += "<![CDATA[" + v[m2] + "]]>";
|
|
51
|
+
else if (m2.charAt(0) !== "@") xml += toXml(v[m2], m2, ind + "\t");
|
|
52
|
+
}
|
|
53
|
+
xml +=
|
|
54
|
+
(xml.charAt(xml.length - 1) === "\n" ? ind : "") + "</" + name + ">";
|
|
55
|
+
}
|
|
56
|
+
} else {
|
|
57
|
+
xml += ind + "<" + name + ">" + v.toString() + "</" + name + ">";
|
|
58
|
+
}
|
|
59
|
+
return xml;
|
|
60
|
+
};
|
|
61
|
+
let xml = "";
|
|
62
|
+
for (const m3 in o) xml += toXml(o[m3], m3, "");
|
|
63
|
+
return tab ? xml.replace(/\t/g, tab) : xml.replace(/\t|\n/g, "");
|
|
64
|
+
}
|
|
65
|
+
exports.json2xml = json2xml;
|
|
66
|
+
// React components
|
|
67
|
+
const ParamsDetails = ({ parameters, type }) => {
|
|
68
|
+
const params = parameters?.filter((param) => param?.in === type);
|
|
69
|
+
if (!params || params.length === 0) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
return react_1.default.createElement(
|
|
73
|
+
"details",
|
|
74
|
+
{
|
|
75
|
+
className: "openapi-markdown__details",
|
|
76
|
+
"data-collapsed": false,
|
|
77
|
+
open: true,
|
|
78
|
+
style: { marginBottom: "1rem" },
|
|
79
|
+
},
|
|
80
|
+
react_1.default.createElement(
|
|
81
|
+
"summary",
|
|
82
|
+
null,
|
|
83
|
+
react_1.default.createElement(
|
|
84
|
+
"h3",
|
|
85
|
+
{ className: "openapi-markdown__details-summary-header-params" },
|
|
86
|
+
`${type.charAt(0).toUpperCase() + type.slice(1)} Parameters`
|
|
87
|
+
)
|
|
88
|
+
),
|
|
89
|
+
react_1.default.createElement(
|
|
90
|
+
"div",
|
|
91
|
+
null,
|
|
92
|
+
react_1.default.createElement(
|
|
93
|
+
"ul",
|
|
94
|
+
null,
|
|
95
|
+
params.map((param, index) =>
|
|
96
|
+
react_1.default.createElement(ParamsItem_1.default, {
|
|
97
|
+
key: index,
|
|
98
|
+
className: "paramsItem",
|
|
99
|
+
// @ts-ignore
|
|
100
|
+
param: {
|
|
101
|
+
...param,
|
|
102
|
+
enumDescriptions: Object.entries(
|
|
103
|
+
param?.schema?.items?.["x-enumDescriptions"] ?? {}
|
|
104
|
+
),
|
|
105
|
+
},
|
|
106
|
+
})
|
|
107
|
+
)
|
|
108
|
+
)
|
|
109
|
+
)
|
|
110
|
+
);
|
|
111
|
+
};
|
|
112
|
+
exports.ParamsDetails = ParamsDetails;
|
|
113
|
+
const ResponseHeaders = ({ responseHeaders }) => {
|
|
114
|
+
if (!responseHeaders) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return react_1.default.createElement(
|
|
118
|
+
"ul",
|
|
119
|
+
{ style: { marginLeft: "1rem" } },
|
|
120
|
+
Object.entries(responseHeaders).map(([headerName, headerObj]) => {
|
|
121
|
+
const { description, example, schema } = headerObj;
|
|
122
|
+
const type = schema?.type ?? "any";
|
|
123
|
+
return react_1.default.createElement(
|
|
124
|
+
"li",
|
|
125
|
+
{ className: "schemaItem", key: headerName },
|
|
126
|
+
react_1.default.createElement(
|
|
127
|
+
"details",
|
|
128
|
+
null,
|
|
129
|
+
react_1.default.createElement(
|
|
130
|
+
"summary",
|
|
131
|
+
null,
|
|
132
|
+
react_1.default.createElement("strong", null, headerName),
|
|
133
|
+
type &&
|
|
134
|
+
react_1.default.createElement(
|
|
135
|
+
"span",
|
|
136
|
+
{ style: { opacity: "0.6" } },
|
|
137
|
+
" ",
|
|
138
|
+
type
|
|
139
|
+
)
|
|
140
|
+
),
|
|
141
|
+
react_1.default.createElement(
|
|
142
|
+
"div",
|
|
143
|
+
null,
|
|
144
|
+
description &&
|
|
145
|
+
react_1.default.createElement(
|
|
146
|
+
"div",
|
|
147
|
+
{ style: { marginTop: ".5rem", marginBottom: ".5rem" } },
|
|
148
|
+
example && `Example: ${example}`,
|
|
149
|
+
(0, createDescription_1.createDescription)(description)
|
|
150
|
+
)
|
|
151
|
+
)
|
|
152
|
+
)
|
|
153
|
+
);
|
|
154
|
+
})
|
|
155
|
+
);
|
|
156
|
+
};
|
|
157
|
+
exports.ResponseHeaders = ResponseHeaders;
|
|
158
|
+
const ResponseExamples = ({ responseExamples, mimeType }) => {
|
|
159
|
+
let language = "shell";
|
|
160
|
+
if (mimeType.endsWith("json")) language = "json";
|
|
161
|
+
if (mimeType.endsWith("xml")) language = "xml";
|
|
162
|
+
// Map response examples to an array of TabItem elements
|
|
163
|
+
const examplesArray = Object.entries(responseExamples).map(
|
|
164
|
+
([exampleName, exampleValue]) => {
|
|
165
|
+
const isObject = typeof exampleValue.value === "object";
|
|
166
|
+
const responseExample = isObject
|
|
167
|
+
? JSON.stringify(exampleValue.value, null, 2)
|
|
168
|
+
: exampleValue.value;
|
|
169
|
+
return (
|
|
170
|
+
// @ts-ignore
|
|
171
|
+
react_1.default.createElement(
|
|
172
|
+
TabItem_1.default,
|
|
173
|
+
{ label: exampleName, value: exampleName, key: exampleName },
|
|
174
|
+
exampleValue.summary &&
|
|
175
|
+
react_1.default.createElement(
|
|
176
|
+
"div",
|
|
177
|
+
{ className: "openapi-example__summary" },
|
|
178
|
+
exampleValue.summary
|
|
179
|
+
),
|
|
180
|
+
react_1.default.createElement(ResponseSamples_1.default, {
|
|
181
|
+
responseExample: responseExample,
|
|
182
|
+
language: language,
|
|
183
|
+
})
|
|
184
|
+
)
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
);
|
|
188
|
+
return examplesArray;
|
|
189
|
+
};
|
|
190
|
+
exports.ResponseExamples = ResponseExamples;
|
|
191
|
+
const ResponseExample = ({ responseExample, mimeType }) => {
|
|
192
|
+
let language = "shell";
|
|
193
|
+
if (mimeType.endsWith("json")) {
|
|
194
|
+
language = "json";
|
|
195
|
+
}
|
|
196
|
+
if (mimeType.endsWith("xml")) {
|
|
197
|
+
language = "xml";
|
|
198
|
+
}
|
|
199
|
+
const isObject = typeof responseExample === "object";
|
|
200
|
+
const exampleContent = isObject
|
|
201
|
+
? JSON.stringify(responseExample, null, 2)
|
|
202
|
+
: responseExample;
|
|
203
|
+
return (
|
|
204
|
+
// @ts-ignore
|
|
205
|
+
react_1.default.createElement(
|
|
206
|
+
TabItem_1.default,
|
|
207
|
+
{ label: "Example", value: "Example" },
|
|
208
|
+
responseExample.summary &&
|
|
209
|
+
react_1.default.createElement(
|
|
210
|
+
"div",
|
|
211
|
+
{ className: "openapi-example__summary" },
|
|
212
|
+
responseExample.summary
|
|
213
|
+
),
|
|
214
|
+
react_1.default.createElement(ResponseSamples_1.default, {
|
|
215
|
+
responseExample: exampleContent,
|
|
216
|
+
language: language,
|
|
217
|
+
})
|
|
218
|
+
)
|
|
219
|
+
);
|
|
220
|
+
};
|
|
221
|
+
exports.ResponseExample = ResponseExample;
|
|
222
|
+
const ExampleFromSchema = ({ schema, mimeType }) => {
|
|
223
|
+
const responseExample = (0, createResponseExample_1.sampleResponseFromSchema)(
|
|
224
|
+
schema
|
|
225
|
+
);
|
|
226
|
+
if (mimeType.endsWith("xml")) {
|
|
227
|
+
let responseExampleObject;
|
|
228
|
+
try {
|
|
229
|
+
responseExampleObject = JSON.parse(JSON.stringify(responseExample));
|
|
230
|
+
} catch {
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
if (typeof responseExampleObject === "object") {
|
|
234
|
+
let xmlExample;
|
|
235
|
+
try {
|
|
236
|
+
xmlExample = (0, xml_formatter_1.default)(
|
|
237
|
+
json2xml(responseExampleObject, ""),
|
|
238
|
+
{
|
|
239
|
+
indentation: " ",
|
|
240
|
+
lineSeparator: "\n",
|
|
241
|
+
collapseContent: true,
|
|
242
|
+
}
|
|
243
|
+
);
|
|
244
|
+
} catch {
|
|
245
|
+
const xmlExampleWithRoot = { root: responseExampleObject };
|
|
246
|
+
try {
|
|
247
|
+
xmlExample = (0, xml_formatter_1.default)(
|
|
248
|
+
json2xml(xmlExampleWithRoot, ""),
|
|
249
|
+
{
|
|
250
|
+
indentation: " ",
|
|
251
|
+
lineSeparator: "\n",
|
|
252
|
+
collapseContent: true,
|
|
253
|
+
}
|
|
254
|
+
);
|
|
255
|
+
} catch {
|
|
256
|
+
xmlExample = json2xml(responseExampleObject, "");
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return (
|
|
260
|
+
// @ts-ignore
|
|
261
|
+
react_1.default.createElement(
|
|
262
|
+
TabItem_1.default,
|
|
263
|
+
{ label: "Example (auto)", value: "Example (auto)" },
|
|
264
|
+
react_1.default.createElement(ResponseSamples_1.default, {
|
|
265
|
+
responseExample: xmlExample,
|
|
266
|
+
language: "xml",
|
|
267
|
+
})
|
|
268
|
+
)
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (
|
|
273
|
+
typeof responseExample === "object" ||
|
|
274
|
+
typeof responseExample === "string"
|
|
275
|
+
) {
|
|
276
|
+
return (
|
|
277
|
+
// @ts-ignore
|
|
278
|
+
react_1.default.createElement(
|
|
279
|
+
TabItem_1.default,
|
|
280
|
+
{ label: "Example (auto)", value: "Example (auto)" },
|
|
281
|
+
react_1.default.createElement(ResponseSamples_1.default, {
|
|
282
|
+
responseExample: JSON.stringify(responseExample, null, 2),
|
|
283
|
+
language: "json",
|
|
284
|
+
})
|
|
285
|
+
)
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
return null;
|
|
289
|
+
};
|
|
290
|
+
exports.ExampleFromSchema = ExampleFromSchema;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { MediaTypeObject } from "docusaurus-plugin-openapi-docs/lib/openapi/types";
|
|
3
|
+
interface Props {
|
|
4
|
+
style?: React.CSSProperties;
|
|
5
|
+
title: string;
|
|
6
|
+
body: {
|
|
7
|
+
content?: {
|
|
8
|
+
[key: string]: MediaTypeObject;
|
|
9
|
+
};
|
|
10
|
+
description?: string;
|
|
11
|
+
required?: string[] | boolean;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
declare const ResponseSchema: React.FC<Props>;
|
|
15
|
+
export default ResponseSchema;
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* ============================================================================
|
|
3
|
+
* Copyright (c) Palo Alto Networks
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
* ========================================================================== */
|
|
8
|
+
var __createBinding =
|
|
9
|
+
(this && this.__createBinding) ||
|
|
10
|
+
(Object.create
|
|
11
|
+
? function (o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (
|
|
15
|
+
!desc ||
|
|
16
|
+
("get" in desc ? !m.__esModule : desc.writable || desc.configurable)
|
|
17
|
+
) {
|
|
18
|
+
desc = {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return m[k];
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
Object.defineProperty(o, k2, desc);
|
|
26
|
+
}
|
|
27
|
+
: function (o, m, k, k2) {
|
|
28
|
+
if (k2 === undefined) k2 = k;
|
|
29
|
+
o[k2] = m[k];
|
|
30
|
+
});
|
|
31
|
+
var __setModuleDefault =
|
|
32
|
+
(this && this.__setModuleDefault) ||
|
|
33
|
+
(Object.create
|
|
34
|
+
? function (o, v) {
|
|
35
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
36
|
+
}
|
|
37
|
+
: function (o, v) {
|
|
38
|
+
o["default"] = v;
|
|
39
|
+
});
|
|
40
|
+
var __importStar =
|
|
41
|
+
(this && this.__importStar) ||
|
|
42
|
+
function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null)
|
|
46
|
+
for (var k in mod)
|
|
47
|
+
if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
|
|
48
|
+
__createBinding(result, mod, k);
|
|
49
|
+
__setModuleDefault(result, mod);
|
|
50
|
+
return result;
|
|
51
|
+
};
|
|
52
|
+
var __importDefault =
|
|
53
|
+
(this && this.__importDefault) ||
|
|
54
|
+
function (mod) {
|
|
55
|
+
return mod && mod.__esModule ? mod : { default: mod };
|
|
56
|
+
};
|
|
57
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
58
|
+
const react_1 = __importStar(require("react"));
|
|
59
|
+
const BrowserOnly_1 = __importDefault(require("@docusaurus/BrowserOnly"));
|
|
60
|
+
const Details_1 = __importDefault(require("@theme/Details"));
|
|
61
|
+
const MimeTabs_1 = __importDefault(require("@theme/MimeTabs")); // Assume these components exist
|
|
62
|
+
const ResponseExamples_1 = require("@theme/ResponseExamples");
|
|
63
|
+
const Schema_1 = __importDefault(require("@theme/Schema"));
|
|
64
|
+
const SchemaTabs_1 = __importDefault(require("@theme/SchemaTabs"));
|
|
65
|
+
const SkeletonLoader_1 = __importDefault(require("@theme/SkeletonLoader"));
|
|
66
|
+
const TabItem_1 = __importDefault(require("@theme/TabItem"));
|
|
67
|
+
const createDescription_1 = require("docusaurus-plugin-openapi-docs/lib/markdown/createDescription");
|
|
68
|
+
const ResponseSchemaComponent = ({ title, body, style }) => {
|
|
69
|
+
if (
|
|
70
|
+
body === undefined ||
|
|
71
|
+
body.content === undefined ||
|
|
72
|
+
Object.keys(body).length === 0 ||
|
|
73
|
+
Object.keys(body.content).length === 0
|
|
74
|
+
) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
// Get all MIME types, including vendor-specific
|
|
78
|
+
const mimeTypes = Object.keys(body.content);
|
|
79
|
+
if (mimeTypes && mimeTypes.length) {
|
|
80
|
+
return react_1.default.createElement(
|
|
81
|
+
MimeTabs_1.default,
|
|
82
|
+
{ className: "openapi-tabs__mime", schemaType: "response" },
|
|
83
|
+
mimeTypes.map((mimeType) => {
|
|
84
|
+
const responseExamples = body.content[mimeType].examples;
|
|
85
|
+
const responseExample = body.content[mimeType].example;
|
|
86
|
+
const firstBody =
|
|
87
|
+
body.content[mimeType].schema ?? body.content[mimeType];
|
|
88
|
+
if (
|
|
89
|
+
firstBody === undefined &&
|
|
90
|
+
responseExample === undefined &&
|
|
91
|
+
responseExamples === undefined
|
|
92
|
+
) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
if (firstBody) {
|
|
96
|
+
return (
|
|
97
|
+
// @ts-ignore
|
|
98
|
+
react_1.default.createElement(
|
|
99
|
+
TabItem_1.default,
|
|
100
|
+
{ key: mimeType, label: mimeType, value: mimeType },
|
|
101
|
+
react_1.default.createElement(
|
|
102
|
+
SchemaTabs_1.default,
|
|
103
|
+
{ className: "openapi-tabs__schema" },
|
|
104
|
+
react_1.default.createElement(
|
|
105
|
+
TabItem_1.default,
|
|
106
|
+
{ key: title, label: title, value: title },
|
|
107
|
+
react_1.default.createElement(
|
|
108
|
+
Details_1.default,
|
|
109
|
+
{
|
|
110
|
+
className: "openapi-markdown__details response",
|
|
111
|
+
"data-collapsed": false,
|
|
112
|
+
open: true,
|
|
113
|
+
style: style,
|
|
114
|
+
summary: react_1.default.createElement(
|
|
115
|
+
react_1.default.Fragment,
|
|
116
|
+
null,
|
|
117
|
+
react_1.default.createElement(
|
|
118
|
+
"summary",
|
|
119
|
+
null,
|
|
120
|
+
react_1.default.createElement(
|
|
121
|
+
"strong",
|
|
122
|
+
{
|
|
123
|
+
className:
|
|
124
|
+
"openapi-markdown__details-summary-response",
|
|
125
|
+
},
|
|
126
|
+
title,
|
|
127
|
+
body.required === true &&
|
|
128
|
+
react_1.default.createElement(
|
|
129
|
+
"span",
|
|
130
|
+
{ className: "openapi-schema__required" },
|
|
131
|
+
"required"
|
|
132
|
+
)
|
|
133
|
+
)
|
|
134
|
+
)
|
|
135
|
+
),
|
|
136
|
+
},
|
|
137
|
+
react_1.default.createElement(
|
|
138
|
+
"div",
|
|
139
|
+
{ style: { textAlign: "left", marginLeft: "1rem" } },
|
|
140
|
+
body.description &&
|
|
141
|
+
react_1.default.createElement(
|
|
142
|
+
"div",
|
|
143
|
+
{
|
|
144
|
+
style: { marginTop: "1rem", marginBottom: "1rem" },
|
|
145
|
+
},
|
|
146
|
+
(0, createDescription_1.createDescription)(
|
|
147
|
+
body.description
|
|
148
|
+
)
|
|
149
|
+
)
|
|
150
|
+
),
|
|
151
|
+
react_1.default.createElement(
|
|
152
|
+
"ul",
|
|
153
|
+
{ style: { marginLeft: "1rem" } },
|
|
154
|
+
react_1.default.createElement(Schema_1.default, {
|
|
155
|
+
schema: firstBody,
|
|
156
|
+
schemaType: "response",
|
|
157
|
+
})
|
|
158
|
+
)
|
|
159
|
+
)
|
|
160
|
+
),
|
|
161
|
+
firstBody &&
|
|
162
|
+
(0, ResponseExamples_1.ExampleFromSchema)({
|
|
163
|
+
schema: firstBody,
|
|
164
|
+
mimeType: mimeType,
|
|
165
|
+
}),
|
|
166
|
+
responseExamples &&
|
|
167
|
+
(0, ResponseExamples_1.ResponseExamples)({
|
|
168
|
+
responseExamples,
|
|
169
|
+
mimeType,
|
|
170
|
+
}),
|
|
171
|
+
responseExample &&
|
|
172
|
+
(0, ResponseExamples_1.ResponseExample)({
|
|
173
|
+
responseExample,
|
|
174
|
+
mimeType,
|
|
175
|
+
})
|
|
176
|
+
)
|
|
177
|
+
)
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
return undefined;
|
|
181
|
+
})
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
return undefined;
|
|
185
|
+
};
|
|
186
|
+
const ResponseSchema = (props) => {
|
|
187
|
+
return react_1.default.createElement(
|
|
188
|
+
BrowserOnly_1.default,
|
|
189
|
+
{
|
|
190
|
+
fallback: react_1.default.createElement(SkeletonLoader_1.default, {
|
|
191
|
+
size: "md",
|
|
192
|
+
}),
|
|
193
|
+
},
|
|
194
|
+
() => {
|
|
195
|
+
const LazyComponent = react_1.default.lazy(() =>
|
|
196
|
+
Promise.resolve({ default: ResponseSchemaComponent })
|
|
197
|
+
);
|
|
198
|
+
return react_1.default.createElement(
|
|
199
|
+
react_1.Suspense,
|
|
200
|
+
{ fallback: null },
|
|
201
|
+
react_1.default.createElement(LazyComponent, { ...props })
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
);
|
|
205
|
+
};
|
|
206
|
+
exports.default = ResponseSchema;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { SchemaObject } from "docusaurus-plugin-openapi-docs/lib/openapi/types";
|
|
3
|
+
interface SchemaProps {
|
|
4
|
+
schema: SchemaObject;
|
|
5
|
+
schemaType: "request" | "response";
|
|
6
|
+
}
|
|
7
|
+
declare const SchemaNode: React.FC<SchemaProps>;
|
|
8
|
+
export default SchemaNode;
|