obsidian-integration-testing 12.0.0 → 12.1.1

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.
Files changed (212) hide show
  1. package/dist/lib/cjs/adb-device-list.cjs +54 -0
  2. package/dist/lib/cjs/adb-device-list.d.cts +72 -0
  3. package/dist/lib/cjs/adb.cjs +61 -0
  4. package/dist/lib/cjs/adb.d.cts +61 -0
  5. package/dist/lib/cjs/android-sdk.cjs +52 -0
  6. package/dist/lib/cjs/android-sdk.d.cts +29 -0
  7. package/dist/lib/cjs/app-startup-progress.cjs +87 -0
  8. package/dist/lib/cjs/app-startup-progress.d.cts +128 -0
  9. package/dist/lib/cjs/appium-server-marker.cjs +29 -32
  10. package/dist/lib/cjs/appium-server-marker.d.cts +22 -0
  11. package/dist/lib/cjs/avd-probe-verdict.cjs +90 -0
  12. package/dist/lib/cjs/avd-probe-verdict.d.cts +175 -0
  13. package/dist/lib/cjs/community-plugin-registry.cjs +1 -1
  14. package/dist/lib/cjs/community-plugin-registry.d.cts +1 -1
  15. package/dist/lib/cjs/config-directory-fallback-error.cjs +57 -0
  16. package/dist/lib/cjs/config-directory-fallback-error.d.cts +64 -0
  17. package/dist/lib/cjs/config-directory.cjs +46 -0
  18. package/dist/lib/cjs/config-directory.d.cts +45 -0
  19. package/dist/lib/cjs/connect-to-cdp.cjs +13 -7
  20. package/dist/lib/cjs/connect-to-cdp.d.cts +19 -0
  21. package/dist/lib/cjs/demo-vault-bootstrap.cjs +1 -1
  22. package/dist/lib/cjs/demo-vault-bootstrap.d.cts +3 -2
  23. package/dist/lib/cjs/demo-vault-populate.cjs +3 -2
  24. package/dist/lib/cjs/device-readiness.cjs +38 -3
  25. package/dist/lib/cjs/device-readiness.d.cts +83 -9
  26. package/dist/lib/cjs/device-screenshot.cjs +42 -0
  27. package/dist/lib/cjs/device-screenshot.d.cts +36 -0
  28. package/dist/lib/cjs/device-setting-restore.cjs +45 -0
  29. package/dist/lib/cjs/device-setting-restore.d.cts +60 -0
  30. package/dist/lib/cjs/device-settings-command.cjs +49 -0
  31. package/dist/lib/cjs/device-settings-command.d.cts +76 -0
  32. package/dist/lib/cjs/device-settings.cjs +88 -0
  33. package/dist/lib/cjs/device-settings.d.cts +94 -0
  34. package/dist/lib/cjs/emulator-arguments.cjs +6 -2
  35. package/dist/lib/cjs/emulator-arguments.d.cts +26 -0
  36. package/dist/lib/cjs/emulator-backend.cjs +71 -0
  37. package/dist/lib/cjs/emulator-backend.d.cts +76 -0
  38. package/dist/lib/cjs/emulator-device-id.cjs +32 -0
  39. package/dist/lib/cjs/emulator-device-id.d.cts +49 -0
  40. package/dist/lib/cjs/emulator-liveness.cjs +72 -0
  41. package/dist/lib/cjs/emulator-liveness.d.cts +158 -0
  42. package/dist/lib/cjs/emulator-snapshot.cjs +57 -0
  43. package/dist/lib/cjs/emulator-snapshot.d.cts +68 -0
  44. package/dist/lib/cjs/global-setup-core.cjs +30 -30
  45. package/dist/lib/cjs/global-setup-core.d.cts +27 -2
  46. package/dist/lib/cjs/headless-vault-config.cjs +51 -0
  47. package/dist/lib/cjs/headless-vault-config.d.cts +67 -0
  48. package/dist/lib/cjs/index.cjs +67 -3
  49. package/dist/lib/cjs/index.d.cts +24 -1
  50. package/dist/lib/cjs/library.cjs +1 -1
  51. package/dist/lib/cjs/mobile-input.cjs +14 -2
  52. package/dist/lib/cjs/mobile-input.d.cts +5 -9
  53. package/dist/lib/cjs/namespace-bootstrap.cjs +1 -1
  54. package/dist/lib/cjs/obsidian-instance.cjs +52 -3
  55. package/dist/lib/cjs/obsidian-instance.d.cts +12 -0
  56. package/dist/lib/cjs/open-obsidian-settings-tab.cjs +1 -1
  57. package/dist/lib/cjs/open-obsidian-settings-tab.d.cts +3 -2
  58. package/dist/lib/cjs/owned-instance-exit-marker.cjs +99 -0
  59. package/dist/lib/cjs/owned-instance-exit-marker.d.cts +106 -0
  60. package/dist/lib/cjs/owned-instance-exited-error.cjs +106 -0
  61. package/dist/lib/cjs/owned-instance-exited-error.d.cts +98 -0
  62. package/dist/lib/cjs/owned-vault-seed.cjs +9 -5
  63. package/dist/lib/cjs/owned-vault-seed.d.cts +24 -3
  64. package/dist/lib/cjs/parent-liveness.cjs +42 -5
  65. package/dist/lib/cjs/parent-liveness.d.cts +37 -5
  66. package/dist/lib/cjs/port-owner.cjs +61 -0
  67. package/dist/lib/cjs/port-owner.d.cts +47 -0
  68. package/dist/lib/cjs/process-capture.cjs +62 -0
  69. package/dist/lib/cjs/process-capture.d.cts +83 -0
  70. package/dist/lib/cjs/process-exit-message.cjs +14 -8
  71. package/dist/lib/cjs/process-exit-message.d.cts +37 -3
  72. package/dist/lib/cjs/process-liveness.cjs +51 -0
  73. package/dist/lib/cjs/process-liveness.d.cts +18 -0
  74. package/dist/lib/cjs/resolve-emulator-device-id.cjs +54 -0
  75. package/dist/lib/cjs/resolve-emulator-device-id.d.cts +28 -0
  76. package/dist/lib/cjs/run-version-matrix.cjs +1 -1
  77. package/dist/lib/cjs/run-version-matrix.d.cts +1 -1
  78. package/dist/lib/cjs/soft-keyboard-geometry.cjs +75 -0
  79. package/dist/lib/cjs/soft-keyboard-geometry.d.cts +156 -0
  80. package/dist/lib/cjs/soft-keyboard.cjs +118 -0
  81. package/dist/lib/cjs/soft-keyboard.d.cts +82 -0
  82. package/dist/lib/cjs/teardown-verdict.cjs +53 -0
  83. package/dist/lib/cjs/teardown-verdict.d.cts +69 -0
  84. package/dist/lib/cjs/temporary-vault.cjs +43 -8
  85. package/dist/lib/cjs/temporary-vault.d.cts +47 -5
  86. package/dist/lib/cjs/transport-appium.cjs +102 -17
  87. package/dist/lib/cjs/transport-appium.d.cts +53 -3
  88. package/dist/lib/cjs/transport-desktop-cdp.cjs +195 -6
  89. package/dist/lib/cjs/transport-desktop-cdp.d.cts +99 -0
  90. package/dist/lib/cjs/transport-factory.cjs +951 -133
  91. package/dist/lib/cjs/transport-options.cjs +11 -3
  92. package/dist/lib/cjs/transport-options.d.cts +131 -12
  93. package/dist/lib/cjs/transport.cjs +1 -1
  94. package/dist/lib/cjs/transport.d.cts +7 -1
  95. package/dist/lib/cjs/vault-plugin-install.cjs +40 -0
  96. package/dist/lib/cjs/vault-plugin-install.d.cts +64 -0
  97. package/dist/lib/cjs/vault-teardown-verdict.cjs +42 -0
  98. package/dist/lib/cjs/vault-teardown-verdict.d.cts +57 -0
  99. package/dist/lib/cjs/version-matrix.cjs +1 -1
  100. package/dist/lib/cjs/version-matrix.d.cts +2 -2
  101. package/dist/lib/cjs/webview-cdp.cjs +6 -7
  102. package/dist/lib/cjs/webview-cdp.d.cts +5 -1
  103. package/dist/lib/esm/adb-device-list.d.mts +72 -0
  104. package/dist/lib/esm/adb-device-list.mjs +28 -0
  105. package/dist/lib/esm/adb.d.mts +61 -0
  106. package/dist/lib/esm/adb.mjs +35 -0
  107. package/dist/lib/esm/android-sdk.d.mts +29 -0
  108. package/dist/lib/esm/android-sdk.mjs +18 -0
  109. package/dist/lib/esm/app-startup-progress.d.mts +128 -0
  110. package/dist/lib/esm/app-startup-progress.mjs +59 -0
  111. package/dist/lib/esm/appium-server-marker.d.mts +22 -0
  112. package/dist/lib/esm/appium-server-marker.mjs +28 -22
  113. package/dist/lib/esm/avd-probe-verdict.d.mts +175 -0
  114. package/dist/lib/esm/avd-probe-verdict.mjs +62 -0
  115. package/dist/lib/esm/community-plugin-registry.d.mts +1 -1
  116. package/dist/lib/esm/community-plugin-registry.mjs +1 -1
  117. package/dist/lib/esm/config-directory-fallback-error.d.mts +64 -0
  118. package/dist/lib/esm/config-directory-fallback-error.mjs +33 -0
  119. package/dist/lib/esm/config-directory.d.mts +45 -0
  120. package/dist/lib/esm/config-directory.mjs +21 -0
  121. package/dist/lib/esm/connect-to-cdp.d.mts +19 -0
  122. package/dist/lib/esm/connect-to-cdp.mjs +13 -7
  123. package/dist/lib/esm/demo-vault-bootstrap.d.mts +3 -2
  124. package/dist/lib/esm/demo-vault-bootstrap.mjs +1 -1
  125. package/dist/lib/esm/demo-vault-populate.mjs +3 -2
  126. package/dist/lib/esm/device-readiness.d.mts +83 -9
  127. package/dist/lib/esm/device-readiness.mjs +34 -2
  128. package/dist/lib/esm/device-screenshot.d.mts +36 -0
  129. package/dist/lib/esm/device-screenshot.mjs +18 -0
  130. package/dist/lib/esm/device-setting-restore.d.mts +60 -0
  131. package/dist/lib/esm/device-setting-restore.mjs +20 -0
  132. package/dist/lib/esm/device-settings-command.d.mts +76 -0
  133. package/dist/lib/esm/device-settings-command.mjs +23 -0
  134. package/dist/lib/esm/device-settings.d.mts +94 -0
  135. package/dist/lib/esm/device-settings.mjs +67 -0
  136. package/dist/lib/esm/emulator-arguments.d.mts +26 -0
  137. package/dist/lib/esm/emulator-arguments.mjs +6 -2
  138. package/dist/lib/esm/emulator-backend.d.mts +76 -0
  139. package/dist/lib/esm/emulator-backend.mjs +45 -0
  140. package/dist/lib/esm/emulator-device-id.d.mts +49 -0
  141. package/dist/lib/esm/emulator-device-id.mjs +8 -0
  142. package/dist/lib/esm/emulator-liveness.d.mts +158 -0
  143. package/dist/lib/esm/emulator-liveness.mjs +47 -0
  144. package/dist/lib/esm/emulator-snapshot.d.mts +68 -0
  145. package/dist/lib/esm/emulator-snapshot.mjs +32 -0
  146. package/dist/lib/esm/global-setup-core.d.mts +27 -2
  147. package/dist/lib/esm/global-setup-core.mjs +34 -35
  148. package/dist/lib/esm/headless-vault-config.d.mts +67 -0
  149. package/dist/lib/esm/headless-vault-config.mjs +31 -0
  150. package/dist/lib/esm/index.d.mts +24 -1
  151. package/dist/lib/esm/index.mjs +68 -2
  152. package/dist/lib/esm/library.mjs +1 -1
  153. package/dist/lib/esm/mobile-input.d.mts +5 -9
  154. package/dist/lib/esm/mobile-input.mjs +14 -2
  155. package/dist/lib/esm/namespace-bootstrap.mjs +1 -1
  156. package/dist/lib/esm/obsidian-instance.d.mts +12 -0
  157. package/dist/lib/esm/obsidian-instance.mjs +55 -3
  158. package/dist/lib/esm/open-obsidian-settings-tab.d.mts +3 -2
  159. package/dist/lib/esm/open-obsidian-settings-tab.mjs +1 -1
  160. package/dist/lib/esm/owned-instance-exit-marker.d.mts +106 -0
  161. package/dist/lib/esm/owned-instance-exit-marker.mjs +78 -0
  162. package/dist/lib/esm/owned-instance-exited-error.d.mts +98 -0
  163. package/dist/lib/esm/owned-instance-exited-error.mjs +81 -0
  164. package/dist/lib/esm/owned-vault-seed.d.mts +24 -3
  165. package/dist/lib/esm/owned-vault-seed.mjs +9 -5
  166. package/dist/lib/esm/parent-liveness.d.mts +37 -5
  167. package/dist/lib/esm/parent-liveness.mjs +42 -5
  168. package/dist/lib/esm/port-owner.d.mts +47 -0
  169. package/dist/lib/esm/port-owner.mjs +36 -0
  170. package/dist/lib/esm/process-capture.d.mts +83 -0
  171. package/dist/lib/esm/process-capture.mjs +38 -0
  172. package/dist/lib/esm/process-exit-message.d.mts +37 -3
  173. package/dist/lib/esm/process-exit-message.mjs +13 -8
  174. package/dist/lib/esm/process-liveness.d.mts +18 -0
  175. package/dist/lib/esm/process-liveness.mjs +17 -0
  176. package/dist/lib/esm/resolve-emulator-device-id.d.mts +28 -0
  177. package/dist/lib/esm/resolve-emulator-device-id.mjs +33 -0
  178. package/dist/lib/esm/run-version-matrix.d.mts +1 -1
  179. package/dist/lib/esm/run-version-matrix.mjs +1 -1
  180. package/dist/lib/esm/soft-keyboard-geometry.d.mts +156 -0
  181. package/dist/lib/esm/soft-keyboard-geometry.mjs +47 -0
  182. package/dist/lib/esm/soft-keyboard.d.mts +82 -0
  183. package/dist/lib/esm/soft-keyboard.mjs +91 -0
  184. package/dist/lib/esm/teardown-verdict.d.mts +69 -0
  185. package/dist/lib/esm/teardown-verdict.mjs +28 -0
  186. package/dist/lib/esm/temporary-vault.d.mts +47 -5
  187. package/dist/lib/esm/temporary-vault.mjs +43 -8
  188. package/dist/lib/esm/transport-appium.d.mts +53 -3
  189. package/dist/lib/esm/transport-appium.mjs +108 -17
  190. package/dist/lib/esm/transport-desktop-cdp.d.mts +99 -0
  191. package/dist/lib/esm/transport-desktop-cdp.mjs +202 -7
  192. package/dist/lib/esm/transport-factory.mjs +995 -138
  193. package/dist/lib/esm/transport-options.d.mts +131 -12
  194. package/dist/lib/esm/transport-options.mjs +9 -2
  195. package/dist/lib/esm/transport.d.mts +7 -1
  196. package/dist/lib/esm/vault-plugin-install.d.mts +64 -0
  197. package/dist/lib/esm/vault-plugin-install.mjs +20 -0
  198. package/dist/lib/esm/vault-teardown-verdict.d.mts +57 -0
  199. package/dist/lib/esm/vault-teardown-verdict.mjs +18 -0
  200. package/dist/lib/esm/version-matrix.d.mts +2 -2
  201. package/dist/lib/esm/version-matrix.mjs +1 -1
  202. package/dist/lib/esm/webview-cdp.d.mts +5 -1
  203. package/dist/lib/esm/webview-cdp.mjs +6 -7
  204. package/package.json +26 -24
  205. package/dist/lib/cjs/native-dialog-monitor.cjs +0 -192
  206. package/dist/lib/cjs/native-dialog-monitor.d.cts +0 -66
  207. package/dist/lib/cjs/obsidian-namespace.cjs +0 -17
  208. package/dist/lib/cjs/obsidian-namespace.d.cts +0 -128
  209. package/dist/lib/esm/native-dialog-monitor.d.mts +0 -66
  210. package/dist/lib/esm/native-dialog-monitor.mjs +0 -158
  211. package/dist/lib/esm/obsidian-namespace.d.mts +0 -128
  212. package/dist/lib/esm/obsidian-namespace.mjs +0 -1
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,41 +15,28 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
  var appium_server_marker_exports = {};
30
20
  __export(appium_server_marker_exports, {
31
21
  checkIsHarnessOwnedAppiumServer: () => checkIsHarnessOwnedAppiumServer,
32
22
  clearAppiumServerMarker: () => clearAppiumServerMarker,
33
23
  readAppiumServerMarker: () => readAppiumServerMarker,
24
+ recordAppiumServerStopAttempt: () => recordAppiumServerStopAttempt,
34
25
  writeAppiumServerMarker: () => writeAppiumServerMarker
35
26
  });
