From e184631fb0b8a688772dfa3571f7654ea868b391 Mon Sep 17 00:00:00 2001 From: Mike Fikes Date: Tue, 29 Nov 2022 11:04:40 -0500 Subject: [PATCH] CLJS-3392: datafy support for js/Error and ExceptionInfo --- src/main/cljs/clojure/datafy.cljs | 6 ++++++ src/test/cljs/clojure/datafy_test.cljs | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/main/cljs/clojure/datafy.cljs b/src/main/cljs/clojure/datafy.cljs index 6a969d8ae0..fa141f0385 100644 --- a/src/main/cljs/clojure/datafy.cljs +++ b/src/main/cljs/clojure/datafy.cljs @@ -41,6 +41,12 @@ (with-meta [(deref r)] (meta r))) (extend-protocol p/Datafiable + js/Error + (datafy [x] (Throwable->map x)) + + ExceptionInfo + (datafy [x] (Throwable->map x)) + Var (datafy [r] (datify-ref r)) diff --git a/src/test/cljs/clojure/datafy_test.cljs b/src/test/cljs/clojure/datafy_test.cljs index ff108d0cc8..b4a04fb45f 100644 --- a/src/test/cljs/clojure/datafy_test.cljs +++ b/src/test/cljs/clojure/datafy_test.cljs @@ -22,3 +22,14 @@ x (with-meta original {`clojure.core.protocols/datafy (fn [_] datafied)})] (is (= datafied (d/datafy x))) (is (= {:clojure.datafy/obj original} (meta (d/datafy x))))))) + +(deftest datafy-js-errors-test + (let [x (js/Error. "foo")] + (is (= (Throwable->map x) (d/datafy x)))) + ;; Ensure we can datafy objects that extend js/Error + (let [x (js/RangeError. "x must be between 1 and 5")] + (is (= (Throwable->map x) (d/datafy x))))) + +(deftest datafy-ex-info-test + (let [x (ex-info "foo" {:a 1} (ex-info "bar" {:b 2}))] + (is (= (Throwable->map x) (d/datafy x)))))