{:group-id "com.taoensso", :artifact-id "encore", :version "3.142.0", :analysis {"clj" ({:author "Peter Taoussanis (@ptaoussanis)", :name taoensso.encore, :publics ({:name <*, :file "taoensso/encore.cljc", :line 2141, :arglists ([x y z]), :type :macro} {:name <=*, :file "taoensso/encore.cljc", :line 2139, :arglists ([x y z]), :type :macro} {:name >*, :file "taoensso/encore.cljc", :line 2142, :arglists ([x y z]), :type :macro} {:name >=*, :file "taoensso/encore.cljc", :line 2140, :arglists ([x y z]), :type :macro} {:name a-utf8-str, :file "taoensso/encore.cljc", :line 2692, :doc "Example UTF-8 string for tests, etc.\n", :type :var} {:name abbreviate-ns, :file "taoensso/encore.cljc", :line 3113, :arglists ([x] [n-full x]), :doc "Give any nameable type (string, keyword, symbol), returns the same\ntype with at most `n-full` (default 1) unabbreviated namespace parts.\n\nExample:\n  (abbreviate-ns 0  :foo.bar/baz)   => :f.b/baz\n  (abbreviate-ns 1  'foo.bar/baz)   => 'f.bar/baz\n  (abbreviate-ns 2 \"foo.bar/baz\") => \"foo.bar/baz\"", :type :var} {:name abs, :file "taoensso/encore.cljc", :line 2175, :arglists ([n]), :type :var} {:name after-timeout, :file "taoensso/encore.cljc", :line 6253, :arglists ([msecs & body]), :doc "Alpha, subject to change.\nReturns a TimeoutFuture that will execute body after timeout.\nBody must be non-blocking or cheap.", :type :macro} {:name approx==, :file "taoensso/encore.cljc", :line 2123, :arglists ([x y] [signf x y]), :type :var} {:name as-?bool, :file "taoensso/encore.cljc", :line 953, :arglists ([x]), :type :var} {:name as-?dt, :file "taoensso/encore.cljc", :line 2487, :arglists ([x]), :doc "Returns given ?arg as `java.util.Date`, or nil.\n", :type :var} {:name as-?email, :file "taoensso/encore.cljc", :line 961, :arglists ([?s] [max-len ?s]), :type :var} {:name as-?float, :file "taoensso/encore.cljc", :line 938, :arglists ([x]), :type :var} {:name as-?inst, :file "taoensso/encore.cljc", :line 2467, :arglists ([x]), :doc "Returns given ?arg as platform instant (`java.time.Instant` or `js/Date`), or nil.\n", :type :var} {:name as-?int, :file "taoensso/encore.cljc", :line 927, :arglists ([x]), :type :var} {:name as-?kw, :file "taoensso/encore.cljc", :line 915, :arglists ([x]), :type :var} {:name as-?name, :file "taoensso/encore.cljc", :line 916, :arglists ([x]), :type :var} {:name as-?nat-float, :file "taoensso/encore.cljc", :line 947, :arglists ([x]), :type :var} {:name as-?nat-int, :file "taoensso/encore.cljc", :line 945, :arglists ([x]), :type :var} {:name as-?nblank, :file "taoensso/encore.cljc", :line 914, :arglists ([x]), :type :var} {:name as-?nblank-trim, :file "taoensso/encore.cljc", :line 923, :arglists ([x]), :type :var} {:name as-?nemail, :file "taoensso/encore.cljc", :line 969, :arglists ([?s] [max-len ?s]), :type :var} {:name as-?nempty-str, :file "taoensso/encore.cljc", :line 922, :arglists ([x]), :type :var} {:name as-?nzero, :file "taoensso/encore.cljc", :line 913, :arglists ([x]), :type :var} {:name as-?pnum, :file "taoensso/encore.cljc", :line 950, :arglists ([x]), :type :var} {:name as-?pos-float, :file "taoensso/encore.cljc", :line 948, :arglists ([x]), :type :var} {:name as-?pos-int, :file "taoensso/encore.cljc", :line 946, :arglists ([x]), :type :var} {:name as-?qname, :file "taoensso/encore.cljc", :line 917, :arglists ([x]), :type :var} {:name as-?rnum, :file "taoensso/encore.cljc", :line 951, :arglists ([x]), :type :var} {:name as-?udt, :file "taoensso/encore.cljc", :line 2499, :arglists ([x]), :doc "Returns given ?arg as (pos/neg) milliseconds since Unix epoch, or nil.\n", :type :var} {:name as-bool, :file "taoensso/encore.cljc", :line 1028, :arglists ([x]), :type :var} {:name as-dt, :file "taoensso/encore.cljc", :line 2525, :arglists ([x]), :type :var} {:name as-email, :file "taoensso/encore.cljc", :line 994, :arglists ([x] [n x]), :type :var} {:name as-float, :file "taoensso/encore.cljc", :line 1011, :arglists ([x]), :type :var} {:name as-inst, :file "taoensso/encore.cljc", :line 2524, :arglists ([x]), :type :var} {:name as-int, :file "taoensso/encore.cljc", :line 1004, :arglists ([x]), :type :var} {:name as-kw, :file "taoensso/encore.cljc", :line 992, :arglists ([x]), :type :var} {:name as-name, :file "taoensso/encore.cljc", :line 989, :arglists ([x]), :type :var} {:name as-nat-float, :file "taoensso/encore.cljc", :line 1013, :arglists ([x]), :type :var} {:name as-nat-int, :file "taoensso/encore.cljc", :line 1006, :arglists ([x]), :type :var} {:name as-nblank, :file "taoensso/encore.cljc", :line 986, :arglists ([x]), :type :var} {:name as-nblank-trim, :file "taoensso/encore.cljc", :line 987, :arglists ([x]), :type :var} {:name as-nemail, :file "taoensso/encore.cljc", :line 999, :arglists ([x] [n x]), :type :var} {:name as-nempty-str, :file "taoensso/encore.cljc", :line 988, :arglists ([x]), :type :var} {:name as-nzero, :file "taoensso/encore.cljc", :line 991, :arglists ([x]), :type :var} {:name as-pnum, :file "taoensso/encore.cljc", :line 1018, :arglists ([x]), :type :var} {:name as-pnum!, :file "taoensso/encore.cljc", :line 1023, :arglists ([x]), :type :var} {:name as-pnum-complement, :file "taoensso/encore.cljc", :line 2135, :arglists ([x]), :type :var} {:name as-pos-float, :file "taoensso/encore.cljc", :line 1015, :arglists ([x]), :type :var} {:name as-pos-int, :file "taoensso/encore.cljc", :line 1008, :arglists ([x]), :type :var} {:name as-qname, :file "taoensso/encore.cljc", :line 990, :arglists ([x]), :type :var} {:name as-rnum, :file "taoensso/encore.cljc", :line 1020, :arglists ([x]), :type :var} {:name as-rnum!, :file "taoensso/encore.cljc", :line 1025, :arglists ([x]), :type :var} {:name as-udt, :file "taoensso/encore.cljc", :line 2526, :arglists ([x]), :type :var} {:name assert-min-encore-version, :file "taoensso/encore.cljc", :line 2288, :arglists ([min-version]), :doc "Version check for dependency conflicts, etc.\n", :type :macro} {:name assoc-nx, :file "taoensso/encore.cljc", :line 1501, :arglists ([m k v] [m m-kvs] [m k v & kvs]), :doc "Assocs each kv to given ?map iff its key doesn't already exist.\n", :type :var} {:name assoc-some, :file "taoensso/encore.cljc", :line 1489, :arglists ([m k v] [m m-kvs] [m k v & kvs]), :doc "Assocs each kv to given ?map iff its value is not nil.\n", :type :var} {:name assoc-when, :file "taoensso/encore.cljc", :line 1495, :arglists ([m k v] [m m-kvs] [m k v & kvs]), :doc "Assocs each kv to given ?map iff its val is truthy.\n", :type :var} {:name atom?, :file "taoensso/encore.cljc", :line 756, :arglists ([x]), :type :var} {:name ba->hex-str, :file "taoensso/encore.cljc", :line 3719, :arglists ([ba]), :doc "Returns byte[] for given hex string.\n", :type :var} {:name ba-concat, :file "taoensso/encore.cljc", :line 2077, :arglists ([ba1 ba2]), :type :var} {:name ba-hash, :file "taoensso/encore.cljc", :line 2063, :arglists ([x]), :doc "Returns hash int of given byte[].\n", :type :var} {:name ba-split, :file "taoensso/encore.cljc", :line 2085, :arglists ([ba idx]), :type :var} {:name ba=, :file "taoensso/encore.cljc", :line 2059, :arglists ([x y]), :doc "Returns true iff given two byte[]s with the same content.\n", :type :var} {:name bench, :file "taoensso/encore.cljc", :line 6148, :arglists ([nlaps opts & body]), :type :macro} {:name bench*, :file "taoensso/encore.cljc", :line 6128, :arglists ([nlaps {:keys [nlaps-warmup nthreads as-ns?], :or {nlaps-warmup 0, nthreads 1}} f]), :doc "Repeatedly executes fn and returns time taken to complete execution.\n", :type :var} {:name binding, :file "taoensso/encore.cljc", :line 7345, :arglists ([bindings & body]), :deprecated true, :type :macro} {:name binding*, :file "taoensso/encore.cljc", :line 383, :arglists ([bindings & body]), :doc "For Clj: faster version of `core/binding`.\nFor Cljs: identical to `core/binding`.\nCan interfere with deep-walking macros.", :type :macro} {:name boolean?, :file "taoensso/encore.cljc", :line 746, :arglists ([x]), :type :var} {:name bytes-class, :file "taoensso/encore.cljc", :line 2053, :type :var} {:name bytes?, :file "taoensso/encore.cljc", :line 2054, :arglists ([x]), :doc "Returns true iff given byte[] argument.\n", :type :var} {:name cache, :file "taoensso/encore.cljc", :line 4205, :arglists ([f] [{:keys [size ttl-ms gc-every], :as opts} f]), :doc "Returns a cached version of given referentially transparent function `f`.\n\nLike `core/memoize` but:\n  - Often faster, depending on options.\n  - Prevents race conditions on writes.\n  - Supports cache invalidation by prepending args with:\n    - `:cache/del`   ; Delete cached item for subsequent args, returns nil.\n    - `:cache/fresh` ; Renew  cached item for subsequent args, returns new val.\n\n  - Supports options:\n    - `ttl-ms` ; Expire cached items after <this> many msecs.\n    - `size`   ; Restrict cache size to <this> many items at the next garbage\n               ; collection (GC).\n\n    - `gc-every` ; Run garbage collection (GC) approximately once every\n                 ; <this> many calls to cached fn. If unspecified, GC rate\n                 ; will be determined automatically based on `size`.\n\nSee also `defn-cached`, `fmemoize`, `memoize-last`.", :type :var} {:name call-after-timeout, :file "taoensso/encore.cljc", :line 6223, :arglists ([msecs f] [impl_ msecs f]), :doc "Alpha, subject to change.\nReturns a TimeoutFuture that will execute `f` after given msecs.\n\nDoes NOT do any automatic binding conveyance.\n\nPerformance depends on the provided timer implementation (`impl_`).\nThe default implementation offers O(logn) add, O(1) cancel, O(1) tick.\n\nSee `ITimeoutImpl` for extending to arbitrary timer implementations.", :type :var} {:name call-on-shutdown!, :file "taoensso/encore.cljc", :line 5428, :arglists ([f]), :doc "Registers given nullary fn as a JVM shutdown hook.\n(f) will be called sometime during shutdown. While running, it will\nattempt to block shutdown.", :type :var} {:name can-meta?, :file "taoensso/encore.cljc", :line 764, :arglists ([x]), :type :var} {:name case-eval, :file "taoensso/encore.cljc", :line 443, :arglists ([expr & clauses]), :doc "Like `case` but test expressions are evaluated for their compile-time value.\n", :type :macro} {:name case-insensitive-str=, :file "taoensso/encore.cljc", :line 2860, :arglists ([s1 s2]), :doc "Returns true iff given strings are equal, ignoring case.\n", :type :var} {:name catching, :file "taoensso/encore.cljc", :line 6823, :arglists ([expr] [error-type expr] [try-expr error-sym catch-expr] [try-expr error-sym catch-expr finally-expr] [try-expr error-type error-sym catch-expr finally-expr]), :doc "Terse, cross-platform (try* expr (catch :all _)).\nArities besides #{1 2} are deprecated, prefer `try*` in these cases.", :type :macro} {:name chan?, :file "taoensso/encore.cljc", :line 788, :arglists ([x]), :doc "Returns true iff given a `clojure.core.async` channel.\n", :type :var} {:name chance, :file "taoensso/encore.cljc", :line 2235, :arglists ([prob]), :doc "Returns true with given probability ∈ ℝ[0,1].\n", :type :var} {:name clamp, :file "taoensso/encore.cljc", :line 2130, :arglists ([nmin nmax n]), :type :var} {:name clamp*, :file "taoensso/encore.cljc", :line 2145, :arglists ([nmin nmax n]), :type :macro} {:name clamp-float, :file "taoensso/encore.cljc", :line 2132, :arglists ([nmin nmax n]), :type :var} {:name clamp-int, :file "taoensso/encore.cljc", :line 2131, :arglists ([nmin nmax n]), :type :var} {:name class-sym, :file "taoensso/encore.cljc", :line 2251, :arglists ([x]), :doc "Returns class name symbol of given argument.\n", :type :var} {:name compile-if, :file "taoensso/encore.cljc", :line 349, :arglists ([test then] [test then else]), :doc "Evaluates `test`. If it returns logical true (and doesn't throw), expands\nto `then`, otherwise expands to `else`.", :type :macro} {:name compile-when, :file "taoensso/encore.cljc", :line 356, :arglists ([test & body]), :type :macro} {:name cond, :file "taoensso/encore.cljc", :line 327, :arglists ([& clauses]), :doc "Supersets `core/cond` functionality. Like `core/cond` but supports implicit\nfinal `else` clause, and special clause keywords for advanced behaviour:\n\n(cond\n  :let     [x   \"x\"] ; Establish let     binding/s for remaining forms\n  :binding [*x* \"x\"] ; Establish dynamic binding/s for remaining forms\n  :do      (println (str \"x value: \" x)) ; Eval expr for side-effects\n  :if-let  [y \"y\", z nil] \"y and z were both truthy\"\n  :if-some [y \"y\", z nil] \"y and z were both non-nil\"\n  :else    \"fallback value\")\n\n`:let` support inspired by <https://github.com/Engelberg/better-cond>.\nSimple, flexible way to eliminate deeply-nested control flow code.", :type :macro} {:name cond!, :file "taoensso/encore.cljc", :line 344, :arglists ([& clauses]), :doc "Like `cond` but throws on non-match like `case` and `condp`.\n", :type :macro} {:name conj-some, :file "taoensso/encore.cljc", :line 1475, :arglists ([] [coll] [coll x] [coll x & more]), :doc "Conjoins each non-nil value.\n", :type :var} {:name conj-when, :file "taoensso/encore.cljc", :line 1481, :arglists ([] [coll] [coll x] [coll x & more]), :doc "Conjoins each truthy value.\n", :type :var} {:name const-ba=, :file "taoensso/encore.cljc", :line 2098, :arglists ([ba1 ba2]), :doc "Constant-time `ba=`.\nUseful to prevent timing attacks, etc.", :type :var} {:name const-str=, :file "taoensso/encore.cljc", :line 3040, :arglists ([s1 s2]), :doc "Constant-time string equality checker.\nUseful to prevent timing attacks, etc.", :type :var} {:name contains-in?, :file "taoensso/encore.cljc", :line 1735, :arglists ([coll ks k] [coll ks]), :type :var} {:name convey-reduced, :file "taoensso/encore.cljc", :line 1033, :arglists ([x]), :type :var} {:name count-words, :file "taoensso/encore.cljc", :line 3019, :arglists ([s]), :type :var} {:name counter, :file "taoensso/encore.cljc", :line 4750, :arglists ([] [init]), :doc "Returns a fast atomic `Counter` with `init` initial integer value with:\n- @counter           => Return current val\n- (counter)          => Add 1 and return old val\n- (counter n)        => Add n and return old val\n- (counter action n) => Experimental, action ∈\n    {:add :set :set-get :get-set :get-add :add-get}.", :type :var} {:name declare-remote, :file "taoensso/encore.cljc", :line 477, :arglists ([& syms]), :doc "Declares given ns-qualified symbols, preserving metadata.\nClj only. Useful for circular dependencies.", :type :macro} {:name def*, :file "taoensso/encore.cljc", :line 423, :arglists ([sym & args]), :doc "Like `core/def` but supports attrs map.\n", :type :macro} {:name defalias, :file "taoensso/encore.cljc", :line 585, :arglists ([src] [alias src] [alias src alias-attrs] [alias src alias-attrs alias-body]), :doc "Defines a local alias for the var identified by given qualified\nsource symbol: (defalias my-map clojure.core/map), etc.\n\nSource var's metadata will be preserved (docstring, arglists, etc.).\nChanges to Clj source var's value will also be applied to alias.\nSee also `defaliases`.", :type :macro} {:name defaliases, :file "taoensso/encore.cljc", :line 635, :arglists ([{:keys [alias src attrs body]} ...]), :doc "Bulk version of `defalias`.\nTakes source symbols or {:keys [alias src attrs body]} maps:\n  (defaliases\n    {:alias my-map, :src map, :attrs {:doc \"My `map` alias\"}}\n    {:alias my-vec, :src vec, :attrs {:doc \"My `vec` alias\"}})", :type :macro} {:name default-timeout-impl_, :file "taoensso/encore.cljc", :line 6165, :doc "Simple one-timeout timeout implementation provided by platform timer.\nO(logn) add, O(1) cancel, O(1) tick. Fns must be non-blocking or cheap.\nSimilar efficiency to core.async timers (binary heap vs DelayQueue).", :type :var} {:name defn-cached, :file "taoensso/encore.cljc", :line 4467, :arglists ([sym cache-opts & body]), :doc "Defines a cached function.\nLike (def <sym> (cache <cache-opts> <body...>)), but preserves\n:arglists (arity) metadata as with `defn`:\n\n  (defn-cached ^:private my-fn {:ttl-ms 500}\n    \"Does something interesting, caches resultes for 500 msecs\"\n    [n]\n    (rand-int n))", :type :macro} {:name defonce, :file "taoensso/encore.cljc", :line 433, :arglists ([sym & args]), :doc "Like `core/defonce` but supports docstring and attrs map.\n", :type :macro} {:name defstub, :file "taoensso/encore.cljc", :line 6008, :arglists ([stub-sym & more] [stub-sym]), :doc "Experimental, subject to change without notice!!\nDeclares a stub var that can be initialized from any namespace with\n`unstub-<stub-name>`.\n\nDecouples a var's declaration (location) and its initialization (value).\nUseful for defining vars in a shared ns from elsewhere (e.g. a private\nor cyclic ns).", :type :macro} {:name deprecated, :file "taoensso/encore.cljc", :line 6732, :arglists ([& body]), :doc "Elides body when `taoensso.elide-deprecated` JVM property or\n`TAOENSSO_ELIDE_DEPRECATED` environment variable is ∈ #{\"true\" \"TRUE\"}.", :type :macro} {:name derefable?, :file "taoensso/encore.cljc", :line 754, :arglists ([x]), :type :var} {:name dissoc-in, :file "taoensso/encore.cljc", :line 1743, :arglists ([m ks dissoc-k] [m ks dissoc-k & more] [m ks]), :type :var} {:name distinct-elements?, :file "taoensso/encore.cljc", :line 1545, :arglists ([x]), :type :var} {:name doto-cond, :file "taoensso/encore.cljc", :line 454, :arglists ([[sym x] & clauses]), :doc "Cross between `doto`, `cond->` and `as->`.\n", :type :macro} {:name editable?, :file "taoensso/encore.cljc", :line 752, :arglists ([x]), :type :var} {:name encore-version, :file "taoensso/encore.cljc", :line 125, :doc "See `assert-min-encore-version`\n", :type :var} {:name ensure-set, :file "taoensso/encore.cljc", :line 1390, :arglists ([x]), :type :var} {:name ensure-vec, :file "taoensso/encore.cljc", :line 1389, :arglists ([x]), :type :var} {:name error?, :file "taoensso/encore.cljc", :line 785, :arglists ([x]), :doc "Returns true iff given platform error (`Throwable` or `js/Error`).\n", :type :var} {:name exception?, :file "taoensso/encore.cljc", :line 769, :arglists ([x]), :type :var} {:name exp-backoff, :file "taoensso/encore.cljc", :line 2223, :arglists ([n-attempt] [n-attempt {:keys [min max factor], :or {factor 1000}}]), :doc "Returns binary exponential backoff value for n<=36.\n", :type :var} {:name file-resources-modified?, :file "taoensso/encore.cljc", :line 5021, :doc "Returns true iff any files backing given named resources have changed since last call.\n", :type :var} {:name filter-keys, :file "taoensso/encore.cljc", :line 1642, :arglists ([key-pred m]), :doc "Returns given ?map, retaining only keys for which (key-pred <key>) is truthy.\n", :type :var} {:name filter-vals, :file "taoensso/encore.cljc", :line 1650, :arglists ([val-pred m]), :doc "Returns given ?map, retaining only keys for which (val-pred <val>) is truthy.\n", :type :var} {:name finite-num?, :file "taoensso/encore.cljc", :line 820, :arglists ([x]), :doc "Returns true iff given a number (of standard type) that is:\nfinite (excl. NaN and infinities).", :type :var} {:name float?, :file "taoensso/encore.cljc", :line 852, :arglists ([x]), :doc "Returns true iff given a number (of standard type) that is:\na fixed-precision floating-point (incl. NaN and infinities).", :type :var} {:name fmemoize, :file "taoensso/encore.cljc", :line 4157, :arglists ([f]), :doc "For Clj: fastest possible memoize. Non-racey, 0-7 arity only.\nFor Cljs: same as `core/memoize`.", :type :var} {:name force-ref, :file "taoensso/encore.cljc", :line 806, :arglists ([x]), :doc "Like `force` for refs.\n", :type :var} {:name force-var, :file "taoensso/encore.cljc", :line 807, :arglists ([x]), :doc "Like `force` for vars.\n", :type :var} {:name format, :file "taoensso/encore.cljc", :line 2962, :arglists ([fmt & args]), :doc "Like `core/format` but:\n* Returns \"\" when fmt is nil rather than throwing an NPE.\n* Formats nil as \"nil\" rather than \"null\".\n* Provides ClojureScript support via goog.string.format (this has fewer\n  formatting options than Clojure's `format`!).", :type :var} {:name format*, :file "taoensso/encore.cljc", :line 2950, :arglists ([fmt args] [xform fmt args]), :type :var} {:name format-inst, :file "taoensso/encore.cljc", :line 2592, :arglists ([inst]), :doc "Takes a platform instant (`java.time.Instant` or `js/Date`) and\nreturns a formatted human-readable string in `ISO8601` format\n(`YYYY-MM-DDTHH:mm:ss.sssZ`), e.g. \"2011-12-03T10:15:130Z\".", :type :var} {:name format-inst-fn, :file "taoensso/encore.cljc", :line 2534, :arglists ([] [{:keys [formatter zone], :or {formatter java.time.format.DateTimeFormatter/ISO_INSTANT, zone java.time.ZoneOffset/UTC}}]), :doc "Experimental, subject to change without notice.\n\nReturns a (fn format [instant]) that:\n  - Takes a platform instant (`java.time.Instant` or `js/Date`).\n  - Returns a formatted human-readable instant string.\n\nOptions:\n  `:formatter`\n    Clj:  `java.time.format.DateTimeFormatter`\n    Cljs: `goog.i18n.DateTimeFormat`\n\n    Defaults to `ISO8601` formatter (`YYYY-MM-DDTHH:mm:ss.sssZ`),\n    e.g.: \"2011-12-03T10:15:130Z\".\n\n  `:zone` (Clj only) `java.time.ZoneOffset` (defaults to UTC).\n   Note that zone may be ignored by some `DateTimeFormatter`s,\n   including the default (`DateTimeFormatter/ISO_INSTANT`)!", :type :var} {:name format-nsecs, :file "taoensso/encore.cljc", :line 3098, :arglists ([nanosecs]), :doc "Returns given nanoseconds (long) as formatted human-readable string.\nExample outputs: \"1.00m\", \"4.20s\", \"340ms\", \"822μs\", etc.", :type :var} {:name format-query-string, :file "taoensso/encore.cljc", :line 6639, :arglists ([m]), :type :var} {:name future*, :file "taoensso/encore.cljc", :line 5317, :arglists ([form] [executor-service form]), :doc "Experimental, subject to change without notice!\nLike `future` but supports use of given custom\n`java.util.concurrent.ExecutorService`.\n\nWill default to using JVM 21+ virtual threads when possible,\notherwise an unbounded fixed daemon thread pool.\n\nSee also `future-call`, `virtual-executor`, `pool-executor`.", :type :macro} {:name future-call*, :file "taoensso/encore.cljc", :line 5285, :arglists ([f] [executor-service f]), :doc "Experimental, subject to change without notice!\nLike `future-call` but supports use of given custom\n`java.util.concurrent.ExecutorService`.\n\nWill default to using JVM 21+ virtual threads when possible,\notherwise an unbounded fixed daemon thread pool.\n\nSee also `future`, `virtual-executor`, `pool-executor`.", :type :var} {:name future-pool, :file "taoensso/encore.cljc", :line 5332, :arglists ([n-threads]), :doc "Returns a simple semaphore-limited wrapper of Clojure's standard `future`:\n  (fn future-pool-fn\n    ([f] [timeout-msecs timeout-val f] [] [timeout-msecs timeout-val]))\n\n  Arities of returned function:\n    [f]  - Blocks to acquire a   future,  then executes (f) on that future.\n    [ ]  - Blocks to acquire ALL futures, then immediately releases them.\n           Useful for blocking till all outstanding work completes.\n\n    [timeout-msecs timeout-val f] - Variant of [f] with timeout\n    [timeout-msecs timeout-val  ] - Variant of [ ] with timeout\n\nSee also `future*` for fully custom pools, etc.", :type :var} {:name get*, :file "taoensso/encore.cljc", :line 1453, :arglists ([m k] [m k not-found] [m k1 k2 not-found] [m k1 k2 k3 not-found]), :doc "Macro version of `get` that:\n\n  1. Avoids unnecessary evaluation of `not-found`.\n     Useful when `not-found` is expensive or contains side-effects.\n\n  2. Supports multiple prioritized keys (k1, k2, etc.). Returns val for\n     first key that exists in map. Useful for key aliases or fallbacks.\n\nEquivalent to:\n\n  (cond\n    (contains? m k1) (get m k1)\n    (contains? m k2) (get m k2)\n    ...\n    :else            not-found)", :type :macro} {:name get-env, :file "taoensso/encore.cljc", :line 5887, :arglists ([{:keys [as default return], :or {as :str, return :value}} spec]), :doc "Flexible cross-platform environmental value util.\n\nGiven a compile-time id (keyword/string) or vector of desc-priority\nids, parse and return the first of the following that exists, or nil:\n  1. JVM         property value   for id\n  2. Environment variable value   for id\n  3. Classpath   resource content for id\n\nIds may include optional platform tag for auto replacement, e.g.:\n  `<.platform>` -> \".clj\", \".cljs\", or nil\n\nClj/s: if resulting value is a single symbol, it will be evaluated.\nCljs:     resulting value will be embedded in code during macro expansion!\n\nOptions:\n  `:as`      - Parse encountered value as given type ∈ #{:str :bool :edn}  (default `:str`).\n  `:default` - Fallback to return unparsed if no value found during search (default `nil`).\n  `:return`  - Return type ∈ #{:value :map :explain} (default `:value`).\n               Use `:explain` to verify/debug, handy for tests/REPL!\n\nExample:\n  (get-env {:as :edn} [:my-app/id1<.platform> :my-app/id2]) will parse\n  and return the first of the following that exists, or nil:\n\n    id1 with platform:\n      `my-app.id1.clj` JVM         property value\n      `MY_APP_id1_CLJ` environment variable value\n      `my-app.id1.clj` classpath   resource content\n\n    id1 without platform:\n      `my-app.id1`     JVM         property value\n      `MY_APP_id1`     environment variable value\n      `my-app.id1`     classpath   resource content\n\n    id2 with    platform: ...\n    id2 without platform: ...", :type :macro} {:name get-file-resource-?last-modified, :file "taoensso/encore.cljc", :line 5013, :arglists ([rname]), :doc "Returns last-modified time for file backing given named resource, or nil\nif file doesn't exist.", :type :var} {:name get-pom-version, :file "taoensso/encore.cljc", :line 5085, :arglists ([dep-sym]), :doc "Returns POM version string for given Maven dependency, or nil.\n", :type :var} {:name get-source, :file "taoensso/encore.cljc", :line 2309, :arglists ([macro-form-or-meta macro-env]), :doc "Returns {:keys [ns line column file]} source location given a macro's\ncompile-time `&form` and `&env` vals. See also `keep-callsite`.", :type :var} {:name get1, :file "taoensso/encore.cljc", :line 1444, :arglists ([m k] [m k not-found] [m k1 k2 not-found] [m k1 k2 k3 not-found]), :doc "Like `get` but returns val for first key that exists in map.\nUseful for key aliases or fallbacks. See also `get*`.", :type :var} {:name have-core-async?, :file "taoensso/encore.cljc", :line 2354, :doc "Is `clojure.core.async` present (not necessarily loaded)?\n", :type :var} {:name hex-ident-str, :file "taoensso/encore.cljc", :line 3706, :arglists ([obj]), :doc "Returns hex string of given Object's `identityHashCode` (e.g. \"5eeb49f2\").\n", :type :var} {:name hex-str->ba, :file "taoensso/encore.cljc", :line 3730, :arglists ([s]), :doc "Returns hex string for given byte[].\n", :type :var} {:name host-info, :file "taoensso/encore.cljc", :line 5688, :arglists ([] [cache-msecs timeout-msecs fallback-val] [fallback-val] [timeout-msecs fallback-val]), :doc "Returns ?{:keys [ip name]} with string vals or `fallback-val` (default nil).\nArities 0 and 3 are   cached, prefer these!\nArities 1 and 2 are uncached and intended for advanced users only.", :type :var} {:name host-ip, :file "taoensso/encore.cljc", :line 5706, :arglists ([] [cache-msecs timeout-msecs fallback-val] [fallback-val] [timeout-msecs fallback-val]), :doc "Returns local host IP string or `fallback-val` (default nil).\nArities 0 and 3 are   cached, prefer these!\nArities 1 and 2 are uncached and intended for advanced users only.", :type :var} {:name hostname, :file "taoensso/encore.cljc", :line 5724, :arglists ([] [cache-msecs timeout-msecs fallback-val] [fallback-val] [timeout-msecs fallback-val]), :doc "Returns local hostname string or `fallback-val` (default nil).\nArities 0 and 3 are   cached, prefer these!\nArities 1 and 2 are uncached and intended for advanced users only.", :type :var} {:name ident?, :file "taoensso/encore.cljc", :line 772, :arglists ([x]), :type :var} {:name identical-kw?, :file "taoensso/encore.cljc", :line 466, :arglists ([x y]), :doc "Returns true iff two keywords are identical.\nPortable and maximally fast.\n  For Clj  this expands to: `(identical?         x y)`\n  For Cljs this expands to: `(keyword-identical? x y)`", :type :macro} {:name if-clj, :file "taoensso/encore.cljc", :line 360, :arglists ([then & [else]]), :type :macro} {:name if-cljs, :file "taoensso/encore.cljc", :line 361, :arglists ([then & [else]]), :type :macro} {:name if-let, :file "taoensso/encore.cljc", :line 144, :arglists ([bindings then] [bindings then else]), :doc "Supersets `core/if-let` functionality. Like `core/if-let` but supports multiple\nbindings, and unconditional bindings with `:let`:\n\n(if-let [x       (rand-nth [:x1 :x2 false nil    ])  ; Bind truthy x, or -> `else`\n         :let [y (rand-nth [:y1 :y2 false nil x  ])] ; Bind any    y\n         z       (rand-nth [:z1 :z2 false nil x y])  ; Bind truthy z, or -> `else`\n         ]\n  [:then-clause x y z]\n  [:else-clause])", :type :macro} {:name if-not, :file "taoensso/encore.cljc", :line 196, :arglists ([test-or-bindings then] [test-or-bindings then else]), :doc "Supersets `core/if-not` functionality.\nSame as `encore/if-let` with `then` `and `else` forms swapped.", :type :macro} {:name if-some, :file "taoensso/encore.cljc", :line 170, :arglists ([bindings then] [bindings then else]), :doc "Supersets `core/if-some` functionality. Like `core/if-some` but supports multiple\nbindings, and unconditional bindings with `:let`:\n\n(if-some [x       (rand-nth [:x1 :x2 false nil    ])  ; Bind non-nil x, or -> `else`\n          :let [y (rand-nth [:y1 :y2 false nil x  ])] ; Bind any     y\n          z       (rand-nth [:z1 :z2 false nil x y])  ; Bind non-nil z, or -> `else`\n          ]\n  [:then-clause x y z]\n  [:else-clause])", :type :macro} {:name indexed?, :file "taoensso/encore.cljc", :line 748, :arglists ([x]), :type :var} {:name inst->udt, :file "taoensso/encore.cljc", :line 2439, :arglists ([inst]), :doc "Returns given `java.time.Instant` as milliseconds since Unix epoch.\n", :type :var} {:name inst?, :file "taoensso/encore.cljc", :line 2410, :arglists ([x]), :doc "Returns true iff given platform instant (`java.time.Instant` or `js/Date`).\n", :type :var} {:name instance!, :file "taoensso/encore.cljc", :line 705, :arglists ([class arg] [class arg {:keys [msg context param ...]}] [class arg & {:keys [msg context param ...]}]), :doc "If (instance? class arg) is true, returns arg.\nOtherwise throws runtime ex-info.", :type :macro} {:name int?, :file "taoensso/encore.cljc", :line 834, :arglists ([x]), :doc "Returns true iff given a number (of standard type) that is:\na fixed-precision integer.", :type :var} {:name interleave-all, :file "taoensso/encore.cljc", :line 1777, :arglists ([] [c1] [c1 c2] [c1 c2 & colls]), :doc "Like `interleave` but includes all items (i.e. stops when the longest\nrather than shortest coll has been consumed).", :type :var} {:name interns-overview, :file "taoensso/encore.cljc", :line 5946, :arglists ([] [ns]), :doc "Returns {:keys [api public private impl test no-doc]}, with each key mapped\nto an alphabetical list of the relevant vars in given namespace.\n\n\"impl\" vars are public vars with names that begin with \"-\" or \"_\",\na naming convention commonly used to indicate vars intended to be treated\nas private implementation details even when public.", :type :var} {:name into!, :file "taoensso/encore.cljc", :line 1580, :arglists ([to!] [to! from] [to! xform from]), :doc "Like `into` but assumes `to!` is a transient, and doesn't call\n`persist!` when done. Useful as a performance optimization in some cases.", :type :var} {:name into-all, :file "taoensso/encore.cljc", :line 1555, :arglists ([to from] [to from & more]), :doc "Like `into` but supports multiple \"from\"s.\n", :type :var} {:name into-str, :file "taoensso/encore.cljc", :line 3022, :arglists ([& xs]), :doc "Simple Hiccup-like string templating to complement Tempura.\n", :type :var} {:name invert-map, :file "taoensso/encore.cljc", :line 1608, :arglists ([m]), :doc "Returns given ?map with keys and vals inverted, dropping non-unique vals!\n", :type :var} {:name invert-map!, :file "taoensso/encore.cljc", :line 1616, :arglists ([m]), :doc "Like `invert-map` but throws on non-unique vals.\n", :type :var} {:name ITimeoutFuture, :file "taoensso/encore.cljc", :line 6173, :type :protocol, :members ({:name tf-cancel!, :arglists ([_]), :doc "Returns true iff the timeout was successfully cancelled (i.e. was previously pending).\n", :type :var} {:name tf-cancelled?, :arglists ([_]), :doc "Returns true iff the timeout is cancelled.\n", :type :var} {:name tf-done?, :arglists ([_]), :doc "Returns true iff the timeout is not pending (i.e. has a completed result or is cancelled).\n", :type :var} {:name tf-pending?, :arglists ([_]), :doc "Returns true iff the timeout is pending.\n", :type :var} {:name tf-poll, :arglists ([_]), :doc "Returns :timeout/pending, :timeout/cancelled, or the timeout's completed result.\n", :type :var} {:name tf-state, :arglists ([_]), :doc "Returns a map of timeout's public state.\n", :type :var})} {:name ITimeoutImpl, :file "taoensso/encore.cljc", :line 6155, :type :protocol, :members ({:name -schedule-timeout, :arglists ([_ msecs f]), :type :var})} {:name java-version, :file "taoensso/encore.cljc", :line 5103, :arglists ([] [version-string]), :doc "Returns Java's major version integer (8, 17, etc.).\n", :type :var} {:name java-version>=, :file "taoensso/encore.cljc", :line 5121, :arglists ([n]), :doc "Returns true iff Java's major version integer is >= given integer:\n(if (java-version>= 21) <then> <else>)", :type :var} {:name keys-by, :file "taoensso/encore.cljc", :line 1690, :arglists ([f coll]), :doc "Returns {(f x) x} ?map for xs in `coll`.\n", :type :var} {:name ks-nnil?, :file "taoensso/encore.cljc", :line 1700, :arglists ([ks m]), :type :var} {:name ks<=, :file "taoensso/encore.cljc", :line 1703, :arglists ([ks m]), :type :var} {:name ks=, :file "taoensso/encore.cljc", :line 1701, :arglists ([ks m]), :type :var} {:name ks>=, :file "taoensso/encore.cljc", :line 1702, :arglists ([ks m]), :type :var} {:name lazy-seq?, :file "taoensso/encore.cljc", :line 760, :arglists ([x]), :type :var} {:name map-entry, :file "taoensso/encore.cljc", :line 1364, :arglists ([k v]), :doc "Returns a `MapEntry` with given key and value.\n", :type :var} {:name map-keys, :file "taoensso/encore.cljc", :line 1626, :arglists ([key-fn m]), :doc "Returns given ?map with (key-fn <key>) keys.\n", :type :var} {:name map-vals, :file "taoensso/encore.cljc", :line 1634, :arglists ([val-fn m]), :doc "Returns given ?map with (val-fn <val>) vals.\n", :type :var} {:name mapply, :file "taoensso/encore.cljc", :line 1550, :arglists ([f & args]), :doc "Like `apply` but calls `seq-kvs` on final arg.\n", :type :var} {:name max*, :file "taoensso/encore.cljc", :line 2144, :arglists ([n1 n2]), :type :macro} {:name max-long, :file "taoensso/encore.cljc", :line 897, :type :var} {:name memoize, :file "taoensso/encore.cljc", :line 4433, :arglists ([f] [ttl-ms f] [size ttl-ms f]), :doc "Alternative way to call `cache`, provided mostly for back compatibility.\nSee `cache` docstring for details.", :type :var} {:name memoize-last, :file "taoensso/encore.cljc", :line 4119, :arglists ([f]), :doc "Like `core/memoize` but only caches the given fn's latest input.\nSpeeds repeated fn calls with the same arguments.\nGreat for ReactJS render fn caching, etc.", :type :var} {:name merge, :file "taoensso/encore.cljc", :line 1894, :arglists ([] [m1] [m1 m2] [m1 m2 m3] [m1 m2 m3 & more]), :doc "Like `core/merge` but:\n- Supports `:merge/dissoc` vals.\n- Often faster, with much better worst-case performance.", :type :var} {:name merge-meta, :file "taoensso/encore.cljc", :line 2255, :arglists ([x m]), :type :var} {:name merge-nx, :file "taoensso/encore.cljc", :line 1937, :arglists ([] [m1] [m1 m2] [m1 m2 m3] [m1 m2 m3 & more]), :doc "Like `core/merge` but:\n- Preserves existing values, e.g. (merge-nx <user-opts> <defaults>).\n- Supports `:merge/dissoc` vals.\n- Often faster, with much better worst-case performance.", :type :var} {:name merge-url-with-query-string, :file "taoensso/encore.cljc", :line 6688, :arglists ([url m]), :type :var} {:name merge-with, :file "taoensso/encore.cljc", :line 1915, :arglists ([f] [f m1] [f m1 m2] [f m1 m2 m3] [f m1 m2 m3 & more]), :doc "Like `core/merge-with` but:\n- Supports `:merge/dissoc` vals.\n- Often faster, with much better worst-case performance.", :type :var} {:name min*, :file "taoensso/encore.cljc", :line 2143, :arglists ([n1 n2]), :type :macro} {:name min-long, :file "taoensso/encore.cljc", :line 898, :type :var} {:name ms, :file "taoensso/encore.cljc", :line 2605, :arglists ([opts] [& {:as opts, :keys [years months weeks days hours mins secs msecs ms]}]), :doc "Returns ~number of milliseconds in period defined by given args.\n", :type :var} {:name ms->secs, :file "taoensso/encore.cljc", :line 2604, :arglists ([ms]), :type :var} {:name msecs, :file "taoensso/encore.cljc", :line 2638, :arglists ([opts] [& {:as opts, :keys [years months weeks days hours mins secs msecs ms]}]), :doc "Macro version of `ms`.\n", :type :macro} {:name name-filter, :file "taoensso/encore.cljc", :line 3235, :arglists ([spec]), :doc "Given filter `spec`, returns a compiled (fn match? [x]) that:\n  - Takes a string, keyword, symbol, or namespace.\n  - Returns true iff input matches spec.\n\nUseful for efficiently filtering namespaces, class names, id kws, etc.\n\nSpec may be:\n  - A namespace     to match exactly\n  - A regex pattern to match\n  - A str/kw/sym    to match, with \"*\" and \"(.*)\" as wildcards:\n    \"foo.*\"   will match \"foo.bar\"\n    \"foo(.*)\" will match \"foo.bar\" and \"foo\"\n    If you need literal \"*\"s, use #\"\\*\" regex instead.\n\n  - A set/vector of the above to match any\n  - A map, {:allow <spec> :disallow <spec>} with specs as the above:\n    If present,    `:allow` spec MUST     match, AND\n    If present, `:disallow` spec MUST NOT match.\n\nSpec examples:\n  *ns*, #{}, \"*\", \"foo.bar\", \"foo.bar.*\", \"foo.bar(.*)\",\n  #{\"foo\" \"bar.*\"}, #\"(foo1|foo2)\\.bar\",\n  {:allow #{\"foo\" \"bar.*\"} :disallow #{\"foo.*.bar.*\"}}.", :type :var} {:name name-with-attrs, :file "taoensso/encore.cljc", :line 407, :arglists ([sym args] [sym args attrs-merge]), :doc "Given a symbol and args, returns [<name-with-attrs-meta> <args> <attrs>]\nwith support for `defn` style `?docstring` and `?attrs-map`.", :type :var} {:name nameable?, :file "taoensso/encore.cljc", :line 773, :arglists ([x]), :type :var} {:name named?, :file "taoensso/encore.cljc", :line 750, :arglists ([x]), :type :var} {:name nanoid, :file "taoensso/encore.cljc", :line 3673, :arglists ([] [len] [secure? len]), :doc "Returns a random \"Nano ID\" of given length, Ref. <https://github.com/ai/nanoid>.\nFaster, variable-length version of (rand-id-fn {:chars :nanoid}).\n126 bits of entropy with default length (21).\nSee also `uuid-str`, `rand-id-fn`.", :type :var} {:name nat-float?, :file "taoensso/encore.cljc", :line 879, :arglists ([x]), :type :var} {:name nat-int?, :file "taoensso/encore.cljc", :line 875, :arglists ([x]), :type :var} {:name nat-num?, :file "taoensso/encore.cljc", :line 871, :arglists ([x]), :type :var} {:name nblank-str?, :file "taoensso/encore.cljc", :line 782, :arglists ([x]), :type :var} {:name nblank?, :file "taoensso/encore.cljc", :line 783, :arglists ([x]), :type :var} {:name neg-float?, :file "taoensso/encore.cljc", :line 881, :arglists ([x]), :type :var} {:name neg-int?, :file "taoensso/encore.cljc", :line 877, :arglists ([x]), :type :var} {:name neg-num?, :file "taoensso/encore.cljc", :line 873, :arglists ([x]), :type :var} {:name nempty-str?, :file "taoensso/encore.cljc", :line 744, :arglists ([x]), :type :var} {:name nested-merge, :file "taoensso/encore.cljc", :line 1904, :arglists ([] [m1] [m1 m2] [m1 m2 m3] [m1 m2 m3 & more]), :doc "Like `core/merge` but:\n- Recursively merges nested maps.\n- Supports `:merge/dissoc` vals.\n- Often faster, with much better worst-case performance.", :type :var} {:name nested-merge-with, :file "taoensso/encore.cljc", :line 1925, :arglists ([f] [f m1] [f m1 m2] [f m1 m2 m3] [f m1 m2 m3 & more]), :doc "Like `core/merge-with` but:\n- Recursively merges nested maps.\n- Supports `:merge/dissoc` vals.\n- Often faster, with much better worst-case performance.", :type :var} {:name new-object, :file "taoensso/encore.cljc", :line 495, :arglists ([]), :type :macro} {:name newline, :file "taoensso/encore.cljc", :line 3296, :doc "Single system newline\n", :type :var} {:name newlines, :file "taoensso/encore.cljc", :line 3297, :doc "Double system newline\n", :type :var} {:name nneg?, :file "taoensso/encore.cljc", :line 867, :arglists ([x]), :type :var} {:name nnil, :file "taoensso/encore.cljc", :line 2267, :arglists ([] [x] [x y] [x y z] [x y z & more]), :doc "Returns first non-nil arg, or nil.\n", :type :var} {:name norm-str, :file "taoensso/encore.cljc", :line 2893, :arglists ([s] [norm-form s]), :doc "Returns normalized form of given string.\n`norm-form` is ∈ #{:nfc :nfkc :nfd :nfkd} (default `:nfc` as per W3C).", :type :var} {:name norm-word-breaks, :file "taoensso/encore.cljc", :line 3013, :arglists ([s]), :doc "Converts all word breaks of any form and length (including line breaks of any\nform, tabs, spaces, etc.) to a single regular space.", :type :var} {:name normalize-headers, :file "taoensso/encore.cljc", :line 6547, :arglists ([rreq-or-rresp]), :type :var} {:name not-empty-coll, :file "taoensso/encore.cljc", :line 1524, :arglists ([x]), :type :var} {:name now-dt, :file "taoensso/encore.cljc", :line 2424, :arglists ([]), :doc "Returns current system instant as `java.util.Date`.\n", :type :var} {:name now-inst, :file "taoensso/encore.cljc", :line 2419, :arglists ([]), :doc "Returns current system instant as `java.time.Instant`.\n", :type :var} {:name now-nano, :file "taoensso/encore.cljc", :line 2434, :arglists ([]), :doc "Returns current value of best-resolution time source as nanoseconds.\n", :type :var} {:name now-udt, :file "taoensso/encore.cljc", :line 2429, :arglists ([]), :doc "Returns current system instant as milliseconds since Unix epoch.\n", :type :var} {:name nzero-num?, :file "taoensso/encore.cljc", :line 869, :arglists ([x]), :type :var} {:name parse-query-params, :file "taoensso/encore.cljc", :line 6663, :arglists ([s & [keywordize? encoding]]), :doc "Based on `ring-codec/form-decode`.\n", :type :var} {:name parse-version, :file "taoensso/encore.cljc", :line 2280, :arglists ([x]), :type :var} {:name path, :file "taoensso/encore.cljc", :line 3007, :arglists ([& parts]), :type :var} {:name perc, :file "taoensso/encore.cljc", :line 2213, :arglists ([n divisor]), :type :var} {:name pnum-complement, :file "taoensso/encore.cljc", :line 2134, :arglists ([pnum]), :type :var} {:name pnum?, :file "taoensso/encore.cljc", :line 883, :arglists ([x]), :doc "Returns true iff given number in unsigned unit proportion interval ∈ℝ[0,1].\n", :type :var} {:name pool-executor, :file "taoensso/encore.cljc", :line 5192, :arglists ([{:keys [n-threads n-min-threads n-max-threads thread-name-prefix daemon-threads? keep-alive-msecs queue-type queue-size], :or {n-threads (+ 2 (get-num-threads [:ratio 1.0])), thread-name-prefix "com.taoensso/encore-pool-", daemon-threads? true, keep-alive-msecs 60000, queue-type :linked}}]), :doc "Experimental, subject to change without notice!\nReturns new `java.util.concurrent.ThreadPoolExecutor` with given opts.", :type :var} {:name pos-float?, :file "taoensso/encore.cljc", :line 880, :arglists ([x]), :type :var} {:name pos-int?, :file "taoensso/encore.cljc", :line 876, :arglists ([x]), :type :var} {:name pos-num?, :file "taoensso/encore.cljc", :line 872, :arglists ([x]), :type :var} {:name pow, :file "taoensso/encore.cljc", :line 2174, :arglists ([n exp]), :type :var} {:name pr, :file "taoensso/encore.cljc", :line 3377, :arglists ([& args]), :doc "Like `core/pr` but faster, and atomic (avoids interleaved content from different threads).\n", :type :var} {:name pr-edn, :file "taoensso/encore.cljc", :line 3399, :arglists ([x]), :doc "Prints given arg to an edn string readable with `read-edn`.\n", :type :var} {:name pre-cache, :file "taoensso/encore.cljc", :line 5384, :arglists ([n-capacity f] [n-capacity fp-or-n-threads f]), :doc "Given a nullary fn `f` that is non-idempotent and free of side-effects,\nreturns a wrapped version of `f` that asynchronously maintains a cache\nof up to `n-capacity` pre-computed return values of (f).\n\nUseful when `f` is expensive & may be called in a spikey fashion,\ne.g. ideal for cryptographic key generators.", :type :var} {:name preserve-reduced, :file "taoensso/encore.cljc", :line 1034, :arglists ([rf]), :doc "Public version of `core/preserving-reduced`.\n", :type :var} {:name print, :file "taoensso/encore.cljc", :line 3388, :arglists ([& args]), :doc "Like `core/print` but faster, and atomic (avoids interleaved content from different threads).\n", :type :var} {:name println, :file "taoensso/encore.cljc", :line 3392, :arglists ([& args]), :doc "Like `core/println` but faster, and atomic (avoids interleaved content from different threads).\n", :type :var} {:name prn, :file "taoensso/encore.cljc", :line 3381, :arglists ([& args]), :doc "Like `core/prn` but faster, and atomic (avoids interleaved content from different threads).\n", :type :var} {:name pull-val!, :file "taoensso/encore.cljc", :line 4097, :arglists ([atom_ k] [atom_ k not-found]), :doc "Removes and returns value mapped to key:\n(let [a (atom {:k :v})]\n  [(pull-val! a :k) @a]) => [:v {}]", :type :var} {:name qb, :file "taoensso/encore.cljc", :line 6123, :arglists ([spec form & more] [spec form]), :doc "Simple util to benchmark/compare runtime of given form/s.\n\nRuns sets of laps for each given form, recording the total runtime of each set.\nReturns the the total runtime in msecs of the fastest set of laps for each form.\n\n  (quick-bench [<num-sets> <num-laps>] <form1> <form2> <...>) =>\n    [<total runtime msecs of fastest set of laps for form1>\n     <total runtime msecs of fastest set of laps for form2>\n     <...>]\n\n   Total number of runs for each form is: `num-sets` * `num-laps`\n\nIf omitted, the default `num-sets` is 6 (to include warmup):\n  (quick-bench <num-laps> <form1> <form2> <...>)\n\nExample (comparing runtime of `first` and `nth` against vector):\n  (let [v [:a]] (quick-bench 1e6 (first v) (nth v 0))) => [67.43 39.05]", :type :macro} {:name qualified-ident?, :file "taoensso/encore.cljc", :line 775, :arglists ([x]), :type :var} {:name qualified-keyword?, :file "taoensso/encore.cljc", :line 779, :arglists ([x]), :type :var} {:name qualified-symbol?, :file "taoensso/encore.cljc", :line 777, :arglists ([x]), :type :var} {:name queue, :file "taoensso/encore.cljc", :line 1378, :arglists ([coll] []), :doc "Returns a new `PersistentQueue`.\n", :type :var} {:name queue*, :file "taoensso/encore.cljc", :line 1385, :arglists ([& items]), :doc "Returns a new `PersistentQueue` given items.\n", :type :var} {:name queue?, :file "taoensso/encore.cljc", :line 1371, :arglists ([x]), :doc "Returns true iff given a `PersistentQueue`.\n", :type :var} {:name quick-bench, :file "taoensso/encore.cljc", :line 6091, :arglists ([spec form & more] [spec form]), :doc "Simple util to benchmark/compare runtime of given form/s.\n\nRuns sets of laps for each given form, recording the total runtime of each set.\nReturns the the total runtime in msecs of the fastest set of laps for each form.\n\n  (quick-bench [<num-sets> <num-laps>] <form1> <form2> <...>) =>\n    [<total runtime msecs of fastest set of laps for form1>\n     <total runtime msecs of fastest set of laps for form2>\n     <...>]\n\n   Total number of runs for each form is: `num-sets` * `num-laps`\n\nIf omitted, the default `num-sets` is 6 (to include warmup):\n  (quick-bench <num-laps> <form1> <form2> <...>)\n\nExample (comparing runtime of `first` and `nth` against vector):\n  (let [v [:a]] (quick-bench 1e6 (first v) (nth v 0))) => [67.43 39.05]", :type :macro} {:name rand-bytes, :file "taoensso/encore.cljc", :line 3574, :arglists ([secure? size]), :doc "Returns a random byte array of given size.\n", :type :var} {:name rand-id-fn, :file "taoensso/encore.cljc", :line 3593, :arglists ([{:keys [chars len rand-bytes-fn], :or {chars :nanoid, len 21, rand-bytes-fn (partial rand-bytes true)}}]), :doc "Returns a (fn rand-id []) that returns random id strings.\nOptions include:\n  `:chars`         - ∈ #{<string> :nanoid :alphanumeric :no-look-alikes ...}\n  `:len`           - Length of id strings to generate\n  `:rand-bytes-fn` - Optional (fn [size]) to return random byte array of given size\n\nSee also `uuid-str`, `nano-id`.", :type :var} {:name rate-limiter, :file "taoensso/encore.cljc", :line 4536, :arglists ([spec] [opts spec]), :doc "Takes a spec of form\n  [           [<n-max-reqs> <msecs-window>] ...] or ; Unnamed limits\n  {<limit-id> [<n-max-reqs> <msecs-window>]}        ;   Named limits\nand returns stateful (fn a-rate-limiter [] [req-id] [command req-id]).\n\nCall the returned limiter fn with a request id (any Clojure value!) to\nenforce limits independently for each id.\n\nFor example, (limiter-fn <ip-address-string>) will return:\n  - Falsey when    allowed (all limits pass for given IP), or\n  - Truthy when disallowed (any limits fail for given IP):\n    [<worst-limit-id> <worst-backoff-msecs> {<limit-id> <backoff-msecs>}]\n\nOr call the returned limiter fn with an extra command argument:\n  (limiter-fn :rl/peek  <req-id) - Check limits WITHOUT incrementing count\n  (limiter-fn :rl/reset <req-id) - Reset all limits for given req-id", :type :var} {:name rcompare, :file "taoensso/encore.cljc", :line 4916, :arglists ([x y]), :doc "Reverse comparator.\n", :type :var} {:name re-pattern?, :file "taoensso/encore.cljc", :line 762, :arglists ([x]), :type :var} {:name read-edn, :file "taoensso/encore.cljc", :line 3418, :arglists ([s] [{:keys [readers default], :as opts, :or {readers clojure.core/*data-readers*, default clojure.core/*default-data-reader-fn*}}]), :doc "Reads given edn string to return a Clj/s value.\n", :type :var} {:name reassoc-some, :file "taoensso/encore.cljc", :line 1507, :arglists ([m k v] [m m-kvs] [m k v & kvs]), :doc "Assocs each kv to given ?map if its value is nil, otherwise dissocs it.\n", :type :var} {:name reduce-indexed, :file "taoensso/encore.cljc", :line 1058, :arglists ([rf init coll]), :doc "Like `reduce` but takes (rf [acc idx in]) with idx as in `map-indexed`.\nAs `reduce-kv` against vector coll, but works on any seqable coll type.", :type :var} {:name reduce-interleave-all, :file "taoensso/encore.cljc", :line 1234, :arglists ([rf init colls]), :doc "Reduces sequence of elements interleaved from given `colls`.\n(reduce-interleave-all conj [] [[:a :b] [1 2 3]]) => [:a 1 :b 2 3]", :type :var} {:name reduce-iterator!, :file "taoensso/encore.cljc", :line 1124, :arglists ([rf init iterator]), :doc "Reduces given `java.util.Iterator`, mutating it. Note that most colls\nproviding iterators implement `java.lang.Iterable`, so support `seq` directly.", :type :var} {:name reduce-kvs, :file "taoensso/encore.cljc", :line 1043, :arglists ([rf init kvs]), :doc "Like `reduce-kv` but takes a flat sequence of kv pairs.\n", :type :var} {:name reduce-multi, :file "taoensso/encore.cljc", :line 1184, :arglists ([rf init coll] [rf1 init1 rf2 init2 coll] [rf1 init1 rf2 init2 rf3 init3 coll]), :doc "Like `reduce` but supports separate simultaneous accumulators\nas a micro-optimization when reducing a large collection multiple\ntimes.", :type :var} {:name reduce-n, :file "taoensso/encore.cljc", :line 2097, :type :var} {:name reduce-top, :file "taoensso/encore.cljc", :line 4957, :arglists ([n rf init coll] [n keyfn rf init coll] [n keyfn cmp rf init coll]), :doc "Reduces the top `n` items from `coll` of N items.\nClj impln is O(N.logn) vs O(N.logN) for (take n (sort-by ...)).", :type :var} {:name reduce-zip, :file "taoensso/encore.cljc", :line 1138, :arglists ([rf init xs ys] [rf init xs ys not-found]), :doc "Reduces given sequential xs and ys as pairs (e.g. key-val pairs).\nCalls (rf acc x y) for each sequential pair.\n\nUseful, among other things, as a more flexible version of `zipmap`.", :type :var} {:name remove-keys, :file "taoensso/encore.cljc", :line 1658, :arglists ([key-pred m]), :doc "Returns given ?map, removing keys for which (key-pred <key>) is truthy.\n", :type :var} {:name remove-vals, :file "taoensso/encore.cljc", :line 1659, :arglists ([val-pred m]), :doc "Returns given ?map, removing keys for which (val-pred <val>) is truthy.\n", :type :var} {:name rename-keys, :file "taoensso/encore.cljc", :line 1660, :arglists ([replacements m]), :doc "Returns a map like the one given, replacing keys using\ngiven {<old-new> <new-key>} replacements. O(min(n_replacements, n_m)).", :type :var} {:name repeatedly-into, :file "taoensso/encore.cljc", :line 1570, :arglists ([coll n f]), :doc "Like `repeatedly` but faster and `conj`s items into given collection.\n", :type :var} {:name reset!?, :file "taoensso/encore.cljc", :line 3933, :arglists ([atom_ val]), :doc "Atomically swaps value of `atom_` to `val` and returns\ntrue iff the atom's value changed. See also `reset-in!?`.", :type :var} {:name reset-in!, :file "taoensso/encore.cljc", :line 3903, :arglists ([atom_ val] [atom_ ks val] [atom_ ks not-found val]), :doc "Like `reset!` but supports `update-in` semantics, returns <old-key-val>.\n", :type :var} {:name reset-in!?, :file "taoensso/encore.cljc", :line 3917, :arglists ([atom_ val] [atom_ ks val] [atom_ ks not-found val]), :doc "Like `reset-in!` but returns true iff the atom's value changed.\n", :type :var} {:name reset-val!, :file "taoensso/encore.cljc", :line 3909, :arglists ([atom_ k val] [atom_ k not-found val]), :doc "Like `reset-in!` but optimized for single-key case.\n", :type :var} {:name reset-val!?, :file "taoensso/encore.cljc", :line 3923, :arglists ([atom_ k new-val]), :doc "Like `reset-in!?` but optimized for single-key case.\n", :type :var} {:name revery-kv?, :file "taoensso/encore.cljc", :line 1110, :arglists ([pred coll]), :type :var} {:name revery?, :file "taoensso/encore.cljc", :line 1103, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rfirst, :file "taoensso/encore.cljc", :line 1092, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rfirst-kv, :file "taoensso/encore.cljc", :line 1098, :arglists ([pred coll]), :type :var} {:name ring-default-headers, :file "taoensso/encore.cljc", :line 6591, :arglists ([headers rresp]), :type :var} {:name ring-merge-headers, :file "taoensso/encore.cljc", :line 6592, :arglists ([headers rresp]), :type :var} {:name ring-redirect-resp, :file "taoensso/encore.cljc", :line 6600, :arglists ([url] [kind url] [kind url flash]), :type :var} {:name ring-resp-map, :file "taoensso/encore.cljc", :line 6587, :arglists ([x]), :type :var} {:name ring-set-body, :file "taoensso/encore.cljc", :line 6588, :arglists ([body rresp]), :type :var} {:name ring-set-headers, :file "taoensso/encore.cljc", :line 6590, :arglists ([headers rresp]), :type :var} {:name ring-set-status, :file "taoensso/encore.cljc", :line 6589, :arglists ([code rresp]), :type :var} {:name rnum?, :file "taoensso/encore.cljc", :line 888, :arglists ([x]), :doc "Returns true iff given number in signed unit proportion interval ∈ℝ[-1,1].\n", :type :var} {:name rolling-counter, :file "taoensso/encore.cljc", :line 4825, :arglists ([msecs]), :doc "Experimental, subject to change without notice.\nReturns a RollingCounter that you can:\n  - Invoke to increment count in last `msecs` window and return RollingCounter.\n  - Deref  to return    count in last `msecs` window.", :type :var} {:name rolling-list, :file "taoensso/encore.cljc", :line 4888, :arglists ([nmax] [nmax {:keys [init-val]}]), :doc "Returns a stateful fn of 2 arities:\n  [ ] => Returns current array in O(n).\n  [x] => Adds `x` to right of list, maintaining length <~ `nmax`.\n         Returns nil. Very fast (faster than `rolling-vector`).\n\nUseful for maintaining limited-length histories, etc.\nSee also `rolling-vector`.", :type :var} {:name rolling-vector, :file "taoensso/encore.cljc", :line 4844, :arglists ([nmax] [nmax {:keys [gc-every init-val], :or {gc-every 16000.0}}]), :doc "Returns a stateful fn of 2 arities:\n  [ ] => Returns current sub/vector in O(1).\n  [x] => Adds `x` to right of sub/vector, maintaining length <= `nmax`.\n         Returns current sub/vector.\n\nUseful for maintaining limited-length histories, etc.\nSee also `rolling-list` (Clj only).", :type :var} {:name round, :file "taoensso/encore.cljc", :line 2177, :arglists ([n] [kind n] [kind precision n]), :doc "General purpose rounding util.\nReturns given number `n` rounded according to given options:\n  - `kind`      - ∈ #{:round :floor :ceil :trunc}     (default `:round`)\n  - `precision` - Number of decimal places to include (default `nil` => none)", :type :var} {:name round0, :file "taoensso/encore.cljc", :line 2214, :arglists ([n]), :type :var} {:name round1, :file "taoensso/encore.cljc", :line 2215, :arglists ([n]), :type :var} {:name round2, :file "taoensso/encore.cljc", :line 2216, :arglists ([n]), :type :var} {:name round3, :file "taoensso/encore.cljc", :line 2217, :arglists ([n]), :type :var} {:name round4, :file "taoensso/encore.cljc", :line 2218, :arglists ([n]), :type :var} {:name roundn, :file "taoensso/encore.cljc", :line 2219, :arglists ([precision n]), :type :var} {:name rsome, :file "taoensso/encore.cljc", :line 1081, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rsome-kv, :file "taoensso/encore.cljc", :line 1087, :arglists ([pred coll]), :type :var} {:name run!, :file "taoensso/encore.cljc", :line 1074, :arglists ([proc coll]), :type :var} {:name run-kv!, :file "taoensso/encore.cljc", :line 1075, :arglists ([proc m]), :type :var} {:name run-kvs!, :file "taoensso/encore.cljc", :line 1076, :arglists ([proc kvs]), :type :var} {:name runner, :file "taoensso/encore.cljc", :line 5437, :arglists ([{:as opts, :keys [mode buffer-size n-threads thread-name drain-msecs auto-stop? convey-bindings? daemon-threads?], :or {mode :blocking, buffer-size 1024, n-threads 1, drain-msecs 6000, auto-stop? true, convey-bindings? true, daemon-threads? true}}]), :doc "Experimental, subject to change without notice!\n Returns a new stateful \"runner\" such that:\n\n  (runner f) ; Arity 1 call\n    Requests runner to execute given nullary fn according to runner's opts.\n    Returns:\n      - `true`  if runner accepted fn for execution without back-pressure.\n      - `false` if runner experienced back-pressure (fn may/not execute).\n      - `nil`   if runner has stopped accepting new execution requests.\n\n  (deref runner)\n    Returns a promise that will be delivered once all pending execution\n    requests complete.\n\n  (runner) ; Arity 0 call\n    Causes runner to permanently stop accepting new execution requests.\n    On first call returns a promise that will be delivered once all pending\n    execution requests complete. On subsequent calls returns nil.\n\nRunners are a little like agents, but:\n  - Take nullary fns rather than unary fns of state.\n  - Have no validators or watches.\n  - Have configurable back-pressure.\n  - Can have >1 thread (in which case fns may execute out-of-order!).\n\nThese properties make them useful as configurable general-purpose async workers.\n\nOptions include:\n\n  `:buffer-size` (default 1024)\n    Size of request buffer, and the max number of pending requests before\n    configured back-pressure behaviour is triggered (see `:mode`).\n\n  `:mode` (default `:blocking`)\n    Back-pressure mode ∈ #{:blocking :dropping :sliding}.\n    Controls what happens when a new request is made while request buffer is full:\n      `:blocking` => Blocks caller until buffer space is available\n      `:dropping` => Drops the newest request (noop)\n      `:sliding`  => Drops the oldest request\n\n  `:n-threads` (default 1)\n    Number of threads to use for executing fns (servicing request buffer).\n    NB execution order may be non-sequential when n > 1.\n\n  `:drain-msecs` (default 6000 msecs)\n    Maximum time (in milliseconds) to try allow pending execution requests to\n    complete when stopping runner. nil => no maximum.", :type :var} {:name satisfies!, :file "taoensso/encore.cljc", :line 685, :arglists ([protocol arg] [protocol arg {:keys [msg context param ...]}] [protocol arg & {:keys [msg context param ...]}]), :doc "If (satisfies? protocol arg) is true, returns arg.\nOtherwise throws runtime ex-info.", :type :macro} {:name satisfies?, :file "taoensso/encore.cljc", :line 675, :arglists ([protocol x]), :doc "Faster `satisfies?` to work around CLJ-1814 until a proper upstream fix.\nMay cache, so possibly inappropriate for dynamic work.", :type :macro} {:name sb-append, :file "taoensso/encore.cljc", :line 2719, :arglists ([str-builder x] [str-builder x & more]), :doc "Appends given string/s to given string builder. See also `str-builder.`\n", :type :var} {:name sb-length, :file "taoensso/encore.cljc", :line 2713, :arglists ([sb]), :doc "Returns given string builder's current length (character count).\n", :type :var} {:name secs, :file "taoensso/encore.cljc", :line 2625, :arglists ([opts] [& {:as opts, :keys [years months weeks days hours mins secs msecs ms]}]), :doc "Returns ~number of seconds in period defined by given args.\n", :type :var} {:name secs->ms, :file "taoensso/encore.cljc", :line 2603, :arglists ([secs]), :type :var} {:name secure-rng, :file "taoensso/encore.cljc", :line 3558, :arglists ([]), :doc "Returns an auto-reseeding thread-local `java.security.SecureRandom`.\nFavours security over performance. May block while waiting on entropy!", :type :var} {:name secure-rng-mock!!!, :file "taoensso/encore.cljc", :line 3563, :arglists ([long-seed]), :doc "Returns **INSECURE** `java.security.SecureRandom` mock instance backed by\na seeded deterministic `java.util.Random`. Useful for testing, etc.", :type :var} {:name select-nested-keys, :file "taoensso/encore.cljc", :line 1974, :arglists ([src-map key-spec]), :doc "Like `select-keys` but supports nested key spec:\n\n  (select-nested-keys\n    {:a :A :b :B :c {:c1 :C1 :c2 :C2} :d :D} ; `src-map`\n    [:a {:c [:c1], :d [:d1 :d2]}]) ; `key-spec`\n\n    => {:a :A, :c {:c1 :C1}, :d :D}\n\nNote that as with the `{:d [:d1 :d2]}` spec in the example above,\nif spec expects a nested map but the actual value is not a map,\nthe actual value will be included in output as-is.\n\nHas the same behaviour as `select-keys` when `key-spec` is a\nsimple vector of keys.", :type :var} {:name seq-kvs, :file "taoensso/encore.cljc", :line 1549, :doc "(seq-kvs {:a :A}) => (:a :A).\n", :type :var} {:name session-swap, :file "taoensso/encore.cljc", :line 6534, :arglists ([rreq rresp f & args]), :doc "Util to help correctly update Ring sessions (something easy to get wrong!).\n\nGiven a Ring request (rreq) and Ring response (rresp), returns a new\nRing response with the response session updated to be (f <old-session>)\nor (apply f <old-session> args).", :type :var} {:name set-var-root!, :file "taoensso/encore.cljc", :line 511, :arglists ([var-sym root-val]), :doc "Sets root binding (value) of the var identified by given symbol, and returns\nthe new value. Cross-platform. See also `update-var-root!`.", :type :macro} {:name simple-date-format, :file "taoensso/encore.cljc", :line 2684, :arglists ([pattern & [{:keys [locale timezone], :as opts}]]), :doc "Returns a thread-local `java.text.SimpleDateFormat`.\n", :type :var} {:name simple-date-format*, :file "taoensso/encore.cljc", :line 2679, :arglists ([pattern locale timezone]), :type :var} {:name simple-ident?, :file "taoensso/encore.cljc", :line 774, :arglists ([x]), :type :var} {:name simple-keyword?, :file "taoensso/encore.cljc", :line 778, :arglists ([x]), :type :var} {:name simple-symbol?, :file "taoensso/encore.cljc", :line 776, :arglists ([x]), :type :var} {:name slurp-file-resource, :file "taoensso/encore.cljc", :line 5033, :doc "Like `slurp-resource` but caches slurps against file's last-modified udt.\n", :type :var} {:name slurp-resource, :file "taoensso/encore.cljc", :line 5003, :arglists ([rname]), :doc "Returns slurped named resource on classpath, or nil when resource not found.\n", :type :var} {:name some=, :file "taoensso/encore.cljc", :line 2258, :arglists ([x] [x y] [x y & more]), :doc "Returns true iff given args are equal AND non-nil.\n", :type :var} {:name sortv, :file "taoensso/encore.cljc", :line 4920, :arglists ([coll] [comparator coll] [?keyfn comparator coll]), :doc "Like `core/sort` but:\n- Returns a vector.\n- `comparator` can be `:asc`, `:desc`, or an arbitrary comparator.\n- An optional `keyfn` may be provided, as in `core/sort-by`.", :type :var} {:name str->utf8-ba, :file "taoensso/encore.cljc", :line 2072, :arglists ([s]), :doc "Returns given String encoded as a UTF-8 byte[].\n", :type :var} {:name str-?index, :file "taoensso/encore.cljc", :line 2844, :arglists ([s substr] [s substr start-idx] [s substr start-idx last?]), :doc "Returns (first/last) ?index of substring if it exists within given string.\n", :type :var} {:name str-builder, :file "taoensso/encore.cljc", :line 2702, :arglists ([] [init]), :doc "Returns a new stateful string builder:\n  - `java.lang.StringBuilder`  for Clj\n  - `goog.string.StringBuffer` for Cljs\n\nSee also `sb-append`.", :type :var} {:name str-builder?, :file "taoensso/encore.cljc", :line 2696, :arglists ([x]), :type :var} {:name str-contains?, :file "taoensso/encore.cljc", :line 2822, :arglists ([s substr]), :type :var} {:name str-ends-with?, :file "taoensso/encore.cljc", :line 2834, :arglists ([s substr]), :type :var} {:name str-join, :file "taoensso/encore.cljc", :line 2796, :arglists ([xs] [separator xs] [separator xform xs]), :doc "Faster generalization of `clojure.string/join` with transducer support.\n", :type :var} {:name str-join-once, :file "taoensso/encore.cljc", :line 2971, :arglists ([separator coll]), :doc "Like `string/join` but skips nils and duplicate separators.\n", :type :var} {:name str-replace, :file "taoensso/encore.cljc", :line 2917, :arglists ([s match replacement]), :doc "Like `str/replace` but provides consistent Clj/s behaviour.\n\nWorkaround for <http://dev.clojure.org/jira/browse/CLJS-794>,\n               <http://dev.clojure.org/jira/browse/CLJS-911>.\n\nNote that ClojureScript 1.7.145 introduced a partial fix for CLJS-911.\nA full fix could unfortunately not be introduced w/o breaking compatibility\nwith the previously incorrect behaviour. CLJS-794 also remains unresolved.", :type :var} {:name str-rf, :file "taoensso/encore.cljc", :line 2769, :arglists ([] [acc] [acc in]), :doc "String builder reducing fn.\n", :type :var} {:name str-starts-with?, :file "taoensso/encore.cljc", :line 2828, :arglists ([s substr]), :type :var} {:name stringy?, :file "taoensso/encore.cljc", :line 771, :arglists ([x]), :type :var} {:name submap?, :file "taoensso/encore.cljc", :line 1962, :arglists ([super-map sub-map]), :doc "Returns true iff `sub-map` is a (possibly nested) submap of `super-map`,\ni.e. iff every (nested) value in `sub-map` has the same (nested) value in `super-map`.\n\n`sub-map` may contain special values:\n  `:submap/nx`     - Matches iff `super-map` does not contain key\n  `:submap/ex`     - Matches iff `super-map` does     contain key (any     val)\n  `:submap/some`   - Matches iff `super-map` does     contain key (non-nil val)\n  (fn [super-val]) - Matches iff given unary predicate returns truthy\n\nUses stack recursion so supports only limited nesting.", :type :var} {:name submaps?, :file "taoensso/encore.cljc", :line 1964, :arglists ([maps subs]), :doc "Experimental, subject to change without notice.\nReturns true iff `sub_i` is a (possibly nested) submap of `m_i`.\nUses `submap?`.", :type :var} {:name substr, :file "taoensso/encore.cljc", :line 1346, :arglists ([s start-idx] [s start-idx end-idx] [s :by-len start end]), :doc "Returns a non-empty sub-string, or nil.\nLike `subs` but:\n  - Doesn't throw when out-of-bounds (clips to bounds).\n  - Returns nil rather than an empty string.\n  - When given `:by-len` kind (4-arity case):\n    - `start` may be -ive (=> index from right of string).\n    - `end`   is desired string length, or `:max`.", :type :var} {:name subvec, :file "taoensso/encore.cljc", :line 1335, :arglists ([v start-idx] [v start-idx end-idx] [v :by-len start end]), :doc "Returns a non-empty sub-vector, or nil.\nLike `core/subvec` but:\n  - Doesn't throw when out-of-bounds (clips to bounds).\n  - Returns nil rather than an empty vector.\n  - When given `:by-len` kind (4-arity case):\n    - `start` may be -ive (=> index from right of vector).\n    - `end`   is desired vector length, or `:max`.", :type :var} {:name swap-in!, :file "taoensso/encore.cljc", :line 4079, :arglists ([atom_ f] [atom_ ks f] [atom_ ks not-found f]), :doc "Like `swap!` but supports `update-in` semantics and `swapped`.\nReturns <new-key-val> or <swapped-return-val>:\n  (swap-in! (atom {:k1 {:k2 5}}) [:k1 :k2] inc) => 6\n  (swap-in! (atom {:k1 {:k2 5}}) [:k1 :k2]\n    (fn [old] (swapped (inc old) old))) => 5", :type :var} {:name swap-val!, :file "taoensso/encore.cljc", :line 4089, :arglists ([atom_ k f] [atom_ k not-found f]), :doc "Like `swap-in!` but optimized for single-key case:\n(swap-val! (atom {:k 5}) :k inc) => 6\n(swap-val! (atom {:k 5}) :k\n  (fn [old] (swapped (inc old) old))) => 5", :type :var} {:name swapped, :file "taoensso/encore.cljc", :line 3949, :arglists ([new-val return-val]), :doc "For use within the swap functions of `swap-in!` and `swap-val!`.\n\nAllows the easy decoupling of new and returned values. Compare:\n  (let [a (atom 0)] [(core/swap! a (fn [old]          (inc old)     )) @a]) [1 1] ; new=1, return=1\n  (let [a (atom 0)] [(swap-in!   a (fn [old] (swapped (inc old) old))) @a]) [0 1] ; new=1, return=0\n\nFaster and much more flexible than `core/swap-vals!`, etc.\nEspecially useful when combined with the `update-in` semantics of `swap-in!`, etc.", :type :var} {:name swapped?, :file "taoensso/encore.cljc", :line 3968, :arglists ([x]), :doc "Returns true iff given `Swapped` argument.\n", :type :var} {:name takev, :file "taoensso/encore.cljc", :line 1543, :arglists ([n coll]), :type :var} {:name test-fixtures, :file "taoensso/encore.cljc", :line 6058, :arglists ([fixtures-map]), :doc "Given a {:before ?(fn []) :after ?(fn [])} map, returns cross-platform\ntest fixtures for use by both `clojure.test` and `cljs.test`:\n\n  (let [f (test-fixtures {:before (fn [] (test-setup))})]\n    (clojure.test/use-fixtures :once f)\n       (cljs.test/use-fixtures :once f))", :type :var} {:name thread-id, :file "taoensso/encore.cljc", :line 5617, :arglists ([]), :doc "Returns long id of current `Thread`.\n", :type :var} {:name thread-info, :file "taoensso/encore.cljc", :line 5619, :arglists ([]), :doc "Returns {:keys [group name id]} for current `Thread`.\n", :type :var} {:name thread-local, :file "taoensso/encore.cljc", :line 2377, :arglists ([& body]), :doc "Given a body that returns an initial value for the current thread,\nreturns a `ThreadLocal` proxy that can be derefed to get the current\nthread's current value.\n\nCommonly used to achieve thread safety during Java interop.\nIn the common case, `body` will be a call to some Java constructor\nthat returns a non-thread-safe instance.\n\nExample:\n  (def thread-local-simple-date-format_\n    \"Deref to return a thread-local `SimpleDateFormat`\"\n    (thread-local (SimpleDateFormat. \"yyyy-MM-dd\")))\n\n  (.format @thread-local-simple-date-format_ (Date.)) => \"2023-01-24\"\n\nNB: don't pass the derefed value to other threads!", :type :macro} {:name thread-local*, :file "taoensso/encore.cljc", :line 2370, :arglists ([init-val-fn]), :doc "Low-level, see `thread-local` instead.\n", :type :var} {:name thread-local-proxy, :file "taoensso/encore.cljc", :line 2366, :arglists ([& body]), :doc "Low-level, see `thread-local` instead.\n", :type :macro} {:name thread-name, :file "taoensso/encore.cljc", :line 5616, :arglists ([]), :doc "Returns string name of current `Thread`.\n", :type :var} {:name throwable?, :file "taoensso/encore.cljc", :line 768, :arglists ([x]), :type :var} {:name time-ms, :file "taoensso/encore.cljc", :line 6083, :arglists ([& body]), :doc "Returns number of milliseconds it took to execute body.\n", :type :macro} {:name time-ns, :file "taoensso/encore.cljc", :line 6087, :arglists ([& body]), :doc "Returns number of nanoseconds it took to execute body.\n", :type :macro} {:name timeout-future?, :file "taoensso/encore.cljc", :line 6221, :arglists ([x]), :type :var} {:name top, :file "taoensso/encore.cljc", :line 4992, :arglists ([n coll] [n keyfn coll] [n keyfn cmp coll]), :doc "Returns a sorted vector of the top `n` items from `coll` using `reduce-top`.\n", :type :var} {:name top-into, :file "taoensso/encore.cljc", :line 4983, :arglists ([to n coll] [to n keyfn coll] [to n keyfn cmp coll]), :doc "Conjoins the top `n` items from `coll` into `to` using `reduce-top`.\n", :type :var} {:name transient?, :file "taoensso/encore.cljc", :line 758, :arglists ([x]), :type :var} {:name udt->inst, :file "taoensso/encore.cljc", :line 2444, :arglists ([msecs-since-epoch]), :doc "Returns given milliseconds since Unix epoch as `java.time.Instant`.\n", :type :var} {:name udt?, :file "taoensso/encore.cljc", :line 2465, :arglists ([x]), :type :var} {:name update!, :file "taoensso/encore.cljc", :line 1579, :arglists ([m k f]), :type :var} {:name update-in, :file "taoensso/encore.cljc", :line 1711, :arglists ([m ks f] [m ks not-found f]), :doc "Like `core/update-in` but:.\n- Empty ks will return (f m), not act like [nil] ks.\n- Adds support for `not-found`.\n- Adds support for special return vals: `:update/dissoc`, `:update/abort`.", :type :var} {:name update-var-root!, :file "taoensso/encore.cljc", :line 498, :arglists ([var-sym update-fn]), :doc "Updates root binding (value) of the var identified by given symbol, and returns\nthe new value:\n  (update-var-root! my-var (fn [old-root-val] <new-root-val>)) => <new-root-val>\n\nSimilar to `alter-var-root` but cross-platform and takes a symbol rather than a var.\nSee also `set-var-root!`.", :type :macro} {:name uri?, :file "taoensso/encore.cljc", :line 767, :arglists ([x]), :type :var} {:name url-decode, :file "taoensso/encore.cljc", :line 6628, :arglists ([s & [encoding]]), :doc "Stolen from <http://goo.gl/99NSR1>.\n", :type :var} {:name url-encode, :file "taoensso/encore.cljc", :line 6615, :arglists ([s & [encoding]]), :doc "Based on <https://goo.gl/fBqy6e>.\n", :type :var} {:name utf8-ba->str, :file "taoensso/encore.cljc", :line 2067, :arglists ([ba]), :doc "Returns String by decoding given UTF-8 byte[].\n", :type :var} {:name uuid, :file "taoensso/encore.cljc", :line 3495, :arglists ([]), :doc "For Clj: returns a random `java.util.UUID`.\nFor Cljs: returns a random UUID string.\n\nUses strong randomness when possible.\nSee also `uuid-str`, `nanoid`, `rand-id-fn`.", :type :var} {:name uuid-str, :file "taoensso/encore.cljc", :line 3522, :arglists ([max-len] []), :doc "Returns a random UUID string of given length (max 36).\nUses strong randomness when possible. See also `uuid`, `nanoid`, `rand-id-fn`.", :type :var} {:name vec2?, :file "taoensso/encore.cljc", :line 780, :arglists ([x]), :type :var} {:name vec3?, :file "taoensso/encore.cljc", :line 781, :arglists ([x]), :type :var} {:name vinterleave-all, :file "taoensso/encore.cljc", :line 1800, :arglists ([colls] [c1 c2] [c1 c2 c3] [c1 c2 c3 & colls]), :doc "Like `interleave`, but:\n  - Returns a vector rather than lazy seq (=> greedy).\n  - Includes all items (i.e. stops when the longest rather than\n    shortest coll has been consumed).\n\nSingle-arity version takes a coll of colls.", :type :var} {:name virtual-executor, :file "taoensso/encore.cljc", :line 5160, :arglists ([]), :doc "Experimental, subject to change without notice!\nReturns new virtual `java.util.concurrent.ThreadPerTaskExecutor` when\npossible (JVM 21+), otherwise returns nil.", :type :var} {:name vnext, :file "taoensso/encore.cljc", :line 1520, :arglists ([v]), :type :var} {:name vrest, :file "taoensso/encore.cljc", :line 1521, :arglists ([v]), :type :var} {:name vsplit-first, :file "taoensso/encore.cljc", :line 1523, :arglists ([v]), :type :var} {:name vsplit-last, :file "taoensso/encore.cljc", :line 1522, :arglists ([v]), :type :var} {:name when, :file "taoensso/encore.cljc", :line 226, :arglists ([test-or-bindings & body]), :doc "Supersets `core/when` and `core/when-let` functionality. When `test-or-bindings` is\na vector, same as `encore/when-let`. Otherwise same as `core/when`.", :type :macro} {:name when-let, :file "taoensso/encore.cljc", :line 212, :arglists ([bindings & body]), :doc "Supersets `core/when-let` functionality. Like `core/when-let` but supports multiple\nbindings, and unconditional bindings with `:let`:\n\n(when-let [x       (rand-nth [:x1 :x2 false nil    ])  ; Bind truthy x, or -> nil\n           :let [y (rand-nth [:y1 :y2 false nil x  ])] ; Bind any    y\n           z       (rand-nth [:z1 :z2 false nil x y])  ; Bind truthy z, or -> nil\n           ]\n  [:body x y z])", :type :macro} {:name when-not, :file "taoensso/encore.cljc", :line 236, :arglists ([test-or-bindings & body]), :doc "Supersets `core/when-not` functionality.\nSame as `encore/if-let` with `body` as `else` form.", :type :macro} {:name when-some, :file "taoensso/encore.cljc", :line 246, :arglists ([test-or-bindings & body]), :doc "Supersets `core/when-some` functionality. Like `core/when-some` but supports multiple\nbindings, and unconditional bindings with `:let`:\n\n(when-some [x       (rand-nth [:x1 :x2 false nil    ])  ; Bind non-nil x, or -> `else`\n            :let [y (rand-nth [:y1 :y2 false nil x  ])] ; Bind any     y\n            z       (rand-nth [:z1 :z2 false nil x y])  ; Bind non-nil z, or -> `else`\n            ]\n  [:body x y z])", :type :macro} {:name without-meta, :file "taoensso/encore.cljc", :line 2256, :arglists ([x]), :type :var} {:name xdistinct, :file "taoensso/encore.cljc", :line 1588, :arglists ([] [keyfn]), :doc "Returns a stateful transducer like (core/distinct) that supports an optional\nkey function. Retains only items with distinct (keyfn <item>).", :type :var} {:name zero-num?, :file "taoensso/encore.cljc", :line 868, :arglists ([x]), :type :var}), :doc "Extended core library for Clojure/Script that emphasizes:\n  * Cross-platform API\n  * Flexibility\n  * Performance\n  * Backwards compatibility\n\nThis lib's mostly for my own use and for advanced users that feel\ncomfortable reading this source. Not providing much beginner-oriented\ndocumentation for this, sorry.\n\nCommon naming conventions used across my libs:\n  **foo** - Dynamic var\n  foo!    - Fn with side-effects, or that should otherwise be used cautiously\n  foo?    - Truthy val or fn that returns truthy val\n  foo!?   - Fn that has side-effects (or requires caution) and that return\n            a truthy val. Note: !?, not ?!\n  foo$    - Fn that's notably expensive to compute (e.g. hits db)\n  foo_    - Derefable val (e.g. atom, volatile, delay, etc.)\n  foo__   - Derefable in a derefable (e.g. delay in an atom), etc.\n  _       - Unnamed val\n  _foo    - Named but unused val\n  ?foo    - Optional val (emphasize that val may be nil)\n  foo*    - A variation of `foo` (e.g. `foo*` macro vs `foo` fn)\n  foo'    - ''\n  -foo    - Public implementation detail or intermediate (e.g. uncoerced) val\n  >foo    - Val \"to   foo\" (e.g. >sender, >host), or fn to  put/coerce/transform\n  <foo    - Val \"from foo\" (e.g. <sender, <host), or fn to take/coerce/transform\n  ->foo   - Fn to put/coerce/transform\n\nType affixes may be used for clarity:\n  <prefix>-<name>  - m-users,   v-users,   n-users,    etc. (also nusers when unambiguous)\n  <name>-<postfix> - users-map, users-vec, user-count, etc.\n\nRegarding name heirarchy:\n  When there's a significant num of syms with a meaningful hierarchy,\n  prefer names with descending hierarchy to emphasize structure and\n  related groups/functionality, e.g.:\n    `user-add`, `user-remove`, `user-mod` vs\n    `add-user`, `remove-user`, `mod-user`, etc.\n\nCommit message tags (in priority order):\n  [wip]   - Work-in-progress (still under development)\n\n  [mod]   - Modify     behaviour (=>          breaking), [mod!], [mod!!], etc. for attention\n  [fix]   - Fix broken behaviour (=> usu. non-breaking)\n  [new]   - Add new    behaviour (=>      non-breaking)\n\n  [doc]   - Documentation changes besides those better labelled as [mod], [fix], or [new]\n  [nop]   - Other non-breaking changes (to implementation details, non-code changes, etc.)\n\n  [x] [y] - Single commit with multiple tags (in priority order), try avoid\n\nExample commit messages:\n  v1.0.0 (2022-01-27) ; Tagged release\n  [new] [#122] Add new feature x (@contributor)\n\nVersion numbers:\n  Ver tables:  X.Y.Z (without backticks)\n     Min ver: vX.Y.Z+\n   Elsewhere: vX.Y.Z"}), "cljs" ({:name taoensso.encore, :doc "Extended core library for Clojure/Script that emphasizes:\n  * Cross-platform API\n  * Flexibility\n  * Performance\n  * Backwards compatibility\n\nThis lib's mostly for my own use and for advanced users that feel\ncomfortable reading this source. Not providing much beginner-oriented\ndocumentation for this, sorry.\n\nCommon naming conventions used across my libs:\n  **foo** - Dynamic var\n  foo!    - Fn with side-effects, or that should otherwise be used cautiously\n  foo?    - Truthy val or fn that returns truthy val\n  foo!?   - Fn that has side-effects (or requires caution) and that return\n            a truthy val. Note: !?, not ?!\n  foo$    - Fn that's notably expensive to compute (e.g. hits db)\n  foo_    - Derefable val (e.g. atom, volatile, delay, etc.)\n  foo__   - Derefable in a derefable (e.g. delay in an atom), etc.\n  _       - Unnamed val\n  _foo    - Named but unused val\n  ?foo    - Optional val (emphasize that val may be nil)\n  foo*    - A variation of `foo` (e.g. `foo*` macro vs `foo` fn)\n  foo'    - ''\n  -foo    - Public implementation detail or intermediate (e.g. uncoerced) val\n  >foo    - Val \"to   foo\" (e.g. >sender, >host), or fn to  put/coerce/transform\n  <foo    - Val \"from foo\" (e.g. <sender, <host), or fn to take/coerce/transform\n  ->foo   - Fn to put/coerce/transform\n\nType affixes may be used for clarity:\n  <prefix>-<name>  - m-users,   v-users,   n-users,    etc. (also nusers when unambiguous)\n  <name>-<postfix> - users-map, users-vec, user-count, etc.\n\nRegarding name heirarchy:\n  When there's a significant num of syms with a meaningful hierarchy,\n  prefer names with descending hierarchy to emphasize structure and\n  related groups/functionality, e.g.:\n    `user-add`, `user-remove`, `user-mod` vs\n    `add-user`, `remove-user`, `mod-user`, etc.\n\nCommit message tags (in priority order):\n  [wip]   - Work-in-progress (still under development)\n\n  [mod]   - Modify     behaviour (=>          breaking), [mod!], [mod!!], etc. for attention\n  [fix]   - Fix broken behaviour (=> usu. non-breaking)\n  [new]   - Add new    behaviour (=>      non-breaking)\n\n  [doc]   - Documentation changes besides those better labelled as [mod], [fix], or [new]\n  [nop]   - Other non-breaking changes (to implementation details, non-code changes, etc.)\n\n  [x] [y] - Single commit with multiple tags (in priority order), try avoid\n\nExample commit messages:\n  v1.0.0 (2022-01-27) ; Tagged release\n  [new] [#122] Add new feature x (@contributor)\n\nVersion numbers:\n  Ver tables:  X.Y.Z (without backticks)\n     Min ver: vX.Y.Z+\n   Elsewhere: vX.Y.Z", :author "Peter Taoussanis (@ptaoussanis)", :publics ({:name <*, :file "taoensso/encore.cljc", :line 2141, :arglists ([x y z]), :type :macro} {:name <=*, :file "taoensso/encore.cljc", :line 2139, :arglists ([x y z]), :type :macro} {:name >*, :file "taoensso/encore.cljc", :line 2142, :arglists ([x y z]), :type :macro} {:name >=*, :file "taoensso/encore.cljc", :line 2140, :arglists ([x y z]), :type :macro} {:name a-utf8-str, :file "taoensso/encore.cljc", :line 2692, :doc "Example UTF-8 string for tests, etc.\n", :type :var} {:name abbreviate-ns, :file "taoensso/encore.cljc", :line 3113, :arglists ([x] [n-full x]), :doc "Give any nameable type (string, keyword, symbol), returns the same\ntype with at most `n-full` (default 1) unabbreviated namespace parts.\n\nExample:\n  (abbreviate-ns 0  :foo.bar/baz)   => :f.b/baz\n  (abbreviate-ns 1  'foo.bar/baz)   => 'f.bar/baz\n  (abbreviate-ns 2 \"foo.bar/baz\") => \"foo.bar/baz\"", :type :var} {:name abs, :file "taoensso/encore.cljc", :line 2175, :arglists ([n]), :type :var} {:name after-timeout, :file "taoensso/encore.cljc", :line 6253, :arglists ([msecs & body]), :doc "Alpha, subject to change.\nReturns a TimeoutFuture that will execute body after timeout.\nBody must be non-blocking or cheap.", :type :macro} {:name ajax-call, :file "taoensso/encore.cljc", :line 6337, :arglists ([url {:keys [method params headers timeout-ms resp-type with-credentials? xhr-pool xhr-cb-fn xhr-timeout-ms], :as opts, :or {method :get, timeout-ms 10000, resp-type :auto, xhr-pool default-xhr-pool_, xhr-timeout-ms 2500}} callback-fn]), :doc "Queues a lightweight Ajax call with Google Closure's `goog.net.XhrIo` and\nreturns nil, or the resulting `goog.net.XhrIo` instance if one was\nimmediately available from the XHR pool:\n\n  (ajax-call\n    \"http://localhost:8080/my-post-route\" ; Endpoint URL\n\n    {:method     :post ; ∈ #{:get :post :put}\n     :resp-type  :text ; ∈ #{:auto :edn :json :xml :text}\n\n     :params     {:username \"Rich Hickey\" :type \"Awesome\"} ; Request params\n     :headers    {\"Content-Type\" \"text/plain\"} ; Request headers\n\n     :timeout-ms 7000\n     :with-credentials? false ; Enable if using CORS (requires xhr v2+)\n\n     :xhr-pool       my-xhr-pool ; Optional `goog.net.XhrIoPool` instance or delay\n     :xhr-cb-fn      (fn [xhr])  ; Optional fn to call with `XhrIo` from pool when available\n     :xhr-timeout-ms 2500        ; Optional max msecs to wait on pool for `XhrIo`\n    }\n\n    (fn ajax-callback-fn [resp-map]\n      (let [{:keys [success? ?status ?error ?content ?content-type]} resp-map]\n        ;; ?status ; ∈ #{nil 200 404 ...}, non-nil iff server responded\n        ;; ?error  ; ∈ #{nil <http-error-status-code> <exception> :timeout\n                         :abort :http-error :exception :xhr-pool-depleted}\n        (js/alert (str \"Ajax response: \" resp-map)))))", :type :var} {:name approx==, :file "taoensso/encore.cljc", :line 2123, :arglists ([x y] [signf x y]), :type :var} {:name as-?bool, :file "taoensso/encore.cljc", :line 953, :arglists ([x]), :type :var} {:name as-?email, :file "taoensso/encore.cljc", :line 961, :arglists ([?s] [max-len ?s]), :type :var} {:name as-?float, :file "taoensso/encore.cljc", :line 938, :arglists ([x]), :type :var} {:name as-?inst, :file "taoensso/encore.cljc", :line 2467, :arglists ([x]), :doc "Returns given ?arg as platform instant (`java.time.Instant` or `js/Date`), or nil.\n", :type :var} {:name as-?int, :file "taoensso/encore.cljc", :line 927, :arglists ([x]), :type :var} {:name as-?kw, :file "taoensso/encore.cljc", :line 915, :arglists ([x]), :type :var} {:name as-?name, :file "taoensso/encore.cljc", :line 916, :arglists ([x]), :type :var} {:name as-?nat-float, :file "taoensso/encore.cljc", :line 947, :arglists ([x]), :type :var} {:name as-?nat-int, :file "taoensso/encore.cljc", :line 945, :arglists ([x]), :type :var} {:name as-?nblank, :file "taoensso/encore.cljc", :line 914, :arglists ([x]), :type :var} {:name as-?nblank-trim, :file "taoensso/encore.cljc", :line 923, :arglists ([x]), :type :var} {:name as-?nemail, :file "taoensso/encore.cljc", :line 969, :arglists ([?s] [max-len ?s]), :type :var} {:name as-?nempty-str, :file "taoensso/encore.cljc", :line 922, :arglists ([x]), :type :var} {:name as-?nzero, :file "taoensso/encore.cljc", :line 913, :arglists ([x]), :type :var} {:name as-?pnum, :file "taoensso/encore.cljc", :line 950, :arglists ([x]), :type :var} {:name as-?pos-float, :file "taoensso/encore.cljc", :line 948, :arglists ([x]), :type :var} {:name as-?pos-int, :file "taoensso/encore.cljc", :line 946, :arglists ([x]), :type :var} {:name as-?qname, :file "taoensso/encore.cljc", :line 917, :arglists ([x]), :type :var} {:name as-?rnum, :file "taoensso/encore.cljc", :line 951, :arglists ([x]), :type :var} {:name as-?udt, :file "taoensso/encore.cljc", :line 2499, :arglists ([x]), :doc "Returns given ?arg as (pos/neg) milliseconds since Unix epoch, or nil.\n", :type :var} {:name as-bool, :file "taoensso/encore.cljc", :line 1028, :arglists ([x]), :type :var} {:name as-email, :file "taoensso/encore.cljc", :line 994, :arglists ([x] [n x]), :type :var} {:name as-float, :file "taoensso/encore.cljc", :line 1012, :arglists ([x]), :type :var} {:name as-inst, :file "taoensso/encore.cljc", :line 2524, :arglists ([x]), :type :var} {:name as-int, :file "taoensso/encore.cljc", :line 1005, :arglists ([x]), :type :var} {:name as-kw, :file "taoensso/encore.cljc", :line 992, :arglists ([x]), :type :var} {:name as-name, :file "taoensso/encore.cljc", :line 989, :arglists ([x]), :type :var} {:name as-nat-float, :file "taoensso/encore.cljc", :line 1014, :arglists ([x]), :type :var} {:name as-nat-int, :file "taoensso/encore.cljc", :line 1007, :arglists ([x]), :type :var} {:name as-nblank, :file "taoensso/encore.cljc", :line 986, :arglists ([x]), :type :var} {:name as-nblank-trim, :file "taoensso/encore.cljc", :line 987, :arglists ([x]), :type :var} {:name as-nemail, :file "taoensso/encore.cljc", :line 999, :arglists ([x] [n x]), :type :var} {:name as-nempty-str, :file "taoensso/encore.cljc", :line 988, :arglists ([x]), :type :var} {:name as-nzero, :file "taoensso/encore.cljc", :line 991, :arglists ([x]), :type :var} {:name as-pnum, :file "taoensso/encore.cljc", :line 1019, :arglists ([x]), :type :var} {:name as-pnum!, :file "taoensso/encore.cljc", :line 1024, :arglists ([x]), :type :var} {:name as-pnum-complement, :file "taoensso/encore.cljc", :line 2135, :arglists ([x]), :type :var} {:name as-pos-float, :file "taoensso/encore.cljc", :line 1016, :arglists ([x]), :type :var} {:name as-pos-int, :file "taoensso/encore.cljc", :line 1009, :arglists ([x]), :type :var} {:name as-qname, :file "taoensso/encore.cljc", :line 990, :arglists ([x]), :type :var} {:name as-rnum, :file "taoensso/encore.cljc", :line 1021, :arglists ([x]), :type :var} {:name as-rnum!, :file "taoensso/encore.cljc", :line 1026, :arglists ([x]), :type :var} {:name as-udt, :file "taoensso/encore.cljc", :line 2526, :arglists ([x]), :type :var} {:name assert-min-encore-version, :file "taoensso/encore.cljc", :line 2288, :arglists ([min-version]), :doc "Version check for dependency conflicts, etc.\n", :type :macro} {:name assoc-nx, :file "taoensso/encore.cljc", :line 1501, :arglists ([m k v] [m m-kvs] [m k v & kvs]), :doc "Assocs each kv to given ?map iff its key doesn't already exist.\n", :type :var} {:name assoc-some, :file "taoensso/encore.cljc", :line 1489, :arglists ([m k v] [m m-kvs] [m k v & kvs]), :doc "Assocs each kv to given ?map iff its value is not nil.\n", :type :var} {:name assoc-when, :file "taoensso/encore.cljc", :line 1495, :arglists ([m k v] [m m-kvs] [m k v & kvs]), :doc "Assocs each kv to given ?map iff its val is truthy.\n", :type :var} {:name atom?, :file "taoensso/encore.cljc", :line 757, :arglists ([x]), :type :var} {:name bench, :file "taoensso/encore.cljc", :line 6148, :arglists ([nlaps opts & body]), :type :macro} {:name binding, :file "taoensso/encore.cljc", :line 7345, :arglists ([bindings & body]), :deprecated true, :type :macro} {:name binding*, :file "taoensso/encore.cljc", :line 383, :arglists ([bindings & body]), :doc "For Clj: faster version of `core/binding`.\nFor Cljs: identical to `core/binding`.\nCan interfere with deep-walking macros.", :type :macro} {:name boolean?, :file "taoensso/encore.cljc", :line 747, :arglists ([x]), :type :var} {:name cache, :file "taoensso/encore.cljc", :line 4205, :arglists ([f] [{:keys [size ttl-ms gc-every], :as opts} f]), :doc "Returns a cached version of given referentially transparent function `f`.\n\nLike `core/memoize` but:\n  - Often faster, depending on options.\n  - Prevents race conditions on writes.\n  - Supports cache invalidation by prepending args with:\n    - `:cache/del`   ; Delete cached item for subsequent args, returns nil.\n    - `:cache/fresh` ; Renew  cached item for subsequent args, returns new val.\n\n  - Supports options:\n    - `ttl-ms` ; Expire cached items after <this> many msecs.\n    - `size`   ; Restrict cache size to <this> many items at the next garbage\n               ; collection (GC).\n\n    - `gc-every` ; Run garbage collection (GC) approximately once every\n                 ; <this> many calls to cached fn. If unspecified, GC rate\n                 ; will be determined automatically based on `size`.\n\nSee also `defn-cached`, `fmemoize`, `memoize-last`.", :type :var} {:name call-after-timeout, :file "taoensso/encore.cljc", :line 6223, :arglists ([msecs f] [impl_ msecs f]), :doc "Alpha, subject to change.\nReturns a TimeoutFuture that will execute `f` after given msecs.\n\nDoes NOT do any automatic binding conveyance.\n\nPerformance depends on the provided timer implementation (`impl_`).\nThe default implementation offers O(logn) add, O(1) cancel, O(1) tick.\n\nSee `ITimeoutImpl` for extending to arbitrary timer implementations.", :type :var} {:name can-meta?, :file "taoensso/encore.cljc", :line 765, :arglists ([x]), :type :var} {:name case-eval, :file "taoensso/encore.cljc", :line 443, :arglists ([expr & clauses]), :doc "Like `case` but test expressions are evaluated for their compile-time value.\n", :type :macro} {:name case-insensitive-str=, :file "taoensso/encore.cljc", :line 2860, :arglists ([s1 s2]), :doc "Returns true iff given strings are equal, ignoring case.\n", :type :var} {:name catching, :file "taoensso/encore.cljc", :line 6823, :arglists ([expr] [error-type expr] [try-expr error-sym catch-expr] [try-expr error-sym catch-expr finally-expr] [try-expr error-type error-sym catch-expr finally-expr]), :doc "Terse, cross-platform (try* expr (catch :all _)).\nArities besides #{1 2} are deprecated, prefer `try*` in these cases.", :type :macro} {:name chan?, :file "taoensso/encore.cljc", :line 788, :arglists ([x]), :doc "Returns true iff given a `clojure.core.async` channel.\n", :type :var} {:name chance, :file "taoensso/encore.cljc", :line 2235, :arglists ([prob]), :doc "Returns true with given probability ∈ ℝ[0,1].\n", :type :var} {:name clamp, :file "taoensso/encore.cljc", :line 2130, :arglists ([nmin nmax n]), :type :var} {:name clamp*, :file "taoensso/encore.cljc", :line 2145, :arglists ([nmin nmax n]), :type :macro} {:name clamp-float, :file "taoensso/encore.cljc", :line 2132, :arglists ([nmin nmax n]), :type :var} {:name clamp-int, :file "taoensso/encore.cljc", :line 2131, :arglists ([nmin nmax n]), :type :var} {:name compile-if, :file "taoensso/encore.cljc", :line 349, :arglists ([test then] [test then else]), :doc "Evaluates `test`. If it returns logical true (and doesn't throw), expands\nto `then`, otherwise expands to `else`.", :type :macro} {:name compile-when, :file "taoensso/encore.cljc", :line 356, :arglists ([test & body]), :type :macro} {:name cond, :file "taoensso/encore.cljc", :line 327, :arglists ([& clauses]), :doc "Supersets `core/cond` functionality. Like `core/cond` but supports implicit\nfinal `else` clause, and special clause keywords for advanced behaviour:\n\n(cond\n  :let     [x   \"x\"] ; Establish let     binding/s for remaining forms\n  :binding [*x* \"x\"] ; Establish dynamic binding/s for remaining forms\n  :do      (println (str \"x value: \" x)) ; Eval expr for side-effects\n  :if-let  [y \"y\", z nil] \"y and z were both truthy\"\n  :if-some [y \"y\", z nil] \"y and z were both non-nil\"\n  :else    \"fallback value\")\n\n`:let` support inspired by <https://github.com/Engelberg/better-cond>.\nSimple, flexible way to eliminate deeply-nested control flow code.", :type :macro} {:name cond!, :file "taoensso/encore.cljc", :line 344, :arglists ([& clauses]), :doc "Like `cond` but throws on non-match like `case` and `condp`.\n", :type :macro} {:name conj-some, :file "taoensso/encore.cljc", :line 1475, :arglists ([] [coll] [coll x] [coll x & more]), :doc "Conjoins each non-nil value.\n", :type :var} {:name conj-when, :file "taoensso/encore.cljc", :line 1481, :arglists ([] [coll] [coll x] [coll x & more]), :doc "Conjoins each truthy value.\n", :type :var} {:name const-str=, :file "taoensso/encore.cljc", :line 3040, :arglists ([s1 s2]), :doc "Constant-time string equality checker.\nUseful to prevent timing attacks, etc.", :type :var} {:name contains-in?, :file "taoensso/encore.cljc", :line 1735, :arglists ([coll ks k] [coll ks]), :type :var} {:name convey-reduced, :file "taoensso/encore.cljc", :line 1033, :arglists ([x]), :type :var} {:name count-words, :file "taoensso/encore.cljc", :line 3019, :arglists ([s]), :type :var} {:name counter, :file "taoensso/encore.cljc", :line 4750, :arglists ([] [init]), :doc "Returns a fast atomic `Counter` with `init` initial integer value with:\n- @counter           => Return current val\n- (counter)          => Add 1 and return old val\n- (counter n)        => Add n and return old val\n- (counter action n) => Experimental, action ∈\n    {:add :set :set-get :get-set :get-add :add-get}.", :type :var} {:name declare-remote, :file "taoensso/encore.cljc", :line 477, :arglists ([& syms]), :doc "Declares given ns-qualified symbols, preserving metadata.\nClj only. Useful for circular dependencies.", :type :macro} {:name def*, :file "taoensso/encore.cljc", :line 423, :arglists ([sym & args]), :doc "Like `core/def` but supports attrs map.\n", :type :macro} {:name defalias, :file "taoensso/encore.cljc", :line 585, :arglists ([src] [alias src] [alias src alias-attrs] [alias src alias-attrs alias-body]), :doc "Defines a local alias for the var identified by given qualified\nsource symbol: (defalias my-map clojure.core/map), etc.\n\nSource var's metadata will be preserved (docstring, arglists, etc.).\nChanges to Clj source var's value will also be applied to alias.\nSee also `defaliases`.", :type :macro} {:name defaliases, :file "taoensso/encore.cljc", :line 635, :arglists ([{:keys [alias src attrs body]} ...]), :doc "Bulk version of `defalias`.\nTakes source symbols or {:keys [alias src attrs body]} maps:\n  (defaliases\n    {:alias my-map, :src map, :attrs {:doc \"My `map` alias\"}}\n    {:alias my-vec, :src vec, :attrs {:doc \"My `vec` alias\"}})", :type :macro} {:name default-timeout-impl_, :file "taoensso/encore.cljc", :line 6165, :doc "Simple one-timeout timeout implementation provided by platform timer.\nO(logn) add, O(1) cancel, O(1) tick. Fns must be non-blocking or cheap.\nSimilar efficiency to core.async timers (binary heap vs DelayQueue).", :type :var} {:name defn-cached, :file "taoensso/encore.cljc", :line 4467, :arglists ([sym cache-opts & body]), :doc "Defines a cached function.\nLike (def <sym> (cache <cache-opts> <body...>)), but preserves\n:arglists (arity) metadata as with `defn`:\n\n  (defn-cached ^:private my-fn {:ttl-ms 500}\n    \"Does something interesting, caches resultes for 500 msecs\"\n    [n]\n    (rand-int n))", :type :macro} {:name defonce, :file "taoensso/encore.cljc", :line 433, :arglists ([sym & args]), :doc "Like `core/defonce` but supports docstring and attrs map.\n", :type :macro} {:name defstub, :file "taoensso/encore.cljc", :line 6008, :arglists ([stub-sym & more] [stub-sym]), :doc "Experimental, subject to change without notice!!\nDeclares a stub var that can be initialized from any namespace with\n`unstub-<stub-name>`.\n\nDecouples a var's declaration (location) and its initialization (value).\nUseful for defining vars in a shared ns from elsewhere (e.g. a private\nor cyclic ns).", :type :macro} {:name deprecated, :file "taoensso/encore.cljc", :line 6732, :arglists ([& body]), :doc "Elides body when `taoensso.elide-deprecated` JVM property or\n`TAOENSSO_ELIDE_DEPRECATED` environment variable is ∈ #{\"true\" \"TRUE\"}.", :type :macro} {:name derefable?, :file "taoensso/encore.cljc", :line 755, :arglists ([x]), :type :var} {:name dissoc-in, :file "taoensso/encore.cljc", :line 1743, :arglists ([m ks dissoc-k] [m ks dissoc-k & more] [m ks]), :type :var} {:name distinct-elements?, :file "taoensso/encore.cljc", :line 1545, :arglists ([x]), :type :var} {:name doto-cond, :file "taoensso/encore.cljc", :line 454, :arglists ([[sym x] & clauses]), :doc "Cross between `doto`, `cond->` and `as->`.\n", :type :macro} {:name editable?, :file "taoensso/encore.cljc", :line 753, :arglists ([x]), :type :var} {:name encore-version, :file "taoensso/encore.cljc", :line 125, :doc "See `assert-min-encore-version`\n", :type :var} {:name ensure-set, :file "taoensso/encore.cljc", :line 1390, :arglists ([x]), :type :var} {:name ensure-vec, :file "taoensso/encore.cljc", :line 1389, :arglists ([x]), :type :var} {:name error?, :file "taoensso/encore.cljc", :line 785, :arglists ([x]), :doc "Returns true iff given platform error (`Throwable` or `js/Error`).\n", :type :var} {:name exp-backoff, :file "taoensso/encore.cljc", :line 2223, :arglists ([n-attempt] [n-attempt {:keys [min max factor], :or {factor 1000}}]), :doc "Returns binary exponential backoff value for n<=36.\n", :type :var} {:name filter-keys, :file "taoensso/encore.cljc", :line 1642, :arglists ([key-pred m]), :doc "Returns given ?map, retaining only keys for which (key-pred <key>) is truthy.\n", :type :var} {:name filter-vals, :file "taoensso/encore.cljc", :line 1650, :arglists ([val-pred m]), :doc "Returns given ?map, retaining only keys for which (val-pred <val>) is truthy.\n", :type :var} {:name finite-num?, :file "taoensso/encore.cljc", :line 820, :arglists ([x]), :doc "Returns true iff given a number (of standard type) that is:\nfinite (excl. NaN and infinities).", :type :var} {:name float?, :file "taoensso/encore.cljc", :line 852, :arglists ([x]), :doc "Returns true iff given a number (of standard type) that is:\na fixed-precision floating-point (incl. NaN and infinities).", :type :var} {:name fmemoize, :file "taoensso/encore.cljc", :line 4157, :arglists ([f]), :doc "For Clj: fastest possible memoize. Non-racey, 0-7 arity only.\nFor Cljs: same as `core/memoize`.", :type :var} {:name force-ref, :file "taoensso/encore.cljc", :line 806, :arglists ([x]), :doc "Like `force` for refs.\n", :type :var} {:name force-var, :file "taoensso/encore.cljc", :line 807, :arglists ([x]), :doc "Like `force` for vars.\n", :type :var} {:name format, :file "taoensso/encore.cljc", :line 2962, :arglists ([fmt & args]), :doc "Like `core/format` but:\n* Returns \"\" when fmt is nil rather than throwing an NPE.\n* Formats nil as \"nil\" rather than \"null\".\n* Provides ClojureScript support via goog.string.format (this has fewer\n  formatting options than Clojure's `format`!).", :type :var} {:name format*, :file "taoensso/encore.cljc", :line 2950, :arglists ([fmt args] [xform fmt args]), :type :var} {:name format-inst, :file "taoensso/encore.cljc", :line 2592, :arglists ([inst]), :doc "Takes a platform instant (`java.time.Instant` or `js/Date`) and\nreturns a formatted human-readable string in `ISO8601` format\n(`YYYY-MM-DDTHH:mm:ss.sssZ`), e.g. \"2011-12-03T10:15:130Z\".", :type :var} {:name format-inst-fn, :file "taoensso/encore.cljc", :line 2534, :arglists ([] [{:keys [formatter]}]), :doc "Experimental, subject to change without notice.\n\nReturns a (fn format [instant]) that:\n  - Takes a platform instant (`java.time.Instant` or `js/Date`).\n  - Returns a formatted human-readable instant string.\n\nOptions:\n  `:formatter`\n    Clj:  `java.time.format.DateTimeFormatter`\n    Cljs: `goog.i18n.DateTimeFormat`\n\n    Defaults to `ISO8601` formatter (`YYYY-MM-DDTHH:mm:ss.sssZ`),\n    e.g.: \"2011-12-03T10:15:130Z\".\n\n  `:zone` (Clj only) `java.time.ZoneOffset` (defaults to UTC).\n   Note that zone may be ignored by some `DateTimeFormatter`s,\n   including the default (`DateTimeFormatter/ISO_INSTANT`)!", :type :var} {:name format-nsecs, :file "taoensso/encore.cljc", :line 3098, :arglists ([nanosecs]), :doc "Returns given nanoseconds (long) as formatted human-readable string.\nExample outputs: \"1.00m\", \"4.20s\", \"340ms\", \"822μs\", etc.", :type :var} {:name format-query-string, :file "taoensso/encore.cljc", :line 6639, :arglists ([m]), :type :var} {:name future*, :file "taoensso/encore.cljc", :line 5317, :arglists ([form] [executor-service form]), :doc "Experimental, subject to change without notice!\nLike `future` but supports use of given custom\n`java.util.concurrent.ExecutorService`.\n\nWill default to using JVM 21+ virtual threads when possible,\notherwise an unbounded fixed daemon thread pool.\n\nSee also `future-call`, `virtual-executor`, `pool-executor`.", :type :macro} {:name get*, :file "taoensso/encore.cljc", :line 1453, :arglists ([m k] [m k not-found] [m k1 k2 not-found] [m k1 k2 k3 not-found]), :doc "Macro version of `get` that:\n\n  1. Avoids unnecessary evaluation of `not-found`.\n     Useful when `not-found` is expensive or contains side-effects.\n\n  2. Supports multiple prioritized keys (k1, k2, etc.). Returns val for\n     first key that exists in map. Useful for key aliases or fallbacks.\n\nEquivalent to:\n\n  (cond\n    (contains? m k1) (get m k1)\n    (contains? m k2) (get m k2)\n    ...\n    :else            not-found)", :type :macro} {:name get-env, :file "taoensso/encore.cljc", :line 5887, :arglists ([{:keys [as default return], :or {as :str, return :value}} spec]), :doc "Flexible cross-platform environmental value util.\n\nGiven a compile-time id (keyword/string) or vector of desc-priority\nids, parse and return the first of the following that exists, or nil:\n  1. JVM         property value   for id\n  2. Environment variable value   for id\n  3. Classpath   resource content for id\n\nIds may include optional platform tag for auto replacement, e.g.:\n  `<.platform>` -> \".clj\", \".cljs\", or nil\n\nClj/s: if resulting value is a single symbol, it will be evaluated.\nCljs:     resulting value will be embedded in code during macro expansion!\n\nOptions:\n  `:as`      - Parse encountered value as given type ∈ #{:str :bool :edn}  (default `:str`).\n  `:default` - Fallback to return unparsed if no value found during search (default `nil`).\n  `:return`  - Return type ∈ #{:value :map :explain} (default `:value`).\n               Use `:explain` to verify/debug, handy for tests/REPL!\n\nExample:\n  (get-env {:as :edn} [:my-app/id1<.platform> :my-app/id2]) will parse\n  and return the first of the following that exists, or nil:\n\n    id1 with platform:\n      `my-app.id1.clj` JVM         property value\n      `MY_APP_id1_CLJ` environment variable value\n      `my-app.id1.clj` classpath   resource content\n\n    id1 without platform:\n      `my-app.id1`     JVM         property value\n      `MY_APP_id1`     environment variable value\n      `my-app.id1`     classpath   resource content\n\n    id2 with    platform: ...\n    id2 without platform: ...", :type :macro} {:name get-win-loc, :file "taoensso/encore.cljc", :line 6282, :arglists ([]), :doc "Returns current window location as\n{:keys [href protocol hostname host pathname search hash]}.", :type :var} {:name get1, :file "taoensso/encore.cljc", :line 1444, :arglists ([m k] [m k not-found] [m k1 k2 not-found] [m k1 k2 k3 not-found]), :doc "Like `get` but returns val for first key that exists in map.\nUseful for key aliases or fallbacks. See also `get*`.", :type :var} {:name have-core-async?, :file "taoensso/encore.cljc", :line 2354, :doc "Is `clojure.core.async` present (not necessarily loaded)?\n", :type :var} {:name ident?, :file "taoensso/encore.cljc", :line 772, :arglists ([x]), :type :var} {:name identical-kw?, :file "taoensso/encore.cljc", :line 466, :arglists ([x y]), :doc "Returns true iff two keywords are identical.\nPortable and maximally fast.\n  For Clj  this expands to: `(identical?         x y)`\n  For Cljs this expands to: `(keyword-identical? x y)`", :type :macro} {:name if-clj, :file "taoensso/encore.cljc", :line 360, :arglists ([then & [else]]), :type :macro} {:name if-cljs, :file "taoensso/encore.cljc", :line 361, :arglists ([then & [else]]), :type :macro} {:name if-let, :file "taoensso/encore.cljc", :line 144, :arglists ([bindings then] [bindings then else]), :doc "Supersets `core/if-let` functionality. Like `core/if-let` but supports multiple\nbindings, and unconditional bindings with `:let`:\n\n(if-let [x       (rand-nth [:x1 :x2 false nil    ])  ; Bind truthy x, or -> `else`\n         :let [y (rand-nth [:y1 :y2 false nil x  ])] ; Bind any    y\n         z       (rand-nth [:z1 :z2 false nil x y])  ; Bind truthy z, or -> `else`\n         ]\n  [:then-clause x y z]\n  [:else-clause])", :type :macro} {:name if-not, :file "taoensso/encore.cljc", :line 196, :arglists ([test-or-bindings then] [test-or-bindings then else]), :doc "Supersets `core/if-not` functionality.\nSame as `encore/if-let` with `then` `and `else` forms swapped.", :type :macro} {:name if-some, :file "taoensso/encore.cljc", :line 170, :arglists ([bindings then] [bindings then else]), :doc "Supersets `core/if-some` functionality. Like `core/if-some` but supports multiple\nbindings, and unconditional bindings with `:let`:\n\n(if-some [x       (rand-nth [:x1 :x2 false nil    ])  ; Bind non-nil x, or -> `else`\n          :let [y (rand-nth [:y1 :y2 false nil x  ])] ; Bind any     y\n          z       (rand-nth [:z1 :z2 false nil x y])  ; Bind non-nil z, or -> `else`\n          ]\n  [:then-clause x y z]\n  [:else-clause])", :type :macro} {:name indexed?, :file "taoensso/encore.cljc", :line 749, :arglists ([x]), :type :var} {:name inst->udt, :file "taoensso/encore.cljc", :line 2462, :arglists ([inst]), :doc "Returns given `js/Date` as milliseconds since Unix epoch.\n", :type :var} {:name inst?, :file "taoensso/encore.cljc", :line 2410, :arglists ([x]), :doc "Returns true iff given platform instant (`java.time.Instant` or `js/Date`).\n", :type :var} {:name instance!, :file "taoensso/encore.cljc", :line 705, :arglists ([class arg] [class arg {:keys [msg context param ...]}] [class arg & {:keys [msg context param ...]}]), :doc "If (instance? class arg) is true, returns arg.\nOtherwise throws runtime ex-info.", :type :macro} {:name int?, :file "taoensso/encore.cljc", :line 834, :arglists ([x]), :doc "Returns true iff given a number (of standard type) that is:\na fixed-precision integer.", :type :var} {:name interleave-all, :file "taoensso/encore.cljc", :line 1777, :arglists ([] [c1] [c1 c2] [c1 c2 & colls]), :doc "Like `interleave` but includes all items (i.e. stops when the longest\nrather than shortest coll has been consumed).", :type :var} {:name into!, :file "taoensso/encore.cljc", :line 1580, :arglists ([to!] [to! from] [to! xform from]), :doc "Like `into` but assumes `to!` is a transient, and doesn't call\n`persist!` when done. Useful as a performance optimization in some cases.", :type :var} {:name into-all, :file "taoensso/encore.cljc", :line 1555, :arglists ([to from] [to from & more]), :doc "Like `into` but supports multiple \"from\"s.\n", :type :var} {:name into-str, :file "taoensso/encore.cljc", :line 3022, :arglists ([& xs]), :doc "Simple Hiccup-like string templating to complement Tempura.\n", :type :var} {:name invert-map, :file "taoensso/encore.cljc", :line 1608, :arglists ([m]), :doc "Returns given ?map with keys and vals inverted, dropping non-unique vals!\n", :type :var} {:name invert-map!, :file "taoensso/encore.cljc", :line 1616, :arglists ([m]), :doc "Like `invert-map` but throws on non-unique vals.\n", :type :var} {:name ITimeoutFuture, :file "taoensso/encore.cljc", :line 6173, :type :protocol, :members ({:name tf-cancel!, :arglists ([_]), :doc "Returns true iff the timeout was successfully cancelled (i.e. was previously pending).\n", :type :var} {:name tf-cancelled?, :arglists ([_]), :doc "Returns true iff the timeout is cancelled.\n", :type :var} {:name tf-done?, :arglists ([_]), :doc "Returns true iff the timeout is not pending (i.e. has a completed result or is cancelled).\n", :type :var} {:name tf-pending?, :arglists ([_]), :doc "Returns true iff the timeout is pending.\n", :type :var} {:name tf-poll, :arglists ([_]), :doc "Returns :timeout/pending, :timeout/cancelled, or the timeout's completed result.\n", :type :var} {:name tf-state, :arglists ([_]), :doc "Returns a map of timeout's public state.\n", :type :var})} {:name ITimeoutImpl, :file "taoensso/encore.cljc", :line 6155, :type :protocol, :members ({:name -schedule-timeout, :arglists ([_ msecs f]), :type :var})} {:name keys-by, :file "taoensso/encore.cljc", :line 1690, :arglists ([f coll]), :doc "Returns {(f x) x} ?map for xs in `coll`.\n", :type :var} {:name ks-nnil?, :file "taoensso/encore.cljc", :line 1700, :arglists ([ks m]), :type :var} {:name ks<=, :file "taoensso/encore.cljc", :line 1703, :arglists ([ks m]), :type :var} {:name ks=, :file "taoensso/encore.cljc", :line 1701, :arglists ([ks m]), :type :var} {:name ks>=, :file "taoensso/encore.cljc", :line 1702, :arglists ([ks m]), :type :var} {:name lazy-seq?, :file "taoensso/encore.cljc", :line 761, :arglists ([x]), :type :var} {:name log, :file "taoensso/encore.cljc", :line 6275, :type :var} {:name logf, :file "taoensso/encore.cljc", :line 6278, :arglists ([fmt & xs]), :type :var} {:name logp, :file "taoensso/encore.cljc", :line 6276, :arglists ([& xs]), :type :var} {:name map-entry, :file "taoensso/encore.cljc", :line 1364, :arglists ([k v]), :doc "Returns a `MapEntry` with given key and value.\n", :type :var} {:name map-keys, :file "taoensso/encore.cljc", :line 1626, :arglists ([key-fn m]), :doc "Returns given ?map with (key-fn <key>) keys.\n", :type :var} {:name map-vals, :file "taoensso/encore.cljc", :line 1634, :arglists ([val-fn m]), :doc "Returns given ?map with (val-fn <val>) vals.\n", :type :var} {:name mapply, :file "taoensso/encore.cljc", :line 1550, :arglists ([f & args]), :doc "Like `apply` but calls `seq-kvs` on final arg.\n", :type :var} {:name max*, :file "taoensso/encore.cljc", :line 2144, :arglists ([n1 n2]), :type :macro} {:name max-long, :file "taoensso/encore.cljc", :line 897, :type :var} {:name memoize, :file "taoensso/encore.cljc", :line 4433, :arglists ([f] [ttl-ms f] [size ttl-ms f]), :doc "Alternative way to call `cache`, provided mostly for back compatibility.\nSee `cache` docstring for details.", :type :var} {:name memoize-last, :file "taoensso/encore.cljc", :line 4119, :arglists ([f]), :doc "Like `core/memoize` but only caches the given fn's latest input.\nSpeeds repeated fn calls with the same arguments.\nGreat for ReactJS render fn caching, etc.", :type :var} {:name merge, :file "taoensso/encore.cljc", :line 1894, :arglists ([] [m1] [m1 m2] [m1 m2 m3] [m1 m2 m3 & more]), :doc "Like `core/merge` but:\n- Supports `:merge/dissoc` vals.\n- Often faster, with much better worst-case performance.", :type :var} {:name merge-meta, :file "taoensso/encore.cljc", :line 2255, :arglists ([x m]), :type :var} {:name merge-nx, :file "taoensso/encore.cljc", :line 1937, :arglists ([] [m1] [m1 m2] [m1 m2 m3] [m1 m2 m3 & more]), :doc "Like `core/merge` but:\n- Preserves existing values, e.g. (merge-nx <user-opts> <defaults>).\n- Supports `:merge/dissoc` vals.\n- Often faster, with much better worst-case performance.", :type :var} {:name merge-url-with-query-string, :file "taoensso/encore.cljc", :line 6688, :arglists ([url m]), :type :var} {:name merge-with, :file "taoensso/encore.cljc", :line 1915, :arglists ([f] [f m1] [f m1 m2] [f m1 m2 m3] [f m1 m2 m3 & more]), :doc "Like `core/merge-with` but:\n- Supports `:merge/dissoc` vals.\n- Often faster, with much better worst-case performance.", :type :var} {:name min*, :file "taoensso/encore.cljc", :line 2143, :arglists ([n1 n2]), :type :macro} {:name min-long, :file "taoensso/encore.cljc", :line 898, :type :var} {:name ms, :file "taoensso/encore.cljc", :line 2605, :arglists ([opts] [& {:as opts, :keys [years months weeks days hours mins secs msecs ms]}]), :doc "Returns ~number of milliseconds in period defined by given args.\n", :type :var} {:name ms->secs, :file "taoensso/encore.cljc", :line 2604, :arglists ([ms]), :type :var} {:name msecs, :file "taoensso/encore.cljc", :line 2638, :arglists ([opts] [& {:as opts, :keys [years months weeks days hours mins secs msecs ms]}]), :doc "Macro version of `ms`.\n", :type :macro} {:name name-filter, :file "taoensso/encore.cljc", :line 3235, :arglists ([spec]), :doc "Given filter `spec`, returns a compiled (fn match? [x]) that:\n  - Takes a string, keyword, symbol, or namespace.\n  - Returns true iff input matches spec.\n\nUseful for efficiently filtering namespaces, class names, id kws, etc.\n\nSpec may be:\n  - A namespace     to match exactly\n  - A regex pattern to match\n  - A str/kw/sym    to match, with \"*\" and \"(.*)\" as wildcards:\n    \"foo.*\"   will match \"foo.bar\"\n    \"foo(.*)\" will match \"foo.bar\" and \"foo\"\n    If you need literal \"*\"s, use #\"\\*\" regex instead.\n\n  - A set/vector of the above to match any\n  - A map, {:allow <spec> :disallow <spec>} with specs as the above:\n    If present,    `:allow` spec MUST     match, AND\n    If present, `:disallow` spec MUST NOT match.\n\nSpec examples:\n  *ns*, #{}, \"*\", \"foo.bar\", \"foo.bar.*\", \"foo.bar(.*)\",\n  #{\"foo\" \"bar.*\"}, #\"(foo1|foo2)\\.bar\",\n  {:allow #{\"foo\" \"bar.*\"} :disallow #{\"foo.*.bar.*\"}}.", :type :var} {:name name-with-attrs, :file "taoensso/encore.cljc", :line 407, :arglists ([sym args] [sym args attrs-merge]), :doc "Given a symbol and args, returns [<name-with-attrs-meta> <args> <attrs>]\nwith support for `defn` style `?docstring` and `?attrs-map`.", :type :var} {:name nameable?, :file "taoensso/encore.cljc", :line 773, :arglists ([x]), :type :var} {:name named?, :file "taoensso/encore.cljc", :line 751, :arglists ([x]), :type :var} {:name nanoid, :file "taoensso/encore.cljc", :line 3673, :arglists ([] [len] [prefer-secure? len]), :doc "Returns a random \"Nano ID\" of given length, Ref. <https://github.com/ai/nanoid>.\nFaster, variable-length version of (rand-id-fn {:chars :nanoid}).\n126 bits of entropy with default length (21).\nSee also `uuid-str`, `rand-id-fn`.", :type :var} {:name nat-float?, :file "taoensso/encore.cljc", :line 879, :arglists ([x]), :type :var} {:name nat-int?, :file "taoensso/encore.cljc", :line 875, :arglists ([x]), :type :var} {:name nat-num?, :file "taoensso/encore.cljc", :line 871, :arglists ([x]), :type :var} {:name nblank-str?, :file "taoensso/encore.cljc", :line 782, :arglists ([x]), :type :var} {:name nblank?, :file "taoensso/encore.cljc", :line 783, :arglists ([x]), :type :var} {:name neg-float?, :file "taoensso/encore.cljc", :line 881, :arglists ([x]), :type :var} {:name neg-int?, :file "taoensso/encore.cljc", :line 877, :arglists ([x]), :type :var} {:name neg-num?, :file "taoensso/encore.cljc", :line 873, :arglists ([x]), :type :var} {:name nempty-str?, :file "taoensso/encore.cljc", :line 745, :arglists ([x]), :type :var} {:name nested-merge, :file "taoensso/encore.cljc", :line 1904, :arglists ([] [m1] [m1 m2] [m1 m2 m3] [m1 m2 m3 & more]), :doc "Like `core/merge` but:\n- Recursively merges nested maps.\n- Supports `:merge/dissoc` vals.\n- Often faster, with much better worst-case performance.", :type :var} {:name nested-merge-with, :file "taoensso/encore.cljc", :line 1925, :arglists ([f] [f m1] [f m1 m2] [f m1 m2 m3] [f m1 m2 m3 & more]), :doc "Like `core/merge-with` but:\n- Recursively merges nested maps.\n- Supports `:merge/dissoc` vals.\n- Often faster, with much better worst-case performance.", :type :var} {:name new-object, :file "taoensso/encore.cljc", :line 495, :arglists ([]), :type :macro} {:name newline, :file "taoensso/encore.cljc", :line 3296, :doc "Single system newline\n", :type :var} {:name newlines, :file "taoensso/encore.cljc", :line 3297, :doc "Double system newline\n", :type :var} {:name nneg?, :file "taoensso/encore.cljc", :line 867, :arglists ([x]), :type :var} {:name nnil, :file "taoensso/encore.cljc", :line 2267, :arglists ([] [x] [x y] [x y z] [x y z & more]), :doc "Returns first non-nil arg, or nil.\n", :type :var} {:name norm-str, :file "taoensso/encore.cljc", :line 2893, :arglists ([s] [norm-form s]), :doc "Returns normalized form of given string.\n`norm-form` is ∈ #{:nfc :nfkc :nfd :nfkd} (default `:nfc` as per W3C).", :type :var} {:name norm-word-breaks, :file "taoensso/encore.cljc", :line 3013, :arglists ([s]), :doc "Converts all word breaks of any form and length (including line breaks of any\nform, tabs, spaces, etc.) to a single regular space.", :type :var} {:name not-empty-coll, :file "taoensso/encore.cljc", :line 1524, :arglists ([x]), :type :var} {:name now-dt, :file "taoensso/encore.cljc", :line 2452, :arglists ([]), :doc "Returns current system instant as `js/Date`.\n", :type :var} {:name now-inst, :file "taoensso/encore.cljc", :line 2451, :arglists ([]), :doc "Returns current system instant as `js/Date`.\n", :type :var} {:name now-nano, :file "taoensso/encore.cljc", :line 2454, :doc "Returns current value of best-resolution time source as nanoseconds.\n", :type :var} {:name now-udt, :file "taoensso/encore.cljc", :line 2453, :arglists ([]), :doc "Returns current system insant as milliseconds since Unix epoch.\n", :type :var} {:name nzero-num?, :file "taoensso/encore.cljc", :line 869, :arglists ([x]), :type :var} {:name oget, :file "taoensso/encore.cljc", :line 1422, :arglists ([k] [o k] [o k not-found]), :doc "Like `get` for JS objects.\n", :type :var} {:name oget-in, :file "taoensso/encore.cljc", :line 1430, :arglists ([ks] [o ks] [o ks not-found]), :doc "Like `get-in` for JS objects.\n", :type :var} {:name oset, :file "taoensso/encore.cljc", :line 1393, :arglists ([o k v]), :doc "Like `assoc` for JS objects.\n", :type :var} {:name oset-in, :file "taoensso/encore.cljc", :line 1398, :arglists ([o ks v]), :doc "Experimental, subject to change without notice.\nLike `assoc-in` for JS objects.", :type :var} {:name parse-js-int, :file "taoensso/encore.cljc", :line 903, :arglists ([s]), :type :var} {:name parse-query-params, :file "taoensso/encore.cljc", :line 6663, :arglists ([s & [keywordize? encoding]]), :doc "Based on `ring-codec/form-decode`.\n", :type :var} {:name parse-version, :file "taoensso/encore.cljc", :line 2280, :arglists ([x]), :type :var} {:name path, :file "taoensso/encore.cljc", :line 3007, :arglists ([& parts]), :type :var} {:name perc, :file "taoensso/encore.cljc", :line 2213, :arglists ([n divisor]), :type :var} {:name pnum-complement, :file "taoensso/encore.cljc", :line 2134, :arglists ([pnum]), :type :var} {:name pnum?, :file "taoensso/encore.cljc", :line 883, :arglists ([x]), :doc "Returns true iff given number in unsigned unit proportion interval ∈ℝ[0,1].\n", :type :var} {:name pos-float?, :file "taoensso/encore.cljc", :line 880, :arglists ([x]), :type :var} {:name pos-int?, :file "taoensso/encore.cljc", :line 876, :arglists ([x]), :type :var} {:name pos-num?, :file "taoensso/encore.cljc", :line 872, :arglists ([x]), :type :var} {:name pow, :file "taoensso/encore.cljc", :line 2174, :arglists ([n exp]), :type :var} {:name pr, :file "taoensso/encore.cljc", :line 3370, :doc "Identical to `core/pr`.\n", :type :var} {:name pr-edn, :file "taoensso/encore.cljc", :line 3399, :arglists ([x]), :doc "Prints given arg to an edn string readable with `read-edn`.\n", :type :var} {:name pr-json, :file "taoensso/encore.cljc", :line 6705, :arglists ([x]), :doc "Returns given Cljs argument as JSON string.\n", :type :var} {:name preserve-reduced, :file "taoensso/encore.cljc", :line 1034, :arglists ([rf]), :doc "Public version of `core/preserving-reduced`.\n", :type :var} {:name print, :file "taoensso/encore.cljc", :line 3372, :doc "Identical to `core/print`.\n", :type :var} {:name println, :file "taoensso/encore.cljc", :line 3373, :doc "Identical to `core/println`.\n", :type :var} {:name prn, :file "taoensso/encore.cljc", :line 3371, :doc "Identical to `core/prn`.\n", :type :var} {:name pull-val!, :file "taoensso/encore.cljc", :line 4097, :arglists ([atom_ k] [atom_ k not-found]), :doc "Removes and returns value mapped to key:\n(let [a (atom {:k :v})]\n  [(pull-val! a :k) @a]) => [:v {}]", :type :var} {:name qb, :file "taoensso/encore.cljc", :line 6123, :arglists ([spec form & more] [spec form]), :doc "Simple util to benchmark/compare runtime of given form/s.\n\nRuns sets of laps for each given form, recording the total runtime of each set.\nReturns the the total runtime in msecs of the fastest set of laps for each form.\n\n  (quick-bench [<num-sets> <num-laps>] <form1> <form2> <...>) =>\n    [<total runtime msecs of fastest set of laps for form1>\n     <total runtime msecs of fastest set of laps for form2>\n     <...>]\n\n   Total number of runs for each form is: `num-sets` * `num-laps`\n\nIf omitted, the default `num-sets` is 6 (to include warmup):\n  (quick-bench <num-laps> <form1> <form2> <...>)\n\nExample (comparing runtime of `first` and `nth` against vector):\n  (let [v [:a]] (quick-bench 1e6 (first v) (nth v 0))) => [67.43 39.05]", :type :macro} {:name qualified-ident?, :file "taoensso/encore.cljc", :line 775, :arglists ([x]), :type :var} {:name qualified-keyword?, :file "taoensso/encore.cljc", :line 779, :arglists ([x]), :type :var} {:name qualified-symbol?, :file "taoensso/encore.cljc", :line 777, :arglists ([x]), :type :var} {:name queue, :file "taoensso/encore.cljc", :line 1378, :arglists ([coll] []), :doc "Returns a new `PersistentQueue`.\n", :type :var} {:name queue*, :file "taoensso/encore.cljc", :line 1385, :arglists ([& items]), :doc "Returns a new `PersistentQueue` given items.\n", :type :var} {:name queue?, :file "taoensso/encore.cljc", :line 1371, :arglists ([x]), :doc "Returns true iff given a `PersistentQueue`.\n", :type :var} {:name quick-bench, :file "taoensso/encore.cljc", :line 6091, :arglists ([spec form & more] [spec form]), :doc "Simple util to benchmark/compare runtime of given form/s.\n\nRuns sets of laps for each given form, recording the total runtime of each set.\nReturns the the total runtime in msecs of the fastest set of laps for each form.\n\n  (quick-bench [<num-sets> <num-laps>] <form1> <form2> <...>) =>\n    [<total runtime msecs of fastest set of laps for form1>\n     <total runtime msecs of fastest set of laps for form2>\n     <...>]\n\n   Total number of runs for each form is: `num-sets` * `num-laps`\n\nIf omitted, the default `num-sets` is 6 (to include warmup):\n  (quick-bench <num-laps> <form1> <form2> <...>)\n\nExample (comparing runtime of `first` and `nth` against vector):\n  (let [v [:a]] (quick-bench 1e6 (first v) (nth v 0))) => [67.43 39.05]", :type :macro} {:name rand-bytes, :file "taoensso/encore.cljc", :line 3574, :arglists ([prefer-secure? size]), :doc "Returns a random byte array of given size.\n", :type :var} {:name rand-id-fn, :file "taoensso/encore.cljc", :line 3593, :arglists ([{:keys [chars len rand-bytes-fn], :or {chars :nanoid, len 21, rand-bytes-fn (partial rand-bytes true)}}]), :doc "Returns a (fn rand-id []) that returns random id strings.\nOptions include:\n  `:chars`         - ∈ #{<string> :nanoid :alphanumeric :no-look-alikes ...}\n  `:len`           - Length of id strings to generate\n  `:rand-bytes-fn` - Optional (fn [size]) to return random byte array of given size\n\nSee also `uuid-str`, `nano-id`.", :type :var} {:name rate-limiter, :file "taoensso/encore.cljc", :line 4536, :arglists ([spec] [opts spec]), :doc "Takes a spec of form\n  [           [<n-max-reqs> <msecs-window>] ...] or ; Unnamed limits\n  {<limit-id> [<n-max-reqs> <msecs-window>]}        ;   Named limits\nand returns stateful (fn a-rate-limiter [] [req-id] [command req-id]).\n\nCall the returned limiter fn with a request id (any Clojure value!) to\nenforce limits independently for each id.\n\nFor example, (limiter-fn <ip-address-string>) will return:\n  - Falsey when    allowed (all limits pass for given IP), or\n  - Truthy when disallowed (any limits fail for given IP):\n    [<worst-limit-id> <worst-backoff-msecs> {<limit-id> <backoff-msecs>}]\n\nOr call the returned limiter fn with an extra command argument:\n  (limiter-fn :rl/peek  <req-id) - Check limits WITHOUT incrementing count\n  (limiter-fn :rl/reset <req-id) - Reset all limits for given req-id", :type :var} {:name rcompare, :file "taoensso/encore.cljc", :line 4915, :arglists ([x y]), :doc "Reverse comparator.\n", :type :var} {:name re-pattern?, :file "taoensso/encore.cljc", :line 763, :arglists ([x]), :type :var} {:name read-edn, :file "taoensso/encore.cljc", :line 3418, :arglists ([s] [{:keys [readers default], :as opts, :or {readers (clojure.core/deref cljs.reader/*tag-table*), default (clojure.core/deref cljs.reader/*default-data-reader-fn*)}}]), :doc "Reads given edn string to return a Clj/s value.\n", :type :var} {:name read-json, :file "taoensso/encore.cljc", :line 6710, :arglists ([s] [kw-keys? s]), :doc "Reads given JSON string to return a Cljs value.\n", :type :var} {:name reassoc-some, :file "taoensso/encore.cljc", :line 1507, :arglists ([m k v] [m m-kvs] [m k v & kvs]), :doc "Assocs each kv to given ?map if its value is nil, otherwise dissocs it.\n", :type :var} {:name reduce-indexed, :file "taoensso/encore.cljc", :line 1058, :arglists ([rf init coll]), :doc "Like `reduce` but takes (rf [acc idx in]) with idx as in `map-indexed`.\nAs `reduce-kv` against vector coll, but works on any seqable coll type.", :type :var} {:name reduce-interleave-all, :file "taoensso/encore.cljc", :line 1234, :arglists ([rf init colls]), :doc "Reduces sequence of elements interleaved from given `colls`.\n(reduce-interleave-all conj [] [[:a :b] [1 2 3]]) => [:a 1 :b 2 3]", :type :var} {:name reduce-kvs, :file "taoensso/encore.cljc", :line 1043, :arglists ([rf init kvs]), :doc "Like `reduce-kv` but takes a flat sequence of kv pairs.\n", :type :var} {:name reduce-multi, :file "taoensso/encore.cljc", :line 1184, :arglists ([rf init coll] [rf1 init1 rf2 init2 coll] [rf1 init1 rf2 init2 rf3 init3 coll]), :doc "Like `reduce` but supports separate simultaneous accumulators\nas a micro-optimization when reducing a large collection multiple\ntimes.", :type :var} {:name reduce-n, :file "taoensso/encore.cljc", :line 1049, :arglists ([rf init end] [rf init start end] [rf init start end step]), :doc "No longer useful with Clojure 1.7+, just use (reduce f init (range ...)).\n", :type :var} {:name reduce-obj, :file "taoensso/encore.cljc", :line 1070, :arglists ([f init o]), :doc "Like `reduce-kv` but for JavaScript objects.\n", :type :var} {:name reduce-top, :file "taoensso/encore.cljc", :line 4957, :arglists ([n rf init coll] [n keyfn rf init coll] [n keyfn cmp rf init coll]), :doc "Reduces the top `n` items from `coll` of N items.\nClj impln is O(N.logn) vs O(N.logN) for (take n (sort-by ...)).", :type :var} {:name reduce-zip, :file "taoensso/encore.cljc", :line 1138, :arglists ([rf init xs ys] [rf init xs ys not-found]), :doc "Reduces given sequential xs and ys as pairs (e.g. key-val pairs).\nCalls (rf acc x y) for each sequential pair.\n\nUseful, among other things, as a more flexible version of `zipmap`.", :type :var} {:name remove-keys, :file "taoensso/encore.cljc", :line 1658, :arglists ([key-pred m]), :doc "Returns given ?map, removing keys for which (key-pred <key>) is truthy.\n", :type :var} {:name remove-vals, :file "taoensso/encore.cljc", :line 1659, :arglists ([val-pred m]), :doc "Returns given ?map, removing keys for which (val-pred <val>) is truthy.\n", :type :var} {:name rename-keys, :file "taoensso/encore.cljc", :line 1660, :arglists ([replacements m]), :doc "Returns a map like the one given, replacing keys using\ngiven {<old-new> <new-key>} replacements. O(min(n_replacements, n_m)).", :type :var} {:name repeatedly-into, :file "taoensso/encore.cljc", :line 1570, :arglists ([coll n f]), :doc "Like `repeatedly` but faster and `conj`s items into given collection.\n", :type :var} {:name reset!?, :file "taoensso/encore.cljc", :line 3933, :arglists ([atom_ val]), :doc "Atomically swaps value of `atom_` to `val` and returns\ntrue iff the atom's value changed. See also `reset-in!?`.", :type :var} {:name reset-in!, :file "taoensso/encore.cljc", :line 3903, :arglists ([atom_ val] [atom_ ks val] [atom_ ks not-found val]), :doc "Like `reset!` but supports `update-in` semantics, returns <old-key-val>.\n", :type :var} {:name reset-in!?, :file "taoensso/encore.cljc", :line 3917, :arglists ([atom_ val] [atom_ ks val] [atom_ ks not-found val]), :doc "Like `reset-in!` but returns true iff the atom's value changed.\n", :type :var} {:name reset-val!, :file "taoensso/encore.cljc", :line 3909, :arglists ([atom_ k val] [atom_ k not-found val]), :doc "Like `reset-in!` but optimized for single-key case.\n", :type :var} {:name reset-val!?, :file "taoensso/encore.cljc", :line 3923, :arglists ([atom_ k new-val]), :doc "Like `reset-in!?` but optimized for single-key case.\n", :type :var} {:name revery-kv?, :file "taoensso/encore.cljc", :line 1110, :arglists ([pred coll]), :type :var} {:name revery?, :file "taoensso/encore.cljc", :line 1103, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rfirst, :file "taoensso/encore.cljc", :line 1092, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rfirst-kv, :file "taoensso/encore.cljc", :line 1098, :arglists ([pred coll]), :type :var} {:name rnum?, :file "taoensso/encore.cljc", :line 888, :arglists ([x]), :doc "Returns true iff given number in signed unit proportion interval ∈ℝ[-1,1].\n", :type :var} {:name rolling-counter, :file "taoensso/encore.cljc", :line 4825, :arglists ([msecs]), :doc "Experimental, subject to change without notice.\nReturns a RollingCounter that you can:\n  - Invoke to increment count in last `msecs` window and return RollingCounter.\n  - Deref  to return    count in last `msecs` window.", :type :var} {:name rolling-vector, :file "taoensso/encore.cljc", :line 4844, :arglists ([nmax] [nmax {:keys [gc-every init-val], :or {gc-every 16000.0}}]), :doc "Returns a stateful fn of 2 arities:\n  [ ] => Returns current sub/vector in O(1).\n  [x] => Adds `x` to right of sub/vector, maintaining length <= `nmax`.\n         Returns current sub/vector.\n\nUseful for maintaining limited-length histories, etc.\nSee also `rolling-list` (Clj only).", :type :var} {:name round, :file "taoensso/encore.cljc", :line 2177, :arglists ([n] [kind n] [kind precision n]), :doc "General purpose rounding util.\nReturns given number `n` rounded according to given options:\n  - `kind`      - ∈ #{:round :floor :ceil :trunc}     (default `:round`)\n  - `precision` - Number of decimal places to include (default `nil` => none)", :type :var} {:name round0, :file "taoensso/encore.cljc", :line 2214, :arglists ([n]), :type :var} {:name round1, :file "taoensso/encore.cljc", :line 2215, :arglists ([n]), :type :var} {:name round2, :file "taoensso/encore.cljc", :line 2216, :arglists ([n]), :type :var} {:name round3, :file "taoensso/encore.cljc", :line 2217, :arglists ([n]), :type :var} {:name round4, :file "taoensso/encore.cljc", :line 2218, :arglists ([n]), :type :var} {:name roundn, :file "taoensso/encore.cljc", :line 2219, :arglists ([precision n]), :type :var} {:name rsome, :file "taoensso/encore.cljc", :line 1081, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rsome-kv, :file "taoensso/encore.cljc", :line 1087, :arglists ([pred coll]), :type :var} {:name run!, :file "taoensso/encore.cljc", :line 1074, :arglists ([proc coll]), :type :var} {:name run-kv!, :file "taoensso/encore.cljc", :line 1075, :arglists ([proc m]), :type :var} {:name run-kvs!, :file "taoensso/encore.cljc", :line 1076, :arglists ([proc kvs]), :type :var} {:name run-obj!, :file "taoensso/encore.cljc", :line 1077, :arglists ([proc obj]), :type :var} {:name satisfies!, :file "taoensso/encore.cljc", :line 685, :arglists ([protocol arg] [protocol arg {:keys [msg context param ...]}] [protocol arg & {:keys [msg context param ...]}]), :doc "If (satisfies? protocol arg) is true, returns arg.\nOtherwise throws runtime ex-info.", :type :macro} {:name satisfies?, :file "taoensso/encore.cljc", :line 675, :arglists ([protocol x]), :doc "Faster `satisfies?` to work around CLJ-1814 until a proper upstream fix.\nMay cache, so possibly inappropriate for dynamic work.", :type :macro} {:name sayf, :file "taoensso/encore.cljc", :line 6279, :arglists ([fmt & xs]), :type :var} {:name sayp, :file "taoensso/encore.cljc", :line 6277, :arglists ([& xs]), :type :var} {:name sb-append, :file "taoensso/encore.cljc", :line 2719, :arglists ([str-builder x] [str-builder x & more]), :doc "Appends given string/s to given string builder. See also `str-builder.`\n", :type :var} {:name sb-length, :file "taoensso/encore.cljc", :line 2713, :arglists ([sb]), :doc "Returns given string builder's current length (character count).\n", :type :var} {:name secs, :file "taoensso/encore.cljc", :line 2625, :arglists ([opts] [& {:as opts, :keys [years months weeks days hours mins secs msecs ms]}]), :doc "Returns ~number of seconds in period defined by given args.\n", :type :var} {:name secs->ms, :file "taoensso/encore.cljc", :line 2603, :arglists ([secs]), :type :var} {:name select-nested-keys, :file "taoensso/encore.cljc", :line 1974, :arglists ([src-map key-spec]), :doc "Like `select-keys` but supports nested key spec:\n\n  (select-nested-keys\n    {:a :A :b :B :c {:c1 :C1 :c2 :C2} :d :D} ; `src-map`\n    [:a {:c [:c1], :d [:d1 :d2]}]) ; `key-spec`\n\n    => {:a :A, :c {:c1 :C1}, :d :D}\n\nNote that as with the `{:d [:d1 :d2]}` spec in the example above,\nif spec expects a nested map but the actual value is not a map,\nthe actual value will be included in output as-is.\n\nHas the same behaviour as `select-keys` when `key-spec` is a\nsimple vector of keys.", :type :var} {:name seq-kvs, :file "taoensso/encore.cljc", :line 1549, :doc "(seq-kvs {:a :A}) => (:a :A).\n", :type :var} {:name set-var-root!, :file "taoensso/encore.cljc", :line 511, :arglists ([var-sym root-val]), :doc "Sets root binding (value) of the var identified by given symbol, and returns\nthe new value. Cross-platform. See also `update-var-root!`.", :type :macro} {:name simple-ident?, :file "taoensso/encore.cljc", :line 774, :arglists ([x]), :type :var} {:name simple-keyword?, :file "taoensso/encore.cljc", :line 778, :arglists ([x]), :type :var} {:name simple-symbol?, :file "taoensso/encore.cljc", :line 776, :arglists ([x]), :type :var} {:name some=, :file "taoensso/encore.cljc", :line 2258, :arglists ([x] [x y] [x y & more]), :doc "Returns true iff given args are equal AND non-nil.\n", :type :var} {:name sortv, :file "taoensso/encore.cljc", :line 4920, :arglists ([coll] [comparator coll] [?keyfn comparator coll]), :doc "Like `core/sort` but:\n- Returns a vector.\n- `comparator` can be `:asc`, `:desc`, or an arbitrary comparator.\n- An optional `keyfn` may be provided, as in `core/sort-by`.", :type :var} {:name str-?index, :file "taoensso/encore.cljc", :line 2844, :arglists ([s substr] [s substr start-idx] [s substr start-idx last?]), :doc "Returns (first/last) ?index of substring if it exists within given string.\n", :type :var} {:name str-builder, :file "taoensso/encore.cljc", :line 2702, :arglists ([] [init]), :doc "Returns a new stateful string builder:\n  - `java.lang.StringBuilder`  for Clj\n  - `goog.string.StringBuffer` for Cljs\n\nSee also `sb-append`.", :type :var} {:name str-builder?, :file "taoensso/encore.cljc", :line 2696, :arglists ([x]), :type :var} {:name str-contains?, :file "taoensso/encore.cljc", :line 2822, :arglists ([s substr]), :type :var} {:name str-ends-with?, :file "taoensso/encore.cljc", :line 2834, :arglists ([s substr]), :type :var} {:name str-join, :file "taoensso/encore.cljc", :line 2796, :arglists ([xs] [separator xs] [separator xform xs]), :doc "Faster generalization of `clojure.string/join` with transducer support.\n", :type :var} {:name str-join-once, :file "taoensso/encore.cljc", :line 2971, :arglists ([separator coll]), :doc "Like `string/join` but skips nils and duplicate separators.\n", :type :var} {:name str-replace, :file "taoensso/encore.cljc", :line 2917, :arglists ([s match replacement]), :doc "Like `str/replace` but provides consistent Clj/s behaviour.\n\nWorkaround for <http://dev.clojure.org/jira/browse/CLJS-794>,\n               <http://dev.clojure.org/jira/browse/CLJS-911>.\n\nNote that ClojureScript 1.7.145 introduced a partial fix for CLJS-911.\nA full fix could unfortunately not be introduced w/o breaking compatibility\nwith the previously incorrect behaviour. CLJS-794 also remains unresolved.", :type :var} {:name str-rf, :file "taoensso/encore.cljc", :line 2769, :arglists ([] [acc] [acc in]), :doc "String builder reducing fn.\n", :type :var} {:name str-starts-with?, :file "taoensso/encore.cljc", :line 2828, :arglists ([s substr]), :type :var} {:name stringy?, :file "taoensso/encore.cljc", :line 771, :arglists ([x]), :type :var} {:name submap?, :file "taoensso/encore.cljc", :line 1962, :arglists ([super-map sub-map]), :doc "Returns true iff `sub-map` is a (possibly nested) submap of `super-map`,\ni.e. iff every (nested) value in `sub-map` has the same (nested) value in `super-map`.\n\n`sub-map` may contain special values:\n  `:submap/nx`     - Matches iff `super-map` does not contain key\n  `:submap/ex`     - Matches iff `super-map` does     contain key (any     val)\n  `:submap/some`   - Matches iff `super-map` does     contain key (non-nil val)\n  (fn [super-val]) - Matches iff given unary predicate returns truthy\n\nUses stack recursion so supports only limited nesting.", :type :var} {:name submaps?, :file "taoensso/encore.cljc", :line 1964, :arglists ([maps subs]), :doc "Experimental, subject to change without notice.\nReturns true iff `sub_i` is a (possibly nested) submap of `m_i`.\nUses `submap?`.", :type :var} {:name substr, :file "taoensso/encore.cljc", :line 1346, :arglists ([s start-idx] [s start-idx end-idx] [s :by-len start end]), :doc "Returns a non-empty sub-string, or nil.\nLike `subs` but:\n  - Doesn't throw when out-of-bounds (clips to bounds).\n  - Returns nil rather than an empty string.\n  - When given `:by-len` kind (4-arity case):\n    - `start` may be -ive (=> index from right of string).\n    - `end`   is desired string length, or `:max`.", :type :var} {:name subvec, :file "taoensso/encore.cljc", :line 1335, :arglists ([v start-idx] [v start-idx end-idx] [v :by-len start end]), :doc "Returns a non-empty sub-vector, or nil.\nLike `core/subvec` but:\n  - Doesn't throw when out-of-bounds (clips to bounds).\n  - Returns nil rather than an empty vector.\n  - When given `:by-len` kind (4-arity case):\n    - `start` may be -ive (=> index from right of vector).\n    - `end`   is desired vector length, or `:max`.", :type :var} {:name swap-in!, :file "taoensso/encore.cljc", :line 4079, :arglists ([atom_ f] [atom_ ks f] [atom_ ks not-found f]), :doc "Like `swap!` but supports `update-in` semantics and `swapped`.\nReturns <new-key-val> or <swapped-return-val>:\n  (swap-in! (atom {:k1 {:k2 5}}) [:k1 :k2] inc) => 6\n  (swap-in! (atom {:k1 {:k2 5}}) [:k1 :k2]\n    (fn [old] (swapped (inc old) old))) => 5", :type :var} {:name swap-val!, :file "taoensso/encore.cljc", :line 4089, :arglists ([atom_ k f] [atom_ k not-found f]), :doc "Like `swap-in!` but optimized for single-key case:\n(swap-val! (atom {:k 5}) :k inc) => 6\n(swap-val! (atom {:k 5}) :k\n  (fn [old] (swapped (inc old) old))) => 5", :type :var} {:name swapped, :file "taoensso/encore.cljc", :line 3949, :arglists ([new-val return-val]), :doc "For use within the swap functions of `swap-in!` and `swap-val!`.\n\nAllows the easy decoupling of new and returned values. Compare:\n  (let [a (atom 0)] [(core/swap! a (fn [old]          (inc old)     )) @a]) [1 1] ; new=1, return=1\n  (let [a (atom 0)] [(swap-in!   a (fn [old] (swapped (inc old) old))) @a]) [0 1] ; new=1, return=0\n\nFaster and much more flexible than `core/swap-vals!`, etc.\nEspecially useful when combined with the `update-in` semantics of `swap-in!`, etc.", :type :var} {:name swapped?, :file "taoensso/encore.cljc", :line 3968, :arglists ([x]), :doc "Returns true iff given `Swapped` argument.\n", :type :var} {:name takev, :file "taoensso/encore.cljc", :line 1543, :arglists ([n coll]), :type :var} {:name test-fixtures, :file "taoensso/encore.cljc", :line 6058, :arglists ([fixtures-map]), :doc "Given a {:before ?(fn []) :after ?(fn [])} map, returns cross-platform\ntest fixtures for use by both `clojure.test` and `cljs.test`:\n\n  (let [f (test-fixtures {:before (fn [] (test-setup))})]\n    (clojure.test/use-fixtures :once f)\n       (cljs.test/use-fixtures :once f))", :type :var} {:name thread-local, :file "taoensso/encore.cljc", :line 2377, :arglists ([& body]), :doc "Given a body that returns an initial value for the current thread,\nreturns a `ThreadLocal` proxy that can be derefed to get the current\nthread's current value.\n\nCommonly used to achieve thread safety during Java interop.\nIn the common case, `body` will be a call to some Java constructor\nthat returns a non-thread-safe instance.\n\nExample:\n  (def thread-local-simple-date-format_\n    \"Deref to return a thread-local `SimpleDateFormat`\"\n    (thread-local (SimpleDateFormat. \"yyyy-MM-dd\")))\n\n  (.format @thread-local-simple-date-format_ (Date.)) => \"2023-01-24\"\n\nNB: don't pass the derefed value to other threads!", :type :macro} {:name thread-local-proxy, :file "taoensso/encore.cljc", :line 2366, :arglists ([& body]), :doc "Low-level, see `thread-local` instead.\n", :type :macro} {:name time-ms, :file "taoensso/encore.cljc", :line 6083, :arglists ([& body]), :doc "Returns number of milliseconds it took to execute body.\n", :type :macro} {:name time-ns, :file "taoensso/encore.cljc", :line 6087, :arglists ([& body]), :doc "Returns number of nanoseconds it took to execute body.\n", :type :macro} {:name timeout-future?, :file "taoensso/encore.cljc", :line 6221, :arglists ([x]), :type :var} {:name top, :file "taoensso/encore.cljc", :line 4992, :arglists ([n coll] [n keyfn coll] [n keyfn cmp coll]), :doc "Returns a sorted vector of the top `n` items from `coll` using `reduce-top`.\n", :type :var} {:name top-into, :file "taoensso/encore.cljc", :line 4983, :arglists ([to n coll] [to n keyfn coll] [to n keyfn cmp coll]), :doc "Conjoins the top `n` items from `coll` into `to` using `reduce-top`.\n", :type :var} {:name transient?, :file "taoensso/encore.cljc", :line 759, :arglists ([x]), :type :var} {:name udt->inst, :file "taoensso/encore.cljc", :line 2463, :arglists ([msecs-since-epoch]), :doc "Returns given milliseconds since Unix epoch as `js/Date`.\n", :type :var} {:name udt?, :file "taoensso/encore.cljc", :line 2465, :arglists ([x]), :type :var} {:name update!, :file "taoensso/encore.cljc", :line 1579, :arglists ([m k f]), :type :var} {:name update-in, :file "taoensso/encore.cljc", :line 1711, :arglists ([m ks f] [m ks not-found f]), :doc "Like `core/update-in` but:.\n- Empty ks will return (f m), not act like [nil] ks.\n- Adds support for `not-found`.\n- Adds support for special return vals: `:update/dissoc`, `:update/abort`.", :type :var} {:name update-var-root!, :file "taoensso/encore.cljc", :line 498, :arglists ([var-sym update-fn]), :doc "Updates root binding (value) of the var identified by given symbol, and returns\nthe new value:\n  (update-var-root! my-var (fn [old-root-val] <new-root-val>)) => <new-root-val>\n\nSimilar to `alter-var-root` but cross-platform and takes a symbol rather than a var.\nSee also `set-var-root!`.", :type :macro} {:name url-decode, :file "taoensso/encore.cljc", :line 6628, :arglists ([s & [encoding]]), :doc "Stolen from <http://goo.gl/99NSR1>.\n", :type :var} {:name url-encode, :file "taoensso/encore.cljc", :line 6615, :arglists ([s]), :doc "Based on <https://goo.gl/fBqy6e>.\n", :type :var} {:name uuid, :file "taoensso/encore.cljc", :line 3495, :arglists ([]), :doc "For Clj: returns a random `java.util.UUID`.\nFor Cljs: returns a random UUID string.\n\nUses strong randomness when possible.\nSee also `uuid-str`, `nanoid`, `rand-id-fn`.", :type :var} {:name uuid-str, :file "taoensso/encore.cljc", :line 3522, :arglists ([max-len] []), :doc "Returns a random UUID string of given length (max 36).\nUses strong randomness when possible. See also `uuid`, `nanoid`, `rand-id-fn`.", :type :var} {:name vec2?, :file "taoensso/encore.cljc", :line 780, :arglists ([x]), :type :var} {:name vec3?, :file "taoensso/encore.cljc", :line 781, :arglists ([x]), :type :var} {:name vinterleave-all, :file "taoensso/encore.cljc", :line 1800, :arglists ([colls] [c1 c2] [c1 c2 c3] [c1 c2 c3 & colls]), :doc "Like `interleave`, but:\n  - Returns a vector rather than lazy seq (=> greedy).\n  - Includes all items (i.e. stops when the longest rather than\n    shortest coll has been consumed).\n\nSingle-arity version takes a coll of colls.", :type :var} {:name vnext, :file "taoensso/encore.cljc", :line 1520, :arglists ([v]), :type :var} {:name vrest, :file "taoensso/encore.cljc", :line 1521, :arglists ([v]), :type :var} {:name vsplit-first, :file "taoensso/encore.cljc", :line 1523, :arglists ([v]), :type :var} {:name vsplit-last, :file "taoensso/encore.cljc", :line 1522, :arglists ([v]), :type :var} {:name when, :file "taoensso/encore.cljc", :line 226, :arglists ([test-or-bindings & body]), :doc "Supersets `core/when` and `core/when-let` functionality. When `test-or-bindings` is\na vector, same as `encore/when-let`. Otherwise same as `core/when`.", :type :macro} {:name when-let, :file "taoensso/encore.cljc", :line 212, :arglists ([bindings & body]), :doc "Supersets `core/when-let` functionality. Like `core/when-let` but supports multiple\nbindings, and unconditional bindings with `:let`:\n\n(when-let [x       (rand-nth [:x1 :x2 false nil    ])  ; Bind truthy x, or -> nil\n           :let [y (rand-nth [:y1 :y2 false nil x  ])] ; Bind any    y\n           z       (rand-nth [:z1 :z2 false nil x y])  ; Bind truthy z, or -> nil\n           ]\n  [:body x y z])", :type :macro} {:name when-not, :file "taoensso/encore.cljc", :line 236, :arglists ([test-or-bindings & body]), :doc "Supersets `core/when-not` functionality.\nSame as `encore/if-let` with `body` as `else` form.", :type :macro} {:name when-some, :file "taoensso/encore.cljc", :line 246, :arglists ([test-or-bindings & body]), :doc "Supersets `core/when-some` functionality. Like `core/when-some` but supports multiple\nbindings, and unconditional bindings with `:let`:\n\n(when-some [x       (rand-nth [:x1 :x2 false nil    ])  ; Bind non-nil x, or -> `else`\n            :let [y (rand-nth [:y1 :y2 false nil x  ])] ; Bind any     y\n            z       (rand-nth [:z1 :z2 false nil x y])  ; Bind non-nil z, or -> `else`\n            ]\n  [:body x y z])", :type :macro} {:name without-meta, :file "taoensso/encore.cljc", :line 2256, :arglists ([x]), :type :var} {:name xdistinct, :file "taoensso/encore.cljc", :line 1588, :arglists ([] [keyfn]), :doc "Returns a stateful transducer like (core/distinct) that supports an optional\nkey function. Retains only items with distinct (keyfn <item>).", :type :var} {:name zero-num?, :file "taoensso/encore.cljc", :line 868, :arglists ([x]), :type :var})})}, :pom-str "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n  <modelVersion>4.0.0</modelVersion>\n  <groupId>com.taoensso</groupId>\n  <artifactId>encore</artifactId>\n  <packaging>jar</packaging>\n  <version>3.142.0</version>\n  <name>encore</name>\n  <description>Core utils library for Clojure/Script</description>\n  <url>https://www.taoensso.com/encore</url>\n  <licenses>\n    <license>\n      <name>Eclipse Public License - v 1.0</name>\n      <url>https://www.eclipse.org/legal/epl-v10.html</url>\n    </license>\n  </licenses>\n  <scm>\n    <url>https://github.com/taoensso/encore</url>\n    <connection>scm:git:git://github.com/taoensso/encore.git</connection>\n    <developerConnection>scm:git:ssh://git@github.com/taoensso/encore.git</developerConnection>\n    <tag>8e7e4f2471c48a9549c0bce64ee4ce28227b7bc7</tag>\n  </scm>\n  <build>\n    <sourceDirectory>src</sourceDirectory>\n    <testSourceDirectory>test</testSourceDirectory>\n    <resources>\n      <resource>\n        <directory>resources</directory>\n      </resource>\n    </resources>\n    <testResources>\n      <testResource>\n        <directory>resources</directory>\n      </testResource>\n    </testResources>\n    <directory>target</directory>\n    <outputDirectory>target/classes</outputDirectory>\n    <plugins>\n      <plugin>\n        <groupId>org.codehaus.mojo</groupId>\n        <artifactId>build-helper-maven-plugin</artifactId>\n        <version>1.7</version>\n        <executions>\n          <execution>\n            <id>add-source</id>\n            <phase>generate-sources</phase>\n            <goals>\n              <goal>add-source</goal>\n            </goals>\n            <configuration>\n              <sources>\n                <source>src/java</source>\n              </sources>\n            </configuration>\n          </execution>\n        </executions>\n      </plugin>\n    </plugins>\n  </build>\n  <repositories>\n    <repository>\n      <id>central</id>\n      <url>https://repo1.maven.org/maven2/</url>\n      <snapshots>\n        <enabled>false</enabled>\n      </snapshots>\n      <releases>\n        <enabled>true</enabled>\n      </releases>\n    </repository>\n    <repository>\n      <id>clojars</id>\n      <url>https://repo.clojars.org/</url>\n      <snapshots>\n        <enabled>true</enabled>\n      </snapshots>\n      <releases>\n        <enabled>true</enabled>\n      </releases>\n    </repository>\n  </repositories>\n  <dependencyManagement>\n    <dependencies/>\n  </dependencyManagement>\n  <dependencies>\n    <dependency>\n      <groupId>org.clojure</groupId>\n      <artifactId>tools.reader</artifactId>\n      <version>1.5.2</version>\n    </dependency>\n    <dependency>\n      <groupId>com.taoensso</groupId>\n      <artifactId>truss</artifactId>\n      <version>2.0.5</version>\n    </dependency>\n    <dependency>\n      <groupId>org.clojure</groupId>\n      <artifactId>clojurescript</artifactId>\n      <version>1.11.132</version>\n      <scope>provided</scope>\n    </dependency>\n    <dependency>\n      <groupId>org.clojure</groupId>\n      <artifactId>clojure</artifactId>\n      <version>1.11.4</version>\n      <scope>provided</scope>\n    </dependency>\n    <dependency>\n      <groupId>org.clojure</groupId>\n      <artifactId>test.check</artifactId>\n      <version>1.1.1</version>\n      <scope>test</scope>\n    </dependency>\n    <dependency>\n      <groupId>org.clojure</groupId>\n      <artifactId>core.async</artifactId>\n      <version>1.7.701</version>\n      <scope>test</scope>\n    </dependency>\n    <dependency>\n      <groupId>thheller</groupId>\n      <artifactId>shadow-cljs</artifactId>\n      <version>2.28.22</version>\n      <scope>test</scope>\n    </dependency>\n    <dependency>\n      <groupId>nrepl</groupId>\n      <artifactId>nrepl</artifactId>\n      <version>1.3.1</version>\n      <scope>test</scope>\n    </dependency>\n    <dependency>\n      <groupId>cider</groupId>\n      <artifactId>cider-nrepl</artifactId>\n      <version>0.53.2</version>\n      <scope>test</scope>\n    </dependency>\n    <dependency>\n      <groupId>com.google.javascript</groupId>\n      <artifactId>closure-compiler-unshaded</artifactId>\n      <version>v20240317</version>\n      <scope>test</scope>\n    </dependency>\n  </dependencies>\n</project>\n\n<!-- This file was autogenerated by Leiningen.\n  Please do not edit it directly; instead edit project.clj and regenerate it.\n  It should not be considered canonical data. For more information see\n  https://codeberg.org/leiningen/leiningen -->\n"}