@@ -17,7 +17,9 @@ import {
17
17
FileStepDefinition ,
18
18
JsonRpcResponseStepDefinition ,
19
19
ResetConnectionStepDefinition ,
20
- CallbackResponseMessageResult
20
+ CallbackResponseMessageResult ,
21
+ RequestStepDefinition ,
22
+ DelayStepDefinition
21
23
} from "./request-step-definitions" ;
22
24
import { byteLength } from "../../util/util" ;
23
25
import { BaseRuleBuilder } from "../base-rule-builder" ;
@@ -86,6 +88,16 @@ export class RequestRuleBuilder extends BaseRuleBuilder {
86
88
}
87
89
}
88
90
91
+ private steps : Array < RequestStepDefinition > = [ ] ;
92
+
93
+ /**
94
+ * Add a delay (in milliseconds) before the next step in the rule
95
+ */
96
+ waitFor ( ms : number ) : this {
97
+ this . steps . push ( new DelayStepDefinition ( ms ) ) ;
98
+ return this ;
99
+ }
100
+
89
101
/**
90
102
* Reply to matched requests with a given status code and (optionally) status message,
91
103
* body, headers & trailers.
@@ -139,15 +151,17 @@ export class RequestRuleBuilder extends BaseRuleBuilder {
139
151
trailers = headersOrTrailers as Trailers | undefined ;
140
152
}
141
153
154
+ this . steps . push ( new SimpleStepDefinition (
155
+ status ,
156
+ statusMessage ,
157
+ data ,
158
+ headers ,
159
+ trailers
160
+ ) ) ;
161
+
142
162
const rule : RequestRuleData = {
143
163
...this . buildBaseRuleData ( ) ,
144
- steps : [ new SimpleStepDefinition (
145
- status ,
146
- statusMessage ,
147
- data ,
148
- headers ,
149
- trailers
150
- ) ]
164
+ steps : this . steps
151
165
} ;
152
166
153
167
return this . addRule ( rule ) ;
@@ -182,9 +196,11 @@ export class RequestRuleBuilder extends BaseRuleBuilder {
182
196
// connection after the response is sent, which can confuse clients.
183
197
} , headers ) ;
184
198
199
+ this . steps . push ( new SimpleStepDefinition ( status , undefined , jsonData , headers ) ) ;
200
+
185
201
const rule : RequestRuleData = {
186
202
...this . buildBaseRuleData ( ) ,
187
- steps : [ new SimpleStepDefinition ( status , undefined , jsonData , headers ) ]
203
+ steps : this . steps
188
204
} ;
189
205
190
206
return this . addRule ( rule ) ;
@@ -216,9 +232,11 @@ export class RequestRuleBuilder extends BaseRuleBuilder {
216
232
thenCallback ( callback :
217
233
( request : CompletedRequest ) => MaybePromise < CallbackResponseResult >
218
234
) : Promise < MockedEndpoint > {
235
+ this . steps . push ( new CallbackStepDefinition ( callback ) ) ;
236
+
219
237
const rule : RequestRuleData = {
220
238
...this . buildBaseRuleData ( ) ,
221
- steps : [ new CallbackStepDefinition ( callback ) ]
239
+ steps : this . steps
222
240
}
223
241
224
242
return this . addRule ( rule ) ;
@@ -245,9 +263,11 @@ export class RequestRuleBuilder extends BaseRuleBuilder {
245
263
* @category Responses
246
264
*/
247
265
thenStream ( status : number , stream : Readable , headers ?: Headers ) : Promise < MockedEndpoint > {
266
+ this . steps . push ( new StreamStepDefinition ( status , stream , headers ) ) ;
267
+
248
268
const rule : RequestRuleData = {
249
269
...this . buildBaseRuleData ( ) ,
250
- steps : [ new StreamStepDefinition ( status , stream , headers ) ]
270
+ steps : this . steps
251
271
}
252
272
253
273
return this . addRule ( rule ) ;
@@ -294,9 +314,11 @@ export class RequestRuleBuilder extends BaseRuleBuilder {
294
314
headers = pathOrHeaders as Headers | undefined ;
295
315
}
296
316
317
+ this . steps . push ( new FileStepDefinition ( status , statusMessage , path , headers ) ) ;
318
+
297
319
const rule : RequestRuleData = {
298
320
...this . buildBaseRuleData ( ) ,
299
- steps : [ new FileStepDefinition ( status , statusMessage , path , headers ) ]
321
+ steps : this . steps
300
322
} ;
301
323
302
324
return this . addRule ( rule ) ;
@@ -322,9 +344,11 @@ export class RequestRuleBuilder extends BaseRuleBuilder {
322
344
* @category Responses
323
345
*/
324
346
thenPassThrough ( options ?: PassThroughStepOptions ) : Promise < MockedEndpoint > {
347
+ this . steps . push ( new PassThroughStepDefinition ( options ) ) ;
348
+
325
349
const rule : RequestRuleData = {
326
350
...this . buildBaseRuleData ( ) ,
327
- steps : [ new PassThroughStepDefinition ( options ) ]
351
+ steps : this . steps
328
352
} ;
329
353
330
354
return this . addRule ( rule ) ;
@@ -360,15 +384,17 @@ export class RequestRuleBuilder extends BaseRuleBuilder {
360
384
forwarding ?: Omit < PassThroughStepOptions [ 'forwarding' ] , 'targetHost' >
361
385
} = { }
362
386
) : Promise < MockedEndpoint > {
387
+ this . steps . push ( new PassThroughStepDefinition ( {
388
+ ...options ,
389
+ forwarding : {
390
+ ...options . forwarding ,
391
+ targetHost : forwardToLocation
392
+ }
393
+ } ) ) ;
394
+
363
395
const rule : RequestRuleData = {
364
396
...this . buildBaseRuleData ( ) ,
365
- steps : [ new PassThroughStepDefinition ( {
366
- ...options ,
367
- forwarding : {
368
- ...options . forwarding ,
369
- targetHost : forwardToLocation
370
- }
371
- } ) ]
397
+ steps : this . steps
372
398
} ;
373
399
374
400
return this . addRule ( rule ) ;
@@ -389,9 +415,11 @@ export class RequestRuleBuilder extends BaseRuleBuilder {
389
415
* @category Responses
390
416
*/
391
417
thenCloseConnection ( ) : Promise < MockedEndpoint > {
418
+ this . steps . push ( new CloseConnectionStepDefinition ( ) ) ;
419
+
392
420
const rule : RequestRuleData = {
393
421
...this . buildBaseRuleData ( ) ,
394
- steps : [ new CloseConnectionStepDefinition ( ) ]
422
+ steps : this . steps
395
423
} ;
396
424
397
425
return this . addRule ( rule ) ;
@@ -416,9 +444,11 @@ export class RequestRuleBuilder extends BaseRuleBuilder {
416
444
* @category Responses
417
445
*/
418
446
thenResetConnection ( ) : Promise < MockedEndpoint > {
447
+ this . steps . push ( new ResetConnectionStepDefinition ( ) ) ;
448
+
419
449
const rule : RequestRuleData = {
420
450
...this . buildBaseRuleData ( ) ,
421
- steps : [ new ResetConnectionStepDefinition ( ) ]
451
+ steps : this . steps
422
452
} ;
423
453
424
454
return this . addRule ( rule ) ;
@@ -439,9 +469,11 @@ export class RequestRuleBuilder extends BaseRuleBuilder {
439
469
* @category Responses
440
470
*/
441
471
thenTimeout ( ) : Promise < MockedEndpoint > {
472
+ this . steps . push ( new TimeoutStepDefinition ( ) ) ;
473
+
442
474
const rule : RequestRuleData = {
443
475
...this . buildBaseRuleData ( ) ,
444
- steps : [ new TimeoutStepDefinition ( ) ]
476
+ steps : this . steps
445
477
} ;
446
478
447
479
return this . addRule ( rule ) ;
@@ -455,9 +487,11 @@ export class RequestRuleBuilder extends BaseRuleBuilder {
455
487
* @category Responses
456
488
*/
457
489
thenSendJsonRpcResult ( result : any ) {
490
+ this . steps . push ( new JsonRpcResponseStepDefinition ( { result } ) ) ;
491
+
458
492
const rule = {
459
493
...this . buildBaseRuleData ( ) ,
460
- steps : [ new JsonRpcResponseStepDefinition ( { result } ) ]
494
+ steps : this . steps
461
495
} ;
462
496
463
497
return this . addRule ( rule ) ;
@@ -471,9 +505,11 @@ export class RequestRuleBuilder extends BaseRuleBuilder {
471
505
* @category Responses
472
506
*/
473
507
thenSendJsonRpcError ( error : any ) {
508
+ this . steps . push ( new JsonRpcResponseStepDefinition ( { error } ) ) ;
509
+
474
510
const rule = {
475
511
...this . buildBaseRuleData ( ) ,
476
- steps : [ new JsonRpcResponseStepDefinition ( { error } ) ]
512
+ steps : this . steps
477
513
} ;
478
514
479
515
return this . addRule ( rule ) ;
0 commit comments