diff --git a/packages/hoppscotch-common/src/components/importExport/ImportExportSteps/UrlImport.vue b/packages/hoppscotch-common/src/components/importExport/ImportExportSteps/UrlImport.vue index 076b08cd..920a9cdd 100644 --- a/packages/hoppscotch-common/src/components/importExport/ImportExportSteps/UrlImport.vue +++ b/packages/hoppscotch-common/src/components/importExport/ImportExportSteps/UrlImport.vue @@ -23,9 +23,10 @@

@@ -49,7 +50,7 @@ import { KernelInterceptorService } from "~/services/kernel-interceptor.service" import { useService } from "dioc/vue" import * as E from "fp-ts/Either" import * as O from "fp-ts/Option" -import { parseBodyAsJSON } from "~/helpers/functional/json" +import { parseBodyAsJSONOrYAML } from "~/helpers/functional/json" const interceptorService = useService(KernelInterceptorService) @@ -98,7 +99,7 @@ const urlFetchLogic = return E.left("REQUEST_FAILED") } - const responsePayload = parseBodyAsJSON(res.right.body) + const responsePayload = parseBodyAsJSONOrYAML(res.right.body) if (O.isSome(responsePayload)) { // stringify the response payload diff --git a/packages/hoppscotch-common/src/helpers/functional/json.ts b/packages/hoppscotch-common/src/helpers/functional/json.ts index bf4b3f32..7ee7af59 100644 --- a/packages/hoppscotch-common/src/helpers/functional/json.ts +++ b/packages/hoppscotch-common/src/helpers/functional/json.ts @@ -5,6 +5,7 @@ import { pipe, flow } from "fp-ts/function" import { MediaType, RelayResponseBody } from "@hoppscotch/kernel" import { decodeToString } from "~/helpers/functional/parse" +import { safeParseJSONOrYAML } from "./yaml" type SafeParseJSON = { (str: string, convertToArray: true): O.Option> @@ -49,3 +50,18 @@ export const parseBodyAsJSON = (body: RelayResponseBody): O.Option => O.filter((type) => type.includes(MediaType.APPLICATION_JSON)), O.chain(() => parseBytesToJSON(body.body)) ) + +/** + * Parses response body as JSON or YAML content + * @param body Response body from RelayResponse + * @returns Option containing parsed data or none if parsing fails + */ +export const parseBodyAsJSONOrYAML = ( + body: RelayResponseBody +): O.Option => + pipe( + body.body, + decodeToString, + E.fold(() => O.none, safeParseJSONOrYAML), + O.map((data) => data as T) + )