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__25482_SHARP_){\nvar and__4174__auto__ = (orig_pred.cljs$core$IFn$_invoke$arity$1 ? orig_pred.cljs$core$IFn$_invoke$arity$1(p1__25482_SHARP_) : orig_pred.call(null,p1__25482_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__25482_SHARP_) : pred.call(null,orig_db,p1__25482_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__25483_SHARP_){\nreturn (pred.cljs$core$IFn$_invoke$arity$2 ? pred.cljs$core$IFn$_invoke$arity$2(db,p1__25483_SHARP_) : pred.call(null,db,p1__25483_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__25485 = arguments.length;\nswitch (G__25485) {\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__25489 = arguments.length;\nswitch (G__25489) {\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__25491 = arguments.length;\nswitch (G__25491) {\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__25493 = arguments.length;\nswitch (G__25493) {\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__25499 = arguments.length;\nswitch (G__25499) {\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__25501 = arguments.length;\nswitch (G__25501) {\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__25504 = arguments.length;\nswitch (G__25504) {\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__25505_25634 = cljs.core.seq((function (){var G__25516 = new cljs.core.Keyword(null,\"listeners\",\"listeners\",394544445).cljs$core$IFn$_invoke$arity$1(cljs.core.meta(conn));\nif((G__25516 == null)){\nreturn null;\n} else {\nreturn cljs.core.deref(G__25516);\n}\n})());\nvar chunk__25506_25635 = null;\nvar count__25507_25636 = (0);\nvar i__25508_25637 = (0);\nwhile(true){\nif((i__25508_25637 < count__25507_25636)){\nvar vec__25517_25638 = chunk__25506_25635.cljs$core$IIndexed$_nth$arity$2(null,i__25508_25637);\nvar __25639 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25517_25638,(0),null);\nvar callback_25640 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25517_25638,(1),null);\n(callback_25640.cljs$core$IFn$_invoke$arity$1 ? callback_25640.cljs$core$IFn$_invoke$arity$1(report) : callback_25640.call(null,report));\n\n\nvar G__25641 = seq__25505_25634;\nvar G__25642 = chunk__25506_25635;\nvar G__25643 = count__25507_25636;\nvar G__25644 = (i__25508_25637 + (1));\nseq__25505_25634 = G__25641;\nchunk__25506_25635 = G__25642;\ncount__25507_25636 = G__25643;\ni__25508_25637 = G__25644;\ncontinue;\n} else {\nvar temp__5735__auto___25645 = cljs.core.seq(seq__25505_25634);\nif(temp__5735__auto___25645){\nvar seq__25505_25646__$1 = temp__5735__auto___25645;\nif(cljs.core.chunked_seq_QMARK_(seq__25505_25646__$1)){\nvar c__4609__auto___25647 = cljs.core.chunk_first(seq__25505_25646__$1);\nvar G__25648 = cljs.core.chunk_rest(seq__25505_25646__$1);\nvar G__25649 = c__4609__auto___25647;\nvar G__25650 = cljs.core.count(c__4609__auto___25647);\nvar G__25651 = (0);\nseq__25505_25634 = G__25648;\nchunk__25506_25635 = G__25649;\ncount__25507_25636 = G__25650;\ni__25508_25637 = G__25651;\ncontinue;\n} else {\nvar vec__25520_25652 = cljs.core.first(seq__25505_25646__$1);\nvar __25653 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25520_25652,(0),null);\nvar callback_25654 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25520_25652,(1),null);\n(callback_25654.cljs$core$IFn$_invoke$arity$1 ? callback_25654.cljs$core$IFn$_invoke$arity$1(report) : callback_25654.call(null,report));\n\n\nvar G__25655 = cljs.core.next(seq__25505_25646__$1);\nvar G__25656 = null;\nvar G__25657 = (0);\nvar G__25658 = (0);\nseq__25505_25634 = G__25655;\nchunk__25506_25635 = G__25656;\ncount__25507_25636 = G__25657;\ni__25508_25637 = G__25658;\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__25525 = arguments.length;\nswitch (G__25525) {\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__25523_SHARP_){\nreturn cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(p1__25523_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__25526_25660 = cljs.core.seq((function (){var G__25537 = new cljs.core.Keyword(null,\"listeners\",\"listeners\",394544445).cljs$core$IFn$_invoke$arity$1(cljs.core.meta(conn));\nif((G__25537 == null)){\nreturn null;\n} else {\nreturn cljs.core.deref(G__25537);\n}\n})());\nvar chunk__25527_25661 = null;\nvar count__25528_25662 = (0);\nvar i__25529_25663 = (0);\nwhile(true){\nif((i__25529_25663 < count__25528_25662)){\nvar vec__25538_25666 = chunk__25527_25661.cljs$core$IIndexed$_nth$arity$2(null,i__25529_25663);\nvar __25667 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25538_25666,(0),null);\nvar callback_25668 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25538_25666,(1),null);\n(callback_25668.cljs$core$IFn$_invoke$arity$1 ? callback_25668.cljs$core$IFn$_invoke$arity$1(report) : callback_25668.call(null,report));\n\n\nvar G__25670 = seq__25526_25660;\nvar G__25671 = chunk__25527_25661;\nvar G__25672 = count__25528_25662;\nvar G__25673 = (i__25529_25663 + (1));\nseq__25526_25660 = G__25670;\nchunk__25527_25661 = G__25671;\ncount__25528_25662 = G__25672;\ni__25529_25663 = G__25673;\ncontinue;\n} else {\nvar temp__5735__auto___25674 = cljs.core.seq(seq__25526_25660);\nif(temp__5735__auto___25674){\nvar seq__25526_25675__$1 = temp__5735__auto___25674;\nif(cljs.core.chunked_seq_QMARK_(seq__25526_25675__$1)){\nvar c__4609__auto___25676 = cljs.core.chunk_first(seq__25526_25675__$1);\nvar G__25677 = cljs.core.chunk_rest(seq__25526_25675__$1);\nvar G__25678 = c__4609__auto___25676;\nvar G__25679 = cljs.core.count(c__4609__auto___25676);\nvar G__25680 = (0);\nseq__25526_25660 = G__25677;\nchunk__25527_25661 = G__25678;\ncount__25528_25662 = G__25679;\ni__25529_25663 = G__25680;\ncontinue;\n} else {\nvar vec__25541_25681 = cljs.core.first(seq__25526_25675__$1);\nvar __25682 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25541_25681,(0),null);\nvar callback_25683 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25541_25681,(1),null);\n(callback_25683.cljs$core$IFn$_invoke$arity$1 ? callback_25683.cljs$core$IFn$_invoke$arity$1(report) : callback_25683.call(null,report));\n\n\nvar G__25686 = cljs.core.next(seq__25526_25675__$1);\nvar G__25687 = null;\nvar G__25688 = (0);\nvar G__25689 = (0);\nseq__25526_25660 = G__25686;\nchunk__25527_25661 = G__25687;\ncount__25528_25662 = G__25688;\ni__25529_25663 = G__25689;\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__25545 = arguments.length;\nswitch (G__25545) {\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__25547_25692 = cljs.core.seq(datascript.core.data_readers);\nvar chunk__25548_25693 = null;\nvar count__25549_25694 = (0);\nvar i__25550_25695 = (0);\nwhile(true){\nif((i__25550_25695 < count__25549_25694)){\nvar vec__25557_25696 = chunk__25548_25693.cljs$core$IIndexed$_nth$arity$2(null,i__25550_25695);\nvar tag_25697 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25557_25696,(0),null);\nvar cb_25698 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25557_25696,(1),null);\ncljs.reader.register_tag_parser_BANG_(tag_25697,cb_25698);\n\n\nvar G__25699 = seq__25547_25692;\nvar G__25700 = chunk__25548_25693;\nvar G__25701 = count__25549_25694;\nvar G__25702 = (i__25550_25695 + (1));\nseq__25547_25692 = G__25699;\nchunk__25548_25693 = G__25700;\ncount__25549_25694 = G__25701;\ni__25550_25695 = G__25702;\ncontinue;\n} else {\nvar temp__5735__auto___25703 = cljs.core.seq(seq__25547_25692);\nif(temp__5735__auto___25703){\nvar seq__25547_25704__$1 = temp__5735__auto___25703;\nif(cljs.core.chunked_seq_QMARK_(seq__25547_25704__$1)){\nvar c__4609__auto___25705 = cljs.core.chunk_first(seq__25547_25704__$1);\nvar G__25706 = cljs.core.chunk_rest(seq__25547_25704__$1);\nvar G__25707 = c__4609__auto___25705;\nvar G__25708 = cljs.core.count(c__4609__auto___25705);\nvar G__25709 = (0);\nseq__25547_25692 = G__25706;\nchunk__25548_25693 = G__25707;\ncount__25549_25694 = G__25708;\ni__25550_25695 = G__25709;\ncontinue;\n} else {\nvar vec__25560_25710 = cljs.core.first(seq__25547_25704__$1);\nvar tag_25711 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25560_25710,(0),null);\nvar cb_25712 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__25560_25710,(1),null);\ncljs.reader.register_tag_parser_BANG_(tag_25711,cb_25712);\n\n\nvar G__25713 = cljs.core.next(seq__25547_25704__$1);\nvar G__25714 = null;\nvar G__25715 = (0);\nvar G__25716 = (0);\nseq__25547_25692 = G__25713;\nchunk__25548_25693 = G__25714;\ncount__25549_25694 = G__25715;\ni__25550_25695 = G__25716;\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__25564 = arguments.length;\nswitch (G__25564) {\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__25569 = arguments.length;\nswitch (G__25569) {\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$core25574 !== '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$core25574 = (function (conn,tx_data,tx_meta,res,meta25575){\nthis.conn = conn;\nthis.tx_data = tx_data;\nthis.tx_meta = tx_meta;\nthis.res = res;\nthis.meta25575 = meta25575;\nthis.cljs$lang$protocol_mask$partition0$ = 491520;\nthis.cljs$lang$protocol_mask$partition1$ = 1;\n});\n(datascript.core.t_datascript$core25574.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = (function (_25576,meta25575__$1){\nvar self__ = this;\nvar _25576__$1 = this;\nreturn (new datascript.core.t_datascript$core25574(self__.conn,self__.tx_data,self__.tx_meta,self__.res,meta25575__$1));\n}));\n\n(datascript.core.t_datascript$core25574.prototype.cljs$core$IMeta$_meta$arity$1 = (function (_25576){\nvar self__ = this;\nvar _25576__$1 = this;\nreturn self__.meta25575;\n}));\n\n(datascript.core.t_datascript$core25574.prototype.cljs$core$IDeref$_deref$arity$1 = (function (_){\nvar self__ = this;\nvar ___$1 = this;\nreturn self__.res;\n}));\n\n(datascript.core.t_datascript$core25574.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$core25574.prototype.cljs$core$IPending$_realized_QMARK_$arity$1 = (function (_){\nvar self__ = this;\nvar ___$1 = this;\nreturn true;\n}));\n\n(datascript.core.t_datascript$core25574.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,\"meta25575\",\"meta25575\",-1880011283,null)], null);\n}));\n\n(datascript.core.t_datascript$core25574.cljs$lang$type = true);\n\n(datascript.core.t_datascript$core25574.cljs$lang$ctorStr = \"datascript.core/t_datascript$core25574\");\n\n(datascript.core.t_datascript$core25574.cljs$lang$ctorPrWriter = (function (this__4428__auto__,writer__4429__auto__,opt__4430__auto__){\nreturn cljs.core._write(writer__4429__auto__,\"datascript.core/t_datascript$core25574\");\n}));\n\n/**\n * Positional factory function for datascript.core/t_datascript$core25574.\n */\ndatascript.core.__GT_t_datascript$core25574 = (function datascript$core$__GT_t_datascript$core25574(conn__$1,tx_data__$1,tx_meta__$1,res__$1,meta25575){\nreturn (new datascript.core.t_datascript$core25574(conn__$1,tx_data__$1,tx_meta__$1,res__$1,meta25575));\n});\n\n}\n\nreturn (new datascript.core.t_datascript$core25574(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