Skip to content

build(deps): take seven dependency majors the slog can verify - #2937

Merged
mtoy-googly-moogly merged 7 commits into
mainfrom
worktree-dep-majors
Jun 23, 2026
Merged

build(deps): take seven dependency majors the slog can verify#2937
mtoy-googly-moogly merged 7 commits into
mainfrom
worktree-dep-majors

Conversation

@mtoy-googly-moogly

@mtoy-googly-moogly mtoy-googly-moogly commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

Working through the Dependabot major backlog by hand, since each major needs a deliberate decision rather than a blind merge. This is the batch that compiles, tests, and builds green — seven bumps, each verified locally (full npm run build + precheck pass). Supersedes Dependabot PRs #2936, #2912, #2917, #2927, #2935, #2913, #2779.

Taken

  • @noble/hashes 1.8.0 → 2.2.0 — v2 is ESM-only and reorganized: sha256 moved to /sha2.js, the .js extension is now mandatory, and string inputs are gone (encode via utf8ToBytes, which reproduces v1's internal encoding — identical digest). It's static ESM, so jest loads it once transformed: added to transformIgnoreModules in defaultConfig (the projects entries spread it; the top-level transform doesn't cascade) and the simple config. The pin ledger now documents the Class-1 (static ESM → transform & take) vs Class-2 (runtime dynamic import() of ESM, e.g. the bigquery/gaxios hold → can't) distinction so this is a known triage, not a recurring surprise.
  • uuid 8.3.2 → 14.0.0 — the hold rested on build(deps): bump uuid from 8.3.2 to 14.0.0 #2779 being "unmergeable," but that PR's CI was red on a stale jest-util lockfile error, not uuid; our code already uses the v7+ named-import style, so the six-major jump needs no source change. uuid 14 is ESM-only (Class 1, same as noble) → added to transformIgnoreModules. Dropped the now-redundant @types/uuid (v9+ bundles types), removed the dependabot major-ignore, and deleted the uuid pin from the ledger.
  • unified 10.1.2 → 11.0.5 — no source imports; lockfile-only.
  • jest-diff → 30.4.1 — aligned all three declarations (was a 27/29/30 split with duplicate copies) and moved it to devDependencies in malloy/malloy-filter: it's imported only from *.spec.ts, so declaring it a runtime dependency was needlessly shipping it (and its chalk subtree) to consumers.
  • @types/jasmine 4.3.5 → 5.1.15not 6. The types track the jasmine-core major, which syntax-highlight holds at 5; 4→6 would put the types a major ahead of the runtime (the footgun @types/node is pinned against). Bumped to latest 5.x and ignored the major until a deliberate jasmine-core 5→6.
  • yargs 17.7.2 → 18.0.0 — ESM-only; its only consumer is scripts/gen-flow.ts (ts-node), which loads it fine via require(esm) on Node 24.
  • vite-plugin-dts 4.5.4 → 5.0.2 — render's .d.ts bundler; a real vite build emits declarations cleanly under v5.

Deliberately left out

v2 is ESM-only and reorganized: import sha256 from /sha2.js (with the now-
mandatory .js extension), and inputs are Uint8Array-only — makeDigest now
UTF-8-encodes via utf8ToBytes, which yields the identical digest v1 produced
internally.

@noble/hashes is statically-importable ESM (Class 1), so jest can load it once
transformed: add it to transformIgnoreModules in defaultConfig (every projects
entry spreads it; the top-level transform does not cascade into projects) and in
jest.config.simple.ts. Documented the Class-1/Class-2 ESM triage in the pin ledger.
Root devDependency with no source imports (only the English word 'unified'
appears in comments), so this is a lockfile-only update.
Aligns all three declarations (root + malloy + malloy-filter) on ^30.4.1 instead
of leaving a 27/29/30 split with duplicate copies. jest-diff 30 still ships CJS
(require export intact), so it loads under jest unchanged.

Also moves jest-diff to devDependencies in malloy and malloy-filter: it's
imported only from *.spec.ts, so declaring it a runtime dependency needlessly
pulled it (and its chalk subtree) into consumers' production installs.
Not to 6: @types/jasmine tracks the jasmine-core major, and syntax-highlight runs
on jasmine-core 5. Dependabot's 4->6 would put the types a major ahead of the
runtime (the same footgun @types/node is pinned against), so this bumps to the
latest 5.x to match, and ignores the major in dependabot.yml until a deliberate
jasmine-core 5->6 bump moves both together.
yargs 18 is ESM-only. Its only consumer is scripts/gen-flow.ts (run via ts-node
during the femto flow-type build); verified it loads and parses there on Node 24
via require(esm), so no transform/migration is needed. devDependency, not shipped.
Used in malloy-render's vite.config.base.mts to emit the library .d.ts bundle.
Verified a real `vite build` generates the declarations cleanly under v5.
Unholds uuid. The hold rested on PR #2779 being "unmergeable," but its CI was red
on a stale `jest-util` lockfile error, not anything uuid — and our code already
uses the v7+ named-import style (`import {v4} from 'uuid'`), so the six-major jump
needs no source change.

uuid 14 is ESM-only (its `node` export condition is itself ESM), i.e. the same
Class-1 case as @noble/hashes: add `uuid` to transformIgnoreModules in both jest
configs and jest loads it. Dropped the now-redundant @types/uuid (v9+ bundles its
own types), removed the dependabot major-ignore, and deleted the uuid pin from the
ledger.
@mtoy-googly-moogly mtoy-googly-moogly changed the title build(deps): take six dependency majors the slog can actually verify build(deps): take seven dependency majors the slog can verify Jun 23, 2026
@mtoy-googly-moogly
mtoy-googly-moogly merged commit 33806ab into main Jun 23, 2026
19 checks passed
@mtoy-googly-moogly
mtoy-googly-moogly deleted the worktree-dep-majors branch June 23, 2026 18:36
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.

1 participant