\" (inc i) \"
\"))))\n"} {:sym update-highlight!, :meta {:doc nil, :arglists ([content last-elem])}, :source "(defn\n update-highlight!\n [content last-elem]\n (when-let\n [elem @last-elem]\n (set! (.-backgroundColor (.-style elem)) nil)\n (reset! last-elem nil))\n (when-let\n [elem (dom/get-focused-form)]\n (when-let\n [color\n (.getPropertyValue\n (.getComputedStyle js/window (.-firstChild elem))\n \"color\")]\n (let\n [new-color (-> color (replace #\"rgb\\(\" \"\") (replace #\"\\)\" \"\"))]\n (set!\n (.-backgroundColor (.-style elem))\n (str \"rgba(\" new-color \", 0.1)\"))\n (reset! last-elem elem)))))\n"} {:sym init, :meta {:doc nil, :arglists ([paren-soup opts])}, :source "(defn\n init\n [paren-soup opts]\n (.init js/rangy)\n (let\n [opts\n (js->clj opts :keywordize-keys true)\n content\n (.querySelector paren-soup \".content\")\n events-chan\n (chan)\n editor\n (create-editor paren-soup content events-chan opts)]\n (set! (.-spellcheck paren-soup) false)\n (when-not\n content\n (throw (js/Error. \"Can't find a div with class 'content'\")))\n (initialize! editor)\n (add-event-listeners! content events-chan opts)\n (go\n (while\n true\n (let\n [event (\n opts\n :before-change-callback\n ((fn* [p1__18525#] (p1__18525# event))))\n (case\n (.-type event)\n \"keydown\"\n (cond\n (and\n (key-name? event :undo-or-redo)\n (-> opts :disable-undo-redo? not))\n (if (.-shiftKey event) (redo! editor) (undo! editor))\n (key-name? event :enter)\n (enter! editor)\n (key-name? event :up-arrow)\n (up! editor)\n (key-name? event :down-arrow)\n (down! editor)\n (key-name? event :tab)\n (tab! editor))\n \"keyup\"\n (cond\n (key-name? event :arrows)\n (update-cursor-position!\n editor\n (dom/get-cursor-position content false))\n (key-name? event :general)\n (refresh-after-key-event! editor event))\n \"cut\"\n (refresh-after-cut-paste! editor)\n \"paste\"\n (refresh-after-cut-paste! editor)\n \"mouseup\"\n (update-cursor-position!\n editor\n (dom/get-cursor-position\n content\n (some? (:console-callback opts))))\n \"mouseenter\"\n (show-error-message! paren-soup event)\n \"mouseleave\"\n (hide-error-messages! paren-soup)\n nil)\n (some->\n opts\n :change-callback\n ((fn* [p1__18526#] (p1__18526# event))))))))\n editor))\n"} {:sym can-undo?, :meta {:doc nil, :arglists ([this])}, :protocol Editor} {:sym refresh-content!, :meta {:doc "Refreshes the content.", :arglists ([content state])}, :source "(defn\n refresh-content!\n \"Refreshes the content.\"\n [content state]\n (if-let\n [crop (:cropped-state state)]\n (let\n [crop (refresh-content-element! crop)]\n (if\n (not= (:text state) (.-textContent content))\n (refresh-content! content (dissoc state :cropped-state))\n (assoc state :cropped-state crop)))\n (do\n (set! (.-innerHTML content) (hs/code->html (:text state)))\n (dissoc state :cropped-state))))\n"} {:sym redo, :meta {:doc nil, :arglists ([editor])}, :source "(defn redo [editor] (redo! editor))\n"} {:sym debounce-function, :meta {:doc nil, :arglists ([f millis])}, :source "(defn debounce-function [f millis] (debounce f millis))\n"} {:sym refresh-instarepl!, :meta {:doc "Refreshes the InstaREPL.", :arglists ([instarepl content compiler-fn])}, :source "(defn\n refresh-instarepl!\n \"Refreshes the InstaREPL.\"\n [instarepl content compiler-fn]\n (let\n [elems\n (ir/get-collections content)\n locations\n (ir/elems->locations elems (.-offsetTop instarepl))\n forms\n (->>\n elems\n (map ir/collection->content)\n (map (fn* [p1__18515#] (replace p1__18515# \\ \" \"))))]\n (compiler-fn\n forms\n (fn\n [results]\n (when\n (.-parentElement instarepl)\n (set!\n (.-innerHTML instarepl)\n (ir/results->html results locations)))))))\n"} {:sym edit-and-refresh!, :meta {:doc nil, :arglists ([this state])}, :protocol Editor} {:sym rainbow-count, :meta {}, :source "(def rainbow-count 5)\n"} {:sym update-cursor-position!, :meta {:doc nil, :arglists ([this position])}, :protocol Editor} {:sym init-state, :meta {:doc "Returns the editor's state. If full-selection? is true, it will try to save\nthe entire selection rather than just the cursor position.", :arglists ([content crop? full-selection?])}, :source "(defn\n init-state\n \"Returns the editor's state. If full-selection? is true, it will try to save\\nthe entire selection rather than just the cursor position.\"\n [content crop? full-selection?]\n (let\n [selection\n (.getSelection js/rangy)\n anchor\n (.-anchorNode selection)\n focus\n (.-focusNode selection)\n parent\n (when (and anchor focus) (dom/common-ancestor anchor focus))\n state\n {:cursor-position\n (-> content (dom/get-selection full-selection?) :cursor-position),\n :text (.-textContent content)}]\n (if-let\n [cropped-selection (some-> parent (dom/get-selection false))]\n (if\n crop?\n (assoc\n state\n :cropped-state\n (assoc cropped-selection :text (.-textContent parent)))\n state)\n state)))\n"} {:sym eval!, :meta {:doc nil, :arglists ([this form callback])}, :protocol Editor} {:sym add-parinfer-after-console-start, :meta {:doc nil, :arglists ([console-start-num state])}, :source "(defn\n add-parinfer-after-console-start\n [console-start-num state]\n (let\n [pre-text\n (subs (:text state) 0 console-start-num)\n post-text\n (subs (:text state) console-start-num)\n cleared-text\n (str (replace pre-text #\"[^\\r^\\n]\" \" \") post-text)\n temp-state\n (assoc state :text cleared-text)\n temp-state\n (cp/add-parinfer :both temp-state)\n new-text\n (str pre-text (subs (:text temp-state) console-start-num))]\n (assoc state :text new-text)))\n"} {:sym refresh-numbers!, :meta {:doc "Refreshes the line numbers.", :arglists ([numbers line-count])}, :source "(defn\n refresh-numbers!\n \"Refreshes the line numbers.\"\n [numbers line-count]\n (set! (.-innerHTML numbers) (line-numbers line-count)))\n"} {:sym refresh-after-cut-paste!, :meta {:doc nil, :arglists ([this])}, :protocol Editor} {:sym refresh-after-key-event!, :meta {:doc nil, :arglists ([this event])}, :protocol Editor} {:sym add-newline, :meta {:doc nil, :arglists ([{:keys [text], :as state}])}, :source "(defn\n add-newline\n [{:keys [text], :as state}]\n (if-not\n (= \\newline (last text))\n (assoc state :text (str text \\newline))\n state))\n"} {:sym update-edit-history!, :meta {:doc nil, :arglists ([edit-history state])}, :source "(defn\n update-edit-history!\n [edit-history state]\n (try\n (mwm/update-edit-history! edit-history (dissoc state :cropped-state))\n state\n (catch js/Error _ (mwm/get-current-state edit-history))))\n"} {:sym refresh-console-content!, :meta {:doc nil, :arglists ([content state console-start-num clj?])}, :source "(defn\n refresh-console-content!\n [content state console-start-num clj?]\n (set!\n (.-innerHTML content)\n (if\n clj?\n (let\n [pre-text\n (subs (:text state) 0 console-start-num)\n post-text\n (subs (:text state) console-start-num)]\n (str (hs/escape-html-str pre-text) (hs/code->html post-text)))\n (hs/escape-html-str (:text state))))\n state)\n"} {:sym append-text, :meta {:doc nil, :arglists ([editor text])}, :source "(defn append-text [editor text] (append-text! editor text))\n"} {:sym prevent-default?, :meta {:doc nil, :arglists ([event opts])}, :source "(defn\n prevent-default?\n [event opts]\n (or\n (key-name? event :undo-or-redo)\n (key-name? event :tab)\n (key-name? event :enter)\n (and\n (:console-callback opts)\n (or (key-name? event :up-arrow) (key-name? event :down-arrow)))))\n"} {:sym initialize!, :meta {:doc nil, :arglists ([this])}, :protocol Editor} {:sym add-parinfer, :meta {:doc nil, :arglists ([enable? console-start-num state])}, :source "(defn\n add-parinfer\n [enable? console-start-num state]\n (if\n enable?\n (let\n [cropped-state\n (:cropped-state state)\n indent-type\n (:indent-type state)\n state\n (cond\n (pos? console-start-num)\n (add-parinfer-after-console-start console-start-num state)\n indent-type\n (cp/add-indent state)\n :else\n (cp/add-parinfer :paren state))]\n (if\n (and cropped-state indent-type)\n (assoc\n state\n :cropped-state\n (merge\n cropped-state\n (cp/add-indent (assoc cropped-state :indent-type indent-type))))\n state))\n state))\n"} {:sym undo, :meta {:doc nil, :arglists ([editor])}, :source "(defn undo [editor] (undo! editor))\n"} {:sym obj?, :meta {}, :source "(def obj? (fn* [p1__18514#] (instance? js/Object p1__18514#)))\n"} {:sym down!, :meta {:doc nil, :arglists ([this])}, :protocol Editor} {:sym add-event-listeners!, :meta {:doc nil, :arglists ([content events-chan opts])}, :source "(defn\n add-event-listeners!\n [content events-chan opts]\n (doto\n content\n (events/removeAll)\n (events/listen\n \"keydown\"\n (fn\n [e]\n (when (prevent-default? e opts) (.preventDefault e))\n (put! events-chan e)))\n (events/listen\n \"keyup\"\n (fn* [p1__18521#] (put! events-chan p1__18521#)))\n (events/listen\n \"cut\"\n (fn* [p1__18522#] (put! events-chan p1__18522#)))\n (events/listen\n \"paste\"\n (fn* [p1__18523#] (put! events-chan p1__18523#)))\n (events/listen\n \"mouseup\"\n (fn* [p1__18524#] (put! events-chan p1__18524#)))))\n"} {:sym reset-edit-history!, :meta {:doc nil, :arglists ([this start])}, :protocol Editor} {:sym hide-error-messages!, :meta {:doc "Hides all error popups.", :arglists ([parent-elem])}, :source "(defn\n hide-error-messages!\n \"Hides all error popups.\"\n [parent-elem]\n (doseq\n [elem (-> parent-elem (.querySelectorAll \".error-text\") array-seq)]\n (.removeChild parent-elem elem)))\n"} {:sym Editor, :meta {:doc nil}, :methods (append-text! can-redo? can-undo? down! edit-and-refresh! enter! eval! initialize! redo! refresh! refresh-after-cut-paste! refresh-after-key-event! reset-edit-history! tab! undo! up! update-cursor-position!)}), cljs.tools.reader.impl.commons ({:sym match-number, :meta {:doc nil, :arglists ([s])}, :source "(defn\n match-number\n [s]\n (if\n (matches? int-pattern s)\n (match-int s)\n (if\n (matches? float-pattern s)\n (match-float s)\n (when (matches? ratio-pattern s) (match-ratio s)))))\n"} {:sym skip-line, :meta {:doc "Advances the reader to the end of a line. Returns the reader", :arglists ([reader])}, :source "(defn\n skip-line\n \"Advances the reader to the end of a line. Returns the reader\"\n [reader]\n (loop [] (when-not (newline? (read-char reader)) (recur)))\n reader)\n"} {:sym int-pattern, :meta {}, :source "(def\n int-pattern\n #\"^([-+]?)(?:(0)|([1-9][0-9]*)|0[xX]([0-9A-Fa-f]+)|0([0-7]+)|([1-9][0-9]?)[rR]([0-9A-Za-z]+)|0[0-9]+)(N)?$\")\n"} {:sym read-comment, :meta {:doc nil, :arglists ([rdr & _])}, :source "(defn read-comment [rdr & _] (skip-line rdr))\n"} {:sym parse-symbol, :meta {:doc "Parses a string into a vector of the namespace and symbol", :arglists ([token])}, :source "(defn\n parse-symbol\n \"Parses a string into a vector of the namespace and symbol\"\n [token]\n (when-not\n (or\n (identical? \"\" token)\n (true? (.test #\":$\" token))\n (true? (.test #\"^::\" token)))\n (let\n [ns-idx\n (.indexOf token \"/\")\n ns\n (when (pos? ns-idx) (subs token 0 ns-idx))]\n (if-not\n (nil? ns)\n (let\n [ns-idx (inc ns-idx)]\n (when-not\n (== ns-idx (count token))\n (let\n [sym (subs token ns-idx)]\n (when\n (and\n (not (numeric? (nth sym 0)))\n (not (identical? \"\" sym))\n (false? (.test #\":$\" ns))\n (or (identical? sym \"/\") (== -1 (.indexOf sym \"/\"))))\n [ns sym]))))\n (when\n (or (identical? token \"/\") (== -1 (.indexOf token \"/\")))\n [nil token])))))\n"} {:sym number-literal?, :meta {:doc "Checks whether the reader is at the start of a number literal", :arglists ([reader initch])}, :source "(defn\n number-literal?\n \"Checks whether the reader is at the start of a number literal\"\n [reader initch]\n (or\n (numeric? initch)\n (and\n (or (identical? \\+ initch) (identical? \\- initch))\n (numeric? (peek-char reader)))))\n"} {:sym read-past, :meta {:doc "Read until first character that doesn't match pred, returning\n char.", :arglists ([pred rdr])}, :source "(defn\n read-past\n \"Read until first character that doesn't match pred, returning\\n char.\"\n [pred rdr]\n (loop [ch (read-char rdr)] (if (pred ch) (recur (read-char rdr)) ch)))\n"} {:sym float-pattern, :meta {}, :source "(def float-pattern #\"([-+]?[0-9]+(\\.[0-9]*)?([eE][-+]?[0-9]+)?)(M)?\")\n"} {:sym matches?, :meta {:doc nil, :arglists ([pattern s])}, :source "(defn\n matches?\n [pattern s]\n (let [[match] (re-find pattern s)] (identical? match s)))\n"} {:sym throwing-reader, :meta {:doc nil, :arglists ([msg])}, :source "(defn throwing-reader [msg] (fn [rdr & _] (reader-error rdr msg)))\n"} {:sym ratio-pattern, :meta {}, :source "(def ratio-pattern #\"([-+]?[0-9]+)/([0-9]+)\")\n"}), cljs.tools.reader.edn ({:sym read, :meta {:doc "Reads the first object from an IPushbackReader.\n Returns the object read. If EOF, throws if eof-error? is true otherwise returns eof.\n If no reader is provided, *in* will be used.\n\n Reads data in the edn format (subset of Clojure data):\n http://edn-format.org\n\n clojure.tools.reader.edn/read doesn't depend on dynamic Vars, all configuration\n is done by passing an opt map.\n\n opts is a map that can include the following keys:\n :eof - value to return on end-of-file. When not supplied, eof throws an exception.\n :readers - a map of tag symbols to data-reader functions to be considered before default-data-readers.\n When not supplied, only the default-data-readers will be used.\n :default - A function of two args, that will, if present and no reader is found for a tag,\n be called with the tag and the value.", :arglists [[reader] [{:keys [eof], :as opts} reader] [reader eof-error? eof opts]]}, :source "(defn\n read\n \"Reads the first object from an IPushbackReader.\\n Returns the object read. If EOF, throws if eof-error? is true otherwise returns eof.\\n If no reader is provided, *in* will be used.\\n\\n Reads data in the edn format (subset of Clojure data):\\n http://edn-format.org\\n\\n clojure.tools.reader.edn/read doesn't depend on dynamic Vars, all configuration\\n is done by passing an opt map.\\n\\n opts is a map that can include the following keys:\\n :eof - value to return on end-of-file. When not supplied, eof throws an exception.\\n :readers - a map of tag symbols to data-reader functions to be considered before default-data-readers.\\n When not supplied, only the default-data-readers will be used.\\n :default - A function of two args, that will, if present and no reader is found for a tag,\\n be called with the tag and the value.\"\n ([reader] (read {} reader))\n ([{:keys [eof], :as opts} reader]\n (let\n [eof-error? (not (contains? opts :eof))]\n (read reader eof-error? eof opts)))\n ([reader eof-error? eof opts]\n (try\n (loop\n []\n (let\n [ch (read-char reader)]\n (cond\n (whitespace? ch)\n (recur)\n (nil? ch)\n (if eof-error? (err/throw-eof-error reader nil) eof)\n (number-literal? reader ch)\n (read-number reader ch opts)\n :else\n (let\n [f (macros ch)]\n (if\n f\n (let\n [res (f reader ch opts)]\n (if (identical? res reader) (recur) res))\n (read-symbol reader ch))))))\n (catch\n js/Error\n e\n (if\n (ex-info? e)\n (let\n [d (ex-data e)]\n (if\n (= :reader-exception (:type d))\n (throw e)\n (throw\n (ex-info\n (.-message e)\n (merge\n {:type :reader-exception}\n d\n (if\n (indexing-reader? reader)\n {:line (get-line-number reader),\n :column (get-column-number reader),\n :file (get-file-name reader)}))\n e))))\n (throw\n (ex-info\n (.-message e)\n (merge\n {:type :reader-exception}\n (if\n (indexing-reader? reader)\n {:line (get-line-number reader),\n :column (get-column-number reader),\n :file (get-file-name reader)}))\n e)))))))\n"} {:sym read-string, :meta {:doc "Reads one object from the string s.\n Returns nil when s is nil or empty.\n\n Reads data in the edn format (subset of Clojure data):\n http://edn-format.org\n\n opts is a map as per clojure.tools.reader.edn/read", :arglists [[s] [opts s]]}, :source "(defn\n read-string\n \"Reads one object from the string s.\\n Returns nil when s is nil or empty.\\n\\n Reads data in the edn format (subset of Clojure data):\\n http://edn-format.org\\n\\n opts is a map as per clojure.tools.reader.edn/read\"\n ([s] (read-string {:eof nil} s))\n ([opts s]\n (when (and s (not= s \"\")) (read opts (string-push-back-reader s)))))\n"}), cljs.source-map.base64-vlq ({:sym vlq-base-shift, :meta {}, :source "(def vlq-base-shift 5)\n"} {:sym vlq-base, :meta {}, :source "(def vlq-base (bit-shift-left 1 vlq-base-shift))\n"} {:sym vlq-base-mask, :meta {}, :source "(def vlq-base-mask (dec vlq-base))\n"} {:sym vlq-continuation-bit, :meta {}, :source "(def vlq-continuation-bit vlq-base)\n"} {:sym to-vlq-signed, :meta {:doc nil, :arglists ([v])}, :source "(defn\n to-vlq-signed\n [v]\n (if\n (neg? v)\n (inc (bit-shift-left (- v) 1))\n (+ (bit-shift-left v 1) 0)))\n"} {:sym from-vlq-signed, :meta {:doc nil, :arglists ([v])}, :source "(defn\n from-vlq-signed\n [v]\n (let\n [neg? (= (bit-and v 1) 1) shifted (bit-shift-right v 1)]\n (if neg? (- shifted) shifted)))\n"} {:sym encode-val, :meta {:doc nil, :arglists ([n])}, :source "(defn\n encode-val\n [n]\n (let\n [sb (StringBuffer.) vlq (to-vlq-signed n)]\n (loop\n [digit\n (bit-and vlq vlq-base-mask)\n vlq\n (bit-shift-right-zero-fill vlq vlq-base-shift)]\n (if\n (pos? vlq)\n (let\n [digit (bit-or digit vlq-continuation-bit)]\n (.append sb (base64/encode digit))\n (recur\n (bit-and vlq vlq-base-mask)\n (bit-shift-right-zero-fill vlq vlq-base-shift)))\n (.append sb (base64/encode digit))))\n (str sb)))\n"} {:sym encode, :meta {:doc nil, :arglists ([v])}, :source "(defn encode [v] (apply str (map encode-val v)))\n"} {:sym decode, :meta {:doc nil, :arglists ([s])}, :source "(defn\n decode\n [s]\n (let\n [l (.-length s)]\n (loop\n [i 0 result 0 shift 0]\n (when\n (>= i l)\n (throw (js/Error. \"Expected more digits in base 64 VLQ value.\")))\n (let\n [digit (base64/decode (.charAt s i))]\n (let\n [i\n (inc i)\n continuation?\n (pos? (bit-and digit vlq-continuation-bit))\n digit\n (bit-and digit vlq-base-mask)\n result\n (+ result (bit-shift-left digit shift))\n shift\n (+ shift vlq-base-shift)]\n (if\n continuation?\n (recur i result shift)\n (lazy-seq\n (cons\n (from-vlq-signed result)\n (let\n [s (.substring s i)]\n (when-not (string/blank? s) (decode s)))))))))))\n"}), oakcljs.tools.reader ({:sym bool?, :meta {:doc nil, :arglists ([x])}, :source "(defn bool? [x] (or (instance? js/Boolean x) (true? x) (false? x)))\n"} {:sym *suppress-read*, :meta {}, :source "(def *suppress-read* false)\n"} {:sym *default-data-reader-fn*, :meta {}, :source "(def\n *default-data-reader-fn*\n \"When no data reader is found for a tag and *default-data-reader-fn*\\n is non-nil, it will be called with two arguments, the tag and the value.\\n If *default-data-reader-fn* is nil (the default value), an exception\\n will be thrown for the unknown tag.\"\n (fn [tag value]))\n"} {:sym read, :meta {:doc "Reads the first object from an IPushbackReader.\n Returns the object read. If EOF, throws if eof-error? is true.\n Otherwise returns sentinel. If no stream is providen, *in* will be used.\n\n Opts is a persistent map with valid keys:\n :read-cond - :allow to process reader conditionals, or\n :preserve to keep all branches\n :features - persistent set of feature keywords for reader conditionals\n :eof - on eof, return value unless :eofthrow, then throw.\n if not specified, will throw\n\n To read data structures only, use oakclojure.tools.reader.edn/read\n\n Note that the function signature of oakclojure.tools.reader/read and\n oakclojure.tools.reader.edn/read is not the same for eof-handling", :arglists [[reader] [{eof :eof, :as opts, :or {eof :eofthrow}} reader] [reader eof-error? sentinel]]}, :source "(defn\n read\n \"Reads the first object from an IPushbackReader.\\n Returns the object read. If EOF, throws if eof-error? is true.\\n Otherwise returns sentinel. If no stream is providen, *in* will be used.\\n\\n Opts is a persistent map with valid keys:\\n :read-cond - :allow to process reader conditionals, or\\n :preserve to keep all branches\\n :features - persistent set of feature keywords for reader conditionals\\n :eof - on eof, return value unless :eofthrow, then throw.\\n if not specified, will throw\\n\\n To read data structures only, use oakclojure.tools.reader.edn/read\\n\\n Note that the function signature of oakclojure.tools.reader/read and\\n oakclojure.tools.reader.edn/read is not the same for eof-handling\"\n {:arglists '([] [reader] [opts reader] [reader eof-error? eof-value])}\n ([reader] (read reader true nil))\n ([{eof :eof, :as opts, :or {eof :eofthrow}} reader]\n (read* reader (= eof :eofthrow) eof nil opts (to-array [])))\n ([reader eof-error? sentinel]\n (read* reader eof-error? sentinel nil {} (to-array []))))\n"} {:sym default-data-readers, :meta {}, :source "(def\n default-data-readers\n \"Default map of data reader functions provided by Clojure.\\n May be overridden by binding *data-readers*\"\n {})\n"} {:sym *data-readers*, :meta {}, :source "(def\n *data-readers*\n \"Map from reader tag symbols to data reader Vars.\\n Reader tags without namespace qualifiers are reserved for Clojure.\\n This light version of tools.reader has no implementation for default\\n reader tags such as #inst and #uuid.\"\n {})\n"} {:sym *read-delim*, :meta {}, :source "(def *read-delim* false)\n"} {:sym resolve-symbol, :meta {:doc "Resolve a symbol s into its fully qualified namespace version", :arglists ([s])}, :source "(defn\n resolve-symbol\n \"Resolve a symbol s into its fully qualified namespace version\"\n [s]\n s)\n"} {:sym *alias-map*, :meta {}, :source "(def\n *alias-map*\n \"Map from ns alias to ns, if non-nil, it will be used to resolve read-time\\n ns aliases.\\n\\n Defaults to nil\"\n nil)\n"} {:sym *wrap-value-and-add-metadata?*, :meta {}, :source "(def *wrap-value-and-add-metadata?* false)\n"} {:sym read-regex, :meta {:doc nil, :arglists ([rdr ch opts pending-forms])}, :source "(defn\n read-regex\n [rdr ch opts pending-forms]\n (let\n [sb (StringBuffer.)]\n (loop\n [ch (read-char rdr)]\n (if\n (identical? \\\" ch)\n (re-pattern (str sb))\n (if\n (nil? ch)\n (err/throw-eof-reading rdr :regex sb)\n (do\n (.append sb ch)\n (when\n (identical? \\\\ ch)\n (let\n [ch (read-char rdr)]\n (if (nil? ch) (err/throw-eof-reading rdr :regex sb))\n (.append sb ch)))\n (recur (read-char rdr))))))))\n"} {:sym sb, :meta {}, :source "(def sb (StringBuffer.))\n"} {:sym read-string, :meta {:doc "Reads one object from the string s.\n Returns nil when s is nil or empty.\n\n To read data structures only, use oakclojure.tools.reader.edn/read-string\n\n Note that the function signature of oakclojure.tools.reader/read-string and\n oakclojure.tools.reader.edn/read-string is not the same for eof-handling", :arglists [[s] [opts s]]}, :source "(defn\n read-string\n \"Reads one object from the string s.\\n Returns nil when s is nil or empty.\\n\\n To read data structures only, use oakclojure.tools.reader.edn/read-string\\n\\n Note that the function signature of oakclojure.tools.reader/read-string and\\n oakclojure.tools.reader.edn/read-string is not the same for eof-handling\"\n ([s] (read-string {} s))\n ([opts s]\n (when\n (and s (not (identical? s \"\")))\n (read opts (string-push-back-reader s)))))\n"} {:sym map-func, :meta {:doc "Decide which map type to use, array-map if less than 16 elements", :arglists ([coll])}, :source "(defn\n map-func\n \"Decide which map type to use, array-map if less than 16 elements\"\n [coll]\n (if (>= (count coll) 16) 'cljs.core/hash-map 'cljs.core/array-map))\n"}), cljs.tools.reader ({:sym bool?, :meta {:doc nil, :arglists ([x])}, :source "(defn bool? [x] (or (instance? js/Boolean x) (true? x) (false? x)))\n"} {:sym *suppress-read*, :meta {}, :source "(def *suppress-read* false)\n"} {:sym *default-data-reader-fn*, :meta {}, :source "(def\n *default-data-reader-fn*\n \"When no data reader is found for a tag and *default-data-reader-fn*\\n is non-nil, it will be called with two arguments, the tag and the value.\\n If *default-data-reader-fn* is nil (the default value), an exception\\n will be thrown for the unknown tag.\"\n nil)\n"} {:sym read, :meta {:doc "Reads the first object from an IPushbackReader.\n Returns the object read. If EOF, throws if eof-error? is true.\n Otherwise returns sentinel. If no stream is providen, *in* will be used.\n\n Opts is a persistent map with valid keys:\n :read-cond - :allow to process reader conditionals, or\n :preserve to keep all branches\n :features - persistent set of feature keywords for reader conditionals\n :eof - on eof, return value unless :eofthrow, then throw.\n if not specified, will throw\n\n To read data structures only, use clojure.tools.reader.edn/read\n\n Note that the function signature of clojure.tools.reader/read and\n clojure.tools.reader.edn/read is not the same for eof-handling", :arglists [[reader] [{eof :eof, :as opts, :or {eof :eofthrow}} reader] [reader eof-error? sentinel]]}, :source "(defn\n read\n \"Reads the first object from an IPushbackReader.\\n Returns the object read. If EOF, throws if eof-error? is true.\\n Otherwise returns sentinel. If no stream is providen, *in* will be used.\\n\\n Opts is a persistent map with valid keys:\\n :read-cond - :allow to process reader conditionals, or\\n :preserve to keep all branches\\n :features - persistent set of feature keywords for reader conditionals\\n :eof - on eof, return value unless :eofthrow, then throw.\\n if not specified, will throw\\n\\n To read data structures only, use clojure.tools.reader.edn/read\\n\\n Note that the function signature of clojure.tools.reader/read and\\n clojure.tools.reader.edn/read is not the same for eof-handling\"\n {:arglists '([] [reader] [opts reader] [reader eof-error? eof-value])}\n ([reader] (read reader true nil))\n ([{eof :eof, :as opts, :or {eof :eofthrow}} reader]\n (read* reader (= eof :eofthrow) eof nil opts (to-array [])))\n ([reader eof-error? sentinel]\n (read* reader eof-error? sentinel nil {} (to-array []))))\n"} {:sym default-data-readers, :meta {}, :source "(def\n default-data-readers\n \"Default map of data reader functions provided by Clojure.\\n May be overridden by binding *data-readers*\"\n {})\n"} {:sym *data-readers*, :meta {}, :source "(def\n *data-readers*\n \"Map from reader tag symbols to data reader Vars.\\n Reader tags without namespace qualifiers are reserved for Clojure.\\n This light version of tools.reader has no implementation for default\\n reader tags such as #inst and #uuid.\"\n {})\n"} {:sym *read-delim*, :meta {}, :source "(def *read-delim* false)\n"} {:sym resolve-symbol, :meta {:doc "Resolve a symbol s into its fully qualified namespace version", :arglists ([s])}, :source "(defn\n resolve-symbol\n \"Resolve a symbol s into its fully qualified namespace version\"\n [s]\n (throw (ex-info \"resolve-symbol is not implemented\" {:sym s})))\n"} {:sym *alias-map*, :meta {}, :source "(def\n *alias-map*\n \"Map from ns alias to ns, if non-nil, it will be used to resolve read-time\\n ns aliases.\\n\\n Defaults to nil\"\n nil)\n"} {:sym read-regex, :meta {:doc nil, :arglists ([rdr ch opts pending-forms])}, :source "(defn\n read-regex\n [rdr ch opts pending-forms]\n (let\n [sb (StringBuffer.)]\n (loop\n [ch (read-char rdr)]\n (if\n (identical? \\\" ch)\n (re-pattern (str sb))\n (if\n (nil? ch)\n (err/throw-eof-reading rdr :regex sb)\n (do\n (.append sb ch)\n (when\n (identical? \\\\ ch)\n (let\n [ch (read-char rdr)]\n (if (nil? ch) (err/throw-eof-reading rdr :regex sb))\n (.append sb ch)))\n (recur (read-char rdr))))))))\n"} {:sym sb, :meta {}, :source "(def sb (StringBuffer.))\n"} {:sym read-string, :meta {:doc "Reads one object from the string s.\n Returns nil when s is nil or empty.\n\n To read data structures only, use clojure.tools.reader.edn/read-string\n\n Note that the function signature of clojure.tools.reader/read-string and\n clojure.tools.reader.edn/read-string is not the same for eof-handling", :arglists [[s] [opts s]]}, :source "(defn\n read-string\n \"Reads one object from the string s.\\n Returns nil when s is nil or empty.\\n\\n To read data structures only, use clojure.tools.reader.edn/read-string\\n\\n Note that the function signature of clojure.tools.reader/read-string and\\n clojure.tools.reader.edn/read-string is not the same for eof-handling\"\n ([s] (read-string {} s))\n ([opts s]\n (when\n (and s (not (identical? s \"\")))\n (read opts (string-push-back-reader s)))))\n"} {:sym map-func, :meta {:doc "Decide which map type to use, array-map if less than 16 elements", :arglists ([coll])}, :source "(defn\n map-func\n \"Decide which map type to use, array-map if less than 16 elements\"\n [coll]\n (if (>= (count coll) 16) 'cljs.core/hash-map 'cljs.core/array-map))\n"}), paren-soup.dom ({:sym top-level?, :meta {:doc nil, :arglists ([node])}, :source "(defn\n top-level?\n [node]\n (some-> node .-parentElement .-classList (.contains \"content\")))\n"} {:sym get-selection, :meta {:doc "Returns the objects related to selection for the given element. If full-selection? is true,\nit will use rangy instead of the native selection API in order to get the beginning and ending\nof the selection (it is, however, much slower).", :arglists ([element full-selection?])}, :source "(defn\n get-selection\n \"Returns the objects related to selection for the given element. If full-selection? is true,\\nit will use rangy instead of the native selection API in order to get the beginning and ending\\nof the selection (it is, however, much slower).\"\n [element full-selection?]\n {:element element,\n :cursor-position\n (cond\n full-selection?\n (let\n [selection\n (.getSelection js/rangy)\n ranges\n (.saveCharacterRanges selection element)]\n (if-let\n [char-range (some-> ranges (aget 0) (gobj/get \"characterRange\"))]\n [(gobj/get char-range \"start\") (gobj/get char-range \"end\")]\n [0 0]))\n (= 0 (.-rangeCount (.getSelection js/window)))\n [0 0]\n :else\n (let\n [selection\n (.getSelection js/window)\n range\n (.getRangeAt selection 0)\n pre-caret-range\n (doto\n (.cloneRange range)\n (.selectNodeContents element)\n (.setEnd (.-endContainer range) (.-endOffset range)))\n pos\n (-> pre-caret-range .toString .-length)]\n [pos pos]))})\n"} {:sym get-cursor-position, :meta {:doc "Returns the cursor position.", :arglists ([element full-selection?])}, :source "(defn\n get-cursor-position\n \"Returns the cursor position.\"\n [element full-selection?]\n (-> element (get-selection full-selection?) :cursor-position))\n"} {:sym text-node?, :meta {:doc nil, :arglists ([node])}, :source "(defn text-node? [node] (= 3 (.-nodeType node)))\n"} {:sym get-focused-form, :meta {}, :source "(def get-focused-form (fn* [] (get-focused-elem \"collection\")))\n"} {:sym get-focused-top-level, :meta {:doc nil, :arglists ([])}, :source "(defn\n get-focused-top-level\n []\n (when-let\n [node (some-> js/rangy .getSelection .-anchorNode)]\n (loop\n [node node]\n (if\n (top-level? node)\n node\n (when-let [parent (.-parentElement node)] (recur parent))))))\n"} {:sym get-parent, :meta {:doc "Returns the nearest parent with the given class name.", :arglists ([node class-name])}, :source "(defn\n get-parent\n \"Returns the nearest parent with the given class name.\"\n [node class-name]\n (loop\n [node node]\n (when-let\n [parent (.-parentElement node)]\n (if\n (.contains (.-classList parent) class-name)\n parent\n (recur parent)))))\n"} {:sym coll-node?, :meta {:doc nil, :arglists ([node])}, :source "(defn\n coll-node?\n [node]\n (some-> node .-classList (.contains \"collection\")))\n"} {:sym get-nearest-ns, :meta {:doc nil, :arglists ([node])}, :source "(defn\n get-nearest-ns\n [node]\n (loop\n [node node]\n (if\n (some-> node .-childNodes (.item 1) .-textContent (= \"ns\"))\n (some-> node .-childNodes (.item 3) .-textContent symbol)\n (when-let [sibling (.-previousSibling node)] (recur sibling)))))\n"} {:sym get-completion-info, :meta {:doc nil, :arglists ([])}, :source "(defn\n get-completion-info\n []\n (when-let\n [prefix-elem (get-focused-elem \"symbol\")]\n (let\n [pos\n (-> prefix-elem (get-cursor-position false) first)\n text\n (.-textContent prefix-elem)\n prefix\n (subs text 0 pos)]\n (assoc\n (get-completion-context (count text) (count prefix))\n :text\n text\n :prefix\n prefix))))\n"} {:sym get-focused-elem, :meta {:doc nil, :arglists ([class-name])}, :source "(defn\n get-focused-elem\n [class-name]\n (some-> js/rangy .getSelection .-anchorNode (get-parent class-name)))\n"} {:sym error-node?, :meta {:doc nil, :arglists ([node])}, :source "(defn error-node? [node] (some-> node .-classList (.contains \"error\")))\n"} {:sym get-completion-context, :meta {:doc nil, :arglists ([symbol-length cursor-offset])}, :source "(defn\n get-completion-context\n [symbol-length cursor-offset]\n (when-let\n [top-level-elem (get-focused-top-level)]\n (let\n [pos\n (-> top-level-elem (get-cursor-position false) first)\n prefix-start\n (- pos cursor-offset)\n text\n (.-textContent top-level-elem)]\n {:ns (get-nearest-ns top-level-elem),\n :context-before (subs text 0 prefix-start),\n :context-after (subs text (+ prefix-start symbol-length)),\n :start-position prefix-start})))\n"} {:sym common-ancestor, :meta {:doc "Returns the common ancestor of the given nodes.", :arglists ([first-node second-node])}, :source "(defn\n common-ancestor\n \"Returns the common ancestor of the given nodes.\"\n [first-node second-node]\n (let\n [first-parent\n (first (get-parents first-node \"collection\"))\n second-parent\n (first (get-parents second-node \"collection\"))]\n (cond\n (and first-parent second-parent (= first-parent second-parent))\n first-parent\n (and\n (= first-node second-node)\n (text-node? first-node)\n (top-level? first-node))\n first-node)))\n"} {:sym get-parents, :meta {:doc "Returns all the parents with the given class name.", :arglists ([node class-name])}, :source "(defn\n get-parents\n \"Returns all the parents with the given class name.\"\n [node class-name]\n (loop\n [node node elems '()]\n (if-let\n [parent (get-parent node class-name)]\n (recur parent (conj elems parent))\n elems)))\n"} {:sym node?, :meta {}, :source "(def node? (fn* [p1__18509#] (instance? js/Node p1__18509#)))\n"}), reagent.ratom ({:sym make-track, :meta {:doc nil, :arglists ([f args])}, :source "(defn make-track [f args] (Track. f args nil))\n"} {:sym atom, :meta {:doc "Like clojure.core/atom, except that it keeps track of derefs.", :arglists [[x] [x & {:keys [meta validator]}]]}, :source "(defn\n atom\n \"Like clojure.core/atom, except that it keeps track of derefs.\"\n ([x] (->RAtom x nil nil nil))\n ([x & {:keys [meta validator]}] (->RAtom x meta validator nil)))\n"} {:sym make-wrapper, :meta {:doc nil, :arglists ([value callback-fn args])}, :source "(defn\n make-wrapper\n [value callback-fn args]\n (->Wrapper value (util/make-partial-fn callback-fn args) false nil))\n"} {:sym IReactiveAtom, :meta {:doc nil}, :methods ()} {:sym track, :meta {:doc nil, :arglists ([f & args])}, :source "(defn track [f & args] {:pre [(ifn? f)]} (make-track f args))\n"} {:sym dispose!, :meta {:doc nil, :arglists ([this])}, :protocol IDisposable} {:sym run, :meta {:doc nil, :arglists ([this])}, :protocol IRunnable} {:sym add-on-dispose!, :meta {:doc nil, :arglists ([this f])}, :protocol IDisposable} {:sym make-track!, :meta {:doc nil, :arglists ([f args])}, :source "(defn\n make-track!\n [f args]\n (let\n [t\n (make-track f args)\n r\n (make-reaction (fn* [] (-deref t)) :auto-run true)]\n @r\n r))\n"} {:sym run-in-reaction, :meta {:doc nil, :arglists ([f obj key run opts])}, :source "(defn\n run-in-reaction\n [f obj key run opts]\n (let\n [r temp-reaction res (deref-capture f r)]\n (when-not\n (nil? (.-watching r))\n (set! temp-reaction (make-reaction nil))\n (._set-opts r opts)\n (set! (.-f r) f)\n (set! (.-auto-run r) (fn* [] (run obj)))\n (aset obj key r))\n res))\n"} {:sym IDisposable, :meta {:doc nil}, :methods (add-on-dispose! dispose!)} {:sym with-let-destroy, :meta {:doc nil, :arglists ([v])}, :source "(defn with-let-destroy [v] (when-some [f (.-destroy v)] (f)))\n"} {:sym make-reaction, :meta {:doc nil, :arglists ([f & {:keys [auto-run on-set on-dispose]}])}, :source "(defn\n make-reaction\n [f & {:keys [auto-run on-set on-dispose]}]\n (let\n [reaction (->Reaction f nil true false nil nil nil nil)]\n (._set-opts\n reaction\n {:auto-run auto-run, :on-set on-set, :on-dispose on-dispose})\n reaction))\n"} {:sym flush!, :meta {:doc nil, :arglists ([])}, :source "(defn\n flush!\n []\n (loop\n []\n (let\n [q rea-queue]\n (when-not\n (nil? q)\n (set! rea-queue nil)\n (dotimes [i (alength q)] (._queued-run (aget q i)))\n (recur)))))\n"} {:sym debug, :meta {}, :source "(defonce debug false)\n"} {:sym cursor, :meta {:doc nil, :arglists ([src path])}, :source "(defn\n cursor\n [src path]\n (assert\n (or\n (satisfies? IReactiveAtom src)\n (and (ifn? src) (not (vector? src))))\n (str \"src must be a reactive atom or a function, not \" (pr-str src)))\n (->RCursor src path nil nil nil))\n"} {:sym running, :meta {:doc nil, :arglists ([])}, :source "(defn running [] (+ @-running))\n"} {:sym IRunnable, :meta {:doc nil}, :methods (run)} {:sym reactive?, :meta {:doc nil, :arglists ([])}, :source "(defn reactive? [] (some? *ratom-context*))\n"} {:sym with-let-values, :meta {:doc nil, :arglists ([key])}, :source "(defn\n with-let-values\n [key]\n (if-some\n [c *ratom-context*]\n (cached-reaction array c key nil with-let-destroy)\n (array)))\n"} {:sym track!, :meta {:doc nil, :arglists ([f & args])}, :source "(defn track! [f & args] {:pre [(ifn? f)]} (make-track! f args))\n"} {:sym check-derefs, :meta {:doc nil, :arglists ([f])}, :source "(defn\n check-derefs\n [f]\n (let\n [ctx (js-obj) res (in-context ctx f)]\n [res (some? (.-captured ctx))]))\n"}), oakcljs.tools.reader.impl.errors ({:sym throw-bad-dispatch, :meta {:doc nil, :arglists ([rdr ch])}, :source "(defn\n throw-bad-dispatch\n [rdr ch]\n (reader-error rdr \"No dispatch macro for \" ch \".\"))\n"} {:sym throw-invalid-unicode-escape, :meta {:doc nil, :arglists ([rdr ch])}, :source "(defn\n throw-invalid-unicode-escape\n [rdr ch]\n (reader-error rdr \"Invalid unicode escape: \\\\u\" ch \".\"))\n"} {:sym throw-dup-keys, :meta {:doc nil, :arglists ([rdr kind ks])}, :source "(defn\n throw-dup-keys\n [rdr kind ks]\n (reader-error\n rdr\n (duplicate-keys-error\n (str (s/capitalize (name kind)) \" literal contains duplicate key\")\n ks)))\n"} {:sym throw-bad-ns, :meta {:doc nil, :arglists ([rdr ns-name])}, :source "(defn\n throw-bad-ns\n [rdr ns-name]\n (reader-error\n rdr\n \"Invalid value used as namespace in namespaced map: \"\n ns-name\n \".\"))\n"} {:sym throw-unknown-reader-tag, :meta {:doc nil, :arglists ([rdr tag])}, :source "(defn\n throw-unknown-reader-tag\n [rdr tag]\n (reader-error rdr \"No reader function for tag \" (i/inspect tag) \".\"))\n"} {:sym throw-eof-at-dispatch, :meta {:doc nil, :arglists ([rdr])}, :source "(defn\n throw-eof-at-dispatch\n [rdr]\n (eof-error rdr \"Unexpected EOF while reading dispatch character.\"))\n"} {:sym throw-bad-metadata-target, :meta {:doc nil, :arglists ([rdr target])}, :source "(defn\n throw-bad-metadata-target\n [rdr target]\n (reader-error\n rdr\n \"Metadata can not be applied to \"\n (i/inspect target)\n \". \"\n \"Metadata can only be applied to IMetas.\"))\n"} {:sym throw-invalid-number, :meta {:doc nil, :arglists ([rdr token])}, :source "(defn\n throw-invalid-number\n [rdr token]\n (reader-error rdr \"Invalid number: \" token \".\"))\n"} {:sym reader-error, :meta {:doc "Throws an ExceptionInfo with the given message.\n If rdr is an IndexingReader, additional information about column and line number is provided", :arglists ([rdr & msgs])}, :source "(defn\n reader-error\n \"Throws an ExceptionInfo with the given message.\\n If rdr is an IndexingReader, additional information about column and line number is provided\"\n [rdr & msgs]\n (throw-ex rdr :reader-error (apply str msgs)))\n"} {:sym throw-invalid-unicode-literal, :meta {:doc nil, :arglists ([rdr token])}, :source "(defn\n throw-invalid-unicode-literal\n [rdr token]\n (throw\n (illegal-arg-error rdr \"Invalid unicode literal: \\\\\" token \".\")))\n"} {:sym throw-ns-map-no-map, :meta {:doc nil, :arglists ([rdr ns-name])}, :source "(defn\n throw-ns-map-no-map\n [rdr ns-name]\n (reader-error\n rdr\n \"Namespaced map with namespace \"\n ns-name\n \" does not specify a map.\"))\n"} {:sym throw-unsupported-character, :meta {:doc nil, :arglists ([rdr token])}, :source "(defn\n throw-unsupported-character\n [rdr token]\n (reader-error rdr \"Unsupported character: \" token \".\"))\n"} {:sym throw-feature-not-keyword, :meta {:doc nil, :arglists ([rdr feature])}, :source "(defn\n throw-feature-not-keyword\n [rdr feature]\n (reader-error\n rdr\n \"Feature cannot be \"\n (i/inspect feature)\n \" Features must be keywords.\"))\n"} {:sym throw-eof-delimited, :meta {:doc nil, :arglists [[rdr kind column line] [rdr kind line column n]]}, :source "(defn\n throw-eof-delimited\n ([rdr kind column line]\n (throw-eof-delimited rdr kind line column nil))\n ([rdr kind line column n]\n (eof-error\n rdr\n \"Unexpected EOF while reading \"\n (if n (str \"item \" n \" of \"))\n (name kind)\n (if line (str \", starting at line \" line \" and column \" column))\n \".\")))\n"} {:sym throw-eof-in-character, :meta {:doc nil, :arglists ([rdr])}, :source "(defn\n throw-eof-in-character\n [rdr]\n (eof-error rdr \"Unexpected EOF while reading character.\"))\n"} {:sym throw-bad-char, :meta {:doc nil, :arglists ([rdr kind ch])}, :source "(defn\n throw-bad-char\n [rdr kind ch]\n (reader-error\n rdr\n \"Invalid character: \"\n ch\n \" found while reading \"\n (name kind)\n \".\"))\n"} {:sym eof-error, :meta {:doc "Throws an ExceptionInfo with the given message.\n If rdr is an IndexingReader, additional information about column and line number is provided", :arglists ([rdr & msgs])}, :source "(defn\n eof-error\n \"Throws an ExceptionInfo with the given message.\\n If rdr is an IndexingReader, additional information about column and line number is provided\"\n [rdr & msgs]\n (throw-ex rdr :eof (apply str msgs)))\n"} {:sym throw-bad-metadata, :meta {:doc nil, :arglists ([rdr x])}, :source "(defn\n throw-bad-metadata\n [rdr x]\n (reader-error\n rdr\n \"Metadata cannot be \"\n (i/inspect x)\n \". Metadata must be a Symbol, Keyword, String or Map.\"))\n"} {:sym throw-eof-reading, :meta {:doc nil, :arglists ([rdr kind & start])}, :source "(defn\n throw-eof-reading\n [rdr kind & start]\n (let\n [init (case kind :regex \"#\\\"\" :string \\\")]\n (eof-error\n rdr\n \"Unexpected EOF reading \"\n (name kind)\n \" starting \"\n (apply str init start)\n \".\")))\n"} {:sym throw-eof-error, :meta {:doc nil, :arglists ([rdr line])}, :source "(defn\n throw-eof-error\n [rdr line]\n (if\n line\n (eof-error rdr \"EOF while reading, starting at line \" line \".\")\n (eof-error rdr \"EOF while reading.\")))\n"} {:sym illegal-arg-error, :meta {:doc "Throws an ExceptionInfo with the given message.\n If rdr is an IndexingReader, additional information about column and line number is provided", :arglists ([rdr & msgs])}, :source "(defn\n illegal-arg-error\n \"Throws an ExceptionInfo with the given message.\\n If rdr is an IndexingReader, additional information about column and line number is provided\"\n [rdr & msgs]\n (throw-ex rdr :illegal-argument (apply str msgs)))\n"} {:sym throw-invalid-octal-len, :meta {:doc nil, :arglists ([rdr token])}, :source "(defn\n throw-invalid-octal-len\n [rdr token]\n (reader-error\n rdr\n \"Invalid octal escape sequence in a character literal:\"\n token\n \". Octal escape sequences must be 3 or fewer digits.\"))\n"} {:sym throw-invalid-unicode-digit, :meta {:doc nil, :arglists ([rdr ch])}, :source "(defn\n throw-invalid-unicode-digit\n [rdr ch]\n (illegal-arg-error rdr \"Invalid digit \" ch \" in unicode character.\"))\n"} {:sym throw-invalid-unicode-digit-in-token, :meta {:doc nil, :arglists ([rdr ch token])}, :source "(defn\n throw-invalid-unicode-digit-in-token\n [rdr ch token]\n (illegal-arg-error\n rdr\n \"Invalid digit \"\n ch\n \" in unicode character \\\\\"\n token\n \".\"))\n"} {:sym throw-invalid-unicode-len, :meta {:doc nil, :arglists ([rdr actual expected])}, :source "(defn\n throw-invalid-unicode-len\n [rdr actual expected]\n (illegal-arg-error\n rdr\n \"Invalid unicode literal. Unicode literals should be \"\n expected\n \"characters long. \"\n \"value suppled is \"\n actual\n \"characters long.\"))\n"} {:sym throw-single-colon, :meta {:doc nil, :arglists ([rdr])}, :source "(defn\n throw-single-colon\n [rdr]\n (reader-error rdr \"A single colon is not a valid keyword.\"))\n"} {:sym throw-odd-map, :meta {:doc nil, :arglists ([rdr line col elements])}, :source "(defn\n throw-odd-map\n [rdr line col elements]\n (reader-error\n rdr\n \"The map literal starting with \"\n (i/inspect (first elements))\n (if line (str \" on line \" line \" column \" col))\n \" contains \"\n (count elements)\n \" form(s). Map literals must contain an even number of forms.\"))\n"} {:sym throw-bad-octal-number, :meta {:doc nil, :arglists ([rdr])}, :source "(defn\n throw-bad-octal-number\n [rdr]\n (reader-error rdr \"Octal escape sequence must be in range [0, 377].\"))\n"} {:sym throw-bad-reader-tag, :meta {:doc nil, :arglists ([rdr tag])}, :source "(defn\n throw-bad-reader-tag\n [rdr tag]\n (reader-error\n rdr\n \"Invalid reader tag: \"\n (i/inspect tag)\n \". Reader tags must be symbols.\"))\n"} {:sym throw-unmatch-delimiter, :meta {:doc nil, :arglists ([rdr ch])}, :source "(defn\n throw-unmatch-delimiter\n [rdr ch]\n (reader-error rdr \"Unmatched delimiter \" ch \".\"))\n"} {:sym throw-invalid-character-literal, :meta {:doc nil, :arglists ([rdr token])}, :source "(defn\n throw-invalid-character-literal\n [rdr token]\n (reader-error rdr \"Invalid character literal \\\\u\" token \".\"))\n"} {:sym throw-invalid-unicode-char, :meta {:doc nil, :arglists ([rdr token])}, :source "(defn\n throw-invalid-unicode-char\n [rdr token]\n (reader-error rdr \"Invalid unicode character \\\\\" token \".\"))\n"} {:sym throw-bad-escape-char, :meta {:doc nil, :arglists ([rdr ch])}, :source "(defn\n throw-bad-escape-char\n [rdr ch]\n (reader-error rdr \"Unsupported escape character: \\\\\" ch \".\"))\n"} {:sym throw-no-dispatch, :meta {:doc nil, :arglists ([rdr ch])}, :source "(defn throw-no-dispatch [rdr ch] (throw-bad-dispatch rdr ch))\n"} {:sym throw-eof-at-start, :meta {:doc nil, :arglists ([rdr kind])}, :source "(defn\n throw-eof-at-start\n [rdr kind]\n (eof-error\n rdr\n \"Unexpected EOF while reading start of \"\n (name kind)\n \".\"))\n"} {:sym throw-invalid, :meta {:doc nil, :arglists ([rdr kind token])}, :source "(defn\n throw-invalid\n [rdr kind token]\n (reader-error rdr \"Invalid \" (name kind) \": \" token \".\"))\n"}), reagent.core ({:sym after-render, :meta {:doc "Run f using requestAnimationFrame or equivalent.\n\n f will be called just after any queued renders in the next animation\n frame (and even if no renders actually occur).", :arglists ([f])}, :source "(defn\n after-render\n \"Run f using requestAnimationFrame or equivalent.\\n\\n f will be called just after any queued renders in the next animation\\n frame (and even if no renders actually occur).\"\n [f]\n (batch/do-after-render f))\n"} {:sym current-component, :meta {:doc "Returns the current React component (a.k.a this) in a component\n function.", :arglists ([])}, :source "(defn\n current-component\n \"Returns the current React component (a.k.a this) in a component\\n function.\"\n []\n comp/*current-component*)\n"} {:sym as-component, :meta {}, :source "(def as-component as-element)\n"} {:sym adapt-react-class, :meta {:doc "Returns an adapter for a native React class, that may be used\n just like a Reagent component function or class in Hiccup forms.", :arglists [[c opts] [c]]}, :source "(defn\n adapt-react-class\n \"Returns an adapter for a native React class, that may be used\\n just like a Reagent component function or class in Hiccup forms.\"\n ([c opts] (assert-some c \"Component\") (tmpl/adapt-react-class c opts))\n ([c] (adapt-react-class c {})))\n"} {:sym atom, :meta {:doc "Like clojure.core/atom, except that it keeps track of derefs.\n Reagent components that derefs one of these are automatically\n re-rendered.", :arglists [[x] [x & rest]]}, :source "(defn\n atom\n \"Like clojure.core/atom, except that it keeps track of derefs.\\n Reagent components that derefs one of these are automatically\\n re-rendered.\"\n ([x] (ratom/atom x))\n ([x & rest] (apply ratom/atom x rest)))\n"} {:sym merge-props, :meta {:doc "Utility function that merges two maps, handling :class and :style\n specially, like React's transferPropsTo.", :arglists ([defaults props])}, :source "(defn\n merge-props\n \"Utility function that merges two maps, handling :class and :style\\n specially, like React's transferPropsTo.\"\n [defaults props]\n (util/merge-props defaults props))\n"} {:sym force-update-all, :meta {:doc "Force re-rendering of all mounted Reagent components. This is\n probably only useful in a development environment, when you want to\n update components in response to some dynamic changes to code.\n\n Note that force-update-all may not update root components. This\n happens if a component 'foo' is mounted with `(render [foo])` (since\n functions are passed by value, and not by reference, in\n ClojureScript). To get around this you'll have to introduce a layer\n of indirection, for example by using `(render [#'foo])` instead.", :arglists ([])}, :source "(defn\n force-update-all\n \"Force re-rendering of all mounted Reagent components. This is\\n probably only useful in a development environment, when you want to\\n update components in response to some dynamic changes to code.\\n\\n Note that force-update-all may not update root components. This\\n happens if a component 'foo' is mounted with `(render [foo])` (since\\n functions are passed by value, and not by reference, in\\n ClojureScript). To get around this you'll have to introduce a layer\\n of indirection, for example by using `(render [#'foo])` instead.\"\n []\n (ratom/flush!)\n (dom/force-update-all)\n (batch/flush-after-render))\n"} {:sym as-element, :meta {:doc "Turns a vector of Hiccup syntax into a React element. Returns form\n unchanged if it is not a vector.", :arglists ([form])}, :source "(defn\n as-element\n \"Turns a vector of Hiccup syntax into a React element. Returns form\\n unchanged if it is not a vector.\"\n [form]\n (tmpl/as-element form))\n"} {:sym rswap!, :meta {:doc "Swaps the value of a to be (apply f current-value-of-atom args).\n\n rswap! works like swap!, except that recursive calls to rswap! on\n the same atom are allowed – and it always returns nil.", :arglists ([a f & args])}, :source "(defn\n rswap!\n \"Swaps the value of a to be (apply f current-value-of-atom args).\\n\\n rswap! works like swap!, except that recursive calls to rswap! on\\n the same atom are allowed – and it always returns nil.\"\n [a f & args]\n {:pre [(satisfies? IAtom a) (ifn? f)]}\n (if\n a.rswapping\n (->\n (or a.rswapfs (set! a.rswapfs (array)))\n (.push (fn* [p1__18477#] (apply f p1__18477# args))))\n (do\n (set! a.rswapping true)\n (try\n (swap!\n a\n (fn\n [state]\n (loop\n [s (apply f state args)]\n (if-some [sf (some-> a.rswapfs .shift)] (recur (sf s)) s))))\n (finally (set! a.rswapping false)))))\n nil)\n"} {:sym next-tick, :meta {:doc "Run f using requestAnimationFrame or equivalent.\n\n f will be called just before components are rendered.", :arglists ([f])}, :source "(defn\n next-tick\n \"Run f using requestAnimationFrame or equivalent.\\n\\n f will be called just before components are rendered.\"\n [f]\n (batch/do-before-flush f))\n"} {:sym track, :meta {:doc "Takes a function and optional arguments, and returns a derefable\n containing the output of that function. If the function derefs\n Reagent atoms (or track, etc), the value will be updated whenever\n the atom changes.\n\n In other words, @(track foo bar) will produce the same result\n as (foo bar), but foo will only be called again when the atoms it\n depends on changes, and will only trigger updates of components when\n its result changes.\n\n track is lazy, i.e the function is only evaluated on deref.", :arglists ([f & args])}, :source "(defn\n track\n \"Takes a function and optional arguments, and returns a derefable\\n containing the output of that function. If the function derefs\\n Reagent atoms (or track, etc), the value will be updated whenever\\n the atom changes.\\n\\n In other words, @(track foo bar) will produce the same result\\n as (foo bar), but foo will only be called again when the atoms it\\n depends on changes, and will only trigger updates of components when\\n its result changes.\\n\\n track is lazy, i.e the function is only evaluated on deref.\"\n [f & args]\n {:pre [(ifn? f)]}\n (ratom/make-track f args))\n"} {:sym props, :meta {:doc "Returns the props passed to a component.", :arglists ([this])}, :source "(defn\n props\n \"Returns the props passed to a component.\"\n [this]\n (assert-component this)\n (comp/get-props this))\n"} {:sym dispose!, :meta {:doc "Stop the result of track! from updating.", :arglists ([x])}, :source "(defn\n dispose!\n \"Stop the result of track! from updating.\"\n [x]\n (ratom/dispose! x))\n"} {:sym state-atom, :meta {:doc "Returns an atom containing a components state.", :arglists ([this])}, :source "(defn\n state-atom\n \"Returns an atom containing a components state.\"\n [this]\n (assert-component this)\n (comp/state-atom this))\n"} {:sym flush, :meta {:doc "Render dirty components immediately to the DOM.\n\n Note that this may not work in event handlers, since React.js does\n batching of updates there.", :arglists ([])}, :source "(defn\n flush\n \"Render dirty components immediately to the DOM.\\n\\n Note that this may not work in event handlers, since React.js does\\n batching of updates there.\"\n []\n (batch/flush))\n"} {:sym children, :meta {:doc "Returns the children passed to a component.", :arglists ([this])}, :source "(defn\n children\n \"Returns the children passed to a component.\"\n [this]\n (assert-component this)\n (comp/get-children this))\n"} {:sym wrap, :meta {:doc "Provide a combination of value and callback, that looks like an atom.\n\n The first argument can be any value, that will be returned when the\n result is deref'ed.\n\n The second argument should be a function, that is called with the\n optional extra arguments provided to wrap, and the new value of the\n resulting 'atom'.\n\n Use for example like this:\n\n (wrap (:foo @state)\n swap! state assoc :foo)\n\n Probably useful only for passing to child components.", :arglists ([value reset-fn & args])}, :source "(defn\n wrap\n \"Provide a combination of value and callback, that looks like an atom.\\n\\n The first argument can be any value, that will be returned when the\\n result is deref'ed.\\n\\n The second argument should be a function, that is called with the\\n optional extra arguments provided to wrap, and the new value of the\\n resulting 'atom'.\\n\\n Use for example like this:\\n\\n (wrap (:foo @state)\\n swap! state assoc :foo)\\n\\n Probably useful only for passing to child components.\"\n [value reset-fn & args]\n (assert-callable reset-fn)\n (ratom/make-wrapper value reset-fn args))\n"} {:sym reactify-component, :meta {:doc "Returns an adapter for a Reagent component, that may be used from\n React, for example in JSX. A single argument, props, is passed to\n the component, converted to a map.", :arglists ([c])}, :source "(defn\n reactify-component\n \"Returns an adapter for a Reagent component, that may be used from\\n React, for example in JSX. A single argument, props, is passed to\\n the component, converted to a map.\"\n [c]\n (assert-some c \"Component\")\n (comp/reactify-component c))\n"} {:sym unmount-component-at-node, :meta {:doc "Remove a component from the given DOM node.", :arglists ([container])}, :source "(defn\n unmount-component-at-node\n \"Remove a component from the given DOM node.\"\n [container]\n (dom/unmount-component-at-node container))\n"} {:sym render-component, :meta {}, :source "(def render-component render)\n"} {:sym component-path, :meta {:doc nil, :arglists ([c])}, :source "(defn component-path [c] (comp/component-path c))\n"} {:sym cursor, :meta {:doc "Provide a cursor into a Reagent atom.\n\n Behaves like a Reagent atom but focuses updates and derefs to\n the specified path within the wrapped Reagent atom. e.g.,\n (let [c (cursor ra [:nested :content])]\n ... @c ;; equivalent to (get-in @ra [:nested :content])\n ... (reset! c 42) ;; equivalent to (swap! ra assoc-in [:nested :content] 42)\n ... (swap! c inc) ;; equivalence to (swap! ra update-in [:nested :content] inc)\n )\n\n The first parameter can also be a function, that should look\n something like this:\n\n (defn set-get\n ([k] (get-in @state k))\n ([k v] (swap! state assoc-in k v)))\n\n The function will be called with one argument – the path passed to\n cursor – when the cursor is deref'ed, and two arguments (path and\n new value) when the cursor is modified.\n\n Given that set-get function, (and that state is a Reagent atom, or\n another cursor) these cursors are equivalent:\n (cursor state [:foo]) and (cursor set-get [:foo]).\n\n Note that a cursor is lazy: its value will not change until it is\n used. This may be noticed with add-watch.", :arglists [[src path]]}, :source "(defn\n cursor\n \"Provide a cursor into a Reagent atom.\\n\\n Behaves like a Reagent atom but focuses updates and derefs to\\n the specified path within the wrapped Reagent atom. e.g.,\\n (let [c (cursor ra [:nested :content])]\\n ... @c ;; equivalent to (get-in @ra [:nested :content])\\n ... (reset! c 42) ;; equivalent to (swap! ra assoc-in [:nested :content] 42)\\n ... (swap! c inc) ;; equivalence to (swap! ra update-in [:nested :content] inc)\\n )\\n\\n The first parameter can also be a function, that should look\\n something like this:\\n\\n (defn set-get\\n ([k] (get-in @state k))\\n ([k v] (swap! state assoc-in k v)))\\n\\n The function will be called with one argument – the path passed to\\n cursor – when the cursor is deref'ed, and two arguments (path and\\n new value) when the cursor is modified.\\n\\n Given that set-get function, (and that state is a Reagent atom, or\\n another cursor) these cursors are equivalent:\\n (cursor state [:foo]) and (cursor set-get [:foo]).\\n\\n Note that a cursor is lazy: its value will not change until it is\\n used. This may be noticed with add-watch.\"\n ([src path] (ratom/cursor src path)))\n"} {:sym state, :meta {:doc "Returns the state of a component, as set with replace-state or set-state.\n Equivalent to (deref (r/state-atom this))", :arglists ([this])}, :source "(defn\n state\n \"Returns the state of a component, as set with replace-state or set-state.\\n Equivalent to (deref (r/state-atom this))\"\n [this]\n (assert-component this)\n (deref (state-atom this)))\n"} {:sym dom-node, :meta {:doc "Returns the root DOM node of a mounted component.", :arglists ([this])}, :source "(defn\n dom-node\n \"Returns the root DOM node of a mounted component.\"\n [this]\n (dom/dom-node this))\n"} {:sym track!, :meta {:doc "An eager version of track. The function passed is called\n immediately, and continues to be called when needed, until stopped\n with dispose!.", :arglists ([f & args])}, :source "(defn\n track!\n \"An eager version of track. The function passed is called\\n immediately, and continues to be called when needed, until stopped\\n with dispose!.\"\n [f & args]\n {:pre [(ifn? f)]}\n (ratom/make-track! f args))\n"} {:sym is-client, :meta {}, :source "(def is-client util/is-client)\n"} {:sym replace-state, :meta {:doc "Set state of a component.\n Equivalent to (reset! (state-atom this) new-state)", :arglists ([this new-state])}, :source "(defn\n replace-state\n \"Set state of a component.\\n Equivalent to (reset! (state-atom this) new-state)\"\n [this new-state]\n (assert-component this)\n (assert-new-state new-state)\n (reset! (state-atom this) new-state))\n"} {:sym partial, :meta {:doc "Works just like clojure.core/partial, but the result can be compared with =", :arglists ([f & args])}, :source "(defn\n partial\n \"Works just like clojure.core/partial, but the result can be compared with =\"\n [f & args]\n (util/make-partial-fn f args))\n"} {:sym set-state, :meta {:doc "Merge component state with new-state.\n Equivalent to (swap! (state-atom this) merge new-state)", :arglists ([this new-state])}, :source "(defn\n set-state\n \"Merge component state with new-state.\\n Equivalent to (swap! (state-atom this) merge new-state)\"\n [this new-state]\n (assert-component this)\n (assert-new-state new-state)\n (swap! (state-atom this) merge new-state))\n"} {:sym argv, :meta {:doc "Returns the entire Hiccup form passed to the component.", :arglists ([this])}, :source "(defn\n argv\n \"Returns the entire Hiccup form passed to the component.\"\n [this]\n (assert-component this)\n (comp/get-argv this))\n"} {:sym render, :meta {:doc "Render a Reagent component into the DOM. The first argument may be\n either a vector (using Reagent's Hiccup syntax), or a React element.\n The second argument should be a DOM node.\n\n Optionally takes a callback that is called when the component is in place.\n\n Returns the mounted component instance.", :arglists [[comp container] [comp container callback]]}, :source "(defn\n render\n \"Render a Reagent component into the DOM. The first argument may be\\n either a vector (using Reagent's Hiccup syntax), or a React element.\\n The second argument should be a DOM node.\\n\\n Optionally takes a callback that is called when the component is in place.\\n\\n Returns the mounted component instance.\"\n ([comp container] (dom/render comp container))\n ([comp container callback] (dom/render comp container callback)))\n"} {:sym force-update, :meta {:doc "Force a component to re-render immediately.\n\n If the second argument is true, child components will also be\n re-rendered, even is their arguments have not changed.", :arglists [[this] [this deep]]}, :source "(defn\n force-update\n \"Force a component to re-render immediately.\\n\\n If the second argument is true, child components will also be\\n re-rendered, even is their arguments have not changed.\"\n ([this] (force-update this false))\n ([this deep]\n (ratom/flush!)\n (util/force-update this deep)\n (batch/flush-after-render)))\n"} {:sym create-class, :meta {:doc "Create a component, React style. Should be called with a map,\n looking like this:\n\n {:get-initial-state (fn [this])\n :component-will-receive-props (fn [this new-argv])\n :should-component-update (fn [this old-argv new-argv])\n :component-will-mount (fn [this])\n :component-did-mount (fn [this])\n :component-will-update (fn [this new-argv])\n :component-did-update (fn [this old-argv])\n :component-will-unmount (fn [this])\n :reagent-render (fn [args....])} ;; or :render (fn [this])\n\n Everything is optional, except either :reagent-render or :render.", :arglists ([spec])}, :source "(defn\n create-class\n \"Create a component, React style. Should be called with a map,\\n looking like this:\\n\\n {:get-initial-state (fn [this])\\n :component-will-receive-props (fn [this new-argv])\\n :should-component-update (fn [this old-argv new-argv])\\n :component-will-mount (fn [this])\\n :component-did-mount (fn [this])\\n :component-will-update (fn [this new-argv])\\n :component-did-update (fn [this old-argv])\\n :component-will-unmount (fn [this])\\n :reagent-render (fn [args....])} ;; or :render (fn [this])\\n\\n Everything is optional, except either :reagent-render or :render.\"\n [spec]\n (comp/create-class spec))\n"} {:sym create-element, :meta {:doc "Create a native React element, by calling React.createElement directly.\n\n That means the second argument must be a javascript object (or nil), and\n that any Reagent hiccup forms must be processed with as-element. For example\n like this:\n\n (r/create-element \"div\" #js{:className \"foo\"}\n \"Hi \" (r/as-element [:strong \"world!\"])\n\n which is equivalent to\n\n [:div.foo \"Hi\" [:strong \"world!\"]]", :arglists [[type] [type props] [type props child] [type props child & children]]}, :source "(defn\n create-element\n \"Create a native React element, by calling React.createElement directly.\\n\\n That means the second argument must be a javascript object (or nil), and\\n that any Reagent hiccup forms must be processed with as-element. For example\\n like this:\\n\\n (r/create-element \\\"div\\\" #js{:className \\\"foo\\\"}\\n \\\"Hi \\\" (r/as-element [:strong \\\"world!\\\"])\\n\\n which is equivalent to\\n\\n [:div.foo \\\"Hi\\\" [:strong \\\"world!\\\"]]\"\n ([type] (create-element type nil))\n ([type props]\n (assert-js-object props)\n (react/createElement type props))\n ([type props child]\n (assert-js-object props)\n (react/createElement type props child))\n ([type props child & children]\n (assert-js-object props)\n (apply react/createElement type props child children)))\n"}), dynadoc.core ({:sym add-focus, :meta {:doc nil, :arglists ([form with-focus body])}, :source "(defn\n add-focus\n [form with-focus body]\n (if-let\n [binding (with-focus->binding with-focus)]\n (postwalk (fn [x] (if (= x binding) form x)) body)\n form))\n"} {:sym clj-compiler-fn, :meta {:doc nil, :arglists ([example forms cb])}, :source "(defn\n clj-compiler-fn\n [example forms cb]\n (try\n (.send\n XhrIo\n \"/eval\"\n (fn\n [e]\n (if\n (.isSuccess (.-target e))\n (->>\n (.. e -target getResponseText)\n read-string\n rest\n (mapv\n (fn*\n [p1__18666#]\n (if (vector? p1__18666#) (into-array p1__18666#) p1__18666#)))\n cb)\n (cb [])))\n \"POST\"\n (pr-str\n (into\n [(str \"(in-ns '\" (:ns-sym @*state) \")\")]\n (mapv (partial transform (dissoc example :with-card)) forms))))\n (catch js/Error _ (cb []))))\n"} {:sym version, :meta {}, :source "(def version \"1.4.0\")\n"} {:sym form->serializable, :meta {:doc "Converts the input to either a string or (if an error object) an array of data", :arglists ([form])}, :source "(defn\n form->serializable\n \"Converts the input to either a string or (if an error object) an array of data\"\n [form]\n (if\n (instance? js/Error form)\n (array\n (or (some-> form .-cause .-message) (.-message form))\n (.-fileName form)\n (.-lineNumber form))\n (pr-str form)))\n"} {:sym init-editor, :meta {:doc nil, :arglists ([elem])}, :source "(defn\n init-editor\n [elem]\n (when-let\n [paren-soup (or (.querySelector elem \".paren-soup\") elem)]\n (ps/init paren-soup (js->clj {:compiler-fn (fn [])}))))\n"} {:sym add-callback, :meta {:doc nil, :arglists ([form with-callback])}, :source "(defn\n add-callback\n [form with-callback]\n (list\n 'let\n ['es-channel\n '(dynadoc.aliases/chan)\n with-callback\n '(fn [data] (dynadoc.aliases/put! es-channel data))]\n form\n '(dynadoc.aliases/results\n (into\n [(str \"(ns \" (:ns-sym @*state) \")\")]\n (mapv (partial transform example) forms))\n (fn [results] (->> results rest (mapv form->serializable) cb))\n {:custom-load (fn [opts cb] (cb {:lang :clj, :source \"\"}))}))\n"} {:sym transform, :meta {:doc nil, :arglists ([{:keys [body id with-focus with-card with-callback]} form-str])}, :source "(defn\n transform\n [{:keys [body id with-focus with-card with-callback]} form-str]\n (if\n (or with-focus with-card with-callback)\n (pr-str\n (cond->\n (read-string form-str)\n (some? with-focus)\n (add-focus with-focus body)\n (some? with-card)\n (add-card with-card id)\n (some? with-callback)\n (add-callback with-callback)))\n form-str))\n"} {:sym init, :meta {:doc nil, :arglists ([])}, :source "(defn\n init\n []\n (swap!\n *state\n merge\n (->\n (.querySelector js/document \"#initial-state\")\n .-textContent\n read-string))\n (rum/mount (common/app *state) (.querySelector js/document \"#app\"))\n (let\n [{:keys [static? dev? watcher]} @*state]\n (when (and (not static?) (not dev?)) (check-version))\n (swap!\n *state\n assoc\n :cljs-started?\n true\n :exportable?\n js/COMPILED\n :init-editor\n init-editor\n :init-example-editor\n init-example-editor\n :watcher\n (when-not js/COMPILED (or watcher (init-watcher!)))))\n (when\n (:var-sym @*state)\n (doseq\n [button (-> js/document (.querySelectorAll \".button\") array-seq)]\n (set! (.-display (.-style button)) \"inline-block\"))))\n"} {:sym add-card, :meta {:doc nil, :arglists ([form with-card id])}, :source "(defn\n add-card\n [form with-card id]\n (list 'let [with-card (list '.getElementById 'js/document id)] form))\n"} {:sym prod, :meta {:doc nil, :arglists ([])}, :source "(defn prod [] (swap! *state assoc :prod? true))\n"} {:sym check-version, :meta {:doc nil, :arglists ([])}, :source "(defn\n check-version\n []\n (.send\n XhrIo\n api-url\n (fn\n [e]\n (when\n (and\n (.isSuccess (.-target e))\n (->>\n (.. e -target getResponseText)\n (.parse js/JSON)\n ((fn* [p1__18667#] (gobj/get p1__18667# \"latest_release\")))\n (not= version)))\n (swap! *state assoc :update? true)))\n \"GET\"))\n"} {:sym api-url, :meta {}, :source "(def api-url \"https://clojars.org/api/artifacts/dynadoc\")\n"} {:sym with-focus->binding, :meta {:doc nil, :arglists ([with-focus])}, :source "(defn\n with-focus->binding\n [with-focus]\n (let\n [{:keys [binding]} with-focus [binding-type binding-val] binding]\n (when (= :sym binding-type) binding-val)))\n"} {:sym init-example-editor, :meta {:doc nil, :arglists ([elem example])}, :source "(defn\n init-example-editor\n [elem example]\n (when-let\n [paren-soup (or (.querySelector elem \".paren-soup\") elem)]\n (when-let\n [content (.querySelector paren-soup \".content\")]\n (set! (.-contentEditable content) true))\n (ps/init\n paren-soup\n (js->clj\n {:compiler-fn\n (if\n (= :clj (:type @*state))\n (partial clj-compiler-fn example)\n (partial cljs-compiler-fn example))}))))\n"} {:sym init-watcher!, :meta {:doc nil, :arglists ([])}, :source "(defn\n init-watcher!\n []\n (let\n [protocol\n (if (= (.-protocol js/location) \"https:\") \"wss:\" \"ws:\")\n host\n (-> js/window .-location .-host)\n sock\n (js/WebSocket. (str protocol \"//\" host \"/watch\"))]\n (set!\n (.-onopen sock)\n (fn [event] (.send sock js/window.location.pathname)))\n (set!\n (.-onmessage sock)\n (fn [event] (->> (.-data event) read-string (swap! *state merge))))\n sock))\n"}), cljs.tools.reader.impl.errors ({:sym throw-bad-dispatch, :meta {:doc nil, :arglists ([rdr ch])}, :source "(defn\n throw-bad-dispatch\n [rdr ch]\n (reader-error rdr \"No dispatch macro for \" ch \".\"))\n"} {:sym throw-invalid-unicode-escape, :meta {:doc nil, :arglists ([rdr ch])}, :source "(defn\n throw-invalid-unicode-escape\n [rdr ch]\n (reader-error rdr \"Invalid unicode escape: \\\\u\" ch \".\"))\n"} {:sym throw-dup-keys, :meta {:doc nil, :arglists ([rdr kind ks])}, :source "(defn\n throw-dup-keys\n [rdr kind ks]\n (reader-error\n rdr\n (duplicate-keys-error\n (str (s/capitalize (name kind)) \" literal contains duplicate key\")\n ks)))\n"} {:sym throw-bad-ns, :meta {:doc nil, :arglists ([rdr ns-name])}, :source "(defn\n throw-bad-ns\n [rdr ns-name]\n (reader-error\n rdr\n \"Invalid value used as namespace in namespaced map: \"\n ns-name\n \".\"))\n"} {:sym throw-unknown-reader-tag, :meta {:doc nil, :arglists ([rdr tag])}, :source "(defn\n throw-unknown-reader-tag\n [rdr tag]\n (reader-error rdr \"No reader function for tag \" (i/inspect tag) \".\"))\n"} {:sym throw-eof-at-dispatch, :meta {:doc nil, :arglists ([rdr])}, :source "(defn\n throw-eof-at-dispatch\n [rdr]\n (eof-error rdr \"Unexpected EOF while reading dispatch character.\"))\n"} {:sym throw-bad-metadata-target, :meta {:doc nil, :arglists ([rdr target])}, :source "(defn\n throw-bad-metadata-target\n [rdr target]\n (reader-error\n rdr\n \"Metadata can not be applied to \"\n (i/inspect target)\n \". \"\n \"Metadata can only be applied to IMetas.\"))\n"} {:sym throw-invalid-number, :meta {:doc nil, :arglists ([rdr token])}, :source "(defn\n throw-invalid-number\n [rdr token]\n (reader-error rdr \"Invalid number: \" token \".\"))\n"} {:sym reader-error, :meta {:doc "Throws an ExceptionInfo with the given message.\n If rdr is an IndexingReader, additional information about column and line number is provided", :arglists ([rdr & msgs])}, :source "(defn\n reader-error\n \"Throws an ExceptionInfo with the given message.\\n If rdr is an IndexingReader, additional information about column and line number is provided\"\n [rdr & msgs]\n (throw-ex rdr :reader-error (apply str msgs)))\n"} {:sym throw-invalid-unicode-literal, :meta {:doc nil, :arglists ([rdr token])}, :source "(defn\n throw-invalid-unicode-literal\n [rdr token]\n (throw\n (illegal-arg-error rdr \"Invalid unicode literal: \\\\\" token \".\")))\n"} {:sym throw-ns-map-no-map, :meta {:doc nil, :arglists ([rdr ns-name])}, :source "(defn\n throw-ns-map-no-map\n [rdr ns-name]\n (reader-error\n rdr\n \"Namespaced map with namespace \"\n ns-name\n \" does not specify a map.\"))\n"} {:sym throw-unsupported-character, :meta {:doc nil, :arglists ([rdr token])}, :source "(defn\n throw-unsupported-character\n [rdr token]\n (reader-error rdr \"Unsupported character: \" token \".\"))\n"} {:sym throw-feature-not-keyword, :meta {:doc nil, :arglists ([rdr feature])}, :source "(defn\n throw-feature-not-keyword\n [rdr feature]\n (reader-error\n rdr\n \"Feature cannot be \"\n (i/inspect feature)\n \" Features must be keywords.\"))\n"} {:sym throw-eof-delimited, :meta {:doc nil, :arglists [[rdr kind column line] [rdr kind line column n]]}, :source "(defn\n throw-eof-delimited\n ([rdr kind column line]\n (throw-eof-delimited rdr kind line column nil))\n ([rdr kind line column n]\n (eof-error\n rdr\n \"Unexpected EOF while reading \"\n (if n (str \"item \" n \" of \"))\n (name kind)\n (if line (str \", starting at line \" line \" and column \" column))\n \".\")))\n"} {:sym throw-eof-in-character, :meta {:doc nil, :arglists ([rdr])}, :source "(defn\n throw-eof-in-character\n [rdr]\n (eof-error rdr \"Unexpected EOF while reading character.\"))\n"} {:sym throw-bad-char, :meta {:doc nil, :arglists ([rdr kind ch])}, :source "(defn\n throw-bad-char\n [rdr kind ch]\n (reader-error\n rdr\n \"Invalid character: \"\n ch\n \" found while reading \"\n (name kind)\n \".\"))\n"} {:sym eof-error, :meta {:doc "Throws an ExceptionInfo with the given message.\n If rdr is an IndexingReader, additional information about column and line number is provided", :arglists ([rdr & msgs])}, :source "(defn\n eof-error\n \"Throws an ExceptionInfo with the given message.\\n If rdr is an IndexingReader, additional information about column and line number is provided\"\n [rdr & msgs]\n (throw-ex rdr :eof (apply str msgs)))\n"} {:sym throw-bad-metadata, :meta {:doc nil, :arglists ([rdr x])}, :source "(defn\n throw-bad-metadata\n [rdr x]\n (reader-error\n rdr\n \"Metadata cannot be \"\n (i/inspect x)\n \". Metadata must be a Symbol, Keyword, String or Map.\"))\n"} {:sym throw-eof-reading, :meta {:doc nil, :arglists ([rdr kind & start])}, :source "(defn\n throw-eof-reading\n [rdr kind & start]\n (let\n [init (case kind :regex \"#\\\"\" :string \\\")]\n (eof-error\n rdr\n \"Unexpected EOF reading \"\n (name kind)\n \" starting \"\n (apply str init start)\n \".\")))\n"} {:sym throw-eof-error, :meta {:doc nil, :arglists ([rdr line])}, :source "(defn\n throw-eof-error\n [rdr line]\n (if\n line\n (eof-error rdr \"EOF while reading, starting at line \" line \".\")\n (eof-error rdr \"EOF while reading.\")))\n"} {:sym illegal-arg-error, :meta {:doc "Throws an ExceptionInfo with the given message.\n If rdr is an IndexingReader, additional information about column and line number is provided", :arglists ([rdr & msgs])}, :source "(defn\n illegal-arg-error\n \"Throws an ExceptionInfo with the given message.\\n If rdr is an IndexingReader, additional information about column and line number is provided\"\n [rdr & msgs]\n (throw-ex rdr :illegal-argument (apply str msgs)))\n"} {:sym throw-invalid-octal-len, :meta {:doc nil, :arglists ([rdr token])}, :source "(defn\n throw-invalid-octal-len\n [rdr token]\n (reader-error\n rdr\n \"Invalid octal escape sequence in a character literal:\"\n token\n \". Octal escape sequences must be 3 or fewer digits.\"))\n"} {:sym throw-invalid-unicode-digit, :meta {:doc nil, :arglists ([rdr ch])}, :source "(defn\n throw-invalid-unicode-digit\n [rdr ch]\n (illegal-arg-error rdr \"Invalid digit \" ch \" in unicode character.\"))\n"} {:sym throw-invalid-unicode-digit-in-token, :meta {:doc nil, :arglists ([rdr ch token])}, :source "(defn\n throw-invalid-unicode-digit-in-token\n [rdr ch token]\n (illegal-arg-error\n rdr\n \"Invalid digit \"\n ch\n \" in unicode character \\\\\"\n token\n \".\"))\n"} {:sym throw-invalid-unicode-len, :meta {:doc nil, :arglists ([rdr actual expected])}, :source "(defn\n throw-invalid-unicode-len\n [rdr actual expected]\n (illegal-arg-error\n rdr\n \"Invalid unicode literal. Unicode literals should be \"\n expected\n \"characters long. \"\n \"value suppled is \"\n actual\n \"characters long.\"))\n"} {:sym throw-single-colon, :meta {:doc nil, :arglists ([rdr])}, :source "(defn\n throw-single-colon\n [rdr]\n (reader-error rdr \"A single colon is not a valid keyword.\"))\n"} {:sym throw-odd-map, :meta {:doc nil, :arglists ([rdr line col elements])}, :source "(defn\n throw-odd-map\n [rdr line col elements]\n (reader-error\n rdr\n \"The map literal starting with \"\n (i/inspect (first elements))\n (if line (str \" on line \" line \" column \" col))\n \" contains \"\n (count elements)\n \" form(s). Map literals must contain an even number of forms.\"))\n"} {:sym throw-bad-octal-number, :meta {:doc nil, :arglists ([rdr])}, :source "(defn\n throw-bad-octal-number\n [rdr]\n (reader-error rdr \"Octal escape sequence must be in range [0, 377].\"))\n"} {:sym throw-bad-reader-tag, :meta {:doc nil, :arglists ([rdr tag])}, :source "(defn\n throw-bad-reader-tag\n [rdr tag]\n (reader-error\n rdr\n \"Invalid reader tag: \"\n (i/inspect tag)\n \". Reader tags must be symbols.\"))\n"} {:sym throw-unmatch-delimiter, :meta {:doc nil, :arglists ([rdr ch])}, :source "(defn\n throw-unmatch-delimiter\n [rdr ch]\n (reader-error rdr \"Unmatched delimiter \" ch \".\"))\n"} {:sym throw-invalid-character-literal, :meta {:doc nil, :arglists ([rdr token])}, :source "(defn\n throw-invalid-character-literal\n [rdr token]\n (reader-error rdr \"Invalid character literal \\\\u\" token \".\"))\n"} {:sym throw-invalid-unicode-char, :meta {:doc nil, :arglists ([rdr token])}, :source "(defn\n throw-invalid-unicode-char\n [rdr token]\n (reader-error rdr \"Invalid unicode character \\\\\" token \".\"))\n"} {:sym throw-bad-escape-char, :meta {:doc nil, :arglists ([rdr ch])}, :source "(defn\n throw-bad-escape-char\n [rdr ch]\n (reader-error rdr \"Unsupported escape character: \\\\\" ch \".\"))\n"} {:sym throw-no-dispatch, :meta {:doc nil, :arglists ([rdr ch])}, :source "(defn throw-no-dispatch [rdr ch] (throw-bad-dispatch rdr ch))\n"} {:sym throw-eof-at-start, :meta {:doc nil, :arglists ([rdr kind])}, :source "(defn\n throw-eof-at-start\n [rdr kind]\n (eof-error\n rdr\n \"Unexpected EOF while reading start of \"\n (name kind)\n \".\"))\n"} {:sym throw-invalid, :meta {:doc nil, :arglists ([rdr kind token])}, :source "(defn\n throw-invalid\n [rdr kind token]\n (reader-error rdr \"Invalid \" (name kind) \": \" token \".\"))\n"}), cljs.js ({:sym *load-fn*, :meta {:doc "Each runtime environment provides a different way to load a library.\n Whatever function *load-fn* is bound to will be passed two arguments - a\n map and a callback function: The map will have the following keys:\n\n :name - the name of the library (a symbol)\n :macros - modifier signaling a macros namespace load\n :path - munged relative library path (a string)\n\n It is up to the implementor to correctly resolve the corresponding .cljs,\n .cljc, or .js resource (the order must be respected). If :macros is true\n resolution should only consider .clj or .cljc resources (the order must be\n respected). Upon resolution the callback should be invoked with a map\n containing the following keys:\n\n :lang - the language, :clj or :js\n :source - the source of the library (a string)\n :file - optional, the file path, it will be added to AST's :file keyword\n (but not in :meta)\n :cache - optional, if a :clj namespace has been precompiled to :js, can\n give an analysis cache for faster loads.\n :source-map - optional, if a :clj namespace has been precompiled to :js, can\n give a V3 source map JSON\n\n If the resource could not be resolved, the callback should be invoked with\n nil."}, :source "(defonce *load-fn* (fn [m cb] (throw (js/Error. \"No *load-fn* set\"))))\n"} {:sym eval, :meta {:doc "Evaluate a single ClojureScript form. The parameters:\n\n state (atom)\n the compiler state\n\n form (s-expr)\n the ClojureScript source\n\n opts (map)\n compilation options.\n\n :eval - eval function to invoke, see *eval-fn*\n :load - library resolution function, see *load-fn*\n :source-map - set to true to generate inline source map information\n :def-emits-var - sets whether def (and derived) forms return either a Var\n (if set to true) or the def init value (if false). Default\n is false.\n :checked-arrays - if :warn or :error, checks inferred types and values passed\n to aget/aset. Logs for incorrect values if :warn, throws if\n :error. Defaults to false.\n :static-fns - employ static dispatch to specific function arities in\n emitted JavaScript, as opposed to making use of the\n `call` construct. Defaults to false.\n :fn-invoke-direct - if `true`, does not generate `.call(null...)` calls for\n unknown functions, but instead direct invokes via\n `f(a0,a1...)`. Defaults to `false`.\n :target - use `:nodejs` if targeting Node.js. Takes no other options\n at the moment.\n :ns - optional, the namespace in which to evaluate the source.\n :verbose - optional, emit details from compiler activity. Defaults to\n false.\n :context - optional, sets the context for the source. Possible values\n are `:expr`, `:statement` and `:return`. Defaults to\n `:expr`.\n\n cb (function)\n callback, will be invoked with a map. If successful the map will contain\n a key :value with the result of evalution. If unsuccessful the map will\n contain a key :error with an ex-info instance describing the cause of\n failure.", :arglists [[state form cb] [state form opts cb]]}, :source "(defn\n eval\n \"Evaluate a single ClojureScript form. The parameters:\\n\\n state (atom)\\n the compiler state\\n\\n form (s-expr)\\n the ClojureScript source\\n\\n opts (map)\\n compilation options.\\n\\n :eval - eval function to invoke, see *eval-fn*\\n :load - library resolution function, see *load-fn*\\n :source-map - set to true to generate inline source map information\\n :def-emits-var - sets whether def (and derived) forms return either a Var\\n (if set to true) or the def init value (if false). Default\\n is false.\\n :checked-arrays - if :warn or :error, checks inferred types and values passed\\n to aget/aset. Logs for incorrect values if :warn, throws if\\n :error. Defaults to false.\\n :static-fns - employ static dispatch to specific function arities in\\n emitted JavaScript, as opposed to making use of the\\n `call` construct. Defaults to false.\\n :fn-invoke-direct - if `true`, does not generate `.call(null...)` calls for\\n unknown functions, but instead direct invokes via\\n `f(a0,a1...)`. Defaults to `false`.\\n :target - use `:nodejs` if targeting Node.js. Takes no other options\\n at the moment.\\n :ns - optional, the namespace in which to evaluate the source.\\n :verbose - optional, emit details from compiler activity. Defaults to\\n false.\\n :context - optional, sets the context for the source. Possible values\\n are `:expr`, `:statement` and `:return`. Defaults to\\n `:expr`.\\n\\n cb (function)\\n callback, will be invoked with a map. If successful the map will contain\\n a key :value with the result of evalution. If unsuccessful the map will\\n contain a key :error with an ex-info instance describing the cause of\\n failure.\"\n ([state form cb] (eval state form nil cb))\n ([state form opts cb]\n (eval*\n {:*compiler* state,\n :*data-readers* tags/*cljs-data-readers*,\n :*analyze-deps* (:analyze-deps opts true),\n :*cljs-dep-set* ana/*cljs-dep-set*,\n :*load-macros* (:load-macros opts true),\n :*load-fn* (or (:load opts) *load-fn*),\n :*eval-fn* (or (:eval opts) *eval-fn*)}\n form\n opts\n cb)))\n"} {:sym compile-str, :meta {:doc "Compile ClojureScript source into JavaScript. The parameters:\n\n state (atom)\n the compiler state\n\n source (string)\n the ClojureScript source\n\n name (symbol or string)\n optional, the name of the source\n\n opts (map)\n compilation options.\n\n :eval - eval function to invoke, see *eval-fn*\n :load - library resolution function, see *load-fn*\n :source-map - set to true to generate inline source map information\n :def-emits-var - sets whether def (and derived) forms return either a Var\n (if set to true) or the def init value (if false). Default\n is false.\n :checked-arrays - if :warn or :error, checks inferred types and values passed\n to aget/aset. Logs for incorrect values if :warn, throws if\n :error. Defaults to false.\n :static-fns - employ static dispatch to specific function arities in\n emitted JavaScript, as opposed to making use of the\n `call` construct. Defaults to false.\n :fn-invoke-direct - if `true`, does not generate `.call(null...)` calls for\n unknown functions, but instead direct invokes via\n `f(a0,a1...)`. Defaults to `false`.\n :target - use `:nodejs` if targeting Node.js. Takes no other options\n at the moment.\n :ns - optional, the namespace in which to evaluate the source.\n :verbose - optional, emit details from compiler activity. Defaults to\n false.\n :context - optional, sets the context for the source. Possible values\n are `:expr`, `:statement` and `:return`. Defaults to\n `:expr`.\n\n cb (function)\n callback, will be invoked with a map. If successful the map will contain\n a key :value with the compilation result (string). If unsuccessful the map\n will contain a key :error with an ex-info instance describing the cause\n of failure.", :arglists [[state source cb] [state source name cb] [state source name opts cb]]}, :source "(defn\n compile-str\n \"Compile ClojureScript source into JavaScript. The parameters:\\n\\n state (atom)\\n the compiler state\\n\\n source (string)\\n the ClojureScript source\\n\\n name (symbol or string)\\n optional, the name of the source\\n\\n opts (map)\\n compilation options.\\n\\n :eval - eval function to invoke, see *eval-fn*\\n :load - library resolution function, see *load-fn*\\n :source-map - set to true to generate inline source map information\\n :def-emits-var - sets whether def (and derived) forms return either a Var\\n (if set to true) or the def init value (if false). Default\\n is false.\\n :checked-arrays - if :warn or :error, checks inferred types and values passed\\n to aget/aset. Logs for incorrect values if :warn, throws if\\n :error. Defaults to false.\\n :static-fns - employ static dispatch to specific function arities in\\n emitted JavaScript, as opposed to making use of the\\n `call` construct. Defaults to false.\\n :fn-invoke-direct - if `true`, does not generate `.call(null...)` calls for\\n unknown functions, but instead direct invokes via\\n `f(a0,a1...)`. Defaults to `false`.\\n :target - use `:nodejs` if targeting Node.js. Takes no other options\\n at the moment.\\n :ns - optional, the namespace in which to evaluate the source.\\n :verbose - optional, emit details from compiler activity. Defaults to\\n false.\\n :context - optional, sets the context for the source. Possible values\\n are `:expr`, `:statement` and `:return`. Defaults to\\n `:expr`.\\n\\n cb (function)\\n callback, will be invoked with a map. If successful the map will contain\\n a key :value with the compilation result (string). If unsuccessful the map\\n will contain a key :error with an ex-info instance describing the cause\\n of failure.\"\n ([state source cb] (compile-str state source nil cb))\n ([state source name cb] (compile-str state source name nil cb))\n ([state source name opts cb]\n {:pre\n [(atom? state)\n (string? source)\n (valid-name? name)\n (valid-opts? opts)\n (fn? cb)]}\n (compile-str*\n {:*compiler* state,\n :*data-readers* tags/*cljs-data-readers*,\n :*cljs-dep-set* ana/*cljs-dep-set*,\n :*analyze-deps* (:analyze-deps opts true),\n :*load-macros* (:load-macros opts true),\n :*load-fn* (or (:load opts) *load-fn*),\n :*eval-fn* (or (:eval opts) *eval-fn*),\n :*sm-data* (when (:source-map opts) (sm-data))}\n source\n name\n opts\n cb)))\n"} {:sym ns->relpath, :meta {:doc "Given a namespace as a symbol return the relative path sans extension", :arglists ([ns-sym])}, :source "(defn\n ns->relpath\n \"Given a namespace as a symbol return the relative path sans extension\"\n [ns-sym]\n (string/replace (ana/munge-path ns-sym) \\. \\/))\n"} {:sym *loaded*, :meta {}, :source "(def *loaded* (atom #{}))\n"} {:sym require, :meta {:doc nil, :arglists [[name cb] [name opts cb] [bound-vars name opts cb] [bound-vars name reload opts cb]]}, :source "(defn\n require\n ([name cb] (require name nil cb))\n ([name opts cb] (require nil name opts cb))\n ([bound-vars name opts cb] (require bound-vars name nil opts cb))\n ([bound-vars name reload opts cb]\n (let\n [bound-vars\n (merge\n {:*compiler* (env/default-compiler-env),\n :*data-readers* tags/*cljs-data-readers*,\n :*load-macros* (:load-macros opts true),\n :*analyze-deps* (:analyze-deps opts true),\n :*load-fn* (or (:load opts) *load-fn*),\n :*eval-fn* (or (:eval opts) *eval-fn*)}\n bound-vars)\n aname\n (cond-> name (:macros-ns opts) ana/macro-ns-name)]\n (when (= :reload reload) (swap! *loaded* disj aname))\n (when (= :reload-all reload) (reset! *loaded* #{}))\n (when\n (:verbose opts)\n (debug-prn\n (str\n \"Loading \"\n name\n (when (:macros-ns opts) \" macros\")\n \" namespace\")))\n (if-not\n (contains? @*loaded* aname)\n (let\n [env (:*env* bound-vars)]\n (try\n ((:*load-fn* bound-vars)\n {:name name,\n :macros (:macros-ns opts),\n :path (ns->relpath name)}\n (fn\n [resource]\n (assert\n (or (map? resource) (nil? resource))\n \"*load-fn* may only return a map or nil\")\n (if\n resource\n (let\n [{:keys [lang source cache source-map file]} resource]\n (condp\n keyword-identical?\n lang\n :clj\n (do\n (pre-file-side-effects\n (:*compiler* bound-vars)\n aname\n file\n opts)\n (eval-str*\n bound-vars\n source\n name\n (assoc opts :cljs-file file)\n (fn\n [res]\n (post-file-side-effects file opts)\n (if\n (:error res)\n (cb res)\n (do (swap! *loaded* conj aname) (cb {:value true}))))))\n :js\n (process-macros-deps\n bound-vars\n cache\n opts\n (fn\n [res]\n (if\n (:error res)\n (cb res)\n (process-libs-deps\n bound-vars\n cache\n opts\n (fn\n [res]\n (if\n (:error res)\n (cb res)\n (let\n [res\n (try\n ((:*eval-fn* bound-vars) resource)\n (when\n cache\n (load-analysis-cache!\n (:*compiler* bound-vars)\n aname\n cache)\n (ana/register-specs cache))\n (when\n source-map\n (load-source-map!\n (:*compiler* bound-vars)\n aname\n source-map))\n (catch\n :default\n cause\n (wrap-error\n (ana/error\n env\n (str \"Could not require \" name)\n cause))))]\n (if\n (:error res)\n (cb res)\n (do\n (swap! *loaded* conj aname)\n (cb {:value true}))))))))))\n (cb\n (wrap-error\n (ana/error\n env\n (str\n \"Invalid :lang specified \"\n lang\n \", only :clj or :js allowed\"))))))\n (cb\n (wrap-error\n (ana/error\n env\n (ana/error-message\n (if\n (:macros-ns opts)\n :undeclared-macros-ns\n :undeclared-ns)\n {:ns-sym name, :js-provide (cljs.core/name name)})))))))\n (catch\n :default\n cause\n (cb\n (wrap-error\n (ana/error env (str \"Could not require \" name) cause))))))\n (cb {:value true})))))\n"} {:sym file->ns, :meta {:doc nil, :arglists ([file])}, :source "(defn\n file->ns\n [file]\n (let\n [lib-name (subs (string/replace file \"/\" \".\") 0 (- (count file) 5))]\n (symbol (demunge lib-name))))\n"} {:sym eval-str, :meta {:doc "Evalute ClojureScript source given as a string. The parameters:\n\n state (atom)\n the compiler state\n\n source (string)\n the ClojureScript source\n\n name (symbol or string)\n optional, the name of the source\n\n opts (map)\n compilation options.\n\n :eval - eval function to invoke, see *eval-fn*\n :load - library resolution function, see *load-fn*\n :source-map - set to true to generate inline source map information\n :cache-source - optional, a function to run side-effects with the\n compilation result prior to actual evalution. This function\n takes two arguments, the first is the eval map, the source\n will be under :source. The second argument is a callback of\n one argument. If an error occurs an :error key should be\n supplied.\n :def-emits-var - sets whether def (and derived) forms return either a Var\n (if set to true) or the def init value (if false). Default\n is false.\n :checked-arrays - if :warn or :error, checks inferred types and values passed\n to aget/aset. Logs for incorrect values if :warn, throws if\n :error. Defaults to false.\n :static-fns - employ static dispatch to specific function arities in\n emitted JavaScript, as opposed to making use of the\n `call` construct. Defaults to false.\n :fn-invoke-direct - if `true`, does not generate `.call(null...)` calls for\n unknown functions, but instead direct invokes via\n `f(a0,a1...)`. Defaults to `false`.\n :target - use `:nodejs` if targeting Node.js. Takes no other options\n at the moment.\n :ns - optional, the namespace in which to evaluate the source.\n :verbose - optional, emit details from compiler activity. Defaults to\n false.\n :context - optional, sets the context for the source. Possible values\n are `:expr`, `:statement` and `:return`. Defaults to\n `:expr`.\n\n cb (function)\n callback, will be invoked with a map. If succesful the map will contain\n a :value key with the result of evaluation and :ns the current namespace.\n If unsuccessful will contain a :error key with an ex-info instance describing\n the cause of failure.", :arglists [[state source cb] [state source name cb] [state source name opts cb]]}, :source "(defn\n eval-str\n \"Evalute ClojureScript source given as a string. The parameters:\\n\\n state (atom)\\n the compiler state\\n\\n source (string)\\n the ClojureScript source\\n\\n name (symbol or string)\\n optional, the name of the source\\n\\n opts (map)\\n compilation options.\\n\\n :eval - eval function to invoke, see *eval-fn*\\n :load - library resolution function, see *load-fn*\\n :source-map - set to true to generate inline source map information\\n :cache-source - optional, a function to run side-effects with the\\n compilation result prior to actual evalution. This function\\n takes two arguments, the first is the eval map, the source\\n will be under :source. The second argument is a callback of\\n one argument. If an error occurs an :error key should be\\n supplied.\\n :def-emits-var - sets whether def (and derived) forms return either a Var\\n (if set to true) or the def init value (if false). Default\\n is false.\\n :checked-arrays - if :warn or :error, checks inferred types and values passed\\n to aget/aset. Logs for incorrect values if :warn, throws if\\n :error. Defaults to false.\\n :static-fns - employ static dispatch to specific function arities in\\n emitted JavaScript, as opposed to making use of the\\n `call` construct. Defaults to false.\\n :fn-invoke-direct - if `true`, does not generate `.call(null...)` calls for\\n unknown functions, but instead direct invokes via\\n `f(a0,a1...)`. Defaults to `false`.\\n :target - use `:nodejs` if targeting Node.js. Takes no other options\\n at the moment.\\n :ns - optional, the namespace in which to evaluate the source.\\n :verbose - optional, emit details from compiler activity. Defaults to\\n false.\\n :context - optional, sets the context for the source. Possible values\\n are `:expr`, `:statement` and `:return`. Defaults to\\n `:expr`.\\n\\n cb (function)\\n callback, will be invoked with a map. If succesful the map will contain\\n a :value key with the result of evaluation and :ns the current namespace.\\n If unsuccessful will contain a :error key with an ex-info instance describing\\n the cause of failure.\"\n ([state source cb] (eval-str state source nil cb))\n ([state source name cb] (eval-str state source name nil cb))\n ([state source name opts cb]\n {:pre\n [(atom? state)\n (string? source)\n (valid-name? name)\n (valid-opts? opts)\n (fn? cb)]}\n (eval-str*\n {:*compiler* state,\n :*data-readers* tags/*cljs-data-readers*,\n :*analyze-deps* (:analyze-deps opts true),\n :*cljs-dep-set* ana/*cljs-dep-set*,\n :*load-macros* (:load-macros opts true),\n :*load-fn* (or (:load opts) *load-fn*),\n :*eval-fn* (or (:eval opts) *eval-fn*)}\n source\n name\n opts\n cb)))\n"} {:sym js-eval, :meta {:doc "A default JavaScript evaluation function.", :arglists ([{:keys [source], :as resource}])}, :source "(defn\n js-eval\n \"A default JavaScript evaluation function.\"\n [{:keys [source], :as resource}]\n (js/eval source))\n"} {:sym load-source-map!, :meta {:doc nil, :arglists ([state ns sm-json])}, :source "(defn\n load-source-map!\n [state ns sm-json]\n (let\n [sm (sm/decode (.parse js/JSON sm-json))]\n (swap! state assoc-in [:source-maps ns] sm)))\n"} {:sym analyze-str, :meta {:doc "Analyze ClojureScript source. The compiler state will be populated with\n the results of analyzes. The parameters:\n\n state (atom)\n the compiler state\n\n source (string)\n the ClojureScript source\n\n name (symbol or string)\n optional, the name of the source\n\n opts (map)\n compilation options.\n\n :eval - eval function to invoke, see *eval-fn*\n :load - library resolution function, see *load-fn*\n :source-map - set to true to generate inline source map information\n :def-emits-var - sets whether def (and derived) forms return either a Var\n (if set to true) or the def init value (if false).\n Defaults to false.\n :checked-arrays - if :warn or :error, checks inferred types and values passed\n to aget/aset. Logs for incorrect values if :warn, throws if\n :error. Defaults to false.\n :static-fns - employ static dispatch to specific function arities in\n emitted JavaScript, as opposed to making use of the\n `call` construct. Defaults to false.\n :fn-invoke-direct - if `true`, does not generate `.call(null...)` calls for\n unknown functions, but instead direct invokes via\n `f(a0,a1...)`. Defaults to `false`.\n :target - use `:nodejs` if targeting Node.js. Takes no other options\n at the moment.\n :ns - optional, the namespace in which to evaluate the source.\n :verbose - optional, emit details from compiler activity. Defaults to\n false.\n :context - optional, sets the context for the source. Possible values\n are `:expr`, `:statement` and `:return`. Defaults to\n `:expr`.\n\n cb (function)\n callback, will be invoked with a map. If successful the map will contain\n a key :value, the actual value is not meaningful. If unsuccessful the\n map will contain a key :error with an ex-info instance describing the cause\n of failure.", :arglists [[state source cb] [state source name cb] [state source name opts cb]]}, :source "(defn\n analyze-str\n \"Analyze ClojureScript source. The compiler state will be populated with\\n the results of analyzes. The parameters:\\n\\n state (atom)\\n the compiler state\\n\\n source (string)\\n the ClojureScript source\\n\\n name (symbol or string)\\n optional, the name of the source\\n\\n opts (map)\\n compilation options.\\n\\n :eval - eval function to invoke, see *eval-fn*\\n :load - library resolution function, see *load-fn*\\n :source-map - set to true to generate inline source map information\\n :def-emits-var - sets whether def (and derived) forms return either a Var\\n (if set to true) or the def init value (if false).\\n Defaults to false.\\n :checked-arrays - if :warn or :error, checks inferred types and values passed\\n to aget/aset. Logs for incorrect values if :warn, throws if\\n :error. Defaults to false.\\n :static-fns - employ static dispatch to specific function arities in\\n emitted JavaScript, as opposed to making use of the\\n `call` construct. Defaults to false.\\n :fn-invoke-direct - if `true`, does not generate `.call(null...)` calls for\\n unknown functions, but instead direct invokes via\\n `f(a0,a1...)`. Defaults to `false`.\\n :target - use `:nodejs` if targeting Node.js. Takes no other options\\n at the moment.\\n :ns - optional, the namespace in which to evaluate the source.\\n :verbose - optional, emit details from compiler activity. Defaults to\\n false.\\n :context - optional, sets the context for the source. Possible values\\n are `:expr`, `:statement` and `:return`. Defaults to\\n `:expr`.\\n\\n cb (function)\\n callback, will be invoked with a map. If successful the map will contain\\n a key :value, the actual value is not meaningful. If unsuccessful the\\n map will contain a key :error with an ex-info instance describing the cause\\n of failure.\"\n ([state source cb] (analyze-str state source nil cb))\n ([state source name cb] (analyze-str state source name nil cb))\n ([state source name opts cb]\n {:pre\n [(atom? state)\n (string? source)\n (valid-name? name)\n (valid-opts? opts)\n (fn? cb)]}\n (analyze-str*\n {:*compiler* state,\n :*data-readers* tags/*cljs-data-readers*,\n :*passes* (or (:passes opts) ana/*passes*),\n :*analyze-deps* (:analyze-deps opts true),\n :*cljs-dep-set* ana/*cljs-dep-set*,\n :*load-macros* (:load-macros opts true),\n :*load-fn* (or (:load opts) *load-fn*),\n :*eval-fn* (or (:eval opts) *eval-fn*)}\n source\n name\n opts\n cb)))\n"} {:sym *eval-fn*, :meta {:doc "Each runtime environment provides various ways to eval JavaScript\n source. Whatever function *eval-fn* is bound to will be passed a map\n containing the following keys:\n\n :source - the source of the library (string)\n :name - used to unique identify the script (symbol)\n :cache - if the source was originally ClojureScript, will be given the\n analysis cache.\n\n The result of evaluation should be the return value."}, :source "(defonce *eval-fn* (fn [m] (throw (js/Error. \"No *eval-fn* set\"))))\n"}), rum.core ({:sym state, :meta {:doc "Given React component, returns Rum state associated with it", :arglists ([comp])}, :source "(defn\n state\n \"Given React component, returns Rum state associated with it\"\n [comp]\n (aget (.-state comp) \":rum/state\"))\n"} {:sym build-defcs, :meta {:doc nil, :arglists ([render-body mixins display-name])}, :source "(defn\n build-defcs\n [render-body mixins display-name]\n (let\n [render\n (fn [state] [(apply render-body state (:rum/args state)) state])]\n (build-ctor render mixins display-name)))\n"} {:sym build-defcc, :meta {:doc nil, :arglists ([render-body mixins display-name])}, :source "(defn\n build-defcc\n [render-body mixins display-name]\n (let\n [render\n (fn\n [state]\n [(apply render-body (:rum/react-component state) (:rum/args state))\n state])]\n (build-ctor render mixins display-name)))\n"} {:sym request-render, :meta {:doc "Schedules react component to be rendered on next animation frame", :arglists ([component])}, :source "(defn\n request-render\n \"Schedules react component to be rendered on next animation frame\"\n [component]\n (when (empty? @render-queue) (schedule render))\n (vswap! render-queue conj component))\n"} {:sym mount, :meta {:doc "Add component to the DOM tree. Idempotent. Subsequent mounts will just update component", :arglists ([component node])}, :source "(defn\n mount\n \"Add component to the DOM tree. Idempotent. Subsequent mounts will just update component\"\n [component node]\n (js/ReactDOM.render component node)\n nil)\n"} {:sym unmount, :meta {:doc "Removes component from the DOM tree", :arglists ([node])}, :source "(defn\n unmount\n \"Removes component from the DOM tree\"\n [node]\n (js/ReactDOM.unmountComponentAtNode node))\n"}), cljs.core ({:sym sort-by, :meta {:doc "Returns a sorted sequence of the items in coll, where the sort\n order is determined by comparing (keyfn item). Comp can be\n boolean-valued comparison funcion, or a -/0/+ valued comparator.\n Comp defaults to compare.", :arglists [[keyfn coll] [keyfn comp coll]]}, :source "(defn\n sort-by\n \"Returns a sorted sequence of the items in coll, where the sort\\n order is determined by comparing (keyfn item). Comp can be\\n boolean-valued comparison funcion, or a -/0/+ valued comparator.\\n Comp defaults to compare.\"\n ([keyfn coll] (sort-by keyfn compare coll))\n ([keyfn comp coll]\n (sort (fn [x y] ((fn->comparator comp) (keyfn x) (keyfn y))) coll)))\n", :examples [{:doc "Sort using a specific keyword", :body (sort-by :year < [{:name "Lisp", :year 1959} {:name "Fortran", :year 1957} {:name "Smalltalk", :year 1972}]), :body-str "(sort-by\n :year\n <\n [{:name \"Lisp\", :year 1959}\n {:name \"Fortran\", :year 1957}\n {:name \"Smalltalk\", :year 1972}])\n", :id "cljs.core/sort-by/0"} {:doc "Sort numbers lexicographically", :body (sort-by str [5 18 83 23 40]), :body-str "(sort-by str [5 18 83 23 40])\n", :id "cljs.core/sort-by/1"}]} {:sym ITransientAssociative, :meta {:doc "Protocol for adding associativity to transient collections."}, :methods (-assoc!)} {:sym chunk-first, :meta {:doc nil, :arglists ([s])}, :source "(defn chunk-first [s] (-chunked-first s))\n"} {:sym m3-hash-int, :meta {:doc nil, :arglists ([in])}, :source "(defn\n m3-hash-int\n [in]\n (if\n (zero? in)\n in\n (let [k1 (m3-mix-K1 in) h1 (m3-mix-H1 m3-seed k1)] (m3-fmix h1 4))))\n"} {:sym pr-str*, :meta {:doc "Support so that collections can implement toString without\n loading all the printing machinery.", :arglists ([obj])}, :source "(defn\n pr-str*\n \"Support so that collections can implement toString without\\n loading all the printing machinery.\"\n [obj]\n (let\n [sb (StringBuffer.) writer (StringBufferWriter. sb)]\n (-pr-writer obj writer (pr-opts))\n (-flush writer)\n (str sb)))\n"} {:sym tree-seq, :meta {:doc "Returns a lazy sequence of the nodes in a tree, via a depth-first walk.\n branch? must be a fn of one arg that returns true if passed a node\n that can have children (but may not). children must be a fn of one\n arg that returns a sequence of the children. Will only be called on\n nodes for which branch? returns true. Root is the root node of the\n tree.", :arglists ([branch? children root])}, :source "(defn\n tree-seq\n \"Returns a lazy sequence of the nodes in a tree, via a depth-first walk.\\n branch? must be a fn of one arg that returns true if passed a node\\n that can have children (but may not). children must be a fn of one\\n arg that returns a sequence of the children. Will only be called on\\n nodes for which branch? returns true. Root is the root node of the\\n tree.\"\n [branch? children root]\n (let\n [walk\n (fn\n walk\n [node]\n (lazy-seq\n (cons node (when (branch? node) (mapcat walk (children node))))))]\n (walk root)))\n"} {:sym unchecked-remainder-int, :meta {:doc nil, :arglists ([x n])}, :source "(defn\n unchecked-remainder-int\n [x n]\n (cljs.core/unchecked-remainder-int x n))\n"} {:sym seq, :meta {:doc "Returns a seq on the collection. If the collection is\n empty, returns nil. (seq nil) returns nil. seq also works on\n Strings.", :arglists ([coll])}, :source "(defn\n seq\n \"Returns a seq on the collection. If the collection is\\n empty, returns nil. (seq nil) returns nil. seq also works on\\n Strings.\"\n [coll]\n (when-not\n (nil? coll)\n (cond\n (implements? ISeqable coll)\n (-seq coll)\n (array? coll)\n (when-not (zero? (alength coll)) (IndexedSeq. coll 0 nil))\n (string? coll)\n (when-not (zero? (alength coll)) (IndexedSeq. coll 0 nil))\n (native-satisfies? ISeqable coll)\n (-seq coll)\n :else\n (throw (js/Error. (str coll \" is not ISeqable\"))))))\n"} {:sym reduce, :meta {:doc "f should be a function of 2 arguments. If val is not supplied,\n returns the result of applying f to the first 2 items in coll, then\n applying f to that result and the 3rd item, etc. If coll contains no\n items, f must accept no arguments as well, and reduce returns the\n result of calling f with no arguments. If coll has only 1 item, it\n is returned and f is not called. If val is supplied, returns the\n result of applying f to val and the first item in coll, then\n applying f to that result and the 2nd item, etc. If coll contains no\n items, returns val and f is not called.", :arglists [[f coll] [f val coll]]}, :source "(defn\n reduce\n \"f should be a function of 2 arguments. If val is not supplied,\\n returns the result of applying f to the first 2 items in coll, then\\n applying f to that result and the 3rd item, etc. If coll contains no\\n items, f must accept no arguments as well, and reduce returns the\\n result of calling f with no arguments. If coll has only 1 item, it\\n is returned and f is not called. If val is supplied, returns the\\n result of applying f to val and the first item in coll, then\\n applying f to that result and the 2nd item, etc. If coll contains no\\n items, returns val and f is not called.\"\n ([f coll]\n (cond\n (implements? IReduce coll)\n (-reduce coll f)\n (array? coll)\n (array-reduce coll f)\n (string? coll)\n (array-reduce coll f)\n (native-satisfies? IReduce coll)\n (-reduce coll f)\n (iterable? coll)\n (iter-reduce coll f)\n :else\n (seq-reduce f coll)))\n ([f val coll]\n (cond\n (implements? IReduce coll)\n (-reduce coll f val)\n (array? coll)\n (array-reduce coll f val)\n (string? coll)\n (array-reduce coll f val)\n (native-satisfies? IReduce coll)\n (-reduce coll f val)\n (iterable? coll)\n (iter-reduce coll f val)\n :else\n (seq-reduce f val coll))))\n"} {:sym contains?, :meta {:doc "Returns true if key is present in the given collection, otherwise\n returns false. Note that for numerically indexed collections like\n vectors and arrays, this tests if the numeric key is within the\n range of indexes. 'contains?' operates constant or logarithmic time;\n it will not perform a linear search for a value. See also 'some'.", :arglists ([coll v])}, :source "(defn\n contains?\n \"Returns true if key is present in the given collection, otherwise\\n returns false. Note that for numerically indexed collections like\\n vectors and arrays, this tests if the numeric key is within the\\n range of indexes. 'contains?' operates constant or logarithmic time;\\n it will not perform a linear search for a value. See also 'some'.\"\n [coll v]\n (if\n (identical? (get coll v lookup-sentinel) lookup-sentinel)\n false\n true))\n"} {:sym every?, :meta {:doc "Returns true if (pred x) is logical true for every x in coll, else\n false.", :arglists ([pred coll])}, :source "(defn\n every?\n \"Returns true if (pred x) is logical true for every x in coll, else\\n false.\"\n [pred coll]\n (cond\n (nil? (seq coll))\n true\n (pred (first coll))\n (recur pred (next coll))\n :else\n false))\n"} {:sym keep-indexed, :meta {:doc "Returns a lazy sequence of the non-nil results of (f index item). Note,\n this means false return values will be included. f must be free of\n side-effects. Returns a stateful transducer when no collection is\n provided.", :arglists [[f] [f coll]]}, :source "(defn\n keep-indexed\n \"Returns a lazy sequence of the non-nil results of (f index item). Note,\\n this means false return values will be included. f must be free of\\n side-effects. Returns a stateful transducer when no collection is\\n provided.\"\n ([f]\n (fn\n [rf]\n (let\n [ia (volatile! -1)]\n (fn\n ([] (rf))\n ([result] (rf result))\n ([result input]\n (let\n [i (vswap! ia inc) v (f i input)]\n (if (nil? v) result (rf result v))))))))\n ([f coll]\n (letfn\n [(keepi\n [idx coll]\n (lazy-seq\n (when-let\n [s (seq coll)]\n (if\n (chunked-seq? s)\n (let\n [c (chunk-first s) size (count c) b (chunk-buffer size)]\n (dotimes\n [i size]\n (let\n [x (f (+ idx i) (-nth c i))]\n (when-not (nil? x) (chunk-append b x))))\n (chunk-cons (chunk b) (keepi (+ idx size) (chunk-rest s))))\n (let\n [x (f idx (first s))]\n (if\n (nil? x)\n (keepi (inc idx) (rest s))\n (cons x (keepi (inc idx) (rest s)))))))))]\n (keepi 0 coll))))\n"} {:sym subs, :meta {:doc "Returns the substring of s beginning at start inclusive, and ending\n at end (defaults to length of string), exclusive.", :arglists [[s start] [s start end]]}, :source "(defn\n subs\n \"Returns the substring of s beginning at start inclusive, and ending\\n at end (defaults to length of string), exclusive.\"\n ([s start] (.substring s start))\n ([s start end] (.substring s start end)))\n"} {:sym IFind, :meta {:doc "Protocol for implementing entry finding in collections."}, :methods (-find)} {:sym MODULE_URIS, :meta {}, :source "(def MODULE_URIS nil)\n"} {:sym take-last, :meta {:doc "Returns a seq of the last n items in coll. Depending on the type\n of coll may be no better than linear time. For vectors, see also subvec.", :arglists ([n coll])}, :source "(defn\n take-last\n \"Returns a seq of the last n items in coll. Depending on the type\\n of coll may be no better than linear time. For vectors, see also subvec.\"\n [n coll]\n (loop\n [s (seq coll) lead (seq (drop n coll))]\n (if lead (recur (next s) (next lead)) s)))\n"} {:sym bit-set, :meta {:doc "Set bit at index n", :arglists ([x n])}, :source "(defn bit-set \"Set bit at index n\" [x n] (cljs.core/bit-set x n))\n"} {:sym string-hash-cache-count, :meta {}, :source "(def string-hash-cache-count 0)\n"} {:sym qualified-keyword?, :meta {:doc "Return true if x is a keyword with a namespace", :arglists ([x])}, :source "(defn\n qualified-keyword?\n \"Return true if x is a keyword with a namespace\"\n [x]\n (boolean (and (keyword? x) (namespace x) true)))\n"} {:sym -with-meta, :meta {:doc "Returns a new object with value of o and metadata meta added to it.", :arglists ([o meta])}, :protocol IWithMeta} {:sym unchecked-subtract-int, :meta {:doc "If no ys are supplied, returns the negation of x, else subtracts\n the ys from x and returns the result.", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n unchecked-subtract-int\n \"If no ys are supplied, returns the negation of x, else subtracts\\n the ys from x and returns the result.\"\n ([x] (cljs.core/unchecked-subtract-int x))\n ([x y] (cljs.core/unchecked-subtract-int x y))\n ([x y & more]\n (reduce\n unchecked-subtract-int\n (cljs.core/unchecked-subtract-int x y)\n more)))\n"} {:sym -iterator, :meta {:doc "Returns an iterator for coll.", :arglists ([coll])}, :protocol IIterable} {:sym *print-namespace-maps*, :meta {:doc "*print-namespace-maps* controls whether the printer will print\n namespace map literal syntax.\n\n Defaults to false, but the REPL binds it to true."}, :source "(def *print-namespace-maps* false)\n"} {:sym first, :meta {:doc "Returns the first item in the collection. Calls seq on its\n argument. If coll is nil, returns nil.", :arglists ([coll])}, :source "(defn\n first\n \"Returns the first item in the collection. Calls seq on its\\n argument. If coll is nil, returns nil.\"\n [coll]\n (when-not\n (nil? coll)\n (if\n (implements? ISeq coll)\n (-first coll)\n (let [s (seq coll)] (when-not (nil? s) (-first s))))))\n"} {:sym native-satisfies?, :meta {:doc "Internal - do not use!", :arglists ([p x])}, :source "(defn\n native-satisfies?\n \"Internal - do not use!\"\n [p x]\n (let\n [x (if (nil? x) nil x)]\n (cond\n (unchecked-get p (goog/typeOf x))\n true\n (unchecked-get p \"_\")\n true\n :else\n false)))\n"} {:sym seq?, :meta {:doc "Return true if s satisfies ISeq", :arglists ([s])}, :source "(defn\n seq?\n \"Return true if s satisfies ISeq\"\n [s]\n (if (nil? s) false (satisfies? ISeq s)))\n"} {:sym -sorted-seq-from, :meta {:doc "Returns a sorted seq from coll in either ascending or descending order.\n If ascending is true, the result should contain all items which are > or >=\n than k. If ascending is false, the result should contain all items which\n are < or <= than k, e.g.\n (-sorted-seq-from (sorted-set 1 2 3 4 5) 3 true) => (3 4 5)\n (-sorted-seq-from (sorted-set 1 2 3 4 5) 3 false) => (3 2 1)", :arglists ([coll k ascending?])}, :protocol ISorted} {:sym inst-ms, :meta {:doc "Return the number of milliseconds since January 1, 1970, 00:00:00 GMT", :arglists ([inst])}, :source "(defn\n inst-ms\n \"Return the number of milliseconds since January 1, 1970, 00:00:00 GMT\"\n [inst]\n (inst-ms* inst))\n"} {:sym iterate, :meta {:doc "Returns a lazy sequence of x, (f x), (f (f x)) etc. f must be free of side-effects", :arglists ([f x])}, :source "(defn\n iterate\n \"Returns a lazy sequence of x, (f x), (f (f x)) etc. f must be free of side-effects\"\n {:added \"1.0\"}\n [f x]\n (cons x (lazy-seq (iterate f (f x)))))\n"} {:sym -empty, :meta {:doc "Returns an empty collection of the same category as coll. Used\n by cljs.core/empty.", :arglists ([coll])}, :protocol IEmptyableCollection} {:sym ILookup, :meta {:doc "Protocol for looking up a value in a data structure."}, :methods (-lookup)} {:sym -chunked-rest, :meta {:doc "Return a new collection of coll with the first chunk removed.", :arglists ([coll])}, :protocol IChunkedSeq} {:sym fn?, :meta {:doc "Return true if f is a JavaScript function or satisfies the Fn protocol.", :arglists ([f])}, :source "(defn\n fn?\n \"Return true if f is a JavaScript function or satisfies the Fn protocol.\"\n [f]\n (or (goog/isFunction f) (satisfies? Fn f)))\n"} {:sym -assoc, :meta {:doc "Returns a new collection of coll with a mapping from key k to\n value v added to it.", :arglists ([coll k v])}, :protocol IAssociative} {:sym keyword-identical?, :meta {:doc "Efficient test to determine that two keywords are identical.", :arglists ([x y])}, :source "(defn\n keyword-identical?\n \"Efficient test to determine that two keywords are identical.\"\n [x y]\n (if\n (identical? x y)\n true\n (if\n (and (keyword? x) (keyword? y))\n (identical? (.-fqn x) (.-fqn y))\n false)))\n"} {:sym *print-err-fn*, :meta {:doc "Each runtime environment provides a different way to print error output.\n Whatever function *print-err-fn* is bound to will be passed any\n Strings which should be printed."}, :source "(defonce *print-err-fn* nil)\n"} {:sym dissoc, :meta {:doc "dissoc[iate]. Returns a new map of the same (hashed/sorted) type,\n that does not contain a mapping for key(s).", :arglists [[coll] [coll k] [coll k & ks]]}, :source "(defn\n dissoc\n \"dissoc[iate]. Returns a new map of the same (hashed/sorted) type,\\n that does not contain a mapping for key(s).\"\n ([coll] coll)\n ([coll k] (when-not (nil? coll) (-dissoc coll k)))\n ([coll k & ks]\n (when-not\n (nil? coll)\n (let\n [ret (dissoc coll k)]\n (if ks (recur ret (first ks) (next ks)) ret)))))\n"} {:sym atom, :meta {:doc "Creates and returns an Atom with an initial value of x and zero or\n more options (in any order):\n\n :meta metadata-map\n\n :validator validate-fn\n\n If metadata-map is supplied, it will be come the metadata on the\n atom. validate-fn must be nil or a side-effect-free fn of one\n argument, which will be passed the intended new state on any state\n change. If the new state is unacceptable, the validate-fn should\n return false or throw an Error. If either of these error conditions\n occur, then the value of the atom will not change.", :arglists [[x] [x & {:keys [meta validator]}]]}, :source "(defn\n atom\n \"Creates and returns an Atom with an initial value of x and zero or\\n more options (in any order):\\n\\n :meta metadata-map\\n\\n :validator validate-fn\\n\\n If metadata-map is supplied, it will be come the metadata on the\\n atom. validate-fn must be nil or a side-effect-free fn of one\\n argument, which will be passed the intended new state on any state\\n change. If the new state is unacceptable, the validate-fn should\\n return false or throw an Error. If either of these error conditions\\n occur, then the value of the atom will not change.\"\n ([x] (Atom. x nil nil nil))\n ([x & {:keys [meta validator]}] (Atom. x meta validator nil)))\n"} {:sym bit-shift-right, :meta {:doc "Bitwise shift right", :arglists ([x n])}, :source "(defn\n bit-shift-right\n \"Bitwise shift right\"\n [x n]\n (cljs.core/bit-shift-right x n))\n"} {:sym *clojurescript-version*, :meta {}, :source "(def *clojurescript-version* \"1.9.946\")\n"} {:sym -first, :meta {:doc "Returns the first item in the collection coll. Used by cljs.core/first.", :arglists ([coll])}, :protocol ISeq} {:sym peek, :meta {:doc "For a list or queue, same as first, for a vector, same as, but much\n more efficient than, last. If the collection is empty, returns nil.", :arglists ([coll])}, :source "(defn\n peek\n \"For a list or queue, same as first, for a vector, same as, but much\\n more efficient than, last. If the collection is empty, returns nil.\"\n [coll]\n (when-not (nil? coll) (-peek coll)))\n"} {:sym IKVReduce, :meta {:doc "Protocol for associative types that can reduce themselves\n via a function of key and val. Called by cljs.core/reduce-kv."}, :methods (-kv-reduce)} {:sym aget, :meta {:doc "Returns the value at the index/indices. Works on JavaScript arrays.", :arglists [[array idx] [array idx & idxs]]}, :source "(defn\n aget\n \"Returns the value at the index/indices. Works on JavaScript arrays.\"\n ([array idx] (cljs.core/aget array idx))\n ([array idx & idxs] (apply aget (aget array idx) idxs)))\n"} {:sym -write, :meta {:doc "Writes s with writer and returns the result.", :arglists ([writer s])}, :protocol IWriter} {:sym iter, :meta {:doc nil, :arglists ([coll])}, :source "(defn\n iter\n [coll]\n (cond\n (iterable? coll)\n (-iterator coll)\n (nil? coll)\n (nil-iter)\n (string? coll)\n (string-iter coll)\n (array? coll)\n (array-iter coll)\n (seqable? coll)\n (seq-iter coll)\n :else\n (throw (js/Error. (str \"Cannot create iterator from \" coll)))))\n"} {:sym last, :meta {:doc "Return the last item in coll, in linear time", :arglists ([s])}, :source "(defn\n last\n \"Return the last item in coll, in linear time\"\n [s]\n (let [sn (next s)] (if-not (nil? sn) (recur sn) (first s))))\n"} {:sym namespace, :meta {:doc "Returns the namespace String of a symbol or keyword, or nil if not present.", :arglists ([x])}, :source "(defn\n namespace\n \"Returns the namespace String of a symbol or keyword, or nil if not present.\"\n [x]\n (if\n (implements? INamed x)\n (-namespace x)\n (throw (js/Error. (str \"Doesn't support namespace: \" x)))))\n"} {:sym -conj, :meta {:doc "Returns a new collection of coll with o added to it. The new item\n should be added to the most efficient place, e.g.\n (conj [1 2 3 4] 5) => [1 2 3 4 5]\n (conj '(2 3 4 5) 1) => '(1 2 3 4 5)", :arglists ([coll o])}, :protocol ICollection} {:sym =, :meta {:doc "Equality. Returns true if x equals y, false if not. Compares\n numbers and collections in a type-independent manner. Clojure's immutable data\n structures define -equiv (and thus =) as a value, not an identity,\n comparison.", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n =\n \"Equality. Returns true if x equals y, false if not. Compares\\n numbers and collections in a type-independent manner. Clojure's immutable data\\n structures define -equiv (and thus =) as a value, not an identity,\\n comparison.\"\n ([x] true)\n ([x y] (if (nil? x) (nil? y) (or (identical? x y) (-equiv x y))))\n ([x y & more]\n (if\n (= x y)\n (if\n (next more)\n (recur y (first more) (next more))\n (= y (first more)))\n false)))\n"} {:sym ITransientMap, :meta {:doc "Protocol for adding mapping functionality to transient collections."}, :methods (-dissoc!)} {:sym take, :meta {:doc "Returns a lazy sequence of the first n items in coll, or all items if\n there are fewer than n. Returns a stateful transducer when\n no collection is provided.", :arglists [[n] [n coll]]}, :source "(defn\n take\n \"Returns a lazy sequence of the first n items in coll, or all items if\\n there are fewer than n. Returns a stateful transducer when\\n no collection is provided.\"\n ([n]\n {:pre [(number? n)]}\n (fn\n [rf]\n (let\n [na (volatile! n)]\n (fn\n ([] (rf))\n ([result] (rf result))\n ([result input]\n (let\n [n\n @na\n nn\n (vswap! na dec)\n result\n (if (pos? n) (rf result input) result)]\n (if (not (pos? nn)) (ensure-reduced result) result)))))))\n ([n coll]\n {:pre [(number? n)]}\n (lazy-seq\n (when\n (pos? n)\n (when-let\n [s (seq coll)]\n (cons (first s) (take (dec n) (rest s))))))))\n"} {:sym vector?, :meta {:doc "Return true if x satisfies IVector", :arglists ([x])}, :source "(defn\n vector?\n \"Return true if x satisfies IVector\"\n [x]\n (satisfies? IVector x))\n"} {:sym boolean, :meta {:doc "Coerce to boolean", :arglists ([x])}, :source "(defn\n boolean\n \"Coerce to boolean\"\n [x]\n (cond (nil? x) false (false? x) false :else true))\n"} {:sym IChunk, :meta {:doc "Protocol for accessing the items of a chunk."}, :methods (-drop-first)} {:sym bit-shift-left, :meta {:doc "Bitwise shift left", :arglists ([x n])}, :source "(defn\n bit-shift-left\n \"Bitwise shift left\"\n [x n]\n (cljs.core/bit-shift-left x n))\n"} {:sym any?, :meta {:doc "Returns true if given any argument.", :arglists ([x])}, :source "(defn any? \"Returns true if given any argument.\" [x] true)\n"} {:sym aclone, :meta {:doc "Returns a javascript array, cloned from the passed in array", :arglists ([arr])}, :source "(defn\n aclone\n \"Returns a javascript array, cloned from the passed in array\"\n [arr]\n (let\n [len (alength arr) new-arr (make-array len)]\n (dotimes [i len] (aset new-arr i (aget arr i)))\n new-arr))\n"} {:sym vreset!, :meta {:doc "Sets the value of volatile to newval without regard for the\n current value. Returns newval.", :arglists ([vol newval])}, :source "(defn\n vreset!\n \"Sets the value of volatile to newval without regard for the\\n current value. Returns newval.\"\n [vol newval]\n (-vreset! vol newval))\n"} {:sym chunk, :meta {:doc nil, :arglists ([b])}, :source "(defn chunk [b] (.chunk b))\n"} {:sym dec, :meta {:doc "Returns a number one less than num.", :arglists ([x])}, :source "(defn dec \"Returns a number one less than num.\" [x] (- x 1))\n"} {:sym APersistentVector, :meta {:doc "Marker protocol"}, :methods ()} {:sym map, :meta {:doc "Returns a lazy sequence consisting of the result of applying f to\n the set of first items of each coll, followed by applying f to the\n set of second items in each coll, until any one of the colls is\n exhausted. Any remaining items in other colls are ignored. Function\n f should accept number-of-colls arguments. Returns a transducer when\n no collection is provided.", :arglists [[f] [f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls]]}, :source "(defn\n map\n \"Returns a lazy sequence consisting of the result of applying f to\\n the set of first items of each coll, followed by applying f to the\\n set of second items in each coll, until any one of the colls is\\n exhausted. Any remaining items in other colls are ignored. Function\\n f should accept number-of-colls arguments. Returns a transducer when\\n no collection is provided.\"\n ([f]\n (fn\n [rf]\n (fn\n ([] (rf))\n ([result] (rf result))\n ([result input] (rf result (f input)))\n ([result input & inputs] (rf result (apply f input inputs))))))\n ([f coll]\n (lazy-seq\n (when-let\n [s (seq coll)]\n (if\n (chunked-seq? s)\n (let\n [c (chunk-first s) size (count c) b (chunk-buffer size)]\n (dotimes [i size] (chunk-append b (f (-nth c i))))\n (chunk-cons (chunk b) (map f (chunk-rest s))))\n (cons (f (first s)) (map f (rest s)))))))\n ([f c1 c2]\n (lazy-seq\n (let\n [s1 (seq c1) s2 (seq c2)]\n (when\n (and s1 s2)\n (cons (f (first s1) (first s2)) (map f (rest s1) (rest s2)))))))\n ([f c1 c2 c3]\n (lazy-seq\n (let\n [s1 (seq c1) s2 (seq c2) s3 (seq c3)]\n (when\n (and s1 s2 s3)\n (cons\n (f (first s1) (first s2) (first s3))\n (map f (rest s1) (rest s2) (rest s3)))))))\n ([f c1 c2 c3 & colls]\n (let\n [step\n (fn\n step\n [cs]\n (lazy-seq\n (let\n [ss (map seq cs)]\n (when\n (every? identity ss)\n (cons (map first ss) (step (map rest ss)))))))]\n (map\n (fn* [p1__18661#] (apply f p1__18661#))\n (step (conj colls c3 c2 c1))))))\n"} {:sym <, :meta {:doc "Returns non-nil if nums are in monotonically increasing order,\n otherwise false.", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n <\n \"Returns non-nil if nums are in monotonically increasing order,\\n otherwise false.\"\n ([x] true)\n ([x y] (cljs.core/< x y))\n ([x y & more]\n (if\n (cljs.core/< x y)\n (if\n (next more)\n (recur y (first more) (next more))\n (cljs.core/< y (first more)))\n false)))\n"} {:sym rest, :meta {:doc "Returns a possibly empty seq of the items after the first. Calls seq on its\n argument.", :arglists ([coll])}, :source "(defn\n rest\n \"Returns a possibly empty seq of the items after the first. Calls seq on its\\n argument.\"\n [coll]\n (if-not\n (nil? coll)\n (if\n (implements? ISeq coll)\n (-rest coll)\n (let [s (seq coll)] (if s (-rest s) ())))\n ()))\n"} {:sym -drop-first, :meta {:doc "Return a new chunk of coll with the first item removed.", :arglists ([coll])}, :protocol IChunk} {:sym boolean?, :meta {:doc "Return true if x is a Boolean", :arglists ([x])}, :source "(defn\n boolean?\n \"Return true if x is a Boolean\"\n [x]\n (or (cljs.core/true? x) (cljs.core/false? x)))\n"} {:sym -clone, :meta {:doc "Creates a clone of value.", :arglists ([value])}, :protocol ICloneable} {:sym char?, :meta {:doc "Returns true if x is a JavaScript string of length one.", :arglists ([x])}, :source "(defn\n char?\n \"Returns true if x is a JavaScript string of length one.\"\n [x]\n (and (string? x) (== 1 (.-length x))))\n"} {:sym -reduce, :meta {:doc "f should be a function of 2 arguments. If start is not supplied,\n returns the result of applying f to the first 2 items in coll, then\n applying f to that result and the 3rd item, etc.", :arglists ([coll f] [coll f start])}, :protocol IReduce} {:sym -count, :meta {:doc "Calculates the count of coll in constant time. Used by cljs.core/count.", :arglists ([coll])}, :protocol ICounted} {:sym swap-vals!, :meta {:doc "Atomically swaps the value of atom to be:\n (apply f current-value-of-atom args). Note that f may be called\n multiple times, and thus should be free of side effects.\n Returns [old new], the value of the atom before and after the swap.", :arglists [[a f] [a f x] [a f x y] [a f x y & more]]}, :source "(defn\n swap-vals!\n \"Atomically swaps the value of atom to be:\\n (apply f current-value-of-atom args). Note that f may be called\\n multiple times, and thus should be free of side effects.\\n Returns [old new], the value of the atom before and after the swap.\"\n {:added \"1.9\"}\n ([a f] (reset-vals! a (f (.-state a))))\n ([a f x] (reset-vals! a (f (.-state a) x)))\n ([a f x y] (reset-vals! a (f (.-state a) x y)))\n ([a f x y & more] (reset-vals! a (apply f (.-state a) x y more))))\n"} {:sym keep, :meta {:doc "Returns a lazy sequence of the non-nil results of (f item). Note,\n this means false return values will be included. f must be free of\n side-effects. Returns a transducer when no collection is provided.", :arglists [[f] [f coll]]}, :source "(defn\n keep\n \"Returns a lazy sequence of the non-nil results of (f item). Note,\\n this means false return values will be included. f must be free of\\n side-effects. Returns a transducer when no collection is provided.\"\n ([f]\n (fn\n [rf]\n (fn\n ([] (rf))\n ([result] (rf result))\n ([result input]\n (let [v (f input)] (if (nil? v) result (rf result v)))))))\n ([f coll]\n (lazy-seq\n (when-let\n [s (seq coll)]\n (if\n (chunked-seq? s)\n (let\n [c (chunk-first s) size (count c) b (chunk-buffer size)]\n (dotimes\n [i size]\n (let [x (f (-nth c i))] (when-not (nil? x) (chunk-append b x))))\n (chunk-cons (chunk b) (keep f (chunk-rest s))))\n (let\n [x (f (first s))]\n (if (nil? x) (keep f (rest s)) (cons x (keep f (rest s))))))))))\n"} {:sym char, :meta {:doc "Coerce to char", :arglists ([x])}, :source "(defn\n char\n \"Coerce to char\"\n [x]\n (cond\n (number? x)\n (.fromCharCode js/String x)\n (and (string? x) (== (.-length x) 1))\n x\n :else\n (throw (js/Error. \"Argument to char must be a character or number\"))))\n"} {:sym mapcat, :meta {:doc "Returns the result of applying concat to the result of applying map\n to f and colls. Thus function f should return a collection. Returns\n a transducer when no collections are provided", :arglists [[f] [f & colls]]}, :source "(defn\n mapcat\n \"Returns the result of applying concat to the result of applying map\\n to f and colls. Thus function f should return a collection. Returns\\n a transducer when no collections are provided\"\n {:added \"1.0\", :static true}\n ([f] (comp (map f) cat))\n ([f & colls] (apply concat (apply map f colls))))\n"} {:sym unchecked-long, :meta {:doc "Coerce to long by stripping decimal places. Identical to `int'.", :arglists ([x])}, :source "(defn\n unchecked-long\n \"Coerce to long by stripping decimal places. Identical to `int'.\"\n [x]\n (fix x))\n"} {:sym m3-seed, :meta {}, :source "(def m3-seed 0)\n"} {:sym some?, :meta {:doc "Returns true if x is not nil, false otherwise.", :arglists ([x])}, :source "(defn\n some?\n \"Returns true if x is not nil, false otherwise.\"\n [x]\n (not (nil? x)))\n"} {:sym unchecked-negate, :meta {:doc nil, :arglists ([x])}, :source "(defn unchecked-negate [x] (cljs.core/unchecked-negate x))\n"} {:sym symbol-identical?, :meta {:doc "Efficient test to determine that two symbols are identical.", :arglists ([x y])}, :source "(defn\n symbol-identical?\n \"Efficient test to determine that two symbols are identical.\"\n [x y]\n (if\n (identical? x y)\n true\n (if\n (and (symbol? x) (symbol? y))\n (identical? (.-str x) (.-str y))\n false)))\n"} {:sym *command-line-args*, :meta {:doc "A sequence of the supplied command line arguments, or nil if\n none were supplied"}, :source "(def *command-line-args* nil)\n"} {:sym reverse, :meta {:doc "Returns a seq of the items in coll in reverse order. Not lazy.", :arglists ([coll])}, :source "(defn\n reverse\n \"Returns a seq of the items in coll in reverse order. Not lazy.\"\n [coll]\n (if (reversible? coll) (rseq coll) (reduce conj () coll)))\n"} {:sym inst?, :meta {:doc "Return true if x satisfies Inst", :arglists ([x])}, :source "(defn inst? \"Return true if x satisfies Inst\" [x] (satisfies? Inst x))\n"} {:sym bit-count, :meta {:doc "Counts the number of bits set in n", :arglists ([v])}, :source "(defn\n bit-count\n \"Counts the number of bits set in n\"\n [v]\n (let\n [v\n (- v (bit-and (bit-shift-right v 1) 1431655765))\n v\n (+ (bit-and v 858993459) (bit-and (bit-shift-right v 2) 858993459))]\n (bit-shift-right\n (* (bit-and (+ v (bit-shift-right v 4)) 252645135) 16843009)\n 24)))\n"} {:sym sort, :meta {:doc "Returns a sorted sequence of the items in coll. Comp can be\n boolean-valued comparison function, or a -/0/+ valued comparator.\n Comp defaults to compare.", :arglists [[coll] [comp coll]]}, :source "(defn\n sort\n \"Returns a sorted sequence of the items in coll. Comp can be\\n boolean-valued comparison function, or a -/0/+ valued comparator.\\n Comp defaults to compare.\"\n ([coll] (sort compare coll))\n ([comp coll]\n (if\n (seq coll)\n (let\n [a (to-array coll)]\n (garray/stableSort a (fn->comparator comp))\n (seq a))\n ())))\n"} {:sym unchecked-inc-int, :meta {:doc nil, :arglists ([x])}, :source "(defn unchecked-inc-int [x] (cljs.core/unchecked-inc-int x))\n"} {:sym -compare, :meta {:doc "Returns a negative number, zero, or a positive number when x is logically\n 'less than', 'equal to', or 'greater than' y.", :arglists ([x y])}, :protocol IComparable} {:sym map-indexed, :meta {:doc "Returns a lazy sequence consisting of the result of applying f to 0\n and the first item of coll, followed by applying f to 1 and the second\n item in coll, etc, until coll is exhausted. Thus function f should\n accept 2 arguments, index and item. Returns a stateful transducer when\n no collection is provided.", :arglists [[f] [f coll]]}, :source "(defn\n map-indexed\n \"Returns a lazy sequence consisting of the result of applying f to 0\\n and the first item of coll, followed by applying f to 1 and the second\\n item in coll, etc, until coll is exhausted. Thus function f should\\n accept 2 arguments, index and item. Returns a stateful transducer when\\n no collection is provided.\"\n ([f]\n (fn\n [rf]\n (let\n [i (volatile! -1)]\n (fn\n ([] (rf))\n ([result] (rf result))\n ([result input] (rf result (f (vswap! i inc) input)))))))\n ([f coll]\n (letfn\n [(mapi\n [idx coll]\n (lazy-seq\n (when-let\n [s (seq coll)]\n (if\n (chunked-seq? s)\n (let\n [c (chunk-first s) size (count c) b (chunk-buffer size)]\n (dotimes [i size] (chunk-append b (f (+ idx i) (-nth c i))))\n (chunk-cons (chunk b) (mapi (+ idx size) (chunk-rest s))))\n (cons (f idx (first s)) (mapi (inc idx) (rest s)))))))]\n (mapi 0 coll))))\n"} {:sym comp, :meta {:doc "Takes a set of functions and returns a fn that is the composition\n of those fns. The returned fn takes a variable number of args,\n applies the rightmost of fns to the args, the next\n fn (right-to-left) to the result, etc.", :arglists [[] [f] [f g] [f g h] [f1 f2 f3 & fs]]}, :source "(defn\n comp\n \"Takes a set of functions and returns a fn that is the composition\\n of those fns. The returned fn takes a variable number of args,\\n applies the rightmost of fns to the args, the next\\n fn (right-to-left) to the result, etc.\"\n ([] identity)\n ([f] f)\n ([f g]\n (fn\n ([] (f (g)))\n ([x] (f (g x)))\n ([x y] (f (g x y)))\n ([x y z] (f (g x y z)))\n ([x y z & args] (f (apply g x y z args)))))\n ([f g h]\n (fn\n ([] (f (g (h))))\n ([x] (f (g (h x))))\n ([x y] (f (g (h x y))))\n ([x y z] (f (g (h x y z))))\n ([x y z & args] (f (g (apply h x y z args))))))\n ([f1 f2 f3 & fs]\n (let\n [fs (reverse (list* f1 f2 f3 fs))]\n (fn\n [& args]\n (loop\n [ret (apply (first fs) args) fs (next fs)]\n (if fs (recur ((first fs) ret) (next fs)) ret))))))\n"} {:sym array-chunk, :meta {:doc nil, :arglists [[arr] [arr off] [arr off end]]}, :source "(defn\n array-chunk\n ([arr] (ArrayChunk. arr 0 (alength arr)))\n ([arr off] (ArrayChunk. arr off (alength arr)))\n ([arr off end] (ArrayChunk. arr off end)))\n"} {:sym bit-shift-right-zero-fill, :meta {:doc "DEPRECATED: Bitwise shift right with zero fill", :arglists ([x n])}, :source "(defn\n bit-shift-right-zero-fill\n \"DEPRECATED: Bitwise shift right with zero fill\"\n [x n]\n (cljs.core/bit-shift-right-zero-fill x n))\n"} {:sym -as-transient, :meta {:doc "Returns a new, transient version of the collection, in constant time.", :arglists ([coll])}, :protocol IEditableCollection} {:sym simple-symbol?, :meta {:doc "Return true if x is a symbol without a namespace", :arglists ([x])}, :source "(defn\n simple-symbol?\n \"Return true if x is a symbol without a namespace\"\n [x]\n (and (symbol? x) (nil? (namespace x))))\n"} {:sym IIndexed, :meta {:doc "Protocol for collections to provide indexed-based access to their items."}, :methods (-nth)} {:sym disj, :meta {:doc "disj[oin]. Returns a new set of the same (hashed/sorted) type, that\n does not contain key(s).", :arglists [[coll] [coll k] [coll k & ks]]}, :source "(defn\n disj\n \"disj[oin]. Returns a new set of the same (hashed/sorted) type, that\\n does not contain key(s).\"\n ([coll] coll)\n ([coll k] (when-not (nil? coll) (-disjoin coll k)))\n ([coll k & ks]\n (when-not\n (nil? coll)\n (let\n [ret (disj coll k)]\n (if ks (recur ret (first ks) (next ks)) ret)))))\n"} {:sym IPrintWithWriter, :meta {:doc "The old IPrintable protocol's implementation consisted of building a giant\n list of strings to concatenate. This involved lots of concat calls,\n intermediate vectors, and lazy-seqs, and was very slow in some older JS\n engines. IPrintWithWriter implements printing via the IWriter protocol, so it\n be implemented efficiently in terms of e.g. a StringBuffer append."}, :methods (-pr-writer)} {:sym IVector, :meta {:doc "Protocol for adding vector functionality to collections."}, :methods (-assoc-n)} {:sym IIterable, :meta {:doc "Protocol for iterating over a collection."}, :methods (-iterator)} {:sym cons, :meta {:doc "Returns a new seq where x is the first element and coll is the rest.", :arglists ([x coll])}, :source "(defn\n cons\n \"Returns a new seq where x is the first element and coll is the rest.\"\n [x coll]\n (if\n (or (nil? coll) (implements? ISeq coll))\n (Cons. nil x coll nil)\n (Cons. nil x (seq coll) nil)))\n"} {:sym floats, :meta {:doc nil, :arglists ([x])}, :source "(defn floats [x] x)\n"} {:sym pos?, :meta {:doc "Returns true if num is greater than zero, else false", :arglists ([x])}, :source "(defn\n pos?\n \"Returns true if num is greater than zero, else false\"\n [x]\n (cljs.core/pos? x))\n"} {:sym fnil, :meta {:doc "Takes a function f, and returns a function that calls f, replacing\n a nil first argument to f with the supplied value x. Higher arity\n versions can replace arguments in the second and third\n positions (y, z). Note that the function f can take any number of\n arguments, not just the one(s) being nil-patched.", :arglists [[f x] [f x y] [f x y z]]}, :source "(defn\n fnil\n \"Takes a function f, and returns a function that calls f, replacing\\n a nil first argument to f with the supplied value x. Higher arity\\n versions can replace arguments in the second and third\\n positions (y, z). Note that the function f can take any number of\\n arguments, not just the one(s) being nil-patched.\"\n ([f x]\n (fn\n ([a] (f (if (nil? a) x a)))\n ([a b] (f (if (nil? a) x a) b))\n ([a b c] (f (if (nil? a) x a) b c))\n ([a b c & ds] (apply f (if (nil? a) x a) b c ds))))\n ([f x y]\n (fn\n ([a b] (f (if (nil? a) x a) (if (nil? b) y b)))\n ([a b c] (f (if (nil? a) x a) (if (nil? b) y b) c))\n ([a b c & ds] (apply f (if (nil? a) x a) (if (nil? b) y b) c ds))))\n ([f x y z]\n (fn\n ([a b] (f (if (nil? a) x a) (if (nil? b) y b)))\n ([a b c] (f (if (nil? a) x a) (if (nil? b) y b) (if (nil? c) z c)))\n ([a b c & ds]\n (apply\n f\n (if (nil? a) x a)\n (if (nil? b) y b)\n (if (nil? c) z c)\n ds)))))\n"} {:sym merge-with, :examples [{:body (do ["Combine all map values that have the same key"] (merge-with concat {:rubble ["Barney"], :flintstone ["Fred"]} {:rubble ["Betty"], :flintstone ["Wilma"]} {:rubble ["Bam-Bam"], :flintstone ["Pebbles"]})), :body-str "(do\n [\"Combine all map values that have the same key\"]\n (merge-with\n concat\n {:rubble [\"Barney\"], :flintstone [\"Fred\"]}\n {:rubble [\"Betty\"], :flintstone [\"Wilma\"]}\n {:rubble [\"Bam-Bam\"], :flintstone [\"Pebbles\"]}))\n", :id "cljs.core/merge-with/0"}]} {:sym nthrest, :meta {:doc "Returns the nth rest of coll, coll when n is 0.", :arglists ([coll n])}, :source "(defn\n nthrest\n \"Returns the nth rest of coll, coll when n is 0.\"\n [coll n]\n (loop\n [n n xs coll]\n (if (and (pos? n) (seq xs)) (recur (dec n) (rest xs)) xs)))\n"} {:sym *warn-on-infer*, :meta {}, :source "(def *warn-on-infer* false)\n"} {:sym -find, :meta {:doc "Returns the map entry for key, or nil if key not present.", :arglists ([coll k])}, :protocol IFind} {:sym sequential?, :meta {:doc "Returns true if coll satisfies ISequential", :arglists ([x])}, :source "(defn\n sequential?\n \"Returns true if coll satisfies ISequential\"\n [x]\n (satisfies? ISequential x))\n"} {:sym m3-mix-H1, :meta {:doc nil, :arglists ([h1 k1])}, :source "(defn\n m3-mix-H1\n [h1 k1]\n (int\n (->\n (int h1)\n (bit-xor (int k1))\n (int-rotate-left 13)\n (imul 5)\n (+ (int 3864292196)))))\n"} {:sym prim-seq, :meta {:doc "Create seq from a primitive JavaScript Array-like.", :arglists [[prim] [prim i]]}, :source "(defn\n prim-seq\n \"Create seq from a primitive JavaScript Array-like.\"\n ([prim] (prim-seq prim 0))\n ([prim i] (when (< i (alength prim)) (IndexedSeq. prim i nil))))\n"} {:sym *print-level*, :meta {:doc "*print-level* controls how many levels deep the printer will\n print nested objects. If it is bound to logical false, there is no\n limit. Otherwise, it must be bound to an integer indicating the maximum\n level to print. Each argument to print is at level 0; if an argument is a\n collection, its items are at level 1; and so on. If an object is a\n collection and is at a level greater than or equal to the value bound to\n *print-level*, the printer prints '#' to represent it. The root binding\n is nil indicating no limit."}, :source "(def *print-level* nil)\n"} {:sym shuffle, :meta {:doc "Return a random permutation of coll", :arglists ([coll])}, :source "(defn\n shuffle\n \"Return a random permutation of coll\"\n [coll]\n (let [a (to-array coll)] (garray/shuffle a) (vec a)))\n"} {:sym hash-keyword, :meta {:doc nil, :arglists ([k])}, :source "(defn hash-keyword [k] (int (+ (hash-symbol k) 2654435769)))\n"} {:sym find, :meta {:doc "Returns the map entry for key, or nil if key not present.", :arglists ([coll k])}, :source "(defn\n find\n \"Returns the map entry for key, or nil if key not present.\"\n [coll k]\n (if\n (ifind? coll)\n (-find coll k)\n (when\n (and (not (nil? coll)) (associative? coll) (contains? coll k))\n [k (get coll k)])))\n"} {:sym alength, :meta {:doc "Returns the length of the array. Works on arrays of all types.", :arglists ([array])}, :source "(defn\n alength\n \"Returns the length of the array. Works on arrays of all types.\"\n [array]\n (cljs.core/alength array))\n"} {:sym bit-xor, :meta {:doc "Bitwise exclusive or", :arglists [[x y] [x y & more]]}, :source "(defn\n bit-xor\n \"Bitwise exclusive or\"\n ([x y] (cljs.core/bit-xor x y))\n ([x y & more] (reduce bit-xor (cljs.core/bit-xor x y) more)))\n"} {:sym unsigned-bit-shift-right, :meta {:doc "Bitwise shift right with zero fill", :arglists ([x n])}, :source "(defn\n unsigned-bit-shift-right\n \"Bitwise shift right with zero fill\"\n [x n]\n (cljs.core/unsigned-bit-shift-right x n))\n"} {:sym neg?, :meta {:doc "Returns true if num is less than zero, else false", :arglists ([x])}, :source "(defn\n neg?\n \"Returns true if num is less than zero, else false\"\n [x]\n (cljs.core/neg? x))\n"} {:sym js-invoke, :meta {:doc "Invoke JavaScript object method via string. Needed when the\n string is not a valid unquoted property name.", :arglists ([obj s & args])}, :source "(defn\n js-invoke\n \"Invoke JavaScript object method via string. Needed when the\\n string is not a valid unquoted property name.\"\n [obj s & args]\n (.apply (unchecked-get obj s) obj (into-array args)))\n"} {:sym m3-mix-K1, :meta {:doc nil, :arglists ([k1])}, :source "(defn\n m3-mix-K1\n [k1]\n (-> (int k1) (imul m3-C1) (int-rotate-left 15) (imul m3-C2)))\n"} {:sym unchecked-float, :meta {:doc nil, :arglists ([x])}, :source "(defn unchecked-float [x] x)\n"} {:sym undefined?, :meta {:doc "Returns true if x identical to the JavaScript undefined value.", :arglists ([x])}, :source "(defn\n undefined?\n \"Returns true if x identical to the JavaScript undefined value.\"\n [x]\n (cljs.core/undefined? x))\n"} {:sym IMeta, :meta {:doc "Protocol for accessing the metadata of an object."}, :methods (-meta)} {:sym reduced?, :meta {:doc "Returns true if x is the result of a call to reduced", :arglists ([r])}, :source "(defn\n reduced?\n \"Returns true if x is the result of a call to reduced\"\n [r]\n (instance? Reduced r))\n"} {:sym disj!, :meta {:doc "disj[oin]. Returns a transient set of the same (hashed/sorted) type, that\n does not contain key(s).", :arglists [[tcoll val] [tcoll val & vals]]}, :source "(defn\n disj!\n \"disj[oin]. Returns a transient set of the same (hashed/sorted) type, that\\n does not contain key(s).\"\n ([tcoll val] (-disjoin! tcoll val))\n ([tcoll val & vals]\n (let\n [ntcoll (-disjoin! tcoll val)]\n (if vals (recur ntcoll (first vals) (next vals)) ntcoll))))\n"} {:sym -lookup, :meta {:doc "Use k to look up a value in o. If not-found is supplied and k is not\n a valid value that can be used for look up, not-found is returned.", :arglists ([o k] [o k not-found])}, :protocol ILookup} {:sym float?, :meta {:doc "Returns true for JavaScript numbers, false otherwise.", :arglists ([x])}, :source "(defn\n float?\n \"Returns true for JavaScript numbers, false otherwise.\"\n [x]\n (number? x))\n"} {:sym ICloneable, :meta {:doc "Protocol for cloning a value."}, :methods (-clone)} {:sym booleans, :meta {:doc nil, :arglists ([x])}, :source "(defn booleans [x] x)\n"} {:sym int-array, :meta {:doc "Creates an array of ints. Does not coerce array, provided for compatibility\n with Clojure.", :arglists [[size-or-seq] [size init-val-or-seq]]}, :source "(defn\n int-array\n \"Creates an array of ints. Does not coerce array, provided for compatibility\\n with Clojure.\"\n ([size-or-seq]\n (if\n (number? size-or-seq)\n (int-array size-or-seq nil)\n (into-array size-or-seq)))\n ([size init-val-or-seq]\n (let\n [a (make-array size)]\n (if\n (seq? init-val-or-seq)\n (let\n [s (seq init-val-or-seq)]\n (loop\n [i 0 s s]\n (if\n (and s (< i size))\n (do (aset a i (first s)) (recur (inc i) (next s)))\n a)))\n (do (dotimes [i size] (aset a i init-val-or-seq)) a)))))\n"} {:sym set?, :meta {:doc "Returns true if x satisfies ISet", :arglists ([x])}, :source "(defn\n set?\n \"Returns true if x satisfies ISet\"\n [x]\n (if (nil? x) false (satisfies? ISet x)))\n"} {:sym iterable?, :meta {:doc "Return true if x implements IIterable protocol.", :arglists ([x])}, :source "(defn\n iterable?\n \"Return true if x implements IIterable protocol.\"\n [x]\n (satisfies? IIterable x))\n"} {:sym -pr-writer, :meta {:doc nil, :arglists ([o writer opts])}, :protocol IPrintWithWriter} {:sym take-while, :examples [{:body (do ["Get all the negative numbers up to the first non-negative"] (take-while neg? [-2 -1 0 -1 -2 3])), :body-str "(do\n [\"Get all the negative numbers up to the first non-negative\"]\n (take-while neg? [-2 -1 0 -1 -2 3]))\n", :id "cljs.core/take-while/0"}]} {:sym vary-meta, :meta {:doc "Returns an object of the same type and value as obj, with\n (apply f (meta obj) args) as its metadata.", :arglists [[obj f] [obj f a] [obj f a b] [obj f a b c] [obj f a b c d] [obj f a b c d & args]]}, :source "(defn\n vary-meta\n \"Returns an object of the same type and value as obj, with\\n (apply f (meta obj) args) as its metadata.\"\n ([obj f] (with-meta obj (f (meta obj))))\n ([obj f a] (with-meta obj (f (meta obj) a)))\n ([obj f a b] (with-meta obj (f (meta obj) a b)))\n ([obj f a b c] (with-meta obj (f (meta obj) a b c)))\n ([obj f a b c d] (with-meta obj (f (meta obj) a b c d)))\n ([obj f a b c d & args]\n (with-meta obj (apply f (meta obj) a b c d args))))\n"} {:sym INext, :meta {:doc "Protocol for accessing the next items of a collection."}, :methods (-next)} {:sym is_proto_, :meta {:doc nil, :arglists ([x])}, :source "(defn is_proto_ [x] (identical? (.-prototype (.-constructor x)) x))\n"} {:sym ICounted, :meta {:doc "Protocol for adding the ability to count a collection in constant time."}, :methods (-count)} {:sym IMapEntry, :meta {:doc "Protocol for examining a map entry."}, :methods (-key -val)} {:sym <=, :meta {:doc "Returns non-nil if nums are in monotonically non-decreasing order,\n otherwise false.", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n <=\n \"Returns non-nil if nums are in monotonically non-decreasing order,\\n otherwise false.\"\n ([x] true)\n ([x y] (cljs.core/<= x y))\n ([x y & more]\n (if\n (cljs.core/<= x y)\n (if\n (next more)\n (recur y (first more) (next more))\n (cljs.core/<= y (first more)))\n false)))\n"} {:sym MODULE_INFOS, :meta {}, :source "(def MODULE_INFOS nil)\n"} {:sym conj!, :meta {:doc "Adds val to the transient collection, and return tcoll. The 'addition'\n may happen at different 'places' depending on the concrete type.", :arglists [[] [tcoll] [tcoll val] [tcoll val & vals]]}, :source "(defn\n conj!\n \"Adds val to the transient collection, and return tcoll. The 'addition'\\n may happen at different 'places' depending on the concrete type.\"\n ([] (transient []))\n ([tcoll] tcoll)\n ([tcoll val] (-conj! tcoll val))\n ([tcoll val & vals]\n (let\n [ntcoll (-conj! tcoll val)]\n (if vals (recur ntcoll (first vals) (next vals)) ntcoll))))\n"} {:sym -pop, :meta {:doc "Returns a new stack without the item on top of the stack. Is used\n by cljs.core/pop.", :arglists ([coll])}, :protocol IStack} {:sym repeatedly, :meta {:doc "Takes a function of no args, presumably with side effects, and\n returns an infinite (or length n if supplied) lazy sequence of calls\n to it", :arglists [[f] [n f]]}, :source "(defn\n repeatedly\n \"Takes a function of no args, presumably with side effects, and\\n returns an infinite (or length n if supplied) lazy sequence of calls\\n to it\"\n ([f] (lazy-seq (cons (f) (repeatedly f))))\n ([n f] (take n (repeatedly f))))\n"} {:sym reset-vals!, :meta {:doc "Sets the value of atom to newval. Returns [old new], the value of the\n atom before and after the reset.", :arglists ([a new-value])}, :source "(defn\n reset-vals!\n \"Sets the value of atom to newval. Returns [old new], the value of the\\n atom before and after the reset.\"\n {:added \"1.9\"}\n [a new-value]\n (let\n [validate (.-validator a)]\n (when-not\n (nil? validate)\n (when-not\n (validate new-value)\n (throw (js/Error. \"Validator rejected reference state\"))))\n (let\n [old-value (.-state a)]\n (set! (.-state a) new-value)\n (when-not\n (nil? (.-watches a))\n (-notify-watches a old-value new-value))\n [old-value new-value])))\n"} {:sym IStack, :meta {:doc "Protocol for collections to provide access to their items as stacks. The top\n of the stack should be accessed in the most efficient way for the different\n data structures."}, :methods (-peek -pop)} {:sym -remove-watch, :meta {:doc "Removes watcher that corresponds to key from this.", :arglists ([this key])}, :protocol IWatchable} {:sym IVolatile, :meta {:doc "Protocol for adding volatile functionality."}, :methods (-vreset!)} {:sym remove, :meta {:doc "Returns a lazy sequence of the items in coll for which\n (pred item) returns false. pred must be free of side-effects.\n Returns a transducer when no collection is provided.", :arglists [[pred] [pred coll]]}, :source "(defn\n remove\n \"Returns a lazy sequence of the items in coll for which\\n (pred item) returns false. pred must be free of side-effects.\\n Returns a transducer when no collection is provided.\"\n ([pred] (filter (complement pred)))\n ([pred coll] (filter (complement pred) coll)))\n"} {:sym *, :meta {:doc "Returns the product of nums. (*) returns 1.", :arglists [[] [x] [x y] [x y & more]]}, :source "(defn\n *\n \"Returns the product of nums. (*) returns 1.\"\n ([] 1)\n ([x] x)\n ([x y] (cljs.core/* x y))\n ([x y & more] (reduce * (cljs.core/* x y) more)))\n"} {:sym min, :meta {:doc "Returns the least of the nums.", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n min\n \"Returns the least of the nums.\"\n ([x] x)\n ([x y] (cljs.core/min x y))\n ([x y & more] (reduce min (cljs.core/min x y) more)))\n"} {:sym -persistent!, :meta {:doc "Creates a persistent data structure from tcoll and returns it.", :arglists ([tcoll])}, :protocol ITransientCollection} {:sym -nth, :meta {:doc "Returns the value at the index n in the collection coll.\n Returns not-found if index n is out of bounds and not-found is supplied.", :arglists ([coll n] [coll n not-found])}, :protocol IIndexed} {:sym pop!, :meta {:doc "Removes the last item from a transient vector. If\n the collection is empty, throws an exception. Returns tcoll", :arglists ([tcoll])}, :source "(defn\n pop!\n \"Removes the last item from a transient vector. If\\n the collection is empty, throws an exception. Returns tcoll\"\n [tcoll]\n (-pop! tcoll))\n"} {:sym chunk-append, :meta {:doc nil, :arglists ([b x])}, :source "(defn chunk-append [b x] (.add b x))\n"} {:sym *unchecked-arrays*, :meta {}, :source "(def *unchecked-arrays* false)\n"} {:sym IReversible, :meta {:doc "Protocol for reversing a seq."}, :methods (-rseq)} {:sym reversible?, :meta {:doc "Returns true if coll satisfies? IReversible.", :arglists ([coll])}, :source "(defn\n reversible?\n \"Returns true if coll satisfies? IReversible.\"\n [coll]\n (satisfies? IReversible coll))\n"} {:sym -realized?, :meta {:doc "Returns true if a value for x has been produced, false otherwise.", :arglists ([x])}, :protocol IPending} {:sym -add-watch, :meta {:doc "Adds a watcher function f to this. Keys must be unique per reference,\n and can be used to remove the watch with -remove-watch.", :arglists ([this key f])}, :protocol IWatchable} {:sym -deref-with-timeout, :meta {:doc nil, :arglists ([o msec timeout-val])}, :protocol IDerefWithTimeout} {:sym conj, :meta {:doc "conj[oin]. Returns a new collection with the xs\n 'added'. (conj nil item) returns (item). The 'addition' may\n happen at different 'places' depending on the concrete type.", :arglists [[] [coll] [coll x] [coll x & xs]]}, :source "(defn\n conj\n \"conj[oin]. Returns a new collection with the xs\\n 'added'. (conj nil item) returns (item). The 'addition' may\\n happen at different 'places' depending on the concrete type.\"\n ([] [])\n ([coll] coll)\n ([coll x] (if-not (nil? coll) (-conj coll x) (list x)))\n ([coll x & xs]\n (if xs (recur (conj coll x) (first xs) (next xs)) (conj coll x))))\n", :examples [{:doc "Add a name to a vector", :body (conj ["Alice" "Bob"] "Charlie"), :body-str "(conj [\"Alice\" \"Bob\"] \"Charlie\")\n", :id "cljs.core/conj/0"} {:doc "Add a number to a list", :body (conj (quote (2 3)) 1), :body-str "(conj '(2 3) 1)\n", :id "cljs.core/conj/1"} {:doc "Add a key-val pair to a hash map", :body (conj {:name "Alice"} [:age 30]), :body-str "(conj {:name \"Alice\"} [:age 30])\n", :id "cljs.core/conj/2"}]} {:sym -sorted-seq, :meta {:doc "Returns a sorted seq from coll in either ascending or descending order.", :arglists ([coll ascending?])}, :protocol ISorted} {:sym transduce, :meta {:doc "reduce with a transformation of f (xf). If init is not\n supplied, (f) will be called to produce it. f should be a reducing\n step function that accepts both 1 and 2 arguments, if it accepts\n only 2 you can add the arity-1 with 'completing'. Returns the result\n of applying (the transformed) xf to init and the first item in coll,\n then applying xf to that result and the 2nd item, etc. If coll\n contains no items, returns init and f is not called. Note that\n certain transforms may inject or skip items.", :arglists [[xform f coll] [xform f init coll]]}, :source "(defn\n transduce\n \"reduce with a transformation of f (xf). If init is not\\n supplied, (f) will be called to produce it. f should be a reducing\\n step function that accepts both 1 and 2 arguments, if it accepts\\n only 2 you can add the arity-1 with 'completing'. Returns the result\\n of applying (the transformed) xf to init and the first item in coll,\\n then applying xf to that result and the 2nd item, etc. If coll\\n contains no items, returns init and f is not called. Note that\\n certain transforms may inject or skip items.\"\n ([xform f coll] (transduce xform f (f) coll))\n ([xform f init coll]\n (let [f (xform f) ret (reduce f init coll)] (f ret))))\n"} {:sym -swap!, :meta {:doc "Swaps the value of o to be (apply f current-value-of-atom args).", :arglists ([o f] [o f a] [o f a b] [o f a b xs])}, :protocol ISwap} {:sym *print-length*, :meta {:doc "*print-length* controls how many items of each collection the\n printer will print. If it is bound to logical false, there is no\n limit. Otherwise, it must be bound to an integer indicating the maximum\n number of items of each collection to print. If a collection contains\n more items, the printer will print items up to the limit followed by\n '...' to represent the remaining items. The root binding is nil\n indicating no limit."}, :source "(def *print-length* nil)\n"} {:sym js-delete, :meta {:doc "Delete a property from a JavaScript object.", :arglists ([obj key])}, :source "(defn\n js-delete\n \"Delete a property from a JavaScript object.\"\n [obj key]\n (cljs.core/js-delete obj key))\n"} {:sym truth_, :meta {:doc "Internal - do not use!", :arglists ([x])}, :source "(defn truth_ \"Internal - do not use!\" [x] (cljs.core/truth_ x))\n"} {:sym compare-and-set!, :meta {:doc "Atomically sets the value of atom to newval if and only if the\n current value of the atom is equal to oldval. Returns true if\n set happened, else false.", :arglists ([a oldval newval])}, :source "(defn\n compare-and-set!\n \"Atomically sets the value of atom to newval if and only if the\\n current value of the atom is equal to oldval. Returns true if\\n set happened, else false.\"\n [a oldval newval]\n (if (= (-deref a) oldval) (do (reset! a newval) true) false))\n"} {:sym array-seq, :meta {:doc "Create a seq from a JavaScript array.", :arglists [[array] [array i]]}, :source "(defn\n array-seq\n \"Create a seq from a JavaScript array.\"\n ([array] (prim-seq array 0))\n ([array i] (prim-seq array i)))\n"} {:sym interleave, :meta {:doc "Returns a lazy seq of the first item in each coll, then the second etc.", :arglists [[] [c1] [c1 c2] [c1 c2 & colls]]}, :source "(defn\n interleave\n \"Returns a lazy seq of the first item in each coll, then the second etc.\"\n ([] ())\n ([c1] (lazy-seq c1))\n ([c1 c2]\n (lazy-seq\n (let\n [s1 (seq c1) s2 (seq c2)]\n (when\n (and s1 s2)\n (cons\n (first s1)\n (cons (first s2) (interleave (rest s1) (rest s2))))))))\n ([c1 c2 & colls]\n (lazy-seq\n (let\n [ss (map seq (conj colls c2 c1))]\n (when\n (every? identity ss)\n (concat (map first ss) (apply interleave (map rest ss))))))))\n", :examples [{:doc "Combine two seqs of unequal length", :body (interleave (repeat "a") [1 2 3]), :body-str "(interleave (repeat \"a\") [1 2 3])\n", :id "cljs.core/interleave/0"} {:doc "Create a map using two vectors", :body (apply assoc {} (interleave [:fruit :color :temp] ["grape" "red" "hot"])), :body-str "(apply\n assoc\n {}\n (interleave [:fruit :color :temp] [\"grape\" \"red\" \"hot\"]))\n", :id "cljs.core/interleave/1"}]} {:sym map?, :meta {:doc "Return true if x satisfies IMap", :arglists ([x])}, :source "(defn\n map?\n \"Return true if x satisfies IMap\"\n [x]\n (if (nil? x) false (satisfies? IMap x)))\n"} {:sym m3-C1, :meta {}, :source "(def m3-C1 (int 3432918353))\n"} {:sym get, :meta {:doc "Returns the value mapped to key, not-found or nil if key not present.", :arglists [[o k] [o k not-found]]}, :source "(defn\n get\n \"Returns the value mapped to key, not-found or nil if key not present.\"\n ([o k]\n (when-not\n (nil? o)\n (cond\n (implements? ILookup o)\n (-lookup o k)\n (array? o)\n (when (and (some? k) (< k (.-length o))) (aget o (int k)))\n (string? o)\n (when (and (some? k) (< k (.-length o))) (.charAt o (int k)))\n (native-satisfies? ILookup o)\n (-lookup o k)\n :else\n nil)))\n ([o k not-found]\n (if-not\n (nil? o)\n (cond\n (implements? ILookup o)\n (-lookup o k not-found)\n (array? o)\n (if\n (and (some? k) (>= k 0) (< k (.-length o)))\n (aget o (int k))\n not-found)\n (string? o)\n (if\n (and (some? k) (>= k 0) (< k (.-length o)))\n (.charAt o (int k))\n not-found)\n (native-satisfies? ILookup o)\n (-lookup o k not-found)\n :else\n not-found)\n not-found)))\n"} {:sym identity, :meta {:doc "Returns its argument.", :arglists ([x])}, :source "(defn identity \"Returns its argument.\" [x] x)\n"} {:sym into, :meta {:doc "Returns a new coll consisting of to-coll with all of the items of\n from-coll conjoined. A transducer may be supplied.", :arglists [[] [to] [to from] [to xform from]]}, :source "(defn\n into\n \"Returns a new coll consisting of to-coll with all of the items of\\n from-coll conjoined. A transducer may be supplied.\"\n ([] [])\n ([to] to)\n ([to from]\n (if-not\n (nil? to)\n (if\n (implements? IEditableCollection to)\n (-with-meta\n (persistent! (reduce -conj! (transient to) from))\n (meta to))\n (reduce -conj to from))\n (reduce conj () from)))\n ([to xform from]\n (if\n (implements? IEditableCollection to)\n (-with-meta\n (persistent! (transduce xform conj! (transient to) from))\n (meta to))\n (transduce xform conj to from))))\n"} {:sym long, :meta {:doc "Coerce to long by stripping decimal places. Identical to `int'.", :arglists ([x])}, :source "(defn\n long\n \"Coerce to long by stripping decimal places. Identical to `int'.\"\n [x]\n (fix x))\n"} {:sym double, :meta {:doc nil, :arglists ([x])}, :source "(defn double [x] x)\n"} {:sym volatile?, :meta {:doc "Returns true if x is a volatile.", :arglists ([x])}, :source "(defn\n volatile?\n \"Returns true if x is a volatile.\"\n [x]\n (instance? Volatile x))\n"} {:sym -key, :meta {:doc "Returns the key of the map entry.", :arglists ([coll])}, :protocol IMapEntry} {:sym nfirst, :meta {:doc "Same as (next (first x))", :arglists ([coll])}, :source "(defn nfirst \"Same as (next (first x))\" [coll] (next (first coll)))\n"} {:sym meta, :meta {:doc "Returns the metadata of obj, returns nil if there is no metadata.", :arglists ([o])}, :source "(defn\n meta\n \"Returns the metadata of obj, returns nil if there is no metadata.\"\n [o]\n (when (and (not (nil? o)) (satisfies? IMeta o)) (-meta o)))\n"} {:sym -kv-reduce, :meta {:doc "Reduces an associative collection and returns the result. f should be\n a function that takes three arguments.", :arglists ([coll f init])}, :protocol IKVReduce} {:sym IHash, :meta {:doc "Protocol for adding hashing functionality to a type."}, :methods (-hash)} {:sym bit-and-not, :meta {:doc "Bitwise and with complement", :arglists [[x y] [x y & more]]}, :source "(defn\n bit-and-not\n \"Bitwise and with complement\"\n ([x y] (cljs.core/bit-and-not x y))\n ([x y & more] (reduce bit-and-not (cljs.core/bit-and-not x y) more)))\n"} {:sym var?, :meta {:doc "Returns true if v is of type cljs.core.Var", :arglists ([v])}, :source "(defn\n var?\n \"Returns true if v is of type cljs.core.Var\"\n [v]\n (instance? cljs.core.Var v))\n"} {:sym -comparator, :meta {:doc "Returns the comparator for coll.", :arglists ([coll])}, :protocol ISorted} {:sym unchecked-add-int, :meta {:doc "Returns the sum of nums. (+) returns 0.", :arglists [[] [x] [x y] [x y & more]]}, :source "(defn\n unchecked-add-int\n \"Returns the sum of nums. (+) returns 0.\"\n ([] 0)\n ([x] x)\n ([x y] (cljs.core/unchecked-add-int x y))\n ([x y & more]\n (reduce unchecked-add-int (cljs.core/unchecked-add-int x y) more)))\n"} {:sym hash-ordered-coll, :meta {:doc "Returns the hash code, consistent with =, for an external ordered\n collection implementing Iterable.\n See http://clojure.org/data_structures#hash for full algorithms.", :arglists ([coll])}, :source "(defn\n hash-ordered-coll\n \"Returns the hash code, consistent with =, for an external ordered\\n collection implementing Iterable.\\n See http://clojure.org/data_structures#hash for full algorithms.\"\n [coll]\n (loop\n [n 0 hash-code 1 coll (seq coll)]\n (if-not\n (nil? coll)\n (recur\n (inc n)\n (bit-or (+ (imul 31 hash-code) (hash (first coll))) 0)\n (next coll))\n (mix-collection-hash hash-code n))))\n"} {:sym IEquiv, :meta {:doc "Protocol for adding value comparison functionality to a type."}, :methods (-equiv)} {:sym cycle, :meta {:doc "Returns a lazy (infinite!) sequence of repetitions of the items in coll.", :arglists ([coll])}, :source "(defn\n cycle\n \"Returns a lazy (infinite!) sequence of repetitions of the items in coll.\"\n [coll]\n (lazy-seq (when-let [s (seq coll)] (concat s (cycle s)))))\n"} {:sym -deref, :meta {:doc "Returns the value of the reference o.", :arglists ([o])}, :protocol IDeref} {:sym empty?, :meta {:doc "Returns true if coll has no items - same as (not (seq coll)).\n Please use the idiom (seq x) rather than (not (empty? x))", :arglists ([coll])}, :source "(defn\n empty?\n \"Returns true if coll has no items - same as (not (seq coll)).\\n Please use the idiom (seq x) rather than (not (empty? x))\"\n [coll]\n (or (nil? coll) (not (seq coll))))\n"} {:sym short, :meta {:doc nil, :arglists ([x])}, :source "(defn short [x] x)\n"} {:sym -chunked-first, :meta {:doc "Returns the first chunk in coll.", :arglists ([coll])}, :protocol IChunkedSeq} {:sym filterv, :meta {:doc "Returns a vector of the items in coll for which\n (pred item) returns true. pred must be free of side-effects.", :arglists ([pred coll])}, :source "(defn\n filterv\n \"Returns a vector of the items in coll for which\\n (pred item) returns true. pred must be free of side-effects.\"\n [pred coll]\n (->\n (reduce (fn [v o] (if (pred o) (conj! v o) v)) (transient []) coll)\n persistent!))\n"} {:sym hash, :meta {:doc "Returns the hash code of its argument. Note this is the hash code\n consistent with =.", :arglists ([o])}, :source "(defn\n hash\n \"Returns the hash code of its argument. Note this is the hash code\\n consistent with =.\"\n [o]\n (cond\n (implements? IHash o)\n (bit-xor (-hash o) 0)\n (number? o)\n (if\n (js/isFinite o)\n (js-mod (Math/floor o) 2147483647)\n (case o ##Inf 2146435072 ##-Inf -1048576 2146959360))\n (true? o)\n 1231\n (false? o)\n 1237\n (string? o)\n (m3-hash-int (hash-string o))\n (instance? js/Date o)\n (bit-xor (.valueOf o) 0)\n (nil? o)\n 0\n :else\n (bit-xor (-hash o) 0)))\n"} {:sym quot, :meta {:doc "quot[ient] of dividing numerator by denominator.", :arglists ([n d])}, :source "(defn\n quot\n \"quot[ient] of dividing numerator by denominator.\"\n [n d]\n (let [rem (js-mod n d)] (fix (/ (- n rem) d))))\n"} {:sym unchecked-double, :meta {:doc nil, :arglists ([x])}, :source "(defn unchecked-double [x] x)\n"} {:sym ranged-iterator, :meta {:doc nil, :arglists ([v start end])}, :source "(defn\n ranged-iterator\n [v start end]\n (let\n [i start]\n (RangedIterator.\n i\n (- i (js-mod i 32))\n (when (< start (count v)) (unchecked-array-for v i))\n v\n start\n end)))\n"} {:sym ITransientVector, :meta {:doc "Protocol for adding vector functionality to transient collections."}, :methods (-assoc-n! -pop!)} {:sym longs, :meta {:doc nil, :arglists ([x])}, :source "(defn longs [x] x)\n"} {:sym not=, :meta {:doc "Same as (not (= obj1 obj2))", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n not=\n \"Same as (not (= obj1 obj2))\"\n ([x] false)\n ([x y] (not (= x y)))\n ([x y & more] (not (apply = x y more))))\n"} {:sym set-print-err-fn!, :meta {:doc "Set *print-err-fn* to f.", :arglists ([f])}, :source "(defn\n set-print-err-fn!\n \"Set *print-err-fn* to f.\"\n [f]\n (set! *print-err-fn* f))\n"} {:sym string?, :meta {:doc "Returns true if x is a JavaScript string.", :arglists ([x])}, :source "(defn\n string?\n \"Returns true if x is a JavaScript string.\"\n [x]\n (goog/isString x))\n"} {:sym es6-iterator, :meta {:doc "EXPERIMENTAL: Return a ES2015 compatible iterator for coll.", :arglists ([coll])}, :source "(defn\n es6-iterator\n \"EXPERIMENTAL: Return a ES2015 compatible iterator for coll.\"\n [coll]\n (ES6Iterator. (seq coll)))\n"} {:sym m3-C2, :meta {}, :source "(def m3-C2 (int 461845907))\n"} {:sym *print-newline*, :meta {:doc "When set to logical false will drop newlines from printing calls.\n This is to work around the implicit newlines emitted by standard JavaScript\n console objects."}, :source "(def *print-newline* true)\n"} {:sym unchecked-multiply-int, :meta {:doc "Returns the product of nums. (*) returns 1.", :arglists [[] [x] [x y] [x y & more]]}, :source "(defn\n unchecked-multiply-int\n \"Returns the product of nums. (*) returns 1.\"\n ([] 1)\n ([x] x)\n ([x y] (cljs.core/unchecked-multiply-int x y))\n ([x y & more]\n (reduce\n unchecked-multiply-int\n (cljs.core/unchecked-multiply-int x y)\n more)))\n"} {:sym chunk-rest, :meta {:doc nil, :arglists ([s])}, :source "(defn chunk-rest [s] (-chunked-rest s))\n"} {:sym double?, :meta {:doc "Returns true for JavaScript numbers, false otherwise.", :arglists ([x])}, :source "(defn\n double?\n \"Returns true for JavaScript numbers, false otherwise.\"\n [x]\n (number? x))\n"} {:sym vec, :meta {:doc "Creates a new vector containing the contents of coll. JavaScript arrays\n will be aliased and should not be modified.", :arglists ([coll])}, :source "(defn\n vec\n \"Creates a new vector containing the contents of coll. JavaScript arrays\\n will be aliased and should not be modified.\"\n [coll]\n (if\n (array? coll)\n (.fromArray PersistentVector coll true)\n (-persistent!\n (reduce -conj! (-as-transient (.-EMPTY PersistentVector)) coll))))\n"} {:sym *print-meta*, :meta {:doc "If set to logical true, when printing an object, its metadata will also\n be printed in a form that can be read back by the reader.\n\n Defaults to false."}, :source "(def *print-meta* false)\n"} {:sym -notify-watches, :meta {:doc "Calls all watchers with this, oldval and newval.", :arglists ([this oldval newval])}, :protocol IWatchable} {:sym int, :meta {:doc "Coerce to int by stripping decimal places.", :arglists ([x])}, :source "(defn int \"Coerce to int by stripping decimal places.\" [x] (bit-or x 0))\n"} {:sym second, :meta {:doc "Same as (first (next x))", :arglists ([coll])}, :source "(defn second \"Same as (first (next x))\" [coll] (first (next coll)))\n"} {:sym IEditableCollection, :meta {:doc "Protocol for collections which can transformed to transients."}, :methods (-as-transient)} {:sym hash-combine, :meta {:doc nil, :arglists ([seed hash])}, :source "(defn\n hash-combine\n [seed hash]\n (bit-xor\n seed\n (+ hash 2654435769 (bit-shift-left seed 6) (bit-shift-right seed 2))))\n"} {:sym >, :meta {:doc "Returns non-nil if nums are in monotonically decreasing order,\n otherwise false.", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n >\n \"Returns non-nil if nums are in monotonically decreasing order,\\n otherwise false.\"\n ([x] true)\n ([x y] (cljs.core/> x y))\n ([x y & more]\n (if\n (cljs.core/> x y)\n (if\n (next more)\n (recur y (first more) (next more))\n (cljs.core/> y (first more)))\n false)))\n"} {:sym -name, :meta {:doc "Returns the name String of x.", :arglists ([x])}, :protocol INamed} {:sym int?, :meta {:doc "Return true if x satisfies integer? or is an instance of goog.math.Integer\n or goog.math.Long.", :arglists ([x])}, :source "(defn\n int?\n \"Return true if x satisfies integer? or is an instance of goog.math.Integer\\n or goog.math.Long.\"\n [x]\n (or\n (integer? x)\n (instance? goog.math.Integer x)\n (instance? goog.math.Long x)))\n"} {:sym associative?, :meta {:doc "Returns true if coll implements Associative", :arglists ([x])}, :source "(defn\n associative?\n \"Returns true if coll implements Associative\"\n [x]\n (satisfies? IAssociative x))\n"} {:sym unchecked-int, :meta {:doc "Coerce to int by stripping decimal places.", :arglists ([x])}, :source "(defn\n unchecked-int\n \"Coerce to int by stripping decimal places.\"\n [x]\n (fix x))\n"} {:sym js-keys, :meta {:doc "Return the JavaScript keys for an object.", :arglists ([obj])}, :source "(defn\n js-keys\n \"Return the JavaScript keys for an object.\"\n [obj]\n (gobject/getKeys obj))\n"} {:sym inst-ms*, :meta {:doc nil, :arglists ([inst])}, :protocol Inst} {:sym keyword?, :meta {:doc "Return true if x is a Keyword", :arglists ([x])}, :source "(defn\n keyword?\n \"Return true if x is a Keyword\"\n [x]\n (instance? Keyword x))\n"} {:sym array-iter, :meta {:doc nil, :arglists ([x])}, :source "(defn array-iter [x] (ArrayIter. x 0))\n"} {:sym -rseq, :meta {:doc "Returns a seq of the items in coll in reversed order.", :arglists ([coll])}, :protocol IReversible} {:sym unchecked-multiply, :meta {:doc "Returns the product of nums. (*) returns 1.", :arglists [[] [x] [x y] [x y & more]]}, :source "(defn\n unchecked-multiply\n \"Returns the product of nums. (*) returns 1.\"\n ([] 1)\n ([x] x)\n ([x y] (cljs.core/unchecked-multiply x y))\n ([x y & more]\n (reduce unchecked-multiply (cljs.core/unchecked-multiply x y) more)))\n"} {:sym even?, :meta {:doc "Returns true if n is even, throws an exception if n is not an integer", :arglists ([n])}, :source "(defn\n even?\n \"Returns true if n is even, throws an exception if n is not an integer\"\n [n]\n (if\n (integer? n)\n (zero? (bit-and n 1))\n (throw (js/Error. (str \"Argument must be an integer: \" n)))))\n"} {:sym es6-iterator-seq, :meta {:doc "EXPERIMENTAL: Given an ES2015 compatible iterator return a seq.", :arglists ([iter])}, :source "(defn\n es6-iterator-seq\n \"EXPERIMENTAL: Given an ES2015 compatible iterator return a seq.\"\n [iter]\n (let\n [v (.next iter)]\n (if (.-done v) () (ES6IteratorSeq. (.-value v) iter nil))))\n"} {:sym unchecked-dec, :meta {:doc "Returns a number one less than x, an int.", :arglists ([x])}, :source "(defn\n unchecked-dec\n \"Returns a number one less than x, an int.\"\n [x]\n (cljs.core/unchecked-dec x))\n"} {:sym Inst, :meta {:doc nil}, :methods (inst-ms*)} {:sym double-array, :meta {:doc "Creates an array of doubles. Does not coerce array, provided for compatibility\n with Clojure.", :arglists [[size-or-seq] [size init-val-or-seq]]}, :source "(defn\n double-array\n \"Creates an array of doubles. Does not coerce array, provided for compatibility\\n with Clojure.\"\n ([size-or-seq]\n (if\n (number? size-or-seq)\n (double-array size-or-seq nil)\n (into-array size-or-seq)))\n ([size init-val-or-seq]\n (let\n [a (make-array size)]\n (if\n (seq? init-val-or-seq)\n (let\n [s (seq init-val-or-seq)]\n (loop\n [i 0 s s]\n (if\n (and s (< i size))\n (do (aset a i (first s)) (recur (inc i) (next s)))\n a)))\n (do (dotimes [i size] (aset a i init-val-or-seq)) a)))))\n"} {:sym spread, :meta {:doc nil, :arglists ([arglist])}, :source "(defn\n spread\n [arglist]\n (when-not\n (nil? arglist)\n (let\n [n (next arglist)]\n (if\n (nil? n)\n (seq (first arglist))\n (cons (first arglist) (spread n))))))\n"} {:sym rseq, :meta {:doc "Returns, in constant time, a seq of the items in rev (which\n can be a vector or sorted-map), in reverse order. If rev is empty returns nil", :arglists ([rev])}, :source "(defn\n rseq\n \"Returns, in constant time, a seq of the items in rev (which\\n can be a vector or sorted-map), in reverse order. If rev is empty returns nil\"\n [rev]\n (-rseq rev))\n"} {:sym IReset, :meta {:doc "Protocol for adding resetting functionality."}, :methods (-reset!)} {:sym IEmptyableCollection, :meta {:doc "Protocol for creating an empty collection."}, :methods (-empty)} {:sym *print-fn-bodies*, :meta {:doc "*print-fns-bodies* controls whether functions print their source or\n only their names."}, :source "(def *print-fn-bodies* false)\n"} {:sym float, :meta {:doc nil, :arglists ([x])}, :source "(defn float [x] x)\n"} {:sym IRecord, :meta {:doc "Marker interface indicating a record object"}, :methods ()} {:sym concat, :meta {:doc "Returns a lazy seq representing the concatenation of the elements in the supplied colls.", :arglists [[] [x] [x y] [x y & zs]]}, :source "(defn\n concat\n \"Returns a lazy seq representing the concatenation of the elements in the supplied colls.\"\n ([] (lazy-seq nil))\n ([x] (lazy-seq x))\n ([x y]\n (lazy-seq\n (let\n [s (seq x)]\n (if\n s\n (if\n (chunked-seq? s)\n (chunk-cons (chunk-first s) (concat (chunk-rest s) y))\n (cons (first s) (concat (rest s) y)))\n y))))\n ([x y & zs]\n (let\n [cat\n (fn\n cat\n [xys zs]\n (lazy-seq\n (let\n [xys (seq xys)]\n (if\n xys\n (if\n (chunked-seq? xys)\n (chunk-cons (chunk-first xys) (cat (chunk-rest xys) zs))\n (cons (first xys) (cat (rest xys) zs)))\n (when zs (cat (first zs) (next zs)))))))]\n (cat (concat x y) zs))))\n"} {:sym IDerefWithTimeout, :meta {:doc nil}, :methods (-deref-with-timeout)} {:sym symbol, :meta {:doc "Returns a Symbol with the given namespace and name.", :arglists [[name] [ns name]]}, :source "(defn\n symbol\n \"Returns a Symbol with the given namespace and name.\"\n ([name]\n (if\n (symbol? name)\n name\n (let\n [idx (.indexOf name \"/\")]\n (if\n (< idx 1)\n (symbol nil name)\n (symbol\n (.substring name 0 idx)\n (.substring name (inc idx) (. name -length)))))))\n ([ns name]\n (let\n [sym-str (if-not (nil? ns) (str ns \"/\" name) name)]\n (Symbol. ns name sym-str nil nil))))\n"} {:sym to-array-2d, :meta {:doc "Returns a (potentially-ragged) 2-dimensional array\n containing the contents of coll.", :arglists ([coll])}, :source "(defn\n to-array-2d\n \"Returns a (potentially-ragged) 2-dimensional array\\n containing the contents of coll.\"\n [coll]\n (let\n [ret (make-array (count coll))]\n (loop\n [i 0 xs (seq coll)]\n (when-not\n (nil? xs)\n (aset ret i (to-array (first xs)))\n (recur (inc i) (next xs))))\n ret))\n"} {:sym mod, :meta {:doc "Modulus of num and div. Truncates toward negative infinity.", :arglists ([n d])}, :source "(defn\n mod\n \"Modulus of num and div. Truncates toward negative infinity.\"\n [n d]\n (js-mod (+ (js-mod n d) d) d))\n"} {:sym ISet, :meta {:doc "Protocol for adding set functionality to a collection."}, :methods (-disjoin)} {:sym pop, :meta {:doc "For a list or queue, returns a new list/queue without the first\n item, for a vector, returns a new vector without the last item.\n Note - not the same as next/butlast.", :arglists ([coll])}, :source "(defn\n pop\n \"For a list or queue, returns a new list/queue without the first\\n item, for a vector, returns a new vector without the last item.\\n Note - not the same as next/butlast.\"\n [coll]\n (when-not (nil? coll) (-pop coll)))\n"} {:sym IPending, :meta {:doc "Protocol for types which can have a deferred realization. Currently only\n implemented by Delay and LazySeq."}, :methods (-realized?)} {:sym -entry-key, :meta {:doc "Returns the key for entry.", :arglists ([coll entry])}, :protocol ISorted} {:sym dissoc!, :meta {:doc "Returns a transient map that doesn't contain a mapping for key(s).", :arglists [[tcoll key] [tcoll key & ks]]}, :source "(defn\n dissoc!\n \"Returns a transient map that doesn't contain a mapping for key(s).\"\n ([tcoll key] (-dissoc! tcoll key))\n ([tcoll key & ks]\n (let\n [ntcoll (-dissoc! tcoll key)]\n (if ks (recur ntcoll (first ks) (next ks)) ntcoll))))\n"} {:sym indexed?, :meta {:doc "Returns true if coll implements nth in constant time", :arglists ([x])}, :source "(defn\n indexed?\n \"Returns true if coll implements nth in constant time\"\n [x]\n (satisfies? IIndexed x))\n"} {:sym -, :meta {:doc "If no ys are supplied, returns the negation of x, else subtracts\n the ys from x and returns the result.", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n -\n \"If no ys are supplied, returns the negation of x, else subtracts\\n the ys from x and returns the result.\"\n ([x] (cljs.core/- x))\n ([x y] (cljs.core/- x y))\n ([x y & more] (reduce - (cljs.core/- x y) more)))\n"} {:sym -equiv, :meta {:doc "Returns true if o and other are equal, false otherwise.", :arglists ([o other])}, :protocol IEquiv} {:sym assoc!, :meta {:doc "When applied to a transient map, adds mapping of key(s) to\n val(s). When applied to a transient vector, sets the val at index.\n Note - index must be <= (count vector). Returns coll.", :arglists [[tcoll key val] [tcoll key val & kvs]]}, :source "(defn\n assoc!\n \"When applied to a transient map, adds mapping of key(s) to\\n val(s). When applied to a transient vector, sets the val at index.\\n Note - index must be <= (count vector). Returns coll.\"\n ([tcoll key val] (-assoc! tcoll key val))\n ([tcoll key val & kvs]\n (let\n [ntcoll (-assoc! tcoll key val)]\n (if\n kvs\n (recur ntcoll (first kvs) (second kvs) (nnext kvs))\n ntcoll))))\n"} {:sym reduce-kv, :meta {:doc "Reduces an associative collection. f should be a function of 3\n arguments. Returns the result of applying f to init, the first key\n and the first value in coll, then applying f to that result and the\n 2nd key and value, etc. If coll contains no entries, returns init\n and f is not called. Note that reduce-kv is supported on vectors,\n where the keys will be the ordinals.", :arglists [[f init coll]]}, :source "(defn\n reduce-kv\n \"Reduces an associative collection. f should be a function of 3\\n arguments. Returns the result of applying f to init, the first key\\n and the first value in coll, then applying f to that result and the\\n 2nd key and value, etc. If coll contains no entries, returns init\\n and f is not called. Note that reduce-kv is supported on vectors,\\n where the keys will be the ordinals.\"\n ([f init coll] (if-not (nil? coll) (-kv-reduce coll f init) init)))\n"} {:sym reset!, :meta {:doc "Sets the value of atom to newval without regard for the\n current value. Returns new-value.", :arglists ([a new-value])}, :source "(defn\n reset!\n \"Sets the value of atom to newval without regard for the\\n current value. Returns new-value.\"\n [a new-value]\n (if\n (instance? Atom a)\n (let\n [validate (.-validator a)]\n (when-not\n (nil? validate)\n (when-not\n (validate new-value)\n (throw (js/Error. \"Validator rejected reference state\"))))\n (let\n [old-value (.-state a)]\n (set! (.-state a) new-value)\n (when-not\n (nil? (.-watches a))\n (-notify-watches a old-value new-value))\n new-value))\n (-reset! a new-value)))\n"} {:sym Fn, :meta {:doc "Marker protocol"}, :methods ()} {:sym ffirst, :meta {:doc "Same as (first (first x))", :arglists ([coll])}, :source "(defn ffirst \"Same as (first (first x))\" [coll] (first (first coll)))\n"} {:sym counted?, :meta {:doc "Returns true if coll implements count in constant time", :arglists ([x])}, :source "(defn\n counted?\n \"Returns true if coll implements count in constant time\"\n [x]\n (satisfies? ICounted x))\n"} {:sym assoc-in, :meta {:doc "Associates a value in a nested associative structure, where ks is a\n sequence of keys and v is the new value and returns a new nested structure.\n If any levels do not exist, hash-maps will be created.", :arglists ([m [k & ks] v])}, :source "(defn\n assoc-in\n \"Associates a value in a nested associative structure, where ks is a\\n sequence of keys and v is the new value and returns a new nested structure.\\n If any levels do not exist, hash-maps will be created.\"\n [m [k & ks] v]\n (if ks (assoc m k (assoc-in (get m k) ks v)) (assoc m k v)))\n"} {:sym bit-test, :meta {:doc "Test bit at index n", :arglists ([x n])}, :source "(defn bit-test \"Test bit at index n\" [x n] (cljs.core/bit-test x n))\n"} {:sym ISwap, :meta {:doc "Protocol for adding swapping functionality."}, :methods (-swap!)} {:sym zero?, :meta {:doc "Returns true if num is zero, else false", :arglists ([x])}, :source "(defn\n zero?\n \"Returns true if num is zero, else false\"\n [x]\n (cljs.core/zero? x))\n"} {:sym simple-keyword?, :meta {:doc "Return true if x is a keyword without a namespace", :arglists ([x])}, :source "(defn\n simple-keyword?\n \"Return true if x is a keyword without a namespace\"\n [x]\n (and (keyword? x) (nil? (namespace x))))\n"} {:sym *main-cli-fn*, :meta {:doc "When compiled for a command-line target, whatever function\n *main-cli-fn* is set to will be called with the command-line\n argv as arguments"}, :source "(def *main-cli-fn* nil)\n"} {:sym -assoc-n, :meta {:doc "Returns a new vector with value val added at position n.", :arglists ([coll n val])}, :protocol IVector} {:sym unchecked-dec-int, :meta {:doc "Returns a number one less than x, an int.", :arglists ([x])}, :source "(defn\n unchecked-dec-int\n \"Returns a number one less than x, an int.\"\n [x]\n (cljs.core/unchecked-dec-int x))\n"} {:sym persistent!, :meta {:doc "Returns a new, persistent version of the transient collection, in\n constant time. The transient collection cannot be used after this\n call, any such use will throw an exception.", :arglists ([tcoll])}, :source "(defn\n persistent!\n \"Returns a new, persistent version of the transient collection, in\\n constant time. The transient collection cannot be used after this\\n call, any such use will throw an exception.\"\n [tcoll]\n (-persistent! tcoll))\n"} {:sym set-print-fn!, :meta {:doc "Set *print-fn* to f.", :arglists ([f])}, :source "(defn set-print-fn! \"Set *print-fn* to f.\" [f] (set! *print-fn* f))\n"} {:sym nnext, :meta {:doc "Same as (next (next x))", :arglists ([coll])}, :source "(defn nnext \"Same as (next (next x))\" [coll] (next (next coll)))\n"} {:sym not-every?, :meta {:doc "Returns false if (pred x) is logical true for every x in\n coll, else true.", :arglists ([pred coll])}, :source "(defn\n not-every?\n \"Returns false if (pred x) is logical true for every x in\\n coll, else true.\"\n [pred coll]\n (not (every? pred coll)))\n"} {:sym rem, :meta {:doc "remainder of dividing numerator by denominator.", :arglists ([n d])}, :source "(defn\n rem\n \"remainder of dividing numerator by denominator.\"\n [n d]\n (let [q (quot n d)] (- n (* d q))))\n"} {:sym ifind?, :meta {:doc "Returns true if coll implements IFind", :arglists ([x])}, :source "(defn\n ifind?\n \"Returns true if coll implements IFind\"\n [x]\n (satisfies? IFind x))\n"} {:sym some, :meta {:doc "Returns the first logical true value of (pred x) for any x in coll,\n else nil. One common idiom is to use a set as pred, for example\n this will return :fred if :fred is in the sequence, otherwise nil:\n (some #{:fred} coll)", :arglists ([pred coll])}, :source "(defn\n some\n \"Returns the first logical true value of (pred x) for any x in coll,\\n else nil. One common idiom is to use a set as pred, for example\\n this will return :fred if :fred is in the sequence, otherwise nil:\\n (some #{:fred} coll)\"\n [pred coll]\n (when (seq coll) (or (pred (first coll)) (recur pred (next coll)))))\n"} {:sym INamed, :meta {:doc "Protocol for adding a name."}, :methods (-name -namespace)} {:sym IReduce, :meta {:doc "Protocol for seq types that can reduce themselves.\n Called by cljs.core/reduce."}, :methods (-reduce)} {:sym neg-int?, :meta {:doc "Return true if x satisfies int? and is negative.", :arglists ([x])}, :source "(defn\n neg-int?\n \"Return true if x satisfies int? and is negative.\"\n [x]\n (cond\n (integer? x)\n (neg? x)\n (instance? goog.math.Integer x)\n (.isNegative x)\n (instance? goog.math.Long x)\n (.isNegative x)\n :else\n false))\n"} {:sym drop, :meta {:doc "Returns a lazy sequence of all but the first n items in coll.\n Returns a stateful transducer when no collection is provided.", :arglists [[n] [n coll]]}, :source "(defn\n drop\n \"Returns a lazy sequence of all but the first n items in coll.\\n Returns a stateful transducer when no collection is provided.\"\n ([n]\n {:pre [(number? n)]}\n (fn\n [rf]\n (let\n [na (volatile! n)]\n (fn\n ([] (rf))\n ([result] (rf result))\n ([result input]\n (let\n [n @na]\n (vswap! na dec)\n (if (pos? n) result (rf result input))))))))\n ([n coll]\n {:pre [(number? n)]}\n (let\n [step\n (fn\n [n coll]\n (let\n [s (seq coll)]\n (if (and (pos? n) s) (recur (dec n) (rest s)) s)))]\n (lazy-seq (step n coll)))))\n"} {:sym js-obj, :meta {:doc "Create JavaSript object from an even number arguments representing\n interleaved keys and values.", :arglists [[] [& keyvals]]}, :source "(defn\n js-obj\n \"Create JavaSript object from an even number arguments representing\\n interleaved keys and values.\"\n ([] (cljs.core/js-obj))\n ([& keyvals] (apply gobject/create keyvals)))\n"} {:sym ITransientCollection, :meta {:doc "Protocol for adding basic functionality to transient collections."}, :methods (-conj! -persistent!)} {:sym nth, :meta {:doc "Returns the value at the index. get returns nil if index out of\n bounds, nth throws an exception unless not-found is supplied. nth\n also works for strings, arrays, regex Matchers and Lists, and,\n in O(n) time, for sequences.", :arglists [[coll n] [coll n not-found]]}, :source "(defn\n nth\n \"Returns the value at the index. get returns nil if index out of\\n bounds, nth throws an exception unless not-found is supplied. nth\\n also works for strings, arrays, regex Matchers and Lists, and,\\n in O(n) time, for sequences.\"\n ([coll n]\n (cond\n (not (number? n))\n (throw (js/Error. \"Index argument to nth must be a number\"))\n (nil? coll)\n coll\n (implements? IIndexed coll)\n (-nth coll n)\n (array? coll)\n (if\n (and (>= n 0) (< n (.-length coll)))\n (aget coll n)\n (throw (js/Error. \"Index out of bounds\")))\n (string? coll)\n (if\n (and (>= n 0) (< n (.-length coll)))\n (.charAt coll n)\n (throw (js/Error. \"Index out of bounds\")))\n (implements? ISeq coll)\n (linear-traversal-nth coll n)\n (native-satisfies? IIndexed coll)\n (-nth coll n)\n :else\n (throw\n (js/Error.\n (str\n \"nth not supported on this type \"\n (type->str (type coll)))))))\n ([coll n not-found]\n (cond\n (not (number? n))\n (throw (js/Error. \"Index argument to nth must be a number.\"))\n (nil? coll)\n not-found\n (implements? IIndexed coll)\n (-nth coll n not-found)\n (array? coll)\n (if (and (>= n 0) (< n (.-length coll))) (aget coll n) not-found)\n (string? coll)\n (if (and (>= n 0) (< n (.-length coll))) (.charAt coll n) not-found)\n (implements? ISeq coll)\n (linear-traversal-nth coll n not-found)\n (native-satisfies? IIndexed coll)\n (-nth coll n not-found)\n :else\n (throw\n (js/Error.\n (str\n \"nth not supported on this type \"\n (type->str (type coll))))))))\n"} {:sym sorted?, :meta {:doc "Returns true if coll satisfies ISorted", :arglists ([x])}, :source "(defn\n sorted?\n \"Returns true if coll satisfies ISorted\"\n [x]\n (satisfies? ISorted x))\n"} {:sym nil?, :meta {:doc "Returns true if x is nil, false otherwise.", :arglists ([x])}, :source "(defn\n nil?\n \"Returns true if x is nil, false otherwise.\"\n [x]\n (coercive-= x nil))\n"} {:sym split-at, :meta {:doc "Returns a vector of [(take n coll) (drop n coll)]", :arglists ([n coll])}, :source "(defn\n split-at\n \"Returns a vector of [(take n coll) (drop n coll)]\"\n [n coll]\n [(take n coll) (drop n coll)])\n"} {:sym not-native, :meta {}, :source "(def not-native nil)\n"} {:sym bit-and, :meta {:doc "Bitwise and", :arglists [[x y] [x y & more]]}, :source "(defn\n bit-and\n \"Bitwise and\"\n ([x y] (cljs.core/bit-and x y))\n ([x y & more] (reduce bit-and (cljs.core/bit-and x y) more)))\n"} {:sym bounded-count, :meta {:doc "If coll is counted? returns its count, else will count at most the first n\n elements of coll using its seq", :arglists ([n coll])}, :source "(defn\n bounded-count\n \"If coll is counted? returns its count, else will count at most the first n\\n elements of coll using its seq\"\n {:added \"1.9\"}\n [n coll]\n (if\n (counted? coll)\n (count coll)\n (loop\n [i 0 s (seq coll)]\n (if (and (not (nil? s)) (< i n)) (recur (inc i) (next s)) i))))\n"} {:sym update, :meta {:doc "'Updates' a value in an associative structure, where k is a\n key and f is a function that will take the old value\n and any supplied args and return the new value, and returns a new\n structure. If the key does not exist, nil is passed as the old value.", :arglists [[m k f] [m k f x] [m k f x y] [m k f x y z] [m k f x y z & more]]}, :source "(defn\n update\n \"'Updates' a value in an associative structure, where k is a\\n key and f is a function that will take the old value\\n and any supplied args and return the new value, and returns a new\\n structure. If the key does not exist, nil is passed as the old value.\"\n ([m k f] (assoc m k (f (get m k))))\n ([m k f x] (assoc m k (f (get m k) x)))\n ([m k f x y] (assoc m k (f (get m k) x y)))\n ([m k f x y z] (assoc m k (f (get m k) x y z)))\n ([m k f x y z & more] (assoc m k (apply f (get m k) x y z more))))\n"} {:sym list*, :meta {:doc "Creates a new list containing the items prepended to the rest, the\n last of which will be treated as a sequence.", :arglists [[args] [a args] [a b args] [a b c args] [a b c d & more]]}, :source "(defn\n list*\n \"Creates a new list containing the items prepended to the rest, the\\n last of which will be treated as a sequence.\"\n ([args] (seq args))\n ([a args] (cons a args))\n ([a b args] (cons a (cons b args)))\n ([a b c args] (cons a (cons b (cons c args))))\n ([a b c d & more] (cons a (cons b (cons c (cons d (spread more)))))))\n"} {:sym update-in, :meta {:doc "'Updates' a value in a nested associative structure, where ks is a\n sequence of keys and f is a function that will take the old value\n and any supplied args and return the new value, and returns a new\n nested structure. If any levels do not exist, hash-maps will be\n created.", :arglists [[m [k & ks] f] [m [k & ks] f a] [m [k & ks] f a b] [m [k & ks] f a b c] [m [k & ks] f a b c & args]]}, :source "(defn\n update-in\n \"'Updates' a value in a nested associative structure, where ks is a\\n sequence of keys and f is a function that will take the old value\\n and any supplied args and return the new value, and returns a new\\n nested structure. If any levels do not exist, hash-maps will be\\n created.\"\n ([m [k & ks] f]\n (if\n ks\n (assoc m k (update-in (get m k) ks f))\n (assoc m k (f (get m k)))))\n ([m [k & ks] f a]\n (if\n ks\n (assoc m k (update-in (get m k) ks f a))\n (assoc m k (f (get m k) a))))\n ([m [k & ks] f a b]\n (if\n ks\n (assoc m k (update-in (get m k) ks f a b))\n (assoc m k (f (get m k) a b))))\n ([m [k & ks] f a b c]\n (if\n ks\n (assoc m k (update-in (get m k) ks f a b c))\n (assoc m k (f (get m k) a b c))))\n ([m [k & ks] f a b c & args]\n (if\n ks\n (assoc m k (apply update-in (get m k) ks f a b c args))\n (assoc m k (apply f (get m k) a b c args)))))\n"} {:sym ensure-reduced, :meta {:doc "If x is already reduced?, returns it, else returns (reduced x)", :arglists ([x])}, :source "(defn\n ensure-reduced\n \"If x is already reduced?, returns it, else returns (reduced x)\"\n [x]\n (if (reduced? x) x (reduced x)))\n"} {:sym instance?, :meta {:doc "Evaluates x and tests if it is an instance of the type\n c. Returns true or false", :arglists ([c x])}, :source "(defn\n instance?\n \"Evaluates x and tests if it is an instance of the type\\n c. Returns true or false\"\n [c x]\n (cljs.core/instance? c x))\n"} {:sym mix-collection-hash, :meta {:doc "Mix final collection hash for ordered or unordered collections.\n hash-basis is the combined collection hash, count is the number\n of elements included in the basis. Note this is the hash code\n consistent with =, different from .hashCode.\n See http://clojure.org/data_structures#hash for full algorithms.", :arglists ([hash-basis count])}, :source "(defn\n mix-collection-hash\n \"Mix final collection hash for ordered or unordered collections.\\n hash-basis is the combined collection hash, count is the number\\n of elements included in the basis. Note this is the hash code\\n consistent with =, different from .hashCode.\\n See http://clojure.org/data_structures#hash for full algorithms.\"\n [hash-basis count]\n (let\n [h1 m3-seed k1 (m3-mix-K1 hash-basis) h1 (m3-mix-H1 h1 k1)]\n (m3-fmix h1 count)))\n"} {:sym unchecked-add, :meta {:doc "Returns the sum of nums. (+) returns 0.", :arglists [[] [x] [x y] [x y & more]]}, :source "(defn\n unchecked-add\n \"Returns the sum of nums. (+) returns 0.\"\n ([] 0)\n ([x] x)\n ([x y] (cljs.core/unchecked-add x y))\n ([x y & more]\n (reduce unchecked-add (cljs.core/unchecked-add x y) more)))\n"} {:sym transformer-iterator, :meta {:doc nil, :arglists ([xform sourceIter multi])}, :source "(defn\n transformer-iterator\n [xform sourceIter multi]\n (let\n [iterator\n (TransformerIterator. EMPTY NONE false nil sourceIter multi)]\n (set!\n (.-xf iterator)\n (xform\n (fn\n ([] nil)\n ([acc] acc)\n ([acc o]\n (set! (.-buffer iterator) (.add (.-buffer iterator) o))\n acc))))\n iterator))\n"} {:sym not, :meta {:doc "Returns true if x is logical false, false otherwise.", :arglists ([x])}, :source "(defn\n not\n \"Returns true if x is logical false, false otherwise.\"\n [x]\n (cond (nil? x) true (false? x) true :else false))\n"} {:sym -vreset!, :meta {:doc "Sets the value of volatile o to new-value without regard for the\n current value. Returns new-value.", :arglists ([o new-value])}, :protocol IVolatile} {:sym with-meta, :meta {:doc "Returns an object of the same type and value as obj, with\n map m as its metadata.", :arglists ([o meta])}, :source "(defn\n with-meta\n \"Returns an object of the same type and value as obj, with\\n map m as its metadata.\"\n [o meta]\n (if\n (goog/isFunction o)\n (MetaFn. o meta)\n (when-not (nil? o) (-with-meta o meta))))\n"} {:sym unreduced, :meta {:doc "If x is reduced?, returns (deref x), else returns x", :arglists ([x])}, :source "(defn\n unreduced\n \"If x is reduced?, returns (deref x), else returns x\"\n [x]\n (if (reduced? x) (deref x) x))\n"} {:sym record?, :meta {:doc "Return true if x satisfies IRecord", :arglists ([x])}, :source "(defn\n record?\n \"Return true if x satisfies IRecord\"\n [x]\n (satisfies? IRecord x))\n"} {:sym type, :meta {:doc "Return x's constructor.", :arglists ([x])}, :source "(defn\n type\n \"Return x's constructor.\"\n [x]\n (when-not (nil? x) (.-constructor x)))\n"} {:sym identical?, :meta {:doc "Tests if 2 arguments are the same object", :arglists ([x y])}, :source "(defn\n identical?\n \"Tests if 2 arguments are the same object\"\n [x y]\n (cljs.core/identical? x y))\n"} {:sym -namespace, :meta {:doc "Returns the namespace String of x.", :arglists ([x])}, :protocol INamed} {:sym unchecked-divide-int, :meta {:doc "If no denominators are supplied, returns 1/numerator,\n else returns numerator divided by all of the denominators.", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n unchecked-divide-int\n \"If no denominators are supplied, returns 1/numerator,\\n else returns numerator divided by all of the denominators.\"\n ([x] (unchecked-divide-int 1 x))\n ([x y] (cljs.core/divide x y))\n ([x y & more]\n (reduce unchecked-divide-int (unchecked-divide-int x y) more)))\n"} {:sym *out*, :meta {}, :source "(def *out* nil)\n"} {:sym hash-string, :meta {:doc nil, :arglists ([k])}, :source "(defn\n hash-string\n [k]\n (when\n (> string-hash-cache-count 255)\n (set! string-hash-cache (js-obj))\n (set! string-hash-cache-count 0))\n (if\n (nil? k)\n 0\n (let\n [h (unchecked-get string-hash-cache k)]\n (if (number? h) h (add-to-string-hash-cache k)))))\n"} {:sym set-validator!, :meta {:doc "Sets the validator-fn for an atom. validator-fn must be nil or a\n side-effect-free fn of one argument, which will be passed the intended\n new state on any state change. If the new state is unacceptable, the\n validator-fn should return false or throw an Error. If the current state\n is not acceptable to the new validator, an Error will be thrown and the\n validator will not be changed.", :arglists ([iref val])}, :source "(defn\n set-validator!\n \"Sets the validator-fn for an atom. validator-fn must be nil or a\\n side-effect-free fn of one argument, which will be passed the intended\\n new state on any state change. If the new state is unacceptable, the\\n validator-fn should return false or throw an Error. If the current state\\n is not acceptable to the new validator, an Error will be thrown and the\\n validator will not be changed.\"\n [iref val]\n (when\n (and (some? val) (not (val (-deref iref))))\n (throw (js/Error. \"Validator rejected reference state\")))\n (set! (.-validator iref) val))\n"} {:sym ident?, :meta {:doc "Return true if x is a symbol or keyword", :arglists ([x])}, :source "(defn\n ident?\n \"Return true if x is a symbol or keyword\"\n [x]\n (or (keyword? x) (symbol? x)))\n"} {:sym -meta, :meta {:doc "Returns the metadata of object o.", :arglists ([o])}, :protocol IMeta} {:sym swap!, :meta {:doc "Atomically swaps the value of atom to be:\n (apply f current-value-of-atom args). Note that f may be called\n multiple times, and thus should be free of side effects. Returns\n the value that was swapped in.", :arglists [[a f] [a f x] [a f x y] [a f x y & more]]}, :source "(defn\n swap!\n \"Atomically swaps the value of atom to be:\\n (apply f current-value-of-atom args). Note that f may be called\\n multiple times, and thus should be free of side effects. Returns\\n the value that was swapped in.\"\n ([a f]\n (if (instance? Atom a) (reset! a (f (.-state a))) (-swap! a f)))\n ([a f x]\n (if (instance? Atom a) (reset! a (f (.-state a) x)) (-swap! a f x)))\n ([a f x y]\n (if\n (instance? Atom a)\n (reset! a (f (.-state a) x y))\n (-swap! a f x y)))\n ([a f x y & more]\n (if\n (instance? Atom a)\n (reset! a (apply f (.-state a) x y more))\n (-swap! a f x y more))))\n"} {:sym -chunked-next, :meta {:doc "Returns a new collection of coll without the first chunk.", :arglists ([coll])}, :protocol IChunkedNext} {:sym unchecked-subtract, :meta {:doc "If no ys are supplied, returns the negation of x, else subtracts\n the ys from x and returns the result.", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n unchecked-subtract\n \"If no ys are supplied, returns the negation of x, else subtracts\\n the ys from x and returns the result.\"\n ([x] (cljs.core/unchecked-subtract x))\n ([x y] (cljs.core/unchecked-subtract x y))\n ([x y & more]\n (reduce unchecked-subtract (cljs.core/unchecked-subtract x y) more)))\n"} {:sym IMap, :meta {:doc "Protocol for adding mapping functionality to collections."}, :methods (-dissoc)} {:sym cloneable?, :meta {:doc "Return true if x implements ICloneable protocol.", :arglists ([value])}, :source "(defn\n cloneable?\n \"Return true if x implements ICloneable protocol.\"\n [value]\n (satisfies? ICloneable value))\n"} {:sym qualified-ident?, :meta {:doc "Return true if x is a symbol or keyword with a namespace", :arglists ([x])}, :source "(defn\n qualified-ident?\n \"Return true if x is a symbol or keyword with a namespace\"\n [x]\n (boolean (and (ident? x) (namespace x) true)))\n"} {:sym hash-string*, :meta {:doc nil, :arglists ([s])}, :source "(defn\n hash-string*\n [s]\n (if-not\n (nil? s)\n (let\n [len (.-length s)]\n (if\n (pos? len)\n (loop\n [i 0 hash 0]\n (if\n (< i len)\n (recur (inc i) (+ (imul 31 hash) (.charCodeAt s i)))\n hash))\n 0))\n 0))\n"} {:sym true?, :meta {:doc "Returns true if x is the value true, false otherwise.", :arglists ([x])}, :source "(defn\n true?\n \"Returns true if x is the value true, false otherwise.\"\n [x]\n (cljs.core/true? x))\n"} {:sym array, :meta {:doc "Creates a new javascript array.\n@param {...*} var_args", :arglists ([var-args])}, :source "(defn\n array\n \"Creates a new javascript array.\\n@param {...*} var_args\"\n [var-args]\n (let\n [a (js/Array. (alength (cljs.core/js-arguments)))]\n (loop\n [i 0]\n (if\n (< i (alength a))\n (do (aset a i (aget (cljs.core/js-arguments) i)) (recur (inc i)))\n a))))\n"} {:sym -peek, :meta {:doc "Returns the item from the top of the stack. Is used by cljs.core/peek.", :arglists ([coll])}, :protocol IStack} {:sym ISeq, :meta {:doc "Protocol for collections to provide access to their items as sequences."}, :methods (-first -rest)} {:sym empty, :meta {:doc "Returns an empty collection of the same category as coll, or nil", :arglists ([coll])}, :source "(defn\n empty\n \"Returns an empty collection of the same category as coll, or nil\"\n [coll]\n (when-not (nil? coll) (-empty coll)))\n"} {:sym volatile!, :meta {:doc "Creates and returns a Volatile with an initial value of val.", :arglists ([val])}, :source "(defn\n volatile!\n \"Creates and returns a Volatile with an initial value of val.\"\n [val]\n (Volatile. val))\n"} {:sym /, :meta {:doc "If no denominators are supplied, returns 1/numerator,\n else returns numerator divided by all of the denominators.", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n /\n \"If no denominators are supplied, returns 1/numerator,\\n else returns numerator divided by all of the denominators.\"\n ([x] (/ 1 x))\n ([x y] (cljs.core/divide x y))\n ([x y & more] (reduce / (/ x y) more)))\n"} {:sym bit-or, :meta {:doc "Bitwise or", :arglists [[x y] [x y & more]]}, :source "(defn\n bit-or\n \"Bitwise or\"\n ([x y] (cljs.core/bit-or x y))\n ([x y & more] (reduce bit-or (cljs.core/bit-or x y) more)))\n"} {:sym m3-fmix, :meta {:doc nil, :arglists ([h1 len])}, :source "(defn\n m3-fmix\n [h1 len]\n (as->\n (int h1)\n h1\n (bit-xor h1 len)\n (bit-xor h1 (unsigned-bit-shift-right h1 16))\n (imul h1 (int 2246822507))\n (bit-xor h1 (unsigned-bit-shift-right h1 13))\n (imul h1 (int 3266489909))\n (bit-xor h1 (unsigned-bit-shift-right h1 16))))\n"} {:sym vector, :meta {:doc "Creates a new vector containing the args.", :arglists ([& args])}, :source "(defn\n vector\n \"Creates a new vector containing the args.\"\n [& args]\n (if\n (and (instance? IndexedSeq args) (zero? (.-i args)))\n (.fromArray PersistentVector (.-arr args) true)\n (vec args)))\n"} {:sym >=, :meta {:doc "Returns non-nil if nums are in monotonically non-increasing order,\n otherwise false.", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n >=\n \"Returns non-nil if nums are in monotonically non-increasing order,\\n otherwise false.\"\n ([x] true)\n ([x y] (cljs.core/>= x y))\n ([x y & more]\n (if\n (cljs.core/>= x y)\n (if\n (next more)\n (recur y (first more) (next more))\n (cljs.core/>= y (first more)))\n false)))\n"} {:sym drop-last, :meta {:doc "Return a lazy sequence of all but the last n (default 1) items in coll", :arglists [[s] [n s]]}, :source "(defn\n drop-last\n \"Return a lazy sequence of all but the last n (default 1) items in coll\"\n ([s] (drop-last 1 s))\n ([n s] (map (fn [x _] x) s (drop n s))))\n"} {:sym object?, :meta {:doc "Returns true if x's constructor is Object", :arglists ([x])}, :source "(defn\n object?\n \"Returns true if x's constructor is Object\"\n [x]\n (if-not (nil? x) (identical? (.-constructor x) js/Object) false))\n"} {:sym not-empty, :meta {:doc "If coll is empty, returns nil, else coll", :arglists ([coll])}, :source "(defn\n not-empty\n \"If coll is empty, returns nil, else coll\"\n [coll]\n (when (seq coll) coll))\n"} {:sym partition, :meta {:doc "Returns a lazy sequence of lists of n items each, at offsets step\n apart. If step is not supplied, defaults to n, i.e. the partitions\n do not overlap. If a pad collection is supplied, use its elements as\n necessary to complete last partition up to n items. In case there are\n not enough padding elements, return a partition with less than n items.", :arglists [[n coll] [n step coll] [n step pad coll]]}, :source "(defn\n partition\n \"Returns a lazy sequence of lists of n items each, at offsets step\\n apart. If step is not supplied, defaults to n, i.e. the partitions\\n do not overlap. If a pad collection is supplied, use its elements as\\n necessary to complete last partition up to n items. In case there are\\n not enough padding elements, return a partition with less than n items.\"\n ([n coll] (partition n n coll))\n ([n step coll]\n (lazy-seq\n (when-let\n [s (seq coll)]\n (let\n [p (take n s)]\n (when\n (== n (count p))\n (cons p (partition n step (drop step s))))))))\n ([n step pad coll]\n (lazy-seq\n (when-let\n [s (seq coll)]\n (let\n [p (take n s)]\n (if\n (== n (count p))\n (cons p (partition n step pad (drop step s)))\n (list (take n (concat p pad)))))))))\n"} {:sym DEMUNGE_PATTERN, :meta {}, :source "(def DEMUNGE_PATTERN nil)\n"} {:sym IAssociative, :meta {:doc "Protocol for adding associativity to collections."}, :methods (-assoc -contains-key?)} {:sym bit-flip, :meta {:doc "Flip bit at index n", :arglists ([x n])}, :source "(defn bit-flip \"Flip bit at index n\" [x n] (cljs.core/bit-flip x n))\n"} {:sym long-array, :meta {:doc "Creates an array of longs. Does not coerce array, provided for compatibility\n with Clojure.", :arglists [[size-or-seq] [size init-val-or-seq]]}, :source "(defn\n long-array\n \"Creates an array of longs. Does not coerce array, provided for compatibility\\n with Clojure.\"\n ([size-or-seq]\n (if\n (number? size-or-seq)\n (long-array size-or-seq nil)\n (into-array size-or-seq)))\n ([size init-val-or-seq]\n (let\n [a (make-array size)]\n (if\n (seq? init-val-or-seq)\n (let\n [s (seq init-val-or-seq)]\n (loop\n [i 0 s s]\n (if\n (and s (< i size))\n (do (aset a i (first s)) (recur (inc i) (next s)))\n a)))\n (do (dotimes [i size] (aset a i init-val-or-seq)) a)))))\n"} {:sym ISeqable, :meta {:doc "Protocol for adding the ability to a type to be transformed into a sequence."}, :methods (-seq)} {:sym js-mod, :meta {:doc "Modulus of num and div with original javascript behavior. i.e. bug for negative numbers", :arglists ([n d])}, :source "(defn\n js-mod\n \"Modulus of num and div with original javascript behavior. i.e. bug for negative numbers\"\n [n d]\n (cljs.core/js-mod n d))\n"} {:sym integer?, :meta {:doc "Returns true if n is a JavaScript number with no decimal part.", :arglists ([n])}, :source "(defn\n integer?\n \"Returns true if n is a JavaScript number with no decimal part.\"\n [n]\n (and\n (number? n)\n (not (js/isNaN n))\n (not (identical? n js/Infinity))\n (== (js/parseFloat n) (js/parseInt n 10))))\n"} {:sym mapv, :meta {:doc "Returns a vector consisting of the result of applying f to the\n set of first items of each coll, followed by applying f to the set\n of second items in each coll, until any one of the colls is\n exhausted. Any remaining items in other colls are ignored. Function\n f should accept number-of-colls arguments.", :arglists [[f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls]]}, :source "(defn\n mapv\n \"Returns a vector consisting of the result of applying f to the\\n set of first items of each coll, followed by applying f to the set\\n of second items in each coll, until any one of the colls is\\n exhausted. Any remaining items in other colls are ignored. Function\\n f should accept number-of-colls arguments.\"\n ([f coll]\n (->\n (reduce (fn [v o] (conj! v (f o))) (transient []) coll)\n persistent!))\n ([f c1 c2] (into [] (map f c1 c2)))\n ([f c1 c2 c3] (into [] (map f c1 c2 c3)))\n ([f c1 c2 c3 & colls] (into [] (apply map f c1 c2 c3 colls))))\n"} {:sym infinite?, :meta {:doc "Returns true for Infinity and -Infinity values.", :arglists ([x])}, :source "(defn\n infinite?\n \"Returns true for Infinity and -Infinity values.\"\n [x]\n (or\n (identical? x js/Number.POSITIVE_INFINITY)\n (identical? x js/Number.NEGATIVE_INFINITY)))\n"} {:sym ISequential, :meta {:doc "Marker interface indicating a persistent collection of sequential items"}, :methods ()} {:sym equiv-map, :meta {:doc "Test map equivalence. Returns true if x equals y, otherwise returns false.", :arglists ([x y])}, :source "(defn\n equiv-map\n \"Test map equivalence. Returns true if x equals y, otherwise returns false.\"\n [x y]\n (boolean\n (when\n (and (map? y) (not (record? y)))\n (when\n (== (count x) (count y))\n (if\n (satisfies? IKVReduce x)\n (reduce-kv\n (fn\n [_ k v]\n (if (= (get y k never-equiv) v) true (reduced false)))\n true\n x)\n (every?\n (fn [xkv] (= (get y (first xkv) never-equiv) (second xkv)))\n x))))))\n"} {:sym object-array, :meta {:doc "Creates an array of objects. Does not coerce array, provided for compatibility\n with Clojure.", :arglists [[size-or-seq] [size init-val-or-seq]]}, :source "(defn\n object-array\n \"Creates an array of objects. Does not coerce array, provided for compatibility\\n with Clojure.\"\n ([size-or-seq]\n (if\n (number? size-or-seq)\n (object-array size-or-seq nil)\n (into-array size-or-seq)))\n ([size init-val-or-seq]\n (let\n [a (make-array size)]\n (if\n (seq? init-val-or-seq)\n (let\n [s (seq init-val-or-seq)]\n (loop\n [i 0 s s]\n (if\n (and s (< i size))\n (do (aset a i (first s)) (recur (inc i) (next s)))\n a)))\n (do (dotimes [i size] (aset a i init-val-or-seq)) a)))))\n"} {:sym seq-iter, :meta {:doc nil, :arglists ([coll])}, :source "(defn seq-iter [coll] (SeqIter. INIT coll))\n"} {:sym IChunkedSeq, :meta {:doc "Protocol for accessing a collection as sequential chunks."}, :methods (-chunked-first -chunked-rest)} {:sym -next, :meta {:doc "Returns a new collection of coll without the first item. In contrast to\n rest, it should return nil if there are no more items, e.g.\n (next []) => nil\n (next nil) => nil", :arglists ([coll])}, :protocol INext} {:sym flatten, :meta {:doc "Takes any nested combination of sequential things (lists, vectors,\n etc.) and returns their contents as a single, flat sequence.\n (flatten nil) returns nil.", :arglists ([x])}, :source "(defn\n flatten\n \"Takes any nested combination of sequential things (lists, vectors,\\n etc.) and returns their contents as a single, flat sequence.\\n (flatten nil) returns nil.\"\n [x]\n (filter\n (fn* [p1__18662#] (not (sequential? p1__18662#)))\n (rest (tree-seq sequential? seq x))))\n"} {:sym -dissoc, :meta {:doc "Returns a new collection of coll without the mapping for key k.", :arglists ([coll k])}, :protocol IMap} {:sym doubles, :meta {:doc nil, :arglists ([x])}, :source "(defn doubles [x] x)\n"} {:sym -contains-key?, :meta {:doc "Returns true if k is a key in coll.", :arglists ([coll k])}, :protocol IAssociative} {:sym ifn?, :meta {:doc "Returns true if f returns true for fn? or satisfies IFn.", :arglists ([f])}, :source "(defn\n ifn?\n \"Returns true if f returns true for fn? or satisfies IFn.\"\n [f]\n (or (fn? f) (satisfies? IFn f)))\n"} {:sym IAtom, :meta {:doc "Marker protocol indicating an atom."}, :methods ()} {:sym nat-int?, :meta {:doc "Return true if x satisfies int? and is a natural integer value.", :arglists ([x])}, :source "(defn\n nat-int?\n \"Return true if x satisfies int? and is a natural integer value.\"\n [x]\n (cond\n (integer? x)\n (or (not (neg? x)) (zero? x))\n (instance? goog.math.Integer x)\n (or (not (.isNegative x)) (.isZero x))\n (instance? goog.math.Long x)\n (or (not (.isNegative x)) (.isZero x))\n :else\n false))\n"} {:sym IWatchable, :meta {:doc "Protocol for types that can be watched. Currently only implemented by Atom."}, :methods (-add-watch -notify-watches -remove-watch)} {:sym subvec, :meta {:doc "Returns a persistent vector of the items in vector from\n start (inclusive) to end (exclusive). If end is not supplied,\n defaults to (count vector). This operation is O(1) and very fast, as\n the resulting vector shares structure with the original and no\n trimming is done.", :arglists [[v start] [v start end]]}, :source "(defn\n subvec\n \"Returns a persistent vector of the items in vector from\\n start (inclusive) to end (exclusive). If end is not supplied,\\n defaults to (count vector). This operation is O(1) and very fast, as\\n the resulting vector shares structure with the original and no\\n trimming is done.\"\n ([v start] (subvec v start (count v)))\n ([v start end]\n (assert (and (not (nil? start)) (not (nil? end))))\n (build-subvec nil v start end nil)))\n"} {:sym -pop!, :meta {:doc "Returns tcoll with the last item removed from it.", :arglists ([tcoll])}, :protocol ITransientVector} {:sym partial, :meta {:doc "Takes a function f and fewer than the normal arguments to f, and\n returns a fn that takes a variable number of additional args. When\n called, the returned function calls f with args + additional args.", :arglists [[f] [f arg1] [f arg1 arg2] [f arg1 arg2 arg3] [f arg1 arg2 arg3 & more]]}, :source "(defn\n partial\n \"Takes a function f and fewer than the normal arguments to f, and\\n returns a fn that takes a variable number of additional args. When\\n called, the returned function calls f with args + additional args.\"\n ([f] f)\n ([f arg1]\n (fn\n ([] (f arg1))\n ([x] (f arg1 x))\n ([x y] (f arg1 x y))\n ([x y z] (f arg1 x y z))\n ([x y z & args] (apply f arg1 x y z args))))\n ([f arg1 arg2]\n (fn\n ([] (f arg1 arg2))\n ([x] (f arg1 arg2 x))\n ([x y] (f arg1 arg2 x y))\n ([x y z] (f arg1 arg2 x y z))\n ([x y z & args] (apply f arg1 arg2 x y z args))))\n ([f arg1 arg2 arg3]\n (fn\n ([] (f arg1 arg2 arg3))\n ([x] (f arg1 arg2 arg3 x))\n ([x y] (f arg1 arg2 arg3 x y))\n ([x y z] (f arg1 arg2 arg3 x y z))\n ([x y z & args] (apply f arg1 arg2 arg3 x y z args))))\n ([f arg1 arg2 arg3 & more]\n (fn [& args] (apply f arg1 arg2 arg3 (concat more args)))))\n"} {:sym chunked-seq?, :meta {:doc "Return true if x is satisfies IChunkedSeq.", :arglists ([x])}, :source "(defn\n chunked-seq?\n \"Return true if x is satisfies IChunkedSeq.\"\n [x]\n (implements? IChunkedSeq x))\n"} {:sym replicate, :meta {:doc "DEPRECATED: Use 'repeat' instead.\n Returns a lazy seq of n xs.", :arglists ([n x])}, :source "(defn\n replicate\n \"DEPRECATED: Use 'repeat' instead.\\n Returns a lazy seq of n xs.\"\n [n x]\n (take n (repeat x)))\n"} {:sym reduced, :meta {:doc "Wraps x in a way such that a reduce will terminate with the value x", :arglists ([x])}, :source "(defn\n reduced\n \"Wraps x in a way such that a reduce will terminate with the value x\"\n [x]\n (Reduced. x))\n"} {:sym ITransientSet, :meta {:doc "Protocol for adding set functionality to a transient collection."}, :methods (-disjoin!)} {:sym unchecked-byte, :meta {:doc nil, :arglists ([x])}, :source "(defn unchecked-byte [x] x)\n"} {:sym every-pred, :meta {:doc "Takes a set of predicates and returns a function f that returns true if all of its\n composing predicates return a logical true value against all of its arguments, else it returns\n false. Note that f is short-circuiting in that it will stop execution on the first\n argument that triggers a logical false result against the original predicates.", :arglists [[p] [p1 p2] [p1 p2 p3] [p1 p2 p3 & ps]]}, :source "(defn\n every-pred\n \"Takes a set of predicates and returns a function f that returns true if all of its\\n composing predicates return a logical true value against all of its arguments, else it returns\\n false. Note that f is short-circuiting in that it will stop execution on the first\\n argument that triggers a logical false result against the original predicates.\"\n ([p]\n (fn\n ep1\n ([] true)\n ([x] (boolean (p x)))\n ([x y] (boolean (and (p x) (p y))))\n ([x y z] (boolean (and (p x) (p y) (p z))))\n ([x y z & args] (boolean (and (ep1 x y z) (every? p args))))))\n ([p1 p2]\n (fn\n ep2\n ([] true)\n ([x] (boolean (and (p1 x) (p2 x))))\n ([x y] (boolean (and (p1 x) (p1 y) (p2 x) (p2 y))))\n ([x y z] (boolean (and (p1 x) (p1 y) (p1 z) (p2 x) (p2 y) (p2 z))))\n ([x y z & args]\n (boolean\n (and\n (ep2 x y z)\n (every?\n (fn* [p1__18649#] (and (p1 p1__18649#) (p2 p1__18649#)))\n args))))))\n ([p1 p2 p3]\n (fn\n ep3\n ([] true)\n ([x] (boolean (and (p1 x) (p2 x) (p3 x))))\n ([x y] (boolean (and (p1 x) (p2 x) (p3 x) (p1 y) (p2 y) (p3 y))))\n ([x y z]\n (boolean\n (and\n (p1 x)\n (p2 x)\n (p3 x)\n (p1 y)\n (p2 y)\n (p3 y)\n (p1 z)\n (p2 z)\n (p3 z))))\n ([x y z & args]\n (boolean\n (and\n (ep3 x y z)\n (every?\n (fn*\n [p1__18650#]\n (and (p1 p1__18650#) (p2 p1__18650#) (p3 p1__18650#)))\n args))))))\n ([p1 p2 p3 & ps]\n (let\n [ps (list* p1 p2 p3 ps)]\n (fn\n epn\n ([] true)\n ([x] (every? (fn* [p1__18651#] (p1__18651# x)) ps))\n ([x y]\n (every?\n (fn* [p1__18652#] (and (p1__18652# x) (p1__18652# y)))\n ps))\n ([x y z]\n (every?\n (fn*\n [p1__18653#]\n (and (p1__18653# x) (p1__18653# y) (p1__18653# z)))\n ps))\n ([x y z & args]\n (boolean\n (and\n (epn x y z)\n (every? (fn* [p1__18654#] (every? p1__18654# args)) ps))))))))\n"} {:sym missing-protocol, :meta {:doc nil, :arglists ([proto obj])}, :source "(defn\n missing-protocol\n [proto obj]\n (let\n [ty\n (type obj)\n ty\n (if\n (and ty (.-cljs$lang$type ty))\n (.-cljs$lang$ctorStr ty)\n (goog/typeOf obj))]\n (js/Error.\n (.join\n (array\n \"No protocol method \"\n proto\n \" defined for type \"\n ty\n \": \"\n obj)\n \"\"))))\n"} {:sym load-file, :meta {:doc nil, :arglists ([file])}, :source "(defn\n load-file\n [file]\n (when-not js/COMPILED (cljs.core/load-file* file)))\n"} {:sym distinct?, :meta {:doc "Returns true if no two of the arguments are =", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n distinct?\n \"Returns true if no two of the arguments are =\"\n ([x] true)\n ([x y] (not (= x y)))\n ([x y & more]\n (if\n (not (= x y))\n (loop\n [s #{x y} xs more]\n (let\n [x (first xs) etc (next xs)]\n (if xs (if (contains? s x) false (recur (conj s x) etc)) true)))\n false)))\n"} {:sym pos-int?, :meta {:doc "Return true if x satisfies int? and is positive.", :arglists ([x])}, :source "(defn\n pos-int?\n \"Return true if x satisfies int? and is positive.\"\n [x]\n (cond\n (integer? x)\n (pos? x)\n (instance? goog.math.Integer x)\n (and (not (.isNegative x)) (not (.isZero x)))\n (instance? goog.math.Long x)\n (and (not (.isNegative x)) (not (.isZero x)))\n :else\n false))\n"} {:sym unchecked-short, :meta {:doc nil, :arglists ([x])}, :source "(defn unchecked-short [x] x)\n"} {:sym odd?, :meta {:doc "Returns true if n is odd, throws an exception if n is not an integer", :arglists ([n])}, :source "(defn\n odd?\n \"Returns true if n is odd, throws an exception if n is not an integer\"\n [n]\n (not (even? n)))\n"} {:sym reduceable?, :meta {:doc "Returns true if coll satisfies IReduce", :arglists ([x])}, :source "(defn\n reduceable?\n \"Returns true if coll satisfies IReduce\"\n [x]\n (satisfies? IReduce x))\n"} {:sym string-hash-cache, :meta {}, :source "(def string-hash-cache (js-obj))\n"} {:sym inc, :meta {:doc "Returns a number one greater than num.", :arglists ([x])}, :source "(defn\n inc\n \"Returns a number one greater than num.\"\n [x]\n (cljs.core/+ x 1))\n"} {:sym type->str, :meta {:doc nil, :arglists ([ty])}, :source "(defn type->str [ty] (if-let [s (.-cljs$lang$ctorStr ty)] s (str ty)))\n"} {:sym bit-clear, :meta {:doc "Clear bit at index n", :arglists ([x n])}, :source "(defn bit-clear \"Clear bit at index n\" [x n] (cljs.core/bit-clear x n))\n"} {:sym filter, :meta {:doc "Returns a lazy sequence of the items in coll for which\n (pred item) returns true. pred must be free of side-effects.\n Returns a transducer when no collection is provided.", :arglists [[pred] [pred coll]]}, :source "(defn\n filter\n \"Returns a lazy sequence of the items in coll for which\\n (pred item) returns true. pred must be free of side-effects.\\n Returns a transducer when no collection is provided.\"\n ([pred]\n (fn\n [rf]\n (fn\n ([] (rf))\n ([result] (rf result))\n ([result input] (if (pred input) (rf result input) result)))))\n ([pred coll]\n (lazy-seq\n (when-let\n [s (seq coll)]\n (if\n (chunked-seq? s)\n (let\n [c (chunk-first s) size (count c) b (chunk-buffer size)]\n (dotimes\n [i size]\n (when (pred (-nth c i)) (chunk-append b (-nth c i))))\n (chunk-cons (chunk b) (filter pred (chunk-rest s))))\n (let\n [f (first s) r (rest s)]\n (if (pred f) (cons f (filter pred r)) (filter pred r))))))))\n", :examples [{:body (do ["Exclude languages with single character names"] (filter (fn* [p1__18668#] (> (count p1__18668#) 1)) ["Java" "Lisp" "Fortran" "C" "D" "C++"])), :body-str "(do\n [\"Exclude languages with single character names\"]\n (filter\n (fn* [p1__18668#] (> (count p1__18668#) 1))\n [\"Java\" \"Lisp\" \"Fortran\" \"C\" \"D\" \"C++\"]))\n", :id "cljs.core/filter/0"}]} {:sym -assoc-n!, :meta {:doc "Returns tcoll with value val added at position n.", :arglists ([tcoll n val])}, :protocol ITransientVector} {:sym IWithMeta, :meta {:doc "Protocol for adding metadata to an object."}, :methods (-with-meta)} {:sym list, :meta {:doc "Creates a new list containing the items.", :arglists ([& xs])}, :source "(defn\n list\n \"Creates a new list containing the items.\"\n [& xs]\n (let\n [arr\n (if\n (and (instance? IndexedSeq xs) (zero? (.-i xs)))\n (.-arr xs)\n (let\n [arr (array)]\n (loop\n [xs xs]\n (if-not\n (nil? xs)\n (do (.push arr (-first xs)) (recur (-next xs)))\n arr))))]\n (loop\n [i (alength arr) r ()]\n (if (> i 0) (recur (dec i) (-conj r (aget arr (dec i)))) r))))\n"} {:sym +, :meta {:doc "Returns the sum of nums. (+) returns 0.", :arglists [[] [x] [x y] [x y & more]]}, :source "(defn\n +\n \"Returns the sum of nums. (+) returns 0.\"\n ([] 0)\n ([x] x)\n ([x y] (cljs.core/+ x y))\n ([x y & more] (reduce + (cljs.core/+ x y) more)))\n"} {:sym aset, :meta {:doc "Sets the value at the index/indices. Works on JavaScript arrays.\n Returns val.", :arglists [[array idx val] [array idx idx2 & idxv]]}, :source "(defn\n aset\n \"Sets the value at the index/indices. Works on JavaScript arrays.\\n Returns val.\"\n ([array idx val] (cljs.core/aset array idx val))\n ([array idx idx2 & idxv] (apply aset (aget array idx) idx2 idxv)))\n"} {:sym int-rotate-left, :meta {:doc nil, :arglists ([x n])}, :source "(defn\n int-rotate-left\n [x n]\n (bit-or (bit-shift-left x n) (unsigned-bit-shift-right x (- n))))\n"} {:sym keyword, :meta {:doc "Returns a Keyword with the given namespace and name. Do not use :\n in the keyword strings, it will be added automatically.", :arglists [[name] [ns name]]}, :source "(defn\n keyword\n \"Returns a Keyword with the given namespace and name. Do not use :\\n in the keyword strings, it will be added automatically.\"\n ([name]\n (cond\n (keyword? name)\n name\n (symbol? name)\n (Keyword.\n (cljs.core/namespace name)\n (cljs.core/name name)\n (.-str name)\n nil)\n (string? name)\n (let\n [parts (.split name \"/\")]\n (if\n (== (alength parts) 2)\n (Keyword. (aget parts 0) (aget parts 1) name nil)\n (Keyword. nil (aget parts 0) name nil)))))\n ([ns name]\n (let\n [ns\n (cond\n (keyword? ns)\n (cljs.core/name ns)\n (symbol? ns)\n (cljs.core/name ns)\n :else\n ns)\n name\n (cond\n (keyword? name)\n (cljs.core/name name)\n (symbol? name)\n (cljs.core/name name)\n :else\n name)]\n (Keyword. ns name (str (when ns (str ns \"/\")) name) nil))))\n"} {:sym *ns*, :meta {:doc "Var bound to the current namespace. Only used for bootstrapping."}, :source "(def *ns* nil)\n"} {:sym *assert*, :meta {}, :source "(def *assert* true)\n"} {:sym ICollection, :meta {:doc "Protocol for adding to a collection."}, :methods (-conj)} {:sym chars, :meta {:doc nil, :arglists ([x])}, :source "(defn chars [x] x)\n"} {:sym next, :meta {:doc "Returns a seq of the items after the first. Calls seq on its\n argument. If there are no more items, returns nil", :arglists ([coll])}, :source "(defn\n next\n \"Returns a seq of the items after the first. Calls seq on its\\n argument. If there are no more items, returns nil\"\n [coll]\n (when-not\n (nil? coll)\n (if (implements? INext coll) (-next coll) (seq (rest coll)))))\n"} {:sym ASeq, :meta {:doc "Marker protocol indicating an array sequence."}, :methods ()} {:sym IFn, :meta {:doc "Protocol for adding the ability to invoke an object as a function.\n For example, a vector can also be used to look up a value:\n ([1 2 3 4] 1) => 2"}, :methods (-invoke)} {:sym -reset!, :meta {:doc "Sets the value of o to new-value.", :arglists ([o new-value])}, :protocol IReset} {:sym -rest, :meta {:doc "Returns a new collection of coll without the first item. It should\n always return a seq, e.g.\n (rest []) => ()\n (rest nil) => ()", :arglists ([coll])}, :protocol ISeq} {:sym nil-iter, :meta {:doc nil, :arglists ([])}, :source "(defn\n nil-iter\n []\n (reify\n Object\n (hasNext [_] false)\n (next [_] (js/Error. \"No such element\"))\n (remove [_] (js/Error. \"Unsupported operation\"))))\n"} {:sym false?, :meta {:doc "Returns true if x is the value false, false otherwise.", :arglists ([x])}, :source "(defn\n false?\n \"Returns true if x is the value false, false otherwise.\"\n [x]\n (cljs.core/false? x))\n"} {:sym *print-readably*, :meta {:doc "When set to logical false, strings and characters will be printed with\n non-alphanumeric characters converted to the appropriate escape sequences.\n\n Defaults to true"}, :source "(def *print-readably* true)\n"} {:sym ints, :meta {:doc nil, :arglists ([x])}, :source "(defn ints [x] x)\n"} {:sym some-fn, :meta {:doc "Takes a set of predicates and returns a function f that returns the first logical true value\n returned by one of its composing predicates against any of its arguments, else it returns\n logical false. Note that f is short-circuiting in that it will stop execution on the first\n argument that triggers a logical true result against the original predicates.", :arglists [[p] [p1 p2] [p1 p2 p3] [p1 p2 p3 & ps]]}, :source "(defn\n some-fn\n \"Takes a set of predicates and returns a function f that returns the first logical true value\\n returned by one of its composing predicates against any of its arguments, else it returns\\n logical false. Note that f is short-circuiting in that it will stop execution on the first\\n argument that triggers a logical true result against the original predicates.\"\n ([p]\n (fn\n sp1\n ([] nil)\n ([x] (p x))\n ([x y] (or (p x) (p y)))\n ([x y z] (or (p x) (p y) (p z)))\n ([x y z & args] (or (sp1 x y z) (some p args)))))\n ([p1 p2]\n (fn\n sp2\n ([] nil)\n ([x] (or (p1 x) (p2 x)))\n ([x y] (or (p1 x) (p1 y) (p2 x) (p2 y)))\n ([x y z] (or (p1 x) (p1 y) (p1 z) (p2 x) (p2 y) (p2 z)))\n ([x y z & args]\n (or\n (sp2 x y z)\n (some\n (fn* [p1__18655#] (or (p1 p1__18655#) (p2 p1__18655#)))\n args)))))\n ([p1 p2 p3]\n (fn\n sp3\n ([] nil)\n ([x] (or (p1 x) (p2 x) (p3 x)))\n ([x y] (or (p1 x) (p2 x) (p3 x) (p1 y) (p2 y) (p3 y)))\n ([x y z]\n (or\n (p1 x)\n (p2 x)\n (p3 x)\n (p1 y)\n (p2 y)\n (p3 y)\n (p1 z)\n (p2 z)\n (p3 z)))\n ([x y z & args]\n (or\n (sp3 x y z)\n (some\n (fn*\n [p1__18656#]\n (or (p1 p1__18656#) (p2 p1__18656#) (p3 p1__18656#)))\n args)))))\n ([p1 p2 p3 & ps]\n (let\n [ps (list* p1 p2 p3 ps)]\n (fn\n spn\n ([] nil)\n ([x] (some (fn* [p1__18657#] (p1__18657# x)) ps))\n ([x y]\n (some (fn* [p1__18658#] (or (p1__18658# x) (p1__18658# y))) ps))\n ([x y z]\n (some\n (fn*\n [p1__18659#]\n (or (p1__18659# x) (p1__18659# y) (p1__18659# z)))\n ps))\n ([x y z & args]\n (or\n (spn x y z)\n (some (fn* [p1__18660#] (some p1__18660# args)) ps)))))))\n"} {:sym *flush-on-newline*, :meta {:doc "When set to true, output will be flushed whenever a newline is printed.\n\n Defaults to true."}, :source "(def *flush-on-newline* true)\n"} {:sym to-array, :meta {:doc "Naive impl of to-array as a start.", :arglists ([s])}, :source "(defn\n to-array\n \"Naive impl of to-array as a start.\"\n [s]\n (let\n [ary (array)]\n (loop\n [s (seq s)]\n (if-not (nil? s) (do (. ary push (first s)) (recur (next s))) ary))))\n"} {:sym list?, :meta {:doc "Returns true if x implements IList", :arglists ([x])}, :source "(defn\n list?\n \"Returns true if x implements IList\"\n [x]\n (satisfies? IList x))\n"} {:sym array?, :meta {:doc "Returns true if x is a JavaScript array.", :arglists ([x])}, :source "(defn\n array?\n \"Returns true if x is a JavaScript array.\"\n [x]\n (if\n (identical? *target* \"nodejs\")\n (.isArray js/Array x)\n (instance? js/Array x)))\n"} {:sym simple-ident?, :meta {:doc "Return true if x is a symbol or keyword without a namespace", :arglists ([x])}, :source "(defn\n simple-ident?\n \"Return true if x is a symbol or keyword without a namespace\"\n [x]\n (and (ident? x) (nil? (namespace x))))\n"} {:sym clone, :meta {:doc "Clone the supplied value which must implement ICloneable.", :arglists ([value])}, :source "(defn\n clone\n \"Clone the supplied value which must implement ICloneable.\"\n [value]\n (-clone value))\n"} {:sym bit-not, :meta {:doc "Bitwise complement", :arglists ([x])}, :source "(defn bit-not \"Bitwise complement\" [x] (cljs.core/bit-not x))\n"} {:sym byte, :meta {:doc nil, :arglists ([x])}, :source "(defn byte [x] x)\n"} {:sym max, :meta {:doc "Returns the greatest of the nums.", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n max\n \"Returns the greatest of the nums.\"\n ([x] x)\n ([x y] (cljs.core/max x y))\n ([x y & more] (reduce max (cljs.core/max x y) more)))\n"} {:sym IComparable, :meta {:doc "Protocol for values that can be compared."}, :methods (-compare)} {:sym ==, :meta {:doc "Returns non-nil if nums all have the equivalent\n value, otherwise false. Behavior on non nums is\n undefined.", :arglists [[x] [x y] [x y & more]]}, :source "(defn\n ==\n \"Returns non-nil if nums all have the equivalent\\n value, otherwise false. Behavior on non nums is\\n undefined.\"\n ([x] true)\n ([x y] (-equiv x y))\n ([x y & more]\n (if\n (== x y)\n (if\n (next more)\n (recur y (first more) (next more))\n (== y (first more)))\n false)))\n"} {:sym count, :meta {:doc "Returns the number of items in the collection. (count nil) returns\n 0. Also works on strings, arrays, and Maps", :arglists ([coll])}, :source "(defn\n count\n \"Returns the number of items in the collection. (count nil) returns\\n 0. Also works on strings, arrays, and Maps\"\n [coll]\n (if-not\n (nil? coll)\n (cond\n (implements? ICounted coll)\n (-count coll)\n (array? coll)\n (alength coll)\n (string? coll)\n (.-length coll)\n (implements? ISeqable coll)\n (accumulating-seq-count coll)\n :else\n (-count coll))\n 0))\n"} {:sym -disjoin!, :meta {:doc "Returns tcoll without v.", :arglists ([tcoll v])}, :protocol ITransientSet} {:sym *loaded-libs*, :meta {}, :source "(defonce *loaded-libs* nil)\n"} {:sym apply, :meta {:doc "Applies fn f to the argument list formed by prepending intervening arguments to args.", :arglists [[f args] [f x args] [f x y args] [f x y z args] [f a b c d & args]]}, :source "(defn\n apply\n \"Applies fn f to the argument list formed by prepending intervening arguments to args.\"\n ([f args]\n (if\n (.-cljs$lang$applyTo f)\n (let\n [fixed-arity\n (.-cljs$lang$maxFixedArity f)\n bc\n (bounded-count (inc fixed-arity) args)]\n (if\n (<= bc fixed-arity)\n (apply-to f bc args)\n (.cljs$lang$applyTo f args)))\n (apply-to-simple f (seq args))))\n ([f x args]\n (if\n (.-cljs$lang$applyTo f)\n (let\n [arglist\n (list* x args)\n fixed-arity\n (.-cljs$lang$maxFixedArity f)\n bc\n (inc (bounded-count fixed-arity args))]\n (if\n (<= bc fixed-arity)\n (apply-to f bc arglist)\n (.cljs$lang$applyTo f arglist)))\n (apply-to-simple f x (seq args))))\n ([f x y args]\n (if\n (.-cljs$lang$applyTo f)\n (let\n [arglist\n (list* x y args)\n fixed-arity\n (.-cljs$lang$maxFixedArity f)\n bc\n (+ 2 (bounded-count (dec fixed-arity) args))]\n (if\n (<= bc fixed-arity)\n (apply-to f bc arglist)\n (.cljs$lang$applyTo f arglist)))\n (apply-to-simple f x y (seq args))))\n ([f x y z args]\n (if\n (.-cljs$lang$applyTo f)\n (let\n [arglist\n (list* x y z args)\n fixed-arity\n (.-cljs$lang$maxFixedArity f)\n bc\n (+ 3 (bounded-count (- fixed-arity 2) args))]\n (if\n (<= bc fixed-arity)\n (apply-to f bc arglist)\n (.cljs$lang$applyTo f arglist)))\n (apply-to-simple f x y z (seq args))))\n ([f a b c d & args]\n (if\n (.-cljs$lang$applyTo f)\n (let\n [spread-args\n (spread args)\n arglist\n (cons a (cons b (cons c (cons d spread-args))))\n fixed-arity\n (.-cljs$lang$maxFixedArity f)\n bc\n (+ 4 (bounded-count (- fixed-arity 3) spread-args))]\n (if\n (<= bc fixed-arity)\n (apply-to f bc arglist)\n (.cljs$lang$applyTo f arglist)))\n (apply-to-simple f a b c d (spread args)))))\n", :examples [{:doc "Apply a function to a vector of arguments", :body (apply + [40 2]), :body-str "(apply + [40 2])\n", :id "cljs.core/apply/0"} {:doc "Apply a function to a list of arguments", :body (apply - (quote (50 5 3))), :body-str "(apply - '(50 5 3))\n", :id "cljs.core/apply/1"} {:doc "Apply a function to multiple collections of different types", :body (map (partial apply max) [[1 2 3 4] (quote (-1 0 1 2))]), :body-str "(map (partial apply max) [[1 2 3 4] '(-1 0 1 2)])\n", :id "cljs.core/apply/2"}]} {:sym add-to-string-hash-cache, :meta {:doc nil, :arglists ([k])}, :source "(defn\n add-to-string-hash-cache\n [k]\n (let\n [h (hash-string* k)]\n (gobject/set string-hash-cache k h)\n (set! string-hash-cache-count (inc string-hash-cache-count))\n h))\n"} {:sym IChunkedNext, :meta {:doc "Protocol for accessing the chunks of a collection."}, :methods (-chunked-next)} {:sym interpose, :meta {:doc "Returns a lazy seq of the elements of coll separated by sep.\n Returns a stateful transducer when no collection is provided.", :arglists [[sep] [sep coll]]}, :source "(defn\n interpose\n \"Returns a lazy seq of the elements of coll separated by sep.\\n Returns a stateful transducer when no collection is provided.\"\n ([sep]\n (fn\n [rf]\n (let\n [started (volatile! false)]\n (fn\n ([] (rf))\n ([result] (rf result))\n ([result input]\n (if\n @started\n (let\n [sepr (rf result sep)]\n (if (reduced? sepr) sepr (rf sepr input)))\n (do (vreset! started true) (rf result input))))))))\n ([sep coll] (drop 1 (interleave (repeat sep) coll))))\n"} {:sym deref, :meta {:doc "Also reader macro: @var/@atom/@delay. Returns the\n most-recently-committed value of ref. When applied to a var\n or atom, returns its current state. When applied to a delay, forces\n it if not already forced. See also - realized?.", :arglists ([o])}, :source "(defn\n deref\n \"Also reader macro: @var/@atom/@delay. Returns the\\n most-recently-committed value of ref. When applied to a var\\n or atom, returns its current state. When applied to a delay, forces\\n it if not already forced. See also - realized?.\"\n [o]\n (-deref o))\n"} {:sym assoc, :meta {:doc "assoc[iate]. When applied to a map, returns a new map of the\n same (hashed/sorted) type, that contains the mapping of key(s) to\n val(s). When applied to a vector, returns a new vector that\n contains val at index.", :arglists [[coll k v] [coll k v & kvs]]}, :source "(defn\n assoc\n \"assoc[iate]. When applied to a map, returns a new map of the\\n same (hashed/sorted) type, that contains the mapping of key(s) to\\n val(s). When applied to a vector, returns a new vector that\\n contains val at index.\"\n ([coll k v] (if-not (nil? coll) (-assoc coll k v) (array-map k v)))\n ([coll k v & kvs]\n (let\n [ret (assoc coll k v)]\n (if kvs (recur ret (first kvs) (second kvs) (nnext kvs)) ret))))\n"} {:sym transient, :meta {:doc "Returns a new, transient version of the collection, in constant time.", :arglists ([coll])}, :source "(defn\n transient\n \"Returns a new, transient version of the collection, in constant time.\"\n [coll]\n (-as-transient coll))\n"} {:sym -disjoin, :meta {:doc "Returns a new collection of coll that does not contain v.", :arglists ([coll v])}, :protocol ISet} {:sym chunk-cons, :meta {:doc nil, :arglists ([chunk rest])}, :source "(defn\n chunk-cons\n [chunk rest]\n (if (zero? (-count chunk)) rest (ChunkedCons. chunk rest nil nil)))\n"} {:sym drop-while, :meta {:doc "Returns a lazy sequence of the items in coll starting from the\n first item for which (pred item) returns logical false. Returns a\n stateful transducer when no collection is provided.", :arglists [[pred] [pred coll]]}, :source "(defn\n drop-while\n \"Returns a lazy sequence of the items in coll starting from the\\n first item for which (pred item) returns logical false. Returns a\\n stateful transducer when no collection is provided.\"\n ([pred]\n (fn\n [rf]\n (let\n [da (volatile! true)]\n (fn\n ([] (rf))\n ([result] (rf result))\n ([result input]\n (let\n [drop? @da]\n (if\n (and drop? (pred input))\n result\n (do (vreset! da nil) (rf result input)))))))))\n ([pred coll]\n (let\n [step\n (fn\n [pred coll]\n (let\n [s (seq coll)]\n (if (and s (pred (first s))) (recur pred (rest s)) s)))]\n (lazy-seq (step pred coll)))))\n", :examples [{:body (do ["Remove all non-vowel characters up to the first vowel"] (drop-while (complement #{\a \e \i \o \u}) "clojure")), :body-str "(do\n [\"Remove all non-vowel characters up to the first vowel\"]\n (drop-while (complement #{\\a \\e \\i \\o \\u}) \"clojure\"))\n", :id "cljs.core/drop-while/0"}]} {:sym IWriter, :meta {:doc "Protocol for writing. Currently only implemented by StringBufferWriter."}, :methods (-flush -write)} {:sym *print-fn*, :meta {:doc "Each runtime environment provides a different way to print output.\n Whatever function *print-fn* is bound to will be passed any\n Strings which should be printed."}, :source "(defonce *print-fn* nil)\n"} {:sym compare, :meta {:doc "Comparator. Returns a negative number, zero, or a positive number\n when x is logically 'less than', 'equal to', or 'greater than'\n y. Uses IComparable if available and google.array.defaultCompare for objects\n of the same type and special-cases nil to be less than any other object.", :arglists ([x y])}, :source "(defn\n compare\n \"Comparator. Returns a negative number, zero, or a positive number\\n when x is logically 'less than', 'equal to', or 'greater than'\\n y. Uses IComparable if available and google.array.defaultCompare for objects\\n of the same type and special-cases nil to be less than any other object.\"\n [x y]\n (cond\n (identical? x y)\n 0\n (nil? x)\n -1\n (nil? y)\n 1\n (number? x)\n (if\n (number? y)\n (garray/defaultCompare x y)\n (throw (js/Error. (str \"Cannot compare \" x \" to \" y))))\n (satisfies? IComparable x)\n (-compare x y)\n :else\n (if\n (and\n (or (string? x) (array? x) (true? x) (false? x))\n (identical? (type x) (type y)))\n (garray/defaultCompare x y)\n (throw (js/Error. (str \"Cannot compare \" x \" to \" y))))))\n"} {:sym complement, :meta {:doc "Takes a fn f and returns a fn that takes the same arguments as f,\n has the same effects, if any, and returns the opposite truth value.", :arglists ([f])}, :source "(defn\n complement\n \"Takes a fn f and returns a fn that takes the same arguments as f,\\n has the same effects, if any, and returns the opposite truth value.\"\n [f]\n (fn\n ([] (not (f)))\n ([x] (not (f x)))\n ([x y] (not (f x y)))\n ([x y & zs] (not (apply f x y zs)))))\n"} {:sym -assoc!, :meta {:doc "Returns a new transient collection of tcoll with a mapping from key to\n val added to it.", :arglists ([tcoll key val])}, :protocol ITransientAssociative} {:sym *print-dup*, :meta {:doc "When set to logical true, objects will be printed in a way that preserves\n their type when read in later.\n\n Defaults to false."}, :source "(def *print-dup* false)\n"} {:sym string-iter, :meta {:doc nil, :arglists ([x])}, :source "(defn string-iter [x] (StringIter. x 0))\n"} {:sym IDeref, :meta {:doc "Protocol for adding dereference functionality to a reference."}, :methods (-deref)} {:sym sequence, :meta {:doc "Coerces coll to a (possibly empty) sequence, if it is not already\n one. Will not force a lazy seq. (sequence nil) yields (), When a\n transducer is supplied, returns a lazy sequence of applications of\n the transform to the items in coll(s), i.e. to the set of first\n items of each coll, followed by the set of second\n items in each coll, until any one of the colls is exhausted. Any\n remaining items in other colls are ignored. The transform should accept\n number-of-colls arguments", :arglists [[coll] [xform coll] [xform coll & colls]]}, :source "(defn\n sequence\n \"Coerces coll to a (possibly empty) sequence, if it is not already\\n one. Will not force a lazy seq. (sequence nil) yields (), When a\\n transducer is supplied, returns a lazy sequence of applications of\\n the transform to the items in coll(s), i.e. to the set of first\\n items of each coll, followed by the set of second\\n items in each coll, until any one of the colls is exhausted. Any\\n remaining items in other colls are ignored. The transform should accept\\n number-of-colls arguments\"\n ([coll] (if (seq? coll) coll (or (seq coll) ())))\n ([xform coll]\n (or\n (chunkIteratorSeq (.create TransformerIterator xform (iter coll)))\n ()))\n ([xform coll & colls]\n (or\n (chunkIteratorSeq\n (.createMulti\n TransformerIterator\n xform\n (map iter (cons coll colls))))\n ())))\n"} {:sym constantly, :meta {:doc "Returns a function that takes any number of arguments and returns x.", :arglists ([x])}, :source "(defn\n constantly\n \"Returns a function that takes any number of arguments and returns x.\"\n [x]\n (fn [& args] x))\n"} {:sym chunked-seq, :meta {:doc nil, :arglists [[vec i off] [vec node i off] [vec node i off meta]]}, :source "(defn\n chunked-seq\n ([vec i off] (ChunkedSeq. vec (array-for vec i) i off nil nil))\n ([vec node i off] (ChunkedSeq. vec node i off nil nil))\n ([vec node i off meta] (ChunkedSeq. vec node i off meta nil)))\n"} {:sym ISorted, :meta {:doc "Protocol for a collection which can represent their items\n in a sorted manner. "}, :methods (-comparator -entry-key -sorted-seq -sorted-seq-from)} {:sym make-array, :meta {:doc "Construct a JavaScript array of the specified dimensions. Accepts ignored\n type argument for compatibility with Clojure. Note that there is no efficient\n way to allocate multi-dimensional arrays in JavaScript; as such, this function\n will run in polynomial time when called with 3 or more arguments.", :arglists [[size] [type size] [type size & more-sizes]]}, :source "(defn\n make-array\n \"Construct a JavaScript array of the specified dimensions. Accepts ignored\\n type argument for compatibility with Clojure. Note that there is no efficient\\n way to allocate multi-dimensional arrays in JavaScript; as such, this function\\n will run in polynomial time when called with 3 or more arguments.\"\n ([size] (js/Array. size))\n ([type size] (make-array size))\n ([type size & more-sizes]\n (let\n [dims more-sizes dimarray (make-array size)]\n (dotimes\n [i (alength dimarray)]\n (aset dimarray i (apply make-array nil dims)))\n dimarray)))\n"} {:sym shorts, :meta {:doc nil, :arglists ([x])}, :source "(defn shorts [x] x)\n"} {:sym *unchecked-if*, :meta {}, :source "(def *unchecked-if* false)\n"} {:sym enable-console-print!, :meta {:doc "Set *print-fn* to console.log", :arglists ([])}, :source "(defn\n enable-console-print!\n \"Set *print-fn* to console.log\"\n []\n (set! *print-newline* false)\n (set!\n *print-fn*\n (fn\n [& args]\n (.apply (.-log js/console) js/console (into-array args))))\n (set!\n *print-err-fn*\n (fn\n [& args]\n (.apply (.-error js/console) js/console (into-array args))))\n nil)\n"} {:sym -flush, :meta {:doc "Flush writer.", :arglists ([writer])}, :protocol IWriter} {:sym completing, :meta {:doc "Takes a reducing function f of 2 args and returns a fn suitable for\n transduce by adding an arity-1 signature that calls cf (default -\n identity) on the result argument.", :arglists [[f] [f cf]]}, :source "(defn\n completing\n \"Takes a reducing function f of 2 args and returns a fn suitable for\\n transduce by adding an arity-1 signature that calls cf (default -\\n identity) on the result argument.\"\n ([f] (completing f identity))\n ([f cf] (fn ([] (f)) ([x] (cf x)) ([x y] (f x y)))))\n"} {:sym unchecked-negate-int, :meta {:doc nil, :arglists ([x])}, :source "(defn unchecked-negate-int [x] (cljs.core/unchecked-negate-int x))\n"} {:sym hash-unordered-coll, :meta {:doc "Returns the hash code, consistent with =, for an external unordered\n collection implementing Iterable. For maps, the iterator should\n return map entries whose hash is computed as\n (hash-ordered-coll [k v]).\n See http://clojure.org/data_structures#hash for full algorithms.", :arglists ([coll])}, :source "(defn\n hash-unordered-coll\n \"Returns the hash code, consistent with =, for an external unordered\\n collection implementing Iterable. For maps, the iterator should\\n return map entries whose hash is computed as\\n (hash-ordered-coll [k v]).\\n See http://clojure.org/data_structures#hash for full algorithms.\"\n [coll]\n (loop\n [n 0 hash-code 0 coll (seq coll)]\n (if-not\n (nil? coll)\n (recur\n (inc n)\n (bit-or (+ hash-code (hash (first coll))) 0)\n (next coll))\n (mix-collection-hash hash-code n))))\n"} {:sym repeat, :meta {:doc "Returns a lazy (infinite!, or length n if supplied) sequence of xs.", :arglists [[x] [n x]]}, :source "(defn\n repeat\n \"Returns a lazy (infinite!, or length n if supplied) sequence of xs.\"\n ([x] (lazy-seq (cons x (repeat x))))\n ([n x] (take n (repeat x))))\n"} {:sym unchecked-inc, :meta {:doc nil, :arglists ([x])}, :source "(defn unchecked-inc [x] (cljs.core/unchecked-inc x))\n"} {:sym nthnext, :meta {:doc "Returns the nth next of coll, (seq coll) when n is 0.", :arglists ([coll n])}, :source "(defn\n nthnext\n \"Returns the nth next of coll, (seq coll) when n is 0.\"\n [coll n]\n (loop\n [n n xs (seq coll)]\n (if (and xs (pos? n)) (recur (dec n) (next xs)) xs)))\n"} {:sym get-validator, :meta {:doc "Gets the validator-fn for a var/ref/agent/atom.", :arglists ([iref])}, :source "(defn\n get-validator\n \"Gets the validator-fn for a var/ref/agent/atom.\"\n [iref]\n (.-validator iref))\n"} {:sym number?, :meta {:doc "Returns true if x is a JavaScript number.", :arglists ([x])}, :source "(defn\n number?\n \"Returns true if x is a JavaScript number.\"\n [x]\n (cljs.core/number? x))\n"} {:sym -conj!, :meta {:doc "Adds value val to tcoll and returns tcoll.", :arglists ([tcoll val])}, :protocol ITransientCollection} {:sym chunk-next, :meta {:doc nil, :arglists ([s])}, :source "(defn\n chunk-next\n [s]\n (if\n (implements? IChunkedNext s)\n (-chunked-next s)\n (seq (-chunked-rest s))))\n"} {:sym not-any?, :meta {:doc "Returns false if (pred x) is logical true for any x in coll,\n else true.", :arglists ([pred coll])}, :source "(defn\n not-any?\n \"Returns false if (pred x) is logical true for any x in coll,\\n else true.\"\n [pred coll]\n (not (some pred coll)))\n"} {:sym into-array, :meta {:doc "Returns an array with components set to the values in aseq. Optional type\n argument accepted for compatibility with Clojure.", :arglists [[aseq] [type aseq]]}, :source "(defn\n into-array\n \"Returns an array with components set to the values in aseq. Optional type\\n argument accepted for compatibility with Clojure.\"\n ([aseq] (into-array nil aseq))\n ([type aseq] (reduce (fn [a x] (.push a x) a) (array) aseq)))\n"} {:sym -hash, :meta {:doc "Returns the hash code of o.", :arglists ([o])}, :protocol IHash} {:sym qualified-symbol?, :meta {:doc "Return true if x is a symbol with a namespace", :arglists ([x])}, :source "(defn\n qualified-symbol?\n \"Return true if x is a symbol with a namespace\"\n [x]\n (boolean (and (symbol? x) (namespace x) true)))\n"} {:sym -dissoc!, :meta {:doc "Returns a new transient collection of tcoll without the mapping for key.", :arglists ([tcoll key])}, :protocol ITransientMap} {:sym chunk-buffer, :meta {:doc nil, :arglists ([capacity])}, :source "(defn chunk-buffer [capacity] (ChunkBuffer. (make-array capacity) 0))\n"} {:sym seqable?, :meta {:doc "Return true if the seq function is supported for s", :arglists ([s])}, :source "(defn\n seqable?\n \"Return true if the seq function is supported for s\"\n [s]\n (or (satisfies? ISeqable s) (array? s) (string? s)))\n"} {:sym symbol?, :meta {:doc "Return true if x is a Symbol", :arglists ([x])}, :source "(defn symbol? \"Return true if x is a Symbol\" [x] (instance? Symbol x))\n"} {:sym m3-hash-unencoded-chars, :meta {:doc nil, :arglists ([in])}, :source "(defn\n m3-hash-unencoded-chars\n [in]\n (let\n [h1\n (loop\n [i 1 h1 m3-seed]\n (if\n (< i (.-length in))\n (recur\n (+ i 2)\n (m3-mix-H1\n h1\n (m3-mix-K1\n (bit-or\n (.charCodeAt in (dec i))\n (bit-shift-left (.charCodeAt in i) 16)))))\n h1))\n h1\n (if\n (== (bit-and (.-length in) 1) 1)\n (bit-xor h1 (m3-mix-K1 (.charCodeAt in (dec (.-length in)))))\n h1)]\n (m3-fmix h1 (imul 2 (.-length in)))))\n"} {:sym unchecked-char, :meta {:doc nil, :arglists ([x])}, :source "(defn unchecked-char [x] x)\n"} {:sym system-time, :meta {:doc "Returns highest resolution time offered by host in milliseconds.", :arglists ([])}, :source "(defn\n system-time\n \"Returns highest resolution time offered by host in milliseconds.\"\n []\n (cond\n (and (exists? js/performance) (not (nil? (. js/performance -now))))\n (.now js/performance)\n (and (exists? js/process) (not (nil? (. js/process -hrtime))))\n (let\n [t (.hrtime js/process)]\n (/ (+ (* (aget t 0) 1.0E9) (aget t 1)) 1000000.0))\n :else\n (.getTime (js/Date.))))\n"} {:sym -invoke, :meta {:doc nil, :arglists ([this] [this a] [this a b] [this a b c] [this a b c d] [this a b c d e] [this a b c d e f] [this a b c d e f g] [this a b c d e f g h] [this a b c d e f g h i] [this a b c d e f g h i j] [this a b c d e f g h i j k] [this a b c d e f g h i j k l] [this a b c d e f g h i j k l m] [this a b c d e f g h i j k l m n] [this a b c d e f g h i j k l m n o] [this a b c d e f g h i j k l m n o p] [this a b c d e f g h i j k l m n o p q] [this a b c d e f g h i j k l m n o p q r] [this a b c d e f g h i j k l m n o p q r s] [this a b c d e f g h i j k l m n o p q r s t] [this a b c d e f g h i j k l m n o p q r s t rest])}, :protocol IFn} {:sym coll?, :meta {:doc "Returns true if x satisfies ICollection", :arglists ([x])}, :source "(defn\n coll?\n \"Returns true if x satisfies ICollection\"\n [x]\n (if (nil? x) false (satisfies? ICollection x)))\n"} {:sym get-in, :meta {:doc "Returns the value in a nested associative structure,\n where ks is a sequence of keys. Returns nil if the key is not present,\n or the not-found value if supplied.", :arglists [[m ks] [m ks not-found]]}, :source "(defn\n get-in\n \"Returns the value in a nested associative structure,\\n where ks is a sequence of keys. Returns nil if the key is not present,\\n or the not-found value if supplied.\"\n {:added \"1.2\", :static true}\n ([m ks] (reduce get m ks))\n ([m ks not-found]\n (loop\n [sentinel lookup-sentinel m m ks (seq ks)]\n (if-not\n (nil? ks)\n (let\n [m (get m (first ks) sentinel)]\n (if\n (identical? sentinel m)\n not-found\n (recur sentinel m (next ks))))\n m))))\n"} {:sym fnext, :meta {:doc "Same as (first (next x))", :arglists ([coll])}, :source "(defn fnext \"Same as (first (next x))\" [coll] (first (next coll)))\n"} {:sym IList, :meta {:doc "Marker interface indicating a persistent list"}, :methods ()} {:sym -val, :meta {:doc "Returns the value of the map entry.", :arglists ([coll])}, :protocol IMapEntry} {:sym bytes, :meta {:doc nil, :arglists ([x])}, :source "(defn bytes [x] x)\n"} {:sym -seq, :meta {:doc "Returns a seq of o, or nil if o is empty.", :arglists ([o])}, :protocol ISeqable}), cljs.tools.reader.reader-types ({:sym indexing-push-back-reader, :meta {:doc "Creates an IndexingPushbackReader from a given string or PushbackReader", :arglists [[s-or-rdr] [s-or-rdr buf-len] [s-or-rdr buf-len file-name]]}, :source "(defn\n indexing-push-back-reader\n \"Creates an IndexingPushbackReader from a given string or PushbackReader\"\n ([s-or-rdr] (indexing-push-back-reader s-or-rdr 1))\n ([s-or-rdr buf-len] (indexing-push-back-reader s-or-rdr buf-len nil))\n ([s-or-rdr buf-len file-name]\n (IndexingPushbackReader.\n (if\n (string? s-or-rdr)\n (string-push-back-reader s-or-rdr buf-len)\n s-or-rdr)\n 1\n 1\n true\n nil\n 0\n file-name)))\n"} {:sym log-source*, :meta {:doc nil, :arglists ([reader f])}, :source "(defn\n log-source*\n [reader f]\n (let\n [buffer (:buffer @(.-frames reader))]\n (try\n (swap!\n (.-frames reader)\n update-in\n [:offset]\n conj\n (.getLength buffer))\n (let\n [ret (f)]\n (if\n (implements? IMeta ret)\n (merge-meta ret {:source (peek-source-log @(.-frames reader))})\n ret))\n (finally (swap! (.-frames reader) update-in [:offset] rest)))))\n"} {:sym merge-meta, :meta {:doc "Returns an object of the same type and value as `obj`, with its\nmetadata merged over `m`.", :arglists ([obj m])}, :source "(defn\n merge-meta\n \"Returns an object of the same type and value as `obj`, with its\\nmetadata merged over `m`.\"\n [obj m]\n (let\n [orig-meta (meta obj)]\n (with-meta obj (merge m (dissoc orig-meta :source)))))\n"} {:sym Reader, :meta {:doc nil}, :methods (peek-char read-char)} {:sym source-logging-push-back-reader, :meta {:doc "Creates a SourceLoggingPushbackReader from a given string or PushbackReader", :arglists [[s-or-rdr] [s-or-rdr buf-len] [s-or-rdr buf-len file-name]]}, :source "(defn\n source-logging-push-back-reader\n \"Creates a SourceLoggingPushbackReader from a given string or PushbackReader\"\n ([s-or-rdr] (source-logging-push-back-reader s-or-rdr 1))\n ([s-or-rdr buf-len]\n (source-logging-push-back-reader s-or-rdr buf-len nil))\n ([s-or-rdr buf-len file-name]\n (SourceLoggingPushbackReader.\n (if\n (string? s-or-rdr)\n (string-push-back-reader s-or-rdr buf-len)\n s-or-rdr)\n 1\n 1\n true\n nil\n 0\n file-name\n (atom {:buffer (StringBuffer.), :offset '(0)}))))\n"} {:sym unread, :meta {:doc "Pushes back a single character on to the stream", :arglists ([reader ch])}, :protocol IPushbackReader} {:sym peek-char, :meta {:doc "Returns the next char from the Reader without removing it from the reader stream", :arglists ([reader])}, :protocol Reader} {:sym IPushbackReader, :meta {:doc nil}, :methods (unread)} {:sym indexing-reader?, :meta {:doc "Returns true if the reader satisfies IndexingReader", :arglists ([rdr])}, :source "(defn\n indexing-reader?\n \"Returns true if the reader satisfies IndexingReader\"\n [rdr]\n (implements? IndexingReader rdr))\n"} {:sym string-reader, :meta {:doc "Creates a StringReader from a given string", :arglists [[s]]}, :source "(defn\n string-reader\n \"Creates a StringReader from a given string\"\n ([s] (StringReader. s (count s) 0)))\n"} {:sym read-char, :meta {:doc "Returns the next char from the Reader, nil if the end of stream has been reached", :arglists ([reader])}, :protocol Reader} {:sym get-column-number, :meta {:doc "Returns the column number of the next character to be read from the stream", :arglists ([reader])}, :protocol IndexingReader} {:sym get-file-name, :meta {:doc "Returns the file name the reader is reading from, or nil", :arglists ([reader])}, :protocol IndexingReader} {:sym read-line, :meta {:doc "Reads a line from the reader or from *in* if no reader is specified", :arglists [[rdr]]}, :source "(defn\n read-line\n \"Reads a line from the reader or from *in* if no reader is specified\"\n ([rdr]\n (loop\n [c (read-char rdr) s (StringBuffer.)]\n (if (newline? c) (str s) (recur (read-char rdr) (.append s c))))))\n"} {:sym string-push-back-reader, :meta {:doc "Creates a PushbackReader from a given string", :arglists [[s] [s buf-len]]}, :source "(defn\n string-push-back-reader\n \"Creates a PushbackReader from a given string\"\n ([s] (string-push-back-reader s 1))\n ([s buf-len]\n (PushbackReader.\n (string-reader s)\n (object-array buf-len)\n buf-len\n buf-len)))\n"} {:sym line-start?, :meta {:doc "Returns true if rdr is an IndexingReader and the current char starts a new line", :arglists ([rdr])}, :source "(defn\n line-start?\n \"Returns true if rdr is an IndexingReader and the current char starts a new line\"\n [rdr]\n (when (indexing-reader? rdr) (== 1 (get-column-number rdr))))\n"} {:sym source-logging-reader?, :meta {:doc nil, :arglists ([rdr])}, :source "(defn\n source-logging-reader?\n [rdr]\n (instance? SourceLoggingPushbackReader rdr))\n"} {:sym IndexingReader, :meta {:doc nil}, :methods (get-column-number get-file-name get-line-number)} {:sym node-readable-push-back-reader, :meta {:doc nil, :arglists ([readable])}, :source "(defn\n node-readable-push-back-reader\n [readable]\n (PushbackReader.\n (NodeReadableReader. readable nil)\n (object-array 1)\n 1\n 1))\n"} {:sym get-line-number, :meta {:doc "Returns the line number of the next character to be read from the stream", :arglists ([reader])}, :protocol IndexingReader}), paren-soup.console ({:sym create-console-history, :meta {:doc nil, :arglists ([])}, :source "(defn\n create-console-history\n []\n (atom {:current-line 0, :lines [], :start 0}))\n"} {:sym get-console-start, :meta {:doc nil, :arglists ([console-history])}, :source "(defn\n get-console-start\n [console-history]\n (-> console-history deref :start))\n"} {:sym update-console-start!, :meta {:doc nil, :arglists ([console-history start])}, :source "(defn\n update-console-start!\n [console-history start]\n (swap! console-history assoc :start start))\n"} {:sym update-console-history!, :meta {:doc "Updates the console history atom.", :arglists ([console-history line])}, :source "(defn\n update-console-history!\n \"Updates the console history atom.\"\n [console-history line]\n (let\n [{:keys [current-line lines]} @console-history]\n (swap!\n console-history\n (fn\n [console-history-map]\n (let\n [lines\n (if\n (and (seq line) (not= line (last lines)))\n (conj lines line)\n lines)]\n (assoc\n console-history-map\n :current-line\n (count lines)\n :lines\n lines))))))\n"} {:sym get-previous-line, :meta {:doc "Returns the previous line from console-history, or nil if there is none.", :arglists ([console-history])}, :source "(defn\n get-previous-line\n \"Returns the previous line from console-history, or nil if there is none.\"\n [console-history]\n (let\n [{:keys [current-line lines]} @console-history]\n (get lines (dec current-line))))\n"} {:sym get-next-line, :meta {:doc "Returns the next line from console-history, or nil if there is none.", :arglists ([console-history])}, :source "(defn\n get-next-line\n \"Returns the next line from console-history, or nil if there is none.\"\n [console-history]\n (let\n [{:keys [current-line lines]} @console-history]\n (get lines (inc current-line))))\n"} {:sym up!, :meta {:doc "Changes the current line and returns the previous line from console-history, or nil if there is none.", :arglists ([console-history])}, :source "(defn\n up!\n \"Changes the current line and returns the previous line from console-history, or nil if there is none.\"\n [console-history]\n (let\n [line (get-previous-line console-history)]\n (if\n line\n (swap! console-history update :current-line dec)\n (swap! console-history assoc :current-line -1))\n line))\n"} {:sym down!, :meta {:doc "Changes the current line and returns the next line from console-history, or nil if there is none.", :arglists ([console-history])}, :source "(defn\n down!\n \"Changes the current line and returns the next line from console-history, or nil if there is none.\"\n [console-history]\n (let\n [line (get-next-line console-history)]\n (if\n line\n (swap! console-history update :current-line inc)\n (swap!\n console-history\n assoc\n :current-line\n (-> @console-history :lines count)))\n line))\n"}), cljs.core.async ({:sym Pub, :meta {:doc nil}, :methods (sub* unsub* unsub-all*)} {:sym reduce, :meta {:doc "f should be a function of 2 arguments. Returns a channel containing\n the single result of applying f to init and the first item from the\n channel, then applying f to that result and the 2nd item, etc. If\n the channel closes without yielding items, returns init and f is not\n called. ch must close before reduce produces a result.", :arglists ([f init ch])}, :source "(defn\n reduce\n \"f should be a function of 2 arguments. Returns a channel containing\\n the single result of applying f to init and the first item from the\\n channel, then applying f to that result and the 2nd item, etc. If\\n the channel closes without yielding items, returns init and f is not\\n called. ch must close before reduce produces a result.\"\n [f init ch]\n (go-loop\n [ret init]\n (let\n [v (, :meta {:doc "Deprecated - this function will be removed. Use transducer instead", :arglists ([p ch])}, :source "(defn\n remove>\n \"Deprecated - this function will be removed. Use transducer instead\"\n [p ch]\n (filter> (complement p) ch))\n"} {:sym timeout, :meta {:doc "Returns a channel that will close after msecs", :arglists ([msecs])}, :source "(defn\n timeout\n \"Returns a channel that will close after msecs\"\n [msecs]\n (timers/timeout msecs))\n"} {:sym unsub*, :meta {:doc nil, :arglists ([p v ch])}, :protocol Pub} {:sym admix*, :meta {:doc nil, :arglists ([m ch])}, :protocol Mix} {:sym unmix*, :meta {:doc nil, :arglists ([m ch])}, :protocol Mix} {:sym mix, :meta {:doc "Creates and returns a mix of one or more input channels which will\n be put on the supplied out channel. Input sources can be added to\n the mix with 'admix', and removed with 'unmix'. A mix supports\n soloing, muting and pausing multiple inputs atomically using\n 'toggle', and can solo using either muting or pausing as determined\n by 'solo-mode'.\n\n Each channel can have zero or more boolean modes set via 'toggle':\n\n :solo - when true, only this (ond other soloed) channel(s) will appear\n in the mix output channel. :mute and :pause states of soloed\n channels are ignored. If solo-mode is :mute, non-soloed\n channels are muted, if :pause, non-soloed channels are\n paused.\n\n :mute - muted channels will have their contents consumed but not included in the mix\n :pause - paused channels will not have their contents consumed (and thus also not included in the mix)\n", :arglists ([out])}, :source "(defn\n mix\n \"Creates and returns a mix of one or more input channels which will\\n be put on the supplied out channel. Input sources can be added to\\n the mix with 'admix', and removed with 'unmix'. A mix supports\\n soloing, muting and pausing multiple inputs atomically using\\n 'toggle', and can solo using either muting or pausing as determined\\n by 'solo-mode'.\\n\\n Each channel can have zero or more boolean modes set via 'toggle':\\n\\n :solo - when true, only this (ond other soloed) channel(s) will appear\\n in the mix output channel. :mute and :pause states of soloed\\n channels are ignored. If solo-mode is :mute, non-soloed\\n channels are muted, if :pause, non-soloed channels are\\n paused.\\n\\n :mute - muted channels will have their contents consumed but not included in the mix\\n :pause - paused channels will not have their contents consumed (and thus also not included in the mix)\\n\"\n [out]\n (let\n [cs\n (atom {})\n solo-modes\n #{:pause :mute}\n attrs\n (conj solo-modes :solo)\n solo-mode\n (atom :mute)\n change\n (chan)\n changed\n (fn* [] (put! change true))\n pick\n (fn\n [attr chs]\n (reduce-kv (fn [ret c v] (if (attr v) (conj ret c) ret)) #{} chs))\n calc-state\n (fn\n []\n (let\n [chs\n @cs\n mode\n @solo-mode\n solos\n (pick :solo chs)\n pauses\n (pick :pause chs)]\n {:solos solos,\n :mutes (pick :mute chs),\n :reads\n (conj\n (if\n (and (= mode :pause) (not (empty? solos)))\n (vec solos)\n (vec (remove pauses (keys chs))))\n change)}))\n m\n (reify\n Mux\n (muxch* [_] out)\n Mix\n (admix* [_ ch] (swap! cs assoc ch {}) (changed))\n (unmix* [_ ch] (swap! cs dissoc ch) (changed))\n (unmix-all* [_] (reset! cs {}) (changed))\n (toggle*\n [_ state-map]\n (swap! cs (partial merge-with cljs.core/merge) state-map)\n (changed))\n (solo-mode*\n [_ mode]\n (assert\n (solo-modes mode)\n (str \"mode must be one of: \" solo-modes))\n (reset! solo-mode mode)\n (changed)))]\n (go-loop\n [{:keys [solos mutes reads], :as state} (calc-state)]\n (let\n [[v c] (alts! reads)]\n (if\n (or (nil? v) (= c change))\n (do (when (nil? v) (swap! cs dissoc c)) (recur (calc-state)))\n (if\n (or (solos c) (and (empty? solos) (not (mutes c))))\n (when (>! out v) (recur state))\n (recur state)))))\n m))\n"} {:sym pub, :meta {:doc "Creates and returns a pub(lication) of the supplied channel,\n partitioned into topics by the topic-fn. topic-fn will be applied to\n each value on the channel and the result will determine the 'topic'\n on which that value will be put. Channels can be subscribed to\n receive copies of topics using 'sub', and unsubscribed using\n 'unsub'. Each topic will be handled by an internal mult on a\n dedicated channel. By default these internal channels are\n unbuffered, but a buf-fn can be supplied which, given a topic,\n creates a buffer with desired properties.\n\n Each item is distributed to all subs in parallel and synchronously,\n i.e. each sub must accept before the next item is distributed. Use\n buffering/windowing to prevent slow subs from holding up the pub.\n\n Items received when there are no matching subs get dropped.\n\n Note that if buf-fns are used then each topic is handled\n asynchronously, i.e. if a channel is subscribed to more than one\n topic it should not expect them to be interleaved identically with\n the source.", :arglists [[ch topic-fn] [ch topic-fn buf-fn]]}, :source "(defn\n pub\n \"Creates and returns a pub(lication) of the supplied channel,\\n partitioned into topics by the topic-fn. topic-fn will be applied to\\n each value on the channel and the result will determine the 'topic'\\n on which that value will be put. Channels can be subscribed to\\n receive copies of topics using 'sub', and unsubscribed using\\n 'unsub'. Each topic will be handled by an internal mult on a\\n dedicated channel. By default these internal channels are\\n unbuffered, but a buf-fn can be supplied which, given a topic,\\n creates a buffer with desired properties.\\n\\n Each item is distributed to all subs in parallel and synchronously,\\n i.e. each sub must accept before the next item is distributed. Use\\n buffering/windowing to prevent slow subs from holding up the pub.\\n\\n Items received when there are no matching subs get dropped.\\n\\n Note that if buf-fns are used then each topic is handled\\n asynchronously, i.e. if a channel is subscribed to more than one\\n topic it should not expect them to be interleaved identically with\\n the source.\"\n ([ch topic-fn] (pub ch topic-fn (constantly nil)))\n ([ch topic-fn buf-fn]\n (let\n [mults\n (atom {})\n ensure-mult\n (fn\n [topic]\n (or\n (get @mults topic)\n (get\n (swap!\n mults\n (fn*\n [p1__18543#]\n (if\n (p1__18543# topic)\n p1__18543#\n (assoc p1__18543# topic (mult (chan (buf-fn topic)))))))\n topic)))\n p\n (reify\n Mux\n (muxch* [_] ch)\n Pub\n (sub*\n [p topic ch close?]\n (let [m (ensure-mult topic)] (tap m ch close?)))\n (unsub*\n [p topic ch]\n (when-let [m (get @mults topic)] (untap m ch)))\n (unsub-all* [_] (reset! mults {}))\n (unsub-all* [_ topic] (swap! mults dissoc topic)))]\n (go-loop\n []\n (let\n [val (! (muxch* m) val) (swap! mults dissoc topic)))\n (recur)))))\n p)))\n"} {:sym take, :meta {:doc "Returns a channel that will return, at most, n items from ch. After n items\n have been returned, or ch has been closed, the return chanel will close.\n\n The output channel is unbuffered by default, unless buf-or-n is given.", :arglists [[n ch] [n ch buf-or-n]]}, :source "(defn\n take\n \"Returns a channel that will return, at most, n items from ch. After n items\\n have been returned, or ch has been closed, the return chanel will close.\\n\\n The output channel is unbuffered by default, unless buf-or-n is given.\"\n ([n ch] (take n ch nil))\n ([n ch buf-or-n]\n (let\n [out (chan buf-or-n)]\n (go\n (loop\n [x 0]\n (when\n (< x n)\n (let\n [v (! out v) (recur (inc x))))))\n (close! out))\n out)))\n"} {:sym unsub-all*, :meta {:doc nil, :arglists ([p] [p v])}, :protocol Pub} {:sym ! out (apply f rets)) (recur)))))\n out)))\n"} {:sym Mux, :meta {:doc nil}, :methods (muxch*)} {:sym mapcat>, :meta {:doc "Deprecated - this function will be removed. Use transducer instead", :arglists [[f out] [f out buf-or-n]]}, :source "(defn\n mapcat>\n \"Deprecated - this function will be removed. Use transducer instead\"\n ([f out] (mapcat> f out nil))\n ([f out buf-or-n] (let [in (chan buf-or-n)] (mapcat* f in out) in)))\n"} {:sym buffer, :meta {:doc "Returns a fixed buffer of size n. When full, puts will block/park.", :arglists ([n])}, :source "(defn\n buffer\n \"Returns a fixed buffer of size n. When full, puts will block/park.\"\n [n]\n (buffers/fixed-buffer n))\n"} {:sym close!, :meta {:doc nil, :arglists [[port]]}, :source "(defn close! ([port] (impl/close! port)))\n"} {:sym offer!, :meta {:doc "Puts a val into port if it's possible to do so immediately.\n nil values are not allowed. Never blocks. Returns true if offer succeeds.", :arglists ([port val])}, :source "(defn\n offer!\n \"Puts a val into port if it's possible to do so immediately.\\n nil values are not allowed. Never blocks. Returns true if offer succeeds.\"\n [port val]\n (let\n [ret (impl/put! port val (fn-handler nop false))]\n (when ret @ret)))\n"} {:sym chan, :meta {:doc "Creates a channel with an optional buffer, an optional transducer (like (map f),\n (filter p) etc or a composition thereof), and an optional exception handler.\n If buf-or-n is a number, will create and use a fixed buffer of that size. If a\n transducer is supplied a buffer must be specified. ex-handler must be a\n fn of one argument - if an exception occurs during transformation it will be called\n with the thrown value as an argument, and any non-nil return value will be placed\n in the channel.", :arglists [[] [buf-or-n] [buf-or-n xform] [buf-or-n xform ex-handler]]}, :source "(defn\n chan\n \"Creates a channel with an optional buffer, an optional transducer (like (map f),\\n (filter p) etc or a composition thereof), and an optional exception handler.\\n If buf-or-n is a number, will create and use a fixed buffer of that size. If a\\n transducer is supplied a buffer must be specified. ex-handler must be a\\n fn of one argument - if an exception occurs during transformation it will be called\\n with the thrown value as an argument, and any non-nil return value will be placed\\n in the channel.\"\n ([] (chan nil))\n ([buf-or-n] (chan buf-or-n nil nil))\n ([buf-or-n xform] (chan buf-or-n xform nil))\n ([buf-or-n xform ex-handler]\n (let\n [buf-or-n (if (= buf-or-n 0) nil buf-or-n)]\n (when\n xform\n (assert buf-or-n \"buffer must be supplied when transducer is\"))\n (channels/chan\n (if (number? buf-or-n) (buffer buf-or-n) buf-or-n)\n xform\n ex-handler))))\n"} {:sym solo-mode*, :meta {:doc nil, :arglists ([m mode])}, :protocol Mix} {:sym tap, :meta {:doc "Copies the mult source onto the supplied channel.\n\n By default the channel will be closed when the source closes,\n but can be determined by the close? parameter.", :arglists [[mult ch] [mult ch close?]]}, :source "(defn\n tap\n \"Copies the mult source onto the supplied channel.\\n\\n By default the channel will be closed when the source closes,\\n but can be determined by the close? parameter.\"\n ([mult ch] (tap mult ch true))\n ([mult ch close?] (tap* mult ch close?) ch))\n"} {:sym admix, :meta {:doc "Adds ch as an input to the mix", :arglists ([mix ch])}, :source "(defn admix \"Adds ch as an input to the mix\" [mix ch] (admix* mix ch))\n"} {:sym promise-chan, :meta {:doc "Creates a promise channel with an optional transducer, and an optional\n exception-handler. A promise channel can take exactly one value that consumers\n will receive. Once full, puts complete but val is dropped (no transfer).\n Consumers will block until either a value is placed in the channel or the\n channel is closed. See chan for the semantics of xform and ex-handler.", :arglists [[] [xform] [xform ex-handler]]}, :source "(defn\n promise-chan\n \"Creates a promise channel with an optional transducer, and an optional\\n exception-handler. A promise channel can take exactly one value that consumers\\n will receive. Once full, puts complete but val is dropped (no transfer).\\n Consumers will block until either a value is placed in the channel or the\\n channel is closed. See chan for the semantics of xform and ex-handler.\"\n ([] (promise-chan nil))\n ([xform] (promise-chan xform nil))\n ([xform ex-handler] (chan (buffers/promise-buffer) xform ex-handler)))\n"} {:sym unique, :meta {:doc "Deprecated - this function will be removed. Use transducer instead", :arglists [[ch] [ch buf-or-n]]}, :source "(defn\n unique\n \"Deprecated - this function will be removed. Use transducer instead\"\n ([ch] (unique ch nil))\n ([ch buf-or-n]\n (let\n [out (chan buf-or-n)]\n (go\n (loop\n [last nil]\n (let\n [v (! out v) (recur v))))))\n (close! out))\n out)))\n"} {:sym muxch*, :meta {:doc nil, :arglists ([_])}, :protocol Mux} {:sym solo-mode, :meta {:doc "Sets the solo mode of the mix. mode must be one of :mute or :pause", :arglists ([mix mode])}, :source "(defn\n solo-mode\n \"Sets the solo mode of the mix. mode must be one of :mute or :pause\"\n [mix mode]\n (solo-mode* mix mode))\n"} {:sym transduce, :meta {:doc "async/reduces a channel with a transformation (xform f).\n Returns a channel containing the result. ch must close before\n transduce produces a result.", :arglists ([xform f init ch])}, :source "(defn\n transduce\n \"async/reduces a channel with a transformation (xform f).\\n Returns a channel containing the result. ch must close before\\n transduce produces a result.\"\n [xform f init ch]\n (let [f (xform f)] (go (let [ret (! ch (first vs)))\n (recur (next vs))\n (when close? (close! ch))))))\n"} {:sym to-chan, :meta {:doc "Creates and returns a channel which contains the contents of coll,\n closing when exhausted.", :arglists ([coll])}, :source "(defn\n to-chan\n \"Creates and returns a channel which contains the contents of coll,\\n closing when exhausted.\"\n [coll]\n (let [ch (chan (bounded-count 100 coll))] (onto-chan ch coll) ch))\n"} {:sym dropping-buffer, :meta {:doc "Returns a buffer of size n. When full, puts will complete but\n val will be dropped (no transfer).", :arglists ([n])}, :source "(defn\n dropping-buffer\n \"Returns a buffer of size n. When full, puts will complete but\\n val will be dropped (no transfer).\"\n [n]\n (buffers/dropping-buffer n))\n"} {:sym untap-all, :meta {:doc "Disconnects all target channels from a mult", :arglists ([mult])}, :source "(defn\n untap-all\n \"Disconnects all target channels from a mult\"\n [mult]\n (untap-all* mult))\n"} {:sym into, :meta {:doc "Returns a channel containing the single (collection) result of the\n items taken from the channel conjoined to the supplied\n collection. ch must close before into produces a result.", :arglists ([coll ch])}, :source "(defn\n into\n \"Returns a channel containing the single (collection) result of the\\n items taken from the channel conjoined to the supplied\\n collection. ch must close before into produces a result.\"\n [coll ch]\n (reduce conj coll ch))\n"} {:sym pipeline, :meta {:doc "Takes elements from the from channel and supplies them to the to\n channel, subject to the transducer xf, with parallelism n. Because\n it is parallel, the transducer will be applied independently to each\n element, not across elements, and may produce zero or more outputs\n per input. Outputs will be returned in order relative to the\n inputs. By default, the to channel will be closed when the from\n channel closes, but can be determined by the close? parameter. Will\n stop consuming the from channel if the to channel closes.\n\n Note this is supplied for API compatibility with the Clojure version.\n Values of N > 1 will not result in actual concurrency in a\n single-threaded runtime.", :arglists [[n to xf from] [n to xf from close?] [n to xf from close? ex-handler]]}, :source "(defn\n pipeline\n \"Takes elements from the from channel and supplies them to the to\\n channel, subject to the transducer xf, with parallelism n. Because\\n it is parallel, the transducer will be applied independently to each\\n element, not across elements, and may produce zero or more outputs\\n per input. Outputs will be returned in order relative to the\\n inputs. By default, the to channel will be closed when the from\\n channel closes, but can be determined by the close? parameter. Will\\n stop consuming the from channel if the to channel closes.\\n\\n Note this is supplied for API compatibility with the Clojure version.\\n Values of N > 1 will not result in actual concurrency in a\\n single-threaded runtime.\"\n ([n to xf from] (pipeline n to xf from true))\n ([n to xf from close?] (pipeline n to xf from close? nil))\n ([n to xf from close? ex-handler]\n (pipeline* n to xf from close? ex-handler :compute)))\n"} {:sym sub, :meta {:doc "Subscribes a channel to a topic of a pub.\n\n By default the channel will be closed when the source closes,\n but can be determined by the close? parameter.", :arglists [[p topic ch] [p topic ch close?]]}, :source "(defn\n sub\n \"Subscribes a channel to a topic of a pub.\\n\\n By default the channel will be closed when the source closes,\\n but can be determined by the close? parameter.\"\n ([p topic ch] (sub p topic ch true))\n ([p topic ch close?] (sub* p topic ch close?)))\n"} {:sym map>, :meta {:doc "Deprecated - this function will be removed. Use transducer instead", :arglists ([f ch])}, :source "(defn\n map>\n \"Deprecated - this function will be removed. Use transducer instead\"\n [f ch]\n (reify\n impl/Channel\n (close! [_] (impl/close! ch))\n impl/ReadPort\n (take! [_ fn1] (impl/take! ch fn1))\n impl/WritePort\n (put! [_ val fn1] (impl/put! ch (f val) fn1))))\n"} {:sym pipe, :meta {:doc "Takes elements from the from channel and supplies them to the to\n channel. By default, the to channel will be closed when the from\n channel closes, but can be determined by the close? parameter. Will\n stop consuming the from channel if the to channel closes", :arglists [[from to] [from to close?]]}, :source "(defn\n pipe\n \"Takes elements from the from channel and supplies them to the to\\n channel. By default, the to channel will be closed when the from\\n channel closes, but can be determined by the close? parameter. Will\\n stop consuming the from channel if the to channel closes\"\n ([from to] (pipe from to true))\n ([from to close?]\n (go-loop\n []\n (let\n [v (! to v) (recur)))))\n to))\n"} {:sym unmix, :meta {:doc "Removes ch as an input to the mix", :arglists ([mix ch])}, :source "(defn\n unmix\n \"Removes ch as an input to the mix\"\n [mix ch]\n (unmix* mix ch))\n"} {:sym filter<, :meta {:doc "Deprecated - this function will be removed. Use transducer instead", :arglists [[p ch] [p ch buf-or-n]]}, :source "(defn\n filter<\n \"Deprecated - this function will be removed. Use transducer instead\"\n ([p ch] (filter< p ch nil))\n ([p ch buf-or-n]\n (let\n [out (chan buf-or-n)]\n (go-loop\n []\n (let\n [val (! out val)) (recur)))))\n out)))\n"} {:sym sub*, :meta {:doc nil, :arglists ([p v ch close?])}, :protocol Pub} {:sym remove<, :meta {:doc "Deprecated - this function will be removed. Use transducer instead", :arglists [[p ch] [p ch buf-or-n]]}, :source "(defn\n remove<\n \"Deprecated - this function will be removed. Use transducer instead\"\n ([p ch] (remove< p ch nil))\n ([p ch buf-or-n] (filter< (complement p) ch buf-or-n)))\n"} {:sym untap*, :meta {:doc nil, :arglists ([m ch])}, :protocol Mult} {:sym toggle, :meta {:doc "Atomically sets the state(s) of one or more channels in a mix. The\n state map is a map of channels -> channel-state-map. A\n channel-state-map is a map of attrs -> boolean, where attr is one or\n more of :mute, :pause or :solo. Any states supplied are merged with\n the current state.\n\n Note that channels can be added to a mix via toggle, which can be\n used to add channels in a particular (e.g. paused) state.", :arglists ([mix state-map])}, :source "(defn\n toggle\n \"Atomically sets the state(s) of one or more channels in a mix. The\\n state map is a map of channels -> channel-state-map. A\\n channel-state-map is a map of attrs -> boolean, where attr is one or\\n more of :mute, :pause or :solo. Any states supplied are merged with\\n the current state.\\n\\n Note that channels can be added to a mix via toggle, which can be\\n used to add channels in a particular (e.g. paused) state.\"\n [mix state-map]\n (toggle* mix state-map))\n"} {:sym untap-all*, :meta {:doc nil, :arglists ([m])}, :protocol Mult} {:sym sliding-buffer, :meta {:doc "Returns a buffer of size n. When full, puts will complete, and be\n buffered, but oldest elements in buffer will be dropped (not\n transferred).", :arglists ([n])}, :source "(defn\n sliding-buffer\n \"Returns a buffer of size n. When full, puts will complete, and be\\n buffered, but oldest elements in buffer will be dropped (not\\n transferred).\"\n [n]\n (buffers/sliding-buffer n))\n"} {:sym partition, :meta {:doc "Deprecated - this function will be removed. Use transducer instead", :arglists [[n ch] [n ch buf-or-n]]}, :source "(defn\n partition\n \"Deprecated - this function will be removed. Use transducer instead\"\n ([n ch] (partition n ch nil))\n ([n ch buf-or-n]\n (let\n [out (chan buf-or-n)]\n (go\n (loop\n [arr (make-array n) idx 0]\n (let\n [v (! out (vec arr)) (recur (make-array n) 0)))))\n (do (when (> idx 0) (>! out (vec arr))) (close! out))))))\n out)))\n"} {:sym Mult, :meta {:doc nil}, :methods (tap* untap* untap-all*)} {:sym merge, :meta {:doc "Takes a collection of source channels and returns a channel which\n contains all values taken from them. The returned channel will be\n unbuffered by default, or a buf-or-n can be supplied. The channel\n will close after all the source channels have closed.", :arglists [[chs] [chs buf-or-n]]}, :source "(defn\n merge\n \"Takes a collection of source channels and returns a channel which\\n contains all values taken from them. The returned channel will be\\n unbuffered by default, or a buf-or-n can be supplied. The channel\\n will close after all the source channels have closed.\"\n ([chs] (merge chs nil))\n ([chs buf-or-n]\n (let\n [out (chan buf-or-n)]\n (go-loop\n [cs (vec chs)]\n (if\n (pos? (count cs))\n (let\n [[v c] (alts! cs)]\n (if\n (nil? v)\n (recur (filterv (fn* [p1__18544#] (not= c p1__18544#)) cs))\n (do (>! out v) (recur cs))))\n (close! out)))\n out)))\n"} {:sym partition-by, :meta {:doc "Deprecated - this function will be removed. Use transducer instead", :arglists [[f ch] [f ch buf-or-n]]}, :source "(defn\n partition-by\n \"Deprecated - this function will be removed. Use transducer instead\"\n ([f ch] (partition-by f ch nil))\n ([f ch buf-or-n]\n (let\n [out (chan buf-or-n)]\n (go\n (loop\n [lst (make-array 0) last :clojure.core/nothing]\n (let\n [v (! out (vec lst))\n (let\n [new-lst (make-array 0)]\n (.push new-lst v)\n (recur new-lst new-itm)))))\n (do\n (when (> (alength lst) 0) (>! out (vec lst)))\n (close! out))))))\n out)))\n"} {:sym unsub-all, :meta {:doc "Unsubscribes all channels from a pub, or a topic of a pub", :arglists [[p] [p topic]]}, :source "(defn\n unsub-all\n \"Unsubscribes all channels from a pub, or a topic of a pub\"\n ([p] (unsub-all* p))\n ([p topic] (unsub-all* p topic)))\n"} {:sym >!, :meta {:doc "puts a val into port. nil values are not allowed. Must be called\n inside a (go ...) block. Will park if no buffer space is available.\n Returns true unless port is already closed.", :arglists ([port val])}, :source "(defn\n >!\n \"puts a val into port. nil values are not allowed. Must be called\\n inside a (go ...) block. Will park if no buffer space is available.\\n Returns true unless port is already closed.\"\n [port val]\n (throw (js/Error. \">! used not in (go ...) block\")))\n"} {:sym unmix-all*, :meta {:doc nil, :arglists ([m])}, :protocol Mix} {:sym split, :meta {:doc "Takes a predicate and a source channel and returns a vector of two\n channels, the first of which will contain the values for which the\n predicate returned true, the second those for which it returned\n false.\n\n The out channels will be unbuffered by default, or two buf-or-ns can\n be supplied. The channels will close after the source channel has\n closed.", :arglists [[p ch] [p ch t-buf-or-n f-buf-or-n]]}, :source "(defn\n split\n \"Takes a predicate and a source channel and returns a vector of two\\n channels, the first of which will contain the values for which the\\n predicate returned true, the second those for which it returned\\n false.\\n\\n The out channels will be unbuffered by default, or two buf-or-ns can\\n be supplied. The channels will close after the source channel has\\n closed.\"\n ([p ch] (split p ch nil nil))\n ([p ch t-buf-or-n f-buf-or-n]\n (let\n [tc (chan t-buf-or-n) fc (chan f-buf-or-n)]\n (go-loop\n []\n (let\n [v (! (if (p v) tc fc) v) (recur)))))\n [tc fc])))\n"} {:sym unmix-all, :meta {:doc "removes all inputs from the mix", :arglists ([mix])}, :source "(defn\n unmix-all\n \"removes all inputs from the mix\"\n [mix]\n (unmix-all* mix))\n"} {:sym filter>, :meta {:doc "Deprecated - this function will be removed. Use transducer instead", :arglists ([p ch])}, :source "(defn\n filter>\n \"Deprecated - this function will be removed. Use transducer instead\"\n [p ch]\n (reify\n impl/Channel\n (close! [_] (impl/close! ch))\n (closed? [_] (impl/closed? ch))\n impl/ReadPort\n (take! [_ fn1] (impl/take! ch fn1))\n impl/WritePort\n (put!\n [_ val fn1]\n (if\n (p val)\n (impl/put! ch val fn1)\n (channels/box (not (impl/closed? ch)))))))\n"} {:sym tap*, :meta {:doc nil, :arglists ([m ch close?])}, :protocol Mult} {:sym untap, :meta {:doc "Disconnects a target channel from a mult", :arglists ([mult ch])}, :source "(defn\n untap\n \"Disconnects a target channel from a mult\"\n [mult ch]\n (untap* mult ch))\n"} {:sym alts!, :meta {:doc "Completes at most one of several channel operations. Must be called\n inside a (go ...) block. ports is a vector of channel endpoints,\n which can be either a channel to take from or a vector of\n [channel-to-put-to val-to-put], in any combination. Takes will be\n made as if by !. Unless\n the :priority option is true, if more than one port operation is\n ready a non-deterministic choice will be made. If no operation is\n ready and a :default value is supplied, [default-val :default] will\n be returned, otherwise alts! will park until the first operation to\n become ready completes. Returns [val port] of the completed\n operation, where val is the value taken for takes, and a\n boolean (true unless already closed, as per put!) for puts.\n\n opts are passed as :key val ... Supported options:\n\n :default val - the value to use if none of the operations are immediately ready\n :priority true - (default nil) when true, the operations will be tried in order.\n\n Note: there is no guarantee that the port exps or val exprs will be\n used, nor in what order should they be, so they should not be\n depended upon for side effects.", :arglists ([ports & {:as opts}])}, :source "(defn\n alts!\n \"Completes at most one of several channel operations. Must be called\\n inside a (go ...) block. ports is a vector of channel endpoints,\\n which can be either a channel to take from or a vector of\\n [channel-to-put-to val-to-put], in any combination. Takes will be\\n made as if by !. Unless\\n the :priority option is true, if more than one port operation is\\n ready a non-deterministic choice will be made. If no operation is\\n ready and a :default value is supplied, [default-val :default] will\\n be returned, otherwise alts! will park until the first operation to\\n become ready completes. Returns [val port] of the completed\\n operation, where val is the value taken for takes, and a\\n boolean (true unless already closed, as per put!) for puts.\\n\\n opts are passed as :key val ... Supported options:\\n\\n :default val - the value to use if none of the operations are immediately ready\\n :priority true - (default nil) when true, the operations will be tried in order.\\n\\n Note: there is no guarantee that the port exps or val exprs will be\\n used, nor in what order should they be, so they should not be\\n depended upon for side effects.\"\n [ports & {:as opts}]\n (throw (js/Error. \"alts! used not in (go ...) block\")))\n"} {:sym unsub, :meta {:doc "Unsubscribes a channel from a topic of a pub", :arglists ([p topic ch])}, :source "(defn\n unsub\n \"Unsubscribes a channel from a topic of a pub\"\n [p topic ch]\n (unsub* p topic ch))\n"} {:sym poll!, :meta {:doc "Takes a val from port if it's possible to do so immediately.\n Never blocks. Returns value if successful, nil otherwise.", :arglists ([port])}, :source "(defn\n poll!\n \"Takes a val from port if it's possible to do so immediately.\\n Never blocks. Returns value if successful, nil otherwise.\"\n [port]\n (let [ret (impl/take! port (fn-handler nop false))] (when ret @ret)))\n"} {:sym map<, :meta {:doc "Deprecated - this function will be removed. Use transducer instead", :arglists ([f ch])}, :source "(defn\n map<\n \"Deprecated - this function will be removed. Use transducer instead\"\n [f ch]\n (reify\n impl/Channel\n (close! [_] (impl/close! ch))\n (closed? [_] (impl/closed? ch))\n impl/ReadPort\n (take!\n [_ fn1]\n (let\n [ret\n (impl/take!\n ch\n (reify\n impl/Handler\n (active? [_] (impl/active? fn1))\n (blockable? [_] true)\n (commit\n [_]\n (let\n [f1 (impl/commit fn1)]\n (fn*\n [p1__18545#]\n (f1 (if (nil? p1__18545#) nil (f p1__18545#))))))))]\n (if (and ret (not (nil? @ret))) (channels/box (f @ret)) ret)))\n impl/WritePort\n (put! [_ val fn1] (impl/put! ch val fn1))))\n"} {:sym do-alts, :meta {:doc "returns derefable [val port] if immediate, nil if enqueued", :arglists ([fret ports opts])}, :source "(defn\n do-alts\n \"returns derefable [val port] if immediate, nil if enqueued\"\n [fret ports opts]\n (let\n [flag\n (alt-flag)\n n\n (count ports)\n idxs\n (random-array n)\n priority\n (:priority opts)\n ret\n (loop\n [i 0]\n (when\n (< i n)\n (let\n [idx\n (if priority i (aget idxs i))\n port\n (nth ports idx)\n wport\n (when (vector? port) (port 0))\n vbox\n (if\n wport\n (let\n [val (port 1)]\n (impl/put!\n wport\n val\n (alt-handler\n flag\n (fn* [p1__18541#] (fret [p1__18541# wport])))))\n (impl/take!\n port\n (alt-handler\n flag\n (fn* [p1__18542#] (fret [p1__18542# port])))))]\n (if\n vbox\n (channels/box [@vbox (or wport port)])\n (recur (inc i))))))]\n (or\n ret\n (when\n (contains? opts :default)\n (when-let\n [got (and (impl/active? flag) (impl/commit flag))]\n (channels/box [(:default opts) :default]))))))\n"} {:sym pipeline-async, :meta {:doc "Takes elements from the from channel and supplies them to the to\n channel, subject to the async function af, with parallelism n. af\n must be a function of two arguments, the first an input value and\n the second a channel on which to place the result(s). af must close!\n the channel before returning. The presumption is that af will\n return immediately, having launched some asynchronous operation\n whose completion/callback will manipulate the result channel. Outputs\n will be returned in order relative to the inputs. By default, the to\n channel will be closed when the from channel closes, but can be\n determined by the close? parameter. Will stop consuming the from\n channel if the to channel closes.", :arglists [[n to af from] [n to af from close?]]}, :source "(defn\n pipeline-async\n \"Takes elements from the from channel and supplies them to the to\\n channel, subject to the async function af, with parallelism n. af\\n must be a function of two arguments, the first an input value and\\n the second a channel on which to place the result(s). af must close!\\n the channel before returning. The presumption is that af will\\n return immediately, having launched some asynchronous operation\\n whose completion/callback will manipulate the result channel. Outputs\\n will be returned in order relative to the inputs. By default, the to\\n channel will be closed when the from channel closes, but can be\\n determined by the close? parameter. Will stop consuming the from\\n channel if the to channel closes.\"\n ([n to af from] (pipeline-async n to af from true))\n ([n to af from close?] (pipeline* n to af from close? nil :async)))\n"} {:sym Mix, :meta {:doc nil}, :methods (admix* solo-mode* toggle* unmix* unmix-all*)} {:sym toggle*, :meta {:doc nil, :arglists ([m state-map])}, :protocol Mix} {:sym mult, :meta {:doc "Creates and returns a mult(iple) of the supplied channel. Channels\n containing copies of the channel can be created with 'tap', and\n detached with 'untap'.\n\n Each item is distributed to all taps in parallel and synchronously,\n i.e. each tap must accept before the next item is distributed. Use\n buffering/windowing to prevent slow taps from holding up the mult.\n\n Items received when there are no taps get dropped.\n\n If a tap puts to a closed channel, it will be removed from the mult.", :arglists ([ch])}, :source "(defn\n mult\n \"Creates and returns a mult(iple) of the supplied channel. Channels\\n containing copies of the channel can be created with 'tap', and\\n detached with 'untap'.\\n\\n Each item is distributed to all taps in parallel and synchronously,\\n i.e. each tap must accept before the next item is distributed. Use\\n buffering/windowing to prevent slow taps from holding up the mult.\\n\\n Items received when there are no taps get dropped.\\n\\n If a tap puts to a closed channel, it will be removed from the mult.\"\n [ch]\n (let\n [cs\n (atom {})\n m\n (reify\n Mux\n (muxch* [_] ch)\n Mult\n (tap* [_ ch close?] (swap! cs assoc ch close?) nil)\n (untap* [_ ch] (swap! cs dissoc ch) nil)\n (untap-all* [_] (reset! cs {}) nil))\n dchan\n (chan 1)\n dctr\n (atom nil)\n done\n (fn [_] (when (zero? (swap! dctr dec)) (put! dchan true)))]\n (go-loop\n []\n (let\n [val (NativeWrapper) ($! :name c) ($! :id nil) ($! :class nil))\n wrapped\n (if\n synthetic-input\n (doto wrapped ($! :syntheticInput true))\n wrapped)\n wrapped\n (if\n synthetic-input\n (doto wrapped ($! :syntheticOnChange on-change))\n wrapped)\n wrapped\n (if\n synthetic-input\n (doto wrapped ($! :syntheticOnUpdate on-update))\n wrapped)]\n wrapped)))\n ([c] (adapt-react-class c {})))\n"} {:sym synthetic-input-spec, :meta {}, :source "(def\n synthetic-input-spec\n {:display-name \"ReagentSyntheticInput\",\n :component-did-update input-component-set-value,\n :component-will-unmount input-unmount,\n :reagent-render\n (fn\n [on-update on-change argv comp jsprops first-child]\n (let\n [this comp/*current-component*]\n (input-render-setup\n this\n jsprops\n {:synthetic-on-update on-update, :synthetic-on-change on-change})\n (make-element argv comp jsprops first-child)))})\n"} {:sym has-selection-api?, :meta {:doc nil, :arglists ([input-type])}, :source "(defn\n has-selection-api?\n [input-type]\n (contains? these-inputs-have-selection-api input-type))\n"} {:sym str-coll, :meta {:doc nil, :arglists ([coll])}, :source "(defn\n str-coll\n [coll]\n (if\n (dev?)\n (str\n (prewalk\n (fn\n [x]\n (if\n (fn? x)\n (let [n (util/fun-name x)] (case n \"\" x (symbol n)))\n x))\n coll))\n (str coll)))\n"} {:sym get-key, :meta {:doc nil, :arglists ([x])}, :source "(defn get-key [x] (when (map? x) (try-get-key x)))\n"} {:sym re-tag, :meta {:doc "Regular expression that parses a CSS-style id and class\n from a tag name."}, :source "(def re-tag #\"([^\\s\\.#]+)(?:#([^\\s\\.#]+))?(?:\\.([^\\s#]+))?\")\n"} {:sym as-element, :meta {:doc nil, :arglists ([x])}, :source "(defn\n as-element\n [x]\n (cond\n (js-val? x)\n x\n (vector? x)\n (vec-to-elem x)\n (seq? x)\n (if (dev?) (expand-seq-check x) (expand-seq x))\n (named? x)\n (name x)\n (satisfies? IPrintWithWriter x)\n (pr-str x)\n :else\n x))\n"} {:sym input-component?, :meta {:doc nil, :arglists ([x])}, :source "(defn input-component? [x] (case x (\"input\" \"textarea\") true false))\n"} {:sym input-render-setup, :meta {:doc nil, :arglists [[this jsprops {:keys [synthetic-on-update synthetic-on-change]}] [this jsprops]]}, :source "(defn\n input-render-setup\n ([this jsprops {:keys [synthetic-on-update synthetic-on-change]}]\n (when\n (and\n (some? jsprops)\n (.hasOwnProperty jsprops \"onChange\")\n (.hasOwnProperty jsprops \"value\"))\n (assert\n find-dom-node\n \"reagent.dom needs to be loaded for controlled input to work\")\n (when\n synthetic-on-update\n ($! this :cljsSyntheticOnUpdate synthetic-on-update))\n (let\n [v\n ($ jsprops :value)\n value\n (if (nil? v) \"\" v)\n on-change\n ($ jsprops :onChange)\n on-change\n (if\n synthetic-on-change\n (partial synthetic-on-change on-change)\n on-change)]\n (when-not\n ($ this :cljsInputLive)\n ($! this :cljsInputLive true)\n ($! this :cljsDOMValue value))\n ($! this :cljsRenderedValue value)\n (js-delete jsprops \"value\")\n (doto\n jsprops\n ($! :defaultValue value)\n ($!\n :onChange\n (fn*\n [p1__18473#]\n (input-handle-change this on-change p1__18473#)))))))\n ([this jsprops] (input-render-setup this jsprops {})))\n"} {:sym input-component-set-value, :meta {:doc nil, :arglists ([this])}, :source "(defn\n input-component-set-value\n [this]\n (when\n ($ this :cljsInputLive)\n ($! this :cljsInputDirty false)\n (let\n [rendered-value\n ($ this :cljsRenderedValue)\n dom-value\n ($ this :cljsDOMValue)\n node\n (find-dom-node this)\n synthetic-on-update\n ($ this :cljsSyntheticOnUpdate)]\n (when\n (not= rendered-value dom-value)\n (if\n (fn? synthetic-on-update)\n (synthetic-on-update\n input-node-set-value\n node\n rendered-value\n dom-value\n this)\n (input-node-set-value node rendered-value dom-value this {}))))))\n"} {:sym stringify-class, :meta {:doc nil, :arglists ([{:keys [class], :as props}])}, :source "(defn\n stringify-class\n [{:keys [class], :as props}]\n (if\n (coll? class)\n (->> class (filter identity) (string/join \" \") (assoc props :class))\n props))\n"} {:sym oget, :meta {:doc nil, :arglists ([o k])}, :source "(defn oget [o k] (if (nil? o) nil (aget o k)))\n"} {:sym hiccup-tag?, :meta {:doc nil, :arglists ([x])}, :source "(defn hiccup-tag? [x] (or (named? x) (string? x)))\n"} {:sym set-id-class, :meta {:doc nil, :arglists ([p id-class])}, :source "(defn\n set-id-class\n [p id-class]\n (let\n [id\n ($ id-class :id)\n p\n (if (and (some? id) (nil? (oget p \"id\"))) (oset p \"id\" id) p)]\n (if-some\n [class ($ id-class :className)]\n (let\n [old (oget p \"className\")]\n (oset p \"className\" (if (nil? old) class (str class \" \" old))))\n p)))\n"} {:sym reagent-synthetic-input, :meta {:doc nil, :arglists ([])}, :source "(defn\n reagent-synthetic-input\n []\n (when\n (nil? reagent-synthetic-input-class)\n (set!\n reagent-synthetic-input-class\n (comp/create-class synthetic-input-spec)))\n reagent-synthetic-input-class)\n"} {:sym input-node-set-value, :meta {:doc nil, :arglists ([node rendered-value dom-value component {:keys [on-write]}])}, :source "(defn\n input-node-set-value\n [node rendered-value dom-value component {:keys [on-write]}]\n (if-not\n (and\n (identical? node ($ js/document :activeElement))\n (has-selection-api? ($ node :type))\n (string? rendered-value)\n (string? dom-value))\n (do\n ($! component :cljsDOMValue rendered-value)\n ($! node :value rendered-value)\n (when (fn? on-write) (on-write rendered-value)))\n (let\n [node-value ($ node :value)]\n (if\n (not= node-value dom-value)\n (batch/do-after-render\n (fn* [] (input-component-set-value component)))\n (let\n [existing-offset-from-end\n (- (count node-value) ($ node :selectionStart))\n new-cursor-offset\n (- (count rendered-value) existing-offset-from-end)]\n ($! component :cljsDOMValue rendered-value)\n ($! node :value rendered-value)\n (when (fn? on-write) (on-write rendered-value))\n ($! node :selectionStart new-cursor-offset)\n ($! node :selectionEnd new-cursor-offset))))))\n"} {:sym convert-props, :meta {:doc nil, :arglists ([props id-class])}, :source "(defn\n convert-props\n [props id-class]\n (-> props stringify-class convert-prop-value (set-id-class id-class)))\n"} {:sym hiccup-err, :meta {:doc nil, :arglists ([v & msg])}, :source "(defn\n hiccup-err\n [v & msg]\n (str (apply str msg) \": \" (str-coll v) \"\\n\" (comp/comp-name)))\n"} {:sym named?, :meta {:doc nil, :arglists ([x])}, :source "(defn named? [x] (or (keyword? x) (symbol? x)))\n"} {:sym kv-conv, :meta {:doc nil, :arglists ([o k v])}, :source "(defn\n kv-conv\n [o k v]\n (doto o (aset (cached-prop-name k) (convert-prop-value v))))\n"} {:sym key-from-vec, :meta {:doc nil, :arglists ([v])}, :source "(defn\n key-from-vec\n [v]\n (if-some [k (-> (meta v) get-key)] k (-> v (nth 1 nil) get-key)))\n"} {:sym js-val?, :meta {:doc nil, :arglists ([x])}, :source "(defn js-val? [x] (not (identical? \"object\" (goog/typeOf x))))\n"} {:sym input-unmount, :meta {:doc nil, :arglists ([this])}, :source "(defn input-unmount [this] ($! this :cljsInputLive nil))\n"} {:sym reagent-input-class, :meta {}, :source "(def reagent-input-class nil)\n"} {:sym native-element, :meta {:doc nil, :arglists ([parsed argv first])}, :source "(defn\n native-element\n [parsed argv first]\n (let\n [comp ($ parsed :name) synthetic-input ($ parsed :syntheticInput)]\n (let\n [props\n (nth argv first nil)\n hasprops\n (or (nil? props) (map? props))\n jsprops\n (convert-props (if hasprops props) parsed)\n first-child\n (+ first (if hasprops 1 0))]\n (if\n (or synthetic-input (input-component? comp))\n (->\n (if\n synthetic-input\n [(reagent-synthetic-input)\n ($ parsed :syntheticOnUpdate)\n ($ parsed :syntheticOnChange)\n argv\n comp\n jsprops\n first-child]\n [(reagent-input) argv comp jsprops first-child])\n (with-meta (meta argv))\n as-element)\n (let\n [key\n (-> (meta argv) get-key)\n p\n (if (nil? key) jsprops (oset jsprops \"key\" key))]\n (make-element argv comp p first-child))))))\n"} {:sym reagent-input, :meta {:doc nil, :arglists ([])}, :source "(defn\n reagent-input\n []\n (when\n (nil? reagent-input-class)\n (set! reagent-input-class (comp/create-class input-spec)))\n reagent-input-class)\n"} {:sym cache-get, :meta {:doc nil, :arglists ([o k])}, :source "(defn cache-get [o k] (when (.hasOwnProperty o k) (aget o k)))\n"} {:sym input-handle-change, :meta {:doc nil, :arglists ([this on-change e])}, :source "(defn\n input-handle-change\n [this on-change e]\n ($! this :cljsDOMValue (-> e .-target .-value))\n (when-not\n ($ this :cljsInputDirty)\n ($! this :cljsInputDirty true)\n (batch/do-after-render (fn* [] (input-component-set-value this))))\n (on-change e))\n"} {:sym input-spec, :meta {}, :source "(def\n input-spec\n {:display-name \"ReagentInput\",\n :component-did-update input-component-set-value,\n :component-will-unmount input-unmount,\n :reagent-render\n (fn\n [argv comp jsprops first-child]\n (let\n [this comp/*current-component*]\n (input-render-setup this jsprops)\n (make-element argv comp jsprops first-child)))})\n"} {:sym expand-seq-dev, :meta {:doc nil, :arglists ([s o])}, :source "(defn\n expand-seq-dev\n [s o]\n (let\n [a (into-array s)]\n (dotimes\n [i (alength a)]\n (let\n [val (aget a i)]\n (when\n (and (vector? val) (nil? (key-from-vec val)))\n ($! o :no-key true))\n (aset a i (as-element val))))\n a))\n"} {:sym cached-prop-name, :meta {:doc nil, :arglists ([k])}, :source "(defn\n cached-prop-name\n [k]\n (if\n (named? k)\n (if-some\n [k' (cache-get prop-name-cache (name k))]\n k'\n (aset prop-name-cache (name k) (util/dash-to-camel k)))\n k))\n"} {:sym these-inputs-have-selection-api, :meta {}, :source "(def\n these-inputs-have-selection-api\n #{\"url\" \"tel\" \"text\" \"textarea\" \"password\" \"search\"})\n"} {:sym expand-seq, :meta {:doc nil, :arglists ([s])}, :source "(defn\n expand-seq\n [s]\n (let\n [a (into-array s)]\n (dotimes [i (alength a)] (aset a i (as-element (aget a i))))\n a))\n"} {:sym reagent-synthetic-input-class, :meta {}, :source "(def reagent-synthetic-input-class nil)\n"} {:sym find-dom-node, :meta {}, :source "(defonce find-dom-node nil)\n"} {:sym cached-parse, :meta {:doc nil, :arglists ([x])}, :source "(defn\n cached-parse\n [x]\n (if-some\n [s (cache-get tag-name-cache x)]\n s\n (aset tag-name-cache x (parse-tag x))))\n"} {:sym try-get-key, :meta {:doc nil, :arglists ([x])}, :source "(defn try-get-key [x] (try (get x :key) (catch :default e)))\n"}), reagent.impl.batching ({:sym fake-raf, :meta {:doc nil, :arglists ([f])}, :source "(defn fake-raf [f] (js/setTimeout f 16))\n"} {:sym do-before-flush, :meta {:doc nil, :arglists ([f])}, :source "(defn do-before-flush [f] (.add-before-flush render-queue f))\n"} {:sym flush-after-render, :meta {:doc nil, :arglists ([])}, :source "(defn flush-after-render [] (.flush-after-render render-queue))\n"} {:sym queue-render, :meta {:doc nil, :arglists ([c])}, :source "(defn\n queue-render\n [c]\n (when-not\n ($ c :cljsIsDirty)\n ($! c :cljsIsDirty true)\n (.queue-render render-queue c)))\n"} {:sym next-tick, :meta {}, :source "(def\n next-tick\n (if-not\n is-client\n fake-raf\n (let\n [w js/window]\n (or\n ($ w :requestAnimationFrame)\n ($ w :webkitRequestAnimationFrame)\n ($ w :mozRequestAnimationFrame)\n ($ w :msRequestAnimationFrame)\n fake-raf))))\n"} {:sym flush, :meta {:doc nil, :arglists ([])}, :source "(defn flush [] (.flush-queues render-queue))\n"} {:sym mark-rendered, :meta {:doc nil, :arglists ([c])}, :source "(defn mark-rendered [c] ($! c :cljsIsDirty false))\n"} {:sym schedule, :meta {:doc nil, :arglists ([])}, :source "(defn\n schedule\n []\n (when (false? (.-scheduled? render-queue)) (.schedule render-queue)))\n"} {:sym render-queue, :meta {}, :source "(defonce render-queue (->RenderQueue false))\n"} {:sym compare-mount-order, :meta {:doc nil, :arglists ([c1 c2])}, :source "(defn\n compare-mount-order\n [c1 c2]\n (- ($ c1 :cljsMountOrder) ($ c2 :cljsMountOrder)))\n"} {:sym mount-count, :meta {}, :source "(defonce mount-count 0)\n"} {:sym next-mount-count, :meta {:doc nil, :arglists ([])}, :source "(defn next-mount-count [] (set! mount-count (inc mount-count)))\n"} {:sym do-after-render, :meta {:doc nil, :arglists ([f])}, :source "(defn do-after-render [f] (.add-after-render render-queue f))\n"} {:sym run-queue, :meta {:doc nil, :arglists ([a])}, :source "(defn\n run-queue\n [a]\n (.sort a compare-mount-order)\n (dotimes\n [i (alength a)]\n (let\n [c (aget a i)]\n (when (true? ($ c :cljsIsDirty)) ($ c forceUpdate)))))\n"} {:sym ratom-flush, :meta {}, :source "(defonce ratom-flush (fn []))\n"}), cljs.core.async.impl.buffers ({:sym acopy, :meta {:doc nil, :arglists ([src src-start dest dest-start len])}, :source "(defn\n acopy\n [src src-start dest dest-start len]\n (loop\n [cnt 0]\n (when\n (< cnt len)\n (aset dest (+ dest-start cnt) (aget src (+ src-start cnt)))\n (recur (inc cnt)))))\n"} {:sym ring-buffer, :meta {:doc nil, :arglists ([n])}, :source "(defn\n ring-buffer\n [n]\n (assert (> n 0) \"Can't create a ring buffer of size 0\")\n (RingBuffer. 0 0 0 (make-array n)))\n"} {:sym fixed-buffer, :meta {:doc nil, :arglists ([n])}, :source "(defn fixed-buffer [n] (FixedBuffer. (ring-buffer n) n))\n"} {:sym dropping-buffer, :meta {:doc nil, :arglists ([n])}, :source "(defn dropping-buffer [n] (DroppingBuffer. (ring-buffer n) n))\n"} {:sym sliding-buffer, :meta {:doc nil, :arglists ([n])}, :source "(defn sliding-buffer [n] (SlidingBuffer. (ring-buffer n) n))\n"} {:sym promise-buffer, :meta {:doc nil, :arglists ([])}, :source "(defn promise-buffer [] (PromiseBuffer. NO-VAL))\n"}), cljs.core.async.impl.protocols ({:sym remove!, :meta {:doc "remove and return next item from buffer, called under chan mutex", :arglists ([b])}, :protocol Buffer} {:sym close-buf!, :meta {:doc "called on chan closed under chan mutex, return ignored", :arglists ([b])}, :protocol Buffer} {:sym close!, :meta {:doc nil, :arglists ([chan])}, :protocol Channel} {:sym Handler, :meta {:doc nil}, :methods (active? blockable? commit)} {:sym blockable?, :meta {:doc "returns true if this handler may be blocked, otherwise it must not block", :arglists ([h])}, :protocol Handler} {:sym active?, :meta {:doc "returns true if has callback. Must work w/o lock", :arglists ([h])}, :protocol Handler} {:sym Buffer, :meta {:doc nil}, :methods (add!* close-buf! full? remove!)} {:sym full?, :meta {:doc "returns true if buffer cannot accept put", :arglists ([b])}, :protocol Buffer} {:sym add!, :meta {:doc nil, :arglists [[b] [b itm]]}, :source "(defn add! ([b] b) ([b itm] (assert (not (nil? itm))) (add!* b itm)))\n"} {:sym add!*, :meta {:doc "if room, add item to the buffer, returns b, called under chan mutex", :arglists ([b itm])}, :protocol Buffer} {:sym ReadPort, :meta {:doc nil}, :methods (take!)} {:sym Channel, :meta {:doc nil}, :methods (close! closed?)} {:sym closed?, :meta {:doc nil, :arglists ([chan])}, :protocol Channel} {:sym UnblockingBuffer, :meta {:doc nil}, :methods ()} {:sym MAX-QUEUE-SIZE, :meta {}, :source "(def MAX-QUEUE-SIZE 1024)\n"} {:sym commit, :meta {:doc "commit to fulfilling its end of the transfer, returns cb. Must be called within lock", :arglists ([h])}, :protocol Handler} {:sym put!, :meta {:doc "derefable boolean (false if already closed) if handled, nil if put was enqueued.\n Must throw on nil val.", :arglists ([port val fn1-handler])}, :protocol WritePort} {:sym take!, :meta {:doc "derefable val if taken, nil if take was enqueued", :arglists ([port fn1-handler])}, :protocol ReadPort} {:sym WritePort, :meta {:doc nil}, :methods (put!)}), figwheel.client.file-reloading ({:sym figwheel-require, :meta {:doc nil, :arglists ([src reload])}, :source "(defn\n figwheel-require\n [src reload]\n (set! (.-require js/goog) figwheel-require)\n (when\n (= reload \"reload-all\")\n (doseq [ns (get-all-dependencies src)] (unprovide! ns)))\n (when reload (unprovide! src))\n (.require_figwheel_backup_ js/goog src))\n"} {:sym create-node-script-import-fn, :meta {:doc nil, :arglists ([])}, :source "(defn\n create-node-script-import-fn\n []\n (let\n [node-path-lib\n (js/require \"path\")\n util-pattern\n (str\n (.-sep node-path-lib)\n (.join node-path-lib \"goog\" \"bootstrap\" \"nodejs.js\"))\n util-path\n (gobj/findKey\n js/require.cache\n (fn [v k o] (gstring/endsWith k util-pattern)))\n parts\n (-> (string/split util-path #\"[/\\\\]\") pop pop)\n root-path\n (string/join (.-sep node-path-lib) parts)]\n (fn\n [request-url callback]\n (dev-assert (string? request-url) (not (nil? callback)))\n (let\n [cache-path (.resolve node-path-lib root-path request-url)]\n (gobj/remove (.-cache js/require) cache-path)\n (callback\n (try\n (js/require cache-path)\n (catch\n js/Error\n e\n (utils/log\n :error\n (str \"Figwheel: Error loading file \" cache-path))\n (utils/log :error (.-stack e))\n false)))))))\n"} {:sym matches-file?, :meta {:doc nil, :arglists ([{:keys [file]} link])}, :source "(defn\n matches-file?\n [{:keys [file]} link]\n (when-let\n [link-href (.-href link)]\n (let\n [match\n (string/join\n \"/\"\n (take-while\n identity\n (map\n (fn*\n [p1__18493# p2__18494#]\n (if (= p1__18493# p2__18494#) p1__18493# false))\n (reverse (string/split file \"/\"))\n (reverse (string/split (truncate-url link-href) \"/\")))))\n match-length\n (count match)\n file-name-length\n (count (last (string/split file \"/\")))]\n (when\n (>= match-length file-name-length)\n {:link link,\n :link-href link-href,\n :match-length match-length,\n :current-url-length (count (truncate-url link-href))}))))\n"} {:sym build-topo-sort, :meta {:doc nil, :arglists ([get-deps])}, :source "(defn\n build-topo-sort\n [get-deps]\n (let\n [get-deps (memoize get-deps)]\n (letfn\n [(topo-sort-helper*\n [x depth state]\n (let\n [deps (get-deps x)]\n (when-not (empty? deps) (topo-sort* deps depth state))))\n (topo-sort*\n ([deps] (topo-sort* deps 0 (atom (sorted-map))))\n ([deps depth state]\n (swap! state update-in [depth] (fnil into #{}) deps)\n (doseq\n [dep deps]\n (when\n (and dep (not (in-upper-level? @state depth dep)))\n (topo-sort-helper* dep (inc depth) state)))\n (when (= depth 0) (elim-dups* (reverse (vals @state))))))\n (elim-dups*\n [[x & xs]]\n (if\n (nil? x)\n (list)\n (cons\n x\n (elim-dups*\n (map (fn* [p1__18484#] (difference p1__18484# x)) xs)))))]\n topo-sort*)))\n"} {:sym unprovide!, :meta {:doc nil, :arglists ([ns])}, :source "(defn\n unprovide!\n [ns]\n (let\n [path (name->path ns)]\n (gobj/remove js/goog.dependencies_.visited path)\n (gobj/remove js/goog.dependencies_.written path)\n (gobj/remove\n js/goog.dependencies_.written\n (str js/goog.basePath path))))\n"} {:sym get-all-dependents, :meta {:doc nil, :arglists ([nss])}, :source "(defn\n get-all-dependents\n [nss]\n (let\n [topo-sort' (build-topo-sort ns->dependents)]\n (filter\n (comp not immutable-ns?)\n (reverse (apply concat (topo-sort' (set nss)))))))\n"} {:sym addDependency, :meta {:doc nil, :arglists ([path provides requires])}, :source "(defn\n addDependency\n [path provides requires]\n (doseq\n [prov provides]\n (path-to-name! path prov)\n (doseq [req requires] (name-to-parent! req prov))))\n"} {:sym figwheel-no-load?, :meta {:doc nil, :arglists ([{:keys [namespace], :as file-msg}])}, :source "(defn\n figwheel-no-load?\n [{:keys [namespace], :as file-msg}]\n (let\n [meta-pragmas (get @figwheel-meta-pragmas (name namespace))]\n (:figwheel-no-load meta-pragmas)))\n"} {:sym write-script-tag-import, :meta {}, :source "(def write-script-tag-import reload-file-in-html-env)\n"} {:sym namespace-file-map?, :meta {:doc nil, :arglists ([m])}, :source "(defn\n namespace-file-map?\n [m]\n (or\n (and\n (map? m)\n (string? (:namespace m))\n (or (nil? (:file m)) (string? (:file m)))\n (= (:type m) :namespace))\n (do (println \"Error not namespace-file-map\" (pr-str m)) false)))\n"} {:sym path->name, :meta {:doc "returns a set of namespaces defined by a path", :arglists ([path])}, :source "(defn\n path->name\n \"returns a set of namespaces defined by a path\"\n [path]\n (get-in @dependency-data [:pathToName path]))\n"} {:sym get-figwheel-always, :meta {:doc nil, :arglists ([])}, :source "(defn\n get-figwheel-always\n []\n (map\n (fn [[k v]] {:namespace k, :type :namespace})\n (filter (fn [[k v]] (:figwheel-always v)) @figwheel-meta-pragmas)))\n"} {:sym name-to-parent!, :meta {:doc nil, :arglists ([ns parent-ns])}, :source "(defn\n name-to-parent!\n [ns parent-ns]\n (swap!\n dependency-data\n update-in\n [:dependents ns]\n (fnil clojure.set/union #{})\n #{parent-ns}))\n"} {:sym current-links, :meta {:doc nil, :arglists ([])}, :source "(defn\n current-links\n []\n (.call\n (.. js/Array -prototype -slice)\n (.getElementsByTagName js/document \"link\")))\n"} {:sym on-cssload-custom-event, :meta {:doc nil, :arglists ([files])}, :source "(defn\n on-cssload-custom-event\n [files]\n (utils/dispatch-custom-event \"figwheel.css-reload\" files))\n"} {:sym blocking-load, :meta {:doc nil, :arglists ([url])}, :source "(defn\n blocking-load\n [url]\n (let\n [out (chan)]\n (reload-file\n {:request-url url}\n (fn [file-msg] (put! out file-msg) (close! out)))\n out))\n"} {:sym reload-css-files, :meta {:doc nil, :arglists ([{:keys [on-cssload]} {:keys [files], :as files-msg}])}, :source "(defn\n reload-css-files\n [{:keys [on-cssload]} {:keys [files], :as files-msg}]\n (when\n (utils/html-env?)\n (when-let\n [f-datas (not-empty (distinctify :file files))]\n (swap!\n reload-css-deferred-chain\n reload-css-files*\n f-datas\n on-cssload))))\n"} {:sym add-cache-buster, :meta {:doc nil, :arglists ([url])}, :source "(defn\n add-cache-buster\n [url]\n (dev-assert (string? url))\n (.makeUnique (guri/parse url)))\n"} {:sym ns->dependents, :meta {:doc nil, :arglists ([ns])}, :source "(defn ns->dependents [ns] (get-in @dependency-data [:dependents ns]))\n"} {:sym on-load-callbacks, :meta {}, :source "(defonce on-load-callbacks (atom {}))\n"} {:sym reload-chan, :meta {}, :source "(defonce reload-chan (chan))\n"} {:sym get-correct-link, :meta {:doc nil, :arglists ([f-data])}, :source "(defn\n get-correct-link\n [f-data]\n (when-let\n [res\n (first\n (sort-by\n (fn\n [{:keys [match-length current-url-length]}]\n (- current-url-length match-length))\n (keep\n (fn* [p1__18495#] (matches-file? f-data p1__18495#))\n (current-links))))]\n (:link res)))\n"} {:sym expand-files, :meta {:doc nil, :arglists ([files])}, :source "(defn\n expand-files\n [files]\n (let\n [deps (get-all-dependents (map :namespace files))]\n (filter\n (comp not (partial re-matches #\"figwheel\\.connect.*\") :namespace)\n (map\n (fn\n [n]\n (if-let\n [file-msg\n (first\n (filter\n (fn* [p1__18489#] (= (:namespace p1__18489#) n))\n files))]\n file-msg\n {:type :namespace, :namespace n}))\n deps))))\n"} {:sym setup-ns->dependents!, :meta {:doc "This reverses the goog.dependencies_.requires for looking up ns-dependents.", :arglists ([])}, :source "(defn\n setup-ns->dependents!\n \"This reverses the goog.dependencies_.requires for looking up ns-dependents.\"\n []\n (let\n [requires\n (gobj/filter\n js/goog.dependencies_.requires\n (fn [v k o] (gstring/startsWith k \"../\")))]\n (gobj/forEach\n requires\n (fn\n [v k _]\n (gobj/forEach\n v\n (fn\n [v' k' _]\n (doseq [n (path->name k)] (name-to-parent! k' n))))))))\n"} {:sym before-jsload-custom-event, :meta {:doc nil, :arglists ([files])}, :source "(defn\n before-jsload-custom-event\n [files]\n (utils/dispatch-custom-event \"figwheel.before-js-reload\" files))\n"} {:sym setup-path->name!, :meta {:doc "Setup a path to name dependencies map.\n That goes from path -> #{ ns-names }", :arglists ([])}, :source "(defn\n setup-path->name!\n \"Setup a path to name dependencies map.\\n That goes from path -> #{ ns-names }\"\n []\n (let\n [nameToPath\n (gobj/filter\n js/goog.dependencies_.nameToPath\n (fn [v k o] (gstring/startsWith v \"../\")))]\n (gobj/forEach nameToPath (fn [v k o] (path-to-name! v k)))))\n"} {:sym js-reload, :meta {:doc nil, :arglists ([{:keys [request-url namespace], :as file-msg} callback])}, :source "(defn\n js-reload\n [{:keys [request-url namespace], :as file-msg} callback]\n (dev-assert (namespace-file-map? file-msg))\n (if\n (reload-file? file-msg)\n (require-with-callback file-msg callback)\n (do\n (utils/debug-prn\n (str \"Figwheel: Not trying to load file \" request-url))\n (apply callback [file-msg]))))\n"} {:sym get-requires, :meta {:doc nil, :arglists ([ns])}, :source "(defn\n get-requires\n [ns]\n (->>\n ns\n name->path\n (gobj/get js/goog.dependencies_.requires)\n (gobj/getKeys)\n (filter (fn* [p1__18483#] (not (immutable-ns? p1__18483#))))\n set))\n"} {:sym add-link-to-document, :meta {:doc nil, :arglists ([orig-link klone finished-fn])}, :source "(defn\n add-link-to-document\n [orig-link klone finished-fn]\n (let\n [parent (.-parentNode orig-link)]\n (if\n (= orig-link (.-lastChild parent))\n (.appendChild parent klone)\n (.insertBefore parent klone (.-nextSibling orig-link)))\n (js/setTimeout\n (fn* [] (do (.removeChild parent orig-link) (finished-fn)))\n 300)))\n"} {:sym truncate-url, :meta {:doc nil, :arglists ([url])}, :source "(defn\n truncate-url\n [url]\n (->\n (first (string/split url #\"\\?\"))\n (string/replace-first (str (.-protocol js/location) \"//\") \"\")\n (string/replace-first \".*://\" \"\")\n (string/replace-first #\"^//\" \"\")\n (string/replace-first #\"[^\\/]*\" \"\")))\n"} {:sym clone-link, :meta {:doc nil, :arglists ([link url])}, :source "(defn\n clone-link\n [link url]\n (let\n [clone (.createElement js/document \"link\")]\n (set! (.-rel clone) \"stylesheet\")\n (set! (.-media clone) (.-media link))\n (set! (.-disabled clone) (.-disabled link))\n (set! (.-href clone) (add-cache-buster url))\n clone))\n"} {:sym name->path, :meta {:doc nil, :arglists ([ns])}, :source "(defn\n name->path\n [ns]\n (dev-assert (string? ns))\n (gobj/get js/goog.dependencies_.nameToPath ns))\n"} {:sym reloader-loop, :meta {}, :source "(defonce\n reloader-loop\n (go-loop\n []\n (when-let\n [[url opt-source-text] (name!)\n (setup-ns->dependents!)\n (set!\n (.-addDependency_figwheel_backup_ js/goog)\n js/goog.addDependency)\n (set!\n (.-addDependency js/goog)\n (fn\n [& args]\n (apply addDependency args)\n (apply (.-addDependency_figwheel_backup_ js/goog) args)))\n (goog/constructNamespace_ \"cljs.user\")\n (set! (.-CLOSURE_IMPORT_SCRIPT goog/global) queued-file-reload)\n (set! (.-require js/goog) figwheel-require)))\n"} {:sym reload-css-deferred-chain, :meta {}, :source "(defonce reload-css-deferred-chain (atom (.succeed Deferred)))\n"} {:sym reload-css-files*, :meta {:doc nil, :arglists ([deferred f-datas on-cssload])}, :source "(defn\n reload-css-files*\n [deferred f-datas on-cssload]\n (->\n deferred\n (utils/mapConcatD reload-css-file f-datas)\n (utils/liftContD\n (fn\n [f-datas' fin]\n (let\n [loaded-f-datas (filter :loaded f-datas')]\n (on-cssload-custom-event loaded-f-datas)\n (when (fn? on-cssload) (on-cssload loaded-f-datas)))\n (fin)))))\n"} {:sym in-upper-level?, :meta {:doc nil, :arglists ([topo-state current-depth dep])}, :source "(defn\n in-upper-level?\n [topo-state current-depth dep]\n (some\n (fn [[_ v]] (and v (v dep)))\n (filter (fn [[k v]] (> k current-depth)) topo-state)))\n"} {:sym get-all-dependencies, :meta {:doc nil, :arglists ([ns])}, :source "(defn\n get-all-dependencies\n [ns]\n (let\n [topo-sort' (build-topo-sort get-requires)]\n (apply concat (topo-sort' (set [ns])))))\n"} {:sym queued-file-reload, :meta {:doc nil, :arglists [[url] [url opt-source-text]]}, :source "(defn\n queued-file-reload\n ([url] (queued-file-reload url nil))\n ([url opt-source-text] (put! reload-chan [url opt-source-text])))\n"} {:sym gloader, :meta {}, :source "(def\n gloader\n (cond\n (exists? loader/safeLoad)\n (fn*\n [p1__18485# p2__18486#]\n (loader/safeLoad\n (conv/trustedResourceUrlFromString (str p1__18485#))\n p2__18486#))\n (exists? loader/load)\n (fn*\n [p1__18487# p2__18488#]\n (loader/load (str p1__18487#) p2__18488#))\n :else\n (throw (ex-info \"No remote script loading function found.\" {}))))\n"} {:sym patch-goog-base, :meta {:doc nil, :arglists ([])}, :source "(defn\n patch-goog-base\n []\n (defonce bootstrapped-cljs (do (bootstrap-goog-base) true)))\n"} {:sym reload-file?, :meta {:doc nil, :arglists ([{:keys [namespace], :as file-msg}])}, :source "(defn\n reload-file?\n [{:keys [namespace], :as file-msg}]\n (dev-assert (namespace-file-map? file-msg))\n (let\n [meta-pragmas (get @figwheel-meta-pragmas (name namespace))]\n (and\n (not (figwheel-no-load? file-msg))\n (or\n (:figwheel-always meta-pragmas)\n (:figwheel-load meta-pragmas)\n (provided? (name namespace))))))\n"} {:sym on-jsload-custom-event, :meta {:doc nil, :arglists ([url])}, :source "(defn\n on-jsload-custom-event\n [url]\n (utils/dispatch-custom-event \"figwheel.js-reload\" url))\n"} {:sym dependencies-loaded, :meta {}, :source "(defonce dependencies-loaded (atom []))\n"} {:sym reload-css-file, :meta {:doc nil, :arglists ([f-data fin])}, :source "(defn\n reload-css-file\n [f-data fin]\n (if-let\n [link (get-correct-link f-data)]\n (add-link-to-document\n link\n (clone-link link (.-href link))\n (fn* [] (fin (assoc f-data :loaded true))))\n (fin f-data)))\n"} {:sym provided?, :meta {:doc nil, :arglists ([ns])}, :source "(defn\n provided?\n [ns]\n (gobj/get js/goog.dependencies_.written (name->path ns)))\n"} {:sym immutable-ns?, :meta {:doc nil, :arglists ([name])}, :source "(defn\n immutable-ns?\n [name]\n (or\n (#{\"cljs.nodejs\" \"goog\" \"cljs.core\"} name)\n (goog.string/startsWith \"clojure.\" name)\n (goog.string/startsWith \"goog.\" name)))\n"} {:sym figwheel-meta-pragmas, :meta {}, :source "(defonce figwheel-meta-pragmas (atom {}))\n"} {:sym sort-files, :meta {:doc nil, :arglists ([files])}, :source "(defn\n sort-files\n [files]\n (if\n (<= (count files) 1)\n files\n (let\n [keep-files (set (keep :namespace files))]\n (filter (comp keep-files :namespace) (expand-files files)))))\n"} {:sym resolve-ns, :meta {:doc nil, :arglists ([ns])}, :source "(defn resolve-ns [ns] (str goog/basePath (name->path ns)))\n"} {:sym reload-js-file, :meta {:doc nil, :arglists ([file-msg])}, :source "(defn\n reload-js-file\n [file-msg]\n (let\n [out (chan)]\n (js-reload file-msg (fn [url] (put! out url) (close! out)))\n out))\n"} {:sym eval-body, :meta {:doc nil, :arglists ([{:keys [eval-body file]} opts])}, :source "(defn\n eval-body\n [{:keys [eval-body file]} opts]\n (when\n (and eval-body (string? eval-body))\n (let\n [code eval-body]\n (try\n (utils/debug-prn (str \"Evaling file \" file))\n (utils/eval-helper code opts)\n (catch\n :default\n e\n (utils/log :error (str \"Unable to evaluate \" file)))))))\n"} {:sym load-all-js-files, :meta {:doc "Returns a chanel with one collection of loaded filenames on it.", :arglists ([files])}, :source "(defn\n load-all-js-files\n \"Returns a chanel with one collection of loaded filenames on it.\"\n [files]\n (let\n [out (chan)]\n (go-loop\n [[f & fs] files]\n (if-not\n (nil? f)\n (do (put! out (path (name namespace)) file))\n res)))\n (js/setTimeout\n (fn* [] (do (on-jsload-custom-event res) (apply on-jsload [res])))\n 10))\n (when\n (not-empty files-not-loaded)\n (utils/log :debug \"Figwheel: NOT loading these files \")\n (let\n [{:keys [figwheel-no-load not-required]}\n (group-by\n (fn\n [{:keys [namespace]}]\n (let\n [meta-data (get @figwheel-meta-pragmas (name namespace))]\n (cond\n (nil? meta-data)\n :not-required\n (meta-data :figwheel-no-load)\n :figwheel-no-load\n :else\n :not-required)))\n files-not-loaded)]\n (when\n (not-empty figwheel-no-load)\n (utils/log\n (str\n \"figwheel-no-load meta-data: \"\n (pr-str (map (comp name->path :namespace) figwheel-no-load)))))\n (when\n (not-empty not-required)\n (utils/log\n (str \"not required: \" (pr-str (map :file not-required))))))))))\n"} {:sym worker-import-script, :meta {:doc nil, :arglists ([request-url callback])}, :source "(defn\n worker-import-script\n [request-url callback]\n (dev-assert (string? request-url) (not (nil? callback)))\n (callback\n (try\n (do (.importScripts js/self (add-cache-buster request-url)) true)\n (catch\n js/Error\n e\n (utils/log\n :error\n (str \"Figwheel: Error loading file \" request-url))\n (utils/log :error (.-stack e))\n false))))\n"} {:sym reload-file, :meta {:doc nil, :arglists ([{:keys [request-url], :as file-msg} callback])}, :source "(defn\n reload-file\n [{:keys [request-url], :as file-msg} callback]\n (dev-assert (string? request-url) (not (nil? callback)))\n (utils/debug-prn (str \"FigWheel: Attempting to load \" request-url))\n ((or (gobj/get goog.global \"FIGWHEEL_IMPORT_SCRIPT\") reload-file*)\n request-url\n (fn\n [success?]\n (if\n success?\n (do\n (utils/debug-prn\n (str \"FigWheel: Successfully loaded \" request-url))\n (apply callback [(assoc file-msg :loaded-file true)]))\n (do\n (utils/log\n :error\n (str \"Figwheel: Error loading file \" request-url))\n (apply callback [file-msg]))))))\n"} {:sym dependency-data, :meta {}, :source "(defonce dependency-data (atom {:pathToName {}, :dependents {}}))\n"}), cljs.tools.reader.impl.inspect ({:sym inspect, :meta {:doc "Return a string description of the value supplied.\n May be the a string version of the value itself (e.g. \"true\")\n or it may be a description (e.g. \"an instance of Foo\").\n If truncate is true then return a very terse version of\n the inspection.", :arglists [[x] [truncate x]]}, :source "(defn\n inspect\n \"Return a string description of the value supplied.\\n May be the a string version of the value itself (e.g. \\\"true\\\")\\n or it may be a description (e.g. \\\"an instance of Foo\\\").\\n If truncate is true then return a very terse version of\\n the inspection.\"\n ([x] (inspect* false x))\n ([truncate x] (inspect* truncate x)))\n"}), sablono.core ({:sym wrap-attrs, :meta {:doc "Add an optional attribute argument to a function that returns a element vector.", :arglists ([func])}, :source "(defn\n wrap-attrs\n \"Add an optional attribute argument to a function that returns a element vector.\"\n [func]\n (fn\n [& args]\n (if\n (map? (first args))\n (let\n [[tag & body] (apply func (rest args))]\n (if\n (map? (first body))\n (into [tag (merge (first body) (first args))] (rest body))\n (into [tag (first args)] body)))\n (apply func args))))\n"} {:sym include-css, :meta {:doc "Include a list of external stylesheet files.", :arglists ([& styles])}, :source "(defn\n include-css\n \"Include a list of external stylesheet files.\"\n [& styles]\n (for\n [style styles]\n [:link {:type \"text/css\", :href (as-str style), :rel \"stylesheet\"}]))\n"} {:sym include-react, :meta {:doc "Include Facebook's React JavaScript library.", :arglists ([])}, :source "(defn\n include-react\n \"Include Facebook's React JavaScript library.\"\n []\n (include-js \"http://fb.me/react-0.12.2.js\"))\n"} {:sym *group*, :meta {}, :source "(def *group* [])\n"} {:sym file-upload, :meta {}, :source "(def file-upload file-field)\n"}), clojure.set ({:sym union, :meta {:doc "Return a set that is the union of the input sets", :arglists [[] [s1] [s1 s2] [s1 s2 & sets]]}, :source "(defn\n union\n \"Return a set that is the union of the input sets\"\n ([] #{})\n ([s1] s1)\n ([s1 s2]\n (if\n (< (count s1) (count s2))\n (reduce conj s2 s1)\n (reduce conj s1 s2)))\n ([s1 s2 & sets]\n (let\n [bubbled-sets (bubble-max-key count (conj sets s2 s1))]\n (reduce into (first bubbled-sets) (rest bubbled-sets)))))\n"} {:sym map-invert, :meta {:doc "Returns the map with the vals mapped to the keys.", :arglists ([m])}, :source "(defn\n map-invert\n \"Returns the map with the vals mapped to the keys.\"\n [m]\n (reduce (fn [m [k v]] (assoc m v k)) {} m))\n"} {:sym join, :meta {:doc "When passed 2 rels, returns the rel corresponding to the natural\n join. When passed an additional keymap, joins on the corresponding\n keys.", :arglists [[xrel yrel] [xrel yrel km]]}, :source "(defn\n join\n \"When passed 2 rels, returns the rel corresponding to the natural\\n join. When passed an additional keymap, joins on the corresponding\\n keys.\"\n ([xrel yrel]\n (if\n (and (seq xrel) (seq yrel))\n (let\n [ks\n (intersection (set (keys (first xrel))) (set (keys (first yrel))))\n [r s]\n (if (<= (count xrel) (count yrel)) [xrel yrel] [yrel xrel])\n idx\n (index r ks)]\n (reduce\n (fn\n [ret x]\n (let\n [found (idx (select-keys x ks))]\n (if\n found\n (reduce\n (fn*\n [p1__18460# p2__18461#]\n (conj p1__18460# (merge p2__18461# x)))\n ret\n found)\n ret)))\n #{}\n s))\n #{}))\n ([xrel yrel km]\n (let\n [[r s k]\n (if\n (<= (count xrel) (count yrel))\n [xrel yrel (map-invert km)]\n [yrel xrel km])\n idx\n (index r (vals k))]\n (reduce\n (fn\n [ret x]\n (let\n [found (idx (rename-keys (select-keys x (keys k)) k))]\n (if\n found\n (reduce\n (fn*\n [p1__18462# p2__18463#]\n (conj p1__18462# (merge p2__18463# x)))\n ret\n found)\n ret)))\n #{}\n s))))\n"} {:sym select, :meta {:doc "Returns a set of the elements for which pred is true", :arglists ([pred xset])}, :source "(defn\n select\n \"Returns a set of the elements for which pred is true\"\n [pred xset]\n (reduce (fn [s k] (if (pred k) s (disj s k))) xset xset))\n"} {:sym intersection, :meta {:doc "Return a set that is the intersection of the input sets", :arglists [[s1] [s1 s2] [s1 s2 & sets]]}, :source "(defn\n intersection\n \"Return a set that is the intersection of the input sets\"\n ([s1] s1)\n ([s1 s2]\n (if\n (< (count s2) (count s1))\n (recur s2 s1)\n (reduce\n (fn\n [result item]\n (if (contains? s2 item) result (disj result item)))\n s1\n s1)))\n ([s1 s2 & sets]\n (let\n [bubbled-sets\n (bubble-max-key\n (fn* [p1__18457#] (- (count p1__18457#)))\n (conj sets s2 s1))]\n (reduce intersection (first bubbled-sets) (rest bubbled-sets)))))\n"} {:sym superset?, :meta {:doc "Is set1 a superset of set2?", :arglists ([set1 set2])}, :source "(defn\n superset?\n \"Is set1 a superset of set2?\"\n [set1 set2]\n (and\n (>= (count set1) (count set2))\n (every? (fn* [p1__18465#] (contains? set1 p1__18465#)) set2)))\n"} {:sym index, :meta {:doc "Returns a map of the distinct values of ks in the xrel mapped to a\n set of the maps in xrel with the corresponding values of ks.", :arglists ([xrel ks])}, :source "(defn\n index\n \"Returns a map of the distinct values of ks in the xrel mapped to a\\n set of the maps in xrel with the corresponding values of ks.\"\n [xrel ks]\n (reduce\n (fn\n [m x]\n (let [ik (select-keys x ks)] (assoc m ik (conj (get m ik #{}) x))))\n {}\n xrel))\n"} {:sym subset?, :meta {:doc "Is set1 a subset of set2?", :arglists ([set1 set2])}, :source "(defn\n subset?\n \"Is set1 a subset of set2?\"\n [set1 set2]\n (and\n (<= (count set1) (count set2))\n (every? (fn* [p1__18464#] (contains? set2 p1__18464#)) set1)))\n"} {:sym rename, :meta {:doc "Returns a rel of the maps in xrel with the keys in kmap renamed to the vals in kmap", :arglists ([xrel kmap])}, :source "(defn\n rename\n \"Returns a rel of the maps in xrel with the keys in kmap renamed to the vals in kmap\"\n [xrel kmap]\n (set (map (fn* [p1__18459#] (rename-keys p1__18459# kmap)) xrel)))\n"} {:sym rename-keys, :meta {:doc "Returns the map with the keys in kmap renamed to the vals in kmap", :arglists ([map kmap])}, :source "(defn\n rename-keys\n \"Returns the map with the keys in kmap renamed to the vals in kmap\"\n [map kmap]\n (reduce\n (fn\n [m [old new]]\n (if (contains? map old) (assoc m new (get map old)) m))\n (apply dissoc map (keys kmap))\n kmap))\n"} {:sym project, :meta {:doc "Returns a rel of the elements of xrel with only the keys in ks", :arglists ([xrel ks])}, :source "(defn\n project\n \"Returns a rel of the elements of xrel with only the keys in ks\"\n [xrel ks]\n (set (map (fn* [p1__18458#] (select-keys p1__18458# ks)) xrel)))\n"} {:sym difference, :meta {:doc "Return a set that is the first set without elements of the remaining sets", :arglists [[s1] [s1 s2] [s1 s2 & sets]]}, :source "(defn\n difference\n \"Return a set that is the first set without elements of the remaining sets\"\n ([s1] s1)\n ([s1 s2]\n (if\n (< (count s1) (count s2))\n (reduce\n (fn\n [result item]\n (if (contains? s2 item) (disj result item) result))\n s1\n s1)\n (reduce disj s1 s2)))\n ([s1 s2 & sets] (reduce difference s1 (conj sets s2))))\n"}), reagent.impl.component ({:sym get-props, :meta {:doc nil, :arglists ([c])}, :source "(defn\n get-props\n [c]\n (let\n [p ($ c :props)]\n (if-some [v ($ p :argv)] (extract-props v) (shallow-obj-to-map p))))\n"} {:sym get-wrapper, :meta {:doc nil, :arglists ([key f name])}, :source "(defn\n get-wrapper\n [key f name]\n (let\n [wrap (custom-wrapper key f)]\n (when (and wrap f) (assert-callable f))\n (or wrap f)))\n"} {:sym get-argv, :meta {:doc nil, :arglists ([c])}, :source "(defn get-argv [c] (props-argv c ($ c :props)))\n"} {:sym wrap-render, :meta {:doc nil, :arglists ([c])}, :source "(defn\n wrap-render\n [c]\n (let\n [f\n ($ c :reagentRender)\n _\n (assert-callable f)\n res\n (if\n (true? ($ c :cljsLegacyRender))\n (.call f c c)\n (let\n [v (get-argv c) n (count v)]\n (case\n n\n 1\n (.call f c)\n 2\n (.call f c (nth v 1))\n 3\n (.call f c (nth v 1) (nth v 2))\n 4\n (.call f c (nth v 1) (nth v 2) (nth v 3))\n 5\n (.call f c (nth v 1) (nth v 2) (nth v 3) (nth v 4))\n (.apply f c (.slice (into-array v) 1)))))]\n (cond\n (vector? res)\n (as-element res)\n (ifn? res)\n (let\n [f\n (if\n (reagent-class? res)\n (fn [& args] (as-element (apply vector res args)))\n res)]\n ($! c :reagentRender f)\n (recur c))\n :else\n res)))\n"} {:sym rat-opts, :meta {}, :source "(def rat-opts {:no-cache true})\n"} {:sym obligatory, :meta {}, :source "(def\n obligatory\n {:shouldComponentUpdate nil,\n :componentWillMount nil,\n :componentWillUnmount nil})\n"} {:sym props-argv, :meta {:doc nil, :arglists ([c p])}, :source "(defn\n props-argv\n [c p]\n (if-some [a ($ p :argv)] a [(.-constructor c) (shallow-obj-to-map p)]))\n"} {:sym as-element, :meta {}, :source "(defonce as-element nil)\n"} {:sym do-render, :meta {:doc nil, :arglists ([c])}, :source "(defn\n do-render\n [c]\n (binding\n [*current-component* c]\n (if\n (dev?)\n (let\n [ok (array false)]\n (try\n (let [res (wrap-render c)] (aset ok 0 true) res)\n (finally\n (when-not\n (aget ok 0)\n (error (str \"Error rendering component\" (comp-name)))))))\n (wrap-render c))))\n"} {:sym comp-name, :meta {:doc nil, :arglists ([])}, :source "(defn\n comp-name\n []\n (if\n (dev?)\n (let\n [c\n *current-component*\n n\n (or (component-path c) (some-> c .-constructor util/fun-name))]\n (if-not (empty? n) (str \" (in \" n \")\") \"\"))\n \"\"))\n"} {:sym add-obligatory, :meta {:doc nil, :arglists ([fun-map])}, :source "(defn add-obligatory [fun-map] (merge obligatory fun-map))\n"} {:sym cached-react-class, :meta {:doc nil, :arglists ([c])}, :source "(defn cached-react-class [c] ($ c :cljsReactClass))\n"} {:sym state-atom, :meta {:doc nil, :arglists ([this])}, :source "(defn\n state-atom\n [this]\n (let\n [sa ($ this :cljsState)]\n (if-not (nil? sa) sa ($! this :cljsState (ratom/atom nil)))))\n"} {:sym fiber-component-path, :meta {:doc nil, :arglists ([fiber])}, :source "(defn\n fiber-component-path\n [fiber]\n (let\n [name\n (some-> fiber ($ :type) ($ :displayName))\n parent\n (some-> fiber ($ :return))\n path\n (some-> parent fiber-component-path (str \" > \"))\n res\n (str path name)]\n (when-not (empty? res) res)))\n"} {:sym dash-to-camel, :meta {}, :source "(def dash-to-camel (util/memoize-1 util/dash-to-camel))\n"} {:sym reagent-component?, :meta {:doc nil, :arglists ([c])}, :source "(defn reagent-component? [c] (some? ($ c :reagentRender)))\n"} {:sym static-fns, :meta {}, :source "(def\n static-fns\n {:render\n (fn\n render\n []\n (this-as\n c\n (if\n util/*non-reactive*\n (do-render c)\n (let\n [rat ($ c :cljsRatom)]\n (batch/mark-rendered c)\n (if\n (nil? rat)\n (ratom/run-in-reaction\n (fn* [] (do-render c))\n c\n \"cljsRatom\"\n batch/queue-render\n rat-opts)\n (._run rat false))))))})\n"} {:sym as-class, :meta {:doc nil, :arglists ([tag])}, :source "(defn\n as-class\n [tag]\n (if-some\n [cached-class (cached-react-class tag)]\n cached-class\n (fn-to-class tag)))\n"} {:sym reagent-class?, :meta {:doc nil, :arglists ([c])}, :source "(defn\n reagent-class?\n [c]\n (and (fn? c) (some? (some-> c .-prototype ($ :reagentRender)))))\n"} {:sym fn-to-class, :meta {:doc nil, :arglists ([f])}, :source "(defn\n fn-to-class\n [f]\n (assert-callable f)\n (warn-unless\n (not (and (react-class? f) (not (reagent-class? f))))\n \"Using native React classes directly in Hiccup forms \"\n \"is not supported. Use create-element or \"\n \"adapt-react-class instead: \"\n (let [n (util/fun-name f)] (if (empty? n) f n))\n (comp-name))\n (if\n (reagent-class? f)\n (cache-react-class f f)\n (let\n [spec\n (meta f)\n withrender\n (assoc spec :reagent-render f)\n res\n (create-class withrender)]\n (cache-react-class f res))))\n"} {:sym reactify-component, :meta {:doc nil, :arglists ([comp])}, :source "(defn\n reactify-component\n [comp]\n (if (react-class? comp) comp (as-class comp)))\n"} {:sym extract-children, :meta {:doc nil, :arglists ([v])}, :source "(defn\n extract-children\n [v]\n (let\n [p (nth v 1 nil) first-child (if (or (nil? p) (map? p)) 2 1)]\n (if (> (count v) first-child) (subvec v first-child))))\n"} {:sym component-path, :meta {:doc nil, :arglists ([c])}, :source "(defn\n component-path\n [c]\n (if-let\n [fiber (some-> c ($ :_reactInternalFiber))]\n (fiber-component-path fiber)\n (let\n [elem\n (or\n (some->\n (or (some-> c ($ :_reactInternalInstance)) c)\n ($ :_currentElement)))\n name\n (some-> elem ($ :type) ($ :displayName))\n path\n (some-> elem ($ :_owner) component-path (str \" > \"))\n res\n (str path name)]\n (when-not (empty? res) res))))\n"} {:sym extract-props, :meta {:doc nil, :arglists ([v])}, :source "(defn extract-props [v] (let [p (nth v 1 nil)] (if (map? p) p)))\n"} {:sym get-children, :meta {:doc nil, :arglists ([c])}, :source "(defn\n get-children\n [c]\n (let\n [p ($ c :props)]\n (if-some\n [v ($ p :argv)]\n (extract-children v)\n (->> ($ p :children) (react/Children.toArray) (into [])))))\n"} {:sym camelify-map-keys, :meta {:doc nil, :arglists ([fun-map])}, :source "(defn\n camelify-map-keys\n [fun-map]\n (reduce-kv\n (fn [m k v] (assoc m (-> k dash-to-camel keyword) v))\n {}\n fun-map))\n"} {:sym shallow-obj-to-map, :meta {:doc nil, :arglists ([o])}, :source "(defn\n shallow-obj-to-map\n [o]\n (let\n [ks (js-keys o) len (alength ks)]\n (loop\n [m {} i 0]\n (if\n (< i len)\n (let\n [k (aget ks i)]\n (recur (assoc m (keyword k) (aget o k)) (inc i)))\n m))))\n"} {:sym cljsify, :meta {:doc nil, :arglists ([body])}, :source "(defn\n cljsify\n [body]\n (-> body camelify-map-keys add-obligatory wrap-funs map-to-js))\n"} {:sym react-class?, :meta {:doc nil, :arglists ([c])}, :source "(defn\n react-class?\n [c]\n (and (fn? c) (some? (some-> c .-prototype ($ :render)))))\n"} {:sym cache-react-class, :meta {:doc nil, :arglists ([c constructor])}, :source "(defn\n cache-react-class\n [c constructor]\n ($! c :cljsReactClass constructor))\n"} {:sym custom-wrapper, :meta {:doc nil, :arglists ([key f])}, :source "(defn\n custom-wrapper\n [key f]\n (case\n key\n :getDefaultProps\n (throw (js/Error. \"getDefaultProps not supported\"))\n :getInitialState\n (fn\n getInitialState\n []\n (this-as c (reset! (state-atom c) (.call f c c))))\n :componentWillReceiveProps\n (fn\n componentWillReceiveProps\n [nextprops]\n (this-as c (.call f c c (props-argv c nextprops))))\n :shouldComponentUpdate\n (fn\n shouldComponentUpdate\n [nextprops nextstate]\n (or\n util/*always-update*\n (this-as\n c\n (let\n [old-argv\n ($ c :props.argv)\n new-argv\n ($ nextprops :argv)\n noargv\n (or (nil? old-argv) (nil? new-argv))]\n (cond\n (nil? f)\n (or noargv (not= old-argv new-argv))\n noargv\n (.call f c c (get-argv c) (props-argv c nextprops))\n :else\n (.call f c c old-argv new-argv))))))\n :componentWillUpdate\n (fn\n componentWillUpdate\n [nextprops]\n (this-as c (.call f c c (props-argv c nextprops))))\n :componentDidUpdate\n (fn\n componentDidUpdate\n [oldprops]\n (this-as c (.call f c c (props-argv c oldprops))))\n :componentWillMount\n (fn\n componentWillMount\n []\n (this-as\n c\n ($! c :cljsMountOrder (batch/next-mount-count))\n (when-not (nil? f) (.call f c c))))\n :componentDidMount\n (fn componentDidMount [] (this-as c (.call f c c)))\n :componentWillUnmount\n (fn\n componentWillUnmount\n []\n (this-as\n c\n (some-> ($ c :cljsRatom) ratom/dispose!)\n (batch/mark-rendered c)\n (when-not (nil? f) (.call f c c))))\n :componentDidCatch\n (fn\n componentDidCatch\n [error info]\n (this-as c (.call f c c error info)))\n nil))\n"} {:sym create-class, :meta {:doc nil, :arglists ([body])}, :source "(defn\n create-class\n [body]\n {:pre [(map? body)]}\n (->> body cljsify create-react-class))\n"} {:sym wrap-funs, :meta {:doc nil, :arglists ([fmap])}, :source "(defn\n wrap-funs\n [fmap]\n (when\n (dev?)\n (let\n [renders\n (select-keys fmap [:render :reagentRender :componentFunction])\n render-fun\n (-> renders vals first)]\n (assert (pos? (count renders)) \"Missing reagent-render\")\n (assert (== 1 (count renders)) \"Too many render functions supplied\")\n (assert-callable render-fun)))\n (let\n [render-fun\n (or (:reagentRender fmap) (:componentFunction fmap))\n legacy-render\n (nil? render-fun)\n render-fun\n (or render-fun (:render fmap))\n name\n (str (or (:displayName fmap) (util/fun-name render-fun)))\n name\n (case name \"\" (str (gensym \"reagent\")) name)\n fmap\n (reduce-kv (fn [m k v] (assoc m k (get-wrapper k v name))) {} fmap)]\n (assoc\n fmap\n :displayName\n name\n :autobind\n false\n :cljsLegacyRender\n legacy-render\n :reagentRender\n render-fun\n :render\n (:render static-fns))))\n"}), paren-soup.instarepl ({:sym elem?, :meta {}, :source "(def elem? (fn* [p1__18510#] (instance? js/Element p1__18510#)))\n"} {:sym elems->locations, :meta {:doc "Returns the location of each elem.", :arglists ([elems top-offset])}, :source "(defn\n elems->locations\n \"Returns the location of each elem.\"\n [elems top-offset]\n (loop\n [i 0 locations (transient [])]\n (if-let\n [elem (get elems i)]\n (let\n [top\n (-> elem .-offsetTop (- top-offset))\n height\n (-> elem .-offsetHeight)]\n (recur (inc i) (conj! locations {:top top, :height height})))\n (persistent! locations))))\n"} {:sym results->html, :meta {:doc "Returns HTML for the given eval results.", :arglists ([results locations])}, :source "(defn\n results->html\n \"Returns HTML for the given eval results.\"\n [results locations]\n (loop\n [i 0 evals (transient [])]\n (let\n [res (get results i) {:keys [top height]} (get locations i)]\n (if\n (and res top height)\n (recur\n (inc i)\n (conj!\n evals\n (format\n \"%s
\"\n (if (array? res) \"result error\" \"result\")\n top\n height\n height\n (some-> (if (array? res) (first res) res) hs/escape-html-str))))\n (join (persistent! evals))))))\n"} {:sym get-collections, :meta {:doc "Returns collections from the given DOM node.", :arglists ([element])}, :source "(defn\n get-collections\n \"Returns collections from the given DOM node.\"\n [element]\n (vec\n (for\n [elem\n (-> element .-children array-seq)\n :let\n [classes (.-classList elem)]\n :when\n (or (.contains classes \"collection\") (.contains classes \"symbol\"))]\n elem)))\n"} {:sym collection->content, :meta {:doc nil, :arglists ([elem])}, :source "(defn\n collection->content\n [elem]\n (loop\n [e elem content (.-textContent elem)]\n (if-let\n [prev (.-previousSibling e)]\n (if\n (text-node? prev)\n (recur prev (str (.-textContent prev) content))\n content)\n content)))\n"} {:sym create-compiler-fn, :meta {:doc nil, :arglists ([])}, :source "(defn\n create-compiler-fn\n []\n (try\n (let\n [eval-worker (js/Worker. \"paren-soup-compiler.js\")]\n (fn\n [coll receive-fn]\n (set!\n (.-onmessage eval-worker)\n (fn* [p1__18511#] (receive-fn (vec (.-data p1__18511#)))))\n (.postMessage eval-worker (into-array coll))))\n (catch js/Error _ (fn [_ _] (throw js/Error \"Can't compile!\")))))\n"}), dynadoc.state ({:sym *state, :meta {}, :source "(defonce *state (atom {}))\n"}), cljs.pprint ({:sym pprint, :meta {:doc nil, :arglists [[object] [object writer]]}, :source "(defn\n pprint\n ([object]\n (let\n [sb (StringBuffer.)]\n (binding\n [*out* (StringBufferWriter. sb)]\n (pprint object *out*)\n (string-print (str sb)))))\n ([object writer]\n (with-pretty-writer\n writer\n (binding [*print-pretty* true] (write-out object))\n (if (not (= 0 (get-column *out*))) (-write *out* \\newline)))))\n"} {:sym get-pretty-writer, :meta {:doc "Returns the IWriter passed in wrapped in a pretty writer proxy, unless it's\nalready a pretty writer. Generally, it is unnecessary to call this function, since pprint,\nwrite, and cl-format all call it if they need to. However if you want the state to be\npreserved across calls, you will want to wrap them with this.\n\nFor example, when you want to generate column-aware output with multiple calls to cl-format,\ndo it like in this example:\n\n (defn print-table [aseq column-width]\n (binding [*out* (get-pretty-writer *out*)]\n (doseq [row aseq]\n (doseq [col row]\n (cl-format true \"~4D~7,vT\" col column-width))\n (prn))))\n\nNow when you run:\n\n user> (print-table (map #(vector % (* % %) (* % % %)) (range 1 11)) 8)\n\nIt prints a table of squares and cubes for the numbers from 1 to 10:\n\n 1 1 1\n 2 4 8\n 3 9 27\n 4 16 64\n 5 25 125\n 6 36 216\n 7 49 343\n 8 64 512\n 9 81 729\n 10 100 1000", :arglists ([writer])}, :source "(defn\n get-pretty-writer\n \"Returns the IWriter passed in wrapped in a pretty writer proxy, unless it's\\nalready a pretty writer. Generally, it is unnecessary to call this function, since pprint,\\nwrite, and cl-format all call it if they need to. However if you want the state to be\\npreserved across calls, you will want to wrap them with this.\\n\\nFor example, when you want to generate column-aware output with multiple calls to cl-format,\\ndo it like in this example:\\n\\n (defn print-table [aseq column-width]\\n (binding [*out* (get-pretty-writer *out*)]\\n (doseq [row aseq]\\n (doseq [col row]\\n (cl-format true \\\"~4D~7,vT\\\" col column-width))\\n (prn))))\\n\\nNow when you run:\\n\\n user> (print-table (map #(vector % (* % %) (* % % %)) (range 1 11)) 8)\\n\\nIt prints a table of squares and cubes for the numbers from 1 to 10:\\n\\n 1 1 1\\n 2 4 8\\n 3 9 27\\n 4 16 64\\n 5 25 125\\n 6 36 216\\n 7 49 343\\n 8 64 512\\n 9 81 729\\n 10 100 1000\"\n [writer]\n (if\n (pretty-writer? writer)\n writer\n (pretty-writer writer *print-right-margin* *print-miser-width*)))\n"} {:sym *print-suppress-namespaces*, :meta {:doc "Don't print namespaces with symbols. This is particularly useful when\npretty printing the results of macro expansions"}, :source "(def *print-suppress-namespaces* nil)\n"} {:sym char-code, :meta {:doc "Convert char to int", :arglists ([c])}, :source "(defn\n char-code\n \"Convert char to int\"\n [c]\n (cond\n (number? c)\n c\n (and (string? c) (== (.-length c) 1))\n (.charCodeAt c 0)\n :else\n (throw (js/Error. \"Argument to char must be a character or number\"))))\n"} {:sym *print-pretty*, :meta {:doc "Bind to true if you want write to use pretty printing"}, :source "(def *print-pretty* true)\n"} {:sym *print-pprint-dispatch*, :meta {:doc "The pretty print dispatch function. Use with-pprint-dispatch or\nset-pprint-dispatch to modify."}, :source "(defonce *print-pprint-dispatch* nil)\n"} {:sym pprint-newline, :meta {:doc "Print a conditional newline to a pretty printing stream. kind specifies if the\n newline is :linear, :miser, :fill, or :mandatory.\n\n This function is intended for use when writing custom dispatch functions.\n\n Output is sent to *out* which must be a pretty printing writer.", :arglists ([kind])}, :source "(defn\n pprint-newline\n \"Print a conditional newline to a pretty printing stream. kind specifies if the\\n newline is :linear, :miser, :fill, or :mandatory.\\n\\n This function is intended for use when writing custom dispatch functions.\\n\\n Output is sent to *out* which must be a pretty printing writer.\"\n [kind]\n (check-enumerated-arg kind #{:mandatory :miser :fill :linear})\n (nl *out* kind))\n"} {:sym float?, :meta {:doc "Returns true if n is an float.", :arglists ([n])}, :source "(defn\n float?\n \"Returns true if n is an float.\"\n [n]\n (and\n (number? n)\n (not (js/isNaN n))\n (not (identical? n js/Infinity))\n (not (== (js/parseFloat n) (js/parseInt n 10)))))\n"} {:sym pprint-tab, :meta {:doc "Tab at this point in the pretty printing stream. kind specifies whether the tab\nis :line, :section, :line-relative, or :section-relative.\n\nColnum and colinc specify the target column and the increment to move the target\nforward if the output is already past the original target.\n\nThis function is intended for use when writing custom dispatch functions.\n\nOutput is sent to *out* which must be a pretty printing writer.\n\nTHIS FUNCTION IS NOT YET IMPLEMENTED.", :arglists ([kind colnum colinc])}, :source "(defn\n pprint-tab\n \"Tab at this point in the pretty printing stream. kind specifies whether the tab\\nis :line, :section, :line-relative, or :section-relative.\\n\\nColnum and colinc specify the target column and the increment to move the target\\nforward if the output is already past the original target.\\n\\nThis function is intended for use when writing custom dispatch functions.\\n\\nOutput is sent to *out* which must be a pretty printing writer.\\n\\nTHIS FUNCTION IS NOT YET IMPLEMENTED.\"\n {:added \"1.2\"}\n [kind colnum colinc]\n (check-enumerated-arg\n kind\n #{:section :line :line-relative :section-relative})\n (throw (js/Error. \"pprint-tab is not yet implemented\")))\n"} {:sym pprint-set, :meta {}, :source "(def pprint-set (formatter-out \"~<#{~;~@{~w~^ ~:_~}~;}~:>\"))\n"} {:sym print-table, :meta {:doc "Prints a collection of maps in a textual table. Prints table headings\n ks, and then a line of output for each row, corresponding to the keys\n in ks. If ks are not specified, use the keys of the first item in rows.", :arglists [[ks rows] [rows]]}, :source "(defn\n print-table\n \"Prints a collection of maps in a textual table. Prints table headings\\n ks, and then a line of output for each row, corresponding to the keys\\n in ks. If ks are not specified, use the keys of the first item in rows.\"\n {:added \"1.3\"}\n ([ks rows]\n (binding\n [*print-newline*]\n (when\n (seq rows)\n (let\n [widths\n (map\n (fn\n [k]\n (apply\n max\n (count (str k))\n (map\n (fn* [p1__18646#] (count (str (get p1__18646# k))))\n rows)))\n ks)\n spacers\n (map\n (fn* [p1__18647#] (apply str (repeat p1__18647# \"-\")))\n widths)\n fmt-row\n (fn\n [leader divider trailer row]\n (str\n leader\n (apply\n str\n (interpose\n divider\n (for\n [[col width]\n (map\n vector\n (map (fn* [p1__18648#] (get row p1__18648#)) ks)\n widths)]\n (add-padding width (str col)))))\n trailer))]\n (cljs.core/println)\n (cljs.core/println (fmt-row \"| \" \" | \" \" |\" (zipmap ks ks)))\n (cljs.core/println (fmt-row \"|-\" \"-+-\" \"-|\" (zipmap ks spacers)))\n (doseq\n [row rows]\n (cljs.core/println (fmt-row \"| \" \" | \" \" |\" row)))))))\n ([rows] (print-table (keys (first rows)) rows)))\n"} {:sym set-pprint-dispatch, :meta {:doc nil, :arglists ([function])}, :source "(defn\n set-pprint-dispatch\n [function]\n (set! *print-pprint-dispatch* function)\n nil)\n"} {:sym fresh-line, :meta {:doc "Make a newline if *out* is not already at the beginning of the line. If *out* is\nnot a pretty writer (which keeps track of columns), this function always outputs a newline.", :arglists ([])}, :source "(defn\n fresh-line\n \"Make a newline if *out* is not already at the beginning of the line. If *out* is\\nnot a pretty writer (which keeps track of columns), this function always outputs a newline.\"\n []\n (if\n (satisfies? IDeref *out*)\n (if (not (= 0 (get-column (:base @@*out*)))) (prn))\n (prn)))\n"} {:sym pprint-indent, :meta {:doc "Create an indent at this point in the pretty printing stream. This defines how\nfollowing lines are indented. relative-to can be either :block or :current depending\nwhether the indent should be computed relative to the start of the logical block or\nthe current column position. n is an offset.\n\nThis function is intended for use when writing custom dispatch functions.\n\nOutput is sent to *out* which must be a pretty printing writer.", :arglists ([relative-to n])}, :source "(defn\n pprint-indent\n \"Create an indent at this point in the pretty printing stream. This defines how\\nfollowing lines are indented. relative-to can be either :block or :current depending\\nwhether the indent should be computed relative to the start of the logical block or\\nthe current column position. n is an offset.\\n\\nThis function is intended for use when writing custom dispatch functions.\\n\\nOutput is sent to *out* which must be a pretty printing writer.\"\n [relative-to n]\n (check-enumerated-arg relative-to #{:block :current})\n (indent *out* relative-to n))\n"} {:sym *print-radix*, :meta {:doc "Print a radix specifier in front of integers and rationals. If *print-base* is 2, 8,\nor 16, then the radix specifier used is #b, #o, or #x, respectively. Otherwise the\nradix specifier is in the form #XXr where XX is the decimal value of *print-base* "}, :source "(def *print-radix* nil)\n"} {:sym IPrettyFlush, :meta {:doc nil}, :methods (-ppflush)} {:sym cl-format, :meta {:doc "An implementation of a Common Lisp compatible format function. cl-format formats its\narguments to an output stream or string based on the format control string given. It\nsupports sophisticated formatting of structured data.\n\nWriter satisfies IWriter, true to output via *print-fn* or nil to output\nto a string, format-in is the format control string and the remaining arguments\nare the data to be formatted.\n\nThe format control string is a string to be output with embedded 'format directives'\ndescribing how to format the various arguments passed in.\n\nIf writer is nil, cl-format returns the formatted result string. Otherwise, cl-format\nreturns nil.\n\nFor example:\n (let [results [46 38 22]]\n (cl-format true \"There ~[are~;is~:;are~]~:* ~d result~:p: ~{~d~^, ~}~%\"\n (count results) results))\n\nPrints via *print-fn*:\n There are 3 results: 46, 38, 22\n\nDetailed documentation on format control strings is available in the \"Common Lisp the\nLanguage, 2nd edition\", Chapter 22 (available online at:\nhttp://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node200.html#SECTION002633000000000000000)\nand in the Common Lisp HyperSpec at\nhttp://www.lispworks.com/documentation/HyperSpec/Body/22_c.htm", :arglists ([writer format-in & args])}, :source "(defn\n cl-format\n \"An implementation of a Common Lisp compatible format function. cl-format formats its\\narguments to an output stream or string based on the format control string given. It\\nsupports sophisticated formatting of structured data.\\n\\nWriter satisfies IWriter, true to output via *print-fn* or nil to output\\nto a string, format-in is the format control string and the remaining arguments\\nare the data to be formatted.\\n\\nThe format control string is a string to be output with embedded 'format directives'\\ndescribing how to format the various arguments passed in.\\n\\nIf writer is nil, cl-format returns the formatted result string. Otherwise, cl-format\\nreturns nil.\\n\\nFor example:\\n (let [results [46 38 22]]\\n (cl-format true \\\"There ~[are~;is~:;are~]~:* ~d result~:p: ~{~d~^, ~}~%\\\"\\n (count results) results))\\n\\nPrints via *print-fn*:\\n There are 3 results: 46, 38, 22\\n\\nDetailed documentation on format control strings is available in the \\\"Common Lisp the\\nLanguage, 2nd edition\\\", Chapter 22 (available online at:\\nhttp://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node200.html#SECTION002633000000000000000)\\nand in the Common Lisp HyperSpec at\\nhttp://www.lispworks.com/documentation/HyperSpec/Body/22_c.htm\"\n {:see-also\n [[\"http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node200.html#SECTION002633000000000000000\"\n \"Common Lisp the Language\"]\n [\"http://www.lispworks.com/documentation/HyperSpec/Body/22_c.htm\"\n \"Common Lisp HyperSpec\"]]}\n [writer format-in & args]\n (let\n [compiled-format\n (if (string? format-in) (compile-format format-in) format-in)\n navigator\n (init-navigator args)]\n (execute-format writer compiled-format navigator)))\n"} {:sym *print-miser-width*, :meta {:doc "The column at which to enter miser style. Depending on the dispatch table,\nmiser style add newlines in more places to try to keep lines short allowing for further\nlevels of nesting."}, :source "(def *print-miser-width* 40)\n"} {:sym write, :meta {:doc "Write an object subject to the current bindings of the printer control variables.\nUse the kw-args argument to override individual variables for this call (and any\nrecursive calls). Returns the string result if :stream is nil or nil otherwise.\n\nThe following keyword arguments can be passed with values:\n Keyword Meaning Default value\n :stream Writer for output or nil true (indicates *out*)\n :base Base to use for writing rationals Current value of *print-base*\n :circle* If true, mark circular structures Current value of *print-circle*\n :length Maximum elements to show in sublists Current value of *print-length*\n :level Maximum depth Current value of *print-level*\n :lines* Maximum lines of output Current value of *print-lines*\n :miser-width Width to enter miser mode Current value of *print-miser-width*\n :dispatch The pretty print dispatch function Current value of *print-pprint-dispatch*\n :pretty If true, do pretty printing Current value of *print-pretty*\n :radix If true, prepend a radix specifier Current value of *print-radix*\n :readably* If true, print readably Current value of *print-readably*\n :right-margin The column for the right margin Current value of *print-right-margin*\n :suppress-namespaces If true, no namespaces in symbols Current value of *print-suppress-namespaces*\n\n * = not yet supported\n", :arglists ([object & kw-args])}, :source "(defn\n write\n \"Write an object subject to the current bindings of the printer control variables.\\nUse the kw-args argument to override individual variables for this call (and any\\nrecursive calls). Returns the string result if :stream is nil or nil otherwise.\\n\\nThe following keyword arguments can be passed with values:\\n Keyword Meaning Default value\\n :stream Writer for output or nil true (indicates *out*)\\n :base Base to use for writing rationals Current value of *print-base*\\n :circle* If true, mark circular structures Current value of *print-circle*\\n :length Maximum elements to show in sublists Current value of *print-length*\\n :level Maximum depth Current value of *print-level*\\n :lines* Maximum lines of output Current value of *print-lines*\\n :miser-width Width to enter miser mode Current value of *print-miser-width*\\n :dispatch The pretty print dispatch function Current value of *print-pprint-dispatch*\\n :pretty If true, do pretty printing Current value of *print-pretty*\\n :radix If true, prepend a radix specifier Current value of *print-radix*\\n :readably* If true, print readably Current value of *print-readably*\\n :right-margin The column for the right margin Current value of *print-right-margin*\\n :suppress-namespaces If true, no namespaces in symbols Current value of *print-suppress-namespaces*\\n\\n * = not yet supported\\n\"\n [object & kw-args]\n (let\n [options (merge {:stream true} (apply hash-map kw-args))]\n (binding\n [cljs.pprint/*print-base*\n (:base options cljs.pprint/*print-base*)\n cljs.pprint/*print-circle*\n (:circle options cljs.pprint/*print-circle*)\n cljs.core/*print-length*\n (:length options cljs.core/*print-length*)\n cljs.core/*print-level*\n (:level options cljs.core/*print-level*)\n cljs.pprint/*print-lines*\n (:lines options cljs.pprint/*print-lines*)\n cljs.pprint/*print-miser-width*\n (:miser-width options cljs.pprint/*print-miser-width*)\n cljs.pprint/*print-pprint-dispatch*\n (:dispatch options cljs.pprint/*print-pprint-dispatch*)\n cljs.pprint/*print-pretty*\n (:pretty options cljs.pprint/*print-pretty*)\n cljs.pprint/*print-radix*\n (:radix options cljs.pprint/*print-radix*)\n cljs.core/*print-readably*\n (:readably options cljs.core/*print-readably*)\n cljs.pprint/*print-right-margin*\n (:right-margin options cljs.pprint/*print-right-margin*)\n cljs.pprint/*print-suppress-namespaces*\n (:suppress-namespaces\n options\n cljs.pprint/*print-suppress-namespaces*)]\n (binding\n []\n (let\n [sb\n (StringBuffer.)\n optval\n (if (contains? options :stream) (:stream options) true)\n base-writer\n (if\n (or (true? optval) (nil? optval))\n (StringBufferWriter. sb)\n optval)]\n (if\n *print-pretty*\n (with-pretty-writer base-writer (write-out object))\n (binding [*out* base-writer] (pr object)))\n (if (true? optval) (string-print (str sb)))\n (if (nil? optval) (str sb)))))))\n"} {:sym -ppflush, :meta {:doc nil, :arglists ([pp])}, :protocol IPrettyFlush} {:sym *print-right-margin*, :meta {:doc "Pretty printing will try to avoid anything going beyond this column.\nSet it to nil to have pprint let the line be arbitrarily long. This will ignore all\nnon-mandatory newlines."}, :source "(def *print-right-margin* 72)\n"} {:sym write-out, :meta {:doc "Write an object to *out* subject to the current bindings of the printer control\nvariables. Use the kw-args argument to override individual variables for this call (and\nany recursive calls).\n\n*out* must be a PrettyWriter if pretty printing is enabled. This is the responsibility\nof the caller.\n\nThis method is primarily intended for use by pretty print dispatch functions that\nalready know that the pretty printer will have set up their environment appropriately.\nNormal library clients should use the standard \"write\" interface. ", :arglists ([object])}, :source "(defn\n write-out\n \"Write an object to *out* subject to the current bindings of the printer control\\nvariables. Use the kw-args argument to override individual variables for this call (and\\nany recursive calls).\\n\\n*out* must be a PrettyWriter if pretty printing is enabled. This is the responsibility\\nof the caller.\\n\\nThis method is primarily intended for use by pretty print dispatch functions that\\nalready know that the pretty printer will have set up their environment appropriately.\\nNormal library clients should use the standard \\\"write\\\" interface. \"\n [object]\n (let\n [length-reached\n (and\n *current-length*\n *print-length*\n (>= *current-length* *print-length*))]\n (if-not\n *print-pretty*\n (pr object)\n (if\n length-reached\n (-write *out* \"...\")\n (do\n (if\n *current-length*\n (set! *current-length* (inc *current-length*)))\n (*print-pprint-dispatch* object))))\n length-reached))\n"} {:sym *print-base*, :meta {:doc "The base to use for printing integers and rationals."}, :source "(def *print-base* 10)\n"}), oakcljs.tools.reader.impl.inspect ({:sym inspect, :meta {:doc "Return a string description of the value supplied.\n May be the a string version of the value itself (e.g. \"true\")\n or it may be a description (e.g. \"an instance of Foo\").\n If truncate is true then return a very terse version of\n the inspection.", :arglists [[x] [truncate x]]}, :source "(defn\n inspect\n \"Return a string description of the value supplied.\\n May be the a string version of the value itself (e.g. \\\"true\\\")\\n or it may be a description (e.g. \\\"an instance of Foo\\\").\\n If truncate is true then return a very terse version of\\n the inspection.\"\n ([x] (inspect* false x))\n ([truncate x] (inspect* truncate x)))\n"}), cljs.tools.reader.impl.utils ({:sym reader-conditional, :meta {:doc "Construct a data representation of a reader conditional.\n If true, splicing? indicates read-cond-splicing.", :arglists ([form splicing?])}, :source "(defn\n reader-conditional\n \"Construct a data representation of a reader conditional.\\n If true, splicing? indicates read-cond-splicing.\"\n [form splicing?]\n (ReaderConditional. splicing? form))\n"} {:sym whitespace?, :meta {:doc "Checks whether a given character is whitespace", :arglists ([ch])}, :source "(defn\n whitespace?\n \"Checks whether a given character is whitespace\"\n [ch]\n (when-not (nil? ch) (if (identical? ch \\,) true (.test ws-rx ch))))\n"} {:sym last-id, :meta {}, :source "(def last-id (atom 0))\n"} {:sym char, :meta {:doc nil, :arglists ([x])}, :source "(defn char [x] (when-not (nil? x) (cljs.core/char x)))\n"} {:sym numeric?, :meta {:doc "Checks whether a given character is numeric", :arglists ([ch])}, :source "(defn\n numeric?\n \"Checks whether a given character is numeric\"\n [ch]\n (when-not (nil? ch) (gstring/isNumeric ch)))\n"} {:sym second', :meta {:doc nil, :arglists ([[a b]])}, :source "(defn second' [[a b]] (when-not a b))\n"} {:sym desugar-meta, :meta {:doc "Resolves syntactical sugar in metadata", :arglists ([f])}, :source "(defn\n desugar-meta\n \"Resolves syntactical sugar in metadata\"\n [f]\n (cond\n (keyword? f)\n {f true}\n (symbol? f)\n {:tag f}\n (string? f)\n {:tag f}\n :else\n f))\n"} {:sym next-id, :meta {:doc nil, :arglists ([])}, :source "(defn next-id [] (swap! last-id inc))\n"} {:sym ex-info?, :meta {:doc nil, :arglists ([ex])}, :source "(defn ex-info? [ex] (instance? cljs.core.ExceptionInfo ex))\n"} {:sym reader-conditional?, :meta {:doc "Return true if the value is the data representation of a reader conditional", :arglists ([value])}, :source "(defn\n reader-conditional?\n \"Return true if the value is the data representation of a reader conditional\"\n [value]\n (instance? ReaderConditional value))\n"} {:sym newline?, :meta {:doc "Checks whether the character is a newline", :arglists ([c])}, :source "(defn\n newline?\n \"Checks whether the character is a newline\"\n [c]\n (or (identical? \\newline c) (identical? \"\\n\" c) (nil? c)))\n"} {:sym namespace-keys, :meta {:doc nil, :arglists ([ns keys])}, :source "(defn\n namespace-keys\n [ns keys]\n (for\n [key keys]\n (if\n (or (symbol? key) (keyword? key))\n (let\n [[key-ns key-name]\n ((juxt namespace name) key)\n ->key\n (if (symbol? key) symbol keyword)]\n (cond\n (nil? key-ns)\n (->key ns key-name)\n (= \"_\" key-ns)\n (->key key-name)\n :else\n key))\n key)))\n"} {:sym ws-rx, :meta {}, :source "(def ws-rx #\"[\\s]\")\n"}), figwheel.client ({:sym focus-msgs, :meta {:doc nil, :arglists ([name-set msg-hist])}, :source "(defn\n focus-msgs\n [name-set msg-hist]\n (cons\n (first msg-hist)\n (filter (comp name-set :msg-name) (rest msg-hist))))\n"} {:sym handle-deprecated-jsload-callback, :meta {:doc nil, :arglists ([config])}, :source "(defn\n handle-deprecated-jsload-callback\n [config]\n (if\n (:jsload-callback config)\n (->\n config\n (assoc :on-jsload (:jsload-callback config))\n (dissoc :jsload-callback))\n config))\n"} {:sym default-on-compile-fail, :meta {:doc nil, :arglists ([{:keys [formatted-exception exception-data cause], :as ed}])}, :source "(defn\n default-on-compile-fail\n [{:keys [formatted-exception exception-data cause], :as ed}]\n (utils/log :debug \"Figwheel: Compile Exception\")\n (doseq [msg (format-messages exception-data)] (utils/log :info msg))\n (if cause (utils/log :info (str \"Error on \" (file-line-column ed))))\n ed)\n"} {:sym reload-file?*, :meta {:doc nil, :arglists ([msg-name opts])}, :source "(defn\n reload-file?*\n [msg-name opts]\n (or (:load-warninged-code opts) (not= msg-name :compile-warning)))\n"} {:sym add-json-message-watch, :meta {:doc nil, :arglists ([key callback])}, :source "(defn\n add-json-message-watch\n [key callback]\n (add-message-watch key (comp callback clj->js)))\n"} {:sym enforce-figwheel-version-plugin, :meta {:doc nil, :arglists ([opts])}, :source "(defn\n enforce-figwheel-version-plugin\n [opts]\n (fn\n [msg-hist]\n (when-let\n [figwheel-version (-> msg-hist first :figwheel-version)]\n (when\n (not= figwheel-version _figwheel-version_)\n (socket/close!)\n (.error\n js/console\n \"Figwheel: message received from different version of Figwheel.\")\n (when\n (:heads-up-display opts)\n (go\n (\"\n _figwheel-version_\n \" is not equal to \"\n \"Figwheel Sidecar Version \"\n figwheel-version\n \"\"\n \". Shutting down Websocket Connection!\"\n \"To fix try:
\"\n \"- Reload this page and make sure you are not getting a cached version of the client. \"\n \"
- You may have to clean (delete compiled assets) and rebuild to make sure that the new client code is being used. \"\n \"
- Also, make sure you have consistent Figwheel dependencies.
\"\n s\n \" \"\n sub-head\n \"
\")))\n"} {:sym clear, :meta {:doc nil, :arglists ([])}, :source "(defn\n clear\n []\n (go\n (let\n [c (ensure-container)]\n (set-style! c {:opacity \"0.0\"})\n (\"\n \"\"\n line-number\n \" \"\n (escape line)\n \"\"))\n"} {:sym pad-line-number, :meta {:doc nil, :arglists ([n line-number])}, :source "(defn\n pad-line-number\n [n line-number]\n (let\n [len (count ((fnil str \"\") line-number))]\n (->\n (if (< len n) (apply str (repeat (- n len) \" \")) \"\")\n (str line-number))))\n"} {:sym get-dataset, :meta {:doc nil, :arglists ([el])}, :source "(defn\n get-dataset\n [el]\n (first\n (keep\n (fn [x] (when (.. x -dataset -figwheelEvent) (.. x -dataset)))\n (take 4 (ancestor-nodes el)))))\n"} {:sym flatten-exception, :meta {}, :source "(def\n flatten-exception\n (fn* [p1__18499#] (take-while some? (iterate :cause p1__18499#))))\n"} {:sym display-heads-up, :meta {:doc nil, :arglists ([style msg])}, :source "(defn\n display-heads-up\n [style msg]\n (go\n (let\n [c (ensure-container)]\n (set-style!\n c\n (merge\n {:paddingTop \"10px\",\n :paddingBottom \"10px\",\n :width \"100%\",\n :minHeight \"68px\",\n :opacity \"1.0\"}\n style))\n (set-content! c msg)\n (\" msg \"