-
Notifications
You must be signed in to change notification settings - Fork 3
/
util.cljs
105 lines (96 loc) · 2.68 KB
/
util.cljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
(ns shadow.util
(:require-macros [shadow.util :as m])
(:require [cljs.core.async :as async])) ;; not really used here, but the go! macro needs this
(defn console-friendly [a]
(cond
(nil? a) "nil"
(keyword? a) (str a)
(string? a) a
(number? a) a
(satisfies? IPrintWithWriter a) (pr-str a)
:else a
))
(defn go! [& body]
(throw (ex-info "go! is a macro" {})))
(def console? (exists? js/console))
(defn log
([a1]
(when console?
(.log js/console
(console-friendly a1))))
([a1 a2]
(when console?
(.log js/console
(console-friendly a1)
(console-friendly a2))))
([a1 a2 a3]
(when console?
(.log js/console
(console-friendly a1)
(console-friendly a2)
(console-friendly a3))))
([a1 a2 a3 a4]
(when console?
(.log js/console
(console-friendly a1)
(console-friendly a2)
(console-friendly a3)
(console-friendly a4))))
([a1 a2 a3 a4 a5]
(when console?
(.log js/console
(console-friendly a1)
(console-friendly a2)
(console-friendly a3)
(console-friendly a4)
(console-friendly a5))))
([a1 a2 a3 a4 a5 a6]
(when console?
(.log js/console
(console-friendly a1)
(console-friendly a2)
(console-friendly a3)
(console-friendly a4)
(console-friendly a5)
(console-friendly a6))))
([a1 a2 a3 a4 a5 a6 & more]
(when console?
(.log js/console
(console-friendly a1)
(console-friendly a2)
(console-friendly a3)
(console-friendly a4)
(console-friendly a5)
(console-friendly a6)
"more:"
(pr-str more)))))
;; HAX
(comment
(def default-ex-info js/cljs.core.ex-info)
(set! (.. js/cljs -core -ex-info)
(fn shadow-ex-info
([msg map]
(m/log "EX-INFO:" msg map)
(default-ex-info msg map))
([msg map cause]
(m/log "EX-INFO:" msg map cause)
(default-ex-info msg map cause))
)))
(defn remove-from-vector [coll key]
(->> (map-indexed vector coll)
(reduce (fn [v [idx item]]
(if (= idx key)
v
(conj! v item)))
(transient []))
(persistent!)))
(defn remove-item-from-coll [coll key value]
(cond
(satisfies? IVector coll)
(remove-from-vector coll key)
(satisfies? IMap coll)
(dissoc coll key)
(satisfies? ISet coll)
(disj coll value)
:else (throw (ex-info "unknown coll type" {:coll coll :key key :value value}))
))