Update development dependencies - #24
Merged
Merged
Conversation
All open Dependabot advisories were in the development dependency tree.
`npm audit` now reports no vulnerabilities.
Toolchain changes needed to get there:
- Rollup 2 -> 4, with the deprecated `rollup-plugin-babel` and
`rollup-plugin-node-resolve` replaced by `@rollup/plugin-babel` and
`@rollup/plugin-node-resolve`. The config became `rollup.config.mjs`,
as it now has to read `package.json` explicitly.
- Fresh browserslist data classifies IE 11 as dead, so `not dead` silently
dropped it from the targets and the bundles became ES2015+. IE 11 is
therefore listed after `not dead` to keep the previous ES5 output.
- ESLint 7 -> 9 with a flat config. `eslint-config-airbnb-base` is
eslintrc-only and unmaintained, so it is pulled in through `FlatCompat`
minus the two JSDoc rules that no longer exist in ESLint core.
- eslint-plugin-jsdoc 30 -> 62: `jsdoc/check-examples` does not work on
ESLint 8+ and `jsdoc/newline-after-description` was superseded by
`jsdoc/tag-lines`. Rules newly enabled by the recommended preset that
contradict the existing documentation style are turned off.
- dtslint is deprecated, was the largest source of advisories and no longer
runs at all on current Node. The type test is now plain `tsc -p types`,
with `$ExpectError` expressed as `@ts-expect-error` and `$ExpectType` as
a small exact-type helper.
- jsdoc 3 -> 4 (drops taffydb), jasmine 3 -> 5, Babel 7.11 -> 7.29.
- `@babel/plugin-transform-runtime` was unused and has been dropped.
- `overrides` relaxes the stale peer dependencies of the two unmaintained
packages that are still needed: `eslint-config-airbnb-base` and
`tsd-jsdoc`.
- CI runs on Node 22 and 24 with current actions.
The generated `types/index.d.ts` is byte-identical. The bundles differ only
in Babel's own `_construct`/`_isNativeReflectConstruct` helper
implementations, Rollup's UMD wrapper formatting and its
`export { X as default }` form; the library code itself is unchanged and
still parses as ES5.
martincizek
force-pushed
the
chore/update-dev-dependencies
branch
from
August 26, 2026 16:15
c6b3afb to
cdc6f2f
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.
Clears all 41 open Dependabot advisories. Every one of them was in the
development dependency tree — the library itself has no runtime dependencies.
npm auditnow reports 0 vulnerabilities.Supersedes the currently open Dependabot PRs (#15, #16, #20, #21, #22, #23).
What had to change
Most advisories could not be fixed by bumping a version, because they came in
through tools that are unmaintained or that were pinning old transitive deps.
rollup-plugin-babel→@rollup/plugin-babel,rollup-plugin-node-resolve→@rollup/plugin-node-resolverollup.config.mjs, since it now has to readpackage.jsonexplicitly.eslint.config.mjsansi-regex,flatted,lodash,minimatch.tsc -p typesrequest,tar,form-data,tough-cookie,json-schema,tmp,uuid,qs, …) and no longer runs at all on current Node — it fails withCannot find module .../typescript-installs/4.1/node_modules/typescript.taffydb(critical), refreshesmarkdown-it/linkify-it/underscore.@babel/traverse,@babel/helpers,fast-glob/micromatch/braces.@babel/plugin-transform-runtimeactions/checkout@v5,actions/setup-node@v5, Node 22 + 24 matrix,npm ciNo library behaviour is changed by this PR. The only edits under
src/are aredundant
eslint-disablecomment and one JSDoc type spelledObject<>insteadof
object<>; neither reaches the build output.Things worth a second look
IE 11 was about to be dropped silently. The Babel target was
> 1%, IE 11, not op_mini all, not dead. Current browserslist data classifiesIE 11 as dead, and
not deadis applied afterIE 11, so it removed itagain — the rebuilt bundles came out as ES2015+ (
class,const, arrowfunctions, spread). I reordered the query to
> 1%, not op_mini all, not dead, IE 11so that the published output staysES5, since this PR should not change what ships. If you would rather drop
IE 11, that is now a one-line change — but it is a deliberate compatibility
decision, not a dependency bump.
eslint-config-airbnb-baseis unmaintained (last release 2022, eslintrconly). It is loaded through
FlatCompat, minusvalid-jsdocandrequire-jsdocwhich no longer exist in ESLint core.package.jsonoverridesrelaxes its staleeslintpeer range, andtsd-jsdoc's stalejsdocpeer range. Both work, but replacing them is the obvious follow-up.Two rules needed pinning to keep the existing code and doc style:
function-paren-newline(airbnb-base v15 changed it tomultiline-arguments)and
jsdoc/tag-lines(successor ofjsdoc/newline-after-description).jsdoc/check-exampleshad to be dropped — it does not work on ESLint 8+.Known failing job: Node 24
One spec fails on Node >= 23, and it fails on
mastertoo — it is not caused byanything in this PR.
UnionReplacer.js should fail for '/(?<foo>foo)/,…'expects a
SyntaxErrorfor the same capture group name used in two rules;ES2025 duplicate named capturing groups made that pattern legal and V8 has
shipped it.
This PR does not touch that spec. Adding an explicit Node matrix is what makes
the failure visible — previously
actions/setup-node@v1ran on whatever Nodethe runner happened to ship. Handling it is its own topic and lives on
feature/duplicate-named-capture-groups.Say the word if you would rather pin this PR's matrix to Node 22 so it goes
green, and add 24 once that branch lands.
Verification
npm cifrom a clean tree →prepare→ build + lint + test.eslint .andtsc -p types: 0 errors, 0 warnings.npm audit: 0 vulnerabilities.Build output comparison
types/index.d.tsregenerates byte-identical.The three bundles differ only in:
_construct/_isNativeReflectConstructhelperimplementations (upstream Babel rewrote them; still ES5),
}(this, ...)becoming})(this, ...),export default UnionReplacer;becomingexport { UnionReplacer as default };in the ESM build.
The library code itself is unchanged line for line, and all three bundles still
parse as ES5 (verified with
acorn,ecmaVersion: 5).Beyond the textual diff, the old and new bundles were compared behaviourally:
6446 differential assertions over CJS + UMD (5 flag sets × 520 inputs,
extended replacements exercising the full
MatchingContextAPI, a customReplacementBuilder, the combined regexp source, and constructor errormessages), plus a smaller check for the ESM build. All identical.
Type tests
types/test.tskept every assertion; only the notation changed, as dtslint'scomment directives are gone:
// $ExpectError→// @ts-expect-error(TypeScript reports an unused@ts-expect-error, so each one is still a real assertion)// $ExpectType T→expectType<T>()(value), a small exact-type helperBoth directions were verified to fail when deliberately broken.