diff options
-rw-r--r-- | CHANGELOG.md | 3 | ||||
-rw-r--r-- | src/gleam_stdlib.mjs | 3 | ||||
-rw-r--r-- | test/gleam/dynamic_test.gleam | 14 |
3 files changed, 20 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index d7edea9..b21f991 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## Unreleased +- Fixed a bug where decoding a `List` from a `Dynamic` `Array` would fail. + ## v0.22.1 - 2022-06-27 - Fixed a bug where `big_string.concat` could crash. diff --git a/src/gleam_stdlib.mjs b/src/gleam_stdlib.mjs index dac8d58..a612367 100644 --- a/src/gleam_stdlib.mjs +++ b/src/gleam_stdlib.mjs @@ -576,6 +576,9 @@ export function tuple_get(data, index) { } export function decode_list(data) { + if (Array.isArray(data)) { + return new Ok(List.fromArray(data)); + } return List.isList(data) ? new Ok(data) : decoder_error("List", data); } diff --git a/test/gleam/dynamic_test.gleam b/test/gleam/dynamic_test.gleam index a1c15fe..8e9d4f7 100644 --- a/test/gleam/dynamic_test.gleam +++ b/test/gleam/dynamic_test.gleam @@ -756,6 +756,20 @@ pub fn shallow_list_test() { |> should.equal(Error([DecodeError(expected: "List", found: "Int", path: [])])) } +if javascript { + pub fn array_on_js_is_also_list_test() { + #() + |> dynamic.from + |> dynamic.shallow_list + |> should.equal(Ok([])) + + #(1, 2) + |> dynamic.from + |> dynamic.list(of: dynamic.int) + |> should.equal(Ok([1, 2])) + } +} + pub fn result_test() { Ok(1) |> dynamic.from |