{:group-id "com.taoensso", :artifact-id "encore", :version "3.104.1", :analysis {"clj" ({:author "Peter Taoussanis (@ptaoussanis)", :name taoensso.encore, :publics ({:name <*, :file "taoensso/encore.cljc", :line 2011, :arglists ([x y z]), :type :macro} {:name <=*, :file "taoensso/encore.cljc", :line 2009, :arglists ([x y z]), :type :macro} {:name >*, :file "taoensso/encore.cljc", :line 2012, :arglists ([x y z]), :type :macro} {:name >=*, :file "taoensso/encore.cljc", :line 2010, :arglists ([x y z]), :type :macro} {:name a-utf8-str, :file "taoensso/encore.cljc", :line 4221, :doc "Example UTF8 string for tests, etc.\n", :type :var} {:name abbreviate-ns, :file "taoensso/encore.cljc", :line 4700, :arglists ([x] [n-full x]), :added "Encore v3.68.0 (2023-09-25)", :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 2019, :arglists ([n]), :type :var} {:name after-timeout, :file "taoensso/encore.cljc", :line 7253, :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 1993, :arglists ([x y] [signf x y]), :type :var} {:name as-?bool, :file "taoensso/encore.cljc", :line 1454, :arglists ([x]), :type :var} {:name as-?dt, :file "taoensso/encore.cljc", :line 3303, :arglists ([x]), :added "Encore v3.98.0 (2024-04-08)", :doc "Returns given ?arg as `java.util.Date`, or nil.\n", :type :var} {:name as-?email, :file "taoensso/encore.cljc", :line 1462, :arglists ([?s] [max-len ?s]), :type :var} {:name as-?float, :file "taoensso/encore.cljc", :line 1439, :arglists ([x]), :type :var} {:name as-?inst, :file "taoensso/encore.cljc", :line 3282, :arglists ([x]), :added "Encore v3.98.0 (2024-04-08)", :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 1428, :arglists ([x]), :type :var} {:name as-?kw, :file "taoensso/encore.cljc", :line 1416, :arglists ([x]), :type :var} {:name as-?name, :file "taoensso/encore.cljc", :line 1417, :arglists ([x]), :type :var} {:name as-?nat-float, :file "taoensso/encore.cljc", :line 1448, :arglists ([x]), :type :var} {:name as-?nat-int, :file "taoensso/encore.cljc", :line 1446, :arglists ([x]), :type :var} {:name as-?nblank, :file "taoensso/encore.cljc", :line 1415, :arglists ([x]), :type :var} {:name as-?nblank-trim, :file "taoensso/encore.cljc", :line 1424, :arglists ([x]), :type :var} {:name as-?nemail, :file "taoensso/encore.cljc", :line 1469, :arglists ([?s] [max-len ?s]), :type :var} {:name as-?nempty-str, :file "taoensso/encore.cljc", :line 1423, :arglists ([x]), :type :var} {:name as-?nzero, :file "taoensso/encore.cljc", :line 1414, :arglists ([x]), :type :var} {:name as-?pnum, :file "taoensso/encore.cljc", :line 1451, :arglists ([x]), :type :var} {:name as-?pos-float, :file "taoensso/encore.cljc", :line 1449, :arglists ([x]), :type :var} {:name as-?pos-int, :file "taoensso/encore.cljc", :line 1447, :arglists ([x]), :type :var} {:name as-?qname, :file "taoensso/encore.cljc", :line 1418, :arglists ([x]), :type :var} {:name as-?rnum, :file "taoensso/encore.cljc", :line 1452, :arglists ([x]), :type :var} {:name as-?udt, :file "taoensso/encore.cljc", :line 3316, :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 1526, :arglists ([x]), :type :var} {:name as-dt, :file "taoensso/encore.cljc", :line 3342, :arglists ([x]), :type :var} {:name as-email, :file "taoensso/encore.cljc", :line 1494, :arglists ([x] [n x]), :type :var} {:name as-float, :file "taoensso/encore.cljc", :line 1509, :arglists ([x]), :type :var} {:name as-inst, :file "taoensso/encore.cljc", :line 3341, :arglists ([x]), :type :var} {:name as-int, :file "taoensso/encore.cljc", :line 1502, :arglists ([x]), :type :var} {:name as-kw, :file "taoensso/encore.cljc", :line 1490, :arglists ([x]), :type :var} {:name as-name, :file "taoensso/encore.cljc", :line 1491, :arglists ([x]), :type :var} {:name as-nat-float, :file "taoensso/encore.cljc", :line 1511, :arglists ([x]), :type :var} {:name as-nat-int, :file "taoensso/encore.cljc", :line 1504, :arglists ([x]), :type :var} {:name as-nblank, :file "taoensso/encore.cljc", :line 1487, :arglists ([x]), :type :var} {:name as-nblank-trim, :file "taoensso/encore.cljc", :line 1488, :arglists ([x]), :type :var} {:name as-nemail, :file "taoensso/encore.cljc", :line 1498, :arglists ([x] [n x]), :type :var} {:name as-nempty-str, :file "taoensso/encore.cljc", :line 1489, :arglists ([x]), :type :var} {:name as-nzero, :file "taoensso/encore.cljc", :line 1486, :arglists ([x]), :type :var} {:name as-pnum, :file "taoensso/encore.cljc", :line 1516, :arglists ([x]), :type :var} {:name as-pnum!, :file "taoensso/encore.cljc", :line 1521, :arglists ([x]), :type :var} {:name as-pnum-complement, :file "taoensso/encore.cljc", :line 2005, :arglists ([x]), :type :var} {:name as-pos-float, :file "taoensso/encore.cljc", :line 1513, :arglists ([x]), :type :var} {:name as-pos-int, :file "taoensso/encore.cljc", :line 1506, :arglists ([x]), :type :var} {:name as-qname, :file "taoensso/encore.cljc", :line 1492, :arglists ([x]), :type :var} {:name as-rnum, :file "taoensso/encore.cljc", :line 1518, :arglists ([x]), :type :var} {:name as-rnum!, :file "taoensso/encore.cljc", :line 1523, :arglists ([x]), :type :var} {:name as-udt, :file "taoensso/encore.cljc", :line 3343, :arglists ([x]), :type :var} {:name assert-min-encore-version, :file "taoensso/encore.cljc", :line 2131, :arglists ([min-version]), :doc "Version check for dependency conflicts, etc.\n", :type :var} {:name assoc-nx, :file "taoensso/encore.cljc", :line 2287, :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 2275, :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 2281, :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 1262, :arglists ([x]), :type :var} {:name ba->hex-str, :file "taoensso/encore.cljc", :line 5244, :arglists ([ba]), :added "Encore v3.53.0 (2023-03-22)", :doc "Returns byte[] for given hex string.\n", :type :var} {:name ba-concat, :file "taoensso/encore.cljc", :line 1687, :arglists ([ba1 ba2]), :type :var} {:name ba-hash, :file "taoensso/encore.cljc", :line 1679, :arglists ([x]), :doc "Returns hash int of given byte[].\n", :type :var} {:name ba-split, :file "taoensso/encore.cljc", :line 1695, :arglists ([ba idx]), :type :var} {:name ba=, :file "taoensso/encore.cljc", :line 1675, :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 6419, :arglists ([nlaps opts & body]), :type :macro} {:name bench*, :file "taoensso/encore.cljc", :line 6399, :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 358, :arglists ([bindings & body]), :added "Encore v3.98.0 (2024-04-08)", :doc "For Clj: faster version of `core/binding`.\nFor Cljs: identical to `core/binding`.", :type :macro} {:name boolean?, :file "taoensso/encore.cljc", :line 1252, :arglists ([x]), :type :var} {:name bytes-class, :file "taoensso/encore.cljc", :line 1669, :type :var} {:name bytes?, :file "taoensso/encore.cljc", :line 1670, :arglists ([x]), :doc "Returns true iff given byte[] argument.\n", :type :var} {:name cache, :file "taoensso/encore.cljc", :line 3506, :arglists ([f] [{:keys [size ttl-ms gc-every], :as opts} f]), :added "Encore v3.36.0 (2022-11-18)", :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 many msecs.\n - `size` ; Restrict cache size to many items at the next garbage\n ; collection (GC).\n\n - `gc-every` ; Run garbage collection (GC) approximately once every\n ; 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 7223, :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 1270, :arglists ([x]), :type :var} {:name case-eval, :file "taoensso/encore.cljc", :line 558, :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 4453, :arglists ([s1 s2]), :added "Encore v3.25.0 (2022-10-13)", :doc "Returns true iff given strings are equal, ignoring case.\n", :type :var} {:name catching, :file "taoensso/encore.cljc", :line 7719, :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 catching-rf, :file "taoensso/encore.cljc", :line 1060, :arglists ([rf] [error-fn rf]), :added "Encore v3.32.0 (2022-11-07)", :doc "Returns wrapper around given reducing function `rf` so that if `rf`\nthrows, (error-fn ) will be called.\n\nThe default `error-fn` will rethrow the original error, wrapped in\nextra contextual information to aid debugging.\n\nSee also `catching-xform`.", :type :var} {:name catching-xform, :file "taoensso/encore.cljc", :line 1093, :arglists ([error-fn xform] [xform]), :added "Encore v3.32.0 (2022-11-07)", :doc "Like `catching-rf`, but applies to a transducer (`xform`).\n\nMakes debugging transductions much easier by greatly improving\nthe information provided in any errors thrown by `xform` or the\nreducing fn:\n\n (transduce\n (catching-xform (comp (filter even?) (map inc))) ; Modified xform\n \n <...>)", :type :var} {:name chan?, :file "taoensso/encore.cljc", :line 1300, :arglists ([x]), :doc "Returns true iff given a `clojure.core.async` channel.\n", :type :var} {:name chance, :file "taoensso/encore.cljc", :line 2070, :arglists ([prob]), :doc "Returns true with given probability ∈ ℝ[0,1].\n", :type :var} {:name check-all, :file "taoensso/encore.cljc", :line 1569, :arglists ([test] [test & more]), :doc "Returns all logical false/throwing expressions (ids/forms), or nil.\n", :type :macro} {:name check-some, :file "taoensso/encore.cljc", :line 1560, :arglists ([test & more] [test]), :doc "Returns first logical false/throwing expression (id/form), or nil.\n", :type :macro} {:name clamp, :file "taoensso/encore.cljc", :line 2000, :arglists ([nmin nmax n]), :type :var} {:name clamp*, :file "taoensso/encore.cljc", :line 2015, :arglists ([nmin nmax n]), :type :macro} {:name clamp-float, :file "taoensso/encore.cljc", :line 2002, :arglists ([nmin nmax n]), :type :var} {:name clamp-int, :file "taoensso/encore.cljc", :line 2001, :arglists ([nmin nmax n]), :type :var} {:name class-sym, :file "taoensso/encore.cljc", :line 739, :arglists ([x]), :added "Encore v3.98.0 (2024-04-08)", :doc "Returns class name symbol of given argument.\n", :type :var} {:name compile-if, :file "taoensso/encore.cljc", :line 196, :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 206, :arglists ([test & body]), :type :macro} {:name compiling-cljs?, :file "taoensso/encore.cljc", :line 347, :arglists ([]), :doc "Return truthy iff currently generating Cljs code.\nSee also `if-cljs`, `if-clj`.", :type :var} {:name cond, :file "taoensso/encore.cljc", :line 432, :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\n :if-let [y \"y\"\n z nil]\n \"y and z were both truthy\"\n\n :if-some [y \"y\"\n z nil]\n \"y and z were both non-nil\")\n\n`:let` support inspired by .\nSimple, flexible way to eliminate deeply-nested control flow code.", :type :macro} {:name cond!, :file "taoensso/encore.cljc", :line 456, :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 2261, :arglists ([] [coll] [coll x] [coll x & more]), :doc "Conjoins each non-nil value.\n", :type :var} {:name conj-when, :file "taoensso/encore.cljc", :line 2267, :arglists ([] [coll] [coll x] [coll x & more]), :doc "Conjoins each truthy value.\n", :type :var} {:name const-ba=, :file "taoensso/encore.cljc", :line 1708, :arglists ([ba1 ba2]), :doc "Constant-time `ba=`.\nUseful to prevent timing attacks, etc.", :type :var} {:name const-str=, :file "taoensso/encore.cljc", :line 4675, :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 2572, :arglists ([coll ks k] [coll ks]), :type :var} {:name convey-reduced, :file "taoensso/encore.cljc", :line 1733, :arglists ([x]), :type :var} {:name count-words, :file "taoensso/encore.cljc", :line 4614, :arglists ([s]), :type :var} {:name counter, :file "taoensso/encore.cljc", :line 4052, :arglists ([] [init]), :doc "Returns a fast atomic Counter with `init` initial int value:\n- ( ) -> add 1, return old val\n- ( ) -> add n, return old val\n\nExperimental 3-arity version takes an `action`:\n :add, :set, :set-get, :get-set, :get-add, :add-get", :type :var} {:name declare-remote, :file "taoensso/encore.cljc", :line 590, :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 527, :arglists ([sym & args]), :added "Encore v3.67.0 (2023-09-08)", :doc "Like `core/def` but supports attrs map.\n", :type :macro} {:name defalias, :file "taoensso/encore.cljc", :line 640, :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 684, :arglists ([{:keys [alias src attrs body]} ...]), :added "Encore v3.58.0 (2023-04-09)", :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 7165, :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 3769, :arglists ([sym cache-opts & body]), :added "Encore v3.36.0 (2022-11-18)", :doc "Defines a cached function.\nLike (def (cache )), 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 536, :arglists ([sym & args]), :doc "Like `core/defonce` but supports docstring and attrs map.\n", :type :macro} {:name defstub, :file "taoensso/encore.cljc", :line 6916, :arglists ([sym]), :doc "Experimental, subject to change without notice!!\nDeclares a stub var that can be initialized from any namespace with\n`unstub-`.\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 7271, :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 1260, :arglists ([x]), :type :var} {:name dissoc-in, :file "taoensso/encore.cljc", :line 2580, :arglists ([m ks dissoc-k] [m ks dissoc-k & more] [m ks]), :type :var} {:name distinct-elements?, :file "taoensso/encore.cljc", :line 2389, :arglists ([x]), :type :var} {:name doto-cond, :file "taoensso/encore.cljc", :line 569, :arglists ([[sym x] & clauses]), :doc "Cross between `doto`, `cond->` and `as->`.\n", :type :macro} {:name editable?, :file "taoensso/encore.cljc", :line 1258, :arglists ([x]), :type :var} {:name encore-version, :file "taoensso/encore.cljc", :line 122, :type :var} {:name ensure-set, :file "taoensso/encore.cljc", :line 2175, :arglists ([x]), :type :var} {:name ensure-vec, :file "taoensso/encore.cljc", :line 2174, :arglists ([x]), :type :var} {:name error?, :file "taoensso/encore.cljc", :line 776, :arglists ([x]), :doc "Returns true iff given platform error (`Throwable` or `js/Error`).\n", :type :var} {:name ex-cause, :file "taoensso/encore.cljc", :line 797, :arglists ([x]), :added "Encore v3.41.0 (2022-12-03)", :doc "Same as `core/ex-cause` (added in Clojure v1.10).\n", :type :var} {:name ex-data, :file "taoensso/encore.cljc", :line 790, :arglists ([x]), :added "Encore v3.98.0 (2024-04-08)", :doc "Same as `core/ex-data` (added in Clojure v1.4).\n", :type :var} {:name ex-message, :file "taoensso/encore.cljc", :line 783, :arglists ([x]), :added "Encore v3.41.0 (2022-12-03)", :doc "Same as `core/ex-message` (added in Clojure v1.10).\n", :type :var} {:name ex-root, :file "taoensso/encore.cljc", :line 804, :arglists ([x]), :added "Encore v3.98.0 (2024-04-08)", :doc "Returns root cause of given platform error.\n", :type :var} {:name exception?, :file "taoensso/encore.cljc", :line 1275, :arglists ([x]), :type :var} {:name exp-backoff, :file "taoensso/encore.cljc", :line 2058, :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 explode-keyword, :file "taoensso/encore.cljc", :line 1641, :arglists ([k]), :type :var} {:name fast-merge, :file "taoensso/encore.cljc", :line 2728, :arglists ([maps] [m1 m2] [m1 m2 m3] [m1 m2 m3 m4]), :doc "Like `core/merge` but faster.\nDoesn't support zero arity, single arity case takes a collection of maps.", :type :var} {:name file-resources-modified?, :file "taoensso/encore.cljc", :line 5505, :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 2475, :arglists ([key-pred m]), :doc "Returns given ?map, retaining only keys for which (key-pred ) is truthy.\n", :type :var} {:name filter-vals, :file "taoensso/encore.cljc", :line 2483, :arglists ([val-pred m]), :doc "Returns given ?map, retaining only keys for which (val-pred ) is truthy.\n", :type :var} {:name finite-num?, :file "taoensso/encore.cljc", :line 1321, :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 1353, :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 3458, :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 2100, :arglists ([x]), :doc "Like `force` for refs.\n", :type :var} {:name force-var, :file "taoensso/encore.cljc", :line 2101, :arglists ([x]), :doc "Like `force` for vars.\n", :type :var} {:name format, :file "taoensso/encore.cljc", :line 4557, :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 4545, :arglists ([fmt args] [xform fmt args]), :type :var} {:name format-inst, :file "taoensso/encore.cljc", :line 3401, :arglists ([inst]), :added "Encore v3.98.0 (2024-04-08)", :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 3351, :arglists ([] [{:keys [formatter zone], :or {formatter java.time.format.DateTimeFormatter/ISO_INSTANT, zone java.time.ZoneOffset/UTC}}]), :added "Encore v3.98.0 (2024-04-08)", :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 string.\n\nOptions:\n `:zone` (Clj only) `java.time.ZoneOffset` (defaults to UTC).\n `:formatter`\n `java.time.format.DateTimeFormatter` (Clj) or\n `goog.i18n.DateTimeFormat` (Cljs),\n\n Defaults to `ISO8601` formatter (`YYYY-MM-DDTHH:mm:ss.sssZ`),\n e.g.: \"2011-12-03T10:15:130Z\".", :type :var} {:name format-nsecs, :file "taoensso/encore.cljc", :line 6335, :arglists ([nanosecs]), :added "Encore v3.98.0 (2024-04-08)", :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 6797, :arglists ([m]), :type :var} {:name future*, :file "taoensso/encore.cljc", :line 5961, :arglists ([form] [executor-service form]), :added "Encore v3.72.0 (2023-10-24)", :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 5928, :arglists ([f] [executor-service f]), :added "Encore v3.72.0 (2023-10-24)", :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 5977, :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 2237, :arglists ([m k] [m k not-found] [m k1 k2 not-found] [m k1 k2 k3 not-found]), :added "Encore v3.82.0 (2024-02-23)", :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 first\n 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-dynamic-assertion-data, :file "taoensso/encore.cljc", :line 7655, :arglists ([]), :deprecated "v1.7.0 (2022-11-16)", :doc "Prefer `get-data`\n", :type :var} {:name get-env, :file "taoensso/encore.cljc", :line 5741, :arglists ([{:keys [as default return]} spec] [{:keys [as default return spec], :or {as :str, return :value}}]), :added "Encore v3.75.0 (2024-01-29)", :doc "Cross-platform util for embedding flexible environmental config during\nmacro expansion. Used by other Taoensso libraries.\n\nGiven a const kw/string id or vector of desc-priority alternative ids,\nparse and return the first of the following that exists:\n - JVM property value for id (\"prop\")\n - Environment variable value for id (\"env\")\n - Classpath resource content for id (\"res\")\n\nIds may include optional segment in `<>` tag (e.g. `<.edn>`).\nIds may include `<.?platform.?>` tag for auto replacement, useful\nfor supporting platform-specific config.\n\nSearch order: desc by combined [alt-index platform(y/n) optional(y/n)].\n\n(get-env {:as :edn} [:my-app/alt1<.platform><.edn> :my-app/alt2])\nwill parse and return the first of the following that exists:\n\n 1. Alt1 +platform +optional (content type)\n 1a. `my-app.alt1.clj.edn` JVM property value\n 1b. `MY_APP_ALT1_CLJ_EDN` environment variable value\n 1c. `my-app.alt1.clj.edn` classpath resource content\n\n 2. Alt1 +platform -optional (content type)\n 2a. `my-app.alt1.clj` JVM property value\n 2b. `MY_APP_ALT1_CLJ` environment variable value\n 2c. `my-app.alt1.clj` classpath resource content\n\n 3. Alt1 -platform +optional (content type)\n 3a. `my-app.alt1.edn` JVM property value\n 3b. `MY_APP_ALT1_EDN` environment variable value\n 3c. `my-app.alt1.edn` classpath resource content\n\n 4. Alt1 -platform -optional (content type)\n 4a. `my-app.alt1` JVM property value\n 4b. `MY_APP_ALT1` environment variable value\n 4c. `my-app.alt1` classpath resource content\n\n 5. Alt2\n 5a. `my-app.alt2` JVM property value\n 5b. `MY_APP_ALT2` environment variable value\n 5c. `my-app.alt2` classpath resource content\n\nOptions:\n `:as` - Parse found value as given type ∈ #{:str :bool :edn} (default :str).\n `:default` - Fallback to return if no value found during search (default nil).\n `:return` - Return type ∈ #{:value :map :debug} (default :value).\n TIP: Use `:debug` to inspect/verify search behaviour!\n\nResult must be something that can be safely embedded in code during\nmacro-expansion. Symbols in edn will be evaluated during expansion.", :type :macro} {:name get-file-resource-?last-modified, :file "taoensso/encore.cljc", :line 5497, :arglists ([rname]), :doc "Returns last-modified time for file backing given named resource, or nil\nif file doesn't exist.", :type :var} {:name get-host-ip, :file "taoensso/encore.cljc", :line 6270, :arglists ([] [fallback] [cache-msecs timeout-msecs timeout-val] [timeout-msecs timeout-val]), :added "Encore v3.98.0 (2024-04-08)", :doc "Returns local host ip address string, or `fallback` (default nil).\nCan be slow, prefer 3-arity caching variant when possible.", :type :var} {:name get-hostname, :file "taoensso/encore.cljc", :line 6288, :arglists ([] [fallback] [cache-msecs timeout-msecs timeout-val] [timeout-msecs timeout-val]), :added "Encore v3.82.0 (2024-02-23) (arities: 1, 2, 3)", :doc "Returns local hostname string, or `fallback` (default nil).\nCan be slow, prefer 3-arity caching variant when possible.", :type :var} {:name get-pom-version, :file "taoensso/encore.cljc", :line 5536, :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 1170, :arglists ([macro-form macro-env]), :added "Encore v3.61.0 (2023-07-07)", :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 get-substr-by-idx, :file "taoensso/encore.cljc", :line 4386, :arglists ([s start-idx] [s start-idx end-idx]), :doc "Returns ?substring from given string.\n\nLike `subs` but:\n - Provides consistent clj/s behaviour.\n - Never throws (snaps to valid indexes).\n - Indexes may be -ive (=> indexed from end of string).\n\nReturns nil when requested substring would be empty.", :type :var} {:name get-substr-by-len, :file "taoensso/encore.cljc", :line 4424, :arglists ([s start-idx] [s start-idx sub-len]), :doc "Returns ?substring from given string.\nLike `get-substr-by-idx`, but takes a substring-length 3rd argument.", :type :var} {:name get-subvec, :file "taoensso/encore.cljc", :line 2306, :arglists ([v start] [v start end]), :doc "Like `subvec` but never throws (snaps to valid start and end indexes).\n", :type :var} {:name get-subvector, :file "taoensso/encore.cljc", :line 2323, :arglists ([v start] [v start length]), :doc "Like `get-subvec` but:\n- Takes `length` instead of `end` (index).\n- -ive `start` => index from right of vector.", :type :var} {:name get-truss-data, :file "taoensso/encore.cljc", :line 734, :arglists ([]), :doc "Returns current value of dynamic assertion data.\n", :type :var} {:name get1, :file "taoensso/encore.cljc", :line 2227, :arglists ([m k] [m k not-found] [m k1 k2 not-found] [m k1 k2 k3 not-found]), :added "Encore v3.67.0 (2023-09-08)", :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, :file "taoensso/encore.cljc", :line 728, :arglists ([x] [pred (:in) x] [pred (:in) x & more-xs]), :doc "Takes a pred and one or more vals. Tests pred against each val,\ntrapping errors. If any pred test fails, throws a detailed assertion error.\nOtherwise returns input val/vals for convenient inline-use/binding.\n\nRespects *assert* value so tests can be elided from production for zero\nruntime costs.\n\nProvides a small, simple, flexible feature subset to alternative tools like\nclojure.spec, core.typed, prismatic/schema, etc.\n\n ;; Will throw a detailed error message on invariant violation:\n (fn my-fn [x] (str/trim (have string? x)))\n\nYou may attach arbitrary debug info to assertion violations like:\n `(have string? x :data {:my-arbitrary-debug-info \"foo\"})`\n\nRe: use of Truss assertions within other macro bodies:\n Due to CLJ-865, call site information (e.g. line number) of\n outer macro will unfortunately be lost.\n\n See `keep-callsite` util for a workaround.\n\nSee also `have?`, `have!`.", :type :macro} {:name have!, :file "taoensso/encore.cljc", :line 729, :arglists ([x] [pred (:in) x] [pred (:in) x & more-xs]), :doc "Like `have` but ignores *assert* value (so can never be elided). Useful\nfor important conditions in production (e.g. security checks).", :type :macro} {:name have!?, :file "taoensso/encore.cljc", :line 731, :arglists ([x] [pred (:in) x] [pred (:in) x & more-xs]), :doc "Specialized cross between `have?` and `have!`. Not used often but can be\nhandy for semantic clarification and/or to improve multi-val performance\nwhen the return vals aren't necessary.\n\n**WARNING**: Do NOT use in :pre/:post conds since those are ALWAYS subject\nto *assert*, directly contradicting the intention of the bang (`!`) here.", :type :macro} {:name have-core-async?, :file "taoensso/encore.cljc", :line 1291, :doc "Is `clojure.core.async` present (not necessarily loaded)?\n", :type :var} {:name have-telemere?, :file "taoensso/encore.cljc", :line 4957, :added "Encore v3.68.0 (2023-09-25)", :doc "Is `taoensso.telemere` present (not necessarily loaded)?\n", :type :var} {:name have?, :file "taoensso/encore.cljc", :line 730, :arglists ([x] [pred (:in) x] [pred (:in) x & more-xs]), :doc "Like `have` but returns `true` on successful tests. In particular, this\ncan be handy for use with :pre/:post conditions. Compare:\n (fn my-fn [x] {:post [(have nil? %)]} nil) ; {:post [nil]} FAILS\n (fn my-fn [x] {:post [(have? nil? %)]} nil) ; {:post [true]} passes as intended", :type :macro} {:name hex-str->ba, :file "taoensso/encore.cljc", :line 5256, :arglists ([s]), :added "Encore v3.53.0 (2023-03-22)", :doc "Returns hex string for given byte[].\n", :type :var} {:name ident-hex-str, :file "taoensso/encore.cljc", :line 5230, :arglists ([obj]), :added "Encore v3.56.0 (2023-03-29)", :doc "Returns hex string of given Object's `identityHashCode` (e.g. \"0x5eeb49f2\").\n", :type :var} {:name ident?, :file "taoensso/encore.cljc", :line 1278, :arglists ([x]), :type :var} {:name identical-kw?, :file "taoensso/encore.cljc", :line 546, :arglists ([x y]), :added "Encore v3.67.0 (2023-09-08)", :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 344, :arglists ([then & [else]]), :type :macro} {:name if-cljs, :file "taoensso/encore.cljc", :line 345, :arglists ([then & [else]]), :type :macro} {:name if-let, :file "taoensso/encore.cljc", :line 218, :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 270, :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 244, :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 1254, :arglists ([x]), :type :var} {:name inst->udt, :file "taoensso/encore.cljc", :line 3237, :arglists ([inst]), :added "Encore v3.98.0 (2024-04-08)", :doc "Returns given `java.time.Instant` as milliseconds since Unix epoch.\n", :type :var} {:name inst?, :file "taoensso/encore.cljc", :line 3207, :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 1618, :arglists ([class arg] [class arg {:keys [msg context param ...]}] [class arg & {:keys [msg context param ...]}]), :added "Encore v3.51.0 (2023-03-13)", :doc "If (instance? class arg) is true, returns arg.\nOtherwise throws runtime `ExceptionInfo` with `unexpected-arg!`.\nSee `unexpected-arg!` for more info.", :type :macro} {:name int?, :file "taoensso/encore.cljc", :line 1335, :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 2613, :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 7116, :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 2423, :arglists ([to!] [to! from] [to! xform from]), :doc "Like `core/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 2399, :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 4657, :arglists ([& xs]), :doc "Simple Hiccup-like string templating to complement Tempura.\n", :type :var} {:name invert-map, :file "taoensso/encore.cljc", :line 2451, :arglists ([m]), :doc "Returns given ?map with keys and vals inverted, dropping non-unique vals!\n", :type :var} {:name is!, :file "taoensso/encore.cljc", :line 1543, :arglists ([x] [pred x] [pred x data]), :doc "Lightweight `have!` that provides less diagnostic info.\n", :type :var} {:name ITimeoutFuture, :file "taoensso/encore.cljc", :line 7173, :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 7155, :type :protocol, :members ({:name -schedule-timeout, :arglists ([_ msecs f]), :type :var})} {:name java-version, :file "taoensso/encore.cljc", :line 5554, :arglists ([] [version-string]), :added "Encore v3.75.0 (2024-01-29)", :doc "Returns Java's major version integer (8, 17, etc.).\n", :type :var} {:name java-version>=, :file "taoensso/encore.cljc", :line 5573, :arglists ([n]), :added "Encore v3.75.0 (2024-01-29)", :doc "Returns true iff Java's major version integer is >= given integer:\n(if (java-version>= 21) )", :type :var} {:name keep-callsite, :file "taoensso/encore.cljc", :line 1148, :arglists ([& body]), :added "Encore v3.61.0 (2023-07-07)", :doc "The long-standing CLJ-865 unfortunately means that it's currently\nnot possible for an inner macro to access the &form metadata of an\nouter macro.\n\nThis means that inner macros lose callsite information like the\nline number of the outer macro.\n\nThis util offers a workaround for macro authors:\n\n (defmacro inner [] (meta &form))\n (defmacro outer1 [] `(inner))\n (defmacro outer2 [] (keep-callsite `(inner)))\n\n (inner) => {:line _, :column _}\n (outer1) => nil\n (outer2) => {:line _, :column _}", :type :macro} {:name keys-by, :file "taoensso/encore.cljc", :line 2524, :arglists ([f coll]), :doc "Returns {(f x) x} ?map for xs in `coll`.\n", :type :var} {:name ks-nnil?, :file "taoensso/encore.cljc", :line 2538, :arglists ([ks m]), :type :var} {:name ks<=, :file "taoensso/encore.cljc", :line 2536, :arglists ([ks m]), :type :var} {:name ks=, :file "taoensso/encore.cljc", :line 2535, :arglists ([ks m]), :type :var} {:name ks>=, :file "taoensso/encore.cljc", :line 2537, :arglists ([ks m]), :type :var} {:name lazy-seq?, :file "taoensso/encore.cljc", :line 1266, :arglists ([x]), :type :var} {:name map-entry, :file "taoensso/encore.cljc", :line 2148, :arglists ([k v]), :added "Encore v3.75.0 (2024-01-29)", :doc "Returns a `MapEntry` with given key and value.\n", :type :var} {:name map-keys, :file "taoensso/encore.cljc", :line 2459, :arglists ([key-fn m]), :doc "Returns given ?map with (key-fn ) keys.\n", :type :var} {:name map-vals, :file "taoensso/encore.cljc", :line 2467, :arglists ([val-fn m]), :doc "Returns given ?map with (val-fn ) vals.\n", :type :var} {:name mapply, :file "taoensso/encore.cljc", :line 2394, :arglists ([f & args]), :doc "Like `apply` but calls `seq-kvs` on final arg.\n", :type :var} {:name matching-error, :file "taoensso/encore.cljc", :line 970, :arglists ([err] [kind err] [kind pattern err]), :added "Encore v3.70.0 (2023-10-17)", :doc "Given a platform error and criteria, returns the error if it matches\nall criteria. Otherwise returns nil.\n\n`kind` may be:\n - A predicate function, (fn match? [x]) -> bool\n - A class (e.g. `ArithmeticException`, `AssertionError`, etc.)\n - `:all` => any platform error (Throwable or js/Error, etc.)\n - `:common` => common platform error (Exception or js/Error)\n - `:ex-info` => an `IExceptionInfo` as created by `ex-info`\n - A set of `kind`s as above, at least one of which must match\n\n`pattern` may be:\n - A string or Regex against which `ex-message` must match\n - A map against which `ex-data` must match using `submap?`\n - A set of `pattern`s as above, at least one of which must match\n\nWhen an error with (nested) causes doesn't match, a match will be attempted\nagainst its (nested) causes.\n\nLow-level util, see also `throws`, `throws?`.", :type :var} {:name max*, :file "taoensso/encore.cljc", :line 2014, :arglists ([n1 n2]), :type :macro} {:name max-long, :file "taoensso/encore.cljc", :line 1398, :type :var} {:name memoize, :file "taoensso/encore.cljc", :line 3735, :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 3416, :arglists ([f]), :doc "Like `core/memoize` but only caches the given fn's last input.\nGreat for ReactJS render fn caching, etc.", :type :var} {:name merge, :file "taoensso/encore.cljc", :line 2712, :arglists ([& maps]), :doc "Like `core/merge` but faster, supports `:merge/dissoc` rvals.\n", :type :var} {:name merge-keywords, :file "taoensso/encore.cljc", :line 1644, :arglists ([ks] [ks omit-slash?]), :type :var} {:name merge-meta, :file "taoensso/encore.cljc", :line 2102, :arglists ([x m]), :type :var} {:name merge-url-with-query-string, :file "taoensso/encore.cljc", :line 6845, :arglists ([url m]), :type :var} {:name merge-with, :file "taoensso/encore.cljc", :line 2716, :arglists ([f & maps]), :doc "Like `core/merge-with` but faster, supports `:merge/dissoc` rvals.\n", :type :var} {:name min*, :file "taoensso/encore.cljc", :line 2013, :arglists ([n1 n2]), :type :macro} {:name min-long, :file "taoensso/encore.cljc", :line 1399, :type :var} {:name ms, :file "taoensso/encore.cljc", :line 5381, :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 5380, :arglists ([ms]), :type :var} {:name msecs, :file "taoensso/encore.cljc", :line 5414, :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 7055, :arglists ([spec]), :added "Encore v3.67.0 (2023-09-08)", :doc "Given filter `spec`, returns a compiled (fn conform? [name]) that takes\na namespace or any nameable type (string, keyword, symbol).\n\nSpec may be:\n - A namespace. Will conform on exact match.\n - A str/kw/sym, in which \"*\"s act as wildcards. Will conform on match.\n - A regex pattern. Will conform on match.\n\n - A vector or set of regex patterns or strs/kws/syms.\n Will conform on ANY match.\n If you need literal \"*\"s, use #\"\\*\" regex instead.\n\n - {:allow :deny } with specs as above.\n Will conform iff `allow` spec matches AND `deny` spec does NOT.\n\nResulting conform fn is useful as allowlist and/or denylist.\nExample inputs: namespace strings, class names, ids, etc.\n\nSpec examples:\n *ns*, #{}, \"*\", \"foo.bar\", \"foo.bar.*\", #{\"foo\" \"bar.*\"},\n {:allow #{\"foo\" \"bar.*\"} :deny #{\"foo.*.bar.*\"}},\n #\"(foo1|foo2)\\.bar\".", :type :var} {:name name-with-attrs, :file "taoensso/encore.cljc", :line 513, :arglists ([sym args] [sym args attrs-merge]), :doc "Given a symbol and args, returns [ ]\nwith support for `defn` style `?docstring` and `?attrs-map`.", :type :var} {:name nameable?, :file "taoensso/encore.cljc", :line 1279, :arglists ([x]), :type :var} {:name named?, :file "taoensso/encore.cljc", :line 1256, :arglists ([x]), :type :var} {:name nanoid, :file "taoensso/encore.cljc", :line 5204, :arglists ([] [len]), :doc "Returns a random \"Nano ID\" of given length, Ref. .\nUses strong randomness when possible. See also `uuid-str`, `rand-id-fn`.", :type :var} {:name nat-float?, :file "taoensso/encore.cljc", :line 1380, :arglists ([x]), :type :var} {:name nat-int?, :file "taoensso/encore.cljc", :line 1376, :arglists ([x]), :type :var} {:name nat-num?, :file "taoensso/encore.cljc", :line 1372, :arglists ([x]), :type :var} {:name nblank-str?, :file "taoensso/encore.cljc", :line 1288, :arglists ([x]), :type :var} {:name nblank?, :file "taoensso/encore.cljc", :line 1289, :arglists ([x]), :type :var} {:name neg-float?, :file "taoensso/encore.cljc", :line 1382, :arglists ([x]), :type :var} {:name neg-int?, :file "taoensso/encore.cljc", :line 1378, :arglists ([x]), :type :var} {:name neg-num?, :file "taoensso/encore.cljc", :line 1374, :arglists ([x]), :type :var} {:name nempty-str?, :file "taoensso/encore.cljc", :line 1250, :arglists ([x]), :type :var} {:name nested-merge, :file "taoensso/encore.cljc", :line 2720, :arglists ([& maps]), :doc "Like `merge` but does nested merging.\n", :type :var} {:name nested-merge-with, :file "taoensso/encore.cljc", :line 2724, :arglists ([f & maps]), :doc "Like `merge-with` but does nested merging.\n", :type :var} {:name new-object, :file "taoensso/encore.cljc", :line 2662, :arglists ([]), :type :macro} {:name newline, :file "taoensso/encore.cljc", :line 4746, :added "Encore v3.68.0 (2023-09-25)", :doc "Single system newline\n", :type :var} {:name newlines, :file "taoensso/encore.cljc", :line 4747, :added "Encore v3.68.0 (2023-09-25)", :doc "Double system newline\n", :type :var} {:name nneg?, :file "taoensso/encore.cljc", :line 1368, :arglists ([x]), :type :var} {:name nnil, :file "taoensso/encore.cljc", :line 2112, :arglists ([] [x] [x y] [x y z] [x y z & more]), :doc "Returns first non-nil arg, or nil.\n", :type :var} {:name node-paths, :file "taoensso/encore.cljc", :line 2594, :arglists ([m] [node-pred m] [node-pred m basis]), :type :var} {:name norm-str, :file "taoensso/encore.cljc", :line 4488, :arglists ([s] [form s]), :doc "Given a Unicode string, returns the normalized de/composed form.\nIt's often a good idea to normalize strings before exchange or storage,\nespecially if you're going to be querying against those string.\n\n`form` is ∈ #{:nfc :nfkc :nfd :nfkd }.\nDefaults to :nfc as per W3C recommendation.", :type :var} {:name norm-word-breaks, :file "taoensso/encore.cljc", :line 4608, :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 6705, :arglists ([rreq-or-rresp]), :type :var} {:name now-dt, :file "taoensso/encore.cljc", :line 3222, :arglists ([]), :doc "Returns current system instant as `java.util.Date`.\n", :type :var} {:name now-inst, :file "taoensso/encore.cljc", :line 3216, :arglists ([]), :added "Encore v3.66.0 (2023-08-23)", :doc "Returns current system instant as `java.time.Instant`.\n", :type :var} {:name now-nano, :file "taoensso/encore.cljc", :line 3232, :arglists ([]), :doc "Returns current value of best-resolution time source as nanoseconds.\n", :type :var} {:name now-udt, :file "taoensso/encore.cljc", :line 3227, :arglists ([]), :doc "Returns current system instant as milliseconds since Unix epoch.\n", :type :var} {:name nzero-num?, :file "taoensso/encore.cljc", :line 1370, :arglists ([x]), :type :var} {:name or-some, :file "taoensso/encore.cljc", :line 504, :arglists ([] [x] [x & next]), :added "Encore v3.67.0 (2023-09-08)", :doc "Like `or`, but returns the first non-nil form (may be falsey).\n", :type :macro} {:name parse-query-params, :file "taoensso/encore.cljc", :line 6821, :arglists ([s & [keywordize? encoding]]), :doc "Based on `ring-codec/form-decode`.\n", :type :var} {:name parse-version, :file "taoensso/encore.cljc", :line 2124, :arglists ([x]), :type :var} {:name path, :file "taoensso/encore.cljc", :line 4602, :arglists ([& parts]), :type :var} {:name perc, :file "taoensso/encore.cljc", :line 2056, :arglists ([n divisor]), :type :var} {:name pnum-complement, :file "taoensso/encore.cljc", :line 2004, :arglists ([pnum]), :type :var} {:name pnum?, :file "taoensso/encore.cljc", :line 1384, :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 5858, :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}}]), :added "Encore v3.72.0 (2023-10-24)", :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 1381, :arglists ([x]), :type :var} {:name pos-int?, :file "taoensso/encore.cljc", :line 1377, :arglists ([x]), :type :var} {:name pos-num?, :file "taoensso/encore.cljc", :line 1373, :arglists ([x]), :type :var} {:name pow, :file "taoensso/encore.cljc", :line 2018, :arglists ([n exp]), :type :var} {:name pr, :file "taoensso/encore.cljc", :line 4830, :arglists ([& args]), :added "Encore v3.98.0 (2024-04-08)", :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 4856, :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 6029, :arglists ([n-capacity f] [n-capacity fp-or-n-threads f]), :added "Encore v3.49.0 (2023-02-01)", :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 pred, :file "taoensso/encore.cljc", :line 2751, :arglists ([pred-fn]), :added "Encore v3.75.0 (2024-01-29)", :doc "Experimental, subject to change without notice.\nWraps given predicate fn to return `Pred` for use with `submap?`, etc.\nArity of predicate fn depends on context in which it'll be used.\nSee also `pred-fn`.", :type :var} {:name pred-fn, :file "taoensso/encore.cljc", :line 2759, :arglists ([pred]), :added "Encore v3.75.0 (2024-01-29)", :doc "Experimental, subject to change without notice.\nReturns unwrapped predicate fn when given `Pred`, otherwise returns nil.\nSee also `pred`.", :type :var} {:name preserve-reduced, :file "taoensso/encore.cljc", :line 1734, :arglists ([rf]), :doc "Public version of `core/preserving-reduced`.\n", :type :var} {:name print, :file "taoensso/encore.cljc", :line 4843, :arglists ([& args]), :added "Encore v3.98.0 (2024-04-08)", :doc "Like `core/print` but faster, and atomic (avoids interleaved content from different threads).\n", :type :var} {:name println, :file "taoensso/encore.cljc", :line 4848, :arglists ([& args]), :added "Encore v3.98.0 (2024-04-08)", :doc "Like `core/println` but faster, and atomic (avoids interleaved content from different threads).\n", :type :var} {:name prn, :file "taoensso/encore.cljc", :line 4835, :arglists ([& args]), :added "Encore v3.98.0 (2024-04-08)", :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 3191, :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 6394, :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 [ ] <...>) =>\n [\n \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 <...>)\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 1281, :arglists ([x]), :type :var} {:name qualified-keyword?, :file "taoensso/encore.cljc", :line 1285, :arglists ([x]), :type :var} {:name qualified-symbol?, :file "taoensso/encore.cljc", :line 1283, :arglists ([x]), :type :var} {:name queue, :file "taoensso/encore.cljc", :line 2163, :arglists ([coll] []), :doc "Returns a new `PersistentQueue`.\n", :type :var} {:name queue*, :file "taoensso/encore.cljc", :line 2170, :arglists ([& items]), :doc "Returns a new `PersistentQueue` given items.\n", :type :var} {:name queue?, :file "taoensso/encore.cljc", :line 2156, :arglists ([x]), :doc "Returns true iff given a `PersistentQueue`.\n", :type :var} {:name quick-bench, :file "taoensso/encore.cljc", :line 6362, :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 [ ] <...>) =>\n [\n \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 <...>)\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-id-fn, :file "taoensso/encore.cljc", :line 5123, :arglists ([{:keys [chars len rand-bytes-fn], :or {chars :nanoid, len 21, rand-bytes-fn secure-rand-bytes}}]), :added "Encore v3.75.0 (2024-01-29)", :doc "Returns a (fn rand-id []) that returns random id strings.\nUses strong randomness when possible.\n\nOptions include:\n `:chars` - ∈ #{ :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 3972, :arglists ([spec] [opts spec]), :doc "Takes a spec of form\n [ [ ] ...] or\n { [ ]},\nand returns a basic stateful (fn a-rate-limiter [req-id] [command req-id]).\n\nCall the limiter fn with a request id (e.g. username) by which to count/limit.\nWill return:\n - nil when allowed (all limits pass for given req-id), or\n - [ { }]\n when denied (any limits fail for given req-id).\n\nOr call the limiter fn with an additional command argument:\n `:rl/peek` - Check limits w/o incrementing count.\n `:rl/reset` - Reset all limits for given req-id.\n\nExample:\n\n (defonce my-rate-limiter\n (rate-limiter\n {\"1 per sec\" [1 1000]\n \"10 per min\" [10 60000]}))\n\n (defn send-message! [username msg-content]\n (if-let [fail (my-rate-limiter username)]\n (throw (ex-info \"Sorry, rate limited!\" {:fail fail}))\n ))", :type :var} {:name rcompare, :file "taoensso/encore.cljc", :line 5295, :arglists ([x y]), :doc "Reverse comparator.\n", :type :var} {:name re-pattern?, :file "taoensso/encore.cljc", :line 1268, :arglists ([x]), :type :var} {:name read-edn, :file "taoensso/encore.cljc", :line 4875, :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 2293, :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 1758, :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 1935, :arglists ([rf init colls]), :added "Encore v3.66.0 (2023-08-23)", :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 1822, :arglists ([rf init iterator]), :added "Encore v3.87.0 (2024-02-29)", :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 1743, :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 1884, :arglists ([rf init coll] [rf1 init1 rf2 init2 coll] [rf1 init1 rf2 init2 rf3 init3 coll]), :added "Encore v3.66.0 (2023-08-23)", :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 1749, :arglists ([rf init end] [rf init start end] [rf init start end step]), :type :var} {:name reduce-top, :file "taoensso/encore.cljc", :line 5336, :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 1837, :arglists ([rf init xs ys] [rf init xs ys not-found]), :added "Encore v3.33.0 (2022-11-15)", :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 2491, :arglists ([key-pred m]), :doc "Returns given ?map, removing keys for which (key-pred ) is truthy.\n", :type :var} {:name remove-vals, :file "taoensso/encore.cljc", :line 2492, :arglists ([val-pred m]), :doc "Returns given ?map, removing keys for which (val-pred ) is truthy.\n", :type :var} {:name rename-keys, :file "taoensso/encore.cljc", :line 2494, :arglists ([replacements m]), :doc "Returns a map like the one given, replacing keys using\ngiven { } replacements. O(min(n_replacements, n_m)).", :type :var} {:name repeatedly-into, :file "taoensso/encore.cljc", :line 2414, :arglists ([coll n f]), :doc "Like `repeatedly` but faster and `conj`s items into given collection.\n", :type :var} {:name require-telemere-if-present, :file "taoensso/encore.cljc", :line 4963, :arglists ([]), :added "Encore v3.68.0 (2023-09-25)", :doc "Experimental, subject to change without notice!\nRequires Telemere if it's present, otherwise no-ops.\nFor Cljs: needs ClojureScript >= v1.9.293, and must be placed at top of file.\nUsed in cooperation with `signal!`.", :type :macro} {:name reset!?, :file "taoensso/encore.cljc", :line 3027, :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 2997, :arglists ([atom_ val] [atom_ ks val] [atom_ ks not-found val]), :doc "Like `reset!` but supports `update-in` semantics, returns .\n", :type :var} {:name reset-in!?, :file "taoensso/encore.cljc", :line 3011, :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 3003, :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 3017, :arglists ([atom_ k new-val]), :doc "Like `reset-in!?` but optimized for single-key case.\n", :type :var} {:name resolve-sym, :file "taoensso/encore.cljc", :line 1130, :arglists ([sym] [macro-env sym] [macro-env sym may-require-ns?]), :added "Encore v3.63.0 (2023-07-31)", :doc "Returns resolved qualified Clj/s symbol, or nil.\n", :type :var} {:name revery-kv?, :file "taoensso/encore.cljc", :line 1809, :arglists ([pred coll]), :type :var} {:name revery?, :file "taoensso/encore.cljc", :line 1803, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rfirst, :file "taoensso/encore.cljc", :line 1792, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rfirst-kv, :file "taoensso/encore.cljc", :line 1798, :arglists ([pred coll]), :type :var} {:name ring-default-headers, :file "taoensso/encore.cljc", :line 6749, :arglists ([headers rresp]), :type :var} {:name ring-merge-headers, :file "taoensso/encore.cljc", :line 6750, :arglists ([headers rresp]), :type :var} {:name ring-redirect-resp, :file "taoensso/encore.cljc", :line 6758, :arglists ([url] [kind url] [kind url flash]), :type :var} {:name ring-resp-map, :file "taoensso/encore.cljc", :line 6745, :arglists ([x]), :type :var} {:name ring-set-body, :file "taoensso/encore.cljc", :line 6746, :arglists ([body rresp]), :type :var} {:name ring-set-headers, :file "taoensso/encore.cljc", :line 6748, :arglists ([headers rresp]), :type :var} {:name ring-set-status, :file "taoensso/encore.cljc", :line 6747, :arglists ([code rresp]), :type :var} {:name rnum?, :file "taoensso/encore.cljc", :line 1389, :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 4127, :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 4192, :arglists ([nmax] [nmax {:keys [init-val]}]), :added "Encore v3.45.0 (2022-12-13)", :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 4146, :arglists ([nmax] [nmax {:keys [gc-every init-val], :or {gc-every 16000.0}}]), :added "Encore v3.45.0 (2022-12-13)", :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 2020, :arglists ([n] [kind n] [kind precision n]), :type :var} {:name round0, :file "taoensso/encore.cljc", :line 2049, :arglists ([n]), :type :var} {:name round1, :file "taoensso/encore.cljc", :line 2050, :arglists ([n]), :type :var} {:name round2, :file "taoensso/encore.cljc", :line 2051, :arglists ([n]), :type :var} {:name roundn, :file "taoensso/encore.cljc", :line 2052, :arglists ([precision n]), :type :var} {:name rsome, :file "taoensso/encore.cljc", :line 1781, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rsome-kv, :file "taoensso/encore.cljc", :line 1787, :arglists ([pred coll]), :type :var} {:name run!, :file "taoensso/encore.cljc", :line 1774, :arglists ([proc coll]), :type :var} {:name run-kv!, :file "taoensso/encore.cljc", :line 1775, :arglists ([proc m]), :type :var} {:name run-kvs!, :file "taoensso/encore.cljc", :line 1776, :arglists ([proc kvs]), :type :var} {:name runner, :file "taoensso/encore.cljc", :line 6075, :arglists ([{:as opts, :keys [mode buffer-size n-threads thread-name daemon-threads? shutdown-drain-msecs], :or {mode :dropping, buffer-size 1024, n-threads 1, daemon-threads? true, shutdown-drain-msecs 5000}}]), :added "Encore v3.68.0 (2023-09-25)", :doc "Experimental, subject to change without notice!\n Returns a new stateful \"runner\" such that:\n\n (runner f)\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 (runner)\n Instructs runner to permanently stop accepting new execution requests.\n Returns promise iff runner's status changed with this call.\n Deref promise to block until all current execution requests complete.\n\nRunners provide ~similar capabilities to agents, but:\n - Take nullary fns rather than unary fns of state.\n - Have no validators or watches.\n - Have (configurable) back-pressure.\n - May execute fns in non-sequential order when n-threads > 1.\n\nThese properties make them useful as configurable async workers, etc.\n\nOptions include:\n `mode` - Mode of operation, ∈ #{:sync :blocking :dropping :sliding}.\n `buffer-size` - Size of buffer before back-pressure mechanism is engaged.\n `n-threads` - Number of threads for asynchronously executing fns.\n NB execution order may be non-sequential when n > 1.", :type :var} {:name satisfies!, :file "taoensso/encore.cljc", :line 1596, :arglists ([protocol arg] [protocol arg {:keys [msg context param ...]}] [protocol arg & {:keys [msg context param ...]}]), :added "Encore v3.51.0 (2023-03-13)", :doc "If (satisfies? protocol arg) is true, returns arg.\nOtherwise throws runtime `ExceptionInfo` with `unexpected-arg!`.\nSee `unexpected-arg!` for more info.", :type :macro} {:name satisfies?, :file "taoensso/encore.cljc", :line 1585, :arglists ([protocol x]), :added "Encore v3.75.0 (2024-01-29)", :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 4242, :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 secs, :file "taoensso/encore.cljc", :line 5401, :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 5379, :arglists ([secs]), :type :var} {:name secure-rand-bytes, :file "taoensso/encore.cljc", :line 5108, :arglists ([size]), :doc "Returns a random byte array of given size. Uses strong randomness when possible.\n", :type :var} {:name secure-rng, :file "taoensso/encore.cljc", :line 5091, :arglists ([]), :doc "Returns a 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 5096, :arglists ([long-seed]), :added "Encore v3.53.0 (2023-03-22)", :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 2810, :arglists ([src-map key-spec]), :added "Encore v3.34.0 (2022-11-16)", :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 2393, :doc "(seq-kvs {:a :A}) => (:a :A).\n", :type :var} {:name session-swap, :file "taoensso/encore.cljc", :line 6692, :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 )\nor (apply f args).", :type :var} {:name set-var-root!, :file "taoensso/encore.cljc", :line 1210, :arglists ([var-sym root-val]), :added "Encore v3.75.0 (2024-01-29)", :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 signal!, :file "taoensso/encore.cljc", :line 4974, :arglists ([{:as opts, :keys [fallback elidable? location inst uid middleware sample-rate kind ns id level when rate-limit ctx parent trace? do let data msg error run & kvs]}]), :added "Encore v3.68.0 (2023-09-25)", :doc "Experimental, subject to change without notice!\nExpands to `taoensso.telemere/signal!` call if Telemere is present,\notherwise expands to `fallback` form.\n\nMUST be used with `require-telemere-if-present`:\n\n (ns my-ns (:require [taoensso.encore :as enc]))\n (encore/require-telemere-if-present) ; At top of file, just below `ns` form\n\n (encore/signal! { :fallback (println \"Prints iff Telemere not present\")})\n\nFor more info, see:\n - Telemere `signal!`, Ref. \n - Telemere API, Ref. \n - Telemere Wiki docs, Ref. ", :type :macro} {:name simple-date-format, :file "taoensso/encore.cljc", :line 5460, :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 5455, :arglists ([pattern locale timezone]), :type :var} {:name simple-ident?, :file "taoensso/encore.cljc", :line 1280, :arglists ([x]), :type :var} {:name simple-keyword?, :file "taoensso/encore.cljc", :line 1284, :arglists ([x]), :type :var} {:name simple-symbol?, :file "taoensso/encore.cljc", :line 1282, :arglists ([x]), :type :var} {:name slurp-file-resource, :file "taoensso/encore.cljc", :line 5517, :doc "Like `slurp-resource` but caches slurps against file's last-modified udt.\n", :type :var} {:name slurp-resource, :file "taoensso/encore.cljc", :line 5487, :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 2105, :arglists ([x y] [x y & more]), :type :var} {:name some?, :file "taoensso/encore.cljc", :line 499, :arglists ([x]), :doc "Same as `core/some?` (added in Clojure v1.6).\n", :type :var} {:name sortv, :file "taoensso/encore.cljc", :line 5299, :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 1685, :arglists ([s]), :added "Encore v3.53.0 (2023-03-22)", :type :var} {:name str-?index, :file "taoensso/encore.cljc", :line 4370, :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 4231, :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 4225, :arglists ([x]), :type :var} {:name str-contains?, :file "taoensso/encore.cljc", :line 4348, :arglists ([s substr]), :type :var} {:name str-ends-with?, :file "taoensso/encore.cljc", :line 4360, :arglists ([s substr]), :type :var} {:name str-join, :file "taoensso/encore.cljc", :line 4321, :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 4566, :arglists ([separator coll]), :doc "Like `string/join` but skips nils and duplicate separators.\n", :type :var} {:name str-replace, :file "taoensso/encore.cljc", :line 4512, :arglists ([s match replacement]), :doc "Like `str/replace` but provides consistent clj/s behaviour.\n\nWorkaround for ,\n .\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 4294, :arglists ([] [acc] [acc in]), :doc "String builder reducing fn.\n", :type :var} {:name str-starts-with?, :file "taoensso/encore.cljc", :line 7113, :type :var} {:name stringy?, :file "taoensso/encore.cljc", :line 1277, :arglists ([x]), :type :var} {:name submap?, :file "taoensso/encore.cljc", :line 2768, :arglists ([m sub]), :doc "Returns true iff `sub` is a (possibly nested) submap of `m`,\ni.e. iff every (nested) value in `sub` has the same (nested) value in `m`.\nUses stack recursion so supports only limited nesting.", :type :var} {:name submaps?, :file "taoensso/encore.cljc", :line 2799, :arglists ([maps subs]), :added "Encore v3.98.0 (2024-04-08)", :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 swap-in!, :file "taoensso/encore.cljc", :line 3173, :arglists ([atom_ f] [atom_ ks f] [atom_ ks not-found f]), :doc "Like `swap!` but supports `update-in` semantics and `swapped`.\nReturns or :\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 3183, :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 3043, :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 3062, :arglists ([x]), :doc "Returns true iff given `Swapped` argument.\n", :type :var} {:name takev, :file "taoensso/encore.cljc", :line 2387, :arglists ([n coll]), :type :var} {:name test-fixtures, :file "taoensso/encore.cljc", :line 1221, :arglists ([fixtures-map]), :added "Encore v3.31.0 (2022-10-27)", :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 5034, :arglists ([& body]), :added "Encore v3.48.0 (2023-01-25)", :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 5026, :arglists ([init-val-fn]), :added "Encore v3.48.0 (2023-01-25)", :doc "Low-level, see `thread-local` instead.\n", :type :var} {:name thread-local-proxy, :file "taoensso/encore.cljc", :line 5022, :arglists ([& body]), :doc "Low-level, see `thread-local` instead.\n", :type :macro} {:name throwable?, :file "taoensso/encore.cljc", :line 1274, :arglists ([x]), :type :var} {:name throws, :file "taoensso/encore.cljc", :line 1028, :arglists ([form] [kind form] [kind pattern form]), :added "Encore v3.31.0 (2022-10-27)", :doc "Evals `form` and if it throws an error that matches given criteria using\n`matching-error`, returns the matching error. Otherwise returns nil.\n\nSee also `matching-error`, `throws?`.", :type :macro} {:name throws?, :file "taoensso/encore.cljc", :line 1039, :arglists ([form] [kind form] [kind pattern form]), :added "Encore v3.31.0 (2022-10-27)", :doc "Evals `form` and if it throws an error that matches given criteria using\n`matching-error`, returns true. Otherwise returns false.\n\nUseful for unit tests, e.g.:\n (is (throws? {:a :b} (throw (ex-info \"Test\" {:a :b :c :d}))))\n\nSee also `matching-error`, `throws`.", :type :macro} {:name time-ms, :file "taoensso/encore.cljc", :line 6354, :arglists ([& body]), :doc "Returns number of milliseconds it took to execute body.\n", :type :macro} {:name time-ns, :file "taoensso/encore.cljc", :line 6358, :arglists ([& body]), :doc "Returns number of nanoseconds it took to execute body.\n", :type :macro} {:name timeout-future?, :file "taoensso/encore.cljc", :line 7221, :arglists ([x]), :type :var} {:name top, :file "taoensso/encore.cljc", :line 5369, :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 5360, :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 1264, :arglists ([x]), :type :var} {:name try*, :file "taoensso/encore.cljc", :line 906, :arglists ([expr* catch-clauses* ?finally-clause]), :added "Encore v3.67.0 (2023-09-08)", :doc "Like `try`, but `catch` clause class may be:\n `:ex-info` - Catches only `ExceptionInfo`\n `:common` - Catches `js/Error` (Cljs), `Exception` (Clj)\n `:all` - Catches `:default` (Cljs), `Throwable` (Clj)\n `:all-but-critical` - Catches `:default` (Cljs), `Exception` and `AssertionError` (Clj)\n\nAddresses CLJ-1293 and the fact that `AssertionError`s are typically NON-critical\n(so desirable to catch, in contrast to other `Error` classes).", :type :macro} {:name try-eval, :file "taoensso/encore.cljc", :line 209, :arglists ([form]), :added "Encore v3.50.0 (2023-03-07)", :doc "If `form` can be successfully evaluated at macro-expansion time, expands to `form`.\nOtherwise expands to `nil`.", :type :macro} {:name udt->inst, :file "taoensso/encore.cljc", :line 3243, :arglists ([msecs-since-epoch]), :added "Encore v3.98.0 (2024-04-08)", :doc "Returns given milliseconds since Unix epoch as `java.time.Instant`.\n", :type :var} {:name udt?, :file "taoensso/encore.cljc", :line 3280, :arglists ([x]), :type :var} {:name unexpected-arg!, :file "taoensso/encore.cljc", :line 140, :arglists ([arg] [arg {:keys [msg context param expected ...]}] [arg & {:keys [msg context param expected ...]}]), :added "Encore v3.51.0 (2023-03-13)", :doc "Throws runtime `ExceptionInfo` to indicate an unexpected argument.\nTakes optional kvs for merging into exception's data map.\n\n (let [mode :unexpected]\n (case mode\n :read (do <...>)\n :write (do <...>)\n (unexpected-arg! mode\n :context `my-function\n :param 'mode\n :expected #{:read :write}))) =>\n\n Unexpected argument: :unexpected\n {:arg {:value :unexpected, :type clojure.lang.Keyword},\n :context 'taoensso.encore/my-function\n :param 'mode\n :expected #{:read :write}}", :type :var} {:name update-in, :file "taoensso/encore.cljc", :line 2548, :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 1196, :arglists ([var-sym update-fn]), :added "Encore v3.68.0 (2023-09-25)", :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] )) => \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 1273, :arglists ([x]), :type :var} {:name url-decode, :file "taoensso/encore.cljc", :line 6786, :arglists ([s & [encoding]]), :doc "Stolen from .\n", :type :var} {:name url-encode, :file "taoensso/encore.cljc", :line 6773, :arglists ([s & [encoding]]), :doc "Based on .\n", :type :var} {:name utf8-ba->str, :file "taoensso/encore.cljc", :line 1684, :arglists ([ba]), :added "Encore v3.53.0 (2023-03-22)", :type :var} {:name uuid, :file "taoensso/encore.cljc", :line 4617, :arglists ([]), :added "Encore v3.75.0 (2024-01-29)", :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 4645, :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 1286, :arglists ([x]), :type :var} {:name vec3?, :file "taoensso/encore.cljc", :line 1287, :arglists ([x]), :type :var} {:name vinterleave-all, :file "taoensso/encore.cljc", :line 2636, :arglists ([colls] [c1 c2] [c1 c2 c3] [c1 c2 c3 & colls]), :added "Encore v3.66.0 (2023-08-23) for !=2 arities", :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 5825, :arglists ([]), :added "Encore v3.72.0 (2023-10-24)", :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 2365, :arglists ([v]), :type :var} {:name vrest, :file "taoensso/encore.cljc", :line 2366, :arglists ([v]), :type :var} {:name vsplit-first, :file "taoensso/encore.cljc", :line 2368, :arglists ([v]), :type :var} {:name vsplit-last, :file "taoensso/encore.cljc", :line 2367, :arglists ([v]), :type :var} {:name when, :file "taoensso/encore.cljc", :line 300, :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 286, :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 310, :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 320, :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 with-dynamic-assertion-data, :file "taoensso/encore.cljc", :line 7656, :arglists ([data & body]), :deprecated "v1.7.0 (2022-11-16)", :doc "Prefer `with-data`\n", :type :macro} {:name with-truss-data, :file "taoensso/encore.cljc", :line 732, :arglists ([data & body]), :doc "Executes body with dynamic assertion data bound to given value.\nThis data will be included in any violation errors thrown by body.", :type :macro} {:name without-meta, :file "taoensso/encore.cljc", :line 2103, :arglists ([x]), :type :var} {:name xdistinct, :file "taoensso/encore.cljc", :line 2431, :arglists ([] [keyfn]), :doc "Returns a stateful transducer like (core/distinct) that supports an optional\nkey function. Retains only items with distinct (keyfn ).", :type :var} {:name zero-num?, :file "taoensso/encore.cljc", :line 1369, :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 - Fn to put/coerce/transform\n\nType affixes may be used for clarity:\n - - m-users, v-users, n-users, etc. (also nusers when unambiguous)\n - - 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 - Fn to put/coerce/transform\n\nType affixes may be used for clarity:\n - - m-users, v-users, n-users, etc. (also nusers when unambiguous)\n - - 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 2011, :arglists ([x y z]), :type :macro} {:name <=*, :file "taoensso/encore.cljc", :line 2009, :arglists ([x y z]), :type :macro} {:name >*, :file "taoensso/encore.cljc", :line 2012, :arglists ([x y z]), :type :macro} {:name >=*, :file "taoensso/encore.cljc", :line 2010, :arglists ([x y z]), :type :macro} {:name a-utf8-str, :file "taoensso/encore.cljc", :line 4221, :doc "Example UTF8 string for tests, etc.\n", :type :var} {:name abbreviate-ns, :file "taoensso/encore.cljc", :line 4700, :arglists ([x] [n-full x]), :added "Encore v3.68.0 (2023-09-25)", :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 2019, :arglists ([n]), :type :var} {:name after-timeout, :file "taoensso/encore.cljc", :line 7253, :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 6493, :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]), :added "Encore v3.74.0 (2023-11-06)", :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 :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 1993, :arglists ([x y] [signf x y]), :type :var} {:name as-?bool, :file "taoensso/encore.cljc", :line 1454, :arglists ([x]), :type :var} {:name as-?email, :file "taoensso/encore.cljc", :line 1462, :arglists ([?s] [max-len ?s]), :type :var} {:name as-?float, :file "taoensso/encore.cljc", :line 1439, :arglists ([x]), :type :var} {:name as-?inst, :file "taoensso/encore.cljc", :line 3282, :arglists ([x]), :added "Encore v3.98.0 (2024-04-08)", :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 1428, :arglists ([x]), :type :var} {:name as-?kw, :file "taoensso/encore.cljc", :line 1416, :arglists ([x]), :type :var} {:name as-?name, :file "taoensso/encore.cljc", :line 1417, :arglists ([x]), :type :var} {:name as-?nat-float, :file "taoensso/encore.cljc", :line 1448, :arglists ([x]), :type :var} {:name as-?nat-int, :file "taoensso/encore.cljc", :line 1446, :arglists ([x]), :type :var} {:name as-?nblank, :file "taoensso/encore.cljc", :line 1415, :arglists ([x]), :type :var} {:name as-?nblank-trim, :file "taoensso/encore.cljc", :line 1424, :arglists ([x]), :type :var} {:name as-?nemail, :file "taoensso/encore.cljc", :line 1469, :arglists ([?s] [max-len ?s]), :type :var} {:name as-?nempty-str, :file "taoensso/encore.cljc", :line 1423, :arglists ([x]), :type :var} {:name as-?nzero, :file "taoensso/encore.cljc", :line 1414, :arglists ([x]), :type :var} {:name as-?pnum, :file "taoensso/encore.cljc", :line 1451, :arglists ([x]), :type :var} {:name as-?pos-float, :file "taoensso/encore.cljc", :line 1449, :arglists ([x]), :type :var} {:name as-?pos-int, :file "taoensso/encore.cljc", :line 1447, :arglists ([x]), :type :var} {:name as-?qname, :file "taoensso/encore.cljc", :line 1418, :arglists ([x]), :type :var} {:name as-?rnum, :file "taoensso/encore.cljc", :line 1452, :arglists ([x]), :type :var} {:name as-?udt, :file "taoensso/encore.cljc", :line 3316, :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 1526, :arglists ([x]), :type :var} {:name as-email, :file "taoensso/encore.cljc", :line 1494, :arglists ([x] [n x]), :type :var} {:name as-float, :file "taoensso/encore.cljc", :line 1510, :arglists ([x]), :type :var} {:name as-inst, :file "taoensso/encore.cljc", :line 3341, :arglists ([x]), :type :var} {:name as-int, :file "taoensso/encore.cljc", :line 1503, :arglists ([x]), :type :var} {:name as-kw, :file "taoensso/encore.cljc", :line 1490, :arglists ([x]), :type :var} {:name as-name, :file "taoensso/encore.cljc", :line 1491, :arglists ([x]), :type :var} {:name as-nat-float, :file "taoensso/encore.cljc", :line 1512, :arglists ([x]), :type :var} {:name as-nat-int, :file "taoensso/encore.cljc", :line 1505, :arglists ([x]), :type :var} {:name as-nblank, :file "taoensso/encore.cljc", :line 1487, :arglists ([x]), :type :var} {:name as-nblank-trim, :file "taoensso/encore.cljc", :line 1488, :arglists ([x]), :type :var} {:name as-nemail, :file "taoensso/encore.cljc", :line 1498, :arglists ([x] [n x]), :type :var} {:name as-nempty-str, :file "taoensso/encore.cljc", :line 1489, :arglists ([x]), :type :var} {:name as-nzero, :file "taoensso/encore.cljc", :line 1486, :arglists ([x]), :type :var} {:name as-pnum, :file "taoensso/encore.cljc", :line 1517, :arglists ([x]), :type :var} {:name as-pnum!, :file "taoensso/encore.cljc", :line 1522, :arglists ([x]), :type :var} {:name as-pnum-complement, :file "taoensso/encore.cljc", :line 2005, :arglists ([x]), :type :var} {:name as-pos-float, :file "taoensso/encore.cljc", :line 1514, :arglists ([x]), :type :var} {:name as-pos-int, :file "taoensso/encore.cljc", :line 1507, :arglists ([x]), :type :var} {:name as-qname, :file "taoensso/encore.cljc", :line 1492, :arglists ([x]), :type :var} {:name as-rnum, :file "taoensso/encore.cljc", :line 1519, :arglists ([x]), :type :var} {:name as-rnum!, :file "taoensso/encore.cljc", :line 1524, :arglists ([x]), :type :var} {:name as-udt, :file "taoensso/encore.cljc", :line 3343, :arglists ([x]), :type :var} {:name assert-min-encore-version, :file "taoensso/encore.cljc", :line 2131, :arglists ([min-version]), :doc "Version check for dependency conflicts, etc.\n", :type :var} {:name assoc-nx, :file "taoensso/encore.cljc", :line 2287, :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 2275, :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 2281, :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 1263, :arglists ([x]), :type :var} {:name bench, :file "taoensso/encore.cljc", :line 6419, :arglists ([nlaps opts & body]), :type :macro} {:name binding, :file "taoensso/encore.cljc", :line 358, :arglists ([bindings & body]), :added "Encore v3.98.0 (2024-04-08)", :doc "For Clj: faster version of `core/binding`.\nFor Cljs: identical to `core/binding`.", :type :macro} {:name boolean?, :file "taoensso/encore.cljc", :line 1253, :arglists ([x]), :type :var} {:name cache, :file "taoensso/encore.cljc", :line 3506, :arglists ([f] [{:keys [size ttl-ms gc-every], :as opts} f]), :added "Encore v3.36.0 (2022-11-18)", :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 many msecs.\n - `size` ; Restrict cache size to many items at the next garbage\n ; collection (GC).\n\n - `gc-every` ; Run garbage collection (GC) approximately once every\n ; 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 7223, :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 1271, :arglists ([x]), :type :var} {:name case-eval, :file "taoensso/encore.cljc", :line 558, :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 4453, :arglists ([s1 s2]), :added "Encore v3.25.0 (2022-10-13)", :doc "Returns true iff given strings are equal, ignoring case.\n", :type :var} {:name catching, :file "taoensso/encore.cljc", :line 7719, :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 catching-rf, :file "taoensso/encore.cljc", :line 1060, :arglists ([rf] [error-fn rf]), :added "Encore v3.32.0 (2022-11-07)", :doc "Returns wrapper around given reducing function `rf` so that if `rf`\nthrows, (error-fn ) will be called.\n\nThe default `error-fn` will rethrow the original error, wrapped in\nextra contextual information to aid debugging.\n\nSee also `catching-xform`.", :type :var} {:name catching-xform, :file "taoensso/encore.cljc", :line 1093, :arglists ([error-fn xform] [xform]), :added "Encore v3.32.0 (2022-11-07)", :doc "Like `catching-rf`, but applies to a transducer (`xform`).\n\nMakes debugging transductions much easier by greatly improving\nthe information provided in any errors thrown by `xform` or the\nreducing fn:\n\n (transduce\n (catching-xform (comp (filter even?) (map inc))) ; Modified xform\n \n <...>)", :type :var} {:name chan?, :file "taoensso/encore.cljc", :line 1300, :arglists ([x]), :doc "Returns true iff given a `clojure.core.async` channel.\n", :type :var} {:name chance, :file "taoensso/encore.cljc", :line 2070, :arglists ([prob]), :doc "Returns true with given probability ∈ ℝ[0,1].\n", :type :var} {:name check-all, :file "taoensso/encore.cljc", :line 1569, :arglists ([test] [test & more]), :doc "Returns all logical false/throwing expressions (ids/forms), or nil.\n", :type :macro} {:name check-some, :file "taoensso/encore.cljc", :line 1560, :arglists ([test & more] [test]), :doc "Returns first logical false/throwing expression (id/form), or nil.\n", :type :macro} {:name clamp, :file "taoensso/encore.cljc", :line 2000, :arglists ([nmin nmax n]), :type :var} {:name clamp*, :file "taoensso/encore.cljc", :line 2015, :arglists ([nmin nmax n]), :type :macro} {:name clamp-float, :file "taoensso/encore.cljc", :line 2002, :arglists ([nmin nmax n]), :type :var} {:name clamp-int, :file "taoensso/encore.cljc", :line 2001, :arglists ([nmin nmax n]), :type :var} {:name compile-if, :file "taoensso/encore.cljc", :line 196, :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 206, :arglists ([test & body]), :type :macro} {:name cond, :file "taoensso/encore.cljc", :line 432, :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\n :if-let [y \"y\"\n z nil]\n \"y and z were both truthy\"\n\n :if-some [y \"y\"\n z nil]\n \"y and z were both non-nil\")\n\n`:let` support inspired by .\nSimple, flexible way to eliminate deeply-nested control flow code.", :type :macro} {:name cond!, :file "taoensso/encore.cljc", :line 456, :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 2261, :arglists ([] [coll] [coll x] [coll x & more]), :doc "Conjoins each non-nil value.\n", :type :var} {:name conj-when, :file "taoensso/encore.cljc", :line 2267, :arglists ([] [coll] [coll x] [coll x & more]), :doc "Conjoins each truthy value.\n", :type :var} {:name const-str=, :file "taoensso/encore.cljc", :line 4675, :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 2572, :arglists ([coll ks k] [coll ks]), :type :var} {:name convey-reduced, :file "taoensso/encore.cljc", :line 1733, :arglists ([x]), :type :var} {:name count-words, :file "taoensso/encore.cljc", :line 4614, :arglists ([s]), :type :var} {:name counter, :file "taoensso/encore.cljc", :line 4052, :arglists ([] [init]), :doc "Returns a fast atomic Counter with `init` initial int value:\n- ( ) -> add 1, return old val\n- ( ) -> add n, return old val\n\nExperimental 3-arity version takes an `action`:\n :add, :set, :set-get, :get-set, :get-add, :add-get", :type :var} {:name declare-remote, :file "taoensso/encore.cljc", :line 590, :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 527, :arglists ([sym & args]), :added "Encore v3.67.0 (2023-09-08)", :doc "Like `core/def` but supports attrs map.\n", :type :macro} {:name defalias, :file "taoensso/encore.cljc", :line 640, :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 684, :arglists ([{:keys [alias src attrs body]} ...]), :added "Encore v3.58.0 (2023-04-09)", :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 7165, :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 3769, :arglists ([sym cache-opts & body]), :added "Encore v3.36.0 (2022-11-18)", :doc "Defines a cached function.\nLike (def (cache )), 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 536, :arglists ([sym & args]), :doc "Like `core/defonce` but supports docstring and attrs map.\n", :type :macro} {:name defstub, :file "taoensso/encore.cljc", :line 6916, :arglists ([sym]), :doc "Experimental, subject to change without notice!!\nDeclares a stub var that can be initialized from any namespace with\n`unstub-`.\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 7271, :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 1261, :arglists ([x]), :type :var} {:name dissoc-in, :file "taoensso/encore.cljc", :line 2580, :arglists ([m ks dissoc-k] [m ks dissoc-k & more] [m ks]), :type :var} {:name distinct-elements?, :file "taoensso/encore.cljc", :line 2389, :arglists ([x]), :type :var} {:name doto-cond, :file "taoensso/encore.cljc", :line 569, :arglists ([[sym x] & clauses]), :doc "Cross between `doto`, `cond->` and `as->`.\n", :type :macro} {:name editable?, :file "taoensso/encore.cljc", :line 1259, :arglists ([x]), :type :var} {:name encore-version, :file "taoensso/encore.cljc", :line 122, :type :var} {:name ensure-set, :file "taoensso/encore.cljc", :line 2175, :arglists ([x]), :type :var} {:name ensure-vec, :file "taoensso/encore.cljc", :line 2174, :arglists ([x]), :type :var} {:name error?, :file "taoensso/encore.cljc", :line 776, :arglists ([x]), :doc "Returns true iff given platform error (`Throwable` or `js/Error`).\n", :type :var} {:name ex-cause, :file "taoensso/encore.cljc", :line 797, :arglists ([x]), :added "Encore v3.41.0 (2022-12-03)", :doc "Same as `core/ex-cause` (added in Clojure v1.10).\n", :type :var} {:name ex-data, :file "taoensso/encore.cljc", :line 790, :arglists ([x]), :added "Encore v3.98.0 (2024-04-08)", :doc "Same as `core/ex-data` (added in Clojure v1.4).\n", :type :var} {:name ex-message, :file "taoensso/encore.cljc", :line 783, :arglists ([x]), :added "Encore v3.41.0 (2022-12-03)", :doc "Same as `core/ex-message` (added in Clojure v1.10).\n", :type :var} {:name ex-root, :file "taoensso/encore.cljc", :line 804, :arglists ([x]), :added "Encore v3.98.0 (2024-04-08)", :doc "Returns root cause of given platform error.\n", :type :var} {:name exp-backoff, :file "taoensso/encore.cljc", :line 2058, :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 explode-keyword, :file "taoensso/encore.cljc", :line 1641, :arglists ([k]), :type :var} {:name fast-merge, :file "taoensso/encore.cljc", :line 2728, :arglists ([maps] [m1 m2] [m1 m2 m3] [m1 m2 m3 m4]), :doc "Like `core/merge` but faster.\nDoesn't support zero arity, single arity case takes a collection of maps.", :type :var} {:name filter-keys, :file "taoensso/encore.cljc", :line 2475, :arglists ([key-pred m]), :doc "Returns given ?map, retaining only keys for which (key-pred ) is truthy.\n", :type :var} {:name filter-vals, :file "taoensso/encore.cljc", :line 2483, :arglists ([val-pred m]), :doc "Returns given ?map, retaining only keys for which (val-pred ) is truthy.\n", :type :var} {:name finite-num?, :file "taoensso/encore.cljc", :line 1321, :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 1353, :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 3458, :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 2100, :arglists ([x]), :doc "Like `force` for refs.\n", :type :var} {:name force-var, :file "taoensso/encore.cljc", :line 2101, :arglists ([x]), :doc "Like `force` for vars.\n", :type :var} {:name format, :file "taoensso/encore.cljc", :line 4557, :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 4545, :arglists ([fmt args] [xform fmt args]), :type :var} {:name format-inst, :file "taoensso/encore.cljc", :line 3401, :arglists ([inst]), :added "Encore v3.98.0 (2024-04-08)", :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 3351, :arglists ([] [{:keys [formatter]}]), :added "Encore v3.98.0 (2024-04-08)", :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 string.\n\nOptions:\n `:zone` (Clj only) `java.time.ZoneOffset` (defaults to UTC).\n `:formatter`\n `java.time.format.DateTimeFormatter` (Clj) or\n `goog.i18n.DateTimeFormat` (Cljs),\n\n Defaults to `ISO8601` formatter (`YYYY-MM-DDTHH:mm:ss.sssZ`),\n e.g.: \"2011-12-03T10:15:130Z\".", :type :var} {:name format-nsecs, :file "taoensso/encore.cljc", :line 6335, :arglists ([nanosecs]), :added "Encore v3.98.0 (2024-04-08)", :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 6797, :arglists ([m]), :type :var} {:name future*, :file "taoensso/encore.cljc", :line 5961, :arglists ([form] [executor-service form]), :added "Encore v3.72.0 (2023-10-24)", :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 2237, :arglists ([m k] [m k not-found] [m k1 k2 not-found] [m k1 k2 k3 not-found]), :added "Encore v3.82.0 (2024-02-23)", :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 first\n 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 5741, :arglists ([{:keys [as default return]} spec] [{:keys [as default return spec], :or {as :str, return :value}}]), :added "Encore v3.75.0 (2024-01-29)", :doc "Cross-platform util for embedding flexible environmental config during\nmacro expansion. Used by other Taoensso libraries.\n\nGiven a const kw/string id or vector of desc-priority alternative ids,\nparse and return the first of the following that exists:\n - JVM property value for id (\"prop\")\n - Environment variable value for id (\"env\")\n - Classpath resource content for id (\"res\")\n\nIds may include optional segment in `<>` tag (e.g. `<.edn>`).\nIds may include `<.?platform.?>` tag for auto replacement, useful\nfor supporting platform-specific config.\n\nSearch order: desc by combined [alt-index platform(y/n) optional(y/n)].\n\n(get-env {:as :edn} [:my-app/alt1<.platform><.edn> :my-app/alt2])\nwill parse and return the first of the following that exists:\n\n 1. Alt1 +platform +optional (content type)\n 1a. `my-app.alt1.clj.edn` JVM property value\n 1b. `MY_APP_ALT1_CLJ_EDN` environment variable value\n 1c. `my-app.alt1.clj.edn` classpath resource content\n\n 2. Alt1 +platform -optional (content type)\n 2a. `my-app.alt1.clj` JVM property value\n 2b. `MY_APP_ALT1_CLJ` environment variable value\n 2c. `my-app.alt1.clj` classpath resource content\n\n 3. Alt1 -platform +optional (content type)\n 3a. `my-app.alt1.edn` JVM property value\n 3b. `MY_APP_ALT1_EDN` environment variable value\n 3c. `my-app.alt1.edn` classpath resource content\n\n 4. Alt1 -platform -optional (content type)\n 4a. `my-app.alt1` JVM property value\n 4b. `MY_APP_ALT1` environment variable value\n 4c. `my-app.alt1` classpath resource content\n\n 5. Alt2\n 5a. `my-app.alt2` JVM property value\n 5b. `MY_APP_ALT2` environment variable value\n 5c. `my-app.alt2` classpath resource content\n\nOptions:\n `:as` - Parse found value as given type ∈ #{:str :bool :edn} (default :str).\n `:default` - Fallback to return if no value found during search (default nil).\n `:return` - Return type ∈ #{:value :map :debug} (default :value).\n TIP: Use `:debug` to inspect/verify search behaviour!\n\nResult must be something that can be safely embedded in code during\nmacro-expansion. Symbols in edn will be evaluated during expansion.", :type :macro} {:name get-substr-by-idx, :file "taoensso/encore.cljc", :line 4386, :arglists ([s start-idx] [s start-idx end-idx]), :doc "Returns ?substring from given string.\n\nLike `subs` but:\n - Provides consistent clj/s behaviour.\n - Never throws (snaps to valid indexes).\n - Indexes may be -ive (=> indexed from end of string).\n\nReturns nil when requested substring would be empty.", :type :var} {:name get-substr-by-len, :file "taoensso/encore.cljc", :line 4424, :arglists ([s start-idx] [s start-idx sub-len]), :doc "Returns ?substring from given string.\nLike `get-substr-by-idx`, but takes a substring-length 3rd argument.", :type :var} {:name get-subvec, :file "taoensso/encore.cljc", :line 2306, :arglists ([v start] [v start end]), :doc "Like `subvec` but never throws (snaps to valid start and end indexes).\n", :type :var} {:name get-subvector, :file "taoensso/encore.cljc", :line 2323, :arglists ([v start] [v start length]), :doc "Like `get-subvec` but:\n- Takes `length` instead of `end` (index).\n- -ive `start` => index from right of vector.", :type :var} {:name get-truss-data, :file "taoensso/encore.cljc", :line 734, :arglists ([]), :doc "Returns current value of dynamic assertion data.\n", :type :var} {:name get-win-loc, :file "taoensso/encore.cljc", :line 6438, :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 2227, :arglists ([m k] [m k not-found] [m k1 k2 not-found] [m k1 k2 k3 not-found]), :added "Encore v3.67.0 (2023-09-08)", :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, :file "taoensso/encore.cljc", :line 728, :arglists ([x] [pred (:in) x] [pred (:in) x & more-xs]), :doc "Takes a pred and one or more vals. Tests pred against each val,\ntrapping errors. If any pred test fails, throws a detailed assertion error.\nOtherwise returns input val/vals for convenient inline-use/binding.\n\nRespects *assert* value so tests can be elided from production for zero\nruntime costs.\n\nProvides a small, simple, flexible feature subset to alternative tools like\nclojure.spec, core.typed, prismatic/schema, etc.\n\n ;; Will throw a detailed error message on invariant violation:\n (fn my-fn [x] (str/trim (have string? x)))\n\nYou may attach arbitrary debug info to assertion violations like:\n `(have string? x :data {:my-arbitrary-debug-info \"foo\"})`\n\nRe: use of Truss assertions within other macro bodies:\n Due to CLJ-865, call site information (e.g. line number) of\n outer macro will unfortunately be lost.\n\n See `keep-callsite` util for a workaround.\n\nSee also `have?`, `have!`.", :type :macro} {:name have!, :file "taoensso/encore.cljc", :line 729, :arglists ([x] [pred (:in) x] [pred (:in) x & more-xs]), :doc "Like `have` but ignores *assert* value (so can never be elided). Useful\nfor important conditions in production (e.g. security checks).", :type :macro} {:name have!?, :file "taoensso/encore.cljc", :line 731, :arglists ([x] [pred (:in) x] [pred (:in) x & more-xs]), :doc "Specialized cross between `have?` and `have!`. Not used often but can be\nhandy for semantic clarification and/or to improve multi-val performance\nwhen the return vals aren't necessary.\n\n**WARNING**: Do NOT use in :pre/:post conds since those are ALWAYS subject\nto *assert*, directly contradicting the intention of the bang (`!`) here.", :type :macro} {:name have-core-async?, :file "taoensso/encore.cljc", :line 1291, :doc "Is `clojure.core.async` present (not necessarily loaded)?\n", :type :var} {:name have-telemere?, :file "taoensso/encore.cljc", :line 4957, :added "Encore v3.68.0 (2023-09-25)", :doc "Is `taoensso.telemere` present (not necessarily loaded)?\n", :type :var} {:name have?, :file "taoensso/encore.cljc", :line 730, :arglists ([x] [pred (:in) x] [pred (:in) x & more-xs]), :doc "Like `have` but returns `true` on successful tests. In particular, this\ncan be handy for use with :pre/:post conditions. Compare:\n (fn my-fn [x] {:post [(have nil? %)]} nil) ; {:post [nil]} FAILS\n (fn my-fn [x] {:post [(have? nil? %)]} nil) ; {:post [true]} passes as intended", :type :macro} {:name ident?, :file "taoensso/encore.cljc", :line 1278, :arglists ([x]), :type :var} {:name identical-kw?, :file "taoensso/encore.cljc", :line 546, :arglists ([x y]), :added "Encore v3.67.0 (2023-09-08)", :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 344, :arglists ([then & [else]]), :type :macro} {:name if-cljs, :file "taoensso/encore.cljc", :line 345, :arglists ([then & [else]]), :type :macro} {:name if-let, :file "taoensso/encore.cljc", :line 218, :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 270, :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 244, :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 1255, :arglists ([x]), :type :var} {:name inst->udt, :file "taoensso/encore.cljc", :line 3270, :arglists ([inst]), :added "Encore v3.98.0 (2024-04-08)", :doc "Returns given `js/Date` as milliseconds since Unix epoch.\n", :type :var} {:name inst?, :file "taoensso/encore.cljc", :line 3207, :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 1618, :arglists ([class arg] [class arg {:keys [msg context param ...]}] [class arg & {:keys [msg context param ...]}]), :added "Encore v3.51.0 (2023-03-13)", :doc "If (instance? class arg) is true, returns arg.\nOtherwise throws runtime `ExceptionInfo` with `unexpected-arg!`.\nSee `unexpected-arg!` for more info.", :type :macro} {:name int?, :file "taoensso/encore.cljc", :line 1335, :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 2613, :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 2423, :arglists ([to!] [to! from] [to! xform from]), :doc "Like `core/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 2399, :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 4657, :arglists ([& xs]), :doc "Simple Hiccup-like string templating to complement Tempura.\n", :type :var} {:name invert-map, :file "taoensso/encore.cljc", :line 2451, :arglists ([m]), :doc "Returns given ?map with keys and vals inverted, dropping non-unique vals!\n", :type :var} {:name is!, :file "taoensso/encore.cljc", :line 1543, :arglists ([x] [pred x] [pred x data]), :doc "Lightweight `have!` that provides less diagnostic info.\n", :type :var} {:name ITimeoutFuture, :file "taoensso/encore.cljc", :line 7173, :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 7155, :type :protocol, :members ({:name -schedule-timeout, :arglists ([_ msecs f]), :type :var})} {:name keep-callsite, :file "taoensso/encore.cljc", :line 1148, :arglists ([& body]), :added "Encore v3.61.0 (2023-07-07)", :doc "The long-standing CLJ-865 unfortunately means that it's currently\nnot possible for an inner macro to access the &form metadata of an\nouter macro.\n\nThis means that inner macros lose callsite information like the\nline number of the outer macro.\n\nThis util offers a workaround for macro authors:\n\n (defmacro inner [] (meta &form))\n (defmacro outer1 [] `(inner))\n (defmacro outer2 [] (keep-callsite `(inner)))\n\n (inner) => {:line _, :column _}\n (outer1) => nil\n (outer2) => {:line _, :column _}", :type :macro} {:name keys-by, :file "taoensso/encore.cljc", :line 2524, :arglists ([f coll]), :doc "Returns {(f x) x} ?map for xs in `coll`.\n", :type :var} {:name ks-nnil?, :file "taoensso/encore.cljc", :line 2538, :arglists ([ks m]), :type :var} {:name ks<=, :file "taoensso/encore.cljc", :line 2536, :arglists ([ks m]), :type :var} {:name ks=, :file "taoensso/encore.cljc", :line 2535, :arglists ([ks m]), :type :var} {:name ks>=, :file "taoensso/encore.cljc", :line 2537, :arglists ([ks m]), :type :var} {:name lazy-seq?, :file "taoensso/encore.cljc", :line 1267, :arglists ([x]), :type :var} {:name log, :file "taoensso/encore.cljc", :line 6431, :type :var} {:name logf, :file "taoensso/encore.cljc", :line 6434, :arglists ([fmt & xs]), :type :var} {:name logp, :file "taoensso/encore.cljc", :line 6432, :arglists ([& xs]), :type :var} {:name map-entry, :file "taoensso/encore.cljc", :line 2148, :arglists ([k v]), :added "Encore v3.75.0 (2024-01-29)", :doc "Returns a `MapEntry` with given key and value.\n", :type :var} {:name map-keys, :file "taoensso/encore.cljc", :line 2459, :arglists ([key-fn m]), :doc "Returns given ?map with (key-fn ) keys.\n", :type :var} {:name map-vals, :file "taoensso/encore.cljc", :line 2467, :arglists ([val-fn m]), :doc "Returns given ?map with (val-fn ) vals.\n", :type :var} {:name mapply, :file "taoensso/encore.cljc", :line 2394, :arglists ([f & args]), :doc "Like `apply` but calls `seq-kvs` on final arg.\n", :type :var} {:name matching-error, :file "taoensso/encore.cljc", :line 970, :arglists ([err] [kind err] [kind pattern err]), :added "Encore v3.70.0 (2023-10-17)", :doc "Given a platform error and criteria, returns the error if it matches\nall criteria. Otherwise returns nil.\n\n`kind` may be:\n - A predicate function, (fn match? [x]) -> bool\n - A class (e.g. `ArithmeticException`, `AssertionError`, etc.)\n - `:all` => any platform error (Throwable or js/Error, etc.)\n - `:common` => common platform error (Exception or js/Error)\n - `:ex-info` => an `IExceptionInfo` as created by `ex-info`\n - A set of `kind`s as above, at least one of which must match\n\n`pattern` may be:\n - A string or Regex against which `ex-message` must match\n - A map against which `ex-data` must match using `submap?`\n - A set of `pattern`s as above, at least one of which must match\n\nWhen an error with (nested) causes doesn't match, a match will be attempted\nagainst its (nested) causes.\n\nLow-level util, see also `throws`, `throws?`.", :type :var} {:name max*, :file "taoensso/encore.cljc", :line 2014, :arglists ([n1 n2]), :type :macro} {:name max-long, :file "taoensso/encore.cljc", :line 1398, :type :var} {:name memoize, :file "taoensso/encore.cljc", :line 3735, :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 3416, :arglists ([f]), :doc "Like `core/memoize` but only caches the given fn's last input.\nGreat for ReactJS render fn caching, etc.", :type :var} {:name merge, :file "taoensso/encore.cljc", :line 2712, :arglists ([& maps]), :doc "Like `core/merge` but faster, supports `:merge/dissoc` rvals.\n", :type :var} {:name merge-keywords, :file "taoensso/encore.cljc", :line 1644, :arglists ([ks] [ks omit-slash?]), :type :var} {:name merge-meta, :file "taoensso/encore.cljc", :line 2102, :arglists ([x m]), :type :var} {:name merge-url-with-query-string, :file "taoensso/encore.cljc", :line 6845, :arglists ([url m]), :type :var} {:name merge-with, :file "taoensso/encore.cljc", :line 2716, :arglists ([f & maps]), :doc "Like `core/merge-with` but faster, supports `:merge/dissoc` rvals.\n", :type :var} {:name min*, :file "taoensso/encore.cljc", :line 2013, :arglists ([n1 n2]), :type :macro} {:name min-long, :file "taoensso/encore.cljc", :line 1399, :type :var} {:name ms, :file "taoensso/encore.cljc", :line 5381, :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 5380, :arglists ([ms]), :type :var} {:name msecs, :file "taoensso/encore.cljc", :line 5414, :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 7055, :arglists ([spec]), :added "Encore v3.67.0 (2023-09-08)", :doc "Given filter `spec`, returns a compiled (fn conform? [name]) that takes\na namespace or any nameable type (string, keyword, symbol).\n\nSpec may be:\n - A namespace. Will conform on exact match.\n - A str/kw/sym, in which \"*\"s act as wildcards. Will conform on match.\n - A regex pattern. Will conform on match.\n\n - A vector or set of regex patterns or strs/kws/syms.\n Will conform on ANY match.\n If you need literal \"*\"s, use #\"\\*\" regex instead.\n\n - {:allow :deny } with specs as above.\n Will conform iff `allow` spec matches AND `deny` spec does NOT.\n\nResulting conform fn is useful as allowlist and/or denylist.\nExample inputs: namespace strings, class names, ids, etc.\n\nSpec examples:\n *ns*, #{}, \"*\", \"foo.bar\", \"foo.bar.*\", #{\"foo\" \"bar.*\"},\n {:allow #{\"foo\" \"bar.*\"} :deny #{\"foo.*.bar.*\"}},\n #\"(foo1|foo2)\\.bar\".", :type :var} {:name name-with-attrs, :file "taoensso/encore.cljc", :line 513, :arglists ([sym args] [sym args attrs-merge]), :doc "Given a symbol and args, returns [ ]\nwith support for `defn` style `?docstring` and `?attrs-map`.", :type :var} {:name nameable?, :file "taoensso/encore.cljc", :line 1279, :arglists ([x]), :type :var} {:name named?, :file "taoensso/encore.cljc", :line 1257, :arglists ([x]), :type :var} {:name nanoid, :file "taoensso/encore.cljc", :line 5204, :arglists ([] [len]), :doc "Returns a random \"Nano ID\" of given length, Ref. .\nUses strong randomness when possible. See also `uuid-str`, `rand-id-fn`.", :type :var} {:name nat-float?, :file "taoensso/encore.cljc", :line 1380, :arglists ([x]), :type :var} {:name nat-int?, :file "taoensso/encore.cljc", :line 1376, :arglists ([x]), :type :var} {:name nat-num?, :file "taoensso/encore.cljc", :line 1372, :arglists ([x]), :type :var} {:name nblank-str?, :file "taoensso/encore.cljc", :line 1288, :arglists ([x]), :type :var} {:name nblank?, :file "taoensso/encore.cljc", :line 1289, :arglists ([x]), :type :var} {:name neg-float?, :file "taoensso/encore.cljc", :line 1382, :arglists ([x]), :type :var} {:name neg-int?, :file "taoensso/encore.cljc", :line 1378, :arglists ([x]), :type :var} {:name neg-num?, :file "taoensso/encore.cljc", :line 1374, :arglists ([x]), :type :var} {:name nempty-str?, :file "taoensso/encore.cljc", :line 1251, :arglists ([x]), :type :var} {:name nested-merge, :file "taoensso/encore.cljc", :line 2720, :arglists ([& maps]), :doc "Like `merge` but does nested merging.\n", :type :var} {:name nested-merge-with, :file "taoensso/encore.cljc", :line 2724, :arglists ([f & maps]), :doc "Like `merge-with` but does nested merging.\n", :type :var} {:name new-object, :file "taoensso/encore.cljc", :line 2662, :arglists ([]), :type :macro} {:name newline, :file "taoensso/encore.cljc", :line 4746, :added "Encore v3.68.0 (2023-09-25)", :doc "Single system newline\n", :type :var} {:name newlines, :file "taoensso/encore.cljc", :line 4747, :added "Encore v3.68.0 (2023-09-25)", :doc "Double system newline\n", :type :var} {:name nneg?, :file "taoensso/encore.cljc", :line 1368, :arglists ([x]), :type :var} {:name nnil, :file "taoensso/encore.cljc", :line 2112, :arglists ([] [x] [x y] [x y z] [x y z & more]), :doc "Returns first non-nil arg, or nil.\n", :type :var} {:name node-paths, :file "taoensso/encore.cljc", :line 2594, :arglists ([m] [node-pred m] [node-pred m basis]), :type :var} {:name node-target?, :file "taoensso/encore.cljc", :line 2090, :type :var} {:name norm-word-breaks, :file "taoensso/encore.cljc", :line 4608, :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 now-inst, :file "taoensso/encore.cljc", :line 3251, :arglists ([]), :added "Encore v3.66.0 (2023-08-23)", :doc "Returns current system instant as `js/Date`.\n", :type :var} {:name now-nano, :file "taoensso/encore.cljc", :line 3260, :doc "Returns current value of best-resolution time source as nanoseconds.\n", :type :var} {:name now-udt, :file "taoensso/encore.cljc", :line 3256, :arglists ([]), :doc "Returns current system insant as milliseconds since Unix epoch.\n", :type :var} {:name nzero-num?, :file "taoensso/encore.cljc", :line 1370, :arglists ([x]), :type :var} {:name oget, :file "taoensso/encore.cljc", :line 2207, :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 2215, :arglists ([ks] [o ks] [o ks not-found]), :doc "Like `get-in` for JS objects.\n", :type :var} {:name or-some, :file "taoensso/encore.cljc", :line 504, :arglists ([] [x] [x & next]), :added "Encore v3.67.0 (2023-09-08)", :doc "Like `or`, but returns the first non-nil form (may be falsey).\n", :type :macro} {:name oset, :file "taoensso/encore.cljc", :line 2178, :arglists ([o k v]), :doc "Like `assoc` for JS objects.\n", :type :var} {:name oset-in, :file "taoensso/encore.cljc", :line 2183, :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 1404, :arglists ([s]), :type :var} {:name parse-query-params, :file "taoensso/encore.cljc", :line 6821, :arglists ([s & [keywordize? encoding]]), :doc "Based on `ring-codec/form-decode`.\n", :type :var} {:name parse-version, :file "taoensso/encore.cljc", :line 2124, :arglists ([x]), :type :var} {:name path, :file "taoensso/encore.cljc", :line 4602, :arglists ([& parts]), :type :var} {:name perc, :file "taoensso/encore.cljc", :line 2056, :arglists ([n divisor]), :type :var} {:name pnum-complement, :file "taoensso/encore.cljc", :line 2004, :arglists ([pnum]), :type :var} {:name pnum?, :file "taoensso/encore.cljc", :line 1384, :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 1381, :arglists ([x]), :type :var} {:name pos-int?, :file "taoensso/encore.cljc", :line 1377, :arglists ([x]), :type :var} {:name pos-num?, :file "taoensso/encore.cljc", :line 1373, :arglists ([x]), :type :var} {:name pow, :file "taoensso/encore.cljc", :line 2018, :arglists ([n exp]), :type :var} {:name pr, :file "taoensso/encore.cljc", :line 4823, :added "Encore v3.98.0 (2024-04-08)", :doc "Identical to `core/pr`.\n", :type :var} {:name pr-edn, :file "taoensso/encore.cljc", :line 4856, :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 6862, :arglists ([x]), :added "Encore v3.98.0 (2024-04-08)", :doc "Returns given Cljs argument as JSON string.\n", :type :var} {:name pred, :file "taoensso/encore.cljc", :line 2751, :arglists ([pred-fn]), :added "Encore v3.75.0 (2024-01-29)", :doc "Experimental, subject to change without notice.\nWraps given predicate fn to return `Pred` for use with `submap?`, etc.\nArity of predicate fn depends on context in which it'll be used.\nSee also `pred-fn`.", :type :var} {:name pred-fn, :file "taoensso/encore.cljc", :line 2759, :arglists ([pred]), :added "Encore v3.75.0 (2024-01-29)", :doc "Experimental, subject to change without notice.\nReturns unwrapped predicate fn when given `Pred`, otherwise returns nil.\nSee also `pred`.", :type :var} {:name preserve-reduced, :file "taoensso/encore.cljc", :line 1734, :arglists ([rf]), :doc "Public version of `core/preserving-reduced`.\n", :type :var} {:name print, :file "taoensso/encore.cljc", :line 4825, :added "Encore v3.98.0 (2024-04-08)", :doc "Identical to `core/print`.\n", :type :var} {:name println, :file "taoensso/encore.cljc", :line 4826, :added "Encore v3.98.0 (2024-04-08)", :doc "Identical to `core/println`.\n", :type :var} {:name prn, :file "taoensso/encore.cljc", :line 4824, :added "Encore v3.98.0 (2024-04-08)", :doc "Identical to `core/prn`.\n", :type :var} {:name pull-val!, :file "taoensso/encore.cljc", :line 3191, :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 6394, :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 [ ] <...>) =>\n [\n \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 <...>)\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 1281, :arglists ([x]), :type :var} {:name qualified-keyword?, :file "taoensso/encore.cljc", :line 1285, :arglists ([x]), :type :var} {:name qualified-symbol?, :file "taoensso/encore.cljc", :line 1283, :arglists ([x]), :type :var} {:name queue, :file "taoensso/encore.cljc", :line 2163, :arglists ([coll] []), :doc "Returns a new `PersistentQueue`.\n", :type :var} {:name queue*, :file "taoensso/encore.cljc", :line 2170, :arglists ([& items]), :doc "Returns a new `PersistentQueue` given items.\n", :type :var} {:name queue?, :file "taoensso/encore.cljc", :line 2156, :arglists ([x]), :doc "Returns true iff given a `PersistentQueue`.\n", :type :var} {:name quick-bench, :file "taoensso/encore.cljc", :line 6362, :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 [ ] <...>) =>\n [\n \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 <...>)\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-id-fn, :file "taoensso/encore.cljc", :line 5123, :arglists ([{:keys [chars len rand-bytes-fn], :or {chars :nanoid, len 21, rand-bytes-fn secure-rand-bytes}}]), :added "Encore v3.75.0 (2024-01-29)", :doc "Returns a (fn rand-id []) that returns random id strings.\nUses strong randomness when possible.\n\nOptions include:\n `:chars` - ∈ #{ :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 3972, :arglists ([spec] [opts spec]), :doc "Takes a spec of form\n [ [ ] ...] or\n { [ ]},\nand returns a basic stateful (fn a-rate-limiter [req-id] [command req-id]).\n\nCall the limiter fn with a request id (e.g. username) by which to count/limit.\nWill return:\n - nil when allowed (all limits pass for given req-id), or\n - [ { }]\n when denied (any limits fail for given req-id).\n\nOr call the limiter fn with an additional command argument:\n `:rl/peek` - Check limits w/o incrementing count.\n `:rl/reset` - Reset all limits for given req-id.\n\nExample:\n\n (defonce my-rate-limiter\n (rate-limiter\n {\"1 per sec\" [1 1000]\n \"10 per min\" [10 60000]}))\n\n (defn send-message! [username msg-content]\n (if-let [fail (my-rate-limiter username)]\n (throw (ex-info \"Sorry, rate limited!\" {:fail fail}))\n ))", :type :var} {:name rcompare, :file "taoensso/encore.cljc", :line 5294, :arglists ([x y]), :doc "Reverse comparator.\n", :type :var} {:name re-pattern?, :file "taoensso/encore.cljc", :line 1269, :arglists ([x]), :type :var} {:name read-edn, :file "taoensso/encore.cljc", :line 4875, :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 6868, :arglists ([s] [kw-keys? s]), :added "Encore v3.98.0 (2024-04-08)", :doc "Reads given JSON string to return a Cljs value.\n", :type :var} {:name reassoc-some, :file "taoensso/encore.cljc", :line 2293, :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 1758, :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 1935, :arglists ([rf init colls]), :added "Encore v3.66.0 (2023-08-23)", :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 1743, :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 1884, :arglists ([rf init coll] [rf1 init1 rf2 init2 coll] [rf1 init1 rf2 init2 rf3 init3 coll]), :added "Encore v3.66.0 (2023-08-23)", :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 1749, :arglists ([rf init end] [rf init start end] [rf init start end step]), :type :var} {:name reduce-obj, :file "taoensso/encore.cljc", :line 1770, :arglists ([f init o]), :doc "Like `reduce-kv` but for JavaScript objects.\n", :type :var} {:name reduce-top, :file "taoensso/encore.cljc", :line 5336, :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 1837, :arglists ([rf init xs ys] [rf init xs ys not-found]), :added "Encore v3.33.0 (2022-11-15)", :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 2491, :arglists ([key-pred m]), :doc "Returns given ?map, removing keys for which (key-pred ) is truthy.\n", :type :var} {:name remove-vals, :file "taoensso/encore.cljc", :line 2492, :arglists ([val-pred m]), :doc "Returns given ?map, removing keys for which (val-pred ) is truthy.\n", :type :var} {:name rename-keys, :file "taoensso/encore.cljc", :line 2494, :arglists ([replacements m]), :doc "Returns a map like the one given, replacing keys using\ngiven { } replacements. O(min(n_replacements, n_m)).", :type :var} {:name repeatedly-into, :file "taoensso/encore.cljc", :line 2414, :arglists ([coll n f]), :doc "Like `repeatedly` but faster and `conj`s items into given collection.\n", :type :var} {:name require-telemere-if-present, :file "taoensso/encore.cljc", :line 4963, :arglists ([]), :added "Encore v3.68.0 (2023-09-25)", :doc "Experimental, subject to change without notice!\nRequires Telemere if it's present, otherwise no-ops.\nFor Cljs: needs ClojureScript >= v1.9.293, and must be placed at top of file.\nUsed in cooperation with `signal!`.", :type :macro} {:name reset!?, :file "taoensso/encore.cljc", :line 3027, :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 2997, :arglists ([atom_ val] [atom_ ks val] [atom_ ks not-found val]), :doc "Like `reset!` but supports `update-in` semantics, returns .\n", :type :var} {:name reset-in!?, :file "taoensso/encore.cljc", :line 3011, :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 3003, :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 3017, :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 1809, :arglists ([pred coll]), :type :var} {:name revery?, :file "taoensso/encore.cljc", :line 1803, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rfirst, :file "taoensso/encore.cljc", :line 1792, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rfirst-kv, :file "taoensso/encore.cljc", :line 1798, :arglists ([pred coll]), :type :var} {:name rnum?, :file "taoensso/encore.cljc", :line 1389, :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 4127, :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 4146, :arglists ([nmax] [nmax {:keys [gc-every init-val], :or {gc-every 16000.0}}]), :added "Encore v3.45.0 (2022-12-13)", :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 2020, :arglists ([n] [kind n] [kind precision n]), :type :var} {:name round0, :file "taoensso/encore.cljc", :line 2049, :arglists ([n]), :type :var} {:name round1, :file "taoensso/encore.cljc", :line 2050, :arglists ([n]), :type :var} {:name round2, :file "taoensso/encore.cljc", :line 2051, :arglists ([n]), :type :var} {:name roundn, :file "taoensso/encore.cljc", :line 2052, :arglists ([precision n]), :type :var} {:name rsome, :file "taoensso/encore.cljc", :line 1781, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rsome-kv, :file "taoensso/encore.cljc", :line 1787, :arglists ([pred coll]), :type :var} {:name run!, :file "taoensso/encore.cljc", :line 1774, :arglists ([proc coll]), :type :var} {:name run-kv!, :file "taoensso/encore.cljc", :line 1775, :arglists ([proc m]), :type :var} {:name run-kvs!, :file "taoensso/encore.cljc", :line 1776, :arglists ([proc kvs]), :type :var} {:name run-obj!, :file "taoensso/encore.cljc", :line 1777, :arglists ([proc obj]), :type :var} {:name satisfies!, :file "taoensso/encore.cljc", :line 1596, :arglists ([protocol arg] [protocol arg {:keys [msg context param ...]}] [protocol arg & {:keys [msg context param ...]}]), :added "Encore v3.51.0 (2023-03-13)", :doc "If (satisfies? protocol arg) is true, returns arg.\nOtherwise throws runtime `ExceptionInfo` with `unexpected-arg!`.\nSee `unexpected-arg!` for more info.", :type :macro} {:name satisfies?, :file "taoensso/encore.cljc", :line 1585, :arglists ([protocol x]), :added "Encore v3.75.0 (2024-01-29)", :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 6435, :arglists ([fmt & xs]), :type :var} {:name sayp, :file "taoensso/encore.cljc", :line 6433, :arglists ([& xs]), :type :var} {:name sb-append, :file "taoensso/encore.cljc", :line 4242, :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 secs, :file "taoensso/encore.cljc", :line 5401, :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 5379, :arglists ([secs]), :type :var} {:name secure-rand-bytes, :file "taoensso/encore.cljc", :line 5108, :arglists ([size]), :doc "Returns a random byte array of given size. Uses strong randomness when possible.\n", :type :var} {:name select-nested-keys, :file "taoensso/encore.cljc", :line 2810, :arglists ([src-map key-spec]), :added "Encore v3.34.0 (2022-11-16)", :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 2393, :doc "(seq-kvs {:a :A}) => (:a :A).\n", :type :var} {:name set-var-root!, :file "taoensso/encore.cljc", :line 1210, :arglists ([var-sym root-val]), :added "Encore v3.75.0 (2024-01-29)", :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 signal!, :file "taoensso/encore.cljc", :line 4974, :arglists ([{:as opts, :keys [fallback elidable? location inst uid middleware sample-rate kind ns id level when rate-limit ctx parent trace? do let data msg error run & kvs]}]), :added "Encore v3.68.0 (2023-09-25)", :doc "Experimental, subject to change without notice!\nExpands to `taoensso.telemere/signal!` call if Telemere is present,\notherwise expands to `fallback` form.\n\nMUST be used with `require-telemere-if-present`:\n\n (ns my-ns (:require [taoensso.encore :as enc]))\n (encore/require-telemere-if-present) ; At top of file, just below `ns` form\n\n (encore/signal! { :fallback (println \"Prints iff Telemere not present\")})\n\nFor more info, see:\n - Telemere `signal!`, Ref. \n - Telemere API, Ref. \n - Telemere Wiki docs, Ref. ", :type :macro} {:name simple-ident?, :file "taoensso/encore.cljc", :line 1280, :arglists ([x]), :type :var} {:name simple-keyword?, :file "taoensso/encore.cljc", :line 1284, :arglists ([x]), :type :var} {:name simple-symbol?, :file "taoensso/encore.cljc", :line 1282, :arglists ([x]), :type :var} {:name some=, :file "taoensso/encore.cljc", :line 2105, :arglists ([x y] [x y & more]), :type :var} {:name some?, :file "taoensso/encore.cljc", :line 494, :arglists ([x]), :doc "Same as `core/some?` (added in Clojure v1.6).\n", :type :var} {:name sortv, :file "taoensso/encore.cljc", :line 5299, :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 4370, :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 4231, :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 4225, :arglists ([x]), :type :var} {:name str-contains?, :file "taoensso/encore.cljc", :line 4348, :arglists ([s substr]), :type :var} {:name str-ends-with?, :file "taoensso/encore.cljc", :line 4360, :arglists ([s substr]), :type :var} {:name str-join, :file "taoensso/encore.cljc", :line 4321, :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 4566, :arglists ([separator coll]), :doc "Like `string/join` but skips nils and duplicate separators.\n", :type :var} {:name str-replace, :file "taoensso/encore.cljc", :line 4512, :arglists ([s match replacement]), :doc "Like `str/replace` but provides consistent clj/s behaviour.\n\nWorkaround for ,\n .\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 4294, :arglists ([] [acc] [acc in]), :doc "String builder reducing fn.\n", :type :var} {:name str-starts-with?, :file "taoensso/encore.cljc", :line 4354, :arglists ([s substr]), :type :var} {:name stringy?, :file "taoensso/encore.cljc", :line 1277, :arglists ([x]), :type :var} {:name submap?, :file "taoensso/encore.cljc", :line 2768, :arglists ([m sub]), :doc "Returns true iff `sub` is a (possibly nested) submap of `m`,\ni.e. iff every (nested) value in `sub` has the same (nested) value in `m`.\nUses stack recursion so supports only limited nesting.", :type :var} {:name submaps?, :file "taoensso/encore.cljc", :line 2799, :arglists ([maps subs]), :added "Encore v3.98.0 (2024-04-08)", :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 swap-in!, :file "taoensso/encore.cljc", :line 3173, :arglists ([atom_ f] [atom_ ks f] [atom_ ks not-found f]), :doc "Like `swap!` but supports `update-in` semantics and `swapped`.\nReturns or :\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 3183, :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 3043, :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 3062, :arglists ([x]), :doc "Returns true iff given `Swapped` argument.\n", :type :var} {:name takev, :file "taoensso/encore.cljc", :line 2387, :arglists ([n coll]), :type :var} {:name test-fixtures, :file "taoensso/encore.cljc", :line 1221, :arglists ([fixtures-map]), :added "Encore v3.31.0 (2022-10-27)", :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 5034, :arglists ([& body]), :added "Encore v3.48.0 (2023-01-25)", :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 5022, :arglists ([& body]), :doc "Low-level, see `thread-local` instead.\n", :type :macro} {:name throws, :file "taoensso/encore.cljc", :line 1028, :arglists ([form] [kind form] [kind pattern form]), :added "Encore v3.31.0 (2022-10-27)", :doc "Evals `form` and if it throws an error that matches given criteria using\n`matching-error`, returns the matching error. Otherwise returns nil.\n\nSee also `matching-error`, `throws?`.", :type :macro} {:name throws?, :file "taoensso/encore.cljc", :line 1039, :arglists ([form] [kind form] [kind pattern form]), :added "Encore v3.31.0 (2022-10-27)", :doc "Evals `form` and if it throws an error that matches given criteria using\n`matching-error`, returns true. Otherwise returns false.\n\nUseful for unit tests, e.g.:\n (is (throws? {:a :b} (throw (ex-info \"Test\" {:a :b :c :d}))))\n\nSee also `matching-error`, `throws`.", :type :macro} {:name time-ms, :file "taoensso/encore.cljc", :line 6354, :arglists ([& body]), :doc "Returns number of milliseconds it took to execute body.\n", :type :macro} {:name time-ns, :file "taoensso/encore.cljc", :line 6358, :arglists ([& body]), :doc "Returns number of nanoseconds it took to execute body.\n", :type :macro} {:name timeout-future?, :file "taoensso/encore.cljc", :line 7221, :arglists ([x]), :type :var} {:name top, :file "taoensso/encore.cljc", :line 5369, :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 5360, :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 1265, :arglists ([x]), :type :var} {:name try*, :file "taoensso/encore.cljc", :line 906, :arglists ([expr* catch-clauses* ?finally-clause]), :added "Encore v3.67.0 (2023-09-08)", :doc "Like `try`, but `catch` clause class may be:\n `:ex-info` - Catches only `ExceptionInfo`\n `:common` - Catches `js/Error` (Cljs), `Exception` (Clj)\n `:all` - Catches `:default` (Cljs), `Throwable` (Clj)\n `:all-but-critical` - Catches `:default` (Cljs), `Exception` and `AssertionError` (Clj)\n\nAddresses CLJ-1293 and the fact that `AssertionError`s are typically NON-critical\n(so desirable to catch, in contrast to other `Error` classes).", :type :macro} {:name try-eval, :file "taoensso/encore.cljc", :line 209, :arglists ([form]), :added "Encore v3.50.0 (2023-03-07)", :doc "If `form` can be successfully evaluated at macro-expansion time, expands to `form`.\nOtherwise expands to `nil`.", :type :macro} {:name udt->inst, :file "taoensso/encore.cljc", :line 3275, :arglists ([msecs-since-epoch]), :added "Encore v3.98.0 (2024-04-08)", :doc "Returns given milliseconds since Unix epoch as `js/Date`.\n", :type :var} {:name udt?, :file "taoensso/encore.cljc", :line 3280, :arglists ([x]), :type :var} {:name unexpected-arg!, :file "taoensso/encore.cljc", :line 140, :arglists ([arg] [arg {:keys [msg context param expected ...]}] [arg & {:keys [msg context param expected ...]}]), :added "Encore v3.51.0 (2023-03-13)", :doc "Throws runtime `ExceptionInfo` to indicate an unexpected argument.\nTakes optional kvs for merging into exception's data map.\n\n (let [mode :unexpected]\n (case mode\n :read (do <...>)\n :write (do <...>)\n (unexpected-arg! mode\n :context `my-function\n :param 'mode\n :expected #{:read :write}))) =>\n\n Unexpected argument: :unexpected\n {:arg {:value :unexpected, :type clojure.lang.Keyword},\n :context 'taoensso.encore/my-function\n :param 'mode\n :expected #{:read :write}}", :type :var} {:name update-in, :file "taoensso/encore.cljc", :line 2548, :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 1196, :arglists ([var-sym update-fn]), :added "Encore v3.68.0 (2023-09-25)", :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] )) => \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 6786, :arglists ([s & [encoding]]), :doc "Stolen from .\n", :type :var} {:name url-encode, :file "taoensso/encore.cljc", :line 6773, :arglists ([s]), :doc "Based on .\n", :type :var} {:name uuid, :file "taoensso/encore.cljc", :line 4617, :arglists ([]), :added "Encore v3.75.0 (2024-01-29)", :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 4645, :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 1286, :arglists ([x]), :type :var} {:name vec3?, :file "taoensso/encore.cljc", :line 1287, :arglists ([x]), :type :var} {:name vinterleave-all, :file "taoensso/encore.cljc", :line 2636, :arglists ([colls] [c1 c2] [c1 c2 c3] [c1 c2 c3 & colls]), :added "Encore v3.66.0 (2023-08-23) for !=2 arities", :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 2365, :arglists ([v]), :type :var} {:name vrest, :file "taoensso/encore.cljc", :line 2366, :arglists ([v]), :type :var} {:name vsplit-first, :file "taoensso/encore.cljc", :line 2368, :arglists ([v]), :type :var} {:name vsplit-last, :file "taoensso/encore.cljc", :line 2367, :arglists ([v]), :type :var} {:name when, :file "taoensso/encore.cljc", :line 300, :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 286, :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 310, :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 320, :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 with-dynamic-assertion-data, :file "taoensso/encore.cljc", :line 7656, :arglists ([data & body]), :deprecated "v1.7.0 (2022-11-16)", :doc "Prefer `with-data`\n", :type :macro} {:name with-truss-data, :file "taoensso/encore.cljc", :line 732, :arglists ([data & body]), :doc "Executes body with dynamic assertion data bound to given value.\nThis data will be included in any violation errors thrown by body.", :type :macro} {:name without-meta, :file "taoensso/encore.cljc", :line 2103, :arglists ([x]), :type :var} {:name xdistinct, :file "taoensso/encore.cljc", :line 2431, :arglists ([] [keyfn]), :doc "Returns a stateful transducer like (core/distinct) that supports an optional\nkey function. Retains only items with distinct (keyfn ).", :type :var} {:name zero-num?, :file "taoensso/encore.cljc", :line 1369, :arglists ([x]), :type :var})})}, :pom-str "\n\n 4.0.0\n com.taoensso\n encore\n jar\n 3.104.1\n encore\n Core utils library for Clojure/Script\n https://www.taoensso.com/encore\n \n \n Eclipse Public License - v 1.0\n https://www.eclipse.org/legal/epl-v10.html\n \n \n \n https://github.com/taoensso/encore\n scm:git:git://github.com/taoensso/encore.git\n scm:git:ssh://git@github.com/taoensso/encore.git\n 26635e7fd52a12b50555fe638dc27b76f8366872\n \n \n src\n test\n \n \n resources\n \n \n \n \n resources\n \n \n target\n target/classes\n \n \n \n \n central\n https://repo1.maven.org/maven2/\n \n false\n \n \n true\n \n \n \n clojars\n https://repo.clojars.org/\n \n true\n \n \n true\n \n \n \n \n \n \n \n \n org.clojure\n tools.reader\n 1.4.2\n \n \n com.taoensso\n truss\n 1.11.0\n \n \n org.clojure\n clojurescript\n 1.11.132\n provided\n \n \n org.clojure\n clojure\n 1.11.2\n provided\n \n \n org.clojure\n test.check\n 1.1.1\n test\n \n \n org.clojure\n core.async\n 1.6.681\n test\n \n \n\n\n\n"}