aboutsummaryrefslogtreecommitdiff
path: root/src/gleam_stdlib.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/gleam_stdlib.js')
-rw-r--r--src/gleam_stdlib.js16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/gleam_stdlib.js b/src/gleam_stdlib.js
index 082e661..3658142 100644
--- a/src/gleam_stdlib.js
+++ b/src/gleam_stdlib.js
@@ -353,17 +353,29 @@ export function map_insert(key, value, map) {
return map.insert(key, value);
}
-function decode_query_component(string) {
+function unsafe_percent_decode(string) {
return decodeURIComponent((string || "").replace("+", " "));
}
+export function percent_decode(string) {
+ try {
+ return new Ok(unsafe_percent_decode(string));
+ } catch (error) {
+ return new Error(Nil);
+ }
+}
+
+export function percent_encode(string) {
+ return encodeURIComponent(string);
+}
+
export function parse_query(query) {
try {
let pairs = [];
for (let section of query.split("&")) {
let [key, value] = section.split("=");
if (!key) continue;
- pairs.push([decode_query_component(key), decode_query_component(value)]);
+ pairs.push([unsafe_percent_decode(key), unsafe_percent_decode(value)]);
}
return new Ok(List.fromArray(pairs));
} catch (error) {