|
2 | 2 | (:require [clojure.data :as data] |
3 | 3 | [clj-diff.core :as seq-diff])) |
4 | 4 |
|
5 | | -(declare local-diff) |
| 5 | +(declare diff) |
6 | 6 |
|
7 | 7 | (defrecord Mismatch [- +]) |
8 | 8 | (defrecord Deletion [-]) |
|
70 | 70 | (map-indexed |
71 | 71 | (fn [idx v] |
72 | 72 | (if (contains? replacements idx) |
73 | | - (local-diff v (get replacements idx)) |
| 73 | + (diff v (get replacements idx)) |
74 | 74 | v)) |
75 | 75 | s)) |
76 | 76 |
|
|
116 | 116 | (assoc (->Deletion k) (exp k)) |
117 | 117 |
|
118 | 118 | (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))) |
120 | 120 |
|
121 | 121 | (contains? ins idx) |
122 | 122 | (into (map (juxt ->Insertion (partial get act))) (get ins idx))) |
|
127 | 127 | exp-ks)))) |
128 | 128 |
|
129 | 129 | (defn- diff-atom [exp act] |
130 | | - (if (= exp act) |
| 130 | + (if #?(:clj (= exp act) |
| 131 | + :cljs (= (js->clj exp) (js->clj act))) |
131 | 132 | exp |
132 | | - (->Mismatch exp act))) |
| 133 | + ((->Mismatch exp act)))) |
133 | 134 |
|
134 | | -(defn local-diff [exp act] |
| 135 | +(defn diff [exp act] |
| 136 | + ;; (print "Hola from diff namespace")) |
135 | 137 | (if (= (data/equality-partition exp) (data/equality-partition act)) |
136 | 138 | (diff-similar exp act) |
137 | 139 | (diff-atom exp act))) |
|
149 | 151 | (if (.isArray (.getClass ^Object exp)) |
150 | 152 | (diff-seq exp act) |
151 | 153 | (diff-atom exp act)))}) |
152 | | - :cljs (extend-type object |
| 154 | + :cljs (extend-type js/Number |
153 | 155 | 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))))) |
157 | 169 |
|
158 | 170 | (extend-protocol Diff |
159 | 171 | #?(:clj java.util.List |
160 | | - :cljs cljs.core.list) |
| 172 | + :cljs cljs.core/List) |
161 | 173 | (diff-similar [exp act] (diff-seq exp act)) |
162 | 174 |
|
| 175 | + #?(:clj java.util.Vector |
| 176 | + :cljs cljs.core/PersistentVector) |
| 177 | + (diff-similar [exp act] (diff-seq exp act)) |
| 178 | + |
163 | 179 | #?(:clj java.util.Set |
164 | | - :cljs cljs.core.set) |
| 180 | + :cljs cljs.core/PersistentHashSet) |
165 | 181 | (diff-similar [exp act] |
166 | 182 | (let [exp-seq (seq exp) |
167 | 183 | act-seq (seq act)] |
168 | 184 | (set (diff-seq exp-seq (concat (filter act exp-seq) |
169 | 185 | (remove exp act-seq)))))) |
170 | 186 | #?(:clj java.util.Map |
171 | | - :cljs cljs.core.map) |
| 187 | + :cljs cljs.core/PersistentArrayMap) |
172 | 188 | (diff-similar [exp act] (diff-map exp act))) |
173 | 189 |
|
174 | 190 | (extend-protocol Undiff |
175 | 191 | #?(:clj java.util.List |
176 | | - :cljs cljs.core.list) |
| 192 | + :cljs cljs.core/List) |
177 | 193 | (left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s))) |
178 | 194 | (right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s))) |
179 | 195 |
|
180 | 196 | #?(:clj java.util.Set |
181 | | - :cljs cljs.core.set) |
| 197 | + :cljs cljs.core/PersistentHashSet) |
182 | 198 | (left-undiff [s] (set (left-undiff (seq s)))) |
183 | 199 | (right-undiff [s] (set (right-undiff (seq s)))) |
184 | 200 |
|
185 | 201 | #?(:clj java.util.Map |
186 | | - :cljs cljs.core.map) |
| 202 | + :cljs cljs.core/PersistentArrayMap) |
187 | 203 | (left-undiff [m] |
188 | 204 | (into {} |
189 | 205 | (comp (remove #(instance? Insertion (key %))) |
|
211 | 227 | (right-undiff [m] (identity m)))) |
212 | 228 |
|
213 | 229 | #?(:clj (extend Object Undiff {:left-undiff identity :right-undiff identity}) |
214 | | - :cljs (extend-type object Undiff |
| 230 | + :cljs (extend-type js/Number Undiff |
215 | 231 | (left-undiff [m] (identity m)) |
216 | 232 | (right-undiff [m] (identity m)))) |
0 commit comments