@stoplight/elements-core 9.0.16-beta-0.3 → 9.0.17

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/{dist/index.esm.js → index.esm.js} +34 -46
  2. package/{dist/index.js → index.js} +33 -45
  3. package/{dist/index.mjs → index.mjs} +34 -46
  4. package/package.json +14 -74
  5. package/.storybook/main.js +0 -6
  6. package/.storybook/manager.js +0 -1
  7. package/.storybook/preview.jsx +0 -50
  8. package/dist/LICENSE +0 -190
  9. package/dist/README.md +0 -1
  10. package/dist/package.json +0 -64
  11. package/jest.config.js +0 -10
  12. package/src/__fixtures__/articles/basic.md +0 -10
  13. package/src/__fixtures__/articles/kitchen-sink.md +0 -318
  14. package/src/__fixtures__/articles/long-page-heading.md +0 -955
  15. package/src/__fixtures__/articles/multiple-try-its.md +0 -54
  16. package/src/__fixtures__/articles/schema-with-refs.ts +0 -82
  17. package/src/__fixtures__/http-request.json +0 -11
  18. package/src/__fixtures__/models/model-with-no-examples.json +0 -15
  19. package/src/__fixtures__/models/model-with-one-example.json +0 -23
  20. package/src/__fixtures__/models/model-with-three-examples.json +0 -35
  21. package/src/__fixtures__/operations/application-octet-stream-post.ts +0 -39
  22. package/src/__fixtures__/operations/base64-file-upload.ts +0 -43
  23. package/src/__fixtures__/operations/big-response.ts +0 -4690
  24. package/src/__fixtures__/operations/bundled-parameter.ts +0 -128
  25. package/src/__fixtures__/operations/empty-response.ts +0 -15
  26. package/src/__fixtures__/operations/examples-request-body.ts +0 -135
  27. package/src/__fixtures__/operations/head-todos.ts +0 -49
  28. package/src/__fixtures__/operations/invalid-response-example.ts +0 -45
  29. package/src/__fixtures__/operations/multipart-formdata-post.ts +0 -61
  30. package/src/__fixtures__/operations/operation-minimal.ts +0 -11
  31. package/src/__fixtures__/operations/operation-parameters.ts +0 -337
  32. package/src/__fixtures__/operations/operation-with-examples.ts +0 -113
  33. package/src/__fixtures__/operations/operation-without-servers.ts +0 -16
  34. package/src/__fixtures__/operations/patch-todos.ts +0 -49
  35. package/src/__fixtures__/operations/put-todos.ts +0 -862
  36. package/src/__fixtures__/operations/referenced-body.ts +0 -62
  37. package/src/__fixtures__/operations/request-body-empty-schema.ts +0 -35
  38. package/src/__fixtures__/operations/request-body.ts +0 -62
  39. package/src/__fixtures__/operations/securedOperation.ts +0 -118
  40. package/src/__fixtures__/operations/security-basic.ts +0 -24
  41. package/src/__fixtures__/operations/security-bearer.ts +0 -25
  42. package/src/__fixtures__/operations/simple-get.ts +0 -17
  43. package/src/__fixtures__/operations/simple.ts +0 -103
  44. package/src/__fixtures__/operations/string-numeric-enums.ts +0 -32
  45. package/src/__fixtures__/operations/urlencoded-post-oneof.ts +0 -81
  46. package/src/__fixtures__/operations/urlencoded-post.ts +0 -54
  47. package/src/__fixtures__/operations/vendor-extensions.ts +0 -337
  48. package/src/__fixtures__/operations/with-url-variables.ts +0 -47
  49. package/src/__fixtures__/operations/x-code-samples.ts +0 -348
  50. package/src/__fixtures__/schemas/circular.ts +0 -1906
  51. package/src/__fixtures__/schemas/contact.json +0 -293
  52. package/src/__fixtures__/schemas/media-entry.json +0 -69
  53. package/src/__fixtures__/schemas/simple.json +0 -27
  54. package/src/__fixtures__/schemas/todo-full.v1.json +0 -35
  55. package/src/__fixtures__/schemas/todo-partial.v1.json +0 -14
  56. package/src/__fixtures__/schemas/user.v1.json +0 -17
  57. package/src/__fixtures__/security-schemes/index.ts +0 -38
  58. package/src/__fixtures__/services/petstore.ts +0 -167
  59. package/src/__fixtures__/services/with-unnamed-servers.ts +0 -38
  60. package/src/__fixtures__/services/with-url-variables.ts +0 -83
  61. package/src/__fixtures__/services/without-origin.ts +0 -20
  62. package/src/__fixtures__/table-of-contents/nested.ts +0 -44
  63. package/src/__fixtures__/table-of-contents/studio-template.ts +0 -100
  64. package/src/__fixtures__/table-of-contents/studio.ts +0 -559
  65. package/src/components/Docs/Article/Article.spec.tsx +0 -38
  66. package/src/components/Docs/Article/Article.stories.tsx +0 -17
  67. package/src/components/Docs/Article/index.tsx +0 -38
  68. package/src/components/Docs/Docs.stories.tsx +0 -33
  69. package/src/components/Docs/Docs.tsx +0 -233
  70. package/src/components/Docs/HttpOperation/Badges.tsx +0 -49
  71. package/src/components/Docs/HttpOperation/Body.tsx +0 -79
  72. package/src/components/Docs/HttpOperation/Callbacks.tsx +0 -89
  73. package/src/components/Docs/HttpOperation/HttpOperation.spec.tsx +0 -787
  74. package/src/components/Docs/HttpOperation/HttpOperation.stories.ts +0 -14
  75. package/src/components/Docs/HttpOperation/HttpOperation.tsx +0 -255
  76. package/src/components/Docs/HttpOperation/Parameters.spec.tsx +0 -101
  77. package/src/components/Docs/HttpOperation/Parameters.tsx +0 -118
  78. package/src/components/Docs/HttpOperation/Request.tsx +0 -140
  79. package/src/components/Docs/HttpOperation/Responses.tsx +0 -247
  80. package/src/components/Docs/HttpOperation/index.ts +0 -1
  81. package/src/components/Docs/HttpService/AdditionalInfo.stories.ts +0 -48
  82. package/src/components/Docs/HttpService/AdditionalInfo.tsx +0 -61
  83. package/src/components/Docs/HttpService/ExportButton.tsx +0 -35
  84. package/src/components/Docs/HttpService/HttpService.spec.tsx +0 -429
  85. package/src/components/Docs/HttpService/HttpService.stories.ts +0 -14
  86. package/src/components/Docs/HttpService/HttpService.tsx +0 -99
  87. package/src/components/Docs/HttpService/SecuritySchemes.tsx +0 -82
  88. package/src/components/Docs/HttpService/ServerInfo.tsx +0 -196
  89. package/src/components/Docs/HttpService/index.ts +0 -1
  90. package/src/components/Docs/Model/Model.spec.tsx +0 -241
  91. package/src/components/Docs/Model/Model.stories.tsx +0 -16
  92. package/src/components/Docs/Model/Model.tsx +0 -160
  93. package/src/components/Docs/Model/index.ts +0 -1
  94. package/src/components/Docs/NodeVendorExtensions.tsx +0 -55
  95. package/src/components/Docs/Sections.tsx +0 -54
  96. package/src/components/Docs/Security/PanelContent.tsx +0 -38
  97. package/src/components/Docs/Security/index.ts +0 -1
  98. package/src/components/Docs/Skeleton.tsx +0 -12
  99. package/src/components/Docs/TwoColumnLayout.tsx +0 -28
  100. package/src/components/Docs/index.ts +0 -1
  101. package/src/components/Docs/story-helper.ts +0 -46
  102. package/src/components/Docs/story-renderer-helper.tsx +0 -56
  103. package/src/components/Layout/MobileTopNav.tsx +0 -78
  104. package/src/components/Layout/ResponsiveSidebarLayout.tsx +0 -175
  105. package/src/components/Layout/SidebarLayout.tsx +0 -107
  106. package/src/components/LinkHeading.tsx +0 -21
  107. package/src/components/LoadMore.tsx +0 -20
  108. package/src/components/Loading/Loading.tsx +0 -9
  109. package/src/components/Logo.tsx +0 -25
  110. package/src/components/MarkdownViewer/CustomComponents/CodeComponent.spec.ts +0 -90
  111. package/src/components/MarkdownViewer/CustomComponents/CodeComponent.tsx +0 -164
  112. package/src/components/MarkdownViewer/CustomComponents/Provider.tsx +0 -20
  113. package/src/components/MarkdownViewer/CustomComponents/ReactRouterLink.tsx +0 -27
  114. package/src/components/MarkdownViewer/CustomComponents/ResolvedImage.tsx +0 -86
  115. package/src/components/MarkdownViewer/CustomComponents/ScrollToHashElement.tsx +0 -96
  116. package/src/components/MarkdownViewer/MarkdownViewer.spec.tsx +0 -170
  117. package/src/components/MarkdownViewer/index.tsx +0 -10
  118. package/src/components/NonIdealState.tsx +0 -20
  119. package/src/components/PoweredByLink.tsx +0 -30
  120. package/src/components/RequestSamples/RequestSamples.stories.tsx +0 -67
  121. package/src/components/RequestSamples/RequestSamples.tsx +0 -246
  122. package/src/components/RequestSamples/__tests__/RequestSamples.test.tsx +0 -131
  123. package/src/components/RequestSamples/__tests__/__snapshots__/convertRequestToSample.spec.ts.snap +0 -746
  124. package/src/components/RequestSamples/__tests__/convertRequestToSample.spec.ts +0 -118
  125. package/src/components/RequestSamples/convertRequestToSample.ts +0 -56
  126. package/src/components/RequestSamples/extractCodeSamples.ts +0 -50
  127. package/src/components/RequestSamples/index.ts +0 -2
  128. package/src/components/RequestSamples/requestSampleConfigs.ts +0 -182
  129. package/src/components/ResponseExamples/ResponseExamples.spec.tsx +0 -121
  130. package/src/components/ResponseExamples/ResponseExamples.stories.tsx +0 -21
  131. package/src/components/ResponseExamples/ResponseExamples.tsx +0 -79
  132. package/src/components/TableOfContents/TableOfContents.spec.tsx +0 -316
  133. package/src/components/TableOfContents/TableOfContents.stories.tsx +0 -136
  134. package/src/components/TableOfContents/TableOfContents.tsx +0 -530
  135. package/src/components/TableOfContents/constants.ts +0 -45
  136. package/src/components/TableOfContents/index.ts +0 -2
  137. package/src/components/TableOfContents/types.ts +0 -59
  138. package/src/components/TableOfContents/utils.ts +0 -84
  139. package/src/components/TryIt/Auth/APIKeyAuth.tsx +0 -19
  140. package/src/components/TryIt/Auth/Auth.tsx +0 -169
  141. package/src/components/TryIt/Auth/AuthTokenInput.tsx +0 -37
  142. package/src/components/TryIt/Auth/BasicAuth.tsx +0 -62
  143. package/src/components/TryIt/Auth/BearerAuth.tsx +0 -19
  144. package/src/components/TryIt/Auth/DigestAuth.tsx +0 -35
  145. package/src/components/TryIt/Auth/OAuth2Auth.tsx +0 -19
  146. package/src/components/TryIt/Auth/authentication-utils.ts +0 -113
  147. package/src/components/TryIt/Body/BinaryBody.tsx +0 -52
  148. package/src/components/TryIt/Body/FormDataBody.tsx +0 -145
  149. package/src/components/TryIt/Body/RequestBody.tsx +0 -71
  150. package/src/components/TryIt/Body/__tests__/BinaryBody.test.tsx +0 -29
  151. package/src/components/TryIt/Body/__tests__/FormDataBody.test.tsx +0 -94
  152. package/src/components/TryIt/Body/request-body-utils.ts +0 -127
  153. package/src/components/TryIt/Body/useTextRequestBodyState.ts +0 -27
  154. package/src/components/TryIt/Mocking/MockingButton.tsx +0 -98
  155. package/src/components/TryIt/Mocking/mocking-utils.ts +0 -56
  156. package/src/components/TryIt/Mocking/useMockingOptions.ts +0 -6
  157. package/src/components/TryIt/Parameters/FileUploadParameterEditors.tsx +0 -62
  158. package/src/components/TryIt/Parameters/OperationParameters.tsx +0 -39
  159. package/src/components/TryIt/Parameters/ParameterEditor.tsx +0 -135
  160. package/src/components/TryIt/Parameters/__tests__/parameter-utils.spec.ts +0 -60
  161. package/src/components/TryIt/Parameters/parameter-utils.spec.ts +0 -118
  162. package/src/components/TryIt/Parameters/parameter-utils.ts +0 -245
  163. package/src/components/TryIt/Parameters/useOperationParameters.ts +0 -60
  164. package/src/components/TryIt/Response/ReponseCodeViewer.tsx +0 -28
  165. package/src/components/TryIt/Response/Response.spec.tsx +0 -174
  166. package/src/components/TryIt/Response/Response.tsx +0 -172
  167. package/src/components/TryIt/Response/hooks/useLineCount.ts +0 -7
  168. package/src/components/TryIt/Servers/ServerVariables.tsx +0 -33
  169. package/src/components/TryIt/Servers/ServersDropdown.tsx +0 -53
  170. package/src/components/TryIt/Servers/VariableEditor.tsx +0 -64
  171. package/src/components/TryIt/Servers/useServerVariables.ts +0 -19
  172. package/src/components/TryIt/TryIt.spec.tsx +0 -1511
  173. package/src/components/TryIt/TryIt.stories.tsx +0 -77
  174. package/src/components/TryIt/TryIt.tsx +0 -384
  175. package/src/components/TryIt/TryItWithRequestSamples.spec.tsx +0 -143
  176. package/src/components/TryIt/TryItWithRequestSamples.stories.tsx +0 -32
  177. package/src/components/TryIt/TryItWithRequestSamples.tsx +0 -42
  178. package/src/components/TryIt/build-request.spec.ts +0 -261
  179. package/src/components/TryIt/build-request.ts +0 -358
  180. package/src/components/TryIt/chosenServer.ts +0 -5
  181. package/src/components/TryIt/index.ts +0 -3
  182. package/src/components/__tests__/LinkHeading.spec.tsx +0 -125
  183. package/src/constants.ts +0 -176
  184. package/src/containers/MockingProvider.tsx +0 -23
  185. package/src/context/InlineRefResolver.spec.tsx +0 -183
  186. package/src/context/InlineRefResolver.tsx +0 -94
  187. package/src/context/Options.tsx +0 -27
  188. package/src/context/Persistence.tsx +0 -24
  189. package/src/context/RouterType.tsx +0 -9
  190. package/src/core.css +0 -97
  191. package/src/hoc/utils.ts +0 -5
  192. package/src/hoc/withMosaicProvider.spec.tsx +0 -48
  193. package/src/hoc/withMosaicProvider.tsx +0 -28
  194. package/src/hoc/withQueryClientProvider.spec.tsx +0 -38
  195. package/src/hoc/withQueryClientProvider.tsx +0 -35
  196. package/src/hoc/withRouter.tsx +0 -71
  197. package/src/hooks/useBundleRefsIntoDocument.ts +0 -60
  198. package/src/hooks/useFirstRender.ts +0 -8
  199. package/src/hooks/useIsCompact.ts +0 -26
  200. package/src/hooks/useParsedData.ts +0 -99
  201. package/src/hooks/useParsedValue.ts +0 -19
  202. package/src/hooks/useResponsiveLayout.tsx +0 -51
  203. package/src/hooks/useRouter.tsx +0 -31
  204. package/src/hooks/useUniqueId.ts +0 -4
  205. package/src/index.ts +0 -48
  206. package/src/styled.tsx +0 -22
  207. package/src/styles.css +0 -4
  208. package/src/types.ts +0 -170
  209. package/src/utils/__tests__/securitySchemes.spec.ts +0 -137
  210. package/src/utils/exampleGeneration/exampleGeneration.spec.tsx +0 -18
  211. package/src/utils/exampleGeneration/exampleGeneration.ts +0 -110
  212. package/src/utils/fileToBase64.ts +0 -11
  213. package/src/utils/guards.ts +0 -48
  214. package/src/utils/headers.ts +0 -316
  215. package/src/utils/http-spec/IServer.ts +0 -100
  216. package/src/utils/http-spec/__tests__/IServer.spec.ts +0 -51
  217. package/src/utils/http-spec/examples.ts +0 -5
  218. package/src/utils/http.ts +0 -9
  219. package/src/utils/jotai/persistAtom.ts +0 -31
  220. package/src/utils/node.ts +0 -19
  221. package/src/utils/oas/__tests__/security.spec.ts +0 -18
  222. package/src/utils/oas/security.ts +0 -76
  223. package/src/utils/ref-resolving/ReferenceResolver.ts +0 -29
  224. package/src/utils/ref-resolving/resolvedObject.test.ts +0 -415
  225. package/src/utils/ref-resolving/resolvedObject.ts +0 -107
  226. package/src/utils/securitySchemes.ts +0 -117
  227. package/src/utils/string.ts +0 -15
  228. package/src/utils/tests/chooseOption.ts +0 -7
  229. package/src/web-components/createElementClass.ts +0 -154
  230. package/tsconfig.build.json +0 -14
  231. package/tsconfig.json +0 -7
  232. /package/{dist/__fixtures__ → __fixtures__}/articles/schema-with-refs.d.ts +0 -0
  233. /package/{dist/__fixtures__ → __fixtures__}/operations/application-octet-stream-post.d.ts +0 -0
  234. /package/{dist/__fixtures__ → __fixtures__}/operations/base64-file-upload.d.ts +0 -0
  235. /package/{dist/__fixtures__ → __fixtures__}/operations/big-response.d.ts +0 -0
  236. /package/{dist/__fixtures__ → __fixtures__}/operations/examples-request-body.d.ts +0 -0
  237. /package/{dist/__fixtures__ → __fixtures__}/operations/head-todos.d.ts +0 -0
  238. /package/{dist/__fixtures__ → __fixtures__}/operations/multipart-formdata-post.d.ts +0 -0
  239. /package/{dist/__fixtures__ → __fixtures__}/operations/operation-minimal.d.ts +0 -0
  240. /package/{dist/__fixtures__ → __fixtures__}/operations/operation-parameters.d.ts +0 -0
  241. /package/{dist/__fixtures__ → __fixtures__}/operations/operation-with-examples.d.ts +0 -0
  242. /package/{dist/__fixtures__ → __fixtures__}/operations/operation-without-servers.d.ts +0 -0
  243. /package/{dist/__fixtures__ → __fixtures__}/operations/patch-todos.d.ts +0 -0
  244. /package/{dist/__fixtures__ → __fixtures__}/operations/put-todos.d.ts +0 -0
  245. /package/{dist/__fixtures__ → __fixtures__}/operations/referenced-body.d.ts +0 -0
  246. /package/{dist/__fixtures__ → __fixtures__}/operations/request-body-empty-schema.d.ts +0 -0
  247. /package/{dist/__fixtures__ → __fixtures__}/operations/request-body.d.ts +0 -0
  248. /package/{dist/__fixtures__ → __fixtures__}/operations/securedOperation.d.ts +0 -0
  249. /package/{dist/__fixtures__ → __fixtures__}/operations/security-basic.d.ts +0 -0
  250. /package/{dist/__fixtures__ → __fixtures__}/operations/security-bearer.d.ts +0 -0
  251. /package/{dist/__fixtures__ → __fixtures__}/operations/simple-get.d.ts +0 -0
  252. /package/{dist/__fixtures__ → __fixtures__}/operations/string-numeric-enums.d.ts +0 -0
  253. /package/{dist/__fixtures__ → __fixtures__}/operations/urlencoded-post-oneof.d.ts +0 -0
  254. /package/{dist/__fixtures__ → __fixtures__}/operations/urlencoded-post.d.ts +0 -0
  255. /package/{dist/__fixtures__ → __fixtures__}/operations/with-url-variables.d.ts +0 -0
  256. /package/{dist/__fixtures__ → __fixtures__}/security-schemes/index.d.ts +0 -0
  257. /package/{dist/__fixtures__ → __fixtures__}/services/petstore.d.ts +0 -0
  258. /package/{dist/__fixtures__ → __fixtures__}/services/with-unnamed-servers.d.ts +0 -0
  259. /package/{dist/__fixtures__ → __fixtures__}/services/with-url-variables.d.ts +0 -0
  260. /package/{dist/__fixtures__ → __fixtures__}/services/without-origin.d.ts +0 -0
  261. /package/{dist/components → components}/Docs/Article/Article.spec.d.ts +0 -0
  262. /package/{dist/components → components}/Docs/Article/Article.stories.d.ts +0 -0
  263. /package/{dist/components → components}/Docs/Article/index.d.ts +0 -0
  264. /package/{dist/components → components}/Docs/Docs.d.ts +0 -0
  265. /package/{dist/components → components}/Docs/Docs.stories.d.ts +0 -0
  266. /package/{dist/components → components}/Docs/HttpOperation/Badges.d.ts +0 -0
  267. /package/{dist/components → components}/Docs/HttpOperation/Body.d.ts +0 -0
  268. /package/{dist/components → components}/Docs/HttpOperation/Callbacks.d.ts +0 -0
  269. /package/{dist/components → components}/Docs/HttpOperation/HttpOperation.d.ts +0 -0
  270. /package/{dist/components → components}/Docs/HttpOperation/HttpOperation.spec.d.ts +0 -0
  271. /package/{dist/components → components}/Docs/HttpOperation/HttpOperation.stories.d.ts +0 -0
  272. /package/{dist/components → components}/Docs/HttpOperation/Parameters.d.ts +0 -0
  273. /package/{dist/components → components}/Docs/HttpOperation/Parameters.spec.d.ts +0 -0
  274. /package/{dist/components → components}/Docs/HttpOperation/Request.d.ts +0 -0
  275. /package/{dist/components → components}/Docs/HttpOperation/Responses.d.ts +0 -0
  276. /package/{dist/components → components}/Docs/HttpOperation/index.d.ts +0 -0
  277. /package/{dist/components → components}/Docs/HttpService/AdditionalInfo.d.ts +0 -0
  278. /package/{dist/components → components}/Docs/HttpService/AdditionalInfo.stories.d.ts +0 -0
  279. /package/{dist/components → components}/Docs/HttpService/ExportButton.d.ts +0 -0
  280. /package/{dist/components → components}/Docs/HttpService/HttpService.d.ts +0 -0
  281. /package/{dist/components → components}/Docs/HttpService/HttpService.spec.d.ts +0 -0
  282. /package/{dist/components → components}/Docs/HttpService/HttpService.stories.d.ts +0 -0
  283. /package/{dist/components → components}/Docs/HttpService/SecuritySchemes.d.ts +0 -0
  284. /package/{dist/components → components}/Docs/HttpService/ServerInfo.d.ts +0 -0
  285. /package/{dist/components → components}/Docs/HttpService/index.d.ts +0 -0
  286. /package/{dist/components → components}/Docs/Model/Model.d.ts +0 -0
  287. /package/{dist/components → components}/Docs/Model/Model.spec.d.ts +0 -0
  288. /package/{dist/components → components}/Docs/Model/Model.stories.d.ts +0 -0
  289. /package/{dist/components → components}/Docs/Model/index.d.ts +0 -0
  290. /package/{dist/components → components}/Docs/NodeVendorExtensions.d.ts +0 -0
  291. /package/{dist/components → components}/Docs/Sections.d.ts +0 -0
  292. /package/{dist/components → components}/Docs/Security/PanelContent.d.ts +0 -0
  293. /package/{dist/components → components}/Docs/Security/index.d.ts +0 -0
  294. /package/{dist/components → components}/Docs/Skeleton.d.ts +0 -0
  295. /package/{dist/components → components}/Docs/TwoColumnLayout.d.ts +0 -0
  296. /package/{dist/components → components}/Docs/index.d.ts +0 -0
  297. /package/{dist/components → components}/Docs/story-helper.d.ts +0 -0
  298. /package/{dist/components → components}/Docs/story-renderer-helper.d.ts +0 -0
  299. /package/{dist/components → components}/Layout/MobileTopNav.d.ts +0 -0
  300. /package/{dist/components → components}/Layout/ResponsiveSidebarLayout.d.ts +0 -0
  301. /package/{dist/components → components}/Layout/SidebarLayout.d.ts +0 -0
  302. /package/{dist/components → components}/LinkHeading.d.ts +0 -0
  303. /package/{dist/components → components}/LoadMore.d.ts +0 -0
  304. /package/{dist/components → components}/Loading/Loading.d.ts +0 -0
  305. /package/{dist/components → components}/Logo.d.ts +0 -0
  306. /package/{dist/components → components}/MarkdownViewer/CustomComponents/CodeComponent.d.ts +0 -0
  307. /package/{dist/components → components}/MarkdownViewer/CustomComponents/CodeComponent.spec.d.ts +0 -0
  308. /package/{dist/components → components}/MarkdownViewer/CustomComponents/Provider.d.ts +0 -0
  309. /package/{dist/components → components}/MarkdownViewer/CustomComponents/ReactRouterLink.d.ts +0 -0
  310. /package/{dist/components → components}/MarkdownViewer/CustomComponents/ResolvedImage.d.ts +0 -0
  311. /package/{dist/components → components}/MarkdownViewer/CustomComponents/ScrollToHashElement.d.ts +0 -0
  312. /package/{dist/components → components}/MarkdownViewer/MarkdownViewer.spec.d.ts +0 -0
  313. /package/{dist/components → components}/MarkdownViewer/index.d.ts +0 -0
  314. /package/{dist/components → components}/NonIdealState.d.ts +0 -0
  315. /package/{dist/components → components}/PoweredByLink.d.ts +0 -0
  316. /package/{dist/components → components}/RequestSamples/RequestSamples.d.ts +0 -0
  317. /package/{dist/components → components}/RequestSamples/RequestSamples.stories.d.ts +0 -0
  318. /package/{dist/components → components}/RequestSamples/convertRequestToSample.d.ts +0 -0
  319. /package/{dist/components → components}/RequestSamples/extractCodeSamples.d.ts +0 -0
  320. /package/{dist/components → components}/RequestSamples/index.d.ts +0 -0
  321. /package/{dist/components → components}/RequestSamples/requestSampleConfigs.d.ts +0 -0
  322. /package/{dist/components → components}/ResponseExamples/ResponseExamples.d.ts +0 -0
  323. /package/{dist/components → components}/ResponseExamples/ResponseExamples.spec.d.ts +0 -0
  324. /package/{dist/components → components}/ResponseExamples/ResponseExamples.stories.d.ts +0 -0
  325. /package/{dist/components → components}/TableOfContents/TableOfContents.d.ts +0 -0
  326. /package/{dist/components → components}/TableOfContents/TableOfContents.spec.d.ts +0 -0
  327. /package/{dist/components → components}/TableOfContents/TableOfContents.stories.d.ts +0 -0
  328. /package/{dist/components → components}/TableOfContents/constants.d.ts +0 -0
  329. /package/{dist/components → components}/TableOfContents/index.d.ts +0 -0
  330. /package/{dist/components → components}/TableOfContents/types.d.ts +0 -0
  331. /package/{dist/components → components}/TableOfContents/utils.d.ts +0 -0
  332. /package/{dist/components → components}/TryIt/Auth/APIKeyAuth.d.ts +0 -0
  333. /package/{dist/components → components}/TryIt/Auth/Auth.d.ts +0 -0
  334. /package/{dist/components → components}/TryIt/Auth/AuthTokenInput.d.ts +0 -0
  335. /package/{dist/components → components}/TryIt/Auth/BasicAuth.d.ts +0 -0
  336. /package/{dist/components → components}/TryIt/Auth/BearerAuth.d.ts +0 -0
  337. /package/{dist/components → components}/TryIt/Auth/DigestAuth.d.ts +0 -0
  338. /package/{dist/components → components}/TryIt/Auth/OAuth2Auth.d.ts +0 -0
  339. /package/{dist/components → components}/TryIt/Auth/authentication-utils.d.ts +0 -0
  340. /package/{dist/components → components}/TryIt/Body/BinaryBody.d.ts +0 -0
  341. /package/{dist/components → components}/TryIt/Body/FormDataBody.d.ts +0 -0
  342. /package/{dist/components → components}/TryIt/Body/RequestBody.d.ts +0 -0
  343. /package/{dist/components → components}/TryIt/Body/request-body-utils.d.ts +0 -0
  344. /package/{dist/components → components}/TryIt/Body/useTextRequestBodyState.d.ts +0 -0
  345. /package/{dist/components → components}/TryIt/Mocking/MockingButton.d.ts +0 -0
  346. /package/{dist/components → components}/TryIt/Mocking/mocking-utils.d.ts +0 -0
  347. /package/{dist/components → components}/TryIt/Mocking/useMockingOptions.d.ts +0 -0
  348. /package/{dist/components → components}/TryIt/Parameters/FileUploadParameterEditors.d.ts +0 -0
  349. /package/{dist/components → components}/TryIt/Parameters/OperationParameters.d.ts +0 -0
  350. /package/{dist/components → components}/TryIt/Parameters/ParameterEditor.d.ts +0 -0
  351. /package/{dist/components → components}/TryIt/Parameters/parameter-utils.d.ts +0 -0
  352. /package/{dist/components → components}/TryIt/Parameters/parameter-utils.spec.d.ts +0 -0
  353. /package/{dist/components → components}/TryIt/Parameters/useOperationParameters.d.ts +0 -0
  354. /package/{dist/components → components}/TryIt/Response/ReponseCodeViewer.d.ts +0 -0
  355. /package/{dist/components → components}/TryIt/Response/Response.d.ts +0 -0
  356. /package/{dist/components → components}/TryIt/Response/Response.spec.d.ts +0 -0
  357. /package/{dist/components → components}/TryIt/Response/hooks/useLineCount.d.ts +0 -0
  358. /package/{dist/components → components}/TryIt/Servers/ServerVariables.d.ts +0 -0
  359. /package/{dist/components → components}/TryIt/Servers/ServersDropdown.d.ts +0 -0
  360. /package/{dist/components → components}/TryIt/Servers/VariableEditor.d.ts +0 -0
  361. /package/{dist/components → components}/TryIt/Servers/useServerVariables.d.ts +0 -0
  362. /package/{dist/components → components}/TryIt/TryIt.d.ts +0 -0
  363. /package/{dist/components → components}/TryIt/TryIt.spec.d.ts +0 -0
  364. /package/{dist/components → components}/TryIt/TryIt.stories.d.ts +0 -0
  365. /package/{dist/components → components}/TryIt/TryItWithRequestSamples.d.ts +0 -0
  366. /package/{dist/components → components}/TryIt/TryItWithRequestSamples.spec.d.ts +0 -0
  367. /package/{dist/components → components}/TryIt/TryItWithRequestSamples.stories.d.ts +0 -0
  368. /package/{dist/components → components}/TryIt/build-request.d.ts +0 -0
  369. /package/{dist/components → components}/TryIt/build-request.spec.d.ts +0 -0
  370. /package/{dist/components → components}/TryIt/chosenServer.d.ts +0 -0
  371. /package/{dist/components → components}/TryIt/index.d.ts +0 -0
  372. /package/{dist/constants.d.ts → constants.d.ts} +0 -0
  373. /package/{dist/containers → containers}/MockingProvider.d.ts +0 -0
  374. /package/{dist/context → context}/InlineRefResolver.d.ts +0 -0
  375. /package/{dist/context → context}/InlineRefResolver.spec.d.ts +0 -0
  376. /package/{dist/context → context}/Options.d.ts +0 -0
  377. /package/{dist/context → context}/Persistence.d.ts +0 -0
  378. /package/{dist/context → context}/RouterType.d.ts +0 -0
  379. /package/{dist/core.css → core.css} +0 -0
  380. /package/{dist/hoc → hoc}/utils.d.ts +0 -0
  381. /package/{dist/hoc → hoc}/withMosaicProvider.d.ts +0 -0
  382. /package/{dist/hoc → hoc}/withMosaicProvider.spec.d.ts +0 -0
  383. /package/{dist/hoc → hoc}/withQueryClientProvider.d.ts +0 -0
  384. /package/{dist/hoc → hoc}/withQueryClientProvider.spec.d.ts +0 -0
  385. /package/{dist/hoc → hoc}/withRouter.d.ts +0 -0
  386. /package/{dist/hooks → hooks}/useBundleRefsIntoDocument.d.ts +0 -0
  387. /package/{dist/hooks → hooks}/useFirstRender.d.ts +0 -0
  388. /package/{dist/hooks → hooks}/useIsCompact.d.ts +0 -0
  389. /package/{dist/hooks → hooks}/useParsedData.d.ts +0 -0
  390. /package/{dist/hooks → hooks}/useParsedValue.d.ts +0 -0
  391. /package/{dist/hooks → hooks}/useResponsiveLayout.d.ts +0 -0
  392. /package/{dist/hooks → hooks}/useRouter.d.ts +0 -0
  393. /package/{dist/hooks → hooks}/useUniqueId.d.ts +0 -0
  394. /package/{dist/index.d.ts → index.d.ts} +0 -0
  395. /package/{dist/styled.d.ts → styled.d.ts} +0 -0
  396. /package/{dist/styles.min.css → styles.min.css} +0 -0
  397. /package/{dist/types.d.ts → types.d.ts} +0 -0
  398. /package/{dist/utils → utils}/exampleGeneration/exampleGeneration.d.ts +0 -0
  399. /package/{dist/utils → utils}/exampleGeneration/exampleGeneration.spec.d.ts +0 -0
  400. /package/{dist/utils → utils}/fileToBase64.d.ts +0 -0
  401. /package/{dist/utils → utils}/guards.d.ts +0 -0
  402. /package/{dist/utils → utils}/headers.d.ts +0 -0
  403. /package/{dist/utils → utils}/http-spec/IServer.d.ts +0 -0
  404. /package/{dist/utils → utils}/http-spec/examples.d.ts +0 -0
  405. /package/{dist/utils → utils}/http.d.ts +0 -0
  406. /package/{dist/utils → utils}/jotai/persistAtom.d.ts +0 -0
  407. /package/{dist/utils → utils}/node.d.ts +0 -0
  408. /package/{dist/utils → utils}/oas/security.d.ts +0 -0
  409. /package/{dist/utils → utils}/ref-resolving/ReferenceResolver.d.ts +0 -0
  410. /package/{dist/utils → utils}/ref-resolving/resolvedObject.d.ts +0 -0
  411. /package/{dist/utils → utils}/ref-resolving/resolvedObject.test.d.ts +0 -0
  412. /package/{dist/utils → utils}/securitySchemes.d.ts +0 -0
  413. /package/{dist/utils → utils}/string.d.ts +0 -0
  414. /package/{dist/utils → utils}/tests/chooseOption.d.ts +0 -0
  415. /package/{dist/web-components → web-components}/createElementClass.d.ts +0 -0
