aboutsummaryrefslogtreecommitdiff
path: root/src/gleam_stdlib.js
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2021-09-07 19:36:31 +0100
committerLouis Pilfold <louis@lpil.uk>2021-09-07 19:36:31 +0100
commit945152e8075e04d91aac193608ecc84b769c7ba4 (patch)
tree3a60c06153419138ab58d97997709eb0d7fee5ee /src/gleam_stdlib.js
parentb611364f02679c6c44592082db6012f2c27a0750 (diff)
downloadgleam_stdlib-945152e8075e04d91aac193608ecc84b769c7ba4.tar.gz
gleam_stdlib-945152e8075e04d91aac193608ecc84b769c7ba4.zip
URI percent encode and decode for JS
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) {