Skip to content

Version Packages#1267

Merged
leonidaz merged 1 commit into
mainfrom
changeset-release/main
Jun 13, 2026
Merged

Version Packages#1267
leonidaz merged 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

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

  • Updated dependencies []:
    • @ripple-ts/adapter@0.3.83

@ripple-ts/adapter-node@0.3.83

Patch Changes

  • Updated dependencies []:
    • @ripple-ts/adapter@0.3.83

@ripple-ts/adapter-vercel@0.3.83

Patch Changes

  • Updated dependencies []:
    • @ripple-ts/adapter@0.3.83
    • @ripple-ts/adapter-node@0.3.83

@tsrx/bun-plugin-preact@0.0.54

Patch Changes

  • Updated dependencies
    [8747e8f]:
    • @tsrx/preact@0.1.31

@tsrx/bun-plugin-react@0.1.54

Patch Changes

  • Updated dependencies
    [8747e8f]:
    • @tsrx/react@0.2.31

@tsrx/bun-plugin-solid@0.0.25

Patch Changes

@tsrx/bun-plugin-vue@0.0.35

Patch Changes

  • Updated dependencies
    [8747e8f]:
    • @tsrx/vue@0.1.31

create-ripple@0.3.83

Patch Changes

  • Updated dependencies []:
    • @ripple-ts/cli@0.3.83

@tsrx/eslint-parser@0.3.83

Patch Changes

@tsrx/eslint-plugin@0.3.83

Patch Changes

  • Updated dependencies []:
    • @tsrx/eslint-parser@0.3.83

@ripple-ts/language-server@0.3.83

Patch Changes

  • Updated dependencies
    [8747e8f,
    8747e8f]:
    • @tsrx/core@0.1.31
    • @tsrx/typescript-plugin@0.3.83

@tsrx/prettier-plugin@0.3.83

Patch Changes

ripple@0.3.83

Patch Changes

  • #1269
    8747e8f
    Thanks @leonidaz! - Treat plain JS control flow
    inside @{ … } as ordinary JavaScript that returns JSX.

    Only @-directives (@if/@for/@switch/@try) lower to template control
    flow. Plain if/for/for…of/for…in/while/do…while/switch/try
    inside a code block are now compiled exactly like the same control flow in a
    regular function C() { …; return <jsx> } body — their JSX returns become
    tsrx_element values 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/_$_.try
    wrapper (with dead code in the switch/try cases) and plain loops threw a
    compile error; on solid they produced
    <Show>/<Switch>/<For>/<Errored> (dropping trailing output for try).
    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_guard bookkeeping variable: a plain early return is a real early
    return, so subsequent template output is naturally skipped without a guard flag.

    On solid, this means a plain guard (if (signal()) return …) inside a
    component 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]:

    • @tsrx/ripple@0.1.31
    • @tsrx/core@0.1.31

@ripple-ts/rollup-plugin@0.3.83

Patch Changes

@tsrx/rspack-plugin-preact@0.0.47

Patch Changes

  • Updated dependencies
    [8747e8f]:
    • @tsrx/preact@0.1.31

@tsrx/rspack-plugin-react@0.0.57

Patch Changes

  • Updated dependencies
    [8747e8f]:
    • @tsrx/react@0.2.31

@tsrx/rspack-plugin-solid@0.0.44

Patch Changes

@tsrx/rspack-plugin-vue@0.0.43

Patch Changes

  • Updated dependencies
    [8747e8f]:
    • @tsrx/vue@0.1.31

@tsrx/core@0.1.31

Patch Changes

  • #1269
    8747e8f
    Thanks @leonidaz! - Disallow return statements
    inside @try/@catch/@pending blocks.

    return is only valid in the JS setup at the top of a @{ … } code block —
    never inside a @-directive block. @if/@for/@switch already rejected
    returns; @try/@catch/@pending previously allowed return <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 templates diagnostic,
    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
    8747e8f
    Thanks @leonidaz! - Treat plain JS control flow
    inside @{ … } as ordinary JavaScript that returns JSX.

    Only @-directives (@if/@for/@switch/@try) lower to template control
    flow. Plain if/for/for…of/for…in/while/do…while/switch/try
    inside a code block are now compiled exactly like the same control flow in a
    regular function C() { …; return <jsx> } body — their JSX returns become
    tsrx_element values 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/_$_.try
    wrapper (with dead code in the switch/try cases) and plain loops threw a
    compile error; on solid they produced
    <Show>/<Switch>/<For>/<Errored> (dropping trailing output for try).
    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_guard bookkeeping variable: a plain early return is a real early
    return, so subsequent template output is naturally skipped without a guard flag.

    On solid, this means a plain guard (if (signal()) return …) inside a
    component 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

  • Updated dependencies
    [8747e8f,
    8747e8f]:
    • @tsrx/core@0.1.31
    • @tsrx/prettier-plugin@0.3.83

