feat: send formdata over network

This commit is contained in:
Andrew Bastin
2021-08-16 07:12:22 +05:30
parent 5eb6fb38e0
commit 33e2afab7b
2 changed files with 40 additions and 1 deletions

View File

@@ -71,6 +71,7 @@ export function createRESTNetworkRequestStream(
url: req.effectiveFinalURL, url: req.effectiveFinalURL,
headers, headers,
params, params,
data: req.effectiveFinalBody,
}) })
.then((res: any) => { .then((res: any) => {
const timeEnd = Date.now() const timeEnd = Date.now()

View File

@@ -1,6 +1,6 @@
import { combineLatest, Observable } from "rxjs" import { combineLatest, Observable } from "rxjs"
import { map } from "rxjs/operators" import { map } from "rxjs/operators"
import { HoppRESTRequest } from "../types/HoppRESTRequest" import { FormDataKeyValue, HoppRESTRequest } from "../types/HoppRESTRequest"
import parseTemplateString from "../templating" import parseTemplateString from "../templating"
import { Environment } from "~/newstore/environments" import { Environment } from "~/newstore/environments"
@@ -13,6 +13,36 @@ export interface EffectiveHoppRESTRequest extends HoppRESTRequest {
effectiveFinalURL: string effectiveFinalURL: string
effectiveFinalHeaders: { key: string; value: string }[] effectiveFinalHeaders: { key: string; value: string }[]
effectiveFinalParams: { key: string; value: string }[] effectiveFinalParams: { key: string; value: string }[]
effectiveFinalBody: FormData | string
}
function getFinalBodyFromRequest(
request: HoppRESTRequest,
env: Environment
): FormData | string {
if (request.body.contentType === "multipart/form-data") {
const formData = new FormData()
request.body.body
.filter((x) => x.key !== "" && x.active) // Remove empty keys
.map(
(x) =>
<FormDataKeyValue>{
active: x.active,
isFile: x.isFile,
key: parseTemplateString(x.key, env.variables),
value: x.isFile
? x.value
: parseTemplateString(x.value, env.variables),
}
)
.forEach((entry) => {
if (!entry.isFile) formData.append(entry.key, entry.value)
else entry.value.forEach((blob) => formData.append(entry.key, blob))
})
return formData
} else return request.body.body
} }
/** /**
@@ -60,6 +90,13 @@ export function getEffectiveRESTRequest(
} }
} }
const effectiveFinalBody = getFinalBodyFromRequest(request, environment)
effectiveFinalHeaders.push({
active: true,
key: "content-type",
value: request.body.contentType,
})
return { return {
...request, ...request,
effectiveFinalURL: parseTemplateString( effectiveFinalURL: parseTemplateString(
@@ -78,6 +115,7 @@ export function getEffectiveRESTRequest(
key: parseTemplateString(x.key, environment.variables), key: parseTemplateString(x.key, environment.variables),
value: parseTemplateString(x.value, environment.variables), value: parseTemplateString(x.value, environment.variables),
})), })),
effectiveFinalBody,
} }
} }