Hoplon with Datascript
David Meister edited this page Jan 29, 2017
·
1 revision
; Datascript/Javelin interop.
(ns datascript.javelin
(:require [datascript.core :as d]
[javelin.core :as j]))
(defn- conn-cell-from-db
"Mimics datascript conn-from-db but builds a compatible javelin cell"
[db]
{:pre [(d/db? db)]
:post [(d/conn? %) (j/cell? %)]}
(j/cell db :meta { :listeners (atom {})}))
(defn conn-cell
"Builds a fresh conn cell wrapping an empty db"
([]
(conn-cell {}))
([schema]
{:pre [(map? schema)]
:post [(d/conn? %) (j/cell? %) (= {} (-> % meta :listeners deref))]}
(conn-cell-from-db (d/empty-db schema))))
(defn conn-cell-with
[conn tx]
{:pre [(d/conn? conn) (coll? tx)]
:post [(d/conn? %) (j/cell? %)]}
(conn-cell-from-db
(d/db-with @conn tx)))
(defn conn-from-datoms
([datoms] (conn-from-datoms datoms {}))
([datoms schema]
(conn-cell-with (conn-cell schema) (or datoms []))))