Skip to content

Upgrading execa 8 to 9

Breaking8.0.1 → 9.6.1Platform1Deprecated2New10Changed3Fixed12Other4

Fetching 15 releases from GitHub…11 / 15
BreakingUpgrade verdict

A platform requirement change.

  • The package now correctly declares which Node.js versions it supports: 18.19.0 and up within 18.x, or 20.5.0 and newer.
  • A way of enabling message passing with a subprocess is being retired. Use the new ipc option instead.
  • The execaCommand helper is being retired in favor of writing commands as template strings.
3 items need code or config changes

Node.js requirement changed in 9.2.0: >=16.17 → ^18.19.0 || >=20.5.0.

Adds @sindresorhus/merge-streams ^4.0.0, figures ^6.1.0, is-plain-obj ^4.1.0, pretty-ms ^9.2.0, yoctocolors ^2.1.1.

Drops merge-stream, onetime.

Installs 22 packages in all (was 16).

Platform1
Fixes the engines.node field in package.json; supported Node.js version is ^18.19.0 or >=20.5.0.
engines.node
Deprecated2
Deprecates passing 'ipc' to the stdio option; use the ipc: true option instead. Removal is planned for the next major release.
stdioipc
Deprecates the execaCommand() method; use the template string syntax instead. Removal is planned for the next major release.
execaCommand()execa

