diff options
author | Louis Pilfold <louis@lpil.uk> | 2021-09-07 19:36:31 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2021-09-07 19:36:31 +0100 |
commit | 945152e8075e04d91aac193608ecc84b769c7ba4 (patch) | |
tree | 3a60c06153419138ab58d97997709eb0d7fee5ee /src/gleam_stdlib.js | |
parent | b611364f02679c6c44592082db6012f2c27a0750 (diff) | |
download | gleam_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.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) { |