@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.
- package/dist/api-playground/ApiPlayground/Request/BodySection.js +65 -0
- package/dist/api-playground/ApiPlayground/Request/BodySection.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/ParameterSection.js +33 -0
- package/dist/api-playground/ApiPlayground/Request/ParameterSection.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/PlaygroundModal.js +201 -0
- package/dist/api-playground/ApiPlayground/Request/PlaygroundModal.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/SecuritySection.js +147 -0
- package/dist/api-playground/ApiPlayground/Request/SecuritySection.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/ServerSection.js +31 -0
- package/dist/api-playground/ApiPlayground/Request/ServerSection.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/index.js +44 -0
- package/dist/api-playground/ApiPlayground/Request/index.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/ArrayInput.js +94 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/ArrayInput.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/DifferentiatedInput.js +91 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/DifferentiatedInput.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/FileInput.js +63 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/FileInput.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/NullInput.js +34 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/NullInput.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/NumberInput.js +62 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/NumberInput.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/ObjectChildren.js +110 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/ObjectChildren.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/ObjectInput.js +88 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/ObjectInput.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/RecursiveInput.js +62 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/RecursiveInput.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/SelectInput.js +55 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/SelectInput.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/StringInput.js +68 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/StringInput.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/TextInput.js +45 -0
- package/dist/api-playground/ApiPlayground/Request/inputs/TextInput.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Response/CopyFileToClipboardButton.js +7 -0
- package/dist/api-playground/ApiPlayground/Response/CopyFileToClipboardButton.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Response/DownloadFileButton.js +45 -0
- package/dist/api-playground/ApiPlayground/Response/DownloadFileButton.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Response/ResponseBody/CodeResponseContent.js +54 -0
- package/dist/api-playground/ApiPlayground/Response/ResponseBody/CodeResponseContent.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Response/ResponseBody/index.js +15 -0
- package/dist/api-playground/ApiPlayground/Response/ResponseBody/index.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Response/ResponseError.js +14 -0
- package/dist/api-playground/ApiPlayground/Response/ResponseError.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Response/ResponseHeaders.js +12 -0
- package/dist/api-playground/ApiPlayground/Response/ResponseHeaders.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Response/ResponsePlaceholder.js +20 -0
- package/dist/api-playground/ApiPlayground/Response/ResponsePlaceholder.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Response/ResponseTable.js +21 -0
- package/dist/api-playground/ApiPlayground/Response/ResponseTable.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Response/ResponseTopbar.js +93 -0
- package/dist/api-playground/ApiPlayground/Response/ResponseTopbar.js.map +1 -0
- package/dist/api-playground/ApiPlayground/Response/index.js +80 -0
- package/dist/api-playground/ApiPlayground/Response/index.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/AdditionalItemButton.js +24 -0
- package/dist/api-playground/ApiPlayground/components/AdditionalItemButton.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/AdditionalPropertyButton.js +45 -0
- package/dist/api-playground/ApiPlayground/components/AdditionalPropertyButton.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/ArrayCount.js +18 -0
- package/dist/api-playground/ApiPlayground/components/ArrayCount.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/BasePathSelector.js +40 -0
- package/dist/api-playground/ApiPlayground/components/BasePathSelector.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/EndpointsMenu.js +44 -0
- package/dist/api-playground/ApiPlayground/components/EndpointsMenu.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/EndpointsMenuLink.js +45 -0
- package/dist/api-playground/ApiPlayground/components/EndpointsMenuLink.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/EndpointsMenuSearch.js +39 -0
- package/dist/api-playground/ApiPlayground/components/EndpointsMenuSearch.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/InputContainer.js +129 -0
- package/dist/api-playground/ApiPlayground/components/InputContainer.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/InputSectionContainer.js +60 -0
- package/dist/api-playground/ApiPlayground/components/InputSectionContainer.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/ModalHeader.js +16 -0
- package/dist/api-playground/ApiPlayground/components/ModalHeader.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/ObjectExpandButton.js +29 -0
- package/dist/api-playground/ApiPlayground/components/ObjectExpandButton.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/ParamFieldWrapper.js +20 -0
- package/dist/api-playground/ApiPlayground/components/ParamFieldWrapper.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/PathHeader.js +163 -0
- package/dist/api-playground/ApiPlayground/components/PathHeader.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/PlaygroundModalWrapper.js +59 -0
- package/dist/api-playground/ApiPlayground/components/PlaygroundModalWrapper.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/PrettyPath.js +50 -0
- package/dist/api-playground/ApiPlayground/components/PrettyPath.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/SendPill.js +40 -0
- package/dist/api-playground/ApiPlayground/components/SendPill.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/TrashButton.js +27 -0
- package/dist/api-playground/ApiPlayground/components/TrashButton.js.map +1 -0
- package/dist/api-playground/ApiPlayground/components/TypeDropdown.js +53 -0
- package/dist/api-playground/ApiPlayground/components/TypeDropdown.js.map +1 -0
- package/dist/api-playground/ApiPlayground/index.js +68 -0
- package/dist/api-playground/ApiPlayground/index.js.map +1 -0
- package/dist/api-playground/EndpointFields/ParamFields/ExampleDescription.js +51 -0
- package/dist/api-playground/EndpointFields/ParamFields/ExampleDescription.js.map +1 -0
- package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/Enum.js +20 -0
- package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/Enum.js.map +1 -0
- package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/NumberMetadata.js +19 -0
- package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/NumberMetadata.js.map +1 -0
- package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/StringMetadata.js +29 -0
- package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/StringMetadata.js.map +1 -0
- package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/index.js +6 -0
- package/dist/api-playground/EndpointFields/ParamFields/PrimitiveParamField/index.js.map +1 -0
- package/dist/api-playground/EndpointFields/ParamFields/RecursiveParamField.js +13 -0
- package/dist/api-playground/EndpointFields/ParamFields/RecursiveParamField.js.map +1 -0
- package/dist/api-playground/EndpointFields/components/Description.js +13 -0
- package/dist/api-playground/EndpointFields/components/Description.js.map +1 -0
- package/dist/api-playground/EndpointFields/components/OneOfDropdown.js +20 -0
- package/dist/api-playground/EndpointFields/components/OneOfDropdown.js.map +1 -0
- package/dist/api-playground/EndpointFields/components/OptionDropdown.js +36 -0
- package/dist/api-playground/EndpointFields/components/OptionDropdown.js.map +1 -0
- package/dist/api-playground/EndpointFields/components/SectionHeading.js +44 -0
- package/dist/api-playground/EndpointFields/components/SectionHeading.js.map +1 -0
- package/dist/api-playground/EndpointFields/index.js +7 -0
- package/dist/api-playground/EndpointFields/index.js.map +1 -0
- package/dist/api-playground-2/Api.js +13 -0
- package/dist/api-playground-2/Api.js.map +1 -0
- package/dist/api-playground-2/ApiExamples.js +19 -18
- package/dist/api-playground-2/ApiExamples.js.map +1 -1
- package/dist/api-playground-2/ApiFields.js +253 -0
- package/dist/api-playground-2/ApiFields.js.map +1 -0
- package/dist/api-playground-2/EndpointHeader.js +52 -0
- package/dist/api-playground-2/EndpointHeader.js.map +1 -0
- package/dist/api-playground-2/OperationPage.js +101 -0
- package/dist/api-playground-2/OperationPage.js.map +1 -0
- package/dist/api-playground-2/Playground.js +136 -0
- package/dist/api-playground-2/Playground.js.map +1 -0
- package/dist/api-playground-2/SchemaPage.js +14 -0
- package/dist/api-playground-2/SchemaPage.js.map +1 -0
- package/dist/api-playground-2/components/EndpointFields/EndpointSecurity.js +88 -0
- package/dist/api-playground-2/components/EndpointFields/EndpointSecurity.js.map +1 -0
- package/dist/api-playground-2/components/EndpointFields/fields/Enum.js +16 -0
- package/dist/api-playground-2/components/EndpointFields/fields/Enum.js.map +1 -0
- package/dist/api-playground-2/components/EndpointFields/fields/NumberMetadata.js +21 -0
- package/dist/api-playground-2/components/EndpointFields/fields/NumberMetadata.js.map +1 -0
- package/dist/api-playground-2/components/EndpointFields/fields/PrimitiveParamField.js +57 -0
- package/dist/api-playground-2/components/EndpointFields/fields/PrimitiveParamField.js.map +1 -0
- package/dist/api-playground-2/components/EndpointFields/fields/SimpleArrayParamField.js +90 -0
- package/dist/api-playground-2/components/EndpointFields/fields/SimpleArrayParamField.js.map +1 -0
- package/dist/api-playground-2/components/EndpointFields/fields/SimpleObjectParamField.js +122 -0
- package/dist/api-playground-2/components/EndpointFields/fields/SimpleObjectParamField.js.map +1 -0
- package/dist/api-playground-2/components/EndpointFields/fields/SimplePrimitiveParamField.js +75 -0
- package/dist/api-playground-2/components/EndpointFields/fields/SimplePrimitiveParamField.js.map +1 -0
- package/dist/api-playground-2/components/EndpointFields/fields/SimpleSchemaField.js +253 -0
- package/dist/api-playground-2/components/EndpointFields/fields/SimpleSchemaField.js.map +1 -0
- package/dist/api-playground-2/components/EndpointFields/fields/StringMetadata.js +28 -0
- package/dist/api-playground-2/components/EndpointFields/fields/StringMetadata.js.map +1 -0
- package/dist/api-playground-2/components/Example/GeneratedRequestExample.js +101 -114
- package/dist/api-playground-2/components/Example/GeneratedRequestExample.js.map +1 -1
- package/dist/api-playground-2/components/Request/BodySection.js +41 -0
- package/dist/api-playground-2/components/Request/BodySection.js.map +1 -0
- package/dist/api-playground-2/components/Request/InputSectionContainer.js +66 -0
- package/dist/api-playground-2/components/Request/InputSectionContainer.js.map +1 -0
- package/dist/api-playground-2/components/Request/ParameterSection.js +36 -0
- package/dist/api-playground-2/components/Request/ParameterSection.js.map +1 -0
- package/dist/api-playground-2/components/Request/SecuritySection.js +55 -0
- package/dist/api-playground-2/components/Request/SecuritySection.js.map +1 -0
- package/dist/api-playground-2/components/Request/ServerSection.js +33 -0
- package/dist/api-playground-2/components/Request/ServerSection.js.map +1 -0
- package/dist/api-playground-2/components/Request/inputs/ArrayInput.js +55 -0
- package/dist/api-playground-2/components/Request/inputs/ArrayInput.js.map +1 -0
- package/dist/api-playground-2/components/Request/inputs/DifferentiatedInput.js +48 -0
- package/dist/api-playground-2/components/Request/inputs/DifferentiatedInput.js.map +1 -0
- package/dist/api-playground-2/components/Request/inputs/FileInput.js +43 -0
- package/dist/api-playground-2/components/Request/inputs/FileInput.js.map +1 -0
- package/dist/api-playground-2/components/Request/inputs/InputContainer.js +127 -0
- package/dist/api-playground-2/components/Request/inputs/InputContainer.js.map +1 -0
- package/dist/api-playground-2/components/Request/inputs/NullInput.js +15 -0
- package/dist/api-playground-2/components/Request/inputs/NullInput.js.map +1 -0
- package/dist/api-playground-2/components/Request/inputs/NumberInput.js +46 -0
- package/dist/api-playground-2/components/Request/inputs/NumberInput.js.map +1 -0
- package/dist/api-playground-2/components/Request/inputs/ObjectInput.js +104 -0
- package/dist/api-playground-2/components/Request/inputs/ObjectInput.js.map +1 -0
- package/dist/api-playground-2/components/Request/inputs/OneOfInput.js +77 -0
- package/dist/api-playground-2/components/Request/inputs/OneOfInput.js.map +1 -0
- package/dist/api-playground-2/components/Request/inputs/SelectInput.js +54 -0
- package/dist/api-playground-2/components/Request/inputs/SelectInput.js.map +1 -0
- package/dist/api-playground-2/components/Request/inputs/StringInput.js +44 -0
- package/dist/api-playground-2/components/Request/inputs/StringInput.js.map +1 -0
- package/dist/api-playground-2/components/Request/inputs/TextInput.js +29 -0
- package/dist/api-playground-2/components/Request/inputs/TextInput.js.map +1 -0
- package/dist/api-playground-2/components/TypeDropdown.js +48 -0
- package/dist/api-playground-2/components/TypeDropdown.js.map +1 -0
- package/dist/api-playground-2/constants/index.js +6 -4
- package/dist/api-playground-2/constants/index.js.map +1 -1
- package/dist/api-playground-2/contexts/ApiPlaygroundContext.js +11 -0
- package/dist/api-playground-2/contexts/ApiPlaygroundContext.js.map +1 -0
- package/dist/api-playground-2/generators/generateInteractiveCodeSample.js +6 -6
- package/dist/api-playground-2/generators/generateInteractiveCodeSample.js.map +1 -1
- package/dist/api-playground-2/generators/generateSnippet.js +187 -36
- package/dist/api-playground-2/generators/generateSnippet.js.map +1 -1
- package/dist/api-playground-2/hooks/useCopyPathWithInputs.js +14 -0
- package/dist/api-playground-2/hooks/useCopyPathWithInputs.js.map +1 -0
- package/dist/api-playground-2/hooks/useInitializeInputs.js +101 -0
- package/dist/api-playground-2/hooks/useInitializeInputs.js.map +1 -0
- package/dist/api-playground-2/hooks/useSendPlaygroundRequest.js +156 -0
- package/dist/api-playground-2/hooks/useSendPlaygroundRequest.js.map +1 -0
- package/dist/api-playground-2/schemaGraph/addApiReferenceDataFromMdxAndDocsConfig.js +57 -0
- package/dist/api-playground-2/schemaGraph/addApiReferenceDataFromMdxAndDocsConfig.js.map +1 -0
- package/dist/api-playground-2/schemaGraph/processExamples.js +41 -8
- package/dist/api-playground-2/schemaGraph/processExamples.js.map +1 -1
- package/dist/api-playground-2/schemaGraph/processSecurityOptions.js +107 -0
- package/dist/api-playground-2/schemaGraph/processSecurityOptions.js.map +1 -0
- package/dist/api-playground-2/schemaGraph/utils.js +195 -43
- package/dist/api-playground-2/schemaGraph/utils.js.map +1 -1
- package/dist/api-playground-2/types/index.js +118 -0
- package/dist/api-playground-2/types/index.js.map +1 -0
- package/dist/common/guards.js +32 -6
- package/dist/common/guards.js.map +1 -1
- package/dist/common/potentiallyParseOpenApiString.js +25 -0
- package/dist/common/potentiallyParseOpenApiString.js.map +1 -0
- package/dist/common/replaceSlashIndex.js +7 -0
- package/dist/common/replaceSlashIndex.js.map +1 -0
- package/dist/common/slugToTitle.js +11 -0
- package/dist/common/slugToTitle.js.map +1 -0
- package/dist/components/Api/Expandable.js +119 -0
- package/dist/components/Api/Expandable.js.map +1 -0
- package/dist/components/Api/Markdown.js +66 -0
- package/dist/components/Api/Markdown.js.map +1 -0
- package/dist/components/Api/Param.js +191 -0
- package/dist/components/Api/Param.js.map +1 -0
- package/dist/components/content-components/code-block.js +68 -61
- package/dist/components/content-components/code-block.js.map +1 -1
- package/dist/components/content-components/code-group.js +36 -25
- package/dist/components/content-components/code-group.js.map +1 -1
- package/dist/components/content-components/getNodeText.js +5 -0
- package/dist/components/content-components/getNodeText.js.map +1 -0
- package/dist/constants/index.js +5 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/zIndex.js +7 -0
- package/dist/constants/zIndex.js.map +1 -0
- package/dist/contexts/ApiPlaygroundInputsContext.js +18 -0
- package/dist/contexts/ApiPlaygroundInputsContext.js.map +1 -0
- package/dist/contexts/ConfigContext.js +2 -3
- package/dist/contexts/ConfigContext.js.map +1 -1
- package/dist/contexts/EndpointLocationContext.js +18 -0
- package/dist/contexts/EndpointLocationContext.js.map +1 -0
- package/dist/contexts/MDXContentContext.js +19 -0
- package/dist/contexts/MDXContentContext.js.map +1 -0
- package/dist/env.js +6 -1
- package/dist/env.js.map +1 -1
- package/dist/hooks/useApiPlaygroundInputs.js +7 -0
- package/dist/hooks/useApiPlaygroundInputs.js.map +1 -0
- package/dist/hooks/useApiPlaygroundPrefillExamples.js +40 -0
- package/dist/hooks/useApiPlaygroundPrefillExamples.js.map +1 -0
- package/dist/hooks/useBaseUrlOptions.js +19 -0
- package/dist/hooks/useBaseUrlOptions.js.map +1 -0
- package/dist/hooks/useCheckHash.js +18 -0
- package/dist/hooks/useCheckHash.js.map +1 -0
- package/dist/hooks/useComponentSchemas.js +10 -0
- package/dist/hooks/useComponentSchemas.js.map +1 -0
- package/dist/hooks/useCurrentPath.js +17 -0
- package/dist/hooks/useCurrentPath.js.map +1 -0
- package/dist/hooks/useEndpoint.js +3 -3
- package/dist/hooks/useExpandableMemory.js +46 -0
- package/dist/hooks/useExpandableMemory.js.map +1 -0
- package/dist/hooks/useGenerateNextAdditionalProperties.js +12 -0
- package/dist/hooks/useGenerateNextAdditionalProperties.js.map +1 -0
- package/dist/hooks/useGenerateNextItems.js +12 -0
- package/dist/hooks/useGenerateNextItems.js.map +1 -0
- package/dist/hooks/useGenerateNextProperties.js +12 -0
- package/dist/hooks/useGenerateNextProperties.js.map +1 -0
- package/dist/hooks/useKeyboardShortcut.js +26 -0
- package/dist/hooks/useKeyboardShortcut.js.map +1 -0
- package/dist/hooks/useMDXContent.js +7 -0
- package/dist/hooks/useMDXContent.js.map +1 -0
- package/dist/hooks/useMDXContentController/useApiPlaygroundInputs.js +10 -0
- package/dist/hooks/useMDXContentController/useApiPlaygroundInputs.js.map +1 -0
- package/dist/hooks/useMDXContentController/useMDXContentCallbacks/useSetApiBaseIndexCallback.js +16 -0
- package/dist/hooks/useMDXContentController/useMDXContentCallbacks/useSetApiBaseIndexCallback.js.map +1 -0
- package/dist/hooks/useMDXContentController/useMDXContentCallbacks/useSetApiPlaygroundInputsCallback.js +16 -0
- package/dist/hooks/useMDXContentController/useMDXContentCallbacks/useSetApiPlaygroundInputsCallback.js.map +1 -0
- package/dist/hooks/usePlaygroundSchemaOptions.js +43 -0
- package/dist/hooks/usePlaygroundSchemaOptions.js.map +1 -0
- package/dist/hooks/usePrefilledInputs/index.js +66 -0
- package/dist/hooks/usePrefilledInputs/index.js.map +1 -0
- package/dist/hooks/usePrefilledInputs/storedServerVariables.js +30 -0
- package/dist/hooks/usePrefilledInputs/storedServerVariables.js.map +1 -0
- package/dist/hooks/useSecurityOption.js +11 -0
- package/dist/hooks/useSecurityOption.js.map +1 -0
- package/dist/hooks/useSendPlaygroundRequest.js +146 -15
- package/dist/hooks/useSendPlaygroundRequest.js.map +1 -1
- package/dist/hooks/useSetDefaultValue.js +64 -0
- package/dist/hooks/useSetDefaultValue.js.map +1 -0
- package/dist/index.d.ts +281 -0
- package/dist/index.js +143 -108
- package/dist/index.js.map +1 -1
- package/dist/openapi/filterEnums.js +21 -0
- package/dist/openapi/filterEnums.js.map +1 -0
- package/dist/openapi/generateNextAdditionalProperties.js +8 -0
- package/dist/openapi/generateNextAdditionalProperties.js.map +1 -0
- package/dist/openapi/generateNextItems.js +8 -0
- package/dist/openapi/generateNextItems.js.map +1 -0
- package/dist/openapi/generateNextProperties.js +24 -0
- package/dist/openapi/generateNextProperties.js.map +1 -0
- package/dist/openapi/generateOptionLabels.js +21 -0
- package/dist/openapi/generateOptionLabels.js.map +1 -0
- package/dist/openapi/generateSimpleLabels.js +5 -0
- package/dist/openapi/generateSimpleLabels.js.map +1 -0
- package/dist/openapi/generateTypeStringFromSchema.js +34 -0
- package/dist/openapi/generateTypeStringFromSchema.js.map +1 -0
- package/dist/openapi/getAuthFilteredSchemaArray.js +19 -0
- package/dist/openapi/getAuthFilteredSchemaArray.js.map +1 -0
- package/dist/paths/isEqualIgnoringLeadingSlash.js +22 -0
- package/dist/paths/isEqualIgnoringLeadingSlash.js.map +1 -0
- package/dist/paths/optionallyRemoveLeadingSlash.js +7 -0
- package/dist/paths/optionallyRemoveLeadingSlash.js.map +1 -0
- package/dist/paths/optionallyRemoveTrailingSlash.js +7 -0
- package/dist/paths/optionallyRemoveTrailingSlash.js.map +1 -0
- package/dist/utils/api-playground/defaults.js +16 -0
- package/dist/utils/api-playground/defaults.js.map +1 -0
- package/dist/utils/api-playground/paramFieldDefaults.js +11 -0
- package/dist/utils/api-playground/paramFieldDefaults.js.map +1 -0
- package/dist/utils/api-reference/getFilteredSecurityOptions.js +5 -0
- package/dist/utils/api-reference/getFilteredSecurityOptions.js.map +1 -0
- package/dist/utils/api-reference/getNextPropertiesByType.js +6 -0
- package/dist/utils/api-reference/getNextPropertiesByType.js.map +1 -0
- package/dist/utils/containsMarkdownTable.js +5 -0
- package/dist/utils/containsMarkdownTable.js.map +1 -0
- package/dist/utils/copyToClipboard.js +12 -0
- package/dist/utils/copyToClipboard.js.map +1 -0
- package/dist/utils/decodeSlug.js +8 -0
- package/dist/utils/decodeSlug.js.map +1 -0
- package/dist/utils/flattenObject.js +11 -0
- package/dist/utils/flattenObject.js.map +1 -0
- package/dist/utils/formatJSON.js +39 -0
- package/dist/utils/formatJSON.js.map +1 -0
- package/dist/utils/optionallyAddLeadingSlash.js +7 -0
- package/dist/utils/optionallyAddLeadingSlash.js.map +1 -0
- package/dist/utils/scrollElementIntoView.js +21 -0
- package/dist/utils/scrollElementIntoView.js.map +1 -0
- 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] =
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
|
12
|
-
const
|
|
13
|
-
return
|
|
14
|
-
}),
|
|
15
|
-
const
|
|
16
|
-
if (
|
|
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 (
|
|
19
|
-
return `${encodeURIComponent(
|
|
20
|
-
const
|
|
21
|
-
return
|
|
22
|
-
}),
|
|
23
|
-
...
|
|
24
|
-
url:
|
|
25
|
-
postData:
|
|
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
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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":";;AAYA,MAAMA,EAAgB;AAAA,EAGpB,YAAYC,GAAc;AACxB,SAAK,UAAUA;AAAA,EACjB;AAAA,EAEA,QAAQC,GAAkBC,GAAyB;AACjD,UAAM,EAAE,QAAAC,GAAQ,KAAAC,GAAK,SAAAC,IAAU,CAAA,GAAI,UAAAC,EAAA,IAAa,KAAK,SAC/CC,IAAqC,CAAA;AAC3C,IAAAF,EAAQ,QAAQ,CAACG,MAAW;AAC1B,MAAIA,EAAE,QAAQA,EAAE,YAAkBA,EAAE,IAAI,IAAIA,EAAE;AAAA,IAChD,CAAC;AAED,UAAMC,KAAOH,KAAA,gBAAAA,EAAU,SAAQ;AAE/B,YAAQL,GAAA;AAAA,MACN,KAAK;AACH,eAAO,KAAK,aAAaE,GAAQC,GAAKG,GAAYE,CAAI;AAAA,MACxD,KAAK;AACH,eAAO,KAAK,eAAeN,GAAQC,GAAKG,GAAYE,GAAMP,CAAM;AAAA,MAClE,KAAK;AACH,eAAO,KAAK,mBAAmBC,GAAQC,GAAKG,GAAYE,GAAMP,CAAM;AAAA,MACtE,KAAK;AACH,eAAO,KAAK,YAAYC,GAAQC,GAAKG,GAAYE,CAAI;AAAA,MACvD,KAAK;AACH,eAAO,KAAK,WAAWN,GAAQC,GAAKG,GAAYE,CAAI;AAAA,MACtD,KAAK;AACH,eAAO,KAAK,aAAaN,GAAQC,GAAKG,GAAYE,CAAI;AAAA,MACxD,KAAK;AACH,eAAO,KAAK,aAAaN,GAAQC,GAAKG,GAAYE,CAAI;AAAA,MACxD;AACE,eAAO,yBAAyBR,CAAM;AAAA,IAAA;AAAA,EAE5C;AAAA,EAEQ,aAAaE,GAAgBC,GAAaC,GAAiCI,GAAsB;AACvG,QAAIC,IAAO,WAAWP,EAAO,YAAA,CAAa,KAAKC,CAAG;AAClD,kBAAO,QAAQC,CAAO,EAAE,QAAQ,CAAC,CAACM,GAAKC,CAAK,MAAM;AAChD,MAAAF,KAAQ;AAAA,QAAcC,CAAG,KAAKC,CAAK;AAAA,IACrC,CAAC,GACGH,MACFC,KAAQ;AAAA,QAAcD,CAAI,MAErBC;AAAA,EACT;AAAA,EAEQ,eAAeP,GAAgBC,GAAaC,GAAiCI,GAAcP,GAAyB;AAC1H,QAAIA,MAAW,YAAY;AACzB,YAAMW,IAAa,KAAK,UAAUR,GAAS,MAAM,CAAC,EAAE,MAAM;AAAA,CAAI,EAAE,KAAK;AAAA,KAAQ,GACvES,IAAUL,IAAO;AAAA,WAAe,KAAK,UAAUA,CAAI,CAAC,KAAK;AAC/D,aAAO;AAAA;AAAA,sBAA0CN,EAAO,aAAa;AAAA,OAAWC,CAAG;AAAA,cAAmBS,CAAU,GAAGC,CAAO;AAAA;AAAA;AAAA;AAAA,IAC5H;AACA,WAAO,wDAAwDZ,CAAM;AAAA,EACvE;AAAA,EAEQ,mBAAmBC,GAAgBC,GAAaC,GAAiCI,GAAcP,GAAyB;AAC9H,QAAIA,MAAW,SAAS;AACtB,YAAMW,IAAa,KAAK,UAAUR,GAAS,MAAM,CAAC,EAAE,MAAM;AAAA,CAAI,EAAE,IAAI,CAACU,GAAMC,MAAMA,MAAM,IAAID,IAAO,OAAOA,CAAI,EAAE,KAAK;AAAA,CAAI,GAClHE,IAAUR,IAAO;AAAA,UAAc,KAAK,UAAUA,CAAI,CAAC,KAAK;AAC9D,aAAO,UAAUL,CAAG;AAAA,aAAoBD,EAAO,aAAa;AAAA,aAAkBU,CAAU,GAAGI,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IACpG;AACA,WAAO,6DAA6Df,CAAM;AAAA,EAC5E;AAAA,EAEQ,YAAYC,GAAgBC,GAAaC,GAAiCI,GAAsB;AACtG,UAAMS,IAAe,OAAO,QAAQb,CAAO,EAAE,IAAI,CAAC,CAACc,GAAGC,CAAC,MAAM,MAAMD,CAAC,KAAKC,CAAC,GAAG,EAAE,KAAK;AAAA,CAAK,GACnFN,IAAUL,IAAO;AAAA,2BAA+BA,CAAI,MAAM;AAChE,WAAO;AAAA;AAAA;AAAA;AAAA,oBAA4EL,CAAG;AAAA;AAAA,8BAAsED,EAAO,aAAa;AAAA;AAAA,EAAkCe,CAAY;AAAA,KAAQJ,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAC/O;AAAA,EAEQ,WAAWX,GAAgBC,GAAaC,GAAiCI,GAAsB;AACrG,UAAMY,IAAWZ,IAAO;AAAA,iCAAoC,KAAK,UAAUA,CAAI,CAAC;AAAA,+BAAmCN,EAAO,YAAA,CAAa,OAAOC,CAAG,gBAAgB;AAAA,+BAAkCD,EAAO,YAAA,CAAa,OAAOC,CAAG,WAC3NkB,IAAc,OAAO,QAAQjB,CAAO,EAAE,IAAI,CAAC,CAACc,GAAGC,CAAC,MAAM,qBAAqBD,CAAC,OAAOC,CAAC,IAAI,EAAE,KAAK;AAAA,CAAI;AACzG,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAkGC,CAAQ;AAAA,EAAKC,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EACnI;AAAA,EAEQ,aAAanB,GAAgBC,GAAaC,GAAiCI,GAAsB;AACvG,UAAMa,IAAc,OAAO,QAAQjB,CAAO,EAAE,IAAI,CAAC,CAACc,GAAGC,CAAC,MAAM,oBAAoBD,CAAC,OAAOC,CAAC,IAAI,EAAE,KAAK;AAAA,CAAI,GAClGC,IAAWZ,IAAO,6CAA6C,KAAK,UAAUA,CAAI,CAAC,OAAO,YAAYN,EAAO,YAAA,CAAa;AAChI,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAwQC,CAAG;AAAA,EAAQkB,CAAW;AAAA,UAAaD,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAC5T;AAAA,EAEQ,aAAalB,GAAgBC,GAAaC,GAAiCI,GAAsB;AACvG,UAAMa,IAAc,OAAO,QAAQjB,CAAO,EAAE,IAAI,CAAC,CAACc,GAAGC,CAAC,MAAM,YAAYD,CAAC,SAASC,CAAC,GAAG,EAAE,KAAK;AAAA,CAAI,GAC3FC,IAAWZ,IAAO;AAAA,iBAAoB,KAAK,UAAUA,CAAI,CAAC,KAAK;AACrE,WAAO;AAAA;AAAA;AAAA,mBAAyDL,CAAG;AAAA;AAAA,uBAAsED,EAAO,OAAO,CAAC,EAAE,YAAA,IAAgBA,EAAO,MAAM,CAAC,EAAE,aAAa;AAAA,EAA0BmB,CAAW,GAAGD,CAAQ;AAAA;AAAA;AAAA;AAAA,EACzP;AACF;AAUO,MAAME,IAAkB,CAAC;AAAA,EAC9B,SAAAvB;AAAA,EACA,YAAAwB;AAAA,EACA,kBAAAC;AAAA,EAAA,gBACAC,IAAiBC;AAAAA,EACjB,mBAAAC,IAAoB;AACtB,MAAmD;AACjD,QAAMC,IAAqC,CAAA,GAGrCC,IAAY,cAGZC,IAAc/B,EAAQ,IAAI,QAAQ8B,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,IAAI1C,EAAgB;AAAA,IACtC,GAAGC;AAAA,IACH,KAAKmC;AAAA,IACL,UAAUnC,EAAQ,YAAY,EAAE,UAAU,mBAAA;AAAA,EAAmB,CAC9D;AAED,SAAO0B,EAAe,IAAI,CAACgB,MAAkB;;AAC3C,UAAM,EAAE,UAAAC,GAAU,SAAAC,GAAS,UAAAC,EAAA,IAAaH,GAClC,EAAE,QAAAzC,GAAQ,QAAAC,EAAA,IAAW0C,GACrBE,IAAWL,EAAY,QAAQxC,GAAoBC,CAAM,GAEzD6C,IAAOC,EAAoBnB,IAAYiB,KAAA,gBAAAA,EAAU,eAAc,EAAE;AAEvE,WAAO;AAAA,MACL,UAAUlB,IAAoBe,MAAWM,IAAAxB,EAAiB,cAAjB,gBAAAwB,EAA4B,UAASN;AAAA,MAC9E,MAAAI;AAAA,MACA,UAAAF;AAAA,IAAA;AAAA,EAEJ,CAAC;AACH,GAQMG,IAAsB,CAACE,GAAqCN,MACzD,OAAO,QAAQM,CAAW,EAAE,OAAO,CAACC,GAAK,CAACZ,GAAMH,CAAI,MAClDe,EAAI,QAAQZ,GAAMH,CAAI,GAC5BQ,CAAO;"}
|
|
@@ -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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"}
|