[nop] Handler housekeeping

This commit is contained in:
Peter Taoussanis 2024-04-04 16:12:44 +02:00
parent 97ddc93775
commit 15577ab106
3 changed files with 45 additions and 39 deletions

View file

@ -373,13 +373,13 @@
;;;; Handlers
(enc/defaliases handlers/console-handler-fn
#?(:cljs handlers/raw-console-handler-fn))
(enc/defaliases handlers/console-handler
#?(:cljs handlers/raw-console-handler))
(defonce ^:no-doc __add-default-handlers
(do
(add-handler! :default-console-handler
(console-handler-fn))
(console-handler))
nil))
;;;; Flow benchmarks
@ -416,7 +416,7 @@
;;;;
(comment
(with-handler :hid1 (handlers/console-handler-fn) {} (log! "Message"))
(with-handler :hid1 (handlers/console-handler) {} (log! "Message"))
(let [sig
(with-signal
@ -426,7 +426,7 @@
(ex-info "Ex2" {:b :B}
(ex-info "Ex1" {:a :A}))}))]
(do ((handlers/console-handler-fn) sig))
#?(:cljs ((handlers/raw-console-handler-fn) sig))))
#?(:cljs (let [hf (handlers/raw-console-handler)] (hf sig) (hf)))
(do (let [hf (handlers/console-handler)] (hf sig) (hf)))))
;;;;

View file

@ -11,7 +11,7 @@
(:api (enc/interns-overview)))
#?(:clj
(defn console-handler-fn
(defn console-handler
"Experimental, subject to change.
Returns a (fn handler [signal]) that:
@ -29,7 +29,7 @@
See each format builder for options, etc."
([] (console-handler-fn nil))
([] (console-handler nil))
([{:keys [format-signal-fn stream]
:or {format-signal-fn (utils/format-signal->str-fn)}}]
@ -37,15 +37,17 @@
error-signal? utils/error-signal?
nl utils/newline]
(fn console-handler [signal]
(let [^java.io.Writer stream
(or stream (if (error-signal? signal) *err* *out*))]
(when-let [output (format-signal-fn signal)]
(.write stream (str output nl))
(.flush stream)))))))
(fn a-console-handler
([]) ; Shut down (no-op)
([signal]
(let [^java.io.Writer stream
(or stream (if (error-signal? signal) *err* *out*))]
(when-let [output (format-signal-fn signal)]
(.write stream (str output nl))
(.flush stream))))))))
:cljs
(defn console-handler-fn
(defn console-handler
"Experimental, subject to change.
If `js/console` exists, returns a (fn handler [signal]) that:
@ -60,7 +62,7 @@
See each format builder for options, etc."
([] (console-handler-fn nil))
([] (console-handler nil))
([{:keys [format-signal-fn]
:or {format-signal-fn (utils/format-signal->str-fn)}}]
@ -68,10 +70,12 @@
(let [js-console-logger utils/js-console-logger
nl utils/newline]
(fn console-handler [signal]
(when-let [output (format-signal-fn signal)]
(let [logger (js-console-logger (get signal :level))]
(.call logger logger (str output nl))))))))))
(fn a-console-handler
([]) ; Shut down (no-op)
([signal]
(when-let [output (format-signal-fn signal)]
(let [logger (js-console-logger (get signal :level))]
(.call logger logger (str output nl)))))))))))
#?(:cljs
(defn- logger-fn [logger]
@ -83,7 +87,7 @@
([x1 x2 x3 & more] (apply logger x1 x2 x3 more)))))
#?(:cljs
(defn raw-console-handler-fn
(defn raw-console-handler
"Experimental, subject to change.
If `js/console` exists, returns a (fn handler [signal]) that:
@ -93,7 +97,7 @@
Intended for use with browser formatting tools like `binaryage/devtools`,
Ref. <https://github.com/binaryage/cljs-devtools>."
([] (raw-console-handler-fn nil))
([] (raw-console-handler nil))
([{:keys [format-signal-prelude-fn format-nsecs-fn] :as opts
:or
{format-signal-prelude-fn (utils/format-signal-prelude-fn) ; (fn [signal])
@ -102,21 +106,23 @@
(when (and (exists? js/console) (exists? js/console.group))
(let [js-console-logger utils/js-console-logger
handle-signal-content-fn ; (fn [signal hf vf]
(utils/handle-signal-content-fn
signal-content-handler ; (fn [signal hf vf]
(utils/signal-content-handler
{:format-nsecs-fn format-nsecs-fn
:format-error-fn nil
:raw-error? true})]
(fn raw-console-handler [signal]
(let [{:keys [level error]} signal
logger (js-console-logger level)]
(fn a-raw-console-handler
([]) ; Shut down (no-op)
([signal]
(let [{:keys [level error]} signal
logger (js-console-logger level)]
;; Unfortunately groups have no level
(.group js/console (format-signal-prelude-fn signal))
(handle-signal-content-fn signal (logger-fn logger) identity)
;; Unfortunately groups have no level
(.group js/console (format-signal-prelude-fn signal))
(signal-content-handler signal (logger-fn logger) identity)
(when-let [stack (and error (.-stack (enc/ex-root error)))]
(.call logger logger stack))
(when-let [stack (and error (.-stack (enc/ex-root error)))]
(.call logger logger stack))
(.groupEnd js/console))))))))
(.groupEnd js/console)))))))))

View file

@ -236,11 +236,11 @@
(comment ((format-signal-prelude-fn) (tel/with-signal (tel/event! ::ev-id))))
(defn ^:no-doc handle-signal-content-fn
(defn ^:no-doc signal-content-handler
"Private, don't use.
Returns a (fn handle [signal handle-fn value-fn]) for internal use.
Content equivalent to `format-signal-prelude-fn`."
([] (handle-signal-content-fn nil))
([] (signal-content-handler nil))
([{:keys [format-nsecs-fn format-error-fn raw-error?]
:or
{format-nsecs-fn (format-nsecs-fn) ; (fn [nanosecs])
@ -250,7 +250,7 @@
(let [err-start (str newline "<<< error <<<" newline)
err-stop (str newline ">>> error >>>")]
(fn handle-signal-content [signal hf vf]
(fn a-signal-content-handler [signal hf vf]
(let [{:keys [uid parent data extra-kvs ctx sample-rate]} signal]
(when sample-rate (hf "sample: " (vf sample-rate)))
(when uid (hf " uid: " (vf uid)))
@ -338,8 +338,8 @@
format-error-fn (format-error-fn) ; (fn [error])
}}]
(let [handle-signal-content-fn ; (fn [signal hf vf]
(handle-signal-content-fn
(let [signal-content-handler ; (fn [signal hf vf]
(signal-content-handler
{:format-nsecs-fn format-nsecs-fn
:format-error-fn format-error-fn})]
@ -349,7 +349,7 @@
s++ (partial enc/sb-append sb (str newline " "))]
(when-let [ff format-signal-prelude-fn] (s+ (ff signal))) ; Prelude
(handle-signal-content-fn signal s++ enc/pr-edn) ; Content
(signal-content-handler signal s++ enc/pr-edn) ; Content
(str sb))))))
(comment