cypress 9.1.0 → 9.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,553 +1,553 @@
1
- // Copied from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/methods/index.d.ts
2
- type Method =
3
- | 'ACL'
4
- | 'BIND'
5
- | 'CHECKOUT'
6
- | 'CONNECT'
7
- | 'COPY'
8
- | 'DELETE'
9
- | 'GET'
10
- | 'HEAD'
11
- | 'LINK'
12
- | 'LOCK'
13
- | 'M-SEARCH'
14
- | 'MERGE'
15
- | 'MKACTIVITY'
16
- | 'MKCALENDAR'
17
- | 'MKCOL'
18
- | 'MOVE'
19
- | 'NOTIFY'
20
- | 'OPTIONS'
21
- | 'PATCH'
22
- | 'POST'
23
- | 'PROPFIND'
24
- | 'PROPPATCH'
25
- | 'PURGE'
26
- | 'PUT'
27
- | 'REBIND'
28
- | 'REPORT'
29
- | 'SEARCH'
30
- | 'SOURCE'
31
- | 'SUBSCRIBE'
32
- | 'TRACE'
33
- | 'UNBIND'
34
- | 'UNLINK'
35
- | 'UNLOCK'
36
- | 'UNSUBSCRIBE'
37
- | 'acl'
38
- | 'bind'
39
- | 'checkout'
40
- | 'connect'
41
- | 'copy'
42
- | 'delete'
43
- | 'get'
44
- | 'head'
45
- | 'link'
46
- | 'lock'
47
- | 'm-search'
48
- | 'merge'
49
- | 'mkactivity'
50
- | 'mkcalendar'
51
- | 'mkcol'
52
- | 'move'
53
- | 'notify'
54
- | 'options'
55
- | 'patch'
56
- | 'post'
57
- | 'propfind'
58
- | 'proppatch'
59
- | 'purge'
60
- | 'put'
61
- | 'rebind'
62
- | 'report'
63
- | 'search'
64
- | 'source'
65
- | 'subscribe'
66
- | 'trace'
67
- | 'unbind'
68
- | 'unlink'
69
- | 'unlock'
70
- | 'unsubscribe'
71
- export namespace CyHttpMessages {
72
- export interface BaseMessage {
73
- /**
74
- * The body of the HTTP message.
75
- * If a JSON Content-Type was used and the body was valid JSON, this will be an object.
76
- * If the body was binary content, this will be a buffer.
77
- */
78
- body: any
79
- /**
80
- * The headers of the HTTP message.
81
- */
82
- headers: { [key: string]: string | string[] }
83
- }
84
-
85
- export type IncomingResponse = BaseMessage & {
86
- /**
87
- * The HTTP status code of the response.
88
- */
89
- statusCode: number
90
- /**
91
- * The HTTP status message.
92
- */
93
- statusMessage: string
94
- /**
95
- * Kilobytes per second to send 'body'.
96
- */
97
- throttleKbps?: number
98
- /**
99
- * Milliseconds to delay before the response is sent.
100
- */
101
- delay?: number
102
- }
103
-
104
- export type IncomingHttpResponse = IncomingResponse & {
105
- /**
106
- * Continue the HTTP response, merging the supplied values with the real response.
107
- */
108
- send(status: number, body?: string | number | object, headers?: { [key: string]: string }): void
109
- send(body: string | object, headers?: { [key: string]: string }): void
110
- send(staticResponse: StaticResponse): void
111
- /**
112
- * Continue the HTTP response to the browser, including any modifications made to `res`.
113
- */
114
- send(): void
115
- /**
116
- * Wait for `delay` milliseconds before sending the response to the client.
117
- */
118
- setDelay: (delay: number) => IncomingHttpResponse
119
- /**
120
- * Serve the response at `throttleKbps` kilobytes per second.
121
- */
122
- setThrottle: (throttleKbps: number) => IncomingHttpResponse
123
- }
124
-
125
- export type IncomingRequest = BaseMessage & {
126
- /**
127
- * Request HTTP method (GET, POST, ...).
128
- */
129
- method: string
130
- /**
131
- * Request URL.
132
- */
133
- url: string
134
- /**
135
- * URL query string as object.
136
- */
137
- query: Record<string, string|number>
138
- /**
139
- * The HTTP version used in the request. Read only.
140
- */
141
- httpVersion: string
142
- /**
143
- * If provided, the number of milliseconds before an upstream response to this request
144
- * will time out and cause an error. By default, `responseTimeout` from config is used.
145
- */
146
- responseTimeout?: number
147
- /**
148
- * Set if redirects should be followed when this request is made. By default, requests will
149
- * not follow redirects before yielding the response (the 3xx redirect is yielded)
150
- */
151
- followRedirect?: boolean
152
- /**
153
- * If set, `cy.wait` can be used to await the request/response cycle to complete for this
154
- * request via `cy.wait('@alias')`.
155
- */
156
- alias?: string
157
- }
158
-
159
- export interface IncomingHttpRequest extends IncomingRequest, RequestEvents {
160
- /**
161
- * Destroy the request and respond with a network error.
162
- */
163
- destroy(): void
164
- /**
165
- * Send the request outgoing, skipping any other request handlers.
166
- * If a function is passed, the request will be sent outgoing, and the function will be called
167
- * with the response from the upstream server.
168
- */
169
- continue(interceptor?: HttpResponseInterceptor): void
170
- /**
171
- * Control the response to this request.
172
- * If a function is passed, the request will be sent outgoing, and the function will be called
173
- * with the response from the upstream server.
174
- * If a `StaticResponse` is passed, it will be used as the response, and no request will be made
175
- * to the upstream server.
176
- */
177
- reply(interceptor?: StaticResponse | HttpResponseInterceptor): void
178
- /**
179
- * Shortcut to reply to the request with a body and optional headers.
180
- */
181
- reply(body: string | object, headers?: { [key: string]: string }): void
182
- /**
183
- * Shortcut to reply to the request with an HTTP status code and optional body and headers.
184
- */
185
- reply(status: number, body?: string | object, headers?: { [key: string]: string }): void
186
- /**
187
- * Respond to this request with a redirect to a new `location`.
188
- * @param statusCode HTTP status code to redirect with. Default: 302
189
- */
190
- redirect(location: string, statusCode?: number): void
191
- }
192
-
193
- export interface ResponseComplete {
194
- finalResBody?: BaseMessage['body']
195
- }
196
-
197
- export interface NetworkError {
198
- error: any
199
- }
200
- }
201
-
202
- export interface DictMatcher<T> {
203
- [key: string]: T
204
- }
205
-
206
- /**
207
- * Matches a string using glob (`*`) matching.
208
- */
209
- export type GlobPattern = string
210
-
211
- /**
212
- * Interceptor for an HTTP request. If a Promise is returned, it will be awaited before passing the
213
- * request to the next handler (if there is one), otherwise the request will be passed to the next
214
- * handler synchronously.
215
- */
216
- export type HttpRequestInterceptor = (req: CyHttpMessages.IncomingHttpRequest) => void | Promise<void>
217
-
218
- /**
219
- * Interceptor for an HTTP response. If a Promise is returned, it will be awaited before passing the
220
- * request to the next handler (if there is one), otherwise the request will be passed to the next
221
- * handler synchronously.
222
- */
223
- export type HttpResponseInterceptor = (res: CyHttpMessages.IncomingHttpResponse) => void | Promise<void>
224
-
225
- /**
226
- * Matches a single number or any of an array of acceptable numbers.
227
- */
228
- export type NumberMatcher = number | number[]
229
-
230
- /**
231
- * Metadata for a subscription for an interception event.
232
- */
233
- export interface Subscription {
234
- /**
235
- * If not defined, this is a default subscription.
236
- */
237
- id?: string
238
- routeId: string
239
- eventName: string
240
- await: boolean
241
- skip?: boolean
242
- }
243
-
244
- interface RequestEvents {
245
- /**
246
- * Emitted before `response` and before any `req.continue` handlers.
247
- * Modifications to `res` will be applied to the incoming response.
248
- * If a promise is returned from `cb`, it will be awaited before processing other event handlers.
249
- */
250
- on(eventName: 'before:response', cb: HttpResponseInterceptor): this
251
- /**
252
- * Emitted after `before:response` and after any `req.continue` handlers - before the response is sent to the browser.
253
- * Modifications to `res` will be applied to the incoming response.
254
- * If a promise is returned from `cb`, it will be awaited before processing other event handlers.
255
- */
256
- on(eventName: 'response', cb: HttpResponseInterceptor): this
257
- /**
258
- * Emitted once the response to a request has finished sending to the browser.
259
- * Modifications to `res` have no impact.
260
- * If a promise is returned from `cb`, it will be awaited before processing other event handlers.
261
- */
262
- on(eventName: 'after:response', cb: (res: CyHttpMessages.IncomingResponse) => void | Promise<void>): this
263
- }
264
-
265
- /**
266
- * Request/response cycle.
267
- */
268
- export interface Interception {
269
- id: string
270
- /* @internal */
271
- browserRequestId?: string
272
- routeId: string
273
- /* @internal */
274
- setLogFlag: (flag: 'spied' | 'stubbed' | 'reqModified' | 'resModified') => void
275
- request: CyHttpMessages.IncomingRequest
276
- /**
277
- * Was `cy.wait()` used to wait on this request?
278
- * @internal
279
- */
280
- requestWaited: boolean
281
- response?: CyHttpMessages.IncomingResponse
282
- /**
283
- * The error that occurred during this request.
284
- */
285
- error?: Error
286
- /**
287
- * Was `cy.wait()` used to wait on the response to this request?
288
- * @internal
289
- */
290
- responseWaited: boolean
291
- /* @internal */
292
- state: InterceptionState
293
- /* @internal */
294
- subscriptions: Array<{
295
- subscription: Subscription
296
- handler: (data: any) => Promise<void> | void
297
- }>
298
- }
299
-
300
- export type InterceptionState =
301
- 'Received' |
302
- 'Intercepted' |
303
- 'ResponseReceived' |
304
- 'ResponseIntercepted' |
305
- 'Complete' |
306
- 'Errored'
307
-
308
- export interface Route {
309
- alias?: string
310
- log: any
311
- options: RouteMatcherOptions
312
- handler: RouteHandler
313
- hitCount: number
314
- requests: { [key: string]: Interception }
315
- command: any
316
- }
317
-
318
- export interface RouteMap { [key: string]: Route }
319
-
320
- /**
321
- * A `RouteMatcher` describes a filter for HTTP requests.
322
- */
323
- export type RouteMatcher = StringMatcher | RouteMatcherOptions
324
-
325
- export type RouteMatcherOptions = RouteMatcherOptionsGeneric<StringMatcher>
326
-
327
- export interface RouteMatcherOptionsGeneric<S> {
328
- /**
329
- * Match against the username and password used in HTTP Basic authentication.
330
- */
331
- auth?: { username: S, password: S }
332
- /**
333
- * Match against HTTP headers on the request.
334
- */
335
- headers?: DictMatcher<S>
336
- /**
337
- * Match against the requested HTTP hostname.
338
- */
339
- hostname?: S
340
- /**
341
- * If 'true', only HTTPS requests will be matched.
342
- * If 'false', only HTTP requests will be matched.
343
- */
344
- https?: boolean
345
- /**
346
- * Match against the request's HTTP method.
347
- * @default '*'
348
- */
349
- method?: S
350
- /**
351
- * If `true`, this handler will be called before any non-`middleware` handlers, in the order it was defined.
352
- * Can only be used with a dynamic request handler.
353
- * @default false
354
- */
355
- middleware?: boolean
356
- /**
357
- * Match on request path after the hostname, including query params.
358
- */
359
- path?: S
360
- /**
361
- * Matches like `path`, but without query params.
362
- */
363
- pathname?: S
364
- /**
365
- * Match based on requested port, or pass an array of ports
366
- * to match against any in that array.
367
- */
368
- port?: NumberMatcher
369
- /**
370
- * Match on parsed querystring parameters.
371
- */
372
- query?: DictMatcher<S>
373
- /**
374
- * If set, this `RouteMatcher` will only match the first `times` requests.
375
- */
376
- times?: number
377
- /**
378
- * Match against the full request URL.
379
- * If a string is passed, it will be used as a substring match,
380
- * not an equality match.
381
- */
382
- url?: S
383
- }
384
-
385
- export type RouteHandlerController = HttpRequestInterceptor
386
-
387
- export type RouteHandler = string | StaticResponse | RouteHandlerController | object
388
-
389
- /**
390
- * Describes a response that will be sent back to the browser to fulfill the request.
391
- */
392
- export type StaticResponse = GenericStaticResponse<string, string | object | boolean | ArrayBuffer | null> & {
393
- /**
394
- * Milliseconds to delay before the response is sent.
395
- * @deprecated Use `delay` instead of `delayMs`.
396
- */
397
- delayMs?: number
398
- }
399
-
400
- export interface GenericStaticResponse<Fixture, Body> {
401
- /**
402
- * Serve a fixture as the response body.
403
- */
404
- fixture?: Fixture
405
- /**
406
- * Serve a static string/JSON object as the response body.
407
- */
408
- body?: Body
409
- /**
410
- * HTTP headers to accompany the response.
411
- * @default {}
412
- */
413
- headers?: { [key: string]: string }
414
- /**
415
- * The HTTP status code to send.
416
- * @default 200
417
- */
418
- statusCode?: number
419
- /**
420
- * If 'forceNetworkError' is truthy, Cypress will destroy the browser connection
421
- * and send no response. Useful for simulating a server that is not reachable.
422
- * Must not be set in combination with other options.
423
- */
424
- forceNetworkError?: boolean
425
- /**
426
- * Kilobytes per second to send 'body'.
427
- */
428
- throttleKbps?: number
429
- /**
430
- * Milliseconds to delay before the response is sent.
431
- */
432
- delay?: number
433
- }
434
-
435
- /**
436
- * Either a `GlobPattern` string or a `RegExp`.
437
- */
438
- export type StringMatcher = GlobPattern | RegExp
439
-
440
- interface WaitOptions {
441
- /**
442
- * Displays the command in the Command Log
443
- *
444
- * @default true
445
- */
446
- log: boolean
447
- /**
448
- * Time to wait for the request (ms)
449
- *
450
- * @default {@link Timeoutable#timeout}
451
- * @see https://on.cypress.io/configuration#Timeouts
452
- */
453
- requestTimeout: number
454
- /**
455
- * Time to wait for the response (ms)
456
- *
457
- * @default {@link Timeoutable#timeout}
458
- * @see https://on.cypress.io/configuration#Timeouts
459
- */
460
- responseTimeout: number
461
- /**
462
- * Time to wait (ms)
463
- *
464
- * @default defaultCommandTimeout
465
- * @see https://on.cypress.io/configuration#Timeouts
466
- */
467
- timeout: number
468
- }
469
-
470
- declare global {
471
- namespace Cypress {
472
- // TODO: Why is Subject unused?
473
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
474
- interface Chainable<Subject = any> {
475
- /**
476
- * Use `cy.intercept()` to stub and intercept HTTP requests and responses.
477
- *
478
- * @see https://on.cypress.io/intercept
479
- * @example
480
- * cy.intercept('https://localhost:7777/users', [{id: 1, name: 'Pat'}])
481
- * @example
482
- * cy.intercept('https://localhost:7777/protected-endpoint', (req) => {
483
- * req.headers['authorization'] = 'basic fooabc123'
484
- * })
485
- * @example
486
- * cy.intercept('https://localhost:7777/some-response', (req) => {
487
- * req.continue(res => {
488
- * res.body = 'some new body'
489
- * })
490
- * })
491
- */
492
- intercept(url: RouteMatcher, response?: RouteHandler): Chainable<null>
493
- /**
494
- * Use `cy.intercept()` to stub and intercept HTTP requests and responses.
495
- *
496
- * @see https://on.cypress.io/intercept
497
- * @example
498
- * cy.intercept('GET', 'http://foo.com/fruits', ['apple', 'banana', 'cherry'])
499
- */
500
- intercept(method: Method, url: RouteMatcher, response?: RouteHandler): Chainable<null>
501
- /**
502
- * Use `cy.intercept()` to stub and intercept HTTP requests and responses.
503
- *
504
- * @see https://on.cypress.io/intercept
505
- *
506
- * @example
507
- * cy.intercept('/fruits', { middleware: true }, (req) => { ... })
508
- *
509
- * @param mergeRouteMatcher Additional route matcher options to merge with `url`. Typically used for middleware.
510
- */
511
- intercept(url: StringMatcher, mergeRouteMatcher: Omit<RouteMatcherOptions, 'url'>, response: RouteHandler): Chainable<null>
512
- /**
513
- * Wait for a specific request to complete.
514
- *
515
- * @see https://on.cypress.io/wait
516
- * @param {string} alias - Name of the alias to wait for.
517
- *
518
- ```
519
- // Wait for the route aliased as 'getAccount' to respond
520
- // without changing or stubbing its response
521
- cy.intercept('https://api.example.com/accounts/*').as('getAccount')
522
- cy.visit('/accounts/123')
523
- cy.wait('@getAccount').then((interception) => {
524
- // we can now access the low level request
525
- // that contains the request body,
526
- // response body, status, etc
527
- })
528
- ```
529
- */
530
- wait(alias: string, options?: Partial<WaitOptions>): Chainable<Interception>
531
- /**
532
- * Wait for list of requests to complete.
533
- *
534
- * @see https://on.cypress.io/wait
535
- * @param {string[]} aliases - An array of aliased routes as defined using the `.as()` command.
536
- *
537
- ```
538
- // wait for 3 XHR requests to complete
539
- cy.intercept('users/*').as('getUsers')
540
- cy.intercept('activities/*').as('getActivities')
541
- cy.intercept('comments/*').as('getComments')
542
- cy.visit('/dashboard')
543
-
544
- cy.wait(['@getUsers', '@getActivities', '@getComments'])
545
- .then((interceptions) => {
546
- // intercepts will now be an array of matching HTTP requests
547
- })
548
- ```
549
- */
550
- wait(alias: string[], options?: Partial<WaitOptions>): Chainable<Interception[]>
551
- }
552
- }
553
- }
1
+ // Copied from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/methods/index.d.ts
2
+ type Method =
3
+ | 'ACL'
4
+ | 'BIND'
5
+ | 'CHECKOUT'
6
+ | 'CONNECT'
7
+ | 'COPY'
8
+ | 'DELETE'
9
+ | 'GET'
10
+ | 'HEAD'
11
+ | 'LINK'
12
+ | 'LOCK'
13
+ | 'M-SEARCH'
14
+ | 'MERGE'
15
+ | 'MKACTIVITY'
16
+ | 'MKCALENDAR'
17
+ | 'MKCOL'
18
+ | 'MOVE'
19
+ | 'NOTIFY'
20
+ | 'OPTIONS'
21
+ | 'PATCH'
22
+ | 'POST'
23
+ | 'PROPFIND'
24
+ | 'PROPPATCH'
25
+ | 'PURGE'
26
+ | 'PUT'
27
+ | 'REBIND'
28
+ | 'REPORT'
29
+ | 'SEARCH'
30
+ | 'SOURCE'
31
+ | 'SUBSCRIBE'
32
+ | 'TRACE'
33
+ | 'UNBIND'
34
+ | 'UNLINK'
35
+ | 'UNLOCK'
36
+ | 'UNSUBSCRIBE'
37
+ | 'acl'
38
+ | 'bind'
39
+ | 'checkout'
40
+ | 'connect'
41
+ | 'copy'
42
+ | 'delete'
43
+ | 'get'
44
+ | 'head'
45
+ | 'link'
46
+ | 'lock'
47
+ | 'm-search'
48
+ | 'merge'
49
+ | 'mkactivity'
50
+ | 'mkcalendar'
51
+ | 'mkcol'
52
+ | 'move'
53
+ | 'notify'
54
+ | 'options'
55
+ | 'patch'
56
+ | 'post'
57
+ | 'propfind'
58
+ | 'proppatch'
59
+ | 'purge'
60
+ | 'put'
61
+ | 'rebind'
62
+ | 'report'
63
+ | 'search'
64
+ | 'source'
65
+ | 'subscribe'
66
+ | 'trace'
67
+ | 'unbind'
68
+ | 'unlink'
69
+ | 'unlock'
70
+ | 'unsubscribe'
71
+ export namespace CyHttpMessages {
72
+ export interface BaseMessage {
73
+ /**
74
+ * The body of the HTTP message.
75
+ * If a JSON Content-Type was used and the body was valid JSON, this will be an object.
76
+ * If the body was binary content, this will be a buffer.
77
+ */
78
+ body: any
79
+ /**
80
+ * The headers of the HTTP message.
81
+ */
82
+ headers: { [key: string]: string | string[] }
83
+ }
84
+
85
+ export type IncomingResponse = BaseMessage & {
86
+ /**
87
+ * The HTTP status code of the response.
88
+ */
89
+ statusCode: number
90
+ /**
91
+ * The HTTP status message.
92
+ */
93
+ statusMessage: string
94
+ /**
95
+ * Kilobytes per second to send 'body'.
96
+ */
97
+ throttleKbps?: number
98
+ /**
99
+ * Milliseconds to delay before the response is sent.
100
+ */
101
+ delay?: number
102
+ }
103
+
104
+ export type IncomingHttpResponse = IncomingResponse & {
105
+ /**
106
+ * Continue the HTTP response, merging the supplied values with the real response.
107
+ */
108
+ send(status: number, body?: string | number | object, headers?: { [key: string]: string }): void
109
+ send(body: string | object, headers?: { [key: string]: string }): void
110
+ send(staticResponse: StaticResponse): void
111
+ /**
112
+ * Continue the HTTP response to the browser, including any modifications made to `res`.
113
+ */
114
+ send(): void
115
+ /**
116
+ * Wait for `delay` milliseconds before sending the response to the client.
117
+ */
118
+ setDelay: (delay: number) => IncomingHttpResponse
119
+ /**
120
+ * Serve the response at `throttleKbps` kilobytes per second.
121
+ */
122
+ setThrottle: (throttleKbps: number) => IncomingHttpResponse
123
+ }
124
+
125
+ export type IncomingRequest = BaseMessage & {
126
+ /**
127
+ * Request HTTP method (GET, POST, ...).
128
+ */
129
+ method: string
130
+ /**
131
+ * Request URL.
132
+ */
133
+ url: string
134
+ /**
135
+ * URL query string as object.
136
+ */
137
+ query: Record<string, string|number>
138
+ /**
139
+ * The HTTP version used in the request. Read only.
140
+ */
141
+ httpVersion: string
142
+ /**
143
+ * If provided, the number of milliseconds before an upstream response to this request
144
+ * will time out and cause an error. By default, `responseTimeout` from config is used.
145
+ */
146
+ responseTimeout?: number
147
+ /**
148
+ * Set if redirects should be followed when this request is made. By default, requests will
149
+ * not follow redirects before yielding the response (the 3xx redirect is yielded)
150
+ */
151
+ followRedirect?: boolean
152
+ /**
153
+ * If set, `cy.wait` can be used to await the request/response cycle to complete for this
154
+ * request via `cy.wait('@alias')`.
155
+ */
156
+ alias?: string
157
+ }
158
+
159
+ export interface IncomingHttpRequest extends IncomingRequest, RequestEvents {
160
+ /**
161
+ * Destroy the request and respond with a network error.
162
+ */
163
+ destroy(): void
164
+ /**
165
+ * Send the request outgoing, skipping any other request handlers.
166
+ * If a function is passed, the request will be sent outgoing, and the function will be called
167
+ * with the response from the upstream server.
168
+ */
169
+ continue(interceptor?: HttpResponseInterceptor): void
170
+ /**
171
+ * Control the response to this request.
172
+ * If a function is passed, the request will be sent outgoing, and the function will be called
173
+ * with the response from the upstream server.
174
+ * If a `StaticResponse` is passed, it will be used as the response, and no request will be made
175
+ * to the upstream server.
176
+ */
177
+ reply(interceptor?: StaticResponse | HttpResponseInterceptor): void
178
+ /**
179
+ * Shortcut to reply to the request with a body and optional headers.
180
+ */
181
+ reply(body: string | object, headers?: { [key: string]: string }): void
182
+ /**
183
+ * Shortcut to reply to the request with an HTTP status code and optional body and headers.
184
+ */
185
+ reply(status: number, body?: string | object, headers?: { [key: string]: string }): void
186
+ /**
187
+ * Respond to this request with a redirect to a new `location`.
188
+ * @param statusCode HTTP status code to redirect with. Default: 302
189
+ */
190
+ redirect(location: string, statusCode?: number): void
191
+ }
192
+
193
+ export interface ResponseComplete {
194
+ finalResBody?: BaseMessage['body']
195
+ }
196
+
197
+ export interface NetworkError {
198
+ error: any
199
+ }
200
+ }
201
+
202
+ export interface DictMatcher<T> {
203
+ [key: string]: T
204
+ }
205
+
206
+ /**
207
+ * Matches a string using glob (`*`) matching.
208
+ */
209
+ export type GlobPattern = string
210
+
211
+ /**
212
+ * Interceptor for an HTTP request. If a Promise is returned, it will be awaited before passing the
213
+ * request to the next handler (if there is one), otherwise the request will be passed to the next
214
+ * handler synchronously.
215
+ */
216
+ export type HttpRequestInterceptor = (req: CyHttpMessages.IncomingHttpRequest) => void | Promise<void>
217
+
218
+ /**
219
+ * Interceptor for an HTTP response. If a Promise is returned, it will be awaited before passing the
220
+ * request to the next handler (if there is one), otherwise the request will be passed to the next
221
+ * handler synchronously.
222
+ */
223
+ export type HttpResponseInterceptor = (res: CyHttpMessages.IncomingHttpResponse) => void | Promise<void>
224
+
225
+ /**
226
+ * Matches a single number or any of an array of acceptable numbers.
227
+ */
228
+ export type NumberMatcher = number | number[]
229
+
230
+ /**
231
+ * Metadata for a subscription for an interception event.
232
+ */
233
+ export interface Subscription {
234
+ /**
235
+ * If not defined, this is a default subscription.
236
+ */
237
+ id?: string
238
+ routeId: string
239
+ eventName: string
240
+ await: boolean
241
+ skip?: boolean
242
+ }
243
+
244
+ interface RequestEvents {
245
+ /**
246
+ * Emitted before `response` and before any `req.continue` handlers.
247
+ * Modifications to `res` will be applied to the incoming response.
248
+ * If a promise is returned from `cb`, it will be awaited before processing other event handlers.
249
+ */
250
+ on(eventName: 'before:response', cb: HttpResponseInterceptor): this
251
+ /**
252
+ * Emitted after `before:response` and after any `req.continue` handlers - before the response is sent to the browser.
253
+ * Modifications to `res` will be applied to the incoming response.
254
+ * If a promise is returned from `cb`, it will be awaited before processing other event handlers.
255
+ */
256
+ on(eventName: 'response', cb: HttpResponseInterceptor): this
257
+ /**
258
+ * Emitted once the response to a request has finished sending to the browser.
259
+ * Modifications to `res` have no impact.
260
+ * If a promise is returned from `cb`, it will be awaited before processing other event handlers.
261
+ */
262
+ on(eventName: 'after:response', cb: (res: CyHttpMessages.IncomingResponse) => void | Promise<void>): this
263
+ }
264
+
265
+ /**
266
+ * Request/response cycle.
267
+ */
268
+ export interface Interception {
269
+ id: string
270
+ /* @internal */
271
+ browserRequestId?: string
272
+ routeId: string
273
+ /* @internal */
274
+ setLogFlag: (flag: 'spied' | 'stubbed' | 'reqModified' | 'resModified') => void
275
+ request: CyHttpMessages.IncomingRequest
276
+ /**
277
+ * Was `cy.wait()` used to wait on this request?
278
+ * @internal
279
+ */
280
+ requestWaited: boolean
281
+ response?: CyHttpMessages.IncomingResponse
282
+ /**
283
+ * The error that occurred during this request.
284
+ */
285
+ error?: Error
286
+ /**
287
+ * Was `cy.wait()` used to wait on the response to this request?
288
+ * @internal
289
+ */
290
+ responseWaited: boolean
291
+ /* @internal */
292
+ state: InterceptionState
293
+ /* @internal */
294
+ subscriptions: Array<{
295
+ subscription: Subscription
296
+ handler: (data: any) => Promise<void> | void
297
+ }>
298
+ }
299
+
300
+ export type InterceptionState =
301
+ 'Received' |
302
+ 'Intercepted' |
303
+ 'ResponseReceived' |
304
+ 'ResponseIntercepted' |
305
+ 'Complete' |
306
+ 'Errored'
307
+
308
+ export interface Route {
309
+ alias?: string
310
+ log: any
311
+ options: RouteMatcherOptions
312
+ handler: RouteHandler
313
+ hitCount: number
314
+ requests: { [key: string]: Interception }
315
+ command: any
316
+ }
317
+
318
+ export interface RouteMap { [key: string]: Route }
319
+
320
+ /**
321
+ * A `RouteMatcher` describes a filter for HTTP requests.
322
+ */
323
+ export type RouteMatcher = StringMatcher | RouteMatcherOptions
324
+
325
+ export type RouteMatcherOptions = RouteMatcherOptionsGeneric<StringMatcher>
326
+
327
+ export interface RouteMatcherOptionsGeneric<S> {
328
+ /**
329
+ * Match against the username and password used in HTTP Basic authentication.
330
+ */
331
+ auth?: { username: S, password: S }
332
+ /**
333
+ * Match against HTTP headers on the request.
334
+ */
335
+ headers?: DictMatcher<S>
336
+ /**
337
+ * Match against the requested HTTP hostname.
338
+ */
339
+ hostname?: S
340
+ /**
341
+ * If 'true', only HTTPS requests will be matched.
342
+ * If 'false', only HTTP requests will be matched.
343
+ */
344
+ https?: boolean
345
+ /**
346
+ * Match against the request's HTTP method.
347
+ * @default '*'
348
+ */
349
+ method?: S
350
+ /**
351
+ * If `true`, this handler will be called before any non-`middleware` handlers, in the order it was defined.
352
+ * Can only be used with a dynamic request handler.
353
+ * @default false
354
+ */
355
+ middleware?: boolean
356
+ /**
357
+ * Match on request path after the hostname, including query params.
358
+ */
359
+ path?: S
360
+ /**
361
+ * Matches like `path`, but without query params.
362
+ */
363
+ pathname?: S
364
+ /**
365
+ * Match based on requested port, or pass an array of ports
366
+ * to match against any in that array.
367
+ */
368
+ port?: NumberMatcher
369
+ /**
370
+ * Match on parsed querystring parameters.
371
+ */
372
+ query?: DictMatcher<S>
373
+ /**
374
+ * If set, this `RouteMatcher` will only match the first `times` requests.
375
+ */
376
+ times?: number
377
+ /**
378
+ * Match against the full request URL.
379
+ * If a string is passed, it will be used as a substring match,
380
+ * not an equality match.
381
+ */
382
+ url?: S
383
+ }
384
+
385
+ export type RouteHandlerController = HttpRequestInterceptor
386
+
387
+ export type RouteHandler = string | StaticResponse | RouteHandlerController | object
388
+
389
+ /**
390
+ * Describes a response that will be sent back to the browser to fulfill the request.
391
+ */
392
+ export type StaticResponse = GenericStaticResponse<string, string | object | boolean | ArrayBuffer | null> & {
393
+ /**
394
+ * Milliseconds to delay before the response is sent.
395
+ * @deprecated Use `delay` instead of `delayMs`.
396
+ */
397
+ delayMs?: number
398
+ }
399
+
400
+ export interface GenericStaticResponse<Fixture, Body> {
401
+ /**
402
+ * Serve a fixture as the response body.
403
+ */
404
+ fixture?: Fixture
405
+ /**
406
+ * Serve a static string/JSON object as the response body.
407
+ */
408
+ body?: Body
409
+ /**
410
+ * HTTP headers to accompany the response.
411
+ * @default {}
412
+ */
413
+ headers?: { [key: string]: string }
414
+ /**
415
+ * The HTTP status code to send.
416
+ * @default 200
417
+ */
418
+ statusCode?: number
419
+ /**
420
+ * If 'forceNetworkError' is truthy, Cypress will destroy the browser connection
421
+ * and send no response. Useful for simulating a server that is not reachable.
422
+ * Must not be set in combination with other options.
423
+ */
424
+ forceNetworkError?: boolean
425
+ /**
426
+ * Kilobytes per second to send 'body'.
427
+ */
428
+ throttleKbps?: number
429
+ /**
430
+ * Milliseconds to delay before the response is sent.
431
+ */
432
+ delay?: number
433
+ }
434
+
435
+ /**
436
+ * Either a `GlobPattern` string or a `RegExp`.
437
+ */
438
+ export type StringMatcher = GlobPattern | RegExp
439
+
440
+ interface WaitOptions {
441
+ /**
442
+ * Displays the command in the Command Log
443
+ *
444
+ * @default true
445
+ */
446
+ log: boolean
447
+ /**
448
+ * Time to wait for the request (ms)
449
+ *
450
+ * @default {@link Timeoutable#timeout}
451
+ * @see https://on.cypress.io/configuration#Timeouts
452
+ */
453
+ requestTimeout: number
454
+ /**
455
+ * Time to wait for the response (ms)
456
+ *
457
+ * @default {@link Timeoutable#timeout}
458
+ * @see https://on.cypress.io/configuration#Timeouts
459
+ */
460
+ responseTimeout: number
461
+ /**
462
+ * Time to wait (ms)
463
+ *
464
+ * @default defaultCommandTimeout
465
+ * @see https://on.cypress.io/configuration#Timeouts
466
+ */
467
+ timeout: number
468
+ }
469
+
470
+ declare global {
471
+ namespace Cypress {
472
+ // TODO: Why is Subject unused?
473
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
474
+ interface Chainable<Subject = any> {
475
+ /**
476
+ * Use `cy.intercept()` to stub and intercept HTTP requests and responses.
477
+ *
478
+ * @see https://on.cypress.io/intercept
479
+ * @example
480
+ * cy.intercept('https://localhost:7777/users', [{id: 1, name: 'Pat'}])
481
+ * @example
482
+ * cy.intercept('https://localhost:7777/protected-endpoint', (req) => {
483
+ * req.headers['authorization'] = 'basic fooabc123'
484
+ * })
485
+ * @example
486
+ * cy.intercept('https://localhost:7777/some-response', (req) => {
487
+ * req.continue(res => {
488
+ * res.body = 'some new body'
489
+ * })
490
+ * })
491
+ */
492
+ intercept(url: RouteMatcher, response?: RouteHandler): Chainable<null>
493
+ /**
494
+ * Use `cy.intercept()` to stub and intercept HTTP requests and responses.
495
+ *
496
+ * @see https://on.cypress.io/intercept
497
+ * @example
498
+ * cy.intercept('GET', 'http://foo.com/fruits', ['apple', 'banana', 'cherry'])
499
+ */
500
+ intercept(method: Method, url: RouteMatcher, response?: RouteHandler): Chainable<null>
501
+ /**
502
+ * Use `cy.intercept()` to stub and intercept HTTP requests and responses.
503
+ *
504
+ * @see https://on.cypress.io/intercept
505
+ *
506
+ * @example
507
+ * cy.intercept('/fruits', { middleware: true }, (req) => { ... })
508
+ *
509
+ * @param mergeRouteMatcher Additional route matcher options to merge with `url`. Typically used for middleware.
510
+ */
511
+ intercept(url: StringMatcher, mergeRouteMatcher: Omit<RouteMatcherOptions, 'url'>, response: RouteHandler): Chainable<null>
512
+ /**
513
+ * Wait for a specific request to complete.
514
+ *
515
+ * @see https://on.cypress.io/wait
516
+ * @param {string} alias - Name of the alias to wait for.
517
+ *
518
+ ```
519
+ // Wait for the route aliased as 'getAccount' to respond
520
+ // without changing or stubbing its response
521
+ cy.intercept('https://api.example.com/accounts/*').as('getAccount')
522
+ cy.visit('/accounts/123')
523
+ cy.wait('@getAccount').then((interception) => {
524
+ // we can now access the low level request
525
+ // that contains the request body,
526
+ // response body, status, etc
527
+ })
528
+ ```
529
+ */
530
+ wait(alias: string, options?: Partial<WaitOptions>): Chainable<Interception>
531
+ /**
532
+ * Wait for list of requests to complete.
533
+ *
534
+ * @see https://on.cypress.io/wait
535
+ * @param {string[]} aliases - An array of aliased routes as defined using the `.as()` command.
536
+ *
537
+ ```
538
+ // wait for 3 XHR requests to complete
539
+ cy.intercept('users/*').as('getUsers')
540
+ cy.intercept('activities/*').as('getActivities')
541
+ cy.intercept('comments/*').as('getComments')
542
+ cy.visit('/dashboard')
543
+
544
+ cy.wait(['@getUsers', '@getActivities', '@getComments'])
545
+ .then((interceptions) => {
546
+ // intercepts will now be an array of matching HTTP requests
547
+ })
548
+ ```
549
+ */
550
+ wait(alias: string[], options?: Partial<WaitOptions>): Chainable<Interception[]>
551
+ }
552
+ }
553
+ }