aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md3
-rw-r--r--src/gleam_stdlib.mjs3
-rw-r--r--test/gleam/dynamic_test.gleam14
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