obsidian-integration-testing 11.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 (234) 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 +112 -0
  8. package/dist/lib/cjs/appium-server-marker.d.cts +103 -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/cli.cjs +104 -19
  12. package/dist/lib/cjs/cli.d.cts +16 -8
  13. package/dist/lib/cjs/community-plugin-registry.cjs +52 -0
  14. package/dist/lib/cjs/community-plugin-registry.d.cts +116 -0
  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/context-provider.cjs +12 -1
  22. package/dist/lib/cjs/context-provider.d.cts +26 -3
  23. package/dist/lib/cjs/demo-vault-bootstrap.cjs +148 -0
  24. package/dist/lib/cjs/demo-vault-bootstrap.d.cts +114 -0
  25. package/dist/lib/cjs/demo-vault-populate.cjs +38 -10
  26. package/dist/lib/cjs/demo-vault-populate.d.cts +70 -0
  27. package/dist/lib/cjs/device-readiness.cjs +38 -3
  28. package/dist/lib/cjs/device-readiness.d.cts +83 -9
  29. package/dist/lib/cjs/emulator-arguments.cjs +6 -2
  30. package/dist/lib/cjs/emulator-arguments.d.cts +26 -0
  31. package/dist/lib/cjs/emulator-backend.cjs +71 -0
  32. package/dist/lib/cjs/emulator-backend.d.cts +76 -0
  33. package/dist/lib/cjs/emulator-liveness.cjs +72 -0
  34. package/dist/lib/cjs/emulator-liveness.d.cts +158 -0
  35. package/dist/lib/cjs/emulator-snapshot.cjs +57 -0
  36. package/dist/lib/cjs/emulator-snapshot.d.cts +68 -0
  37. package/dist/lib/cjs/eval-in-obsidian.cjs +1 -1
  38. package/dist/lib/cjs/eval-in-obsidian.d.cts +42 -13
  39. package/dist/lib/cjs/global-setup-core.cjs +30 -30
  40. package/dist/lib/cjs/global-setup-core.d.cts +27 -2
  41. package/dist/lib/cjs/headless-vault-config.cjs +51 -0
  42. package/dist/lib/cjs/headless-vault-config.d.cts +67 -0
  43. package/dist/lib/cjs/index.cjs +24 -1
  44. package/dist/lib/cjs/index.d.cts +14 -5
  45. package/dist/lib/cjs/installer-asset.cjs +1 -1
  46. package/dist/lib/cjs/installer-asset.d.cts +1 -1
  47. package/dist/lib/cjs/integration-setup-failed-error.cjs +62 -0
  48. package/dist/lib/cjs/integration-setup-failed-error.d.cts +66 -0
  49. package/dist/lib/cjs/jest/global-setup.cjs +2 -2
  50. package/dist/lib/cjs/jest/global-setup.d.cts +5 -1
  51. package/dist/lib/cjs/kill-process-tree.cjs +18 -7
  52. package/dist/lib/cjs/kill-process-tree.d.cts +10 -2
  53. package/dist/lib/cjs/library.cjs +1 -1
  54. package/dist/lib/cjs/mobile-input.cjs +173 -0
  55. package/dist/lib/cjs/mobile-input.d.cts +156 -0
  56. package/dist/lib/cjs/namespace-bootstrap.cjs +92 -9
  57. package/dist/lib/cjs/obsidian-installer.cjs +1 -1
  58. package/dist/lib/cjs/obsidian-instance.cjs +52 -3
  59. package/dist/lib/cjs/obsidian-instance.d.cts +12 -0
  60. package/dist/lib/cjs/obsidian-metadata.cjs +123 -17
  61. package/dist/lib/cjs/obsidian-metadata.d.cts +17 -6
  62. package/dist/lib/cjs/obsidian-version-switch.cjs +3 -3
  63. package/dist/lib/cjs/open-obsidian-settings-tab.cjs +1 -1
  64. package/dist/lib/cjs/open-obsidian-settings-tab.d.cts +3 -2
  65. package/dist/lib/cjs/owned-instance-exit-marker.cjs +99 -0
  66. package/dist/lib/cjs/owned-instance-exit-marker.d.cts +106 -0
  67. package/dist/lib/cjs/owned-instance-exited-error.cjs +106 -0
  68. package/dist/lib/cjs/owned-instance-exited-error.d.cts +98 -0
  69. package/dist/lib/cjs/owned-vault-seed.cjs +9 -5
  70. package/dist/lib/cjs/owned-vault-seed.d.cts +24 -3
  71. package/dist/lib/cjs/parent-liveness.cjs +42 -5
  72. package/dist/lib/cjs/parent-liveness.d.cts +37 -5
  73. package/dist/lib/cjs/port-owner.cjs +61 -0
  74. package/dist/lib/cjs/port-owner.d.cts +47 -0
  75. package/dist/lib/cjs/process-capture.cjs +62 -0
  76. package/dist/lib/cjs/process-capture.d.cts +83 -0
  77. package/dist/lib/cjs/process-exit-message.cjs +14 -8
  78. package/dist/lib/cjs/process-exit-message.d.cts +37 -3
  79. package/dist/lib/cjs/process-liveness.cjs +51 -0
  80. package/dist/lib/cjs/process-liveness.d.cts +18 -0
  81. package/dist/lib/cjs/release-catalog.cjs +73 -0
  82. package/dist/lib/cjs/release-catalog.d.cts +125 -0
  83. package/dist/lib/cjs/run-version-matrix.cjs +1 -1
  84. package/dist/lib/cjs/run-version-matrix.d.cts +1 -1
  85. package/dist/lib/cjs/teardown-verdict.cjs +53 -0
  86. package/dist/lib/cjs/teardown-verdict.d.cts +69 -0
  87. package/dist/lib/cjs/temporary-vault.cjs +43 -8
  88. package/dist/lib/cjs/temporary-vault.d.cts +47 -5
  89. package/dist/lib/cjs/transport-appium.cjs +223 -17
  90. package/dist/lib/cjs/transport-appium.d.cts +104 -3
  91. package/dist/lib/cjs/transport-desktop-cdp.cjs +201 -6
  92. package/dist/lib/cjs/transport-desktop-cdp.d.cts +100 -0
  93. package/dist/lib/cjs/transport-factory.cjs +1165 -142
  94. package/dist/lib/cjs/transport-factory.d.cts +10 -1
  95. package/dist/lib/cjs/transport-options.cjs +11 -3
  96. package/dist/lib/cjs/transport-options.d.cts +131 -12
  97. package/dist/lib/cjs/transport.cjs +1 -1
  98. package/dist/lib/cjs/transport.d.cts +7 -1
  99. package/dist/lib/cjs/vault-plugin-install.cjs +40 -0
  100. package/dist/lib/cjs/vault-plugin-install.d.cts +64 -0
  101. package/dist/lib/cjs/vault-teardown-verdict.cjs +42 -0
  102. package/dist/lib/cjs/vault-teardown-verdict.d.cts +57 -0
  103. package/dist/lib/cjs/version-matrix.cjs +1 -1
  104. package/dist/lib/cjs/version-matrix.d.cts +2 -2
  105. package/dist/lib/cjs/vitest/global-setup.cjs +13 -7
  106. package/dist/lib/cjs/vitest/global-setup.d.cts +5 -1
  107. package/dist/lib/cjs/vitest/setup.cjs +2 -1
  108. package/dist/lib/cjs/vitest/setup.d.cts +5 -0
  109. package/dist/lib/cjs/vitest/typings.d.cts +6 -4
  110. package/dist/lib/cjs/webview-cdp.cjs +263 -0
  111. package/dist/lib/cjs/webview-cdp.d.cts +156 -0
  112. package/dist/lib/cjs/wedged-appium-server.cjs +113 -0
  113. package/dist/lib/cjs/wedged-appium-server.d.cts +187 -0
  114. package/dist/lib/esm/adb-device-list.d.mts +72 -0
  115. package/dist/lib/esm/adb-device-list.mjs +28 -0
  116. package/dist/lib/esm/android-sdk.d.mts +29 -0
  117. package/dist/lib/esm/android-sdk.mjs +18 -0
  118. package/dist/lib/esm/app-startup-progress.d.mts +128 -0
  119. package/dist/lib/esm/app-startup-progress.mjs +59 -0
  120. package/dist/lib/esm/appium-server-marker.d.mts +103 -0
  121. package/dist/lib/esm/appium-server-marker.mjs +89 -0
  122. package/dist/lib/esm/avd-probe-verdict.d.mts +175 -0
  123. package/dist/lib/esm/avd-probe-verdict.mjs +62 -0
  124. package/dist/lib/esm/cli.d.mts +16 -8
  125. package/dist/lib/esm/cli.mjs +110 -19
  126. package/dist/lib/esm/community-plugin-registry.d.mts +116 -0
  127. package/dist/lib/esm/community-plugin-registry.mjs +23 -0
  128. package/dist/lib/esm/config-directory-fallback-error.d.mts +64 -0
  129. package/dist/lib/esm/config-directory-fallback-error.mjs +33 -0
  130. package/dist/lib/esm/config-directory.d.mts +45 -0
  131. package/dist/lib/esm/config-directory.mjs +21 -0
  132. package/dist/lib/esm/connect-to-cdp.d.mts +19 -0
  133. package/dist/lib/esm/connect-to-cdp.mjs +13 -7
  134. package/dist/lib/esm/context-provider.d.mts +26 -3
  135. package/dist/lib/esm/context-provider.mjs +10 -1
  136. package/dist/lib/esm/demo-vault-bootstrap.d.mts +114 -0
  137. package/dist/lib/esm/demo-vault-bootstrap.mjs +127 -0
  138. package/dist/lib/esm/demo-vault-populate.d.mts +70 -0
  139. package/dist/lib/esm/demo-vault-populate.mjs +35 -9
  140. package/dist/lib/esm/device-readiness.d.mts +83 -9
  141. package/dist/lib/esm/device-readiness.mjs +34 -2
  142. package/dist/lib/esm/emulator-arguments.d.mts +26 -0
  143. package/dist/lib/esm/emulator-arguments.mjs +6 -2
  144. package/dist/lib/esm/emulator-backend.d.mts +76 -0
  145. package/dist/lib/esm/emulator-backend.mjs +45 -0
  146. package/dist/lib/esm/emulator-liveness.d.mts +158 -0
  147. package/dist/lib/esm/emulator-liveness.mjs +47 -0
  148. package/dist/lib/esm/emulator-snapshot.d.mts +68 -0
  149. package/dist/lib/esm/emulator-snapshot.mjs +32 -0
  150. package/dist/lib/esm/eval-in-obsidian.d.mts +42 -13
  151. package/dist/lib/esm/eval-in-obsidian.mjs +1 -1
  152. package/dist/lib/esm/global-setup-core.d.mts +27 -2
  153. package/dist/lib/esm/global-setup-core.mjs +34 -35
  154. package/dist/lib/esm/headless-vault-config.d.mts +67 -0
  155. package/dist/lib/esm/headless-vault-config.mjs +31 -0
  156. package/dist/lib/esm/index.d.mts +14 -5
  157. package/dist/lib/esm/index.mjs +26 -2
  158. package/dist/lib/esm/installer-asset.d.mts +1 -1
  159. package/dist/lib/esm/installer-asset.mjs +1 -1
  160. package/dist/lib/esm/integration-setup-failed-error.d.mts +66 -0
  161. package/dist/lib/esm/integration-setup-failed-error.mjs +38 -0
  162. package/dist/lib/esm/jest/global-setup.d.mts +5 -1
  163. package/dist/lib/esm/jest/global-setup.mjs +2 -2
  164. package/dist/lib/esm/kill-process-tree.d.mts +10 -2
  165. package/dist/lib/esm/kill-process-tree.mjs +16 -6
  166. package/dist/lib/esm/library.mjs +1 -1
  167. package/dist/lib/esm/mobile-input.d.mts +156 -0
  168. package/dist/lib/esm/mobile-input.mjs +144 -0
  169. package/dist/lib/esm/namespace-bootstrap.mjs +95 -9
  170. package/dist/lib/esm/obsidian-installer.mjs +1 -1
  171. package/dist/lib/esm/obsidian-instance.d.mts +12 -0
  172. package/dist/lib/esm/obsidian-instance.mjs +55 -3
  173. package/dist/lib/esm/obsidian-metadata.d.mts +17 -6
  174. package/dist/lib/esm/obsidian-metadata.mjs +123 -17
  175. package/dist/lib/esm/obsidian-version-switch.mjs +3 -3
  176. package/dist/lib/esm/open-obsidian-settings-tab.d.mts +3 -2
  177. package/dist/lib/esm/open-obsidian-settings-tab.mjs +1 -1
  178. package/dist/lib/esm/owned-instance-exit-marker.d.mts +106 -0
  179. package/dist/lib/esm/owned-instance-exit-marker.mjs +78 -0
  180. package/dist/lib/esm/owned-instance-exited-error.d.mts +98 -0
  181. package/dist/lib/esm/owned-instance-exited-error.mjs +81 -0
  182. package/dist/lib/esm/owned-vault-seed.d.mts +24 -3
  183. package/dist/lib/esm/owned-vault-seed.mjs +9 -5
  184. package/dist/lib/esm/parent-liveness.d.mts +37 -5
  185. package/dist/lib/esm/parent-liveness.mjs +42 -5
  186. package/dist/lib/esm/port-owner.d.mts +47 -0
  187. package/dist/lib/esm/port-owner.mjs +36 -0
  188. package/dist/lib/esm/process-capture.d.mts +83 -0
  189. package/dist/lib/esm/process-capture.mjs +38 -0
  190. package/dist/lib/esm/process-exit-message.d.mts +37 -3
  191. package/dist/lib/esm/process-exit-message.mjs +13 -8
  192. package/dist/lib/esm/process-liveness.d.mts +18 -0
  193. package/dist/lib/esm/process-liveness.mjs +17 -0
  194. package/dist/lib/esm/release-catalog.d.mts +125 -0
  195. package/dist/lib/esm/release-catalog.mjs +46 -0
  196. package/dist/lib/esm/run-version-matrix.d.mts +1 -1
  197. package/dist/lib/esm/run-version-matrix.mjs +1 -1
  198. package/dist/lib/esm/teardown-verdict.d.mts +69 -0
  199. package/dist/lib/esm/teardown-verdict.mjs +28 -0
  200. package/dist/lib/esm/temporary-vault.d.mts +47 -5
  201. package/dist/lib/esm/temporary-vault.mjs +43 -8
  202. package/dist/lib/esm/transport-appium.d.mts +104 -3
  203. package/dist/lib/esm/transport-appium.mjs +233 -17
  204. package/dist/lib/esm/transport-desktop-cdp.d.mts +100 -0
  205. package/dist/lib/esm/transport-desktop-cdp.mjs +208 -7
  206. package/dist/lib/esm/transport-factory.d.mts +10 -1
  207. package/dist/lib/esm/transport-factory.mjs +1220 -149
  208. package/dist/lib/esm/transport-options.d.mts +131 -12
  209. package/dist/lib/esm/transport-options.mjs +9 -2
  210. package/dist/lib/esm/transport.d.mts +7 -1
  211. package/dist/lib/esm/vault-plugin-install.d.mts +64 -0
  212. package/dist/lib/esm/vault-plugin-install.mjs +20 -0
  213. package/dist/lib/esm/vault-teardown-verdict.d.mts +57 -0
  214. package/dist/lib/esm/vault-teardown-verdict.mjs +18 -0
  215. package/dist/lib/esm/version-matrix.d.mts +2 -2
  216. package/dist/lib/esm/version-matrix.mjs +1 -1
  217. package/dist/lib/esm/vitest/global-setup.d.mts +5 -1
  218. package/dist/lib/esm/vitest/global-setup.mjs +14 -7
  219. package/dist/lib/esm/vitest/setup.d.mts +5 -0
  220. package/dist/lib/esm/vitest/setup.mjs +3 -1
  221. package/dist/lib/esm/vitest/typings.d.mts +6 -4
  222. package/dist/lib/esm/webview-cdp.d.mts +156 -0
  223. package/dist/lib/esm/webview-cdp.mjs +235 -0
  224. package/dist/lib/esm/wedged-appium-server.d.mts +187 -0
  225. package/dist/lib/esm/wedged-appium-server.mjs +86 -0
  226. package/package.json +25 -23
  227. package/dist/lib/cjs/native-dialog-monitor.cjs +0 -192
  228. package/dist/lib/cjs/native-dialog-monitor.d.cts +0 -66
  229. package/dist/lib/cjs/obsidian-namespace.cjs +0 -17
  230. package/dist/lib/cjs/obsidian-namespace.d.cts +0 -128
  231. package/dist/lib/esm/native-dialog-monitor.d.mts +0 -66
  232. package/dist/lib/esm/native-dialog-monitor.mjs +0 -158
  233. package/dist/lib/esm/obsidian-namespace.d.mts +0 -128
  234. package/dist/lib/esm/obsidian-namespace.mjs +0 -1
