chore(deps): migrate to eslint 10, resolve 6 high-severity vulns - #94
Merged
Conversation
Resolves all 6 high-severity advisories reported by npm audit, all of
which were transitive devDependencies:
js-yaml <- eslint 9 -> 10
postcss, nanoid <- vite 8.0.16 -> 8.2.1
ws <- jsdom 26 -> 30
fast-uri <- vite-plugin-dts 4.5.4 -> 5.0.3
The eslint 10 bump also lets us drop five dependencies that were never
referenced by eslint.config.mjs:
@typescript-eslint/eslint-plugin, @typescript-eslint/parser
superseded by the typescript-eslint umbrella package already in use
eslint-plugin-import
unused, and its peer range caps at eslint 9 - would have blocked
this upgrade outright
eslint-plugin-prettier (^3.1.1, five years stale), eslint-config-prettier
unused; formatting is enforced by the separate check-format script
Conversely, @eslint/js and globals were imported by the config but never
declared, resolving transitively by luck. They are now explicit.
No changes to eslint.config.mjs were needed - the flat config is already
eslint 10 compatible. Net effect on the lockfile is 253 fewer packages.
Separately, @arethetypeswrong/cli goes 0.15.3 -> 0.18.5 because 0.15.3
crashes outright on Node 24 ("Cannot read properties of undefined
(reading 'filename')"), meaning the check-exports CI step has not
actually been verifying anything. The working version surfaces a real,
pre-existing packaging bug: `main` points at a UMD bundle whose exports
are emitted as Object.defineProperty calls, which cjs-module-lexer
cannot statically detect, so named ESM imports crash under Node. That
is suppressed here via --ignore-rules named-exports to keep this change
scoped to dependencies; fixing it properly means renaming the ESM output
to .mjs and adding an exports map, which changes published entry points
for consumers and warrants its own PR.
Note that eslint 10 requires Node ^20.19.0 || ^22.13.0 || >=24, so the
NODE_VERSION repo variable used by on-pr-lint.yaml must be at 24.
on-push-tag-release.yaml already pins '24'.
Verified on Node 24.15.0: build, lint, check-exports and test all pass,
and npm audit reports 0 vulnerabilities.
cdevos-purse
force-pushed
the
chore/eslint-10-vuln-fixes
branch
from
August 17, 2026 10:07
41dfc8d to
a106bb1
Compare
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.
Summary
Resolves all 6 high-severity advisories reported by
npm audit, all of which were transitive devDependencies. Bumping eslint to 10 was the entry point, and it also let us drop five dependencies that turned out to be dead.npm auditgoes from 6 high to 0. The lockfile loses 253 packages.Vulnerabilities fixed
js-yamlpostcss,nanoidwsfast-uriDependency cleanup
eslint.config.mjsonly ever referencedtypescript-eslint,@eslint/jsandglobals. Everything else in the eslint dependency set was unused:@typescript-eslint/eslint-plugin,@typescript-eslint/parsertypescript-eslintumbrella package already in useeslint-plugin-importeslint-plugin-prettier(^3.1.1, five years stale)check-formatscripteslint-config-prettierConversely,
@eslint/jsandglobalswere imported by the config but never declared, resolving transitively by luck. They are now explicit.No changes to
eslint.config.mjswere needed — the flat config is already eslint 10 compatible.NODE_VERSION= 24eslint 10 requires Node
^20.19.0 || ^22.13.0 || >=24. TheNODE_VERSIONrepo variable consumed byon-pr-lint.yamlmust be updated before this merges.on-push-tag-release.yamlalready pins'24'.@arethetypeswrong/cligoes 0.15.3 → 0.18.5 because 0.15.3 crashes outright on Node 24 (Cannot read properties of undefined (reading 'filename')), meaning thecheck-exportsCI step has not actually been verifying anything.The working version immediately surfaces a real, pre-existing bug:
mainpoints at a UMD bundle whose exports are emitted asObject.defineProperty(e,"Dropin",…)calls, whichcjs-module-lexercannot statically detect. So this crashes at runtime for Node ESM consumers:It is suppressed here via
--ignore-rules named-exportsto keep this PR scoped to dependencies. Fixing it properly means renaming the ESM output to.mjsand adding anexportsmap — that changes published entry points for consumers, so it warrants its own PR.Also spotted, deliberately not touched
conditional-type-checksis unused — noIsExact/AssertTrueanywhere in the tree.tscfails on missingfinal-form/zodtypes insrc/generated/types/*.d.ts. Pre-existing, and CI runs notypecheckstep.Test plan
Verified on Node 24.15.0:
npm run build— exit 0npm run lint— exit 0 (0 errors, 3 pre-existing warnings)npm run check-exports— exit 0npm test— 5 tests, 1 file, all passingnpm audit— 0 vulnerabilitiesRebased onto v0.10.0
Main gained three commits while this was open, two touching the lockfile:
c3969a3(a parallelnpm audit fix) and269d526(v0.10.0). Rebased rather than hand-merging the lockfile —package.jsonmerged cleanly at 0.10.0, andpackage-lock.jsonwas deleted and regenerated from scratch.The dep bumps here supersede
c3969a3entirely;brace-expansionnow resolves to 5.0.9 via eslint 10, well past that advisory. Re-verified on the new base: build, lint, check-exports and test all exit 0,npm auditreports 0 vulnerabilities.