[new] Add & opts support to signal!, signal-allowed?

This commit is contained in:
Peter Taoussanis 2024-12-24 10:18:48 +01:00
parent 8cd4ca97e6
commit a04f255146

View file

@ -384,14 +384,16 @@
(case macro-id (case macro-id
:signal! ; opts => allowed? / unconditional run result (value or throw) :signal! ; opts => allowed? / unconditional run result (value or throw)
'([{:as opts-map :keys '( [& opts-kvs]
[{:as opts-map :keys
[#_defaults #_elide? #_allow? #_expansion-id, ; Undocumented [#_defaults #_elide? #_allow? #_expansion-id, ; Undocumented
elidable? location #_location* inst uid middleware middleware+, elidable? location #_location* inst uid middleware middleware+,
sample-rate kind ns id level when rate-limit rate-limit-by, sample-rate kind ns id level when rate-limit rate-limit-by,
ctx ctx+ parent root trace?, do let data msg error run & kvs]}]) ctx ctx+ parent root trace?, do let data msg error run & kvs]}])
:signal-allowed? ; opts => allowed? :signal-allowed? ; opts => allowed?
'([{:as opts-map :keys '( [& opts-kvs]
[{:as opts-map :keys
[#_defaults #_elide? #_allow? #_expansion-id, ; Undocumented [#_defaults #_elide? #_allow? #_expansion-id, ; Undocumented
elidable? location #_location* #_inst #_uid #_middleware #_middleware+, elidable? location #_location* #_inst #_uid #_middleware #_middleware+,
sample-rate kind ns id level when rate-limit rate-limit-by, sample-rate kind ns id level when rate-limit rate-limit-by,
@ -493,7 +495,8 @@
#?(:clj #?(:clj
(defn- valid-opts! [x] (defn- valid-opts! [x]
(when-not (map? x) (if (map? x)
(do x)
(throw (throw
;; We require const map keys, but vals may require eval ;; We require const map keys, but vals may require eval
(ex-info "Telemere signal opts must be a map with const (compile-time) keys." (ex-info "Telemere signal opts must be a map with const (compile-time) keys."
@ -505,13 +508,9 @@
"Generic low-level signal call, also aliased in Encore." "Generic low-level signal call, also aliased in Encore."
{:doc (signal-docstring :signal!) {:doc (signal-docstring :signal!)
:arglists (signal-arglists :signal!)} :arglists (signal-arglists :signal!)}
[arg1 & more]
;; TODO Maybe later, once we're sure we don't want additional arities? (let [opts (valid-opts! (if more (apply hash-map arg1 more) arg1))
;; Remember to also update signal-arglists, etc. defaults (enc/merge {:kind :generic, :level :info} (get opts :defaults))
;; ([arg1 & more] (enc/keep-callsite `(signal! ~(apply hash-map arg1 more))))
([opts]
(valid-opts! opts)
(let [defaults (enc/merge {:kind :generic, :level :info} (get opts :defaults))
opts (enc/merge defaults (dissoc opts :defaults)) opts (enc/merge defaults (dissoc opts :defaults))
cljs? (boolean (:ns &env)) cljs? (boolean (:ns &env))
clj? (not cljs?) clj? (not cljs?)
@ -740,7 +739,7 @@
(if-let [iife-wrap? true #_cljs?] (if-let [iife-wrap? true #_cljs?]
;; Small perf hit to improve compatibility within `go` and other IOC-style bodies ;; Small perf hit to improve compatibility within `go` and other IOC-style bodies
`((fn [] ~final-form)) `((fn [] ~final-form))
(do final-form)))))))) (do final-form)))))))
(comment (comment
(with-signal (signal! {:level :warn :let [x :x] :msg ["Test" "message" x] :data {:a :A :x x} :run (+ 1 2)})) (with-signal (signal! {:level :warn :let [x :x] :msg ["Test" "message" x] :data {:a :A :x x} :run (+ 1 2)}))
@ -768,9 +767,10 @@
;; Used also for interop (tools.logging, SLF4J), etc. ;; Used also for interop (tools.logging, SLF4J), etc.
{:arglists (signal-arglists :signal-allowed?)} {:arglists (signal-arglists :signal-allowed?)}
[opts] [arg1 & more]
(valid-opts! opts) (let [opts (valid-opts! (if more (apply hash-map arg1 more) arg1))
(let [defaults (get opts :defaults)
defaults (get opts :defaults)
opts (merge defaults (dissoc opts :defaults)) opts (merge defaults (dissoc opts :defaults))
{:keys [#_expansion-id #_location elide? allow?]} {:keys [#_expansion-id #_location elide? allow?]}