system-testing 1.0.117 → 1.0.119

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.
@@ -2,6 +2,41 @@
2
2
  import fs from "node:fs/promises";
3
3
  import http from "node:http";
4
4
  import mime from "mime";
5
+ /**
6
+ * @param {unknown} error
7
+ * @returns {boolean}
8
+ */
9
+ function isMissingPathError(error) {
10
+ return !!error && typeof error === "object" && "code" in error && (error.code === "ENOENT" || error.code === "ENOTDIR");
11
+ }
12
+ /**
13
+ * @param {string} filePath
14
+ * @returns {Promise<import("node:fs").Stats | undefined>}
15
+ */
16
+ async function pathStats(filePath) {
17
+ try {
18
+ return await fs.stat(filePath);
19
+ }
20
+ catch (error) {
21
+ if (isMissingPathError(error))
22
+ return undefined;
23
+ throw error;
24
+ }
25
+ }
26
+ /**
27
+ * @param {string[]} filePaths
28
+ * @returns {Promise<string | undefined>}
29
+ */
30
+ async function firstExistingFilePath(filePaths) {
31
+ for (const filePath of filePaths) {
32
+ if (filePath.length === 0)
33
+ continue;
34
+ const stats = await pathStats(filePath);
35
+ if (stats?.isFile())
36
+ return filePath;
37
+ }
38
+ return undefined;
39
+ }
5
40
  export default class SystemTestHttpServer {
6
41
  /**
7
42
  * @param {{host?: string, port?: number, debug?: boolean, onError?: (error: Error) => void, connectHost?: string}} [args]
@@ -20,20 +55,18 @@ export default class SystemTestHttpServer {
20
55
  }
21
56
  const baseUrl = `http://${request.headers.host || "localhost:1984"}`;
22
57
  const { pathname } = new URL(request.url, baseUrl);
23
- let filePath = `${process.cwd()}/dist${pathname}`;
24
- if (filePath.endsWith("/")) {
25
- filePath += "index.html";
26
- }
27
- let fileExists;
28
- try {
29
- await fs.stat(filePath);
30
- fileExists = true;
31
- }
32
- catch (_error) { // eslint-disable-line no-unused-vars
33
- fileExists = false;
34
- }
35
- if (!fileExists) {
36
- filePath = `${process.cwd()}/dist/index.html`;
58
+ const requestedPath = `${process.cwd()}/dist${pathname}`;
59
+ const requestedStats = await pathStats(requestedPath);
60
+ let filePath = await firstExistingFilePath([
61
+ requestedStats?.isFile() ? requestedPath : "",
62
+ pathname.endsWith("/") ? "" : `${requestedPath}.html`,
63
+ requestedStats?.isDirectory() ? `${requestedPath}/index.html` : "",
64
+ `${process.cwd()}/dist/index.html`
65
+ ]);
66
+ if (!filePath) {
67
+ response.statusCode = 404;
68
+ response.end("Not Found");
69
+ return;
37
70
  }
38
71
  let fileContent;
39
72
  try {
@@ -185,4 +218,4 @@ export default class SystemTestHttpServer {
185
218
  return message.includes("socket hang up");
186
219
  }
187
220
  }
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLXRlc3QtaHR0cC1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3lzdGVtLXRlc3QtaHR0cC1zZXJ2ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2pDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFFdkIsTUFBTSxDQUFDLE9BQU8sT0FBTyxvQkFBb0I7SUFDdkM7O09BRUc7SUFDSCxZQUFZLEVBQUMsSUFBSSxHQUFHLFdBQVcsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBQyxHQUFHLEVBQUU7UUFrRHZGOzs7O1dBSUc7UUFDSCx3QkFBbUIsR0FBRyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLFFBQVEsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFBO2dCQUN6QixRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO2dCQUMzQixPQUFNO1lBQ1IsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUFHLFVBQVUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQTtZQUNwRSxNQUFNLEVBQUMsUUFBUSxFQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNoRCxJQUFJLFFBQVEsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxRQUFRLEVBQUUsQ0FBQTtZQUVqRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsUUFBUSxJQUFJLFlBQVksQ0FBQTtZQUMx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QUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV0RSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCBodHRwIGZyb20gXCJub2RlOmh0dHBcIlxuaW1wb3J0IG1pbWUgZnJvbSBcIm1pbWVcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTeXN0ZW1UZXN0SHR0cFNlcnZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3tob3N0Pzogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBkZWJ1Zz86IGJvb2xlYW4sIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkLCBjb25uZWN0SG9zdD86IHN0cmluZ319IFthcmdzXVxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2hvc3QgPSBcImxvY2FsaG9zdFwiLCBwb3J0ID0gMTk4NCwgZGVidWcgPSBmYWxzZSwgb25FcnJvciwgY29ubmVjdEhvc3R9ID0ge30pIHtcbiAgICB0aGlzLl9ob3N0ID0gaG9zdFxuICAgIHRoaXMuX3BvcnQgPSBwb3J0XG4gICAgdGhpcy5fZGVidWcgPSBkZWJ1Z1xuICAgIHRoaXMuX29uRXJyb3IgPSBvbkVycm9yXG4gICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlXG4gICAgdGhpcy5fY29ubmVjdEhvc3QgPSBjb25uZWN0SG9zdCA/PyAoaG9zdCA9PT0gXCIwLjAuMC4wXCIgPyBcIjEyNy4wLjAuMVwiIDogaG9zdClcbiAgICAvKiogQHR5cGUge1NldDxpbXBvcnQoXCJub2RlOm5ldFwiKS5Tb2NrZXQ+fSAqL1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25zID0gbmV3IFNldCgpXG4gIH1cblxuICAvKiogQHBhcmFtIHthbnlbXX0gYXJncyAqL1xuICBkZWJ1Z0Vycm9yKC4uLmFyZ3MpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW1N5c3RlbVRlc3RIdHRwU2VydmVyIGVycm9yXVwiLCAuLi5hcmdzKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7YW55W119IGFyZ3MgKi9cbiAgZGVidWdMb2coLi4uYXJncykge1xuICAgIGlmICh0aGlzLl9kZWJ1Zykge1xuICAgICAgY29uc29sZS5sb2coXCJbU3lzdGVtVGVzdEh0dHBTZXJ2ZXJdXCIsIC4uLmFyZ3MpXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBjbG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuaHR0cFNlcnZlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSFRUUCBzZXJ2ZXIgaXMgbm90IGluaXRpYWxpemVkXCIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2Nvbm5lY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgdGhpcy5fY29ubmVjdGlvbnMpIHtcbiAgICAgICAgY29ubmVjdGlvbi5kZXN0cm95KClcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zLmNsZWFyKClcbiAgICB9XG5cbiAgICBjb25zdCBodHRwU2VydmVyID0gdGhpcy5odHRwU2VydmVyXG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBodHRwU2VydmVyLmNsb3NlKChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlXG4gICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2h0dHAuSW5jb21pbmdNZXNzYWdlfSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7aHR0cC5TZXJ2ZXJSZXNwb25zZX0gcmVzcG9uc2VcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBvbkh0dHBTZXJ2ZXJSZXF1ZXN0ID0gYXN5bmMgKHJlcXVlc3QsIHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCFyZXF1ZXN0LnVybCkge1xuICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDQwMFxuICAgICAgcmVzcG9uc2UuZW5kKFwiQmFkIFJlcXVlc3RcIilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGJhc2VVcmwgPSBgaHR0cDovLyR7cmVxdWVzdC5oZWFkZXJzLmhvc3QgfHwgXCJsb2NhbGhvc3Q6MTk4NFwifWBcbiAgICBjb25zdCB7cGF0aG5hbWV9ID0gbmV3IFVSTChyZXF1ZXN0LnVybCwgYmFzZVVybClcbiAgICBsZXQgZmlsZVBhdGggPSBgJHtwcm9jZXNzLmN3ZCgpfS9kaXN0JHtwYXRobmFtZX1gXG5cbiAgICBpZiAoZmlsZVBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICBmaWxlUGF0aCArPSBcImluZGV4Lmh0bWxcIlxuICAgIH1cblxuICAgIGxldCBmaWxlRXhpc3RzXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuc3RhdChmaWxlUGF0aClcbiAgICAgIGZpbGVFeGlzdHMgPSB0cnVlXG4gICAgfSBjYXRjaCAoX2Vycm9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIGZpbGVFeGlzdHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICghZmlsZUV4aXN0cykge1xuICAgICAgZmlsZVBhdGggPSBgJHtwcm9jZXNzLmN3ZCgpfS9kaXN0L2luZGV4Lmh0bWxgXG4gICAgfVxuXG4gICAgbGV0IGZpbGVDb250ZW50XG5cbiAgICB0cnkge1xuICAgICAgZmlsZUNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG5cbiAgICAgIHRoaXMuZGVidWdFcnJvcihgSFRUUCBzZXJ2ZXIgcmVhZCBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlfWApXG4gICAgICByZXNwb25zZS5zdGF0dXNDb2RlID0gNTAwXG4gICAgICByZXNwb25zZS5lbmQoXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG1pbWVUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVQYXRoKVxuXG4gICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDIwMFxuXG4gICAgaWYgKG1pbWVUeXBlKSB7XG4gICAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgbWltZVR5cGUpXG4gICAgfVxuXG4gICAgcmVzcG9uc2UuZW5kKGZpbGVDb250ZW50KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBzdGFydCgpIHtcbiAgICB0aGlzLmRlYnVnTG9nKGBTdGFydGluZyBIVFRQIHNlcnZlciBvbiAke3RoaXMuX2hvc3R9OiR7dGhpcy5fcG9ydH1gKVxuICAgIGF3YWl0IHRoaXMuc3RhcnRIdHRwU2VydmVyKClcbiAgICB0aGlzLmRlYnVnTG9nKGBIVFRQIHNlcnZlciBzdGFydGVkIG9uICR7dGhpcy5faG9zdH06JHt0aGlzLl9wb3J0fWApXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59ICovXG4gIHN0YXJ0SHR0cFNlcnZlcigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5odHRwU2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIodGhpcy5vbkh0dHBTZXJ2ZXJSZXF1ZXN0KVxuICAgICAgdGhpcy5odHRwU2VydmVyLm9uKFwiY29ubmVjdGlvblwiLCAoY29ubmVjdGlvbikgPT4ge1xuICAgICAgICB0aGlzLl9jb25uZWN0aW9ucy5hZGQoY29ubmVjdGlvbilcbiAgICAgICAgY29ubmVjdGlvbi5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jb25uZWN0aW9ucy5kZWxldGUoY29ubmVjdGlvbilcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICB0aGlzLmh0dHBTZXJ2ZXIub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG5cbiAgICAgICAgdGhpcy5kZWJ1Z0Vycm9yKGBIVFRQIHNlcnZlciBlcnJvcjogJHtlcnJvck1lc3NhZ2V9YClcblxuICAgICAgICBpZiAodGhpcy5fc3RhcnRlZCkge1xuICAgICAgICAgIGlmICh0aGlzLl9vbkVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9vbkVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0aGlzLmh0dHBTZXJ2ZXIubGlzdGVuKHRoaXMuX3BvcnQsIHRoaXMuX2hvc3QsICgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhcnRlZCA9IHRydWVcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7dGltZW91dE1zPzogbnVtYmVyfX0gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgYXNzZXJ0UmVhY2hhYmxlKHt0aW1lb3V0TXMgPSA1MDAwfSA9IHt9KSB7XG4gICAgY29uc3QgdXJsID0gYGh0dHA6Ly8ke3RoaXMuX2Nvbm5lY3RIb3N0fToke3RoaXMuX3BvcnR9L2BcbiAgICBjb25zdCBtYXhBdHRlbXB0cyA9IDNcblxuICAgIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IG1heEF0dGVtcHRzOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gaHR0cC5nZXQodXJsLCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIC8qKiBAdHlwZSB7QnVmZmVyW119ICovXG4gICAgICAgICAgICBjb25zdCBjaHVua3MgPSBbXVxuXG4gICAgICAgICAgICByZXNwb25zZS5vbihcImRhdGFcIiwgKGNodW5rKSA9PiBjaHVua3MucHVzaChjaHVuaykpXG4gICAgICAgICAgICByZXNwb25zZS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBCdWZmZXIuY29uY2F0KGNodW5rcykudG9TdHJpbmcoXCJ1dGY4XCIpXG5cbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEhUVFAgc2VydmVyIGhlYWx0aCBjaGVjayBmYWlsZWQgd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXNDb2RlfSBmb3IgJHt1cmx9OiAke2JvZHkuc2xpY2UoMCwgMjAwKX1gKSlcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmVxdWVzdC5vbihcImVycm9yXCIsIChlcnJvcikgPT4gcmVqZWN0KGVycm9yKSlcblxuICAgICAgICAgIHJlcXVlc3Quc2V0VGltZW91dCh0aW1lb3V0TXMsICgpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3QuZGVzdHJveShuZXcgRXJyb3IoYEhUVFAgc2VydmVyIGhlYWx0aCBjaGVjayB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0TXN9bXMgZm9yICR7dXJsfWApKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoYXR0ZW1wdCA9PT0gbWF4QXR0ZW1wdHMgfHwgIXRoaXMuaXNSZXRyeWFibGVIZWFsdGhDaGVja0Vycm9yKGVycm9yKSkge1xuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3Vua25vd259IGVycm9yXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNSZXRyeWFibGVIZWFsdGhDaGVja0Vycm9yKGVycm9yKSB7XG4gICAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBcImNvZGVcIiBpbiBlcnJvcikge1xuICAgICAgaWYgKGVycm9yLmNvZGUgPT09IFwiRUNPTk5SRVNFVFwiKSByZXR1cm4gdHJ1ZVxuICAgICAgaWYgKGVycm9yLmNvZGUgPT09IFwiRUNPTk5SRUZVU0VEXCIpIHJldHVybiB0cnVlXG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gXCJFVElNRURPVVRcIikgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG5cbiAgICByZXR1cm4gbWVzc2FnZS5pbmNsdWRlcyhcInNvY2tldCBoYW5nIHVwXCIpXG4gIH1cbn1cbiJdfQ==
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLXRlc3QtaHR0cC1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3lzdGVtLXRlc3QtaHR0cC1zZXJ2ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2pDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFFdkI7OztHQUdHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxLQUFLO0lBQy9CLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUE7QUFDekgsQ0FBQztBQUVEOzs7R0FHRztBQUNILEtBQUssVUFBVSxTQUFTLENBQUMsUUFBUTtJQUMvQixJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFDL0MsTUFBTSxLQUFLLENBQUE7SUFDYixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxTQUFTO0lBQzVDLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7UUFDakMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxTQUFRO1FBRW5DLE1BQU0sS0FBSyxHQUFHLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXZDLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUFFLE9BQU8sUUFB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QUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDM0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiXG5pbXBvcnQgaHR0cCBmcm9tIFwibm9kZTpodHRwXCJcbmltcG9ydCBtaW1lIGZyb20gXCJtaW1lXCJcblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd259IGVycm9yXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNNaXNzaW5nUGF0aEVycm9yKGVycm9yKSB7XG4gIHJldHVybiAhIWVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBcImNvZGVcIiBpbiBlcnJvciAmJiAoZXJyb3IuY29kZSA9PT0gXCJFTk9FTlRcIiB8fCBlcnJvci5jb2RlID09PSBcIkVOT1RESVJcIilcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIm5vZGU6ZnNcIikuU3RhdHMgfCB1bmRlZmluZWQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBwYXRoU3RhdHMoZmlsZVBhdGgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZnMuc3RhdChmaWxlUGF0aClcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNNaXNzaW5nUGF0aEVycm9yKGVycm9yKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBmaWxlUGF0aHNcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpcnN0RXhpc3RpbmdGaWxlUGF0aChmaWxlUGF0aHMpIHtcbiAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiBmaWxlUGF0aHMpIHtcbiAgICBpZiAoZmlsZVBhdGgubGVuZ3RoID09PSAwKSBjb250aW51ZVxuXG4gICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBwYXRoU3RhdHMoZmlsZVBhdGgpXG5cbiAgICBpZiAoc3RhdHM/LmlzRmlsZSgpKSByZXR1cm4gZmlsZVBhdGhcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3lzdGVtVGVzdEh0dHBTZXJ2ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHt7aG9zdD86IHN0cmluZywgcG9ydD86IG51bWJlciwgZGVidWc/OiBib29sZWFuLCBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZCwgY29ubmVjdEhvc3Q/OiBzdHJpbmd9fSBbYXJnc11cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtob3N0ID0gXCJsb2NhbGhvc3RcIiwgcG9ydCA9IDE5ODQsIGRlYnVnID0gZmFsc2UsIG9uRXJyb3IsIGNvbm5lY3RIb3N0fSA9IHt9KSB7XG4gICAgdGhpcy5faG9zdCA9IGhvc3RcbiAgICB0aGlzLl9wb3J0ID0gcG9ydFxuICAgIHRoaXMuX2RlYnVnID0gZGVidWdcbiAgICB0aGlzLl9vbkVycm9yID0gb25FcnJvclxuICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZVxuICAgIHRoaXMuX2Nvbm5lY3RIb3N0ID0gY29ubmVjdEhvc3QgPz8gKGhvc3QgPT09IFwiMC4wLjAuMFwiID8gXCIxMjcuMC4wLjFcIiA6IGhvc3QpXG4gICAgLyoqIEB0eXBlIHtTZXQ8aW1wb3J0KFwibm9kZTpuZXRcIikuU29ja2V0Pn0gKi9cbiAgICB0aGlzLl9jb25uZWN0aW9ucyA9IG5ldyBTZXQoKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7YW55W119IGFyZ3MgKi9cbiAgZGVidWdFcnJvciguLi5hcmdzKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltTeXN0ZW1UZXN0SHR0cFNlcnZlciBlcnJvcl1cIiwgLi4uYXJncylcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2FueVtdfSBhcmdzICovXG4gIGRlYnVnTG9nKC4uLmFyZ3MpIHtcbiAgICBpZiAodGhpcy5fZGVidWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiW1N5c3RlbVRlc3RIdHRwU2VydmVyXVwiLCAuLi5hcmdzKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgYXN5bmMgY2xvc2UoKSB7XG4gICAgaWYgKCF0aGlzLmh0dHBTZXJ2ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkhUVFAgc2VydmVyIGlzIG5vdCBpbml0aWFsaXplZFwiKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25uZWN0aW9ucy5zaXplID4gMCkge1xuICAgICAgZm9yIChjb25zdCBjb25uZWN0aW9uIG9mIHRoaXMuX2Nvbm5lY3Rpb25zKSB7XG4gICAgICAgIGNvbm5lY3Rpb24uZGVzdHJveSgpXG4gICAgICB9XG4gICAgICB0aGlzLl9jb25uZWN0aW9ucy5jbGVhcigpXG4gICAgfVxuXG4gICAgY29uc3QgaHR0cFNlcnZlciA9IHRoaXMuaHR0cFNlcnZlclxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaHR0cFNlcnZlci5jbG9zZSgoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZVxuICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtodHRwLkluY29taW5nTWVzc2FnZX0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge2h0dHAuU2VydmVyUmVzcG9uc2V9IHJlc3BvbnNlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgb25IdHRwU2VydmVyUmVxdWVzdCA9IGFzeW5jIChyZXF1ZXN0LCByZXNwb25zZSkgPT4ge1xuICAgIGlmICghcmVxdWVzdC51cmwpIHtcbiAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGUgPSA0MDBcbiAgICAgIHJlc3BvbnNlLmVuZChcIkJhZCBSZXF1ZXN0XCIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVXJsID0gYGh0dHA6Ly8ke3JlcXVlc3QuaGVhZGVycy5ob3N0IHx8IFwibG9jYWxob3N0OjE5ODRcIn1gXG4gICAgY29uc3Qge3BhdGhuYW1lfSA9IG5ldyBVUkwocmVxdWVzdC51cmwsIGJhc2VVcmwpXG4gICAgY29uc3QgcmVxdWVzdGVkUGF0aCA9IGAke3Byb2Nlc3MuY3dkKCl9L2Rpc3Qke3BhdGhuYW1lfWBcbiAgICBjb25zdCByZXF1ZXN0ZWRTdGF0cyA9IGF3YWl0IHBhdGhTdGF0cyhyZXF1ZXN0ZWRQYXRoKVxuICAgIGxldCBmaWxlUGF0aCA9IGF3YWl0IGZpcnN0RXhpc3RpbmdGaWxlUGF0aChbXG4gICAgICByZXF1ZXN0ZWRTdGF0cz8uaXNGaWxlKCkgPyByZXF1ZXN0ZWRQYXRoIDogXCJcIixcbiAgICAgIHBhdGhuYW1lLmVuZHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBgJHtyZXF1ZXN0ZWRQYXRofS5odG1sYCxcbiAgICAgIHJlcXVlc3RlZFN0YXRzPy5pc0RpcmVjdG9yeSgpID8gYCR7cmVxdWVzdGVkUGF0aH0vaW5kZXguaHRtbGAgOiBcIlwiLFxuICAgICAgYCR7cHJvY2Vzcy5jd2QoKX0vZGlzdC9pbmRleC5odG1sYFxuICAgIF0pXG5cbiAgICBpZiAoIWZpbGVQYXRoKSB7XG4gICAgICByZXNwb25zZS5zdGF0dXNDb2RlID0gNDA0XG4gICAgICByZXNwb25zZS5lbmQoXCJOb3QgRm91bmRcIilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBmaWxlQ29udGVudFxuXG4gICAgdHJ5IHtcbiAgICAgIGZpbGVDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuXG4gICAgICB0aGlzLmRlYnVnRXJyb3IoYEhUVFAgc2VydmVyIHJlYWQgZmFpbGVkOiAke2Vycm9yTWVzc2FnZX1gKVxuICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDUwMFxuICAgICAgcmVzcG9uc2UuZW5kKFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBtaW1lVHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlUGF0aClcblxuICAgIHJlc3BvbnNlLnN0YXR1c0NvZGUgPSAyMDBcblxuICAgIGlmIChtaW1lVHlwZSkge1xuICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIG1pbWVUeXBlKVxuICAgIH1cblxuICAgIHJlc3BvbnNlLmVuZChmaWxlQ29udGVudClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgdGhpcy5kZWJ1Z0xvZyhgU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgb24gJHt0aGlzLl9ob3N0fToke3RoaXMuX3BvcnR9YClcbiAgICBhd2FpdCB0aGlzLnN0YXJ0SHR0cFNlcnZlcigpXG4gICAgdGhpcy5kZWJ1Z0xvZyhgSFRUUCBzZXJ2ZXIgc3RhcnRlZCBvbiAke3RoaXMuX2hvc3R9OiR7dGhpcy5fcG9ydH1gKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBzdGFydEh0dHBTZXJ2ZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuaHR0cFNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKHRoaXMub25IdHRwU2VydmVyUmVxdWVzdClcbiAgICAgIHRoaXMuaHR0cFNlcnZlci5vbihcImNvbm5lY3Rpb25cIiwgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgdGhpcy5fY29ubmVjdGlvbnMuYWRkKGNvbm5lY3Rpb24pXG4gICAgICAgIGNvbm5lY3Rpb24ub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY29ubmVjdGlvbnMuZGVsZXRlKGNvbm5lY3Rpb24pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgdGhpcy5odHRwU2VydmVyLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuXG4gICAgICAgIHRoaXMuZGVidWdFcnJvcihgSFRUUCBzZXJ2ZXIgZXJyb3I6ICR7ZXJyb3JNZXNzYWdlfWApXG5cbiAgICAgICAgaWYgKHRoaXMuX3N0YXJ0ZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5fb25FcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fb25FcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgdGhpcy5odHRwU2VydmVyLmxpc3Rlbih0aGlzLl9wb3J0LCB0aGlzLl9ob3N0LCAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSB0cnVlXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e3RpbWVvdXRNcz86IG51bWJlcn19IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGFzc2VydFJlYWNoYWJsZSh7dGltZW91dE1zID0gNTAwMH0gPSB7fSkge1xuICAgIGNvbnN0IHVybCA9IGBodHRwOi8vJHt0aGlzLl9jb25uZWN0SG9zdH06JHt0aGlzLl9wb3J0fS9gXG4gICAgY29uc3QgbWF4QXR0ZW1wdHMgPSAzXG5cbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBtYXhBdHRlbXB0czsgYXR0ZW1wdCsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGh0dHAuZ2V0KHVybCwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAvKiogQHR5cGUge0J1ZmZlcltdfSAqL1xuICAgICAgICAgICAgY29uc3QgY2h1bmtzID0gW11cblxuICAgICAgICAgICAgcmVzcG9uc2Uub24oXCJkYXRhXCIsIChjaHVuaykgPT4gY2h1bmtzLnB1c2goY2h1bmspKVxuICAgICAgICAgICAgcmVzcG9uc2Uub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBib2R5ID0gQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKFwidXRmOFwiKVxuXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBIVFRQIHNlcnZlciBoZWFsdGggY2hlY2sgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzQ29kZX0gZm9yICR7dXJsfTogJHtib2R5LnNsaWNlKDAsIDIwMCl9YCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJlcXVlc3Qub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHJlamVjdChlcnJvcikpXG5cbiAgICAgICAgICByZXF1ZXN0LnNldFRpbWVvdXQodGltZW91dE1zLCAoKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0LmRlc3Ryb3kobmV3IEVycm9yKGBIVFRQIHNlcnZlciBoZWFsdGggY2hlY2sgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dE1zfW1zIGZvciAke3VybH1gKSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGF0dGVtcHQgPT09IG1heEF0dGVtcHRzIHx8ICF0aGlzLmlzUmV0cnlhYmxlSGVhbHRoQ2hlY2tFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt1bmtub3dufSBlcnJvclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzUmV0cnlhYmxlSGVhbHRoQ2hlY2tFcnJvcihlcnJvcikge1xuICAgIGlmIChlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgXCJjb2RlXCIgaW4gZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSBcIkVDT05OUkVTRVRcIikgcmV0dXJuIHRydWVcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSBcIkVDT05OUkVGVVNFRFwiKSByZXR1cm4gdHJ1ZVxuICAgICAgaWYgKGVycm9yLmNvZGUgPT09IFwiRVRJTUVET1VUXCIpIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuXG4gICAgcmV0dXJuIG1lc3NhZ2UuaW5jbHVkZXMoXCJzb2NrZXQgaGFuZyB1cFwiKVxuICB9XG59XG4iXX0=
@@ -1,5 +1,17 @@
1
- /** @returns {number} */
2
- export function defaultClientWebSocketConnectTimeout(): number;
1
+ /**
2
+ * Whether a system test runs against a native app rather than a web/dist browser.
3
+ * True for `SYSTEM_TEST_HOST=native` and for native Appium app sessions regardless of host.
4
+ * @param {SystemTestDriverConfig} [driver]
5
+ * @returns {boolean}
6
+ */
7
+ export function isNativeAppSession(driver?: SystemTestDriverConfig): boolean;
8
+ /**
9
+ * @param {{driver?: SystemTestDriverConfig}} [args]
10
+ * @returns {number}
11
+ */
12
+ export function defaultClientWebSocketConnectTimeout({ driver }?: {
13
+ driver?: SystemTestDriverConfig;
14
+ }): number;
3
15
  export default class SystemTest extends Browser {
4
16
  static rootPath: string;
5
17
  /**