Files
rose-ash/shared/static/wasm/sx/boot.sxbc
giles e0070041d6 Add .sxbc s-expression bytecode format
Bytecode modules are now serialized as s-expressions (.sxbc) in addition
to JSON (.sxbc.json). The .sxbc format is the canonical representation —
content-addressable, parseable by the SX parser, and suitable for CID
referencing. Annotation layers (source maps, variable names, tests, docs)
can reference the bytecode CID without polluting the bytecode itself.

Format: (sxbc version hash (code :arity N :bytecode (...) :constants (...)))

The browser loader tries .sxbc first (via load-sxbc kernel primitive),
falls back to .sxbc.json. Caddy needs .sxbc MIME type to serve the new
format (currently 404s, JSON fallback works).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 14:16:22 +00:00

465 lines
18 KiB
Plaintext

(sxbc 1 "8dd29bf7bc354b48"
(code
:bytecode (1 1 0 128 0 0 5 51 3 0 128 2 0 5 51 5 0 128 4 0 5 51 7 0 128 6 0 5 51 9 0 128 8 0 5 51 11 0 128 10 0 5 51 13 0 128 12 0 5 51 15 0 128 14 0 5 51 17 0 128 16 0 5 52 19 0 0 128 18 0 5 51 21 0 128 20 0 5 51 23 0 128 22 0 5 51 25 0 128 24 0 5 51 27 0 128 26 0 5 51 29 0 128 28 0 5 51 31 0 128 30 0 5 52 19 0 0 128 32 0 5 52 19 0 0 128 33 0 5 51 35 0 128 34 0 5 51 37 0 128 36 0 5 51 39 0 128 38 0 5 51 41 0 128 40 0 5 51 43 0 128 42 0 50)
:constants (
"HEAD_HOIST_SELECTOR"
"meta, title, link[rel='canonical'], script[type='application/ld+json']"
"hoist-head-elements-full"
(code :arity 1
:bytecode (20 0 0 16 0 20 1 0 48 2 17 1 51 3 0 16 1 52 2 0 2 50)
:constants (
"dom-query-all"
"HEAD_HOIST_SELECTOR"
"for-each"
(code :arity 1
:bytecode (20 1 0 16 0 48 1 52 0 0 1 17 1 16 1 1 3 0 52 2 0 2 33 30 0 20 4 0 20 5 0 16 0 48 1 48 1 5 20 6 0 20 7 0 16 0 48 1 16 0 49 2 32 205 0 16 1 1 8 0 52 2 0 2 33 103 0 20 9 0 16 0 1 10 0 48 2 17 2 20 9 0 16 0 1 11 0 48 2 17 3 16 2 33 20 0 20 12 0 1 14 0 16 2 1 15 0 52 13 0 3 48 1 32 1 0 2 5 16 3 33 20 0 20 12 0 1 16 0 16 3 1 15 0 52 13 0 3 48 1 32 1 0 2 5 20 6 0 20 7 0 16 0 48 1 16 0 48 2 5 20 17 0 16 0 49 1 32 90 0 16 1 1 18 0 52 2 0 2 6 33 18 0 5 20 9 0 16 0 1 19 0 48 2 1 20 0 52 2 0 2 33 34 0 20 12 0 1 21 0 48 1 5 20 6 0 20 7 0 16 0 48 1 16 0 48 2 5 20 17 0 16 0 49 1 32 22 0 20 6 0 20 7 0 16 0 48 1 16 0 48 2 5 20 17 0 16 0 49 1 50)
:constants (
"lower"
"dom-tag-name"
"="
"title"
"set-document-title"
"dom-text-content"
"dom-remove-child"
"dom-parent"
"meta"
"dom-get-attr"
"name"
"property"
"remove-head-element"
"str"
"meta[name=\""
"\"]"
"meta[property=\""
"dom-append-to-head"
"link"
"rel"
"canonical"
"link[rel=\"canonical\"]"))))
"sx-mount"
(code :arity 3
:bytecode (20 0 0 16 0 48 1 17 3 16 3 33 90 0 20 2 0 16 3 48 1 52 1 0 1 33 42 0 20 3 0 16 1 16 2 48 2 17 4 20 4 0 16 3 1 5 0 48 2 5 20 6 0 16 3 16 4 48 2 5 20 7 0 16 3 48 1 32 1 0 2 5 20 8 0 16 3 48 1 5 20 9 0 16 3 48 1 5 20 10 0 16 3 48 1 5 20 11 0 49 0 32 1 0 2 50)
:constants (
"resolve-mount-target"
"empty?"
"dom-child-list"
"sx-render-with-env"
"dom-set-text-content"
""
"dom-append"
"hoist-head-elements-full"
"process-elements"
"sx-hydrate-elements"
"sx-hydrate-islands"
"run-post-render-hooks"))
"resolve-suspense"
(code :arity 2
:bytecode (20 0 0 2 48 1 5 20 1 0 1 3 0 16 0 1 4 0 52 2 0 3 48 1 17 2 16 2 33 93 0 20 5 0 16 1 48 1 17 3 20 6 0 2 48 1 17 4 20 7 0 16 2 1 8 0 48 2 5 51 10 0 1 2 1 4 16 3 52 9 0 2 5 20 11 0 16 2 48 1 5 20 12 0 16 2 48 1 5 20 13 0 16 2 48 1 5 20 14 0 48 0 5 20 15 0 16 2 1 16 0 1 17 0 16 0 65 1 0 49 3 32 14 0 20 18 0 1 19 0 16 0 52 2 0 2 49 1 50)
:constants (
"process-sx-scripts"
"dom-query"
"str"
"[data-suspense=\""
"\"]"
"parse"
"get-render-env"
"dom-set-text-content"
""
"for-each"
(code :arity 1 :upvalue-count 2
:bytecode (20 0 0 18 0 20 1 0 16 0 18 1 2 48 3 49 2 50)
:constants (
"dom-append"
"render-to-dom"))
"process-elements"
"sx-hydrate-elements"
"sx-hydrate-islands"
"run-post-render-hooks"
"dom-dispatch"
"sx:resolved"
"id"
"log-warn"
"resolveSuspense: no element for id="))
"sx-hydrate-elements"
(code :arity 1
:bytecode (20 0 0 16 0 6 34 6 0 5 20 1 0 48 0 1 2 0 48 2 17 1 51 4 0 16 1 52 3 0 2 50)
:constants (
"dom-query-all"
"dom-body"
"[data-sx]"
"for-each"
(code :arity 1
:bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 22 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 2 49 2 32 1 0 2 50)
:constants (
"not"
"is-processed?"
"hydrated"
"mark-processed!"
"sx-update-element"))))
"sx-update-element"
(code :arity 2
:bytecode (20 0 0 16 0 48 1 17 2 16 2 33 96 0 20 1 0 16 2 1 2 0 48 2 17 3 16 3 33 75 0 20 3 0 16 2 48 1 17 4 20 4 0 16 4 16 1 48 2 17 5 20 5 0 16 3 16 5 48 2 17 6 20 6 0 16 2 1 7 0 48 2 5 20 8 0 16 2 16 6 48 2 5 16 1 33 14 0 20 9 0 16 2 16 4 16 1 49 3 32 1 0 2 32 1 0 2 32 1 0 2 50)
:constants (
"resolve-mount-target"
"dom-get-attr"
"data-sx"
"parse-env-attr"
"merge-envs"
"sx-render-with-env"
"dom-set-text-content"
""
"dom-append"
"store-env-attr"))
"sx-render-component"
(code :arity 3
:bytecode (16 0 1 1 0 52 0 0 2 33 5 0 16 0 32 9 0 1 1 0 16 0 52 2 0 2 17 3 20 3 0 16 2 48 1 17 4 20 4 0 16 4 16 3 48 2 17 5 16 5 52 6 0 1 52 5 0 1 33 16 0 1 8 0 16 3 52 2 0 2 52 7 0 1 32 40 0 16 3 52 10 0 1 52 9 0 1 17 6 51 12 0 1 6 1 1 16 1 52 13 0 1 52 11 0 2 5 20 14 0 16 6 16 4 2 49 3 50)
:constants (
"starts-with?"
"~"
"str"
"get-render-env"
"env-get"
"not"
"component?"
"error"
"Unknown component: "
"list"
"make-symbol"
"for-each"
(code :arity 1 :upvalue-count 2
:bytecode (20 0 0 18 0 20 1 0 20 2 0 16 0 48 1 48 1 48 2 5 20 0 0 18 0 18 1 16 0 52 3 0 2 49 2 50)
:constants (
"append!"
"make-keyword"
"to-kebab"
"dict-get"))
"keys"
"render-to-dom"))
"process-sx-scripts"
(code :arity 1
:bytecode (20 0 0 16 0 48 1 17 1 51 2 0 16 1 52 1 0 2 50)
:constants (
"query-sx-scripts"
"for-each"
(code :arity 1
:bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 173 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 48 1 17 1 20 5 0 16 0 1 6 0 48 2 33 12 0 20 7 0 16 0 16 1 49 2 32 125 0 16 1 52 8 0 1 6 34 11 0 5 16 1 52 10 0 1 52 9 0 1 33 4 0 2 32 97 0 20 5 0 16 0 1 11 0 48 2 33 21 0 20 12 0 16 1 48 1 17 2 51 14 0 16 2 52 13 0 2 32 63 0 20 5 0 16 0 1 15 0 48 2 33 43 0 20 16 0 16 0 1 15 0 48 2 17 2 20 17 0 16 2 48 1 17 3 16 3 33 13 0 20 18 0 16 3 16 1 2 49 3 32 1 0 2 32 7 0 20 19 0 16 1 49 1 32 1 0 2 50)
:constants (
"not"
"is-processed?"
"script"
"mark-processed!"
"dom-text-content"
"dom-has-attr?"
"data-components"
"process-component-script"
"nil?"
"empty?"
"trim"
"data-init"
"sx-parse"
"for-each"
(code :arity 1
:bytecode (20 0 0 16 0 49 1 50)
:constants (
"cek-eval"))
"data-mount"
"dom-get-attr"
"dom-query"
"sx-mount"
"sx-load-components"))))
"process-component-script"
(code :arity 2
:bytecode (20 0 0 16 0 1 1 0 48 2 17 2 16 2 52 2 0 1 33 38 0 16 1 6 33 15 0 5 16 1 52 5 0 1 52 4 0 1 52 3 0 1 33 10 0 20 6 0 16 1 49 1 32 1 0 2 32 239 0 16 1 6 33 15 0 5 16 1 52 5 0 1 52 4 0 1 52 3 0 1 17 3 20 7 0 1 8 0 48 1 17 4 16 4 16 2 52 9 0 2 33 103 0 16 3 33 41 0 20 10 0 1 8 0 16 2 48 2 5 20 10 0 1 11 0 16 1 48 2 5 20 6 0 16 1 48 1 5 20 12 0 1 13 0 48 1 32 54 0 20 7 0 1 11 0 48 1 17 5 16 5 33 28 0 20 6 0 16 5 48 1 5 20 12 0 1 15 0 16 2 1 16 0 52 14 0 3 48 1 32 11 0 20 17 0 48 0 5 20 18 0 48 0 32 84 0 16 3 33 50 0 20 10 0 1 8 0 16 2 48 2 5 20 10 0 1 11 0 16 1 48 2 5 20 6 0 16 1 48 1 5 20 12 0 1 19 0 16 2 1 16 0 52 14 0 3 48 1 32 29 0 20 20 0 1 8 0 48 1 5 20 20 0 1 11 0 48 1 5 20 17 0 48 0 5 20 18 0 48 0 5 20 21 0 16 2 49 1 50)
:constants (
"dom-get-attr"
"data-hash"
"nil?"
"not"
"empty?"
"trim"
"sx-load-components"
"local-storage-get"
"sx-components-hash"
"="
"local-storage-set"
"sx-components-src"
"log-info"
"components: downloaded (cookie stale)"
"str"
"components: cached ("
")"
"clear-sx-comp-cookie"
"browser-reload"
"components: downloaded ("
"local-storage-remove"
"set-sx-comp-cookie"))
"_page-routes"
"list"
"process-page-scripts"
(code
:bytecode (20 0 0 48 0 17 0 20 1 0 1 3 0 16 0 52 4 0 1 1 5 0 52 2 0 3 48 1 5 51 7 0 16 0 52 6 0 2 5 20 1 0 1 8 0 20 9 0 52 4 0 1 1 10 0 52 2 0 3 49 1 50)
:constants (
"query-page-scripts"
"log-info"
"str"
"pages: found "
"len"
" script tags"
"for-each"
(code :arity 1
:bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 128 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 48 1 17 1 20 5 0 1 7 0 16 1 33 9 0 16 1 52 8 0 1 32 3 0 1 9 0 52 6 0 2 48 1 5 16 1 6 33 15 0 5 16 1 52 11 0 1 52 10 0 1 52 0 0 1 33 43 0 20 12 0 16 1 48 1 17 2 20 5 0 1 13 0 16 2 52 8 0 1 1 14 0 52 6 0 3 48 1 5 51 16 0 16 2 52 15 0 2 32 8 0 20 17 0 1 18 0 49 1 32 1 0 2 50)
:constants (
"not"
"is-processed?"
"pages"
"mark-processed!"
"dom-text-content"
"log-info"
"str"
"pages: script text length="
"len"
0
"empty?"
"trim"
"parse"
"pages: parsed "
" entries"
"for-each"
(code :arity 1
:bytecode (20 0 0 20 1 0 16 0 1 3 0 20 4 0 16 0 1 6 0 52 5 0 2 48 1 65 1 0 52 2 0 2 49 2 50)
:constants (
"append!"
"_page-routes"
"merge"
"parsed"
"parse-route-pattern"
"get"
"path"))
"log-warn"
"pages: script tag is empty"))
"pages: "
"_page-routes"
" routes loaded"))
"sx-hydrate-islands"
(code :arity 1
:bytecode (20 0 0 16 0 6 34 6 0 5 20 1 0 48 0 1 2 0 48 2 17 1 20 3 0 1 5 0 16 1 52 6 0 1 1 7 0 16 0 33 6 0 1 8 0 32 3 0 1 9 0 52 4 0 4 48 1 5 51 11 0 16 1 52 10 0 2 50)
:constants (
"dom-query-all"
"dom-body"
"[data-sx-island]"
"log-info"
"str"
"sx-hydrate-islands: "
"len"
" island(s) in "
"subtree"
"document"
"for-each"
(code :arity 1
:bytecode (20 0 0 16 0 1 1 0 48 2 33 25 0 20 2 0 1 4 0 20 5 0 16 0 1 6 0 48 2 52 3 0 2 49 1 32 41 0 20 2 0 1 7 0 20 5 0 16 0 1 6 0 48 2 52 3 0 2 48 1 5 20 8 0 16 0 1 1 0 48 2 5 20 9 0 16 0 49 1 50)
:constants (
"is-processed?"
"island-hydrated"
"log-info"
"str"
" skip (already hydrated): "
"dom-get-attr"
"data-sx-island"
" hydrating: "
"mark-processed!"
"hydrate-island"))))
"hydrate-island"
(code :arity 1
:bytecode (20 0 0 16 0 1 1 0 48 2 17 1 20 0 0 16 0 1 2 0 48 2 6 34 4 0 5 1 3 0 17 2 1 5 0 16 1 52 4 0 2 17 3 20 6 0 2 48 1 17 4 20 7 0 16 4 16 3 48 2 17 5 16 5 52 9 0 1 6 34 7 0 5 16 5 52 10 0 1 52 8 0 1 33 17 0 20 11 0 1 12 0 16 3 52 4 0 2 49 1 32 149 0 20 14 0 16 2 48 1 52 13 0 1 6 34 4 0 5 65 0 0 17 6 52 15 0 0 17 7 20 16 0 16 5 52 17 0 1 16 4 48 2 17 8 51 19 0 1 8 1 6 16 5 52 20 0 1 52 18 0 2 5 20 21 0 51 22 0 1 7 1 5 1 8 51 23 0 1 3 48 2 17 9 20 24 0 16 0 1 25 0 48 2 5 20 26 0 16 0 16 9 48 2 5 20 27 0 16 0 1 28 0 16 7 48 3 5 20 29 0 16 0 48 1 5 20 30 0 1 31 0 16 3 1 32 0 16 7 52 33 0 1 1 34 0 52 4 0 5 49 1 50)
:constants (
"dom-get-attr"
"data-sx-island"
"data-sx-state"
"{}"
"str"
"~"
"get-render-env"
"env-get"
"not"
"component?"
"island?"
"log-warn"
"hydrate-island: unknown island "
"first"
"sx-parse"
"list"
"env-merge"
"component-closure"
"for-each"
(code :arity 1 :upvalue-count 2
:bytecode (20 0 0 18 0 16 0 18 1 16 0 52 1 0 2 33 11 0 18 1 16 0 52 2 0 2 32 1 0 2 49 3 50)
:constants (
"env-bind!"
"dict-has?"
"dict-get"))
"component-params"
"cek-try"
(code :upvalue-count 3
:bytecode (20 0 0 51 1 0 0 0 51 2 0 0 1 0 2 49 2 50)
:constants (
"with-island-scope"
(code :arity 1 :upvalue-count 1
:bytecode (20 0 0 18 0 16 0 49 2 50)
:constants (
"append!"))
(code :upvalue-count 2
:bytecode (20 0 0 18 0 52 1 0 1 18 1 2 49 3 50)
:constants (
"render-to-dom"
"component-body"))))
(code :arity 1 :upvalue-count 1
:bytecode (20 0 0 1 2 0 18 0 1 3 0 16 0 52 1 0 4 48 1 5 20 4 0 1 5 0 2 48 2 17 1 20 6 0 16 1 1 7 0 1 8 0 48 3 5 20 6 0 16 1 1 9 0 1 10 0 48 3 5 20 11 0 16 1 1 12 0 18 0 1 13 0 16 0 52 1 0 4 48 2 5 16 1 50)
:constants (
"log-warn"
"str"
"hydrate-island FAILED: "
" — "
"dom-create-element"
"div"
"dom-set-attr"
"class"
"sx-island-error"
"style"
"padding:8px;margin:4px 0;border:1px solid #ef4444;border-radius:4px;background:#fef2f2;color:#b91c1c;font-family:monospace;font-size:12px;white-space:pre-wrap"
"dom-set-text-content"
"Island error: "
"
"))
"dom-set-text-content"
""
"dom-append"
"dom-set-data"
"sx-disposers"
"process-elements"
"log-info"
"hydrated island: "
" ("
"len"
" disposers)"))
"dispose-island"
(code :arity 1
:bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 33 24 0 51 3 0 16 1 52 2 0 2 5 20 4 0 16 0 1 1 0 2 48 3 32 1 0 2 5 20 5 0 16 0 1 6 0 49 2 50)
:constants (
"dom-get-data"
"sx-disposers"
"for-each"
(code :arity 1
:bytecode (20 0 0 16 0 48 1 33 7 0 16 0 49 0 32 1 0 2 50)
:constants (
"callable?"))
"dom-set-data"
"clear-processed!"
"island-hydrated"))
"dispose-islands-in"
(code :arity 1
:bytecode (16 0 33 98 0 20 0 0 16 0 1 1 0 48 2 17 1 16 1 6 33 11 0 5 16 1 52 3 0 1 52 2 0 1 33 62 0 51 5 0 16 1 52 4 0 2 17 2 16 2 52 3 0 1 52 2 0 1 33 34 0 20 6 0 1 8 0 16 2 52 9 0 1 1 10 0 52 7 0 3 48 1 5 20 12 0 16 2 52 11 0 2 32 1 0 2 32 1 0 2 32 1 0 2 50)
:constants (
"dom-query-all"
"[data-sx-island]"
"not"
"empty?"
"filter"
(code :arity 1
:bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 50)
:constants (
"not"
"is-processed?"
"island-hydrated"))
"log-info"
"str"
"disposing "
"len"
" island(s)"
"for-each"
"dispose-island"))
"force-dispose-islands-in"
(code :arity 1
:bytecode (16 0 33 70 0 20 0 0 16 0 1 1 0 48 2 17 1 16 1 6 33 11 0 5 16 1 52 3 0 1 52 2 0 1 33 34 0 20 4 0 1 6 0 16 1 52 7 0 1 1 8 0 52 5 0 3 48 1 5 20 10 0 16 1 52 9 0 2 32 1 0 2 32 1 0 2 50)
:constants (
"dom-query-all"
"[data-sx-island]"
"not"
"empty?"
"log-info"
"str"
"force-disposing "
"len"
" island(s)"
"for-each"
"dispose-island"))
"*pre-render-hooks*"
"*post-render-hooks*"
"register-pre-render-hook"
(code :arity 1
:bytecode (20 0 0 20 1 0 16 0 49 2 50)
:constants (
"append!"
"*pre-render-hooks*"))
"register-post-render-hook"
(code :arity 1
:bytecode (20 0 0 20 1 0 16 0 49 2 50)
:constants (
"append!"
"*post-render-hooks*"))
"run-pre-render-hooks"
(code
:bytecode (51 1 0 20 2 0 52 0 0 2 50)
:constants (
"for-each"
(code :arity 1
:bytecode (20 0 0 16 0 2 49 2 50)
:constants (
"cek-call"))
"*pre-render-hooks*"))
"run-post-render-hooks"
(code
:bytecode (20 0 0 1 2 0 20 4 0 52 3 0 1 1 5 0 52 1 0 3 48 1 5 51 7 0 20 4 0 52 6 0 2 50)
:constants (
"log-info"
"str"
"run-post-render-hooks: "
"len"
"*post-render-hooks*"
" hooks"
"for-each"
(code :arity 1
:bytecode (20 0 0 1 2 0 16 0 52 3 0 1 1 4 0 20 5 0 16 0 48 1 1 6 0 16 0 52 7 0 1 52 1 0 6 48 1 5 20 8 0 16 0 2 49 2 50)
:constants (
"log-info"
"str"
" hook type: "
"type-of"
" callable: "
"callable?"
" lambda: "
"lambda?"
"cek-call"))))
"boot-init"
(code
:bytecode (20 0 0 1 2 0 20 3 0 52 1 0 2 48 1 5 20 4 0 48 0 5 20 5 0 48 0 5 20 6 0 2 48 1 5 20 7 0 2 48 1 5 20 8 0 2 48 1 5 20 9 0 48 0 5 20 10 0 2 48 1 5 20 11 0 20 12 0 48 0 1 13 0 51 14 0 49 3 50)
:constants (
"log-info"
"str"
"sx-browser "
"SX_VERSION"
"init-css-tracking"
"process-page-scripts"
"process-sx-scripts"
"sx-hydrate-elements"
"sx-hydrate-islands"
"run-post-render-hooks"
"process-elements"
"dom-listen"
"dom-window"
"popstate"
(code :arity 1
:bytecode (20 0 0 1 1 0 49 1 50)
:constants (
"handle-popstate"
0)))))))