@tsrx/ripple@0.1.65

Ripple-TS/ripple@tsrx/ripple@0.1.65Sep 8, 2026by github-actions[bot]

Upgrading?

AI Summary

A performance-focused patch release optimizing `@for` loops and type inference, reducing allocation overhead and improving hydration speed.

Key Highlights

  • Optimized outer item comparisons using per-loop selectors
  • Improved type inference for `@for` items from iterated expressions
  • Reduced allocations by using a shared sentinel for uninitialized values
  • Optimized template traversal for monomorphic property reads

Full Release Notes

### Patch Changes

- [#1450](https://github.com/Ripple-TS/ripple/pull/1450)
  [`26be014`](https://github.com/Ripple-TS/ripple/commit/26be014dfd06da9eae7e2d9e0fbd332ddf1bc9ca)
  Thanks [@leonidaz](https://github.com/leonidaz)! - Lower `outer === item` (and
  `!==`) comparisons inside `@for` render expressions to a per-loop selector, so
  changing the outer value re-renders only the previous and next matching items.
  Infer `@for` item types from the iterated expression (`T[]`, `Array<T>`,
  `Set<T>`, module `interface` / `type` declarations, and `track<T>()` values) so
  typed member reads such as `row.label.value` lower to `set_text` updates instead
  of the generic expression block, and use the shared `UNINITIALIZED` sentinel
  instead of allocating a `Symbol()` per rendered class update. A grouped render
  reads a repeated tracked identifier (such as the `@for` item) once and reuses it
  across its updates. Template child and sibling traversal is emitted inline
  (`_$_.hydrating ? _$_.hydrate_child() : node.firstChild`), so each template
  position keeps its own monomorphic property read instead of sharing one helper's
  read site across every element type.

Related Repositories