fix(utils): make URL search params parsing and serialization WHATWG URL compliant (#9809)

Refs #9804
This commit is contained in:
Oliwia Rogala
2024-04-11 19:06:17 +02:00
committed by GitHub
parent 9e02f4716b
commit 52c4b9512f
2 changed files with 5 additions and 23 deletions

View File

@@ -605,31 +605,13 @@ export const validateParam = (param, value, { isOAS3 = false, bypassRequiredChec
} }
export const parseSearch = () => { export const parseSearch = () => {
let map = {} const searchParams = new URLSearchParams(win.location.search)
let search = win.location.search return Object.fromEntries(searchParams)
if(!search)
return {}
if ( search != "" ) {
let params = search.substr(1).split("&")
for (let i in params) {
if (!Object.prototype.hasOwnProperty.call(params, i)) {
continue
}
i = params[i].split("=")
map[decodeURIComponent(i[0])] = (i[1] && decodeURIComponent(i[1])) || ""
}
}
return map
} }
export const serializeSearch = (searchMap) => { export const serializeSearch = (searchMap) => {
return Object.keys(searchMap).map(k => { const searchParams = new URLSearchParams(Object.entries(searchMap))
return encodeURIComponent(k) + "=" + encodeURIComponent(searchMap[k]) return String(searchParams)
}).join("&")
} }
export const btoa = (str) => { export const btoa = (str) => {

View File

@@ -1338,7 +1338,7 @@ describe("utils", () => {
}) })
it("encode url components", () => { it("encode url components", () => {
expect(serializeSearch({foo: "foo bar"})).toEqual("foo=foo%20bar") expect(serializeSearch({foo: "foo bar"})).toEqual("foo=foo+bar")
}) })
}) })
}) })