create-expo-cljs-app
Version:
Create a react native application with Expo and Shadow-CLJS!
1 lines • 71.6 kB
JSON
["^ ","~:output",["^ ","~:js","goog.provide('re_frame.interceptor');\nre_frame.interceptor.mandatory_interceptor_keys = new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"after\",\"after\",594996914),null,new cljs.core.Keyword(null,\"id\",\"id\",-1388402092),null,new cljs.core.Keyword(null,\"before\",\"before\",-1633692388),null], null), null);\nre_frame.interceptor.interceptor_QMARK_ = (function re_frame$interceptor$interceptor_QMARK_(m){\nreturn ((cljs.core.map_QMARK_(m)) && (cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(re_frame.interceptor.mandatory_interceptor_keys,cljs.core.set(cljs.core.keys(m)))));\n});\nre_frame.interceptor.__GT_interceptor = (function re_frame$interceptor$__GT_interceptor(var_args){\nvar args__4742__auto__ = [];\nvar len__4736__auto___47491 = arguments.length;\nvar i__4737__auto___47492 = (0);\nwhile(true){\nif((i__4737__auto___47492 < len__4736__auto___47491)){\nargs__4742__auto__.push((arguments[i__4737__auto___47492]));\n\nvar G__47493 = (i__4737__auto___47492 + (1));\ni__4737__auto___47492 = G__47493;\ncontinue;\n} else {\n}\nbreak;\n}\n\nvar argseq__4743__auto__ = ((((0) < args__4742__auto__.length))?(new cljs.core.IndexedSeq(args__4742__auto__.slice((0)),(0),null)):null);\nreturn re_frame.interceptor.__GT_interceptor.cljs$core$IFn$_invoke$arity$variadic(argseq__4743__auto__);\n});\n\n(re_frame.interceptor.__GT_interceptor.cljs$core$IFn$_invoke$arity$variadic = (function (p__47416){\nvar map__47417 = p__47416;\nvar map__47417__$1 = (((((!((map__47417 == null))))?(((((map__47417.cljs$lang$protocol_mask$partition0$ & (64))) || ((cljs.core.PROTOCOL_SENTINEL === map__47417.cljs$core$ISeq$))))?true:false):false))?cljs.core.apply.cljs$core$IFn$_invoke$arity$2(cljs.core.hash_map,map__47417):map__47417);\nvar m = map__47417__$1;\nvar id = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__47417__$1,new cljs.core.Keyword(null,\"id\",\"id\",-1388402092));\nvar before = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__47417__$1,new cljs.core.Keyword(null,\"before\",\"before\",-1633692388));\nvar after = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__47417__$1,new cljs.core.Keyword(null,\"after\",\"after\",594996914));\nif(re_frame.interop.debug_enabled_QMARK_){\nvar temp__5733__auto___47494 = cljs.core.seq(clojure.set.difference.cljs$core$IFn$_invoke$arity$2(cljs.core.set(cljs.core.keys(m)),re_frame.interceptor.mandatory_interceptor_keys));\nif(temp__5733__auto___47494){\nvar unknown_keys_47495 = temp__5733__auto___47494;\nre_frame.loggers.console.cljs$core$IFn$_invoke$arity$variadic(new cljs.core.Keyword(null,\"error\",\"error\",-978969032),cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([\"re-frame: ->interceptor\",m,\"has unknown keys:\",unknown_keys_47495], 0));\n} else {\n}\n} else {\n}\n\nreturn new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"id\",\"id\",-1388402092),(function (){var or__4126__auto__ = id;\nif(cljs.core.truth_(or__4126__auto__)){\nreturn or__4126__auto__;\n} else {\nreturn new cljs.core.Keyword(null,\"unnamed\",\"unnamed\",-26044928);\n}\n})(),new cljs.core.Keyword(null,\"before\",\"before\",-1633692388),before,new cljs.core.Keyword(null,\"after\",\"after\",594996914),after], null);\n}));\n\n(re_frame.interceptor.__GT_interceptor.cljs$lang$maxFixedArity = (0));\n\n/** @this {Function} */\n(re_frame.interceptor.__GT_interceptor.cljs$lang$applyTo = (function (seq47408){\nvar self__4724__auto__ = this;\nreturn self__4724__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq(seq47408));\n}));\n\nre_frame.interceptor.get_effect = (function re_frame$interceptor$get_effect(var_args){\nvar G__47437 = arguments.length;\nswitch (G__47437) {\ncase 1:\nreturn re_frame.interceptor.get_effect.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));\n\nbreak;\ncase 2:\nreturn re_frame.interceptor.get_effect.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ncase 3:\nreturn re_frame.interceptor.get_effect.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(re_frame.interceptor.get_effect.cljs$core$IFn$_invoke$arity$1 = (function (context){\nreturn new cljs.core.Keyword(null,\"effects\",\"effects\",-282369292).cljs$core$IFn$_invoke$arity$1(context);\n}));\n\n(re_frame.interceptor.get_effect.cljs$core$IFn$_invoke$arity$2 = (function (context,key){\nreturn cljs.core.get_in.cljs$core$IFn$_invoke$arity$2(context,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"effects\",\"effects\",-282369292),key], null));\n}));\n\n(re_frame.interceptor.get_effect.cljs$core$IFn$_invoke$arity$3 = (function (context,key,not_found){\nreturn cljs.core.get_in.cljs$core$IFn$_invoke$arity$3(context,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"effects\",\"effects\",-282369292),key], null),not_found);\n}));\n\n(re_frame.interceptor.get_effect.cljs$lang$maxFixedArity = 3);\n\nre_frame.interceptor.assoc_effect = (function re_frame$interceptor$assoc_effect(context,key,value){\nreturn cljs.core.assoc_in(context,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"effects\",\"effects\",-282369292),key], null),value);\n});\nre_frame.interceptor.update_effect = (function re_frame$interceptor$update_effect(var_args){\nvar args__4742__auto__ = [];\nvar len__4736__auto___47503 = arguments.length;\nvar i__4737__auto___47504 = (0);\nwhile(true){\nif((i__4737__auto___47504 < len__4736__auto___47503)){\nargs__4742__auto__.push((arguments[i__4737__auto___47504]));\n\nvar G__47505 = (i__4737__auto___47504 + (1));\ni__4737__auto___47504 = G__47505;\ncontinue;\n} else {\n}\nbreak;\n}\n\nvar argseq__4743__auto__ = ((((3) < args__4742__auto__.length))?(new cljs.core.IndexedSeq(args__4742__auto__.slice((3)),(0),null)):null);\nreturn re_frame.interceptor.update_effect.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),argseq__4743__auto__);\n});\n\n(re_frame.interceptor.update_effect.cljs$core$IFn$_invoke$arity$variadic = (function (context,key,f,args){\nreturn cljs.core.apply.cljs$core$IFn$_invoke$arity$5(cljs.core.update_in,context,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"effects\",\"effects\",-282369292),key], null),f,args);\n}));\n\n(re_frame.interceptor.update_effect.cljs$lang$maxFixedArity = (3));\n\n/** @this {Function} */\n(re_frame.interceptor.update_effect.cljs$lang$applyTo = (function (seq47444){\nvar G__47445 = cljs.core.first(seq47444);\nvar seq47444__$1 = cljs.core.next(seq47444);\nvar G__47446 = cljs.core.first(seq47444__$1);\nvar seq47444__$2 = cljs.core.next(seq47444__$1);\nvar G__47447 = cljs.core.first(seq47444__$2);\nvar seq47444__$3 = cljs.core.next(seq47444__$2);\nvar self__4723__auto__ = this;\nreturn self__4723__auto__.cljs$core$IFn$_invoke$arity$variadic(G__47445,G__47446,G__47447,seq47444__$3);\n}));\n\nre_frame.interceptor.get_coeffect = (function re_frame$interceptor$get_coeffect(var_args){\nvar G__47457 = arguments.length;\nswitch (G__47457) {\ncase 1:\nreturn re_frame.interceptor.get_coeffect.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));\n\nbreak;\ncase 2:\nreturn re_frame.interceptor.get_coeffect.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ncase 3:\nreturn re_frame.interceptor.get_coeffect.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(re_frame.interceptor.get_coeffect.cljs$core$IFn$_invoke$arity$1 = (function (context){\nreturn new cljs.core.Keyword(null,\"coeffects\",\"coeffects\",497912985).cljs$core$IFn$_invoke$arity$1(context);\n}));\n\n(re_frame.interceptor.get_coeffect.cljs$core$IFn$_invoke$arity$2 = (function (context,key){\nreturn cljs.core.get_in.cljs$core$IFn$_invoke$arity$2(context,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"coeffects\",\"coeffects\",497912985),key], null));\n}));\n\n(re_frame.interceptor.get_coeffect.cljs$core$IFn$_invoke$arity$3 = (function (context,key,not_found){\nreturn cljs.core.get_in.cljs$core$IFn$_invoke$arity$3(context,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"coeffects\",\"coeffects\",497912985),key], null),not_found);\n}));\n\n(re_frame.interceptor.get_coeffect.cljs$lang$maxFixedArity = 3);\n\nre_frame.interceptor.assoc_coeffect = (function re_frame$interceptor$assoc_coeffect(context,key,value){\nreturn cljs.core.assoc_in(context,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"coeffects\",\"coeffects\",497912985),key], null),value);\n});\nre_frame.interceptor.update_coeffect = (function re_frame$interceptor$update_coeffect(var_args){\nvar args__4742__auto__ = [];\nvar len__4736__auto___47510 = arguments.length;\nvar i__4737__auto___47511 = (0);\nwhile(true){\nif((i__4737__auto___47511 < len__4736__auto___47510)){\nargs__4742__auto__.push((arguments[i__4737__auto___47511]));\n\nvar G__47512 = (i__4737__auto___47511 + (1));\ni__4737__auto___47511 = G__47512;\ncontinue;\n} else {\n}\nbreak;\n}\n\nvar argseq__4743__auto__ = ((((3) < args__4742__auto__.length))?(new cljs.core.IndexedSeq(args__4742__auto__.slice((3)),(0),null)):null);\nreturn re_frame.interceptor.update_coeffect.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),argseq__4743__auto__);\n});\n\n(re_frame.interceptor.update_coeffect.cljs$core$IFn$_invoke$arity$variadic = (function (context,key,f,args){\nreturn cljs.core.apply.cljs$core$IFn$_invoke$arity$5(cljs.core.update_in,context,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"coeffects\",\"coeffects\",497912985),key], null),f,args);\n}));\n\n(re_frame.interceptor.update_coeffect.cljs$lang$maxFixedArity = (3));\n\n/** @this {Function} */\n(re_frame.interceptor.update_coeffect.cljs$lang$applyTo = (function (seq47467){\nvar G__47468 = cljs.core.first(seq47467);\nvar seq47467__$1 = cljs.core.next(seq47467);\nvar G__47469 = cljs.core.first(seq47467__$1);\nvar seq47467__$2 = cljs.core.next(seq47467__$1);\nvar G__47470 = cljs.core.first(seq47467__$2);\nvar seq47467__$3 = cljs.core.next(seq47467__$2);\nvar self__4723__auto__ = this;\nreturn self__4723__auto__.cljs$core$IFn$_invoke$arity$variadic(G__47468,G__47469,G__47470,seq47467__$3);\n}));\n\nre_frame.interceptor.invoke_interceptor_fn = (function re_frame$interceptor$invoke_interceptor_fn(context,interceptor,direction){\nvar temp__5733__auto__ = cljs.core.get.cljs$core$IFn$_invoke$arity$2(interceptor,direction);\nif(cljs.core.truth_(temp__5733__auto__)){\nvar f = temp__5733__auto__;\nreturn (f.cljs$core$IFn$_invoke$arity$1 ? f.cljs$core$IFn$_invoke$arity$1(context) : f.call(null,context));\n} else {\nreturn context;\n}\n});\n/**\n * Loop over all interceptors, calling `direction` function on each,\n * threading the value of `context` through every call.\n * \n * `direction` is one of `:before` or `:after`.\n * \n * Each iteration, the next interceptor to process is obtained from\n * context's `:queue`. After they are processed, interceptors are popped\n * from `:queue` and added to `:stack`.\n * \n * After sufficient iteration, `:queue` will be empty, and `:stack` will\n * contain all interceptors processed.\n * \n * Returns updated `context`. Ie. the `context` which has been threaded\n * through all interceptor functions.\n * \n * Generally speaking, an interceptor's `:before` function will (if present)\n * add to a `context's` `:coeffects`, while it's `:after` function\n * will modify the `context`'s `:effects`. Very approximately.\n * \n * But because all interceptor functions are given `context`, and can\n * return a modified version of it, the way is clear for an interceptor\n * to introspect the stack or queue, or even modify the queue\n * (add new interceptors via `enqueue`?). This is a very fluid arrangement.\n */\nre_frame.interceptor.invoke_interceptors = (function re_frame$interceptor$invoke_interceptors(context,direction){\nvar context__$1 = context;\nwhile(true){\nvar queue = new cljs.core.Keyword(null,\"queue\",\"queue\",1455835879).cljs$core$IFn$_invoke$arity$1(context__$1);\nif(cljs.core.empty_QMARK_(queue)){\nreturn context__$1;\n} else {\nvar interceptor = cljs.core.peek(queue);\nvar stack = new cljs.core.Keyword(null,\"stack\",\"stack\",-793405930).cljs$core$IFn$_invoke$arity$1(context__$1);\nvar G__47522 = re_frame.interceptor.invoke_interceptor_fn(cljs.core.assoc.cljs$core$IFn$_invoke$arity$variadic(context__$1,new cljs.core.Keyword(null,\"queue\",\"queue\",1455835879),cljs.core.pop(queue),cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([new cljs.core.Keyword(null,\"stack\",\"stack\",-793405930),cljs.core.conj.cljs$core$IFn$_invoke$arity$2(stack,interceptor)], 0)),interceptor,direction);\ncontext__$1 = G__47522;\ncontinue;\n}\nbreak;\n}\n});\nre_frame.interceptor.enqueue = (function re_frame$interceptor$enqueue(context,interceptors){\nreturn cljs.core.update.cljs$core$IFn$_invoke$arity$4(context,new cljs.core.Keyword(null,\"queue\",\"queue\",1455835879),cljs.core.fnil.cljs$core$IFn$_invoke$arity$2(cljs.core.into,re_frame.interop.empty_queue),interceptors);\n});\n/**\n * Create a fresh context\n */\nre_frame.interceptor.context = (function re_frame$interceptor$context(var_args){\nvar G__47487 = arguments.length;\nswitch (G__47487) {\ncase 2:\nreturn re_frame.interceptor.context.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));\n\nbreak;\ncase 3:\nreturn re_frame.interceptor.context.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(re_frame.interceptor.context.cljs$core$IFn$_invoke$arity$2 = (function (event,interceptors){\nreturn re_frame.interceptor.enqueue(re_frame.interceptor.assoc_coeffect(cljs.core.PersistentArrayMap.EMPTY,new cljs.core.Keyword(null,\"event\",\"event\",301435442),event),interceptors);\n}));\n\n(re_frame.interceptor.context.cljs$core$IFn$_invoke$arity$3 = (function (event,interceptors,db){\nreturn re_frame.interceptor.assoc_coeffect(re_frame.interceptor.context.cljs$core$IFn$_invoke$arity$2(event,interceptors),new cljs.core.Keyword(null,\"db\",\"db\",993250759),db);\n}));\n\n(re_frame.interceptor.context.cljs$lang$maxFixedArity = 3);\n\n/**\n * Called on completion of `:before` processing, this function prepares/modifies\n * `context` for the backwards sweep of processing in which an interceptor\n * chain's `:after` fns are called.\n * \n * At this point in processing, the `:queue` is empty and `:stack` holds all\n * the previously run interceptors. So this function enables the backwards walk\n * by priming `:queue` with what's currently in `:stack`\n */\nre_frame.interceptor.change_direction = (function re_frame$interceptor$change_direction(context){\nreturn re_frame.interceptor.enqueue(cljs.core.dissoc.cljs$core$IFn$_invoke$arity$2(context,new cljs.core.Keyword(null,\"queue\",\"queue\",1455835879)),new cljs.core.Keyword(null,\"stack\",\"stack\",-793405930).cljs$core$IFn$_invoke$arity$1(context));\n});\n/**\n * Executes the given chain (coll) of interceptors.\n * \n * Each interceptor has this form:\n * {:before (fn [context] ...) ;; returns possibly modified context\n * :after (fn [context] ...)} ;; `identity` would be a noop\n * \n * Walks the queue of iterceptors from beginning to end, calling the\n * `:before` fn on each, then reverse direction and walk backwards,\n * calling the `:after` fn on each.\n * \n * The last interceptor in the chain presumably wraps an event\n * handler fn. So the overall goal of the process is to \"handle\n * the given event\".\n * \n * Thread a `context` through all calls. `context` has this form:\n * \n * {:coeffects {:event [:a-query-id :some-param]\n * :db <original contents of app-db>}\n * :effects {:db <new value for app-db>\n * :dispatch [:an-event-id :param1]}\n * :queue <a collection of further interceptors>\n * :stack <a collection of interceptors already walked>}\n * \n * `context` has `:coeffects` and `:effects` which, if this was a web\n * server, would be somewhat anologous to `request` and `response`\n * respectively.\n * \n * `coeffects` will contain data like `event` and the initial\n * state of `db` - the inputs required by the event handler\n * (sitting presumably on the end of the chain), while handler-returned\n * side effects are put into `:effects` including, but not limited to,\n * new values for `db`.\n * \n * The first few interceptors in a chain will likely have `:before`\n * functions which \"prime\" the `context` by adding the event, and\n * the current state of app-db into `:coeffects`. But interceptors can\n * add whatever they want to `:coeffects` - perhaps the event handler needs\n * some information from localstore, or a random number, or access to\n * a DataScript connection.\n * \n * Equally, some interceptors in the chain will have `:after` fn\n * which can process the side effects accumulated into `:effects`\n * including but, not limited to, updates to app-db.\n * \n * Through both stages (before and after), `context` contains a `:queue`\n * of interceptors yet to be processed, and a `:stack` of interceptors\n * already done. In advanced cases, these values can be modified by the\n * functions through which the context is threaded.\n */\nre_frame.interceptor.execute = (function re_frame$interceptor$execute(event_v,interceptors){\nif(re_frame.trace.is_trace_enabled_QMARK_()){\nvar new_trace__47250__auto___47540 = cljs.core.merge.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([cljs.core.update.cljs$core$IFn$_invoke$arity$4(re_frame.trace._STAR_current_trace_STAR_,new cljs.core.Keyword(null,\"tags\",\"tags\",1771418977),cljs.core.merge,new cljs.core.Keyword(null,\"tags\",\"tags\",1771418977).cljs$core$IFn$_invoke$arity$1(new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"tags\",\"tags\",1771418977),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"interceptors\",\"interceptors\",-1546782951),interceptors], null)], null))),cljs.core.dissoc.cljs$core$IFn$_invoke$arity$2(new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"tags\",\"tags\",1771418977),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"interceptors\",\"interceptors\",-1546782951),interceptors], null)], null),new cljs.core.Keyword(null,\"tags\",\"tags\",1771418977))], 0));\n(re_frame.trace._STAR_current_trace_STAR_ = new_trace__47250__auto___47540);\n\n} else {\n}\n\nreturn re_frame.interceptor.invoke_interceptors(re_frame.interceptor.change_direction(re_frame.interceptor.invoke_interceptors(re_frame.interceptor.context.cljs$core$IFn$_invoke$arity$2(event_v,interceptors),new cljs.core.Keyword(null,\"before\",\"before\",-1633692388))),new cljs.core.Keyword(null,\"after\",\"after\",594996914));\n});\n","~:ns-info",["^ ","~:rename-macros",null,"~:renames",["^ "],"~:meta",["^ ","~:file","re_frame/interceptor.cljc","~:line",1,"~:column",5,"~:end-line",1,"~:end-column",25],"~:ns-aliases",["^ ","~$cljs.loader","~$shadow.loader","~$clojure.pprint","~$cljs.pprint","~$react","~$shadow.js.shim.module$react","~$clojure.spec.alpha","~$cljs.spec.alpha"],"~:use-macros",null,"~:excludes",["~#set",[]],"~:name","~$re-frame.interceptor","~:op","~:ns","~:imports",null,"~:requires",["^ ","~$re-frame.loggers","^M","~$re-frame.interop","^N","~$re-frame.trace","^O","~$trace","^O","~$clojure.set","^Q","~$set","^Q","~$cljs.core","^S","~$goog","^T"],"~:seen",["^F",["~:require"]],"~:uses",["^ ","~$console","^M","~$empty-queue","^N","~$debug-enabled?","^N"],"~:require-macros",["^ ","^O","^O","^P","^O","^S","^S"],"~:form",["~#list",["~$ns","^H",["^11",["^V",["^M","~:refer",["^X"]],["^N","^13",["^Y","^Z"]],["^O","~:as","^P","~:include-macros",true],["^Q","^14","^R"]]]]],"~:flags",["^ ","^V",["^F",[]]],"~:js-deps",["^ "],"~:deps",["^T","^S","^M","^N","^O","^Q"]],"^J","^H","~:resource-id",["~:shadow.build.classpath/resource","re_frame/interceptor.cljc"],"~:compiled-at",1613924121701,"~:resource-name","re_frame/interceptor.cljc","~:warnings",[],"~:source","(ns re-frame.interceptor\n (:require\n [re-frame.loggers :refer [console]]\n [re-frame.interop :refer [empty-queue debug-enabled?]]\n [re-frame.trace :as trace :include-macros true]\n [clojure.set :as set]))\n\n\n(def mandatory-interceptor-keys #{:id :after :before})\n\n(defn interceptor?\n [m]\n (and (map? m)\n (= mandatory-interceptor-keys (-> m keys set))))\n\n\n(defn ->interceptor\n [& {:as m :keys [id before after]}]\n (when debug-enabled?\n (if-let [unknown-keys (seq (set/difference\n (-> m keys set)\n mandatory-interceptor-keys))]\n (console :error \"re-frame: ->interceptor\" m \"has unknown keys:\" unknown-keys)))\n {:id (or id :unnamed)\n :before before\n :after after})\n\n;; -- Effect Helpers -----------------------------------------------------------------------------\n\n(defn get-effect\n ([context]\n (:effects context))\n ([context key]\n (get-in context [:effects key]))\n ([context key not-found]\n (get-in context [:effects key] not-found)))\n\n(defn assoc-effect\n [context key value]\n (assoc-in context [:effects key] value))\n\n(defn update-effect\n [context key f & args]\n (apply update-in context [:effects key] f args))\n\n;; -- CoEffect Helpers ---------------------------------------------------------------------------\n\n(defn get-coeffect\n ([context]\n (:coeffects context))\n ([context key]\n (get-in context [:coeffects key]))\n ([context key not-found]\n (get-in context [:coeffects key] not-found)))\n\n(defn assoc-coeffect\n [context key value]\n (assoc-in context [:coeffects key] value))\n\n(defn update-coeffect\n [context key f & args]\n (apply update-in context [:coeffects key] f args))\n\n;; -- Execute Interceptor Chain ------------------------------------------------------------------\n\n\n(defn- invoke-interceptor-fn\n [context interceptor direction]\n (if-let [f (get interceptor direction)]\n (f context)\n context))\n\n\n(defn- invoke-interceptors\n \"Loop over all interceptors, calling `direction` function on each,\n threading the value of `context` through every call.\n\n `direction` is one of `:before` or `:after`.\n\n Each iteration, the next interceptor to process is obtained from\n context's `:queue`. After they are processed, interceptors are popped\n from `:queue` and added to `:stack`.\n\n After sufficient iteration, `:queue` will be empty, and `:stack` will\n contain all interceptors processed.\n\n Returns updated `context`. Ie. the `context` which has been threaded\n through all interceptor functions.\n\n Generally speaking, an interceptor's `:before` function will (if present)\n add to a `context's` `:coeffects`, while it's `:after` function\n will modify the `context`'s `:effects`. Very approximately.\n\n But because all interceptor functions are given `context`, and can\n return a modified version of it, the way is clear for an interceptor\n to introspect the stack or queue, or even modify the queue\n (add new interceptors via `enqueue`?). This is a very fluid arrangement.\"\n ([context direction]\n (loop [context context]\n (let [queue (:queue context)] ;; future interceptors\n (if (empty? queue)\n context\n (let [interceptor (peek queue) ;; next interceptor to call\n stack (:stack context)] ;; already completed interceptors\n (recur (-> context\n (assoc :queue (pop queue)\n :stack (conj stack interceptor))\n (invoke-interceptor-fn interceptor direction)))))))))\n\n\n(defn enqueue\n [context interceptors]\n (update context :queue\n (fnil into empty-queue)\n interceptors))\n\n\n(defn- context\n \"Create a fresh context\"\n ([event interceptors]\n (-> {}\n (assoc-coeffect :event event)\n (enqueue interceptors)))\n ([event interceptors db] ;; only used in tests, probably a hack, remove ? XXX\n (-> (context event interceptors)\n (assoc-coeffect :db db))))\n\n\n(defn- change-direction\n \"Called on completion of `:before` processing, this function prepares/modifies\n `context` for the backwards sweep of processing in which an interceptor\n chain's `:after` fns are called.\n\n At this point in processing, the `:queue` is empty and `:stack` holds all\n the previously run interceptors. So this function enables the backwards walk\n by priming `:queue` with what's currently in `:stack`\"\n [context]\n (-> context\n (dissoc :queue)\n (enqueue (:stack context))))\n\n\n(defn execute\n \"Executes the given chain (coll) of interceptors.\n\n Each interceptor has this form:\n {:before (fn [context] ...) ;; returns possibly modified context\n :after (fn [context] ...)} ;; `identity` would be a noop\n\n Walks the queue of iterceptors from beginning to end, calling the\n `:before` fn on each, then reverse direction and walk backwards,\n calling the `:after` fn on each.\n\n The last interceptor in the chain presumably wraps an event\n handler fn. So the overall goal of the process is to \\\"handle\n the given event\\\".\n\n Thread a `context` through all calls. `context` has this form:\n\n {:coeffects {:event [:a-query-id :some-param]\n :db <original contents of app-db>}\n :effects {:db <new value for app-db>\n :dispatch [:an-event-id :param1]}\n :queue <a collection of further interceptors>\n :stack <a collection of interceptors already walked>}\n\n `context` has `:coeffects` and `:effects` which, if this was a web\n server, would be somewhat anologous to `request` and `response`\n respectively.\n\n `coeffects` will contain data like `event` and the initial\n state of `db` - the inputs required by the event handler\n (sitting presumably on the end of the chain), while handler-returned\n side effects are put into `:effects` including, but not limited to,\n new values for `db`.\n\n The first few interceptors in a chain will likely have `:before`\n functions which \\\"prime\\\" the `context` by adding the event, and\n the current state of app-db into `:coeffects`. But interceptors can\n add whatever they want to `:coeffects` - perhaps the event handler needs\n some information from localstore, or a random number, or access to\n a DataScript connection.\n\n Equally, some interceptors in the chain will have `:after` fn\n which can process the side effects accumulated into `:effects`\n including but, not limited to, updates to app-db.\n\n Through both stages (before and after), `context` contains a `:queue`\n of interceptors yet to be processed, and a `:stack` of interceptors\n already done. In advanced cases, these values can be modified by the\n functions through which the context is threaded.\"\n [event-v interceptors]\n (trace/merge-trace!\n {:tags {:interceptors interceptors}})\n (-> (context event-v interceptors)\n (invoke-interceptors :before)\n change-direction\n (invoke-interceptors :after)))\n","~:reader-features",["^F",["~:cljs"]],"~:cljc",true,"~:source-map-compact",["^ ","mappings","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","names",["re-frame.interceptor/mandatory-interceptor-keys","re-frame.interceptor/interceptor?","m","cljs.core/map?","cljs.core._EQ_","cljs.core/keys","cljs.core/set","var_args","args__4742__auto__","len__4736__auto__","i__4737__auto__","argseq__4743__auto__","cljs.core/IndexedSeq","re-frame.interceptor/->interceptor","p__47416","map__47417","cljs.core/PROTOCOL_SENTINEL","cljs.core.apply","cljs.core/hash-map","cljs.core.get","seq47408","self__4724__auto__","cljs.core/seq","id","before","after","re-frame.interop/debug-enabled?","temp__5733__auto__","unknown-keys","clojure.set.difference","re_frame.loggers.console","or__4126__auto__","G__47437","re-frame.interceptor/get-effect","js/Error","context","key","cljs.core.get_in","not-found","re-frame.interceptor/assoc-effect","value","cljs.core/assoc-in","re-frame.interceptor/update-effect","seq47444","G__47445","cljs.core/first","cljs.core/next","G__47446","G__47447","self__4723__auto__","f","args","cljs.core/update-in","G__47457","re-frame.interceptor/get-coeffect","re-frame.interceptor/assoc-coeffect","re-frame.interceptor/update-coeffect","seq47467","G__47468","G__47469","G__47470","re-frame.interceptor/invoke-interceptor-fn","interceptor","direction","re-frame.interceptor/invoke-interceptors","queue","cljs.core/empty?","cljs.core/peek","stack","cljs.core.assoc","cljs.core/pop","cljs.core.conj","re-frame.interceptor/enqueue","interceptors","cljs.core.update","cljs.core.fnil","cljs.core/into","re-frame.interop/empty-queue","G__47487","re-frame.interceptor/context","event","db","re_frame.interceptor.context","re-frame.interceptor/change-direction","cljs.core.dissoc","re-frame.interceptor/execute","event-v","re-frame.trace/is-trace-enabled?","new-trace__47250__auto__","cljs.core.merge","re-frame.trace/*current-trace*","cljs.core/merge"]],"~:used-vars",["^F",["~$re-frame.interceptor/context","~$re-frame.interceptor/get-effect","~$cljs.core/=","~$cljs.core/keys","~$re-frame.interceptor/execute","~$re-frame.interceptor/->interceptor","~$cljs.core/seq","~$cljs.core/apply","~$re-frame.loggers/console","~$cljs.core/dissoc","~$re-frame.interceptor/update-effect","~$cljs.core/pop","~$re-frame.interceptor/invoke-interceptors","~$cljs.core/set","~$cljs.core/empty?","~$re-frame.interceptor/enqueue","~$cljs.core/fnil","~$cljs.core/into","~$cljs.core/map?","~$cljs.core/conj","~$cljs.core/update","~$cljs.core/get-in","~$re-frame.interceptor/update-coeffect","~$re-frame.trace/is-trace-enabled?","~$re-frame.interceptor/assoc-coeffect","~$re-frame.interceptor/change-direction","~$re-frame.trace/*current-trace*","~$re-frame.interceptor/get-coeffect","~$re-frame.interop/empty-queue","~$re-frame.interceptor/assoc-effect","~$re-frame.interceptor/interceptor?","~$cljs.core/assoc","~$cljs.core/assoc-in","~$re-frame.interop/debug-enabled?","~$cljs.core/update-in","~$re-frame.interceptor/invoke-interceptor-fn","~$js/Error","~$re-frame.interceptor/mandatory-interceptor-keys"]]],"~:cache-keys",["~#cmap",[["^1:","reagent/impl/batching.cljs"],["71172e9be671755156730f86af647b7c667093fa","~:shadow.build.compiler/resolve",["^ ","~:require-id",null,"~:deps-ids",["^F",[]],"~:deps-syms",["^T","^S","~$reagent.debug","~$reagent.impl.util"]]],["^1:","goog/dom/tagname.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","~$goog.dom.HtmlElement"]]],["^1:","goog/labs/useragent/platform.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","~$goog.labs.userAgent.util","~$goog.string"]]],["^1:","goog/math/math.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","~$goog.array","~$goog.asserts"]]],["^1:","goog/html/trustedtypes.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/events/eventtype.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","~$goog.events.BrowserFeature","~$goog.userAgent"]]],["^1:","goog/labs/useragent/browser.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2K","^2I","~$goog.object","~$goog.string.internal"]]],["^1:","goog/html/safeurl.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2L","~$goog.fs.url","~$goog.html.TrustedResourceUrl","~$goog.i18n.bidi.Dir","~$goog.i18n.bidi.DirectionalString","~$goog.string.Const","~$goog.string.TypedString","^2P"]]],["^1:","re_frame/loggers.cljc"],["0e1666916193eaabc7012c4a18450a0d00336095","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S","^Q"]]],["^1:","goog/array/array.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2L"]]],["^1:","reagent/impl/util.cljs"],["71172e9be671755156730f86af647b7c667093fa","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S","~$clojure.string","~$clojure.walk","^2O","^2F"]]],["^1:","goog/useragent/useragent.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","~$goog.labs.userAgent.browser","~$goog.labs.userAgent.engine","~$goog.labs.userAgent.platform","^2I","~$goog.reflect","^2J"]]],["^1:","goog/debug/error.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/events/events.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2L","~$goog.debug.entryPointRegistry","~$goog.events.BrowserEvent","^2M","~$goog.events.Listenable","~$goog.events.ListenerMap"]]],["^1:","goog/events/browserfeature.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2N"]]],["^1:","goog/dom/nodetype.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","reagent/ratom.cljs"],["71172e9be671755156730f86af647b7c667093fa","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S","^2G","^2F","~$reagent.impl.batching","^Q","^2O"]]],["^1:","re_frame/interop.cljs"],["0e1666916193eaabc7012c4a18450a0d00336095","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S","~$goog.async.nextTick","~$goog.events","~$reagent.core","~$reagent.ratom"]]],["^1:","goog/disposable/disposable.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","~$goog.disposable.IDisposable"]]],["^1:","goog/string/typedstring.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/object/object.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","reagent/impl/template.cljs"],["71172e9be671755156730f86af647b7c667093fa","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S","^A","^2W","^2G","~$reagent.impl.component","^35","~$reagent.impl.input","~$reagent.impl.protocols","^39","^2F","^2O"]]],["^1:","goog/dom/asserts.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2L"]]],"~:SHADOW-TIMESTAMP",[1598798247000,1598798247000,1592608845000],["^1:","goog/math/long.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2L","^30"]]],["^1:","goog/events/listener.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","~$goog.events.ListenableKey"]]],["^1:","goog/html/trustedresourceurl.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2L","~$goog.html.trustedtypes","^2S","^2T","^2U","^2V"]]],["^1:","goog/events/listenermap.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2K","~$goog.events.Listener","^2O"]]],["^1:","goog/events/eventid.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/string/internal.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/functions/functions.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/html/safestyle.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2K","^2L","~$goog.html.SafeUrl","^2U","^2V","^2P"]]],["^1:","goog/dom/safe.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2L","~$goog.dom.asserts","~$goog.functions","~$goog.html.SafeHtml","~$goog.html.SafeScript","~$goog.html.SafeStyle","^3B","^2R","~$goog.html.uncheckedconversions","^2U","^2P"]]],["^1:","reagent/impl/component.cljs"],["71172e9be671755156730f86af647b7c667093fa","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S","^2O","^A","^2G","^35","^3=","^39","^2F"]]],["^1:","clojure/walk.cljs"],["9f9729dbbf9b814c83dc189977b447d2ae92b6cd","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S"]]],["^1:","goog/structs/map.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","~$goog.iter.Iterator","~$goog.iter.StopIteration"]]],["^1:","goog/html/safehtml.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2K","^2L","~$goog.dom.TagName","~$goog.dom.tags","^3F","^3G","~$goog.html.SafeStyleSheet","^3B","^2R","^3@","^2S","^2T","^2Y","^2O","^2U","^2V","^2P"]]],["^1:","goog/dom/tags.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2O"]]],["^1:","goog/math/size.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/labs/useragent/engine.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2K","^2I","^2J"]]],["^1:","goog/dom/dom.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2K","^2L","~$goog.dom.BrowserFeature","~$goog.dom.NodeType","^3K","~$goog.dom.safe","^3E","^3H","~$goog.math.Coordinate","~$goog.math.Size","^2O","^2J","~$goog.string.Unicode","^2N"]]],["^1:","goog/asserts/asserts.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","~$goog.debug.Error","^3O"]]],["^1:","reagent/impl/protocols.cljs"],["71172e9be671755156730f86af647b7c667093fa","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S"]]],["^1:","goog/uri/uri.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2K","^2L","^2J","~$goog.structs","~$goog.structs.Map","~$goog.uri.utils","~$goog.uri.utils.ComponentIndex","~$goog.uri.utils.StandardQueryParam"]]],["^1:","goog/i18n/bidi.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/disposable/idisposable.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/fs/url.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/base.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",[]]],["^1:","goog/structs/structs.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2K","^2O"]]],["^1:","clojure/string.cljs"],["9f9729dbbf9b814c83dc189977b447d2ae92b6cd","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S","^2J","~$goog.string.StringBuffer"]]],["~:shadow.build.js-support/require","react"],["^A","shadow.js.shim.module$react.js","require","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/debug/entrypointregistry.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2L"]]],["^1:","goog/string/string.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^3P","^3H","^2U","^2P"]]],["^1:","re_frame/interceptor.cljc"],["0e1666916193eaabc7012c4a18450a0d00336095","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S","^M","^N","^O","^Q"]]],["^1:","goog/reflect/reflect.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/labs/useragent/util.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2P"]]],["^1:","reagent/core.cljs"],["71172e9be671755156730f86af647b7c667093fa","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S","^A","~$reagent.impl.template","^3;","^2G","^35","^3=","^39","^2F"]]],["^1:","goog/debug/debug.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2K","~$goog.debug.errorcontext","^2N"]]],["^1:","goog/string/stringbuffer.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/math/coordinate.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","~$goog.math"]]],["^1:","goog/debug/errorcontext.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","goog/iter/iter.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2K","^2L","^3D","^42"]]],["^1:","goog/async/nexttick.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^31","~$goog.dom","^3K","^3P","^3D","^3E","^2R","^2Y","^2Z","^2U"]]],["^1:","goog/html/uncheckedconversions.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2L","^3E","^3F","^3G","^3M","^3B","^2R","^2U","^2P"]]],["^1:","reagent/impl/input.cljs"],["71172e9be671755156730f86af647b7c667093fa","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S","^3;","^35","^3="]]],["^1:","goog/events/event.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","~$goog.Disposable","~$goog.events.EventId"]]],["^1:","goog/dom/htmlelement.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T"]]],["^1:","cljs/core.cljs"],["9f9729dbbf9b814c83dc189977b447d2ae92b6cd","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","~$goog.math.Long","~$goog.math.Integer","^2J","^2O","^2K","~$goog.Uri","^3Z"]]],["^1:","goog/html/safescript.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2L","^3@","^2U","^2V"]]],["^1:","reagent/debug.cljs"],["71172e9be671755156730f86af647b7c667093fa","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S"]]],["^1:","goog/html/safestylesheet.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2K","^2L","^3G","^2O","^2U","^2V","^2P"]]],["^1:","goog/events/browserevent.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","~$goog.debug","^2M","~$goog.events.Event","~$goog.events.EventType","^30","^2N"]]],["^1:","goog/math/integer.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^30"]]],["^1:","goog/dom/browserfeature.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2N"]]],["^1:","clojure/set.cljs"],["9f9729dbbf9b814c83dc189977b447d2ae92b6cd","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S"]]],["^1:","goog/uri/utils.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2K","^2L","^2J"]]],["^1:","goog/string/const.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^2L","^2V"]]],["^1:","goog/events/listenable.js"],["6025affb7181cd40418600864f58eed1ea80055d","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^45"]]],["^1:","re_frame/trace.cljc"],["0e1666916193eaabc7012c4a18450a0d00336095","^2B",["^ ","^2C",null,"^2D",["^F",[]],"^2E",["^T","^S","^N","^M","^3D"]]]]],"~:clj-info",["^ ","jar:file:/home/justin/.m2/repository/re-frame/re-frame/1.1.1/re-frame-1.1.1.jar!/re_frame/interop.clj",1599498230000,"jar:file:/home/justin/.m2/repository/org/clojure/clojurescript/1.10.773/clojurescript-1.10.773.jar!/cljs/env.cljc",1592608845000,"jar:file:/home/justin/.m2/repository/org/clojure/clojurescript/1.10.773/clojurescript-1.10.773.jar!/cljs/analyzer.cljc",1592608845000,"jar:file:/home/justin/.m2/repository/org/clojure/tools.reader/1.3.3/tools.reader-1.3.3.jar!/clojur