system-testing 1.0.79 → 1.0.83
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 +17 -1
- package/build/browser-command-runner.d.ts +9 -2
- package/build/browser-command-runner.js +28 -8
- package/build/browser-daemon-constants.d.ts +2 -0
- package/build/browser-daemon-constants.js +3 -0
- package/build/browser-process.js +9 -2
- package/build/browser-registry.d.ts +10 -0
- package/build/browser-registry.js +82 -1
- package/build/browser.d.ts +23 -5
- package/build/browser.js +27 -10
- package/build/cli-helpers.js +46 -8
- package/build/cli.js +11 -2
- package/build/drivers/appium-driver.js +21 -21
- package/build/drivers/webdriver-driver.d.ts +25 -4
- package/build/drivers/webdriver-driver.js +199 -32
- package/build/system-test.d.ts +6 -0
- package/build/system-test.js +5 -2
- package/package.json +9 -6
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { Builder, By } from "selenium-webdriver";
|
|
2
2
|
import timeout from "awaitery/build/timeout.js";
|
|
3
3
|
import WebDriverDriver from "./webdriver-driver.js";
|
|
4
|
+
/**
|
|
5
|
+
* @param {string} message
|
|
6
|
+
* @param {unknown} cause
|
|
7
|
+
* @returns {Error & {cause: unknown}}
|
|
8
|
+
*/
|
|
9
|
+
function errorWithCause(message, cause) {
|
|
10
|
+
const error = /** @type {Error & {cause: unknown}} */ (new Error(message));
|
|
11
|
+
error.cause = cause;
|
|
12
|
+
return error;
|
|
13
|
+
}
|
|
4
14
|
/**
|
|
5
15
|
* @typedef {object} AppiumDriverOptions
|
|
6
16
|
* @property {string} [serverUrl] Remote Appium server URL to connect to.
|
|
@@ -118,21 +128,16 @@ export default class AppiumDriver extends WebDriverDriver {
|
|
|
118
128
|
*/
|
|
119
129
|
async findByAccessibilityId(testId, args = {}) {
|
|
120
130
|
const startTime = Date.now();
|
|
121
|
-
|
|
131
|
+
/** @type {import("selenium-webdriver").WebElement[]} */
|
|
132
|
+
let elements;
|
|
122
133
|
try {
|
|
123
134
|
elements = await this.allByAccessibilityId(testId, args);
|
|
124
135
|
}
|
|
125
136
|
catch (error) {
|
|
126
|
-
// Re-throw to recover stack trace
|
|
127
137
|
if (error instanceof Error) {
|
|
128
|
-
|
|
129
|
-
elements = [];
|
|
130
|
-
}
|
|
131
|
-
throw new Error(`${error.constructor.name} - ${error.message} (accessibility id: ${testId})`);
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
throw new Error(`${typeof error} - ${error} (accessibility id: ${testId})`);
|
|
138
|
+
throw errorWithCause(`${error.constructor.name} - ${error.message} (accessibility id: ${testId})`, error);
|
|
135
139
|
}
|
|
140
|
+
throw errorWithCause(`${typeof error} - ${error} (accessibility id: ${testId})`, error);
|
|
136
141
|
}
|
|
137
142
|
if (elements.length > 1) {
|
|
138
143
|
throw new Error(`More than 1 elements (${elements.length}) was found by accessibility id: ${testId}`);
|
|
@@ -197,7 +202,7 @@ export default class AppiumDriver extends WebDriverDriver {
|
|
|
197
202
|
if (error instanceof Error && error.constructor.name === "TimeoutError" && getTimeLeft() > 0) {
|
|
198
203
|
continue;
|
|
199
204
|
}
|
|
200
|
-
throw
|
|
205
|
+
throw errorWithCause(`Couldn't get elements with accessibility id: ${testId}: ${error instanceof Error ? error.message : error}`, error);
|
|
201
206
|
}
|
|
202
207
|
}
|
|
203
208
|
return elements;
|
|
@@ -209,21 +214,16 @@ export default class AppiumDriver extends WebDriverDriver {
|
|
|
209
214
|
*/
|
|
210
215
|
async findById(testId, args = {}) {
|
|
211
216
|
const startTime = Date.now();
|
|
212
|
-
|
|
217
|
+
/** @type {import("selenium-webdriver").WebElement[]} */
|
|
218
|
+
let elements;
|
|
213
219
|
try {
|
|
214
220
|
elements = await this.allById(testId, args);
|
|
215
221
|
}
|
|
216
222
|
catch (error) {
|
|
217
|
-
// Re-throw to recover stack trace
|
|
218
223
|
if (error instanceof Error) {
|
|
219
|
-
|
|
220
|
-
elements = [];
|
|
221
|
-
}
|
|
222
|
-
throw new Error(`${error.constructor.name} - ${error.message} (id: ${testId})`);
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
throw new Error(`${typeof error} - ${error} (id: ${testId})`);
|
|
224
|
+
throw errorWithCause(`${error.constructor.name} - ${error.message} (id: ${testId})`, error);
|
|
226
225
|
}
|
|
226
|
+
throw errorWithCause(`${typeof error} - ${error} (id: ${testId})`, error);
|
|
227
227
|
}
|
|
228
228
|
if (elements.length > 1) {
|
|
229
229
|
throw new Error(`More than 1 elements (${elements.length}) was found by id: ${testId}`);
|
|
@@ -288,7 +288,7 @@ export default class AppiumDriver extends WebDriverDriver {
|
|
|
288
288
|
if (error instanceof Error && error.constructor.name === "TimeoutError" && getTimeLeft() > 0) {
|
|
289
289
|
continue;
|
|
290
290
|
}
|
|
291
|
-
throw
|
|
291
|
+
throw errorWithCause(`Couldn't get elements with id: ${testId}: ${error instanceof Error ? error.message : error}`, error);
|
|
292
292
|
}
|
|
293
293
|
}
|
|
294
294
|
return elements;
|
|
@@ -304,4 +304,4 @@ export default class AppiumDriver extends WebDriverDriver {
|
|
|
304
304
|
return `http://${address}:${port}${basePath}`;
|
|
305
305
|
}
|
|
306
306
|
}
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwaXVtLWRyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kcml2ZXJzL2FwcGl1bS1kcml2ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5QyxPQUFPLE9BQU8sTUFBTSwyQkFBMkIsQ0FBQTtBQUMvQyxPQUFPLGVBQWUsTUFBTSx1QkFBdUIsQ0FBQTtBQUVuRDs7Ozs7Ozs7O0dBU0c7QUFDSDs7Ozs7R0FLRztBQUVIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxZQUFhLFNBQVEsZUFBZTtJQUN2RDs7T0FFRztJQUNILEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxVQUFVLEdBQUcsRUFBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUMsQ0FBQTtRQUV2RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RELFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUE7UUFDakQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFBO1FBQ3pDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxZQUFZLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDM0MsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQTtZQUVsRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FB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UUFBUSxFQUFFLENBQUE7SUFDL0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCdWlsZGVyLCBCeX0gZnJvbSBcInNlbGVuaXVtLXdlYmRyaXZlclwiXG5pbXBvcnQgdGltZW91dCBmcm9tIFwiYXdhaXRlcnkvYnVpbGQvdGltZW91dC5qc1wiXG5pbXBvcnQgV2ViRHJpdmVyRHJpdmVyIGZyb20gXCIuL3dlYmRyaXZlci1kcml2ZXIuanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEFwcGl1bURyaXZlck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VydmVyVXJsXSBSZW1vdGUgQXBwaXVtIHNlcnZlciBVUkwgdG8gY29ubmVjdCB0by5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW3NlcnZlckFyZ3NdIE9wdGlvbnMgcGFzc2VkIHRvIHRoZSBBcHBpdW0gc2VydmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3VzZURyaXZlcnNdIEFwcGl1bSBkcml2ZXIgbmFtZXMgdG8gbG9hZCB3aGVuIHN0YXJ0aW5nIHRoZSBzZXJ2ZXIuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IFtjYXBhYmlsaXRpZXNdIERlc2lyZWQgY2FwYWJpbGl0aWVzIGZvciB0aGUgc2Vzc2lvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYnJvd3Nlck5hbWVdIEJyb3dzZXIgbmFtZSBmb3Igd2ViIHNlc3Npb25zLlxuICogQHByb3BlcnR5IHtcImFjY2Vzc2liaWxpdHlJZFwifFwiY3NzXCJ8XCJpZFwifSBbdGVzdElkU3RyYXRlZ3ldIFN0cmF0ZWd5IGZvciByZXNvbHZpbmcgdGVzdCBJRHMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Rlc3RJZEF0dHJpYnV0ZV0gQXR0cmlidXRlIG5hbWUgd2hlbiB1c2luZyB0aGUgQ1NTIHRlc3QgSUQgc3RyYXRlZ3kuXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRmluZEFyZ3NcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdGltZW91dF0gT3ZlcnJpZGUgdGltZW91dCBmb3IgbG9va3VwLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbH0gW3Zpc2libGVdIFdoZXRoZXIgdG8gcmVxdWlyZSBlbGVtZW50cyB0byBiZSB2aXNpYmxlIChgdHJ1ZWApIG9yIGhpZGRlbiAoYGZhbHNlYCkuIFVzZSBgbnVsbGAgdG8gZGlzYWJsZSB2aXNpYmlsaXR5IGZpbHRlcmluZy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3VzZUJhc2VTZWxlY3Rvcl0gV2hldGhlciB0byBzY29wZSBieSB0aGUgYmFzZSBzZWxlY3Rvci5cbiAqL1xuXG4vKipcbiAqIEFwcGl1bSBkcml2ZXIgYmFja2VkIGJ5IHRoZSBBcHBpdW0gc2VydmVyIHBhY2thZ2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGl1bURyaXZlciBleHRlbmRzIFdlYkRyaXZlckRyaXZlciB7XG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIGNvbnN0IHNlcnZlckFyZ3MgPSB7Li4uKHRoaXMub3B0aW9ucy5zZXJ2ZXJBcmdzID8/IHt9KX1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudXNlRHJpdmVycyAmJiAhc2VydmVyQXJncy51c2VEcml2ZXJzKSB7XG4gICAgICBzZXJ2ZXJBcmdzLnVzZURyaXZlcnMgPSB0aGlzLm9wdGlvbnMudXNlRHJpdmVyc1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VydmVyVXJsKSB7XG4gICAgICB0aGlzLnNlcnZlclVybCA9IHRoaXMub3B0aW9ucy5zZXJ2ZXJVcmxcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYXBwaXVtTW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiYXBwaXVtXCIpXG4gICAgICBjb25zdCBhcHBpdW1NYWluID0gYXBwaXVtTW9kdWxlLm1haW4gPz8gYXBwaXVtTW9kdWxlLmRlZmF1bHQ/Lm1haW5cblxuICAgICAgaWYgKCFhcHBpdW1NYWluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFwcGl1bSBtYWluKCkgaXMgdW5hdmFpbGFibGUgZnJvbSB0aGUgYXBwaXVtIHBhY2thZ2VcIilcbiAgICAgIH1cblxuICAgICAgdGhpcy5hcHBpdW1TZXJ2ZXIgPSBhd2FpdCBhcHBpdW1NYWluKHNlcnZlckFyZ3MpXG4gICAgICB0aGlzLnNlcnZlclVybCA9IHRoaXMuYnVpbGRTZXJ2ZXJVcmwoc2VydmVyQXJncylcbiAgICB9XG5cbiAgICBjb25zdCBjYXBhYmlsaXRpZXMgPSB0aGlzLm9wdGlvbnMuY2FwYWJpbGl0aWVzID8gey4uLnRoaXMub3B0aW9ucy5jYXBhYmlsaXRpZXN9IDoge31cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYnJvd3Nlck5hbWUgJiYgIWNhcGFiaWxpdGllcy5icm93c2VyTmFtZSkge1xuICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lID0gdGhpcy5vcHRpb25zLmJyb3dzZXJOYW1lXG4gICAgfVxuICAgIGlmIChjYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lID0gXCJcIlxuICAgIH1cblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpLnVzaW5nU2VydmVyKHRoaXMuc2VydmVyVXJsKVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNhcGFiaWxpdGllcykubGVuZ3RoID4gMCkge1xuICAgICAgYnVpbGRlci53aXRoQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllcylcbiAgICB9XG5cbiAgICBjb25zdCB3ZWJEcml2ZXIgPSBhd2FpdCBidWlsZGVyLmJ1aWxkKClcblxuICAgIHRoaXMuc2V0V2ViRHJpdmVyKHdlYkRyaXZlcilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN1cGVyLnN0b3AoKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAodGhpcy5hcHBpdW1TZXJ2ZXI/LmNsb3NlKSB7XG4gICAgICAgIGF3YWl0IHRpbWVvdXQoe3RpbWVvdXQ6IHRoaXMuZ2V0VGltZW91dHMoKSwgZXJyb3JNZXNzYWdlOiBcInRpbWVvdXQgd2hpbGUgY2xvc2luZyBBcHBpdW0gc2VydmVyXCJ9LCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmFwcGl1bVNlcnZlci5jbG9zZSgpKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmFwcGl1bVNlcnZlciA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59XG4gICAqL1xuICBhc3luYyBnZXRCcm93c2VyTG9ncygpIHtcbiAgICBjb25zdCBwbGF0Zm9ybU5hbWUgPSB0aGlzLm9wdGlvbnMuY2FwYWJpbGl0aWVzPy5wbGF0Zm9ybU5hbWVcbiAgICBjb25zdCBicm93c2VyTmFtZSA9IHRoaXMub3B0aW9ucy5jYXBhYmlsaXRpZXM/LmJyb3dzZXJOYW1lID8/IHRoaXMub3B0aW9ucy5icm93c2VyTmFtZVxuICAgIGNvbnN0IGlzQW5kcm9pZCA9IHR5cGVvZiBwbGF0Zm9ybU5hbWUgPT09IFwic3RyaW5nXCIgJiYgcGxhdGZvcm1OYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiYW5kcm9pZFwiXG5cbiAgICBpZiAoaXNBbmRyb2lkICYmICFicm93c2VyTmFtZSkge1xuICAgICAgbGV0IGVudHJpZXNcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZW50cmllcyA9IGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkubWFuYWdlKCkubG9ncygpLmdldChcImxvZ2NhdFwiKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBbXVxuICAgICAgfVxuXG4gICAgICBjb25zdCBsb2djYXRMb2dzID0gW11cblxuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VNYXRjaCA9IGVudHJ5Lm1lc3NhZ2UubWF0Y2goL14oLispIChcXGQrKTooXFxkKykgKC4rKSQvKVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZU1hdGNoID8gbWVzc2FnZU1hdGNoWzRdIDogZW50cnkubWVzc2FnZVxuXG4gICAgICAgIGxvZ2NhdExvZ3MucHVzaChgJHtlbnRyeS5sZXZlbC5uYW1lfTogJHttZXNzYWdlfWApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsb2djYXRMb2dzXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmdldEJyb3dzZXJMb2dzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhIHNpbmdsZSBlbGVtZW50IGJ5IHRlc3QgSUQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXN0SURcbiAgICogQHBhcmFtIHtGaW5kQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50Pn1cbiAgICovXG4gIGFzeW5jIGZpbmRCeVRlc3RJRCh0ZXN0SUQsIGFyZ3MpIHtcbiAgICBjb25zdCB0ZXN0SWRTdHJhdGVneSA9IHRoaXMub3B0aW9ucy50ZXN0SWRTdHJhdGVneSA/PyBcImFjY2Vzc2liaWxpdHlJZFwiXG5cbiAgICBpZiAodGVzdElkU3RyYXRlZ3kgPT09IFwiY3NzXCIpIHtcbiAgICAgIGNvbnN0IHRlc3RJZEF0dHJpYnV0ZSA9IHRoaXMub3B0aW9ucy50ZXN0SWRBdHRyaWJ1dGUgPz8gXCJkYXRhLXRlc3RpZFwiXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kKGBbJHt0ZXN0SWRBdHRyaWJ1dGV9PScke3Rlc3RJRH0nXWAsIGFyZ3MpXG4gICAgfVxuICAgIGlmICh0ZXN0SWRTdHJhdGVneSA9PT0gXCJpZFwiKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kQnlJZCh0ZXN0SUQsIGFyZ3MpXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZEJ5QWNjZXNzaWJpbGl0eUlkKHRlc3RJRCwgYXJncylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVzdElkXG4gICAqIEBwYXJhbSB7RmluZEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudD59XG4gICAqL1xuICBhc3luYyBmaW5kQnlBY2Nlc3NpYmlsaXR5SWQodGVzdElkLCBhcmdzID0ge30pIHtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpXG4gICAgbGV0IGVsZW1lbnRzID0gW11cblxuICAgIHRyeSB7XG4gICAgICBlbGVtZW50cyA9IGF3YWl0IHRoaXMuYWxsQnlBY2Nlc3NpYmlsaXR5SWQodGVzdElkLCBhcmdzKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBSZS10aHJvdyB0byByZWNvdmVyIHN0YWNrIHRyYWNlXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKFwiV2FpdCB0aW1lZCBvdXQgYWZ0ZXJcIikpIHtcbiAgICAgICAgICBlbGVtZW50cyA9IFtdXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3IuY29uc3RydWN0b3IubmFtZX0gLSAke2Vycm9yLm1lc3NhZ2V9IChhY2Nlc3NpYmlsaXR5IGlkOiAke3Rlc3RJZH0pYClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlb2YgZXJyb3J9IC0gJHtlcnJvcn0gKGFjY2Vzc2liaWxpdHkgaWQ6ICR7dGVzdElkfSlgKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vcmUgdGhhbiAxIGVsZW1lbnRzICgke2VsZW1lbnRzLmxlbmd0aH0pIHdhcyBmb3VuZCBieSBhY2Nlc3NpYmlsaXR5IGlkOiAke3Rlc3RJZH1gKVxuICAgIH1cblxuICAgIGlmICghZWxlbWVudHNbMF0pIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRTZWNvbmRzID0gKERhdGUubm93KCkgLSBzdGFydFRpbWUpIC8gMTAwMFxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbGVtZW50IGNvdWxkbid0IGJlIGZvdW5kIGFmdGVyICR7ZWxhcHNlZFNlY29uZHMudG9GaXhlZCgyKX1zIGJ5IGFjY2Vzc2liaWxpdHkgaWQ6ICR7dGVzdElkfWApXG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzWzBdXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlc3RJZFxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnRbXT59XG4gICAqL1xuICBhc3luYyBhbGxCeUFjY2Vzc2liaWxpdHlJZCh0ZXN0SWQsIGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHt2aXNpYmxlID0gdHJ1ZSwgdGltZW91dCwgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuICAgIGNvbnN0IHJlc3RBcmdzS2V5cyA9IE9iamVjdC5rZXlzKHJlc3RBcmdzKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9PSBcInVzZUJhc2VTZWxlY3RvclwiKVxuICAgIGxldCBhY3R1YWxUaW1lb3V0XG5cbiAgICBpZiAodGltZW91dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhY3R1YWxUaW1lb3V0ID0gdGhpcy5fZHJpdmVyVGltZW91dHNcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0dWFsVGltZW91dCA9IHRpbWVvdXRcbiAgICB9XG5cbiAgICBpZiAocmVzdEFyZ3NLZXlzLmxlbmd0aCA+IDApIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhcmd1bWVudHM6ICR7cmVzdEFyZ3NLZXlzLmpvaW4oXCIsIFwiKX1gKVxuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKVxuICAgIGNvbnN0IGdldFRpbWVMZWZ0ID0gKCkgPT4gTWF0aC5tYXgoYWN0dWFsVGltZW91dCAtIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSwgMClcbiAgICBjb25zdCBnZXRFbGVtZW50cyA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudHMgPSBhd2FpdCB0aGlzLmdldFdlYkRyaXZlcigpLmZpbmRFbGVtZW50cyhuZXcgQnkoXCJhY2Nlc3NpYmlsaXR5IGlkXCIsIHRlc3RJZCkpXG5cbiAgICAgIGlmICh2aXNpYmxlICE9PSB0cnVlICYmIHZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkRWxlbWVudHMgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZm91bmRFbGVtZW50cykge1xuICAgICAgICBjb25zdCBpc0Rpc3BsYXllZCA9IGF3YWl0IGVsZW1lbnQuaXNEaXNwbGF5ZWQoKVxuXG4gICAgICAgIGlmICh2aXNpYmxlICYmICFpc0Rpc3BsYXllZCkgY29udGludWVcbiAgICAgICAgaWYgKCF2aXNpYmxlICYmIGlzRGlzcGxheWVkKSBjb250aW51ZVxuXG4gICAgICAgIGZpbHRlcmVkRWxlbWVudHMucHVzaChlbGVtZW50KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmlsdGVyZWRFbGVtZW50c1xuICAgIH1cbiAgICBsZXQgZWxlbWVudHMgPSBbXVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHRpbWVMZWZ0ID0gYWN0dWFsVGltZW91dCA9PSAwID8gMCA6IGdldFRpbWVMZWZ0KClcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRpbWVMZWZ0ID09IDApIHtcbiAgICAgICAgICBlbGVtZW50cyA9IGF3YWl0IGdldEVsZW1lbnRzKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdldFdlYkRyaXZlcigpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudHMgPSBhd2FpdCBnZXRFbGVtZW50cygpXG5cbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50cy5sZW5ndGggPiAwXG4gICAgICAgICAgfSwgdGltZUxlZnQpXG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IuY29uc3RydWN0b3IubmFtZSA9PT0gXCJUaW1lb3V0RXJyb3JcIiAmJiBnZXRUaW1lTGVmdCgpID4gMCkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGdldCBlbGVtZW50cyB3aXRoIGFjY2Vzc2liaWxpdHkgaWQ6ICR7dGVzdElkfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IGVycm9yfWApXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlc3RJZFxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnQ+fVxuICAgKi9cbiAgYXN5bmMgZmluZEJ5SWQodGVzdElkLCBhcmdzID0ge30pIHtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpXG4gICAgbGV0IGVsZW1lbnRzID0gW11cblxuICAgIHRyeSB7XG4gICAgICBlbGVtZW50cyA9IGF3YWl0IHRoaXMuYWxsQnlJZCh0ZXN0SWQsIGFyZ3MpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFJlLXRocm93IHRvIHJlY292ZXIgc3RhY2sgdHJhY2VcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoXCJXYWl0IHRpbWVkIG91dCBhZnRlclwiKSkge1xuICAgICAgICAgIGVsZW1lbnRzID0gW11cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvci5jb25zdHJ1Y3Rvci5uYW1lfSAtICR7ZXJyb3IubWVzc2FnZX0gKGlkOiAke3Rlc3RJZH0pYClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlb2YgZXJyb3J9IC0gJHtlcnJvcn0gKGlkOiAke3Rlc3RJZH0pYClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb3JlIHRoYW4gMSBlbGVtZW50cyAoJHtlbGVtZW50cy5sZW5ndGh9KSB3YXMgZm91bmQgYnkgaWQ6ICR7dGVzdElkfWApXG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50c1swXSkge1xuICAgICAgY29uc3QgZWxhcHNlZFNlY29uZHMgPSAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkgLyAxMDAwXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVsZW1lbnQgY291bGRuJ3QgYmUgZm91bmQgYWZ0ZXIgJHtlbGFwc2VkU2Vjb25kcy50b0ZpeGVkKDIpfXMgYnkgaWQ6ICR7dGVzdElkfWApXG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzWzBdXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlc3RJZFxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnRbXT59XG4gICAqL1xuICBhc3luYyBhbGxCeUlkKHRlc3RJZCwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge3Zpc2libGUgPSB0cnVlLCB0aW1lb3V0LCAuLi5yZXN0QXJnc30gPSBhcmdzXG4gICAgY29uc3QgcmVzdEFyZ3NLZXlzID0gT2JqZWN0LmtleXMocmVzdEFyZ3MpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IFwidXNlQmFzZVNlbGVjdG9yXCIpXG4gICAgbGV0IGFjdHVhbFRpbWVvdXRcblxuICAgIGlmICh0aW1lb3V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFjdHVhbFRpbWVvdXQgPSB0aGlzLl9kcml2ZXJUaW1lb3V0c1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3R1YWxUaW1lb3V0ID0gdGltZW91dFxuICAgIH1cblxuICAgIGlmIChyZXN0QXJnc0tleXMubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFyZ3VtZW50czogJHtyZXN0QXJnc0tleXMuam9pbihcIiwgXCIpfWApXG5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpXG4gICAgY29uc3QgZ2V0VGltZUxlZnQgPSAoKSA9PiBNYXRoLm1heChhY3R1YWxUaW1lb3V0IC0gKERhdGUubm93KCkgLSBzdGFydFRpbWUpLCAwKVxuICAgIGNvbnN0IGdldEVsZW1lbnRzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkuZmluZEVsZW1lbnRzKEJ5LmlkKHRlc3RJZCkpXG5cbiAgICAgIGlmICh2aXNpYmxlICE9PSB0cnVlICYmIHZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkRWxlbWVudHMgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZm91bmRFbGVtZW50cykge1xuICAgICAgICBjb25zdCBpc0Rpc3BsYXllZCA9IGF3YWl0IGVsZW1lbnQuaXNEaXNwbGF5ZWQoKVxuXG4gICAgICAgIGlmICh2aXNpYmxlICYmICFpc0Rpc3BsYXllZCkgY29udGludWVcbiAgICAgICAgaWYgKCF2aXNpYmxlICYmIGlzRGlzcGxheWVkKSBjb250aW51ZVxuXG4gICAgICAgIGZpbHRlcmVkRWxlbWVudHMucHVzaChlbGVtZW50KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmlsdGVyZWRFbGVtZW50c1xuICAgIH1cbiAgICBsZXQgZWxlbWVudHMgPSBbXVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHRpbWVMZWZ0ID0gYWN0dWFsVGltZW91dCA9PSAwID8gMCA6IGdldFRpbWVMZWZ0KClcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRpbWVMZWZ0ID09IDApIHtcbiAgICAgICAgICBlbGVtZW50cyA9IGF3YWl0IGdldEVsZW1lbnRzKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdldFdlYkRyaXZlcigpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudHMgPSBhd2FpdCBnZXRFbGVtZW50cygpXG5cbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50cy5sZW5ndGggPiAwXG4gICAgICAgICAgfSwgdGltZUxlZnQpXG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IuY29uc3RydWN0b3IubmFtZSA9PT0gXCJUaW1lb3V0RXJyb3JcIiAmJiBnZXRUaW1lTGVmdCgpID4gMCkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGdldCBlbGVtZW50cyB3aXRoIGlkOiAke3Rlc3RJZH06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvcn1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50c1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gc2VydmVyQXJnc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgYnVpbGRTZXJ2ZXJVcmwoc2VydmVyQXJncykge1xuICAgIGNvbnN0IGFkZHJlc3MgPSBzZXJ2ZXJBcmdzLmFkZHJlc3MgPz8gXCIxMjcuMC4wLjFcIlxuICAgIGNvbnN0IHBvcnQgPSBzZXJ2ZXJBcmdzLnBvcnQgPz8gNDcyM1xuICAgIGNvbnN0IGJhc2VQYXRoID0gc2VydmVyQXJncy5iYXNlUGF0aCA/IChzZXJ2ZXJBcmdzLmJhc2VQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gc2VydmVyQXJncy5iYXNlUGF0aCA6IGAvJHtzZXJ2ZXJBcmdzLmJhc2VQYXRofWApIDogXCJcIlxuXG4gICAgcmV0dXJuIGBodHRwOi8vJHthZGRyZXNzfToke3BvcnR9JHtiYXNlUGF0aH1gXG4gIH1cbn1cbiJdfQ==
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwaXVtLWRyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kcml2ZXJzL2FwcGl1bS1kcml2ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5QyxPQUFPLE9BQU8sTUFBTSwyQkFBMkIsQ0FBQTtBQUMvQyxPQUFPLGVBQWUsTUFBTSx1QkFBdUIsQ0FBQTtBQUVuRDs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUs7SUFDcEMsTUFBTSxLQUFLLEdBQUcsdUNBQXVDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQzFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ25CLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNIOzs7OztHQUtHO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLFlBQWEsU0FBUSxlQUFlO0lBQ3ZEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLFVBQVUsR0FBRyxFQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBQyxDQUFBO1FBRXZELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEQsVUFBVSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQTtRQUNqRCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUE7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDTixN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ImltcG9ydCB7QnVpbGRlciwgQnl9IGZyb20gXCJzZWxlbml1bS13ZWJkcml2ZXJcIlxuaW1wb3J0IHRpbWVvdXQgZnJvbSBcImF3YWl0ZXJ5L2J1aWxkL3RpbWVvdXQuanNcIlxuaW1wb3J0IFdlYkRyaXZlckRyaXZlciBmcm9tIFwiLi93ZWJkcml2ZXItZHJpdmVyLmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHBhcmFtIHt1bmtub3dufSBjYXVzZVxuICogQHJldHVybnMge0Vycm9yICYge2NhdXNlOiB1bmtub3dufX1cbiAqL1xuZnVuY3Rpb24gZXJyb3JXaXRoQ2F1c2UobWVzc2FnZSwgY2F1c2UpIHtcbiAgY29uc3QgZXJyb3IgPSAvKiogQHR5cGUge0Vycm9yICYge2NhdXNlOiB1bmtub3dufX0gKi8gKG5ldyBFcnJvcihtZXNzYWdlKSlcbiAgZXJyb3IuY2F1c2UgPSBjYXVzZVxuICByZXR1cm4gZXJyb3Jcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBcHBpdW1Ecml2ZXJPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlcnZlclVybF0gUmVtb3RlIEFwcGl1bSBzZXJ2ZXIgVVJMIHRvIGNvbm5lY3QgdG8uXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IFtzZXJ2ZXJBcmdzXSBPcHRpb25zIHBhc3NlZCB0byB0aGUgQXBwaXVtIHNlcnZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFt1c2VEcml2ZXJzXSBBcHBpdW0gZHJpdmVyIG5hbWVzIHRvIGxvYWQgd2hlbiBzdGFydGluZyB0aGUgc2VydmVyLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbY2FwYWJpbGl0aWVzXSBEZXNpcmVkIGNhcGFiaWxpdGllcyBmb3IgdGhlIHNlc3Npb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Jyb3dzZXJOYW1lXSBCcm93c2VyIG5hbWUgZm9yIHdlYiBzZXNzaW9ucy5cbiAqIEBwcm9wZXJ0eSB7XCJhY2Nlc3NpYmlsaXR5SWRcInxcImNzc1wifFwiaWRcIn0gW3Rlc3RJZFN0cmF0ZWd5XSBTdHJhdGVneSBmb3IgcmVzb2x2aW5nIHRlc3QgSURzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0ZXN0SWRBdHRyaWJ1dGVdIEF0dHJpYnV0ZSBuYW1lIHdoZW4gdXNpbmcgdGhlIENTUyB0ZXN0IElEIHN0cmF0ZWd5LlxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZpbmRBcmdzXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RpbWVvdXRdIE92ZXJyaWRlIHRpbWVvdXQgZm9yIGxvb2t1cC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGx9IFt2aXNpYmxlXSBXaGV0aGVyIHRvIHJlcXVpcmUgZWxlbWVudHMgdG8gYmUgdmlzaWJsZSAoYHRydWVgKSBvciBoaWRkZW4gKGBmYWxzZWApLiBVc2UgYG51bGxgIHRvIGRpc2FibGUgdmlzaWJpbGl0eSBmaWx0ZXJpbmcuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt1c2VCYXNlU2VsZWN0b3JdIFdoZXRoZXIgdG8gc2NvcGUgYnkgdGhlIGJhc2Ugc2VsZWN0b3IuXG4gKi9cblxuLyoqXG4gKiBBcHBpdW0gZHJpdmVyIGJhY2tlZCBieSB0aGUgQXBwaXVtIHNlcnZlciBwYWNrYWdlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBpdW1Ecml2ZXIgZXh0ZW5kcyBXZWJEcml2ZXJEcml2ZXIge1xuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzdGFydCgpIHtcbiAgICBjb25zdCBzZXJ2ZXJBcmdzID0gey4uLih0aGlzLm9wdGlvbnMuc2VydmVyQXJncyA/PyB7fSl9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnVzZURyaXZlcnMgJiYgIXNlcnZlckFyZ3MudXNlRHJpdmVycykge1xuICAgICAgc2VydmVyQXJncy51c2VEcml2ZXJzID0gdGhpcy5vcHRpb25zLnVzZURyaXZlcnNcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNlcnZlclVybCkge1xuICAgICAgdGhpcy5zZXJ2ZXJVcmwgPSB0aGlzLm9wdGlvbnMuc2VydmVyVXJsXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFwcGl1bU1vZHVsZSA9IGF3YWl0IGltcG9ydChcImFwcGl1bVwiKVxuICAgICAgY29uc3QgYXBwaXVtTWFpbiA9IGFwcGl1bU1vZHVsZS5tYWluID8/IGFwcGl1bU1vZHVsZS5kZWZhdWx0Py5tYWluXG5cbiAgICAgIGlmICghYXBwaXVtTWFpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcHBpdW0gbWFpbigpIGlzIHVuYXZhaWxhYmxlIGZyb20gdGhlIGFwcGl1bSBwYWNrYWdlXCIpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuYXBwaXVtU2VydmVyID0gYXdhaXQgYXBwaXVtTWFpbihzZXJ2ZXJBcmdzKVxuICAgICAgdGhpcy5zZXJ2ZXJVcmwgPSB0aGlzLmJ1aWxkU2VydmVyVXJsKHNlcnZlckFyZ3MpXG4gICAgfVxuXG4gICAgY29uc3QgY2FwYWJpbGl0aWVzID0gdGhpcy5vcHRpb25zLmNhcGFiaWxpdGllcyA/IHsuLi50aGlzLm9wdGlvbnMuY2FwYWJpbGl0aWVzfSA6IHt9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmJyb3dzZXJOYW1lICYmICFjYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpIHtcbiAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyTmFtZSA9IHRoaXMub3B0aW9ucy5icm93c2VyTmFtZVxuICAgIH1cbiAgICBpZiAoY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyTmFtZSA9IFwiXCJcbiAgICB9XG5cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKS51c2luZ1NlcnZlcih0aGlzLnNlcnZlclVybClcblxuICAgIGlmIChPYmplY3Qua2V5cyhjYXBhYmlsaXRpZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGJ1aWxkZXIud2l0aENhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXMpXG4gICAgfVxuXG4gICAgY29uc3Qgd2ViRHJpdmVyID0gYXdhaXQgYnVpbGRlci5idWlsZCgpXG5cbiAgICB0aGlzLnNldFdlYkRyaXZlcih3ZWJEcml2ZXIpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzdG9wKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdXBlci5zdG9wKClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRoaXMuYXBwaXVtU2VydmVyPy5jbG9zZSkge1xuICAgICAgICBhd2FpdCB0aW1lb3V0KHt0aW1lb3V0OiB0aGlzLmdldFRpbWVvdXRzKCksIGVycm9yTWVzc2FnZTogXCJ0aW1lb3V0IHdoaWxlIGNsb3NpbmcgQXBwaXVtIHNlcnZlclwifSwgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5hcHBpdW1TZXJ2ZXIuY2xvc2UoKSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5hcHBpdW1TZXJ2ZXIgPSB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fVxuICAgKi9cbiAgYXN5bmMgZ2V0QnJvd3NlckxvZ3MoKSB7XG4gICAgY29uc3QgcGxhdGZvcm1OYW1lID0gdGhpcy5vcHRpb25zLmNhcGFiaWxpdGllcz8ucGxhdGZvcm1OYW1lXG4gICAgY29uc3QgYnJvd3Nlck5hbWUgPSB0aGlzLm9wdGlvbnMuY2FwYWJpbGl0aWVzPy5icm93c2VyTmFtZSA/PyB0aGlzLm9wdGlvbnMuYnJvd3Nlck5hbWVcbiAgICBjb25zdCBpc0FuZHJvaWQgPSB0eXBlb2YgcGxhdGZvcm1OYW1lID09PSBcInN0cmluZ1wiICYmIHBsYXRmb3JtTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImFuZHJvaWRcIlxuXG4gICAgaWYgKGlzQW5kcm9pZCAmJiAhYnJvd3Nlck5hbWUpIHtcbiAgICAgIGxldCBlbnRyaWVzXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGVudHJpZXMgPSBhd2FpdCB0aGlzLmdldFdlYkRyaXZlcigpLm1hbmFnZSgpLmxvZ3MoKS5nZXQoXCJsb2djYXRcIilcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gW11cbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9nY2F0TG9ncyA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBjb25zdCBtZXNzYWdlTWF0Y2ggPSBlbnRyeS5tZXNzYWdlLm1hdGNoKC9eKC4rKSAoXFxkKyk6KFxcZCspICguKykkLylcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VNYXRjaCA/IG1lc3NhZ2VNYXRjaFs0XSA6IGVudHJ5Lm1lc3NhZ2VcblxuICAgICAgICBsb2djYXRMb2dzLnB1c2goYCR7ZW50cnkubGV2ZWwubmFtZX06ICR7bWVzc2FnZX1gKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbG9nY2F0TG9nc1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBzdXBlci5nZXRCcm93c2VyTG9ncygpXG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYSBzaW5nbGUgZWxlbWVudCBieSB0ZXN0IElELlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVzdElEXG4gICAqIEBwYXJhbSB7RmluZEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudD59XG4gICAqL1xuICBhc3luYyBmaW5kQnlUZXN0SUQodGVzdElELCBhcmdzKSB7XG4gICAgY29uc3QgdGVzdElkU3RyYXRlZ3kgPSB0aGlzLm9wdGlvbnMudGVzdElkU3RyYXRlZ3kgPz8gXCJhY2Nlc3NpYmlsaXR5SWRcIlxuXG4gICAgaWYgKHRlc3RJZFN0cmF0ZWd5ID09PSBcImNzc1wiKSB7XG4gICAgICBjb25zdCB0ZXN0SWRBdHRyaWJ1dGUgPSB0aGlzLm9wdGlvbnMudGVzdElkQXR0cmlidXRlID8/IFwiZGF0YS10ZXN0aWRcIlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZChgWyR7dGVzdElkQXR0cmlidXRlfT0nJHt0ZXN0SUR9J11gLCBhcmdzKVxuICAgIH1cbiAgICBpZiAodGVzdElkU3RyYXRlZ3kgPT09IFwiaWRcIikge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZEJ5SWQodGVzdElELCBhcmdzKVxuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRCeUFjY2Vzc2liaWxpdHlJZCh0ZXN0SUQsIGFyZ3MpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlc3RJZFxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnQ+fVxuICAgKi9cbiAgYXN5bmMgZmluZEJ5QWNjZXNzaWJpbGl0eUlkKHRlc3RJZCwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnRbXX0gKi9cbiAgICBsZXQgZWxlbWVudHNcblxuICAgIHRyeSB7XG4gICAgICBlbGVtZW50cyA9IGF3YWl0IHRoaXMuYWxsQnlBY2Nlc3NpYmlsaXR5SWQodGVzdElkLCBhcmdzKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgJHtlcnJvci5jb25zdHJ1Y3Rvci5uYW1lfSAtICR7ZXJyb3IubWVzc2FnZX0gKGFjY2Vzc2liaWxpdHkgaWQ6ICR7dGVzdElkfSlgLCBlcnJvcilcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3JXaXRoQ2F1c2UoYCR7dHlwZW9mIGVycm9yfSAtICR7ZXJyb3J9IChhY2Nlc3NpYmlsaXR5IGlkOiAke3Rlc3RJZH0pYCwgZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9yZSB0aGFuIDEgZWxlbWVudHMgKCR7ZWxlbWVudHMubGVuZ3RofSkgd2FzIGZvdW5kIGJ5IGFjY2Vzc2liaWxpdHkgaWQ6ICR7dGVzdElkfWApXG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50c1swXSkge1xuICAgICAgY29uc3QgZWxhcHNlZFNlY29uZHMgPSAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkgLyAxMDAwXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVsZW1lbnQgY291bGRuJ3QgYmUgZm91bmQgYWZ0ZXIgJHtlbGFwc2VkU2Vjb25kcy50b0ZpeGVkKDIpfXMgYnkgYWNjZXNzaWJpbGl0eSBpZDogJHt0ZXN0SWR9YClcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudHNbMF1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVzdElkXG4gICAqIEBwYXJhbSB7RmluZEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudFtdPn1cbiAgICovXG4gIGFzeW5jIGFsbEJ5QWNjZXNzaWJpbGl0eUlkKHRlc3RJZCwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge3Zpc2libGUgPSB0cnVlLCB0aW1lb3V0LCAuLi5yZXN0QXJnc30gPSBhcmdzXG4gICAgY29uc3QgcmVzdEFyZ3NLZXlzID0gT2JqZWN0LmtleXMocmVzdEFyZ3MpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IFwidXNlQmFzZVNlbGVjdG9yXCIpXG4gICAgbGV0IGFjdHVhbFRpbWVvdXRcblxuICAgIGlmICh0aW1lb3V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFjdHVhbFRpbWVvdXQgPSB0aGlzLl9kcml2ZXJUaW1lb3V0c1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3R1YWxUaW1lb3V0ID0gdGltZW91dFxuICAgIH1cblxuICAgIGlmIChyZXN0QXJnc0tleXMubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFyZ3VtZW50czogJHtyZXN0QXJnc0tleXMuam9pbihcIiwgXCIpfWApXG5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpXG4gICAgY29uc3QgZ2V0VGltZUxlZnQgPSAoKSA9PiBNYXRoLm1heChhY3R1YWxUaW1lb3V0IC0gKERhdGUubm93KCkgLSBzdGFydFRpbWUpLCAwKVxuICAgIGNvbnN0IGdldEVsZW1lbnRzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkuZmluZEVsZW1lbnRzKG5ldyBCeShcImFjY2Vzc2liaWxpdHkgaWRcIiwgdGVzdElkKSlcblxuICAgICAgaWYgKHZpc2libGUgIT09IHRydWUgJiYgdmlzaWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kRWxlbWVudHNcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsdGVyZWRFbGVtZW50cyA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBmb3VuZEVsZW1lbnRzKSB7XG4gICAgICAgIGNvbnN0IGlzRGlzcGxheWVkID0gYXdhaXQgZWxlbWVudC5pc0Rpc3BsYXllZCgpXG5cbiAgICAgICAgaWYgKHZpc2libGUgJiYgIWlzRGlzcGxheWVkKSBjb250aW51ZVxuICAgICAgICBpZiAoIXZpc2libGUgJiYgaXNEaXNwbGF5ZWQpIGNvbnRpbnVlXG5cbiAgICAgICAgZmlsdGVyZWRFbGVtZW50cy5wdXNoKGVsZW1lbnQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzXG4gICAgfVxuICAgIGxldCBlbGVtZW50cyA9IFtdXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgdGltZUxlZnQgPSBhY3R1YWxUaW1lb3V0ID09IDAgPyAwIDogZ2V0VGltZUxlZnQoKVxuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGltZUxlZnQgPT0gMCkge1xuICAgICAgICAgIGVsZW1lbnRzID0gYXdhaXQgZ2V0RWxlbWVudHMoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50cyA9IGF3YWl0IGdldEVsZW1lbnRzKClcblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmxlbmd0aCA+IDBcbiAgICAgICAgICB9LCB0aW1lTGVmdClcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIlRpbWVvdXRFcnJvclwiICYmIGdldFRpbWVMZWZ0KCkgPiAwKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycm9yV2l0aENhdXNlKGBDb3VsZG4ndCBnZXQgZWxlbWVudHMgd2l0aCBhY2Nlc3NpYmlsaXR5IGlkOiAke3Rlc3RJZH06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvcn1gLCBlcnJvcilcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVzdElkXG4gICAqIEBwYXJhbSB7RmluZEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudD59XG4gICAqL1xuICBhc3luYyBmaW5kQnlJZCh0ZXN0SWQsIGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KClcbiAgICAvKiogQHR5cGUge2ltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50W119ICovXG4gICAgbGV0IGVsZW1lbnRzXG5cbiAgICB0cnkge1xuICAgICAgZWxlbWVudHMgPSBhd2FpdCB0aGlzLmFsbEJ5SWQodGVzdElkLCBhcmdzKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgJHtlcnJvci5jb25zdHJ1Y3Rvci5uYW1lfSAtICR7ZXJyb3IubWVzc2FnZX0gKGlkOiAke3Rlc3RJZH0pYCwgZXJyb3IpXG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yV2l0aENhdXNlKGAke3R5cGVvZiBlcnJvcn0gLSAke2Vycm9yfSAoaWQ6ICR7dGVzdElkfSlgLCBlcnJvcilcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb3JlIHRoYW4gMSBlbGVtZW50cyAoJHtlbGVtZW50cy5sZW5ndGh9KSB3YXMgZm91bmQgYnkgaWQ6ICR7dGVzdElkfWApXG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50c1swXSkge1xuICAgICAgY29uc3QgZWxhcHNlZFNlY29uZHMgPSAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkgLyAxMDAwXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVsZW1lbnQgY291bGRuJ3QgYmUgZm91bmQgYWZ0ZXIgJHtlbGFwc2VkU2Vjb25kcy50b0ZpeGVkKDIpfXMgYnkgaWQ6ICR7dGVzdElkfWApXG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzWzBdXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlc3RJZFxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnRbXT59XG4gICAqL1xuICBhc3luYyBhbGxCeUlkKHRlc3RJZCwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge3Zpc2libGUgPSB0cnVlLCB0aW1lb3V0LCAuLi5yZXN0QXJnc30gPSBhcmdzXG4gICAgY29uc3QgcmVzdEFyZ3NLZXlzID0gT2JqZWN0LmtleXMocmVzdEFyZ3MpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IFwidXNlQmFzZVNlbGVjdG9yXCIpXG4gICAgbGV0IGFjdHVhbFRpbWVvdXRcblxuICAgIGlmICh0aW1lb3V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFjdHVhbFRpbWVvdXQgPSB0aGlzLl9kcml2ZXJUaW1lb3V0c1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3R1YWxUaW1lb3V0ID0gdGltZW91dFxuICAgIH1cblxuICAgIGlmIChyZXN0QXJnc0tleXMubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFyZ3VtZW50czogJHtyZXN0QXJnc0tleXMuam9pbihcIiwgXCIpfWApXG5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpXG4gICAgY29uc3QgZ2V0VGltZUxlZnQgPSAoKSA9PiBNYXRoLm1heChhY3R1YWxUaW1lb3V0IC0gKERhdGUubm93KCkgLSBzdGFydFRpbWUpLCAwKVxuICAgIGNvbnN0IGdldEVsZW1lbnRzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkuZmluZEVsZW1lbnRzKEJ5LmlkKHRlc3RJZCkpXG5cbiAgICAgIGlmICh2aXNpYmxlICE9PSB0cnVlICYmIHZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkRWxlbWVudHMgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZm91bmRFbGVtZW50cykge1xuICAgICAgICBjb25zdCBpc0Rpc3BsYXllZCA9IGF3YWl0IGVsZW1lbnQuaXNEaXNwbGF5ZWQoKVxuXG4gICAgICAgIGlmICh2aXNpYmxlICYmICFpc0Rpc3BsYXllZCkgY29udGludWVcbiAgICAgICAgaWYgKCF2aXNpYmxlICYmIGlzRGlzcGxheWVkKSBjb250aW51ZVxuXG4gICAgICAgIGZpbHRlcmVkRWxlbWVudHMucHVzaChlbGVtZW50KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmlsdGVyZWRFbGVtZW50c1xuICAgIH1cbiAgICBsZXQgZWxlbWVudHMgPSBbXVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHRpbWVMZWZ0ID0gYWN0dWFsVGltZW91dCA9PSAwID8gMCA6IGdldFRpbWVMZWZ0KClcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRpbWVMZWZ0ID09IDApIHtcbiAgICAgICAgICBlbGVtZW50cyA9IGF3YWl0IGdldEVsZW1lbnRzKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdldFdlYkRyaXZlcigpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudHMgPSBhd2FpdCBnZXRFbGVtZW50cygpXG5cbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50cy5sZW5ndGggPiAwXG4gICAgICAgICAgfSwgdGltZUxlZnQpXG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IuY29uc3RydWN0b3IubmFtZSA9PT0gXCJUaW1lb3V0RXJyb3JcIiAmJiBnZXRUaW1lTGVmdCgpID4gMCkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgQ291bGRuJ3QgZ2V0IGVsZW1lbnRzIHdpdGggaWQ6ICR7dGVzdElkfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IGVycm9yfWAsIGVycm9yKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50c1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gc2VydmVyQXJnc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgYnVpbGRTZXJ2ZXJVcmwoc2VydmVyQXJncykge1xuICAgIGNvbnN0IGFkZHJlc3MgPSBzZXJ2ZXJBcmdzLmFkZHJlc3MgPz8gXCIxMjcuMC4wLjFcIlxuICAgIGNvbnN0IHBvcnQgPSBzZXJ2ZXJBcmdzLnBvcnQgPz8gNDcyM1xuICAgIGNvbnN0IGJhc2VQYXRoID0gc2VydmVyQXJncy5iYXNlUGF0aCA/IChzZXJ2ZXJBcmdzLmJhc2VQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gc2VydmVyQXJncy5iYXNlUGF0aCA6IGAvJHtzZXJ2ZXJBcmdzLmJhc2VQYXRofWApIDogXCJcIlxuXG4gICAgcmV0dXJuIGBodHRwOi8vJHthZGRyZXNzfToke3BvcnR9JHtiYXNlUGF0aH1gXG4gIH1cbn1cbiJdfQ==
|
|
@@ -100,13 +100,15 @@ export default class WebDriverDriver {
|
|
|
100
100
|
*/
|
|
101
101
|
findByTestID(testID: string, args?: FindArgs): Promise<import("selenium-webdriver").WebElement>;
|
|
102
102
|
/**
|
|
103
|
-
* @param {string|import("selenium-webdriver").WebElement|{selector: string} & FindArgs} elementOrIdentifier
|
|
103
|
+
* @param {string|import("selenium-webdriver").WebElement|({selector: string} & FindArgs & {withFallback?: boolean})} elementOrIdentifier
|
|
104
104
|
* @param {FindArgs} [args]
|
|
105
105
|
* @returns {Promise<import("selenium-webdriver").WebElement>}
|
|
106
106
|
*/
|
|
107
107
|
_findElement(elementOrIdentifier: string | import("selenium-webdriver").WebElement | ({
|
|
108
108
|
selector: string;
|
|
109
|
-
} & FindArgs
|
|
109
|
+
} & FindArgs & {
|
|
110
|
+
withFallback?: boolean;
|
|
111
|
+
}), args?: FindArgs): Promise<import("selenium-webdriver").WebElement>;
|
|
110
112
|
/**
|
|
111
113
|
* Finds a single element by CSS selector without waiting
|
|
112
114
|
* @param {string} selector
|
|
@@ -124,14 +126,30 @@ export default class WebDriverDriver {
|
|
|
124
126
|
/**
|
|
125
127
|
* Interacts with an element by calling a method on it with the given arguments.
|
|
126
128
|
* Retrying on ElementNotInteractableError, ElementClickInterceptedError, or StaleElementReferenceError.
|
|
127
|
-
* @param {import("selenium-webdriver").WebElement|string|{selector: string} &
|
|
129
|
+
* @param {import("selenium-webdriver").WebElement|string|{selector: string} & InteractArgs} elementOrIdentifier The element or a CSS selector to find the element.
|
|
128
130
|
* @param {string} methodName The method name to call on the element.
|
|
129
131
|
* @param {...any} args Arguments to pass to the method.
|
|
130
132
|
* @returns {Promise<any>}
|
|
131
133
|
*/
|
|
132
134
|
interact(elementOrIdentifier: import("selenium-webdriver").WebElement | string | ({
|
|
133
135
|
selector: string;
|
|
134
|
-
} &
|
|
136
|
+
} & InteractArgs), methodName: string, ...args: any[]): Promise<any>;
|
|
137
|
+
/**
|
|
138
|
+
* @param {import("selenium-webdriver").WebElement} element
|
|
139
|
+
* @returns {Promise<string | undefined>}
|
|
140
|
+
*/
|
|
141
|
+
readInteractableValue(element: import("selenium-webdriver").WebElement): Promise<string | undefined>;
|
|
142
|
+
/**
|
|
143
|
+
* @param {import("selenium-webdriver").WebElement} element
|
|
144
|
+
* @param {...any} args
|
|
145
|
+
* @returns {Promise<unknown>}
|
|
146
|
+
*/
|
|
147
|
+
interactSendKeysWithFallback(element: import("selenium-webdriver").WebElement, ...args: any[]): Promise<unknown>;
|
|
148
|
+
/**
|
|
149
|
+
* @param {import("selenium-webdriver").WebElement} element
|
|
150
|
+
* @returns {Promise<void>}
|
|
151
|
+
*/
|
|
152
|
+
interactPress(element: import("selenium-webdriver").WebElement): Promise<void>;
|
|
135
153
|
/**
|
|
136
154
|
* @param {string} selector
|
|
137
155
|
* @param {WaitForNoSelectorArgs} [args]
|
|
@@ -158,6 +176,9 @@ export type FindArgs = {
|
|
|
158
176
|
*/
|
|
159
177
|
useBaseSelector?: boolean;
|
|
160
178
|
};
|
|
179
|
+
export type InteractArgs = FindArgs & {
|
|
180
|
+
withFallback?: boolean;
|
|
181
|
+
};
|
|
161
182
|
export type WaitForNoSelectorArgs = {
|
|
162
183
|
/**
|
|
163
184
|
* Whether to scope by the base selector.
|