Skip to content

Instantly share code, notes, and snippets.

@emmaly
Last active January 28, 2023 03:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save emmaly/7d42ccc79dd5185fde1867a18420e634 to your computer and use it in GitHub Desktop.
Save emmaly/7d42ccc79dd5185fde1867a18420e634 to your computer and use it in GitHub Desktop.
URL + QueryString object converted to string
/**
* @param {string} url
* @param {Object<string,string|string[]>} qs - query string
*/
function urlWithQueryStringObject(url, qs) {
if (!qs) return url;
return [
url,
Object.entries(qs)
.map(([k,v]) => {
if (Array.isArray(v)) {
return v
.map((v2) => [encodeURIComponent(k.trim()), encodeURIComponent(v2.toString().trim())].join("="))
.join("&");
}
return [encodeURIComponent(k.trim()),encodeURIComponent(v.toString().trim())].join("=");
})
.join("&")
]
.join(/\?/.test(url) ? "&" : "?");
}
function example() {
Logger.log(
urlWithQueryStringObject("list"),
);
Logger.log(
urlWithQueryStringObject("list?pageSize=9", {
pageToken: "pineapple",
}),
);
Logger.log(
urlWithQueryStringObject("list", {
pageToken: "pineapple",
pageSize: 18,
}),
);
Logger.log(
urlWithQueryStringObject("list", {
pageToken: "pineapple",
pageSize: [18,"tacos","99"],
}),
);
Logger.log(
urlWithQueryStringObject("list", {
pageToken: "pineapple",
pageSize: [18,"tacos","99"],
complication: { // not supported right now
color: "red",
},
}),
);
Logger.log(
urlWithQueryStringObject("list", {
pageToken: "pineapple",
complication: { // not supported right now
color: ["red","yellow","green"],
},
pageSize: [18,"tacos","99"],
}),
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment