chore: update routine deps - #576
Merged
Merged
Conversation
Six dependency majors that the declared caret ranges were holding back, plus
the removal of three packages nothing uses.
Most of the tree did not need updating. `npm ci` installs what the lockfile
pins, and the lockfile is already current for everything the ranges allow --
@radix-ui/react-select is on 2.3.7, @tanstack/react-query on 5.101.4,
@trpc/* already on 11.18.0 stable rather than the rc the manifest names.
So the only stale installs were the ones a caret could not cross.
Updated:
- content-disposition 0.5.4 -> 2.0.1. v2 is ESM-first and exports `create`
rather than a default, so the two export routes import
`{ create as contentDisposition }`. It also ships its own types, making
@types/content-disposition redundant.
- negotiator 0.6.4 -> 1.0.0
- @formatjs/intl-localematcher 0.5.10 -> 0.8.13
- next-themes 0.2.1 -> 0.4.6. `ThemeProviderProps` moved to the package root;
the `next-themes/dist/types` deep import it replaces no longer resolves.
- dotenv 16.6.1 -> 17.4.2
- @total-typescript/ts-reset 0.5.1 -> 0.6.1
The first three are worth taking together: next-intl 4.13 already depends on
@formatjs/intl-localematcher ^0.8 and negotiator ^1, so pinning the root at
0.5 and 0.6 forced npm to carry nested duplicates of both. Raising the root
deduplicates them.
Removed:
- uuid and @types/uuid. Nothing imports uuid; next-s3-upload pulls its own
copy, which is now hoisted instead of nested.
- @types/content-disposition, superseded by the types in v2.
Net 930 packages installed, down from 934.
43 dependencies declare a floor well below what is installed and tested -- tailwindcss "^3" resolving to 3.4.19, "@types/node": "^20" to 20.19.43, @radix-ui/react-select "^2.3.0" to 2.3.7, next "^16.0.7" to 16.3.1. The manifest describes a tree nobody runs. That matters in two places. `npm install` in a fresh clone without the lockfile, or any resolution that has to back off, may legally pick a version years older than what CI has ever exercised. And reading package.json is the normal way to answer "what are we on", which currently gives the wrong answer for a third of the tree. Each range is raised to `^<installed>`, so no major boundary is crossed and nothing is upgraded -- the installed version already satisfied the old range by definition. This is verifiable rather than merely asserted: regenerating the lockfile from scratch before and after this commit produces identical resolutions for all 930 packages. The only lockfile change here is the root entry, which mirrors package.json. Kept deliberately below the latest: prisma/@prisma/client at 6, zod at 3, typescript at 5, jest at 29, tailwindcss at 3, lucide-react at 0.501, openai at 4, @hookform/resolvers at 3, @types/react at 18. Those are major upgrades with API surface and belong in their own review, not here.
BastiOfBerlin
pushed a commit
to BastiOfBerlin/spliit
that referenced
this pull request
Aug 13, 2026
Brings in spliit-app#576 (routine deps), ours, landed byte-identical -- verified with `git diff up-10-routine-deps upstream/main --stat` before merging. Only package.json and package-lock.json conflicted; every source file auto-merged, because the three import changes spliit-app#576 carried were ported from this fork in the first place. package.json resolved per-package by semver max rather than by hand, since the conflict was structural: upstream had just realigned its declared floors to installed versions, and this fork carries the majors on top. 46 entries differed -- upstream won 30 (within-major floors it had realigned: @radix-ui/*, react 19.2.8, next 16.3.1, @tanstack/react-query, swr, pg, next-intl, eslint), and the fork kept all 16 genuine majors (Prisma 7, zod 4, TypeScript 6, jest 30, Tailwind 4, lucide-react 1, openai 6, tailwind-merge 3, @hookform/resolvers 5, @types/{node,react,react-dom,jest}). No major was lost in either direction. Key handling: @prisma/adapter-pg and @tailwindcss/postcss are fork-only and kept; autoprefixer is upstream-only because this fork dropped it for Tailwind 4, so it stays dropped. Lockfile regenerated from scratch on Node 24 / npm 11 -- 992 packages. Also removes a stale eslint-disable in prisma.config.ts. The directive named @typescript-eslint/no-var-requires, a rule this config never enabled, so it was always inert; eslint 9.39.5 (arriving with this merge) started reporting unused directives and turned it into a warning. Lint is back to the fork's usual 19. Verified with Node 24: check-types, check-formatting, lint (19 warnings, 0 errors), npm test -- 9 suites, 148 tests.
24 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
deps: routine updates
Part of the series in #553. Two commits, three changed import lines, no
behaviour change intended.
This turned out to be much smaller than I advertised in #553
I had this down as "folds nine merged Dependabot PRs from my fork". That framing
was wrong, and the reason is worth stating because it also shrinks the
major-upgrades PR later in the series.
main's lockfile is already current for almost everything.npm ciinstallswhat the lockfile pins, carets float, and the lockfile has been regenerated
recently (#556, #558). So:
package.json@radix-ui/react-select: ^2.3.0@tanstack/react-query: ^5.59.15@trpc/server: ^11.0.0-rc.586dayjs: ^1.11.10next: ^16.0.7prettier: ^3.0.3Nothing there needs upgrading. My fork's versions of those lines were behind
what you already ship. So this PR is not the batch of routine bumps I described
— it's the handful the caret ranges were actually blocking, plus a cleanup.
1. The six that were genuinely stale
Each of these needed a major-range change to move at all:
content-disposition0.5.4 → 2.0.1. v2 exportscreateinstead of adefault, so the CSV and JSON export routes import
{ create as contentDisposition }. It ships its own types, so@types/content-dispositiongoes.negotiator0.6.4 → 1.0.0@formatjs/intl-localematcher0.5.10 → 0.8.13next-themes0.2.1 → 0.4.6.ThemeProviderPropsmoved to the packageroot; the
next-themes/dist/typesdeep import no longer resolves.dotenv16.6.1 → 17.4.2@total-typescript/ts-reset0.5.1 → 0.6.1The first three belong together.
next-intl4.13 already depends on@formatjs/intl-localematcher@^0.8andnegotiator@^1, so pinning the root at0.5 and 0.6 forced npm to carry nested duplicate copies of both. Raising the
root deduplicates them.
Also dropped
uuidand@types/uuid— nothing imports uuid.next-s3-uploadpulls its own copy, which is now hoisted rather than nested.
Net: 930 packages, down from 934.
2. Realigning the declared ranges — provably a no-op
43 dependencies declare a floor far below what is installed.
tailwindcss: "^3"resolving to 3.4.19;
"@types/node": "^20"to 20.19.43. The manifest describes atree nobody runs.
That costs two things: a fresh
npm installwithout the lockfile may legallypick something years older than CI has ever exercised, and reading
package.json— the normal way to answer "what are we on" — currently gives thewrong answer for a third of the tree.
Each range is raised to
^<installed>, so no major boundary is crossed andnothing is upgraded; the installed version already satisfied the old range by
definition.
I verified this rather than asserting it. Regenerating the lockfile from
scratch with the old floors and with the new ones produces identical
resolutions for all 930 packages — I diffed every entry. The only lockfile
change in that commit is the root entry, which mirrors
package.json.It's a separate commit precisely so you can drop it if you'd rather not carry
the churn. Commit 1 stands alone without it.
Deliberately left behind
prisma/@prisma/clientat 6,zodat 3,typescriptat 5,jestat 29,tailwindcssat 3,lucide-reactat 0.501,openaiat 4,@hookform/resolversat 3,@types/reactat 18. Those have API surface and gettheir own PR.
One of them is worth flagging now, though:
reactis on 19.2.8 while@types/reactis on 18.3.31. That mismatch is pre-existing onmain, notsomething this PR introduces, and it type-checks today — but it's the kind of
thing that produces confusing errors, so I'll fix it in the major-upgrades PR
unless you'd rather have it sooner.
On the audit warning
npm auditreports 2 moderate advisories againstuuid(GHSA-w5hq-g745-h8pq),reached through
next-s3-upload. This PR does not fix that and does not makeit worse — it's transitive,
next-s3-uploadpins its own range, and there's nopatched version in that range. Dropping our direct
uuiddoesn't help becauseit was never the vulnerable path. Same advisory count before and after.
Verification
Against
f8ccc7a, Node 24 / npm 11:npm ci --ignore-scripts,npx prisma generate,check-types,lint(16 warnings / 0 errors, allpre-existing),
check-formatting,npm test— 7 suites, 101 tests.Also ran a full
npm run build, sincetscwon't catch runtime breakage fromthe Radix or
next-intlresolution changes. All 25 routes compile.Not verified: the two export routes and the theme toggle in a browser. The
content-dispositionandnext-themeschanges are the only ones that touchrunning code, and both are worth a click — a CSV export with a non-ASCII group
name, and a dark/light toggle.