sindresorhus/execa (execa)
Compare Source
Compare Source
Compare Source
Bug fixes
Compare Source
Bug fixes
Compare Source
Features
await execa({stdout: {file: 'output.txt', append: true}})`npm run build`;
Compare Source
Bug fixes
- Fix using
process.execPath with Deno. Thanks @w3cj! (#1160)
Compare Source
Features
- We've created a separate package called nano-spawn. It is similar to Execa but with fewer features, for a much smaller package size. More info.
Bug fixes
Documentation
Compare Source
Thanks @holic and @jimhigson for your contributions!
Bugs
Bugs (types)
- Fix type of the
env option. It was currently failing for Remix or Next.js users. (by @holic) (#1141)
Documentation
Compare Source
Features
Compare Source
This release includes a new set of methods to exchange messages between the current process and a Node.js subprocess, also known as "IPC". This allows passing and returning almost any message type to/from a Node.js subprocess. Also, debugging IPC is now much easier.
Moreover, a new gracefulCancel option has also been added to terminate a subprocess gracefully.
For a deeper dive-in, please check and share the release post!
Thanks @iiroj for your contribution, @SimonSiefke and @adymorz for reporting the bugs fixed in this release, and @karlhorky for improving the documentation!
Deprecations
- Passing
'ipc' to the stdio option has been deprecated. It will be removed in the next major release. Instead, the ipc: true option should be used. (#1056)
- await execa('npm', ['run', 'build'], {stdio: ['pipe', 'pipe', 'pipe', 'ipc']});
+ await execa('npm', ['run', 'build'], {ipc: true});
- import {execaCommand} from 'execa';
+ import {execa} from 'execa';
- await execaCommand('npm run build');
+ await execa`npm run build`;
const taskName = 'build';
- await execaCommand(`npm run ${taskName}`);
+ await execa`npm run ${taskName}`;
const commandArguments = ['run', 'task with space'];
await execa`npm ${commandArguments}`;
If the file and/or multiple arguments are supplied as a single string, parseCommandString(command) can split that string into an array. More info. (#1054)
- import {execaCommand} from 'execa';
+ import {execa, parseCommandString} from 'execa';
const commandString = 'npm run task';
- await execaCommand(commandString);
+ const commandArray = parseCommandString(commandString); // ['npm', 'run', 'task']
+ await execa`${commandArray}`;
// Or alternatively:
const [file, ...commandArguments] = commandArray;
await execa(file, commandArguments);
Features
- Add
gracefulCancel option and getCancelSignal() method to terminate a subprocess gracefully. error.isGracefullyCanceled was also added. (#1109)
- Add
error.isForcefullyTerminated. It is true when the subprocess was terminated by the forceKillAfterDelay option. (#1111)
- New methods to simplify exchanging messages between the current process and the subprocess. More info. (#1059, #1061, #1076, #1077, #1079, #1082, #1083, #1086, #1087, #1088, #1089, #1090, #1091, #1092, #1094, #1095, #1098, #1104, #1107)
- The
ipcInput option sends an IPC message from the current process to the subprocess as it starts. This enables passing almost any input type to a Node.js subprocess. (#1068)
- The
result.ipcOutput array contains all the IPC messages sent by the subprocess to the current process. This enables returning almost any output type from a Node.js subprocess. (#1067, #1071, #1075)
- The error message now contains every IPC message sent by the subprocess. (#1067)
- The
verbose: 'full' option now logs every IPC message sent by the subprocess, for debugging. More info here and there. (#1063)
Types
Bug fixes
Compare Source
Features (types)
Compare Source
Bug fixes (types)
- Do not require using
--lib dom for TypeScript users (#1043, #1044)
- Fix type of the
reject option (#1046)
Compare Source
Bug fixes (types)
Compare Source
This major release brings many important features including:
Please check the release post for a high-level overview! For the full list of breaking changes, features and bug fixes, please read below.
Thanks @younggglcy, @koshic, @am0o0 and @codesmith-emmy for your help!
One of the maintainers @ehmicky is looking for a remote full-time position. Specialized in Node.js back-ends and CLIs, he led Netlify Build, Plugins and Configuration for 2.5 years. Feel free to contact him on his website or on LinkedIn!
Breaking changes (not types)
const {stdout} = await execa('node', ['file.js'], {encoding: 'buffer'});
console.log(stdout); // This is now an Uint8Array
- await execa('node', ['file.js'], {encoding: null});
+ await execa('node', ['file.js'], {encoding: 'buffer'});
- await execa('node', ['file.js'], {encoding: 'utf-8'});
+ await execa('node', ['file.js'], {encoding: 'utf8'});
- await execa('node', ['file.js'], {encoding: 'UTF8'});
+ await execa('node', ['file.js'], {encoding: 'utf8'});
- await execa('node', ['file.js'], {encoding: 'utf-16le'});
+ await execa('node', ['file.js'], {encoding: 'utf16le'});
- await execa('node', ['file.js'], {encoding: 'ucs2'});
+ await execa('node', ['file.js'], {encoding: 'utf16le'});
- await execa('node', ['file.js'], {encoding: 'ucs-2'});
+ await execa('node', ['file.js'], {encoding: 'utf16le'});
- await execa('node', ['file.js'], {encoding: 'binary'});
+ await execa('node', ['file.js'], {encoding: 'latin1'});
- Passing a file path to
subprocess.pipeStdout(), subprocess.pipeStderr() and subprocess.pipeAll() has been removed. Instead, a {file: './path'} object should be passed to the stdout or stderr option. (#752)
- await execa('node', ['file.js']).pipeStdout('output.txt');
+ await execa('node', ['file.js'], {stdout: {file: 'output.txt'}});
- await execa('node', ['file.js']).pipeStderr('output.txt');
+ await execa('node', ['file.js'], {stderr: {file: 'output.txt'}});
- await execa('node', ['file.js']).pipeAll('output.txt');
+ await execa('node', ['file.js'], {
+ stdout: {file: 'output.txt'},
+ stderr: {file: 'output.txt'},
+});
- await execa('node', ['file.js']).pipeStdout(stream);
+ await execa('node', ['file.js'], {stdout: ['pipe', stream]});
- await execa('node', ['file.js']).pipeStderr(stream);
+ await execa('node', ['file.js'], {stderr: ['pipe', stream]});
- await execa('node', ['file.js']).pipeAll(stream);
+ await execa('node', ['file.js'], {
+ stdout: ['pipe', stream],
+ stderr: ['pipe', stream],
+});
- The
subprocess.pipeStdout(), subprocess.pipeStderr() and subprocess.pipeAll() methods have been renamed to subprocess.pipe(). The command and its arguments can be passed to subprocess.pipe() directly, without calling execa() a second time. The from piping option can specify 'stdout' (the default value), 'stderr' or 'all'. (#757)
- await execa('node', ['file.js']).pipeStdout(execa('node', ['other.js']));
+ await execa('node', ['file.js']).pipe('node', ['other.js']);
- await execa('node', ['file.js']).pipeStderr(execa('node', ['other.js']));
+ await execa('node', ['file.js']).pipe('node', ['other.js'], {from: 'stderr'});
- await execa('node', ['file.js']).pipeAll(execa('node', ['other.js']));
+ await execa('node', ['file.js']).pipe('node', ['other.js'], {from: 'all'});
- await execa('node', ['file.js'], {signal: abortController.signal});
+ await execa('node', ['file.js'], {cancelSignal: abortController.signal});
try {
await execa('node', ['file.js']);
} catch (error) {
- if (error.killed) {
+ if (error.isTerminated) {
// ...
}
}
- subprocess.cancel();
+ subprocess.kill();
- const subprocess = execa('node', ['file.js']);
- subprocess.kill('SIGTERM', {forceKillAfterTimeout: 1000});
+ const subprocess = execa('node', ['file.js'], {forceKillAfterDelay: 1000});
+ subprocess.kill('SIGTERM');
- The
verbose option is now a string enum instead of a boolean. false has been renamed to 'none' and true has been renamed to 'short'. (#884)
- await execa('node', ['file.js'], {verbose: false});
+ await execa('node', ['file.js'], {verbose: 'none'});
- await execa('node', ['file.js'], {verbose: true});
+ await execa('node', ['file.js'], {verbose: 'short'});
- The
execPath option has been renamed to nodePath. It is now a noop unless the node option is true. Also, it now works even if the preferLocal option is false. (#812, #815)
- await execa('node', ['file.js'], {execPath: './path/to/node'});
+ await execa('node', ['file.js'], {nodePath: './path/to/node'});
- subprocess.send({example: true, getExample() {}});
+ subprocess.send({example: true});
const subprocess = execa('node', ['file.js']);
- setTimeout(() => {
subprocess.stdout.pipe(process.stdout);
- }, 0);
- const subprocess = execa('node', ['file.js'], {killSignal: 'sigterm'});
+ const subprocess = execa('node', ['file.js'], {killSignal: 'SIGTERM'});
- subprocess.kill('sigterm');
+ subprocess.kill('SIGTERM');
Features
Execution
- Use the template string syntax with any method (including
execa()), as opposed to only $. Conversely, $ can now use the regular array syntax. (#933)
- A command's template string can span multiple lines. (#843)
- Share options between multiple calls, or set global options, by using
execa(options). (#933, #965)
- Pass a file URL (as opposed to a file path string) to
execa(), execaNode(), the inputFile option, the nodePath option or the shell option. (#630, #631, #632, #635)
Text lines
Piping multiple subprocesses
Input/output
- Pass an array with multiple values to the
stdin, stdout and stderr options. For example, stdout: ['inherit', 'pipe'] prints the output to the terminal while still returning it as result.stdout. (#643, #765, #941, #954)
- Redirect the input/output from/to a file by passing a
{file: './path'} object or a file URL to the stdin, stdout or stderr option. (#610, #614, #621, #671, #1004)
- Transform or filter the input/output by passing a generator function to the
stdin, stdout or stderr option. (#693, #697, #698, #699, #709, #736, #737, #739, #740, #746, #748, #755, #756, #780, #783, #867, #915, #916, #917, #919, #924, #926, #945, #969)
- Provide some binary input by passing an
Uint8Array to the input or stdin option. (834e372, #670, #1029)
- Provide some progressive input by passing a sync/async iterable to the
stdin option. (#604, #944)
- Provide multiple inputs by combining the
stdin, input and inputFile options. (#666)
- Return other file descriptors than
result.stdout and result.stderr by using result.stdio. (#676)
- Specify different values for
stdout and stderr with the following options: verbose, lines, stripFinalNewline, maxBuffer, buffer. (#966, #970, #971, #972, #973, #974)
Streams
Verbose mode
Debugging
Errors
Termination
Node.js files
Synchronous execution
Inter-process communication
Input validation
- Improved the validation of the
input, timeout, cwd, detached, cancelSignal and encoding options. (#668, #715, #803, #928, #940)
- Improved the validation of the arguments passed to
execa() and the other exported methods. (#838, #873, #899)
- Improved the validation of signals passed to
subprocess.kill() and to the killSignal option. (#1025)
Bug fixes
Breaking changes (types)
import type {Options} from 'execa';
- const options: CommonOptions = {timeout: 1000};
+ const options: Options = {timeout: 1000};
import type {Options} from 'execa';
- const options: NodeOptions = {nodeOptions: ['--no-warnings']};
+ const options: Options = {nodeOptions: ['--no-warnings']};
import type {Options} from 'execa';
- const options: KillOptions = {forceKillAfterTimeout: 1000};
+ const options: Options = {forceKillAfterDelay: 1000};
import type {Options} from 'execa';
- const options: Options<'utf8'> = {encoding: 'utf8'};
+ const options: Options = {encoding: 'utf8'};
import type {ResultPromise, Result} from 'execa';
- const promiseOrSubprocess: ExecaChildProcess = execa('node', ['file.js']);
+ const promiseOrSubprocess: ResultPromise = execa('node', ['file.js']);
const result: Result = await promiseOrSubprocess;
promiseOrSubprocess.kill();
Uh oh!
There was an error while loading. Please reload this page.
This PR contains the following updates:
^5.0.0->^9.0.0Release Notes
sindresorhus/execa (execa)
v9.6.0Compare Source
d49104av9.5.3Compare Source
1ac5b91v9.5.2Compare Source
Bug fixes
v9.5.1Compare Source
Bug fixes
verbosemode on Windows (thanks @IIIMADDINIII). (#1167)v9.5.0Compare Source
Features
stdoutorstderrto a file, allow appending instead of overwriting. (#1166)v9.4.1Compare Source
Bug fixes
process.execPathwith Deno. Thanks @w3cj! (#1160)v9.4.0Compare Source
Features
Bug fixes
execaNode()and thepreferLocaloption modify thePATHenvironment variable. This release includes some minor improvements to ensure that environment variable remains small (sindresorhus/npm-run-path#20). It also handles a few related edge cases better (sindresorhus/npm-run-path#21).Documentation
v9.3.1Compare Source
Thanks @holic and @jimhigson for your contributions!
Bugs
Bugs (types)
envoption. It was currently failing for Remix or Next.js users. (by @holic) (#1141)Documentation
v9.3.0Compare Source
Features
verboseoption can now be a function to customize logging. (#1130)v9.2.0Compare Source
This release includes a new set of methods to exchange messages between the current process and a Node.js subprocess, also known as "IPC". This allows passing and returning almost any message type to/from a Node.js subprocess. Also, debugging IPC is now much easier.
Moreover, a new
gracefulCanceloption has also been added to terminate a subprocess gracefully.For a deeper dive-in, please check and share the release post!
Thanks @iiroj for your contribution, @SimonSiefke and @adymorz for reporting the bugs fixed in this release, and @karlhorky for improving the documentation!
Deprecations
'ipc'to thestdiooption has been deprecated. It will be removed in the next major release. Instead, theipc: trueoption should be used. (#1056)execaCommand()method has been deprecated. It will be removed in the next major release. If most cases, the template string syntax should be used instead.If the file and/or multiple arguments are supplied as a single string, parseCommandString(command) can split that string into an array. More info. (#1054)
Features
gracefulCanceloption andgetCancelSignal()method to terminate a subprocess gracefully.error.isGracefullyCanceledwas also added. (#1109)error.isForcefullyTerminated. It istruewhen the subprocess was terminated by theforceKillAfterDelayoption. (#1111)subprocess.sendMessage(message)and receives them withsubprocess.getOneMessage().subprocess.getEachMessage()listens to multiple messages.sendMessage(message),getOneMessage()andgetEachMessage()instead. Those are the same methods, but imported directly from the'execa'module.ipcInputoption sends an IPC message from the current process to the subprocess as it starts. This enables passing almost any input type to a Node.js subprocess. (#1068)result.ipcOutputarray contains all the IPC messages sent by the subprocess to the current process. This enables returning almost any output type from a Node.js subprocess. (#1067, #1071, #1075)verbose: 'full'option now logs every IPC message sent by the subprocess, for debugging. More info here and there. (#1063)Types
ExecaMethod,ExecaNodeMethodandExecaScriptMethod,ExecaSyncMethodandExecaScriptSyncMethodtypes. (#1066)Messagetype, for IPC. (#1059)forceKillAfterDelay: trueoption. (#1116)Bug fixes
{file}to both thestdinand thestdoutorstderroptions. (#1058)cancelSignaloption. (#1108)engines.nodefield inpackage.json. Supported Node.js version is^18.19.0or>=20.5.0. (by @iiroj) (#1101)v9.1.0Compare Source
Features (types)
TemplateExpressiontype. (#1049)v9.0.2Compare Source
Bug fixes (types)
--lib domfor TypeScript users (#1043, #1044)rejectoption (#1046)v9.0.1Compare Source
Bug fixes (types)
3bdab606cc519bfee011dv9.0.0Compare Source
This major release brings many important features including:
Please check the release post for a high-level overview! For the full list of breaking changes, features and bug fixes, please read below.
Thanks @younggglcy, @koshic, @am0o0 and @codesmith-emmy for your help!
One of the maintainers @ehmicky is looking for a remote full-time position. Specialized in Node.js back-ends and CLIs, he led Netlify Build, Plugins and Configuration for 2.5 years. Feel free to contact him on his website or on LinkedIn!
Breaking changes (not types)
Dropped support for Node.js version
<18.19.0and20.0.0 - 20.4.0. (834e372)When the
encodingoption is'buffer', the output (result.stdout,result.stderr,result.all) is now anUint8Arrayinstead of aBuffer. For more information, see this blog post. (by @younggglcy) (#586)encodingoption. (#586, #928)subprocess.pipeStdout(),subprocess.pipeStderr()andsubprocess.pipeAll()has been removed. Instead, a{file: './path'}object should be passed to thestdoutorstderroption. (#752)subprocess.pipeStdout(),subprocess.pipeStderr()andsubprocess.pipeAll()has been removed. Instead, the stream should be passed to thestdoutorstderroption. If the stream does not have a file descriptor,['pipe', stream]should be passed instead. (#752)subprocess.pipeStdout(),subprocess.pipeStderr()andsubprocess.pipeAll()methods have been renamed tosubprocess.pipe(). The command and its arguments can be passed tosubprocess.pipe()directly, without callingexeca()a second time. Thefrompiping option can specify'stdout'(the default value),'stderr'or'all'. (#757)signaloption tocancelSignal. (#880)error.killedtoerror.isTerminated. (#625)try { await execa('node', ['file.js']); } catch (error) { - if (error.killed) { + if (error.isTerminated) { // ... } }subprocess.cancel()has been removed. Please use eithersubprocess.kill()or thecancelSignaloption instead. (#711)forceKillAfterTimeoutoption toforceKillAfterDelay. Also, it is now passed toexeca()instead ofsubprocess.kill(). (#714, #723)verboseoption is now a string enum instead of a boolean.falsehas been renamed to'none'andtruehas been renamed to'short'. (#884)execPathoption has been renamed tonodePath. It is now a noop unless thenodeoption istrue. Also, it now works even if thepreferLocaloption isfalse. (#812, #815)serializationoption is now'advanced'instead of'json'. In particular, when callingsubprocess.send(object)with an object that contains functions or symbols, those were previously silently removed. Now this will throw an exception. (#905)subprocess.stdout,subprocess.stderrorsubprocess.allis manually piped, the.pipe()call must now happen as soon assubprocessis created. Otherwise, the output at the beginning of the subprocess might be missing. (#658, #747)const subprocess = execa('node', ['file.js']); - setTimeout(() => { subprocess.stdout.pipe(process.stdout); - }, 0);subprocess.kill()and to thekillSignaloption cannot be lowercase anymore. (#1025)Features
Execution
execa()), as opposed to only$. Conversely,$can now use the regular array syntax. (#933)execa(options). (#933, #965)execa(),execaNode(), theinputFileoption, thenodePathoption or theshelloption. (#630, #631, #632, #635)Text lines
linesoption. (#741, #929, #931, #948, #951, #957)Piping multiple subprocesses
subprocess.pipe()without callingexeca(). A template string can also be used. (#840, #859, #864)result.pipedFromanderror.pipedFrom. (#834)stdin/stdout/stderrby using thefromandtopiping options. (#757, #834, #903, #920)unpipeSignalpiping option. (#834, #852)Input/output
stdin,stdoutandstderroptions. For example,stdout: ['inherit', 'pipe']prints the output to the terminal while still returning it asresult.stdout. (#643, #765, #941, #954){file: './path'}object or a file URL to thestdin,stdoutorstderroption. (#610, #614, #621, #671, #1004)stdin,stdoutorstderroption. (#693, #697, #698, #699, #709, #736, #737, #739, #740, #746, #748, #755, #756, #780, #783, #867, #915, #916, #917, #919, #924, #926, #945, #969)Uint8Arrayto theinputorstdinoption. (834e372, #670, #1029)stdinoption. (#604, #944)stdin,inputandinputFileoptions. (#666)result.stdoutandresult.stderrby usingresult.stdio. (#676)stdoutandstderrwith the following options:verbose,lines,stripFinalNewline,maxBuffer,buffer. (#966, #970, #971, #972, #973, #974)Streams
ReadableStreamorWritableStreamto thestdin,stdoutorstderroption. (#615, #619, #645)Duplex, Node.jsTransformor webTransformStreamto thestdin,stdoutorstderroption. (#937, #938)subprocess.readable(),subprocess.writable()orsubprocess.duplex(). (#912, #922, #958)Verbose mode
verbose: 'short'orverbose: 'full'option. (#887, #890)verbose: 'full'option. (#884, #950, #962, #990)verboseoption. (#883, #893, #894)Debugging
result.durationMsanderror.durationMs. (#896)result.cwd. Previously onlyerror.cwdwas available. Also,result.cwdanderror.cwdare now normalized to absolute file paths. (#803)result.escapedCommandin a terminal is now safe. (#875)Errors
ExecaErrorandExecaSyncErrorclasses are now exported. (#911)error.cause. (#911)maxBufferoption by usingerror.isMaxBuffer. (#963)error.message:error.stdoutanderror.stderrare now interleaved if thealloption istrue. Additional file descriptors are now printed too. Also, the formatting has been improved. (#676, #705, #991, #992)error.messageare now escaped, so they don't result in visual bugs when printed in a terminal. (#879)errorevent is emitted onsubprocess.stdoutorsubprocess.stderr. (#814)Termination
subprocess.kill(). (#811, #836, #1023)forceKillAfterDelayandkillSignaloptions now apply to terminations due not only tosubprocess.kill()but also to thecancelSignal,timeout,maxBufferandcleanupoptions. (#714, #728)Node.js files
nodePathandnodeOptionsoptions with any method, as opposed to onlyexecaNode(), by passing thenode: trueoption. (#804, #812, #815)execaNode()or thenode: trueoption, the current Node.js version is now inherited deeply. If the subprocess spawns other subprocesses, they will all use the same Node.js version. (#812, #815, #1011)Synchronous execution
allandbuffer: falseoptions withexecaSync(), as opposed to onlyexeca(). (#953, #956)$.salias for$.sync. (#594)Inter-process communication
ipc: trueoption, as opposed to the more verbosestdio: ['pipe', 'pipe', 'pipe', 'ipc']option. (#794)Input validation
input,timeout,cwd,detached,cancelSignalandencodingoptions. (#668, #715, #803, #928, #940)execa()and the other exported methods. (#838, #873, #899)subprocess.kill()and to thekillSignaloption. (#1025)Bug fixes
undefinedvalues as options. This now uses the option's default value. (#712)inputFileoption points to a missing file. (#609)bufferoption isfalseandsubprocess.stdouterrors. (#729)'overlapped'to thestdoutorstderroption withexecaSync(). (#949)'error'events are emitted on the subprocess. (#790)reject: falseoption not being used when the subprocess fails to spawn. (#734)error.isTerminated. (#625, #719)truewhen the subprocess fails due to thetimeoutoption.truewhen callingprocess.kill(subprocess.pid), except on Windows.falsewhen using non-terminating signals such assubprocess.kill(0).error.signalanderror.signalDescriptionwhen the subprocess is terminated by thecancelSignaloption. (#724)execa()call might be modified by anotherexeca()call. (#796, #806, #911)verboseoption printing the command in the wrong order. (#600)maxBufferandencodingoptions. For example, when usingencoding: 'hex',maxBufferwill now be measured in hexadecimal characters. Also,error.stdout,error.stderranderror.allwere previously not applying themaxBufferoption. (#652, #696)maxBufferoption not truncatingresult.stdoutandresult.stderrwhen usingexecaSync(). (#960)buffer: trueoption (its default value) and iterating oversubprocess.stdoutorsubprocess.stderr. (#908)subprocess.allstream incorrectly being in object mode. (#717)subprocess.stdoutandsubprocess.stderrare properly flushed when the subprocess fails. (#647)timeoutoption. (#727)Breaking changes (types)
The minimum supported TypeScript version is now
5.1.6.Renamed
CommonOptionstype toOptions(forexeca()) andSyncOptions(forexecaSync()). (#678, #682)import type {Options} from 'execa'; - const options: CommonOptions = {timeout: 1000}; + const options: Options = {timeout: 1000};NodeOptionstype toOptions. (#804)import type {Options} from 'execa'; - const options: NodeOptions = {nodeOptions: ['--no-warnings']}; + const options: Options = {nodeOptions: ['--no-warnings']};KillOptionstype toOptions. (#714)import type {Options} from 'execa'; - const options: KillOptions = {forceKillAfterTimeout: 1000}; + const options: Options = {forceKillAfterDelay: 1000};OptionsandSyncOptionstypes. (#681)import type {Options} from 'execa'; - const options: Options<'utf8'> = {encoding: 'utf8'}; + const options: Options = {encoding: 'utf8'};ExecaChildProcesstype toResultPromise. This is the type ofexeca()'s return value, which is both aPromise<Result>and aSubprocess. (#897, #1007, #1009)import type {ResultPromise, Result} from 'execa'; - const promiseOrSubprocess: ExecaChildProcess = execa('node', ['file.js']); + const promiseOrSubprocess: ResultPromise = execa('node', ['file.js']); const result: Result = await promiseOrSubprocess; promiseOrSubprocess.kill();ExecaChildPromisetype toSubprocess. This is the type of the subprocess instance. (#897, #1007, [#1009](https://redirect.github.com/sindresoConfiguration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.