Fix island hydration double-render bug, add marshes plan
Client-rendered islands were re-hydrated by boot.sx because renderDomIsland didn't mark them as processed. Hydration read empty data-sx-state, overwriting kwargs (e.g. path) with NIL. Fix: mark-processed! in adapter-dom.sx so boot skips them. New plan: marshes — where reactivity and hypermedia interpenetrate. Three patterns: server writes to signals, reactive marsh zones with transforms, and signal-bound hypermedia interpretation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
// =========================================================================
|
||||
|
||||
var NIL = Object.freeze({ _nil: true, toString: function() { return "nil"; } });
|
||||
var SX_VERSION = "2026-03-10T14:25:47Z";
|
||||
var SX_VERSION = "2026-03-10T15:52:32Z";
|
||||
|
||||
function isNil(x) { return x === NIL || x === null || x === undefined; }
|
||||
function isSxTruthy(x) { return x !== false && !isNil(x); }
|
||||
@@ -1781,6 +1781,7 @@ return result; }, args);
|
||||
var container = domCreateElement("span", NIL);
|
||||
var disposers = [];
|
||||
domSetAttr(container, "data-sx-island", islandName);
|
||||
markProcessed(container, "island-hydrated");
|
||||
return (function() {
|
||||
var bodyDom = withIslandScope(function(disposable) { return append_b(disposers, disposable); }, function() { return renderToDom(componentBody(island), local, ns); });
|
||||
domAppend(container, bodyDom);
|
||||
|
||||
Reference in New Issue
Block a user