[new] Add base-opts arg to impl signal creator

This commit is contained in:
Peter Taoussanis 2025-03-03 09:17:47 +01:00
parent 46e82f0816
commit e32ed8deb5
2 changed files with 204 additions and 200 deletions

View file

@ -242,7 +242,7 @@
(truss/keep-callsite
`(impl/signal! ~(args->opts args)))))
(comment (:coords (with-signal (signal!))))
(comment (:coords (macroexpand '(with-signal (signal!)))))
#?(:clj
(defn- merge-or-assoc-opts [m macro-form k v]

View file

@ -511,9 +511,11 @@
(defmacro signal-allowed?
"Returns true iff signal with given opts would meet filtering conditions.
Wrapped for public API."
[opts]
(valid-opts! opts)
(let [opts (merge {:kind :generic, :level :info} opts)
([ opts] (truss/keep-callsite `(signal-allowed? nil ~opts)))
([base-opts opts]
(valid-opts! (or base-opts {}))
(valid-opts! (or opts {}))
(let [opts (merge {:kind :generic, :level :info} base-opts opts)
{:keys [#_callsite-id elide? allow?]}
(sigs/filter-call
{:cljs? (boolean (:ns &env))
@ -523,19 +525,21 @@
(assoc opts
:ns (auto-> (get opts :ns :auto) (str *ns*))))]
(if elide? false `(if ~allow? true false)))))
(if elide? false `(if ~allow? true false))))))
(comment (macroexpand '(signal-allowed? {:level :info})))
#?(:clj
(defmacro signal!
"Generic low-level signal creator. Wrapped for public API."
[opts]
(valid-opts! opts)
([ opts] (truss/keep-callsite `(signal!? nil ~opts)))
([base-opts opts]
(valid-opts! (or base-opts {}))
(valid-opts! (or opts {}))
(let [cljs? (boolean (:ns &env))
clj? (not cljs?)
opts (merge {:kind :generic, :level :info} opts)
opts (merge {:kind :generic, :level :info} base-opts opts)
{run-form :run} opts
ns-form* (get opts :ns :auto)
@ -766,7 +770,7 @@
(if-let [iife-wrap? true #_cljs?]
;; Small perf hit to improve compatibility within `go` and other IOC-style bodies
`((fn [] ~final-form))
(do final-form)))))))
(do final-form))))))))
(comment
(with-signal (signal! {:level :warn :let [x :x] :msg ["Test" "message" x] :data {:a :A :x x} :run (+ 1 2)}))