Skip to content

Commit a1fa32b

Browse files
swannodettemfikes
andauthored
CLJS-3392: datafy support for js/Error and ExceptionInfo (#206)
Co-authored-by: Mike Fikes <[email protected]>
1 parent 07d2ebc commit a1fa32b

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

src/main/cljs/clojure/datafy.cljs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@
4141
(with-meta [(deref r)] (meta r)))
4242

4343
(extend-protocol p/Datafiable
44+
js/Error
45+
(datafy [x] (Throwable->map x))
46+
47+
ExceptionInfo
48+
(datafy [x] (Throwable->map x))
49+
4450
Var
4551
(datafy [r] (datify-ref r))
4652

src/test/cljs/clojure/datafy_test.cljs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,14 @@
2222
x (with-meta original {`clojure.core.protocols/datafy (fn [_] datafied)})]
2323
(is (= datafied (d/datafy x)))
2424
(is (= {:clojure.datafy/obj original} (meta (d/datafy x)))))))
25+
26+
(deftest datafy-js-errors-test
27+
(let [x (js/Error. "foo")]
28+
(is (= (Throwable->map x) (d/datafy x))))
29+
;; Ensure we can datafy objects that extend js/Error
30+
(let [x (js/RangeError. "x must be between 1 and 5")]
31+
(is (= (Throwable->map x) (d/datafy x)))))
32+
33+
(deftest datafy-ex-info-test
34+
(let [x (ex-info "foo" {:a 1} (ex-info "bar" {:b 2}))]
35+
(is (= (Throwable->map x) (d/datafy x)))))

0 commit comments

Comments
 (0)