["^ ","~:rename-macros",["^ "],"~:renames",["^ "],"~:externs",["^ ","~$Error",["^ "]],"~:use-macros",["^ ","~$console","~$re-frame.loggers","~$empty-queue","~$re-frame.interop","~$debug-enabled?","^8"],"~:excludes",["~#set",[]],"~:name","~$re-frame.interceptor","~:imports",null,"~:requires",["^ ","^6","^6","^8","^8","~$trace","~$re-frame.trace","^A","^A","~$set","~$clojure.set","^C","^C"],"~:cljs.spec/speced-vars",[],"~:uses",["^ ","^5","^6","^7","^8","^9","^8"],"~:defs",["^ ","~$invoke-interceptors",["^ ","~:protocol-inline",null,"~:meta",["^ ","~:file","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","~:line",72,"~:column",8,"~:end-line",72,"~:end-column",27,"~:private",true,"~:arglists",["~#list",["~$quote",["^Q",[["~$context","~$direction"]]]]],"~:doc","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."],"^O",true,"^<","~$re-frame.interceptor/invoke-interceptors","~:variadic",false,"^J","out-cli/re_frame/interceptor.cljc","^N",27,"~:method-params",["^Q",[["^S","^T"]]],"~:protocol-impl",null,"~:arglists-meta",["^Q",[null,null]],"^L",1,"^K",72,"^M",72,"~:max-fixed-arity",2,"~:fn-var",true,"^P",["^Q",["^R",["^Q",[["^S","^T"]]]]],"^U","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."],"~$assoc-coeffect",["^ ","^H",null,"^I",["^ ","^J","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","^K",54,"^L",7,"^M",54,"^N",21,"^P",["^Q",["^R",["^Q",[["^S","~$key","~$value"]]]]]],"^<","~$re-frame.interceptor/assoc-coeffect","^W",false,"^J","out-cli/re_frame/interceptor.cljc","^N",21,"^X",["^Q",[["^S","^12","^13"]]],"^Y",null,"^Z",["^Q",[null,null]],"^L",1,"^K",54,"^M",54,"^[",3,"^10",true,"^P",["^Q",["^R",["^Q",[["^S","^12","^13"]]]]]],"~$update-coeffect",["^ ","^H",null,"^I",["^ ","^J","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","^K",58,"^L",7,"^M",58,"^N",22,"^P",["^Q",["^R",["^Q",[["^S","^12","~$f","~$&","~$args"]]]]],"~:top-fn",["^ ","^W",true,"^[",3,"^X",[["^Q",["^S","^12","~$f","^16"]]],"^P",["^Q",[["^S","^12","~$f","~$&","^16"]]],"^Z",["^Q",[null]]]],"^<","~$re-frame.interceptor/update-coeffect","^W",true,"^J","out-cli/re_frame/interceptor.cljc","^N",22,"^17",["^ ","^W",true,"^[",3,"^X",[["^Q",["^S","^12","~$f","^16"]]],"^P",["^Q",[["^S","^12","~$f","~$&","^16"]]],"^Z",["^Q",[null]]],"^X",[["^Q",["^S","^12","~$f","^16"]]],"^Y",null,"^Z",["^Q",[null]],"^L",1,"^K",58,"^M",58,"^[",3,"^10",true,"^P",["^Q",[["^S","^12","~$f","~$&","^16"]]]],"~$invoke-interceptor-fn",["^ ","^H",null,"^I",["^ ","^J","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","^K",65,"^L",8,"^M",65,"^N",29,"^O",true,"^P",["^Q",["^R",["^Q",[["^S","~$interceptor","^T"]]]]]],"^O",true,"^<","~$re-frame.interceptor/invoke-interceptor-fn","^W",false,"^J","out-cli/re_frame/interceptor.cljc","^N",29,"^X",["^Q",[["^S","^1:","^T"]]],"^Y",null,"^Z",["^Q",[null,null]],"^L",1,"^K",65,"^M",65,"^[",3,"^10",true,"^P",["^Q",["^R",["^Q",[["^S","^1:","^T"]]]]]],"~$get-effect",["^ ","^H",null,"^I",["^ ","^J","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","^K",31,"^L",7,"^M",31,"^N",17,"^P",["^Q",["^R",["^Q",[["^S"],["^S","^12"],["^S","^12","~$not-found"]]]]],"^17",["^ ","^W",false,"^[",3,"^X",["^Q",[["^S"],["^S","^12"],["^S","^12","^1="]]],"^P",["^Q",[["^S"],["^S","^12"],["^S","^12","^1="]]],"^Z",["^Q",[null,null,null]]]],"^<","~$re-frame.interceptor/get-effect","^W",false,"^J","out-cli/re_frame/interceptor.cljc","^N",17,"^17",["^ ","^W",false,"^[",3,"^X",["^Q",[["^S"],["^S","^12"],["^S","^12","^1="]]],"^P",["^Q",[["^S"],["^S","^12"],["^S","^12","^1="]]],"^Z",["^Q",[null,null,null]]],"^X",["^Q",[["^S"],["^S","^12"],["^S","^12","^1="]]],"^Y",null,"^Z",["^Q",[null,null,null]],"^L",1,"^K",31,"^M",31,"^[",3,"^10",true,"^P",["^Q",[["^S"],["^S","^12"],["^S","^12","^1="]]]],"~$->interceptor",["^ ","^H",null,"^I",["^ ","^J","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","^K",17,"^L",7,"^M",17,"^N",20,"^P",["^Q",["^R",["^Q",[["~$&",["^ ","~:as","~$m","~:keys",["~$id","~$before","~$after"]]]]]]],"^U","Create an interceptor from named arguments","^17",["^ ","^W",true,"^[",0,"^X",[["^Q",[["^ ","^1@","~$m","^1A",["^1B","^1C","^1D"]]]]],"^P",["^Q",[["~$&",["^ ","^1@","~$m","^1A",["^1B","^1C","^1D"]]]]],"^Z",["^Q",[null]]]],"^<","~$re-frame.interceptor/->interceptor","^W",true,"^J","out-cli/re_frame/interceptor.cljc","^N",20,"^17",["^ ","^W",true,"^[",0,"^X",[["^Q",[["^ ","^1@","~$m","^1A",["^1B","^1C","^1D"]]]]],"^P",["^Q",[["~$&",["^ ","^1@","~$m","^1A",["^1B","^1C","^1D"]]]]],"^Z",["^Q",[null]]],"^X",[["^Q",[["^ ","^1@","~$m","^1A",["^1B","^1C","^1D"]]]]],"^Y",null,"^Z",["^Q",[null]],"^L",1,"^K",17,"^M",17,"^[",0,"^10",true,"^P",["^Q",[["~$&",["^ ","^1@","~$m","^1A",["^1B","^1C","^1D"]]]]],"^U","Create an interceptor from named arguments"],"~$get-coeffect",["^ ","^H",null,"^I",["^ ","^J","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","^K",46,"^L",7,"^M",46,"^N",19,"^P",["^Q",["^R",["^Q",[["^S"],["^S","^12"],["^S","^12","^1="]]]]],"^17",["^ ","^W",false,"^[",3,"^X",["^Q",[["^S"],["^S","^12"],["^S","^12","^1="]]],"^P",["^Q",[["^S"],["^S","^12"],["^S","^12","^1="]]],"^Z",["^Q",[null,null,null]]]],"^<","~$re-frame.interceptor/get-coeffect","^W",false,"^J","out-cli/re_frame/interceptor.cljc","^N",19,"^17",["^ ","^W",false,"^[",3,"^X",["^Q",[["^S"],["^S","^12"],["^S","^12","^1="]]],"^P",["^Q",[["^S"],["^S","^12"],["^S","^12","^1="]]],"^Z",["^Q",[null,null,null]]],"^X",["^Q",[["^S"],["^S","^12"],["^S","^12","^1="]]],"^Y",null,"^Z",["^Q",[null,null,null]],"^L",1,"^K",46,"^M",46,"^[",3,"^10",true,"^P",["^Q",[["^S"],["^S","^12"],["^S","^12","^1="]]]],"~$execute",["^ ","^H",null,"^I",["^ ","^J","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","^K",146,"^L",7,"^M",146,"^N",14,"^P",["^Q",["^R",["^Q",[["~$event-v","~$interceptors"]]]]],"^U","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."],"^<","~$re-frame.interceptor/execute","^W",false,"^J","out-cli/re_frame/interceptor.cljc","^N",14,"^X",["^Q",[["^1I","^1J"]]],"^Y",null,"^Z",["^Q",[null,null]],"^L",1,"^K",146,"^M",146,"^[",2,"^10",true,"^P",["^Q",["^R",["^Q",[["^1I","^1J"]]]]],"^U","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."],"~$assoc-effect",["^ ","^H",null,"^I",["^ ","^J","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","^K",40,"^L",7,"^M",40,"^N",19,"^P",["^Q",["^R",["^Q",[["^S","^12","^13"]]]]]],"^<","~$re-frame.interceptor/assoc-effect","^W",false,"^J","out-cli/re_frame/interceptor.cljc","^N",19,"^X",["^Q",[["^S","^12","^13"]]],"^Y",null,"^Z",["^Q",[null,null]],"^L",1,"^K",40,"^M",40,"^[",3,"^10",true,"^P",["^Q",["^R",["^Q",[["^S","^12","^13"]]]]]],"~$enqueue",["^ ","^H",null,"^I",["^ ","^J","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","^K",109,"^L",7,"^M",109,"^N",14,"^P",["^Q",["^R",["^Q",[["^S","^1J"]]]]],"^U","Add a collection of `interceptors` to the end of `context's` execution `:queue`.\n  Returns the updated `context`.\n\n  In an advanced case, this function could allow an interceptor to add new\n  interceptors to the `:queue` of a context."],"^<","~$re-frame.interceptor/enqueue","^W",false,"^J","out-cli/re_frame/interceptor.cljc","^N",14,"^X",["^Q",[["^S","^1J"]]],"^Y",null,"^Z",["^Q",[null,null]],"^L",1,"^K",109,"^M",109,"^[",2,"^10",true,"^P",["^Q",["^R",["^Q",[["^S","^1J"]]]]],"^U","Add a collection of `interceptors` to the end of `context's` execution `:queue`.\n  Returns the updated `context`.\n\n  In an advanced case, this function could allow an interceptor to add new\n  interceptors to the `:queue` of a context."],"~$mandatory-interceptor-keys",["^ ","^<","~$re-frame.interceptor/mandatory-interceptor-keys","^J","out-cli/re_frame/interceptor.cljc","^K",9,"^L",1,"^M",9,"^N",32,"^I",["^ ","^J","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","^K",9,"^L",6,"^M",9,"^N",32],"~:tag","~$cljs.core/ISet"],"~$interceptor?",["^ ","^H",null,"^I",["^ ","^J","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","^K",11,"^L",7,"^M",11,"^N",19,"^P",["^Q",["^R",["^Q",[["~$m"]]]]]],"^<","~$re-frame.interceptor/interceptor?","^W",false,"^J","out-cli/re_frame/interceptor.cljc","^N",19,"^X",["^Q",[["~$m"]]],"^Y",null,"^Z",["^Q",[null,null]],"^L",1,"^K",11,"^M",11,"^[",1,"^10",true,"^P",["^Q",["^R",["^Q",[["~$m"]]]]]],"~$change-direction",["^ ","^H",null,"^I",["^ ","^J","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","^K",132,"^L",8,"^M",132,"^N",24,"^O",true,"^P",["^Q",["^R",["^Q",[["^S"]]]]],"^U","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`"],"^O",true,"^<","~$re-frame.interceptor/change-direction","^W",false,"^J","out-cli/re_frame/interceptor.cljc","^N",24,"^X",["^Q",[["^S"]]],"^Y",null,"^Z",["^Q",[null,null]],"^L",1,"^K",132,"^M",132,"^[",1,"^10",true,"^P",["^Q",["^R",["^Q",[["^S"]]]]],"^U","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`"],"^S",["^ ","^H",null,"^I",["^ ","^J","/Users/jmmk/Dropbox/clojure/javascript-externs-generator/out-cli/re_frame/interceptor.cljc","^K",121,"^L",8,"^M",121,"^N",15,"^O",true,"^P",["^Q",["^R",["^Q",[["~$event","^1J"],["^1X","^1J","~$db"]]]]],"^U","Create a fresh context","^17",["^ ","^W",false,"^[",3,"^X",["^Q",[["^1X","^1J"],["^1X","^1J","^1Y"]]],"^P",["^Q",[["^1X","^1J"],["^1X","^1J","^1Y"]]],"^Z",["^Q",[null,null]]]],"^O",true,"^<","~$re-frame.interceptor/context","^W",false,"^J","out-cli/re_frame/interceptor.cljc","^N",15,"^17",["^ ","^W",false,"^[",3,"^X",["^Q",[["^1X","^1J"],["^1X","^1J","^1Y"]]],"^P",["^Q",[["^1X","^1J"],["^1X","^1J","^1Y"]]],"^Z",["^Q",[null,null]]],"^X",["^Q",[["^1X","^1J"],["^1X","^1J","^1Y"]]],"^Y",null,"^Z",["^Q",[null,null]],"^L",1,"^K",121,"^M",121,"^[",3,"^10",true,"^P",["^Q",[["^1X","^1J"],["^1X","^1J","^1Y"]]],"^U","Create a fresh context"]],"~:cljs.spec/registry-ref",[],"~:require-macros",["^ ","^@","^A","^A","^A"],"~:cljs.analyzer/constants",["^ ","~:seen",["^;",["~:unnamed","~:tags","~:db","~:queue","~:event","~:after","~:id","~:effects","~:stack","~:error","~:coeffects","~:interceptors","~:before"]],"~:order",["^28","^29","^2?","^2<","^23","^2:","^2=","^26","^2;","^27","^25","^24","^2>"]],"^U",null]