refactor: add request variables to request runner flow
This commit is contained in:
@@ -1,4 +1,8 @@
|
|||||||
import { Environment } from "@hoppscotch/data"
|
import {
|
||||||
|
Environment,
|
||||||
|
HoppRESTHeaders,
|
||||||
|
HoppRESTRequestVariable,
|
||||||
|
} from "@hoppscotch/data"
|
||||||
import { SandboxTestResult, TestDescriptor } from "@hoppscotch/js-sandbox"
|
import { SandboxTestResult, TestDescriptor } from "@hoppscotch/js-sandbox"
|
||||||
import { runTestScript } from "@hoppscotch/js-sandbox/web"
|
import { runTestScript } from "@hoppscotch/js-sandbox/web"
|
||||||
import * as A from "fp-ts/Array"
|
import * as A from "fp-ts/Array"
|
||||||
@@ -65,10 +69,17 @@ const getTestableBody = (
|
|||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
const combineEnvVariables = (envs: {
|
const combineEnvVariables = (variables: {
|
||||||
global: Environment["variables"]
|
environments: {
|
||||||
selected: Environment["variables"]
|
global: Environment["variables"]
|
||||||
}) => [...envs.selected, ...envs.global]
|
selected: Environment["variables"]
|
||||||
|
}
|
||||||
|
requestVariables: Environment["variables"]
|
||||||
|
}) => [
|
||||||
|
...variables.requestVariables,
|
||||||
|
...variables.environments.global,
|
||||||
|
...variables.environments.selected,
|
||||||
|
]
|
||||||
|
|
||||||
export const executedResponses$ = new Subject<
|
export const executedResponses$ = new Subject<
|
||||||
HoppRESTResponse & { type: "success" | "fail " }
|
HoppRESTResponse & { type: "success" | "fail " }
|
||||||
@@ -175,15 +186,36 @@ export function runRESTRequest$(
|
|||||||
requestHeaders = [...tab.value.document.request.headers]
|
requestHeaders = [...tab.value.document.request.headers]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const finalRequestVariables =
|
||||||
|
tab.value.document.request.requestVariables.map(
|
||||||
|
(v: HoppRESTRequestVariable) => {
|
||||||
|
if (v.active) {
|
||||||
|
return {
|
||||||
|
key: v.key,
|
||||||
|
value: v.value,
|
||||||
|
secret: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
const finalRequest = {
|
const finalRequest = {
|
||||||
...tab.value.document.request,
|
...tab.value.document.request,
|
||||||
auth: requestAuth ?? { authType: "none", authActive: false },
|
auth: requestAuth ?? { authType: "none", authActive: false },
|
||||||
headers: requestHeaders,
|
headers: requestHeaders as HoppRESTHeaders,
|
||||||
|
}
|
||||||
|
|
||||||
|
const finalEnvs = {
|
||||||
|
environments: envs.right,
|
||||||
|
requestVariables: finalRequestVariables as Environment["variables"],
|
||||||
}
|
}
|
||||||
|
|
||||||
const effectiveRequest = getEffectiveRESTRequest(finalRequest, {
|
const effectiveRequest = getEffectiveRESTRequest(finalRequest, {
|
||||||
|
id: "env-id",
|
||||||
|
v: 1,
|
||||||
name: "Env",
|
name: "Env",
|
||||||
variables: combineEnvVariables(envs.right),
|
variables: combineEnvVariables(finalEnvs),
|
||||||
})
|
})
|
||||||
|
|
||||||
const [stream, cancelRun] = createRESTNetworkRequestStream(effectiveRequest)
|
const [stream, cancelRun] = createRESTNetworkRequestStream(effectiveRequest)
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import {
|
|||||||
import { arrayFlatMap, arraySort } from "../functional/array"
|
import { arrayFlatMap, arraySort } from "../functional/array"
|
||||||
import { toFormData } from "../functional/formData"
|
import { toFormData } from "../functional/formData"
|
||||||
import { tupleWithSameKeysToRecord } from "../functional/record"
|
import { tupleWithSameKeysToRecord } from "../functional/record"
|
||||||
import { getGlobalVariables } from "~/newstore/environments"
|
|
||||||
|
|
||||||
export interface EffectiveHoppRESTRequest extends HoppRESTRequest {
|
export interface EffectiveHoppRESTRequest extends HoppRESTRequest {
|
||||||
/**
|
/**
|
||||||
@@ -34,6 +33,7 @@ export interface EffectiveHoppRESTRequest extends HoppRESTRequest {
|
|||||||
effectiveFinalHeaders: { key: string; value: string }[]
|
effectiveFinalHeaders: { key: string; value: string }[]
|
||||||
effectiveFinalParams: { key: string; value: string }[]
|
effectiveFinalParams: { key: string; value: string }[]
|
||||||
effectiveFinalBody: FormData | string | null
|
effectiveFinalBody: FormData | string | null
|
||||||
|
effectiveFinalRequestVariables: { key: string; value: string }[]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -313,38 +313,53 @@ export function getEffectiveRESTRequest(
|
|||||||
request: HoppRESTRequest,
|
request: HoppRESTRequest,
|
||||||
environment: Environment
|
environment: Environment
|
||||||
): EffectiveHoppRESTRequest {
|
): EffectiveHoppRESTRequest {
|
||||||
const envVariables = [...environment.variables, ...getGlobalVariables()]
|
|
||||||
|
|
||||||
const effectiveFinalHeaders = pipe(
|
const effectiveFinalHeaders = pipe(
|
||||||
getComputedHeaders(request, envVariables).map((h) => h.header),
|
getComputedHeaders(request, environment.variables).map((h) => h.header),
|
||||||
A.concat(request.headers),
|
A.concat(request.headers),
|
||||||
A.filter((x) => x.active && x.key !== ""),
|
A.filter((x) => x.active && x.key !== ""),
|
||||||
A.map((x) => ({
|
A.map((x) => ({
|
||||||
active: true,
|
active: true,
|
||||||
key: parseTemplateString(x.key, envVariables),
|
key: parseTemplateString(x.key, environment.variables),
|
||||||
value: parseTemplateString(x.value, envVariables),
|
value: parseTemplateString(x.value, environment.variables),
|
||||||
}))
|
}))
|
||||||
)
|
)
|
||||||
|
|
||||||
const effectiveFinalParams = pipe(
|
const effectiveFinalParams = pipe(
|
||||||
getComputedParams(request, envVariables).map((p) => p.param),
|
getComputedParams(request, environment.variables).map((p) => p.param),
|
||||||
A.concat(request.params),
|
A.concat(request.params),
|
||||||
A.filter((x) => x.active && x.key !== ""),
|
A.filter((x) => x.active && x.key !== ""),
|
||||||
A.map((x) => ({
|
A.map((x) => ({
|
||||||
active: true,
|
active: true,
|
||||||
key: parseTemplateString(x.key, envVariables),
|
key: parseTemplateString(x.key, environment.variables),
|
||||||
value: parseTemplateString(x.value, envVariables),
|
value: parseTemplateString(x.value, environment.variables),
|
||||||
}))
|
}))
|
||||||
)
|
)
|
||||||
|
|
||||||
const effectiveFinalBody = getFinalBodyFromRequest(request, envVariables)
|
const effectiveFinalRequestVariables = pipe(
|
||||||
|
request.requestVariables,
|
||||||
|
A.filter((x) => x.active && x.key !== ""),
|
||||||
|
A.map((x) => ({
|
||||||
|
active: true,
|
||||||
|
key: parseTemplateString(x.key, environment.variables),
|
||||||
|
value: parseTemplateString(x.value, environment.variables),
|
||||||
|
}))
|
||||||
|
)
|
||||||
|
|
||||||
|
const effectiveFinalBody = getFinalBodyFromRequest(
|
||||||
|
request,
|
||||||
|
environment.variables
|
||||||
|
)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...request,
|
...request,
|
||||||
effectiveFinalURL: parseTemplateString(request.endpoint, envVariables),
|
effectiveFinalURL: parseTemplateString(
|
||||||
|
request.endpoint,
|
||||||
|
environment.variables
|
||||||
|
),
|
||||||
effectiveFinalHeaders,
|
effectiveFinalHeaders,
|
||||||
effectiveFinalParams,
|
effectiveFinalParams,
|
||||||
effectiveFinalBody,
|
effectiveFinalBody,
|
||||||
|
effectiveFinalRequestVariables,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user