|
167 | 167 | Diff |
168 | 168 | (-diff-similar [x y] (diff-atom x y)))) |
169 | 169 |
|
| 170 | +#?(:cljs (extend-type js/Object |
| 171 | + Diff |
| 172 | + (-diff-similar [x y] (diff-atom (js->clj x) (js->clj y))))) |
| 173 | + |
170 | 174 | #?(:clj (extend Object |
171 | 175 | Diff |
172 | 176 | {:-diff-similar (fn [exp act] |
173 | 177 | (if (.isArray (.getClass ^Object exp)) |
174 | 178 | (diff-seq exp act) |
175 | 179 | (diff-atom exp act)))})) |
176 | 180 |
|
177 | | - |
178 | 181 | (extend-protocol Diff |
179 | 182 | #?(:clj java.util.List |
180 | 183 | :cljs cljs.core/List) |
|
184 | 187 | [cljs.core/PersistentVector |
185 | 188 | (-diff-similar [exp act] (diff-seq exp act)) |
186 | 189 |
|
| 190 | + cljs.core/EmptyList |
| 191 | + (-diff-similar [exp act] (diff-seq exp act)) |
| 192 | + |
187 | 193 | cljs.core/PersistentHashMap |
188 | | - (-diff-similar [exp act] (diff-map exp act))]) |
| 194 | + (-diff-similar [exp act] (diff-map exp act)) |
| 195 | + |
| 196 | + array |
| 197 | + (-diff-similar [exp act] (diff-seq exp act))]) |
189 | 198 |
|
190 | 199 | #?(:clj java.util.Set |
191 | 200 | :cljs cljs.core/PersistentHashSet) |
|
194 | 203 | act-seq (seq act)] |
195 | 204 | (set (diff-seq exp-seq (concat (filter act exp-seq) |
196 | 205 | (remove exp act-seq)))))) |
| 206 | + |
197 | 207 | #?(:clj java.util.Map |
198 | 208 | :cljs cljs.core/PersistentArrayMap) |
199 | 209 | (-diff-similar [exp act] (diff-map exp act))) |
|
204 | 214 | (-left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s))) |
205 | 215 | (-right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s))) |
206 | 216 |
|
| 217 | + #?(:cljs cljs.core/EmptyList) |
| 218 | + #?(:cljs (-left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s)))) |
| 219 | + #?(:cljs (-right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s)))) |
| 220 | + |
| 221 | + #?(:cljs cljs.core/PersistentVector) |
| 222 | + #?(:cljs (-left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s)))) |
| 223 | + #?(:cljs (-right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s)))) |
| 224 | + |
207 | 225 | #?(:clj java.util.Set |
208 | 226 | :cljs cljs.core/PersistentHashSet) |
209 | 227 | (-left-undiff [s] (set (left-undiff (seq s)))) |
210 | 228 | (-right-undiff [s] (set (right-undiff (seq s)))) |
211 | 229 |
|
| 230 | + #?(:cljs cljs.core/KeySeq) |
| 231 | + #?(:cljs (-left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s)))) |
| 232 | + #?(:cljs (-right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s)))) |
| 233 | + |
212 | 234 | #?(:clj java.util.Map |
213 | 235 | :cljs cljs.core/PersistentArrayMap) |
214 | 236 | (-left-undiff [m] |
|
222 | 244 | (map (juxt (comp right-undiff key) (comp right-undiff val)))) |
223 | 245 | m)) |
224 | 246 |
|
| 247 | + #?(:cljs cljs.core/PersistentHashMap) |
| 248 | + #?(:cljs (-left-undiff [m] |
| 249 | + (into {} |
| 250 | + (comp (remove #(instance? Insertion (key %))) |
| 251 | + (map (juxt (comp left-undiff key) (comp left-undiff val)))) |
| 252 | + m))) |
| 253 | + #?(:cljs (-right-undiff [m] |
| 254 | + (into {} |
| 255 | + (comp (remove #(instance? Deletion (key %))) |
| 256 | + (map (juxt (comp right-undiff key) (comp right-undiff val)))) |
| 257 | + m))) |
| 258 | + |
225 | 259 | Mismatch |
226 | 260 | (-left-undiff [m] (get m :-)) |
227 | 261 | (-right-undiff [m] (get m :+)) |
|
238 | 272 | (-right-undiff [m] m)) |
239 | 273 |
|
240 | 274 | #?(:clj (extend Object Undiff {:-left-undiff identity :-right-undiff identity})) |
| 275 | +#?(:cljs (extend-type cljs.core/UUID |
| 276 | + Undiff |
| 277 | + (-left-undiff [m] m) |
| 278 | + (-right-undiff [m] m))) |
| 279 | + |
| 280 | +#?(:cljs (extend-type js/Object |
| 281 | + Undiff |
| 282 | + (-left-undiff [m] m) |
| 283 | + (-right-undiff [m] m))) |
0 commit comments