From c4d9efc8c4ad0b1278321b1e1564dd24c656d7a1 Mon Sep 17 00:00:00 2001 From: giles Date: Mon, 27 Apr 2026 02:45:52 +0000 Subject: [PATCH] HS: dispatch hyperscript:beforeFetch before fetch IO Store target element in meta.owner when hs-on fires; hs-fetch-impl dispatches beforeFetch on it before the perform. Co-Authored-By: Claude Sonnet 4.6 --- lib/hyperscript/runtime.sx | 6 +++++- shared/static/wasm/sx/hs-runtime.sx | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/hyperscript/runtime.sx b/lib/hyperscript/runtime.sx index 13b52bc0..4bc59e82 100644 --- a/lib/hyperscript/runtime.sx +++ b/lib/hyperscript/runtime.sx @@ -69,7 +69,7 @@ (fn (target event-name handler) (let - ((wrapped (fn (event) (do (host-set! meta "caller" _hs-on-caller) (let ((__hs-no-stop false)) (guard (e ((and (not (= event-name "exception")) (not (= event-name "error"))) (do (when (and (list? e) (= (first e) "hs-halt-default")) (set! __hs-no-stop true)) (when (not __hs-no-stop) (dom-dispatch target "exception" {:error e})))) (true (raise e))) (handler event)) (when (not __hs-no-stop) (host-call event "stopPropagation"))))))) + ((wrapped (fn (event) (do (host-set! meta "caller" _hs-on-caller) (host-set! meta "owner" target) (let ((__hs-no-stop false)) (guard (e ((and (not (= event-name "exception")) (not (= event-name "error"))) (do (when (and (list? e) (= (first e) "hs-halt-default")) (set! __hs-no-stop true)) (when (not __hs-no-stop) (dom-dispatch target "exception" {:error e})))) (true (raise e))) (handler event)) (when (not __hs-no-stop) (host-call event "stopPropagation"))))))) (let ((unlisten (dom-listen target event-name wrapped)) (prev (or (dom-get-data target "hs-unlisteners") (list)))) @@ -900,6 +900,10 @@ ((or (= format "text") (= format "Text")) "text") ((or (= format "number") (= format "Number")) "number") (true "text")))) + (let + ((_hs-before-caller (host-get meta "owner"))) + (when _hs-before-caller + (dom-dispatch _hs-before-caller "hyperscript:beforeFetch" {:url url}))) (let ((raw (perform (list "io-fetch" url fmt)))) (begin diff --git a/shared/static/wasm/sx/hs-runtime.sx b/shared/static/wasm/sx/hs-runtime.sx index 13b52bc0..4bc59e82 100644 --- a/shared/static/wasm/sx/hs-runtime.sx +++ b/shared/static/wasm/sx/hs-runtime.sx @@ -69,7 +69,7 @@ (fn (target event-name handler) (let - ((wrapped (fn (event) (do (host-set! meta "caller" _hs-on-caller) (let ((__hs-no-stop false)) (guard (e ((and (not (= event-name "exception")) (not (= event-name "error"))) (do (when (and (list? e) (= (first e) "hs-halt-default")) (set! __hs-no-stop true)) (when (not __hs-no-stop) (dom-dispatch target "exception" {:error e})))) (true (raise e))) (handler event)) (when (not __hs-no-stop) (host-call event "stopPropagation"))))))) + ((wrapped (fn (event) (do (host-set! meta "caller" _hs-on-caller) (host-set! meta "owner" target) (let ((__hs-no-stop false)) (guard (e ((and (not (= event-name "exception")) (not (= event-name "error"))) (do (when (and (list? e) (= (first e) "hs-halt-default")) (set! __hs-no-stop true)) (when (not __hs-no-stop) (dom-dispatch target "exception" {:error e})))) (true (raise e))) (handler event)) (when (not __hs-no-stop) (host-call event "stopPropagation"))))))) (let ((unlisten (dom-listen target event-name wrapped)) (prev (or (dom-get-data target "hs-unlisteners") (list)))) @@ -900,6 +900,10 @@ ((or (= format "text") (= format "Text")) "text") ((or (= format "number") (= format "Number")) "number") (true "text")))) + (let + ((_hs-before-caller (host-get meta "owner"))) + (when _hs-before-caller + (dom-dispatch _hs-before-caller "hyperscript:beforeFetch" {:url url}))) (let ((raw (perform (list "io-fetch" url fmt)))) (begin