@mintlify/msft-sdk 1.1.22 → 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 +27 -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 +113 -118
- package/dist/api-playground-2/components/Example/GeneratedRequestExample.js.map +1 -1
- package/dist/api-playground-2/components/Example/RequestExample.js +55 -50
- package/dist/api-playground-2/components/Example/RequestExample.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/createBodyData.js +1 -1
- package/dist/api-playground-2/generators/createBodyData.js.map +1 -1
- package/dist/api-playground-2/generators/createHeaders.js +18 -18
- package/dist/api-playground-2/generators/createHeaders.js.map +1 -1
- package/dist/api-playground-2/generators/generateInteractiveCodeSample.js +21 -19
- package/dist/api-playground-2/generators/generateInteractiveCodeSample.js.map +1 -1
- package/dist/api-playground-2/generators/generateRequest.js +26 -25
- package/dist/api-playground-2/generators/generateRequest.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/generators/generateSnippetMap.js +13 -11
- package/dist/api-playground-2/generators/generateSnippetMap.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/usePlaygroundInputsStore.js +24 -13
- package/dist/api-playground-2/hooks/usePlaygroundInputsStore.js.map +1 -1
- 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 +37 -0
- package/dist/common/guards.js.map +1 -0
- 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/components/toc/index.js +4 -4
- package/dist/components/toc/index.js.map +1 -1
- 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/styles.css +1 -1
- 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 +2 -3
|
@@ -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":"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"}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
import { requestExampleLanguages as
|
|
2
|
-
import { toShikiLang as
|
|
3
|
-
import { generateInteractiveCodeSample as
|
|
4
|
-
const
|
|
1
|
+
import { requestExampleLanguages as k } from "@mintlify/models";
|
|
2
|
+
import { toShikiLang as x, shikiLangToDisplayLang as m } from "../../constants/snippetPresets.js";
|
|
3
|
+
import { generateInteractiveCodeSample as v } from "./generateInteractiveCodeSample.js";
|
|
4
|
+
const j = async ({
|
|
5
5
|
codeSamples: t,
|
|
6
6
|
apiReferenceData: c,
|
|
7
7
|
baseUrl: i,
|
|
8
8
|
inputs: e,
|
|
9
9
|
apiPlaygroundMode: f,
|
|
10
10
|
requestExampleLanguages: r,
|
|
11
|
-
requiredOnly: g
|
|
11
|
+
requiredOnly: g,
|
|
12
|
+
selectedSecurityOptionIndex: L
|
|
12
13
|
}) => {
|
|
13
|
-
const
|
|
14
|
+
const d = i && f !== "none" || i && r, s = r ?? [];
|
|
14
15
|
t = t.map((n) => ({
|
|
15
16
|
...n,
|
|
16
|
-
lang:
|
|
17
|
+
lang: x(n.lang)
|
|
17
18
|
})), r === void 0 && (t.forEach((n) => {
|
|
18
19
|
s.includes(n.lang) || s.push(n.lang);
|
|
19
|
-
}),
|
|
20
|
+
}), d && k.forEach((n) => {
|
|
20
21
|
s.includes(n) || s.push(n);
|
|
21
22
|
}));
|
|
22
23
|
const h = {};
|
|
@@ -24,13 +25,14 @@ const O = async ({
|
|
|
24
25
|
let o = m[n] ?? n;
|
|
25
26
|
const u = t.filter((a) => a.lang === n), l = h[o] ?? {};
|
|
26
27
|
if (u.length === 0) {
|
|
27
|
-
const a = await
|
|
28
|
+
const a = await v({
|
|
28
29
|
baseUrl: i,
|
|
29
30
|
apiReferenceData: c,
|
|
30
31
|
inputs: e,
|
|
31
32
|
apiPlaygroundMode: f,
|
|
32
33
|
lang: n,
|
|
33
|
-
requiredOnly: g
|
|
34
|
+
requiredOnly: g,
|
|
35
|
+
selectedSecurityOptionIndex: L
|
|
34
36
|
});
|
|
35
37
|
a && E(
|
|
36
38
|
a,
|
|
@@ -63,6 +65,6 @@ const O = async ({
|
|
|
63
65
|
};
|
|
64
66
|
};
|
|
65
67
|
export {
|
|
66
|
-
|
|
68
|
+
j as generateSnippetMap
|
|
67
69
|
};
|
|
68
70
|
//# sourceMappingURL=generateSnippetMap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateSnippetMap.js","sources":["../../../src/api-playground-2/generators/generateSnippetMap.ts"],"sourcesContent":["import {\n ApiPlaygroundDisplayType,\n requestExampleLanguages as defaultRequestExampleLanguages,\n} from '@mintlify/models';\nimport { ApiPlaygroundInputs, CodeSample } from '@mintlify/validation';\n\nimport type { ApiReferenceDataV2 } from '@/api-playground-2/types';\nimport { shikiLangToDisplayLang, toShikiLang } from '@/constants/snippetPresets';\nimport { ExampleCodeSnippet } from '@/types/exampleCodeSnippet';\n\nimport { generateInteractiveCodeSample } from './generateInteractiveCodeSample';\n\n// more or less identical but in all places where we use Endpoint, we use ApiReferenceDataV2 instead\nexport const generateSnippetMap = async ({\n codeSamples,\n apiReferenceData,\n baseUrl,\n inputs,\n apiPlaygroundMode,\n requestExampleLanguages,\n requiredOnly,\n}: {\n codeSamples: CodeSample[];\n apiReferenceData: ApiReferenceDataV2;\n baseUrl?: string;\n inputs: ApiPlaygroundInputs;\n apiPlaygroundMode: ApiPlaygroundDisplayType;\n requestExampleLanguages?: string[];\n requiredOnly?: boolean;\n}): Promise<Record<string, Record<string, ExampleCodeSnippet>>> => {\n const shouldHaveGeneratedExamples =\n (baseUrl && apiPlaygroundMode !== 'none') || (baseUrl && requestExampleLanguages);\n const langOrder = requestExampleLanguages ?? [];\n codeSamples = codeSamples.map((codeSample) => ({\n ...codeSample,\n lang: toShikiLang(codeSample.lang),\n }));\n if (requestExampleLanguages === undefined) {\n codeSamples.forEach((codeSample) => {\n if (langOrder.includes(codeSample.lang)) return;\n langOrder.push(codeSample.lang);\n });\n if (shouldHaveGeneratedExamples) {\n defaultRequestExampleLanguages.forEach((lang) => {\n if (langOrder.includes(lang)) return;\n langOrder.push(lang);\n });\n }\n }\n\n const map: Record<string, Record<string, ExampleCodeSnippet>> = {};\n\n for (const shikiLang of langOrder) {\n let displayLang = shikiLangToDisplayLang[shikiLang] ?? shikiLang;\n\n const codeSamplesInLang = codeSamples.filter((codeSample) => codeSample.lang === shikiLang);\n\n const labelToSnippetMap = map[displayLang] ?? {};\n if (codeSamplesInLang.length === 0) {\n const generatedCodeSample = await generateInteractiveCodeSample({\n baseUrl,\n apiReferenceData,\n inputs,\n apiPlaygroundMode,\n lang: shikiLang,\n requiredOnly,\n });\n if (generatedCodeSample) {\n addCodeSampleToLabelToSnippetMap(\n generatedCodeSample,\n shikiLang,\n displayLang,\n labelToSnippetMap,\n true\n );\n }\n } else {\n codeSamplesInLang.forEach((codeSample) => {\n displayLang = shikiLangToDisplayLang[shikiLang] ?? codeSample.label ?? shikiLang;\n addCodeSampleToLabelToSnippetMap(\n codeSample,\n shikiLang,\n displayLang,\n labelToSnippetMap,\n false\n );\n });\n }\n if (Object.keys(labelToSnippetMap).length > 0) {\n map[displayLang] = labelToSnippetMap;\n }\n }\n\n return map;\n};\n\nconst addCodeSampleToLabelToSnippetMap = (\n codeSample: CodeSample,\n shikiLang: string,\n displayLang: string,\n labelToSnippetMap: Record<string, ExampleCodeSnippet>,\n isGenerated: boolean\n) => {\n // if we have entered an empty label, retroactively update it to 'Example 1'\n if ('' in labelToSnippetMap) {\n labelToSnippetMap['Example 1'] = labelToSnippetMap[''];\n delete labelToSnippetMap[''];\n }\n\n const numExistingLabels = Object.keys(labelToSnippetMap).length;\n const label =\n codeSample.label ?? (numExistingLabels > 0 ? `Example ${numExistingLabels + 1}` : '');\n\n labelToSnippetMap[label] = {\n filename: isGenerated ? displayLang : label || displayLang, // (used in CodeSnippets)\n language: shikiLang,\n code: codeSample.source,\n };\n};\n"],"names":["generateSnippetMap","codeSamples","apiReferenceData","baseUrl","inputs","apiPlaygroundMode","requestExampleLanguages","requiredOnly","shouldHaveGeneratedExamples","langOrder","codeSample","toShikiLang","defaultRequestExampleLanguages","lang","map","shikiLang","displayLang","shikiLangToDisplayLang","codeSamplesInLang","labelToSnippetMap","generatedCodeSample","generateInteractiveCodeSample","addCodeSampleToLabelToSnippetMap","isGenerated","numExistingLabels","label"],"mappings":";;;AAaO,MAAMA,IAAqB,OAAO;AAAA,EACvC,aAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,mBAAAC;AAAA,EAAA,yBACAC;AAAAA,EACA,cAAAC;AACF,
|
|
1
|
+
{"version":3,"file":"generateSnippetMap.js","sources":["../../../src/api-playground-2/generators/generateSnippetMap.ts"],"sourcesContent":["import {\n ApiPlaygroundDisplayType,\n requestExampleLanguages as defaultRequestExampleLanguages,\n} from '@mintlify/models';\nimport { ApiPlaygroundInputs, CodeSample } from '@mintlify/validation';\n\nimport type { ApiReferenceDataV2 } from '@/api-playground-2/types';\nimport { shikiLangToDisplayLang, toShikiLang } from '@/constants/snippetPresets';\nimport { ExampleCodeSnippet } from '@/types/exampleCodeSnippet';\n\nimport { generateInteractiveCodeSample } from './generateInteractiveCodeSample';\n\n// more or less identical but in all places where we use Endpoint, we use ApiReferenceDataV2 instead\nexport const generateSnippetMap = async ({\n codeSamples,\n apiReferenceData,\n baseUrl,\n inputs,\n apiPlaygroundMode,\n requestExampleLanguages,\n requiredOnly,\n selectedSecurityOptionIndex,\n}: {\n codeSamples: CodeSample[];\n apiReferenceData: ApiReferenceDataV2;\n baseUrl?: string;\n inputs: ApiPlaygroundInputs;\n apiPlaygroundMode: ApiPlaygroundDisplayType;\n requestExampleLanguages?: string[];\n requiredOnly?: boolean;\n selectedSecurityOptionIndex: number;\n}): Promise<Record<string, Record<string, ExampleCodeSnippet>>> => {\n const shouldHaveGeneratedExamples =\n (baseUrl && apiPlaygroundMode !== 'none') || (baseUrl && requestExampleLanguages);\n const langOrder = requestExampleLanguages ?? [];\n codeSamples = codeSamples.map((codeSample) => ({\n ...codeSample,\n lang: toShikiLang(codeSample.lang),\n }));\n if (requestExampleLanguages === undefined) {\n codeSamples.forEach((codeSample) => {\n if (langOrder.includes(codeSample.lang)) return;\n langOrder.push(codeSample.lang);\n });\n if (shouldHaveGeneratedExamples) {\n defaultRequestExampleLanguages.forEach((lang) => {\n if (langOrder.includes(lang)) return;\n langOrder.push(lang);\n });\n }\n }\n\n const map: Record<string, Record<string, ExampleCodeSnippet>> = {};\n\n for (const shikiLang of langOrder) {\n let displayLang = shikiLangToDisplayLang[shikiLang] ?? shikiLang;\n\n const codeSamplesInLang = codeSamples.filter((codeSample) => codeSample.lang === shikiLang);\n\n const labelToSnippetMap = map[displayLang] ?? {};\n if (codeSamplesInLang.length === 0) {\n const generatedCodeSample = await generateInteractiveCodeSample({\n baseUrl,\n apiReferenceData,\n inputs,\n apiPlaygroundMode,\n lang: shikiLang,\n requiredOnly,\n selectedSecurityOptionIndex,\n });\n if (generatedCodeSample) {\n addCodeSampleToLabelToSnippetMap(\n generatedCodeSample,\n shikiLang,\n displayLang,\n labelToSnippetMap,\n true\n );\n }\n } else {\n codeSamplesInLang.forEach((codeSample) => {\n displayLang = shikiLangToDisplayLang[shikiLang] ?? codeSample.label ?? shikiLang;\n addCodeSampleToLabelToSnippetMap(\n codeSample,\n shikiLang,\n displayLang,\n labelToSnippetMap,\n false\n );\n });\n }\n if (Object.keys(labelToSnippetMap).length > 0) {\n map[displayLang] = labelToSnippetMap;\n }\n }\n\n return map;\n};\n\nconst addCodeSampleToLabelToSnippetMap = (\n codeSample: CodeSample,\n shikiLang: string,\n displayLang: string,\n labelToSnippetMap: Record<string, ExampleCodeSnippet>,\n isGenerated: boolean\n) => {\n // if we have entered an empty label, retroactively update it to 'Example 1'\n if ('' in labelToSnippetMap) {\n labelToSnippetMap['Example 1'] = labelToSnippetMap[''];\n delete labelToSnippetMap[''];\n }\n\n const numExistingLabels = Object.keys(labelToSnippetMap).length;\n const label =\n codeSample.label ?? (numExistingLabels > 0 ? `Example ${numExistingLabels + 1}` : '');\n\n labelToSnippetMap[label] = {\n filename: isGenerated ? displayLang : label || displayLang, // (used in CodeSnippets)\n language: shikiLang,\n code: codeSample.source,\n };\n};\n"],"names":["generateSnippetMap","codeSamples","apiReferenceData","baseUrl","inputs","apiPlaygroundMode","requestExampleLanguages","requiredOnly","selectedSecurityOptionIndex","shouldHaveGeneratedExamples","langOrder","codeSample","toShikiLang","defaultRequestExampleLanguages","lang","map","shikiLang","displayLang","shikiLangToDisplayLang","codeSamplesInLang","labelToSnippetMap","generatedCodeSample","generateInteractiveCodeSample","addCodeSampleToLabelToSnippetMap","isGenerated","numExistingLabels","label"],"mappings":";;;AAaO,MAAMA,IAAqB,OAAO;AAAA,EACvC,aAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,mBAAAC;AAAA,EAAA,yBACAC;AAAAA,EACA,cAAAC;AAAA,EACA,6BAAAC;AACF,MASmE;AACjE,QAAMC,IACHN,KAAWE,MAAsB,UAAYF,KAAWG,GACrDI,IAAYJ,KAA2B,CAAA;AAC7C,EAAAL,IAAcA,EAAY,IAAI,CAACU,OAAgB;AAAA,IAC7C,GAAGA;AAAA,IACH,MAAMC,EAAYD,EAAW,IAAI;AAAA,EAAA,EACjC,GACEL,MAA4B,WAC9BL,EAAY,QAAQ,CAACU,MAAe;AAClC,IAAID,EAAU,SAASC,EAAW,IAAI,KACtCD,EAAU,KAAKC,EAAW,IAAI;AAAA,EAChC,CAAC,GACGF,KACFI,EAA+B,QAAQ,CAACC,MAAS;AAC/C,IAAIJ,EAAU,SAASI,CAAI,KAC3BJ,EAAU,KAAKI,CAAI;AAAA,EACrB,CAAC;AAIL,QAAMC,IAA0D,CAAA;AAEhE,aAAWC,KAAaN,GAAW;AACjC,QAAIO,IAAcC,EAAuBF,CAAS,KAAKA;AAEvD,UAAMG,IAAoBlB,EAAY,OAAO,CAACU,MAAeA,EAAW,SAASK,CAAS,GAEpFI,IAAoBL,EAAIE,CAAW,KAAK,CAAA;AAC9C,QAAIE,EAAkB,WAAW,GAAG;AAClC,YAAME,IAAsB,MAAMC,EAA8B;AAAA,QAC9D,SAAAnB;AAAA,QACA,kBAAAD;AAAA,QACA,QAAAE;AAAA,QACA,mBAAAC;AAAA,QACA,MAAMW;AAAA,QACN,cAAAT;AAAA,QACA,6BAAAC;AAAA,MAAA,CACD;AACD,MAAIa,KACFE;AAAA,QACEF;AAAA,QACAL;AAAA,QACAC;AAAA,QACAG;AAAA,QACA;AAAA,MAAA;AAAA,IAGN;AACE,MAAAD,EAAkB,QAAQ,CAACR,MAAe;AACxC,QAAAM,IAAcC,EAAuBF,CAAS,KAAKL,EAAW,SAASK,GACvEO;AAAA,UACEZ;AAAA,UACAK;AAAA,UACAC;AAAA,UACAG;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ,CAAC;AAEH,IAAI,OAAO,KAAKA,CAAiB,EAAE,SAAS,MAC1CL,EAAIE,CAAW,IAAIG;AAAA,EAEvB;AAEA,SAAOL;AACT,GAEMQ,IAAmC,CACvCZ,GACAK,GACAC,GACAG,GACAI,MACG;AAEH,EAAI,MAAMJ,MACRA,EAAkB,WAAW,IAAIA,EAAkB,EAAE,GACrD,OAAOA,EAAkB,EAAE;AAG7B,QAAMK,IAAoB,OAAO,KAAKL,CAAiB,EAAE,QACnDM,IACJf,EAAW,UAAUc,IAAoB,IAAI,WAAWA,IAAoB,CAAC,KAAK;AAEpF,EAAAL,EAAkBM,CAAK,IAAI;AAAA,IACzB,UAAUF,IAAcP,IAAcS,KAAST;AAAA;AAAA,IAC/C,UAAUD;AAAA,IACV,MAAML,EAAW;AAAA,EAAA;AAErB;"}
|
|
@@ -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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"}
|
|
@@ -1,22 +1,33 @@
|
|
|
1
1
|
import { create as s } from "zustand";
|
|
2
|
-
import { unflattenInputs as
|
|
3
|
-
const
|
|
2
|
+
import { unflattenInputs as c } from "../schemaGraph/utils.js";
|
|
3
|
+
const u = s((e, n) => ({
|
|
4
4
|
inputs: {},
|
|
5
|
-
initialize: (t) =>
|
|
5
|
+
initialize: (t) => e({
|
|
6
6
|
inputs: { ...t }
|
|
7
7
|
}),
|
|
8
|
-
setInput: (t,
|
|
9
|
-
inputs: { ...
|
|
8
|
+
setInput: (t, i) => e((p) => ({
|
|
9
|
+
inputs: { ...p.inputs, [t]: i }
|
|
10
10
|
})),
|
|
11
|
-
setInputs: (t) =>
|
|
12
|
-
inputs: { ...
|
|
11
|
+
setInputs: (t) => e((i) => ({
|
|
12
|
+
inputs: { ...i.inputs, ...t }
|
|
13
13
|
})),
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
})
|
|
14
|
+
replaceInputs: (t) => e({ inputs: t }),
|
|
15
|
+
getInput: (t) => n().inputs[t],
|
|
16
|
+
getApiPlaygroundInputs: () => c(n().inputs),
|
|
17
|
+
clear: () => e({ inputs: {} }),
|
|
18
|
+
reset: () => e({ inputs: {} }),
|
|
19
|
+
selectedSecurityOptionIndex: 0,
|
|
20
|
+
setSelectedSecurityOptionIndex: (t) => e({ selectedSecurityOptionIndex: t })
|
|
21
|
+
})), d = () => {
|
|
22
|
+
const e = u(
|
|
23
|
+
(t) => t.selectedSecurityOptionIndex
|
|
24
|
+
), n = u(
|
|
25
|
+
(t) => t.setSelectedSecurityOptionIndex
|
|
26
|
+
);
|
|
27
|
+
return { selectedSecurityOptionIndex: e, setSelectedSecurityOptionIndex: n };
|
|
28
|
+
};
|
|
19
29
|
export {
|
|
20
|
-
|
|
30
|
+
u as usePlaygroundInputsStore,
|
|
31
|
+
d as useSelectedSecurityOption
|
|
21
32
|
};
|
|
22
33
|
//# sourceMappingURL=usePlaygroundInputsStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePlaygroundInputsStore.js","sources":["../../../src/api-playground-2/hooks/usePlaygroundInputsStore.ts"],"sourcesContent":["import { ApiPlaygroundInputs } from '@mintlify/validation';\nimport { create } from 'zustand';\n\nimport { unflattenInputs } from '../schemaGraph/utils';\n\nexport type PlaygroundInputValue = unknown;\n\ninterface PlaygroundInputsState {\n inputs: Record<string, PlaygroundInputValue>;\n initialize: (initialValues: Record<string, PlaygroundInputValue>) => void;\n setInput: (name: string, value: PlaygroundInputValue) => void;\n setInputs: (inputs: Record<string, PlaygroundInputValue>) => void;\n getInput: (name: string) => PlaygroundInputValue;\n getApiPlaygroundInputs: () => ApiPlaygroundInputs;\n clear: () => void;\n reset: () => void;\n}\n\nexport const usePlaygroundInputsStore = create<PlaygroundInputsState>((set, get) => ({\n inputs: {},\n initialize: (initialValues) =>\n set({\n inputs: { ...initialValues },\n }),\n setInput: (name, value) =>\n set((state) => ({\n inputs: { ...state.inputs, [name]: value },\n })),\n setInputs: (inputs) =>\n set((state) => ({\n inputs: { ...state.inputs, ...inputs },\n })),\n getInput: (name) => get().inputs[name],\n getApiPlaygroundInputs: () => unflattenInputs(get().inputs),\n clear: () => set({ inputs: {} }),\n reset: () => set({ inputs: {} }),\n}));\n"],"names":["usePlaygroundInputsStore","create","set","get","initialValues","name","value","state","inputs","unflattenInputs"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"usePlaygroundInputsStore.js","sources":["../../../src/api-playground-2/hooks/usePlaygroundInputsStore.ts"],"sourcesContent":["import { ApiPlaygroundInputs } from '@mintlify/validation';\nimport { create } from 'zustand';\n\nimport { unflattenInputs } from '../schemaGraph/utils';\n\nexport type PlaygroundInputValue = unknown;\n\ninterface PlaygroundInputsState {\n inputs: Record<string, PlaygroundInputValue>;\n initialize: (initialValues: Record<string, PlaygroundInputValue>) => void;\n setInput: (name: string, value: PlaygroundInputValue) => void;\n setInputs: (inputs: Record<string, PlaygroundInputValue>) => void;\n replaceInputs: (inputs: Record<string, PlaygroundInputValue>) => void;\n getInput: (name: string) => PlaygroundInputValue;\n getApiPlaygroundInputs: () => ApiPlaygroundInputs;\n clear: () => void;\n reset: () => void;\n selectedSecurityOptionIndex: number;\n setSelectedSecurityOptionIndex: (index: number) => void;\n}\n\nexport const usePlaygroundInputsStore = create<PlaygroundInputsState>((set, get) => ({\n inputs: {},\n initialize: (initialValues) =>\n set({\n inputs: { ...initialValues },\n }),\n setInput: (name, value) =>\n set((state) => ({\n inputs: { ...state.inputs, [name]: value },\n })),\n setInputs: (inputs) =>\n set((state) => ({\n inputs: { ...state.inputs, ...inputs },\n })),\n replaceInputs: (inputs) =>\n set({ inputs }),\n getInput: (name) => get().inputs[name],\n getApiPlaygroundInputs: () => unflattenInputs(get().inputs),\n clear: () => set({ inputs: {} }),\n reset: () => set({ inputs: {} }),\n selectedSecurityOptionIndex: 0,\n setSelectedSecurityOptionIndex: (index) => set({ selectedSecurityOptionIndex: index }),\n}));\n\nexport const useSelectedSecurityOption = () => {\n const selectedSecurityOptionIndex = usePlaygroundInputsStore(\n (state) => state.selectedSecurityOptionIndex\n );\n const setSelectedSecurityOptionIndex = usePlaygroundInputsStore(\n (state) => state.setSelectedSecurityOptionIndex\n );\n return { selectedSecurityOptionIndex, setSelectedSecurityOptionIndex };\n};\n"],"names":["usePlaygroundInputsStore","create","set","get","initialValues","name","value","state","inputs","unflattenInputs","index","useSelectedSecurityOption","selectedSecurityOptionIndex","setSelectedSecurityOptionIndex"],"mappings":";;AAqBO,MAAMA,IAA2BC,EAA8B,CAACC,GAAKC,OAAS;AAAA,EACnF,QAAQ,CAAA;AAAA,EACR,YAAY,CAACC,MACXF,EAAI;AAAA,IACF,QAAQ,EAAE,GAAGE,EAAA;AAAA,EAAc,CAC5B;AAAA,EACH,UAAU,CAACC,GAAMC,MACfJ,EAAI,CAACK,OAAW;AAAA,IACd,QAAQ,EAAE,GAAGA,EAAM,QAAQ,CAACF,CAAI,GAAGC,EAAA;AAAA,EAAM,EACzC;AAAA,EACJ,WAAW,CAACE,MACVN,EAAI,CAACK,OAAW;AAAA,IACd,QAAQ,EAAE,GAAGA,EAAM,QAAQ,GAAGC,EAAA;AAAA,EAAO,EACrC;AAAA,EACJ,eAAe,CAACA,MACdN,EAAI,EAAE,QAAAM,GAAQ;AAAA,EAChB,UAAU,CAACH,MAASF,EAAA,EAAM,OAAOE,CAAI;AAAA,EACrC,wBAAwB,MAAMI,EAAgBN,EAAA,EAAM,MAAM;AAAA,EAC1D,OAAO,MAAMD,EAAI,EAAE,QAAQ,CAAA,GAAI;AAAA,EAC/B,OAAO,MAAMA,EAAI,EAAE,QAAQ,CAAA,GAAI;AAAA,EAC/B,6BAA6B;AAAA,EAC7B,gCAAgC,CAACQ,MAAUR,EAAI,EAAE,6BAA6BQ,GAAO;AACvF,EAAE,GAEWC,IAA4B,MAAM;AAC7C,QAAMC,IAA8BZ;AAAA,IAClC,CAACO,MAAUA,EAAM;AAAA,EAAA,GAEbM,IAAiCb;AAAA,IACrC,CAACO,MAAUA,EAAM;AAAA,EAAA;AAEnB,SAAO,EAAE,6BAAAK,GAA6B,gCAAAC,EAAA;AACxC;"}
|