fix: race condition mutating defaultRESTRequest

This commit is contained in:
liyasthomas
2021-12-31 23:25:46 +05:30
parent b78b2d0e78
commit 4ecd69cc5a
4 changed files with 19 additions and 24 deletions

View File

@@ -233,12 +233,9 @@ watch(bulkHeaders, () => {
.split("\n") .split("\n")
.filter((x) => x.trim().length > 0 && x.includes(":")) .filter((x) => x.trim().length > 0 && x.includes(":"))
.map((item) => ({ .map((item) => ({
key: item key: item.substring(0, item.indexOf(":")).trimLeft().replace(/^#/, ""),
.substring(0, item.indexOf(":"))
.trimLeft()
.replace(/^\/\//, ""),
value: item.substring(item.indexOf(":") + 1).trimLeft(), value: item.substring(item.indexOf(":") + 1).trimLeft(),
active: !item.trim().startsWith("//"), active: !item.trim().startsWith("#"),
})) }))
const filteredHeaders = workingHeaders.value.filter((x) => x.key !== "") const filteredHeaders = workingHeaders.value.filter((x) => x.key !== "")
@@ -251,15 +248,16 @@ watch(bulkHeaders, () => {
console.error(e) console.error(e)
} }
}) })
watch(workingHeaders, (newHeadersList) => { watch(workingHeaders, (newHeadersList) => {
// If we are in bulk mode, don't apply direct changes // If we are in bulk mode, don't apply direct changes
if (bulkMode.value) return if (bulkMode.value) return
try { try {
const currentBulkHeaders = bulkHeaders.value.split("\n").map((item) => ({ const currentBulkHeaders = bulkHeaders.value.split("\n").map((item) => ({
key: item.substring(0, item.indexOf(":")).trimLeft().replace(/^\/\//, ""), key: item.substring(0, item.indexOf(":")).trimLeft().replace(/^#/, ""),
value: item.substring(item.indexOf(":") + 1).trimLeft(), value: item.substring(item.indexOf(":") + 1).trimLeft(),
active: !item.trim().startsWith("//"), active: !item.trim().startsWith("#"),
})) }))
const filteredHeaders = newHeadersList.filter((x) => x.key !== "") const filteredHeaders = newHeadersList.filter((x) => x.key !== "")
@@ -267,7 +265,7 @@ watch(workingHeaders, (newHeadersList) => {
if (!isEqual(currentBulkHeaders, filteredHeaders)) { if (!isEqual(currentBulkHeaders, filteredHeaders)) {
bulkHeaders.value = filteredHeaders bulkHeaders.value = filteredHeaders
.map((header) => { .map((header) => {
return `${header.active ? "" : "//"}${header.key}: ${header.value}` return `${header.active ? "" : "#"}${header.key}: ${header.value}`
}) })
.join("\n") .join("\n")
} }

View File

@@ -224,12 +224,9 @@ watch(bulkParams, () => {
.split("\n") .split("\n")
.filter((x) => x.trim().length > 0 && x.includes(":")) .filter((x) => x.trim().length > 0 && x.includes(":"))
.map((item) => ({ .map((item) => ({
key: item key: item.substring(0, item.indexOf(":")).trimLeft().replace(/^#/, ""),
.substring(0, item.indexOf(":"))
.trimLeft()
.replace(/^\/\//, ""),
value: item.substring(item.indexOf(":") + 1).trimLeft(), value: item.substring(item.indexOf(":") + 1).trimLeft(),
active: !item.trim().startsWith("//"), active: !item.trim().startsWith("#"),
})) }))
const filteredParams = workingParams.value.filter((x) => x.key !== "") const filteredParams = workingParams.value.filter((x) => x.key !== "")
@@ -242,15 +239,16 @@ watch(bulkParams, () => {
console.error(e) console.error(e)
} }
}) })
watch(workingParams, (newParamsList) => { watch(workingParams, (newParamsList) => {
// If we are in bulk mode, don't apply direct changes // If we are in bulk mode, don't apply direct changes
if (bulkMode.value) return if (bulkMode.value) return
try { try {
const currentBulkParams = bulkParams.value.split("\n").map((item) => ({ const currentBulkParams = bulkParams.value.split("\n").map((item) => ({
key: item.substring(0, item.indexOf(":")).trimLeft().replace(/^\/\//, ""), key: item.substring(0, item.indexOf(":")).trimLeft().replace(/^#/, ""),
value: item.substring(item.indexOf(":") + 1).trimLeft(), value: item.substring(item.indexOf(":") + 1).trimLeft(),
active: !item.trim().startsWith("//"), active: !item.trim().startsWith("#"),
})) }))
const filteredParams = newParamsList.filter((x) => x.key !== "") const filteredParams = newParamsList.filter((x) => x.key !== "")
@@ -258,7 +256,7 @@ watch(workingParams, (newParamsList) => {
if (!isEqual(currentBulkParams, filteredParams)) { if (!isEqual(currentBulkParams, filteredParams)) {
bulkParams.value = filteredParams bulkParams.value = filteredParams
.map((param) => { .map((param) => {
return `${param.active ? "" : "//"}${param.key}: ${param.value}` return `${param.active ? "" : "#"}${param.key}: ${param.value}`
}) })
.join("\n") .join("\n")
} }

View File

@@ -1,7 +1,6 @@
import clone from "lodash/clone"
import { FormDataKeyValue, HoppRESTRequest } from "@hoppscotch/data" import { FormDataKeyValue, HoppRESTRequest } from "@hoppscotch/data"
import { isJSONContentType } from "./utils/contenttypes" import { isJSONContentType } from "./utils/contenttypes"
import { defaultRESTRequest } from "~/newstore/RESTSession" import { getDefaultRESTRequest } from "~/newstore/RESTSession"
/** /**
* Handles translations for all the hopp.io REST Shareable URL params * Handles translations for all the hopp.io REST Shareable URL params
@@ -14,7 +13,7 @@ export function translateExtURLParams(
} }
function parseV0ExtURL(urlParams: Record<string, any>): HoppRESTRequest { function parseV0ExtURL(urlParams: Record<string, any>): HoppRESTRequest {
const resolvedReq = clone(defaultRESTRequest) const resolvedReq = getDefaultRESTRequest()
if (urlParams.method && typeof urlParams.method === "string") { if (urlParams.method && typeof urlParams.method === "string") {
resolvedReq.method = urlParams.method resolvedReq.method = urlParams.method
@@ -91,7 +90,7 @@ function parseV0ExtURL(urlParams: Record<string, any>): HoppRESTRequest {
} }
function parseV1ExtURL(urlParams: Record<string, any>): HoppRESTRequest { function parseV1ExtURL(urlParams: Record<string, any>): HoppRESTRequest {
const resolvedReq = clone(defaultRESTRequest) const resolvedReq = getDefaultRESTRequest()
if (urlParams.headers && typeof urlParams.headers === "string") { if (urlParams.headers && typeof urlParams.headers === "string") {
resolvedReq.headers = JSON.parse(urlParams.headers) resolvedReq.headers = JSON.parse(urlParams.headers)

View File

@@ -23,7 +23,7 @@ type RESTSession = {
saveContext: HoppRequestSaveContext | null saveContext: HoppRequestSaveContext | null
} }
export const defaultRESTRequest: HoppRESTRequest = { export const getDefaultRESTRequest = (): HoppRESTRequest => ({
v: RESTReqSchemaVersion, v: RESTReqSchemaVersion,
endpoint: "https://echo.hoppscotch.io", endpoint: "https://echo.hoppscotch.io",
name: "Untitled request", name: "Untitled request",
@@ -40,10 +40,10 @@ export const defaultRESTRequest: HoppRESTRequest = {
contentType: null, contentType: null,
body: null, body: null,
}, },
} })
const defaultRESTSession: RESTSession = { const defaultRESTSession: RESTSession = {
request: defaultRESTRequest, request: getDefaultRESTRequest(),
response: null, response: null,
testResults: null, testResults: null,
saveContext: null, saveContext: null,
@@ -387,7 +387,7 @@ export function getRESTSaveContext() {
} }
export function resetRESTRequest() { export function resetRESTRequest() {
setRESTRequest(defaultRESTRequest) setRESTRequest(getDefaultRESTRequest())
} }
export function setRESTEndpoint(newEndpoint: string) { export function setRESTEndpoint(newEndpoint: string) {