docusaurus-theme-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 (312) hide show
  1. package/LICENSE +21 -0
  2. package/babel.config.js +35 -0
  3. package/lib/index.d.ts +2 -0
  4. package/lib/index.js +81 -0
  5. package/lib/markdown/createDescription.d.ts +1 -0
  6. package/lib/markdown/createDescription.js +15 -0
  7. package/lib/markdown/schema.d.ts +3 -0
  8. package/lib/markdown/schema.js +149 -0
  9. package/lib/markdown/utils.d.ts +10 -0
  10. package/lib/markdown/utils.js +49 -0
  11. package/lib/markdown/utils.test.d.ts +1 -0
  12. package/lib/markdown/utils.test.js +43 -0
  13. package/lib/theme/ApiExplorer/Accept/index.d.ts +3 -0
  14. package/lib/theme/ApiExplorer/Accept/index.js +38 -0
  15. package/lib/theme/ApiExplorer/Accept/slice.d.ts +11 -0
  16. package/lib/theme/ApiExplorer/Accept/slice.js +22 -0
  17. package/lib/theme/ApiExplorer/ApiCodeBlock/Container/_Container.scss +7 -0
  18. package/lib/theme/ApiExplorer/ApiCodeBlock/Container/index.d.ts +4 -0
  19. package/lib/theme/ApiExplorer/ApiCodeBlock/Container/index.js +35 -0
  20. package/lib/theme/ApiExplorer/ApiCodeBlock/Content/Element.d.ts +3 -0
  21. package/lib/theme/ApiExplorer/ApiCodeBlock/Content/Element.js +41 -0
  22. package/lib/theme/ApiExplorer/ApiCodeBlock/Content/String.d.ts +3 -0
  23. package/lib/theme/ApiExplorer/ApiCodeBlock/Content/String.js +153 -0
  24. package/lib/theme/ApiExplorer/ApiCodeBlock/Content/_Content.scss +91 -0
  25. package/lib/theme/ApiExplorer/ApiCodeBlock/CopyButton/_CopyButton.scss +44 -0
  26. package/lib/theme/ApiExplorer/ApiCodeBlock/CopyButton/index.d.ts +3 -0
  27. package/lib/theme/ApiExplorer/ApiCodeBlock/CopyButton/index.js +147 -0
  28. package/lib/theme/ApiExplorer/ApiCodeBlock/ExitButton/_ExitButton.scss +16 -0
  29. package/lib/theme/ApiExplorer/ApiCodeBlock/ExitButton/index.d.ts +6 -0
  30. package/lib/theme/ApiExplorer/ApiCodeBlock/ExitButton/index.js +58 -0
  31. package/lib/theme/ApiExplorer/ApiCodeBlock/ExpandButton/_ExpandButton.scss +62 -0
  32. package/lib/theme/ApiExplorer/ApiCodeBlock/ExpandButton/index.d.ts +14 -0
  33. package/lib/theme/ApiExplorer/ApiCodeBlock/ExpandButton/index.js +248 -0
  34. package/lib/theme/ApiExplorer/ApiCodeBlock/Line/_Line.scss +34 -0
  35. package/lib/theme/ApiExplorer/ApiCodeBlock/Line/index.d.ts +3 -0
  36. package/lib/theme/ApiExplorer/ApiCodeBlock/Line/index.js +59 -0
  37. package/lib/theme/ApiExplorer/ApiCodeBlock/WordWrapButton/_WordWrapButton.scss +10 -0
  38. package/lib/theme/ApiExplorer/ApiCodeBlock/WordWrapButton/index.d.ts +7 -0
  39. package/lib/theme/ApiExplorer/ApiCodeBlock/WordWrapButton/index.js +51 -0
  40. package/lib/theme/ApiExplorer/ApiCodeBlock/index.d.ts +3 -0
  41. package/lib/theme/ApiExplorer/ApiCodeBlock/index.js +110 -0
  42. package/lib/theme/ApiExplorer/Authorization/auth-types.d.ts +3 -0
  43. package/lib/theme/ApiExplorer/Authorization/auth-types.js +28 -0
  44. package/lib/theme/ApiExplorer/Authorization/index.d.ts +3 -0
  45. package/lib/theme/ApiExplorer/Authorization/index.js +160 -0
  46. package/lib/theme/ApiExplorer/Authorization/slice.d.ts +40 -0
  47. package/lib/theme/ApiExplorer/Authorization/slice.js +102 -0
  48. package/lib/theme/ApiExplorer/Body/index.d.ts +10 -0
  49. package/lib/theme/ApiExplorer/Body/index.js +381 -0
  50. package/lib/theme/ApiExplorer/Body/json2xml.js +43 -0
  51. package/lib/theme/ApiExplorer/Body/slice.d.ts +82 -0
  52. package/lib/theme/ApiExplorer/Body/slice.js +97 -0
  53. package/lib/theme/ApiExplorer/CodeSnippets/code-snippets-types.d.ts +21 -0
  54. package/lib/theme/ApiExplorer/CodeSnippets/code-snippets-types.js +8 -0
  55. package/lib/theme/ApiExplorer/CodeSnippets/index.d.ts +10 -0
  56. package/lib/theme/ApiExplorer/CodeSnippets/index.js +389 -0
  57. package/lib/theme/ApiExplorer/CodeSnippets/languages.d.ts +5 -0
  58. package/lib/theme/ApiExplorer/CodeSnippets/languages.js +95 -0
  59. package/lib/theme/ApiExplorer/CodeSnippets/languages.json +1290 -0
  60. package/lib/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +501 -0
  61. package/lib/theme/ApiExplorer/CodeTabs/index.d.ts +15 -0
  62. package/lib/theme/ApiExplorer/CodeTabs/index.js +271 -0
  63. package/lib/theme/ApiExplorer/ContentType/index.d.ts +3 -0
  64. package/lib/theme/ApiExplorer/ContentType/index.js +40 -0
  65. package/lib/theme/ApiExplorer/ContentType/slice.d.ts +11 -0
  66. package/lib/theme/ApiExplorer/ContentType/slice.js +22 -0
  67. package/lib/theme/ApiExplorer/Export/index.d.ts +3 -0
  68. package/lib/theme/ApiExplorer/Export/index.js +57 -0
  69. package/lib/theme/ApiExplorer/FloatingButton/_FloatingButton.scss +27 -0
  70. package/lib/theme/ApiExplorer/FloatingButton/index.d.ts +8 -0
  71. package/lib/theme/ApiExplorer/FloatingButton/index.js +28 -0
  72. package/lib/theme/ApiExplorer/FormFileUpload/_FormFileUpload.scss +74 -0
  73. package/lib/theme/ApiExplorer/FormFileUpload/index.d.ts +7 -0
  74. package/lib/theme/ApiExplorer/FormFileUpload/index.js +173 -0
  75. package/lib/theme/ApiExplorer/FormItem/_FormItem.scss +21 -0
  76. package/lib/theme/ApiExplorer/FormItem/index.d.ts +10 -0
  77. package/lib/theme/ApiExplorer/FormItem/index.js +44 -0
  78. package/lib/theme/ApiExplorer/FormMultiSelect/_FormMultiSelect.scss +30 -0
  79. package/lib/theme/ApiExplorer/FormMultiSelect/index.d.ts +9 -0
  80. package/lib/theme/ApiExplorer/FormMultiSelect/index.js +51 -0
  81. package/lib/theme/ApiExplorer/FormSelect/_FormSelect.scss +43 -0
  82. package/lib/theme/ApiExplorer/FormSelect/index.d.ts +8 -0
  83. package/lib/theme/ApiExplorer/FormSelect/index.js +35 -0
  84. package/lib/theme/ApiExplorer/FormTextInput/_FormTextInput.scss +34 -0
  85. package/lib/theme/ApiExplorer/FormTextInput/index.d.ts +9 -0
  86. package/lib/theme/ApiExplorer/FormTextInput/index.js +73 -0
  87. package/lib/theme/ApiExplorer/LiveEditor/_LiveEditor.scss +15 -0
  88. package/lib/theme/ApiExplorer/LiveEditor/index.d.ts +6 -0
  89. package/lib/theme/ApiExplorer/LiveEditor/index.js +168 -0
  90. package/lib/theme/ApiExplorer/MethodEndpoint/_MethodEndpoint.scss +22 -0
  91. package/lib/theme/ApiExplorer/MethodEndpoint/index.d.ts +8 -0
  92. package/lib/theme/ApiExplorer/MethodEndpoint/index.js +86 -0
  93. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamArrayFormItem.d.ts +6 -0
  94. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamArrayFormItem.js +220 -0
  95. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamBooleanFormItem.d.ts +6 -0
  96. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamBooleanFormItem.js +63 -0
  97. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.d.ts +6 -0
  98. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.js +89 -0
  99. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamSelectFormItem.d.ts +6 -0
  100. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamSelectFormItem.js +63 -0
  101. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamTextFormItem.d.ts +6 -0
  102. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamTextFormItem.js +38 -0
  103. package/lib/theme/ApiExplorer/ParamOptions/_ParamOptions.scss +123 -0
  104. package/lib/theme/ApiExplorer/ParamOptions/index.d.ts +7 -0
  105. package/lib/theme/ApiExplorer/ParamOptions/index.js +223 -0
  106. package/lib/theme/ApiExplorer/ParamOptions/slice.d.ts +17 -0
  107. package/lib/theme/ApiExplorer/ParamOptions/slice.js +25 -0
  108. package/lib/theme/ApiExplorer/Request/_Request.scss +129 -0
  109. package/lib/theme/ApiExplorer/Request/index.d.ts +6 -0
  110. package/lib/theme/ApiExplorer/Request/index.js +396 -0
  111. package/lib/theme/ApiExplorer/Request/makeRequest.d.ts +4 -0
  112. package/lib/theme/ApiExplorer/Request/makeRequest.js +222 -0
  113. package/lib/theme/ApiExplorer/Response/_Response.scss +121 -0
  114. package/lib/theme/ApiExplorer/Response/index.d.ts +6 -0
  115. package/lib/theme/ApiExplorer/Response/index.js +193 -0
  116. package/lib/theme/ApiExplorer/Response/slice.d.ts +17 -0
  117. package/lib/theme/ApiExplorer/Response/slice.js +51 -0
  118. package/lib/theme/ApiExplorer/SecuritySchemes/index.d.ts +3 -0
  119. package/lib/theme/ApiExplorer/SecuritySchemes/index.js +380 -0
  120. package/lib/theme/ApiExplorer/Server/_Server.scss +26 -0
  121. package/lib/theme/ApiExplorer/Server/index.d.ts +3 -0
  122. package/lib/theme/ApiExplorer/Server/index.js +199 -0
  123. package/lib/theme/ApiExplorer/Server/slice.d.ts +13 -0
  124. package/lib/theme/ApiExplorer/Server/slice.js +33 -0
  125. package/lib/theme/ApiExplorer/buildPostmanRequest.d.ts +20 -0
  126. package/lib/theme/ApiExplorer/buildPostmanRequest.js +465 -0
  127. package/lib/theme/ApiExplorer/index.d.ts +7 -0
  128. package/lib/theme/ApiExplorer/index.js +41 -0
  129. package/lib/theme/ApiExplorer/persistanceMiddleware.d.ts +3 -0
  130. package/lib/theme/ApiExplorer/persistanceMiddleware.js +54 -0
  131. package/lib/theme/ApiExplorer/storage-utils.d.ts +4 -0
  132. package/lib/theme/ApiExplorer/storage-utils.js +41 -0
  133. package/lib/theme/ApiItem/Layout/index.d.ts +3 -0
  134. package/lib/theme/ApiItem/Layout/index.js +121 -0
  135. package/lib/theme/ApiItem/Layout/styles.module.css +17 -0
  136. package/lib/theme/ApiItem/hooks.d.ts +12 -0
  137. package/lib/theme/ApiItem/hooks.js +13 -0
  138. package/lib/theme/ApiItem/index.d.ts +2 -0
  139. package/lib/theme/ApiItem/index.js +238 -0
  140. package/lib/theme/ApiItem/store.d.ts +46 -0
  141. package/lib/theme/ApiItem/store.js +53 -0
  142. package/lib/theme/ApiLogo/index.d.ts +2 -0
  143. package/lib/theme/ApiLogo/index.js +51 -0
  144. package/lib/theme/ApiTabs/_ApiTabs.scss +142 -0
  145. package/lib/theme/ApiTabs/index.d.ts +7 -0
  146. package/lib/theme/ApiTabs/index.js +270 -0
  147. package/lib/theme/ArrayBrackets/index.d.ts +3 -0
  148. package/lib/theme/ArrayBrackets/index.js +50 -0
  149. package/lib/theme/DiscriminatorTabs/_DiscriminatorTabs.scss +98 -0
  150. package/lib/theme/DiscriminatorTabs/index.d.ts +3 -0
  151. package/lib/theme/DiscriminatorTabs/index.js +258 -0
  152. package/lib/theme/Markdown/Details/_Details.scss +122 -0
  153. package/lib/theme/Markdown/index.js +179 -0
  154. package/lib/theme/MimeTabs/_MimeTabs.scss +70 -0
  155. package/lib/theme/MimeTabs/index.d.ts +6 -0
  156. package/lib/theme/MimeTabs/index.js +286 -0
  157. package/lib/theme/OperationTabs/_OperationTabs.scss +72 -0
  158. package/lib/theme/OperationTabs/index.d.ts +3 -0
  159. package/lib/theme/OperationTabs/index.js +248 -0
  160. package/lib/theme/ParamsDetails/index.d.ts +6 -0
  161. package/lib/theme/ParamsDetails/index.js +85 -0
  162. package/lib/theme/ParamsItem/_ParamsItem.scss +54 -0
  163. package/lib/theme/ParamsItem/index.d.ts +25 -0
  164. package/lib/theme/ParamsItem/index.js +218 -0
  165. package/lib/theme/RequestSchema/index.d.ts +15 -0
  166. package/lib/theme/RequestSchema/index.js +194 -0
  167. package/lib/theme/ResponseExamples/index.d.ts +18 -0
  168. package/lib/theme/ResponseExamples/index.js +193 -0
  169. package/lib/theme/ResponseHeaders/index.d.ts +13 -0
  170. package/lib/theme/ResponseHeaders/index.js +39 -0
  171. package/lib/theme/ResponseSamples/_ResponseSamples.scss +3 -0
  172. package/lib/theme/ResponseSamples/index.d.ts +8 -0
  173. package/lib/theme/ResponseSamples/index.js +27 -0
  174. package/lib/theme/ResponseSchema/index.d.ts +15 -0
  175. package/lib/theme/ResponseSchema/index.js +159 -0
  176. package/lib/theme/Schema/index.d.ts +8 -0
  177. package/lib/theme/Schema/index.js +885 -0
  178. package/lib/theme/SchemaItem/_SchemaItem.scss +89 -0
  179. package/lib/theme/SchemaItem/index.d.ts +12 -0
  180. package/lib/theme/SchemaItem/index.js +213 -0
  181. package/lib/theme/SchemaTabs/_SchemaTabs.scss +61 -0
  182. package/lib/theme/SchemaTabs/index.d.ts +3 -0
  183. package/lib/theme/SchemaTabs/index.js +255 -0
  184. package/lib/theme/SkeletonLoader/index.d.ts +6 -0
  185. package/lib/theme/SkeletonLoader/index.js +20 -0
  186. package/lib/theme/StatusCodes/index.d.ts +9 -0
  187. package/lib/theme/StatusCodes/index.js +81 -0
  188. package/lib/theme/styles.scss +212 -0
  189. package/lib/types.d.ts +157 -0
  190. package/lib/types.js +8 -0
  191. package/package.json +83 -0
  192. package/src/index.ts +85 -0
  193. package/src/markdown/createDescription.ts +13 -0
  194. package/src/markdown/schema.ts +181 -0
  195. package/src/markdown/utils.test.ts +49 -0
  196. package/src/markdown/utils.ts +59 -0
  197. package/src/plugin-content-docs.d.ts +20 -0
  198. package/src/postman-code-generators.d.ts +9 -0
  199. package/src/react-magic-dropzone.d.ts +9 -0
  200. package/src/theme/ApiExplorer/Accept/index.tsx +36 -0
  201. package/src/theme/ApiExplorer/Accept/slice.ts +29 -0
  202. package/src/theme/ApiExplorer/ApiCodeBlock/Container/_Container.scss +7 -0
  203. package/src/theme/ApiExplorer/ApiCodeBlock/Container/index.tsx +32 -0
  204. package/src/theme/ApiExplorer/ApiCodeBlock/Content/Element.tsx +34 -0
  205. package/src/theme/ApiExplorer/ApiCodeBlock/Content/String.tsx +134 -0
  206. package/src/theme/ApiExplorer/ApiCodeBlock/Content/_Content.scss +91 -0
  207. package/src/theme/ApiExplorer/ApiCodeBlock/CopyButton/_CopyButton.scss +44 -0
  208. package/src/theme/ApiExplorer/ApiCodeBlock/CopyButton/index.tsx +79 -0
  209. package/src/theme/ApiExplorer/ApiCodeBlock/ExitButton/_ExitButton.scss +16 -0
  210. package/src/theme/ApiExplorer/ApiCodeBlock/ExitButton/index.tsx +55 -0
  211. package/src/theme/ApiExplorer/ApiCodeBlock/ExpandButton/_ExpandButton.scss +62 -0
  212. package/src/theme/ApiExplorer/ApiCodeBlock/ExpandButton/index.tsx +166 -0
  213. package/src/theme/ApiExplorer/ApiCodeBlock/Line/_Line.scss +34 -0
  214. package/src/theme/ApiExplorer/ApiCodeBlock/Line/index.tsx +48 -0
  215. package/src/theme/ApiExplorer/ApiCodeBlock/WordWrapButton/_WordWrapButton.scss +10 -0
  216. package/src/theme/ApiExplorer/ApiCodeBlock/WordWrapButton/index.tsx +54 -0
  217. package/src/theme/ApiExplorer/ApiCodeBlock/index.tsx +45 -0
  218. package/src/theme/ApiExplorer/Authorization/auth-types.ts +30 -0
  219. package/src/theme/ApiExplorer/Authorization/index.tsx +158 -0
  220. package/src/theme/ApiExplorer/Authorization/slice.ts +146 -0
  221. package/src/theme/ApiExplorer/Body/index.tsx +376 -0
  222. package/src/theme/ApiExplorer/Body/json2xml.js +43 -0
  223. package/src/theme/ApiExplorer/Body/slice.ts +133 -0
  224. package/src/theme/ApiExplorer/CodeSnippets/code-snippets-types.ts +57 -0
  225. package/src/theme/ApiExplorer/CodeSnippets/index.tsx +338 -0
  226. package/src/theme/ApiExplorer/CodeSnippets/languages.json +1290 -0
  227. package/src/theme/ApiExplorer/CodeSnippets/languages.ts +96 -0
  228. package/src/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +501 -0
  229. package/src/theme/ApiExplorer/CodeTabs/index.tsx +248 -0
  230. package/src/theme/ApiExplorer/ContentType/index.tsx +38 -0
  231. package/src/theme/ApiExplorer/ContentType/slice.ts +29 -0
  232. package/src/theme/ApiExplorer/Export/index.tsx +47 -0
  233. package/src/theme/ApiExplorer/FloatingButton/_FloatingButton.scss +27 -0
  234. package/src/theme/ApiExplorer/FloatingButton/index.tsx +29 -0
  235. package/src/theme/ApiExplorer/FormFileUpload/_FormFileUpload.scss +74 -0
  236. package/src/theme/ApiExplorer/FormFileUpload/index.tsx +119 -0
  237. package/src/theme/ApiExplorer/FormItem/_FormItem.scss +21 -0
  238. package/src/theme/ApiExplorer/FormItem/index.tsx +33 -0
  239. package/src/theme/ApiExplorer/FormMultiSelect/_FormMultiSelect.scss +30 -0
  240. package/src/theme/ApiExplorer/FormMultiSelect/index.tsx +57 -0
  241. package/src/theme/ApiExplorer/FormSelect/_FormSelect.scss +43 -0
  242. package/src/theme/ApiExplorer/FormSelect/index.tsx +38 -0
  243. package/src/theme/ApiExplorer/FormTextInput/_FormTextInput.scss +34 -0
  244. package/src/theme/ApiExplorer/FormTextInput/index.tsx +80 -0
  245. package/src/theme/ApiExplorer/LiveEditor/_LiveEditor.scss +15 -0
  246. package/src/theme/ApiExplorer/LiveEditor/index.tsx +114 -0
  247. package/src/theme/ApiExplorer/MethodEndpoint/_MethodEndpoint.scss +22 -0
  248. package/src/theme/ApiExplorer/MethodEndpoint/index.tsx +91 -0
  249. package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamArrayFormItem.tsx +175 -0
  250. package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamBooleanFormItem.tsx +64 -0
  251. package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.tsx +86 -0
  252. package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamSelectFormItem.tsx +65 -0
  253. package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamTextFormItem.tsx +38 -0
  254. package/src/theme/ApiExplorer/ParamOptions/_ParamOptions.scss +123 -0
  255. package/src/theme/ApiExplorer/ParamOptions/index.tsx +146 -0
  256. package/src/theme/ApiExplorer/ParamOptions/slice.ts +37 -0
  257. package/src/theme/ApiExplorer/Request/_Request.scss +129 -0
  258. package/src/theme/ApiExplorer/Request/index.tsx +309 -0
  259. package/src/theme/ApiExplorer/Request/makeRequest.ts +254 -0
  260. package/src/theme/ApiExplorer/Response/_Response.scss +121 -0
  261. package/src/theme/ApiExplorer/Response/index.tsx +157 -0
  262. package/src/theme/ApiExplorer/Response/slice.ts +52 -0
  263. package/src/theme/ApiExplorer/SecuritySchemes/index.tsx +287 -0
  264. package/src/theme/ApiExplorer/Server/_Server.scss +26 -0
  265. package/src/theme/ApiExplorer/Server/index.tsx +130 -0
  266. package/src/theme/ApiExplorer/Server/slice.ts +39 -0
  267. package/src/theme/ApiExplorer/buildPostmanRequest.ts +526 -0
  268. package/src/theme/ApiExplorer/index.tsx +41 -0
  269. package/src/theme/ApiExplorer/persistanceMiddleware.ts +71 -0
  270. package/src/theme/ApiExplorer/postman-collection.d.ts +10 -0
  271. package/src/theme/ApiExplorer/react-modal.d.ts +8 -0
  272. package/src/theme/ApiExplorer/storage-utils.ts +39 -0
  273. package/src/theme/ApiItem/Layout/index.tsx +85 -0
  274. package/src/theme/ApiItem/Layout/styles.module.css +17 -0
  275. package/src/theme/ApiItem/hooks.ts +13 -0
  276. package/src/theme/ApiItem/index.tsx +222 -0
  277. package/src/theme/ApiItem/store.ts +51 -0
  278. package/src/theme/ApiLogo/index.tsx +52 -0
  279. package/src/theme/ApiTabs/_ApiTabs.scss +142 -0
  280. package/src/theme/ApiTabs/index.tsx +238 -0
  281. package/src/theme/ArrayBrackets/index.tsx +37 -0
  282. package/src/theme/DiscriminatorTabs/_DiscriminatorTabs.scss +98 -0
  283. package/src/theme/DiscriminatorTabs/index.tsx +229 -0
  284. package/src/theme/Markdown/Details/_Details.scss +122 -0
  285. package/src/theme/Markdown/index.js +179 -0
  286. package/src/theme/MimeTabs/_MimeTabs.scss +70 -0
  287. package/src/theme/MimeTabs/index.tsx +257 -0
  288. package/src/theme/OperationTabs/_OperationTabs.scss +72 -0
  289. package/src/theme/OperationTabs/index.tsx +220 -0
  290. package/src/theme/ParamsDetails/index.tsx +81 -0
  291. package/src/theme/ParamsItem/_ParamsItem.scss +54 -0
  292. package/src/theme/ParamsItem/index.tsx +205 -0
  293. package/src/theme/RequestSchema/index.tsx +157 -0
  294. package/src/theme/ResponseExamples/index.tsx +192 -0
  295. package/src/theme/ResponseHeaders/index.tsx +49 -0
  296. package/src/theme/ResponseSamples/_ResponseSamples.scss +3 -0
  297. package/src/theme/ResponseSamples/index.tsx +31 -0
  298. package/src/theme/ResponseSchema/index.tsx +144 -0
  299. package/src/theme/Schema/index.tsx +939 -0
  300. package/src/theme/SchemaItem/_SchemaItem.scss +89 -0
  301. package/src/theme/SchemaItem/index.tsx +198 -0
  302. package/src/theme/SchemaTabs/_SchemaTabs.scss +61 -0
  303. package/src/theme/SchemaTabs/index.tsx +224 -0
  304. package/src/theme/SkeletonLoader/index.tsx +18 -0
  305. package/src/theme/StatusCodes/index.tsx +72 -0
  306. package/src/theme/styles.scss +212 -0
  307. package/src/theme-classic.d.ts +80 -0
  308. package/src/theme-openapi.d.ts +288 -0
  309. package/src/theme-translations.d.ts +9 -0
  310. package/src/types.ts +182 -0
  311. package/tsconfig.json +16 -0
  312. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,939 @@
