From 4cdbf54237feb9b7fb855599173528deb0313c16 Mon Sep 17 00:00:00 2001 From: tynanbe Date: Mon, 27 Jun 2022 15:49:50 -0500 Subject: Let `decode_list` succeed with arrays --- CHANGELOG.md | 3 +++ src/gleam_stdlib.mjs | 3 +++ test/gleam/dynamic_test.gleam | 14 ++++++++++++++ 3 files changed, 20 insertions(+) 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 -- cgit v1.2.3