• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

solidjs / solid / 35763406371
74%
main: 89%

Build:
Build:
LAST BUILD BRANCH: fix/optimistic-undeclared-flight-owner
DEFAULT BRANCH: main
Ran 22 Sep 2026 05:58PM UTC
Jobs 1
Files 8
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

22 Sep 2026 05:52PM UTC coverage: 72.775%. Remained the same
35763406371

push

github

web-flow
perf(ssr): spread-element tails as markup, hoisted spread sources, ssrElement/merge at the writer floor (#3562)

* perf(ssr): spread elements — trailing attributes as markup, source literals hoisted, ssrElement/merge fast paths

Compilers (Babel + Oxc, byte-identical):
- Attributes after an element's last spread are markup, not a source.
  `<li {...rest} class="row" data-id={id}>` compiles to
  ssrElement("li", rest, …, _sk$, () => ' class="row"' + ssrElementAttribute("data-id", id))
  with a hoisted skip predicate per key set; the string is a literal when
  every part is static. No later source can override a trailing attribute,
  so output is unchanged. Child properties, textarea value, reserved
  namespaces and JSX-valued attributes stay sources.
- A spread element's source literal with getters
  (`<li data-id={id} class="row" {...rest}>`) is marked for hoistProps and
  compiles to the same hoisted constructor as component props.

Runtime (@solidjs/web):
- ssrElement takes an optional trailing `attrs`: a string, or a thunk called
  after the source walk and before the children — where the trailing
  source's getters were read, so hydration ids keep their order (spec: a
  server memo in the tail yields the same _hk sequence as the getter and
  template forms).
- ssrElementAttribute(key, value): one attribute by the spread walk's rules,
  for compiler-emitted tail thunks.
- Void-tag test and attribute-name escape cached per name; plain single
  source read and keyed in place.

Runtime (@solidjs/signals):
- merge(): presized source arrays; the get trap walks plain sources
  directly, reading before the `in` check.

spread-static-tail server bench, 500 rows (ops/s, Babel):
  tail    {...a} class            5,038 -> 5,057
  head    class {...a}            3,646 -> 3,661
  mixed   {...a} class data={id}  3,115 -> 3,790 (hoisted source) -> 4,437 (thunk)  1.42x
  dynhead data={id} class {...a}  2,821 -> 3,418                                   1.21x

Co-aut... (continued)

550 of 818 branches covered (67.24%)

Branch coverage included in aggregate %.

824 of 1070 relevant lines covered (77.01%)

17.43 hits per line

Jobs
ID Job ID Ran Files Coverage
1 35763406371.1 22 Sep 2026 05:58PM UTC 8
72.78
GitHub Action Run
Source Files on build 35763406371
  • Tree
  • List 8
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #35763406371
  • e10a4ba0 on github
  • Prev Build on next (#35748247012)
  • Next Build on next (#35772188487)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc