Part 2: extend 'cljify' implementation to round-trip records like TempId.
This commit is contained in:
parent
0b6ac81ed5
commit
c7d0a8596b
1 changed files with 24 additions and 4 deletions
|
@ -1,7 +1,27 @@
|
|||
(ns datomish.cljify)
|
||||
|
||||
(defn cljify
|
||||
"In node, equivalent to `(js->clj o :keywordize-keys true).
|
||||
See <http://dev.clojure.org/jira/browse/CLJS-439?focusedCommentId=43909>."
|
||||
[o]
|
||||
(js->clj o :keywordize-keys true))
|
||||
"In node, equivalent to `(js->clj o :keywordize-keys true),
|
||||
but successfully passes Clojure Records through. This allows JS API
|
||||
callers to round-trip values they receive from ClojureScript APIs."
|
||||
[x]
|
||||
(if (record? x)
|
||||
x
|
||||
(cond
|
||||
(satisfies? IEncodeClojure x)
|
||||
(-js->clj x (apply array-map {:keywordize-keys true}))
|
||||
|
||||
(seq? x)
|
||||
(doall (map cljify x))
|
||||
|
||||
(coll? x)
|
||||
(into (empty x) (map cljify x))
|
||||
|
||||
(array? x)
|
||||
(vec (map cljify x))
|
||||
|
||||
(identical? (type x) js/Object)
|
||||
(into {} (for [k (js-keys x)]
|
||||
[(keyword k) (cljify (aget x k))]))
|
||||
|
||||
:else x)))
|
||||
|
|
Loading…
Reference in a new issue