system-testing 1.0.103 → 1.0.105
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/README.md +8 -0
- package/build/browser-command-runner.js +53 -1
- package/build/browser.d.ts +109 -20
- package/build/browser.js +207 -1
- package/build/cli-helpers.js +22 -1
- package/build/cli.js +3 -1
- package/build/drivers/webdriver-driver.d.ts +49 -0
- package/build/drivers/webdriver-driver.js +141 -3
- package/build/system-test.d.ts +5 -2
- package/build/system-test.js +28 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -449,6 +449,14 @@ await systemTest.reinitialize()
|
|
|
449
449
|
|
|
450
450
|
This tears down the browser, servers, and sockets, then starts them again so subsequent steps run against a fresh app instance.
|
|
451
451
|
|
|
452
|
+
`SystemTest.run(...)` does this automatically after a failed callback or teardown by default. Disable it only for tests that intentionally inspect the broken session after failure:
|
|
453
|
+
|
|
454
|
+
```js
|
|
455
|
+
await SystemTest.run({reinitializeAfterFailure: false}, async (systemTest) => {
|
|
456
|
+
await systemTest.findByTestID("brokenState")
|
|
457
|
+
})
|
|
458
|
+
```
|
|
459
|
+
|
|
452
460
|
## Dummy Expo app
|
|
453
461
|
|
|
454
462
|
A ready-to-run Expo Router dummy app that uses `system-testing` lives in `spec/dummy`.
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a cookie boolean attribute coming in over the JSON command transport.
|
|
3
|
+
* The transport carries booleans either as native `true`/`false` or as the
|
|
4
|
+
* string forms `"true"`/`"false"`. Anything else is rejected so a typo like
|
|
5
|
+
* `--cookie-secure=TRUE` or `--cookie-secure=1` fails loudly instead of
|
|
6
|
+
* silently producing an insecure cookie.
|
|
7
|
+
* @param {string} fieldName
|
|
8
|
+
* @param {unknown} rawValue
|
|
9
|
+
* @returns {boolean}
|
|
10
|
+
*/
|
|
11
|
+
function parseCookieBoolean(fieldName, rawValue) {
|
|
12
|
+
if (rawValue === true || rawValue === "true")
|
|
13
|
+
return true;
|
|
14
|
+
if (rawValue === false || rawValue === "false")
|
|
15
|
+
return false;
|
|
16
|
+
throw new Error(`addCookie ${fieldName} must be true or false, got ${JSON.stringify(rawValue)}`);
|
|
17
|
+
}
|
|
1
18
|
/** Runs browser commands across CLI and WebSocket transports. */
|
|
2
19
|
export default class BrowserCommandRunner {
|
|
3
20
|
/**
|
|
@@ -144,6 +161,41 @@ export default class BrowserCommandRunner {
|
|
|
144
161
|
await this.browser.expectNoElement(commandArgs.selector, this.normalizeFindArgs(commandArgs));
|
|
145
162
|
return { ok: true };
|
|
146
163
|
}
|
|
164
|
+
if (command === "executeScript") {
|
|
165
|
+
const script = commandArgs.script;
|
|
166
|
+
if (typeof script !== "string" || script.length === 0) {
|
|
167
|
+
throw new Error("executeScript requires script");
|
|
168
|
+
}
|
|
169
|
+
const scriptArgs = Array.isArray(commandArgs.args) ? commandArgs.args : [];
|
|
170
|
+
const result = await this.browser.executeScript(script, ...scriptArgs);
|
|
171
|
+
return { result };
|
|
172
|
+
}
|
|
173
|
+
if (command === "addCookie") {
|
|
174
|
+
const name = commandArgs.name;
|
|
175
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
176
|
+
throw new Error("addCookie requires name");
|
|
177
|
+
}
|
|
178
|
+
const value = commandArgs.value;
|
|
179
|
+
if (typeof value !== "string") {
|
|
180
|
+
throw new Error("addCookie requires string value");
|
|
181
|
+
}
|
|
182
|
+
/** @type {{name: string, value: string, domain?: string, path?: string, secure?: boolean, httpOnly?: boolean, expiry?: number, sameSite?: "Strict" | "Lax" | "None"}} */
|
|
183
|
+
const cookie = { name, value };
|
|
184
|
+
if (typeof commandArgs.domain === "string" && commandArgs.domain.length > 0)
|
|
185
|
+
cookie.domain = commandArgs.domain;
|
|
186
|
+
if (typeof commandArgs.path === "string" && commandArgs.path.length > 0)
|
|
187
|
+
cookie.path = commandArgs.path;
|
|
188
|
+
if (commandArgs.secure !== undefined)
|
|
189
|
+
cookie.secure = parseCookieBoolean("secure", commandArgs.secure);
|
|
190
|
+
if (commandArgs.httpOnly !== undefined)
|
|
191
|
+
cookie.httpOnly = parseCookieBoolean("httpOnly", commandArgs.httpOnly);
|
|
192
|
+
if (commandArgs.expiry !== undefined)
|
|
193
|
+
cookie.expiry = Number(commandArgs.expiry);
|
|
194
|
+
if (typeof commandArgs.sameSite === "string")
|
|
195
|
+
cookie.sameSite = /** @type {"Strict" | "Lax" | "None"} */ (commandArgs.sameSite);
|
|
196
|
+
await this.browser.addCookie(cookie);
|
|
197
|
+
return { ok: true };
|
|
198
|
+
}
|
|
147
199
|
if (command === "interact") {
|
|
148
200
|
const selector = commandArgs.selector;
|
|
149
201
|
const methodName = commandArgs.methodName ?? commandArgs.method;
|
|
@@ -169,4 +221,4 @@ export default class BrowserCommandRunner {
|
|
|
169
221
|
throw new Error(`Unknown browser command: ${command}`);
|
|
170
222
|
}
|
|
171
223
|
}
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1jb21tYW5kLXJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9icm93c2VyLWNvbW1hbmQtcnVubmVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsT0FBTyxPQUFPLG9CQUFvQjtJQUN2Qzs7O09BR0c7SUFDSCxZQUFZLEVBQUMsT0FBTyxFQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxvQkFBb0IsQ0FBQyxXQUFXO1FBQzlCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQTtRQUV6QixJQUFJLFNBQVMsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNsRSxjQUFjLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7WUFFcEQsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUM1RCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sY0FBYyxDQUFBO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxXQUFXO1FBQzNCLE1BQU0sUUFBUSxHQUFHLGtEQUFrRCxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7UUFFNUcsSUFBSSxTQUFTLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbEUsSUFBSSxXQUFXLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxXQUFXLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUNuRSxRQUFR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QUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUE7WUFDakQsQ0FBQztZQUVELElBQUksY0FBYyxJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1RSxJQUFJLE9BQU8sV0FBVyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDbEQsWUFBWSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFBO2dCQUN0RCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sWUFBWSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQTtnQkFDakUsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQTtZQUVuRixPQUFPLEVBQUMsTUFBTSxFQUFDLENBQUE7UUFDakIsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDeEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFJ1bnMgYnJvd3NlciBjb21tYW5kcyBhY3Jvc3MgQ0xJIGFuZCBXZWJTb2NrZXQgdHJhbnNwb3J0cy4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJDb21tYW5kUnVubmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9icm93c2VyLmpzXCIpLmRlZmF1bHR9IGFyZ3MuYnJvd3NlclxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2Jyb3dzZXJ9KSB7XG4gICAgdGhpcy5icm93c2VyID0gYnJvd3NlclxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29tbWFuZEFyZ3NcbiAgICogQHJldHVybnMge3t0aW1lb3V0PzogbnVtYmVyfX1cbiAgICovXG4gIG5vcm1hbGl6ZVRpbWVvdXRBcmdzKGNvbW1hbmRBcmdzKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEFyZ3MgPSB7fVxuXG4gICAgaWYgKFwidGltZW91dFwiIGluIGNvbW1hbmRBcmdzICYmIGNvbW1hbmRBcmdzLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9ybWFsaXplZEFyZ3MudGltZW91dCA9IE51bWJlcihjb21tYW5kQXJncy50aW1lb3V0KVxuXG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKG5vcm1hbGl6ZWRBcmdzLnRpbWVvdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0aW1lb3V0OiAke2NvbW1hbmRBcmdzLnRpbWVvdXR9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZEFyZ3NcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbW1hbmRBcmdzXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3N5c3RlbS10ZXN0LmpzXCIpLkZpbmRBcmdzfVxuICAgKi9cbiAgbm9ybWFsaXplRmluZEFyZ3MoY29tbWFuZEFyZ3MpIHtcbiAgICBjb25zdCBmaW5kQXJncyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zeXN0ZW0tdGVzdC5qc1wiKS5GaW5kQXJnc30gKi8gKHRoaXMubm9ybWFsaXplVGltZW91dEFyZ3MoY29tbWFuZEFyZ3MpKVxuXG4gICAgaWYgKFwidmlzaWJsZVwiIGluIGNvbW1hbmRBcmdzICYmIGNvbW1hbmRBcmdzLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbW1hbmRBcmdzLnZpc2libGUgPT09IG51bGwgfHwgY29tbWFuZEFyZ3MudmlzaWJsZSA9PT0gXCJudWxsXCIpIHtcbiAgICAgICAgZmluZEFyZ3MudmlzaWJsZSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbW1hbmRBcmdzLnZpc2libGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIGZpbmRBcmdzLnZpc2libGUgPSBjb21tYW5kQXJncy52aXNpYmxlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaW5kQXJncy52aXNpYmxlID0gY29tbWFuZEFyZ3MudmlzaWJsZSA9PT0gXCJ0cnVlXCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXCJ1c2VCYXNlU2VsZWN0b3JcIiBpbiBjb21tYW5kQXJncyAmJiBjb21tYW5kQXJncy51c2VCYXNlU2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBjb21tYW5kQXJncy51c2VCYXNlU2VsZWN0b3IgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIGZpbmRBcmdzLnVzZUJhc2VTZWxlY3RvciA9IGNvbW1hbmRBcmdzLnVzZUJhc2VTZWxlY3RvclxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmluZEFyZ3MudXNlQmFzZVNlbGVjdG9yID0gY29tbWFuZEFyZ3MudXNlQmFzZVNlbGVjdG9yID09PSBcInRydWVcIlxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcInNjcm9sbFRvXCIgaW4gY29tbWFuZEFyZ3MgJiYgY29tbWFuZEFyZ3Muc2Nyb2xsVG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBjb21tYW5kQXJncy5zY3JvbGxUbyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgZmluZEFyZ3Muc2Nyb2xsVG8gPSBjb21tYW5kQXJncy5zY3JvbGxUb1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmluZEFyZ3Muc2Nyb2xsVG8gPSBjb21tYW5kQXJncy5zY3JvbGxUbyA9PT0gXCJ0cnVlXCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmluZEFyZ3NcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50fSBlbGVtZW50XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fVxuICAgKi9cbiAgYXN5bmMgc2VyaWFsaXplRWxlbWVudChlbGVtZW50KSB7XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IGVsZW1lbnQuZ2V0VGV4dCgpXG4gICAgY29uc3QgdGFnTmFtZSA9IGF3YWl0IGVsZW1lbnQuZ2V0VGFnTmFtZSgpXG4gICAgY29uc3QgZGlzcGxheWVkID0gYXdhaXQgZWxlbWVudC5pc0Rpc3BsYXllZCgpXG5cbiAgICByZXR1cm4ge2Rpc3BsYXllZCwgdGFnTmFtZSwgdGV4dH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbW1hbmRBcmdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBhc3luYyBydW4oY29tbWFuZCwgY29tbWFuZEFyZ3MgPSB7fSkge1xuICAgIGlmIChjb21tYW5kID09PSBcInZpc2l0XCIpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBjb21tYW5kQXJncy5wYXRoID8/IGNvbW1hbmRBcmdzLnVybFxuXG4gICAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidmlzaXQgcmVxdWlyZXMgcGF0aCBvciB1cmxcIilcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5icm93c2VyLnZpc2l0KHBhdGgsIHRoaXMubm9ybWFsaXplVGltZW91dEFyZ3MoY29tbWFuZEFyZ3MpKVxuICAgICAgcmV0dXJuIHtvazogdHJ1ZX1cbiAgICB9XG5cbiAgICBpZiAoY29tbWFuZCA9PT0gXCJkaXNtaXNzVG9cIikge1xuICAgICAgY29uc3QgcGF0aCA9IGNvbW1hbmRBcmdzLnBhdGggPz8gY29tbWFuZEFyZ3MudXJsXG5cbiAgICAgIGlmICghcGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNtaXNzVG8gcmVxdWlyZXMgcGF0aCBvciB1cmxcIilcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5icm93c2VyLmRpc21pc3NUbyhwYXRoLCB0aGlzLm5vcm1hbGl6ZVRpbWVvdXRBcmdzKGNvbW1hbmRBcmdzKSlcbiAgICAgIHJldHVybiB7b2s6IHRydWV9XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmQgPT09IFwic2V0QmFzZVNlbGVjdG9yXCIpIHtcbiAgICAgIGlmICghY29tbWFuZEFyZ3Muc2VsZWN0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0QmFzZVNlbGVjdG9yIHJlcXVpcmVzIHNlbGVjdG9yXCIpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuYnJvd3Nlci5zZXRCYXNlU2VsZWN0b3IoY29tbWFuZEFyZ3Muc2VsZWN0b3IpXG4gICAgICByZXR1cm4ge29rOiB0cnVlfVxuICAgIH1cblxuICAgIGlmIChjb21tYW5kID09PSBcImdldEN1cnJlbnRVcmxcIikge1xuICAgICAgcmV0dXJuIHtjdXJyZW50VXJsOiBhd2FpdCB0aGlzLmJyb3dzZXIuZ2V0Q3VycmVudFVybCgpfVxuICAgIH1cblxuICAgIGlmIChjb21tYW5kID09PSBcImdldEhUTUxcIikge1xuICAgICAgcmV0dXJuIHtodG1sOiBhd2FpdCB0aGlzLmJyb3dzZXIuZ2V0SFRNTCgpfVxuICAgIH1cblxuICAgIGlmIChjb21tYW5kID09PSBcImdldEJyb3dzZXJMb2dzXCIpIHtcbiAgICAgIHJldHVybiB7bG9nczogYXdhaXQgdGhpcy5icm93c2VyLmdldEJyb3dzZXJMb2dzKCl9XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmQgPT09IFwidGFrZVNjcmVlbnNob3RcIikge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYnJvd3Nlci50YWtlU2NyZWVuc2hvdCgpXG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmQgPT09IFwiZmluZFwiKSB7XG4gICAgICBpZiAoIWNvbW1hbmRBcmdzLnNlbGVjdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZpbmQgcmVxdWlyZXMgc2VsZWN0b3JcIilcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudCA9IGF3YWl0IHRoaXMuYnJvd3Nlci5maW5kKGNvbW1hbmRBcmdzLnNlbGVjdG9yLCB0aGlzLm5vcm1hbGl6ZUZpbmRBcmdzKGNvbW1hbmRBcmdzKSlcblxuICAgICAgcmV0dXJuIHtlbGVtZW50OiBhd2FpdCB0aGlzLnNlcmlhbGl6ZUVsZW1lbnQoZWxlbWVudCl9XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmQgPT09IFwiZmluZEJ5VGVzdElEXCIpIHtcbiAgICAgIGNvbnN0IHRlc3RJRCA9IGNvbW1hbmRBcmdzLnRlc3RJRCA/PyBjb21tYW5kQXJncy50ZXN0SWRcblxuICAgICAgaWYgKCF0ZXN0SUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmluZEJ5VGVzdElEIHJlcXVpcmVzIHRlc3RJRFwiKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgdGhpcy5icm93c2VyLmZpbmRCeVRlc3RJRCh0ZXN0SUQsIHRoaXMubm9ybWFsaXplRmluZEFyZ3MoY29tbWFuZEFyZ3MpKVxuXG4gICAgICByZXR1cm4ge2VsZW1lbnQ6IGF3YWl0IHRoaXMuc2VyaWFsaXplRWxlbWVudChlbGVtZW50KX1cbiAgICB9XG5cbiAgICBpZiAoY29tbWFuZCA9PT0gXCJjbGlja1wiKSB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGNvbW1hbmRBcmdzLnNlbGVjdG9yXG5cbiAgICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpY2sgcmVxdWlyZXMgc2VsZWN0b3JcIilcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5icm93c2VyLmNsaWNrKHNlbGVjdG9yLCB0aGlzLm5vcm1hbGl6ZUZpbmRBcmdzKGNvbW1hbmRBcmdzKSlcbiAgICAgIHJldHVybiB7b2s6IHRydWV9XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmQgPT09IFwid2FpdEZvck5vU2VsZWN0b3JcIikge1xuICAgICAgaWYgKCFjb21tYW5kQXJncy5zZWxlY3Rvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ3YWl0Rm9yTm9TZWxlY3RvciByZXF1aXJlcyBzZWxlY3RvclwiKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmJyb3dzZXIud2FpdEZvck5vU2VsZWN0b3IoY29tbWFuZEFyZ3Muc2VsZWN0b3IsIHRoaXMubm9ybWFsaXplRmluZEFyZ3MoY29tbWFuZEFyZ3MpKVxuICAgICAgcmV0dXJuIHtvazogdHJ1ZX1cbiAgICB9XG5cbiAgICBpZiAoY29tbWFuZCA9PT0gXCJleHBlY3ROb0VsZW1lbnRcIikge1xuICAgICAgaWYgKCFjb21tYW5kQXJncy5zZWxlY3Rvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJleHBlY3ROb0VsZW1lbnQgcmVxdWlyZXMgc2VsZWN0b3JcIilcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5icm93c2VyLmV4cGVjdE5vRWxlbWVudChjb21tYW5kQXJncy5zZWxlY3RvciwgdGhpcy5ub3JtYWxpemVGaW5kQXJncyhjb21tYW5kQXJncykpXG4gICAgICByZXR1cm4ge29rOiB0cnVlfVxuICAgIH1cblxuICAgIGlmIChjb21tYW5kID09PSBcImludGVyYWN0XCIpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gY29tbWFuZEFyZ3Muc2VsZWN0b3JcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBjb21tYW5kQXJncy5tZXRob2ROYW1lID8/IGNvbW1hbmRBcmdzLm1ldGhvZFxuICAgICAgY29uc3QgbWV0aG9kQXJncyA9IEFycmF5LmlzQXJyYXkoY29tbWFuZEFyZ3MuYXJncykgPyBjb21tYW5kQXJncy5hcmdzIDogW11cbiAgICAgIGNvbnN0IGludGVyYWN0QXJncyA9IC8qKiBAdHlwZSB7e3NlbGVjdG9yOiBzdHJpbmd9ICYgaW1wb3J0KFwiLi9zeXN0ZW0tdGVzdC5qc1wiKS5JbnRlcmFjdEFyZ3N9ICovICh7c2VsZWN0b3IsIC4uLnRoaXMubm9ybWFsaXplRmluZEFyZ3MoY29tbWFuZEFyZ3MpfSlcblxuICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnRlcmFjdCByZXF1aXJlcyBzZWxlY3RvclwiKVxuICAgICAgfVxuXG4gICAgICBpZiAoIW1ldGhvZE5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW50ZXJhY3QgcmVxdWlyZXMgbWV0aG9kTmFtZVwiKVxuICAgICAgfVxuXG4gICAgICBpZiAoXCJ3aXRoRmFsbGJhY2tcIiBpbiBjb21tYW5kQXJncyAmJiBjb21tYW5kQXJncy53aXRoRmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmRBcmdzLndpdGhGYWxsYmFjayA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICBpbnRlcmFjdEFyZ3Mud2l0aEZhbGxiYWNrID0gY29tbWFuZEFyZ3Mud2l0aEZhbGxiYWNrXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW50ZXJhY3RBcmdzLndpdGhGYWxsYmFjayA9IGNvbW1hbmRBcmdzLndpdGhGYWxsYmFjayA9PT0gXCJ0cnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmJyb3dzZXIuaW50ZXJhY3QoaW50ZXJhY3RBcmdzLCBtZXRob2ROYW1lLCAuLi5tZXRob2RBcmdzKVxuXG4gICAgICByZXR1cm4ge3Jlc3VsdH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYnJvd3NlciBjb21tYW5kOiAke2NvbW1hbmR9YClcbiAgfVxufVxuIl19
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1jb21tYW5kLXJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9icm93c2VyLWNvbW1hbmQtcnVubmVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLFFBQVE7SUFDN0MsSUFBSSxRQUFRLEtBQUssSUFBSSxJQUFJLFFBQVEsS0FBSyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFDekQsSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLFFBQVEsS0FBSyxPQUFPO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFNUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLFNBQVMsK0JBQStCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ2xHLENBQUM7QUFFRCxpRUFBaUU7QUFDakUsTUFBTSxDQUFDLE9BQU8sT0FBTyxvQkFBb0I7SUFDdkM7OztPQUdHO0lBQ0gsWUFBWSxFQUFDLE9BQU8sRUFBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsb0JBQW9CLENBQUMsV0FBVztRQUM5QixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUE7UUFFekIsSUFBSSxTQUFTLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbEUsY0FBYyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBRXBELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7WUFDNUQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLGNB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VyxDQUFDLEVBQUMsQ0FBQyxDQUFBO1lBRXJKLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUE7WUFDL0MsQ0FBQztZQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1lBQ2pELENBQUM7WUFFRCxJQUFJLGNBQWMsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDNUUsSUFBSSxPQUFPLFdBQVcsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2xELFlBQVksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQTtnQkFDdEQsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFlBQVksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLFlBQVksS0FBSyxNQUFNLENBQUE7Z0JBQ2pFLENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUE7WUFFbkYsT0FBTyxFQUFDLE1BQU0sRUFBQyxDQUFBO1FBQ2pCLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3hELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFyc2UgYSBjb29raWUgYm9vbGVhbiBhdHRyaWJ1dGUgY29taW5nIGluIG92ZXIgdGhlIEpTT04gY29tbWFuZCB0cmFuc3BvcnQuXG4gKiBUaGUgdHJhbnNwb3J0IGNhcnJpZXMgYm9vbGVhbnMgZWl0aGVyIGFzIG5hdGl2ZSBgdHJ1ZWAvYGZhbHNlYCBvciBhcyB0aGVcbiAqIHN0cmluZyBmb3JtcyBgXCJ0cnVlXCJgL2BcImZhbHNlXCJgLiBBbnl0aGluZyBlbHNlIGlzIHJlamVjdGVkIHNvIGEgdHlwbyBsaWtlXG4gKiBgLS1jb29raWUtc2VjdXJlPVRSVUVgIG9yIGAtLWNvb2tpZS1zZWN1cmU9MWAgZmFpbHMgbG91ZGx5IGluc3RlYWQgb2ZcbiAqIHNpbGVudGx5IHByb2R1Y2luZyBhbiBpbnNlY3VyZSBjb29raWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXG4gKiBAcGFyYW0ge3Vua25vd259IHJhd1ZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VDb29raWVCb29sZWFuKGZpZWxkTmFtZSwgcmF3VmFsdWUpIHtcbiAgaWYgKHJhd1ZhbHVlID09PSB0cnVlIHx8IHJhd1ZhbHVlID09PSBcInRydWVcIikgcmV0dXJuIHRydWVcbiAgaWYgKHJhd1ZhbHVlID09PSBmYWxzZSB8fCByYXdWYWx1ZSA9PT0gXCJmYWxzZVwiKSByZXR1cm4gZmFsc2VcblxuICB0aHJvdyBuZXcgRXJyb3IoYGFkZENvb2tpZSAke2ZpZWxkTmFtZX0gbXVzdCBiZSB0cnVlIG9yIGZhbHNlLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyYXdWYWx1ZSl9YClcbn1cblxuLyoqIFJ1bnMgYnJvd3NlciBjb21tYW5kcyBhY3Jvc3MgQ0xJIGFuZCBXZWJTb2NrZXQgdHJhbnNwb3J0cy4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJDb21tYW5kUnVubmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9icm93c2VyLmpzXCIpLmRlZmF1bHR9IGFyZ3MuYnJvd3NlclxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2Jyb3dzZXJ9KSB7XG4gICAgdGhpcy5icm93c2VyID0gYnJvd3NlclxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29tbWFuZEFyZ3NcbiAgICogQHJldHVybnMge3t0aW1lb3V0PzogbnVtYmVyfX1cbiAgICovXG4gIG5vcm1hbGl6ZVRpbWVvdXRBcmdzKGNvbW1hbmRBcmdzKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEFyZ3MgPSB7fVxuXG4gICAgaWYgKFwidGltZW91dFwiIGluIGNvbW1hbmRBcmdzICYmIGNvbW1hbmRBcmdzLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9ybWFsaXplZEFyZ3MudGltZW91dCA9IE51bWJlcihjb21tYW5kQXJncy50aW1lb3V0KVxuXG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKG5vcm1hbGl6ZWRBcmdzLnRpbWVvdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0aW1lb3V0OiAke2NvbW1hbmRBcmdzLnRpbWVvdXR9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZEFyZ3NcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbW1hbmRBcmdzXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3N5c3RlbS10ZXN0LmpzXCIpLkZpbmRBcmdzfVxuICAgKi9cbiAgbm9ybWFsaXplRmluZEFyZ3MoY29tbWFuZEFyZ3MpIHtcbiAgICBjb25zdCBmaW5kQXJncyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zeXN0ZW0tdGVzdC5qc1wiKS5GaW5kQXJnc30gKi8gKHRoaXMubm9ybWFsaXplVGltZW91dEFyZ3MoY29tbWFuZEFyZ3MpKVxuXG4gICAgaWYgKFwidmlzaWJsZVwiIGluIGNvbW1hbmRBcmdzICYmIGNvbW1hbmRBcmdzLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbW1hbmRBcmdzLnZpc2libGUgPT09IG51bGwgfHwgY29tbWFuZEFyZ3MudmlzaWJsZSA9PT0gXCJudWxsXCIpIHtcbiAgICAgICAgZmluZEFyZ3MudmlzaWJsZSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbW1hbmRBcmdzLnZpc2libGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIGZpbmRBcmdzLnZpc2libGUgPSBjb21tYW5kQXJncy52aXNpYmxlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaW5kQXJncy52aXNpYmxlID0gY29tbWFuZEFyZ3MudmlzaWJsZSA9PT0gXCJ0cnVlXCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXCJ1c2VCYXNlU2VsZWN0b3JcIiBpbiBjb21tYW5kQXJncyAmJiBjb21tYW5kQXJncy51c2VCYXNlU2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBjb21tYW5kQXJncy51c2VCYXNlU2VsZWN0b3IgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIGZpbmRBcmdzLnVzZUJhc2VTZWxlY3RvciA9IGNvbW1hbmRBcmdzLnVzZUJhc2VTZWxlY3RvclxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmluZEFyZ3MudXNlQmFzZVNlbGVjdG9yID0gY29tbWFuZEFyZ3MudXNlQmFzZVNlbGVjdG9yID09PSBcInRydWVcIlxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcInNjcm9sbFRvXCIgaW4gY29tbWFuZEFyZ3MgJiYgY29tbWFuZEFyZ3Muc2Nyb2xsVG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBjb21tYW5kQXJncy5zY3JvbGxUbyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgZmluZEFyZ3Muc2Nyb2xsVG8gPSBjb21tYW5kQXJncy5zY3JvbGxUb1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmluZEFyZ3Muc2Nyb2xsVG8gPSBjb21tYW5kQXJncy5zY3JvbGxUbyA9PT0gXCJ0cnVlXCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmluZEFyZ3NcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50fSBlbGVtZW50XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fVxuICAgKi9cbiAgYXN5bmMgc2VyaWFsaXplRWxlbWVudChlbGVtZW50KSB7XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IGVsZW1lbnQuZ2V0VGV4dCgpXG4gICAgY29uc3QgdGFnTmFtZSA9IGF3YWl0IGVsZW1lbnQuZ2V0VGFnTmFtZSgpXG4gICAgY29uc3QgZGlzcGxheWVkID0gYXdhaXQgZWxlbWVudC5pc0Rpc3BsYXllZCgpXG5cbiAgICByZXR1cm4ge2Rpc3BsYXllZCwgdGFnTmFtZSwgdGV4dH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbW1hbmRBcmdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBhc3luYyBydW4oY29tbWFuZCwgY29tbWFuZEFyZ3MgPSB7fSkge1xuICAgIGlmIChjb21tYW5kID09PSBcInZpc2l0XCIpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBjb21tYW5kQXJncy5wYXRoID8/IGNvbW1hbmRBcmdzLnVybFxuXG4gICAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidmlzaXQgcmVxdWlyZXMgcGF0aCBvciB1cmxcIilcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5icm93c2VyLnZpc2l0KHBhdGgsIHRoaXMubm9ybWFsaXplVGltZW91dEFyZ3MoY29tbWFuZEFyZ3MpKVxuICAgICAgcmV0dXJuIHtvazogdHJ1ZX1cbiAgICB9XG5cbiAgICBpZiAoY29tbWFuZCA9PT0gXCJkaXNtaXNzVG9cIikge1xuICAgICAgY29uc3QgcGF0aCA9IGNvbW1hbmRBcmdzLnBhdGggPz8gY29tbWFuZEFyZ3MudXJsXG5cbiAgICAgIGlmICghcGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNtaXNzVG8gcmVxdWlyZXMgcGF0aCBvciB1cmxcIilcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5icm93c2VyLmRpc21pc3NUbyhwYXRoLCB0aGlzLm5vcm1hbGl6ZVRpbWVvdXRBcmdzKGNvbW1hbmRBcmdzKSlcbiAgICAgIHJldHVybiB7b2s6IHRydWV9XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmQgPT09IFwic2V0QmFzZVNlbGVjdG9yXCIpIHtcbiAgICAgIGlmICghY29tbWFuZEFyZ3Muc2VsZWN0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0QmFzZVNlbGVjdG9yIHJlcXVpcmVzIHNlbGVjdG9yXCIpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuYnJvd3Nlci5zZXRCYXNlU2VsZWN0b3IoY29tbWFuZEFyZ3Muc2VsZWN0b3IpXG4gICAgICByZXR1cm4ge29rOiB0cnVlfVxuICAgIH1cblxuICAgIGlmIChjb21tYW5kID09PSBcImdldEN1cnJlbnRVcmxcIikge1xuICAgICAgcmV0dXJuIHtjdXJyZW50VXJsOiBhd2FpdCB0aGlzLmJyb3dzZXIuZ2V0Q3VycmVudFVybCgpfVxuICAgIH1cblxuICAgIGlmIChjb21tYW5kID09PSBcImdldEhUTUxcIikge1xuICAgICAgcmV0dXJuIHtodG1sOiBhd2FpdCB0aGlzLmJyb3dzZXIuZ2V0SFRNTCgpfVxuICAgIH1cblxuICAgIGlmIChjb21tYW5kID09PSBcImdldEJyb3dzZXJMb2dzXCIpIHtcbiAgICAgIHJldHVybiB7bG9nczogYXdhaXQgdGhpcy5icm93c2VyLmdldEJyb3dzZXJMb2dzKCl9XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmQgPT09IFwidGFrZVNjcmVlbnNob3RcIikge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYnJvd3Nlci50YWtlU2NyZWVuc2hvdCgpXG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmQgPT09IFwiZmluZFwiKSB7XG4gICAgICBpZiAoIWNvbW1hbmRBcmdzLnNlbGVjdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZpbmQgcmVxdWlyZXMgc2VsZWN0b3JcIilcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudCA9IGF3YWl0IHRoaXMuYnJvd3Nlci5maW5kKGNvbW1hbmRBcmdzLnNlbGVjdG9yLCB0aGlzLm5vcm1hbGl6ZUZpbmRBcmdzKGNvbW1hbmRBcmdzKSlcblxuICAgICAgcmV0dXJuIHtlbGVtZW50OiBhd2FpdCB0aGlzLnNlcmlhbGl6ZUVsZW1lbnQoZWxlbWVudCl9XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmQgPT09IFwiZmluZEJ5VGVzdElEXCIpIHtcbiAgICAgIGNvbnN0IHRlc3RJRCA9IGNvbW1hbmRBcmdzLnRlc3RJRCA/PyBjb21tYW5kQXJncy50ZXN0SWRcblxuICAgICAgaWYgKCF0ZXN0SUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmluZEJ5VGVzdElEIHJlcXVpcmVzIHRlc3RJRFwiKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgdGhpcy5icm93c2VyLmZpbmRCeVRlc3RJRCh0ZXN0SUQsIHRoaXMubm9ybWFsaXplRmluZEFyZ3MoY29tbWFuZEFyZ3MpKVxuXG4gICAgICByZXR1cm4ge2VsZW1lbnQ6IGF3YWl0IHRoaXMuc2VyaWFsaXplRWxlbWVudChlbGVtZW50KX1cbiAgICB9XG5cbiAgICBpZiAoY29tbWFuZCA9PT0gXCJjbGlja1wiKSB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGNvbW1hbmRBcmdzLnNlbGVjdG9yXG5cbiAgICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpY2sgcmVxdWlyZXMgc2VsZWN0b3JcIilcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5icm93c2VyLmNsaWNrKHNlbGVjdG9yLCB0aGlzLm5vcm1hbGl6ZUZpbmRBcmdzKGNvbW1hbmRBcmdzKSlcbiAgICAgIHJldHVybiB7b2s6IHRydWV9XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmQgPT09IFwid2FpdEZvck5vU2VsZWN0b3JcIikge1xuICAgICAgaWYgKCFjb21tYW5kQXJncy5zZWxlY3Rvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ3YWl0Rm9yTm9TZWxlY3RvciByZXF1aXJlcyBzZWxlY3RvclwiKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmJyb3dzZXIud2FpdEZvck5vU2VsZWN0b3IoY29tbWFuZEFyZ3Muc2VsZWN0b3IsIHRoaXMubm9ybWFsaXplRmluZEFyZ3MoY29tbWFuZEFyZ3MpKVxuICAgICAgcmV0dXJuIHtvazogdHJ1ZX1cbiAgICB9XG5cbiAgICBpZiAoY29tbWFuZCA9PT0gXCJleHBlY3ROb0VsZW1lbnRcIikge1xuICAgICAgaWYgKCFjb21tYW5kQXJncy5zZWxlY3Rvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJleHBlY3ROb0VsZW1lbnQgcmVxdWlyZXMgc2VsZWN0b3JcIilcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5icm93c2VyLmV4cGVjdE5vRWxlbWVudChjb21tYW5kQXJncy5zZWxlY3RvciwgdGhpcy5ub3JtYWxpemVGaW5kQXJncyhjb21tYW5kQXJncykpXG4gICAgICByZXR1cm4ge29rOiB0cnVlfVxuICAgIH1cblxuICAgIGlmIChjb21tYW5kID09PSBcImV4ZWN1dGVTY3JpcHRcIikge1xuICAgICAgY29uc3Qgc2NyaXB0ID0gY29tbWFuZEFyZ3Muc2NyaXB0XG5cbiAgICAgIGlmICh0eXBlb2Ygc2NyaXB0ICE9PSBcInN0cmluZ1wiIHx8IHNjcmlwdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZXhlY3V0ZVNjcmlwdCByZXF1aXJlcyBzY3JpcHRcIilcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NyaXB0QXJncyA9IEFycmF5LmlzQXJyYXkoY29tbWFuZEFyZ3MuYXJncykgPyBjb21tYW5kQXJncy5hcmdzIDogW11cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYnJvd3Nlci5leGVjdXRlU2NyaXB0KHNjcmlwdCwgLi4uc2NyaXB0QXJncylcblxuICAgICAgcmV0dXJuIHtyZXN1bHR9XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmQgPT09IFwiYWRkQ29va2llXCIpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBjb21tYW5kQXJncy5uYW1lXG5cbiAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gXCJzdHJpbmdcIiB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRDb29raWUgcmVxdWlyZXMgbmFtZVwiKVxuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbW1hbmRBcmdzLnZhbHVlXG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWRkQ29va2llIHJlcXVpcmVzIHN0cmluZyB2YWx1ZVwiKVxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge3tuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZywgcGF0aD86IHN0cmluZywgc2VjdXJlPzogYm9vbGVhbiwgaHR0cE9ubHk/OiBib29sZWFuLCBleHBpcnk/OiBudW1iZXIsIHNhbWVTaXRlPzogXCJTdHJpY3RcIiB8IFwiTGF4XCIgfCBcIk5vbmVcIn19ICovXG4gICAgICBjb25zdCBjb29raWUgPSB7bmFtZSwgdmFsdWV9XG5cbiAgICAgIGlmICh0eXBlb2YgY29tbWFuZEFyZ3MuZG9tYWluID09PSBcInN0cmluZ1wiICYmIGNvbW1hbmRBcmdzLmRvbWFpbi5sZW5ndGggPiAwKSBjb29raWUuZG9tYWluID0gY29tbWFuZEFyZ3MuZG9tYWluXG4gICAgICBpZiAodHlwZW9mIGNvbW1hbmRBcmdzLnBhdGggPT09IFwic3RyaW5nXCIgJiYgY29tbWFuZEFyZ3MucGF0aC5sZW5ndGggPiAwKSBjb29raWUucGF0aCA9IGNvbW1hbmRBcmdzLnBhdGhcbiAgICAgIGlmIChjb21tYW5kQXJncy5zZWN1cmUgIT09IHVuZGVmaW5lZCkgY29va2llLnNlY3VyZSA9IHBhcnNlQ29va2llQm9vbGVhbihcInNlY3VyZVwiLCBjb21tYW5kQXJncy5zZWN1cmUpXG4gICAgICBpZiAoY29tbWFuZEFyZ3MuaHR0cE9ubHkgIT09IHVuZGVmaW5lZCkgY29va2llLmh0dHBPbmx5ID0gcGFyc2VDb29raWVCb29sZWFuKFwiaHR0cE9ubHlcIiwgY29tbWFuZEFyZ3MuaHR0cE9ubHkpXG4gICAgICBpZiAoY29tbWFuZEFyZ3MuZXhwaXJ5ICE9PSB1bmRlZmluZWQpIGNvb2tpZS5leHBpcnkgPSBOdW1iZXIoY29tbWFuZEFyZ3MuZXhwaXJ5KVxuICAgICAgaWYgKHR5cGVvZiBjb21tYW5kQXJncy5zYW1lU2l0ZSA9PT0gXCJzdHJpbmdcIikgY29va2llLnNhbWVTaXRlID0gLyoqIEB0eXBlIHtcIlN0cmljdFwiIHwgXCJMYXhcIiB8IFwiTm9uZVwifSAqLyAoY29tbWFuZEFyZ3Muc2FtZVNpdGUpXG5cbiAgICAgIGF3YWl0IHRoaXMuYnJvd3Nlci5hZGRDb29raWUoY29va2llKVxuXG4gICAgICByZXR1cm4ge29rOiB0cnVlfVxuICAgIH1cblxuICAgIGlmIChjb21tYW5kID09PSBcImludGVyYWN0XCIpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gY29tbWFuZEFyZ3Muc2VsZWN0b3JcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBjb21tYW5kQXJncy5tZXRob2ROYW1lID8/IGNvbW1hbmRBcmdzLm1ldGhvZFxuICAgICAgY29uc3QgbWV0aG9kQXJncyA9IEFycmF5LmlzQXJyYXkoY29tbWFuZEFyZ3MuYXJncykgPyBjb21tYW5kQXJncy5hcmdzIDogW11cbiAgICAgIGNvbnN0IGludGVyYWN0QXJncyA9IC8qKiBAdHlwZSB7e3NlbGVjdG9yOiBzdHJpbmd9ICYgaW1wb3J0KFwiLi9zeXN0ZW0tdGVzdC5qc1wiKS5JbnRlcmFjdEFyZ3N9ICovICh7c2VsZWN0b3IsIC4uLnRoaXMubm9ybWFsaXplRmluZEFyZ3MoY29tbWFuZEFyZ3MpfSlcblxuICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnRlcmFjdCByZXF1aXJlcyBzZWxlY3RvclwiKVxuICAgICAgfVxuXG4gICAgICBpZiAoIW1ldGhvZE5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW50ZXJhY3QgcmVxdWlyZXMgbWV0aG9kTmFtZVwiKVxuICAgICAgfVxuXG4gICAgICBpZiAoXCJ3aXRoRmFsbGJhY2tcIiBpbiBjb21tYW5kQXJncyAmJiBjb21tYW5kQXJncy53aXRoRmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmRBcmdzLndpdGhGYWxsYmFjayA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICBpbnRlcmFjdEFyZ3Mud2l0aEZhbGxiYWNrID0gY29tbWFuZEFyZ3Mud2l0aEZhbGxiYWNrXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW50ZXJhY3RBcmdzLndpdGhGYWxsYmFjayA9IGNvbW1hbmRBcmdzLndpdGhGYWxsYmFjayA9PT0gXCJ0cnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmJyb3dzZXIuaW50ZXJhY3QoaW50ZXJhY3RBcmdzLCBtZXRob2ROYW1lLCAuLi5tZXRob2RBcmdzKVxuXG4gICAgICByZXR1cm4ge3Jlc3VsdH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYnJvd3NlciBjb21tYW5kOiAke2NvbW1hbmR9YClcbiAgfVxufVxuIl19
|
package/build/browser.d.ts
CHANGED
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @typedef {object} BrowserArgs
|
|
3
|
-
* @property {boolean} [debug] Enable debug logging.
|
|
4
|
-
* @property {BrowserDriverConfig} [driver] Driver configuration.
|
|
5
|
-
* @property {import("./system-test-communicator.js").default} [communicator] Optional command communicator for helper-driven navigation.
|
|
6
|
-
* @property {string} [screenshotsPath] Directory used for saved screenshots and browser artifacts.
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* @typedef {object} BrowserDriverConfig
|
|
10
|
-
* @property {"selenium"|"appium"} [type] Driver implementation to use.
|
|
11
|
-
* @property {Record<string, any>} [options] Driver-specific options.
|
|
12
|
-
*/
|
|
13
|
-
/**
|
|
14
|
-
* @typedef {object} BrowserNavigationArgs
|
|
15
|
-
* @property {number} [timeout] Override the timeout for this navigation command.
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
|
-
* @typedef {object} BrowserPathWaitArgs
|
|
19
|
-
* @property {number} [timeout] Override the timeout for this path wait.
|
|
20
|
-
*/
|
|
21
1
|
/** Generic browser session wrapper around the configured driver. */
|
|
22
2
|
export default class Browser {
|
|
23
3
|
/** @param {BrowserArgs} [args] */
|
|
@@ -104,6 +84,27 @@ export default class Browser {
|
|
|
104
84
|
* @returns {Promise<void>}
|
|
105
85
|
*/
|
|
106
86
|
waitForPath(expectedPath: string, args?: BrowserPathWaitArgs): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Waits until the current URL exactly matches the expected URL.
|
|
89
|
+
* @param {string} expectedUrl Exact URL expected.
|
|
90
|
+
* @param {BrowserCurrentUrlWaitArgs} [args] Optional timeout.
|
|
91
|
+
* @returns {Promise<void>}
|
|
92
|
+
*/
|
|
93
|
+
waitForCurrentUrl(expectedUrl: string, args?: BrowserCurrentUrlWaitArgs): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Waits until the current URL contains a fragment.
|
|
96
|
+
* @param {string} expectedFragment Fragment that should appear.
|
|
97
|
+
* @param {BrowserCurrentUrlWaitArgs} [args] Optional timeout.
|
|
98
|
+
* @returns {Promise<void>}
|
|
99
|
+
*/
|
|
100
|
+
waitForUrlContains(expectedFragment: string, args?: BrowserCurrentUrlWaitArgs): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Waits until the current URL does not contain a fragment.
|
|
103
|
+
* @param {string} unexpectedFragment Fragment that should disappear.
|
|
104
|
+
* @param {BrowserCurrentUrlWaitArgs} [args] Optional timeout.
|
|
105
|
+
* @returns {Promise<void>}
|
|
106
|
+
*/
|
|
107
|
+
waitForUrlExcludes(unexpectedFragment: string, args?: BrowserCurrentUrlWaitArgs): Promise<void>;
|
|
107
108
|
/**
|
|
108
109
|
* @param {string} selector
|
|
109
110
|
* @param {import("./system-test.js").FindArgs} [args]
|
|
@@ -152,6 +153,40 @@ export default class Browser {
|
|
|
152
153
|
clearAndSendKeys(elementOrIdentifier: import("selenium-webdriver").WebElement | string | ({
|
|
153
154
|
selector: string;
|
|
154
155
|
} & import("./system-test.js").InteractArgs), nextValue: string): Promise<void>;
|
|
156
|
+
/**
|
|
157
|
+
* Replaces an input-like element's value by test id.
|
|
158
|
+
* @param {string} testID Field `data-testid` to target.
|
|
159
|
+
* @param {string} nextValue Text to leave in the field.
|
|
160
|
+
* @param {BrowserTestIDInputArgs} [args] Optional lookup timeout.
|
|
161
|
+
* @returns {Promise<void>}
|
|
162
|
+
*/
|
|
163
|
+
replaceTestIDInputValue(testID: string, nextValue: string, args?: BrowserTestIDInputArgs): Promise<void>;
|
|
164
|
+
/**
|
|
165
|
+
* Waits until a test id contains expected visible text.
|
|
166
|
+
* @param {string} testID Element `data-testid` to inspect.
|
|
167
|
+
* @param {string} expectedText Fragment that must appear in the element text.
|
|
168
|
+
* @param {BrowserTextWaitArgs} [args] Optional timeout.
|
|
169
|
+
* @returns {Promise<void>}
|
|
170
|
+
*/
|
|
171
|
+
waitForTestIDText(testID: string, expectedText: string, args?: BrowserTextWaitArgs): Promise<void>;
|
|
172
|
+
/**
|
|
173
|
+
* Waits until a test id no longer contains excluded visible text.
|
|
174
|
+
* @param {string} testID Element `data-testid` to inspect.
|
|
175
|
+
* @param {string} excludedText Fragment that should disappear from the element text.
|
|
176
|
+
* @param {BrowserTextWaitArgs} [args] Optional timeout.
|
|
177
|
+
* @returns {Promise<void>}
|
|
178
|
+
*/
|
|
179
|
+
waitForTestIDTextExcludes(testID: string, excludedText: string, args?: BrowserTextWaitArgs): Promise<void>;
|
|
180
|
+
/**
|
|
181
|
+
* Asserts a rendered element has a CSS color from the expected palette.
|
|
182
|
+
* @param {string} testID Element `data-testid` to inspect.
|
|
183
|
+
* @param {string} propertyName CSS property to read.
|
|
184
|
+
* @param {string} expectedRgb Expected RGB fragment.
|
|
185
|
+
* @param {string} lightRgb Disallowed RGB fragment.
|
|
186
|
+
* @param {string} description Human-readable element description.
|
|
187
|
+
* @returns {Promise<void>}
|
|
188
|
+
*/
|
|
189
|
+
expectTestIDCssColor(testID: string, propertyName: string, expectedRgb: string, lightRgb: string, description: string): Promise<void>;
|
|
155
190
|
/**
|
|
156
191
|
* Scrolls an element into view.
|
|
157
192
|
* @param {import("selenium-webdriver").WebElement|string|{selector: string} & import("./system-test.js").FindArgs} elementOrIdentifier
|
|
@@ -194,6 +229,42 @@ export default class Browser {
|
|
|
194
229
|
driverVisit(path: string): Promise<void>;
|
|
195
230
|
/** @returns {Promise<void>} */
|
|
196
231
|
deleteAllCookies(): Promise<void>;
|
|
232
|
+
/**
|
|
233
|
+
* Add a cookie to the active driver session for the current document
|
|
234
|
+
* origin. Useful when an out-of-band login (curl, fetch, etc.) returned
|
|
235
|
+
* a `Set-Cookie` value and the test needs the browser to start
|
|
236
|
+
* authenticated without driving the sign-in UI.
|
|
237
|
+
*
|
|
238
|
+
* The driver must already be on a page whose origin/domain matches the
|
|
239
|
+
* cookie domain, otherwise Selenium will reject the call.
|
|
240
|
+
* @param {{name: string, value: string, domain?: string, path?: string, secure?: boolean, httpOnly?: boolean, expiry?: number, sameSite?: "Strict" | "Lax" | "None"}} cookie
|
|
241
|
+
* @returns {Promise<void>}
|
|
242
|
+
*/
|
|
243
|
+
addCookie(cookie: {
|
|
244
|
+
name: string;
|
|
245
|
+
value: string;
|
|
246
|
+
domain?: string;
|
|
247
|
+
path?: string;
|
|
248
|
+
secure?: boolean;
|
|
249
|
+
httpOnly?: boolean;
|
|
250
|
+
expiry?: number;
|
|
251
|
+
sameSite?: "Strict" | "Lax" | "None";
|
|
252
|
+
}): Promise<void>;
|
|
253
|
+
/**
|
|
254
|
+
* Run an arbitrary script in the active browser session and return the
|
|
255
|
+
* resolved value. `script` is the function body executed in the browser
|
|
256
|
+
* (`new Function("...")`-style); `args` are forwarded as `arguments[i]`.
|
|
257
|
+
* Asynchronous scripts must `return` a Promise, which Selenium awaits.
|
|
258
|
+
*
|
|
259
|
+
* Useful for verification flows that need to call into application code
|
|
260
|
+
* (e.g. `fetch("/development/sign-in", {...})`) without going through the
|
|
261
|
+
* UI, or to read browser state the existing finder/interact commands
|
|
262
|
+
* don't expose.
|
|
263
|
+
* @param {string} script
|
|
264
|
+
* @param {...any} args
|
|
265
|
+
* @returns {Promise<any>}
|
|
266
|
+
*/
|
|
267
|
+
executeScript(script: string, ...args: any[]): Promise<any>;
|
|
197
268
|
/**
|
|
198
269
|
* @param {string} type
|
|
199
270
|
* @param {string} path
|
|
@@ -282,3 +353,21 @@ export type BrowserPathWaitArgs = {
|
|
|
282
353
|
*/
|
|
283
354
|
timeout?: number | undefined;
|
|
284
355
|
};
|
|
356
|
+
export type BrowserTextWaitArgs = {
|
|
357
|
+
/**
|
|
358
|
+
* Override the timeout for this text wait.
|
|
359
|
+
*/
|
|
360
|
+
timeout?: number | undefined;
|
|
361
|
+
};
|
|
362
|
+
export type BrowserCurrentUrlWaitArgs = {
|
|
363
|
+
/**
|
|
364
|
+
* Override the timeout for this URL wait.
|
|
365
|
+
*/
|
|
366
|
+
timeout?: number | undefined;
|
|
367
|
+
};
|
|
368
|
+
export type BrowserTestIDInputArgs = {
|
|
369
|
+
/**
|
|
370
|
+
* Override timeout for the input lookup.
|
|
371
|
+
*/
|
|
372
|
+
timeout?: number | undefined;
|
|
373
|
+
};
|