36
27
  module.exports = __toCommonJS(appium_server_marker_exports);
37
28
  var import_node_fs = require("node:fs");
38
29
  var import_node_os = require("node:os");
39
30
  var import_node_path = require("node:path");
40
- var import_node_process = __toESM(require("node:process"), 1);
41
31
  var import_log = require("./log.cjs");
32
+ var import_process_liveness = require("./process-liveness.cjs");
42
33
  const MARKER_DIR_NAME = "obsidian-integration-testing";
43
34
  const MARKER_FILE_SUFFIX = ".appium-server.json";
44
- const PROCESS_EXISTENCE_PROBE_SIGNAL = 0;
45
35
  function checkIsHarnessOwnedAppiumServer(marker) {
46
36
  if (!marker) {
47
37
  return false;
48
38
  }
49
- try {
50
- import_node_process.default.kill(marker.pid, PROCESS_EXISTENCE_PROBE_SIGNAL);
51
- return true;
52
- } catch (error) {
53
- return getErrorCode(error) === "EPERM";
54
- }
39
+ return (0, import_process_liveness.checkIsProcessAlive)(marker.pid);
55
40
  }
56
41
  function clearAppiumServerMarker(port) {
57
42
  try {
@@ -69,21 +54,19 @@ function readAppiumServerMarker(port) {
69
54
  }
70
55
  return parseMarker(parsed, port);
71
56
  }
57
+ function recordAppiumServerStopAttempt(port) {
58
+ const marker = readAppiumServerMarker(port);
59
+ if (!marker) {
60
+ return;
61
+ }
62
+ writeMarker({ ...marker, stopAttemptedAtInMilliseconds: Date.now() });
63
+ }
72
64
  function writeAppiumServerMarker(params) {
73
- const marker = {
65
+ writeMarker({
74
66
  pid: params.pid,
75
67
  port: params.port,
76
68
  startedAtInMilliseconds: Date.now()
77
- };
78
- try {
79
- (0, import_node_fs.mkdirSync)(getMarkerDirectory(), { recursive: true });
80
- (0, import_node_fs.writeFileSync)(getMarkerFilePath(params.port), JSON.stringify(marker));
81
- } catch (error) {
82
- (0, import_log.log)(`[appium-server-marker] Could not record the server on port ${String(params.port)}: ${getErrorMessage(error)}`);
83
- }
84
- }
85
- function getErrorCode(error) {
86
- return typeof error === "object" && error !== null && "code" in error ? String(error.code) : void 0;
69
+ });
87
70
  }
88
71
  function getErrorMessage(error) {
89
72
  return error instanceof Error ? error.message : String(error);
@@ -99,17 +82,31 @@ function parseMarker(parsed, port) {
99
82
  return void 0;
100
83
  }
101
84
  const record = parsed;
102
- const { pid, port: markedPort, startedAtInMilliseconds } = record;
85
+ const { pid, port: markedPort, startedAtInMilliseconds, stopAttemptedAtInMilliseconds } = record;
103
86
  if (typeof pid !== "number" || typeof startedAtInMilliseconds !== "number" || markedPort !== port) {
104
87
  return void 0;
105
88
  }
106
- return { pid, port, startedAtInMilliseconds };
89
+ return {
90
+ pid,
91
+ port,
92
+ startedAtInMilliseconds,
93
+ ...typeof stopAttemptedAtInMilliseconds === "number" && { stopAttemptedAtInMilliseconds }
94
+ };
95
+ }
96
+ function writeMarker(marker) {
97
+ try {
98
+ (0, import_node_fs.mkdirSync)(getMarkerDirectory(), { recursive: true });
99
+ (0, import_node_fs.writeFileSync)(getMarkerFilePath(marker.port), JSON.stringify(marker));
100
+ } catch (error) {
101
+ (0, import_log.log)(`[appium-server-marker] Could not record the server on port ${String(marker.port)}: ${getErrorMessage(error)}`);
102
+ }
107
103
  }
108
104
  // Annotate the CommonJS export names for ESM import in node:
109
105
  0 && (module.exports = {
110
106
  checkIsHarnessOwnedAppiumServer,
111
107
  clearAppiumServerMarker,
112
108
  readAppiumServerMarker,
109
+ recordAppiumServerStopAttempt,
113
110
  writeAppiumServerMarker
114
111
  });
115
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FwcGl1bS1zZXJ2ZXItbWFya2VyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVjb3JkcyB3aGljaCBBcHBpdW0gc2VydmVyIG9uIGEgcG9ydCB0aGlzIGhhcm5lc3Mgc3RhcnRlZCwgc28gYSBsYXRlciBydW5cbiAqIHRoYXQgZmluZHMgYSBzZXJ2ZXIgYWxyZWFkeSBsaXN0ZW5pbmcgY2FuIHRlbGwgKipwcm92ZW5hbmNlKio6IG9uZSBvZiBvdXIgb3duXG4gKiBzZXJ2ZXJzIGxlZnQgb3ZlciBmcm9tIGFuIGVhcmxpZXIgcnVuLCBvciBhIGZvcmVpZ24gb25lIHRoZSB1c2VyIG1hbmFnZXMuXG4gKlxuICogVGhlIHByZWZsaWdodCBhZG9wdHMgYW55IHNlcnZlciB0aGF0IGFuc3dlcnMgYC9zdGF0dXNgLCBhbmQgYWRvcHRpb24gaXMgdGhlXG4gKiByaWdodCBkZWZhdWx0IFx1MjAxNCBzdGFydGluZyBhIHNlY29uZCBzZXJ2ZXIgb24gYW4gb2NjdXBpZWQgcG9ydCBjYW5ub3Qgd29yay4gQnV0XG4gKiBhZG9wdGluZyBzaWxlbnRseSBtZWFucyBhIHdlZGdlZCBsZWZ0b3ZlciAoc2VlIGB3ZWRnZWQtYXBwaXVtLXNlcnZlci50c2ApIGlzXG4gKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgaGVhbHRoeSBzZXJ2ZXIsIGFuZCB0aGUgaGFybmVzcyBoYXMgbm8gYmFzaXMgb24gd2hpY2hcbiAqIHRvIGRlY2lkZSB3aGV0aGVyIHJlc3RhcnRpbmcgaXQgaXMgaXRzIGNhbGwgdG8gbWFrZS4gVGhlIG1hcmtlciBzdXBwbGllcyB0aGF0XG4gKiBiYXNpczogYSBzZXJ2ZXIgd2Ugc3RhcnRlZCBtYXkgYmUgcmVzdGFydGVkLCBhIGZvcmVpZ24gb25lIGlzIG9ubHkgZXZlclxuICogcmVwb3J0ZWQuXG4gKlxuICogVGhlIG1hcmtlciBpcyBhIHNtYWxsIEpTT04gc2VudGluZWwgbmV4dCB0byB0aGUgc2V0dXAgbG9jayAoYHNldHVwLWxvY2sudHNgKSxcbiAqIGtleWVkIGJ5IHBvcnQsIGFuZCBpcyBkZWxpYmVyYXRlbHkgdG9sZXJhbnQgXHUyMDE0IGEgbWlzc2luZywgdW5yZWFkYWJsZSwgb3JcbiAqIG1pc21hdGNoZWQgbWFya2VyIHNpbXBseSByZWFkcyBhcyBcIm5vdCBvdXJzXCIuXG4gKi9cblxuaW1wb3J0IHtcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuXG5jb25zdCBNQVJLRVJfRElSX05BTUUgPSAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZyc7XG5jb25zdCBNQVJLRVJfRklMRV9TVUZGSVggPSAnLmFwcGl1bS1zZXJ2ZXIuanNvbic7XG5jb25zdCBQUk9DRVNTX0VYSVNURU5DRV9QUk9CRV9TSUdOQUwgPSAwO1xuXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIEFwcGl1bSBzZXJ2ZXIgdGhpcyBoYXJuZXNzIHN0YXJ0ZWQgb24gYSBwb3J0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGl1bVNlcnZlck1hcmtlciB7XG4gIC8qKlxuICBQSUQgb2YgdGhlIHNwYXduZWQgc2VydmVyIHByb2Nlc3MgKHRoZSBzaGVsbCB3cmFwcGVyIHRoYXQgb3ducyB0aGUgc2VydmVyJ3MgcHJvY2VzcyB0cmVlKS5cbiAgICovXG4gIHJlYWRvbmx5IHBpZDogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgcG9ydCB0aGUgc2VydmVyIHdhcyBzdGFydGVkIG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICBXaGVuIHRoZSBzZXJ2ZXIgd2FzIHN0YXJ0ZWQgKGBEYXRlLm5vdygpYCBlcG9jaCBtaWxsaXNlY29uZHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd3JpdGVBcHBpdW1TZXJ2ZXJNYXJrZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlQXBwaXVtU2VydmVyTWFya2VyUGFyYW1zIHtcbiAgLyoqXG4gIFBJRCBvZiB0aGUgc3Bhd25lZCBzZXJ2ZXIgcHJvY2Vzcy5cbiAgICovXG4gIHJlYWRvbmx5IHBpZDogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgcG9ydCB0aGUgc2VydmVyIHdhcyBzdGFydGVkIG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBtYXJrZWQgc2VydmVyIGlzIHN0aWxsIHJ1bm5pbmcsIHdoaWNoIGlzIHdoYXQgbWFrZXMgYW5cbiAqIGFkb3B0ZWQgc2VydmVyIG91cnMgdG8gcmVzdGFydC5cbiAqXG4gKiBBIGRlYWQgUElEIG1lYW5zIHRoZSBtYXJrZXIgb3V0bGl2ZWQgaXRzIHNlcnZlciwgc28gd2hhdGV2ZXIgYW5zd2VycyBvbiB0aGF0XG4gKiBwb3J0IG5vdyBpcyBzb21lYm9keSBlbHNlJ3MgXHUyMDE0IHRoZSBtYXJrZXIgcHJvdmVzIG5vdGhpbmcgYWJvdXQgaXQuXG4gKlxuICogQHBhcmFtIG1hcmtlciAtIFRoZSBtYXJrZXIgcmVhZCBmb3IgdGhlIHBvcnQsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlcmUgaXMgbm9uZS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIGFuIGVhcmxpZXIgcnVuIG9mIHRoaXMgaGFybmVzcyBzdGFydGVkIHRoZSBzZXJ2ZXIgbm93IGxpc3RlbmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSXNIYXJuZXNzT3duZWRBcHBpdW1TZXJ2ZXIobWFya2VyOiBBcHBpdW1TZXJ2ZXJNYXJrZXIgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKCFtYXJrZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIHByb2Nlc3Mua2lsbChtYXJrZXIucGlkLCBQUk9DRVNTX0VYSVNURU5DRV9QUk9CRV9TSUdOQUwpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIC8vIGBFUEVSTWAgbWVhbnMgdGhlIHByb2Nlc3MgZXhpc3RzIGJ1dCBpcyBvd25lZCBieSBhbm90aGVyIHVzZXIgXHUyMDE0IHN0aWxsIGFsaXZlLlxuICAgIHJldHVybiBnZXRFcnJvckNvZGUoZXJyb3IpID09PSAnRVBFUk0nO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbWFya2VyIGZvciBhIHBvcnQuIENhbGxlZCBvbmNlIHRoZSBtYXJrZWQgc2VydmVyIGhhcyBiZWVuIHN0b3BwZWQsXG4gKiBzbyBhIGxhdGVyIHJ1biBkb2VzIG5vdCBtaXN0YWtlIGEgcmVjeWNsZWQgUElEIGZvciBvdXIgc2VydmVyLlxuICpcbiAqIEBwYXJhbSBwb3J0IC0gVGhlIEFwcGl1bSBzZXJ2ZXIgcG9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQXBwaXVtU2VydmVyTWFya2VyKHBvcnQ6IG51bWJlcik6IHZvaWQge1xuICB0cnkge1xuICAgIHJtU3luYyhnZXRNYXJrZXJGaWxlUGF0aChwb3J0KSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2coYFthcHBpdW0tc2VydmVyLW1hcmtlcl0gQ291bGQgbm90IHJlbW92ZSB0aGUgbWFya2VyIGZvciBwb3J0ICR7U3RyaW5nKHBvcnQpfTogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICB9XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIG1hcmtlciBmb3IgYSBwb3J0LlxuICpcbiAqIEBwYXJhbSBwb3J0IC0gVGhlIEFwcGl1bSBzZXJ2ZXIgcG9ydC5cbiAqIEByZXR1cm5zIFRoZSBtYXJrZXIsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlcmUgaXMgbm9uZSwgaXQgaXMgdW5yZWFkYWJsZSwgb3IgaXQgZG9lcyBub3QgZGVzY3JpYmUgdGhpcyBwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZEFwcGl1bVNlcnZlck1hcmtlcihwb3J0OiBudW1iZXIpOiBBcHBpdW1TZXJ2ZXJNYXJrZXIgfCB1bmRlZmluZWQge1xuICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKGdldE1hcmtlckZpbGVQYXRoKHBvcnQpLCAndXRmLTgnKSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gcGFyc2VNYXJrZXIocGFyc2VkLCBwb3J0KTtcbn1cblxuLyoqXG4gKiBSZWNvcmRzIHRoZSBzZXJ2ZXIgdGhpcyBydW4ganVzdCBzdGFydGVkLCBzdGFtcGluZyBpdCB3aXRoIHRoZSBjdXJyZW50IHRpbWUgc29cbiAqIGEgbGF0ZXIgcnVuIGNhbiByZXBvcnQgaG93IGxvbmcgaXQgaGFzIGJlZW4gdXAuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzdGFydGVkIHNlcnZlcidzIFBJRCBhbmQgcG9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlQXBwaXVtU2VydmVyTWFya2VyKHBhcmFtczogV3JpdGVBcHBpdW1TZXJ2ZXJNYXJrZXJQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgbWFya2VyOiBBcHBpdW1TZXJ2ZXJNYXJrZXIgPSB7XG4gICAgcGlkOiBwYXJhbXMucGlkLFxuICAgIHBvcnQ6IHBhcmFtcy5wb3J0LFxuICAgIHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzOiBEYXRlLm5vdygpXG4gIH07XG5cbiAgdHJ5IHtcbiAgICBta2RpclN5bmMoZ2V0TWFya2VyRGlyZWN0b3J5KCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHdyaXRlRmlsZVN5bmMoZ2V0TWFya2VyRmlsZVBhdGgocGFyYW1zLnBvcnQpLCBKU09OLnN0cmluZ2lmeShtYXJrZXIpKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2coYFthcHBpdW0tc2VydmVyLW1hcmtlcl0gQ291bGQgbm90IHJlY29yZCB0aGUgc2VydmVyIG9uIHBvcnQgJHtTdHJpbmcocGFyYW1zLnBvcnQpfTogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEVycm9yQ29kZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmIGVycm9yICE9PSBudWxsICYmICdjb2RlJyBpbiBlcnJvciA/IFN0cmluZyhlcnJvci5jb2RlKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFya2VyRGlyZWN0b3J5KCk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKHRtcGRpcigpLCBNQVJLRVJfRElSX05BTUUpO1xufVxuXG5mdW5jdGlvbiBnZXRNYXJrZXJGaWxlUGF0aChwb3J0OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihnZXRNYXJrZXJEaXJlY3RvcnkoKSwgYCR7U3RyaW5nKHBvcnQpfSR7TUFSS0VSX0ZJTEVfU1VGRklYfWApO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1hcmtlcihwYXJzZWQ6IHVua25vd24sIHBvcnQ6IG51bWJlcik6IEFwcGl1bVNlcnZlck1hcmtlciB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBwYXJzZWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcmVjb3JkID0gcGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCB7IHBpZCwgcG9ydDogbWFya2VkUG9ydCwgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMgfSA9IHJlY29yZDtcblxuICBpZiAodHlwZW9mIHBpZCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzICE9PSAnbnVtYmVyJyB8fCBtYXJrZWRQb3J0ICE9PSBwb3J0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7IHBpZCwgcG9ydCwgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBb0JBLHFCQUtPO0FBQ1AscUJBQXVCO0FBQ3ZCLHVCQUFxQjtBQUNyQiwwQkFBb0I7QUFFcEIsaUJBQW9CO0FBRXBCLE1BQU0sa0JBQWtCO0FBQ3hCLE1BQU0scUJBQXFCO0FBQzNCLE1BQU0saUNBQWlDO0FBK0NoQyxTQUFTLGdDQUFnQyxRQUFpRDtBQUMvRixNQUFJLENBQUMsUUFBUTtBQUNYLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSTtBQUNGLHdCQUFBQSxRQUFRLEtBQUssT0FBTyxLQUFLLDhCQUE4QjtBQUN2RCxXQUFPO0FBQUEsRUFDVCxTQUFTLE9BQWdCO0FBRXZCLFdBQU8sYUFBYSxLQUFLLE1BQU07QUFBQSxFQUNqQztBQUNGO0FBUU8sU0FBUyx3QkFBd0IsTUFBb0I7QUFDMUQsTUFBSTtBQUNGLCtCQUFPLGtCQUFrQixJQUFJLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ2pELFNBQVMsT0FBZ0I7QUFDdkIsd0JBQUksK0RBQStELE9BQU8sSUFBSSxDQUFDLEtBQUssZ0JBQWdCLEtBQUssQ0FBQyxFQUFFO0FBQUEsRUFDOUc7QUFDRjtBQVFPLFNBQVMsdUJBQXVCLE1BQThDO0FBQ25GLE1BQUk7QUFDSixNQUFJO0FBQ0YsYUFBUyxLQUFLLFVBQU0sNkJBQWEsa0JBQWtCLElBQUksR0FBRyxPQUFPLENBQUM7QUFBQSxFQUNwRSxRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLFlBQVksUUFBUSxJQUFJO0FBQ2pDO0FBUU8sU0FBUyx3QkFBd0IsUUFBNkM7QUFDbkYsUUFBTSxTQUE2QjtBQUFBLElBQ2pDLEtBQUssT0FBTztBQUFBLElBQ1osTUFBTSxPQUFPO0FBQUEsSUFDYix5QkFBeUIsS0FBSyxJQUFJO0FBQUEsRUFDcEM7QUFFQSxNQUFJO0FBQ0Ysa0NBQVUsbUJBQW1CLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNuRCxzQ0FBYyxrQkFBa0IsT0FBTyxJQUFJLEdBQUcsS0FBSyxVQUFVLE1BQU0sQ0FBQztBQUFBLEVBQ3RFLFNBQVMsT0FBZ0I7QUFDdkIsd0JBQUksOERBQThELE9BQU8sT0FBTyxJQUFJLENBQUMsS0FBSyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUU7QUFBQSxFQUNwSDtBQUNGO0FBRUEsU0FBUyxhQUFhLE9BQW9DO0FBQ3hELFNBQU8sT0FBTyxVQUFVLFlBQVksVUFBVSxRQUFRLFVBQVUsUUFBUSxPQUFPLE1BQU0sSUFBSSxJQUFJO0FBQy9GO0FBRUEsU0FBUyxnQkFBZ0IsT0FBd0I7QUFDL0MsU0FBTyxpQkFBaUIsUUFBUSxNQUFNLFVBQVUsT0FBTyxLQUFLO0FBQzlEO0FBRUEsU0FBUyxxQkFBNkI7QUFDcEMsYUFBTywyQkFBSyx1QkFBTyxHQUFHLGVBQWU7QUFDdkM7QUFFQSxTQUFTLGtCQUFrQixNQUFzQjtBQUMvQyxhQUFPLHVCQUFLLG1CQUFtQixHQUFHLEdBQUcsT0FBTyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsRUFBRTtBQUMxRTtBQUVBLFNBQVMsWUFBWSxRQUFpQixNQUE4QztBQUNsRixNQUFJLE9BQU8sV0FBVyxZQUFZLFdBQVcsTUFBTTtBQUNqRCxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sU0FBUztBQUNmLFFBQU0sRUFBRSxLQUFLLE1BQU0sWUFBWSx3QkFBd0IsSUFBSTtBQUUzRCxNQUFJLE9BQU8sUUFBUSxZQUFZLE9BQU8sNEJBQTRCLFlBQVksZUFBZSxNQUFNO0FBQ2pHLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxFQUFFLEtBQUssTUFBTSx3QkFBd0I7QUFDOUM7IiwKICAibmFtZXMiOiBbInByb2Nlc3MiXQp9Cg==
112
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FwcGl1bS1zZXJ2ZXItbWFya2VyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVjb3JkcyB3aGljaCBBcHBpdW0gc2VydmVyIG9uIGEgcG9ydCB0aGlzIGhhcm5lc3Mgc3RhcnRlZCwgc28gYSBsYXRlciBydW5cbiAqIHRoYXQgZmluZHMgYSBzZXJ2ZXIgYWxyZWFkeSBsaXN0ZW5pbmcgY2FuIHRlbGwgKipwcm92ZW5hbmNlKio6IG9uZSBvZiBvdXIgb3duXG4gKiBzZXJ2ZXJzIGxlZnQgb3ZlciBmcm9tIGFuIGVhcmxpZXIgcnVuLCBvciBhIGZvcmVpZ24gb25lIHRoZSB1c2VyIG1hbmFnZXMuXG4gKlxuICogVGhlIHByZWZsaWdodCBhZG9wdHMgYW55IHNlcnZlciB0aGF0IGFuc3dlcnMgYC9zdGF0dXNgLCBhbmQgYWRvcHRpb24gaXMgdGhlXG4gKiByaWdodCBkZWZhdWx0IFx1MjAxNCBzdGFydGluZyBhIHNlY29uZCBzZXJ2ZXIgb24gYW4gb2NjdXBpZWQgcG9ydCBjYW5ub3Qgd29yay4gQnV0XG4gKiBhZG9wdGluZyBzaWxlbnRseSBtZWFucyBhIHdlZGdlZCBsZWZ0b3ZlciAoc2VlIGB3ZWRnZWQtYXBwaXVtLXNlcnZlci50c2ApIGlzXG4gKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgaGVhbHRoeSBzZXJ2ZXIsIGFuZCB0aGUgaGFybmVzcyBoYXMgbm8gYmFzaXMgb24gd2hpY2hcbiAqIHRvIGRlY2lkZSB3aGV0aGVyIHJlc3RhcnRpbmcgaXQgaXMgaXRzIGNhbGwgdG8gbWFrZS4gVGhlIG1hcmtlciBzdXBwbGllcyB0aGF0XG4gKiBiYXNpczogYSBzZXJ2ZXIgd2Ugc3RhcnRlZCBtYXkgYmUgcmVzdGFydGVkLCBhIGZvcmVpZ24gb25lIGlzIG9ubHkgZXZlclxuICogcmVwb3J0ZWQuXG4gKlxuICogVGhlIG1hcmtlciBpcyBhIHNtYWxsIEpTT04gc2VudGluZWwgbmV4dCB0byB0aGUgc2V0dXAgbG9jayAoYHNldHVwLWxvY2sudHNgKSxcbiAqIGtleWVkIGJ5IHBvcnQsIGFuZCBpcyBkZWxpYmVyYXRlbHkgdG9sZXJhbnQgXHUyMDE0IGEgbWlzc2luZywgdW5yZWFkYWJsZSwgb3JcbiAqIG1pc21hdGNoZWQgbWFya2VyIHNpbXBseSByZWFkcyBhcyBcIm5vdCBvdXJzXCIuXG4gKi9cblxuaW1wb3J0IHtcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLmNqcyc7XG5pbXBvcnQgeyBjaGVja0lzUHJvY2Vzc0FsaXZlIH0gZnJvbSAnLi9wcm9jZXNzLWxpdmVuZXNzLmNqcyc7XG5cbmNvbnN0IE1BUktFUl9ESVJfTkFNRSA9ICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJztcbmNvbnN0IE1BUktFUl9GSUxFX1NVRkZJWCA9ICcuYXBwaXVtLXNlcnZlci5qc29uJztcblxuLyoqXG4gKiBJZGVudGlmaWVzIHRoZSBBcHBpdW0gc2VydmVyIHRoaXMgaGFybmVzcyBzdGFydGVkIG9uIGEgcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBpdW1TZXJ2ZXJNYXJrZXIge1xuICAvKipcbiAgUElEIG9mIHRoZSBzcGF3bmVkIHNlcnZlciBwcm9jZXNzICh0aGUgc2hlbGwgd3JhcHBlciB0aGF0IG93bnMgdGhlIHNlcnZlcidzIHByb2Nlc3MgdHJlZSkuXG4gICAqL1xuICByZWFkb25seSBwaWQ6IG51bWJlcjtcblxuICAvKipcbiAgVGhlIHBvcnQgdGhlIHNlcnZlciB3YXMgc3RhcnRlZCBvbi5cbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgV2hlbiB0aGUgc2VydmVyIHdhcyBzdGFydGVkIChgRGF0ZS5ub3coKWAgZXBvY2ggbWlsbGlzZWNvbmRzKS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZW4gYSBydW4gdHJpZWQgdG8gc3RvcCB0aGlzIHNlcnZlciBhbmQgY291bGQgbm90IHZlcmlmeSBpdCBleGl0ZWRcbiAgICogKGBEYXRlLm5vdygpYCBlcG9jaCBtaWxsaXNlY29uZHMpLCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vIHN0b3AgaGFzIGZhaWxlZC5cbiAgICpcbiAgICogSXRzIHByZXNlbmNlIG1lYW5zIHRoZSBzZXJ2ZXIgaXMgYSAqKmtub3duLWRvb21lZCBsZWZ0b3ZlcioqOiBpdCB3YXMgb3VycyxcbiAgICogd2UgYXNrZWQgaXQgdG8gZGllLCBhbmQgaXQgZGlkIG5vdC4gU2VlIHtAbGluayByZWNvcmRBcHBpdW1TZXJ2ZXJTdG9wQXR0ZW1wdH0uXG4gICAqL1xuICByZWFkb25seSBzdG9wQXR0ZW1wdGVkQXRJbk1pbGxpc2Vjb25kcz86IG51bWJlciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd3JpdGVBcHBpdW1TZXJ2ZXJNYXJrZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlQXBwaXVtU2VydmVyTWFya2VyUGFyYW1zIHtcbiAgLyoqXG4gIFBJRCBvZiB0aGUgc3Bhd25lZCBzZXJ2ZXIgcHJvY2Vzcy5cbiAgICovXG4gIHJlYWRvbmx5IHBpZDogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgcG9ydCB0aGUgc2VydmVyIHdhcyBzdGFydGVkIG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBtYXJrZWQgc2VydmVyIGlzIHN0aWxsIHJ1bm5pbmcsIHdoaWNoIGlzIHdoYXQgbWFrZXMgYW5cbiAqIGFkb3B0ZWQgc2VydmVyIG91cnMgdG8gcmVzdGFydC5cbiAqXG4gKiBBIGRlYWQgUElEIG1lYW5zIHRoZSBtYXJrZXIgb3V0bGl2ZWQgaXRzIHNlcnZlciwgc28gd2hhdGV2ZXIgYW5zd2VycyBvbiB0aGF0XG4gKiBwb3J0IG5vdyBpcyBzb21lYm9keSBlbHNlJ3MgXHUyMDE0IHRoZSBtYXJrZXIgcHJvdmVzIG5vdGhpbmcgYWJvdXQgaXQuXG4gKlxuICogQHBhcmFtIG1hcmtlciAtIFRoZSBtYXJrZXIgcmVhZCBmb3IgdGhlIHBvcnQsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlcmUgaXMgbm9uZS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIGFuIGVhcmxpZXIgcnVuIG9mIHRoaXMgaGFybmVzcyBzdGFydGVkIHRoZSBzZXJ2ZXIgbm93IGxpc3RlbmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSXNIYXJuZXNzT3duZWRBcHBpdW1TZXJ2ZXIobWFya2VyOiBBcHBpdW1TZXJ2ZXJNYXJrZXIgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKCFtYXJrZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gY2hlY2tJc1Byb2Nlc3NBbGl2ZShtYXJrZXIucGlkKTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBtYXJrZXIgZm9yIGEgcG9ydC4gQ2FsbGVkIG9uY2UgdGhlIG1hcmtlZCBzZXJ2ZXIgaGFzIGJlZW4gc3RvcHBlZCxcbiAqIHNvIGEgbGF0ZXIgcnVuIGRvZXMgbm90IG1pc3Rha2UgYSByZWN5Y2xlZCBQSUQgZm9yIG91ciBzZXJ2ZXIuXG4gKlxuICogQHBhcmFtIHBvcnQgLSBUaGUgQXBwaXVtIHNlcnZlciBwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJBcHBpdW1TZXJ2ZXJNYXJrZXIocG9ydDogbnVtYmVyKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgcm1TeW5jKGdldE1hcmtlckZpbGVQYXRoKHBvcnQpLCB7IGZvcmNlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZyhgW2FwcGl1bS1zZXJ2ZXItbWFya2VyXSBDb3VsZCBub3QgcmVtb3ZlIHRoZSBtYXJrZXIgZm9yIHBvcnQgJHtTdHJpbmcocG9ydCl9OiAke2dldEVycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgbWFya2VyIGZvciBhIHBvcnQuXG4gKlxuICogQHBhcmFtIHBvcnQgLSBUaGUgQXBwaXVtIHNlcnZlciBwb3J0LlxuICogQHJldHVybnMgVGhlIG1hcmtlciwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGVyZSBpcyBub25lLCBpdCBpcyB1bnJlYWRhYmxlLCBvciBpdCBkb2VzIG5vdCBkZXNjcmliZSB0aGlzIHBvcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkQXBwaXVtU2VydmVyTWFya2VyKHBvcnQ6IG51bWJlcik6IEFwcGl1bVNlcnZlck1hcmtlciB8IHVuZGVmaW5lZCB7XG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZ2V0TWFya2VyRmlsZVBhdGgocG9ydCksICd1dGYtOCcpKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1hcmtlcihwYXJzZWQsIHBvcnQpO1xufVxuXG4vKipcbiAqIFJlY29yZHMgdGhhdCBhIHJ1biB0cmllZCB0byBzdG9wIHRoZSBtYXJrZWQgc2VydmVyIGFuZCBjb3VsZCBub3QgdmVyaWZ5IGl0XG4gKiBleGl0ZWQgXHUyMDE0ICoqaW5zdGVhZCBvZioqIGNsZWFyaW5nIHRoZSBtYXJrZXIuXG4gKlxuICogQ2xlYXJpbmcgaXQgd291bGQgYmUgdGhlIHdvcnN0IG9mIGJvdGggd29ybGRzOiB0aGUgbGVmdG92ZXIga2VlcHMgc2VydmluZywgYW5kXG4gKiB0aGUgbmV4dCBydW4gcmVhZHMgaXQgYXMgYSBmb3JlaWduLCB1c2VyLW1hbmFnZWQgc2VydmVyIGl0IG11c3QgbmV2ZXIgdG91Y2hcbiAqIChgY2hlY2tJc0hhcm5lc3NPd25lZEFwcGl1bVNlcnZlcmAgbmVlZHMgdGhlIG1hcmtlciB0byBjb252aWN0IGl0KS4gS2VlcGluZ1xuICogdGhlIG1hcmtlciwgc3RhbXBlZCwgc2F5cyBleGFjdGx5IHdoYXQgaXMgdHJ1ZSBcdTIwMTQgdGhpcyBpcyBvdXJzLCBhbmQgaXQgb3V0bGl2ZWRcbiAqIG91ciB0ZWFyZG93biBcdTIwMTQgd2hpY2ggaXMgd2hhdCBsZXRzIHRoZSBuZXh0IHJ1biByZWZ1c2UgdG8gYWRvcHQgaXQgYW5kIHJlcGxhY2VcbiAqIGl0IGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHBvcnQgLSBUaGUgQXBwaXVtIHNlcnZlciBwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkQXBwaXVtU2VydmVyU3RvcEF0dGVtcHQocG9ydDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IG1hcmtlciA9IHJlYWRBcHBpdW1TZXJ2ZXJNYXJrZXIocG9ydCk7XG4gIGlmICghbWFya2VyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd3JpdGVNYXJrZXIoeyAuLi5tYXJrZXIsIHN0b3BBdHRlbXB0ZWRBdEluTWlsbGlzZWNvbmRzOiBEYXRlLm5vdygpIH0pO1xufVxuXG4vKipcbiAqIFJlY29yZHMgdGhlIHNlcnZlciB0aGlzIHJ1biBqdXN0IHN0YXJ0ZWQsIHN0YW1waW5nIGl0IHdpdGggdGhlIGN1cnJlbnQgdGltZSBzb1xuICogYSBsYXRlciBydW4gY2FuIHJlcG9ydCBob3cgbG9uZyBpdCBoYXMgYmVlbiB1cC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHN0YXJ0ZWQgc2VydmVyJ3MgUElEIGFuZCBwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVBcHBpdW1TZXJ2ZXJNYXJrZXIocGFyYW1zOiBXcml0ZUFwcGl1bVNlcnZlck1hcmtlclBhcmFtcyk6IHZvaWQge1xuICB3cml0ZU1hcmtlcih7XG4gICAgcGlkOiBwYXJhbXMucGlkLFxuICAgIHBvcnQ6IHBhcmFtcy5wb3J0LFxuICAgIHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzOiBEYXRlLm5vdygpXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xufVxuXG5mdW5jdGlvbiBnZXRNYXJrZXJEaXJlY3RvcnkoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4odG1wZGlyKCksIE1BUktFUl9ESVJfTkFNRSk7XG59XG5cbmZ1bmN0aW9uIGdldE1hcmtlckZpbGVQYXRoKHBvcnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGdldE1hcmtlckRpcmVjdG9yeSgpLCBgJHtTdHJpbmcocG9ydCl9JHtNQVJLRVJfRklMRV9TVUZGSVh9YCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWFya2VyKHBhcnNlZDogdW5rbm93biwgcG9ydDogbnVtYmVyKTogQXBwaXVtU2VydmVyTWFya2VyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IHBhcnNlZCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCByZWNvcmQgPSBwYXJzZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHsgcGlkLCBwb3J0OiBtYXJrZWRQb3J0LCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcywgc3RvcEF0dGVtcHRlZEF0SW5NaWxsaXNlY29uZHMgfSA9IHJlY29yZDtcblxuICBpZiAodHlwZW9mIHBpZCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzICE9PSAnbnVtYmVyJyB8fCBtYXJrZWRQb3J0ICE9PSBwb3J0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGlkLFxuICAgIHBvcnQsXG4gICAgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMsXG4gICAgLi4uKHR5cGVvZiBzdG9wQXR0ZW1wdGVkQXRJbk1pbGxpc2Vjb25kcyA9PT0gJ251bWJlcicgJiYgeyBzdG9wQXR0ZW1wdGVkQXRJbk1pbGxpc2Vjb25kcyB9KVxuICB9O1xufVxuXG5mdW5jdGlvbiB3cml0ZU1hcmtlcihtYXJrZXI6IEFwcGl1bVNlcnZlck1hcmtlcik6IHZvaWQge1xuICB0cnkge1xuICAgIG1rZGlyU3luYyhnZXRNYXJrZXJEaXJlY3RvcnkoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgd3JpdGVGaWxlU3luYyhnZXRNYXJrZXJGaWxlUGF0aChtYXJrZXIucG9ydCksIEpTT04uc3RyaW5naWZ5KG1hcmtlcikpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZyhgW2FwcGl1bS1zZXJ2ZXItbWFya2VyXSBDb3VsZCBub3QgcmVjb3JkIHRoZSBzZXJ2ZXIgb24gcG9ydCAke1N0cmluZyhtYXJrZXIucG9ydCl9OiAke2dldEVycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9CQSxxQkFLTztBQUNQLHFCQUF1QjtBQUN2Qix1QkFBcUI7QUFFckIsaUJBQW9CO0FBQ3BCLDhCQUFvQztBQUVwQyxNQUFNLGtCQUFrQjtBQUN4QixNQUFNLHFCQUFxQjtBQXdEcEIsU0FBUyxnQ0FBZ0MsUUFBaUQ7QUFDL0YsTUFBSSxDQUFDLFFBQVE7QUFDWCxXQUFPO0FBQUEsRUFDVDtBQUVBLGFBQU8sNkNBQW9CLE9BQU8sR0FBRztBQUN2QztBQVFPLFNBQVMsd0JBQXdCLE1BQW9CO0FBQzFELE1BQUk7QUFDRiwrQkFBTyxrQkFBa0IsSUFBSSxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNqRCxTQUFTLE9BQWdCO0FBQ3ZCLHdCQUFJLCtEQUErRCxPQUFPLElBQUksQ0FBQyxLQUFLLGdCQUFnQixLQUFLLENBQUMsRUFBRTtBQUFBLEVBQzlHO0FBQ0Y7QUFRTyxTQUFTLHVCQUF1QixNQUE4QztBQUNuRixNQUFJO0FBQ0osTUFBSTtBQUNGLGFBQVMsS0FBSyxVQUFNLDZCQUFhLGtCQUFrQixJQUFJLEdBQUcsT0FBTyxDQUFDO0FBQUEsRUFDcEUsUUFBUTtBQUNOLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxZQUFZLFFBQVEsSUFBSTtBQUNqQztBQWVPLFNBQVMsOEJBQThCLE1BQW9CO0FBQ2hFLFFBQU0sU0FBUyx1QkFBdUIsSUFBSTtBQUMxQyxNQUFJLENBQUMsUUFBUTtBQUNYO0FBQUEsRUFDRjtBQUVBLGNBQVksRUFBRSxHQUFHLFFBQVEsK0JBQStCLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDdEU7QUFRTyxTQUFTLHdCQUF3QixRQUE2QztBQUNuRixjQUFZO0FBQUEsSUFDVixLQUFLLE9BQU87QUFBQSxJQUNaLE1BQU0sT0FBTztBQUFBLElBQ2IseUJBQXlCLEtBQUssSUFBSTtBQUFBLEVBQ3BDLENBQUM7QUFDSDtBQUVBLFNBQVMsZ0JBQWdCLE9BQXdCO0FBQy9DLFNBQU8saUJBQWlCLFFBQVEsTUFBTSxVQUFVLE9BQU8sS0FBSztBQUM5RDtBQUVBLFNBQVMscUJBQTZCO0FBQ3BDLGFBQU8sMkJBQUssdUJBQU8sR0FBRyxlQUFlO0FBQ3ZDO0FBRUEsU0FBUyxrQkFBa0IsTUFBc0I7QUFDL0MsYUFBTyx1QkFBSyxtQkFBbUIsR0FBRyxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUcsa0JBQWtCLEVBQUU7QUFDMUU7QUFFQSxTQUFTLFlBQVksUUFBaUIsTUFBOEM7QUFDbEYsTUFBSSxPQUFPLFdBQVcsWUFBWSxXQUFXLE1BQU07QUFDakQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFNBQVM7QUFDZixRQUFNLEVBQUUsS0FBSyxNQUFNLFlBQVkseUJBQXlCLDhCQUE4QixJQUFJO0FBRTFGLE1BQUksT0FBTyxRQUFRLFlBQVksT0FBTyw0QkFBNEIsWUFBWSxlQUFlLE1BQU07QUFDakcsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPO0FBQUEsSUFDTDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxHQUFJLE9BQU8sa0NBQWtDLFlBQVksRUFBRSw4QkFBOEI7QUFBQSxFQUMzRjtBQUNGO0FBRUEsU0FBUyxZQUFZLFFBQWtDO0FBQ3JELE1BQUk7QUFDRixrQ0FBVSxtQkFBbUIsR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ25ELHNDQUFjLGtCQUFrQixPQUFPLElBQUksR0FBRyxLQUFLLFVBQVUsTUFBTSxDQUFDO0FBQUEsRUFDdEUsU0FBUyxPQUFnQjtBQUN2Qix3QkFBSSw4REFBOEQsT0FBTyxPQUFPLElBQUksQ0FBQyxLQUFLLGdCQUFnQixLQUFLLENBQUMsRUFBRTtBQUFBLEVBQ3BIO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -33,6 +33,14 @@ export interface AppiumServerMarker {
33
33
  When the server was started (`Date.now()` epoch milliseconds).
34
34
  */
35
35
  readonly startedAtInMilliseconds: number;
36
+ /**
37
+ * When a run tried to stop this server and could not verify it exited
38
+ * (`Date.now()` epoch milliseconds), or `undefined` when no stop has failed.
39
+ *
40
+ * Its presence means the server is a **known-doomed leftover**: it was ours,
41
+ * we asked it to die, and it did not. See {@link recordAppiumServerStopAttempt}.
42
+ */
43
+ readonly stopAttemptedAtInMilliseconds?: number | undefined;
36
44
  }
37
45
  /**
38
46
  * Parameters for {@link writeAppiumServerMarker}.
@@ -72,6 +80,20 @@ export declare function clearAppiumServerMarker(port: number): void;
72
80
  * @returns The marker, or `undefined` when there is none, it is unreadable, or it does not describe this port.
73
81
  */
74
82
  export declare function readAppiumServerMarker(port: number): AppiumServerMarker | undefined;
83
+ /**
84
+ * Records that a run tried to stop the marked server and could not verify it
85
+ * exited — **instead of** clearing the marker.
86
+ *
87
+ * Clearing it would be the worst of both worlds: the leftover keeps serving, and
88
+ * the next run reads it as a foreign, user-managed server it must never touch
89
+ * (`checkIsHarnessOwnedAppiumServer` needs the marker to convict it). Keeping
90
+ * the marker, stamped, says exactly what is true — this is ours, and it outlived
91
+ * our teardown — which is what lets the next run refuse to adopt it and replace
92
+ * it instead.
93
+ *
94
+ * @param port - The Appium server port.
95
+ */
96
+ export declare function recordAppiumServerStopAttempt(port: number): void;
75
97
  /**
76
98
  * Records the server this run just started, stamping it with the current time so
77
99
  * a later run can report how long it has been up.
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var avd_probe_verdict_exports = {};
20
+ __export(avd_probe_verdict_exports, {
21
+ buildAvdProbeSummary: () => buildAvdProbeSummary,
22
+ buildUnreadableDevicesMessage: () => buildUnreadableDevicesMessage,
23
+ checkIsEmulatorDeviceId: () => checkIsEmulatorDeviceId,
24
+ classifyAvdProbe: () => classifyAvdProbe,
25
+ resolveAvdProbeVerdict: () => resolveAvdProbeVerdict
26
+ });
27
+ module.exports = __toCommonJS(avd_probe_verdict_exports);
28
+ var import_type_guards = require("./type-guards.cjs");
29
+ const EMULATOR_DEVICE_ID_PATTERN = /^emulator-\d+$/;
30
+ function buildAvdProbeSummary(results) {
31
+ if (results.length === 0) {
32
+ return "no devices";
33
+ }
34
+ return results.map((result) => `${result.deviceId}=${result.outcome}`).join(", ");
35
+ }
36
+ function buildUnreadableDevicesMessage(params) {
37
+ const deviceList = params.unreadableDeviceIds.join(", ");
38
+ const isSingle = params.unreadableDeviceIds.length === 1;
39
+ const subject = isSingle ? `device ${deviceList}` : `devices ${deviceList}`;
40
+ const command = isSingle ? `adb -s ${deviceList} emu avd name` : "adb -s <device> emu avd name";
41
+ const holder = isSingle ? "it is" : "one of them is";
42
+ const remedy = isSingle ? "Kill the unresponsive device" : "Kill the unresponsive devices";
43
+ return `AVD "${params.avdName}": ${subject} did not answer \`${command}\` within ${String(params.probeTimeoutInMilliseconds)}ms (retried once), so this run cannot tell whether ${holder} already serving that AVD. Starting an emulator anyway would collide (\`FATAL | Running multiple emulators with the same AVD is an experimental feature\`), which the emulator reports only to its own stdout. ${remedy}, or run \`adb kill-server\`, then retry.`;
44
+ }
45
+ function checkIsEmulatorDeviceId(deviceId) {
46
+ return EMULATOR_DEVICE_ID_PATTERN.test(deviceId);
47
+ }
48
+ function classifyAvdProbe(params) {
49
+ if (!checkIsEmulatorDeviceId(params.deviceId)) {
50
+ return "not-an-emulator";
51
+ }
52
+ if (params.probedAvdName === void 0 || params.probedAvdName.length === 0) {
53
+ return "no-answer";
54
+ }
55
+ return params.probedAvdName === params.avdName ? "match" : "other-avd";
56
+ }
57
+ function resolveAvdProbeVerdict(results) {
58
+ const unreadableDeviceIds = [];
59
+ for (const result of results) {
60
+ switch (result.outcome) {
61
+ case "match": {
62
+ return { deviceId: result.deviceId, verdict: "reuse" };
63
+ }
64
+ case "no-answer": {
65
+ unreadableDeviceIds.push(result.deviceId);
66
+ break;
67
+ }
68
+ case "not-an-emulator":
69
+ case "other-avd": {
70
+ break;
71
+ }
72
+ default: {
73
+ return (0, import_type_guards.assertNever)(result.outcome);
74
+ }
75
+ }
76
+ }
77
+ if (unreadableDeviceIds.length > 0) {
78
+ return { unreadableDeviceIds, verdict: "refuse" };
79
+ }
80
+ return { verdict: "start-new" };
81
+ }
82
+ // Annotate the CommonJS export names for ESM import in node:
83
+ 0 && (module.exports = {
84
+ buildAvdProbeSummary,
85
+ buildUnreadableDevicesMessage,
86
+ checkIsEmulatorDeviceId,
87
+ classifyAvdProbe,
88
+ resolveAvdProbeVerdict
89
+ });
90
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2F2ZC1wcm9iZS12ZXJkaWN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSBjbGFzc2lmaWNhdGlvbiBvZiB0aGUgQVZEIGFkb3B0aW9uIHByb2JlIFx1MjAxNCBkZWNpZGluZywgZnJvbSB3aGF0IGVhY2hcbiAqIGNvbm5lY3RlZCBkZXZpY2UgYW5zd2VyZWQsIHdoZXRoZXIgdGhpcyBydW4gbWF5IHJldXNlIG9uZSwgbXVzdCBzdGFydCBpdHNcbiAqIG93biBlbXVsYXRvciwgb3IgY2Fubm90IHNhZmVseSBkbyBlaXRoZXIuXG4gKlxuICogVGhlIHByb2JlIChgYWRiIC1zIDxkZXZpY2U+IGVtdSBhdmQgbmFtZWApIHVzZWQgdG8gZGlzY2FyZCBpdHMgZXJyb3IgYW5kXG4gKiByZXNvbHZlIGAnJ2AsIHNvIGEgY2FsbCB0aGF0ICoqbmV2ZXIgYW5zd2VyZWQqKiB3YXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBvbmVcbiAqIHRoYXQgYW5zd2VyZWQgKlwiYSBkaWZmZXJlbnQgQVZEXCIqLiBCb3RoIGZlbGwgdGhyb3VnaCB0byBcInN0YXJ0IGEgbmV3XG4gKiBlbXVsYXRvclwiLCB3aGljaCBjb2xsaWRlcyB3aXRoIHRoZSBlbXVsYXRvciBhbHJlYWR5IHNlcnZpbmcgdGhhdCBBVkQ6XG4gKlxuICogYGBgdGV4dFxuICogMTQ6Mjc6NTIuMTE0ICBDaGVja2luZyBleGlzdGluZyBkZXZpY2VzIGZvciBBVkQgXCJvYnNpZGlhbl90ZXN0XCIuLi4gKGNvbm5lY3RlZDogW2VtdWxhdG9yLTU1NTRdKVxuICogMTQ6Mjc6NTcuMTcwICBBVkQgXCJvYnNpZGlhbl90ZXN0XCIgbm90IGZvdW5kIG9uIGFueSBleGlzdGluZyBkZXZpY2UsIHN0YXJ0aW5nIGEgbmV3IGVtdWxhdG9yLi4uXG4gKiBgYGBcbiAqXG4gKiA1LjA1NnMgYXBhcnQgXHUyMDE0IGV4YWN0bHkgdGhlIHByb2JlJ3Mgb3duIHRpbWVvdXQuIFRoZSBsYXVuY2ggdGhhdCBmb2xsb3dlZCBoaXRcbiAqIGBGQVRBTCB8IFJ1bm5pbmcgbXVsdGlwbGUgZW11bGF0b3JzIHdpdGggdGhlIHNhbWUgQVZEIGlzIGFuIGV4cGVyaW1lbnRhbFxuICogZmVhdHVyZWAsIHdoaWNoIHRoZSBlbXVsYXRvciB3cml0ZXMgdG8gaXRzIG93biBzdGRvdXQuICoqQSBwcm9iZSB0aGF0IG5ldmVyXG4gKiBhbnN3ZXJlZCBpcyBub3QgZXZpZGVuY2UgdGhhdCB0aGUgYW5zd2VyIGlzIG5vKiogXHUyMDE0IHRoZSBzYW1lIGRpc3RpbmN0aW9uXG4gKiBgYWRiLWRldmljZS1saXN0LnRzYCBkcmF3cyBiZXR3ZWVuIGBvZmZsaW5lYCBhbmQgYWJzZW50LCBhbmQgdGhlIHNhbWUgb25lXG4gKiB0aGUgY29ubmVjdGl2aXR5IHByb2JlIGRyYXdzIGJldHdlZW4gYSBmYWlsZWQgZHVtcCBhbmQgYSBtaXNzaW5nIG5ldHdvcmsuXG4gKlxuICogV29yc2UsIHRoZSBwcm9iZSBpcyBhc2tlZCBpdHMgcXVlc3Rpb24gcHJlY2lzZWx5IHdoZW4gdGhlIGd1ZXN0IGlzIGxlYXN0IGFibGVcbiAqIHRvIGFuc3dlciBpdCBcdTIwMTQgYSB3ZWRnZWQgZW11bGF0b3IgdGltZXMgb3V0IGV2ZXJ5IGBhZGJgIGNhbGwgXHUyMDE0IHdoaWNoIGlzIHRoZVxuICogY29uZGl0aW9uIHVuZGVyIHdoaWNoIGEgY29sbGlkaW5nIGxhdW5jaCBkb2VzIHRoZSBtb3N0IGRhbWFnZS5cbiAqXG4gKiBLZXB0IHNlcGFyYXRlIGZyb20gdGhlIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1mYWN0b3J5YCAoZXhjbHVkZWQgZnJvbVxuICogdW5pdCB0ZXN0cykgc28gdGhlIGNsYXNzaWZpY2F0aW9uIHN0YXlzIHVuaXQtdGVzdGFibGUgXHUyMDE0IHRoZSBmYWN0b3J5IGl0c2VsZlxuICogc2hlbGxzIG91dCB0byBgYWRiYC5cbiAqL1xuXG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4vdHlwZS1ndWFyZHMuY2pzJztcblxuLyoqXG4gKiBXaGF0IG9uZSBkZXZpY2UgYW5zd2VyZWQgd2hlbiBhc2tlZCB3aGljaCBBVkQgaXQgaXMgc2VydmluZy5cbiAqXG4gKiBgbm90LWFuLWVtdWxhdG9yYCBhbmQgYG90aGVyLWF2ZGAgYXJlIGJvdGggbGVnaXRpbWF0ZSBza2lwczsgb25seVxuICogYG5vLWFuc3dlcmAgaXMgdGhlIHNpbGVuY2UgdGhhdCBtdXN0IG5ldmVyIGJlIHJlYWQgYXMgb25lLlxuICovXG5leHBvcnQgdHlwZSBBdmRQcm9iZU91dGNvbWUgPSAnbWF0Y2gnIHwgJ25vLWFuc3dlcicgfCAnbm90LWFuLWVtdWxhdG9yJyB8ICdvdGhlci1hdmQnO1xuXG4vKipcbiAqIFRoZSBydW4gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgQVZEIGlzIGFscmVhZHkgcnVubmluZywgc28gaXQgbXVzdCBub3QgbGF1bmNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF2ZFByb2JlUmVmdXNlVmVyZGljdCB7XG4gIC8qKlxuICBUaGUgZGV2aWNlcyB0aGF0IGNvdWxkIG5vdCBiZSByZWFkLCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBydWxlZCBvdXQgYXMgdGhlIEFWRCdzIGhvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IHVucmVhZGFibGVEZXZpY2VJZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBEaXNjcmltaW5hbnQuXG4gICAqL1xuICByZWFkb25seSB2ZXJkaWN0OiAncmVmdXNlJztcbn1cblxuLyoqXG4gKiBPbmUgZGV2aWNlJ3MgcHJvYmUgb3V0Y29tZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdmRQcm9iZVJlc3VsdCB7XG4gIC8qKlxuICBUaGUgZGV2aWNlIFVESUQsIGUuZy4gYGVtdWxhdG9yLTU1NTRgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgV2hhdCB0aGUgZGV2aWNlIGFuc3dlcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0Y29tZTogQXZkUHJvYmVPdXRjb21lO1xufVxuXG4vKipcbiAqIFRoZSBBVkQgaXMgYWxyZWFkeSBydW5uaW5nLCBvbiBhIGRldmljZSB0aGlzIHJ1biBtYXkgYWRvcHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXZkUHJvYmVSZXVzZVZlcmRpY3Qge1xuICAvKipcbiAgVGhlIGRldmljZSBhbHJlYWR5IHNlcnZpbmcgdGhlIHJlcXVlc3RlZCBBVkQuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICBEaXNjcmltaW5hbnQuXG4gICAqL1xuICByZWFkb25seSB2ZXJkaWN0OiAncmV1c2UnO1xufVxuXG4vKipcbiAqIEV2ZXJ5IGRldmljZSBhbnN3ZXJlZCwgbm9uZSBpcyBzZXJ2aW5nIHRoZSBBVkQsIHNvIGxhdW5jaGluZyBjYW5ub3QgY29sbGlkZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdmRQcm9iZVN0YXJ0TmV3VmVyZGljdCB7XG4gIC8qKlxuICBEaXNjcmltaW5hbnQuXG4gICAqL1xuICByZWFkb25seSB2ZXJkaWN0OiAnc3RhcnQtbmV3Jztcbn1cblxuLyoqXG4gKiBXaGF0IHRoZSBydW4gbWF5IGRvLCBnaXZlbiBldmVyeSBkZXZpY2UncyBwcm9iZSBvdXRjb21lLlxuICovXG5leHBvcnQgdHlwZSBBdmRQcm9iZVZlcmRpY3QgPSBBdmRQcm9iZVJlZnVzZVZlcmRpY3QgfCBBdmRQcm9iZVJldXNlVmVyZGljdCB8IEF2ZFByb2JlU3RhcnROZXdWZXJkaWN0O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBidWlsZFVucmVhZGFibGVEZXZpY2VzTWVzc2FnZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRVbnJlYWRhYmxlRGV2aWNlc01lc3NhZ2VQYXJhbXMge1xuICAvKipcbiAgVGhlIEFWRCB0aGUgcnVuIHdhbnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGF2ZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgVGhlIGJ1ZGdldCBlYWNoIHByb2JlIGF0dGVtcHQgd2FzIGdpdmVuLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSBwcm9iZVRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgZGV2aWNlcyB0aGF0IGRpZCBub3QgYW5zd2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgdW5yZWFkYWJsZURldmljZUlkczogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNsYXNzaWZ5QXZkUHJvYmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsYXNzaWZ5QXZkUHJvYmVQYXJhbXMge1xuICAvKipcbiAgVGhlIEFWRCB0aGUgcnVuIHdhbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYXZkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgZGV2aWNlIHRoYXQgd2FzIHByb2JlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSBBVkQgbmFtZSB0aGUgZGV2aWNlIGFuc3dlcmVkLCBvciBgdW5kZWZpbmVkYCB3aGVuIGl0IGRpZCBub3QgYW5zd2VyIGF0IGFsbC5cbiAgICovXG4gIHJlYWRvbmx5IHByb2JlZEF2ZE5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgZGV2aWNlIElEcyBhZGIgZ2l2ZXMgZW11bGF0b3JzIHN0YXJ0ZWQgdGhlIHdheSB0aGlzIGhhcm5lc3NcbiAqIHN0YXJ0cyB0aGVtOiBgZW11bGF0b3IgLWF2ZCA8bmFtZT5gLCB3aG9zZSBjb25zb2xlIGxhbmRzIG9uIGEgbG9jYWwgcG9ydC5cbiAqXG4gKiBPbmx5IHN1Y2ggYSBkZXZpY2UgY2FuIGNvbGxpZGUgd2l0aCB0aGlzIHJ1bidzIGxhdW5jaCwgc28gb25seSBzdWNoIGEgZGV2aWNlJ3NcbiAqIHNpbGVuY2UgaXMgd29ydGggcmVmdXNpbmcgb3Zlci4gQSBwaHlzaWNhbCBoYW5kc2V0IChhbiBhcmJpdHJhcnkgc2VyaWFsKSBvciBhXG4gKiBUQ1AtYXR0YWNoZWQgZGV2aWNlIGFuc3dlcnMgYGFkYiBcdTIwMjYgZW11IGF2ZCBuYW1lYCB3aXRoIGFuIGVycm9yIGhvd2V2ZXIgaGVhbHRoeVxuICogaXQgaXM7IHJlYWRpbmcgdGhhdCBhcyBcImRpZCBub3QgYW5zd2VyXCIgd291bGQgYmxvY2sgZXZlcnkgcnVuIG9uIGEgaG9zdCB3aXRoIGFcbiAqIHBob25lIHBsdWdnZWQgaW4sIHdoaWNoIGlzIGEgd29yc2UgZGVmZWN0IHRoYW4gdGhlIG9uZSB0aGlzIG1vZHVsZSBmaXhlcy5cbiAqL1xuY29uc3QgRU1VTEFUT1JfREVWSUNFX0lEX1BBVFRFUk4gPSAvXmVtdWxhdG9yLVxcZCskLztcblxuLyoqXG4gKiBCdWlsZHMgdGhlIHN1bW1hcnkgbGluZSBuYW1pbmcgd2hhdCBlYWNoIGRldmljZSBhbnN3ZXJlZC5cbiAqXG4gKiBUaGUgb2xkIGxvZyBwcmludGVkIG9ubHkgdGhlIGNvbmNsdXNpb24gKGBub3QgZm91bmQgb24gYW55IGV4aXN0aW5nIGRldmljZWApLFxuICogd2hpY2ggaXMgZXhhY3RseSB0aGUgbGluZSB0aGF0IHdhcyB3cm9uZzsgcHJpbnRpbmcgdGhlIGV2aWRlbmNlIG5leHQgdG8gaXQgaXNcbiAqIHdoYXQgbWFrZXMgYSBiYWQgY29uY2x1c2lvbiB2aXNpYmxlIHdpdGhvdXQgYSBzZWNvbmQgcnVuLlxuICpcbiAqIEBwYXJhbSByZXN1bHRzIC0gRXZlcnkgZGV2aWNlJ3MgcHJvYmUgb3V0Y29tZS5cbiAqIEByZXR1cm5zIFRoZSBzdW1tYXJ5LCBvciBgbm8gZGV2aWNlc2Agd2hlbiBub3RoaW5nIHdhcyBjb25uZWN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEF2ZFByb2JlU3VtbWFyeShyZXN1bHRzOiByZWFkb25seSBBdmRQcm9iZVJlc3VsdFtdKTogc3RyaW5nIHtcbiAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdubyBkZXZpY2VzJztcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiBgJHtyZXN1bHQuZGV2aWNlSWR9PSR7cmVzdWx0Lm91dGNvbWV9YCkuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHJlZnVzYWwgbWVzc2FnZSBmb3IgZGV2aWNlcyB0aGF0IGNvdWxkIG5vdCBiZSByZWFkLlxuICpcbiAqIE5hbWVzIHRoZSBkZXZpY2UsIHRoZSBBVkQsIHRoZSBidWRnZXQsIHRoZSBjb25zZXF1ZW5jZSBhbmQgdGhlIHJlY292ZXJ5IFx1MjAxNCB0aGVcbiAqIHNoYXBlIGB0ZWFyZG93bi12ZXJkaWN0LnRzYCB1c2VzIGZvciBpdHMgb3duIHdhcm5pbmcsIGJlY2F1c2UgYSBtZXNzYWdlIHRoYXRcbiAqIHN0b3BzIGEgcnVuIGhhcyB0byBsZWF2ZSB0aGUgcmVhZGVyIGFibGUgdG8gdW5ibG9jayBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIEFWRCwgdGhlIHByb2JlIGJ1ZGdldCwgYW5kIHRoZSBkZXZpY2VzIHRoYXQgZGlkIG5vdCBhbnN3ZXIuXG4gKiBAcmV0dXJucyBUaGUgcmVmdXNhbCBtZXNzYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVbnJlYWRhYmxlRGV2aWNlc01lc3NhZ2UocGFyYW1zOiBCdWlsZFVucmVhZGFibGVEZXZpY2VzTWVzc2FnZVBhcmFtcyk6IHN0cmluZyB7XG4gIC8qXG4gICAqIFdoZW4gdGhlcmUgaXMgZXhhY3RseSBvbmUgZGV2aWNlIHRoZSBqb2luZWQgbGlzdCBJUyBpdHMgSUQsIHNvIHRoZSBzaW5ndWxhclxuICAgKiB3b3JkaW5nIG5lZWRzIG5vIGluZGV4IGFjY2VzcyBcdTIwMTQgYW5kIG5vIHVucmVhY2hhYmxlIGZhbGxiYWNrIGZvciBvbmUuXG4gICAqL1xuICBjb25zdCBkZXZpY2VMaXN0ID0gcGFyYW1zLnVucmVhZGFibGVEZXZpY2VJZHMuam9pbignLCAnKTtcbiAgY29uc3QgaXNTaW5nbGUgPSBwYXJhbXMudW5yZWFkYWJsZURldmljZUlkcy5sZW5ndGggPT09IDE7XG5cbiAgY29uc3Qgc3ViamVjdCA9IGlzU2luZ2xlID8gYGRldmljZSAke2RldmljZUxpc3R9YCA6IGBkZXZpY2VzICR7ZGV2aWNlTGlzdH1gO1xuICBjb25zdCBjb21tYW5kID0gaXNTaW5nbGUgPyBgYWRiIC1zICR7ZGV2aWNlTGlzdH0gZW11IGF2ZCBuYW1lYCA6ICdhZGIgLXMgPGRldmljZT4gZW11IGF2ZCBuYW1lJztcbiAgY29uc3QgaG9sZGVyID0gaXNTaW5nbGUgPyAnaXQgaXMnIDogJ29uZSBvZiB0aGVtIGlzJztcbiAgY29uc3QgcmVtZWR5ID0gaXNTaW5nbGUgPyAnS2lsbCB0aGUgdW5yZXNwb25zaXZlIGRldmljZScgOiAnS2lsbCB0aGUgdW5yZXNwb25zaXZlIGRldmljZXMnO1xuXG4gIHJldHVybiBgQVZEIFwiJHtwYXJhbXMuYXZkTmFtZX1cIjogJHtzdWJqZWN0fSBkaWQgbm90IGFuc3dlciBcXGAke2NvbW1hbmR9XFxgIHdpdGhpbiAke1N0cmluZyhwYXJhbXMucHJvYmVUaW1lb3V0SW5NaWxsaXNlY29uZHMpfW1zIChyZXRyaWVkIG9uY2UpLCBgXG4gICAgKyBgc28gdGhpcyBydW4gY2Fubm90IHRlbGwgd2hldGhlciAke2hvbGRlcn0gYWxyZWFkeSBzZXJ2aW5nIHRoYXQgQVZELiBTdGFydGluZyBhbiBlbXVsYXRvciBhbnl3YXkgd291bGQgY29sbGlkZSBgXG4gICAgKyAnKGBGQVRBTCB8IFJ1bm5pbmcgbXVsdGlwbGUgZW11bGF0b3JzIHdpdGggdGhlIHNhbWUgQVZEIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlYCksIHdoaWNoIHRoZSBlbXVsYXRvciByZXBvcnRzIG9ubHkgdG8gaXRzIG93biBzdGRvdXQuICdcbiAgICArIGAke3JlbWVkeX0sIG9yIHJ1biBcXGBhZGIga2lsbC1zZXJ2ZXJcXGAsIHRoZW4gcmV0cnkuYDtcbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoZXRoZXIgYSBkZXZpY2UgY2FuIGhvbGQgYW4gQVZEIHRoaXMgcnVuIGNvdWxkIGNvbGxpZGUgd2l0aC5cbiAqXG4gKiBAcGFyYW0gZGV2aWNlSWQgLSBUaGUgZGV2aWNlIFVESUQgdG8ganVkZ2UuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgZm9yIGEgbG9jYWxseSBzdGFydGVkIGVtdWxhdG9yLCB3aG9zZSBjb25zb2xlIHRoaXMgcnVuIGNhbiBhc2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lzRW11bGF0b3JEZXZpY2VJZChkZXZpY2VJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBFTVVMQVRPUl9ERVZJQ0VfSURfUEFUVEVSTi50ZXN0KGRldmljZUlkKTtcbn1cblxuLyoqXG4gKiBDbGFzc2lmaWVzIG9uZSBkZXZpY2UncyBwcm9iZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIEFWRCB3YW50ZWQsIHRoZSBkZXZpY2UgcHJvYmVkLCBhbmQgd2hhdCBpdCBhbnN3ZXJlZC5cbiAqIEByZXR1cm5zIFRoZSBvdXRjb21lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZnlBdmRQcm9iZShwYXJhbXM6IENsYXNzaWZ5QXZkUHJvYmVQYXJhbXMpOiBBdmRQcm9iZU91dGNvbWUge1xuICBpZiAoIWNoZWNrSXNFbXVsYXRvckRldmljZUlkKHBhcmFtcy5kZXZpY2VJZCkpIHtcbiAgICByZXR1cm4gJ25vdC1hbi1lbXVsYXRvcic7XG4gIH1cblxuICBpZiAocGFyYW1zLnByb2JlZEF2ZE5hbWUgPT09IHVuZGVmaW5lZCB8fCBwYXJhbXMucHJvYmVkQXZkTmFtZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ25vLWFuc3dlcic7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zLnByb2JlZEF2ZE5hbWUgPT09IHBhcmFtcy5hdmROYW1lID8gJ21hdGNoJyA6ICdvdGhlci1hdmQnO1xufVxuXG4vKipcbiAqIERlY2lkZXMgd2hhdCB0aGUgcnVuIG1heSBkbywgZnJvbSBldmVyeSBkZXZpY2UncyBwcm9iZSBvdXRjb21lLlxuICpcbiAqICoqQSBtYXRjaCB3aW5zIG92ZXIgYW4gdW5yZWFkYWJsZSBzaWJsaW5nLioqIE9uY2UgdGhlIHJlcXVlc3RlZCBBVkQgaXMgZm91bmRcbiAqIGFuZCByZXVzYWJsZSwgYW4gdW5yZWxhdGVkIHdlZGdlZCBkZXZpY2UgaXMgc29tZWJvZHkgZWxzZSdzIHByb2JsZW0gYW5kIG11c3RcbiAqIG5vdCBibG9jayBhIHJ1biB0aGF0IGhhcyBldmVyeXRoaW5nIGl0IG5lZWRzIFx1MjAxNCB0aGUgc2FtZSByZXN0cmFpbnRcbiAqIGBlbXVsYXRvci1iYWNrZW5kLnRzYCBzaG93cyBpbiBuZXZlciBzd2VlcGluZyBhIGBxZW11KmAgaXQgZG9lcyBub3Qgb3duLiBPbmx5XG4gKiB3aGVuIG5vdGhpbmcgbWF0Y2hlZCBkb2VzIHNpbGVuY2UgYmVjb21lIGRlY2lzaXZlLCBiZWNhdXNlIG9ubHkgdGhlbiB3b3VsZCB0aGVcbiAqIHJ1biBnbyBvbiB0byBsYXVuY2guXG4gKlxuICogQHBhcmFtIHJlc3VsdHMgLSBFdmVyeSBkZXZpY2UncyBwcm9iZSBvdXRjb21lLlxuICogQHJldHVybnMgVGhlIHZlcmRpY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQXZkUHJvYmVWZXJkaWN0KHJlc3VsdHM6IHJlYWRvbmx5IEF2ZFByb2JlUmVzdWx0W10pOiBBdmRQcm9iZVZlcmRpY3Qge1xuICBjb25zdCB1bnJlYWRhYmxlRGV2aWNlSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICBzd2l0Y2ggKHJlc3VsdC5vdXRjb21lKSB7XG4gICAgICBjYXNlICdtYXRjaCc6IHtcbiAgICAgICAgcmV0dXJuIHsgZGV2aWNlSWQ6IHJlc3VsdC5kZXZpY2VJZCwgdmVyZGljdDogJ3JldXNlJyB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnbm8tYW5zd2VyJzoge1xuICAgICAgICB1bnJlYWRhYmxlRGV2aWNlSWRzLnB1c2gocmVzdWx0LmRldmljZUlkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdub3QtYW4tZW11bGF0b3InOlxuICAgICAgY2FzZSAnb3RoZXItYXZkJzoge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydE5ldmVyKHJlc3VsdC5vdXRjb21lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodW5yZWFkYWJsZURldmljZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHsgdW5yZWFkYWJsZURldmljZUlkcywgdmVyZGljdDogJ3JlZnVzZScgfTtcbiAgfVxuXG4gIHJldHVybiB7IHZlcmRpY3Q6ICdzdGFydC1uZXcnIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpQ0EseUJBQTRCO0FBd0g1QixNQUFNLDZCQUE2QjtBQVk1QixTQUFTLHFCQUFxQixTQUE0QztBQUMvRSxNQUFJLFFBQVEsV0FBVyxHQUFHO0FBQ3hCLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxRQUFRLElBQUksT0FBTyxPQUFPLEVBQUUsRUFBRSxLQUFLLElBQUk7QUFDbEY7QUFZTyxTQUFTLDhCQUE4QixRQUFxRDtBQUtqRyxRQUFNLGFBQWEsT0FBTyxvQkFBb0IsS0FBSyxJQUFJO0FBQ3ZELFFBQU0sV0FBVyxPQUFPLG9CQUFvQixXQUFXO0FBRXZELFFBQU0sVUFBVSxXQUFXLFVBQVUsVUFBVSxLQUFLLFdBQVcsVUFBVTtBQUN6RSxRQUFNLFVBQVUsV0FBVyxVQUFVLFVBQVUsa0JBQWtCO0FBQ2pFLFFBQU0sU0FBUyxXQUFXLFVBQVU7QUFDcEMsUUFBTSxTQUFTLFdBQVcsaUNBQWlDO0FBRTNELFNBQU8sUUFBUSxPQUFPLE9BQU8sTUFBTSxPQUFPLHFCQUFxQixPQUFPLGFBQWEsT0FBTyxPQUFPLDBCQUEwQixDQUFDLHNEQUNyRixNQUFNLGtOQUV0QyxNQUFNO0FBQ2Y7QUFRTyxTQUFTLHdCQUF3QixVQUEyQjtBQUNqRSxTQUFPLDJCQUEyQixLQUFLLFFBQVE7QUFDakQ7QUFRTyxTQUFTLGlCQUFpQixRQUFpRDtBQUNoRixNQUFJLENBQUMsd0JBQXdCLE9BQU8sUUFBUSxHQUFHO0FBQzdDLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxPQUFPLGtCQUFrQixVQUFhLE9BQU8sY0FBYyxXQUFXLEdBQUc7QUFDM0UsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLE9BQU8sa0JBQWtCLE9BQU8sVUFBVSxVQUFVO0FBQzdEO0FBZU8sU0FBUyx1QkFBdUIsU0FBcUQ7QUFDMUYsUUFBTSxzQkFBZ0MsQ0FBQztBQUV2QyxhQUFXLFVBQVUsU0FBUztBQUM1QixZQUFRLE9BQU8sU0FBUztBQUFBLE1BQ3RCLEtBQUssU0FBUztBQUNaLGVBQU8sRUFBRSxVQUFVLE9BQU8sVUFBVSxTQUFTLFFBQVE7QUFBQSxNQUN2RDtBQUFBLE1BQ0EsS0FBSyxhQUFhO0FBQ2hCLDRCQUFvQixLQUFLLE9BQU8sUUFBUTtBQUN4QztBQUFBLE1BQ0Y7QUFBQSxNQUNBLEtBQUs7QUFBQSxNQUNMLEtBQUssYUFBYTtBQUNoQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFNBQVM7QUFDUCxtQkFBTyxnQ0FBWSxPQUFPLE9BQU87QUFBQSxNQUNuQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsTUFBSSxvQkFBb0IsU0FBUyxHQUFHO0FBQ2xDLFdBQU8sRUFBRSxxQkFBcUIsU0FBUyxTQUFTO0FBQUEsRUFDbEQ7QUFFQSxTQUFPLEVBQUUsU0FBUyxZQUFZO0FBQ2hDOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,175 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Pure classification of the AVD adoption probe — deciding, from what each
5
+ * connected device answered, whether this run may reuse one, must start its
6
+ * own emulator, or cannot safely do either.
7
+ *
8
+ * The probe (`adb -s <device> emu avd name`) used to discard its error and
9
+ * resolve `''`, so a call that **never answered** was indistinguishable from one
10
+ * that answered *"a different AVD"*. Both fell through to "start a new
11
+ * emulator", which collides with the emulator already serving that AVD:
12
+ *
13
+ * ```text
14
+ * 14:27:52.114 Checking existing devices for AVD "obsidian_test"... (connected: [emulator-5554])
15
+ * 14:27:57.170 AVD "obsidian_test" not found on any existing device, starting a new emulator...
16
+ * ```
17
+ *
18
+ * 5.056s apart — exactly the probe's own timeout. The launch that followed hit
19
+ * `FATAL | Running multiple emulators with the same AVD is an experimental
20
+ * feature`, which the emulator writes to its own stdout. **A probe that never
21
+ * answered is not evidence that the answer is no** — the same distinction
22
+ * `adb-device-list.ts` draws between `offline` and absent, and the same one
23
+ * the connectivity probe draws between a failed dump and a missing network.
24
+ *
25
+ * Worse, the probe is asked its question precisely when the guest is least able
26
+ * to answer it — a wedged emulator times out every `adb` call — which is the
27
+ * condition under which a colliding launch does the most damage.
28
+ *
29
+ * Kept separate from the integration-only `transport-factory` (excluded from
30
+ * unit tests) so the classification stays unit-testable — the factory itself
31
+ * shells out to `adb`.
32
+ */
33
+ /**
34
+ * What one device answered when asked which AVD it is serving.
35
+ *
36
+ * `not-an-emulator` and `other-avd` are both legitimate skips; only
37
+ * `no-answer` is the silence that must never be read as one.
38
+ */
39
+ export type AvdProbeOutcome = 'match' | 'no-answer' | 'not-an-emulator' | 'other-avd';
40
+ /**
41
+ * The run cannot tell whether the AVD is already running, so it must not launch.
42
+ */
43
+ export interface AvdProbeRefuseVerdict {
44
+ /**
45
+ The devices that could not be read, and therefore cannot be ruled out as the AVD's holder.
46
+ */
47
+ readonly unreadableDeviceIds: string[];
48
+ /**
49
+ Discriminant.
50
+ */
51
+ readonly verdict: 'refuse';
52
+ }
53
+ /**
54
+ * One device's probe outcome.
55
+ */
56
+ export interface AvdProbeResult {
57
+ /**
58
+ The device UDID, e.g. `emulator-5554`.
59
+ */
60
+ readonly deviceId: string;
61
+ /**
62
+ What the device answered.
63
+ */
64
+ readonly outcome: AvdProbeOutcome;
65
+ }
66
+ /**
67
+ * The AVD is already running, on a device this run may adopt.
68
+ */
69
+ export interface AvdProbeReuseVerdict {
70
+ /**
71
+ The device already serving the requested AVD.
72
+ */
73
+ readonly deviceId: string;
74
+ /**
75
+ Discriminant.
76
+ */
77
+ readonly verdict: 'reuse';
78
+ }
79
+ /**
80
+ * Every device answered, none is serving the AVD, so launching cannot collide.
81
+ */
82
+ export interface AvdProbeStartNewVerdict {
83
+ /**
84
+ Discriminant.
85
+ */
86
+ readonly verdict: 'start-new';
87
+ }
88
+ /**
89
+ * What the run may do, given every device's probe outcome.
90
+ */
91
+ export type AvdProbeVerdict = AvdProbeRefuseVerdict | AvdProbeReuseVerdict | AvdProbeStartNewVerdict;
92
+ /**
93
+ * Parameters for {@link buildUnreadableDevicesMessage}.
94
+ */
95
+ export interface BuildUnreadableDevicesMessageParams {
96
+ /**
97
+ The AVD the run wanted.
98
+ */
99
+ readonly avdName: string;
100
+ /**
101
+ The budget each probe attempt was given, in milliseconds.
102
+ */
103
+ readonly probeTimeoutInMilliseconds: number;
104
+ /**
105
+ The devices that did not answer.
106
+ */
107
+ readonly unreadableDeviceIds: readonly string[];
108
+ }
109
+ /**
110
+ * Parameters for {@link classifyAvdProbe}.
111
+ */
112
+ export interface ClassifyAvdProbeParams {
113
+ /**
114
+ The AVD the run wants.
115
+ */
116
+ readonly avdName: string;
117
+ /**
118
+ The device that was probed.
119
+ */
120
+ readonly deviceId: string;
121
+ /**
122
+ The AVD name the device answered, or `undefined` when it did not answer at all.
123
+ */
124
+ readonly probedAvdName?: string | undefined;
125
+ }
126
+ /**
127
+ * Builds the summary line naming what each device answered.
128
+ *
129
+ * The old log printed only the conclusion (`not found on any existing device`),
130
+ * which is exactly the line that was wrong; printing the evidence next to it is
131
+ * what makes a bad conclusion visible without a second run.
132
+ *
133
+ * @param results - Every device's probe outcome.
134
+ * @returns The summary, or `no devices` when nothing was connected.
135
+ */
136
+ export declare function buildAvdProbeSummary(results: readonly AvdProbeResult[]): string;
137
+ /**
138
+ * Builds the refusal message for devices that could not be read.
139
+ *
140
+ * Names the device, the AVD, the budget, the consequence and the recovery — the
141
+ * shape `teardown-verdict.ts` uses for its own warning, because a message that
142
+ * stops a run has to leave the reader able to unblock it.
143
+ *
144
+ * @param params - The AVD, the probe budget, and the devices that did not answer.
145
+ * @returns The refusal message.
146
+ */
147
+ export declare function buildUnreadableDevicesMessage(params: BuildUnreadableDevicesMessageParams): string;
148
+ /**
149
+ * Decides whether a device can hold an AVD this run could collide with.
150
+ *
151
+ * @param deviceId - The device UDID to judge.
152
+ * @returns `true` for a locally started emulator, whose console this run can ask.
153
+ */
154
+ export declare function checkIsEmulatorDeviceId(deviceId: string): boolean;
155
+ /**
156
+ * Classifies one device's probe.
157
+ *
158
+ * @param params - The AVD wanted, the device probed, and what it answered.
159
+ * @returns The outcome.
160
+ */
161
+ export declare function classifyAvdProbe(params: ClassifyAvdProbeParams): AvdProbeOutcome;
162
+ /**
163
+ * Decides what the run may do, from every device's probe outcome.
164
+ *
165
+ * **A match wins over an unreadable sibling.** Once the requested AVD is found
166
+ * and reusable, an unrelated wedged device is somebody else's problem and must
167
+ * not block a run that has everything it needs — the same restraint
168
+ * `emulator-backend.ts` shows in never sweeping a `qemu*` it does not own. Only
169
+ * when nothing matched does silence become decisive, because only then would the
170
+ * run go on to launch.
171
+ *
172
+ * @param results - Every device's probe outcome.
173
+ * @returns The verdict.
174
+ */
175
+ export declare function resolveAvdProbeVerdict(results: readonly AvdProbeResult[]): AvdProbeVerdict;
@@ -49,4 +49,4 @@ function selectPluginRepo(params) {
49
49
  isValidRepoReference,
50
50
  selectPluginRepo
51
51
  });