@@ -1,62 +0,0 @@
1
- import { Flex, Icon, Input, Text } from '@stoplight/mosaic';
2
- import * as React from 'react';
3
-
4
- import { useUniqueId } from '../../../hooks/useUniqueId';
5
- import { ParameterSpec } from './parameter-utils';
6
-
7
- interface FileUploadParameterEditorProps {
8
- parameter: ParameterSpec;
9
- value?: File;
10
- onChange: (parameterValue: File | undefined) => void;
11
- }
12
-
13
- export const FileUploadParameterEditor: React.FC<FileUploadParameterEditorProps> = ({ parameter, value, onChange }) => {
14
- const parameterDisplayName = `${parameter.name}${parameter.required ? '*' : ''}`;
15
- const handleFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {
16
- const file = event.currentTarget.files?.[0];
17
- if (file === undefined) return;
18
-
19
- onChange(file);
20
- };
21
-
22
- const clearFile = () => {
23
- onChange(undefined);
24
- };
25
-
26
- const parameterInputId = useUniqueId(`id_${parameter.name}_`);
27
- const fileUploadInputId = `${parameterInputId}-file-input`;
28
-
29
- return (
30
- <>
31
- <label aria-hidden="true" data-testid="param-label" htmlFor={parameterInputId}>
32
- {parameterDisplayName}
33
- </label>
34
- <Text mx={3}>:</Text>
35
- <Flex flex={1} alignItems="center">
36
- <Input
37
- id={parameterInputId}
38
- style={{ paddingLeft: 15 }}
39
- aria-label={parameter.name}
40
- appearance="minimal"
41
- flex={1}
42
- placeholder="pick a file"
43
- type="text"
44
- required
45
- value={value?.name ?? ''}
46
- disabled
47
- />
48
- {value && (
49
- <button className="sl-mr-3 sl-p-2" aria-label="Remove file" onClick={clearFile}>
50
- <Icon icon="times" />
51
- </button>
52
- )}
53
- <div>
54
- <label role="button" htmlFor={fileUploadInputId}>
55
- Upload
56
- </label>
57
- <input onChange={handleFileChange} type="file" hidden id={fileUploadInputId} />
58
- </div>
59
- </Flex>
60
- </>
61
- );
62
- };
@@ -1,39 +0,0 @@
1
- import { Panel } from '@stoplight/mosaic';
2
- import * as React from 'react';
3
-
4
- import { ParameterSpec } from './parameter-utils';
5
- import { ParameterEditor } from './ParameterEditor';
6
-
7
- interface OperationParametersProps<P extends keyof any = string> {
8
- parameters: readonly ParameterSpec[];
9
- values: Record<P, string>;
10
- onChangeValue: (parameterName: P, newValue: string) => void;
11
- validate?: boolean;
12
- }
13
-
14
- export const OperationParameters: React.FC<OperationParametersProps> = ({
15
- parameters,
16
- values,
17
- onChangeValue,
18
- validate,
19
- }) => {
20
- return (
21
- <Panel defaultIsOpen>
22
- <Panel.Titlebar>Parameters</Panel.Titlebar>
23
- <Panel.Content className="sl-overflow-y-auto ParameterGrid OperationParametersContent">
24
- {parameters.map(parameter => (
25
- <ParameterEditor
26
- key={parameter.name}
27
- parameter={parameter}
28
- value={values[parameter.name]}
29
- onChange={value => onChangeValue(parameter.name, String(value))}
30
- validate={validate}
31
- isOptional={false}
32
- canChangeOptional={false}
33
- onChangeOptional={() => {}}
34
- />
35
- ))}
36
- </Panel.Content>
37
- </Panel>
38
- );
39
- };
@@ -1,135 +0,0 @@
1
- import { Flex, Input, Select, SelectProps, Text } from '@stoplight/mosaic';
2
- import * as React from 'react';
3
-
4
- import { useUniqueId } from '../../../hooks/useUniqueId';
5
- import {
6
- decodeSafeSelectorValue,
7
- exampleOptions,
8
- getPlaceholderForParameter,
9
- getPlaceholderForSelectedParameter,
10
- parameterOptions,
11
- ParameterSpec,
12
- selectExampleOption,
13
- } from './parameter-utils';
14
-
15
- interface ParameterProps {
16
- parameter: ParameterSpec;
17
- value?: string;
18
- onChange: SelectProps['onChange'];
19
- isOptional: boolean;
20
- onChangeOptional: (optional: boolean) => void;
21
- canChangeOptional: boolean;
22
- validate?: boolean;
23
- }
24
-
25
- export const ParameterEditor: React.FC<ParameterProps> = ({
26
- parameter,
27
- value,
28
- onChange,
29
- isOptional,
30
- onChangeOptional,
31
- canChangeOptional,
32
- validate,
33
- }) => {
34
- const inputId = useUniqueId(`id_${parameter.name}_`);
35
- const inputCheckId = useUniqueId(`id_${parameter.name}_checked`);
36
- const parameterValueOptions = parameterOptions(parameter);
37
- const examples = exampleOptions(parameter);
38
- // Find the encoded example value that matches the current (decoded) value
39
- const selectedExample = React.useMemo(() => {
40
- if (!examples) return selectExampleOption;
41
- const matchingExample = examples.find(e => {
42
- return String(decodeSafeSelectorValue(e.value as string | number)) === value;
43
- });
44
- return matchingExample ?? selectExampleOption;
45
- }, [examples, value]);
46
- const parameterDisplayName = `${parameter.name}${parameter.required ? '*' : ''}`;
47
-
48
- // Find the encoded value that matches the current (decoded) value
49
- const encodedValue = React.useMemo(() => {
50
- if (!value || !parameterValueOptions) return value || '';
51
- const matchingOption = parameterValueOptions.find(opt => {
52
- return String(decodeSafeSelectorValue(opt.value as string | number)) === value;
53
- });
54
- return matchingOption ? String(matchingOption.value) : value;
55
- }, [value, parameterValueOptions]);
56
-
57
- const requiredButEmpty = validate && parameter.required && !value;
58
-
59
- return (
60
- <>
61
- <Text as="label" aria-hidden="true" data-testid="param-label" htmlFor={inputId} fontSize="base">
62
- {parameterDisplayName}
63
- </Text>
64
- <Text mx={3}>:</Text>
65
- <div>
66
- {parameterValueOptions ? (
67
- <Select
68
- flex={1}
69
- aria-label={parameter.name}
70
- options={parameterValueOptions}
71
- value={encodedValue}
72
- onChange={val => onChange && onChange(String(decodeSafeSelectorValue(val as string | number)))}
73
- placeholder={getPlaceholderForSelectedParameter(parameter)}
74
- />
75
- ) : (
76
- <Flex flex={1}>
77
- <Input
78
- id={inputId}
79
- aria-label={parameter.name}
80
- appearance={requiredButEmpty ? 'default' : 'minimal'}
81
- flex={1}
82
- placeholder={getPlaceholderForParameter(parameter)}
83
- type={parameter.schema?.type === 'number' ? 'number' : 'text'}
84
- required
85
- intent={requiredButEmpty ? 'danger' : 'default'}
86
- value={value || ''}
87
- onChange={e => onChange && onChange(e.currentTarget.value)}
88
- />
89
- {examples && (
90
- <Select
91
- aria-label={`${parameter.name}-select`}
92
- flex={1}
93
- value={selectedExample.value}
94
- options={examples}
95
- onChange={val => onChange && onChange(String(decodeSafeSelectorValue(val as string | number)))}
96
- />
97
- )}
98
- </Flex>
99
- )}
100
- </div>
101
- {canChangeOptional && !parameter.required && (
102
- <>
103
- <div></div>
104
- <div></div>
105
- <div>
106
- <Flex flex={1}>
107
- <Input
108
- className="Checkbox"
109
- aria-label={`${parameter.name}-checkbox`}
110
- id={inputCheckId}
111
- flex={1}
112
- type="checkbox"
113
- intent="success"
114
- size="sm"
115
- checked={isOptional}
116
- onChange={e => onChangeOptional(!e.target.checked)}
117
- />
118
- <Text
119
- className="TextForCheckBox"
120
- flex={1}
121
- as="label"
122
- aria-hidden="true"
123
- data-testid="param-check"
124
- htmlFor={inputCheckId}
125
- fontSize="base"
126
- >
127
- Omit {parameterDisplayName}
128
- </Text>
129
- </Flex>
130
- </div>
131
- </>
132
- )}
133
- </>
134
- );
135
- };
@@ -1,60 +0,0 @@
1
- import { isRegularNode, SchemaTree } from '@stoplight/json-schema-tree';
2
- import { last } from 'lodash';
3
-
4
- import { isRequired } from '../parameter-utils';
5
-
6
- describe('isRequired', () => {
7
- it('happy path', () => {
8
- // Arrange
9
- const schema = {
10
- $schema: 'http://json-schema.org/draft-07/schema#',
11
- description: 'Authenticate for a refresh and access token',
12
- title: 'authenticate',
13
- allOf: [
14
- {
15
- type: 'object',
16
- properties: {
17
- username: { type: 'string' },
18
- password: { type: 'string' },
19
- },
20
- },
21
- {
22
- type: 'object',
23
- properties: {
24
- client_id: { type: 'string' },
25
- client_secret: { type: 'string' },
26
- },
27
- required: ['client_id', 'client_secret'],
28
- },
29
- ],
30
- };
31
- const tree = new SchemaTree(schema, { mergeAllOf: true, refResolver: null });
32
- tree.populate();
33
- const root = tree.root.children[0];
34
- if (!isRegularNode(root)) {
35
- fail('the schema should have been parsed so that this is a RegularNode');
36
- }
37
-
38
- if (!root.children) {
39
- fail('the combined properties in the allOf should be the children of this RegularNode');
40
- }
41
-
42
- const children = root.children ?? [];
43
-
44
- // Act
45
- const unknownChildren = children.filter(c => isRequired(c) === undefined);
46
- const requiredChildren = children
47
- .filter(c => isRequired(c) === true)
48
- .map(c => last(c.path))
49
- .sort();
50
- const optionalChildren = children
51
- .filter(c => isRequired(c) === false)
52
- .map(c => last(c.path))
53
- .sort();
54
-
55
- // Assert
56
- expect(unknownChildren).toStrictEqual([]);
57
- expect(requiredChildren).toStrictEqual(['client_id', 'client_secret']);
58
- expect(optionalChildren).toStrictEqual(['password', 'username']);
59
- });
60
- });
@@ -1,118 +0,0 @@
1
- import { JSONSchema7Definition } from 'json-schema';
2
-
3
- import { httpOperation } from '../../../__fixtures__/operations/put-todos';
4
- import {
5
- getPlaceholderForSelectedParameter,
6
- initialParameterValues,
7
- mapSchemaPropertiesToParameters,
8
- ParameterSpec,
9
- } from './parameter-utils';
10
-
11
- describe('Parameter Utils', () => {
12
- describe('initialParameterValues.name', () => {
13
- it('should fill initial parameters', () => {
14
- const allParameters = [
15
- ...(httpOperation.request?.path ?? []),
16
- ...(httpOperation.request?.query ?? []),
17
- ...(httpOperation.request?.headers ?? []),
18
- ];
19
-
20
- const parameters = initialParameterValues(allParameters);
21
-
22
- expect(parameters).toMatchObject({
23
- type: 'something',
24
- value: '1',
25
- 'account-id': 'account-id-default',
26
- 'message-id': 'example value',
27
- });
28
- });
29
- });
30
-
31
- describe('mapSchemaPropertiesToParameters.name', () => {
32
- it('should convert schema properties to parameters', () => {
33
- const properties: { [key: string]: JSONSchema7Definition } = {
34
- withExamples: { type: 'string', examples: ['blah'] },
35
- withEmptyExamples: { type: 'string', examples: [] },
36
- withNoExamples: { type: 'string' },
37
- requiredWithExamples: { type: 'string', examples: ['blah'] },
38
- requiredWithEmptyExamples: { type: 'string', examples: [] },
39
- requiredWithNoExamples: { type: 'string' },
40
- requiredBoolean: true,
41
- boolean: false,
42
- };
43
- const required = [
44
- 'requiredWithExamples',
45
- 'requiredWithEmptyExamples',
46
- 'requiredWithNoExamples',
47
- 'requiredBoolean',
48
- ];
49
- expect(mapSchemaPropertiesToParameters(properties, required)).toEqual([
50
- {
51
- name: 'withExamples',
52
- schema: { type: 'string', examples: ['blah'] },
53
- examples: [{ key: 'example', value: 'blah' }],
54
- },
55
- {
56
- name: 'withEmptyExamples',
57
- schema: { type: 'string', examples: [] },
58
- },
59
- {
60
- name: 'withNoExamples',
61
- schema: { type: 'string' },
62
- },
63
- {
64
- name: 'requiredWithExamples',
65
- schema: { type: 'string', examples: ['blah'] },
66
- examples: [{ key: 'example', value: 'blah' }],
67
- required: true,
68
- },
69
- {
70
- name: 'requiredWithEmptyExamples',
71
- schema: { type: 'string', examples: [] },
72
- required: true,
73
- },
74
- {
75
- name: 'requiredWithNoExamples',
76
- schema: { type: 'string' },
77
- required: true,
78
- },
79
- {
80
- name: 'requiredBoolean',
81
- required: true,
82
- },
83
- {
84
- name: 'boolean',
85
- },
86
- ]);
87
- });
88
- });
89
-
90
- describe('getPlaceholderForSelectedParameter', () => {
91
- let parameter: ParameterSpec;
92
-
93
- it('should return placeholder text with default value when parameter has a default value', () => {
94
- parameter = {
95
- name: 'name',
96
- schema: {
97
- default: 0,
98
- enum: [0, 1, 3],
99
- },
100
- };
101
-
102
- const result = getPlaceholderForSelectedParameter(parameter);
103
- expect(result).toEqual(`select an option (defaults to: ${parameter?.schema?.default})`);
104
- });
105
-
106
- it('should return undefined when parameter does not have a default value', () => {
107
- parameter = {
108
- name: 'name',
109
- schema: {
110
- enum: [0, 1, 3],
111
- },
112
- };
113
-
114
- const result = getPlaceholderForSelectedParameter(parameter);
115
- expect(result).toBeUndefined();
116
- });
117
- });
118
- });
@@ -1,245 +0,0 @@
1
- import { safeStringify } from '@stoplight/json';
2
- import { isRegularNode, RegularNode, SchemaNode } from '@stoplight/json-schema-tree';
3
- import type { IHttpParam, INodeExample, INodeExternalExample } from '@stoplight/types';
4
- import { JSONSchema7, JSONSchema7Definition, JSONSchema7Type } from 'json-schema';
5
- import { isObject, keyBy, last, map, mapValues } from 'lodash';
6
-
7
- export type ParameterSpec = Pick<IHttpParam, 'name' | 'schema' | 'required'> & {
8
- examples?: (Omit<INodeExample, 'id'> | Omit<INodeExternalExample, 'id'>)[];
9
- };
10
- const booleanOptions = [
11
- { label: 'Not Set', value: '' },
12
- { label: 'False', value: 'false' },
13
- { label: 'True', value: 'true' },
14
- ];
15
-
16
- /**
17
- * Encodes a value to be safe for use in CSS selectors (data-key attributes).
18
- * Special characters like quotes, brackets, etc. can break querySelector,
19
- * so we encode them using base64.
20
- */
21
- export function encodeSafeSelectorValue(value: string | number): string | number {
22
- // Numbers are safe to use as-is
23
- if (typeof value === 'number') {
24
- return value;
25
- }
26
- // Check if the value contains characters that would break CSS selectors
27
- // This includes quotes, brackets, backslashes, etc.
28
- const hasSpecialChars = /["'\[\]\\(){}]/.test(value);
29
- if (!hasSpecialChars) {
30
- return value;
31
- }
32
- // Encode to base64 to make it safe for CSS selectors
33
- // We prefix with 'b64:' so we can decode it later if needed
34
- try {
35
- return 'b64:' + btoa(value);
36
- } catch (e) {
37
- // If btoa fails (e.g., with unicode), fallback to encodeURIComponent
38
- return 'enc:' + encodeURIComponent(value);
39
- }
40
- }
41
-
42
- /**
43
- * Decodes a value that was encoded by encodeSafeSelectorValue
44
- */
45
- export function decodeSafeSelectorValue(value: string | number): string | number {
46
- if (typeof value === 'number') {
47
- return value;
48
- }
49
-
50
- if (value.startsWith('b64:')) {
51
- try {
52
- return atob(value.substring(4));
53
- } catch (e) {
54
- return value;
55
- }
56
- }
57
- if (value.startsWith('enc:')) {
58
- try {
59
- return decodeURIComponent(value.substring(4));
60
- } catch (e) {
61
- return value;
62
- }
63
- }
64
- return value;
65
- }
66
-
67
- function enumOptions(enumValues: JSONSchema7Type[], required?: boolean) {
68
- const options = map(enumValues, v => {
69
- // Handle objects and arrays by stringifying them
70
- const stringValue =
71
- typeof v === 'object' && v !== null ? safeStringify(v) ?? String(v) : typeof v === 'number' ? v : String(v);
72
- // Encode the value to be safe for CSS selectors, but keep the original label
73
- const safeValue = encodeSafeSelectorValue(stringValue);
74
- return { value: safeValue, label: String(stringValue) };
75
- });
76
- return required ? options : [{ label: 'Not Set', value: '' }, ...options];
77
- }
78
-
79
- export function parameterOptions(parameter: ParameterSpec) {
80
- return parameter.schema?.type === 'boolean'
81
- ? booleanOptions
82
- : parameter.schema?.enum !== undefined
83
- ? enumOptions(parameter.schema.enum, parameter.required)
84
- : null;
85
- }
86
-
87
- export const selectExampleOption = { value: '', label: 'Pick an example' };
88
-
89
- export function exampleOptions(parameter: ParameterSpec) {
90
- return parameter.examples?.length && parameter.examples.length > 1
91
- ? [
92
- selectExampleOption,
93
- ...parameter.examples.map(example => ({
94
- label: example.key,
95
- value: encodeSafeSelectorValue(exampleValue(example)),
96
- })),
97
- ]
98
- : null;
99
- }
100
-
101
- export function parameterSupportsFileUpload(parameter?: Pick<ParameterSpec, 'schema'>) {
102
- return (
103
- parameter &&
104
- parameter.schema &&
105
- parameter.schema?.type === 'string' &&
106
- (parameter.schema?.contentEncoding === 'base64' ||
107
- parameter.schema?.contentMediaType === 'application/octet-stream')
108
- );
109
- }
110
-
111
- function stringifyValue(value: unknown) {
112
- if (typeof value === 'object' && value !== null) {
113
- return safeStringify(value) ?? String(value);
114
- }
115
- return String(value);
116
- }
117
-
118
- function escapeQuotes(value: string) {
119
- return value.replace(/"/g, '\\"');
120
- }
121
-
122
- function exampleValue(example: Omit<INodeExample, 'id'> | Omit<INodeExternalExample, 'id'>) {
123
- const value = 'value' in example ? example.value : example.externalValue;
124
- return escapeQuotes(stringifyValue(value));
125
- }
126
-
127
- export function getPlaceholderForParameter(parameter: ParameterSpec) {
128
- const { value: parameterValue, isDefault } = getValueForParameter(parameter);
129
-
130
- if (parameterValue) return `${isDefault ? 'defaults to' : 'example'}: ${parameterValue}`;
131
-
132
- return String(parameter.schema?.type ?? '');
133
- }
134
-
135
- export function getPlaceholderForSelectedParameter(parameter: ParameterSpec) {
136
- const { value: parameterValue, isDefault } = getValueForParameter(parameter);
137
-
138
- if (isDefault) {
139
- return `select an option (defaults to: ${parameterValue})`;
140
- }
141
-
142
- return undefined;
143
- }
144
-
145
- function retrieveDefaultFromSchema(parameter: ParameterSpec) {
146
- const defaultValue = parameter.schema?.default;
147
- return isObject(defaultValue) ? safeStringify(defaultValue) : defaultValue;
148
- }
149
-
150
- const getValueForParameter = (parameter: ParameterSpec) => {
151
- const defaultValue = retrieveDefaultFromSchema(parameter);
152
- if (typeof defaultValue !== 'undefined') {
153
- return { value: stringifyValue(defaultValue), isDefault: true };
154
- }
155
-
156
- // If the parameter has enums, prioritize using the first enum value
157
- // over examples, as examples might not match the enum values
158
- const enums = parameter.schema?.enum ?? [];
159
- if (enums.length > 0) {
160
- return { value: stringifyValue(enums[0]) };
161
- }
162
-
163
- const examples = parameter.examples ?? [];
164
- if (examples.length > 0) {
165
- return { value: exampleValue(examples[0]) };
166
- }
167
-
168
- return { value: '' };
169
- };
170
-
171
- const getInitialValueForParameter = (parameter: ParameterSpec) => {
172
- const isRequired = !!parameter.required;
173
-
174
- if (!isRequired) return '';
175
-
176
- return getValueForParameter(parameter).value;
177
- };
178
-
179
- export const initialParameterValues: (params: readonly ParameterSpec[]) => Record<string, string> = params => {
180
- const paramsByName = keyBy(params, (param: ParameterSpec) => param.name);
181
- return mapValues(paramsByName, param => getInitialValueForParameter(param));
182
- };
183
-
184
- export function mapSchemaPropertiesToParameters(
185
- properties: { [key: string]: JSONSchema7Definition },
186
- required: string[] | undefined,
187
- ) {
188
- return Object.entries(properties).map(([name, schema]) => ({
189
- name,
190
- schema: typeof schema !== 'boolean' ? schema : undefined,
191
- examples:
192
- typeof schema !== 'boolean' && Array.isArray(schema.examples) && schema.examples[0]
193
- ? [{ key: 'example', value: schema.examples[0] }]
194
- : undefined,
195
- ...(required?.includes(name) && { required: true }),
196
- }));
197
- }
198
-
199
- export function toParameterSpec(jsonTreeNode: RegularNode): ParameterSpec {
200
- const isBoolean = jsonTreeNode.primaryType === 'boolean';
201
- // TODO: Why does ParameterSpec assume JSONSchema7 and ignore 6 and 4?
202
- const schema = !isBoolean ? (jsonTreeNode.fragment as JSONSchema7) : undefined;
203
- const examples =
204
- !isBoolean && jsonTreeNode.fragment.examples && jsonTreeNode.fragment.examples[0]
205
- ? [{ key: 'example', value: jsonTreeNode.fragment.examples[0] }]
206
- : undefined;
207
-
208
- // It's possible -- but very unlikely -- that the path is empty here.
209
- const lastJsonPathSegment = last(jsonTreeNode.path) ?? '<<UNKNOWN>>';
210
-
211
- return {
212
- name: lastJsonPathSegment,
213
- schema,
214
- examples,
215
- required: isRequired(jsonTreeNode),
216
- };
217
- }
218
-
219
- /**
220
- * @returns
221
- * - `true` iff this schema/property is among the properties required by `n`'s
222
- * parent
223
- * - `false` iff this schema/property is NOT among the properties required by
224
- * `n`'s parent
225
- * - `undefined` when required-ness is intedeterminate; e.g., there's no parent,
226
- * the parent isn't a `RegularNode`, this thing lacks a key/name, `n` isn't a
227
- * `RegularNode`
228
- */
229
- export function isRequired(n: SchemaNode): boolean | undefined {
230
- if (!isRegularNode(n)) {
231
- return undefined;
232
- }
233
-
234
- const name: string | undefined = last(n.path);
235
- if (name === undefined) {
236
- return undefined;
237
- }
238
-
239
- const parent = n.parent;
240
- if (parent === null || !isRegularNode(parent)) {
241
- return undefined;
242
- }
243
-
244
- return parent.required !== null && parent.required.includes(name);
245
- }