From 917fc9446802f5c86f93072a070baeb8f4b73e59 Mon Sep 17 00:00:00 2001 From: Takashi AOKI Date: Wed, 24 Apr 2024 18:55:50 +0900 Subject: [PATCH] fix: deep-merge with nil args or values --- src/cljc/proton/core.cljc | 7 ++++--- test/proton/core_test.cljc | 8 ++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/cljc/proton/core.cljc b/src/cljc/proton/core.cljc index 8db146a..94f8844 100644 --- a/src/cljc/proton/core.cljc +++ b/src/cljc/proton/core.cljc @@ -198,7 +198,8 @@ "Recursively merges maps." [& maps] (letfn [(m [& xs] - (if (every? #(and (map? %) (not (record? %))) xs) - (apply merge-with m xs) - (last xs)))] + (let [xs (remove nil? xs)] + (if (every? #(and (map? %) (not (record? %))) xs) + (apply merge-with m xs) + (last xs))))] (reduce m maps))) diff --git a/test/proton/core_test.cljc b/test/proton/core_test.cljc index de019a2..c03a031 100644 --- a/test/proton/core_test.cljc +++ b/test/proton/core_test.cljc @@ -158,6 +158,14 @@ nil 3 7)) (deftest deep-merge-test + (is (= (core/deep-merge {:foo 1} nil) + {:foo 1})) + (is (= (core/deep-merge nil {:foo 1}) + {:foo 1})) + (is (= (core/deep-merge {:foo 1} {:foo nil}) + {:foo 1})) + (is (= (core/deep-merge {:foo nil} {:foo 1}) + {:foo 1})) (is (= (core/deep-merge {:foo {:bar 1}} {:foo {:baz 2}}) {:foo {:bar 1 :baz 2}})) (is (= (core/deep-merge {:foo {:bar 1}} {:baz 2})