Skip to content

Commit b6c9546

Browse files
committed
Adding handlers and fixing errors
1 parent 70a2958 commit b6c9546

File tree

3 files changed

+49
-29
lines changed

3 files changed

+49
-29
lines changed

src/lambdaisland/deep_diff.cljc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
(:require [lambdaisland.deep-diff.diff :as diff]
33
[lambdaisland.deep-diff.printer :as printer]))
44

5-
(defn diff
5+
(defn call-diff
66
"Compare two values recursively.
77
88
The result is a data structure similar to the ones passed in, but with

src/lambdaisland/deep_diff/diff.cljc

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
(:require [clojure.data :as data]
33
[clj-diff.core :as seq-diff]))
44

5-
(declare local-diff)
5+
(declare diff)
66

77
(defrecord Mismatch [- +])
88
(defrecord Deletion [-])
@@ -70,7 +70,7 @@
7070
(map-indexed
7171
(fn [idx v]
7272
(if (contains? replacements idx)
73-
(local-diff v (get replacements idx))
73+
(diff v (get replacements idx))
7474
v))
7575
s))
7676

@@ -116,7 +116,7 @@
116116
(assoc (->Deletion k) (exp k))
117117

118118
(not (contains? del idx))
119-
(assoc k (local-diff (get exp k) (get act k)))
119+
(assoc k (diff (get exp k) (get act k)))
120120

121121
(contains? ins idx)
122122
(into (map (juxt ->Insertion (partial get act))) (get ins idx)))
@@ -127,11 +127,13 @@
127127
exp-ks))))
128128

129129
(defn- diff-atom [exp act]
130-
(if (= exp act)
130+
(if #?(:clj (= exp act)
131+
:cljs (= (js->clj exp) (js->clj act)))
131132
exp
132-
(->Mismatch exp act)))
133+
((->Mismatch exp act))))
133134

134-
(defn local-diff [exp act]
135+
(defn diff [exp act]
136+
;; (print "Hola from diff namespace"))
135137
(if (= (data/equality-partition exp) (data/equality-partition act))
136138
(diff-similar exp act)
137139
(diff-atom exp act)))
@@ -149,41 +151,55 @@
149151
(if (.isArray (.getClass ^Object exp))
150152
(diff-seq exp act)
151153
(diff-atom exp act)))})
152-
:cljs (extend-type object
154+
:cljs (extend-type js/Number
153155
Diff
154-
(diff-similar [x y] (if (array? x)
155-
(diff-seq x y)
156-
(diff-atom x y)))))
156+
(diff-similar [x y] (diff-atom (js/Number x) (js/Number y)))))
157+
158+
#?(:cljs (extend-type js/String
159+
Diff
160+
(diff-similar [x y] (diff-atom (js/String x) (js/String y)))))
161+
162+
#?(:cljs (extend-type js/Boolean
163+
Diff
164+
(diff-similar [x y] (diff-atom (js/Boolean x) (js/Boolean y)))))
165+
166+
#?(:cljs (extend-type js/Date
167+
Diff
168+
(diff-similar [x y] (diff-atom (js/Date x) (js/Date y)))))
157169

158170
(extend-protocol Diff
159171
#?(:clj java.util.List
160-
:cljs cljs.core.list)
172+
:cljs cljs.core/List)
161173
(diff-similar [exp act] (diff-seq exp act))
162174

175+
#?(:clj java.util.Vector
176+
:cljs cljs.core/PersistentVector)
177+
(diff-similar [exp act] (diff-seq exp act))
178+
163179
#?(:clj java.util.Set
164-
:cljs cljs.core.set)
180+
:cljs cljs.core/PersistentHashSet)
165181
(diff-similar [exp act]
166182
(let [exp-seq (seq exp)
167183
act-seq (seq act)]
168184
(set (diff-seq exp-seq (concat (filter act exp-seq)
169185
(remove exp act-seq))))))
170186
#?(:clj java.util.Map
171-
:cljs cljs.core.map)
187+
:cljs cljs.core/PersistentArrayMap)
172188
(diff-similar [exp act] (diff-map exp act)))
173189

174190
(extend-protocol Undiff
175191
#?(:clj java.util.List
176-
:cljs cljs.core.list)
192+
:cljs cljs.core/List)
177193
(left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s)))
178194
(right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s)))
179195

180196
#?(:clj java.util.Set
181-
:cljs cljs.core.set)
197+
:cljs cljs.core/PersistentHashSet)
182198
(left-undiff [s] (set (left-undiff (seq s))))
183199
(right-undiff [s] (set (right-undiff (seq s))))
184200

185201
#?(:clj java.util.Map
186-
:cljs cljs.core.map)
202+
:cljs cljs.core/PersistentArrayMap)
187203
(left-undiff [m]
188204
(into {}
189205
(comp (remove #(instance? Insertion (key %)))
@@ -211,6 +227,6 @@
211227
(right-undiff [m] (identity m))))
212228

213229
#?(:clj (extend Object Undiff {:left-undiff identity :right-undiff identity})
214-
:cljs (extend-type object Undiff
230+
:cljs (extend-type js/Number Undiff
215231
(left-undiff [m] (identity m))
216232
(right-undiff [m] (identity m))))

src/lambdaisland/deep_diff/printer.cljc

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#?@(:cljs
1010
[[cljs-time.coerce :refer [from-date]]
1111
[cljs-time.format :refer [formatter unparse]]
12+
[goog.string :refer [format]]
1213
[goog.object :as gobj]]))
1314
#?(:clj (:import (java.text SimpleDateFormat)
1415
(java.util TimeZone)
@@ -76,27 +77,30 @@
7677
(if (coll? v) (:map-coll-separator printer) " ")
7778
(puget/format-doc printer v)]))))
7879

79-
(def ^:private ^ThreadLocal thread-local-utc-date-format
80-
(proxy [ThreadLocal] []
81-
(initialValue []
82-
#?(:clj (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00")
83-
(.setTimeZone (TimeZone/getTimeZone "GMT")))
84-
:cljs (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00"))))))
80+
81+
#?(:clj (def ^:private ^ThreadLocal thread-local-utc-date-format
82+
(proxy [ThreadLocal] []
83+
(initialValue []
84+
(doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00")
85+
(.setTimeZone (TimeZone/getTimeZone "GMT"))))))
86+
:cljs (def thread-local-utc-date-format
87+
(doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00"))))
8588

8689
(def ^:private print-date
8790
(puget/tagged-handler
8891
'inst
8992
#?(:clj #(.format ^SimpleDateFormat (.get thread-local-utc-date-format) %)
90-
:cljs (fun [input-date]
93+
:cljs (fn [input-date]
9194
(let [dt (from-date input-date)]
9295
(cljs-time.format/unparse thread-local-utc-date-format dt))))))
9396

94-
(def ^:private ^ThreadLocal thread-local-utc-timestamp-format
97+
#?(:clj (def ^:private ^ThreadLocal thread-local-utc-timestamp-format
9598
(proxy [ThreadLocal] []
9699
(initialValue []
97-
#?(:clj (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss")
98-
(.setTimeZone (TimeZone/getTimeZone "GMT")))
99-
:cljs (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss"))))))
100+
(doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss")
101+
(.setTimeZone (TimeZone/getTimeZone "GMT"))))))
102+
:cljs (def thread-local-utc-timestamp-format
103+
(doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss"))))
100104

101105
(def ^:private print-timestamp
102106
(puget/tagged-handler

0 commit comments

Comments
 (0)