docusaurus-plugin-openapi-docs 0.0.0-1000

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 (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +361 -0
  3. package/lib/index.d.ts +9 -0
  4. package/lib/index.js +709 -0
  5. package/lib/markdown/createArrayBracket.d.ts +2 -0
  6. package/lib/markdown/createArrayBracket.js +36 -0
  7. package/lib/markdown/createAuthentication.d.ts +2 -0
  8. package/lib/markdown/createAuthentication.js +171 -0
  9. package/lib/markdown/createAuthorization.d.ts +1 -0
  10. package/lib/markdown/createAuthorization.js +15 -0
  11. package/lib/markdown/createCallbackMethodEndpoint.d.ts +1 -0
  12. package/lib/markdown/createCallbackMethodEndpoint.js +20 -0
  13. package/lib/markdown/createCallbacks.d.ts +6 -0
  14. package/lib/markdown/createCallbacks.js +77 -0
  15. package/lib/markdown/createContactInfo.d.ts +2 -0
  16. package/lib/markdown/createContactInfo.js +39 -0
  17. package/lib/markdown/createDeprecationNotice.d.ts +6 -0
  18. package/lib/markdown/createDeprecationNotice.js +20 -0
  19. package/lib/markdown/createDescription.d.ts +1 -0
  20. package/lib/markdown/createDescription.js +13 -0
  21. package/lib/markdown/createDetails.d.ts +2 -0
  22. package/lib/markdown/createDetails.js +17 -0
  23. package/lib/markdown/createDetailsSummary.d.ts +2 -0
  24. package/lib/markdown/createDetailsSummary.js +17 -0
  25. package/lib/markdown/createDownload.d.ts +1 -0
  26. package/lib/markdown/createDownload.js +16 -0
  27. package/lib/markdown/createHeading.d.ts +1 -0
  28. package/lib/markdown/createHeading.js +20 -0
  29. package/lib/markdown/createLicense.d.ts +2 -0
  30. package/lib/markdown/createLicense.js +32 -0
  31. package/lib/markdown/createLogo.d.ts +2 -0
  32. package/lib/markdown/createLogo.js +18 -0
  33. package/lib/markdown/createMethodEndpoint.d.ts +1 -0
  34. package/lib/markdown/createMethodEndpoint.js +20 -0
  35. package/lib/markdown/createParamsDetails.d.ts +6 -0
  36. package/lib/markdown/createParamsDetails.js +18 -0
  37. package/lib/markdown/createRequestBodyDetails.d.ts +13 -0
  38. package/lib/markdown/createRequestBodyDetails.js +13 -0
  39. package/lib/markdown/createRequestHeader.d.ts +1 -0
  40. package/lib/markdown/createRequestHeader.js +21 -0
  41. package/lib/markdown/createRequestSchema.d.ts +14 -0
  42. package/lib/markdown/createRequestSchema.js +20 -0
  43. package/lib/markdown/createResponseSchema.d.ts +14 -0
  44. package/lib/markdown/createResponseSchema.js +20 -0
  45. package/lib/markdown/createSchema.d.ts +9 -0
  46. package/lib/markdown/createSchema.js +668 -0
  47. package/lib/markdown/createSchema.test.d.ts +1 -0
  48. package/lib/markdown/createSchema.test.js +913 -0
  49. package/lib/markdown/createStatusCodes.d.ts +9 -0
  50. package/lib/markdown/createStatusCodes.js +63 -0
  51. package/lib/markdown/createTermsOfService.d.ts +1 -0
  52. package/lib/markdown/createTermsOfService.js +31 -0
  53. package/lib/markdown/createVendorExtensions.d.ts +1 -0
  54. package/lib/markdown/createVendorExtensions.js +24 -0
  55. package/lib/markdown/createVersionBadge.d.ts +1 -0
  56. package/lib/markdown/createVersionBadge.js +19 -0
  57. package/lib/markdown/index.d.ts +5 -0
  58. package/lib/markdown/index.js +92 -0
  59. package/lib/markdown/schema.d.ts +3 -0
  60. package/lib/markdown/schema.js +154 -0
  61. package/lib/markdown/schema.test.d.ts +1 -0
  62. package/lib/markdown/schema.test.js +181 -0
  63. package/lib/markdown/utils.d.ts +20 -0
  64. package/lib/markdown/utils.js +68 -0
  65. package/lib/openapi/createRequestExample.d.ts +2 -0
  66. package/lib/openapi/createRequestExample.js +191 -0
  67. package/lib/openapi/createResponseExample.d.ts +2 -0
  68. package/lib/openapi/createResponseExample.js +192 -0
  69. package/lib/openapi/index.d.ts +1 -0
  70. package/lib/openapi/index.js +12 -0
  71. package/lib/openapi/openapi.d.ts +12 -0
  72. package/lib/openapi/openapi.js +544 -0
  73. package/lib/openapi/openapi.test.d.ts +1 -0
  74. package/lib/openapi/openapi.test.js +33 -0
  75. package/lib/openapi/types.d.ts +354 -0
  76. package/lib/openapi/types.js +8 -0
  77. package/lib/openapi/utils/loadAndResolveSpec.d.ts +2 -0
  78. package/lib/openapi/utils/loadAndResolveSpec.js +153 -0
  79. package/lib/openapi/utils/services/OpenAPIParser.d.ts +52 -0
  80. package/lib/openapi/utils/services/OpenAPIParser.js +343 -0
  81. package/lib/openapi/utils/services/RedocNormalizedOptions.d.ts +100 -0
  82. package/lib/openapi/utils/services/RedocNormalizedOptions.js +170 -0
  83. package/lib/openapi/utils/types/index.d.ts +2 -0
  84. package/lib/openapi/utils/types/index.js +23 -0
  85. package/lib/openapi/utils/types/open-api.d.ts +305 -0
  86. package/lib/openapi/utils/types/open-api.js +8 -0
  87. package/lib/openapi/utils/types.d.ts +306 -0
  88. package/lib/openapi/utils/types.js +8 -0
  89. package/lib/openapi/utils/utils/JsonPointer.d.ts +51 -0
  90. package/lib/openapi/utils/utils/JsonPointer.js +95 -0
  91. package/lib/openapi/utils/utils/helpers.d.ts +43 -0
  92. package/lib/openapi/utils/utils/helpers.js +230 -0
  93. package/lib/openapi/utils/utils/index.d.ts +3 -0
  94. package/lib/openapi/utils/utils/index.js +25 -0
  95. package/lib/openapi/utils/utils/openapi.d.ts +40 -0
  96. package/lib/openapi/utils/utils/openapi.js +605 -0
  97. package/lib/options.d.ts +2 -0
  98. package/lib/options.js +69 -0
  99. package/lib/sidebars/index.d.ts +4 -0
  100. package/lib/sidebars/index.js +226 -0
  101. package/lib/sidebars/utils.d.ts +2 -0
  102. package/lib/sidebars/utils.js +30 -0
  103. package/lib/types.d.ts +135 -0
  104. package/lib/types.js +8 -0
  105. package/package.json +69 -0
  106. package/src/index.ts +945 -0
  107. package/src/markdown/__snapshots__/createSchema.test.ts.snap +1605 -0
  108. package/src/markdown/createArrayBracket.ts +35 -0
  109. package/src/markdown/createAuthentication.ts +201 -0
  110. package/src/markdown/createAuthorization.ts +13 -0
  111. package/src/markdown/createCallbackMethodEndpoint.ts +19 -0
  112. package/src/markdown/createCallbacks.ts +101 -0
  113. package/src/markdown/createContactInfo.ts +41 -0
  114. package/src/markdown/createDeprecationNotice.ts +31 -0
  115. package/src/markdown/createDescription.ts +12 -0
  116. package/src/markdown/createDetails.ts +16 -0
  117. package/src/markdown/createDetailsSummary.ts +16 -0
  118. package/src/markdown/createDownload.ts +15 -0
  119. package/src/markdown/createHeading.ts +23 -0
  120. package/src/markdown/createLicense.ts +34 -0
  121. package/src/markdown/createLogo.ts +21 -0
  122. package/src/markdown/createMethodEndpoint.ts +19 -0
  123. package/src/markdown/createParamsDetails.ts +22 -0
  124. package/src/markdown/createRequestBodyDetails.ts +24 -0
  125. package/src/markdown/createRequestHeader.ts +24 -0
  126. package/src/markdown/createRequestSchema.ts +32 -0
  127. package/src/markdown/createResponseSchema.ts +32 -0
  128. package/src/markdown/createSchema.test.ts +1075 -0
  129. package/src/markdown/createSchema.ts +862 -0
  130. package/src/markdown/createStatusCodes.ts +63 -0
  131. package/src/markdown/createTermsOfService.ts +30 -0
  132. package/src/markdown/createVendorExtensions.ts +22 -0
  133. package/src/markdown/createVersionBadge.ts +22 -0
  134. package/src/markdown/index.ts +144 -0
  135. package/src/markdown/schema.test.ts +208 -0
  136. package/src/markdown/schema.ts +185 -0
  137. package/src/markdown/utils.ts +89 -0
  138. package/src/openapi/__fixtures__/examples/openapi.yaml +49 -0
  139. package/src/openapi/createRequestExample.ts +235 -0
  140. package/src/openapi/createResponseExample.ts +238 -0
  141. package/src/openapi/index.ts +8 -0
  142. package/src/openapi/openapi.test.ts +40 -0
  143. package/src/openapi/openapi.ts +697 -0
  144. package/src/openapi/types.ts +455 -0
  145. package/src/openapi/utils/loadAndResolveSpec.ts +171 -0
  146. package/src/openapi/utils/services/OpenAPIParser.ts +434 -0
  147. package/src/openapi/utils/services/RedocNormalizedOptions.ts +330 -0
  148. package/src/openapi/utils/types/index.ts +10 -0
  149. package/src/openapi/utils/types/open-api.ts +303 -0
  150. package/src/openapi/utils/types.ts +303 -0
  151. package/src/openapi/utils/utils/JsonPointer.ts +99 -0
  152. package/src/openapi/utils/utils/helpers.ts +239 -0
  153. package/src/openapi/utils/utils/index.ts +11 -0
  154. package/src/openapi/utils/utils/openapi.ts +771 -0
  155. package/src/openapi-to-postmanv2.d.ts +10 -0
  156. package/src/options.ts +77 -0
  157. package/src/plugin-content-docs-types.d.ts +42 -0
  158. package/src/plugin-openapi.d.ts +87 -0
  159. package/src/postman-collection.d.ts +10 -0
  160. package/src/sidebars/index.ts +322 -0
  161. package/src/sidebars/utils.ts +29 -0
  162. package/src/types.ts +176 -0
  163. package/tsconfig.json +7 -0
@@ -0,0 +1,668 @@
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 = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.mergeAllOf = mergeAllOf;
13
+ exports.createNodes = createNodes;
14
+ // eslint-disable-next-line import/no-extraneous-dependencies
15
+ const allof_merge_1 = require("allof-merge");
16
+ const clsx_1 = __importDefault(require("clsx"));
17
+ const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
18
+ const createArrayBracket_1 = require("./createArrayBracket");
19
+ const createDescription_1 = require("./createDescription");
20
+ const createDetails_1 = require("./createDetails");
21
+ const createDetailsSummary_1 = require("./createDetailsSummary");
22
+ const schema_1 = require("./schema");
23
+ const utils_1 = require("./utils");
24
+ let SCHEMA_TYPE;
25
+ /**
26
+ * Returns a merged representation of allOf array of schemas.
27
+ */
28
+ function mergeAllOf(allOf) {
29
+ const onMergeError = (msg) => {
30
+ console.warn(msg);
31
+ };
32
+ const mergedSchemas = (0, allof_merge_1.merge)(allOf, { onMergeError });
33
+ return mergedSchemas;
34
+ }
35
+ /**
36
+ * For handling nested anyOf/oneOf.
37
+ */
38
+ function createAnyOneOf(schema) {
39
+ const type = schema.oneOf ? "oneOf" : "anyOf";
40
+ return (0, utils_1.create)("div", {
41
+ children: [
42
+ (0, utils_1.create)("span", {
43
+ className: "badge badge--info",
44
+ children: type,
45
+ style: { marginBottom: "1rem" },
46
+ }),
47
+ (0, utils_1.create)("SchemaTabs", {
48
+ children: schema[type].map((anyOneSchema, index) => {
49
+ const label = anyOneSchema.title
50
+ ? anyOneSchema.title
51
+ : `MOD${index + 1}`;
52
+ const anyOneChildren = [];
53
+ if (anyOneSchema.description) {
54
+ anyOneChildren.push((0, utils_1.create)("div", {
55
+ style: { marginTop: ".5rem", marginBottom: ".5rem" },
56
+ className: "openapi-schema__summary",
57
+ children: (0, createDescription_1.createDescription)(anyOneSchema.description),
58
+ }));
59
+ }
60
+ if (anyOneSchema.type === "object" &&
61
+ !anyOneSchema.properties &&
62
+ !anyOneSchema.allOf &&
63
+ !anyOneSchema.items) {
64
+ anyOneChildren.push(createNodes(anyOneSchema, SCHEMA_TYPE));
65
+ }
66
+ if (anyOneSchema.properties !== undefined) {
67
+ anyOneChildren.push(createProperties(anyOneSchema));
68
+ delete anyOneSchema.properties;
69
+ }
70
+ if (anyOneSchema.allOf !== undefined) {
71
+ anyOneChildren.push(createNodes(anyOneSchema, SCHEMA_TYPE));
72
+ delete anyOneSchema.allOf;
73
+ }
74
+ if (anyOneSchema.oneOf !== undefined) {
75
+ anyOneChildren.push(createNodes(anyOneSchema, SCHEMA_TYPE));
76
+ delete anyOneSchema.oneOf;
77
+ }
78
+ if (anyOneSchema.items !== undefined) {
79
+ anyOneChildren.push(createItems(anyOneSchema));
80
+ delete anyOneSchema.items;
81
+ }
82
+ if (anyOneSchema.type === "string" ||
83
+ anyOneSchema.type === "number" ||
84
+ anyOneSchema.type === "integer" ||
85
+ anyOneSchema.type === "boolean") {
86
+ anyOneChildren.push(createNodes(anyOneSchema, SCHEMA_TYPE));
87
+ }
88
+ if (anyOneChildren.length) {
89
+ if (schema.type === "array") {
90
+ return (0, utils_1.create)("TabItem", {
91
+ label: label,
92
+ value: `${index}-item-properties`,
93
+ children: [
94
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
95
+ anyOneChildren,
96
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
97
+ ]
98
+ .filter(Boolean)
99
+ .flat(),
100
+ });
101
+ }
102
+ return (0, utils_1.create)("TabItem", {
103
+ label: label,
104
+ value: `${index}-item-properties`,
105
+ children: anyOneChildren.filter(Boolean).flat(),
106
+ });
107
+ }
108
+ return undefined;
109
+ }),
110
+ }),
111
+ ],
112
+ });
113
+ }
114
+ /**
115
+ * For handling properties.
116
+ */
117
+ function createProperties(schema) {
118
+ const discriminator = schema.discriminator;
119
+ if (Object.keys(schema.properties).length === 0) {
120
+ return (0, utils_1.create)("SchemaItem", {
121
+ collapsible: false,
122
+ name: "",
123
+ required: false,
124
+ schemaName: "object",
125
+ qualifierMessage: undefined,
126
+ schema: {},
127
+ });
128
+ }
129
+ return Object.entries(schema.properties).map(([key, val]) => {
130
+ return createEdges({
131
+ name: key,
132
+ schema: val,
133
+ required: Array.isArray(schema.required)
134
+ ? schema.required.includes(key)
135
+ : false,
136
+ discriminator,
137
+ });
138
+ });
139
+ }
140
+ /**
141
+ * For handling additionalProperties.
142
+ */
143
+ function createAdditionalProperties(schema) {
144
+ var _a;
145
+ const additionalProperties = schema.additionalProperties;
146
+ if (!additionalProperties)
147
+ return [];
148
+ // Handle free-form objects
149
+ if (additionalProperties === true || (0, isEmpty_1.default)(additionalProperties)) {
150
+ return (0, utils_1.create)("SchemaItem", {
151
+ name: "property name*",
152
+ required: false,
153
+ schemaName: "any",
154
+ qualifierMessage: (0, schema_1.getQualifierMessage)(schema),
155
+ schema: schema,
156
+ collapsible: false,
157
+ discriminator: false,
158
+ });
159
+ }
160
+ // objects, arrays, complex schemas
161
+ if (additionalProperties.properties ||
162
+ additionalProperties.items ||
163
+ additionalProperties.allOf ||
164
+ additionalProperties.additionalProperties ||
165
+ additionalProperties.oneOf ||
166
+ additionalProperties.anyOf) {
167
+ const title = additionalProperties.title;
168
+ const schemaName = (0, schema_1.getSchemaName)(additionalProperties);
169
+ const required = (_a = schema.required) !== null && _a !== void 0 ? _a : false;
170
+ return createDetailsNode("property name*", title !== null && title !== void 0 ? title : schemaName, additionalProperties, required, schema.nullable);
171
+ }
172
+ // primitive types
173
+ if (additionalProperties.type === "string" ||
174
+ additionalProperties.type === "boolean" ||
175
+ additionalProperties.type === "integer" ||
176
+ additionalProperties.type === "number") {
177
+ const schemaName = (0, schema_1.getSchemaName)(additionalProperties);
178
+ return (0, utils_1.create)("SchemaItem", {
179
+ name: "property name*",
180
+ required: false,
181
+ schemaName: schemaName,
182
+ qualifierMessage: (0, schema_1.getQualifierMessage)(schema),
183
+ schema: additionalProperties,
184
+ collapsible: false,
185
+ discriminator: false,
186
+ });
187
+ }
188
+ // unknown
189
+ return [];
190
+ }
191
+ /**
192
+ * For handling items.
193
+ */
194
+ function createItems(schema) {
195
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
196
+ if (((_a = schema.items) === null || _a === void 0 ? void 0 : _a.properties) !== undefined) {
197
+ return [
198
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
199
+ createProperties(schema.items),
200
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
201
+ ].flat();
202
+ }
203
+ if (((_b = schema.items) === null || _b === void 0 ? void 0 : _b.additionalProperties) !== undefined) {
204
+ return [
205
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
206
+ createAdditionalProperties(schema.items),
207
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
208
+ ].flat();
209
+ }
210
+ 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) {
211
+ return [
212
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
213
+ createAnyOneOf(schema.items),
214
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
215
+ ].flat();
216
+ }
217
+ if (((_e = schema.items) === null || _e === void 0 ? void 0 : _e.allOf) !== undefined) {
218
+ // TODO: figure out if and how we should pass merged required array
219
+ const mergedSchemas = mergeAllOf(schema.items);
220
+ // Handles combo anyOf/oneOf + properties
221
+ if ((mergedSchemas.oneOf !== undefined ||
222
+ mergedSchemas.anyOf !== undefined) &&
223
+ mergedSchemas.properties) {
224
+ return [
225
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
226
+ createAnyOneOf(mergedSchemas),
227
+ createProperties(mergedSchemas),
228
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
229
+ ].flat();
230
+ }
231
+ // Handles only anyOf/oneOf
232
+ if (mergedSchemas.oneOf !== undefined ||
233
+ mergedSchemas.anyOf !== undefined) {
234
+ return [
235
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
236
+ createAnyOneOf(mergedSchemas),
237
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
238
+ ].flat();
239
+ }
240
+ // Handles properties
241
+ if (mergedSchemas.properties !== undefined) {
242
+ return [
243
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
244
+ createProperties(mergedSchemas),
245
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
246
+ ].flat();
247
+ }
248
+ }
249
+ if (((_f = schema.items) === null || _f === void 0 ? void 0 : _f.type) === "string" ||
250
+ ((_g = schema.items) === null || _g === void 0 ? void 0 : _g.type) === "number" ||
251
+ ((_h = schema.items) === null || _h === void 0 ? void 0 : _h.type) === "integer" ||
252
+ ((_j = schema.items) === null || _j === void 0 ? void 0 : _j.type) === "boolean" ||
253
+ ((_k = schema.items) === null || _k === void 0 ? void 0 : _k.type) === "object") {
254
+ return [
255
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
256
+ createNodes(schema.items, SCHEMA_TYPE),
257
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
258
+ ].flat();
259
+ }
260
+ // TODO: clean this up or eliminate it?
261
+ return [
262
+ (0, createArrayBracket_1.createOpeningArrayBracket)(),
263
+ Object.entries(schema.items).map(([key, val]) => createEdges({
264
+ name: key,
265
+ schema: val,
266
+ required: Array.isArray(schema.required)
267
+ ? schema.required.includes(key)
268
+ : false,
269
+ })),
270
+ (0, createArrayBracket_1.createClosingArrayBracket)(),
271
+ ].flat();
272
+ }
273
+ /**
274
+ * For handling nested properties.
275
+ */
276
+ function createDetailsNode(name, schemaName, schema, required, nullable) {
277
+ return (0, utils_1.create)("SchemaItem", {
278
+ collapsible: true,
279
+ className: "schemaItem",
280
+ children: [
281
+ (0, createDetails_1.createDetails)({
282
+ className: "openapi-markdown__details",
283
+ children: [
284
+ (0, createDetailsSummary_1.createDetailsSummary)({
285
+ children: [
286
+ (0, utils_1.create)("span", {
287
+ className: "openapi-schema__container",
288
+ children: [
289
+ (0, utils_1.create)("strong", {
290
+ className: (0, clsx_1.default)("openapi-schema__property", {
291
+ "openapi-schema__strikethrough": schema.deprecated,
292
+ }),
293
+ children: name,
294
+ }),
295
+ (0, utils_1.create)("span", {
296
+ className: "openapi-schema__name",
297
+ children: ` ${schemaName}`,
298
+ }),
299
+ (0, utils_1.guard)((Array.isArray(required)
300
+ ? required.includes(name)
301
+ : required === true) ||
302
+ schema.deprecated ||
303
+ nullable, () => [
304
+ (0, utils_1.create)("span", {
305
+ className: "openapi-schema__divider",
306
+ }),
307
+ ]),
308
+ (0, utils_1.guard)(nullable, () => [
309
+ (0, utils_1.create)("span", {
310
+ className: "openapi-schema__nullable",
311
+ children: "nullable",
312
+ }),
313
+ ]),
314
+ (0, utils_1.guard)(Array.isArray(required)
315
+ ? required.includes(name)
316
+ : required === true, () => [
317
+ (0, utils_1.create)("span", {
318
+ className: "openapi-schema__required",
319
+ children: "required",
320
+ }),
321
+ ]),
322
+ (0, utils_1.guard)(schema.deprecated, () => [
323
+ (0, utils_1.create)("span", {
324
+ className: "openapi-schema__deprecated",
325
+ children: "deprecated",
326
+ }),
327
+ ]),
328
+ ],
329
+ }),
330
+ ],
331
+ }),
332
+ (0, utils_1.create)("div", {
333
+ style: { marginLeft: "1rem" },
334
+ children: [
335
+ (0, utils_1.guard)(schema.description, (description) => (0, utils_1.create)("div", {
336
+ style: { marginTop: ".5rem", marginBottom: ".5rem" },
337
+ children: (0, createDescription_1.createDescription)(description),
338
+ })),
339
+ (0, utils_1.guard)((0, schema_1.getQualifierMessage)(schema), (message) => (0, utils_1.create)("div", {
340
+ style: { marginTop: ".5rem", marginBottom: ".5rem" },
341
+ children: (0, createDescription_1.createDescription)(message),
342
+ })),
343
+ createNodes(schema, SCHEMA_TYPE),
344
+ ],
345
+ }),
346
+ ],
347
+ }),
348
+ ],
349
+ });
350
+ }
351
+ /**
352
+ * For handling anyOf/oneOf properties.
353
+ */
354
+ // function createAnyOneOfProperty(
355
+ // name: string,
356
+ // schemaName: string,
357
+ // schema: SchemaObject,
358
+ // required: string[] | boolean,
359
+ // nullable: boolean | unknown
360
+ // ): any {
361
+ // return create("SchemaItem", {
362
+ // collapsible: true,
363
+ // className: "schemaItem",
364
+ // children: [
365
+ // createDetails({
366
+ // className: "openapi-markdown__details",
367
+ // children: [
368
+ // createDetailsSummary({
369
+ // children: [
370
+ // create("strong", { children: name }),
371
+ // create("span", {
372
+ // style: { opacity: "0.6" },
373
+ // children: ` ${schemaName}`,
374
+ // }),
375
+ // guard(
376
+ // (schema.nullable && schema.nullable === true) ||
377
+ // (nullable && nullable === true),
378
+ // () => [
379
+ // create("strong", {
380
+ // style: {
381
+ // fontSize: "var(--ifm-code-font-size)",
382
+ // color: "var(--openapi-nullable)",
383
+ // },
384
+ // children: " nullable",
385
+ // }),
386
+ // ]
387
+ // ),
388
+ // guard(
389
+ // Array.isArray(required)
390
+ // ? required.includes(name)
391
+ // : required === true,
392
+ // () => [
393
+ // create("strong", {
394
+ // style: {
395
+ // fontSize: "var(--ifm-code-font-size)",
396
+ // color: "var(--openapi-required)",
397
+ // },
398
+ // children: " required",
399
+ // }),
400
+ // ]
401
+ // ),
402
+ // ],
403
+ // }),
404
+ // create("div", {
405
+ // style: { marginLeft: "1rem" },
406
+ // children: [
407
+ // guard(getQualifierMessage(schema), (message) =>
408
+ // create("div", {
409
+ // style: { marginTop: ".5rem", marginBottom: ".5rem" },
410
+ // children: createDescription(message),
411
+ // })
412
+ // ),
413
+ // guard(schema.description, (description) =>
414
+ // create("div", {
415
+ // style: { marginTop: ".5rem", marginBottom: ".5rem" },
416
+ // children: createDescription(description),
417
+ // })
418
+ // ),
419
+ // ],
420
+ // }),
421
+ // createAnyOneOf(schema),
422
+ // ],
423
+ // }),
424
+ // ],
425
+ // });
426
+ // }
427
+ /**
428
+ * For handling discriminators that map to a same-level property (like 'petType').
429
+ * Note: These should only be encountered while iterating through properties.
430
+ */
431
+ function createPropertyDiscriminator(name, schemaName, schema, discriminator, required) {
432
+ if (schema === undefined) {
433
+ return undefined;
434
+ }
435
+ // render as a simple property if there's no mapping
436
+ if (discriminator.mapping === undefined) {
437
+ return createEdges({ name, schema, required });
438
+ }
439
+ return (0, utils_1.create)("div", {
440
+ className: "openapi-discriminator__item openapi-schema__list-item",
441
+ children: (0, utils_1.create)("div", {
442
+ children: [
443
+ (0, utils_1.create)("span", {
444
+ className: "openapi-schema__container",
445
+ children: [
446
+ (0, utils_1.create)("strong", {
447
+ className: "openapi-discriminator__name openapi-schema__property",
448
+ children: name,
449
+ }),
450
+ (0, utils_1.guard)(schemaName, (name) => (0, utils_1.create)("span", {
451
+ className: "openapi-schema__name",
452
+ children: ` ${schemaName}`,
453
+ })),
454
+ (0, utils_1.guard)(required, () => [
455
+ (0, utils_1.create)("span", {
456
+ className: "openapi-schema__required",
457
+ children: "required",
458
+ }),
459
+ ]),
460
+ ],
461
+ }),
462
+ (0, utils_1.guard)(schema.description, (description) => (0, utils_1.create)("div", {
463
+ style: {
464
+ paddingLeft: "1rem",
465
+ },
466
+ children: (0, createDescription_1.createDescription)(description),
467
+ })),
468
+ (0, utils_1.guard)((0, schema_1.getQualifierMessage)(discriminator), (message) => (0, utils_1.create)("div", {
469
+ style: {
470
+ paddingLeft: "1rem",
471
+ },
472
+ children: (0, createDescription_1.createDescription)(message),
473
+ })),
474
+ (0, utils_1.create)("DiscriminatorTabs", {
475
+ className: "openapi-tabs__discriminator",
476
+ children: Object.keys(discriminator === null || discriminator === void 0 ? void 0 : discriminator.mapping).map((key, index) => {
477
+ const label = key;
478
+ return (0, utils_1.create)("TabItem", {
479
+ // className: "openapi-tabs__discriminator-item",
480
+ label: label,
481
+ value: `${index}-item-discriminator`,
482
+ children: [createNodes(discriminator === null || discriminator === void 0 ? void 0 : discriminator.mapping[key], SCHEMA_TYPE)],
483
+ });
484
+ }),
485
+ }),
486
+ ],
487
+ }),
488
+ });
489
+ }
490
+ /**
491
+ * Creates the edges or "leaves" of a schema tree. Edges can branch into sub-nodes with createDetails().
492
+ */
493
+ function createEdges({ name, schema, required, discriminator, }) {
494
+ var _a, _b, _c, _d, _e;
495
+ if (SCHEMA_TYPE === "request") {
496
+ if (schema.readOnly && schema.readOnly === true) {
497
+ return undefined;
498
+ }
499
+ }
500
+ if (SCHEMA_TYPE === "response") {
501
+ if (schema.writeOnly && schema.writeOnly === true) {
502
+ return undefined;
503
+ }
504
+ }
505
+ const schemaName = (0, schema_1.getSchemaName)(schema);
506
+ if (discriminator !== undefined && discriminator.propertyName === name) {
507
+ return createPropertyDiscriminator(name, "string", schema, discriminator, required);
508
+ }
509
+ if (schema.oneOf !== undefined || schema.anyOf !== undefined) {
510
+ return createDetailsNode(name, schemaName, schema, required, schema.nullable);
511
+ }
512
+ if (schema.properties !== undefined) {
513
+ return createDetailsNode(name, schemaName, schema, required, schema.nullable);
514
+ }
515
+ if (schema.additionalProperties !== undefined) {
516
+ return createDetailsNode(name, schemaName, schema, required, schema.nullable);
517
+ }
518
+ // array of objects
519
+ if (((_a = schema.items) === null || _a === void 0 ? void 0 : _a.properties) !== undefined) {
520
+ return createDetailsNode(name, schemaName, schema, required, schema.nullable);
521
+ }
522
+ if (((_b = schema.items) === null || _b === void 0 ? void 0 : _b.anyOf) !== undefined || ((_c = schema.items) === null || _c === void 0 ? void 0 : _c.oneOf) !== undefined) {
523
+ return createDetailsNode(name, schemaName, schema, required, schema.nullable);
524
+ }
525
+ if (((_d = schema.items) === null || _d === void 0 ? void 0 : _d.allOf) !== undefined) {
526
+ const mergedSchemas = mergeAllOf(schema.items);
527
+ if (SCHEMA_TYPE === "request") {
528
+ if (mergedSchemas.readOnly && mergedSchemas.readOnly === true) {
529
+ return undefined;
530
+ }
531
+ }
532
+ if (SCHEMA_TYPE === "response") {
533
+ if (mergedSchemas.writeOnly && mergedSchemas.writeOnly === true) {
534
+ return undefined;
535
+ }
536
+ }
537
+ const mergedSchemaName = (0, schema_1.getSchemaName)(mergedSchemas);
538
+ if (mergedSchemas.oneOf !== undefined ||
539
+ mergedSchemas.anyOf !== undefined) {
540
+ return createDetailsNode(name, mergedSchemaName, mergedSchemas, required, mergedSchemas.nullable);
541
+ }
542
+ if (mergedSchemas.properties !== undefined) {
543
+ return createDetailsNode(name, mergedSchemaName, mergedSchemas, required, mergedSchemas.nullable);
544
+ }
545
+ if (mergedSchemas.additionalProperties !== undefined) {
546
+ return createDetailsNode(name, mergedSchemaName, mergedSchemas, required, mergedSchemas.nullable);
547
+ }
548
+ // array of objects
549
+ if (((_e = mergedSchemas.items) === null || _e === void 0 ? void 0 : _e.properties) !== undefined) {
550
+ return createDetailsNode(name, mergedSchemaName, mergedSchemas, required, mergedSchemas.nullable);
551
+ }
552
+ return (0, utils_1.create)("SchemaItem", {
553
+ collapsible: false,
554
+ name,
555
+ required: Array.isArray(required) ? required.includes(name) : required,
556
+ schemaName: mergedSchemaName,
557
+ qualifierMessage: (0, schema_1.getQualifierMessage)(mergedSchemas),
558
+ schema: mergedSchemas,
559
+ });
560
+ }
561
+ // primitives and array of non-objects
562
+ return (0, utils_1.create)("SchemaItem", {
563
+ collapsible: false,
564
+ name,
565
+ required: Array.isArray(required) ? required.includes(name) : required,
566
+ schemaName: schemaName,
567
+ qualifierMessage: (0, schema_1.getQualifierMessage)(schema),
568
+ schema: schema,
569
+ });
570
+ }
571
+ /**
572
+ * Creates a hierarchical level of a schema tree. Nodes produce edges that can branch into sub-nodes with edges, recursively.
573
+ */
574
+ function createNodes(schema, schemaType) {
575
+ SCHEMA_TYPE = schemaType;
576
+ if (SCHEMA_TYPE === "request") {
577
+ if (schema.readOnly && schema.readOnly === true) {
578
+ return undefined;
579
+ }
580
+ }
581
+ if (SCHEMA_TYPE === "response") {
582
+ if (schema.writeOnly && schema.writeOnly === true) {
583
+ return undefined;
584
+ }
585
+ }
586
+ const nodes = [];
587
+ // if (schema.discriminator !== undefined) {
588
+ // return createDiscriminator(schema);
589
+ // }
590
+ if (schema.oneOf !== undefined || schema.anyOf !== undefined) {
591
+ nodes.push(createAnyOneOf(schema));
592
+ }
593
+ if (schema.properties !== undefined) {
594
+ nodes.push(createProperties(schema));
595
+ }
596
+ if (schema.additionalProperties !== undefined) {
597
+ nodes.push(createAdditionalProperties(schema));
598
+ }
599
+ // TODO: figure out how to handle array of objects
600
+ if (schema.items !== undefined) {
601
+ nodes.push(createItems(schema));
602
+ }
603
+ if (schema.allOf !== undefined) {
604
+ const mergedSchemas = mergeAllOf(schema);
605
+ if (mergedSchemas.oneOf !== undefined ||
606
+ mergedSchemas.anyOf !== undefined) {
607
+ nodes.push(createAnyOneOf(mergedSchemas));
608
+ }
609
+ if (mergedSchemas.properties !== undefined) {
610
+ nodes.push(createProperties(mergedSchemas));
611
+ }
612
+ }
613
+ if (nodes.length && nodes.length > 0) {
614
+ return nodes.filter(Boolean).flat();
615
+ }
616
+ // primitive
617
+ if (schema.type !== undefined) {
618
+ if (schema.allOf) {
619
+ //handle circular result in allOf
620
+ if (schema.allOf.length && typeof schema.allOf[0] === "string") {
621
+ return (0, utils_1.create)("div", {
622
+ style: {
623
+ marginTop: ".5rem",
624
+ marginBottom: ".5rem",
625
+ marginLeft: "1rem",
626
+ },
627
+ children: (0, createDescription_1.createDescription)(schema.allOf[0]),
628
+ });
629
+ }
630
+ }
631
+ return (0, utils_1.create)("div", {
632
+ style: {
633
+ marginTop: ".5rem",
634
+ marginBottom: ".5rem",
635
+ },
636
+ children: [
637
+ (0, createDescription_1.createDescription)(schema.type),
638
+ (0, utils_1.guard)((0, schema_1.getQualifierMessage)(schema), (message) => (0, utils_1.create)("div", {
639
+ style: {
640
+ paddingTop: "1rem",
641
+ },
642
+ children: (0, createDescription_1.createDescription)(message),
643
+ })),
644
+ ],
645
+ });
646
+ }
647
+ // handle circular references
648
+ if (typeof schema === "string") {
649
+ return (0, utils_1.create)("div", {
650
+ style: {
651
+ marginTop: ".5rem",
652
+ marginBottom: ".5rem",
653
+ },
654
+ children: [
655
+ (0, createDescription_1.createDescription)(schema),
656
+ (0, utils_1.guard)((0, schema_1.getQualifierMessage)(schema), (message) => (0, utils_1.create)("div", {
657
+ style: {
658
+ paddingTop: "1rem",
659
+ },
660
+ children: (0, createDescription_1.createDescription)(message),
661
+ })),
662
+ ],
663
+ });
664
+ }
665
+ // Unknown node/schema type should return undefined
666
+ // So far, haven't seen this hit in testing
667
+ return "any";
668
+ }
@@ -0,0 +1 @@
1
+ export {};