docusaurus-theme-openapi-docs 0.0.0-862 → 0.0.0-934

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/lib/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +50 -0
  2. package/lib/theme/ApiItem/index.js +3 -3
  3. package/lib/theme/ArrayBrackets/index.d.ts +3 -0
  4. package/lib/theme/ArrayBrackets/index.js +50 -0
  5. package/lib/theme/ParamsDetails/index.d.ts +6 -0
  6. package/lib/theme/ParamsDetails/index.js +134 -0
  7. package/lib/theme/ParamsItem/index.d.ts +1 -0
  8. package/lib/theme/ParamsItem/index.js +10 -6
  9. package/lib/theme/RequestSchema/index.d.ts +15 -0
  10. package/lib/theme/RequestSchema/index.js +235 -0
  11. package/lib/theme/ResponseExamples/index.d.ts +48 -0
  12. package/lib/theme/ResponseExamples/index.js +290 -0
  13. package/lib/theme/ResponseSchema/index.d.ts +15 -0
  14. package/lib/theme/ResponseSchema/index.js +206 -0
  15. package/lib/theme/Schema/index.d.ts +8 -0
  16. package/lib/theme/Schema/index.js +777 -0
  17. package/lib/theme/SchemaItem/index.d.ts +8 -8
  18. package/lib/theme/SchemaItem/index.js +9 -5
  19. package/lib/theme/SkeletonLoader/index.d.ts +6 -0
  20. package/lib/theme/SkeletonLoader/index.js +20 -0
  21. package/lib/theme/StatusCodes/index.d.ts +9 -0
  22. package/lib/theme/StatusCodes/index.js +78 -0
  23. package/lib/theme/styles.scss +41 -0
  24. package/package.json +4 -3
  25. package/src/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +50 -0
  26. package/src/theme/ApiItem/index.tsx +2 -1
  27. package/src/theme/ArrayBrackets/index.tsx +37 -0
  28. package/src/theme/ParamsDetails/index.tsx +88 -0
  29. package/src/theme/ParamsItem/index.tsx +10 -7
  30. package/src/theme/RequestSchema/index.tsx +164 -0
  31. package/src/theme/ResponseExamples/index.tsx +290 -0
  32. package/src/theme/ResponseSchema/index.tsx +151 -0
  33. package/src/theme/Schema/index.tsx +808 -0
  34. package/src/theme/SchemaItem/index.tsx +15 -13
  35. package/src/theme/SkeletonLoader/index.tsx +18 -0
  36. package/src/theme/StatusCodes/index.tsx +72 -0
  37. package/src/theme/styles.scss +41 -0
