Upgrade the remaining major dependencies deferred from the Astro 7 PR#4139
Merged
Conversation
API is unchanged for our check-links script (LinkChecker class, link/pagestart events, check() options all work as before). Verified by running the full internal link crawl against a served build with both v6 and v7 -- v7 finds a strict superset of v6's results, catching a few trailing-slash variants of already-broken links that v6 missed.
Only used in generate-redirects.mjs for legacy Gridsome-style slugs. v3 just raises the Node floor to 20 and adds new options -- regenerated redirects are byte-identical to v2's output.
We only use plain marked.parse/parseInline with no extensions or custom renderers. The one output change is the documented trailing-blank-line trim after raw HTML blocks, which shows up as removed \n\n between tags in feed content strings -- verified by diffing the full built site (2800+ pages) with asset hashes normalized; the only real differences were that whitespace in three feed files, which renders identically.
We only use the BibTeX input parser (new Cite(text) + cite.data for CSL-JSON); the 0.7/0.8 breaking changes are in output plugins (csl/ris/wikidata) we don't touch. All ten built citations pages are byte-identical before and after.
lucide-vue-next was renamed to @lucide/vue at 1.0 (the old package is deprecated) -- same API, so the Vue components just get an import swap. The five icons we import (ChevronDown, ChevronUp, Check, X, Menu) all exist in v1. lucide v1 also dropped brand icons (github, twitter, linkedin), which our content still references through the mdx Icon component. Those three SVGs are now vendored from lucide-static 0.575 (ISC) in brand-icons.ts, and Icon.astro falls back to them, so the built pages render identically -- verified by checking the built site before and after for unknown-icon spans (zero both ways) and brand SVG presence (same pages both ways).
A handful of let declarations had initializers that could never be read (every code path either reassigns or bails), one loop assigned a counter right before breaking out of scope, and the two map components marked a prop required while also giving it a default. All harmless, but eslint 10's new no-useless-assignment rule and eslint-plugin-vue 10's no-required-prop-with-default flag them, and they're legitimate cleanups on their own.
eslint 10 drops legacy .eslintrc support, so the config moves to eslint.config.mjs with the same semantics as before: the recommended sets from core, typescript-eslint, eslint-plugin-vue (vue3), and eslint-plugin-astro, plus our existing rule overrides. The plugins move to their current majors (eslint-plugin-astro 2, eslint-plugin-vue 10), @typescript-eslint/* is replaced by the typescript-eslint meta package, and the lint scripts drop --ext since flat config file matching handles extensions now. Verified the flat setup lints the exact same file set as the old --ext list (260 files) and passes clean.
npm update across the board now that the majors are handled -- notably astro 7.1, @lucide/vue and lucide-static 1.25, eslint-plugin-vue 10.10, playwright 1.61, and prettier 3.9. Everything was already allowed by the existing semver ranges, so this is lockfile-only except for two files reformatted by prettier 3.9's new union-type collapsing (type-level, no runtime change).
bgruening
approved these changes
Jul 20, 2026
Member
|
Thanks |
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.
Follow-up to #4124, taking care of the rest of the majors that dependabot's #4122 tried to land in one shot: linkinator 7, @sindresorhus/slugify 3, marked 18, @citation-js 0.8, lucide 1.x, and eslint 10. One commit per upgrade, each verified independently.
Most were mechanical, verified by diffing generated output before and after: slugify's generated redirects and the citation-js citations pages are byte-identical, and marked 18's only output change is the documented trailing-blank-line trim, which shows up as cosmetic whitespace between tags in three feed files.
Two needed real changes:
lucide-vue-nextto@lucide/vue(same API, import swap) and dropped brand icons. Content still referencesgithub/twitter/linkedinthrough the mdxIconcomponent, so those three SVGs are vendored from lucide-static 0.575 (ISC) inbrand-icons.tswith a fallback lookup inIcon.astro-- the built site renders identically, verified by comparing unknown-icon spans and brand SVG presence across the full build..eslintrcsupport, so the config moves toeslint.config.mjswith the same semantics (same recommended sets, same rule overrides), the plugins move to their current majors (eslint-plugin-astro2,eslint-plugin-vue10),@typescript-eslint/*becomes thetypescript-eslintmeta package, and the lint scripts drop--ext. The flat config lints exactly the same 260 files the old setup covered. The new recommended rules flagged a handful of real minor issues (dead initializers, required-props-with-defaults) -- fixed in their own commit.Rounded off with an
npm updateto refresh in-range minors (astro 7.1, lucide 1.25, playwright 1.61, prettier 3.9 -- which reformatted two files, type-level only).Build, unit tests (191), lint, format check, and the full Playwright suite (145) all pass at the tip.