@tsrx/preact@0.1.31

Patch Changes

  • #1269
    8747e8f
    Thanks @leonidaz! - Disallow return statements
    inside @try/@catch/@pending blocks.

    return is only valid in the JS setup at the top of a @{ … } code block —
    never inside a @-directive block. @if/@for/@switch already rejected
    returns; @try/@catch/@pending previously allowed return <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 templates diagnostic,
    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/core@0.1.31

@tsrx/react@0.2.31

Patch Changes

  • #1269
    8747e8f
    Thanks @leonidaz! - Disallow return statements
    inside @try/@catch/@pending blocks.

    return is only valid in the JS setup at the top of a @{ … } code block —
    never inside a @-directive block. @if/@for/@switch already rejected
    returns; @try/@catch/@pending previously allowed return <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 templates diagnostic,
    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/core@0.1.31

@tsrx/ripple@0.1.31

Patch Changes

  • #1268
    3d93339
    Thanks @leonidaz! - Never render null or
    undefined as 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> rendered
    Welcome,null). The merge now coerces via String(value ?? '') so nullish
    values render as empty text. This applies to both the client and server targets.
    An author-written String(...) is unaffected and still stringifies nullish
    explicitly.

  • #1266
    5646eb4
    Thanks @leonidaz! - Fix client crash when a
    function C() { return <jsx> } component renders a template control-flow
    directive (@if/@for/@switch/@try).

    The block-statement return form is transformed via the generic function path,
    which never sets the component render state. A directive-branch element in
    statement position (e.g. @if (cond) { <p>…</p> }) then matched the
    out-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 children
    render 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
    8747e8f
    Thanks @leonidaz! - Disallow return statements
    inside @try/@catch/@pending blocks.

    return is only valid in the JS setup at the top of a @{ … } code block —
    never inside a @-directive block. @if/@for/@switch already rejected
    returns; @try/@catch/@pending previously allowed return <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 templates diagnostic,
    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
    8747e8f
    Thanks @leonidaz! - Treat plain JS control flow
    inside @{ … } as ordinary JavaScript that returns JSX.

    Only @-directives (@if/@for/@switch/@try) lower to template control
    flow. Plain if/for/for…of/for…in/while/do…while/switch/try
    inside a code block are now compiled exactly like the same control flow in a
    regular function C() { …; return <jsx> } body — their JSX returns become
    tsrx_element values 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/_$_.try
    wrapper (with dead code in the switch/try cases) and plain loops threw a
    compile error; on solid they produced
    <Show>/<Switch>/<For>/<Errored> (dropping trailing output for try).
    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_guard bookkeeping variable: a plain early return is a real early
    return, so subsequent template output is naturally skipped without a guard flag.

    On solid, this means a plain guard (if (signal()) return …) inside a
    component 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/core@0.1.31

@tsrx/solid@0.1.31

Patch Changes

  • #1269
    8747e8f
    Thanks @leonidaz! - Disallow return statements
    inside @try/@catch/@pending blocks.

    return is only valid in the JS setup at the top of a @{ … } code block —
    never inside a @-directive block. @if/@for/@switch already rejected
    returns; @try/@catch/@pending previously allowed return <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 templates diagnostic,
    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
    8747e8f
    Thanks @leonidaz! - Treat plain JS control flow
    inside @{ … } as ordinary JavaScript that returns JSX.

    Only @-directives (@if/@for/@switch/@try) lower to template control
    flow. Plain if/for/for…of/for…in/while/do…while/switch/try
    inside a code block are now compiled exactly like the same control flow in a
    regular function C() { …; return <jsx> } body — their JSX returns become
    tsrx_element values 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/_$_.try
    wrapper (with dead code in the switch/try cases) and plain loops threw a
    compile error; on solid they produced
    <Show>/<Switch>/<For>/<Errored> (dropping trailing output for try).
    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_guard bookkeeping variable: a plain early return is a real early
    return, so subsequent template output is naturally skipped without a guard flag.

    On solid, this means a plain guard (if (signal()) return …) inside a
    component 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/core@0.1.31