@@ -0,0 +1,777 @@
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
+ const react_1 = __importDefault(require("react"));
15
+ const ArrayBrackets_1 = require("@theme/ArrayBrackets");
16
+ const Details_1 = __importDefault(require("@theme/Details"));
17
+ const DiscriminatorTabs_1 = __importDefault(
18
+ require("@theme/DiscriminatorTabs")
19
+ );
20
+ const SchemaItem_1 = __importDefault(require("@theme/SchemaItem"));
21
+ const SchemaTabs_1 = __importDefault(require("@theme/SchemaTabs"));
22
+ const TabItem_1 = __importDefault(require("@theme/TabItem"));
23
+ // eslint-disable-next-line import/no-extraneous-dependencies
24
+ const allof_merge_1 = require("allof-merge");
25
+ const clsx_1 = __importDefault(require("clsx"));
26
+ const createDescription_1 = require("docusaurus-plugin-openapi-docs/lib/markdown/createDescription");
27
+ const schema_1 = require("docusaurus-plugin-openapi-docs/lib/markdown/schema");
28
+ const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
29
+ const react_markdown_1 = __importDefault(require("react-markdown"));
30
+ const rehype_raw_1 = __importDefault(require("rehype-raw"));
31
+ // eslint-disable-next-line import/no-extraneous-dependencies
32
+ // const jsonSchemaMergeAllOf = require("json-schema-merge-allof");
33
+ const mergeAllOf = (allOf) => {
34
+ const onMergeError = (msg) => {
35
+ console.warn(msg);
36
+ };
37
+ const mergedSchemas = (0, allof_merge_1.merge)(allOf, { onMergeError });
38
+ return mergedSchemas;
39
+ };
40
+ // Renders string as markdown, useful for descriptions and qualifiers
41
+ const Markdown = ({ text }) => {
42
+ return react_1.default.createElement(
43
+ "div",
44
+ { style: { marginTop: ".5rem", marginBottom: ".5rem" } },
45
+ react_1.default.createElement(react_markdown_1.default, {
46
+ children: (0, createDescription_1.createDescription)(text),
47
+ rehypePlugins: [rehype_raw_1.default],
48
+ })
49
+ );
50
+ };
51
+ const Summary = ({ name, schemaName, schema, required }) => {
52
+ const { deprecated, nullable } = schema;
53
+ const isRequired = Array.isArray(required)
54
+ ? required.includes(name)
55
+ : required === true;
56
+ return react_1.default.createElement(
57
+ "summary",
58
+ null,
59
+ react_1.default.createElement(
60
+ "span",
61
+ { className: "openapi-schema__container" },
62
+ react_1.default.createElement(
63
+ "strong",
64
+ {
65
+ className: (0, clsx_1.default)("openapi-schema__property", {
66
+ "openapi-schema__strikethrough": deprecated,
67
+ }),
68
+ },
69
+ name
70
+ ),
71
+ react_1.default.createElement(
72
+ "span",
73
+ { className: "openapi-schema__name" },
74
+ " ",
75
+ schemaName
76
+ ),
77
+ (isRequired || deprecated || nullable) &&
78
+ react_1.default.createElement("span", {
79
+ className: "openapi-schema__divider",
80
+ }),
81
+ nullable &&
82
+ react_1.default.createElement(
83
+ "span",
84
+ { className: "openapi-schema__nullable" },
85
+ "nullable"
86
+ ),
87
+ isRequired &&
88
+ react_1.default.createElement(
89
+ "span",
90
+ { className: "openapi-schema__required" },
91
+ "required"
92
+ ),
93
+ deprecated &&
94
+ react_1.default.createElement(
95
+ "span",
96
+ { className: "openapi-schema__deprecated" },
97
+ "deprecated"
98
+ )
99
+ )
100
+ );
101
+ };
102
+ const AnyOneOf = ({ schema, schemaType }) => {
103
+ const type = schema.oneOf ? "oneOf" : "anyOf";
104
+ return react_1.default.createElement(
105
+ react_1.default.Fragment,
106
+ null,
107
+ react_1.default.createElement(
108
+ "span",
109
+ { className: "badge badge--info", style: { marginBottom: "1rem" } },
110
+ type
111
+ ),
112
+ react_1.default.createElement(
113
+ SchemaTabs_1.default,
114
+ null,
115
+ schema[type]?.map((anyOneSchema, index) => {
116
+ const label = anyOneSchema.title || `MOD${index + 1}`;
117
+ return (
118
+ // @ts-ignore
119
+ react_1.default.createElement(
120
+ TabItem_1.default,
121
+ { key: index, label: label, value: `${index}-item-properties` },
122
+ ["string", "number", "integer", "boolean"].includes(
123
+ anyOneSchema.type
124
+ ) &&
125
+ react_1.default.createElement(SchemaItem_1.default, {
126
+ collapsible: false,
127
+ name: undefined,
128
+ schemaName: anyOneSchema.type,
129
+ qualifierMessage: (0, schema_1.getQualifierMessage)(
130
+ anyOneSchema
131
+ ),
132
+ schema: anyOneSchema,
133
+ discriminator: false,
134
+ children: null,
135
+ }),
136
+ anyOneSchema.type === "object" &&
137
+ !anyOneSchema.properties &&
138
+ !anyOneSchema.allOf &&
139
+ !anyOneSchema.oneOf &&
140
+ !anyOneSchema.anyOf &&
141
+ react_1.default.createElement(SchemaItem_1.default, {
142
+ collapsible: false,
143
+ name: undefined,
144
+ schemaName: anyOneSchema.type,
145
+ qualifierMessage: (0, schema_1.getQualifierMessage)(
146
+ anyOneSchema
147
+ ),
148
+ schema: anyOneSchema,
149
+ discriminator: false,
150
+ children: null,
151
+ }),
152
+ anyOneSchema.type === "object" &&
153
+ anyOneSchema.properties &&
154
+ react_1.default.createElement(Properties, {
155
+ schema: anyOneSchema,
156
+ schemaType: schemaType,
157
+ }),
158
+ anyOneSchema.allOf &&
159
+ react_1.default.createElement(SchemaNode, {
160
+ schema: anyOneSchema,
161
+ schemaType: schemaType,
162
+ }),
163
+ anyOneSchema.oneOf &&
164
+ react_1.default.createElement(SchemaNode, {
165
+ schema: anyOneSchema,
166
+ schemaType: schemaType,
167
+ }),
168
+ anyOneSchema.anyOf &&
169
+ react_1.default.createElement(SchemaNode, {
170
+ schema: anyOneSchema,
171
+ schemaType: schemaType,
172
+ }),
173
+ anyOneSchema.items &&
174
+ react_1.default.createElement(Items, {
175
+ schema: anyOneSchema,
176
+ schemaType: schemaType,
177
+ })
178
+ )
179
+ );
180
+ })
181
+ )
182
+ );
183
+ };
184
+ const Properties = ({ schema, schemaType }) => {
185
+ const discriminator = schema.discriminator;
186
+ if (Object.keys(schema.properties).length === 0) {
187
+ return react_1.default.createElement(SchemaItem_1.default, {
188
+ collapsible: false,
189
+ name: "",
190
+ required: false,
191
+ schemaName: "object",
192
+ qualifierMessage: undefined,
193
+ schema: {},
194
+ });
195
+ }
196
+ return react_1.default.createElement(
197
+ react_1.default.Fragment,
198
+ null,
199
+ Object.entries(schema.properties).map(([key, val]) =>
200
+ react_1.default.createElement(SchemaEdge, {
201
+ key: key,
202
+ name: key,
203
+ schema: val,
204
+ required: Array.isArray(schema.required)
205
+ ? schema.required.includes(key)
206
+ : false,
207
+ discriminator: discriminator,
208
+ schemaType: schemaType,
209
+ })
210
+ )
211
+ );
212
+ };
213
+ const PropertyDiscriminator = ({
214
+ name,
215
+ schemaName,
216
+ schema,
217
+ schemaType,
218
+ discriminator,
219
+ required,
220
+ }) => {
221
+ if (!schema) {
222
+ return null;
223
+ }
224
+ if (discriminator.mapping === undefined) {
225
+ return react_1.default.createElement(SchemaEdge, {
226
+ name: name,
227
+ schema: schema,
228
+ required: required,
229
+ schemaName: schemaName,
230
+ schemaType: schemaType,
231
+ });
232
+ }
233
+ return react_1.default.createElement(
234
+ "div",
235
+ { className: "openapi-discriminator__item openapi-schema__list-item" },
236
+ react_1.default.createElement(
237
+ "div",
238
+ null,
239
+ react_1.default.createElement(
240
+ "span",
241
+ { className: "openapi-schema__container" },
242
+ react_1.default.createElement(
243
+ "strong",
244
+ { className: "openapi-discriminator__name openapi-schema__property" },
245
+ name
246
+ ),
247
+ schemaName &&
248
+ react_1.default.createElement(
249
+ "span",
250
+ { className: "openapi-schema__name" },
251
+ " ",
252
+ schemaName
253
+ ),
254
+ required &&
255
+ react_1.default.createElement(
256
+ "span",
257
+ { className: "openapi-schema__required" },
258
+ "required"
259
+ )
260
+ ),
261
+ react_1.default.createElement(
262
+ "div",
263
+ { style: { marginLeft: "1rem" } },
264
+ schema.description &&
265
+ react_1.default.createElement(Markdown, { text: schema.description }),
266
+ (0, schema_1.getQualifierMessage)(discriminator) &&
267
+ react_1.default.createElement(Markdown, {
268
+ text: (0, schema_1.getQualifierMessage)(discriminator),
269
+ })
270
+ ),
271
+ react_1.default.createElement(
272
+ DiscriminatorTabs_1.default,
273
+ { className: "openapi-tabs__discriminator" },
274
+ Object.keys(discriminator.mapping).map((key, index) =>
275
+ // @ts-ignore
276
+ react_1.default.createElement(
277
+ TabItem_1.default,
278
+ { key: index, label: key, value: `${index}-item-discriminator` },
279
+ react_1.default.createElement(SchemaNode, {
280
+ schema: discriminator.mapping[key],
281
+ schemaType: schemaType,
282
+ })
283
+ )
284
+ )
285
+ )
286
+ )
287
+ );
288
+ };
289
+ const AdditionalProperties = ({ schema, schemaType }) => {
290
+ const additionalProperties = schema.additionalProperties;
291
+ if (!additionalProperties) return null;
292
+ // Handle free-form objects
293
+ if (
294
+ additionalProperties === true ||
295
+ (0, isEmpty_1.default)(additionalProperties)
296
+ ) {
297
+ return react_1.default.createElement(SchemaItem_1.default, {
298
+ name: "property name*",
299
+ required: false,
300
+ schemaName: "any",
301
+ qualifierMessage: (0, schema_1.getQualifierMessage)(schema),
302
+ schema: schema,
303
+ collapsible: false,
304
+ discriminator: false,
305
+ });
306
+ }
307
+ // Handle objects, arrays, complex schemas
308
+ if (
309
+ additionalProperties.properties ||
310
+ additionalProperties.items ||
311
+ additionalProperties.allOf ||
312
+ additionalProperties.additionalProperties ||
313
+ additionalProperties.oneOf ||
314
+ additionalProperties.anyOf
315
+ ) {
316
+ const title =
317
+ additionalProperties.title ||
318
+ (0, schema_1.getSchemaName)(additionalProperties);
319
+ const required = schema.required || false;
320
+ return react_1.default.createElement(SchemaNodeDetails, {
321
+ name: "property name*",
322
+ schemaName: title,
323
+ required: required,
324
+ nullable: schema.nullable,
325
+ schema: additionalProperties,
326
+ schemaType: schemaType,
327
+ });
328
+ }
329
+ // Handle primitive types
330
+ if (
331
+ additionalProperties.type === "string" ||
332
+ additionalProperties.type === "boolean" ||
333
+ additionalProperties.type === "integer" ||
334
+ additionalProperties.type === "number"
335
+ ) {
336
+ const schemaName = (0, schema_1.getSchemaName)(additionalProperties);
337
+ return react_1.default.createElement(SchemaItem_1.default, {
338
+ name: "property name*",
339
+ required: false,
340
+ schemaName: schemaName,
341
+ qualifierMessage: (0, schema_1.getQualifierMessage)(schema),
342
+ schema: additionalProperties,
343
+ collapsible: false,
344
+ discriminator: false,
345
+ children: null,
346
+ });
347
+ }
348
+ // Unknown type
349
+ return null;
350
+ };
351
+ const SchemaNodeDetails = ({
352
+ name,
353
+ schemaName,
354
+ schema,
355
+ required,
356
+ schemaType,
357
+ }) => {
358
+ return react_1.default.createElement(
359
+ SchemaItem_1.default,
360
+ { collapsible: true },
361
+ react_1.default.createElement(
362
+ Details_1.default,
363
+ {
364
+ className: "openapi-markdown__details",
365
+ summary: react_1.default.createElement(Summary, {
366
+ name: name,
367
+ schemaName: schemaName,
368
+ schema: schema,
369
+ required: required,
370
+ }),
371
+ },
372
+ react_1.default.createElement(
373
+ "div",
374
+ { style: { marginLeft: "1rem" } },
375
+ schema.description &&
376
+ react_1.default.createElement(Markdown, { text: schema.description }),
377
+ (0, schema_1.getQualifierMessage)(schema) &&
378
+ react_1.default.createElement(Markdown, {
379
+ text: (0, schema_1.getQualifierMessage)(schema),
380
+ }),
381
+ react_1.default.createElement(SchemaNode, {
382
+ schema: schema,
383
+ schemaType: schemaType,
384
+ })
385
+ )
386
+ )
387
+ );
388
+ };
389
+ const Items = ({ schema, schemaType }) => {
390
+ // Handles case when schema.items has properties
391
+ if (schema.items?.properties) {
392
+ return react_1.default.createElement(
393
+ react_1.default.Fragment,
394
+ null,
395
+ react_1.default.createElement(ArrayBrackets_1.OpeningArrayBracket, null),
396
+ react_1.default.createElement(Properties, {
397
+ schema: schema.items,
398
+ schemaType: schemaType,
399
+ }),
400
+ react_1.default.createElement(ArrayBrackets_1.ClosingArrayBracket, null)
401
+ );
402
+ }
403
+ // Handles case when schema.items has additionalProperties
404
+ if (schema.items?.additionalProperties) {
405
+ return react_1.default.createElement(
406
+ react_1.default.Fragment,
407
+ null,
408
+ react_1.default.createElement(ArrayBrackets_1.OpeningArrayBracket, null),
409
+ react_1.default.createElement(AdditionalProperties, {
410
+ schema: schema.items,
411
+ schemaType: schemaType,
412
+ }),
413
+ react_1.default.createElement(ArrayBrackets_1.ClosingArrayBracket, null)
414
+ );
415
+ }
416
+ // Handles case when schema.items has oneOf or anyOf
417
+ if (schema.items?.oneOf || schema.items?.anyOf) {
418
+ return react_1.default.createElement(
419
+ react_1.default.Fragment,
420
+ null,
421
+ react_1.default.createElement(ArrayBrackets_1.OpeningArrayBracket, null),
422
+ react_1.default.createElement(AnyOneOf, {
423
+ schema: schema.items,
424
+ schemaType: schemaType,
425
+ }),
426
+ react_1.default.createElement(ArrayBrackets_1.ClosingArrayBracket, null)
427
+ );
428
+ }
429
+ // Handles case when schema.items has allOf
430
+ if (schema.items?.allOf) {
431
+ const mergedSchemas = mergeAllOf(schema.items);
432
+ // Handles combo anyOf/oneOf + properties
433
+ if (
434
+ (mergedSchemas.oneOf || mergedSchemas.anyOf) &&
435
+ mergedSchemas.properties
436
+ ) {
437
+ return react_1.default.createElement(
438
+ react_1.default.Fragment,
439
+ null,
440
+ react_1.default.createElement(
441
+ ArrayBrackets_1.OpeningArrayBracket,
442
+ null
443
+ ),
444
+ react_1.default.createElement(AnyOneOf, {
445
+ schema: mergedSchemas,
446
+ schemaType: schemaType,
447
+ }),
448
+ react_1.default.createElement(Properties, {
449
+ schema: mergedSchemas,
450
+ schemaType: schemaType,
451
+ }),
452
+ react_1.default.createElement(ArrayBrackets_1.ClosingArrayBracket, null)
453
+ );
454
+ }
455
+ // Handles only anyOf/oneOf
456
+ if (mergedSchemas.oneOf || mergedSchemas.anyOf) {
457
+ return react_1.default.createElement(
458
+ react_1.default.Fragment,
459
+ null,
460
+ react_1.default.createElement(
461
+ ArrayBrackets_1.OpeningArrayBracket,
462
+ null
463
+ ),
464
+ react_1.default.createElement(AnyOneOf, {
465
+ schema: mergedSchemas,
466
+ schemaType: schemaType,
467
+ }),
468
+ react_1.default.createElement(ArrayBrackets_1.ClosingArrayBracket, null)
469
+ );
470
+ }
471
+ // Handles properties
472
+ if (mergedSchemas.properties) {
473
+ return react_1.default.createElement(
474
+ react_1.default.Fragment,
475
+ null,
476
+ react_1.default.createElement(
477
+ ArrayBrackets_1.OpeningArrayBracket,
478
+ null
479
+ ),
480
+ react_1.default.createElement(Properties, {
481
+ schema: mergedSchemas,
482
+ schemaType: schemaType,
483
+ }),
484
+ react_1.default.createElement(ArrayBrackets_1.ClosingArrayBracket, null)
485
+ );
486
+ }
487
+ }
488
+ // Handles basic types (string, number, integer, boolean, object)
489
+ if (
490
+ schema.items?.type === "string" ||
491
+ schema.items?.type === "number" ||
492
+ schema.items?.type === "integer" ||
493
+ schema.items?.type === "boolean" ||
494
+ schema.items?.type === "object"
495
+ ) {
496
+ return react_1.default.createElement(
497
+ "div",
498
+ { style: { marginLeft: ".5rem" } },
499
+ react_1.default.createElement(ArrayBrackets_1.OpeningArrayBracket, null),
500
+ react_1.default.createElement(SchemaItem_1.default, {
501
+ collapsible: false,
502
+ name: "", // No name for array items
503
+ schemaName: (0, schema_1.getSchemaName)(schema.items),
504
+ qualifierMessage: (0, schema_1.getQualifierMessage)(schema.items),
505
+ schema: schema.items,
506
+ discriminator: false,
507
+ children: null,
508
+ }),
509
+ react_1.default.createElement(ArrayBrackets_1.ClosingArrayBracket, null)
510
+ );
511
+ }
512
+ // Handles fallback case (use createEdges logic)
513
+ return react_1.default.createElement(
514
+ react_1.default.Fragment,
515
+ null,
516
+ react_1.default.createElement(ArrayBrackets_1.OpeningArrayBracket, null),
517
+ Object.entries(schema.items || {}).map(([key, val]) =>
518
+ react_1.default.createElement(SchemaEdge, {
519
+ key: key,
520
+ name: key,
521
+ schema: val,
522
+ schemaType: schemaType,
523
+ required: Array.isArray(schema.required)
524
+ ? schema.required.includes(key)
525
+ : false,
526
+ })
527
+ ),
528
+ react_1.default.createElement(ArrayBrackets_1.ClosingArrayBracket, null)
529
+ );
530
+ };
531
+ const SchemaEdge = ({ name, schema, required, discriminator, schemaType }) => {
532
+ if (
533
+ (schemaType === "request" && schema.readOnly) ||
534
+ (schemaType === "response" && schema.writeOnly)
535
+ ) {
536
+ return null;
537
+ }
538
+ const schemaName = (0, schema_1.getSchemaName)(schema);
539
+ if (discriminator && discriminator.propertyName === name) {
540
+ return react_1.default.createElement(PropertyDiscriminator, {
541
+ name: name,
542
+ schemaName: schemaName,
543
+ schema: schema,
544
+ schemaType: schemaType,
545
+ discriminator: discriminator,
546
+ required: required,
547
+ });
548
+ }
549
+ if (schema.oneOf || schema.anyOf) {
550
+ // return <AnyOneOf schema={schema} schemaType={schemaType} />;
551
+ return react_1.default.createElement(SchemaNodeDetails, {
552
+ name: name,
553
+ schemaName: schemaName,
554
+ schemaType: schemaType,
555
+ required: required,
556
+ schema: schema,
557
+ nullable: schema.nullable,
558
+ });
559
+ }
560
+ if (schema.properties) {
561
+ return react_1.default.createElement(SchemaNodeDetails, {
562
+ name: name,
563
+ schemaName: schemaName,
564
+ schemaType: schemaType,
565
+ required: required,
566
+ schema: schema,
567
+ nullable: schema.nullable,
568
+ });
569
+ }
570
+ if (schema.additionalProperties) {
571
+ return react_1.default.createElement(SchemaNodeDetails, {
572
+ name: name,
573
+ schemaName: schemaName,
574
+ schemaType: schemaType,
575
+ required: required,
576
+ schema: schema,
577
+ nullable: schema.nullable,
578
+ });
579
+ }
580
+ if (schema.items?.properties) {
581
+ return react_1.default.createElement(SchemaNodeDetails, {
582
+ name: name,
583
+ schemaName: schemaName,
584
+ required: required,
585
+ nullable: schema.nullable,
586
+ schema: schema,
587
+ schemaType: schemaType,
588
+ });
589
+ }
590
+ if (schema.items?.anyOf || schema.items?.oneOf) {
591
+ return react_1.default.createElement(SchemaNodeDetails, {
592
+ name: name,
593
+ schemaName: schemaName,
594
+ required: required,
595
+ nullable: schema.nullable,
596
+ schema: schema,
597
+ schemaType: schemaType,
598
+ });
599
+ }
600
+ if (schema.allOf) {
601
+ // handle circular properties
602
+ if (
603
+ schema.allOf &&
604
+ schema.allOf.length &&
605
+ schema.allOf.length === 1 &&
606
+ typeof schema.allOf[0] === "string"
607
+ ) {
608
+ return react_1.default.createElement(SchemaItem_1.default, {
609
+ collapsible: false,
610
+ name: name,
611
+ required: Array.isArray(required) ? required.includes(name) : required,
612
+ schemaName: schema.allOf[0],
613
+ qualifierMessage: undefined,
614
+ schema: schema.allOf[0],
615
+ discriminator: false,
616
+ children: null,
617
+ });
618
+ }
619
+ const mergedSchemas = mergeAllOf(schema);
620
+ if (
621
+ (schemaType === "request" && mergedSchemas.readOnly) ||
622
+ (schemaType === "response" && mergedSchemas.writeOnly)
623
+ ) {
624
+ return null;
625
+ }
626
+ const mergedSchemaName = (0, schema_1.getSchemaName)(mergedSchemas);
627
+ if (mergedSchemas.oneOf || mergedSchemas.anyOf) {
628
+ return react_1.default.createElement(SchemaNodeDetails, {
629
+ name: name,
630
+ schemaName: mergedSchemaName,
631
+ required: Array.isArray(mergedSchemas.required)
632
+ ? mergedSchemas.required.includes(name)
633
+ : mergedSchemas.required,
634
+ nullable: mergedSchemas.nullable,
635
+ schema: mergedSchemas,
636
+ schemaType: schemaType,
637
+ });
638
+ }
639
+ if (mergedSchemas.properties !== undefined) {
640
+ return react_1.default.createElement(SchemaNodeDetails, {
641
+ name: name,
642
+ schemaName: mergedSchemaName,
643
+ required: Array.isArray(mergedSchemas.required)
644
+ ? mergedSchemas.required.includes(name)
645
+ : mergedSchemas.required,
646
+ nullable: mergedSchemas.nullable,
647
+ schema: mergedSchemas,
648
+ schemaType: schemaType,
649
+ });
650
+ }
651
+ if (mergedSchemas.items?.properties) {
652
+ react_1.default.createElement(SchemaNodeDetails, {
653
+ name: name,
654
+ schemaName: mergedSchemaName,
655
+ required: Array.isArray(mergedSchemas.required)
656
+ ? mergedSchemas.required.includes(name)
657
+ : mergedSchemas.required,
658
+ nullable: mergedSchemas.nullable,
659
+ schema: mergedSchemas,
660
+ schemaType: schemaType,
661
+ });
662
+ }
663
+ return react_1.default.createElement(SchemaItem_1.default, {
664
+ collapsible: false,
665
+ name: name,
666
+ required: Array.isArray(required) ? required.includes(name) : required,
667
+ schemaName: mergedSchemaName,
668
+ qualifierMessage: (0, schema_1.getQualifierMessage)(mergedSchemas),
669
+ schema: mergedSchemas,
670
+ discriminator: false,
671
+ children: null,
672
+ });
673
+ }
674
+ return react_1.default.createElement(SchemaItem_1.default, {
675
+ collapsible: false,
676
+ name: name,
677
+ required: Array.isArray(required) ? required.includes(name) : required,
678
+ schemaName: schemaName,
679
+ qualifierMessage: (0, schema_1.getQualifierMessage)(schema),
680
+ schema: schema,
681
+ discriminator: false,
682
+ children: null,
683
+ });
684
+ };
685
+ const SchemaNode = ({ schema, schemaType }) => {
686
+ if (
687
+ (schemaType === "request" && schema.readOnly) ||
688
+ (schemaType === "response" && schema.writeOnly)
689
+ ) {
690
+ return null;
691
+ }
692
+ if (schema.allOf) {
693
+ const mergedSchemas = mergeAllOf(schema);
694
+ if (
695
+ (schemaType === "request" && mergedSchemas.readOnly) ||
696
+ (schemaType === "response" && mergedSchemas.writeOnly)
697
+ ) {
698
+ return null;
699
+ }
700
+ return react_1.default.createElement(
701
+ "div",
702
+ null,
703
+ mergedSchemas.oneOf &&
704
+ react_1.default.createElement(AnyOneOf, {
705
+ schema: mergedSchemas,
706
+ schemaType: schemaType,
707
+ }),
708
+ mergedSchemas.anyOf &&
709
+ react_1.default.createElement(AnyOneOf, {
710
+ schema: mergedSchemas,
711
+ schemaType: schemaType,
712
+ }),
713
+ mergedSchemas.properties &&
714
+ react_1.default.createElement(Properties, {
715
+ schema: mergedSchemas,
716
+ schemaType: schemaType,
717
+ }),
718
+ mergedSchemas.items &&
719
+ react_1.default.createElement(Items, {
720
+ schema: mergedSchemas,
721
+ schemaType: schemaType,
722
+ })
723
+ );
724
+ }
725
+ // Handle primitives
726
+ if (
727
+ schema.type &&
728
+ !schema.oneOf &&
729
+ !schema.anyOf &&
730
+ !schema.properties &&
731
+ !schema.allOf &&
732
+ !schema.items &&
733
+ !schema.additionalProperties
734
+ ) {
735
+ const schemaName = (0, schema_1.getSchemaName)(schema);
736
+ return react_1.default.createElement(SchemaItem_1.default, {
737
+ collapsible: false,
738
+ name: schema.type,
739
+ required: Boolean(schema.required),
740
+ schemaName: schemaName,
741
+ qualifierMessage: (0, schema_1.getQualifierMessage)(schema),
742
+ schema: schema,
743
+ discriminator: false,
744
+ children: null,
745
+ });
746
+ }
747
+ return react_1.default.createElement(
748
+ "div",
749
+ null,
750
+ schema.oneOf &&
751
+ react_1.default.createElement(AnyOneOf, {
752
+ schema: schema,
753
+ schemaType: schemaType,
754
+ }),
755
+ schema.anyOf &&
756
+ react_1.default.createElement(AnyOneOf, {
757
+ schema: schema,
758
+ schemaType: schemaType,
759
+ }),
760
+ schema.properties &&
761
+ react_1.default.createElement(Properties, {
762
+ schema: schema,
763
+ schemaType: schemaType,
764
+ }),
765
+ schema.additionalProperties &&
766
+ react_1.default.createElement(AdditionalProperties, {
767
+ schema: schema,
768
+ schemaType: schemaType,
769
+ }),
770
+ schema.items &&
771
+ react_1.default.createElement(Items, {
772
+ schema: schema,
773
+ schemaType: schemaType,
774
+ })
775
+ );
776
+ };
777
+ exports.default = SchemaNode;