datahike 0.7.1630
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +226 -0
- package/cljs.analyzer.api.js +427 -0
- package/cljs.analyzer.api.js.map +1 -0
- package/cljs.analyzer.impl.js +86 -0
- package/cljs.analyzer.impl.js.map +1 -0
- package/cljs.analyzer.impl.namespaces.js +219 -0
- package/cljs.analyzer.impl.namespaces.js.map +1 -0
- package/cljs.analyzer.js +7186 -0
- package/cljs.analyzer.js.map +1 -0
- package/cljs.analyzer.passes.and_or.js +141 -0
- package/cljs.analyzer.passes.and_or.js.map +1 -0
- package/cljs.analyzer.passes.js +104 -0
- package/cljs.analyzer.passes.js.map +1 -0
- package/cljs.cache.js +1145 -0
- package/cljs.cache.js.map +1 -0
- package/cljs.cache.wrapped.js +352 -0
- package/cljs.cache.wrapped.js.map +1 -0
- package/cljs.core.async.impl.buffers.js +489 -0
- package/cljs.core.async.impl.buffers.js.map +1 -0
- package/cljs.core.async.impl.channels.js +711 -0
- package/cljs.core.async.impl.channels.js.map +1 -0
- package/cljs.core.async.impl.dispatch.js +81 -0
- package/cljs.core.async.impl.dispatch.js.map +1 -0
- package/cljs.core.async.impl.ioc_helpers.js +192 -0
- package/cljs.core.async.impl.ioc_helpers.js.map +1 -0
- package/cljs.core.async.impl.protocols.js +368 -0
- package/cljs.core.async.impl.protocols.js.map +1 -0
- package/cljs.core.async.impl.timers.js +510 -0
- package/cljs.core.async.impl.timers.js.map +1 -0
- package/cljs.core.async.js +8813 -0
- package/cljs.core.async.js.map +1 -0
- package/cljs.core.js +38764 -0
- package/cljs.core.js.map +1 -0
- package/cljs.env.js +60 -0
- package/cljs.env.js.map +1 -0
- package/cljs.nodejs.js +80 -0
- package/cljs.nodejs.js.map +1 -0
- package/cljs.reader.js +462 -0
- package/cljs.reader.js.map +1 -0
- package/cljs.spec.alpha.js +5312 -0
- package/cljs.spec.alpha.js.map +1 -0
- package/cljs.spec.gen.alpha.js +2020 -0
- package/cljs.spec.gen.alpha.js.map +1 -0
- package/cljs.tagged_literals.js +103 -0
- package/cljs.tagged_literals.js.map +1 -0
- package/cljs.tools.reader.edn.js +960 -0
- package/cljs.tools.reader.edn.js.map +1 -0
- package/cljs.tools.reader.impl.commons.js +217 -0
- package/cljs.tools.reader.impl.commons.js.map +1 -0
- package/cljs.tools.reader.impl.errors.js +441 -0
- package/cljs.tools.reader.impl.errors.js.map +1 -0
- package/cljs.tools.reader.impl.inspect.js +182 -0
- package/cljs.tools.reader.impl.inspect.js.map +1 -0
- package/cljs.tools.reader.impl.utils.js +429 -0
- package/cljs.tools.reader.impl.utils.js.map +1 -0
- package/cljs.tools.reader.js +1830 -0
- package/cljs.tools.reader.js.map +1 -0
- package/cljs.tools.reader.reader_types.js +838 -0
- package/cljs.tools.reader.reader_types.js.map +1 -0
- package/cljs_env.js +18192 -0
- package/cljs_node_io.core.js +1278 -0
- package/cljs_node_io.core.js.map +1 -0
- package/cljs_node_io.file.js +918 -0
- package/cljs_node_io.file.js.map +1 -0
- package/cljs_node_io.fs.js +3911 -0
- package/cljs_node_io.fs.js.map +1 -0
- package/clojure.data.js +319 -0
- package/clojure.data.js.map +1 -0
- package/clojure.edn.js +119 -0
- package/clojure.edn.js.map +1 -0
- package/clojure.set.js +406 -0
- package/clojure.set.js.map +1 -0
- package/clojure.string.js +502 -0
- package/clojure.string.js.map +1 -0
- package/clojure.walk.js +156 -0
- package/clojure.walk.js.map +1 -0
- package/datahike.api.impl.js +621 -0
- package/datahike.api.impl.js.map +1 -0
- package/datahike.api.specification.js +85 -0
- package/datahike.api.specification.js.map +1 -0
- package/datahike.array.js +275 -0
- package/datahike.array.js.map +1 -0
- package/datahike.config.js +437 -0
- package/datahike.config.js.map +1 -0
- package/datahike.connections.js +55 -0
- package/datahike.connections.js.map +1 -0
- package/datahike.connector.js +1248 -0
- package/datahike.connector.js.map +1 -0
- package/datahike.constants.js +66 -0
- package/datahike.constants.js.map +1 -0
- package/datahike.core.js +628 -0
- package/datahike.core.js.map +1 -0
- package/datahike.datom.js +963 -0
- package/datahike.datom.js.map +1 -0
- package/datahike.db.interface.js +819 -0
- package/datahike.db.interface.js.map +1 -0
- package/datahike.db.js +3095 -0
- package/datahike.db.js.map +1 -0
- package/datahike.db.search.js +1004 -0
- package/datahike.db.search.js.map +1 -0
- package/datahike.db.transaction.js +1904 -0
- package/datahike.db.transaction.js.map +1 -0
- package/datahike.db.utils.js +642 -0
- package/datahike.db.utils.js.map +1 -0
- package/datahike.gc.js +1618 -0
- package/datahike.gc.js.map +1 -0
- package/datahike.impl.entity.js +604 -0
- package/datahike.impl.entity.js.map +1 -0
- package/datahike.index.interface.js +484 -0
- package/datahike.index.interface.js.map +1 -0
- package/datahike.index.js +50 -0
- package/datahike.index.js.map +1 -0
- package/datahike.index.persistent_set.js +1250 -0
- package/datahike.index.persistent_set.js.map +1 -0
- package/datahike.js.api.js +2211 -0
- package/datahike.js.api.js.map +1 -0
- package/datahike.lru.js +404 -0
- package/datahike.lru.js.map +1 -0
- package/datahike.pull_api.js +533 -0
- package/datahike.pull_api.js.map +1 -0
- package/datahike.query.js +11891 -0
- package/datahike.query.js.map +1 -0
- package/datahike.query_stats.js +152 -0
- package/datahike.query_stats.js.map +1 -0
- package/datahike.readers.js +166 -0
- package/datahike.readers.js.map +1 -0
- package/datahike.schema.js +251 -0
- package/datahike.schema.js.map +1 -0
- package/datahike.schema_cache.js +66 -0
- package/datahike.schema_cache.js.map +1 -0
- package/datahike.spec.js +70 -0
- package/datahike.spec.js.map +1 -0
- package/datahike.store.js +514 -0
- package/datahike.store.js.map +1 -0
- package/datahike.tools.js +436 -0
- package/datahike.tools.js.map +1 -0
- package/datahike.writer.js +3463 -0
- package/datahike.writer.js.map +1 -0
- package/datahike.writing.js +3168 -0
- package/datahike.writing.js.map +1 -0
- package/datalog.parser.impl.js +1421 -0
- package/datalog.parser.impl.js.map +1 -0
- package/datalog.parser.impl.proto.js +213 -0
- package/datalog.parser.impl.proto.js.map +1 -0
- package/datalog.parser.impl.util.js +117 -0
- package/datalog.parser.impl.util.js.map +1 -0
- package/datalog.parser.js +47 -0
- package/datalog.parser.js.map +1 -0
- package/datalog.parser.pull.js +2603 -0
- package/datalog.parser.pull.js.map +1 -0
- package/datalog.parser.type.js +7502 -0
- package/datalog.parser.type.js.map +1 -0
- package/datalog.parser.util.js +60 -0
- package/datalog.parser.util.js.map +1 -0
- package/environ.core.js +263 -0
- package/environ.core.js.map +1 -0
- package/fress.api.js +607 -0
- package/fress.api.js.map +1 -0
- package/fress.impl.adler32.js +435 -0
- package/fress.impl.adler32.js.map +1 -0
- package/fress.impl.bigint.js +185 -0
- package/fress.impl.bigint.js.map +1 -0
- package/fress.impl.buffer.js +1087 -0
- package/fress.impl.buffer.js.map +1 -0
- package/fress.impl.codes.js +105 -0
- package/fress.impl.codes.js.map +1 -0
- package/fress.impl.hopmap.js +603 -0
- package/fress.impl.hopmap.js.map +1 -0
- package/fress.impl.ranges.js +49 -0
- package/fress.impl.ranges.js.map +1 -0
- package/fress.impl.raw_input.js +837 -0
- package/fress.impl.raw_input.js.map +1 -0
- package/fress.impl.raw_output.js +653 -0
- package/fress.impl.raw_output.js.map +1 -0
- package/fress.impl.table.js +133 -0
- package/fress.impl.table.js.map +1 -0
- package/fress.reader.js +2312 -0
- package/fress.reader.js.map +1 -0
- package/fress.util.js +458 -0
- package/fress.util.js.map +1 -0
- package/fress.writer.js +2141 -0
- package/fress.writer.js.map +1 -0
- package/geheimnis.aes.js +132 -0
- package/geheimnis.aes.js.map +1 -0
- package/hasch.base64.js +42 -0
- package/hasch.base64.js.map +1 -0
- package/hasch.benc.js +201 -0
- package/hasch.benc.js.map +1 -0
- package/hasch.core.js +188 -0
- package/hasch.core.js.map +1 -0
- package/hasch.platform.js +221 -0
- package/hasch.platform.js.map +1 -0
- package/incognito.base.js +276 -0
- package/incognito.base.js.map +1 -0
- package/incognito.edn.js +54 -0
- package/incognito.edn.js.map +1 -0
- package/incognito.fressian.js +330 -0
- package/incognito.fressian.js.map +1 -0
- package/index.d.ts +660 -0
- package/is.simm.partial_cps.async.js +142 -0
- package/is.simm.partial_cps.async.js.map +1 -0
- package/is.simm.partial_cps.runtime.js +65 -0
- package/is.simm.partial_cps.runtime.js.map +1 -0
- package/is.simm.partial_cps.sequence.js +1255 -0
- package/is.simm.partial_cps.sequence.js.map +1 -0
- package/konserve.cache.js +2519 -0
- package/konserve.cache.js.map +1 -0
- package/konserve.compressor.js +502 -0
- package/konserve.compressor.js.map +1 -0
- package/konserve.core.js +8052 -0
- package/konserve.core.js.map +1 -0
- package/konserve.encryptor.js +553 -0
- package/konserve.encryptor.js.map +1 -0
- package/konserve.gc.js +541 -0
- package/konserve.gc.js.map +1 -0
- package/konserve.impl.defaults.js +8290 -0
- package/konserve.impl.defaults.js.map +1 -0
- package/konserve.impl.storage_layout.js +849 -0
- package/konserve.impl.storage_layout.js.map +1 -0
- package/konserve.memory.js +2102 -0
- package/konserve.memory.js.map +1 -0
- package/konserve.node_filestore.js +2951 -0
- package/konserve.node_filestore.js.map +1 -0
- package/konserve.protocols.js +590 -0
- package/konserve.protocols.js.map +1 -0
- package/konserve.serializers.js +562 -0
- package/konserve.serializers.js.map +1 -0
- package/konserve.store.js +2245 -0
- package/konserve.store.js.map +1 -0
- package/konserve.tiered.js +9574 -0
- package/konserve.tiered.js.map +1 -0
- package/konserve.utils.js +180 -0
- package/konserve.utils.js.map +1 -0
- package/me.tonsky.persistent_sorted_set.arrays.js +66 -0
- package/me.tonsky.persistent_sorted_set.arrays.js.map +1 -0
- package/me.tonsky.persistent_sorted_set.branch.js +2779 -0
- package/me.tonsky.persistent_sorted_set.branch.js.map +1 -0
- package/me.tonsky.persistent_sorted_set.btset.js +14196 -0
- package/me.tonsky.persistent_sorted_set.btset.js.map +1 -0
- package/me.tonsky.persistent_sorted_set.impl.node.js +324 -0
- package/me.tonsky.persistent_sorted_set.impl.node.js.map +1 -0
- package/me.tonsky.persistent_sorted_set.impl.storage.js +123 -0
- package/me.tonsky.persistent_sorted_set.impl.storage.js.map +1 -0
- package/me.tonsky.persistent_sorted_set.js +890 -0
- package/me.tonsky.persistent_sorted_set.js.map +1 -0
- package/me.tonsky.persistent_sorted_set.leaf.js +561 -0
- package/me.tonsky.persistent_sorted_set.leaf.js.map +1 -0
- package/me.tonsky.persistent_sorted_set.util.js +402 -0
- package/me.tonsky.persistent_sorted_set.util.js.map +1 -0
- package/medley.core.js +1857 -0
- package/medley.core.js.map +1 -0
- package/package.json +38 -0
- package/spec_tools.core.js +1925 -0
- package/spec_tools.core.js.map +1 -0
- package/spec_tools.data_spec.js +1291 -0
- package/spec_tools.data_spec.js.map +1 -0
- package/spec_tools.form.js +185 -0
- package/spec_tools.form.js.map +1 -0
- package/spec_tools.impl.js +362 -0
- package/spec_tools.impl.js.map +1 -0
- package/spec_tools.parse.js +427 -0
- package/spec_tools.parse.js.map +1 -0
- package/spec_tools.transform.js +288 -0
- package/spec_tools.transform.js.map +1 -0
- package/superv.async.js +8617 -0
- package/superv.async.js.map +1 -0
- package/tailrecursion.priority_map.js +994 -0
- package/tailrecursion.priority_map.js.map +1 -0
- package/taoensso.encore.js +12385 -0
- package/taoensso.encore.js.map +1 -0
- package/taoensso.timbre.appenders.core.js +239 -0
- package/taoensso.timbre.appenders.core.js.map +1 -0
- package/taoensso.timbre.js +1264 -0
- package/taoensso.timbre.js.map +1 -0
- package/taoensso.truss.impl.js +442 -0
- package/taoensso.truss.impl.js.map +1 -0
- package/taoensso.truss.js +743 -0
- package/taoensso.truss.js.map +1 -0
- package/test-config-keys.js +33 -0
- package/test-final.js +36 -0
- package/test-key-duplication.js +67 -0
- package/test.js +557 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["taoensso/encore.cljc"],"mappings":"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","names":["taoensso.encore/encore-version","taoensso.encore/list-form?","x","cljs.core/list?","cljs.core/Cons","var_args","G__31834","taoensso.encore/name-with-attrs","js/Error","sym","args","taoensso.encore.name_with_attrs","attrs-merge","vec__31836","cljs.core.nth","vec__31839","vec__31842","?docstring","cljs.core/first","cljs.core/next","attrs","cljs.core/map?","cljs.core.assoc","b2__27684__auto__","m","cljs.core/meta","cljs.core.conj","cljs.core/with-meta","taoensso.encore/node-target?","cljs.core._EQ_","cljs.core/*target*","taoensso.encore/react-native-target?","taoensso.encore/js-?window","js/window","taoensso.encore/js-?process","js/process","taoensso.encore/js-?crypto","or__5002__auto__","js/crypto","taoensso.encore.goog$module$goog$object.get","taoensso.encore/nempty-str?","taoensso.encore/boolean?","taoensso.encore/indexed?","cljs.core/PROTOCOL_SENTINEL","taoensso.encore/named?","taoensso.encore/editable?","taoensso.encore/derefable?","taoensso.encore/atom?","cljs.core/Atom","taoensso.encore/transient?","taoensso.encore/lazy-seq?","cljs.core/LazySeq","taoensso.encore/re-pattern?","js/RegExp","taoensso.encore/can-meta?","taoensso.encore/stringy?","cljs.core/Keyword","taoensso.encore/ident?","cljs.core/Symbol","taoensso.encore/nameable?","taoensso.encore/simple-ident?","and__5000__auto__","cljs.core/namespace","taoensso.encore/qualified-ident?","taoensso.encore/simple-symbol?","taoensso.encore/qualified-symbol?","taoensso.encore/simple-keyword?","taoensso.encore/qualified-keyword?","taoensso.encore/vec2?","cljs.core/vector?","cljs.core/count","taoensso.encore/vec3?","taoensso.encore/nblank-str?","clojure.string/blank?","taoensso.encore/nblank?","taoensso.encore/error?","taoensso.truss/error?","taoensso.encore/chan?","cljs.core.async.impl.channels/ManyToManyChannel","taoensso.encore/force-ref","cljs.core/deref","taoensso.encore/force-var","cljs.core/var?","taoensso.encore/finite-num?","js/Number.isFinite","taoensso.encore/int?","js/parseFloat","js/parseInt","taoensso.encore/float?","taoensso.encore/nneg?","taoensso.encore/zero-num?","taoensso.encore/nzero-num?","taoensso.encore/nat-num?","taoensso.encore/pos-num?","taoensso.encore/neg-num?","taoensso.encore/nat-int?","taoensso.encore/pos-int?","taoensso.encore/neg-int?","taoensso.encore/nat-float?","taoensso.encore/pos-float?","taoensso.encore/neg-float?","taoensso.encore/pnum?","n","taoensso.encore/rnum?","taoensso.encore/max-long","js/Number.MAX_SAFE_INTEGER","taoensso.encore/min-long","js/Number.MIN_SAFE_INTEGER","taoensso.encore/int-str?","s","cljs.core/re-matches","taoensso.encore/parse-js-float","js/isNaN","taoensso.encore/parse-js-int","cljs.core/not","taoensso.encore/as-?nzero","taoensso.encore/as-?nblank","taoensso.encore/as-?kw","cljs.core.keyword","taoensso.encore/as-?name","cljs.core/name","taoensso.encore/as-?qname","ns","taoensso.encore/as-?nempty-str","taoensso.encore/as-?nblank-trim","clojure.string/trim","taoensso.encore/as-?int","cljs.core/long","taoensso.encore/as-?float","taoensso.encore/as-?nat-int","taoensso.encore/as-?pos-int","taoensso.encore/as-?nat-float","taoensso.encore/as-?pos-float","taoensso.encore/as-?pnum","f","taoensso.encore/as-?rnum","taoensso.encore/as-?bool","regex","G__32002","taoensso.encore/as-?email","?s","taoensso.encore.as__QMARK_email","max-len","cljs.core/re-find","G__32007","taoensso.encore/as-?nemail","email","clojure.string/lower-case","taoensso.encore/norm-str","taoensso.encore/-as-throw","kind","taoensso.truss/ex-info*","cljs.core.pr_str","cljs.core/type","-as-throw","taoensso.encore/as-nblank","taoensso.encore/as-nblank-trim","taoensso.encore/as-nempty-str","taoensso.encore/as-name","taoensso.encore/as-qname","taoensso.encore/as-nzero","taoensso.encore/as-kw","G__32026","taoensso.encore/as-email","G__32034","taoensso.encore/as-nemail","taoensso.encore.as__QMARK_nemail","taoensso.encore/as-int","taoensso.encore/as-nat-int","taoensso.encore/as-pos-int","taoensso.encore/as-float","taoensso.encore/as-nat-float","taoensso.encore/as-pos-float","taoensso.encore/as-pnum","taoensso.encore/as-rnum","taoensso.encore/as-pnum!","taoensso.encore/as-rnum!","taoensso.encore/as-bool","?b","taoensso.encore/convey-reduced","cljs.core/reduced?","cljs.core/reduced","taoensso.encore/preserve-reduced","rf","acc","in","result","taoensso.encore/reduce-kvs","init","kvs","cljs.core.transduce","cljs.core.partition_all","cljs.core.completing","p__32043","vec__32044","k","v","G__32049","taoensso.encore/reduce-n","end","cljs.core.reduce","cljs.core.range","start","step","taoensso.encore/reduce-indexed","coll","c","taoensso.encore/counter","G__32056","G__32057","G__32058","taoensso.encore/reduce-obj","o","G__32059","G__32060","G__32061","cljs.core/js-keys","taoensso.encore/run!","proc","p1__32063#","p2__32062#","taoensso.encore/run-kv!","p1__32066#","p2__32064#","p3__32065#","cljs.core/reduce-kv","taoensso.encore/run-kvs!","p1__32069#","p2__32067#","p3__32068#","taoensso.encore/run-obj!","obj","p1__32072#","p2__32070#","p3__32071#","pred","_acc","p","G__32074","taoensso.encore/rsome","xform","tf","p__32075","vec__32076","taoensso.encore/rsome-kv","G__32080","taoensso.encore/rfirst","entry","cljs.core/MapEntry","p__32081","vec__32082","taoensso.encore/rfirst-kv","G__32089","taoensso.encore/revery?","p__32093","vec__32094","taoensso.encore/revery-kv?","G__32102","taoensso.encore/reduce-zip","xs","ys","taoensso.encore.reduce_zip","not-found","cljs.core/keyword-identical?","x__5090__auto__","y__5091__auto__","x__5087__auto__","y__5088__auto__","taoensso.encore.reduce_n","idx","G__32105","G__32106","G__32107","cljs.core.get","not-found?","cljs.core/seq","G__32109","G__32110","G__32111","this__5287__auto__","writer__5288__auto__","opt__5289__auto__","cljs.core/-write","taoensso.encore/Tup2","taoensso.encore/->Tup2","y","taoensso.encore/Tup3","taoensso.encore/->Tup3","z","G__32119","taoensso.encore/reduce-multi","rf1","init1","rf2","init2","tuple","rx?","ry?","cljs.core/unreduced","rf3","init3","rz?","taoensso.encore/reduce-interleave-all","colls","cljs.core/empty?","vec__32128","seq__32129","first__32130","in1","next-in","ncs","res","next-colls","p1__32131#","map-like?","cljs.core/record?","G__32136","taoensso.encore/postwalk","taoensso.encore.postwalk","preserve-seqs?","p1__32132#","p2__32133#","ps","cljs.core/identity","pw","G__32137","cljs.core/seq?","G__32140","G__32141","cljs.core/coll?","G__32144","cljs.core/empty","taoensso.encore/subfn","context","by-idx-fn","start-idx","max-idx","G__32147","G__32148","G__32149","end-idx","max-end","G__32154","taoensso$encore$subfn_$_subfn_STAR_","len","taoensso.truss/unexpected-arg!*","taoensso.encore/subvec","cljs.core/subvec","taoensso.encore/substr","n1","n2","taoensso.encore/map-entry","taoensso.encore/queue?","cljs.core/PersistentQueue","G__32162","taoensso.encore/queue","cljs.core.into","taoensso.encore.queue","args__5732__auto__","len__5726__auto__","i__5727__auto__","argseq__5733__auto__","cljs.core/IndexedSeq","taoensso.encore/queue*","seq32166","self__5712__auto__","items","taoensso.encore/ensure-vec","cljs.core/vec","taoensso.encore/ensure-set","cljs.core/set?","cljs.core/set","taoensso.encore/oset","taoensso.encore.goog$module$goog$object.set","sentinel","taoensso.encore/oset-in","ks","o-next","ks-next","k1","o-next*","new-obj","G__32191","taoensso.encore/oget","G__32199","taoensso.encore/oget-in","taoensso.encore.oget_in","G__32206","taoensso.encore/get1","k2","e","cljs.core/find","cljs.core/val","k3","G__32221","taoensso.encore/conj-some","args-arr__5751__auto__","argseq__5752__auto__","seq32218","G__32219","G__32220","self__5711__auto__","more","taoensso.encore.conj_some","G__32235","taoensso.encore/conj-when","seq32230","G__32231","G__32232","taoensso.encore.conj_when","G__32244","taoensso.encore/assoc-some","seq32240","G__32241","G__32242","G__32243","m-kvs","taoensso.encore.assoc_some","G__32255","taoensso.encore/assoc-when","seq32251","G__32252","G__32253","G__32254","taoensso.encore.assoc_when","G__32266","taoensso.encore/assoc-nx","seq32262","G__32263","G__32264","G__32265","cljs.core/contains?","taoensso.encore.assoc_nx","G__32276","taoensso.encore/reassoc-some","seq32272","G__32273","G__32274","G__32275","cljs.core.dissoc","taoensso.encore.reassoc_some","G__32287","taoensso.encore/reassoc-when","seq32283","G__32284","G__32285","G__32286","taoensso.encore.reassoc_when","taoensso.encore/vnext","cljs.core.subvec","taoensso.encore/vrest","taoensso.encore/vsplit-last","cljs.core/pop","cljs.core/peek","taoensso.encore/vsplit-first","vec__32300","v1","taoensso.encore/not-empty-coll","cljs.core/not-empty","taoensso.encore/fsplit-last","vec__32305","vn","vl","butlast","vec__32314","seq__32315","first__32316","x1","xn","taoensso.encore/takev","cljs.core.take","taoensso.encore/distinct-elements?","taoensso.encore/seq-kvs","cljs.core.partial","cljs.core/reduce","cljs.core/concat","taoensso.encore/mapply","seq32322","G__32323","cljs.core.apply","lx","cljs.core.concat","G__32333","taoensso.encore/into-all","seq32330","G__32331","G__32332","to","from","cljs.core/persistent!","cljs.core/conj!","cljs.core/transient","cljs.core/cons","taoensso.encore/min-transient-card","taoensso.encore/repeatedly-into","_","cljs.core.conj_BANG_","taoensso.encore/update!","cljs.core.assoc_BANG_","G__32342","G__32346","taoensso.encore/into!","to!","G__32352","taoensso.encore/xdistinct","cljs.core.distinct","keyfn","seen_","cljs.core/volatile!","taoensso.encore/invert-map","taoensso.encore/invert-map!","im","taoensso.encore/map-keys","key-fn","taoensso.encore/map-vals","val-fn","taoensso.encore/filter-keys","key-pred","cljs.core.dissoc_BANG_","taoensso.encore/filter-vals","val-pred","taoensso.encore/remove-keys","cljs.core/complement","taoensso.encore/remove-vals","taoensso.encore/rename-keys","replacements","old-k","new-k","taoensso.encore/keys-by","taoensso.encore/ks-nnil?","p1__32354#","taoensso.encore.revery_QMARK_","taoensso.encore/ks=","p1__32355#","taoensso.encore/ks>=","p1__32356#","taoensso.encore/ks<=","counted-ks","cljs.core/counted?","ks-set","G__32358","taoensso.encore/update-in","taoensso.encore.update_in","old","cljs.core.get_in","new","G__32359","lk","cljs.core/assoc-in","G__32388","taoensso.encore/contains-in?","taoensso.encore.contains_in_QMARK_","G__32412","taoensso.encore/dissoc-in","seq32407","G__32408","G__32409","G__32410","dissoc-k","cljs.core/dissoc","taoensso.encore.dissoc_in","G__32421","taoensso.encore/node-paths","taoensso.encore.node_paths","cljs.core/associative?","node-pred","basis","paths-from-basis","G__32438","taoensso.encore/interleave-all","seq32430","G__32436","G__32437","c1","c2","s1","s2","taoensso.encore.interleave_all","cljs.core/rest","ss","cljs.core.filter","cljs.core.map","G__32448","taoensso.encore/vinterleave-all","seq32444","G__32445","G__32446","G__32447","c3","taoensso.encore.vinterleave_all","taoensso.encore/p!","nx","min-transient-card","dissoc?","G__32451","dissoc*","G__32453","taoensso.encore/merge-with*","nest?","maps","m1","m2","taoensso.encore.merge_with_STAR_","m1*","assoc*","cljs.core/assoc!","cljs.core/assoc","v2","G__32454","G__32455","G__32456","v3","m2*","G__32457","G__32458","G__32459","G__32465","taoensso.encore/merge","seq32461","G__32462","G__32463","G__32464","m3","G__32471","taoensso.encore/nested-merge","seq32467","G__32468","G__32469","G__32470","G__32478","taoensso.encore/merge-with","seq32473","G__32474","G__32475","G__32476","G__32477","G__32485","taoensso.encore/nested-merge-with","seq32480","G__32481","G__32482","G__32483","G__32484","mf","G__32562","taoensso.encore/merge-nx","seq32556","G__32557","G__32558","G__32559","taoensso.encore/submap?","taoensso.truss/submap?","taoensso.encore/submaps?","subs","sub","taoensso.encore/select-nested-keys","src-map","key-spec","spec-in","nested-spec-in","src-val","taoensso.encore/explode-keyword","clojure.string.split","G__32605","taoensso.encore/merge-keywords","taoensso.encore.merge_keywords","omit-slash?","parts","cljs.core/conj","clojure.string.join","ppop","G__32633","taoensso.encore/approx==","Math/abs","signf","taoensso.encore/clamp","nmin","nmax","taoensso.encore/clamp-int","taoensso.encore/clamp-float","taoensso.encore/pnum-complement","pnum","taoensso.encore/as-pnum-complement","taoensso.encore/pow","exp","Math/pow","taoensso.encore/abs","G__32672","taoensso.encore/round","taoensso.encore.round","a1","a2","a3","modifier","n*","rounded","G__32673","Math/round","Math/floor","Math/ceil","taoensso.encore/perc","divisor","taoensso.encore/round0","taoensso.encore/round1","taoensso.encore/round2","taoensso.encore/round3","taoensso.encore/round4","taoensso.encore/roundn","precision","G__32675","taoensso.encore/exp-backoff","p__32676","map__32677","cljs.core/--destructure-map","n-attempt","taoensso.encore.exp_backoff","min","max","factor","b","t","cljs.core.rand","taoensso.encore/chance","prob","Math/random","taoensso.encore/merge-meta","taoensso.encore.merge","taoensso.encore/without-meta","G__32683","taoensso.encore/some=","seq32680","G__32681","G__32682","p1__32678#","G__32689","taoensso.encore/nnil","seq32685","G__32686","G__32687","G__32688","taoensso.encore.rfirst","cljs.core/some?","taoensso.encore/parse-version","vec__32690","s-version","?s-qualifier","cljs.core/re-seq","cljs.core.mapv","taoensso.encore/have-core-async?","taoensso.encore/inst?","js/Date","taoensso.encore/now-inst","taoensso.encore/now-dt","cljs.core/chunk-first","s__34595","taoensso.encore/now-udt","js/Date.now","taoensso.encore/now-nano","perf","taoensso.encore.oget","pf","taoensso.encore/inst->udt","inst","taoensso.encore/udt->inst","msecs-since-epoch","taoensso.encore/udt?","taoensso.encore/as-?inst","taoensso.encore/as-?udt","js/Date.parse","taoensso.encore/as-inst","taoensso.encore/as-udt","G__32806","taoensso.encore/format-inst-fn","p__32808","map__32809","taoensso.encore.format_inst_fn","formatter","instant","default-fn","taoensso.encore/format-inst","taoensso.encore/secs->ms","secs","taoensso.encore/ms->secs","ms","cljs.core/quot","G__32845","taoensso.encore/ms","p__32853","map__32855","seq32839","G__32840","G__32841","G__32842","G__32843","years","months","weeks","days","hours","mins","msecs","taoensso.encore.ms","G__32876","taoensso.encore/secs","seq32870","G__32871","G__32872","G__32873","G__32874","opts","taoensso.encore/a-utf8-str","taoensso.encore/str-builder?","js/goog.string.StringBuffer","G__32893","taoensso.encore/str-builder","taoensso.encore/sb-length","sb","G__32905","taoensso.encore/sb-append","seq32900","G__32901","G__32902","str-builder","taoensso.encore.sb_append","G__32912","taoensso.encore/sb-appender","taoensso.encore.sb_appender","taoensso.encore.str_builder","separator","sep!","sep","started?_","cljs.core/vreset!","cljs.core/nil?","G__32921","taoensso.encore/str-rf","G__32931","taoensso.encore/sb-rf","G__32933","taoensso.encore/str-join","taoensso.encore.str_join","cljs.core.not_EQ_","cljs.core.comp","cljs.core.interpose","taoensso.encore/str-contains?","substr","taoensso.encore/str-starts-with?","taoensso.encore/str-ends-with?","s-len","substr-len","G__32935","taoensso.encore/str-?index","taoensso.encore.str__QMARK_index","last?","taoensso.encore/case-insensitive-str=","l1","l2","G__32971","taoensso.encore.norm_str","norm-form","G__33003","taoensso.encore/str-replace","match","replacement","goog.string/regExpEscape","flags","G__33015","taoensso.encore/nil->str","G__33018","taoensso.encore/format*","fmt","taoensso.encore.format_STAR_","goog.string/format","taoensso.encore/format","seq33020","G__33021","taoensso.encore/str-join-once","acc-ends-with-sep?_","acc-empty?_","in-empty?","in-starts-with-sep?","in-ends-with-sep?","acc-ends-with-sep?","acc-empty?","taoensso.encore/path","seq33042","taoensso.encore/norm-word-breaks","clojure.string/replace","taoensso.encore/count-words","taoensso.encore/into-str","seq33054","cljs.core/sequential?","taoensso.encore/const-str=","vx","taoensso.encore/format-num-fn","n-min-fd","n-max-fd","nf","js/Intl.NumberFormat","fmt0","fmt2","taoensso.encore/format-nsecs","nanosecs","G__33084","taoensso.encore/abbreviate-ns","taoensso.encore.abbreviate_ns","n-full","vec__33085","error33092","taoensso.truss.impl/FalsePredError","e33097","taoensso.truss/failed-assertion!","p1","p2","name-part","ns-parts","n-to-abbr","cljs.core.symbol","as-?qname","always","_in","never","ns?","cljs.core/Namespace","input-str!","wild-str->?re-pattern","cljs.core/re-pattern","compile->match-fn","spec","cache?","fexpr__33102","fexpr__33103","str-spec","re-pattern","fexpr__33104","vec__33105","fixed-strs","re-patterns","p__33108","vec__33109","fx-match","re-match","in-str","p1__33101#","taoensso.encore.rsome","taoensso.encore/fmemoize","G__33112","G__33113","taoensso.encore/name-filter","allow-spec","disallow-spec","allow","as","disallow","ds","taoensso.encore/newline","taoensso.encore/newlines","taoensso.encore/x->str","allow-readably?","allow-dup?","add-newline?","cljs.core.prn_str","cljs.core.println_str","cljs.core.print_str","taoensso.encore/xs->str","cljs.core/prn-str","cljs.core/pr-str","cljs.core/println-str","cljs.core/print-str","taoensso.encore/pr","cljs.core/pr","taoensso.encore/prn","cljs.core/prn","taoensso.encore/print","cljs.core/print","taoensso.encore/println","cljs.core/println","taoensso.encore/pr-edn","cljs.core/*print-level*","cljs.core/*print-length*","cljs.core/*print-readably*","*print-level*-orig-val__33114","*print-length*-orig-val__33115","*print-readably*-orig-val__33116","*print-level*-temp-val__33117","*print-length*-temp-val__33118","*print-readably*-temp-val__33119","taoensso.encore/pr-edn*","G__33121","taoensso.encore/read-edn","taoensso.encore.read_edn","readers","cljs.reader/*tag-table*","default","cljs.reader/*default-data-reader-fn*","cljs.tools.reader.edn.read_string","G__33123","taoensso.encore/str-impl","class-name","data","taoensso.encore/uuid","quad-hex","unpadded-hex","cljs.core/rand-int","G__33181","ver-trip-hex","res-trip-hex","G__33210","taoensso.encore/uuid-str","taoensso.encore.uuid_str","taoensso.encore/rand-bytes","prefer-secure?","size","ba","js/Uint8Array","crypto","n__5593__auto__","i","js/Math.random","p__33271","map__33272","taoensso.encore/rand-id-fn","chars","rand-bytes-fn","G__33273","nchars","max-char-idx","cljs.core.object_array","mask","Math/log","exp-bytes","stepn","step1","cljs.core/mod","rand-bytes","possible-ch-idx","G__33303","taoensso.encore/nanoid","taoensso.encore.nanoid","unused__11820__auto__","self__","G__33306","args33305","cljs.core/aclone","taoensso.encore/LightAtom","taoensso.encore/->LightAtom","state","swap-fn","old-map","new-val","G__33309","new-map","taoensso.encore/latom","init-state","taoensso.encore/-reset-k0!","return","atom_","m0","cljs.core/compare-and-set!","taoensso.encore/-reset-k1!","G__33321","G__33322","G__33323","G__33324","taoensso.encore/-reset-kn!","ks-seq","G__33329","G__33330","G__33331","G__33332","v0","G__33337","taoensso.encore/reset-in!","val","G__33351","taoensso.encore/reset-val!","G__33359","taoensso.encore/reset-in!?","G__33362","taoensso.encore/reset-val!?","taoensso.encore.reset_val_BANG_","taoensso.encore/reset!?","taoensso.encore/Swapped","taoensso.encore/->Swapped","newv","returnv","taoensso.encore/swapped","return-val","taoensso.encore/swapped-vec","taoensso.encore/swapped?","taoensso.encore/return-swapped","sw","rv","G__33384","taoensso.encore/-swap-k0!","sw?","taoensso.encore/-swap-k1!","G__33415","G__33418","G__33419","G__33420","taoensso.encore/-swap-kn!","G__33476","G__33477","G__33478","G__33479","G__33482","taoensso.encore/swap-in!","G__33484","taoensso.encore/swap-val!","G__33486","taoensso.encore/pull-val!","taoensso.encore.pull_val_BANG_","taoensso.encore.swap_val_BANG_","taoensso.encore/memoize-last","call","in_","out_","in*","f0","out","cljs.core/memoize","taoensso.encore/gc-now?","rate","js/Math","taoensso.encore/SimpleCacheEntry","taoensso.encore/->SimpleCacheEntry","delay","udt","taoensso.encore/TickedCacheEntry","taoensso.encore/->TickedCacheEntry","tick-lru","tick-lfu","G__33518","taoensso.encore/cache","p__33579","map__33581","cache_","get-sentinel","G__33521","x2","ttl-ms","gc-every","error33587","arg33582","taoensso.truss.impl/ks<=","e33590","ps33602","pf33603","arg33599","df33604","error33608","e33610","error33611","e33613","error33615","e33618","gc-now?","ticker","latch_","ttl?","G__33624","argn","G__33628","cljs.core/reset!","G__33630","p1__33515#","tick","cljs.core/rem","latch","udt-floor","G__33636","snapshot","n-to-gc","ks-to-gc","G__33647","G__33648","G__33649","taoensso.encore/top","cljs.core/keys","G__33654","fresh?","G__33660","G__33666","G__33667","?e","cljs.core/Delay","gc-rate","gce","G__33681","G__33682","G__33683","p1__33516#","G__33684","G__33693","G__33694","G__33695","taoensso.encore.cache","G__33701","taoensso.encore/memoize","taoensso.encore/rate-limiter-once-per","last_","req-id","t1","taoensso.encore/LimitSpec","taoensso.encore/->LimitSpec","taoensso.encore/LimitEntry","taoensso.encore/->LimitEntry","udt0","taoensso.encore/LimitHits","taoensso.encore/->LimitHits","worst-lid","worst-ms","limit-spec","ps33711","pf33712","df33713","error33715","e33717","error33718","e33720","taoensso.encore/coerce-limit-spec","p__33721","vec__33722","lid","p__33725","vec__33726","?lid","G__33731","taoensso.encore/rate-limiter","taoensso.encore.rate_limiter","map__33732","map__33733","with-state?","cljs.core/constantly","once-per-msecs","reqs_","f1","rid","delta","peek?","G__33734","reqs","entries","new-entries","?hits","tdelta","h","l","limiter-fn","cmd","G__33735","G__33736","G__33739","p1__33729#","G__33873","args33871","taoensso.encore/Counter","taoensso.encore/->Counter","add","action","G__33891","G__33895","taoensso.encore.counter","taoensso.encore/rc-deref","ts_","n-skip_","gc-fn","n-skip0","ts","n-total","n-window","t0","n-skip1","G__33925","args33921","taoensso.encore/RollingCounter","taoensso.encore/->RollingCounter","this","G__33932","p1__33914#","G__33934","p1__33916#","taoensso.encore/rolling-counter","error33946","e33948","G__33960","taoensso.encore/rolling-vector","p__33965","map__33966","taoensso.encore.rolling_vector","init-val","acc_","G__33974","sv","G__33979","taoensso.encore/rcompare","cljs.core/compare","G__34071","taoensso.encore/sortv","taoensso.encore.sortv","comparator","?keyfn","G__34072","kfn","G__34073","G__34074","a","cljs.core/to-array","taoensso.encore.goog$module$goog$array.stableSort","cljs.core/fn->comparator","nil->sentinel","sentinel->nil","G__34091","taoensso.encore/reduce-top","taoensso.encore.reduce_top","cmp","coll-size","cljs.core.sort_by","G__34100","taoensso.encore/top-into","taoensso.encore.top_into","G__34108","taoensso.encore/hot-sleep","taoensso.encore/-valid-unstub-impl","cljs.core/fn?","taoensso.encore/test-fixtures","fixtures-map","error34243","e34246","taoensso$encore$ITimeoutImpl$_schedule_timeout$dyn","x__5350__auto__","m__5351__auto__","taoensso.encore/-schedule-timeout","goog/typeOf","m__5349__auto__","cljs.core/missing-protocol","taoensso.encore/ITimeoutImpl","taoensso.encore/DefaultTimeoutImpl","taoensso.encore/->DefaultTimeoutImpl","js/setTimeout","js/taoensso","js/taoensso.encore","js/taoensso.encore.default-timeout-impl_","taoensso.encore/default-timeout-impl_","taoensso$encore$ITimeoutFuture$tf_state$dyn","taoensso.encore/tf-state","taoensso$encore$ITimeoutFuture$tf_poll$dyn","taoensso.encore/tf-poll","taoensso$encore$ITimeoutFuture$tf_done_QMARK_$dyn","taoensso.encore/tf-done?","taoensso$encore$ITimeoutFuture$tf_pending_QMARK_$dyn","taoensso.encore/tf-pending?","taoensso$encore$ITimeoutFuture$tf_cancelled_QMARK_$dyn","taoensso.encore/tf-cancelled?","taoensso$encore$ITimeoutFuture$tf_cancel_BANG_$dyn","taoensso.encore/tf-cancel!","taoensso.encore/ITimeoutFuture","taoensso.encore/TimeoutFuture","taoensso.encore/->TimeoutFuture","result__","taoensso.encore/timeout-future?","G__34340","taoensso.encore/call-after-timeout","taoensso.encore.call_after_timeout","impl_","cas-f","result_","impl","cljs.core/force","taoensso.encore/console-log","js/console","js/console.log","cljs.core.into_array","taoensso.encore/log","taoensso.encore/logp","seq34341","taoensso.encore/sayp","seq34342","js/alert","taoensso.encore/logf","seq34343","G__34344","taoensso.encore/sayf","seq34345","G__34346","taoensso.encore/get-win-loc","loc","taoensso.encore/default-xhr-pool_","js/goog.net.XhrIoPool","p__34348","map__34349","taoensso.encore/ajax-call","url","method","body","params","headers","timeout-ms","resp-type","with-credentials?","xhr-pool","xhr-cb-fn","xhr-timeout-ms","callback-fn","error34355","arg34350","e34357","with-xhr","xhr","e34358","map__34360","url+","content","content-type","G__34361","goog.Uri.QueryData/createFromMap","cljs.core/clj->js","js/FormData","js/Blob","form-data","seq__34362","chunk__34363","count__34364","i__34365","vec__34372","temp__5804__auto__","cljs.core/chunked-seq?","c__5525__auto__","cljs.core/chunk-rest","vec__34375","p1__34347#","progress-listener","goog.events/listen","goog.net.EventType/PROGRESS","ev","length-computable?","loaded","total","?ratio","G__34437","goog.events/listenOnce","goog.net.EventType/READY","goog.net.EventType/COMPLETE","resp","vec__34530","success?","status","error","vec__34533","ct","G__34537","edn","e34539","goog.events/unlistenByKey","G__34543","G__34548","G__34561","cb","e34562","G__34359","G__34563","done?_","cljs.core.atom","G__34564","taoensso.encore/url-encode","js/encodeURIComponent","taoensso.encore/url-decode","p__34575","vec__34577","seq34567","G__34568","encoding","js/decodeURIComponent","taoensso.encore/format-query-string","param","join","strs","iter__5480__auto__","c__5478__auto__","size__5479__auto__","b__34598","cljs.core/chunk-buffer","i__34597","vec__34606","cljs.core/-nth","cljs.core/chunk-append","cljs.core/chunk-cons","cljs.core/chunk","iter__34594","vec__34612","taoensso.encore/assoc-conj","cur","taoensso.encore/parse-query-params","p__34636","vec__34638","seq34624","G__34625","keywordize?","cljs.core.subs","vec__34648","taoensso.encore.url_decode","cljs.core/keyword","taoensso.encore/merge-url-with-query-string","vec__34657","?qstr","qmap","qstr","taoensso.encore/pr-json","js/JSON","cljs.core.clj__GT_js","G__34690","taoensso.encore/read-json","taoensso.encore.read_json","kw-keys?","cljs.core.js__GT_clj","js/JSON.parse","taoensso.encore/-swap-val!","G__34786","taoensso.encore/js-?win","taoensso.encore/regular-num?","taoensso.encore/get-window-location","taoensso.encore/backport-run!","taoensso.encore/fq-name","taoensso.encore/qname","taoensso.encore/merge-deep-with","taoensso.encore/merge-deep","taoensso.encore/parse-bool","taoensso.encore/parse-int","taoensso.encore/parse-float","taoensso.encore/swapped*","taoensso.encore/memoize-a0_","taoensso.encore/memoize-a1_","taoensso.encore/a0-memoize_","taoensso.encore/a1-memoize_","taoensso.encore/memoize-1","taoensso.encore/memoize1","taoensso.encore/memoize*","taoensso.encore/memoize_","taoensso.encore/nnil?","taoensso.encore/nneg-num?","taoensso.encore/nneg-int?","taoensso.encore/nneg-float?","taoensso.encore/uint?","taoensso.encore/pint?","taoensso.encore/nnil=","taoensso.encore/as-?uint","taoensso.encore/as-?pint","taoensso.encore/as-?ufloat","taoensso.encore/as-?pfloat","taoensso.encore/as-uint","taoensso.encore/as-pint","taoensso.encore/as-ufloat","taoensso.encore/as-pfloat","taoensso.encore/run!*","taoensso.encore/nano-time","taoensso.encore/-swap-cache!","taoensso.encore/-unswapped","taoensso.encore/-vswapped","taoensso.encore/-swap-k!","taoensso.encore/update-in*","taoensso.encore/idx-fn","taoensso.encore/vec*","taoensso.encore/set*","taoensso.encore/have-transducers?","taoensso.encore/pval?","taoensso.encore/as-?pval","taoensso.encore/as-pval","p1__34763#","nolist?","G__34805","taoensso.encore/compile-ns-filter","ns-pattern","taoensso.encore.compile_ns_filter","whitelist","blacklist","taoensso.encore/undefined->nil","taoensso.encore/spaced-str-with-nils","taoensso.encore/spaced-str","G__34812","taoensso.encore/approx=","taoensso.encore.approx_EQ__EQ_","taoensso.encore/join-once","seq34813","G__34814","taoensso.encore/nnil-set","cljs.core.disj","taoensso.encore/keys=","taoensso.encore/keys<=","taoensso.encore/keys>=","taoensso.encore/keys=nnil?","taoensso.encore/logging-level","taoensso.encore/set-exp-backoff-timeout!","p__34817","vec__34818","seq34815","G__34816","nullary-f","nattempt","js/taoensso.encore.*log-level*","taoensso.encore/*log-level*","taoensso.encore/log?","->n","level","taoensso.encore/tracef","seq34821","G__34822","taoensso.encore/debugf","seq34823","G__34824","taoensso.encore/infof","seq34825","G__34826","taoensso.encore/warnf","seq34827","G__34828","taoensso.encore/errorf","seq34841","G__34842","taoensso.encore/fatalf","seq34955","G__34956","taoensso.encore/reportf","seq34980","G__34981","taoensso.encore/greatest","p__35045","vec__35046","seq35026","G__35027","?comparator","p1__34768#","p2__34769#","taoensso.encore/least","p__35075","vec__35076","seq35061","G__35062","p1__34770#","p2__34771#","taoensso.encore/clj1098","taoensso.encore/distinct-by","seen","p__35095","vec__35096","v*","G__35184","taoensso.encore/distinctv","taoensso.encore.distinctv","tr","p__35204","vec__35205","taoensso.encore/map-kvs","kf","vf","taoensso.encore/as-map","p__35236","vec__35238","seq35224","G__35226","taoensso.encore/keywordize-map","taoensso.encore/removev","cljs.core/filterv","taoensso.encore/nvec?","taoensso.encore/memoized","seq35253","G__35254","G__35255","cache","?dv","taoensso.encore/translate-signed-idx","signed-idx","taoensso.encore/sentinel","taoensso.encore/sentinel?","taoensso.encore/nil->sentinel","taoensso.encore/sentinel->nil","taoensso.encore/singleton?","taoensso.encore/->?singleton","vec__35263","taoensso.encore/->vec","taoensso.encore/fzipmap","vs","taoensso.encore/filter-kvs","taoensso.encore/remove-kvs","taoensso.encore/revery","taoensso.encore/revery-kv","taoensso.encore/every","taoensso.encore/replace-in","seq35267","G__35268","ops","?op","vec__35269","type","valf","G__35273","taoensso.encore/swap-in!*","G__35275","taoensso.encore/swap-val!*","taoensso.encore/dswap!","taoensso.encore/swap!*","taoensso.encore/compile-str-filter","taoensso.encore/kw-identical?","taoensso.encore/system-newline","taoensso.encore/-matching-error","taoensso.truss/matching-error","G__35277","taoensso.encore/rate-limiter*","taoensso.encore/limiter*","taoensso.encore/limiter","taoensso.encore/dis-assoc-some","taoensso.encore/println-atomic","taoensso.encore/-merge-with","taoensso.encore/fast-merge","taoensso.encore/secure-rand-bytes","taoensso.encore/round*","taoensso.encore/ajax-lite","taoensso.encore/error-data","data-map","cljs.core/ex-data","base-map","err","taoensso.encore/when?","e35278","taoensso.encore/call-form?","G__35280","taoensso.encore/get-subvec","G__35282","taoensso.encore/get-subvector","G__35284","taoensso.encore/get-substr-by-idx","taoensso.encore.get_substr_by_idx","G__35286","taoensso.encore/get-substr-by-len","G__35288","taoensso.encore/get-substr","G__35290","taoensso.encore/get-substring","taoensso.encore/?subvec<idx","taoensso.encore/?subvec<len","taoensso.encore/subvec*","taoensso.encore/?substr<idx","taoensso.encore/?substr<len","taoensso.encore/ex-root","taoensso.truss/ex-root","taoensso.encore/ex-type","taoensso.truss/ex-type","taoensso.encore/ex-map*","taoensso.truss/ex-map*","taoensso.encore/ex-map","taoensso.truss/ex-map","taoensso.encore/ex-chain","taoensso.truss/ex-chain","taoensso.encore/matching-error","taoensso.encore/catching-rf","taoensso.truss/catching-rf","taoensso.encore/catching-xform","taoensso.truss/catching-xform","taoensso.encore/get-truss-data","taoensso.truss/get-data","taoensso.encore/ex-message","taoensso.encore/ex-data","cljs.core/ExceptionInfo","taoensso.encore/ex-cause","taoensso.encore/some?","G__35296","taoensso.encore/is!","taoensso.encore.is_BANG_","e35297","taoensso.encore/pred","pred-fn","taoensso.encore/pred-fn"],"sourcesContent":["(ns taoensso.encore\n \"Extended core library for Clojure/Script that emphasizes:\n * Cross-platform API\n * Flexibility\n * Performance\n * Backwards compatibility\n\n This lib's mostly for my own use and for advanced users that feel\n comfortable reading this source. Not providing much beginner-oriented\n documentation for this, sorry.\n\n Common naming conventions used across my libs:\n **foo** - Dynamic var\n foo! - Fn with side-effects, or that should otherwise be used cautiously\n foo? - Truthy val or fn that returns truthy val\n foo!? - Fn that has side-effects (or requires caution) and that return\n a truthy val. Note: !?, not ?!\n foo$ - Fn that's notably expensive to compute (e.g. hits db)\n foo_ - Derefable val (e.g. atom, volatile, delay, etc.)\n foo__ - Derefable in a derefable (e.g. delay in an atom), etc.\n _ - Unnamed val\n _foo - Named but unused val\n ?foo - Optional val (emphasize that val may be nil)\n foo* - A variation of `foo` (e.g. `foo*` macro vs `foo` fn)\n foo' - ''\n -foo - Public implementation detail or intermediate (e.g. uncoerced) val\n >foo - Val \\\"to foo\\\" (e.g. >sender, >host), or fn to put/coerce/transform\n <foo - Val \\\"from foo\\\" (e.g. <sender, <host), or fn to take/coerce/transform\n ->foo - Fn to put/coerce/transform\n\n Type affixes may be used for clarity:\n <prefix>-<name> - m-users, v-users, n-users, etc. (also nusers when unambiguous)\n <name>-<postfix> - users-map, users-vec, user-count, etc.\n\n Regarding 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\n Commit 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\n Example commit messages:\n v1.0.0 (2022-01-27) ; Tagged release\n [new] [#122] Add new feature x (@contributor)\n\n Version numbers:\n Ver tables: X.Y.Z (without backticks)\n Min ver: vX.Y.Z+\n Elsewhere: vX.Y.Z\"\n\n {:author \"Peter Taoussanis (@ptaoussanis)\"}\n\n (:refer-clojure :exclude\n [if-let if-some if-not when when-not when-some when-let cond defonce\n binding run! some? ident? float? boolean? uri? indexed? bytes?\n int? pos-int? neg-int? nat-int? inst?\n simple-ident? qualified-ident?\n simple-symbol? qualified-symbol?\n simple-keyword? qualified-keyword?\n format update-in merge merge-with subvec\n memoize abs ex-message ex-data ex-cause ex-info\n newline satisfies? uuid\n pr prn print println])\n\n #?(:clj\n (:require\n [clojure.core :as core]\n [clojure.string :as str]\n [clojure.set :as set]\n [clojure.java.io :as jio]\n [clojure.tools.reader.edn :as edn]\n [taoensso.truss :as truss :refer [ex-info]])\n\n :cljs\n (:require\n [cljs.core :as core]\n [clojure.string :as str]\n [clojure.set :as set]\n [cljs.reader]\n [cljs.tools.reader.edn :as edn]\n [goog.object :as gobj]\n [goog.array :as garray]\n [goog.string :as gstr]\n [goog.string.format]\n [goog.string.StringBuffer]\n [goog.events :as gevents]\n [goog.net.XhrIo :as gxhr]\n [goog.net.XhrIoPool :as gxhr-pool]\n [goog.Uri.QueryData :as gquery-data]\n [goog.net.EventType]\n [goog.net.ErrorCode]\n [taoensso.truss :as truss :refer [ex-info]]))\n\n #?(:clj\n (:import\n [java.util Date Locale TimeZone]\n [java.text SimpleDateFormat]\n [java.util.concurrent CountDownLatch]\n [java.util.concurrent.atomic AtomicReference]\n [java.util.function UnaryOperator])\n\n :cljs\n (:require-macros\n [taoensso.encore :as enc-macros :refer\n [compile-if qb\n if-let if-some if-not when when-not when-some when-let\n -cond cond cond! cond-let and? or? def* defonce\n -cas!? now-udt* now-nano* min* max*\n name-with-attrs deprecated new-object defalias\n identical-kw? satisfies? satisfies! instance! use-transient?\n with-default-print-opts typed-val]])))\n\n(def encore-version \"See `assert-min-encore-version`\" [3 153 1])\n\n(declare println)\n\n(comment\n (remove-ns 'taoensso.encore)\n (:api (interns-overview))\n (test/run-tests)\n\n \"\u2234 \u2235 \u2115 \u2124 \u211d \u221e \u2260 \u2208 \u2209 \u21d2\u21d4 \u2192 \u00d7 \u2283\u2282 \u2287\u2286 \u2261 \u00ac \u2200 \u2203 \u221d\"\n (set! *unchecked-math* :warn-on-boxed)\n (set! *unchecked-math* false))\n\n;;;; Core macros\n\n#?(:clj (defmacro ^:no-doc and? \"Private, don't use.\" ([] true) ([x] x) ([x & next] `(if ~x (and? ~@next) false))))\n#?(:clj (defmacro ^:no-doc or? \"Private, don't use.\" ([] false) ([x] x) ([x & next] `(if ~x true (or? ~@next)))))\n\n#?(:clj\n (defmacro if-let\n \"Supersets `core/if-let` functionality. Like `core/if-let` but supports multiple\n bindings, 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])\"\n {:style/indent 1}\n ([bindings then ] `(if-let ~bindings ~then nil))\n ([bindings then else]\n (let [s (seq bindings)]\n (if s ; (if-let [] true false) => true\n (let [[b1 b2 & bnext] s]\n (if (= b1 :let)\n `(let ~b2 (if-let ~(vec bnext) ~then ~else))\n `(let [b2# ~b2]\n (if b2#\n (let [~b1 b2#]\n (if-let ~(vec bnext) ~then ~else))\n ~else))))\n then)))))\n\n#?(:clj\n (defmacro if-some\n \"Supersets `core/if-some` functionality. Like `core/if-some` but supports multiple\n bindings, 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])\"\n {:style/indent 1}\n ([bindings then] `(if-some ~bindings ~then nil))\n ([bindings then else]\n (let [s (seq bindings)]\n (if s ; (if-some [] true false) => true\n (let [[b1 b2 & bnext] s]\n (if (= b1 :let)\n `(let ~b2 (if-some ~(vec bnext) ~then ~else))\n `(let [b2# ~b2]\n (if (nil? b2#)\n ~else\n (let [~b1 b2#]\n (if-some ~(vec bnext) ~then ~else))))))\n then)))))\n\n#?(:clj\n (defmacro if-not\n \"Supersets `core/if-not` functionality.\n Same as `encore/if-let` with `then` `and `else` forms swapped.\"\n ;; Also avoids unnecessary `(not test)`\n {:style/indent 1}\n ([test-or-bindings then]\n (if (vector? test-or-bindings)\n `(if-let ~test-or-bindings nil ~then)\n `(if ~test-or-bindings nil ~then)))\n\n ([test-or-bindings then else]\n (if (vector? test-or-bindings)\n `(if-let ~test-or-bindings ~else ~then)\n `(if ~test-or-bindings ~else ~then)))))\n\n#?(:clj\n (defmacro when-let\n \"Supersets `core/when-let` functionality. Like `core/when-let` but supports multiple\n bindings, 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])\"\n ;; Now a feature subset of all-case `when`\n {:style/indent 1}\n [bindings & body] `(if-let ~bindings (do ~@body))))\n\n#?(:clj\n (defmacro when\n \"Supersets `core/when` and `core/when-let` functionality. When `test-or-bindings` is\n a vector, same as `encore/when-let`. Otherwise same as `core/when`.\"\n {:style/indent 1}\n [test-or-bindings & body]\n (if (vector? test-or-bindings)\n `(if-let ~test-or-bindings (do ~@body) nil)\n `(if ~test-or-bindings (do ~@body) nil))))\n\n#?(:clj\n (defmacro when-not\n \"Supersets `core/when-not` functionality.\n Same as `encore/if-let` with `body` as `else` form.\"\n {:style/indent 1}\n [test-or-bindings & body]\n (if (vector? test-or-bindings)\n `(if-let ~test-or-bindings nil (do ~@body))\n `(if ~test-or-bindings nil (do ~@body)))))\n\n#?(:clj\n (defmacro when-some\n \"Supersets `core/when-some` functionality. Like `core/when-some` but supports multiple\n bindings, 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])\"\n {:style/indent 1}\n [test-or-bindings & body]\n (if (vector? test-or-bindings)\n `(if-some ~test-or-bindings (do ~@body) nil)\n `(if (nil? ~test-or-bindings) nil (do ~@body)))))\n\n(comment\n (if-let [a :a b (= a :a)] [a b] \"else\")\n (if-let [a :a b (= a :b)] [a b] \"else\")\n (if-some [a :a b (= a :b)] [a b] \"else\")\n (when-let [a :a b nil] \"true\")\n (when-let [:let [a :a b :b] c (str a b)] c))\n\n(defn ^:no-doc list-form?\n \"Private, don't use.\n Returns true if given a list or Cons (=> possible call form).\"\n #?(:cljs {:tag 'boolean})\n [x] (or (list? x) (instance? #?(:clj clojure.lang.Cons :cljs cljs.core/Cons) x)))\n\n(declare str-starts-with?)\n\n#?(:clj\n (defmacro ^:no-doc -cond [throw? & clauses]\n (if-let [[c1 c2 & more] (seq clauses)]\n (if-not (next clauses)\n c1 ; Implicit else\n (case c1\n (true :else :default :always :then) c2 ; Avoid unnecessary (if <truthy> ...)\n (false nil) `(-cond ~throw? ~@more) ; Avoid unnecessary (if <falsey> ...)\n :do `(do ~c2 (-cond ~throw? ~@more))\n :let `(let ~c2 (-cond ~throw? ~@more))\n :binding `(core/binding ~c2 (-cond ~throw? ~@more))\n :with-redefs `(with-redefs ~c2 (-cond ~throw? ~@more))\n (:when :when-let) `(when ~c2 (-cond ~throw? ~@more))\n :when-not `(when-not ~c2 (-cond ~throw? ~@more))\n :when-some `(when-some ~c2 (-cond ~throw? ~@more))\n :return-when `(if-let [x# ~c2] x# (-cond ~throw? ~@more))\n :return-some `(if-some [x# ~c2] x# (-cond ~throw? ~@more))\n\n ;;; Support arbitrary wrapping\n (:wrap->> :wrap) `(->> (-cond ~throw? ~@more) ~c2)\n (:wrap->) `(-> (-cond ~throw? ~@more) ~c2)\n\n ;;; 3-clause cases\n (:if-let :if-some :if-not)\n (if (empty? more) ; Missing 3rd clause\n (truss/ex-info!\n (str \"[encore/cond] Missing 3rd clause after special keyword: \" `(~'cond ~c1 ~c2 ~'<missing>)))\n\n (let [[c3 & more] more]\n (case c1\n :if-let `(if-let ~c2 ~c3 (-cond ~throw? ~@more))\n :if-some `(if-some ~c2 ~c3 (-cond ~throw? ~@more))\n :if-not `(if-not ~c2 ~c3 (-cond ~throw? ~@more)))))\n\n (if (keyword? c1)\n (if (str-starts-with? (name c1) \"_\")\n `(-cond ~throw? ~@more) ; Skip\n (truss/ex-info! (str \"[encore/cond] Unrecognized special keyword: \" `(~'cond ~c1 ~c2))))\n\n (if (vector? c1) ; Deprecated\n `(if-let ~c1 ~c2 (-cond ~throw? ~@more))\n\n ;; Experimental, assumes `not` = `core/not`:\n (if (and (list-form? c1) (= (first c1) 'not))\n `(if ~(second c1) (-cond ~throw? ~@more) ~c2)\n `(if ~c1 ~c2 (-cond ~throw? ~@more)))))))\n\n (when throw?\n `(truss/ex-info! \"[encore/cond!] No matching clause\")))))\n\n#?(:clj\n (defmacro cond\n \"Supersets `core/cond` functionality. Like `core/cond` but supports implicit\n final `else` clause, and special clause keywords for advanced behaviour:\n\n (cond\n :let [x \\\"x\\\"] ; Establish let binding/s for remaining forms\n :binding [*x* \\\"x\\\"] ; Establish dynamic binding/s for remaining forms\n :do (println (str \\\"x value: \\\" x)) ; Eval expr for side-effects\n :if-let [y \\\"y\\\", z nil] \\\"y and z were both truthy\\\"\n :if-some [y \\\"y\\\", z nil] \\\"y and z were both non-nil\\\"\n :else \\\"fallback value\\\")\n\n Simple, flexible way to eliminate deeply-nested control flow code.\n `:let` support inspired by <https://github.com/Engelberg/better-cond>.\"\n [& clauses] `(-cond false ~@clauses)))\n\n#?(:clj\n (defmacro cond!\n \"Like `cond` but throws on non-match like `case` and `condp`.\"\n [& clauses] `(-cond true ~@clauses)))\n\n#?(:clj\n (defmacro cond-let\n \"Repeatedly rebinds given `sym` for each truthy condition and\n returns `sym`'s final value.\n\n Like a cross between `as->` and `cond->`:\n (cond-let [n 0] ; sym and its init value\n true (inc n)\n false (* n 5)\n (> n 0) (* n 2)) => 2\"\n\n [[sym init-val] & clauses]\n (when-not (even? (count clauses))\n (truss/ex-info!\n (str \"[encore/cond-let] Needs even number of clauses: \"\n `(~'cond-let [~sym ~init-val] ~'...))))\n\n (if (empty? clauses)\n init-val\n (let [steps (mapv (fn [[test step]] `(if ~test ~step ~sym)) (partition 2 clauses))]\n `(let [~sym ~init-val\n ~@(interleave (repeat sym) steps)]\n ~sym)))))\n\n#?(:clj\n (defmacro compile-if\n \"Evaluates `test`. If it returns logical true (and doesn't throw), expands\n to `then`, otherwise expands to `else`.\"\n {:style/indent 1}\n ([test then ] `(compile-if ~test ~then nil))\n ([test then else] (if (try (eval test) (catch Throwable _ false)) then else))))\n\n#?(:clj (defmacro compile-when {:style/indent 1} [test & body] `(compile-if ~test (do ~@body) nil)))\n\n;; (:ns &env) is nnil iff compiling for Cljs. This gives macros a way to produce\n;; different code depending on target (Clj/s), something reader conditionals cannot do.\n#?(:clj (defmacro if-clj [then & [else]] (if (:ns &env) else then)))\n#?(:clj (defmacro if-cljs [then & [else]] (if (:ns &env) then else)))\n#?(:clj\n (defmacro ^:no-doc target-case\n \"Private, don't use. From `net.cgrand/macrovich`.\n Like a reader conditional, but branches at expansion (not read) time.\n Chooses form to emit based on target language (not macro language).\n\n For use by macros or macro-supporting fns, can use un/quoted:\n (defmacro foo [] (target-case :clj \\\"->Clojure\\\" :cljs \\\"->ClojureScript\\\" :cljd \\\"->ClojureDart\\\"))\n (defmacro foo [] `(target-case :clj \\\"->Clojure\\\" :cljs \\\"->ClojureScript\\\" :cljd \\\"->ClojureDart\\\"))\"\n\n [& {:keys [clj cljs cljd]}]\n (cond\n (contains? &env '&env)\n `(cond (:ns ~'&env) ~cljs (:nses ~'&env) ~cljd :else ~clj)\n #?(:clj (:ns &env) :cljs true) cljs\n #?(:clj (:nses &env) :cljd true) cljd\n :else clj)))\n\n(comment (clojure.walk/macroexpand-all '(defmacro foo [x] (target-case :clj \"clj\" :cljs \"cljs\"))))\n\n#?(:clj\n (defmacro binding*\n \"For Clj: faster version of `core/binding`.\n For Cljs: identical to `core/binding`.\n Can interfere with some deep-walking macros.\"\n {:style/indent 1}\n [bindings & body]\n (if (:ns &env)\n `(cljs.core/binding ~bindings ~@body)\n (let [;; Avoids unnecessary runtime map construction\n bindings-map ; #{<var-form> <val-form>}\n (reduce-kv (fn [m k v] (assoc m `(var ~k) v))\n {} (apply hash-map bindings))]\n `(let [] ; Nb for frame\n (push-thread-bindings ~bindings-map)\n (try ~@body (finally (pop-thread-bindings))))))))\n\n(comment\n (do\n (def ^:dynamic *d1* nil)\n (def ^:dynamic *d2* nil)\n (qb 1e6 ; [354.32 308.58]\n (core/binding [*d1* :d1, *d2* :d2] [*d1* *d2*])\n (binding* [*d1* :d1, *d2* :d2] [*d1* *d2*]))))\n\n(defn name-with-attrs\n \"Given a symbol and args, returns [<name-with-attrs-meta> <args> <attrs>]\n with support for `defn` style `?docstring` and `?attrs-map`.\"\n ([sym args ] (name-with-attrs sym args nil))\n ([sym args attrs-merge]\n (let [[?docstring args] (if (and (string? (first args)) (next args)) [(first args) (next args)] [nil args])\n [attrs args] (if (and (map? (first args)) (next args)) [(first args) (next args)] [{} args])\n [?docstring args] (if (and (string? (first args)) (next args)) [(first args) (next args)] [?docstring args])\n\n attrs (if ?docstring (assoc attrs :doc ?docstring) attrs)\n attrs (if-let [m (meta sym)] (conj m attrs) attrs)\n attrs (conj attrs attrs-merge)]\n\n [(with-meta sym attrs) args attrs])))\n\n#?(:clj\n (defmacro def*\n \"Like `core/def` but supports attrs map.\"\n {:arglists '([sym ?docstring ?attrs-map init-expr])\n :style/indent 1}\n [sym & args]\n (let [[sym body] (name-with-attrs sym args)]\n `(def ~sym ~@body))))\n\n(comment (meta (def* foo {:private true} \"docstring\" \"value\")))\n\n#?(:clj\n (defmacro defonce\n \"Like `core/defonce` but supports docstring and attrs map.\"\n {:arglists '([sym ?docstring ?attrs-map init-expr])\n :style/indent 1}\n [sym & args]\n (let [[sym body] (name-with-attrs sym args)]\n (if (:ns &env)\n `(cljs.core/defonce ~sym ~@body)\n `(clojure.core/defonce ~sym ~@body)))))\n\n#?(:clj\n (defmacro case-eval\n \"Like `case` but test expressions are evaluated for their compile-time value.\"\n {:style/indent 1}\n [expr & clauses]\n (let [default? (odd? (count clauses))\n default (when default? (last clauses))\n clauses (if default? (butlast clauses) clauses)]\n `(case ~expr\n ~@(map-indexed (fn [i# form#] (if (even? i#) (eval form#) form#)) clauses)\n ~(when default? default)))))\n\n#?(:clj\n (defmacro doto-cond\n \"Cross between `doto`, `cond->` and `as->`.\"\n {:style/indent 1}\n [[sym x] & clauses]\n (assert (even? (count clauses)))\n (let [gs (gensym)\n pstep (fn [[test-expr step]] `(when-let [~sym ~test-expr] (-> ~gs ~step)))]\n `(let [~gs ~x]\n ~@(map pstep (partition 2 clauses))\n ~gs))))\n\n#?(:clj\n (defmacro identical-kw?\n \"Returns true iff two keywords are identical.\n Portable and maximally fast.\n For Clj this expands to: `(identical? x y)`\n For Cljs this expands to: `(keyword-identical? x y)`\"\n [x y]\n (if (:ns &env)\n `(cljs.core/keyword-identical? ~x ~y)\n `(identical? ~x ~y))))\n\n#?(:clj\n (defmacro declare-remote\n \"Declares given ns-qualified symbols, preserving metadata.\n Clj only. Useful for circular dependencies.\"\n [& syms]\n (let [original-ns (str *ns*)]\n `(do ~@(map (fn [s]\n (let [ns (namespace s)\n v (name s)\n m (meta s)]\n `(do (in-ns '~(symbol ns))\n (declare ~(with-meta (symbol v) m))))) syms)\n (in-ns '~(symbol original-ns))))))\n\n#?(:clj\n (defmacro ^:no-doc typed-val\n \"Private, don't use. Expands to `{:value ~x, :type (type ~x)}.\"\n [x] `{:value ~x, :type (type ~x)}))\n\n#?(:clj (defmacro new-object [] (if (:ns &env) `(cljs.core/js-obj) `(Object.))))\n\n#?(:clj\n (defmacro update-var-root!\n \"Updates root binding (value) of the var identified by given symbol, and returns\n the new value:\n (update-var-root! my-var (fn [old-root-val] <new-root-val>)) => <new-root-val>\n\n Similar to `alter-var-root` but cross-platform and takes a symbol rather than a var.\n See also `set-var-root!`.\"\n [var-sym update-fn]\n (if (:ns &env)\n `(set! ~var-sym (~update-fn ~var-sym))\n `(alter-var-root (var ~var-sym) ~update-fn))))\n\n#?(:clj\n (defmacro set-var-root!\n \"Sets root binding (value) of the var identified by given symbol, and returns\n the new value. Cross-platform. See also `update-var-root!`.\"\n [var-sym root-val]\n (if (:ns &env)\n `(set! ~var-sym ~root-val)\n `(alter-var-root (var ~var-sym) (fn [_#] ~root-val)))))\n\n;;;; Vars\n\n#?(:clj\n (defn ^:no-doc var-info\n \"Private, don't use.\n Returns ?{:keys [var sym ns name meta ...]} for given symbol.\"\n [macro-env sym]\n (when (symbol? sym)\n (if (:ns macro-env)\n (let [ns (find-ns 'cljs.analyzer.api)\n v (ns-resolve ns 'resolve)] ; Don't cache!\n (when-let [{:as m, var-ns :ns, var-name :name} ; ?{:keys [meta ns name ...]}\n (@v macro-env sym)]\n (when var-ns ; Skip locals\n (assoc m :sym (symbol (str var-ns) (name var-name))))))\n\n (when-let [v (resolve macro-env sym)]\n (let [{:as m, var-ns :ns, var-name :name} (meta v)]\n {:var v\n :sym (symbol (str var-ns) (name var-name))\n :ns var-ns\n :name var-name\n :meta\n (if-let [x (get m :arglists)]\n (assoc m :arglists `'~x) ; Quote\n (do m))}))))))\n\n#?(:clj (defn- require-sym-ns [sym] (when-let [ns (namespace sym)] (require (symbol ns)) true)))\n#?(:clj\n (defn ^:no-doc resolve-sym\n \"Private, don't use.\n Returns resolved qualified Clj/s symbol, or nil.\"\n ;; Fundamental limitations:\n ;; 1. Macros targeting Cljs cannot expand to a Cljs symbol in an unrequired namespace.\n ;; 2. Macros targeting Cljs cannot eval a Cljs symbol for its value at macro time.\n ([ sym ] (resolve-sym nil sym false)) ; Clj only\n ([macro-env sym ] (resolve-sym macro-env sym false))\n ([macro-env sym may-require-ns?]\n (when (symbol? sym)\n (if-not may-require-ns?\n (get (var-info macro-env sym) :sym)\n (or\n (get (var-info macro-env sym) :sym)\n (when (truss/catching (require-sym-ns sym))\n (get (var-info macro-env sym) :sym))))))))\n\n(comment (resolve-sym nil 'string?))\n\n;;;; Aliases\n\n#?(:clj\n (defn ^:no-doc alias-link-var\n \"Private, don't use.\"\n [dst-var src-var dst-attrs]\n (add-watch src-var dst-var\n (fn [_ _ _ new-val]\n (alter-var-root dst-var (fn [_] new-val))\n ;; Wait for src-var meta to change. This is hacky, but\n ;; generally only relevant for REPL dev so seems tolerable.\n (let [t (Thread/currentThread)]\n (future\n (.join t 100)\n (reset-meta! dst-var\n (core/merge (meta src-var) dst-attrs))))))))\n\n#?(:clj\n (defmacro defalias\n \"Defines a local alias for the var identified by given qualified\n source symbol: (defalias my-map clojure.core/map), etc.\n\n Source var's metadata will be preserved (docstring, arglists, etc.).\n Changes to Clj source var's value will also be applied to alias.\n See also `defaliases`.\"\n ([ src ] `(defalias nil ~src nil nil))\n ([alias src ] `(defalias ~alias ~src nil nil))\n ([alias src alias-attrs ] `(defalias ~alias ~src ~alias-attrs nil))\n ([alias src alias-attrs alias-body]\n (let [cljs? (core/some? (:ns &env))\n src-sym (truss/have symbol? src)\n alias-sym (truss/have symbol? (or alias (symbol (name src-sym))))\n\n src-var-info (var-info &env src-sym)\n {src-var, :var src-attrs :meta} src-var-info\n\n alias-attrs\n (if (string? alias-attrs) ; Back compatibility\n {:doc alias-attrs}\n (do alias-attrs))\n\n link? (get alias-attrs :link? true)\n alias-attrs (dissoc alias-attrs :link?)\n\n final-attrs\n (select-keys (core/merge src-attrs (meta src-sym) (meta alias-sym) alias-attrs)\n [:doc :no-doc :arglists :private :macro :added :deprecated :inline :tag :redef])\n\n alias-sym (with-meta alias-sym final-attrs)\n alias-body (or alias-body (if cljs? src-sym `@~src-var))]\n\n #_(spit \"debug.txt\" (str (if cljs? \"cljs: \" \"clj: \") src-sym \": \" (meta alias-sym) \"\\n\") :append true)\n\n (when-not src-var-info\n (truss/ex-info! (str \"[encore/defalias] Source var not found: \" src)\n {:src src, :ns (str *ns*)}))\n\n (if cljs?\n `(def ~alias-sym ~alias-body)\n `(do\n ;; Need `alter-meta!` to reliably retain macro status!\n (alter-meta! (def ~alias-sym ~alias-body) conj ~final-attrs)\n (when ~link? (alias-link-var (var ~alias-sym) ~src-var ~alias-attrs))\n ;; (assert (bound? (var ~alias-sym)) ~(str \"Alias `\" alias-sym \"` is bound\"))\n (do (var ~alias-sym))))))))\n\n#?(:clj\n (defmacro defaliases\n \"Bulk version of `defalias`.\n Takes 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\\\"}})\"\n {:arglists '([{:keys [alias src attrs body]} ...])}\n [& clauses]\n `(do\n ~@(map\n (fn [x]\n (cond\n (symbol? x) `(defalias ~x)\n (map? x)\n (let [{:keys [alias src attrs body]\n :or {attrs (dissoc x :alias :src)}} x]\n `(defalias ~alias ~src ~attrs ~body))\n\n :else\n (truss/unexpected-arg! x\n {:context `defaliases\n :param 'alias-clause\n :expected '#{symbol map}})))\n clauses))))\n\n(comment\n (defn src \"src doc 1\" [] \"val1\")\n (defalias ^{:doc \"alias doc 1\"} src* src {:doc \"alias doc 2\"})\n [(src*) (meta #'src*)]\n (macroexpand '(defaliases {:alias map2 :src map :doc \"map2\"}))\n (do (defaliases {:alias map2 :src map :doc \"map2\"}))\n\n (defn myfn \"myfn doc\" [x y] (Thread/sleep 2000) (+ x y))\n (defaliases {:alias myfn2 :src myfn :body (fmemoize myfn)})\n (myfn2 1 1))\n\n;;;; Interfaces\n\n#?(:clj (declare caching-satisfies?))\n#?(:clj\n (defmacro satisfies?\n \"Faster `satisfies?` to work around CLJ-1814 until a proper upstream fix.\n May cache, so possibly inappropriate for dynamic work.\"\n [protocol x]\n (if (:ns &env)\n ;; `(cljs.core/implements? ~protocol ~x)\n `(cljs.core/satisfies? ~protocol ~x)\n `(caching-satisfies? ~protocol ~x))))\n\n#?(:clj\n (defmacro satisfies!\n \"If (satisfies? protocol arg) is true, returns arg.\n Otherwise throws runtime ex-info.\"\n {:arglists\n '([protocol arg]\n [protocol arg {:keys [msg context param ...]}]\n [protocol arg & {:keys [msg context param ...]}])}\n\n ([protocol arg ] `(satisfies! ~protocol ~arg nil))\n ([protocol arg k1 & more] `(satisfies! ~protocol ~arg ~(apply hash-map k1 more)))\n ([protocol arg opts]\n (let [opts (conj {:expected `(quote (satisfies? ~protocol ~'arg))} opts)]\n `(let [arg# ~arg]\n (if (satisfies? ~protocol arg#)\n arg#\n (truss/unexpected-arg! arg# ~opts)))))))\n\n(comment (macroexpand '(satisfies! my-protocol arg :k1 :v1 :k2 :v2)))\n\n#?(:clj\n (defmacro instance!\n \"If (instance? class arg) is true, returns arg.\n Otherwise throws runtime ex-info.\"\n {:arglists\n '([class arg]\n [class arg {:keys [msg context param ...]}]\n [class arg & {:keys [msg context param ...]}])}\n\n ([class arg ] `(instance! ~class ~arg nil))\n ([class arg k1 & more] `(instance! ~class ~arg ~(apply hash-map k1 more)))\n ([class arg opts]\n (let [opts (conj {:expected `(quote (instance? ~class ~'arg))} opts)]\n `(let [arg# ~arg]\n (if (instance? ~class arg#)\n arg#\n (truss/unexpected-arg! arg# ~opts)))))))\n\n(comment (macroexpand '(instance! String 5 :k1 :v1 :k2 :v2)))\n\n;;;; Cljs environment\n;; `js/foo` - `foo` in global object/ns (depends on *target*)\n;; `js/window` - `window` object: global ns in browsers\n;; `js/global` - `global` object: global ns in Node.js, etc.?\n;; `goog/global` - Closure's environment-agnostic global object\n\n#?(:cljs (def ^:no-doc node-target? (= *target* \"nodejs\")))\n#?(:cljs (def ^:no-doc react-native-target? (= *target* \"react-native\")))\n#?(:cljs (def ^:no-doc js-?window (when (and (not react-native-target?) (exists? js/window)) js/window))) ; Present iff in browser\n#?(:cljs (def ^:no-doc js-?process (when (exists? js/process) js/process))) ; Present iff in Node.js\n#?(:cljs (def ^:no-doc js-?crypto\n (when-not react-native-target?\n (or\n (when (exists? js/crypto) js/crypto)\n (when (exists? js/window) (gobj/get js/window \"crypto\"))))))\n\n;;;; Types\n;; Could really do with a portable ^boolean hint!\n\n(do\n #?(:clj (defn nempty-str? [x] (and (string? x) (not (.isEmpty ^String x))))\n :cljs (defn ^boolean nempty-str? [x] (and (string? x) (not (= x \"\")))))\n #?(:clj (defn boolean? [x] (instance? Boolean x))\n :cljs (defn ^boolean boolean? [x] (or (true? x) (false? x))))\n #?(:clj (defn indexed? [x] (instance? clojure.lang.Indexed x))\n :cljs (defn ^boolean indexed? [x] (implements? IIndexed x)))\n #?(:clj (defn named? [x] (instance? clojure.lang.Named x))\n :cljs (defn ^boolean named? [x] (implements? INamed x)))\n #?(:clj (defn editable? [x] (instance? clojure.lang.IEditableCollection x))\n :cljs (defn ^boolean editable? [x] (implements? IEditableCollection x)))\n #?(:clj (defn derefable? [x] (instance? clojure.lang.IDeref x))\n :cljs (defn ^boolean derefable? [x] (implements? IDeref x)))\n #?(:clj (defn atom? [x] (instance? clojure.lang.Atom x))\n :cljs (defn ^boolean atom? [x] (instance? Atom x)))\n #?(:clj (defn transient? [x] (instance? clojure.lang.ITransientCollection x))\n :cljs (defn ^boolean transient? [x] (implements? ITransientCollection x)))\n #?(:clj (defn lazy-seq? [x] (instance? clojure.lang.LazySeq x))\n :cljs (defn ^boolean lazy-seq? [x] (instance? LazySeq x)))\n #?(:clj (defn re-pattern? [x] (instance? java.util.regex.Pattern x))\n :cljs (defn ^boolean re-pattern? [x] (instance? js/RegExp x)))\n #?(:clj (defn can-meta? [x] (instance? clojure.lang.IObj x)) ; Not IMeta\n :cljs (defn ^boolean can-meta? [x] (implements? IWithMeta x)))\n\n #?(:clj (defn uri? [x] (instance? java.net.URI x)))\n #?(:clj (defn throwable? [x] (instance? Throwable x)))\n #?(:clj (defn exception? [x] (instance? Exception x)))\n\n (defn stringy? #?(:cljs {:tag 'boolean}) [x] (or (keyword? x) (string? x)))\n (defn ident? #?(:cljs {:tag 'boolean}) [x] (or (keyword? x) (symbol? x)))\n (defn nameable? #?(:cljs {:tag 'boolean}) [x] (or (named? x) (string? x)))\n (defn simple-ident? #?(:cljs {:tag 'boolean}) [x] (and (ident? x) (nil? (namespace x))))\n (defn qualified-ident? #?(:cljs {:tag 'boolean}) [x] (and (ident? x) (namespace x) true))\n (defn simple-symbol? #?(:cljs {:tag 'boolean}) [x] (and (symbol? x) (nil? (namespace x))))\n (defn qualified-symbol? #?(:cljs {:tag 'boolean}) [x] (and (symbol? x) (namespace x) true))\n (defn simple-keyword? #?(:cljs {:tag 'boolean}) [x] (and (keyword? x) (nil? (namespace x))))\n (defn qualified-keyword? #?(:cljs {:tag 'boolean}) [x] (and (keyword? x) (namespace x) true))\n (defn vec2? #?(:cljs {:tag 'boolean}) [x] (and (vector? x) (= (count x) 2)))\n (defn vec3? #?(:cljs {:tag 'boolean}) [x] (and (vector? x) (= (count x) 3)))\n (defn nblank-str? #?(:cljs {:tag 'boolean}) [x] (and (string? x) (not (str/blank? x))))\n (defn nblank? #?(:cljs {:tag 'boolean}) [x] (not (str/blank? x))))\n\n(defalias truss/error?)\n(declare revery?)\n\n(defn chan?\n \"Returns true iff given a `clojure.core.async` channel.\"\n #?(:cljs {:tag 'boolean})\n [x]\n ;; Avoid actually loading `core.async`\n #?(:cljs (instance? cljs.core.async.impl.channels.ManyToManyChannel x)\n :clj (= \"clojure.core.async.impl.channels.ManyToManyChannel\" (.getName (class x)))))\n\n(comment (chan? (clojure.core.async/chan)))\n\n#?(:clj\n (do ; Forms\n (defn ^:no-doc runtime-form? \"Private, don't use.\" [form] (or (symbol? form) (list-form? form)))\n (defn ^:no-doc const-form? \"Private, don't use.\" [form] (not (runtime-form? form)))\n (defn ^:no-doc const-form \"Private, don't use.\" [form] (when (const-form? form) form))\n (defn ^:no-doc const-forms? \"Private, don't use.\" [& forms] (revery? const-form? forms))\n (defn ^:no-doc const-forms \"Private, don't use.\" [& forms] (mapv const-form forms))))\n\n(defn force-ref \"Like `force` for refs.\" [x] (if (derefable? x) (deref x) x))\n(defn force-var \"Like `force` for vars.\" [x] (if (var? x) (deref x) x))\n\n;; Number types\n;; Since Clojure usu. defaults to larger types (long>integer, double>long),\n;; I'm appropriating the rarely-used smaller type names (int, float) to\n;; refer to types of generic size.\n;;\n;; All fixed-precision:\n;; `int` - Generic size: long or integer, etc.\n;; `float` - Generic size: double or float, etc.\n;; `long` - Specific size: long ; Only used when emphasizing specific size\n;; `double` - Specific size: double ; Only used when emphasizing specific size\n\n(defn finite-num?\n \"Returns true iff given a number (of standard type) that is:\n finite (excl. NaN and infinities).\"\n #?(:cljs {:tag 'boolean})\n [x]\n #?(:clj (and (number? x) (Double/isFinite x)) ; Works with other types, incl. ratio\n :cljs (js/Number.isFinite x)\n #_\n (and\n (not ^boolean (js/isNaN x))\n #_(not (identical? x js/Infinity))\n (not (identical? x js/Number.POSITIVE_INFINITY))\n (not (identical? x js/Number.NEGATIVE_INFINITY)))))\n\n(defn int?\n \"Returns true iff given a number (of standard type) that is:\n a fixed-precision integer.\"\n #?(:cljs {:tag 'boolean})\n [x]\n #?(:clj\n (or\n (instance? Long x)\n (instance? Integer x)\n (instance? Short x)\n (instance? Byte x))\n\n :cljs\n (and\n #_(number? x)\n (finite-num? x)\n (== (js/parseFloat x) (js/parseInt x 10)))))\n\n(defn float?\n \"Returns true iff given a number (of standard type) that is:\n a fixed-precision floating-point (incl. NaN and infinities).\"\n #?(:cljs {:tag 'boolean})\n [x]\n #?(:clj (or (instance? Double x) (instance? Float x))\n :cljs\n (and\n (number? x)\n #_(finite?-num? x)\n (not (== (js/parseFloat x) (js/parseInt x 10))))))\n\n(comment (float? Double/NaN))\n\n(do\n (defn nneg? #?(:cljs {:tag 'boolean}) [x] (not (neg? x)))\n (defn zero-num? #?(:cljs {:tag 'boolean}) [x] (and (number? x) (zero? x)))\n (defn nzero-num? #?(:cljs {:tag 'boolean}) [x] (and (number? x) (not (zero? x))))\n\n (defn nat-num? #?(:cljs {:tag 'boolean}) [x] (and (number? x) (not (neg? x))))\n (defn pos-num? #?(:cljs {:tag 'boolean}) [x] (and (number? x) (pos? x)))\n (defn neg-num? #?(:cljs {:tag 'boolean}) [x] (and (number? x) (neg? x)))\n\n (defn nat-int? #?(:cljs {:tag 'boolean}) [x] (and (int? x) (not (neg? x))))\n (defn pos-int? #?(:cljs {:tag 'boolean}) [x] (and (int? x) (pos? x)))\n (defn neg-int? #?(:cljs {:tag 'boolean}) [x] (and (int? x) (neg? x)))\n\n (defn nat-float? #?(:cljs {:tag 'boolean}) [x] (and (float? x) (not (neg? x))))\n (defn pos-float? #?(:cljs {:tag 'boolean}) [x] (and (float? x) (pos? x)))\n (defn neg-float? #?(:cljs {:tag 'boolean}) [x] (and (float? x) (neg? x))))\n\n(defn pnum?\n \"Returns true iff given number in unsigned unit proportion interval \u2208\u211d[0,1].\"\n #?(:cljs {:tag 'boolean})\n [x] (and (number? x) (let [n (double x)] (and (>= n 0.0) (<= n 1.0)))))\n\n(defn rnum?\n \"Returns true iff given number in signed unit proportion interval \u2208\u211d[-1,1].\"\n #?(:cljs {:tag 'boolean})\n [x] (and (number? x) (let [n (double x)] (and (>= n -1.0) (<= n +1.0)))))\n\n;;;; Type coercions\n;; There may be parsing edge-case inconsistencies between platforms.\n;; It's NOT currently an objective to try pave over all differences!\n\n(def ^:const max-long #?(:clj Long/MAX_VALUE :cljs js/Number.MAX_SAFE_INTEGER))\n(def ^:const min-long #?(:clj Long/MIN_VALUE :cljs js/Number.MIN_SAFE_INTEGER))\n\n(defn- int-str? [s] (re-matches #\"[+-]?\\d+\" s)) ; Restrictive\n#?(:cljs (defn- parse-js-float [s] (let [x (js/parseFloat s)] (when-not (js/isNaN x) x)))) ; Unrestrictive\n#?(:cljs\n (defn parse-js-int [s]\n (when (int-str? s)\n (let [x (js/parseInt s 10)]\n (when (and\n (not (js/isNaN x)) ; Redundant?\n (<= x max-long)\n (>= x min-long))\n x)))))\n\n(do\n (defn as-?nzero [x] (when (number? x) (if (zero? x) nil x)))\n (defn as-?nblank [x] (when (string? x) (if (str/blank? x) nil x)))\n (defn as-?kw [x] (cond (keyword? x) x (string? x) (keyword x)))\n (defn as-?name [x] (cond (named? x) (name x) (string? x) x))\n (defn as-?qname [x]\n (cond\n (named? x) (let [n (name x)] (if-let [ns (namespace x)] (str ns \"/\" n) n))\n (string? x) x))\n\n (defn as-?nempty-str [x] (when (string? x) (if #?(:clj (.isEmpty ^String x) :cljs (= x \"\")) nil x)))\n (defn as-?nblank-trim [x] (when (string? x) (let [s (str/trim x)] (if #?(:clj (.isEmpty ^String s) :cljs (= s \"\")) nil s))))\n\n (comment (as-?nblank-trim \" foo \"))\n\n (defn as-?int [x]\n (cond\n (number? x) (long x)\n (string? x)\n #?(:cljs (parse-js-int x)\n :clj\n (try\n (Long/parseLong x)\n (catch NumberFormatException _\n (truss/catching (long (Float/parseFloat x))))))))\n\n (defn as-?float [x]\n (cond\n (number? x) (double x)\n (string? x)\n #?(:cljs (parse-js-float x)\n :clj (truss/catching (Double/parseDouble x)))))\n\n (defn as-?nat-int [x] (when-let [n (as-?int x)] (when-not (neg? ^long n) n)))\n (defn as-?pos-int [x] (when-let [n (as-?int x)] (when (pos? ^long n) n)))\n (defn as-?nat-float [x] (when-let [n (as-?float x)] (when-not (neg? ^double n) n)))\n (defn as-?pos-float [x] (when-let [n (as-?float x)] (when (pos? ^double n) n)))\n\n (defn as-?pnum [x] (when-let [^double f (as-?float x)] (if (> f 1.0) 1.0 (if (< f 0.0) 0.0 f))))\n (defn as-?rnum [x] (when-let [^double f (as-?float x)] (if (> f 1.0) 1.0 (if (< f -1.0) -0.0 f))))\n\n (defn as-?bool [x]\n (cond\n (or (true? x) (false? x) (nil? x)) x\n (or (= x 0) (= x \"false\") (= x \"FALSE\") (= x \"0\")) false\n (or (= x 1) (= x \"true\") (= x \"TRUE\") (= x \"1\")) true))\n\n (let [;; Simple regex to test for basic \"x@y.z\" form:\n regex #\"^[^\\s@]+@[^\\s@]+\\.\\S*[^\\.]$\"]\n (defn as-?email\n ([ ?s] (as-?email 320 ?s))\n ([max-len ?s]\n (when-let [s (and ?s (str/trim ?s))]\n (when (<= (count s) ^long max-len)\n (re-find regex s))))))\n\n (declare norm-str)\n (defn as-?nemail\n ([ ?s] (when-let [email (as-?email ?s)] (str/lower-case (norm-str email))))\n ([max-len ?s] (when-let [email (as-?email max-len ?s)] (str/lower-case (norm-str email)))))\n\n (comment\n (do (as-?nemail 11 \"FOO@bar.com\"))\n (mapv as-?nemail\n [\"foo\" \"foo@\" \"foo@bar\" \"Foo@BAR.com\"\n \"foo@@bar.com\" \"foo@bar.com.\" \"foo.baz@bar.com\"])))\n\n(defn ^:no-doc -as-throw [kind x]\n (truss/ex-info! (str \"[encore/as-\" (name kind) \"] failed against arg: \" (pr-str x))\n {:pred-kind kind\n :arg (typed-val x)}))\n\n(let [-as-throw -as-throw]\n (defn as-nblank {:tag #?(:clj 'String :cljs 'string)} [x] (or (as-?nblank x) (-as-throw :nblank x)))\n (defn as-nblank-trim {:tag #?(:clj 'String :cljs 'string)} [x] (or (as-?nblank-trim x) (-as-throw :nblank-trim x)))\n (defn as-nempty-str {:tag #?(:clj 'String :cljs 'string)} [x] (or (as-?nempty-str x) (-as-throw :nempty-str x)))\n (defn as-name {:tag #?(:clj 'String :cljs 'string)} [x] (or (as-?name x) (-as-throw :name x)))\n (defn as-qname {:tag #?(:clj 'String :cljs 'string)} [x] (or (as-?qname x) (-as-throw :qname x)))\n (defn as-nzero [x] (or (as-?nzero x) (-as-throw :nzero x)))\n (defn as-kw [x] (or (as-?kw x) (-as-throw :kw x)))\n\n (defn as-email\n {:tag #?(:clj 'String :cljs 'string)}\n ([ x] (or (as-?email x) (-as-throw :email x)))\n ([n x] (or (as-?email n x) (-as-throw :email x))))\n\n (defn as-nemail\n {:tag #?(:clj 'String :cljs 'string)}\n ([ x] (or (as-?nemail x) (-as-throw :nemail x)))\n ([n x] (or (as-?nemail n x) (-as-throw :nemail x))))\n\n #?(:clj (defn as-int ^long [x] (or (as-?int x) (-as-throw :int x)))\n :cljs (defn ^number as-int [x] (or (as-?int x) (-as-throw :int x))))\n #?(:clj (defn as-nat-int ^long [x] (or (as-?nat-int x) (-as-throw :nat-int x)))\n :cljs (defn ^number as-nat-int [x] (or (as-?nat-int x) (-as-throw :nat-int x))))\n #?(:clj (defn as-pos-int ^long [x] (or (as-?pos-int x) (-as-throw :pos-int x)))\n :cljs (defn ^number as-pos-int [x] (or (as-?pos-int x) (-as-throw :pos-int x))))\n\n #?(:clj (defn as-float ^double [x] (or (as-?float x) (-as-throw :float x)))\n :cljs (defn ^number as-float [x] (or (as-?float x) (-as-throw :float x))))\n #?(:clj (defn as-nat-float ^double [x] (or (as-?nat-float x) (-as-throw :nat-float x)))\n :cljs (defn ^number as-nat-float [x] (or (as-?nat-float x) (-as-throw :nat-float x))))\n #?(:clj (defn as-pos-float ^double [x] (or (as-?pos-float x) (-as-throw :pos-float x)))\n :cljs (defn ^number as-pos-float [x] (or (as-?pos-float x) (-as-throw :pos-float x))))\n\n #?(:clj (defn as-pnum ^double [x] (or (as-?pnum x) (-as-throw :pnum x))) ; With auto coerce+clamp\n :cljs (defn ^number as-pnum [x] (or (as-?pnum x) (-as-throw :pnum x)))) ; ''\n #?(:clj (defn as-rnum ^double [x] (or (as-?rnum x) (-as-throw :rnum x))) ; ''\n :cljs (defn ^number as-rnum [x] (or (as-?rnum x) (-as-throw :rnum x)))) ; ''\n\n #?(:clj (defn as-pnum! ^double [x] (if (pnum? x) (double x) (-as-throw :pnum! x))) ; Without auto coerce+clamp\n :cljs (defn ^number as-pnum! [x] (if (pnum? x) (double x) (-as-throw :pnum! x)))) ; ''\n #?(:clj (defn as-rnum! ^double [x] (if (rnum? x) (double x) (-as-throw :rnum! x))) ; ''\n :cljs (defn ^number as-rnum! [x] (if (rnum? x) (double x) (-as-throw :rnum! x)))) ; ''\n\n (defn #?(:clj as-bool :cljs ^boolean as-bool) [x]\n (let [?b (as-?bool x)] (if-not (nil? ?b) ?b (-as-throw :bool x)))))\n\n;;;; Reductions\n\n(defn convey-reduced [x] (if (reduced? x) (reduced x) x)) ; Double-wrap\n(defn preserve-reduced\n \"Public version of `core/preserving-reduced`.\"\n [rf]\n (fn [acc in]\n (let [result (rf acc in)]\n (if (reduced? result)\n (reduced result)\n (do result)))))\n\n(defn reduce-kvs\n \"Like `reduce-kv` but takes a flat sequence of kv pairs.\"\n [rf init kvs]\n (transduce (partition-all 2)\n (completing (fn [acc [k v]] (rf acc k v))) init kvs))\n\n(defn reduce-n\n \"No longer useful with Clojure 1.7+, just use (reduce f init (range ...)).\"\n ([rf init end ] (reduce rf init (range end)))\n ([rf init start end ] (reduce rf init (range start end)))\n ([rf init start end step] (reduce rf init (range start end step))))\n\n(comment (reduce-n conj [] 100 10 -1))\n\n(declare counter)\n(defn reduce-indexed\n \"Like `reduce` but takes (rf [acc idx in]) with idx as in `map-indexed`.\n As `reduce-kv` against vector coll, but works on any seqable coll type.\"\n [rf init coll]\n (let [c (counter)]\n (reduce (fn [acc in] (rf acc (c) in)) init coll)))\n\n(comment\n (reduce-indexed (fn [acc idx in] (assoc acc idx in)) {} [:a :b :c])\n (reduce-kv (fn [acc idx in] (assoc acc idx in)) {} [:a :b :c]))\n\n#?(:cljs\n (defn reduce-obj \"Like `reduce-kv` but for JavaScript objects.\"\n [f init o] (reduce (fn [acc k] (f acc k (gobj/get o k nil))) init (js-keys o))))\n\n(do\n (defn run! [proc coll] (reduce #(proc %2) nil coll) nil)\n (defn run-kv! [proc m] (reduce-kv #(proc %2 %3) nil m) nil)\n (defn run-kvs! [proc kvs] (reduce-kvs #(proc %2 %3) nil kvs) nil)\n #?(:cljs (defn run-obj! [proc obj] (reduce-obj #(proc %2 %3) nil obj) nil)))\n\n(let [rf (fn [pred] (fn [_acc in] (when-let [p (pred in)] (reduced p))))]\n (defn rsome\n \"Returns nil, or first truthy (pred x) for x in coll.\n Like `core/some` but faster and supports transducers.\"\n ([ pred coll] (reduce (rf pred) nil coll))\n ([xform pred coll] (transduce xform (completing (rf pred)) nil coll))))\n\n(let [rf (fn [pred] (fn [_acc k v] (when-let [p (pred k v)] (reduced p))))\n tf (fn [pred] (fn [_acc [k v]] (when-let [p (pred k v)] (reduced p))))]\n (defn rsome-kv\n \"Returns nil, or first truthy (pred k v) for kv in associative coll.\n Like `core/some` but faster and takes kvs.\"\n ([ pred coll] (reduce-kv (rf pred) nil coll))\n #_([xform pred coll] (transduce xform (completing (tf pred)) nil coll))))\n\n(let [rf (fn [pred] (fn [_acc in] (when (pred in) (reduced in))))]\n (defn rfirst\n \"Returns nil, or first x in coll with truthy (pred x).\"\n ([ pred coll] (reduce (rf pred) nil coll))\n ([xform pred coll] (transduce xform (completing (rf pred)) nil coll))))\n\n(let [entry\n #?(:clj (fn [k v] (clojure.lang.MapEntry/create k v))\n :cljs (fn [k v] (MapEntry. k v nil)))\n\n rf (fn [pred] (fn [_acc k v] (when (pred k v) (reduced (entry k v)))))\n tf (fn [pred] (fn [_acc [k v]] (when (pred k v) (reduced (entry k v)))))]\n\n (defn rfirst-kv\n \"Returns nil, or first [k v] entry in associative coll with truthy (pred k v).\"\n ([ pred coll] (reduce-kv (rf pred) nil coll))\n #_([xform pred coll] (transduce xform (completing (tf pred)) nil coll))))\n\n(let [rf (fn [pred] (fn [_acc in] (if (pred in) true (reduced false))))]\n (defn revery?\n \"Returns true iff (pred x) is truthy for every x in coll.\n Like `core/every?` but faster and supports transducers.\"\n #?(:cljs {:tag 'boolean})\n ([ pred coll] (reduce (rf pred) true coll))\n ([xform pred coll] (transduce xform (completing (rf pred)) true coll))))\n\n(let [rf (fn [pred] (fn [_acc k v] (if (pred k v) true (reduced false))))\n tf (fn [pred] (fn [_acc [k v]] (if (pred k v) true (reduced false))))]\n (defn revery-kv?\n \"Returns true iff (pred k v) is truthy for every kv in associative coll.\"\n #?(:cljs {:tag 'boolean})\n ([ pred coll] (reduce-kv (rf pred) true coll))\n #_([xform pred coll] (transduce xform (completing (tf pred)) true coll))))\n\n(comment\n (= (rfirst-kv (fn [k v] (number? v)) {:a :b :c 2}) [:c 2])\n\n (qb 1e4\n (some #(when (string? %) %) [:a :b :c :d \"boo\"])\n (rsome #(when (string? %) %) [:a :b :c :d \"boo\"])\n (rfirst string? [:a :b :c :d \"boo\"])))\n\n#?(:clj\n (defn reduce-iterator!\n \"Reduces given `java.util.Iterator`, mutating it. Note that most colls\n providing iterators implement `java.lang.Iterable`, so support `seq` directly.\"\n [rf init iterator]\n (if-let [^java.util.Iterator it iterator]\n (loop [acc init]\n (if (.hasNext it)\n (let [acc (rf acc (.next it))]\n (if (reduced? acc)\n (deref acc)\n (recur acc)))\n acc))\n init)))\n\n(defn reduce-zip\n \"Reduces given sequential xs and ys as pairs (e.g. key-val pairs).\n Calls (rf acc x y) for each sequential pair.\n\n Useful, among other things, as a more flexible version of `zipmap`.\"\n ([rf init xs ys ] (reduce-zip rf init xs ys ::skip))\n ([rf init xs ys not-found] ; Experimental, undocumented\n (if (and\n (vector? xs)\n (vector? ys))\n\n (let [n\n (if (identical-kw? not-found ::skip)\n (min (count xs) (count ys))\n (max (count xs) (count ys)))]\n\n (reduce-n\n (fn [acc idx]\n (rf acc\n (get xs idx not-found)\n (get ys idx not-found)))\n init n))\n\n (let [not-found? (not (identical-kw? not-found ::skip))]\n (loop [acc init\n xs (seq xs)\n ys (seq ys)]\n\n (if (if not-found? (or xs ys) (and xs ys))\n\n (let [result\n (rf acc\n (first (or xs [not-found]))\n (first (or ys [not-found])))]\n\n (if (reduced? result)\n (deref result)\n (recur result\n (next xs)\n (next ys))))\n acc))))))\n\n(do\n (deftype ^:no-doc Tup2 [x y ])\n (deftype ^:no-doc Tup3 [x y z]))\n\n(defn reduce-multi\n \"Like `reduce` but supports separate simultaneous accumulators\n as a micro-optimization when reducing a large collection multiple\n times.\"\n ;; Faster than using volatiles\n ([rf init coll] (reduce rf init coll))\n ([rf1 init1 rf2 init2 coll]\n (let [^Tup2 tuple\n (reduce\n (fn [^Tup2 tuple in]\n (let [x (.-x tuple)\n y (.-y tuple)\n rx? (reduced? x)\n ry? (reduced? y)]\n\n (if (and rx? ry?)\n (reduced tuple)\n (let [x (if rx? x (rf1 x in))\n y (if ry? y (rf2 y in))]\n (Tup2. x y)))))\n (Tup2. init1 init2)\n coll)]\n\n [(unreduced (.-x tuple))\n (unreduced (.-y tuple))]))\n\n ([rf1 init1 rf2 init2 rf3 init3 coll]\n (let [^Tup3 tuple\n (reduce\n (fn [^Tup3 tuple in]\n (let [x (.-x tuple)\n y (.-y tuple)\n z (.-z tuple)\n rx? (reduced? x)\n ry? (reduced? y)\n rz? (reduced? z)]\n\n (if (and rx? ry? rz?)\n (reduced tuple)\n (let [x (if rx? x (rf1 x in))\n y (if ry? y (rf2 y in))\n z (if rz? z (rf3 z in))]\n (Tup3. x y z)))))\n (Tup3. init1 init2 init3)\n coll)]\n\n [(unreduced (.-x tuple))\n (unreduced (.-y tuple))\n (unreduced (.-z tuple))])))\n\n(defn reduce-interleave-all\n \"Reduces sequence of elements interleaved from given `colls`.\n (reduce-interleave-all conj [] [[:a :b] [1 2 3]]) => [:a 1 :b 2 3]\"\n [rf init colls]\n (if (empty? colls)\n init\n (loop [acc init, colls colls]\n (let [^Tup2 tuple\n (reduce\n (fn [^Tup2 tuple in]\n (if (empty? in)\n tuple\n (let [[in1 & next-in] in\n acc (.-x tuple)\n ncs (.-y tuple)\n res (rf acc in1)]\n\n (if (reduced? res)\n (reduced (Tup2. @res nil))\n (do (Tup2. res\n (if next-in\n (conj (or ncs []) next-in)\n (do ncs))))))))\n (Tup2. acc nil)\n colls)\n\n acc (.-x tuple)\n next-colls (.-y tuple)]\n\n (if next-colls\n (recur acc next-colls)\n (do acc))))))\n\n(let [map-like? #(or (map? %) (record? %))]\n (defn ^:no-doc postwalk\n \"Private, don't use.\n Simpler, faster `clojure.walk/postwalk`.\"\n ([ x f] (postwalk false x f))\n ([preserve-seqs? x f]\n (let [ps (if preserve-seqs? seq identity)\n pw #(postwalk preserve-seqs? %1 %2)]\n (cond\n (map-like? x) (f (reduce-kv (fn [acc k v] (assoc acc (pw k f) (pw v f))) {} x))\n (seq? x) (f (ps (reduce (fn [acc in] (conj acc (pw in f))) [] x)))\n (coll? x) (f (reduce (fn [acc in] (conj acc (pw in f))) (empty x) x))\n :else (f x))))))\n\n(comment\n (def in {:a [1 2 3 #{1 2 3 {:a '(1 2 3)}}] 1 \"1\" 2 nil 3 {1 \"1\" 2 \"2\" 3 \"3\"}})\n (def pwf #(if (int? %) (inc %) %))\n (qb 1e5 ; [141.88 390.17]\n (postwalk in pwf)\n (clojure.walk/postwalk pwf in)))\n\n;;;; Sub fns\n\n(defn- subfn [context by-idx-fn]\n (fn subfn*\n ([c start-idx]\n (when c\n (let [max-idx (count c)\n start-idx (long start-idx)]\n (when (< start-idx max-idx)\n (by-idx-fn c (max start-idx 0) max-idx)))))\n\n ([c start-idx end-idx]\n (when c\n (let [start-idx (max (long start-idx) 0)\n end-idx (min (long end-idx) (count c))]\n (when (< start-idx end-idx)\n (by-idx-fn c start-idx end-idx)))))\n\n ([c kind start end]\n (when c\n (let [max-end (count c)\n end (if (identical-kw? end :max) max-end end)]\n\n (case kind\n :by-idx (subfn* c start end)\n :by-len\n (cond\n :let [len (long end)]\n (<= len 0) nil\n\n :let [start-idx (long start)]\n (< start-idx 0) ; Index from right\n (let [start-idx (max (+ start-idx max-end) 0)\n end-idx (min (+ start-idx len) max-end)]\n (when (< start-idx end-idx)\n (by-idx-fn c start-idx end-idx)))\n\n :else\n (let [end-idx (min (+ start-idx len) max-end)]\n (when (< start-idx end-idx)\n (by-idx-fn c start-idx end-idx))))\n\n (truss/unexpected-arg! kind\n {:param 'kind\n :context context\n :expected #{:by-idx :by-len}})))))))\n\n(def* subvec\n \"Returns a non-empty sub-vector, or nil.\n Like `core/subvec` but:\n - Doesn't throw when out-of-bounds (clips to bounds).\n - Returns nil rather than an empty vector.\n - When given `:by-len` kind (4-arity case):\n - `start` may be -ive (=> index from right of vector).\n - `end` is desired vector length, or `:max`.\"\n {:arglists '([v start-idx] [v start-idx end-idx] [v :by-len start end])}\n (subfn `subvec core/subvec))\n\n(def* substr\n \"Returns a non-empty sub-string, or nil.\n Like `subs` but:\n - Doesn't throw when out-of-bounds (clips to bounds).\n - Returns nil rather than an empty string.\n - When given `:by-len` kind (4-arity case):\n - `start` may be -ive (=> index from right of string).\n - `end` is desired string length, or `:max`.\"\n {:arglists '([s start-idx] [s start-idx end-idx] [s :by-len start end])}\n (subfn `substr (fn [s n1 n2] (.substring #?(:clj ^String s :cljs s) n1 n2))))\n\n(comment\n (qb 1e6 (subvec [:a :b :c] 1) (core/subvec [:a :b :c] 1)) ; [53.32 51.11]\n (qb 1e6 (substr \"abc\" 1) (subs \"abc\" 1)) ; [55.75 49.43]\n )\n\n;;;; Collections\n\n(defn map-entry\n \"Returns a `MapEntry` with given key and value.\"\n #?(:clj {:inline (fn [k v] `(clojure.lang.MapEntry/create ~k ~v))})\n [k v]\n #?(:clj (clojure.lang.MapEntry/create k v)\n :cljs (MapEntry. k v nil)))\n\n(defn queue?\n \"Returns true iff given a `PersistentQueue`.\"\n #?(:cljs {:tag 'boolean})\n [x]\n #?(:clj (instance? clojure.lang.PersistentQueue x)\n :cljs (instance? cljs.core.PersistentQueue x)))\n\n(defn queue\n \"Returns a new `PersistentQueue`.\"\n ([coll] (into (queue) coll))\n ([ ]\n #?(:clj clojure.lang.PersistentQueue/EMPTY\n :cljs cljs.core.PersistentQueue.EMPTY)))\n\n(defn queue*\n \"Returns a new `PersistentQueue` given items.\"\n [& items] (queue items))\n\n(defn ensure-vec [x] (if (vector? x) x (vec x)))\n(defn ensure-set [x] (if (set? x) x (set x)))\n\n#?(:cljs\n (defn oset \"Like `assoc` for JS objects.\"\n [o k v] (gobj/set (if (nil? o) (js-obj) o) (name k) v)))\n\n#?(:cljs\n (let [sentinel (js-obj)]\n (defn oset-in\n \"Experimental, subject to change without notice.\n Like `assoc-in` for JS objects.\"\n [o ks v]\n (let [o (if (nil? o) (js-obj) o)]\n (if-let [ks (seq ks)]\n (loop [o-next o, ks-next ks]\n (let [k1 (name (first ks-next))\n o-next\n (let [o-next* (gobj/get o-next k1 sentinel)]\n (if (identical? o-next* sentinel)\n (let [new-obj (js-obj)]\n (do\n (gobj/set o-next k1 new-obj)\n (do new-obj)))\n o-next*))]\n\n (if-let [ks-next (next ks-next)]\n (recur o-next ks-next)\n (do (gobj/set o-next k1 v) o))))\n ;; Resolve nil => [nil] ambiguity in `assoc-in`\n o)))))\n\n#?(:cljs\n (defn oget \"Like `get` for JS objects.\"\n ([ k ] (when-let [o js-?window] (gobj/get o (name k))))\n ([o k ] (when o (gobj/get o (name k) nil)))\n ([o k not-found] (if o (gobj/get o (name k) not-found) not-found))))\n\n#?(:cljs\n (let [sentinel (js-obj)]\n ;; Could also use `gobg/getValueByKeys`\n (defn oget-in \"Like `get-in` for JS objects.\"\n ([ ks ] (oget-in js-?window ks nil))\n ([o ks ] (oget-in o ks nil))\n ([o ks not-found]\n (if o\n (loop [o o, ks (seq ks)]\n (if ks\n (let [o (gobj/get o (name (first ks)) sentinel)]\n (if (identical? o sentinel)\n not-found\n (recur o (next ks))))\n o))\n not-found)))))\n\n(defn get1\n \"Like `get` but returns val for first key that exists in map.\n Useful for key aliases or fallbacks. See also `get*`.\"\n ([m k ] (get m k))\n ([m k not-found] (get m k not-found))\n ([m k1 k2 not-found] (if-let [e (and m (or (find m k1) (find m k2))) ] (val e) not-found))\n ([m k1 k2 k3 not-found] (if-let [e (and m (or (find m k1) (find m k2) (find m k3)))] (val e) not-found)))\n\n#?(:clj\n (defmacro get*\n \"Macro version of `get` that:\n\n 1. Avoids unnecessary evaluation of `not-found`.\n Useful when `not-found` is expensive or contains side-effects.\n\n 2. Supports multiple prioritized keys (k1, k2, etc.). Returns val for\n first key that exists in map. Useful for key aliases or fallbacks.\n\n Equivalent to:\n (cond\n (contains? m k1) (get m k1)\n (contains? m k2) (get m k2)\n ...\n :else not-found)\"\n ([m k ] `(get ~m ~k))\n ([m k not-found] `(if-let [e# (find ~m ~k) ] (val e#) ~not-found))\n ([m k1 k2 not-found] `(let [m# ~m] (if-let [e# (and m# (or (find m# ~k1) (find m# ~k2))) ] (val e#) ~not-found)))\n ([m k1 k2 k3 not-found] `(let [m# ~m] (if-let [e# (and m# (or (find m# ~k1) (find m# ~k2) (find m# ~k3)))] (val e#) ~not-found)))))\n\n#?(:clj\n (defmacro get-in*\n \"Private, don't use this. Micro-optimized macro version of `core/get-in`.\n Avoids unnecessary evaluation of `not-found`.\"\n ([m ks]\n (truss/have? const-form? ks)\n (if (empty? ks)\n m\n (let [[k1 & kn] ks\n gs (gensym)]\n (if kn\n `(let [~gs (get ~m ~k1)] (if ~gs (get-in* ~gs ~kn) nil))\n `(get ~m ~k1)))))\n\n ([m ks not-found]\n (truss/have? const-form? ks)\n (if (empty? ks)\n m\n (let [[k1 & kn] ks\n gs (gensym)]\n (if kn\n `(let [~gs (get ~m ~k1 ::nx)] (if (identical-kw? ~gs ::nx) ~not-found (get-in* ~gs ~kn ~not-found)))\n `(let [~gs (get ~m ~k1 ::nx)] (if (identical-kw? ~gs ::nx) ~not-found ~gs))))))))\n\n(do\n (defn conj-some \"Conjoins each non-nil value.\"\n ([ ] [])\n ([coll ] coll)\n ([coll x ] (if (nil? x) coll (conj coll x)))\n ([coll x & more] (reduce conj-some (conj-some coll x) more)))\n\n (defn conj-when \"Conjoins each truthy value.\"\n ([ ] [])\n ([coll ] coll)\n ([coll x ] (if x (conj coll x) coll))\n ([coll x & more] (reduce conj-when (conj-when coll x) more))))\n\n(comment (conj-some [] :a :b nil :c :d nil false :e))\n\n(defn assoc-some\n \"Assocs each kv to given ?map iff its value is not nil.\"\n ([m k v ] (if-not (nil? v) (assoc m k v) m))\n ([m m-kvs] (reduce-kv assoc-some m m-kvs))\n ([m k v & kvs] (reduce-kvs assoc-some (assoc-some m k v) kvs)))\n\n(defn assoc-when\n \"Assocs each kv to given ?map iff its val is truthy.\"\n ([m k v ] (if v (assoc m k v) m))\n ([m m-kvs] (reduce-kv assoc-when m m-kvs))\n ([m k v & kvs] (reduce-kvs assoc-when (assoc-when m k v) kvs)))\n\n(defn assoc-nx\n \"Assocs each kv to given ?map iff its key doesn't already exist.\"\n ([m k v ] (if-not (contains? m k) (assoc m k v) m))\n ([m m-kvs] (reduce-kv assoc-nx m m-kvs))\n ([m k v & kvs] (reduce-kvs assoc-nx (assoc-nx m k v) kvs)))\n\n(defn reassoc-some\n \"Assocs each kv to given ?map if its value is nil, otherwise dissocs it.\"\n ([m k v ] (if-not (nil? v) (assoc m k v) (dissoc m k)))\n ([m m-kvs] (reduce-kv reassoc-some m m-kvs))\n ([m k v & kvs] (reduce-kvs reassoc-some (reassoc-some m k v) kvs)))\n\n(defn reassoc-when\n \"Assocs each kv to given ?map if its value is truthy, otherwise dissocs it.\"\n ([m k v ] (if v (assoc m k v) (dissoc m k)))\n ([m m-kvs] (reduce-kv reassoc-when m m-kvs))\n ([m k v & kvs] (reduce-kvs reassoc-when (reassoc-when m k v) kvs)))\n\n(comment\n (assoc-some {:a :A} {:a false :b :B}) ; => {:a false, :b :B}\n (assoc-when {:a :A} {:a false :b :B}) ; => {:a :A, :b :B}\n (assoc-nx {:a :A} {:a false :b :B}) ; => {:a :A, :b :B}\n (reassoc-some {:a :A} {:a false :b :B}) ; => {:a false, :b :B}\n (reassoc-when {:a :A} {:a nil :b :B}) ; => {:b :B}\n )\n\n(defn vnext [v] (when (> (count v) 1) (core/subvec v 1)))\n(defn vrest [v] (if (> (count v) 1) (core/subvec v 1) []))\n(defn vsplit-last [v] (let [c (count v)] (when (> c 0) [(when (> c 1) (pop v)) (peek v)])))\n(defn vsplit-first [v] (let [c (count v)] (when (> c 0) (let [[v1] v] [v1 (when (> c 1) (core/subvec v 1))]))))\n(defn not-empty-coll [x] (when x (if (coll? x) (not-empty x) x)))\n\n(comment\n (vsplit-first [:a :b :c])\n (vsplit-last [:a :b :c]))\n\n(defn- fsplit-last\n \"Faster (f (vec (butlast xs)) (last x)).\"\n [xs f]\n (if (vector? xs)\n (let [[vn vl] (vsplit-last xs)] (f vn vl))\n (loop [butlast [] xs xs]\n (let [[x1 & xn] xs]\n (if xn\n (recur (conj butlast x1) xn)\n (f butlast x1))))))\n\n(comment (let [v [:a :b :c :d]] (qb 1e6 (fsplit-last v vector) [(butlast v) (last v)])))\n\n(defn takev [n coll] (if (vector? coll) (or (subvec coll :by-len 0 n) []) (into [] (take n) coll)))\n\n(defn distinct-elements?\n #?(:cljs {:tag 'boolean})\n [x] (or (set? x) (= (count x) (count (ensure-set x)))))\n\n(def seq-kvs \"(seq-kvs {:a :A}) => (:a :A).\" (partial reduce concat))\n(defn mapply \"Like `apply` but calls `seq-kvs` on final arg.\"\n [f & args] (apply f (fsplit-last args (fn [xs lx] (concat xs (seq-kvs lx))))))\n\n(comment [(seq-kvs {:a :A :b :B}) (mapply str 1 2 3 {:a :A})])\n\n(defn into-all \"Like `into` but supports multiple \\\"from\\\"s.\"\n ([to from ] (into to from))\n ([to from & more]\n (persistent!\n (reduce (fn [acc in] (reduce conj! acc in))\n (transient to)\n (cons from more)))))\n\n(def ^:private ^:const min-transient-card 11) ; Account for transient overhead\n#?(:clj\n (defmacro ^:no-doc use-transient?\n \"Private, don't use. Micro-optimization.\"\n ([n coll] `(if (>= ~n ~min-transient-card) (editable? ~coll) false))\n ([ coll] `(if (editable? ~coll) (>= (count ~coll) ~min-transient-card) false))))\n\n(defn repeatedly-into\n \"Like `repeatedly` but faster and `conj`s items into given collection.\"\n [coll ^long n f]\n (if (use-transient? n coll)\n (persistent! (reduce-n (fn [acc _] (conj! acc (f))) (transient coll) n))\n (do (reduce-n (fn [acc _] (conj acc (f))) coll n))))\n\n(comment (repeatedly-into [] 100 (partial rand-nth [1 2 3 4 5 6])))\n\n(defn update! [m k f] (assoc! m k (f (get m k))))\n(defn into!\n \"Like `into` but assumes `to!` is a transient, and doesn't call\n `persist!` when done. Useful as a performance optimization in some cases.\"\n #_([ ] [])\n ([to! ] to!)\n ([to! from] (reduce conj! to! from))\n ([to! xform from] (transduce xform conj! to! from)))\n\n(defn xdistinct\n \"Returns a stateful transducer like (core/distinct) that supports an optional\n key function. Retains only items with distinct (keyfn <item>).\"\n ([ ] (distinct)) ; core now has a distinct transducer\n ([keyfn]\n (fn [rf]\n (let [seen_ (volatile! (transient #{}))]\n (fn\n ([ ] (rf))\n ([acc ] (rf acc))\n ([acc in]\n (let [k (keyfn in)]\n (if (contains? @seen_ k)\n acc\n (do\n (vswap! seen_ conj! k)\n (rf acc in))))))))))\n\n(comment (into [] (xdistinct identity) [1 2 3 1 4 5 2 6 7 1]))\n\n(defn invert-map\n \"Returns given ?map with keys and vals inverted, dropping non-unique vals!\"\n [m]\n (when m\n (if (> (count m) min-transient-card)\n (persistent! (reduce-kv (fn [m k v] (assoc! m v k)) (transient {}) m))\n (do (reduce-kv (fn [m k v] (assoc m v k)) {} m)))))\n\n(defn invert-map!\n \"Like `invert-map` but throws on non-unique vals.\"\n [m]\n (when-let [im (invert-map m)]\n (if (= (count im) (count m)) ; 1-to-1\n im\n (truss/ex-info! \"[encore/invert-map!] Non-unique map vals\"\n {:given (typed-val m)}))))\n\n(defn map-keys\n \"Returns given ?map with (key-fn <key>) keys.\"\n [key-fn m]\n (when m\n (if (> (count m) min-transient-card)\n (persistent! (reduce-kv (fn [m k v] (assoc! m (key-fn k) v)) (transient {}) m))\n (do (reduce-kv (fn [m k v] (assoc m (key-fn k) v)) {} m)))))\n\n(defn map-vals\n \"Returns given ?map with (val-fn <val>) vals.\"\n [val-fn m]\n (when m\n (if (use-transient? m)\n (persistent! (reduce-kv (fn [m k v] (assoc! m k (val-fn v))) (transient m) m))\n (do (reduce-kv (fn [m k v] (assoc m k (val-fn v))) m m)))))\n\n(defn filter-keys\n \"Returns given ?map, retaining only keys for which (key-pred <key>) is truthy.\"\n [key-pred m]\n (when m\n (if (use-transient? m)\n (persistent! (reduce-kv (fn [m k _] (if (key-pred k) m (dissoc! m k))) (transient m) m))\n (do (reduce-kv (fn [m k _] (if (key-pred k) m (dissoc m k))) m m)))))\n\n(defn filter-vals\n \"Returns given ?map, retaining only keys for which (val-pred <val>) is truthy.\"\n [val-pred m]\n (when m\n (if (use-transient? m)\n (persistent! (reduce-kv (fn [m k v] (if (val-pred v) m (dissoc! m k))) (transient m) m))\n (do (reduce-kv (fn [m k v] (if (val-pred v) m (dissoc m k))) m m)))))\n\n(defn remove-keys \"Returns given ?map, removing keys for which (key-pred <key>) is truthy.\" [key-pred m] (filter-keys (complement key-pred) m))\n(defn remove-vals \"Returns given ?map, removing keys for which (val-pred <val>) is truthy.\" [val-pred m] (filter-vals (complement val-pred) m))\n(defn rename-keys\n \"Returns a map like the one given, replacing keys using\n given {<old-new> <new-key>} replacements. O(min(n_replacements, n_m)).\"\n [replacements m]\n (cond\n (empty? m) m ; Preserve metadata\n (empty? replacements) m ; ''\n\n (> (count m) (count replacements))\n (persistent!\n (reduce-kv\n (fn [acc old-k new-k]\n (if-let [e (find m old-k)]\n (assoc! (dissoc! acc old-k) new-k (val e))\n (do acc)))\n (transient m)\n replacements))\n\n :else\n (persistent!\n (reduce-kv\n (fn [acc old-k v]\n (if-let [e (find replacements old-k)]\n (assoc! (dissoc! acc old-k) (val e) v)\n (do acc)))\n (transient m)\n (do m)))))\n\n(comment (rename-keys {:a :X} {:a :A :b :B :c :C}))\n\n(defn keys-by\n \"Returns {(f x) x} ?map for xs in `coll`.\"\n [f coll]\n (when-not (empty? coll)\n (persistent!\n (reduce (fn [acc x] (assoc! acc (f x) x))\n (transient {}) coll))))\n\n(comment (keys-by :foo [{:foo 1} {:foo 2}]))\n\n(defn ks-nnil? #?(:cljs {:tag 'boolean}) [ks m] (revery? #(core/some? (get m %)) ks))\n(defn ks= #?(:cljs {:tag 'boolean}) [ks m] (and (== (count m) (count ks)) (revery? #(contains? m %) ks)))\n(defn ks>= #?(:cljs {:tag 'boolean}) [ks m] (and (>= (count m) (count ks)) (revery? #(contains? m %) ks)))\n(defn ks<= #?(:cljs {:tag 'boolean}) [ks m]\n (let [counted-ks (if (counted? ks) ks (set ks))]\n (and\n (<= (count m) (count counted-ks))\n (let [ks-set (ensure-set counted-ks)]\n (reduce-kv (fn [_ k v] (if (contains? ks-set k) true (reduced false))) true m)))))\n\n(declare dissoc-in)\n(defn update-in\n \"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`.\"\n ([m ks f] (update-in m ks nil f))\n ([m ks not-found f]\n (if (empty? ks)\n (f m) ; m would also be a sensible choice, but (f m) is more useful\n (let [old (get-in m ks not-found)\n new (f old)]\n (case new\n (:update/abort :swap/abort) m\n (:update/dissoc :swap/dissoc)\n (fsplit-last ks\n (fn [ks lk]\n (update-in m ks nil\n (fn [v]\n (if v ; Assume associative\n (dissoc v lk)\n :update/abort)))))\n\n (assoc-in m ks new))))))\n\n(defn contains-in?\n #?(:cljs {:tag 'boolean})\n ([coll ks k] (contains? (get-in coll ks) k))\n ([coll ks ]\n (if (empty? ks)\n false\n (fsplit-last ks (fn [ks lk] (contains-in? coll ks lk))))))\n\n(defn dissoc-in\n ([m ks dissoc-k ] (update-in m ks nil (fn [m] (if m (dissoc m dissoc-k) :update/abort))))\n ([m ks dissoc-k & more]\n (update-in m ks nil\n (fn [m]\n (if m\n (reduce dissoc (dissoc m dissoc-k) more)\n :update/abort))))\n\n ([m ks]\n (if (empty? m)\n (do m)\n (fsplit-last ks (fn [ks lk] (dissoc-in m ks lk))))))\n\n(defn ^:no-doc node-paths\n \"Private, don't use.\"\n ([ m ] (node-paths associative? m nil))\n ([node-pred m ] (node-paths node-pred m nil))\n ([node-pred m basis]\n (let [basis (or basis [])]\n (persistent!\n (reduce-kv\n (fn [acc k v]\n (if-not (node-pred v)\n (conj! acc (conj basis k v))\n (let [paths-from-basis (node-paths node-pred v (conj basis k))]\n (reduce (fn [acc in] (conj! acc in)) acc paths-from-basis))))\n (transient [])\n m)))))\n\n(comment\n (node-paths associative? {:a1 :A1 :a2 {:b1 :B1 :b2 {:c1 :C1 :c2 :C2}}} [:h])\n (node-paths [:a1 :a2 [:b1 :b2 [:c1 :c2] :b3] :a3 :a4]))\n\n(defn interleave-all\n \"Like `interleave` but includes all items (i.e. stops when the longest\n rather than shortest coll has been consumed).\"\n ([ ] '())\n ([c1 ] (lazy-seq c1))\n ([c1 c2]\n (lazy-seq\n (let [s1 (seq c1) s2 (seq c2)]\n (cond\n (and s1 s2)\n (cons (first s1) (cons (first s2)\n (interleave-all (rest s1) (rest s2))))\n s1 s1\n s2 s2))))\n\n ([c1 c2 & colls]\n (lazy-seq\n (let [ss (filter identity (map seq (conj colls c2 c1)))]\n (concat (map first ss)\n (apply interleave-all (map rest ss)))))))\n\n(comment (interleave-all [:a1 :a2 :a3] [:b1 :b2] [:c1 :c2 :c3 :c4]))\n\n(defn vinterleave-all\n \"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\n Single-arity version takes a coll of colls.\"\n ([colls] (if (empty? colls) [] (persistent! (reduce-interleave-all conj! (transient []) colls))))\n ([c1 c2] ; Optimized common case\n (loop [v (transient []) s1 (seq c1) s2 (seq c2)]\n (cond\n (and s1 s2)\n (recur (conj! (conj! v (first s1)) (first s2)) (next s1) (next s2))\n s1 (persistent! (reduce conj! v s1))\n s2 (persistent! (reduce conj! v s2))\n :else (persistent! v))))\n\n ([c1 c2 c3 ] (vinterleave-all [c1 c2 c3]))\n ([c1 c2 c3 & colls] (vinterleave-all (into [c1 c2 c3] colls))))\n\n(comment\n (qb 1e5\n (vec (interleave-all [:a :b :c :d] [:a :b :c :d :e]))\n (vinterleave-all [:a :b :c :d] [:a :b :c :d :e])))\n\n(defn- p! [m] (if (transient? m) (persistent! m) m))\n\n(let [nx (new-object)\n min-transient-card 64 ; Elevated transient overhead here\n dissoc? (fn [v] (case v (:merge/dissoc :swap/dissoc) true false))\n dissoc* (fn [m k] (if (transient? m) (dissoc! m k) (dissoc m k)))]\n\n (defn ^:no-doc merge-with*\n \"Private, don't use. Flexible low-level merge util.\n Optimized for reasonable worst-case performance.\"\n ([nest? f maps] (reduce (partial merge-with* nest? f) nil maps))\n ([nest? f m1 m2]\n (cond\n :let [n2 (count m2)]\n (zero? n2) (or m1 (when (can-meta? m2) (with-meta m2 nil)))\n\n :if-let [e (find m2 :merge/replace?)] ; Undocumented\n (let [m2 (dissoc* m2 :merge/replace?)]\n (if (val e)\n (do m2)\n (merge-with* nest? f m1 m2)))\n\n :let [n1 (count m1)]\n\n (>= n1 n2) ; |m1| >= |m2|: use m1 as base, add everything from m2\n (let [m1* (if (transient? m1) m1 (if (>= n1 min-transient-card) (transient m1) m1))\n assoc* (if (transient? m1*) assoc! assoc)]\n\n (reduce-kv\n (fn [m1* k2 v2] ; m2 kvs into m1\n (let [v1 (get m1 k2 nx)]\n (cond\n (and nest? (map? v1) (map? v2)) (assoc* m1* k2 (p! (merge-with* true f v1 v2)))\n (identical? v1 nx) (assoc* m1* k2 v2)\n (dissoc? v2) (dissoc* m1* k2)\n f\n (let [v3 (f v1 v2)]\n (if (dissoc? v3)\n (dissoc* m1* k2)\n (assoc* m1* k2 v3)))\n :else (assoc* m1* k2 v2))))\n m1* (p! m2)))\n\n :else ; |m2| >= |m1|: use m2 as base, add everything from m1 not in m2\n (let [m2*\n (if (transient? m2)\n m2\n (let [m2 (with-meta m2 (meta m1))] ; Preserve left metadata\n (if (>= n2 min-transient-card)\n (transient m2)\n (do m2))))\n\n assoc* (if (transient? m2*) assoc! assoc)]\n\n (reduce-kv\n (fn [m2* k1 v1] ; m1 kvs into m2\n (let [v2 (get m2 k1 nx)]\n (cond\n (and nest? (map? v1) (map? v2)) (assoc* m2* k1 (p! (merge-with* true f v1 v2)))\n (identical? v2 nx) (assoc* m2* k1 v1)\n (dissoc? v2) (dissoc* m2* k1)\n f\n (let [v3 (f v1 v2)]\n (if (dissoc? v3)\n (dissoc* m2* k1)\n (assoc* m2* k1 v3)))\n :else m2*)))\n m2* (p! m1)))))))\n\n(defn merge\n \"Like `core/merge` but:\n - Supports `:merge/dissoc` vals.\n - Often faster, with much better worst-case performance.\"\n ([ ] nil)\n ([m1 ] (p! m1))\n ([m1 m2 ] (p! (merge-with* false nil m1 m2)))\n ([m1 m2 m3 ] (p! (merge-with* false nil (merge-with* false nil m1 m2) m3)))\n ([m1 m2 m3 & more] (p! (merge-with* false nil (cons (merge-with* false nil (merge-with* false nil m1 m2) m3) more)))))\n\n(defn nested-merge\n \"Like `core/merge` but:\n - Recursively merges nested maps.\n - Supports `:merge/dissoc` vals.\n - Often faster, with much better worst-case performance.\"\n ([ ] nil)\n ([m1 ] (p! m1))\n ([m1 m2 ] (p! (merge-with* true nil m1 m2)))\n ([m1 m2 m3 ] (p! (merge-with* true nil (merge-with* true nil m1 m2) m3)))\n ([m1 m2 m3 & more] (p! (merge-with* true nil (cons (merge-with* true nil (merge-with* true nil m1 m2) m3) more)))))\n\n(defn merge-with\n \"Like `core/merge-with` but:\n - Supports `:merge/dissoc` vals.\n - Often faster, with much better worst-case performance.\"\n ([f ] nil)\n ([f m1 ] (p! m1))\n ([f m1 m2 ] (p! (merge-with* false f m1 m2)))\n ([f m1 m2 m3 ] (p! (merge-with* false f (merge-with* false f m1 m2) m3)))\n ([f m1 m2 m3 & more] (p! (merge-with* false f (cons (merge-with* false f (merge-with* false f m1 m2) m3) more)))))\n\n(defn nested-merge-with\n \"Like `core/merge-with` but:\n - Recursively merges nested maps.\n - Supports `:merge/dissoc` vals.\n - Often faster, with much better worst-case performance.\"\n ([f ] nil)\n ([f m1 ] (p! m1))\n ([f m1 m2 ] (p! (merge-with* true f m1 m2)))\n ([f m1 m2 m3 ] (p! (merge-with* true f (merge-with* true f m1 m2) m3)))\n ([f m1 m2 m3 & more] (p! (merge-with* true f (cons (merge-with* true f (merge-with* true f m1 m2) m3) more)))))\n\n(let [mf (fn [x y] x)]\n (defn merge-nx\n \"Like `core/merge` but:\n - Preserves existing values, e.g. (merge-nx <user-opts> <defaults>).\n - Supports `:merge/dissoc` vals.\n - Often faster, with much better worst-case performance.\"\n ([ ] nil)\n ([m1 ] (p! m1))\n ([m1 m2 ] (p! (merge-with* false mf m1 m2)))\n ([m1 m2 m3 ] (p! (merge-with* false mf (merge-with* false mf m1 m2) m3)))\n ([m1 m2 m3 & more] (p! (merge-with* false mf (cons (merge-with* false mf (merge-with* false mf m1 m2) m3) more))))))\n\n(comment\n (qb 1e6 ; [182.63 122.16 167.18]\n (core/merge {:a 1} {:a {:b 1}} {:a {:c 1}})\n (merge {:a 1} {:a {:b 1}} {:a {:c 1}})\n (nested-merge {:a 1} {:a {:b 1}} {:a {:c 1}}))\n\n (let [m1 (zipmap (range 32) (range 32))\n m2 (zipmap (range 8) (range 8))\n m3 (zipmap (range 512) (range 512))]\n\n (qb 1e4 ; [449.24 11.25]\n (core/merge m1 m2 m3)\n (merge m1 m2 m3))))\n\n(defalias truss/submap?)\n\n(defn submaps?\n \"Experimental, subject to change without notice.\n Returns true iff `sub_i` is a (possibly nested) submap of `m_i`.\n Uses `submap?`.\"\n [maps subs]\n (if (> (count subs) (count maps))\n false\n (reduce-zip (fn [acc m sub] (or (submap? m sub) (reduced false)))\n true maps subs nil)))\n\n(defn select-nested-keys\n \"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\n Note that as with the `{:d [:d1 :d2]}` spec in the example above,\n if spec expects a nested map but the actual value is not a map,\n the actual value will be included in output as-is.\n\n Has the same behaviour as `select-keys` when `key-spec` is a\n simple vector of keys.\"\n [src-map key-spec]\n (if (or (empty? src-map) (empty? key-spec))\n {} ; Retain `select-keys` nil->{} semantics\n (persistent!\n (reduce\n (fn rf [acc spec-in]\n (if (map? spec-in)\n\n (reduce-kv\n (fn [acc k nested-spec-in]\n (if (contains? src-map k)\n (let [src-val (get src-map k)]\n (if (map? src-val)\n (assoc! acc k (select-nested-keys src-val nested-spec-in))\n (assoc! acc k src-val)))\n acc))\n acc spec-in)\n\n (let [k spec-in]\n (if (contains? src-map k)\n (assoc! acc k (get src-map k))\n (do acc)))))\n\n (transient {}) key-spec))))\n\n(comment\n (qb 1e6 ; [149.67 115.25]\n (select-nested-keys {:a 1 :b 1 :c 1} [:a :c])\n (select-keys {:a 1 :b 1 :c 1} [:a :c])))\n\n;;;; Keywords\n\n(defn ^:no-doc explode-keyword\n \"Private, don't use.\"\n [k] (str/split (as-qname k) #\"[\\./]\"))\n\n(comment (explode-keyword :foo.bar/baz))\n\n(defn ^:no-doc merge-keywords\n \"Private, don't use.\"\n ([ks ] (merge-keywords ks false))\n ([ks omit-slash?]\n (when (seq ks)\n (let [parts\n (reduce\n (fn [acc in]\n (if (nil? in)\n acc\n (reduce conj acc (explode-keyword in))))\n [] ks)]\n\n (when (seq parts)\n (if omit-slash?\n (keyword (str/join \".\" parts))\n (let [ppop (pop parts)]\n (keyword (when (seq ppop) (str/join \".\" ppop))\n (peek parts)))))))))\n\n(comment (merge-keywords [:foo.bar nil \"d.e/k\" :baz.qux/end nil] true))\n\n;;;; Bytes\n\n#?(:clj\n (do\n (def ^:const bytes-class (Class/forName \"[B\"))\n (defn bytes?\n \"Returns true iff given byte[] argument.\"\n ;; Also introduced in Clojure v1.9-alpha5+\n [x] (instance? bytes-class x))\n\n (defn ba=\n \"Returns true iff given two byte[]s with the same content.\"\n [^bytes x ^bytes y] (java.util.Arrays/equals x y))\n\n (defn ba-hash\n \"Returns hash int of given byte[].\"\n ^long [^bytes x] (java.util.Arrays/hashCode x))\n\n (defn utf8-ba->str\n \"Returns String by decoding given UTF-8 byte[].\"\n {:inline (fn [ba] `(let [^\"[B\" ba# ~ba] (String. ba# java.nio.charset.StandardCharsets/UTF_8)))}\n ^String [^bytes ba] (String. ba java.nio.charset.StandardCharsets/UTF_8))\n\n (defn str->utf8-ba\n \"Returns given String encoded as a UTF-8 byte[].\"\n {:inline (fn [s] `(let [^String s# ~s] (.getBytes s# java.nio.charset.StandardCharsets/UTF_8)))}\n ^bytes [^String s] (.getBytes s java.nio.charset.StandardCharsets/UTF_8))\n\n (defn ba-concat ^bytes [^bytes ba1 ^bytes ba2]\n (let [l1 (alength ba1)\n l2 (alength ba2)\n out (byte-array (+ l1 l2))]\n (System/arraycopy ba1 0 out 0 l1)\n (System/arraycopy ba2 0 out l1 l2)\n (do out)))\n\n (defn ba-split [^bytes ba ^long idx]\n (if (zero? idx)\n [nil ba]\n (let [len (alength ba)]\n (when (> len idx)\n [(java.util.Arrays/copyOf ba idx)\n (java.util.Arrays/copyOfRange ba idx len)]))))\n\n (comment\n (String. (ba-concat (.getBytes \"foo\") (.getBytes \"bar\")))\n (let [[x y] (ba-split (.getBytes \"foobar\") 5)] [(String. x) (String. y)]))\n\n (declare reduce-n)\n (defn const-ba=\n \"Constant-time `ba=`.\n Useful to prevent timing attacks, etc.\"\n [ba1 ba2]\n (when (and ba1 ba2)\n (let [bax (byte-array [0 1])\n ^bytes ba1 ba1\n ^bytes ba2 ba2\n l1 (alength ba1)\n l2 (alength ba2)\n lmax (max l1 l2)\n lmin (min l1 l2)]\n\n (reduce-n\n (fn [acc ^long idx]\n (if (>= idx lmin)\n (and (== (aget bax 0) (aget bax 1)) acc)\n (and (== (aget ba1 idx) (aget ba2 idx)) acc)))\n true\n lmax))))))\n\n(comment (const-ba= (byte-array [1 2 3 4]) (byte-array [])))\n\n;;;; Math\n\n(defn approx==\n #?(:cljs {:tag 'boolean})\n ([ x y] (< (Math/abs (- (double x) (double y))) 0.001))\n ([signf x y] (< (Math/abs (- (double x) (double y))) (double signf))))\n\n(comment (qb 1e5 (approx== 0.01 3.141592 (/ 22 7))))\n\n(defn clamp [nmin nmax n] (if (< n nmin) nmin (if (> n nmax) nmax n))) ; Reflects\n(defn clamp-int ^long [nmin nmax n] (let [nmin (long nmin), nmax (long nmax), n (long n)] (if (< n nmin) nmin (if (> n nmax) nmax n))))\n(defn clamp-float ^double [nmin nmax n] (let [nmin (double nmin), nmax (double nmax), n (double n)] (if (< n nmin) nmin (if (> n nmax) nmax n))))\n\n(defn pnum-complement ^double [pnum] (- 1.0 (double pnum)))\n(defn as-pnum-complement ^double [x ] (- 1.0 (as-pnum x)))\n\n#?(:clj\n (do ; These will pass primitives through w/o reflection\n (defmacro <=* [x y z] `(let [y# ~y] (and (<= ~x y#) (<= y# ~z))))\n (defmacro >=* [x y z] `(let [y# ~y] (and (>= ~x y#) (>= y# ~z))))\n (defmacro <* [x y z] `(let [y# ~y] (and (< ~x y#) (< y# ~z))))\n (defmacro >* [x y z] `(let [y# ~y] (and (> ~x y#) (> y# ~z))))\n (defmacro min* [n1 n2] `(let [n1# ~n1 n2# ~n2] (if (> n1# n2#) n2# n1#)))\n (defmacro max* [n1 n2] `(let [n1# ~n1 n2# ~n2] (if (< n1# n2#) n2# n1#)))\n (defmacro clamp* [nmin nmax n] `(let [nmin# ~nmin nmax# ~nmax n# ~n]\n (if (< n# nmin#) nmin# (if (> n# nmax#) nmax# n#))))))\n\n#?(:clj\n (defmacro ^:no-doc multiply\n \"Private, don't use. Expands to nested (* <...>).\"\n [& xs]\n (let [[x1 x2 & xn] xs]\n (cond\n xn `(* (* ~x1 ~x2) (multiply ~@xn))\n x2 `(* ~x1 ~x2)\n x1 x1\n :else 1))))\n\n#?(:clj\n (defmacro ^:no-doc sum\n \"Private, don't use. Expands to nested (+ <...>).\"\n [& xs]\n (let [[x1 x2 & xn] xs]\n (cond\n xn `(+ (+ ~x1 ~x2) (sum ~@xn))\n x2 `(+ ~x1 ~x2)\n x1 x1\n :else 0))))\n\n(comment\n (clojure.walk/macroexpand-all '(multiply 1 2 3 4))\n (clojure.walk/macroexpand-all '(sum 1 2 3 4)))\n\n(defn pow [n exp] (Math/pow n exp))\n(defn abs [n] (if (neg? n) (- n) n))\n\n(defn round\n \"General purpose rounding util.\n Returns given number `n` rounded according to given options:\n - `kind` - \u2208 #{:round :floor :ceil :trunc} (default `:round`)\n - `precision` - Number of decimal places to include (default `nil` => none)\"\n {:arglists '([n] [kind n] [kind precision n])}\n ([n] (round :round nil n))\n ([a1 a2] ; [kind n]\n (if (keyword? a2) ; [n kind] back compatibility\n (round a2 nil a1)\n (round a1 nil a2)))\n\n ([a1 a2 a3] ; [kind precision n]\n (if (keyword? a2) ; [n kind precision] back compatibility\n (round a2 a3 a1)\n (let [n (double a3)\n modifier (when a2 (Math/pow 10.0 a2))\n n* (if modifier (* n ^double modifier) n)\n rounded\n (let [kind a1]\n (case kind\n :round (Math/round n*)\n :floor (Math/floor n*)\n :ceil (Math/ceil n*)\n :trunc (long n*)\n (truss/unexpected-arg! kind\n {:param 'kind\n :context `round\n :expected #{:round :floor :ceil :trunc}})))]\n\n (if-not modifier\n (do (long rounded)) ; Return long\n (/ (double rounded) ^double modifier) ; Return double\n )))))\n\n(do ; Optimized common cases\n (defn perc ^long [n divisor] (Math/round (* (/ (double n) (double divisor)) 100.0)))\n (defn round0 ^long [n] (Math/round (double n)))\n (defn round1 ^double [n] (/ (double (Math/round (* (double n) 10.0))) 10.0))\n (defn round2 ^double [n] (/ (double (Math/round (* (double n) 100.0))) 100.0))\n (defn round3 ^double [n] (/ (double (Math/round (* (double n) 1e3))) 1e3))\n (defn round4 ^double [n] (/ (double (Math/round (* (double n) 1e4))) 1e4))\n (defn roundn ^double [precision n]\n (let [p (Math/pow 10.0 (long precision))]\n (/ (double (Math/round (* (double n) p))) p))))\n\n(defn exp-backoff \"Returns binary exponential backoff value for n<=36.\"\n ([^long n-attempt] (exp-backoff n-attempt nil))\n ([^long n-attempt {:keys [min max factor] :or {factor 1000}}]\n (let [n (if (> n-attempt 36) 36 n-attempt) ; >2^36 excessive\n b (Math/pow 2 n)\n t (long (* (+ b ^double (rand b)) 0.5 (double factor)))\n t (long (if min (if (< t ^long min) min t) t))\n t (long (if max (if (> t ^long max) max t) t))]\n t)))\n\n(comment (exp-backoff 128))\n\n(defn chance\n \"Returns true with given probability \u2208 \u211d[0,1].\"\n {:tag #?(:cljs 'boolean :default nil)\n :inline\n (fn [prob]\n (if (const-form? prob)\n `(< (Math/random) ~(as-pnum! prob))\n `(< (Math/random) (double ~prob))))}\n\n [prob] (< (Math/random) (double prob)))\n\n(comment (chance 1.2))\n\n;;;; Misc\n\n#?(:clj\n (defn class-sym\n \"Returns class name symbol of given argument.\"\n [x] (when x (symbol (.getName (class x))))))\n\n(defn merge-meta [x m] (with-meta x (merge (meta x) m)))\n(defn without-meta [x] (if (meta x) (with-meta x nil) x))\n\n(defn some=\n \"Returns true iff given args are equal AND non-nil.\"\n #?(:cljs {:tag 'boolean})\n ([x ] (core/some? x))\n ([x y ] (and (core/some? x) (= x y)))\n ([x y & more] (and (core/some? x) (= x y) (revery? #(= % x) more))))\n\n(comment (some= :foo :foo nil))\n\n(defn nnil\n \"Returns first non-nil arg, or nil.\"\n ([ ] nil)\n ([x ] x)\n ([x y ] (if (nil? x) y x))\n ([x y z ] (if (nil? x) (if (nil? y) z y) x))\n ([x y z & more] (if (nil? x) (if (nil? y) (if (nil? z) (rfirst core/some? more) z) y) x)))\n\n(comment\n (qb 1e6\n (or nil nil nil false :a)\n (nnil nil nil nil false :a)))\n\n(defn parse-version [x]\n (let [[s-version ?s-qualifier] (str/split (str x) #\"-\" 2)]\n {:version (when-let [s (re-seq #\"\\d+\" s-version)] (mapv as-?int s))\n :qualifier (when-let [s ?s-qualifier] (str/lower-case s))}))\n\n(comment [(parse-version \"40.32.34.8-foo\") (parse-version 10.3)])\n\n#?(:clj\n (defmacro assert-min-encore-version\n \"Version check for dependency conflicts, etc.\"\n [min-version]\n (let [[^long xc ^long yc ^long zc] encore-version\n [ xm ym zm] (if (vector? min-version) min-version (:version (parse-version min-version)))\n [^long xm ^long ym ^long zm] (mapv #(or % 0) [xm ym zm])]\n\n (when-not (or (> xc xm) (and (= xc xm) (or (> yc ym) (and (= yc ym) (>= zc zm)))))\n (let [min-version (str/join \".\" [xm ym zm])\n your-version (str/join \".\" [xc yc zc])]\n (truss/ex-info!\n (str\n \"Insufficient `com.taoensso/encore` version (v\" your-version \" < v\" min-version \"), \"\n \"you may have a dependency conflict. Please see `https://www.taoensso.com/dependency-conflicts` for solutions!\")\n {:min-version min-version\n :your-version your-version}))))))\n\n(comment (assert-min-encore-version [3 10]))\n\n#?(:clj\n (defn get-source\n \"Returns {:keys [ns line column file]} source location given a macro's\n compile-time `&form` and `&env` vals. See also `keep-callsite`.\"\n [macro-form-or-meta macro-env]\n (let [{:keys [line column file]}\n (if (map? macro-form-or-meta)\n (do macro-form-or-meta)\n (meta macro-form-or-meta))\n\n file\n (if-not (:ns macro-env)\n *file* ; Compiling Clj\n (or ; Compiling Cljs\n (when-let [url (and file (truss/catching (jio/resource file)))]\n (truss/catching (.getPath (jio/file url)))\n (do (str url)))\n file))]\n\n (assoc-some\n {:ns (str *ns*)}\n {:line line\n :column column\n :file\n (when (string? file)\n (when-not (contains? #{\"NO_SOURCE_PATH\" \"NO_SOURCE_FILE\" \"\"} file)\n file))}))))\n\n(comment (.getPath (jio/resource \"taoensso/encore.cljc\")))\n\n#?(:clj\n (defn ^:no-doc have-resource?\n \"Private, don't use.\"\n [res-name] (boolean (try (jio/resource res-name) (catch Throwable _)))))\n\n#?(:clj\n (defn ^:no-doc have-class?\n \"Private, don't use.\"\n [class-name]\n (boolean\n (try\n (Class/forName class-name true (.getContextClassLoader (Thread/currentThread)))\n (catch Throwable _)))))\n\n(comment (have-class? \"org.slf4j.Logger\"))\n\n(def ^:const have-core-async?\n \"Is `clojure.core.async` present (not necessarily loaded)?\"\n (compile-if\n (or\n (jio/resource \"clojure/core/async.cljc\")\n (jio/resource \"clojure/core/async.clj\"))\n true\n false))\n\n;;;; Thread locals\n\n#?(:clj\n (defmacro thread-local-proxy \"Low-level, see `thread-local` instead.\"\n [& body] `(proxy [ThreadLocal] [] (initialValue [] (do ~@body)))))\n\n#?(:clj\n (defn thread-local*\n \"Low-level, see `thread-local` instead.\"\n [init-val-fn]\n (let [p (proxy [ThreadLocal] [] (initialValue [] (init-val-fn)))]\n (reify clojure.lang.IDeref (deref [this] (.get p))))))\n\n#?(:clj\n (defmacro thread-local\n \"Given a body that returns an initial value for the current thread,\n returns a `ThreadLocal` proxy that can be derefed to get the current\n thread's current value.\n\n Commonly used to achieve thread safety during Java interop.\n In the common case, `body` will be a call to some Java constructor\n that returns a non-thread-safe instance.\n\n Example:\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\n NB: don't pass the derefed value to other threads!\"\n [& body] `(thread-local* (fn [] ~@body))))\n\n(comment\n (def thread-local-simple-date-format_ (thread-local (SimpleDateFormat. \"yyyy-MM-dd\")))\n (.format @thread-local-simple-date-format_ (Date.))\n\n (let [tl_ (thread-local \"init-val\")\n tlp (thread-local-proxy \"init-val\")]\n (qb 1e6 ; [30.54 54.03]\n (.get ^ThreadLocal tlp) @tl_)))\n\n;;;; Instants\n;; `inst` - Platform instant (`java.time.Instant` or `js/Date`)\n;; `dt` - `java.util.Date` (Clj only)\n;; `udt` - Milliseconds since Unix epoch (pos/neg)\n\n(defn inst?\n \"Returns true iff given platform instant (`java.time.Instant` or `js/Date`).\"\n #?(:cljs {:tag 'boolean})\n [x]\n #?(:clj (instance? java.time.Instant x)\n :cljs (instance? js/Date x)))\n\n#?(:clj\n (do\n (defn now-inst\n \"Returns current system instant as `java.time.Instant`.\"\n {:inline (fn [] `(java.time.Instant/now))}\n ^java.time.Instant [] (java.time.Instant/now))\n\n (defn now-dt\n \"Returns current system instant as `java.util.Date`.\"\n {:inline (fn [] `(java.util.Date.))}\n ^java.util.Date [] (java.util.Date.))\n\n (defn now-udt\n \"Returns current system instant as milliseconds since Unix epoch.\"\n {:inline (fn [] `(System/currentTimeMillis))}\n ^long [] (System/currentTimeMillis))\n\n (defn now-nano\n \"Returns current value of best-resolution time source as nanoseconds.\"\n {:inline (fn [] `(System/nanoTime))}\n ^long [] (System/nanoTime))\n\n (defn inst->udt\n \"Returns given `java.time.Instant` as milliseconds since Unix epoch.\"\n {:inline (fn [inst] `(.toEpochMilli ~(with-meta inst {:tag 'java.time.Instant})))}\n ^long [^java.time.Instant inst] (.toEpochMilli inst))\n\n (defn udt->inst\n \"Returns given milliseconds since Unix epoch as `java.time.Instant`.\"\n {:inline (fn [msecs-since-epoch] `(java.time.Instant/ofEpochMilli ~msecs-since-epoch))}\n ^java.time.Instant [msecs-since-epoch] (java.time.Instant/ofEpochMilli msecs-since-epoch)))\n\n :cljs\n (do\n (defn now-inst \"Returns current system instant as `js/Date`.\" [] (js/Date.))\n (defn now-dt \"Returns current system instant as `js/Date`.\" [] (js/Date.))\n (defn now-udt \"Returns current system insant as milliseconds since Unix epoch.\" [] (js/Date.now))\n (def now-nano \"Returns current value of best-resolution time source as nanoseconds.\"\n (if-let [perf (oget js-?window \"performance\")\n pf (or\n (oget perf \"now\") (oget perf \"mozNow\") (oget perf \"webkitNow\")\n (oget perf \"msNow\") (oget perf \"oNow\"))]\n (fn [] (Math/floor (* 1e6 (.call pf perf))))\n (fn [] (* 1e6 (js/Date.now)))))\n\n (defn inst->udt \"Returns given `js/Date` as milliseconds since Unix epoch.\" [inst] (.getTime inst))\n (defn udt->inst \"Returns given milliseconds since Unix epoch as `js/Date`.\" [msecs-since-epoch] (js/Date. msecs-since-epoch))))\n\n(defn udt? #?(:cljs {:tag 'boolean}) [x] (int? x))\n\n(defn as-?inst\n \"Returns given ?arg as platform instant (`java.time.Instant` or `js/Date`), or nil.\"\n [x]\n #?(:clj\n (cond\n (instance? java.time.Instant x) x\n (instance? java.util.Date x) (.toInstant ^java.util.Date x)\n (int? x) (java.time.Instant/ofEpochMilli x)\n (string? x) (truss/catching (java.time.Instant/parse ^String x)))\n\n :cljs\n (cond\n (instance? js/Date x) x\n (number? x) (js/Date. x)\n (string? x)\n (let [x (js/Date. x)]\n (when-not (js/isNaN x)\n x)))))\n\n#?(:clj\n (defn as-?dt\n \"Returns given ?arg as `java.util.Date`, or nil.\"\n [x]\n (cond\n (instance? java.time.Instant x) (java.util.Date/from ^java.time.Instant x)\n (instance? java.util.Date x) x\n (int? x) (java.util.Date. ^long x)\n (string? x)\n (truss/catching\n (java.util.Date/from\n (java.time.Instant/parse ^String x))))))\n\n(defn as-?udt\n \"Returns given ?arg as (pos/neg) milliseconds since Unix epoch, or nil.\"\n [x]\n #?(:clj\n (cond\n (int? x) (long x)\n (instance? java.time.Instant x) (.toEpochMilli ^java.time.Instant x)\n (instance? java.util.Date x) (.getTime ^java.util.Date x)\n (string? x)\n (or\n (truss/catching (Long/parseLong x))\n (truss/catching\n (.toEpochMilli\n (java.time.Instant/parse ^String x)))))\n\n :cljs\n (cond\n (instance? js/Date x) (.getTime x)\n (number? x) x\n (string? x)\n (or\n (parse-js-int x)\n #_(let [x (js/Number x)] (when-not (js/isNaN x) x))\n (let [x (js/Date.parse x)] (when-not (js/isNaN x) x))))))\n\n(do (defn as-inst #?(:cljs [x] :clj ^java.time.Instant [x]) (or (as-?inst x) (-as-throw :inst x))))\n#?(:clj (defn as-dt ^java.util.Date [x] (or (as-?dt x) (-as-throw :dt x))))\n(do (defn as-udt #?(:cljs [x] :clj ^long [x]) (or (as-?udt x) (-as-throw :udt x))))\n\n;; Specialist macros to force expanded form (useful for Cljs, other macros, etc.).\n#?(:clj (defmacro ^:no-doc now-inst* \"Prefer `now-inst` when possible.\" [] (if (:ns &env) `(js/Date.) `(java.time.Instant/now))))\n#?(:clj (defmacro ^:no-doc now-dt* \"Prefer `now-dt` when possible.\" [] (if (:ns &env) `(js/Date.) `(java.util.Date.))))\n#?(:clj (defmacro ^:no-doc now-udt* \"Prefer `now-udt` when possible.\" [] (if (:ns &env) `(js/Date.now) `(System/currentTimeMillis))))\n#?(:clj (defmacro ^:no-doc now-nano* \"Prefer `now-nano` when possible.\" [] (if (:ns &env) `(now-nano) `(System/nanoTime))))\n\n(defn format-inst-fn\n \"Experimental, subject to change without notice.\n\n Returns a (fn format [instant]) that:\n - Takes a platform instant (`java.time.Instant` or `js/Date`).\n - Returns a formatted human-readable instant string.\n\n Options:\n `:formatter`\n Clj: `java.time.format.DateTimeFormatter`\n Cljs: `goog.i18n.DateTimeFormat`\n\n Defaults to `ISO8601` formatter (`YYYY-MM-DDTHH:mm:ss.sssZ`),\n e.g.: \\\"2011-12-03T10:15:130Z\\\".\n\n `:zone` (Clj only) `java.time.ZoneOffset` (defaults to UTC).\n Note that zone may be ignored by some `DateTimeFormatter`s,\n including the default (`DateTimeFormatter/ISO_INSTANT`)!\"\n\n ([] (format-inst-fn nil))\n #?(:cljs\n ([{:keys [formatter]}]\n ;; (instance! goog.i18n.DateTimeFormat formatter) ; Not required here\n (if formatter ; `goog.i18n.DateTimeFormat`\n (fn format-instant [instant] (.format formatter instant))\n (fn format-instant [instant] (.toISOString instant))))\n\n :clj\n ([{:keys [formatter zone]\n :or\n {formatter java.time.format.DateTimeFormatter/ISO_INSTANT\n zone java.time.ZoneOffset/UTC}}]\n\n (instance! java.time.format.DateTimeFormatter formatter\n {:context `format-inst-fn, :param :formatter})\n\n (when zone\n (instance! java.time.ZoneOffset zone\n {:context `format-inst-fn, :param :zone}))\n\n (let [^java.time.format.DateTimeFormatter ; Thread safe\n formatter\n (if-not zone\n formatter\n (.withZone\n ^java.time.format.DateTimeFormatter formatter\n ^java.time.ZoneOffset zone))]\n\n (fn format-instant [^java.time.Instant instant]\n (.format formatter instant))))))\n\n(comment\n ((format-inst-fn\n {:formatter (java.time.format.DateTimeFormatter/ofPattern \"yyyy-MM-dd'T'HH:mm:ssXXX\")\n :zone (.getOffset (java.time.ZonedDateTime/now (java.time.ZoneId/of \"Europe/Berlin\")))})\n (.toInstant (java.util.Date.))))\n\n(let [default-fn (format-inst-fn)]\n (defn format-inst\n \"Takes a platform instant (`java.time.Instant` or `js/Date`) and\n returns a formatted human-readable string in `ISO8601` format\n (`YYYY-MM-DDTHH:mm:ss.sssZ`), e.g. \\\"2011-12-03T10:15:130Z\\\".\"\n {:tag #?(:clj 'String :cljs 'string)}\n [inst] (default-fn inst)))\n\n(comment (format-inst (now-inst)))\n\n;;;; Date & time\n\n(defn secs->ms ^long [secs] (* (long secs) 1000))\n(defn ms->secs ^long [ms] (quot (long ms) 1000))\n(defn ms\n \"Returns ~number of milliseconds in period defined by given args.\"\n {:arglists '([opts] [& {:as opts :keys [years months weeks days hours mins secs msecs ms]}])}\n (^long [{:keys [years months weeks days hours mins secs msecs ms]}]\n (round0\n (+\n (if years (* (double years) #=(* 1000 60 60 24 365)) 0.0)\n (if months (* (double months) #=(* 1000 60 60 24 29.53)) 0.0)\n (if weeks (* (double weeks) #=(* 1000 60 60 24 7)) 0.0)\n (if days (* (double days) #=(* 1000 60 60 24)) 0.0)\n (if hours (* (double hours) #=(* 1000 60 60)) 0.0)\n (if mins (* (double mins) #=(* 1000 60)) 0.0)\n (if secs (* (double secs) 1000) 0.0)\n (if msecs (double msecs) 0.0)\n (if ms (double ms) 0.0))))\n\n (^long [k1 v1 ] (ms {k1 v1}))\n (^long [k1 v1 k2 v2 ] (ms {k1 v1, k2 v2}))\n ( [k1 v1 k2 v2 & more] (ms (reduce-kvs assoc {k1 v1 k2 v2} more))))\n\n(defn secs\n \"Returns ~number of seconds in period defined by given args.\"\n {:arglists '([opts] [& {:as opts :keys [years months weeks days hours mins secs msecs ms]}])}\n (^long [opts ] (ms->secs (ms opts)))\n (^long [k1 v1 ] (ms->secs (ms {k1 v1})))\n (^long [k1 v1 k2 v2 ] (ms->secs (ms {k1 v1, k2 v2})))\n ( [k1 v1 k2 v2 & more] (ms->secs (ms (reduce-kvs assoc {k1 v1 k2 v2} more)))))\n\n(comment\n (ms :years 88 :months 3 :days 33)\n (secs :years 88 :months 3 :days 33))\n\n#?(:clj\n (defmacro msecs\n \"Macro version of `ms`.\"\n {:arglists '([opts] [& {:as opts :keys [years months weeks days hours mins secs msecs ms]}])}\n ([k1 v1 & more] `(msecs ~(reduce-kvs assoc {k1 v1} (vec more))))\n ([{:keys [years months weeks days hours mins secs msecs ms] :as opts}]\n (truss/have? [:ks<= #{:years :months :weeks :days :hours :mins :secs :msecs :ms}] opts)\n (taoensso.encore/ms opts))))\n\n(comment (macroexpand '(msecs :weeks 3)))\n\n#?(:clj\n (defn- -simple-date-format\n \"Returns a SimpleDateFormat ThreadLocal proxy.\"\n [pattern locale timezone]\n (let [pattern\n (case pattern\n :iso8601 \"yyyy-MM-dd'T'HH:mm:ss.SSSX\"\n :rss2 \"EEE, dd MMM yyyy HH:mm:ss z\"\n pattern)\n\n locale\n (if (identical-kw? locale :jvm-default)\n nil ; (Locale/getDefault)\n locale)\n\n timezone\n (if (identical-kw? timezone :jvm-default)\n nil ; (TimeZone/getDefault)\n (if (identical-kw? timezone :utc)\n (TimeZone/getTimeZone \"UTC\")\n timezone))]\n\n (thread-local-proxy\n (let [^SimpleDateFormat sdf\n (if locale\n (SimpleDateFormat. ^String pattern ^Locale locale)\n (SimpleDateFormat. ^String pattern))]\n (when timezone (.setTimeZone sdf ^TimeZone timezone))\n sdf)))))\n\n#?(:clj\n (defn simple-date-format*\n ^java.text.SimpleDateFormat [pattern locale timezone]\n (.get ^ThreadLocal (-simple-date-format pattern locale timezone))))\n\n#?(:clj\n (defn simple-date-format \"Returns a thread-local `java.text.SimpleDateFormat`.\"\n ^java.text.SimpleDateFormat [pattern & [{:keys [locale timezone] :as opts}]]\n (.get ^ThreadLocal (-simple-date-format pattern locale timezone))))\n\n(comment (qb 1e5 (.format (simple-date-format \"yyyy-MMM-dd\") (Date.))))\n\n;;;; Strings\n\n(def ^:const a-utf8-str\n \"Example UTF-8 string for tests, etc.\"\n \"Hi \u0cac\u0cbe \u0c87\u0cb2\u0ccd\u0cb2\u0cbf \u0cb8\u0c82\u0cad\u0cb5\u0cbf\u0cb8 10\")\n\n(defn str-builder?\n #?(:cljs {:tag 'boolean})\n [x]\n #?(:clj (instance? StringBuilder x)\n :cljs (instance? goog.string.StringBuffer x)))\n\n(defn str-builder\n \"Returns a new stateful string builder:\n - `java.lang.StringBuilder` for Clj\n - `goog.string.StringBuffer` for Cljs\n\n See also `sb-append`.\"\n #?(:clj (^StringBuilder [ ] (StringBuilder.)))\n #?(:cljs ( [ ] (goog.string.StringBuffer.)))\n #?(:clj (^StringBuilder [init] (if (instance? StringBuilder init) init (StringBuilder. (str init)))))\n #?(:cljs ( [init] (if (instance? goog.string.StringBuffer init) init (goog.string.StringBuffer. (str init))))))\n\n(defn sb-length\n \"Returns given string builder's current length (character count).\"\n #?(:clj ^long [^StringBuilder sb] :cljs [^goog.string.StringBuffer sb])\n #?(:clj (.length sb)\n :cljs (.getLength sb)))\n\n(defn sb-append\n \"Appends given string/s to given string builder. See also `str-builder.`\"\n (#?(:clj ^StringBuilder [^StringBuilder str-builder x]\n :cljs [ str-builder x])\n (if (nil? x)\n (do str-builder)\n (.append str-builder\n #?(:clj (.toString ^Object x)\n :cljs (.toString x)))))\n\n (#?(:clj ^StringBuilder [^StringBuilder str-builder x & more]\n :cljs [ str-builder x & more])\n (reduce\n (fn [acc in] (sb-append acc in))\n (sb-append str-builder x) more)))\n\n(comment (str (sb-append (str-builder \"a\") \"b\" \"c\" \\d)))\n\n(defn ^:no-doc sb-appender\n \"Private, don't use.\n Returns a stateful string-building (fn [x & more]) that:\n - Appends non-nil xs to a string builder, starting with a separator IFF\n string building has started and at least one x is non-nil.\n - Returns the underlying string builder.\"\n ([ ] (sb-appender (str-builder) \" \"))\n ([ separator] (sb-appender (str-builder) separator))\n ([sb separator]\n (let [#?@(:clj [^StringBuilder sb sb])\n sep!\n (let [sep (str separator)\n started?_ (volatile! false)]\n (fn []\n (if @started?_\n (do (.append sb sep) true)\n (do (vreset! started?_ true) false))))]\n\n (fn a-sb-appender\n ([ ] sb) ; Undocumented\n ([x ] (if (nil? x) sb (do (sep!) (sb-append sb x))))\n ([x & more]\n (if (and (nil? x) (revery? nil? more))\n nil\n (do\n (sep!)\n (reduce\n (fn [acc in] (sb-append acc in))\n (sb-append sb x) more))))))))\n\n(comment (str (let [s+ (sb-appender)] (s+ \"x1a\" \"x1b\" \"x1c\") (s+ \"x2a\" \"x2c\") (sb-append (s+) \"\\n\"))))\n\n(defn str-rf\n \"String builder reducing fn.\"\n ([ ] (str-builder))\n ([acc ] (str acc)) ; cf\n ([acc in]\n (if (nil? in)\n acc\n (.append (str-builder acc)\n #?(:clj (.toString ^Object in)\n :cljs (.toString in))))))\n\n(defn- sb-rf\n \"Like `str-rf` but presumes string builder init value.\"\n ([ ] (str-builder))\n ([sb ] (str sb)) ; cf\n ([sb in]\n (if (nil? in)\n sb\n #?(:clj (.append ^StringBuilder sb (.toString ^Object in))\n :cljs (.append sb (.toString in))))))\n\n(comment\n (qb 5e3 ; [264.84 37.73 40.51]\n (do (reduce str (range 512)))\n (do (str (reduce str-rf (range 512))))\n (do (str (reduce sb-rf (str-builder) (range 512))))))\n\n(defn str-join\n \"Faster generalization of `clojure.string/join` with transducer support.\"\n {:tag #?(:clj 'String :cljs 'string)}\n ([ xs] (str-join nil nil xs))\n ([separator xs] (str-join separator nil xs))\n ([separator xform xs]\n (if (and separator (not= separator \"\"))\n (let [separator (str separator)]\n (if xform\n (transduce (comp xform (interpose separator)) sb-rf (str-builder) xs)\n (transduce (interpose separator) sb-rf (str-builder) xs)))\n\n (if xform\n (do (transduce xform sb-rf (str-builder) xs))\n (str (reduce sb-rf (str-builder) xs))))))\n\n(comment\n (str-join \"x\" (comp (filter #{\"a\" \"c\"}) (map str/upper-case)) [\"a\" \"b\" \"c\"]) ; \"AxC\"\n (str-join \",\" (filter core/some?) [\"a\" \"b\" \"c\" nil \"\" \"d\"]) ; \"a,b,c,,d\"\n (let [xf-some (filter core/some?)]\n (qb 1e6 ; [224.03 134.57 191.69 100.76]\n (str/join \",\" [\"a\" \"b\" \"c\" nil \"\" \"d\"])\n (str-join \",\" [\"a\" \"b\" \"c\" nil \"\" \"d\"])\n (str-join \",\" xf-some [\"a\" \"b\" \"c\" nil \"\" \"d\"])\n (str-join \"\" [\"a\" \"b\" \"c\" nil \"\" \"d\"]))))\n\n(defn str-contains?\n #?(:cljs {:tag 'boolean})\n [s substr]\n #?(:clj (.contains ^String s ^String substr)\n :cljs (not= -1 (.indexOf s substr))))\n\n(defn str-starts-with?\n #?(:cljs {:tag 'boolean})\n [s substr]\n #?(:clj (.startsWith ^String s ^String substr)\n :cljs (zero? (.indexOf s substr))))\n\n(defn str-ends-with?\n #?(:cljs {:tag 'boolean})\n [s substr]\n #?(:clj (.endsWith ^String s ^String substr)\n :cljs\n (let [s-len (.-length s)\n substr-len (.-length substr)]\n (when (>= s-len substr-len)\n (not= -1 (.indexOf s substr (- s-len substr-len)))))))\n\n(defn str-?index\n \"Returns (first/last) ?index of substring if it exists within given string.\"\n ([s substr ] (str-?index s substr 0 false))\n ([s substr start-idx] (str-?index s substr start-idx false))\n ([s substr start-idx last?]\n (let [result\n (if last?\n #?(:clj (.lastIndexOf ^String s ^String substr ^long start-idx)\n :cljs (.lastIndexOf s substr start-idx))\n #?(:clj (.indexOf ^String s ^String substr ^long start-idx)\n :cljs (.indexOf s substr start-idx)))]\n\n (when (not= result -1) result))))\n\n(comment (qb 1000 (str-?index \"hello there\" \"there\")))\n\n(defn case-insensitive-str=\n \"Returns true iff given strings are equal, ignoring case.\"\n ;; Implementation detail: compares normalized chars 1 by 1, so often faster\n ;; than naive comparison of normalized strings.\n {:tag #?(:cljs 'boolean :default nil)}\n [s1 s2]\n #?(:clj (.equalsIgnoreCase ^String s1 ^String s2)\n :cljs\n (or\n (identical? s1 s2)\n (let [l1 (.-length s1)\n l2 (.-length s2)]\n (and\n (== l1 l2)\n ;; (= (str/lower-case s1) (str/lower-case s2))\n ;; Still needs bench comparison:\n (reduce-n\n (fn [acc idx]\n (let [c1 (.toLowerCase (.charAt s1 idx))\n c2 (.toLowerCase (.charAt s2 idx))]\n (if (= c1 c2) true (reduced false))))\n true\n 0\n l1))))))\n\n(comment\n (qb 1e6\n (do (= \"-abcdefghijklmnop\" \"_abcdefghijklmnop\"))\n (case-insensitive-str= \"-abcdefghijklmnop\" \"_abcdefghijklmnop\")\n (=\n (str/lower-case \"-abcdefghijklmnop\")\n (str/lower-case \"_abcdefghijklmnop\"))))\n\n(defn norm-str\n \"Returns normalized form of given string.\n `norm-form` is \u2208 #{:nfc :nfkc :nfd :nfkd} (default `:nfc` as per W3C).\"\n {:tag #?(:clj 'String :cljs 'string)}\n ([ s] (norm-str :nfc s))\n ([norm-form s]\n (let [norm-form\n (case norm-form\n :nfc #?(:clj java.text.Normalizer$Form/NFC, :cljs \"NFC\")\n :nfkc #?(:clj java.text.Normalizer$Form/NFKC, :cljs \"NFKC\")\n :nfd #?(:clj java.text.Normalizer$Form/NFD, :cljs \"NFD\")\n :nfkd #?(:clj java.text.Normalizer$Form/NFKD, :cljs \"NFKD\")\n (if #?(:clj (instance? java.text.Normalizer$Form norm-form) :cljs false)\n (do norm-form) ; Back compatibility\n (truss/unexpected-arg! norm-form\n {:param 'norm-form\n :context `norm-str\n :expected #{:nfc :nfkc :nfd :nfkd}})))]\n\n #?(:clj (java.text.Normalizer/normalize ^String s norm-form)\n :cljs (.normalize s norm-form)))))\n\n(comment (qb 1e6 (norm-str \"foo\"))) ; 48.52\n\n(defn str-replace\n \"Like `str/replace` but provides consistent Clj/s behaviour.\n\n Workaround for <http://dev.clojure.org/jira/browse/CLJS-794>,\n <http://dev.clojure.org/jira/browse/CLJS-911>.\n\n Note that ClojureScript 1.7.145 introduced a partial fix for CLJS-911.\n A full fix could unfortunately not be introduced w/o breaking compatibility\n with the previously incorrect behaviour. CLJS-794 also remains unresolved.\"\n {:tag #?(:clj 'String :cljs 'string)}\n [s match replacement]\n #?(:clj (str/replace s match replacement)\n :cljs\n (cond\n (string? match) ; string -> string replacement\n (.replace s (js/RegExp. (gstr/regExpEscape match) \"g\") replacement)\n ;; (.hasOwnProperty match \"source\") ; No! Ref. <http://goo.gl/8hdqxb>\n\n (instance? js/RegExp match) ; pattern -> string/fn replacement\n (let [flags (str \"g\" (when (.-ignoreCase match) \"i\")\n (when (.-multiline match) \"m\")) ; Fix CLJS-794\n replacement ; Fix CLJS-911\n (if (string? replacement)\n replacement\n ;; Note that the merged CLJS-911 fix actually tries to vary\n ;; behaviour here based on the number of matches(!)\n (fn [& args] (replacement (vec args))))]\n (.replace s (js/RegExp. (.-source match) flags) replacement))\n :else (truss/ex-info! (str \"Invalid match arg: \" match)))))\n\n(do\n (defn ^:no-doc nil->str [x] (if (nil? x) \"nil\" x)) ; (undefined? x) check no longer needed for modern Cljs\n\n (defn format*\n {:tag #?(:clj 'String :cljs 'string)}\n (#?(:clj [ fmt args]\n :cljs [ fmt args]) (format* nil->str fmt args))\n (#?(:clj [xform fmt args]\n :cljs [xform fmt args])\n (if (nil? fmt)\n \"\" ; Prevent NPE\n (let [args (if xform (mapv xform args) args)]\n #?(:clj (String/format fmt (to-array args))\n :cljs (apply gstr/format fmt args))))))\n\n (defn format\n \"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`!).\"\n {:tag #?(:clj 'String :cljs 'string)}\n [fmt & args] (format* fmt args)))\n\n(defn str-join-once\n \"Like `string/join` but skips nils and duplicate separators.\"\n {:tag #?(:clj 'String :cljs 'string)}\n [separator coll]\n (let [sep separator]\n (if (str/blank? sep)\n (str (reduce str-rf \"\" coll))\n (let [acc-ends-with-sep?_ (volatile! false)\n acc-empty?_ (volatile! true)]\n (str\n (reduce\n (fn [acc in]\n (let [in (str in)\n in-empty? (= in \"\")\n in-starts-with-sep? (str-starts-with? in sep)\n in-ends-with-sep? (str-ends-with? in sep)\n acc-ends-with-sep? @acc-ends-with-sep?_\n acc-empty? @acc-empty?_]\n\n (vreset! acc-ends-with-sep?_ in-ends-with-sep?)\n (when acc-empty? (vreset! acc-empty?_ in-empty?))\n\n (if acc-ends-with-sep?\n (if in-starts-with-sep?\n (sb-append acc (.substring in 1))\n (sb-append acc in))\n\n (if in-starts-with-sep?\n (sb-append acc in)\n (if (or acc-empty? in-empty?)\n (sb-append acc in)\n (do (sb-append acc sep)\n (sb-append acc in)))))))\n (str-builder)\n coll))))))\n\n(defn path\n {:tag #?(:clj 'String :cljs 'string)}\n [& parts] (str-join-once \"/\" parts))\n\n(comment (path \"foo/\" nil \"/bar\" \"baz/\" \"/qux/\"))\n\n(defn norm-word-breaks\n \"Converts all word breaks of any form and length (including line breaks of any\n form, tabs, spaces, etc.) to a single regular space.\"\n {:tag #?(:clj 'String :cljs 'string)}\n [s] (str/replace (str s) #\"\\s+\" \\space))\n\n(defn count-words ^long [s] (if (str/blank? s) 0 (count (str/split s #\"\\s+\"))))\n(comment (count-words \"Hello this is a test\"))\n\n(defn into-str\n \"Simple Hiccup-like string templating to complement Tempura.\"\n {:tag #?(:clj 'String :cljs 'string)}\n [& xs]\n (str\n (reduce\n (fn rf [acc in]\n (if (sequential? in)\n (reduce rf acc in)\n (sb-append acc (str in))))\n (str-builder)\n xs)))\n\n(comment\n (let [br \"\\n\\n\"]\n (into-str :a :b br :c (for [n (range 5)] [n br])\n (when true [:d :e [:f :g]]))))\n\n(defn const-str=\n \"Constant-time string equality checker.\n Useful to prevent timing attacks, etc.\"\n [s1 s2]\n (when (and s1 s2)\n #?(:clj (const-ba= (str->utf8-ba s1) (str->utf8-ba s2))\n :cljs\n (let [vx [\"0\" \"1\"]\n v1 (vec s1)\n v2 (vec s2)\n n1 (count v1)\n n2 (count v2)\n nmax (max n1 n2)\n nmin (min n1 n2)]\n\n (reduce-n\n (fn [acc idx]\n (if (>= idx nmin)\n (and (= (get vx 0) (get vx 1)) acc)\n (and (= (get v1 idx) (get v2 idx)) acc)))\n true\n nmax)))))\n\n(comment (const-str= \"foo\" \"\"))\n\n(defn ^:no-doc format-num-fn\n \"Private, don't use.\"\n [n-min-fd n-max-fd]\n #?(:clj\n (let [^ThreadLocal nf-proxy\n (thread-local-proxy\n (let [nf (java.text.NumberFormat/getInstance java.util.Locale/US)]\n (when (instance? java.text.DecimalFormat nf)\n (doto ^java.text.DecimalFormat nf\n (.setGroupingSize 3)\n (.setMinimumFractionDigits n-min-fd)\n (.setMaximumFractionDigits n-max-fd)\n (.setDecimalFormatSymbols ; Redundant?\n (doto (java.text.DecimalFormatSymbols.)\n (.setDecimalSeparator \\.)\n (.setGroupingSeparator \\,)))))))]\n\n (fn [n] (.format ^java.text.NumberFormat (.get nf-proxy) n)))\n\n :cljs\n (let [nf\n (js/Intl.NumberFormat. \"en-US\"\n #js{:minimumFractionDigits n-min-fd\n :maximumFractionDigits n-max-fd\n :useGrouping true})]\n\n (fn [n] (.format nf n)))))\n\n(comment ((format-num-fn 2 2) 123123123)) ; \"123,123,123.00\"\n\n(let [fmt0 (format-num-fn 0 0)\n fmt2 (format-num-fn 2 2)]\n\n (defn format-nsecs\n \"Returns given nanoseconds (long) as formatted human-readable string.\n Example outputs: \\\"1.00m\\\", \\\"4.20s\\\", \\\"340ms\\\", \\\"822\u03bcs\\\", etc.\"\n {:tag #?(:clj 'String :cljs 'string)}\n [nanosecs]\n (let [ns (double nanosecs)]\n (cond\n (>= ns 6e10) (str (fmt2 (/ ns 6e10)) \"m\")\n (>= ns 1e9) (str (fmt2 (/ ns 1e9)) \"s\")\n (>= ns 1e6) (str (fmt0 (/ ns 1e6)) \"ms\")\n (>= ns 1e3) (str (fmt0 (/ ns 1e3)) \"\u03bcs\")\n :else (str (fmt0 ns) \"ns\")))))\n\n(comment (qb 1e5 (format-nsecs 1.8e9))) ; 22.68\n\n(defn abbreviate-ns\n \"Give any nameable type (string, keyword, symbol), returns the same\n type with at most `n-full` (default 1) unabbreviated namespace parts.\n\n Example:\n (abbreviate-ns 2 :foo.bar/baz) => :foo.bar/baz\n (abbreviate-ns 1 :foo.bar/baz) => :f.bar/baz\n (abbreviate-ns 0 :foo.bar/baz) => :f.b/baz\"\n\n ([ x] (abbreviate-ns 1 x))\n ([n-full x]\n (let [n-full (long (truss/have nat-int? n-full))\n [p1 p2] (str/split (as-qname x) #\"/\")]\n (if-not p2\n x\n (let [name-part p2\n ns-parts (str/split p1 #\"\\.\")\n n-to-abbr (- (count ns-parts) n-full)\n sb\n (reduce-indexed\n (fn [sb ^long idx #?(:clj ^String in :cljs ^string in)]\n (when-not (zero? idx) (sb-append sb \".\"))\n (if (< idx n-to-abbr)\n (sb-append sb (.substring in 0 1))\n (sb-append sb in)))\n (str-builder)\n ns-parts)]\n\n (sb-append sb \"/\")\n (sb-append sb name-part)\n\n (let [s (str sb)]\n (cond\n (keyword? x) (keyword s)\n (symbol? x) (symbol s)\n :else s)))))))\n\n;;;; Name filter\n\n(declare fmemoize)\n\n(let [as-?qname as-?qname\n always (fn always [_in] true)\n never (fn never [_in] false)\n ns? (fn [x] (instance? #?(:clj clojure.lang.Namespace :cljs Namespace) x))\n\n input-str!\n (fn [x]\n (or\n (as-?qname x)\n (cond\n (nil? x) \"\"\n (ns? x) (str x)\n :else\n (truss/unexpected-arg! x\n {:context `name-filter\n :param 'filter-input-arg\n :expected '#{string keyword symbol namespace nil}}))))\n\n wild-str->?re-pattern\n (fn [s]\n (when (str-contains? s \"*\")\n (re-pattern\n (-> (str \"^\" s \"$\")\n (str/replace \"(.*)\" \"__OR_CHILDREN__\")\n (str/replace \".\" \"\\\\.\")\n (str/replace \"*\" \".*\")\n (str/replace \"__OR_CHILDREN__\" \"(\\\\..*)?\")))))\n\n compile->match-fn\n (fn compile->match-fn\n [spec cache?]\n (cond\n (#{:any \"*\"} spec) always\n (#{:none #{} []} spec) never\n (re-pattern? spec) (fn match? [in] (re-find spec (input-str! in)))\n (ns? spec) (recur (str spec) cache?)\n\n :if-let [str-spec (as-?qname spec)]\n (if-let [re-pattern (wild-str->?re-pattern str-spec)]\n (recur re-pattern cache?)\n (fn match? [in] (= str-spec (input-str! in))))\n\n (or (vector? spec) (set? spec))\n (cond\n ;; (empty? spec) never\n ((set spec) \"*\") always\n (= (count spec) 1) (recur (first spec) cache?)\n :else\n (let [[fixed-strs re-patterns]\n (reduce\n (fn [[fixed-strs re-patterns] spec]\n (let [spec (if (ns? spec) (str spec) (as-qname spec))]\n (if-let [re-pattern (if (re-pattern? spec) spec (wild-str->?re-pattern spec))]\n [ fixed-strs (conj re-patterns re-pattern)]\n [(conj fixed-strs spec) re-patterns ])))\n [#{} []]\n spec)\n\n fx-match (not-empty fixed-strs) ; #{\"foo\" \"bar\"}, etc.\n re-match\n (when-let [re-patterns (not-empty re-patterns)] ; [\"foo.*\", \"bar.*\"], etc.\n (let [f (fn match? [in-str] (rsome #(re-find % in-str) re-patterns))]\n (if cache? (fmemoize f) f)))]\n\n (cond!\n (and fx-match re-match)\n (fn match? [in]\n (let [in-str (input-str! in)]\n (or\n (fx-match in-str)\n (re-match in-str))))\n\n fx-match (fn match? [in] (fx-match (input-str! in)))\n re-match (fn match? [in] (re-match (input-str! in))))))\n\n :else\n (truss/unexpected-arg! spec\n {:context `name-filter\n :param 'filter-spec\n :expected '#{string keyword symbol set regex namespace\n {:allow <spec>, :disallow <spec>}}})))]\n\n (defn name-filter\n \"Given filter `spec`, returns a compiled (fn match? [x]) that:\n - Takes a string, keyword, symbol, or namespace.\n - Returns true iff input matches spec.\n\n Useful for efficiently filtering namespaces, class names, id kws, etc.\n\n Spec may be:\n - A namespace to match exactly\n - A regex pattern to match\n - A str/kw/sym to match, with \\\"*\\\" and \\\"(.*)\\\" as wildcards:\n \\\"foo.*\\\" will match \\\"foo.bar\\\"\n \\\"foo(.*)\\\" will match \\\"foo.bar\\\" and \\\"foo\\\"\n If you need literal \\\"*\\\"s, use #\\\"\\\\*\\\" regex instead.\n\n - A set/vector of the above to match any\n - A map, {:allow <spec> :disallow <spec>} with specs as the above:\n If present, `:allow` spec MUST match, AND\n If present, `:disallow` spec MUST NOT match.\n\n Spec examples:\n *ns*, #{}, \\\"*\\\", \\\"foo.bar\\\", \\\"foo.bar.*\\\", \\\"foo.bar(.*)\\\",\n #{\\\"foo\\\" \\\"bar.*\\\"}, #\\\"(foo1|foo2)\\\\.bar\\\",\n {:allow #{\\\"foo\\\" \\\"bar.*\\\"} :disallow #{\\\"foo.*.bar.*\\\"}}.\"\n\n [spec]\n (if-not (map? spec)\n (recur {:allow spec :disallow nil})\n (let [cache? (get spec :cache?)\n allow-spec (or (get spec :allow) (get spec :whitelist))\n disallow-spec (or (get spec :disallow) (get spec :blacklist) (get spec :deny))\n\n allow (when-let [as allow-spec] (compile->match-fn as cache?))\n disallow (when-let [ds disallow-spec] (compile->match-fn ds cache?))]\n\n (cond\n (= disallow always) never\n (= allow never) never\n\n (and allow disallow)\n (fn match? [in] (if ^boolean (allow in) (if ^boolean (disallow in) false true) false))\n\n allow (if (= allow always) always (fn match? [in] (if ^boolean (allow in) true false)))\n disallow (if (= disallow never) always (fn match? [in] (if ^boolean (disallow in) false true)))\n :else\n (truss/ex-info! \"[encore/name-filter] `allow-spec` and `disallow-spec` cannot both be nil\"\n {:allow-spec allow-spec :disallow-spec disallow-spec}))))))\n\n(comment\n (let [nf (name-filter #{\"foo.*\" \"bar\"})] (qb 1e6 (nf \"foo\"))) ; 85.18\n (let [nf (name-filter \"a(.*)\")] [(nf \"a\") (nf \"a.b\") (nf \"aX\")]))\n\n;;;; Printing\n;;\n;; `print-method` ----- (Clj) Affects `pr`, `print`\n;; `IPrintWithWriter` - (Cljs) Affects `pr`, `print`\n;; `print-dup` -------- (Clj) Affects `pr`\n;;\n;; `*print-readably*` - (Clj) Affects `print-method`, default true\n;; `*print-dup` ------- (Clj) Affects `print-method`, default false\n;;\n;; `print` - Human consumption (console or logs, etc.)\n;; `pr` ---- Mixed use, often for serialization (Cljs: default, Clj: with `*print-dup*`)\n;; `str` --- Mixed use, often delegates to `pr-str`\n\n(comment (for [x [\"s\" {:k \"s\"}], f [pr-str print-str str]] (f x))) ; (\"\\\"s\\\"\" \"s\" \"s\" \"{:k \\\"s\\\"}\" \"{:k s}\" \"{:k \\\"s\\\"}\")\n\n(def* ^:const newline \"Single system newline\" #?(:cljs \"\\n\" :clj (System/getProperty \"line.separator\")))\n(def* ^:const newlines \"Double system newline\" (str newline newline))\n\n#?(:clj\n (defmacro ^:no-doc with-default-print-opts\n \"Private, don't use.\"\n [form]\n `(if (and (nil? *print-level*) (nil? *print-length*) *print-readably*)\n ~form ; Optimization, don't pay for unnecessary binding\n (core/binding [*print-level* nil, *print-length* nil, *print-readably* true]\n ~form))))\n\n(defn ^:no-doc x->str\n \"Private, don't use.\"\n {:tag #?(:clj 'String :cljs 'string)}\n [allow-readably? allow-dup? add-newline? x]\n #?(:cljs\n (if allow-readably?\n (if add-newline? (prn-str x) (pr-str x))\n (if add-newline? (println-str x) (print-str x)))\n\n :clj\n (if allow-readably?\n (if (string? x)\n (str \"\\\"\" x \"\\\"\" (when add-newline? newline))\n (let [w (java.io.StringWriter.)]\n (if (and allow-dup? *print-dup*)\n (print-dup x w)\n (print-method x w))\n (when add-newline? (.write w newline))\n (.toString w)))\n\n (if (string? x)\n (if add-newline? (str x newline) x)\n (let [w (java.io.StringWriter.)]\n (core/binding [*print-readably* nil] (print-method x w))\n (when add-newline? (.write w newline))\n (.toString w))))))\n\n(defn ^:no-doc xs->str\n \"Private, don't use.\"\n {:tag #?(:clj 'String :cljs 'string)}\n [allow-readably? allow-dup? add-newline? xs]\n #?(:cljs\n (if allow-readably?\n (if add-newline? (apply prn-str xs) (apply pr-str xs))\n (if add-newline? (apply println-str xs) (apply print-str xs)))\n\n :clj\n (let [w (java.io.StringWriter.)\n started?_ (volatile! false)]\n\n (if allow-readably?\n (let [dup? (and allow-dup? *print-dup*)]\n (reduce\n (fn [_ x]\n (if (.deref started?_) (.write w \" \") (vreset! started?_ true))\n (if dup?\n (print-dup x w)\n (print-method x w)))\n nil xs))\n\n (core/binding [*print-readably* nil]\n (reduce\n (fn [_ x]\n (if (.deref started?_) (.write w \" \") (vreset! started?_ true))\n (print-method x w))\n nil xs)))\n\n (when add-newline? (.write w newline))\n (.toString w))))\n\n#?(:cljs\n (do\n (def* pr \"Identical to `core/pr`.\" cljs.core/pr)\n (def* prn \"Identical to `core/prn`.\" cljs.core/prn)\n (def* print \"Identical to `core/print`.\" cljs.core/print)\n (def* println \"Identical to `core/println`.\" cljs.core/println))\n\n :clj\n (do\n (defn pr\n \"Like `core/pr` but faster, and atomic (avoids interleaved content from different threads).\"\n [& args] (.write *out* (xs->str true true false args)))\n\n (defn prn\n \"Like `core/prn` but faster, and atomic (avoids interleaved content from different threads).\"\n [& args]\n (let [w *out*]\n (.write w (xs->str true true true args))\n (when *flush-on-newline* (.flush w))))\n\n (defn print\n \"Like `core/print` but faster, and atomic (avoids interleaved content from different threads).\"\n [& args] (.write *out* (xs->str false false false args)))\n\n (defn println\n \"Like `core/println` but faster, and atomic (avoids interleaved content from different threads).\"\n [& args]\n (let [w *out*]\n (.write w (xs->str false false true args))\n (when *flush-on-newline* (.flush w))))))\n\n(defn pr-edn\n \"Prints given arg to an edn string readable with `read-edn`.\"\n {:tag #?(:clj 'String :cljs 'string)}\n [x] (with-default-print-opts (x->str true false false x)))\n\n(defn ^:no-doc pr-edn*\n \"Private, don't use.\"\n {:tag #?(:clj 'String :cljs 'string)}\n [x] (x->str true false false x))\n\n(comment\n (let [x {:foo \"hello world\"}]\n (qb 1e5 ; [122.91 117.25 104.89 106.39]\n (clojure.core/pr-str x) (pr-edn x) (pr-edn* x) (str x)))\n\n (qb 1e6 ; [778.55 332.36]\n (with-out-str (clojure.core/println :a :b))\n (with-out-str (println :a :b))))\n\n(defn read-edn\n \"Reads given edn string to return a Clj/s value.\"\n {:arglists\n '([s] [{:keys [readers default] :as opts\n :or {readers #?(:clj clojure.core/*data-readers*\n :cljs @cljs.reader/*tag-table*)\n default #?(:clj clojure.core/*default-data-reader-fn*\n :cljs @cljs.reader/*default-data-reader-fn*)}}])}\n\n ([ s] (read-edn nil s))\n ([opts s]\n (cond\n ;; First normalize behaviour for unexpected inputs:\n (or (nil? s) (= s \"\")) nil\n (not (string? s))\n (truss/ex-info! \"[encore/read-edn] Unexpected arg type (expected string or nil)\"\n {:arg (typed-val s)})\n\n :else\n (let [readers (get opts :readers ::dynamic)\n readers\n (if-not (identical-kw? readers ::dynamic)\n readers\n #?(:clj clojure.core/*data-readers*\n :cljs @cljs.reader/*tag-table*))\n\n default (get opts :default ::dynamic)\n default\n (if-not (identical-kw? default ::dynamic)\n default\n #?(:clj clojure.core/*default-data-reader-fn*\n :cljs @cljs.reader/*default-data-reader-fn*))\n\n opts (assoc opts :readers readers :default default)]\n\n #?(:clj (clojure.tools.reader.edn/read-string opts s)\n :cljs (cljs.tools.reader.edn/read-string opts s))))))\n\n(comment\n (core/binding [*data-readers* {'my.tag/foo (fn [x] x)}]\n (read-edn \"#my.tag/foo \\\"text\\\"\")))\n\n#?(:clj\n (defmacro ^:no-doc def-print-impl\n \"Private, don't use. Clj/s: affects `pr`, `print`, etc.\"\n [[sym type] form]\n (if (:ns &env)\n `(extend-protocol ~'IPrintWithWriter ~type (~'-pr-writer [~sym ~'__w ~'_] (~'-write ~'__w ~form)))\n `(defmethod print-method ~type\n [~(with-meta sym {:tag type})\n ~(with-meta '__w {:tag 'java.io.Writer})]\n (.write ~'__w ~form)))))\n\n#?(:clj\n (defmacro ^:no-doc def-print-dup\n \"Private, don't use. Clj only: affects `pr`.\"\n [[sym type] form]\n `(defmethod print-dup ~type\n [~(with-meta sym {:tag type})\n ~(with-meta '__w {:tag 'java.io.Writer})]\n (.write ~'__w ~form))))\n\n#?(:clj (declare hex-ident-str))\n(defn ^:no-doc str-impl\n \"Private, don't use.\"\n ([x class-name ] (str class-name #?@(:clj [ \"@\" (hex-ident-str x)])))\n ([x class-name data] (str class-name \"[\" data #?@(:clj [\" 0x\" (hex-ident-str x)]) \"]\")))\n\n(comment ; Common pattern (encore.stats, telemere.impl, tempel.keys, tufte.impl, carmine.*, etc.)\n (toString [x] (str-impl x \"taoensso.Foo\")) ; \"taoensso.Foo@629c28a6\" - as (str (delay))\n (toString [x] (str-impl x \"taoensso.Foo\") {}) ; \"taoensso.Foo[{...} 0x629c28a6]\" - based on (pr-str (atom {}))\n (def-print-impl [x MyType] (str \"#\" x)) ; \"#taoensso.Foo[{...} 0x629c28a6]\" - as (pr-str (atom {}))\n )\n\n;;;; (S)RNG, etc.\n\n(defn uuid\n \"For Clj: returns a random `java.util.UUID`.\n For Cljs: returns a random UUID string.\n\n Uses strong randomness when possible.\n See also `uuid-str`, `nanoid`, `rand-id-fn`.\"\n {:inline #?(:default nil :clj (fn [] `(java.util.UUID/randomUUID)))}\n #?(:clj (^java.util.UUID [] (java.util.UUID/randomUUID))\n :cljs\n ([]\n (if-let [f (oget js-?crypto \"randomUUID\")]\n (.call f js-?crypto)\n (let [^string quad-hex\n (fn []\n (let [unpadded-hex ^string (.toString (rand-int 65536) 16)]\n (case (count unpadded-hex)\n 1 (str \"000\" unpadded-hex)\n 2 (str \"00\" unpadded-hex)\n 3 (str \"0\" unpadded-hex)\n (do unpadded-hex))))\n\n ver-trip-hex ^string (.toString (bit-or 0x4000 (bit-and 0x0fff (rand-int 65536))) 16)\n res-trip-hex ^string (.toString (bit-or 0x8000 (bit-and 0x3fff (rand-int 65536))) 16)]\n\n (str (quad-hex) (quad-hex) \"-\" (quad-hex) \"-\" ver-trip-hex \"-\" res-trip-hex \"-\"\n (quad-hex) (quad-hex) (quad-hex)))))))\n\n(defn uuid-str\n \"Returns a random UUID string of given length (max 36).\n Uses strong randomness when possible. See also `uuid`, `nanoid`, `rand-id-fn`.\"\n {:tag #?(:clj 'String :cljs 'string)}\n ;; 128 bits of entropy with default length (36)\n ([max-len] (or (substr (uuid-str) :by-len 0 max-len) \"\"))\n ([ ]\n #?(:clj (str (uuid))\n :cljs (uuid))))\n\n(comment (qb 1e6 (uuid-str 5)))\n\n#?(:clj\n (do\n (deftype ReseedingSRNG [^java.security.SecureRandom srng ^:volatile-mutable ^long call-count]\n clojure.lang.IFn\n (invoke [_]\n ;; Regularly supplement seed for extra security\n (if (< call-count 1024)\n (set! call-count (unchecked-inc call-count))\n (do\n (set! call-count 0)\n (.setSeed srng (.generateSeed srng 8))))\n srng))\n\n (comment (let [rsrng (reseeding-srng)] (qb 1e6 (secure-rng) (rsrng)))) ; [48.71 28.9]\n\n (defn ^:no-doc reseeding-srng\n \"Private, don't use. Returns a new stateful `ReseedingSRNG`.\"\n ^ReseedingSRNG []\n (compile-if (java.security.SecureRandom/getInstanceStrong) ; Java 8+, blocking\n (ReseedingSRNG. (java.security.SecureRandom/getInstanceStrong) 0)\n (ReseedingSRNG. (java.security.SecureRandom/getInstance \"SHA1SRNG\") 0)))\n\n (def ^:private rsrng* (thread-local-proxy (reseeding-srng)))\n\n (defn secure-rng\n \"Returns an auto-reseeding thread-local `java.security.SecureRandom`.\n Favours security over performance. May block while waiting on entropy!\"\n ^java.security.SecureRandom [] ((.get ^ThreadLocal rsrng*)))\n\n (defn secure-rng-mock!!!\n \"Returns **INSECURE** `java.security.SecureRandom` mock instance backed by\n a seeded deterministic `java.util.Random`. Useful for testing, etc.\"\n ^java.security.SecureRandom [long-seed]\n (let [long-seed (long long-seed)\n insecure-rng (java.util.Random. long-seed)]\n\n (proxy [java.security.SecureRandom] []\n (getAlgorithm [] (str \"INSECURE deterministic, seed=\" long-seed))\n (nextBytes [^bytes ba] (.nextBytes insecure-rng ba)))))))\n\n(defn rand-bytes\n \"Returns a random byte array of given size.\"\n #?(:clj ^bytes [secure? size] :cljs [prefer-secure? size])\n #?(:clj\n (let [ba (byte-array size)]\n (if secure?\n (.nextBytes (secure-rng) ba)\n (.nextBytes (java.util.concurrent.ThreadLocalRandom/current) ba))\n ba)\n\n :cljs\n (let [ba (js/Uint8Array. size)]\n (if-let [crypto (and prefer-secure? js-?crypto)]\n (.getRandomValues crypto ba)\n (dotimes [i size] (aset ba i (Math/floor (* 256 (js/Math.random))))))\n ba)))\n\n(comment (qb 1e6 (rand-bytes false 16) (rand-bytes true 16))) ; [59.66 196.49]\n\n(defn rand-id-fn\n \"Returns a (fn rand-id []) that returns random id strings.\n Options include:\n `:chars` - \u2208 #{<string> :nanoid :alphanumeric :no-look-alikes ...}\n `:len` - Length of id strings to generate\n `:rand-bytes-fn` - Optional (fn [size]) to return random byte array of given size\n\n See also `uuid-str`, `nano-id`.\"\n [{:keys [chars ^long len rand-bytes-fn]\n :or\n {chars :nanoid\n len 21\n rand-bytes-fn (partial rand-bytes true)}}]\n\n (let [chars\n (case chars\n :alphanumeric \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\" ; 62 chars\n :nanoid \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\" ; 64 chars\n :nanoid-readable \"346789ABCDEFGHJKLMNPQRTUVWXYabcdefghijkmnpqrtwxyz\" ; 49 chars, no look-alikes\n :numbers \"0123456789\" ; 10 chars\n :alpha-lowercase \"abcdefghijklmnopqrstuvwxyz\" ; 26 chars\n :alpha-uppercase \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" ; 26 chars\n :hex-lowercase \"0123456789abcdef\" ; 16 chars\n :hex-uppercase \"0123456789ABCDEF\" ; 16 chars\n (truss/have string? chars))\n\n nchars (count chars)\n max-char-idx (dec nchars)\n chars\n #?(:clj (.toCharArray (str chars))\n :cljs (object-array chars))\n\n ;; (bit-and <rand-byte> <mask>) uniformly maps <rand-byte> (256 vals) to\n ;; the valid subset of <rand-char-idx> (<256) *without* bias. Downside is that\n ;; invalid char-idxs need to be discarded, hence the stepping mechanism and\n ;; need for extra bytes when nchars\u2224256.\n mask ; Set all bits except the most significant, Ref. <https://bit.ly/3dtYv73>\n (bit-and -1\n (dec\n (bit-shift-left 2\n (int (Math/floor (/ (Math/log (dec nchars)) (Math/log 2)))))))\n\n ;; Calculate size of random byte arrays to fill\n exp-bytes (double (/ (* mask len) nchars))\n stepn (int (max 2 (Math/ceil (* 0.2 exp-bytes)))) ; Used iff step1 insufficient\n step1 ; Size of initial random byte array\n (int\n (if (zero? (int (mod 256 nchars)))\n len ; n|256 => no discarding (steps) needed\n (Math/ceil (* 1.2 exp-bytes))))]\n\n (fn rand-id []\n (let [sb (str-builder)]\n (loop [idx 0, max-idx (dec step1), ^bytes rand-bytes (rand-bytes-fn step1)]\n\n (let [possible-ch-idx (bit-and (aget rand-bytes idx) mask)]\n (when (<= possible-ch-idx max-char-idx)\n (.append sb (aget chars possible-ch-idx))))\n\n (cond\n (== (.length sb) len) (str sb)\n (== idx max-idx) (recur 0 (dec stepn) (rand-bytes-fn stepn))\n :else (recur (unchecked-inc idx) max-idx rand-bytes)))))))\n\n(comment\n (let [f0 nanoid\n f1 (rand-id-fn {:len 21, :chars :nanoid})\n f2 (rand-id-fn {:len 22, :chars :nanoid-readable})]\n (qb 1e6 (uuid-str) (f0) (f1) (f2))) ; [180.49 270.15 295.03 444.04]\n\n ;; Bits of entropy\n (/ (Math/log (Math/pow 16 32)) (Math/log 2)) ; uuid: 128\n (/ (Math/log (Math/pow 64 21)) (Math/log 2)) ; nanoid(21): 126\n (/ (Math/log (Math/pow 49 23)) (Math/log 2)) ; nanoid-readable(23): ~129\n )\n\n(let [chars\n (let [s \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\"]\n #?(:clj (.toCharArray s) :cljs (object-array s)))]\n\n (defn nanoid\n \"Returns a random \\\"Nano ID\\\" of given length, Ref. <https://github.com/ai/nanoid>.\n Faster, variable-length version of (rand-id-fn {:chars :nanoid}).\n 126 bits of entropy with default length (21).\n See also `uuid-str`, `rand-id-fn`.\"\n {:tag #?(:clj 'String :cljs 'string)}\n ([ ] (nanoid true 21))\n ([len] (nanoid true len))\n #?(:clj\n ([secure? len]\n (if secure?\n (com.taoensso.encore.Ids/genNanoId (.get com.taoensso.encore.Ids/SRNG_STRONG) len)\n (com.taoensso.encore.Ids/genNanoId len)))\n\n :cljs\n ([prefer-secure? len]\n (let [sb (str-builder)\n ba (rand-bytes prefer-secure? len)\n max-idx (dec len)]\n\n (loop [idx 0]\n ;; nchars|256 so (bit-and <rand-byte> 0x3f) yields uniform\n ;; distribution of chars without need for stepping\n (.append sb (aget chars (bit-and (aget ba idx) 0x3f)))\n (when (< idx max-idx) (recur (unchecked-inc idx))))\n\n (str sb))))))\n\n(comment (qb 1e6 (uuid-str) (nanoid) (nanoid false 21))) ; [203.98 205.53 83.87]\n\n;;;; Hex strings\n\n#?(:clj\n (defn hex-ident-str\n \"Returns hex string of given Object's `identityHashCode` (e.g. \\\"5eeb49f2\\\").\"\n ^String [obj] (Integer/toHexString (System/identityHashCode obj))))\n\n#?(:clj\n (do\n (let [hex-chars (mapv identity \"0123456789abcdef\")\n byte->char-pair\n (fn [^StringBuilder sb b]\n (let [v (bit-and ^byte b 0xFF)]\n (.append sb (hex-chars (bit-shift-right v 4)))\n (.append sb (hex-chars (bit-and v 0x0F)))))]\n\n (defn ba->hex-str\n \"Returns byte[] for given hex string.\"\n ^String [^bytes ba]\n (str (reduce (fn [sb b] (byte->char-pair sb b)) (StringBuilder.) ba))))\n\n (let [char-pair->byte\n (fn [[c1 c2]]\n (let [d1 (Character/digit ^char c1 16)\n d2 (Character/digit ^char c2 16)]\n (unchecked-byte (+ (bit-shift-left d1 4) d2))))]\n\n (defn hex-str->ba\n \"Returns hex string for given byte[].\"\n ^bytes [^String s]\n (if (even? (count s))\n (byte-array (into [] (comp (partition-all 2) (map char-pair->byte)) s))\n (truss/ex-info! \"[encore/hex-str->ba] Invalid hex string (length must be even)\"\n {:given (typed-val s)}))))\n\n ;; TODO Any way to auto select fastest implementation?\n ;; Ref. <https://stackoverflow.com/a/58118078/1982742>\n ;; Auto selection seems to cause problems with AOT and/or Graal\n\n #_\n (compile-if com.google.common.io.BaseEncoding\n (let [encoding (.lowerCase (com.google.common.io.BaseEncoding/base16))]\n (defn- ba->hex-str-guava ^String [^bytes ba] (.encode encoding ba))\n (defn- hex-str->ba-guava ^bytes [^String s] (.decode encoding s))))\n\n #_\n (compile-if org.apache.commons.codec.binary.Hex\n (defn- ba->hex-str-commons ^String [^bytes ba] (org.apache.commons.codec.binary.Hex/encodeHexString ba))\n (defn- hex-str->ba-commons ^bytes [^String s] (org.apache.commons.codec.binary.Hex/decodeHex s)))\n\n #_\n (compile-if java.util.HexFormat ; Fastest, needs Java 17+\n (let [hf (java.util.HexFormat/of)]\n (defn- ba->hex-str-hf ^String [^bytes ba] (.formatHex hf ba))\n (defn- hex-str->ba-hf ^bytes [^String s] (.parseHex hf s))))))\n\n(comment\n (vec (-hex-str->ba (-ba->hex-str (byte-array [1 2 3 4 5 6 120 -120 127]))))\n (let [ba (byte-array (range -128 128))]\n (qb 1e4 (hex-str->ba (ba->hex-str ba)))))\n\n;;;; LightAtom\n\n#?(:cljs\n (deftype LightAtom [^:mutable state]\n IDeref (-deref [_ ] state)\n IReset (-reset! [_ new] (set! state new) new)\n ISwap (-swap! [t swap-fn] (t swap-fn))\n IFn\n (-invoke [_ ] state)\n (-invoke [_ swap-fn] (let [new (swap-fn state)] (set! state new) new))\n (-invoke [_ k swap-fn]\n (let [old-map state\n new-val (swap-fn (get old-map k))\n new-map (assoc old-map k new-val)]\n (set! state new-map)\n (do new-val))))\n\n :clj\n (deftype LightAtom [^AtomicReference aref]\n clojure.lang.IDeref (deref [_] (.get aref))\n clojure.lang.IAtom\n (compareAndSet [_ old new] (.compareAndSet aref old new))\n (reset [_ new] (.set aref new) new)\n (swap [t swap-fn] (t swap-fn))\n\n clojure.lang.IAtom2\n (resetVals [t new] (.swapVals t (fn [_] new)))\n (swapVals [_ swap-fn]\n (let [old_ (clojure.lang.Volatile. nil)\n new (.updateAndGet aref (reify UnaryOperator (apply [_ old] (.reset old_ old) (swap-fn old))))]\n [(.deref old_) new]))\n\n clojure.lang.IFn\n (invoke [_ ] (.get aref))\n (invoke [_ swap-fn] (.updateAndGet aref (reify UnaryOperator (apply [_ old] (swap-fn old)))))\n (invoke [_ k swap-fn]\n (let [new-map\n (.updateAndGet aref\n (reify UnaryOperator\n (apply [_ old-map]\n (let [new-val (swap-fn (get old-map k))\n new-map (assoc old-map k new-val)]\n new-map))))]\n (get new-map k)))))\n\n(defn ^:no-doc ^LightAtom latom\n \"Private, don't use. Micro-optimized lightweight `atom`.\n Up to 30% faster than standard atoms, with the same atomicity guarantees.\"\n [init-state]\n (LightAtom.\n #?(:clj (AtomicReference. init-state)\n :cljs init-state)))\n\n(comment\n (let [a (atom 0), v (volatile! 0), l (latom 0)]\n {:deref (qb 2e6 @a @v (l))\n :new (qb 2e6 (atom 0) (volatile! 0) (latom 0))\n :swap (qb 2e6 (swap! a inc) (vswap! v inc) (l inc))\n :cas (qb 2e6 (compare-and-set! a 0 1) (-cas!? l 0 1))})\n\n {:deref [85.75 83.82 63.23], ; ~25% faster\n :new [115.45 83.92 94.42], ; ~20% faster\n :swap [144.15 110.94 99.53], ; ~30% faster\n :cas [102.42 67.85]} ; ~35% faster\n )\n\n#?(:clj\n (let [cache_ (latom {})]\n (defn ^:no-doc caching-satisfies?\n \"Private, don't use.\"\n [protocol x]\n (let [t (if (fn? x) ::fn (type x))]\n (or\n (get (cache_) t)\n (if-let [uncachable-type? (re-find #\"\\d\" (str t))]\n (do (clojure.core/satisfies? protocol x))\n (cache_ t (fn [_] (clojure.core/satisfies? protocol x)))))))))\n\n;;;; Swap API\n;; - reset-in! ; Keys: 0, 1, n (general)\n;; - reset-val! ; Keys: 1 (optimized)\n;;\n;; - reset-in!? ; Keys: 0, 1, n (general)\n;; - reset-val!? ; Keys: 1 (optimized)\n;; - reset!? ; Keys: 0 (optimized)\n;;\n;; - swap-in! ; Keys: 0, 1, n (general)\n;; - swap-val! ; Keys: 1 (optimized)\n;;\n;; - pull-val! ; Keys: 1 (optimized, common transform)\n\n#?(:clj\n (let [atom-tag (compile-if clojure.lang.IAtom 'clojure.lang.IAtom 'clojure.lang.Atom)]\n (defmacro ^:no-doc -cas!?\n \"Private, don't use. Micro-optimized `compare-and-set!`.\"\n [atom_ old-val new-val]\n (if (:ns &env)\n `(compare-and-set! ~atom_ ~old-val ~new-val)\n `(.compareAndSet ~(with-meta atom_ {:tag atom-tag}) ~old-val ~new-val)))))\n\n(comment (let [a (atom nil)] (qb 1e6 (compare-and-set! a 0 1) (-cas!? a 0 1)))) ; [50.06 35.64]\n\n(defn- -reset-k0!\n \"Impln. for 0-key resets\"\n [return atom_ m1]\n (loop []\n (let [m0 @atom_]\n (if (-cas!? atom_ m0 m1)\n (return m0 m0 m1 m1) ; [m0 v0 m1 v1]\n (recur)))))\n\n(defn- -reset-k1!\n \"Impln. for 1-key resets\"\n [return atom_ k not-found v1]\n (loop []\n (let [m0 @atom_\n m1 (assoc m0 k v1)]\n (if (-cas!? atom_ m0 m1)\n (return m0 (get m0 k not-found) m1 v1) ; [m0 v0/nx m1 v1]\n (recur)))))\n\n(defn- -reset-kn!\n \"Impln. for n-key resets\"\n [return atom_ ks not-found v1]\n (if-let [ks-seq (seq ks)]\n (if (next ks-seq)\n (loop []\n (let [m0 @atom_\n m1 (assoc-in m0 ks v1)]\n (if (-cas!? atom_ m0 m1)\n (return m0 (get-in m0 ks not-found) m1 v1) ; [m0 v0/nx m1 v1]\n (recur))))\n\n (-reset-k1! return atom_ (nth ks 0) not-found v1))\n (-reset-k0! return atom_ v1)))\n\n(let [return (fn [m0 v0 m1 v1] v0)]\n\n (defn reset-in! ; General case\n \"Like `reset!` but supports `update-in` semantics, returns <old-key-val>.\"\n ([atom_ val] (-reset-k0! return atom_ val))\n ([atom_ ks val] (-reset-kn! return atom_ ks nil val))\n ([atom_ ks not-found val] (-reset-kn! return atom_ ks not-found val)))\n\n (defn reset-val! ; Optimized k1 case\n \"Like `reset-in!` but optimized for single-key case. Returns <old-key-val>.\"\n ([atom_ k val] (-reset-k1! return atom_ k nil val))\n ([atom_ k not-found val] (-reset-k1! return atom_ k not-found val))))\n\n(let [sentinel (new-object)\n return (fn [m0 v0 m1 v1] (not= v0 v1))]\n\n (defn reset-in!? ; Keys: 0, 1, n (general)\n \"Like `reset-in!` but returns true iff the atom's value changed.\"\n ([atom_ val] (-reset-k0! return atom_ val))\n ([atom_ ks val] (-reset-kn! return atom_ ks sentinel val))\n ([atom_ ks not-found val] (-reset-kn! return atom_ ks not-found val)))\n\n (defn reset-val!? ; Keys: 1 (optimized)\n \"Like `reset-in!?` but optimized for single-key case.\n Returns true iff the atom's value changed.\"\n ([atom_ k new-val] (let [v0 (reset-val! atom_ k sentinel new-val)] (not= v0 new-val)))\n ([atom_ k not-found new-val] (let [v0 (reset-val! atom_ k not-found new-val)] (not= v0 new-val)))))\n\n(comment\n (reset-in!? (atom :a) :b)\n (reset-in!? (atom {:a :A}) [:b] :B))\n\n(defn reset!? ; Keys: 0 (optimized)\n \"Atomically swaps value of `atom_` to `val` and returns\n true iff the atom's value changed. See also `reset-in!?`.\"\n [atom_ val]\n (loop []\n (let [old @atom_]\n (if (= old val)\n false ; Micro-optimization\n (if (-cas!? atom_ old val)\n true\n (recur))))))\n\n(comment (let [a (atom nil)] [(reset!? a \"foo\") (reset!? a \"foo\") (reset!? a \"bar\")]))\n\n(do\n (deftype Swapped [newv returnv])\n (defn swapped\n \"For use within the swap functions of `swap-in!` and `swap-val!`.\n\n Allows 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\n Faster and much more flexible than `core/swap-vals!`, etc.\n Especially useful when combined with the `update-in` semantics of `swap-in!`, etc.\"\n #?(:clj {:inline (fn [new-val return-val] `(taoensso.encore.Swapped. ~new-val ~return-val))})\n ^Swapped [new-val return-val] (taoensso.encore.Swapped. new-val return-val))\n\n (defn ^:no-doc swapped-vec\n \"Private, don't use.\"\n [x]\n (if (instance? Swapped x)\n [(.-newv ^Swapped x) (.-returnv ^Swapped x)]\n [x x]))\n\n (defn swapped?\n \"Returns true iff given `Swapped` argument.\"\n #?(:cljs {:tag 'boolean}\n :clj {:inline (fn [x] `(instance? taoensso.encore.Swapped ~x))})\n [x] (instance? taoensso.encore.Swapped x))\n\n (comment (qb 1e6 (.-newv (swapped \"new\" \"return\"))))) ; 31.69\n\n(defn- return-swapped [^Swapped sw m0 m1]\n (let [rv (.-returnv sw)]\n (case rv\n :swap/changed? (not= m1 m0)\n :swap/new m1\n :swap/old m0\n rv)))\n\n(defn- -swap-k0!\n \"Impln. for 0-key swaps\"\n [return atom_ f]\n (loop []\n (let [m0 @atom_\n s1 (f m0)\n sw? (instance? Swapped s1)\n m1 (if sw? (.-newv ^Swapped s1) s1)]\n\n (if (identical-kw? m1 :swap/abort)\n (if sw?\n (return-swapped s1 m0 m1) ; rv\n (return m0 m0 m0 m0)) ; [m0 v0 m1 v1]\n\n (if (-cas!? atom_ m0 m1)\n (if sw?\n (return-swapped s1 m0 m1) ; rv\n (return m0 m0 m1 m1)) ; [m0 v0 m1 v1]\n (recur))))))\n\n(defn- -swap-k1!\n \"Impln. for 1-key swaps\"\n [return atom_ k not-found f]\n (if (identical-kw? f :swap/dissoc)\n (loop []\n (let [m0 @atom_\n m1 (dissoc m0 k)]\n (if (-cas!? atom_ m0 m1)\n (return m0 (get m0 k not-found) m1 :swap/dissoc) ; [m0 v0/nx m1 v1]\n (recur))))\n\n (loop []\n (let [m0 @atom_\n v0 (get m0 k not-found) ; nx\n s1 (f v0)\n sw? (instance? Swapped s1)\n v1 (if sw? (.-newv ^Swapped s1) s1)]\n\n (if (identical-kw? v1 :swap/abort)\n (if sw?\n (return-swapped s1 m0 m0) ; rv\n (return m0 v0 m0 v0)) ; [m0 v0/nx m1 v1]\n\n (let [m1\n (if (identical-kw? v1 :swap/dissoc)\n (dissoc m0 k)\n (assoc m0 k v1))]\n\n (if (-cas!? atom_ m0 m1)\n (if sw?\n (return-swapped s1 m0 m1) ; rv\n (return m0 v0 m1 v1)) ; [m0 v0/nx m1 v1]\n (recur))))))))\n\n(defn- -swap-kn!\n \"Impln. for n-key swaps\"\n [return atom_ ks not-found f]\n (if-let [ks-seq (seq ks)]\n (if (next ks-seq)\n\n (if (identical-kw? f :swap/dissoc)\n (loop []\n (let [m0 @atom_\n m1 (dissoc-in m0 ks)]\n (if (-cas!? atom_ m0 m1)\n (return m0 (get-in m0 ks not-found) m1 :swap/dissoc) ; [m0 v0/nx m1 v1]\n (recur))))\n\n (loop []\n (let [m0 @atom_\n v0 (get-in m0 ks not-found) ; nx\n s1 (f v0)\n sw? (instance? Swapped s1)\n v1 (if sw? (.-newv ^Swapped s1) s1)]\n\n (if (identical-kw? v1 :swap/abort)\n (if sw?\n (return-swapped s1 m0 m0) ; rv\n (return m0 v0 m0 v0)) ; [m0 v0/nx m1 v1]\n\n (let [m1\n (if (identical-kw? v1 :swap/dissoc)\n (dissoc-in m0 ks)\n (assoc-in m0 ks v1))]\n\n (if (-cas!? atom_ m0 m1)\n (if sw?\n (return-swapped s1 m0 m1) ; rv\n (return m0 v0 m1 v1)) ; [m0 v0/nx m1 v1]\n (recur)))))))\n\n (-swap-k1! return atom_ (nth ks 0) not-found f))\n (-swap-k0! return atom_ f)))\n\n(let [return (fn [m0 v0 m1 v1] v1)]\n (defn swap-in! ; Keys: 0, 1, n (general)\n \"Like `swap!` but supports `update-in` semantics and `swapped`.\n Returns <new-key-val> or <swapped-return-val>:\n (swap-in! (atom {:k1 {:k2 5}}) [:k1 :k2] inc) => 6\n (swap-in! (atom {:k1 {:k2 5}}) [:k1 :k2]\n (fn [old] (swapped (inc old) old))) => 5\"\n ([atom_ f] (-swap-k0! return atom_ f))\n ([atom_ ks f] (-swap-kn! return atom_ ks nil f))\n ([atom_ ks not-found f] (-swap-kn! return atom_ ks not-found f)))\n\n (defn swap-val! ; Keys: 1 (optimized)\n \"Like `swap-in!` but optimized for single-key case.\n Returns <new-key-val> or <swapped-return-val>:\n (swap-val! (atom {:k 5}) :k inc) => 6\n (swap-val! (atom {:k 5}) :k\n (fn [old] (swapped (inc old) old))) => 5\"\n ([atom_ k f] (-swap-k1! return atom_ k nil f))\n ([atom_ k not-found f] (-swap-k1! return atom_ k not-found f))))\n\n(defn pull-val! ; Keys: 1 (optimized, common transform)\n \"Removes and returns value mapped to key:\n (let [a (atom {:k :v})]\n [(pull-val! a :k) @a]) => [:v {}]\"\n ([atom_ k ] (pull-val! atom_ k nil))\n ([atom_ k not-found]\n (swap-val! atom_ k not-found\n (fn [v0] (swapped :swap/dissoc v0)))))\n\n(comment (pull-val! (atom {:a :A}) :b :nx))\n\n;;;; Memoization\n\n#?(:clj\n (defmacro ^:private deref! [delay]\n (if (list-form? delay)\n `(let [~(with-meta 'd {:tag 'clojure.lang.Delay}) ~delay] (.deref ~'d))\n (list '.deref (with-meta delay '{:tag clojure.lang.Delay})))))\n\n(comment (let [d (delay nil)] (qb 1e6 @d (deref! d)))) ; [42.05 23.15]\n(comment (+ ^long (or nil 1) 1)) ; Reflects\n\n(defn memoize-last\n \"Like `core/memoize` but only caches the given fn's latest input.\n Speeds repeated fn calls with the same arguments.\n Great for ReactJS render fn caching, etc.\"\n [f]\n (let [sentinel (new-object)\n call\n #?(:cljs\n (let [in_ (volatile! (new-object))\n out_ (volatile! nil)]\n (fn [in* f0]\n (loop []\n (if (= in* @in_)\n @out_\n (let [out (f0)]\n (vreset! in_ in*)\n (vreset! out_ out)\n out)))))\n\n :clj\n (let [cache_ (java.util.concurrent.atomic.AtomicReference. nil)] ; [in out_]\n (fn [in* f0]\n (deref!\n (loop []\n (let [current (.get cache_)]\n (or\n (when-let [[in out_] current] (when (= in in*) out_))\n (let [dv (delay (f0))] (if (.compareAndSet cache_ current [in* dv]) dv (recur))))))))))]\n\n (fn memoized-fn\n ([ ] (call sentinel (fn [] (f))))\n ([x ] (call x (fn [] (f x))))\n ([x y ] (call [sentinel x y ] (fn [] (f x y))))\n ([x y z ] (call [sentinel x y z ] (fn [] (f x y z))))\n ([x y z & more] (call [sentinel x y z more] (fn [] (apply f x y z more)))))))\n\n(comment (let [f1 (memoize-last (fn [& args] (println [:last args])))] (qb 1e6 (f1 :x)))) ; 36.23\n\n(defn fmemoize\n \"For Clj: fastest possible memoize. Non-racey, 0-7 arity only.\n For Cljs: same as `core/memoize`.\"\n [f]\n #?(:cljs (cljs.core/memoize f)\n :clj\n ;; Non-racey just as fast as racey, and protects against nils in maps\n (let [sentinel (new-object)\n cache0_ (java.util.concurrent.atomic.AtomicReference. nil)\n cache1_ (java.util.concurrent.ConcurrentHashMap.)\n cachen_ (java.util.concurrent.ConcurrentHashMap.)]\n\n (fn\n ([ ] (deref! (or (.get cache0_) (let [dv (delay (f))] (if (.compareAndSet cache0_ nil dv) dv (.get cache0_))))))\n ([x]\n (let [x* (if (identical? x nil) sentinel x)]\n (deref!\n (or\n (.get cache1_ x*)\n (let [dv (delay (f x))]\n (or (.putIfAbsent cache1_ x* dv) dv))))))\n\n ([x1 x2 ] (let [xs [x1 x2] ] (deref! (or (.get cachen_ xs) (let [dv (delay (f x1 x2)) ] (or (.putIfAbsent cachen_ xs dv) dv))))))\n ([x1 x2 x3 ] (let [xs [x1 x2 x3] ] (deref! (or (.get cachen_ xs) (let [dv (delay (f x1 x2 x3)) ] (or (.putIfAbsent cachen_ xs dv) dv))))))\n ([x1 x2 x3 x4 ] (let [xs [x1 x2 x3 x4] ] (deref! (or (.get cachen_ xs) (let [dv (delay (f x1 x2 x3 x4)) ] (or (.putIfAbsent cachen_ xs dv) dv))))))\n ([x1 x2 x3 x4 x5 ] (let [xs [x1 x2 x3 x4 x5] ] (deref! (or (.get cachen_ xs) (let [dv (delay (f x1 x2 x3 x4 x5)) ] (or (.putIfAbsent cachen_ xs dv) dv))))))\n ([x1 x2 x3 x4 x5 x6 ] (let [xs [x1 x2 x3 x4 x5 x6] ] (deref! (or (.get cachen_ xs) (let [dv (delay (f x1 x2 x3 x4 x5 x6)) ] (or (.putIfAbsent cachen_ xs dv) dv))))))\n ([x1 x2 x3 x4 x5 x6 x7] (let [xs [x1 x2 x3 x4 x5 x6 x7]] (deref! (or (.get cachen_ xs) (let [dv (delay (f x1 x2 x3 x4 x5 x6 x7))] (or (.putIfAbsent cachen_ xs dv) dv))))))))))\n\n(comment\n (let [f0 (fmemoize (fn []))\n f1 (fmemoize (fn [x1]))\n f2 (fmemoize (fn [x1 x2]))]\n\n (qb 1e6 ; [23.19 30.11 48.09]\n (f0) (f1 :x1) (f2 :x1 :x2))))\n\n(defn- gc-now? [rate]\n #?(:clj (<= (java.lang.Math/random) ^double rate)\n :cljs (<= (.random js/Math) rate)))\n\n(comment (qb 1e6 (gc-now? 0.5)))\n\n(deftype SimpleCacheEntry [delay ^long udt])\n(deftype TickedCacheEntry [delay ^long udt ^long tick-lru ^long tick-lfu])\n\n(declare top)\n\n(defn cache\n \"Returns a cached version of given referentially transparent function `f`.\n\n Like `core/memoize` but:\n - Often faster, depending on options.\n - Prevents race conditions on writes.\n - Supports cache invalidation by prepending args with:\n - `:cache/del` ; Delete cached item for subsequent args, returns nil.\n - `:cache/fresh` ; Renew cached item for subsequent args, returns new val.\n\n - Supports options:\n - `ttl-ms` ; Expire cached items after <this> many msecs.\n - `size` ; Restrict cache size to <this> many items at the next garbage\n ; collection (GC).\n\n - `gc-every` ; Run garbage collection (GC) approximately once every\n ; <this> many calls to cached fn. If unspecified, GC rate\n ; will be determined automatically based on `size`.\n\n See also `defn-cached`, `fmemoize`, `memoize-last`.\"\n\n ([f] ; De-raced, commands\n #?(:cljs\n (let [cache_ (volatile! {})\n get-sentinel (js-obj)]\n\n (fn cached [& xs]\n (let [x1 (first xs)]\n (case x1\n\n (:cache/del :mem/del)\n (let [xn (next xs)\n x2 (first xn)]\n (if (identical-kw? x2 :mem/all)\n (vreset! cache_ {})\n (vswap! cache_ dissoc xn))\n nil)\n\n (:cache/fresh :mem/fresh)\n (let [xn (next xs)\n v (apply f xn)]\n (vswap! cache_ assoc xn v) v)\n\n (let [v (get @cache_ xs get-sentinel)]\n (if (identical? v get-sentinel)\n (let [v (apply f xs)] (vswap! cache_ assoc xs v) v)\n v))))))\n\n :clj\n (let [nil-sentinel (Object.)\n cache_ (java.util.concurrent.ConcurrentHashMap.)]\n\n (fn\n ([ ] @(or (.get cache_ nil-sentinel)\n (let [dv (delay (f))]\n (or (.putIfAbsent cache_ nil-sentinel dv) dv))))\n\n ([& xs]\n (let [x1 (first xs)]\n (case x1\n\n (:cache/del :mem/del)\n (let [xn (next xs)\n x2 (first xn)]\n (if (identical-kw? x2 :mem/all)\n (.clear cache_)\n (.remove cache_ (or xn nil-sentinel)))\n nil)\n\n (:cache/fresh :mem/fresh)\n @(let [xn (next xs)\n dv (delay (apply f xn))]\n (.put cache_ (or xn nil-sentinel) dv) dv)\n\n @(or (.get cache_ xs)\n (let [dv (delay (apply f xs))]\n (or (.putIfAbsent cache_ xs dv) dv))))))))))\n\n ([{:keys [size ttl-ms gc-every] :as opts} f]\n\n (truss/have? [:ks<= #{:size :ttl-ms :gc-every}] opts)\n (truss/have? [:or nil? pos-num?] size ttl-ms gc-every)\n\n (cond\n size ; De-raced, commands, ttl, gc, max-size\n (let [gc-now? gc-now?\n ticker (counter)\n cache_ (latom nil) ; {<args> <TickedCacheEntry>}\n latch_ (latom nil) ; Used to pause writes during gc\n ttl-ms (long (or ttl-ms 0))\n ttl? (not (zero? ttl-ms))\n size (long size)\n gc-every (long (or gc-every (clamp-int 1000 16000 size)))]\n\n (fn cached [& args]\n (let [a1 (first args)]\n (case a1\n (:cache/del :mem/del)\n (let [argn (next args)\n a2 (first argn)]\n (if (case a2 (:cache/all :mem/all) true false)\n (reset! cache_ nil)\n (cache_ #(dissoc % argn)))\n nil)\n\n (let [^long tick (ticker) ; Always inc, even on reads\n instant (if ttl? (now-udt) 0)]\n\n (when (and\n ;; We anyway have a tick, so may as well be exact\n ;; (gc-now? gc-rate)\n (== (rem tick gc-every) 0)\n (>= (count (cache_)) (* 1.1 size)))\n\n (let [latch #?(:clj (CountDownLatch. 1) :default nil)\n udt-floor (- instant ttl-ms)]\n\n (when (-cas!? latch_ nil latch)\n ;; First prune ttl-expired stuff\n (when ttl?\n (cache_\n (fn swap-fn [m]\n (persistent!\n (reduce-kv\n (fn [acc k ^TickedCacheEntry e]\n (if (< (.-udt e) udt-floor)\n (dissoc! acc k)\n acc))\n (transient (or m {}))\n m)))))\n\n ;; Then prune by ascending (worst) tick-sum:\n (let [snapshot (cache_)\n n-to-gc (- (count snapshot) size)]\n\n (when (>= n-to-gc (* 0.1 size))\n (let [ks-to-gc\n (top n-to-gc\n (fn [k]\n (let [e ^TickedCacheEntry (get snapshot k)]\n (+ (.-tick-lru e) (.-tick-lfu e))))\n (keys snapshot))]\n\n (cache_\n (fn swap-fn [m]\n (persistent!\n (reduce (fn [acc in] (dissoc! acc in))\n (transient (or m {})) ks-to-gc)))))))\n\n #?(:clj\n (do\n (reset! latch_ nil)\n (.countDown latch)))\n\n nil)))\n\n (let [fresh? (case a1 (:cache/fresh :mem/fresh) true false)\n args (if fresh? (next args) args)\n\n _ #?(:clj (when-let [l (latch_)] (.await ^CountDownLatch l)) :default nil)\n ^TickedCacheEntry e\n (cache_ args\n (fn swap-fn [?e]\n (if (or (nil? ?e) fresh?\n (> (- instant (.-udt ^TickedCacheEntry ?e)) ttl-ms))\n (TickedCacheEntry. (delay (apply f args)) instant tick 1)\n (let [e ^TickedCacheEntry ?e]\n (TickedCacheEntry. (.-delay e) (.-udt e)\n tick (inc (.-tick-lfu e)))))))]\n\n @(.-delay e)))))))\n\n ttl-ms ; De-raced, commands, ttl, gc\n (let [gc-now? gc-now?\n cache_ (latom nil) ; {<args> <SimpleCacheEntry>}\n latch_ (latom nil) ; Used to pause writes during gc\n ttl-ms (long ttl-ms)\n gc-rate\n (let [gce (or gc-every 8e3)]\n (/ 1.0 (long gce)))]\n\n (fn cached [& args]\n (let [a1 (first args)]\n (case a1\n (:cache/del :mem/del)\n (let [argn (next args)\n a2 (first argn)]\n (if (case a2 (:cache/all :mem/all) true false)\n (reset! cache_ nil)\n (cache_ #(dissoc % argn)))\n nil)\n\n (let [instant (now-udt)]\n\n (when (gc-now? gc-rate)\n (let [latch #?(:clj (CountDownLatch. 1) :default nil)]\n (when (-cas!? latch_ nil latch)\n (cache_\n (fn swap-fn [m]\n (persistent!\n (reduce-kv\n (fn [acc k ^SimpleCacheEntry e]\n (if (> (- instant (.-udt e)) ttl-ms)\n (dissoc! acc k)\n acc))\n (transient (or m {}))\n m))))\n\n #?(:clj\n (do\n (reset! latch_ nil)\n (.countDown latch)))\n\n nil)))\n\n (let [fresh? (case a1 (:cache/fresh :mem/fresh) true false)\n args (if fresh? (next args) args)\n _ #?(:clj (when-let [l (latch_)] (.await ^CountDownLatch l)) :default nil)\n ^SimpleCacheEntry e\n (cache_ args\n (fn swap-fn [?e]\n (if (or (nil? ?e) fresh?\n (> (- instant (.-udt ^SimpleCacheEntry ?e)) ttl-ms))\n (SimpleCacheEntry. (delay (apply f args)) instant)\n ?e)))]\n @(.-delay e)))))))\n\n :else (cache f))))\n\n(defn memoize\n \"Alternative way to call `cache`, provided mostly for back compatibility.\n See `cache` docstring for details.\"\n ;; {:deprecated \"Encore v3.36.0 (2022-11-18)\"}\n ([ f] (cache f))\n ([ ttl-ms f] (cache { :ttl-ms ttl-ms} f))\n ([size ttl-ms f] (cache {:size size :ttl-ms ttl-ms} f)))\n\n(comment\n (do\n (def f0 (fn [& args] (Thread/sleep 600) (rand)))\n (def f1 (clojure.core/memoize f0))\n (def f2 (memoize f0))\n (def f3 (memoize 5000 f0))\n (def f4 (memoize 2 nil f0))\n (def f5 (memoize 2 5000 f0))\n (def f6 (fmemoize f0)))\n\n (qb 1e5 (f1) (f2) (f3) (f4) (f5) (f6)) ; [ 5.4 3.95 16.56 13.98 18.01 3.97]\n (qb 1e5 (f1 :x) (f2 :x) (f3 :x) (f4 :x) (f5 :x) (f6 :x)) ; [14.71 8.96 31.27 37.37 45.42 6.76]\n\n (let [f1 (clojure.core/memoize (fn [] (Thread/sleep 5) (print \"f1\\n\")))\n f2 (memoize (fn [] (Thread/sleep 5) (print \"f2\\n\")))]\n (println \"---\")\n (dotimes [_ 10]\n (future (f2)) ; Never prints >once\n (future (f1))))\n\n (do ; Test GC (monitor JVM memory)\n (defn f1 [_] (vec (repeatedly 1000 #(str (rand)))))\n (def m1 (memoize 500 (ms :days 3) f1))\n (dotimes [n 1e5] (m1 (rand)))))\n\n#?(:clj\n (defmacro defn-cached\n \"Defines a cached function.\n Like (def <sym> (cache <cache-opts> <body...>)), but preserves\n :arglists (arity) metadata as with `defn`:\n\n (defn-cached ^:private my-fn {:ttl-ms 500}\n \\\"Does something interesting, caches resultes for 500 msecs\\\"\n [n]\n (rand-int n))\"\n\n [sym cache-opts & body]\n (let [arglists ; e.g. '([x] [x y])\n (let [[_ sigs] (name-with-attrs sym body)]\n (if (vector? (first sigs))\n (list (first sigs))\n (map first sigs)))\n\n [sym body]\n (name-with-attrs sym body\n {:arglists `'~arglists})]\n\n (truss/have? map? cache-opts)\n (truss/have? [:ks<= #{:ttl-ms :size :gc-every}] cache-opts)\n\n `(def ~sym (cache ~cache-opts (fn ~@body))))))\n\n;;;; Rate limits\n\n(defn ^:no-doc rate-limiter-once-per\n \"Private, don't use.\n Returns a basic rate limiter (fn []) that will return falsey (allow) at most once\n every given number of milliseconds.\n\n Similar to (rate-limiter [1 <msecs>]) but significantly faster to construct and run.\n Doesn't support request ids!\"\n [msecs]\n (let [last_ (volatile! 0) ; No specific atomicity needs\n msecs (long msecs)]\n\n (fn a-rate-limiter-once-per\n ([req-id] (truss/ex-info! \"[encore/rate-limiter] Basic rate limiters don't support request ids\" {}))\n ([ ]\n (let [t1 (now-udt*)]\n #?(:clj (if (> (- t1 ^long (.deref last_)) msecs) (do (.reset last_ t1) nil) true)\n :cljs (if (> (- t1 @last_) msecs) (do (vreset! last_ t1) nil) true)))))))\n\n(deftype LimitSpec [^long n ^long ms])\n(deftype LimitEntry [^long n ^long udt0])\n(deftype LimitHits [m worst-lid ^long worst-ms])\n\n(let [limit-spec (fn [n ms] (truss/have? pos-int? n ms) (LimitSpec. n ms))]\n (defn- coerce-limit-spec [x]\n (cond\n (map? x) (reduce-kv (fn [acc lid [n ms]] (assoc acc lid (limit-spec n ms))) {} x)\n (vector? x)\n (reduce\n (fn [acc [n ms ?lid]] ; ?lid for back compatibility\n (assoc acc\n (or ?lid [n ms])\n (limit-spec n ms)))\n {} x)\n\n (truss/unexpected-arg! x\n {:context `rate-limiter\n :param 'rate-limiter-spec\n :expected '#{map vector}}))))\n\n(comment (qb 1e6 (coerce-limit-spec [[10 1000] [20 2000]]))) ; 229.91\n\n(defn rate-limiter\n \"Takes a spec of form\n [ [<n-max-reqs> <msecs-window>] ...] or ; Unnamed limits\n {<limit-id> [<n-max-reqs> <msecs-window>]} ; Named limits\n and returns stateful (fn a-rate-limiter [] [req-id] [command req-id]).\n\n Call the returned limiter fn with a request id (any Clojure value!) to\n enforce limits independently for each id.\n\n For example, (limiter-fn <ip-address-string>) will return:\n - Falsey when allowed (all limits pass for given IP), or\n - Truthy when disallowed (any limits fail for given IP):\n [<worst-limit-id> <worst-backoff-msecs> {<limit-id> <backoff-msecs>}]\n\n Or call the returned limiter fn with an extra command argument:\n (limiter-fn :rl/peek <req-id) - Check limits WITHOUT incrementing count\n (limiter-fn :rl/reset <req-id) - Reset all limits for given req-id\"\n\n ([ spec] (rate-limiter nil spec))\n ([opts spec]\n (cond\n :let [{:keys [with-state?]} opts] ; Undocumented, mostly for tests\n\n (empty? spec)\n (if with-state?\n [nil (constantly nil)]\n (do (constantly nil)))\n\n :let [spec (coerce-limit-spec spec)] ; {<lid> <LimitSpec>}\n\n :if-let ; Basic limiter\n [once-per-msecs\n (and\n (get opts :allow-basic?) ; Undocumented\n (= (count spec) 1)\n (let [^LimitSpec s (val (first spec))]\n (when (== (.-n s) 1) (.-ms s))))]\n\n (if with-state?\n [nil (rate-limiter-once-per once-per-msecs)]\n (do (rate-limiter-once-per once-per-msecs)))\n\n :let\n [latch_ (latom nil) ; Used to pause writes during gc\n reqs_ (latom nil) ; {<rid> {<lid> <LimitEntry>}}\n\n {:keys [gc-every] :or {gc-every 1.6e4}} opts ; Undocumented\n\n gc-now? gc-now?\n gc-rate (let [gce (long gc-every)] (/ 1.0 gce))\n\n f1\n (fn [rid ^long delta peek?]\n (let [instant (now-udt)]\n (when (and (not peek?) (gc-now? gc-rate))\n (let [latch #?(:clj (CountDownLatch. 1) :default nil)]\n (when (-cas!? latch_ nil latch)\n (reqs_\n (fn swap-fn [reqs] ; {<rid> <entries>}\n (persistent!\n (reduce-kv\n (fn [acc rid entries]\n (let [new-entries\n (reduce-kv\n (fn [acc lid ^LimitEntry e]\n (if-let [^LimitSpec s (get spec lid)]\n (if (>= instant (+ (.-udt0 e) (.-ms s)))\n (dissoc acc lid)\n (do acc))\n (dissoc acc lid)))\n entries ; {<lid <LimitEntry>}\n entries)]\n (if (empty? new-entries)\n (dissoc! acc rid)\n (assoc! acc rid new-entries))))\n (transient (or reqs {}))\n (do reqs)))))\n\n #?(:clj\n (do\n (reset! latch_ nil)\n (.countDown latch)))\n nil)))\n\n ;; Need to atomically check if all limits pass before\n ;; committing to any n increments:\n (loop []\n (let [reqs (reqs_) ; {<lid> <entries>}\n entries (get reqs rid) ; {<lid> <LimitEntry>}\n ?hits ; ?LimitHits\n (when entries\n (reduce-kv\n (fn [^LimitHits acc lid ^LimitEntry e]\n (if-let [^LimitSpec s (get spec lid)]\n (if (<= (+ (.-n e) delta) (.-n s))\n acc\n (let [tdelta (- (+ (.-udt0 e) (.-ms s)) instant)]\n (if (<= tdelta 0)\n acc\n (cond\n (nil? acc) (LimitHits. {lid tdelta} lid tdelta)\n\n (> tdelta (.-worst-ms acc))\n (LimitHits. (assoc (.-m acc) lid tdelta) lid tdelta)\n\n :else\n (LimitHits. (assoc (.-m acc) lid tdelta)\n (.-worst-lid acc)\n (.-worst-ms acc))))))\n acc))\n nil\n entries))]\n\n (if (or peek? ?hits)\n ;; No action (peeking, or hit >= 1 spec)\n (when-let [^LimitHits h ?hits]\n [(.-worst-lid h) (.-worst-ms h) (.-m h)])\n\n ;; Passed all limits, ready to commit increments:\n (if-let [l (latch_)]\n #?(:clj (do (.await ^CountDownLatch l) (recur)) :default nil)\n (let [new-entries\n (reduce-kv\n (fn [acc lid ^LimitSpec s]\n (assoc acc lid\n (if-let [^LimitEntry e (get entries lid)]\n (let [udt0 (.-udt0 e)]\n (if (>= instant (+ udt0 (.-ms s)))\n (LimitEntry. delta instant)\n (LimitEntry. (+ delta (.-n e)) udt0)))\n (do (LimitEntry. delta instant)))))\n entries\n spec)]\n\n (if (-cas!? reqs_ reqs (assoc reqs rid new-entries))\n nil\n (recur)))))))))\n\n limiter-fn\n (fn a-rate-limiter\n ([ ] (f1 nil +1 false))\n ([ req-id] (f1 req-id +1 false))\n ([cmd req-id]\n (case cmd\n (:rl/reset :limiter/reset)\n (do\n (if (case req-id (:rl/all :limiter/all) true false)\n (reset! reqs_ nil)\n (reqs_ #(dissoc % req-id)))\n nil)\n\n (:rl/peek :limiter/peek) (f1 req-id +1 true)\n\n (if (number? cmd) ; Undocumented arb delta\n (f1 req-id (long cmd) false)\n (truss/unexpected-arg! cmd\n {:context `rate-limiter\n :param 'rate-limiter-command\n :expected #{:rl/reset :rl/peek}\n :req-id req-id})))))]\n\n :always\n (if with-state?\n [reqs_ limiter-fn]\n (do limiter-fn)))))\n\n(comment\n (let [[s_ rl1] (rate-limiter {:with-state? true} {:2s [1 2000] :5s [2 5000]})]\n (def s_ s_)\n (def rl1 rl1))\n\n (qb 1e6 (rl1)) ; 99.78\n (do (dotimes [n 2e6] (rl1 (str (rand)))) (count @s_)) ; Test GC\n\n (let [rl1 (rate-limiter-once-per 250)\n rl2 (rate-limiter {:allow-basic? true} {\"1/250\" [1 250]})\n rl3 (rate-limiter {} {\"1/250\" [1 250]})]\n\n (qb 1e6 ; [33.15 33.15 80.02]\n (rl1) (rl2) (rl3))))\n\n;;;; Counters\n\n#?(:clj\n (deftype Counter [^java.util.concurrent.atomic.AtomicLong n_]\n clojure.lang.IDeref (deref [_] (.get n_))\n clojure.lang.IFn\n (invoke [_ ] (.getAndIncrement n_))\n (invoke [_ add] (.getAndAdd n_ (long add)))\n (invoke [_ action n]\n (let [n (long n)]\n (case action\n (:add) (do (.addAndGet n_ n) nil)\n (:set) (do (.set n_ n) nil)\n (:set= :set-get) (do (.set n_ n) n)\n (:=set :get-set) (do (.getAndSet n_ n))\n (:=+ :get-add) (do (.getAndAdd n_ n))\n (:+= :add-get) (do (.addAndGet n_ n))))))\n\n :cljs\n (deftype Counter [^:mutable c]\n IDeref (-deref [_] c)\n IFn\n (-invoke [_ ] (let [o c] (set! c (inc c)) o))\n (-invoke [_ add] (let [o c] (set! c (+ c add)) o))\n (-invoke [_ action n]\n (case action\n (:add) (do (set! c (+ c n)) nil)\n (:set) (do (set! c n) nil)\n (:set= :set-get) (do (set! c n) n)\n (:=set :get-set) (let [o c] (set! c n) o)\n (:=+ :get-add) (let [o c] (set! c (+ c n)) o)\n (:+= :add-get) (do (set! c (+ c n)) c)))))\n\n(defn counter\n \"Returns a fast atomic `Counter` with `init` initial integer value with:\n - @counter => Return current val\n - (counter) => Add 1 and return old val\n - (counter n) => Add n and return old val\n - (counter action n) => Experimental, action \u2208\n {:add :set :set-get :get-set :get-add :add-get}.\"\n ([ ] (counter 0))\n ([init]\n #?(:clj (Counter. (java.util.concurrent.atomic.AtomicLong. (long init)))\n :cljs (Counter. (long init)))))\n\n(comment (let [c (counter)] (dotimes [_ 100] (c 2)) (c)))\n\n(defn- rc-deref [^long msecs ts_ n-skip_ gc-fn]\n (let [t1 (now-udt)\n ^long n-skip0 (n-skip_)\n ts (ts_)\n n-total (count ts)\n ^long n-window\n (reduce\n (fn [^long n ^long t0]\n (if (<= (- t1 t0) msecs)\n (inc n)\n (do n)))\n 0\n (core/subvec ts n-skip0))\n\n n-skip1 (- n-total n-window)]\n\n ;; (println {:n-total n-total :n-window n-window :n-skip0 n-skip0 :n-skip1 n-skip1})\n (when (< n-skip0 n-skip1)\n (if (-cas!? n-skip_ n-skip0 n-skip1)\n (when (> n-skip1 10000) ; Time to gc, amortised cost\n (gc-fn n-skip1))))\n\n n-window))\n\n#?(:clj\n (deftype RollingCounter [^long msecs ts_ n-skip_ p_]\n clojure.lang.IFn\n (invoke [this]\n (when-let [p (p_)] @p) ; Block iff latched\n (let [t1 (now-udt)] (ts_ #(conj % t1)))\n this ; Return to allow optional deref\n )\n\n clojure.lang.IDeref\n (deref [_]\n (when-let [p (p_)] @p) ; Block iff latched\n (rc-deref msecs ts_ n-skip_\n (fn gc [n-skip1]\n (let [p (promise)]\n (if (-cas!? p_ nil p) ; Latch\n (do\n (ts_ #(core/subvec % n-skip1))\n (reset! n-skip_ 0)\n (reset! p_ nil)\n (deliver p nil))))))))\n\n :cljs\n (deftype RollingCounter [^long msecs ts_ n-skip_]\n IFn\n (-invoke [this]\n (let [t1 (now-udt)] (ts_ #(conj % t1)))\n this ; Return to allow optional deref\n )\n\n IDeref\n (-deref [_]\n (rc-deref msecs ts_ n-skip_\n (fn gc [n-skip1]\n (ts_ #(core/subvec % n-skip1))\n (reset! n-skip_ 0))))))\n\n(defn rolling-counter\n \"Experimental, subject to change without notice.\n Returns 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.\"\n [msecs]\n (RollingCounter.\n (long (truss/have pos-int? msecs))\n (latom [])\n (latom 0)\n #?(:clj (latom nil))))\n\n(comment\n (def myrc (rolling-counter 4000))\n (dotimes [_ 100000] (myrc))\n @myrc)\n\n;;;; Rolling sequentials\n\n(defn rolling-vector\n \"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\n Useful for maintaining limited-length histories, etc.\n See also `rolling-list` (Clj only).\"\n ([nmax ] (rolling-vector nmax nil))\n ([nmax {:keys [gc-every init-val]\n :or {gc-every 16e3}}]\n\n (let [nmax (long nmax)\n acc_ (latom (vec init-val))\n gc-every (when gc-every (long gc-every))\n ticker (when gc-every (counter))\n latch_ (when gc-every (latom nil))]\n\n (fn rolling-vec-fn\n ([ ] (acc_))\n ([x]\n (when gc-every\n #?(:clj (when-let [l (latch_)] (.await ^CountDownLatch l)))\n\n (let [^long tick (ticker)]\n (when-let [gc-now? (== (rem tick ^long gc-every) 0)]\n #?(:cljs (acc_ (fn swap-fn [sv] (into [] sv)))\n :clj\n (let [latch (CountDownLatch. 1)]\n (when (-cas!? latch_ nil latch)\n (acc_ (fn swap-fn [sv] (into [] sv)))\n (reset! latch_ nil)\n (.countDown latch)))))))\n\n (acc_\n (fn swap-fn [acc]\n (let [new (conj acc x)]\n (if (> (count new) nmax)\n (core/subvec new 1)\n (do new))))))))))\n\n(comment (let [rv (rolling-vector 3), c (counter)] [(qb 1e6 (rv (c))) (rv)])) ; 189.66\n\n#?(:clj\n (defn rolling-list\n \"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\n Useful for maintaining limited-length histories, etc.\n See also `rolling-vector`.\"\n ([nmax ] (rolling-list nmax nil))\n ([nmax {:keys [init-val]}]\n (let [nmax (long nmax)\n ^java.util.LinkedList ll\n (if init-val\n (java.util.LinkedList. init-val)\n (java.util.LinkedList.))]\n\n (fn rolling-list-fn\n ([ ] (.toArray ll))\n ([x]\n (do (.addLast ll x))\n (when (> (.size ll) nmax) (.removeFirst ll))\n nil))))))\n\n(comment (let [rl (rolling-list 3), c (counter)] [(qb 1e6 (rl (c))) (vec (rl))])) ; 98.36\n\n;;;; Sorting\n\n#?(:cljs (defn rcompare \"Reverse comparator.\" [x y] (compare y x))\n :clj (defn rcompare \"Reverse comparator.\"\n {:inline (fn [x y] `(. clojure.lang.Util compare ~y ~x))}\n [x y] (compare y x)))\n\n(defn sortv\n \"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`.\"\n ;; A little faster than `(vec (sort ...))` when `coll` very large\n ([ coll] (sortv nil :asc coll))\n ([ comparator coll] (sortv nil comparator coll))\n ([?keyfn comparator coll]\n (if-not (seq coll)\n []\n (let [comparator\n (case comparator\n :asc compare\n (:dsc :desc) (fn [x y] (compare y x))\n comparator)\n\n comparator\n (if-let [kfn (when (not= ?keyfn identity) ?keyfn)]\n (fn [x y] (comparator (kfn x) (kfn y)))\n comparator)\n\n a (to-array coll)]\n\n #?(:clj (java.util.Arrays/sort a ^java.util.Comparator comparator)\n :cljs (garray/stableSort a (fn->comparator comparator)))\n\n (with-meta (vec a) (meta coll))))))\n\n(comment\n (sortv second :desc [[1 10] [2 9] [3 8] [4 7] [5 6]])\n (let [v (vec (range 1e5))] (qb 1e2 (vec (sort v)) (sortv v) (sortv :desc v))))\n\n(let [sentinel (new-object)\n nil->sentinel (fn [x] (if (nil? x) sentinel x))\n sentinel->nil (fn [x] (if (identical? x sentinel) nil x))]\n\n (defn reduce-top\n \"Reduces the top `n` items from `coll` of N items.\n Clj impln is O(N.logn) vs O(N.logN) for (take n (sort-by ...)).\"\n ([n rf init coll] (reduce-top n identity compare rf init coll))\n ([n keyfn rf init coll] (reduce-top n keyfn compare rf init coll))\n ([n keyfn cmp rf init coll]\n (let [coll-size (count coll)\n n (long (min coll-size (long n)))]\n\n (if-not (pos? n)\n init\n #?(:cljs ; Naive implementation\n (transduce (take n) (completing rf) init\n (sort-by keyfn cmp coll))\n\n :clj\n (let [pq\n (java.util.PriorityQueue. coll-size\n (fn [x y] (cmp\n (keyfn (sentinel->nil x))\n (keyfn (sentinel->nil y)))))]\n\n (run! #(.offer pq (nil->sentinel %)) coll)\n (reduce-n (fn [acc _] (rf acc (sentinel->nil (.poll pq))))\n init n))))))))\n\n(defn top-into\n \"Conjoins the top `n` items from `coll` into `to` using `reduce-top`.\"\n ([to n coll] (top-into to n identity compare coll))\n ([to n keyfn coll] (top-into to n keyfn compare coll))\n ([to n keyfn cmp coll]\n (if (use-transient? ^long n to)\n (persistent! (reduce-top n keyfn cmp conj! (transient to) coll))\n (do (reduce-top n keyfn cmp conj to coll)))))\n\n(defn top\n \"Returns a sorted vector of the top `n` items from `coll` using `reduce-top`.\"\n ([n coll] (top-into [] n identity compare coll))\n ([n keyfn coll] (top-into [] n keyfn compare coll))\n ([n keyfn cmp coll] (top-into [] n keyfn cmp coll)))\n\n(comment [(top 20 [2 3 5 3 88 nil]) (sort [2 3 5 3 88 nil])])\n\n;;;; IO\n\n#?(:clj\n (defn slurp-resource\n \"Returns slurped named resource on classpath, or nil when resource not found.\"\n [rname]\n (when-let [r (jio/resource rname)]\n (try\n (slurp (jio/reader r))\n (catch Exception e\n (truss/ex-info! \"[encore/slurp-resource] Slurp failed\" {:rname rname} e))))))\n\n#?(:clj\n (defn get-file-resource-?last-modified\n \"Returns last-modified time for file backing given named resource, or nil\n if file doesn't exist.\"\n [rname]\n (when-let [file (try (->> rname jio/resource jio/file) (catch Exception _))]\n (.lastModified ^java.io.File file))))\n\n#?(:clj\n (def file-resources-modified?\n \"Returns true iff any files backing given named resources have changed since last call.\"\n (let [udts_ (atom {}) ; {<rnames> <udts>}\n swap! (fn [ks v] (swap-in! udts_ ks (fn [?v] (swapped v (when (not= v ?v) v)))))\n sorted-set (fmemoize (fn [x] (into (sorted-set) x)))]\n\n (fn [rnames & [?scope]]\n (let [rgroup (sorted-set rnames)]\n (swap! [?scope rgroup]\n (mapv get-file-resource-?last-modified rgroup)))))))\n\n#?(:clj\n (def slurp-file-resource\n \"Like `slurp-resource` but caches slurps against file's last-modified udt.\"\n (let [;; {<rname> [<content_> <last-modified-udt>]}\n cache_ (atom {})]\n (fn [rname]\n (let [curr-udt (or (get-file-resource-?last-modified rname) -1)]\n (force\n (swap-in! cache_ [rname]\n (fn [[?prev-content_ ?prev-udt :as ?v]]\n (if (= curr-udt ?prev-udt)\n (swapped ?v ?prev-content_)\n (let [content_ (delay (slurp-resource rname))]\n (swapped [content_ curr-udt] content_)))))))))))\n\n(comment (slurp-file-resource \"log4j.properties\"))\n\n#?(:clj\n (defn ^:no-doc read-resource\n \"Private, don't use.\"\n [rname]\n (if-not [res (jio/resource rname)]\n (truss/ex-info! (str \"[encore/read-resource] Resource not found on classpath: \" rname)\n {:rname (typed-val rname)})\n\n (with-open [reader (java.io.PushbackReader. (jio/reader res))]\n (loop [forms []]\n (let [form\n (try\n (read reader false ::eof)\n (catch Throwable t\n (truss/ex-info! (str \"[encore/read-resource] Error while reading resource: \" rname)\n {:rname (typed-val rname)\n :error t})))]\n (if (= form ::eof)\n forms\n (recur (conj forms form)))))))))\n\n#?(:clj\n (defmacro ^:no-doc load-inline\n \"Private, don't use.\n Flexibly injects Clojure/Script code from named resource on classpath:\n #?(:clj (load-inline \\\"my-code.clj\\\")\n :cljs (load-inline \\\"my-code.cljs\\\"))\"\n [rname] `(do ~@(read-resource rname))))\n\n(comment\n (run! eval (read-resource \"taoensso/encore/bytes.clj\"))\n (load-inline \"taoensso/encore/bytes.clj\"))\n\n#?(:clj\n (defn get-pom-version\n \"Returns POM version string for given Maven dependency, or nil.\"\n [dep-sym]\n (let [path\n (clojure.core/format \"META-INF/maven/%s/%s/pom.properties\"\n (or (namespace dep-sym)\n (name dep-sym))\n (name dep-sym))]\n\n (when-let [props (jio/resource path)]\n (with-open [stream (jio/input-stream props)]\n (let [props (doto (java.util.Properties.) (.load stream))]\n (.getProperty props \"version\")))))))\n\n(comment (get-pom-version 'com.taoensso/encore))\n\n#?(:clj\n (let [cache_ (atom nil)] ; Impln detail\n (defn java-version\n \"Returns Java's major version integer (8, 17, etc.).\"\n (^long [ ] (or @cache_ (reset! cache_ (java-version (System/getProperty \"java.version\")))))\n (^long [version-string]\n (or\n (when-let [^String s version-string]\n (truss/catching\n (Integer/parseInt\n (or ; Ref. <https://stackoverflow.com/a/2591122>\n (when (.startsWith s \"1.\") (.substring s 2 3)) ; \"1.6.0_23\", etc.\n (let [idx (.indexOf s \".\")] (when (pos? idx) (.substring s 0 idx))) ; \"9.0.1\", etc.\n (let [idx (.indexOf s \"-\")] (when (pos? idx) (.substring s 0 idx))) ; \"16-ea\", etc.\n (do s)))))\n (truss/ex-info! \"[encore/java-version] Failed to parse Java version string (unexpected form)\"\n {:version-string version-string}))))))\n\n#?(:clj\n (defn java-version>=\n \"Returns true iff Java's major version integer is >= given integer:\n (if (java-version>= 21) <then> <else>)\"\n [n] (>= (java-version) (long n))))\n\n(comment (java-version>= 21))\n\n;;;; Async\n\n#?(:clj\n (defn ^:no-doc threaded*\n \"Private, don't use. Returns a new #{:daemon :user} thread to execute given fn.\"\n ^Thread [kind nullary-fn]\n (case kind\n :daemon (doto (Thread. ^Runnable nullary-fn) (.setDaemon true) (.start))\n :user (doto (Thread. ^Runnable nullary-fn) (.start))\n (truss/unexpected-arg! kind\n {:context `threaded*, :param kind, :expected #{:daemon :user}}))))\n\n#?(:clj\n (defmacro ^:no-doc threaded\n \"Private, don't use. Returns a new #{:daemon :user} thread to execute body.\"\n [kind & body] `(threaded* ~kind (fn [] ~@body))))\n\n(comment (.getName (threaded :daemon (println \"Runs on daemon thread\"))))\n\n#?(:clj\n (defmacro ^:no-doc promised\n \"Private, don't use.\n Executes body on #{:daemon :user} thread and delivers result to a promise.\n Returns the promise.\"\n [kind & body]\n `(let [p# (promise)]\n (threaded ~kind (p# (do ~@body)))\n p#)))\n\n(comment @(promised :daemon (Thread/sleep 2000) \"done\"))\n\n#?(:clj\n (defn virtual-executor\n \"Experimental, subject to change without notice!\n Returns new virtual `java.util.concurrent.ThreadPerTaskExecutor` when\n possible (JVM 21+), otherwise returns nil.\"\n []\n (compile-if (Thread/ofVirtual)\n (java.util.concurrent.Executors/newVirtualThreadPerTaskExecutor)\n nil)))\n\n#?(:clj\n (let [ap (fn [] (.availableProcessors (Runtime/getRuntime)))\n perc (fn [n] (max 1 (long (Math/floor (* (/ (double (ap)) 100.0) (double n))))))\n ratio (fn [r] (max 1 (long (Math/floor (* (double (ap)) (double r))))))]\n\n (defn- get-num-threads ^long [n-threads]\n (if (vector? n-threads)\n (let [[kind n] n-threads]\n (case kind\n :num (long (truss/have pos-int? n))\n :perc (long (perc n))\n :ratio (long (ratio n))\n (truss/unexpected-arg! kind\n {:context `get-num-threads\n :param 'num-threads\n :expected '#{<pos-int> [:perc <percent>] [:ratio <ratio>]}})))\n (long (truss/have pos-int? n-threads))))))\n\n(comment\n (get-num-threads [:perc 90])\n (get-num-threads [:ratio 0.9]))\n\n#?(:clj\n (defn pool-executor\n \"Experimental, subject to change without notice!\n Returns new `java.util.concurrent.ThreadPoolExecutor` with given opts.\"\n ^java.util.concurrent.ThreadPoolExecutor\n [{:keys [n-threads n-min-threads n-max-threads thread-name-prefix\n daemon-threads? keep-alive-msecs queue-type queue-size]\n :or\n {n-threads (+ 2 (get-num-threads [:ratio 1.0]))\n thread-name-prefix \"com.taoensso/encore-pool-\"\n daemon-threads? true\n keep-alive-msecs 60000\n queue-type :linked}}]\n\n (let [n-min-threads (int (or n-min-threads n-threads))\n n-max-threads (int (or n-max-threads n-threads))\n keep-alive-msecs (int keep-alive-msecs)\n queue\n (case queue-type\n :array (java.util.concurrent.ArrayBlockingQueue. (int queue-size))\n :linked\n (if queue-size\n (java.util.concurrent.LinkedBlockingQueue. (int queue-size))\n (java.util.concurrent.LinkedBlockingQueue.))\n (truss/unexpected-arg! queue-type\n {:expected #{:array :linked}\n :context `thread-pool}))\n\n factory\n (let [idx* (java.util.concurrent.atomic.AtomicInteger. 0)]\n (reify java.util.concurrent.ThreadFactory\n (newThread [_ runnable]\n (let [idx (.incrementAndGet idx*)\n t (Thread. runnable (str thread-name-prefix idx))]\n (when daemon-threads?\n (.setDaemon t daemon-threads?))\n t))))]\n\n (java.util.concurrent.ThreadPoolExecutor.\n (int n-min-threads)\n (int n-max-threads)\n (int keep-alive-msecs)\n java.util.concurrent.TimeUnit/MILLISECONDS\n ^java.util.concurrent.BlockingQueue queue\n ^java.util.concurrent.ThreadFactory factory))))\n\n(comment (pool-executor {}))\n\n#?(:clj\n (def* ^:no-doc ^:private default-executor_\n \"Default `java.util.concurrent.ExecutorService`.\"\n (delay (or (virtual-executor) (pool-executor {})))))\n\n#?(:clj\n (defmacro ^:no-doc binding-fn\n \"Private, don't use. Returns (^:once fn* []) callable from isolated thread.\"\n [& body]\n `(let [frame# (clojure.lang.Var/cloneThreadBindingFrame)]\n (^:once fn* []\n (clojure.lang.Var/resetThreadBindingFrame frame#)\n (do ~@body)))))\n\n#?(:clj\n (defmacro ^:no-doc rebinding-fn\n \"Private, don't use. Returns (^:once fn* []) callable from any thread.\"\n [& body]\n `(let [frame1# (clojure.lang.Var/cloneThreadBindingFrame)]\n (^:once fn* []\n (let [frame2# (clojure.lang.Var/getThreadBindingFrame)]\n (try\n (clojure.lang.Var/resetThreadBindingFrame frame1#)\n (do ~@body)\n (finally (clojure.lang.Var/resetThreadBindingFrame frame2#))))))))\n\n#?(:clj\n (defmacro ^:no-doc bound-delay\n \"Private, don't use.\n Like `bound-fn` for `delay`- when body is realized, it'll be invoked with\n the same dynamic bindings in place as when the delay was created.\"\n [& body]\n (if (:ns &env)\n `(delay ~@body) ; No need (single threaded)\n `(clojure.lang.Delay. (rebinding-fn ~@body)))))\n\n(comment\n (qb 1e6 (do (clojure.lang.Var/resetThreadBindingFrame (clojure.lang.Var/getThreadBindingFrame)))) ; 30.78\n (qb 1e6 (fn []) (binding-fn)) ; [22.38 36.1]\n (qb 1e6 (delay) (bound-delay)) ; [42.11 55.09]\n (do\n (def ^:dynamic *dyn* nil)\n (def bd_ (core/binding [*dyn* 1] (bound-delay *dyn*)))\n (do @bd_)))\n\n#?(:clj\n (defn future-call*\n \"Experimental, subject to change without notice!\n Like `future-call` but supports use of given custom\n `java.util.concurrent.ExecutorService`.\n\n Will default to using JVM 21+ virtual threads when possible,\n otherwise an unbounded fixed daemon thread pool.\n\n See also `future`, `virtual-executor`, `pool-executor`.\"\n ([ f] (future-call* (deref! default-executor_) f))\n ([executor-service f]\n (let [f (binding-fn (f))\n fut (.submit ^java.util.concurrent.ExecutorService executor-service\n ^Callable f)]\n\n (reify\n clojure.lang.IPending (isRealized [_] (.isDone fut))\n clojure.lang.IDeref (deref [_] (.get fut))\n clojure.lang.IBlockingDeref\n (deref [_ timeout-msecs timeout-val]\n (try\n (.get fut timeout-msecs java.util.concurrent.TimeUnit/MILLISECONDS)\n (catch java.util.concurrent.TimeoutException _ timeout-val)))\n\n java.util.concurrent.Future\n (isDone [_ ] (.isDone fut))\n (isCancelled [_ ] (.isCancelled fut))\n (get [_ ] (.get fut))\n (get [_ timeout unit] (.get fut timeout unit))\n (cancel [_ interrupt? ] (.cancel fut interrupt?)))))))\n\n#?(:clj\n (defmacro future*\n \"Experimental, subject to change without notice!\n Like `future` but supports use of given custom\n `java.util.concurrent.ExecutorService`.\n\n Will default to using JVM 21+ virtual threads when possible,\n otherwise an unbounded fixed daemon thread pool.\n\n See also `future-call`, `virtual-executor`, `pool-executor`.\"\n ([ form] `(future-call* (^:once fn* [] ~form)))\n ([executor-service form] `(future-call* ~executor-service (^:once fn* [] ~form)))))\n\n(comment @(future* (do (println \"running\") (Thread/sleep 2000) :done)))\n\n#?(:clj\n (defn future-pool\n \"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\n See also `future*` for fully custom pools, etc.\"\n [n-threads]\n (let [n (get-num-threads n-threads) ; Undocumented special vec support\n s (java.util.concurrent.Semaphore. n)\n msecs java.util.concurrent.TimeUnit/MILLISECONDS\n fp-call\n (fn [f]\n (if (fn? f)\n (future (try (f) (finally (.release s))))\n (do\n (.release s)\n (truss/ex-info! \"[encore/future-pool] Unexpected arg type (expected function)\"\n {:arg (typed-val f)}))))]\n\n (fn fp\n ([ ] (.acquire s n) (.release s n) true)\n ([f] (.acquire s) (fp-call f))\n\n ([^long timeout-msecs timeout-val]\n (if (.tryAcquire s n timeout-msecs msecs)\n (do (.release s n) true)\n timeout-val))\n\n ([^long timeout-msecs timeout-val f]\n (if (.tryAcquire s timeout-msecs msecs)\n (fp-call f)\n timeout-val))))))\n\n(comment\n (time\n (let [fp (future-pool 2)]\n [(fp (fn [] (Thread/sleep 2000) (println \"2000\")))\n (fp (fn [] (Thread/sleep 500) (println \"500\")))\n (fp 200 \"timeout\" (fn [] (Thread/sleep 900) (println \"900\")))\n (fp (fn [] (Thread/sleep 3000) (println \"3000\")))\n (fp)])))\n\n#?(:clj\n (defn pre-cache\n \"Given a nullary fn `f` that is non-idempotent and free of side-effects,\n returns a wrapped version of `f` that asynchronously maintains a cache\n of up to `n-capacity` pre-computed return values of (f).\n\n Useful when `f` is expensive & may be called in a spikey fashion,\n e.g. ideal for cryptographic key generators.\"\n ([n-capacity f] (pre-cache n-capacity 1 f))\n ([n-capacity fp-or-n-threads f]\n (let [queue (java.util.concurrent.ArrayBlockingQueue. n-capacity)\n f* (fn [] (try {:okay (f)} (catch Throwable t {:error t})))\n\n async-replenish!\n (let [a_ (agent nil)\n fp\n (if (fn? fp-or-n-threads)\n (do fp-or-n-threads)\n (future-pool fp-or-n-threads))]\n\n (fn async-replenish! []\n (send-off a_\n (fn [_] (fp (fn [] (.offer queue (f*)))) nil))))]\n\n (dotimes [_ n-capacity] (async-replenish!)) ; Initialize cache\n\n (fn take1 []\n (let [f*-result\n (if-let [cached (.poll queue)]\n (do (async-replenish!) cached)\n ;; Block to call f synchronously on calling thread.\n ;; Not limited by fp => pre-cached f will never be slower\n ;; than uncached f, even if `n-threads` is small.\n (f*))]\n\n (if-let [t (get f*-result :error)]\n (throw t)\n (get f*-result :okay))))))))\n\n(comment\n (let [fp (future-pool 6)] ; Shared future pool\n (def f1 (pre-cache 3 fp (fn [] (Thread/sleep 1000) :f1)))\n (def f2 (pre-cache 4 fp (fn [] (Thread/sleep 500) :f2)))))\n\n#?(:clj\n (defn call-on-shutdown!\n \"Registers given nullary fn as a JVM shutdown hook.\n (f) will be called sometime during shutdown. While running, it will\n attempt to block shutdown.\"\n [f]\n (.addShutdownHook (Runtime/getRuntime)\n (Thread. ^Runnable f))))\n\n#?(:clj\n (defn runner\n \"Experimental, subject to change without notice!\n Returns a new stateful \\\"runner\\\" such that:\n\n (runner f) ; Arity 1 call\n Requests runner to execute given nullary fn according to runner's opts.\n Returns:\n - `true` if runner accepted fn for execution without back-pressure.\n - `false` if runner experienced back-pressure (fn may/not execute).\n - `nil` if runner has stopped accepting new execution requests.\n\n (deref runner)\n Returns a promise that will be delivered once all pending execution\n requests complete.\n\n (runner) ; Arity 0 call\n Causes runner to permanently stop accepting new execution requests.\n On first call returns a promise that will be delivered once all pending\n execution requests complete. On subsequent calls returns nil.\n\n Runners are a little like agents, but:\n - Take nullary fns rather than unary fns of state.\n - Have no validators or watches.\n - Have configurable back-pressure.\n - Can have >1 thread (in which case fns may execute out-of-order!).\n\n These properties make them useful as configurable general-purpose async workers.\n\n Options include:\n\n `:buffer-size` (default 1024)\n Size of request buffer, and the max number of pending requests before\n configured back-pressure behaviour is triggered (see `:mode`).\n\n `:mode` (default `:blocking`)\n Back-pressure mode \u2208 #{:blocking :dropping :sliding}.\n Controls what happens when a new request is made while request buffer is full:\n `:blocking` => Blocks caller until buffer space is available\n `:dropping` => Drops the newest request (noop)\n `:sliding` => Drops the oldest request\n\n `:n-threads` (default 1)\n Number of threads to use for executing fns (servicing request buffer).\n NB execution order may be non-sequential when n > 1.\n\n `:drain-msecs` (default 6000 msecs)\n Maximum time (in milliseconds) to try allow pending execution requests to\n complete when stopping runner. nil => no maximum.\"\n\n [{:as opts\n :keys\n [mode buffer-size n-threads thread-name drain-msecs,\n auto-stop? convey-bindings? daemon-threads?]\n\n :or\n {mode :blocking\n buffer-size 1024\n n-threads 1\n drain-msecs 6000\n\n ;;; Advanced (undocumented)\n auto-stop? true\n convey-bindings? true\n daemon-threads? true}}]\n\n (let [stopped?_ (latom false)]\n\n (if (= mode :sync) ; Undocumented, mostly used for testing\n (reify\n clojure.lang.IDeref (deref [_] ((promise) :drained))\n clojure.lang.IFn\n (invoke [r ] (when (compare-and-set! stopped?_ false true) @r))\n (invoke [_ f] (when-not (stopped?_) (truss/try* (f) (catch :all _)) true)))\n\n (let [cnt-executing (java.util.concurrent.atomic.AtomicLong. 0)\n abq (java.util.concurrent.ArrayBlockingQueue.\n (as-pos-int buffer-size) false)\n\n drained? (fn [] (and (zero? (.size abq)) (zero? (.get cnt-executing))))\n drained-fn\n (fn []\n (if (drained?)\n ((promise) :drained)\n (promised :daemon (loop [] (if (drained?) :drained (recur))))))\n\n init-fn\n (fn []\n (call-on-shutdown!\n (fn []\n (when auto-stop? (compare-and-set! stopped?_ false true))\n ;; Optionally block JVM shutdown to complete pending requests\n (if-let [^long msecs drain-msecs]\n (when (pos? msecs) (deref (drained-fn) msecs nil))\n (do (deref (drained-fn))))))\n\n ;; Create worker threads\n (dotimes [n (as-pos-int n-threads)]\n (let [wfn\n (fn a-worker-fn []\n (loop []\n (if-let [f (.poll abq 200 java.util.concurrent.TimeUnit/MILLISECONDS)]\n (do\n (.incrementAndGet cnt-executing)\n (truss/try*\n (f)\n (catch :all _)\n (finally (.decrementAndGet cnt-executing)))\n ;; Unconditionally drain abq even when stopped\n (recur))\n (when-not (stopped?_) (recur)))))\n\n thread-name (str-join-once \"-\" [(or thread-name `runner) \"loop\" (inc n) \"of\" n-threads])\n thread (Thread. wfn thread-name)]\n\n ;; Daemon worker threads are almost always the right choice\n ;; here since they allow the flexibility of *optionally*\n ;; blocking JVM shutdown (via our shutdown hook), whereas\n ;; user worker threads outright prevent our hook from even\n ;; running and so would make users responsible for stopping\n ;; runners manually.\n\n (.setDaemon thread (boolean daemon-threads?))\n (.start thread))))\n\n init!_\n (if-let [msecs (get opts :debug/init-after)]\n (delay (threaded :daemon (Thread/sleep (int msecs)) (init-fn)))\n (delay (init-fn)))\n\n run-fn\n (case mode\n :blocking (fn blocking-run [f] (or (.offer abq f) (do (.put abq f) false)))\n :dropping (fn dropping-run [f] (.offer abq f))\n :sliding\n (fn sliding-run [f]\n (or\n (.offer abq f) ; Common case\n (loop []\n (.poll abq) ; Drop earliest f\n (if (.offer abq f)\n false ; Successfully took new f, but drop/s occurred\n (recur)))))\n\n (truss/unexpected-arg! mode\n {:context `runner\n :expected #{:sync :blocking :dropping :sliding}}))]\n\n (reify\n clojure.lang.IDeref (deref [_] (drained-fn))\n clojure.lang.IFn\n (invoke [r ] (when (compare-and-set! stopped?_ false true) @r))\n (invoke [_ f]\n (when-not (stopped?_)\n (.deref init!_)\n (if convey-bindings?\n (run-fn (binding-fn (f)))\n (run-fn f))))))))))\n\n(comment\n (let [r1 (runner {:mode :sync})\n r2 (runner {:mode :blocking})]\n (qb 1e6 ; [50.56 144.44]\n (r1 (fn []))\n (r2 (fn [])))))\n\n(defn ^:no-doc hot-sleep\n \"Private, don't use.\n For Clj: same as `Thread/sleep`.\n For Cljs: hot loops until given number of msecs have elapsed.\n\n Useful for certain synchronous unit tests, etc.\"\n [msecs]\n #?(:clj (Thread/sleep (int msecs))\n :cljs (let [t0 (now-udt*)] (loop [] (when (< (- (now-udt*) t0) msecs) (recur))))))\n\n(comment (hot-sleep 500))\n\n;;;; Thread info\n\n#?(:clj (defn thread-name \"Returns string name of current `Thread`.\" ^String [] (.getName (Thread/currentThread))))\n#?(:clj (defn thread-id \"Returns long id of current `Thread`.\" ^long [] (.getId (Thread/currentThread))))\n#?(:clj\n (defn thread-info\n \"Returns {:keys [group name id]} for current `Thread`.\"\n []\n (let [t (Thread/currentThread)]\n {:group (when-let [g (.getThreadGroup t)] (.getName g))\n :name (.getName t)\n :id (.getId t)})))\n\n(comment [(thread-name) (thread-id) (thread-info)] (qb 1e6 (thread-info))) ; 44.49\n\n;;;; Host info\n\n#?(:clj\n (defmacro ^:private deref-safely\n \"Like normal blocking deref, but returns `timeout-val` when calling\n thread is interrupted while blocking.\"\n [p timeout-msecs timeout-val]\n `(try\n (deref ~p ~timeout-msecs ~timeout-val)\n (catch InterruptedException _# ~timeout-val))))\n\n#?(:clj\n (defn ^:no-doc refreshing-cache\n \"Private, don't use.\n Returns TTL-cached (fn [cache-msecs timeout-msecs timeout-val]) for given\n (fn [fallback-val]) that will:\n - Initiate async update of cached value when stale value is encountered.\n - Continue to deliver stale value until cache is updated.\"\n [f1]\n (let [cache_ (latom nil) ; ?[promise udt]\n cache-update-pending?_ (latom false)]\n\n (fn [cache-msecs timeout-msecs timeout-val]\n (loop [force-use-cache? false]\n\n (if (or force-use-cache? (cache-update-pending?_))\n (let [[p] (cache_)] (deref-safely p timeout-msecs timeout-val))\n (let [t1 (System/currentTimeMillis)]\n (if-let [[p ^long t0] (cache_)]\n (if (< (- t1 t0) (long cache-msecs)) ; Have fresh cache\n (deref-safely p timeout-msecs timeout-val)\n (do\n ;; Ensure exactly 1 async thread is updating cache\n (when (compare-and-set! cache-update-pending?_ false true)\n (threaded :daemon\n (if-let [new-val (f1 nil)] ; Take as long as needed\n (reset! cache_ [((promise) new-val) t1]) ; Update p and t\n (reset! cache_ [p t1]) ; Update only t\n )\n (reset! cache-update-pending?_ false)))\n (recur true)))\n\n (let [p (promise)]\n (when (compare-and-set! cache_ nil [p t1]) ; First call\n ;; Init cache with pending init value\n (threaded :user (p (f1 timeout-val))))\n (recur true))))))))))\n\n#?(:clj\n (let [f1\n (fn [fallback-val]\n (try\n (let [host (java.net.InetAddress/getLocalHost)]\n {:name (.getHostName host),\n :ip (.getHostAddress host)})\n (catch Exception _ (force fallback-val))))\n\n f3 (refreshing-cache f1)]\n\n (defn host-info\n \"Returns ?{:keys [ip name]} with string vals or `fallback-val` (default nil).\n Arities 0 and 3 are cached, prefer these!\n Arities 1 and 2 are uncached and intended for advanced users only.\"\n ([ ] (f3 (msecs :mins 1) 5000 nil))\n ([cache-msecs timeout-msecs fallback-val] (f3 cache-msecs timeout-msecs fallback-val))\n ([ fallback-val] (f1 fallback-val))\n ([timeout-msecs fallback-val]\n (let [p (promise)]\n (future* (p (f1 fallback-val)))\n (deref-safely p timeout-msecs fallback-val))))))\n\n(comment (qb 1e6 (host-info (msecs :mins 1) 5000 nil))) ; 64.49\n\n#?(:clj\n (let [f1 (fn [fallback-val] (try (.getHostAddress (java.net.InetAddress/getLocalHost)) (catch Exception _ (force fallback-val))))\n f3 (refreshing-cache f1)]\n\n (defn host-ip\n \"Returns local host IP string or `fallback-val` (default nil).\n Arities 0 and 3 are cached, prefer these!\n Arities 1 and 2 are uncached and intended for advanced users only.\"\n ([ ] (f3 (msecs :mins 1) 5000 nil))\n ([cache-msecs timeout-msecs fallback-val] (f3 cache-msecs timeout-msecs fallback-val))\n ([ fallback-val] (f1 fallback-val))\n ([timeout-msecs fallback-val]\n (let [p (promise)]\n (future* (p (f1 fallback-val)))\n (deref-safely p timeout-msecs fallback-val))))))\n\n(comment (qb 1e6 (host-ip) (get (host-info) :ip))) ; [56.12 76.39]\n\n#?(:clj\n (let [f1 (fn [fallback-val] (try (.getHostName (java.net.InetAddress/getLocalHost)) (catch Exception _ (force fallback-val))))\n f3 (refreshing-cache f1)]\n\n (defn hostname\n \"Returns local hostname string or `fallback-val` (default nil).\n Arities 0 and 3 are cached, prefer these!\n Arities 1 and 2 are uncached and intended for advanced users only.\"\n ([ ] (f3 (msecs :mins 1) 5000 nil))\n ([cache-msecs timeout-msecs fallback-val] (f3 cache-msecs timeout-msecs fallback-val))\n ([ fallback-val] (f1 fallback-val))\n ([timeout-msecs fallback-val]\n (let [p (promise)]\n (future* (p (f1 fallback-val)))\n (deref-safely p timeout-msecs fallback-val))))))\n\n(comment (qb 1e6 (hostname) (get (host-info) :name))) ; [56.31 75.77]\n\n;;;; Environmental config API\n;; - Cljs must embed config in code (no runtime access to environmental config).\n;; - Embed config => macro, no runtime arg support, locally eval all symbols.\n;; - Locally eval symbols => no support for foreign unrequired namespaces.\n\n#?(:clj\n (let [pattern-platform #\"\\<(.)?platform(.)?\\>\"\n pattern-opt #\"\\<(.+?)\\>\"]\n\n (defn- prep-env-ids\n \"Handles id prep for `get-env`:\n :a<XplatformY><optional> =>\n [\\\"a.bXcljYoptional\\\" \\\"a.bXcljY\\\" \\\"a.boptional\\\" \\\"a.b\\\"], etc.\"\n [platform tf x]\n (when x\n (if (vector? x)\n (into [] (comp (map #(prep-env-ids platform tf %)) cat (distinct)) x)\n (let [tf (or tf identity)\n s (as-qname\n (if (const-form? x)\n x\n (truss/ex-info! \"[encore/get-env] Ids must be const forms\"\n {:id x})))\n\n without-platform (str/replace s pattern-platform \"\")\n with-platform (when platform (str/replace s pattern-platform (fn [[_ pre post]] (str pre (name platform) post))))\n without-opt (fn [s] (when s (str/replace s pattern-opt \"\")))\n with-opt (fn [s] (when s (str/replace s pattern-opt (fn [[_ cnt]] cnt))))]\n\n (into [] (comp (filter identity) (distinct) (map tf))\n [(with-opt with-platform)\n (without-opt with-platform)\n (with-opt without-platform)\n (without-opt without-platform)])))))))\n\n(comment (prep-env-ids :clj vector [:a<XplatformY><optional> :b<XplatformY><optional> :a]))\n\n#?(:clj\n (let [pname (fn [s] (-> s (str-replace #\"/\" \".\")))\n ename (fn [s] (-> s (str-replace #\"[./-]\" \"_\") (str/upper-case)))\n parse-opts\n (fn [opts-or-spec]\n (if (map? opts-or-spec)\n (do opts-or-spec)\n {:spec opts-or-spec}))]\n\n (defn ^:no-doc get-env*\n \"Private, don't use. Runtime fn version of `get-env`.\"\n {:arglists\n '([{:keys [as default return]\n :or {as :str\n return :value}} spec])}\n\n ([opts spec] (get-env* (assoc opts :spec spec)))\n ([opts-or-spec]\n (let [opts (parse-opts opts-or-spec)\n {:keys [as default spec, return]\n :or {as :str\n return :value}} opts\n\n ;;; Advanced opts, undocumented\n platform (or (get opts :platform) (get opts :platform*))\n custom-res\n (when (get opts ::allow-recur? true)\n (let [res-prop (get opts :res-prop)\n env-prop (get opts :env-prop)]\n (when (or res-prop env-prop)\n (get-env*\n {::allow-recur? false,\n :platform platform,\n :prop res-prop, :env env-prop, :res nil,\n :return :value}))))\n\n props (prep-env-ids platform (fn [id] [:prop (pname id)]) (get opts :prop spec))\n envs (prep-env-ids platform (fn [id] [:env (ename id)]) (get opts :env spec))\n ress (prep-env-ids platform (fn [id] [:res (pname id)]) (or custom-res (get opts :res spec)))\n to-search [props envs ress] ; (vinterleave-all [[:p1 :p2] [:e1] [:r1 :r2 :r3]]) ; => [:p1 :e1 :r1 :p2 :r2 :r3]\n\n match ; ?[source str-val]\n (or\n (get opts :debug/match)\n (reduce-interleave-all\n (fn rf [_ in]\n (let [[kind n] in]\n (case kind\n :prop (when-let [v (System/getProperty n)] (reduced [in v]))\n :env (when-let [v (System/getenv n)] (reduced [in v]))\n :res (when-let [v (slurp-resource n)] (reduced [in v])))))\n nil to-search))\n\n match-as ; ?[source as-val]\n (or\n (case as\n :str match ; ?[source str-val]\n :bool\n (when-let [[source bool-str] match]\n (let [parsed-bool\n (case bool-str\n (\"true\" \"1\" \"t\" \"T\" \"TRUE\") true\n (\"false\" \"0\" \"f\" \"F\" \"FALSE\") false\n (truss/ex-info! \"[encore/get-env] Error parsing as boolean\"\n {:bool-str bool-str\n :source source\n :platform platform\n :expected\n {true #{\"true\" \"1\" \"t\" \"T\" \"TRUE\"}\n false #{\"false\" \"0\" \"f\" \"F\" \"FALSE\"}}}))]\n [source parsed-bool]))\n\n :edn\n (when-let [[source edn] match]\n (let [x\n (try\n (read-edn (get opts :read-opts) edn)\n (catch Throwable t\n (truss/ex-info! \"[encore/get-env] Error reading as edn\"\n {:edn edn, :source source, :platform platform} t)))]\n\n (if-not (and (symbol? x) (get opts :eval-sym? (= platform :clj)))\n [source x]\n (if-let [sym (resolve-sym nil x true)]\n [source (eval sym)] ; Eval sym at runtime\n (truss/ex-info! (str \"[encore/get-env] Failed to resolve symbol: \" x)\n {:edn edn, :source source, :platform platform})))))\n\n (truss/ex-info! \"[encore/get-env] Unexpected `:as` option\"\n {:given (typed-val as)\n :expected #{:str :edn :bool}}))\n\n (when (contains? opts :default)\n [:default default]))]\n\n (when (or match-as (= return :explain))\n (let [[source value] match-as]\n (case return\n :value value\n :legacy {:config value, :source source} ; Back compatibility\n :map (assoc-some {:value value, :source source} :platform platform)\n :explain (assoc-some {:value value, :source source} {:platform platform, :search (vinterleave-all to-search)})\n (truss/ex-info! \"[encore/get-env] Unexpected `:return` option\"\n {:given (typed-val return)\n :expected #{:value :map :explain}})))))))\n\n (defmacro get-env\n \"Flexible cross-platform environmental value util.\n\n Given a compile-time id (keyword/string) or vector of desc-priority\n ids, parse and return the first of the following that exists, or nil:\n 1. JVM property value for id\n 2. Environment variable value for id\n 3. Classpath resource content for id\n\n Ids may include optional platform tag for auto replacement, e.g.:\n `<.platform>` -> \\\".clj\\\", \\\".cljs\\\", or nil\n\n Clj/s: if resulting value is a single symbol, it will be evaluated.\n Cljs: resulting value will be embedded in code during macro expansion!\n\n Options:\n `:as` - Parse encountered value as given type \u2208 #{:str :bool :edn} (default `:str`).\n `:default` - Fallback to return unparsed if no value found during search (default `nil`).\n `:return` - Return type \u2208 #{:value :map :explain} (default `:value`).\n Use `:explain` to verify/debug, handy for tests/REPL!\n\n Example:\n (get-env {:as :edn} [:my-app/id1<.platform> :my-app/id2]) will parse\n and return the first of the following that exists, or nil:\n\n id1 with platform:\n `my-app.id1.clj` JVM property value\n `MY_APP_id1_CLJ` environment variable value\n `my-app.id1.clj` classpath resource content\n\n id1 without platform:\n `my-app.id1` JVM property value\n `MY_APP_id1` environment variable value\n `my-app.id1` classpath resource content\n\n id2 with platform: ...\n id2 without platform: ...\"\n\n {:arglists\n '([{:keys [as default return]\n :or {as :str\n return :value}} spec])}\n\n ([ ] `(get-locals)) ; Back compatibility for unrelated util with same name\n ([opts spec] (truss/have? const-form? opts spec) `(get-env ~(assoc opts :spec spec)))\n ([opts-or-spec] (truss/have? const-form? opts-or-spec)\n (let [opts (parse-opts opts-or-spec)]\n (if (:ns &env)\n (get-env* (assoc opts :platform* :cljs)) ; Embed compile-time value\n `(get-env* ~(assoc opts :platform* :clj))))))))\n\n(comment\n (defn f1 [x] (* x x))\n (do ((get-env {:as :edn, :debug/match [:debug/source \"f1\"]}) 5))\n (macroexpand '((get-env {:as :edn, :debug/match [:debug/source \"f1\"]}) 5)))\n\n;;;; Namespaces\n\n#?(:clj\n (defn interns-overview\n \"Returns {:keys [api public private impl test no-doc]}, with each key mapped\n to an alphabetical list of the relevant vars in given namespace.\n\n \\\"impl\\\" vars are public vars with names that begin with \\\"-\\\" or \\\"_\\\",\n a naming convention commonly used to indicate vars intended to be treated\n as private implementation details even when public.\"\n ([ ] (interns-overview *ns*))\n ([ns]\n (map-vals (comp vec sort)\n (reduce-kv\n (fn [{:keys [public private impl test no-doc] :as m} k v]\n (let [mt (meta v)]\n (cond\n (:test mt) (update m :test conj k)\n (:private mt) (update m :private conj k)\n\n :if-let [impl?\n (let [sw? (partial str-starts-with? (name (:name mt)))]\n (and\n (not (sw? \"->\"))\n (some sw? [\"-\" \"_\" \"*-\" \"*_\"])))]\n (update m :impl conj k)\n\n :let [m (update m :public conj k)]\n\n (:no-doc mt) (update m :no-doc conj k)\n :else (update m :api conj k))))\n {}\n (ns-interns ns))))))\n\n(comment (interns-overview))\n\n;;;; Locals\n\n#?(:clj\n (defmacro ^:no-doc get-locals\n \"Private, don't use.\"\n []\n (let [ks (reduce\n (fn [acc in]\n (if (str-starts-with? (name in) \"__\") ; Hide privates\n (do acc)\n (conj acc (without-meta in))))\n [] (keys &env))]\n `(zipmap '~ks ~ks))))\n\n(comment\n [(let [x :x] (get-locals)) ((fn [^long x] (get-locals)) 0)\n (let [x :x] (get-env)) ((fn [^long x] (get-env)) 0)])\n\n;;;; Stubs (experimental)\n\n(defn ^:no-doc -valid-unstub-impl [x]\n (if #?(:clj (symbol? x) :cljs (fn? x))\n x\n (truss/ex-info! \"[encore/stubfn] Unexpected unstub implementation \"\n {:given (typed-val x)\n :expected #?(:clj 'symbol :cljs 'fn)})))\n\n#?(:clj\n (defmacro defstub\n \"Experimental, subject to change without notice!!\n Declares a stub var that can be initialized from any namespace with\n `unstub-<stub-name>`.\n\n Decouples a var's declaration (location) and its initialization (value).\n Useful for defining vars in a shared ns from elsewhere (e.g. a private\n or cyclic ns).\"\n\n ([stub-sym & more] (let [syms (cons stub-sym more)] `(do ~@(map (fn [s] `(defstub ~s)) syms))))\n ([stub-sym]\n (let [unstub-sym (with-meta (symbol (str \"unstub-\" (name stub-sym))) {:no-doc true :doc \"Call with implementation fn to initialize stub\"})\n unstub-sym* (with-meta (symbol (str \"unstub*-\" (name stub-sym))) {:no-doc true})\n stub-ns (symbol (str *ns*))\n qualified-unstub-sym* (symbol (str *ns*) (name unstub-sym*))]\n\n (if (:ns &env)\n ;; No declare/intern support\n `(let [stubfn_#\n (volatile!\n (fn [~'& args#]\n (truss/ex-info! (str \"[encore/stubfn] Attempted to call uninitialized stub fn\")\n {:stub '~stub-sym, :args args#})))]\n\n (defn ~unstub-sym* [impl-fn#] (vreset! stubfn_# (-valid-unstub-impl impl-fn#))) ; For Clj+s case\n (defn ~unstub-sym [impl-fn#] (vreset! stubfn_# (-valid-unstub-impl impl-fn#)))\n (defn ~stub-sym\n ([ ] (@stubfn_# ))\n ([x# ] (@stubfn_# x# ))\n ([x# y# ] (@stubfn_# x# y# ))\n ([x# y# z# ] (@stubfn_# x# y# z#))\n ([x# y# z# ~'& more#] (apply @stubfn_# x# y# z# more#))))\n\n `(let [stub-var# (declare ~(with-meta stub-sym {:redef true}))]\n (defmacro ~unstub-sym [~'impl]\n (if (:ns ~'&env) ; For Clj+s case\n `(~'~qualified-unstub-sym* ~~'impl)\n `(let [~'impl-var# (var ~(-valid-unstub-impl ~'impl))\n ~'stub-sym#\n (with-meta '~'~stub-sym\n (merge\n (dissoc (meta ~stub-var#) :declared :redef)\n (select-keys (meta ~'impl-var#) [:arglists :doc :macro])))]\n\n (intern '~'~stub-ns ~'stub-sym#\n (.getRawRoot ~'impl-var#)))))))))))\n\n;;;; Tests\n\n(defn test-fixtures\n \"Given a {:before ?(fn []) :after ?(fn [])} map, returns cross-platform\n test 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))\"\n\n [fixtures-map]\n (truss/have? map? fixtures-map)\n ;; (truss/have? [:ks<= #{:before :after}] fixtures-map)\n\n #?(:cljs fixtures-map ; Cljs supports a map with {:keys [before after]}\n :clj ; Clj wants a fn\n (let [{:keys [before after]} fixtures-map]\n (fn fixtures [f]\n (when before (before))\n (f)\n (when after (after))))))\n\n(comment (test-fixtures {:before (fn [])}))\n\n;;;; Benchmarking\n\n#?(:clj\n (defmacro time-ms \"Returns number of milliseconds it took to execute body.\"\n [& body] `(let [t0# (now-udt*)] ~@body (- (now-udt*) t0#))))\n\n#?(:clj\n (defmacro time-ns \"Returns number of nanoseconds it took to execute body.\"\n [& body] `(let [t0# (now-nano*)] ~@body (- (now-nano*) t0#))))\n\n#?(:clj\n (defmacro quick-bench\n \"Simple util to benchmark/compare runtime of given form/s.\n\n Runs sets of laps for each given form, recording the total runtime of each set.\n Returns the the total runtime in msecs of the fastest set of laps for each form.\n\n (quick-bench [<num-sets> <num-laps>] <form1> <form2> <...>) =>\n [<total runtime msecs of fastest set of laps for form1>\n <total runtime msecs of fastest set of laps for form2>\n <...>]\n\n Total number of runs for each form is: `num-sets` * `num-laps`\n\n If omitted, the default `num-sets` is 6 (to include warmup):\n (quick-bench <num-laps> <form1> <form2> <...>)\n\n Example (comparing runtime of `first` and `nth` against vector):\n (let [v [:a]] (quick-bench 1e6 (first v) (nth v 0))) => [67.43 39.05]\"\n\n ([spec form & more] (mapv (fn [form] `(quick-bench ~spec ~form)) (cons form more)))\n ([spec form]\n `(let [spec# ~spec\n ;; Default 3 warmup + 3 working sets:\n [num-sets# num-laps#] (if (vector? spec#) spec# [6 spec#])]\n (truss/have? pos-num? num-sets# num-laps#)\n (round2\n (/ (double\n (reduce min\n (for [_# (range num-sets#)]\n (time-ns (dotimes [_# num-laps#] (do ~form))))))\n 1e6))))))\n\n#?(:clj (defalias qb quick-bench))\n\n(comment (let [v [:a]] (qb [4 1e6] (first v) (nth v 0))))\n\n#?(:clj\n (defn bench*\n \"Repeatedly executes fn and returns time taken to complete execution.\"\n [nlaps {:keys [nlaps-warmup nthreads as-ns?]\n :or {nlaps-warmup 0\n nthreads 1}} f]\n (try\n (dotimes [_ nlaps-warmup] (f))\n (let [nanosecs\n (if (= nthreads 1)\n (time-ns (dotimes [_ nlaps] (f)))\n (let [nlaps-per-thread (/ (long nlaps) (long nthreads))]\n (time-ns\n (let [futures (repeatedly-into [] nthreads\n (fn [] (future (dotimes [_ nlaps-per-thread] (f)))))]\n (mapv deref futures)))))]\n (if as-ns? nanosecs (round0 (/ nanosecs 1e6))))\n (catch Throwable t\n (println (str \"Bench failure: \" (.getMessage t)))\n -1))))\n\n#?(:clj (defmacro bench [nlaps opts & body] `(bench* ~nlaps ~opts (fn [] ~@body))))\n\n;;;; Scheduling\n;; `call-at-interval` also possible but poor cost/benefit since less useful\n;; and more impl specific\n\n(do\n (defprotocol ITimeoutImpl (-schedule-timeout [_ msecs f]))\n (deftype DefaultTimeoutImpl [#?(:clj ^java.util.Timer timer)]\n ITimeoutImpl\n (-schedule-timeout [_ msecs f]\n #?(:cljs (js/setTimeout f msecs)\n :clj\n (let [tt (proxy [java.util.TimerTask] []\n (run [] (truss/catching (f))))]\n (.schedule timer tt (long msecs))))))\n\n (defonce default-timeout-impl_\n \"Simple one-timeout timeout implementation provided by platform timer.\n O(logn) add, O(1) cancel, O(1) tick. Fns must be non-blocking or cheap.\n Similar efficiency to core.async timers (binary heap vs DelayQueue).\"\n (delay\n (DefaultTimeoutImpl.\n #?(:clj (java.util.Timer. \"encore/timer\" true))))))\n\n(defprotocol ITimeoutFuture\n (tf-state [_] \"Returns a map of timeout's public state.\")\n (tf-poll [_] \"Returns :timeout/pending, :timeout/cancelled, or the timeout's completed result.\")\n (tf-done? [_] \"Returns true iff the timeout is not pending (i.e. has a completed result or is cancelled).\")\n (tf-pending? [_] \"Returns true iff the timeout is pending.\")\n (tf-cancelled? [_] \"Returns true iff the timeout is cancelled.\")\n (tf-cancel! [_] \"Returns true iff the timeout was successfully cancelled (i.e. was previously pending).\"))\n\n#?(:cljs\n (deftype TimeoutFuture [f result__ udt]\n ITimeoutFuture\n (tf-state [_] {:fn f :udt udt})\n (tf-poll [_] @result__)\n (tf-done? [_] (not (identical-kw? @result__ :timeout/pending)))\n (tf-pending? [_] (identical-kw? @result__ :timeout/pending))\n (tf-cancelled? [_] (identical-kw? @result__ :timeout/cancelled))\n (tf-cancel! [_] (-cas!? result__ :timeout/pending :timeout/cancelled))\n\n IPending (-realized? [t] (tf-done? t))\n IDeref (-deref [t] (tf-poll t))))\n\n#?(:clj\n (deftype TimeoutFuture\n [f result__ ^long udt ^CountDownLatch latch]\n ITimeoutFuture\n (tf-state [_] {:fn f :udt udt})\n (tf-poll [_] (result__))\n (tf-done? [_] (not (identical-kw? (result__) :timeout/pending)))\n (tf-pending? [_] (identical-kw? (result__) :timeout/pending))\n (tf-cancelled? [_] (identical-kw? (result__) :timeout/cancelled))\n (tf-cancel! [_]\n (if (-cas!? result__ :timeout/pending :timeout/cancelled)\n (do (.countDown latch) true)\n false))\n\n clojure.lang.IPending (isRealized [t] (tf-done? t))\n clojure.lang.IDeref (deref [_] (.await latch) (result__))\n clojure.lang.IBlockingDeref\n (deref [_ timeout-msecs timeout-val]\n (if (.await latch timeout-msecs java.util.concurrent.TimeUnit/MILLISECONDS)\n (result__)\n timeout-val))\n\n java.util.concurrent.Future\n (isCancelled [t] (tf-cancelled? t))\n (isDone [t] (tf-done? t))\n (cancel [t _] (tf-cancel! t))))\n\n(defn timeout-future? #?(:cljs {:tag 'boolean}) [x] (instance? TimeoutFuture x))\n\n(defn call-after-timeout\n \"Alpha, subject to change.\n Returns a TimeoutFuture that will execute `f` after given msecs.\n\n Does NOT do any automatic binding conveyance.\n\n Performance depends on the provided timer implementation (`impl_`).\n The default implementation offers O(logn) add, O(1) cancel, O(1) tick.\n\n See `ITimeoutImpl` for extending to arbitrary timer implementations.\"\n\n ;; Why no auto binding convyance? Explicit manual conveyance plays better\n ;; with cljs, and means less surprise with `future-fn`.\n ([ msecs f] (call-after-timeout default-timeout-impl_ msecs f))\n ([impl_ msecs f]\n (let [msecs (long msecs)\n udt (+ (now-udt) msecs) ; Approx instant to run\n result__ (latom :timeout/pending)\n #?@(:clj [latch (CountDownLatch. 1)])\n cas-f\n (fn []\n (let [result_ (delay (f))]\n (when (-cas!? result__ :timeout/pending result_)\n @result_\n #?(:clj (.countDown latch)))))]\n\n (let [impl (force impl_)] (-schedule-timeout impl msecs cas-f))\n (TimeoutFuture. f result__ udt #?(:clj latch)))))\n\n#?(:clj\n (defmacro after-timeout\n \"Alpha, subject to change.\n Returns a TimeoutFuture that will execute body after timeout.\n Body must be non-blocking or cheap.\"\n [msecs & body] `(call-after-timeout ~msecs (fn [] ~@body))))\n\n(comment\n @(after-timeout 500 (println \"foo\") \"bar\")\n (def ^:dynamic *foo* nil)\n (core/binding [*foo* \"bar\"] ; Note no auto conveyance\n ((:fn (tf-state (after-timeout 200 (println *foo*) *foo*))))))\n\n;;;; Browser\n\n#?(:cljs\n (do ; Basic browser logging\n (def ^:private console-log\n (if-not (exists? js/console)\n (fn [& xs] nil)\n (fn [& xs] (when-let [f js/console.log]\n (.apply f js/console (into-array xs))))))\n\n (def log console-log) ; Raw args\n (defn logp [ & xs] (console-log (str-join \" \" (map nil->str) xs)))\n (defn sayp [ & xs] (js/alert (str-join \" \" (map nil->str) xs)))\n (defn logf [fmt & xs] (console-log (format* fmt xs)))\n (defn sayf [fmt & xs] (js/alert (format* fmt xs)))))\n\n#?(:cljs\n (defn get-win-loc\n \"Returns current window location as\n {:keys [href protocol hostname host pathname search hash]}.\"\n []\n (when-let [loc (oget js-?window \"location\")]\n {;; Ref. <http://bl.ocks.org/abernier/3070589>\n :href (.-href loc) ; \"http://www.example.org:80/foo/bar?q=baz#bang\"\n :protocol (.-protocol loc) ; \"http:\" ; Note the :\n :hostname (.-hostname loc) ; \"example.org\"\n :host (.-host loc) ; \"example.org:80\"\n :pathname (.-pathname loc) ; \"/foo/bar\"\n :search (.-search loc) ; \"?q=baz\"\n :hash (.-hash loc) ; \"#bang\"\n })))\n\n#?(:cljs (def ^:private default-xhr-pool_ (delay (goog.net.XhrIoPool.))))\n#?(:cljs\n (defn ajax-call\n \"Queues a lightweight Ajax call with Google Closure's `goog.net.XhrIo`\n and returns nil, or the resulting `goog.net.XhrIo` instance if one was\n immediately available from the XHR pool:\n\n (ajax-call\n \\\"http://localhost:8080/my-post-route\\\" ; Endpoint URL\n\n {:method :post ; \u2208 #{:get :post :put}\n :resp-type :text ; \u2208 #{:auto :text :edn :json :xml\n ; :bin/array-buffer :bin/blob} ; Expected response type\n\n :headers {\\\"Content-Type\\\" \\\"text/plain\\\"} ; Request headers\n :params {:username \\\"Rich Hickey\\\" :type \\\"Awesome\\\"} ; Request params\n\n :timeout-ms 10000 ; Request timeout in msecs\n :with-credentials? false ; Enable if using CORS\n :xhr-pool my-xhr-pool ; Optional `goog.net.XhrIoPool` instance or delay\n :xhr-timeout-ms 2500 ; Optional max msecs to wait on pool for `XhrIo`\n :xhr-cb-fn (fn [xhr]) ; Optional fn to call with `XhrIo` from pool when available\n }\n\n (fn callback [resp-map]\n (let [{:keys [success? ?status ?error ?content ?content-type]} resp-map]\n ;; ?status ; \u2208 #{nil 200 404 ...}, non-nil iff server responded\n ;; ?error ; \u2208 #{nil <http-error-status-code> <exception> :timeout\n :abort :http-error :exception :xhr-pool-depleted :bad-edn}\n (js/alert (str \\\"Ajax response: \\\" resp-map)))))\"\n [url\n {:keys [method body params headers timeout-ms resp-type with-credentials?\n xhr-pool xhr-cb-fn xhr-timeout-ms] :as opts\n :or\n {method :get\n timeout-ms 10000\n resp-type :auto\n xhr-pool default-xhr-pool_\n xhr-timeout-ms 2500}}\n\n callback-fn]\n\n (cond\n :do (truss/have? [:or nil? nat-int?] timeout-ms)\n :let [^goog.net.XhrIoPool xhr-pool (force xhr-pool)]\n :let\n [with-xhr\n (fn [^goog.net.XhrIo xhr]\n (truss/try*\n (let [timeout-ms (or (get opts :timeout) timeout-ms) ; Deprecated opt\n\n {:keys [url+ content content-type]}\n (cond\n (case method (:get :head :options :trace \"GET\" \"HEAD\" \"OPTIONS\" \"TRACE\") true false)\n (when-not (empty? params)\n {:url+ (str url \"?\" (gquery-data/createFromMap (clj->js params)))})\n\n body ; Given explicit body \u2208 #{string js/FormData js/ArrayBuffer ...}\n (if (empty? params)\n {:content body}\n {:content body, :url+ (str url \"?\" (gquery-data/createFromMap (clj->js params)))})\n\n (and (exists? js/FormData) (instance? js/FormData params)) ; Back compatability\n {:content params}\n\n (and (exists? js/FormData) (rsome-kv (fn [_ v] (instance? js/Blob v)) params)) ; Back compatibility\n (let [form-data (js/FormData.)]\n (doseq [[k v] params] (.append form-data (name k) v))\n {:content form-data})\n\n :else\n {:content (str (gquery-data/createFromMap (clj->js params)))\n :content-type \"application/x-www-form-urlencoded;charset=UTF-8\"})\n\n headers (map-keys #(str/lower-case (name %)) headers)\n headers (assoc-some headers \"x-requested-with\"\n (get headers \"x-requested-with\" \"XMLHTTPRequest\"))\n headers (assoc-some headers \"content-type\"\n (get headers \"content-type\" content-type))\n\n progress-listener\n (when-let [pf (get opts :progress-fn)] ; Undocumented\n (.setProgressEventsEnabled xhr true)\n (gevents/listen xhr goog.net.EventType/PROGRESS\n (fn [ev]\n (let [length-computable? (.-lengthComputable ev)\n loaded (.-loaded ev)\n total (.-total ev)\n ?ratio (when (and length-computable? (not= total 0))\n (/ loaded total))]\n (pf\n {:length-computable? length-computable?\n :?ratio ?ratio\n :loaded loaded\n :total total\n :ev ev})))))]\n\n (gevents/listenOnce xhr goog.net.EventType/READY\n (fn [_] (.releaseObject xhr-pool xhr)))\n\n (gevents/listenOnce xhr goog.net.EventType/COMPLETE\n (fn wrapped-callback [resp]\n (let [success? (.isSuccess xhr) ; true iff no error or timeout\n status (.getStatus xhr) ; -1, 200, etc.\n\n [status content-type content error]\n (when (not= status -1) ; Got a response from server\n (let [content-type (.getResponseHeader xhr \"content-type\") ; Case insensitive\n resp-type\n (cond\n (not= resp-type :auto) resp-type\n (nil? content-type) :text\n :else\n (let [ct (str/lower-case content-type)]\n (cond\n (str-contains? ct \"/edn\") :edn\n (str-contains? ct \"/json\") :json\n (str-contains? ct \"/xml\") :xml\n :else :text)))\n\n [content error]\n (case resp-type\n :text [(.getResponseText xhr)]\n :json [(.getResponseJson xhr)]\n :xml [(.getResponseXml xhr)]\n :edn\n (when-let [edn (.getResponseText xhr)]\n (truss/try*\n [(read-edn edn)]\n (catch :all _ [edn :bad-edn])))\n\n [(.getResponse xhr)])]\n\n [status content-type content error]))\n\n success? (and success? (not error))]\n\n (when progress-listener\n (gevents/unlistenByKey progress-listener))\n\n (callback-fn\n {:raw-resp resp\n :xhr xhr ; = (.-target resp)\n :success? success?\n :?status status\n :?content-type content-type\n :?content content\n :?error\n (if success?\n nil\n (cond\n error error ; :bad-edn, etc.\n status status ; Http error status code (e.g. 404)\n :else\n (case (.getLastErrorCode xhr)\n goog.net.ErrorCode/NO_ERROR nil\n goog.net.ErrorCode/EXCEPTION :exception\n goog.net.ErrorCode/HTTP_ERROR :http-error\n goog.net.ErrorCode/ABORT :abort\n goog.net.ErrorCode/TIMEOUT :timeout\n (do :unknown))))}))))\n\n (.setTimeoutInterval xhr (or timeout-ms 0)) ; 0 => no timeout\n (when with-credentials?\n (.setWithCredentials xhr true)) ; Requires xhr v2+\n\n (case resp-type\n (:auto :text :edn) nil\n :json (.setResponseType xhr \"json\")\n :xml (.setResponseType xhr \"document\")\n :bin/array-buffer (.setResponseType xhr \"arraybuffer\")\n :bin/blob (.setResponseType xhr \"blob\")\n (when resp-type (.setResponseType xhr resp-type)))\n\n (.send xhr (or url+ url) (name method) content (clj->js headers))\n\n (when-let [cb xhr-cb-fn] (truss/catching (cb xhr)))\n xhr)\n\n (catch :all e\n (.releaseObject xhr-pool xhr)\n (callback-fn {:?error e})\n nil)))]\n\n :if-let [xhr (.getObject xhr-pool)] ; Available immediately\n (with-xhr xhr)\n\n (zero? (or xhr-timeout-ms 0))\n (do (callback-fn {:?error :xhr-pool-depleted}) nil)\n\n :else\n (let [done?_ (atom false)]\n\n (js/setTimeout\n (fn xhr-timeout []\n (when (compare-and-set! done?_ false true)\n (callback-fn {:?error :xhr-pool-timeout})))\n xhr-timeout-ms)\n\n (.getObject xhr-pool\n (fn xhr-cb [xhr]\n ;; We've acquired xhr after some time\n (if (compare-and-set! done?_ false true)\n (with-xhr xhr)\n (.releaseObject xhr-pool xhr))))\n nil))))\n\n;;;; Ring\n\n#?(:clj\n (defn session-swap\n \"Util to help correctly update Ring sessions (something easy to get wrong!).\n\n Given a Ring request (rreq) and Ring response (rresp), returns a new\n Ring response with the response session updated to be (f <old-session>)\n or (apply f <old-session> args).\"\n [rreq rresp f & args]\n (when rresp\n (let [base (get rresp :session (get rreq :session))\n new-session (if args (apply f base args) (f base))]\n (assoc rresp :session new-session)))))\n\n#?(:clj\n (defn normalize-headers [rreq-or-rresp]\n (when rreq-or-rresp\n (assoc rreq-or-rresp :headers (map-keys str/lower-case (:headers rreq-or-rresp))))))\n\n(comment (normalize-headers {:headers {\"Foo1\" \"bar1\" \"FOO2\" \"bar2\" \"foo3\" \"bar3\"}}))\n\n#?(:clj\n (defn ^:no-doc -ring-merge-headers\n \"Private, don't use.\"\n [h1 h2]\n (reduce-kv\n (fn [m k2 v2]\n (if-let [e1 (find h1 k2)]\n (let [v1 (val e1)\n v3\n (if (vector? v1)\n (if (vector? v2)\n (if (:add (meta v2)) ; vec <- vec\n (into v1 v2)\n (do v2))\n (conj v1 v2)) ; vec <- el\n (if (vector? v2)\n (if (:add (meta v2)) ; el <- vec\n (into [v1] v2)\n (do v2))\n #_[v1 v2] v2)) ; el <- el\n ]\n\n (assoc m k2 v3))\n (assoc m k2 v2)))\n h1\n h2)))\n\n(comment\n (-ring-merge-headers\n {\"a\" \"A1\" \"b\" \"B1\" \"c\" \"C1\"}\n {\"a\" \"A2\" \"b\" ^:add [\"B2\"] \"d\" \"D2\"}))\n\n#?(:clj\n (do\n (defn ring-resp-map [x] (when x (if (map? x) x {:body x})))\n (defn ring-set-body [body rresp] (assoc (ring-resp-map rresp) :body body))\n (defn ring-set-status [code rresp] (assoc (ring-resp-map rresp) :status code))\n (defn ring-set-headers [headers rresp] (assoc (ring-resp-map rresp) :headers headers))\n (defn ring-default-headers [headers rresp] (assoc (ring-resp-map rresp) :headers (-ring-merge-headers headers (get rresp :headers))))\n (defn ring-merge-headers [headers rresp] (assoc (ring-resp-map rresp) :headers (-ring-merge-headers (get rresp :headers) headers)))))\n\n(comment\n (ring-merge-headers {\"BAR\" \"baz\"} {:body \"foo\"})\n (ring-merge-headers {\"bar\" \"baz\"} \"foo\" )\n (ring-merge-headers {\"bar\" ^:add [\"baz2\"]} {:body \"foo\" :headers {\"bar\" \"baz1\"}}))\n\n#?(:clj\n (defn ring-redirect-resp\n ([ url ] (ring-redirect-resp :temp url nil))\n ([kind url ] (ring-redirect-resp kind url nil))\n ([kind url flash]\n {:headers {\"location\" url}\n :body nil\n :flash flash\n :status\n (case kind\n (301 :permanent :perm) 301\n (302 :temporary :temp nil) 302\n kind)})))\n\n(comment (ring-redirect-resp 303 \"/foo\" \"boo!\"))\n\n(defn url-encode\n \"Based on <https://goo.gl/fBqy6e>.\"\n #?(:clj [s & [encoding]] :cljs [s])\n (when s\n #?(:clj (-> (str s)\n (java.net.URLEncoder/encode (str (or encoding \"UTF-8\")))\n (str/replace \"*\" \"%2A\") ; Cautious, <https://stackoverflow.com/a/25149577/1982742>\n (str/replace \"+\" \"%20\") ; Cautious, <https://stackoverflow.com/a/40292770/1982742>\n )\n :cljs (-> (str s)\n (js/encodeURIComponent s)\n (str/replace \"*\" \"%2A\")))))\n\n(defn url-decode\n \"Stolen from <http://goo.gl/99NSR1>.\"\n [s & [encoding]]\n (when s\n #?(:clj (java.net.URLDecoder/decode (str s) (str (or encoding \"UTF-8\")))\n :cljs (js/decodeURIComponent (str s)))))\n\n(comment\n (url-decode (url-encode \"Hello there\"))\n (url-decode \"hello+there\"))\n\n(defn format-query-string [m]\n (let [param (fn [k v] (str (url-encode (as-qname k)) \"=\"\n (url-encode (or (as-?qname v) (str v)))))\n join (fn [strs] (str/join \"&\" strs))]\n (if (empty? m)\n \"\"\n (join\n (for [[k v] m :when (core/some? v)]\n (if (sequential? v)\n (join (mapv (partial param k) (or (seq v) [\"\"])))\n (param k v)))))))\n\n(comment\n (format-query-string {})\n (format-query-string {:k1 \"v1\" :k2 \"v2\" :k3 nil :k4 \"\" :k5 [\"v4a\" \"v4b\" 7] :k6 []})\n (format-query-string {:a/b :c/d})\n (format-query-string {:k nil}) ; Nb to allow removing pre-existing params, etc.\n )\n\n(defn- assoc-conj [m k v]\n (assoc m k (if-let [cur (get m k)] (if (vector? cur) (conj cur v) [cur v]) v)))\n\n(comment (assoc-conj {:a \"a\"} :a \"b\"))\n\n(defn parse-query-params\n \"Based on `ring-codec/form-decode`.\"\n [s & [keywordize? encoding]]\n (if (or (str/blank? s) (not (str-contains? s \"=\")))\n {}\n (let [;; For convenience (e.g. JavaScript win-loc :search)\n s (if (str-starts-with? s \"?\") (subs s 1) s)\n m (reduce\n (fn [m param]\n (if-let [[k v] (str/split param #\"=\" 2)]\n (assoc-conj m (url-decode k encoding) (url-decode v encoding))\n m))\n {}\n (str/split s #\"&\"))]\n (if-not keywordize?\n m\n (map-keys keyword m)))))\n\n(comment\n (parse-query-params nil)\n (parse-query-params \"?foo=bar\" :keywordize)\n (-> {:k1 \"v1\" :k2 \"v2\" :k3 nil :k4 \"\" :k5 [\"v4a\" \"v4b\"] :k6 [] :k7 47}\n (format-query-string)\n (parse-query-params)))\n\n(defn merge-url-with-query-string [url m]\n (let [[url ?qstr] (str/split (str url) #\"\\?\" 2)\n qmap (merge\n (when ?qstr (map-keys keyword (parse-query-params ?qstr)))\n (map-keys keyword m))\n ?qstr (as-?nblank (format-query-string qmap))]\n (if-let [qstr ?qstr] (str url \"?\" qstr) url)))\n\n(comment\n (merge-url-with-query-string \"/\" nil)\n (merge-url-with-query-string \"/?foo=bar\" nil)\n (merge-url-with-query-string \"/?foo=bar\" {\"foo\" \"overwrite\"})\n (merge-url-with-query-string \"/?foo=bar\" {:foo \"overwrite\"})\n (merge-url-with-query-string \"/?foo=bar\" {:foo nil})\n (merge-url-with-query-string \"/?foo=bar\" {:foo2 \"bar2\" :num 5 :foo nil}))\n\n#?(:cljs\n (defn ^string pr-json\n \"Returns given Cljs argument as JSON string.\"\n [x] (.stringify js/JSON (clj->js x :keyword-fn as-qname))))\n\n#?(:cljs\n (defn read-json\n \"Reads given JSON string to return a Cljs value.\"\n ([ s] (read-json false s))\n ([kw-keys? s]\n (cond\n (or (nil? s) (= s \"\")) nil\n (not (string? s))\n (truss/ex-info! \"[encore/read-json] Unexpected arg type (expected string or nil)\"\n {:arg (typed-val s)})\n\n :else\n (if kw-keys?\n (js->clj (js/JSON.parse s) :keywordize-keys true)\n (js->clj (js/JSON.parse s)))))))\n\n;;;; DEPRECATED\n;; {:deprecated \"v<X.Y.Z> (<YYYY-MM-DD>)\" :doc \"Prefer `<replacement>`.\"}\n;; Note `:deprecation-nowarn` meta used as workaround for long-standing\n;; CLJS-2000, Ref. <https://clojure.atlassian.net/browse/CLJS-2000>.\n\n#?(:clj\n (defmacro deprecated\n \"Elides body when `taoensso.elide-deprecated` JVM property or\n `TAOENSSO_ELIDE_DEPRECATED` environment variable is \u2208 #{\\\"true\\\" \\\"TRUE\\\"}.\"\n [& body]\n (let [elide? (get-env {:as :bool} :taoensso.elide-deprecated<.platform>)]\n (when-not elide? `(do ~@body)))))\n\n(deprecated \"Older misc\"\n (defn ^:no-doc -swap-val!\n \"Prefer `latom`.\"\n {:deprecated \"Encore v3.67.0 (2023-09-08)\"}\n [atom_ k f]\n (loop []\n (let [m0 @atom_\n v1 (f (get m0 k))\n m1 (assoc m0 k v1)]\n (if (-cas!? atom_ m0 m1)\n v1\n (recur)))))\n\n #?(:cljs (def ^:no-doc ^:deprecated js-?win js-?window))\n #?(:cljs (def ^:no-doc ^:deprecated regular-num? finite-num?))\n #?(:cljs (def ^:no-doc ^:deprecated get-window-location get-win-loc))\n #?(:clj (def ^:no-doc ^:deprecated srng secure-rng))\n (def ^:no-doc ^:deprecated backport-run! run!)\n (def ^:no-doc ^:deprecated fq-name as-qname)\n (def ^:no-doc ^:deprecated qname as-qname)\n (def ^:no-doc ^:deprecated merge-deep-with nested-merge-with)\n (def ^:no-doc ^:deprecated merge-deep nested-merge)\n (def ^:no-doc ^:deprecated parse-bool as-?bool)\n (def ^:no-doc ^:deprecated parse-int as-?int)\n (def ^:no-doc ^:deprecated parse-float as-?float)\n (def ^:no-doc ^:deprecated swapped* swapped)\n (def ^:no-doc ^:deprecated memoize-a0_ memoize)\n (def ^:no-doc ^:deprecated memoize-a1_ memoize)\n (def ^:no-doc ^:deprecated a0-memoize_ memoize)\n (def ^:no-doc ^:deprecated a1-memoize_ memoize)\n (def ^:no-doc ^:deprecated memoize-1 memoize-last)\n (def ^:no-doc ^:deprecated memoize1 memoize-last)\n (def ^:no-doc ^:deprecated memoize* memoize)\n (def ^:no-doc ^:deprecated memoize_ memoize)\n (def ^:no-doc ^:deprecated nnil? core/some?)\n (def ^:no-doc ^:deprecated nneg-num? nat-num?)\n (def ^:no-doc ^:deprecated nneg-int? nat-int?)\n (def ^:no-doc ^:deprecated nneg-float? nat-float?)\n (def ^:no-doc ^:deprecated uint? nat-int?)\n (def ^:no-doc ^:deprecated pint? pos-int?)\n (def ^:no-doc ^:deprecated nnil= some=)\n (def ^:no-doc ^:deprecated as-?uint as-?nat-int)\n (def ^:no-doc ^:deprecated as-?pint as-?pos-int)\n (def ^:no-doc ^:deprecated as-?ufloat as-?nat-float)\n (def ^:no-doc ^:deprecated as-?pfloat as-?pos-float)\n (def ^:no-doc ^:deprecated as-uint as-nat-int)\n (def ^:no-doc ^:deprecated as-pint as-pos-int)\n (def ^:no-doc ^:deprecated as-ufloat as-nat-float)\n (def ^:no-doc ^:deprecated as-pfloat as-pos-float)\n (def ^:no-doc ^:deprecated run!* run!)\n (def ^:no-doc ^:deprecated nano-time now-nano)\n (def ^:no-doc ^:deprecated -swap-cache! -swap-val!)\n (def ^:no-doc ^:deprecated -unswapped swapped-vec)\n (def ^:no-doc ^:deprecated -vswapped swapped-vec)\n (def ^:no-doc ^:deprecated -swap-k! -swap-val!)\n (def ^:no-doc ^:deprecated update-in* update-in)\n (def ^:no-doc ^:deprecated idx-fn counter)\n (def ^:no-doc ^:deprecated vec* ensure-vec)\n (def ^:no-doc ^:deprecated set* ensure-set)\n (def ^:no-doc ^:deprecated have-transducers? true)\n\n (def ^:no-doc ^:deprecated pval? pnum?)\n (def ^:no-doc ^:deprecated as-?pval as-?pnum)\n (def ^:no-doc ^:deprecated as-pval as-pnum)\n\n ;; Used by old versions of Timbre, Tufte\n (let [nolist? #(contains? #{nil [] #{}} %)]\n (defn ^:no-doc ^:deprecated compile-ns-filter\n ([ns-pattern ] ^:deprecation-nowarn (compile-ns-filter ns-pattern nil))\n ([whitelist blacklist]\n (if (and (nolist? whitelist) (nolist? blacklist))\n (fn [_] true) ; Unfortunate API choice\n (name-filter {:allow whitelist :disallow blacklist})))))\n\n #?(:clj (defn ^:no-doc ^:deprecated set-body [rresp body] (ring-set-body body rresp)))\n #?(:clj (defn ^:no-doc ^:deprecated set-status [rresp code] (ring-set-status code rresp)))\n #?(:clj (defn ^:no-doc ^:deprecated merge-headers [rresp headers] (ring-merge-headers headers rresp)))\n #?(:clj (def ^:no-doc ^:deprecated redirect-resp ring-redirect-resp))\n #?(:clj (defn ^:no-doc ^:deprecated compiling-cljs? []\n (when-let [ns (find-ns 'cljs.analyzer)]\n (when-let [v (ns-resolve ns '*cljs-file*)]\n (boolean @v)))))\n\n #?(:clj\n (defmacro catching\n \"Terse, cross-platform (try* expr (catch :all _)).\n Arities besides #{1 2} are deprecated, prefer `try*` in these cases.\"\n ([ expr] `(truss/try* ~expr (catch :all ~'_)))\n ([error-type expr] `(truss/try* ~expr (catch ~error-type ~'_)))\n\n ;;; Deprecated arities:\n ([try-expr error-sym catch-expr ] `(truss/try* ~try-expr (catch :all ~error-sym ~catch-expr)))\n ([try-expr error-sym catch-expr finally-expr] `(truss/try* ~try-expr (catch :all ~error-sym ~catch-expr) (finally ~finally-expr)))\n ([try-expr error-type error-sym catch-expr finally-expr] `(truss/try* ~try-expr (catch ~error-type ~error-sym ~catch-expr) (finally ~finally-expr)))))\n\n #?(:clj\n (do\n (defmacro ^:no-doc ^:deprecated if-lets [& args] `(taoensso.encore/if-let ~@args))\n (defmacro ^:no-doc ^:deprecated when-lets [& args] `(taoensso.encore/when-let ~@args))\n (defmacro ^:no-doc ^:deprecated if-not* [& args] `(taoensso.encore/if-not ~@args))\n (defmacro ^:no-doc ^:deprecated cond* [& args] `(taoensso.encore/cond ~@args))\n (defmacro ^:no-doc ^:deprecated defonce* [& args] `(taoensso.encore/defonce ~@args))\n (defmacro ^:no-doc ^:deprecated have-in [a1 & an] `(taoensso.encore/have ~a1 :in ~@an))\n (defmacro ^:no-doc ^:deprecated have-in! [a1 & an] `(taoensso.encore/have! ~a1 :in ~@an))\n (defmacro ^:no-doc ^:deprecated cond-throw [& args] `(taoensso.encore/cond! ~@args))\n (defmacro ^:no-doc ^:deprecated catch-errors* [& args] `(taoensso.encore/catching ~@args))\n (defmacro ^:no-doc ^:deprecated use-fixtures* [& args] `(taoensso.encore/use-fixtures ~@args))\n (defmacro ^:no-doc ^:deprecated nano-time* [& args] `(taoensso.encore/now-nano* ~@args))\n (defmacro ^:no-doc ^:deprecated qbench [& args] `(taoensso.encore/quick-bench ~@args))\n (defmacro ^:no-doc ^:deprecated catch-errors [& body] `(truss/try* [(do ~@body) nil] (catch :all e# [nil e#])))\n\n (defmacro ^:no-doc ^:deprecated -vol! [val] `(volatile! ~val))\n (defmacro ^:no-doc ^:deprecated -vol-reset! [vol_ val] `(vreset! ~vol_ ~val))\n (defmacro ^:no-doc ^:deprecated -vol-swap! [vol_ f & args] `(vswap! ~vol_ ~f ~@args))\n\n (defmacro ^:no-doc thrown\n {:deprecated \"Encore v3.31.0 (2022-10-27)\"\n :doc \"Prefer `throws`.\"}\n [& args] `(truss/throws ~@args))))\n\n ;;; Prefer `str-join` when possible (needs Clojure 1.7+)\n #?(:cljs (defn ^:no-doc ^:deprecated undefined->nil [x] (if (undefined? x) nil x)))\n (defn ^:no-doc ^:deprecated spaced-str-with-nils [xs] (str/join \" \" (mapv nil->str xs)))\n (defn ^:no-doc ^:deprecated spaced-str [xs] (str/join \" \" #?(:clj xs :cljs (mapv undefined->nil xs))))\n\n ;; Arg order changed for easier partials, etc.:\n (defn ^:no-doc ^:deprecated approx=\n ([x y ] (approx== x y))\n ([x y signf] (approx== signf x y)))\n\n ;; & coll changed to coll:\n (defn ^:no-doc ^:deprecated join-once [sep & coll] (str-join-once sep coll))\n\n #?(:clj\n (do ;; Used by Carmine <= v2.7.0\n (defmacro ^:no-doc ^:deprecated repeatedly* [n & body] `(repeatedly-into* [] ~n ~@body))\n (defmacro ^:no-doc ^:deprecated repeatedly-into* ; Used by Nippy < v2.10\n [coll n & body] `(repeatedly-into ~coll ~n (fn [] ~@body)))))\n\n (defn ^:no-doc ^:deprecated nnil-set [x] (disj (ensure-set x) nil))\n\n ;;; Arg order changed for easier partials\n (defn ^:no-doc ^:deprecated keys= [m ks] (ks= ks m))\n (defn ^:no-doc ^:deprecated keys<= [m ks] (ks<= ks m))\n (defn ^:no-doc ^:deprecated keys>= [m ks] (ks>= ks m))\n (defn ^:no-doc ^:deprecated keys=nnil? [m ks] (ks-nnil? ks m))\n\n ;; Used by Sente <= v1.4.0-alpha2\n (def ^:no-doc ^:deprecated logging-level (atom :debug)) ; Just ignoring this now\n\n #?(:cljs ; Used by Sente <= v1.1.0\n (defn ^:no-doc ^:deprecated set-exp-backoff-timeout! [nullary-f & [nattempt]]\n (js/setTimeout nullary-f (exp-backoff (or nattempt 0)))))\n\n #?(:cljs\n (do ; Level-based Cljs logging (prefer Timbre v4+)\n (defonce ^:no-doc ^:deprecated ^:dynamic *log-level* :debug)\n (def ^:private log?\n (let [->n {:trace 1 :debug 2 :info 3 :warn 4 :error 5 :fatal 6 :report 7}]\n (fn [level] (>= (->n level) (->n *log-level*)))))\n\n (defn ^:no-doc ^:deprecated tracef [fmt & xs] (when (log? :trace) (apply logf fmt xs)))\n (defn ^:no-doc ^:deprecated debugf [fmt & xs] (when (log? :debug) (apply logf fmt xs)))\n (defn ^:no-doc ^:deprecated infof [fmt & xs] (when (log? :info) (apply logf fmt xs)))\n (defn ^:no-doc ^:deprecated warnf [fmt & xs] (when (log? :warn) (apply logf (str \"WARN: \" fmt) xs)))\n (defn ^:no-doc ^:deprecated errorf [fmt & xs] (when (log? :error) (apply logf (str \"ERROR: \" fmt) xs)))\n (defn ^:no-doc ^:deprecated fatalf [fmt & xs] (when (log? :fatal) (apply logf (str \"FATAL: \" fmt) xs)))\n (defn ^:no-doc ^:deprecated reportf [fmt & xs] (when (log? :report) (apply logf fmt xs)))))\n\n (defn ^:no-doc ^:deprecated greatest [coll & [?comparator]]\n (let [comparator (or ?comparator rcompare)]\n (reduce #(if (pos? (long (comparator %1 %2))) %2 %1) coll)))\n\n (defn ^:no-doc ^:deprecated least [coll & [?comparator]]\n (let [comparator (or ?comparator rcompare)]\n (reduce #(if (neg? (long (comparator %1 %2))) %2 %1) coll)))\n\n (defn ^:no-doc ^:deprecated clj1098 \"Ref. <http://goo.gl/0GzRuz>\" [x] (or x {}))\n\n (defn ^:no-doc ^:deprecated distinct-by\n \"Prefer `xdistinct`.\"\n [keyfn coll]\n (let [step (fn step [xs seen]\n (lazy-seq\n ((fn [[v :as xs] seen]\n (when-let [s (seq xs)]\n (let [v* (keyfn v)]\n (if (contains? seen v*)\n (recur (rest s) seen)\n (cons v (step (rest s) (conj seen v*)))))))\n xs seen)))]\n (step coll #{})))\n\n (defn ^:no-doc ^:deprecated distinctv\n \"Prefer `xdistinct`.\"\n ([ coll] ^:deprecation-nowarn (distinctv identity coll))\n ([keyfn coll]\n (let [tr (reduce (fn [[v seen] in]\n (let [in* (keyfn in)]\n (if-not (contains? seen in*)\n [(conj! v in) (conj seen in*)]\n [v seen])))\n [(transient []) #{}]\n coll)]\n (persistent! (nth tr 0)))))\n\n (defn ^:no-doc ^:deprecated map-kvs [kf vf m]\n \"Prefer `reduce-kv`.\"\n (if-not m {}\n (let [vf (cond (nil? vf) (fn [_ v] v) :else vf)\n kf (cond (nil? kf) (fn [k _] k)\n (identical-kw? kf :keywordize) (fn [k _] (keyword k))\n :else kf)]\n (persistent!\n (reduce-kv (fn [m k v] (assoc! m (kf k v) (vf k v)))\n (transient {}) m)))))\n\n (defn ^:no-doc ^:deprecated as-map [kvs & [kf vf]]\n \"Prefer `reduce-kvs`.\"\n (if (empty? kvs) {}\n (let [vf (cond (nil? vf) (fn [_ v] v) :else vf)\n kf (cond (nil? kf) (fn [k _] k)\n (identical-kw? kf :keywordize) (fn [k _] (keyword k))\n :else kf)]\n (persistent!\n (reduce-kvs\n (fn [m k v] (assoc! m (kf k v) (vf k v))) (transient {}) kvs)))))\n\n (defn ^:no-doc ^:deprecated keywordize-map [m] (map-keys keyword m))\n (defn ^:no-doc ^:deprecated removev [pred coll] (filterv (complement pred) coll))\n (defn ^:no-doc ^:deprecated nvec? [n x] (and (vector? x) (= (count x) n)))\n\n (defn ^:no-doc ^:deprecated memoized [cache f & args]\n (if-not cache ; {<args> <delay-val>}\n (apply f args)\n (deref ^:deprecation-nowarn\n (-swap-val! cache args (fn [?dv] (if ?dv ?dv (delay (apply f args))))))))\n\n (defn- translate-signed-idx [^long signed-idx ^long max-idx]\n (if (>= signed-idx 0)\n (min signed-idx max-idx)\n (max 0 (+ signed-idx max-idx))))\n\n (comment (translate-signed-idx -3 5))\n\n (def ^:no-doc ^:deprecated sentinel (new-object))\n (defn ^:no-doc ^:deprecated sentinel? [x] (identical? x sentinel))\n (defn ^:no-doc ^:deprecated nil->sentinel [x] (if (nil? x) sentinel x))\n (defn ^:no-doc ^:deprecated sentinel->nil [x] (if ^:deprecation-nowarn (sentinel? x) nil x))\n\n (defn ^:no-doc ^:deprecated singleton? [coll] (if (counted? coll) (= (count coll) 1) (not (next coll))))\n (defn ^:no-doc ^:deprecated ->?singleton [coll] (when ^:deprecation-nowarn (singleton? coll) (let [[c1] coll] c1)))\n (defn ^:no-doc ^:deprecated ->vec [x] (cond (vector? x) x (sequential? x) (vec x) :else [x]))\n\n (defn ^:no-doc ^:deprecated fzipmap [ks vs]\n (loop [m (transient {})\n ks (seq ks)\n vs (seq vs)]\n (if-not (and ks vs)\n (persistent! m)\n (recur (assoc! m (first ks) (first vs))\n (next ks)\n (next vs)))))\n\n (defn ^:no-doc ^:deprecated filter-kvs [pred m] (if (nil? m) {} (reduce-kv (fn [m k v] (if (pred k v) m (dissoc m k))) m m)))\n (defn ^:no-doc ^:deprecated remove-kvs [pred m] (if (nil? m) {} (reduce-kv (fn [m k v] (if (pred k v) (dissoc m k) m)) m m)))\n\n (defn ^:no-doc ^:deprecated revery [pred coll] (reduce (fn [acc in] (if (pred in) coll (reduced nil))) coll coll))\n (defn ^:no-doc ^:deprecated revery-kv [pred coll] (reduce-kv (fn [acc k v] (if (pred k v) coll (reduced nil))) coll coll))\n\n (def ^:no-doc ^:deprecated every revery)\n\n (defn ^:no-doc ^:deprecated replace-in [m & ops]\n (reduce\n (fn [m ?op]\n (if-not ?op\n m ; Support conditional ops\n (let [[type ks valf] ?op\n f (if (identical-kw? type :reset) (fn [_] valf) valf)]\n (update-in m ks nil f))))\n m\n ops))\n\n (let [return (fn [m0 v0 m1 v1] [v0 v1])]\n (defn ^:no-doc ^:deprecated swap-in!*\n \"Prefer `swap-in!` with `swapped` return value.\"\n ([atom_ f] (-swap-k0! return atom_ f))\n ([atom_ ks f] (-swap-kn! return atom_ ks nil f))\n ([atom_ ks not-found f] (-swap-kn! return atom_ ks not-found f)))\n\n (defn ^:no-doc ^:deprecated swap-val!*\n \"Prefer `swap-val!` with `swapped` return value.\"\n ([atom_ k f] (-swap-k1! return atom_ k nil f))\n ([atom_ k not-found f] (-swap-k1! return atom_ k not-found f))))\n\n (def ^:no-doc ^:deprecated dswap! swap-in!*)\n (def ^:no-doc ^:deprecated swap!* swap-in!*)\n\n #?(:clj (defalias ^:no-doc ^:deprecated taoensso.truss/get-dynamic-assertion-data))\n #?(:clj (defalias ^:no-doc ^:deprecated taoensso.truss/with-dynamic-assertion-data))\n\n (defalias ^:no-doc compile-str-filter name-filter\n {:deprecated \"Encore v3.67.0 (2023-09-08)\"\n :doc \"Renamed to `name-filter`.\"})\n\n (defn ^:no-doc ^:deprecated kw-identical?\n \"Prefer `identical-kw?` macro.\"\n #?(:cljs {:tag 'boolean})\n [x y] (identical-kw? x y))\n\n #?(:clj\n (defmacro ^:no-doc -if-cas!\n \"Prefer `-cas!?`.\"\n {:deprecated \"Encore v3.67.0 (2023-09-08)\"}\n [atom_ old-val new-val then & [else]]\n `(if (-cas!? ~atom_ ~old-val ~new-val) ~then ~else)))\n\n (def* ^:const ^:no-doc system-newline\n \"Prefer `newline`.\"\n {:deprecated \"Encore v3.68.0 (2023-09-25)\"}\n newline)\n\n #?(:clj (defalias ^{:no-doc true :deprecated \"v3.68.0 (2023-09-25)\"} -unexpected-arg truss/unexpected-arg!))\n\n (def* ^:no-doc -matching-error\n \"Prefer `matching-error`.\"\n {:deprecated \"Encore v3.70.0 (2023-10-17)\"}\n truss/matching-error)\n\n (defn ^:no-doc rate-limiter*\n \"Prefer `rate-limiter`.\"\n {:deprecated \"Encore v3.120.0 (2024-09-22)\"}\n ([ spec] (rate-limiter {:with-state? true} spec))\n ([opts spec] (rate-limiter (assoc opts :with-state? true) spec)))\n\n (def* ^:no-doc limiter* \"Prefer `rate-limiter*`.\" {:deprecated \"Encore v3.73.0 (2023-10-30)\"} rate-limiter*)\n (def* ^:no-doc limiter \"Prefer `rate-limiter`.\" {:deprecated \"Encore v3.73.0 (2023-10-30)\"} rate-limiter)\n (def* ^:no-doc dis-assoc-some \"Prefer `reassoc-some`.\" {:deprecated \"Encore v3.87.0 (2024-02-29)\"} reassoc-some)\n (def* ^:no-doc println-atomic \"Prefer `println`.\" {:deprecated \"Encore v3.98.0 (2024-04-08)\"} println)\n (def* ^:no-doc -merge-with \"Prefer `merge-with*`.\" {:deprecated \"Encore v3.113.0 (2024-07-03)\"} merge-with*)\n (def* ^:no-doc fast-merge \"Prefer `merge`.\" {:deprecated \"Encore v3.113.0 (2024-07-03)\"} merge)\n (def* ^:no-doc secure-rand-bytes \"Prefer `rand-bytes`.\" {:deprecated \"Encore v3.115.0 (2024-08-18)\"} (partial rand-bytes true))\n (def* ^:no-doc round* \"Prefer `round`.\" {:deprecated \"Encore v3.126.0 (2024-10-23)\"} round)\n\n #?(:clj (def* ^:no-doc get-host-ip \"Prefer `host-ip`.\" {:deprecated \"Encore v3.115.0 (2024-08-18)\"} host-ip))\n #?(:clj (def* ^:no-doc get-hostname \"Prefer `hostname`.\" {:deprecated \"Encore v3.115.0 (2024-08-18)\"} hostname))\n #?(:cljs (def* ^:no-doc ajax-lite \"Prefer `ajax-call`.\" {:deprecated \"Encore v3.74.0 (2023-11-06)\"} ajax-call))\n #?(:clj\n (do\n (defmacro ^:no-doc ^:deprecated do-nil [& body] `(do ~@body nil))\n (defmacro ^:no-doc ^:deprecated do-false [& body] `(do ~@body false))\n (defmacro ^:no-doc ^:deprecated do-true [& body] `(do ~@body true))))\n\n #?(:clj\n (defmacro ^:no-doc deftype-print-methods \"Prefer `def-print`.\"\n {:deprecated \"Encore v3.98.0 (2024-04-08)\"}\n [& types]\n `(do\n ~@(map\n (fn [type]\n `(defmethod print-method ~type [~'x ~(with-meta 'w {:tag 'java.io.Writer})]\n (.write ~'w (str ~(str \"#\" *ns* \".\") ~'x)))) types))))\n\n (defn ^:no-doc error-data\n \"Prefer `ex-map`.\"\n {:deprecated \"Encore v3.98.0 (2024-04-08)\"}\n [x]\n (when-let [data-map\n (and x\n (or\n (core/ex-data x) ; ExceptionInfo\n #?(:clj (when (instance? Throwable x) {})\n :cljs {})))]\n\n (let [base-map\n #?(:clj\n (let [^Throwable t x] ; (catch Throwable t <...>)\n {:err-type (type t)\n :err-msg (.getLocalizedMessage t)\n :err-cause (.getCause t)})\n\n :cljs\n (let [err x] ; (catch :default t <...)\n {:err-type (type err)\n :err-msg (.-message err)\n :err-cause (.-cause err)}))]\n\n #_(assoc base-map :err-data data-map)\n (conj base-map data-map))))\n\n #?(:clj\n (defmacro ^:no-doc caught-error-data\n \"Prefer `throws?`.\"\n {:deprecated \"Encore v3.98.0 (2024-04-08)\"}\n [& body] `(truss/try* (do ~@body nil) (catch :all e# (error-data e#)))))\n\n #?(:clj\n (defn ^:no-doc ^:deprecated ident-hex-str \"Prefer `hex-ident-str`.\"\n ^String [obj] (str \"0x\" (hex-ident-str obj))))\n\n (defn ^:no-doc when?\n \"Prefer `is`.\" {:deprecated \"Encore v3.98.0 (2024-04-08)\"}\n [pred x] (when (truss/catching (pred x)) x))\n\n #?(:default (defn ^:no-doc call-form? \"Prefer `list-form`.\" {:deprecated \"Encore v3.105.0 (2024-04-29)\"} [x] (list-form? x)))\n #?(:clj\n (defn ^:no-doc call-in-form?\n [x]\n {:deprecated \"Encore v3.105.0 (2024-04-29)\"}\n (when x\n (cond\n (list-form? x) true\n (coll? x) (if (rsome call-in-form? x) true false)\n :else false)))))\n\n(deprecated \"2024-01 New env config API\"\n #?(:clj\n (do\n (defn- get-config-opts [opts]\n (let [edn? (= (get opts :as) :edn)\n spec (get opts :prop)\n spec (if edn? (keyword (str (as-qname spec) \"<.edn>\")) spec)]\n (dissoc (assoc opts :return :legacy :spec spec) :prop)))\n\n (defmacro ^:no-doc get-config\n {:deprecated \"Encore v3.75.0 (2024-01-29)\" :doc \"Prefer `get-env`.\"}\n [opts] `(get-env ~(get-config-opts opts)))\n\n (defmacro ^:no-doc get-sys-val*\n {:deprecated \"Encore v3.75.0 (2024-01-29)\" :doc \"Prefer `get-env`.\"}\n ([spec ] ^:deprecation-nowarn `(get-sys-val* ~spec ~spec ~spec))\n ([spec env ] ^:deprecation-nowarn `(get-sys-val* ~spec ~env ~spec))\n ([spec env res] `(get-env {:as :str :spec ~spec :env ~env :res ~res})))\n\n (defmacro ^:no-doc get-sys-bool*\n {:deprecated \"Encore v3.75.0 (2024-01-29)\" :doc \"Prefer `get-env`.\"}\n ([default spec env res] `(get-env {:as :bool :default ~default :spec ~spec :env ~env :res ~res}))\n ([default spec env ] `(get-env {:as :bool :default ~default :spec ~spec :env ~env }))\n ([default spec ] `(get-env {:as :bool :default ~default :spec ~spec })))\n\n (defmacro ^:no-doc read-sys-val*\n {:deprecated \"Encore v3.75.0 (2024-01-29)\" :doc \"Prefer `get-env`.\"}\n ([spec env res] `(get-env {:as :edn :spec ~spec :env ~env :res ~res}))\n ([spec env ] `(get-env {:as :edn :spec ~spec :env ~env }))\n ([spec ] `(get-env {:as :edn :spec ~spec })))\n\n (defn ^:no-doc get-sys-val\n {:deprecated \"Encore v3.66.0 (2023-08-23)\" :doc \"Prefer `get-env`.\"}\n ([spec env] (get-env* {:as :str :spec spec :env env}))\n ([spec ] (get-env* {:as :str :spec spec})))\n\n (defn ^:no-doc read-sys-val\n {:deprecated \"Encore v3.66.0 (2023-08-23)\" :doc \"Prefer `get-env`.\"}\n ([spec env] (get-env* {:as :edn :spec spec :env env}))\n ([spec ] (get-env* {:as :edn :spec spec})))\n\n (defn ^:no-doc get-sys-bool\n {:deprecated \"Encore v3.66.0 (2023-08-23)\" :doc \"Prefer `get-env`.\"}\n ([default spec env] (get-env* {:as :bool :default default :spec spec :env env}))\n ([default spec ] (get-env* {:as :bool :default default :spec spec})))\n\n (defn ^:no-doc load-edn-config\n {:deprecated \"Encore v3.66.0 (2023-08-23)\" :doc \"Prefer `get-env`.\"}\n [opts]\n (let [{:keys [error-data validator default]} opts\n have-default? (contains? opts :default)]\n (try\n (when (and validator have-default?) (truss/have? validator default))\n (when-let [{:keys [config] :as m} (get-env* (get-config-opts opts))]\n (let [config\n (if (and (map? config) (map? default))\n (nested-merge default config)\n (do config))]\n (when validator (truss/have? validator config))\n (assoc m :config config)))\n\n (catch Throwable t\n (truss/ex-info! \"[encore/load-edn-config] Error loading edn config\"\n (assoc error-data :opts opts) t))))))))\n\n(deprecated \"2024-10 New sub API\"\n (defn ^:no-doc get-subvec \"Prefer `subvec`.\"\n {:deprecated \"Encore v3.126.0 (2024-10-23)\"}\n ([v start ] (or (subvec v start) []))\n ([v start end] (or (subvec v start end) [])))\n\n (defn ^:no-doc get-subvector \"Prefer `subvec`.\"\n {:deprecated \"Encore v3.126.0 (2024-10-23)\"}\n ([v start ] (or (subvec v :by-len start :max) []))\n ([v start len] (or (subvec v :by-len start len) [])))\n\n (defn ^:no-doc get-substr-by-idx \"Prefer `substr`.\"\n {:deprecated \"Encore v3.126.0 (2024-10-23)\"}\n ([s start ] ^:deprecation-nowarn (get-substr-by-idx s start nil))\n ([s start end]\n (let [len (count s)\n start (long (or start 0))\n end (long (or end len))\n start (if (< start 0) (+ start len) start)\n end (if (< end 0) (+ end len) end)]\n (substr s :by-idx start end))))\n\n (defn ^:no-doc get-substr-by-len \"Prefer `substr`.\"\n {:deprecated \"Encore v3.126.0 (2024-10-23)\"}\n ([s start ] (substr s :by-len (or start 0) :max))\n ([s start len] (substr s :by-len (or start 0) (or len :max))))\n\n (defn ^:no-doc get-substr \"Prefer `substr`.\"\n {:deprecated \"Encore v3.26.0 (2022-10-14)\"}\n ([s start ] (or (substr s start) \"\"))\n ([s start end] (or (substr s start end) \"\")))\n\n (defn ^:no-doc get-substring \"Prefer `substr`.\"\n {:deprecated \"Encore v3.26.0 (2022-10-14)\"}\n ([s start ] (substr s :by-len start :max))\n ([s start len] (substr s :by-len start len)))\n\n (def* ^:no-doc ^:deprecated ?subvec<idx \"Prefer `subvec`.\" (comp not-empty get-subvec))\n (def* ^:no-doc ^:deprecated ?subvec<len \"Prefer `subvec`.\" (comp not-empty get-subvector))\n (def* ^:no-doc ^:deprecated subvec* \"Prefer `subvec`.\" get-subvector)\n (def* ^:no-doc ^:deprecated ?substr<idx \"Prefer `substr`.\" (comp as-?nempty-str get-substr))\n (def* ^:no-doc ^:deprecated ?substr<len \"Prefer `substr`.\" (comp as-?nempty-str get-substring)))\n\n(deprecated \"2025-02 Truss v2\"\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/ex-root)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/ex-type)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/ex-map*)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/ex-map)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/ex-chain)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/matching-error)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/catching-rf)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/catching-xform)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} get-truss-data taoensso.truss/get-data)\n #?(:clj\n (do\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/try*)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/throws)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/throws?)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/critical-error?)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/keep-callsite)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} truss/unexpected-arg!)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} taoensso.truss/have)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} taoensso.truss/have!)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} taoensso.truss/have?)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} taoensso.truss/have!?)\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} with-truss-data taoensso.truss/with-data)))\n\n (defn ^:no-doc ex-message {:deprecated \"v3.135.0 (2025-02-27)\"} [x]\n #?(:clj (when (instance? Throwable x) (.getMessage ^Throwable x))\n :cljs (when (instance? js/Error x) (.-message x))))\n\n (defn ^:no-doc ex-data {:deprecated \"v3.135.0 (2025-02-27)\"} [x]\n #?(:clj (when (instance? clojure.lang.IExceptionInfo x) (.getData ^clojure.lang.IExceptionInfo x))\n :cljs (when (instance? ExceptionInfo x) (.-data x))))\n\n (defn ^:no-doc ex-cause {:deprecated \"v3.135.0 (2025-02-27)\"} [x]\n #?(:clj (when (instance? Throwable x) (.getCause ^Throwable x))\n :cljs (when (instance? ExceptionInfo x) (.-cause x)))))\n\n(deprecated \"2025-02 Misc\"\n #?(:clj (defalias ^:no-doc ^:deprecated and* and?))\n (defalias ^{:no-doc true :deprecated \"v3.135.0 (2025-02-27)\"} core/some?)\n #?(:clj (defmacro ^:no-doc try-eval {:deprecated \"v3.135.0 (2025-02-27)\"} [form] `(compile-if ~form ~form nil)))\n #?(:clj\n (defmacro ^:no-doc or-some\n {:deprecated \"v3.135.0 (2025-02-27)\"}\n ([ ] nil)\n ([x ] x)\n ([x & next] `(let [x# ~x] (if (identical? x# nil) (or-some ~@next) x#)))))\n\n (defn ^:no-doc is!\n {:deprecated \"v3.135.0 (2025-02-27)\"}\n ([ x ] ^:deprecation-nowarn (is! core/some? x nil)) ; Nb different to single-arg `have`\n ([pred x ] ^:deprecation-nowarn (is! pred x nil))\n ([pred x data]\n (if (truss/catching (pred x))\n x\n (truss/ex-info! (str \"[encore/is!] \" (str pred) \" failed against arg: \" (pr-str x))\n (assoc-some {:pred pred, :arg (typed-val x)} :data data)))))\n\n #?(:clj\n (defmacro ^:no-doc check-some\n {:deprecated \"v3.135.0 (2025-02-27)\"}\n ([test & more] `(or ~@(map (fn [test] `(check-some ~test)) (cons test more))))\n ([test ]\n (let [[error-id test] (if (vector? test) test [nil test])]\n `(let [[test# err#] (truss/try* [~test nil] (catch :all err# [nil err#]))]\n (when-not test# (or ~error-id '~test :check/falsey)))))))\n\n #?(:clj\n (defmacro ^:no-doc check-all\n {:deprecated \"v3.135.0 (2025-02-27)\"}\n ([test ] `(check-some ~test))\n ([test & more]\n `(let [errors# (filterv identity [~@(map (fn [test] `(check-some ~test)) (cons test more))])]\n (not-empty errors#)))))\n\n (defn ^:no-doc ^:deprecated pred [pred-fn] pred-fn)\n (defn ^:no-doc ^:deprecated pred-fn [x] (when (fn? x) x))\n #?(:clj\n (defmacro ^:deprecated binding [bindings & body]\n (if (:ns &env)\n `(cljs.core/binding ~bindings ~@body)\n `(clojure.core/binding ~bindings ~@body)))))\n"],"x_google_ignoreList":[0]}
|