@@ -4,6 +4,91 @@ import {execa} from '../../index.js';
44const subprocess = execa ( 'unicorns' ) ;
55const bufferSubprocess = execa ( 'unicorns' , { encoding : 'buffer' , all : true } ) ;
66const hexSubprocess = execa ( 'unicorns' , { encoding : 'hex' , all : true } ) ;
7+ const objectTransform = {
8+ objectMode : true as const ,
9+ * transform ( ) {
10+ yield { value : 'unicorn' } ;
11+ } ,
12+ } ;
13+ const objectSubprocess = execa ( 'unicorns' , { all : true , stdout : objectTransform } ) ;
14+
15+ expectTypeOf ( objectSubprocess . iterable ( ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
16+ expectTypeOf ( objectSubprocess [ Symbol . asyncIterator ] ( ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
17+
18+ const wrappedObjectSubprocess = execa ( 'unicorns' , { stdout : { value : objectTransform } } ) ;
19+ expectTypeOf ( wrappedObjectSubprocess . iterable ( ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
20+ expectTypeOf ( wrappedObjectSubprocess [ Symbol . asyncIterator ] ( ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
21+ const wrappedObjectResult = await wrappedObjectSubprocess ;
22+ expectTypeOf ( wrappedObjectResult . stdout ) . toBe < unknown [ ] > ( ) ;
23+
24+ const wrappedArraySubprocess = execa ( 'unicorns' , { stdout : [ 'pipe' , { value : objectTransform , input : false } ] as const } ) ;
25+ expectTypeOf ( wrappedArraySubprocess . iterable ( { binary : true } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
26+ const wrappedArrayResult = await wrappedArraySubprocess ;
27+ expectTypeOf ( wrappedArrayResult . stdout ) . toBe < string | unknown [ ] > ( ) ;
28+
29+ const wrappedStderrSubprocess = execa ( 'unicorns' , { all : true , stderr : { value : objectTransform } } ) ;
30+ expectTypeOf ( wrappedStderrSubprocess . iterable ( ) ) . toBe < AsyncIterableIterator < string > > ( ) ;
31+ expectTypeOf ( wrappedStderrSubprocess . iterable ( { from : 'stderr' } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
32+ expectTypeOf ( wrappedStderrSubprocess . iterable ( { from : 'all' } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
33+ const wrappedStderrResult = await wrappedStderrSubprocess ;
34+ expectTypeOf ( wrappedStderrResult . stderr ) . toBe < unknown [ ] > ( ) ;
35+
36+ const wrappedFdSubprocess = execa ( 'unicorns' , { stdio : [ 'pipe' , 'pipe' , 'pipe' , { value : objectTransform , input : false } ] as const } ) ;
37+ expectTypeOf ( wrappedFdSubprocess . iterable ( { from : 'fd3' } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
38+ const wrappedFdResult = await wrappedFdSubprocess ;
39+ expectTypeOf ( wrappedFdResult . stdio [ 3 ] ) . toBe < unknown [ ] > ( ) ;
40+
41+ const wrappedTextSubprocess = execa ( 'unicorns' , { stdout : { value : 'pipe' } } ) ;
42+ expectTypeOf ( wrappedTextSubprocess . iterable ( ) ) . toBe < AsyncIterableIterator < string > > ( ) ;
43+ const wrappedTextResult = await wrappedTextSubprocess ;
44+ expectTypeOf ( wrappedTextResult . stdout ) . toBe < string > ( ) ;
45+
46+ expectTypeOf ( objectSubprocess . iterable ( { from : 'stdout' } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
47+ expectTypeOf ( objectSubprocess . iterable ( { from : 'fd1' } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
48+ expectTypeOf ( objectSubprocess . iterable ( { binary : true } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
49+ expectTypeOf ( objectSubprocess . iterable ( { binary : false , preserveNewlines : true } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
50+ expectTypeOf ( objectSubprocess . iterable ( { from : 'stderr' } ) ) . toBe < AsyncIterableIterator < string > > ( ) ;
51+ expectTypeOf ( objectSubprocess . iterable ( { from : 'fd2' , binary : true } ) ) . toBe < AsyncIterableIterator < Uint8Array > > ( ) ;
52+ expectTypeOf ( objectSubprocess . iterable ( { from : 'all' } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
53+ expectTypeOf ( objectSubprocess . iterable ( { from : 'all' , binary : true } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
54+ expectTypeOf ( objectSubprocess . iterable ( { } as { from ?: 'stdout' | 'stderr' ; binary ?: boolean } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
55+
56+ const objectStderrSubprocess = execa ( 'unicorns' , { all : true , stderr : objectTransform } ) ;
57+ expectTypeOf ( objectStderrSubprocess . iterable ( ) ) . toBe < AsyncIterableIterator < string > > ( ) ;
58+ expectTypeOf ( objectStderrSubprocess [ Symbol . asyncIterator ] ( ) ) . toBe < AsyncIterableIterator < string > > ( ) ;
59+ expectTypeOf ( objectStderrSubprocess . iterable ( { from : 'stderr' } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
60+ expectTypeOf ( objectStderrSubprocess . iterable ( { from : 'fd2' } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
61+ expectTypeOf ( objectStderrSubprocess . iterable ( { from : 'all' } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
62+
63+ const objectFdSubprocess = execa ( 'unicorns' , { stdio : [ 'pipe' , 'pipe' , 'pipe' , objectTransform ] as const } ) ;
64+ expectTypeOf ( objectFdSubprocess . iterable ( ) ) . toBe < AsyncIterableIterator < string > > ( ) ;
65+ expectTypeOf ( objectFdSubprocess . iterable ( { from : 'fd3' } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
66+ expectTypeOf ( objectFdSubprocess . iterable ( { from : 'fd3' , binary : true } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
67+ expectTypeOf ( objectFdSubprocess . iterable ( { from : 'fd3' as `fd${number } `} ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
68+ expectTypeOf ( objectFdSubprocess . iterable ( { from : 'fd3' as `fd${number } `, binary : true } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
69+
70+ const objectBufferSubprocess = execa ( 'unicorns' , { encoding : 'buffer' , stdout : objectTransform } ) ;
71+ const objectHexSubprocess = execa ( 'unicorns' , { encoding : 'hex' , stdout : objectTransform } ) ;
72+ expectTypeOf ( objectBufferSubprocess . iterable ( ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
73+ expectTypeOf ( objectBufferSubprocess [ Symbol . asyncIterator ] ( ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
74+ expectTypeOf ( objectBufferSubprocess . iterable ( { binary : false } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
75+ expectTypeOf ( objectBufferSubprocess . iterable ( { from : 'stderr' } ) ) . toBe < AsyncIterableIterator < Uint8Array > > ( ) ;
76+ expectTypeOf ( objectHexSubprocess . iterable ( { binary : true } ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
77+
78+ const dynamicObjectSubprocess = execa ( 'unicorns' , { stdout : { ...objectTransform , objectMode : true as boolean } } ) ;
79+ expectTypeOf ( dynamicObjectSubprocess . iterable ( ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
80+
81+ const unionObjectSubprocess = execa ( 'unicorns' , { } as { stdout : typeof objectTransform } | { stdout : 'pipe' } ) ;
82+ expectTypeOf ( unionObjectSubprocess . iterable ( ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
83+
84+ const unionDefaultSubprocess = execa ( 'unicorns' , { } as { } | { stdout : typeof objectTransform } ) ;
85+ expectTypeOf ( unionDefaultSubprocess . iterable ( ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
86+
87+ const objectPipe = subprocess . pipe ( 'unicorns' , { stdout : objectTransform } ) ;
88+ expectTypeOf ( objectPipe . iterable ( ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
89+ expectTypeOf ( objectPipe [ Symbol . asyncIterator ] ( ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
90+ expectTypeOf ( subprocess . pipe ( objectSubprocess ) . iterable ( ) ) . toBe < AsyncIterableIterator < unknown > > ( ) ;
91+ expectTypeOf ( subprocess . pipe ( objectSubprocess ) . iterable ( { from : 'stderr' } ) ) . toBe < AsyncIterableIterator < string > > ( ) ;
792
893const asyncIteration = async ( ) => {
994 for await ( const line of subprocess ) {
0 commit comments