@@ -1,14 +1,32 @@
1
1
  /**
2
2
  * @file
3
3
  *
4
- * Pure builder for the diagnostic message describing an auto-started child
5
- * process (the Android emulator or the Appium server) that died during startup,
6
- * appending the captured output tail when available.
4
+ * Pure builders for the diagnostic message describing an auto-started child
5
+ * process (the Android emulator or the Appium server) that failed during
6
+ * startup, appending the captured output tail when available.
7
+ *
8
+ * A startup fails two ways — the process **dies**, or it **hangs** past a
9
+ * budget — and the captured tail is equally the explanation in both. So the
10
+ * tail-appending half is its own export, used by the timeout throws that once
11
+ * reported only the budget they blew.
7
12
  *
8
13
  * Kept separate from the integration-only `transport-factory` (excluded from
9
14
  * unit tests) so the message formatting stays unit-testable — the launchers
10
15
  * themselves spawn real processes.
11
16
  */
17
+ /**
18
+ * Parameters for {@link appendProcessOutputTail}.
19
+ */
20
+ export interface AppendProcessOutputTailParams {
21
+ /**
22
+ The captured stdout+stderr tail (empty when none was captured).
23
+ */
24
+ readonly output: string;
25
+ /**
26
+ Label for the captured output section (e.g. `"Emulator output"`).
27
+ */
28
+ readonly outputLabel: string;
29
+ }
12
30
  /**
13
31
  * Parameters for {@link buildProcessExitMessage}.
14
32
  */
