diff options
Diffstat (limited to 'src/gleam_stdlib.js')
-rw-r--r-- | src/gleam_stdlib.js | 16 |
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) { |