@tsrx/vue@0.1.31

Patch Changes

  • #1269
    8747e8f
    Thanks @leonidaz! - Disallow return statements
    inside @try/@catch/@pending blocks.

    return is only valid in the JS setup at the top of a @{ … } code block —
    never inside a @-directive block. @if/@for/@switch already rejected
    returns; @try/@catch/@pending previously allowed return <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 templates diagnostic,
    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/core@0.1.31

@tsrx/turbopack-plugin-react@0.1.54

Patch Changes

  • Updated dependencies
    [8747e8f]:
    • @tsrx/react@0.2.31

@tsrx/typescript-plugin@0.3.83

Patch Changes

  • Updated dependencies
    [3d93339,
    5646eb4,
    8747e8f,
    8747e8f]:
    • @tsrx/ripple@0.1.31
    • @tsrx/react@0.2.31
    • @tsrx/preact@0.1.31
    • @tsrx/solid@0.1.31
    • @tsrx/vue@0.1.31

@ripple-ts/vite-plugin@0.3.83

Patch Changes

@tsrx/vite-plugin-preact@0.0.56

Patch Changes

  • Updated dependencies
    [8747e8f]:
    • @tsrx/preact@0.1.31

@tsrx/vite-plugin-react@0.0.63

Patch Changes

  • Updated dependencies
    [8747e8f]:
    • @tsrx/react@0.2.31

@tsrx/vite-plugin-solid@0.0.61

Patch Changes

@tsrx/vite-plugin-vue@0.0.47

Patch Changes

  • Updated dependencies
    [8747e8f]:
    • @tsrx/vue@0.1.31

@ripple-ts/adapter@0.3.83

@ripple-ts/cli@0.3.83

@ripple-ts/vscode-plugin@2.0.34

Patch Changes

  • Updated dependencies []:
    • @tsrx/typescript-plugin@0.3.83
    • @ripple-ts/language-server@0.3.83

website-mcp@0.0.44

Patch Changes

  • Updated dependencies
    [3d93339,
    5646eb4,
    8747e8f,
    8747e8f]:
    • @tsrx/ripple@0.1.31
    • @tsrx/react@0.2.31
    • @tsrx/preact@0.1.31
    • @tsrx/solid@0.1.31
    • @tsrx/vue@0.1.31
    • @tsrx/mcp@0.0.44

ripple-website@0.1.85

Patch Changes

  • Updated dependencies []:
    • @ripple-ts/adapter-node@0.3.83

tsrx-website@0.1.66

Patch Changes

  • Updated dependencies
    [3d93339,
    5646eb4,
    8747e8f,
    8747e8f]:
    • @tsrx/ripple@0.1.31
    • @tsrx/react@0.2.31
    • @tsrx/preact@0.1.31
    • @tsrx/solid@0.1.31
    • @tsrx/vue@0.1.31
    • @tsrx/prettier-plugin@0.3.83
    • @ripple-ts/adapter-node@0.3.83

Note

Medium Risk
Patch release but changes core compile lowering and rejects previously allowed return in @try blocks, which can break existing .tsrx that 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 dependent ripple / framework targets (react, preact, solid, vue):

  • Plain JavaScript control flow inside @{ … } (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 drops return_guard emission for early returns.
  • return is rejected inside @try / @catch / @pending (aligned with other @-directives).
  • Ripple-only: interpolated text uses String(value ?? '') so nullish values don’t render as "null"/"undefined"; function C() { return <jsx> } with @if/@for/etc. no longer double-wraps templates (fixes cloneNode client 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.

@vercel

vercel Bot commented Jun 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
new-website Ready Ready Preview, Comment Jun 13, 2026 10:59pm
ripple Ready Ready Preview, Comment Jun 13, 2026 10:59pm
ripple-website-mcp Ready Ready Preview, Comment Jun 13, 2026 10:59pm
ripple-website-tsrx Ready Ready Preview, Comment Jun 13, 2026 10:59pm

Request Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant