@mintlify/msft-sdk 1.1.23 → 1.1.24

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 (331) hide show
  1. package/dist/api-playground/ApiPlayground/Request/BodySection.js +65 -0
  2. package/dist/api-playground/ApiPlayground/Request/BodySection.js.map +1 -0
  3. package/dist/api-playground/ApiPlayground/Request/ParameterSection.js +33 -0
  4. package/dist/api-playground/ApiPlayground/Request/ParameterSection.js.map +1 -0
  5. package/dist/api-playground/ApiPlayground/Request/PlaygroundModal.js +201 -0
  6. package/dist/api-playground/ApiPlayground/Request/PlaygroundModal.js.map +1 -0
  7. package/dist/api-playground/ApiPlayground/Request/SecuritySection.js +147 -0
  8. package/dist/api-playground/ApiPlayground/Request/SecuritySection.js.map +1 -0
  9. package/dist/api-playground/ApiPlayground/Request/ServerSection.js +31 -0
  10. package/dist/api-playground/ApiPlayground/Request/ServerSection.js.map +1 -0
  11. package/dist/api-playground/ApiPlayground/Request/index.js +44 -0
  12. package/dist/api-playground/ApiPlayground/Request/index.js.map +1 -0
  13. package/dist/api-playground/ApiPlayground/Request/inputs/ArrayInput.js +94 -0
  14. package/dist/api-playground/ApiPlayground/Request/inputs/ArrayInput.js.map +1 -0
  15. package/dist/api-playground/ApiPlayground/Request/inputs/DifferentiatedInput.js +91 -0
  16. package/dist/api-playground/ApiPlayground/Request/inputs/DifferentiatedInput.js.map +1 -0
  17. package/dist/api-playground/ApiPlayground/Request/inputs/FileInput.js +63 -0
  18. package/dist/api-playground/ApiPlayground/Request/inputs/FileInput.js.map +1 -0
  19. package/dist/api-playground/ApiPlayground/Request/inputs/NullInput.js +34 -0
  20. package/dist/api-playground/ApiPlayground/Request/inputs/NullInput.js.map +1 -0
  21. package/dist/api-playground/ApiPlayground/Request/inputs/NumberInput.js +62 -0
  22. package/dist/api-playground/ApiPlayground/Request/inputs/NumberInput.js.map +1 -0
  23. package/dist/api-playground/ApiPlayground/Request/inputs/ObjectChildren.js +110 -0
  24. package/dist/api-playground/ApiPlayground/Request/inputs/ObjectChildren.js.map +1 -0
  25. package/dist/api-playground/ApiPlayground/Request/inputs/ObjectInput.js +88 -0
  26. package/dist/api-playground/ApiPlayground/Request/inputs/ObjectInput.js.map +1 -0
  27. package/dist/api-playground/ApiPlayground/Request/inputs/RecursiveInput.js +62 -0
  28. package/dist/api-playground/ApiPlayground/Request/inputs/RecursiveInput.js.map +1 -0
  29. package/dist/api-playground/ApiPlayground/Request/inputs/SelectInput.js +55 -0
  30. package/dist/api-playground/ApiPlayground/Request/inputs/SelectInput.js.map +1 -0
  31. package/dist/api-playground/ApiPlayground/Request/inputs/StringInput.js +68 -0
  32. package/dist/api-playground/ApiPlayground/Request/inputs/StringInput.js.map +1 -0
  33. package/dist/api-playground/ApiPlayground/Request/inputs/TextInput.js +45 -0
  34. package/dist/api-playground/ApiPlayground/Request/inputs/TextInput.js.map +1 -0
  35. package/dist/api-playground/ApiPlayground/Response/CopyFileToClipboardButton.js +7 -0
  36. package/dist/api-playground/ApiPlayground/Response/CopyFileToClipboardButton.js.map +1 -0
  37. package/dist/api-playground/ApiPlayground/Response/DownloadFileButton.js +45 -0
  38. package/dist/api-playground/ApiPlayground/Response/DownloadFileButton.js.map +1 -0
  39. package/dist/api-playground/ApiPlayground/Response/ResponseBody/CodeResponseContent.js +54 -0
  40. package/dist/api-playground/ApiPlayground/Response/ResponseBody/CodeResponseContent.js.map +1 -0
  41. package/dist/api-playground/ApiPlayground/Response/ResponseBody/index.js +15 -0
  42. package/dist/api-playground/ApiPlayground/Response/ResponseBody/index.js.map +1 -0
  43. package/dist/api-playground/ApiPlayground/Response/ResponseError.js +14 -0
  44. package/dist/api-playground/ApiPlayground/Response/ResponseError.js.map +1 -0
  45. package/dist/api-playground/ApiPlayground/Response/ResponseHeaders.js +12 -0
  46. package/dist/api-playground/ApiPlayground/Response/ResponseHeaders.js.map +1 -0
  47. package/dist/api-playground/ApiPlayground/Response/ResponsePlaceholder.js +20 -0
  48. package/dist/api-playground/ApiPlayground/Response/ResponsePlaceholder.js.map +1 -0
  49. package/dist/api-playground/ApiPlayground/Response/ResponseTable.js +21 -0
  50. package/dist/api-playground/ApiPlayground/Response/ResponseTable.js.map +1 -0
  51. package/dist/api-playground/ApiPlayground/Response/ResponseTopbar.js +93 -0
  52. package/dist/api-playground/ApiPlayground/Response/ResponseTopbar.js.map +1 -0
  53. package/dist/api-playground/ApiPlayground/Response/index.js +80 -0
  54. package/dist/api-playground/ApiPlayground/Response/index.js.map +1 -0
  55. package/dist/api-playground/ApiPlayground/components/AdditionalItemButton.js +24 -0
  56. package/dist/api-playground/ApiPlayground/components/AdditionalItemButton.js.map +1 -0
  57. package/dist/api-playground/ApiPlayground/components/AdditionalPropertyButton.js +45 -0
  58. package/dist/api-playground/ApiPlayground/components/AdditionalPropertyButton.js.map +1 -0
  59. package/dist/api-playground/ApiPlayground/components/ArrayCount.js +18 -0
  60. package/dist/api-playground/ApiPlayground/components/ArrayCount.js.map +1 -0
  61. package/dist/api-playground/ApiPlayground/components/BasePathSelector.js +40 -0
  62. package/dist/api-playground/ApiPlayground/components/BasePathSelector.js.map +1 -0
  63. package/dist/api-playground/ApiPlayground/components/EndpointsMenu.js +44 -0
  64. package/dist/api-playground/ApiPlayground/components/EndpointsMenu.js.map +1 -0
  65. package/dist/api-playground/ApiPlayground/components/EndpointsMenuLink.js +45 -0
  66. package/dist/api-playground/ApiPlayground/components/EndpointsMenuLink.js.map +1 -0
  67. package/dist/api-playground/ApiPlayground/components/EndpointsMenuSearch.js +39 -0
  68. package/dist/api-playground/ApiPlayground/components/EndpointsMenuSearch.js.map +1 -0
  69. package/dist/api-playground/ApiPlayground/components/InputContainer.js +129 -0
  70. package/dist/api-playground/ApiPlayground/components/InputContainer.js.map +1 -0
  71. package/dist/api-playground/ApiPlayground/components/InputSectionContainer.js +60 -0
  72. package/dist/api-playground/ApiPlayground/components/InputSectionContainer.js.map +1 -0
  73. package/dist/api-playground/ApiPlayground/components/ModalHeader.js +16 -0
  74. package/dist/api-playground/ApiPlayground/components/ModalHeader.js.map +1 -0
  75. package/dist/api-playground/ApiPlayground/components/ObjectExpandButton.js +29 -0
  76. package/dist/api-playground/ApiPlayground/components/ObjectExpandButton.js.map +1 -0
  77. package/dist/api-playground/ApiPlayground/components/ParamFieldWrapper.js +20 -0
  78. package/dist/api-playground/ApiPlayground/components/ParamFieldWrapper.js.map +1 -0
  79. package/dist/api-playground/ApiPlayground/components/PathHeader.js +163 -0
  80. package/dist/api-playground/ApiPlayground/components/PathHeader.js.map +1 -0
  81. package/dist/api-playground/ApiPlayground/components/PlaygroundModalWrapper.js +59 -0
  82. package/dist/api-playground/ApiPlayground/components/PlaygroundModalWrapper.js.map +1 -0
  83. package/dist/api-playground/ApiPlayground/components/PrettyPath.js +50 -0
  84. package/dist/api-playground/ApiPlayground/components/PrettyPath.js.map +1 -0
  85. package/dist/api-playground/ApiPlayground/components/SendPill.js +40 -0
  86. package/dist/api-playground/ApiPlayground/components/SendPill.js.map +1 -0
  87. package/dist/api-playground/ApiPlayground/components/TrashButton.js +27 -0
  88. package/dist/api-playground/ApiPlayground/components/TrashButton.js.map +1 -0
  89. package/dist/api-playground/ApiPlayground/components/TypeDropdown.js +53 -0
  90. package/dist/api-playground/ApiPlayground/components/TypeDropdown.js.map +1 -0
  91. package/dist/api-playground/ApiPlayground/index.js +68 -0
  92. package/dist/api-playground/ApiPlayground/index.js.map +1 -0
  93. package/dist/api-playground/EndpointFields/ParamFields/ExampleDescription.js +51 -0
  94. package/dist/api-playground/EndpointFields/ParamFields/ExampleDescription.js.map +1 -0
  95. package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/Enum.js +20 -0
  96. package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/Enum.js.map +1 -0
  97. package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/NumberMetadata.js +19 -0
  98. package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/NumberMetadata.js.map +1 -0
  99. package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/StringMetadata.js +29 -0
  100. package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/StringMetadata.js.map +1 -0
  101. package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/index.js +6 -0
  102. package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/index.js.map +1 -0
  103. package/dist/api-playground/EndpointFields/ParamFields/RecursiveParamField.js +13 -0
  104. package/dist/api-playground/EndpointFields/ParamFields/RecursiveParamField.js.map +1 -0
  105. package/dist/api-playground/EndpointFields/components/Description.js +13 -0
  106. package/dist/api-playground/EndpointFields/components/Description.js.map +1 -0
  107. package/dist/api-playground/EndpointFields/components/OneOfDropdown.js +20 -0
  108. package/dist/api-playground/EndpointFields/components/OneOfDropdown.js.map +1 -0
  109. package/dist/api-playground/EndpointFields/components/OptionDropdown.js +36 -0
  110. package/dist/api-playground/EndpointFields/components/OptionDropdown.js.map +1 -0
  111. package/dist/api-playground/EndpointFields/components/SectionHeading.js +44 -0
  112. package/dist/api-playground/EndpointFields/components/SectionHeading.js.map +1 -0
  113. package/dist/api-playground/EndpointFields/index.js +7 -0
  114. package/dist/api-playground/EndpointFields/index.js.map +1 -0
  115. package/dist/api-playground-2/Api.js +13 -0
  116. package/dist/api-playground-2/Api.js.map +1 -0
  117. package/dist/api-playground-2/ApiExamples.js +19 -18
  118. package/dist/api-playground-2/ApiExamples.js.map +1 -1
  119. package/dist/api-playground-2/ApiFields.js +253 -0
  120. package/dist/api-playground-2/ApiFields.js.map +1 -0
  121. package/dist/api-playground-2/EndpointHeader.js +52 -0
  122. package/dist/api-playground-2/EndpointHeader.js.map +1 -0
  123. package/dist/api-playground-2/OperationPage.js +101 -0
  124. package/dist/api-playground-2/OperationPage.js.map +1 -0
  125. package/dist/api-playground-2/Playground.js +136 -0
  126. package/dist/api-playground-2/Playground.js.map +1 -0
  127. package/dist/api-playground-2/SchemaPage.js +14 -0
  128. package/dist/api-playground-2/SchemaPage.js.map +1 -0
  129. package/dist/api-playground-2/components/EndpointFields/EndpointSecurity.js +88 -0
  130. package/dist/api-playground-2/components/EndpointFields/EndpointSecurity.js.map +1 -0
  131. package/dist/api-playground-2/components/EndpointFields/fields/Enum.js +16 -0
  132. package/dist/api-playground-2/components/EndpointFields/fields/Enum.js.map +1 -0
  133. package/dist/api-playground-2/components/EndpointFields/fields/NumberMetadata.js +21 -0
  134. package/dist/api-playground-2/components/EndpointFields/fields/NumberMetadata.js.map +1 -0
  135. package/dist/api-playground-2/components/EndpointFields/fields/PrimitiveParamField.js +57 -0
  136. package/dist/api-playground-2/components/EndpointFields/fields/PrimitiveParamField.js.map +1 -0
  137. package/dist/api-playground-2/components/EndpointFields/fields/SimpleArrayParamField.js +90 -0
  138. package/dist/api-playground-2/components/EndpointFields/fields/SimpleArrayParamField.js.map +1 -0
  139. package/dist/api-playground-2/components/EndpointFields/fields/SimpleObjectParamField.js +122 -0
  140. package/dist/api-playground-2/components/EndpointFields/fields/SimpleObjectParamField.js.map +1 -0
  141. package/dist/api-playground-2/components/EndpointFields/fields/SimplePrimitiveParamField.js +75 -0
  142. package/dist/api-playground-2/components/EndpointFields/fields/SimplePrimitiveParamField.js.map +1 -0
  143. package/dist/api-playground-2/components/EndpointFields/fields/SimpleSchemaField.js +253 -0
  144. package/dist/api-playground-2/components/EndpointFields/fields/SimpleSchemaField.js.map +1 -0
  145. package/dist/api-playground-2/components/EndpointFields/fields/StringMetadata.js +28 -0
  146. package/dist/api-playground-2/components/EndpointFields/fields/StringMetadata.js.map +1 -0
  147. package/dist/api-playground-2/components/Example/GeneratedRequestExample.js +101 -114
  148. package/dist/api-playground-2/components/Example/GeneratedRequestExample.js.map +1 -1
  149. package/dist/api-playground-2/components/Request/BodySection.js +41 -0
  150. package/dist/api-playground-2/components/Request/BodySection.js.map +1 -0
  151. package/dist/api-playground-2/components/Request/InputSectionContainer.js +66 -0
  152. package/dist/api-playground-2/components/Request/InputSectionContainer.js.map +1 -0
  153. package/dist/api-playground-2/components/Request/ParameterSection.js +36 -0
  154. package/dist/api-playground-2/components/Request/ParameterSection.js.map +1 -0
  155. package/dist/api-playground-2/components/Request/SecuritySection.js +55 -0
  156. package/dist/api-playground-2/components/Request/SecuritySection.js.map +1 -0
  157. package/dist/api-playground-2/components/Request/ServerSection.js +33 -0
  158. package/dist/api-playground-2/components/Request/ServerSection.js.map +1 -0
  159. package/dist/api-playground-2/components/Request/inputs/ArrayInput.js +55 -0
  160. package/dist/api-playground-2/components/Request/inputs/ArrayInput.js.map +1 -0
  161. package/dist/api-playground-2/components/Request/inputs/DifferentiatedInput.js +48 -0
  162. package/dist/api-playground-2/components/Request/inputs/DifferentiatedInput.js.map +1 -0
  163. package/dist/api-playground-2/components/Request/inputs/FileInput.js +43 -0
  164. package/dist/api-playground-2/components/Request/inputs/FileInput.js.map +1 -0
  165. package/dist/api-playground-2/components/Request/inputs/InputContainer.js +127 -0
  166. package/dist/api-playground-2/components/Request/inputs/InputContainer.js.map +1 -0
  167. package/dist/api-playground-2/components/Request/inputs/NullInput.js +15 -0
  168. package/dist/api-playground-2/components/Request/inputs/NullInput.js.map +1 -0
  169. package/dist/api-playground-2/components/Request/inputs/NumberInput.js +46 -0
  170. package/dist/api-playground-2/components/Request/inputs/NumberInput.js.map +1 -0
  171. package/dist/api-playground-2/components/Request/inputs/ObjectInput.js +104 -0
  172. package/dist/api-playground-2/components/Request/inputs/ObjectInput.js.map +1 -0
  173. package/dist/api-playground-2/components/Request/inputs/OneOfInput.js +77 -0
  174. package/dist/api-playground-2/components/Request/inputs/OneOfInput.js.map +1 -0
  175. package/dist/api-playground-2/components/Request/inputs/SelectInput.js +54 -0
  176. package/dist/api-playground-2/components/Request/inputs/SelectInput.js.map +1 -0
  177. package/dist/api-playground-2/components/Request/inputs/StringInput.js +44 -0
  178. package/dist/api-playground-2/components/Request/inputs/StringInput.js.map +1 -0
  179. package/dist/api-playground-2/components/Request/inputs/TextInput.js +29 -0
  180. package/dist/api-playground-2/components/Request/inputs/TextInput.js.map +1 -0
  181. package/dist/api-playground-2/components/TypeDropdown.js +48 -0
  182. package/dist/api-playground-2/components/TypeDropdown.js.map +1 -0
  183. package/dist/api-playground-2/constants/index.js +6 -4
  184. package/dist/api-playground-2/constants/index.js.map +1 -1
  185. package/dist/api-playground-2/contexts/ApiPlaygroundContext.js +11 -0
  186. package/dist/api-playground-2/contexts/ApiPlaygroundContext.js.map +1 -0
  187. package/dist/api-playground-2/generators/generateInteractiveCodeSample.js +6 -6
  188. package/dist/api-playground-2/generators/generateInteractiveCodeSample.js.map +1 -1
  189. package/dist/api-playground-2/generators/generateSnippet.js +187 -36
  190. package/dist/api-playground-2/generators/generateSnippet.js.map +1 -1
  191. package/dist/api-playground-2/hooks/useCopyPathWithInputs.js +14 -0
  192. package/dist/api-playground-2/hooks/useCopyPathWithInputs.js.map +1 -0
  193. package/dist/api-playground-2/hooks/useInitializeInputs.js +101 -0
  194. package/dist/api-playground-2/hooks/useInitializeInputs.js.map +1 -0
  195. package/dist/api-playground-2/hooks/useSendPlaygroundRequest.js +156 -0
  196. package/dist/api-playground-2/hooks/useSendPlaygroundRequest.js.map +1 -0
  197. package/dist/api-playground-2/schemaGraph/addApiReferenceDataFromMdxAndDocsConfig.js +57 -0
  198. package/dist/api-playground-2/schemaGraph/addApiReferenceDataFromMdxAndDocsConfig.js.map +1 -0
  199. package/dist/api-playground-2/schemaGraph/processExamples.js +41 -8
  200. package/dist/api-playground-2/schemaGraph/processExamples.js.map +1 -1
  201. package/dist/api-playground-2/schemaGraph/processSecurityOptions.js +107 -0
  202. package/dist/api-playground-2/schemaGraph/processSecurityOptions.js.map +1 -0
  203. package/dist/api-playground-2/schemaGraph/utils.js +195 -43
  204. package/dist/api-playground-2/schemaGraph/utils.js.map +1 -1
  205. package/dist/api-playground-2/types/index.js +118 -0
  206. package/dist/api-playground-2/types/index.js.map +1 -0
  207. package/dist/common/guards.js +32 -6
  208. package/dist/common/guards.js.map +1 -1
  209. package/dist/common/potentiallyParseOpenApiString.js +25 -0
  210. package/dist/common/potentiallyParseOpenApiString.js.map +1 -0
  211. package/dist/common/replaceSlashIndex.js +7 -0
  212. package/dist/common/replaceSlashIndex.js.map +1 -0
  213. package/dist/common/slugToTitle.js +11 -0
  214. package/dist/common/slugToTitle.js.map +1 -0
  215. package/dist/components/Api/Expandable.js +119 -0
  216. package/dist/components/Api/Expandable.js.map +1 -0
  217. package/dist/components/Api/Markdown.js +66 -0
  218. package/dist/components/Api/Markdown.js.map +1 -0
  219. package/dist/components/Api/Param.js +191 -0
  220. package/dist/components/Api/Param.js.map +1 -0
  221. package/dist/components/content-components/code-block.js +68 -61
  222. package/dist/components/content-components/code-block.js.map +1 -1
  223. package/dist/components/content-components/code-group.js +36 -25
  224. package/dist/components/content-components/code-group.js.map +1 -1
  225. package/dist/components/content-components/getNodeText.js +5 -0
  226. package/dist/components/content-components/getNodeText.js.map +1 -0
  227. package/dist/constants/index.js +5 -0
  228. package/dist/constants/index.js.map +1 -0
  229. package/dist/constants/zIndex.js +7 -0
  230. package/dist/constants/zIndex.js.map +1 -0
  231. package/dist/contexts/ApiPlaygroundInputsContext.js +18 -0
  232. package/dist/contexts/ApiPlaygroundInputsContext.js.map +1 -0
  233. package/dist/contexts/ConfigContext.js +2 -3
  234. package/dist/contexts/ConfigContext.js.map +1 -1
  235. package/dist/contexts/EndpointLocationContext.js +18 -0
  236. package/dist/contexts/EndpointLocationContext.js.map +1 -0
  237. package/dist/contexts/MDXContentContext.js +19 -0
  238. package/dist/contexts/MDXContentContext.js.map +1 -0
  239. package/dist/env.js +6 -1
  240. package/dist/env.js.map +1 -1
  241. package/dist/hooks/useApiPlaygroundInputs.js +7 -0
  242. package/dist/hooks/useApiPlaygroundInputs.js.map +1 -0
  243. package/dist/hooks/useApiPlaygroundPrefillExamples.js +40 -0
  244. package/dist/hooks/useApiPlaygroundPrefillExamples.js.map +1 -0
  245. package/dist/hooks/useBaseUrlOptions.js +19 -0
  246. package/dist/hooks/useBaseUrlOptions.js.map +1 -0
  247. package/dist/hooks/useCheckHash.js +18 -0
  248. package/dist/hooks/useCheckHash.js.map +1 -0
  249. package/dist/hooks/useComponentSchemas.js +10 -0
  250. package/dist/hooks/useComponentSchemas.js.map +1 -0
  251. package/dist/hooks/useCurrentPath.js +17 -0
  252. package/dist/hooks/useCurrentPath.js.map +1 -0
  253. package/dist/hooks/useEndpoint.js +3 -3
  254. package/dist/hooks/useExpandableMemory.js +46 -0
  255. package/dist/hooks/useExpandableMemory.js.map +1 -0
  256. package/dist/hooks/useGenerateNextAdditionalProperties.js +12 -0
  257. package/dist/hooks/useGenerateNextAdditionalProperties.js.map +1 -0
  258. package/dist/hooks/useGenerateNextItems.js +12 -0
  259. package/dist/hooks/useGenerateNextItems.js.map +1 -0
  260. package/dist/hooks/useGenerateNextProperties.js +12 -0
  261. package/dist/hooks/useGenerateNextProperties.js.map +1 -0
  262. package/dist/hooks/useKeyboardShortcut.js +26 -0
  263. package/dist/hooks/useKeyboardShortcut.js.map +1 -0
  264. package/dist/hooks/useMDXContent.js +7 -0
  265. package/dist/hooks/useMDXContent.js.map +1 -0
  266. package/dist/hooks/useMDXContentController/useApiPlaygroundInputs.js +10 -0
  267. package/dist/hooks/useMDXContentController/useApiPlaygroundInputs.js.map +1 -0
  268. package/dist/hooks/useMDXContentController/useMDXContentCallbacks/useSetApiBaseIndexCallback.js +16 -0
  269. package/dist/hooks/useMDXContentController/useMDXContentCallbacks/useSetApiBaseIndexCallback.js.map +1 -0
  270. package/dist/hooks/useMDXContentController/useMDXContentCallbacks/useSetApiPlaygroundInputsCallback.js +16 -0
  271. package/dist/hooks/useMDXContentController/useMDXContentCallbacks/useSetApiPlaygroundInputsCallback.js.map +1 -0
  272. package/dist/hooks/usePlaygroundSchemaOptions.js +43 -0
  273. package/dist/hooks/usePlaygroundSchemaOptions.js.map +1 -0
  274. package/dist/hooks/usePrefilledInputs/index.js +66 -0
  275. package/dist/hooks/usePrefilledInputs/index.js.map +1 -0
  276. package/dist/hooks/usePrefilledInputs/storedServerVariables.js +30 -0
  277. package/dist/hooks/usePrefilledInputs/storedServerVariables.js.map +1 -0
  278. package/dist/hooks/useSecurityOption.js +11 -0
  279. package/dist/hooks/useSecurityOption.js.map +1 -0
  280. package/dist/hooks/useSendPlaygroundRequest.js +146 -15
  281. package/dist/hooks/useSendPlaygroundRequest.js.map +1 -1
  282. package/dist/hooks/useSetDefaultValue.js +64 -0
  283. package/dist/hooks/useSetDefaultValue.js.map +1 -0
  284. package/dist/index.d.ts +281 -0
  285. package/dist/index.js +143 -108
  286. package/dist/index.js.map +1 -1
  287. package/dist/openapi/filterEnums.js +21 -0
  288. package/dist/openapi/filterEnums.js.map +1 -0
  289. package/dist/openapi/generateNextAdditionalProperties.js +8 -0
  290. package/dist/openapi/generateNextAdditionalProperties.js.map +1 -0
  291. package/dist/openapi/generateNextItems.js +8 -0
  292. package/dist/openapi/generateNextItems.js.map +1 -0
  293. package/dist/openapi/generateNextProperties.js +24 -0
  294. package/dist/openapi/generateNextProperties.js.map +1 -0
  295. package/dist/openapi/generateOptionLabels.js +21 -0
  296. package/dist/openapi/generateOptionLabels.js.map +1 -0
  297. package/dist/openapi/generateSimpleLabels.js +5 -0
  298. package/dist/openapi/generateSimpleLabels.js.map +1 -0
  299. package/dist/openapi/generateTypeStringFromSchema.js +34 -0
  300. package/dist/openapi/generateTypeStringFromSchema.js.map +1 -0
  301. package/dist/openapi/getAuthFilteredSchemaArray.js +19 -0
  302. package/dist/openapi/getAuthFilteredSchemaArray.js.map +1 -0
  303. package/dist/paths/isEqualIgnoringLeadingSlash.js +22 -0
  304. package/dist/paths/isEqualIgnoringLeadingSlash.js.map +1 -0
  305. package/dist/paths/optionallyRemoveLeadingSlash.js +7 -0
  306. package/dist/paths/optionallyRemoveLeadingSlash.js.map +1 -0
  307. package/dist/paths/optionallyRemoveTrailingSlash.js +7 -0
  308. package/dist/paths/optionallyRemoveTrailingSlash.js.map +1 -0
  309. package/dist/utils/api-playground/defaults.js +16 -0
  310. package/dist/utils/api-playground/defaults.js.map +1 -0
  311. package/dist/utils/api-playground/paramFieldDefaults.js +11 -0
  312. package/dist/utils/api-playground/paramFieldDefaults.js.map +1 -0
  313. package/dist/utils/api-reference/getFilteredSecurityOptions.js +5 -0
  314. package/dist/utils/api-reference/getFilteredSecurityOptions.js.map +1 -0
  315. package/dist/utils/api-reference/getNextPropertiesByType.js +6 -0
  316. package/dist/utils/api-reference/getNextPropertiesByType.js.map +1 -0
  317. package/dist/utils/containsMarkdownTable.js +5 -0
  318. package/dist/utils/containsMarkdownTable.js.map +1 -0
  319. package/dist/utils/copyToClipboard.js +12 -0
  320. package/dist/utils/copyToClipboard.js.map +1 -0
  321. package/dist/utils/decodeSlug.js +8 -0
  322. package/dist/utils/decodeSlug.js.map +1 -0
  323. package/dist/utils/flattenObject.js +11 -0
  324. package/dist/utils/flattenObject.js.map +1 -0
  325. package/dist/utils/formatJSON.js +39 -0
  326. package/dist/utils/formatJSON.js.map +1 -0
  327. package/dist/utils/optionallyAddLeadingSlash.js +7 -0
  328. package/dist/utils/optionallyAddLeadingSlash.js.map +1 -0
  329. package/dist/utils/scrollElementIntoView.js +21 -0
  330. package/dist/utils/scrollElementIntoView.js.map +1 -0
  331. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"generateInteractiveCodeSample.js","sources":["../../../src/api-playground-2/generators/generateInteractiveCodeSample.ts"],"sourcesContent":["import { ApiPlaygroundDisplayType } from '@mintlify/models';\nimport { ApiPlaygroundInputs, CodeSample } from '@mintlify/validation';\n\nimport { getFirstExampleValue } from '@/api-playground-2/schemaGraph/processExamples';\nimport type { ApiReferenceDataV2 } from '@/api-playground-2/types';\nimport { langToPresetMap } from '@/constants/snippetPresets';\n\nimport { generateRequest } from './generateRequest';\nimport { generateSnippet } from './generateSnippet';\n\nexport const generateInteractiveCodeSample = async ({\n apiReferenceData,\n baseUrl,\n inputs,\n apiPlaygroundMode,\n selectedSecurityOptionIndex,\n lang,\n requiredOnly,\n}: {\n lang: string;\n baseUrl?: string;\n apiReferenceData: ApiReferenceDataV2;\n inputs: ApiPlaygroundInputs;\n apiPlaygroundMode: ApiPlaygroundDisplayType;\n selectedSecurityOptionIndex: number;\n requiredOnly?: boolean;\n}): Promise<CodeSample | undefined> => {\n if (baseUrl && apiPlaygroundMode !== 'none') {\n const firstRequestBodyContentType = Object.keys(\n apiReferenceData.dependencies?.requestBody?.content ?? {}\n )[0];\n const firstExample = getFirstExampleValue(\n apiReferenceData.dependencies?.requestBody?.content ?? {}\n );\n try {\n const request = generateRequest({\n baseUrl,\n apiReferenceData,\n inputs,\n exampleData: firstExample,\n selectedBodyContentType: firstRequestBodyContentType,\n requiredOnly,\n selectedSecurityOptionIndex,\n });\n const preset = langToPresetMap[lang];\n if (preset == undefined) {\n return;\n }\n const [snippet] = await generateSnippet({\n request,\n pathInputs: inputs.path,\n snippetPresets: [preset],\n apiReferenceData,\n });\n if (snippet)\n return {\n label: 'Interactive Example',\n lang: snippet.language,\n source: snippet.code,\n };\n } catch (err) {}\n }\n};\n"],"names":["generateInteractiveCodeSample","apiReferenceData","baseUrl","inputs","apiPlaygroundMode","selectedSecurityOptionIndex","lang","requiredOnly","firstRequestBodyContentType","_b","_a","firstExample","getFirstExampleValue","_d","_c","request","generateRequest","preset","langToPresetMap","snippet","generateSnippet"],"mappings":";;;;AAUO,MAAMA,IAAgC,OAAO;AAAA,EAClD,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,6BAAAC;AAAA,EACA,MAAAC;AAAA,EACA,cAAAC;AACF,MAQuC;;AACrC,MAAIL,KAAWE,MAAsB,QAAQ;AAC3C,UAAMI,IAA8B,OAAO;AAAA,QACzCC,KAAAC,IAAAT,EAAiB,iBAAjB,gBAAAS,EAA+B,gBAA/B,gBAAAD,EAA4C,YAAW,CAAA;AAAA,IAAC,EACxD,CAAC,GACGE,IAAeC;AAAA,QACnBC,KAAAC,IAAAb,EAAiB,iBAAjB,gBAAAa,EAA+B,gBAA/B,gBAAAD,EAA4C,YAAW,CAAA;AAAA,IAAC;AAE1D,QAAI;AACF,YAAME,IAAUC,EAAgB;AAAA,QAC9B,SAAAd;AAAA,QACA,kBAAAD;AAAA,QACA,QAAAE;AAAA,QACA,aAAaQ;AAAA,QACb,yBAAyBH;AAAA,QACzB,cAAAD;AAAA,QACA,6BAAAF;AAAA,MAAA,CACD,GACKY,IAASC,EAAgBZ,CAAI;AACnC,UAAIW,KAAU;AACZ;AAEF,YAAM,CAACE,CAAO,IAAI,MAAMC,EAAgB;AAAA,QACtC,SAAAL;AAAA,QACA,YAAYZ,EAAO;AAAA,QACnB,gBAAgB,CAACc,CAAM;AAAA,QACvB,kBAAAhB;AAAA,MAAA,CACD;AACD,UAAIkB;AACF,eAAO;AAAA,UACL,OAAO;AAAA,UACP,MAAMA,EAAQ;AAAA,UACd,QAAQA,EAAQ;AAAA,QAAA;AAAA,IAEtB,QAAc;AAAA,IAAC;AAAA,EACjB;AACF;"}
1
+ {"version":3,"file":"generateInteractiveCodeSample.js","sources":["../../../src/api-playground-2/generators/generateInteractiveCodeSample.ts"],"sourcesContent":["import { ApiPlaygroundDisplayType } from '@mintlify/models';\nimport { ApiPlaygroundInputs, CodeSample } from '@mintlify/validation';\n\nimport { getFirstExampleValue } from '@/api-playground-2/schemaGraph/processExamples';\nimport type { ApiReferenceDataV2 } from '@/api-playground-2/types';\nimport { langToPresetMap } from '@/constants/snippetPresets';\n\nimport { generateRequest } from './generateRequest';\nimport { generateSnippet } from './generateSnippet';\n\nexport const generateInteractiveCodeSample = async ({\n apiReferenceData,\n baseUrl,\n inputs,\n apiPlaygroundMode,\n selectedSecurityOptionIndex,\n lang,\n requiredOnly,\n}: {\n lang: string;\n baseUrl?: string;\n apiReferenceData: ApiReferenceDataV2;\n inputs: ApiPlaygroundInputs;\n apiPlaygroundMode: ApiPlaygroundDisplayType;\n selectedSecurityOptionIndex: number;\n requiredOnly?: boolean;\n}): Promise<CodeSample | undefined> => {\n if (baseUrl && apiPlaygroundMode !== 'none') {\n const firstRequestBodyContentType = Object.keys(\n apiReferenceData.dependencies?.requestBody?.content ?? {}\n )[0];\n const firstExample = getFirstExampleValue(\n apiReferenceData.dependencies?.requestBody?.content ?? {}\n );\n try {\n const request = generateRequest({\n baseUrl,\n apiReferenceData,\n inputs,\n exampleData: firstExample,\n selectedBodyContentType: firstRequestBodyContentType,\n requiredOnly,\n selectedSecurityOptionIndex,\n });\n const preset = langToPresetMap[lang];\n if (preset == undefined) {\n return;\n }\n const [snippet] = generateSnippet({\n request,\n pathInputs: inputs.path,\n snippetPresets: [preset],\n apiReferenceData,\n });\n if (snippet)\n return {\n label: 'Interactive Example',\n lang: snippet.language,\n source: snippet.code,\n };\n } catch (err) {}\n }\n};\n"],"names":["generateInteractiveCodeSample","apiReferenceData","baseUrl","inputs","apiPlaygroundMode","selectedSecurityOptionIndex","lang","requiredOnly","firstRequestBodyContentType","_b","_a","firstExample","getFirstExampleValue","_d","_c","request","generateRequest","preset","langToPresetMap","snippet","generateSnippet"],"mappings":";;;;AAUO,MAAMA,IAAgC,OAAO;AAAA,EAClD,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,6BAAAC;AAAA,EACA,MAAAC;AAAA,EACA,cAAAC;AACF,MAQuC;;AACrC,MAAIL,KAAWE,MAAsB,QAAQ;AAC3C,UAAMI,IAA8B,OAAO;AAAA,QACzCC,KAAAC,IAAAT,EAAiB,iBAAjB,gBAAAS,EAA+B,gBAA/B,gBAAAD,EAA4C,YAAW,CAAA;AAAA,IAAC,EACxD,CAAC,GACGE,IAAeC;AAAA,QACnBC,KAAAC,IAAAb,EAAiB,iBAAjB,gBAAAa,EAA+B,gBAA/B,gBAAAD,EAA4C,YAAW,CAAA;AAAA,IAAC;AAE1D,QAAI;AACF,YAAME,IAAUC,EAAgB;AAAA,QAC9B,SAAAd;AAAA,QACA,kBAAAD;AAAA,QACA,QAAAE;AAAA,QACA,aAAaQ;AAAA,QACb,yBAAyBH;AAAA,QACzB,cAAAD;AAAA,QACA,6BAAAF;AAAA,MAAA,CACD,GACKY,IAASC,EAAgBZ,CAAI;AACnC,UAAIW,KAAU;AACZ;AAEF,YAAM,CAACE,CAAO,IAAIC,EAAgB;AAAA,QAChC,SAAAL;AAAA,QACA,YAAYZ,EAAO;AAAA,QACnB,gBAAgB,CAACc,CAAM;AAAA,QACvB,kBAAAhB;AAAA,MAAA,CACD;AACD,UAAIkB;AACF,eAAO;AAAA,UACL,OAAO;AAAA,UACP,MAAMA,EAAQ;AAAA,UACd,QAAQA,EAAQ;AAAA,QAAA;AAAA,IAEtB,QAAc;AAAA,IAAC;AAAA,EACjB;AACF;"}
@@ -1,42 +1,193 @@
1
- import { HTTPSnippet as T } from "@readme/httpsnippet";
2
- import { generateUniqueString as U } from "../../utils/uuid.js";
3
- import { snippetPresets as x } from "../../constants/snippetPresets.js";
4
- const N = async ({
5
- request: r,
6
- pathInputs: p,
7
- apiReferenceData: s,
8
- snippetPresets: a = x,
9
- isMultipleRequest: c = !1
1
+ import { generateUniqueString as C } from "../../utils/uuid.js";
2
+ import { snippetPresets as R } from "../../constants/snippetPresets.js";
3
+ class q {
4
+ constructor(r) {
5
+ this.request = r;
6
+ }
7
+ convert(r, o) {
8
+ const { method: t, url: e, headers: s = [], postData: i } = this.request, n = {};
9
+ s.forEach((p) => {
10
+ p.name && p.value && (n[p.name] = p.value);
11
+ });
12
+ const a = (i == null ? void 0 : i.text) || "";
13
+ switch (r) {
14
+ case "shell":
15
+ return this.generateCurl(t, e, n, a);
16
+ case "python":
17
+ return this.generatePython(t, e, n, a, o);
18
+ case "javascript":
19
+ return this.generateJavaScript(t, e, n, a, o);
20
+ case "php":
21
+ return this.generatePHP(t, e, n, a);
22
+ case "go":
23
+ return this.generateGo(t, e, n, a);
24
+ case "java":
25
+ return this.generateJava(t, e, n, a);
26
+ case "ruby":
27
+ return this.generateRuby(t, e, n, a);
28
+ default:
29
+ return `# Code generation for ${r} not implemented yet`;
30
+ }
31
+ }
32
+ generateCurl(r, o, t, e) {
33
+ let s = `curl -X ${r.toUpperCase()} "${o}"`;
34
+ return Object.entries(t).forEach(([i, n]) => {
35
+ s += ` \\
36
+ -H "${i}: ${n}"`;
37
+ }), e && (s += ` \\
38
+ -d '${e}'`), s;
39
+ }
40
+ generatePython(r, o, t, e, s) {
41
+ if (s === "requests") {
42
+ const i = JSON.stringify(t, null, 2).split(`
43
+ `).join(`
44
+ `), n = e ? `,
45
+ data=${JSON.stringify(e)}` : "";
46
+ return `import requests
47
+
48
+ response = requests.${r.toLowerCase()}(
49
+ "${o}",
50
+ headers=${i}${n}
51
+ )
52
+
53
+ print(response.json())`;
54
+ }
55
+ return `# Python code generation not implemented for client: ${s}`;
56
+ }
57
+ generateJavaScript(r, o, t, e, s) {
58
+ if (s === "fetch") {
59
+ const i = JSON.stringify(t, null, 2).split(`
60
+ `).map((a, p) => p === 0 ? a : " " + a).join(`
61
+ `), n = e ? `,
62
+ body: ${JSON.stringify(e)}` : "";
63
+ return `fetch("${o}", {
64
+ method: "${r.toUpperCase()}",
65
+ headers: ${i}${n}
66
+ })
67
+ .then(response => response.json())
68
+ .then(data => console.log(data))
69
+ .catch(error => console.error('Error:', error));`;
70
+ }
71
+ return `// JavaScript code generation not implemented for client: ${s}`;
72
+ }
73
+ generatePHP(r, o, t, e) {
74
+ const s = Object.entries(t).map(([n, a]) => ` "${n}: ${a}"`).join(`,
75
+ `), i = e ? `,
76
+ CURLOPT_POSTFIELDS => '${e}'` : "";
77
+ return `<?php
78
+ $ch = curl_init();
79
+
80
+ curl_setopt_array($ch, [
81
+ CURLOPT_URL => "${o}",
82
+ CURLOPT_RETURNTRANSFER => true,
83
+ CURLOPT_CUSTOMREQUEST => "${r.toUpperCase()}",
84
+ CURLOPT_HTTPHEADER => [
85
+ ${s}
86
+ ]${i}
87
+ ]);
88
+
89
+ $response = curl_exec($ch);
90
+ curl_close($ch);
91
+
92
+ echo $response;
93
+ ?>`;
94
+ }
95
+ generateGo(r, o, t, e) {
96
+ const s = e ? `
97
+ reqBody := strings.NewReader(${JSON.stringify(e)})
98
+ req, _ := http.NewRequest("${r.toUpperCase()}", "${o}", reqBody)` : `
99
+ req, _ := http.NewRequest("${r.toUpperCase()}", "${o}", nil)`, i = Object.entries(t).map(([n, a]) => ` req.Header.Add("${n}", "${a}")`).join(`
100
+ `);
101
+ return `package main
102
+
103
+ import (
104
+ "fmt"
105
+ "net/http"
106
+ "io/ioutil"
107
+ "strings"
108
+ )
109
+
110
+ func main() {${s}
111
+ ${i}
112
+
113
+ client := &http.Client{}
114
+ resp, _ := client.Do(req)
115
+ defer resp.Body.Close()
116
+
117
+ body, _ := ioutil.ReadAll(resp.Body)
118
+ fmt.Println(string(body))
119
+ }`;
120
+ }
121
+ generateJava(r, o, t, e) {
122
+ const s = Object.entries(t).map(([n, a]) => ` .header("${n}", "${a}")`).join(`
123
+ `), i = e ? `.POST(HttpRequest.BodyPublishers.ofString(${JSON.stringify(e)}))` : `.method("${r.toUpperCase()}", HttpRequest.BodyPublishers.noBody())`;
124
+ return `import java.net.http.*;
125
+ import java.net.URI;
126
+
127
+ public class Main {
128
+ public static void main(String[] args) throws Exception {
129
+ HttpClient client = HttpClient.newHttpClient();
130
+ HttpRequest request = HttpRequest.newBuilder()
131
+ .uri(URI.create("${o}"))
132
+ ${s}
133
+ ${i}
134
+ .build();
135
+
136
+ HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
137
+ System.out.println(response.body());
138
+ }
139
+ }`;
140
+ }
141
+ generateRuby(r, o, t, e) {
142
+ const s = Object.entries(t).map(([n, a]) => `request["${n}"] = "${a}"`).join(`
143
+ `), i = e ? `
144
+ request.body = ${JSON.stringify(e)}` : "";
145
+ return `require 'net/http'
146
+ require 'uri'
147
+
148
+ uri = URI.parse("${o}")
149
+ http = Net::HTTP.new(uri.host, uri.port)
150
+ request = Net::HTTP::${r.charAt(0).toUpperCase() + r.slice(1).toLowerCase()}.new(uri.request_uri)
151
+ ${s}${i}
152
+
153
+ response = http.request(request)
154
+ puts response.body`;
155
+ }
156
+ }
157
+ const T = ({
158
+ request: l,
159
+ pathInputs: r,
160
+ apiReferenceData: o,
161
+ snippetPresets: t = R,
162
+ isMultipleRequest: e = !1
10
163
  }) => {
11
- const i = {}, g = /:{[^{}]+}/g, m = r.url.replace(g, (t) => {
12
- const e = ":62437";
13
- return i[e] = t, e;
14
- }), f = /{[^{}]+}/g, d = m.replace(f, (t) => {
15
- const e = t.slice(1, t.length - 1), n = p[e];
16
- if (t === "{endpoint}")
164
+ const s = {}, i = /:{[^{}]+}/g, n = l.url.replace(i, (c) => {
165
+ const u = ":62437";
166
+ return s[u] = c, u;
167
+ }), a = /{[^{}]+}/g, p = n.replace(a, (c) => {
168
+ const u = c.slice(1, c.length - 1), d = r[u];
169
+ if (c === "{endpoint}")
17
170
  return "https://{endpoint}";
18
- if (n && (typeof n != "string" || n.length > 0))
19
- return `${encodeURIComponent(n.toString())}`;
20
- const o = U();
21
- return i[o] = t, o;
22
- }), h = new T({
23
- ...r,
24
- url: d,
25
- postData: r.postData || { mimeType: "application/json" }
171
+ if (d && (typeof d != "string" || d.length > 0))
172
+ return `${encodeURIComponent(d.toString())}`;
173
+ const h = C();
174
+ return s[h] = c, h;
175
+ }), m = new q({
176
+ ...l,
177
+ url: p,
178
+ postData: l.postData || { mimeType: "application/json" }
26
179
  });
27
- return Promise.all(
28
- a.map(async (t) => {
29
- var u;
30
- const { filename: e, snippet: n, language: o } = t, { target: P, client: S } = n, l = h.convert(P, S), y = R(i, (l == null ? void 0 : l.toString()) || "");
31
- return {
32
- filename: c ? e : ((u = s.operation) == null ? void 0 : u.title) || e,
33
- code: y,
34
- language: o
35
- };
36
- })
37
- );
38
- }, R = (r, p) => Object.entries(r).reduce((s, [a, c]) => s.replace(a, c), p);
180
+ return t.map((c) => {
181
+ var g;
182
+ const { filename: u, snippet: d, language: h } = c, { target: f, client: y } = d, $ = m.convert(f, y), S = P(s, ($ == null ? void 0 : $.toString()) || "");
183
+ return {
184
+ filename: e ? u : ((g = o.operation) == null ? void 0 : g.title) || u,
185
+ code: S,
186
+ language: h
187
+ };
188
+ });
189
+ }, P = (l, r) => Object.entries(l).reduce((o, [t, e]) => o.replace(t, e), r);
39
190
  export {
40
- N as generateSnippet
191
+ T as generateSnippet
41
192
  };
42
193
  //# sourceMappingURL=generateSnippet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateSnippet.js","sources":["../../../src/api-playground-2/generators/generateSnippet.ts"],"sourcesContent":["import { ApiPlaygroundInputs } from '@mintlify/validation';\nimport type { Request } from 'har-format';\nimport { HTTPSnippet } from '@readme/httpsnippet';\nimport { generateUniqueString } from '@/utils/uuid';\n\nimport type { ApiReferenceDataV2 } from '@/api-playground-2/types';\nimport { snippetPresets as defaultSnippetPresets, SnippetPreset } from '@/constants/snippetPresets';\nimport { ExampleCodeSnippet } from '@/types/exampleCodeSnippet';\n\ntype TargetId = 'c' | 'clojure' | 'csharp' | 'go' | 'http' | 'java' | 'javascript' | 'json' | 'kotlin' | 'node' | 'objc' | 'ocaml' | 'php' | 'powershell' | 'python' | 'r' | 'ruby' | 'shell' | 'swift';\n\nexport interface GenerateSnippetParams {\n request: Request;\n pathInputs: ApiPlaygroundInputs['path'];\n apiReferenceData: ApiReferenceDataV2;\n snippetPresets?: SnippetPreset[];\n isMultipleRequest?: boolean;\n}\n\nexport const generateSnippet = async ({\n request,\n pathInputs,\n apiReferenceData,\n snippetPresets = defaultSnippetPresets,\n isMultipleRequest = false,\n}: GenerateSnippetParams): Promise<ExampleCodeSnippet[]> => {\n const uuidToName: Record<string, string> = {};\n\n // https://regex101.com/r/3PPRco/1\n const portRegex = /:{[^{}]+}/g;\n\n // for the port number found in the url that is not populated, replace it with a rare integer\n const safePortUrl = request.url.replace(portRegex, (nameWithColon) => {\n const replacementWithColon = ':62437'; // arbitrary port value which is unlikely to appear in url\n uuidToName[replacementWithColon] = nameWithColon;\n return replacementWithColon;\n });\n\n // https://regex101.com/r/pwKjrJ/1\n const pathParamRegex = /{[^{}]+}/g;\n\n // for each path param found in the url, replace it with the value if the input is populated, otherwise replace it with a uuid\n const safeUrl = safePortUrl.replace(pathParamRegex, (name) => {\n const nameNoBrackets = name.slice(1, name.length - 1);\n const paramValue = pathInputs[nameNoBrackets];\n\n if (name === '{endpoint}') {\n return 'https://{endpoint}';\n }\n\n if (paramValue && (typeof paramValue !== 'string' || paramValue.length > 0)) {\n return `${encodeURIComponent(paramValue.toString())}`;\n }\n\n const uuid = generateUniqueString();\n uuidToName[uuid] = name;\n return uuid;\n });\n\n const httpSnippet = new HTTPSnippet({\n ...request,\n url: safeUrl,\n postData: request.postData || { mimeType: 'application/json' },\n });\n\n return Promise.all(\n snippetPresets.map(async (snippetPreset) => {\n const { filename, snippet, language } = snippetPreset;\n const { target, client } = snippet;\n const response = httpSnippet.convert(target as TargetId, client);\n\n const code = restorePlaceholders(uuidToName, response?.toString() || '');\n\n return {\n filename: isMultipleRequest ? filename : apiReferenceData.operation?.title || filename,\n code,\n language,\n };\n })\n );\n};\n\n/**\n * For each uuid that was substituted into the url, replaces the first (and only) instance of the uuid with the original name.\n *\n * @param uuidNameMap - Mapping of UUIDs to their original names.\n * @param snippet - String where UUIDs need to be replaced with their original names.\n */\nconst restorePlaceholders = (uuidNameMap: Record<string, string>, snippet: string): string => {\n return Object.entries(uuidNameMap).reduce((acc, [uuid, name]) => {\n return acc.replace(uuid, name);\n }, snippet);\n};\n"],"names":["generateSnippet","request","pathInputs","apiReferenceData","snippetPresets","defaultSnippetPresets","isMultipleRequest","uuidToName","portRegex","safePortUrl","nameWithColon","replacementWithColon","pathParamRegex","safeUrl","name","nameNoBrackets","paramValue","uuid","generateUniqueString","httpSnippet","HTTPSnippet","snippetPreset","filename","snippet","language","target","client","response","code","restorePlaceholders","_a","uuidNameMap","acc"],"mappings":";;;AAmBO,MAAMA,IAAkB,OAAO;AAAA,EACpC,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,kBAAAC;AAAA,EAAA,gBACAC,IAAiBC;AAAAA,EACjB,mBAAAC,IAAoB;AACtB,MAA4D;AAC1D,QAAMC,IAAqC,CAAA,GAGrCC,IAAY,cAGZC,IAAcR,EAAQ,IAAI,QAAQO,GAAW,CAACE,MAAkB;AACpE,UAAMC,IAAuB;AAC7B,WAAAJ,EAAWI,CAAoB,IAAID,GAC5BC;AAAA,EACT,CAAC,GAGKC,IAAiB,aAGjBC,IAAUJ,EAAY,QAAQG,GAAgB,CAACE,MAAS;AAC5D,UAAMC,IAAiBD,EAAK,MAAM,GAAGA,EAAK,SAAS,CAAC,GAC9CE,IAAad,EAAWa,CAAc;AAE5C,QAAID,MAAS;AACX,aAAO;AAGT,QAAIE,MAAe,OAAOA,KAAe,YAAYA,EAAW,SAAS;AACvE,aAAO,GAAG,mBAAmBA,EAAW,SAAA,CAAU,CAAC;AAGrD,UAAMC,IAAOC,EAAA;AACb,WAAAX,EAAWU,CAAI,IAAIH,GACZG;AAAA,EACT,CAAC,GAEKE,IAAc,IAAIC,EAAY;AAAA,IAClC,GAAGnB;AAAA,IACH,KAAKY;AAAA,IACL,UAAUZ,EAAQ,YAAY,EAAE,UAAU,mBAAA;AAAA,EAAmB,CAC9D;AAED,SAAO,QAAQ;AAAA,IACbG,EAAe,IAAI,OAAOiB,MAAkB;;AAC1C,YAAM,EAAE,UAAAC,GAAU,SAAAC,GAAS,UAAAC,EAAA,IAAaH,GAClC,EAAE,QAAAI,GAAQ,QAAAC,EAAA,IAAWH,GACrBI,IAAWR,EAAY,QAAQM,GAAoBC,CAAM,GAEzDE,IAAOC,EAAoBtB,IAAYoB,KAAA,gBAAAA,EAAU,eAAc,EAAE;AAEvE,aAAO;AAAA,QACL,UAAUrB,IAAoBgB,MAAWQ,IAAA3B,EAAiB,cAAjB,gBAAA2B,EAA4B,UAASR;AAAA,QAC9E,MAAAM;AAAA,QACA,UAAAJ;AAAA,MAAA;AAAA,IAEJ,CAAC;AAAA,EAAA;AAEL,GAQMK,IAAsB,CAACE,GAAqCR,MACzD,OAAO,QAAQQ,CAAW,EAAE,OAAO,CAACC,GAAK,CAACf,GAAMH,CAAI,MAClDkB,EAAI,QAAQf,GAAMH,CAAI,GAC5BS,CAAO;"}
1
+ {"version":3,"file":"generateSnippet.js","sources":["../../../src/api-playground-2/generators/generateSnippet.ts"],"sourcesContent":["import { ApiPlaygroundInputs } from '@mintlify/validation';\nimport type { Request } from 'har-format';\n// import { HTTPSnippet } from '@readme/httpsnippet';\nimport { generateUniqueString } from '@/utils/uuid';\n\nimport type { ApiReferenceDataV2 } from '@/api-playground-2/types';\nimport { snippetPresets as defaultSnippetPresets, SnippetPreset } from '@/constants/snippetPresets';\nimport { ExampleCodeSnippet } from '@/types/exampleCodeSnippet';\n\ntype TargetId = 'c' | 'clojure' | 'csharp' | 'go' | 'http' | 'java' | 'javascript' | 'json' | 'kotlin' | 'node' | 'objc' | 'ocaml' | 'php' | 'powershell' | 'python' | 'r' | 'ruby' | 'shell' | 'swift';\n\n// Fake HTTPSnippet implementation\nclass FakeHTTPSnippet {\n private request: any;\n\n constructor(request: any) {\n this.request = request;\n }\n\n convert(target: TargetId, client?: string): string {\n const { method, url, headers = [], postData } = this.request;\n const headersObj: Record<string, string> = {};\n headers.forEach((h: any) => {\n if (h.name && h.value) headersObj[h.name] = h.value;\n });\n\n const body = postData?.text || '';\n\n switch (target) {\n case 'shell':\n return this.generateCurl(method, url, headersObj, body);\n case 'python':\n return this.generatePython(method, url, headersObj, body, client);\n case 'javascript':\n return this.generateJavaScript(method, url, headersObj, body, client);\n case 'php':\n return this.generatePHP(method, url, headersObj, body);\n case 'go':\n return this.generateGo(method, url, headersObj, body);\n case 'java':\n return this.generateJava(method, url, headersObj, body);\n case 'ruby':\n return this.generateRuby(method, url, headersObj, body);\n default:\n return `# Code generation for ${target} not implemented yet`;\n }\n }\n\n private generateCurl(method: string, url: string, headers: Record<string, string>, body: string): string {\n let curl = `curl -X ${method.toUpperCase()} \"${url}\"`;\n Object.entries(headers).forEach(([key, value]) => {\n curl += ` \\\\\\n -H \"${key}: ${value}\"`;\n });\n if (body) {\n curl += ` \\\\\\n -d '${body}'`;\n }\n return curl;\n }\n\n private generatePython(method: string, url: string, headers: Record<string, string>, body: string, client?: string): string {\n if (client === 'requests') {\n const headersStr = JSON.stringify(headers, null, 2).split('\\n').join('\\n ');\n const dataStr = body ? `,\\n data=${JSON.stringify(body)}` : '';\n return `import requests\\n\\nresponse = requests.${method.toLowerCase()}(\\n \"${url}\",\\n headers=${headersStr}${dataStr}\\n)\\n\\nprint(response.json())`;\n }\n return `# Python code generation not implemented for client: ${client}`;\n }\n\n private generateJavaScript(method: string, url: string, headers: Record<string, string>, body: string, client?: string): string {\n if (client === 'fetch') {\n const headersStr = JSON.stringify(headers, null, 2).split('\\n').map((line, i) => i === 0 ? line : ' ' + line).join('\\n');\n const bodyStr = body ? `,\\n body: ${JSON.stringify(body)}` : '';\n return `fetch(\"${url}\", {\\n method: \"${method.toUpperCase()}\",\\n headers: ${headersStr}${bodyStr}\\n})\\n .then(response => response.json())\\n .then(data => console.log(data))\\n .catch(error => console.error('Error:', error));`;\n }\n return `// JavaScript code generation not implemented for client: ${client}`;\n }\n\n private generatePHP(method: string, url: string, headers: Record<string, string>, body: string): string {\n const headersArray = Object.entries(headers).map(([k, v]) => ` \"${k}: ${v}\"`).join(',\\n');\n const dataStr = body ? `,\\n CURLOPT_POSTFIELDS => '${body}'` : '';\n return `<?php\\n$ch = curl_init();\\n\\ncurl_setopt_array($ch, [\\n CURLOPT_URL => \"${url}\",\\n CURLOPT_RETURNTRANSFER => true,\\n CURLOPT_CUSTOMREQUEST => \"${method.toUpperCase()}\",\\n CURLOPT_HTTPHEADER => [\\n${headersArray}\\n ]${dataStr}\\n]);\\n\\n$response = curl_exec($ch);\\ncurl_close($ch);\\n\\necho $response;\\n?>`;\n }\n\n private generateGo(method: string, url: string, headers: Record<string, string>, body: string): string {\n const bodyCode = body ? `\\n reqBody := strings.NewReader(${JSON.stringify(body)})\\n req, _ := http.NewRequest(\"${method.toUpperCase()}\", \"${url}\", reqBody)` : `\\n req, _ := http.NewRequest(\"${method.toUpperCase()}\", \"${url}\", nil)`;\n const headersCode = Object.entries(headers).map(([k, v]) => ` req.Header.Add(\"${k}\", \"${v}\")`).join('\\n');\n return `package main\\n\\nimport (\\n \"fmt\"\\n \"net/http\"\\n \"io/ioutil\"\\n \"strings\"\\n)\\n\\nfunc main() {${bodyCode}\\n${headersCode}\\n\\n client := &http.Client{}\\n resp, _ := client.Do(req)\\n defer resp.Body.Close()\\n\\n body, _ := ioutil.ReadAll(resp.Body)\\n fmt.Println(string(body))\\n}`;\n }\n\n private generateJava(method: string, url: string, headers: Record<string, string>, body: string): string {\n const headersCode = Object.entries(headers).map(([k, v]) => ` .header(\"${k}\", \"${v}\")`).join('\\n');\n const bodyCode = body ? `.POST(HttpRequest.BodyPublishers.ofString(${JSON.stringify(body)}))` : `.method(\"${method.toUpperCase()}\", HttpRequest.BodyPublishers.noBody())`;\n return `import java.net.http.*;\\nimport java.net.URI;\\n\\npublic class Main {\\n public static void main(String[] args) throws Exception {\\n HttpClient client = HttpClient.newHttpClient();\\n HttpRequest request = HttpRequest.newBuilder()\\n .uri(URI.create(\"${url}\"))\\n${headersCode}\\n ${bodyCode}\\n .build();\\n\\n HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());\\n System.out.println(response.body());\\n }\\n}`;\n }\n\n private generateRuby(method: string, url: string, headers: Record<string, string>, body: string): string {\n const headersCode = Object.entries(headers).map(([k, v]) => `request[\"${k}\"] = \"${v}\"`).join('\\n');\n const bodyCode = body ? `\\nrequest.body = ${JSON.stringify(body)}` : '';\n return `require 'net/http'\\nrequire 'uri'\\n\\nuri = URI.parse(\"${url}\")\\nhttp = Net::HTTP.new(uri.host, uri.port)\\nrequest = Net::HTTP::${method.charAt(0).toUpperCase() + method.slice(1).toLowerCase()}.new(uri.request_uri)\\n${headersCode}${bodyCode}\\n\\nresponse = http.request(request)\\nputs response.body`;\n }\n}\n\nexport interface GenerateSnippetParams {\n request: Request;\n pathInputs: ApiPlaygroundInputs['path'];\n apiReferenceData: ApiReferenceDataV2;\n snippetPresets?: SnippetPreset[];\n isMultipleRequest?: boolean;\n}\n\nexport const generateSnippet = ({\n request,\n pathInputs,\n apiReferenceData,\n snippetPresets = defaultSnippetPresets,\n isMultipleRequest = false,\n}: GenerateSnippetParams): ExampleCodeSnippet[] => {\n const uuidToName: Record<string, string> = {};\n\n // https://regex101.com/r/3PPRco/1\n const portRegex = /:{[^{}]+}/g;\n\n // for the port number found in the url that is not populated, replace it with a rare integer\n const safePortUrl = request.url.replace(portRegex, (nameWithColon) => {\n const replacementWithColon = ':62437'; // arbitrary port value which is unlikely to appear in url\n uuidToName[replacementWithColon] = nameWithColon;\n return replacementWithColon;\n });\n\n // https://regex101.com/r/pwKjrJ/1\n const pathParamRegex = /{[^{}]+}/g;\n\n // for each path param found in the url, replace it with the value if the input is populated, otherwise replace it with a uuid\n const safeUrl = safePortUrl.replace(pathParamRegex, (name) => {\n const nameNoBrackets = name.slice(1, name.length - 1);\n const paramValue = pathInputs[nameNoBrackets];\n\n if (name === '{endpoint}') {\n return 'https://{endpoint}';\n }\n\n if (paramValue && (typeof paramValue !== 'string' || paramValue.length > 0)) {\n return `${encodeURIComponent(paramValue.toString())}`;\n }\n\n const uuid = generateUniqueString();\n uuidToName[uuid] = name;\n return uuid;\n });\n\n const httpSnippet = new FakeHTTPSnippet({\n ...request,\n url: safeUrl,\n postData: request.postData || { mimeType: 'application/json' },\n });\n\n return snippetPresets.map((snippetPreset) => {\n const { filename, snippet, language } = snippetPreset;\n const { target, client } = snippet;\n const response = httpSnippet.convert(target as TargetId, client);\n\n const code = restorePlaceholders(uuidToName, response?.toString() || '');\n\n return {\n filename: isMultipleRequest ? filename : apiReferenceData.operation?.title || filename,\n code,\n language,\n };\n });\n};\n\n/**\n * For each uuid that was substituted into the url, replaces the first (and only) instance of the uuid with the original name.\n *\n * @param uuidNameMap - Mapping of UUIDs to their original names.\n * @param snippet - String where UUIDs need to be replaced with their original names.\n */\nconst restorePlaceholders = (uuidNameMap: Record<string, string>, snippet: string): string => {\n return Object.entries(uuidNameMap).reduce((acc, [uuid, name]) => {\n return acc.replace(uuid, name);\n }, snippet);\n};\n"],"names":["FakeHTTPSnippet","request","target","client","method","url","headers","postData","headersObj","h","body","curl","key","value","headersStr","dataStr","line","i","bodyStr","headersArray","k","v","bodyCode","headersCode","generateSnippet","pathInputs","apiReferenceData","snippetPresets","defaultSnippetPresets","isMultipleRequest","uuidToName","portRegex","safePortUrl","nameWithColon","replacementWithColon","pathParamRegex","safeUrl","name","nameNoBrackets","paramValue","uuid","generateUniqueString","httpSnippet","snippetPreset","filename","snippet","language","response","code","restorePlaceholders","_a","uuidNameMap","acc"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { usePlaygroundInputsStore as s } from "./usePlaygroundInputsStore.js";
2
+ const l = ({ path: e, baseUrl: r }) => {
3
+ const { getApiPlaygroundInputs: t } = s(), o = t(), n = c(e, o.path);
4
+ return p(a(r, o.server), n);
5
+ }, c = (e, r) => Object.entries(r).reduce((t, [o, n]) => n == null ? t : t.replace(`{${o}}`, encodeURIComponent(n.toString())), e), a = (e, r) => {
6
+ let t = e;
7
+ return Object.entries(r).forEach(([o, n]) => {
8
+ n && (t = t.replace(`{${o}}`, n));
9
+ }), t;
10
+ }, p = (e, r) => e.replace(/\/$/, "") + "/" + r.replace(/^\//, "");
11
+ export {
12
+ l as useCopyPathWithInputs
13
+ };
14
+ //# sourceMappingURL=useCopyPathWithInputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCopyPathWithInputs.js","sources":["../../../src/api-playground-2/hooks/useCopyPathWithInputs.ts"],"sourcesContent":["import { usePlaygroundInputsStore } from './usePlaygroundInputsStore';\n\nexport const useCopyPathWithInputs = ({ path, baseUrl }: { path: string; baseUrl: string }) => {\n const { getApiPlaygroundInputs } = usePlaygroundInputsStore();\n const inputs = getApiPlaygroundInputs();\n const pathWithInputs = addPathParams(path, inputs.path);\n const toCopy = joinWithSingleSlash(addServerVariables(baseUrl, inputs.server), pathWithInputs);\n return toCopy;\n};\n\nconst addPathParams = (path: string, pathInputs: Record<string, unknown>) => {\n return Object.entries(pathInputs).reduce((path, [inputName, inputValue]) => {\n if (inputValue == undefined) return path;\n return path.replace(`{${inputName}}`, encodeURIComponent(inputValue.toString()));\n }, path);\n};\n\nconst addServerVariables = (baseUrl: string, variables: Record<string, string>): string => {\n let url = baseUrl;\n Object.entries(variables).forEach(([key, input]) => {\n if (input) url = url.replace(`{${key}}`, input);\n });\n return url;\n};\n\nconst joinWithSingleSlash = (baseUrl: string, path: string): string => {\n // remove the last slash of the baseUrl and the first slash of the path, and join with slash\n return baseUrl.replace(/\\/$/, '') + '/' + path.replace(/^\\//, '');\n};\n"],"names":["useCopyPathWithInputs","path","baseUrl","getApiPlaygroundInputs","usePlaygroundInputsStore","inputs","pathWithInputs","addPathParams","joinWithSingleSlash","addServerVariables","pathInputs","inputName","inputValue","variables","url","key","input"],"mappings":";AAEO,MAAMA,IAAwB,CAAC,EAAE,MAAAC,GAAM,SAAAC,QAAiD;AAC7F,QAAM,EAAE,wBAAAC,EAAA,IAA2BC,EAAA,GAC7BC,IAASF,EAAA,GACTG,IAAiBC,EAAcN,GAAMI,EAAO,IAAI;AAEtD,SADeG,EAAoBC,EAAmBP,GAASG,EAAO,MAAM,GAAGC,CAAc;AAE/F,GAEMC,IAAgB,CAACN,GAAcS,MAC5B,OAAO,QAAQA,CAAU,EAAE,OAAO,CAACT,GAAM,CAACU,GAAWC,CAAU,MAChEA,KAAc,OAAkBX,IAC7BA,EAAK,QAAQ,IAAIU,CAAS,KAAK,mBAAmBC,EAAW,SAAA,CAAU,CAAC,GAC9EX,CAAI,GAGHQ,IAAqB,CAACP,GAAiBW,MAA8C;AACzF,MAAIC,IAAMZ;AACV,gBAAO,QAAQW,CAAS,EAAE,QAAQ,CAAC,CAACE,GAAKC,CAAK,MAAM;AAClD,IAAIA,MAAOF,IAAMA,EAAI,QAAQ,IAAIC,CAAG,KAAKC,CAAK;AAAA,EAChD,CAAC,GACMF;AACT,GAEMN,IAAsB,CAACN,GAAiBD,MAErCC,EAAQ,QAAQ,OAAO,EAAE,IAAI,MAAMD,EAAK,QAAQ,OAAO,EAAE;"}
@@ -0,0 +1,101 @@
1
+ import { useRef as k, useEffect as W } from "react";
2
+ import { apiPlaygroundInputKeys as q } from "../constants/index.js";
3
+ import { escapeDots as O, getSchemaDefault as P, mapParamInToPlaygroundInputKey as w, getParametersPerSection as B, getRequestBodyContentType as G, isSchemaObject as H, getBodyDefaultsFromSchema as J } from "../schemaGraph/utils.js";
4
+ import { usePlaygroundInputsStore as A } from "./usePlaygroundInputsStore.js";
5
+ function X({
6
+ apiReferenceData: e,
7
+ selectedBaseUrlIndex: d,
8
+ selectedExampleIndex: a,
9
+ selectedRequestBodyContentTypeIndex: p
10
+ }) {
11
+ const r = k(null), { reset: y, initialize: t, getApiPlaygroundInputs: f, inputs: b } = A(), h = k(!1);
12
+ W(() => {
13
+ const m = window.location.pathname, c = A.getState().selectedSecurityOptionIndex;
14
+ if (!h.current && Object.keys(b).length === 0) {
15
+ const u = C({
16
+ apiReferenceData: e,
17
+ inputs: f(),
18
+ selectedBaseUrlIndex: d,
19
+ selectedSecurityOptionIndex: c,
20
+ selectedExampleIndex: a,
21
+ selectedContentTypeIndex: p
22
+ });
23
+ t(u), h.current = !0, r.current = m;
24
+ return;
25
+ }
26
+ if (r.current === null) {
27
+ r.current = m;
28
+ return;
29
+ }
30
+ if (r.current !== m) {
31
+ y();
32
+ const u = C({
33
+ apiReferenceData: e,
34
+ inputs: f(),
35
+ selectedBaseUrlIndex: d,
36
+ selectedSecurityOptionIndex: c,
37
+ selectedExampleIndex: a,
38
+ selectedContentTypeIndex: p
39
+ });
40
+ t(u), r.current = m;
41
+ }
42
+ }, [
43
+ e,
44
+ d,
45
+ a,
46
+ p,
47
+ y,
48
+ t,
49
+ f,
50
+ b
51
+ ]);
52
+ }
53
+ const C = ({
54
+ apiReferenceData: e,
55
+ // eslint-disable-next-line unused-imports/no-unused-vars
56
+ inputs: d,
57
+ selectedBaseUrlIndex: a,
58
+ selectedSecurityOptionIndex: p,
59
+ selectedExampleIndex: r = 0,
60
+ selectedContentTypeIndex: y = 0
61
+ }) => {
62
+ var E, V, I, $, j, x, K, z;
63
+ let t = {};
64
+ const f = (E = e.operation) == null ? void 0 : E.prefillPlaygroundWithExample, h = (((V = e.operation) == null ? void 0 : V.prefillPlaygroundExamples) ?? [])[r], S = ($ = Object.values(((I = e.dependencies) == null ? void 0 : I.servers) ?? {})[a]) == null ? void 0 : $.variables, c = (j = e.dependencies) == null ? void 0 : j.processedSecurityOptions, u = c == null ? void 0 : c[p], F = (x = e.dependencies) == null ? void 0 : x.parameters, v = (K = e.dependencies) == null ? void 0 : K.requestBody;
65
+ if (!(f && h)) {
66
+ if (S && Object.entries(S).forEach(([n, s]) => {
67
+ const o = `${q.server}.${O(n)}`, i = P(s);
68
+ i && (t[o] = i);
69
+ }), u) {
70
+ const { scheme: n, schema: s } = u, o = "in" in n ? n.in : "header", i = "name" in n ? n.name : s.title ?? "", l = `${w(o)}.${O(i)}`, g = P(s);
71
+ g && (t[l] = g);
72
+ }
73
+ if (F) {
74
+ const { header: n, path: s, query: o, cookie: i } = B(e);
75
+ [...n, ...s, ...o, ...i].forEach((l) => {
76
+ if (l.schema) {
77
+ const g = `${w(l.in)}.${O(l.name)}`, T = P(l.schema);
78
+ T && (t[g] = T);
79
+ }
80
+ });
81
+ }
82
+ if (v) {
83
+ const n = G(e, y);
84
+ if (n) {
85
+ const s = (z = v.content[n]) == null ? void 0 : z.schema, o = P(s);
86
+ if (o)
87
+ t[`${q.body}`] = o;
88
+ else if (H(s)) {
89
+ const i = J(s);
90
+ t = { ...t, ...i };
91
+ }
92
+ }
93
+ }
94
+ }
95
+ return t;
96
+ };
97
+ export {
98
+ C as getInitialPlaygroundValues,
99
+ X as useInitializeInputs
100
+ };
101
+ //# sourceMappingURL=useInitializeInputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInitializeInputs.js","sources":["../../../src/api-playground-2/hooks/useInitializeInputs.ts"],"sourcesContent":["import { ApiPlaygroundInputs } from '@mintlify/validation';\nimport { useEffect, useRef } from 'react';\n\nimport { apiPlaygroundInputKeys } from '../constants';\nimport {\n escapeDots,\n getBodyDefaultsFromSchema,\n getParametersPerSection,\n getRequestBodyContentType,\n getSchemaDefault,\n isSchemaObject,\n mapParamInToPlaygroundInputKey,\n} from '../schemaGraph/utils';\nimport { ApiReferenceDataV2 } from '../types';\nimport { PlaygroundInputValue, usePlaygroundInputsStore } from './usePlaygroundInputsStore';\n\ninterface UsePlaygroundStateSyncProps {\n apiReferenceData: ApiReferenceDataV2;\n selectedBaseUrlIndex: number;\n selectedExampleIndex: number;\n selectedRequestBodyContentTypeIndex: number;\n}\n\n/**\n * CLANKED\n * Syncs playground state with URL pathname changes.\n *\n * This hook implements the following behavior:\n * - When the pathname changes, it resets the playground inputs\n * - After reset, it initializes with the new default values for the current endpoint\n * - When playground closes without pathname change, state is preserved\n * - Query parameter changes (like ?playground=open) do NOT reset the state\n *\n * Uses refs to track previous pathname to avoid unnecessary resets.\n */\nexport function useInitializeInputs({\n apiReferenceData,\n selectedBaseUrlIndex,\n selectedExampleIndex,\n selectedRequestBodyContentTypeIndex,\n}: UsePlaygroundStateSyncProps) {\n const previousPathnameRef = useRef<string | null>(null);\n const { reset, initialize, getApiPlaygroundInputs, inputs } = usePlaygroundInputsStore();\n const hasInitializedRef = useRef(false);\n\n useEffect(() => {\n const currentPathname = window.location.pathname;\n const store = usePlaygroundInputsStore.getState();\n const selectedSecurityOptionIndex = store.selectedSecurityOptionIndex;\n\n // On first mount, initialize if inputs are empty\n if (!hasInitializedRef.current && Object.keys(inputs).length === 0) {\n const initialValues = getInitialPlaygroundValues({\n apiReferenceData,\n inputs: getApiPlaygroundInputs(),\n selectedBaseUrlIndex,\n selectedSecurityOptionIndex,\n selectedExampleIndex,\n selectedContentTypeIndex: selectedRequestBodyContentTypeIndex,\n });\n initialize(initialValues);\n hasInitializedRef.current = true;\n previousPathnameRef.current = currentPathname;\n return;\n }\n\n // If pathname hasn't been set yet, set it\n if (previousPathnameRef.current === null) {\n previousPathnameRef.current = currentPathname;\n return;\n }\n\n // If pathname changed, reset and reinitialize\n if (previousPathnameRef.current !== currentPathname) {\n reset();\n const initialValues = getInitialPlaygroundValues({\n apiReferenceData,\n inputs: getApiPlaygroundInputs(),\n selectedBaseUrlIndex,\n selectedSecurityOptionIndex,\n selectedExampleIndex,\n selectedContentTypeIndex: selectedRequestBodyContentTypeIndex,\n });\n initialize(initialValues);\n previousPathnameRef.current = currentPathname;\n }\n }, [\n apiReferenceData,\n selectedBaseUrlIndex,\n selectedExampleIndex,\n selectedRequestBodyContentTypeIndex,\n reset,\n initialize,\n getApiPlaygroundInputs,\n inputs,\n ]);\n}\n\nexport const getInitialPlaygroundValues = ({\n apiReferenceData,\n // eslint-disable-next-line unused-imports/no-unused-vars\n inputs,\n selectedBaseUrlIndex,\n selectedSecurityOptionIndex,\n selectedExampleIndex = 0,\n selectedContentTypeIndex = 0,\n}: {\n apiReferenceData: ApiReferenceDataV2;\n inputs: ApiPlaygroundInputs;\n selectedBaseUrlIndex: number;\n selectedSecurityOptionIndex: number;\n selectedExampleIndex?: number;\n selectedContentTypeIndex?: number;\n}): Record<string, PlaygroundInputValue> => {\n let initialValues: Record<string, PlaygroundInputValue> = {};\n\n const prefillExamplesEnabled = apiReferenceData.operation?.prefillPlaygroundWithExample;\n const prefillExamples = apiReferenceData.operation?.prefillPlaygroundExamples ?? [];\n const prefillExample = prefillExamples[selectedExampleIndex];\n\n const serverObjects = Object.values(apiReferenceData.dependencies?.servers ?? {});\n const serverVariables = serverObjects[selectedBaseUrlIndex]?.variables;\n const securityOptions = apiReferenceData.dependencies?.processedSecurityOptions;\n const securityOption = securityOptions?.[selectedSecurityOptionIndex];\n const parameters = apiReferenceData.dependencies?.parameters;\n const requestBody = apiReferenceData.dependencies?.requestBody;\n\n // prefill example\n if (prefillExamplesEnabled && prefillExample) {\n // TODO - Api Playground Refactor: prefillExample is already formatted as an ApiPlaygroundInputs object, so just recursively flatten\n } else {\n // prefill default values\n if (serverVariables) {\n Object.entries(serverVariables).forEach(([name, variable]) => {\n const inputKeyPrefix = `${apiPlaygroundInputKeys.server}.${escapeDots(name)}`;\n const defaultValue = getSchemaDefault(variable);\n if (defaultValue) {\n initialValues[inputKeyPrefix] = defaultValue;\n }\n });\n }\n\n if (securityOption) {\n const { scheme, schema } = securityOption;\n const parameterSection = 'in' in scheme ? scheme.in : 'header';\n const name = 'name' in scheme ? scheme.name : schema.title ?? '';\n const inputKeyPrefix = `${mapParamInToPlaygroundInputKey(parameterSection)}.${escapeDots(name)}`;\n const defaultValue = getSchemaDefault(schema);\n if (defaultValue) {\n initialValues[inputKeyPrefix] = defaultValue;\n }\n }\n\n if (parameters) {\n const { header, path, query, cookie } = getParametersPerSection(apiReferenceData);\n [...header, ...path, ...query, ...cookie].forEach((parameter) => {\n if (parameter.schema) {\n const inputKeyPrefix = `${mapParamInToPlaygroundInputKey(parameter.in)}.${escapeDots(parameter.name)}`;\n const defaultValue = getSchemaDefault(parameter.schema);\n if (defaultValue) {\n initialValues[inputKeyPrefix] = defaultValue;\n }\n }\n });\n }\n\n if (requestBody) {\n const contentType = getRequestBodyContentType(apiReferenceData, selectedContentTypeIndex);\n if (contentType) {\n const bodySchema = requestBody.content[contentType]?.schema;\n const bodyDefault = getSchemaDefault(bodySchema);\n if (bodyDefault) {\n initialValues[`${apiPlaygroundInputKeys.body}`] = bodyDefault;\n } else if (isSchemaObject(bodySchema)) {\n const bodyDefaults = getBodyDefaultsFromSchema(bodySchema);\n initialValues = { ...initialValues, ...bodyDefaults };\n }\n }\n }\n }\n // TODO - Api Playground Refactor: check merge with input behavior\n // TODO - Api Playground Refactor: user info overrides\n return initialValues;\n};\n"],"names":["useInitializeInputs","apiReferenceData","selectedBaseUrlIndex","selectedExampleIndex","selectedRequestBodyContentTypeIndex","previousPathnameRef","useRef","reset","initialize","getApiPlaygroundInputs","inputs","usePlaygroundInputsStore","hasInitializedRef","useEffect","currentPathname","selectedSecurityOptionIndex","initialValues","getInitialPlaygroundValues","selectedContentTypeIndex","prefillExamplesEnabled","_a","prefillExample","_b","serverVariables","_d","_c","securityOptions","_e","securityOption","parameters","_f","requestBody","_g","name","variable","inputKeyPrefix","apiPlaygroundInputKeys","escapeDots","defaultValue","getSchemaDefault","scheme","schema","parameterSection","mapParamInToPlaygroundInputKey","header","path","query","cookie","getParametersPerSection","parameter","contentType","getRequestBodyContentType","bodySchema","_h","bodyDefault","isSchemaObject","bodyDefaults","getBodyDefaultsFromSchema"],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import { useCallback as j } from "react";
2
+ import { NEXT_PUBLIC as h } from "../../env.js";
3
+ import { usePlaygroundInputsStore as w } from "./usePlaygroundInputsStore.js";
4
+ const J = ({
5
+ apiReferenceData: r,
6
+ baseUrl: n,
7
+ contentType: t = "application/json",
8
+ setResult: s,
9
+ setIsSending: e
10
+ }) => {
11
+ var l, u, y;
12
+ const { getApiPlaygroundInputs: a } = w(), o = a(), d = (l = r.operation) == null ? void 0 : l.disableProxy, c = (u = r.operation) == null ? void 0 : u.path, f = (y = r.operation) == null ? void 0 : y.method;
13
+ return j(async () => {
14
+ if (e(!0), !c || !n || !f || !t || !n) {
15
+ e(!1), s({
16
+ error: !0,
17
+ errorMessage: "Missing required fields to send a playground request"
18
+ }), console.error(
19
+ `Missing some required field to send a playground request:
20
+
21
+ path=${c}
22
+ method=${f}
23
+ contentType=${t}
24
+ baseUrl=${n}`
25
+ );
26
+ return;
27
+ }
28
+ const m = await import("axios").then((i) => i.default), b = O(c, o.path), g = x(P(n, o.server), b), S = A(o.header, t), p = {
29
+ method: f,
30
+ url: g,
31
+ header: S,
32
+ body: o.body,
33
+ cookie: o.cookie,
34
+ query: o.query
35
+ };
36
+ try {
37
+ if (d) {
38
+ const i = await $(p);
39
+ s({
40
+ error: !1,
41
+ response: {
42
+ status: i.status,
43
+ statusText: i.statusText,
44
+ headers: i.headers,
45
+ data: i.data
46
+ }
47
+ });
48
+ } else if (t && t.includes("multipart/form-data")) {
49
+ const i = await E(p);
50
+ s(i);
51
+ } else {
52
+ const { data: i } = await m.post(
53
+ `${h.BASE_PATH}/_mintlify/api/request`,
54
+ p
55
+ );
56
+ s(i);
57
+ }
58
+ } catch (i) {
59
+ s({
60
+ error: !0,
61
+ errorMessage: "unable to complete request"
62
+ }), console.error(i);
63
+ }
64
+ e(!1);
65
+ }, [
66
+ f,
67
+ c,
68
+ e,
69
+ o,
70
+ n,
71
+ t,
72
+ d,
73
+ s
74
+ ]);
75
+ }, O = (r, n) => Object.entries(n).reduce((t, [s, e]) => e == null ? t : t.replace(`{${s}}`, encodeURIComponent(e.toString())), r), P = (r, n) => {
76
+ let t = r;
77
+ return Object.entries(n).forEach(([s, e]) => {
78
+ e && (t = t.replace(`{${s}}`, e));
79
+ }), t;
80
+ }, x = (r, n) => r.replace(/\/$/, "") + "/" + n.replace(/^\//, ""), A = (r, n) => Object.keys(r).some((t) => t.toLowerCase() === "content-type") ? r : {
81
+ ...r,
82
+ "content-type": n
83
+ }, $ = async (r) => {
84
+ const n = await import("axios").then((a) => a.default), t = Object.keys(r.header).find(
85
+ (a) => a.toLowerCase() === "content-type"
86
+ );
87
+ let s = r.body, e = r.header;
88
+ if (t != null && t.includes("multipart/form-data")) {
89
+ const { data: a, headers: o } = F(r);
90
+ s = a, e = o;
91
+ }
92
+ return n({
93
+ url: r.url,
94
+ method: r.method,
95
+ params: r.query,
96
+ data: s,
97
+ headers: e,
98
+ // prevent axios from adding [] after array query params
99
+ paramsSerializer: {
100
+ indexes: null
101
+ },
102
+ responseType: "arraybuffer",
103
+ // prevent axios from erroring on bad status codes
104
+ validateStatus: () => !0,
105
+ // prevent axios from parsing json, losing whitespace information, and using default utf-8 encoding
106
+ // we can't use `responseEncoding` as it's ignored client-side
107
+ transformResponse: (a) => Buffer.from(a).toString("base64")
108
+ });
109
+ }, E = async (r) => {
110
+ const n = await import("axios").then((e) => e.default), t = new FormData();
111
+ t.append(
112
+ "requestInfo",
113
+ JSON.stringify({
114
+ method: r.method,
115
+ url: r.url,
116
+ header: r.header,
117
+ query: r.query,
118
+ cookie: r.cookie
119
+ })
120
+ ), typeof r.body == "object" && r.body !== null && Object.entries(r.body).forEach(([e, a]) => {
121
+ a instanceof File ? t.append(e, a) : Array.isArray(a) ? a.forEach((o) => {
122
+ o instanceof File ? t.append(e, o) : o != null && t.append(e, typeof o == "object" ? JSON.stringify(o) : o.toString());
123
+ }) : a != null && t.append(e, typeof a == "object" ? JSON.stringify(a) : a.toString());
124
+ });
125
+ const { data: s } = await n.post(
126
+ `${h.BASE_PATH}/_mintlify/api/file-request`,
127
+ t
128
+ );
129
+ return s;
130
+ }, F = (r) => {
131
+ var s;
132
+ let n = r.body;
133
+ const t = r.header;
134
+ if ((s = t["content-type"]) != null && s.includes("multipart/form-data")) {
135
+ const e = new FormData();
136
+ typeof n == "object" && n !== null && (Object.entries(n).forEach(([a, o]) => {
137
+ o instanceof File ? e.append(a, o) : Array.isArray(o) ? o.forEach((d) => {
138
+ d instanceof File ? e.append(a, d) : d != null && e.append(
139
+ a,
140
+ typeof d == "object" ? JSON.stringify(d) : d.toString()
141
+ );
142
+ }) : o != null && e.append(
143
+ a,
144
+ typeof o == "object" ? JSON.stringify(o) : o.toString()
145
+ );
146
+ }), n = e, delete t["content-type"]);
147
+ }
148
+ return { data: n, headers: t };
149
+ };
150
+ export {
151
+ O as addPathParams,
152
+ P as addServerVariables,
153
+ x as joinWithSingleSlash,
154
+ J as useSendPlaygroundRequest
155
+ };
156
+ //# sourceMappingURL=useSendPlaygroundRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSendPlaygroundRequest.js","sources":["../../../src/api-playground-2/hooks/useSendPlaygroundRequest.ts"],"sourcesContent":["'use client';\n\nimport { ApiPlaygroundResultType } from '@mintlify/models';\nimport { HttpMethod } from '@mintlify/validation';\nimport { AxiosResponse } from 'axios';\nimport { useCallback } from 'react';\nimport { NEXT_PUBLIC } from '@/env';\n\n\nimport { ApiReferenceDataV2 } from '../types';\nimport { usePlaygroundInputsStore } from './usePlaygroundInputsStore';\n\nexport type UseSendPlaygroundRequestProps = {\n apiReferenceData: ApiReferenceDataV2;\n baseUrl: string | undefined;\n contentType: string | undefined;\n setResult: (result: ApiPlaygroundResultType) => void;\n setIsSending: (isSending: boolean) => void;\n};\n\nexport type RequestInfo = {\n method: HttpMethod;\n url: string;\n header: Record<string, unknown>;\n query: Record<string, unknown>;\n cookie: Record<string, unknown>;\n body: unknown;\n};\n\nexport const useSendPlaygroundRequest = ({\n apiReferenceData,\n baseUrl,\n contentType = 'application/json',\n setResult,\n setIsSending,\n}: UseSendPlaygroundRequestProps) => {\n // replace with msft analytics \n const { getApiPlaygroundInputs } = usePlaygroundInputsStore();\n const inputs = getApiPlaygroundInputs();\n\n const disableProxy = apiReferenceData.operation?.disableProxy;\n const path = apiReferenceData.operation?.path;\n const method = apiReferenceData.operation?.method;\n\n return useCallback(async () => {\n setIsSending(true);\n if (!path || !baseUrl || !method || !contentType || !baseUrl) {\n setIsSending(false);\n setResult({\n error: true,\n errorMessage: 'Missing required fields to send a playground request',\n });\n console.error(\n `Missing some required field to send a playground request:\\n\\npath=${path}\\nmethod=${method}\\ncontentType=${contentType}\\nbaseUrl=${baseUrl}`\n );\n return;\n }\n const axios = await import('axios').then((x) => x.default);\n\n const pathWithInputs = addPathParams(path, inputs.path);\n\n const url = joinWithSingleSlash(addServerVariables(baseUrl, inputs.server), pathWithInputs);\n\n const headers = addContentType(inputs.header, contentType);\n\n const request: RequestInfo = {\n method,\n url,\n header: headers,\n body: inputs.body,\n cookie: inputs.cookie,\n query: inputs.query,\n };\n\n try {\n if (disableProxy) {\n const response = await performDirectRequest(request);\n setResult({\n error: false,\n response: {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data: response.data,\n },\n });\n } else {\n if (contentType && contentType.includes('multipart/form-data')) {\n const data = await performFileRequest(request);\n\n setResult(data);\n } else {\n const { data } = await axios.post<unknown, AxiosResponse<ApiPlaygroundResultType>>(\n `${NEXT_PUBLIC.BASE_PATH}/_mintlify/api/request`,\n request\n );\n setResult(data);\n }\n }\n } catch (err) {\n setResult({\n error: true,\n errorMessage: 'unable to complete request',\n });\n console.error(err);\n }\n setIsSending(false);\n }, [\n method,\n path,\n setIsSending,\n inputs,\n baseUrl,\n contentType,\n disableProxy,\n setResult,\n ]);\n};\n\nexport const addPathParams = (path: string, pathInputs: Record<string, unknown>) => {\n return Object.entries(pathInputs).reduce((path, [inputName, inputValue]) => {\n if (inputValue == undefined) return path;\n return path.replace(`{${inputName}}`, encodeURIComponent(inputValue.toString()));\n }, path);\n};\n\nexport const addServerVariables = (baseUrl: string, variables: Record<string, string>): string => {\n let url = baseUrl;\n Object.entries(variables).forEach(([key, input]) => {\n if (input) url = url.replace(`{${key}}`, input);\n });\n return url;\n};\n\nexport const joinWithSingleSlash = (baseUrl: string, path: string): string => {\n // remove the last slash of the baseUrl and the first slash of the path, and join with slash\n return baseUrl.replace(/\\/$/, '') + '/' + path.replace(/^\\//, '');\n};\n\nconst addContentType = (headers: Record<string, unknown>, contentType: string) => {\n if (Object.keys(headers).some((name) => name.toLowerCase() === 'content-type')) {\n return headers;\n }\n\n return {\n ...headers,\n ['content-type']: contentType,\n };\n};\n\nconst performDirectRequest = async (request: RequestInfo) => {\n const axios = await import('axios').then((it) => it.default);\n\n const contentType = Object.keys(request.header).find(\n (key) => key.toLowerCase() === 'content-type'\n );\n let data = request.body;\n \n let headers = request.header as Record<string, string>;\n if (contentType?.includes('multipart/form-data')) {\n const { data: formData, headers: formHeaders } = handleFormData(request);\n data = formData;\n headers = formHeaders;\n }\n\n return axios({\n url: request.url,\n method: request.method,\n params: request.query,\n data,\n headers,\n // prevent axios from adding [] after array query params\n paramsSerializer: {\n indexes: null,\n },\n responseType: 'arraybuffer',\n // prevent axios from erroring on bad status codes\n validateStatus: () => true,\n // prevent axios from parsing json, losing whitespace information, and using default utf-8 encoding\n // we can't use `responseEncoding` as it's ignored client-side\n transformResponse: (data) => {\n return Buffer.from(data).toString('base64');\n },\n });\n};\n\nconst performFileRequest = async (request: RequestInfo) => {\n const axios = await import('axios').then((it) => it.default);\n const formData = new FormData();\n formData.append(\n 'requestInfo',\n JSON.stringify({\n method: request.method,\n url: request.url,\n header: request.header,\n query: request.query,\n cookie: request.cookie,\n })\n );\n if (typeof request.body === 'object' && request.body !== null) {\n Object.entries(request.body).forEach(([key, value]) => {\n if (value instanceof File) {\n formData.append(key, value);\n } else if (Array.isArray(value)) {\n value.forEach((item) => {\n if (item instanceof File) {\n formData.append(key, item);\n } else if (item !== undefined && item !== null) {\n formData.append(key, typeof item === 'object' ? JSON.stringify(item) : item.toString());\n }\n });\n } else if (value !== undefined && value !== null) {\n formData.append(key, typeof value === 'object' ? JSON.stringify(value) : value.toString());\n }\n });\n }\n\n const { data } = await axios.post<unknown, AxiosResponse<ApiPlaygroundResultType>>(\n `${NEXT_PUBLIC.BASE_PATH}/_mintlify/api/file-request`,\n formData\n );\n return data;\n};\n\nconst handleFormData = (request: RequestInfo) => {\n let data = request.body;\n \n const headers = request.header as Record<string, string>;\n\n if (headers['content-type']?.includes('multipart/form-data')) {\n const formData = new FormData();\n if (typeof data === 'object' && data !== null) {\n Object.entries(data).forEach(([key, value]) => {\n if (value instanceof File) {\n formData.append(key, value);\n } else if (Array.isArray(value)) {\n value.forEach((item) => {\n if (item instanceof File) {\n formData.append(key, item);\n } else if (item !== undefined && item !== null) {\n formData.append(\n key,\n typeof item === 'object' ? JSON.stringify(item) : item.toString()\n );\n }\n });\n } else if (value !== undefined && value !== null) {\n formData.append(\n key,\n typeof value === 'object' ? JSON.stringify(value) : value.toString()\n );\n }\n });\n data = formData;\n delete headers['content-type'];\n }\n }\n return { data, headers };\n};\n"],"names":["useSendPlaygroundRequest","apiReferenceData","baseUrl","contentType","setResult","setIsSending","getApiPlaygroundInputs","usePlaygroundInputsStore","inputs","disableProxy","_a","path","_b","method","_c","useCallback","axios","x","pathWithInputs","addPathParams","url","joinWithSingleSlash","addServerVariables","headers","addContentType","request","response","performDirectRequest","data","performFileRequest","NEXT_PUBLIC","err","pathInputs","inputName","inputValue","variables","key","input","name","it","formData","formHeaders","handleFormData","value","item"],"mappings":"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"}