{:group-id "com.taoensso", :artifact-id "encore", :version "3.103.0", :analysis {"clj" ({:author "Peter Taoussanis (@ptaoussanis)", :name taoensso.encore, :publics ({:name <*, :file "taoensso/encore.cljc", :line 2010, :arglists ([x y z]), :type :macro} {:name <=*, :file "taoensso/encore.cljc", :line 2008, :arglists ([x y z]), :type :macro} {: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 a-utf8-str, :file "taoensso/encore.cljc", :line 4220, :doc "Example UTF8 string for tests, etc.\n", :type :var} {:name abbreviate-ns, :file "taoensso/encore.cljc", :line 4699, :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 2018, :arglists ([n]), :type :var} {:name after-timeout, :file "taoensso/encore.cljc", :line 7229, :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 1992, :arglists ([x y] [signf x y]), :type :var} {:name as-?bool, :file "taoensso/encore.cljc", :line 1453, :arglists ([x]), :type :var} {:name as-?dt, :file "taoensso/encore.cljc", :line 3302, :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 1461, :arglists ([?s] [max-len ?s]), :type :var} {:name as-?float, :file "taoensso/encore.cljc", :line 1438, :arglists ([x]), :type :var} {:name as-?inst, :file "taoensso/encore.cljc", :line 3281, :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 1427, :arglists ([x]), :type :var} {:name as-?kw, :file "taoensso/encore.cljc", :line 1415, :arglists ([x]), :type :var} {:name as-?name, :file "taoensso/encore.cljc", :line 1416, :arglists ([x]), :type :var} {:name as-?nat-float, :file "taoensso/encore.cljc", :line 1447, :arglists ([x]), :type :var} {:name as-?nat-int, :file "taoensso/encore.cljc", :line 1445, :arglists ([x]), :type :var} {:name as-?nblank, :file "taoensso/encore.cljc", :line 1414, :arglists ([x]), :type :var} {:name as-?nblank-trim, :file "taoensso/encore.cljc", :line 1423, :arglists ([x]), :type :var} {:name as-?nemail, :file "taoensso/encore.cljc", :line 1468, :arglists ([?s] [max-len ?s]), :type :var} {:name as-?nempty-str, :file "taoensso/encore.cljc", :line 1422, :arglists ([x]), :type :var} {:name as-?nzero, :file "taoensso/encore.cljc", :line 1413, :arglists ([x]), :type :var} {:name as-?pnum, :file "taoensso/encore.cljc", :line 1450, :arglists ([x]), :type :var} {:name as-?pos-float, :file "taoensso/encore.cljc", :line 1448, :arglists ([x]), :type :var} {:name as-?pos-int, :file "taoensso/encore.cljc", :line 1446, :arglists ([x]), :type :var} {:name as-?qname, :file "taoensso/encore.cljc", :line 1417, :arglists ([x]), :type :var} {:name as-?rnum, :file "taoensso/encore.cljc", :line 1451, :arglists ([x]), :type :var} {:name as-?udt, :file "taoensso/encore.cljc", :line 3315, :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 1525, :arglists ([x]), :type :var} {:name as-dt, :file "taoensso/encore.cljc", :line 3341, :arglists ([x]), :type :var} {:name as-email, :file "taoensso/encore.cljc", :line 1493, :arglists ([x] [n x]), :type :var} {:name as-float, :file "taoensso/encore.cljc", :line 1508, :arglists ([x]), :type :var} {:name as-inst, :file "taoensso/encore.cljc", :line 3340, :arglists ([x]), :type :var} {:name as-int, :file "taoensso/encore.cljc", :line 1501, :arglists ([x]), :type :var} {:name as-kw, :file "taoensso/encore.cljc", :line 1489, :arglists ([x]), :type :var} {:name as-name, :file "taoensso/encore.cljc", :line 1490, :arglists ([x]), :type :var} {:name as-nat-float, :file "taoensso/encore.cljc", :line 1510, :arglists ([x]), :type :var} {:name as-nat-int, :file "taoensso/encore.cljc", :line 1503, :arglists ([x]), :type :var} {:name as-nblank, :file "taoensso/encore.cljc", :line 1486, :arglists ([x]), :type :var} {:name as-nblank-trim, :file "taoensso/encore.cljc", :line 1487, :arglists ([x]), :type :var} {:name as-nemail, :file "taoensso/encore.cljc", :line 1497, :arglists ([x] [n x]), :type :var} {:name as-nempty-str, :file "taoensso/encore.cljc", :line 1488, :arglists ([x]), :type :var} {:name as-nzero, :file "taoensso/encore.cljc", :line 1485, :arglists ([x]), :type :var} {:name as-pnum, :file "taoensso/encore.cljc", :line 1515, :arglists ([x]), :type :var} {:name as-pnum!, :file "taoensso/encore.cljc", :line 1520, :arglists ([x]), :type :var} {:name as-pnum-complement, :file "taoensso/encore.cljc", :line 2004, :arglists ([x]), :type :var} {:name as-pos-float, :file "taoensso/encore.cljc", :line 1512, :arglists ([x]), :type :var} {:name as-pos-int, :file "taoensso/encore.cljc", :line 1505, :arglists ([x]), :type :var} {:name as-qname, :file "taoensso/encore.cljc", :line 1491, :arglists ([x]), :type :var} {:name as-rnum, :file "taoensso/encore.cljc", :line 1517, :arglists ([x]), :type :var} {:name as-rnum!, :file "taoensso/encore.cljc", :line 1522, :arglists ([x]), :type :var} {:name as-udt, :file "taoensso/encore.cljc", :line 3342, :arglists ([x]), :type :var} {:name assert-min-encore-version, :file "taoensso/encore.cljc", :line 2130, :arglists ([min-version]), :doc "Version check for dependency conflicts, etc.\n", :type :var} {:name assoc-nx, :file "taoensso/encore.cljc", :line 2286, :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 2274, :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 2280, :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 1261, :arglists ([x]), :type :var} {:name ba->hex-str, :file "taoensso/encore.cljc", :line 5243, :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 1686, :arglists ([ba1 ba2]), :type :var} {:name ba-hash, :file "taoensso/encore.cljc", :line 1678, :arglists ([x]), :doc "Returns hash int of given byte[].\n", :type :var} {:name ba-split, :file "taoensso/encore.cljc", :line 1694, :arglists ([ba idx]), :type :var} {:name ba=, :file "taoensso/encore.cljc", :line 1674, :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 6395, :arglists ([nlaps opts & body]), :type :macro} {:name bench*, :file "taoensso/encore.cljc", :line 6375, :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 1251, :arglists ([x]), :type :var} {:name bytes-class, :file "taoensso/encore.cljc", :line 1668, :type :var} {:name bytes?, :file "taoensso/encore.cljc", :line 1669, :arglists ([x]), :doc "Returns true iff given byte[] argument.\n", :type :var} {:name cache, :file "taoensso/encore.cljc", :line 3505, :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 7199, :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 1269, :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 4452, :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 7695, :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 1059, :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 1092, :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 1299, :arglists ([x]), :doc "Returns true iff given a `clojure.core.async` channel.\n", :type :var} {:name chance, :file "taoensso/encore.cljc", :line 2069, :arglists ([prob]), :doc "Returns true with given probability ∈ ℝ[0,1].\n", :type :var} {:name check-all, :file "taoensso/encore.cljc", :line 1568, :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 1559, :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 1999, :arglists ([nmin nmax n]), :type :var} {:name clamp*, :file "taoensso/encore.cljc", :line 2014, :arglists ([nmin nmax n]), :type :macro} {:name clamp-float, :file "taoensso/encore.cljc", :line 2001, :arglists ([nmin nmax n]), :type :var} {:name clamp-int, :file "taoensso/encore.cljc", :line 2000, :arglists ([nmin nmax n]), :type :var} {:name class-sym, :file "taoensso/encore.cljc", :line 738, :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 2260, :arglists ([] [coll] [coll x] [coll x & more]), :doc "Conjoins each non-nil value.\n", :type :var} {:name conj-when, :file "taoensso/encore.cljc", :line 2266, :arglists ([] [coll] [coll x] [coll x & more]), :doc "Conjoins each truthy value.\n", :type :var} {:name const-ba=, :file "taoensso/encore.cljc", :line 1707, :arglists ([ba1 ba2]), :doc "Constant-time `ba=`.\nUseful to prevent timing attacks, etc.", :type :var} {:name const-str=, :file "taoensso/encore.cljc", :line 4674, :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 2571, :arglists ([coll ks k] [coll ks]), :type :var} {:name convey-reduced, :file "taoensso/encore.cljc", :line 1732, :arglists ([x]), :type :var} {:name count-words, :file "taoensso/encore.cljc", :line 4613, :arglists ([s]), :type :var} {:name counter, :file "taoensso/encore.cljc", :line 4051, :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 683, :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 7141, :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 3768, :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 6892, :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 7247, :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 1259, :arglists ([x]), :type :var} {:name dissoc-in, :file "taoensso/encore.cljc", :line 2579, :arglists ([m ks dissoc-k] [m ks dissoc-k & more] [m ks]), :type :var} {:name distinct-elements?, :file "taoensso/encore.cljc", :line 2388, :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 1257, :arglists ([x]), :type :var} {:name encore-version, :file "taoensso/encore.cljc", :line 122, :type :var} {:name ensure-set, :file "taoensso/encore.cljc", :line 2174, :arglists ([x]), :type :var} {:name ensure-vec, :file "taoensso/encore.cljc", :line 2173, :arglists ([x]), :type :var} {:name error?, :file "taoensso/encore.cljc", :line 775, :arglists ([x]), :doc "Returns true iff given platform error (`Throwable` or `js/Error`).\n", :type :var} {:name ex-cause, :file "taoensso/encore.cljc", :line 796, :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 789, :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 782, :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 803, :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 1274, :arglists ([x]), :type :var} {:name exp-backoff, :file "taoensso/encore.cljc", :line 2057, :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 1640, :arglists ([k]), :type :var} {:name fast-merge, :file "taoensso/encore.cljc", :line 2727, :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 5504, :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 2474, :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 2482, :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 1320, :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 1352, :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 3457, :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 2099, :arglists ([x]), :doc "Like `force` for refs.\n", :type :var} {:name force-var, :file "taoensso/encore.cljc", :line 2100, :arglists ([x]), :doc "Like `force` for vars.\n", :type :var} {:name format, :file "taoensso/encore.cljc", :line 4556, :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 4544, :arglists ([fmt args] [xform fmt args]), :type :var} {:name format-inst, :file "taoensso/encore.cljc", :line 3400, :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 3350, :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 6311, :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 6773, :arglists ([m]), :type :var} {:name future*, :file "taoensso/encore.cljc", :line 5960, :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 5927, :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 5976, :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 2236, :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 7631, :arglists ([]), :deprecated "v1.7.0 (2022-11-16)", :doc "Prefer `get-data`\n", :type :var} {:name get-env, :file "taoensso/encore.cljc", :line 5740, :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 5496, :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 6246, :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 6264, :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 5535, :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 1169, :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 4385, :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 4423, :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 2305, :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 2322, :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 733, :arglists ([]), :doc "Returns current value of dynamic assertion data.\n", :type :var} {:name get1, :file "taoensso/encore.cljc", :line 2226, :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 727, :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 728, :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 730, :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 1290, :doc "Is `clojure.core.async` present (not necessarily loaded)?\n", :type :var} {:name have-telemere?, :file "taoensso/encore.cljc", :line 4956, :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 729, :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 5255, :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 5229, :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 1277, :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 1253, :arglists ([x]), :type :var} {:name inst->udt, :file "taoensso/encore.cljc", :line 3236, :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 3206, :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 1617, :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 1334, :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 2612, :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 7092, :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 2422, :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 2398, :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 4656, :arglists ([& xs]), :doc "Simple Hiccup-like string templating to complement Tempura.\n", :type :var} {:name invert-map, :file "taoensso/encore.cljc", :line 2450, :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 1542, :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 7149, :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 7131, :type :protocol, :members ({:name -schedule-timeout, :arglists ([_ msecs f]), :type :var})} {:name java-version, :file "taoensso/encore.cljc", :line 5553, :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 5572, :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 1147, :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 2523, :arglists ([f coll]), :doc "Returns {(f x) x} ?map for xs in `coll`.\n", :type :var} {:name ks-nnil?, :file "taoensso/encore.cljc", :line 2537, :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 2534, :arglists ([ks m]), :type :var} {:name ks>=, :file "taoensso/encore.cljc", :line 2536, :arglists ([ks m]), :type :var} {:name lazy-seq?, :file "taoensso/encore.cljc", :line 1265, :arglists ([x]), :type :var} {:name map-entry, :file "taoensso/encore.cljc", :line 2147, :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 2458, :arglists ([key-fn m]), :doc "Returns given ?map with (key-fn ) keys.\n", :type :var} {:name map-vals, :file "taoensso/encore.cljc", :line 2466, :arglists ([val-fn m]), :doc "Returns given ?map with (val-fn ) vals.\n", :type :var} {:name mapply, :file "taoensso/encore.cljc", :line 2393, :arglists ([f & args]), :doc "Like `apply` but calls `seq-kvs` on final arg.\n", :type :var} {:name matching-error, :file "taoensso/encore.cljc", :line 969, :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 2013, :arglists ([n1 n2]), :type :macro} {:name max-long, :file "taoensso/encore.cljc", :line 1397, :type :var} {:name memoize, :file "taoensso/encore.cljc", :line 3734, :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 3415, :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 2711, :arglists ([& maps]), :doc "Like `core/merge` but faster, supports `:merge/dissoc` rvals.\n", :type :var} {:name merge-keywords, :file "taoensso/encore.cljc", :line 1643, :arglists ([ks] [ks omit-slash?]), :type :var} {:name merge-meta, :file "taoensso/encore.cljc", :line 2101, :arglists ([x m]), :type :var} {:name merge-url-with-query-string, :file "taoensso/encore.cljc", :line 6821, :arglists ([url m]), :type :var} {:name merge-with, :file "taoensso/encore.cljc", :line 2715, :arglists ([f & maps]), :doc "Like `core/merge-with` but faster, supports `:merge/dissoc` rvals.\n", :type :var} {:name min*, :file "taoensso/encore.cljc", :line 2012, :arglists ([n1 n2]), :type :macro} {:name min-long, :file "taoensso/encore.cljc", :line 1398, :type :var} {:name ms, :file "taoensso/encore.cljc", :line 5380, :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 5379, :arglists ([ms]), :type :var} {:name msecs, :file "taoensso/encore.cljc", :line 5413, :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 7031, :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 1278, :arglists ([x]), :type :var} {:name named?, :file "taoensso/encore.cljc", :line 1255, :arglists ([x]), :type :var} {:name nanoid, :file "taoensso/encore.cljc", :line 5203, :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 1379, :arglists ([x]), :type :var} {:name nat-int?, :file "taoensso/encore.cljc", :line 1375, :arglists ([x]), :type :var} {:name nat-num?, :file "taoensso/encore.cljc", :line 1371, :arglists ([x]), :type :var} {:name nblank-str?, :file "taoensso/encore.cljc", :line 1287, :arglists ([x]), :type :var} {:name nblank?, :file "taoensso/encore.cljc", :line 1288, :arglists ([x]), :type :var} {:name neg-float?, :file "taoensso/encore.cljc", :line 1381, :arglists ([x]), :type :var} {:name neg-int?, :file "taoensso/encore.cljc", :line 1377, :arglists ([x]), :type :var} {:name neg-num?, :file "taoensso/encore.cljc", :line 1373, :arglists ([x]), :type :var} {:name nempty-str?, :file "taoensso/encore.cljc", :line 1249, :arglists ([x]), :type :var} {:name nested-merge, :file "taoensso/encore.cljc", :line 2719, :arglists ([& maps]), :doc "Like `merge` but does nested merging.\n", :type :var} {:name nested-merge-with, :file "taoensso/encore.cljc", :line 2723, :arglists ([f & maps]), :doc "Like `merge-with` but does nested merging.\n", :type :var} {:name new-object, :file "taoensso/encore.cljc", :line 2661, :arglists ([]), :type :macro} {:name newline, :file "taoensso/encore.cljc", :line 4745, :added "Encore v3.68.0 (2023-09-25)", :doc "Single system newline\n", :type :var} {:name newlines, :file "taoensso/encore.cljc", :line 4746, :added "Encore v3.68.0 (2023-09-25)", :doc "Double system newline\n", :type :var} {:name nneg?, :file "taoensso/encore.cljc", :line 1367, :arglists ([x]), :type :var} {:name nnil, :file "taoensso/encore.cljc", :line 2111, :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 2593, :arglists ([m] [node-pred m] [node-pred m basis]), :type :var} {:name norm-str, :file "taoensso/encore.cljc", :line 4487, :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 4607, :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 6681, :arglists ([rreq-or-rresp]), :type :var} {:name now-dt, :file "taoensso/encore.cljc", :line 3221, :arglists ([]), :doc "Returns current system instant as `java.util.Date`.\n", :type :var} {:name now-inst, :file "taoensso/encore.cljc", :line 3215, :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 3231, :arglists ([]), :doc "Returns current value of best-resolution time source as nanoseconds.\n", :type :var} {:name now-udt, :file "taoensso/encore.cljc", :line 3226, :arglists ([]), :doc "Returns current system instant as milliseconds since Unix epoch.\n", :type :var} {:name nzero-num?, :file "taoensso/encore.cljc", :line 1369, :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 6797, :arglists ([s & [keywordize? encoding]]), :doc "Based on `ring-codec/form-decode`.\n", :type :var} {:name parse-version, :file "taoensso/encore.cljc", :line 2123, :arglists ([x]), :type :var} {:name path, :file "taoensso/encore.cljc", :line 4601, :arglists ([& parts]), :type :var} {:name perc, :file "taoensso/encore.cljc", :line 2055, :arglists ([n divisor]), :type :var} {:name pnum-complement, :file "taoensso/encore.cljc", :line 2003, :arglists ([pnum]), :type :var} {:name pnum?, :file "taoensso/encore.cljc", :line 1383, :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 5857, :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 1380, :arglists ([x]), :type :var} {:name pos-int?, :file "taoensso/encore.cljc", :line 1376, :arglists ([x]), :type :var} {:name pos-num?, :file "taoensso/encore.cljc", :line 1372, :arglists ([x]), :type :var} {:name pow, :file "taoensso/encore.cljc", :line 2017, :arglists ([n exp]), :type :var} {:name pr, :file "taoensso/encore.cljc", :line 4829, :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 4855, :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 6028, :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 2750, :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 2758, :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 1733, :arglists ([rf]), :doc "Public version of `core/preserving-reduced`.\n", :type :var} {:name print, :file "taoensso/encore.cljc", :line 4842, :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 4847, :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 4834, :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 3190, :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 6370, :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 1280, :arglists ([x]), :type :var} {:name qualified-keyword?, :file "taoensso/encore.cljc", :line 1284, :arglists ([x]), :type :var} {:name qualified-symbol?, :file "taoensso/encore.cljc", :line 1282, :arglists ([x]), :type :var} {:name queue, :file "taoensso/encore.cljc", :line 2162, :arglists ([coll] []), :doc "Returns a new `PersistentQueue`.\n", :type :var} {:name queue*, :file "taoensso/encore.cljc", :line 2169, :arglists ([& items]), :doc "Returns a new `PersistentQueue` given items.\n", :type :var} {:name queue?, :file "taoensso/encore.cljc", :line 2155, :arglists ([x]), :doc "Returns true iff given a `PersistentQueue`.\n", :type :var} {:name quick-bench, :file "taoensso/encore.cljc", :line 6338, :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 5122, :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 3971, :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 1267, :arglists ([x]), :type :var} {:name read-edn, :file "taoensso/encore.cljc", :line 4874, :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 2292, :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 1757, :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 1934, :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 1821, :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 1742, :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 1883, :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 1748, :arglists ([rf init end] [rf init start end] [rf init start end step]), :type :var} {:name reduce-top, :file "taoensso/encore.cljc", :line 5335, :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 1836, :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 2490, :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 2491, :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 2493, :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 2413, :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 4962, :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 3026, :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 2996, :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 3010, :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 3002, :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 3016, :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 1129, :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 1808, :arglists ([pred coll]), :type :var} {:name revery?, :file "taoensso/encore.cljc", :line 1802, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rfirst, :file "taoensso/encore.cljc", :line 1791, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rfirst-kv, :file "taoensso/encore.cljc", :line 1797, :arglists ([pred coll]), :type :var} {:name ring-default-headers, :file "taoensso/encore.cljc", :line 6725, :arglists ([headers rresp]), :type :var} {:name ring-merge-headers, :file "taoensso/encore.cljc", :line 6726, :arglists ([headers rresp]), :type :var} {:name ring-redirect-resp, :file "taoensso/encore.cljc", :line 6734, :arglists ([url] [kind url] [kind url flash]), :type :var} {:name ring-resp-map, :file "taoensso/encore.cljc", :line 6721, :arglists ([x]), :type :var} {:name ring-set-body, :file "taoensso/encore.cljc", :line 6722, :arglists ([body rresp]), :type :var} {:name ring-set-headers, :file "taoensso/encore.cljc", :line 6724, :arglists ([headers rresp]), :type :var} {:name ring-set-status, :file "taoensso/encore.cljc", :line 6723, :arglists ([code rresp]), :type :var} {:name rnum?, :file "taoensso/encore.cljc", :line 1388, :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 4126, :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 4191, :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 4145, :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 2019, :arglists ([n] [kind n] [kind precision n]), :type :var} {:name round0, :file "taoensso/encore.cljc", :line 2048, :arglists ([n]), :type :var} {:name round1, :file "taoensso/encore.cljc", :line 2049, :arglists ([n]), :type :var} {:name round2, :file "taoensso/encore.cljc", :line 2050, :arglists ([n]), :type :var} {:name roundn, :file "taoensso/encore.cljc", :line 2051, :arglists ([precision n]), :type :var} {:name rsome, :file "taoensso/encore.cljc", :line 1780, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rsome-kv, :file "taoensso/encore.cljc", :line 1786, :arglists ([pred coll]), :type :var} {:name run!, :file "taoensso/encore.cljc", :line 1773, :arglists ([proc coll]), :type :var} {:name run-kv!, :file "taoensso/encore.cljc", :line 1774, :arglists ([proc m]), :type :var} {:name run-kvs!, :file "taoensso/encore.cljc", :line 1775, :arglists ([proc kvs]), :type :var} {:name runner, :file "taoensso/encore.cljc", :line 6074, :arglists ([{:keys [mode buffer-size n-threads thread-name daemon-threads?], :as opts, :or {mode :dropping, buffer-size 1024, n-threads 1}}]), :added "Encore v3.68.0 (2023-09-25)", :doc "Experimental, subject to change without notice!\n\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 true iff runner's status changed with this call.\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 1595, :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 1584, :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 4241, :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 5400, :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 5378, :arglists ([secs]), :type :var} {:name secure-rand-bytes, :file "taoensso/encore.cljc", :line 5107, :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 5090, :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 5095, :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 2809, :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 2392, :doc "(seq-kvs {:a :A}) => (:a :A).\n", :type :var} {:name session-swap, :file "taoensso/encore.cljc", :line 6668, :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 1209, :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 4973, :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 5459, :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 5454, :arglists ([pattern locale timezone]), :type :var} {:name simple-ident?, :file "taoensso/encore.cljc", :line 1279, :arglists ([x]), :type :var} {:name simple-keyword?, :file "taoensso/encore.cljc", :line 1283, :arglists ([x]), :type :var} {:name simple-symbol?, :file "taoensso/encore.cljc", :line 1281, :arglists ([x]), :type :var} {:name slurp-file-resource, :file "taoensso/encore.cljc", :line 5516, :doc "Like `slurp-resource` but caches slurps against file's last-modified udt.\n", :type :var} {:name slurp-resource, :file "taoensso/encore.cljc", :line 5486, :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 2104, :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 5298, :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 1684, :arglists ([s]), :added "Encore v3.53.0 (2023-03-22)", :type :var} {:name str-?index, :file "taoensso/encore.cljc", :line 4369, :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 4230, :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 4224, :arglists ([x]), :type :var} {:name str-contains?, :file "taoensso/encore.cljc", :line 4347, :arglists ([s substr]), :type :var} {:name str-ends-with?, :file "taoensso/encore.cljc", :line 4359, :arglists ([s substr]), :type :var} {:name str-join, :file "taoensso/encore.cljc", :line 4320, :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 4565, :arglists ([separator coll]), :doc "Like `string/join` but skips nils and duplicate separators.\n", :type :var} {:name str-replace, :file "taoensso/encore.cljc", :line 4511, :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 4293, :arglists ([] [acc] [acc in]), :doc "String builder reducing fn.\n", :type :var} {:name str-starts-with?, :file "taoensso/encore.cljc", :line 7089, :type :var} {:name stringy?, :file "taoensso/encore.cljc", :line 1276, :arglists ([x]), :type :var} {:name submap?, :file "taoensso/encore.cljc", :line 2767, :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 2798, :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 3172, :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 3182, :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 3042, :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 3061, :arglists ([x]), :doc "Returns true iff given `Swapped` argument.\n", :type :var} {:name takev, :file "taoensso/encore.cljc", :line 2386, :arglists ([n coll]), :type :var} {:name test-fixtures, :file "taoensso/encore.cljc", :line 1220, :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 5033, :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 5025, :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 5021, :arglists ([& body]), :doc "Low-level, see `thread-local` instead.\n", :type :macro} {:name throwable?, :file "taoensso/encore.cljc", :line 1273, :arglists ([x]), :type :var} {:name throws, :file "taoensso/encore.cljc", :line 1027, :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 1038, :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 6330, :arglists ([& body]), :doc "Returns number of milliseconds it took to execute body.\n", :type :macro} {:name time-ns, :file "taoensso/encore.cljc", :line 6334, :arglists ([& body]), :doc "Returns number of nanoseconds it took to execute body.\n", :type :macro} {:name timeout-future?, :file "taoensso/encore.cljc", :line 7197, :arglists ([x]), :type :var} {:name top, :file "taoensso/encore.cljc", :line 5368, :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 5359, :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 1263, :arglists ([x]), :type :var} {:name try*, :file "taoensso/encore.cljc", :line 905, :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 3242, :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 3279, :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 2547, :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 1195, :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 1272, :arglists ([x]), :type :var} {:name url-decode, :file "taoensso/encore.cljc", :line 6762, :arglists ([s & [encoding]]), :doc "Stolen from .\n", :type :var} {:name url-encode, :file "taoensso/encore.cljc", :line 6749, :arglists ([s & [encoding]]), :doc "Based on .\n", :type :var} {:name utf8-ba->str, :file "taoensso/encore.cljc", :line 1683, :arglists ([ba]), :added "Encore v3.53.0 (2023-03-22)", :type :var} {:name uuid, :file "taoensso/encore.cljc", :line 4616, :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 4644, :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 1285, :arglists ([x]), :type :var} {:name vec3?, :file "taoensso/encore.cljc", :line 1286, :arglists ([x]), :type :var} {:name vinterleave-all, :file "taoensso/encore.cljc", :line 2635, :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 5824, :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 2364, :arglists ([v]), :type :var} {:name vrest, :file "taoensso/encore.cljc", :line 2365, :arglists ([v]), :type :var} {:name vsplit-first, :file "taoensso/encore.cljc", :line 2367, :arglists ([v]), :type :var} {:name vsplit-last, :file "taoensso/encore.cljc", :line 2366, :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 7632, :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 731, :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 2102, :arglists ([x]), :type :var} {:name xdistinct, :file "taoensso/encore.cljc", :line 2430, :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 1368, :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 2010, :arglists ([x y z]), :type :macro} {:name <=*, :file "taoensso/encore.cljc", :line 2008, :arglists ([x y z]), :type :macro} {: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 a-utf8-str, :file "taoensso/encore.cljc", :line 4220, :doc "Example UTF8 string for tests, etc.\n", :type :var} {:name abbreviate-ns, :file "taoensso/encore.cljc", :line 4699, :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 2018, :arglists ([n]), :type :var} {:name after-timeout, :file "taoensso/encore.cljc", :line 7229, :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 6469, :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 1992, :arglists ([x y] [signf x y]), :type :var} {:name as-?bool, :file "taoensso/encore.cljc", :line 1453, :arglists ([x]), :type :var} {:name as-?email, :file "taoensso/encore.cljc", :line 1461, :arglists ([?s] [max-len ?s]), :type :var} {:name as-?float, :file "taoensso/encore.cljc", :line 1438, :arglists ([x]), :type :var} {:name as-?inst, :file "taoensso/encore.cljc", :line 3281, :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 1427, :arglists ([x]), :type :var} {:name as-?kw, :file "taoensso/encore.cljc", :line 1415, :arglists ([x]), :type :var} {:name as-?name, :file "taoensso/encore.cljc", :line 1416, :arglists ([x]), :type :var} {:name as-?nat-float, :file "taoensso/encore.cljc", :line 1447, :arglists ([x]), :type :var} {:name as-?nat-int, :file "taoensso/encore.cljc", :line 1445, :arglists ([x]), :type :var} {:name as-?nblank, :file "taoensso/encore.cljc", :line 1414, :arglists ([x]), :type :var} {:name as-?nblank-trim, :file "taoensso/encore.cljc", :line 1423, :arglists ([x]), :type :var} {:name as-?nemail, :file "taoensso/encore.cljc", :line 1468, :arglists ([?s] [max-len ?s]), :type :var} {:name as-?nempty-str, :file "taoensso/encore.cljc", :line 1422, :arglists ([x]), :type :var} {:name as-?nzero, :file "taoensso/encore.cljc", :line 1413, :arglists ([x]), :type :var} {:name as-?pnum, :file "taoensso/encore.cljc", :line 1450, :arglists ([x]), :type :var} {:name as-?pos-float, :file "taoensso/encore.cljc", :line 1448, :arglists ([x]), :type :var} {:name as-?pos-int, :file "taoensso/encore.cljc", :line 1446, :arglists ([x]), :type :var} {:name as-?qname, :file "taoensso/encore.cljc", :line 1417, :arglists ([x]), :type :var} {:name as-?rnum, :file "taoensso/encore.cljc", :line 1451, :arglists ([x]), :type :var} {:name as-?udt, :file "taoensso/encore.cljc", :line 3315, :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 1525, :arglists ([x]), :type :var} {:name as-email, :file "taoensso/encore.cljc", :line 1493, :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 3340, :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 1489, :arglists ([x]), :type :var} {:name as-name, :file "taoensso/encore.cljc", :line 1490, :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 1486, :arglists ([x]), :type :var} {:name as-nblank-trim, :file "taoensso/encore.cljc", :line 1487, :arglists ([x]), :type :var} {:name as-nemail, :file "taoensso/encore.cljc", :line 1497, :arglists ([x] [n x]), :type :var} {:name as-nempty-str, :file "taoensso/encore.cljc", :line 1488, :arglists ([x]), :type :var} {:name as-nzero, :file "taoensso/encore.cljc", :line 1485, :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 2004, :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 1491, :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 3342, :arglists ([x]), :type :var} {:name assert-min-encore-version, :file "taoensso/encore.cljc", :line 2130, :arglists ([min-version]), :doc "Version check for dependency conflicts, etc.\n", :type :var} {:name assoc-nx, :file "taoensso/encore.cljc", :line 2286, :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 2274, :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 2280, :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 bench, :file "taoensso/encore.cljc", :line 6395, :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 1252, :arglists ([x]), :type :var} {:name cache, :file "taoensso/encore.cljc", :line 3505, :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 7199, :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 4452, :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 7695, :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 1059, :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 1092, :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 1299, :arglists ([x]), :doc "Returns true iff given a `clojure.core.async` channel.\n", :type :var} {:name chance, :file "taoensso/encore.cljc", :line 2069, :arglists ([prob]), :doc "Returns true with given probability ∈ ℝ[0,1].\n", :type :var} {:name check-all, :file "taoensso/encore.cljc", :line 1568, :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 1559, :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 1999, :arglists ([nmin nmax n]), :type :var} {:name clamp*, :file "taoensso/encore.cljc", :line 2014, :arglists ([nmin nmax n]), :type :macro} {:name clamp-float, :file "taoensso/encore.cljc", :line 2001, :arglists ([nmin nmax n]), :type :var} {:name clamp-int, :file "taoensso/encore.cljc", :line 2000, :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 2260, :arglists ([] [coll] [coll x] [coll x & more]), :doc "Conjoins each non-nil value.\n", :type :var} {:name conj-when, :file "taoensso/encore.cljc", :line 2266, :arglists ([] [coll] [coll x] [coll x & more]), :doc "Conjoins each truthy value.\n", :type :var} {:name const-str=, :file "taoensso/encore.cljc", :line 4674, :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 2571, :arglists ([coll ks k] [coll ks]), :type :var} {:name convey-reduced, :file "taoensso/encore.cljc", :line 1732, :arglists ([x]), :type :var} {:name count-words, :file "taoensso/encore.cljc", :line 4613, :arglists ([s]), :type :var} {:name counter, :file "taoensso/encore.cljc", :line 4051, :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 683, :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 7141, :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 3768, :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 6892, :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 7247, :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 2579, :arglists ([m ks dissoc-k] [m ks dissoc-k & more] [m ks]), :type :var} {:name distinct-elements?, :file "taoensso/encore.cljc", :line 2388, :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 2174, :arglists ([x]), :type :var} {:name ensure-vec, :file "taoensso/encore.cljc", :line 2173, :arglists ([x]), :type :var} {:name error?, :file "taoensso/encore.cljc", :line 775, :arglists ([x]), :doc "Returns true iff given platform error (`Throwable` or `js/Error`).\n", :type :var} {:name ex-cause, :file "taoensso/encore.cljc", :line 796, :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 789, :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 782, :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 803, :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 2057, :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 1640, :arglists ([k]), :type :var} {:name fast-merge, :file "taoensso/encore.cljc", :line 2727, :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 2474, :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 2482, :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 1320, :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 1352, :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 3457, :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 2099, :arglists ([x]), :doc "Like `force` for refs.\n", :type :var} {:name force-var, :file "taoensso/encore.cljc", :line 2100, :arglists ([x]), :doc "Like `force` for vars.\n", :type :var} {:name format, :file "taoensso/encore.cljc", :line 4556, :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 4544, :arglists ([fmt args] [xform fmt args]), :type :var} {:name format-inst, :file "taoensso/encore.cljc", :line 3400, :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 3350, :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 6311, :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 6773, :arglists ([m]), :type :var} {:name future*, :file "taoensso/encore.cljc", :line 5960, :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 2236, :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 5740, :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 4385, :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 4423, :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 2305, :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 2322, :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 733, :arglists ([]), :doc "Returns current value of dynamic assertion data.\n", :type :var} {:name get-win-loc, :file "taoensso/encore.cljc", :line 6414, :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 2226, :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 727, :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 728, :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 730, :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 1290, :doc "Is `clojure.core.async` present (not necessarily loaded)?\n", :type :var} {:name have-telemere?, :file "taoensso/encore.cljc", :line 4956, :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 729, :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 1277, :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 3269, :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 3206, :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 1617, :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 1334, :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 2612, :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 2422, :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 2398, :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 4656, :arglists ([& xs]), :doc "Simple Hiccup-like string templating to complement Tempura.\n", :type :var} {:name invert-map, :file "taoensso/encore.cljc", :line 2450, :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 1542, :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 7149, :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 7131, :type :protocol, :members ({:name -schedule-timeout, :arglists ([_ msecs f]), :type :var})} {:name keep-callsite, :file "taoensso/encore.cljc", :line 1147, :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 2523, :arglists ([f coll]), :doc "Returns {(f x) x} ?map for xs in `coll`.\n", :type :var} {:name ks-nnil?, :file "taoensso/encore.cljc", :line 2537, :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 2534, :arglists ([ks m]), :type :var} {:name ks>=, :file "taoensso/encore.cljc", :line 2536, :arglists ([ks m]), :type :var} {:name lazy-seq?, :file "taoensso/encore.cljc", :line 1266, :arglists ([x]), :type :var} {:name log, :file "taoensso/encore.cljc", :line 6407, :type :var} {:name logf, :file "taoensso/encore.cljc", :line 6410, :arglists ([fmt & xs]), :type :var} {:name logp, :file "taoensso/encore.cljc", :line 6408, :arglists ([& xs]), :type :var} {:name map-entry, :file "taoensso/encore.cljc", :line 2147, :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 2458, :arglists ([key-fn m]), :doc "Returns given ?map with (key-fn ) keys.\n", :type :var} {:name map-vals, :file "taoensso/encore.cljc", :line 2466, :arglists ([val-fn m]), :doc "Returns given ?map with (val-fn ) vals.\n", :type :var} {:name mapply, :file "taoensso/encore.cljc", :line 2393, :arglists ([f & args]), :doc "Like `apply` but calls `seq-kvs` on final arg.\n", :type :var} {:name matching-error, :file "taoensso/encore.cljc", :line 969, :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 2013, :arglists ([n1 n2]), :type :macro} {:name max-long, :file "taoensso/encore.cljc", :line 1397, :type :var} {:name memoize, :file "taoensso/encore.cljc", :line 3734, :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 3415, :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 2711, :arglists ([& maps]), :doc "Like `core/merge` but faster, supports `:merge/dissoc` rvals.\n", :type :var} {:name merge-keywords, :file "taoensso/encore.cljc", :line 1643, :arglists ([ks] [ks omit-slash?]), :type :var} {:name merge-meta, :file "taoensso/encore.cljc", :line 2101, :arglists ([x m]), :type :var} {:name merge-url-with-query-string, :file "taoensso/encore.cljc", :line 6821, :arglists ([url m]), :type :var} {:name merge-with, :file "taoensso/encore.cljc", :line 2715, :arglists ([f & maps]), :doc "Like `core/merge-with` but faster, supports `:merge/dissoc` rvals.\n", :type :var} {:name min*, :file "taoensso/encore.cljc", :line 2012, :arglists ([n1 n2]), :type :macro} {:name min-long, :file "taoensso/encore.cljc", :line 1398, :type :var} {:name ms, :file "taoensso/encore.cljc", :line 5380, :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 5379, :arglists ([ms]), :type :var} {:name msecs, :file "taoensso/encore.cljc", :line 5413, :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 7031, :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 1278, :arglists ([x]), :type :var} {:name named?, :file "taoensso/encore.cljc", :line 1256, :arglists ([x]), :type :var} {:name nanoid, :file "taoensso/encore.cljc", :line 5203, :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 1379, :arglists ([x]), :type :var} {:name nat-int?, :file "taoensso/encore.cljc", :line 1375, :arglists ([x]), :type :var} {:name nat-num?, :file "taoensso/encore.cljc", :line 1371, :arglists ([x]), :type :var} {:name nblank-str?, :file "taoensso/encore.cljc", :line 1287, :arglists ([x]), :type :var} {:name nblank?, :file "taoensso/encore.cljc", :line 1288, :arglists ([x]), :type :var} {:name neg-float?, :file "taoensso/encore.cljc", :line 1381, :arglists ([x]), :type :var} {:name neg-int?, :file "taoensso/encore.cljc", :line 1377, :arglists ([x]), :type :var} {:name neg-num?, :file "taoensso/encore.cljc", :line 1373, :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 2719, :arglists ([& maps]), :doc "Like `merge` but does nested merging.\n", :type :var} {:name nested-merge-with, :file "taoensso/encore.cljc", :line 2723, :arglists ([f & maps]), :doc "Like `merge-with` but does nested merging.\n", :type :var} {:name new-object, :file "taoensso/encore.cljc", :line 2661, :arglists ([]), :type :macro} {:name newline, :file "taoensso/encore.cljc", :line 4745, :added "Encore v3.68.0 (2023-09-25)", :doc "Single system newline\n", :type :var} {:name newlines, :file "taoensso/encore.cljc", :line 4746, :added "Encore v3.68.0 (2023-09-25)", :doc "Double system newline\n", :type :var} {:name nneg?, :file "taoensso/encore.cljc", :line 1367, :arglists ([x]), :type :var} {:name nnil, :file "taoensso/encore.cljc", :line 2111, :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 2593, :arglists ([m] [node-pred m] [node-pred m basis]), :type :var} {:name node-target?, :file "taoensso/encore.cljc", :line 2089, :type :var} {:name norm-word-breaks, :file "taoensso/encore.cljc", :line 4607, :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 3250, :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 3259, :doc "Returns current value of best-resolution time source as nanoseconds.\n", :type :var} {:name now-udt, :file "taoensso/encore.cljc", :line 3255, :arglists ([]), :doc "Returns current system insant as milliseconds since Unix epoch.\n", :type :var} {:name nzero-num?, :file "taoensso/encore.cljc", :line 1369, :arglists ([x]), :type :var} {:name oget, :file "taoensso/encore.cljc", :line 2206, :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 2214, :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 2177, :arglists ([o k v]), :doc "Like `assoc` for JS objects.\n", :type :var} {:name oset-in, :file "taoensso/encore.cljc", :line 2182, :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 1403, :arglists ([s]), :type :var} {:name parse-query-params, :file "taoensso/encore.cljc", :line 6797, :arglists ([s & [keywordize? encoding]]), :doc "Based on `ring-codec/form-decode`.\n", :type :var} {:name parse-version, :file "taoensso/encore.cljc", :line 2123, :arglists ([x]), :type :var} {:name path, :file "taoensso/encore.cljc", :line 4601, :arglists ([& parts]), :type :var} {:name perc, :file "taoensso/encore.cljc", :line 2055, :arglists ([n divisor]), :type :var} {:name pnum-complement, :file "taoensso/encore.cljc", :line 2003, :arglists ([pnum]), :type :var} {:name pnum?, :file "taoensso/encore.cljc", :line 1383, :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 1380, :arglists ([x]), :type :var} {:name pos-int?, :file "taoensso/encore.cljc", :line 1376, :arglists ([x]), :type :var} {:name pos-num?, :file "taoensso/encore.cljc", :line 1372, :arglists ([x]), :type :var} {:name pow, :file "taoensso/encore.cljc", :line 2017, :arglists ([n exp]), :type :var} {:name pr, :file "taoensso/encore.cljc", :line 4822, :added "Encore v3.98.0 (2024-04-08)", :doc "Identical to `core/pr`.\n", :type :var} {:name pr-edn, :file "taoensso/encore.cljc", :line 4855, :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 6838, :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 2750, :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 2758, :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 1733, :arglists ([rf]), :doc "Public version of `core/preserving-reduced`.\n", :type :var} {:name print, :file "taoensso/encore.cljc", :line 4824, :added "Encore v3.98.0 (2024-04-08)", :doc "Identical to `core/print`.\n", :type :var} {:name println, :file "taoensso/encore.cljc", :line 4825, :added "Encore v3.98.0 (2024-04-08)", :doc "Identical to `core/println`.\n", :type :var} {:name prn, :file "taoensso/encore.cljc", :line 4823, :added "Encore v3.98.0 (2024-04-08)", :doc "Identical to `core/prn`.\n", :type :var} {:name pull-val!, :file "taoensso/encore.cljc", :line 3190, :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 6370, :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 1280, :arglists ([x]), :type :var} {:name qualified-keyword?, :file "taoensso/encore.cljc", :line 1284, :arglists ([x]), :type :var} {:name qualified-symbol?, :file "taoensso/encore.cljc", :line 1282, :arglists ([x]), :type :var} {:name queue, :file "taoensso/encore.cljc", :line 2162, :arglists ([coll] []), :doc "Returns a new `PersistentQueue`.\n", :type :var} {:name queue*, :file "taoensso/encore.cljc", :line 2169, :arglists ([& items]), :doc "Returns a new `PersistentQueue` given items.\n", :type :var} {:name queue?, :file "taoensso/encore.cljc", :line 2155, :arglists ([x]), :doc "Returns true iff given a `PersistentQueue`.\n", :type :var} {:name quick-bench, :file "taoensso/encore.cljc", :line 6338, :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 5122, :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 3971, :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 5293, :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 4874, :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 6844, :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 2292, :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 1757, :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 1934, :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 1742, :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 1883, :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 1748, :arglists ([rf init end] [rf init start end] [rf init start end step]), :type :var} {:name reduce-obj, :file "taoensso/encore.cljc", :line 1769, :arglists ([f init o]), :doc "Like `reduce-kv` but for JavaScript objects.\n", :type :var} {:name reduce-top, :file "taoensso/encore.cljc", :line 5335, :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 1836, :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 2490, :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 2491, :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 2493, :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 2413, :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 4962, :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 3026, :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 2996, :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 3010, :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 3002, :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 3016, :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 1808, :arglists ([pred coll]), :type :var} {:name revery?, :file "taoensso/encore.cljc", :line 1802, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rfirst, :file "taoensso/encore.cljc", :line 1791, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rfirst-kv, :file "taoensso/encore.cljc", :line 1797, :arglists ([pred coll]), :type :var} {:name rnum?, :file "taoensso/encore.cljc", :line 1388, :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 4126, :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 4145, :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 2019, :arglists ([n] [kind n] [kind precision n]), :type :var} {:name round0, :file "taoensso/encore.cljc", :line 2048, :arglists ([n]), :type :var} {:name round1, :file "taoensso/encore.cljc", :line 2049, :arglists ([n]), :type :var} {:name round2, :file "taoensso/encore.cljc", :line 2050, :arglists ([n]), :type :var} {:name roundn, :file "taoensso/encore.cljc", :line 2051, :arglists ([precision n]), :type :var} {:name rsome, :file "taoensso/encore.cljc", :line 1780, :arglists ([pred coll] [xform pred coll]), :type :var} {:name rsome-kv, :file "taoensso/encore.cljc", :line 1786, :arglists ([pred coll]), :type :var} {:name run!, :file "taoensso/encore.cljc", :line 1773, :arglists ([proc coll]), :type :var} {:name run-kv!, :file "taoensso/encore.cljc", :line 1774, :arglists ([proc m]), :type :var} {:name run-kvs!, :file "taoensso/encore.cljc", :line 1775, :arglists ([proc kvs]), :type :var} {:name run-obj!, :file "taoensso/encore.cljc", :line 1776, :arglists ([proc obj]), :type :var} {:name satisfies!, :file "taoensso/encore.cljc", :line 1595, :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 1584, :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 6411, :arglists ([fmt & xs]), :type :var} {:name sayp, :file "taoensso/encore.cljc", :line 6409, :arglists ([& xs]), :type :var} {:name sb-append, :file "taoensso/encore.cljc", :line 4241, :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 5400, :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 5378, :arglists ([secs]), :type :var} {:name secure-rand-bytes, :file "taoensso/encore.cljc", :line 5107, :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 2809, :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 2392, :doc "(seq-kvs {:a :A}) => (:a :A).\n", :type :var} {:name set-var-root!, :file "taoensso/encore.cljc", :line 1209, :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 4973, :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 1279, :arglists ([x]), :type :var} {:name simple-keyword?, :file "taoensso/encore.cljc", :line 1283, :arglists ([x]), :type :var} {:name simple-symbol?, :file "taoensso/encore.cljc", :line 1281, :arglists ([x]), :type :var} {:name some=, :file "taoensso/encore.cljc", :line 2104, :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 5298, :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 4369, :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 4230, :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 4224, :arglists ([x]), :type :var} {:name str-contains?, :file "taoensso/encore.cljc", :line 4347, :arglists ([s substr]), :type :var} {:name str-ends-with?, :file "taoensso/encore.cljc", :line 4359, :arglists ([s substr]), :type :var} {:name str-join, :file "taoensso/encore.cljc", :line 4320, :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 4565, :arglists ([separator coll]), :doc "Like `string/join` but skips nils and duplicate separators.\n", :type :var} {:name str-replace, :file "taoensso/encore.cljc", :line 4511, :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 4293, :arglists ([] [acc] [acc in]), :doc "String builder reducing fn.\n", :type :var} {:name str-starts-with?, :file "taoensso/encore.cljc", :line 4353, :arglists ([s substr]), :type :var} {:name stringy?, :file "taoensso/encore.cljc", :line 1276, :arglists ([x]), :type :var} {:name submap?, :file "taoensso/encore.cljc", :line 2767, :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 2798, :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 3172, :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 3182, :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 3042, :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 3061, :arglists ([x]), :doc "Returns true iff given `Swapped` argument.\n", :type :var} {:name takev, :file "taoensso/encore.cljc", :line 2386, :arglists ([n coll]), :type :var} {:name test-fixtures, :file "taoensso/encore.cljc", :line 1220, :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 5033, :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 5021, :arglists ([& body]), :doc "Low-level, see `thread-local` instead.\n", :type :macro} {:name throws, :file "taoensso/encore.cljc", :line 1027, :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 1038, :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 6330, :arglists ([& body]), :doc "Returns number of milliseconds it took to execute body.\n", :type :macro} {:name time-ns, :file "taoensso/encore.cljc", :line 6334, :arglists ([& body]), :doc "Returns number of nanoseconds it took to execute body.\n", :type :macro} {:name timeout-future?, :file "taoensso/encore.cljc", :line 7197, :arglists ([x]), :type :var} {:name top, :file "taoensso/encore.cljc", :line 5368, :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 5359, :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 905, :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 3274, :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 3279, :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 2547, :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 1195, :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 6762, :arglists ([s & [encoding]]), :doc "Stolen from .\n", :type :var} {:name url-encode, :file "taoensso/encore.cljc", :line 6749, :arglists ([s]), :doc "Based on .\n", :type :var} {:name uuid, :file "taoensso/encore.cljc", :line 4616, :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 4644, :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 1285, :arglists ([x]), :type :var} {:name vec3?, :file "taoensso/encore.cljc", :line 1286, :arglists ([x]), :type :var} {:name vinterleave-all, :file "taoensso/encore.cljc", :line 2635, :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 2364, :arglists ([v]), :type :var} {:name vrest, :file "taoensso/encore.cljc", :line 2365, :arglists ([v]), :type :var} {:name vsplit-first, :file "taoensso/encore.cljc", :line 2367, :arglists ([v]), :type :var} {:name vsplit-last, :file "taoensso/encore.cljc", :line 2366, :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 7632, :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 731, :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 2102, :arglists ([x]), :type :var} {:name xdistinct, :file "taoensso/encore.cljc", :line 2430, :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 1368, :arglists ([x]), :type :var})})}, :pom-str "\n\n 4.0.0\n com.taoensso\n encore\n jar\n 3.103.0\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 320a09a36a2f493d13eb599285587a73f094afee\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.1\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"}