mini-program-cljs
Version:
1 lines • 183 kB
JSON
["^ ","~:output",["^ ","~:js","goog.provide('datascript.core');\ndatascript.core.tx0 = (536870912);\n/**\n * Retrieves an entity by its id from database. Entities are lazy map-like structures to navigate DataScript database content.\n * \n * For `eid` pass entity id or lookup attr:\n * \n * (entity db 1)\n * (entity db [:unique-attr :value])\n * \n * If entity does not exist, `nil` is returned:\n * \n * (entity db 100500) ; => nil\n * \n * Creating an entity by id is very cheap, almost no-op, as attr access is on-demand:\n * \n * (entity db 1) ; => {:db/id 1}\n * \n * Entity attributes can be lazily accessed through key lookups:\n * \n * (:attr (entity db 1)) ; => :value\n * (get (entity db 1) :attr) ; => :value\n * \n * Cardinality many attributes are returned sequences:\n * \n * (:attrs (entity db 1)) ; => [:v1 :v2 :v3]\n * \n * Reference attributes are returned as another entities:\n * \n * (:ref (entity db 1)) ; => {:db/id 2}\n * (:ns/ref (entity db 1)) ; => {:db/id 2}\n * \n * References can be walked backwards by prepending `_` to name part of an attribute:\n * \n * (:_ref (entity db 2)) ; => [{:db/id 1}]\n * (:ns/_ref (entity db 2)) ; => [{:db/id 1}]\n * \n * Reverse reference lookup returns sequence of entities unless attribute is marked as `:db/component`:\n * \n * (:_component-ref (entity db 2)) ; => {:db/id 1}\n * \n * Entity gotchas:\n * \n * - Entities print as map, but are not exactly maps (they have compatible get interface though).\n * - Entities are effectively immutable “views” into a particular version of a database.\n * - Entities retain reference to the whole database.\n * - You can’t change database through entities, only read.\n * - Creating an entity by id is very cheap, almost no-op (attributes are looked up on demand).\n * - Comparing entities just compares their ids. Be careful when comparing entities taken from differenct dbs or from different versions of the same db.\n * - Accessed entity attributes are cached on entity itself (except backward references).\n * - When printing, only cached attributes (the ones you have accessed before) are printed. See [[touch]].\n */\ndatascript.core.entity = datascript.impl.entity.entity;\n/**\n * Given lookup ref `[unique-attr value]`, returns numberic entity id.\n * \n * If entity does not exist, returns `nil`.\n * \n * For numeric `eid` returns `eid` itself (does not check for entity existence in that case).\n */\ndatascript.core.entid = datascript.db.entid;\n/**\n * Returns a db that entity was created from.\n */\ndatascript.core.entity_db = (function datascript$core$entity_db(entity){\n\nreturn entity.db;\n});\n/**\n * Forces all entity attributes to be eagerly fetched and cached. Only usable for debug output.\n * \n * Usage:\n * \n * ```\n * (entity db 1) ; => {:db/id 1}\n * (touch (entity db 1)) ; => {:db/id 1, :dislikes [:pie], :likes [:pizza]}\n * ```\n */\ndatascript.core.touch = datascript.impl.entity.touch;\n/**\n * Fetches data from database using recursive declarative description. See [docs.datomic.com/on-prem/pull.html](https://docs.datomic.com/on-prem/pull.html).\n * \n * Unlike [[entity]], returns plain Clojure map (not lazy).\n * \n * Usage:\n * \n * (pull db [:db/id, :name, :likes, {:friends [:db/id :name]}] 1)\n * ; => {:db/id 1,\n * ; :name \"Ivan\"\n * ; :likes [:pizza]\n * ; :friends [{:db/id 2, :name \"Oleg\"}]}\n */\ndatascript.core.pull = datascript.pull_api.pull;\n/**\n * Same as [[pull]], but accepts sequence of ids and returns sequence of maps.\n * \n * Usage:\n * \n * ```\n * (pull-many db [:db/id :name] [1 2])\n * ; => [{:db/id 1, :name \"Ivan\"}\n * ; {:db/id 2, :name \"Oleg\"}]\n * ```\n */\ndatascript.core.pull_many = datascript.pull_api.pull_many;\n/**\n * Executes a datalog query. See [docs.datomic.com/on-prem/query.html](https://docs.datomic.com/on-prem/query.html).\n * \n * Usage:\n * \n * ```\n * (q '[:find ?value\n * :where [_ :likes ?value]]\n * db)\n * ; => #{[\"fries\"] [\"candy\"] [\"pie\"] [\"pizza\"]}\n * ```\n */\ndatascript.core.q = datascript.query.q;\n/**\n * Creates an empty database with an optional schema.\n * \n * Usage:\n * \n * ```\n * (empty-db) ; => #datascript/DB {:schema {}, :datoms []}\n * \n * (empty-db {:likes {:db/cardinality :db.cardinality/many}})\n * ; => #datascript/DB {:schema {:likes {:db/cardinality :db.cardinality/many}}\n * ; :datoms []}\n * ```\n */\ndatascript.core.empty_db = datascript.db.empty_db;\n/**\n * Returns `true` if the given value is an immutable database, `false` otherwise.\n */\ndatascript.core.db_QMARK_ = datascript.db.db_QMARK_;\n/**\n * Low-level fn to create raw datoms.\n * \n * Optionally with transaction id (number) and `added` flag (`true` for addition, `false` for retraction).\n * \n * See also [[init-db]].\n */\ndatascript.core.datom = datascript.db.datom;\n/**\n * Returns `true` if the given value is a datom, `false` otherwise.\n */\ndatascript.core.datom_QMARK_ = datascript.db.datom_QMARK_;\n/**\n * Low-level fn for creating database quickly from a trusted sequence of datoms.\n * \n * Does no validation on inputs, so `datoms` must be well-formed and match schema.\n * \n * Used internally in db (de)serialization. See also [[datom]].\n */\ndatascript.core.init_db = datascript.db.init_db;\n/**\n * Returns `true` if this database was filtered using [[filter]], `false` otherwise.\n */\ndatascript.core.is_filtered = (function datascript$core$is_filtered(x){\nreturn (x instanceof datascript.db.FilteredDB);\n});\n/**\n * Returns a view over database that has same interface but only includes datoms for which the `(pred db datom)` is true. Can be applied multiple times.\n * \n * Filtered DB gotchas:\n * \n * - All operations on filtered database are proxied to original DB, then filter pred is applied.\n * - Not cached. You pay filter penalty every time.\n * - Supports entities, pull, queries, index access.\n * - Does not support [[with]] and [[db-with]].\n */\ndatascript.core.filter = (function datascript$core$filter(db,pred){\n\nif(datascript.core.is_filtered(db)){\nvar fdb = db;\nvar orig_pred = fdb.pred;\nvar orig_db = fdb.unfiltered_db;\nreturn (new datascript.db.FilteredDB(orig_db,(function (p1__25488_SHARP_){\nvar and__4174__auto__ = (orig_pred.cljs$core$IFn$_invoke$arity$1 ? orig_pred.cljs$core$IFn$_invoke$arity$1(p1__25488_SHARP_) : orig_pred.call(null,p1__25488_SHARP_));\nif(cljs.core.truth_(and__4174__auto__)){\nreturn (pred.cljs$core$IFn$_invoke$arity$2 ? pred.cljs$core$IFn$_invoke$arity$2(orig_db,p1__25488_SHARP_) : pred.call(null,orig_db,p1__25488_SHARP_));\n} else {\nreturn and__4174__auto__;\n}\n}),cljs.core.atom.cljs$core$IFn$_invoke$arity$1((0)),null,null,null));\n} else {\nreturn (new datascript.db.FilteredDB(db,(function (p1__25489_SHARP_){\nreturn (pred.cljs$core$IFn$_invoke$arity$2 ? pred.cljs$core$IFn$_invoke$arity$2(db,p1__25489_SHARP_) : pred.call(null,db,p1__25489_SHARP_));\n}),cljs.core.atom.cljs$core$IFn$_invoke$arity$1((0)),null,null,null));\n}\n});\n/**\n * Same as [[transact!]], but applies to an immutable database value. Returns transaction report (see [[transact!]]).\n */\ndatascript.core.with$ = (function datascript$core$with(var_args){\nvar G__25491 = arguments.length;\nswitch (G__25491) {\ncase 2:\nreturn datascript.core.with$.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ncase 3:\nreturn datascript.core.with$.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));\n\nbreak;\ndefault:\nthrow (new Error([\"Invalid arity: \",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));\n\n}\n});\n\n(datascript.core.with$.cljs$core$IFn$_invoke$arity$2 = (function (db,tx_data){\nreturn datascript.core.with$.cljs$core$IFn$_invoke$arity$3(db,tx_data,null);\n}));\n\n(datascript.core.with$.cljs$core$IFn$_invoke$arity$3 = (function (db,tx_data,tx_meta){\n\nif(datascript.core.is_filtered(db)){\nthrow cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2(\"Filtered DB cannot be modified\",new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"error\",\"error\",-978969032),new cljs.core.Keyword(\"transaction\",\"filtered\",\"transaction/filtered\",1699706605)], null));\n} else {\nreturn datascript.db.transact_tx_data(datascript.db.map__GT_TxReport(new cljs.core.PersistentArrayMap(null, 5, [new cljs.core.Keyword(null,\"db-before\",\"db-before\",-553691536),db,new cljs.core.Keyword(null,\"db-after\",\"db-after\",-571884666),db,new cljs.core.Keyword(null,\"tx-data\",\"tx-data\",934159761),cljs.core.PersistentVector.EMPTY,new cljs.core.Keyword(null,\"tempids\",\"tempids\",1767509089),cljs.core.PersistentArrayMap.EMPTY,new cljs.core.Keyword(null,\"tx-meta\",\"tx-meta\",1159283194),tx_meta], null)),tx_data);\n}\n}));\n\n(datascript.core.with$.cljs$lang$maxFixedArity = 3);\n\n/**\n * Applies transaction to an immutable db value, returning new immutable db value. Same as `(:db-after (with db tx-data))`.\n */\ndatascript.core.db_with = (function datascript$core$db_with(db,tx_data){\n\nreturn new cljs.core.Keyword(null,\"db-after\",\"db-after\",-571884666).cljs$core$IFn$_invoke$arity$1(datascript.core.with$.cljs$core$IFn$_invoke$arity$2(db,tx_data));\n});\n/**\n * Index lookup. Returns a sequence of datoms (lazy iterator over actual DB index) which components (e, a, v) match passed arguments.\n * \n * Datoms are sorted in index sort order. Possible `index` values are: `:eavt`, `:aevt`, `:avet`.\n * \n * Usage:\n * \n * ; find all datoms for entity id == 1 (any attrs and values)\n * ; sort by attribute, then value\n * (datoms db :eavt 1)\n * ; => (#datascript/Datom [1 :friends 2]\n * ; #datascript/Datom [1 :likes \"fries\"]\n * ; #datascript/Datom [1 :likes \"pizza\"]\n * ; #datascript/Datom [1 :name \"Ivan\"])\n * \n * ; find all datoms for entity id == 1 and attribute == :likes (any values)\n * ; sorted by value\n * (datoms db :eavt 1 :likes)\n * ; => (#datascript/Datom [1 :likes \"fries\"]\n * ; #datascript/Datom [1 :likes \"pizza\"])\n * \n * ; find all datoms for entity id == 1, attribute == :likes and value == \"pizza\"\n * (datoms db :eavt 1 :likes \"pizza\")\n * ; => (#datascript/Datom [1 :likes \"pizza\"])\n * \n * ; find all datoms for attribute == :likes (any entity ids and values)\n * ; sorted by entity id, then value\n * (datoms db :aevt :likes)\n * ; => (#datascript/Datom [1 :likes \"fries\"]\n * ; #datascript/Datom [1 :likes \"pizza\"]\n * ; #datascript/Datom [2 :likes \"candy\"]\n * ; #datascript/Datom [2 :likes \"pie\"]\n * ; #datascript/Datom [2 :likes \"pizza\"])\n * \n * ; find all datoms that have attribute == `:likes` and value == `\"pizza\"` (any entity id)\n * ; `:likes` must be a unique attr, reference or marked as `:db/index true`\n * (datoms db :avet :likes \"pizza\")\n * ; => (#datascript/Datom [1 :likes \"pizza\"]\n * ; #datascript/Datom [2 :likes \"pizza\"])\n * \n * ; find all datoms sorted by entity id, then attribute, then value\n * (datoms db :eavt) ; => (...)\n * \n * Useful patterns:\n * \n * ; get all values of :db.cardinality/many attribute\n * (->> (datoms db :eavt eid attr) (map :v))\n * \n * ; lookup entity ids by attribute value\n * (->> (datoms db :avet attr value) (map :e))\n * \n * ; find all entities with a specific attribute\n * (->> (datoms db :aevt attr) (map :e))\n * \n * ; find “singleton” entity by its attr\n * (->> (datoms db :aevt attr) first :e)\n * \n * ; find N entities with lowest attr value (e.g. 10 earliest posts)\n * (->> (datoms db :avet attr) (take N))\n * \n * ; find N entities with highest attr value (e.g. 10 latest posts)\n * (->> (datoms db :avet attr) (reverse) (take N))\n * \n * Gotchas:\n * \n * - Index lookup is usually more efficient than doing a query with a single clause.\n * - Resulting iterator is calculated in constant time and small constant memory overhead.\n * - Iterator supports efficient `first`, `next`, `reverse`, `seq` and is itself a sequence.\n * - Will not return datoms that are not part of the index (e.g. attributes with no `:db/index` in schema when querying `:avet` index).\n * - `:eavt` and `:aevt` contain all datoms.\n * - `:avet` only contains datoms for references, `:db/unique` and `:db/index` attributes.\n */\ndatascript.core.datoms = (function datascript$core$datoms(var_args){\nvar G__25494 = arguments.length;\nswitch (G__25494) {\ncase 2:\nreturn datascript.core.datoms.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ncase 3:\nreturn datascript.core.datoms.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));\n\nbreak;\ncase 4:\nreturn datascript.core.datoms.cljs$core$IFn$_invoke$arity$4((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]));\n\nbreak;\ncase 5:\nreturn datascript.core.datoms.cljs$core$IFn$_invoke$arity$5((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]),(arguments[(4)]));\n\nbreak;\ncase 6:\nreturn datascript.core.datoms.cljs$core$IFn$_invoke$arity$6((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]),(arguments[(4)]),(arguments[(5)]));\n\nbreak;\ndefault:\nthrow (new Error([\"Invalid arity: \",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));\n\n}\n});\n\n(datascript.core.datoms.cljs$core$IFn$_invoke$arity$2 = (function (db,index){\n\nreturn datascript.db._datoms(db,index,cljs.core.PersistentVector.EMPTY);\n}));\n\n(datascript.core.datoms.cljs$core$IFn$_invoke$arity$3 = (function (db,index,c1){\n\nreturn datascript.db._datoms(db,index,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [c1], null));\n}));\n\n(datascript.core.datoms.cljs$core$IFn$_invoke$arity$4 = (function (db,index,c1,c2){\n\nreturn datascript.db._datoms(db,index,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [c1,c2], null));\n}));\n\n(datascript.core.datoms.cljs$core$IFn$_invoke$arity$5 = (function (db,index,c1,c2,c3){\n\nreturn datascript.db._datoms(db,index,new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [c1,c2,c3], null));\n}));\n\n(datascript.core.datoms.cljs$core$IFn$_invoke$arity$6 = (function (db,index,c1,c2,c3,c4){\n\nreturn datascript.db._datoms(db,index,new cljs.core.PersistentVector(null, 4, 5, cljs.core.PersistentVector.EMPTY_NODE, [c1,c2,c3,c4], null));\n}));\n\n(datascript.core.datoms.cljs$lang$maxFixedArity = 6);\n\n/**\n * Similar to [[datoms]], but will return datoms starting from specified components and including rest of the database until the end of the index.\n * \n * If no datom matches passed arguments exactly, iterator will start from first datom that could be considered “greater” in index order.\n * \n * Usage:\n * \n * (seek-datoms db :eavt 1)\n * ; => (#datascript/Datom [1 :friends 2]\n * ; #datascript/Datom [1 :likes \"fries\"]\n * ; #datascript/Datom [1 :likes \"pizza\"]\n * ; #datascript/Datom [1 :name \"Ivan\"]\n * ; #datascript/Datom [2 :likes \"candy\"]\n * ; #datascript/Datom [2 :likes \"pie\"]\n * ; #datascript/Datom [2 :likes \"pizza\"])\n * \n * (seek-datoms db :eavt 1 :name)\n * ; => (#datascript/Datom [1 :name \"Ivan\"]\n * ; #datascript/Datom [2 :likes \"candy\"]\n * ; #datascript/Datom [2 :likes \"pie\"]\n * ; #datascript/Datom [2 :likes \"pizza\"])\n * \n * (seek-datoms db :eavt 2) \n * ; => (#datascript/Datom [2 :likes \"candy\"]\n * ; #datascript/Datom [2 :likes \"pie\"]\n * ; #datascript/Datom [2 :likes \"pizza\"])\n * \n * ; no datom [2 :likes \"fish\"], so starts with one immediately following such in index\n * (seek-datoms db :eavt 2 :likes \"fish\")\n * ; => (#datascript/Datom [2 :likes \"pie\"]\n * ; #datascript/Datom [2 :likes \"pizza\"])\n */\ndatascript.core.seek_datoms = (function datascript$core$seek_datoms(var_args){\nvar G__25497 = arguments.length;\nswitch (G__25497) {\ncase 2:\nreturn datascript.core.seek_datoms.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ncase 3:\nreturn datascript.core.seek_datoms.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));\n\nbreak;\ncase 4:\nreturn datascript.core.seek_datoms.cljs$core$IFn$_invoke$arity$4((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]));\n\nbreak;\ncase 5:\nreturn datascript.core.seek_datoms.cljs$core$IFn$_invoke$arity$5((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]),(arguments[(4)]));\n\nbreak;\ncase 6:\nreturn datascript.core.seek_datoms.cljs$core$IFn$_invoke$arity$6((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]),(arguments[(4)]),(arguments[(5)]));\n\nbreak;\ndefault:\nthrow (new Error([\"Invalid arity: \",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));\n\n}\n});\n\n(datascript.core.seek_datoms.cljs$core$IFn$_invoke$arity$2 = (function (db,index){\n\nreturn datascript.db._seek_datoms(db,index,cljs.core.PersistentVector.EMPTY);\n}));\n\n(datascript.core.seek_datoms.cljs$core$IFn$_invoke$arity$3 = (function (db,index,c1){\n\nreturn datascript.db._seek_datoms(db,index,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [c1], null));\n}));\n\n(datascript.core.seek_datoms.cljs$core$IFn$_invoke$arity$4 = (function (db,index,c1,c2){\n\nreturn datascript.db._seek_datoms(db,index,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [c1,c2], null));\n}));\n\n(datascript.core.seek_datoms.cljs$core$IFn$_invoke$arity$5 = (function (db,index,c1,c2,c3){\n\nreturn datascript.db._seek_datoms(db,index,new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [c1,c2,c3], null));\n}));\n\n(datascript.core.seek_datoms.cljs$core$IFn$_invoke$arity$6 = (function (db,index,c1,c2,c3,c4){\n\nreturn datascript.db._seek_datoms(db,index,new cljs.core.PersistentVector(null, 4, 5, cljs.core.PersistentVector.EMPTY_NODE, [c1,c2,c3,c4], null));\n}));\n\n(datascript.core.seek_datoms.cljs$lang$maxFixedArity = 6);\n\n/**\n * Same as [[seek-datoms]], but goes backwards until the beginning of the index.\n */\ndatascript.core.rseek_datoms = (function datascript$core$rseek_datoms(var_args){\nvar G__25499 = arguments.length;\nswitch (G__25499) {\ncase 2:\nreturn datascript.core.rseek_datoms.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ncase 3:\nreturn datascript.core.rseek_datoms.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));\n\nbreak;\ncase 4:\nreturn datascript.core.rseek_datoms.cljs$core$IFn$_invoke$arity$4((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]));\n\nbreak;\ncase 5:\nreturn datascript.core.rseek_datoms.cljs$core$IFn$_invoke$arity$5((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]),(arguments[(4)]));\n\nbreak;\ncase 6:\nreturn datascript.core.rseek_datoms.cljs$core$IFn$_invoke$arity$6((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]),(arguments[(4)]),(arguments[(5)]));\n\nbreak;\ndefault:\nthrow (new Error([\"Invalid arity: \",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));\n\n}\n});\n\n(datascript.core.rseek_datoms.cljs$core$IFn$_invoke$arity$2 = (function (db,index){\n\nreturn datascript.db._rseek_datoms(db,index,cljs.core.PersistentVector.EMPTY);\n}));\n\n(datascript.core.rseek_datoms.cljs$core$IFn$_invoke$arity$3 = (function (db,index,c1){\n\nreturn datascript.db._rseek_datoms(db,index,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [c1], null));\n}));\n\n(datascript.core.rseek_datoms.cljs$core$IFn$_invoke$arity$4 = (function (db,index,c1,c2){\n\nreturn datascript.db._rseek_datoms(db,index,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [c1,c2], null));\n}));\n\n(datascript.core.rseek_datoms.cljs$core$IFn$_invoke$arity$5 = (function (db,index,c1,c2,c3){\n\nreturn datascript.db._rseek_datoms(db,index,new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [c1,c2,c3], null));\n}));\n\n(datascript.core.rseek_datoms.cljs$core$IFn$_invoke$arity$6 = (function (db,index,c1,c2,c3,c4){\n\nreturn datascript.db._rseek_datoms(db,index,new cljs.core.PersistentVector(null, 4, 5, cljs.core.PersistentVector.EMPTY_NODE, [c1,c2,c3,c4], null));\n}));\n\n(datascript.core.rseek_datoms.cljs$lang$maxFixedArity = 6);\n\n/**\n * Returns part of `:avet` index between `[_ attr start]` and `[_ attr end]` in AVET sort order.\n * \n * Same properties as [[datoms]].\n * \n * `attr` must be a reference, unique attribute or marked as `:db/index true`.\n * \n * Usage:\n * \n * (index-range db :likes \"a\" \"zzzzzzzzz\")\n * ; => (#datascript/Datom [2 :likes \"candy\"]\n * ; #datascript/Datom [1 :likes \"fries\"]\n * ; #datascript/Datom [2 :likes \"pie\"]\n * ; #datascript/Datom [1 :likes \"pizza\"]\n * ; #datascript/Datom [2 :likes \"pizza\"])\n * \n * (index-range db :likes \"egg\" \"pineapple\")\n * ; => (#datascript/Datom [1 :likes \"fries\"]\n * ; #datascript/Datom [2 :likes \"pie\"])\n * \n * Useful patterns:\n * \n * ; find all entities with age in a specific range (inclusive)\n * (->> (index-range db :age 18 60) (map :e))\n */\ndatascript.core.index_range = (function datascript$core$index_range(db,attr,start,end){\n\nreturn datascript.db._index_range(db,attr,start,end);\n});\n/**\n * Returns `true` if this is a connection to a DataScript db, `false` otherwise.\n */\ndatascript.core.conn_QMARK_ = (function datascript$core$conn_QMARK_(conn){\nif((((!((conn == null))))?(((((conn.cljs$lang$protocol_mask$partition0$ & (32768))) || ((cljs.core.PROTOCOL_SENTINEL === conn.cljs$core$IDeref$))))?true:(((!conn.cljs$lang$protocol_mask$partition0$))?cljs.core.native_satisfies_QMARK_(cljs.core.IDeref,conn):false)):cljs.core.native_satisfies_QMARK_(cljs.core.IDeref,conn))){\nreturn datascript.db.db_QMARK_(cljs.core.deref(conn));\n} else {\nreturn false;\n}\n});\n/**\n * Creates a mutable reference to a given immutable database. See [[create-conn]].\n */\ndatascript.core.conn_from_db = (function datascript$core$conn_from_db(db){\nreturn cljs.core.atom.cljs$core$IFn$_invoke$arity$variadic(db,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([new cljs.core.Keyword(null,\"meta\",\"meta\",1499536964),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"listeners\",\"listeners\",394544445),cljs.core.atom.cljs$core$IFn$_invoke$arity$1(cljs.core.PersistentArrayMap.EMPTY)], null)], 0));\n});\n/**\n * Creates an empty DB and a mutable reference to it. See [[create-conn]].\n */\ndatascript.core.conn_from_datoms = (function datascript$core$conn_from_datoms(var_args){\nvar G__25511 = arguments.length;\nswitch (G__25511) {\ncase 1:\nreturn datascript.core.conn_from_datoms.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));\n\nbreak;\ncase 2:\nreturn datascript.core.conn_from_datoms.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ndefault:\nthrow (new Error([\"Invalid arity: \",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));\n\n}\n});\n\n(datascript.core.conn_from_datoms.cljs$core$IFn$_invoke$arity$1 = (function (datoms){\nreturn datascript.core.conn_from_db((datascript.core.init_db.cljs$core$IFn$_invoke$arity$1 ? datascript.core.init_db.cljs$core$IFn$_invoke$arity$1(datoms) : datascript.core.init_db.call(null,datoms)));\n}));\n\n(datascript.core.conn_from_datoms.cljs$core$IFn$_invoke$arity$2 = (function (datoms,schema){\nreturn datascript.core.conn_from_db((datascript.core.init_db.cljs$core$IFn$_invoke$arity$2 ? datascript.core.init_db.cljs$core$IFn$_invoke$arity$2(datoms,schema) : datascript.core.init_db.call(null,datoms,schema)));\n}));\n\n(datascript.core.conn_from_datoms.cljs$lang$maxFixedArity = 2);\n\n/**\n * Creates a mutable reference (a “connection”) to an empty immutable database.\n * \n * Connections are lightweight in-memory structures (~atoms) with direct support of transaction listeners ([[listen!]], [[unlisten!]]) and other handy DataScript APIs ([[transact!]], [[reset-conn!]], [[db]]).\n * \n * To access underlying immutable DB value, deref: `@conn`.\n */\ndatascript.core.create_conn = (function datascript$core$create_conn(var_args){\nvar G__25513 = arguments.length;\nswitch (G__25513) {\ncase 0:\nreturn datascript.core.create_conn.cljs$core$IFn$_invoke$arity$0();\n\nbreak;\ncase 1:\nreturn datascript.core.create_conn.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));\n\nbreak;\ndefault:\nthrow (new Error([\"Invalid arity: \",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));\n\n}\n});\n\n(datascript.core.create_conn.cljs$core$IFn$_invoke$arity$0 = (function (){\nreturn datascript.core.conn_from_db((datascript.core.empty_db.cljs$core$IFn$_invoke$arity$0 ? datascript.core.empty_db.cljs$core$IFn$_invoke$arity$0() : datascript.core.empty_db.call(null)));\n}));\n\n(datascript.core.create_conn.cljs$core$IFn$_invoke$arity$1 = (function (schema){\nreturn datascript.core.conn_from_db((datascript.core.empty_db.cljs$core$IFn$_invoke$arity$1 ? datascript.core.empty_db.cljs$core$IFn$_invoke$arity$1(schema) : datascript.core.empty_db.call(null,schema)));\n}));\n\n(datascript.core.create_conn.cljs$lang$maxFixedArity = 1);\n\ndatascript.core._transact_BANG_ = (function datascript$core$_transact_BANG_(conn,tx_data,tx_meta){\n\nvar report = cljs.core.atom.cljs$core$IFn$_invoke$arity$1(null);\ncljs.core.swap_BANG_.cljs$core$IFn$_invoke$arity$2(conn,(function (db){\nvar r = datascript.core.with$.cljs$core$IFn$_invoke$arity$3(db,tx_data,tx_meta);\ncljs.core.reset_BANG_(report,r);\n\nreturn new cljs.core.Keyword(null,\"db-after\",\"db-after\",-571884666).cljs$core$IFn$_invoke$arity$1(r);\n}));\n\nreturn cljs.core.deref(report);\n});\n/**\n * Applies transaction the underlying database value and atomically updates connection reference to point to the result of that transaction, new db value.\n * \n * Returns transaction report, a map:\n * \n * { :db-before ... ; db value before transaction\n * :db-after ... ; db value after transaction\n * :tx-data [...] ; plain datoms that were added/retracted from db-before\n * :tempids {...} ; map of tempid from tx-data => assigned entid in db-after\n * :tx-meta tx-meta } ; the exact value you passed as `tx-meta`\n * \n * Note! `conn` will be updated in-place and is not returned from [[transact!]].\n * \n * Usage:\n * \n * ; add a single datom to an existing entity (1)\n * (transact! conn [[:db/add 1 :name \"Ivan\"]])\n * \n * ; retract a single datom\n * (transact! conn [[:db/retract 1 :name \"Ivan\"]])\n * \n * ; retract single entity attribute\n * (transact! conn [[:db.fn/retractAttribute 1 :name]])\n * \n * ; ... or equivalently (since Datomic changed its API to support this):\n * (transact! conn [[:db/retract 1 :name]])\n * \n * ; retract all entity attributes (effectively deletes entity)\n * (transact! conn [[:db.fn/retractEntity 1]])\n * \n * ; create a new entity (`-1`, as any other negative value, is a tempid\n * ; that will be replaced with DataScript to a next unused eid)\n * (transact! conn [[:db/add -1 :name \"Ivan\"]])\n * \n * ; check assigned id (here `*1` is a result returned from previous `transact!` call)\n * (def report *1)\n * (:tempids report) ; => {-1 296}\n * \n * ; check actual datoms inserted\n * (:tx-data report) ; => [#datascript/Datom [296 :name \"Ivan\"]]\n * \n * ; tempid can also be a string\n * (transact! conn [[:db/add \"ivan\" :name \"Ivan\"]])\n * (:tempids *1) ; => {\"ivan\" 297}\n * \n * ; reference another entity (must exist)\n * (transact! conn [[:db/add -1 :friend 296]])\n * \n * ; create an entity and set multiple attributes (in a single transaction\n * ; equal tempids will be replaced with the same unused yet entid)\n * (transact! conn [[:db/add -1 :name \"Ivan\"]\n * [:db/add -1 :likes \"fries\"]\n * [:db/add -1 :likes \"pizza\"]\n * [:db/add -1 :friend 296]])\n * \n * ; create an entity and set multiple attributes (alternative map form)\n * (transact! conn [{:db/id -1\n * :name \"Ivan\"\n * :likes [\"fries\" \"pizza\"]\n * :friend 296}])\n * \n * ; update an entity (alternative map form). Can’t retract attributes in\n * ; map form. For cardinality many attrs, value (fish in this example)\n * ; will be added to the list of existing values\n * (transact! conn [{:db/id 296\n * :name \"Oleg\"\n * :likes [\"fish\"]}])\n * \n * ; ref attributes can be specified as nested map, that will create netsed entity as well\n * (transact! conn [{:db/id -1\n * :name \"Oleg\"\n * :friend {:db/id -2\n * :name \"Sergey\"}])\n * \n * ; reverse attribute name can be used if you want created entity to become\n * ; a value in another entity reference\n * (transact! conn [{:db/id -1\n * :name \"Oleg\"\n * :_friend 296}])\n * ; equivalent to\n * (transact! conn [{:db/id -1, :name \"Oleg\"}\n * {:db/id 296, :friend -1}])\n * ; equivalent to\n * (transact! conn [[:db/add -1 :name \"Oleg\"]\n * {:db/add 296 :friend -1]])\n */\ndatascript.core.transact_BANG_ = (function datascript$core$transact_BANG_(var_args){\nvar G__25516 = arguments.length;\nswitch (G__25516) {\ncase 2:\nreturn datascript.core.transact_BANG_.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ncase 3:\nreturn datascript.core.transact_BANG_.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));\n\nbreak;\ndefault:\nthrow (new Error([\"Invalid arity: \",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));\n\n}\n});\n\n(datascript.core.transact_BANG_.cljs$core$IFn$_invoke$arity$2 = (function (conn,tx_data){\nreturn datascript.core.transact_BANG_.cljs$core$IFn$_invoke$arity$3(conn,tx_data,null);\n}));\n\n(datascript.core.transact_BANG_.cljs$core$IFn$_invoke$arity$3 = (function (conn,tx_data,tx_meta){\n\nvar report = datascript.core._transact_BANG_(conn,tx_data,tx_meta);\nvar seq__25532_25685 = cljs.core.seq((function (){var G__25547 = new cljs.core.Keyword(null,\"listeners\",\"listeners\",394544445).cljs$core$IFn$_invoke$arity$1(cljs.core.meta(conn));\nif((G__25547 == null)){\nreturn null;\n} else {\nreturn cljs.core.deref(G__25547);\n}\n})());\nvar chunk__25533_25686 = null;\nvar count__25534_25687 = (0);\nvar i__25535_25688 = (0);\nwhile(true){\nif((i__25535_25688 < count__25534_25687)){\nvar vec__25549_25689 = chunk__25533_25686.cljs$core$IIndexed$_nth$arity$2(null,i__25535_25688);\nvar __25690 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25549_25689,(0),null);\nvar callback_25691 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25549_25689,(1),null);\n(callback_25691.cljs$core$IFn$_invoke$arity$1 ? callback_25691.cljs$core$IFn$_invoke$arity$1(report) : callback_25691.call(null,report));\n\n\nvar G__25692 = seq__25532_25685;\nvar G__25693 = chunk__25533_25686;\nvar G__25694 = count__25534_25687;\nvar G__25695 = (i__25535_25688 + (1));\nseq__25532_25685 = G__25692;\nchunk__25533_25686 = G__25693;\ncount__25534_25687 = G__25694;\ni__25535_25688 = G__25695;\ncontinue;\n} else {\nvar temp__5735__auto___25696 = cljs.core.seq(seq__25532_25685);\nif(temp__5735__auto___25696){\nvar seq__25532_25697__$1 = temp__5735__auto___25696;\nif(cljs.core.chunked_seq_QMARK_(seq__25532_25697__$1)){\nvar c__4609__auto___25698 = cljs.core.chunk_first(seq__25532_25697__$1);\nvar G__25699 = cljs.core.chunk_rest(seq__25532_25697__$1);\nvar G__25700 = c__4609__auto___25698;\nvar G__25701 = cljs.core.count(c__4609__auto___25698);\nvar G__25702 = (0);\nseq__25532_25685 = G__25699;\nchunk__25533_25686 = G__25700;\ncount__25534_25687 = G__25701;\ni__25535_25688 = G__25702;\ncontinue;\n} else {\nvar vec__25560_25703 = cljs.core.first(seq__25532_25697__$1);\nvar __25704 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25560_25703,(0),null);\nvar callback_25705 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25560_25703,(1),null);\n(callback_25705.cljs$core$IFn$_invoke$arity$1 ? callback_25705.cljs$core$IFn$_invoke$arity$1(report) : callback_25705.call(null,report));\n\n\nvar G__25706 = cljs.core.next(seq__25532_25697__$1);\nvar G__25707 = null;\nvar G__25708 = (0);\nvar G__25709 = (0);\nseq__25532_25685 = G__25706;\nchunk__25533_25686 = G__25707;\ncount__25534_25687 = G__25708;\ni__25535_25688 = G__25709;\ncontinue;\n}\n} else {\n}\n}\nbreak;\n}\n\nreturn report;\n}));\n\n(datascript.core.transact_BANG_.cljs$lang$maxFixedArity = 3);\n\n/**\n * Forces underlying `conn` value to become `db`. Will generate a tx-report that will remove everything from old value and insert everything from the new one.\n */\ndatascript.core.reset_conn_BANG_ = (function datascript$core$reset_conn_BANG_(var_args){\nvar G__25584 = arguments.length;\nswitch (G__25584) {\ncase 2:\nreturn datascript.core.reset_conn_BANG_.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ncase 3:\nreturn datascript.core.reset_conn_BANG_.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));\n\nbreak;\ndefault:\nthrow (new Error([\"Invalid arity: \",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));\n\n}\n});\n\n(datascript.core.reset_conn_BANG_.cljs$core$IFn$_invoke$arity$2 = (function (conn,db){\nreturn datascript.core.reset_conn_BANG_.cljs$core$IFn$_invoke$arity$3(conn,db,null);\n}));\n\n(datascript.core.reset_conn_BANG_.cljs$core$IFn$_invoke$arity$3 = (function (conn,db,tx_meta){\nvar report = datascript.db.map__GT_TxReport(new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"db-before\",\"db-before\",-553691536),cljs.core.deref(conn),new cljs.core.Keyword(null,\"db-after\",\"db-after\",-571884666),db,new cljs.core.Keyword(null,\"tx-data\",\"tx-data\",934159761),cljs.core.concat.cljs$core$IFn$_invoke$arity$2(cljs.core.map.cljs$core$IFn$_invoke$arity$2((function (p1__25569_SHARP_){\nreturn cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(p1__25569_SHARP_,new cljs.core.Keyword(null,\"added\",\"added\",2057651688),false);\n}),datascript.core.datoms.cljs$core$IFn$_invoke$arity$2(cljs.core.deref(conn),new cljs.core.Keyword(null,\"eavt\",\"eavt\",-666437073))),datascript.core.datoms.cljs$core$IFn$_invoke$arity$2(db,new cljs.core.Keyword(null,\"eavt\",\"eavt\",-666437073))),new cljs.core.Keyword(null,\"tx-meta\",\"tx-meta\",1159283194),tx_meta], null));\ncljs.core.reset_BANG_(conn,db);\n\nvar seq__25586_25711 = cljs.core.seq((function (){var G__25600 = new cljs.core.Keyword(null,\"listeners\",\"listeners\",394544445).cljs$core$IFn$_invoke$arity$1(cljs.core.meta(conn));\nif((G__25600 == null)){\nreturn null;\n} else {\nreturn cljs.core.deref(G__25600);\n}\n})());\nvar chunk__25587_25712 = null;\nvar count__25588_25713 = (0);\nvar i__25589_25714 = (0);\nwhile(true){\nif((i__25589_25714 < count__25588_25713)){\nvar vec__25601_25715 = chunk__25587_25712.cljs$core$IIndexed$_nth$arity$2(null,i__25589_25714);\nvar __25716 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25601_25715,(0),null);\nvar callback_25717 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25601_25715,(1),null);\n(callback_25717.cljs$core$IFn$_invoke$arity$1 ? callback_25717.cljs$core$IFn$_invoke$arity$1(report) : callback_25717.call(null,report));\n\n\nvar G__25718 = seq__25586_25711;\nvar G__25719 = chunk__25587_25712;\nvar G__25720 = count__25588_25713;\nvar G__25721 = (i__25589_25714 + (1));\nseq__25586_25711 = G__25718;\nchunk__25587_25712 = G__25719;\ncount__25588_25713 = G__25720;\ni__25589_25714 = G__25721;\ncontinue;\n} else {\nvar temp__5735__auto___25722 = cljs.core.seq(seq__25586_25711);\nif(temp__5735__auto___25722){\nvar seq__25586_25723__$1 = temp__5735__auto___25722;\nif(cljs.core.chunked_seq_QMARK_(seq__25586_25723__$1)){\nvar c__4609__auto___25724 = cljs.core.chunk_first(seq__25586_25723__$1);\nvar G__25725 = cljs.core.chunk_rest(seq__25586_25723__$1);\nvar G__25726 = c__4609__auto___25724;\nvar G__25727 = cljs.core.count(c__4609__auto___25724);\nvar G__25728 = (0);\nseq__25586_25711 = G__25725;\nchunk__25587_25712 = G__25726;\ncount__25588_25713 = G__25727;\ni__25589_25714 = G__25728;\ncontinue;\n} else {\nvar vec__25604_25729 = cljs.core.first(seq__25586_25723__$1);\nvar __25730 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25604_25729,(0),null);\nvar callback_25731 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25604_25729,(1),null);\n(callback_25731.cljs$core$IFn$_invoke$arity$1 ? callback_25731.cljs$core$IFn$_invoke$arity$1(report) : callback_25731.call(null,report));\n\n\nvar G__25732 = cljs.core.next(seq__25586_25723__$1);\nvar G__25733 = null;\nvar G__25734 = (0);\nvar G__25735 = (0);\nseq__25586_25711 = G__25732;\nchunk__25587_25712 = G__25733;\ncount__25588_25713 = G__25734;\ni__25589_25714 = G__25735;\ncontinue;\n}\n} else {\n}\n}\nbreak;\n}\n\nreturn db;\n}));\n\n(datascript.core.reset_conn_BANG_.cljs$lang$maxFixedArity = 3);\n\ndatascript.core.atom_QMARK_ = (function datascript$core$atom_QMARK_(a){\nreturn (a instanceof cljs.core.Atom);\n});\n/**\n * Listen for changes on the given connection. Whenever a transaction is applied to the database via [[transact!]], the callback is called\n * with the transaction report. `key` is any opaque unique value.\n * \n * Idempotent. Calling [[listen!]] with the same key twice will override old callback with the new value.\n * \n * Returns the key under which this listener is registered. See also [[unlisten!]].\n */\ndatascript.core.listen_BANG_ = (function datascript$core$listen_BANG_(var_args){\nvar G__25608 = arguments.length;\nswitch (G__25608) {\ncase 2:\nreturn datascript.core.listen_BANG_.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ncase 3:\nreturn datascript.core.listen_BANG_.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));\n\nbreak;\ndefault:\nthrow (new Error([\"Invalid arity: \",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));\n\n}\n});\n\n(datascript.core.listen_BANG_.cljs$core$IFn$_invoke$arity$2 = (function (conn,callback){\nreturn datascript.core.listen_BANG_.cljs$core$IFn$_invoke$arity$3(conn,cljs.core.rand.cljs$core$IFn$_invoke$arity$0(),callback);\n}));\n\n(datascript.core.listen_BANG_.cljs$core$IFn$_invoke$arity$3 = (function (conn,key,callback){\n\n\ncljs.core.swap_BANG_.cljs$core$IFn$_invoke$arity$4(new cljs.core.Keyword(null,\"listeners\",\"listeners\",394544445).cljs$core$IFn$_invoke$arity$1(cljs.core.meta(conn)),cljs.core.assoc,key,callback);\n\nreturn key;\n}));\n\n(datascript.core.listen_BANG_.cljs$lang$maxFixedArity = 3);\n\n/**\n * Removes registered listener from connection. See also [[listen!]].\n */\ndatascript.core.unlisten_BANG_ = (function datascript$core$unlisten_BANG_(conn,key){\n\n\nreturn cljs.core.swap_BANG_.cljs$core$IFn$_invoke$arity$3(new cljs.core.Keyword(null,\"listeners\",\"listeners\",394544445).cljs$core$IFn$_invoke$arity$1(cljs.core.meta(conn)),cljs.core.dissoc,key);\n});\n/**\n * Data readers for EDN readers. In CLJS they’re registered automatically. In CLJ, if `data_readers.clj` do not work, you can always do\n * \n * ```\n * (clojure.edn/read-string {:readers data-readers} \"...\")\n * ```\n */\ndatascript.core.data_readers = new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Symbol(\"datascript\",\"Datom\",\"datascript/Datom\",-901340080,null),datascript.db.datom_from_reader,new cljs.core.Symbol(\"datascript\",\"DB\",\"datascript/DB\",-487332776,null),datascript.db.db_from_reader], null);\nvar seq__25612_25737 = cljs.core.seq(datascript.core.data_readers);\nvar chunk__25613_25738 = null;\nvar count__25614_25739 = (0);\nvar i__25615_25740 = (0);\nwhile(true){\nif((i__25615_25740 < count__25614_25739)){\nvar vec__25628_25741 = chunk__25613_25738.cljs$core$IIndexed$_nth$arity$2(null,i__25615_25740);\nvar tag_25742 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25628_25741,(0),null);\nvar cb_25743 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25628_25741,(1),null);\ncljs.reader.register_tag_parser_BANG_(tag_25742,cb_25743);\n\n\nvar G__25744 = seq__25612_25737;\nvar G__25745 = chunk__25613_25738;\nvar G__25746 = count__25614_25739;\nvar G__25747 = (i__25615_25740 + (1));\nseq__25612_25737 = G__25744;\nchunk__25613_25738 = G__25745;\ncount__25614_25739 = G__25746;\ni__25615_25740 = G__25747;\ncontinue;\n} else {\nvar temp__5735__auto___25748 = cljs.core.seq(seq__25612_25737);\nif(temp__5735__auto___25748){\nvar seq__25612_25749__$1 = temp__5735__auto___25748;\nif(cljs.core.chunked_seq_QMARK_(seq__25612_25749__$1)){\nvar c__4609__auto___25750 = cljs.core.chunk_first(seq__25612_25749__$1);\nvar G__25751 = cljs.core.chunk_rest(seq__25612_25749__$1);\nvar G__25752 = c__4609__auto___25750;\nvar G__25753 = cljs.core.count(c__4609__auto___25750);\nvar G__25754 = (0);\nseq__25612_25737 = G__25751;\nchunk__25613_25738 = G__25752;\ncount__25614_25739 = G__25753;\ni__25615_25740 = G__25754;\ncontinue;\n} else {\nvar vec__25631_25755 = cljs.core.first(seq__25612_25749__$1);\nvar tag_25756 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25631_25755,(0),null);\nvar cb_25757 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25631_25755,(1),null);\ncljs.reader.register_tag_parser_BANG_(tag_25756,cb_25757);\n\n\nvar G__25758 = cljs.core.next(seq__25612_25749__$1);\nvar G__25759 = null;\nvar G__25760 = (0);\nvar G__25761 = (0);\nseq__25612_25737 = G__25758;\nchunk__25613_25738 = G__25759;\ncount__25614_25739 = G__25760;\ni__25615_25740 = G__25761;\ncontinue;\n}\n} else {\n}\n}\nbreak;\n}\ndatascript.core.last_tempid = cljs.core.atom.cljs$core$IFn$_invoke$arity$1((-1000000));\n/**\n * Allocates and returns an unique temporary id (a negative integer). Ignores `part`. Returns `x` if it is specified.\n * \n * Exists for Datomic API compatibility. Prefer using negative integers directly if possible.\n */\ndatascript.core.tempid = (function datascript$core$tempid(var_args){\nvar G__25635 = arguments.length;\nswitch (G__25635) {\ncase 1:\nreturn datascript.core.tempid.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));\n\nbreak;\ncase 2:\nreturn datascript.core.tempid.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ndefault:\nthrow (new Error([\"Invalid arity: \",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));\n\n}\n});\n\n(datascript.core.tempid.cljs$core$IFn$_invoke$arity$1 = (function (part){\nif(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(part,new cljs.core.Keyword(\"db.part\",\"tx\",\"db.part/tx\",-1480923213))){\nreturn new cljs.core.Keyword(\"db\",\"current-tx\",\"db/current-tx\",1600722132);\n} else {\nreturn cljs.core.swap_BANG_.cljs$core$IFn$_invoke$arity$2(datascript.core.last_tempid,cljs.core.dec);\n}\n}));\n\n(datascript.core.tempid.cljs$core$IFn$_invoke$arity$2 = (function (part,x){\nif(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(part,new cljs.core.Keyword(\"db.part\",\"tx\",\"db.part/tx\",-1480923213))){\nreturn new cljs.core.Keyword(\"db\",\"current-tx\",\"db/current-tx\",1600722132);\n} else {\nreturn x;\n}\n}));\n\n(datascript.core.tempid.cljs$lang$maxFixedArity = 2);\n\n/**\n * Does a lookup in tempids map, returning an entity id that tempid was resolved to.\n * \n * Exists for Datomic API compatibility. Prefer using map lookup directly if possible.\n */\ndatascript.core.resolve_tempid = (function datascript$core$resolve_tempid(_db,tempids,tempid){\nreturn cljs.core.get.cljs$core$IFn$_invoke$arity$2(tempids,tempid);\n});\n/**\n * Returns the underlying immutable database value from a connection.\n * \n * Exists for Datomic API compatibility. Prefer using `@conn` directly if possible.\n */\ndatascript.core.db = (function datascript$core$db(conn){\n\nreturn cljs.core.deref(conn);\n});\n/**\n * Same as [[transact!]], but returns an immediately realized future.\n * \n * Exists for Datomic API compatibility. Prefer using [[transact!]] if possible.\n */\ndatascript.core.transact = (function datascript$core$transact(var_args){\nvar G__25652 = arguments.length;\nswitch (G__25652) {\ncase 2:\nreturn datascript.core.transact.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ncase 3:\nreturn datascript.core.transact.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));\n\nbreak;\ndefault:\nthrow (new Error([\"Invalid arity: \",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));\n\n}\n});\n\n(datascript.core.transact.cljs$core$IFn$_invoke$arity$2 = (function (conn,tx_data){\nreturn datascript.core.transact.cljs$core$IFn$_invoke$arity$3(conn,tx_data,null);\n}));\n\n(datascript.core.transact.cljs$core$IFn$_invoke$arity$3 = (function (conn,tx_data,tx_meta){\n\nvar res = datascript.core.transact_BANG_.cljs$core$IFn$_invoke$arity$3(conn,tx_data,tx_meta);\nif((typeof datascript !== 'undefined') && (typeof datascript.core !== 'undefined') && (typeof datascript.core.t_datascript$core25653 !== 'undefined')){\n} else {\n\n/**\n* @constructor\n * @implements {cljs.core.IDerefWithTimeout}\n * @implements {cljs.core.IPending}\n * @implements {cljs.core.IMeta}\n * @implements {cljs.core.IDeref}\n * @implements {cljs.core.IWithMeta}\n*/\ndatascript.core.t_datascript$core25653 = (function (conn,tx_data,tx_meta,res,meta25654){\nthis.conn = conn;\nthis.tx_data = tx_data;\nthis.tx_meta = tx_meta;\nthis.res = res;\nthis.meta25654 = meta25654;\nthis.cljs$lang$protocol_mask$partition0$ = 491520;\nthis.cljs$lang$protocol_mask$partition1$ = 1;\n});\n(datascript.core.t_datascript$core25653.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = (function (_25655,meta25654__$1){\nvar self__ = this;\nvar _25655__$1 = this;\nreturn (new datascript.core.t_datascript$core25653(self__.conn,self__.tx_data,self__.tx_meta,self__.res,meta25654__$1));\n}));\n\n(datascript.core.t_datascript$core25653.prototype.cljs$core$IMeta$_meta$arity$1 = (function (_25655){\nvar self__ = this;\nvar _25655__$1 = this;\nreturn self__.meta25654;\n}));\n\n(datascript.core.t_datascript$core25653.prototype.cljs$core$IDeref$_deref$arity$1 = (function (_){\nvar self__ = this;\nvar ___$1 = this;\nreturn self__.res;\n}));\n\n(datascript.core.t_datascript$core25653.prototype.cljs$core$IDerefWithTimeout$_deref_with_timeout$arity$3 = (function (_,___$1,___$2){\nvar self__ = this;\nvar ___$3 = this;\nreturn self__.res;\n}));\n\n(datascript.core.t_datascript$core25653.prototype.cljs$core$IPending$_realized_QMARK_$arity$1 = (function (_){\nvar self__ = this;\nvar ___$1 = this;\nreturn true;\n}));\n\n(datascript.core.t_datascript$core25653.getBasis = (function (){\nreturn new cljs.core.PersistentVector(null, 5, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Symbol(null,\"conn\",\"conn\",1918841190,null),new cljs.core.Symbol(null,\"tx-data\",\"tx-data\",-1720276008,null),new cljs.core.Symbol(null,\"tx-meta\",\"tx-meta\",-1495152575,null),new cljs.core.Symbol(null,\"res\",\"res\",245523648,null),new cljs.core.Symbol(null,\"meta25654\",\"meta25654\",240936074,null)], null);\n}));\n\n(datascript.core.t_datascript$core25653.cljs$lang$type = true);\n\n(datascript.core.t_datascript$core25653.cljs$lang$ctorStr = \"datascript.core/t_datascript$core25653\");\n\n(datascript.core.t_datascript$core25653.cljs$lang$ctorPrWriter = (function (this__4428__auto__,writer__4429__auto__,opt__4430__auto__){\nreturn cljs.core._write(writer__4429__auto__,\"datascript.core/t_datascript$core25653\");\n}));\n\n/**\n * Positional factory function for datascript.core/t_datascript$core25653.\n */\ndatascript.core.__GT_t_datascript$core25653 = (function datascript$core$__GT_t_datascript$core25653(conn__$1,tx_data__$1,tx_meta__$1,res__$1,meta25654){\nreturn (new datascript.core.t_datascript$core25653(conn__$1,tx_data__$1,tx_meta__$1,res__$1,meta25654));\n});\n\n}\n\nreturn (new datascript.core.t_datascript$core25653(conn,tx_data,tx_meta,res,cljs.core.PersistentArrayMap.EMPTY));\n}));\n\n(datascript.core.transact.cljs$lang$maxFixedArity = 3);\n\ndatascript.core.future_call = (function datascript$core$future_call(f){\nvar res = cljs.core.atom.cljs$core$IFn$_invoke$arity$1(null);\nvar realized = cljs.core.atom.cljs$core$IFn$_invoke$arity$1(false);\nsetTimeout((function (){\ncljs.core.reset_BANG_(res,(f.cljs$core$IFn$_invoke$arity$0 ? f.cljs$core$IFn$_invoke$arity$0() : f.call(null)));\n\nreturn cljs.core.reset_B