@@ -51,6 +69,22 @@ export interface ProcessExitInfo {
51
69
  */
52
70
  readonly spawnError?: string;
53
71
  }
72
+ /**
73
+ * Appends a process's captured output tail to a message, when there is one.
74
+ *
75
+ * Split out of {@link buildProcessExitMessage} so the **timeout** failures can
76
+ * carry the tail too. A process that dies gets its output attached; one that
77
+ * hangs used to get `No new emulator device appeared within 300000ms.` and
78
+ * nothing else — even though the line that explains it (`FATAL | Running
79
+ * multiple emulators with the same AVD is an experimental feature`) had already
80
+ * been captured. The emulator writing its own diagnosis is worth nothing if the
81
+ * harness reads it on only one of the two ways a startup can fail.
82
+ *
83
+ * @param message - The failure message to extend.
84
+ * @param params - The captured tail and its label.
85
+ * @returns The message, with the tail appended when non-empty.
86
+ */
87
+ export declare function appendProcessOutputTail(message: string, params: AppendProcessOutputTailParams): string;
54
88
  /**
55
89
  * Builds a descriptive error message for an auto-started child process that
56
90
  * exited (or failed to spawn) during startup, appending the captured output
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
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
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var process_liveness_exports = {};
30
+ __export(process_liveness_exports, {
31
+ checkIsProcessAlive: () => checkIsProcessAlive
32
+ });
33
+ module.exports = __toCommonJS(process_liveness_exports);
34
+ var import_node_process = __toESM(require("node:process"), 1);
35
+ const PROCESS_EXISTENCE_PROBE_SIGNAL = 0;
36
+ function checkIsProcessAlive(pid) {
37
+ try {
38
+ import_node_process.default.kill(pid, PROCESS_EXISTENCE_PROBE_SIGNAL);
39
+ return true;
40
+ } catch (error) {
41
+ return getErrorCode(error) === "EPERM";
42
+ }
43
+ }
44
+ function getErrorCode(error) {
45
+ return typeof error === "object" && error !== null && "code" in error ? String(error.code) : void 0;
46
+ }
47
+ // Annotate the CommonJS export names for ESM import in node:
48
+ 0 && (module.exports = {
49
+ checkIsProcessAlive
50
+ });
51
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3Byb2Nlc3MtbGl2ZW5lc3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDaGVhcCwgc3luY2hyb25vdXMgXCJpcyB0aGlzIFBJRCBzdGlsbCBydW5uaW5nP1wiIHByb2JlLlxuICpcbiAqIFNpZ25hbCBgMGAgcGVyZm9ybXMgdGhlIHBlcm1pc3Npb24gYW5kIGV4aXN0ZW5jZSBjaGVja3Mgd2l0aG91dCBkZWxpdmVyaW5nIGFcbiAqIHNpZ25hbCwgb24gV2luZG93cyBhcyB3ZWxsIGFzIFBPU0lYLCBzbyBpdCBjb3N0cyBub3RoaW5nIGF0IHRlYXJkb3duLXBvbGxcbiAqIGZyZXF1ZW5jeS4gYEVQRVJNYCBtZWFucyB0aGUgcHJvY2VzcyBleGlzdHMgYnV0IGlzIG93bmVkIGJ5IGFub3RoZXIgdXNlciBcdTIwMTRcbiAqIHN0aWxsIGFsaXZlLCBhbmQgdGhlIGRpc3RpbmN0aW9uIG1hdHRlcnM6IHJlYWRpbmcgaXQgYXMgZGVhZCBpcyBob3cgYVxuICogdGVhcmRvd24gY29udmluY2VzIGl0c2VsZiBhIHByb2Nlc3MgaXQgY291bGQgbm90IHRvdWNoIGlzIGdvbmUuXG4gKi9cblxuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuY29uc3QgUFJPQ0VTU19FWElTVEVOQ0VfUFJPQkVfU0lHTkFMID0gMDtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0gcGlkIC0gVGhlIFBJRCB0byBwcm9iZS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBwcm9jZXNzIGV4aXN0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSXNQcm9jZXNzQWxpdmUocGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBwcm9jZXNzLmtpbGwocGlkLCBQUk9DRVNTX0VYSVNURU5DRV9QUk9CRV9TSUdOQUwpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIHJldHVybiBnZXRFcnJvckNvZGUoZXJyb3IpID09PSAnRVBFUk0nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEVycm9yQ29kZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmIGVycm9yICE9PSBudWxsICYmICdjb2RlJyBpbiBlcnJvciA/IFN0cmluZyhlcnJvci5jb2RlKSA6IHVuZGVmaW5lZDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsMEJBQW9CO0FBRXBCLE1BQU0saUNBQWlDO0FBUWhDLFNBQVMsb0JBQW9CLEtBQXNCO0FBQ3hELE1BQUk7QUFDRix3QkFBQUEsUUFBUSxLQUFLLEtBQUssOEJBQThCO0FBQ2hELFdBQU87QUFBQSxFQUNULFNBQVMsT0FBZ0I7QUFDdkIsV0FBTyxhQUFhLEtBQUssTUFBTTtBQUFBLEVBQ2pDO0FBQ0Y7QUFFQSxTQUFTLGFBQWEsT0FBb0M7QUFDeEQsU0FBTyxPQUFPLFVBQVUsWUFBWSxVQUFVLFFBQVEsVUFBVSxRQUFRLE9BQU8sTUFBTSxJQUFJLElBQUk7QUFDL0Y7IiwKICAibmFtZXMiOiBbInByb2Nlc3MiXQp9Cg==
@@ -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;
@@ -0,0 +1,73 @@
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 release_catalog_exports = {};
20
+ __export(release_catalog_exports, {
21
+ CATALYST_ASAR_RELEASE_BASE_URL: () => CATALYST_ASAR_RELEASE_BASE_URL,
22
+ buildCatalystAsarUrl: () => buildCatalystAsarUrl,
23
+ resolveReleaseChannel: () => resolveReleaseChannel,
24
+ selectReleaseDownloads: () => selectReleaseDownloads
25
+ });
26
+ module.exports = __toCommonJS(release_catalog_exports);
27
+ var import_installer_asset = require("./installer-asset.cjs");
28
+ var import_obsidian_version = require("./obsidian-version.cjs");
29
+ const CATALYST_ASAR_RELEASE_BASE_URL = "https://releases.obsidian.md/release";
30
+ const INSTALLER_KEYS_BY_PLATFORM = [
31
+ ["dmg", "darwin"],
32
+ ["exe", "win32"],
33
+ ["tar", "linux"]
34
+ ];
35
+ function buildCatalystAsarUrl(version) {
36
+ return `${CATALYST_ASAR_RELEASE_BASE_URL}/${(0, import_obsidian_version.getVersionAsarFileName)(version)}.gz`;
37
+ }
38
+ function resolveReleaseChannel(params) {
39
+ if (params.hasPublicRelease) {
40
+ return params.hasPublicPage && params.hasCatalystPage ? "public+catalyst" : "public";
41
+ }
42
+ return params.hasCatalystPage ? "catalyst" : void 0;
43
+ }
44
+ function selectReleaseDownloads(params) {
45
+ const { assets, version } = params;
46
+ const assetNames = assets.map((asset) => asset.name);
47
+ const urlByName = new Map(assets.map((asset) => [asset.name, asset.url]));
48
+ const downloads = {};
49
+ const apkUrl = urlByName.get(`Obsidian-${version}.apk`);
50
+ if (apkUrl !== void 0) {
51
+ downloads["apk"] = apkUrl;
52
+ }
53
+ const asarUrl = urlByName.get(`${(0, import_obsidian_version.getVersionAsarFileName)(version)}.gz`);
54
+ if (asarUrl !== void 0) {
55
+ downloads["asar"] = asarUrl;
56
+ }
57
+ for (const [key, platform] of INSTALLER_KEYS_BY_PLATFORM) {
58
+ const assetName = (0, import_installer_asset.selectInstallerAssetName)({ assetNames, platform, version });
59
+ const url = assetName === void 0 ? void 0 : urlByName.get(assetName);
60
+ if (url !== void 0) {
61
+ downloads[key] = url;
62
+ }
63
+ }
64
+ return Object.keys(downloads).length > 0 ? downloads : void 0;
65
+ }
66
+ // Annotate the CommonJS export names for ESM import in node:
67
+ 0 && (module.exports = {
68
+ CATALYST_ASAR_RELEASE_BASE_URL,
69
+ buildCatalystAsarUrl,
70
+ resolveReleaseChannel,
71
+ selectReleaseDownloads
72
+ });
73
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3JlbGVhc2UtY2F0YWxvZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFB1cmUgaGVscGVycyBmb3IgYnVpbGRpbmcgdGhlIHJlcG8tcm9vdCBgbWV0YWRhdGEuanNvbmAgY2F0YWxvZyBmcm9tIE9ic2lkaWFuJ3NcbiAqICoqb3duKiogcHVibGljYXRpb24gZW5kcG9pbnRzLCB3aXRoIG5vIHRoaXJkLXBhcnR5IGNhdGFsb2cgaW4gdGhlIGxvb3AuXG4gKlxuICogYHNjcmlwdHMvcmVmcmVzaC1tZXRhZGF0YS50c2AgZHJpdmVzIHRoZSBuZXR3b3JrIHNpZGUgKHRoZVxuICogYG9ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXNgIEdpdEh1YiBSZWxlYXNlcyBBUEksIGBvYnNpZGlhbi5tZC9jaGFuZ2Vsb2cueG1sYFxuICogYW5kIGBkZXNrdG9wLXJlbGVhc2VzLmpzb25gKTsgZXZlcnl0aGluZyBkZWNpZGFibGUgd2l0aG91dCB0aGUgbmV0d29yayBsaXZlc1xuICogaGVyZSBzbyBpdCBzdGF5cyB1bml0LXRlc3RlZC5cbiAqXG4gKiBUaHJlZSBkZWNpc2lvbnMgYXJlIGVuY29kZWQ6XG4gKlxuICogLSAqKldoaWNoIHJlbGVhc2UgYXNzZXRzIGJlY29tZSBgZG93bmxvYWRzYCBrZXlzLioqIEEgcmVsZWFzZSdzIHJlYWwgYXNzZXQgbGlzdFxuICogICBpcyBtYXRjaGVkIHJhdGhlciB0aGFuIHRlbXBsYXRlZCwgcmV1c2luZyB7QGxpbmsgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lfSBmb3JcbiAqICAgdGhlIGRlc2t0b3AgaW5zdGFsbGVycyBzbyB0aGUgaGlzdG9yaWNhbCBkb3QtdnMtaHlwaGVuIHNlcGFyYXRvciByZW5hbWUgKGFuZFxuICogICB0aGUgYC11bml2ZXJzYWxgIGRtZyBpbmZpeCkgaXMgaGFuZGxlZCBpbiBleGFjdGx5IG9uZSBwbGFjZS4gVGhlIDMyLWJpdCxcbiAqICAgYXJtNjQsIEFwcEltYWdlLCBkZWIgYW5kIHNuYXAgc2libGluZ3MgYXJlIGRlbGliZXJhdGVseSBub3QgY2FycmllZCBcdTIwMTQgdGhpc1xuICogICBoYXJuZXNzIGRvd25sb2FkcyBvbmx5IHRoZSB4NjQgaW5zdGFsbGVyLCB0aGUgYXBwIGFzYXIgYW5kIHRoZSBBbmRyb2lkIGFway5cbiAqIC0gKipXaGljaCBjaGFubmVsIGEgdmVyc2lvbiBiZWxvbmdzIHRvKiosIGRlcml2ZWQgZnJvbSB3aGljaCBjaGFuZ2Vsb2cgcGFnZXNcbiAqICAgdGhlIGZlZWQgcHVibGlzaGVkIGZvciBpdCAoc2VlIHtAbGluayByZXNvbHZlUmVsZWFzZUNoYW5uZWx9KS5cbiAqIC0gKipXaGVyZSBhIGNhdGFseXN0IGFzYXIgbGl2ZXMqKiAoe0BsaW5rIGJ1aWxkQ2F0YWx5c3RBc2FyVXJsfSkgXHUyMDE0IHRoZSBvbmUgYXNzZXRcbiAqICAgd2l0aCBubyBsaXN0aW5nIEFQSSBiZWhpbmQgaXQsIHNvIGl0cyBVUkwgbXVzdCBiZSBjb25zdHJ1Y3RlZCBhbmQgcHJvYmVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uRG93bmxvYWRzIH0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5janMnO1xuXG5pbXBvcnQgeyBzZWxlY3RJbnN0YWxsZXJBc3NldE5hbWUgfSBmcm9tICcuL2luc3RhbGxlci1hc3NldC5janMnO1xuaW1wb3J0IHsgZ2V0VmVyc2lvbkFzYXJGaWxlTmFtZSB9IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5janMnO1xuXG4vKipcbiAqIEJhc2UgVVJMIGZvciAqKmNhdGFseXN0KiogKGVhcmx5IGFjY2VzcyAvIGluc2lkZXIpIHJlbGVhc2UgYXNhcnMsIHNlcnZlZCBmcm9tXG4gKiB0aGUgT2JzaWRpYW4gQ0ROIGFzIGAuLi4vcmVsZWFzZS9vYnNpZGlhbi08dmVyc2lvbj4uYXNhci5nemAuIFB1YmxpYyB2ZXJzaW9uc1xuICogYXJlIE5PVCBob3N0ZWQgaGVyZSAodGhlIENETiByZXR1cm5zIGFuIGVtcHR5IGJvZHkgZm9yIHRoZW0pLCBhbmQgdGhlIGVuZHBvaW50XG4gKiBpcyBDbG91ZGZsYXJlLWdhdGVkIGFnYWluc3Qgbm9uLWJyb3dzZXIgY2xpZW50cywgc28gYSBwcm9iZSBuZWVkcyBhIGJyb3dzZXJcbiAqIGBVc2VyLUFnZW50YC5cbiAqL1xuZXhwb3J0IGNvbnN0IENBVEFMWVNUX0FTQVJfUkVMRUFTRV9CQVNFX1VSTCA9ICdodHRwczovL3JlbGVhc2VzLm9ic2lkaWFuLm1kL3JlbGVhc2UnO1xuXG4vKipcbiAqIE9uZSBhc3NldCBvZiBhIEdpdEh1YiByZWxlYXNlLCByZWR1Y2VkIHRvIHdoYXQgdGhlIGNhdGFsb2cgbmVlZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVsZWFzZUFzc2V0IHtcbiAgLyoqXG4gIFRoZSBwdWJsaXNoZWQgYXNzZXQgZmlsZSBuYW1lLCBlLmcuIGBPYnNpZGlhbi0xLjEzLjcuZXhlYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgVGhlIGFzc2V0J3MgZGlyZWN0IGRvd25sb2FkIFVSTCAoYGJyb3dzZXJfZG93bmxvYWRfdXJsYCkuXG4gICAqL1xuICByZWFkb25seSB1cmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZVJlbGVhc2VDaGFubmVsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlUmVsZWFzZUNoYW5uZWxQYXJhbXMge1xuICAvKipcbiAgV2hldGhlciB0aGUgY2hhbmdlbG9nIGZlZWQgcHVibGlzaGVkIGEgY2F0YWx5c3QgKFwiRWFybHkgYWNjZXNzXCIpIGRlc2t0b3AgcGFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGhhc0NhdGFseXN0UGFnZTogYm9vbGVhbjtcblxuICAvKipcbiAgV2hldGhlciB0aGUgY2hhbmdlbG9nIGZlZWQgcHVibGlzaGVkIGEgcHVibGljIGRlc2t0b3AgcGFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGhhc1B1YmxpY1BhZ2U6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHZlcnNpb24gd2FzIHB1Ymxpc2hlZCBhcyBhIEdpdEh1YiByZWxlYXNlIFx1MjAxNCB0aGUgZXZpZGVuY2UgdGhhdCBpdFxuICAgKiBzaGlwcGVkIG9uIHRoZSBwdWJsaWMgY2hhbm5lbCwgc2luY2UgY2F0YWx5c3QgYnVpbGRzIGFyZSBzZXJ2ZWQgb25seSBmcm9tXG4gICAqIHRoZSBgcmVsZWFzZXMub2JzaWRpYW4ubWRgIENETi5cbiAgICovXG4gIHJlYWRvbmx5IGhhc1B1YmxpY1JlbGVhc2U6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNlbGVjdFJlbGVhc2VEb3dubG9hZHN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdFJlbGVhc2VEb3dubG9hZHNQYXJhbXMge1xuICAvKipcbiAgVGhlIHJlbGVhc2UncyBwdWJsaXNoZWQgYXNzZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRzOiByZWFkb25seSBSZWxlYXNlQXNzZXRbXTtcblxuICAvKipcbiAgVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbiB0aGUgcmVsZWFzZSBwdWJsaXNoZXMuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGRlc2t0b3AtaW5zdGFsbGVyIGBkb3dubG9hZHNgIGtleXMsIHBhaXJlZCB3aXRoIHRoZSBwbGF0Zm9ybSB3aG9zZSBhc3NldFxuICogc2hhcGUge0BsaW5rIHNlbGVjdEluc3RhbGxlckFzc2V0TmFtZX0gcmVzb2x2ZXMgZm9yIHRoZW0uXG4gKi9cbmNvbnN0IElOU1RBTExFUl9LRVlTX0JZX1BMQVRGT1JNOiByZWFkb25seSAocmVhZG9ubHkgW2tleTogJ2RtZycgfCAnZXhlJyB8ICd0YXInLCBwbGF0Zm9ybTogTm9kZUpTLlBsYXRmb3JtXSlbXSA9IFtcbiAgWydkbWcnLCAnZGFyd2luJ10sXG4gIFsnZXhlJywgJ3dpbjMyJ10sXG4gIFsndGFyJywgJ2xpbnV4J11cbl07XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjYXRhbHlzdCBhc2FyIFVSTCBmb3IgYSB2ZXJzaW9uLlxuICpcbiAqIENhdGFseXN0IGJ1aWxkcyBhcmUgbm90IHB1Ymxpc2hlZCBhcyBHaXRIdWIgcmVsZWFzZSBhc3NldHMsIGFuZCB0aGUgQ0ROIHRoYXRcbiAqIHNlcnZlcyB0aGVtIGhhcyBubyBsaXN0aW5nIEFQSSwgc28gdGhpcyBVUkwgaXMgY29uc3RydWN0ZWQgcmF0aGVyIHRoYW5cbiAqIGRpc2NvdmVyZWQgXHUyMDE0IHRoZSBjYWxsZXIgcHJvYmVzIGl0IGJlZm9yZSByZWNvcmRpbmcgaXQuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBUaGUgY29uY3JldGUgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGByZWxlYXNlcy5vYnNpZGlhbi5tZGAgYXNhciBVUkwgZm9yIHRoZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDYXRhbHlzdEFzYXJVcmwodmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke0NBVEFMWVNUX0FTQVJfUkVMRUFTRV9CQVNFX1VSTH0vJHtnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb24pfS5nemA7XG59XG5cbi8qKlxuICogRGVyaXZlcyBhIHZlcnNpb24ncyByZWxlYXNlIGNoYW5uZWwgZnJvbSB3aGVyZSBpdCB3YXMgcHVibGlzaGVkIGFuZCB3aGljaFxuICogY2hhbmdlbG9nIHBhZ2VzIHRoZSBmZWVkIGNhcnJpZXMgZm9yIGl0LlxuICpcbiAqICoqUHVibGljYXRpb24gaXMgdGhlIHByaW1hcnkgZXZpZGVuY2UsIG5vdCB0aGUgZmVlZCdzIHRpdGxlIG1hcmtlci4qKiBUaGUgZmVlZFxuICogdGFncyBlYWNoIGVudHJ5IGAoUHVibGljKWAgb3IgYChFYXJseSBhY2Nlc3MpYCwgYnV0IHRocm91Z2ggdGhlIHByZS0xLjAgZXJhIGl0XG4gKiB0YWdnZWQgKmV2ZXJ5dGhpbmcqIGVhcmx5LWFjY2VzcyBcdTIwMTQgdGhlIHdob2xlIGFwcCB3YXMgXHUyMDE0IHNvIDYxIHZlcnNpb25zIHRoYXRcbiAqIHNoaXBwZWQgYXMgb3JkaW5hcnkgR2l0SHViIHJlbGVhc2VzIGNhcnJ5IG9ubHkgYSBjYXRhbHlzdCBwYWdlLiBUcnVzdGluZyB0aGVcbiAqIG1hcmtlciBhbG9uZSB0aGVyZWZvcmUgcmVsYWJlbHMgYSBsYXJnZSBzbGljZSBvZiBwdWJsaWMgaGlzdG9yeSBhcyBjYXRhbHlzdC5cbiAqIEEgR2l0SHViIHJlbGVhc2UgaXMgdW5hbWJpZ3VvdXMgdGhlIG90aGVyIHdheSByb3VuZDogY2F0YWx5c3QgYnVpbGRzIGFyZVxuICogc2VydmVkIG9ubHkgZnJvbSB0aGUgYHJlbGVhc2VzLm9ic2lkaWFuLm1kYCBDRE4sIG5ldmVyIGFzIHJlbGVhc2UgYXNzZXRzLlxuICpcbiAqIFNvIGEgdmVyc2lvbiB0aGF0IHdhcyBwdWJsaXNoZWQgb24gR2l0SHViIGlzIHB1YmxpYywgYW5kIGl0IGlzIHJlY29yZGVkIGFzIHRoZVxuICogY29tYmluZWQgYCdwdWJsaWMrY2F0YWx5c3QnYCBvbmx5IHdoZW4gdGhlIGZlZWQgY2FycmllcyAqYm90aCogZGVza3RvcCBwYWdlcyBcdTIwMTRcbiAqIHRoZSBzaGFwZSBldmVyeSB2ZXJzaW9uIGFscmVhZHkgbGFiZWxsZWQgYCdwdWJsaWMrY2F0YWx5c3QnYCBoYXMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwdWJsaWNhdGlvbiBldmlkZW5jZSBhbmQgdGhlIGRlc2t0b3AgcGFnZXMgdGhlIGZlZWQgcHVibGlzaGVkLlxuICogQHJldHVybnMgVGhlIGNoYW5uZWwsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlcmUgaXMgbm8gZXZpZGVuY2UgZWl0aGVyIHdheSAodGhlXG4gKiAgIGNhbGxlciB0aGVuIGtlZXBzIHdoYXRldmVyIHRoZSB2ZXJzaW9uIGFscmVhZHkgY2FycmllcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUmVsZWFzZUNoYW5uZWwocGFyYW1zOiBSZXNvbHZlUmVsZWFzZUNoYW5uZWxQYXJhbXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocGFyYW1zLmhhc1B1YmxpY1JlbGVhc2UpIHtcbiAgICByZXR1cm4gcGFyYW1zLmhhc1B1YmxpY1BhZ2UgJiYgcGFyYW1zLmhhc0NhdGFseXN0UGFnZSA/ICdwdWJsaWMrY2F0YWx5c3QnIDogJ3B1YmxpYyc7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zLmhhc0NhdGFseXN0UGFnZSA/ICdjYXRhbHlzdCcgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGlja3MgdGhlIGFzc2V0cyB0aGlzIGhhcm5lc3MgZG93bmxvYWRzIG91dCBvZiBhIEdpdEh1YiByZWxlYXNlJ3MgcmVhbCBhc3NldFxuICogbGlzdDogdGhlIHg2NCBkZXNrdG9wIGluc3RhbGxlcnMsIHRoZSBhcHAgYXNhciBhbmQgdGhlIEFuZHJvaWQgYXBrLlxuICpcbiAqIEFzc2V0cyBhcmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSAqKnJlbGVhc2UncyBvd24gdmVyc2lvbioqLCBzbyBhbiBlYXJseS1hY2Nlc3NcbiAqIHRhZyB3aG9zZSBhc3NldHMgY2FycnkgdGhlIGJhc2UgdmVyc2lvbiBpbnN0ZWFkIChgdjEuMS44LUUyMWAgcHVibGlzaGluZ1xuICogYE9ic2lkaWFuLjEuMS44LmV4ZWAsIGB2MS42LjMtZTMwYCBwdWJsaXNoaW5nIGBPYnNpZGlhbi4xLjYuMy5leGVgKSBtYXRjaGVzXG4gKiBub3RoaW5nIGFuZCBpcyBza2lwcGVkIFx1MjAxNCBkZWxpYmVyYXRlbHksIHNpbmNlIHRob3NlIGFzc2V0cyBhcmUgdGhlIGJhc2VcbiAqIHZlcnNpb24ncywgbm90IHRoZSB0YWcncy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHJlbGVhc2UncyBhc3NldHMgYW5kIGl0cyB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGRpc3RpbGxlZCBkb3dubG9hZCBVUkxzLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSByZWxlYXNlXG4gKiAgIHB1Ymxpc2hlcyBub25lIG9mIHRoZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RSZWxlYXNlRG93bmxvYWRzKHBhcmFtczogU2VsZWN0UmVsZWFzZURvd25sb2Fkc1BhcmFtcyk6IE9ic2lkaWFuVmVyc2lvbkRvd25sb2FkcyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgYXNzZXRzLCB2ZXJzaW9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGFzc2V0TmFtZXMgPSBhc3NldHMubWFwKChhc3NldCkgPT4gYXNzZXQubmFtZSk7XG4gIGNvbnN0IHVybEJ5TmFtZSA9IG5ldyBNYXAoYXNzZXRzLm1hcCgoYXNzZXQpID0+IFthc3NldC5uYW1lLCBhc3NldC51cmxdKSk7XG4gIGNvbnN0IGRvd25sb2FkczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGNvbnN0IGFwa1VybCA9IHVybEJ5TmFtZS5nZXQoYE9ic2lkaWFuLSR7dmVyc2lvbn0uYXBrYCk7XG4gIGlmIChhcGtVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgIGRvd25sb2Fkc1snYXBrJ10gPSBhcGtVcmw7XG4gIH1cblxuICBjb25zdCBhc2FyVXJsID0gdXJsQnlOYW1lLmdldChgJHtnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb24pfS5nemApO1xuICBpZiAoYXNhclVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZG93bmxvYWRzWydhc2FyJ10gPSBhc2FyVXJsO1xuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCBwbGF0Zm9ybV0gb2YgSU5TVEFMTEVSX0tFWVNfQllfUExBVEZPUk0pIHtcbiAgICBjb25zdCBhc3NldE5hbWUgPSBzZWxlY3RJbnN0YWxsZXJBc3NldE5hbWUoeyBhc3NldE5hbWVzLCBwbGF0Zm9ybSwgdmVyc2lvbiB9KTtcbiAgICBjb25zdCB1cmwgPSBhc3NldE5hbWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHVybEJ5TmFtZS5nZXQoYXNzZXROYW1lKTtcbiAgICBpZiAodXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRvd25sb2Fkc1trZXldID0gdXJsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBPYmplY3Qua2V5cyhkb3dubG9hZHMpLmxlbmd0aCA+IDAgPyBkb3dubG9hZHMgOiB1bmRlZmluZWQ7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMkJBLDZCQUF5QztBQUN6Qyw4QkFBdUM7QUFTaEMsTUFBTSxpQ0FBaUM7QUEwRDlDLE1BQU0sNkJBQTRHO0FBQUEsRUFDaEgsQ0FBQyxPQUFPLFFBQVE7QUFBQSxFQUNoQixDQUFDLE9BQU8sT0FBTztBQUFBLEVBQ2YsQ0FBQyxPQUFPLE9BQU87QUFDakI7QUFZTyxTQUFTLHFCQUFxQixTQUF5QjtBQUM1RCxTQUFPLEdBQUcsOEJBQThCLFFBQUksZ0RBQXVCLE9BQU8sQ0FBQztBQUM3RTtBQXNCTyxTQUFTLHNCQUFzQixRQUF5RDtBQUM3RixNQUFJLE9BQU8sa0JBQWtCO0FBQzNCLFdBQU8sT0FBTyxpQkFBaUIsT0FBTyxrQkFBa0Isb0JBQW9CO0FBQUEsRUFDOUU7QUFFQSxTQUFPLE9BQU8sa0JBQWtCLGFBQWE7QUFDL0M7QUFnQk8sU0FBUyx1QkFBdUIsUUFBNEU7QUFDakgsUUFBTSxFQUFFLFFBQVEsUUFBUSxJQUFJO0FBQzVCLFFBQU0sYUFBYSxPQUFPLElBQUksQ0FBQyxVQUFVLE1BQU0sSUFBSTtBQUNuRCxRQUFNLFlBQVksSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4RSxRQUFNLFlBQW9DLENBQUM7QUFFM0MsUUFBTSxTQUFTLFVBQVUsSUFBSSxZQUFZLE9BQU8sTUFBTTtBQUN0RCxNQUFJLFdBQVcsUUFBVztBQUN4QixjQUFVLEtBQUssSUFBSTtBQUFBLEVBQ3JCO0FBRUEsUUFBTSxVQUFVLFVBQVUsSUFBSSxPQUFHLGdEQUF1QixPQUFPLENBQUMsS0FBSztBQUNyRSxNQUFJLFlBQVksUUFBVztBQUN6QixjQUFVLE1BQU0sSUFBSTtBQUFBLEVBQ3RCO0FBRUEsYUFBVyxDQUFDLEtBQUssUUFBUSxLQUFLLDRCQUE0QjtBQUN4RCxVQUFNLGdCQUFZLGlEQUF5QixFQUFFLFlBQVksVUFBVSxRQUFRLENBQUM7QUFDNUUsVUFBTSxNQUFNLGNBQWMsU0FBWSxTQUFZLFVBQVUsSUFBSSxTQUFTO0FBQ3pFLFFBQUksUUFBUSxRQUFXO0FBQ3JCLGdCQUFVLEdBQUcsSUFBSTtBQUFBLElBQ25CO0FBQUEsRUFDRjtBQUVBLFNBQU8sT0FBTyxLQUFLLFNBQVMsRUFBRSxTQUFTLElBQUksWUFBWTtBQUN6RDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,125 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Pure helpers for building the repo-root `metadata.json` catalog from Obsidian's
5
+ * **own** publication endpoints, with no third-party catalog in the loop.
6
+ *
7
+ * `scripts/refresh-metadata.ts` drives the network side (the
8
+ * `obsidianmd/obsidian-releases` GitHub Releases API, `obsidian.md/changelog.xml`
9
+ * and `desktop-releases.json`); everything decidable without the network lives
10
+ * here so it stays unit-tested.
11
+ *
12
+ * Three decisions are encoded:
13
+ *
14
+ * - **Which release assets become `downloads` keys.** A release's real asset list
15
+ * is matched rather than templated, reusing {@link selectInstallerAssetName} for
16
+ * the desktop installers so the historical dot-vs-hyphen separator rename (and
17
+ * the `-universal` dmg infix) is handled in exactly one place. The 32-bit,
18
+ * arm64, AppImage, deb and snap siblings are deliberately not carried — this
19
+ * harness downloads only the x64 installer, the app asar and the Android apk.
20
+ * - **Which channel a version belongs to**, derived from which changelog pages
21
+ * the feed published for it (see {@link resolveReleaseChannel}).
22
+ * - **Where a catalyst asar lives** ({@link buildCatalystAsarUrl}) — the one asset
23
+ * with no listing API behind it, so its URL must be constructed and probed.
24
+ */
25
+ import type { ObsidianVersionDownloads } from './obsidian-metadata.cjs';
26
+ /**
27
+ * Base URL for **catalyst** (early access / insider) release asars, served from
28
+ * the Obsidian CDN as `.../release/obsidian-<version>.asar.gz`. Public versions
29
+ * are NOT hosted here (the CDN returns an empty body for them), and the endpoint
30
+ * is Cloudflare-gated against non-browser clients, so a probe needs a browser
31
+ * `User-Agent`.
32
+ */
33
+ export declare const CATALYST_ASAR_RELEASE_BASE_URL = "https://releases.obsidian.md/release";
34
+ /**
35
+ * One asset of a GitHub release, reduced to what the catalog needs.
36
+ */
37
+ export interface ReleaseAsset {
38
+ /**
39
+ The published asset file name, e.g. `Obsidian-1.13.7.exe`.
40
+ */
41
+ readonly name: string;
42
+ /**
43
+ The asset's direct download URL (`browser_download_url`).
44
+ */
45
+ readonly url: string;
46
+ }
47
+ /**
48
+ * Parameters for {@link resolveReleaseChannel}.
49
+ */
50
+ export interface ResolveReleaseChannelParams {
51
+ /**
52
+ Whether the changelog feed published a catalyst ("Early access") desktop page.
53
+ */
54
+ readonly hasCatalystPage: boolean;
55
+ /**
56
+ Whether the changelog feed published a public desktop page.
57
+ */
58
+ readonly hasPublicPage: boolean;
59
+ /**
60
+ * Whether the version was published as a GitHub release — the evidence that it
61
+ * shipped on the public channel, since catalyst builds are served only from
62
+ * the `releases.obsidian.md` CDN.
63
+ */
64
+ readonly hasPublicRelease: boolean;
65
+ }
66
+ /**
67
+ * Parameters for {@link selectReleaseDownloads}.
68
+ */
69
+ export interface SelectReleaseDownloadsParams {
70
+ /**
71
+ The release's published assets.
72
+ */
73
+ readonly assets: readonly ReleaseAsset[];
74
+ /**
75
+ The concrete `x.y.z` version the release publishes.
76
+ */
77
+ readonly version: string;
78
+ }
79
+ /**
80
+ * Builds the catalyst asar URL for a version.
81
+ *
82
+ * Catalyst builds are not published as GitHub release assets, and the CDN that
83
+ * serves them has no listing API, so this URL is constructed rather than
84
+ * discovered — the caller probes it before recording it.
85
+ *
86
+ * @param version - The concrete `x.y.z` version.
87
+ * @returns The `releases.obsidian.md` asar URL for the version.
88
+ */
89
+ export declare function buildCatalystAsarUrl(version: string): string;
90
+ /**
91
+ * Derives a version's release channel from where it was published and which
92
+ * changelog pages the feed carries for it.
93
+ *
94
+ * **Publication is the primary evidence, not the feed's title marker.** The feed
95
+ * tags each entry `(Public)` or `(Early access)`, but through the pre-1.0 era it
96
+ * tagged *everything* early-access — the whole app was — so 61 versions that
97
+ * shipped as ordinary GitHub releases carry only a catalyst page. Trusting the
98
+ * marker alone therefore relabels a large slice of public history as catalyst.
99
+ * A GitHub release is unambiguous the other way round: catalyst builds are
100
+ * served only from the `releases.obsidian.md` CDN, never as release assets.
101
+ *
102
+ * So a version that was published on GitHub is public, and it is recorded as the
103
+ * combined `'public+catalyst'` only when the feed carries *both* desktop pages —
104
+ * the shape every version already labelled `'public+catalyst'` has.
105
+ *
106
+ * @param params - The publication evidence and the desktop pages the feed published.
107
+ * @returns The channel, or `undefined` when there is no evidence either way (the
108
+ * caller then keeps whatever the version already carries).
109
+ */
110
+ export declare function resolveReleaseChannel(params: ResolveReleaseChannelParams): string | undefined;
111
+ /**
112
+ * Picks the assets this harness downloads out of a GitHub release's real asset
113
+ * list: the x64 desktop installers, the app asar and the Android apk.
114
+ *
115
+ * Assets are matched against the **release's own version**, so an early-access
116
+ * tag whose assets carry the base version instead (`v1.1.8-E21` publishing
117
+ * `Obsidian.1.1.8.exe`, `v1.6.3-e30` publishing `Obsidian.1.6.3.exe`) matches
118
+ * nothing and is skipped — deliberately, since those assets are the base
119
+ * version's, not the tag's.
120
+ *
121
+ * @param params - The release's assets and its version.
122
+ * @returns The distilled download URLs, or `undefined` when the release
123
+ * publishes none of them.
124
+ */
125
+ export declare function selectReleaseDownloads(params: SelectReleaseDownloadsParams): ObsidianVersionDownloads | undefined;
@@ -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;