obsidian-integration-testing 12.0.0 → 12.1.0

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 (176) 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/android-sdk.cjs +52 -0
  4. package/dist/lib/cjs/android-sdk.d.cts +29 -0
  5. package/dist/lib/cjs/app-startup-progress.cjs +87 -0
  6. package/dist/lib/cjs/app-startup-progress.d.cts +128 -0
  7. package/dist/lib/cjs/appium-server-marker.cjs +29 -32
  8. package/dist/lib/cjs/appium-server-marker.d.cts +22 -0
  9. package/dist/lib/cjs/avd-probe-verdict.cjs +90 -0
  10. package/dist/lib/cjs/avd-probe-verdict.d.cts +175 -0
  11. package/dist/lib/cjs/community-plugin-registry.cjs +1 -1
  12. package/dist/lib/cjs/community-plugin-registry.d.cts +1 -1
  13. package/dist/lib/cjs/config-directory-fallback-error.cjs +57 -0
  14. package/dist/lib/cjs/config-directory-fallback-error.d.cts +64 -0
  15. package/dist/lib/cjs/config-directory.cjs +46 -0
  16. package/dist/lib/cjs/config-directory.d.cts +45 -0
  17. package/dist/lib/cjs/connect-to-cdp.cjs +13 -7
  18. package/dist/lib/cjs/connect-to-cdp.d.cts +19 -0
  19. package/dist/lib/cjs/demo-vault-bootstrap.cjs +1 -1
  20. package/dist/lib/cjs/demo-vault-bootstrap.d.cts +3 -2
  21. package/dist/lib/cjs/demo-vault-populate.cjs +3 -2
  22. package/dist/lib/cjs/device-readiness.cjs +38 -3
  23. package/dist/lib/cjs/device-readiness.d.cts +83 -9
  24. package/dist/lib/cjs/emulator-arguments.cjs +6 -2
  25. package/dist/lib/cjs/emulator-arguments.d.cts +26 -0
  26. package/dist/lib/cjs/emulator-backend.cjs +71 -0
  27. package/dist/lib/cjs/emulator-backend.d.cts +76 -0
  28. package/dist/lib/cjs/emulator-liveness.cjs +72 -0
  29. package/dist/lib/cjs/emulator-liveness.d.cts +158 -0
  30. package/dist/lib/cjs/emulator-snapshot.cjs +57 -0
  31. package/dist/lib/cjs/emulator-snapshot.d.cts +68 -0
  32. package/dist/lib/cjs/global-setup-core.cjs +30 -30
  33. package/dist/lib/cjs/global-setup-core.d.cts +27 -2
  34. package/dist/lib/cjs/headless-vault-config.cjs +51 -0
  35. package/dist/lib/cjs/headless-vault-config.d.cts +67 -0
  36. package/dist/lib/cjs/index.cjs +12 -1
  37. package/dist/lib/cjs/index.d.cts +6 -1
  38. package/dist/lib/cjs/library.cjs +1 -1
  39. package/dist/lib/cjs/mobile-input.cjs +14 -2
  40. package/dist/lib/cjs/mobile-input.d.cts +5 -9
  41. package/dist/lib/cjs/namespace-bootstrap.cjs +1 -1
  42. package/dist/lib/cjs/obsidian-instance.cjs +52 -3
  43. package/dist/lib/cjs/obsidian-instance.d.cts +12 -0
  44. package/dist/lib/cjs/open-obsidian-settings-tab.cjs +1 -1
  45. package/dist/lib/cjs/open-obsidian-settings-tab.d.cts +3 -2
  46. package/dist/lib/cjs/owned-instance-exit-marker.cjs +99 -0
  47. package/dist/lib/cjs/owned-instance-exit-marker.d.cts +106 -0
  48. package/dist/lib/cjs/owned-instance-exited-error.cjs +106 -0
  49. package/dist/lib/cjs/owned-instance-exited-error.d.cts +98 -0
  50. package/dist/lib/cjs/owned-vault-seed.cjs +9 -5
  51. package/dist/lib/cjs/owned-vault-seed.d.cts +24 -3
  52. package/dist/lib/cjs/parent-liveness.cjs +42 -5
  53. package/dist/lib/cjs/parent-liveness.d.cts +37 -5
  54. package/dist/lib/cjs/port-owner.cjs +61 -0
  55. package/dist/lib/cjs/port-owner.d.cts +47 -0
  56. package/dist/lib/cjs/process-capture.cjs +62 -0
  57. package/dist/lib/cjs/process-capture.d.cts +83 -0
  58. package/dist/lib/cjs/process-exit-message.cjs +14 -8
  59. package/dist/lib/cjs/process-exit-message.d.cts +37 -3
  60. package/dist/lib/cjs/process-liveness.cjs +51 -0
  61. package/dist/lib/cjs/process-liveness.d.cts +18 -0
  62. package/dist/lib/cjs/run-version-matrix.cjs +1 -1
  63. package/dist/lib/cjs/run-version-matrix.d.cts +1 -1
  64. package/dist/lib/cjs/teardown-verdict.cjs +53 -0
  65. package/dist/lib/cjs/teardown-verdict.d.cts +69 -0
  66. package/dist/lib/cjs/temporary-vault.cjs +43 -8
  67. package/dist/lib/cjs/temporary-vault.d.cts +47 -5
  68. package/dist/lib/cjs/transport-appium.cjs +102 -17
  69. package/dist/lib/cjs/transport-appium.d.cts +53 -3
  70. package/dist/lib/cjs/transport-desktop-cdp.cjs +195 -6
  71. package/dist/lib/cjs/transport-desktop-cdp.d.cts +99 -0
  72. package/dist/lib/cjs/transport-factory.cjs +951 -133
  73. package/dist/lib/cjs/transport-options.cjs +11 -3
  74. package/dist/lib/cjs/transport-options.d.cts +131 -12
  75. package/dist/lib/cjs/transport.cjs +1 -1
  76. package/dist/lib/cjs/transport.d.cts +7 -1
  77. package/dist/lib/cjs/vault-plugin-install.cjs +40 -0
  78. package/dist/lib/cjs/vault-plugin-install.d.cts +64 -0
  79. package/dist/lib/cjs/vault-teardown-verdict.cjs +42 -0
  80. package/dist/lib/cjs/vault-teardown-verdict.d.cts +57 -0
  81. package/dist/lib/cjs/version-matrix.cjs +1 -1
  82. package/dist/lib/cjs/version-matrix.d.cts +2 -2
  83. package/dist/lib/cjs/webview-cdp.cjs +6 -7
  84. package/dist/lib/cjs/webview-cdp.d.cts +5 -1
  85. package/dist/lib/esm/adb-device-list.d.mts +72 -0
  86. package/dist/lib/esm/adb-device-list.mjs +28 -0
  87. package/dist/lib/esm/android-sdk.d.mts +29 -0
  88. package/dist/lib/esm/android-sdk.mjs +18 -0
  89. package/dist/lib/esm/app-startup-progress.d.mts +128 -0
  90. package/dist/lib/esm/app-startup-progress.mjs +59 -0
  91. package/dist/lib/esm/appium-server-marker.d.mts +22 -0
  92. package/dist/lib/esm/appium-server-marker.mjs +28 -22
  93. package/dist/lib/esm/avd-probe-verdict.d.mts +175 -0
  94. package/dist/lib/esm/avd-probe-verdict.mjs +62 -0
  95. package/dist/lib/esm/community-plugin-registry.d.mts +1 -1
  96. package/dist/lib/esm/community-plugin-registry.mjs +1 -1
  97. package/dist/lib/esm/config-directory-fallback-error.d.mts +64 -0
  98. package/dist/lib/esm/config-directory-fallback-error.mjs +33 -0
  99. package/dist/lib/esm/config-directory.d.mts +45 -0
  100. package/dist/lib/esm/config-directory.mjs +21 -0
  101. package/dist/lib/esm/connect-to-cdp.d.mts +19 -0
  102. package/dist/lib/esm/connect-to-cdp.mjs +13 -7
  103. package/dist/lib/esm/demo-vault-bootstrap.d.mts +3 -2
  104. package/dist/lib/esm/demo-vault-bootstrap.mjs +1 -1
  105. package/dist/lib/esm/demo-vault-populate.mjs +3 -2
  106. package/dist/lib/esm/device-readiness.d.mts +83 -9
  107. package/dist/lib/esm/device-readiness.mjs +34 -2
  108. package/dist/lib/esm/emulator-arguments.d.mts +26 -0
  109. package/dist/lib/esm/emulator-arguments.mjs +6 -2
  110. package/dist/lib/esm/emulator-backend.d.mts +76 -0
  111. package/dist/lib/esm/emulator-backend.mjs +45 -0
  112. package/dist/lib/esm/emulator-liveness.d.mts +158 -0
  113. package/dist/lib/esm/emulator-liveness.mjs +47 -0
  114. package/dist/lib/esm/emulator-snapshot.d.mts +68 -0
  115. package/dist/lib/esm/emulator-snapshot.mjs +32 -0
  116. package/dist/lib/esm/global-setup-core.d.mts +27 -2
  117. package/dist/lib/esm/global-setup-core.mjs +34 -35
  118. package/dist/lib/esm/headless-vault-config.d.mts +67 -0
  119. package/dist/lib/esm/headless-vault-config.mjs +31 -0
  120. package/dist/lib/esm/index.d.mts +6 -1
  121. package/dist/lib/esm/index.mjs +11 -1
  122. package/dist/lib/esm/library.mjs +1 -1
  123. package/dist/lib/esm/mobile-input.d.mts +5 -9
  124. package/dist/lib/esm/mobile-input.mjs +14 -2
  125. package/dist/lib/esm/namespace-bootstrap.mjs +1 -1
  126. package/dist/lib/esm/obsidian-instance.d.mts +12 -0
  127. package/dist/lib/esm/obsidian-instance.mjs +55 -3
  128. package/dist/lib/esm/open-obsidian-settings-tab.d.mts +3 -2
  129. package/dist/lib/esm/open-obsidian-settings-tab.mjs +1 -1
  130. package/dist/lib/esm/owned-instance-exit-marker.d.mts +106 -0
  131. package/dist/lib/esm/owned-instance-exit-marker.mjs +78 -0
  132. package/dist/lib/esm/owned-instance-exited-error.d.mts +98 -0
  133. package/dist/lib/esm/owned-instance-exited-error.mjs +81 -0
  134. package/dist/lib/esm/owned-vault-seed.d.mts +24 -3
  135. package/dist/lib/esm/owned-vault-seed.mjs +9 -5
  136. package/dist/lib/esm/parent-liveness.d.mts +37 -5
  137. package/dist/lib/esm/parent-liveness.mjs +42 -5
  138. package/dist/lib/esm/port-owner.d.mts +47 -0
  139. package/dist/lib/esm/port-owner.mjs +36 -0
  140. package/dist/lib/esm/process-capture.d.mts +83 -0
  141. package/dist/lib/esm/process-capture.mjs +38 -0
  142. package/dist/lib/esm/process-exit-message.d.mts +37 -3
  143. package/dist/lib/esm/process-exit-message.mjs +13 -8
  144. package/dist/lib/esm/process-liveness.d.mts +18 -0
  145. package/dist/lib/esm/process-liveness.mjs +17 -0
  146. package/dist/lib/esm/run-version-matrix.d.mts +1 -1
  147. package/dist/lib/esm/run-version-matrix.mjs +1 -1
  148. package/dist/lib/esm/teardown-verdict.d.mts +69 -0
  149. package/dist/lib/esm/teardown-verdict.mjs +28 -0
  150. package/dist/lib/esm/temporary-vault.d.mts +47 -5
  151. package/dist/lib/esm/temporary-vault.mjs +43 -8
  152. package/dist/lib/esm/transport-appium.d.mts +53 -3
  153. package/dist/lib/esm/transport-appium.mjs +108 -17
  154. package/dist/lib/esm/transport-desktop-cdp.d.mts +99 -0
  155. package/dist/lib/esm/transport-desktop-cdp.mjs +202 -7
  156. package/dist/lib/esm/transport-factory.mjs +995 -138
  157. package/dist/lib/esm/transport-options.d.mts +131 -12
  158. package/dist/lib/esm/transport-options.mjs +9 -2
  159. package/dist/lib/esm/transport.d.mts +7 -1
  160. package/dist/lib/esm/vault-plugin-install.d.mts +64 -0
  161. package/dist/lib/esm/vault-plugin-install.mjs +20 -0
  162. package/dist/lib/esm/vault-teardown-verdict.d.mts +57 -0
  163. package/dist/lib/esm/vault-teardown-verdict.mjs +18 -0
  164. package/dist/lib/esm/version-matrix.d.mts +2 -2
  165. package/dist/lib/esm/version-matrix.mjs +1 -1
  166. package/dist/lib/esm/webview-cdp.d.mts +5 -1
  167. package/dist/lib/esm/webview-cdp.mjs +6 -7
  168. package/package.json +24 -23
  169. package/dist/lib/cjs/native-dialog-monitor.cjs +0 -192
  170. package/dist/lib/cjs/native-dialog-monitor.d.cts +0 -66
  171. package/dist/lib/cjs/obsidian-namespace.cjs +0 -17
  172. package/dist/lib/cjs/obsidian-namespace.d.cts +0 -128
  173. package/dist/lib/esm/native-dialog-monitor.d.mts +0 -66
  174. package/dist/lib/esm/native-dialog-monitor.mjs +0 -158
  175. package/dist/lib/esm/obsidian-namespace.d.mts +0 -128
  176. package/dist/lib/esm/obsidian-namespace.mjs +0 -1
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Cheap, synchronous "is this PID still running?" probe.
5
+ *
6
+ * Signal `0` performs the permission and existence checks without delivering a
7
+ * signal, on Windows as well as POSIX, so it costs nothing at teardown-poll
8
+ * frequency. `EPERM` means the process exists but is owned by another user —
9
+ * still alive, and the distinction matters: reading it as dead is how a
10
+ * teardown convinces itself a process it could not touch is gone.
11
+ */
12
+ /**
13
+ * Checks whether a process is still running.
14
+ *
15
+ * @param pid - The PID to probe.
16
+ * @returns `true` when the process exists.
17
+ */
18
+ export declare function checkIsProcessAlive(pid: number): boolean;
@@ -61,4 +61,4 @@ function logPlan(resolvedSpecs, entries) {
61
61
  0 && (module.exports = {
62
62
  runObsidianVersionMatrix
63
63
  });
64
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3J1bi12ZXJzaW9uLW1hdHJpeC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgcnVubmVyIHRoYXQgZXhlY3V0ZXMgYSBzdWl0ZSBvbmNlIHBlciAqKmRpc3RpbmN0Kiogc3VwcG9ydGVkXG4gKiBPYnNpZGlhbiB2ZXJzaW9uLlxuICpcbiAqIFRoaW4gZ2x1ZSBvdmVyIHRoZSBwdXJlIGB2ZXJzaW9uLW1hdHJpeC50c2AgZGVjaXNpb24gbGF5ZXI6IHRoZSBvbmx5IHRoaW5nc1xuICogdGhhdCBoYXBwZW4gaGVyZSBhcmUgdGhlIHNpbmdsZSBtYW5pZmVzdCBmZXRjaCBhbmQgdGhlIGxvZ2dpbmcuIEV2ZXJ5dGhpbmdcbiAqIHRoYXQgZGVjaWRlcyBcdTIwMTQgbm9ybWFsaXppbmcgdGhlIHJlcXVlc3RlZCBzcGVjaWZpZXJzLCByZXNvbHZpbmcgdGhlbSxcbiAqIGRlLWR1cGxpY2F0aW5nIG9uIHRoZSByZXNvbHZlZCB2ZXJzaW9uLCBzZXF1ZW5jaW5nIHRoZSBydW5zLCBhbmQgYnVpbGRpbmcgdGhlXG4gKiBmYWlsdXJlIHN1bW1hcnkgXHUyMDE0IGlzIHB1cmUgYW5kIHVuaXQtdGVzdGVkIG5leHQgZG9vci5cbiAqXG4gKiBUaGUgbG9vcCBsaXZlcyBhYm92ZSB0aGUgdHJhbnNwb3J0IHJhdGhlciB0aGFuIGluc2lkZSBpdCBiZWNhdXNlIGEgdGVzdFxuICogZnJhbWV3b3JrJ3MgZ2xvYmFsIHNldHVwIGNhbm5vdCByZS1ydW4gaXRzIG93biB0ZXN0IGZpbGVzOiBpdCBsYXVuY2hlcyBvbmVcbiAqIGluc3RhbmNlIGZvciBvbmUgcnVuLiBLZWVwaW5nIHRoZSBsb29wIGZyYW1ld29yay1hZ25vc3RpYyAodGhlIGNhbGxlciBzdXBwbGllc1xuICogYHJ1bmApIGlzIHdoYXQgbGV0cyBWaXRlc3QsIEplc3QsIGFuZCBtYW51YWwgY29uc3VtZXJzIGFsbCBpbmhlcml0IGl0IChMNikuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZ2x1ZSAobmV0d29yayBmZXRjaCArIGxvZ2dpbmcpIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5LFxuICBSZXNvbHZlZFZlcnNpb25TcGVjXG59IGZyb20gJy4vdmVyc2lvbi1tYXRyaXguY2pzJztcblxuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGZldGNoRGVza3RvcFJlbGVhc2VzTWFuaWZlc3QgfSBmcm9tICcuL29ic2lkaWFuLXZlcnNpb24tc3dpdGNoLmNqcyc7XG5pbXBvcnQge1xuICBidWlsZFZlcnNpb25NYXRyaXgsXG4gIGZvcm1hdFZlcnNpb25NYXRyaXhQbGFuLFxuICBmb3JtYXRWZXJzaW9uTWF0cml4UnVuSGVhZGVyLFxuICBoYXNDaGFubmVsU3BlYyxcbiAgcmVzb2x2ZVJlcXVlc3RlZFNwZWNzLFxuICByZXNvbHZlVmVyc2lvblNwZWNzLFxuICBydW5WZXJzaW9uTWF0cml4RW50cmllc1xufSBmcm9tICcuL3ZlcnNpb24tbWF0cml4LmNqcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4UGFyYW1zIHtcbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHN1aXRlcyBhZ2FpbnN0IG9uZSBjb25jcmV0ZSBPYnNpZGlhbiB2ZXJzaW9uLCB0aHJvd2luZyBvbiBmYWlsdXJlLlxuICAgKlxuICAgKiBUaGUgZW50cnkncyBgdmVyc2lvbmAgaXMgdGhlIGNvbmNyZXRlIGB4LnkuemAgdG8gcGluIFx1MjAxNCB0eXBpY2FsbHkgZm9yd2FyZGVkIHRvXG4gICAqIHRoZSB0ZXN0LXJ1bm5lciBjaGlsZCBhcyBgT0JTSURJQU5fVkVSU0lPTmAuXG4gICAqL1xuICByZWFkb25seSBydW46IChlbnRyeTogT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBzcGVjaWZpZXJzIHRvIHJ1biBhZ2FpbnN0OiBhbiBhcnJheSwgb3IgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nXG4gICAqIHNvIGFuIGVudiB2YXIgY2FuIGJlIHBhc3NlZCBzdHJhaWdodCB0aHJvdWdoLlxuICAgKlxuICAgKiBFYWNoIGFjY2VwdHMgYW4gZXhwbGljaXQgYCd4LnkueidgLCBgJ3B1YmxpYy1sYXRlc3QnYCwgb3IgYCdjYXRhbHlzdC1sYXRlc3QnYC5cbiAgICogRGVmYXVsdHMgdG8gYm90aCBlbmRzIG9mIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgKEc5OSkgd2hlbiBvbWl0dGVkIG9yIGVtcHR5LCBhbmRcbiAgICogdGhlIGxpc3QgaXMgYWx3YXlzIGRlLWR1cGxpY2F0ZWQgb24gdGhlICoqcmVzb2x2ZWQqKiB2ZXJzaW9uIFx1MjAxNCBzbyB3aGVuIHB1YmxpY1xuICAgKiBoYXMgY2F1Z2h0IHVwIHRvIGNhdGFseXN0LCB0aGUgc3VpdGVzIHJ1biBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbnM/OiByZWFkb25seSBzdHJpbmdbXSB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSdW5zIGEgc3VpdGUgb25jZSBwZXIgZGlzdGluY3Qgc3VwcG9ydGVkIE9ic2lkaWFuIHZlcnNpb24uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwZXItdmVyc2lvbiBydW5uZXIgYW5kIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbnMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgZXZlcnkgdmVyc2lvbiBoYXMgcnVuIHN1Y2Nlc3NmdWxseS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgbm8gdmVyc2lvbiBjb3VsZCBiZSByZXNvbHZlZCwgb3IgYW4ge0BsaW5rIEFnZ3JlZ2F0ZUVycm9yfVxuICogICBuYW1pbmcgZXZlcnkgdmVyc2lvbiB3aG9zZSBydW4gZmFpbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4KHBhcmFtczogUnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcnVuLCB2ZXJzaW9ucyB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHsgaXNEZWZhdWx0LCBzcGVjcyB9ID0gcmVzb2x2ZVJlcXVlc3RlZFNwZWNzKHZlcnNpb25zKTtcbiAgY29uc3QgbWFuaWZlc3QgPSBoYXNDaGFubmVsU3BlYyhzcGVjcykgPyBhd2FpdCBmZXRjaERlc2t0b3BSZWxlYXNlc01hbmlmZXN0KCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHsgZHJvcHBlZFNwZWNzLCByZXNvbHZlZFNwZWNzIH0gPSByZXNvbHZlVmVyc2lvblNwZWNzKHtcbiAgICBtYW5pZmVzdCxcbiAgICAvLyBUaGUgZGVmYXVsdCBsaXN0IG11c3Qgbm90IGJyZWFrIGV2ZXJ5IGNvbnN1bWVyJ3MgZ2F0ZSB3aGVuIGEgY2hhbm5lbCBpc1xuICAgIC8vIE1vbWVudGFyaWx5IGFic2VudCBmcm9tIHRoZSBtYW5pZmVzdDsgYW4gZXhwbGljaXRseSByZXF1ZXN0ZWQgc3BlY2lmaWVyXG4gICAgLy8gVGhhdCBjYW5ub3QgcmVzb2x2ZSBpcyBhIHJlYWwgZXJyb3IuXG4gICAgc2hvdWxkVG9sZXJhdGVVbnJlc29sdmFibGVTcGVjczogaXNEZWZhdWx0LFxuICAgIHNwZWNzXG4gIH0pO1xuXG4gIGZvciAoY29uc3QgeyByZWFzb24sIHNwZWMgfSBvZiBkcm9wcGVkU3BlY3MpIHtcbiAgICBsb2dNYXRyaXgoYFNraXBwaW5nIFwiJHtzcGVjfVwiOiAke3JlYXNvbn1gKTtcbiAgfVxuXG4gIGNvbnN0IGVudHJpZXMgPSBidWlsZFZlcnNpb25NYXRyaXgocmVzb2x2ZWRTcGVjcyk7XG4gIGxvZ1BsYW4ocmVzb2x2ZWRTcGVjcywgZW50cmllcyk7XG5cbiAgYXdhaXQgcnVuVmVyc2lvbk1hdHJpeEVudHJpZXMoe1xuICAgIGVudHJpZXMsXG4gICAgb25FbnRyeVN0YXJ0OiAoaGVhZGVyUGFyYW1zKSA9PiB7XG4gICAgICBsb2dNYXRyaXgoZm9ybWF0VmVyc2lvbk1hdHJpeFJ1bkhlYWRlcihoZWFkZXJQYXJhbXMpKTtcbiAgICB9LFxuICAgIHJ1blxuICB9KTtcbn1cblxuLyoqXG4gKiBMb2dzIGEgbWF0cml4IG1lc3NhZ2UgdW5kZXIgYSBjb25zaXN0ZW50IHByZWZpeC5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAqL1xuZnVuY3Rpb24gbG9nTWF0cml4KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBsb2coYFt2ZXJzaW9uLW1hdHJpeF0gJHttZXNzYWdlfWApO1xufVxuXG4vKipcbiAqIExvZ3Mgd2hhdCB0aGUgc3BlY2lmaWVycyByZXNvbHZlZCB0byBhbmQgaG93IG1hbnkgcnVucyB0aGF0IGltcGxpZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdmVkU3BlY3MgLSBUaGUgcmVzb2x2ZWQgc3BlY2lmaWVycywgaW4gcmVxdWVzdGVkIG9yZGVyLlxuICogQHBhcmFtIGVudHJpZXMgLSBUaGUgZGUtZHVwbGljYXRlZCBtYXRyaXguXG4gKi9cbmZ1bmN0aW9uIGxvZ1BsYW4ocmVzb2x2ZWRTcGVjczogcmVhZG9ubHkgUmVzb2x2ZWRWZXJzaW9uU3BlY1tdLCBlbnRyaWVzOiByZWFkb25seSBPYnNpZGlhblZlcnNpb25NYXRyaXhFbnRyeVtdKTogdm9pZCB7XG4gIGZvciAoY29uc3QgbGluZSBvZiBmb3JtYXRWZXJzaW9uTWF0cml4UGxhbih7IGVudHJpZXMsIHJlc29sdmVkU3BlY3MgfSkpIHtcbiAgICBsb2dNYXRyaXgobGluZSk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5QkEsaUJBQW9CO0FBQ3BCLHFDQUE2QztBQUM3Qyw0QkFRTztBQWtDUCxlQUFzQix5QkFBeUIsUUFBdUQ7QUFDcEcsUUFBTSxFQUFFLEtBQUssU0FBUyxJQUFJO0FBRTFCLFFBQU0sRUFBRSxXQUFXLE1BQU0sUUFBSSw2Q0FBc0IsUUFBUTtBQUMzRCxRQUFNLGVBQVcsc0NBQWUsS0FBSyxJQUFJLFVBQU0sNkRBQTZCLElBQUk7QUFDaEYsUUFBTSxFQUFFLGNBQWMsY0FBYyxRQUFJLDJDQUFvQjtBQUFBLElBQzFEO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJQSxpQ0FBaUM7QUFBQSxJQUNqQztBQUFBLEVBQ0YsQ0FBQztBQUVELGFBQVcsRUFBRSxRQUFRLEtBQUssS0FBSyxjQUFjO0FBQzNDLGNBQVUsYUFBYSxJQUFJLE1BQU0sTUFBTSxFQUFFO0FBQUEsRUFDM0M7QUFFQSxRQUFNLGNBQVUsMENBQW1CLGFBQWE7QUFDaEQsVUFBUSxlQUFlLE9BQU87QUFFOUIsWUFBTSwrQ0FBd0I7QUFBQSxJQUM1QjtBQUFBLElBQ0EsY0FBYyxDQUFDLGlCQUFpQjtBQUM5QixvQkFBVSxvREFBNkIsWUFBWSxDQUFDO0FBQUEsSUFDdEQ7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFPQSxTQUFTLFVBQVUsU0FBdUI7QUFDeEMsc0JBQUksb0JBQW9CLE9BQU8sRUFBRTtBQUNuQztBQVFBLFNBQVMsUUFBUSxlQUErQyxTQUFzRDtBQUNwSCxhQUFXLFlBQVEsK0NBQXdCLEVBQUUsU0FBUyxjQUFjLENBQUMsR0FBRztBQUN0RSxjQUFVLElBQUk7QUFBQSxFQUNoQjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
64
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3J1bi12ZXJzaW9uLW1hdHJpeC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgcnVubmVyIHRoYXQgZXhlY3V0ZXMgYSBzdWl0ZSBvbmNlIHBlciAqKmRpc3RpbmN0Kiogc3VwcG9ydGVkXG4gKiBPYnNpZGlhbiB2ZXJzaW9uLlxuICpcbiAqIFRoaW4gZ2x1ZSBvdmVyIHRoZSBwdXJlIGB2ZXJzaW9uLW1hdHJpeC50c2AgZGVjaXNpb24gbGF5ZXI6IHRoZSBvbmx5IHRoaW5nc1xuICogdGhhdCBoYXBwZW4gaGVyZSBhcmUgdGhlIHNpbmdsZSBtYW5pZmVzdCBmZXRjaCBhbmQgdGhlIGxvZ2dpbmcuIEV2ZXJ5dGhpbmdcbiAqIHRoYXQgZGVjaWRlcyBcdTIwMTQgbm9ybWFsaXppbmcgdGhlIHJlcXVlc3RlZCBzcGVjaWZpZXJzLCByZXNvbHZpbmcgdGhlbSxcbiAqIGRlLWR1cGxpY2F0aW5nIG9uIHRoZSByZXNvbHZlZCB2ZXJzaW9uLCBzZXF1ZW5jaW5nIHRoZSBydW5zLCBhbmQgYnVpbGRpbmcgdGhlXG4gKiBmYWlsdXJlIHN1bW1hcnkgXHUyMDE0IGlzIHB1cmUgYW5kIHVuaXQtdGVzdGVkIG5leHQgZG9vci5cbiAqXG4gKiBUaGUgbG9vcCBsaXZlcyBhYm92ZSB0aGUgdHJhbnNwb3J0IHJhdGhlciB0aGFuIGluc2lkZSBpdCBiZWNhdXNlIGEgdGVzdFxuICogZnJhbWV3b3JrJ3MgZ2xvYmFsIHNldHVwIGNhbm5vdCByZS1ydW4gaXRzIG93biB0ZXN0IGZpbGVzOiBpdCBsYXVuY2hlcyBvbmVcbiAqIGluc3RhbmNlIGZvciBvbmUgcnVuLiBLZWVwaW5nIHRoZSBsb29wIGZyYW1ld29yay1hZ25vc3RpYyAodGhlIGNhbGxlciBzdXBwbGllc1xuICogYHJ1bmApIGlzIHdoYXQgbGV0cyBWaXRlc3QsIEplc3QsIGFuZCBtYW51YWwgY29uc3VtZXJzIGFsbCBpbmhlcml0IGl0IChMNikuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZ2x1ZSAobmV0d29yayBmZXRjaCArIGxvZ2dpbmcpIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5LFxuICBSZXNvbHZlZFZlcnNpb25TcGVjXG59IGZyb20gJy4vdmVyc2lvbi1tYXRyaXguY2pzJztcblxuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGZldGNoRGVza3RvcFJlbGVhc2VzTWFuaWZlc3QgfSBmcm9tICcuL29ic2lkaWFuLXZlcnNpb24tc3dpdGNoLmNqcyc7XG5pbXBvcnQge1xuICBidWlsZFZlcnNpb25NYXRyaXgsXG4gIGZvcm1hdFZlcnNpb25NYXRyaXhQbGFuLFxuICBmb3JtYXRWZXJzaW9uTWF0cml4UnVuSGVhZGVyLFxuICBoYXNDaGFubmVsU3BlYyxcbiAgcmVzb2x2ZVJlcXVlc3RlZFNwZWNzLFxuICByZXNvbHZlVmVyc2lvblNwZWNzLFxuICBydW5WZXJzaW9uTWF0cml4RW50cmllc1xufSBmcm9tICcuL3ZlcnNpb24tbWF0cml4LmNqcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4UGFyYW1zIHtcbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHN1aXRlcyBhZ2FpbnN0IG9uZSBjb25jcmV0ZSBPYnNpZGlhbiB2ZXJzaW9uLCB0aHJvd2luZyBvbiBmYWlsdXJlLlxuICAgKlxuICAgKiBUaGUgZW50cnkncyBgdmVyc2lvbmAgaXMgdGhlIGNvbmNyZXRlIGB4LnkuemAgdG8gcGluIFx1MjAxNCB0eXBpY2FsbHkgZm9yd2FyZGVkIHRvXG4gICAqIHRoZSB0ZXN0LXJ1bm5lciBjaGlsZCBhcyBgT0JTSURJQU5fVkVSU0lPTmAuXG4gICAqL1xuICByZWFkb25seSBydW46IChlbnRyeTogT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBzcGVjaWZpZXJzIHRvIHJ1biBhZ2FpbnN0OiBhbiBhcnJheSwgb3IgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nXG4gICAqIHNvIGFuIGVudiB2YXIgY2FuIGJlIHBhc3NlZCBzdHJhaWdodCB0aHJvdWdoLlxuICAgKlxuICAgKiBFYWNoIGFjY2VwdHMgYW4gZXhwbGljaXQgYCd4LnkueidgLCBgJ3B1YmxpYy1sYXRlc3QnYCwgb3IgYCdjYXRhbHlzdC1sYXRlc3QnYC5cbiAgICogRGVmYXVsdHMgdG8gYm90aCBlbmRzIG9mIHRoZSBzdXBwb3J0ZWQgcmFuZ2Ugd2hlbiBvbWl0dGVkIG9yIGVtcHR5LCBhbmRcbiAgICogdGhlIGxpc3QgaXMgYWx3YXlzIGRlLWR1cGxpY2F0ZWQgb24gdGhlICoqcmVzb2x2ZWQqKiB2ZXJzaW9uIFx1MjAxNCBzbyB3aGVuIHB1YmxpY1xuICAgKiBoYXMgY2F1Z2h0IHVwIHRvIGNhdGFseXN0LCB0aGUgc3VpdGVzIHJ1biBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbnM/OiByZWFkb25seSBzdHJpbmdbXSB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSdW5zIGEgc3VpdGUgb25jZSBwZXIgZGlzdGluY3Qgc3VwcG9ydGVkIE9ic2lkaWFuIHZlcnNpb24uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwZXItdmVyc2lvbiBydW5uZXIgYW5kIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbnMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgZXZlcnkgdmVyc2lvbiBoYXMgcnVuIHN1Y2Nlc3NmdWxseS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgbm8gdmVyc2lvbiBjb3VsZCBiZSByZXNvbHZlZCwgb3IgYW4ge0BsaW5rIEFnZ3JlZ2F0ZUVycm9yfVxuICogICBuYW1pbmcgZXZlcnkgdmVyc2lvbiB3aG9zZSBydW4gZmFpbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4KHBhcmFtczogUnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcnVuLCB2ZXJzaW9ucyB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHsgaXNEZWZhdWx0LCBzcGVjcyB9ID0gcmVzb2x2ZVJlcXVlc3RlZFNwZWNzKHZlcnNpb25zKTtcbiAgY29uc3QgbWFuaWZlc3QgPSBoYXNDaGFubmVsU3BlYyhzcGVjcykgPyBhd2FpdCBmZXRjaERlc2t0b3BSZWxlYXNlc01hbmlmZXN0KCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHsgZHJvcHBlZFNwZWNzLCByZXNvbHZlZFNwZWNzIH0gPSByZXNvbHZlVmVyc2lvblNwZWNzKHtcbiAgICBtYW5pZmVzdCxcbiAgICAvLyBUaGUgZGVmYXVsdCBsaXN0IG11c3Qgbm90IGJyZWFrIGV2ZXJ5IGNvbnN1bWVyJ3MgZ2F0ZSB3aGVuIGEgY2hhbm5lbCBpc1xuICAgIC8vIE1vbWVudGFyaWx5IGFic2VudCBmcm9tIHRoZSBtYW5pZmVzdDsgYW4gZXhwbGljaXRseSByZXF1ZXN0ZWQgc3BlY2lmaWVyXG4gICAgLy8gVGhhdCBjYW5ub3QgcmVzb2x2ZSBpcyBhIHJlYWwgZXJyb3IuXG4gICAgc2hvdWxkVG9sZXJhdGVVbnJlc29sdmFibGVTcGVjczogaXNEZWZhdWx0LFxuICAgIHNwZWNzXG4gIH0pO1xuXG4gIGZvciAoY29uc3QgeyByZWFzb24sIHNwZWMgfSBvZiBkcm9wcGVkU3BlY3MpIHtcbiAgICBsb2dNYXRyaXgoYFNraXBwaW5nIFwiJHtzcGVjfVwiOiAke3JlYXNvbn1gKTtcbiAgfVxuXG4gIGNvbnN0IGVudHJpZXMgPSBidWlsZFZlcnNpb25NYXRyaXgocmVzb2x2ZWRTcGVjcyk7XG4gIGxvZ1BsYW4ocmVzb2x2ZWRTcGVjcywgZW50cmllcyk7XG5cbiAgYXdhaXQgcnVuVmVyc2lvbk1hdHJpeEVudHJpZXMoe1xuICAgIGVudHJpZXMsXG4gICAgb25FbnRyeVN0YXJ0OiAoaGVhZGVyUGFyYW1zKSA9PiB7XG4gICAgICBsb2dNYXRyaXgoZm9ybWF0VmVyc2lvbk1hdHJpeFJ1bkhlYWRlcihoZWFkZXJQYXJhbXMpKTtcbiAgICB9LFxuICAgIHJ1blxuICB9KTtcbn1cblxuLyoqXG4gKiBMb2dzIGEgbWF0cml4IG1lc3NhZ2UgdW5kZXIgYSBjb25zaXN0ZW50IHByZWZpeC5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAqL1xuZnVuY3Rpb24gbG9nTWF0cml4KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBsb2coYFt2ZXJzaW9uLW1hdHJpeF0gJHttZXNzYWdlfWApO1xufVxuXG4vKipcbiAqIExvZ3Mgd2hhdCB0aGUgc3BlY2lmaWVycyByZXNvbHZlZCB0byBhbmQgaG93IG1hbnkgcnVucyB0aGF0IGltcGxpZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdmVkU3BlY3MgLSBUaGUgcmVzb2x2ZWQgc3BlY2lmaWVycywgaW4gcmVxdWVzdGVkIG9yZGVyLlxuICogQHBhcmFtIGVudHJpZXMgLSBUaGUgZGUtZHVwbGljYXRlZCBtYXRyaXguXG4gKi9cbmZ1bmN0aW9uIGxvZ1BsYW4ocmVzb2x2ZWRTcGVjczogcmVhZG9ubHkgUmVzb2x2ZWRWZXJzaW9uU3BlY1tdLCBlbnRyaWVzOiByZWFkb25seSBPYnNpZGlhblZlcnNpb25NYXRyaXhFbnRyeVtdKTogdm9pZCB7XG4gIGZvciAoY29uc3QgbGluZSBvZiBmb3JtYXRWZXJzaW9uTWF0cml4UGxhbih7IGVudHJpZXMsIHJlc29sdmVkU3BlY3MgfSkpIHtcbiAgICBsb2dNYXRyaXgobGluZSk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5QkEsaUJBQW9CO0FBQ3BCLHFDQUE2QztBQUM3Qyw0QkFRTztBQWtDUCxlQUFzQix5QkFBeUIsUUFBdUQ7QUFDcEcsUUFBTSxFQUFFLEtBQUssU0FBUyxJQUFJO0FBRTFCLFFBQU0sRUFBRSxXQUFXLE1BQU0sUUFBSSw2Q0FBc0IsUUFBUTtBQUMzRCxRQUFNLGVBQVcsc0NBQWUsS0FBSyxJQUFJLFVBQU0sNkRBQTZCLElBQUk7QUFDaEYsUUFBTSxFQUFFLGNBQWMsY0FBYyxRQUFJLDJDQUFvQjtBQUFBLElBQzFEO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJQSxpQ0FBaUM7QUFBQSxJQUNqQztBQUFBLEVBQ0YsQ0FBQztBQUVELGFBQVcsRUFBRSxRQUFRLEtBQUssS0FBSyxjQUFjO0FBQzNDLGNBQVUsYUFBYSxJQUFJLE1BQU0sTUFBTSxFQUFFO0FBQUEsRUFDM0M7QUFFQSxRQUFNLGNBQVUsMENBQW1CLGFBQWE7QUFDaEQsVUFBUSxlQUFlLE9BQU87QUFFOUIsWUFBTSwrQ0FBd0I7QUFBQSxJQUM1QjtBQUFBLElBQ0EsY0FBYyxDQUFDLGlCQUFpQjtBQUM5QixvQkFBVSxvREFBNkIsWUFBWSxDQUFDO0FBQUEsSUFDdEQ7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFPQSxTQUFTLFVBQVUsU0FBdUI7QUFDeEMsc0JBQUksb0JBQW9CLE9BQU8sRUFBRTtBQUNuQztBQVFBLFNBQVMsUUFBUSxlQUErQyxTQUFzRDtBQUNwSCxhQUFXLFlBQVEsK0NBQXdCLEVBQUUsU0FBUyxjQUFjLENBQUMsR0FBRztBQUN0RSxjQUFVLElBQUk7QUFBQSxFQUNoQjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -32,7 +32,7 @@ export interface RunObsidianVersionMatrixParams {
32
32
  * so an env var can be passed straight through.
33
33
  *
34
34
  * Each accepts an explicit `'x.y.z'`, `'public-latest'`, or `'catalyst-latest'`.
35
- * Defaults to both ends of the supported range (G99) when omitted or empty, and
35
+ * Defaults to both ends of the supported range when omitted or empty, and
36
36
  * the list is always de-duplicated on the **resolved** version — so when public
37
37
  * has caught up to catalyst, the suites run once.
38
38
  */
@@ -0,0 +1,53 @@
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 teardown_verdict_exports = {};
20
+ __export(teardown_verdict_exports, {
21
+ buildTeardownMessage: () => buildTeardownMessage,
22
+ resolveTeardownOutcome: () => resolveTeardownOutcome
23
+ });
24
+ module.exports = __toCommonJS(teardown_verdict_exports);
25
+ var import_type_guards = require("./type-guards.cjs");
26
+ function buildTeardownMessage(params) {
27
+ switch (params.outcome) {
28
+ case "still-running": {
29
+ return `WARNING: ${params.subject} did not exit within ${String(params.timeoutInMilliseconds)}ms and still holds ${params.evidence}; a later run may adopt it. Kill it before the next Android run.`;
30
+ }
31
+ case "stopped": {
32
+ return `${params.subject} stopped (verified: ${params.evidence} released).`;
33
+ }
34
+ case "stopped-after-escalation": {
35
+ return `${params.subject} stopped after escalation (verified: ${params.evidence} released).`;
36
+ }
37
+ default: {
38
+ return (0, import_type_guards.assertNever)(params.outcome);
39
+ }
40
+ }
41
+ }
42
+ function resolveTeardownOutcome(params) {
43
+ if (!params.isStopped) {
44
+ return "still-running";
45
+ }
46
+ return params.hasEscalated ? "stopped-after-escalation" : "stopped";
47
+ }
48
+ // Annotate the CommonJS export names for ESM import in node:
49
+ 0 && (module.exports = {
50
+ buildTeardownMessage,
51
+ resolveTeardownOutcome
52
+ });
53
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RlYXJkb3duLXZlcmRpY3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIHZlcmRpY3QgKyBtZXNzYWdlIGJ1aWxkaW5nIGZvciB0aGUgYXV0by1zdGFydGVkLXByb2Nlc3MgdGVhcmRvd24uXG4gKlxuICogVGhlIHRlYXJkb3duIHVzZWQgdG8gbG9nIGBBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBzdG9wcGVkLmAgb24gdGhlXG4gKiAqKmF0dGVtcHQqKiBcdTIwMTQgcHJpbnRlZCB1bmNvbmRpdGlvbmFsbHkgcmlnaHQgYWZ0ZXIgdGhlIGtpbGwgd2FzIGlzc3VlZCwgd2l0aFxuICogbm90aGluZyBhc3NlcnRpbmcgdGhlIHByb2Nlc3MgaGFkIGFjdHVhbGx5IGV4aXRlZC4gT24gMjAyNi0wOS0wMiBib3RoIHRoZVxuICogc2VydmVyIGFuZCB0aGUgZW11bGF0b3Igd2VyZSBzdGlsbCBzZXJ2aW5nIHRlbiBtaW51dGVzIGFmdGVyIHRoYXQgbGluZSB3YXNcbiAqIHdyaXR0ZW4sIGFuZCB0aGUgbmV4dCBydW4gYWRvcHRlZCB0aGVtIGFuZCBkaWVkIHR3byBzZWNvbmRzIGludG8gaXRzIHNlc3Npb25cbiAqIGFzIHRoZXkgZmluYWxseSBmaW5pc2hlZCBkeWluZy4gQSBsb2cgdGhhdCBzYXlzIHRoZSBtYWNoaW5lIGlzIGNsZWFuIHdoZW4gaXRcbiAqIGlzIG5vdCBkb2VzIG5vdCBtZXJlbHkgZmFpbCB0byBoZWxwIFx1MjAxNCBpdCBzZW5kcyB0aGUgbmV4dCByZWFkZXIgYXdheSBmcm9tIHRoZVxuICogY2F1c2UuXG4gKlxuICogU28gYSBzdG9wIGlzIGEgY2xhaW0gdGhhdCBoYXMgdG8gYmUgZWFybmVkOiBvbmx5IHtAbGluayByZXNvbHZlVGVhcmRvd25PdXRjb21lfVxuICogbWF5IGRlY2lkZSBvbmUgd2FzLCBhbmQgb25seSB0aGUgYHN0b3BwZWRgIG91dGNvbWVzIGFyZSBhbGxvd2VkIHRvIHNheSBzby5cbiAqL1xuXG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4vdHlwZS1ndWFyZHMuY2pzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYnVpbGRUZWFyZG93bk1lc3NhZ2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkVGVhcmRvd25NZXNzYWdlUGFyYW1zIHtcbiAgLyoqXG4gIFdoYXQgd2FzIGNoZWNrZWQsIGFzIGEgbm91biBwaHJhc2UgXHUyMDE0IGUuZy4gYHBvcnQgNDcyM2AsIGBBVkQgXCJvYnNpZGlhbl90ZXN0XCIgb24gZGV2aWNlIGVtdWxhdG9yLTU1NTRgLlxuICAgKi9cbiAgcmVhZG9ubHkgZXZpZGVuY2U6IHN0cmluZztcblxuICAvKipcbiAgVGhlIHZlcmRpY3QgZnJvbSB7QGxpbmsgcmVzb2x2ZVRlYXJkb3duT3V0Y29tZX0uXG4gICAqL1xuICByZWFkb25seSBvdXRjb21lOiBUZWFyZG93bk91dGNvbWU7XG5cbiAgLyoqXG4gIFdoYXQgd2FzIGJlaW5nIHN0b3BwZWQgXHUyMDE0IGUuZy4gYEF1dG8tc3RhcnRlZCBBcHBpdW0gc2VydmVyYC5cbiAgICovXG4gIHJlYWRvbmx5IHN1YmplY3Q6IHN0cmluZztcblxuICAvKipcbiAgVGhlIGJ1ZGdldCB0aGUgc3RvcCB3YXMgZ2l2ZW4sIGluIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlVGVhcmRvd25PdXRjb21lfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlVGVhcmRvd25PdXRjb21lUGFyYW1zIHtcbiAgLyoqXG4gIFdoZXRoZXIgdGhlIGZpcnN0IGtpbGwgd2FzIGZvbGxvd2VkIGJ5IGEgc2Vjb25kLCBoYXJkZXIgb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFzRXNjYWxhdGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICBXaGV0aGVyIHRoZSBwcm9jZXNzIHdhcyAqKm9ic2VydmVkKiogdG8gYmUgZ29uZSwgcmF0aGVyIHRoYW4gbWVyZWx5IGFza2VkIHRvIGdvLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNTdG9wcGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdoYXQgdGhlIHRlYXJkb3duIGFjdHVhbGx5IGFjaGlldmVkLlxuICovXG5leHBvcnQgdHlwZSBUZWFyZG93bk91dGNvbWUgPSAnc3RpbGwtcnVubmluZycgfCAnc3RvcHBlZC1hZnRlci1lc2NhbGF0aW9uJyB8ICdzdG9wcGVkJztcblxuLyoqXG4gKiBCdWlsZHMgdGhlIGxpbmUgdGhlIHRlYXJkb3duIGxvZ3MgZm9yIGFuIG91dGNvbWUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBvdXRjb21lIHBsdXMgd2hhdCB3YXMgYmVpbmcgc3RvcHBlZCBhbmQgd2hhdCBwcm92ZWQgaXQuXG4gKiBAcmV0dXJucyBUaGUgbG9nIGxpbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRlYXJkb3duTWVzc2FnZShwYXJhbXM6IEJ1aWxkVGVhcmRvd25NZXNzYWdlUGFyYW1zKTogc3RyaW5nIHtcbiAgc3dpdGNoIChwYXJhbXMub3V0Y29tZSkge1xuICAgIGNhc2UgJ3N0aWxsLXJ1bm5pbmcnOiB7XG4gICAgICByZXR1cm4gYFdBUk5JTkc6ICR7cGFyYW1zLnN1YmplY3R9IGRpZCBub3QgZXhpdCB3aXRoaW4gJHtTdHJpbmcocGFyYW1zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcyl9bXMgYW5kIHN0aWxsIGhvbGRzICR7cGFyYW1zLmV2aWRlbmNlfTsgYSBsYXRlciBydW4gbWF5IGFkb3B0IGl0LiBLaWxsIGl0IGJlZm9yZSB0aGUgbmV4dCBBbmRyb2lkIHJ1bi5gO1xuICAgIH1cbiAgICBjYXNlICdzdG9wcGVkJzoge1xuICAgICAgcmV0dXJuIGAke3BhcmFtcy5zdWJqZWN0fSBzdG9wcGVkICh2ZXJpZmllZDogJHtwYXJhbXMuZXZpZGVuY2V9IHJlbGVhc2VkKS5gO1xuICAgIH1cbiAgICBjYXNlICdzdG9wcGVkLWFmdGVyLWVzY2FsYXRpb24nOiB7XG4gICAgICByZXR1cm4gYCR7cGFyYW1zLnN1YmplY3R9IHN0b3BwZWQgYWZ0ZXIgZXNjYWxhdGlvbiAodmVyaWZpZWQ6ICR7cGFyYW1zLmV2aWRlbmNlfSByZWxlYXNlZCkuYDtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIGFzc2VydE5ldmVyKHBhcmFtcy5vdXRjb21lKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoYXQgdGhlIHRlYXJkb3duIGFjaGlldmVkLCBmcm9tIHdoYXQgd2FzIG9ic2VydmVkIGFmdGVyIHRoZSBraWxsLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBXaGV0aGVyIHRoZSBwcm9jZXNzIGlzIGdvbmUsIGFuZCB3aGV0aGVyIGl0IHRvb2sgYW4gZXNjYWxhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBvdXRjb21lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVRlYXJkb3duT3V0Y29tZShwYXJhbXM6IFJlc29sdmVUZWFyZG93bk91dGNvbWVQYXJhbXMpOiBUZWFyZG93bk91dGNvbWUge1xuICBpZiAoIXBhcmFtcy5pc1N0b3BwZWQpIHtcbiAgICByZXR1cm4gJ3N0aWxsLXJ1bm5pbmcnO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtcy5oYXNFc2NhbGF0ZWQgPyAnc3RvcHBlZC1hZnRlci1lc2NhbGF0aW9uJyA6ICdzdG9wcGVkJztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtCQSx5QkFBNEI7QUFxRHJCLFNBQVMscUJBQXFCLFFBQTRDO0FBQy9FLFVBQVEsT0FBTyxTQUFTO0FBQUEsSUFDdEIsS0FBSyxpQkFBaUI7QUFDcEIsYUFBTyxZQUFZLE9BQU8sT0FBTyx3QkFBd0IsT0FBTyxPQUFPLHFCQUFxQixDQUFDLHNCQUFzQixPQUFPLFFBQVE7QUFBQSxJQUNwSTtBQUFBLElBQ0EsS0FBSyxXQUFXO0FBQ2QsYUFBTyxHQUFHLE9BQU8sT0FBTyx1QkFBdUIsT0FBTyxRQUFRO0FBQUEsSUFDaEU7QUFBQSxJQUNBLEtBQUssNEJBQTRCO0FBQy9CLGFBQU8sR0FBRyxPQUFPLE9BQU8sd0NBQXdDLE9BQU8sUUFBUTtBQUFBLElBQ2pGO0FBQUEsSUFDQSxTQUFTO0FBQ1AsaUJBQU8sZ0NBQVksT0FBTyxPQUFPO0FBQUEsSUFDbkM7QUFBQSxFQUNGO0FBQ0Y7QUFRTyxTQUFTLHVCQUF1QixRQUF1RDtBQUM1RixNQUFJLENBQUMsT0FBTyxXQUFXO0FBQ3JCLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxPQUFPLGVBQWUsNkJBQTZCO0FBQzVEOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Pure verdict + message building for the auto-started-process teardown.
5
+ *
6
+ * The teardown used to log `Auto-started Appium server stopped.` on the
7
+ * **attempt** — printed unconditionally right after the kill was issued, with
8
+ * nothing asserting the process had actually exited. On 2026-09-02 both the
9
+ * server and the emulator were still serving ten minutes after that line was
10
+ * written, and the next run adopted them and died two seconds into its session
11
+ * as they finally finished dying. A log that says the machine is clean when it
12
+ * is not does not merely fail to help — it sends the next reader away from the
13
+ * cause.
14
+ *
15
+ * So a stop is a claim that has to be earned: only {@link resolveTeardownOutcome}
16
+ * may decide one was, and only the `stopped` outcomes are allowed to say so.
17
+ */
18
+ /**
19
+ * Parameters for {@link buildTeardownMessage}.
20
+ */
21
+ export interface BuildTeardownMessageParams {
22
+ /**
23
+ What was checked, as a noun phrase — e.g. `port 4723`, `AVD "obsidian_test" on device emulator-5554`.
24
+ */
25
+ readonly evidence: string;
26
+ /**
27
+ The verdict from {@link resolveTeardownOutcome}.
28
+ */
29
+ readonly outcome: TeardownOutcome;
30
+ /**
31
+ What was being stopped — e.g. `Auto-started Appium server`.
32
+ */
33
+ readonly subject: string;
34
+ /**
35
+ The budget the stop was given, in milliseconds.
36
+ */
37
+ readonly timeoutInMilliseconds: number;
38
+ }
39
+ /**
40
+ * Parameters for {@link resolveTeardownOutcome}.
41
+ */
42
+ export interface ResolveTeardownOutcomeParams {
43
+ /**
44
+ Whether the first kill was followed by a second, harder one.
45
+ */
46
+ readonly hasEscalated: boolean;
47
+ /**
48
+ Whether the process was **observed** to be gone, rather than merely asked to go.
49
+ */
50
+ readonly isStopped: boolean;
51
+ }
52
+ /**
53
+ * What the teardown actually achieved.
54
+ */
55
+ export type TeardownOutcome = 'still-running' | 'stopped-after-escalation' | 'stopped';
56
+ /**
57
+ * Builds the line the teardown logs for an outcome.
58
+ *
59
+ * @param params - The outcome plus what was being stopped and what proved it.
60
+ * @returns The log line.
61
+ */
62
+ export declare function buildTeardownMessage(params: BuildTeardownMessageParams): string;
63
+ /**
64
+ * Decides what the teardown achieved, from what was observed after the kill.
65
+ *
66
+ * @param params - Whether the process is gone, and whether it took an escalation.
67
+ * @returns The outcome.
68
+ */
69
+ export declare function resolveTeardownOutcome(params: ResolveTeardownOutcomeParams): TeardownOutcome;
@@ -27,6 +27,7 @@ var import_node_os = require("node:os");
27
27
  var import_node_path = require("node:path");
28
28
  var import_context_provider = require("./context-provider.cjs");
29
29
  var import_leftover_cleanup = require("./leftover-cleanup.cjs");
30
+ var import_log = require("./log.cjs");
30
31
  var import_transport_factory = require("./transport-factory.cjs");
31
32
  var import_vault_registry = require("./vault-registry.cjs");
32
33
  const RM_RETRY_DELAY_IN_MILLISECONDS = 500;
@@ -36,16 +37,27 @@ class TemporaryVault {
36
37
  * The absolute path to the temporary vault.
37
38
  */
38
39
  path;
40
+ /**
41
+ * Whether {@link TemporaryVault.dispose} removes {@link TemporaryVault.path} from disk.
42
+ */
43
+ #shouldRemoveDirectoryOnDispose;
39
44
  /**
40
45
  * Creates a new temp vault.
41
46
  *
42
47
  * @param path - An explicit vault path. If omitted, a temp directory is created.
48
+ * @param options - Vault options.
43
49
  */
44
- constructor(path) {
50
+ constructor(path, options) {
45
51
  this.path = path ?? (0, import_node_fs.mkdtempSync)((0, import_node_path.join)((0, import_node_os.tmpdir)(), import_leftover_cleanup.TEMP_VAULT_DIR_PREFIX));
52
+ this.#shouldRemoveDirectoryOnDispose = options?.shouldRemoveDirectoryOnDispose ?? path === void 0;
46
53
  }
47
54
  /**
48
- * Unregisters the vault from Obsidian and deletes the temp directory.
55
+ * Unregisters the vault from Obsidian and, when this handle owns the directory, deletes it.
56
+ *
57
+ * The directory is removed only when this instance created it, or when
58
+ * {@link TemporaryVaultOptions.shouldRemoveDirectoryOnDispose} said so explicitly. That is what
59
+ * makes a handle over a directory somebody else owns — the run's shared setup vault, say, which
60
+ * `getTemporaryVault()` wraps — safe to dispose from a consumer's `afterAll`.
49
61
  *
50
62
  * @param transportOverride - An explicit transport to use when unregistering.
51
63
  * When omitted, falls back to the transport configured via the context provider.
@@ -54,17 +66,26 @@ class TemporaryVault {
54
66
  try {
55
67
  await (0, import_vault_registry.unregisterVault)(this.path, transportOverride);
56
68
  } finally {
57
- await retryRm(this.path);
69
+ if (this.#shouldRemoveDirectoryOnDispose) {
70
+ await retryRm(this.path);
71
+ } else {
72
+ (0, import_log.log)(`[temporary-vault] Unregistered but kept the vault directory, which this handle does not own: ${this.path}`);
73
+ }
58
74
  }
59
75
  }
60
76
  /**
61
- * Writes files and folders into the vault directory.
77
+ * Writes files and folders into the vault directory **on the host**.
62
78
  * Parent directories are created automatically.
63
79
  *
64
80
  * - `string` values are written as UTF-8 text files.
65
81
  * - `Uint8Array` values (including `Buffer`) are written as binary files.
66
82
  * - Paths ending with `/` are treated as empty folders (value must be `undefined`).
67
83
  *
84
+ * The write is always host-local — {@link TemporaryVault.path} is a host path, and on a mobile
85
+ * transport the vault the app opens lives on the device instead. {@link TemporaryVault.register}
86
+ * carries the directory across before it registers, so populate-then-register is all a caller
87
+ * needs; {@link TemporaryVault.syncToDevice} is the seam that does the carrying.
88
+ *
68
89
  * @param files - Map of file/folder paths to content.
69
90
  */
70
91
  populate(files) {
@@ -87,11 +108,23 @@ class TemporaryVault {
87
108
  /**
88
109
  * Registers this vault in the running Obsidian instance so the CLI can target it.
89
110
  *
111
+ * Pushes the vault directory to the target device first, via
112
+ * {@link TemporaryVault.syncToDevice} — a no-op on a transport whose app already reads the host
113
+ * filesystem. That ordering used to be the caller's to remember, and a caller who forgot got a
114
+ * silently **empty** vault rather than an error: every pre-registration
115
+ * {@link TemporaryVault.populate} write stayed on the host while the app opened the device's copy.
116
+ * Folding it in here makes populate-then-register correct on every transport.
117
+ *
118
+ * The transport is resolved once and handed to both steps, so a push and the registration that
119
+ * follows it can never land on two different transports.
120
+ *
90
121
  * @param transportOverride - An explicit transport to use. When omitted,
91
122
  * falls back to the transport configured via the context provider.
92
123
  */
93
124
  async register(transportOverride) {
94
- await (0, import_vault_registry.registerVault)(this.path, transportOverride);
125
+ const transport = transportOverride ?? await (0, import_transport_factory.getOrCreateTransport)((0, import_context_provider.getTransportOptions)());
126
+ await this.syncToDevice(transport);
127
+ await (0, import_vault_registry.registerVault)(this.path, transport);
95
128
  }
96
129
  /**
97
130
  * Async disposable support for `await using`.
@@ -109,8 +142,10 @@ class TemporaryVault {
109
142
  * On desktop transports this is a no-op (files are already local).
110
143
  * On mobile transports (Appium) this pushes files to the device.
111
144
  *
112
- * Call this after {@link populate} and before {@link register} when using
113
- * a mobile transport.
145
+ * {@link TemporaryVault.register} calls this itself, so a populate-then-register sequence needs
146
+ * nothing extra. Call it directly only to carry across files written **after** registration: the
147
+ * host directory is not mirrored, so a later write into {@link TemporaryVault.path} stays on the
148
+ * host until this runs again.
114
149
  *
115
150
  * @param transportOverride - An explicit transport to use. When omitted,
116
151
  * falls back to the transport configured via the context provider.
@@ -163,4 +198,4 @@ async function retryRm(path) {
163
198
  0 && (module.exports = {
164
199
  TemporaryVault
165
200
  });
166
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RlbXBvcmFyeS12YXVsdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE1hbmFnZXMgdGVtcG9yYXJ5IHZhdWx0IGxpZmVjeWNsZSBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKi9cblxuaW1wb3J0IHtcbiAgbWtkaXJTeW5jLFxuICBta2R0ZW1wU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIHJlYWRkaXIsXG4gIHJlYWRGaWxlLFxuICBybVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LmNqcyc7XG5cbmltcG9ydCB7IGdldFRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmltcG9ydCB7IFRFTVBfVkFVTFRfRElSX1BSRUZJWCB9IGZyb20gJy4vbGVmdG92ZXItY2xlYW51cC5janMnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5pbXBvcnQge1xuICByZWdpc3RlclZhdWx0LFxuICB1bnJlZ2lzdGVyVmF1bHRcbn0gZnJvbSAnLi92YXVsdC1yZWdpc3RyeS5janMnO1xuXG4vKipcbiAqIENvbnRlbnQgdmFsdWUgZm9yIGEgc2luZ2xlIGVudHJ5IGluIGEge0BsaW5rIFBvcHVsYXRlRmlsZXN9IG1hcC5cbiAqXG4gKiAtIGBzdHJpbmdgIFx1MjAxNCB0ZXh0IGZpbGUgKHdyaXR0ZW4gYXMgVVRGLTgpLlxuICogLSBgVWludDhBcnJheWAgXHUyMDE0IGJpbmFyeSBmaWxlICh3cml0dGVuIGFzIHJhdyBieXRlczsgYEJ1ZmZlcmAgaXMgYWNjZXB0ZWRcbiAqICAgYmVjYXVzZSBgQnVmZmVyIGV4dGVuZHMgVWludDhBcnJheWApLlxuICogLSBgdW5kZWZpbmVkYCBcdTIwMTQgZW1wdHkgZm9sZGVyICh0aGUga2V5ICoqbXVzdCoqIGVuZCB3aXRoIGAvYCkuXG4gKi9cbmV4cG9ydCB0eXBlIFBvcHVsYXRlRmlsZUNvbnRlbnQgPSBzdHJpbmcgfCBVaW50OEFycmF5IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgbWFwIG9mIHZhdWx0LXJlbGF0aXZlIHBhdGhzIHRvIHRoZWlyIGNvbnRlbnQsIHVzZWQgYnlcbiAqIHtAbGluayBUZW1wb3JhcnlWYXVsdC5wb3B1bGF0ZX0uXG4gKlxuICogUGF0aHMgZW5kaW5nIHdpdGggYC9gIGRlbm90ZSBmb2xkZXJzIGFuZCAqKm11c3QqKiBoYXZlIGFuIGB1bmRlZmluZWRgIHZhbHVlLlxuICogQWxsIG90aGVyIHBhdGhzIGFyZSB3cml0dGVuIGFzIGZpbGVzLlxuICovXG5leHBvcnQgdHlwZSBQb3B1bGF0ZUZpbGVzUGFyYW1zID0gUmVjb3JkPHN0cmluZywgUG9wdWxhdGVGaWxlQ29udGVudD47XG5cbmNvbnN0IFJNX1JFVFJZX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFJNX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTBfMDAwO1xuXG4vKipcbiAqIEEgdGVtcG9yYXJ5IE9ic2lkaWFuIHZhdWx0IGZvciBpbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqXG4gKiBDcmVhdGVzIGEgdGVtcCBkaXJlY3RvcnkgYW5kIHJlZ2lzdGVycyBpdCBpbiB0aGUgcnVubmluZyBPYnNpZGlhbiBpbnN0YW5jZVxuICogc28gdGhhdCB0aGUgT2JzaWRpYW4gQ0xJIGNhbiB0YXJnZXQgaXQgdmlhIGBjd2RgLlxuICovXG5leHBvcnQgY2xhc3MgVGVtcG9yYXJ5VmF1bHQge1xuICAvKipcbiAgICogVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHRlbXBvcmFyeSB2YXVsdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdGVtcCB2YXVsdC5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBBbiBleHBsaWNpdCB2YXVsdCBwYXRoLiBJZiBvbWl0dGVkLCBhIHRlbXAgZGlyZWN0b3J5IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGF0aD86IHN0cmluZykge1xuICAgIHRoaXMucGF0aCA9IHBhdGggPz8gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgVEVNUF9WQVVMVF9ESVJfUFJFRklYKSk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgdGhlIHZhdWx0IGZyb20gT2JzaWRpYW4gYW5kIGRlbGV0ZXMgdGhlIHRlbXAgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAcGFyYW0gdHJhbnNwb3J0T3ZlcnJpZGUgLSBBbiBleHBsaWNpdCB0cmFuc3BvcnQgdG8gdXNlIHdoZW4gdW5yZWdpc3RlcmluZy5cbiAgICogICBXaGVuIG9taXR0ZWQsIGZhbGxzIGJhY2sgdG8gdGhlIHRyYW5zcG9ydCBjb25maWd1cmVkIHZpYSB0aGUgY29udGV4dCBwcm92aWRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaXNwb3NlKHRyYW5zcG9ydE92ZXJyaWRlPzogT2JzaWRpYW5UcmFuc3BvcnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdW5yZWdpc3RlclZhdWx0KHRoaXMucGF0aCwgdHJhbnNwb3J0T3ZlcnJpZGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCByZXRyeVJtKHRoaXMucGF0aCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlcyBmaWxlcyBhbmQgZm9sZGVycyBpbnRvIHRoZSB2YXVsdCBkaXJlY3RvcnkuXG4gICAqIFBhcmVudCBkaXJlY3RvcmllcyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiAtIGBzdHJpbmdgIHZhbHVlcyBhcmUgd3JpdHRlbiBhcyBVVEYtOCB0ZXh0IGZpbGVzLlxuICAgKiAtIGBVaW50OEFycmF5YCB2YWx1ZXMgKGluY2x1ZGluZyBgQnVmZmVyYCkgYXJlIHdyaXR0ZW4gYXMgYmluYXJ5IGZpbGVzLlxuICAgKiAtIFBhdGhzIGVuZGluZyB3aXRoIGAvYCBhcmUgdHJlYXRlZCBhcyBlbXB0eSBmb2xkZXJzICh2YWx1ZSBtdXN0IGJlIGB1bmRlZmluZWRgKS5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVzIC0gTWFwIG9mIGZpbGUvZm9sZGVyIHBhdGhzIHRvIGNvbnRlbnQuXG4gICAqL1xuICBwdWJsaWMgcG9wdWxhdGUoZmlsZXM6IFBvcHVsYXRlRmlsZXNQYXJhbXMpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMoZmlsZXMpKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4odGhpcy5wYXRoLCBmaWxlUGF0aCk7XG4gICAgICBpZiAoZmlsZVBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICBpZiAoY29udGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb2xkZXIgcGF0aCBcIiR7ZmlsZVBhdGh9XCIgbXVzdCBoYXZlIHVuZGVmaW5lZCBjb250ZW50YCk7XG4gICAgICAgIH1cbiAgICAgICAgbWtkaXJTeW5jKGZ1bGxQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgcGF0aCBcIiR7ZmlsZVBhdGh9XCIgbXVzdCBoYXZlIGRlZmluZWQgY29udGVudDsgdXNlIGEgdHJhaWxpbmcgXCIvXCIgZm9yIGZvbGRlcnNgKTtcbiAgICAgICAgfVxuICAgICAgICBta2RpclN5bmMoZGlybmFtZShmdWxsUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB3cml0ZUZpbGVTeW5jKGZ1bGxQYXRoLCBjb250ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoaXMgdmF1bHQgaW4gdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2Ugc28gdGhlIENMSSBjYW4gdGFyZ2V0IGl0LlxuICAgKlxuICAgKiBAcGFyYW0gdHJhbnNwb3J0T3ZlcnJpZGUgLSBBbiBleHBsaWNpdCB0cmFuc3BvcnQgdG8gdXNlLiBXaGVuIG9taXR0ZWQsXG4gICAqICAgZmFsbHMgYmFjayB0byB0aGUgdHJhbnNwb3J0IGNvbmZpZ3VyZWQgdmlhIHRoZSBjb250ZXh0IHByb3ZpZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyKHRyYW5zcG9ydE92ZXJyaWRlPzogT2JzaWRpYW5UcmFuc3BvcnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCByZWdpc3RlclZhdWx0KHRoaXMucGF0aCwgdHJhbnNwb3J0T3ZlcnJpZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzeW5jIGRpc3Bvc2FibGUgc3VwcG9ydCBmb3IgYGF3YWl0IHVzaW5nYC5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdmF1bHQgaXMgZGlzcG9zZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgdGhhdCByZXF1aXJlcyBhIHJ1bm5pbmcgdHJhbnNwb3J0LiAqL1xuXG4gIC8qKlxuICAgKiBQdXNoZXMgYWxsIGZpbGVzIGZyb20gdGhlIGxvY2FsIHN0YWdpbmcgZGlyZWN0b3J5IHRvIHRoZSB0YXJnZXQgZGV2aWNlXG4gICAqIHZpYSB0aGUgYWN0aXZlIHRyYW5zcG9ydCdzIGBwdXNoRmlsZXMoKWAuXG4gICAqXG4gICAqIE9uIGRlc2t0b3AgdHJhbnNwb3J0cyB0aGlzIGlzIGEgbm8tb3AgKGZpbGVzIGFyZSBhbHJlYWR5IGxvY2FsKS5cbiAgICogT24gbW9iaWxlIHRyYW5zcG9ydHMgKEFwcGl1bSkgdGhpcyBwdXNoZXMgZmlsZXMgdG8gdGhlIGRldmljZS5cbiAgICpcbiAgICogQ2FsbCB0aGlzIGFmdGVyIHtAbGluayBwb3B1bGF0ZX0gYW5kIGJlZm9yZSB7QGxpbmsgcmVnaXN0ZXJ9IHdoZW4gdXNpbmdcbiAgICogYSBtb2JpbGUgdHJhbnNwb3J0LlxuICAgKlxuICAgKiBAcGFyYW0gdHJhbnNwb3J0T3ZlcnJpZGUgLSBBbiBleHBsaWNpdCB0cmFuc3BvcnQgdG8gdXNlLiBXaGVuIG9taXR0ZWQsXG4gICAqICAgZmFsbHMgYmFjayB0byB0aGUgdHJhbnNwb3J0IGNvbmZpZ3VyZWQgdmlhIHRoZSBjb250ZXh0IHByb3ZpZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHN5bmNUb0RldmljZSh0cmFuc3BvcnRPdmVycmlkZT86IE9ic2lkaWFuVHJhbnNwb3J0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdHJhbnNwb3J0ID0gdHJhbnNwb3J0T3ZlcnJpZGUgPz8gYXdhaXQgZ2V0T3JDcmVhdGVUcmFuc3BvcnQoZ2V0VHJhbnNwb3J0T3B0aW9ucygpKTtcbiAgICBpZiAoIXRyYW5zcG9ydC5wdXNoRmlsZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMuY29sbGVjdEZpbGVzKHRoaXMucGF0aCk7XG4gICAgYXdhaXQgdHJhbnNwb3J0LnB1c2hGaWxlcyh0aGlzLnBhdGgsIGZpbGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSByZWFkcyBhbGwgZmlsZXMgZnJvbSBhIGRpcmVjdG9yeSBpbnRvIGEgZmxhdCBtYXAuXG4gICAqXG4gICAqIEBwYXJhbSBkaXJlY3RvcnkgLSBUaGUgZGlyZWN0b3J5IHRvIHJlYWQuXG4gICAqIEByZXR1cm5zIEEgbWFwIG9mIHJlbGF0aXZlIGZpbGUgcGF0aHMgdG8gY29udGVudCBidWZmZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb2xsZWN0RmlsZXMoZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFVpbnQ4QXJyYXk+PiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBVaW50OEFycmF5PiA9IHt9O1xuICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKGRpcmVjdG9yeSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4oZGlyZWN0b3J5LCBlbnRyeS5uYW1lKTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKHRoaXMucGF0aCwgZnVsbFBhdGgpO1xuXG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgYXdhaXQgdGhpcy5jb2xsZWN0RmlsZXMoZnVsbFBhdGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtyZWxhdGl2ZVBhdGhdID0gYXdhaXQgcmVhZEZpbGUoZnVsbFBhdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbn1cblxuLyoqXG4gKiBSZXRyaWVzIGBybWAgdW50aWwgaXQgc3VjY2VlZHMgb3IgdGltZXMgb3V0LlxuICogT2JzaWRpYW4gbWF5IGhvbGQgZmlsZSBsb2NrcyBicmllZmx5IGFmdGVyIGEgd2luZG93IGlzIGRlc3Ryb3llZC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gcmVtb3ZlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZGlyZWN0b3J5IGlzIHJlbW92ZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJldHJ5Um0ocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIFJNX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgUk1fUkVUUllfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvLyBGaW5hbCBhdHRlbXB0IFx1MjAxNCBsZXQgaXQgdGhyb3cuXG4gIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxxQkFJTztBQUNQLHNCQUlPO0FBQ1AscUJBQXVCO0FBQ3ZCLHVCQUlPO0FBSVAsOEJBQW9DO0FBQ3BDLDhCQUFzQztBQUN0QywrQkFBcUM7QUFDckMsNEJBR087QUFxQlAsTUFBTSxpQ0FBaUM7QUFDdkMsTUFBTSxtQ0FBbUM7QUFRbEMsTUFBTSxlQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9ULFlBQVksTUFBZTtBQUNoQyxTQUFL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
201
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RlbXBvcmFyeS12YXVsdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE1hbmFnZXMgdGVtcG9yYXJ5IHZhdWx0IGxpZmVjeWNsZSBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKi9cblxuaW1wb3J0IHtcbiAgbWtkaXJTeW5jLFxuICBta2R0ZW1wU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIHJlYWRkaXIsXG4gIHJlYWRGaWxlLFxuICBybVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LmNqcyc7XG5cbmltcG9ydCB7IGdldFRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmltcG9ydCB7IFRFTVBfVkFVTFRfRElSX1BSRUZJWCB9IGZyb20gJy4vbGVmdG92ZXItY2xlYW51cC5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGdldE9yQ3JlYXRlVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZmFjdG9yeS5janMnO1xuaW1wb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkuY2pzJztcblxuLyoqXG4gKiBDb250ZW50IHZhbHVlIGZvciBhIHNpbmdsZSBlbnRyeSBpbiBhIHtAbGluayBQb3B1bGF0ZUZpbGVzfSBtYXAuXG4gKlxuICogLSBgc3RyaW5nYCBcdTIwMTQgdGV4dCBmaWxlICh3cml0dGVuIGFzIFVURi04KS5cbiAqIC0gYFVpbnQ4QXJyYXlgIFx1MjAxNCBiaW5hcnkgZmlsZSAod3JpdHRlbiBhcyByYXcgYnl0ZXM7IGBCdWZmZXJgIGlzIGFjY2VwdGVkXG4gKiAgIGJlY2F1c2UgYEJ1ZmZlciBleHRlbmRzIFVpbnQ4QXJyYXlgKS5cbiAqIC0gYHVuZGVmaW5lZGAgXHUyMDE0IGVtcHR5IGZvbGRlciAodGhlIGtleSAqKm11c3QqKiBlbmQgd2l0aCBgL2ApLlxuICovXG5leHBvcnQgdHlwZSBQb3B1bGF0ZUZpbGVDb250ZW50ID0gc3RyaW5nIHwgVWludDhBcnJheSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIG1hcCBvZiB2YXVsdC1yZWxhdGl2ZSBwYXRocyB0byB0aGVpciBjb250ZW50LCB1c2VkIGJ5XG4gKiB7QGxpbmsgVGVtcG9yYXJ5VmF1bHQucG9wdWxhdGV9LlxuICpcbiAqIFBhdGhzIGVuZGluZyB3aXRoIGAvYCBkZW5vdGUgZm9sZGVycyBhbmQgKiptdXN0KiogaGF2ZSBhbiBgdW5kZWZpbmVkYCB2YWx1ZS5cbiAqIEFsbCBvdGhlciBwYXRocyBhcmUgd3JpdHRlbiBhcyBmaWxlcy5cbiAqL1xuZXhwb3J0IHR5cGUgUG9wdWxhdGVGaWxlc1BhcmFtcyA9IFJlY29yZDxzdHJpbmcsIFBvcHVsYXRlRmlsZUNvbnRlbnQ+O1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSB7QGxpbmsgVGVtcG9yYXJ5VmF1bHR9IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBvcmFyeVZhdWx0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHtAbGluayBUZW1wb3JhcnlWYXVsdC5kaXNwb3NlfSByZW1vdmVzIHRoZSB2YXVsdCAqKmRpcmVjdG9yeSoqLlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGRlZmF1bHRzIHRvIHdoZXRoZXIgdGhpcyBpbnN0YW5jZSBjcmVhdGVkIHRoYXQgZGlyZWN0b3J5IFx1MjAxNCBgdHJ1ZWAgZm9yIGEgdGVtcFxuICAgKiBkaXJlY3RvcnkgdGhlIGNvbnN0cnVjdG9yIG1hZGUgKG5vIGBwYXRoYCBhcmd1bWVudCksIGBmYWxzZWAgZm9yIGEgZGlyZWN0b3J5IGhhbmRlZCB0byBpdCBhcyBhblxuICAgKiBleHBsaWNpdCBgcGF0aGAuIEEgaGFuZGxlIG92ZXIgc29tZWJvZHkgZWxzZSdzIGRpcmVjdG9yeSB1bnJlZ2lzdGVycyB0aGUgdmF1bHQgYnV0IGxlYXZlcyB0aGVcbiAgICogZmlsZXMgYWxvbmUsIHNvIHdyYXBwaW5nIGEgZGlyZWN0b3J5IGNhbm5vdCBkZXN0cm95IGl0LiBTZXQgZXhwbGljaXRseSB0byBvdmVycmlkZS5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlbW92ZURpcmVjdG9yeU9uRGlzcG9zZT86IGJvb2xlYW47XG59XG5cbmNvbnN0IFJNX1JFVFJZX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFJNX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTBfMDAwO1xuXG4vKipcbiAqIEEgdGVtcG9yYXJ5IE9ic2lkaWFuIHZhdWx0IGZvciBpbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqXG4gKiBDcmVhdGVzIGEgdGVtcCBkaXJlY3RvcnkgYW5kIHJlZ2lzdGVycyBpdCBpbiB0aGUgcnVubmluZyBPYnNpZGlhbiBpbnN0YW5jZVxuICogc28gdGhhdCB0aGUgT2JzaWRpYW4gQ0xJIGNhbiB0YXJnZXQgaXQgdmlhIGBjd2RgLlxuICpcbiAqIEEgaGFuZGxlICoqb3ducyoqIHRoZSBkaXJlY3Rvcnkgb25seSB3aGVuIGl0IGNyZWF0ZWQgaXQuIHtAbGluayBUZW1wb3JhcnlWYXVsdC5kaXNwb3NlfSBkZWxldGVzIGFuXG4gKiBvd25lZCBkaXJlY3RvcnkgYW5kIGxlYXZlcyBhIGJvcnJvd2VkIG9uZSBpbiBwbGFjZSBcdTIwMTQgc2VlXG4gKiB7QGxpbmsgVGVtcG9yYXJ5VmF1bHRPcHRpb25zLnNob3VsZFJlbW92ZURpcmVjdG9yeU9uRGlzcG9zZX0sIHdoaWNoIG92ZXJyaWRlcyB0aGF0IGRlZmF1bHQuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wb3JhcnlWYXVsdCB7XG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdGVtcG9yYXJ5IHZhdWx0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB7QGxpbmsgVGVtcG9yYXJ5VmF1bHQuZGlzcG9zZX0gcmVtb3ZlcyB7QGxpbmsgVGVtcG9yYXJ5VmF1bHQucGF0aH0gZnJvbSBkaXNrLlxuICAgKi9cbiAgcmVhZG9ubHkgI3Nob3VsZFJlbW92ZURpcmVjdG9yeU9uRGlzcG9zZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB0ZW1wIHZhdWx0LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIEFuIGV4cGxpY2l0IHZhdWx0IHBhdGguIElmIG9taXR0ZWQsIGEgdGVtcCBkaXJlY3RvcnkgaXMgY3JlYXRlZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBWYXVsdCBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhdGg/OiBzdHJpbmcsIG9wdGlvbnM/OiBUZW1wb3JhcnlWYXVsdE9wdGlvbnMpIHtcbiAgICB0aGlzLnBhdGggPSBwYXRoID8/IG1rZHRlbXBTeW5jKGpvaW4odG1wZGlyKCksIFRFTVBfVkFVTFRfRElSX1BSRUZJWCkpO1xuICAgIHRoaXMuI3Nob3VsZFJlbW92ZURpcmVjdG9yeU9uRGlzcG9zZSA9IG9wdGlvbnM/LnNob3VsZFJlbW92ZURpcmVjdG9yeU9uRGlzcG9zZSA/PyBwYXRoID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgdGhlIHZhdWx0IGZyb20gT2JzaWRpYW4gYW5kLCB3aGVuIHRoaXMgaGFuZGxlIG93bnMgdGhlIGRpcmVjdG9yeSwgZGVsZXRlcyBpdC5cbiAgICpcbiAgICogVGhlIGRpcmVjdG9yeSBpcyByZW1vdmVkIG9ubHkgd2hlbiB0aGlzIGluc3RhbmNlIGNyZWF0ZWQgaXQsIG9yIHdoZW5cbiAgICoge0BsaW5rIFRlbXBvcmFyeVZhdWx0T3B0aW9ucy5zaG91bGRSZW1vdmVEaXJlY3RvcnlPbkRpc3Bvc2V9IHNhaWQgc28gZXhwbGljaXRseS4gVGhhdCBpcyB3aGF0XG4gICAqIG1ha2VzIGEgaGFuZGxlIG92ZXIgYSBkaXJlY3Rvcnkgc29tZWJvZHkgZWxzZSBvd25zIFx1MjAxNCB0aGUgcnVuJ3Mgc2hhcmVkIHNldHVwIHZhdWx0LCBzYXksIHdoaWNoXG4gICAqIGBnZXRUZW1wb3JhcnlWYXVsdCgpYCB3cmFwcyBcdTIwMTQgc2FmZSB0byBkaXNwb3NlIGZyb20gYSBjb25zdW1lcidzIGBhZnRlckFsbGAuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc3BvcnRPdmVycmlkZSAtIEFuIGV4cGxpY2l0IHRyYW5zcG9ydCB0byB1c2Ugd2hlbiB1bnJlZ2lzdGVyaW5nLlxuICAgKiAgIFdoZW4gb21pdHRlZCwgZmFsbHMgYmFjayB0byB0aGUgdHJhbnNwb3J0IGNvbmZpZ3VyZWQgdmlhIHRoZSBjb250ZXh0IHByb3ZpZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpc3Bvc2UodHJhbnNwb3J0T3ZlcnJpZGU/OiBPYnNpZGlhblRyYW5zcG9ydCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB1bnJlZ2lzdGVyVmF1bHQodGhpcy5wYXRoLCB0cmFuc3BvcnRPdmVycmlkZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLiNzaG91bGRSZW1vdmVEaXJlY3RvcnlPbkRpc3Bvc2UpIHtcbiAgICAgICAgYXdhaXQgcmV0cnlSbSh0aGlzLnBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKGBbdGVtcG9yYXJ5LXZhdWx0XSBVbnJlZ2lzdGVyZWQgYnV0IGtlcHQgdGhlIHZhdWx0IGRpcmVjdG9yeSwgd2hpY2ggdGhpcyBoYW5kbGUgZG9lcyBub3Qgb3duOiAke3RoaXMucGF0aH1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIGZpbGVzIGFuZCBmb2xkZXJzIGludG8gdGhlIHZhdWx0IGRpcmVjdG9yeSAqKm9uIHRoZSBob3N0KiouXG4gICAqIFBhcmVudCBkaXJlY3RvcmllcyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiAtIGBzdHJpbmdgIHZhbHVlcyBhcmUgd3JpdHRlbiBhcyBVVEYtOCB0ZXh0IGZpbGVzLlxuICAgKiAtIGBVaW50OEFycmF5YCB2YWx1ZXMgKGluY2x1ZGluZyBgQnVmZmVyYCkgYXJlIHdyaXR0ZW4gYXMgYmluYXJ5IGZpbGVzLlxuICAgKiAtIFBhdGhzIGVuZGluZyB3aXRoIGAvYCBhcmUgdHJlYXRlZCBhcyBlbXB0eSBmb2xkZXJzICh2YWx1ZSBtdXN0IGJlIGB1bmRlZmluZWRgKS5cbiAgICpcbiAgICogVGhlIHdyaXRlIGlzIGFsd2F5cyBob3N0LWxvY2FsIFx1MjAxNCB7QGxpbmsgVGVtcG9yYXJ5VmF1bHQucGF0aH0gaXMgYSBob3N0IHBhdGgsIGFuZCBvbiBhIG1vYmlsZVxuICAgKiB0cmFuc3BvcnQgdGhlIHZhdWx0IHRoZSBhcHAgb3BlbnMgbGl2ZXMgb24gdGhlIGRldmljZSBpbnN0ZWFkLiB7QGxpbmsgVGVtcG9yYXJ5VmF1bHQucmVnaXN0ZXJ9XG4gICAqIGNhcnJpZXMgdGhlIGRpcmVjdG9yeSBhY3Jvc3MgYmVmb3JlIGl0IHJlZ2lzdGVycywgc28gcG9wdWxhdGUtdGhlbi1yZWdpc3RlciBpcyBhbGwgYSBjYWxsZXJcbiAgICogbmVlZHM7IHtAbGluayBUZW1wb3JhcnlWYXVsdC5zeW5jVG9EZXZpY2V9IGlzIHRoZSBzZWFtIHRoYXQgZG9lcyB0aGUgY2FycnlpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlcyAtIE1hcCBvZiBmaWxlL2ZvbGRlciBwYXRocyB0byBjb250ZW50LlxuICAgKi9cbiAgcHVibGljIHBvcHVsYXRlKGZpbGVzOiBQb3B1bGF0ZUZpbGVzUGFyYW1zKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVzKSkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKHRoaXMucGF0aCwgZmlsZVBhdGgpO1xuICAgICAgaWYgKGZpbGVQYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgaWYgKGNvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRm9sZGVyIHBhdGggXCIke2ZpbGVQYXRofVwiIG11c3QgaGF2ZSB1bmRlZmluZWQgY29udGVudGApO1xuICAgICAgICB9XG4gICAgICAgIG1rZGlyU3luYyhmdWxsUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIHBhdGggXCIke2ZpbGVQYXRofVwiIG11c3QgaGF2ZSBkZWZpbmVkIGNvbnRlbnQ7IHVzZSBhIHRyYWlsaW5nIFwiL1wiIGZvciBmb2xkZXJzYCk7XG4gICAgICAgIH1cbiAgICAgICAgbWtkaXJTeW5jKGRpcm5hbWUoZnVsbFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgd3JpdGVGaWxlU3luYyhmdWxsUGF0aCwgY29udGVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGlzIHZhdWx0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHNvIHRoZSBDTEkgY2FuIHRhcmdldCBpdC5cbiAgICpcbiAgICogUHVzaGVzIHRoZSB2YXVsdCBkaXJlY3RvcnkgdG8gdGhlIHRhcmdldCBkZXZpY2UgZmlyc3QsIHZpYVxuICAgKiB7QGxpbmsgVGVtcG9yYXJ5VmF1bHQuc3luY1RvRGV2aWNlfSBcdTIwMTQgYSBuby1vcCBvbiBhIHRyYW5zcG9ydCB3aG9zZSBhcHAgYWxyZWFkeSByZWFkcyB0aGUgaG9zdFxuICAgKiBmaWxlc3lzdGVtLiBUaGF0IG9yZGVyaW5nIHVzZWQgdG8gYmUgdGhlIGNhbGxlcidzIHRvIHJlbWVtYmVyLCBhbmQgYSBjYWxsZXIgd2hvIGZvcmdvdCBnb3QgYVxuICAgKiBzaWxlbnRseSAqKmVtcHR5KiogdmF1bHQgcmF0aGVyIHRoYW4gYW4gZXJyb3I6IGV2ZXJ5IHByZS1yZWdpc3RyYXRpb25cbiAgICoge0BsaW5rIFRlbXBvcmFyeVZhdWx0LnBvcHVsYXRlfSB3cml0ZSBzdGF5ZWQgb24gdGhlIGhvc3Qgd2hpbGUgdGhlIGFwcCBvcGVuZWQgdGhlIGRldmljZSdzIGNvcHkuXG4gICAqIEZvbGRpbmcgaXQgaW4gaGVyZSBtYWtlcyBwb3B1bGF0ZS10aGVuLXJlZ2lzdGVyIGNvcnJlY3Qgb24gZXZlcnkgdHJhbnNwb3J0LlxuICAgKlxuICAgKiBUaGUgdHJhbnNwb3J0IGlzIHJlc29sdmVkIG9uY2UgYW5kIGhhbmRlZCB0byBib3RoIHN0ZXBzLCBzbyBhIHB1c2ggYW5kIHRoZSByZWdpc3RyYXRpb24gdGhhdFxuICAgKiBmb2xsb3dzIGl0IGNhbiBuZXZlciBsYW5kIG9uIHR3byBkaWZmZXJlbnQgdHJhbnNwb3J0cy5cbiAgICpcbiAgICogQHBhcmFtIHRyYW5zcG9ydE92ZXJyaWRlIC0gQW4gZXhwbGljaXQgdHJhbnNwb3J0IHRvIHVzZS4gV2hlbiBvbWl0dGVkLFxuICAgKiAgIGZhbGxzIGJhY2sgdG8gdGhlIHRyYW5zcG9ydCBjb25maWd1cmVkIHZpYSB0aGUgY29udGV4dCBwcm92aWRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWdpc3Rlcih0cmFuc3BvcnRPdmVycmlkZT86IE9ic2lkaWFuVHJhbnNwb3J0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdHJhbnNwb3J0ID0gdHJhbnNwb3J0T3ZlcnJpZGUgPz8gYXdhaXQgZ2V0T3JDcmVhdGVUcmFuc3BvcnQoZ2V0VHJhbnNwb3J0T3B0aW9ucygpKTtcbiAgICBhd2FpdCB0aGlzLnN5bmNUb0RldmljZSh0cmFuc3BvcnQpO1xuICAgIGF3YWl0IHJlZ2lzdGVyVmF1bHQodGhpcy5wYXRoLCB0cmFuc3BvcnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzeW5jIGRpc3Bvc2FibGUgc3VwcG9ydCBmb3IgYGF3YWl0IHVzaW5nYC5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdmF1bHQgaXMgZGlzcG9zZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgdGhhdCByZXF1aXJlcyBhIHJ1bm5pbmcgdHJhbnNwb3J0LiAqL1xuXG4gIC8qKlxuICAgKiBQdXNoZXMgYWxsIGZpbGVzIGZyb20gdGhlIGxvY2FsIHN0YWdpbmcgZGlyZWN0b3J5IHRvIHRoZSB0YXJnZXQgZGV2aWNlXG4gICAqIHZpYSB0aGUgYWN0aXZlIHRyYW5zcG9ydCdzIGBwdXNoRmlsZXMoKWAuXG4gICAqXG4gICAqIE9uIGRlc2t0b3AgdHJhbnNwb3J0cyB0aGlzIGlzIGEgbm8tb3AgKGZpbGVzIGFyZSBhbHJlYWR5IGxvY2FsKS5cbiAgICogT24gbW9iaWxlIHRyYW5zcG9ydHMgKEFwcGl1bSkgdGhpcyBwdXNoZXMgZmlsZXMgdG8gdGhlIGRldmljZS5cbiAgICpcbiAgICoge0BsaW5rIFRlbXBvcmFyeVZhdWx0LnJlZ2lzdGVyfSBjYWxscyB0aGlzIGl0c2VsZiwgc28gYSBwb3B1bGF0ZS10aGVuLXJlZ2lzdGVyIHNlcXVlbmNlIG5lZWRzXG4gICAqIG5vdGhpbmcgZXh0cmEuIENhbGwgaXQgZGlyZWN0bHkgb25seSB0byBjYXJyeSBhY3Jvc3MgZmlsZXMgd3JpdHRlbiAqKmFmdGVyKiogcmVnaXN0cmF0aW9uOiB0aGVcbiAgICogaG9zdCBkaXJlY3RvcnkgaXMgbm90IG1pcnJvcmVkLCBzbyBhIGxhdGVyIHdyaXRlIGludG8ge0BsaW5rIFRlbXBvcmFyeVZhdWx0LnBhdGh9IHN0YXlzIG9uIHRoZVxuICAgKiBob3N0IHVudGlsIHRoaXMgcnVucyBhZ2Fpbi5cbiAgICpcbiAgICogQHBhcmFtIHRyYW5zcG9ydE92ZXJyaWRlIC0gQW4gZXhwbGljaXQgdHJhbnNwb3J0IHRvIHVzZS4gV2hlbiBvbWl0dGVkLFxuICAgKiAgIGZhbGxzIGJhY2sgdG8gdGhlIHRyYW5zcG9ydCBjb25maWd1cmVkIHZpYSB0aGUgY29udGV4dCBwcm92aWRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzeW5jVG9EZXZpY2UodHJhbnNwb3J0T3ZlcnJpZGU/OiBPYnNpZGlhblRyYW5zcG9ydCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydE92ZXJyaWRlID8/IGF3YWl0IGdldE9yQ3JlYXRlVHJhbnNwb3J0KGdldFRyYW5zcG9ydE9wdGlvbnMoKSk7XG4gICAgaWYgKCF0cmFuc3BvcnQucHVzaEZpbGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB0aGlzLmNvbGxlY3RGaWxlcyh0aGlzLnBhdGgpO1xuICAgIGF3YWl0IHRyYW5zcG9ydC5wdXNoRmlsZXModGhpcy5wYXRoLCBmaWxlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgcmVhZHMgYWxsIGZpbGVzIGZyb20gYSBkaXJlY3RvcnkgaW50byBhIGZsYXQgbWFwLlxuICAgKlxuICAgKiBAcGFyYW0gZGlyZWN0b3J5IC0gVGhlIGRpcmVjdG9yeSB0byByZWFkLlxuICAgKiBAcmV0dXJucyBBIG1hcCBvZiByZWxhdGl2ZSBmaWxlIHBhdGhzIHRvIGNvbnRlbnQgYnVmZmVycy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY29sbGVjdEZpbGVzKGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBVaW50OEFycmF5Pj4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgVWludDhBcnJheT4gPSB7fTtcbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihkaXJlY3RvcnksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKGRpcmVjdG9yeSwgZW50cnkubmFtZSk7XG4gICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZSh0aGlzLnBhdGgsIGZ1bGxQYXRoKTtcblxuICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIGF3YWl0IHRoaXMuY29sbGVjdEZpbGVzKGZ1bGxQYXRoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbcmVsYXRpdmVQYXRoXSA9IGF3YWl0IHJlYWRGaWxlKGZ1bGxQYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG59XG5cbi8qKlxuICogUmV0cmllcyBgcm1gIHVudGlsIGl0IHN1Y2NlZWRzIG9yIHRpbWVzIG91dC5cbiAqIE9ic2lkaWFuIG1heSBob2xkIGZpbGUgbG9ja3MgYnJpZWZseSBhZnRlciBhIHdpbmRvdyBpcyBkZXN0cm95ZWQuXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRpcmVjdG9yeSBpcyByZW1vdmVkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXRyeVJtKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBSTV9SRVRSWV9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBybShwYXRoLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIFJNX1JFVFJZX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLy8gRmluYWwgYXR0ZW1wdCBcdTIwMTQgbGV0IGl0IHRocm93LlxuICBhd2FpdCBybShwYXRoLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEscUJBSU87QUFDUCxzQkFJTztBQUNQLHFCQUF1QjtBQUN2Qix1QkFJTztBQUlQLDhCQUFvQztBQUNwQyw4QkFBc0M7QUFDdEMsaUJBQW9CO0FBQ3BCLCtCQUFxQztBQUNyQyw0QkFHTztBQW9DUCxNQUFNLGlDQUFpQztBQUN2QyxNQUFNLG1DQUFtQztBQVlsQyxNQUFNLGVBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlWO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUYsWUFBWSxNQUFlLFNBQWlDO0FBQ2pFLFNBQUssT0FBTyxZQUFRLGdDQUFZLDJCQUFLLHVCQUFPLEdBQUcsNkNBQXFCLENBQUM7QUFDckUsU0FBSyxrQ0FBa0MsU0FBUyxrQ0FBa0MsU0FBUztBQUFBLEVBQzdGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBYUEsTUFBYSxRQUFRLG1CQUFzRDtBQUN6RSxRQUFJO0FBQ0YsZ0JBQU0sdUNBQWdCLEtBQUssTUFBTSxpQkFBaUI7QUFBQSxJQUNwRCxVQUFFO0FBQ0EsVUFBSSxLQUFLLGlDQUFpQztBQUN4QyxjQUFNLFFBQVEsS0FBSyxJQUFJO0FBQUEsTUFDekIsT0FBTztBQUNMLDRCQUFJLGdHQUFnRyxLQUFLLElBQUksRUFBRTtBQUFBLE1BQ2pIO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWlCTyxTQUFTLE9BQWtDO0FBQ2hELGVBQVcsQ0FBQyxVQUFVLE9BQU8sS0FBSyxPQUFPLFFBQVEsS0FBSyxHQUFHO0FBQ3ZELFlBQU0sZUFBVyx1QkFBSyxLQUFLLE1BQU0sUUFBUTtBQUN6QyxVQUFJLFNBQVMsU0FBUyxHQUFHLEdBQUc7QUFDMUIsWUFBSSxZQUFZLFFBQVc7QUFDekIsZ0JBQU0sSUFBSSxNQUFNLGdCQUFnQixRQUFRLCtCQUErQjtBQUFBLFFBQ3pFO0FBQ0Esc0NBQVUsVUFBVSxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQUEsTUFDekMsT0FBTztBQUNMLFlBQUksWUFBWSxRQUFXO0FBQ3pCLGdCQUFNLElBQUksTUFBTSxjQUFjLFFBQVEsNkRBQTZEO0FBQUEsUUFDckc7QUFDQSwwQ0FBVSwwQkFBUSxRQUFRLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNoRCwwQ0FBYyxVQUFVLE9BQU87QUFBQSxNQUNqQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWtCQSxNQUFhLFNBQVMsbUJBQXNEO0FBQzFFLFVBQU0sWUFBWSxxQkFBcUIsVUFBTSxtREFBcUIsNkNBQW9CLENBQUM7QUFDdkYsVUFBTSxLQUFLLGFBQWEsU0FBUztBQUNqQyxjQUFNLHFDQUFjLEtBQUssTUFBTSxTQUFTO0FBQUEsRUFDMUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxPQUFjLE9BQU8sWUFBWSxJQUFtQjtBQUNsRCxXQUFPLEtBQUssUUFBUTtBQUFBLEVBQ3RCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQW1CQSxNQUFhLGFBQWEsbUJBQXNEO0FBQzlFLFVBQU0sWUFBWSxxQkFBcUIsVUFBTSxtREFBcUIsNkNBQW9CLENBQUM7QUFDdkYsUUFBSSxDQUFDLFVBQVUsV0FBVztBQUN4QjtBQUFBLElBQ0Y7QUFFQSxVQUFNLFFBQVEsTUFBTSxLQUFLLGFBQWEsS0FBSyxJQUFJO0FBQy9DLFVBQU0sVUFBVSxVQUFVLEtBQUssTUFBTSxLQUFLO0FBQUEsRUFDNUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE1BQWMsYUFBYSxXQUF3RDtBQUNqRixVQUFNLFNBQXFDLENBQUM7QUFDNUMsVUFBTSxVQUFVLFVBQU0seUJBQVEsV0FBVyxFQUFFLGVBQWUsS0FBSyxDQUFDO0FBRWhFLGVBQVcsU0FBUyxTQUFTO0FBQzNCLFlBQU0sZUFBVyx1QkFBSyxXQUFXLE1BQU0sSUFBSTtBQUMzQyxZQUFNLG1CQUFlLDJCQUFTLEtBQUssTUFBTSxRQUFRO0FBRWpELFVBQUksTUFBTSxZQUFZLEdBQUc7QUFDdkIsZUFBTyxPQUFPLFFBQVEsTUFBTSxLQUFLLGFBQWEsUUFBUSxDQUFDO0FBQUEsTUFDekQsT0FBTztBQUNMLGVBQU8sWUFBWSxJQUFJLFVBQU0sMEJBQVMsUUFBUTtBQUFBLE1BQ2hEO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFFRjtBQVNBLGVBQWUsUUFBUSxNQUE2QjtBQUNsRCxRQUFNLFdBQVcsS0FBSyxJQUFJLElBQUk7QUFDOUIsU0FBTyxLQUFLLElBQUksSUFBSSxVQUFVO0FBQzVCLFFBQUk7QUFDRixnQkFBTSxvQkFBRyxNQUFNLEVBQUUsT0FBTyxNQUFNLFdBQVcsS0FBSyxDQUFDO0FBQy9DO0FBQUEsSUFDRixRQUFRO0FBQ04sWUFBTSxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzdCLG1CQUFXLFNBQVMsOEJBQThCO0FBQUEsTUFDcEQsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBRUEsWUFBTSxvQkFBRyxNQUFNLEVBQUUsT0FBTyxNQUFNLFdBQVcsS0FBSyxDQUFDO0FBQ2pEOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -21,13 +21,32 @@ export type PopulateFileContent = string | Uint8Array | undefined;
21
21
  * All other paths are written as files.
22
22
  */
23
23
  export type PopulateFilesParams = Record<string, PopulateFileContent>;
24
+ /**
25
+ * Options for the {@link TemporaryVault} constructor.
26
+ */
27
+ export interface TemporaryVaultOptions {
28
+ /**
29
+ * Whether {@link TemporaryVault.dispose} removes the vault **directory**.
30
+ *
31
+ * When omitted, defaults to whether this instance created that directory — `true` for a temp
32
+ * directory the constructor made (no `path` argument), `false` for a directory handed to it as an
33
+ * explicit `path`. A handle over somebody else's directory unregisters the vault but leaves the
34
+ * files alone, so wrapping a directory cannot destroy it. Set explicitly to override.
35
+ */
36
+ readonly shouldRemoveDirectoryOnDispose?: boolean;
37
+ }
24
38
  /**
25
39
  * A temporary Obsidian vault for integration tests.
26
40
  *
27
41
  * Creates a temp directory and registers it in the running Obsidian instance
28
42
  * so that the Obsidian CLI can target it via `cwd`.
43
+ *
44
+ * A handle **owns** the directory only when it created it. {@link TemporaryVault.dispose} deletes an
45
+ * owned directory and leaves a borrowed one in place — see
46
+ * {@link TemporaryVaultOptions.shouldRemoveDirectoryOnDispose}, which overrides that default.
29
47
  */
30
48
  export declare class TemporaryVault {
49
+ #private;
31
50
  /**
32
51
  * The absolute path to the temporary vault.
33
52
  */
@@ -36,29 +55,50 @@ export declare class TemporaryVault {
36
55
  * Creates a new temp vault.
37
56
  *
38
57
  * @param path - An explicit vault path. If omitted, a temp directory is created.
58
+ * @param options - Vault options.
39
59
  */
40
- constructor(path?: string);
60
+ constructor(path?: string, options?: TemporaryVaultOptions);
41
61
  /**
42
- * Unregisters the vault from Obsidian and deletes the temp directory.
62
+ * Unregisters the vault from Obsidian and, when this handle owns the directory, deletes it.
63
+ *
64
+ * The directory is removed only when this instance created it, or when
65
+ * {@link TemporaryVaultOptions.shouldRemoveDirectoryOnDispose} said so explicitly. That is what
66
+ * makes a handle over a directory somebody else owns — the run's shared setup vault, say, which
67
+ * `getTemporaryVault()` wraps — safe to dispose from a consumer's `afterAll`.
43
68
  *
44
69
  * @param transportOverride - An explicit transport to use when unregistering.
45
70
  * When omitted, falls back to the transport configured via the context provider.
46
71
  */
47
72
  dispose(transportOverride?: ObsidianTransport): Promise<void>;
48
73
  /**
49
- * Writes files and folders into the vault directory.
74
+ * Writes files and folders into the vault directory **on the host**.
50
75
  * Parent directories are created automatically.
51
76
  *
52
77
  * - `string` values are written as UTF-8 text files.
53
78
  * - `Uint8Array` values (including `Buffer`) are written as binary files.
54
79
  * - Paths ending with `/` are treated as empty folders (value must be `undefined`).
55
80
  *
81
+ * The write is always host-local — {@link TemporaryVault.path} is a host path, and on a mobile
82
+ * transport the vault the app opens lives on the device instead. {@link TemporaryVault.register}
83
+ * carries the directory across before it registers, so populate-then-register is all a caller
84
+ * needs; {@link TemporaryVault.syncToDevice} is the seam that does the carrying.
85
+ *
56
86
  * @param files - Map of file/folder paths to content.
57
87
  */
58
88
  populate(files: PopulateFilesParams): void;
59
89
  /**
60
90
  * Registers this vault in the running Obsidian instance so the CLI can target it.
61
91
  *
92
+ * Pushes the vault directory to the target device first, via
93
+ * {@link TemporaryVault.syncToDevice} — a no-op on a transport whose app already reads the host
94
+ * filesystem. That ordering used to be the caller's to remember, and a caller who forgot got a
95
+ * silently **empty** vault rather than an error: every pre-registration
96
+ * {@link TemporaryVault.populate} write stayed on the host while the app opened the device's copy.
97
+ * Folding it in here makes populate-then-register correct on every transport.
98
+ *
99
+ * The transport is resolved once and handed to both steps, so a push and the registration that
100
+ * follows it can never land on two different transports.
101
+ *
62
102
  * @param transportOverride - An explicit transport to use. When omitted,
63
103
  * falls back to the transport configured via the context provider.
64
104
  */
@@ -76,8 +116,10 @@ export declare class TemporaryVault {
76
116
  * On desktop transports this is a no-op (files are already local).
77
117
  * On mobile transports (Appium) this pushes files to the device.
78
118
  *
79
- * Call this after {@link populate} and before {@link register} when using
80
- * a mobile transport.
119
+ * {@link TemporaryVault.register} calls this itself, so a populate-then-register sequence needs
120
+ * nothing extra. Call it directly only to carry across files written **after** registration: the
121
+ * host directory is not mirrored, so a later write into {@link TemporaryVault.path} stays on the
122
+ * host until this runs again.
81
123
  *
82
124
  * @param transportOverride - An explicit transport to use. When omitted,
83
125
  * falls back to the transport configured via the context provider.