Merge branch 'worktree-iso-phase-4' into macros

This commit is contained in:
2026-03-07 17:34:14 +00:00
15 changed files with 586 additions and 38 deletions

View File

@@ -458,6 +458,26 @@
:selected "Async IO")
:content (~async-io-demo-content))
(defpage streaming-demo
:path "/isomorphism/streaming"
:auth :public
:stream true
:layout (:sx-section
:section "Isomorphism"
:sub-label "Isomorphism"
:sub-href "/isomorphism/"
:sub-nav (~section-nav :items isomorphism-nav-items :current "Streaming")
:selected "Streaming")
:fallback (div :class "p-8 space-y-4 animate-pulse"
(div :class "h-8 bg-stone-200 rounded w-1/3")
(div :class "h-4 bg-stone-200 rounded w-2/3")
(div :class "h-64 bg-stone-200 rounded"))
:data (streaming-demo-data)
:content (~streaming-demo-content
:streamed-at streamed-at
:message message
:items items))
;; Wildcard must come AFTER specific routes (first-match routing)
(defpage isomorphism-page
:path "/isomorphism/<slug>"

View File

@@ -26,6 +26,7 @@ def _register_sx_helpers() -> None:
"data-test-data": _data_test_data,
"run-spec-tests": _run_spec_tests,
"run-modular-tests": _run_modular_tests,
"streaming-demo-data": _streaming_demo_data,
})
@@ -791,3 +792,21 @@ def _data_test_data() -> dict:
"phase": "Phase 4 — Client Async & IO Bridge",
"transport": "SX wire format (text/sx)",
}
async def _streaming_demo_data() -> dict:
"""Simulate slow IO for streaming demo — 1.5s delay."""
import asyncio
await asyncio.sleep(1.5)
from datetime import datetime, timezone
return {
"streamed-at": datetime.now(timezone.utc).isoformat(timespec="seconds"),
"message": "This content was streamed after a 1.5 second delay.",
"items": [
{"label": "Shell", "detail": "HTML shell with suspense placeholders sent immediately"},
{"label": "Bootstrap", "detail": "sx-browser.js loads, renders fallback skeletons"},
{"label": "IO Start", "detail": "Data fetch and header fetch run concurrently"},
{"label": "Resolve", "detail": "As each IO completes, <script> chunk replaces placeholder"},
{"label": "Done", "detail": "Page fully rendered — all suspense resolved"},
],
}