system-testing 1.0.72 → 1.0.74
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 +51 -1
- package/build/drivers/appium-driver.d.ts +97 -0
- package/build/drivers/appium-driver.js +316 -0
- package/build/drivers/selenium-driver.d.ts +36 -0
- package/build/drivers/selenium-driver.js +44 -0
- package/build/drivers/webdriver-driver.d.ts +173 -0
- package/build/drivers/webdriver-driver.js +462 -0
- package/build/system-test-browser-helper.d.ts +4 -0
- package/build/system-test-browser-helper.js +32 -3
- package/build/system-test.d.ts +80 -10
- package/build/system-test.js +151 -299
- package/build/use-system-test.js +6 -1
- package/package.json +10 -3
|
@@ -54,6 +54,10 @@ export default class SystemTestBrowserHelper {
|
|
|
54
54
|
}
|
|
55
55
|
return { result: "initialized" };
|
|
56
56
|
}
|
|
57
|
+
else if (data.type == "waitForScoundrel") {
|
|
58
|
+
await this.waitForScoundrelStarted();
|
|
59
|
+
return { result: "scoundrel-ready" };
|
|
60
|
+
}
|
|
57
61
|
else if (data.type == "visit") {
|
|
58
62
|
this.events.emit("navigate", { path: data.path });
|
|
59
63
|
}
|
|
@@ -72,7 +76,8 @@ export default class SystemTestBrowserHelper {
|
|
|
72
76
|
this.startScoundrel();
|
|
73
77
|
}
|
|
74
78
|
async startScoundrel() {
|
|
75
|
-
|
|
79
|
+
const host = this.getSystemTestHost();
|
|
80
|
+
this.scoundrelWs = new WebSocket(`ws://${host}:8090`);
|
|
76
81
|
// @ts-expect-error
|
|
77
82
|
this.scoundrelClientWebSocket = new ClientWebSocket(this.scoundrelWs);
|
|
78
83
|
await this.scoundrelClientWebSocket.waitForOpened();
|
|
@@ -98,6 +103,8 @@ export default class SystemTestBrowserHelper {
|
|
|
98
103
|
return this.scoundrelClient;
|
|
99
104
|
}
|
|
100
105
|
connectOnError() {
|
|
106
|
+
if (!window?.addEventListener)
|
|
107
|
+
return;
|
|
101
108
|
window.addEventListener("error", (event) => {
|
|
102
109
|
this.handleError({
|
|
103
110
|
type: "error",
|
|
@@ -111,6 +118,8 @@ export default class SystemTestBrowserHelper {
|
|
|
111
118
|
});
|
|
112
119
|
}
|
|
113
120
|
connectUnhandledRejection() {
|
|
121
|
+
if (!window?.addEventListener)
|
|
122
|
+
return;
|
|
114
123
|
window.addEventListener("unhandledrejection", (event) => {
|
|
115
124
|
this.handleError({
|
|
116
125
|
type: "unhandledrejection",
|
|
@@ -150,12 +159,32 @@ export default class SystemTestBrowserHelper {
|
|
|
150
159
|
* @returns {void}
|
|
151
160
|
*/
|
|
152
161
|
connectWebSocket() {
|
|
153
|
-
|
|
162
|
+
const host = this.getSystemTestHost();
|
|
163
|
+
this.ws = new WebSocket(`ws://${host}:1985`);
|
|
154
164
|
this.communicator.ws = this.ws;
|
|
155
165
|
this.ws.addEventListener("error", digg(this, "communicator", "onError"));
|
|
156
166
|
this.ws.addEventListener("open", digg(this, "communicator", "onOpen"));
|
|
157
167
|
this.ws.addEventListener("message", (event) => this.communicator.onMessage(event.data));
|
|
158
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* @returns {string}
|
|
171
|
+
*/
|
|
172
|
+
getSystemTestHost() {
|
|
173
|
+
const location = globalThis.location;
|
|
174
|
+
const defaultHost = location?.hostname || "localhost";
|
|
175
|
+
const search = location?.search;
|
|
176
|
+
const envHost = process.env.EXPO_PUBLIC_SYSTEM_TEST_HOST;
|
|
177
|
+
if (envHost)
|
|
178
|
+
return envHost;
|
|
179
|
+
if (!search)
|
|
180
|
+
return defaultHost;
|
|
181
|
+
const params = new URLSearchParams(search);
|
|
182
|
+
const host = params.get("systemTestHost");
|
|
183
|
+
const resolvedHost = host || defaultHost;
|
|
184
|
+
if (resolvedHost === "0.0.0.0")
|
|
185
|
+
return "127.0.0.1";
|
|
186
|
+
return resolvedHost;
|
|
187
|
+
}
|
|
159
188
|
/**
|
|
160
189
|
* @returns {void}
|
|
161
190
|
*/
|
|
@@ -245,4 +274,4 @@ export default class SystemTestBrowserHelper {
|
|
|
245
274
|
return await this.communicator.sendCommand({ type: "query", sql });
|
|
246
275
|
}
|
|
247
276
|
}
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLXRlc3QtYnJvd3Nlci1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3lzdGVtLXRlc3QtYnJvd3Nlci1oZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLDZDQUE2QyxDQUFBO0FBQ2hFLE9BQU8sZUFBZSxNQUFNLG9FQUFvRSxDQUFBO0FBQ2hHLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUUxQyxPQUFPLHNCQUFzQixNQUFNLCtCQUErQixDQUFBO0FBRWxFLHdFQUF3RTtBQUN4RSxNQUFNLE1BQU0sR0FBRztJQUNiLHVCQUF1QixFQUFFLElBQUk7Q0FDOUIsQ0FBQTtBQUVELE1BQU0sQ0FBQyxPQUFPLE9BQU8sdUJBQXVCO0lBQzFDLE1BQU0sQ0FBQyxPQUFPO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQTtRQUMzRCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsdUJBQXVCLENBQUE7SUFDdkMsQ0FBQztJQUVEO1FBNkhBOzs7V0FHRztRQUNILHFCQUFnQixHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUE7WUFFM0YsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtZQUMzQyxDQUFDO1FBQ0gsQ0FBQyxDQUFBO1FBRUQ7OztXQUdH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R0FBRyxRQUFRLENBQUE7SUFDdkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFFBQVE7UUFDeEIsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFFBQVEsQ0FBQTtJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDekQsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFBO1FBQ2pFLENBQUM7UUFFRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQTtRQUN6QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQTtRQUVyQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtRQUNyQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUE7SUFDbkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRztRQUNqQixtQkFBbUI7UUFDbkIsT0FBTyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQ2xpZW50IGZyb20gXCJzY291bmRyZWwtcmVtb3RlLWV2YWwvYnVpbGQvY2xpZW50L2luZGV4LmpzXCJcbmltcG9ydCBDbGllbnRXZWJTb2NrZXQgZnJvbSBcInNjb3VuZHJlbC1yZW1vdGUtZXZhbC9idWlsZC9jbGllbnQvY29ubmVjdGlvbnMvd2ViLXNvY2tldC9pbmRleC5qc1wiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gXCJldmVudGVtaXR0ZXIzXCJcblxuaW1wb3J0IFN5c3RlbVRlc3RDb21tdW5pY2F0b3IgZnJvbSBcIi4vc3lzdGVtLXRlc3QtY29tbXVuaWNhdG9yLmpzXCJcblxuLyoqIEB0eXBlIHt7c3lzdGVtVGVzdEJyb3dzZXJIZWxwZXI6IFN5c3RlbVRlc3RCcm93c2VySGVscGVyIHwgbnVsbH19ICovXG5jb25zdCBzaGFyZWQgPSB7XG4gIHN5c3RlbVRlc3RCcm93c2VySGVscGVyOiBudWxsXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN5c3RlbVRlc3RCcm93c2VySGVscGVyIHtcbiAgc3RhdGljIGN1cnJlbnQoKSB7XG4gICAgaWYgKCFzaGFyZWQuc3lzdGVtVGVzdEJyb3dzZXJIZWxwZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGN1cnJlbnQgU3lzdGVtVGVzdEJyb3dzZXJIZWxwZXIgc2V0XCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYXJlZC5zeXN0ZW1UZXN0QnJvd3NlckhlbHBlclxuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb21tdW5pY2F0b3IgPSBuZXcgU3lzdGVtVGVzdENvbW11bmljYXRvcih7cGFyZW50OiB0aGlzLCBvbkNvbW1hbmQ6IHRoaXMub25Db21tYW5kfSlcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2VcbiAgICB0aGlzLl9oYXNJbml0aWFsaXplZCA9IGZhbHNlXG4gICAgdGhpcy5ldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICAgIHNoYXJlZC5zeXN0ZW1UZXN0QnJvd3NlckhlbHBlciA9IHRoaXNcblxuICAgIHRoaXMuc3RhcnRTY291bmRyZWwoKVxuICB9XG5cbiAgYXN5bmMgc3RhcnRTY291bmRyZWwoKSB7XG4gICAgdGhpcy5zY291bmRyZWxXcyA9IG5ldyBXZWJTb2NrZXQoXCJodHRwOi8vbG9jYWxob3N0OjgwOTBcIilcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB0aGlzLnNjb3VuZHJlbENsaWVudFdlYlNvY2tldCA9IG5ldyBDbGllbnRXZWJTb2NrZXQodGhpcy5zY291bmRyZWxXcylcblxuICAgIGF3YWl0IHRoaXMuc2NvdW5kcmVsQ2xpZW50V2ViU29ja2V0LndhaXRGb3JPcGVuZWQoKVxuXG4gICAgdGhpcy5zY291bmRyZWxDbGllbnQgPSBuZXcgQ2xpZW50KHRoaXMuc2NvdW5kcmVsQ2xpZW50V2ViU29ja2V0LCB7ZW5hYmxlU2VydmVyQ29udHJvbDogdHJ1ZX0pXG4gICAgdGhpcy5ldmVudHMuZW1pdChcInNjb3VuZHJlbFN0YXJ0ZWRcIilcbiAgfVxuXG4gIHdhaXRGb3JTY291bmRyZWxTdGFydGVkKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2NvdW5kcmVsQ2xpZW50KSB7XG4gICAgICAgIHJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ldmVudHMub25jZShcInNjb3VuZHJlbFN0YXJ0ZWRcIiwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZXRTY291bmRyZWwoKSB7XG4gICAgaWYgKCF0aGlzLnNjb3VuZHJlbENsaWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NvdW5kcmVsIGNsaWVudCBpcyBub3Qgc3RhcnRlZCB5ZXRcIilcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zY291bmRyZWxDbGllbnRcbiAgfVxuXG4gIGNvbm5lY3RPbkVycm9yKCkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKHtcbiAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICBlcnJvcjogZXZlbnQuZXJyb3IsXG4gICAgICAgIGVycm9yQ2xhc3M6IGV2ZW50LmVycm9yPy5uYW1lLFxuICAgICAgICBmaWxlOiBldmVudC5maWxlbmFtZSxcbiAgICAgICAgbGluZTogZXZlbnQubGluZW5vLFxuICAgICAgICBtZXNzYWdlOiBldmVudC5tZXNzYWdlIHx8IFwiVW5rbm93biBlcnJvclwiLFxuICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBjb25uZWN0VW5oYW5kbGVkUmVqZWN0aW9uKCkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcih7XG4gICAgICAgIHR5cGU6IFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsXG4gICAgICAgIGVycm9yOiBldmVudC5yZWFzb24sXG4gICAgICAgIGVycm9yQ2xhc3M6IFwiVW5oYW5kbGVkUmVqZWN0aW9uXCIsXG4gICAgICAgIG1lc3NhZ2U6IGV2ZW50LnJlYXNvbi5tZXNzYWdlIHx8IGV2ZW50LnJlYXNvbiB8fCBcIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiB3aXRob3V0IGEgbWVzc2FnZVwiLFxuICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhLmJhY2t0cmFjZV1cbiAgICogQHBhcmFtIHtFcnJvcn0gW2RhdGEuZXJyb3JdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YS5lcnJvckNsYXNzXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGEuZmlsZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkYXRhLmxpbmVdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YS5tZXNzYWdlXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGEudHlwZV1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhLnVybF1cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBoYW5kbGVFcnJvcihkYXRhKSB7XG4gICAgbGV0IGJhY2t0cmFjZVxuXG4gICAgaWYgKGRhdGEuZXJyb3IgJiYgZGF0YS5lcnJvci5zdGFjaykge1xuICAgICAgYmFja3RyYWNlID0gZGF0YS5lcnJvci5zdGFjay5zcGxpdChcIlxcblwiKVxuICAgICAgYmFja3RyYWNlLnNoaWZ0KClcbiAgICAgIGJhY2t0cmFjZSA9IGJhY2t0cmFjZS5qb2luKFwiXFxuXCIpXG4gICAgfSBlbHNlIGlmIChkYXRhLmZpbGUpIHtcbiAgICAgIGJhY2t0cmFjZSA9IGAke2RhdGEuZmlsZX06JHtkYXRhLmxpbmV9YFxuICAgIH1cblxuICAgIGRhdGEuYmFja3RyYWNlID0gYmFja3RyYWNlXG5cbiAgICB0aGlzLmNvbW11bmljYXRvci5zZW5kQ29tbWFuZChkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY29ubmVjdFdlYlNvY2tldCgpIHtcbiAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldChcIndzOi8vbG9jYWxob3N0OjE5ODVcIilcbiAgICB0aGlzLmNvbW11bmljYXRvci53cyA9IHRoaXMud3NcbiAgICB0aGlzLndzLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBkaWdnKHRoaXMsIFwiY29tbXVuaWNhdG9yXCIsIFwib25FcnJvclwiKSlcbiAgICB0aGlzLndzLmFkZEV2ZW50TGlzdGVuZXIoXCJvcGVuXCIsIGRpZ2codGhpcywgXCJjb21tdW5pY2F0b3JcIiwgXCJvbk9wZW5cIikpXG4gICAgdGhpcy53cy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoZXZlbnQpID0+IHRoaXMuY29tbXVuaWNhdG9yLm9uTWVzc2FnZShldmVudC5kYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGVuYWJsZU9uQnJvd3NlcigpIHtcbiAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZVxuICAgIHRoaXMuY29ubmVjdFdlYlNvY2tldCgpXG4gICAgdGhpcy5jb25uZWN0T25FcnJvcigpXG4gICAgdGhpcy5jb25uZWN0VW5oYW5kbGVkUmVqZWN0aW9uKClcbiAgICB0aGlzLm92ZXJyaWRlQ29uc29sZUxvZygpXG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGdldEVuYWJsZWQoKSB7IHJldHVybiB0aGlzLl9lbmFibGVkIH1cblxuICAvKiogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gKi9cbiAgZ2V0RXZlbnRzKCkgeyByZXR1cm4gdGhpcy5ldmVudHMgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZmFrZUNvbnNvbGVFcnJvciA9ICguLi5hcmdzKSA9PiB7XG4gICAgdGhpcy5jb21tdW5pY2F0b3Iuc2VuZENvbW1hbmQoe3R5cGU6IFwiY29uc29sZS5lcnJvclwiLCB2YWx1ZTogdGhpcy5jb25zb2xlTG9nTWVzc2FnZShhcmdzKX0pXG5cbiAgICBpZiAodGhpcy5vcmlnaW5hbENvbnNvbGVFcnJvcikge1xuICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxDb25zb2xlRXJyb3IoLi4uYXJncylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnlbXX0gYXJnc1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZha2VDb25zb2xlTG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB0aGlzLmNvbW11bmljYXRvci5zZW5kQ29tbWFuZCh7dHlwZTogXCJjb25zb2xlLmxvZ1wiLCB2YWx1ZTogdGhpcy5jb25zb2xlTG9nTWVzc2FnZShhcmdzKX0pXG5cbiAgICBpZiAodGhpcy5vcmlnaW5hbENvbnNvbGVMb2cpIHtcbiAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsQ29uc29sZUxvZyguLi5hcmdzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gYXJnXG4gICAqIEBwYXJhbSB7YW55W119IFtzY2FubmVkT2JqZWN0c11cbiAgICogQHJldHVybnMge2FueX1cbiAgICovXG4gIGNvbnNvbGVMb2dNZXNzYWdlKGFyZywgc2Nhbm5lZE9iamVjdHMgPSBbXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgIGlmIChzY2FubmVkT2JqZWN0cy5pbmNsdWRlcyhhcmcpKSB7XG4gICAgICAgIHJldHVybiBcIltyZWN1cnNpdmVdXCJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjYW5uZWRPYmplY3RzLnB1c2goYXJnKVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFyZykge1xuICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNvbnNvbGVMb2dNZXNzYWdlKHZhbHVlLCBzY2FubmVkT2JqZWN0cykpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgaWYgKHNjYW5uZWRPYmplY3RzLmluY2x1ZGVzKGFyZykpIHtcbiAgICAgICAgcmV0dXJuIFwiW3JlY3Vyc2l2ZV1cIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2Nhbm5lZE9iamVjdHMucHVzaChhcmcpXG4gICAgICB9XG5cbiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi9cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGFyZykge1xuICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMuY29uc29sZUxvZ01lc3NhZ2UoYXJnW2tleV0sIHNjYW5uZWRPYmplY3RzKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiBgW29iamVjdCAke2FyZz8uY29uc3RydWN0b3I/Lm5hbWV9XWBcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFyZ1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tkYXRhOiB7cGF0aDogc3RyaW5nLCB0eXBlOiBzdHJpbmd9fX0gYXJnc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7cmVzdWx0OiBzdHJpbmd9IHwgdm9pZD59XG4gICAqL1xuICBvbkNvbW1hbmQgPSBhc3luYyAoe2RhdGF9KSA9PiB7XG4gICAgaWYgKGRhdGEudHlwZSA9PSBcImluaXRpYWxpemVcIikge1xuICAgICAgdGhpcy5ldmVudHMuZW1pdChcImluaXRpYWxpemVcIilcblxuICAgICAgaWYgKCF0aGlzLl9oYXNJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLl9oYXNJbml0aWFsaXplZCA9IHRydWVcblxuICAgICAgICBpZiAodGhpcy5fb25GaXJzdEluaXRpYWxpemVDYWxsYmFjaykge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX29uRmlyc3RJbml0aWFsaXplQ2FsbGJhY2soKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9vbkluaXRpYWxpemVDYWxsYmFjaykge1xuICAgICAgICBhd2FpdCB0aGlzLl9vbkluaXRpYWxpemVDYWxsYmFjaygpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7cmVzdWx0OiBcImluaXRpYWxpemVkXCJ9XG4gICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT0gXCJ2aXNpdFwiKSB7XG4gICAgICB0aGlzLmV2ZW50cy5lbWl0KFwibmF2aWdhdGVcIiwge3BhdGg6IGRhdGEucGF0aH0pXG4gICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT0gXCJkaXNtaXNzVG9cIikge1xuICAgICAgdGhpcy5ldmVudHMuZW1pdChcImRpc21pc3NUb1wiLCB7cGF0aDogZGF0YS5wYXRofSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbW1hbmQgdHlwZSBmb3IgU3lzdGVtVGVzdEJyb3dzZXJIZWxwZXI6ICR7ZGF0YS50eXBlfWApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKSA6IHZvaWR9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25Jbml0aWFsaXplKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fb25Jbml0aWFsaXplQ2FsbGJhY2sgPSBjYWxsYmFja1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKSA6IHZvaWR9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25GaXJzdEluaXRpYWxpemUoY2FsbGJhY2spIHtcbiAgICB0aGlzLl9vbkZpcnN0SW5pdGlhbGl6ZUNhbGxiYWNrID0gY2FsbGJhY2tcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG92ZXJyaWRlQ29uc29sZUxvZygpIHtcbiAgICBpZiAodGhpcy5vcmlnaW5hbENvbnNvbGVFcnJvciB8fCB0aGlzLm9yaWdpbmFsQ29uc29sZUxvZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29uc29sZSBtZXRob2RzIGhhcyBhbHJlYWR5IGJlZW4gb3ZlcnJpZGRlbiFcIilcbiAgICB9XG5cbiAgICB0aGlzLm9yaWdpbmFsQ29uc29sZUVycm9yID0gY29uc29sZS5lcnJvclxuICAgIHRoaXMub3JpZ2luYWxDb25zb2xlTG9nID0gY29uc29sZS5sb2dcblxuICAgIGNvbnNvbGUuZXJyb3IgPSB0aGlzLmZha2VDb25zb2xlRXJyb3JcbiAgICBjb25zb2xlLmxvZyA9IHRoaXMuZmFrZUNvbnNvbGVMb2dcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3FsXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+Pn1cbiAgICovXG4gIGFzeW5jIHNlbmRRdWVyeShzcWwpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29tbXVuaWNhdG9yLnNlbmRDb21tYW5kKHt0eXBlOiBcInF1ZXJ5XCIsIHNxbH0pXG4gIH1cbn1cbiJdfQ==
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLXRlc3QtYnJvd3Nlci1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3lzdGVtLXRlc3QtYnJvd3Nlci1oZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLDZDQUE2QyxDQUFBO0FBQ2hFLE9BQU8sZUFBZSxNQUFNLG9FQUFvRSxDQUFBO0FBQ2hHLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUUxQyxPQUFPLHNCQUFzQixNQUFNLCtCQUErQixDQUFBO0FBRWxFLHdFQUF3RTtBQUN4RSxNQUFNLE1BQU0sR0FBRztJQUNiLHVCQUF1QixFQUFFLElBQUk7Q0FDOUIsQ0FBQTtBQUVELE1BQU0sQ0FBQyxPQUFPLE9BQU8sdUJBQXVCO0lBQzFDLE1BQU0sQ0FBQyxPQUFPO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQTtRQUMzRCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsdUJBQXVCLENBQUE7SUFDdkMsQ0FBQztJQUVEO1FBMEpBOzs7V0FHRztRQUNILHFCQUFnQixHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUE7WUFFM0YsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtZQUMzQyxDQUFDO1FBQ0gsQ0FBQyxDQUFBO1FBRUQ7OztXQUdH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aUIsQ0FBQyxRQUFRO1FBQ3hCLElBQUksQ0FBQywwQkFBMEIsR0FBRyxRQUFRLENBQUE7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2hCLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQTtRQUNqRSxDQUFDO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUE7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUE7UUFFckMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUE7UUFDckMsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFBO0lBQ25DLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUc7UUFDakIsbUJBQW1CO1FBQ25CLE9BQU8sTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IENsaWVudCBmcm9tIFwic2NvdW5kcmVsLXJlbW90ZS1ldmFsL2J1aWxkL2NsaWVudC9pbmRleC5qc1wiXG5pbXBvcnQgQ2xpZW50V2ViU29ja2V0IGZyb20gXCJzY291bmRyZWwtcmVtb3RlLWV2YWwvYnVpbGQvY2xpZW50L2Nvbm5lY3Rpb25zL3dlYi1zb2NrZXQvaW5kZXguanNcIlxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiXG5cbmltcG9ydCBTeXN0ZW1UZXN0Q29tbXVuaWNhdG9yIGZyb20gXCIuL3N5c3RlbS10ZXN0LWNvbW11bmljYXRvci5qc1wiXG5cbi8qKiBAdHlwZSB7e3N5c3RlbVRlc3RCcm93c2VySGVscGVyOiBTeXN0ZW1UZXN0QnJvd3NlckhlbHBlciB8IG51bGx9fSAqL1xuY29uc3Qgc2hhcmVkID0ge1xuICBzeXN0ZW1UZXN0QnJvd3NlckhlbHBlcjogbnVsbFxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTeXN0ZW1UZXN0QnJvd3NlckhlbHBlciB7XG4gIHN0YXRpYyBjdXJyZW50KCkge1xuICAgIGlmICghc2hhcmVkLnN5c3RlbVRlc3RCcm93c2VySGVscGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjdXJyZW50IFN5c3RlbVRlc3RCcm93c2VySGVscGVyIHNldFwiKVxuICAgIH1cblxuICAgIHJldHVybiBzaGFyZWQuc3lzdGVtVGVzdEJyb3dzZXJIZWxwZXJcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29tbXVuaWNhdG9yID0gbmV3IFN5c3RlbVRlc3RDb21tdW5pY2F0b3Ioe3BhcmVudDogdGhpcywgb25Db21tYW5kOiB0aGlzLm9uQ29tbWFuZH0pXG4gICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlXG4gICAgdGhpcy5faGFzSW5pdGlhbGl6ZWQgPSBmYWxzZVxuICAgIHRoaXMuZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgICBzaGFyZWQuc3lzdGVtVGVzdEJyb3dzZXJIZWxwZXIgPSB0aGlzXG5cbiAgICB0aGlzLnN0YXJ0U2NvdW5kcmVsKClcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2NvdW5kcmVsKCkge1xuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmdldFN5c3RlbVRlc3RIb3N0KClcbiAgICB0aGlzLnNjb3VuZHJlbFdzID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke2hvc3R9OjgwOTBgKVxuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHRoaXMuc2NvdW5kcmVsQ2xpZW50V2ViU29ja2V0ID0gbmV3IENsaWVudFdlYlNvY2tldCh0aGlzLnNjb3VuZHJlbFdzKVxuXG4gICAgYXdhaXQgdGhpcy5zY291bmRyZWxDbGllbnRXZWJTb2NrZXQud2FpdEZvck9wZW5lZCgpXG5cbiAgICB0aGlzLnNjb3VuZHJlbENsaWVudCA9IG5ldyBDbGllbnQodGhpcy5zY291bmRyZWxDbGllbnRXZWJTb2NrZXQsIHtlbmFibGVTZXJ2ZXJDb250cm9sOiB0cnVlfSlcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwic2NvdW5kcmVsU3RhcnRlZFwiKVxuICB9XG5cbiAgd2FpdEZvclNjb3VuZHJlbFN0YXJ0ZWQoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAodGhpcy5zY291bmRyZWxDbGllbnQpIHtcbiAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV2ZW50cy5vbmNlKFwic2NvdW5kcmVsU3RhcnRlZFwiLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldFNjb3VuZHJlbCgpIHtcbiAgICBpZiAoIXRoaXMuc2NvdW5kcmVsQ2xpZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTY291bmRyZWwgY2xpZW50IGlzIG5vdCBzdGFydGVkIHlldFwiKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNjb3VuZHJlbENsaWVudFxuICB9XG5cbiAgY29ubmVjdE9uRXJyb3IoKSB7XG4gICAgaWYgKCF3aW5kb3c/LmFkZEV2ZW50TGlzdGVuZXIpIHJldHVyblxuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3Ioe1xuICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgIGVycm9yOiBldmVudC5lcnJvcixcbiAgICAgICAgZXJyb3JDbGFzczogZXZlbnQuZXJyb3I/Lm5hbWUsXG4gICAgICAgIGZpbGU6IGV2ZW50LmZpbGVuYW1lLFxuICAgICAgICBsaW5lOiBldmVudC5saW5lbm8sXG4gICAgICAgIG1lc3NhZ2U6IGV2ZW50Lm1lc3NhZ2UgfHwgXCJVbmtub3duIGVycm9yXCIsXG4gICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGNvbm5lY3RVbmhhbmRsZWRSZWplY3Rpb24oKSB7XG4gICAgaWYgKCF3aW5kb3c/LmFkZEV2ZW50TGlzdGVuZXIpIHJldHVyblxuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKHtcbiAgICAgICAgdHlwZTogXCJ1bmhhbmRsZWRyZWplY3Rpb25cIixcbiAgICAgICAgZXJyb3I6IGV2ZW50LnJlYXNvbixcbiAgICAgICAgZXJyb3JDbGFzczogXCJVbmhhbmRsZWRSZWplY3Rpb25cIixcbiAgICAgICAgbWVzc2FnZTogZXZlbnQucmVhc29uLm1lc3NhZ2UgfHwgZXZlbnQucmVhc29uIHx8IFwiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIHdpdGhvdXQgYSBtZXNzYWdlXCIsXG4gICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGEuYmFja3RyYWNlXVxuICAgKiBAcGFyYW0ge0Vycm9yfSBbZGF0YS5lcnJvcl1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhLmVycm9yQ2xhc3NdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YS5maWxlXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RhdGEubGluZV1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhLm1lc3NhZ2VdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YS50eXBlXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGEudXJsXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGhhbmRsZUVycm9yKGRhdGEpIHtcbiAgICBsZXQgYmFja3RyYWNlXG5cbiAgICBpZiAoZGF0YS5lcnJvciAmJiBkYXRhLmVycm9yLnN0YWNrKSB7XG4gICAgICBiYWNrdHJhY2UgPSBkYXRhLmVycm9yLnN0YWNrLnNwbGl0KFwiXFxuXCIpXG4gICAgICBiYWNrdHJhY2Uuc2hpZnQoKVxuICAgICAgYmFja3RyYWNlID0gYmFja3RyYWNlLmpvaW4oXCJcXG5cIilcbiAgICB9IGVsc2UgaWYgKGRhdGEuZmlsZSkge1xuICAgICAgYmFja3RyYWNlID0gYCR7ZGF0YS5maWxlfToke2RhdGEubGluZX1gXG4gICAgfVxuXG4gICAgZGF0YS5iYWNrdHJhY2UgPSBiYWNrdHJhY2VcblxuICAgIHRoaXMuY29tbXVuaWNhdG9yLnNlbmRDb21tYW5kKGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb25uZWN0V2ViU29ja2V0KCkge1xuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmdldFN5c3RlbVRlc3RIb3N0KClcbiAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke2hvc3R9OjE5ODVgKVxuICAgIHRoaXMuY29tbXVuaWNhdG9yLndzID0gdGhpcy53c1xuICAgIHRoaXMud3MuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIGRpZ2codGhpcywgXCJjb21tdW5pY2F0b3JcIiwgXCJvbkVycm9yXCIpKVxuICAgIHRoaXMud3MuYWRkRXZlbnRMaXN0ZW5lcihcIm9wZW5cIiwgZGlnZyh0aGlzLCBcImNvbW11bmljYXRvclwiLCBcIm9uT3BlblwiKSlcbiAgICB0aGlzLndzLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIChldmVudCkgPT4gdGhpcy5jb21tdW5pY2F0b3Iub25NZXNzYWdlKGV2ZW50LmRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXRTeXN0ZW1UZXN0SG9zdCgpIHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IGdsb2JhbFRoaXMubG9jYXRpb25cbiAgICBjb25zdCBkZWZhdWx0SG9zdCA9IGxvY2F0aW9uPy5ob3N0bmFtZSB8fCBcImxvY2FsaG9zdFwiXG4gICAgY29uc3Qgc2VhcmNoID0gbG9jYXRpb24/LnNlYXJjaFxuICAgIGNvbnN0IGVudkhvc3QgPSBwcm9jZXNzLmVudi5FWFBPX1BVQkxJQ19TWVNURU1fVEVTVF9IT1NUXG5cbiAgICBpZiAoZW52SG9zdCkgcmV0dXJuIGVudkhvc3RcblxuICAgIGlmICghc2VhcmNoKSByZXR1cm4gZGVmYXVsdEhvc3RcblxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKVxuICAgIGNvbnN0IGhvc3QgPSBwYXJhbXMuZ2V0KFwic3lzdGVtVGVzdEhvc3RcIilcblxuICAgIGNvbnN0IHJlc29sdmVkSG9zdCA9IGhvc3QgfHwgZGVmYXVsdEhvc3RcblxuICAgIGlmIChyZXNvbHZlZEhvc3QgPT09IFwiMC4wLjAuMFwiKSByZXR1cm4gXCIxMjcuMC4wLjFcIlxuXG4gICAgcmV0dXJuIHJlc29sdmVkSG9zdFxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZW5hYmxlT25Ccm93c2VyKCkge1xuICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlXG4gICAgdGhpcy5jb25uZWN0V2ViU29ja2V0KClcbiAgICB0aGlzLmNvbm5lY3RPbkVycm9yKClcbiAgICB0aGlzLmNvbm5lY3RVbmhhbmRsZWRSZWplY3Rpb24oKVxuICAgIHRoaXMub3ZlcnJpZGVDb25zb2xlTG9nKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cbiAgZ2V0RW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuX2VuYWJsZWQgfVxuXG4gIC8qKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSAqL1xuICBnZXRFdmVudHMoKSB7IHJldHVybiB0aGlzLmV2ZW50cyB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3NcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmYWtlQ29uc29sZUVycm9yID0gKC4uLmFyZ3MpID0+IHtcbiAgICB0aGlzLmNvbW11bmljYXRvci5zZW5kQ29tbWFuZCh7dHlwZTogXCJjb25zb2xlLmVycm9yXCIsIHZhbHVlOiB0aGlzLmNvbnNvbGVMb2dNZXNzYWdlKGFyZ3MpfSlcblxuICAgIGlmICh0aGlzLm9yaWdpbmFsQ29uc29sZUVycm9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbENvbnNvbGVFcnJvciguLi5hcmdzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZmFrZUNvbnNvbGVMb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHRoaXMuY29tbXVuaWNhdG9yLnNlbmRDb21tYW5kKHt0eXBlOiBcImNvbnNvbGUubG9nXCIsIHZhbHVlOiB0aGlzLmNvbnNvbGVMb2dNZXNzYWdlKGFyZ3MpfSlcblxuICAgIGlmICh0aGlzLm9yaWdpbmFsQ29uc29sZUxvZykge1xuICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxDb25zb2xlTG9nKC4uLmFyZ3MpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBhcmdcbiAgICogQHBhcmFtIHthbnlbXX0gW3NjYW5uZWRPYmplY3RzXVxuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgY29uc29sZUxvZ01lc3NhZ2UoYXJnLCBzY2FubmVkT2JqZWN0cyA9IFtdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgaWYgKHNjYW5uZWRPYmplY3RzLmluY2x1ZGVzKGFyZykpIHtcbiAgICAgICAgcmV0dXJuIFwiW3JlY3Vyc2l2ZV1cIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2Nhbm5lZE9iamVjdHMucHVzaChhcmcpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXJnKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY29uc29sZUxvZ01lc3NhZ2UodmFsdWUsIHNjYW5uZWRPYmplY3RzKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICBpZiAoc2Nhbm5lZE9iamVjdHMuaW5jbHVkZXMoYXJnKSkge1xuICAgICAgICByZXR1cm4gXCJbcmVjdXJzaXZlXVwiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2FubmVkT2JqZWN0cy5wdXNoKGFyZylcbiAgICAgIH1cblxuICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICAgICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gYXJnKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5jb25zb2xlTG9nTWVzc2FnZShhcmdba2V5XSwgc2Nhbm5lZE9iamVjdHMpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcgPT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIGBbb2JqZWN0ICR7YXJnPy5jb25zdHJ1Y3Rvcj8ubmFtZX1dYFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXJnXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e2RhdGE6IHtwYXRoOiBzdHJpbmcsIHR5cGU6IHN0cmluZ319fSBhcmdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtyZXN1bHQ6IHN0cmluZ30gfCB2b2lkPn1cbiAgICovXG4gIG9uQ29tbWFuZCA9IGFzeW5jICh7ZGF0YX0pID0+IHtcbiAgICBpZiAoZGF0YS50eXBlID09IFwiaW5pdGlhbGl6ZVwiKSB7XG4gICAgICB0aGlzLmV2ZW50cy5lbWl0KFwiaW5pdGlhbGl6ZVwiKVxuXG4gICAgICBpZiAoIXRoaXMuX2hhc0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMuX2hhc0luaXRpYWxpemVkID0gdHJ1ZVxuXG4gICAgICAgIGlmICh0aGlzLl9vbkZpcnN0SW5pdGlhbGl6ZUNhbGxiYWNrKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5fb25GaXJzdEluaXRpYWxpemVDYWxsYmFjaygpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX29uSW5pdGlhbGl6ZUNhbGxiYWNrKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX29uSW5pdGlhbGl6ZUNhbGxiYWNrKClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtyZXN1bHQ6IFwiaW5pdGlhbGl6ZWRcIn1cbiAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PSBcIndhaXRGb3JTY291bmRyZWxcIikge1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yU2NvdW5kcmVsU3RhcnRlZCgpXG4gICAgICByZXR1cm4ge3Jlc3VsdDogXCJzY291bmRyZWwtcmVhZHlcIn1cbiAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PSBcInZpc2l0XCIpIHtcbiAgICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJuYXZpZ2F0ZVwiLCB7cGF0aDogZGF0YS5wYXRofSlcbiAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PSBcImRpc21pc3NUb1wiKSB7XG4gICAgICB0aGlzLmV2ZW50cy5lbWl0KFwiZGlzbWlzc1RvXCIsIHtwYXRoOiBkYXRhLnBhdGh9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29tbWFuZCB0eXBlIGZvciBTeXN0ZW1UZXN0QnJvd3NlckhlbHBlcjogJHtkYXRhLnR5cGV9YClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbigpIDogdm9pZH0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkluaXRpYWxpemUoY2FsbGJhY2spIHtcbiAgICB0aGlzLl9vbkluaXRpYWxpemVDYWxsYmFjayA9IGNhbGxiYWNrXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbigpIDogdm9pZH0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkZpcnN0SW5pdGlhbGl6ZShjYWxsYmFjaykge1xuICAgIHRoaXMuX29uRmlyc3RJbml0aWFsaXplQ2FsbGJhY2sgPSBjYWxsYmFja1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb3ZlcnJpZGVDb25zb2xlTG9nKCkge1xuICAgIGlmICh0aGlzLm9yaWdpbmFsQ29uc29sZUVycm9yIHx8IHRoaXMub3JpZ2luYWxDb25zb2xlTG9nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25zb2xlIG1ldGhvZHMgaGFzIGFscmVhZHkgYmVlbiBvdmVycmlkZGVuIVwiKVxuICAgIH1cblxuICAgIHRoaXMub3JpZ2luYWxDb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yXG4gICAgdGhpcy5vcmlnaW5hbENvbnNvbGVMb2cgPSBjb25zb2xlLmxvZ1xuXG4gICAgY29uc29sZS5lcnJvciA9IHRoaXMuZmFrZUNvbnNvbGVFcnJvclxuICAgIGNvbnNvbGUubG9nID0gdGhpcy5mYWtlQ29uc29sZUxvZ1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4+fVxuICAgKi9cbiAgYXN5bmMgc2VuZFF1ZXJ5KHNxbCkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb21tdW5pY2F0b3Iuc2VuZENvbW1hbmQoe3R5cGU6IFwicXVlcnlcIiwgc3FsfSlcbiAgfVxufVxuIl19
|
package/build/system-test.d.ts
CHANGED
|
@@ -1,3 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {object} SystemTestArgs
|
|
3
|
+
* @property {string} [host] Hostname for the app server.
|
|
4
|
+
* @property {number} [port] Port for the app server.
|
|
5
|
+
* @property {string} [httpHost] Hostname for the static HTTP server.
|
|
6
|
+
* @property {number} [httpPort] Port for the static HTTP server.
|
|
7
|
+
* @property {string} [httpConnectHost] Hostname used by the driver to reach the HTTP server.
|
|
8
|
+
* @property {boolean} [debug] Enable debug logging.
|
|
9
|
+
* @property {(error: any) => boolean} [errorFilter] Filter for browser errors (return false to ignore).
|
|
10
|
+
* @property {Record<string, any>} [urlArgs] Query params appended to the root path.
|
|
11
|
+
* @property {SystemTestDriverConfig} [driver] Driver configuration.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* @typedef {object} SystemTestDriverConfig
|
|
15
|
+
* @property {"selenium"|"appium"} [type] Driver implementation to use.
|
|
16
|
+
* @property {Record<string, any>} [options] Driver-specific options.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* @typedef {object} FindArgs
|
|
20
|
+
* @property {number} [timeout] Override timeout for lookup.
|
|
21
|
+
* @property {boolean} [visible] Whether to require elements to be visible.
|
|
22
|
+
* @property {boolean} [useBaseSelector] Whether to scope by the base selector.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* @typedef {object} WaitForNoSelectorArgs
|
|
26
|
+
* @property {boolean} [useBaseSelector] Whether to scope by the base selector.
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* @typedef {object} NotificationMessageArgs
|
|
30
|
+
* @property {boolean} [dismiss] Whether to dismiss the notification after it appears.
|
|
31
|
+
*/
|
|
1
32
|
export default class SystemTest {
|
|
2
33
|
static rootPath: string;
|
|
3
34
|
/**
|
|
@@ -25,14 +56,16 @@ export default class SystemTest {
|
|
|
25
56
|
* Creates a new SystemTest instance
|
|
26
57
|
* @param {SystemTestArgs} [args]
|
|
27
58
|
*/
|
|
28
|
-
constructor({ host, port, httpHost, httpPort, debug, errorFilter, urlArgs, ...restArgs }?: SystemTestArgs);
|
|
59
|
+
constructor({ host, port, httpHost, httpPort, httpConnectHost, debug, errorFilter, urlArgs, driver, ...restArgs }?: SystemTestArgs);
|
|
29
60
|
/** @type {SystemTestCommunicator | undefined} */
|
|
30
61
|
communicator: SystemTestCommunicator | undefined;
|
|
31
62
|
/** @type {import("selenium-webdriver").WebDriver | undefined} */
|
|
32
63
|
driver: import("selenium-webdriver").WebDriver | undefined;
|
|
64
|
+
/** @type {import("./drivers/webdriver-driver.js").default | undefined} */
|
|
65
|
+
driverAdapter: import("./drivers/webdriver-driver.js").default | undefined;
|
|
33
66
|
_started: boolean;
|
|
34
|
-
|
|
35
|
-
|
|
67
|
+
/** @type {SystemTestDriverConfig | undefined} */
|
|
68
|
+
_driverConfig: SystemTestDriverConfig | undefined;
|
|
36
69
|
_httpHost: string;
|
|
37
70
|
_httpPort: number;
|
|
38
71
|
/** @type {(error: any) => boolean | undefined} */
|
|
@@ -65,6 +98,7 @@ export default class SystemTest {
|
|
|
65
98
|
}): boolean;
|
|
66
99
|
_host: string;
|
|
67
100
|
_port: number;
|
|
101
|
+
_httpConnectHost: string;
|
|
68
102
|
_debug: boolean;
|
|
69
103
|
_urlArgs: Record<string, any>;
|
|
70
104
|
_rootPath: string;
|
|
@@ -78,6 +112,13 @@ export default class SystemTest {
|
|
|
78
112
|
getBaseSelector(): string | undefined;
|
|
79
113
|
/** @returns {import("selenium-webdriver").WebDriver} */
|
|
80
114
|
getDriver(): import("selenium-webdriver").WebDriver;
|
|
115
|
+
/** @returns {import("./drivers/webdriver-driver.js").default} */
|
|
116
|
+
getDriverAdapter(): import("./drivers/webdriver-driver.js").default;
|
|
117
|
+
/**
|
|
118
|
+
* @param {SystemTestDriverConfig} [driverConfig]
|
|
119
|
+
* @returns {import("./drivers/webdriver-driver.js").default}
|
|
120
|
+
*/
|
|
121
|
+
createDriver(driverConfig?: SystemTestDriverConfig): import("./drivers/webdriver-driver.js").default;
|
|
81
122
|
/**
|
|
82
123
|
* Sets the base selector for scoping element searches
|
|
83
124
|
* @param {string} baseSelector
|
|
@@ -154,19 +195,18 @@ export default class SystemTest {
|
|
|
154
195
|
find(selector: string, args?: FindArgs): Promise<import("selenium-webdriver").WebElement>;
|
|
155
196
|
/**
|
|
156
197
|
* Finds a single element by test ID
|
|
157
|
-
* @param {string}
|
|
198
|
+
* @param {string} testId
|
|
158
199
|
* @param {FindArgs} [args]
|
|
159
200
|
* @returns {Promise<import("selenium-webdriver").WebElement>}
|
|
160
201
|
*/
|
|
161
|
-
|
|
202
|
+
findByTestId(testId: string, args?: FindArgs): Promise<import("selenium-webdriver").WebElement>;
|
|
162
203
|
/**
|
|
163
|
-
*
|
|
204
|
+
* Finds a single element by test ID
|
|
205
|
+
* @param {string} testID
|
|
164
206
|
* @param {FindArgs} [args]
|
|
165
207
|
* @returns {Promise<import("selenium-webdriver").WebElement>}
|
|
166
208
|
*/
|
|
167
|
-
|
|
168
|
-
selector: string;
|
|
169
|
-
} & FindArgs), args?: FindArgs): Promise<import("selenium-webdriver").WebElement>;
|
|
209
|
+
findByTestID(testID: string, args?: FindArgs): Promise<import("selenium-webdriver").WebElement>;
|
|
170
210
|
/**
|
|
171
211
|
* Finds a single element by CSS selector without waiting
|
|
172
212
|
* @param {string} selector
|
|
@@ -207,7 +247,6 @@ export default class SystemTest {
|
|
|
207
247
|
* @returns {Promise<void>}
|
|
208
248
|
*/
|
|
209
249
|
waitForNoSelector(selector: string, args?: WaitForNoSelectorArgs): Promise<void>;
|
|
210
|
-
_withRethrownErrors(callback: any): Promise<any>;
|
|
211
250
|
/**
|
|
212
251
|
* Gets notification messages
|
|
213
252
|
* @returns {Promise<string[]>}
|
|
@@ -338,6 +377,19 @@ export default class SystemTest {
|
|
|
338
377
|
* @returns {Promise<void>}
|
|
339
378
|
*/
|
|
340
379
|
driverVisit(path: string): Promise<void>;
|
|
380
|
+
/**
|
|
381
|
+
* Formats browser logs for console output and truncates overly long output.
|
|
382
|
+
* @param {string[]} logs
|
|
383
|
+
* @param {number} [maxLines]
|
|
384
|
+
* @returns {string[]}
|
|
385
|
+
*/
|
|
386
|
+
formatBrowserLogsForConsole(logs: string[], maxLines?: number): string[];
|
|
387
|
+
/**
|
|
388
|
+
* Prints browser logs to stdout for CI visibility when tests fail.
|
|
389
|
+
* @param {string[]} logs
|
|
390
|
+
* @returns {void}
|
|
391
|
+
*/
|
|
392
|
+
printBrowserLogsForFailure(logs: string[]): void;
|
|
341
393
|
/**
|
|
342
394
|
* Takes a screenshot, saves HTML and browser logs
|
|
343
395
|
* @returns {Promise<void>}
|
|
@@ -379,6 +431,10 @@ export type SystemTestArgs = {
|
|
|
379
431
|
* Port for the static HTTP server.
|
|
380
432
|
*/
|
|
381
433
|
httpPort?: number;
|
|
434
|
+
/**
|
|
435
|
+
* Hostname used by the driver to reach the HTTP server.
|
|
436
|
+
*/
|
|
437
|
+
httpConnectHost?: string;
|
|
382
438
|
/**
|
|
383
439
|
* Enable debug logging.
|
|
384
440
|
*/
|
|
@@ -391,6 +447,20 @@ export type SystemTestArgs = {
|
|
|
391
447
|
* Query params appended to the root path.
|
|
392
448
|
*/
|
|
393
449
|
urlArgs?: Record<string, any>;
|
|
450
|
+
/**
|
|
451
|
+
* Driver configuration.
|
|
452
|
+
*/
|
|
453
|
+
driver?: SystemTestDriverConfig;
|
|
454
|
+
};
|
|
455
|
+
export type SystemTestDriverConfig = {
|
|
456
|
+
/**
|
|
457
|
+
* Driver implementation to use.
|
|
458
|
+
*/
|
|
459
|
+
type?: "selenium" | "appium";
|
|
460
|
+
/**
|
|
461
|
+
* Driver-specific options.
|
|
462
|
+
*/
|
|
463
|
+
options?: Record<string, any>;
|
|
394
464
|
};
|
|
395
465
|
export type FindArgs = {
|
|
396
466
|
/**
|