@marko/runtime-tags@6.3.17
Patch Changes
-
#3527
be7dea6Thanks @DylanPiercey! - Give a cause-specific error when two-way binding (value:=x) to a value from array destructuring, explaining that it has no change handler and suggesting object destructuring or an explicitChangeattribute, instead of the generic "Unable to bind to value." -
#3523
d0e32deThanks @DylanPiercey! - Emit the bare value for a text-only tag or html-comment whose body is a lone dynamic interpolation (<title>${x}</title>), letting the text sink coerce it instead of generating a redundant${_to_text(x)}template wrapper. -
#3531
74490b6Thanks @DylanPiercey! - Fix a controlled<select>with a void (undefined/null) value selecting a different<option>on the server than the client: SSR now normalizes a void value to""and marks avalue=""optionselected, matching DOM instead of letting the browser auto-pick the first option. -
#3407
bba9259Thanks @DylanPiercey! - Fix a client render where a rejected<await>or a failed lazy load under an ancestor<try @placeholder>left the placeholder shown forever. The failure path now completes the placeholder's await counter (unless it is a placeholder-less or resumed reorder counter), so the placeholder is dismissed and the caught content renders. -
#3522
a236904Thanks @DylanPiercey! - Emit a single Class-API interop registration per renderer, instead of one for each tag occurrence, trimming the redundant scriptlets when the same class component is used multiple times in a template. -
#3524
e6d462aThanks @DylanPiercey! - Stop emitting a dead scope binding, walk slot, and resume marker for acontentattribute on a native tag that also has body content — codegen already drops the attribute (body wins), so analyze now ignores it too. -
#3517
5025913Thanks @DylanPiercey! - Fix a hydration mismatch for a dynamic tag with positional args and a fallback body. When the tag resolves tonull(or a string),<${tag}(1, 2)>Fallback</>rendered nothing on the server but the fallback body on the client; the server now renders the fallback too. -
#3519
b19d9dcThanks @DylanPiercey! - Preserve tag-name case when escaping</styleinside<style>raw text, so an author-written</STYLE>in acontent:/url(...)/custom-property value is no longer lowercased. -
#3525
3446c8eThanks @DylanPiercey! - Flatten a text-only conditional written with the<else if=cond>space syntax into a single placeholder ternary, matching the<else-if=cond>spelling — both now skip the_ifruntime, branch scopes, and serialize guards. -
#3526
2190723Thanks @DylanPiercey! - Stop shipping a dead_closure_getpending-resume id in DOM output when a closure's subscriber section is not under a<try>@placeholder(only a sibling closure is) — the id had no matching HTML-side registration to look it up. -
#3518
58bb403Thanks @DylanPiercey! - Keep</html>in document order when the tag carries a resume marker (e.g.<html lang=input.lang>on a stateful page), instead of emitting it before the resume scripts. -
#3521
36cf307Thanks @DylanPiercey! - Speed up in-place keyed list updates. The<for>reconciler rebuilt an O(n) key→scope lookup map on every update even when nothing had moved. It now reuses the branch at each position directly and only builds the map — from the remaining unmatched scopes — once a key first lands out of order. -
#3535
04e289cThanks @DylanPiercey! - Restore a two-way-bound radio group (checkedValue:=) to its default member on a native form reset, instead of clobbering the bound value toundefined. On reset the fired handler now adopts the group's reset-restored default rather than the firing (unchecked) radio's value. -
#3510
c56de42Thanks @DylanPiercey! - Escape NUL and lone surrogates in a serializedRegExpsource.RegExp.sourceleaves a raw NUL or lone surrogate in the pattern unescaped, and the resume payload embeds the/.../literal directly into a<script>, where a NUL is folded to U+FFFD and a lone surrogate is unencodable in UTF-8 — silently corrupting the resumed regex (an SSR/CSR mismatch). Such characters are now emitted as\x00/\uXXXXescapes; paired surrogates and normal escapes are unaffected. -
#3529
f54e09aThanks @DylanPiercey! - Shrink the<for>reconciler by dropping a redundant map. A keyed list update already builds a key→scope lookup; it now stashes each scope's old index on that same pass, so the longest-increasing-subsequence step that plans moves no longer allocates and fills a second scope→positionMap. Same behavior, one fewer allocation per reordering update, and a slightly smaller runtime. -
#3513
118c4b6Thanks @DylanPiercey! - Fix an SSR/CSR mismatch for a<textarea>with a non-string initialvalue. SSR rendered the value as text content (_escape), while the client setdefaultValuevia thevalue=attribute normalization, sotrue/NaN/0nrendered differently after a client render/navigation than on the server (e.g.<textarea value=computeTotal()>yieldingNaN). SSR now coerces a textarea's value the same way — matching the client and<input>— so both agree. String values are unaffected, and the client runtime is unchanged. -
Updated dependencies [
0187289]:- @marko/compiler@5.41.4