Generated by DepDelta from published .d.ts files. Not mixed with prose notes.

  • removed: const $: Execa$
  • removed: function execa(file: string, arguments?: readonly string[], options?: Options): ExecaChildProcess
  • removed: function execa(file: string, arguments?: readonly string[], options?: Options<BufferEncodingOption>): ExecaChildProcess<Buffer>
  • removed: function execa(file: string, options?: Options): ExecaChildProcess
  • removed: function execa(file: string, options?: Options<BufferEncodingOption>): ExecaChildProcess<Buffer>
  • removed: function execaCommand(command: string, options?: Options): ExecaChildProcess
  • removed: function execaCommand(command: string, options?: Options<BufferEncodingOption>): ExecaChildProcess<Buffer>
  • removed: function execaCommandSync(command: string, options?: SyncOptions): ExecaSyncReturnValue
  • removed: function execaCommandSync(command: string, options?: SyncOptions<BufferEncodingOption>): ExecaSyncReturnValue<Buffer>
  • removed: function execaNode(scriptPath: string, arguments?: readonly string[], options?: NodeOptions): ExecaChildProcess
  • removed: function execaNode(scriptPath: string, arguments?: readonly string[], options?: NodeOptions<BufferEncodingOption>): ExecaChildProcess<Buffer>
  • removed: function execaNode(scriptPath: string, options?: NodeOptions): ExecaChildProcess
  • removed: function execaNode(scriptPath: string, options?: NodeOptions<BufferEncodingOption>): ExecaChildProcess<Buffer>
  • removed: function execaSync(file: string, arguments?: readonly string[], options?: SyncOptions): ExecaSyncReturnValue
  • removed: function execaSync(file: string, arguments?: readonly string[], options?: SyncOptions<BufferEncodingOption>): ExecaSyncReturnValue<Buffer>
  • removed: function execaSync(file: string, options?: SyncOptions): ExecaSyncReturnValue
  • removed: function execaSync(file: string, options?: SyncOptions<BufferEncodingOption>): ExecaSyncReturnValue<Buffer>
  • removed: type CommonOptions<EncodingType extends EncodingOption = DefaultEncodingOption> = { readonly cleanup?: boolean; readonly preferLocal?: boolean; readonly localDir?: string | URL; readonly execPath?: string; readonly buffer?: boolean; readonly…
  • removed: type ExecaChildProcess<StdoutStderrType extends StdoutStderrAll = string> = ChildProcess & ExecaChildPromise<StdoutStderrType> & Promise<ExecaReturnValue<StdoutStderrType>>
  • removed: type ExecaChildPromise<StdoutStderrType extends StdoutStderrAll> = { all?: ReadableStream; catch<ResultType = never>(onRejected?: (reason: ExecaError<StdoutStderrType>) => ResultType | PromiseLike<ResultType>): Promise<ExecaRe…
  • removed: type ExecaError<StdoutStderrType extends StdoutStderrAll = string> = { all?: StdoutStderrType; isCanceled: boolean } & ExecaSyncError<StdoutStderrType>
  • removed: type ExecaReturnBase<StdoutStderrType extends StdoutStderrAll> = { command: string; escapedCommand: string; exitCode: number; stdout: StdoutStderrType; stderr: StdoutStderrType; failed: boolean; timedOut: boolean; killed: bo…
  • removed: type ExecaReturnValue<StdoutStderrType extends StdoutStderrAll = string> = { all?: StdoutStderrType; isCanceled: boolean } & ExecaSyncReturnValue<StdoutStderrType>
  • removed: type ExecaSyncError<StdoutStderrType extends StdoutStderrAll = string> = { message: string; shortMessage: string; originalMessage?: string } & Error & ExecaReturnBase<StdoutStderrType>
  • removed: type ExecaSyncReturnValue<StdoutStderrType extends StdoutStderrAll = string> = {} & ExecaReturnBase<StdoutStderrType>
  • removed: type KillOptions = { forceKillAfterTimeout?: number | false }
  • removed: type NodeOptions<EncodingType extends EncodingOption = DefaultEncodingOption> = { readonly nodePath?: string; readonly nodeOptions?: string[] } & Options<EncodingType>
  • removed: type Options<EncodingType extends EncodingOption = DefaultEncodingOption> = { readonly input?: string | Buffer | ReadableStream; readonly inputFile?: string } & CommonOptions<EncodingType>
  • removed: type StdioOption = 'pipe' | 'overlapped' | 'ipc' | 'ignore' | 'inherit' | Stream | number | undefined
  • removed: type SyncOptions<EncodingType extends EncodingOption = DefaultEncodingOption> = { readonly input?: string | Buffer; readonly inputFile?: string } & CommonOptions<EncodingType>
  • added: export { $ } from './types/methods/script'
  • added: export { ExecaError } from './types/return/final-error'
  • added: export { ExecaMethod } from './types/methods/main-async'
  • added: export { ExecaNodeMethod } from './types/methods/node'
  • added: export { ExecaScriptMethod } from './types/methods/script'
  • added: export { ExecaScriptSyncMethod } from './types/methods/script'
  • added: export { ExecaSyncError } from './types/return/final-error'
  • added: export { ExecaSyncMethod } from './types/methods/main-sync'
  • added: export { Message } from './types/ipc'
  • added: export { Options } from './types/arguments/options'
  • added: export { Result } from './types/return/result'
  • added: export { ResultPromise } from './types/subprocess/subprocess'
  • added: export { StdinOption } from './types/stdio/type'
  • added: export { StdinSyncOption } from './types/stdio/type'
  • added: export { StdoutStderrOption } from './types/stdio/type'
  • added: export { StdoutStderrSyncOption } from './types/stdio/type'
  • added: export { Subprocess } from './types/subprocess/subprocess'
  • added: export { SyncOptions } from './types/arguments/options'
  • added: export { SyncResult } from './types/return/result'
  • added: export { SyncVerboseObject } from './types/verbose'
  • added: export { TemplateExpression } from './types/methods/template'
  • added: export { VerboseObject } from './types/verbose'
  • added: export { execa } from './types/methods/main-async'
  • added: export { execaCommand } from './types/methods/command'
  • added: export { execaCommandSync } from './types/methods/command'
  • added: export { execaNode } from './types/methods/node'
  • added: export { execaSync } from './types/methods/main-sync'
  • added: export { getCancelSignal } from './types/ipc'
  • added: export { getEachMessage } from './types/ipc'
  • added: export { getOneMessage } from './types/ipc'
  • added: export { parseCommandString } from './types/methods/command'
  • added: export { sendMessage } from './types/ipc'
  • added: type BinaryEncodingOption = BufferEncodingOption | 'hex' | 'base64' | 'base64url' | 'latin1' | 'ascii'
  • added: type BufferEncodingOption = 'buffer'
  • added: type EncodingOption = TextEncodingOption | BinaryEncodingOption | undefined
  • added: type FromOption = 'stdout' | 'stderr' | 'all' | FileDescriptorOption
  • added: type ToOption = 'stdin' | FileDescriptorOption
  • added: type CommonOptions<IsSync extends boolean = boolean> = { readonly preferLocal?: boolean; readonly localDir?: string | URL; readonly node?: boolean; readonly nodeOptions?: readonly string[]; readonly nodePath?: stri…
  • added: type Options = CommonOptions<false>
  • added: type StricterOptions<WideOptions extends CommonOptions, StrictOptions extends CommonOptions> = WideOptions extends StrictOptions ? WideOptions : StrictOptions
  • added: type SyncOptions = CommonOptions<true>
  • added: type FdGenericOption<OptionType> = OptionType | GenericOptionObject<OptionType>
  • added: type FdSpecificOption<GenericOption extends FdGenericOption<unknown>, FdNumber extends string> = GenericOption extends GenericOptionObject<unknown> ? FdSpecificObjectOption<GenericOption, FdNumber> : GenericOption
  • added: type DuplexOptions = ReadableOptions & WritableOptions
  • added: type ReadableOptions = { readonly from?: FromOption; readonly binary?: boolean; readonly preserveNewlines?: boolean }
  • added: type SubprocessAsyncIterable<BinaryOption extends boolean | undefined, EncodingOption extends Options['encoding']> = AsyncIterableIterator<EncodingOption extends BinaryEncodingOption ? Uint8Array : BinaryOption extends true ? Uint8Array : string>
  • added: type WritableOptions = { readonly to?: ToOption }
  • added: function getCancelSignal(): Promise<AbortSignal>
  • added: function getEachMessage(getEachMessageOptions?: GetEachMessageOptions): AsyncIterableIterator<Message>
  • added: function getOneMessage(getOneMessageOptions?: GetOneMessageOptions<Options['serialization']>): Promise<Message>
  • added: function sendMessage(message: Message, sendMessageOptions?: SendMessageOptions): Promise<void>
  • added: type HasIpc<OptionsType extends Options> = HasIpcOption<OptionsType['ipc'], 'ipcInput' extends keyof OptionsType ? OptionsType['ipcInput'] : undefined, 'gracefulCancel' extends keyof OptionsType ? Optio…
  • added: type IpcMethods<IpcEnabled extends boolean, Serialization extends Options['serialization']> = IpcEnabled extends true ? { sendMessage(message: Message<Serialization>, sendMessageOptions?: SendMessageOptions): Promise<void>; getOneMessage(getOneMessageOp…
  • added: type Message<Serialization extends Options['serialization'] = Options['serialization']> = Serialization extends 'json' ? JsonMessage : AdvancedMessage
  • added: const execaCommand: ExecaCommandMethod<{}>
  • added: const execaCommandSync: ExecaCommandSyncMethod<{}>
  • added: function parseCommandString(command: string): string[]
  • added: const execa: ExecaMethod<{}>
  • added: type ExecaMethod<OptionsType extends Options = Options> = ExecaBind<OptionsType> & ExecaTemplate<OptionsType> & ExecaArrayLong<OptionsType> & ExecaArrayShort<OptionsType>
  • added: const execaSync: ExecaSyncMethod<{}>
  • added: type ExecaSyncMethod<OptionsType extends SyncOptions = SyncOptions> = ExecaSyncBind<OptionsType> & ExecaSyncTemplate<OptionsType> & ExecaSyncArrayLong<OptionsType> & ExecaSyncArrayShort<OptionsType>
  • added: const execaNode: ExecaNodeMethod<{}>
  • added: type ExecaNodeMethod<OptionsType extends Options = Options> = ExecaNodeBind<OptionsType> & ExecaNodeTemplate<OptionsType> & ExecaNodeArrayLong<OptionsType> & ExecaNodeArrayShort<OptionsType>
  • added: const $: ExecaScriptMethod<{}>
  • added: type ExecaScriptMethod<OptionsType extends CommonOptions = CommonOptions> = ExecaScriptBind<OptionsType> & ExecaScriptTemplate<OptionsType> & ExecaScriptArrayLong<OptionsType> & ExecaScriptArrayShort<OptionsType> & { sync: ExecaScriptS…
  • added: type ExecaScriptSyncMethod<OptionsType extends CommonOptions = CommonOptions> = ExecaScriptSyncBind<OptionsType> & ExecaScriptSyncTemplate<OptionsType> & ExecaScriptSyncArrayLong<OptionsType> & ExecaScriptSyncArrayShort<OptionsType>
  • added: type SimpleTemplateString = readonly [TemplateStringsArray, string?]
  • added: type TemplateExpression = TemplateExpressionItem | readonly TemplateExpressionItem[]
  • added: type TemplateString = readonly [TemplateStringsArray, ...readonly TemplateExpression[]]
  • added: type PipableSubprocess = { pipe<OptionsType extends Options & PipeOptions = {}>(file: string | URL, arguments?: readonly string[], options?: OptionsType): Promise<Result<OptionsType>>…
  • added: class ExecaError<OptionsType extends Options = Options> extends CommonError<false, OptionsType>
  • added: class ExecaSyncError<OptionsType extends SyncOptions = SyncOptions> extends CommonError<true, OptionsType>
  • added: readonly property ExecaError.name: 'ExecaError'
  • added: readonly property ExecaSyncError.name: 'ExecaSyncError'
  • added: type ErrorProperties = 'name' | 'message' | 'stack' | 'cause' | 'shortMessage' | 'originalMessage' | 'code'
  • added: type IgnoresResultOutput<FdNumber extends string, OptionsType extends CommonOptions> = FdSpecificOption<OptionsType['buffer'], FdNumber> extends false ? true : IsInputFd<FdNumber, OptionsType> extends true ? true : IgnoresSubprocessOutput<FdNumbe…
  • added: type IgnoresSubprocessOutput<FdNumber extends string, OptionsType extends CommonOptions> = IgnoresOutput<FdNumber, FdStdioOption<FdNumber, OptionsType>>
  • added: abstract class CommonResult<IsSync extends boolean, OptionsType extends CommonOptions>
  • added: property CommonResult.all: ResultAll<OptionsType>
  • added: property CommonResult.cause?: unknown
  • added: property CommonResult.code?: string
  • added: property CommonResult.command: string
  • added: property CommonResult.cwd: string
  • added: property CommonResult.durationMs: number
  • added: property CommonResult.escapedCommand: string
  • added: property CommonResult.exitCode?: number
  • added: property CommonResult.failed: boolean
  • added: property CommonResult.ipcOutput: ResultIpcOutput<IsSync, OptionsType>
  • added: property CommonResult.isCanceled: boolean
  • added: property CommonResult.isForcefullyTerminated: boolean
  • added: property CommonResult.isGracefullyCanceled: boolean
  • added: property CommonResult.isMaxBuffer: boolean
  • added: property CommonResult.isTerminated: boolean
  • added: property CommonResult.message?: string
  • added: property CommonResult.originalMessage?: string
  • added: property CommonResult.pipedFrom: Unless<IsSync, Result[], []>
  • added: property CommonResult.shortMessage?: string
  • added: property CommonResult.signal?: keyof SignalConstants
  • added: property CommonResult.signalDescription?: string
  • added: property CommonResult.stack?: Error['stack']
  • added: property CommonResult.stderr: ResultStdioNotAll<'2', OptionsType>
  • added: property CommonResult.stdio: ResultStdioArray<OptionsType>
  • added: property CommonResult.stdout: ResultStdioNotAll<'1', OptionsType>
  • added: property CommonResult.timedOut: boolean
  • added: readonly property CommonResult.name?: Error['name']
  • added: type Result<OptionsType extends Options = Options> = SuccessResult<false, OptionsType>
  • added: type SuccessResult<IsSync extends boolean = boolean, OptionsType extends CommonOptions = CommonOptions> = InstanceType<typeof CommonResult<IsSync, OptionsType>> & OmitErrorIfReject<OptionsType['reject']>
  • added: type SyncResult<OptionsType extends SyncOptions = SyncOptions> = SuccessResult<true, OptionsType>
  • added: type ResultAll<OptionsType extends CommonOptions> = ResultAllProperty<OptionsType['all'], OptionsType>
  • added: type ResultIpcOutput<IsSync, OptionsType extends CommonOptions> = IsSync extends true ? [] : ResultIpcAsync<FdSpecificOption<OptionsType['buffer'], 'ipc'>, HasIpc<StricterOptions<OptionsType, Options>>, OptionsType['serializa…
  • added: type ResultStdioArray<OptionsType extends CommonOptions> = MapResultStdio<StdioOptionNormalizedArray<OptionsType>, OptionsType>
  • added: type ResultStdio<MainFdNumber extends string, ObjectFdNumber extends string, LinesFdNumber extends string, OptionsType extends CommonOptions> = ResultStdioProperty<ObjectFdNumber, LinesFdNumber, IgnoresResultOutput<MainFdNumber, OptionsType>, OptionsType>
  • added: type ResultStdioNotAll<FdNumber extends string, OptionsType extends CommonOptions> = ResultStdio<FdNumber, FdNumber, FdNumber, OptionsType>
  • added: type StdioOptionNormalizedArray<OptionsType extends CommonOptions> = StdioOptionNormalized<OptionsType['stdio']>
  • added: type IsInputFd<FdNumber extends string, OptionsType extends CommonOptions> = FdNumber extends '0' ? true : Intersects<StdioSingleOptionItems<FdStdioArrayOption<FdNumber, OptionsType>>, InputStdioOption>
  • added: type FdStdioArrayOption<FdNumber extends string, OptionsType extends CommonOptions> = FdStdioArrayOptionProperty<FdNumber, StdioOptionNormalizedArray<OptionsType>>
  • added: type FdStdioOption<FdNumber extends string, OptionsType extends CommonOptions> = FdStdioOptionProperty<FdNumber, OptionsType>
  • added: type InputStdioOption<IsSync extends boolean = boolean, IsExtra extends boolean = boolean, IsArray extends boolean = boolean> = 0 | Unless<And<IsSync, IsExtra>, Uint8Array | IterableObject<IsArray>> | Unless<And<IsSync, IsArray>, Readable & ProcessStdinFd> | Unless<IsSync, (AsyncIterabl…
  • added: type NoStreamStdioOption<FdNumber extends string> = 'ignore' | 'inherit' | 'ipc' | number | Readable | Writable | Unless<IsStandardStream<FdNumber>, undefined> | readonly [NoStreamStdioOption<FdNumber>]
  • added: type StandardStreams = readonly ['stdin', 'stdout', 'stderr']
  • added: type StdinOption = StdinOptionCommon<false, false>
  • added: type StdinOptionCommon<IsSync extends boolean = boolean, IsExtra extends boolean = boolean> = StdinSingleOption<IsSync, IsExtra, false> | ReadonlyArray<StdinSingleOption<IsSync, IsExtra, true>>
  • added: type StdinSyncOption = StdinOptionCommon<true, false>
  • added: type StdioOptionCommon<IsSync extends boolean = boolean> = StdinOptionCommon<IsSync> | StdoutStderrOptionCommon<IsSync>
  • added: type StdioOptionsArray<IsSync extends boolean = boolean> = readonly [StdinOptionCommon<IsSync, false>, StdoutStderrOptionCommon<IsSync, false>, StdoutStderrOptionCommon<IsSync, false>, ...ReadonlyArray<StdioExtraOption…
  • added: type StdioOptionsProperty<IsSync extends boolean = boolean> = SimpleStdioOption<IsSync, false, false> | StdioOptionsArray<IsSync>
  • added: type StdioSingleOptionItems<StdioOptionType> = StdioOptionType extends readonly StdioSingleOption[] ? StdioOptionType[number] : StdioOptionType
  • added: type StdoutStderrOption = StdoutStderrOptionCommon<false, false>
  • added: type StdoutStderrOptionCommon<IsSync extends boolean = boolean, IsExtra extends boolean = boolean> = StdoutStderrSingleOption<IsSync, IsExtra, false> | ReadonlyArray<StdoutStderrSingleOption<IsSync, IsExtra, true>>
  • added: type StdoutStderrSyncOption = StdoutStderrOptionCommon<true, false>
  • added: type SubprocessAll<OptionsType extends Options> = AllStream<AllIgnored<OptionsType['all'], OptionsType>>
  • added: type SubprocessStdioArray<OptionsType extends Options> = MapStdioStreams<StdioOptionNormalizedArray<OptionsType>, OptionsType>
  • added: type SubprocessStdioStream<FdNumber extends string, OptionsType extends Options> = SubprocessStream<FdNumber, IgnoresSubprocessOutput<FdNumber, OptionsType>, OptionsType>
  • added: type ResultPromise<OptionsType extends Options = Options> = Subprocess<OptionsType> & Promise<Result<OptionsType>>
  • added: type Subprocess<OptionsType extends Options = Options> = Omit<ChildProcess, keyof ExecaCustomSubprocess<OptionsType>> & ExecaCustomSubprocess<OptionsType>
  • added: type DuplexTransform = { readonly transform: Duplex } & TransformCommon
  • added: type GeneratorTransform<IsSync extends boolean> = (chunk: unknown) => | Unless<IsSync, AsyncGenerator<unknown, void, void>> | Generator<unknown, void, void>
  • added: type GeneratorTransformFull<IsSync extends boolean> = { readonly transform: GeneratorTransform<IsSync>; readonly final?: GeneratorFinal<IsSync>; readonly binary?: boolean; readonly preserveNewlines?: boolean } & T…
  • added: type TransformCommon = { readonly objectMode?: boolean }
  • added: type WebTransform = { readonly transform: TransformStream } & TransformCommon
  • added: type IsObjectFd<FdNumber extends string, OptionsType extends CommonOptions> = IsObjectStdioOption<FdStdioOption<FdNumber, OptionsType>>
  • added: type And<First extends boolean, Second extends boolean> = First extends true ? Second : false
  • added: type AndUnless<Condition extends boolean, ThenValue, ElseValue = unknown> = Condition extends true ? ElseValue : ThenValue
  • added: type Intersects<T, U> = true extends (T extends U ? true : false) ? true : false
  • added: type Not<Value extends boolean> = Value extends true ? false : true
  • added: type Or<First extends boolean, Second extends boolean> = First extends true ? true : Second
  • added: type Unless<Condition extends boolean, ThenValue, ElseValue = never> = Condition extends true ? ElseValue : ThenValue
  • added: type SyncVerboseObject = GenericVerboseObject & { options: SyncOptions; result?: SyncResult }
  • added: type VerboseObject = GenericVerboseObject & { options: Options; result?: Result }
  • added: type VerboseOption = FdGenericOption<| 'none' | 'short' | 'full' | VerboseFunction>