fix(utils): make URL search params parsing and serialization WHATWG URL compliant (#9809)
Refs #9804
This commit is contained in:
@@ -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) => {
|
||||||
|
|||||||
@@ -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")
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user