execa
Advanced tools
Comparing version 9.0.1 to 9.0.2
{ | ||
"name": "execa", | ||
"version": "9.0.1", | ||
"version": "9.0.2", | ||
"description": "Process execution for humans", | ||
@@ -23,3 +23,3 @@ "license": "MIT", | ||
"scripts": { | ||
"test": "xo && c8 ava && tsd" | ||
"test": "xo && c8 ava && tsd && tsc" | ||
}, | ||
@@ -76,2 +76,3 @@ "files": [ | ||
"tsd": "^0.31.0", | ||
"typescript": "^5.4.5", | ||
"which": "^4.0.0", | ||
@@ -78,0 +79,0 @@ "xo": "^0.58.0" |
import type {FromOption} from './fd-options.js'; | ||
// Options which can be fd-specific like `{verbose: {stdout: 'none', stderr: 'full'}}` | ||
export type FdGenericOption<OptionType = unknown> = OptionType | GenericOptionObject<OptionType>; | ||
export type FdGenericOption<OptionType> = OptionType | GenericOptionObject<OptionType>; | ||
type GenericOptionObject<OptionType = unknown> = { | ||
type GenericOptionObject<OptionType> = { | ||
readonly [FdName in FromOption]?: OptionType | ||
@@ -12,5 +12,5 @@ }; | ||
export type FdSpecificOption< | ||
GenericOption extends FdGenericOption, | ||
GenericOption extends FdGenericOption<unknown>, | ||
FdNumber extends string, | ||
> = GenericOption extends GenericOptionObject | ||
> = GenericOption extends GenericOptionObject<unknown> | ||
? FdSpecificObjectOption<GenericOption, FdNumber> | ||
@@ -20,3 +20,3 @@ : GenericOption; | ||
type FdSpecificObjectOption< | ||
GenericOption extends GenericOptionObject, | ||
GenericOption extends GenericOptionObject<unknown>, | ||
FdNumber extends string, | ||
@@ -23,0 +23,0 @@ > = keyof GenericOption extends FromOption |
@@ -1,10 +0,12 @@ | ||
import type {CommonResultInstance} from '../return/result.js'; | ||
import type {Result, SyncResult} from '../return/result.js'; | ||
// Values allowed inside `...${...}...` template syntax | ||
export type TemplateExpression = | ||
type TemplateExpressionItem = | ||
| string | ||
| number | ||
| CommonResultInstance | ||
| ReadonlyArray<string | number | CommonResultInstance>; | ||
| Result | ||
| SyncResult; | ||
export type TemplateExpression = TemplateExpressionItem | readonly TemplateExpressionItem[]; | ||
// `...${...}...` template syntax | ||
@@ -11,0 +13,0 @@ export type TemplateString = readonly [TemplateStringsArray, ...readonly TemplateExpression[]]; |
@@ -5,12 +5,18 @@ import type {CommonOptions, Options, SyncOptions} from '../arguments/options.js'; | ||
declare abstract class CommonError< | ||
IsSync extends boolean = boolean, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
IsSync extends boolean, | ||
OptionsType extends CommonOptions, | ||
> extends CommonResult<IsSync, OptionsType> { | ||
message: NonNullable<CommonResult['message']>; | ||
shortMessage: NonNullable<CommonResult['shortMessage']>; | ||
originalMessage: NonNullable<CommonResult['originalMessage']>; | ||
readonly name: NonNullable<CommonResult['name']>; | ||
stack: NonNullable<CommonResult['stack']>; | ||
message: CommonErrorProperty<IsSync, OptionsType, 'message'>; | ||
shortMessage: CommonErrorProperty<IsSync, OptionsType, 'shortMessage'>; | ||
originalMessage: CommonErrorProperty<IsSync, OptionsType, 'originalMessage'>; | ||
readonly name: CommonErrorProperty<IsSync, OptionsType, 'name'>; | ||
stack: CommonErrorProperty<IsSync, OptionsType, 'stack'>; | ||
} | ||
type CommonErrorProperty< | ||
IsSync extends boolean, | ||
OptionsType extends CommonOptions, | ||
PropertyName extends keyof CommonResult<IsSync, OptionsType>, | ||
> = NonNullable<CommonResult<IsSync, OptionsType>[PropertyName]>; | ||
// `result.*` defined only on failure, i.e. on `error.*` | ||
@@ -17,0 +23,0 @@ export type ErrorProperties = |
@@ -10,3 +10,3 @@ import type {NoStreamStdioOption, StdioOptionCommon} from '../stdio/type.js'; | ||
FdNumber extends string, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
OptionsType extends CommonOptions, | ||
> = FdSpecificOption<OptionsType['buffer'], FdNumber> extends false | ||
@@ -21,3 +21,3 @@ ? true | ||
FdNumber extends string, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
OptionsType extends CommonOptions, | ||
> = IgnoresOutput<FdNumber, FdStdioOption<FdNumber, OptionsType>>; | ||
@@ -24,0 +24,0 @@ |
@@ -8,8 +8,8 @@ import type {IsObjectFd} from '../transform/object-mode.js'; | ||
// `result.all` | ||
export type ResultAll<OptionsType extends CommonOptions = CommonOptions> = | ||
export type ResultAll<OptionsType extends CommonOptions> = | ||
ResultAllProperty<OptionsType['all'], OptionsType>; | ||
type ResultAllProperty< | ||
AllOption extends CommonOptions['all'] = CommonOptions['all'], | ||
OptionsType extends CommonOptions = CommonOptions, | ||
AllOption extends CommonOptions['all'], | ||
OptionsType extends CommonOptions, | ||
> = AllOption extends true | ||
@@ -24,9 +24,9 @@ ? ResultStdio< | ||
type AllMainFd<OptionsType extends CommonOptions = CommonOptions> = | ||
type AllMainFd<OptionsType extends CommonOptions> = | ||
IgnoresResultOutput<'1', OptionsType> extends true ? '2' : '1'; | ||
type AllObjectFd<OptionsType extends CommonOptions = CommonOptions> = | ||
type AllObjectFd<OptionsType extends CommonOptions> = | ||
IsObjectFd<'1', OptionsType> extends true ? '1' : '2'; | ||
type AllLinesFd<OptionsType extends CommonOptions = CommonOptions> = | ||
type AllLinesFd<OptionsType extends CommonOptions> = | ||
FdSpecificOption<OptionsType['lines'], '1'> extends true ? '1' : '2'; |
@@ -7,3 +7,3 @@ import type {StdioOptionsArray} from '../stdio/type.js'; | ||
// `result.stdio` | ||
export type ResultStdioArray<OptionsType extends CommonOptions = CommonOptions> = | ||
export type ResultStdioArray<OptionsType extends CommonOptions> = | ||
MapResultStdio<StdioOptionNormalizedArray<OptionsType>, OptionsType>; | ||
@@ -13,3 +13,3 @@ | ||
StdioOptionsArrayType extends StdioOptionsArray, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
OptionsType extends CommonOptions, | ||
> = { | ||
@@ -16,0 +16,0 @@ -readonly [FdNumber in keyof StdioOptionsArrayType]: ResultStdioNotAll< |
@@ -10,3 +10,3 @@ import type {BufferEncodingOption, BinaryEncodingOption} from '../arguments/encoding-option.js'; | ||
FdNumber extends string, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
OptionsType extends CommonOptions, | ||
> = ResultStdio<FdNumber, FdNumber, FdNumber, OptionsType>; | ||
@@ -19,3 +19,3 @@ | ||
LinesFdNumber extends string, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
OptionsType extends CommonOptions, | ||
> = ResultStdioProperty< | ||
@@ -32,3 +32,3 @@ ObjectFdNumber, | ||
StreamOutputIgnored extends boolean, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
OptionsType extends CommonOptions, | ||
> = StreamOutputIgnored extends true | ||
@@ -35,0 +35,0 @@ ? undefined |
@@ -10,4 +10,4 @@ import type {SignalConstants} from 'node:os'; | ||
export declare abstract class CommonResult< | ||
IsSync extends boolean = boolean, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
IsSync extends boolean, | ||
OptionsType extends CommonOptions, | ||
> { | ||
@@ -165,15 +165,10 @@ /** | ||
export type CommonResultInstance< | ||
IsSync extends boolean = boolean, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
> = InstanceType<typeof CommonResult<IsSync, OptionsType>>; | ||
type SuccessResult< | ||
IsSync extends boolean = boolean, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
> = CommonResultInstance<IsSync, OptionsType> & OmitErrorIfReject<OptionsType['reject']>; | ||
IsSync extends boolean, | ||
OptionsType extends CommonOptions, | ||
> = InstanceType<typeof CommonResult<IsSync, OptionsType>> & OmitErrorIfReject<OptionsType['reject']>; | ||
type OmitErrorIfReject<RejectOption extends CommonOptions['reject']> = RejectOption extends false | ||
? {} | ||
: {[ErrorProperty in ErrorProperties]: never}; | ||
type OmitErrorIfReject<RejectOption extends CommonOptions['reject']> = { | ||
[ErrorProperty in ErrorProperties]: RejectOption extends false ? unknown : never | ||
}; | ||
@@ -180,0 +175,0 @@ /** |
@@ -5,5 +5,5 @@ import type {CommonOptions} from '../arguments/options.js'; | ||
// `options.stdio`, normalized as an array | ||
export type StdioOptionNormalizedArray<OptionsType extends CommonOptions = CommonOptions> = StdioOptionNormalized<OptionsType['stdio']>; | ||
export type StdioOptionNormalizedArray<OptionsType extends CommonOptions> = StdioOptionNormalized<OptionsType['stdio']>; | ||
type StdioOptionNormalized<StdioOption extends CommonOptions['stdio'] = CommonOptions['stdio']> = StdioOption extends StdioOptionsArray | ||
type StdioOptionNormalized<StdioOption extends CommonOptions['stdio']> = StdioOption extends StdioOptionsArray | ||
? StdioOption | ||
@@ -10,0 +10,0 @@ : StdioOption extends StdinOptionCommon |
@@ -9,5 +9,5 @@ import type {CommonOptions} from '../arguments/options.js'; | ||
FdNumber extends string, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
OptionsType extends CommonOptions, | ||
> = FdNumber extends '0' | ||
? true | ||
: Intersects<StdioSingleOptionItems<FdStdioArrayOption<FdNumber, OptionsType>>, InputStdioOption>; |
@@ -13,3 +13,3 @@ import type {CommonOptions} from '../arguments/options.js'; | ||
FdNumber extends string, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
OptionsType extends CommonOptions, | ||
> = Extract<FdStdioOptionProperty<FdNumber, OptionsType>, StdioOptionCommon>; | ||
@@ -19,3 +19,3 @@ | ||
FdNumber extends string, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
OptionsType extends CommonOptions, | ||
> = string extends FdNumber ? StdioOptionCommon | ||
@@ -33,3 +33,3 @@ : FdNumber extends keyof StandardStreams | ||
FdNumber extends string, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
OptionsType extends CommonOptions, | ||
> = Extract<FdStdioArrayOptionProperty<FdNumber, StdioOptionNormalizedArray<OptionsType>>, StdioOptionCommon>; | ||
@@ -45,5 +45,5 @@ | ||
? StdioOptionsType[FdNumber] | ||
: StdioOptionNormalizedArray extends StdioOptionsType | ||
: StdioOptionNormalizedArray<CommonOptions> extends StdioOptionsType | ||
? StdioOptionsType[number] | ||
: undefined | ||
: undefined; |
import type {Readable, Writable} from 'node:stream'; | ||
import type {ReadableStream, WritableStream, TransformStream} from 'node:stream/web'; | ||
import type { | ||
@@ -92,5 +93,5 @@ Not, | ||
type StdinSingleOption< | ||
IsSync extends boolean = boolean, | ||
IsExtra extends boolean = boolean, | ||
IsArray extends boolean = boolean, | ||
IsSync extends boolean, | ||
IsExtra extends boolean, | ||
IsArray extends boolean, | ||
> = | ||
@@ -115,5 +116,5 @@ | CommonStdioOption<IsSync, IsExtra, IsArray> | ||
type StdoutStderrSingleOption< | ||
IsSync extends boolean = boolean, | ||
IsExtra extends boolean = boolean, | ||
IsArray extends boolean = boolean, | ||
IsSync extends boolean, | ||
IsExtra extends boolean, | ||
IsArray extends boolean, | ||
> = | ||
@@ -137,3 +138,3 @@ | CommonStdioOption<IsSync, IsExtra, IsArray> | ||
// `options.stdio[3+]` | ||
type StdioExtraOptionCommon<IsSync extends boolean = boolean> = | ||
type StdioExtraOptionCommon<IsSync extends boolean> = | ||
| StdinOptionCommon<IsSync, true> | ||
@@ -140,0 +141,0 @@ | StdoutStderrOptionCommon<IsSync, true>; |
@@ -6,20 +6,13 @@ import type {Readable} from 'node:stream'; | ||
// `subprocess.all` | ||
export type SubprocessAll<OptionsType extends Options = Options> = AllStream<OptionsType['all'], OptionsType>; | ||
export type SubprocessAll<OptionsType extends Options> = AllStream<AllIgnored<OptionsType['all'], OptionsType>>; | ||
type AllStream< | ||
AllOption extends Options['all'] = Options['all'], | ||
OptionsType extends Options = Options, | ||
type AllStream<IsIgnored> = IsIgnored extends true ? undefined : Readable; | ||
type AllIgnored< | ||
AllOption extends Options['all'], | ||
OptionsType extends Options, | ||
> = AllOption extends true | ||
? AllIfStdout<IgnoresSubprocessOutput<'1', OptionsType>, OptionsType> | ||
: undefined; | ||
type AllIfStdout< | ||
StdoutResultIgnored extends boolean, | ||
OptionsType extends Options = Options, | ||
> = StdoutResultIgnored extends true | ||
? AllIfStderr<IgnoresSubprocessOutput<'2', OptionsType>> | ||
: Readable; | ||
type AllIfStderr<StderrResultIgnored extends boolean> = StderrResultIgnored extends true | ||
? undefined | ||
: Readable; | ||
? IgnoresSubprocessOutput<'1', OptionsType> extends true | ||
? IgnoresSubprocessOutput<'2', OptionsType> | ||
: false | ||
: true; |
@@ -7,3 +7,3 @@ import type {StdioOptionNormalizedArray} from '../stdio/array.js'; | ||
// `subprocess.stdio` | ||
export type SubprocessStdioArray<OptionsType extends Options = Options> = MapStdioStreams<StdioOptionNormalizedArray<OptionsType>, OptionsType>; | ||
export type SubprocessStdioArray<OptionsType extends Options> = MapStdioStreams<StdioOptionNormalizedArray<OptionsType>, OptionsType>; | ||
@@ -13,3 +13,3 @@ // We cannot use mapped types because it must be compatible with Node.js `ChildProcess["stdio"]` which uses a tuple with exactly 5 items | ||
StdioOptionsArrayType extends StdioOptionsArray, | ||
OptionsType extends Options = Options, | ||
OptionsType extends Options, | ||
> = [ | ||
@@ -16,0 +16,0 @@ SubprocessStdioStream<'0', OptionsType>, |
@@ -9,3 +9,3 @@ import type {Readable, Writable} from 'node:stream'; | ||
FdNumber extends string, | ||
OptionsType extends Options = Options, | ||
OptionsType extends Options, | ||
> = SubprocessStream<FdNumber, IgnoresSubprocessOutput<FdNumber, OptionsType>, OptionsType>; | ||
@@ -16,3 +16,3 @@ | ||
StreamResultIgnored extends boolean, | ||
OptionsType extends Options = Options, | ||
OptionsType extends Options, | ||
> = StreamResultIgnored extends true | ||
@@ -19,0 +19,0 @@ ? null |
@@ -24,3 +24,3 @@ import type {ChildProcess} from 'node:child_process'; | ||
type ExecaCustomSubprocess<OptionsType extends Options = Options> = { | ||
type ExecaCustomSubprocess<OptionsType extends Options> = { | ||
/** | ||
@@ -27,0 +27,0 @@ Process identifier ([PID](https://en.wikipedia.org/wiki/Process_identifier)). |
@@ -0,1 +1,2 @@ | ||
import type {TransformStream} from 'node:stream/web'; | ||
import type {Duplex} from 'node:stream'; | ||
@@ -14,2 +15,9 @@ import type {Unless} from '../utils.js'; | ||
export type TransformCommon = { | ||
/** | ||
If `true`, allow `transformOptions.transform` and `transformOptions.final` to return any type, not just `string` or `Uint8Array`. | ||
*/ | ||
readonly objectMode?: boolean; | ||
}; | ||
/** | ||
@@ -40,14 +48,8 @@ A transform or an array of transforms can be passed to the `stdin`, `stdout`, `stderr` or `stdio` option. | ||
readonly preserveNewlines?: boolean; | ||
} & TransformCommon; | ||
/** | ||
If `true`, allow `transformOptions.transform` and `transformOptions.final` to return any type, not just `string` or `Uint8Array`. | ||
*/ | ||
readonly objectMode?: boolean; | ||
}; | ||
// `options.std*: Duplex` | ||
export type DuplexTransform = { | ||
readonly transform: Duplex; | ||
readonly objectMode?: boolean; | ||
}; | ||
} & TransformCommon; | ||
@@ -57,3 +59,2 @@ // `options.std*: TransformStream` | ||
readonly transform: TransformStream; | ||
readonly objectMode?: boolean; | ||
}; | ||
} & TransformCommon; |
import type {StdioSingleOption, StdioOptionCommon, StdioSingleOptionItems} from '../stdio/type.js'; | ||
import type {FdStdioOption} from '../stdio/option.js'; | ||
import type {CommonOptions} from '../arguments/options.js'; | ||
import type {DuplexTransform} from './normalize.js'; | ||
import type {DuplexTransform, TransformCommon} from './normalize.js'; | ||
@@ -10,3 +10,3 @@ // Whether a file descriptor is in object mode | ||
FdNumber extends string, | ||
OptionsType extends CommonOptions = CommonOptions, | ||
OptionsType extends CommonOptions, | ||
> = IsObjectStdioOption<FdStdioOption<FdNumber, OptionsType>>; | ||
@@ -16,3 +16,3 @@ | ||
type IsObjectStdioSingleOption<StdioSingleOptionType extends StdioSingleOption> = StdioSingleOptionType extends {objectMode?: boolean} | ||
type IsObjectStdioSingleOption<StdioSingleOptionType extends StdioSingleOption> = StdioSingleOptionType extends TransformCommon | ||
? BooleanObjectMode<StdioSingleOptionType['objectMode']> | ||
@@ -19,0 +19,0 @@ : StdioSingleOptionType extends DuplexTransform |
310789
129
13
6140