@@ -111,23 +111,11 @@ const genericClientCommandRunners = {
111111 pauseMs : flags . pauseMs ,
112112 pattern : flags . pattern ,
113113 } ) ,
114- pan : ( { client, positionals, flags } ) =>
115- client . interactions . pan ( {
116- ...buildSelectionOptions ( flags ) ,
117- x : Number ( positionals [ 0 ] ) ,
118- y : Number ( positionals [ 1 ] ) ,
119- dx : Number ( positionals [ 2 ] ) ,
120- dy : Number ( positionals [ 3 ] ) ,
121- durationMs : optionalNumber ( positionals [ 4 ] ) ,
122- } ) ,
123- fling : ( { client, positionals, flags } ) =>
124- client . interactions . fling ( {
125- ...buildSelectionOptions ( flags ) ,
126- direction : readGestureDirection ( positionals [ 0 ] , 'fling' ) ,
127- x : Number ( positionals [ 1 ] ) ,
128- y : Number ( positionals [ 2 ] ) ,
129- distance : optionalNumber ( positionals [ 3 ] ) ,
130- durationMs : optionalNumber ( positionals [ 4 ] ) ,
114+ gesture : ( { client, positionals, flags } ) =>
115+ runGestureCommand ( {
116+ client,
117+ positionals,
118+ flags,
131119 } ) ,
132120 focus : ( { client, positionals, flags } ) =>
133121 client . interactions . focus ( {
@@ -153,21 +141,6 @@ const genericClientCommandRunners = {
153141 amount : optionalNumber ( positionals [ 1 ] ) ,
154142 pixels : flags . pixels ,
155143 } ) ,
156- pinch : ( { client, positionals, flags } ) =>
157- client . interactions . pinch ( {
158- ...buildSelectionOptions ( flags ) ,
159- scale : Number ( positionals [ 0 ] ) ,
160- x : optionalNumber ( positionals [ 1 ] ) ,
161- y : optionalNumber ( positionals [ 2 ] ) ,
162- } ) ,
163- 'rotate-gesture' : ( { client, positionals, flags } ) =>
164- client . interactions . rotateGesture ( {
165- ...buildSelectionOptions ( flags ) ,
166- degrees : Number ( positionals [ 0 ] ) ,
167- x : optionalNumber ( positionals [ 1 ] ) ,
168- y : optionalNumber ( positionals [ 2 ] ) ,
169- velocity : optionalNumber ( positionals [ 3 ] ) ,
170- } ) ,
171144 'trigger-app-event' : ( { client, positionals, flags } ) =>
172145 client . apps . triggerEvent ( {
173146 ...buildSelectionOptions ( flags ) ,
@@ -218,6 +191,53 @@ const genericClientCommandRunners = {
218191 client . settings . update ( settingsCommandCodec . decode ( positionals , flags ) ) ,
219192} satisfies Partial < Record < PublicCommandName , GenericClientCommandRunner > > ;
220193
194+ function runGestureCommand ( params : {
195+ client : AgentDeviceClient ;
196+ positionals : string [ ] ;
197+ flags : CliFlags ;
198+ } ) : Promise < CommandRequestResult > {
199+ const { client, positionals, flags } = params ;
200+ const subcommand = required ( positionals [ 0 ] , 'gesture requires subcommand' ) ;
201+ const args = positionals . slice ( 1 ) ;
202+ switch ( subcommand ) {
203+ case 'pan' :
204+ return client . interactions . pan ( {
205+ ...buildSelectionOptions ( flags ) ,
206+ x : Number ( args [ 0 ] ) ,
207+ y : Number ( args [ 1 ] ) ,
208+ dx : Number ( args [ 2 ] ) ,
209+ dy : Number ( args [ 3 ] ) ,
210+ durationMs : optionalNumber ( args [ 4 ] ) ,
211+ } ) ;
212+ case 'fling' :
213+ return client . interactions . fling ( {
214+ ...buildSelectionOptions ( flags ) ,
215+ direction : readGestureDirection ( args [ 0 ] , 'gesture fling' ) ,
216+ x : Number ( args [ 1 ] ) ,
217+ y : Number ( args [ 2 ] ) ,
218+ distance : optionalNumber ( args [ 3 ] ) ,
219+ durationMs : optionalNumber ( args [ 4 ] ) ,
220+ } ) ;
221+ case 'pinch' :
222+ return client . interactions . pinch ( {
223+ ...buildSelectionOptions ( flags ) ,
224+ scale : Number ( args [ 0 ] ) ,
225+ x : optionalNumber ( args [ 1 ] ) ,
226+ y : optionalNumber ( args [ 2 ] ) ,
227+ } ) ;
228+ case 'rotate' :
229+ return client . interactions . rotateGesture ( {
230+ ...buildSelectionOptions ( flags ) ,
231+ degrees : Number ( args [ 0 ] ) ,
232+ x : optionalNumber ( args [ 1 ] ) ,
233+ y : optionalNumber ( args [ 2 ] ) ,
234+ velocity : optionalNumber ( args [ 3 ] ) ,
235+ } ) ;
236+ default :
237+ throw new AppError ( 'INVALID_ARGS' , 'gesture requires one of: pan, fling, pinch, rotate' ) ;
238+ }
239+ }
240+
221241export const genericClientCommandHandlers = Object . fromEntries (
222242 Object . entries ( genericClientCommandRunners ) . map ( ( [ command , run ] ) => [
223243 command ,
0 commit comments