Files
rose-ash/shared/static/wasm/sx/module-manifest.json
giles 2f3e727a6f Transparent lazy module loading — code loads like data
When the VM or CEK hits an undefined symbol, it checks a symbol→library
index (built from manifest exports at boot), loads the library that
exports it, and returns the value. Execution continues as if the module
was always loaded. No import statements, no load-library! calls, no
Suspense boundaries — just call the function.

This is the same mechanism as IO suspension for data fetching. The
programmer doesn't distinguish between calling a local function and
calling one that needs its module fetched first. The runtime treats
code as just another resource.

Implementation:
- _symbol_resolve_hook in sx_types.ml — called by env_get_id (CEK path)
  and vm_global_get (VM path) when a symbol isn't found
- Symbol→library index built from manifest exports in sx-platform.js
- __resolve-symbol native calls __sxLoadLibrary, module loads, symbol
  appears in globals, execution resumes
- compile-modules.js extracts export lists into module-manifest.json
- Playground page demonstrates: (freeze-scope) triggers freeze.sxbc
  download transparently on first use

2650/2650 tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 22:23:45 +00:00

883 lines
20 KiB
JSON

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