webdriverio 9.0.0-alpha.11 → 9.0.0-alpha.113

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.
Files changed (190) hide show
  1. package/build/cjs/index.js +0 -1
  2. package/build/commands/browser/$$.js +0 -1
  3. package/build/commands/browser/$.d.ts.map +1 -1
  4. package/build/commands/browser/$.js +10 -20
  5. package/build/commands/browser/action.js +0 -1
  6. package/build/commands/browser/actions.js +0 -1
  7. package/build/commands/browser/addCommand.js +0 -1
  8. package/build/commands/browser/call.js +0 -1
  9. package/build/commands/browser/custom$$.js +0 -1
  10. package/build/commands/browser/custom$.js +0 -1
  11. package/build/commands/browser/debug.js +0 -1
  12. package/build/commands/browser/deleteCookies.js +0 -1
  13. package/build/commands/browser/emulate.d.ts +6 -0
  14. package/build/commands/browser/emulate.d.ts.map +1 -1
  15. package/build/commands/browser/emulate.js +6 -1
  16. package/build/commands/browser/execute.js +0 -1
  17. package/build/commands/browser/executeAsync.js +0 -1
  18. package/build/commands/browser/getCookies.js +0 -1
  19. package/build/commands/browser/getPuppeteer.js +0 -1
  20. package/build/commands/browser/getWindowSize.js +0 -1
  21. package/build/commands/browser/keys.js +0 -1
  22. package/build/commands/browser/mock.d.ts +4 -7
  23. package/build/commands/browser/mock.d.ts.map +1 -1
  24. package/build/commands/browser/mock.js +4 -44
  25. package/build/commands/browser/mockClearAll.js +0 -1
  26. package/build/commands/browser/mockRestoreAll.js +0 -1
  27. package/build/commands/browser/newWindow.js +0 -1
  28. package/build/commands/browser/overwriteCommand.js +0 -1
  29. package/build/commands/browser/pause.js +0 -1
  30. package/build/commands/browser/react$$.js +0 -1
  31. package/build/commands/browser/react$.js +0 -1
  32. package/build/commands/browser/reloadSession.js +0 -1
  33. package/build/commands/browser/savePDF.js +0 -1
  34. package/build/commands/browser/saveRecordingScreen.js +0 -1
  35. package/build/commands/browser/saveScreenshot.js +0 -1
  36. package/build/commands/browser/scroll.js +0 -1
  37. package/build/commands/browser/setCookies.js +0 -1
  38. package/build/commands/browser/setTimeout.js +0 -1
  39. package/build/commands/browser/setWindowSize.js +0 -1
  40. package/build/commands/browser/switchWindow.js +0 -1
  41. package/build/commands/browser/throttle.d.ts +1 -1
  42. package/build/commands/browser/throttle.d.ts.map +1 -1
  43. package/build/commands/browser/throttle.js +0 -1
  44. package/build/commands/browser/throttleCPU.js +0 -1
  45. package/build/commands/browser/throttleNetwork.d.ts +1 -1
  46. package/build/commands/browser/throttleNetwork.d.ts.map +1 -1
  47. package/build/commands/browser/throttleNetwork.js +0 -1
  48. package/build/commands/browser/touchAction.js +0 -1
  49. package/build/commands/browser/uploadFile.js +0 -1
  50. package/build/commands/browser/url.js +0 -1
  51. package/build/commands/browser/waitUntil.js +0 -1
  52. package/build/commands/browser.js +0 -1
  53. package/build/commands/constant.js +0 -1
  54. package/build/commands/element/$$.js +0 -1
  55. package/build/commands/element/$.js +0 -1
  56. package/build/commands/element/addValue.js +0 -1
  57. package/build/commands/element/clearValue.js +0 -1
  58. package/build/commands/element/click.js +0 -1
  59. package/build/commands/element/custom$$.js +0 -1
  60. package/build/commands/element/custom$.js +0 -1
  61. package/build/commands/element/doubleClick.js +0 -1
  62. package/build/commands/element/dragAndDrop.js +0 -1
  63. package/build/commands/element/execute.d.ts +0 -1
  64. package/build/commands/element/execute.d.ts.map +1 -1
  65. package/build/commands/element/execute.js +0 -1
  66. package/build/commands/element/executeAsync.d.ts +0 -1
  67. package/build/commands/element/executeAsync.d.ts.map +1 -1
  68. package/build/commands/element/executeAsync.js +0 -1
  69. package/build/commands/element/getAttribute.js +0 -1
  70. package/build/commands/element/getCSSProperty.d.ts +1 -1
  71. package/build/commands/element/getCSSProperty.d.ts.map +1 -1
  72. package/build/commands/element/getCSSProperty.js +0 -1
  73. package/build/commands/element/getComputedLabel.js +0 -1
  74. package/build/commands/element/getComputedRole.js +0 -1
  75. package/build/commands/element/getHTML.d.ts.map +1 -1
  76. package/build/commands/element/getHTML.js +30 -51
  77. package/build/commands/element/getLocation.js +0 -1
  78. package/build/commands/element/getProperty.js +0 -1
  79. package/build/commands/element/getSize.js +0 -1
  80. package/build/commands/element/getTagName.js +0 -1
  81. package/build/commands/element/getText.js +0 -1
  82. package/build/commands/element/getValue.js +0 -1
  83. package/build/commands/element/isClickable.js +0 -1
  84. package/build/commands/element/isDisplayed.js +0 -1
  85. package/build/commands/element/isEnabled.js +0 -1
  86. package/build/commands/element/isEqual.js +0 -1
  87. package/build/commands/element/isExisting.js +0 -1
  88. package/build/commands/element/isFocused.js +0 -1
  89. package/build/commands/element/isSelected.js +0 -1
  90. package/build/commands/element/isStable.js +0 -1
  91. package/build/commands/element/moveTo.js +0 -1
  92. package/build/commands/element/nextElement.d.ts +1 -1
  93. package/build/commands/element/nextElement.d.ts.map +1 -1
  94. package/build/commands/element/nextElement.js +0 -1
  95. package/build/commands/element/parentElement.d.ts +1 -1
  96. package/build/commands/element/parentElement.d.ts.map +1 -1
  97. package/build/commands/element/parentElement.js +0 -1
  98. package/build/commands/element/previousElement.d.ts +1 -1
  99. package/build/commands/element/previousElement.d.ts.map +1 -1
  100. package/build/commands/element/previousElement.js +0 -1
  101. package/build/commands/element/react$$.js +0 -1
  102. package/build/commands/element/react$.js +0 -1
  103. package/build/commands/element/saveScreenshot.js +0 -1
  104. package/build/commands/element/scrollIntoView.js +0 -1
  105. package/build/commands/element/selectByAttribute.js +0 -1
  106. package/build/commands/element/selectByIndex.js +0 -1
  107. package/build/commands/element/selectByVisibleText.js +0 -1
  108. package/build/commands/element/setValue.js +0 -1
  109. package/build/commands/element/shadow$$.js +0 -1
  110. package/build/commands/element/shadow$.js +0 -1
  111. package/build/commands/element/touchAction.js +0 -1
  112. package/build/commands/element/waitForClickable.js +0 -1
  113. package/build/commands/element/waitForDisplayed.js +0 -1
  114. package/build/commands/element/waitForEnabled.js +0 -1
  115. package/build/commands/element/waitForExist.js +0 -1
  116. package/build/commands/element/waitForStable.js +0 -1
  117. package/build/commands/element/waitUntil.js +0 -1
  118. package/build/commands/element.js +0 -1
  119. package/build/commands/mock/abort.js +0 -1
  120. package/build/commands/mock/abortOnce.js +0 -1
  121. package/build/commands/mock/clear.js +0 -1
  122. package/build/commands/mock/respond.js +0 -1
  123. package/build/commands/mock/respondOnce.js +0 -1
  124. package/build/commands/mock/restore.js +0 -1
  125. package/build/constants.js +0 -1
  126. package/build/index.d.ts +3 -5
  127. package/build/index.d.ts.map +1 -1
  128. package/build/index.js +3 -3
  129. package/build/middlewares.d.ts.map +1 -1
  130. package/build/middlewares.js +0 -1
  131. package/build/multiremote.js +0 -1
  132. package/build/protocol-stub.js +0 -1
  133. package/build/scripts/customElement.d.ts.map +1 -1
  134. package/build/scripts/customElement.js +6 -3
  135. package/build/scripts/getHTML.js +0 -1
  136. package/build/scripts/getHTMLShadow.d.ts +11 -8
  137. package/build/scripts/getHTMLShadow.d.ts.map +1 -1
  138. package/build/scripts/getHTMLShadow.js +20 -31
  139. package/build/scripts/getProperty.js +0 -1
  140. package/build/scripts/isDescendant.js +0 -1
  141. package/build/scripts/isElementClickable.js +0 -1
  142. package/build/scripts/isElementDisplayed.js +0 -1
  143. package/build/scripts/isElementInViewport.js +0 -1
  144. package/build/scripts/isElementStable.js +0 -1
  145. package/build/scripts/isFocused.js +0 -1
  146. package/build/scripts/newWindow.js +0 -1
  147. package/build/scripts/resq.js +0 -1
  148. package/build/scripts/shadowFnFactory.js +0 -1
  149. package/build/shadowRoot.d.ts +25 -15
  150. package/build/shadowRoot.d.ts.map +1 -1
  151. package/build/shadowRoot.js +153 -49
  152. package/build/types.d.ts +29 -37
  153. package/build/types.d.ts.map +1 -1
  154. package/build/types.js +0 -1
  155. package/build/utils/SevereServiceError.js +0 -1
  156. package/build/utils/Timer.js +0 -1
  157. package/build/utils/actions/base.js +0 -1
  158. package/build/utils/actions/index.js +0 -1
  159. package/build/utils/actions/key.js +0 -1
  160. package/build/utils/actions/pointer.js +0 -1
  161. package/build/utils/actions/wheel.js +0 -1
  162. package/build/utils/detectBackend.js +0 -1
  163. package/build/utils/driver.js +0 -1
  164. package/build/utils/findStrategy.js +0 -1
  165. package/build/utils/getElementObject.d.ts +3 -3
  166. package/build/utils/getElementObject.d.ts.map +1 -1
  167. package/build/utils/getElementObject.js +20 -11
  168. package/build/utils/implicitWait.js +0 -1
  169. package/build/utils/index.d.ts +2 -8
  170. package/build/utils/index.d.ts.map +1 -1
  171. package/build/utils/index.js +71 -96
  172. package/build/utils/interception/index.d.ts +76 -22
  173. package/build/utils/interception/index.d.ts.map +1 -1
  174. package/build/utils/interception/index.js +297 -26
  175. package/build/utils/interception/types.d.ts +18 -85
  176. package/build/utils/interception/types.d.ts.map +1 -1
  177. package/build/utils/interception/types.js +0 -1
  178. package/build/utils/interception/utils.d.ts +17 -0
  179. package/build/utils/interception/utils.d.ts.map +1 -0
  180. package/build/utils/interception/utils.js +87 -0
  181. package/build/utils/refetchElement.d.ts.map +1 -1
  182. package/build/utils/refetchElement.js +6 -3
  183. package/build/utils/thirdParty/querySelectorShadowDom.js +0 -1
  184. package/package.json +11 -9
  185. package/build/utils/interception/devtools.d.ts +0 -64
  186. package/build/utils/interception/devtools.d.ts.map +0 -1
  187. package/build/utils/interception/devtools.js +0 -268
  188. package/build/utils/interception/webdriver.d.ts +0 -49
  189. package/build/utils/interception/webdriver.d.ts.map +0 -1
  190. package/build/utils/interception/webdriver.js +0 -76
