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.
- package/build/cjs/index.js +0 -1
- package/build/commands/browser/$$.js +0 -1
- package/build/commands/browser/$.d.ts.map +1 -1
- package/build/commands/browser/$.js +10 -20
- package/build/commands/browser/action.js +0 -1
- package/build/commands/browser/actions.js +0 -1
- package/build/commands/browser/addCommand.js +0 -1
- package/build/commands/browser/call.js +0 -1
- package/build/commands/browser/custom$$.js +0 -1
- package/build/commands/browser/custom$.js +0 -1
- package/build/commands/browser/debug.js +0 -1
- package/build/commands/browser/deleteCookies.js +0 -1
- package/build/commands/browser/emulate.d.ts +6 -0
- package/build/commands/browser/emulate.d.ts.map +1 -1
- package/build/commands/browser/emulate.js +6 -1
- package/build/commands/browser/execute.js +0 -1
- package/build/commands/browser/executeAsync.js +0 -1
- package/build/commands/browser/getCookies.js +0 -1
- package/build/commands/browser/getPuppeteer.js +0 -1
- package/build/commands/browser/getWindowSize.js +0 -1
- package/build/commands/browser/keys.js +0 -1
- package/build/commands/browser/mock.d.ts +4 -7
- package/build/commands/browser/mock.d.ts.map +1 -1
- package/build/commands/browser/mock.js +4 -44
- package/build/commands/browser/mockClearAll.js +0 -1
- package/build/commands/browser/mockRestoreAll.js +0 -1
- package/build/commands/browser/newWindow.js +0 -1
- package/build/commands/browser/overwriteCommand.js +0 -1
- package/build/commands/browser/pause.js +0 -1
- package/build/commands/browser/react$$.js +0 -1
- package/build/commands/browser/react$.js +0 -1
- package/build/commands/browser/reloadSession.js +0 -1
- package/build/commands/browser/savePDF.js +0 -1
- package/build/commands/browser/saveRecordingScreen.js +0 -1
- package/build/commands/browser/saveScreenshot.js +0 -1
- package/build/commands/browser/scroll.js +0 -1
- package/build/commands/browser/setCookies.js +0 -1
- package/build/commands/browser/setTimeout.js +0 -1
- package/build/commands/browser/setWindowSize.js +0 -1
- package/build/commands/browser/switchWindow.js +0 -1
- package/build/commands/browser/throttle.d.ts +1 -1
- package/build/commands/browser/throttle.d.ts.map +1 -1
- package/build/commands/browser/throttle.js +0 -1
- package/build/commands/browser/throttleCPU.js +0 -1
- package/build/commands/browser/throttleNetwork.d.ts +1 -1
- package/build/commands/browser/throttleNetwork.d.ts.map +1 -1
- package/build/commands/browser/throttleNetwork.js +0 -1
- package/build/commands/browser/touchAction.js +0 -1
- package/build/commands/browser/uploadFile.js +0 -1
- package/build/commands/browser/url.js +0 -1
- package/build/commands/browser/waitUntil.js +0 -1
- package/build/commands/browser.js +0 -1
- package/build/commands/constant.js +0 -1
- package/build/commands/element/$$.js +0 -1
- package/build/commands/element/$.js +0 -1
- package/build/commands/element/addValue.js +0 -1
- package/build/commands/element/clearValue.js +0 -1
- package/build/commands/element/click.js +0 -1
- package/build/commands/element/custom$$.js +0 -1
- package/build/commands/element/custom$.js +0 -1
- package/build/commands/element/doubleClick.js +0 -1
- package/build/commands/element/dragAndDrop.js +0 -1
- package/build/commands/element/execute.d.ts +0 -1
- package/build/commands/element/execute.d.ts.map +1 -1
- package/build/commands/element/execute.js +0 -1
- package/build/commands/element/executeAsync.d.ts +0 -1
- package/build/commands/element/executeAsync.d.ts.map +1 -1
- package/build/commands/element/executeAsync.js +0 -1
- package/build/commands/element/getAttribute.js +0 -1
- package/build/commands/element/getCSSProperty.d.ts +1 -1
- package/build/commands/element/getCSSProperty.d.ts.map +1 -1
- package/build/commands/element/getCSSProperty.js +0 -1
- package/build/commands/element/getComputedLabel.js +0 -1
- package/build/commands/element/getComputedRole.js +0 -1
- package/build/commands/element/getHTML.d.ts.map +1 -1
- package/build/commands/element/getHTML.js +30 -51
- package/build/commands/element/getLocation.js +0 -1
- package/build/commands/element/getProperty.js +0 -1
- package/build/commands/element/getSize.js +0 -1
- package/build/commands/element/getTagName.js +0 -1
- package/build/commands/element/getText.js +0 -1
- package/build/commands/element/getValue.js +0 -1
- package/build/commands/element/isClickable.js +0 -1
- package/build/commands/element/isDisplayed.js +0 -1
- package/build/commands/element/isEnabled.js +0 -1
- package/build/commands/element/isEqual.js +0 -1
- package/build/commands/element/isExisting.js +0 -1
- package/build/commands/element/isFocused.js +0 -1
- package/build/commands/element/isSelected.js +0 -1
- package/build/commands/element/isStable.js +0 -1
- package/build/commands/element/moveTo.js +0 -1
- package/build/commands/element/nextElement.d.ts +1 -1
- package/build/commands/element/nextElement.d.ts.map +1 -1
- package/build/commands/element/nextElement.js +0 -1
- package/build/commands/element/parentElement.d.ts +1 -1
- package/build/commands/element/parentElement.d.ts.map +1 -1
- package/build/commands/element/parentElement.js +0 -1
- package/build/commands/element/previousElement.d.ts +1 -1
- package/build/commands/element/previousElement.d.ts.map +1 -1
- package/build/commands/element/previousElement.js +0 -1
- package/build/commands/element/react$$.js +0 -1
- package/build/commands/element/react$.js +0 -1
- package/build/commands/element/saveScreenshot.js +0 -1
- package/build/commands/element/scrollIntoView.js +0 -1
- package/build/commands/element/selectByAttribute.js +0 -1
- package/build/commands/element/selectByIndex.js +0 -1
- package/build/commands/element/selectByVisibleText.js +0 -1
- package/build/commands/element/setValue.js +0 -1
- package/build/commands/element/shadow$$.js +0 -1
- package/build/commands/element/shadow$.js +0 -1
- package/build/commands/element/touchAction.js +0 -1
- package/build/commands/element/waitForClickable.js +0 -1
- package/build/commands/element/waitForDisplayed.js +0 -1
- package/build/commands/element/waitForEnabled.js +0 -1
- package/build/commands/element/waitForExist.js +0 -1
- package/build/commands/element/waitForStable.js +0 -1
- package/build/commands/element/waitUntil.js +0 -1
- package/build/commands/element.js +0 -1
- package/build/commands/mock/abort.js +0 -1
- package/build/commands/mock/abortOnce.js +0 -1
- package/build/commands/mock/clear.js +0 -1
- package/build/commands/mock/respond.js +0 -1
- package/build/commands/mock/respondOnce.js +0 -1
- package/build/commands/mock/restore.js +0 -1
- package/build/constants.js +0 -1
- package/build/index.d.ts +3 -5
- package/build/index.d.ts.map +1 -1
- package/build/index.js +3 -3
- package/build/middlewares.d.ts.map +1 -1
- package/build/middlewares.js +0 -1
- package/build/multiremote.js +0 -1
- package/build/protocol-stub.js +0 -1
- package/build/scripts/customElement.d.ts.map +1 -1
- package/build/scripts/customElement.js +6 -3
- package/build/scripts/getHTML.js +0 -1
- package/build/scripts/getHTMLShadow.d.ts +11 -8
- package/build/scripts/getHTMLShadow.d.ts.map +1 -1
- package/build/scripts/getHTMLShadow.js +20 -31
- package/build/scripts/getProperty.js +0 -1
- package/build/scripts/isDescendant.js +0 -1
- package/build/scripts/isElementClickable.js +0 -1
- package/build/scripts/isElementDisplayed.js +0 -1
- package/build/scripts/isElementInViewport.js +0 -1
- package/build/scripts/isElementStable.js +0 -1
- package/build/scripts/isFocused.js +0 -1
- package/build/scripts/newWindow.js +0 -1
- package/build/scripts/resq.js +0 -1
- package/build/scripts/shadowFnFactory.js +0 -1
- package/build/shadowRoot.d.ts +25 -15
- package/build/shadowRoot.d.ts.map +1 -1
- package/build/shadowRoot.js +153 -49
- package/build/types.d.ts +29 -37
- package/build/types.d.ts.map +1 -1
- package/build/types.js +0 -1
- package/build/utils/SevereServiceError.js +0 -1
- package/build/utils/Timer.js +0 -1
- package/build/utils/actions/base.js +0 -1
- package/build/utils/actions/index.js +0 -1
- package/build/utils/actions/key.js +0 -1
- package/build/utils/actions/pointer.js +0 -1
- package/build/utils/actions/wheel.js +0 -1
- package/build/utils/detectBackend.js +0 -1
- package/build/utils/driver.js +0 -1
- package/build/utils/findStrategy.js +0 -1
- package/build/utils/getElementObject.d.ts +3 -3
- package/build/utils/getElementObject.d.ts.map +1 -1
- package/build/utils/getElementObject.js +20 -11
- package/build/utils/implicitWait.js +0 -1
- package/build/utils/index.d.ts +2 -8
- package/build/utils/index.d.ts.map +1 -1
- package/build/utils/index.js +71 -96
- package/build/utils/interception/index.d.ts +76 -22
- package/build/utils/interception/index.d.ts.map +1 -1
- package/build/utils/interception/index.js +297 -26
- package/build/utils/interception/types.d.ts +18 -85
- package/build/utils/interception/types.d.ts.map +1 -1
- package/build/utils/interception/types.js +0 -1
- package/build/utils/interception/utils.d.ts +17 -0
- package/build/utils/interception/utils.d.ts.map +1 -0
- package/build/utils/interception/utils.js +87 -0
- package/build/utils/refetchElement.d.ts.map +1 -1
- package/build/utils/refetchElement.js +6 -3
- package/build/utils/thirdParty/querySelectorShadowDom.js +0 -1
- package/package.json +11 -9
- package/build/utils/interception/devtools.d.ts +0 -64
- package/build/utils/interception/devtools.d.ts.map +0 -1
- package/build/utils/interception/devtools.js +0 -268
- package/build/utils/interception/webdriver.d.ts +0 -49
- package/build/utils/interception/webdriver.d.ts.map +0 -1
- package/build/utils/interception/webdriver.js +0 -76
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "webdriverio",
|
|
3
3
|
"description": "Next-gen browser and mobile automation test framework for Node.js",
|
|
4
|
-
"version": "9.0.0-alpha.
|
|
4
|
+
"version": "9.0.0-alpha.113+ceeac488e",
|
|
5
5
|
"homepage": "https://webdriver.io",
|
|
6
6
|
"author": "Christian Bromann <mail@bromann.dev>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -68,12 +68,12 @@
|
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
70
|
"@types/node": "^20.11.30",
|
|
71
|
-
"@wdio/config": "9.0.0-alpha.
|
|
72
|
-
"@wdio/logger": "9.0.0-alpha.
|
|
73
|
-
"@wdio/protocols": "9.0.0-alpha.
|
|
74
|
-
"@wdio/repl": "9.0.0-alpha.
|
|
75
|
-
"@wdio/types": "9.0.0-alpha.
|
|
76
|
-
"@wdio/utils": "9.0.0-alpha.
|
|
71
|
+
"@wdio/config": "9.0.0-alpha.113+ceeac488e",
|
|
72
|
+
"@wdio/logger": "9.0.0-alpha.113+ceeac488e",
|
|
73
|
+
"@wdio/protocols": "9.0.0-alpha.113+ceeac488e",
|
|
74
|
+
"@wdio/repl": "9.0.0-alpha.113+ceeac488e",
|
|
75
|
+
"@wdio/types": "9.0.0-alpha.113+ceeac488e",
|
|
76
|
+
"@wdio/utils": "9.0.0-alpha.113+ceeac488e",
|
|
77
77
|
"archiver": "^7.0.1",
|
|
78
78
|
"aria-query": "^5.3.0",
|
|
79
79
|
"cheerio": "^1.0.0-rc.12",
|
|
@@ -90,7 +90,8 @@
|
|
|
90
90
|
"resq": "^1.11.0",
|
|
91
91
|
"rgb2hex": "0.2.5",
|
|
92
92
|
"serialize-error": "^11.0.3",
|
|
93
|
-
"
|
|
93
|
+
"urlpattern-polyfill": "^10.0.0",
|
|
94
|
+
"webdriver": "9.0.0-alpha.113+ceeac488e"
|
|
94
95
|
},
|
|
95
96
|
"peerDependencies": {
|
|
96
97
|
"puppeteer-core": "^22.3.0"
|
|
@@ -99,5 +100,6 @@
|
|
|
99
100
|
"puppeteer-core": {
|
|
100
101
|
"optional": true
|
|
101
102
|
}
|
|
102
|
-
}
|
|
103
|
+
},
|
|
104
|
+
"gitHead": "ceeac488e86da4d6ffad891632183085e4332be7"
|
|
103
105
|
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import type { CDPSession } from 'puppeteer-core';
|
|
3
|
-
import Interception from './index.js';
|
|
4
|
-
import type { Matches, MockOverwrite, MockResponseParams, ErrorReason } from './types.js';
|
|
5
|
-
type ClientResponse = {
|
|
6
|
-
body: string;
|
|
7
|
-
base64Encoded?: boolean;
|
|
8
|
-
};
|
|
9
|
-
interface HeaderEntry {
|
|
10
|
-
name: string;
|
|
11
|
-
value: string;
|
|
12
|
-
}
|
|
13
|
-
type Event = {
|
|
14
|
-
requestId: string;
|
|
15
|
-
request: Matches & {
|
|
16
|
-
mockedResponse: string | Buffer;
|
|
17
|
-
};
|
|
18
|
-
responseStatusCode?: number;
|
|
19
|
-
responseHeaders: HeaderEntry[];
|
|
20
|
-
responseErrorReason?: string;
|
|
21
|
-
};
|
|
22
|
-
export default class DevtoolsInterception extends Interception {
|
|
23
|
-
private restored;
|
|
24
|
-
static handleRequestInterception(client: CDPSession, mocks: Set<Interception>): (event: Event) => Promise<void | ClientResponse>;
|
|
25
|
-
/**
|
|
26
|
-
* allows access to all requests made with given pattern
|
|
27
|
-
*/
|
|
28
|
-
get calls(): Matches[];
|
|
29
|
-
/**
|
|
30
|
-
* Resets all information stored in the `mock.calls` set.
|
|
31
|
-
*/
|
|
32
|
-
clear(): void;
|
|
33
|
-
/**
|
|
34
|
-
* Does everything that `mock.clear()` does, and also
|
|
35
|
-
* removes any mocked return values or implementations.
|
|
36
|
-
* Restored mock does not emit events and could not mock responses
|
|
37
|
-
*/
|
|
38
|
-
restore(sessionMocks?: Record<string, Set<Interception>>, cdpSessions?: Record<string, CDPSession>): Promise<void>;
|
|
39
|
-
/**
|
|
40
|
-
* Always respond with same overwrite
|
|
41
|
-
* @param {*} overwrites payload to overwrite the response
|
|
42
|
-
* @param {*} params additional respond parameters to overwrite
|
|
43
|
-
*/
|
|
44
|
-
respond(overwrite: MockOverwrite, params?: MockResponseParams): void;
|
|
45
|
-
/**
|
|
46
|
-
* Respond request once with given overwrite
|
|
47
|
-
* @param {*} overwrites payload to overwrite the response
|
|
48
|
-
* @param {*} params additional respond parameters to overwrite
|
|
49
|
-
*/
|
|
50
|
-
respondOnce(overwrite: MockOverwrite, params?: MockResponseParams): void;
|
|
51
|
-
/**
|
|
52
|
-
* Abort the request with an error code
|
|
53
|
-
* @param {string} errorCode error code of the response
|
|
54
|
-
*/
|
|
55
|
-
abort(errorReason: ErrorReason, sticky?: boolean): void;
|
|
56
|
-
/**
|
|
57
|
-
* Abort the request once with an error code
|
|
58
|
-
* @param {string} errorReason error code of the response
|
|
59
|
-
*/
|
|
60
|
-
abortOnce(errorReason: ErrorReason): void;
|
|
61
|
-
private ensureNotRestored;
|
|
62
|
-
}
|
|
63
|
-
export {};
|
|
64
|
-
//# sourceMappingURL=devtools.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.d.ts","sourceRoot":"","sources":["../../../src/utils/interception/devtools.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,YAAY,MAAM,YAAY,CAAA;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAOzF,KAAK,cAAc,GAAG;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,UAAU,WAAW;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,KAAK,GAAG;IACT,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,GAAG;QAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IACtD,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,eAAe,EAAE,WAAW,EAAE,CAAA;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC/B,CAAA;AAID,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,YAAY;IAC1D,OAAO,CAAC,QAAQ,CAAQ;IAExB,MAAM,CAAC,yBAAyB,CAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,GAAG,cAAc,CAAC;IA4KjI;;OAEG;IACH,IAAI,KAAK,cAER;IAED;;OAEG;IACH,KAAK;IAIL;;;;OAIG;IACG,OAAO,CAAE,YAAY,oCAAgB,EAAE,WAAW,6BAAe;IAqBvE;;;;OAIG;IACH,OAAO,CAAE,SAAS,EAAE,aAAa,EAAE,MAAM,GAAE,kBAAuB;IAKlE;;;;OAIG;IACH,WAAW,CAAE,SAAS,EAAE,aAAa,EAAE,MAAM,GAAE,kBAAuB;IAKtE;;;OAGG;IACH,KAAK,CAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAE,OAAc;IAQvD;;;OAGG;IACH,SAAS,CAAE,WAAW,EAAE,WAAW;IAInC,OAAO,CAAC,iBAAiB;CAK5B"}
|
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import logger from '@wdio/logger';
|
|
4
|
-
import Interception from './index.js';
|
|
5
|
-
import { containsHeaderObject } from '../index.js';
|
|
6
|
-
import { ERROR_REASON } from '../../constants.js';
|
|
7
|
-
import { CDP_SESSIONS, SESSION_MOCKS } from '../../commands/browser/mock.js';
|
|
8
|
-
const log = logger('webdriverio');
|
|
9
|
-
export default class DevtoolsInterception extends Interception {
|
|
10
|
-
restored = false;
|
|
11
|
-
static handleRequestInterception(client, mocks) {
|
|
12
|
-
return async (event) => {
|
|
13
|
-
// responseHeaders and responseStatusCode are only present in Response stage
|
|
14
|
-
// https://chromedevtools.github.io/devtools-protocol/tot/Fetch/#event-requestPaused
|
|
15
|
-
const isRequest = !event.responseHeaders && !event.responseErrorReason;
|
|
16
|
-
event.responseStatusCode ||= event.responseErrorReason ? 0 : 200;
|
|
17
|
-
event.responseHeaders ||= [];
|
|
18
|
-
const responseHeaders = event.responseHeaders.reduce((headers, { name, value }) => {
|
|
19
|
-
headers[name] = value;
|
|
20
|
-
return headers;
|
|
21
|
-
}, {});
|
|
22
|
-
let mockResponded = false;
|
|
23
|
-
for (const mock of mocks) {
|
|
24
|
-
/**
|
|
25
|
-
* skip response mocks in Request stage
|
|
26
|
-
*/
|
|
27
|
-
if (isRequest && (mock.respondOverwrites.length === 0 || // nothing to do in Request stage
|
|
28
|
-
(!mock.respondOverwrites[0].errorReason && // skip if not going to abort a request
|
|
29
|
-
// or want to fetch response
|
|
30
|
-
mock.respondOverwrites[0].params &&
|
|
31
|
-
mock.respondOverwrites[0].params.fetchResponse !== false))) {
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* match mock url
|
|
36
|
-
*/
|
|
37
|
-
if (!Interception.isMatchingRequest(mock.url, event.request.url)) {
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Add statusCode and responseHeaders to request to be used in expect-webdriverio
|
|
42
|
-
*/
|
|
43
|
-
event.request.statusCode = event.responseStatusCode;
|
|
44
|
-
event.request.responseHeaders = { ...responseHeaders };
|
|
45
|
-
/**
|
|
46
|
-
* match filter options
|
|
47
|
-
*/
|
|
48
|
-
if (filterMethod(event.request.method, mock.filterOptions.method) ||
|
|
49
|
-
filterHeaders(event.request.headers, mock.filterOptions.requestHeaders) ||
|
|
50
|
-
filterHeaders(responseHeaders, mock.filterOptions.headers) ||
|
|
51
|
-
filterRequest(event.request.postData, mock.filterOptions.postData) ||
|
|
52
|
-
filterStatusCode(event.responseStatusCode, mock.filterOptions.statusCode)) {
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
mock.emit('request', event);
|
|
56
|
-
const { requestId, request, responseStatusCode } = event;
|
|
57
|
-
const { body, base64Encoded = undefined } = isRequest ? { body: '' } : await client.send('Fetch.getResponseBody', { requestId }).catch(/* istanbul ignore next */ () => ({}));
|
|
58
|
-
request.body = base64Encoded ? Buffer.from(body, 'base64').toString('utf8') : body;
|
|
59
|
-
const contentTypeHeader = Object.keys(responseHeaders).find(h => h.toLowerCase() === 'content-type') || '';
|
|
60
|
-
const responseContentType = responseHeaders[contentTypeHeader];
|
|
61
|
-
request.body = responseContentType && responseContentType.includes('application/json')
|
|
62
|
-
? tryParseJson(request.body)
|
|
63
|
-
: request.body;
|
|
64
|
-
mock.matches.push(request);
|
|
65
|
-
/**
|
|
66
|
-
* no stubbing if no overwrites were defined
|
|
67
|
-
*/
|
|
68
|
-
if (mockResponded || mock.respondOverwrites.length === 0) {
|
|
69
|
-
mock.emit('match', request);
|
|
70
|
-
mock.emit('continue', requestId);
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
const { errorReason, overwrite, params = {} } = mock.respondOverwrites[0].sticky
|
|
74
|
-
? mock.respondOverwrites[0]
|
|
75
|
-
: mock.respondOverwrites.shift() || {};
|
|
76
|
-
/**
|
|
77
|
-
* when response is modified
|
|
78
|
-
*/
|
|
79
|
-
if (overwrite !== undefined) {
|
|
80
|
-
let newBody = overwrite;
|
|
81
|
-
if (typeof overwrite === 'function') {
|
|
82
|
-
newBody = await overwrite(request, client);
|
|
83
|
-
}
|
|
84
|
-
const isBodyUndefined = typeof newBody === 'undefined';
|
|
85
|
-
if (isBodyUndefined) {
|
|
86
|
-
newBody = '';
|
|
87
|
-
}
|
|
88
|
-
if (typeof newBody !== 'string') {
|
|
89
|
-
newBody = JSON.stringify(newBody);
|
|
90
|
-
}
|
|
91
|
-
let responseCode = typeof params.statusCode === 'function' ? params.statusCode(request) : params.statusCode || responseStatusCode;
|
|
92
|
-
let responseHeaders = [
|
|
93
|
-
...event.responseHeaders,
|
|
94
|
-
...Object.entries(typeof params.headers === 'function' ? params.headers(request) : params.headers || {}).map(([name, value]) => ({ name, value }))
|
|
95
|
-
];
|
|
96
|
-
/**
|
|
97
|
-
* check if local file and load it
|
|
98
|
-
*/
|
|
99
|
-
const responseFilePath = path.isAbsolute(newBody) ? newBody : path.join(process.cwd(), newBody);
|
|
100
|
-
const responseFileAccessible = await fs.access(responseFilePath).then(() => true, () => false);
|
|
101
|
-
if (newBody.length > 0 && responseFileAccessible) {
|
|
102
|
-
newBody = (await fs.readFile(responseFilePath));
|
|
103
|
-
}
|
|
104
|
-
else if (newBody.startsWith('http')) {
|
|
105
|
-
responseCode = 301;
|
|
106
|
-
/**
|
|
107
|
-
* filter out possible available location header
|
|
108
|
-
*/
|
|
109
|
-
responseHeaders = responseHeaders.filter(({ name }) => name.toLowerCase() !== 'location');
|
|
110
|
-
responseHeaders.push({ name: 'Location', value: newBody });
|
|
111
|
-
}
|
|
112
|
-
request.mockedResponse = newBody;
|
|
113
|
-
mock.emit('match', request);
|
|
114
|
-
const overwriteData = { requestId, responseCode, responseHeaders, body: isBodyUndefined ? undefined : newBody };
|
|
115
|
-
mock.emit('overwrite', overwriteData);
|
|
116
|
-
mockResponded = true;
|
|
117
|
-
const body = typeof overwriteData.body === 'undefined'
|
|
118
|
-
? undefined
|
|
119
|
-
: (overwriteData.body instanceof Buffer
|
|
120
|
-
? overwriteData.body
|
|
121
|
-
: Buffer.from(overwriteData.body, 'utf8')).toString('base64');
|
|
122
|
-
await client.send('Fetch.fulfillRequest', {
|
|
123
|
-
...overwriteData,
|
|
124
|
-
body
|
|
125
|
-
}).catch(/* istanbul ignore next */ logFetchError);
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* when request is aborted
|
|
130
|
-
*/
|
|
131
|
-
if (errorReason) {
|
|
132
|
-
const failData = { requestId, errorReason };
|
|
133
|
-
mock.emit('fail', failData);
|
|
134
|
-
mockResponded = true;
|
|
135
|
-
await client.send('Fetch.failRequest', failData).catch(/* istanbul ignore next */ logFetchError);
|
|
136
|
-
continue;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
if (!mockResponded) {
|
|
140
|
-
return client.send('Fetch.continueRequest', { requestId: event.requestId }).catch(/* istanbul ignore next */ logFetchError);
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* allows access to all requests made with given pattern
|
|
146
|
-
*/
|
|
147
|
-
get calls() {
|
|
148
|
-
return this.matches;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Resets all information stored in the `mock.calls` set.
|
|
152
|
-
*/
|
|
153
|
-
clear() {
|
|
154
|
-
this.matches = [];
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Does everything that `mock.clear()` does, and also
|
|
158
|
-
* removes any mocked return values or implementations.
|
|
159
|
-
* Restored mock does not emit events and could not mock responses
|
|
160
|
-
*/
|
|
161
|
-
async restore(sessionMocks = SESSION_MOCKS, cdpSessions = CDP_SESSIONS) {
|
|
162
|
-
this.clear();
|
|
163
|
-
this.respondOverwrites = [];
|
|
164
|
-
this.restored = true;
|
|
165
|
-
const handle = await this.browser.getWindowHandle();
|
|
166
|
-
log.trace(`Restoring mock for ${handle}`);
|
|
167
|
-
sessionMocks[handle].delete(this);
|
|
168
|
-
if (sessionMocks[handle].size) {
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
log.trace(`Disabling fetch domain for ${handle}`);
|
|
172
|
-
return cdpSessions[handle].send('Fetch.disable')
|
|
173
|
-
.then(() => {
|
|
174
|
-
delete sessionMocks[handle];
|
|
175
|
-
delete cdpSessions[handle];
|
|
176
|
-
}).catch(/* istanbul ignore next */ logFetchError);
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Always respond with same overwrite
|
|
180
|
-
* @param {*} overwrites payload to overwrite the response
|
|
181
|
-
* @param {*} params additional respond parameters to overwrite
|
|
182
|
-
*/
|
|
183
|
-
respond(overwrite, params = {}) {
|
|
184
|
-
this.ensureNotRestored();
|
|
185
|
-
this.respondOverwrites.push({ overwrite, params, sticky: true });
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Respond request once with given overwrite
|
|
189
|
-
* @param {*} overwrites payload to overwrite the response
|
|
190
|
-
* @param {*} params additional respond parameters to overwrite
|
|
191
|
-
*/
|
|
192
|
-
respondOnce(overwrite, params = {}) {
|
|
193
|
-
this.ensureNotRestored();
|
|
194
|
-
this.respondOverwrites.push({ overwrite, params });
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Abort the request with an error code
|
|
198
|
-
* @param {string} errorCode error code of the response
|
|
199
|
-
*/
|
|
200
|
-
abort(errorReason, sticky = true) {
|
|
201
|
-
this.ensureNotRestored();
|
|
202
|
-
if (typeof errorReason !== 'string' || !ERROR_REASON.includes(errorReason)) {
|
|
203
|
-
throw new Error(`Invalid value for errorReason, allowed are: ${ERROR_REASON.join(', ')}`);
|
|
204
|
-
}
|
|
205
|
-
this.respondOverwrites.push({ errorReason, sticky });
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Abort the request once with an error code
|
|
209
|
-
* @param {string} errorReason error code of the response
|
|
210
|
-
*/
|
|
211
|
-
abortOnce(errorReason) {
|
|
212
|
-
this.abort(errorReason, false);
|
|
213
|
-
}
|
|
214
|
-
ensureNotRestored() {
|
|
215
|
-
if (this.restored) {
|
|
216
|
-
throw new Error('This can\'t be done on restored mock');
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
const filterMethod = (method, expected) => {
|
|
221
|
-
if (typeof expected === 'undefined') {
|
|
222
|
-
return false;
|
|
223
|
-
}
|
|
224
|
-
if (typeof expected === 'function') {
|
|
225
|
-
return expected(method) !== true;
|
|
226
|
-
}
|
|
227
|
-
return expected.toLowerCase() !== method.toLowerCase();
|
|
228
|
-
};
|
|
229
|
-
const filterHeaders = (responseHeaders, expected) => {
|
|
230
|
-
if (typeof expected === 'undefined') {
|
|
231
|
-
return false;
|
|
232
|
-
}
|
|
233
|
-
if (typeof expected === 'function') {
|
|
234
|
-
return expected(responseHeaders) !== true;
|
|
235
|
-
}
|
|
236
|
-
return !containsHeaderObject(responseHeaders, expected);
|
|
237
|
-
};
|
|
238
|
-
const filterRequest = (postData, expected) => {
|
|
239
|
-
if (typeof expected === 'undefined') {
|
|
240
|
-
return false;
|
|
241
|
-
}
|
|
242
|
-
if (typeof expected === 'function') {
|
|
243
|
-
return expected(postData) !== true;
|
|
244
|
-
}
|
|
245
|
-
return postData !== expected;
|
|
246
|
-
};
|
|
247
|
-
const filterStatusCode = (statusCode, expected) => {
|
|
248
|
-
if (typeof expected === 'undefined') {
|
|
249
|
-
return false;
|
|
250
|
-
}
|
|
251
|
-
if (typeof expected === 'function') {
|
|
252
|
-
return expected(statusCode) !== true;
|
|
253
|
-
}
|
|
254
|
-
return statusCode !== expected;
|
|
255
|
-
};
|
|
256
|
-
const tryParseJson = (body) => {
|
|
257
|
-
try {
|
|
258
|
-
return JSON.parse(body) || body;
|
|
259
|
-
}
|
|
260
|
-
catch {
|
|
261
|
-
return body;
|
|
262
|
-
}
|
|
263
|
-
};
|
|
264
|
-
const logFetchError = (err) => {
|
|
265
|
-
/* istanbul ignore next */
|
|
266
|
-
log.debug(err?.message);
|
|
267
|
-
};
|
|
268
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2dG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW50ZXJjZXB0aW9uL2RldnRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2pDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFHakMsT0FBTyxZQUFZLE1BQU0sWUFBWSxDQUFBO0FBRXJDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUU1RSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUE7QUFzQmpDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sb0JBQXFCLFNBQVEsWUFBWTtJQUNsRCxRQUFRLEdBQUcsS0FBSyxDQUFBO0lBRXhCLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBRSxNQUFrQixFQUFFLEtBQXdCO1FBQzFFLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ25CLDRFQUE0RTtZQUM1RSxvRkFBb0Y7WUFDcEYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFBO1lBRXRFLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO1lBQ2hFLEtBQUssQ0FBQyxlQUFlLEtBQUssRUFBRSxDQUFBO1lBRTVCLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtB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
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import Interception from './index.js';
|
|
2
|
-
import type { Matches, MockResponseParams, MockOverwrite } from './types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Network interception class based on a WebDriver compliant endpoint.
|
|
5
|
-
* Instead of directly using the CDP with Puppeteer this version of the
|
|
6
|
-
* class uses a WebDriver extension to trigger the same behavior on a
|
|
7
|
-
* compliant backend.
|
|
8
|
-
*/
|
|
9
|
-
export default class WebDriverInterception extends Interception {
|
|
10
|
-
mockId?: string;
|
|
11
|
-
init(): Promise<void>;
|
|
12
|
-
on(): this;
|
|
13
|
-
/**
|
|
14
|
-
* allows access to all requests made with given pattern
|
|
15
|
-
*/
|
|
16
|
-
get calls(): Matches[] | Promise<Matches[]>;
|
|
17
|
-
/**
|
|
18
|
-
* Resets all information stored in the `mock.calls` set.
|
|
19
|
-
*/
|
|
20
|
-
clear(): Promise<void> | Promise<Promise<void>>;
|
|
21
|
-
/**
|
|
22
|
-
* Does everything that `mock.clear()` does, and also
|
|
23
|
-
* removes any mocked return values or implementations.
|
|
24
|
-
*/
|
|
25
|
-
restore(): Promise<void>;
|
|
26
|
-
/**
|
|
27
|
-
* Always respond with same overwrite
|
|
28
|
-
* @param {*} overwrites payload to overwrite the response
|
|
29
|
-
* @param {*} params additional respond parameters to overwrite
|
|
30
|
-
*/
|
|
31
|
-
respond(overwrite: MockOverwrite, params?: MockResponseParams): Promise<void> | Promise<Promise<void>>;
|
|
32
|
-
/**
|
|
33
|
-
* Respond request once with given overwrite
|
|
34
|
-
* @param {*} overwrites payload to overwrite the response
|
|
35
|
-
* @param {*} params additional respond parameters to overwrite
|
|
36
|
-
*/
|
|
37
|
-
respondOnce(overwrite: MockOverwrite, params?: MockResponseParams): Promise<void> | Promise<Promise<void>>;
|
|
38
|
-
/**
|
|
39
|
-
* Abort the request with an error code
|
|
40
|
-
* @param {string} errorCode error code of the response
|
|
41
|
-
*/
|
|
42
|
-
abort(errorReason: string, sticky?: boolean): Promise<void> | Promise<Promise<void>>;
|
|
43
|
-
/**
|
|
44
|
-
* Abort the request once with an error code
|
|
45
|
-
* @param {string} errorReason error code of the response
|
|
46
|
-
*/
|
|
47
|
-
abortOnce(errorReason: string): Promise<void> | Promise<Promise<void>>;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=webdriver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webdriver.d.ts","sourceRoot":"","sources":["../../../src/utils/interception/webdriver.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,YAAY,CAAA;AAErC,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE5E;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,YAAY;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAA;IAET,IAAI;IAQV,EAAE;IAOF;;OAEG;IACH,IAAI,KAAK,mCAIR;IAED;;OAEG;IACH,KAAK;IAKL;;;OAGG;IACG,OAAO;IAKb;;;;OAIG;IACH,OAAO,CAAE,SAAS,EAAE,aAAa,EAAE,MAAM,GAAE,kBAAuB;IASlE;;;;OAIG;IACH,WAAW,CAAE,SAAS,EAAE,aAAa,EAAE,MAAM,GAAE,kBAAuB;IAStE;;;OAGG;IACH,KAAK,CAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc;IAYlD;;;OAGG;IACH,SAAS,CAAE,WAAW,EAAE,MAAM;CAGjC"}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import Interception from './index.js';
|
|
2
|
-
import { ERROR_REASON } from '../../constants.js';
|
|
3
|
-
/**
|
|
4
|
-
* Network interception class based on a WebDriver compliant endpoint.
|
|
5
|
-
* Instead of directly using the CDP with Puppeteer this version of the
|
|
6
|
-
* class uses a WebDriver extension to trigger the same behavior on a
|
|
7
|
-
* compliant backend.
|
|
8
|
-
*/
|
|
9
|
-
export default class WebDriverInterception extends Interception {
|
|
10
|
-
mockId;
|
|
11
|
-
async init() {
|
|
12
|
-
if (this.url instanceof RegExp) {
|
|
13
|
-
throw new Error('Regular Expressions as mock url are not supported');
|
|
14
|
-
}
|
|
15
|
-
const { mockId } = await this.browser.mockRequest(this.url, this.filterOptions);
|
|
16
|
-
this.mockId = mockId;
|
|
17
|
-
}
|
|
18
|
-
on() {
|
|
19
|
-
throw new Error('Not implemented');
|
|
20
|
-
// eslint-disable-next-line no-unreachable
|
|
21
|
-
return this;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* allows access to all requests made with given pattern
|
|
25
|
-
*/
|
|
26
|
-
get calls() {
|
|
27
|
-
return this.browser.call(() => this.browser.getMockCalls(this.mockId));
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Resets all information stored in the `mock.calls` set.
|
|
31
|
-
*/
|
|
32
|
-
clear() {
|
|
33
|
-
return this.browser.call(async () => this.browser.clearMockCalls(this.mockId));
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Does everything that `mock.clear()` does, and also
|
|
37
|
-
* removes any mocked return values or implementations.
|
|
38
|
-
*/
|
|
39
|
-
async restore() {
|
|
40
|
-
await this.browser.call(async () => this.browser.clearMockCalls(this.mockId, true));
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Always respond with same overwrite
|
|
44
|
-
* @param {*} overwrites payload to overwrite the response
|
|
45
|
-
* @param {*} params additional respond parameters to overwrite
|
|
46
|
-
*/
|
|
47
|
-
respond(overwrite, params = {}) {
|
|
48
|
-
return this.browser.call(async () => this.browser.respondMock(this.mockId, { overwrite, params, sticky: true }));
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Respond request once with given overwrite
|
|
52
|
-
* @param {*} overwrites payload to overwrite the response
|
|
53
|
-
* @param {*} params additional respond parameters to overwrite
|
|
54
|
-
*/
|
|
55
|
-
respondOnce(overwrite, params = {}) {
|
|
56
|
-
return this.browser.call(async () => this.browser.respondMock(this.mockId, { overwrite, params }));
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Abort the request with an error code
|
|
60
|
-
* @param {string} errorCode error code of the response
|
|
61
|
-
*/
|
|
62
|
-
abort(errorReason, sticky = true) {
|
|
63
|
-
if (typeof errorReason !== 'string' || !ERROR_REASON.includes(errorReason)) {
|
|
64
|
-
throw new Error(`Invalid value for errorReason, allowed are: ${ERROR_REASON.join(', ')}`);
|
|
65
|
-
}
|
|
66
|
-
return this.browser.call(async () => this.browser.respondMock(this.mockId, { errorReason, sticky }));
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Abort the request once with an error code
|
|
70
|
-
* @param {string} errorReason error code of the response
|
|
71
|
-
*/
|
|
72
|
-
abortOnce(errorReason) {
|
|
73
|
-
return this.abort(errorReason, false);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViZHJpdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2ludGVyY2VwdGlvbi93ZWJkcml2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLE1BQU0sWUFBWSxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUdqRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8scUJBQXNCLFNBQVEsWUFBWTtJQUMzRCxNQUFNLENBQVM7SUFFZixLQUFLLENBQUMsSUFBSTtRQUNOLElBQUksSUFBSSxDQUFDLEdBQUcsWUFBWSxNQUFNLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUE7UUFDeEUsQ0FBQztRQUNELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQy9FLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBQ3hCLENBQUM7SUFFRCxFQUFFO1FBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBRWxDLDBDQUEwQztRQUMxQyxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFnQixDQUNsRCxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDcEIsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBZ0IsQ0FBQyxDQUFDLENBQUE7SUFDdkUsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPO1FBQ1QsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDbkIsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzdFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFFLFNBQXdCLEVBQUUsU0FBNkIsRUFBRTtRQUM5RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNwQixLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUNoQyxJQUFJLENBQUMsTUFBZ0IsRUFDckIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FDdEMsQ0FDSixDQUFBO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUUsU0FBd0IsRUFBRSxTQUE2QixFQUFFO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3BCLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQ2hDLElBQUksQ0FBQyxNQUFnQixFQUNyQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FDeEIsQ0FDSixDQUFBO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBRSxXQUFtQixFQUFFLFNBQWtCLElBQUk7UUFDOUMsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDekUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDN0YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3BCLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQ2hDLElBQUksQ0FBQyxNQUFnQixFQUNyQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FDMUIsQ0FDSixDQUFBO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBRSxXQUFtQjtRQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3pDLENBQUM7Q0FDSiJ9
|