Guard domAppend/domInsertAfter against spread values

Spread values (from ~cssx/tw etc.) are attribute dicts, not DOM nodes.
When they appear in non-element contexts (fragments, islands, lakes,
reactive branches), they must not be passed to appendChild/insertBefore.

Add _spread guard to platform domAppend and domInsertAfter — fixes
TypeError: Node.appendChild: Argument 1 does not implement interface Node.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-13 03:35:00 +00:00
parent c3430ade90
commit 9284a946ba
2 changed files with 5 additions and 5 deletions

View File

@@ -14,7 +14,7 @@
// =========================================================================
var NIL = Object.freeze({ _nil: true, toString: function() { return "nil"; } });
var SX_VERSION = "2026-03-13T03:23:01Z";
var SX_VERSION = "2026-03-13T03:34:17Z";
function isNil(x) { return x === NIL || x === null || x === undefined; }
function isSxTruthy(x) { return x !== false && !isNil(x); }
@@ -4369,7 +4369,7 @@ return (isSxTruthy((_batchDepth == 0)) ? (function() {
}
function domAppend(parent, child) {
if (parent && child) parent.appendChild(child);
if (parent && child && !child._spread) parent.appendChild(child);
}
function domPrepend(parent, child) {
@@ -4441,7 +4441,7 @@ return (isSxTruthy((_batchDepth == 0)) ? (function() {
}
function domInsertAfter(ref, node) {
if (ref && ref.parentNode && node) {
if (ref && ref.parentNode && node && !node._spread) {
ref.parentNode.insertBefore(node, ref.nextSibling);
}
}

View File

@@ -1620,7 +1620,7 @@ PLATFORM_DOM_JS = """
}
function domAppend(parent, child) {
if (parent && child) parent.appendChild(child);
if (parent && child && !child._spread) parent.appendChild(child);
}
function domPrepend(parent, child) {
@@ -1692,7 +1692,7 @@ PLATFORM_DOM_JS = """
}
function domInsertAfter(ref, node) {
if (ref && ref.parentNode && node) {
if (ref && ref.parentNode && node && !node._spread) {
ref.parentNode.insertBefore(node, ref.nextSibling);
}
}