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:
8.x
->9.x
Release Notes
sindresorhus/execa (execa)
v9.3.1
Compare Source
v9.3.0
Compare Source
Features
verbose
option can now be a function to customize logging. (#1130)v9.2.0
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
'ipc'
to thestdio
option has been deprecated. It will be removed in the next major release. Instead, theipc: true
option 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
gracefulCancel
option andgetCancelSignal()
method to terminate a subprocess gracefully.error.isGracefullyCanceled
was also added. (#1109)error.isForcefullyTerminated
. It istrue
when the subprocess was terminated by theforceKillAfterDelay
option. (#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.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)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)verbose: 'full'
option now logs every IPC message sent by the subprocess, for debugging. More info here and there. (#1063)Types
ExecaMethod
,ExecaNodeMethod
andExecaScriptMethod
,ExecaSyncMethod
andExecaScriptSyncMethod
types. (#1066)Message
type, for IPC. (#1059)forceKillAfterDelay: true
option. (#1116)Bug fixes
{file}
to both thestdin
and thestdout
orstderr
options. (#1058)cancelSignal
option. (#1108)engines.node
field inpackage.json
. Supported Node.js version is^18.19.0
or>=20.5.0
. (by @iiroj) (#1101)v9.1.0
Compare Source
Features (types)
TemplateExpression
type. (#1049)v9.0.2
Compare Source
Bug fixes (types)
--lib dom
for TypeScript users (#1043, #1044)reject
option (#1046)v9.0.1
Compare Source
Bug fixes (types)
3bdab60
6cc519b
fee011d
v9.0.0
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
Minimal supported Node.js version is now
18.19.0
. (834e372
)When the
encoding
option is'buffer'
, the output (result.stdout
,result.stderr
,result.all
) is now anUint8Array
instead of aBuffer
. For more information, see this blog post. (by @younggglcy) (#586)encoding
option. (#586, #928)subprocess.pipeStdout()
,subprocess.pipeStderr()
andsubprocess.pipeAll()
has been removed. Instead, a{file: './path'}
object should be passed to thestdout
orstderr
option. (#752)subprocess.pipeStdout()
,subprocess.pipeStderr()
andsubprocess.pipeAll()
has been removed. Instead, the stream should be passed to thestdout
orstderr
option. 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. Thefrom
piping option can specify'stdout'
(the default value),'stderr'
or'all'
. (#757)signal
option tocancelSignal
. (#880)error.killed
toerror.isTerminated
. (#625)subprocess.cancel()
has been removed. Please use eithersubprocess.kill()
or thecancelSignal
option instead. (#711)forceKillAfterTimeout
option toforceKillAfterDelay
. Also, it is now passed toexeca()
instead ofsubprocess.kill()
. (#714, #723)verbose
option is now a string enum instead of a boolean.false
has been renamed to'none'
andtrue
has been renamed to'short'
. (#884)execPath
option has been renamed tonodePath
. It is now a noop unless thenode
option istrue
. Also, it now works even if thepreferLocal
option isfalse
. (#812, #815)serialization
option 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.stderr
orsubprocess.all
is manually piped, the.pipe()
call must now happen as soon assubprocess
is created. Otherwise, the output at the beginning of the subprocess might be missing. (#658, #747)subprocess.kill()
and to thekillSignal
option 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()
, theinputFile
option, thenodePath
option or theshell
option. (#630, #631, #632, #635)Text lines
lines
option. (#741, #929, #931, #948, #951, #957)Piping multiple subprocesses
subprocess.pipe()
without callingexeca()
. A template string can also be used. (#840, #859, #864)result.pipedFrom
anderror.pipedFrom
. (#834)stdin
/stdout
/stderr
by using thefrom
andto
piping options. (#757, #834, #903, #920)unpipeSignal
piping option. (#834, #852)Input/output
stdin
,stdout
andstderr
options. 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
,stdout
orstderr
option. (#610, #614, #621, #671, #1004)stdin
,stdout
orstderr
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)Uint8Array
to theinput
orstdin
option. (834e372
, #670, #1029)stdin
option. (#604, #944)stdin
,input
andinputFile
options. (#666)result.stdout
andresult.stderr
by usingresult.stdio
. (#676)stdout
andstderr
with the following options:verbose
,lines
,stripFinalNewline
,maxBuffer
,buffer
. (#966, #970, #971, #972, #973, #974)Streams
ReadableStream
orWritableStream
to thestdin
,stdout
orstderr
option. (#615, #619, #645)Duplex
, Node.jsTransform
or webTransformStream
to thestdin
,stdout
orstderr
option. (#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)verbose
option. (#883, #893, #894)Debugging
result.durationMs
anderror.durationMs
. (#896)result.cwd
. Previously onlyerror.cwd
was available. Also,result.cwd
anderror.cwd
are now normalized to absolute file paths. (#803)result.escapedCommand
in a terminal is now safe. (#875)Errors
ExecaError
andExecaSyncError
classes are now exported. (#911)error.cause
. (#911)maxBuffer
option by usingerror.isMaxBuffer
. (#963)error.message
:error.stdout
anderror.stderr
are now interleaved if theall
option istrue
. Additional file descriptors are now printed too. Also, the formatting has been improved. (#676, #705, #991, #992)error.message
are now escaped, so they don't result in visual bugs when printed in a terminal. (#879)error
event is emitted onsubprocess.stdout
orsubprocess.stderr
. (#814)Termination
subprocess.kill()
. (#811, #836, #1023)forceKillAfterDelay
andkillSignal
options now apply to terminations due not only tosubprocess.kill()
but also to thecancelSignal
,timeout
,maxBuffer
andcleanup
options. (#714, #728)Node.js files
nodePath
andnodeOptions
options with any method, as opposed to onlyexecaNode()
, by passing thenode: true
option. (#804, #812, #815)execaNode()
or thenode: true
option, 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
all
andbuffer: false
options withexecaSync()
, as opposed to onlyexeca()
. (#953, #956)$.s
alias for$.sync
. (#594)Inter-process communication
ipc: true
option, as opposed to the more verbosestdio: ['pipe', 'pipe', 'pipe', 'ipc']
option. (#794)Input validation
input
,timeout
,cwd
,detached
,cancelSignal
andencoding
options. (#668, #715, #803, #928, #940)execa()
and the other exported methods. (#838, #873, #899)subprocess.kill()
and to thekillSignal
option. (#1025)Bug fixes
undefined
values as options. This now uses the option's default value. (#712)inputFile
option points to a missing file. (#609)buffer
option isfalse
andsubprocess.stdout
errors. (#729)'overlapped'
to thestdout
orstderr
option withexecaSync()
. (#949)'error'
events are emitted on the subprocess. (#790)reject: false
option not being used when the subprocess fails to spawn. (#734)error.isTerminated
. (#625, #719)true
when the subprocess fails due to thetimeout
option.true
when callingprocess.kill(subprocess.pid)
, except on Windows.false
when using non-terminating signals such assubprocess.kill(0)
.error.signal
anderror.signalDescription
when the subprocess is terminated by thecancelSignal
option. (#724)execa()
call might be modified by anotherexeca()
call. (#796, #806, #911)verbose
option printing the command in the wrong order. (#600)maxBuffer
andencoding
options. For example, when usingencoding: 'hex'
,maxBuffer
will now be measured in hexadecimal characters. Also,error.stdout
,error.stderr
anderror.all
were previously not applying themaxBuffer
option. (#652, #696)maxBuffer
option not truncatingresult.stdout
andresult.stderr
when usingexecaSync()
. (#960)buffer: true
option (its default value) and iterating oversubprocess.stdout
orsubprocess.stderr
. (#908)subprocess.all
stream incorrectly being in object mode. (#717)subprocess.stdout
andsubprocess.stderr
are properly flushed when the subprocess fails. (#647)timeout
option. (#727)Types (breaking changes)
CommonOptions
type toOptions
(forexeca()
) andSyncOptions
(forexecaSync()
). (#678, #682)NodeOptions
type toOptions
. (#804)KillOptions
type toOptions
. (#714)Options
andSyncOptions
types. (#681)ExecaChildProcess
type toResultPromise
. This is the type ofexeca()
's return value, which is both aPromise<Result>
and aSubprocess
. (#897, #1007, #1009)ExecaChildPromise
type toSubprocess
. This is the type of the subprocess instance. (#897, #1007, #1009)ExecaReturnBase
,ExecaReturnValue
andExecaSyncReturnValue
type toResult
(forexeca()
) andSyncResult
(forexecaSync()
). (#897, #1009)stdin
option fromStdioOption
toStdinOption
(forexeca()
) andStdinSyncOption
(forexecaSync()
). (#942, #1008, #1012)stdout
andstderr
options fromStdioOption
toStdoutStderrOption
(forexeca()
) andStdoutStderrSyncOption
(forexecaSync()
). (#942, #1008, #1012)stdio
option fromStdioOption[]
toOptions['stdio']
(forexeca()
) andSyncOptions['stdio']
(forexecaSync()
). (#942, #1008)Result
,SyncResult
,ExecaError
,ExecaSyncError
,ResultPromise
andSubprocess
types is now anOptions
type. (#681)Types (improvements)
stdin
,stdout
,stderr
andstdio
options. (#634, #943, #952)result.stdout
,result.stderr
,result.all
,subprocess.stdout
,subprocess.stderr
andsubprocess.all
. (#681, #684, #687, #689, #833)execaSync()
. (#678, #939)reject
option. (#688)error.signal
and thekillSignal
option. (#1025)error.exitCode
, since that field is sometimesundefined
. (#680)Documentation
Configuration
📅 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 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 was generated by Mend Renovate. View the repository job log.