Skip to content

Commit c5f43dc

Browse files
authored
Upgrade the remaining major dependencies deferred from the Astro 7 PR (#4139)
* Bump linkinator to v7 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. * Bump @sindresorhus/slugify to v3 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. * Bump marked to v18 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. * Bump @citation-js/core and plugin-bibtex to 0.8 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. * Upgrade lucide to v1, switching lucide-vue-next to @lucide/vue 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). * Clean up dead assignments and redundant required props 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. * Upgrade eslint to v10 and migrate to flat config 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. * Refresh in-range dependency minors 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).
1 parent b92f695 commit c5f43dc

25 files changed

Lines changed: 2582 additions & 4372 deletions

astro/.eslintrc.cjs

Lines changed: 0 additions & 60 deletions
This file was deleted.

astro/eslint.config.mjs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import js from '@eslint/js';
2+
import eslintPluginAstro from 'eslint-plugin-astro';
3+
import pluginVue from 'eslint-plugin-vue';
4+
import globals from 'globals';
5+
import tseslint from 'typescript-eslint';
6+
7+
export default tseslint.config(
8+
{ ignores: ['dist/', 'node_modules/', '.astro/'] },
9+
js.configs.recommended,
10+
tseslint.configs.recommended,
11+
pluginVue.configs['flat/recommended'],
12+
eslintPluginAstro.configs['flat/recommended'],
13+
{
14+
languageOptions: {
15+
globals: { ...globals.browser, ...globals.node },
16+
ecmaVersion: 'latest',
17+
sourceType: 'module',
18+
},
19+
rules: {
20+
'no-unused-vars': 'off',
21+
'@typescript-eslint/no-unused-vars': 'error',
22+
'@typescript-eslint/no-explicit-any': 'off',
23+
'vue/multi-word-component-names': 'off',
24+
'vue/no-v-html': 'off',
25+
'vue/max-attributes-per-line': 'off',
26+
'vue/singleline-html-element-content-newline': 'off',
27+
'vue/html-self-closing': 'off',
28+
'vue/html-closing-bracket-newline': 'off',
29+
'vue/html-indent': 'off',
30+
'vue/attributes-order': 'off',
31+
'vue/first-attribute-linebreak': 'off',
32+
'vue/require-default-prop': 'off',
33+
},
34+
},
35+
{
36+
files: ['**/*.vue'],
37+
languageOptions: {
38+
parserOptions: { parser: tseslint.parser },
39+
},
40+
}
41+
);

0 commit comments

Comments
 (0)