aboutsummaryrefslogtreecommitdiff
path: root/src/gleam_stdlib.mjs
diff options
context:
space:
mode:
authorJoshua Reusch <jreusch4@gmail.com>2024-08-13 21:40:56 +0200
committerLouis Pilfold <louis@lpil.uk>2024-08-14 11:26:26 +0200
commitf668f195a455739a88721622d57111948fa6435a (patch)
treecc427b96198c37d3e22ca2772bfbe6cf7f107572 /src/gleam_stdlib.mjs
parentfab4557cdbcd8405b4d255ff7ca845ee9a6f8085 (diff)
downloadgleam_stdlib-f668f195a455739a88721622d57111948fa6435a.tar.gz
gleam_stdlib-f668f195a455739a88721622d57111948fa6435a.zip
add test, make erlang and javascript implementation agree #672
Diffstat (limited to 'src/gleam_stdlib.mjs')
-rw-r--r--src/gleam_stdlib.mjs11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/gleam_stdlib.mjs b/src/gleam_stdlib.mjs
index 157f66d..3296b67 100644
--- a/src/gleam_stdlib.mjs
+++ b/src/gleam_stdlib.mjs
@@ -479,6 +479,10 @@ export function map_insert(key, value, map) {
}
function unsafe_percent_decode(string) {
+ return decodeURIComponent(string || "");
+}
+
+function unsafe_percent_decode_query(string) {
return decodeURIComponent((string || "").replace("+", " "));
}
@@ -491,7 +495,7 @@ export function percent_decode(string) {
}
export function percent_encode(string) {
- return encodeURIComponent(string);
+ return encodeURIComponent(string).replace("%2B", "+");
}
export function parse_query(query) {
@@ -500,7 +504,10 @@ export function parse_query(query) {
for (const section of query.split("&")) {
const [key, value] = section.split("=");
if (!key) continue;
- pairs.push([unsafe_percent_decode(key), unsafe_percent_decode(value)]);
+
+ const decodedKey = unsafe_percent_decode_query(key)
+ const decodedValue = unsafe_percent_decode_query(value)
+ pairs.push([decodedKey, decodedValue])
}
return new Ok(List.fromArray(pairs));
} catch {