52
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW11bml0eS1wbHVnaW4tcmVnaXN0cnkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIGhlbHBlcnMgZm9yIHJlc29sdmluZyBhIGNvbW11bml0eSBwbHVnaW4ncyAqKkdpdEh1YiByZWxlYXNlIGFzc2V0cyoqIGZyb21cbiAqIG5vdGhpbmcgYnV0IGl0cyBwbHVnaW4gaWQgXHUyMDE0IHRoZSBpZCBcdTIxOTIgcmVwbyBsb29rdXAgYW5kIHRoZSBhc3NldCBVUkwgc2hhcGVzLlxuICpcbiAqIEEgcGx1Z2luJ3MgYnVpbHQgZmlsZXMgbmV2ZXIgbGl2ZSBpbiBnaXQ6IGAub2JzaWRpYW4vcGx1Z2lucy8qYCBpcyBnaXRpZ25vcmVkIGluXG4gKiBldmVyeSBmbGVldCBwbHVnaW4gcmVwbywgc28gYSBkZW1vIHZhdWx0J3MgaW5qZWN0ZWQgY29tbXVuaXR5IHBsdWdpbnMgZXhpc3Qgb25cbiAqIGV4YWN0bHkgdGhlIG1hY2hpbmUgdGhhdCBvbmNlIG9wZW5lZCB0aGF0IHZhdWx0IGluIE9ic2lkaWFuLiBUbyBpbnN0YWxsIHRoZW1cbiAqIGhlYWRsZXNzbHkgKHNlZSBgZGVtby12YXVsdC1ib290c3RyYXAudHNgKSB0d28gdGhpbmdzIG11c3QgYmUgZGVyaXZhYmxlOlxuICpcbiAqIC0gKipXaGljaCByZXBvIHB1Ymxpc2hlcyB0aGUgaWQuKiogT2JzaWRpYW4ncyBvd24gcmVnaXN0cnkgXHUyMDE0XG4gKiAgIHtAbGluayBDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkx9LCBzZXJ2ZWQgZnJvbSB0aGUgc2FtZVxuICogICBgb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlc2AgcmVwb3NpdG9yeSB0aGUgaW5zdGFsbGVyIGRvd25sb2FkZXIgYWxyZWFkeVxuICogICB1c2VzIFx1MjAxNCBtYXBzIGV2ZXJ5IGNvbW11bml0eSBwbHVnaW4ncyBgaWRgIHRvIGl0cyBgb3duZXIvbmFtZWAgcmVwby4gVGhhdCBpc1xuICogICB0aGUgc2FtZSB0YWJsZSB0aGUgaW4tYXBwIGNvbW11bml0eSBicm93c2VyIGluc3RhbGxzIGZyb20sIHNvIG5vXG4gKiAgIHBsdWdpbi1zcGVjaWZpYyBtYXBwaW5nIGhhcyB0byBiZSBoYXJkY29kZWQgaGVyZS5cbiAqIC0gKipXaGVyZSB0aGF0IHJlcG8ncyBhc3NldHMgbGl2ZS4qKiBBIHBsdWdpbiByZWxlYXNlIHB1Ymxpc2hlcyBgbWFuaWZlc3QuanNvbmAsXG4gKiAgIGBtYWluLmpzYCBhbmQgKG9wdGlvbmFsbHkpIGBzdHlsZXMuY3NzYCBhcyByZWxlYXNlIGFzc2V0cztcbiAqICAge0BsaW5rIGJ1aWxkUGx1Z2luQXNzZXRVcmx9IGJ1aWxkcyB0aGUgVVJMIGZvciBvbmUsIGZvciBlaXRoZXIgdGhlIGxhdGVzdFxuICogICByZWxlYXNlIG9yIGEgcGlubmVkIHRhZy5cbiAqXG4gKiBFdmVyeXRoaW5nIGRlY2lkYWJsZSB3aXRob3V0IHRoZSBuZXR3b3JrIGxpdmVzIGhlcmUgc28gaXQgc3RheXMgdW5pdC10ZXN0ZWQ7IHRoZVxuICogZmV0Y2hpbmcgYW5kIHdyaXRpbmcgc2l0IGluIGBkZW1vLXZhdWx0LWJvb3RzdHJhcC50c2AsIG1pcnJvcmluZyB0aGVcbiAqIGBpbnN0YWxsZXItYXNzZXQudHNgIC8gYG9ic2lkaWFuLWluc3RhbGxlci50c2Agc3BsaXQuXG4gKi9cblxuLyoqXG4gKiBPYnNpZGlhbidzIG93biBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5OiB0aGUgYGlkYCBcdTIxOTIgYHJlcG9gIHRhYmxlIHRoZSBpbi1hcHBcbiAqIGNvbW11bml0eSBicm93c2VyIGluc3RhbGxzIGZyb20sIHNlcnZlZCBmcm9tIHRoZSBgb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlc2BcbiAqIHJlcG9zaXRvcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkwgPSAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvbWFzdGVyL2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuXG4vKipcbiAqIFRoZSBgbWFpbi5qc2AgLyBgbWFuaWZlc3QuanNvbmAgcGFpciBldmVyeSBwbHVnaW4gcmVsZWFzZSBtdXN0IHB1Ymxpc2ggZm9yIHRoZVxuICogcGx1Z2luIHRvIGJlIGxvYWRhYmxlIFx1MjAxNCB0aGUgc2FtZSB0d28gZmlsZXMgYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVgIHJlcXVpcmVzIG9uXG4gKiBkaXNrLlxuICovXG5leHBvcnQgY29uc3QgUkVRVUlSRURfUExVR0lOX0FTU0VUX05BTUVTID0gWydtYWluLmpzJywgJ21hbmlmZXN0Lmpzb24nXSBhcyBjb25zdDtcblxuLyoqXG4gKiBgc3R5bGVzLmNzc2AgaXMgcHVibGlzaGVkIG9ubHkgYnkgcGx1Z2lucyB0aGF0IHNoaXAgQ1NTLCBzbyBhIGRvd25sb2FkIG9mIGl0IGlzXG4gKiBhbGxvd2VkIHRvIDQwNCB3aXRob3V0IGZhaWxpbmcgdGhlIGluc3RhbGwuXG4gKi9cbmV4cG9ydCBjb25zdCBPUFRJT05BTF9QTFVHSU5fQVNTRVRfTkFNRVMgPSBbJ3N0eWxlcy5jc3MnXSBhcyBjb25zdDtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYnVpbGRQbHVnaW5Bc3NldFVybH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRQbHVnaW5Bc3NldFVybFBhcmFtcyB7XG4gIC8qKlxuICBUaGUgcmVsZWFzZSBhc3NldCdzIGZpbGUgbmFtZSwgZS5nLiBgbWFpbi5qc2AuXG4gICAqL1xuICByZWFkb25seSBhc3NldE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgVGhlIHB1Ymxpc2hpbmcgR2l0SHViIHJlcG9zaXRvcnksIGFzIGBvd25lci9uYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlbGVhc2UgdGFnIHRvIGRvd25sb2FkIGZyb20uIE9taXQgZm9yIHRoZSByZXBvc2l0b3J5J3MgbGF0ZXN0IHJlbGVhc2UgXHUyMDE0XG4gICAqIHdoaWNoIGlzIHdoYXQgdGhlIGluLWFwcCBjb21tdW5pdHkgYnJvd3NlciBpbnN0YWxscy5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogT25lIHJvdyBvZiBPYnNpZGlhbidzIGBjb21tdW5pdHktcGx1Z2lucy5qc29uYCwgcmVkdWNlZCB0byB0aGUgZmllbGRzIHRoZVxuICogYm9vdHN0cmFwIG5lZWRzLiBUaGUgcHVibGlzaGVkIHJvd3MgY2FycnkgYG5hbWVgLCBgYXV0aG9yYCBhbmQgYGRlc2NyaXB0aW9uYFxuICogdG9vOyB0aGV5IGFyZSBkZWxpYmVyYXRlbHkgbm90IG1vZGVsbGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblJlZ2lzdHJ5RW50cnkge1xuICAvKipcbiAgVGhlIHBsdWdpbidzIGlkIFx1MjAxNCBpdHMgYC5vYnNpZGlhbi9wbHVnaW5zLzxpZD5gIGZvbGRlciBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgVGhlIHB1Ymxpc2hpbmcgR2l0SHViIHJlcG9zaXRvcnksIGFzIGBvd25lci9uYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgc2VsZWN0UGx1Z2luUmVwb30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0UGx1Z2luUmVwb1BhcmFtcyB7XG4gIC8qKlxuICBUaGUgcmVnaXN0cnkgcm93cywgYXMgcHVibGlzaGVkIGJ5IHtAbGluayBDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkx9LlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cmllczogcmVhZG9ubHkgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeVtdO1xuXG4gIC8qKlxuICBUaGUgcGx1Z2luIGlkIHRvIGxvb2sgdXAuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZG93bmxvYWQgVVJMIGZvciBvbmUgYXNzZXQgb2YgYSBwbHVnaW4ncyBHaXRIdWIgcmVsZWFzZS5cbiAqXG4gKiBHaXRIdWIgc2VydmVzIHR3byBmb3JtcyBcdTIwMTQgYSBwaW5uZWQgYHJlbGVhc2VzL2Rvd25sb2FkLzx0YWc+Lzxhc3NldD5gIGFuZCB0aGVcbiAqIG1vdmluZyBgcmVsZWFzZXMvbGF0ZXN0L2Rvd25sb2FkLzxhc3NldD5gIFx1MjAxNCBzbyBhIHBpbm5lZCB2ZXJzaW9uIGFuZCB0aGUgZGVmYXVsdFxuICogXCJ3aGF0ZXZlciBpcyBjdXJyZW50XCIgc2hhcmUgb25lIGJ1aWxkZXIuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQnVpbGRQbHVnaW5Bc3NldFVybFBhcmFtc30uXG4gKiBAcmV0dXJucyBUaGUgYXNzZXQncyBkb3dubG9hZCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBsdWdpbkFzc2V0VXJsKHBhcmFtczogQnVpbGRQbHVnaW5Bc3NldFVybFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYXNzZXROYW1lLCByZXBvLCB2ZXJzaW9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHJlbGVhc2VQYXRoID0gdmVyc2lvbiA9PT0gdW5kZWZpbmVkID8gJ2xhdGVzdC9kb3dubG9hZCcgOiBgZG93bmxvYWQvJHt2ZXJzaW9ufWA7XG4gIHJldHVybiBgaHR0cHM6Ly9naXRodWIuY29tLyR7cmVwb30vcmVsZWFzZXMvJHtyZWxlYXNlUGF0aH0vJHthc3NldE5hbWV9YDtcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhhdCBhIHN0cmluZyBoYXMgdGhlIGBvd25lci9uYW1lYCBzaGFwZSBhIEdpdEh1YiByZXBvc2l0b3J5IHJlZmVyZW5jZVxuICogbmVlZHMsIHNvIGEgbWFsZm9ybWVkIG92ZXJyaWRlIGlzIHJlamVjdGVkIGJlZm9yZSBpdCBpcyBzcGxpY2VkIGludG8gYSBVUkwuXG4gKlxuICogQHBhcmFtIHJlcG8gLSBUaGUgY2FuZGlkYXRlIHJlcG9zaXRvcnkgcmVmZXJlbmNlLlxuICogQHJldHVybnMgV2hldGhlciBpdCBpcyBhIHdlbGwtZm9ybWVkIGBvd25lci9uYW1lYCBwYWlyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFJlcG9SZWZlcmVuY2UocmVwbzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXltcXHcuLV0rXFwvW1xcdy4tXSskLy50ZXN0KHJlcG8pO1xufVxuXG4vKipcbiAqIExvb2tzIGEgcGx1Z2luIGlkIHVwIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBTZWxlY3RQbHVnaW5SZXBvUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBwdWJsaXNoaW5nIGBvd25lci9uYW1lYCByZXBvLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBpZCBpcyBub3QgYVxuICogICByZWdpc3RlcmVkIGNvbW11bml0eSBwbHVnaW4gKGEgcHJpdmF0ZSBvciB1bmxpc3RlZCBwbHVnaW4sIG9yIGEgdHlwbykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RQbHVnaW5SZXBvKHBhcmFtczogU2VsZWN0UGx1Z2luUmVwb1BhcmFtcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBwYXJhbXMuZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkuaWQgPT09IHBhcmFtcy5wbHVnaW5JZCk/LnJlcG87XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdDTyxNQUFNLGlDQUFpQztBQU92QyxNQUFNLDhCQUE4QixDQUFDLFdBQVcsZUFBZTtBQU0vRCxNQUFNLDhCQUE4QixDQUFDLFlBQVk7QUFpRWpELFNBQVMsb0JBQW9CLFFBQTJDO0FBQzdFLFFBQU0sRUFBRSxXQUFXLE1BQU0sUUFBUSxJQUFJO0FBQ3JDLFFBQU0sY0FBYyxZQUFZLFNBQVksb0JBQW9CLFlBQVksT0FBTztBQUNuRixTQUFPLHNCQUFzQixJQUFJLGFBQWEsV0FBVyxJQUFJLFNBQVM7QUFDeEU7QUFTTyxTQUFTLHFCQUFxQixNQUF1QjtBQUMxRCxTQUFPLHFCQUFxQixLQUFLLElBQUk7QUFDdkM7QUFTTyxTQUFTLGlCQUFpQixRQUFvRDtBQUNuRixTQUFPLE9BQU8sUUFBUSxLQUFLLENBQUMsVUFBVSxNQUFNLE9BQU8sT0FBTyxRQUFRLEdBQUc7QUFDdkU7IiwKICAibmFtZXMiOiBbXQp9Cg==
52
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW11bml0eS1wbHVnaW4tcmVnaXN0cnkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIGhlbHBlcnMgZm9yIHJlc29sdmluZyBhIGNvbW11bml0eSBwbHVnaW4ncyAqKkdpdEh1YiByZWxlYXNlIGFzc2V0cyoqIGZyb21cbiAqIG5vdGhpbmcgYnV0IGl0cyBwbHVnaW4gaWQgXHUyMDE0IHRoZSBpZCBcdTIxOTIgcmVwbyBsb29rdXAgYW5kIHRoZSBhc3NldCBVUkwgc2hhcGVzLlxuICpcbiAqIEEgcGx1Z2luJ3MgYnVpbHQgZmlsZXMgbmV2ZXIgbGl2ZSBpbiBnaXQ6IGAub2JzaWRpYW4vcGx1Z2lucy8qYCBpcyBnaXRpZ25vcmVkIGluXG4gKiBhIHBsdWdpbiByZXBvLCBzbyBhIGRlbW8gdmF1bHQncyBpbmplY3RlZCBjb21tdW5pdHkgcGx1Z2lucyBleGlzdCBvblxuICogZXhhY3RseSB0aGUgbWFjaGluZSB0aGF0IG9uY2Ugb3BlbmVkIHRoYXQgdmF1bHQgaW4gT2JzaWRpYW4uIFRvIGluc3RhbGwgdGhlbVxuICogaGVhZGxlc3NseSAoc2VlIGBkZW1vLXZhdWx0LWJvb3RzdHJhcC50c2ApIHR3byB0aGluZ3MgbXVzdCBiZSBkZXJpdmFibGU6XG4gKlxuICogLSAqKldoaWNoIHJlcG8gcHVibGlzaGVzIHRoZSBpZC4qKiBPYnNpZGlhbidzIG93biByZWdpc3RyeSBcdTIwMTRcbiAqICAge0BsaW5rIENPTU1VTklUWV9QTFVHSU5TX1JFR0lTVFJZX1VSTH0sIHNlcnZlZCBmcm9tIHRoZSBzYW1lXG4gKiAgIGBvYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzYCByZXBvc2l0b3J5IHRoZSBpbnN0YWxsZXIgZG93bmxvYWRlciBhbHJlYWR5XG4gKiAgIHVzZXMgXHUyMDE0IG1hcHMgZXZlcnkgY29tbXVuaXR5IHBsdWdpbidzIGBpZGAgdG8gaXRzIGBvd25lci9uYW1lYCByZXBvLiBUaGF0IGlzXG4gKiAgIHRoZSBzYW1lIHRhYmxlIHRoZSBpbi1hcHAgY29tbXVuaXR5IGJyb3dzZXIgaW5zdGFsbHMgZnJvbSwgc28gbm9cbiAqICAgcGx1Z2luLXNwZWNpZmljIG1hcHBpbmcgaGFzIHRvIGJlIGhhcmRjb2RlZCBoZXJlLlxuICogLSAqKldoZXJlIHRoYXQgcmVwbydzIGFzc2V0cyBsaXZlLioqIEEgcGx1Z2luIHJlbGVhc2UgcHVibGlzaGVzIGBtYW5pZmVzdC5qc29uYCxcbiAqICAgYG1haW4uanNgIGFuZCAob3B0aW9uYWxseSkgYHN0eWxlcy5jc3NgIGFzIHJlbGVhc2UgYXNzZXRzO1xuICogICB7QGxpbmsgYnVpbGRQbHVnaW5Bc3NldFVybH0gYnVpbGRzIHRoZSBVUkwgZm9yIG9uZSwgZm9yIGVpdGhlciB0aGUgbGF0ZXN0XG4gKiAgIHJlbGVhc2Ugb3IgYSBwaW5uZWQgdGFnLlxuICpcbiAqIEV2ZXJ5dGhpbmcgZGVjaWRhYmxlIHdpdGhvdXQgdGhlIG5ldHdvcmsgbGl2ZXMgaGVyZSBzbyBpdCBzdGF5cyB1bml0LXRlc3RlZDsgdGhlXG4gKiBmZXRjaGluZyBhbmQgd3JpdGluZyBzaXQgaW4gYGRlbW8tdmF1bHQtYm9vdHN0cmFwLnRzYCwgbWlycm9yaW5nIHRoZVxuICogYGluc3RhbGxlci1hc3NldC50c2AgLyBgb2JzaWRpYW4taW5zdGFsbGVyLnRzYCBzcGxpdC5cbiAqL1xuXG4vKipcbiAqIE9ic2lkaWFuJ3Mgb3duIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnk6IHRoZSBgaWRgIFx1MjE5MiBgcmVwb2AgdGFibGUgdGhlIGluLWFwcFxuICogY29tbXVuaXR5IGJyb3dzZXIgaW5zdGFsbHMgZnJvbSwgc2VydmVkIGZyb20gdGhlIGBvYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzYFxuICogcmVwb3NpdG9yeS5cbiAqL1xuZXhwb3J0IGNvbnN0IENPTU1VTklUWV9QTFVHSU5TX1JFR0lTVFJZX1VSTCA9ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlcy9tYXN0ZXIvY29tbXVuaXR5LXBsdWdpbnMuanNvbic7XG5cbi8qKlxuICogVGhlIGBtYWluLmpzYCAvIGBtYW5pZmVzdC5qc29uYCBwYWlyIGV2ZXJ5IHBsdWdpbiByZWxlYXNlIG11c3QgcHVibGlzaCBmb3IgdGhlXG4gKiBwbHVnaW4gdG8gYmUgbG9hZGFibGUgXHUyMDE0IHRoZSBzYW1lIHR3byBmaWxlcyBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZWAgcmVxdWlyZXMgb25cbiAqIGRpc2suXG4gKi9cbmV4cG9ydCBjb25zdCBSRVFVSVJFRF9QTFVHSU5fQVNTRVRfTkFNRVMgPSBbJ21haW4uanMnLCAnbWFuaWZlc3QuanNvbiddIGFzIGNvbnN0O1xuXG4vKipcbiAqIGBzdHlsZXMuY3NzYCBpcyBwdWJsaXNoZWQgb25seSBieSBwbHVnaW5zIHRoYXQgc2hpcCBDU1MsIHNvIGEgZG93bmxvYWQgb2YgaXQgaXNcbiAqIGFsbG93ZWQgdG8gNDA0IHdpdGhvdXQgZmFpbGluZyB0aGUgaW5zdGFsbC5cbiAqL1xuZXhwb3J0IGNvbnN0IE9QVElPTkFMX1BMVUdJTl9BU1NFVF9OQU1FUyA9IFsnc3R5bGVzLmNzcyddIGFzIGNvbnN0O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBidWlsZFBsdWdpbkFzc2V0VXJsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZFBsdWdpbkFzc2V0VXJsUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSByZWxlYXNlIGFzc2V0J3MgZmlsZSBuYW1lLCBlLmcuIGBtYWluLmpzYC5cbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgcHVibGlzaGluZyBHaXRIdWIgcmVwb3NpdG9yeSwgYXMgYG93bmVyL25hbWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVsZWFzZSB0YWcgdG8gZG93bmxvYWQgZnJvbS4gT21pdCBmb3IgdGhlIHJlcG9zaXRvcnkncyBsYXRlc3QgcmVsZWFzZSBcdTIwMTRcbiAgICogd2hpY2ggaXMgd2hhdCB0aGUgaW4tYXBwIGNvbW11bml0eSBicm93c2VyIGluc3RhbGxzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBPbmUgcm93IG9mIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gLCByZWR1Y2VkIHRvIHRoZSBmaWVsZHMgdGhlXG4gKiBib290c3RyYXAgbmVlZHMuIFRoZSBwdWJsaXNoZWQgcm93cyBjYXJyeSBgbmFtZWAsIGBhdXRob3JgIGFuZCBgZGVzY3JpcHRpb25gXG4gKiB0b287IHRoZXkgYXJlIGRlbGliZXJhdGVseSBub3QgbW9kZWxsZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeSB7XG4gIC8qKlxuICBUaGUgcGx1Z2luJ3MgaWQgXHUyMDE0IGl0cyBgLm9ic2lkaWFuL3BsdWdpbnMvPGlkPmAgZm9sZGVyIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgcHVibGlzaGluZyBHaXRIdWIgcmVwb3NpdG9yeSwgYXMgYG93bmVyL25hbWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBzZWxlY3RQbHVnaW5SZXBvfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RQbHVnaW5SZXBvUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSByZWdpc3RyeSByb3dzLCBhcyBwdWJsaXNoZWQgYnkge0BsaW5rIENPTU1VTklUWV9QTFVHSU5TX1JFR0lTVFJZX1VSTH0uXG4gICAqL1xuICByZWFkb25seSBlbnRyaWVzOiByZWFkb25seSBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W107XG5cbiAgLyoqXG4gIFRoZSBwbHVnaW4gaWQgdG8gbG9vayB1cC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBkb3dubG9hZCBVUkwgZm9yIG9uZSBhc3NldCBvZiBhIHBsdWdpbidzIEdpdEh1YiByZWxlYXNlLlxuICpcbiAqIEdpdEh1YiBzZXJ2ZXMgdHdvIGZvcm1zIFx1MjAxNCBhIHBpbm5lZCBgcmVsZWFzZXMvZG93bmxvYWQvPHRhZz4vPGFzc2V0PmAgYW5kIHRoZVxuICogbW92aW5nIGByZWxlYXNlcy9sYXRlc3QvZG93bmxvYWQvPGFzc2V0PmAgXHUyMDE0IHNvIGEgcGlubmVkIHZlcnNpb24gYW5kIHRoZSBkZWZhdWx0XG4gKiBcIndoYXRldmVyIGlzIGN1cnJlbnRcIiBzaGFyZSBvbmUgYnVpbGRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBCdWlsZFBsdWdpbkFzc2V0VXJsUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBhc3NldCdzIGRvd25sb2FkIFVSTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUGx1Z2luQXNzZXRVcmwocGFyYW1zOiBCdWlsZFBsdWdpbkFzc2V0VXJsUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBhc3NldE5hbWUsIHJlcG8sIHZlcnNpb24gfSA9IHBhcmFtcztcbiAgY29uc3QgcmVsZWFzZVBhdGggPSB2ZXJzaW9uID09PSB1bmRlZmluZWQgPyAnbGF0ZXN0L2Rvd25sb2FkJyA6IGBkb3dubG9hZC8ke3ZlcnNpb259YDtcbiAgcmV0dXJuIGBodHRwczovL2dpdGh1Yi5jb20vJHtyZXBvfS9yZWxlYXNlcy8ke3JlbGVhc2VQYXRofS8ke2Fzc2V0TmFtZX1gO1xufVxuXG4vKipcbiAqIENoZWNrcyB0aGF0IGEgc3RyaW5nIGhhcyB0aGUgYG93bmVyL25hbWVgIHNoYXBlIGEgR2l0SHViIHJlcG9zaXRvcnkgcmVmZXJlbmNlXG4gKiBuZWVkcywgc28gYSBtYWxmb3JtZWQgb3ZlcnJpZGUgaXMgcmVqZWN0ZWQgYmVmb3JlIGl0IGlzIHNwbGljZWQgaW50byBhIFVSTC5cbiAqXG4gKiBAcGFyYW0gcmVwbyAtIFRoZSBjYW5kaWRhdGUgcmVwb3NpdG9yeSByZWZlcmVuY2UuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGl0IGlzIGEgd2VsbC1mb3JtZWQgYG93bmVyL25hbWVgIHBhaXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUmVwb1JlZmVyZW5jZShyZXBvOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9eW1xcdy4tXStcXC9bXFx3Li1dKyQvLnRlc3QocmVwbyk7XG59XG5cbi8qKlxuICogTG9va3MgYSBwbHVnaW4gaWQgdXAgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFNlbGVjdFBsdWdpblJlcG9QYXJhbXN9LlxuICogQHJldHVybnMgVGhlIHB1Ymxpc2hpbmcgYG93bmVyL25hbWVgIHJlcG8sIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlIGlkIGlzIG5vdCBhXG4gKiAgIHJlZ2lzdGVyZWQgY29tbXVuaXR5IHBsdWdpbiAoYSBwcml2YXRlIG9yIHVubGlzdGVkIHBsdWdpbiwgb3IgYSB0eXBvKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdFBsdWdpblJlcG8ocGFyYW1zOiBTZWxlY3RQbHVnaW5SZXBvUGFyYW1zKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHBhcmFtcy5lbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5pZCA9PT0gcGFyYW1zLnBsdWdpbklkKT8ucmVwbztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0NPLE1BQU0saUNBQWlDO0FBT3ZDLE1BQU0sOEJBQThCLENBQUMsV0FBVyxlQUFlO0FBTS9ELE1BQU0sOEJBQThCLENBQUMsWUFBWTtBQWlFakQsU0FBUyxvQkFBb0IsUUFBMkM7QUFDN0UsUUFBTSxFQUFFLFdBQVcsTUFBTSxRQUFRLElBQUk7QUFDckMsUUFBTSxjQUFjLFlBQVksU0FBWSxvQkFBb0IsWUFBWSxPQUFPO0FBQ25GLFNBQU8sc0JBQXNCLElBQUksYUFBYSxXQUFXLElBQUksU0FBUztBQUN4RTtBQVNPLFNBQVMscUJBQXFCLE1BQXVCO0FBQzFELFNBQU8scUJBQXFCLEtBQUssSUFBSTtBQUN2QztBQVNPLFNBQVMsaUJBQWlCLFFBQW9EO0FBQ25GLFNBQU8sT0FBTyxRQUFRLEtBQUssQ0FBQyxVQUFVLE1BQU0sT0FBTyxPQUFPLFFBQVEsR0FBRztBQUN2RTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -5,7 +5,7 @@
5
5
  * nothing but its plugin id — the id → repo lookup and the asset URL shapes.
6
6
  *
7
7
  * A plugin's built files never live in git: `.obsidian/plugins/*` is gitignored in
8
- * every fleet plugin repo, so a demo vault's injected community plugins exist on
8
+ * a plugin repo, so a demo vault's injected community plugins exist on
9
9
  * exactly the machine that once opened that vault in Obsidian. To install them
10
10
  * headlessly (see `demo-vault-bootstrap.ts`) two things must be derivable:
11
11
  *
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var config_directory_fallback_error_exports = {};
20
+ __export(config_directory_fallback_error_exports, {
21
+ ConfigDirectoryFallbackError: () => ConfigDirectoryFallbackError
22
+ });
23
+ module.exports = __toCommonJS(config_directory_fallback_error_exports);
24
+ class ConfigDirectoryFallbackError extends Error {
25
+ /**
26
+ The config folder the vault is actually using.
27
+ */
28
+ actualConfigDirectory;
29
+ /**
30
+ The config folder that was requested.
31
+ */
32
+ requestedConfigDirectory;
33
+ /**
34
+ Absolute path to the vault that was opened.
35
+ */
36
+ vaultPath;
37
+ /**
38
+ * Creates the error from the requested and actual config folders.
39
+ *
40
+ * @param params - The requested folder, the folder actually in use, and the vault path.
41
+ */
42
+ constructor(params) {
43
+ const { actualConfigDirectory, requestedConfigDirectory, vaultPath } = params;
44
+ super(
45
+ `Vault ${vaultPath} was opened with config folder ${actualConfigDirectory} but ${requestedConfigDirectory} was requested \u2014 Obsidian rejected the override or never saw it, and silently fell back. Check that ${requestedConfigDirectory} exists in the vault and is a name Obsidian accepts.`
46
+ );
47
+ this.name = "ConfigDirectoryFallbackError";
48
+ this.actualConfigDirectory = actualConfigDirectory;
49
+ this.requestedConfigDirectory = requestedConfigDirectory;
50
+ this.vaultPath = vaultPath;
51
+ }
52
+ }
53
+ // Annotate the CommonJS export names for ESM import in node:
54
+ 0 && (module.exports = {
55
+ ConfigDirectoryFallbackError
56
+ });
57
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbmZpZy1kaXJlY3RvcnktZmFsbGJhY2stZXJyb3IudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGUgZGlzdGluY3QgZXJyb3IgdGhyb3duIHdoZW4gYW4gb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgYm9vdGVkIGEgdmF1bHRcbiAqIGFnYWluc3QgYSAqKmRpZmZlcmVudCBjb25maWcgZm9sZGVyKiogdGhhbiB0aGUgb25lIHJlcXVlc3RlZCB0aHJvdWdoXG4gKiBgY29uZmlnRGlyZWN0b3J5YCBcdTIwMTQgT2JzaWRpYW4gcmVqZWN0ZWQgdGhlIG92ZXJyaWRlLCBvciBuZXZlciBzYXcgaXQsIGFuZCBzaWxlbnRseVxuICogZmVsbCBiYWNrIHRvIGAub2JzaWRpYW5gLlxuICpcbiAqIFRoZSBmYWxsYmFjayBpcyBzaWxlbnQgYnkgY29uc3RydWN0aW9uIChgc2V0Q29uZmlnRGlyYCBzd2FwcyBhbiBpbnZhbGlkIHZhbHVlXG4gKiBmb3IgdGhlIGRlZmF1bHQgd2l0aG91dCBhIHdvcmQpIGFuZCB0aGUgcmVzdWx0aW5nIHZhdWx0IGxvb2tzIHBlcmZlY3RseVxuICogaGVhbHRoeTogaXQgb3BlbnMsIGl0cyBsYXlvdXQgaXMgcmVhZHksIGFuZCBpdCByZXBvcnRzIHN1Y2Nlc3MuIFdoYXQgaXQgZG9lc1xuICogbm90IGhhdmUgaXMgdGhlIHNldHRpbmdzLCBlbmFibGVkIHBsdWdpbnMsIGFuZCB3b3Jrc3BhY2Ugb2YgdGhlIGZvbGRlciB0aGF0XG4gKiB3YXMgYXNrZWQgZm9yIFx1MjAxNCBzbyBhIHN1aXRlIHRoYXQgdmVyaWZpZXMgYmVoYXZpb3VyIGFnYWluc3QgYSByZWFsIHZhdWx0J3NcbiAqIHBsdWdpbiBzZXQgd291bGQgc2lsZW50bHkgdmVyaWZ5IG5vdGhpbmcuIEhlbmNlIGEgaGFyZCBmYWlsdXJlIHJhdGhlciB0aGFuIGFcbiAqIHdhcm5pbmcsIGFuZCwgdW5saWtlIGBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvcmAsIG5vIGtub2IgdG8gZG93bmdyYWRlIGl0OiB0aGVyZVxuICogaXMgbm8gdmVyc2lvbiBvZiB0aGlzIG91dGNvbWUgd29ydGggY29udGludWluZyBhZ2FpbnN0LlxuICpcbiAqIEV4cG9ydGVkIHNvIGNhbGxlcnMgb2YgYGNvbm5lY3RUb0NkcGAgLyB0aGUgdHJhbnNwb3J0IGNhbiBgaW5zdGFuY2VvZmAtbWF0Y2hcbiAqIHRoaXMgc3BlY2lmaWMgZmFpbHVyZS5cbiAqL1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvcn0gY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBjb25maWcgZm9sZGVyIHRoZSB2YXVsdCBpcyBhY3R1YWxseSB1c2luZywgYXMgcmVhZCBiYWNrIGZyb20gYGFwcC52YXVsdC5jb25maWdEaXJgLlxuICAgKi9cbiAgcmVhZG9ubHkgYWN0dWFsQ29uZmlnRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSBjb25maWcgZm9sZGVyIHRoYXQgd2FzIHJlcXVlc3RlZCB0aHJvdWdoIGBjb25maWdEaXJlY3RvcnlgLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdGVkQ29uZmlnRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gIEFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IHRoYXQgd2FzIG9wZW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0UGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgYm9vdGVkIG93bmVkIGluc3RhbmNlIHJlcG9ydHMgYSBkaWZmZXJlbnQgYGFwcC52YXVsdC5jb25maWdEaXJgXG4gKiB0aGFuIHRoZSByZXF1ZXN0ZWRcbiAqIHtAbGluayBDb25maWdEaXJlY3RvcnlGYWxsYmFja0Vycm9yQ29uc3RydWN0b3JQYXJhbXMucmVxdWVzdGVkQ29uZmlnRGlyZWN0b3J5fS5cbiAqIENhcnJpZXMgYm90aCBmb2xkZXIgbmFtZXMgYW5kIHRoZSB2YXVsdCBwYXRoIHNvIGNhbGxlcnMgY2FuIGBpbnN0YW5jZW9mYC1tYXRjaFxuICogYW5kIHJlcG9ydCB3aGljaCB2YXVsdCB3YXMgb3BlbmVkIHdyb25nbHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25maWdEaXJlY3RvcnlGYWxsYmFja0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgVGhlIGNvbmZpZyBmb2xkZXIgdGhlIHZhdWx0IGlzIGFjdHVhbGx5IHVzaW5nLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFjdHVhbENvbmZpZ0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgY29uZmlnIGZvbGRlciB0aGF0IHdhcyByZXF1ZXN0ZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVxdWVzdGVkQ29uZmlnRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gIEFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IHRoYXQgd2FzIG9wZW5lZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2YXVsdFBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgZXJyb3IgZnJvbSB0aGUgcmVxdWVzdGVkIGFuZCBhY3R1YWwgY29uZmlnIGZvbGRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcmVxdWVzdGVkIGZvbGRlciwgdGhlIGZvbGRlciBhY3R1YWxseSBpbiB1c2UsIGFuZCB0aGUgdmF1bHQgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IENvbmZpZ0RpcmVjdG9yeUZhbGxiYWNrRXJyb3JDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIGNvbnN0IHsgYWN0dWFsQ29uZmlnRGlyZWN0b3J5LCByZXF1ZXN0ZWRDb25maWdEaXJlY3RvcnksIHZhdWx0UGF0aCB9ID0gcGFyYW1zO1xuICAgIHN1cGVyKFxuICAgICAgYFZhdWx0ICR7dmF1bHRQYXRofSB3YXMgb3BlbmVkIHdpdGggY29uZmlnIGZvbGRlciAke2FjdHVhbENvbmZpZ0RpcmVjdG9yeX0gYnV0ICR7cmVxdWVzdGVkQ29uZmlnRGlyZWN0b3J5fSB3YXMgcmVxdWVzdGVkIFx1MjAxNCBgXG4gICAgICAgICsgJ09ic2lkaWFuIHJlamVjdGVkIHRoZSBvdmVycmlkZSBvciBuZXZlciBzYXcgaXQsIGFuZCBzaWxlbnRseSBmZWxsIGJhY2suICdcbiAgICAgICAgKyBgQ2hlY2sgdGhhdCAke3JlcXVlc3RlZENvbmZpZ0RpcmVjdG9yeX0gZXhpc3RzIGluIHRoZSB2YXVsdCBhbmQgaXMgYSBuYW1lIE9ic2lkaWFuIGFjY2VwdHMuYFxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ0NvbmZpZ0RpcmVjdG9yeUZhbGxiYWNrRXJyb3InO1xuICAgIHRoaXMuYWN0dWFsQ29uZmlnRGlyZWN0b3J5ID0gYWN0dWFsQ29uZmlnRGlyZWN0b3J5O1xuICAgIHRoaXMucmVxdWVzdGVkQ29uZmlnRGlyZWN0b3J5ID0gcmVxdWVzdGVkQ29uZmlnRGlyZWN0b3J5O1xuICAgIHRoaXMudmF1bHRQYXRoID0gdmF1bHRQYXRoO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0RPLE1BQU0scUNBQXFDLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUl0QztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1QsWUFBWSxRQUF1RDtBQUN4RSxVQUFNLEVBQUUsdUJBQXVCLDBCQUEwQixVQUFVLElBQUk7QUFDdkU7QUFBQSxNQUNFLFNBQVMsU0FBUyxrQ0FBa0MscUJBQXFCLFFBQVEsd0JBQXdCLDRHQUV2Rix3QkFBd0I7QUFBQSxJQUM1QztBQUNBLFNBQUssT0FBTztBQUNaLFNBQUssd0JBQXdCO0FBQzdCLFNBQUssMkJBQTJCO0FBQ2hDLFNBQUssWUFBWTtBQUFBLEVBQ25CO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==