@babel/runtime, babel's modular runtime helpers, saw a notable update moving from version 7.21.5 to 7.22.0. Both versions share the same core purpose: providing pre-compiled helper functions that Babel injects into your code, reducing code duplication and improving overall bundle size. Dependencies remained consistent, with both versions depending on regenerator-runtime ^0.13.11. Both packages are licensed under the MIT license.
The key differences lie in the internal implementation and the subsequent impact on file size. Version 7.22.0 includes 212 files compared to 7.21.5's 205, and its unpacked size is also larger, growing from 257,650 bytes to 281,918 bytes. This indicates additions, refactorings, or optimizations within the helper functions themselves. Although not explicitly stated, these changes likely address bug fixes or performance improvements identified since the previous release.
For developers using @babel/runtime, upgrading to 7.22.0 promises potential benefits in code execution efficiency and stability. Developers should always check the official Babel changelog and migration guides when upgrading major.minor versions to proactively address potential breakages. The consistent dependency ensures a smooth transition for projects already integrated with the Babel ecosystem. The package continues to be actively maintained by the Babel team, offering developers a reliable and up-to-date solution for runtime support in their Babel-powered projects.
All the vulnerabilities related to the version 7.22.0 of the package
Babel has inefficient RegExp complexity in generated code with .replace when transpiling named capturing groups
When using Babel to compile regular expression named capturing groups, Babel will generate a polyfill for the .replace
method that has quadratic complexity on some specific replacement pattern strings (i.e. the second argument passed to .replace
).
Your generated code is vulnerable if all the following conditions are true:
.replace
method on a regular expression that contains named capturing groups.replace
If you are using @babel/preset-env
with the targets
option, the transform that injects the vulnerable code is automatically enabled if:
You can verify what transforms @babel/preset-env
is using by enabling the debug
option.
This problem has been fixed in @babel/helpers
and @babel/runtime
7.26.10 and 8.0.0-alpha.17, please upgrade. It's likely that you do not directly depend on @babel/helpers
, and instead you depend on @babel/core
(which itself depends on @babel/helpers
). Upgrading to @babel/core
7.26.10 is not required, but it guarantees that you are on a new enough @babel/helpers
version.
Please note that just updating your Babel dependencies is not enough: you will also need to re-compile your code.
If you are passing user-provided strings as the second argument of .replace
on regular expressions that contain named capturing groups, validate the input and make sure it does not contain the substring $<
if it's then not followed by >
(possibly with other characters in between).
This vulnerability was reported and fixed in https://github.com/babel/babel/pull/17173.