Upgrade toolchain: pnpm 11, TypeScript 7 (native, TS6 side-by-side), Biome 2, + security - #82
Conversation
pnpm 10.33 -> 11.12: update packageManager/engines/volta pins. pnpm 11 hard-fails on undeclared build scripts, so declare the four ignored builds (biome, vaadin-stats, core-js*) as allowBuilds:false in pnpm-workspace.yaml (preserves prior "ignored" behavior). TypeScript 5.7 -> 7.0 (the native port). TS7 ships no classic JS API, which breaks vite-plugin-dts and typescript-eslint: - Remove vite-plugin-dts everywhere (shared base config + layers + zarrextra) and generate .d.ts via `tsc --emitDeclarationOnly` in every package, matching core's existing pattern. Also drops the slow vite:dts step (was ~65% of build time) and the api-extractor/rollup subtree. - Side-by-side per the TS7 announcement: catalog `typescript` resolves to @typescript/typescript6 (TS6 API) so typescript-eslint works; @typescript/native -> typescript@7 provides the build-script `tsc` (native). lint:react restored. - tsconfig migrations: drop deprecated baseUrl (TS7 error TS5101); resolve cross-package types via node_modules -> built dist/*.d.ts (rootDir-safe emit); zarrextra uses types:["node"] (its worker path is delegated to fizarrita). vite ^8.0.8 -> ^8.0.16 (resolves 8.1.4): clears the high-sev server.fs.deny bypass alert (GHSA/dependabot 177/178). Build green across all 6 packages, 397 tests pass, lint:react runs on the TS6 API, install --frozen-lockfile clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The docs-site (dev-only, not shipped) pulls vulnerable versions pinned deep in Docusaurus 3.9's webpack build stack. Bumping Docusaurus (3.9-> 3.10) doesn't move them and requires @docusaurus/faster (rspack/swc), so instead pin patched versions via pnpm-workspace.yaml overrides, scoped by range so other-major installs are untouched: shell-quote 1.8.3 -> 1.10.0 (critical) ws@7 7.5.10 -> 7.5.11 fast-uri 3.1.0 -> 3.1.3 node-forge 1.3.1 -> 1.4.0 minimatch@3 3.1.x -> 3.1.5 path-to-regexp@0.1 -> 0.1.13 preact 10.27 -> 10.29.7 svgo@3 3.3.2 -> 3.3.4 lodash -> 4.18.1 rollup -> >=4.59.0 @babel/plugin-transform-modules-systemjs -> 7.29.7 Also override caniuse-lite -> ^1.0.30001805 to silence the stale browserslist data warning (pnpm keeps transitive caniuse-lite in-range otherwise; update-browserslist-db doesn't persist under pnpm). Shipped build + 397 tests green; docs build (webpack) still succeeds; install --frozen-lockfile clean. Remaining dependabot noise is docusaurus-internal mediums/lows (dev-only) and the python/ tooling (out of scope). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Version bump + `biome migrate` to the 2.x config schema (files.includes, linter.rules.preset, assist.actions organizeImports). Biome 2.x's stricter recommended preset + formatter surface a backlog of findings on existing code (~128 errors / 88 warnings across ~133 files, incl. formatting). Deferred to a separate cleanup pass — biome check is not a CI gate here (CI runs lint:react/build/test), so this does not break CI. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 33 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (5)
📝 WalkthroughWalkthroughThe workspace updates Biome and pnpm tooling, removes ChangesDeclaration Build Migration
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
packages/react/tsconfig.json (1)
21-21: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueConsider adding an
excludefield for consistency with layers and vis.This tsconfig has no
excludeentry, whilepackages/layers/tsconfig.jsonandpackages/vis/tsconfig.jsonboth specify"exclude": ["dist", "node_modules"]. Sinceincludeis already["src"], the omission is functionally safe, but adding it keeps the package configs uniform.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/react/tsconfig.json` at line 21, Add an "exclude" entry to the packages/react tsconfig configuration matching the layers and vis package configs: exclude "dist" and "node_modules" while preserving the existing "include": ["src"] setting.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@pnpm-workspace.yaml`:
- Around line 15-27: Update the unbounded overrides in the overrides section so
each targets only the vulnerable package major by adding an appropriate lower
bound matching its patched major, including shell-quote, fast-uri,
`@babel/plugin-transform-modules-systemjs`, lodash, minimatch, node-forge, and
rollup. Preserve the existing bounded ranges for ws, preact, and svgo, and leave
path-to-regexp and caniuse-lite unchanged.
---
Nitpick comments:
In `@packages/react/tsconfig.json`:
- Line 21: Add an "exclude" entry to the packages/react tsconfig configuration
matching the layers and vis package configs: exclude "dist" and "node_modules"
while preserving the existing "include": ["src"] setting.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 0fef9ef9-10c2-4460-aa8d-97f46cb54ac2
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (18)
biome.jsonpackage.jsonpackages/avivatorish/package.jsonpackages/avivatorish/tsconfig.jsonpackages/core/package.jsonpackages/core/tsconfig.jsonpackages/layers/package.jsonpackages/layers/tsconfig.jsonpackages/layers/vite.config.tspackages/react/package.jsonpackages/react/tsconfig.jsonpackages/vis/package.jsonpackages/vis/tsconfig.jsonpackages/zarrextra/package.jsonpackages/zarrextra/tsconfig.jsonpackages/zarrextra/vite.config.tspnpm-workspace.yamlvite.config.base.ts
💤 Files with no reviewable changes (1)
- packages/core/tsconfig.json
…ines to node 24 GitHub flags actions whose runtime is node20 (deprecated in favour of node24). Bump each to its lowest node24 major: actions/checkout v4 -> v5 actions/setup-node v4 -> v5 actions/cache v4 -> v5 actions/deploy-pages v4 -> v5 actions/upload-pages-artifact v3 -> v4 pnpm/action-setup v4 -> v5 astral-sh/setup-uv v4 -> v7 (changesets/action@v1 is already node24.) The node-version pins stay at 24.14.1; pnpm/action-setup reads the pinned pnpm from the packageManager field. Also align engines.node ">=20.19" -> ">=24": node 20 reached EOL in April 2026 and both volta (24.14.1) and every CI job already run node 24, so the old floor advertised an untested/EOL version. Note: CI can't be exercised locally — watch the first run on this PR (esp. the setup-uv v4->v7 jump and the Pages deploy actions on main). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The upper-bound-only selectors (shell-quote, fast-uri, @babel/plugin-transform-modules-systemjs, lodash, minimatch, node-forge, rollup) would match any lower version — including a hypothetical lower major — and force it up to the patched `^x`, an unintended major jump. Add a `>=<patched-major>.0.0` lower bound so each targets only the vulnerable major, matching the section's stated intent and the already- bounded ws/preact/svgo entries. path-to-regexp (pinned in the 0.1 line) and caniuse-lite are intentionally left as-is. Resolution is unchanged (same patched versions); install --frozen-lockfile clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The previous commit updated the overrides selectors in pnpm-workspace.yaml but omitted the matching pnpm-lock.yaml, so pnpm records the old overrides config in the lockfile and `pnpm install --frozen-lockfile` (CI) fails with ERR_PNPM_LOCKFILE_CONFIG_MISMATCH. Commit the regenerated lockfile (overrides metadata only; resolved versions unchanged). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The "Cache uv environments" step cached ~/.cache/uv, but astral-sh/setup-uv
manages uv's cache elsewhere, so that path is empty at save time ("Path
Validation Error: Path(s) ... do(es) not exist, hence no cache is being
saved") — it cached nothing.
Replace it with a cache of the generated `test-fixtures/` output, which
rarely changes. The key hashes the fixture-generation code and its pinned
deps (python/scripts/generate_fixtures.py + each version's script,
pyproject.toml and uv.lock); an exact-match key (no restore-keys) forces a
full regeneration whenever any of those change rather than restoring stale
fixtures. Generation is skipped on a cache hit via the step's cache-hit
output. uv's own cache remains handled by setup-uv.
Note: CI can't be exercised locally — first run will populate the cache
(miss), subsequent runs with unchanged generation inputs should hit and
skip the ~3-version fixture generation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Upgrades the build toolchain and clears the actionable security alerts. All work is on the shared workspace catalog / configs; no shipped-library source changes.
What changed
pnpm 10.33 → 11.12
packageManager/engines/voltapins.@biomejs/biome,@vaadin/vaadin-usage-statistics,core-js,core-js-pure) are declaredfalseinpnpm-workspace.yamlallowBuilds— preserves prior behavior (no new postinstall scripts run).TypeScript 5.7 → 7.0 (the native port), with TS 6 side-by-side
TS 7 is the native (Go) compiler and ships no classic JS API, which breaks
vite-plugin-dtsand@typescript-eslint. Handled per the TS 7 announcement's side-by-side guidance:vite-plugin-dtsremoved everywhere (shared base config +layers+zarrextra); every package now emits.d.tsviatsc --emitDeclarationOnly, matchingcore's existing pattern. This also drops the slowvite:dtsstep (~65% of build time) and the@microsoft/api-extractor/rollupsubtree.typescriptresolves to@typescript/typescript6(the TS 6 API) sotypescript-eslint/lint:reactwork;@typescript/native→typescript@7provides the build-scripttsc(native). Builds run on TS 7; eslint runs on TS 6.baseUrl(TS 7 error TS5101); cross-package types now resolve via node_modules → builtdist/*.d.ts(rootDir-safe emit);zarrextrausestypes: ["node"](its worker path is delegated to@fideus-labs/fizarrita, so no DOM/WebWorker lib — keeps the package Node-safe by construction).Security
^8.0.8→^8.0.16(resolves 8.1.4): clears the high-severityserver.fs.denybypass alert.overridesforce patched versions of vulnerable deps pinned deep in the Docusaurus docs-site build stack (dev-only, not shipped), range-scoped so other majors are untouched:shell-quote1.8.3→1.10.0 (critical),ws@7→7.5.11,fast-uri→3.1.3,node-forge→1.4.0,svgo@3→3.3.4,minimatch@3→3.1.5,path-to-regexp@0.1→0.1.13,preact→10.29.7,lodash→4.18.1,@babel/plugin-transform-modules-systemjs→7.29.7,rollup→≥4.59.0.update-browserslist-dbdoesn't persist under pnpm).Biome 1.9.4 → 2.5.3
Version bump +
biome migrateto the 2.x config schema. The stricter 2.x recommended preset surfaces a lint/format backlog on existing code — deferred to a separate pass (biome is not a CI gate here).Verification
tsc)lint:reactruns on the TS 6 APIpnpm install --frozen-lockfileclean (CI parity)Notes for reviewers
node_modules/typescriptresolves to the TS 6 compat package (notsserver), so the TS 7 editor experience needs the dedicated "TypeScript native-preview" extension rather than "Use Workspace Version".pathsto siblingsrcwere dropped in favor of node_modules→distresolution (matchescore), so deps must be built to get fresh types — project references would be the longer-term fix.python/fixture-tooling Dependabot alerts.🤖 Generated with Claude Code
Summary by CodeRabbit
Build & Tooling
Maintenance