Upgrading execa 8 to 9
Breaking8.0.1 → 9.6.1Platform1Deprecated2New10Changed3Fixed12Other4
Fetching 15 releases from GitHub…11 / 15
BreakingUpgrade verdict
A platform requirement change.
In plain terms
- 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.
Must act 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).
What you must change
Platform1
Fixes the
engines.node field in package.json; supported Node.js version is ^18.19.0 or >=20.5.0.engines.nodeDeprecations to plan for
Deprecated2
Deprecates passing 'ipc' to the stdio option; use the ipc: true option instead. Removal is planned for the next major release.
stdioipcDeprecates the execaCommand() method; use the template string syntax instead. Removal is planned for the next major release.
execaCommand()execaAPI changes
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>