diff --git a/shared/static/wasm/sx/adapter-dom.sx b/shared/static/wasm/sx/adapter-dom.sx
index 55416866..8eb25cd5 100644
--- a/shared/static/wasm/sx/adapter-dom.sx
+++ b/shared/static/wasm/sx/adapter-dom.sx
@@ -1302,8 +1302,8 @@
(fn
((args :as list) (env :as dict) (ns :as string))
(let
- ((fallback-expr (first args))
- (body-exprs (rest args))
+ ((fallback-expr (if (> (len args) 1) (first args) nil))
+ (body-exprs (if (> (len args) 1) (rest args) args))
(container (dom-create-element "div" nil))
(retry-version (signal 0)))
(dom-set-attr container "data-sx-boundary" "true")
@@ -1333,6 +1333,6 @@
(retry-fn
(fn () (swap! retry-version (fn (n) (+ n 1))))))
(let
- ((fallback-dom (if (lambda? fallback-fn) (render-lambda-dom fallback-fn (list err retry-fn) env ns) (render-to-dom (apply fallback-fn (list err retry-fn)) env ns))))
+ ((fallback-dom (if (nil? fallback-fn) (let ((el (dom-create-element "div" nil))) (dom-set-attr el "class" "sx-render-error") (dom-set-attr el "style" "color:red;font-size:0.875rem;padding:0.5rem;border:1px solid red;border-radius:0.25rem;margin:0.5rem 0;") (dom-set-text-content el (str "Render error: " err)) el) (if (lambda? fallback-fn) (render-lambda-dom fallback-fn (list err retry-fn) env ns) (render-to-dom (apply fallback-fn (list err retry-fn)) env ns)))))
(dom-append container fallback-dom)))))))
container)))
diff --git a/shared/static/wasm/sx/adapter-dom.sxbc b/shared/static/wasm/sx/adapter-dom.sxbc
index f8d2c438..88057123 100644
--- a/shared/static/wasm/sx/adapter-dom.sxbc
+++ b/shared/static/wasm/sx/adapter-dom.sxbc
@@ -1,3 +1,3 @@
-(sxbc 1 "3d33d6d0540fbd61"
+(sxbc 1 "09ac0a01c77110da"
(code
- :constants ("SVG_NS" "http://www.w3.org/2000/svg" "MATH_NS" "http://www.w3.org/1998/Math/MathML" "island-scope?" {:upvalue-count 0 :arity 0 :constants ("not" "nil?" "scope-peek" "sx-island-scope") :bytecode (1 3 0 52 2 0 1 52 1 0 1 52 0 0 1 50)} "*memo-cache*" "dict" "*cyst-counter*" 0 "next-cyst-id" {:upvalue-count 0 :arity 0 :constants ("+" "*cyst-counter*" 1 "str" "sx-cyst-") :bytecode (20 1 0 1 2 0 52 0 0 2 21 1 0 5 1 4 0 20 1 0 52 3 0 2 50)} "contains-deref?" {:upvalue-count 0 :arity 1 :constants ("not" "list?" "empty?" "=" "type-of" "first" "symbol" "symbol-name" "deref" "some" "contains-deref?") :bytecode (16 0 52 1 0 1 52 0 0 1 33 4 0 4 32 69 0 16 0 52 2 0 1 33 4 0 4 32 56 0 16 0 52 5 0 1 52 4 0 1 1 6 0 52 3 0 2 6 33 19 0 5 20 7 0 16 0 52 5 0 1 48 1 1 8 0 52 3 0 2 33 4 0 3 32 9 0 20 10 0 16 0 52 9 0 2 50)} "dom-on" {:upvalue-count 0 :arity 3 :constants ("dom-listen" "lambda?" "=" 0 "len" "lambda-params" {:upvalue-count 1 :arity 1 :constants ("trampoline" "call-lambda" "list" "run-post-render-hooks") :bytecode (20 0 0 20 1 0 18 0 52 2 0 0 48 2 48 1 5 20 3 0 49 0 50)} {:upvalue-count 1 :arity 1 :constants ("trampoline" "call-lambda" "list" "run-post-render-hooks") :bytecode (20 0 0 20 1 0 18 0 16 0 52 2 0 1 48 2 48 1 5 20 3 0 49 0 50)}) :bytecode (20 0 0 16 0 16 1 16 2 52 1 0 1 33 36 0 1 3 0 16 2 52 5 0 1 52 4 0 1 52 2 0 2 33 8 0 51 6 0 1 2 32 5 0 51 7 0 1 2 32 2 0 16 2 49 3 50)} "render-to-dom" {:upvalue-count 0 :arity 3 :constants ("set-render-active!" "type-of" "nil" "=" "create-fragment" "boolean" "raw-html" "dom-parse-html" "raw-html-content" "string" "create-text-node" "number" "str" "symbol" "render-to-dom" "trampoline" "eval-expr" "keyword" "keyword-name" "dom-node" "spread" "not" "island-scope?" "scope-emit!" "element-attrs" "spread-attrs" "dict" "has-key?" "__host_handle" "list" "empty?" "render-dom-list" "signal?" "reactive-text" "deref") :bytecode (20 0 0 3 48 1 5 16 0 52 1 0 1 6 1 2 0 52 3 0 2 33 9 0 5 20 4 0 49 0 32 106 1 6 1 5 0 52 3 0 2 33 9 0 5 20 4 0 49 0 32 86 1 6 1 6 0 52 3 0 2 33 15 0 5 20 7 0 16 0 52 8 0 1 49 1 32 60 1 6 1 9 0 52 3 0 2 33 11 0 5 20 10 0 16 0 49 1 32 38 1 6 1 11 0 52 3 0 2 33 15 0 5 20 10 0 16 0 52 12 0 1 49 1 32 12 1 6 1 13 0 52 3 0 2 33 27 0 5 20 14 0 20 15 0 20 16 0 16 0 16 1 48 2 48 1 16 1 16 2 49 3 32 230 0 6 1 17 0 52 3 0 2 33 16 0 5 20 10 0 20 18 0 16 0 48 1 49 1 32 203 0 6 1 19 0 52 3 0 2 33 6 0 5 16 0 32 186 0 6 1 20 0 52 3 0 2 33 36 0 5 20 22 0 48 0 52 21 0 1 33 16 0 1 24 0 16 0 52 25 0 1 52 23 0 2 32 1 0 2 5 16 0 32 139 0 6 1 26 0 52 3 0 2 33 26 0 5 16 0 1 28 0 52 27 0 2 33 5 0 16 0 32 5 0 20 4 0 49 0 32 102 0 6 1 29 0 52 3 0 2 33 32 0 5 16 0 52 30 0 1 33 8 0 20 4 0 49 0 32 11 0 20 31 0 16 0 16 1 16 2 49 3 32 59 0 5 20 32 0 16 0 48 1 33 37 0 20 22 0 48 0 33 10 0 20 33 0 16 0 49 1 32 16 0 20 10 0 20 34 0 16 0 48 1 52 12 0 1 49 1 32 11 0 20 10 0 16 0 52 12 0 1 49 1 50)} "render-dom-list" {:upvalue-count 0 :arity 3 :constants ("first" "=" "type-of" "symbol" "symbol-name" "rest" "raw!" "render-dom-raw" "<>" "render-dom-fragment" "lake" "render-dom-lake" "marsh" "render-dom-marsh" "starts-with?" "html:" "render-dom-element" "slice" 5 "render-dom-form?" "contains?" "HTML_TAGS" ">" "len" 0 "keyword" "dispatch-render-form" "env-has?" "macro?" "env-get" "render-to-dom" "expand-macro" "~" "island?" "scope-peek" "sx-render-markers" "dom-create-element" "span" "dict" "reduce" {:upvalue-count 3 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "dict-set!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 148 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 82 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 18 2 16 3 16 4 52 14 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 22 0 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" "skip" "dom-set-attr" "data-sx-island" "component-name" "not" "empty-dict?" "data-sx-state" "sx-serialize" "render-dom-island" "component?" "render-dom-component" "render-dom-unknown-component" "index-of" "-" "deref" "island-scope?" "trampoline" "eval-expr" "signal?" "reactive-text" "create-text-node" "str" "contains-deref?" "computed" {:upvalue-count 2 :arity 0 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 18 0 18 1 48 2 49 1 50)} "lambda?" "list" "create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("render-to-dom" "not" "spread?" "dom-append") :bytecode (20 0 0 16 0 18 0 18 1 48 3 17 1 16 1 52 2 0 1 52 1 0 1 33 12 0 20 3 0 18 2 16 1 49 2 32 1 0 2 50)}) :bytecode (16 0 52 0 0 1 17 3 16 3 52 2 0 1 1 3 0 52 1 0 2 33 68 3 20 4 0 16 3 48 1 17 4 16 0 52 5 0 1 17 5 16 4 1 6 0 52 1 0 2 33 12 0 20 7 0 16 5 16 1 49 2 32 24 3 16 4 1 8 0 52 1 0 2 33 14 0 20 9 0 16 5 16 1 16 2 49 3 32 254 2 16 4 1 10 0 52 1 0 2 33 14 0 20 11 0 16 5 16 1 16 2 49 3 32 228 2 16 4 1 12 0 52 1 0 2 33 14 0 20 13 0 16 5 16 1 16 2 49 3 32 202 2 16 4 1 15 0 52 14 0 2 33 23 0 20 16 0 16 4 1 18 0 52 17 0 2 16 5 16 1 16 2 49 4 32 167 2 20 19 0 16 4 48 1 33 91 0 20 21 0 16 4 52 20 0 2 6 33 43 0 5 16 5 52 23 0 1 1 24 0 52 22 0 2 6 33 18 0 5 16 5 52 0 0 1 52 2 0 1 1 25 0 52 1 0 2 6 34 3 0 5 16 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 13 0 20 26 0 16 4 16 0 16 1 16 2 49 4 32 66 2 20 27 0 16 1 16 4 48 2 6 33 14 0 5 20 29 0 16 1 16 4 48 2 52 28 0 1 33 30 0 20 30 0 20 31 0 20 29 0 16 1 16 4 48 2 16 5 16 1 48 3 16 1 16 2 49 3 32 6 2 20 21 0 16 4 52 20 0 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 234 1 16 4 1 32 0 52 14 0 2 6 33 28 0 5 20 27 0 16 1 16 4 48 2 6 33 14 0 5 20 29 0 16 1 16 4 48 2 52 33 0 1 33 148 0 1 35 0 52 34 0 1 33 115 0 20 29 0 16 1 16 4 48 2 17 6 20 36 0 1 37 0 2 48 2 17 7 52 38 0 0 17 8 51 40 0 1 5 1 1 1 8 1 41 0 1 24 0 1 42 0 4 52 38 0 4 16 5 52 39 0 3 5 20 43 0 16 7 1 44 0 16 6 52 45 0 1 48 3 5 16 8 52 47 0 1 52 46 0 1 33 20 0 20 43 0 16 7 1 48 0 20 49 0 16 8 48 1 48 3 32 1 0 2 5 16 7 32 20 0 20 50 0 20 29 0 16 1 16 4 48 2 16 5 16 1 16 2 49 4 32 42 1 16 4 1 32 0 52 14 0 2 33 46 0 20 29 0 16 1 16 4 48 2 17 6 16 6 52 51 0 1 33 16 0 20 52 0 16 6 16 5 16 1 16 2 49 4 32 7 0 20 53 0 16 4 49 1 32 240 0 16 4 1 55 0 52 54 0 2 1 24 0 52 22 0 2 6 33 36 0 5 16 5 52 23 0 1 1 24 0 52 22 0 2 6 33 18 0 5 16 5 52 0 0 1 52 2 0 1 1 25 0 52 1 0 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 165 0 16 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 144 0 16 4 1 56 0 52 1 0 2 6 33 6 0 5 20 57 0 48 0 33 59 0 20 58 0 20 59 0 16 5 52 0 0 1 16 1 48 2 48 1 17 6 20 60 0 16 6 48 1 33 10 0 20 61 0 16 6 49 1 32 16 0 20 62 0 20 56 0 16 6 48 1 52 63 0 1 49 1 32 63 0 20 57 0 48 0 6 33 8 0 5 20 64 0 16 0 48 1 33 20 0 20 61 0 20 65 0 51 66 0 1 0 1 1 48 1 49 1 32 23 0 20 30 0 20 58 0 20 59 0 16 0 16 1 48 2 48 1 16 1 16 2 49 3 32 78 0 16 3 52 67 0 1 6 34 14 0 5 16 3 52 2 0 1 1 68 0 52 1 0 2 33 26 0 20 30 0 20 58 0 20 59 0 16 0 16 1 48 2 48 1 16 1 16 2 49 3 32 25 0 20 69 0 48 0 17 4 51 71 0 1 1 1 2 1 4 16 0 52 70 0 2 5 16 4 50)} "render-dom-element" {:upvalue-count 0 :arity 4 :constants ("=" "svg" "SVG_NS" "math" "MATH_NS" "dom-create-element" "scope-push!" "element-attrs" "reduce" {:upvalue-count 5 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "nth" "starts-with?" "on-" "trampoline" "eval-expr" "callable?" "dom-on" "slice" 3 "bind" "signal?" "bind-input" "ref" "dict-set!" "current" "key" "dom-set-attr" "str" "island-scope?" "reactive-attr" {:upvalue-count 2 :arity 0 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 18 0 18 1 48 2 49 1 50)} "nil?" "contains?" "BOOLEAN_ATTRS" "" "not" "VOID_ELEMENTS" "render-to-dom" "spread?" "reactive-spread" {:upvalue-count 3 :arity 0 :constants ("render-to-dom") :bytecode (20 0 0 18 0 18 1 18 2 49 3 50)} "dom-append") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 58 2 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 154 1 20 10 0 16 1 48 1 17 3 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 11 0 2 17 4 16 3 1 13 0 52 12 0 2 33 51 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 20 16 0 16 5 48 1 33 21 0 20 17 0 18 2 16 3 1 19 0 52 18 0 2 16 5 48 3 32 1 0 2 32 31 1 16 3 1 20 0 52 5 0 2 33 42 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 20 21 0 16 5 48 1 33 12 0 20 22 0 18 2 16 5 48 2 32 1 0 2 32 233 0 16 3 1 23 0 52 5 0 2 33 30 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 16 5 1 25 0 18 2 52 24 0 3 32 191 0 16 3 1 26 0 52 5 0 2 33 35 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 20 27 0 18 2 1 26 0 16 5 52 28 0 1 48 3 32 144 0 20 29 0 48 0 33 19 0 20 30 0 18 2 16 3 51 31 0 1 4 0 1 48 3 32 117 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 16 5 52 32 0 1 6 34 8 0 5 16 5 4 52 5 0 2 33 4 0 2 32 76 0 20 34 0 16 3 52 33 0 2 33 24 0 16 5 33 15 0 20 27 0 18 2 16 3 1 35 0 48 3 32 1 0 2 32 40 0 16 5 3 52 5 0 2 33 15 0 20 27 0 18 2 16 3 1 35 0 48 3 32 15 0 20 27 0 18 2 16 3 16 5 52 28 0 1 48 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 116 0 20 37 0 18 3 52 33 0 2 52 36 0 1 33 76 0 20 38 0 16 1 18 1 18 4 48 3 17 3 16 3 52 39 0 1 6 33 6 0 5 20 29 0 48 0 33 19 0 20 40 0 18 2 51 41 0 1 1 0 1 0 4 48 2 32 22 0 16 3 52 39 0 1 33 4 0 2 32 9 0 20 42 0 18 2 16 3 48 2 32 1 0 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "for-each" {:upvalue-count 1 :arity 1 :constants ("for-each" {:upvalue-count 2 :arity 1 :constants ("dict-get" "=" "class" "dom-get-attr" "dom-set-attr" "not" "" "str" " " "style" ";") :bytecode (18 0 16 0 52 0 0 2 17 1 16 0 1 2 0 52 1 0 2 33 64 0 20 3 0 18 1 1 2 0 48 2 17 2 20 4 0 18 1 1 2 0 16 2 6 33 14 0 5 16 2 1 6 0 52 1 0 2 52 5 0 1 33 14 0 16 2 1 8 0 16 1 52 7 0 3 32 2 0 16 1 49 3 32 91 0 16 0 1 9 0 52 1 0 2 33 64 0 20 3 0 18 1 1 9 0 48 2 17 2 20 4 0 18 1 1 9 0 16 2 6 33 14 0 5 16 2 1 6 0 52 1 0 2 52 5 0 1 33 14 0 16 2 1 10 0 16 1 52 7 0 3 32 2 0 16 1 49 3 32 15 0 20 4 0 18 1 16 0 16 1 52 7 0 1 49 3 50)} "keys") :bytecode (51 1 0 1 0 0 0 16 0 52 2 0 1 52 0 0 2 50)} "scope-emitted" "scope-pop!") :bytecode (16 0 1 1 0 52 0 0 2 33 6 0 20 2 0 32 20 0 16 0 1 3 0 52 0 0 2 33 6 0 20 4 0 32 2 0 16 3 17 4 20 5 0 16 0 16 4 48 2 17 5 1 7 0 2 52 6 0 2 5 51 9 0 1 1 1 2 1 5 1 0 1 4 1 11 0 1 12 0 1 13 0 4 52 10 0 4 16 1 52 8 0 3 5 51 15 0 1 5 1 7 0 52 16 0 1 52 14 0 2 5 1 7 0 52 17 0 1 5 16 5 50)} "render-dom-component" {:upvalue-count 0 :arity 4 :constants ("dict" "list" "reduce" {:upvalue-count 4 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "trampoline" "eval-expr" "nth" "dict-set!" "keyword-name" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 154 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 78 0 20 10 0 20 11 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 12 0 2 18 1 48 2 48 1 17 3 18 2 20 14 0 16 1 48 1 16 3 52 13 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 15 0 18 3 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" 0 "skip" "env-merge" "component-closure" "for-each" {:upvalue-count 2 :arity 1 :constants ("env-bind!" "dict-has?" "dict-get") :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)} "component-params" "component-has-children?" "create-fragment" {:upvalue-count 3 :arity 1 :constants ("render-to-dom" "not" "spread?" "dom-append") :bytecode (20 0 0 16 0 18 0 18 1 48 3 17 1 16 1 52 2 0 1 52 1 0 1 33 12 0 20 3 0 18 2 16 1 49 2 32 1 0 2 50)} "env-bind!" "children" "render-to-dom" "component-body") :bytecode (52 0 0 0 17 4 52 1 0 0 17 5 51 3 0 1 1 1 2 1 4 1 5 1 4 0 1 5 0 1 6 0 4 52 0 0 4 16 1 52 2 0 3 5 20 7 0 16 0 52 8 0 1 16 2 48 2 17 6 51 10 0 1 6 1 4 16 0 52 11 0 1 52 9 0 2 5 16 0 52 12 0 1 33 38 0 20 13 0 48 0 17 7 51 14 0 1 2 1 3 1 7 16 5 52 9 0 2 5 20 15 0 16 6 1 16 0 16 7 48 3 32 1 0 2 5 20 17 0 16 0 52 18 0 1 16 6 16 3 49 3 50)} "render-dom-fragment" {:upvalue-count 0 :arity 3 :constants ("create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("render-to-dom" "not" "spread?" "dom-append") :bytecode (20 0 0 16 0 18 0 18 1 48 3 17 1 16 1 52 2 0 1 52 1 0 1 33 12 0 20 3 0 18 2 16 1 49 2 32 1 0 2 50)}) :bytecode (20 0 0 48 0 17 3 51 2 0 1 1 1 2 1 3 16 0 52 1 0 2 5 16 3 50)} "render-dom-raw" {:upvalue-count 0 :arity 2 :constants ("create-fragment" "for-each" {:upvalue-count 2 :arity 1 :constants ("trampoline" "eval-expr" "=" "type-of" "string" "dom-append" "dom-parse-html" "dom-node" "dom-clone" "not" "nil?" "create-text-node" "str") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 48 1 17 1 16 1 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 1 20 6 0 16 1 48 1 49 2 32 68 0 16 1 52 3 0 1 1 7 0 52 2 0 2 33 17 0 20 5 0 18 1 20 8 0 16 1 48 1 49 2 32 35 0 16 1 52 10 0 1 52 9 0 1 33 21 0 20 5 0 18 1 20 11 0 16 1 52 12 0 1 48 1 49 2 32 1 0 2 50)}) :bytecode (20 0 0 48 0 17 2 51 2 0 1 1 1 2 16 0 52 1 0 2 5 16 2 50)} "render-dom-unknown-component" {:upvalue-count 0 :arity 1 :constants ("error" "str" "Unknown component: ") :bytecode (1 2 0 16 0 52 1 0 2 52 0 0 1 50)} "RENDER_DOM_FORMS" "list" "if" "when" "cond" "case" "let" "let*" "letrec" "begin" "do" "define" "defcomp" "defisland" "defmacro" "defstyle" "map" "map-indexed" "filter" "for-each" "portal" "error-boundary" "scope" "provide" "cyst" "render-dom-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "RENDER_DOM_FORMS") :bytecode (20 1 0 16 0 52 0 0 2 50)} "dispatch-render-form" {:upvalue-count 0 :arity 4 :constants ("=" "if" "island-scope?" "create-comment" "r-if" "list" "effect" {:upvalue-count 6 :arity 0 :constants ("trampoline" "eval-expr" "nth" 1 "render-to-dom" 2 ">" "len" 3 "create-fragment" "dom-parent" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "dom-is-fragment?" "dom-child-nodes" "list" "dom-insert-after") :bytecode (20 0 0 20 1 0 18 0 1 3 0 52 2 0 2 18 1 48 2 48 1 17 1 16 1 33 21 0 20 4 0 18 0 1 5 0 52 2 0 2 18 1 18 2 48 3 32 42 0 18 0 52 7 0 1 1 8 0 52 6 0 2 33 21 0 20 4 0 18 0 1 8 0 52 2 0 2 18 1 18 2 48 3 32 5 0 20 9 0 48 0 17 0 20 10 0 18 3 48 1 33 51 0 51 12 0 18 4 52 11 0 2 5 20 13 0 16 0 48 1 33 10 0 20 14 0 16 0 48 1 32 6 0 16 0 52 15 0 1 19 4 5 20 16 0 18 3 16 0 49 2 32 4 0 16 0 19 5 50)} "spread?" "create-fragment" "dom-append" "dom-is-fragment?" "dom-child-nodes" "trampoline" "eval-expr" "nth" 1 "render-to-dom" 2 ">" "len" 3 "when" "r-when" {:upvalue-count 6 :arity 0 :constants ("dom-parent" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "list" "trampoline" "eval-expr" "nth" 1 "create-fragment" {:upvalue-count 4 :arity 1 :constants ("dom-append" "render-to-dom" "nth") :bytecode (20 0 0 18 0 20 1 0 18 1 16 0 52 2 0 2 18 2 18 3 48 3 49 2 50)} "range" 2 "len" "dom-child-nodes" "dom-insert-after") :bytecode (20 0 0 18 0 48 1 33 103 0 51 2 0 18 1 52 1 0 2 5 52 3 0 0 19 1 5 20 4 0 20 5 0 18 2 1 7 0 52 6 0 2 18 3 48 2 48 1 33 58 0 20 8 0 48 0 17 0 51 9 0 1 0 0 2 0 3 0 4 1 11 0 18 2 52 12 0 1 52 10 0 2 52 1 0 2 5 20 13 0 16 0 48 1 19 1 5 20 14 0 18 0 16 0 49 2 32 1 0 2 32 78 0 20 4 0 20 5 0 18 2 1 7 0 52 6 0 2 18 3 48 2 48 1 33 53 0 20 8 0 48 0 17 0 51 9 0 1 0 0 2 0 3 0 4 1 11 0 18 2 52 12 0 1 52 10 0 2 52 1 0 2 5 20 13 0 16 0 48 1 19 1 5 16 0 19 5 32 1 0 2 50)} "not" "for-each" {:upvalue-count 4 :arity 1 :constants ("dom-append" "render-to-dom" "nth") :bytecode (20 0 0 18 0 20 1 0 18 1 16 0 52 2 0 2 18 2 18 3 48 3 49 2 50)} "range" "cond" "r-cond" {:upvalue-count 6 :arity 0 :constants ("eval-cond" "rest" "dom-parent" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "list" "render-to-dom" "dom-is-fragment?" "dom-child-nodes" "dom-insert-after") :bytecode (20 0 0 18 0 52 1 0 1 18 1 48 2 17 0 20 2 0 18 2 48 1 33 80 0 51 4 0 18 3 52 3 0 2 5 52 5 0 0 19 3 5 16 0 33 54 0 20 6 0 16 0 18 1 18 4 48 3 17 1 20 7 0 16 1 48 1 33 10 0 20 8 0 16 1 48 1 32 6 0 16 1 52 5 0 1 19 3 5 20 9 0 18 2 16 1 49 2 32 1 0 2 32 55 0 16 0 33 49 0 20 6 0 16 0 18 1 18 4 48 3 17 1 20 7 0 16 1 48 1 33 10 0 20 8 0 16 1 48 1 32 6 0 16 1 52 5 0 1 19 3 5 16 1 19 5 32 1 0 2 50)} "eval-cond" "rest" "case" "let" "let*" "process-bindings" {:upvalue-count 4 :arity 1 :constants ("render-to-dom" "nth" "not" "spread?" "dom-append") :bytecode (20 0 0 18 0 16 0 52 1 0 2 18 1 18 2 48 3 17 1 16 1 52 3 0 1 52 2 0 1 33 12 0 20 4 0 18 3 16 1 49 2 32 1 0 2 50)} "letrec" "slice" "env-extend" {:upvalue-count 1 :arity 1 :constants ("=" "type-of" "first" "symbol" "symbol-name" "str" "env-bind!") :bytecode (16 0 52 2 0 1 52 1 0 1 1 3 0 52 0 0 2 33 14 0 20 4 0 16 0 52 2 0 1 48 1 32 10 0 16 0 52 2 0 1 52 5 0 1 17 1 20 6 0 18 0 16 1 2 49 3 50)} {:upvalue-count 1 :arity 1 :constants ("=" "type-of" "first" "symbol" "symbol-name" "str" "env-set!" "trampoline" "eval-expr" "nth" 1) :bytecode (16 0 52 2 0 1 52 1 0 1 1 3 0 52 0 0 2 33 14 0 20 4 0 16 0 52 2 0 1 48 1 32 10 0 16 0 52 2 0 1 52 5 0 1 17 1 20 6 0 18 0 16 1 20 7 0 20 8 0 16 0 1 10 0 52 9 0 2 18 0 48 2 48 1 49 3 50)} {:upvalue-count 1 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 49 1 50)} "init" "last" "begin" "do" "definition-form?" "map" "type-of" "first" "symbol" "symbol-name" "deref" "signal?" "reactive-list" {:upvalue-count 4 :arity 1 :constants ("lambda?" "render-lambda-dom" "list" "render-to-dom" "apply" "dom-append") :bytecode (18 0 52 0 0 1 33 20 0 20 1 0 18 0 16 0 52 2 0 1 18 1 18 2 48 4 32 21 0 20 3 0 18 0 16 0 52 2 0 1 52 4 0 2 18 1 18 2 48 3 17 1 20 5 0 18 3 16 1 49 2 50)} "map-indexed" "for-each-indexed" {:upvalue-count 4 :arity 2 :constants ("lambda?" "render-lambda-dom" "list" "render-to-dom" "apply" "dom-append") :bytecode (18 0 52 0 0 1 33 22 0 20 1 0 18 0 16 0 16 1 52 2 0 2 18 1 18 2 48 4 32 23 0 20 3 0 18 0 16 0 16 1 52 2 0 2 52 4 0 2 18 1 18 2 48 3 17 2 20 5 0 18 3 16 2 49 2 50)} "filter" "portal" "render-dom-portal" "error-boundary" "render-dom-error-boundary" "scope" ">=" "keyword" "keyword-name" "value" "scope-push!" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "scope-pop!" "provide" "cyst" "key" "str" "next-cyst-id" "get" "*memo-cache*" "host-get" "isConnected" "dom-create-element" "div" "dom-set-attr" "data-sx-cyst" "with-island-scope" {:upvalue-count 1 :arity 1 :constants ("append!") :bytecode (20 0 0 18 0 16 0 49 2 50)} {:upvalue-count 3 :arity 0 :constants ("create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)}) :bytecode (20 0 0 48 0 17 0 51 2 0 1 0 0 0 0 1 18 2 52 1 0 2 5 16 0 50)} "dom-set-data" "sx-disposers" "dict-set!") :bytecode (16 0 1 1 0 52 0 0 2 33 226 0 20 2 0 48 0 33 124 0 20 3 0 1 4 0 48 1 17 4 52 5 0 0 17 5 2 17 6 20 6 0 51 7 0 1 1 1 2 1 3 1 4 1 5 1 6 48 1 5 16 6 52 8 0 1 33 5 0 16 6 32 67 0 20 9 0 48 0 17 7 20 10 0 16 7 16 4 48 2 5 16 6 33 41 0 20 11 0 16 6 48 1 33 10 0 20 12 0 16 6 48 1 32 6 0 16 6 52 5 0 1 17 5 5 20 10 0 16 7 16 6 48 2 32 1 0 2 5 16 7 32 91 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 16 4 33 21 0 20 17 0 16 1 1 18 0 52 15 0 2 16 2 16 3 49 3 32 42 0 16 1 52 20 0 1 1 21 0 52 19 0 2 33 21 0 20 17 0 16 1 1 21 0 52 15 0 2 16 2 16 3 49 3 32 5 0 20 9 0 49 0 32 217 7 16 0 1 22 0 52 0 0 2 33 180 0 20 2 0 48 0 33 95 0 20 3 0 1 23 0 48 1 17 4 52 5 0 0 17 5 2 17 6 20 6 0 51 24 0 1 4 1 5 1 1 1 2 1 3 1 6 48 1 5 16 6 52 8 0 1 33 5 0 16 6 32 38 0 20 9 0 48 0 17 7 20 10 0 16 7 16 4 48 2 5 16 6 33 12 0 20 10 0 16 7 16 6 48 2 32 1 0 2 5 16 7 32 74 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 52 25 0 1 33 8 0 20 9 0 49 0 32 38 0 20 9 0 48 0 17 4 51 27 0 1 4 1 1 1 2 1 3 1 18 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 4 32 25 7 16 0 1 29 0 52 0 0 2 33 145 0 20 2 0 48 0 33 95 0 20 3 0 1 30 0 48 1 17 4 52 5 0 0 17 5 2 17 6 20 6 0 51 31 0 1 1 1 2 1 4 1 5 1 3 1 6 48 1 5 16 6 52 8 0 1 33 5 0 16 6 32 38 0 20 9 0 48 0 17 7 20 10 0 16 7 16 4 48 2 5 16 6 33 12 0 20 10 0 16 7 16 6 48 2 32 1 0 2 5 16 7 32 39 0 20 32 0 16 1 52 33 0 1 16 2 48 2 17 4 16 4 33 14 0 20 17 0 16 4 16 2 16 3 49 3 32 5 0 20 9 0 49 0 32 124 6 16 0 1 34 0 52 0 0 2 33 26 0 20 17 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 16 2 16 3 49 3 32 86 6 16 0 1 35 0 52 0 0 2 6 34 10 0 5 16 0 1 36 0 52 0 0 2 33 96 0 20 37 0 16 1 1 16 0 52 15 0 2 16 2 48 2 17 4 16 1 52 20 0 1 1 21 0 52 0 0 2 33 21 0 20 17 0 16 1 1 18 0 52 15 0 2 16 4 16 3 49 3 32 38 0 20 9 0 48 0 17 5 51 38 0 1 1 1 4 1 3 1 5 1 18 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 5 32 220 5 16 0 1 39 0 52 0 0 2 33 109 0 16 1 1 16 0 52 15 0 2 17 4 16 1 1 18 0 52 40 0 2 17 5 20 41 0 16 2 48 1 17 6 51 42 0 1 6 16 4 52 26 0 2 5 51 43 0 1 6 16 4 52 26 0 2 5 16 5 52 20 0 1 1 16 0 52 19 0 2 33 18 0 51 44 0 1 6 16 5 52 45 0 1 52 26 0 2 32 1 0 2 5 20 17 0 16 5 52 46 0 1 16 6 16 3 49 3 32 99 5 16 0 1 47 0 52 0 0 2 6 34 10 0 5 16 0 1 48 0 52 0 0 2 33 78 0 16 1 52 20 0 1 1 18 0 52 0 0 2 33 21 0 20 17 0 16 1 1 16 0 52 15 0 2 16 2 16 3 49 3 32 38 0 20 9 0 48 0 17 4 51 38 0 1 1 1 2 1 3 1 4 1 16 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 4 32 251 4 20 49 0 16 0 48 1 33 23 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 5 20 9 0 49 0 32 218 4 16 0 1 50 0 52 0 0 2 33 31 1 16 1 1 18 0 52 15 0 2 17 4 20 2 0 48 0 6 33 77 0 5 16 4 52 51 0 1 1 5 0 52 0 0 2 6 33 59 0 5 16 4 52 20 0 1 1 16 0 52 19 0 2 6 33 41 0 5 16 4 52 52 0 1 52 51 0 1 1 53 0 52 0 0 2 6 33 19 0 5 20 54 0 16 4 52 52 0 1 48 1 1 55 0 52 0 0 2 33 111 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 5 20 13 0 20 14 0 16 4 1 16 0 52 15 0 2 16 2 48 2 48 1 17 6 20 56 0 16 6 48 1 33 16 0 20 57 0 16 5 16 6 16 2 16 3 49 4 32 36 0 20 55 0 16 6 48 1 17 7 20 9 0 48 0 17 8 51 58 0 1 5 1 2 1 3 1 8 16 7 52 26 0 2 5 16 8 32 73 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 5 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 6 20 9 0 48 0 17 7 51 58 0 1 5 1 2 1 3 1 7 16 6 52 26 0 2 5 16 7 32 175 3 16 0 1 59 0 52 0 0 2 33 76 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 5 20 9 0 48 0 17 6 51 61 0 1 4 1 2 1 3 1 6 16 5 52 60 0 2 5 16 6 32 87 3 16 0 1 62 0 52 0 0 2 33 26 0 20 17 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 16 2 16 3 49 3 32 49 3 16 0 1 63 0 52 0 0 2 33 18 0 20 64 0 16 1 52 33 0 1 16 2 16 3 49 3 32 19 3 16 0 1 65 0 52 0 0 2 33 18 0 20 66 0 16 1 52 33 0 1 16 2 16 3 49 3 32 245 2 16 0 1 26 0 52 0 0 2 33 76 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 5 20 9 0 48 0 17 6 51 58 0 1 4 1 2 1 3 1 6 16 5 52 26 0 2 5 16 6 32 157 2 16 0 1 67 0 52 0 0 2 33 188 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 16 1 1 18 0 52 40 0 2 17 5 2 17 6 2 17 7 20 9 0 48 0 17 8 16 5 52 20 0 1 1 18 0 52 68 0 2 6 33 41 0 5 16 5 52 52 0 1 52 51 0 1 1 69 0 52 0 0 2 6 33 19 0 5 20 70 0 16 5 52 52 0 1 48 1 1 71 0 52 0 0 2 33 38 0 20 13 0 20 14 0 16 5 1 16 0 52 15 0 2 16 2 48 2 48 1 17 6 5 16 5 1 18 0 52 40 0 2 17 7 32 4 0 16 5 17 7 5 16 4 16 6 52 72 0 2 5 51 73 0 1 8 1 2 1 3 16 7 52 26 0 2 5 16 4 52 74 0 1 5 16 8 32 213 1 16 0 1 75 0 52 0 0 2 33 103 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 5 20 9 0 48 0 17 6 16 4 16 5 52 72 0 2 5 51 27 0 1 6 1 1 1 2 1 3 1 21 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 4 52 74 0 1 5 16 6 32 98 1 16 0 1 76 0 52 0 0 2 33 63 1 16 1 52 20 0 1 1 18 0 52 19 0 2 6 33 47 0 5 16 1 1 16 0 52 15 0 2 52 51 0 1 1 69 0 52 0 0 2 6 33 22 0 5 20 70 0 16 1 1 16 0 52 15 0 2 48 1 1 77 0 52 0 0 2 33 28 0 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 52 78 0 1 32 5 0 20 79 0 48 0 17 4 20 81 0 16 4 52 80 0 2 17 5 16 5 6 33 11 0 5 20 82 0 16 5 1 83 0 48 2 33 5 0 16 5 32 178 0 20 84 0 1 85 0 2 48 2 17 6 52 5 0 0 17 7 16 1 52 20 0 1 1 18 0 52 19 0 2 6 33 47 0 5 16 1 1 16 0 52 15 0 2 52 51 0 1 1 69 0 52 0 0 2 6 33 22 0 5 20 70 0 16 1 1 16 0 52 15 0 2 48 1 1 77 0 52 0 0 2 33 12 0 16 1 1 21 0 52 40 0 2 32 9 0 16 1 1 16 0 52 40 0 2 17 8 20 86 0 16 6 1 87 0 16 4 48 3 5 20 88 0 51 89 0 1 7 51 90 0 1 2 1 3 1 8 48 2 17 9 20 10 0 16 6 16 9 48 2 5 20 91 0 16 6 1 92 0 16 7 48 3 5 20 81 0 16 4 16 6 52 93 0 3 5 16 6 32 23 0 20 17 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 16 2 16 3 49 3 50)} "render-lambda-dom" {:upvalue-count 0 :arity 4 :constants ("env-merge" "lambda-closure" "for-each-indexed" {:upvalue-count 2 :arity 2 :constants ("env-bind!" "nth") :bytecode (20 0 0 18 0 16 1 18 1 16 0 52 1 0 2 49 3 50)} "lambda-params" "render-to-dom" "lambda-body") :bytecode (20 0 0 16 0 52 1 0 1 16 2 48 2 17 4 51 3 0 1 4 1 1 16 0 52 4 0 1 52 2 0 2 5 20 5 0 16 0 52 6 0 1 16 4 16 3 49 3 50)} "render-dom-island" {:upvalue-count 0 :arity 4 :constants ("dict" "list" "reduce" {:upvalue-count 4 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "trampoline" "eval-expr" "nth" "dict-set!" "keyword-name" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 154 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 78 0 20 10 0 20 11 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 12 0 2 18 1 48 2 48 1 17 3 18 2 20 14 0 16 1 48 1 16 3 52 13 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 15 0 18 3 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" 0 "skip" "env-merge" "component-closure" "component-name" "for-each" {:upvalue-count 2 :arity 1 :constants ("env-bind!" "dict-has?" "dict-get") :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)} "component-params" "component-has-children?" "create-fragment" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "env-bind!" "children" "dom-create-element" "span" "dom-set-attr" "data-sx-island" "not" "empty-dict?" "data-sx-state" "sx-serialize" "mark-processed!" "island-hydrated" "with-island-scope" {:upvalue-count 1 :arity 1 :constants ("append!") :bytecode (20 0 0 18 0 16 0 49 2 50)} {:upvalue-count 3 :arity 0 :constants ("render-to-dom" "component-body") :bytecode (20 0 0 18 0 52 1 0 1 18 1 18 2 49 3 50)} "dom-append" "dom-set-data" "sx-disposers") :bytecode (52 0 0 0 17 4 52 1 0 0 17 5 51 3 0 1 1 1 2 1 4 1 5 1 4 0 1 5 0 1 6 0 4 52 0 0 4 16 1 52 2 0 3 5 20 7 0 16 0 52 8 0 1 16 2 48 2 17 6 16 0 52 9 0 1 17 7 51 11 0 1 6 1 4 16 0 52 12 0 1 52 10 0 2 5 16 0 52 13 0 1 33 38 0 20 14 0 48 0 17 8 51 15 0 1 8 1 2 1 3 16 5 52 10 0 2 5 20 16 0 16 6 1 17 0 16 8 48 3 32 1 0 2 5 20 18 0 1 19 0 2 48 2 17 8 52 1 0 0 17 9 20 20 0 16 8 1 21 0 16 7 48 3 5 16 4 52 23 0 1 52 22 0 1 33 20 0 20 20 0 16 8 1 24 0 20 25 0 16 4 48 1 48 3 32 1 0 2 5 20 26 0 16 8 1 27 0 48 2 5 20 28 0 51 29 0 1 9 51 30 0 1 0 1 6 1 3 48 2 17 10 20 31 0 16 8 16 10 48 2 5 20 32 0 16 8 1 33 0 16 9 48 3 5 16 8 50)} "render-dom-lake" {:upvalue-count 0 :arity 3 :constants ("div" "list" "reduce" {:upvalue-count 5 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "id" "tag" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 187 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 111 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 16 3 1 14 0 52 5 0 2 33 7 0 16 4 19 2 32 20 0 16 3 1 15 0 52 5 0 2 33 7 0 16 4 19 3 32 1 0 2 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 16 0 18 4 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "dom-create-element" "dom-set-attr" "data-sx-lake" "" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)}) :bytecode (2 17 3 1 0 0 17 4 52 1 0 0 17 5 51 3 0 1 0 1 1 1 3 1 4 1 5 1 5 0 1 6 0 1 7 0 4 52 4 0 4 16 0 52 2 0 3 5 20 8 0 16 4 2 48 2 17 6 20 9 0 16 6 1 10 0 16 3 6 34 4 0 5 1 11 0 48 3 5 51 13 0 1 6 1 1 1 2 16 5 52 12 0 2 5 16 6 50)} "render-dom-marsh" {:upvalue-count 0 :arity 3 :constants ("div" "list" "reduce" {:upvalue-count 6 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "id" "tag" "transform" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 206 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 130 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 16 3 1 14 0 52 5 0 2 33 7 0 16 4 19 2 32 39 0 16 3 1 15 0 52 5 0 2 33 7 0 16 4 19 3 32 20 0 16 3 1 16 0 52 5 0 2 33 7 0 16 4 19 4 32 1 0 2 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 17 0 18 5 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "dom-create-element" "dom-set-attr" "data-sx-marsh" "" "dom-set-data" "sx-marsh-transform" "sx-marsh-env" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)}) :bytecode (2 17 3 1 0 0 17 4 2 17 5 52 1 0 0 17 6 51 3 0 1 0 1 1 1 3 1 4 1 5 1 6 1 5 0 1 6 0 1 7 0 4 52 4 0 4 16 0 52 2 0 3 5 20 8 0 16 4 2 48 2 17 7 20 9 0 16 7 1 10 0 16 3 6 34 4 0 5 1 11 0 48 3 5 16 5 33 15 0 20 12 0 16 7 1 13 0 16 5 48 3 32 1 0 2 5 20 12 0 16 7 1 14 0 16 1 48 3 5 51 16 0 1 7 1 1 1 2 16 6 52 15 0 2 5 16 7 50)} "reactive-text" {:upvalue-count 0 :arity 1 :constants ("create-text-node" "str" "deref" "effect" {:upvalue-count 2 :arity 0 :constants ("dom-set-text-content" "str" "deref") :bytecode (20 0 0 18 0 20 2 0 18 1 48 1 52 1 0 1 49 2 50)}) :bytecode (20 0 0 20 2 0 16 0 48 1 52 1 0 1 48 1 17 1 20 3 0 51 4 0 1 1 1 0 48 1 5 16 1 50)} "reactive-attr" {:upvalue-count 0 :arity 3 :constants ("dom-get-attr" "data-sx-reactive-attrs" "" "empty?" "str" "," "dom-set-attr" "effect" {:upvalue-count 3 :arity 0 :constants ("signal?" "deref" "nil?" "=" "dom-remove-attr" "dom-set-attr" "" "str") :bytecode (18 0 48 0 17 0 20 0 0 16 0 48 1 33 10 0 20 1 0 16 0 48 1 32 2 0 16 0 17 1 16 1 52 2 0 1 6 34 8 0 5 16 1 4 52 3 0 2 33 12 0 20 4 0 18 1 18 2 49 2 32 40 0 16 1 3 52 3 0 2 33 15 0 20 5 0 18 1 18 2 1 6 0 49 3 32 15 0 20 5 0 18 1 18 2 16 1 52 7 0 1 49 3 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 6 34 4 0 5 1 2 0 17 3 16 3 52 3 0 1 33 5 0 16 1 32 11 0 16 3 1 5 0 16 1 52 4 0 3 17 4 20 6 0 16 0 1 1 0 16 4 48 3 5 20 7 0 51 8 0 1 2 1 0 1 1 49 1 50)} "reactive-spread" {:upvalue-count 0 :arity 2 :constants ("list" "dom-get-attr" "data-sx-reactive-attrs" "" "dom-set-attr" "empty?" "_spread" "str" ",_spread" "effect" {:upvalue-count 4 :arity 0 :constants ("not" "empty?" "dom-get-attr" "class" "" "filter" {:upvalue-count 0 :arity 1 :constants ("not" "=" "") :bytecode (16 0 1 2 0 52 1 0 2 52 0 0 1 50)} "split" " " {:upvalue-count 1 :arity 1 :constants ("not" "some" {:upvalue-count 1 :arity 1 :constants ("=") :bytecode (16 0 18 0 52 0 0 2 50)}) :bytecode (51 2 0 1 0 18 0 52 1 0 2 52 0 0 1 50)} "dom-remove-attr" "dom-set-attr" "join" "for-each" {:upvalue-count 1 :arity 1 :constants ("dom-remove-attr") :bytecode (20 0 0 18 0 16 0 49 2 50)} "spread?" "spread-attrs" "dict-get" {:upvalue-count 0 :arity 1 :constants ("not" "=" "class") :bytecode (16 0 1 2 0 52 1 0 2 52 0 0 1 50)} "keys" "=" "str" {:upvalue-count 2 :arity 1 :constants ("dom-set-attr" "str" "dict-get") :bytecode (20 0 0 18 0 16 0 18 1 16 0 52 2 0 2 52 1 0 1 49 3 50)} "run-post-render-hooks" "list") :bytecode (18 0 52 1 0 1 52 0 0 1 33 95 0 20 2 0 18 1 1 3 0 48 2 6 34 4 0 5 1 4 0 17 0 51 6 0 16 0 1 8 0 52 7 0 2 52 5 0 2 17 1 51 9 0 0 0 16 1 52 5 0 2 17 2 16 2 52 1 0 1 33 13 0 20 10 0 18 1 1 3 0 48 2 32 19 0 20 11 0 18 1 1 3 0 1 8 0 16 2 52 12 0 2 48 3 32 1 0 2 5 51 14 0 0 1 18 2 52 13 0 2 5 18 3 48 0 17 0 16 0 52 15 0 1 33 179 0 16 0 52 16 0 1 17 1 16 1 1 3 0 52 17 0 2 6 34 4 0 5 1 4 0 17 2 51 6 0 16 2 1 8 0 52 7 0 2 52 5 0 2 17 3 51 18 0 16 1 52 19 0 1 52 5 0 2 17 4 16 3 19 0 5 16 4 19 2 5 16 3 52 1 0 1 52 0 0 1 33 72 0 20 2 0 18 1 1 3 0 48 2 6 34 4 0 5 1 4 0 17 5 20 11 0 18 1 1 3 0 16 5 6 33 14 0 5 16 5 1 4 0 52 20 0 2 52 0 0 1 33 14 0 16 5 1 8 0 16 2 52 21 0 3 32 2 0 16 2 48 3 32 1 0 2 5 51 22 0 0 1 1 1 16 4 52 13 0 2 5 20 23 0 49 0 32 13 0 52 24 0 0 19 0 5 52 24 0 0 19 2 50)}) :bytecode (52 0 0 0 17 2 52 0 0 0 17 3 20 1 0 16 0 1 2 0 48 2 6 34 4 0 5 1 3 0 17 4 20 4 0 16 0 1 2 0 16 4 52 5 0 1 33 6 0 1 6 0 32 9 0 16 4 1 8 0 52 7 0 2 48 3 5 20 9 0 51 10 0 1 2 1 0 1 3 1 1 49 1 50)} "reactive-fragment" {:upvalue-count 0 :arity 4 :constants ("create-comment" "island-fragment" "list" "effect" {:upvalue-count 4 :arity 0 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "list" "dom-child-nodes" "dom-insert-after") :bytecode (51 1 0 18 0 52 0 0 2 5 52 2 0 0 19 0 5 18 1 48 0 33 28 0 18 2 48 0 17 0 20 3 0 16 0 48 1 19 0 5 20 4 0 18 3 16 0 49 2 32 1 0 2 50)}) :bytecode (20 0 0 1 1 0 48 1 17 4 52 2 0 0 17 5 20 3 0 51 4 0 1 5 1 0 1 1 1 4 48 1 5 16 4 50)} "render-list-item" {:upvalue-count 0 :arity 4 :constants ("lambda?" "render-lambda-dom" "list" "render-to-dom" "apply") :bytecode (16 0 52 0 0 1 33 20 0 20 1 0 16 0 16 1 52 2 0 1 16 2 16 3 49 4 32 21 0 20 3 0 16 0 16 1 52 2 0 1 52 4 0 2 16 2 16 3 49 3 50)} "extract-key" {:upvalue-count 0 :arity 2 :constants ("dom-get-attr" "key" "dom-remove-attr" "dom-get-data" "str" "__idx_") :bytecode (20 0 0 16 0 1 1 0 48 2 17 2 16 2 33 16 0 20 2 0 16 0 1 1 0 48 2 5 16 2 32 35 0 20 3 0 16 0 1 1 0 48 2 17 3 16 3 33 9 0 16 3 52 4 0 1 32 9 0 1 5 0 16 1 52 4 0 2 50)} "reactive-list" {:upvalue-count 0 :arity 4 :constants ("create-fragment" "create-comment" "island-list" "dict" "list" "dom-append" "effect" {:upvalue-count 8 :arity 0 :constants ("deref" "dom-parent" "dict" "list" "for-each-indexed" {:upvalue-count 7 :arity 2 :constants ("render-list-item" "extract-key" "not" "starts-with?" "__idx_" "dict-has?" "dict-set!" "dict-get" "append!") :bytecode (20 0 0 18 0 16 1 18 1 18 2 48 4 17 2 20 1 0 16 2 16 0 48 2 17 3 18 3 52 2 0 1 6 33 14 0 5 16 3 1 4 0 52 3 0 2 52 2 0 1 33 6 0 3 19 3 32 1 0 2 5 18 4 16 3 52 5 0 2 33 19 0 18 5 16 3 18 4 16 3 52 7 0 2 52 6 0 3 32 10 0 18 5 16 3 16 2 52 6 0 3 5 20 8 0 18 6 16 3 49 2 50)} "not" "dom-remove-children-after" "create-fragment" "for-each" {:upvalue-count 2 :arity 1 :constants ("dom-append" "dict-get") :bytecode (20 0 0 18 0 18 1 16 0 52 1 0 2 49 2 50)} "dom-insert-after" {:upvalue-count 2 :arity 1 :constants ("not" "dict-has?" "dom-remove" "dict-get") :bytecode (18 0 16 0 52 1 0 2 52 0 0 1 33 16 0 20 2 0 18 1 16 0 52 3 0 2 49 1 32 1 0 2 50)} {:upvalue-count 2 :arity 1 :constants ("dict-get" "dom-next-sibling" "not" "identical?" "dom-insert-after") :bytecode (18 0 16 0 52 0 0 2 17 1 20 1 0 18 1 48 1 17 2 16 1 16 2 52 3 0 2 52 2 0 1 33 12 0 20 4 0 18 1 16 1 48 2 32 1 0 2 5 16 1 19 1 50)} {:upvalue-count 6 :arity 2 :constants ("render-list-item" "extract-key" "dict-set!" "append!" "dom-append") :bytecode (20 0 0 18 0 16 1 18 1 18 2 48 4 17 2 20 1 0 16 2 16 0 48 2 17 3 18 3 16 3 16 2 52 2 0 3 5 20 3 0 18 4 16 3 48 2 5 20 4 0 18 5 16 2 49 2 50)}) :bytecode (20 0 0 18 0 48 1 17 0 20 1 0 18 1 48 1 33 133 0 52 2 0 0 17 1 52 3 0 0 17 2 4 17 3 51 5 0 0 2 0 3 0 4 1 3 0 5 1 1 1 2 16 0 52 4 0 2 5 16 3 52 6 0 1 33 41 0 20 7 0 18 1 48 1 5 20 8 0 48 0 17 4 51 10 0 1 4 1 1 16 2 52 9 0 2 5 20 11 0 18 1 16 4 48 2 32 31 0 51 12 0 1 1 0 5 18 6 52 9 0 2 5 18 1 17 4 51 13 0 1 1 1 4 16 2 52 9 0 2 5 16 1 19 5 5 16 2 19 6 32 21 0 51 14 0 0 2 0 3 0 4 0 5 0 6 0 7 16 0 52 4 0 2 50)}) :bytecode (20 0 0 48 0 17 4 20 1 0 1 2 0 48 1 17 5 52 3 0 0 17 6 52 4 0 0 17 7 20 5 0 16 4 16 5 48 2 5 20 6 0 51 7 0 1 1 1 5 1 0 1 2 1 3 1 6 1 7 1 4 48 1 5 16 4 50)} "bind-input" {:upvalue-count 0 :arity 2 :constants ("lower" "dom-get-attr" "type" "" "=" "checkbox" "radio" "dom-set-prop" "checked" "deref" "value" "str" "effect" {:upvalue-count 3 :arity 0 :constants ("dom-set-prop" "checked" "deref" "str" "!=" "dom-get-prop" "value") :bytecode (18 0 33 20 0 20 0 0 18 1 1 1 0 20 2 0 18 2 48 1 49 3 32 48 0 20 2 0 18 2 48 1 52 3 0 1 17 0 20 5 0 18 1 1 6 0 48 2 16 0 52 4 0 2 33 15 0 20 0 0 18 1 1 6 0 16 0 49 3 32 1 0 2 50)} "dom-on" "change" "input" {:upvalue-count 3 :arity 1 :constants ("reset!" "dom-get-prop" "checked" "value") :bytecode (18 0 33 20 0 20 0 0 18 1 20 1 0 18 2 1 2 0 48 2 49 2 32 17 0 20 0 0 18 1 20 1 0 18 2 1 3 0 48 2 49 2 50)}) :bytecode (20 1 0 16 0 1 2 0 48 2 6 34 4 0 5 1 3 0 52 0 0 1 17 2 16 2 1 5 0 52 4 0 2 6 34 10 0 5 16 2 1 6 0 52 4 0 2 17 3 16 3 33 20 0 20 7 0 16 0 1 8 0 20 9 0 16 1 48 1 48 3 32 21 0 20 7 0 16 0 1 10 0 20 9 0 16 1 48 1 52 11 0 1 48 3 5 20 12 0 51 13 0 1 3 1 0 1 1 48 1 5 20 14 0 16 0 16 3 33 6 0 1 15 0 32 3 0 1 16 0 51 17 0 1 3 1 1 1 0 49 3 50)} "*use-cek-reactive*" "enable-cek-reactive!" {:upvalue-count 0 :arity 0 :constants ("*use-cek-reactive*") :bytecode (3 21 0 0 50)} "cek-reactive-text" {:upvalue-count 0 :arity 2 :constants ("create-text-node" "" {:upvalue-count 1 :arity 1 :constants ("dom-set-text-content" "str") :bytecode (20 0 0 18 0 16 0 52 1 0 1 49 2 50)} "cek-run" "make-cek-state" "list" "make-reactive-reset-frame" "dom-set-text-content" "str") :bytecode (20 0 0 1 1 0 48 1 17 2 51 2 0 1 2 17 3 20 3 0 20 4 0 16 0 16 1 20 6 0 16 1 16 3 3 48 3 52 5 0 1 48 3 48 1 17 4 20 7 0 16 2 16 4 52 8 0 1 48 2 5 16 2 50)} "cek-reactive-attr" {:upvalue-count 0 :arity 4 :constants ({:upvalue-count 2 :arity 1 :constants ("nil?" "=" "dom-remove-attr" "dom-set-attr" "" "str") :bytecode (16 0 52 0 0 1 6 34 8 0 5 16 0 4 52 1 0 2 33 12 0 20 2 0 18 0 18 1 49 2 32 40 0 16 0 3 52 1 0 2 33 15 0 20 3 0 18 0 18 1 1 4 0 49 3 32 15 0 20 3 0 18 0 18 1 16 0 52 5 0 1 49 3 50)} "dom-get-attr" "data-sx-reactive-attrs" "" "empty?" "str" "," "dom-set-attr" "cek-run" "make-cek-state" "list" "make-reactive-reset-frame" "cek-call") :bytecode (51 0 0 1 0 1 1 17 4 20 1 0 16 0 1 2 0 48 2 6 34 4 0 5 1 3 0 17 5 16 5 52 4 0 1 33 5 0 16 1 32 11 0 16 5 1 6 0 16 1 52 5 0 3 17 6 20 7 0 16 0 1 2 0 16 6 48 3 5 20 8 0 20 9 0 16 2 16 3 20 11 0 16 3 16 4 3 48 3 52 10 0 1 48 3 48 1 17 5 20 12 0 16 4 16 5 52 10 0 1 49 2 50)} "render-dom-portal" {:upvalue-count 0 :arity 3 :constants ("trampoline" "eval-expr" "first" "dom-query" "dom-ensure-element" "not" "create-comment" "str" "portal: " " (not found)" "create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "rest" "dom-child-nodes" "dom-append" "register-in-scope" {:upvalue-count 1 :arity 0 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)}) :bytecode (51 1 0 18 0 52 0 0 2 50)}) :bytecode (20 0 0 20 1 0 16 0 52 2 0 1 16 1 48 2 48 1 17 3 20 3 0 16 3 48 1 6 34 8 0 5 20 4 0 16 3 48 1 17 4 16 4 52 5 0 1 33 20 0 20 6 0 1 8 0 16 3 1 9 0 52 7 0 3 49 1 32 75 0 20 6 0 1 8 0 16 3 52 7 0 2 48 1 17 5 20 10 0 48 0 17 6 51 12 0 1 6 1 1 1 2 16 0 52 13 0 1 52 11 0 2 5 20 14 0 16 6 48 1 17 7 20 15 0 16 4 16 6 48 2 5 20 16 0 51 17 0 1 7 48 1 5 16 5 50)} "render-dom-error-boundary" {:upvalue-count 0 :arity 3 :constants ("first" "rest" "dom-create-element" "div" "signal" 0 "dom-set-attr" "data-sx-boundary" "true" "effect" {:upvalue-count 6 :arity 0 :constants ("deref" "dom-set-prop" "innerHTML" "" "scope-push!" "sx-island-scope" "try-catch" {:upvalue-count 4 :arity 0 :constants ("create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "dom-append" "scope-pop!" "sx-island-scope") :bytecode (20 0 0 48 0 17 0 51 2 0 1 0 0 0 0 1 18 2 52 1 0 2 5 20 3 0 18 3 16 0 48 2 5 1 5 0 52 4 0 1 50)} {:upvalue-count 5 :arity 1 :constants ("scope-pop!" "sx-island-scope" "trampoline" "eval-expr" {:upvalue-count 1 :arity 0 :constants ("swap!" {:upvalue-count 0 :arity 1 :constants ("+" 1) :bytecode (16 0 1 1 0 52 0 0 2 50)}) :bytecode (20 0 0 18 0 51 1 0 49 2 50)} "lambda?" "render-lambda-dom" "list" "render-to-dom" "apply" "dom-append") :bytecode (1 1 0 52 0 0 1 5 20 2 0 20 3 0 18 0 18 1 48 2 48 1 17 1 51 4 0 0 2 17 2 16 1 52 5 0 1 33 22 0 20 6 0 16 1 16 0 16 2 52 7 0 2 18 1 18 3 48 4 32 23 0 20 8 0 16 1 16 0 16 2 52 7 0 2 52 9 0 2 18 1 18 3 48 3 17 3 20 10 0 18 4 16 3 49 2 50)}) :bytecode (20 0 0 18 0 48 1 5 20 1 0 18 1 1 2 0 1 3 0 48 3 5 1 5 0 2 52 4 0 2 5 51 7 0 0 2 0 3 0 4 0 1 51 8 0 0 5 0 2 0 0 0 3 0 1 52 6 0 2 50)}) :bytecode (16 0 52 0 0 1 17 3 16 0 52 1 0 1 17 4 20 2 0 1 3 0 2 48 2 17 5 20 4 0 1 5 0 48 1 17 6 20 6 0 16 5 1 7 0 1 8 0 48 3 5 20 9 0 51 10 0 1 6 1 5 1 1 1 2 1 4 1 3 48 1 5 16 5 50)}) :bytecode (1 1 0 128 0 0 5 1 3 0 128 2 0 5 51 5 0 128 4 0 5 52 7 0 0 128 6 0 5 1 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 51 19 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 1 32 0 1 33 0 1 34 0 1 35 0 1 36 0 1 37 0 1 38 0 1 39 0 1 40 0 1 41 0 1 42 0 1 43 0 1 44 0 1 45 0 1 46 0 1 47 0 1 48 0 1 49 0 1 50 0 1 51 0 1 52 0 1 53 0 1 54 0 52 31 0 23 128 30 0 5 51 56 0 128 55 0 5 51 58 0 128 57 0 5 51 60 0 128 59 0 5 51 62 0 128 61 0 5 51 64 0 128 63 0 5 51 66 0 128 65 0 5 51 68 0 128 67 0 5 51 70 0 128 69 0 5 51 72 0 128 71 0 5 51 74 0 128 73 0 5 51 76 0 128 75 0 5 51 78 0 128 77 0 5 51 80 0 128 79 0 5 51 82 0 128 81 0 5 3 128 83 0 5 51 85 0 128 84 0 5 51 87 0 128 86 0 5 51 89 0 128 88 0 5 51 91 0 128 90 0 5 51 93 0 128 92 0 50)))
+ :constants ("SVG_NS" "http://www.w3.org/2000/svg" "MATH_NS" "http://www.w3.org/1998/Math/MathML" "island-scope?" {:upvalue-count 0 :arity 0 :constants ("not" "nil?" "scope-peek" "sx-island-scope") :bytecode (1 3 0 52 2 0 1 52 1 0 1 52 0 0 1 50)} "*memo-cache*" "dict" "*cyst-counter*" 0 "next-cyst-id" {:upvalue-count 0 :arity 0 :constants ("+" "*cyst-counter*" 1 "str" "sx-cyst-") :bytecode (20 1 0 1 2 0 52 0 0 2 21 1 0 5 1 4 0 20 1 0 52 3 0 2 50)} "contains-deref?" {:upvalue-count 0 :arity 1 :constants ("not" "list?" "empty?" "=" "type-of" "first" "symbol" "symbol-name" "deref" "some" "contains-deref?") :bytecode (16 0 52 1 0 1 52 0 0 1 33 4 0 4 32 69 0 16 0 52 2 0 1 33 4 0 4 32 56 0 16 0 52 5 0 1 52 4 0 1 1 6 0 52 3 0 2 6 33 19 0 5 20 7 0 16 0 52 5 0 1 48 1 1 8 0 52 3 0 2 33 4 0 3 32 9 0 20 10 0 16 0 52 9 0 2 50)} "dom-on" {:upvalue-count 0 :arity 3 :constants ("dom-listen" "lambda?" "=" 0 "len" "lambda-params" {:upvalue-count 1 :arity 1 :constants ("trampoline" "call-lambda" "list" "run-post-render-hooks") :bytecode (20 0 0 20 1 0 18 0 52 2 0 0 48 2 48 1 5 20 3 0 49 0 50)} {:upvalue-count 1 :arity 1 :constants ("trampoline" "call-lambda" "list" "run-post-render-hooks") :bytecode (20 0 0 20 1 0 18 0 16 0 52 2 0 1 48 2 48 1 5 20 3 0 49 0 50)}) :bytecode (20 0 0 16 0 16 1 16 2 52 1 0 1 33 36 0 1 3 0 16 2 52 5 0 1 52 4 0 1 52 2 0 2 33 8 0 51 6 0 1 2 32 5 0 51 7 0 1 2 32 2 0 16 2 49 3 50)} "render-to-dom" {:upvalue-count 0 :arity 3 :constants ("set-render-active!" "type-of" "nil" "=" "create-fragment" "boolean" "raw-html" "dom-parse-html" "raw-html-content" "string" "create-text-node" "number" "str" "symbol" "render-to-dom" "trampoline" "eval-expr" "keyword" "keyword-name" "dom-node" "spread" "not" "island-scope?" "scope-emit!" "element-attrs" "spread-attrs" "dict" "has-key?" "__host_handle" "list" "empty?" "render-dom-list" "signal?" "reactive-text" "deref") :bytecode (20 0 0 3 48 1 5 16 0 52 1 0 1 6 1 2 0 52 3 0 2 33 9 0 5 20 4 0 49 0 32 106 1 6 1 5 0 52 3 0 2 33 9 0 5 20 4 0 49 0 32 86 1 6 1 6 0 52 3 0 2 33 15 0 5 20 7 0 16 0 52 8 0 1 49 1 32 60 1 6 1 9 0 52 3 0 2 33 11 0 5 20 10 0 16 0 49 1 32 38 1 6 1 11 0 52 3 0 2 33 15 0 5 20 10 0 16 0 52 12 0 1 49 1 32 12 1 6 1 13 0 52 3 0 2 33 27 0 5 20 14 0 20 15 0 20 16 0 16 0 16 1 48 2 48 1 16 1 16 2 49 3 32 230 0 6 1 17 0 52 3 0 2 33 16 0 5 20 10 0 20 18 0 16 0 48 1 49 1 32 203 0 6 1 19 0 52 3 0 2 33 6 0 5 16 0 32 186 0 6 1 20 0 52 3 0 2 33 36 0 5 20 22 0 48 0 52 21 0 1 33 16 0 1 24 0 16 0 52 25 0 1 52 23 0 2 32 1 0 2 5 16 0 32 139 0 6 1 26 0 52 3 0 2 33 26 0 5 16 0 1 28 0 52 27 0 2 33 5 0 16 0 32 5 0 20 4 0 49 0 32 102 0 6 1 29 0 52 3 0 2 33 32 0 5 16 0 52 30 0 1 33 8 0 20 4 0 49 0 32 11 0 20 31 0 16 0 16 1 16 2 49 3 32 59 0 5 20 32 0 16 0 48 1 33 37 0 20 22 0 48 0 33 10 0 20 33 0 16 0 49 1 32 16 0 20 10 0 20 34 0 16 0 48 1 52 12 0 1 49 1 32 11 0 20 10 0 16 0 52 12 0 1 49 1 50)} "render-dom-list" {:upvalue-count 0 :arity 3 :constants ("first" "=" "type-of" "symbol" "symbol-name" "rest" "raw!" "render-dom-raw" "<>" "render-dom-fragment" "lake" "render-dom-lake" "marsh" "render-dom-marsh" "starts-with?" "html:" "render-dom-element" "slice" 5 "render-dom-form?" "contains?" "HTML_TAGS" ">" "len" 0 "keyword" "dispatch-render-form" "env-has?" "macro?" "env-get" "render-to-dom" "expand-macro" "~" "island?" "scope-peek" "sx-render-markers" "dom-create-element" "span" "dict" "reduce" {:upvalue-count 3 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "dict-set!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 148 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 82 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 18 2 16 3 16 4 52 14 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 22 0 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" "skip" "dom-set-attr" "data-sx-island" "component-name" "not" "empty-dict?" "data-sx-state" "sx-serialize" "render-dom-island" "component?" "render-dom-component" "render-dom-unknown-component" "index-of" "-" "deref" "island-scope?" "trampoline" "eval-expr" "signal?" "reactive-text" "create-text-node" "str" "contains-deref?" "computed" {:upvalue-count 2 :arity 0 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 18 0 18 1 48 2 49 1 50)} "lambda?" "list" "create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("render-to-dom" "not" "spread?" "dom-append") :bytecode (20 0 0 16 0 18 0 18 1 48 3 17 1 16 1 52 2 0 1 52 1 0 1 33 12 0 20 3 0 18 2 16 1 49 2 32 1 0 2 50)}) :bytecode (16 0 52 0 0 1 17 3 16 3 52 2 0 1 1 3 0 52 1 0 2 33 68 3 20 4 0 16 3 48 1 17 4 16 0 52 5 0 1 17 5 16 4 1 6 0 52 1 0 2 33 12 0 20 7 0 16 5 16 1 49 2 32 24 3 16 4 1 8 0 52 1 0 2 33 14 0 20 9 0 16 5 16 1 16 2 49 3 32 254 2 16 4 1 10 0 52 1 0 2 33 14 0 20 11 0 16 5 16 1 16 2 49 3 32 228 2 16 4 1 12 0 52 1 0 2 33 14 0 20 13 0 16 5 16 1 16 2 49 3 32 202 2 16 4 1 15 0 52 14 0 2 33 23 0 20 16 0 16 4 1 18 0 52 17 0 2 16 5 16 1 16 2 49 4 32 167 2 20 19 0 16 4 48 1 33 91 0 20 21 0 16 4 52 20 0 2 6 33 43 0 5 16 5 52 23 0 1 1 24 0 52 22 0 2 6 33 18 0 5 16 5 52 0 0 1 52 2 0 1 1 25 0 52 1 0 2 6 34 3 0 5 16 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 13 0 20 26 0 16 4 16 0 16 1 16 2 49 4 32 66 2 20 27 0 16 1 16 4 48 2 6 33 14 0 5 20 29 0 16 1 16 4 48 2 52 28 0 1 33 30 0 20 30 0 20 31 0 20 29 0 16 1 16 4 48 2 16 5 16 1 48 3 16 1 16 2 49 3 32 6 2 20 21 0 16 4 52 20 0 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 234 1 16 4 1 32 0 52 14 0 2 6 33 28 0 5 20 27 0 16 1 16 4 48 2 6 33 14 0 5 20 29 0 16 1 16 4 48 2 52 33 0 1 33 148 0 1 35 0 52 34 0 1 33 115 0 20 29 0 16 1 16 4 48 2 17 6 20 36 0 1 37 0 2 48 2 17 7 52 38 0 0 17 8 51 40 0 1 5 1 1 1 8 1 41 0 1 24 0 1 42 0 4 52 38 0 4 16 5 52 39 0 3 5 20 43 0 16 7 1 44 0 16 6 52 45 0 1 48 3 5 16 8 52 47 0 1 52 46 0 1 33 20 0 20 43 0 16 7 1 48 0 20 49 0 16 8 48 1 48 3 32 1 0 2 5 16 7 32 20 0 20 50 0 20 29 0 16 1 16 4 48 2 16 5 16 1 16 2 49 4 32 42 1 16 4 1 32 0 52 14 0 2 33 46 0 20 29 0 16 1 16 4 48 2 17 6 16 6 52 51 0 1 33 16 0 20 52 0 16 6 16 5 16 1 16 2 49 4 32 7 0 20 53 0 16 4 49 1 32 240 0 16 4 1 55 0 52 54 0 2 1 24 0 52 22 0 2 6 33 36 0 5 16 5 52 23 0 1 1 24 0 52 22 0 2 6 33 18 0 5 16 5 52 0 0 1 52 2 0 1 1 25 0 52 1 0 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 165 0 16 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 144 0 16 4 1 56 0 52 1 0 2 6 33 6 0 5 20 57 0 48 0 33 59 0 20 58 0 20 59 0 16 5 52 0 0 1 16 1 48 2 48 1 17 6 20 60 0 16 6 48 1 33 10 0 20 61 0 16 6 49 1 32 16 0 20 62 0 20 56 0 16 6 48 1 52 63 0 1 49 1 32 63 0 20 57 0 48 0 6 33 8 0 5 20 64 0 16 0 48 1 33 20 0 20 61 0 20 65 0 51 66 0 1 0 1 1 48 1 49 1 32 23 0 20 30 0 20 58 0 20 59 0 16 0 16 1 48 2 48 1 16 1 16 2 49 3 32 78 0 16 3 52 67 0 1 6 34 14 0 5 16 3 52 2 0 1 1 68 0 52 1 0 2 33 26 0 20 30 0 20 58 0 20 59 0 16 0 16 1 48 2 48 1 16 1 16 2 49 3 32 25 0 20 69 0 48 0 17 4 51 71 0 1 1 1 2 1 4 16 0 52 70 0 2 5 16 4 50)} "render-dom-element" {:upvalue-count 0 :arity 4 :constants ("=" "svg" "SVG_NS" "math" "MATH_NS" "dom-create-element" "scope-push!" "element-attrs" "reduce" {:upvalue-count 5 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "nth" "starts-with?" "on-" "trampoline" "eval-expr" "callable?" "dom-on" "slice" 3 "bind" "signal?" "bind-input" "ref" "dict-set!" "current" "key" "dom-set-attr" "str" "island-scope?" "reactive-attr" {:upvalue-count 2 :arity 0 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 18 0 18 1 48 2 49 1 50)} "nil?" "contains?" "BOOLEAN_ATTRS" "" "not" "VOID_ELEMENTS" "render-to-dom" "spread?" "reactive-spread" {:upvalue-count 3 :arity 0 :constants ("render-to-dom") :bytecode (20 0 0 18 0 18 1 18 2 49 3 50)} "dom-append") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 58 2 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 154 1 20 10 0 16 1 48 1 17 3 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 11 0 2 17 4 16 3 1 13 0 52 12 0 2 33 51 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 20 16 0 16 5 48 1 33 21 0 20 17 0 18 2 16 3 1 19 0 52 18 0 2 16 5 48 3 32 1 0 2 32 31 1 16 3 1 20 0 52 5 0 2 33 42 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 20 21 0 16 5 48 1 33 12 0 20 22 0 18 2 16 5 48 2 32 1 0 2 32 233 0 16 3 1 23 0 52 5 0 2 33 30 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 16 5 1 25 0 18 2 52 24 0 3 32 191 0 16 3 1 26 0 52 5 0 2 33 35 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 20 27 0 18 2 1 26 0 16 5 52 28 0 1 48 3 32 144 0 20 29 0 48 0 33 19 0 20 30 0 18 2 16 3 51 31 0 1 4 0 1 48 3 32 117 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 16 5 52 32 0 1 6 34 8 0 5 16 5 4 52 5 0 2 33 4 0 2 32 76 0 20 34 0 16 3 52 33 0 2 33 24 0 16 5 33 15 0 20 27 0 18 2 16 3 1 35 0 48 3 32 1 0 2 32 40 0 16 5 3 52 5 0 2 33 15 0 20 27 0 18 2 16 3 1 35 0 48 3 32 15 0 20 27 0 18 2 16 3 16 5 52 28 0 1 48 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 116 0 20 37 0 18 3 52 33 0 2 52 36 0 1 33 76 0 20 38 0 16 1 18 1 18 4 48 3 17 3 16 3 52 39 0 1 6 33 6 0 5 20 29 0 48 0 33 19 0 20 40 0 18 2 51 41 0 1 1 0 1 0 4 48 2 32 22 0 16 3 52 39 0 1 33 4 0 2 32 9 0 20 42 0 18 2 16 3 48 2 32 1 0 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "for-each" {:upvalue-count 1 :arity 1 :constants ("for-each" {:upvalue-count 2 :arity 1 :constants ("dict-get" "=" "class" "dom-get-attr" "dom-set-attr" "not" "" "str" " " "style" ";") :bytecode (18 0 16 0 52 0 0 2 17 1 16 0 1 2 0 52 1 0 2 33 64 0 20 3 0 18 1 1 2 0 48 2 17 2 20 4 0 18 1 1 2 0 16 2 6 33 14 0 5 16 2 1 6 0 52 1 0 2 52 5 0 1 33 14 0 16 2 1 8 0 16 1 52 7 0 3 32 2 0 16 1 49 3 32 91 0 16 0 1 9 0 52 1 0 2 33 64 0 20 3 0 18 1 1 9 0 48 2 17 2 20 4 0 18 1 1 9 0 16 2 6 33 14 0 5 16 2 1 6 0 52 1 0 2 52 5 0 1 33 14 0 16 2 1 10 0 16 1 52 7 0 3 32 2 0 16 1 49 3 32 15 0 20 4 0 18 1 16 0 16 1 52 7 0 1 49 3 50)} "keys") :bytecode (51 1 0 1 0 0 0 16 0 52 2 0 1 52 0 0 2 50)} "scope-emitted" "scope-pop!") :bytecode (16 0 1 1 0 52 0 0 2 33 6 0 20 2 0 32 20 0 16 0 1 3 0 52 0 0 2 33 6 0 20 4 0 32 2 0 16 3 17 4 20 5 0 16 0 16 4 48 2 17 5 1 7 0 2 52 6 0 2 5 51 9 0 1 1 1 2 1 5 1 0 1 4 1 11 0 1 12 0 1 13 0 4 52 10 0 4 16 1 52 8 0 3 5 51 15 0 1 5 1 7 0 52 16 0 1 52 14 0 2 5 1 7 0 52 17 0 1 5 16 5 50)} "render-dom-component" {:upvalue-count 0 :arity 4 :constants ("dict" "list" "reduce" {:upvalue-count 4 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "trampoline" "eval-expr" "nth" "dict-set!" "keyword-name" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 154 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 78 0 20 10 0 20 11 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 12 0 2 18 1 48 2 48 1 17 3 18 2 20 14 0 16 1 48 1 16 3 52 13 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 15 0 18 3 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" 0 "skip" "env-merge" "component-closure" "for-each" {:upvalue-count 2 :arity 1 :constants ("env-bind!" "dict-has?" "dict-get") :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)} "component-params" "component-has-children?" "create-fragment" {:upvalue-count 3 :arity 1 :constants ("render-to-dom" "not" "spread?" "dom-append") :bytecode (20 0 0 16 0 18 0 18 1 48 3 17 1 16 1 52 2 0 1 52 1 0 1 33 12 0 20 3 0 18 2 16 1 49 2 32 1 0 2 50)} "env-bind!" "children" "render-to-dom" "component-body") :bytecode (52 0 0 0 17 4 52 1 0 0 17 5 51 3 0 1 1 1 2 1 4 1 5 1 4 0 1 5 0 1 6 0 4 52 0 0 4 16 1 52 2 0 3 5 20 7 0 16 0 52 8 0 1 16 2 48 2 17 6 51 10 0 1 6 1 4 16 0 52 11 0 1 52 9 0 2 5 16 0 52 12 0 1 33 38 0 20 13 0 48 0 17 7 51 14 0 1 2 1 3 1 7 16 5 52 9 0 2 5 20 15 0 16 6 1 16 0 16 7 48 3 32 1 0 2 5 20 17 0 16 0 52 18 0 1 16 6 16 3 49 3 50)} "render-dom-fragment" {:upvalue-count 0 :arity 3 :constants ("create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("render-to-dom" "not" "spread?" "dom-append") :bytecode (20 0 0 16 0 18 0 18 1 48 3 17 1 16 1 52 2 0 1 52 1 0 1 33 12 0 20 3 0 18 2 16 1 49 2 32 1 0 2 50)}) :bytecode (20 0 0 48 0 17 3 51 2 0 1 1 1 2 1 3 16 0 52 1 0 2 5 16 3 50)} "render-dom-raw" {:upvalue-count 0 :arity 2 :constants ("create-fragment" "for-each" {:upvalue-count 2 :arity 1 :constants ("trampoline" "eval-expr" "=" "type-of" "string" "dom-append" "dom-parse-html" "dom-node" "dom-clone" "not" "nil?" "create-text-node" "str") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 48 1 17 1 16 1 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 1 20 6 0 16 1 48 1 49 2 32 68 0 16 1 52 3 0 1 1 7 0 52 2 0 2 33 17 0 20 5 0 18 1 20 8 0 16 1 48 1 49 2 32 35 0 16 1 52 10 0 1 52 9 0 1 33 21 0 20 5 0 18 1 20 11 0 16 1 52 12 0 1 48 1 49 2 32 1 0 2 50)}) :bytecode (20 0 0 48 0 17 2 51 2 0 1 1 1 2 16 0 52 1 0 2 5 16 2 50)} "render-dom-unknown-component" {:upvalue-count 0 :arity 1 :constants ("error" "str" "Unknown component: ") :bytecode (1 2 0 16 0 52 1 0 2 52 0 0 1 50)} "RENDER_DOM_FORMS" "list" "if" "when" "cond" "case" "let" "let*" "letrec" "begin" "do" "define" "defcomp" "defisland" "defmacro" "defstyle" "map" "map-indexed" "filter" "for-each" "portal" "error-boundary" "scope" "provide" "cyst" "render-dom-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "RENDER_DOM_FORMS") :bytecode (20 1 0 16 0 52 0 0 2 50)} "dispatch-render-form" {:upvalue-count 0 :arity 4 :constants ("=" "if" "island-scope?" "create-comment" "r-if" "list" "effect" {:upvalue-count 6 :arity 0 :constants ("trampoline" "eval-expr" "nth" 1 "render-to-dom" 2 ">" "len" 3 "create-fragment" "dom-parent" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "dom-is-fragment?" "dom-child-nodes" "list" "dom-insert-after") :bytecode (20 0 0 20 1 0 18 0 1 3 0 52 2 0 2 18 1 48 2 48 1 17 1 16 1 33 21 0 20 4 0 18 0 1 5 0 52 2 0 2 18 1 18 2 48 3 32 42 0 18 0 52 7 0 1 1 8 0 52 6 0 2 33 21 0 20 4 0 18 0 1 8 0 52 2 0 2 18 1 18 2 48 3 32 5 0 20 9 0 48 0 17 0 20 10 0 18 3 48 1 33 51 0 51 12 0 18 4 52 11 0 2 5 20 13 0 16 0 48 1 33 10 0 20 14 0 16 0 48 1 32 6 0 16 0 52 15 0 1 19 4 5 20 16 0 18 3 16 0 49 2 32 4 0 16 0 19 5 50)} "spread?" "create-fragment" "dom-append" "dom-is-fragment?" "dom-child-nodes" "trampoline" "eval-expr" "nth" 1 "render-to-dom" 2 ">" "len" 3 "when" "r-when" {:upvalue-count 6 :arity 0 :constants ("dom-parent" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "list" "trampoline" "eval-expr" "nth" 1 "create-fragment" {:upvalue-count 4 :arity 1 :constants ("dom-append" "render-to-dom" "nth") :bytecode (20 0 0 18 0 20 1 0 18 1 16 0 52 2 0 2 18 2 18 3 48 3 49 2 50)} "range" 2 "len" "dom-child-nodes" "dom-insert-after") :bytecode (20 0 0 18 0 48 1 33 103 0 51 2 0 18 1 52 1 0 2 5 52 3 0 0 19 1 5 20 4 0 20 5 0 18 2 1 7 0 52 6 0 2 18 3 48 2 48 1 33 58 0 20 8 0 48 0 17 0 51 9 0 1 0 0 2 0 3 0 4 1 11 0 18 2 52 12 0 1 52 10 0 2 52 1 0 2 5 20 13 0 16 0 48 1 19 1 5 20 14 0 18 0 16 0 49 2 32 1 0 2 32 78 0 20 4 0 20 5 0 18 2 1 7 0 52 6 0 2 18 3 48 2 48 1 33 53 0 20 8 0 48 0 17 0 51 9 0 1 0 0 2 0 3 0 4 1 11 0 18 2 52 12 0 1 52 10 0 2 52 1 0 2 5 20 13 0 16 0 48 1 19 1 5 16 0 19 5 32 1 0 2 50)} "not" "for-each" {:upvalue-count 4 :arity 1 :constants ("dom-append" "render-to-dom" "nth") :bytecode (20 0 0 18 0 20 1 0 18 1 16 0 52 2 0 2 18 2 18 3 48 3 49 2 50)} "range" "cond" "r-cond" {:upvalue-count 6 :arity 0 :constants ("eval-cond" "rest" "dom-parent" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "list" "render-to-dom" "dom-is-fragment?" "dom-child-nodes" "dom-insert-after") :bytecode (20 0 0 18 0 52 1 0 1 18 1 48 2 17 0 20 2 0 18 2 48 1 33 80 0 51 4 0 18 3 52 3 0 2 5 52 5 0 0 19 3 5 16 0 33 54 0 20 6 0 16 0 18 1 18 4 48 3 17 1 20 7 0 16 1 48 1 33 10 0 20 8 0 16 1 48 1 32 6 0 16 1 52 5 0 1 19 3 5 20 9 0 18 2 16 1 49 2 32 1 0 2 32 55 0 16 0 33 49 0 20 6 0 16 0 18 1 18 4 48 3 17 1 20 7 0 16 1 48 1 33 10 0 20 8 0 16 1 48 1 32 6 0 16 1 52 5 0 1 19 3 5 16 1 19 5 32 1 0 2 50)} "eval-cond" "rest" "case" "let" "let*" "process-bindings" {:upvalue-count 4 :arity 1 :constants ("render-to-dom" "nth" "not" "spread?" "dom-append") :bytecode (20 0 0 18 0 16 0 52 1 0 2 18 1 18 2 48 3 17 1 16 1 52 3 0 1 52 2 0 1 33 12 0 20 4 0 18 3 16 1 49 2 32 1 0 2 50)} "letrec" "slice" "env-extend" {:upvalue-count 1 :arity 1 :constants ("=" "type-of" "first" "symbol" "symbol-name" "str" "env-bind!") :bytecode (16 0 52 2 0 1 52 1 0 1 1 3 0 52 0 0 2 33 14 0 20 4 0 16 0 52 2 0 1 48 1 32 10 0 16 0 52 2 0 1 52 5 0 1 17 1 20 6 0 18 0 16 1 2 49 3 50)} {:upvalue-count 1 :arity 1 :constants ("=" "type-of" "first" "symbol" "symbol-name" "str" "env-set!" "trampoline" "eval-expr" "nth" 1) :bytecode (16 0 52 2 0 1 52 1 0 1 1 3 0 52 0 0 2 33 14 0 20 4 0 16 0 52 2 0 1 48 1 32 10 0 16 0 52 2 0 1 52 5 0 1 17 1 20 6 0 18 0 16 1 20 7 0 20 8 0 16 0 1 10 0 52 9 0 2 18 0 48 2 48 1 49 3 50)} {:upvalue-count 1 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 49 1 50)} "init" "last" "begin" "do" "definition-form?" "map" "type-of" "first" "symbol" "symbol-name" "deref" "signal?" "reactive-list" {:upvalue-count 4 :arity 1 :constants ("lambda?" "render-lambda-dom" "list" "render-to-dom" "apply" "dom-append") :bytecode (18 0 52 0 0 1 33 20 0 20 1 0 18 0 16 0 52 2 0 1 18 1 18 2 48 4 32 21 0 20 3 0 18 0 16 0 52 2 0 1 52 4 0 2 18 1 18 2 48 3 17 1 20 5 0 18 3 16 1 49 2 50)} "map-indexed" "for-each-indexed" {:upvalue-count 4 :arity 2 :constants ("lambda?" "render-lambda-dom" "list" "render-to-dom" "apply" "dom-append") :bytecode (18 0 52 0 0 1 33 22 0 20 1 0 18 0 16 0 16 1 52 2 0 2 18 1 18 2 48 4 32 23 0 20 3 0 18 0 16 0 16 1 52 2 0 2 52 4 0 2 18 1 18 2 48 3 17 2 20 5 0 18 3 16 2 49 2 50)} "filter" "portal" "render-dom-portal" "error-boundary" "render-dom-error-boundary" "scope" ">=" "keyword" "keyword-name" "value" "scope-push!" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "scope-pop!" "provide" "cyst" "key" "str" "next-cyst-id" "get" "*memo-cache*" "host-get" "isConnected" "dom-create-element" "div" "dom-set-attr" "data-sx-cyst" "with-island-scope" {:upvalue-count 1 :arity 1 :constants ("append!") :bytecode (20 0 0 18 0 16 0 49 2 50)} {:upvalue-count 3 :arity 0 :constants ("create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)}) :bytecode (20 0 0 48 0 17 0 51 2 0 1 0 0 0 0 1 18 2 52 1 0 2 5 16 0 50)} "dom-set-data" "sx-disposers" "dict-set!") :bytecode (16 0 1 1 0 52 0 0 2 33 226 0 20 2 0 48 0 33 124 0 20 3 0 1 4 0 48 1 17 4 52 5 0 0 17 5 2 17 6 20 6 0 51 7 0 1 1 1 2 1 3 1 4 1 5 1 6 48 1 5 16 6 52 8 0 1 33 5 0 16 6 32 67 0 20 9 0 48 0 17 7 20 10 0 16 7 16 4 48 2 5 16 6 33 41 0 20 11 0 16 6 48 1 33 10 0 20 12 0 16 6 48 1 32 6 0 16 6 52 5 0 1 17 5 5 20 10 0 16 7 16 6 48 2 32 1 0 2 5 16 7 32 91 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 16 4 33 21 0 20 17 0 16 1 1 18 0 52 15 0 2 16 2 16 3 49 3 32 42 0 16 1 52 20 0 1 1 21 0 52 19 0 2 33 21 0 20 17 0 16 1 1 21 0 52 15 0 2 16 2 16 3 49 3 32 5 0 20 9 0 49 0 32 217 7 16 0 1 22 0 52 0 0 2 33 180 0 20 2 0 48 0 33 95 0 20 3 0 1 23 0 48 1 17 4 52 5 0 0 17 5 2 17 6 20 6 0 51 24 0 1 4 1 5 1 1 1 2 1 3 1 6 48 1 5 16 6 52 8 0 1 33 5 0 16 6 32 38 0 20 9 0 48 0 17 7 20 10 0 16 7 16 4 48 2 5 16 6 33 12 0 20 10 0 16 7 16 6 48 2 32 1 0 2 5 16 7 32 74 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 52 25 0 1 33 8 0 20 9 0 49 0 32 38 0 20 9 0 48 0 17 4 51 27 0 1 4 1 1 1 2 1 3 1 18 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 4 32 25 7 16 0 1 29 0 52 0 0 2 33 145 0 20 2 0 48 0 33 95 0 20 3 0 1 30 0 48 1 17 4 52 5 0 0 17 5 2 17 6 20 6 0 51 31 0 1 1 1 2 1 4 1 5 1 3 1 6 48 1 5 16 6 52 8 0 1 33 5 0 16 6 32 38 0 20 9 0 48 0 17 7 20 10 0 16 7 16 4 48 2 5 16 6 33 12 0 20 10 0 16 7 16 6 48 2 32 1 0 2 5 16 7 32 39 0 20 32 0 16 1 52 33 0 1 16 2 48 2 17 4 16 4 33 14 0 20 17 0 16 4 16 2 16 3 49 3 32 5 0 20 9 0 49 0 32 124 6 16 0 1 34 0 52 0 0 2 33 26 0 20 17 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 16 2 16 3 49 3 32 86 6 16 0 1 35 0 52 0 0 2 6 34 10 0 5 16 0 1 36 0 52 0 0 2 33 96 0 20 37 0 16 1 1 16 0 52 15 0 2 16 2 48 2 17 4 16 1 52 20 0 1 1 21 0 52 0 0 2 33 21 0 20 17 0 16 1 1 18 0 52 15 0 2 16 4 16 3 49 3 32 38 0 20 9 0 48 0 17 5 51 38 0 1 1 1 4 1 3 1 5 1 18 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 5 32 220 5 16 0 1 39 0 52 0 0 2 33 109 0 16 1 1 16 0 52 15 0 2 17 4 16 1 1 18 0 52 40 0 2 17 5 20 41 0 16 2 48 1 17 6 51 42 0 1 6 16 4 52 26 0 2 5 51 43 0 1 6 16 4 52 26 0 2 5 16 5 52 20 0 1 1 16 0 52 19 0 2 33 18 0 51 44 0 1 6 16 5 52 45 0 1 52 26 0 2 32 1 0 2 5 20 17 0 16 5 52 46 0 1 16 6 16 3 49 3 32 99 5 16 0 1 47 0 52 0 0 2 6 34 10 0 5 16 0 1 48 0 52 0 0 2 33 78 0 16 1 52 20 0 1 1 18 0 52 0 0 2 33 21 0 20 17 0 16 1 1 16 0 52 15 0 2 16 2 16 3 49 3 32 38 0 20 9 0 48 0 17 4 51 38 0 1 1 1 2 1 3 1 4 1 16 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 4 32 251 4 20 49 0 16 0 48 1 33 23 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 5 20 9 0 49 0 32 218 4 16 0 1 50 0 52 0 0 2 33 31 1 16 1 1 18 0 52 15 0 2 17 4 20 2 0 48 0 6 33 77 0 5 16 4 52 51 0 1 1 5 0 52 0 0 2 6 33 59 0 5 16 4 52 20 0 1 1 16 0 52 19 0 2 6 33 41 0 5 16 4 52 52 0 1 52 51 0 1 1 53 0 52 0 0 2 6 33 19 0 5 20 54 0 16 4 52 52 0 1 48 1 1 55 0 52 0 0 2 33 111 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 5 20 13 0 20 14 0 16 4 1 16 0 52 15 0 2 16 2 48 2 48 1 17 6 20 56 0 16 6 48 1 33 16 0 20 57 0 16 5 16 6 16 2 16 3 49 4 32 36 0 20 55 0 16 6 48 1 17 7 20 9 0 48 0 17 8 51 58 0 1 5 1 2 1 3 1 8 16 7 52 26 0 2 5 16 8 32 73 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 5 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 6 20 9 0 48 0 17 7 51 58 0 1 5 1 2 1 3 1 7 16 6 52 26 0 2 5 16 7 32 175 3 16 0 1 59 0 52 0 0 2 33 76 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 5 20 9 0 48 0 17 6 51 61 0 1 4 1 2 1 3 1 6 16 5 52 60 0 2 5 16 6 32 87 3 16 0 1 62 0 52 0 0 2 33 26 0 20 17 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 16 2 16 3 49 3 32 49 3 16 0 1 63 0 52 0 0 2 33 18 0 20 64 0 16 1 52 33 0 1 16 2 16 3 49 3 32 19 3 16 0 1 65 0 52 0 0 2 33 18 0 20 66 0 16 1 52 33 0 1 16 2 16 3 49 3 32 245 2 16 0 1 26 0 52 0 0 2 33 76 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 5 20 9 0 48 0 17 6 51 58 0 1 4 1 2 1 3 1 6 16 5 52 26 0 2 5 16 6 32 157 2 16 0 1 67 0 52 0 0 2 33 188 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 16 1 1 18 0 52 40 0 2 17 5 2 17 6 2 17 7 20 9 0 48 0 17 8 16 5 52 20 0 1 1 18 0 52 68 0 2 6 33 41 0 5 16 5 52 52 0 1 52 51 0 1 1 69 0 52 0 0 2 6 33 19 0 5 20 70 0 16 5 52 52 0 1 48 1 1 71 0 52 0 0 2 33 38 0 20 13 0 20 14 0 16 5 1 16 0 52 15 0 2 16 2 48 2 48 1 17 6 5 16 5 1 18 0 52 40 0 2 17 7 32 4 0 16 5 17 7 5 16 4 16 6 52 72 0 2 5 51 73 0 1 8 1 2 1 3 16 7 52 26 0 2 5 16 4 52 74 0 1 5 16 8 32 213 1 16 0 1 75 0 52 0 0 2 33 103 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 5 20 9 0 48 0 17 6 16 4 16 5 52 72 0 2 5 51 27 0 1 6 1 1 1 2 1 3 1 21 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 4 52 74 0 1 5 16 6 32 98 1 16 0 1 76 0 52 0 0 2 33 63 1 16 1 52 20 0 1 1 18 0 52 19 0 2 6 33 47 0 5 16 1 1 16 0 52 15 0 2 52 51 0 1 1 69 0 52 0 0 2 6 33 22 0 5 20 70 0 16 1 1 16 0 52 15 0 2 48 1 1 77 0 52 0 0 2 33 28 0 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 52 78 0 1 32 5 0 20 79 0 48 0 17 4 20 81 0 16 4 52 80 0 2 17 5 16 5 6 33 11 0 5 20 82 0 16 5 1 83 0 48 2 33 5 0 16 5 32 178 0 20 84 0 1 85 0 2 48 2 17 6 52 5 0 0 17 7 16 1 52 20 0 1 1 18 0 52 19 0 2 6 33 47 0 5 16 1 1 16 0 52 15 0 2 52 51 0 1 1 69 0 52 0 0 2 6 33 22 0 5 20 70 0 16 1 1 16 0 52 15 0 2 48 1 1 77 0 52 0 0 2 33 12 0 16 1 1 21 0 52 40 0 2 32 9 0 16 1 1 16 0 52 40 0 2 17 8 20 86 0 16 6 1 87 0 16 4 48 3 5 20 88 0 51 89 0 1 7 51 90 0 1 2 1 3 1 8 48 2 17 9 20 10 0 16 6 16 9 48 2 5 20 91 0 16 6 1 92 0 16 7 48 3 5 20 81 0 16 4 16 6 52 93 0 3 5 16 6 32 23 0 20 17 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 16 2 16 3 49 3 50)} "render-lambda-dom" {:upvalue-count 0 :arity 4 :constants ("env-merge" "lambda-closure" "for-each-indexed" {:upvalue-count 2 :arity 2 :constants ("env-bind!" "nth") :bytecode (20 0 0 18 0 16 1 18 1 16 0 52 1 0 2 49 3 50)} "lambda-params" "render-to-dom" "lambda-body") :bytecode (20 0 0 16 0 52 1 0 1 16 2 48 2 17 4 51 3 0 1 4 1 1 16 0 52 4 0 1 52 2 0 2 5 20 5 0 16 0 52 6 0 1 16 4 16 3 49 3 50)} "render-dom-island" {:upvalue-count 0 :arity 4 :constants ("dict" "list" "reduce" {:upvalue-count 4 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "trampoline" "eval-expr" "nth" "dict-set!" "keyword-name" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 154 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 78 0 20 10 0 20 11 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 12 0 2 18 1 48 2 48 1 17 3 18 2 20 14 0 16 1 48 1 16 3 52 13 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 15 0 18 3 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" 0 "skip" "env-merge" "component-closure" "component-name" "for-each" {:upvalue-count 2 :arity 1 :constants ("env-bind!" "dict-has?" "dict-get") :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)} "component-params" "component-has-children?" "create-fragment" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "env-bind!" "children" "dom-create-element" "span" "dom-set-attr" "data-sx-island" "not" "empty-dict?" "data-sx-state" "sx-serialize" "mark-processed!" "island-hydrated" "with-island-scope" {:upvalue-count 1 :arity 1 :constants ("append!") :bytecode (20 0 0 18 0 16 0 49 2 50)} {:upvalue-count 3 :arity 0 :constants ("render-to-dom" "component-body") :bytecode (20 0 0 18 0 52 1 0 1 18 1 18 2 49 3 50)} "dom-append" "dom-set-data" "sx-disposers") :bytecode (52 0 0 0 17 4 52 1 0 0 17 5 51 3 0 1 1 1 2 1 4 1 5 1 4 0 1 5 0 1 6 0 4 52 0 0 4 16 1 52 2 0 3 5 20 7 0 16 0 52 8 0 1 16 2 48 2 17 6 16 0 52 9 0 1 17 7 51 11 0 1 6 1 4 16 0 52 12 0 1 52 10 0 2 5 16 0 52 13 0 1 33 38 0 20 14 0 48 0 17 8 51 15 0 1 8 1 2 1 3 16 5 52 10 0 2 5 20 16 0 16 6 1 17 0 16 8 48 3 32 1 0 2 5 20 18 0 1 19 0 2 48 2 17 8 52 1 0 0 17 9 20 20 0 16 8 1 21 0 16 7 48 3 5 16 4 52 23 0 1 52 22 0 1 33 20 0 20 20 0 16 8 1 24 0 20 25 0 16 4 48 1 48 3 32 1 0 2 5 20 26 0 16 8 1 27 0 48 2 5 20 28 0 51 29 0 1 9 51 30 0 1 0 1 6 1 3 48 2 17 10 20 31 0 16 8 16 10 48 2 5 20 32 0 16 8 1 33 0 16 9 48 3 5 16 8 50)} "render-dom-lake" {:upvalue-count 0 :arity 3 :constants ("div" "list" "reduce" {:upvalue-count 5 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "id" "tag" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 187 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 111 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 16 3 1 14 0 52 5 0 2 33 7 0 16 4 19 2 32 20 0 16 3 1 15 0 52 5 0 2 33 7 0 16 4 19 3 32 1 0 2 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 16 0 18 4 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "dom-create-element" "dom-set-attr" "data-sx-lake" "" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)}) :bytecode (2 17 3 1 0 0 17 4 52 1 0 0 17 5 51 3 0 1 0 1 1 1 3 1 4 1 5 1 5 0 1 6 0 1 7 0 4 52 4 0 4 16 0 52 2 0 3 5 20 8 0 16 4 2 48 2 17 6 20 9 0 16 6 1 10 0 16 3 6 34 4 0 5 1 11 0 48 3 5 51 13 0 1 6 1 1 1 2 16 5 52 12 0 2 5 16 6 50)} "render-dom-marsh" {:upvalue-count 0 :arity 3 :constants ("div" "list" "reduce" {:upvalue-count 6 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "id" "tag" "transform" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 206 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 130 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 16 3 1 14 0 52 5 0 2 33 7 0 16 4 19 2 32 39 0 16 3 1 15 0 52 5 0 2 33 7 0 16 4 19 3 32 20 0 16 3 1 16 0 52 5 0 2 33 7 0 16 4 19 4 32 1 0 2 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 17 0 18 5 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "dom-create-element" "dom-set-attr" "data-sx-marsh" "" "dom-set-data" "sx-marsh-transform" "sx-marsh-env" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)}) :bytecode (2 17 3 1 0 0 17 4 2 17 5 52 1 0 0 17 6 51 3 0 1 0 1 1 1 3 1 4 1 5 1 6 1 5 0 1 6 0 1 7 0 4 52 4 0 4 16 0 52 2 0 3 5 20 8 0 16 4 2 48 2 17 7 20 9 0 16 7 1 10 0 16 3 6 34 4 0 5 1 11 0 48 3 5 16 5 33 15 0 20 12 0 16 7 1 13 0 16 5 48 3 32 1 0 2 5 20 12 0 16 7 1 14 0 16 1 48 3 5 51 16 0 1 7 1 1 1 2 16 6 52 15 0 2 5 16 7 50)} "reactive-text" {:upvalue-count 0 :arity 1 :constants ("create-text-node" "str" "deref" "effect" {:upvalue-count 2 :arity 0 :constants ("dom-set-text-content" "str" "deref") :bytecode (20 0 0 18 0 20 2 0 18 1 48 1 52 1 0 1 49 2 50)}) :bytecode (20 0 0 20 2 0 16 0 48 1 52 1 0 1 48 1 17 1 20 3 0 51 4 0 1 1 1 0 48 1 5 16 1 50)} "reactive-attr" {:upvalue-count 0 :arity 3 :constants ("dom-get-attr" "data-sx-reactive-attrs" "" "empty?" "str" "," "dom-set-attr" "effect" {:upvalue-count 3 :arity 0 :constants ("signal?" "deref" "nil?" "=" "dom-remove-attr" "dom-set-attr" "" "str") :bytecode (18 0 48 0 17 0 20 0 0 16 0 48 1 33 10 0 20 1 0 16 0 48 1 32 2 0 16 0 17 1 16 1 52 2 0 1 6 34 8 0 5 16 1 4 52 3 0 2 33 12 0 20 4 0 18 1 18 2 49 2 32 40 0 16 1 3 52 3 0 2 33 15 0 20 5 0 18 1 18 2 1 6 0 49 3 32 15 0 20 5 0 18 1 18 2 16 1 52 7 0 1 49 3 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 6 34 4 0 5 1 2 0 17 3 16 3 52 3 0 1 33 5 0 16 1 32 11 0 16 3 1 5 0 16 1 52 4 0 3 17 4 20 6 0 16 0 1 1 0 16 4 48 3 5 20 7 0 51 8 0 1 2 1 0 1 1 49 1 50)} "reactive-spread" {:upvalue-count 0 :arity 2 :constants ("list" "dom-get-attr" "data-sx-reactive-attrs" "" "dom-set-attr" "empty?" "_spread" "str" ",_spread" "effect" {:upvalue-count 4 :arity 0 :constants ("not" "empty?" "dom-get-attr" "class" "" "filter" {:upvalue-count 0 :arity 1 :constants ("not" "=" "") :bytecode (16 0 1 2 0 52 1 0 2 52 0 0 1 50)} "split" " " {:upvalue-count 1 :arity 1 :constants ("not" "some" {:upvalue-count 1 :arity 1 :constants ("=") :bytecode (16 0 18 0 52 0 0 2 50)}) :bytecode (51 2 0 1 0 18 0 52 1 0 2 52 0 0 1 50)} "dom-remove-attr" "dom-set-attr" "join" "for-each" {:upvalue-count 1 :arity 1 :constants ("dom-remove-attr") :bytecode (20 0 0 18 0 16 0 49 2 50)} "spread?" "spread-attrs" "dict-get" {:upvalue-count 0 :arity 1 :constants ("not" "=" "class") :bytecode (16 0 1 2 0 52 1 0 2 52 0 0 1 50)} "keys" "=" "str" {:upvalue-count 2 :arity 1 :constants ("dom-set-attr" "str" "dict-get") :bytecode (20 0 0 18 0 16 0 18 1 16 0 52 2 0 2 52 1 0 1 49 3 50)} "run-post-render-hooks" "list") :bytecode (18 0 52 1 0 1 52 0 0 1 33 95 0 20 2 0 18 1 1 3 0 48 2 6 34 4 0 5 1 4 0 17 0 51 6 0 16 0 1 8 0 52 7 0 2 52 5 0 2 17 1 51 9 0 0 0 16 1 52 5 0 2 17 2 16 2 52 1 0 1 33 13 0 20 10 0 18 1 1 3 0 48 2 32 19 0 20 11 0 18 1 1 3 0 1 8 0 16 2 52 12 0 2 48 3 32 1 0 2 5 51 14 0 0 1 18 2 52 13 0 2 5 18 3 48 0 17 0 16 0 52 15 0 1 33 179 0 16 0 52 16 0 1 17 1 16 1 1 3 0 52 17 0 2 6 34 4 0 5 1 4 0 17 2 51 6 0 16 2 1 8 0 52 7 0 2 52 5 0 2 17 3 51 18 0 16 1 52 19 0 1 52 5 0 2 17 4 16 3 19 0 5 16 4 19 2 5 16 3 52 1 0 1 52 0 0 1 33 72 0 20 2 0 18 1 1 3 0 48 2 6 34 4 0 5 1 4 0 17 5 20 11 0 18 1 1 3 0 16 5 6 33 14 0 5 16 5 1 4 0 52 20 0 2 52 0 0 1 33 14 0 16 5 1 8 0 16 2 52 21 0 3 32 2 0 16 2 48 3 32 1 0 2 5 51 22 0 0 1 1 1 16 4 52 13 0 2 5 20 23 0 49 0 32 13 0 52 24 0 0 19 0 5 52 24 0 0 19 2 50)}) :bytecode (52 0 0 0 17 2 52 0 0 0 17 3 20 1 0 16 0 1 2 0 48 2 6 34 4 0 5 1 3 0 17 4 20 4 0 16 0 1 2 0 16 4 52 5 0 1 33 6 0 1 6 0 32 9 0 16 4 1 8 0 52 7 0 2 48 3 5 20 9 0 51 10 0 1 2 1 0 1 3 1 1 49 1 50)} "reactive-fragment" {:upvalue-count 0 :arity 4 :constants ("create-comment" "island-fragment" "list" "effect" {:upvalue-count 4 :arity 0 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "list" "dom-child-nodes" "dom-insert-after") :bytecode (51 1 0 18 0 52 0 0 2 5 52 2 0 0 19 0 5 18 1 48 0 33 28 0 18 2 48 0 17 0 20 3 0 16 0 48 1 19 0 5 20 4 0 18 3 16 0 49 2 32 1 0 2 50)}) :bytecode (20 0 0 1 1 0 48 1 17 4 52 2 0 0 17 5 20 3 0 51 4 0 1 5 1 0 1 1 1 4 48 1 5 16 4 50)} "render-list-item" {:upvalue-count 0 :arity 4 :constants ("lambda?" "render-lambda-dom" "list" "render-to-dom" "apply") :bytecode (16 0 52 0 0 1 33 20 0 20 1 0 16 0 16 1 52 2 0 1 16 2 16 3 49 4 32 21 0 20 3 0 16 0 16 1 52 2 0 1 52 4 0 2 16 2 16 3 49 3 50)} "extract-key" {:upvalue-count 0 :arity 2 :constants ("dom-get-attr" "key" "dom-remove-attr" "dom-get-data" "str" "__idx_") :bytecode (20 0 0 16 0 1 1 0 48 2 17 2 16 2 33 16 0 20 2 0 16 0 1 1 0 48 2 5 16 2 32 35 0 20 3 0 16 0 1 1 0 48 2 17 3 16 3 33 9 0 16 3 52 4 0 1 32 9 0 1 5 0 16 1 52 4 0 2 50)} "reactive-list" {:upvalue-count 0 :arity 4 :constants ("create-fragment" "create-comment" "island-list" "dict" "list" "dom-append" "effect" {:upvalue-count 8 :arity 0 :constants ("deref" "dom-parent" "dict" "list" "for-each-indexed" {:upvalue-count 7 :arity 2 :constants ("render-list-item" "extract-key" "not" "starts-with?" "__idx_" "dict-has?" "dict-set!" "dict-get" "append!") :bytecode (20 0 0 18 0 16 1 18 1 18 2 48 4 17 2 20 1 0 16 2 16 0 48 2 17 3 18 3 52 2 0 1 6 33 14 0 5 16 3 1 4 0 52 3 0 2 52 2 0 1 33 6 0 3 19 3 32 1 0 2 5 18 4 16 3 52 5 0 2 33 19 0 18 5 16 3 18 4 16 3 52 7 0 2 52 6 0 3 32 10 0 18 5 16 3 16 2 52 6 0 3 5 20 8 0 18 6 16 3 49 2 50)} "not" "dom-remove-children-after" "create-fragment" "for-each" {:upvalue-count 2 :arity 1 :constants ("dom-append" "dict-get") :bytecode (20 0 0 18 0 18 1 16 0 52 1 0 2 49 2 50)} "dom-insert-after" {:upvalue-count 2 :arity 1 :constants ("not" "dict-has?" "dom-remove" "dict-get") :bytecode (18 0 16 0 52 1 0 2 52 0 0 1 33 16 0 20 2 0 18 1 16 0 52 3 0 2 49 1 32 1 0 2 50)} {:upvalue-count 2 :arity 1 :constants ("dict-get" "dom-next-sibling" "not" "identical?" "dom-insert-after") :bytecode (18 0 16 0 52 0 0 2 17 1 20 1 0 18 1 48 1 17 2 16 1 16 2 52 3 0 2 52 2 0 1 33 12 0 20 4 0 18 1 16 1 48 2 32 1 0 2 5 16 1 19 1 50)} {:upvalue-count 6 :arity 2 :constants ("render-list-item" "extract-key" "dict-set!" "append!" "dom-append") :bytecode (20 0 0 18 0 16 1 18 1 18 2 48 4 17 2 20 1 0 16 2 16 0 48 2 17 3 18 3 16 3 16 2 52 2 0 3 5 20 3 0 18 4 16 3 48 2 5 20 4 0 18 5 16 2 49 2 50)}) :bytecode (20 0 0 18 0 48 1 17 0 20 1 0 18 1 48 1 33 133 0 52 2 0 0 17 1 52 3 0 0 17 2 4 17 3 51 5 0 0 2 0 3 0 4 1 3 0 5 1 1 1 2 16 0 52 4 0 2 5 16 3 52 6 0 1 33 41 0 20 7 0 18 1 48 1 5 20 8 0 48 0 17 4 51 10 0 1 4 1 1 16 2 52 9 0 2 5 20 11 0 18 1 16 4 48 2 32 31 0 51 12 0 1 1 0 5 18 6 52 9 0 2 5 18 1 17 4 51 13 0 1 1 1 4 16 2 52 9 0 2 5 16 1 19 5 5 16 2 19 6 32 21 0 51 14 0 0 2 0 3 0 4 0 5 0 6 0 7 16 0 52 4 0 2 50)}) :bytecode (20 0 0 48 0 17 4 20 1 0 1 2 0 48 1 17 5 52 3 0 0 17 6 52 4 0 0 17 7 20 5 0 16 4 16 5 48 2 5 20 6 0 51 7 0 1 1 1 5 1 0 1 2 1 3 1 6 1 7 1 4 48 1 5 16 4 50)} "bind-input" {:upvalue-count 0 :arity 2 :constants ("lower" "dom-get-attr" "type" "" "=" "checkbox" "radio" "dom-set-prop" "checked" "deref" "value" "str" "effect" {:upvalue-count 3 :arity 0 :constants ("dom-set-prop" "checked" "deref" "str" "!=" "dom-get-prop" "value") :bytecode (18 0 33 20 0 20 0 0 18 1 1 1 0 20 2 0 18 2 48 1 49 3 32 48 0 20 2 0 18 2 48 1 52 3 0 1 17 0 20 5 0 18 1 1 6 0 48 2 16 0 52 4 0 2 33 15 0 20 0 0 18 1 1 6 0 16 0 49 3 32 1 0 2 50)} "dom-on" "change" "input" {:upvalue-count 3 :arity 1 :constants ("reset!" "dom-get-prop" "checked" "value") :bytecode (18 0 33 20 0 20 0 0 18 1 20 1 0 18 2 1 2 0 48 2 49 2 32 17 0 20 0 0 18 1 20 1 0 18 2 1 3 0 48 2 49 2 50)}) :bytecode (20 1 0 16 0 1 2 0 48 2 6 34 4 0 5 1 3 0 52 0 0 1 17 2 16 2 1 5 0 52 4 0 2 6 34 10 0 5 16 2 1 6 0 52 4 0 2 17 3 16 3 33 20 0 20 7 0 16 0 1 8 0 20 9 0 16 1 48 1 48 3 32 21 0 20 7 0 16 0 1 10 0 20 9 0 16 1 48 1 52 11 0 1 48 3 5 20 12 0 51 13 0 1 3 1 0 1 1 48 1 5 20 14 0 16 0 16 3 33 6 0 1 15 0 32 3 0 1 16 0 51 17 0 1 3 1 1 1 0 49 3 50)} "*use-cek-reactive*" "enable-cek-reactive!" {:upvalue-count 0 :arity 0 :constants ("*use-cek-reactive*") :bytecode (3 21 0 0 50)} "cek-reactive-text" {:upvalue-count 0 :arity 2 :constants ("create-text-node" "" {:upvalue-count 1 :arity 1 :constants ("dom-set-text-content" "str") :bytecode (20 0 0 18 0 16 0 52 1 0 1 49 2 50)} "cek-run" "make-cek-state" "list" "make-reactive-reset-frame" "dom-set-text-content" "str") :bytecode (20 0 0 1 1 0 48 1 17 2 51 2 0 1 2 17 3 20 3 0 20 4 0 16 0 16 1 20 6 0 16 1 16 3 3 48 3 52 5 0 1 48 3 48 1 17 4 20 7 0 16 2 16 4 52 8 0 1 48 2 5 16 2 50)} "cek-reactive-attr" {:upvalue-count 0 :arity 4 :constants ({:upvalue-count 2 :arity 1 :constants ("nil?" "=" "dom-remove-attr" "dom-set-attr" "" "str") :bytecode (16 0 52 0 0 1 6 34 8 0 5 16 0 4 52 1 0 2 33 12 0 20 2 0 18 0 18 1 49 2 32 40 0 16 0 3 52 1 0 2 33 15 0 20 3 0 18 0 18 1 1 4 0 49 3 32 15 0 20 3 0 18 0 18 1 16 0 52 5 0 1 49 3 50)} "dom-get-attr" "data-sx-reactive-attrs" "" "empty?" "str" "," "dom-set-attr" "cek-run" "make-cek-state" "list" "make-reactive-reset-frame" "cek-call") :bytecode (51 0 0 1 0 1 1 17 4 20 1 0 16 0 1 2 0 48 2 6 34 4 0 5 1 3 0 17 5 16 5 52 4 0 1 33 5 0 16 1 32 11 0 16 5 1 6 0 16 1 52 5 0 3 17 6 20 7 0 16 0 1 2 0 16 6 48 3 5 20 8 0 20 9 0 16 2 16 3 20 11 0 16 3 16 4 3 48 3 52 10 0 1 48 3 48 1 17 5 20 12 0 16 4 16 5 52 10 0 1 49 2 50)} "render-dom-portal" {:upvalue-count 0 :arity 3 :constants ("trampoline" "eval-expr" "first" "dom-query" "dom-ensure-element" "not" "create-comment" "str" "portal: " " (not found)" "create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "rest" "dom-child-nodes" "dom-append" "register-in-scope" {:upvalue-count 1 :arity 0 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)}) :bytecode (51 1 0 18 0 52 0 0 2 50)}) :bytecode (20 0 0 20 1 0 16 0 52 2 0 1 16 1 48 2 48 1 17 3 20 3 0 16 3 48 1 6 34 8 0 5 20 4 0 16 3 48 1 17 4 16 4 52 5 0 1 33 20 0 20 6 0 1 8 0 16 3 1 9 0 52 7 0 3 49 1 32 75 0 20 6 0 1 8 0 16 3 52 7 0 2 48 1 17 5 20 10 0 48 0 17 6 51 12 0 1 6 1 1 1 2 16 0 52 13 0 1 52 11 0 2 5 20 14 0 16 6 48 1 17 7 20 15 0 16 4 16 6 48 2 5 20 16 0 51 17 0 1 7 48 1 5 16 5 50)} "render-dom-error-boundary" {:upvalue-count 0 :arity 3 :constants (">" "len" 1 "first" "rest" "dom-create-element" "div" "signal" 0 "dom-set-attr" "data-sx-boundary" "true" "effect" {:upvalue-count 6 :arity 0 :constants ("deref" "dom-set-prop" "innerHTML" "" "scope-push!" "sx-island-scope" "try-catch" {:upvalue-count 4 :arity 0 :constants ("create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "dom-append" "scope-pop!" "sx-island-scope") :bytecode (20 0 0 48 0 17 0 51 2 0 1 0 0 0 0 1 18 2 52 1 0 2 5 20 3 0 18 3 16 0 48 2 5 1 5 0 52 4 0 1 50)} {:upvalue-count 5 :arity 1 :constants ("scope-pop!" "sx-island-scope" "trampoline" "eval-expr" {:upvalue-count 1 :arity 0 :constants ("swap!" {:upvalue-count 0 :arity 1 :constants ("+" 1) :bytecode (16 0 1 1 0 52 0 0 2 50)}) :bytecode (20 0 0 18 0 51 1 0 49 2 50)} "nil?" "dom-create-element" "div" "dom-set-attr" "class" "sx-render-error" "style" "color:red;font-size:0.875rem;padding:0.5rem;border:1px solid red;border-radius:0.25rem;margin:0.5rem 0;" "dom-set-text-content" "str" "Render error: " "lambda?" "render-lambda-dom" "list" "render-to-dom" "apply" "dom-append") :bytecode (1 1 0 52 0 0 1 5 20 2 0 20 3 0 18 0 18 1 48 2 48 1 17 1 51 4 0 0 2 17 2 16 1 52 5 0 1 33 61 0 20 6 0 1 7 0 2 48 2 17 4 20 8 0 16 4 1 9 0 1 10 0 48 3 5 20 8 0 16 4 1 11 0 1 12 0 48 3 5 20 13 0 16 4 1 15 0 16 0 52 14 0 2 48 2 5 16 4 32 54 0 16 1 52 16 0 1 33 22 0 20 17 0 16 1 16 0 16 2 52 18 0 2 18 1 18 3 48 4 32 23 0 20 19 0 16 1 16 0 16 2 52 18 0 2 52 20 0 2 18 1 18 3 48 3 17 3 20 21 0 18 4 16 3 49 2 50)}) :bytecode (20 0 0 18 0 48 1 5 20 1 0 18 1 1 2 0 1 3 0 48 3 5 1 5 0 2 52 4 0 2 5 51 7 0 0 2 0 3 0 4 0 1 51 8 0 0 5 0 2 0 0 0 3 0 1 52 6 0 2 50)}) :bytecode (16 0 52 1 0 1 1 2 0 52 0 0 2 33 9 0 16 0 52 3 0 1 32 1 0 2 17 3 16 0 52 1 0 1 1 2 0 52 0 0 2 33 9 0 16 0 52 4 0 1 32 2 0 16 0 17 4 20 5 0 1 6 0 2 48 2 17 5 20 7 0 1 8 0 48 1 17 6 20 9 0 16 5 1 10 0 1 11 0 48 3 5 20 12 0 51 13 0 1 6 1 5 1 1 1 2 1 4 1 3 48 1 5 16 5 50)}) :bytecode (1 1 0 128 0 0 5 1 3 0 128 2 0 5 51 5 0 128 4 0 5 52 7 0 0 128 6 0 5 1 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 51 19 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 1 32 0 1 33 0 1 34 0 1 35 0 1 36 0 1 37 0 1 38 0 1 39 0 1 40 0 1 41 0 1 42 0 1 43 0 1 44 0 1 45 0 1 46 0 1 47 0 1 48 0 1 49 0 1 50 0 1 51 0 1 52 0 1 53 0 1 54 0 52 31 0 23 128 30 0 5 51 56 0 128 55 0 5 51 58 0 128 57 0 5 51 60 0 128 59 0 5 51 62 0 128 61 0 5 51 64 0 128 63 0 5 51 66 0 128 65 0 5 51 68 0 128 67 0 5 51 70 0 128 69 0 5 51 72 0 128 71 0 5 51 74 0 128 73 0 5 51 76 0 128 75 0 5 51 78 0 128 77 0 5 51 80 0 128 79 0 5 51 82 0 128 81 0 5 3 128 83 0 5 51 85 0 128 84 0 5 51 87 0 128 86 0 5 51 89 0 128 88 0 5 51 91 0 128 90 0 5 51 93 0 128 92 0 50)))
diff --git a/shared/static/wasm/sx/adapter-html.sx b/shared/static/wasm/sx/adapter-html.sx
index e6ffc30f..e87c2d27 100644
--- a/shared/static/wasm/sx/adapter-html.sx
+++ b/shared/static/wasm/sx/adapter-html.sx
@@ -110,10 +110,47 @@
(render-html-lake args env)
(= name "marsh")
(render-html-marsh args env)
- (or
- (= name "portal")
- (= name "error-boundary")
- (= name "promise-delayed"))
+ (= name "error-boundary")
+ (let
+ ((has-fallback (> (len args) 1)))
+ (let
+ ((body-exprs (if has-fallback (rest args) args))
+ (fallback-expr (if has-fallback (first args) nil)))
+ (str
+ "
"
+ (try-catch
+ (fn
+ ()
+ (join
+ ""
+ (map (fn (x) (render-to-html x env)) body-exprs)))
+ (fn
+ (err)
+ (let
+ ((safe-err (replace (replace (str err) "<" "<") ">" ">")))
+ (if
+ (and fallback-expr (not (nil? fallback-expr)))
+ (try-catch
+ (fn
+ ()
+ (render-to-html
+ (list
+ (trampoline (eval-expr fallback-expr env))
+ err
+ nil)
+ env))
+ (fn
+ (e2)
+ (str
+ "
Render error: "
+ safe-err
+ "
")))
+ (str
+ "
Render error: "
+ safe-err
+ "
")))))
+ "
")))
+ (or (= name "portal") (= name "promise-delayed"))
(join "" (map (fn (x) (render-to-html x env)) args))
(contains? HTML_TAGS name)
(render-html-element name args env)
diff --git a/shared/static/wasm/sx/adapter-html.sxbc b/shared/static/wasm/sx/adapter-html.sxbc
index 6917502e..e0c46c06 100644
--- a/shared/static/wasm/sx/adapter-html.sxbc
+++ b/shared/static/wasm/sx/adapter-html.sxbc
@@ -1,3 +1,3 @@
-(sxbc 1 "820e1f44ed6c588b"
+(sxbc 1 "3b04c1bcac7610a3"
(code
- :constants ("render-to-html" {:upvalue-count 0 :arity 2 :constants ("set-render-active!" "type-of" "nil" "=" "" "string" "escape-html" "number" "str" "boolean" "true" "false" "list" "empty?" "render-list-to-html" "symbol" "render-value-to-html" "trampoline" "eval-expr" "keyword" "keyword-name" "raw-html" "raw-html-content" "spread" "scope-emit!" "element-attrs" "spread-attrs" "thunk" "render-to-html" "thunk-expr" "thunk-env") :bytecode (20 0 0 3 48 1 5 16 0 52 1 0 1 6 1 2 0 52 3 0 2 33 7 0 5 1 4 0 32 27 1 6 1 5 0 52 3 0 2 33 11 0 5 20 6 0 16 0 49 1 32 5 1 6 1 7 0 52 3 0 2 33 10 0 5 16 0 52 8 0 1 32 240 0 6 1 9 0 52 3 0 2 33 18 0 5 16 0 33 6 0 1 10 0 32 3 0 1 11 0 32 211 0 6 1 12 0 52 3 0 2 33 28 0 5 16 0 52 13 0 1 33 6 0 1 4 0 32 9 0 20 14 0 16 0 16 1 49 2 32 172 0 6 1 15 0 52 3 0 2 33 25 0 5 20 16 0 20 17 0 20 18 0 16 0 16 1 48 2 48 1 16 1 49 2 32 136 0 6 1 19 0 52 3 0 2 33 16 0 5 20 6 0 20 20 0 16 0 48 1 49 1 32 109 0 6 1 21 0 52 3 0 2 33 10 0 5 16 0 52 22 0 1 32 88 0 6 1 23 0 52 3 0 2 33 21 0 5 1 25 0 16 0 52 26 0 1 52 24 0 2 5 1 4 0 32 56 0 6 1 27 0 52 3 0 2 33 23 0 5 20 28 0 20 29 0 16 0 48 1 20 30 0 16 0 48 1 49 2 32 22 0 5 20 16 0 20 17 0 20 18 0 16 0 16 1 48 2 48 1 16 1 49 2 50)} "render-value-to-html" {:upvalue-count 0 :arity 2 :constants ("type-of" "nil" "=" "" "string" "escape-html" "number" "str" "boolean" "true" "false" "list" "render-list-to-html" "raw-html" "raw-html-content" "spread" "scope-emit!" "element-attrs" "spread-attrs" "thunk" "render-to-html" "thunk-expr" "thunk-env") :bytecode (16 0 52 0 0 1 6 1 1 0 52 2 0 2 33 7 0 5 1 3 0 32 195 0 6 1 4 0 52 2 0 2 33 11 0 5 20 5 0 16 0 49 1 32 173 0 6 1 6 0 52 2 0 2 33 10 0 5 16 0 52 7 0 1 32 152 0 6 1 8 0 52 2 0 2 33 18 0 5 16 0 33 6 0 1 9 0 32 3 0 1 10 0 32 123 0 6 1 11 0 52 2 0 2 33 13 0 5 20 12 0 16 0 16 1 49 2 32 99 0 6 1 13 0 52 2 0 2 33 10 0 5 16 0 52 14 0 1 32 78 0 6 1 15 0 52 2 0 2 33 21 0 5 1 17 0 16 0 52 18 0 1 52 16 0 2 5 1 3 0 32 46 0 6 1 19 0 52 2 0 2 33 23 0 5 20 20 0 20 21 0 16 0 48 1 20 22 0 16 0 48 1 49 2 32 12 0 5 20 5 0 16 0 52 7 0 1 49 1 50)} "RENDER_HTML_FORMS" "list" "if" "when" "cond" "case" "let" "let*" "letrec" "begin" "do" "define" "defcomp" "defisland" "defmacro" "defstyle" "deftype" "defeffect" "map" "map-indexed" "filter" "for-each" "scope" "provide" "render-html-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "RENDER_HTML_FORMS") :bytecode (20 1 0 16 0 52 0 0 2 50)} "render-list-to-html" {:upvalue-count 0 :arity 2 :constants ("empty?" "" "first" "not" "=" "type-of" "symbol" "join" "map" {:upvalue-count 1 :arity 1 :constants ("render-value-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "symbol-name" "rest" "<>" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "raw!" {:upvalue-count 1 :arity 1 :constants ("str" "trampoline" "eval-expr") :bytecode (20 1 0 20 2 0 16 0 18 0 48 2 48 1 52 0 0 1 50)} "lake" "render-html-lake" "marsh" "render-html-marsh" "portal" "error-boundary" "promise-delayed" "contains?" "HTML_TAGS" "render-html-element" "starts-with?" "~" "env-has?" "island?" "env-get" "render-html-island" "component?" "render-html-component" "macro?" "render-to-html" "expand-macro" "str" "" "render-html-form?" "dispatch-html-form" "render-value-to-html" "trampoline" "eval-expr") :bytecode (16 0 52 0 0 1 33 6 0 1 1 0 32 14 2 16 0 52 2 0 1 17 2 16 2 52 5 0 1 1 6 0 52 4 0 2 52 3 0 1 33 21 0 1 1 0 51 9 0 1 1 16 0 52 8 0 2 52 7 0 2 32 221 1 20 10 0 16 2 48 1 17 3 16 0 52 11 0 1 17 4 16 3 1 12 0 52 4 0 2 33 21 0 1 1 0 51 13 0 1 1 16 4 52 8 0 2 52 7 0 2 32 171 1 16 3 1 14 0 52 4 0 2 33 21 0 1 1 0 51 15 0 1 1 16 4 52 8 0 2 52 7 0 2 32 138 1 16 3 1 16 0 52 4 0 2 33 12 0 20 17 0 16 4 16 1 49 2 32 114 1 16 3 1 18 0 52 4 0 2 33 12 0 20 19 0 16 4 16 1 49 2 32 90 1 16 3 1 20 0 52 4 0 2 6 34 24 0 5 16 3 1 21 0 52 4 0 2 6 34 10 0 5 16 3 1 22 0 52 4 0 2 33 21 0 1 1 0 51 13 0 1 1 16 4 52 8 0 2 52 7 0 2 32 29 1 20 24 0 16 3 52 23 0 2 33 14 0 20 25 0 16 3 16 4 16 1 49 3 32 3 1 16 3 1 27 0 52 26 0 2 6 33 28 0 5 20 28 0 16 1 16 3 48 2 6 33 14 0 5 20 30 0 16 1 16 3 48 2 52 29 0 1 33 21 0 20 31 0 20 30 0 16 1 16 3 48 2 16 4 16 1 49 3 32 194 0 16 3 1 27 0 52 26 0 2 33 79 0 20 30 0 16 1 16 3 48 2 17 5 16 5 52 32 0 1 33 14 0 20 33 0 16 5 16 4 16 1 49 3 32 42 0 16 5 52 34 0 1 33 21 0 20 35 0 20 36 0 16 5 16 4 16 1 48 3 16 1 49 2 32 12 0 1 38 0 16 3 1 39 0 52 37 0 3 32 103 0 20 40 0 16 3 48 1 33 14 0 20 41 0 16 3 16 0 16 1 49 3 32 79 0 20 28 0 16 1 16 3 48 2 6 33 14 0 5 20 30 0 16 1 16 3 48 2 52 34 0 1 33 28 0 20 35 0 20 36 0 20 30 0 16 1 16 3 48 2 16 4 16 1 48 3 16 1 49 2 32 21 0 20 42 0 20 43 0 20 44 0 16 0 16 1 48 2 48 1 16 1 49 2 50)} "dispatch-html-form" {:upvalue-count 0 :arity 3 :constants ("=" "if" "trampoline" "eval-expr" "nth" 1 "render-to-html" 2 ">" "len" 3 "" "when" "not" "join" "map" {:upvalue-count 2 :arity 1 :constants ("render-to-html" "nth") :bytecode (20 0 0 18 0 16 0 52 1 0 2 18 1 49 2 50)} "range" "cond" "eval-cond" "rest" "case" "letrec" "slice" "env-extend" "for-each" {:upvalue-count 1 :arity 1 :constants ("=" "type-of" "first" "symbol" "symbol-name" "str" "env-bind!") :bytecode (16 0 52 2 0 1 52 1 0 1 1 3 0 52 0 0 2 33 14 0 20 4 0 16 0 52 2 0 1 48 1 32 10 0 16 0 52 2 0 1 52 5 0 1 17 1 20 6 0 18 0 16 1 2 49 3 50)} {:upvalue-count 1 :arity 1 :constants ("=" "type-of" "first" "symbol" "symbol-name" "str" "env-set!" "trampoline" "eval-expr" "nth" 1) :bytecode (16 0 52 2 0 1 52 1 0 1 1 3 0 52 0 0 2 33 14 0 20 4 0 16 0 52 2 0 1 48 1 32 10 0 16 0 52 2 0 1 52 5 0 1 17 1 20 6 0 18 0 16 1 20 7 0 20 8 0 16 0 1 10 0 52 9 0 2 18 0 48 2 48 1 49 3 50)} {:upvalue-count 1 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 49 1 50)} "init" "last" "let" "let*" "process-bindings" "begin" "do" "definition-form?" {:upvalue-count 2 :arity 1 :constants ("lambda?" "render-lambda-html" "list" "render-to-html" "apply") :bytecode (18 0 52 0 0 1 33 18 0 20 1 0 18 0 16 0 52 2 0 1 18 1 49 3 32 19 0 20 3 0 18 0 16 0 52 2 0 1 52 4 0 2 18 1 49 2 50)} "map-indexed" {:upvalue-count 2 :arity 2 :constants ("lambda?" "render-lambda-html" "list" "render-to-html" "apply") :bytecode (18 0 52 0 0 1 33 20 0 20 1 0 18 0 16 0 16 1 52 2 0 2 18 1 49 3 32 21 0 20 3 0 18 0 16 0 16 1 52 2 0 2 52 4 0 2 18 1 49 2 50)} "filter" "scope" ">=" "type-of" "first" "keyword" "keyword-name" "value" "scope-push!" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "scope-pop!" "provide" "-" "+" "render-value-to-html") :bytecode (16 0 1 1 0 52 0 0 2 33 88 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 17 3 16 3 33 19 0 20 6 0 16 1 1 7 0 52 4 0 2 16 2 49 2 32 38 0 16 1 52 9 0 1 1 10 0 52 8 0 2 33 19 0 20 6 0 16 1 1 10 0 52 4 0 2 16 2 49 2 32 3 0 1 11 0 32 227 4 16 0 1 12 0 52 0 0 2 33 103 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 52 13 0 1 33 6 0 1 11 0 32 66 0 16 1 52 9 0 1 1 10 0 52 0 0 2 33 19 0 20 6 0 16 1 1 7 0 52 4 0 2 16 2 49 2 32 31 0 1 11 0 51 16 0 1 1 1 2 1 7 0 16 1 52 9 0 1 52 17 0 2 52 15 0 2 52 14 0 2 32 112 4 16 0 1 18 0 52 0 0 2 33 38 0 20 19 0 16 1 52 20 0 1 16 2 48 2 17 3 16 3 33 12 0 20 6 0 16 3 16 2 49 2 32 3 0 1 11 0 32 62 4 16 0 1 21 0 52 0 0 2 33 24 0 20 6 0 20 2 0 20 3 0 16 1 16 2 48 2 48 1 16 2 49 2 32 26 4 16 0 1 22 0 52 0 0 2 33 107 0 16 1 1 5 0 52 4 0 2 17 3 16 1 1 7 0 52 23 0 2 17 4 20 24 0 16 2 48 1 17 5 51 26 0 1 5 16 3 52 25 0 2 5 51 27 0 1 5 16 3 52 25 0 2 5 16 4 52 9 0 1 1 5 0 52 8 0 2 33 18 0 51 28 0 1 5 16 4 52 29 0 1 52 25 0 2 32 1 0 2 5 20 6 0 16 4 52 30 0 1 16 5 49 2 32 163 3 16 0 1 31 0 52 0 0 2 6 34 10 0 5 16 0 1 32 0 52 0 0 2 33 87 0 20 33 0 16 1 1 5 0 52 4 0 2 16 2 48 2 17 3 16 1 52 9 0 1 1 10 0 52 0 0 2 33 19 0 20 6 0 16 1 1 7 0 52 4 0 2 16 3 49 2 32 31 0 1 11 0 51 16 0 1 1 1 3 1 7 0 16 1 52 9 0 1 52 17 0 2 52 15 0 2 52 14 0 2 32 50 3 16 0 1 34 0 52 0 0 2 6 34 10 0 5 16 0 1 35 0 52 0 0 2 33 69 0 16 1 52 9 0 1 1 7 0 52 0 0 2 33 19 0 20 6 0 16 1 1 5 0 52 4 0 2 16 2 49 2 32 31 0 1 11 0 51 16 0 1 1 1 2 1 5 0 16 1 52 9 0 1 52 17 0 2 52 15 0 2 52 14 0 2 32 211 2 20 36 0 16 0 48 1 33 21 0 20 2 0 20 3 0 16 1 16 2 48 2 48 1 5 1 11 0 32 180 2 16 0 1 15 0 52 0 0 2 33 69 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 17 3 20 2 0 20 3 0 16 1 1 7 0 52 4 0 2 16 2 48 2 48 1 17 4 1 11 0 51 37 0 1 3 1 2 16 4 52 15 0 2 52 14 0 2 32 99 2 16 0 1 38 0 52 0 0 2 33 69 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 17 3 20 2 0 20 3 0 16 1 1 7 0 52 4 0 2 16 2 48 2 48 1 17 4 1 11 0 51 39 0 1 3 1 2 16 4 52 38 0 2 52 14 0 2 32 18 2 16 0 1 40 0 52 0 0 2 33 24 0 20 6 0 20 2 0 20 3 0 16 1 16 2 48 2 48 1 16 2 49 2 32 238 1 16 0 1 25 0 52 0 0 2 33 69 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 17 3 20 2 0 20 3 0 16 1 1 7 0 52 4 0 2 16 2 48 2 48 1 17 4 1 11 0 51 37 0 1 3 1 2 16 4 52 15 0 2 52 14 0 2 32 157 1 16 0 1 41 0 52 0 0 2 33 217 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 17 3 16 1 1 7 0 52 23 0 2 17 4 2 17 5 2 17 6 16 4 52 9 0 1 1 7 0 52 42 0 2 6 33 41 0 5 16 4 52 44 0 1 52 43 0 1 1 45 0 52 0 0 2 6 33 19 0 5 20 46 0 16 4 52 44 0 1 48 1 1 47 0 52 0 0 2 33 38 0 20 2 0 20 3 0 16 4 1 5 0 52 4 0 2 16 2 48 2 48 1 17 5 5 16 4 1 7 0 52 23 0 2 17 6 32 4 0 16 4 17 6 5 16 3 16 5 52 48 0 2 5 16 6 52 9 0 1 1 5 0 52 0 0 2 33 16 0 20 6 0 16 6 52 44 0 1 16 2 48 2 32 18 0 1 11 0 51 49 0 1 2 16 6 52 15 0 2 52 14 0 2 17 7 16 3 52 50 0 1 5 16 7 32 184 0 16 0 1 51 0 52 0 0 2 33 151 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 17 3 20 2 0 20 3 0 16 1 1 7 0 52 4 0 2 16 2 48 2 48 1 17 4 1 10 0 17 5 16 1 52 9 0 1 1 10 0 52 52 0 2 17 6 16 3 16 4 52 48 0 2 5 16 6 1 5 0 52 0 0 2 33 18 0 20 6 0 16 1 16 5 52 4 0 2 16 2 48 2 32 32 0 1 11 0 51 16 0 1 1 1 2 16 5 16 5 16 6 52 53 0 2 52 17 0 2 52 15 0 2 52 14 0 2 17 7 16 3 52 50 0 1 5 16 7 32 21 0 20 54 0 20 2 0 20 3 0 16 1 16 2 48 2 48 1 16 2 49 2 50)} "render-lambda-html" {:upvalue-count 0 :arity 3 :constants ("env-merge" "lambda-closure" "for-each-indexed" {:upvalue-count 2 :arity 2 :constants ("env-bind!" "nth") :bytecode (20 0 0 18 0 16 1 18 1 16 0 52 1 0 2 49 3 50)} "lambda-params" "render-to-html" "lambda-body") :bytecode (20 0 0 16 0 52 1 0 1 16 2 48 2 17 3 51 3 0 1 3 1 1 16 0 52 4 0 1 52 2 0 2 5 20 5 0 16 0 52 6 0 1 16 3 49 2 50)} "render-html-component" {:upvalue-count 0 :arity 3 :constants ("dict" "list" "reduce" {:upvalue-count 4 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "trampoline" "eval-expr" "nth" "dict-set!" "keyword-name" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 154 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 78 0 20 10 0 20 11 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 12 0 2 18 1 48 2 48 1 17 3 18 2 20 14 0 16 1 48 1 16 3 52 13 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 15 0 18 3 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" 0 "skip" "env-merge" "component-closure" "for-each" {:upvalue-count 2 :arity 1 :constants ("env-bind!" "dict-has?" "dict-get") :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)} "component-params" "component-has-children?" "env-bind!" "children" "make-raw-html" "join" "" "map" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "render-to-html" "component-body") :bytecode (52 0 0 0 17 3 52 1 0 0 17 4 51 3 0 1 1 1 2 1 3 1 4 1 4 0 1 5 0 1 6 0 4 52 0 0 4 16 1 52 2 0 3 5 20 7 0 16 0 52 8 0 1 16 2 48 2 17 5 51 10 0 1 5 1 3 16 0 52 11 0 1 52 9 0 2 5 16 0 52 12 0 1 33 35 0 20 13 0 16 5 1 14 0 1 17 0 51 19 0 1 2 16 4 52 18 0 2 52 16 0 2 52 15 0 1 48 3 32 1 0 2 5 20 20 0 16 0 52 21 0 1 16 5 49 2 50)} "render-html-element" {:upvalue-count 0 :arity 3 :constants ("parse-element-args" "first" "nth" 1 "contains?" "VOID_ELEMENTS" "str" "<" "render-attrs" " />" "scope-push!" "element-attrs" "join" "" "map" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "for-each" {:upvalue-count 1 :arity 1 :constants ("merge-spread-attrs") :bytecode (20 0 0 18 0 16 0 49 2 50)} "scope-emitted" "scope-pop!" ">" "") :bytecode (20 0 0 16 1 16 2 48 2 17 3 16 3 52 1 0 1 17 4 16 3 1 3 0 52 2 0 2 17 5 20 5 0 16 0 52 4 0 2 17 6 16 6 33 22 0 1 7 0 16 0 20 8 0 16 4 48 1 1 9 0 52 6 0 4 32 83 0 1 11 0 2 52 10 0 2 5 1 13 0 51 15 0 1 2 16 5 52 14 0 2 52 12 0 2 17 7 51 17 0 1 4 1 11 0 52 18 0 1 52 16 0 2 5 1 11 0 52 19 0 1 5 1 7 0 16 0 20 8 0 16 4 48 1 1 20 0 16 7 1 21 0 16 0 1 20 0 52 6 0 8 50)} "render-html-lake" {:upvalue-count 0 :arity 2 :constants ("div" "list" "reduce" {:upvalue-count 5 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "id" "tag" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 187 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 111 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 16 3 1 14 0 52 5 0 2 33 7 0 16 4 19 2 32 20 0 16 3 1 15 0 52 5 0 2 33 7 0 16 4 19 3 32 1 0 2 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 16 0 18 4 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "data-sx-lake" "" "scope-push!" "element-attrs" "join" "map" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "for-each" {:upvalue-count 1 :arity 1 :constants ("merge-spread-attrs") :bytecode (20 0 0 18 0 16 0 49 2 50)} "scope-emitted" "scope-pop!" "str" "<" "render-attrs" ">" "") :bytecode (2 17 2 1 0 0 17 3 52 1 0 0 17 4 51 3 0 1 0 1 1 1 2 1 3 1 4 1 5 0 1 6 0 1 7 0 4 52 4 0 4 16 0 52 2 0 3 5 1 8 0 16 2 6 34 4 0 5 1 9 0 52 4 0 2 17 5 1 11 0 2 52 10 0 2 5 1 9 0 51 14 0 1 1 16 4 52 13 0 2 52 12 0 2 17 6 51 16 0 1 5 1 11 0 52 17 0 1 52 15 0 2 5 1 11 0 52 18 0 1 5 1 20 0 16 3 20 21 0 16 5 48 1 1 22 0 16 6 1 23 0 16 3 1 22 0 52 19 0 8 50)} "render-html-marsh" {:upvalue-count 0 :arity 2 :constants ("div" "list" "reduce" {:upvalue-count 5 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "id" "tag" "transform" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 203 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 127 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 16 3 1 14 0 52 5 0 2 33 7 0 16 4 19 2 32 36 0 16 3 1 15 0 52 5 0 2 33 7 0 16 4 19 3 32 17 0 16 3 1 16 0 52 5 0 2 33 4 0 2 32 1 0 2 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 17 0 18 4 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "data-sx-marsh" "" "scope-push!" "element-attrs" "join" "map" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "for-each" {:upvalue-count 1 :arity 1 :constants ("merge-spread-attrs") :bytecode (20 0 0 18 0 16 0 49 2 50)} "scope-emitted" "scope-pop!" "str" "<" "render-attrs" ">" "") :bytecode (2 17 2 1 0 0 17 3 52 1 0 0 17 4 51 3 0 1 0 1 1 1 2 1 3 1 4 1 5 0 1 6 0 1 7 0 4 52 4 0 4 16 0 52 2 0 3 5 1 8 0 16 2 6 34 4 0 5 1 9 0 52 4 0 2 17 5 1 11 0 2 52 10 0 2 5 1 9 0 51 14 0 1 1 16 4 52 13 0 2 52 12 0 2 17 6 51 16 0 1 5 1 11 0 52 17 0 1 52 15 0 2 5 1 11 0 52 18 0 1 5 1 20 0 16 3 20 21 0 16 5 48 1 1 22 0 16 6 1 23 0 16 3 1 22 0 52 19 0 8 50)} "render-html-island" {:upvalue-count 0 :arity 3 :constants ("dict" "list" "reduce" {:upvalue-count 4 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "trampoline" "eval-expr" "nth" "dict-set!" "keyword-name" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 154 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 78 0 20 10 0 20 11 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 12 0 2 18 1 48 2 48 1 17 3 18 2 20 14 0 16 1 48 1 16 3 52 13 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 15 0 18 3 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" 0 "skip" "env-merge" "component-closure" "component-name" "for-each" {:upvalue-count 2 :arity 1 :constants ("env-bind!" "dict-has?" "dict-get") :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)} "component-params" "component-has-children?" "env-bind!" "children" "make-raw-html" "join" "" "map" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "render-to-html" "component-body" "serialize-island-state" "str" "" "") :bytecode (52 0 0 0 17 3 52 1 0 0 17 4 51 3 0 1 1 1 2 1 3 1 4 1 4 0 1 5 0 1 6 0 4 52 0 0 4 16 1 52 2 0 3 5 20 7 0 16 0 52 8 0 1 16 2 48 2 17 5 16 0 52 9 0 1 17 6 51 11 0 1 5 1 3 16 0 52 12 0 1 52 10 0 2 5 16 0 52 13 0 1 33 35 0 20 14 0 16 5 1 15 0 1 18 0 51 20 0 1 2 16 4 52 19 0 2 52 17 0 2 52 16 0 1 48 3 32 1 0 2 5 20 21 0 16 0 52 22 0 1 16 5 48 2 17 7 20 23 0 16 3 48 1 17 8 1 25 0 20 26 0 16 6 48 1 1 27 0 16 8 33 20 0 1 28 0 20 26 0 16 8 48 1 1 27 0 52 24 0 3 32 3 0 1 18 0 1 29 0 16 7 1 30 0 52 24 0 7 50)} "serialize-island-state" {:upvalue-count 0 :arity 1 :constants ("empty-dict?" "sx-serialize") :bytecode (16 0 52 0 0 1 33 4 0 2 32 7 0 20 1 0 16 0 49 1 50)}) :bytecode (51 1 0 128 0 0 5 51 3 0 128 2 0 5 1 6 0 1 7 0 1 8 0 1 9 0 1 10 0 1 11 0 1 12 0 1 13 0 1 14 0 1 15 0 1 16 0 1 17 0 1 18 0 1 19 0 1 20 0 1 21 0 1 22 0 1 23 0 1 24 0 1 25 0 1 26 0 1 27 0 52 5 0 22 128 4 0 5 51 29 0 128 28 0 5 51 31 0 128 30 0 5 51 33 0 128 32 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 5 51 45 0 128 44 0 5 51 47 0 128 46 0 50)))
+ :constants ("render-to-html" {:upvalue-count 0 :arity 2 :constants ("set-render-active!" "type-of" "nil" "=" "" "string" "escape-html" "number" "str" "boolean" "true" "false" "list" "empty?" "render-list-to-html" "symbol" "render-value-to-html" "trampoline" "eval-expr" "keyword" "keyword-name" "raw-html" "raw-html-content" "spread" "scope-emit!" "element-attrs" "spread-attrs" "thunk" "render-to-html" "thunk-expr" "thunk-env") :bytecode (20 0 0 3 48 1 5 16 0 52 1 0 1 6 1 2 0 52 3 0 2 33 7 0 5 1 4 0 32 27 1 6 1 5 0 52 3 0 2 33 11 0 5 20 6 0 16 0 49 1 32 5 1 6 1 7 0 52 3 0 2 33 10 0 5 16 0 52 8 0 1 32 240 0 6 1 9 0 52 3 0 2 33 18 0 5 16 0 33 6 0 1 10 0 32 3 0 1 11 0 32 211 0 6 1 12 0 52 3 0 2 33 28 0 5 16 0 52 13 0 1 33 6 0 1 4 0 32 9 0 20 14 0 16 0 16 1 49 2 32 172 0 6 1 15 0 52 3 0 2 33 25 0 5 20 16 0 20 17 0 20 18 0 16 0 16 1 48 2 48 1 16 1 49 2 32 136 0 6 1 19 0 52 3 0 2 33 16 0 5 20 6 0 20 20 0 16 0 48 1 49 1 32 109 0 6 1 21 0 52 3 0 2 33 10 0 5 16 0 52 22 0 1 32 88 0 6 1 23 0 52 3 0 2 33 21 0 5 1 25 0 16 0 52 26 0 1 52 24 0 2 5 1 4 0 32 56 0 6 1 27 0 52 3 0 2 33 23 0 5 20 28 0 20 29 0 16 0 48 1 20 30 0 16 0 48 1 49 2 32 22 0 5 20 16 0 20 17 0 20 18 0 16 0 16 1 48 2 48 1 16 1 49 2 50)} "render-value-to-html" {:upvalue-count 0 :arity 2 :constants ("type-of" "nil" "=" "" "string" "escape-html" "number" "str" "boolean" "true" "false" "list" "render-list-to-html" "raw-html" "raw-html-content" "spread" "scope-emit!" "element-attrs" "spread-attrs" "thunk" "render-to-html" "thunk-expr" "thunk-env") :bytecode (16 0 52 0 0 1 6 1 1 0 52 2 0 2 33 7 0 5 1 3 0 32 195 0 6 1 4 0 52 2 0 2 33 11 0 5 20 5 0 16 0 49 1 32 173 0 6 1 6 0 52 2 0 2 33 10 0 5 16 0 52 7 0 1 32 152 0 6 1 8 0 52 2 0 2 33 18 0 5 16 0 33 6 0 1 9 0 32 3 0 1 10 0 32 123 0 6 1 11 0 52 2 0 2 33 13 0 5 20 12 0 16 0 16 1 49 2 32 99 0 6 1 13 0 52 2 0 2 33 10 0 5 16 0 52 14 0 1 32 78 0 6 1 15 0 52 2 0 2 33 21 0 5 1 17 0 16 0 52 18 0 1 52 16 0 2 5 1 3 0 32 46 0 6 1 19 0 52 2 0 2 33 23 0 5 20 20 0 20 21 0 16 0 48 1 20 22 0 16 0 48 1 49 2 32 12 0 5 20 5 0 16 0 52 7 0 1 49 1 50)} "RENDER_HTML_FORMS" "list" "if" "when" "cond" "case" "let" "let*" "letrec" "begin" "do" "define" "defcomp" "defisland" "defmacro" "defstyle" "deftype" "defeffect" "map" "map-indexed" "filter" "for-each" "scope" "provide" "render-html-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "RENDER_HTML_FORMS") :bytecode (20 1 0 16 0 52 0 0 2 50)} "render-list-to-html" {:upvalue-count 0 :arity 2 :constants ("empty?" "" "first" "not" "=" "type-of" "symbol" "join" "map" {:upvalue-count 1 :arity 1 :constants ("render-value-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "symbol-name" "rest" "<>" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "raw!" {:upvalue-count 1 :arity 1 :constants ("str" "trampoline" "eval-expr") :bytecode (20 1 0 20 2 0 16 0 18 0 48 2 48 1 52 0 0 1 50)} "lake" "render-html-lake" "marsh" "render-html-marsh" "error-boundary" ">" "len" 1 "str" "" "try-catch" {:upvalue-count 2 :arity 0 :constants ("join" "" "map" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)}) :bytecode (1 1 0 51 3 0 0 0 18 1 52 2 0 2 52 0 0 2 50)} {:upvalue-count 2 :arity 1 :constants ("replace" "str" "<" "<" ">" ">" "not" "nil?" "try-catch" {:upvalue-count 3 :arity 0 :constants ("render-to-html" "list" "trampoline" "eval-expr") :bytecode (20 0 0 20 2 0 20 3 0 18 0 18 1 48 2 48 1 18 2 2 52 1 0 3 18 1 49 2 50)} {:upvalue-count 1 :arity 1 :constants ("str" "
Render error: " "
") :bytecode (1 1 0 18 0 1 2 0 52 0 0 3 50)} "
Render error: " "
") :bytecode (16 0 52 1 0 1 1 2 0 1 3 0 52 0 0 3 1 4 0 1 5 0 52 0 0 3 17 1 18 0 6 33 11 0 5 18 0 52 7 0 1 52 6 0 1 33 21 0 51 9 0 0 0 0 1 1 0 51 10 0 1 1 52 8 0 2 32 12 0 1 11 0 16 1 1 12 0 52 1 0 3 50)} "
" "portal" "promise-delayed" "contains?" "HTML_TAGS" "render-html-element" "starts-with?" "~" "env-has?" "island?" "env-get" "render-html-island" "component?" "render-html-component" "macro?" "render-to-html" "expand-macro" "" "render-html-form?" "dispatch-html-form" "render-value-to-html" "trampoline" "eval-expr") :bytecode (16 0 52 0 0 1 33 6 0 1 1 0 32 93 2 16 0 52 2 0 1 17 2 16 2 52 5 0 1 1 6 0 52 4 0 2 52 3 0 1 33 21 0 1 1 0 51 9 0 1 1 16 0 52 8 0 2 52 7 0 2 32 44 2 20 10 0 16 2 48 1 17 3 16 0 52 11 0 1 17 4 16 3 1 12 0 52 4 0 2 33 21 0 1 1 0 51 13 0 1 1 16 4 52 8 0 2 52 7 0 2 32 250 1 16 3 1 14 0 52 4 0 2 33 21 0 1 1 0 51 15 0 1 1 16 4 52 8 0 2 52 7 0 2 32 217 1 16 3 1 16 0 52 4 0 2 33 12 0 20 17 0 16 4 16 1 49 2 32 193 1 16 3 1 18 0 52 4 0 2 33 12 0 20 19 0 16 4 16 1 49 2 32 169 1 16 3 1 20 0 52 4 0 2 33 81 0 16 4 52 22 0 1 1 23 0 52 21 0 2 17 5 16 5 33 9 0 16 4 52 11 0 1 32 2 0 16 4 17 6 16 5 33 9 0 16 4 52 2 0 1 32 1 0 2 17 7 1 25 0 51 27 0 1 1 1 6 51 28 0 1 7 1 1 52 26 0 2 1 29 0 52 24 0 3 32 76 1 16 3 1 30 0 52 4 0 2 6 34 10 0 5 16 3 1 31 0 52 4 0 2 33 21 0 1 1 0 51 13 0 1 1 16 4 52 8 0 2 52 7 0 2 32 29 1 20 33 0 16 3 52 32 0 2 33 14 0 20 34 0 16 3 16 4 16 1 49 3 32 3 1 16 3 1 36 0 52 35 0 2 6 33 28 0 5 20 37 0 16 1 16 3 48 2 6 33 14 0 5 20 39 0 16 1 16 3 48 2 52 38 0 1 33 21 0 20 40 0 20 39 0 16 1 16 3 48 2 16 4 16 1 49 3 32 194 0 16 3 1 36 0 52 35 0 2 33 79 0 20 39 0 16 1 16 3 48 2 17 5 16 5 52 41 0 1 33 14 0 20 42 0 16 5 16 4 16 1 49 3 32 42 0 16 5 52 43 0 1 33 21 0 20 44 0 20 45 0 16 5 16 4 16 1 48 3 16 1 49 2 32 12 0 1 46 0 16 3 1 47 0 52 24 0 3 32 103 0 20 48 0 16 3 48 1 33 14 0 20 49 0 16 3 16 0 16 1 49 3 32 79 0 20 37 0 16 1 16 3 48 2 6 33 14 0 5 20 39 0 16 1 16 3 48 2 52 43 0 1 33 28 0 20 44 0 20 45 0 20 39 0 16 1 16 3 48 2 16 4 16 1 48 3 16 1 49 2 32 21 0 20 50 0 20 51 0 20 52 0 16 0 16 1 48 2 48 1 16 1 49 2 50)} "dispatch-html-form" {:upvalue-count 0 :arity 3 :constants ("=" "if" "trampoline" "eval-expr" "nth" 1 "render-to-html" 2 ">" "len" 3 "" "when" "not" "join" "map" {:upvalue-count 2 :arity 1 :constants ("render-to-html" "nth") :bytecode (20 0 0 18 0 16 0 52 1 0 2 18 1 49 2 50)} "range" "cond" "eval-cond" "rest" "case" "letrec" "slice" "env-extend" "for-each" {:upvalue-count 1 :arity 1 :constants ("=" "type-of" "first" "symbol" "symbol-name" "str" "env-bind!") :bytecode (16 0 52 2 0 1 52 1 0 1 1 3 0 52 0 0 2 33 14 0 20 4 0 16 0 52 2 0 1 48 1 32 10 0 16 0 52 2 0 1 52 5 0 1 17 1 20 6 0 18 0 16 1 2 49 3 50)} {:upvalue-count 1 :arity 1 :constants ("=" "type-of" "first" "symbol" "symbol-name" "str" "env-set!" "trampoline" "eval-expr" "nth" 1) :bytecode (16 0 52 2 0 1 52 1 0 1 1 3 0 52 0 0 2 33 14 0 20 4 0 16 0 52 2 0 1 48 1 32 10 0 16 0 52 2 0 1 52 5 0 1 17 1 20 6 0 18 0 16 1 20 7 0 20 8 0 16 0 1 10 0 52 9 0 2 18 0 48 2 48 1 49 3 50)} {:upvalue-count 1 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 49 1 50)} "init" "last" "let" "let*" "process-bindings" "begin" "do" "definition-form?" {:upvalue-count 2 :arity 1 :constants ("lambda?" "render-lambda-html" "list" "render-to-html" "apply") :bytecode (18 0 52 0 0 1 33 18 0 20 1 0 18 0 16 0 52 2 0 1 18 1 49 3 32 19 0 20 3 0 18 0 16 0 52 2 0 1 52 4 0 2 18 1 49 2 50)} "map-indexed" {:upvalue-count 2 :arity 2 :constants ("lambda?" "render-lambda-html" "list" "render-to-html" "apply") :bytecode (18 0 52 0 0 1 33 20 0 20 1 0 18 0 16 0 16 1 52 2 0 2 18 1 49 3 32 21 0 20 3 0 18 0 16 0 16 1 52 2 0 2 52 4 0 2 18 1 49 2 50)} "filter" "scope" ">=" "type-of" "first" "keyword" "keyword-name" "value" "scope-push!" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "scope-pop!" "provide" "-" "+" "render-value-to-html") :bytecode (16 0 1 1 0 52 0 0 2 33 88 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 17 3 16 3 33 19 0 20 6 0 16 1 1 7 0 52 4 0 2 16 2 49 2 32 38 0 16 1 52 9 0 1 1 10 0 52 8 0 2 33 19 0 20 6 0 16 1 1 10 0 52 4 0 2 16 2 49 2 32 3 0 1 11 0 32 227 4 16 0 1 12 0 52 0 0 2 33 103 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 52 13 0 1 33 6 0 1 11 0 32 66 0 16 1 52 9 0 1 1 10 0 52 0 0 2 33 19 0 20 6 0 16 1 1 7 0 52 4 0 2 16 2 49 2 32 31 0 1 11 0 51 16 0 1 1 1 2 1 7 0 16 1 52 9 0 1 52 17 0 2 52 15 0 2 52 14 0 2 32 112 4 16 0 1 18 0 52 0 0 2 33 38 0 20 19 0 16 1 52 20 0 1 16 2 48 2 17 3 16 3 33 12 0 20 6 0 16 3 16 2 49 2 32 3 0 1 11 0 32 62 4 16 0 1 21 0 52 0 0 2 33 24 0 20 6 0 20 2 0 20 3 0 16 1 16 2 48 2 48 1 16 2 49 2 32 26 4 16 0 1 22 0 52 0 0 2 33 107 0 16 1 1 5 0 52 4 0 2 17 3 16 1 1 7 0 52 23 0 2 17 4 20 24 0 16 2 48 1 17 5 51 26 0 1 5 16 3 52 25 0 2 5 51 27 0 1 5 16 3 52 25 0 2 5 16 4 52 9 0 1 1 5 0 52 8 0 2 33 18 0 51 28 0 1 5 16 4 52 29 0 1 52 25 0 2 32 1 0 2 5 20 6 0 16 4 52 30 0 1 16 5 49 2 32 163 3 16 0 1 31 0 52 0 0 2 6 34 10 0 5 16 0 1 32 0 52 0 0 2 33 87 0 20 33 0 16 1 1 5 0 52 4 0 2 16 2 48 2 17 3 16 1 52 9 0 1 1 10 0 52 0 0 2 33 19 0 20 6 0 16 1 1 7 0 52 4 0 2 16 3 49 2 32 31 0 1 11 0 51 16 0 1 1 1 3 1 7 0 16 1 52 9 0 1 52 17 0 2 52 15 0 2 52 14 0 2 32 50 3 16 0 1 34 0 52 0 0 2 6 34 10 0 5 16 0 1 35 0 52 0 0 2 33 69 0 16 1 52 9 0 1 1 7 0 52 0 0 2 33 19 0 20 6 0 16 1 1 5 0 52 4 0 2 16 2 49 2 32 31 0 1 11 0 51 16 0 1 1 1 2 1 5 0 16 1 52 9 0 1 52 17 0 2 52 15 0 2 52 14 0 2 32 211 2 20 36 0 16 0 48 1 33 21 0 20 2 0 20 3 0 16 1 16 2 48 2 48 1 5 1 11 0 32 180 2 16 0 1 15 0 52 0 0 2 33 69 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 17 3 20 2 0 20 3 0 16 1 1 7 0 52 4 0 2 16 2 48 2 48 1 17 4 1 11 0 51 37 0 1 3 1 2 16 4 52 15 0 2 52 14 0 2 32 99 2 16 0 1 38 0 52 0 0 2 33 69 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 17 3 20 2 0 20 3 0 16 1 1 7 0 52 4 0 2 16 2 48 2 48 1 17 4 1 11 0 51 39 0 1 3 1 2 16 4 52 38 0 2 52 14 0 2 32 18 2 16 0 1 40 0 52 0 0 2 33 24 0 20 6 0 20 2 0 20 3 0 16 1 16 2 48 2 48 1 16 2 49 2 32 238 1 16 0 1 25 0 52 0 0 2 33 69 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 17 3 20 2 0 20 3 0 16 1 1 7 0 52 4 0 2 16 2 48 2 48 1 17 4 1 11 0 51 37 0 1 3 1 2 16 4 52 15 0 2 52 14 0 2 32 157 1 16 0 1 41 0 52 0 0 2 33 217 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 17 3 16 1 1 7 0 52 23 0 2 17 4 2 17 5 2 17 6 16 4 52 9 0 1 1 7 0 52 42 0 2 6 33 41 0 5 16 4 52 44 0 1 52 43 0 1 1 45 0 52 0 0 2 6 33 19 0 5 20 46 0 16 4 52 44 0 1 48 1 1 47 0 52 0 0 2 33 38 0 20 2 0 20 3 0 16 4 1 5 0 52 4 0 2 16 2 48 2 48 1 17 5 5 16 4 1 7 0 52 23 0 2 17 6 32 4 0 16 4 17 6 5 16 3 16 5 52 48 0 2 5 16 6 52 9 0 1 1 5 0 52 0 0 2 33 16 0 20 6 0 16 6 52 44 0 1 16 2 48 2 32 18 0 1 11 0 51 49 0 1 2 16 6 52 15 0 2 52 14 0 2 17 7 16 3 52 50 0 1 5 16 7 32 184 0 16 0 1 51 0 52 0 0 2 33 151 0 20 2 0 20 3 0 16 1 1 5 0 52 4 0 2 16 2 48 2 48 1 17 3 20 2 0 20 3 0 16 1 1 7 0 52 4 0 2 16 2 48 2 48 1 17 4 1 10 0 17 5 16 1 52 9 0 1 1 10 0 52 52 0 2 17 6 16 3 16 4 52 48 0 2 5 16 6 1 5 0 52 0 0 2 33 18 0 20 6 0 16 1 16 5 52 4 0 2 16 2 48 2 32 32 0 1 11 0 51 16 0 1 1 1 2 16 5 16 5 16 6 52 53 0 2 52 17 0 2 52 15 0 2 52 14 0 2 17 7 16 3 52 50 0 1 5 16 7 32 21 0 20 54 0 20 2 0 20 3 0 16 1 16 2 48 2 48 1 16 2 49 2 50)} "render-lambda-html" {:upvalue-count 0 :arity 3 :constants ("env-merge" "lambda-closure" "for-each-indexed" {:upvalue-count 2 :arity 2 :constants ("env-bind!" "nth") :bytecode (20 0 0 18 0 16 1 18 1 16 0 52 1 0 2 49 3 50)} "lambda-params" "render-to-html" "lambda-body") :bytecode (20 0 0 16 0 52 1 0 1 16 2 48 2 17 3 51 3 0 1 3 1 1 16 0 52 4 0 1 52 2 0 2 5 20 5 0 16 0 52 6 0 1 16 3 49 2 50)} "render-html-component" {:upvalue-count 0 :arity 3 :constants ("dict" "list" "reduce" {:upvalue-count 4 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "trampoline" "eval-expr" "nth" "dict-set!" "keyword-name" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 154 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 78 0 20 10 0 20 11 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 12 0 2 18 1 48 2 48 1 17 3 18 2 20 14 0 16 1 48 1 16 3 52 13 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 15 0 18 3 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" 0 "skip" "env-merge" "component-closure" "for-each" {:upvalue-count 2 :arity 1 :constants ("env-bind!" "dict-has?" "dict-get") :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)} "component-params" "component-has-children?" "env-bind!" "children" "make-raw-html" "join" "" "map" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "render-to-html" "component-body") :bytecode (52 0 0 0 17 3 52 1 0 0 17 4 51 3 0 1 1 1 2 1 3 1 4 1 4 0 1 5 0 1 6 0 4 52 0 0 4 16 1 52 2 0 3 5 20 7 0 16 0 52 8 0 1 16 2 48 2 17 5 51 10 0 1 5 1 3 16 0 52 11 0 1 52 9 0 2 5 16 0 52 12 0 1 33 35 0 20 13 0 16 5 1 14 0 1 17 0 51 19 0 1 2 16 4 52 18 0 2 52 16 0 2 52 15 0 1 48 3 32 1 0 2 5 20 20 0 16 0 52 21 0 1 16 5 49 2 50)} "render-html-element" {:upvalue-count 0 :arity 3 :constants ("parse-element-args" "first" "nth" 1 "contains?" "VOID_ELEMENTS" "str" "<" "render-attrs" " />" "scope-push!" "element-attrs" "join" "" "map" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "for-each" {:upvalue-count 1 :arity 1 :constants ("merge-spread-attrs") :bytecode (20 0 0 18 0 16 0 49 2 50)} "scope-emitted" "scope-pop!" ">" "") :bytecode (20 0 0 16 1 16 2 48 2 17 3 16 3 52 1 0 1 17 4 16 3 1 3 0 52 2 0 2 17 5 20 5 0 16 0 52 4 0 2 17 6 16 6 33 22 0 1 7 0 16 0 20 8 0 16 4 48 1 1 9 0 52 6 0 4 32 83 0 1 11 0 2 52 10 0 2 5 1 13 0 51 15 0 1 2 16 5 52 14 0 2 52 12 0 2 17 7 51 17 0 1 4 1 11 0 52 18 0 1 52 16 0 2 5 1 11 0 52 19 0 1 5 1 7 0 16 0 20 8 0 16 4 48 1 1 20 0 16 7 1 21 0 16 0 1 20 0 52 6 0 8 50)} "render-html-lake" {:upvalue-count 0 :arity 2 :constants ("div" "list" "reduce" {:upvalue-count 5 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "id" "tag" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 187 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 111 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 16 3 1 14 0 52 5 0 2 33 7 0 16 4 19 2 32 20 0 16 3 1 15 0 52 5 0 2 33 7 0 16 4 19 3 32 1 0 2 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 16 0 18 4 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "data-sx-lake" "" "scope-push!" "element-attrs" "join" "map" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "for-each" {:upvalue-count 1 :arity 1 :constants ("merge-spread-attrs") :bytecode (20 0 0 18 0 16 0 49 2 50)} "scope-emitted" "scope-pop!" "str" "<" "render-attrs" ">" "") :bytecode (2 17 2 1 0 0 17 3 52 1 0 0 17 4 51 3 0 1 0 1 1 1 2 1 3 1 4 1 5 0 1 6 0 1 7 0 4 52 4 0 4 16 0 52 2 0 3 5 1 8 0 16 2 6 34 4 0 5 1 9 0 52 4 0 2 17 5 1 11 0 2 52 10 0 2 5 1 9 0 51 14 0 1 1 16 4 52 13 0 2 52 12 0 2 17 6 51 16 0 1 5 1 11 0 52 17 0 1 52 15 0 2 5 1 11 0 52 18 0 1 5 1 20 0 16 3 20 21 0 16 5 48 1 1 22 0 16 6 1 23 0 16 3 1 22 0 52 19 0 8 50)} "render-html-marsh" {:upvalue-count 0 :arity 2 :constants ("div" "list" "reduce" {:upvalue-count 5 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "id" "tag" "transform" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 203 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 127 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 16 3 1 14 0 52 5 0 2 33 7 0 16 4 19 2 32 36 0 16 3 1 15 0 52 5 0 2 33 7 0 16 4 19 3 32 17 0 16 3 1 16 0 52 5 0 2 33 4 0 2 32 1 0 2 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 17 0 18 4 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "data-sx-marsh" "" "scope-push!" "element-attrs" "join" "map" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "for-each" {:upvalue-count 1 :arity 1 :constants ("merge-spread-attrs") :bytecode (20 0 0 18 0 16 0 49 2 50)} "scope-emitted" "scope-pop!" "str" "<" "render-attrs" ">" "") :bytecode (2 17 2 1 0 0 17 3 52 1 0 0 17 4 51 3 0 1 0 1 1 1 2 1 3 1 4 1 5 0 1 6 0 1 7 0 4 52 4 0 4 16 0 52 2 0 3 5 1 8 0 16 2 6 34 4 0 5 1 9 0 52 4 0 2 17 5 1 11 0 2 52 10 0 2 5 1 9 0 51 14 0 1 1 16 4 52 13 0 2 52 12 0 2 17 6 51 16 0 1 5 1 11 0 52 17 0 1 52 15 0 2 5 1 11 0 52 18 0 1 5 1 20 0 16 3 20 21 0 16 5 48 1 1 22 0 16 6 1 23 0 16 3 1 22 0 52 19 0 8 50)} "render-html-island" {:upvalue-count 0 :arity 3 :constants ("dict" "list" "reduce" {:upvalue-count 4 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "trampoline" "eval-expr" "nth" "dict-set!" "keyword-name" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 154 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 78 0 20 10 0 20 11 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 12 0 2 18 1 48 2 48 1 17 3 18 2 20 14 0 16 1 48 1 16 3 52 13 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 15 0 18 3 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" 0 "skip" "env-merge" "component-closure" "component-name" "for-each" {:upvalue-count 2 :arity 1 :constants ("env-bind!" "dict-has?" "dict-get") :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)} "component-params" "component-has-children?" "env-bind!" "children" "make-raw-html" "join" "" "map" {:upvalue-count 1 :arity 1 :constants ("render-to-html") :bytecode (20 0 0 16 0 18 0 49 2 50)} "render-to-html" "component-body" "serialize-island-state" "str" "" "") :bytecode (52 0 0 0 17 3 52 1 0 0 17 4 51 3 0 1 1 1 2 1 3 1 4 1 4 0 1 5 0 1 6 0 4 52 0 0 4 16 1 52 2 0 3 5 20 7 0 16 0 52 8 0 1 16 2 48 2 17 5 16 0 52 9 0 1 17 6 51 11 0 1 5 1 3 16 0 52 12 0 1 52 10 0 2 5 16 0 52 13 0 1 33 35 0 20 14 0 16 5 1 15 0 1 18 0 51 20 0 1 2 16 4 52 19 0 2 52 17 0 2 52 16 0 1 48 3 32 1 0 2 5 20 21 0 16 0 52 22 0 1 16 5 48 2 17 7 20 23 0 16 3 48 1 17 8 1 25 0 20 26 0 16 6 48 1 1 27 0 16 8 33 20 0 1 28 0 20 26 0 16 8 48 1 1 27 0 52 24 0 3 32 3 0 1 18 0 1 29 0 16 7 1 30 0 52 24 0 7 50)} "serialize-island-state" {:upvalue-count 0 :arity 1 :constants ("empty-dict?" "sx-serialize") :bytecode (16 0 52 0 0 1 33 4 0 2 32 7 0 20 1 0 16 0 49 1 50)}) :bytecode (51 1 0 128 0 0 5 51 3 0 128 2 0 5 1 6 0 1 7 0 1 8 0 1 9 0 1 10 0 1 11 0 1 12 0 1 13 0 1 14 0 1 15 0 1 16 0 1 17 0 1 18 0 1 19 0 1 20 0 1 21 0 1 22 0 1 23 0 1 24 0 1 25 0 1 26 0 1 27 0 52 5 0 22 128 4 0 5 51 29 0 128 28 0 5 51 31 0 128 30 0 5 51 33 0 128 32 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 5 51 45 0 128 44 0 5 51 47 0 128 46 0 50)))
diff --git a/shared/static/wasm/sx/adapter-sx.sx b/shared/static/wasm/sx/adapter-sx.sx
index 788257c7..9382231f 100644
--- a/shared/static/wasm/sx/adapter-sx.sx
+++ b/shared/static/wasm/sx/adapter-sx.sx
@@ -66,7 +66,24 @@
(= name "marsh")
(aser-call name args env)
(= name "error-boundary")
- (aser-call name args env)
+ (let
+ ((has-fallback (> (len args) 1)))
+ (let
+ ((body-exprs (if has-fallback (rest args) args))
+ (err-str nil))
+ (let
+ ((rendered (try-catch (fn () (join "" (map (fn (x) (let ((v (aser x env))) (cond (= (type-of v) "sx-expr") (sx-expr-source v) (nil? v) "" :else (serialize v)))) body-exprs))) (fn (err) (set! err-str (str err)) nil))))
+ (if
+ rendered
+ (make-sx-expr (str "(error-boundary " rendered ")"))
+ (make-sx-expr
+ (str
+ "(div :data-sx-boundary \"true\" "
+ "(div :class \"sx-render-error\" "
+ ":style \"color:red;font-size:0.875rem;padding:0.5rem;border:1px solid red;border-radius:0.25rem;margin:0.5rem 0;\" "
+ "\"Render error: "
+ (replace (replace err-str "\"" "'") "\\" "\\\\")
+ "\"))"))))))
(contains? HTML_TAGS name)
(aser-call name args env)
(or (special-form? name) (ho-form? name))
diff --git a/shared/static/wasm/sx/adapter-sx.sxbc b/shared/static/wasm/sx/adapter-sx.sxbc
index 17dbebd8..59f77473 100644
--- a/shared/static/wasm/sx/adapter-sx.sxbc
+++ b/shared/static/wasm/sx/adapter-sx.sxbc
@@ -1,3 +1,3 @@
-(sxbc 1 "12bf24a4fca1d827"
+(sxbc 1 "0ae6608c929d5217"
(code
- :constants ("render-to-sx" {:upvalue-count 0 :arity 2 :constants ("aser" "=" "type-of" "sx-expr" "sx-expr-source" "string" "serialize") :bytecode (20 0 0 16 0 16 1 48 2 17 2 16 2 52 2 0 1 1 3 0 52 1 0 2 33 10 0 20 4 0 16 2 49 1 32 27 0 16 2 52 2 0 1 1 5 0 52 1 0 2 33 5 0 16 2 32 6 0 16 2 52 6 0 1 50)} "aser" {:upvalue-count 0 :arity 2 :constants ("set-render-active!" "type-of" "number" "=" "string" "boolean" "nil" "symbol" "symbol-name" "env-has?" "env-get" "primitive?" "get-primitive" "true" "false" "error" "str" "Undefined symbol: " "keyword" "keyword-name" "list" "empty?" "aser-list" "spread" "scope-emit!" "element-attrs" "spread-attrs" "spread?") :bytecode (20 0 0 3 48 1 5 16 0 52 1 0 1 6 1 2 0 52 3 0 2 33 6 0 5 16 0 32 16 1 6 1 4 0 52 3 0 2 33 6 0 5 16 0 32 255 0 6 1 5 0 52 3 0 2 33 6 0 5 16 0 32 238 0 6 1 6 0 52 3 0 2 33 5 0 5 2 32 222 0 6 1 7 0 52 3 0 2 33 116 0 5 20 8 0 16 0 48 1 17 3 20 9 0 16 1 16 3 48 2 33 12 0 20 10 0 16 1 16 3 48 2 32 79 0 16 3 52 11 0 1 33 9 0 16 3 52 12 0 1 32 61 0 16 3 1 13 0 52 3 0 2 33 4 0 3 32 45 0 16 3 1 14 0 52 3 0 2 33 4 0 4 32 29 0 16 3 1 6 0 52 3 0 2 33 4 0 2 32 13 0 1 17 0 16 3 52 16 0 2 52 15 0 1 32 95 0 6 1 18 0 52 3 0 2 33 11 0 5 20 19 0 16 0 48 1 32 73 0 6 1 20 0 52 3 0 2 33 29 0 5 16 0 52 21 0 1 33 7 0 52 20 0 0 32 9 0 20 22 0 16 0 16 1 48 2 32 33 0 6 1 23 0 52 3 0 2 33 19 0 5 1 25 0 16 0 52 26 0 1 52 24 0 2 5 2 32 3 0 5 16 0 17 2 16 2 52 27 0 1 33 18 0 1 25 0 16 2 52 26 0 1 52 24 0 2 5 2 32 2 0 16 2 50)} "aser-list" {:upvalue-count 0 :arity 2 :constants ("first" "rest" "not" "=" "type-of" "symbol" "map" {:upvalue-count 1 :arity 1 :constants ("aser") :bytecode (20 0 0 16 0 18 0 49 2 50)} "symbol-name" "<>" "aser-fragment" "raw!" "aser-call" "starts-with?" "~" "env-has?" "env-get" "expand-components?" "macro?" "aser" "expand-macro" "component?" "island?" "component-affinity" "server" "client" "aser-expand-component" "lake" "marsh" "error-boundary" "contains?" "HTML_TAGS" "special-form?" "ho-form?" "aser-special" "trampoline" "eval-expr" {:upvalue-count 1 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 49 1 50)} "callable?" "lambda?" "apply" "call-lambda" "str" "component-name" "error" "Not callable: " "inspect") :bytecode (16 0 52 0 0 1 17 2 16 0 52 1 0 1 17 3 16 2 52 4 0 1 1 5 0 52 3 0 2 52 2 0 1 33 14 0 51 7 0 1 1 16 0 52 6 0 2 32 162 2 20 8 0 16 2 48 1 17 4 16 4 1 9 0 52 3 0 2 33 12 0 20 10 0 16 3 16 1 49 2 32 129 2 16 4 1 11 0 52 3 0 2 33 15 0 20 12 0 1 11 0 16 3 16 1 49 3 32 102 2 16 4 1 14 0 52 13 0 2 33 196 0 20 15 0 16 1 16 4 48 2 33 12 0 20 16 0 16 1 16 4 48 2 32 1 0 2 17 5 20 15 0 16 1 1 17 0 48 2 33 8 0 20 17 0 48 0 32 1 0 4 17 6 16 5 6 33 7 0 5 16 5 52 18 0 1 33 21 0 20 19 0 20 20 0 16 5 16 3 16 1 48 3 16 1 49 2 32 105 0 16 5 6 33 71 0 5 16 5 52 21 0 1 6 33 60 0 5 16 5 52 22 0 1 52 2 0 1 6 33 45 0 5 16 6 6 34 15 0 5 20 23 0 16 5 48 1 1 24 0 52 3 0 2 6 33 19 0 5 20 23 0 16 5 48 1 1 25 0 52 3 0 2 52 2 0 1 33 14 0 20 26 0 16 5 16 3 16 1 49 3 32 11 0 20 12 0 16 4 16 3 16 1 49 3 32 150 1 16 4 1 27 0 52 3 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 124 1 16 4 1 28 0 52 3 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 98 1 16 4 1 29 0 52 3 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 72 1 20 31 0 16 4 52 30 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 46 1 20 32 0 16 4 48 1 6 34 8 0 5 20 33 0 16 4 48 1 33 14 0 20 34 0 16 4 16 0 16 1 49 3 32 10 1 20 15 0 16 1 16 4 48 2 6 33 14 0 5 20 16 0 16 1 16 4 48 2 52 18 0 1 33 28 0 20 19 0 20 20 0 20 16 0 16 1 16 4 48 2 16 3 16 1 48 3 16 1 49 2 32 208 0 20 35 0 20 36 0 16 2 16 1 48 2 48 1 17 5 51 37 0 1 1 16 3 52 6 0 2 17 6 20 38 0 16 5 48 1 6 33 41 0 5 16 5 52 39 0 1 52 2 0 1 6 33 26 0 5 16 5 52 21 0 1 52 2 0 1 6 33 11 0 5 16 5 52 22 0 1 52 2 0 1 33 11 0 16 5 16 6 52 40 0 2 32 113 0 16 5 52 39 0 1 33 19 0 20 35 0 20 41 0 16 5 16 6 16 1 48 3 49 1 32 85 0 16 5 52 21 0 1 33 25 0 20 12 0 1 14 0 16 5 52 43 0 1 52 42 0 2 16 3 16 1 49 3 32 51 0 16 5 52 22 0 1 33 25 0 20 12 0 1 14 0 16 5 52 43 0 1 52 42 0 2 16 3 16 1 49 3 32 17 0 1 45 0 16 5 52 46 0 1 52 42 0 2 52 44 0 1 50)} "aser-reserialize" {:upvalue-count 0 :arity 1 :constants ("not" "=" "type-of" "list" "serialize" "empty?" "()" "first" "symbol" "symbol-name" "rest" 0 "for-each" {:upvalue-count 4 :arity 1 :constants ("inc" "=" "type-of" "string" "<" "len" "not" "contains?" " " "starts-with?" "class" "id" "sx-" "data-" "style" "href" "src" "type" "name" "value" "placeholder" "action" "method" "target" "role" "for" "on" "append!" "str" ":" "serialize" "nth" "aser-reserialize") :bytecode (18 0 33 15 0 4 19 0 5 18 1 52 0 0 1 19 1 32 116 1 16 0 52 2 0 1 1 3 0 52 1 0 2 6 33 17 1 5 18 1 52 0 0 1 18 2 52 5 0 1 52 4 0 2 6 33 252 0 5 16 0 1 8 0 52 7 0 2 52 6 0 1 6 33 234 0 5 16 0 1 10 0 52 9 0 2 6 34 220 0 5 16 0 1 11 0 52 9 0 2 6 34 206 0 5 16 0 1 12 0 52 9 0 2 6 34 192 0 5 16 0 1 13 0 52 9 0 2 6 34 178 0 5 16 0 1 14 0 52 9 0 2 6 34 164 0 5 16 0 1 15 0 52 9 0 2 6 34 150 0 5 16 0 1 16 0 52 9 0 2 6 34 136 0 5 16 0 1 17 0 52 9 0 2 6 34 122 0 5 16 0 1 18 0 52 9 0 2 6 34 108 0 5 16 0 1 19 0 52 9 0 2 6 34 94 0 5 16 0 1 20 0 52 9 0 2 6 34 80 0 5 16 0 1 21 0 52 9 0 2 6 34 66 0 5 16 0 1 22 0 52 9 0 2 6 34 52 0 5 16 0 1 23 0 52 9 0 2 6 34 38 0 5 16 0 1 24 0 52 9 0 2 6 34 24 0 5 16 0 1 25 0 52 9 0 2 6 34 10 0 5 16 0 1 26 0 52 9 0 2 33 56 0 20 27 0 18 3 1 29 0 16 0 52 28 0 2 48 2 5 20 27 0 18 3 18 2 18 1 52 0 0 1 52 31 0 2 52 30 0 1 48 2 5 3 19 0 5 18 1 52 0 0 1 19 1 32 23 0 20 27 0 18 3 20 32 0 16 0 48 1 48 2 5 18 1 52 0 0 1 19 1 50)} "str" "(" "join" " " ")") :bytecode (16 0 52 2 0 1 1 3 0 52 1 0 2 52 0 0 1 33 9 0 16 0 52 4 0 1 32 122 0 16 0 52 5 0 1 33 6 0 1 6 0 32 107 0 16 0 52 7 0 1 17 1 16 1 52 2 0 1 1 8 0 52 1 0 2 52 0 0 1 33 9 0 16 0 52 4 0 1 32 70 0 20 9 0 16 1 48 1 17 2 16 2 52 3 0 1 17 3 16 0 52 10 0 1 17 4 4 17 5 1 11 0 17 6 51 13 0 1 5 1 6 1 4 1 3 16 4 52 12 0 2 5 1 15 0 1 17 0 16 3 52 16 0 2 1 18 0 52 14 0 3 50)} "aser-fragment" {:upvalue-count 0 :arity 2 :constants ("list" "for-each" {:upvalue-count 2 :arity 1 :constants ("aser" "nil?" "=" "type-of" "sx-expr" "append!" "sx-expr-source" "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("not" "nil?" "=" "type-of" "sx-expr" "append!" "sx-expr-source" "aser-reserialize") :bytecode (16 0 52 1 0 1 52 0 0 1 33 50 0 16 0 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 0 20 6 0 16 0 48 1 49 2 32 14 0 20 5 0 18 0 20 7 0 16 0 48 1 49 2 32 1 0 2 50)} "serialize") :bytecode (20 0 0 16 0 18 0 48 2 17 1 16 1 52 1 0 1 33 4 0 2 32 76 0 16 1 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 1 20 6 0 16 1 48 1 49 2 32 43 0 16 1 52 3 0 1 1 7 0 52 2 0 2 33 14 0 51 9 0 0 1 16 1 52 8 0 2 32 13 0 20 5 0 18 1 16 1 52 10 0 1 49 2 50)} "empty?" "" "=" "len" 1 "make-sx-expr" "first" "str" "(<> " "join" " " ")") :bytecode (52 0 0 0 17 2 51 2 0 1 1 1 2 16 0 52 1 0 2 5 16 2 52 3 0 1 33 6 0 1 4 0 32 54 0 16 2 52 6 0 1 1 7 0 52 5 0 2 33 14 0 20 8 0 16 2 52 9 0 1 49 1 32 24 0 20 8 0 1 11 0 1 13 0 16 2 52 12 0 2 1 14 0 52 10 0 3 49 1 50)} "aser-call" {:upvalue-count 0 :arity 3 :constants ("list" 0 "scope-push!" "element-attrs" "for-each" {:upvalue-count 6 :arity 1 :constants ("inc" "=" "type-of" "keyword" "<" "len" "aser" "nth" "not" "nil?" "append!" "str" ":" "keyword-name" "sx-expr" "sx-expr-source" "serialize" "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("not" "nil?" "=" "type-of" "sx-expr" "append!" "sx-expr-source" "serialize") :bytecode (16 0 52 1 0 1 52 0 0 1 33 49 0 16 0 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 0 20 6 0 16 0 48 1 49 2 32 13 0 20 5 0 18 0 16 0 52 7 0 1 49 2 32 1 0 2 50)}) :bytecode (18 0 33 15 0 4 19 0 5 18 1 52 0 0 1 19 1 32 16 1 16 0 52 2 0 1 1 3 0 52 1 0 2 6 33 17 0 5 18 1 52 0 0 1 18 2 52 5 0 1 52 4 0 2 33 122 0 20 6 0 18 2 18 1 52 0 0 1 52 7 0 2 18 3 48 2 17 1 16 1 52 9 0 1 52 8 0 1 33 71 0 20 10 0 18 4 1 12 0 20 13 0 16 0 48 1 52 11 0 2 48 2 5 16 1 52 2 0 1 1 14 0 52 1 0 2 33 17 0 20 10 0 18 4 20 15 0 16 1 48 1 48 2 32 13 0 20 10 0 18 4 16 1 52 16 0 1 48 2 32 1 0 2 5 3 19 0 5 18 1 52 0 0 1 19 1 32 113 0 20 6 0 16 0 18 3 48 2 17 1 16 1 52 9 0 1 52 8 0 1 33 79 0 16 1 52 2 0 1 1 14 0 52 1 0 2 33 17 0 20 10 0 18 5 20 15 0 16 1 48 1 48 2 32 43 0 16 1 52 2 0 1 1 17 0 52 1 0 2 33 14 0 51 19 0 0 5 16 1 52 18 0 2 32 13 0 20 10 0 18 5 16 1 52 16 0 1 48 2 32 1 0 2 5 18 1 52 0 0 1 19 1 50)} {:upvalue-count 1 :arity 1 :constants ("for-each" {:upvalue-count 2 :arity 1 :constants ("dict-get" "append!" "str" ":" "serialize") :bytecode (18 0 16 0 52 0 0 2 17 1 20 1 0 18 1 1 3 0 16 0 52 2 0 2 48 2 5 20 1 0 18 1 16 1 52 4 0 1 49 2 50)} "keys") :bytecode (51 1 0 1 0 0 0 16 0 52 2 0 1 52 0 0 2 50)} "scope-peek" "scope-pop!" "concat" "make-sx-expr" "str" "(" "join" " " ")") :bytecode (52 0 0 0 17 3 52 0 0 0 17 4 4 17 5 1 1 0 17 6 1 3 0 2 52 2 0 2 5 51 5 0 1 5 1 6 1 1 1 2 1 3 1 4 16 1 52 4 0 2 5 51 6 0 1 3 1 3 0 52 7 0 1 52 4 0 2 5 1 3 0 52 8 0 1 5 16 0 52 0 0 1 16 3 16 4 52 9 0 3 17 7 20 10 0 1 12 0 1 14 0 16 7 52 13 0 2 1 15 0 52 11 0 3 49 1 50)} "aser-expand-component" {:upvalue-count 0 :arity 3 :constants ("component-params" "env-merge" "component-closure" 0 "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("env-bind!") :bytecode (20 0 0 18 0 16 0 2 49 3 50)} {:upvalue-count 6 :arity 1 :constants ("inc" "=" "type-of" "keyword" "<" "len" "env-bind!" "keyword-name" "aser" "nth" "append!") :bytecode (18 0 33 15 0 4 19 0 5 18 1 52 0 0 1 19 1 32 104 0 16 0 52 2 0 1 1 3 0 52 1 0 2 6 33 17 0 5 18 1 52 0 0 1 18 2 52 5 0 1 52 4 0 2 33 49 0 20 6 0 18 3 20 7 0 16 0 48 1 20 8 0 18 2 18 1 52 0 0 1 52 9 0 2 18 4 48 2 48 3 5 3 19 0 5 18 1 52 0 0 1 19 1 32 18 0 20 10 0 18 5 16 0 48 2 5 18 1 52 0 0 1 19 1 50)} "component-has-children" "map" {:upvalue-count 1 :arity 1 :constants ("aser") :bytecode (20 0 0 16 0 18 0 49 2 50)} "env-bind!" "children" "=" "len" 1 "first" "aser" "component-body") :bytecode (16 0 52 0 0 1 17 3 20 1 0 16 2 16 0 52 2 0 1 48 2 17 4 1 3 0 17 5 4 17 6 52 4 0 0 17 7 51 6 0 1 4 16 3 52 5 0 2 5 51 7 0 1 6 1 5 1 1 1 4 1 2 1 7 16 1 52 5 0 2 5 20 8 0 16 0 48 1 33 53 0 51 10 0 1 2 16 7 52 9 0 2 17 8 20 11 0 16 4 1 12 0 16 8 52 14 0 1 1 15 0 52 13 0 2 33 9 0 16 8 52 16 0 1 32 2 0 16 8 48 3 32 1 0 2 5 20 17 0 16 0 52 18 0 1 16 4 49 2 50)} "SPECIAL_FORM_NAMES" "list" "if" "when" "cond" "case" "and" "or" "let" "let*" "lambda" "fn" "define" "defcomp" "defmacro" "defstyle" "defhandler" "defpage" "defquery" "defaction" "defrelation" "begin" "do" "quote" "quasiquote" "->" "set!" "letrec" "dynamic-wind" "defisland" "deftype" "defeffect" "scope" "provide" "context" "emit!" "emitted" "HO_FORM_NAMES" "map" "map-indexed" "filter" "reduce" "some" "every?" "for-each" "special-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "SPECIAL_FORM_NAMES") :bytecode (20 1 0 16 0 52 0 0 2 50)} "ho-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "HO_FORM_NAMES") :bytecode (20 1 0 16 0 52 0 0 2 50)} "aser-special" {:upvalue-count 0 :arity 3 :constants ("rest" "=" "if" "trampoline" "eval-expr" "first" "aser" "nth" 1 ">" "len" 2 "when" "not" "for-each" {:upvalue-count 2 :arity 1 :constants ("aser") :bytecode (20 0 0 16 0 18 1 48 2 19 0 50)} "cond" "eval-cond" "case" "eval-case-aser" "let" "let*" "process-bindings" "begin" "do" "and" "some" {:upvalue-count 2 :arity 1 :constants ("trampoline" "eval-expr" "not") :bytecode (20 0 0 20 1 0 16 0 18 1 48 2 48 1 19 0 5 18 0 52 2 0 1 50)} "or" {:upvalue-count 2 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 1 48 2 48 1 19 0 5 18 0 50)} "map" {:upvalue-count 2 :arity 1 :constants ("lambda?" "env-merge" "lambda-closure" "env-bind!" "first" "lambda-params" "aser" "lambda-body" "cek-call" "list") :bytecode (18 0 52 0 0 1 33 51 0 20 1 0 18 0 52 2 0 1 18 1 48 2 17 1 20 3 0 16 1 18 0 52 5 0 1 52 4 0 1 16 0 48 3 5 20 6 0 18 0 52 7 0 1 16 1 49 2 32 13 0 20 8 0 18 0 16 0 52 9 0 1 49 2 50)} "map-indexed" {:upvalue-count 2 :arity 2 :constants ("lambda?" "env-merge" "lambda-closure" "env-bind!" "first" "lambda-params" "nth" 1 "aser" "lambda-body" "cek-call" "list") :bytecode (18 0 52 0 0 1 33 74 0 20 1 0 18 0 52 2 0 1 18 1 48 2 17 2 20 3 0 16 2 18 0 52 5 0 1 52 4 0 1 16 0 48 3 5 20 3 0 16 2 18 0 52 5 0 1 1 7 0 52 6 0 2 16 1 48 3 5 20 8 0 18 0 52 9 0 1 16 2 49 2 32 15 0 20 10 0 18 0 16 0 16 1 52 11 0 2 49 2 50)} "list" {:upvalue-count 3 :arity 1 :constants ("lambda?" "env-merge" "lambda-closure" "env-bind!" "first" "lambda-params" "append!" "aser" "lambda-body" "cek-call" "list") :bytecode (18 0 52 0 0 1 33 58 0 20 1 0 18 0 52 2 0 1 18 1 48 2 17 1 20 3 0 16 1 18 0 52 5 0 1 52 4 0 1 16 0 48 3 5 20 6 0 18 2 20 7 0 18 0 52 8 0 1 16 1 48 2 49 2 32 13 0 20 9 0 18 0 16 0 52 10 0 1 49 2 50)} "empty?" "defisland" "serialize" "define" "defcomp" "defmacro" "defstyle" "defhandler" "defpage" "defquery" "defaction" "defrelation" "deftype" "defeffect" "scope" ">=" "type-of" "keyword" "keyword-name" "value" "slice" "scope-push!" "scope-pop!" "provide" "context" "scope-peek" "nil?" "emit!" "scope-emit!" "emitted") :bytecode (16 1 52 0 0 1 17 3 16 0 1 2 0 52 1 0 2 33 79 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 33 19 0 20 6 0 16 3 1 8 0 52 7 0 2 16 2 49 2 32 36 0 16 3 52 10 0 1 1 11 0 52 9 0 2 33 19 0 20 6 0 16 3 1 11 0 52 7 0 2 16 2 49 2 32 1 0 2 32 34 5 16 0 1 12 0 52 1 0 2 33 55 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 52 13 0 1 33 4 0 2 32 23 0 2 17 4 51 15 0 1 4 1 2 16 3 52 0 0 1 52 14 0 2 5 16 4 32 223 4 16 0 1 16 0 52 1 0 2 33 32 0 20 17 0 16 3 16 2 48 2 17 4 16 4 33 12 0 20 6 0 16 4 16 2 49 2 32 1 0 2 32 179 4 16 0 1 18 0 52 1 0 2 33 42 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 3 52 0 0 1 17 5 20 19 0 16 4 16 5 16 2 49 3 32 125 4 16 0 1 20 0 52 1 0 2 6 34 10 0 5 16 0 1 21 0 52 1 0 2 33 41 0 20 22 0 16 3 52 5 0 1 16 2 48 2 17 4 2 17 5 51 15 0 1 5 1 4 16 3 52 0 0 1 52 14 0 2 5 16 5 32 58 4 16 0 1 23 0 52 1 0 2 6 34 10 0 5 16 0 1 24 0 52 1 0 2 33 22 0 2 17 4 51 15 0 1 4 1 2 16 3 52 14 0 2 5 16 4 32 10 4 16 0 1 25 0 52 1 0 2 33 22 0 3 17 4 51 27 0 1 4 1 2 16 3 52 26 0 2 5 16 4 32 232 3 16 0 1 28 0 52 1 0 2 33 22 0 4 17 4 51 29 0 1 4 1 2 16 3 52 26 0 2 5 16 4 32 198 3 16 0 1 30 0 52 1 0 2 33 59 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 51 31 0 1 4 1 2 16 5 52 30 0 2 32 127 3 16 0 1 32 0 52 1 0 2 33 59 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 51 33 0 1 4 1 2 16 5 52 32 0 2 32 56 3 16 0 1 14 0 52 1 0 2 33 83 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 52 34 0 0 17 6 51 35 0 1 4 1 2 1 6 16 5 52 14 0 2 5 16 6 52 36 0 1 33 4 0 2 32 2 0 16 6 32 217 2 16 0 1 37 0 52 1 0 2 33 24 0 20 3 0 20 4 0 16 1 16 2 48 2 48 1 5 16 1 52 38 0 1 32 181 2 16 0 1 39 0 52 1 0 2 6 34 136 0 5 16 0 1 40 0 52 1 0 2 6 34 122 0 5 16 0 1 41 0 52 1 0 2 6 34 108 0 5 16 0 1 42 0 52 1 0 2 6 34 94 0 5 16 0 1 43 0 52 1 0 2 6 34 80 0 5 16 0 1 44 0 52 1 0 2 6 34 66 0 5 16 0 1 45 0 52 1 0 2 6 34 52 0 5 16 0 1 46 0 52 1 0 2 6 34 38 0 5 16 0 1 47 0 52 1 0 2 6 34 24 0 5 16 0 1 48 0 52 1 0 2 6 34 10 0 5 16 0 1 49 0 52 1 0 2 33 19 0 20 3 0 20 4 0 16 1 16 2 48 2 48 1 5 2 32 10 2 16 0 1 50 0 52 1 0 2 33 176 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 3 52 0 0 1 17 5 2 17 6 2 17 7 16 5 52 10 0 1 1 11 0 52 51 0 2 6 33 41 0 5 16 5 52 5 0 1 52 52 0 1 1 53 0 52 1 0 2 6 33 19 0 5 20 54 0 16 5 52 5 0 1 48 1 1 55 0 52 1 0 2 33 38 0 20 3 0 20 4 0 16 5 1 8 0 52 7 0 2 16 2 48 2 48 1 17 6 5 16 5 1 11 0 52 56 0 2 17 7 32 4 0 16 5 17 7 5 16 4 16 6 52 57 0 2 5 2 17 8 51 15 0 1 8 1 2 16 7 52 14 0 2 5 16 4 52 58 0 1 5 16 8 32 78 1 16 0 1 59 0 52 1 0 2 33 88 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 2 17 6 16 4 16 5 52 57 0 2 5 51 15 0 1 6 1 2 16 3 1 11 0 52 56 0 2 52 14 0 2 5 16 4 52 58 0 1 5 16 6 32 234 0 16 0 1 60 0 52 1 0 2 33 90 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 3 52 10 0 1 1 11 0 52 51 0 2 33 24 0 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 32 1 0 2 17 5 16 4 52 61 0 1 17 6 16 6 52 62 0 1 33 5 0 16 5 32 2 0 16 6 32 132 0 16 0 1 63 0 52 1 0 2 33 56 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 16 4 16 5 52 64 0 2 5 2 32 64 0 16 0 1 65 0 52 1 0 2 33 38 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 4 52 61 0 1 6 34 5 0 5 52 34 0 0 32 14 0 20 3 0 20 4 0 16 1 16 2 48 2 49 1 50)} "eval-case-aser" {:upvalue-count 0 :arity 3 :constants ("<" "len" 2 "first" "nth" 1 "=" "type-of" "keyword" "keyword-name" "else" "symbol" "symbol-name" ":else" "aser" "trampoline" "eval-expr" "eval-case-aser" "slice") :bytecode (16 1 52 1 0 1 1 2 0 52 0 0 2 33 4 0 2 32 175 0 16 1 52 3 0 1 17 3 16 1 1 5 0 52 4 0 2 17 4 16 3 52 7 0 1 1 8 0 52 6 0 2 6 33 15 0 5 20 9 0 16 3 48 1 1 10 0 52 6 0 2 6 34 52 0 5 16 3 52 7 0 1 1 11 0 52 6 0 2 6 33 34 0 5 20 12 0 16 3 48 1 1 13 0 52 6 0 2 6 34 15 0 5 20 12 0 16 3 48 1 1 10 0 52 6 0 2 33 12 0 20 14 0 16 4 16 2 49 2 32 53 0 16 0 20 15 0 20 16 0 16 3 16 2 48 2 48 1 52 6 0 2 33 12 0 20 14 0 16 4 16 2 49 2 32 18 0 20 17 0 16 0 16 1 1 2 0 52 18 0 2 16 2 49 3 50)}) :bytecode (51 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 1 16 0 1 17 0 1 18 0 1 19 0 1 20 0 1 21 0 1 22 0 1 23 0 1 24 0 1 25 0 1 26 0 1 27 0 1 28 0 1 29 0 1 30 0 1 31 0 1 32 0 1 33 0 1 34 0 1 35 0 1 36 0 1 37 0 1 38 0 1 39 0 1 40 0 1 41 0 1 42 0 1 43 0 1 44 0 1 45 0 1 46 0 1 47 0 1 48 0 1 49 0 1 50 0 52 15 0 35 128 14 0 5 1 52 0 1 53 0 1 54 0 1 55 0 1 56 0 1 57 0 1 58 0 52 15 0 7 128 51 0 5 51 60 0 128 59 0 5 51 62 0 128 61 0 5 51 64 0 128 63 0 5 51 66 0 128 65 0 50)))
+ :constants ("render-to-sx" {:upvalue-count 0 :arity 2 :constants ("aser" "=" "type-of" "sx-expr" "sx-expr-source" "string" "serialize") :bytecode (20 0 0 16 0 16 1 48 2 17 2 16 2 52 2 0 1 1 3 0 52 1 0 2 33 10 0 20 4 0 16 2 49 1 32 27 0 16 2 52 2 0 1 1 5 0 52 1 0 2 33 5 0 16 2 32 6 0 16 2 52 6 0 1 50)} "aser" {:upvalue-count 0 :arity 2 :constants ("set-render-active!" "type-of" "number" "=" "string" "boolean" "nil" "symbol" "symbol-name" "env-has?" "env-get" "primitive?" "get-primitive" "true" "false" "error" "str" "Undefined symbol: " "keyword" "keyword-name" "list" "empty?" "aser-list" "spread" "scope-emit!" "element-attrs" "spread-attrs" "spread?") :bytecode (20 0 0 3 48 1 5 16 0 52 1 0 1 6 1 2 0 52 3 0 2 33 6 0 5 16 0 32 16 1 6 1 4 0 52 3 0 2 33 6 0 5 16 0 32 255 0 6 1 5 0 52 3 0 2 33 6 0 5 16 0 32 238 0 6 1 6 0 52 3 0 2 33 5 0 5 2 32 222 0 6 1 7 0 52 3 0 2 33 116 0 5 20 8 0 16 0 48 1 17 3 20 9 0 16 1 16 3 48 2 33 12 0 20 10 0 16 1 16 3 48 2 32 79 0 16 3 52 11 0 1 33 9 0 16 3 52 12 0 1 32 61 0 16 3 1 13 0 52 3 0 2 33 4 0 3 32 45 0 16 3 1 14 0 52 3 0 2 33 4 0 4 32 29 0 16 3 1 6 0 52 3 0 2 33 4 0 2 32 13 0 1 17 0 16 3 52 16 0 2 52 15 0 1 32 95 0 6 1 18 0 52 3 0 2 33 11 0 5 20 19 0 16 0 48 1 32 73 0 6 1 20 0 52 3 0 2 33 29 0 5 16 0 52 21 0 1 33 7 0 52 20 0 0 32 9 0 20 22 0 16 0 16 1 48 2 32 33 0 6 1 23 0 52 3 0 2 33 19 0 5 1 25 0 16 0 52 26 0 1 52 24 0 2 5 2 32 3 0 5 16 0 17 2 16 2 52 27 0 1 33 18 0 1 25 0 16 2 52 26 0 1 52 24 0 2 5 2 32 2 0 16 2 50)} "aser-list" {:upvalue-count 0 :arity 2 :constants ("first" "rest" "not" "=" "type-of" "symbol" "map" {:upvalue-count 1 :arity 1 :constants ("aser") :bytecode (20 0 0 16 0 18 0 49 2 50)} "symbol-name" "<>" "aser-fragment" "raw!" "aser-call" "starts-with?" "~" "env-has?" "env-get" "expand-components?" "macro?" "aser" "expand-macro" "component?" "island?" "component-affinity" "server" "client" "aser-expand-component" "lake" "marsh" "error-boundary" ">" "len" 1 "try-catch" {:upvalue-count 2 :arity 0 :constants ("join" "" "map" {:upvalue-count 1 :arity 1 :constants ("aser" "=" "type-of" "sx-expr" "sx-expr-source" "nil?" "" "serialize") :bytecode (20 0 0 16 0 18 0 48 2 17 1 16 1 52 2 0 1 1 3 0 52 1 0 2 33 10 0 20 4 0 16 1 49 1 32 21 0 16 1 52 5 0 1 33 6 0 1 6 0 32 6 0 16 1 52 7 0 1 50)}) :bytecode (1 1 0 51 3 0 0 0 18 1 52 2 0 2 52 0 0 2 50)} {:upvalue-count 1 :arity 1 :constants ("str") :bytecode (16 0 52 0 0 1 19 0 5 2 50)} "make-sx-expr" "str" "(error-boundary " ")" "(div :data-sx-boundary \"true\" " "(div :class \"sx-render-error\" " ":style \"color:red;font-size:0.875rem;padding:0.5rem;border:1px solid red;border-radius:0.25rem;margin:0.5rem 0;\" " "\"Render error: " "replace" "\"" "'" "\\" "\\\\" "\"))" "contains?" "HTML_TAGS" "special-form?" "ho-form?" "aser-special" "trampoline" "eval-expr" {:upvalue-count 1 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 49 1 50)} "callable?" "lambda?" "apply" "call-lambda" "component-name" "error" "Not callable: " "inspect") :bytecode (16 0 52 0 0 1 17 2 16 0 52 1 0 1 17 3 16 2 52 4 0 1 1 5 0 52 3 0 2 52 2 0 1 33 14 0 51 7 0 1 1 16 0 52 6 0 2 32 20 3 20 8 0 16 2 48 1 17 4 16 4 1 9 0 52 3 0 2 33 12 0 20 10 0 16 3 16 1 49 2 32 243 2 16 4 1 11 0 52 3 0 2 33 15 0 20 12 0 1 11 0 16 3 16 1 49 3 32 216 2 16 4 1 14 0 52 13 0 2 33 196 0 20 15 0 16 1 16 4 48 2 33 12 0 20 16 0 16 1 16 4 48 2 32 1 0 2 17 5 20 15 0 16 1 1 17 0 48 2 33 8 0 20 17 0 48 0 32 1 0 4 17 6 16 5 6 33 7 0 5 16 5 52 18 0 1 33 21 0 20 19 0 20 20 0 16 5 16 3 16 1 48 3 16 1 49 2 32 105 0 16 5 6 33 71 0 5 16 5 52 21 0 1 6 33 60 0 5 16 5 52 22 0 1 52 2 0 1 6 33 45 0 5 16 6 6 34 15 0 5 20 23 0 16 5 48 1 1 24 0 52 3 0 2 6 33 19 0 5 20 23 0 16 5 48 1 1 25 0 52 3 0 2 52 2 0 1 33 14 0 20 26 0 16 5 16 3 16 1 49 3 32 11 0 20 12 0 16 4 16 3 16 1 49 3 32 8 2 16 4 1 27 0 52 3 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 238 1 16 4 1 28 0 52 3 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 212 1 16 4 1 29 0 52 3 0 2 33 128 0 16 3 52 31 0 1 1 32 0 52 30 0 2 17 5 16 5 33 9 0 16 3 52 1 0 1 32 2 0 16 3 17 6 2 17 7 51 34 0 1 1 1 6 51 35 0 1 7 52 33 0 2 17 8 16 8 33 20 0 20 36 0 1 38 0 16 8 1 39 0 52 37 0 3 49 1 32 46 0 20 36 0 1 40 0 1 41 0 1 42 0 1 43 0 16 7 1 45 0 1 46 0 52 44 0 3 1 47 0 1 48 0 52 44 0 3 1 49 0 52 37 0 6 49 1 32 72 1 20 51 0 16 4 52 50 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 46 1 20 52 0 16 4 48 1 6 34 8 0 5 20 53 0 16 4 48 1 33 14 0 20 54 0 16 4 16 0 16 1 49 3 32 10 1 20 15 0 16 1 16 4 48 2 6 33 14 0 5 20 16 0 16 1 16 4 48 2 52 18 0 1 33 28 0 20 19 0 20 20 0 20 16 0 16 1 16 4 48 2 16 3 16 1 48 3 16 1 49 2 32 208 0 20 55 0 20 56 0 16 2 16 1 48 2 48 1 17 5 51 57 0 1 1 16 3 52 6 0 2 17 6 20 58 0 16 5 48 1 6 33 41 0 5 16 5 52 59 0 1 52 2 0 1 6 33 26 0 5 16 5 52 21 0 1 52 2 0 1 6 33 11 0 5 16 5 52 22 0 1 52 2 0 1 33 11 0 16 5 16 6 52 60 0 2 32 113 0 16 5 52 59 0 1 33 19 0 20 55 0 20 61 0 16 5 16 6 16 1 48 3 49 1 32 85 0 16 5 52 21 0 1 33 25 0 20 12 0 1 14 0 16 5 52 62 0 1 52 37 0 2 16 3 16 1 49 3 32 51 0 16 5 52 22 0 1 33 25 0 20 12 0 1 14 0 16 5 52 62 0 1 52 37 0 2 16 3 16 1 49 3 32 17 0 1 64 0 16 5 52 65 0 1 52 37 0 2 52 63 0 1 50)} "aser-reserialize" {:upvalue-count 0 :arity 1 :constants ("not" "=" "type-of" "list" "serialize" "empty?" "()" "first" "symbol" "symbol-name" "rest" 0 "for-each" {:upvalue-count 4 :arity 1 :constants ("inc" "=" "type-of" "string" "<" "len" "not" "contains?" " " "starts-with?" "class" "id" "sx-" "data-" "style" "href" "src" "type" "name" "value" "placeholder" "action" "method" "target" "role" "for" "on" "append!" "str" ":" "serialize" "nth" "aser-reserialize") :bytecode (18 0 33 15 0 4 19 0 5 18 1 52 0 0 1 19 1 32 116 1 16 0 52 2 0 1 1 3 0 52 1 0 2 6 33 17 1 5 18 1 52 0 0 1 18 2 52 5 0 1 52 4 0 2 6 33 252 0 5 16 0 1 8 0 52 7 0 2 52 6 0 1 6 33 234 0 5 16 0 1 10 0 52 9 0 2 6 34 220 0 5 16 0 1 11 0 52 9 0 2 6 34 206 0 5 16 0 1 12 0 52 9 0 2 6 34 192 0 5 16 0 1 13 0 52 9 0 2 6 34 178 0 5 16 0 1 14 0 52 9 0 2 6 34 164 0 5 16 0 1 15 0 52 9 0 2 6 34 150 0 5 16 0 1 16 0 52 9 0 2 6 34 136 0 5 16 0 1 17 0 52 9 0 2 6 34 122 0 5 16 0 1 18 0 52 9 0 2 6 34 108 0 5 16 0 1 19 0 52 9 0 2 6 34 94 0 5 16 0 1 20 0 52 9 0 2 6 34 80 0 5 16 0 1 21 0 52 9 0 2 6 34 66 0 5 16 0 1 22 0 52 9 0 2 6 34 52 0 5 16 0 1 23 0 52 9 0 2 6 34 38 0 5 16 0 1 24 0 52 9 0 2 6 34 24 0 5 16 0 1 25 0 52 9 0 2 6 34 10 0 5 16 0 1 26 0 52 9 0 2 33 56 0 20 27 0 18 3 1 29 0 16 0 52 28 0 2 48 2 5 20 27 0 18 3 18 2 18 1 52 0 0 1 52 31 0 2 52 30 0 1 48 2 5 3 19 0 5 18 1 52 0 0 1 19 1 32 23 0 20 27 0 18 3 20 32 0 16 0 48 1 48 2 5 18 1 52 0 0 1 19 1 50)} "str" "(" "join" " " ")") :bytecode (16 0 52 2 0 1 1 3 0 52 1 0 2 52 0 0 1 33 9 0 16 0 52 4 0 1 32 122 0 16 0 52 5 0 1 33 6 0 1 6 0 32 107 0 16 0 52 7 0 1 17 1 16 1 52 2 0 1 1 8 0 52 1 0 2 52 0 0 1 33 9 0 16 0 52 4 0 1 32 70 0 20 9 0 16 1 48 1 17 2 16 2 52 3 0 1 17 3 16 0 52 10 0 1 17 4 4 17 5 1 11 0 17 6 51 13 0 1 5 1 6 1 4 1 3 16 4 52 12 0 2 5 1 15 0 1 17 0 16 3 52 16 0 2 1 18 0 52 14 0 3 50)} "aser-fragment" {:upvalue-count 0 :arity 2 :constants ("list" "for-each" {:upvalue-count 2 :arity 1 :constants ("aser" "nil?" "=" "type-of" "sx-expr" "append!" "sx-expr-source" "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("not" "nil?" "=" "type-of" "sx-expr" "append!" "sx-expr-source" "aser-reserialize") :bytecode (16 0 52 1 0 1 52 0 0 1 33 50 0 16 0 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 0 20 6 0 16 0 48 1 49 2 32 14 0 20 5 0 18 0 20 7 0 16 0 48 1 49 2 32 1 0 2 50)} "serialize") :bytecode (20 0 0 16 0 18 0 48 2 17 1 16 1 52 1 0 1 33 4 0 2 32 76 0 16 1 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 1 20 6 0 16 1 48 1 49 2 32 43 0 16 1 52 3 0 1 1 7 0 52 2 0 2 33 14 0 51 9 0 0 1 16 1 52 8 0 2 32 13 0 20 5 0 18 1 16 1 52 10 0 1 49 2 50)} "empty?" "" "=" "len" 1 "make-sx-expr" "first" "str" "(<> " "join" " " ")") :bytecode (52 0 0 0 17 2 51 2 0 1 1 1 2 16 0 52 1 0 2 5 16 2 52 3 0 1 33 6 0 1 4 0 32 54 0 16 2 52 6 0 1 1 7 0 52 5 0 2 33 14 0 20 8 0 16 2 52 9 0 1 49 1 32 24 0 20 8 0 1 11 0 1 13 0 16 2 52 12 0 2 1 14 0 52 10 0 3 49 1 50)} "aser-call" {:upvalue-count 0 :arity 3 :constants ("list" 0 "scope-push!" "element-attrs" "for-each" {:upvalue-count 6 :arity 1 :constants ("inc" "=" "type-of" "keyword" "<" "len" "aser" "nth" "not" "nil?" "append!" "str" ":" "keyword-name" "sx-expr" "sx-expr-source" "serialize" "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("not" "nil?" "=" "type-of" "sx-expr" "append!" "sx-expr-source" "serialize") :bytecode (16 0 52 1 0 1 52 0 0 1 33 49 0 16 0 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 0 20 6 0 16 0 48 1 49 2 32 13 0 20 5 0 18 0 16 0 52 7 0 1 49 2 32 1 0 2 50)}) :bytecode (18 0 33 15 0 4 19 0 5 18 1 52 0 0 1 19 1 32 16 1 16 0 52 2 0 1 1 3 0 52 1 0 2 6 33 17 0 5 18 1 52 0 0 1 18 2 52 5 0 1 52 4 0 2 33 122 0 20 6 0 18 2 18 1 52 0 0 1 52 7 0 2 18 3 48 2 17 1 16 1 52 9 0 1 52 8 0 1 33 71 0 20 10 0 18 4 1 12 0 20 13 0 16 0 48 1 52 11 0 2 48 2 5 16 1 52 2 0 1 1 14 0 52 1 0 2 33 17 0 20 10 0 18 4 20 15 0 16 1 48 1 48 2 32 13 0 20 10 0 18 4 16 1 52 16 0 1 48 2 32 1 0 2 5 3 19 0 5 18 1 52 0 0 1 19 1 32 113 0 20 6 0 16 0 18 3 48 2 17 1 16 1 52 9 0 1 52 8 0 1 33 79 0 16 1 52 2 0 1 1 14 0 52 1 0 2 33 17 0 20 10 0 18 5 20 15 0 16 1 48 1 48 2 32 43 0 16 1 52 2 0 1 1 17 0 52 1 0 2 33 14 0 51 19 0 0 5 16 1 52 18 0 2 32 13 0 20 10 0 18 5 16 1 52 16 0 1 48 2 32 1 0 2 5 18 1 52 0 0 1 19 1 50)} {:upvalue-count 1 :arity 1 :constants ("for-each" {:upvalue-count 2 :arity 1 :constants ("dict-get" "append!" "str" ":" "serialize") :bytecode (18 0 16 0 52 0 0 2 17 1 20 1 0 18 1 1 3 0 16 0 52 2 0 2 48 2 5 20 1 0 18 1 16 1 52 4 0 1 49 2 50)} "keys") :bytecode (51 1 0 1 0 0 0 16 0 52 2 0 1 52 0 0 2 50)} "scope-peek" "scope-pop!" "concat" "make-sx-expr" "str" "(" "join" " " ")") :bytecode (52 0 0 0 17 3 52 0 0 0 17 4 4 17 5 1 1 0 17 6 1 3 0 2 52 2 0 2 5 51 5 0 1 5 1 6 1 1 1 2 1 3 1 4 16 1 52 4 0 2 5 51 6 0 1 3 1 3 0 52 7 0 1 52 4 0 2 5 1 3 0 52 8 0 1 5 16 0 52 0 0 1 16 3 16 4 52 9 0 3 17 7 20 10 0 1 12 0 1 14 0 16 7 52 13 0 2 1 15 0 52 11 0 3 49 1 50)} "aser-expand-component" {:upvalue-count 0 :arity 3 :constants ("component-params" "env-merge" "component-closure" 0 "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("env-bind!") :bytecode (20 0 0 18 0 16 0 2 49 3 50)} {:upvalue-count 6 :arity 1 :constants ("inc" "=" "type-of" "keyword" "<" "len" "env-bind!" "keyword-name" "aser" "nth" "append!") :bytecode (18 0 33 15 0 4 19 0 5 18 1 52 0 0 1 19 1 32 104 0 16 0 52 2 0 1 1 3 0 52 1 0 2 6 33 17 0 5 18 1 52 0 0 1 18 2 52 5 0 1 52 4 0 2 33 49 0 20 6 0 18 3 20 7 0 16 0 48 1 20 8 0 18 2 18 1 52 0 0 1 52 9 0 2 18 4 48 2 48 3 5 3 19 0 5 18 1 52 0 0 1 19 1 32 18 0 20 10 0 18 5 16 0 48 2 5 18 1 52 0 0 1 19 1 50)} "component-has-children" "map" {:upvalue-count 1 :arity 1 :constants ("aser") :bytecode (20 0 0 16 0 18 0 49 2 50)} "env-bind!" "children" "=" "len" 1 "first" "aser" "component-body") :bytecode (16 0 52 0 0 1 17 3 20 1 0 16 2 16 0 52 2 0 1 48 2 17 4 1 3 0 17 5 4 17 6 52 4 0 0 17 7 51 6 0 1 4 16 3 52 5 0 2 5 51 7 0 1 6 1 5 1 1 1 4 1 2 1 7 16 1 52 5 0 2 5 20 8 0 16 0 48 1 33 53 0 51 10 0 1 2 16 7 52 9 0 2 17 8 20 11 0 16 4 1 12 0 16 8 52 14 0 1 1 15 0 52 13 0 2 33 9 0 16 8 52 16 0 1 32 2 0 16 8 48 3 32 1 0 2 5 20 17 0 16 0 52 18 0 1 16 4 49 2 50)} "SPECIAL_FORM_NAMES" "list" "if" "when" "cond" "case" "and" "or" "let" "let*" "lambda" "fn" "define" "defcomp" "defmacro" "defstyle" "defhandler" "defpage" "defquery" "defaction" "defrelation" "begin" "do" "quote" "quasiquote" "->" "set!" "letrec" "dynamic-wind" "defisland" "deftype" "defeffect" "scope" "provide" "context" "emit!" "emitted" "HO_FORM_NAMES" "map" "map-indexed" "filter" "reduce" "some" "every?" "for-each" "special-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "SPECIAL_FORM_NAMES") :bytecode (20 1 0 16 0 52 0 0 2 50)} "ho-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "HO_FORM_NAMES") :bytecode (20 1 0 16 0 52 0 0 2 50)} "aser-special" {:upvalue-count 0 :arity 3 :constants ("rest" "=" "if" "trampoline" "eval-expr" "first" "aser" "nth" 1 ">" "len" 2 "when" "not" "for-each" {:upvalue-count 2 :arity 1 :constants ("aser") :bytecode (20 0 0 16 0 18 1 48 2 19 0 50)} "cond" "eval-cond" "case" "eval-case-aser" "let" "let*" "process-bindings" "begin" "do" "and" "some" {:upvalue-count 2 :arity 1 :constants ("trampoline" "eval-expr" "not") :bytecode (20 0 0 20 1 0 16 0 18 1 48 2 48 1 19 0 5 18 0 52 2 0 1 50)} "or" {:upvalue-count 2 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 1 48 2 48 1 19 0 5 18 0 50)} "map" {:upvalue-count 2 :arity 1 :constants ("lambda?" "env-merge" "lambda-closure" "env-bind!" "first" "lambda-params" "aser" "lambda-body" "cek-call" "list") :bytecode (18 0 52 0 0 1 33 51 0 20 1 0 18 0 52 2 0 1 18 1 48 2 17 1 20 3 0 16 1 18 0 52 5 0 1 52 4 0 1 16 0 48 3 5 20 6 0 18 0 52 7 0 1 16 1 49 2 32 13 0 20 8 0 18 0 16 0 52 9 0 1 49 2 50)} "map-indexed" {:upvalue-count 2 :arity 2 :constants ("lambda?" "env-merge" "lambda-closure" "env-bind!" "first" "lambda-params" "nth" 1 "aser" "lambda-body" "cek-call" "list") :bytecode (18 0 52 0 0 1 33 74 0 20 1 0 18 0 52 2 0 1 18 1 48 2 17 2 20 3 0 16 2 18 0 52 5 0 1 52 4 0 1 16 0 48 3 5 20 3 0 16 2 18 0 52 5 0 1 1 7 0 52 6 0 2 16 1 48 3 5 20 8 0 18 0 52 9 0 1 16 2 49 2 32 15 0 20 10 0 18 0 16 0 16 1 52 11 0 2 49 2 50)} "list" {:upvalue-count 3 :arity 1 :constants ("lambda?" "env-merge" "lambda-closure" "env-bind!" "first" "lambda-params" "append!" "aser" "lambda-body" "cek-call" "list") :bytecode (18 0 52 0 0 1 33 58 0 20 1 0 18 0 52 2 0 1 18 1 48 2 17 1 20 3 0 16 1 18 0 52 5 0 1 52 4 0 1 16 0 48 3 5 20 6 0 18 2 20 7 0 18 0 52 8 0 1 16 1 48 2 49 2 32 13 0 20 9 0 18 0 16 0 52 10 0 1 49 2 50)} "empty?" "defisland" "serialize" "define" "defcomp" "defmacro" "defstyle" "defhandler" "defpage" "defquery" "defaction" "defrelation" "deftype" "defeffect" "scope" ">=" "type-of" "keyword" "keyword-name" "value" "slice" "scope-push!" "scope-pop!" "provide" "context" "scope-peek" "nil?" "emit!" "scope-emit!" "emitted") :bytecode (16 1 52 0 0 1 17 3 16 0 1 2 0 52 1 0 2 33 79 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 33 19 0 20 6 0 16 3 1 8 0 52 7 0 2 16 2 49 2 32 36 0 16 3 52 10 0 1 1 11 0 52 9 0 2 33 19 0 20 6 0 16 3 1 11 0 52 7 0 2 16 2 49 2 32 1 0 2 32 34 5 16 0 1 12 0 52 1 0 2 33 55 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 52 13 0 1 33 4 0 2 32 23 0 2 17 4 51 15 0 1 4 1 2 16 3 52 0 0 1 52 14 0 2 5 16 4 32 223 4 16 0 1 16 0 52 1 0 2 33 32 0 20 17 0 16 3 16 2 48 2 17 4 16 4 33 12 0 20 6 0 16 4 16 2 49 2 32 1 0 2 32 179 4 16 0 1 18 0 52 1 0 2 33 42 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 3 52 0 0 1 17 5 20 19 0 16 4 16 5 16 2 49 3 32 125 4 16 0 1 20 0 52 1 0 2 6 34 10 0 5 16 0 1 21 0 52 1 0 2 33 41 0 20 22 0 16 3 52 5 0 1 16 2 48 2 17 4 2 17 5 51 15 0 1 5 1 4 16 3 52 0 0 1 52 14 0 2 5 16 5 32 58 4 16 0 1 23 0 52 1 0 2 6 34 10 0 5 16 0 1 24 0 52 1 0 2 33 22 0 2 17 4 51 15 0 1 4 1 2 16 3 52 14 0 2 5 16 4 32 10 4 16 0 1 25 0 52 1 0 2 33 22 0 3 17 4 51 27 0 1 4 1 2 16 3 52 26 0 2 5 16 4 32 232 3 16 0 1 28 0 52 1 0 2 33 22 0 4 17 4 51 29 0 1 4 1 2 16 3 52 26 0 2 5 16 4 32 198 3 16 0 1 30 0 52 1 0 2 33 59 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 51 31 0 1 4 1 2 16 5 52 30 0 2 32 127 3 16 0 1 32 0 52 1 0 2 33 59 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 51 33 0 1 4 1 2 16 5 52 32 0 2 32 56 3 16 0 1 14 0 52 1 0 2 33 83 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 52 34 0 0 17 6 51 35 0 1 4 1 2 1 6 16 5 52 14 0 2 5 16 6 52 36 0 1 33 4 0 2 32 2 0 16 6 32 217 2 16 0 1 37 0 52 1 0 2 33 24 0 20 3 0 20 4 0 16 1 16 2 48 2 48 1 5 16 1 52 38 0 1 32 181 2 16 0 1 39 0 52 1 0 2 6 34 136 0 5 16 0 1 40 0 52 1 0 2 6 34 122 0 5 16 0 1 41 0 52 1 0 2 6 34 108 0 5 16 0 1 42 0 52 1 0 2 6 34 94 0 5 16 0 1 43 0 52 1 0 2 6 34 80 0 5 16 0 1 44 0 52 1 0 2 6 34 66 0 5 16 0 1 45 0 52 1 0 2 6 34 52 0 5 16 0 1 46 0 52 1 0 2 6 34 38 0 5 16 0 1 47 0 52 1 0 2 6 34 24 0 5 16 0 1 48 0 52 1 0 2 6 34 10 0 5 16 0 1 49 0 52 1 0 2 33 19 0 20 3 0 20 4 0 16 1 16 2 48 2 48 1 5 2 32 10 2 16 0 1 50 0 52 1 0 2 33 176 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 3 52 0 0 1 17 5 2 17 6 2 17 7 16 5 52 10 0 1 1 11 0 52 51 0 2 6 33 41 0 5 16 5 52 5 0 1 52 52 0 1 1 53 0 52 1 0 2 6 33 19 0 5 20 54 0 16 5 52 5 0 1 48 1 1 55 0 52 1 0 2 33 38 0 20 3 0 20 4 0 16 5 1 8 0 52 7 0 2 16 2 48 2 48 1 17 6 5 16 5 1 11 0 52 56 0 2 17 7 32 4 0 16 5 17 7 5 16 4 16 6 52 57 0 2 5 2 17 8 51 15 0 1 8 1 2 16 7 52 14 0 2 5 16 4 52 58 0 1 5 16 8 32 78 1 16 0 1 59 0 52 1 0 2 33 88 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 2 17 6 16 4 16 5 52 57 0 2 5 51 15 0 1 6 1 2 16 3 1 11 0 52 56 0 2 52 14 0 2 5 16 4 52 58 0 1 5 16 6 32 234 0 16 0 1 60 0 52 1 0 2 33 90 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 3 52 10 0 1 1 11 0 52 51 0 2 33 24 0 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 32 1 0 2 17 5 16 4 52 61 0 1 17 6 16 6 52 62 0 1 33 5 0 16 5 32 2 0 16 6 32 132 0 16 0 1 63 0 52 1 0 2 33 56 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 16 4 16 5 52 64 0 2 5 2 32 64 0 16 0 1 65 0 52 1 0 2 33 38 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 4 52 61 0 1 6 34 5 0 5 52 34 0 0 32 14 0 20 3 0 20 4 0 16 1 16 2 48 2 49 1 50)} "eval-case-aser" {:upvalue-count 0 :arity 3 :constants ("<" "len" 2 "first" "nth" 1 "=" "type-of" "keyword" "keyword-name" "else" "symbol" "symbol-name" ":else" "aser" "trampoline" "eval-expr" "eval-case-aser" "slice") :bytecode (16 1 52 1 0 1 1 2 0 52 0 0 2 33 4 0 2 32 175 0 16 1 52 3 0 1 17 3 16 1 1 5 0 52 4 0 2 17 4 16 3 52 7 0 1 1 8 0 52 6 0 2 6 33 15 0 5 20 9 0 16 3 48 1 1 10 0 52 6 0 2 6 34 52 0 5 16 3 52 7 0 1 1 11 0 52 6 0 2 6 33 34 0 5 20 12 0 16 3 48 1 1 13 0 52 6 0 2 6 34 15 0 5 20 12 0 16 3 48 1 1 10 0 52 6 0 2 33 12 0 20 14 0 16 4 16 2 49 2 32 53 0 16 0 20 15 0 20 16 0 16 3 16 2 48 2 48 1 52 6 0 2 33 12 0 20 14 0 16 4 16 2 49 2 32 18 0 20 17 0 16 0 16 1 1 2 0 52 18 0 2 16 2 49 3 50)}) :bytecode (51 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 1 16 0 1 17 0 1 18 0 1 19 0 1 20 0 1 21 0 1 22 0 1 23 0 1 24 0 1 25 0 1 26 0 1 27 0 1 28 0 1 29 0 1 30 0 1 31 0 1 32 0 1 33 0 1 34 0 1 35 0 1 36 0 1 37 0 1 38 0 1 39 0 1 40 0 1 41 0 1 42 0 1 43 0 1 44 0 1 45 0 1 46 0 1 47 0 1 48 0 1 49 0 1 50 0 52 15 0 35 128 14 0 5 1 52 0 1 53 0 1 54 0 1 55 0 1 56 0 1 57 0 1 58 0 52 15 0 7 128 51 0 5 51 60 0 128 59 0 5 51 62 0 128 61 0 5 51 64 0 128 63 0 5 51 66 0 128 65 0 50)))
diff --git a/shared/static/wasm/sx/orchestration.sx b/shared/static/wasm/sx/orchestration.sx
index 789cf6d7..70621db6 100644
--- a/shared/static/wasm/sx/orchestration.sx
+++ b/shared/static/wasm/sx/orchestration.sx
@@ -288,24 +288,21 @@
s)
(post-swap t)))
(let
- ((select-sel (dom-get-attr el "sx-select"))
- (content
- (if
- select-sel
- (select-from-container container select-sel)
- (children-to-fragment container))))
- (dispose-islands-in target)
- (with-transition
- use-transition
- (fn
- ()
- (let
- ((swap-result (swap-dom-nodes target content swap-style)))
- (post-swap
- (if
- (= swap-style "outerHTML")
- (dom-parent (or swap-result target))
- (or swap-result target))))))))))))))
+ ((select-sel (dom-get-attr el "sx-select")))
+ (let
+ ((content (if select-sel (select-from-container container select-sel) (children-to-fragment container))))
+ (dispose-islands-in target)
+ (with-transition
+ use-transition
+ (fn
+ ()
+ (let
+ ((swap-result (swap-dom-nodes target content swap-style)))
+ (post-swap
+ (if
+ (= swap-style "outerHTML")
+ (dom-parent (or swap-result target))
+ (or swap-result target)))))))))))))))
(define
handle-html-response
@@ -973,17 +970,35 @@
:effects (mutation io)
(fn
(target rendered (pathname :as string))
- (do
- (dispose-islands-in target)
- (dom-set-text-content target "")
- (dom-append target rendered)
- (hoist-head-elements-full target)
- (process-elements target)
- (sx-hydrate-elements target)
- (sx-hydrate-islands target)
- (run-post-render-hooks)
- (dom-dispatch target "sx:clientRoute" (dict "pathname" pathname))
- (log-info (str "sx:route client " pathname)))))
+ (let
+ ((container (dom-create-element "div" nil)))
+ (dom-append container rendered)
+ (process-oob-swaps
+ container
+ (fn
+ (t oob (s :as string))
+ (dispose-islands-in t)
+ (swap-dom-nodes
+ t
+ (if (= s "innerHTML") (children-to-fragment oob) oob)
+ s)
+ (post-swap t)))
+ (let
+ ((target-id (dom-get-attr target "id")))
+ (let
+ ((inner (if target-id (dom-query container (str "#" target-id)) nil)))
+ (let
+ ((content (if inner (children-to-fragment inner) (children-to-fragment container))))
+ (dispose-islands-in target)
+ (dom-set-text-content target "")
+ (dom-append target content)
+ (hoist-head-elements-full target)
+ (process-elements target)
+ (sx-hydrate-elements target)
+ (sx-hydrate-islands target)
+ (run-post-render-hooks)
+ (dom-dispatch target "sx:clientRoute" (dict "pathname" pathname))
+ (log-info (str "sx:route client " pathname))))))))
(define
resolve-route-target
diff --git a/shared/static/wasm/sx/orchestration.sxbc b/shared/static/wasm/sx/orchestration.sxbc
index 565b5797..be8feef2 100644
--- a/shared/static/wasm/sx/orchestration.sxbc
+++ b/shared/static/wasm/sx/orchestration.sxbc
@@ -1,3 +1,3 @@
-(sxbc 1 "29771d90aa292f44"
+(sxbc 1 "a26b9a82b33edb90"
(code
- :constants ("_preload-cache" "dict" "_css-hash" "" "dispatch-trigger-events" {:upvalue-count 0 :arity 2 :constants ("try-parse-json" "for-each" {:upvalue-count 2 :arity 1 :constants ("dom-dispatch" "get") :bytecode (20 0 0 18 0 16 0 18 1 16 0 52 1 0 2 49 3 50)} "keys" {:upvalue-count 1 :arity 1 :constants ("trim" "not" "empty?" "dom-dispatch" "dict") :bytecode (16 0 52 0 0 1 17 1 16 1 52 2 0 1 52 1 0 1 33 16 0 20 3 0 18 0 16 1 52 4 0 0 49 3 32 1 0 2 50)} "split" ",") :bytecode (16 1 33 55 0 20 0 0 16 1 48 1 17 2 16 2 33 20 0 51 2 0 1 0 1 2 16 2 52 3 0 1 52 1 0 2 32 18 0 51 4 0 1 0 16 1 1 6 0 52 5 0 2 52 1 0 2 32 1 0 2 50)} "init-css-tracking" {:upvalue-count 0 :arity 0 :constants ("dom-query" "meta[name=\"sx-css-classes\"]" "dom-get-attr" "content" "_css-hash") :bytecode (20 0 0 1 1 0 48 1 17 0 16 0 33 29 0 20 2 0 16 0 1 3 0 48 2 17 1 16 1 33 8 0 16 1 21 4 0 32 1 0 2 32 1 0 2 50)} "execute-request" {:upvalue-count 0 :arity 3 :constants ("get-verb-info" "nil?" "promise-resolve" "get" "method" "url" "dom-get-attr" "sx-media" "not" "browser-media-matches?" "sx-confirm" "browser-confirm" "sx-prompt" "browser-prompt" "validate-for-request" "do-fetch" "assoc" "dict" "SX-Prompt") :bytecode (20 0 0 16 0 48 1 6 34 3 0 5 16 1 17 3 16 3 52 1 0 1 33 9 0 20 2 0 2 49 1 32 249 0 16 3 1 4 0 52 3 0 2 17 4 16 3 1 5 0 52 3 0 2 17 5 20 6 0 16 0 1 7 0 48 2 17 6 16 6 6 33 12 0 5 20 9 0 16 6 48 1 52 8 0 1 33 9 0 20 2 0 2 49 1 32 185 0 20 6 0 16 0 1 10 0 48 2 17 6 16 6 6 33 12 0 5 20 11 0 16 6 48 1 52 8 0 1 33 9 0 20 2 0 2 49 1 32 143 0 20 6 0 16 0 1 12 0 48 2 17 6 16 6 33 10 0 20 13 0 16 6 48 1 32 1 0 2 17 7 16 6 6 33 7 0 5 16 7 52 1 0 1 33 9 0 20 2 0 2 49 1 32 88 0 16 4 52 1 0 1 6 34 23 0 5 16 5 52 1 0 1 6 34 12 0 5 20 14 0 16 0 48 1 52 8 0 1 33 9 0 20 2 0 2 49 1 32 43 0 20 15 0 16 0 16 4 16 4 16 5 16 7 33 23 0 16 2 6 34 5 0 5 52 17 0 0 1 18 0 16 7 52 16 0 3 32 2 0 16 2 49 5 50)} "do-fetch" {:upvalue-count 0 :arity 5 :constants ("dom-get-attr" "sx-sync" "=" "replace" "abort-previous" "resolve-target" "not" "identical?" "abort-previous-target" "new-abort-controller" "track-controller" "track-controller-target" "build-request-body" "get" "url" "body" "content-type" "build-request-headers" "loaded-component-names" "_css-hash" "csrf-token" "for-each" {:upvalue-count 2 :arity 1 :constants ("dict-set!" "get") :bytecode (18 0 16 0 18 1 16 0 52 1 0 2 52 0 0 3 50)} "keys" "dict-set!" "Content-Type" "X-CSRFToken" "preload-cache-get" "_preload-cache" "apply-optimistic" "show-indicator" "disable-elements" "dom-add-class" "sx-request" "dom-set-attr" "aria-busy" "true" "dom-dispatch" "sx:beforeRequest" "dict" "method" "fetch-request" "headers" "signal" "controller-signal" "cross-origin" "cross-origin?" "preloaded" {:upvalue-count 8 :arity 4 :constants ("clear-loading-state" "revert-optimistic" "not" "dom-dispatch" "sx:responseError" "dict" "status" "text" ">" "len" 0 "handle-fetch-success" "handle-retry" "sx:afterRequest") :bytecode (20 0 0 18 0 18 1 18 2 48 3 5 20 1 0 18 3 48 1 5 16 0 52 2 0 1 33 86 0 20 3 0 18 0 1 4 0 1 6 0 16 1 1 7 0 16 3 52 5 0 4 48 3 5 16 3 6 33 14 0 5 16 3 52 9 0 1 1 10 0 52 8 0 2 33 20 0 20 11 0 18 0 18 4 18 5 18 6 16 2 16 3 49 6 32 15 0 20 12 0 18 0 18 5 18 7 18 4 18 6 49 5 32 37 0 20 3 0 18 0 1 13 0 1 6 0 16 1 52 5 0 2 48 3 5 20 11 0 18 0 18 4 18 5 18 6 16 2 16 3 49 6 50)} {:upvalue-count 6 :arity 1 :constants ("clear-loading-state" "revert-optimistic" "not" "abort-error?" "log-warn" "str" "sx:fetch error " " " " — " "dom-dispatch" "sx:requestError" "dict" "error") :bytecode (20 0 0 18 0 18 1 18 2 48 3 5 20 1 0 18 3 48 1 5 20 3 0 16 0 48 1 52 2 0 1 33 47 0 20 4 0 1 6 0 18 4 1 7 0 18 5 1 8 0 16 0 52 5 0 6 48 1 5 20 9 0 18 0 1 10 0 1 12 0 16 0 52 11 0 2 49 3 32 1 0 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 5 16 5 1 3 0 52 2 0 2 33 10 0 20 4 0 16 0 48 1 32 1 0 2 5 20 5 0 16 0 48 1 17 6 16 6 6 33 13 0 5 16 0 16 6 52 7 0 2 52 6 0 1 33 10 0 20 8 0 16 6 48 1 32 1 0 2 5 20 9 0 48 0 17 6 20 10 0 16 0 16 6 48 2 5 20 5 0 16 0 48 1 17 7 16 7 33 12 0 20 11 0 16 7 16 6 48 2 32 1 0 2 5 20 12 0 16 0 16 2 16 3 48 3 17 7 16 7 1 14 0 52 13 0 2 17 8 16 7 1 15 0 52 13 0 2 17 9 16 7 1 16 0 52 13 0 2 17 10 20 17 0 16 0 20 18 0 48 0 20 19 0 48 3 17 11 20 20 0 48 0 17 12 16 4 33 20 0 51 22 0 1 11 1 4 16 4 52 23 0 1 52 21 0 2 32 1 0 2 5 16 10 33 14 0 16 11 1 25 0 16 10 52 24 0 3 32 1 0 2 5 16 12 33 14 0 16 11 1 26 0 16 12 52 24 0 3 32 1 0 2 5 20 27 0 20 28 0 16 8 48 2 17 13 20 29 0 16 0 48 1 17 14 20 30 0 16 0 48 1 17 15 20 31 0 16 0 48 1 17 16 20 32 0 16 0 1 33 0 48 2 5 20 34 0 16 0 1 35 0 1 36 0 48 3 5 20 37 0 16 0 1 38 0 1 14 0 16 8 1 40 0 16 2 52 39 0 4 48 3 5 20 41 0 1 14 0 16 8 1 40 0 16 2 1 42 0 16 11 1 15 0 16 9 1 43 0 20 44 0 16 6 48 1 1 45 0 20 46 0 16 8 48 1 1 47 0 16 13 52 39 0 14 51 48 0 1 0 1 15 1 16 1 14 1 8 1 1 1 4 1 2 51 49 0 1 0 1 15 1 16 1 14 1 2 1 8 49 3 50)} "handle-fetch-success" {:upvalue-count 0 :arity 6 :constants ("process-response-headers" "get" "css-hash" "_css-hash" "dispatch-trigger-events" "trigger" "process-cache-directives" "redirect" "browser-navigate" "refresh" "browser-reload" "location" "fetch-location" "retarget" "dom-query" "resolve-target" "parse-swap-spec" "reswap" "dom-get-attr" "sx-swap" "dom-has-class?" "dom-body" "sx-transitions" "style" "transition" "content-type" "" "contains?" "text/sx" "handle-sx-response" "handle-html-response" "trigger-swap" "handle-history" "set-timeout" {:upvalue-count 2 :arity 0 :constants ("get" "trigger-settle" "dispatch-trigger-events" "process-settle-hooks") :bytecode (18 0 1 1 0 52 0 0 2 33 19 0 20 2 0 18 1 18 0 1 1 0 52 0 0 2 48 2 32 1 0 2 5 20 3 0 18 1 49 1 50)} 20 "dom-dispatch" "sx:afterSwap" "dict" "target" "swap") :bytecode (20 0 0 16 4 48 1 17 6 16 6 1 2 0 52 1 0 2 17 7 16 7 33 8 0 16 7 21 3 0 32 1 0 2 5 20 4 0 16 0 16 6 1 5 0 52 1 0 2 48 2 5 20 6 0 16 0 16 6 16 5 48 3 5 16 6 1 7 0 52 1 0 2 33 17 0 20 8 0 16 6 1 7 0 52 1 0 2 49 1 32 31 1 16 6 1 9 0 52 1 0 2 33 8 0 20 10 0 49 0 32 11 1 16 6 1 11 0 52 1 0 2 33 17 0 20 12 0 16 6 1 11 0 52 1 0 2 49 1 32 238 0 16 6 1 13 0 52 1 0 2 33 17 0 20 14 0 16 6 1 13 0 52 1 0 2 48 1 32 7 0 20 15 0 16 0 48 1 17 7 20 16 0 16 6 1 17 0 52 1 0 2 6 34 11 0 5 20 18 0 16 0 1 19 0 48 2 20 20 0 20 21 0 48 0 1 22 0 48 2 48 2 17 8 16 8 1 23 0 52 1 0 2 17 9 16 8 1 24 0 52 1 0 2 17 10 16 6 1 25 0 52 1 0 2 6 34 4 0 5 1 26 0 17 11 16 11 1 28 0 52 27 0 2 33 18 0 20 29 0 16 0 16 7 16 5 16 9 16 10 48 5 32 15 0 20 30 0 16 0 16 7 16 5 16 9 16 10 48 5 5 20 4 0 16 0 16 6 1 31 0 52 1 0 2 48 2 5 20 32 0 16 0 16 1 16 6 48 3 5 20 33 0 51 34 0 1 6 1 0 1 35 0 48 2 5 20 36 0 16 0 1 37 0 1 39 0 16 7 1 40 0 16 9 52 38 0 4 49 3 50)} "handle-sx-response" {:upvalue-count 0 :arity 5 :constants ("strip-component-scripts" "extract-response-css" "trim" "not" "empty?" "sx-render" "dom-create-element" "div" "dom-append" "process-oob-swaps" {:upvalue-count 0 :arity 3 :constants ("dispose-islands-in" "swap-dom-nodes" "=" "innerHTML" "children-to-fragment" "post-swap") :bytecode (20 0 0 16 0 48 1 5 20 1 0 16 0 16 2 1 3 0 52 2 0 2 33 10 0 20 4 0 16 1 48 1 32 2 0 16 1 16 2 48 3 5 20 5 0 16 0 49 1 50)} "dom-get-attr" "sx-select" "select-from-container" "children-to-fragment" "dispose-islands-in" "with-transition" {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "post-swap" "=" "outerHTML" "dom-parent") :bytecode (20 0 0 18 0 18 1 18 2 48 3 17 0 20 1 0 18 2 1 3 0 52 2 0 2 33 17 0 20 4 0 16 0 6 34 3 0 5 18 0 48 1 32 9 0 16 0 6 34 3 0 5 18 0 49 1 50)}) :bytecode (20 0 0 16 2 48 1 17 5 20 1 0 16 5 48 1 17 6 16 6 52 2 0 1 17 7 16 7 52 4 0 1 52 3 0 1 33 106 0 20 5 0 16 7 48 1 17 8 20 6 0 1 7 0 2 48 2 17 9 20 8 0 16 9 16 8 48 2 5 20 9 0 16 9 51 10 0 48 2 5 20 11 0 16 0 1 12 0 48 2 17 10 16 10 33 12 0 20 13 0 16 9 16 10 48 2 32 7 0 20 14 0 16 9 48 1 17 11 20 15 0 16 1 48 1 5 20 16 0 16 4 51 17 0 1 1 1 11 1 3 49 2 32 1 0 2 50)} "handle-html-response" {:upvalue-count 0 :arity 5 :constants ("dom-parse-html-document" "dom-get-attr" "sx-select" "dispose-islands-in" "dom-create-element" "div" "dom-set-inner-html" "dom-body-inner-html" "process-oob-swaps" {:upvalue-count 0 :arity 3 :constants ("dispose-islands-in" "swap-dom-nodes" "post-swap") :bytecode (20 0 0 16 0 48 1 5 20 1 0 16 0 16 1 16 2 48 3 5 20 2 0 16 0 49 1 50)} "hoist-head-elements" "select-from-container" "with-transition" {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "log-info" "str" "swap-root: " "dom-tag-name" "nil" " target: " "post-swap") :bytecode (20 0 0 18 0 18 1 18 2 48 3 17 0 20 1 0 1 3 0 16 0 33 10 0 20 4 0 16 0 48 1 32 3 0 1 5 0 1 6 0 20 4 0 18 0 48 1 52 2 0 4 48 1 5 20 7 0 16 0 6 34 3 0 5 18 0 49 1 50)} {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "children-to-fragment" "post-swap") :bytecode (20 0 0 18 0 20 1 0 18 1 48 1 18 2 48 3 5 20 2 0 18 0 49 1 50)}) :bytecode (20 0 0 16 2 48 1 17 5 16 5 33 164 0 20 1 0 16 0 1 2 0 48 2 17 6 20 3 0 16 1 48 1 5 16 6 33 75 0 20 4 0 1 5 0 2 48 2 17 7 20 6 0 16 7 20 7 0 16 5 48 1 48 2 5 20 8 0 16 7 51 9 0 48 2 5 20 10 0 16 7 48 1 5 20 11 0 16 7 16 6 48 2 17 8 20 12 0 16 4 51 13 0 1 1 1 8 1 3 49 2 32 61 0 20 4 0 1 5 0 2 48 2 17 7 20 6 0 16 7 20 7 0 16 5 48 1 48 2 5 20 8 0 16 7 51 9 0 48 2 5 20 10 0 16 7 48 1 5 20 12 0 16 4 51 14 0 1 1 1 7 1 3 49 2 32 1 0 2 50)} "handle-retry" {:upvalue-count 0 :arity 5 :constants ("dom-get-attr" "sx-retry" "parse-retry-spec" "data-sx-retry-ms" "get" "start-ms" "parse-int" "dom-set-attr" "str" "next-retry-ms" "cap-ms" "set-timeout" {:upvalue-count 5 :arity 0 :constants ("do-fetch") :bytecode (20 0 0 18 0 18 1 18 2 18 3 18 4 49 5 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 5 20 2 0 16 5 48 1 17 6 16 6 33 97 0 20 0 0 16 0 1 3 0 48 2 6 34 10 0 5 16 6 1 5 0 52 4 0 2 17 7 16 7 16 6 1 5 0 52 4 0 2 52 6 0 2 17 8 20 7 0 16 0 1 3 0 20 9 0 16 8 16 6 1 10 0 52 4 0 2 48 2 52 8 0 1 48 3 5 20 11 0 51 12 0 1 0 1 1 1 2 1 3 1 4 16 8 49 2 32 1 0 2 50)} "bind-triggers" {:upvalue-count 0 :arity 2 :constants ("parse-trigger-spec" "dom-get-attr" "sx-trigger" "default-trigger" "dom-tag-name" "for-each" {:upvalue-count 2 :arity 1 :constants ("classify-trigger" "get" "modifiers" "=" "poll" "set-interval" {:upvalue-count 1 :arity 0 :constants ("execute-request") :bytecode (20 0 0 18 0 2 2 49 3 50)} "interval" "intersect" "observe-intersection" "delay" "load" "set-timeout" 0 "revealed" "event" "bind-event") :bytecode (20 0 0 16 0 48 1 17 1 16 0 1 2 0 52 1 0 2 17 2 16 1 1 4 0 52 3 0 2 33 22 0 20 5 0 51 6 0 0 0 16 2 1 7 0 52 1 0 2 49 2 32 152 0 16 1 1 8 0 52 3 0 2 33 25 0 20 9 0 18 0 51 6 0 0 0 4 16 2 1 10 0 52 1 0 2 49 4 32 115 0 16 1 1 11 0 52 3 0 2 33 30 0 20 12 0 51 6 0 0 0 16 2 1 10 0 52 1 0 2 6 34 4 0 5 1 13 0 49 2 32 73 0 16 1 1 14 0 52 3 0 2 33 25 0 20 9 0 18 0 51 6 0 0 0 3 16 2 1 10 0 52 1 0 2 49 4 32 36 0 16 1 1 15 0 52 3 0 2 33 23 0 20 16 0 18 0 16 0 1 15 0 52 1 0 2 16 2 18 1 49 4 32 1 0 2 50)}) :bytecode (20 0 0 20 1 0 16 0 1 2 0 48 2 48 1 6 34 13 0 5 20 3 0 20 4 0 16 0 48 1 48 1 17 2 51 6 0 1 0 1 1 16 2 52 5 0 2 50)} "bind-event" {:upvalue-count 0 :arity 4 :constants ("get" "from" "dom-query" "dom-add-listener" {:upvalue-count 5 :arity 1 :constants ("get" "changed" "dom-value" "=" "not" "click" "event-modifier-key?" "submit" "dom-has-attr?" "href" "prevent-default" "get-verb-info" "method" "GET" "delay" "try-client-route" "url-pathname" "url" "dom-get-attr" "sx-target" "browser-push-state" "browser-scroll-to" 0 "log-info" "str" "sx:route server fetch " "clear-timeout" "set-timeout" {:upvalue-count 1 :arity 0 :constants ("execute-request") :bytecode (20 0 0 18 0 2 2 49 3 50)} "execute-request") :bytecode (3 17 1 18 0 1 1 0 52 0 0 2 33 33 0 20 2 0 18 1 48 1 17 2 16 2 18 2 52 3 0 2 33 6 0 4 17 1 32 4 0 16 2 19 2 32 1 0 2 5 16 1 6 33 26 0 5 18 3 1 5 0 52 3 0 2 6 33 8 0 5 20 6 0 16 0 48 1 52 4 0 1 33 36 1 18 3 1 7 0 52 3 0 2 6 34 25 0 5 18 3 1 5 0 52 3 0 2 6 33 11 0 5 20 8 0 18 1 1 9 0 48 2 33 10 0 20 10 0 16 0 48 1 32 1 0 2 5 20 11 0 18 1 48 1 17 2 18 3 1 5 0 52 3 0 2 6 33 50 0 5 16 2 1 12 0 52 0 0 2 1 13 0 52 3 0 2 6 33 29 0 5 20 8 0 18 1 1 9 0 48 2 6 33 14 0 5 18 0 1 14 0 52 0 0 2 52 4 0 1 17 3 4 17 4 16 3 33 34 0 20 15 0 20 16 0 16 2 1 17 0 52 0 0 2 48 1 20 18 0 18 1 1 19 0 48 2 48 2 17 4 32 1 0 2 5 16 4 33 29 0 20 20 0 16 2 1 17 0 52 0 0 2 48 1 5 20 21 0 1 22 0 1 22 0 49 2 32 84 0 16 3 33 24 0 20 23 0 1 25 0 16 2 1 17 0 52 0 0 2 52 24 0 2 48 1 32 1 0 2 5 18 0 1 14 0 52 0 0 2 33 32 0 20 26 0 18 4 48 1 5 20 27 0 51 28 0 0 1 18 0 1 14 0 52 0 0 2 48 2 19 4 32 9 0 20 29 0 18 1 2 2 49 3 32 1 0 2 50)} "once" "dict") :bytecode (2 17 4 2 17 5 16 2 1 1 0 52 0 0 2 33 17 0 20 2 0 16 2 1 1 0 52 0 0 2 48 1 32 2 0 16 0 17 6 16 6 33 49 0 20 3 0 16 6 16 1 51 4 0 1 2 1 0 1 5 1 1 1 4 16 2 1 5 0 52 0 0 2 33 11 0 1 5 0 3 52 6 0 2 32 1 0 2 49 4 32 1 0 2 50)} "post-swap" {:upvalue-count 0 :arity 1 :constants ("log-info" "str" "post-swap: root=" "dom-tag-name" "nil" "activate-scripts" "sx-process-scripts" "sx-hydrate" "sx-hydrate-islands" "run-post-render-hooks" "process-elements") :bytecode (20 0 0 1 2 0 16 0 33 10 0 20 3 0 16 0 48 1 32 3 0 1 4 0 52 1 0 2 48 1 5 20 5 0 16 0 48 1 5 20 6 0 16 0 48 1 5 20 7 0 16 0 48 1 5 20 8 0 16 0 48 1 5 20 9 0 48 0 5 20 10 0 16 0 49 1 50)} "process-settle-hooks" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-on-settle" "not" "empty?" "sx-parse" "for-each" {:upvalue-count 0 :arity 1 :constants ("eval-expr" "env-extend" "dict") :bytecode (20 0 0 16 0 20 1 0 52 2 0 0 48 1 49 2 50)}) :bytecode (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 21 0 20 4 0 16 1 48 1 17 2 51 6 0 16 2 52 5 0 2 32 1 0 2 50)} "activate-scripts" {:upvalue-count 0 :arity 1 :constants ("dom-query-all" "script" "for-each" {:upvalue-count 0 :arity 1 :constants ("not" "dom-has-attr?" "data-components" "data-sx-activated" "create-script-clone" "dom-set-attr" "true" "dom-replace-child" "dom-parent") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 6 33 15 0 5 20 1 0 16 0 1 3 0 48 2 52 0 0 1 33 42 0 20 4 0 16 0 48 1 17 1 20 5 0 16 1 1 3 0 1 6 0 48 3 5 20 7 0 20 8 0 16 0 48 1 16 1 16 0 49 3 32 1 0 2 50)}) :bytecode (16 0 33 24 0 20 0 0 16 0 1 1 0 48 2 17 1 51 3 0 16 1 52 2 0 2 32 1 0 2 50)} "process-oob-swaps" {:upvalue-count 0 :arity 2 :constants ("find-oob-swaps" "for-each" {:upvalue-count 1 :arity 1 :constants ("get" "target-id" "dom-query-by-id" "element" "swap-type" "dom-parent" "dom-remove-child") :bytecode (16 0 1 1 0 52 0 0 2 17 1 20 2 0 16 1 48 1 17 2 16 0 1 3 0 52 0 0 2 17 3 16 0 1 4 0 52 0 0 2 17 4 20 5 0 16 3 48 1 33 17 0 20 6 0 20 5 0 16 3 48 1 16 3 48 2 32 1 0 2 5 16 2 33 13 0 18 0 16 2 16 3 16 4 49 3 32 1 0 2 50)}) :bytecode (20 0 0 16 0 48 1 17 2 51 2 0 1 1 16 2 52 1 0 2 50)} "hoist-head-elements" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("dom-parent" "dom-remove-child" "dom-append-to-head") :bytecode (20 0 0 16 0 48 1 33 17 0 20 1 0 20 0 0 16 0 48 1 16 0 48 2 32 1 0 2 5 20 2 0 16 0 49 1 50)} "dom-query-all" "style[data-sx-css]" "link[rel=\"stylesheet\"]") :bytecode (51 1 0 20 2 0 16 0 1 3 0 48 2 52 0 0 2 5 51 1 0 20 2 0 16 0 1 4 0 48 2 52 0 0 2 50)} "process-boosted" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("boost-descendants") :bytecode (20 0 0 16 0 49 1 50)} "dom-query-all" "dom-body" "[sx-boost]") :bytecode (51 1 0 20 2 0 16 0 6 34 6 0 5 20 3 0 48 0 1 4 0 48 2 52 0 0 2 50)} "boost-descendants" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-boost" "for-each" {:upvalue-count 1 :arity 1 :constants ("not" "is-processed?" "boost" "should-boost-link?" "mark-processed!" "dom-has-attr?" "sx-target" "=" "true" "dom-set-attr" "sx-swap" "innerHTML" "sx-push-url" "bind-client-route-link" "dom-get-attr" "href") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 6 33 8 0 5 20 3 0 16 0 48 1 33 160 0 20 4 0 16 0 1 2 0 48 2 5 20 5 0 16 0 1 6 0 48 2 52 0 0 1 6 33 21 0 5 18 0 6 33 14 0 5 18 0 1 8 0 52 7 0 2 52 0 0 1 33 15 0 20 9 0 16 0 1 6 0 18 0 48 3 32 1 0 2 5 20 5 0 16 0 1 10 0 48 2 52 0 0 1 33 16 0 20 9 0 16 0 1 10 0 1 11 0 48 3 32 1 0 2 5 20 5 0 16 0 1 12 0 48 2 52 0 0 1 33 16 0 20 9 0 16 0 1 12 0 1 8 0 48 3 32 1 0 2 5 20 13 0 16 0 20 14 0 16 0 1 15 0 48 2 49 2 32 1 0 2 50)} "dom-query-all" "a[href]" {:upvalue-count 1 :arity 1 :constants ("not" "is-processed?" "boost" "should-boost-form?" "mark-processed!" "upper" "dom-get-attr" "method" "GET" "action" "browser-location-href" "dom-has-attr?" "sx-target" "=" "true" "dom-set-attr" "sx-swap" "innerHTML" "bind-boost-form") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 6 33 8 0 5 20 3 0 16 0 48 1 33 165 0 20 4 0 16 0 1 2 0 48 2 5 20 6 0 16 0 1 7 0 48 2 6 34 4 0 5 1 8 0 52 5 0 1 17 1 20 6 0 16 0 1 9 0 48 2 6 34 6 0 5 20 10 0 48 0 17 2 20 11 0 16 0 1 12 0 48 2 52 0 0 1 6 33 21 0 5 18 0 6 33 14 0 5 18 0 1 14 0 52 13 0 2 52 0 0 1 33 15 0 20 15 0 16 0 1 12 0 18 0 48 3 32 1 0 2 5 20 11 0 16 0 1 16 0 48 2 52 0 0 1 33 16 0 20 15 0 16 0 1 16 0 1 17 0 48 3 32 1 0 2 5 20 18 0 16 0 16 1 16 2 49 3 32 1 0 2 50)} "form") :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 51 3 0 1 1 20 4 0 16 0 1 5 0 48 2 52 2 0 2 5 51 6 0 1 1 20 4 0 16 0 1 7 0 48 2 52 2 0 2 50)} "_page-data-cache" "_page-data-cache-ttl" 30000 "page-data-cache-key" {:upvalue-count 0 :arity 2 :constants ("nil?" "empty?" "keys" "list" "for-each" {:upvalue-count 2 :arity 1 :constants ("append!" "str" "=" "get") :bytecode (20 0 0 18 0 16 0 1 2 0 18 1 16 0 52 3 0 2 52 1 0 3 49 2 50)} "str" ":" "join" "&") :bytecode (16 0 17 2 16 1 52 0 0 1 6 34 11 0 5 16 1 52 2 0 1 52 1 0 1 33 5 0 16 2 32 42 0 52 3 0 0 17 3 51 5 0 1 3 1 1 16 1 52 2 0 1 52 4 0 2 5 16 2 1 7 0 1 9 0 16 3 52 8 0 2 52 6 0 3 50)} "page-data-cache-get" {:upvalue-count 0 :arity 1 :constants ("get" "_page-data-cache" "nil?" ">" "-" "now-ms" "ts" "_page-data-cache-ttl" "dict-set!" "data") :bytecode (20 1 0 16 0 52 0 0 2 17 1 16 1 52 2 0 1 33 4 0 2 32 52 0 20 5 0 48 0 16 1 1 6 0 52 0 0 2 52 4 0 2 20 7 0 52 3 0 2 33 15 0 20 1 0 16 0 2 52 8 0 3 5 2 32 9 0 16 1 1 9 0 52 0 0 2 50)} "page-data-cache-set" {:upvalue-count 0 :arity 2 :constants ("dict-set!" "_page-data-cache" "data" "ts" "now-ms") :bytecode (20 1 0 16 0 1 2 0 16 1 1 3 0 20 4 0 48 0 65 2 0 52 0 0 3 50)} "invalidate-page-cache" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 1 :arity 1 :constants ("=" "starts-with?" "str" ":" "dict-set!" "_page-data-cache") :bytecode (16 0 18 0 52 0 0 2 6 34 16 0 5 16 0 18 0 1 3 0 52 2 0 2 52 1 0 2 33 13 0 20 5 0 16 0 2 52 4 0 3 32 1 0 2 50)} "keys" "_page-data-cache" "sw-post-message" "type" "invalidate" "page" "log-info" "str" "sx:cache invalidate ") :bytecode (51 1 0 1 0 20 3 0 52 2 0 1 52 0 0 2 5 20 4 0 1 5 0 1 6 0 1 7 0 16 0 65 2 0 48 1 5 20 8 0 1 10 0 16 0 52 9 0 2 49 1 50)} "invalidate-all-page-cache" {:upvalue-count 0 :arity 0 :constants ("dict" "_page-data-cache" "sw-post-message" "type" "invalidate" "page" "*" "log-info" "sx:cache invalidate *") :bytecode (52 0 0 0 21 1 0 5 20 2 0 1 3 0 1 4 0 1 5 0 1 6 0 65 2 0 48 1 5 20 7 0 1 8 0 49 1 50)} "update-page-cache" {:upvalue-count 0 :arity 2 :constants ("page-data-cache-key" "dict" "page-data-cache-set" "log-info" "str" "sx:cache update ") :bytecode (20 0 0 16 0 52 1 0 0 48 2 17 2 20 2 0 16 2 16 1 48 2 5 20 3 0 1 5 0 16 0 52 4 0 2 49 1 50)} "process-cache-directives" {:upvalue-count 0 :arity 3 :constants ("dom-get-attr" "sx-cache-invalidate" "=" "*" "invalidate-all-page-cache" "invalidate-page-cache" "get" "cache-invalidate" "cache-update" "parse-sx-data" "update-page-cache") :bytecode (20 0 0 16 0 1 1 0 48 2 17 3 16 3 33 30 0 16 3 1 3 0 52 2 0 2 33 8 0 20 4 0 48 0 32 7 0 20 5 0 16 3 48 1 32 1 0 2 5 16 1 1 7 0 52 6 0 2 17 3 16 3 33 30 0 16 3 1 3 0 52 2 0 2 33 8 0 20 4 0 48 0 32 7 0 20 5 0 16 3 48 1 32 1 0 2 5 16 1 1 8 0 52 6 0 2 17 3 16 3 33 30 0 20 9 0 16 2 48 1 17 4 16 4 33 12 0 20 10 0 16 3 16 4 49 2 32 1 0 2 32 1 0 2 50)} "_optimistic-snapshots" "optimistic-cache-update" {:upvalue-count 0 :arity 2 :constants ("page-data-cache-get" "dict-set!" "_optimistic-snapshots" "page-data-cache-set") :bytecode (20 0 0 16 0 48 1 17 2 16 2 33 35 0 16 1 16 2 48 1 17 3 20 2 0 16 0 16 2 52 1 0 3 5 20 3 0 16 0 16 3 48 2 5 16 3 32 1 0 2 50)} "optimistic-cache-revert" {:upvalue-count 0 :arity 1 :constants ("get" "_optimistic-snapshots" "page-data-cache-set" "dict-delete!") :bytecode (20 1 0 16 0 52 0 0 2 17 1 16 1 33 25 0 20 2 0 16 0 16 1 48 2 5 20 1 0 16 0 52 3 0 2 5 16 1 32 1 0 2 50)} "optimistic-cache-confirm" {:upvalue-count 0 :arity 1 :constants ("dict-delete!" "_optimistic-snapshots") :bytecode (20 1 0 16 0 52 0 0 2 50)} "submit-mutation" {:upvalue-count 0 :arity 6 :constants ("page-data-cache-key" "optimistic-cache-update" "try-rerender-page" "execute-action" {:upvalue-count 4 :arity 1 :constants ("page-data-cache-set" "optimistic-cache-confirm" "try-rerender-page" "log-info" "str" "sx:optimistic confirmed " "confirmed") :bytecode (16 0 33 12 0 20 0 0 18 0 16 0 48 2 32 1 0 2 5 20 1 0 18 0 48 1 5 16 0 33 14 0 20 2 0 18 1 18 2 16 0 48 3 32 1 0 2 5 20 3 0 1 5 0 18 1 52 4 0 2 48 1 5 18 3 33 10 0 18 3 1 6 0 49 1 32 1 0 2 50)} {:upvalue-count 4 :arity 1 :constants ("optimistic-cache-revert" "try-rerender-page" "log-warn" "str" "sx:optimistic reverted " ": " "reverted") :bytecode (20 0 0 18 0 48 1 17 1 16 1 33 14 0 20 1 0 18 1 18 2 16 1 48 3 32 1 0 2 5 20 2 0 1 4 0 18 1 1 5 0 16 0 52 3 0 4 48 1 5 18 3 33 10 0 18 3 1 6 0 49 1 32 1 0 2 50)}) :bytecode (20 0 0 16 0 16 1 48 2 17 6 20 1 0 16 6 16 4 48 2 17 7 16 7 33 14 0 20 2 0 16 0 16 1 16 7 48 3 32 1 0 2 5 20 3 0 16 2 16 3 51 4 0 1 6 1 0 1 1 1 5 51 5 0 1 6 1 0 1 1 1 5 49 4 50)} "_is-online" "_offline-queue" "list" "offline-is-online?" {:upvalue-count 0 :arity 0 :constants ("_is-online") :bytecode (20 0 0 50)} "offline-set-online!" {:upvalue-count 0 :arity 1 :constants ("_is-online") :bytecode (16 0 21 0 0 50)} "offline-queue-mutation" {:upvalue-count 0 :arity 5 :constants ("page-data-cache-key" "dict" "action" "payload" "page" "params" "timestamp" "now-ms" "status" "pending" "append!" "_offline-queue" "optimistic-cache-update" "try-rerender-page" "log-info" "str" "sx:offline queued " " (" "len" " pending)") :bytecode (20 0 0 16 2 16 3 48 2 17 5 1 2 0 16 0 1 3 0 16 1 1 4 0 16 2 1 5 0 16 3 1 6 0 20 7 0 48 0 1 8 0 1 9 0 52 1 0 12 17 6 20 10 0 20 11 0 16 6 48 2 5 20 12 0 16 5 16 4 48 2 17 7 16 7 33 14 0 20 13 0 16 2 16 3 16 7 48 3 32 1 0 2 5 20 14 0 1 16 0 16 0 1 17 0 20 11 0 52 18 0 1 1 19 0 52 15 0 5 48 1 5 16 6 50)} "offline-sync" {:upvalue-count 0 :arity 0 :constants ("filter" {:upvalue-count 0 :arity 1 :constants ("=" "get" "status" "pending") :bytecode (16 0 1 2 0 52 1 0 2 1 3 0 52 0 0 2 50)} "_offline-queue" "not" "empty?" "log-info" "str" "sx:offline syncing " "len" " mutations" "for-each" {:upvalue-count 0 :arity 1 :constants ("execute-action" "get" "action" "payload" {:upvalue-count 1 :arity 1 :constants ("dict-set!" "status" "synced" "log-info" "str" "sx:offline synced " "get" "action") :bytecode (18 0 1 1 0 1 2 0 52 0 0 3 5 20 3 0 1 5 0 18 0 1 7 0 52 6 0 2 52 4 0 2 49 1 50)} {:upvalue-count 1 :arity 1 :constants ("dict-set!" "status" "failed" "log-warn" "str" "sx:offline sync failed " "get" "action" ": ") :bytecode (18 0 1 1 0 1 2 0 52 0 0 3 5 20 3 0 1 5 0 18 0 1 7 0 52 6 0 2 1 8 0 16 0 52 4 0 4 49 1 50)}) :bytecode (20 0 0 16 0 1 2 0 52 1 0 2 16 0 1 3 0 52 1 0 2 51 4 0 1 0 51 5 0 1 0 49 4 50)}) :bytecode (51 1 0 20 2 0 52 0 0 2 17 0 16 0 52 4 0 1 52 3 0 1 33 34 0 20 5 0 1 7 0 16 0 52 8 0 1 1 9 0 52 6 0 3 48 1 5 51 11 0 16 0 52 10 0 2 32 1 0 2 50)} "offline-pending-count" {:upvalue-count 0 :arity 0 :constants ("len" "filter" {:upvalue-count 0 :arity 1 :constants ("=" "get" "status" "pending") :bytecode (16 0 1 2 0 52 1 0 2 1 3 0 52 0 0 2 50)} "_offline-queue") :bytecode (51 2 0 20 3 0 52 1 0 2 52 0 0 1 50)} "offline-aware-mutation" {:upvalue-count 0 :arity 6 :constants ("_is-online" "submit-mutation" "offline-queue-mutation" "queued") :bytecode (20 0 0 33 20 0 20 1 0 16 0 16 1 16 2 16 3 16 4 16 5 49 6 32 32 0 20 2 0 16 2 16 3 16 0 16 1 16 4 48 5 5 16 5 33 10 0 16 5 1 3 0 49 1 32 1 0 2 50)} "current-page-layout" {:upvalue-count 0 :arity 0 :constants ("url-pathname" "browser-location-href" "find-matching-route" "_page-routes" "nil?" "" "get" "layout") :bytecode (20 0 0 20 1 0 48 0 48 1 17 0 20 2 0 16 0 20 3 0 48 2 17 1 16 1 52 4 0 1 33 6 0 1 5 0 32 17 0 16 1 1 7 0 52 6 0 2 6 34 4 0 5 1 5 0 50)} "swap-rendered-content" {:upvalue-count 0 :arity 3 :constants ("dispose-islands-in" "dom-set-text-content" "" "dom-append" "hoist-head-elements-full" "process-elements" "sx-hydrate-elements" "sx-hydrate-islands" "run-post-render-hooks" "dom-dispatch" "sx:clientRoute" "dict" "pathname" "log-info" "str" "sx:route client ") :bytecode (20 0 0 16 0 48 1 5 20 1 0 16 0 1 2 0 48 2 5 20 3 0 16 0 16 1 48 2 5 20 4 0 16 0 48 1 5 20 5 0 16 0 48 1 5 20 6 0 16 0 48 1 5 20 7 0 16 0 48 1 5 20 8 0 48 0 5 20 9 0 16 0 1 10 0 1 12 0 16 2 52 11 0 2 48 3 5 20 13 0 1 15 0 16 2 52 14 0 2 49 1 50)} "resolve-route-target" {:upvalue-count 0 :arity 1 :constants ("not" "=" "true" "dom-query") :bytecode (16 0 6 33 14 0 5 16 0 1 2 0 52 1 0 2 52 0 0 1 33 10 0 20 3 0 16 0 49 1 32 1 0 2 50)} "deps-satisfied?" {:upvalue-count 0 :arity 1 :constants ("get" "deps" "loaded-component-names" "nil?" "empty?" "every?" {:upvalue-count 1 :arity 1 :constants ("contains?") :bytecode (18 0 16 0 52 0 0 2 50)}) :bytecode (16 0 1 1 0 52 0 0 2 17 1 20 2 0 48 0 17 2 16 1 52 3 0 1 6 34 7 0 5 16 1 52 4 0 1 33 4 0 3 32 11 0 51 6 0 1 2 16 1 52 5 0 2 50)} "try-client-route" {:upvalue-count 0 :arity 2 :constants ("find-matching-route" "_page-routes" "nil?" "log-info" "str" "sx:route no match (" "len" " routes) " "get" "layout" "" "current-page-layout" "not" "=" "sx:route server (layout: " " -> " ") " "content" "closure" "params" "name" "empty?" "log-warn" "sx:route no content for " "resolve-route-target" "sx:route target not found: " "deps-satisfied?" "sx:route deps miss for " "io-deps" "render-plan" "server" "list" "client" "sx:route plan " " — " " server, " " client" "register-io-deps" "stream" "sx:route streaming " "fetch-streaming" "build-request-headers" "loaded-component-names" "_css-hash" "has-data" "page-data-cache-key" "page-data-cache-get" "merge" "sx:route client+cache+async " "try-async-eval-content" {:upvalue-count 2 :arity 1 :constants ("nil?" "log-warn" "str" "sx:route cache+async eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (16 0 52 0 0 1 33 48 0 20 1 0 1 3 0 18 0 1 4 0 52 2 0 3 48 1 5 20 5 0 18 1 18 0 20 6 0 18 1 20 7 0 48 0 20 8 0 48 3 1 9 0 49 4 32 11 0 20 10 0 18 1 16 0 18 0 49 3 50)} "try-eval-content" "sx:route cached eval failed for " "sx:route client+cache " "swap-rendered-content" "sx:route client+data " "resolve-page-data" {:upvalue-count 7 :arity 1 :constants ("page-data-cache-set" "merge" "try-async-eval-content" {:upvalue-count 2 :arity 1 :constants ("nil?" "log-warn" "str" "sx:route data+async eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (16 0 52 0 0 1 33 48 0 20 1 0 1 3 0 18 0 1 4 0 52 2 0 3 48 1 5 20 5 0 18 1 18 0 20 6 0 18 1 20 7 0 48 0 20 8 0 48 3 1 9 0 49 4 32 11 0 20 10 0 18 1 16 0 18 0 49 3 50)} "try-eval-content" "nil?" "log-warn" "str" "sx:route data eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (20 0 0 18 0 16 0 48 2 5 18 1 18 2 16 0 52 1 0 3 17 1 18 3 33 19 0 20 2 0 18 4 16 1 51 3 0 0 5 0 6 49 3 32 79 0 20 4 0 18 4 16 1 48 2 17 2 16 2 52 5 0 1 33 48 0 20 6 0 1 8 0 18 5 1 9 0 52 7 0 3 48 1 5 20 10 0 18 6 18 5 20 11 0 18 6 20 12 0 48 0 20 13 0 48 3 1 14 0 49 4 32 11 0 20 15 0 18 6 16 2 18 5 49 3 50)} "sx:route client+async " {:upvalue-count 2 :arity 1 :constants ("nil?" "log-warn" "str" "sx:route async eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (16 0 52 0 0 1 33 48 0 20 1 0 1 3 0 18 0 1 4 0 52 2 0 3 48 1 5 20 5 0 18 1 18 0 20 6 0 18 1 20 7 0 48 0 20 8 0 48 3 1 9 0 49 4 32 11 0 20 10 0 18 1 16 0 18 0 49 3 50)} "sx:route server (eval failed) ") :bytecode (20 0 0 16 0 20 1 0 48 2 17 2 16 2 52 2 0 1 33 29 0 20 3 0 1 5 0 20 1 0 52 6 0 1 1 7 0 16 0 52 4 0 4 48 1 5 4 32 233 2 16 2 1 9 0 52 8 0 2 6 34 4 0 5 1 10 0 17 3 20 11 0 48 0 17 4 16 3 16 4 52 13 0 2 52 12 0 1 33 29 0 20 3 0 1 14 0 16 4 1 15 0 16 3 1 16 0 16 0 52 4 0 6 48 1 5 4 32 163 2 16 2 1 17 0 52 8 0 2 17 5 16 2 1 18 0 52 8 0 2 6 34 4 0 5 65 0 0 17 6 16 2 1 19 0 52 8 0 2 17 7 16 2 1 20 0 52 8 0 2 17 8 16 5 52 2 0 1 6 34 7 0 5 16 5 52 21 0 1 33 19 0 20 22 0 1 23 0 16 0 52 4 0 2 48 1 5 4 32 72 2 20 24 0 16 1 48 1 17 9 16 9 52 2 0 1 33 19 0 20 22 0 1 25 0 16 1 52 4 0 2 48 1 5 4 32 35 2 20 26 0 16 2 48 1 52 12 0 1 33 19 0 20 3 0 1 27 0 16 8 52 4 0 2 48 1 5 4 32 2 2 16 2 1 28 0 52 8 0 2 17 10 16 10 6 33 11 0 5 16 10 52 21 0 1 52 12 0 1 17 11 16 2 1 29 0 52 8 0 2 17 12 16 12 33 78 0 16 12 1 30 0 52 8 0 2 6 34 5 0 5 52 31 0 0 17 13 16 12 1 32 0 52 8 0 2 6 34 5 0 5 52 31 0 0 17 14 20 3 0 1 33 0 16 8 1 34 0 16 13 52 6 0 1 1 35 0 16 14 52 6 0 1 1 36 0 52 4 0 7 48 1 32 1 0 2 5 16 11 33 10 0 20 37 0 16 10 48 1 32 1 0 2 5 16 2 1 38 0 52 8 0 2 33 44 0 20 3 0 1 39 0 16 0 52 4 0 2 48 1 5 20 40 0 16 9 16 0 20 41 0 16 9 20 42 0 48 0 20 43 0 48 3 48 3 5 3 32 59 1 16 2 1 44 0 52 8 0 2 33 194 0 20 45 0 16 8 16 7 48 2 17 13 20 46 0 16 13 48 1 17 14 16 14 33 123 0 16 6 16 7 16 14 52 47 0 3 17 15 16 11 33 36 0 20 3 0 1 48 0 16 0 52 4 0 2 48 1 5 20 49 0 16 5 16 15 51 50 0 1 0 1 9 48 3 5 3 32 67 0 20 51 0 16 5 16 15 48 2 17 16 16 16 52 2 0 1 33 19 0 20 22 0 1 52 0 16 0 52 4 0 2 48 1 5 4 32 28 0 20 3 0 1 53 0 16 0 52 4 0 2 48 1 5 20 54 0 16 9 16 16 16 0 48 3 5 3 32 43 0 20 3 0 1 55 0 16 0 52 4 0 2 48 1 5 20 56 0 16 8 16 7 51 57 0 1 13 1 6 1 7 1 11 1 5 1 0 1 9 48 3 5 3 32 109 0 16 11 33 42 0 20 3 0 1 58 0 16 0 52 4 0 2 48 1 5 20 49 0 16 5 16 6 16 7 52 47 0 2 51 59 0 1 0 1 9 48 3 5 3 32 62 0 16 6 16 7 52 47 0 2 17 13 20 51 0 16 5 16 13 48 2 17 14 16 14 52 2 0 1 33 19 0 20 3 0 1 60 0 16 0 52 4 0 2 48 1 5 4 32 13 0 20 54 0 16 9 16 14 16 0 48 3 5 3 50)} "bind-client-route-link" {:upvalue-count 0 :arity 2 :constants ("bind-client-route-click" {:upvalue-count 2 :arity 0 :constants ("bind-boost-link") :bytecode (20 0 0 18 0 18 1 49 2 50)}) :bytecode (20 0 0 16 0 16 1 51 1 0 1 0 1 1 49 3 50)} "process-sse" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("not" "is-processed?" "sse" "mark-processed!" "bind-sse") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 21 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 49 1 32 1 0 2 50)} "dom-query-all" "dom-body" "[sx-sse]") :bytecode (51 1 0 20 2 0 16 0 6 34 6 0 5 20 3 0 48 0 1 4 0 48 2 52 0 0 2 50)} "bind-sse" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-sse" "event-source-connect" "parse-sse-swap" "event-source-listen" {:upvalue-count 1 :arity 1 :constants ("bind-sse-swap") :bytecode (20 0 0 18 0 16 0 49 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 33 37 0 20 2 0 16 1 16 0 48 2 17 2 20 3 0 16 0 48 1 17 3 20 4 0 16 2 16 3 51 5 0 1 0 49 3 32 1 0 2 50)} "bind-sse-swap" {:upvalue-count 0 :arity 2 :constants ("resolve-target" "parse-swap-spec" "dom-get-attr" "sx-swap" "dom-has-class?" "dom-body" "sx-transitions" "get" "style" "transition" "trim" "not" "empty?" "dispose-islands-in" "starts-with?" "(" "sx-render" "dom-create-element" "div" "dom-append" "with-transition" {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "children-to-fragment" "post-swap") :bytecode (20 0 0 18 0 20 1 0 18 1 48 1 18 2 48 3 5 20 2 0 18 0 49 1 50)} {:upvalue-count 3 :arity 0 :constants ("swap-html-string" "post-swap") :bytecode (20 0 0 18 0 18 1 18 2 48 3 5 20 1 0 18 0 49 1 50)}) :bytecode (20 0 0 16 0 48 1 17 2 20 1 0 20 2 0 16 0 1 3 0 48 2 20 4 0 20 5 0 48 0 1 6 0 48 2 48 2 17 3 16 3 1 8 0 52 7 0 2 17 4 16 3 1 9 0 52 7 0 2 17 5 16 1 52 10 0 1 17 6 16 6 52 12 0 1 52 11 0 1 33 88 0 20 13 0 16 2 48 1 5 16 6 1 15 0 52 14 0 2 33 49 0 20 16 0 16 6 48 1 17 7 20 17 0 1 18 0 2 48 2 17 8 20 19 0 16 8 16 7 48 2 5 20 20 0 16 5 51 21 0 1 2 1 8 1 4 49 2 32 16 0 20 20 0 16 5 51 22 0 1 2 1 6 1 4 49 2 32 1 0 2 50)} "bind-inline-handlers" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 1 :arity 1 :constants ("first" "nth" 1 "starts-with?" "sx-on:" "slice" 6 "not" "is-processed?" "str" "on:" "mark-processed!" "sx-parse" "dom-on" {:upvalue-count 2 :arity 1 :constants ("env-extend" "dict" "env-bind!" "event" "this" "detail" "event-detail" "for-each" {:upvalue-count 1 :arity 1 :constants ("eval-expr") :bytecode (20 0 0 16 0 18 0 49 2 50)}) :bytecode (20 0 0 52 1 0 0 48 1 17 1 20 2 0 16 1 1 3 0 16 0 48 3 5 20 2 0 16 1 1 4 0 18 0 48 3 5 20 2 0 16 1 1 5 0 20 6 0 16 0 48 1 48 3 5 51 8 0 1 1 18 1 52 7 0 2 50)}) :bytecode (16 0 52 0 0 1 17 1 16 0 1 2 0 52 1 0 2 17 2 16 1 1 4 0 52 3 0 2 33 83 0 16 1 1 6 0 52 5 0 2 17 3 20 8 0 18 0 1 10 0 16 3 52 9 0 2 48 2 52 7 0 1 33 45 0 20 11 0 18 0 1 10 0 16 3 52 9 0 2 48 2 5 20 12 0 16 2 48 1 17 4 20 13 0 18 0 16 3 51 14 0 0 0 1 4 49 3 32 1 0 2 32 1 0 2 50)} "dom-attr-list") :bytecode (51 1 0 1 0 20 2 0 16 0 48 1 52 0 0 2 50)} "dom-query-all" "dom-body" "[sx-on\\:]") :bytecode (51 1 0 20 2 0 16 0 6 34 6 0 5 20 3 0 48 0 1 4 0 48 2 52 0 0 2 50)} "bind-preload-for" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-preload" "=" "mousedown" "list" "touchstart" "mouseover" 0 100 "bind-preload" {:upvalue-count 1 :arity 0 :constants ("get-verb-info" "do-preload" "get" "url" "build-request-headers" "loaded-component-names" "_css-hash") :bytecode (20 0 0 18 0 48 1 17 0 16 0 33 32 0 20 1 0 16 0 1 3 0 52 2 0 2 20 4 0 18 0 20 5 0 48 0 20 6 0 48 3 49 2 32 1 0 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 33 76 0 16 1 1 3 0 52 2 0 2 33 13 0 1 3 0 1 5 0 52 4 0 2 32 7 0 1 6 0 52 4 0 1 17 2 16 1 1 3 0 52 2 0 2 33 6 0 1 7 0 32 3 0 1 8 0 17 3 20 9 0 16 0 16 2 16 3 51 10 0 1 0 49 4 32 1 0 2 50)} "do-preload" {:upvalue-count 0 :arity 2 :constants ("nil?" "preload-cache-get" "_preload-cache" "fetch-preload") :bytecode (20 1 0 20 2 0 16 0 48 2 52 0 0 1 33 15 0 20 3 0 16 0 16 1 20 2 0 49 3 32 1 0 2 50)} "VERB_SELECTOR" "str" "[sx-get],[sx-post],[sx-put],[sx-delete],[sx-patch]" "process-elements" {:upvalue-count 0 :arity 1 :constants ("dom-query-all" "dom-body" "VERB_SELECTOR" "for-each" {:upvalue-count 0 :arity 1 :constants ("not" "is-processed?" "verb" "mark-processed!" "process-one") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 21 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 49 1 32 1 0 2 50)} "process-boosted" "process-sse" "bind-inline-handlers" "process-emit-elements") :bytecode (20 0 0 16 0 6 34 6 0 5 20 1 0 48 0 20 2 0 48 2 17 1 51 4 0 16 1 52 3 0 2 5 20 5 0 16 0 48 1 5 20 6 0 16 0 48 1 5 20 7 0 16 0 48 1 5 20 8 0 16 0 49 1 50)} "process-one" {:upvalue-count 0 :arity 1 :constants ("get-verb-info" "not" "dom-has-attr?" "sx-disable" "bind-triggers" "bind-preload-for") :bytecode (20 0 0 16 0 48 1 17 1 16 1 33 41 0 20 2 0 16 0 1 3 0 48 2 52 1 0 1 33 20 0 20 4 0 16 0 16 1 48 2 5 20 5 0 16 0 49 1 32 1 0 2 32 1 0 2 50)} "process-emit-elements" {:upvalue-count 0 :arity 1 :constants ("dom-query-all" "dom-body" "[data-sx-emit]" "for-each" {:upvalue-count 0 :arity 1 :constants ("not" "is-processed?" "emit" "mark-processed!" "dom-get-attr" "data-sx-emit" "dom-on" "click" {:upvalue-count 2 :arity 1 :constants ("dom-get-attr" "data-sx-emit-detail" "json-parse" "dict" "dom-dispatch") :bytecode (20 0 0 18 0 1 1 0 48 2 17 1 16 1 33 10 0 20 2 0 16 1 48 1 32 4 0 52 3 0 0 17 2 20 4 0 18 0 18 1 16 2 49 3 50)}) :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 52 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 1 5 0 48 2 17 1 16 1 33 20 0 20 6 0 16 0 1 7 0 51 8 0 1 0 1 1 49 3 32 1 0 2 32 1 0 2 50)}) :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)} "handle-popstate" {:upvalue-count 0 :arity 1 :constants ("browser-location-href" "dom-query" "[sx-boost]" "dom-get-attr" "sx-boost" "not" "=" "true" "#main-panel" "url-pathname" "try-client-route" "browser-scroll-to" 0 "build-request-headers" "loaded-component-names" "_css-hash" "fetch-and-restore") :bytecode (20 0 0 48 0 17 1 20 1 0 1 2 0 48 1 17 2 16 2 33 44 0 20 3 0 16 2 1 4 0 48 2 17 4 16 4 6 33 14 0 5 16 4 1 7 0 52 6 0 2 52 5 0 1 33 5 0 16 4 32 1 0 2 32 1 0 2 17 3 16 3 6 34 4 0 5 1 8 0 17 3 20 1 0 16 3 48 1 17 4 20 9 0 16 1 48 1 17 5 16 4 33 58 0 20 10 0 16 5 16 3 48 2 33 13 0 20 11 0 1 12 0 16 0 49 2 32 30 0 20 13 0 16 4 20 14 0 48 0 20 15 0 48 3 17 6 20 16 0 16 4 16 1 16 6 16 0 49 4 32 1 0 2 50)} "engine-init" {:upvalue-count 0 :arity 0 :constants ("init-css-tracking" "sx-process-scripts" "sx-hydrate" "process-elements") :bytecode (20 0 0 48 0 5 20 1 0 2 48 1 5 20 2 0 2 48 1 5 20 3 0 2 49 1 50)}) :bytecode (52 1 0 0 128 0 0 5 1 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 51 19 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 51 33 0 128 32 0 5 51 35 0 128 34 0 5 51 37 0 128 36 0 5 52 1 0 0 128 38 0 5 1 40 0 128 39 0 5 51 42 0 128 41 0 5 51 44 0 128 43 0 5 51 46 0 128 45 0 5 51 48 0 128 47 0 5 51 50 0 128 49 0 5 51 52 0 128 51 0 5 51 54 0 128 53 0 5 52 1 0 0 128 55 0 5 51 57 0 128 56 0 5 51 59 0 128 58 0 5 51 61 0 128 60 0 5 51 63 0 128 62 0 5 3 128 64 0 5 52 66 0 0 128 65 0 5 51 68 0 128 67 0 5 51 70 0 128 69 0 5 51 72 0 128 71 0 5 51 74 0 128 73 0 5 51 76 0 128 75 0 5 51 78 0 128 77 0 5 51 80 0 128 79 0 5 51 82 0 128 81 0 5 51 84 0 128 83 0 5 51 86 0 128 85 0 5 51 88 0 128 87 0 5 51 90 0 128 89 0 5 51 92 0 128 91 0 5 51 94 0 128 93 0 5 51 96 0 128 95 0 5 51 98 0 128 97 0 5 51 100 0 128 99 0 5 51 102 0 128 101 0 5 1 105 0 52 104 0 1 128 103 0 5 51 107 0 128 106 0 5 51 109 0 128 108 0 5 51 111 0 128 110 0 5 51 113 0 128 112 0 5 51 115 0 128 114 0 50)))
+ :constants ("_preload-cache" "dict" "_css-hash" "" "dispatch-trigger-events" {:upvalue-count 0 :arity 2 :constants ("try-parse-json" "for-each" {:upvalue-count 2 :arity 1 :constants ("dom-dispatch" "get") :bytecode (20 0 0 18 0 16 0 18 1 16 0 52 1 0 2 49 3 50)} "keys" {:upvalue-count 1 :arity 1 :constants ("trim" "not" "empty?" "dom-dispatch" "dict") :bytecode (16 0 52 0 0 1 17 1 16 1 52 2 0 1 52 1 0 1 33 16 0 20 3 0 18 0 16 1 52 4 0 0 49 3 32 1 0 2 50)} "split" ",") :bytecode (16 1 33 55 0 20 0 0 16 1 48 1 17 2 16 2 33 20 0 51 2 0 1 0 1 2 16 2 52 3 0 1 52 1 0 2 32 18 0 51 4 0 1 0 16 1 1 6 0 52 5 0 2 52 1 0 2 32 1 0 2 50)} "init-css-tracking" {:upvalue-count 0 :arity 0 :constants ("dom-query" "meta[name=\"sx-css-classes\"]" "dom-get-attr" "content" "_css-hash") :bytecode (20 0 0 1 1 0 48 1 17 0 16 0 33 29 0 20 2 0 16 0 1 3 0 48 2 17 1 16 1 33 8 0 16 1 21 4 0 32 1 0 2 32 1 0 2 50)} "execute-request" {:upvalue-count 0 :arity 3 :constants ("get-verb-info" "nil?" "promise-resolve" "get" "method" "url" "dom-get-attr" "sx-media" "not" "browser-media-matches?" "sx-confirm" "browser-confirm" "sx-prompt" "browser-prompt" "validate-for-request" "do-fetch" "assoc" "dict" "SX-Prompt") :bytecode (20 0 0 16 0 48 1 6 34 3 0 5 16 1 17 3 16 3 52 1 0 1 33 9 0 20 2 0 2 49 1 32 249 0 16 3 1 4 0 52 3 0 2 17 4 16 3 1 5 0 52 3 0 2 17 5 20 6 0 16 0 1 7 0 48 2 17 6 16 6 6 33 12 0 5 20 9 0 16 6 48 1 52 8 0 1 33 9 0 20 2 0 2 49 1 32 185 0 20 6 0 16 0 1 10 0 48 2 17 6 16 6 6 33 12 0 5 20 11 0 16 6 48 1 52 8 0 1 33 9 0 20 2 0 2 49 1 32 143 0 20 6 0 16 0 1 12 0 48 2 17 6 16 6 33 10 0 20 13 0 16 6 48 1 32 1 0 2 17 7 16 6 6 33 7 0 5 16 7 52 1 0 1 33 9 0 20 2 0 2 49 1 32 88 0 16 4 52 1 0 1 6 34 23 0 5 16 5 52 1 0 1 6 34 12 0 5 20 14 0 16 0 48 1 52 8 0 1 33 9 0 20 2 0 2 49 1 32 43 0 20 15 0 16 0 16 4 16 4 16 5 16 7 33 23 0 16 2 6 34 5 0 5 52 17 0 0 1 18 0 16 7 52 16 0 3 32 2 0 16 2 49 5 50)} "do-fetch" {:upvalue-count 0 :arity 5 :constants ("dom-get-attr" "sx-sync" "=" "replace" "abort-previous" "resolve-target" "not" "identical?" "abort-previous-target" "new-abort-controller" "track-controller" "track-controller-target" "build-request-body" "get" "url" "body" "content-type" "build-request-headers" "loaded-component-names" "_css-hash" "csrf-token" "for-each" {:upvalue-count 2 :arity 1 :constants ("dict-set!" "get") :bytecode (18 0 16 0 18 1 16 0 52 1 0 2 52 0 0 3 50)} "keys" "dict-set!" "Content-Type" "X-CSRFToken" "preload-cache-get" "_preload-cache" "apply-optimistic" "show-indicator" "disable-elements" "dom-add-class" "sx-request" "dom-set-attr" "aria-busy" "true" "dom-dispatch" "sx:beforeRequest" "dict" "method" "fetch-request" "headers" "signal" "controller-signal" "cross-origin" "cross-origin?" "preloaded" {:upvalue-count 8 :arity 4 :constants ("clear-loading-state" "revert-optimistic" "not" "dom-dispatch" "sx:responseError" "dict" "status" "text" ">" "len" 0 "handle-fetch-success" "handle-retry" "sx:afterRequest") :bytecode (20 0 0 18 0 18 1 18 2 48 3 5 20 1 0 18 3 48 1 5 16 0 52 2 0 1 33 86 0 20 3 0 18 0 1 4 0 1 6 0 16 1 1 7 0 16 3 52 5 0 4 48 3 5 16 3 6 33 14 0 5 16 3 52 9 0 1 1 10 0 52 8 0 2 33 20 0 20 11 0 18 0 18 4 18 5 18 6 16 2 16 3 49 6 32 15 0 20 12 0 18 0 18 5 18 7 18 4 18 6 49 5 32 37 0 20 3 0 18 0 1 13 0 1 6 0 16 1 52 5 0 2 48 3 5 20 11 0 18 0 18 4 18 5 18 6 16 2 16 3 49 6 50)} {:upvalue-count 6 :arity 1 :constants ("clear-loading-state" "revert-optimistic" "not" "abort-error?" "log-warn" "str" "sx:fetch error " " " " — " "dom-dispatch" "sx:requestError" "dict" "error") :bytecode (20 0 0 18 0 18 1 18 2 48 3 5 20 1 0 18 3 48 1 5 20 3 0 16 0 48 1 52 2 0 1 33 47 0 20 4 0 1 6 0 18 4 1 7 0 18 5 1 8 0 16 0 52 5 0 6 48 1 5 20 9 0 18 0 1 10 0 1 12 0 16 0 52 11 0 2 49 3 32 1 0 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 5 16 5 1 3 0 52 2 0 2 33 10 0 20 4 0 16 0 48 1 32 1 0 2 5 20 5 0 16 0 48 1 17 6 16 6 6 33 13 0 5 16 0 16 6 52 7 0 2 52 6 0 1 33 10 0 20 8 0 16 6 48 1 32 1 0 2 5 20 9 0 48 0 17 6 20 10 0 16 0 16 6 48 2 5 20 5 0 16 0 48 1 17 7 16 7 33 12 0 20 11 0 16 7 16 6 48 2 32 1 0 2 5 20 12 0 16 0 16 2 16 3 48 3 17 7 16 7 1 14 0 52 13 0 2 17 8 16 7 1 15 0 52 13 0 2 17 9 16 7 1 16 0 52 13 0 2 17 10 20 17 0 16 0 20 18 0 48 0 20 19 0 48 3 17 11 20 20 0 48 0 17 12 16 4 33 20 0 51 22 0 1 11 1 4 16 4 52 23 0 1 52 21 0 2 32 1 0 2 5 16 10 33 14 0 16 11 1 25 0 16 10 52 24 0 3 32 1 0 2 5 16 12 33 14 0 16 11 1 26 0 16 12 52 24 0 3 32 1 0 2 5 20 27 0 20 28 0 16 8 48 2 17 13 20 29 0 16 0 48 1 17 14 20 30 0 16 0 48 1 17 15 20 31 0 16 0 48 1 17 16 20 32 0 16 0 1 33 0 48 2 5 20 34 0 16 0 1 35 0 1 36 0 48 3 5 20 37 0 16 0 1 38 0 1 14 0 16 8 1 40 0 16 2 52 39 0 4 48 3 5 20 41 0 1 14 0 16 8 1 40 0 16 2 1 42 0 16 11 1 15 0 16 9 1 43 0 20 44 0 16 6 48 1 1 45 0 20 46 0 16 8 48 1 1 47 0 16 13 52 39 0 14 51 48 0 1 0 1 15 1 16 1 14 1 8 1 1 1 4 1 2 51 49 0 1 0 1 15 1 16 1 14 1 2 1 8 49 3 50)} "handle-fetch-success" {:upvalue-count 0 :arity 6 :constants ("process-response-headers" "get" "css-hash" "_css-hash" "dispatch-trigger-events" "trigger" "process-cache-directives" "redirect" "browser-navigate" "refresh" "browser-reload" "location" "fetch-location" "retarget" "dom-query" "resolve-target" "parse-swap-spec" "reswap" "dom-get-attr" "sx-swap" "dom-has-class?" "dom-body" "sx-transitions" "style" "transition" "content-type" "" "contains?" "text/sx" "handle-sx-response" "handle-html-response" "trigger-swap" "handle-history" "set-timeout" {:upvalue-count 2 :arity 0 :constants ("get" "trigger-settle" "dispatch-trigger-events" "process-settle-hooks") :bytecode (18 0 1 1 0 52 0 0 2 33 19 0 20 2 0 18 1 18 0 1 1 0 52 0 0 2 48 2 32 1 0 2 5 20 3 0 18 1 49 1 50)} 20 "dom-dispatch" "sx:afterSwap" "dict" "target" "swap") :bytecode (20 0 0 16 4 48 1 17 6 16 6 1 2 0 52 1 0 2 17 7 16 7 33 8 0 16 7 21 3 0 32 1 0 2 5 20 4 0 16 0 16 6 1 5 0 52 1 0 2 48 2 5 20 6 0 16 0 16 6 16 5 48 3 5 16 6 1 7 0 52 1 0 2 33 17 0 20 8 0 16 6 1 7 0 52 1 0 2 49 1 32 31 1 16 6 1 9 0 52 1 0 2 33 8 0 20 10 0 49 0 32 11 1 16 6 1 11 0 52 1 0 2 33 17 0 20 12 0 16 6 1 11 0 52 1 0 2 49 1 32 238 0 16 6 1 13 0 52 1 0 2 33 17 0 20 14 0 16 6 1 13 0 52 1 0 2 48 1 32 7 0 20 15 0 16 0 48 1 17 7 20 16 0 16 6 1 17 0 52 1 0 2 6 34 11 0 5 20 18 0 16 0 1 19 0 48 2 20 20 0 20 21 0 48 0 1 22 0 48 2 48 2 17 8 16 8 1 23 0 52 1 0 2 17 9 16 8 1 24 0 52 1 0 2 17 10 16 6 1 25 0 52 1 0 2 6 34 4 0 5 1 26 0 17 11 16 11 1 28 0 52 27 0 2 33 18 0 20 29 0 16 0 16 7 16 5 16 9 16 10 48 5 32 15 0 20 30 0 16 0 16 7 16 5 16 9 16 10 48 5 5 20 4 0 16 0 16 6 1 31 0 52 1 0 2 48 2 5 20 32 0 16 0 16 1 16 6 48 3 5 20 33 0 51 34 0 1 6 1 0 1 35 0 48 2 5 20 36 0 16 0 1 37 0 1 39 0 16 7 1 40 0 16 9 52 38 0 4 49 3 50)} "handle-sx-response" {:upvalue-count 0 :arity 5 :constants ("strip-component-scripts" "extract-response-css" "trim" "not" "empty?" "sx-render" "dom-create-element" "div" "dom-append" "process-oob-swaps" {:upvalue-count 0 :arity 3 :constants ("dispose-islands-in" "swap-dom-nodes" "=" "innerHTML" "children-to-fragment" "post-swap") :bytecode (20 0 0 16 0 48 1 5 20 1 0 16 0 16 2 1 3 0 52 2 0 2 33 10 0 20 4 0 16 1 48 1 32 2 0 16 1 16 2 48 3 5 20 5 0 16 0 49 1 50)} "dom-get-attr" "sx-select" "select-from-container" "children-to-fragment" "dispose-islands-in" "with-transition" {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "post-swap" "=" "outerHTML" "dom-parent") :bytecode (20 0 0 18 0 18 1 18 2 48 3 17 0 20 1 0 18 2 1 3 0 52 2 0 2 33 17 0 20 4 0 16 0 6 34 3 0 5 18 0 48 1 32 9 0 16 0 6 34 3 0 5 18 0 49 1 50)}) :bytecode (20 0 0 16 2 48 1 17 5 20 1 0 16 5 48 1 17 6 16 6 52 2 0 1 17 7 16 7 52 4 0 1 52 3 0 1 33 106 0 20 5 0 16 7 48 1 17 8 20 6 0 1 7 0 2 48 2 17 9 20 8 0 16 9 16 8 48 2 5 20 9 0 16 9 51 10 0 48 2 5 20 11 0 16 0 1 12 0 48 2 17 10 16 10 33 12 0 20 13 0 16 9 16 10 48 2 32 7 0 20 14 0 16 9 48 1 17 11 20 15 0 16 1 48 1 5 20 16 0 16 4 51 17 0 1 1 1 11 1 3 49 2 32 1 0 2 50)} "handle-html-response" {:upvalue-count 0 :arity 5 :constants ("dom-parse-html-document" "dom-get-attr" "sx-select" "dispose-islands-in" "dom-create-element" "div" "dom-set-inner-html" "dom-body-inner-html" "process-oob-swaps" {:upvalue-count 0 :arity 3 :constants ("dispose-islands-in" "swap-dom-nodes" "post-swap") :bytecode (20 0 0 16 0 48 1 5 20 1 0 16 0 16 1 16 2 48 3 5 20 2 0 16 0 49 1 50)} "hoist-head-elements" "select-from-container" "with-transition" {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "log-info" "str" "swap-root: " "dom-tag-name" "nil" " target: " "post-swap") :bytecode (20 0 0 18 0 18 1 18 2 48 3 17 0 20 1 0 1 3 0 16 0 33 10 0 20 4 0 16 0 48 1 32 3 0 1 5 0 1 6 0 20 4 0 18 0 48 1 52 2 0 4 48 1 5 20 7 0 16 0 6 34 3 0 5 18 0 49 1 50)} {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "children-to-fragment" "post-swap") :bytecode (20 0 0 18 0 20 1 0 18 1 48 1 18 2 48 3 5 20 2 0 18 0 49 1 50)}) :bytecode (20 0 0 16 2 48 1 17 5 16 5 33 164 0 20 1 0 16 0 1 2 0 48 2 17 6 20 3 0 16 1 48 1 5 16 6 33 75 0 20 4 0 1 5 0 2 48 2 17 7 20 6 0 16 7 20 7 0 16 5 48 1 48 2 5 20 8 0 16 7 51 9 0 48 2 5 20 10 0 16 7 48 1 5 20 11 0 16 7 16 6 48 2 17 8 20 12 0 16 4 51 13 0 1 1 1 8 1 3 49 2 32 61 0 20 4 0 1 5 0 2 48 2 17 7 20 6 0 16 7 20 7 0 16 5 48 1 48 2 5 20 8 0 16 7 51 9 0 48 2 5 20 10 0 16 7 48 1 5 20 12 0 16 4 51 14 0 1 1 1 7 1 3 49 2 32 1 0 2 50)} "handle-retry" {:upvalue-count 0 :arity 5 :constants ("dom-get-attr" "sx-retry" "parse-retry-spec" "data-sx-retry-ms" "get" "start-ms" "parse-int" "dom-set-attr" "str" "next-retry-ms" "cap-ms" "set-timeout" {:upvalue-count 5 :arity 0 :constants ("do-fetch") :bytecode (20 0 0 18 0 18 1 18 2 18 3 18 4 49 5 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 5 20 2 0 16 5 48 1 17 6 16 6 33 97 0 20 0 0 16 0 1 3 0 48 2 6 34 10 0 5 16 6 1 5 0 52 4 0 2 17 7 16 7 16 6 1 5 0 52 4 0 2 52 6 0 2 17 8 20 7 0 16 0 1 3 0 20 9 0 16 8 16 6 1 10 0 52 4 0 2 48 2 52 8 0 1 48 3 5 20 11 0 51 12 0 1 0 1 1 1 2 1 3 1 4 16 8 49 2 32 1 0 2 50)} "bind-triggers" {:upvalue-count 0 :arity 2 :constants ("parse-trigger-spec" "dom-get-attr" "sx-trigger" "default-trigger" "dom-tag-name" "for-each" {:upvalue-count 2 :arity 1 :constants ("classify-trigger" "get" "modifiers" "=" "poll" "set-interval" {:upvalue-count 1 :arity 0 :constants ("execute-request") :bytecode (20 0 0 18 0 2 2 49 3 50)} "interval" "intersect" "observe-intersection" "delay" "load" "set-timeout" 0 "revealed" "event" "bind-event") :bytecode (20 0 0 16 0 48 1 17 1 16 0 1 2 0 52 1 0 2 17 2 16 1 1 4 0 52 3 0 2 33 22 0 20 5 0 51 6 0 0 0 16 2 1 7 0 52 1 0 2 49 2 32 152 0 16 1 1 8 0 52 3 0 2 33 25 0 20 9 0 18 0 51 6 0 0 0 4 16 2 1 10 0 52 1 0 2 49 4 32 115 0 16 1 1 11 0 52 3 0 2 33 30 0 20 12 0 51 6 0 0 0 16 2 1 10 0 52 1 0 2 6 34 4 0 5 1 13 0 49 2 32 73 0 16 1 1 14 0 52 3 0 2 33 25 0 20 9 0 18 0 51 6 0 0 0 3 16 2 1 10 0 52 1 0 2 49 4 32 36 0 16 1 1 15 0 52 3 0 2 33 23 0 20 16 0 18 0 16 0 1 15 0 52 1 0 2 16 2 18 1 49 4 32 1 0 2 50)}) :bytecode (20 0 0 20 1 0 16 0 1 2 0 48 2 48 1 6 34 13 0 5 20 3 0 20 4 0 16 0 48 1 48 1 17 2 51 6 0 1 0 1 1 16 2 52 5 0 2 50)} "bind-event" {:upvalue-count 0 :arity 4 :constants ("get" "from" "dom-query" "dom-add-listener" {:upvalue-count 5 :arity 1 :constants ("get" "changed" "dom-value" "=" "not" "click" "event-modifier-key?" "submit" "dom-has-attr?" "href" "prevent-default" "get-verb-info" "method" "GET" "delay" "try-client-route" "url-pathname" "url" "dom-get-attr" "sx-target" "browser-push-state" "browser-scroll-to" 0 "log-info" "str" "sx:route server fetch " "clear-timeout" "set-timeout" {:upvalue-count 1 :arity 0 :constants ("execute-request") :bytecode (20 0 0 18 0 2 2 49 3 50)} "execute-request") :bytecode (3 17 1 18 0 1 1 0 52 0 0 2 33 33 0 20 2 0 18 1 48 1 17 2 16 2 18 2 52 3 0 2 33 6 0 4 17 1 32 4 0 16 2 19 2 32 1 0 2 5 16 1 6 33 26 0 5 18 3 1 5 0 52 3 0 2 6 33 8 0 5 20 6 0 16 0 48 1 52 4 0 1 33 36 1 18 3 1 7 0 52 3 0 2 6 34 25 0 5 18 3 1 5 0 52 3 0 2 6 33 11 0 5 20 8 0 18 1 1 9 0 48 2 33 10 0 20 10 0 16 0 48 1 32 1 0 2 5 20 11 0 18 1 48 1 17 2 18 3 1 5 0 52 3 0 2 6 33 50 0 5 16 2 1 12 0 52 0 0 2 1 13 0 52 3 0 2 6 33 29 0 5 20 8 0 18 1 1 9 0 48 2 6 33 14 0 5 18 0 1 14 0 52 0 0 2 52 4 0 1 17 3 4 17 4 16 3 33 34 0 20 15 0 20 16 0 16 2 1 17 0 52 0 0 2 48 1 20 18 0 18 1 1 19 0 48 2 48 2 17 4 32 1 0 2 5 16 4 33 29 0 20 20 0 16 2 1 17 0 52 0 0 2 48 1 5 20 21 0 1 22 0 1 22 0 49 2 32 84 0 16 3 33 24 0 20 23 0 1 25 0 16 2 1 17 0 52 0 0 2 52 24 0 2 48 1 32 1 0 2 5 18 0 1 14 0 52 0 0 2 33 32 0 20 26 0 18 4 48 1 5 20 27 0 51 28 0 0 1 18 0 1 14 0 52 0 0 2 48 2 19 4 32 9 0 20 29 0 18 1 2 2 49 3 32 1 0 2 50)} "once" "dict") :bytecode (2 17 4 2 17 5 16 2 1 1 0 52 0 0 2 33 17 0 20 2 0 16 2 1 1 0 52 0 0 2 48 1 32 2 0 16 0 17 6 16 6 33 49 0 20 3 0 16 6 16 1 51 4 0 1 2 1 0 1 5 1 1 1 4 16 2 1 5 0 52 0 0 2 33 11 0 1 5 0 3 52 6 0 2 32 1 0 2 49 4 32 1 0 2 50)} "post-swap" {:upvalue-count 0 :arity 1 :constants ("log-info" "str" "post-swap: root=" "dom-tag-name" "nil" "activate-scripts" "sx-process-scripts" "sx-hydrate" "sx-hydrate-islands" "run-post-render-hooks" "process-elements") :bytecode (20 0 0 1 2 0 16 0 33 10 0 20 3 0 16 0 48 1 32 3 0 1 4 0 52 1 0 2 48 1 5 20 5 0 16 0 48 1 5 20 6 0 16 0 48 1 5 20 7 0 16 0 48 1 5 20 8 0 16 0 48 1 5 20 9 0 48 0 5 20 10 0 16 0 49 1 50)} "process-settle-hooks" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-on-settle" "not" "empty?" "sx-parse" "for-each" {:upvalue-count 0 :arity 1 :constants ("eval-expr" "env-extend" "dict") :bytecode (20 0 0 16 0 20 1 0 52 2 0 0 48 1 49 2 50)}) :bytecode (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 21 0 20 4 0 16 1 48 1 17 2 51 6 0 16 2 52 5 0 2 32 1 0 2 50)} "activate-scripts" {:upvalue-count 0 :arity 1 :constants ("dom-query-all" "script" "for-each" {:upvalue-count 0 :arity 1 :constants ("not" "dom-has-attr?" "data-components" "data-sx-activated" "create-script-clone" "dom-set-attr" "true" "dom-replace-child" "dom-parent") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 6 33 15 0 5 20 1 0 16 0 1 3 0 48 2 52 0 0 1 33 42 0 20 4 0 16 0 48 1 17 1 20 5 0 16 1 1 3 0 1 6 0 48 3 5 20 7 0 20 8 0 16 0 48 1 16 1 16 0 49 3 32 1 0 2 50)}) :bytecode (16 0 33 24 0 20 0 0 16 0 1 1 0 48 2 17 1 51 3 0 16 1 52 2 0 2 32 1 0 2 50)} "process-oob-swaps" {:upvalue-count 0 :arity 2 :constants ("find-oob-swaps" "for-each" {:upvalue-count 1 :arity 1 :constants ("get" "target-id" "dom-query-by-id" "element" "swap-type" "dom-parent" "dom-remove-child") :bytecode (16 0 1 1 0 52 0 0 2 17 1 20 2 0 16 1 48 1 17 2 16 0 1 3 0 52 0 0 2 17 3 16 0 1 4 0 52 0 0 2 17 4 20 5 0 16 3 48 1 33 17 0 20 6 0 20 5 0 16 3 48 1 16 3 48 2 32 1 0 2 5 16 2 33 13 0 18 0 16 2 16 3 16 4 49 3 32 1 0 2 50)}) :bytecode (20 0 0 16 0 48 1 17 2 51 2 0 1 1 16 2 52 1 0 2 50)} "hoist-head-elements" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("dom-parent" "dom-remove-child" "dom-append-to-head") :bytecode (20 0 0 16 0 48 1 33 17 0 20 1 0 20 0 0 16 0 48 1 16 0 48 2 32 1 0 2 5 20 2 0 16 0 49 1 50)} "dom-query-all" "style[data-sx-css]" "link[rel=\"stylesheet\"]") :bytecode (51 1 0 20 2 0 16 0 1 3 0 48 2 52 0 0 2 5 51 1 0 20 2 0 16 0 1 4 0 48 2 52 0 0 2 50)} "process-boosted" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("boost-descendants") :bytecode (20 0 0 16 0 49 1 50)} "dom-query-all" "dom-body" "[sx-boost]") :bytecode (51 1 0 20 2 0 16 0 6 34 6 0 5 20 3 0 48 0 1 4 0 48 2 52 0 0 2 50)} "boost-descendants" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-boost" "for-each" {:upvalue-count 1 :arity 1 :constants ("not" "is-processed?" "boost" "should-boost-link?" "mark-processed!" "dom-has-attr?" "sx-target" "=" "true" "dom-set-attr" "sx-swap" "innerHTML" "sx-push-url" "bind-client-route-link" "dom-get-attr" "href") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 6 33 8 0 5 20 3 0 16 0 48 1 33 160 0 20 4 0 16 0 1 2 0 48 2 5 20 5 0 16 0 1 6 0 48 2 52 0 0 1 6 33 21 0 5 18 0 6 33 14 0 5 18 0 1 8 0 52 7 0 2 52 0 0 1 33 15 0 20 9 0 16 0 1 6 0 18 0 48 3 32 1 0 2 5 20 5 0 16 0 1 10 0 48 2 52 0 0 1 33 16 0 20 9 0 16 0 1 10 0 1 11 0 48 3 32 1 0 2 5 20 5 0 16 0 1 12 0 48 2 52 0 0 1 33 16 0 20 9 0 16 0 1 12 0 1 8 0 48 3 32 1 0 2 5 20 13 0 16 0 20 14 0 16 0 1 15 0 48 2 49 2 32 1 0 2 50)} "dom-query-all" "a[href]" {:upvalue-count 1 :arity 1 :constants ("not" "is-processed?" "boost" "should-boost-form?" "mark-processed!" "upper" "dom-get-attr" "method" "GET" "action" "browser-location-href" "dom-has-attr?" "sx-target" "=" "true" "dom-set-attr" "sx-swap" "innerHTML" "bind-boost-form") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 6 33 8 0 5 20 3 0 16 0 48 1 33 165 0 20 4 0 16 0 1 2 0 48 2 5 20 6 0 16 0 1 7 0 48 2 6 34 4 0 5 1 8 0 52 5 0 1 17 1 20 6 0 16 0 1 9 0 48 2 6 34 6 0 5 20 10 0 48 0 17 2 20 11 0 16 0 1 12 0 48 2 52 0 0 1 6 33 21 0 5 18 0 6 33 14 0 5 18 0 1 14 0 52 13 0 2 52 0 0 1 33 15 0 20 15 0 16 0 1 12 0 18 0 48 3 32 1 0 2 5 20 11 0 16 0 1 16 0 48 2 52 0 0 1 33 16 0 20 15 0 16 0 1 16 0 1 17 0 48 3 32 1 0 2 5 20 18 0 16 0 16 1 16 2 49 3 32 1 0 2 50)} "form") :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 51 3 0 1 1 20 4 0 16 0 1 5 0 48 2 52 2 0 2 5 51 6 0 1 1 20 4 0 16 0 1 7 0 48 2 52 2 0 2 50)} "_page-data-cache" "_page-data-cache-ttl" 30000 "page-data-cache-key" {:upvalue-count 0 :arity 2 :constants ("nil?" "empty?" "keys" "list" "for-each" {:upvalue-count 2 :arity 1 :constants ("append!" "str" "=" "get") :bytecode (20 0 0 18 0 16 0 1 2 0 18 1 16 0 52 3 0 2 52 1 0 3 49 2 50)} "str" ":" "join" "&") :bytecode (16 0 17 2 16 1 52 0 0 1 6 34 11 0 5 16 1 52 2 0 1 52 1 0 1 33 5 0 16 2 32 42 0 52 3 0 0 17 3 51 5 0 1 3 1 1 16 1 52 2 0 1 52 4 0 2 5 16 2 1 7 0 1 9 0 16 3 52 8 0 2 52 6 0 3 50)} "page-data-cache-get" {:upvalue-count 0 :arity 1 :constants ("get" "_page-data-cache" "nil?" ">" "-" "now-ms" "ts" "_page-data-cache-ttl" "dict-set!" "data") :bytecode (20 1 0 16 0 52 0 0 2 17 1 16 1 52 2 0 1 33 4 0 2 32 52 0 20 5 0 48 0 16 1 1 6 0 52 0 0 2 52 4 0 2 20 7 0 52 3 0 2 33 15 0 20 1 0 16 0 2 52 8 0 3 5 2 32 9 0 16 1 1 9 0 52 0 0 2 50)} "page-data-cache-set" {:upvalue-count 0 :arity 2 :constants ("dict-set!" "_page-data-cache" "data" "ts" "now-ms") :bytecode (20 1 0 16 0 1 2 0 16 1 1 3 0 20 4 0 48 0 65 2 0 52 0 0 3 50)} "invalidate-page-cache" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 1 :arity 1 :constants ("=" "starts-with?" "str" ":" "dict-set!" "_page-data-cache") :bytecode (16 0 18 0 52 0 0 2 6 34 16 0 5 16 0 18 0 1 3 0 52 2 0 2 52 1 0 2 33 13 0 20 5 0 16 0 2 52 4 0 3 32 1 0 2 50)} "keys" "_page-data-cache" "sw-post-message" "type" "invalidate" "page" "log-info" "str" "sx:cache invalidate ") :bytecode (51 1 0 1 0 20 3 0 52 2 0 1 52 0 0 2 5 20 4 0 1 5 0 1 6 0 1 7 0 16 0 65 2 0 48 1 5 20 8 0 1 10 0 16 0 52 9 0 2 49 1 50)} "invalidate-all-page-cache" {:upvalue-count 0 :arity 0 :constants ("dict" "_page-data-cache" "sw-post-message" "type" "invalidate" "page" "*" "log-info" "sx:cache invalidate *") :bytecode (52 0 0 0 21 1 0 5 20 2 0 1 3 0 1 4 0 1 5 0 1 6 0 65 2 0 48 1 5 20 7 0 1 8 0 49 1 50)} "update-page-cache" {:upvalue-count 0 :arity 2 :constants ("page-data-cache-key" "dict" "page-data-cache-set" "log-info" "str" "sx:cache update ") :bytecode (20 0 0 16 0 52 1 0 0 48 2 17 2 20 2 0 16 2 16 1 48 2 5 20 3 0 1 5 0 16 0 52 4 0 2 49 1 50)} "process-cache-directives" {:upvalue-count 0 :arity 3 :constants ("dom-get-attr" "sx-cache-invalidate" "=" "*" "invalidate-all-page-cache" "invalidate-page-cache" "get" "cache-invalidate" "cache-update" "parse-sx-data" "update-page-cache") :bytecode (20 0 0 16 0 1 1 0 48 2 17 3 16 3 33 30 0 16 3 1 3 0 52 2 0 2 33 8 0 20 4 0 48 0 32 7 0 20 5 0 16 3 48 1 32 1 0 2 5 16 1 1 7 0 52 6 0 2 17 3 16 3 33 30 0 16 3 1 3 0 52 2 0 2 33 8 0 20 4 0 48 0 32 7 0 20 5 0 16 3 48 1 32 1 0 2 5 16 1 1 8 0 52 6 0 2 17 3 16 3 33 30 0 20 9 0 16 2 48 1 17 4 16 4 33 12 0 20 10 0 16 3 16 4 49 2 32 1 0 2 32 1 0 2 50)} "_optimistic-snapshots" "optimistic-cache-update" {:upvalue-count 0 :arity 2 :constants ("page-data-cache-get" "dict-set!" "_optimistic-snapshots" "page-data-cache-set") :bytecode (20 0 0 16 0 48 1 17 2 16 2 33 35 0 16 1 16 2 48 1 17 3 20 2 0 16 0 16 2 52 1 0 3 5 20 3 0 16 0 16 3 48 2 5 16 3 32 1 0 2 50)} "optimistic-cache-revert" {:upvalue-count 0 :arity 1 :constants ("get" "_optimistic-snapshots" "page-data-cache-set" "dict-delete!") :bytecode (20 1 0 16 0 52 0 0 2 17 1 16 1 33 25 0 20 2 0 16 0 16 1 48 2 5 20 1 0 16 0 52 3 0 2 5 16 1 32 1 0 2 50)} "optimistic-cache-confirm" {:upvalue-count 0 :arity 1 :constants ("dict-delete!" "_optimistic-snapshots") :bytecode (20 1 0 16 0 52 0 0 2 50)} "submit-mutation" {:upvalue-count 0 :arity 6 :constants ("page-data-cache-key" "optimistic-cache-update" "try-rerender-page" "execute-action" {:upvalue-count 4 :arity 1 :constants ("page-data-cache-set" "optimistic-cache-confirm" "try-rerender-page" "log-info" "str" "sx:optimistic confirmed " "confirmed") :bytecode (16 0 33 12 0 20 0 0 18 0 16 0 48 2 32 1 0 2 5 20 1 0 18 0 48 1 5 16 0 33 14 0 20 2 0 18 1 18 2 16 0 48 3 32 1 0 2 5 20 3 0 1 5 0 18 1 52 4 0 2 48 1 5 18 3 33 10 0 18 3 1 6 0 49 1 32 1 0 2 50)} {:upvalue-count 4 :arity 1 :constants ("optimistic-cache-revert" "try-rerender-page" "log-warn" "str" "sx:optimistic reverted " ": " "reverted") :bytecode (20 0 0 18 0 48 1 17 1 16 1 33 14 0 20 1 0 18 1 18 2 16 1 48 3 32 1 0 2 5 20 2 0 1 4 0 18 1 1 5 0 16 0 52 3 0 4 48 1 5 18 3 33 10 0 18 3 1 6 0 49 1 32 1 0 2 50)}) :bytecode (20 0 0 16 0 16 1 48 2 17 6 20 1 0 16 6 16 4 48 2 17 7 16 7 33 14 0 20 2 0 16 0 16 1 16 7 48 3 32 1 0 2 5 20 3 0 16 2 16 3 51 4 0 1 6 1 0 1 1 1 5 51 5 0 1 6 1 0 1 1 1 5 49 4 50)} "_is-online" "_offline-queue" "list" "offline-is-online?" {:upvalue-count 0 :arity 0 :constants ("_is-online") :bytecode (20 0 0 50)} "offline-set-online!" {:upvalue-count 0 :arity 1 :constants ("_is-online") :bytecode (16 0 21 0 0 50)} "offline-queue-mutation" {:upvalue-count 0 :arity 5 :constants ("page-data-cache-key" "dict" "action" "payload" "page" "params" "timestamp" "now-ms" "status" "pending" "append!" "_offline-queue" "optimistic-cache-update" "try-rerender-page" "log-info" "str" "sx:offline queued " " (" "len" " pending)") :bytecode (20 0 0 16 2 16 3 48 2 17 5 1 2 0 16 0 1 3 0 16 1 1 4 0 16 2 1 5 0 16 3 1 6 0 20 7 0 48 0 1 8 0 1 9 0 52 1 0 12 17 6 20 10 0 20 11 0 16 6 48 2 5 20 12 0 16 5 16 4 48 2 17 7 16 7 33 14 0 20 13 0 16 2 16 3 16 7 48 3 32 1 0 2 5 20 14 0 1 16 0 16 0 1 17 0 20 11 0 52 18 0 1 1 19 0 52 15 0 5 48 1 5 16 6 50)} "offline-sync" {:upvalue-count 0 :arity 0 :constants ("filter" {:upvalue-count 0 :arity 1 :constants ("=" "get" "status" "pending") :bytecode (16 0 1 2 0 52 1 0 2 1 3 0 52 0 0 2 50)} "_offline-queue" "not" "empty?" "log-info" "str" "sx:offline syncing " "len" " mutations" "for-each" {:upvalue-count 0 :arity 1 :constants ("execute-action" "get" "action" "payload" {:upvalue-count 1 :arity 1 :constants ("dict-set!" "status" "synced" "log-info" "str" "sx:offline synced " "get" "action") :bytecode (18 0 1 1 0 1 2 0 52 0 0 3 5 20 3 0 1 5 0 18 0 1 7 0 52 6 0 2 52 4 0 2 49 1 50)} {:upvalue-count 1 :arity 1 :constants ("dict-set!" "status" "failed" "log-warn" "str" "sx:offline sync failed " "get" "action" ": ") :bytecode (18 0 1 1 0 1 2 0 52 0 0 3 5 20 3 0 1 5 0 18 0 1 7 0 52 6 0 2 1 8 0 16 0 52 4 0 4 49 1 50)}) :bytecode (20 0 0 16 0 1 2 0 52 1 0 2 16 0 1 3 0 52 1 0 2 51 4 0 1 0 51 5 0 1 0 49 4 50)}) :bytecode (51 1 0 20 2 0 52 0 0 2 17 0 16 0 52 4 0 1 52 3 0 1 33 34 0 20 5 0 1 7 0 16 0 52 8 0 1 1 9 0 52 6 0 3 48 1 5 51 11 0 16 0 52 10 0 2 32 1 0 2 50)} "offline-pending-count" {:upvalue-count 0 :arity 0 :constants ("len" "filter" {:upvalue-count 0 :arity 1 :constants ("=" "get" "status" "pending") :bytecode (16 0 1 2 0 52 1 0 2 1 3 0 52 0 0 2 50)} "_offline-queue") :bytecode (51 2 0 20 3 0 52 1 0 2 52 0 0 1 50)} "offline-aware-mutation" {:upvalue-count 0 :arity 6 :constants ("_is-online" "submit-mutation" "offline-queue-mutation" "queued") :bytecode (20 0 0 33 20 0 20 1 0 16 0 16 1 16 2 16 3 16 4 16 5 49 6 32 32 0 20 2 0 16 2 16 3 16 0 16 1 16 4 48 5 5 16 5 33 10 0 16 5 1 3 0 49 1 32 1 0 2 50)} "current-page-layout" {:upvalue-count 0 :arity 0 :constants ("url-pathname" "browser-location-href" "find-matching-route" "_page-routes" "nil?" "" "get" "layout") :bytecode (20 0 0 20 1 0 48 0 48 1 17 0 20 2 0 16 0 20 3 0 48 2 17 1 16 1 52 4 0 1 33 6 0 1 5 0 32 17 0 16 1 1 7 0 52 6 0 2 6 34 4 0 5 1 5 0 50)} "swap-rendered-content" {:upvalue-count 0 :arity 3 :constants ("dom-create-element" "div" "dom-append" "process-oob-swaps" {:upvalue-count 0 :arity 3 :constants ("dispose-islands-in" "swap-dom-nodes" "=" "innerHTML" "children-to-fragment" "post-swap") :bytecode (20 0 0 16 0 48 1 5 20 1 0 16 0 16 2 1 3 0 52 2 0 2 33 10 0 20 4 0 16 1 48 1 32 2 0 16 1 16 2 48 3 5 20 5 0 16 0 49 1 50)} "dom-get-attr" "id" "dom-query" "str" "#" "children-to-fragment" "dispose-islands-in" "dom-set-text-content" "" "hoist-head-elements-full" "process-elements" "sx-hydrate-elements" "sx-hydrate-islands" "run-post-render-hooks" "dom-dispatch" "sx:clientRoute" "dict" "pathname" "log-info" "sx:route client ") :bytecode (20 0 0 1 1 0 2 48 2 17 3 20 2 0 16 3 16 1 48 2 5 20 3 0 16 3 51 4 0 48 2 5 20 5 0 16 0 1 6 0 48 2 17 4 16 4 33 19 0 20 7 0 16 3 1 9 0 16 4 52 8 0 2 48 2 32 1 0 2 17 5 16 5 33 10 0 20 10 0 16 5 48 1 32 7 0 20 10 0 16 3 48 1 17 6 20 11 0 16 0 48 1 5 20 12 0 16 0 1 13 0 48 2 5 20 2 0 16 0 16 6 48 2 5 20 14 0 16 0 48 1 5 20 15 0 16 0 48 1 5 20 16 0 16 0 48 1 5 20 17 0 16 0 48 1 5 20 18 0 48 0 5 20 19 0 16 0 1 20 0 1 22 0 16 2 52 21 0 2 48 3 5 20 23 0 1 24 0 16 2 52 8 0 2 49 1 50)} "resolve-route-target" {:upvalue-count 0 :arity 1 :constants ("not" "=" "true" "dom-query") :bytecode (16 0 6 33 14 0 5 16 0 1 2 0 52 1 0 2 52 0 0 1 33 10 0 20 3 0 16 0 49 1 32 1 0 2 50)} "deps-satisfied?" {:upvalue-count 0 :arity 1 :constants ("get" "deps" "loaded-component-names" "nil?" "empty?" "every?" {:upvalue-count 1 :arity 1 :constants ("contains?") :bytecode (18 0 16 0 52 0 0 2 50)}) :bytecode (16 0 1 1 0 52 0 0 2 17 1 20 2 0 48 0 17 2 16 1 52 3 0 1 6 34 7 0 5 16 1 52 4 0 1 33 4 0 3 32 11 0 51 6 0 1 2 16 1 52 5 0 2 50)} "try-client-route" {:upvalue-count 0 :arity 2 :constants ("find-matching-route" "_page-routes" "nil?" "log-info" "str" "sx:route no match (" "len" " routes) " "get" "layout" "" "current-page-layout" "not" "=" "sx:route server (layout: " " -> " ") " "content" "closure" "params" "name" "empty?" "log-warn" "sx:route no content for " "resolve-route-target" "sx:route target not found: " "deps-satisfied?" "sx:route deps miss for " "io-deps" "render-plan" "server" "list" "client" "sx:route plan " " — " " server, " " client" "register-io-deps" "stream" "sx:route streaming " "fetch-streaming" "build-request-headers" "loaded-component-names" "_css-hash" "has-data" "page-data-cache-key" "page-data-cache-get" "merge" "sx:route client+cache+async " "try-async-eval-content" {:upvalue-count 2 :arity 1 :constants ("nil?" "log-warn" "str" "sx:route cache+async eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (16 0 52 0 0 1 33 48 0 20 1 0 1 3 0 18 0 1 4 0 52 2 0 3 48 1 5 20 5 0 18 1 18 0 20 6 0 18 1 20 7 0 48 0 20 8 0 48 3 1 9 0 49 4 32 11 0 20 10 0 18 1 16 0 18 0 49 3 50)} "try-eval-content" "sx:route cached eval failed for " "sx:route client+cache " "swap-rendered-content" "sx:route client+data " "resolve-page-data" {:upvalue-count 7 :arity 1 :constants ("page-data-cache-set" "merge" "try-async-eval-content" {:upvalue-count 2 :arity 1 :constants ("nil?" "log-warn" "str" "sx:route data+async eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (16 0 52 0 0 1 33 48 0 20 1 0 1 3 0 18 0 1 4 0 52 2 0 3 48 1 5 20 5 0 18 1 18 0 20 6 0 18 1 20 7 0 48 0 20 8 0 48 3 1 9 0 49 4 32 11 0 20 10 0 18 1 16 0 18 0 49 3 50)} "try-eval-content" "nil?" "log-warn" "str" "sx:route data eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (20 0 0 18 0 16 0 48 2 5 18 1 18 2 16 0 52 1 0 3 17 1 18 3 33 19 0 20 2 0 18 4 16 1 51 3 0 0 5 0 6 49 3 32 79 0 20 4 0 18 4 16 1 48 2 17 2 16 2 52 5 0 1 33 48 0 20 6 0 1 8 0 18 5 1 9 0 52 7 0 3 48 1 5 20 10 0 18 6 18 5 20 11 0 18 6 20 12 0 48 0 20 13 0 48 3 1 14 0 49 4 32 11 0 20 15 0 18 6 16 2 18 5 49 3 50)} "sx:route client+async " {:upvalue-count 2 :arity 1 :constants ("nil?" "log-warn" "str" "sx:route async eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (16 0 52 0 0 1 33 48 0 20 1 0 1 3 0 18 0 1 4 0 52 2 0 3 48 1 5 20 5 0 18 1 18 0 20 6 0 18 1 20 7 0 48 0 20 8 0 48 3 1 9 0 49 4 32 11 0 20 10 0 18 1 16 0 18 0 49 3 50)} "sx:route server (eval failed) ") :bytecode (20 0 0 16 0 20 1 0 48 2 17 2 16 2 52 2 0 1 33 29 0 20 3 0 1 5 0 20 1 0 52 6 0 1 1 7 0 16 0 52 4 0 4 48 1 5 4 32 233 2 16 2 1 9 0 52 8 0 2 6 34 4 0 5 1 10 0 17 3 20 11 0 48 0 17 4 16 3 16 4 52 13 0 2 52 12 0 1 33 29 0 20 3 0 1 14 0 16 4 1 15 0 16 3 1 16 0 16 0 52 4 0 6 48 1 5 4 32 163 2 16 2 1 17 0 52 8 0 2 17 5 16 2 1 18 0 52 8 0 2 6 34 4 0 5 65 0 0 17 6 16 2 1 19 0 52 8 0 2 17 7 16 2 1 20 0 52 8 0 2 17 8 16 5 52 2 0 1 6 34 7 0 5 16 5 52 21 0 1 33 19 0 20 22 0 1 23 0 16 0 52 4 0 2 48 1 5 4 32 72 2 20 24 0 16 1 48 1 17 9 16 9 52 2 0 1 33 19 0 20 22 0 1 25 0 16 1 52 4 0 2 48 1 5 4 32 35 2 20 26 0 16 2 48 1 52 12 0 1 33 19 0 20 3 0 1 27 0 16 8 52 4 0 2 48 1 5 4 32 2 2 16 2 1 28 0 52 8 0 2 17 10 16 10 6 33 11 0 5 16 10 52 21 0 1 52 12 0 1 17 11 16 2 1 29 0 52 8 0 2 17 12 16 12 33 78 0 16 12 1 30 0 52 8 0 2 6 34 5 0 5 52 31 0 0 17 13 16 12 1 32 0 52 8 0 2 6 34 5 0 5 52 31 0 0 17 14 20 3 0 1 33 0 16 8 1 34 0 16 13 52 6 0 1 1 35 0 16 14 52 6 0 1 1 36 0 52 4 0 7 48 1 32 1 0 2 5 16 11 33 10 0 20 37 0 16 10 48 1 32 1 0 2 5 16 2 1 38 0 52 8 0 2 33 44 0 20 3 0 1 39 0 16 0 52 4 0 2 48 1 5 20 40 0 16 9 16 0 20 41 0 16 9 20 42 0 48 0 20 43 0 48 3 48 3 5 3 32 59 1 16 2 1 44 0 52 8 0 2 33 194 0 20 45 0 16 8 16 7 48 2 17 13 20 46 0 16 13 48 1 17 14 16 14 33 123 0 16 6 16 7 16 14 52 47 0 3 17 15 16 11 33 36 0 20 3 0 1 48 0 16 0 52 4 0 2 48 1 5 20 49 0 16 5 16 15 51 50 0 1 0 1 9 48 3 5 3 32 67 0 20 51 0 16 5 16 15 48 2 17 16 16 16 52 2 0 1 33 19 0 20 22 0 1 52 0 16 0 52 4 0 2 48 1 5 4 32 28 0 20 3 0 1 53 0 16 0 52 4 0 2 48 1 5 20 54 0 16 9 16 16 16 0 48 3 5 3 32 43 0 20 3 0 1 55 0 16 0 52 4 0 2 48 1 5 20 56 0 16 8 16 7 51 57 0 1 13 1 6 1 7 1 11 1 5 1 0 1 9 48 3 5 3 32 109 0 16 11 33 42 0 20 3 0 1 58 0 16 0 52 4 0 2 48 1 5 20 49 0 16 5 16 6 16 7 52 47 0 2 51 59 0 1 0 1 9 48 3 5 3 32 62 0 16 6 16 7 52 47 0 2 17 13 20 51 0 16 5 16 13 48 2 17 14 16 14 52 2 0 1 33 19 0 20 3 0 1 60 0 16 0 52 4 0 2 48 1 5 4 32 13 0 20 54 0 16 9 16 14 16 0 48 3 5 3 50)} "bind-client-route-link" {:upvalue-count 0 :arity 2 :constants ("bind-client-route-click" {:upvalue-count 2 :arity 0 :constants ("bind-boost-link") :bytecode (20 0 0 18 0 18 1 49 2 50)}) :bytecode (20 0 0 16 0 16 1 51 1 0 1 0 1 1 49 3 50)} "process-sse" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("not" "is-processed?" "sse" "mark-processed!" "bind-sse") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 21 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 49 1 32 1 0 2 50)} "dom-query-all" "dom-body" "[sx-sse]") :bytecode (51 1 0 20 2 0 16 0 6 34 6 0 5 20 3 0 48 0 1 4 0 48 2 52 0 0 2 50)} "bind-sse" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-sse" "event-source-connect" "parse-sse-swap" "event-source-listen" {:upvalue-count 1 :arity 1 :constants ("bind-sse-swap") :bytecode (20 0 0 18 0 16 0 49 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 33 37 0 20 2 0 16 1 16 0 48 2 17 2 20 3 0 16 0 48 1 17 3 20 4 0 16 2 16 3 51 5 0 1 0 49 3 32 1 0 2 50)} "bind-sse-swap" {:upvalue-count 0 :arity 2 :constants ("resolve-target" "parse-swap-spec" "dom-get-attr" "sx-swap" "dom-has-class?" "dom-body" "sx-transitions" "get" "style" "transition" "trim" "not" "empty?" "dispose-islands-in" "starts-with?" "(" "sx-render" "dom-create-element" "div" "dom-append" "with-transition" {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "children-to-fragment" "post-swap") :bytecode (20 0 0 18 0 20 1 0 18 1 48 1 18 2 48 3 5 20 2 0 18 0 49 1 50)} {:upvalue-count 3 :arity 0 :constants ("swap-html-string" "post-swap") :bytecode (20 0 0 18 0 18 1 18 2 48 3 5 20 1 0 18 0 49 1 50)}) :bytecode (20 0 0 16 0 48 1 17 2 20 1 0 20 2 0 16 0 1 3 0 48 2 20 4 0 20 5 0 48 0 1 6 0 48 2 48 2 17 3 16 3 1 8 0 52 7 0 2 17 4 16 3 1 9 0 52 7 0 2 17 5 16 1 52 10 0 1 17 6 16 6 52 12 0 1 52 11 0 1 33 88 0 20 13 0 16 2 48 1 5 16 6 1 15 0 52 14 0 2 33 49 0 20 16 0 16 6 48 1 17 7 20 17 0 1 18 0 2 48 2 17 8 20 19 0 16 8 16 7 48 2 5 20 20 0 16 5 51 21 0 1 2 1 8 1 4 49 2 32 16 0 20 20 0 16 5 51 22 0 1 2 1 6 1 4 49 2 32 1 0 2 50)} "bind-inline-handlers" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 1 :arity 1 :constants ("first" "nth" 1 "starts-with?" "sx-on:" "slice" 6 "not" "is-processed?" "str" "on:" "mark-processed!" "sx-parse" "dom-on" {:upvalue-count 2 :arity 1 :constants ("env-extend" "dict" "env-bind!" "event" "this" "detail" "event-detail" "for-each" {:upvalue-count 1 :arity 1 :constants ("eval-expr") :bytecode (20 0 0 16 0 18 0 49 2 50)}) :bytecode (20 0 0 52 1 0 0 48 1 17 1 20 2 0 16 1 1 3 0 16 0 48 3 5 20 2 0 16 1 1 4 0 18 0 48 3 5 20 2 0 16 1 1 5 0 20 6 0 16 0 48 1 48 3 5 51 8 0 1 1 18 1 52 7 0 2 50)}) :bytecode (16 0 52 0 0 1 17 1 16 0 1 2 0 52 1 0 2 17 2 16 1 1 4 0 52 3 0 2 33 83 0 16 1 1 6 0 52 5 0 2 17 3 20 8 0 18 0 1 10 0 16 3 52 9 0 2 48 2 52 7 0 1 33 45 0 20 11 0 18 0 1 10 0 16 3 52 9 0 2 48 2 5 20 12 0 16 2 48 1 17 4 20 13 0 18 0 16 3 51 14 0 0 0 1 4 49 3 32 1 0 2 32 1 0 2 50)} "dom-attr-list") :bytecode (51 1 0 1 0 20 2 0 16 0 48 1 52 0 0 2 50)} "dom-query-all" "dom-body" "[sx-on\\:]") :bytecode (51 1 0 20 2 0 16 0 6 34 6 0 5 20 3 0 48 0 1 4 0 48 2 52 0 0 2 50)} "bind-preload-for" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-preload" "=" "mousedown" "list" "touchstart" "mouseover" 0 100 "bind-preload" {:upvalue-count 1 :arity 0 :constants ("get-verb-info" "do-preload" "get" "url" "build-request-headers" "loaded-component-names" "_css-hash") :bytecode (20 0 0 18 0 48 1 17 0 16 0 33 32 0 20 1 0 16 0 1 3 0 52 2 0 2 20 4 0 18 0 20 5 0 48 0 20 6 0 48 3 49 2 32 1 0 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 33 76 0 16 1 1 3 0 52 2 0 2 33 13 0 1 3 0 1 5 0 52 4 0 2 32 7 0 1 6 0 52 4 0 1 17 2 16 1 1 3 0 52 2 0 2 33 6 0 1 7 0 32 3 0 1 8 0 17 3 20 9 0 16 0 16 2 16 3 51 10 0 1 0 49 4 32 1 0 2 50)} "do-preload" {:upvalue-count 0 :arity 2 :constants ("nil?" "preload-cache-get" "_preload-cache" "fetch-preload") :bytecode (20 1 0 20 2 0 16 0 48 2 52 0 0 1 33 15 0 20 3 0 16 0 16 1 20 2 0 49 3 32 1 0 2 50)} "VERB_SELECTOR" "str" "[sx-get],[sx-post],[sx-put],[sx-delete],[sx-patch]" "process-elements" {:upvalue-count 0 :arity 1 :constants ("dom-query-all" "dom-body" "VERB_SELECTOR" "for-each" {:upvalue-count 0 :arity 1 :constants ("not" "is-processed?" "verb" "mark-processed!" "process-one") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 21 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 49 1 32 1 0 2 50)} "process-boosted" "process-sse" "bind-inline-handlers" "process-emit-elements") :bytecode (20 0 0 16 0 6 34 6 0 5 20 1 0 48 0 20 2 0 48 2 17 1 51 4 0 16 1 52 3 0 2 5 20 5 0 16 0 48 1 5 20 6 0 16 0 48 1 5 20 7 0 16 0 48 1 5 20 8 0 16 0 49 1 50)} "process-one" {:upvalue-count 0 :arity 1 :constants ("get-verb-info" "not" "dom-has-attr?" "sx-disable" "bind-triggers" "bind-preload-for") :bytecode (20 0 0 16 0 48 1 17 1 16 1 33 41 0 20 2 0 16 0 1 3 0 48 2 52 1 0 1 33 20 0 20 4 0 16 0 16 1 48 2 5 20 5 0 16 0 49 1 32 1 0 2 32 1 0 2 50)} "process-emit-elements" {:upvalue-count 0 :arity 1 :constants ("dom-query-all" "dom-body" "[data-sx-emit]" "for-each" {:upvalue-count 0 :arity 1 :constants ("not" "is-processed?" "emit" "mark-processed!" "dom-get-attr" "data-sx-emit" "dom-on" "click" {:upvalue-count 2 :arity 1 :constants ("dom-get-attr" "data-sx-emit-detail" "json-parse" "dict" "dom-dispatch") :bytecode (20 0 0 18 0 1 1 0 48 2 17 1 16 1 33 10 0 20 2 0 16 1 48 1 32 4 0 52 3 0 0 17 2 20 4 0 18 0 18 1 16 2 49 3 50)}) :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 52 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 1 5 0 48 2 17 1 16 1 33 20 0 20 6 0 16 0 1 7 0 51 8 0 1 0 1 1 49 3 32 1 0 2 32 1 0 2 50)}) :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)} "handle-popstate" {:upvalue-count 0 :arity 1 :constants ("browser-location-href" "dom-query" "[sx-boost]" "dom-get-attr" "sx-boost" "not" "=" "true" "#main-panel" "url-pathname" "try-client-route" "browser-scroll-to" 0 "build-request-headers" "loaded-component-names" "_css-hash" "fetch-and-restore") :bytecode (20 0 0 48 0 17 1 20 1 0 1 2 0 48 1 17 2 16 2 33 44 0 20 3 0 16 2 1 4 0 48 2 17 4 16 4 6 33 14 0 5 16 4 1 7 0 52 6 0 2 52 5 0 1 33 5 0 16 4 32 1 0 2 32 1 0 2 17 3 16 3 6 34 4 0 5 1 8 0 17 3 20 1 0 16 3 48 1 17 4 20 9 0 16 1 48 1 17 5 16 4 33 58 0 20 10 0 16 5 16 3 48 2 33 13 0 20 11 0 1 12 0 16 0 49 2 32 30 0 20 13 0 16 4 20 14 0 48 0 20 15 0 48 3 17 6 20 16 0 16 4 16 1 16 6 16 0 49 4 32 1 0 2 50)} "engine-init" {:upvalue-count 0 :arity 0 :constants ("init-css-tracking" "sx-process-scripts" "sx-hydrate" "process-elements") :bytecode (20 0 0 48 0 5 20 1 0 2 48 1 5 20 2 0 2 48 1 5 20 3 0 2 49 1 50)}) :bytecode (52 1 0 0 128 0 0 5 1 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 51 19 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 51 33 0 128 32 0 5 51 35 0 128 34 0 5 51 37 0 128 36 0 5 52 1 0 0 128 38 0 5 1 40 0 128 39 0 5 51 42 0 128 41 0 5 51 44 0 128 43 0 5 51 46 0 128 45 0 5 51 48 0 128 47 0 5 51 50 0 128 49 0 5 51 52 0 128 51 0 5 51 54 0 128 53 0 5 52 1 0 0 128 55 0 5 51 57 0 128 56 0 5 51 59 0 128 58 0 5 51 61 0 128 60 0 5 51 63 0 128 62 0 5 3 128 64 0 5 52 66 0 0 128 65 0 5 51 68 0 128 67 0 5 51 70 0 128 69 0 5 51 72 0 128 71 0 5 51 74 0 128 73 0 5 51 76 0 128 75 0 5 51 78 0 128 77 0 5 51 80 0 128 79 0 5 51 82 0 128 81 0 5 51 84 0 128 83 0 5 51 86 0 128 85 0 5 51 88 0 128 87 0 5 51 90 0 128 89 0 5 51 92 0 128 91 0 5 51 94 0 128 93 0 5 51 96 0 128 95 0 5 51 98 0 128 97 0 5 51 100 0 128 99 0 5 51 102 0 128 101 0 5 1 105 0 52 104 0 1 128 103 0 5 51 107 0 128 106 0 5 51 109 0 128 108 0 5 51 111 0 128 110 0 5 51 113 0 128 112 0 5 51 115 0 128 114 0 50)))
diff --git a/sx/sx/examples-content.sx b/sx/sx/examples-content.sx
index a1c089de..e6906679 100644
--- a/sx/sx/examples-content.sx
+++ b/sx/sx/examples-content.sx
@@ -1,316 +1,372 @@
-;; Example page defcomps — one per example.
-;; Each calls ~examples/page-content with static string data.
-;; Replaces all _example_*_sx() builders in essays.py.
-
-(defcomp ~examples-content/example-click-to-load ()
+(defcomp
+ ~examples-content/example-click-to-load
+ ()
(~examples/page-content
:title "Click to Load"
:description "The simplest sx interaction: click a button, fetch content from the server, swap it in."
:demo-description "Click the button to load server-rendered content."
:demo (~examples/click-to-load-demo)
:sx-code "(button\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.click))))\"\n :sx-target \"#click-result\"\n :sx-swap \"innerHTML\"\n \"Load content\")"
- :handler-code (handler-source "ex-click")
+ :handler-names (list "ex-click")
:comp-placeholder-id "click-comp"
:wire-placeholder-id "click-wire"
:wire-note "The server responds with content-type text/sx. New CSS rules are prepended as a style tag. Clear the component cache to see component definitions included in the wire response."))
-(defcomp ~examples-content/example-form-submission ()
+(defcomp
+ ~examples-content/example-form-submission
+ ()
(~examples/page-content
:title "Form Submission"
:description "Forms with sx-post submit via AJAX and swap the response into a target."
:demo-description "Enter a name and submit."
:demo (~examples/form-demo)
:sx-code "(form\n :sx-post \"/sx/(geography.(hypermedia.(example.(api.form))))\"\n :sx-target \"#form-result\"\n :sx-swap \"innerHTML\"\n (input :type \"text\" :name \"name\")\n (button :type \"submit\" \"Submit\"))"
- :handler-code (handler-source "ex-form")
+ :handler-names (list "ex-form")
:comp-placeholder-id "form-comp"
:wire-placeholder-id "form-wire"))
-(defcomp ~examples-content/example-polling ()
+(defcomp
+ ~examples-content/example-polling
+ ()
(~examples/page-content
:title "Polling"
:description "Use sx-trigger with \"every\" to poll the server at regular intervals."
:demo-description "This div polls the server every 2 seconds."
:demo (~examples/polling-demo)
:sx-code "(div\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.poll))))\"\n :sx-trigger \"load, every 2s\"\n :sx-swap \"innerHTML\"\n \"Loading...\")"
- :handler-code (handler-source "ex-poll")
+ :handler-names (list "ex-poll")
:comp-placeholder-id "poll-comp"
:wire-placeholder-id "poll-wire"
:wire-note "Updates every 2 seconds — watch the time and count change."))
-(defcomp ~examples-content/example-delete-row ()
+(defcomp
+ ~examples-content/example-delete-row
+ ()
(~examples/page-content
:title "Delete Row"
:description "sx-delete with sx-swap \"outerHTML\" and an empty response removes the row from the DOM."
:demo-description "Click delete to remove a row. Uses sx-confirm for confirmation."
- :demo (~examples/delete-demo :items (list
- (list "1" "Implement dark mode")
- (list "2" "Fix login bug")
- (list "3" "Write documentation")
- (list "4" "Deploy to production")
- (list "5" "Add unit tests")))
+ :demo (~examples/delete-demo
+ :items (list
+ (list "1" "Implement dark mode")
+ (list "2" "Fix login bug")
+ (list "3" "Write documentation")
+ (list "4" "Deploy to production")
+ (list "5" "Add unit tests")))
:sx-code "(button\n :sx-delete \"/sx/(geography.(hypermedia.(example.(api.(delete.1)))))\"\n :sx-target \"#row-1\"\n :sx-swap \"outerHTML\"\n :sx-confirm \"Delete this item?\"\n \"delete\")"
- :handler-code (handler-source "ex-delete")
+ :handler-names (list "ex-delete")
:comp-placeholder-id "delete-comp"
:wire-placeholder-id "delete-wire"
:wire-note "Empty body — outerHTML swap replaces the target element with nothing."))
-(defcomp ~examples-content/example-inline-edit ()
+(defcomp
+ ~examples-content/example-inline-edit
+ ()
(~examples/page-content
:title "Inline Edit"
:description "Click edit to swap a display view for an edit form. Save swaps back."
:demo-description "Click edit, modify the text, save or cancel."
:demo (~examples/inline-edit-demo)
:sx-code ";; View mode — shows text + edit button\n(~examples/inline-view :value \"some text\")\n\n;; Edit mode — returned by server on click\n(~examples/inline-edit-form :value \"some text\")"
- :handler-code (str (handler-source "ex-edit-form") "\n\n" (handler-source "ex-edit-save"))
+ :handler-names (list "ex-edit-form" "ex-edit-save")
:comp-placeholder-id "edit-comp"
:comp-heading "Components"
:handler-heading "Server handlers"
:wire-placeholder-id "edit-wire"))
-(defcomp ~examples-content/example-oob-swaps ()
+(defcomp
+ ~examples-content/example-oob-swaps
+ ()
(~examples/page-content
:title "Out-of-Band Swaps"
:description "sx-swap-oob lets a single response update multiple elements anywhere in the DOM."
:demo-description "One request updates both Box A (via sx-target) and Box B (via sx-swap-oob)."
:demo (~examples/oob-demo)
:sx-code ";; Button targets Box A\n(button\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.oob))))\"\n :sx-target \"#oob-box-a\"\n :sx-swap \"innerHTML\"\n \"Update both boxes\")"
- :handler-code (handler-source "ex-oob")
+ :handler-names (list "ex-oob")
:wire-placeholder-id "oob-wire"
:wire-note "The fragment contains both the main content and an OOB element. sx.js splits them: main content goes to sx-target, OOB elements find their targets by ID."))
-(defcomp ~examples-content/example-lazy-loading ()
+(defcomp
+ ~examples-content/example-lazy-loading
+ ()
(~examples/page-content
:title "Lazy Loading"
:description "Use sx-trigger=\"load\" to fetch content as soon as the element enters the DOM. Great for deferring expensive content below the fold."
:demo-description "Content loads automatically when the page renders."
:demo (~examples/lazy-loading-demo)
:sx-code "(div\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.lazy))))\"\n :sx-trigger \"load\"\n :sx-swap \"innerHTML\"\n (div :class \"animate-pulse\" \"Loading...\"))"
- :handler-code (handler-source "ex-lazy")
+ :handler-names (list "ex-lazy")
:comp-placeholder-id "lazy-comp"
:wire-placeholder-id "lazy-wire"))
-(defcomp ~examples-content/example-infinite-scroll ()
+(defcomp
+ ~examples-content/example-infinite-scroll
+ ()
(~examples/page-content
:title "Infinite Scroll"
:description "A sentinel element at the bottom uses sx-trigger=\"intersect once\" to load the next page when scrolled into view. Each response appends items and a new sentinel."
:demo-description "Scroll down in the container to load more items (5 pages total)."
:demo (~examples/infinite-scroll-demo)
:sx-code "(div :id \"scroll-sentinel\"\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.scroll))))?page=2\"\n :sx-trigger \"intersect once\"\n :sx-target \"#scroll-items\"\n :sx-swap \"beforeend\"\n \"Loading more...\")"
- :handler-code (handler-source "ex-scroll")
+ :handler-names (list "ex-scroll")
:comp-placeholder-id "scroll-comp"
:wire-placeholder-id "scroll-wire"))
-(defcomp ~examples-content/example-progress-bar ()
+(defcomp
+ ~examples-content/example-progress-bar
+ ()
(~examples/page-content
:title "Progress Bar"
:description "Start a server-side job, then poll for progress using sx-trigger=\"load delay:500ms\" on each response. The bar fills up and stops when complete."
:demo-description "Click start to begin a simulated job."
:demo (~examples/progress-bar-demo)
:sx-code ";; Start the job\n(button\n :sx-post \"/sx/(geography.(hypermedia.(example.(api.progress-start))))\"\n :sx-target \"#progress-target\"\n :sx-swap \"innerHTML\")\n\n;; Each response re-polls via sx-trigger=\"load\"\n(div :sx-get \"/sx/(geography.(hypermedia.(example.(api.progress-status))))?job=ID\"\n :sx-trigger \"load delay:500ms\"\n :sx-target \"#progress-target\"\n :sx-swap \"innerHTML\")"
- :handler-code (str (handler-source "ex-progress-start") "\n\n" (handler-source "ex-progress-status"))
+ :handler-names (list "ex-progress-start" "ex-progress-status")
:comp-placeholder-id "progress-comp"
:wire-placeholder-id "progress-wire"))
-(defcomp ~examples-content/example-active-search ()
+(defcomp
+ ~examples-content/example-active-search
+ ()
(~examples/page-content
:title "Active Search"
:description "An input with sx-trigger=\"keyup delay:300ms changed\" debounces keystrokes and only fires when the value changes. The server filters a list of programming languages."
:demo-description "Type to search through 20 programming languages."
:demo (~examples/active-search-demo)
:sx-code "(input :type \"text\" :name \"q\"\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.search))))\"\n :sx-trigger \"keyup delay:300ms changed\"\n :sx-target \"#search-results\"\n :sx-swap \"innerHTML\"\n :placeholder \"Search...\")"
- :handler-code (handler-source "ex-search")
+ :handler-names (list "ex-search")
:comp-placeholder-id "search-comp"
:wire-placeholder-id "search-wire"))
-(defcomp ~examples-content/example-inline-validation ()
+(defcomp
+ ~examples-content/example-inline-validation
+ ()
(~examples/page-content
:title "Inline Validation"
:description "Validate an email field on blur. The server checks format and whether it is taken, returning green or red feedback inline."
:demo-description "Enter an email and click away (blur) to validate."
:demo (~examples/inline-validation-demo)
:sx-code "(input :type \"text\" :name \"email\"\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.validate))))\"\n :sx-trigger \"blur\"\n :sx-target \"#email-feedback\"\n :sx-swap \"innerHTML\"\n :placeholder \"user@example.com\")"
- :handler-code (handler-source "ex-validate")
+ :handler-names (list "ex-validate")
:comp-placeholder-id "validate-comp"
:wire-placeholder-id "validate-wire"))
-(defcomp ~examples-content/example-value-select ()
+(defcomp
+ ~examples-content/example-value-select
+ ()
(~examples/page-content
:title "Value Select"
:description "Two linked selects: pick a category and the second select updates with matching items via sx-get."
:demo-description "Select a category to populate the item dropdown."
:demo (~examples/value-select-demo)
:sx-code "(select :name \"category\"\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.values))))\"\n :sx-trigger \"change\"\n :sx-target \"#value-items\"\n :sx-swap \"innerHTML\"\n (option \"Languages\")\n (option \"Frameworks\")\n (option \"Databases\"))"
- :handler-code (handler-source "ex-values")
+ :handler-names (list "ex-values")
:comp-placeholder-id "values-comp"
:wire-placeholder-id "values-wire"))
-(defcomp ~examples-content/example-reset-on-submit ()
+(defcomp
+ ~examples-content/example-reset-on-submit
+ ()
(~examples/page-content
:title "Reset on Submit"
:description "Use sx-on:afterSwap=\"this.reset()\" to clear form inputs after a successful submission."
:demo-description "Submit a message — the input resets after each send."
:demo (~examples/reset-on-submit-demo)
:sx-code "(form :id \"reset-form\"\n :sx-post \"/sx/(geography.(hypermedia.(example.(api.reset-submit))))\"\n :sx-target \"#reset-result\"\n :sx-swap \"innerHTML\"\n :sx-on:afterSwap \"this.reset()\"\n (input :type \"text\" :name \"message\")\n (button :type \"submit\" \"Send\"))"
- :handler-code (handler-source "ex-reset-submit")
+ :handler-names (list "ex-reset-submit")
:comp-placeholder-id "reset-comp"
:wire-placeholder-id "reset-wire"))
-(defcomp ~examples-content/example-edit-row ()
+(defcomp
+ ~examples-content/example-edit-row
+ ()
(~examples/page-content
:title "Edit Row"
:description "Click edit to replace a table row with input fields. Save or cancel swaps back the display row. Uses sx-include to gather form values from the row."
:demo-description "Click edit on any row to modify it inline."
- :demo (~examples/edit-row-demo :rows (list
- (list "1" "Widget A" "19.99" "142")
- (list "2" "Widget B" "24.50" "89")
- (list "3" "Widget C" "12.00" "305")
- (list "4" "Widget D" "45.00" "67")))
+ :demo (~examples/edit-row-demo
+ :rows (list
+ (list "1" "Widget A" "19.99" "142")
+ (list "2" "Widget B" "24.50" "89")
+ (list "3" "Widget C" "12.00" "305")
+ (list "4" "Widget D" "45.00" "67")))
:sx-code "(button\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.(editrow.1)))))\"\n :sx-target \"#erow-1\"\n :sx-swap \"outerHTML\"\n \"edit\")\n\n;; Save sends form data via POST\n(button\n :sx-post \"/sx/(geography.(hypermedia.(example.(api.(editrow.1)))))\"\n :sx-target \"#erow-1\"\n :sx-swap \"outerHTML\"\n :sx-include \"#erow-1\"\n \"save\")"
- :handler-code (str (handler-source "ex-editrow-form") "\n\n" (handler-source "ex-editrow-save"))
+ :handler-names (list "ex-editrow-form" "ex-editrow-save")
:comp-placeholder-id "editrow-comp"
:wire-placeholder-id "editrow-wire"))
-(defcomp ~examples-content/example-bulk-update ()
+(defcomp
+ ~examples-content/example-bulk-update
+ ()
(~examples/page-content
:title "Bulk Update"
:description "Select rows with checkboxes and use Activate/Deactivate buttons. sx-include gathers checkbox values from the form."
:demo-description "Check some rows, then click Activate or Deactivate."
- :demo (~examples/bulk-update-demo :users (list
- (list "1" "Alice Chen" "alice@example.com" "active")
- (list "2" "Bob Rivera" "bob@example.com" "inactive")
- (list "3" "Carol Zhang" "carol@example.com" "active")
- (list "4" "Dan Okafor" "dan@example.com" "inactive")
- (list "5" "Eve Larsson" "eve@example.com" "active")))
+ :demo (~examples/bulk-update-demo
+ :users (list
+ (list "1" "Alice Chen" "alice@example.com" "active")
+ (list "2" "Bob Rivera" "bob@example.com" "inactive")
+ (list "3" "Carol Zhang" "carol@example.com" "active")
+ (list "4" "Dan Okafor" "dan@example.com" "inactive")
+ (list "5" "Eve Larsson" "eve@example.com" "active")))
:sx-code "(button\n :sx-post \"/sx/(geography.(hypermedia.(example.(api.bulk))))?action=activate\"\n :sx-target \"#bulk-table\"\n :sx-swap \"innerHTML\"\n :sx-include \"#bulk-form\"\n \"Activate\")"
- :handler-code (handler-source "ex-bulk")
+ :handler-names (list "ex-bulk")
:comp-placeholder-id "bulk-comp"
:wire-placeholder-id "bulk-wire"))
-(defcomp ~examples-content/example-swap-positions ()
+(defcomp
+ ~examples-content/example-swap-positions
+ ()
(~examples/page-content
:title "Swap Positions"
:description "Demonstrates different swap modes: beforeend appends, afterbegin prepends, and none skips the main swap while still processing OOB updates."
:demo-description "Try each button to see different swap behaviours."
:demo (~examples/swap-positions-demo)
:sx-code ";; Append to end\n(button :sx-post \"/sx/(geography.(hypermedia.(example.(api.swap-log))))?mode=beforeend\"\n :sx-target \"#swap-log\" :sx-swap \"beforeend\"\n \"Add to End\")\n\n;; Prepend to start\n(button :sx-post \"/sx/(geography.(hypermedia.(example.(api.swap-log))))?mode=afterbegin\"\n :sx-target \"#swap-log\" :sx-swap \"afterbegin\"\n \"Add to Start\")\n\n;; No swap — OOB counter update only\n(button :sx-post \"/sx/(geography.(hypermedia.(example.(api.swap-log))))?mode=none\"\n :sx-target \"#swap-log\" :sx-swap \"none\"\n \"Silent Ping\")"
- :handler-code (handler-source "ex-swap-log")
+ :handler-names (list "ex-swap-log")
:wire-placeholder-id "swap-wire"))
-(defcomp ~examples-content/example-select-filter ()
+(defcomp
+ ~examples-content/example-select-filter
+ ()
(~examples/page-content
:title "Select Filter"
:description "sx-select lets the client pick a specific section from the server response by CSS selector. The server always returns the full dashboard — the client filters."
:demo-description "Different buttons select different parts of the same server response."
:demo (~examples/select-filter-demo)
:sx-code ";; Pick just the stats section from the response\n(button\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.dashboard))))\"\n :sx-target \"#filter-target\"\n :sx-swap \"innerHTML\"\n :sx-select \"#dash-stats\"\n \"Stats Only\")\n\n;; No sx-select — get the full response\n(button\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.dashboard))))\"\n :sx-target \"#filter-target\"\n :sx-swap \"innerHTML\"\n \"Full Dashboard\")"
- :handler-code (handler-source "ex-dashboard")
+ :handler-names (list "ex-dashboard")
:wire-placeholder-id "filter-wire"))
-(defcomp ~examples-content/example-tabs ()
+(defcomp
+ ~examples-content/example-tabs
+ ()
(~examples/page-content
:title "Tabs"
:description "Tab navigation using sx-push-url to update the browser URL. Back/forward buttons navigate between previously visited tabs."
:demo-description "Click tabs to switch content. Watch the browser URL change."
:demo (~examples/tabs-demo)
:sx-code "(button\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.(tabs.tab1)))))\"\n :sx-target \"#tab-content\"\n :sx-swap \"innerHTML\"\n :sx-push-url \"/sx/(geography.(hypermedia.(example.tabs)))?tab=tab1\"\n \"Overview\")"
- :handler-code (handler-source "ex-tabs")
+ :handler-names (list "ex-tabs")
:wire-placeholder-id "tabs-wire"))
-(defcomp ~examples-content/example-animations ()
+(defcomp
+ ~examples-content/example-animations
+ ()
(~examples/page-content
:title "Animations"
:description "CSS animations play on swap. The component injects a style tag with a keyframe animation and applies the class. Each click picks a random background colour."
:demo-description "Click to swap in content with a fade-in animation."
:demo (~examples/animations-demo)
:sx-code "(button\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.animate))))\"\n :sx-target \"#anim-target\"\n :sx-swap \"innerHTML\"\n \"Load with animation\")\n\n;; Component uses CSS animation class\n(defcomp ~examples-content/anim-result (&key color time)\n (div :class \"sx-fade-in ...\"\n (style \".sx-fade-in { animation: sxFadeIn 0.5s }\")\n (p \"Faded in!\")))"
- :handler-code (handler-source "ex-animate")
+ :handler-names (list "ex-animate")
:comp-placeholder-id "anim-comp"
:wire-placeholder-id "anim-wire"))
-(defcomp ~examples-content/example-dialogs ()
+(defcomp
+ ~examples-content/example-dialogs
+ ()
(~examples/page-content
:title "Dialogs"
:description "Open a modal dialog by swapping in the dialog component. Close by swapping in empty content. Pure sx — no JavaScript library needed."
:demo-description "Click to open a modal dialog."
:demo (~examples/dialogs-demo)
:sx-code "(button\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.dialog))))\"\n :sx-target \"#dialog-container\"\n :sx-swap \"innerHTML\"\n \"Open Dialog\")\n\n;; Dialog closes by swapping empty content\n(button\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.dialog-close))))\"\n :sx-target \"#dialog-container\"\n :sx-swap \"innerHTML\"\n \"Close\")"
- :handler-code (str (handler-source "ex-dialog") "\n\n" (handler-source "ex-dialog-close"))
+ :handler-names (list "ex-dialog" "ex-dialog-close")
:comp-placeholder-id "dialog-comp"
:wire-placeholder-id "dialog-wire"))
-(defcomp ~examples-content/example-keyboard-shortcuts ()
+(defcomp
+ ~examples-content/example-keyboard-shortcuts
+ ()
(~examples/page-content
:title "Keyboard Shortcuts"
:description "Use sx-trigger with keyup event filters and from:body to listen for global keyboard shortcuts. The filter prevents firing when typing in inputs."
:demo-description "Press s, n, or h on your keyboard."
:demo (~examples/keyboard-shortcuts-demo)
:sx-code "(div :id \"kbd-target\"\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.keyboard))))?key=s\"\n :sx-trigger \"keyup[key=='s'&&!event.target.matches('input,textarea')] from:body\"\n :sx-swap \"innerHTML\"\n \"Press a shortcut key...\")"
- :handler-code (handler-source "ex-keyboard")
+ :handler-names (list "ex-keyboard")
:comp-placeholder-id "kbd-comp"
:wire-placeholder-id "kbd-wire"))
-(defcomp ~examples-content/example-put-patch ()
+(defcomp
+ ~examples-content/example-put-patch
+ ()
(~examples/page-content
:title "PUT / PATCH"
:description "sx-put replaces the entire resource. This example shows a profile card with an Edit All button that sends a PUT with all fields."
:demo-description "Click Edit All to replace the full profile via PUT."
- :demo (~examples/put-patch-demo :name "Ada Lovelace" :email "ada@example.com" :role "Engineer")
+ :demo (~examples/put-patch-demo
+ :name "Ada Lovelace"
+ :email "ada@example.com"
+ :role "Engineer")
:sx-code ";; Replace entire resource\n(form :sx-put \"/sx/(geography.(hypermedia.(example.(api.putpatch))))\"\n :sx-target \"#pp-target\" :sx-swap \"innerHTML\"\n (input :name \"name\") (input :name \"email\")\n (button \"Save All (PUT)\"))"
- :handler-code (str (handler-source "ex-pp-edit-all") "\n\n" (handler-source "ex-pp-put"))
+ :handler-names (list "ex-pp-edit-all" "ex-pp-put")
:comp-placeholder-id "pp-comp"
:wire-placeholder-id "pp-wire"))
-(defcomp ~examples-content/example-json-encoding ()
+(defcomp
+ ~examples-content/example-json-encoding
+ ()
(~examples/page-content
:title "JSON Encoding"
:description "Use sx-encoding=\"json\" to send form data as a JSON body instead of URL-encoded form data. The server echoes back what it received."
:demo-description "Submit the form and see the JSON body the server received."
:demo (~examples/json-encoding-demo)
:sx-code "(form\n :sx-post \"/sx/(geography.(hypermedia.(example.(api.json-echo))))\"\n :sx-target \"#json-result\"\n :sx-swap \"innerHTML\"\n :sx-encoding \"json\"\n (input :name \"name\" :value \"Ada\")\n (input :type \"number\" :name \"age\" :value \"36\")\n (button \"Submit as JSON\"))"
- :handler-code (handler-source "ex-json-echo")
+ :handler-names (list "ex-json-echo")
:comp-placeholder-id "json-comp"
:wire-placeholder-id "json-wire"))
-(defcomp ~examples-content/example-vals-and-headers ()
+(defcomp
+ ~examples-content/example-vals-and-headers
+ ()
(~examples/page-content
:title "Vals & Headers"
:description "sx-vals adds extra key/value pairs to the request parameters. sx-headers adds custom HTTP headers. The server echoes back what it received."
:demo-description "Click each button to see what the server receives."
:demo (~examples/vals-headers-demo)
:sx-code ";; Send extra values with the request\n(button\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.echo-vals))))\"\n :sx-vals \"{\\\"source\\\": \\\"button\\\"}\"\n \"Send with vals\")\n\n;; Send custom headers\n(button\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.echo-headers))))\"\n :sx-headers {:X-Custom-Token \"abc123\"}\n \"Send with headers\")"
- :handler-code (str (handler-source "ex-echo-vals") "\n\n" (handler-source "ex-echo-headers"))
+ :handler-names (list "ex-echo-vals" "ex-echo-headers")
:comp-placeholder-id "vals-comp"
:wire-placeholder-id "vals-wire"))
-(defcomp ~examples-content/example-loading-states ()
+(defcomp
+ ~examples-content/example-loading-states
+ ()
(~examples/page-content
:title "Loading States"
:description "sx.js adds the .sx-request CSS class to any element that has an active request. Use pure CSS to show spinners, disable buttons, or change opacity during loading."
:demo-description "Click the button — it shows a spinner during the 2-second request."
:demo (~examples/loading-states-demo)
:sx-code ";; .sx-request class added during request\n(style \".sx-loading-btn.sx-request {\n opacity: 0.7; pointer-events: none; }\n.sx-loading-btn.sx-request .sx-spinner {\n display: inline-block; }\n.sx-loading-btn .sx-spinner {\n display: none; }\")\n\n(button :class \"sx-loading-btn\"\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.slow))))\"\n :sx-target \"#loading-result\"\n (span :class \"sx-spinner animate-spin\" \"...\")\n \"Load slow endpoint\")"
- :handler-code (handler-source "ex-slow")
+ :handler-names (list "ex-slow")
:comp-placeholder-id "loading-comp"
:wire-placeholder-id "loading-wire"))
-(defcomp ~examples-content/example-sync-replace ()
+(defcomp
+ ~examples-content/example-sync-replace
+ ()
(~examples/page-content
:title "Request Abort"
:description "sx-sync=\"replace\" aborts any in-flight request before sending a new one. This prevents stale responses from overwriting newer ones, even with random server delays."
:demo-description "Type quickly — only the latest result appears despite random 0.5-2s server delays."
:demo (~examples/sync-replace-demo)
:sx-code "(input :type \"text\" :name \"q\"\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.slow-search))))\"\n :sx-trigger \"keyup delay:200ms changed\"\n :sx-target \"#sync-result\"\n :sx-swap \"innerHTML\"\n :sx-sync \"replace\"\n \"Type to search...\")"
- :handler-code (handler-source "ex-slow-search")
+ :handler-names (list "ex-slow-search")
:comp-placeholder-id "sync-comp"
:wire-placeholder-id "sync-wire"))
-(defcomp ~examples-content/example-retry ()
+(defcomp
+ ~examples-content/example-retry
+ ()
(~examples/page-content
:title "Retry"
:description "sx-retry=\"exponential:1000:8000\" retries failed requests with exponential backoff starting at 1s up to 8s. The endpoint fails the first 2 attempts and succeeds on the 3rd."
:demo-description "Click the button — watch it retry automatically after failures."
:demo (~examples/retry-demo)
:sx-code "(button\n :sx-get \"/sx/(geography.(hypermedia.(example.(api.flaky))))\"\n :sx-target \"#retry-result\"\n :sx-swap \"innerHTML\"\n :sx-retry \"exponential:1000:8000\"\n \"Call flaky endpoint\")"
- :handler-code (handler-source "ex-flaky")
+ :handler-names (list "ex-flaky")
:comp-placeholder-id "retry-comp"
:wire-placeholder-id "retry-wire"))
diff --git a/sx/sx/examples.sx b/sx/sx/examples.sx
index 4b3f74d6..c8c32aa0 100644
--- a/sx/sx/examples.sx
+++ b/sx/sx/examples.sx
@@ -7,7 +7,7 @@
demo
(sx-code :as string)
(sx-lang :as string?)
- (handler-code :as string)
+ (handler-names :as list)
(handler-lang :as string?)
(comp-placeholder-id :as string?)
(wire-placeholder-id :as string?)
@@ -17,31 +17,38 @@
(~docs/page
:title title
(p :class "text-stone-600 mb-6" description)
- (~examples/card
- :title "Demo"
- :description demo-description
- (~examples/demo demo))
- (h3 :class "text-lg font-semibold text-stone-700 mt-6" "S-expression")
- (~examples/source
- :src-code (highlight sx-code (if sx-lang sx-lang "lisp")))
+ (error-boundary
+ (~examples/card
+ :title "Demo"
+ :description demo-description
+ (~examples/demo demo)))
+ (h3 :class "text-lg font-semibold text-stone-700 mt-8 mb-3" "S-expression")
+ (error-boundary
+ (~examples/source
+ :src-code (highlight sx-code (if sx-lang sx-lang "lisp"))))
(when
comp-placeholder-id
(<>
(h3
- :class "text-lg font-semibold text-stone-700 mt-6"
+ :class "text-lg font-semibold text-stone-700 mt-8 mb-3"
(if comp-heading comp-heading "Component"))
- (~docs/placeholder :id comp-placeholder-id)))
+ (error-boundary (~docs/placeholder :id comp-placeholder-id))))
(h3
- :class "text-lg font-semibold text-stone-700 mt-6"
+ :class "text-lg font-semibold text-stone-700 mt-8 mb-3"
(if handler-heading handler-heading "Server handler"))
- (~examples/source
- :src-code (highlight handler-code (if handler-lang handler-lang "python")))
+ (error-boundary
+ (~examples/source
+ :src-code (highlight
+ (join "\n\n" (map handler-source handler-names))
+ (if handler-lang handler-lang "python"))))
(div
:class "flex items-center justify-between mt-6"
(h3 :class "text-lg font-semibold text-stone-700" "Wire response")
(~docs/clear-cache-btn))
(when wire-note (p :class "text-stone-500 text-sm mb-2" wire-note))
- (when wire-placeholder-id (~docs/placeholder :id wire-placeholder-id))))
+ (when
+ wire-placeholder-id
+ (error-boundary (~docs/placeholder :id wire-placeholder-id)))))
(defcomp
~examples/reference-index-content
diff --git a/tests/playwright/spa-navigation.spec.js b/tests/playwright/spa-navigation.spec.js
index 3e2609e7..faa7fe75 100644
--- a/tests/playwright/spa-navigation.spec.js
+++ b/tests/playwright/spa-navigation.spec.js
@@ -1,90 +1,100 @@
// SPA navigation tests — verify header, nav, and content survive navigation
// Tests that OOB swaps update nav while preserving the header island,
-// and that rendering errors are scoped to #sx-content.
+// that sx-select extracts content without nesting, and that rendering
+// errors are scoped to #sx-content via error-boundary.
const { test, expect } = require('playwright/test');
const BASE_URL = process.env.SX_TEST_URL || 'http://localhost:8013';
test.describe('SPA navigation', () => {
- test('header island survives SPA nav to sibling page', async ({ page }) => {
- await page.goto(BASE_URL + '/sx/(geography.(hypermedia.(example)))', { waitUntil: 'networkidle' });
+ test('no #sx-content nesting after SPA nav', async ({ page }) => {
+ await page.goto(BASE_URL + '/sx/(geography)', { waitUntil: 'networkidle' });
+ await expect(page.locator('#sx-content')).toHaveCount(1);
- // Header should be present and hydrated
- const headerIsland = page.locator('[data-sx-island="layouts/header"]');
- await expect(headerIsland).toHaveCount(1);
- await expect(headerIsland).toContainText('sx');
+ // Navigate via SPA link to Reactive Islands
+ await page.click('a[sx-get*="(geography.(reactive))"]');
+ await page.waitForTimeout(4000);
- // Navigate via SPA
- await page.click('a[href*="click-to-load"]');
- await page.waitForURL('**/click-to-load**');
- await page.waitForTimeout(2000);
+ // Must still be exactly 1 #sx-content — no nesting
+ await expect(page.locator('#sx-content')).toHaveCount(1);
+ });
+
+ test('content renders after SPA nav (not empty boundary)', async ({ page }) => {
+ await page.goto(BASE_URL + '/sx/(geography)', { waitUntil: 'networkidle' });
+
+ await page.click('a[sx-get*="(geography.(reactive))"]');
+ await page.waitForTimeout(4000);
+
+ // Content should have actual page text
+ await expect(page.locator('#sx-content')).toContainText('Architecture', { timeout: 5000 });
+ });
+
+ test('nav updates via OOB on SPA navigation', async ({ page }) => {
+ await page.goto(BASE_URL + '/sx/(geography)', { waitUntil: 'networkidle' });
+ await expect(page.locator('#sx-nav')).toContainText('Geography');
+
+ await page.click('a[sx-get*="(geography.(reactive))"]');
+ await page.waitForTimeout(4000);
+
+ // Nav should update to show the new page
+ await expect(page.locator('#sx-nav')).toContainText('Reactive Islands');
+ });
+
+ test('header island survives SPA nav', async ({ page }) => {
+ await page.goto(BASE_URL + '/sx/(geography)', { waitUntil: 'networkidle' });
+ await expect(page.locator('[data-sx-island="layouts/header"]')).toHaveCount(1);
+
+ await page.click('a[sx-get*="(geography.(reactive))"]');
+ await page.waitForTimeout(4000);
- // Header island should still exist
await expect(page.locator('[data-sx-island="layouts/header"]')).toHaveCount(1);
await expect(page.locator('[data-sx-island="layouts/header"]')).toContainText('sx');
});
- test('nav updates via OOB on SPA navigation', async ({ page }) => {
+ test('nav updates even when content has render error', async ({ page }) => {
await page.goto(BASE_URL + '/sx/(geography.(hypermedia.(example)))', { waitUntil: 'networkidle' });
+ await expect(page.locator('#sx-nav')).toContainText('Examples');
- // Nav should show current breadcrumbs
- const nav = page.locator('#sx-nav');
- await expect(nav).toHaveCount(1);
- const navTextBefore = await nav.textContent();
- expect(navTextBefore).toContain('Examples');
+ await page.click('a[sx-get*="click-to-load"]');
+ await page.waitForTimeout(4000);
- // Navigate to a child page
- await page.click('a[href*="click-to-load"]');
- await page.waitForURL('**/click-to-load**');
- await page.waitForTimeout(2000);
-
- // Nav should update to show the new page in breadcrumbs
- const navTextAfter = await page.locator('#sx-nav').first().textContent();
- expect(navTextAfter).toContain('Click to Load');
+ // Nav should still update despite content error
+ await expect(page.locator('#sx-nav')).toContainText('Click to Load');
});
- test('#sx-content exists after SPA navigation', async ({ page }) => {
+ test('render error scoped to #sx-content via error-boundary', async ({ page }) => {
await page.goto(BASE_URL + '/sx/(geography.(hypermedia.(example)))', { waitUntil: 'networkidle' });
- await expect(page.locator('#sx-content')).toHaveCount(1);
- await page.click('a[href*="click-to-load"]');
- await page.waitForURL('**/click-to-load**');
- await page.waitForTimeout(2000);
+ await page.click('a[sx-get*="click-to-load"]');
+ await page.waitForTimeout(4000);
- // sx-content should still exist (may contain error boundary, but not be missing)
- await expect(page.locator('#sx-content').first()).toBeAttached();
+ // Error should be inside the error boundary within #sx-content
+ const errors = page.locator('#sx-content .sx-render-error');
+ await expect(errors).toHaveCount(1);
+ await expect(errors).toContainText('Render error');
+
+ // Header should still be intact
+ await expect(page.locator('[data-sx-island="layouts/header"]')).toHaveCount(1);
});
- test('rendering error scoped to #sx-content, not full page', async ({ page }) => {
- await page.goto(BASE_URL + '/sx/(geography.(hypermedia.(example)))', { waitUntil: 'networkidle' });
-
- // Verify page structure before nav
- await expect(page.locator('#sx-nav')).toHaveCount(1);
+ test('multiple SPA navigations maintain single #sx-content', async ({ page }) => {
+ await page.goto(BASE_URL + '/sx/(geography)', { waitUntil: 'networkidle' });
await expect(page.locator('#sx-content')).toHaveCount(1);
- await page.click('a[href*="click-to-load"]');
- await page.waitForURL('**/click-to-load**');
- await page.waitForTimeout(2000);
+ // First navigation
+ await page.click('a[sx-get*="(geography.(reactive))"]');
+ await page.waitForTimeout(4000);
+ await expect(page.locator('#sx-content')).toHaveCount(1);
+ await expect(page.locator('#sx-nav')).toContainText('Reactive Islands');
- // If there's a render error, it should be inside #sx-content
- const errors = page.locator('.sx-render-error');
- const errorCount = await errors.count();
- if (errorCount > 0) {
- // Error should be a descendant of #sx-content, not replacing the whole page
- const errorParent = await errors.first().evaluate(el => {
- let p = el;
- while (p) {
- if (p.id === 'sx-content') return 'sx-content';
- if (p.id === 'main-panel') return 'main-panel';
- p = p.parentElement;
- }
- return 'unknown';
- });
- expect(errorParent).toBe('sx-content');
-
- // Nav should still be present even with an error
- await expect(page.locator('#sx-nav').first()).toContainText('Click to Load');
+ // Navigate back to Geography
+ const geoLink = page.locator('a[sx-get="/sx/(geography)"]');
+ if (await geoLink.count() > 0) {
+ await geoLink.first().click();
+ await page.waitForTimeout(4000);
+ await expect(page.locator('#sx-content')).toHaveCount(1);
+ await expect(page.locator('#sx-nav')).toContainText('Geography');
}
});
});
diff --git a/web/adapter-dom.sx b/web/adapter-dom.sx
index 55416866..8eb25cd5 100644
--- a/web/adapter-dom.sx
+++ b/web/adapter-dom.sx
@@ -1302,8 +1302,8 @@
(fn
((args :as list) (env :as dict) (ns :as string))
(let
- ((fallback-expr (first args))
- (body-exprs (rest args))
+ ((fallback-expr (if (> (len args) 1) (first args) nil))
+ (body-exprs (if (> (len args) 1) (rest args) args))
(container (dom-create-element "div" nil))
(retry-version (signal 0)))
(dom-set-attr container "data-sx-boundary" "true")
@@ -1333,6 +1333,6 @@
(retry-fn
(fn () (swap! retry-version (fn (n) (+ n 1))))))
(let
- ((fallback-dom (if (lambda? fallback-fn) (render-lambda-dom fallback-fn (list err retry-fn) env ns) (render-to-dom (apply fallback-fn (list err retry-fn)) env ns))))
+ ((fallback-dom (if (nil? fallback-fn) (let ((el (dom-create-element "div" nil))) (dom-set-attr el "class" "sx-render-error") (dom-set-attr el "style" "color:red;font-size:0.875rem;padding:0.5rem;border:1px solid red;border-radius:0.25rem;margin:0.5rem 0;") (dom-set-text-content el (str "Render error: " err)) el) (if (lambda? fallback-fn) (render-lambda-dom fallback-fn (list err retry-fn) env ns) (render-to-dom (apply fallback-fn (list err retry-fn)) env ns)))))
(dom-append container fallback-dom)))))))
container)))
diff --git a/web/adapter-html.sx b/web/adapter-html.sx
index e6ffc30f..e87c2d27 100644
--- a/web/adapter-html.sx
+++ b/web/adapter-html.sx
@@ -110,10 +110,47 @@
(render-html-lake args env)
(= name "marsh")
(render-html-marsh args env)
- (or
- (= name "portal")
- (= name "error-boundary")
- (= name "promise-delayed"))
+ (= name "error-boundary")
+ (let
+ ((has-fallback (> (len args) 1)))
+ (let
+ ((body-exprs (if has-fallback (rest args) args))
+ (fallback-expr (if has-fallback (first args) nil)))
+ (str
+ ""
+ (try-catch
+ (fn
+ ()
+ (join
+ ""
+ (map (fn (x) (render-to-html x env)) body-exprs)))
+ (fn
+ (err)
+ (let
+ ((safe-err (replace (replace (str err) "<" "<") ">" ">")))
+ (if
+ (and fallback-expr (not (nil? fallback-expr)))
+ (try-catch
+ (fn
+ ()
+ (render-to-html
+ (list
+ (trampoline (eval-expr fallback-expr env))
+ err
+ nil)
+ env))
+ (fn
+ (e2)
+ (str
+ "
Render error: "
+ safe-err
+ "
")))
+ (str
+ "
Render error: "
+ safe-err
+ "
")))))
+ "
")))
+ (or (= name "portal") (= name "promise-delayed"))
(join "" (map (fn (x) (render-to-html x env)) args))
(contains? HTML_TAGS name)
(render-html-element name args env)
diff --git a/web/adapter-sx.sx b/web/adapter-sx.sx
index 788257c7..9382231f 100644
--- a/web/adapter-sx.sx
+++ b/web/adapter-sx.sx
@@ -66,7 +66,24 @@
(= name "marsh")
(aser-call name args env)
(= name "error-boundary")
- (aser-call name args env)
+ (let
+ ((has-fallback (> (len args) 1)))
+ (let
+ ((body-exprs (if has-fallback (rest args) args))
+ (err-str nil))
+ (let
+ ((rendered (try-catch (fn () (join "" (map (fn (x) (let ((v (aser x env))) (cond (= (type-of v) "sx-expr") (sx-expr-source v) (nil? v) "" :else (serialize v)))) body-exprs))) (fn (err) (set! err-str (str err)) nil))))
+ (if
+ rendered
+ (make-sx-expr (str "(error-boundary " rendered ")"))
+ (make-sx-expr
+ (str
+ "(div :data-sx-boundary \"true\" "
+ "(div :class \"sx-render-error\" "
+ ":style \"color:red;font-size:0.875rem;padding:0.5rem;border:1px solid red;border-radius:0.25rem;margin:0.5rem 0;\" "
+ "\"Render error: "
+ (replace (replace err-str "\"" "'") "\\" "\\\\")
+ "\"))"))))))
(contains? HTML_TAGS name)
(aser-call name args env)
(or (special-form? name) (ho-form? name))
diff --git a/web/orchestration.sx b/web/orchestration.sx
index 789cf6d7..70621db6 100644
--- a/web/orchestration.sx
+++ b/web/orchestration.sx
@@ -288,24 +288,21 @@
s)
(post-swap t)))
(let
- ((select-sel (dom-get-attr el "sx-select"))
- (content
- (if
- select-sel
- (select-from-container container select-sel)
- (children-to-fragment container))))
- (dispose-islands-in target)
- (with-transition
- use-transition
- (fn
- ()
- (let
- ((swap-result (swap-dom-nodes target content swap-style)))
- (post-swap
- (if
- (= swap-style "outerHTML")
- (dom-parent (or swap-result target))
- (or swap-result target))))))))))))))
+ ((select-sel (dom-get-attr el "sx-select")))
+ (let
+ ((content (if select-sel (select-from-container container select-sel) (children-to-fragment container))))
+ (dispose-islands-in target)
+ (with-transition
+ use-transition
+ (fn
+ ()
+ (let
+ ((swap-result (swap-dom-nodes target content swap-style)))
+ (post-swap
+ (if
+ (= swap-style "outerHTML")
+ (dom-parent (or swap-result target))
+ (or swap-result target)))))))))))))))
(define
handle-html-response
@@ -973,17 +970,35 @@
:effects (mutation io)
(fn
(target rendered (pathname :as string))
- (do
- (dispose-islands-in target)
- (dom-set-text-content target "")
- (dom-append target rendered)
- (hoist-head-elements-full target)
- (process-elements target)
- (sx-hydrate-elements target)
- (sx-hydrate-islands target)
- (run-post-render-hooks)
- (dom-dispatch target "sx:clientRoute" (dict "pathname" pathname))
- (log-info (str "sx:route client " pathname)))))
+ (let
+ ((container (dom-create-element "div" nil)))
+ (dom-append container rendered)
+ (process-oob-swaps
+ container
+ (fn
+ (t oob (s :as string))
+ (dispose-islands-in t)
+ (swap-dom-nodes
+ t
+ (if (= s "innerHTML") (children-to-fragment oob) oob)
+ s)
+ (post-swap t)))
+ (let
+ ((target-id (dom-get-attr target "id")))
+ (let
+ ((inner (if target-id (dom-query container (str "#" target-id)) nil)))
+ (let
+ ((content (if inner (children-to-fragment inner) (children-to-fragment container))))
+ (dispose-islands-in target)
+ (dom-set-text-content target "")
+ (dom-append target content)
+ (hoist-head-elements-full target)
+ (process-elements target)
+ (sx-hydrate-elements target)
+ (sx-hydrate-islands target)
+ (run-post-render-hooks)
+ (dom-dispatch target "sx:clientRoute" (dict "pathname" pathname))
+ (log-info (str "sx:route client " pathname))))))))
(define
resolve-route-target