Version Packages#1267
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
b61c1c1 to
ca3c00c
Compare
ca3c00c to
599085a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@ripple-ts/adapter-bun@0.3.83
Patch Changes
@ripple-ts/adapter-node@0.3.83
Patch Changes
@ripple-ts/adapter-vercel@0.3.83
Patch Changes
@tsrx/bun-plugin-preact@0.0.54
Patch Changes
[
8747e8f]:@tsrx/bun-plugin-react@0.1.54
Patch Changes
[
8747e8f]:@tsrx/bun-plugin-solid@0.0.25
Patch Changes
[
8747e8f,8747e8f]:@tsrx/bun-plugin-vue@0.0.35
Patch Changes
[
8747e8f]:create-ripple@0.3.83
Patch Changes
@tsrx/eslint-parser@0.3.83
Patch Changes
[
8747e8f,8747e8f]:@tsrx/eslint-plugin@0.3.83
Patch Changes
@ripple-ts/language-server@0.3.83
Patch Changes
[
8747e8f,8747e8f]:@tsrx/prettier-plugin@0.3.83
Patch Changes
[
8747e8f,8747e8f]:ripple@0.3.83
Patch Changes
#1269
8747e8fThanks @leonidaz! - Treat plain JS control flow
inside
@{ … }as ordinary JavaScript that returns JSX.Only
@-directives (@if/@for/@switch/@try) lower to template controlflow. Plain
if/for/for…of/for…in/while/do…while/switch/tryinside a code block are now compiled exactly like the same control flow in a
regular
function C() { …; return <jsx> }body — their JSX returns becometsrx_elementvalues rather than being template-ized.Previously these plain statements were mis-routed into the template transform:
on ripple an early-return guard produced a
_$_.if/_$_.switch/_$_.trywrapper (with dead code in the
switch/trycases) and plain loops threw acompile error; on solid they produced
<Show>/<Switch>/<For>/<Errored>(dropping trailing output fortry).They now stay as plain control flow, so early-return guards and loops behave
like normal JavaScript.
As part of this, the ripple client and server targets no longer emit the
return_guardbookkeeping variable: a plain earlyreturnis a real earlyreturn, so subsequent template output is naturally skipped without a guard flag.
On solid, this means a plain guard (
if (signal()) return …) inside acomponent body now runs once at setup — exactly like a regular Solid component —
instead of being lifted into a reactive
<Show>. Use@if(or another@-directive) when you want reactive conditional rendering.Updated dependencies
[
3d93339,5646eb4,8747e8f,8747e8f]:@ripple-ts/rollup-plugin@0.3.83
Patch Changes
[
3d93339,5646eb4,8747e8f,8747e8f]:@tsrx/rspack-plugin-preact@0.0.47
Patch Changes
[
8747e8f]:@tsrx/rspack-plugin-react@0.0.57
Patch Changes
[
8747e8f]:@tsrx/rspack-plugin-solid@0.0.44
Patch Changes
[
8747e8f,8747e8f]:@tsrx/rspack-plugin-vue@0.0.43
Patch Changes
[
8747e8f]:@tsrx/core@0.1.31
Patch Changes
#1269
8747e8fThanks @leonidaz! - Disallow
returnstatementsinside
@try/@catch/@pendingblocks.returnis only valid in the JS setup at the top of a@{ … }code block —never inside a
@-directive block.@if/@for/@switchalready rejectedreturns;
@try/@catch/@pendingpreviously allowedreturn <markup>(lowering it into a reactive boundary fallback). They now reject any
return(with or without an argument) with the same
Return statements are not allowed inside TSRX templatesdiagnostic,consistently across every target (ripple, react, preact, solid, vue). Render
markup by writing it as the block's output instead of returning it. Returns
inside nested ordinary functions are unaffected.
#1269
8747e8fThanks @leonidaz! - Treat plain JS control flow
inside
@{ … }as ordinary JavaScript that returns JSX.Only
@-directives (@if/@for/@switch/@try) lower to template controlflow. Plain
if/for/for…of/for…in/while/do…while/switch/tryinside a code block are now compiled exactly like the same control flow in a
regular
function C() { …; return <jsx> }body — their JSX returns becometsrx_elementvalues rather than being template-ized.Previously these plain statements were mis-routed into the template transform:
on ripple an early-return guard produced a
_$_.if/_$_.switch/_$_.trywrapper (with dead code in the
switch/trycases) and plain loops threw acompile error; on solid they produced
<Show>/<Switch>/<For>/<Errored>(dropping trailing output fortry).They now stay as plain control flow, so early-return guards and loops behave
like normal JavaScript.
As part of this, the ripple client and server targets no longer emit the
return_guardbookkeeping variable: a plain earlyreturnis a real earlyreturn, so subsequent template output is naturally skipped without a guard flag.
On solid, this means a plain guard (
if (signal()) return …) inside acomponent body now runs once at setup — exactly like a regular Solid component —
instead of being lifted into a reactive
<Show>. Use@if(or another@-directive) when you want reactive conditional rendering.@tsrx/mcp@0.0.44
Patch Changes
[
8747e8f,8747e8f]:@tsrx/preact@0.1.31
Patch Changes
#1269
8747e8fThanks @leonidaz! - Disallow
returnstatementsinside
@try/@catch/@pendingblocks.returnis only valid in the JS setup at the top of a@{ … }code block —never inside a
@-directive block.@if/@for/@switchalready rejectedreturns;
@try/@catch/@pendingpreviously allowedreturn <markup>(lowering it into a reactive boundary fallback). They now reject any
return(with or without an argument) with the same
Return statements are not allowed inside TSRX templatesdiagnostic,consistently across every target (ripple, react, preact, solid, vue). Render
markup by writing it as the block's output instead of returning it. Returns
inside nested ordinary functions are unaffected.
Updated dependencies
[
8747e8f,8747e8f]:@tsrx/react@0.2.31
Patch Changes
#1269
8747e8fThanks @leonidaz! - Disallow
returnstatementsinside
@try/@catch/@pendingblocks.returnis only valid in the JS setup at the top of a@{ … }code block —never inside a
@-directive block.@if/@for/@switchalready rejectedreturns;
@try/@catch/@pendingpreviously allowedreturn <markup>(lowering it into a reactive boundary fallback). They now reject any
return(with or without an argument) with the same
Return statements are not allowed inside TSRX templatesdiagnostic,consistently across every target (ripple, react, preact, solid, vue). Render
markup by writing it as the block's output instead of returning it. Returns
inside nested ordinary functions are unaffected.
Updated dependencies
[
8747e8f,8747e8f]:@tsrx/ripple@0.1.31
Patch Changes
#1268
3d93339Thanks @leonidaz! - Never render
nullorundefinedas text in interpolated template output.When adjacent text and expressions are merged for concatenation, a dynamic value
was coerced with
String(value), so a nullish value printed the literal string"null"/"undefined"(e.g.<h1>Welcome,{user.name}</h1>renderedWelcome,null). The merge now coerces viaString(value ?? '')so nullishvalues render as empty text. This applies to both the client and server targets.
An author-written
String(...)is unaffected and still stringifies nullishexplicitly.
#1266
5646eb4Thanks @leonidaz! - Fix client crash when a
function C() { return <jsx> }component renders a template control-flowdirective (
@if/@for/@switch/@try).The block-statement return form is transformed via the generic function path,
which never sets the
componentrender state. A directive-branch element instatement position (e.g.
@if (cond) { <p>…</p> }) then matched theout-of-component "bare template statement" rule and was double-wrapped: its
content compiled into an orphaned template while the template the branch
actually referenced was left empty, crashing at runtime with
Cannot read properties of null (reading 'cloneNode'). A synthetic childrenrender arrow now establishes itself as the component boundary when no enclosing
component is set, so directive branches inline their content correctly. The
@{ … }form and the server target were already correct.#1269
8747e8fThanks @leonidaz! - Disallow
returnstatementsinside
@try/@catch/@pendingblocks.returnis only valid in the JS setup at the top of a@{ … }code block —never inside a
@-directive block.@if/@for/@switchalready rejectedreturns;
@try/@catch/@pendingpreviously allowedreturn <markup>(lowering it into a reactive boundary fallback). They now reject any
return(with or without an argument) with the same
Return statements are not allowed inside TSRX templatesdiagnostic,consistently across every target (ripple, react, preact, solid, vue). Render
markup by writing it as the block's output instead of returning it. Returns
inside nested ordinary functions are unaffected.
#1269
8747e8fThanks @leonidaz! - Treat plain JS control flow
inside
@{ … }as ordinary JavaScript that returns JSX.Only
@-directives (@if/@for/@switch/@try) lower to template controlflow. Plain
if/for/for…of/for…in/while/do…while/switch/tryinside a code block are now compiled exactly like the same control flow in a
regular
function C() { …; return <jsx> }body — their JSX returns becometsrx_elementvalues rather than being template-ized.Previously these plain statements were mis-routed into the template transform:
on ripple an early-return guard produced a
_$_.if/_$_.switch/_$_.trywrapper (with dead code in the
switch/trycases) and plain loops threw acompile error; on solid they produced
<Show>/<Switch>/<For>/<Errored>(dropping trailing output fortry).They now stay as plain control flow, so early-return guards and loops behave
like normal JavaScript.
As part of this, the ripple client and server targets no longer emit the
return_guardbookkeeping variable: a plain earlyreturnis a real earlyreturn, so subsequent template output is naturally skipped without a guard flag.
On solid, this means a plain guard (
if (signal()) return …) inside acomponent body now runs once at setup — exactly like a regular Solid component —
instead of being lifted into a reactive
<Show>. Use@if(or another@-directive) when you want reactive conditional rendering.Updated dependencies
[
8747e8f,8747e8f]:@tsrx/solid@0.1.31
Patch Changes
#1269
8747e8fThanks @leonidaz! - Disallow
returnstatementsinside
@try/@catch/@pendingblocks.returnis only valid in the JS setup at the top of a@{ … }code block —never inside a
@-directive block.@if/@for/@switchalready rejectedreturns;
@try/@catch/@pendingpreviously allowedreturn <markup>(lowering it into a reactive boundary fallback). They now reject any
return(with or without an argument) with the same
Return statements are not allowed inside TSRX templatesdiagnostic,consistently across every target (ripple, react, preact, solid, vue). Render
markup by writing it as the block's output instead of returning it. Returns
inside nested ordinary functions are unaffected.
#1269
8747e8fThanks @leonidaz! - Treat plain JS control flow
inside
@{ … }as ordinary JavaScript that returns JSX.Only
@-directives (@if/@for/@switch/@try) lower to template controlflow. Plain
if/for/for…of/for…in/while/do…while/switch/tryinside a code block are now compiled exactly like the same control flow in a
regular
function C() { …; return <jsx> }body — their JSX returns becometsrx_elementvalues rather than being template-ized.Previously these plain statements were mis-routed into the template transform:
on ripple an early-return guard produced a
_$_.if/_$_.switch/_$_.trywrapper (with dead code in the
switch/trycases) and plain loops threw acompile error; on solid they produced
<Show>/<Switch>/<For>/<Errored>(dropping trailing output fortry).They now stay as plain control flow, so early-return guards and loops behave
like normal JavaScript.
As part of this, the ripple client and server targets no longer emit the
return_guardbookkeeping variable: a plain earlyreturnis a real earlyreturn, so subsequent template output is naturally skipped without a guard flag.
On solid, this means a plain guard (
if (signal()) return …) inside acomponent body now runs once at setup — exactly like a regular Solid component —
instead of being lifted into a reactive
<Show>. Use@if(or another@-directive) when you want reactive conditional rendering.Updated dependencies
[
8747e8f,8747e8f]:@tsrx/vue@0.1.31
Patch Changes
#1269
8747e8fThanks @leonidaz! - Disallow
returnstatementsinside
@try/@catch/@pendingblocks.returnis only valid in the JS setup at the top of a@{ … }code block —never inside a
@-directive block.@if/@for/@switchalready rejectedreturns;
@try/@catch/@pendingpreviously allowedreturn <markup>(lowering it into a reactive boundary fallback). They now reject any
return(with or without an argument) with the same
Return statements are not allowed inside TSRX templatesdiagnostic,consistently across every target (ripple, react, preact, solid, vue). Render
markup by writing it as the block's output instead of returning it. Returns
inside nested ordinary functions are unaffected.
Updated dependencies
[
8747e8f,8747e8f]:@tsrx/turbopack-plugin-react@0.1.54
Patch Changes
[
8747e8f]:@tsrx/typescript-plugin@0.3.83
Patch Changes
[
3d93339,5646eb4,8747e8f,8747e8f]:@ripple-ts/vite-plugin@0.3.83
Patch Changes
[
3d93339,5646eb4,8747e8f,8747e8f]:@tsrx/vite-plugin-preact@0.0.56
Patch Changes
[
8747e8f]:@tsrx/vite-plugin-react@0.0.63
Patch Changes
[
8747e8f]:@tsrx/vite-plugin-solid@0.0.61
Patch Changes
[
8747e8f,8747e8f]:@tsrx/vite-plugin-vue@0.0.47
Patch Changes
[
8747e8f]:@ripple-ts/adapter@0.3.83
@ripple-ts/cli@0.3.83
@ripple-ts/vscode-plugin@2.0.34
Patch Changes
website-mcp@0.0.44
Patch Changes
[
3d93339,5646eb4,8747e8f,8747e8f]:ripple-website@0.1.85
Patch Changes
tsrx-website@0.1.66
Patch Changes
[
3d93339,5646eb4,8747e8f,8747e8f]:Note
Medium Risk
Patch release but changes core compile lowering and rejects previously allowed
returnin@tryblocks, which can break existing.tsrxthat relied on old behavior.Overview
This is a Changesets release PR: it bumps versions and changelogs across the monorepo and removes the four consumed changeset files (no application source changes in the diff).
The meaningful user-facing fixes ship mainly in
@tsrx/core@0.1.31,@tsrx/ripple@0.1.31, and dependentripple/ framework targets (react, preact, solid, vue):@{ … }(if/for/switch/try, etc.) is compiled as normal JS that returns JSX, not mis-routed into template/_$_.*or Solid<Show>/<For>wrappers; Ripple also dropsreturn_guardemission for early returns.returnis rejected inside@try/@catch/@pending(aligned with other@-directives).String(value ?? '')so nullish values don’t render as"null"/"undefined";function C() { return <jsx> }with@if/@for/etc. no longer double-wraps templates (fixescloneNodeclient crash).Adapters, CLI, plugins, and websites mostly get dependency version sync only.
Reviewed by Cursor Bugbot for commit 599085a. Bugbot is set up for automated code reviews on this repo. Configure here.