Patch Changes
-
#4476
f30aee7Thanks @DylanPiercey! - Give every parameterless arrow in the client runtime, the client code the compiler generates (lazy loaders, setup and argument getters) and the inlined reorder runtime an unused parameter, which minifies a byte smaller (e=>instead of()=>), so pages ship a few bytes less. -
#4531
376775fThanks @DylanPiercey! - A resumed<await>body no longer serializes a link to its owner scope: the branch marker<await>writes beside the body already gives resume the owner, as it does for<if>and<for>. -
#4530
7f51d13Thanks @DylanPiercey! - Content rendered inside an<await>body no longer ships for the client to create when only the await's promise could change it: a settled promise updates the body the await's owner made, and never creates it anew. -
#4485
b92c3d6Thanks @DylanPiercey! - A branch the client creates (an<if>or<for>body, a dynamic tag, an<await>body) runs its setup as it is created, before the values it receives, as a template does when it mounts; a<try>or@catchbody still sets up in the queue, before its values, so an error it throws reaches the right<try>. A new row is built whole before it is inserted, a tag's variable reaches the tags after it once they are set up, and an error thrown while an@catchbody renders its error reaches the enclosing<try>instead of escaping it. A loop row that throws while rendering no longer leaves the loop unable to update, and a class component rendering content from a tags<for>attribute tag gets the new loop values when they change. -
#4481
b612f41Thanks @DylanPiercey! - A client-rendered<style>whose placeholder reads a value from outside the control flow body that renders it keeps that declaration; it used to be dropped. -
#4539
a5d21e5Thanks @DylanPiercey! - Shrink the client runtime's template walker and<id>helper. -
#4520
d22a438Thanks @DylanPiercey! - A<const>that names a template, used as a tag name inside a<for>or<if>body (<const/type=Card/><for|i| of=items><${type}/></for>), no longer throwsrender[Signal] is not a functionwhen the client renders that body. The tag renders its template directly, so the<const>is no longer kept or serialized for it. -
#4498
80e5dc5Thanks @DylanPiercey! - A page whose<define>body reads one of the page's functions under its params (inside<if=on>, say) no longer throws_resumed[registryId] is not a functionon resume when another tag on the page is interactive. The server now writes the function only where a call can change the param in the browser. -
#4472
89a4443Thanks @DylanPiercey! - A<define>tag variable's value, and a recursive call's, now depends on what its call passes, as a custom tag's already did, rather than on the params of the content it renders. A variable computed only from input no longer makes the page resume what reads it. -
#4472
89a4443Thanks @DylanPiercey! - A page whose<define>tag variable is passed to a child tag, or read in an<if>or<for>, no longer throws_resumed[registryId] is not a functionon resume: the variable's registration is written only when its value can change in the browser, where the page's module that registers it loads. -
#4536
7b2b68eThanks @DylanPiercey! - A<define>whose tag variable is never referenced no longer ships its content: the server stops building and serializing what it reads, and the client stops subscribing to it. -
#4535
3209e8bThanks @DylanPiercey! - A<for>row selector reads the row's key from its loop key slot, so the compiler no longer passes the key accessor. -
#4529
c32cd08Thanks @DylanPiercey! - A template loaded with theloadimport attribute renders where its import is part of a module cycle, including a template that loads itself: the server reads the template it loads as it renders, not when the importing module evaluates, where a cycle may not have evaluated it yet. A tag closing such a cycle no longer references the removed import on the client. -
#4497
526ac6dThanks @DylanPiercey! - A<define>that calls another<define>whose body reads a value of the template around them (<define/E>${input.x}</define><define/D><E/></define><D/>) no longer throwsCannot read properties of undefined (reading 'ClosureScopes:…')when it renders in the browser, or when a resumed page creates the inner call later. -
#4534
0187618Thanks @DylanPiercey! - Attaching an event handler no longer checks the element before delegating its event type, since delegation already registers each type once. -
#4491
6b9e9efThanks @DylanPiercey! - Keep a__proto__attribute as an own property of the input it builds, and keep integer keys too large for a number as strings. -
#4533
9c3ad57Thanks @DylanPiercey! - Server runtime error messages are no longer shipped in production builds. -
#4540
f191277Thanks @DylanPiercey! - Reuse a signal directly for a setup that only forwards to it, instead of wrapping it in another function. -
#4537
468ce62Thanks @DylanPiercey! - Reading$signalin a server render reports through a debug-only runtime helper, so production server output no longer carries its error message. -
#4499
b223f05Thanks @DylanPiercey! - A page that passes a child tag's returned function to another tag, or whose child reads the function it returns in a<script>, no longer throws_resumed[registryId] is not a functionon resume. The page links the tag variable's registration only when its value can change in the browser, where the page's module that registers it loads. -
#4521
5e6feb8Thanks @DylanPiercey! - Fix a Tags page whose only client work is a Class API component that hydrates itself losing the input and body it passes that component: the page now initializes the Tags runtime, which resumes them. -
#4538
1ab43ecThanks @DylanPiercey! - Drop an unused field from the inline walker runtime, saving four bytes of HTML per interactive page. -
Updated dependencies [
5e8b7d8,134baa7]:- @marko/compiler@5.42.13