Repository navigation
perf(router,start): update Seroval to 1.7.1 - #8806
LadyBluenotes wants to merge 1 commit into
Conversation
Update seroval and seroval-plugins from 1.6.7 to 1.7.1 in Router, Start, and the SSR benchmarks. Seroval 1.7 rebuilds streams as instances of its new `Stream` class, so the RawStream factory tests build real streams with `createStream()` and spy on `on` instead of typing hand-built objects as `Stream`.
🦋 Changeset detectedLatest commit: fb223d5 The changes in this PR will be included in the next version bump. This PR includes changesets to release 23 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
View your CI Pipeline Execution ↗ for commit fb223d5
☁️ Nx Cloud last updated this comment at |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
🚀 Changeset Version Preview5 package(s) bumped directly, 18 bumped as dependents. 🟩 Patch bumps
|
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Update Seroval dependency ranges packages/router-core/package.json, packages/start-client-core/package.json, packages/start-plugin-core/package.json, packages/start-server-core/package.json, packages/start-static-server-functions/package.json, benchmarks/ssr/package.json, .changeset/bump-seroval-1-7-1.md |
The package manifests and SSR benchmark now specify Seroval 1.7.1. The changeset records the package updates and describes upstream changes. |
Revise RawStream test streams packages/router-core/tests/RawStream.test.ts |
The tests use real streams and a shared subscription spy to check cancellation and terminal-disposal behavior. |
Priority:
Estimated code review effort: 2 (Simple) | ~10 minutes
Change: Other
Possibly related issues
TanStack/router#7706— The dependency upgrade affects serialization dependencies used by Start, but the available summary does not establish that it fixes the reported deserialization error.
Suggested reviewers: schiller-manuel, sheraff
Merge Risk: 
Minimal · up to fb223
-
This is a routine dependency upgrade with matching test updates. No concrete merge-blocking risk was identified. The author reports a modest client bundle size increase under Vite, which was an accepted tradeoff.
Pre-merge checks: 
4 · 
1
-
Failed checks: 1 warning Passed checks: 4 passed-
Full details: Description check
-
Explanation
The description includes the required Changes, Checklist, and Release Impact sections. It explains the dependency update, motivation, test changes, and reported bundle-size effects. The testing and changeset checklist items are checked; the contributing-guide and code-understanding items remain unchecked.
-
Full details: Docstring Coverage
-
Explanation
Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 1 files. (7 skipped: 7 unsupported.)
Resolution
Write docstrings for the functions missing them to satisfy the coverage threshold.
-
Finishing Touches: 💡 1
-
📝 Generate docstrings: 💡
-
- Commit to this branch
- Create a new PR
🧪 Generate unit tests (beta)
-
- Commit to this branch
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
Comment @coderabbitai help to get the list of available commands.
Bundle Size Benchmarks
The following scenarios have bundle-size changes compared with the baseline:
Current gzip tracks all emitted client JS chunks. Initial gzip tracks only the entry/import graph. Trend sparkline is historical current gzip ending with this PR measurement; lower is better. |
Merging this PR will regress 11 benchmarks2 warnings
Warning Please fix the performance issues or acknowledge them on CodSpeed. Performance Changes
Tip Investigate this regression by commenting Comparing Footnotes
|
….14 (#357) GitHub's dependency graph does not read bun.lock, so these never became Dependabot alerts. `bun audit` listed 22 (1 critical, 13 high, 7 moderate, 1 low); it now lists none. **What moved (package.json ranges unchanged)** - seroval and seroval-plugins 1.5.4 -> 1.6.12 (@tanstack/router-core 1.171.15 asks ^1.5.4): clears critical GHSA-p6vx-979v-rg4c and four highs. Held at 1.6.12 rather than 1.7.x, which changes how streams serialize and which TanStack's own lockfile does not test yet (their move to 1.7.1 is TanStack/router#8806). The desktop bundle contains no seroval code either way: it only serves SSR hydration. - vite 8.1.5 -> 8.3.5 (apps/desktop ^8.1.5, apps/site ^8), with rolldown 1.2.15 nested under it, lightningcss 1.33.0 (1.32.0 stays nested under @tailwindcss/node), postcss 8.5.20 -> 8.5.32 (vite asks ^8.5.30) and nanoid 3.3.16 -> 3.3.20 (postcss asks ^3.3.20). - colord 2.9.3 -> 2.10.0 (apps/desktop ^2.9.3): GHSA-2wm5-q62r-hmrv. The color picker's `colord(fill).lighten(x).toRgbString()` is unaffected by the 2.9.5 hue normalization, which only changes hue numbers, not RGB output. - browserslist 4.28.4 -> 4.29.5 (@babel/helper-compilation-targets ^4.24.0), with the data packages its ranges require: baseline-browser-mapping 2.11.34, caniuse-lite 1.0.30001819, electron-to-chromium 1.5.467, node-releases 2.0.60, update-browserslist-db 1.3.4. - brace-expansion 5.0.7 -> 5.0.12 (minimatch ^5.0.5) and zod 4.4.3 -> 4.6.7 (@tanstack/router-generator ^4.4.3, eslint-plugin-react-hooks). - apps/desktop's `@types/bun` goes from `latest` to `^1.3.14`, the version already locked with bun-types 1.3.14, so relocks stop moving it (the Node 26 PR hit this). The lock's desktop workspace `version` also catches up to package.json (1.12.0 -> 1.18.3); every bun 1.3.3 relock writes that. Everything here except colord is build or dev tooling: vite, postcss, browserslist and the babel chain build the frontend, brace-expansion sits under eslint, and zod under the router generator and the lint plugin. **GHSAs cleared** - baseline-browser-mapping: GHSA-w5vr-8v7q-w6rv moderate - brace-expansion: GHSA-mh99-v99m-4gvg high, GHSA-rgw5-rvv9-x895 high, GHSA-qhr7-859c-m2p7 high, GHSA-6j4f-fj2g-mc7p high, GHSA-q2hr-2g5m-vwhr moderate - browserslist: GHSA-c83g-rgw3-j3cx high, GHSA-73wf-gq98-2v4g high - colord: GHSA-2wm5-q62r-hmrv moderate - nanoid: GHSA-2v37-7h3g-55p8 high - postcss: GHSA-fxqj-rqcc-2cmp moderate - seroval: GHSA-p6vx-979v-rg4c critical, GHSA-jp82-f5mq-hwhp high, GHSA-97r2-qh9m-474h high, GHSA-wp97-x4hv-qvhp high, GHSA-7rv5-mrxv-xcr9 high - vite: GHSA-587h-7wmj-h5pm high, GHSA-rq7h-c2jc-7f22 moderate, GHSA-698v-4r3x-3vcv moderate, GHSA-r825-w8mm-5pxw moderate, GHSA-9jrq-w75r-8gcw low - zod: GHSA-mrhx-c7xc-m3w5 high **How** The lock was written with the pinned bun 1.3.3 except for the browserslist set, zod and brace-expansion, whose entries were spliced in from a bun 1.4.4 update (1.3.3's `update` adds transitive names to package.json, and 1.4.4's own lockfile also re-hoisted rolldown and babel copies, which this leaves alone). New releases had to be at least 24 hours old; those under three days old (postcss 8.5.32, browserslist 4.29.5, baseline-browser-mapping 2.11.34, electron-to-chromium 1.5.467) were diffed against their previous release: no install scripts and no new network, exec, eval or env reads. **Verification (bun 1.3.3)** - `install --lockfile-only` leaves the lockfile byte-identical, and `install --frozen-lockfile` passes. - apps/desktop: `check:tauri-versions`, `build`, `typecheck`, `lint` and `bun test` (20 pass). - apps/site: `typecheck` and `build`. - desktop.yml's pull_request paths include bun.lock and apps/desktop/**, so the required checks run on this PR.
) GitHub's dependency graph does not read bun.lock, so none of these became Dependabot alerts. `bun audit` listed 98 in web/ (2 critical, 40 high, 47 moderate, 9 low); it now lists one. **What moved (package.json ranges unchanged)** - shadcn 4.13.0 -> 4.23.0 (^4.13.0). 4.23 replaces @modelcontextprotocol/sdk 1.x with @modelcontextprotocol/server 2.4 and uses zod 4, which takes express, body-parser, proxy-addr (critical GHSA-jqcg-44mw-7w3h), qs, hono, @hono/node-server and shadcn's zod 3 copy out of the tree. The SPA only imports shadcn/tailwind.css. - seroval and seroval-plugins 1.5.4 -> 1.6.12 (@tanstack/router-core asks ^1.5.4): critical GHSA-p6vx-979v-rg4c and four highs. Held at 1.6.12 rather than 1.7.x, which changes how streams serialize and which TanStack's own lockfile does not test yet (TanStack/router#8806). The built SPA contains no seroval code either way. - vite 8.1.3 -> 8.3.5 (^8.1.3), with rolldown 1.2.15 nested under it, lightningcss 1.33.0 (1.32.0 stays nested under @tailwindcss/node), postcss 8.5.16 -> 8.5.32, nanoid 3.3.12 -> 3.3.20 and source-map-js 1.2.1 -> 1.2.2. - browserslist 4.28.2 -> 4.29.5 with the data packages its ranges require (baseline-browser-mapping 2.11.34, caniuse-lite, electron-to-chromium, node-releases, update-browserslist-db); the nested browserslist 4.28.2 copies under each @babel/core are gone. - brace-expansion 5.0.6 -> 5.0.12, ip-address 10.2.0 -> 10.7.5 (now under socks), zod 4.4.3 -> 4.6.7, postcss-selector-parser 7.1.4 -> 7.1.7 and undici 7.28.0 -> 7.30.1. open, default-browser, wsl-utils and powershell-utils move because shadcn 4.23 asks for them. Left: deepmerge 4.3.1 (GHSA-gcqx-w48m-w2h4, low), which has no fixed release and sits only under the shadcn CLI. **What a merge ships** release.yml runs on web/** changes: it builds the SPA, compiles it into the Lambda with `--features embed-web` and deploys accept-payments. The Rust sources and Cargo.lock do not change. The built web/dist has the same files as main's; the CSS differs only in lightningcss 1.33's spelling of rounded-full's infinite radius (2147483647px for 3.40282e38px), and the JS chunks differ only by rolldown 1.2.15's minifier rewrites, a few dozen bytes each. Every package moved here is build tooling; the runtime packages in the bundle (React, TanStack Router) are unchanged. **GHSAs cleared** - @hono/node-server: GHSA-frvp-7c67-39w9 moderate, GHSA-rmxm-3fg6-px4f moderate - @modelcontextprotocol/sdk: GHSA-6qxp-vccf-f47h high, GHSA-22jm-h49p-29qw high, GHSA-46jr-4wx8-v453 high, GHSA-f897-62hf-6gxq high, GHSA-6prh-2h8m-c8cw moderate, GHSA-rvq5-wwqv-78pq moderate - baseline-browser-mapping: GHSA-w5vr-8v7q-w6rv moderate - body-parser: GHSA-27r3-jxmh-p828 high, GHSA-v422-hmwv-36x6 low - brace-expansion: GHSA-mh99-v99m-4gvg high, GHSA-rgw5-rvv9-x895 high, GHSA-3jxr-9vmj-r5cp high, GHSA-qhr7-859c-m2p7 high, GHSA-6j4f-fj2g-mc7p high, GHSA-q2hr-2g5m-vwhr moderate - browserslist: GHSA-c83g-rgw3-j3cx high, GHSA-73wf-gq98-2v4g high - fast-uri: GHSA-f65p-4m7j-42xc high, GHSA-fph4-wmhf-6fwf high, GHSA-jqff-g426-hqxp high, GHSA-7p8r-x3mc-p8w7 high, GHSA-v2hh-gcrm-f6hx high, GHSA-4c8g-83qw-93j6 high, GHSA-qw65-cvwx-89v3 high, GHSA-hrr3-gc8f-f4qj moderate, GHSA-w74x-v6f9-j3xg moderate, GHSA-xhq7-xmqj-769h low, GHSA-333x-w4r6-6crp low - hono: GHSA-8j4g-w8fx-2239 moderate, GHSA-xgm2-5f3f-mvvc moderate, GHSA-hvrm-45r6-mjfj moderate, GHSA-w62v-xxxg-mg59 moderate, GHSA-f23p-vx2j-j53r moderate, GHSA-54fx-42gc-7vw4 moderate, GHSA-gqvv-2mrq-wpjv moderate, GHSA-g6gw-c38x-mqfc moderate, GHSA-crvj-82cr-hjcx moderate, GHSA-hxh3-vqpv-xpqv moderate, GHSA-5r4p-p66f-jhc7 moderate, GHSA-79qm-7rj5-m7r9 low - ip-address: GHSA-mwp4-54f8-5fhr high, GHSA-4xrf-jv44-h6hh moderate, GHSA-22jq-vg5j-6vgg moderate, GHSA-rpw4-54j3-4h4q moderate, GHSA-2vr4-cq9g-pvrc moderate, GHSA-j6r3-76f7-8jcv moderate, GHSA-h3mg-xc3c-68pw moderate, GHSA-rxp7-6hxx-x8q5 moderate - js-yaml: GHSA-52cp-r559-cp3m high, GHSA-5p4m-2wfm-xmqj high, GHSA-2883-xcg3-v3hh high - nanoid: GHSA-28wg-ghj8-5hjv high, GHSA-2v37-7h3g-55p8 high - postcss: GHSA-r28c-9q8g-f849 high, GHSA-fxqj-rqcc-2cmp moderate - postcss-selector-parser: GHSA-rj75-hqrm-r3gf moderate - proxy-addr: GHSA-jqcg-44mw-7w3h critical - qs: GHSA-x5fp-wj9c-mxmx moderate, GHSA-4mjr-xmp4-gh2g moderate, GHSA-6pq8-jhm2-2vcw moderate - seroval: GHSA-p6vx-979v-rg4c critical, GHSA-jp82-f5mq-hwhp high, GHSA-97r2-qh9m-474h high, GHSA-wp97-x4hv-qvhp high, GHSA-7rv5-mrxv-xcr9 high - source-map-js: GHSA-68fv-2mgg-jv7q high - undici: GHSA-4cwx-7wf7-3272 high, GHSA-rfgv-xxqx-mfg5 high, GHSA-w293-vg96-wgc3 high, GHSA-xjj6-f33q-929c high, GHSA-4w7w-5xrc-9h26 high, GHSA-2m5v-pch6-74hx high, GHSA-qrxm-fqhp-jwvm high, GHSA-8xcm-r25x-g524 moderate, GHSA-m8rv-5g2x-5cg5 moderate, GHSA-jr45-8vmc-qm54 moderate, GHSA-v3r7-h72x-cjcm moderate, GHSA-3wwx-pv8p-q78v moderate, GHSA-pmjh-fq2x-6v4x moderate, GHSA-3xpg-4rpp-hhhm moderate, GHSA-2jfj-6hjv-fm6j moderate, GHSA-rx4f-c7p8-82vq moderate, GHSA-4qv8-2p9j-2685 moderate, GHSA-f72v-6w45-q472 moderate, GHSA-9fm3-97px-rjf6 moderate, GHSA-55wc-3pg8-jfw6 moderate, GHSA-r53p-7pc4-xj5r low, GHSA-2gqq-gqf2-x968 low, GHSA-8436-99hf-9mmv low - vite: GHSA-587h-7wmj-h5pm high, GHSA-rq7h-c2jc-7f22 moderate, GHSA-698v-4r3x-3vcv moderate, GHSA-r825-w8mm-5pxw moderate, GHSA-9jrq-w75r-8gcw low - zod: GHSA-mrhx-c7xc-m3w5 high **How** shadcn and vite were updated with the bun CI runs (1.3.4), and their ranges put back. The transitive fixes are bun's own entries spliced in, with the vulnerable nested copies dropped, which leaves the rest of the tree where it was. New releases had to be at least 24 hours old, and those under three days old (shadcn 4.23.0, @shadcn/registry 0.2.1, postcss 8.5.32, baseline-browser-mapping 2.11.34, electron-to-chromium 1.5.467) were diffed against their previous release: no install scripts and no new network, exec, eval or env reads. **Verification (bun 1.3.4)** - `install --lockfile-only` leaves the lockfile byte-identical, and `install --frozen-lockfile` passes. - `bun run lint` and `bun run build`, plus the same build on main for the comparison above.
🎯 Changes
Update Router and Start from Seroval 1.6.7 to 1.7.1, and the SSR benchmark dependency to match. Seroval 1.7 cuts per-node allocations in its parsers and streaming serializers, and adds backpressure for streamed async iterables and
ReadableStreamvalues (1.7.0 release notes).Streamclass. The RawStream factory tests now build real streams withcreateStream()and spy onon, instead of typing hand-built objects asStream.crossSerializeStreamortoCrossJSONStreamno longer callsonDone. The SSR and server-function dispose paths are abort and cleanup paths that close their output themselves, so nothing depended on it.Start client bundles built with Vite grow. Most of the growth is the new
LiveStreamclass:isStreamchecksvalue instanceof LiveStream, so bundles keep the class even though the client never creates one. A minimal Rolldown entry with Start's client Seroval imports goes from 7,460 B to 8,652 B gzip. Rsbuild bundles shrink, because 1.7 lets Rspack tree-shake Seroval modules it previously kept.✅ Checklist
🚀 Release Impact
Summary by CodeRabbit