Remove debug logging from sx_browser.ml and sx-platform.js

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-16 17:08:01 +00:00
parent 1bce1b701b
commit d981e5f620
19 changed files with 1921 additions and 775 deletions

View File

@@ -57,7 +57,6 @@
var obj = args[0], method = args[1]; var obj = args[0], method = args[1];
var callArgs = []; var callArgs = [];
for (var i = 2; i < args.length; i++) callArgs.push(args[i]); for (var i = 2; i < args.length; i++) callArgs.push(args[i]);
if (method === "addEventListener") console.log("[host-call] addEventListener args:", callArgs.map(a => typeof a === "function" ? "fn:" + (a.__host_callback ? "HOST_CB" : "other") : typeof a));
if (obj == null) { if (obj == null) {
// Global function call // Global function call
var fn = typeof globalThis !== "undefined" ? globalThis[method] : window[method]; var fn = typeof globalThis !== "undefined" ? globalThis[method] : window[method];
@@ -160,9 +159,7 @@
if (fn && fn.__sx_handle !== undefined) { if (fn && fn.__sx_handle !== undefined) {
var wrappedFn = function() { var wrappedFn = function() {
var a = Array.prototype.slice.call(arguments); var a = Array.prototype.slice.call(arguments);
console.log("[host-callback] FIRED handle=" + fn.__sx_handle);
var r = K.callFn(fn, a); var r = K.callFn(fn, a);
console.log("[host-callback] callFn returned suspended=" + !!(r && r.suspended));
if (window._driveAsync) window._driveAsync(r); if (window._driveAsync) window._driveAsync(r);
return r; return r;
}; };

View File

@@ -91,9 +91,7 @@ let rec value_to_js (v : value) : Js.Unsafe.any =
| Dict d -> | Dict d ->
(* Check for __host_handle — return original JS object *) (* Check for __host_handle — return original JS object *)
(match Hashtbl.find_opt d "__host_handle" with (match Hashtbl.find_opt d "__host_handle" with
| Some (Number n) -> | Some (Number n) -> host_get_js (int_of_float n)
Printf.eprintf "[value_to_js] Dict→host_get_js handle=%d\n%!" (int_of_float n);
host_get_js (int_of_float n)
| _ -> | _ ->
let obj = Js.Unsafe.obj [||] in let obj = Js.Unsafe.obj [||] in
Js.Unsafe.set obj (Js.string "_type") (Js.string "dict"); Js.Unsafe.set obj (Js.string "_type") (Js.string "dict");
@@ -171,8 +169,6 @@ and js_to_value (js : Js.Unsafe.any) : value =
| "function" -> | "function" ->
let h = Js.Unsafe.get js (Js.string "__sx_handle") in let h = Js.Unsafe.get js (Js.string "__sx_handle") in
let has_host_cb = Js.to_bool (Js.Unsafe.coerce (Js.Unsafe.get js (Js.string "__host_callback"))) in let has_host_cb = Js.to_bool (Js.Unsafe.coerce (Js.Unsafe.get js (Js.string "__host_callback"))) in
if has_host_cb then
Printf.eprintf "[js_to_value] fn has __host_callback! Storing as host obj\n%!";
if not (Js.Unsafe.equals h Js.undefined) && not has_host_cb then if not (Js.Unsafe.equals h Js.undefined) && not has_host_cb then
get_handle (Js.float_of_number (Js.Unsafe.coerce h) |> int_of_float) get_handle (Js.float_of_number (Js.Unsafe.coerce h) |> int_of_float)
else else
@@ -181,7 +177,6 @@ and js_to_value (js : Js.Unsafe.any) : value =
This preserves wrappers like _driveAsync that host-callback This preserves wrappers like _driveAsync that host-callback
attaches for IO suspension handling. *) attaches for IO suspension handling. *)
let id = host_put js in let id = host_put js in
Printf.eprintf "[js_to_value] plain JS fn → host_object id=%d\n%!" id;
let d = Hashtbl.create 2 in let d = Hashtbl.create 2 in
Hashtbl.replace d "__host_handle" (Number (float_of_int id)); Hashtbl.replace d "__host_handle" (Number (float_of_int id));
Dict d Dict d

View File

@@ -57,7 +57,6 @@
var obj = args[0], method = args[1]; var obj = args[0], method = args[1];
var callArgs = []; var callArgs = [];
for (var i = 2; i < args.length; i++) callArgs.push(args[i]); for (var i = 2; i < args.length; i++) callArgs.push(args[i]);
if (method === "addEventListener") console.log("[host-call] addEventListener args:", callArgs.map(a => typeof a === "function" ? "fn:" + (a.__host_callback ? "HOST_CB" : "other") : typeof a));
if (obj == null) { if (obj == null) {
// Global function call // Global function call
var fn = typeof globalThis !== "undefined" ? globalThis[method] : window[method]; var fn = typeof globalThis !== "undefined" ? globalThis[method] : window[method];
@@ -160,9 +159,7 @@
if (fn && fn.__sx_handle !== undefined) { if (fn && fn.__sx_handle !== undefined) {
var wrappedFn = function() { var wrappedFn = function() {
var a = Array.prototype.slice.call(arguments); var a = Array.prototype.slice.call(arguments);
console.log("[host-callback] FIRED handle=" + fn.__sx_handle);
var r = K.callFn(fn, a); var r = K.callFn(fn, a);
console.log("[host-callback] callFn returned suspended=" + !!(r && r.suspended));
if (window._driveAsync) window._driveAsync(r); if (window._driveAsync) window._driveAsync(r);
return r; return r;
}; };

View File

@@ -1,231 +1,254 @@
(define-library (sx browser) (define-library
(export browser-location-href browser-location-pathname browser-location-origin browser-same-origin? url-pathname browser-push-state browser-replace-state browser-reload browser-navigate local-storage-get local-storage-set local-storage-remove set-timeout set-interval clear-timeout clear-interval request-animation-frame fetch-request new-abort-controller controller-signal controller-abort promise-then promise-resolve promise-delayed browser-confirm browser-prompt browser-media-matches? json-parse log-info log-warn console-log now-ms schedule-idle set-cookie get-cookie) (sx browser)
(export
browser-location-href
browser-location-pathname
browser-location-origin
browser-same-origin?
url-pathname
browser-push-state
browser-replace-state
browser-reload
browser-navigate
local-storage-get
local-storage-set
local-storage-remove
set-timeout
set-interval
clear-timeout
clear-interval
request-animation-frame
fetch-request
new-abort-controller
controller-signal
controller-abort
promise-then
promise-resolve
promise-delayed
browser-confirm
browser-prompt
browser-media-matches?
json-parse
json-stringify
log-info
log-warn
console-log
now-ms
schedule-idle
set-cookie
get-cookie)
(begin (begin
(define
(define browser-location-href
browser-location-href (fn () (host-get (host-get (dom-window) "location") "href")))
(fn () (host-get (host-get (dom-window) "location") "href"))) (define
browser-location-pathname
(define (fn () (host-get (host-get (dom-window) "location") "pathname")))
browser-location-pathname (define
(fn () (host-get (host-get (dom-window) "location") "pathname"))) browser-location-origin
(fn () (host-get (host-get (dom-window) "location") "origin")))
(define (define
browser-location-origin browser-same-origin?
(fn () (host-get (host-get (dom-window) "location") "origin"))) (fn (url) (starts-with? url (browser-location-origin))))
(define
(define url-pathname
browser-same-origin? (fn
(fn (url) (starts-with? url (browser-location-origin)))) (url)
(host-get (host-new "URL" url (browser-location-origin)) "pathname")))
(define (define
url-pathname browser-push-state
(fn (fn
(url) (url-or-state title url)
(host-get (host-new "URL" url (browser-location-origin)) "pathname"))) (if
(nil? title)
(define
browser-push-state
(fn
(url-or-state title url)
(if
(nil? title)
(host-call
(host-get (dom-window) "history")
"pushState"
nil
""
url-or-state)
(host-call
(host-get (dom-window) "history")
"pushState"
url-or-state
title
url))))
(define
browser-replace-state
(fn
(url-or-state title url)
(if
(nil? title)
(host-call
(host-get (dom-window) "history")
"replaceState"
nil
""
url-or-state)
(host-call
(host-get (dom-window) "history")
"replaceState"
url-or-state
title
url))))
(define
browser-reload
(fn () (host-call (host-get (dom-window) "location") "reload")))
(define
browser-navigate
(fn (url) (host-set! (host-get (dom-window) "location") "href" url)))
(define
local-storage-get
(fn
(key)
(host-call (host-get (dom-window) "localStorage") "getItem" key)))
(define
local-storage-set
(fn
(key val)
(host-call (host-get (dom-window) "localStorage") "setItem" key val)))
(define
local-storage-remove
(fn
(key)
(host-call (host-get (dom-window) "localStorage") "removeItem" key)))
(define
set-timeout
(fn
(fn-val ms)
(host-call (dom-window) "setTimeout" (host-callback fn-val) ms)))
(define
set-interval
(fn
(fn-val ms)
(host-call (dom-window) "setInterval" (host-callback fn-val) ms)))
(define clear-timeout (fn (id) (host-call (dom-window) "clearTimeout" id)))
(define
clear-interval
(fn (id) (host-call (dom-window) "clearInterval" id)))
(define
request-animation-frame
(fn
(fn-val)
(host-call (dom-window) "requestAnimationFrame" (host-callback fn-val))))
(define
fetch-request
(fn (url opts) (host-call (dom-window) "fetch" url opts)))
(define new-abort-controller (fn () (host-new "AbortController")))
(define controller-signal (fn (controller) (host-get controller "signal")))
(define controller-abort (fn (controller) (host-call controller "abort")))
(define
promise-then
(fn
(p on-resolve on-reject)
(let
((cb-resolve (host-callback on-resolve))
(cb-reject (if on-reject (host-callback on-reject) nil)))
(if
cb-reject
(host-call (host-call p "then" cb-resolve) "catch" cb-reject)
(host-call p "then" cb-resolve)))))
(define
promise-resolve
(fn (val) (host-call (host-global "Promise") "resolve" val)))
(define
promise-delayed
(fn
(ms val)
(host-new
"Promise"
(host-callback
(fn
(resolve)
(set-timeout (fn () (host-call resolve "call" nil val)) ms))))))
(define browser-confirm (fn (msg) (host-call (dom-window) "confirm" msg)))
(define
browser-prompt
(fn (msg default) (host-call (dom-window) "prompt" msg default)))
(define
browser-media-matches?
(fn
(query)
(host-get (host-call (dom-window) "matchMedia" query) "matches")))
(define json-parse (fn (s) (host-call (host-global "JSON") "parse" s)))
(define
log-info
(fn (msg) (host-call (host-global "console") "log" (str "[sx] " msg))))
(define
log-warn
(fn (msg) (host-call (host-global "console") "warn" (str "[sx] " msg))))
(define
console-log
(fn (msg) (host-call (host-global "console") "log" (str "[sx] " msg))))
(define now-ms (fn () (host-call (host-global "Date") "now")))
(define
schedule-idle
(fn
(f)
(let
((cb (host-callback (fn (_deadline) (f)))))
(if
(host-get (dom-window) "requestIdleCallback")
(host-call (dom-window) "requestIdleCallback" cb)
(set-timeout cb 0)))))
(define
set-cookie
(fn
(name value days)
(let
((d (or days 365))
(expires
(host-call (host-call
(host-new (host-get (dom-window) "history")
"Date" "pushState"
(+ (host-call (host-global "Date") "now") (* d 86400000))) nil
"toUTCString"))) ""
(host-set! url-or-state)
(dom-document)
"cookie"
(str
name
"="
(host-call nil "encodeURIComponent" value)
";expires="
expires
";path=/;SameSite=Lax")))))
(define
get-cookie
(fn
(name)
(let
((cookies (host-get (dom-document) "cookie"))
(match
(host-call (host-call
cookies (host-get (dom-window) "history")
"match" "pushState"
(host-new "RegExp" (str "(?:^|;\\s*)" name "=([^;]*)"))))) url-or-state
(if match (host-call nil "decodeURIComponent" (host-get match 1)) nil)))) title
url))))
(define
)) browser-replace-state
(fn
(url-or-state title url)
(if
(nil? title)
(host-call
(host-get (dom-window) "history")
"replaceState"
nil
""
url-or-state)
(host-call
(host-get (dom-window) "history")
"replaceState"
url-or-state
title
url))))
(define
browser-reload
(fn () (host-call (host-get (dom-window) "location") "reload")))
(define
browser-navigate
(fn (url) (host-set! (host-get (dom-window) "location") "href" url)))
(define
local-storage-get
(fn
(key)
(host-call (host-get (dom-window) "localStorage") "getItem" key)))
(define
local-storage-set
(fn
(key val)
(host-call (host-get (dom-window) "localStorage") "setItem" key val)))
(define
local-storage-remove
(fn
(key)
(host-call (host-get (dom-window) "localStorage") "removeItem" key)))
(define
set-timeout
(fn
(fn-val ms)
(host-call (dom-window) "setTimeout" (host-callback fn-val) ms)))
(define
set-interval
(fn
(fn-val ms)
(host-call (dom-window) "setInterval" (host-callback fn-val) ms)))
(define
clear-timeout
(fn (id) (host-call (dom-window) "clearTimeout" id)))
(define
clear-interval
(fn (id) (host-call (dom-window) "clearInterval" id)))
(define
request-animation-frame
(fn
(fn-val)
(host-call
(dom-window)
"requestAnimationFrame"
(host-callback fn-val))))
(define
fetch-request
(fn (url opts) (host-call (dom-window) "fetch" url opts)))
(define new-abort-controller (fn () (host-new "AbortController")))
(define
controller-signal
(fn (controller) (host-get controller "signal")))
(define
controller-abort
(fn (controller) (host-call controller "abort")))
(define
promise-then
(fn
(p on-resolve on-reject)
(let
((cb-resolve (host-callback on-resolve))
(cb-reject (if on-reject (host-callback on-reject) nil)))
(if
cb-reject
(host-call (host-call p "then" cb-resolve) "catch" cb-reject)
(host-call p "then" cb-resolve)))))
(define
promise-resolve
(fn (val) (host-call (host-global "Promise") "resolve" val)))
(define
promise-delayed
(fn
(ms val)
(host-new
"Promise"
(host-callback
(fn
(resolve)
(set-timeout (fn () (host-call resolve "call" nil val)) ms))))))
(define
browser-confirm
(fn (msg) (host-call (dom-window) "confirm" msg)))
(define
browser-prompt
(fn (msg default) (host-call (dom-window) "prompt" msg default)))
(define
browser-media-matches?
(fn
(query)
(host-get (host-call (dom-window) "matchMedia" query) "matches")))
(define json-parse (fn (s) (host-call (host-global "JSON") "parse" s)))
(define
log-info
(fn
(msg)
(host-call (host-global "console") "log" (str "[sx] " msg))))
(define
log-warn
(fn
(msg)
(host-call (host-global "console") "warn" (str "[sx] " msg))))
(define
console-log
(fn
(msg)
(host-call (host-global "console") "log" (str "[sx] " msg))))
(define now-ms (fn () (host-call (host-global "Date") "now")))
(define
schedule-idle
(fn
(f)
(let
((cb (host-callback (fn (_deadline) (f)))))
(if
(host-get (dom-window) "requestIdleCallback")
(host-call (dom-window) "requestIdleCallback" cb)
(set-timeout cb 0)))))
(define
set-cookie
(fn
(name value days)
(let
((d (or days 365))
(expires
(host-call
(host-new
"Date"
(+ (host-call (host-global "Date") "now") (* d 86400000)))
"toUTCString")))
(host-set!
(dom-document)
"cookie"
(str
name
"="
(host-call nil "encodeURIComponent" value)
";expires="
expires
";path=/;SameSite=Lax")))))
(define
get-cookie
(fn
(name)
(let
((cookies (host-get (dom-document) "cookie"))
(match
(host-call
cookies
"match"
(host-new "RegExp" (str "(?:^|;\\s*)" name "=([^;]*)")))))
(if
match
(host-call nil "decodeURIComponent" (host-get match 1))
nil))))))
;; Re-export to global env ;; Re-export to global env
(define
json-stringify
(fn (v) (host-call (host-global "JSON") "stringify" v)))
(import (sx browser)) (import (sx browser))

File diff suppressed because one or more lines are too long

View File

@@ -1,426 +1,457 @@
(define-library (sx dom) (define-library
(export dom-document dom-window dom-body dom-head dom-create-element create-text-node create-fragment create-comment dom-append dom-prepend dom-insert-before dom-insert-after dom-remove dom-is-active-element? dom-is-input-element? dom-is-child-of? dom-attr-list dom-remove-child dom-replace-child dom-clone dom-query dom-query-all dom-query-by-id dom-closest dom-matches? dom-get-attr dom-set-attr dom-remove-attr dom-has-attr? dom-add-class dom-remove-class dom-has-class? dom-text-content dom-set-text-content dom-inner-html dom-set-inner-html dom-outer-html dom-insert-adjacent-html dom-get-style dom-set-style dom-get-prop dom-set-prop dom-tag-name dom-node-type dom-node-name dom-id dom-parent dom-first-child dom-next-sibling dom-child-list dom-is-fragment? dom-child-nodes dom-remove-children-after dom-focus dom-parse-html dom-listen dom-add-listener dom-dispatch event-detail prevent-default stop-propagation event-modifier-key? element-value error-message dom-get-data dom-set-data dom-append-to-head set-document-title) (sx dom)
(export
dom-document
dom-window
dom-body
dom-head
dom-create-element
create-text-node
create-fragment
create-comment
dom-append
dom-prepend
dom-insert-before
dom-insert-after
dom-remove
dom-is-active-element?
dom-is-input-element?
dom-is-child-of?
dom-attr-list
dom-remove-child
dom-replace-child
dom-clone
dom-query
dom-query-all
dom-query-by-id
dom-closest
dom-matches?
dom-get-attr
dom-set-attr
dom-remove-attr
dom-has-attr?
dom-add-class
dom-remove-class
dom-has-class?
dom-visible?
dom-text-content
dom-set-text-content
dom-inner-html
dom-set-inner-html
dom-outer-html
dom-insert-adjacent-html
dom-get-style
dom-set-style
dom-get-prop
dom-set-prop
dom-tag-name
dom-node-type
dom-node-name
dom-id
dom-parent
dom-first-child
dom-next-sibling
dom-child-list
dom-is-fragment?
dom-child-nodes
dom-remove-children-after
dom-focus
dom-parse-html
dom-listen
dom-add-listener
dom-dispatch
event-detail
prevent-default
stop-propagation
event-modifier-key?
element-value
error-message
dom-get-data
dom-set-data
dom-append-to-head
set-document-title)
(begin (begin
(define dom-document (fn () (host-global "document")))
(define dom-document (fn () (host-global "document"))) (define dom-window (fn () (host-global "window")))
(define dom-body (fn () (host-get (dom-document) "body")))
(define dom-window (fn () (host-global "window"))) (define dom-head (fn () (host-get (dom-document) "head")))
(define
(define dom-body (fn () (host-get (dom-document) "body"))) dom-create-element
(fn
(define dom-head (fn () (host-get (dom-document) "head"))) (tag ns)
(define
dom-create-element
(fn
(tag ns)
(if
ns
(host-call (dom-document) "createElementNS" ns tag)
(host-call (dom-document) "createElement" tag))))
(define
create-text-node
(fn (s) (host-call (dom-document) "createTextNode" s)))
(define
create-fragment
(fn () (host-call (dom-document) "createDocumentFragment")))
(define
create-comment
(fn (text) (host-call (dom-document) "createComment" (or text ""))))
(define
dom-append
(fn
(parent child)
(when (and parent child) (host-call parent "appendChild" child))))
(define
dom-prepend
(fn
(parent child)
(when (and parent child) (host-call parent "prepend" child))))
(define
dom-insert-before
(fn
(parent child ref)
(when (and parent child) (host-call parent "insertBefore" child ref))))
(define
dom-insert-after
(fn
(ref node)
"Insert node after ref in the same parent."
(let
((parent (host-get ref "parentNode"))
(next (host-get ref "nextSibling")))
(when
parent
(if (if
next ns
(host-call parent "insertBefore" node next) (host-call (dom-document) "createElementNS" ns tag)
(host-call parent "appendChild" node)))))) (host-call (dom-document) "createElement" tag))))
(define
(define dom-remove (fn (el) (when el (host-call el "remove")))) create-text-node
(fn (s) (host-call (dom-document) "createTextNode" s)))
(define (define
dom-is-active-element? create-fragment
(fn (fn () (host-call (dom-document) "createDocumentFragment")))
(el) (define
(let create-comment
((active (host-get (dom-document) "activeElement"))) (fn (text) (host-call (dom-document) "createComment" (or text ""))))
(if (and active el) (identical? el active) false)))) (define
dom-append
(define (fn
dom-is-input-element? (parent child)
(fn (when (and parent child) (host-call parent "appendChild" child))))
(el) (define
(let dom-prepend
((tag (upper (or (dom-tag-name el) "")))) (fn
(or (= tag "INPUT") (= tag "TEXTAREA") (= tag "SELECT"))))) (parent child)
(when (and parent child) (host-call parent "prepend" child))))
(define (define
dom-is-child-of? dom-insert-before
(fn (child parent) (and child parent (host-call parent "contains" child)))) (fn
(parent child ref)
(define (when (and parent child) (host-call parent "insertBefore" child ref))))
dom-attr-list (define
(fn dom-insert-after
(el) (fn
(let (ref node)
((attrs (host-get el "attributes")) (result (list))) "Insert node after ref in the same parent."
(when
attrs
(let (let
((n (host-get attrs "length"))) ((parent (host-get ref "parentNode"))
(let (next (host-get ref "nextSibling")))
loop (when
((i 0)) parent
(when (if
(< i n) next
(host-call parent "insertBefore" node next)
(host-call parent "appendChild" node))))))
(define dom-remove (fn (el) (when el (host-call el "remove"))))
(define
dom-is-active-element?
(fn
(el)
(let
((active (host-get (dom-document) "activeElement")))
(if (and active el) (identical? el active) false))))
(define
dom-is-input-element?
(fn
(el)
(let
((tag (upper (or (dom-tag-name el) ""))))
(or (= tag "INPUT") (= tag "TEXTAREA") (= tag "SELECT")))))
(define
dom-is-child-of?
(fn
(child parent)
(and child parent (host-call parent "contains" child))))
(define
dom-attr-list
(fn
(el)
(let
((attrs (host-get el "attributes")) (result (list)))
(when
attrs
(let
((n (host-get attrs "length")))
(let (let
((attr (host-call attrs "item" i))) loop
(append! ((i 0))
result (when
(list (host-get attr "name") (host-get attr "value")))) (< i n)
(loop (+ i 1)))))) (let
result))) ((attr (host-call attrs "item" i)))
(append!
(define result
dom-remove-child (list (host-get attr "name") (host-get attr "value"))))
(fn (loop (+ i 1))))))
(parent child) result)))
(when (and parent child) (host-call parent "removeChild" child)))) (define
dom-remove-child
(define (fn
dom-replace-child (parent child)
(fn (when (and parent child) (host-call parent "removeChild" child))))
(parent new-child old-child) (define
(when dom-replace-child
(and parent new-child old-child) (fn
(host-call parent "replaceChild" new-child old-child)))) (parent new-child old-child)
(when
(define (and parent new-child old-child)
dom-clone (host-call parent "replaceChild" new-child old-child))))
(fn (node deep) (host-call node "cloneNode" (if (nil? deep) true deep)))) (define
dom-clone
(define (fn
dom-query (node deep)
(fn (host-call node "cloneNode" (if (nil? deep) true deep))))
(root-or-sel sel) (define
(if dom-query
(nil? sel) (fn
(host-call (dom-document) "querySelector" root-or-sel) (root-or-sel sel)
(host-call root-or-sel "querySelector" sel)))) (if
(nil? sel)
(define (host-call (dom-document) "querySelector" root-or-sel)
dom-query-all (host-call root-or-sel "querySelector" sel))))
(fn (define
(root sel) dom-query-all
"Query DOM and return an SX list (not a host NodeList)." (fn
(let (root sel)
((node-list (if (nil? sel) (host-call (dom-document) "querySelectorAll" root) (host-call root "querySelectorAll" sel)))) "Query DOM and return an SX list (not a host NodeList)."
(if
(nil? node-list)
(list)
(let (let
((n (host-get node-list "length")) (result (list))) ((node-list (if (nil? sel) (host-call (dom-document) "querySelectorAll" root) (host-call root "querySelectorAll" sel))))
(if
(nil? node-list)
(list)
(let
((n (host-get node-list "length")) (result (list)))
(let
loop
((i 0))
(when
(< i n)
(append! result (host-call node-list "item" i))
(loop (+ i 1))))
result)))))
(define
dom-query-by-id
(fn (id) (host-call (dom-document) "getElementById" id)))
(define
dom-closest
(fn (el sel) (when el (host-call el "closest" sel))))
(define
dom-matches?
(fn
(el sel)
(if
(and el (host-get el "matches"))
(host-call el "matches" sel)
false)))
(define
dom-get-attr
(fn
(el name)
(if
(and el (host-get el "getAttribute"))
(let (let
loop ((v (host-call el "getAttribute" name)))
((i 0)) (if (nil? v) nil v))
(when nil)))
(< i n) (define
(append! result (host-call node-list "item" i)) dom-set-attr
(loop (+ i 1)))) (fn
result))))) (el name val)
(when
(define (and el (host-get el "setAttribute"))
dom-query-by-id (host-call el "setAttribute" name val))))
(fn (id) (host-call (dom-document) "getElementById" id))) (define
dom-remove-attr
(define dom-closest (fn (el sel) (when el (host-call el "closest" sel)))) (fn
(el name)
(define (when
dom-matches? (and el (host-get el "removeAttribute"))
(fn (host-call el "removeAttribute" name))))
(el sel) (define
(if (and el (host-get el "matches")) (host-call el "matches" sel) false))) dom-has-attr?
(fn
(define (el name)
dom-get-attr (if
(fn (and el (host-get el "hasAttribute"))
(el name) (host-call el "hasAttribute" name)
(if false)))
(and el (host-get el "getAttribute")) (define
(let ((v (host-call el "getAttribute" name))) (if (nil? v) nil v)) dom-add-class
nil))) (fn
(el cls)
(define (when el (host-call (host-get el "classList") "add" cls))))
dom-set-attr (define
(fn dom-remove-class
(el name val) (fn
(when (el cls)
(and el (host-get el "setAttribute")) (when el (host-call (host-get el "classList") "remove" cls))))
(host-call el "setAttribute" name val)))) (define
dom-has-class?
(define (fn
dom-remove-attr (el cls)
(fn (if el (host-call (host-get el "classList") "contains" cls) false)))
(el name) (define dom-text-content (fn (el) (host-get el "textContent")))
(when (define
(and el (host-get el "removeAttribute")) dom-set-text-content
(host-call el "removeAttribute" name)))) (fn (el val) (host-set! el "textContent" val)))
(define dom-inner-html (fn (el) (host-get el "innerHTML")))
(define (define dom-set-inner-html (fn (el val) (host-set! el "innerHTML" val)))
dom-has-attr? (define dom-outer-html (fn (el) (host-get el "outerHTML")))
(fn (define
(el name) dom-insert-adjacent-html
(if (fn
(and el (host-get el "hasAttribute")) (el position html)
(host-call el "hasAttribute" name) (host-call el "insertAdjacentHTML" position html)))
false))) (define
dom-get-style
(define (fn (el prop) (host-get (host-get el "style") prop)))
dom-add-class (define
(fn (el cls) (when el (host-call (host-get el "classList") "add" cls)))) dom-set-style
(fn
(define (el prop val)
dom-remove-class (host-call (host-get el "style") "setProperty" prop val)))
(fn (define dom-get-prop (fn (el name) (host-get el name)))
(el cls) (define dom-set-prop (fn (el name val) (host-set! el name val)))
(when el (host-call (host-get el "classList") "remove" cls)))) (define
dom-tag-name
(define (fn (el) (if el (lower (or (host-get el "tagName") "")) "")))
dom-has-class? (define dom-node-type (fn (el) (host-get el "nodeType")))
(fn (define dom-node-name (fn (el) (host-get el "nodeName")))
(el cls) (define dom-id (fn (el) (host-get el "id")))
(if el (host-call (host-get el "classList") "contains" cls) false))) (define dom-parent (fn (el) (host-get el "parentNode")))
(define dom-first-child (fn (el) (host-get el "firstChild")))
(define dom-text-content (fn (el) (host-get el "textContent"))) (define dom-next-sibling (fn (el) (host-get el "nextSibling")))
(define
(define dom-set-text-content (fn (el val) (host-set! el "textContent" val))) dom-child-list
(fn
(define dom-inner-html (fn (el) (host-get el "innerHTML"))) (el)
"Return child nodes as an SX list."
(define dom-set-inner-html (fn (el val) (host-set! el "innerHTML" val))) (if
el
(define dom-outer-html (fn (el) (host-get el "outerHTML")))
(define
dom-insert-adjacent-html
(fn (el position html) (host-call el "insertAdjacentHTML" position html)))
(define dom-get-style (fn (el prop) (host-get (host-get el "style") prop)))
(define
dom-set-style
(fn
(el prop val)
(host-call (host-get el "style") "setProperty" prop val)))
(define dom-get-prop (fn (el name) (host-get el name)))
(define dom-set-prop (fn (el name val) (host-set! el name val)))
(define
dom-tag-name
(fn (el) (if el (lower (or (host-get el "tagName") "")) "")))
(define dom-node-type (fn (el) (host-get el "nodeType")))
(define dom-node-name (fn (el) (host-get el "nodeName")))
(define dom-id (fn (el) (host-get el "id")))
(define dom-parent (fn (el) (host-get el "parentNode")))
(define dom-first-child (fn (el) (host-get el "firstChild")))
(define dom-next-sibling (fn (el) (host-get el "nextSibling")))
(define
dom-child-list
(fn
(el)
"Return child nodes as an SX list."
(if
el
(let
((nl (host-get el "childNodes"))
(n (host-get nl "length"))
(result (list)))
(let
loop
((i 0))
(when
(< i n)
(append! result (host-call nl "item" i))
(loop (+ i 1))))
result)
(list))))
(define dom-is-fragment? (fn (el) (= (host-get el "nodeType") 11)))
(define
dom-child-nodes
(fn
(el)
"Return child nodes as an SX list."
(if
el
(let
((nl (host-get el "childNodes"))
(n (host-get nl "length"))
(result (list)))
(let
loop
((i 0))
(when
(< i n)
(append! result (host-call nl "item" i))
(loop (+ i 1))))
result)
(list))))
(define
dom-remove-children-after
(fn
(marker)
"Remove all siblings after marker node."
(let
((parent (dom-parent marker)))
(when
parent
(let
loop
()
(let (let
((next (dom-next-sibling marker))) ((nl (host-get el "childNodes"))
(when next (host-call parent "removeChild" next) (loop)))))))) (n (host-get nl "length"))
(result (list)))
(define dom-focus (fn (el) (when el (host-call el "focus")))) (let
loop
(define ((i 0))
dom-parse-html (when
(fn (< i n)
(html) (append! result (host-call nl "item" i))
(let (loop (+ i 1))))
((parser (host-new "DOMParser")) result)
(doc (host-call parser "parseFromString" html "text/html"))) (list))))
(host-get (host-get doc "body") "childNodes")))) (define dom-is-fragment? (fn (el) (= (host-get el "nodeType") 11)))
(define
(define dom-child-nodes
dom-listen (fn
(fn (el)
(el event-name handler) "Return child nodes as an SX list."
(let (if
((cb (host-callback handler))) el
(host-call el "addEventListener" event-name cb) (let
(fn () (host-call el "removeEventListener" event-name cb))))) ((nl (host-get el "childNodes"))
(n (host-get nl "length"))
(define (result (list)))
dom-add-listener (let
(fn loop
(el event-name handler opts) ((i 0))
(let (when
((cb (host-callback handler))) (< i n)
(if (append! result (host-call nl "item" i))
opts (loop (+ i 1))))
(host-call el "addEventListener" event-name cb opts) result)
(host-call el "addEventListener" event-name cb)) (list))))
(fn () (host-call el "removeEventListener" event-name cb))))) (define
dom-remove-children-after
(define (fn
dom-dispatch (marker)
(fn "Remove all siblings after marker node."
(el event-name detail) (let
(let ((parent (dom-parent marker)))
((evt (host-new "CustomEvent" event-name (dict "detail" detail "bubbles" true)))) (when
(host-call el "dispatchEvent" evt)))) parent
(let
(define event-detail (fn (evt) (host-get evt "detail"))) loop
()
(define prevent-default (fn (e) (when e (host-call e "preventDefault")))) (let
((next (dom-next-sibling marker)))
(define stop-propagation (fn (e) (when e (host-call e "stopPropagation")))) (when next (host-call parent "removeChild" next) (loop))))))))
(define dom-focus (fn (el) (when el (host-call el "focus"))))
(define (define
event-modifier-key? dom-parse-html
(fn (fn
(e) (html)
(and (let
e ((parser (host-new "DOMParser"))
(or (doc (host-call parser "parseFromString" html "text/html")))
(host-get e "ctrlKey") (host-get (host-get doc "body") "childNodes"))))
(host-get e "metaKey") (define
(host-get e "shiftKey") dom-listen
(host-get e "altKey"))))) (fn
(el event-name handler)
(define (let
element-value ((cb (host-callback handler)))
(fn (host-call el "addEventListener" event-name cb)
(el) (fn () (host-call el "removeEventListener" event-name cb)))))
(if (define
(and el (not (nil? (host-get el "value")))) dom-add-listener
(host-get el "value") (fn
nil))) (el event-name handler opts)
(let
(define ((cb (host-callback handler)))
error-message (if
(fn opts
(e) (host-call el "addEventListener" event-name cb opts)
(if (and e (host-get e "message")) (host-get e "message") (str e)))) (host-call el "addEventListener" event-name cb))
(fn () (host-call el "removeEventListener" event-name cb)))))
(define (define
dom-get-data dom-dispatch
(fn (fn
(el key) (el event-name detail)
(let (let
((store (host-get el "__sx_data"))) ((evt (host-new "CustomEvent" event-name (dict "detail" detail "bubbles" true))))
(if store (host-get store key) nil)))) (host-call el "dispatchEvent" evt))))
(define event-detail (fn (evt) (host-get evt "detail")))
(define (define
dom-set-data prevent-default
(fn (fn (e) (when e (host-call e "preventDefault"))))
(el key val) (define
(when stop-propagation
(not (host-get el "__sx_data")) (fn (e) (when e (host-call e "stopPropagation"))))
(host-set! el "__sx_data" (dict))) (define
(host-set! (host-get el "__sx_data") key val))) event-modifier-key?
(fn
(define (e)
dom-append-to-head (and
(fn (el) (when (dom-head) (host-call (dom-head) "appendChild" el)))) e
(or
(define (host-get e "ctrlKey")
set-document-title (host-get e "metaKey")
(fn (title) (host-set! (dom-document) "title" title))) (host-get e "shiftKey")
(host-get e "altKey")))))
(define
)) element-value
(fn
(el)
(if
(and el (not (nil? (host-get el "value"))))
(host-get el "value")
nil)))
(define
error-message
(fn
(e)
(if (and e (host-get e "message")) (host-get e "message") (str e))))
(define
dom-get-data
(fn
(el key)
(let
((store (host-get el "__sx_data")))
(if store (host-get store key) nil))))
(define
dom-set-data
(fn
(el key val)
(when
(not (host-get el "__sx_data"))
(host-set! el "__sx_data" (dict)))
(host-set! (host-get el "__sx_data") key val)))
(define
dom-append-to-head
(fn (el) (when (dom-head) (host-call (dom-head) "appendChild" el))))
(define
set-document-title
(fn (title) (host-set! (dom-document) "title" title)))))
;; Re-export to global env ;; Re-export to global env
(define
dom-visible?
(fn
(el)
(if
el
(not (= (host-get (host-get el "style") "display") "none"))
false)))
(import (sx dom)) (import (sx dom))

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -119,6 +119,8 @@
"empty" "empty"
"clear" "clear"
"swap" "swap"
"open"
"close"
"exists" "exists"
"matches" "matches"
"contains" "contains"

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,36 @@
;; Module manifest — auto-generated by compile-modules.js
{
"sx render" {:file "render.sxbc" :deps () :exports ("HTML_TAGS" "VOID_ELEMENTS" "BOOLEAN_ATTRS" "*definition-form-extensions*" "definition-form?" "parse-element-args" "render-attrs" "eval-cond" "eval-cond-scheme" "eval-cond-clojure" "process-bindings" "is-render-expr?" "merge-spread-attrs" "escape-html" "escape-attr")}
"sx signals" {:file "core-signals.sxbc" :deps () :exports ("make-signal" "signal?" "signal-value" "signal-set-value!" "signal-subscribers" "signal-add-sub!" "signal-remove-sub!" "signal-deps" "signal-set-deps!" "signal" "deref" "reset!" "swap!" "computed" "effect" "*batch-depth*" "*batch-queue*" "batch" "notify-subscribers" "flush-subscribers" "dispose-computed" "with-island-scope" "register-in-scope")}
"sx signals-web" {:file "signals.sxbc" :deps ("sx dom" "sx browser") :exports ("with-marsh-scope" "dispose-marsh-scope" "emit-event" "on-event" "bridge-event" "resource")}
"web deps" {:file "deps.sxbc" :deps () :exports ("scan-refs" "scan-refs-walk" "transitive-deps-walk" "transitive-deps" "compute-all-deps" "scan-components-from-source" "components-needed" "page-component-bundle" "page-css-classes" "scan-io-refs-walk" "scan-io-refs" "transitive-io-refs-walk" "transitive-io-refs" "compute-all-io-refs" "component-io-refs-cached" "component-pure?" "render-target" "page-render-plan" "env-components")}
"web router" {:file "router.sxbc" :deps () :exports ("split-path-segments" "make-route-segment" "parse-route-pattern" "match-route-segments" "match-route" "find-matching-route" "_fn-to-segment" "sx-url-to-path" "_count-leading-dots" "_strip-trailing-close" "_index-of-safe" "_last-index-of" "_pop-sx-url-level" "_pop-sx-url-levels" "_split-pos-kw" "_parse-relative-body" "_extract-innermost" "_find-kw-in-tokens" "_find-keyword-value" "_replace-kw-in-tokens" "_set-keyword-in-content" "_is-delta-value?" "_apply-delta" "_apply-kw-pairs" "_apply-keywords-to-url" "_normalize-relative" "resolve-relative-url" "relative-sx-url?" "_url-special-forms" "url-special-form?" "parse-sx-url" "url-special-form-name" "url-special-form-inner" "url-to-expr" "auto-quote-unknowns" "prepare-url-expr")}
"web page-helpers" {:file "page-helpers.sxbc" :deps () :exports ("special-form-category-map" "extract-define-kwargs" "categorize-special-forms" "build-ref-items-with-href" "build-reference-data" "build-attr-detail" "build-header-detail" "build-event-detail" "build-component-source" "build-bundle-analysis" "build-routing-analysis" "build-affinity-analysis")}
"sx freeze" {:file "freeze.sxbc" :deps () :exports ("freeze-registry" "freeze-signal" "freeze-scope" "cek-freeze-scope" "cek-freeze-all" "cek-thaw-scope" "cek-thaw-all" "freeze-to-sx" "thaw-from-sx")}
"sx bytecode" {:file "bytecode.sxbc" :deps () :exports ("OP_CONST" "OP_NIL" "OP_TRUE" "OP_FALSE" "OP_POP" "OP_DUP" "OP_LOCAL_GET" "OP_LOCAL_SET" "OP_UPVALUE_GET" "OP_UPVALUE_SET" "OP_GLOBAL_GET" "OP_GLOBAL_SET" "OP_JUMP" "OP_JUMP_IF_FALSE" "OP_JUMP_IF_TRUE" "OP_CALL" "OP_TAIL_CALL" "OP_RETURN" "OP_CLOSURE" "OP_CALL_PRIM" "OP_APPLY" "OP_LIST" "OP_DICT" "OP_APPEND_BANG" "OP_ITER_INIT" "OP_ITER_NEXT" "OP_MAP_OPEN" "OP_MAP_APPEND" "OP_MAP_CLOSE" "OP_FILTER_TEST" "OP_HO_MAP" "OP_HO_FILTER" "OP_HO_REDUCE" "OP_HO_FOR_EACH" "OP_HO_SOME" "OP_HO_EVERY" "OP_SCOPE_PUSH" "OP_SCOPE_POP" "OP_PROVIDE_PUSH" "OP_PROVIDE_POP" "OP_CONTEXT" "OP_EMIT" "OP_EMITTED" "OP_RESET" "OP_SHIFT" "OP_DEFINE" "OP_DEFCOMP" "OP_DEFISLAND" "OP_DEFMACRO" "OP_EXPAND_MACRO" "OP_STR_CONCAT" "OP_STR_JOIN" "OP_SERIALIZE" "OP_ADD" "OP_SUB" "OP_MUL" "OP_DIV" "OP_EQ" "OP_LT" "OP_GT" "OP_NOT" "OP_LEN" "OP_FIRST" "OP_REST" "OP_NTH" "OP_CONS" "OP_NEG" "OP_INC" "OP_DEC" "OP_ASER_TAG" "OP_ASER_FRAG" "BYTECODE_MAGIC" "BYTECODE_VERSION" "CONST_NUMBER" "CONST_STRING" "CONST_BOOL" "CONST_NIL" "CONST_SYMBOL" "CONST_KEYWORD" "CONST_LIST" "CONST_DICT" "CONST_CODE" "opcode-name")}
"sx compiler" {:file "compiler.sxbc" :deps () :exports ("make-pool" "pool-add" "make-scope" "scope-define-local" "scope-resolve" "make-emitter" "emit-byte" "emit-u16" "emit-i16" "emit-op" "emit-const" "current-offset" "patch-i16" "compile-expr" "compile-symbol" "compile-dict" "compile-list" "compile-if" "compile-when" "compile-and" "compile-or" "compile-begin" "compile-let" "desugar-let-match" "compile-letrec" "compile-lambda" "compile-define" "compile-set" "compile-quote" "compile-cond" "compile-case" "compile-case-clauses" "compile-match" "compile-thread" "compile-thread-step" "compile-defcomp" "compile-defmacro" "compile-quasiquote" "compile-qq-expr" "compile-qq-list" "compile-call" "compile" "compile-module")}
"sx vm" {:file "vm.sxbc" :deps () :exports ("make-upvalue-cell" "uv-get" "uv-set!" "make-vm-code" "make-vm-closure" "make-vm-frame" "make-vm" "vm-push" "vm-pop" "vm-peek" "frame-read-u8" "frame-read-u16" "frame-read-i16" "vm-push-frame" "code-from-value" "vm-closure?" "*active-vm*" "*jit-compile-fn*" "lambda?" "lambda-compiled" "lambda-set-compiled!" "lambda-name" "cek-call-or-suspend" "try-jit-call" "vm-call" "frame-local-get" "frame-local-set" "frame-upvalue-get" "frame-upvalue-set" "frame-ip" "frame-set-ip!" "frame-base" "frame-closure" "closure-code" "closure-upvalues" "closure-env" "code-bytecode" "code-constants" "code-locals" "vm-sp" "vm-set-sp!" "vm-stack" "vm-set-stack!" "vm-frames" "vm-set-frames!" "vm-globals-ref" "collect-n-from-stack" "collect-n-pairs" "pad-n-nils" "vm-global-get" "vm-resolve-ho-form" "vm-call-external" "vm-global-set" "env-walk" "env-walk-set!" "vm-create-closure" "vm-run" "vm-step" "vm-call-closure" "vm-execute-module" "vm-resume-module")}
"sx dom" {:file "dom.sxbc" :deps () :exports ("dom-document" "dom-window" "dom-body" "dom-head" "dom-create-element" "create-text-node" "create-fragment" "create-comment" "dom-append" "dom-prepend" "dom-insert-before" "dom-insert-after" "dom-remove" "dom-is-active-element?" "dom-is-input-element?" "dom-is-child-of?" "dom-attr-list" "dom-remove-child" "dom-replace-child" "dom-clone" "dom-query" "dom-query-all" "dom-query-by-id" "dom-closest" "dom-matches?" "dom-get-attr" "dom-set-attr" "dom-remove-attr" "dom-has-attr?" "dom-add-class" "dom-remove-class" "dom-has-class?" "dom-visible?" "dom-text-content" "dom-set-text-content" "dom-inner-html" "dom-set-inner-html" "dom-outer-html" "dom-insert-adjacent-html" "dom-get-style" "dom-set-style" "dom-get-prop" "dom-set-prop" "dom-tag-name" "dom-node-type" "dom-node-name" "dom-id" "dom-parent" "dom-first-child" "dom-next-sibling" "dom-child-list" "dom-is-fragment?" "dom-child-nodes" "dom-remove-children-after" "dom-focus" "dom-parse-html" "dom-listen" "dom-add-listener" "dom-dispatch" "event-detail" "prevent-default" "stop-propagation" "event-modifier-key?" "element-value" "error-message" "dom-get-data" "dom-set-data" "dom-append-to-head" "set-document-title")}
"sx browser" {:file "browser.sxbc" :deps () :exports ("browser-location-href" "browser-location-pathname" "browser-location-origin" "browser-same-origin?" "url-pathname" "browser-push-state" "browser-replace-state" "browser-reload" "browser-navigate" "local-storage-get" "local-storage-set" "local-storage-remove" "set-timeout" "set-interval" "clear-timeout" "clear-interval" "request-animation-frame" "fetch-request" "new-abort-controller" "controller-signal" "controller-abort" "promise-then" "promise-resolve" "promise-delayed" "browser-confirm" "browser-prompt" "browser-media-matches?" "json-parse" "json-stringify" "log-info" "log-warn" "console-log" "now-ms" "schedule-idle" "set-cookie" "get-cookie")}
"web adapter-html" {:file "adapter-html.sxbc" :deps ("sx render") :exports ("render-to-html" "render-value-to-html" "RENDER_HTML_FORMS" "render-html-form?" "render-list-to-html" "dispatch-html-form" "render-lambda-html" "render-html-component" "render-html-element" "render-html-lake" "render-html-marsh" "render-html-island" "serialize-island-state")}
"web adapter-sx" {:file "adapter-sx.sxbc" :deps ("web boot-helpers") :exports ("render-to-sx" "aser" "aser-list" "aser-reserialize" "aser-fragment" "aser-call" "aser-expand-component" "SPECIAL_FORM_NAMES" "HO_FORM_NAMES" "special-form?" "ho-form?" "aser-special" "eval-case-aser")}
"web adapter-dom" {:file "adapter-dom.sxbc" :deps ("sx dom" "sx render") :exports ("SVG_NS" "MATH_NS" "island-scope?" "hydrating?" "contains-deref?" "dom-on" "render-to-dom" "render-dom-list" "render-dom-element" "render-dom-component" "render-dom-fragment" "render-dom-raw" "render-dom-unknown-component" "RENDER_DOM_FORMS" "render-dom-form?" "dispatch-render-form" "render-lambda-dom" "render-dom-island" "render-dom-lake" "render-dom-marsh" "reactive-text" "reactive-attr" "reactive-spread" "reactive-fragment" "render-list-item" "extract-key" "reactive-list" "bind-input" "*use-cek-reactive*" "enable-cek-reactive!" "cek-reactive-text" "cek-reactive-attr" "render-dom-portal" "render-dom-error-boundary")}
"tw-layout" {:file "tw-layout.sxbc" :deps () :exports ("tw-spacing-props" "tw-displays" "tw-max-widths" "tw-min-widths" "tw-resolve-layout")}
"tw-type" {:file "tw-type.sxbc" :deps () :exports ("tw-sizes" "tw-weights" "tw-families" "tw-alignments" "tw-leading" "tw-tracking" "tw-resolve-type")}
"tw" {:file "tw.sxbc" :deps () :exports ("colour-bases" "colour-with-alpha" "lerp" "shade-to-lightness" "colour" "tw-colour-props" "tw-breakpoints" "tw-states" "tw-selector-states" "tw-container-sizes" "tw-spacing-value" "tw-template" "tw-shadow-sizes" "tw-rounded-sizes" "tw-border-widths" "tw-arbitrary-props" "tw-resolve-arbitrary" "tw-resolve-style" "tw-process-token")}
"sx text-layout" {:file "text-layout.sxbc" :deps () :exports ("measure-text" "line-badness" "compute-demerits" "sum-widths" "find-breaks" "break-lines" "break-lines-greedy" "position-line" "position-lines" "pretext-position-line" "pretext-layout-lines" "layout-paragraph" "make-hyphenation-trie" "find-hyphenation-points" "hyphenate-word" "typeset" "typeset-plain")}
"web boot-helpers" {:file "boot-helpers.sxbc" :deps ("sx dom" "sx browser" "web adapter-dom") :exports ("_sx-bound-prefix" "mark-processed!" "is-processed?" "clear-processed!" "callable?" "to-kebab" "sx-load-components" "call-expr" "base-env" "get-render-env" "merge-envs" "sx-render-with-env" "parse-env-attr" "store-env-attr" "resolve-mount-target" "remove-head-element" "set-sx-comp-cookie" "clear-sx-comp-cookie" "log-parse-error" "loaded-component-names" "csrf-token" "validate-for-request" "build-request-body" "abort-previous-target" "abort-previous" "track-controller" "track-controller-target" "new-abort-controller" "abort-signal" "apply-optimistic" "revert-optimistic" "dom-has-attr?" "show-indicator" "disable-elements" "clear-loading-state" "abort-error?" "promise-catch" "fetch-request" "fetch-location" "fetch-and-restore" "fetch-preload" "fetch-streaming" "dom-parse-html-document" "dom-body-inner-html" "create-script-clone" "cross-origin?" "browser-scroll-to" "with-transition" "event-source-connect" "event-source-listen" "bind-boost-link" "bind-boost-form" "bind-client-route-click" "sw-post-message" "try-parse-json" "strip-component-scripts" "extract-response-css" "sx-render" "sx-hydrate" "sx-process-scripts" "select-from-container" "children-to-fragment" "select-html-from-doc" "register-io-deps" "resolve-page-data" "parse-sx-data" "try-eval-content" "try-async-eval-content" "try-rerender-page" "execute-action" "bind-preload" "persist-offline-data" "retrieve-offline-data")}
"sx hypersx" {:file "hypersx.sxbc" :deps () :exports ("hsx-indent" "hsx-sym-name" "hsx-kw-name" "hsx-is-element?" "hsx-is-component?" "hsx-extract-css" "hsx-tag-str" "hsx-atom" "hsx-inline" "hsx-attrs-str" "hsx-children" "sx->hypersx-node" "sx->hypersx")}
"sx harness" {:file "harness.sxbc" :deps () :exports ("assert" "assert=" "default-platform" "make-harness" "harness-reset!" "harness-log" "harness-get" "harness-set!" "make-interceptor" "install-interceptors" "io-calls" "io-call-count" "io-call-nth" "io-call-args" "io-call-result" "assert-io-called" "assert-no-io" "assert-io-count" "assert-io-args" "assert-io-result" "assert-state")}
"sx harness-reactive" {:file "harness-reactive.sxbc" :deps () :exports ("assert-signal-value" "assert-signal-has-subscribers" "assert-signal-no-subscribers" "assert-signal-subscriber-count" "simulate-signal-set!" "simulate-signal-swap!" "assert-computed-dep-count" "assert-computed-depends-on" "count-effect-runs" "make-test-signal" "assert-batch-coalesces")}
"sx harness-web" {:file "harness-web.sxbc" :deps () :exports ("mock-element" "mock-set-text!" "mock-append-child!" "mock-set-attr!" "mock-get-attr" "mock-add-listener!" "simulate-click" "simulate-input" "simulate-event" "assert-text" "assert-attr" "assert-class" "assert-no-class" "assert-child-count" "assert-event-fired" "assert-no-event" "event-fire-count" "make-web-harness" "is-renderable?" "is-render-leak?" "assert-renderable" "render-body-audit" "assert-render-body-clean" "mock-render" "mock-render-fragment" "assert-single-render-root" "assert-tag")}
"web engine" {:file "engine.sxbc" :deps ("web boot-helpers" "sx dom" "sx browser") :exports ("ENGINE_VERBS" "DEFAULT_SWAP" "parse-time" "parse-trigger-spec" "default-trigger" "get-verb-info" "build-request-headers" "process-response-headers" "parse-swap-spec" "parse-retry-spec" "next-retry-ms" "filter-params" "resolve-target" "apply-optimistic" "revert-optimistic" "find-oob-swaps" "morph-node" "sync-attrs" "morph-children" "morph-island-children" "morph-marsh" "process-signal-updates" "swap-dom-nodes" "insert-remaining-siblings" "swap-html-string" "handle-history" "PRELOAD_TTL" "preload-cache-get" "preload-cache-set" "classify-trigger" "should-boost-link?" "should-boost-form?" "parse-sse-swap")}
"web orchestration" {:file "orchestration.sxbc" :deps ("web boot-helpers" "sx dom" "sx browser" "web adapter-dom" "web engine") :exports ("_preload-cache" "dispatch-trigger-events" "execute-request" "do-fetch" "handle-fetch-success" "flush-collected-styles" "handle-sx-response" "handle-html-response" "handle-retry" "bind-triggers" "bind-event" "post-swap" "process-settle-hooks" "activate-scripts" "process-oob-swaps" "hoist-head-elements" "process-boosted" "boost-descendants" "_page-data-cache" "_page-data-cache-ttl" "page-data-cache-key" "page-data-cache-get" "page-data-cache-set" "invalidate-page-cache" "invalidate-all-page-cache" "update-page-cache" "process-cache-directives" "_optimistic-snapshots" "optimistic-cache-update" "optimistic-cache-revert" "optimistic-cache-confirm" "submit-mutation" "_is-online" "_offline-queue" "offline-is-online?" "offline-set-online!" "offline-queue-mutation" "offline-sync" "offline-pending-count" "offline-aware-mutation" "current-page-layout" "swap-rendered-content" "resolve-route-target" "deps-satisfied?" "try-client-route" "bind-client-route-link" "process-sse" "bind-sse" "bind-sse-swap" "bind-inline-handlers" "bind-preload-for" "do-preload" "VERB_SELECTOR" "process-elements" "process-one" "process-emit-elements" "save-scroll-position" "handle-popstate" "engine-init")}
"hs-tokenizer" {:file "hs-tokenizer.sxbc" :deps () :exports ("hs-make-token" "hs-digit?" "hs-letter?" "hs-ident-start?" "hs-ident-char?" "hs-ws?" "hs-keywords" "hs-keyword?" "hs-tokenize")}
"hs-parser" {:file "hs-parser.sxbc" :deps ("hs-tokenizer") :exports ("hs-parse" "hs-compile")}
"hs-compiler" {:file "hs-compiler.sxbc" :deps ("hs-tokenizer" "hs-parser") :exports ("hs-to-sx" "hs-to-sx-from-source")}
"hs-runtime" {:file "hs-runtime.sxbc" :deps ("hs-tokenizer" "hs-parser" "hs-compiler") :exports ("hs-each" "hs-on" "hs-on-every" "hs-init" "hs-wait" "hs-wait-for" "hs-settle" "hs-toggle-class!" "hs-toggle-between!" "hs-toggle-style!" "hs-take!" "hs-put!" "hs-navigate!" "hs-scroll!" "hs-halt!" "hs-select!" "hs-reset!" "hs-next" "hs-previous" "hs-query-all" "hs-query-first" "hs-query-last" "hs-first" "hs-last" "hs-repeat-times" "hs-repeat-forever" "hs-fetch" "hs-fetch-gql" "hs-coerce" "hs-add" "hs-make" "hs-install" "hs-measure" "hs-transition" "hs-transition-from" "hs-type-check" "hs-type-check-strict" "hs-strict-eq" "hs-eq-ignore-case" "hs-contains-ignore-case?" "hs-falsy?" "hs-matches?" "hs-matches-ignore-case?" "hs-contains?" "precedes?" "follows?" "hs-empty?" "hs-empty-target!" "hs-open!" "hs-close!" "hs-hide!" "hs-show!" "hs-first" "hs-last" "hs-template" "hs-make-object" "hs-method-call" "hs-beep" "hs-prop-is" "hs-slice" "hs-sorted-by" "hs-sorted-by-desc" "hs-split-by" "hs-joined-by" "hs-sorted-by" "hs-sorted-by-desc")}
"hs-integration" {:file "hs-integration.sxbc" :deps ("hs-tokenizer" "hs-parser" "hs-compiler" "hs-runtime") :exports ("hs-handler" "hs-activate!" "hs-boot!" "hs-boot-subtree!")}
"hs-htmx" {:file "hs-htmx.sxbc" :deps ("hs-tokenizer" "hs-parser" "hs-compiler" "hs-runtime" "hs-integration") :exports ("HX-CONFIG-DEFAULTS" "HX-REQUEST-CLASS" "url-encode-params" "sx-url-with-params" "hx-element-config" "hx-walk-inherited" "hx-resolve-attr" "hx-verb-info" "hx-default-trigger" "hx-parse-time" "hx-parse-trigger" "hx-resolve-target" "hx-normalize-swap-mode" "hx-parse-swap-spec" "hx-swap!" "hx-select-fragment" "hx-element-source-id" "hx-form-values" "hx-collect-params" "hx-build-headers" "hx-request" "hx-process-oob!" "hx-process-partials!" "hx-parse-status-modifiers" "hx-status-matches?" "hx-parse-status-rules" "hx-match-status" "hx-handle-history!" "hx-indicator-on!" "hx-indicator-off!" "hx-disable-inputs!" "hx-enable-inputs!" "hx-confirm?" "hx-validate-form?" "hx-parse-sync-spec" "hx-sync-resolve-target" "hx-sync-check!" "hx-sync-complete!" "hx-dispatch!" "hx-strip-outer" "hx-do-swap" "hx-make-handler" "hx-wrap-debounce" "hx-wrap-throttle" "hx-wrap-changed" "hx-register-trigger!" "htmx-activate!" "HX-VERB-SELECTORS" "htmx-boot!" "hx-preload-cache" "hx-preload-register!" "hx-parse-sse-swap" "hx-sse-connect!" "htmx-boot-subtree!" "hx-boost-link!" "hx-boost-form!" "hx-boost-subtree!")}
"_entry" {:file "boot.sxbc" :deps ("sx dom" "sx browser" "web boot-helpers" "web adapter-dom" "sx signals" "sx signals-web" "web router" "web page-helpers" "web orchestration" "sx render" "sx text-layout") :lazy-deps ("sx bytecode" "hs-tokenizer" "hs-parser" "hs-compiler" "hs-runtime" "hs-integration" "hs-htmx")}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1792,7 +1792,7 @@
blake2_js_for_wasm_create: blake2_js_for_wasm_create}; blake2_js_for_wasm_create: blake2_js_for_wasm_create};
} }
(globalThis)) (globalThis))
({"link":[["runtime-0db9b496",0],["prelude-d7e4b000",0],["stdlib-23ce0836",[]],["re-9a0de245",[2]],["sx-5ce001fe",[2,3]],["jsoo_runtime-f96b44a8",[2]],["js_of_ocaml-651f6707",[2,5]],["dune__exe__Sx_browser-8c3734f6",[2,4,6]],["std_exit-10fb8830",[2]],["start-f808dbe1",0]],"generated":(b=>{var ({"link":[["runtime-0db9b496",0],["prelude-d7e4b000",0],["stdlib-23ce0836",[]],["re-9a0de245",[2]],["sx-5ce001fe",[2,3]],["jsoo_runtime-f96b44a8",[2]],["js_of_ocaml-651f6707",[2,5]],["dune__exe__Sx_browser-8afc1869",[2,4,6]],["std_exit-10fb8830",[2]],["start-f808dbe1",0]],"generated":(b=>{var
c=b,a=b?.module?.export||b;return{"env":{"caml_ba_kind_of_typed_array":()=>{throw new c=b,a=b?.module?.export||b;return{"env":{"caml_ba_kind_of_typed_array":()=>{throw new
Error("caml_ba_kind_of_typed_array not implemented")},"caml_exn_with_js_backtrace":()=>{throw new Error("caml_ba_kind_of_typed_array not implemented")},"caml_exn_with_js_backtrace":()=>{throw new
Error("caml_exn_with_js_backtrace not implemented")},"caml_int64_create_lo_mi_hi":()=>{throw new Error("caml_exn_with_js_backtrace not implemented")},"caml_int64_create_lo_mi_hi":()=>{throw new