@@ -1,32 +1,293 @@
1
+ /* eslint-disable no-dupe-class-members */
1
2
  import EventEmitter from 'node:events';
2
- import { minimatch } from 'minimatch';
3
+ import logger from '@wdio/logger';
4
+ import { URLPattern } from 'urlpattern-polyfill';
3
5
  import Timer from '../Timer.js';
4
- export default class Interception extends EventEmitter {
5
- url;
6
- filterOptions;
7
- browser;
8
- respondOverwrites = [];
9
- matches = [];
10
- constructor(url, filterOptions = {}, browser) {
11
- super();
12
- this.url = url;
13
- this.filterOptions = filterOptions;
14
- this.browser = browser;
15
- }
16
- waitForResponse({ timeout = this.browser.options.waitforTimeout, interval = this.browser.options.waitforInterval, timeoutMsg, } = {}) {
6
+ import { parseOverwrite, getPatternParam } from './utils.js';
7
+ import { SESSION_MOCKS } from '../../commands/browser/mock.js';
8
+ const log = logger('WebDriverInterception');
9
+ let hasSubscribedToEvents = false;
10
+ /**
11
+ * Network interception class based on a WebDriver Bidi implementation.
12
+ *
13
+ * Note: this code is executed in Node.js and in the browser, so make sure
14
+ * you use primitives that work in both environments.
15
+ */
16
+ export default class WebDriverInterception {
17
+ #pattern;
18
+ #mockId;
19
+ #browser;
20
+ #emitter = new EventEmitter();
21
+ #restored = false;
22
+ #respondOverwrites = [];
23
+ #calls = [];
24
+ constructor(pattern, mockId, browser) {
25
+ this.#pattern = pattern;
26
+ this.#mockId = mockId;
27
+ this.#browser = browser;
28
+ /**
29
+ * attach network listener to this mock
30
+ */
31
+ browser.on('network.beforeRequestSent', this.#handleBeforeRequestSent.bind(this));
32
+ browser.on('network.responseStarted', this.#handleResponseStarted.bind(this));
33
+ }
34
+ static async initiate(url,
35
+ /**
36
+ * ToDo(Christian): incorporate filterOptions
37
+ */
38
+ filterOptions, browser) {
39
+ const pattern = parseUrlPattern(url);
40
+ if (!hasSubscribedToEvents) {
41
+ await browser.sessionSubscribe({
42
+ events: [
43
+ 'network.beforeRequestSent',
44
+ 'network.responseStarted'
45
+ ]
46
+ });
47
+ log.info('subscribed to network events');
48
+ hasSubscribedToEvents = true;
49
+ }
50
+ /**
51
+ * register network intercept
52
+ */
53
+ const interception = await browser.networkAddIntercept({
54
+ phases: ['beforeRequestSent', 'responseStarted'],
55
+ urlPatterns: [{
56
+ type: 'pattern',
57
+ protocol: getPatternParam(pattern, 'protocol'),
58
+ hostname: getPatternParam(pattern, 'hostname'),
59
+ pathname: getPatternParam(pattern, 'pathname'),
60
+ port: getPatternParam(pattern, 'port'),
61
+ search: getPatternParam(pattern, 'search')
62
+ }]
63
+ });
64
+ return new WebDriverInterception(pattern, interception.intercept, browser);
65
+ }
66
+ #handleBeforeRequestSent(request) {
67
+ /**
68
+ * don't do anything if:
69
+ * - request is not blocked
70
+ * - request is not matching the pattern, e.g. a different mock is responsible for this request
71
+ */
72
+ if (!this.#isRequestMatching(request)) {
73
+ return;
74
+ }
75
+ /**
76
+ * continue the request without modifications, if:
77
+ */
78
+ const continueRequest = (
79
+ /**
80
+ * - mock has no request/respond overwrites
81
+ * - no request modifications are set
82
+ * - no errorReason is set
83
+ * - no requestWith is set
84
+ */
85
+ this.#respondOverwrites.length === 0 ||
86
+ (!this.#respondOverwrites[0].abort &&
87
+ !this.#respondOverwrites[0].requestWith));
88
+ /**
89
+ * check if request matches the mock url
90
+ */
91
+ if (continueRequest) {
92
+ this.#emitter.emit('continue', request.request.request);
93
+ return this.#browser.networkContinueRequest({
94
+ request: request.request.request
95
+ });
96
+ }
97
+ this.#emitter.emit('request', request);
98
+ const { requestWith, abort } = this.#respondOverwrites[0].once
99
+ ? this.#respondOverwrites.shift() || {}
100
+ : this.#respondOverwrites[0];
101
+ /**
102
+ * check if should abort the request
103
+ */
104
+ if (abort) {
105
+ this.#emitter.emit('fail', request.request.request);
106
+ return this.#browser.networkFailRequest({ request: request.request.request });
107
+ }
108
+ /**
109
+ * continue request (possibly with overwrites)
110
+ */
111
+ if (requestWith) {
112
+ this.#emitter.emit('overwrite', request);
113
+ return this.#browser.networkContinueRequest({
114
+ request: request.request.request,
115
+ ...parseOverwrite(requestWith, request)
116
+ });
117
+ }
118
+ throw new Error('This should never happen');
119
+ }
120
+ #handleResponseStarted(request) {
121
+ /**
122
+ * don't do anything if:
123
+ * - request is not blocked
124
+ * - request is not matching the pattern, e.g. a different mock is responsible for this request
125
+ */
126
+ if (!this.#isRequestMatching(request)) {
127
+ return;
128
+ }
129
+ /**
130
+ * continue the request without modifications, if:
131
+ */
132
+ const continueRequest = (
133
+ /**
134
+ * - mock has no request/respond overwrites
135
+ * - no request modifications are set, e.g. no overwrite is set
136
+ */
137
+ this.#respondOverwrites.length === 0 ||
138
+ !this.#respondOverwrites[0].overwrite);
139
+ /**
140
+ * check if request matches the mock url
141
+ */
142
+ if (continueRequest) {
143
+ this.#emitter.emit('continue', request.request.request);
144
+ return this.#browser.networkProvideResponse({
145
+ request: request.request.request
146
+ });
147
+ }
148
+ this.#calls.push(request);
149
+ const { overwrite } = this.#respondOverwrites[0].once
150
+ ? this.#respondOverwrites.shift() || {}
151
+ : this.#respondOverwrites[0];
152
+ /**
153
+ * continue request (possibly with overwrites)
154
+ */
155
+ if (overwrite) {
156
+ this.#emitter.emit('overwrite', request);
157
+ return this.#browser.networkProvideResponse({
158
+ request: request.request.request,
159
+ ...parseOverwrite(overwrite, request)
160
+ });
161
+ }
162
+ /**
163
+ * continue request as is
164
+ */
165
+ this.#emitter.emit('continue', request.request.request);
166
+ return this.#browser.networkProvideResponse({
167
+ request: request.request.request
168
+ });
169
+ }
170
+ #isRequestMatching(request) {
171
+ return request.isBlocked && this.#pattern && this.#pattern.test(request.request.url);
172
+ }
173
+ /**
174
+ * allows access to all requests made with given pattern
175
+ */
176
+ get calls() {
177
+ return this.#calls;
178
+ }
179
+ /**
180
+ * Resets all information stored in the `mock.calls` set.
181
+ */
182
+ clear() {
183
+ this.#calls = [];
184
+ return this;
185
+ }
186
+ /**
187
+ * Does what `mock.clear()` does and makes removes custom request overrides
188
+ * and response overwrites
189
+ */
190
+ reset() {
191
+ this.clear();
192
+ this.#respondOverwrites = [];
193
+ return this;
194
+ }
195
+ /**
196
+ * Does everything that `mock.reset()` does, and also
197
+ * removes any mocked return values or implementations.
198
+ * Restored mock does not emit events and could not mock responses
199
+ */
200
+ async restore() {
201
+ this.reset();
202
+ this.#respondOverwrites = [];
203
+ this.#restored = true;
204
+ const handle = await this.#browser.getWindowHandle();
205
+ log.trace(`Restoring mock for ${handle}`);
206
+ SESSION_MOCKS[handle].delete(this);
207
+ if (this.#mockId) {
208
+ await this.#browser.networkRemoveIntercept({ intercept: this.#mockId });
209
+ }
210
+ return this;
211
+ }
212
+ /**
213
+ * Always respond with same overwrite
214
+ * @param {*} overwrites payload to overwrite the response
215
+ * @param {*} params additional respond parameters to overwrite
216
+ * @param {boolean} once apply overwrite only once for the next request
217
+ */
218
+ respond(payload, params = {}, once) {
219
+ this.#ensureNotRestored();
220
+ const body = typeof payload === 'string'
221
+ ? payload
222
+ : globalThis.Buffer && globalThis.Buffer.isBuffer(payload)
223
+ ? payload.toString('base64')
224
+ : JSON.stringify(payload);
225
+ const overwrite = { body, ...params };
226
+ this.#respondOverwrites.push({ overwrite, once });
227
+ return this;
228
+ }
229
+ /**
230
+ * alias for `mock.respond(…, true)`
231
+ */
232
+ respondOnce(payload, params = {}) {
233
+ return this.respond(payload, params, true);
234
+ }
235
+ /**
236
+ * Abort the request with an error code
237
+ * @param {string} errorReason error code of the response
238
+ * @param {boolean} once if request should be aborted only once for the next request
239
+ */
240
+ abort(once) {
241
+ this.#ensureNotRestored();
242
+ this.#respondOverwrites.push({ abort: true, once });
243
+ return this;
244
+ }
245
+ /**
246
+ * alias for `mock.abort(true)`
247
+ */
248
+ abortOnce() {
249
+ return this.abort(true);
250
+ }
251
+ /**
252
+ * Redirect request to another URL
253
+ * @param {string} redirectUrl URL to redirect to
254
+ * @param {boolean} sticky if request should be redirected for all following requests
255
+ */
256
+ redirect(redirectUrl, once) {
257
+ this.#ensureNotRestored();
258
+ const requestWith = { url: redirectUrl };
259
+ this.#respondOverwrites.push({ requestWith, once });
260
+ return this;
261
+ }
262
+ /**
263
+ * alias for `mock.redirect(…, true)`
264
+ */
265
+ redirectOnce(redirectUrl) {
266
+ return this.redirect(redirectUrl, true);
267
+ }
268
+ on(event, callback) {
269
+ this.#emitter.on(event, callback);
270
+ return this;
271
+ }
272
+ #ensureNotRestored() {
273
+ if (this.#restored) {
274
+ throw new Error('This can\'t be done on restored mock');
275
+ }
276
+ }
277
+ waitForResponse({ timeout = this.#browser.options.waitforTimeout, interval = this.#browser.options.waitforInterval, timeoutMsg, } = {}) {
17
278
  /*!
18
279
  * ensure that timeout and interval are set properly
19
280
  */
20
281
  if (typeof timeout !== 'number') {
21
- timeout = this.browser.options.waitforTimeout;
282
+ timeout = this.#browser.options.waitforTimeout;
22
283
  }
23
284
  if (typeof interval !== 'number') {
24
- interval = this.browser.options.waitforInterval;
285
+ interval = this.#browser.options.waitforInterval;
25
286
  }
26
287
  /* istanbul ignore next */
27
288
  const fn = async () => this.calls && (await this.calls).length > 0;
28
289
  const timer = new Timer(interval, timeout, fn, true);
29
- return this.browser.call(() => timer.catch((e) => {
290
+ return this.#browser.call(() => timer.catch((e) => {
30
291
  if (e.message === 'timeout') {
31
292
  if (typeof timeoutMsg === 'string') {
32
293
  throw new Error(timeoutMsg);
@@ -36,14 +297,24 @@ export default class Interception extends EventEmitter {
36
297
  throw new Error(`waitForResponse failed with the following reason: ${(e && e.message) || e}`);
37
298
  }));
38
299
  }
39
- static isMatchingRequest(expectedUrl, actualUrl) {
40
- if (typeof expectedUrl === 'string') {
41
- return minimatch(actualUrl, expectedUrl);
42
- }
43
- if (expectedUrl instanceof RegExp) {
44
- return Boolean(actualUrl.match(expectedUrl));
45
- }
46
- throw new Error(`Unexpected type for mock url: ${expectedUrl}`);
300
+ }
301
+ export function parseUrlPattern(url) {
302
+ /**
303
+ * return early if it's already a URLPattern
304
+ */
305
+ if (typeof url === 'object') {
306
+ return url;
307
+ }
308
+ /**
309
+ * parse URLPattern from absolute URL
310
+ */
311
+ if (url.startsWith('http')) {
312
+ return new URLPattern(url);
47
313
  }
314
+ /**
315
+ * parse URLPattern from relative URL
316
+ */
317
+ return new URLPattern({
318
+ pathname: url
319
+ });
48
320
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW50ZXJjZXB0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sWUFBWSxNQUFNLGFBQWEsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXJDLE9BQU8sS0FBSyxNQUFNLGFBQWEsQ0FBQTtBQUsvQixNQUFNLENBQUMsT0FBTyxPQUFnQixZQUFhLFNBQVEsWUFBWTtJQWtCaEQ7SUFDQTtJQUNBO0lBWFgsaUJBQWlCLEdBS1gsRUFBRSxDQUFBO0lBQ1IsT0FBTyxHQUFjLEVBQUUsQ0FBQTtJQUV2QixZQUNXLEdBQW9CLEVBQ3BCLGdCQUFtQyxFQUFFLEVBQ3JDLE9BQTRCO1FBRW5DLEtBQUssRUFBRSxDQUFBO1FBSkEsUUFBRyxHQUFILEdBQUcsQ0FBaUI7UUFDcEIsa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBQ3JDLFlBQU8sR0FBUCxPQUFPLENBQXFCO0lBR3ZDLENBQUM7SUFFRCxlQUFlLENBQUUsRUFDYixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUM3QyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUMvQyxVQUFVLE1BQ00sRUFBRTtRQUNsQjs7V0FFRztRQUNILElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQXdCLENBQUE7UUFDM0QsQ0FBQztRQUVELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQXlCLENBQUE7UUFDN0QsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixNQUFNLEVBQUUsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBQ2xFLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBNEIsQ0FBQTtRQUUvRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM3QyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzFCLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBQy9CLENBQUM7Z0JBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsT0FBTyxJQUFJLENBQUMsQ0FBQTtZQUNuRSxDQUFDO1lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDakcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNQLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUUsV0FBNEIsRUFBRSxTQUFpQjtRQUNyRSxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQTtRQUM1QyxDQUFDO1FBQ0QsSUFBSSxXQUFXLFlBQVksTUFBTSxFQUFFLENBQUM7WUFDaEMsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO1FBQ2hELENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQ25FLENBQUM7Q0FDSiJ9
@@ -1,80 +1,5 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import type { CDPSession } from 'puppeteer-core';
3
- import type { JsonCompatible } from '@wdio/types';
4
- /**
5
- * HTTP request data. (copied from the puppeteer-core package as there is currently
6
- * no way to access these types otherwise)
7
- */
8
- export type ResourcePriority = 'VeryLow' | 'Low' | 'Medium' | 'High' | 'VeryHigh';
9
- export type MixedContentType = 'blockable' | 'optionally-blockable' | 'none';
10
- export type ReferrerPolicy = 'unsafe-url' | 'no-referrer-when-downgrade' | 'no-referrer' | 'origin' | 'origin-when-cross-origin' | 'same-origin' | 'strict-origin' | 'strict-origin-when-cross-origin';
11
- export type ErrorReason = 'Failed' | 'Aborted' | 'TimedOut' | 'AccessDenied' | 'ConnectionClosed' | 'ConnectionReset' | 'ConnectionRefused' | 'ConnectionAborted' | 'ConnectionFailed' | 'NameNotResolved' | 'InternetDisconnected' | 'AddressUnreachable' | 'BlockedByClient' | 'BlockedByResponse';
12
- export interface Request {
13
- /**
14
- * Request URL (without fragment).
15
- */
16
- url: string;
17
- /**
18
- * Fragment of the requested URL starting with hash, if present.
19
- */
20
- urlFragment?: string;
21
- /**
22
- * HTTP request method.
23
- */
24
- method: string;
25
- /**
26
- * HTTP request headers.
27
- */
28
- headers: Record<string, string>;
29
- /**
30
- * HTTP POST request data.
31
- */
32
- postData?: string;
33
- /**
34
- * True when the request has POST data. Note that postData might still be omitted when this flag is true when the data is too long.
35
- */
36
- hasPostData?: boolean;
37
- /**
38
- * The mixed content export type of the request.
39
- */
40
- mixedContentType?: MixedContentType;
41
- /**
42
- * Priority of the resource request at the time request is sent.
43
- */
44
- initialPriority: ResourcePriority;
45
- /**
46
- * The referrer policy of the request, as defined in https://www.w3.org/TR/referrer-policy/
47
- */
48
- referrerPolicy: ReferrerPolicy;
49
- /**
50
- * Whether is loaded via link preload.
51
- */
52
- isLinkPreload?: boolean;
53
- }
54
- export interface Matches extends Request {
55
- /**
56
- * body response of actual resource
57
- */
58
- body: string | Buffer | JsonCompatible;
59
- /**
60
- * HTTP response headers.
61
- */
62
- responseHeaders: Record<string, string>;
63
- /**
64
- * HTTP response status code.
65
- */
66
- statusCode: number;
67
- }
68
- export type MockOverwriteFunction = (request: Matches, client: CDPSession) => Promise<string | Record<string, any>>;
69
- export type MockOverwrite = string | Record<string, any> | MockOverwriteFunction;
70
- export type MockResponseParams = {
71
- statusCode?: number | ((request: Matches) => number);
72
- headers?: Record<string, string> | ((request: Matches) => Record<string, string>);
73
- /**
74
- * fetch real response before responding with mocked data. Default: true
75
- */
76
- fetchResponse?: boolean;
77
- };
1
+ import type { local } from 'webdriver';
2
+ import type { Cookie } from '@wdio/protocols';
78
3
  export type MockFilterOptions = {
79
4
  method?: string | ((method: string) => boolean);
80
5
  headers?: Record<string, string> | ((headers: Record<string, string>) => boolean);
@@ -83,13 +8,21 @@ export type MockFilterOptions = {
83
8
  statusCode?: number | ((statusCode: number) => boolean);
84
9
  postData?: string | ((payload: string | undefined) => boolean);
85
10
  };
86
- export type ErrorCode = 'Failed' | 'Aborted' | 'TimedOut' | 'AccessDenied' | 'ConnectionClosed' | 'ConnectionReset' | 'ConnectionRefused' | 'ConnectionAborted' | 'ConnectionFailed' | 'NameNotResolved' | 'InternetDisconnected' | 'AddressUnreachable' | 'BlockedByClient' | 'BlockedByResponse';
87
- export type ThrottlePreset = 'offline' | 'GPRS' | 'Regular2G' | 'Good2G' | 'Regular3G' | 'Good3G' | 'Regular4G' | 'DSL' | 'WiFi' | 'online';
88
- export interface CustomThrottle {
89
- offline: boolean;
90
- downloadThroughput: number;
91
- uploadThroughput: number;
92
- latency: number;
11
+ type Overwrite<T, Request> = T | ((request: Request) => T);
12
+ type Methods = 'POST' | 'GET' | 'DELETE' | 'PUT' | 'PATCH' | 'OPTIONS' | 'HEAD';
13
+ export interface RequestWithOptions {
14
+ body?: Overwrite<any, local.NetworkBeforeRequestSentParameters>;
15
+ cookies?: Overwrite<Cookie[], local.NetworkBeforeRequestSentParameters>;
16
+ headers?: Overwrite<Record<string, string>, local.NetworkBeforeRequestSentParameters>;
17
+ method?: Overwrite<Methods, local.NetworkBeforeRequestSentParameters>;
18
+ url?: Overwrite<string, local.NetworkBeforeRequestSentParameters>;
19
+ }
20
+ export interface RespondWithOptions extends Omit<RequestWithOptions, 'url' | 'method'> {
21
+ statusCode?: Overwrite<number, local.NetworkResponseCompletedParameters>;
22
+ }
23
+ export interface MockRequestOptions {
24
+ requestWith?: RequestWithOptions;
93
25
  }
94
- export type ThrottleOptions = ThrottlePreset | CustomThrottle;
26
+ export type MockOptions = MockFilterOptions & MockRequestOptions;
27
+ export {};
95
28
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/interception/types.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAA;AACjF,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,sBAAsB,GAAG,MAAM,CAAA;AAC5E,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,4BAA4B,GAAG,aAAa,GAAG,QAAQ,GAAG,0BAA0B,GAAG,aAAa,GAAG,eAAe,GAAG,iCAAiC,CAAA;AACtM,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,sBAAsB,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,mBAAmB,CAAA;AACpS,MAAM,WAAW,OAAO;IACpB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC;;OAEG;IACH,eAAe,EAAE,gBAAgB,CAAA;IACjC;;OAEG;IACH,cAAc,EAAE,cAAc,CAAA;IAC9B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,OAAQ,SAAQ,OAAO;IACpC;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,cAAc,CAAA;IACtC;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;AACnH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,qBAAqB,CAAA;AAEhF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,CAAA;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACjF;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAA;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAA;IACjF,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAA;IACxF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAA;IACzF,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,CAAA;IACvD,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,CAAA;CACjE,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,sBAAsB,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,mBAAmB,CAAA;AAElS,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;AAC3I,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;CAClB;AACD,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,cAAc,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/interception/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,MAAM,MAAM,iBAAiB,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAA;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAA;IACjF,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAA;IACxF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAA;IACzF,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,CAAA;IACvD,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,CAAA;CACjE,CAAA;AAED,KAAK,SAAS,CAAE,CAAC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,CAAC,CAAA;AAC3D,KAAK,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;AAE/E,MAAM,WAAW,kBAAkB;IAC/B,IAAI,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;IAC/D,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACvE,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrF,MAAM,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrE,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;CACpE;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,KAAK,GAAG,QAAQ,CAAC;IAClF,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;CAC3E;AAED,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAA;CACnC;AAED,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,kBAAkB,CAAA"}
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW50ZXJjZXB0aW9uL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,17 @@
1
+ import type { local, remote } from 'webdriver';
2
+ import type { RequestWithOptions, RespondWithOptions } from './types.js';
3
+ /**
4
+ * parse request or response overwrites to make it compatible with Bidis protocol
5
+ * @param overwrite request or response overwrite
6
+ * @returns object to pass to the protocol
7
+ */
8
+ export declare function parseOverwrite(overwrite: RequestWithOptions | RespondWithOptions, request: local.NetworkBeforeRequestSentParameters | local.NetworkResponseCompletedParameters): {
9
+ body: remote.NetworkBytesValue | undefined;
10
+ headers: remote.NetworkHeader[];
11
+ cookies: remote.NetworkSetCookieHeader[];
12
+ method: string | undefined;
13
+ statusCode: number | undefined;
14
+ url: string | undefined;
15
+ };
16
+ export declare function getPatternParam(pattern: URLPattern, key: keyof Omit<remote.NetworkUrlPatternPattern, 'type'>): string | undefined;
17
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils/interception/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAExE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,kBAAkB,GAAG,kBAAkB,EAAE,OAAO,EAAE,KAAK,CAAC,kCAAkC,GAAG,KAAK,CAAC,kCAAkC;;;;;;;EA6E9K;AAED,wBAAgB,eAAe,CAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC,sBAU7G"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * parse request or response overwrites to make it compatible with Bidis protocol
3
+ * @param overwrite request or response overwrite
4
+ * @returns object to pass to the protocol
5
+ */
6
+ export function parseOverwrite(overwrite, request) {
7
+ let body = undefined;
8
+ if ('body' in overwrite && overwrite.body) {
9
+ const bodyOverwrite = typeof overwrite.body === 'function'
10
+ ? overwrite.body(request)
11
+ : overwrite.body;
12
+ body = typeof bodyOverwrite === 'string' ?
13
+ /**
14
+ * if body is a string we can pass it as is
15
+ */
16
+ {
17
+ type: 'string',
18
+ value: bodyOverwrite
19
+ }
20
+ :
21
+ /**
22
+ * if body is an object we need to encode it
23
+ */
24
+ {
25
+ type: 'base64',
26
+ value: globalThis.Buffer
27
+ ? globalThis.Buffer.from(JSON.stringify(bodyOverwrite || '')).toString('base64')
28
+ : btoa(JSON.stringify(bodyOverwrite))
29
+ };
30
+ }
31
+ let headers = [];
32
+ const headersOverwrite = typeof overwrite.headers === 'function'
33
+ ? overwrite.headers(request)
34
+ : overwrite.headers;
35
+ if (headersOverwrite) {
36
+ headers = Object.entries(headersOverwrite).map(([name, value]) => ({
37
+ name,
38
+ value: { type: 'string', value }
39
+ }));
40
+ }
41
+ let cookies = [];
42
+ if ('cookies' in overwrite && overwrite.cookies) {
43
+ const cookieOverwrite = typeof overwrite.cookies === 'function'
44
+ ? overwrite.cookies(request) || []
45
+ : overwrite.cookies;
46
+ cookies = cookieOverwrite.map((cookie) => ({
47
+ name: cookie.name,
48
+ value: {
49
+ type: 'string',
50
+ value: cookie.value
51
+ },
52
+ domain: cookie.domain,
53
+ path: cookie.path,
54
+ expires: cookie.expiry,
55
+ httpOnly: cookie.httpOnly,
56
+ secure: cookie.secure,
57
+ sameSite: cookie.sameSite?.toLowerCase(),
58
+ }));
59
+ }
60
+ let statusCode = undefined;
61
+ if ('statusCode' in overwrite && overwrite.statusCode) {
62
+ const statusCodeOverwrite = typeof overwrite.statusCode === 'function'
63
+ ? overwrite.statusCode(request)
64
+ : overwrite.statusCode;
65
+ statusCode = statusCodeOverwrite;
66
+ }
67
+ const method = 'method' in overwrite
68
+ ? typeof overwrite.method === 'function'
69
+ ? overwrite.method(request)
70
+ : overwrite.method
71
+ : undefined;
72
+ const url = 'url' in overwrite
73
+ ? typeof overwrite.url === 'function'
74
+ ? overwrite.url(request)
75
+ : overwrite.url
76
+ : undefined;
77
+ return { body, headers, cookies, method, statusCode, url };
78
+ }
79
+ export function getPatternParam(pattern, key) {
80
+ if (key !== 'pathname' && pattern[key] === '*') {
81
+ return;
82
+ }
83
+ if (key === 'port' && pattern.port === '') {
84
+ return pattern.protocol === 'https' ? '443' : '80';
85
+ }
86
+ return pattern[key].replaceAll('*', '\\*');
87
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"refetchElement.d.ts","sourceRoot":"","sources":["../../src/utils/refetchElement.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAA8B,cAAc,CACxC,cAAc,EAAE,WAAW,CAAC,OAAO,EACnC,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CA0B9B"}
1
+ {"version":3,"file":"refetchElement.d.ts","sourceRoot":"","sources":["../../src/utils/refetchElement.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAA8B,cAAc,CACxC,cAAc,EAAE,WAAW,CAAC,OAAO,EACnC,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CA8B9B"}
@@ -5,14 +5,18 @@ import implicitWait from './implicitWait.js';
5
5
  */
6
6
  export default async function refetchElement(currentElement, commandName) {
7
7
  const selectors = [];
8
- //Crawl back to the browser object, and cache all selectors
8
+ /**
9
+ * Crawl back to the browser object, and cache all selectors
10
+ */
9
11
  while (currentElement.elementId && currentElement.parent) {
10
12
  selectors.push({ selector: currentElement.selector, index: currentElement.index || 0 });
11
13
  currentElement = currentElement.parent;
12
14
  }
13
15
  selectors.reverse();
14
16
  const length = selectors.length;
15
- // Beginning with the browser object, rechain
17
+ /**
18
+ * Beginning with the browser object, re-chain
19
+ */
16
20
  return selectors.reduce(async (elementPromise, { selector, index }, currentIndex) => {
17
21
  const resolvedElement = await elementPromise;
18
22
  let nextElement = index > 0 ? (await resolvedElement.$$(selector))[index] : null;
@@ -24,4 +28,3 @@ export default async function refetchElement(currentElement, commandName) {
24
28
  return await implicitWait(nextElement, currentIndex + 1 < length ? '$' : commandName);
25
29
  }, Promise.resolve(currentElement));
26
30
  }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXRjaEVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVmZXRjaEVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLE1BQU0sbUJBQW1CLENBQUE7QUFHNUM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUN4QyxjQUFtQyxFQUNuQyxXQUFtQjtJQUVuQixNQUFNLFNBQVMsR0FHVCxFQUFFLENBQUE7SUFFUiwyREFBMkQ7SUFDM0QsT0FBTyxjQUFjLENBQUMsU0FBUyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2RCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN2RixjQUFjLEdBQUcsY0FBYyxDQUFDLE1BQTZCLENBQUE7SUFDakUsQ0FBQztJQUNELFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUVuQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFBO0lBRS9CLDZDQUE2QztJQUM3QyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRTtRQUNoRixNQUFNLGVBQWUsR0FBRyxNQUFNLGNBQWMsQ0FBQTtRQUM1QyxJQUFJLFdBQVcsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sZUFBZSxDQUFDLEVBQUUsQ0FBQyxRQUFrQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQzFGLFdBQVcsR0FBRyxXQUFXLElBQUksTUFBTSxlQUFlLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzlEOzs7V0FHRztRQUNILE9BQU8sTUFBTSxZQUFZLENBQUMsV0FBVyxFQUFFLFlBQVksR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3pGLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7QUFDdkMsQ0FBQyJ9
@@ -268,4 +268,3 @@ export default function querySelectorAllDeep(findMany, s, r) {
268
268
  }
269
269
  return _querySelectorDeep(s, r || document);
270
270
  }
271
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnlTZWxlY3RvclNoYWRvd0RvbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy90aGlyZFBhcnR5L3F1ZXJ5U2VsZWN0b3JTaGFkb3dEb20udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0NBQWdDO0FBQ2hDLDhCQUE4QjtBQUM5QiwwQkFBMEI7QUFDMUI7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sVUFBVSxvQkFBb0IsQ0FBRSxRQUFpQixFQUFFLENBQVMsRUFBRSxDQUFxQjtJQUM3RixTQUFTLGlCQUFpQixDQUFFLEdBQVc7UUFDbkMsOEJBQThCO1FBQzlCLFNBQVMsYUFBYTtZQUNsQixJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNaLHNDQUFzQztnQkFDdEMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDakUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDcEIsQ0FBQztnQkFFRCxzQkFBc0I7Z0JBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDMUIsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBYSxFQUFFLEVBQ3ZCLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNYLG1CQUFtQixHQUFHLGlDQUFpQyxFQUN2RCxrQkFBa0IsR0FBRyxPQUFPLEVBQzVCLGNBQWMsR0FBRztZQUNiLHFCQUFxQixFQUFFLFVBQVU7WUFDakMscUJBQXFCLEVBQUUsV0FBVztZQUNsQyxxQkFBcUIsRUFBRSxXQUFXO1lBQ2xDLElBQUksRUFBRSwrQkFBK0I7WUFDckMsT0FBTyxFQUFFLFVBQVU7U0FDVixDQUFBO1FBQ2pCLElBQUksS0FBSyxFQUNMLFNBQWlCLEVBQ2pCLEtBQWEsRUFDYixj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