forked from flocktory/wet
/
utils.cljc
56 lines (48 loc) · 1.27 KB
/
utils.cljc
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
(ns wet.impl.utils
#?(:clj (:import (java.util Date))))
#?(:cljs (defn- non-NaN [^number v] (when-not ^boolean (js/isNaN v) v)))
(defn safe-long
[v]
#?(:clj (try
(cond
(number? v) (.longValue v)
:else (Long/valueOf v))
(catch IllegalArgumentException _ nil)
(catch NumberFormatException _ nil))
:cljs (non-NaN (js/parseInt v 10))))
(defn safe-num
([v] (safe-num v nil))
([v fallback]
#?(:clj (or (cond
(number? v) v
(string? v) (cond
(re-find #"^-?\d+$" v) (Long. v)
(re-find #"^-?(\d+\.\d*|\d*\.\d+)$" v) (Double. v)))
fallback)
:cljs (or (non-NaN (js/Number. v)) fallback))))
(defn safe-date
[v]
(cond
(integer? v)
(let [v* (if (zero? (quot v 1E10)) (* v 1000) v)]
#?(:clj (Date. v*)
:cljs (js/Date. v*)))
(instance?
#?(:clj Date
:cljs js/Date)
v)
v
(= "now" v)
#?(:clj (Date.)
:cljs (js/Date.))
(string? v)
#?(:clj (try
(Date. v)
(catch IllegalArgumentException _ nil))
:cljs (js/Date. v))))
(defn safe-str
[v]
(when v
(if (keyword? v)
(name v)
(str v))))