aboutsummaryrefslogtreecommitdiff
path: root/src/gleam_stdlib.js
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2021-09-04 23:06:09 +0100
committerLouis Pilfold <louis@lpil.uk>2021-09-04 23:06:09 +0100
commit7a52f1356fe39475b7576ca5f105a10ae975e7ff (patch)
tree26aaef910ccba182d38474630bb904af732934f2 /src/gleam_stdlib.js
parenta54b1986daf44ebfd941849584175215306ad6d9 (diff)
downloadgleam_stdlib-7a52f1356fe39475b7576ca5f105a10ae975e7ff.tar.gz
gleam_stdlib-7a52f1356fe39475b7576ca5f105a10ae975e7ff.zip
JS parse query
Diffstat (limited to 'src/gleam_stdlib.js')
-rw-r--r--src/gleam_stdlib.js18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/gleam_stdlib.js b/src/gleam_stdlib.js
index 360de75..082e661 100644
--- a/src/gleam_stdlib.js
+++ b/src/gleam_stdlib.js
@@ -352,3 +352,21 @@ export function map_get(map, key) {
export function map_insert(key, value, map) {
return map.insert(key, value);
}
+
+function decode_query_component(string) {
+ return decodeURIComponent((string || "").replace("+", " "));
+}
+
+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)]);
+ }
+ return new Ok(List.fromArray(pairs));
+ } catch (error) {
+ return new Error(Nil);
+ }
+}