@stoplight/elements-core 9.0.15 → 9.0.16-beta-0.1

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 (415) hide show
  1. package/.storybook/main.js +6 -0
  2. package/.storybook/manager.js +1 -0
  3. package/.storybook/preview.jsx +50 -0
  4. package/dist/LICENSE +190 -0
  5. package/dist/README.md +1 -0
  6. package/{index.esm.js → dist/index.esm.js} +6 -5
  7. package/{index.js → dist/index.js} +6 -5
  8. package/{index.mjs → dist/index.mjs} +6 -5
  9. package/dist/package.json +64 -0
  10. package/jest.config.js +10 -0
  11. package/package.json +74 -14
  12. package/src/__fixtures__/articles/basic.md +10 -0
  13. package/src/__fixtures__/articles/kitchen-sink.md +318 -0
  14. package/src/__fixtures__/articles/long-page-heading.md +955 -0
  15. package/src/__fixtures__/articles/multiple-try-its.md +54 -0
  16. package/src/__fixtures__/articles/schema-with-refs.ts +82 -0
  17. package/src/__fixtures__/http-request.json +11 -0
  18. package/src/__fixtures__/models/model-with-no-examples.json +15 -0
  19. package/src/__fixtures__/models/model-with-one-example.json +23 -0
  20. package/src/__fixtures__/models/model-with-three-examples.json +35 -0
  21. package/src/__fixtures__/operations/application-octet-stream-post.ts +39 -0
  22. package/src/__fixtures__/operations/base64-file-upload.ts +43 -0
  23. package/src/__fixtures__/operations/big-response.ts +4690 -0
  24. package/src/__fixtures__/operations/bundled-parameter.ts +128 -0
  25. package/src/__fixtures__/operations/empty-response.ts +15 -0
  26. package/src/__fixtures__/operations/examples-request-body.ts +135 -0
  27. package/src/__fixtures__/operations/head-todos.ts +49 -0
  28. package/src/__fixtures__/operations/invalid-response-example.ts +45 -0
  29. package/src/__fixtures__/operations/multipart-formdata-post.ts +61 -0
  30. package/src/__fixtures__/operations/operation-minimal.ts +11 -0
  31. package/src/__fixtures__/operations/operation-parameters.ts +337 -0
  32. package/src/__fixtures__/operations/operation-with-examples.ts +113 -0
  33. package/src/__fixtures__/operations/operation-without-servers.ts +16 -0
  34. package/src/__fixtures__/operations/patch-todos.ts +49 -0
  35. package/src/__fixtures__/operations/put-todos.ts +862 -0
  36. package/src/__fixtures__/operations/referenced-body.ts +62 -0
  37. package/src/__fixtures__/operations/request-body-empty-schema.ts +35 -0
  38. package/src/__fixtures__/operations/request-body.ts +62 -0
  39. package/src/__fixtures__/operations/securedOperation.ts +118 -0
  40. package/src/__fixtures__/operations/security-basic.ts +24 -0
  41. package/src/__fixtures__/operations/security-bearer.ts +25 -0
  42. package/src/__fixtures__/operations/simple-get.ts +17 -0
  43. package/src/__fixtures__/operations/simple.ts +103 -0
  44. package/src/__fixtures__/operations/string-numeric-enums.ts +32 -0
  45. package/src/__fixtures__/operations/urlencoded-post-oneof.ts +81 -0
  46. package/src/__fixtures__/operations/urlencoded-post.ts +54 -0
  47. package/src/__fixtures__/operations/vendor-extensions.ts +337 -0
  48. package/src/__fixtures__/operations/with-url-variables.ts +47 -0
  49. package/src/__fixtures__/operations/x-code-samples.ts +348 -0
  50. package/src/__fixtures__/schemas/circular.ts +1906 -0
  51. package/src/__fixtures__/schemas/contact.json +293 -0
  52. package/src/__fixtures__/schemas/media-entry.json +69 -0
  53. package/src/__fixtures__/schemas/simple.json +27 -0
  54. package/src/__fixtures__/schemas/todo-full.v1.json +35 -0
  55. package/src/__fixtures__/schemas/todo-partial.v1.json +14 -0
  56. package/src/__fixtures__/schemas/user.v1.json +17 -0
  57. package/src/__fixtures__/security-schemes/index.ts +38 -0
  58. package/src/__fixtures__/services/petstore.ts +167 -0
  59. package/src/__fixtures__/services/with-unnamed-servers.ts +38 -0
  60. package/src/__fixtures__/services/with-url-variables.ts +83 -0
  61. package/src/__fixtures__/services/without-origin.ts +20 -0
  62. package/src/__fixtures__/table-of-contents/nested.ts +44 -0
  63. package/src/__fixtures__/table-of-contents/studio-template.ts +100 -0
  64. package/src/__fixtures__/table-of-contents/studio.ts +559 -0
  65. package/src/components/Docs/Article/Article.spec.tsx +38 -0
  66. package/src/components/Docs/Article/Article.stories.tsx +17 -0
  67. package/src/components/Docs/Article/index.tsx +38 -0
  68. package/src/components/Docs/Docs.stories.tsx +33 -0
  69. package/src/components/Docs/Docs.tsx +233 -0
  70. package/src/components/Docs/HttpOperation/Badges.tsx +49 -0
  71. package/src/components/Docs/HttpOperation/Body.tsx +79 -0
  72. package/src/components/Docs/HttpOperation/Callbacks.tsx +89 -0
  73. package/src/components/Docs/HttpOperation/HttpOperation.spec.tsx +787 -0
  74. package/src/components/Docs/HttpOperation/HttpOperation.stories.ts +14 -0
  75. package/src/components/Docs/HttpOperation/HttpOperation.tsx +255 -0
  76. package/src/components/Docs/HttpOperation/Parameters.spec.tsx +101 -0
  77. package/src/components/Docs/HttpOperation/Parameters.tsx +118 -0
  78. package/src/components/Docs/HttpOperation/Request.tsx +140 -0
  79. package/src/components/Docs/HttpOperation/Responses.tsx +247 -0
  80. package/src/components/Docs/HttpOperation/index.ts +1 -0
  81. package/src/components/Docs/HttpService/AdditionalInfo.stories.ts +48 -0
  82. package/src/components/Docs/HttpService/AdditionalInfo.tsx +61 -0
  83. package/src/components/Docs/HttpService/ExportButton.tsx +35 -0
  84. package/src/components/Docs/HttpService/HttpService.spec.tsx +429 -0
  85. package/src/components/Docs/HttpService/HttpService.stories.ts +14 -0
  86. package/src/components/Docs/HttpService/HttpService.tsx +99 -0
  87. package/src/components/Docs/HttpService/SecuritySchemes.tsx +82 -0
  88. package/src/components/Docs/HttpService/ServerInfo.tsx +196 -0
  89. package/src/components/Docs/HttpService/index.ts +1 -0
  90. package/src/components/Docs/Model/Model.spec.tsx +241 -0
  91. package/src/components/Docs/Model/Model.stories.tsx +16 -0
  92. package/src/components/Docs/Model/Model.tsx +160 -0
  93. package/src/components/Docs/Model/index.ts +1 -0
  94. package/src/components/Docs/NodeVendorExtensions.tsx +55 -0
  95. package/src/components/Docs/Sections.tsx +54 -0
  96. package/src/components/Docs/Security/PanelContent.tsx +38 -0
  97. package/src/components/Docs/Security/index.ts +1 -0
  98. package/src/components/Docs/Skeleton.tsx +12 -0
  99. package/src/components/Docs/TwoColumnLayout.tsx +28 -0
  100. package/src/components/Docs/index.ts +1 -0
  101. package/src/components/Docs/story-helper.ts +46 -0
  102. package/src/components/Docs/story-renderer-helper.tsx +56 -0
  103. package/src/components/Layout/MobileTopNav.tsx +78 -0
  104. package/src/components/Layout/ResponsiveSidebarLayout.tsx +175 -0
  105. package/src/components/Layout/SidebarLayout.tsx +107 -0
  106. package/src/components/LinkHeading.tsx +21 -0
  107. package/src/components/LoadMore.tsx +20 -0
  108. package/src/components/Loading/Loading.tsx +9 -0
  109. package/src/components/Logo.tsx +25 -0
  110. package/src/components/MarkdownViewer/CustomComponents/CodeComponent.spec.ts +90 -0
  111. package/src/components/MarkdownViewer/CustomComponents/CodeComponent.tsx +164 -0
  112. package/src/components/MarkdownViewer/CustomComponents/Provider.tsx +20 -0
  113. package/src/components/MarkdownViewer/CustomComponents/ReactRouterLink.tsx +27 -0
  114. package/src/components/MarkdownViewer/CustomComponents/ResolvedImage.tsx +86 -0
  115. package/src/components/MarkdownViewer/CustomComponents/ScrollToHashElement.tsx +96 -0
  116. package/src/components/MarkdownViewer/MarkdownViewer.spec.tsx +170 -0
  117. package/src/components/MarkdownViewer/index.tsx +10 -0
  118. package/src/components/NonIdealState.tsx +20 -0
  119. package/src/components/PoweredByLink.tsx +30 -0
  120. package/src/components/RequestSamples/RequestSamples.stories.tsx +67 -0
  121. package/src/components/RequestSamples/RequestSamples.tsx +246 -0
  122. package/src/components/RequestSamples/__tests__/RequestSamples.test.tsx +131 -0
  123. package/src/components/RequestSamples/__tests__/__snapshots__/convertRequestToSample.spec.ts.snap +746 -0
  124. package/src/components/RequestSamples/__tests__/convertRequestToSample.spec.ts +118 -0
  125. package/src/components/RequestSamples/convertRequestToSample.ts +56 -0
  126. package/src/components/RequestSamples/extractCodeSamples.ts +50 -0
  127. package/src/components/RequestSamples/index.ts +2 -0
  128. package/src/components/RequestSamples/requestSampleConfigs.ts +182 -0
  129. package/src/components/ResponseExamples/ResponseExamples.spec.tsx +121 -0
  130. package/src/components/ResponseExamples/ResponseExamples.stories.tsx +21 -0
  131. package/src/components/ResponseExamples/ResponseExamples.tsx +79 -0
  132. package/src/components/TableOfContents/TableOfContents.spec.tsx +316 -0
  133. package/src/components/TableOfContents/TableOfContents.stories.tsx +136 -0
  134. package/src/components/TableOfContents/TableOfContents.tsx +530 -0
  135. package/src/components/TableOfContents/constants.ts +45 -0
  136. package/src/components/TableOfContents/index.ts +2 -0
  137. package/src/components/TableOfContents/types.ts +59 -0
  138. package/src/components/TableOfContents/utils.ts +84 -0
  139. package/src/components/TryIt/Auth/APIKeyAuth.tsx +19 -0
  140. package/src/components/TryIt/Auth/Auth.tsx +169 -0
  141. package/src/components/TryIt/Auth/AuthTokenInput.tsx +37 -0
  142. package/src/components/TryIt/Auth/BasicAuth.tsx +62 -0
  143. package/src/components/TryIt/Auth/BearerAuth.tsx +19 -0
  144. package/src/components/TryIt/Auth/DigestAuth.tsx +35 -0
  145. package/src/components/TryIt/Auth/OAuth2Auth.tsx +19 -0
  146. package/src/components/TryIt/Auth/authentication-utils.ts +113 -0
  147. package/src/components/TryIt/Body/BinaryBody.tsx +52 -0
  148. package/src/components/TryIt/Body/FormDataBody.tsx +145 -0
  149. package/src/components/TryIt/Body/RequestBody.tsx +71 -0
  150. package/src/components/TryIt/Body/__tests__/BinaryBody.test.tsx +29 -0
  151. package/src/components/TryIt/Body/__tests__/FormDataBody.test.tsx +94 -0
  152. package/src/components/TryIt/Body/request-body-utils.ts +127 -0
  153. package/src/components/TryIt/Body/useTextRequestBodyState.ts +27 -0
  154. package/src/components/TryIt/Mocking/MockingButton.tsx +98 -0
  155. package/src/components/TryIt/Mocking/mocking-utils.ts +56 -0
  156. package/src/components/TryIt/Mocking/useMockingOptions.ts +6 -0
  157. package/src/components/TryIt/Parameters/FileUploadParameterEditors.tsx +62 -0
  158. package/src/components/TryIt/Parameters/OperationParameters.tsx +39 -0
  159. package/src/components/TryIt/Parameters/ParameterEditor.tsx +135 -0
  160. package/src/components/TryIt/Parameters/__tests__/parameter-utils.spec.ts +60 -0
  161. package/src/components/TryIt/Parameters/parameter-utils.spec.ts +118 -0
  162. package/src/components/TryIt/Parameters/parameter-utils.ts +245 -0
  163. package/src/components/TryIt/Parameters/useOperationParameters.ts +60 -0
  164. package/src/components/TryIt/Response/ReponseCodeViewer.tsx +28 -0
  165. package/src/components/TryIt/Response/Response.spec.tsx +174 -0
  166. package/src/components/TryIt/Response/Response.tsx +172 -0
  167. package/src/components/TryIt/Response/hooks/useLineCount.ts +7 -0
  168. package/src/components/TryIt/Servers/ServerVariables.tsx +33 -0
  169. package/src/components/TryIt/Servers/ServersDropdown.tsx +53 -0
  170. package/src/components/TryIt/Servers/VariableEditor.tsx +64 -0
  171. package/src/components/TryIt/Servers/useServerVariables.ts +19 -0
  172. package/src/components/TryIt/TryIt.spec.tsx +1511 -0
  173. package/src/components/TryIt/TryIt.stories.tsx +77 -0
  174. package/src/components/TryIt/TryIt.tsx +384 -0
  175. package/src/components/TryIt/TryItWithRequestSamples.spec.tsx +143 -0
  176. package/src/components/TryIt/TryItWithRequestSamples.stories.tsx +32 -0
  177. package/src/components/TryIt/TryItWithRequestSamples.tsx +42 -0
  178. package/src/components/TryIt/build-request.spec.ts +261 -0
  179. package/src/components/TryIt/build-request.ts +357 -0
  180. package/src/components/TryIt/chosenServer.ts +5 -0
  181. package/src/components/TryIt/index.ts +3 -0
  182. package/src/components/__tests__/LinkHeading.spec.tsx +125 -0
  183. package/src/constants.ts +176 -0
  184. package/src/containers/MockingProvider.tsx +23 -0
  185. package/src/context/InlineRefResolver.spec.tsx +183 -0
  186. package/src/context/InlineRefResolver.tsx +94 -0
  187. package/src/context/Options.tsx +27 -0
  188. package/src/context/Persistence.tsx +24 -0
  189. package/src/context/RouterType.tsx +9 -0
  190. package/src/core.css +97 -0
  191. package/src/hoc/utils.ts +5 -0
  192. package/src/hoc/withMosaicProvider.spec.tsx +48 -0
  193. package/src/hoc/withMosaicProvider.tsx +28 -0
  194. package/src/hoc/withQueryClientProvider.spec.tsx +38 -0
  195. package/src/hoc/withQueryClientProvider.tsx +35 -0
  196. package/src/hoc/withRouter.tsx +71 -0
  197. package/src/hooks/useBundleRefsIntoDocument.ts +60 -0
  198. package/src/hooks/useFirstRender.ts +8 -0
  199. package/src/hooks/useIsCompact.ts +26 -0
  200. package/src/hooks/useParsedData.ts +99 -0
  201. package/src/hooks/useParsedValue.ts +19 -0
  202. package/src/hooks/useResponsiveLayout.tsx +51 -0
  203. package/src/hooks/useRouter.tsx +31 -0
  204. package/src/hooks/useUniqueId.ts +4 -0
  205. package/src/index.ts +48 -0
  206. package/src/styled.tsx +22 -0
  207. package/src/styles.css +4 -0
  208. package/src/types.ts +170 -0
  209. package/src/utils/__tests__/securitySchemes.spec.ts +137 -0
  210. package/src/utils/exampleGeneration/exampleGeneration.spec.tsx +18 -0
  211. package/src/utils/exampleGeneration/exampleGeneration.ts +110 -0
  212. package/src/utils/fileToBase64.ts +11 -0
  213. package/src/utils/guards.ts +48 -0
  214. package/src/utils/headers.ts +316 -0
  215. package/src/utils/http-spec/IServer.ts +100 -0
  216. package/src/utils/http-spec/__tests__/IServer.spec.ts +51 -0
  217. package/src/utils/http-spec/examples.ts +5 -0
  218. package/src/utils/http.ts +9 -0
  219. package/src/utils/jotai/persistAtom.ts +31 -0
  220. package/src/utils/node.ts +19 -0
  221. package/src/utils/oas/__tests__/security.spec.ts +18 -0
  222. package/src/utils/oas/security.ts +76 -0
  223. package/src/utils/ref-resolving/ReferenceResolver.ts +29 -0
  224. package/src/utils/ref-resolving/resolvedObject.test.ts +415 -0
  225. package/src/utils/ref-resolving/resolvedObject.ts +107 -0
  226. package/src/utils/securitySchemes.ts +117 -0
  227. package/src/utils/string.ts +15 -0
  228. package/src/utils/tests/chooseOption.ts +7 -0
  229. package/src/web-components/createElementClass.ts +154 -0
  230. package/tsconfig.build.json +14 -0
  231. package/tsconfig.json +7 -0
  232. /package/{__fixtures__ → dist/__fixtures__}/articles/schema-with-refs.d.ts +0 -0
  233. /package/{__fixtures__ → dist/__fixtures__}/operations/application-octet-stream-post.d.ts +0 -0
  234. /package/{__fixtures__ → dist/__fixtures__}/operations/base64-file-upload.d.ts +0 -0
  235. /package/{__fixtures__ → dist/__fixtures__}/operations/big-response.d.ts +0 -0
  236. /package/{__fixtures__ → dist/__fixtures__}/operations/examples-request-body.d.ts +0 -0
  237. /package/{__fixtures__ → dist/__fixtures__}/operations/head-todos.d.ts +0 -0
  238. /package/{__fixtures__ → dist/__fixtures__}/operations/multipart-formdata-post.d.ts +0 -0
  239. /package/{__fixtures__ → dist/__fixtures__}/operations/operation-minimal.d.ts +0 -0
  240. /package/{__fixtures__ → dist/__fixtures__}/operations/operation-parameters.d.ts +0 -0
  241. /package/{__fixtures__ → dist/__fixtures__}/operations/operation-with-examples.d.ts +0 -0
  242. /package/{__fixtures__ → dist/__fixtures__}/operations/operation-without-servers.d.ts +0 -0
  243. /package/{__fixtures__ → dist/__fixtures__}/operations/patch-todos.d.ts +0 -0
  244. /package/{__fixtures__ → dist/__fixtures__}/operations/put-todos.d.ts +0 -0
  245. /package/{__fixtures__ → dist/__fixtures__}/operations/referenced-body.d.ts +0 -0
  246. /package/{__fixtures__ → dist/__fixtures__}/operations/request-body-empty-schema.d.ts +0 -0
  247. /package/{__fixtures__ → dist/__fixtures__}/operations/request-body.d.ts +0 -0
  248. /package/{__fixtures__ → dist/__fixtures__}/operations/securedOperation.d.ts +0 -0
  249. /package/{__fixtures__ → dist/__fixtures__}/operations/security-basic.d.ts +0 -0
  250. /package/{__fixtures__ → dist/__fixtures__}/operations/security-bearer.d.ts +0 -0
  251. /package/{__fixtures__ → dist/__fixtures__}/operations/simple-get.d.ts +0 -0
  252. /package/{__fixtures__ → dist/__fixtures__}/operations/string-numeric-enums.d.ts +0 -0
  253. /package/{__fixtures__ → dist/__fixtures__}/operations/urlencoded-post-oneof.d.ts +0 -0
  254. /package/{__fixtures__ → dist/__fixtures__}/operations/urlencoded-post.d.ts +0 -0
  255. /package/{__fixtures__ → dist/__fixtures__}/operations/with-url-variables.d.ts +0 -0
  256. /package/{__fixtures__ → dist/__fixtures__}/security-schemes/index.d.ts +0 -0
  257. /package/{__fixtures__ → dist/__fixtures__}/services/petstore.d.ts +0 -0
  258. /package/{__fixtures__ → dist/__fixtures__}/services/with-unnamed-servers.d.ts +0 -0
  259. /package/{__fixtures__ → dist/__fixtures__}/services/with-url-variables.d.ts +0 -0
  260. /package/{__fixtures__ → dist/__fixtures__}/services/without-origin.d.ts +0 -0
  261. /package/{components → dist/components}/Docs/Article/Article.spec.d.ts +0 -0
  262. /package/{components → dist/components}/Docs/Article/Article.stories.d.ts +0 -0
  263. /package/{components → dist/components}/Docs/Article/index.d.ts +0 -0
  264. /package/{components → dist/components}/Docs/Docs.d.ts +0 -0
  265. /package/{components → dist/components}/Docs/Docs.stories.d.ts +0 -0
  266. /package/{components → dist/components}/Docs/HttpOperation/Badges.d.ts +0 -0
  267. /package/{components → dist/components}/Docs/HttpOperation/Body.d.ts +0 -0
  268. /package/{components → dist/components}/Docs/HttpOperation/Callbacks.d.ts +0 -0
  269. /package/{components → dist/components}/Docs/HttpOperation/HttpOperation.d.ts +0 -0
  270. /package/{components → dist/components}/Docs/HttpOperation/HttpOperation.spec.d.ts +0 -0
  271. /package/{components → dist/components}/Docs/HttpOperation/HttpOperation.stories.d.ts +0 -0
  272. /package/{components → dist/components}/Docs/HttpOperation/Parameters.d.ts +0 -0
  273. /package/{components → dist/components}/Docs/HttpOperation/Parameters.spec.d.ts +0 -0
  274. /package/{components → dist/components}/Docs/HttpOperation/Request.d.ts +0 -0
  275. /package/{components → dist/components}/Docs/HttpOperation/Responses.d.ts +0 -0
  276. /package/{components → dist/components}/Docs/HttpOperation/index.d.ts +0 -0
  277. /package/{components → dist/components}/Docs/HttpService/AdditionalInfo.d.ts +0 -0
  278. /package/{components → dist/components}/Docs/HttpService/AdditionalInfo.stories.d.ts +0 -0
  279. /package/{components → dist/components}/Docs/HttpService/ExportButton.d.ts +0 -0
  280. /package/{components → dist/components}/Docs/HttpService/HttpService.d.ts +0 -0
  281. /package/{components → dist/components}/Docs/HttpService/HttpService.spec.d.ts +0 -0
  282. /package/{components → dist/components}/Docs/HttpService/HttpService.stories.d.ts +0 -0
  283. /package/{components → dist/components}/Docs/HttpService/SecuritySchemes.d.ts +0 -0
  284. /package/{components → dist/components}/Docs/HttpService/ServerInfo.d.ts +0 -0
  285. /package/{components → dist/components}/Docs/HttpService/index.d.ts +0 -0
  286. /package/{components → dist/components}/Docs/Model/Model.d.ts +0 -0
  287. /package/{components → dist/components}/Docs/Model/Model.spec.d.ts +0 -0
  288. /package/{components → dist/components}/Docs/Model/Model.stories.d.ts +0 -0
  289. /package/{components → dist/components}/Docs/Model/index.d.ts +0 -0
  290. /package/{components → dist/components}/Docs/NodeVendorExtensions.d.ts +0 -0
  291. /package/{components → dist/components}/Docs/Sections.d.ts +0 -0
  292. /package/{components → dist/components}/Docs/Security/PanelContent.d.ts +0 -0
  293. /package/{components → dist/components}/Docs/Security/index.d.ts +0 -0
  294. /package/{components → dist/components}/Docs/Skeleton.d.ts +0 -0
  295. /package/{components → dist/components}/Docs/TwoColumnLayout.d.ts +0 -0
  296. /package/{components → dist/components}/Docs/index.d.ts +0 -0
  297. /package/{components → dist/components}/Docs/story-helper.d.ts +0 -0
  298. /package/{components → dist/components}/Docs/story-renderer-helper.d.ts +0 -0
  299. /package/{components → dist/components}/Layout/MobileTopNav.d.ts +0 -0
  300. /package/{components → dist/components}/Layout/ResponsiveSidebarLayout.d.ts +0 -0
  301. /package/{components → dist/components}/Layout/SidebarLayout.d.ts +0 -0
  302. /package/{components → dist/components}/LinkHeading.d.ts +0 -0
  303. /package/{components → dist/components}/LoadMore.d.ts +0 -0
  304. /package/{components → dist/components}/Loading/Loading.d.ts +0 -0
  305. /package/{components → dist/components}/Logo.d.ts +0 -0
  306. /package/{components → dist/components}/MarkdownViewer/CustomComponents/CodeComponent.d.ts +0 -0
  307. /package/{components → dist/components}/MarkdownViewer/CustomComponents/CodeComponent.spec.d.ts +0 -0
  308. /package/{components → dist/components}/MarkdownViewer/CustomComponents/Provider.d.ts +0 -0
  309. /package/{components → dist/components}/MarkdownViewer/CustomComponents/ReactRouterLink.d.ts +0 -0
  310. /package/{components → dist/components}/MarkdownViewer/CustomComponents/ResolvedImage.d.ts +0 -0
  311. /package/{components → dist/components}/MarkdownViewer/CustomComponents/ScrollToHashElement.d.ts +0 -0
  312. /package/{components → dist/components}/MarkdownViewer/MarkdownViewer.spec.d.ts +0 -0
  313. /package/{components → dist/components}/MarkdownViewer/index.d.ts +0 -0
  314. /package/{components → dist/components}/NonIdealState.d.ts +0 -0
  315. /package/{components → dist/components}/PoweredByLink.d.ts +0 -0
  316. /package/{components → dist/components}/RequestSamples/RequestSamples.d.ts +0 -0
  317. /package/{components → dist/components}/RequestSamples/RequestSamples.stories.d.ts +0 -0
  318. /package/{components → dist/components}/RequestSamples/convertRequestToSample.d.ts +0 -0
  319. /package/{components → dist/components}/RequestSamples/extractCodeSamples.d.ts +0 -0
  320. /package/{components → dist/components}/RequestSamples/index.d.ts +0 -0
  321. /package/{components → dist/components}/RequestSamples/requestSampleConfigs.d.ts +0 -0
  322. /package/{components → dist/components}/ResponseExamples/ResponseExamples.d.ts +0 -0
  323. /package/{components → dist/components}/ResponseExamples/ResponseExamples.spec.d.ts +0 -0
  324. /package/{components → dist/components}/ResponseExamples/ResponseExamples.stories.d.ts +0 -0
  325. /package/{components → dist/components}/TableOfContents/TableOfContents.d.ts +0 -0
  326. /package/{components → dist/components}/TableOfContents/TableOfContents.spec.d.ts +0 -0
  327. /package/{components → dist/components}/TableOfContents/TableOfContents.stories.d.ts +0 -0
  328. /package/{components → dist/components}/TableOfContents/constants.d.ts +0 -0
  329. /package/{components → dist/components}/TableOfContents/index.d.ts +0 -0
  330. /package/{components → dist/components}/TableOfContents/types.d.ts +0 -0
  331. /package/{components → dist/components}/TableOfContents/utils.d.ts +0 -0
  332. /package/{components → dist/components}/TryIt/Auth/APIKeyAuth.d.ts +0 -0
  333. /package/{components → dist/components}/TryIt/Auth/Auth.d.ts +0 -0
  334. /package/{components → dist/components}/TryIt/Auth/AuthTokenInput.d.ts +0 -0
  335. /package/{components → dist/components}/TryIt/Auth/BasicAuth.d.ts +0 -0
  336. /package/{components → dist/components}/TryIt/Auth/BearerAuth.d.ts +0 -0
  337. /package/{components → dist/components}/TryIt/Auth/DigestAuth.d.ts +0 -0
  338. /package/{components → dist/components}/TryIt/Auth/OAuth2Auth.d.ts +0 -0
  339. /package/{components → dist/components}/TryIt/Auth/authentication-utils.d.ts +0 -0
  340. /package/{components → dist/components}/TryIt/Body/BinaryBody.d.ts +0 -0
  341. /package/{components → dist/components}/TryIt/Body/FormDataBody.d.ts +0 -0
  342. /package/{components → dist/components}/TryIt/Body/RequestBody.d.ts +0 -0
  343. /package/{components → dist/components}/TryIt/Body/request-body-utils.d.ts +0 -0
  344. /package/{components → dist/components}/TryIt/Body/useTextRequestBodyState.d.ts +0 -0
  345. /package/{components → dist/components}/TryIt/Mocking/MockingButton.d.ts +0 -0
  346. /package/{components → dist/components}/TryIt/Mocking/mocking-utils.d.ts +0 -0
  347. /package/{components → dist/components}/TryIt/Mocking/useMockingOptions.d.ts +0 -0
  348. /package/{components → dist/components}/TryIt/Parameters/FileUploadParameterEditors.d.ts +0 -0
  349. /package/{components → dist/components}/TryIt/Parameters/OperationParameters.d.ts +0 -0
  350. /package/{components → dist/components}/TryIt/Parameters/ParameterEditor.d.ts +0 -0
  351. /package/{components → dist/components}/TryIt/Parameters/parameter-utils.d.ts +0 -0
  352. /package/{components → dist/components}/TryIt/Parameters/parameter-utils.spec.d.ts +0 -0
  353. /package/{components → dist/components}/TryIt/Parameters/useOperationParameters.d.ts +0 -0
  354. /package/{components → dist/components}/TryIt/Response/ReponseCodeViewer.d.ts +0 -0
  355. /package/{components → dist/components}/TryIt/Response/Response.d.ts +0 -0
  356. /package/{components → dist/components}/TryIt/Response/Response.spec.d.ts +0 -0
  357. /package/{components → dist/components}/TryIt/Response/hooks/useLineCount.d.ts +0 -0
  358. /package/{components → dist/components}/TryIt/Servers/ServerVariables.d.ts +0 -0
  359. /package/{components → dist/components}/TryIt/Servers/ServersDropdown.d.ts +0 -0
  360. /package/{components → dist/components}/TryIt/Servers/VariableEditor.d.ts +0 -0
  361. /package/{components → dist/components}/TryIt/Servers/useServerVariables.d.ts +0 -0
  362. /package/{components → dist/components}/TryIt/TryIt.d.ts +0 -0
  363. /package/{components → dist/components}/TryIt/TryIt.spec.d.ts +0 -0
  364. /package/{components → dist/components}/TryIt/TryIt.stories.d.ts +0 -0
  365. /package/{components → dist/components}/TryIt/TryItWithRequestSamples.d.ts +0 -0
  366. /package/{components → dist/components}/TryIt/TryItWithRequestSamples.spec.d.ts +0 -0
  367. /package/{components → dist/components}/TryIt/TryItWithRequestSamples.stories.d.ts +0 -0
  368. /package/{components → dist/components}/TryIt/build-request.d.ts +0 -0
  369. /package/{components → dist/components}/TryIt/build-request.spec.d.ts +0 -0
  370. /package/{components → dist/components}/TryIt/chosenServer.d.ts +0 -0
  371. /package/{components → dist/components}/TryIt/index.d.ts +0 -0
  372. /package/{constants.d.ts → dist/constants.d.ts} +0 -0
  373. /package/{containers → dist/containers}/MockingProvider.d.ts +0 -0
  374. /package/{context → dist/context}/InlineRefResolver.d.ts +0 -0
  375. /package/{context → dist/context}/InlineRefResolver.spec.d.ts +0 -0
  376. /package/{context → dist/context}/Options.d.ts +0 -0
  377. /package/{context → dist/context}/Persistence.d.ts +0 -0
  378. /package/{context → dist/context}/RouterType.d.ts +0 -0
  379. /package/{core.css → dist/core.css} +0 -0
  380. /package/{hoc → dist/hoc}/utils.d.ts +0 -0
  381. /package/{hoc → dist/hoc}/withMosaicProvider.d.ts +0 -0
  382. /package/{hoc → dist/hoc}/withMosaicProvider.spec.d.ts +0 -0
  383. /package/{hoc → dist/hoc}/withQueryClientProvider.d.ts +0 -0
  384. /package/{hoc → dist/hoc}/withQueryClientProvider.spec.d.ts +0 -0
  385. /package/{hoc → dist/hoc}/withRouter.d.ts +0 -0
  386. /package/{hooks → dist/hooks}/useBundleRefsIntoDocument.d.ts +0 -0
  387. /package/{hooks → dist/hooks}/useFirstRender.d.ts +0 -0
  388. /package/{hooks → dist/hooks}/useIsCompact.d.ts +0 -0
  389. /package/{hooks → dist/hooks}/useParsedData.d.ts +0 -0
  390. /package/{hooks → dist/hooks}/useParsedValue.d.ts +0 -0
  391. /package/{hooks → dist/hooks}/useResponsiveLayout.d.ts +0 -0
  392. /package/{hooks → dist/hooks}/useRouter.d.ts +0 -0
  393. /package/{hooks → dist/hooks}/useUniqueId.d.ts +0 -0
  394. /package/{index.d.ts → dist/index.d.ts} +0 -0
  395. /package/{styled.d.ts → dist/styled.d.ts} +0 -0
  396. /package/{styles.min.css → dist/styles.min.css} +0 -0
  397. /package/{types.d.ts → dist/types.d.ts} +0 -0
  398. /package/{utils → dist/utils}/exampleGeneration/exampleGeneration.d.ts +0 -0
  399. /package/{utils → dist/utils}/exampleGeneration/exampleGeneration.spec.d.ts +0 -0
  400. /package/{utils → dist/utils}/fileToBase64.d.ts +0 -0
  401. /package/{utils → dist/utils}/guards.d.ts +0 -0
  402. /package/{utils → dist/utils}/headers.d.ts +0 -0
  403. /package/{utils → dist/utils}/http-spec/IServer.d.ts +0 -0
  404. /package/{utils → dist/utils}/http-spec/examples.d.ts +0 -0
  405. /package/{utils → dist/utils}/http.d.ts +0 -0
  406. /package/{utils → dist/utils}/jotai/persistAtom.d.ts +0 -0
  407. /package/{utils → dist/utils}/node.d.ts +0 -0
  408. /package/{utils → dist/utils}/oas/security.d.ts +0 -0
  409. /package/{utils → dist/utils}/ref-resolving/ReferenceResolver.d.ts +0 -0
  410. /package/{utils → dist/utils}/ref-resolving/resolvedObject.d.ts +0 -0
  411. /package/{utils → dist/utils}/ref-resolving/resolvedObject.test.d.ts +0 -0
  412. /package/{utils → dist/utils}/securitySchemes.d.ts +0 -0
  413. /package/{utils → dist/utils}/string.d.ts +0 -0
  414. /package/{utils → dist/utils}/tests/chooseOption.d.ts +0 -0
  415. /package/{web-components → dist/web-components}/createElementClass.d.ts +0 -0
