11import { NativeAdapter } from "./adapter/native.adapter.class" ;
22import { Button } from "./button.enum" ;
3- import { MovementType } from "./movementtype.class " ;
3+ import { linear } from "./movementtype.function " ;
44import { Point } from "./point.class" ;
5+ import { sleep } from "./sleep.function" ;
56
67export class Mouse {
78 public config = {
89 autoDelayMs : 100 ,
910 mouseSpeed : 1000 ,
1011 } ;
1112
12- private lastAction : number ;
13-
1413 constructor ( private native : NativeAdapter ) {
1514 this . native . setMouseDelay ( 0 ) ;
16- this . lastAction = Date . now ( ) ;
1715 }
1816
1917 public async setPosition ( target : Point ) : Promise < Mouse > {
@@ -31,16 +29,16 @@ export class Mouse {
3129 return this . native . currentMousePosition ( ) ;
3230 }
3331
34- public async move ( path : Point [ ] , movementType = MovementType . linear ) : Promise < Mouse > {
32+ public async move ( path : Point [ ] | Promise < Point [ ] > , movementType = linear ) : Promise < Mouse > {
3533 return new Promise < Mouse > ( async ( resolve , reject ) => {
3634 try {
37- const timeSteps = movementType ( path . length , this . config . mouseSpeed ) ;
38- for ( let idx = 0 ; idx < path . length ; ++ idx ) {
39- const node = path [ idx ] ;
35+ const pathSteps = await path ;
36+ const timeSteps = movementType ( pathSteps . length , this . config . mouseSpeed ) ;
37+ for ( let idx = 0 ; idx < pathSteps . length ; ++ idx ) {
38+ const node = pathSteps [ idx ] ;
4039 const minTime = timeSteps [ idx ] ;
41- await this . waitForNextTick ( minTime ) ;
40+ await sleep ( minTime ) ;
4241 await this . native . setMousePosition ( node ) ;
43- await this . updateTick ( ) ;
4442 }
4543 resolve ( this ) ;
4644 } catch ( e ) {
@@ -51,19 +49,17 @@ export class Mouse {
5149
5250 public async leftClick ( ) : Promise < Mouse > {
5351 return new Promise < Mouse > ( async resolve => {
54- await this . waitForNextTick ( this . config . autoDelayMs ) ;
52+ await sleep ( this . config . autoDelayMs ) ;
5553 await this . native . leftClick ( ) ;
56- await this . updateTick ( ) ;
5754 resolve ( this ) ;
5855 } ) ;
5956 }
6057
6158 public async rightClick ( ) : Promise < Mouse > {
6259 return new Promise < Mouse > ( async ( resolve , reject ) => {
6360 try {
64- await this . waitForNextTick ( this . config . autoDelayMs ) ;
61+ await sleep ( this . config . autoDelayMs ) ;
6562 await this . native . rightClick ( ) ;
66- await this . updateTick ( ) ;
6763 resolve ( this ) ;
6864 } catch ( e ) {
6965 reject ( e ) ;
@@ -74,9 +70,8 @@ export class Mouse {
7470 public async scrollDown ( amount : number ) : Promise < Mouse > {
7571 return new Promise < Mouse > ( async ( resolve , reject ) => {
7672 try {
77- await this . waitForNextTick ( this . config . autoDelayMs ) ;
73+ await sleep ( this . config . autoDelayMs ) ;
7874 await this . native . scrollDown ( amount ) ;
79- await this . updateTick ( ) ;
8075 resolve ( this ) ;
8176 } catch ( e ) {
8277 reject ( e ) ;
@@ -87,9 +82,8 @@ export class Mouse {
8782 public async scrollUp ( amount : number ) : Promise < Mouse > {
8883 return new Promise < Mouse > ( async ( resolve , reject ) => {
8984 try {
90- await this . waitForNextTick ( this . config . autoDelayMs ) ;
85+ await sleep ( this . config . autoDelayMs ) ;
9186 await this . native . scrollUp ( amount ) ;
92- await this . updateTick ( ) ;
9387 resolve ( this ) ;
9488 } catch ( e ) {
9589 reject ( e ) ;
@@ -100,9 +94,8 @@ export class Mouse {
10094 public async scrollLeft ( amount : number ) : Promise < Mouse > {
10195 return new Promise < Mouse > ( async ( resolve , reject ) => {
10296 try {
103- await this . waitForNextTick ( this . config . autoDelayMs ) ;
97+ await sleep ( this . config . autoDelayMs ) ;
10498 await this . native . scrollLeft ( amount ) ;
105- await this . updateTick ( ) ;
10699 resolve ( this ) ;
107100 } catch ( e ) {
108101 reject ( e ) ;
@@ -113,42 +106,26 @@ export class Mouse {
113106 public async scrollRight ( amount : number ) : Promise < Mouse > {
114107 return new Promise < Mouse > ( async ( resolve , reject ) => {
115108 try {
116- await this . waitForNextTick ( this . config . autoDelayMs ) ;
109+ await sleep ( this . config . autoDelayMs ) ;
117110 await this . native . scrollRight ( amount ) ;
118- await this . updateTick ( ) ;
119111 resolve ( this ) ;
120112 } catch ( e ) {
121113 reject ( e ) ;
122114 }
123115 } ) ;
124116 }
125117
126- public async drag ( path : Point [ ] ) : Promise < Mouse > {
118+ public async drag ( path : Point [ ] | Promise < Point [ ] > ) : Promise < Mouse > {
127119 return new Promise < Mouse > ( async ( resolve , reject ) => {
128120 try {
129- await this . waitForNextTick ( this . config . autoDelayMs ) ;
121+ await sleep ( this . config . autoDelayMs ) ;
130122 await this . native . pressButton ( Button . LEFT ) ;
131123 await this . move ( path ) ;
132124 await this . native . releaseButton ( Button . LEFT ) ;
133- await this . updateTick ( ) ;
134125 resolve ( this ) ;
135126 } catch ( e ) {
136127 reject ( e ) ;
137128 }
138129 } ) ;
139130 }
140-
141- private async updateTick ( ) {
142- this . lastAction = Date . now ( ) ;
143- }
144-
145- private async waitForNextTick ( minTime : number ) : Promise < void > {
146- return new Promise < void > ( resolve => {
147- let current = Date . now ( ) ;
148- while ( current - this . lastAction < minTime ) {
149- current = Date . now ( ) ;
150- }
151- resolve ( ) ;
152- } ) ;
153- }
154131}
0 commit comments