chore(deps): update minor updates#203
Open
wttj-bot[bot] wants to merge 1 commit into
Open
Conversation
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.
This PR contains the following updates:
1.15.2-otp-26→1.20.226.0.2→26.2.5Release Notes
elixir-lang/elixir (elixir)
v1.20.2Compare Source
1. Enhancements
Elixir
profile: :time2. Bug fixes
Elixir
:uniqor:intoare usedquotewithunquoteis used inside a pattern or guardKernel.put_elem/3to emit:erlang.setelement/3__info__(:struct)to include the:requiredkeyMix
v1.20.1Compare Source
1. Security
Elixir
Versionmodule (CVE-2026-49762, GHSA-w2h8-8x3g-278p)2. Bug fixes
Elixir
Calendar.strftime/2to 1024 charactersCode.require_filereleases the file if compilation failsMix
--no-compileoption when loading pluginsv1.20.0Compare Source
Announcement: https://elixir-lang.org/blog/2026/06/03/elixir-v1-20-0-released/
This release requires Erlang/OTP 27+ and is compatible with Erlang/OTP 29.
Type system improvements
Elixir's type system now understands all language constructs and can infer types for your function definitions, using typing information from Elixir's standard library and your dependencies, to find verified bugs and dead code.
This has been achieved through a series of improvements, such as type refinement across clauses, occurrence typing, typing of map keys and domains, and more.
Type inference of guards
This release also performs inference of guards! Let's see some examples:
The code above correctly infers
xis a list andyis an integer.The one above infers x is a binary or an integer, and
yis a two element tuple with:okas first element and a binary or integer as second.The code above infers
xis a map which has the:fookey, represented as%{..., foo: dynamic()}. Remember the leading...indicates the map may have other keys.And the code above infers
xdoes not have the:fookey (hencex.foowill raise a typing violation), which has the type:%{..., foo: not_set()}.You can also have expressions that assert on the size of data structures:
Elixir will correctly track the tuple has at most two elements, and therefore accessing
elem(x, 3)will emit a typing violation. In other words, Elixir can look at complex guards, infer types, and use this information to find bugs in our code, without a need to introduce type signatures (yet).Whole-body type inference
Elixir also performs inference based on the function body itself. Take the following code:
Elixir now infers that the function expects a
mapas first argument, and the map must have the keys.fooand.barwhose values are eitherinteger()orfloat(). The return type will be eitherinteger()orfloat().Here is another example:
Even though the
+operator works with both integers and floats, Elixir infers thataandbmust be both integers, as the result of+is given to a function that expects an integer. The inferred type information is then used during type checking to find possible typing errors. The typing inferred from your dependencies are also used to help infer more precise types for your own applications.Typing across clauses
Elixir now infers the type of a given clause based on previous clauses. Let's see an example:
System.get_env("SOME_VAR")returns eithernilor abinary(). Because the first clause matches onnil, the type system knowsvaluecan no longer benil, and therefore it must only be abinary(), which allows the second clause to also type check without violations.This type inference across clauses also helps the type system find redundant clauses and dead code in existing codebases. Elixir v1.20 also implements occurrence typing for
cond,case, andwith, providing more precise types within each clause.Typing of atom and domain keys in maps
Maps were one of the first data-structures we implemented within the Elixir type system however, up to this point, they only supported atom keys. If they had additional keys, those keys were simply marked as
dynamic().As of Elixir v1.20, we can track all possible domains as map keys. For example, the map:
will have the type:
It is also possible to mix domain keys, as above, with atom keys, yielding the following:
This system is an implementation of Typing Records, Maps, and Structs, by Giuseppe Castagna (2023).
Typing of map operations
We have typed the majority of the functions in the
Mapmodule, allowing the type system to track how keys are added, updated, and removed across all possible key types.For example, imagine we are calling the following
Mapfunctions with a variablemap, which we don't know the exact shape of, and an atom key:As you can see, we track when keys are set and also when they are removed.
Some operations, like
Map.replace/3, only replace the key if it exists, and that is also propagated by the type system:In other words, if the key exists, it would have been replaced by an integer value. Furthermore, whenever calling a function in the
Mapmodule and the given key is statically proven to never exist in the map, an error is emitted.By combining full type inference with bang operations like
Map.fetch!/2,Map.pop!/2,Map.replace!/3, andMap.update!/3, Elixir is able to propagate information about the desired keys. Take this module:The code above has a type violation, which is now caught by the type system:
Acknowledgements
The type system was made possible thanks to a partnership between CNRS and Remote. The development work is currently sponsored by Fresha and Tidewave.
Compile-time improvements
Elixir's v1.20 improves compilation times once more, especially on applications with many cores.
It also introduces a new compiler option called
:module_definition, which if the module definition should be:compiled(the default) or:interpreted. Note this does not affect the.beamfile written to disk, only how the contents insidedefmoduleare executed. Using the:interpretedmode may offer better compilation times for large projects, especially on machines with high core count, however, it comes with some downsides:Errors during compilation may have less precise stacktraces
Anonymous functions within
defmodulecan have only up to 20 arguments.If this is an issue, you can use maps or tuples to group the data.
Note the functions themselves inside
defmodule, such as the ones definedinside
defand friends, can still have up to 255 argumentsYou can enable it by setting
elixirc_options: [module_definition: :interpreted]in yourmix.exs.v1.20.0 (2026-06-03)
This release requires Erlang/OTP 27+ and is compatible with Erlang/OTP 29.
1. Enhancements
EEx
Elixir
date_from_iso_daysby using the Neri-Schneider algorithm:dbg_callbackoption to eval functionsmodule_definition: :interpretedoption toCodewhich allows module definitions to be evaluated instead of compiled. In some applications/architectures, this can lead to drastic improvements to compilation times. Note this does not affect the generated.beamfile, which will have the same performance/behaviour as beforecontainer_cursor_to_quotedEnum.min_maxsorter[:raw]opts inFile.read/2File.cp_r/3instead of erroring with reason:eioFloat.round/2by avoiding big integersInteger.ceil_div/2Integer.popcount/1IO.iodata_empty?/1x when is_integer(x), then the next clause may no longer be an integercase,cond, andwithdbgfor pipesList.first!/1andList.last!/1after_compile/2callback failscount_children/1andstop/3Process.get_label/1keys: {:duplicate, :key}toordered_setwith composite keysRegex.import/1to import regexes defined with/EString.length/1andString.slice/3ExUnit
--repeat-until-failure:formatteroption for custom log formattingIEx
source/1Mix
--outputoptionmodule_definition: :interpretedoption toCodewhich allows module definitions to be evaluated instead of compiled. In some applications/architectures, this can lead to drastic improvements to compilation times. Note this does not affect the generated.beamfile, which will have the same performance/behaviour as before:elixirc_pathsto be a list of strings to avoid paths from being discarded (the only documented type was lists of strings)deps.loadpaths, improving boot times in projects with many git dependenciesmix depsoutput--outputoption--no-compileoptionmix source MODULEto print or open a given module/function locationmix test --dry-run2. Potential breaking changes
Elixir
?for security reasonsrequire SomeModuleno longer expands to the given module at compile-time, but it still returns the module at runtime. Note Elixir does not guarantee macros will expand to certain constructs, only what its execution result, but since this can break code relying on the previous behaviour, such asrequire(SomeMod).some_macro(), we are adding this note to the CHANGELOG3. Bug fixes
Elixir
Enum.slice/2for ranges with step > 1 sliced by step > 1File.cp_r/3File.cp_r/3infinite loop with symlink cyclesFile.cp_r/3infinite loop when copying into subdirectory of sourceFile.Stream'sEnumerable.countfor files without trailing newline@type record()for Erlang/OTP 29Float.parse/1inconsistent error handling for non-scientific notation overflowInteger.extended_gcd/2returning negative GCD for zero base casesInteger.undigits/2only: :sigilsoption when the imported module exports non-sigil symbols withsigil_prefixAnyimplementationto_timeout/1ArgumentErrorinKeyword.from_keys/2for non-atom keysMacro.to_string/1with escaped trailing newlinePath.relative_to_cwd/2Stream.cycle/1when enumerable reduce call yields no elementsString.count/2URI.mergeleaking:+marker when base path is empty stringExUnit
IEx
Logger
Logger.configure/1Mix
non_executable_binary_to_termon loopback pubsubMIX_OS_DEPS_COMPILE_PARTITION_COUNT--warnings-as-errorsnot catching misnamed test file warnings--raisewhenmix test --warnings-as-errorspasses with warnings4. Hard deprecations
Elixir
File.stream!(path, modes, lines_or_bytes)is deprecated in favor ofFile.stream!(path, lines_or_bytes, modes)<<x::size(^existing_var)>>Kernel.ParallelCompiler.async/1is deprecated in favor ofKernel.ParallelCompiler.pmap/2, which is more performant and addresses known limitationsLogger
Logger.*_backendfunctions are deprecated in favor of handlers. If you really want to keep on using backends, see the:logger_backendspackageLogger.enable/1andLogger.disable/1have been deprecated in favor ofLogger.put_process_level/2andLogger.delete_process_level/1Mix
xref: [exclude: ...]in yourmix.exsis deprecated in favor ofelixirc_options: [no_warn_undefined: ...]v1.19.5Compare Source
1. Enhancements
Elixir
2. Bug fixes
Elixir
dbg_callbackis modified at runtimenot inStream.flat_map/2to crashIEx
#iex:breakas part of multi-line promptsLogger
v1.19.4Compare Source
1. Enhancements
Mix
--min-cycle-labelto help projects adapt to the more precisemix xref graphreports in Elixir v1.19. In previous versions, Elixir would break a large compilation cycle into several smaller ones, and therefore developers would check for--min-cycle-sizeon CI. However, the issue is not the size of the cycle (it has no implication in the amount of compiled files), but how many compile-time dependencies (aka compile labels) in a cycle. The new option allows developers to filter on the label parameter2. Bug fixes
Elixir
File.cp_r/3reports non-existing destination properly (instead of source)ExUnit
assertpropagate type informationLogger
Mix
app:APPworks when the project or its dependencies were not yet compiledhexapplication can be included in escriptsv1.19.3Compare Source
1. Enhancements
Elixir
Mix
--force-elixir,--force-app, etc2. Bug fixes
ExUnit
setup_allMix
&Mod.fun/aritycan be written to .app filesv1.19.2Compare Source
1. Enhancements
Elixir
.beamfiles in the compilerMix
--no-check-cwdto skip compiler check to aid debugging2. Bug fixes
Elixir
IO.inspect :label~~~unary operatorLogger
Mix
elixirc_pathsis not a list of string pathsMIX_OS_DEPS_COMPILE_PARTITION_COUNTacrossmix escript.install,mix archive.install, and othersv1.19.1Compare Source
1. Bug fixes
EEx
EEx.compile_stringElixir
dbg/2Mix
v1.18.4Compare Source
This release includes initial support for Erlang/OTP 28, for those who want to try it out. In such cases, you may use Elixir v1.18.4 precompiled for Erlang/OTP 27, as it is binary compatible with Erlang/OTP 28. Note, however, that Erlang/OTP 28 no longer allows regexes to be defined in the module body and interpolated into an attribute. If you do this:
You must rewrite it to:
1. Enhancements
IEx
IEx.Helpers.process_info/1which prints process informationMix
--no-listenersoption--no-listenersoption2. Bug fixes
Elixir
@on_definitioncallbacks@on_loadcallbackssupercallselixir_erlMix
v1.18.3Compare Source
1. Enhancements
Elixir
<<_::3*8>>in typespecsMix
--no-listenersoption2. Bug fixes
Elixir
--no-colornot setting:ansi_enabledto falsenilStream.cycle/1is explicitly haltedExUnit
IEx
__MODULE__recompileif IEx is not runningv1.18.2Compare Source
1. Enhancements
Elixir
--color/--no-colorfor enabling and disabling of ANSI colorscontainer_cursor_to_quotedwith trailing fragmentsMix
2. Bug fixes
Elixir
elixir,elixirc, andmixon Windows, as they leave the shell broken after quitting ErlangExUnit
IEx
Mix
v1.18.1Compare Source
1. Enhancements
2. Bug fixes
Elixir
Code.Fragment.container_cursor_to_quoted/2with:trailing_fragmentparses expressions that were supported in previous versions@fileannotation@fileannotation:no_parensmetadata when using capture with arity on all casesExUnit
--repeat-until-failurecan be combined with groupsMix
--warnings-as-errorsv1.18.0Compare Source
Official announcement: https://elixir-lang.org/blog/2024/12/19/elixir-v1-18-0-released/
1. Enhancements
Elixir
elixir,elixirc, andmixon Windows. Those provide a safer entry point for running Elixir from other platformsDuration.to_string/1Code.format_string!/2--and---inCode.format_string!/2to make precedence clearerCode.string_to_quoted/2whentoken_metadata: trueto help compute ranges from the AST:capture_argas its own entry inCode.Fragment.surround_context/2Config.read_config/1Enum.product_by/2andEnum.sum_by/2MissingApplicationsErrorexception to denote missing applicationsJSONmodule with encoding and decoding functionalityJSON.Encoderfor all Calendar types_), such ashttp_сервер. Previously allowed highly restrictive identifiers, which mixed Latin and other scripts, such as the japanese word for t-shirt,Tシャツ, now require the underscore as wellelem/2unquoteandunquote_splicingto catch bugs earlierERL_COMPILER_OPTIONS=deterministic. Keep in mind deterministic builds strip source and other compile time information, which may be relevant for programsList.ends_with?/2dbghandling ofif/2,with/1and of code blocksMacro.struct_info!/2to return struct information mirroringmod.__info__(:struct)Registry.lock/3for local lockingPartitionSupervisor.resize!/2to resize the number of partitions in a supervisor (up to the limit it was started with)Process.sleep/1@undefined_impl_descriptionto customize error message when an implementation is undefined__deriving__/1as optional macro callback toProtocol, no longer requiring empty implementationsExUnit
ExUnit.Casetest_pidas a tagIEx
IEx.configure(auto_reload: true)to automatically pick up modules recompiled from other operating system processes:dot_iexsupport toIEx.configure/1Mix
mix format --migrateto migrate from deprecated functionality:listenersconfiguration to listen to compilation events from the current and other operating system processes2. Bug fixes
Elixir
Code.string_to_quoted/2next_break_fitsrespectsline_lengthunquoteandunquote_splicingto provide better error reports instead of failing too late inside the compilerStream.transform/5URI.merge/2ExUnit
assert/1with=IEx
IEx.Helpers.recompile/0will reload modules changed by other operating system processesMix
--all-warningswhen files do not changerebar3in some casesprivdirectories.appfiles deterministic in releasesMix.Shellon Windows when outputting non UTF-8 characters3. Soft deprecations (no warnings emitted)
Elixir
color/3is deprecated in favor ofcolor_doc/3fold_doc/2is deprecated in favor offold/2unlessin favor ofif. Usemix format --migrateto automate the migrationMacro.struct!/2is deprecated in favor ofMacro.struct_info!/2__deriving__/3inside theAnyimplementation is deprecated, derive it inside the protocol definition itself4. Hard deprecations
EEx
<%#is deprecated in favor of<%!--or<% #c:EEx.handle_text/2is deprecated in favor ofc:EEx.handle_text/3Elixir
:warnings_as_errorsis deprecated viaCode.put_compiler_option/2. This must not affect developers, as the:warnings_as_errorsoption is managed by Mix tasks, and not directly used via theCodemoduleEnumerable.slice/1List.zip/1is deprecated in favor ofEnum.zip/1Module.eval_quoted/3in favor ofCode.eval_quoted/3Range.new/2Tuple.append/2is deprecated, useTuple.insert_at/3insteadMix
mix cmd --app APPin favor ofmix do --app APP:warnings_as_errorsconfiguration in:elixirc_optionsis deprecated. Instead pass the--warnings-as-errorsflag tomix compile. Alternatively, you might alias the task:aliases: [compile: "compile --warnings-as-errors"]:warnings_as_errorsconfiguration in:test_elixirc_optionsis deprecated. Instead pass the--warnings-as-errorsflag tomix test. Alternatively, you might alias the task:aliases: [test: "test --warnings-as-errors"]compilers/0in favor ofMix.Task.Compiler.compilers/0v1.17
The CHANGELOG for v1.17 releases can be found in the v1.17 branch.
v1.17.3Compare Source
1. Bug fixes
Elixir
IEx
recompileMix
--labeloption on stats and cyclesv1.17.2Compare Source
1. Bug fixes
Logger
:gen_statem'sformat_status/2returns non-tupleMix
:refRELEASE_MODEand set ERRORLEVEL on.batscriptsv1.17.1Compare Source
1. Enhancements
Mix
2. Bug fixes
EEx
Elixir
with'selsepatternsno_returnfunctionExUnit
--repeat-until-failurev1.17.0Compare Source
Official announcement: https://elixir-lang.org/blog/2024/06/12/elixir-v1-17-0-released/
1. Enhancements
Elixir
Access.find/1that mirrorsEnum.find/2Code.Fragment.container_cursor_to_quoted/2Date.shift/2to shift dates with duration and calendar-specific semanticsDateto accept years outside of-9999..9999rangeDateTime.shift/2to shift datetimes with duration and calendar-specific semanticsDurationdata typec:GenServer.format_status/1callbackKernel.get_in/1with safe nil-handling for access and structsKernel.is_non_struct_map/1guardKernel.to_timeout/1Keyword.intersect/2-3to mirror theMapAPIMacro.Env.define_alias/4,Macro.Env.define_import/4,Macro.Env.define_require/4,Macro.Env.expand_alias/4,Macro.Env.expand_import/5, andMacro.Env.expand_require/6to aid the implementation of language servers and embedded languagesNaiveDateTime.shift/2to shift naive datetimes with duration and calendar-specific semanticsProcess.set_label/1String.byte_slice/3to slice a string to a maximum number of bytes while keeping it UTF-8 encodeduse_stdio: falseinSystem.cmd/3andSystem.shell/2Time.shift/2to shift times with duration and calendar-specific semanticsExUnit
start_supervisedIEx
recompilewas called and the current working directory changedc/0as an alias tocontinue/0IEx.Pry.annotate_quoted/3to annotate a quoted expression with pry breakpointsLogger
:gen_statemreports using Elixir data structuresMix
:depthoption toMix.SCM.Git, thus supporting shallow clones of Git dependencies:optionalis used in combination with:in_umbrella--umbrella-onlytomix deps.treemix test --breakpointsthat sets up a breakpoint before each test that will runmix test --repeat-until-failureto rerun tests until a failure occursmix test --slowest-modulesto print slowest modules based on all of the tests they hold2. Bug fixes
Elixir
(a -> b)were not wrapped as part of the literal encoder..and...are handled at the AST levelquote bind_quoted: ...twice:lineproperty when:fileis given as option toquoteMacro.escape/2when passing a quote triplet without valid metaModule.get_attribute/3for persisted attributes which have not yet been written toIEx
Mix
3. Soft deprecations (no warnings emitted)
Elixir
c:GenServer.format_status/2callback to align with Erlang/OTP 25+Mix
mix profile.tprofmix profile.tprof4. Hard deprecations
Elixir
:alltoIO.read/2andIO.binread/2is deprecated, pass:eofinstead~cinsteadleft..rightwithout explicit steps inside patterns and guards is deprecated, writeleft..right//stepinstead10..1without an explicit step is deprecated, write10..1//-1insteadExUnit
register_test/4is deprecated in favor ofregister_test/6for performance reasonsv1.16.3Compare Source
1. Bug fixes
Elixir
--dbgflag in Elixir's CLIwhenSystem.cmd/3:undefinedfields are properly converted tonilwhen invoking Erlang's APILogger
Mix
v1.16.2Compare Source
1. Enhancements
Elixir
:defmoduletracing event on module definitionMix
Mix.install_project_dir/0Mix.install/2installationMix.SCM.delete/12. Bug fixes
Elixir
Path.relative_to/2dealt with "." as inputIEx
ExUnit
v1.16.1Compare Source
1. Bug fixes
Elixir
Code.quoted_to_algebra/2for operator with :do key as operandString.capitalize/1with a single codepointIEx
$HOMEis setMix
v1.16.0Compare Source
Official announcement: https://elixir-lang.org/blog/2023/12/22/elixir-v1-16-0-released/
1. Enhancements
EEx
Elixir
:emit_warningsforCode.string_to_quoted/2MismatchedDelimiterErrorfor handling mismatched delimiter exceptions\r\n:offsetoption toFile.stream!/2UndefinedFunctionErrorKernel.ParallelCompiler.pmap/2to compile multiple additional entries in parallelTrue/False/Nilare used as aliases and there is no such aliasMacro.compile_apply/4@nifsannotation from Erlang/OTP 25@dialyzerconfigurationString.replace_invalid/2:limitoption toTask.yield_many/2Logger
Logger.levels/0Mix
MIX_PROFILEto profile a list of comma separated tasks--sparseoption:applicationsand:extra_applicationsare used:detailswhen possiblelib/and one of them is changed--sparseoptioninclude/directory in releasesmix test test/foo_test.exs:13 test/bar_test.exs:272. Bug fixes
Elixir
Code.Fragment.surround_context/2when matching on->IO.binwrite/2on terminated device (mirroringIO.write/2)dbgmodule is a compile-time dependencyunquote/1and the function/macro itself is unusedElixir.in their definition@after_compilecallbacks to avoid deadlocksMacro.to_string/1for certain ASTsFile.cwd!/0inPath.expand/1andPath.absname/1Path.relative_to/2returns a relative path when the given argument does not share a common prefix withcwdExUnit
IEx
Mix
mix archive.installmix escript.install3. Soft deprecations (no warnings emitted)
Elixir
File.stream!(file, options, line_or_bytes)in favor of keeping the options as last argument, as inFile.stream!(file, line_or_bytes, options)Kernel.ParallelCompiler.async/1in favor ofKernel.ParallelCompiler.pmap/2Path.safe_relative_to/2in favor ofPath.safe_relative/2Mix
Mix.Task.Compiler.Diagnostic4. Hard deprecations
Elixir
Date.range/3with a negative step insteadEnum.slice/2, givefirst..last//1instead~R/.../is deprecated in favor of~r/.../. This is because~R/.../still allowed escape codes, which did not fit the definition of uppercase sigilsString.slice/2, givefirst..last//1insteadExUnit
format_time/2, useformat_times/1insteadMix
:leexto be added as a compiler to run theleexcompiler:yeccto be added as a compiler to run theyecccompilerv1.15.8Compare Source
1. Bug fixes
Elixir
--dbgflag in Elixir's CLISystem.cmd/3:undefinedfields are properly converted tonilwhen invoking Erlang's APILogger
Mix
v1.15.7Compare Source
1. Enhancements
Elixir
2. Bug fixes
EEx
Mix
Mix.Tasks.Format.formatter_for_file/2v1.15.6Compare Source
This release also includes fixes to the Windows installer.
1. Bug fixes
EEx
Elixir
*in bitstringsCode.quoted_to_algebra/2Mix
:extra_applicationsdeclare in umbrella projects are loadedv1.15.5Compare Source
1. Enhancements
IEx
2. Bug fixes
Elixir
Code.Fragment.surround_context/2for aliases and submodules of non-aliasesExUnit
IEx
Mix
blakeis always availablev1.15.4Compare Source
1. Bug fixes
Mix
v1.15.3Compare Source
1. Enhancements
Elixir
Mix
Mix.install/22. Bug fixes
Elixir
with_diagnosticspropagate warnings from inner Erlang passesIEx
--remshon Erlang/OTP 25 and earlierMix
__mix_recompile__?callbacks are properly invokedv1.15.2Compare Source
1. Bug fixes
IEx
erlang/otp (erlang)
v26.2.5: OTP 26.Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR has been generated by Mend Renovate.