package/src/styled.tsx ADDED
@@ -0,0 +1,22 @@
1
+ import { Box } from '@stoplight/mosaic';
2
+ import * as React from 'react';
3
+
4
+ import { getDisplayName } from './hoc/utils';
5
+
6
+ export const Styled = ({ children }: { children: React.ReactNode }) => {
7
+ return (
8
+ <Box className="sl-elements sl-antialiased" fontFamily="ui" fontSize="base" color="body" h="full">
9
+ {children}
10
+ </Box>
11
+ );
12
+ };
13
+
14
+ export function withStyles<T>(Component: React.ComponentType<T>): React.FC<T> {
15
+ const Inner: React.FC<T> = props => (
16
+ <Styled>
17
+ <Component {...props} />
18
+ </Styled>
19
+ );
20
+ Inner.displayName = `withStyles(${getDisplayName(Component)})`;
21
+ return Inner;
22
+ }
package/src/styles.css ADDED
@@ -0,0 +1,4 @@
1
+ @import '@stoplight/mosaic/styles.css';
2
+ @import '@stoplight/mosaic/themes/default.css';
3
+
4
+ @import 'core.css';
package/src/types.ts ADDED
@@ -0,0 +1,170 @@
1
+ import type { IMarkdownViewerProps } from '@stoplight/markdown-viewer';
2
+ import { IHttpOperation, IHttpService, IHttpWebhookOperation, NodeType } from '@stoplight/types';
3
+ import { JSONSchema4, JSONSchema6, JSONSchema7 } from 'json-schema';
4
+
5
+ export type JSONSchema = JSONSchema4 | JSONSchema6 | JSONSchema7;
6
+
7
+ export type ParsedNode =
8
+ | {
9
+ type: NodeType.Article;
10
+ data: IMarkdownViewerProps['markdown'];
11
+ }
12
+ | {
13
+ type: NodeType.HttpOperation;
14
+ data: IHttpOperation;
15
+ }
16
+ | {
17
+ type: NodeType.HttpWebhook;
18
+ data: IHttpWebhookOperation;
19
+ }
20
+ | {
21
+ type: NodeType.HttpService;
22
+ data: IHttpService;
23
+ }
24
+ | {
25
+ type: NodeType.Model;
26
+ data: JSONSchema7;
27
+ }
28
+ | {
29
+ type: NodeType.HttpServer;
30
+ data: unknown;
31
+ }
32
+ | {
33
+ type: NodeType.Unknown;
34
+ data: unknown;
35
+ }
36
+ | {
37
+ type: NodeType.TableOfContents;
38
+ data: unknown;
39
+ }
40
+ | {
41
+ type: NodeType.Generic;
42
+ data: unknown;
43
+ };
44
+
45
+ export interface INodeFilter {
46
+ nodeUri?: string;
47
+ nodeType?: string;
48
+ }
49
+
50
+ export interface IBranchNode {
51
+ id: number;
52
+ version?: string;
53
+ isLatestVersion?: boolean;
54
+
55
+ node: {
56
+ id: number;
57
+ uri: string;
58
+ };
59
+
60
+ snapshot: {
61
+ id: number;
62
+ type: string;
63
+ name: string;
64
+ summary?: string | null;
65
+ data?: unknown;
66
+ tagNames?: string[];
67
+ };
68
+ }
69
+
70
+ export enum IntegrationKind {
71
+ AzureDevopsServer = 'azure_devops_server',
72
+ BitbucketCloud = 'bitbucket_cloud',
73
+ BitbucketServer = 'bitbucket_server',
74
+ Builtin = 'builtin',
75
+ Gitea = 'gitea',
76
+ Github = 'github',
77
+ Gitlab = 'gitlab',
78
+ Ldap = 'ldap',
79
+ Saml = 'saml',
80
+ }
81
+
82
+ export type BundledBranchNode = {
83
+ id: number;
84
+ data: string;
85
+ type: NodeType;
86
+ name: string;
87
+ uri: string;
88
+ summary: string;
89
+ branchSlug: string;
90
+ workspaceIntegration: {
91
+ kind: IntegrationKind;
92
+ apiUrl: string;
93
+ hostUrl: string;
94
+ };
95
+ externalOrgSlug: string;
96
+ externalSlug: string;
97
+ };
98
+
99
+ export interface ITableOfContentsTree {
100
+ items: TableOfContentItem[];
101
+ }
102
+
103
+ export type TableOfContentItem = Divider | Group | Item;
104
+
105
+ export type Divider = {
106
+ title: string;
107
+ type: 'divider';
108
+ };
109
+
110
+ export type Group = {
111
+ title: string;
112
+ type: 'group';
113
+ items: TableOfContentItem[];
114
+ uri?: string;
115
+ };
116
+
117
+ export type Item = {
118
+ title: string;
119
+ type: 'item';
120
+ uri: string;
121
+ };
122
+
123
+ export type RouterType = 'history' | 'memory' | 'hash' | 'static';
124
+
125
+ export interface RoutingProps {
126
+ /**
127
+ * Only applies when using `history`-based routing. (See the `router` prop.) Specifies the base path under which
128
+ * all API component controlled pages are located. The host must route any location under this path to the API component.
129
+ */
130
+ basePath?: string;
131
+
132
+ /**
133
+ * Only applies when using `static`-based routing. (See the `router` prop.) Specifies the current static path
134
+ * that is being rendered by the StaticRouter, which allows us to properly render the currently active route
135
+ * on the server and already render the content instead of sending an empty page to the client.
136
+ */
137
+ staticRouterPath?: string;
138
+
139
+ /**
140
+ * Which routing solution to use when the user navigates using the table of contents.
141
+ * Only applies when using the *sidebar* layout.
142
+ *
143
+ * - **`history`** - The table of contents pushes entries onto the navigation stack, e.g. `location.pushState`.
144
+ * This requires that the host routes any location under `basePath` (see `basePath` prop) to the API component.
145
+ * - **`hash`** - Navigation happens using hash-fragments (`/some/page#these-fragments-here`).
146
+ * This still allows the user to link to individual pages without requiring the more complex routing setup `history` needs.
147
+ * - **`memory`** - Internal navigation does not change the host `location` at all.
148
+ * This works in every scenario, but it lacks the important feature of being able to link to individual pages.
149
+ * - **`static`** - Renders a single static page for the provided `staticRouterPath`.
150
+ * This can be used when the page is being rendered on the server (either SSR or SSG) to pre-generate the
151
+ * markup of the page, which can be rehydrated on the client. This can reduce the amount of time spent rendering
152
+ * the page on the client.
153
+ *
154
+ * @default "history"
155
+ */
156
+ router?: RouterType;
157
+ }
158
+
159
+ export type ParamField = {
160
+ name: string;
161
+ description: string;
162
+ example: string;
163
+ };
164
+
165
+ export type LogoProps = {
166
+ altText: string;
167
+ url?: string;
168
+ backgroundColor?: string;
169
+ href?: string;
170
+ };
@@ -0,0 +1,137 @@
1
+ import {
2
+ IOauth2AuthorizationCodeFlow,
3
+ IOauth2ClientCredentialsFlow,
4
+ IOauth2ImplicitFlow,
5
+ IOauth2PasswordFlow,
6
+ } from '@stoplight/types';
7
+
8
+ import { getDefaultDescription } from '../securitySchemes';
9
+
10
+ describe('getDefaultDescription()', () => {
11
+ it('should handle implicit flow', () => {
12
+ const flow: IOauth2ImplicitFlow = {
13
+ authorizationUrl: 'http://authorizationURL',
14
+ scopes: { 'scope:implicit': 'implicit scope description', 'scope:read': 'read scope description' },
15
+ };
16
+
17
+ const description = getDefaultDescription({
18
+ id: 'http-security-oauth2-implicit',
19
+ key: 'oauth2-implicit',
20
+ type: 'oauth2',
21
+ flows: { implicit: flow },
22
+ });
23
+
24
+ expect(description).toMatchInlineSnapshot(`
25
+ "**Implicit OAuth Flow**
26
+
27
+ Authorize URL: http://authorizationURL
28
+
29
+ Scopes:
30
+ - \`scope:implicit\` - implicit scope description
31
+ - \`scope:read\` - read scope description"
32
+ `);
33
+ });
34
+
35
+ it('should handle authorization code flow', () => {
36
+ const flow: IOauth2AuthorizationCodeFlow = {
37
+ authorizationUrl: 'http://authorizationURL',
38
+ tokenUrl: 'http://tokenURL',
39
+ refreshUrl: 'http://refreshURL',
40
+ scopes: { 'scope:authorizationCode': 'authorizationCode scope description' },
41
+ };
42
+
43
+ const description = getDefaultDescription({
44
+ id: 'http-security-oauth2-authorizationCode',
45
+ key: 'oauth2-authorizationCode',
46
+ type: 'oauth2',
47
+ flows: { authorizationCode: flow },
48
+ });
49
+
50
+ expect(description).toMatchInlineSnapshot(`
51
+ "**Authorization Code OAuth Flow**
52
+
53
+ Authorize URL: http://authorizationURL
54
+
55
+ Token URL: http://tokenURL
56
+
57
+ Refresh URL: http://refreshURL
58
+
59
+ Scopes:
60
+ - \`scope:authorizationCode\` - authorizationCode scope description"
61
+ `);
62
+ });
63
+
64
+ it('should handle client credentials flow', () => {
65
+ const flow: IOauth2ClientCredentialsFlow = {
66
+ tokenUrl: 'http://tokenURL',
67
+ scopes: { 'scope:clientCredentials': 'clientCredentials scope description' },
68
+ };
69
+
70
+ const description = getDefaultDescription({
71
+ id: 'http-security-oauth2-clientCredentials',
72
+ key: 'oauth2-clientCredentials',
73
+ type: 'oauth2',
74
+ flows: { clientCredentials: flow },
75
+ });
76
+
77
+ expect(description).toMatchInlineSnapshot(`
78
+ "**Client Credentials OAuth Flow**
79
+
80
+ Token URL: http://tokenURL
81
+
82
+ Scopes:
83
+ - \`scope:clientCredentials\` - clientCredentials scope description"
84
+ `);
85
+ });
86
+
87
+ it('should handle password flow', () => {
88
+ const flow: IOauth2PasswordFlow = {
89
+ tokenUrl: 'http://tokenURL',
90
+ scopes: { 'scope:password': 'password scope description' },
91
+ };
92
+
93
+ const description = getDefaultDescription({
94
+ id: 'http-security-oauth2-password',
95
+ key: 'oauth2-password',
96
+ type: 'oauth2',
97
+ flows: { password: flow },
98
+ });
99
+
100
+ expect(description).toMatchInlineSnapshot(`
101
+ "**Password OAuth Flow**
102
+
103
+ Token URL: http://tokenURL
104
+
105
+ Scopes:
106
+ - \`scope:password\` - password scope description"
107
+ `);
108
+ });
109
+
110
+ it('should handle api key flow with roles', () => {
111
+ const description = getDefaultDescription({
112
+ id: 'security-apikey-access-token',
113
+ key: 'apikey-access-token',
114
+ type: 'apiKey',
115
+ name: 'access_token',
116
+ in: 'query',
117
+ extensions: { ['x-scopes']: ['image:read', 'user:read'] },
118
+ });
119
+
120
+ expect(description).toContain('Roles: `image:read`, `user:read`');
121
+ });
122
+
123
+ it.each<'bearer' | 'basic' | 'digest'>(['bearer', 'basic', 'digest'])(
124
+ 'should handle http %s flow with roles',
125
+ scheme => {
126
+ const description = getDefaultDescription({
127
+ id: 'security-http-access-token',
128
+ key: 'http-access-token',
129
+ type: 'http',
130
+ scheme,
131
+ extensions: { ['x-scopes']: ['image:read', 'user:read'] },
132
+ });
133
+
134
+ expect(description).toContain('Roles: `image:read`, `user:read`');
135
+ },
136
+ );
137
+ });
@@ -0,0 +1,18 @@
1
+ import * as Sampler from '@stoplight/json-schema-sampler';
2
+ import { JSONSchema7 } from 'json-schema';
3
+
4
+ import { generateExamplesFromJsonSchema } from './exampleGeneration';
5
+
6
+ const modelWithNoExamples: JSONSchema7 = require('../../__fixtures__/models/model-with-no-examples.json');
7
+
8
+ describe('generateExamplesFromJsonSchema', () => {
9
+ it('returns error message when example generation fails ', () => {
10
+ const errorMessage = 'This is a mocked Error message';
11
+ jest.spyOn(Sampler, 'sample').mockImplementation(() => {
12
+ throw Error(errorMessage);
13
+ });
14
+
15
+ const example = generateExamplesFromJsonSchema(modelWithNoExamples);
16
+ expect(example).toEqual([{ label: '', data: `Example cannot be created for this schema\nError: ${errorMessage}` }]);
17
+ });
18
+ });
@@ -0,0 +1,110 @@
1
+ import { isPlainObject, safeStringify } from '@stoplight/json';
2
+ import * as Sampler from '@stoplight/json-schema-sampler';
3
+ import { IMediaTypeContent, INodeExample, INodeExternalExample } from '@stoplight/types';
4
+ import { JSONSchema7 } from 'json-schema';
5
+ import React from 'react';
6
+
7
+ import { useDocument } from '../../context/InlineRefResolver';
8
+
9
+ type Example = {
10
+ label: string;
11
+ data: string;
12
+ };
13
+
14
+ export type GenerateExampleFromMediaTypeContentOptions = Sampler.Options;
15
+
16
+ export const useGenerateExampleFromMediaTypeContent = (
17
+ mediaTypeContent: IMediaTypeContent | undefined,
18
+ chosenExampleIndex?: number,
19
+ { skipReadOnly, skipWriteOnly, skipNonRequired, ticks }: GenerateExampleFromMediaTypeContentOptions = {},
20
+ ) => {
21
+ const document = useDocument();
22
+ return React.useMemo(
23
+ () =>
24
+ generateExampleFromMediaTypeContent(mediaTypeContent, document, chosenExampleIndex, {
25
+ skipNonRequired,
26
+ skipWriteOnly,
27
+ skipReadOnly,
28
+ ticks: ticks || 6000,
29
+ }),
30
+ [mediaTypeContent, document, chosenExampleIndex, skipNonRequired, skipWriteOnly, skipReadOnly, ticks],
31
+ );
32
+ };
33
+
34
+ export const generateExampleFromMediaTypeContent = (
35
+ mediaTypeContent: IMediaTypeContent | undefined,
36
+ document: any,
37
+ chosenExampleIndex = 0,
38
+ options?: GenerateExampleFromMediaTypeContentOptions,
39
+ ) => {
40
+ const textRequestBodySchema = mediaTypeContent?.schema;
41
+ const textRequestBodyExamples = mediaTypeContent?.examples;
42
+
43
+ try {
44
+ if (textRequestBodyExamples?.length) {
45
+ return (
46
+ safeStringify(
47
+ textRequestBodyExamples?.[chosenExampleIndex]['value' as keyof (INodeExample | INodeExternalExample)],
48
+ undefined,
49
+ 2,
50
+ ) ?? ''
51
+ );
52
+ } else if (textRequestBodySchema) {
53
+ const generated = Sampler.sample(textRequestBodySchema, options, document);
54
+ return generated !== null ? safeStringify(generated, undefined, 2) ?? '' : '';
55
+ }
56
+ } catch (e) {
57
+ console.warn(e);
58
+ return `Example cannot be created for this schema\n${e}`;
59
+ }
60
+ return '';
61
+ };
62
+
63
+ export const generateExamplesFromJsonSchema = (schema: JSONSchema7 & { 'x-examples'?: unknown }): Example[] => {
64
+ const examples: Example[] = [];
65
+
66
+ if (Array.isArray(schema?.examples)) {
67
+ schema.examples.forEach((example, index) => {
68
+ examples.push({
69
+ data: safeStringify(example, undefined, 2) ?? '',
70
+ label: index === 0 ? 'default' : `example-${index}`,
71
+ });
72
+ });
73
+ } else if (isPlainObject(schema?.['x-examples'])) {
74
+ for (const [label, example] of Object.entries(schema['x-examples'])) {
75
+ if (isPlainObject(example)) {
76
+ const val = example.hasOwnProperty('value') && Object.keys(example).length === 1 ? example.value : example;
77
+ examples.push({
78
+ label,
79
+ data: safeStringify(val, undefined, 2) ?? '',
80
+ });
81
+ }
82
+ }
83
+ }
84
+
85
+ if (examples.length) {
86
+ return examples;
87
+ }
88
+
89
+ try {
90
+ const generated = Sampler.sample(schema, {
91
+ maxSampleDepth: 4,
92
+ ticks: 6000,
93
+ });
94
+
95
+ return generated !== null
96
+ ? [
97
+ {
98
+ label: 'default',
99
+ data: safeStringify(generated, undefined, 2) ?? '',
100
+ },
101
+ ]
102
+ : [{ label: 'default', data: '' }];
103
+ } catch (e) {
104
+ return [{ label: '', data: `Example cannot be created for this schema\n${e}` }];
105
+ }
106
+ };
107
+
108
+ export const exceedsSize = (example: string, size: number = 500) => {
109
+ return example.split(/\r\n|\r|\n/).length > size;
110
+ };
@@ -0,0 +1,11 @@
1
+ export const fileToBase64 = (file: File) =>
2
+ new Promise<string>((resolve, reject) => {
3
+ const reader = new FileReader();
4
+ reader.readAsDataURL(file);
5
+ reader.onload = () => {
6
+ const result = reader.result as string;
7
+ const base64String = result.replace(/data:.*\/.*;base64,/g, '');
8
+ resolve(base64String);
9
+ };
10
+ reader.onerror = () => reject(reader.error);
11
+ });
@@ -0,0 +1,48 @@
1
+ import type { IMarkdownViewerProps } from '@stoplight/markdown-viewer';
2
+ import { isArray } from '@stoplight/mosaic';
3
+ import { IHttpOperation, IHttpService, IHttpWebhookOperation, INode } from '@stoplight/types';
4
+ import { JSONSchema7 } from 'json-schema';
5
+ import { isObject, isPlainObject } from 'lodash';
6
+
7
+ export function isSMDASTRoot(maybeAst: unknown): maybeAst is IMarkdownViewerProps['markdown'] {
8
+ return (
9
+ isObject(maybeAst) &&
10
+ maybeAst['type' as keyof IMarkdownViewerProps['markdown']] === 'root' &&
11
+ isArray(maybeAst['children' as keyof IMarkdownViewerProps['markdown']])
12
+ );
13
+ }
14
+
15
+ export function isJSONSchema(maybeSchema: unknown): maybeSchema is JSONSchema7 {
16
+ // the trick is, JSONSchema doesn't define any required properties, so technically even an empty object is a valid JSONSchema
17
+ return isPlainObject(maybeSchema);
18
+ }
19
+
20
+ function isStoplightNode(maybeNode: unknown): maybeNode is INode {
21
+ return isObject(maybeNode) && 'id' in maybeNode;
22
+ }
23
+
24
+ export function isHttpService(maybeHttpService: unknown): maybeHttpService is IHttpService {
25
+ return isStoplightNode(maybeHttpService) && 'name' in maybeHttpService && 'version' in maybeHttpService;
26
+ }
27
+
28
+ export function isHttpOperation(maybeHttpOperation: unknown): maybeHttpOperation is IHttpOperation {
29
+ return isStoplightNode(maybeHttpOperation) && 'method' in maybeHttpOperation && 'path' in maybeHttpOperation;
30
+ }
31
+
32
+ export function isHttpWebhookOperation(
33
+ maybeHttpWebhookOperation: unknown,
34
+ ): maybeHttpWebhookOperation is IHttpWebhookOperation {
35
+ return (
36
+ isStoplightNode(maybeHttpWebhookOperation) &&
37
+ 'method' in maybeHttpWebhookOperation &&
38
+ 'name' in maybeHttpWebhookOperation
39
+ );
40
+ }
41
+
42
+ const properUrl = new RegExp(
43
+ /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/,
44
+ );
45
+
46
+ export function isProperUrl(url: string) {
47
+ return properUrl.test(url);
48
+ }