Skip to content

Refresh JS dependencies within range, hold breaking majors - #3985

Open
T4rk1n wants to merge 3 commits into
devfrom
deps/consolidated-updates
Open

T4rk1n wants to merge 3 commits into
devfrom
deps/consolidated-updates

Conversation

@T4rk1n

@T4rk1n T4rk1n commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

What

A single consolidated dependency-update PR to replace the batch of stale, failing dependabot PRs. All six npm lockfiles are regenerated to the latest versions within the existing semver ranges (node 24 / npm 11, preserving lockfileVersion 2): root, dash/dash-renderer, components/dash-core-components, components/dash-table, components/dash-html-components, and @plotly/dash-component-plugins.

No direct dependency crosses a major boundary. The open dependabot PRs fail because they bundle breaking majors (eslint 9, typescript 6/7, webpack-cli 7, react-window 2, Babel 8). Per a conservative policy, this PR takes every safe minor/patch/security bump and holds the breakers.

Notable changes

  • renderer: the pinned @types/ramda@0.29.1 transitively pulls types-ramda, which within its range jumped 0.29.2 -> 0.29.10 and tightened keys()'s generic to extends object, breaking keys<string>(...) in src/actions/callbacks.ts with 37 tsc errors. Pinned types-ramda to 0.29.2 via a scoped overrides entry (dev-only typings, no source change). Also bumped webpack-cli ^5 -> ^7 to match the component packages (verified building).
  • dash-table: webpack-dev-server 5.2.4 -> 5.2.6 (security, closes Bump webpack-dev-server from 5.2.4 to 5.2.6 in /components/dash-table in the npm-dependencies-security group across 1 directory #3868).
  • dependabot.yml: added ignore entries so the majors that break the build stop reopening red PRs: typescript >=6, @babel/* >=8, babel-loader >=10 (all npm dirs), react-window >=2 (dcc), @types/ramda >=0.30 (renderer, to stay in sync with the override). eslint/prettier/@typescript-eslint were already locked by the existing allow-lists.

Verification (all on node 24, CI's version)

  • renderer: webpack build (0 errors), eslint (0 errors), prettier, karma 85/85
  • dash-core-components: build, es-check ES9, eslint, jest 85/85
  • dash-table: build, es-check ES6, eslint, prettier
  • dash-html-components: metadata extract (react-docgen 5) + build + eslint
  • @plotly/dash-component-plugins: build
  • No source-file drift.

Known held vulnerabilities

Two dev/build-only advisories remain, fixable only by breaking majors, so held under the conservative policy:

  • elliptic (via node-polyfill-webpack-plugin, browser crypto polyfill; needs the plugin's v4 major)
  • serialize-javascript (via mocha test runner; needs mocha 12)

Supersedes

Stale dependabot PRs: #3868, #3869, #3890, #3904, #3905, #3906, #3910, #3917, #3918, #3919, #3920. These should be closed once this merges.

Follow-ups (not in this PR)

Regenerate all npm lockfiles to the latest versions within the existing
semver ranges (node 24 / npm 11, lockfileVersion 2) across the root,
dash-renderer, the three component packages, and dash-component-plugins.
No direct dependency crosses a major boundary. This supersedes the stale,
failing dependabot PRs, which had bundled breaking majors (eslint 9,
typescript 6, webpack-cli 7, react-window 2, Babel 8).

- renderer: pin transitive types-ramda to 0.29.2 via a scoped override.
  @types/ramda 0.29.1 pulls types-ramda, which within its range jumped to
  0.29.10 and tightened keys() to `extends object`, breaking the type
  check with 37 tsc errors. Also bump webpack-cli to ^7 to match the
  component packages (verified building).
- dash-table: webpack-dev-server 5.2.4 -> 5.2.6 (security, closes #3868).
- dependabot.yml: ignore the majors that break the build so stale red PRs
  stop reopening: typescript >=6, @babel/* >=8, babel-loader >=10,
  react-window >=2 (dcc), @types/ramda >=0.30 (renderer).

Verified on node 24: renderer build/eslint/prettier/karma (85),
dash-core-components build/es-check/eslint/jest (85), dash-table and
dash-html-components build/es-check/eslint, dash-component-plugins build.

Supersedes #3868, #3869, #3890, #3904, #3905, #3906, #3910, #3917-#3920.
@github-actions

github-actions Bot commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Dash performance benchmarks

⚠️ regressions to review

scenario metric p90 (ms) median growth baseline p90 note
⚠️ initial_render_small render_ms 140.9 77.2 1.6x 104.0 1.7x baseline (norm)
callback_chain chain_ms 366.5 363.8 0.94x 499.1
callback_chain graph_ms 2.9 2.9 1.0x 2.4
callback_fanout fanout_ms 67.6 54.3 0.81x 92.5
deep_nesting render_ms 43.6 40.9 1.29x 56.8
full_children_replace replace_ms 3289.8 1270.9 16.79x 4697.1
initial_render_large render_ms 425.0 408.8 0.94x 694.4
patch_append_nested append_ms 133.4 92.8 2.38x 192.3
patch_append_toplevel append_ms 124.9 91.5 2.57x 140.2
patch_scalar_update_large update_ms 145.8 124.8 0.88x 202.9
wildcard_all_resolve wildcard_ms 197.7 190.0 0.89x 313.6
wildcard_all_resolve graph_ms 0.8 0.8 1.0x 1.3

growth = late-third / early-third per-op time; ~1 is flat, a large value means the per-op cost scales with accumulated state.

machine scale vs baseline: 0.80x - divided out of the baseline ratios so they compare like for like (the absolute warn/fail ceilings are left un-scaled); calibrated on initial_render_small.

Two CI failures from the first pass:

- dash-renderer, dash-html-components and dash-component-plugins have no
  .npmrc, so CI installs them with plain `npm ci` (no legacy-peer-deps).
  Their locks were generated with --legacy-peer-deps, which relaxed peer
  resolution and picked an inconsistent ajv, so plain `npm ci` rejected
  them (ajv 6.15.0 vs 8.20.0). Regenerated those three without the flag.
  Root, dash-core-components and dash-table keep --legacy-peer-deps to
  match their own .npmrc.
- dash-table: d3-format 3.1.0 -> 3.1.2 changed significant-digit
  formatting and broke a js-unit test (expected '0.0', got '0'). Pinned
  d3-format to 3.1.0 (it is not in the table's dependabot allow list, so
  it was never meant to move here).

Verified with plain `npm ci` on renderer/html/plugins, legacy `npm ci`
on root/dcc/table, renderer karma 85/85, and table karma 786/786.
@sonarqubecloud

Copy link
Copy Markdown

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.

2 participants