1
+ /* ============================================================================
2
+ * Copyright (c) Palo Alto Networks
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ * ========================================================================== */
7
+
8
+ import React from "react";
9
+
10
+ import { ClosingArrayBracket, OpeningArrayBracket } from "@theme/ArrayBrackets";
11
+ import Details from "@theme/Details";
12
+ import DiscriminatorTabs from "@theme/DiscriminatorTabs";
13
+ import Markdown from "@theme/Markdown";
14
+ import SchemaItem from "@theme/SchemaItem";
15
+ import SchemaTabs from "@theme/SchemaTabs";
16
+ import TabItem from "@theme/TabItem";
17
+ // eslint-disable-next-line import/no-extraneous-dependencies
18
+ import { merge } from "allof-merge";
19
+ import clsx from "clsx";
20
+ import {
21
+ getQualifierMessage,
22
+ getSchemaName,
23
+ } from "docusaurus-plugin-openapi-docs/lib/markdown/schema";
24
+ import { SchemaObject } from "docusaurus-plugin-openapi-docs/lib/openapi/types";
25
+ import isEmpty from "lodash/isEmpty";
26
+
27
+ // eslint-disable-next-line import/no-extraneous-dependencies
28
+ // const jsonSchemaMergeAllOf = require("json-schema-merge-allof");
29
+
30
+ const mergeAllOf = (allOf: any) => {
31
+ const onMergeError = (msg: string) => {
32
+ console.warn(msg);
33
+ };
34
+
35
+ const mergedSchemas = merge(allOf, { onMergeError });
36
+
37
+ return mergedSchemas;
38
+ };
39
+
40
+ interface MarkdownProps {
41
+ text: string | undefined;
42
+ }
43
+
44
+ // Renders string as markdown, useful for descriptions and qualifiers
45
+ const MarkdownWrapper: React.FC<MarkdownProps> = ({ text }) => {
46
+ return (
47
+ <div style={{ marginTop: ".5rem", marginBottom: ".5rem" }}>
48
+ <Markdown>{text}</Markdown>
49
+ </div>
50
+ );
51
+ };
52
+
53
+ interface SummaryProps {
54
+ name: string;
55
+ schemaName: string | undefined;
56
+ schema: {
57
+ deprecated?: boolean;
58
+ nullable?: boolean;
59
+ };
60
+ required?: boolean | string[];
61
+ }
62
+
63
+ const Summary: React.FC<SummaryProps> = ({
64
+ name,
65
+ schemaName,
66
+ schema,
67
+ required,
68
+ }) => {
69
+ const { deprecated, nullable } = schema;
70
+
71
+ const isRequired = Array.isArray(required)
72
+ ? required.includes(name)
73
+ : required === true;
74
+
75
+ return (
76
+ <summary>
77
+ <span className="openapi-schema__container">
78
+ <strong
79
+ className={clsx("openapi-schema__property", {
80
+ "openapi-schema__strikethrough": deprecated,
81
+ })}
82
+ >
83
+ {name}
84
+ </strong>
85
+ <span className="openapi-schema__name"> {schemaName}</span>
86
+ {(isRequired || deprecated || nullable) && (
87
+ <span className="openapi-schema__divider" />
88
+ )}
89
+ {nullable && <span className="openapi-schema__nullable">nullable</span>}
90
+ {isRequired && (
91
+ <span className="openapi-schema__required">required</span>
92
+ )}
93
+ {deprecated && (
94
+ <span className="openapi-schema__deprecated">deprecated</span>
95
+ )}
96
+ </span>
97
+ </summary>
98
+ );
99
+ };
100
+
101
+ // Common props interface
102
+ interface SchemaProps {
103
+ schema: SchemaObject;
104
+ schemaType: "request" | "response";
105
+ }
106
+
107
+ const AnyOneOf: React.FC<SchemaProps> = ({ schema, schemaType }) => {
108
+ const type = schema.oneOf ? "oneOf" : "anyOf";
109
+ return (
110
+ <>
111
+ <span className="badge badge--info" style={{ marginBottom: "1rem" }}>
112
+ {type}
113
+ </span>
114
+ <SchemaTabs>
115
+ {schema[type]?.map((anyOneSchema: any, index: number) => {
116
+ const label = anyOneSchema.title || `MOD${index + 1}`;
117
+ return (
118
+ // @ts-ignore
119
+ <TabItem
120
+ key={index}
121
+ label={label}
122
+ value={`${index}-item-properties`}
123
+ >
124
+ {/* Handle primitive types directly */}
125
+ {["string", "number", "integer", "boolean"].includes(
126
+ anyOneSchema.type
127
+ ) && (
128
+ <SchemaItem
129
+ collapsible={false}
130
+ name={undefined}
131
+ schemaName={anyOneSchema.type}
132
+ qualifierMessage={getQualifierMessage(anyOneSchema)}
133
+ schema={anyOneSchema}
134
+ discriminator={false}
135
+ children={null}
136
+ />
137
+ )}
138
+
139
+ {/* Handle empty object as a primitive type */}
140
+ {anyOneSchema.type === "object" &&
141
+ !anyOneSchema.properties &&
142
+ !anyOneSchema.allOf &&
143
+ !anyOneSchema.oneOf &&
144
+ !anyOneSchema.anyOf && (
145
+ <SchemaItem
146
+ collapsible={false}
147
+ name={undefined}
148
+ schemaName={anyOneSchema.type}
149
+ qualifierMessage={getQualifierMessage(anyOneSchema)}
150
+ schema={anyOneSchema}
151
+ discriminator={false}
152
+ children={null}
153
+ />
154
+ )}
155
+
156
+ {/* Handle actual object types with properties or nested schemas */}
157
+ {anyOneSchema.type === "object" && anyOneSchema.properties && (
158
+ <Properties schema={anyOneSchema} schemaType={schemaType} />
159
+ )}
160
+ {anyOneSchema.allOf && (
161
+ <SchemaNode schema={anyOneSchema} schemaType={schemaType} />
162
+ )}
163
+ {anyOneSchema.oneOf && (
164
+ <SchemaNode schema={anyOneSchema} schemaType={schemaType} />
165
+ )}
166
+ {anyOneSchema.anyOf && (
167
+ <SchemaNode schema={anyOneSchema} schemaType={schemaType} />
168
+ )}
169
+ {anyOneSchema.items && (
170
+ <Items schema={anyOneSchema} schemaType={schemaType} />
171
+ )}
172
+ </TabItem>
173
+ );
174
+ })}
175
+ </SchemaTabs>
176
+ </>
177
+ );
178
+ };
179
+
180
+ const Properties: React.FC<SchemaProps> = ({ schema, schemaType }) => {
181
+ const discriminator = schema.discriminator;
182
+ if (discriminator && !discriminator.mapping) {
183
+ const anyOneOf = schema.oneOf ?? schema.anyOf ?? {};
184
+ const inferredMapping = {} as any;
185
+ Object.entries(anyOneOf).map(([_, anyOneSchema]: [string, any]) => {
186
+ // ensure discriminated property only renders once
187
+ if (
188
+ schema.properties![discriminator.propertyName] &&
189
+ anyOneSchema.properties[discriminator.propertyName]
190
+ )
191
+ delete anyOneSchema.properties[discriminator.propertyName];
192
+ return (inferredMapping[anyOneSchema.title] = anyOneSchema);
193
+ });
194
+ discriminator["mapping"] = inferredMapping;
195
+ }
196
+ if (Object.keys(schema.properties as {}).length === 0) {
197
+ return (
198
+ <SchemaItem
199
+ collapsible={false}
200
+ name=""
201
+ required={false}
202
+ schemaName="object"
203
+ qualifierMessage={undefined}
204
+ schema={{}}
205
+ />
206
+ );
207
+ }
208
+
209
+ return (
210
+ <>
211
+ {Object.entries(schema.properties as {}).map(
212
+ ([key, val]: [string, any]) => (
213
+ <SchemaEdge
214
+ key={key}
215
+ name={key}
216
+ schema={val}
217
+ required={
218
+ Array.isArray(schema.required)
219
+ ? schema.required.includes(key)
220
+ : false
221
+ }
222
+ discriminator={discriminator}
223
+ schemaType={schemaType}
224
+ />
225
+ )
226
+ )}
227
+ </>
228
+ );
229
+ };
230
+
231
+ const PropertyDiscriminator: React.FC<SchemaEdgeProps> = ({
232
+ name,
233
+ schemaName,
234
+ schema,
235
+ schemaType,
236
+ discriminator,
237
+ required,
238
+ }) => {
239
+ if (!schema) {
240
+ return null;
241
+ }
242
+
243
+ return (
244
+ <>
245
+ <div className="openapi-discriminator__item openapi-schema__list-item">
246
+ <div>
247
+ <span className="openapi-schema__container">
248
+ <strong className="openapi-discriminator__name openapi-schema__property">
249
+ {name}
250
+ </strong>
251
+ {schemaName && (
252
+ <span className="openapi-schema__name"> {schemaName}</span>
253
+ )}
254
+ {required && <span className="openapi-schema__divider"></span>}
255
+ {required && (
256
+ <span className="openapi-schema__required">required</span>
257
+ )}
258
+ </span>
259
+ <div style={{ marginLeft: "1rem" }}>
260
+ {schema.description && (
261
+ <MarkdownWrapper text={schema.description} />
262
+ )}
263
+ {getQualifierMessage(discriminator) && (
264
+ <MarkdownWrapper text={getQualifierMessage(discriminator)} />
265
+ )}
266
+ </div>
267
+ <DiscriminatorTabs className="openapi-tabs__discriminator">
268
+ {Object.keys(discriminator.mapping).map((key, index) => (
269
+ // @ts-ignore
270
+ <TabItem
271
+ key={index}
272
+ label={key}
273
+ value={`${index}-item-discriminator`}
274
+ >
275
+ <SchemaNode
276
+ schema={discriminator.mapping[key]}
277
+ schemaType={schemaType}
278
+ />
279
+ </TabItem>
280
+ ))}
281
+ </DiscriminatorTabs>
282
+ </div>
283
+ </div>
284
+ {schema.properties &&
285
+ Object.entries(schema.properties as {}).map(
286
+ ([key, val]: [string, any]) =>
287
+ key !== discriminator.propertyName && (
288
+ <SchemaEdge
289
+ key={key}
290
+ name={key}
291
+ schema={val}
292
+ required={
293
+ Array.isArray(schema.required)
294
+ ? schema.required.includes(key)
295
+ : false
296
+ }
297
+ discriminator={false}
298
+ schemaType={schemaType}
299
+ />
300
+ )
301
+ )}
302
+ </>
303
+ );
304
+ };
305
+
306
+ interface DiscriminatorNodeProps {
307
+ discriminator: any;
308
+ schema: SchemaObject;
309
+ schemaType: "request" | "response";
310
+ }
311
+
312
+ const DiscriminatorNode: React.FC<DiscriminatorNodeProps> = ({
313
+ discriminator,
314
+ schema,
315
+ schemaType,
316
+ }) => {
317
+ let discriminatedSchemas: any = {};
318
+ let inferredMapping: any = {};
319
+
320
+ // default to empty object if no parent-level properties exist
321
+ const discriminatorProperty = schema.properties
322
+ ? schema.properties![discriminator.propertyName]
323
+ : {};
324
+
325
+ if (schema.allOf) {
326
+ const mergedSchemas = mergeAllOf(schema) as SchemaObject;
327
+ if (mergedSchemas.oneOf || mergedSchemas.anyOf) {
328
+ discriminatedSchemas = mergedSchemas.oneOf || mergedSchemas.anyOf;
329
+ }
330
+ } else if (schema.oneOf || schema.anyOf) {
331
+ discriminatedSchemas = schema.oneOf || schema.anyOf;
332
+ }
333
+
334
+ // Handle case where no mapping is defined
335
+ if (!discriminator.mapping) {
336
+ Object.entries(discriminatedSchemas).forEach(
337
+ ([_, subschema]: [string, any], index) => {
338
+ inferredMapping[subschema.title ?? `PROP${index}`] = subschema;
339
+ }
340
+ );
341
+ discriminator.mapping = inferredMapping;
342
+ }
343
+
344
+ // Merge sub schema discriminator property with parent
345
+ Object.keys(discriminator.mapping).forEach((key) => {
346
+ const subSchema = discriminator.mapping[key];
347
+
348
+ // Handle discriminated schema with allOf
349
+ let mergedSubSchema = {} as SchemaObject;
350
+ if (subSchema.allOf) {
351
+ mergedSubSchema = mergeAllOf(subSchema) as SchemaObject;
352
+ }
353
+
354
+ const subProperties = subSchema.properties || mergedSubSchema.properties;
355
+ // Add a safeguard check to avoid referencing subProperties if it's undefined
356
+ if (subProperties && subProperties[discriminator.propertyName]) {
357
+ if (schema.properties) {
358
+ schema.properties![discriminator.propertyName] = {
359
+ ...schema.properties![discriminator.propertyName],
360
+ ...subProperties[discriminator.propertyName],
361
+ };
362
+ if (subSchema.required && !schema.required) {
363
+ schema.required = subSchema.required;
364
+ }
365
+ // Avoid duplicating property
366
+ delete subProperties[discriminator.propertyName];
367
+ } else {
368
+ schema.properties = {};
369
+ schema.properties[discriminator.propertyName] =
370
+ subProperties[discriminator.propertyName];
371
+ // Avoid duplicating property
372
+ delete subProperties[discriminator.propertyName];
373
+ }
374
+ }
375
+ });
376
+
377
+ const name = discriminator.propertyName;
378
+ const schemaName = getSchemaName(discriminatorProperty);
379
+ // Default case for discriminator without oneOf/anyOf/allOf
380
+ return (
381
+ <PropertyDiscriminator
382
+ name={name}
383
+ schemaName={schemaName}
384
+ schema={schema}
385
+ schemaType={schemaType}
386
+ discriminator={discriminator}
387
+ required={
388
+ Array.isArray(schema.required)
389
+ ? schema.required.includes(name)
390
+ : schema.required
391
+ }
392
+ />
393
+ );
394
+ };
395
+
396
+ const AdditionalProperties: React.FC<SchemaProps> = ({
397
+ schema,
398
+ schemaType,
399
+ }) => {
400
+ const additionalProperties = schema.additionalProperties;
401
+
402
+ if (!additionalProperties) return null;
403
+
404
+ // Handle free-form objects
405
+ if (additionalProperties === true || isEmpty(additionalProperties)) {
406
+ return (
407
+ <SchemaItem
408
+ name="property name*"
409
+ required={false}
410
+ schemaName="any"
411
+ qualifierMessage={getQualifierMessage(schema)}
412
+ schema={schema}
413
+ collapsible={false}
414
+ discriminator={false}
415
+ />
416
+ );
417
+ }
418
+
419
+ // Handle objects, arrays, complex schemas
420
+ if (
421
+ additionalProperties.properties ||
422
+ additionalProperties.items ||
423
+ additionalProperties.allOf ||
424
+ additionalProperties.additionalProperties ||
425
+ additionalProperties.oneOf ||
426
+ additionalProperties.anyOf
427
+ ) {
428
+ const title =
429
+ additionalProperties.title || getSchemaName(additionalProperties);
430
+ const required = schema.required || false;
431
+ return (
432
+ <SchemaNodeDetails
433
+ name="property name*"
434
+ schemaName={title}
435
+ required={required}
436
+ nullable={schema.nullable}
437
+ schema={additionalProperties}
438
+ schemaType={schemaType}
439
+ />
440
+ );
441
+ }
442
+
443
+ // Handle primitive types
444
+ if (
445
+ additionalProperties.type === "string" ||
446
+ additionalProperties.type === "boolean" ||
447
+ additionalProperties.type === "integer" ||
448
+ additionalProperties.type === "number" ||
449
+ additionalProperties.type === "object"
450
+ ) {
451
+ const schemaName = getSchemaName(additionalProperties);
452
+ return (
453
+ <SchemaItem
454
+ name="property name*"
455
+ required={false}
456
+ schemaName={schemaName}
457
+ qualifierMessage={getQualifierMessage(schema)}
458
+ schema={additionalProperties}
459
+ collapsible={false}
460
+ discriminator={false}
461
+ children={null}
462
+ />
463
+ );
464
+ }
465
+
466
+ // Unknown type
467
+ return null;
468
+ };
469
+
470
+ const SchemaNodeDetails: React.FC<SchemaEdgeProps> = ({
471
+ name,
472
+ schemaName,
473
+ schema,
474
+ required,
475
+ schemaType,
476
+ }) => {
477
+ return (
478
+ <SchemaItem collapsible={true}>
479
+ <Details
480
+ className="openapi-markdown__details"
481
+ summary={
482
+ <Summary
483
+ name={name}
484
+ schemaName={schemaName}
485
+ schema={schema}
486
+ required={required}
487
+ />
488
+ }
489
+ >
490
+ <div style={{ marginLeft: "1rem" }}>
491
+ {schema.description && <MarkdownWrapper text={schema.description} />}
492
+ {getQualifierMessage(schema) && (
493
+ <MarkdownWrapper text={getQualifierMessage(schema)} />
494
+ )}
495
+ <SchemaNode schema={schema} schemaType={schemaType} />
496
+ </div>
497
+ </Details>
498
+ </SchemaItem>
499
+ );
500
+ };
501
+
502
+ const Items: React.FC<{
503
+ schema: any;
504
+ schemaType: "request" | "response";
505
+ }> = ({ schema, schemaType }) => {
506
+ // Handles case when schema.items has properties
507
+ if (schema.items?.properties) {
508
+ return (
509
+ <>
510
+ <OpeningArrayBracket />
511
+ <Properties schema={schema.items} schemaType={schemaType} />
512
+ <ClosingArrayBracket />
513
+ </>
514
+ );
515
+ }
516
+
517
+ // Handles case when schema.items has additionalProperties
518
+ if (schema.items?.additionalProperties) {
519
+ return (
520
+ <>
521
+ <OpeningArrayBracket />
522
+ <AdditionalProperties schema={schema.items} schemaType={schemaType} />
523
+ <ClosingArrayBracket />
524
+ </>
525
+ );
526
+ }
527
+
528
+ // Handles case when schema.items has oneOf or anyOf
529
+ if (schema.items?.oneOf || schema.items?.anyOf) {
530
+ return (
531
+ <>
532
+ <OpeningArrayBracket />
533
+ <AnyOneOf schema={schema.items} schemaType={schemaType} />
534
+ <ClosingArrayBracket />
535
+ </>
536
+ );
537
+ }
538
+
539
+ // Handles case when schema.items has allOf
540
+ if (schema.items?.allOf) {
541
+ const mergedSchemas = mergeAllOf(schema.items) as SchemaObject;
542
+
543
+ // Handles combo anyOf/oneOf + properties
544
+ if (
545
+ (mergedSchemas.oneOf || mergedSchemas.anyOf) &&
546
+ mergedSchemas.properties
547
+ ) {
548
+ return (
549
+ <>
550
+ <OpeningArrayBracket />
551
+ <AnyOneOf schema={mergedSchemas} schemaType={schemaType} />
552
+ <Properties schema={mergedSchemas} schemaType={schemaType} />
553
+ <ClosingArrayBracket />
554
+ </>
555
+ );
556
+ }
557
+
558
+ // Handles only anyOf/oneOf
559
+ if (mergedSchemas.oneOf || mergedSchemas.anyOf) {
560
+ return (
561
+ <>
562
+ <OpeningArrayBracket />
563
+ <AnyOneOf schema={mergedSchemas} schemaType={schemaType} />
564
+ <ClosingArrayBracket />
565
+ </>
566
+ );
567
+ }
568
+
569
+ // Handles properties
570
+ if (mergedSchemas.properties) {
571
+ return (
572
+ <>
573
+ <OpeningArrayBracket />
574
+ <Properties schema={mergedSchemas} schemaType={schemaType} />
575
+ <ClosingArrayBracket />
576
+ </>
577
+ );
578
+ }
579
+ }
580
+
581
+ // Handles basic types (string, number, integer, boolean, object)
582
+ if (
583
+ schema.items?.type === "string" ||
584
+ schema.items?.type === "number" ||
585
+ schema.items?.type === "integer" ||
586
+ schema.items?.type === "boolean" ||
587
+ schema.items?.type === "object"
588
+ ) {
589
+ return (
590
+ <div style={{ marginLeft: ".5rem" }}>
591
+ <OpeningArrayBracket />
592
+ <SchemaItem
593
+ collapsible={false}
594
+ name="" // No name for array items
595
+ schemaName={getSchemaName(schema.items)}
596
+ qualifierMessage={getQualifierMessage(schema.items)}
597
+ schema={schema.items}
598
+ discriminator={false}
599
+ children={null}
600
+ />
601
+ <ClosingArrayBracket />
602
+ </div>
603
+ );
604
+ }
605
+
606
+ // Handles fallback case (use createEdges logic)
607
+ return (
608
+ <>
609
+ <OpeningArrayBracket />
610
+ {Object.entries(schema.items || {}).map(([key, val]: [string, any]) => (
611
+ <SchemaEdge
612
+ key={key}
613
+ name={key}
614
+ schema={val}
615
+ schemaType={schemaType}
616
+ required={
617
+ Array.isArray(schema.required)
618
+ ? schema.required.includes(key)
619
+ : false
620
+ }
621
+ />
622
+ ))}
623
+ <ClosingArrayBracket />
624
+ </>
625
+ );
626
+ };
627
+
628
+ interface SchemaEdgeProps {
629
+ name: string;
630
+ schemaName?: string;
631
+ schema: SchemaObject;
632
+ required?: boolean | string[];
633
+ nullable?: boolean | undefined;
634
+ discriminator?: any;
635
+ schemaType: "request" | "response";
636
+ }
637
+
638
+ const SchemaEdge: React.FC<SchemaEdgeProps> = ({
639
+ name,
640
+ schema,
641
+ required,
642
+ discriminator,
643
+ schemaType,
644
+ }) => {
645
+ if (
646
+ (schemaType === "request" && schema.readOnly) ||
647
+ (schemaType === "response" && schema.writeOnly)
648
+ ) {
649
+ return null;
650
+ }
651
+
652
+ const schemaName = getSchemaName(schema);
653
+
654
+ if (discriminator && discriminator.propertyName === name) {
655
+ return (
656
+ <PropertyDiscriminator
657
+ name={name}
658
+ schemaName={schemaName}
659
+ schema={schema}
660
+ schemaType={schemaType}
661
+ discriminator={discriminator}
662
+ required={required}
663
+ />
664
+ );
665
+ }
666
+
667
+ if (schema.oneOf || schema.anyOf) {
668
+ // return <AnyOneOf schema={schema} schemaType={schemaType} />;
669
+ return (
670
+ <SchemaNodeDetails
671
+ name={name}
672
+ schemaName={schemaName}
673
+ schemaType={schemaType}
674
+ required={required}
675
+ schema={schema}
676
+ nullable={schema.nullable}
677
+ />
678
+ );
679
+ }
680
+
681
+ if (schema.properties) {
682
+ return (
683
+ <SchemaNodeDetails
684
+ name={name}
685
+ schemaName={schemaName}
686
+ schemaType={schemaType}
687
+ required={required}
688
+ schema={schema}
689
+ nullable={schema.nullable}
690
+ />
691
+ );
692
+ }
693
+
694
+ if (schema.additionalProperties) {
695
+ return (
696
+ <SchemaNodeDetails
697
+ name={name}
698
+ schemaName={schemaName}
699
+ schemaType={schemaType}
700
+ required={required}
701
+ schema={schema}
702
+ nullable={schema.nullable}
703
+ />
704
+ );
705
+ }
706
+
707
+ if (schema.items?.properties) {
708
+ return (
709
+ <SchemaNodeDetails
710
+ name={name}
711
+ schemaName={schemaName}
712
+ required={required}
713
+ nullable={schema.nullable}
714
+ schema={schema}
715
+ schemaType={schemaType}
716
+ />
717
+ );
718
+ }
719
+
720
+ if (schema.items?.anyOf || schema.items?.oneOf) {
721
+ return (
722
+ <SchemaNodeDetails
723
+ name={name}
724
+ schemaName={schemaName}
725
+ required={required}
726
+ nullable={schema.nullable}
727
+ schema={schema}
728
+ schemaType={schemaType}
729
+ />
730
+ );
731
+ }
732
+
733
+ if (schema.allOf) {
734
+ // handle circular properties
735
+ if (
736
+ schema.allOf &&
737
+ schema.allOf.length &&
738
+ schema.allOf.length === 1 &&
739
+ typeof schema.allOf[0] === "string"
740
+ ) {
741
+ return (
742
+ <SchemaItem
743
+ collapsible={false}
744
+ name={name}
745
+ required={
746
+ Array.isArray(required) ? required.includes(name) : required
747
+ }
748
+ schemaName={schema.allOf[0]}
749
+ qualifierMessage={undefined}
750
+ schema={schema.allOf[0]}
751
+ discriminator={false}
752
+ children={null}
753
+ />
754
+ );
755
+ }
756
+ const mergedSchemas = mergeAllOf(schema) as SchemaObject;
757
+
758
+ if (
759
+ (schemaType === "request" && mergedSchemas.readOnly) ||
760
+ (schemaType === "response" && mergedSchemas.writeOnly)
761
+ ) {
762
+ return null;
763
+ }
764
+
765
+ const mergedSchemaName = getSchemaName(mergedSchemas);
766
+
767
+ if (mergedSchemas.oneOf || mergedSchemas.anyOf) {
768
+ return (
769
+ <SchemaNodeDetails
770
+ name={name}
771
+ schemaName={mergedSchemaName}
772
+ required={
773
+ Array.isArray(mergedSchemas.required)
774
+ ? mergedSchemas.required.includes(name)
775
+ : mergedSchemas.required
776
+ }
777
+ nullable={mergedSchemas.nullable}
778
+ schema={mergedSchemas}
779
+ schemaType={schemaType}
780
+ />
781
+ );
782
+ }
783
+
784
+ if (mergedSchemas.properties !== undefined) {
785
+ return (
786
+ <SchemaNodeDetails
787
+ name={name}
788
+ schemaName={mergedSchemaName}
789
+ required={
790
+ Array.isArray(mergedSchemas.required)
791
+ ? mergedSchemas.required.includes(name)
792
+ : mergedSchemas.required
793
+ }
794
+ nullable={mergedSchemas.nullable}
795
+ schema={mergedSchemas}
796
+ schemaType={schemaType}
797
+ />
798
+ );
799
+ }
800
+
801
+ if (mergedSchemas.items?.properties) {
802
+ <SchemaNodeDetails
803
+ name={name}
804
+ schemaName={mergedSchemaName}
805
+ required={
806
+ Array.isArray(mergedSchemas.required)
807
+ ? mergedSchemas.required.includes(name)
808
+ : mergedSchemas.required
809
+ }
810
+ nullable={mergedSchemas.nullable}
811
+ schema={mergedSchemas}
812
+ schemaType={schemaType}
813
+ />;
814
+ }
815
+
816
+ return (
817
+ <SchemaItem
818
+ collapsible={false}
819
+ name={name}
820
+ required={Array.isArray(required) ? required.includes(name) : required}
821
+ schemaName={mergedSchemaName}
822
+ qualifierMessage={getQualifierMessage(mergedSchemas)}
823
+ schema={mergedSchemas}
824
+ discriminator={false}
825
+ children={null}
826
+ />
827
+ );
828
+ }
829
+
830
+ return (
831
+ <SchemaItem
832
+ collapsible={false}
833
+ name={name}
834
+ required={Array.isArray(required) ? required.includes(name) : required}
835
+ schemaName={schemaName}
836
+ qualifierMessage={getQualifierMessage(schema)}
837
+ schema={schema}
838
+ discriminator={false}
839
+ children={null}
840
+ />
841
+ );
842
+ };
843
+
844
+ function renderChildren(
845
+ schema: SchemaObject,
846
+ schemaType: "request" | "response"
847
+ ) {
848
+ return (
849
+ <>
850
+ {schema.oneOf && <AnyOneOf schema={schema} schemaType={schemaType} />}
851
+ {schema.anyOf && <AnyOneOf schema={schema} schemaType={schemaType} />}
852
+ {schema.properties && (
853
+ <Properties schema={schema} schemaType={schemaType} />
854
+ )}
855
+ {schema.additionalProperties && (
856
+ <AdditionalProperties schema={schema} schemaType={schemaType} />
857
+ )}
858
+ {schema.items && <Items schema={schema} schemaType={schemaType} />}
859
+ </>
860
+ );
861
+ }
862
+
863
+ const SchemaNode: React.FC<SchemaProps> = ({ schema, schemaType }) => {
864
+ if (
865
+ (schemaType === "request" && schema.readOnly) ||
866
+ (schemaType === "response" && schema.writeOnly)
867
+ ) {
868
+ return null;
869
+ }
870
+
871
+ if (schema.discriminator) {
872
+ const { discriminator } = schema;
873
+ return (
874
+ <DiscriminatorNode
875
+ discriminator={discriminator}
876
+ schema={schema}
877
+ schemaType={schemaType}
878
+ />
879
+ );
880
+ }
881
+
882
+ // Handle allOf, oneOf, anyOf without discriminators
883
+ if (schema.allOf) {
884
+ const mergedSchemas = mergeAllOf(schema) as SchemaObject;
885
+
886
+ if (
887
+ (schemaType === "request" && mergedSchemas.readOnly) ||
888
+ (schemaType === "response" && mergedSchemas.writeOnly)
889
+ ) {
890
+ return null;
891
+ }
892
+
893
+ return (
894
+ <div>
895
+ {mergedSchemas.oneOf && (
896
+ <AnyOneOf schema={mergedSchemas} schemaType={schemaType} />
897
+ )}
898
+ {mergedSchemas.anyOf && (
899
+ <AnyOneOf schema={mergedSchemas} schemaType={schemaType} />
900
+ )}
901
+ {mergedSchemas.properties && (
902
+ <Properties schema={mergedSchemas} schemaType={schemaType} />
903
+ )}
904
+ {mergedSchemas.items && (
905
+ <Items schema={mergedSchemas} schemaType={schemaType} />
906
+ )}
907
+ </div>
908
+ );
909
+ }
910
+
911
+ // Handle primitives
912
+ if (
913
+ schema.type &&
914
+ !schema.oneOf &&
915
+ !schema.anyOf &&
916
+ !schema.properties &&
917
+ !schema.allOf &&
918
+ !schema.items &&
919
+ !schema.additionalProperties
920
+ ) {
921
+ const schemaName = getSchemaName(schema);
922
+ return (
923
+ <SchemaItem
924
+ collapsible={false}
925
+ name={schema.type}
926
+ required={Boolean(schema.required)}
927
+ schemaName={schemaName}
928
+ qualifierMessage={getQualifierMessage(schema)}
929
+ schema={schema}
930
+ discriminator={false}
931
+ children={null}
932
+ />
933
+ );
934
+ }
935
+
936
+ return renderChildren(schema, schemaType);
937
+ };
938
+
939
+ export default SchemaNode;