obsidian-integration-testing 9.2.2 → 10.0.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 (253) hide show
  1. package/README.md +45 -45
  2. package/dist/lib/cjs/appium-dependencies.cjs +5 -5
  3. package/dist/lib/cjs/appium-dependencies.d.cts +4 -2
  4. package/dist/lib/cjs/appium-session-config.cjs +1 -1
  5. package/dist/lib/cjs/asar-fallback-detection.cjs +4 -4
  6. package/dist/lib/cjs/asar-fallback-detection.d.cts +15 -7
  7. package/dist/lib/cjs/avd-list.cjs +1 -1
  8. package/dist/lib/cjs/avd-list.d.cts +6 -2
  9. package/dist/lib/cjs/cli.cjs +4 -4
  10. package/dist/lib/cjs/compatibility-options.cjs +13 -13
  11. package/dist/lib/cjs/compatibility-options.d.cts +24 -12
  12. package/dist/lib/cjs/connect-to-cdp.cjs +4 -4
  13. package/dist/lib/cjs/connect-to-cdp.d.cts +6 -6
  14. package/dist/lib/cjs/context-id.cjs +5 -5
  15. package/dist/lib/cjs/context-id.d.cts +1 -1
  16. package/dist/lib/cjs/context-provider.cjs +5 -5
  17. package/dist/lib/cjs/context-provider.d.cts +4 -4
  18. package/dist/lib/cjs/demo-vault-populate.cjs +5 -5
  19. package/dist/lib/cjs/demo-vault-populate.d.cts +4 -4
  20. package/dist/lib/cjs/demo-vault-tree.cjs +4 -4
  21. package/dist/lib/cjs/demo-vault-tree.d.cts +3 -3
  22. package/dist/lib/cjs/device-readiness.cjs +3 -3
  23. package/dist/lib/cjs/device-readiness.d.cts +7 -3
  24. package/dist/lib/cjs/ecmascript-version.cjs +1 -1
  25. package/dist/lib/cjs/electron-compatibility.cjs +4 -4
  26. package/dist/lib/cjs/electron-compatibility.d.cts +33 -17
  27. package/dist/lib/cjs/emulator-arguments.cjs +36 -0
  28. package/dist/lib/{esm/emulator-args.d.mts → cjs/emulator-arguments.d.cts} +6 -4
  29. package/dist/lib/cjs/enable-plugin.cjs +29 -29
  30. package/dist/lib/cjs/enable-plugin.d.cts +6 -6
  31. package/dist/lib/cjs/eval-in-obsidian.cjs +9 -9
  32. package/dist/lib/cjs/eval-in-obsidian.d.cts +23 -23
  33. package/dist/lib/cjs/exec.cjs +49 -53
  34. package/dist/lib/cjs/exec.d.cts +9 -9
  35. package/dist/lib/cjs/function-expression.cjs +8 -8
  36. package/dist/lib/cjs/function-expression.d.cts +4 -4
  37. package/dist/lib/cjs/generate-function-call.cjs +6 -6
  38. package/dist/lib/cjs/generate-function-call.d.cts +15 -9
  39. package/dist/lib/cjs/global-setup-core.cjs +43 -43
  40. package/dist/lib/cjs/global-setup-core.d.cts +19 -9
  41. package/dist/lib/cjs/incompatible-installer-version-error.cjs +10 -4
  42. package/dist/lib/cjs/incompatible-installer-version-error.d.cts +18 -6
  43. package/dist/lib/cjs/index.cjs +10 -10
  44. package/dist/lib/cjs/index.d.cts +8 -8
  45. package/dist/lib/cjs/installer-asset.cjs +4 -4
  46. package/dist/lib/cjs/installer-asset.d.cts +21 -7
  47. package/dist/lib/cjs/installer-compatibility.cjs +4 -4
  48. package/dist/lib/cjs/installer-compatibility.d.cts +36 -18
  49. package/dist/lib/cjs/jest/global-setup-no-plugin.cjs +3 -3
  50. package/dist/lib/cjs/jest/global-setup-no-plugin.d.cts +1 -1
  51. package/dist/lib/cjs/jest/global-setup.cjs +11 -11
  52. package/dist/lib/cjs/jest/global-setup.d.cts +12 -8
  53. package/dist/lib/cjs/jest/global-teardown-no-plugin.cjs +2 -3
  54. package/dist/lib/cjs/jest/global-teardown-no-plugin.d.cts +1 -2
  55. package/dist/lib/cjs/jest/global-teardown.cjs +2 -3
  56. package/dist/lib/cjs/jest/global-teardown.d.cts +1 -2
  57. package/dist/lib/cjs/jest/setup.cjs +2 -2
  58. package/dist/lib/cjs/jest/setup.d.cts +1 -1
  59. package/dist/lib/cjs/json-with-functions.cjs +7 -7
  60. package/dist/lib/cjs/leftover-cleanup.cjs +14 -14
  61. package/dist/lib/cjs/leftover-cleanup.d.cts +42 -20
  62. package/dist/lib/cjs/library.cjs +2 -2
  63. package/dist/lib/cjs/namespace-bootstrap.cjs +46 -40
  64. package/dist/lib/cjs/native-dialog-monitor.cjs +15 -13
  65. package/dist/lib/cjs/normalize-optional-properties.cjs +3 -3
  66. package/dist/lib/cjs/normalize-optional-properties.d.cts +2 -2
  67. package/dist/lib/cjs/obsidian-config.cjs +30 -31
  68. package/dist/lib/cjs/obsidian-config.d.cts +8 -8
  69. package/dist/lib/cjs/obsidian-executable.cjs +2 -2
  70. package/dist/lib/cjs/obsidian-installer.cjs +37 -37
  71. package/dist/lib/cjs/obsidian-installer.d.cts +7 -3
  72. package/dist/lib/cjs/obsidian-instance.cjs +3 -3
  73. package/dist/lib/cjs/obsidian-instance.d.cts +18 -8
  74. package/dist/lib/cjs/obsidian-metadata.cjs +1 -1
  75. package/dist/lib/cjs/obsidian-metadata.d.cts +36 -12
  76. package/dist/lib/cjs/obsidian-namespace.cjs +1 -1
  77. package/dist/lib/cjs/obsidian-namespace.d.cts +25 -11
  78. package/dist/lib/cjs/obsidian-version-switch.cjs +9 -9
  79. package/dist/lib/cjs/obsidian-version-switch.d.cts +14 -10
  80. package/dist/lib/cjs/obsidian-version.cjs +3 -3
  81. package/dist/lib/cjs/obsidian-version.d.cts +15 -5
  82. package/dist/lib/cjs/owned-vault-seed.cjs +1 -1
  83. package/dist/lib/cjs/owned-vault-seed.d.cts +24 -8
  84. package/dist/lib/cjs/parent-liveness.cjs +4 -4
  85. package/dist/lib/cjs/parent-liveness.d.cts +7 -3
  86. package/dist/lib/cjs/poll-in-obsidian.cjs +5 -5
  87. package/dist/lib/cjs/poll-in-obsidian.d.cts +12 -12
  88. package/dist/lib/cjs/poll-until.cjs +1 -1
  89. package/dist/lib/cjs/poll-until.d.cts +21 -7
  90. package/dist/lib/cjs/process-exit-message.cjs +1 -1
  91. package/dist/lib/cjs/process-exit-message.d.cts +21 -7
  92. package/dist/lib/cjs/renderer-boot-detection.cjs +9 -9
  93. package/dist/lib/cjs/renderer-boot-detection.d.cts +31 -27
  94. package/dist/lib/cjs/renderer-failed-to-initialize-error.cjs +1 -1
  95. package/dist/lib/cjs/renderer-failed-to-initialize-error.d.cts +1 -1
  96. package/dist/lib/cjs/setup-lock.cjs +26 -26
  97. package/dist/lib/cjs/setup-lock.d.cts +6 -2
  98. package/dist/lib/cjs/silent-asar-fallback-error.cjs +7 -3
  99. package/dist/lib/cjs/silent-asar-fallback-error.d.cts +12 -4
  100. package/dist/lib/cjs/spawn-options.cjs +1 -1
  101. package/dist/lib/cjs/spawn-options.d.cts +3 -1
  102. package/dist/lib/cjs/strict-proxy.cjs +25 -25
  103. package/dist/lib/cjs/strict-proxy.d.cts +3 -3
  104. package/dist/lib/cjs/temporary-vault.cjs +166 -0
  105. package/dist/lib/cjs/{temp-vault.d.cts → temporary-vault.d.cts} +3 -3
  106. package/dist/lib/cjs/transport-appium.cjs +7 -7
  107. package/dist/lib/cjs/transport-appium.d.cts +7 -3
  108. package/dist/lib/cjs/transport-desktop-cdp.cjs +57 -57
  109. package/dist/lib/cjs/transport-desktop-cdp.d.cts +29 -17
  110. package/dist/lib/cjs/transport-factory.cjs +62 -63
  111. package/dist/lib/cjs/type-guards.cjs +3 -3
  112. package/dist/lib/cjs/type-guards.d.cts +2 -2
  113. package/dist/lib/cjs/vault-path-match.cjs +9 -9
  114. package/dist/lib/cjs/vault-path-match.d.cts +11 -11
  115. package/dist/lib/cjs/version-matrix.cjs +1 -1
  116. package/dist/lib/cjs/version-matrix.d.cts +51 -17
  117. package/dist/lib/cjs/visibility.cjs +7 -7
  118. package/dist/lib/cjs/visibility.d.cts +5 -5
  119. package/dist/lib/cjs/vitest/global-setup-no-plugin.cjs +3 -3
  120. package/dist/lib/cjs/vitest/global-setup-no-plugin.d.cts +2 -2
  121. package/dist/lib/cjs/vitest/global-setup.cjs +9 -9
  122. package/dist/lib/cjs/vitest/global-setup.d.cts +4 -4
  123. package/dist/lib/cjs/vitest/setup.cjs +2 -2
  124. package/dist/lib/cjs/vitest/typings.d.cts +2 -2
  125. package/dist/lib/esm/appium-dependencies.d.mts +4 -2
  126. package/dist/lib/esm/appium-dependencies.mjs +4 -4
  127. package/dist/lib/esm/appium-session-config.mjs +1 -1
  128. package/dist/lib/esm/asar-fallback-detection.d.mts +15 -7
  129. package/dist/lib/esm/asar-fallback-detection.mjs +3 -3
  130. package/dist/lib/esm/avd-list.d.mts +6 -2
  131. package/dist/lib/esm/avd-list.mjs +1 -1
  132. package/dist/lib/esm/cli.mjs +4 -4
  133. package/dist/lib/esm/compatibility-options.d.mts +24 -12
  134. package/dist/lib/esm/compatibility-options.mjs +10 -10
  135. package/dist/lib/esm/connect-to-cdp.d.mts +6 -6
  136. package/dist/lib/esm/connect-to-cdp.mjs +6 -6
  137. package/dist/lib/esm/context-id.d.mts +1 -1
  138. package/dist/lib/esm/context-id.mjs +5 -5
  139. package/dist/lib/esm/context-provider.d.mts +4 -4
  140. package/dist/lib/esm/context-provider.mjs +5 -5
  141. package/dist/lib/esm/demo-vault-populate.d.mts +4 -4
  142. package/dist/lib/esm/demo-vault-populate.mjs +5 -5
  143. package/dist/lib/esm/demo-vault-tree.d.mts +3 -3
  144. package/dist/lib/esm/demo-vault-tree.mjs +4 -4
  145. package/dist/lib/esm/device-readiness.d.mts +7 -3
  146. package/dist/lib/esm/device-readiness.mjs +3 -3
  147. package/dist/lib/esm/ecmascript-version.mjs +1 -1
  148. package/dist/lib/esm/electron-compatibility.d.mts +33 -17
  149. package/dist/lib/esm/electron-compatibility.mjs +3 -3
  150. package/dist/lib/{cjs/emulator-args.d.cts → esm/emulator-arguments.d.mts} +6 -4
  151. package/dist/lib/esm/emulator-arguments.mjs +12 -0
  152. package/dist/lib/esm/enable-plugin.d.mts +6 -6
  153. package/dist/lib/esm/enable-plugin.mjs +29 -29
  154. package/dist/lib/esm/eval-in-obsidian.d.mts +23 -23
  155. package/dist/lib/esm/eval-in-obsidian.mjs +9 -9
  156. package/dist/lib/esm/exec.d.mts +9 -9
  157. package/dist/lib/esm/exec.mjs +49 -53
  158. package/dist/lib/esm/function-expression.d.mts +4 -4
  159. package/dist/lib/esm/function-expression.mjs +8 -8
  160. package/dist/lib/esm/generate-function-call.d.mts +15 -9
  161. package/dist/lib/esm/generate-function-call.mjs +6 -6
  162. package/dist/lib/esm/global-setup-core.d.mts +19 -9
  163. package/dist/lib/esm/global-setup-core.mjs +45 -45
  164. package/dist/lib/esm/incompatible-installer-version-error.d.mts +18 -6
  165. package/dist/lib/esm/incompatible-installer-version-error.mjs +10 -4
  166. package/dist/lib/esm/index.d.mts +8 -8
  167. package/dist/lib/esm/index.mjs +9 -9
  168. package/dist/lib/esm/installer-asset.d.mts +21 -7
  169. package/dist/lib/esm/installer-asset.mjs +4 -4
  170. package/dist/lib/esm/installer-compatibility.d.mts +36 -18
  171. package/dist/lib/esm/installer-compatibility.mjs +3 -3
  172. package/dist/lib/esm/jest/global-setup-no-plugin.d.mts +1 -1
  173. package/dist/lib/esm/jest/global-setup-no-plugin.mjs +3 -3
  174. package/dist/lib/esm/jest/global-setup.d.mts +12 -8
  175. package/dist/lib/esm/jest/global-setup.mjs +10 -10
  176. package/dist/lib/esm/jest/global-teardown-no-plugin.d.mts +1 -2
  177. package/dist/lib/esm/jest/global-teardown-no-plugin.mjs +2 -3
  178. package/dist/lib/esm/jest/global-teardown.d.mts +1 -2
  179. package/dist/lib/esm/jest/global-teardown.mjs +2 -3
  180. package/dist/lib/esm/jest/setup.d.mts +1 -1
  181. package/dist/lib/esm/jest/setup.mjs +2 -2
  182. package/dist/lib/esm/json-with-functions.mjs +7 -7
  183. package/dist/lib/esm/leftover-cleanup.d.mts +42 -20
  184. package/dist/lib/esm/leftover-cleanup.mjs +12 -12
  185. package/dist/lib/esm/library.mjs +2 -2
  186. package/dist/lib/esm/namespace-bootstrap.mjs +46 -40
  187. package/dist/lib/esm/native-dialog-monitor.mjs +15 -13
  188. package/dist/lib/esm/normalize-optional-properties.d.mts +2 -2
  189. package/dist/lib/esm/normalize-optional-properties.mjs +3 -3
  190. package/dist/lib/esm/obsidian-config.d.mts +8 -8
  191. package/dist/lib/esm/obsidian-config.mjs +27 -28
  192. package/dist/lib/esm/obsidian-executable.mjs +2 -2
  193. package/dist/lib/esm/obsidian-installer.d.mts +7 -3
  194. package/dist/lib/esm/obsidian-installer.mjs +36 -36
  195. package/dist/lib/esm/obsidian-instance.d.mts +18 -8
  196. package/dist/lib/esm/obsidian-instance.mjs +3 -3
  197. package/dist/lib/esm/obsidian-metadata.d.mts +36 -12
  198. package/dist/lib/esm/obsidian-metadata.mjs +1 -1
  199. package/dist/lib/esm/obsidian-namespace.d.mts +25 -11
  200. package/dist/lib/esm/obsidian-version-switch.d.mts +14 -10
  201. package/dist/lib/esm/obsidian-version-switch.mjs +9 -9
  202. package/dist/lib/esm/obsidian-version.d.mts +15 -5
  203. package/dist/lib/esm/obsidian-version.mjs +3 -3
  204. package/dist/lib/esm/owned-vault-seed.d.mts +24 -8
  205. package/dist/lib/esm/owned-vault-seed.mjs +1 -1
  206. package/dist/lib/esm/parent-liveness.d.mts +7 -3
  207. package/dist/lib/esm/parent-liveness.mjs +3 -3
  208. package/dist/lib/esm/poll-in-obsidian.d.mts +12 -12
  209. package/dist/lib/esm/poll-in-obsidian.mjs +5 -5
  210. package/dist/lib/esm/poll-until.d.mts +21 -7
  211. package/dist/lib/esm/poll-until.mjs +1 -1
  212. package/dist/lib/esm/process-exit-message.d.mts +21 -7
  213. package/dist/lib/esm/process-exit-message.mjs +1 -1
  214. package/dist/lib/esm/renderer-boot-detection.d.mts +31 -27
  215. package/dist/lib/esm/renderer-boot-detection.mjs +7 -7
  216. package/dist/lib/esm/renderer-failed-to-initialize-error.d.mts +1 -1
  217. package/dist/lib/esm/renderer-failed-to-initialize-error.mjs +1 -1
  218. package/dist/lib/esm/setup-lock.d.mts +6 -2
  219. package/dist/lib/esm/setup-lock.mjs +26 -26
  220. package/dist/lib/esm/silent-asar-fallback-error.d.mts +12 -4
  221. package/dist/lib/esm/silent-asar-fallback-error.mjs +7 -3
  222. package/dist/lib/esm/spawn-options.d.mts +3 -1
  223. package/dist/lib/esm/spawn-options.mjs +1 -1
  224. package/dist/lib/esm/strict-proxy.d.mts +3 -3
  225. package/dist/lib/esm/strict-proxy.mjs +25 -25
  226. package/dist/lib/esm/{temp-vault.d.mts → temporary-vault.d.mts} +3 -3
  227. package/dist/lib/esm/temporary-vault.mjs +157 -0
  228. package/dist/lib/esm/transport-appium.d.mts +7 -3
  229. package/dist/lib/esm/transport-appium.mjs +7 -7
  230. package/dist/lib/esm/transport-desktop-cdp.d.mts +29 -17
  231. package/dist/lib/esm/transport-desktop-cdp.mjs +67 -67
  232. package/dist/lib/esm/transport-factory.mjs +71 -72
  233. package/dist/lib/esm/type-guards.d.mts +2 -2
  234. package/dist/lib/esm/type-guards.mjs +3 -3
  235. package/dist/lib/esm/vault-path-match.d.mts +11 -11
  236. package/dist/lib/esm/vault-path-match.mjs +7 -7
  237. package/dist/lib/esm/version-matrix.d.mts +51 -17
  238. package/dist/lib/esm/version-matrix.mjs +1 -1
  239. package/dist/lib/esm/visibility.d.mts +5 -5
  240. package/dist/lib/esm/visibility.mjs +5 -5
  241. package/dist/lib/esm/vitest/global-setup-no-plugin.d.mts +2 -2
  242. package/dist/lib/esm/vitest/global-setup-no-plugin.mjs +3 -3
  243. package/dist/lib/esm/vitest/global-setup.d.mts +4 -4
  244. package/dist/lib/esm/vitest/global-setup.mjs +8 -8
  245. package/dist/lib/esm/vitest/setup.mjs +2 -2
  246. package/dist/lib/esm/vitest/typings.d.mts +2 -2
  247. package/dist/obsidian-integration-testing-10.0.0.tgz +0 -0
  248. package/package.json +15 -13
  249. package/dist/lib/cjs/emulator-args.cjs +0 -36
  250. package/dist/lib/cjs/temp-vault.cjs +0 -166
  251. package/dist/lib/esm/emulator-args.mjs +0 -12
  252. package/dist/lib/esm/temp-vault.mjs +0 -157
  253. package/dist/obsidian-integration-testing-9.2.2.tgz +0 -0
@@ -23,31 +23,30 @@
23
23
  * is warned.
24
24
  */
25
25
  import type { ObsidianVersionMetadata } from './obsidian-metadata.mjs';
26
- /**
27
- * Parameters for {@link checkElectronCompatibility}.
28
- */
29
- export interface CheckElectronCompatibilityParams {
30
- /** The Electron version the instance is actually running, or `undefined` when unreadable. */
31
- readonly actualElectronVersion: string | undefined;
32
- /** The resolved Obsidian app (asar) version that is running. */
33
- readonly appVersion: string;
34
- /** The `metadata.json` entry for {@link appVersion}, or `undefined` when absent. */
35
- readonly metadata: ObsidianVersionMetadata | undefined;
36
- }
37
26
  /**
38
27
  * The runtime Electron compatibility verdict for a booted owned instance, carried
39
28
  * as data on the transport / connection result so consumers can assert on it.
40
29
  */
41
30
  export interface ElectronCompatibility {
42
- /** The Electron version the instance is actually running, or `null` when unreadable. */
31
+ /**
32
+ The Electron version the instance is actually running, or `null` when unreadable.
33
+ */
43
34
  readonly actualElectronVersion: null | string;
44
- /** The resolved Obsidian app (asar) version that is running. */
35
+ /**
36
+ The resolved Obsidian app (asar) version that is running.
37
+ */
45
38
  readonly appVersion: string;
46
- /** A human-readable explanation, present for the `'nagged'` tier. */
39
+ /**
40
+ A human-readable explanation, present for the `'nagged'` tier.
41
+ */
47
42
  readonly message?: string;
48
- /** The app's recommended-minimum Electron version, when the table carries one. */
43
+ /**
44
+ The app's recommended-minimum Electron version, when the table carries one.
45
+ */
49
46
  readonly minRecommendedElectronVersion?: string;
50
- /** The resolved compatibility tier. */
47
+ /**
48
+ The resolved compatibility tier.
49
+ */
51
50
  readonly tier: ElectronCompatibilityTier;
52
51
  }
53
52
  /**
@@ -60,6 +59,23 @@ export interface ElectronCompatibility {
60
59
  * app version carries no recommended Electron version in the table).
61
60
  */
62
61
  export type ElectronCompatibilityTier = 'nagged' | 'ok' | 'unknown';
62
+ /**
63
+ * Parameters for {@link resolveElectronCompatibility}.
64
+ */
65
+ export interface ResolveElectronCompatibilityParams {
66
+ /**
67
+ The Electron version the instance is actually running, or `undefined` when unreadable.
68
+ */
69
+ readonly actualElectronVersion: string | undefined;
70
+ /**
71
+ The resolved Obsidian app (asar) version that is running.
72
+ */
73
+ readonly appVersion: string;
74
+ /**
75
+ The `metadata.json` entry for {@link appVersion}, or `undefined` when absent.
76
+ */
77
+ readonly metadata: ObsidianVersionMetadata | undefined;
78
+ }
63
79
  /**
64
80
  * Computes the runtime Electron compatibility verdict for a booted owned instance.
65
81
  *
@@ -71,4 +87,4 @@ export type ElectronCompatibilityTier = 'nagged' | 'ok' | 'unknown';
71
87
  * version's metadata entry.
72
88
  * @returns The compatibility verdict.
73
89
  */
74
- export declare function checkElectronCompatibility(params: CheckElectronCompatibilityParams): ElectronCompatibility;
90
+ export declare function resolveElectronCompatibility(params: ResolveElectronCompatibilityParams): ElectronCompatibility;
@@ -1,5 +1,5 @@
1
1
  import { compareVersions } from "./obsidian-version.mjs";
2
- function checkElectronCompatibility(params) {
2
+ function resolveElectronCompatibility(params) {
3
3
  const { actualElectronVersion, appVersion, metadata } = params;
4
4
  const minRecommendedElectronVersion = metadata?.minRecommendedElectronVersion;
5
5
  if (actualElectronVersion === void 0 || minRecommendedElectronVersion === void 0) {
@@ -17,6 +17,6 @@ function checkElectronCompatibility(params) {
17
17
  return { actualElectronVersion, appVersion, minRecommendedElectronVersion, tier: "ok" };
18
18
  }
19
19
  export {
20
- checkElectronCompatibility
20
+ resolveElectronCompatibility
21
21
  };
22
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VsZWN0cm9uLWNvbXBhdGliaWxpdHkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIHZlcmRpY3Qgb24gd2hldGhlciB0aGUgRWxlY3Ryb24gdmVyc2lvbiBhbiBvd25lZCBPYnNpZGlhbiBpbnN0YW5jZSBpc1xuICogYWN0dWFsbHkgcnVubmluZyBpcyBuZXcgZW5vdWdoIGZvciB0aGUgcmVzb2x2ZWQgYXBwIHZlcnNpb24uIEtlcHQgc2VwYXJhdGUgZnJvbVxuICogdGhlIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1kZXNrdG9wLWNkcGAgKHdoaWNoIHJlYWRzIHRoZSBsaXZlIHZlcnNpb24gb3ZlclxuICogQ0RQIGFuZCBpcyBleGNsdWRlZCBmcm9tIHVuaXQgdGVzdHMpIHNvIHRoZSB0aWVyIGxvZ2ljIHN0YXlzIHVuaXQtdGVzdGFibGUgXHUyMDE0XG4gKiBtaXJyb3JpbmcgdGhlIGBpbnN0YWxsZXItY29tcGF0aWJpbGl0eWAgLyBgcmVuZGVyZXItYm9vdC1kZXRlY3Rpb25gIHNwbGl0LlxuICpcbiAqIFRoaXMgaXMgdGhlIHRpZXItMiBjb21wYW5pb24gdG8gYGluc3RhbGxlci1jb21wYXRpYmlsaXR5YC4gVGhhdCBvbmUgaXMgZnVsbHlcbiAqIG9mZmxpbmUgXHUyMDE0IGl0IGNvbXBhcmVzIHRoZSByZXNvbHZlZCBpbnN0YWxsZXIgdmVyc2lvbiBhZ2FpbnN0IGluc3RhbGxlci12ZXJzaW9uXG4gKiB0aHJlc2hvbGRzLiBCdXQgdGhlIGFwcCdzIHJlYWwgcmVxdWlyZW1lbnQgaXMgYSAqKm1pbmltdW0gRWxlY3Ryb24gdmVyc2lvbioqXG4gKiBoYXJkY29kZWQgaW5zaWRlIGBhcHAuanNgIChlLmcuIGAxLjEzLjFgIG5lZWRzIEVsZWN0cm9uIGAyOC4yLjNgKSwgYW5kIHRoZVxuICogaW5zdGFsbGVyJ3MgYnVuZGxlZCBFbGVjdHJvbiBpcyBub3QgZGVyaXZhYmxlIG9mZmxpbmUgKHNlZVxuICoge0BsaW5rIE9ic2lkaWFuVmVyc2lvbk1ldGFkYXRhLm1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9ufSkuIFNvIHRoaXMgdmVyZGljdFxuICogdGFrZXMgdGhlICoqbGl2ZSoqIGBwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uYCByZWFkIGZyb20gdGhlIGJvb3RlZCByZW5kZXJlciBhbmRcbiAqIGNvbXBhcmVzIGl0IHRvIGBtaW5SZWNvbW1lbmRlZEVsZWN0cm9uVmVyc2lvbmAgZnJvbSBgbWV0YWRhdGEuanNvbmAuXG4gKlxuICogQW4gRWxlY3Ryb24gYmVsb3cgdGhlIHJlY29tbWVuZGF0aW9uIHJ1bnMgYnV0IGlzIG5hZ2dlZCAoYCduYWdnZWQnYCkgXHUyMDE0IE9ic2lkaWFuXG4gKiB3b3VsZCBzaG93IGl0cyBcImluc3RhbGxlciB0b28gb2xkXCIgcmVjb21tZW5kYXRpb247IGl0IG5ldmVyIGJsb2Nrcywgc28gdGhlcmUgaXNcbiAqIG5vIGAndW5ydW5uYWJsZSdgIHRpZXIgaGVyZS4gV2hlbiB0aGUgbGl2ZSB2ZXJzaW9uIGlzIHVucmVhZGFibGUgb3IgdGhlIGFwcFxuICogdmVyc2lvbiBjYXJyaWVzIG5vIHJlY29tbWVuZGVkIEVsZWN0cm9uLCB0aGUgdmVyZGljdCBpcyBgJ3Vua25vd24nYCBhbmQgbm90aGluZ1xuICogaXMgd2FybmVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uTWV0YWRhdGEgfSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLm1qcyc7XG5cbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5tanMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjaGVja0VsZWN0cm9uQ29tcGF0aWJpbGl0eX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tFbGVjdHJvbkNvbXBhdGliaWxpdHlQYXJhbXMge1xuICAvKiogVGhlIEVsZWN0cm9uIHZlcnNpb24gdGhlIGluc3RhbmNlIGlzIGFjdHVhbGx5IHJ1bm5pbmcsIG9yIGB1bmRlZmluZWRgIHdoZW4gdW5yZWFkYWJsZS4gKi9cbiAgcmVhZG9ubHkgYWN0dWFsRWxlY3Ryb25WZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFRoZSByZXNvbHZlZCBPYnNpZGlhbiBhcHAgKGFzYXIpIHZlcnNpb24gdGhhdCBpcyBydW5uaW5nLiAqL1xuICByZWFkb25seSBhcHBWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBgbWV0YWRhdGEuanNvbmAgZW50cnkgZm9yIHtAbGluayBhcHBWZXJzaW9ufSwgb3IgYHVuZGVmaW5lZGAgd2hlbiBhYnNlbnQuICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhOiBPYnNpZGlhblZlcnNpb25NZXRhZGF0YSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGUgcnVudGltZSBFbGVjdHJvbiBjb21wYXRpYmlsaXR5IHZlcmRpY3QgZm9yIGEgYm9vdGVkIG93bmVkIGluc3RhbmNlLCBjYXJyaWVkXG4gKiBhcyBkYXRhIG9uIHRoZSB0cmFuc3BvcnQgLyBjb25uZWN0aW9uIHJlc3VsdCBzbyBjb25zdW1lcnMgY2FuIGFzc2VydCBvbiBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbGVjdHJvbkNvbXBhdGliaWxpdHkge1xuICAvKiogVGhlIEVsZWN0cm9uIHZlcnNpb24gdGhlIGluc3RhbmNlIGlzIGFjdHVhbGx5IHJ1bm5pbmcsIG9yIGBudWxsYCB3aGVuIHVucmVhZGFibGUuICovXG4gIHJlYWRvbmx5IGFjdHVhbEVsZWN0cm9uVmVyc2lvbjogbnVsbCB8IHN0cmluZztcblxuICAvKiogVGhlIHJlc29sdmVkIE9ic2lkaWFuIGFwcCAoYXNhcikgdmVyc2lvbiB0aGF0IGlzIHJ1bm5pbmcuICovXG4gIHJlYWRvbmx5IGFwcFZlcnNpb246IHN0cmluZztcblxuICAvKiogQSBodW1hbi1yZWFkYWJsZSBleHBsYW5hdGlvbiwgcHJlc2VudCBmb3IgdGhlIGAnbmFnZ2VkJ2AgdGllci4gKi9cbiAgcmVhZG9ubHkgbWVzc2FnZT86IHN0cmluZztcblxuICAvKiogVGhlIGFwcCdzIHJlY29tbWVuZGVkLW1pbmltdW0gRWxlY3Ryb24gdmVyc2lvbiwgd2hlbiB0aGUgdGFibGUgY2FycmllcyBvbmUuICovXG4gIHJlYWRvbmx5IG1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKiBUaGUgcmVzb2x2ZWQgY29tcGF0aWJpbGl0eSB0aWVyLiAqL1xuICByZWFkb25seSB0aWVyOiBFbGVjdHJvbkNvbXBhdGliaWxpdHlUaWVyO1xufVxuXG4vKipcbiAqIFRoZSBydW50aW1lIEVsZWN0cm9uIGNvbXBhdGliaWxpdHkgdGllciBmb3IgYSBib290ZWQgb3duZWQgaW5zdGFuY2UuXG4gKlxuICogLSBgJ29rJ2AgXHUyMDE0IHRoZSBydW5uaW5nIEVsZWN0cm9uIGlzIGF0IG9yIGFib3ZlIHRoZSBhcHAncyByZWNvbW1lbmRlZCBtaW5pbXVtLlxuICogLSBgJ25hZ2dlZCdgIFx1MjAxNCB0aGUgcnVubmluZyBFbGVjdHJvbiBpcyBiZWxvdyB0aGUgcmVjb21tZW5kZWQgbWluaW11bTsgT2JzaWRpYW5cbiAqICAgcnVucyBidXQgd291bGQgc2hvdyBpdHMgXCJpbnN0YWxsZXIgdG9vIG9sZFwiIHJlY29tbWVuZGF0aW9uLlxuICogLSBgJ3Vua25vd24nYCBcdTIwMTQgY2Fubm90IGJlIGRldGVybWluZWQgKHRoZSBsaXZlIHZlcnNpb24gd2FzIHVucmVhZGFibGUsIG9yIHRoZVxuICogICBhcHAgdmVyc2lvbiBjYXJyaWVzIG5vIHJlY29tbWVuZGVkIEVsZWN0cm9uIHZlcnNpb24gaW4gdGhlIHRhYmxlKS5cbiAqL1xuZXhwb3J0IHR5cGUgRWxlY3Ryb25Db21wYXRpYmlsaXR5VGllciA9ICduYWdnZWQnIHwgJ29rJyB8ICd1bmtub3duJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgcnVudGltZSBFbGVjdHJvbiBjb21wYXRpYmlsaXR5IHZlcmRpY3QgZm9yIGEgYm9vdGVkIG93bmVkIGluc3RhbmNlLlxuICpcbiAqIE9ubHkgYCduYWdnZWQnYCB3YXJyYW50cyBhIHdhcm5pbmc7IGAnb2snYCBhbmQgYCd1bmtub3duJ2AgYXJlIHNpbGVudC4gQW5cbiAqIEVsZWN0cm9uIG1pc21hdGNoIG5ldmVyIGJsb2Nrcywgc28gdGhlcmUgaXMgbm8gZXJyb3IgdGllci4gQ29tcGFyaXNvbnMgYXJlIHB1cmVcbiAqIGB4LnkuemAgdmVyc2lvbiBjb21wYXJlcyBcdTIwMTQgbm8gSS9PLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcnVubmluZyBhcHAgdmVyc2lvbiwgdGhlIGxpdmUgRWxlY3Ryb24gdmVyc2lvbiwgYW5kIHRoZSBhcHBcbiAqICAgdmVyc2lvbidzIG1ldGFkYXRhIGVudHJ5LlxuICogQHJldHVybnMgVGhlIGNvbXBhdGliaWxpdHkgdmVyZGljdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrRWxlY3Ryb25Db21wYXRpYmlsaXR5KHBhcmFtczogQ2hlY2tFbGVjdHJvbkNvbXBhdGliaWxpdHlQYXJhbXMpOiBFbGVjdHJvbkNvbXBhdGliaWxpdHkge1xuICBjb25zdCB7IGFjdHVhbEVsZWN0cm9uVmVyc2lvbiwgYXBwVmVyc2lvbiwgbWV0YWRhdGEgfSA9IHBhcmFtcztcbiAgY29uc3QgbWluUmVjb21tZW5kZWRFbGVjdHJvblZlcnNpb24gPSBtZXRhZGF0YT8ubWluUmVjb21tZW5kZWRFbGVjdHJvblZlcnNpb247XG5cbiAgaWYgKGFjdHVhbEVsZWN0cm9uVmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IG1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4geyBhY3R1YWxFbGVjdHJvblZlcnNpb246IGFjdHVhbEVsZWN0cm9uVmVyc2lvbiA/PyBudWxsLCBhcHBWZXJzaW9uLCB0aWVyOiAndW5rbm93bicgfTtcbiAgfVxuXG4gIGlmIChjb21wYXJlVmVyc2lvbnMoYWN0dWFsRWxlY3Ryb25WZXJzaW9uLCBtaW5SZWNvbW1lbmRlZEVsZWN0cm9uVmVyc2lvbikgPCAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdHVhbEVsZWN0cm9uVmVyc2lvbixcbiAgICAgIGFwcFZlcnNpb24sXG4gICAgICBtZXNzYWdlOiBgT2JzaWRpYW4gJHthcHBWZXJzaW9ufSBydW5zIG9uIEVsZWN0cm9uICR7YWN0dWFsRWxlY3Ryb25WZXJzaW9ufSBidXQgcmVjb21tZW5kcyBFbGVjdHJvbiBgXG4gICAgICAgICsgYCR7bWluUmVjb21tZW5kZWRFbGVjdHJvblZlcnNpb259IG9yIG5ld2VyOyBwaW4gYSBuZXdlciBvYnNpZGlhbkluc3RhbGxlclZlcnNpb24gZm9yIGZ1bGwgY29tcGF0aWJpbGl0eS5gLFxuICAgICAgbWluUmVjb21tZW5kZWRFbGVjdHJvblZlcnNpb24sXG4gICAgICB0aWVyOiAnbmFnZ2VkJ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4geyBhY3R1YWxFbGVjdHJvblZlcnNpb24sIGFwcFZlcnNpb24sIG1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uLCB0aWVyOiAnb2snIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUEyQkEsU0FBUyx1QkFBdUI7QUEyRHpCLFNBQVMsMkJBQTJCLFFBQWlFO0FBQzFHLFFBQU0sRUFBRSx1QkFBdUIsWUFBWSxTQUFTLElBQUk7QUFDeEQsUUFBTSxnQ0FBZ0MsVUFBVTtBQUVoRCxNQUFJLDBCQUEwQixVQUFhLGtDQUFrQyxRQUFXO0FBQ3RGLFdBQU8sRUFBRSx1QkFBdUIseUJBQXlCLE1BQU0sWUFBWSxNQUFNLFVBQVU7QUFBQSxFQUM3RjtBQUVBLE1BQUksZ0JBQWdCLHVCQUF1Qiw2QkFBNkIsSUFBSSxHQUFHO0FBQzdFLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0EsU0FBUyxZQUFZLFVBQVUscUJBQXFCLHFCQUFxQiw0QkFDbEUsNkJBQTZCO0FBQUEsTUFDcEM7QUFBQSxNQUNBLE1BQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUVBLFNBQU8sRUFBRSx1QkFBdUIsWUFBWSwrQkFBK0IsTUFBTSxLQUFLO0FBQ3hGOyIsCiAgIm5hbWVzIjogW10KfQo=
22
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VsZWN0cm9uLWNvbXBhdGliaWxpdHkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIHZlcmRpY3Qgb24gd2hldGhlciB0aGUgRWxlY3Ryb24gdmVyc2lvbiBhbiBvd25lZCBPYnNpZGlhbiBpbnN0YW5jZSBpc1xuICogYWN0dWFsbHkgcnVubmluZyBpcyBuZXcgZW5vdWdoIGZvciB0aGUgcmVzb2x2ZWQgYXBwIHZlcnNpb24uIEtlcHQgc2VwYXJhdGUgZnJvbVxuICogdGhlIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1kZXNrdG9wLWNkcGAgKHdoaWNoIHJlYWRzIHRoZSBsaXZlIHZlcnNpb24gb3ZlclxuICogQ0RQIGFuZCBpcyBleGNsdWRlZCBmcm9tIHVuaXQgdGVzdHMpIHNvIHRoZSB0aWVyIGxvZ2ljIHN0YXlzIHVuaXQtdGVzdGFibGUgXHUyMDE0XG4gKiBtaXJyb3JpbmcgdGhlIGBpbnN0YWxsZXItY29tcGF0aWJpbGl0eWAgLyBgcmVuZGVyZXItYm9vdC1kZXRlY3Rpb25gIHNwbGl0LlxuICpcbiAqIFRoaXMgaXMgdGhlIHRpZXItMiBjb21wYW5pb24gdG8gYGluc3RhbGxlci1jb21wYXRpYmlsaXR5YC4gVGhhdCBvbmUgaXMgZnVsbHlcbiAqIG9mZmxpbmUgXHUyMDE0IGl0IGNvbXBhcmVzIHRoZSByZXNvbHZlZCBpbnN0YWxsZXIgdmVyc2lvbiBhZ2FpbnN0IGluc3RhbGxlci12ZXJzaW9uXG4gKiB0aHJlc2hvbGRzLiBCdXQgdGhlIGFwcCdzIHJlYWwgcmVxdWlyZW1lbnQgaXMgYSAqKm1pbmltdW0gRWxlY3Ryb24gdmVyc2lvbioqXG4gKiBoYXJkY29kZWQgaW5zaWRlIGBhcHAuanNgIChlLmcuIGAxLjEzLjFgIG5lZWRzIEVsZWN0cm9uIGAyOC4yLjNgKSwgYW5kIHRoZVxuICogaW5zdGFsbGVyJ3MgYnVuZGxlZCBFbGVjdHJvbiBpcyBub3QgZGVyaXZhYmxlIG9mZmxpbmUgKHNlZVxuICoge0BsaW5rIE9ic2lkaWFuVmVyc2lvbk1ldGFkYXRhLm1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9ufSkuIFNvIHRoaXMgdmVyZGljdFxuICogdGFrZXMgdGhlICoqbGl2ZSoqIGBwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uYCByZWFkIGZyb20gdGhlIGJvb3RlZCByZW5kZXJlciBhbmRcbiAqIGNvbXBhcmVzIGl0IHRvIGBtaW5SZWNvbW1lbmRlZEVsZWN0cm9uVmVyc2lvbmAgZnJvbSBgbWV0YWRhdGEuanNvbmAuXG4gKlxuICogQW4gRWxlY3Ryb24gYmVsb3cgdGhlIHJlY29tbWVuZGF0aW9uIHJ1bnMgYnV0IGlzIG5hZ2dlZCAoYCduYWdnZWQnYCkgXHUyMDE0IE9ic2lkaWFuXG4gKiB3b3VsZCBzaG93IGl0cyBcImluc3RhbGxlciB0b28gb2xkXCIgcmVjb21tZW5kYXRpb247IGl0IG5ldmVyIGJsb2Nrcywgc28gdGhlcmUgaXNcbiAqIG5vIGAndW5ydW5uYWJsZSdgIHRpZXIgaGVyZS4gV2hlbiB0aGUgbGl2ZSB2ZXJzaW9uIGlzIHVucmVhZGFibGUgb3IgdGhlIGFwcFxuICogdmVyc2lvbiBjYXJyaWVzIG5vIHJlY29tbWVuZGVkIEVsZWN0cm9uLCB0aGUgdmVyZGljdCBpcyBgJ3Vua25vd24nYCBhbmQgbm90aGluZ1xuICogaXMgd2FybmVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uTWV0YWRhdGEgfSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLm1qcyc7XG5cbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5tanMnO1xuXG4vKipcbiAqIFRoZSBydW50aW1lIEVsZWN0cm9uIGNvbXBhdGliaWxpdHkgdmVyZGljdCBmb3IgYSBib290ZWQgb3duZWQgaW5zdGFuY2UsIGNhcnJpZWRcbiAqIGFzIGRhdGEgb24gdGhlIHRyYW5zcG9ydCAvIGNvbm5lY3Rpb24gcmVzdWx0IHNvIGNvbnN1bWVycyBjYW4gYXNzZXJ0IG9uIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZWN0cm9uQ29tcGF0aWJpbGl0eSB7XG4gIC8qKlxuICBUaGUgRWxlY3Ryb24gdmVyc2lvbiB0aGUgaW5zdGFuY2UgaXMgYWN0dWFsbHkgcnVubmluZywgb3IgYG51bGxgIHdoZW4gdW5yZWFkYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFjdHVhbEVsZWN0cm9uVmVyc2lvbjogbnVsbCB8IHN0cmluZztcblxuICAvKipcbiAgVGhlIHJlc29sdmVkIE9ic2lkaWFuIGFwcCAoYXNhcikgdmVyc2lvbiB0aGF0IGlzIHJ1bm5pbmcuXG4gICAqL1xuICByZWFkb25seSBhcHBWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gIEEgaHVtYW4tcmVhZGFibGUgZXhwbGFuYXRpb24sIHByZXNlbnQgZm9yIHRoZSBgJ25hZ2dlZCdgIHRpZXIuXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgYXBwJ3MgcmVjb21tZW5kZWQtbWluaW11bSBFbGVjdHJvbiB2ZXJzaW9uLCB3aGVuIHRoZSB0YWJsZSBjYXJyaWVzIG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IG1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgcmVzb2x2ZWQgY29tcGF0aWJpbGl0eSB0aWVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdGllcjogRWxlY3Ryb25Db21wYXRpYmlsaXR5VGllcjtcbn1cblxuLyoqXG4gKiBUaGUgcnVudGltZSBFbGVjdHJvbiBjb21wYXRpYmlsaXR5IHRpZXIgZm9yIGEgYm9vdGVkIG93bmVkIGluc3RhbmNlLlxuICpcbiAqIC0gYCdvaydgIFx1MjAxNCB0aGUgcnVubmluZyBFbGVjdHJvbiBpcyBhdCBvciBhYm92ZSB0aGUgYXBwJ3MgcmVjb21tZW5kZWQgbWluaW11bS5cbiAqIC0gYCduYWdnZWQnYCBcdTIwMTQgdGhlIHJ1bm5pbmcgRWxlY3Ryb24gaXMgYmVsb3cgdGhlIHJlY29tbWVuZGVkIG1pbmltdW07IE9ic2lkaWFuXG4gKiAgIHJ1bnMgYnV0IHdvdWxkIHNob3cgaXRzIFwiaW5zdGFsbGVyIHRvbyBvbGRcIiByZWNvbW1lbmRhdGlvbi5cbiAqIC0gYCd1bmtub3duJ2AgXHUyMDE0IGNhbm5vdCBiZSBkZXRlcm1pbmVkICh0aGUgbGl2ZSB2ZXJzaW9uIHdhcyB1bnJlYWRhYmxlLCBvciB0aGVcbiAqICAgYXBwIHZlcnNpb24gY2FycmllcyBubyByZWNvbW1lbmRlZCBFbGVjdHJvbiB2ZXJzaW9uIGluIHRoZSB0YWJsZSkuXG4gKi9cbmV4cG9ydCB0eXBlIEVsZWN0cm9uQ29tcGF0aWJpbGl0eVRpZXIgPSAnbmFnZ2VkJyB8ICdvaycgfCAndW5rbm93bic7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHl9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHlQYXJhbXMge1xuICAvKipcbiAgVGhlIEVsZWN0cm9uIHZlcnNpb24gdGhlIGluc3RhbmNlIGlzIGFjdHVhbGx5IHJ1bm5pbmcsIG9yIGB1bmRlZmluZWRgIHdoZW4gdW5yZWFkYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFjdHVhbEVsZWN0cm9uVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICBUaGUgcmVzb2x2ZWQgT2JzaWRpYW4gYXBwIChhc2FyKSB2ZXJzaW9uIHRoYXQgaXMgcnVubmluZy5cbiAgICovXG4gIHJlYWRvbmx5IGFwcFZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgVGhlIGBtZXRhZGF0YS5qc29uYCBlbnRyeSBmb3Ige0BsaW5rIGFwcFZlcnNpb259LCBvciBgdW5kZWZpbmVkYCB3aGVuIGFic2VudC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhOiBPYnNpZGlhblZlcnNpb25NZXRhZGF0YSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgcnVudGltZSBFbGVjdHJvbiBjb21wYXRpYmlsaXR5IHZlcmRpY3QgZm9yIGEgYm9vdGVkIG93bmVkIGluc3RhbmNlLlxuICpcbiAqIE9ubHkgYCduYWdnZWQnYCB3YXJyYW50cyBhIHdhcm5pbmc7IGAnb2snYCBhbmQgYCd1bmtub3duJ2AgYXJlIHNpbGVudC4gQW5cbiAqIEVsZWN0cm9uIG1pc21hdGNoIG5ldmVyIGJsb2Nrcywgc28gdGhlcmUgaXMgbm8gZXJyb3IgdGllci4gQ29tcGFyaXNvbnMgYXJlIHB1cmVcbiAqIGB4LnkuemAgdmVyc2lvbiBjb21wYXJlcyBcdTIwMTQgbm8gSS9PLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcnVubmluZyBhcHAgdmVyc2lvbiwgdGhlIGxpdmUgRWxlY3Ryb24gdmVyc2lvbiwgYW5kIHRoZSBhcHBcbiAqICAgdmVyc2lvbidzIG1ldGFkYXRhIGVudHJ5LlxuICogQHJldHVybnMgVGhlIGNvbXBhdGliaWxpdHkgdmVyZGljdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHkocGFyYW1zOiBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zKTogRWxlY3Ryb25Db21wYXRpYmlsaXR5IHtcbiAgY29uc3QgeyBhY3R1YWxFbGVjdHJvblZlcnNpb24sIGFwcFZlcnNpb24sIG1ldGFkYXRhIH0gPSBwYXJhbXM7XG4gIGNvbnN0IG1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uID0gbWV0YWRhdGE/Lm1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uO1xuXG4gIGlmIChhY3R1YWxFbGVjdHJvblZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCBtaW5SZWNvbW1lbmRlZEVsZWN0cm9uVmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsgYWN0dWFsRWxlY3Ryb25WZXJzaW9uOiBhY3R1YWxFbGVjdHJvblZlcnNpb24gPz8gbnVsbCwgYXBwVmVyc2lvbiwgdGllcjogJ3Vua25vd24nIH07XG4gIH1cblxuICBpZiAoY29tcGFyZVZlcnNpb25zKGFjdHVhbEVsZWN0cm9uVmVyc2lvbiwgbWluUmVjb21tZW5kZWRFbGVjdHJvblZlcnNpb24pIDwgMCkge1xuICAgIHJldHVybiB7XG4gICAgICBhY3R1YWxFbGVjdHJvblZlcnNpb24sXG4gICAgICBhcHBWZXJzaW9uLFxuICAgICAgbWVzc2FnZTogYE9ic2lkaWFuICR7YXBwVmVyc2lvbn0gcnVucyBvbiBFbGVjdHJvbiAke2FjdHVhbEVsZWN0cm9uVmVyc2lvbn0gYnV0IHJlY29tbWVuZHMgRWxlY3Ryb24gYFxuICAgICAgICArIGAke21pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9ufSBvciBuZXdlcjsgcGluIGEgbmV3ZXIgb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uIGZvciBmdWxsIGNvbXBhdGliaWxpdHkuYCxcbiAgICAgIG1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uLFxuICAgICAgdGllcjogJ25hZ2dlZCdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsgYWN0dWFsRWxlY3Ryb25WZXJzaW9uLCBhcHBWZXJzaW9uLCBtaW5SZWNvbW1lbmRlZEVsZWN0cm9uVmVyc2lvbiwgdGllcjogJ29rJyB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBMkJBLFNBQVMsdUJBQXVCO0FBMkV6QixTQUFTLDZCQUE2QixRQUFtRTtBQUM5RyxRQUFNLEVBQUUsdUJBQXVCLFlBQVksU0FBUyxJQUFJO0FBQ3hELFFBQU0sZ0NBQWdDLFVBQVU7QUFFaEQsTUFBSSwwQkFBMEIsVUFBYSxrQ0FBa0MsUUFBVztBQUN0RixXQUFPLEVBQUUsdUJBQXVCLHlCQUF5QixNQUFNLFlBQVksTUFBTSxVQUFVO0FBQUEsRUFDN0Y7QUFFQSxNQUFJLGdCQUFnQix1QkFBdUIsNkJBQTZCLElBQUksR0FBRztBQUM3RSxXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBLFNBQVMsWUFBWSxVQUFVLHFCQUFxQixxQkFBcUIsNEJBQ2xFLDZCQUE2QjtBQUFBLE1BQ3BDO0FBQUEsTUFDQSxNQUFNO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFFQSxTQUFPLEVBQUUsdUJBQXVCLFlBQVksK0JBQStCLE1BQU0sS0FBSztBQUN4RjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -4,10 +4,12 @@
4
4
  * Builds the argument list for spawning the Android emulator.
5
5
  */
6
6
  /**
7
- * Parameters for {@link buildEmulatorArgs}.
7
+ * Parameters for {@link buildEmulatorArguments}.
8
8
  */
9
- export interface BuildEmulatorArgsParams {
10
- /** The Android Virtual Device name. */
9
+ export interface BuildEmulatorArgumentsParams {
10
+ /**
11
+ The Android Virtual Device name.
12
+ */
11
13
  readonly avdName: string;
12
14
  /**
13
15
  * Whether to run the emulator headless (`-no-window`), so it never steals
@@ -21,4 +23,4 @@ export interface BuildEmulatorArgsParams {
21
23
  * @param params - The emulator argument parameters.
22
24
  * @returns The argument array to pass to the emulator binary.
23
25
  */
24
- export declare function buildEmulatorArgs(params: BuildEmulatorArgsParams): string[];
26
+ export declare function buildEmulatorArguments(params: BuildEmulatorArgumentsParams): string[];
@@ -0,0 +1,12 @@
1
+ const DNS_SERVER = "8.8.8.8";
2
+ function buildEmulatorArguments(params) {
3
+ const emulatorArguments = ["-avd", params.avdName, "-no-snapshot-save", "-dns-server", DNS_SERVER];
4
+ if (params.isHidden) {
5
+ emulatorArguments.push("-no-window");
6
+ }
7
+ return emulatorArguments;
8
+ }
9
+ export {
10
+ buildEmulatorArguments
11
+ };
12
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLWFyZ3VtZW50cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEJ1aWxkcyB0aGUgYXJndW1lbnQgbGlzdCBmb3Igc3Bhd25pbmcgdGhlIEFuZHJvaWQgZW11bGF0b3IuXG4gKi9cblxuY29uc3QgRE5TX1NFUlZFUiA9ICc4LjguOC44JztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYnVpbGRFbXVsYXRvckFyZ3VtZW50c30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRFbXVsYXRvckFyZ3VtZW50c1BhcmFtcyB7XG4gIC8qKlxuICBUaGUgQW5kcm9pZCBWaXJ0dWFsIERldmljZSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgYXZkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJ1biB0aGUgZW11bGF0b3IgaGVhZGxlc3MgKGAtbm8td2luZG93YCksIHNvIGl0IG5ldmVyIHN0ZWFsc1xuICAgKiBmb2N1cy4gUmVzb2x2ZWQgZnJvbSB0aGUgYGlzRW11bGF0b3JWaXNpYmxlYCB0cmFuc3BvcnQgb3B0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNIaWRkZW46IGJvb2xlYW47XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBhcmd1bWVudCBsaXN0IGZvciBzcGF3bmluZyB0aGUgQW5kcm9pZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVtdWxhdG9yIGFyZ3VtZW50IHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQgYXJyYXkgdG8gcGFzcyB0byB0aGUgZW11bGF0b3IgYmluYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFbXVsYXRvckFyZ3VtZW50cyhwYXJhbXM6IEJ1aWxkRW11bGF0b3JBcmd1bWVudHNQYXJhbXMpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVtdWxhdG9yQXJndW1lbnRzID0gWyctYXZkJywgcGFyYW1zLmF2ZE5hbWUsICctbm8tc25hcHNob3Qtc2F2ZScsICctZG5zLXNlcnZlcicsIEROU19TRVJWRVJdO1xuICBpZiAocGFyYW1zLmlzSGlkZGVuKSB7XG4gICAgZW11bGF0b3JBcmd1bWVudHMucHVzaCgnLW5vLXdpbmRvdycpO1xuICB9XG4gIHJldHVybiBlbXVsYXRvckFyZ3VtZW50cztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQU1BLE1BQU0sYUFBYTtBQXdCWixTQUFTLHVCQUF1QixRQUFnRDtBQUNyRixRQUFNLG9CQUFvQixDQUFDLFFBQVEsT0FBTyxTQUFTLHFCQUFxQixlQUFlLFVBQVU7QUFDakcsTUFBSSxPQUFPLFVBQVU7QUFDbkIsc0JBQWtCLEtBQUssWUFBWTtBQUFBLEVBQ3JDO0FBQ0EsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -4,7 +4,7 @@
4
4
  * Shared helper for enabling an Obsidian plugin with error capture.
5
5
  * Used by both the global setup and integration tests.
6
6
  */
7
- import type { CommonArgs } from './eval-in-obsidian.mjs';
7
+ import type { CommonArguments } from './eval-in-obsidian.mjs';
8
8
  /**
9
9
  * Parameters for {@link enablePluginWithErrorCapture}.
10
10
  */
@@ -51,14 +51,14 @@ export interface EnablePluginResult {
51
51
  * Obsidian's `enablePlugin` try-catch swallows them. The original method
52
52
  * is always restored in a `finally` block.
53
53
  *
54
- * Designed to be passed as the `fn` argument to {@link evalInObsidian}.
54
+ * Designed to be passed as the `callback` argument to {@link evalInObsidian}.
55
55
  *
56
- * @param args - The common args plus the plugin ID.
57
- * @param args.app - The Obsidian app instance.
58
- * @param args.pluginId - The ID of the plugin to enable.
56
+ * @param input - The common input plus the plugin ID.
57
+ * @param input.app - The Obsidian app instance.
58
+ * @param input.pluginId - The ID of the plugin to enable.
59
59
  * @returns The enable result with error message and enabled status.
60
60
  */
61
- export declare function enablePluginWithErrorCapture({ app, pluginId }: CommonArgs & EnablePluginParams): Promise<EnablePluginResult>;
61
+ export declare function enablePluginWithErrorCapture({ app, pluginId }: CommonArguments & EnablePluginParams): Promise<EnablePluginResult>;
62
62
  /**
63
63
  * The generic last-resort message shown when a plugin is in the enabled set but
64
64
  * not loaded and no real error could be captured (neither the `loadPlugin`
@@ -2,7 +2,7 @@ async function enablePluginWithErrorCapture({ app, pluginId }) {
2
2
  if (!app.plugins.isEnabled()) {
3
3
  await app.plugins.setEnable(true);
4
4
  }
5
- if (app.plugins.enabledPlugins.has(pluginId) && !(pluginId in app.plugins.plugins)) {
5
+ if (app.plugins.enabledPlugins.has(pluginId) && !Object.hasOwn(app.plugins.plugins, pluginId)) {
6
6
  await app.plugins.disablePluginAndSave(pluginId);
7
7
  }
8
8
  let errorMessage;
@@ -13,61 +13,61 @@ async function enablePluginWithErrorCapture({ app, pluginId }) {
13
13
  errorMessage = void 0;
14
14
  return result;
15
15
  } catch (error) {
16
- const holder = window;
16
+ const holder = globalThis;
17
17
  errorMessage = holder.__obsidianIntegrationTesting?.errorToString(error) ?? String(error);
18
18
  throw error;
19
19
  }
20
20
  };
21
21
  const capturedConsole = [];
22
- const formatHolder = window;
23
- function formatArg(arg) {
24
- if (arg instanceof Error) {
25
- return formatHolder.__obsidianIntegrationTesting?.errorToString(arg) ?? String(arg);
22
+ const formatHolder = globalThis;
23
+ function formatArgument(argument) {
24
+ if (argument instanceof Error) {
25
+ return formatHolder.__obsidianIntegrationTesting?.errorToString(argument) ?? String(argument);
26
26
  }
27
- if (typeof arg === "string") {
28
- return arg;
27
+ if (typeof argument === "string") {
28
+ return argument;
29
29
  }
30
- if (arg === void 0 || arg === null) {
31
- return String(arg);
30
+ if (argument === void 0 || argument === null) {
31
+ return String(argument);
32
32
  }
33
- const json = JSON.stringify(arg);
34
- return json ?? Object.prototype.toString.call(arg);
33
+ const json = JSON.stringify(argument);
34
+ return json ?? Object.prototype.toString.call(argument);
35
35
  }
36
- function recordConsole(...args) {
37
- capturedConsole.push(args.map(formatArg).join(" "));
36
+ function recordConsole(...input) {
37
+ capturedConsole.push(input.map((argument) => formatArgument(argument)).join(" "));
38
38
  }
39
39
  const origConsoleError = console.error;
40
40
  const origConsoleWarn = console.warn;
41
- console.error = (...args) => {
42
- recordConsole(...args);
43
- origConsoleError.apply(console, args);
41
+ console.error = (...input) => {
42
+ recordConsole(...input);
43
+ origConsoleError.apply(console, input);
44
44
  };
45
- console.warn = (...args) => {
46
- recordConsole(...args);
47
- origConsoleWarn.apply(console, args);
45
+ console.warn = (...input) => {
46
+ recordConsole(...input);
47
+ origConsoleWarn.apply(console, input);
48
48
  };
49
49
  function onWindowError(event) {
50
- capturedConsole.push(event.error instanceof Error ? formatArg(event.error) : event.message);
50
+ capturedConsole.push(event.error instanceof Error ? formatArgument(event.error) : event.message);
51
51
  }
52
52
  function onUnhandledRejection(event) {
53
- capturedConsole.push(formatArg(event.reason));
53
+ capturedConsole.push(formatArgument(event.reason));
54
54
  }
55
- window.addEventListener("error", onWindowError);
56
- window.addEventListener("unhandledrejection", onUnhandledRejection);
55
+ globalThis.addEventListener("error", onWindowError);
56
+ globalThis.addEventListener("unhandledrejection", onUnhandledRejection);
57
57
  try {
58
58
  await app.plugins.enablePluginAndSave(pluginId);
59
59
  } finally {
60
60
  app.plugins.loadPlugin = origLoadPlugin;
61
61
  console.error = origConsoleError;
62
62
  console.warn = origConsoleWarn;
63
- window.removeEventListener("error", onWindowError);
64
- window.removeEventListener("unhandledrejection", onUnhandledRejection);
63
+ globalThis.removeEventListener("error", onWindowError);
64
+ globalThis.removeEventListener("unhandledrejection", onUnhandledRejection);
65
65
  }
66
- const isLoaded = pluginId in app.plugins.plugins;
66
+ const isLoaded = Object.hasOwn(app.plugins.plugins, pluginId);
67
67
  let rendererConsoleErrors;
68
68
  if (!errorMessage && !isLoaded) {
69
69
  const joined = capturedConsole.join("\n").trim();
70
- rendererConsoleErrors = joined ? joined : void 0;
70
+ rendererConsoleErrors = joined || void 0;
71
71
  }
72
72
  return {
73
73
  errorMessage,
@@ -83,4 +83,4 @@ export {
83
83
  enablePluginWithErrorCapture,
84
84
  getGenericPluginLoadFailureMessage
85
85
  };
86
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VuYWJsZS1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTaGFyZWQgaGVscGVyIGZvciBlbmFibGluZyBhbiBPYnNpZGlhbiBwbHVnaW4gd2l0aCBlcnJvciBjYXB0dXJlLlxuICogVXNlZCBieSBib3RoIHRoZSBnbG9iYWwgc2V0dXAgYW5kIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1vbkFyZ3MgfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4ubWpzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZW5hYmxlUGx1Z2luV2l0aEVycm9yQ2FwdHVyZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5hYmxlUGx1Z2luUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcGx1Z2luIHRvIGVuYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGVuYWJsaW5nIGEgcGx1Z2luIHdpdGggZXJyb3IgY2FwdHVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmFibGVQbHVnaW5SZXN1bHQge1xuICAvKipcbiAgICogVGhlIGVycm9yIG1lc3NhZ2UgY2FwdHVyZWQgYnkgdGhlIGBsb2FkUGx1Z2luYCBtb25rZXktcGF0Y2gsIG9yIGB1bmRlZmluZWRgXG4gICAqIHdoZW4gdGhlIHBhdGNoIHNhdyBubyB0aHJvdy4gV2hlbiBPYnNpZGlhbiBzd2FsbG93cyB0aGUgZXJyb3IgKmJlZm9yZSogdGhlXG4gICAqIHBhdGNoIChsZWF2aW5nIHRoaXMgZW1wdHkpIGJ1dCB0aGUgcGx1Z2luIHN0aWxsIGZhaWxlZCB0byBsb2FkLCB0aGUgcmVhbFxuICAgKiBjYXVzZSBcdTIwMTQgaWYgaXQgcmVhY2hlZCB0aGUgcmVuZGVyZXIgY29uc29sZSBcdTIwMTQgaXMgaW4ge0BsaW5rIEVuYWJsZVBsdWdpblJlc3VsdC5yZW5kZXJlckNvbnNvbGVFcnJvcnN9LlxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBsdWdpbiBpcyBpbiB0aGUgZW5hYmxlZCBzZXQgYWZ0ZXIgdGhlIGVuYWJsZSBhdHRlbXB0LlxuICAgKiBBIHBsdWdpbiBjYW4gYmUgXCJlbmFibGVkXCIgKGNvbmZpZ3VyZWQpIGJ1dCBub3QgXCJsb2FkZWRcIiAoZmFpbGVkIHRvIGluaXRpYWxpemUpLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFbmFibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwbHVnaW4gaW5zdGFuY2UgYWN0dWFsbHkgZXhpc3RzIGluIGBhcHAucGx1Z2lucy5wbHVnaW5zYC5cbiAgICogVGhpcyBpcyB0aGUgZGVmaW5pdGl2ZSBjaGVjayBcdTIwMTQgYSBwbHVnaW4gdGhhdCBpcyBlbmFibGVkIGJ1dCBub3QgbG9hZGVkIGhhcyBmYWlsZWQuXG4gICAqL1xuICByZWFkb25seSBpc0xvYWRlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uc29sZS9lcnJvciBvdXRwdXQgY2FwdHVyZWQgaW4gdGhlIHJlbmRlcmVyIGR1cmluZyB0aGUgZW5hYmxlIHdpbmRvdyBcdTIwMTRcbiAgICogcG9wdWxhdGVkICoqb25seSoqIHdoZW4gdGhlIHBsdWdpbiBmYWlsZWQgdG8gbG9hZCBhbmQgdGhlIG1vbmtleS1wYXRjaCBzYXdcbiAgICogbm8gdGhyb3cgKGAhZXJyb3JNZXNzYWdlICYmICFpc0xvYWRlZGApLCBpLmUuIGV4YWN0bHkgdGhlIGNhc2UgdGhhdCB3b3VsZFxuICAgKiBvdGhlcndpc2Ugc3VyZmFjZSB0aGUgZ2VuZXJpYyB7QGxpbmsgZ2V0R2VuZXJpY1BsdWdpbkxvYWRGYWlsdXJlTWVzc2FnZX0gdGV4dC5cbiAgICogYHVuZGVmaW5lZGAgb3RoZXJ3aXNlIChpbmNsdWRpbmcgb24gc3VjY2VzcyBhbmQgd2hlbiB7QGxpbmsgRW5hYmxlUGx1Z2luUmVzdWx0LmVycm9yTWVzc2FnZX0gYWxyZWFkeSBoYXMgdGhlIGVycm9yKS5cbiAgICovXG4gIHJlYWRvbmx5IHJlbmRlcmVyQ29uc29sZUVycm9yczogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgSW50ZWdyYXRpb25UZXN0aW5nRXJyb3JUb1N0cmluZyB7XG4gIGVycm9yVG9TdHJpbmcoZXJyb3I6IHVua25vd24pOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXIge1xuICBfX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nOiBJbnRlZ3JhdGlvblRlc3RpbmdFcnJvclRvU3RyaW5nO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgYSBwbHVnaW4gaW5zaWRlIE9ic2lkaWFuIGFuZCBjYXB0dXJlcyBhbnkgbG9hZCBlcnJvci5cbiAqXG4gKiBNb25rZXktcGF0Y2hlcyBgYXBwLnBsdWdpbnMubG9hZFBsdWdpbmAgdG8gaW50ZXJjZXB0IGVycm9ycyBiZWZvcmVcbiAqIE9ic2lkaWFuJ3MgYGVuYWJsZVBsdWdpbmAgdHJ5LWNhdGNoIHN3YWxsb3dzIHRoZW0uIFRoZSBvcmlnaW5hbCBtZXRob2RcbiAqIGlzIGFsd2F5cyByZXN0b3JlZCBpbiBhIGBmaW5hbGx5YCBibG9jay5cbiAqXG4gKiBEZXNpZ25lZCB0byBiZSBwYXNzZWQgYXMgdGhlIGBmbmAgYXJndW1lbnQgdG8ge0BsaW5rIGV2YWxJbk9ic2lkaWFufS5cbiAqXG4gKiBAcGFyYW0gYXJncyAtIFRoZSBjb21tb24gYXJncyBwbHVzIHRoZSBwbHVnaW4gSUQuXG4gKiBAcGFyYW0gYXJncy5hcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGFyZ3MucGx1Z2luSWQgLSBUaGUgSUQgb2YgdGhlIHBsdWdpbiB0byBlbmFibGUuXG4gKiBAcmV0dXJucyBUaGUgZW5hYmxlIHJlc3VsdCB3aXRoIGVycm9yIG1lc3NhZ2UgYW5kIGVuYWJsZWQgc3RhdHVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5hYmxlUGx1Z2luV2l0aEVycm9yQ2FwdHVyZSh7IGFwcCwgcGx1Z2luSWQgfTogQ29tbW9uQXJncyAmIEVuYWJsZVBsdWdpblBhcmFtcyk6IFByb21pc2U8RW5hYmxlUGx1Z2luUmVzdWx0PiB7XG4gIGlmICghYXBwLnBsdWdpbnMuaXNFbmFibGVkKCkpIHtcbiAgICBhd2FpdCBhcHAucGx1Z2lucy5zZXRFbmFibGUodHJ1ZSk7XG4gIH1cblxuICAvKlxuICAgKiBGb3JjZSBhIGdlbnVpbmUgcmVsb2FkIHdoZW4gcmV0cnlpbmcuIElmIGEgcHJpb3IgYXR0ZW1wdCBsZWZ0IHRoZSBwbHVnaW4gaW5cbiAgICogdGhlIGVuYWJsZWQgc2V0IGJ1dCBub3QgbG9hZGVkICh0aGUgY29sZC1ib290IHJhY2UpLCBhIHBsYWluIHJlLWVuYWJsZSBjYW5cbiAgICogc2hvcnQtY2lyY3VpdCBvbiBzb21lIE9ic2lkaWFuIHZlcnNpb25zIHdpdGhvdXQgcmUtYXR0ZW1wdGluZyB0aGUgbG9hZC5cbiAgICogRnVsbHkgcmVzZXQgdGhlIGVuYWJsZWQgc3RhdGUgZmlyc3Qgc28gdGhlIGBlbmFibGVQbHVnaW5BbmRTYXZlYCBiZWxvdyBpcyBhXG4gICAqIHJlYWwgZnJlc2ggZW5hYmxlICsgbG9hZC4gTm8tb3Agb24gdGhlIGZpcnN0IGF0dGVtcHQgKG5vdCB5ZXQgZW5hYmxlZCkuXG4gICAqL1xuICBpZiAoYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSAmJiAhKHBsdWdpbklkIGluIGFwcC5wbHVnaW5zLnBsdWdpbnMpKSB7XG4gICAgYXdhaXQgYXBwLnBsdWdpbnMuZGlzYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpO1xuICB9XG5cbiAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kIC0tIEludGVudGlvbmFsIG1vbmtleS1wYXRjaDsgcmVzdG9yZWQgaW4gZmluYWxseS5cbiAgY29uc3Qgb3JpZ0xvYWRQbHVnaW4gPSBhcHAucGx1Z2lucy5sb2FkUGx1Z2luO1xuICBhcHAucGx1Z2lucy5sb2FkUGx1Z2luID0gYXN5bmMgZnVuY3Rpb24gbG9hZFBsdWdpbihpZDogc3RyaW5nLCBpc1VzZXJFbmFibGVkPzogYm9vbGVhbik6IFByb21pc2U8UGx1Z2luPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9yaWdMb2FkUGx1Z2luLmNhbGwodGhpcywgaWQsIGlzVXNlckVuYWJsZWQpO1xuICAgICAgZXJyb3JNZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIEFwcHJvdmVkIGRvdWJsZSBjYXN0OiBgX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ2AgaXMgb3VyIGludGVybmFsIFdpbmRvdyBhdWdtZW50YXRpb24sIGludGVudGlvbmFsbHkga2VwdCBsb2NhbCAobm90IGRlY2xhcmVkIGdsb2JhbGx5KSB0byBhdm9pZCBsZWFraW5nIGludG8gY29uc3VtZXIgdHlwZXMuXG4gICAgICBjb25zdCBob2xkZXIgPSB3aW5kb3cgYXMgdW5rbm93biBhcyBQYXJ0aWFsPEludGVncmF0aW9uVGVzdGluZ0hvbGRlcj47XG4gICAgICBlcnJvck1lc3NhZ2UgPSBob2xkZXIuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8uZXJyb3JUb1N0cmluZyhlcnJvcikgPz8gU3RyaW5nKGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICAvKlxuICAgKiBMYXllciAxIFx1MjAxNCBjYXB0dXJlIHRoZSByZW5kZXJlciBjb25zb2xlICsgdW5jYXVnaHQgZXJyb3JzIGZvciB0aGUgZHVyYXRpb24gb2ZcbiAgICogdGhlIGVuYWJsZS4gSWYgT2JzaWRpYW4gc3dhbGxvd3MgdGhlIGxvYWQgZXJyb3IgYmVmb3JlIHRoZSBtb25rZXktcGF0Y2ggYWJvdmVcbiAgICogc2VlcyBpdCAobGVhdmluZyBgZXJyb3JNZXNzYWdlYCBlbXB0eSksIHRoZSByZWFsIGNhdXNlIGlzIHR5cGljYWxseSBzdGlsbFxuICAgKiBgY29uc29sZS5lcnJvcmAnZCwgc28gY2FwdHVyaW5nIGl0IGhlcmUgc3VyZmFjZXMgaXQgaW4gcGxhY2Ugb2YgdGhlIGdlbmVyaWNcbiAgICogZmFsbGJhY2suIFdvcmtzIG9uIGRlc2t0b3AgYW5kIEFuZHJvaWQgYWxpa2Ugc2luY2UgdGhpcyB3aG9sZSBmdW5jdGlvbiBpc1xuICAgKiBzZXJpYWxpemVkIGFuZCBpbmplY3RlZCBpbnRvIHRoZSByZW5kZXJlci5cbiAgICovXG4gIGNvbnN0IGNhcHR1cmVkQ29uc29sZTogc3RyaW5nW10gPSBbXTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIEFwcHJvdmVkIGRvdWJsZSBjYXN0LCBzYW1lIHJhdGlvbmFsZSBhcyBhYm92ZS5cbiAgY29uc3QgZm9ybWF0SG9sZGVyID0gd2luZG93IGFzIHVua25vd24gYXMgUGFydGlhbDxJbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXI+O1xuICBmdW5jdGlvbiBmb3JtYXRBcmcoYXJnOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBpZiAoYXJnIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHJldHVybiBmb3JtYXRIb2xkZXIuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8uZXJyb3JUb1N0cmluZyhhcmcpID8/IFN0cmluZyhhcmcpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBTdHJpbmcoYXJnKTtcbiAgICB9XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGFyZyk7XG4gICAgcmV0dXJuIGpzb24gPz8gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZyk7XG4gIH1cbiAgZnVuY3Rpb24gcmVjb3JkQ29uc29sZSguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBjYXB0dXJlZENvbnNvbGUucHVzaChhcmdzLm1hcChmb3JtYXRBcmcpLmpvaW4oJyAnKSk7XG4gIH1cbiAgY29uc3Qgb3JpZ0NvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gIGNvbnN0IG9yaWdDb25zb2xlV2FybiA9IGNvbnNvbGUud2FybjtcbiAgY29uc29sZS5lcnJvciA9ICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkID0+IHtcbiAgICByZWNvcmRDb25zb2xlKC4uLmFyZ3MpO1xuICAgIG9yaWdDb25zb2xlRXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH07XG4gIGNvbnNvbGUud2FybiA9ICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkID0+IHtcbiAgICByZWNvcmRDb25zb2xlKC4uLmFyZ3MpO1xuICAgIG9yaWdDb25zb2xlV2Fybi5hcHBseShjb25zb2xlLCBhcmdzKTtcbiAgfTtcbiAgZnVuY3Rpb24gb25XaW5kb3dFcnJvcihldmVudDogRXJyb3JFdmVudCk6IHZvaWQge1xuICAgIGNhcHR1cmVkQ29uc29sZS5wdXNoKGV2ZW50LmVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBmb3JtYXRBcmcoZXZlbnQuZXJyb3IpIDogZXZlbnQubWVzc2FnZSk7XG4gIH1cbiAgZnVuY3Rpb24gb25VbmhhbmRsZWRSZWplY3Rpb24oZXZlbnQ6IFByb21pc2VSZWplY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIGNhcHR1cmVkQ29uc29sZS5wdXNoKGZvcm1hdEFyZyhldmVudC5yZWFzb24pKTtcbiAgfVxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbldpbmRvd0Vycm9yKTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsIG9uVW5oYW5kbGVkUmVqZWN0aW9uKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC5wbHVnaW5zLmVuYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF0b21pYy11cGRhdGVzIC0tIEludGVudGlvbmFsIHJlc3RvcmUgb2YgbW9ua2V5LXBhdGNoLlxuICAgIGFwcC5wbHVnaW5zLmxvYWRQbHVnaW4gPSBvcmlnTG9hZFBsdWdpbjtcbiAgICBjb25zb2xlLmVycm9yID0gb3JpZ0NvbnNvbGVFcnJvcjtcbiAgICBjb25zb2xlLndhcm4gPSBvcmlnQ29uc29sZVdhcm47XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25XaW5kb3dFcnJvcik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsIG9uVW5oYW5kbGVkUmVqZWN0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IGlzTG9hZGVkID0gcGx1Z2luSWQgaW4gYXBwLnBsdWdpbnMucGx1Z2lucztcblxuICBsZXQgcmVuZGVyZXJDb25zb2xlRXJyb3JzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmICghZXJyb3JNZXNzYWdlICYmICFpc0xvYWRlZCkge1xuICAgIGNvbnN0IGpvaW5lZCA9IGNhcHR1cmVkQ29uc29sZS5qb2luKCdcXG4nKS50cmltKCk7XG4gICAgcmVuZGVyZXJDb25zb2xlRXJyb3JzID0gam9pbmVkID8gam9pbmVkIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlcnJvck1lc3NhZ2UsXG4gICAgaXNFbmFibGVkOiBhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpLFxuICAgIGlzTG9hZGVkLFxuICAgIHJlbmRlcmVyQ29uc29sZUVycm9yc1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBnZW5lcmljIGxhc3QtcmVzb3J0IG1lc3NhZ2Ugc2hvd24gd2hlbiBhIHBsdWdpbiBpcyBpbiB0aGUgZW5hYmxlZCBzZXQgYnV0XG4gKiBub3QgbG9hZGVkIGFuZCBubyByZWFsIGVycm9yIGNvdWxkIGJlIGNhcHR1cmVkIChuZWl0aGVyIHRoZSBgbG9hZFBsdWdpbmBcbiAqIG1vbmtleS1wYXRjaCBub3IgdGhlIHJlbmRlcmVyIGNvbnNvbGUgbm9yLCBvbiBBbmRyb2lkLCBgYWRiIGxvZ2NhdGAgc3VyZmFjZWQgYVxuICogY2F1c2UpLlxuICpcbiAqIEhvc3Qtc2lkZSBoZWxwZXIgXHUyMDE0IHVzZWQgYnkgdGhlIHNldHVwIG9yY2hlc3RyYXRpb24gdG8gY29tcG9zZSB0aGUgZmluYWxcbiAqIGZhaWx1cmUgbWVzc2FnZSwgc28gdGhlIHJlbmRlcmVyLWluamVjdGVkIHtAbGluayBlbmFibGVQbHVnaW5XaXRoRXJyb3JDYXB0dXJlfVxuICogc3RheXMgc2VsZi1jb250YWluZWQuXG4gKlxuICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIElEIG9mIHRoZSBwbHVnaW4gdGhhdCBmYWlsZWQgdG8gbG9hZC5cbiAqIEByZXR1cm5zIFRoZSBnZW5lcmljIGZhaWx1cmUgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdlbmVyaWNQbHVnaW5Mb2FkRmFpbHVyZU1lc3NhZ2UocGx1Z2luSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgUGx1Z2luIFwiJHtwbHVnaW5JZH1cIiBpcyBpbiB0aGUgZW5hYmxlZCBzZXQgYnV0IG5vdCBsb2FkZWQuIGBcbiAgICArICdPYnNpZGlhbiBtYXkgaGF2ZSBjYXVnaHQgdGhlIGVycm9yIGJlZm9yZSB0aGUgbW9ua2V5LXBhdGNoLiAnXG4gICAgKyAnQ2hlY2sgdGhlIE9ic2lkaWFuIGNvbnNvbGUgZm9yIGRldGFpbHMuJztcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQStFQSxlQUFzQiw2QkFBNkIsRUFBRSxLQUFLLFNBQVMsR0FBaUU7QUFDbEksTUFBSSxDQUFDLElBQUksUUFBUSxVQUFVLEdBQUc7QUFDNUIsVUFBTSxJQUFJLFFBQVEsVUFBVSxJQUFJO0FBQUEsRUFDbEM7QUFTQSxNQUFJLElBQUksUUFBUSxlQUFlLElBQUksUUFBUSxLQUFLLEVBQUUsWUFBWSxJQUFJLFFBQVEsVUFBVTtBQUNsRixVQUFNLElBQUksUUFBUSxxQkFBcUIsUUFBUTtBQUFBLEVBQ2pEO0FBRUEsTUFBSTtBQUVKLFFBQU0saUJBQWlCLElBQUksUUFBUTtBQUNuQyxNQUFJLFFBQVEsYUFBYSxlQUFlLFdBQVcsSUFBWSxlQUEwQztBQUN2RyxRQUFJO0FBQ0YsWUFBTSxTQUFTLE1BQU0sZUFBZSxLQUFLLE1BQU0sSUFBSSxhQUFhO0FBQ2hFLHFCQUFlO0FBQ2YsYUFBTztBQUFBLElBQ1QsU0FBUyxPQUFPO0FBRWQsWUFBTSxTQUFTO0FBQ2YscUJBQWUsT0FBTyw4QkFBOEIsY0FBYyxLQUFLLEtBQUssT0FBTyxLQUFLO0FBQ3hGLFlBQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQVVBLFFBQU0sa0JBQTRCLENBQUM7QUFFbkMsUUFBTSxlQUFlO0FBQ3JCLFdBQVMsVUFBVSxLQUFzQjtBQUN2QyxRQUFJLGVBQWUsT0FBTztBQUN4QixhQUFPLGFBQWEsOEJBQThCLGNBQWMsR0FBRyxLQUFLLE9BQU8sR0FBRztBQUFBLElBQ3BGO0FBQ0EsUUFBSSxPQUFPLFFBQVEsVUFBVTtBQUMzQixhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksUUFBUSxVQUFhLFFBQVEsTUFBTTtBQUNyQyxhQUFPLE9BQU8sR0FBRztBQUFBLElBQ25CO0FBQ0EsVUFBTSxPQUFPLEtBQUssVUFBVSxHQUFHO0FBQy9CLFdBQU8sUUFBUSxPQUFPLFVBQVUsU0FBUyxLQUFLLEdBQUc7QUFBQSxFQUNuRDtBQUNBLFdBQVMsaUJBQWlCLE1BQXVCO0FBQy9DLG9CQUFnQixLQUFLLEtBQUssSUFBSSxTQUFTLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFBQSxFQUNwRDtBQUNBLFFBQU0sbUJBQW1CLFFBQVE7QUFDakMsUUFBTSxrQkFBa0IsUUFBUTtBQUNoQyxVQUFRLFFBQVEsSUFBSSxTQUEwQjtBQUM1QyxrQkFBYyxHQUFHLElBQUk7QUFDckIscUJBQWlCLE1BQU0sU0FBUyxJQUFJO0FBQUEsRUFDdEM7QUFDQSxVQUFRLE9BQU8sSUFBSSxTQUEwQjtBQUMzQyxrQkFBYyxHQUFHLElBQUk7QUFDckIsb0JBQWdCLE1BQU0sU0FBUyxJQUFJO0FBQUEsRUFDckM7QUFDQSxXQUFTLGNBQWMsT0FBeUI7QUFDOUMsb0JBQWdCLEtBQUssTUFBTSxpQkFBaUIsUUFBUSxVQUFVLE1BQU0sS0FBSyxJQUFJLE1BQU0sT0FBTztBQUFBLEVBQzVGO0FBQ0EsV0FBUyxxQkFBcUIsT0FBb0M7QUFDaEUsb0JBQWdCLEtBQUssVUFBVSxNQUFNLE1BQU0sQ0FBQztBQUFBLEVBQzlDO0FBQ0EsU0FBTyxpQkFBaUIsU0FBUyxhQUFhO0FBQzlDLFNBQU8saUJBQWlCLHNCQUFzQixvQkFBb0I7QUFFbEUsTUFBSTtBQUNGLFVBQU0sSUFBSSxRQUFRLG9CQUFvQixRQUFRO0FBQUEsRUFDaEQsVUFBRTtBQUVBLFFBQUksUUFBUSxhQUFhO0FBQ3pCLFlBQVEsUUFBUTtBQUNoQixZQUFRLE9BQU87QUFDZixXQUFPLG9CQUFvQixTQUFTLGFBQWE7QUFDakQsV0FBTyxvQkFBb0Isc0JBQXNCLG9CQUFvQjtBQUFBLEVBQ3ZFO0FBRUEsUUFBTSxXQUFXLFlBQVksSUFBSSxRQUFRO0FBRXpDLE1BQUk7QUFDSixNQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVTtBQUM5QixVQUFNLFNBQVMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFLEtBQUs7QUFDL0MsNEJBQXdCLFNBQVMsU0FBUztBQUFBLEVBQzVDO0FBRUEsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBLFdBQVcsSUFBSSxRQUFRLGVBQWUsSUFBSSxRQUFRO0FBQUEsSUFDbEQ7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGO0FBZU8sU0FBUyxtQ0FBbUMsVUFBMEI7QUFDM0UsU0FBTyxXQUFXLFFBQVE7QUFHNUI7IiwKICAibmFtZXMiOiBbXQp9Cg==
86
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VuYWJsZS1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTaGFyZWQgaGVscGVyIGZvciBlbmFibGluZyBhbiBPYnNpZGlhbiBwbHVnaW4gd2l0aCBlcnJvciBjYXB0dXJlLlxuICogVXNlZCBieSBib3RoIHRoZSBnbG9iYWwgc2V0dXAgYW5kIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1vbkFyZ3VtZW50cyB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5tanMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBlbmFibGVQbHVnaW5XaXRoRXJyb3JDYXB0dXJlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmFibGVQbHVnaW5QYXJhbXMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBwbHVnaW4gdG8gZW5hYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgZW5hYmxpbmcgYSBwbHVnaW4gd2l0aCBlcnJvciBjYXB0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZVBsdWdpblJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgbWVzc2FnZSBjYXB0dXJlZCBieSB0aGUgYGxvYWRQbHVnaW5gIG1vbmtleS1wYXRjaCwgb3IgYHVuZGVmaW5lZGBcbiAgICogd2hlbiB0aGUgcGF0Y2ggc2F3IG5vIHRocm93LiBXaGVuIE9ic2lkaWFuIHN3YWxsb3dzIHRoZSBlcnJvciAqYmVmb3JlKiB0aGVcbiAgICogcGF0Y2ggKGxlYXZpbmcgdGhpcyBlbXB0eSkgYnV0IHRoZSBwbHVnaW4gc3RpbGwgZmFpbGVkIHRvIGxvYWQsIHRoZSByZWFsXG4gICAqIGNhdXNlIFx1MjAxNCBpZiBpdCByZWFjaGVkIHRoZSByZW5kZXJlciBjb25zb2xlIFx1MjAxNCBpcyBpbiB7QGxpbmsgRW5hYmxlUGx1Z2luUmVzdWx0LnJlbmRlcmVyQ29uc29sZUVycm9yc30uXG4gICAqL1xuICByZWFkb25seSBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcGx1Z2luIGlzIGluIHRoZSBlbmFibGVkIHNldCBhZnRlciB0aGUgZW5hYmxlIGF0dGVtcHQuXG4gICAqIEEgcGx1Z2luIGNhbiBiZSBcImVuYWJsZWRcIiAoY29uZmlndXJlZCkgYnV0IG5vdCBcImxvYWRlZFwiIChmYWlsZWQgdG8gaW5pdGlhbGl6ZSkuXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBsdWdpbiBpbnN0YW5jZSBhY3R1YWxseSBleGlzdHMgaW4gYGFwcC5wbHVnaW5zLnBsdWdpbnNgLlxuICAgKiBUaGlzIGlzIHRoZSBkZWZpbml0aXZlIGNoZWNrIFx1MjAxNCBhIHBsdWdpbiB0aGF0IGlzIGVuYWJsZWQgYnV0IG5vdCBsb2FkZWQgaGFzIGZhaWxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzTG9hZGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25zb2xlL2Vycm9yIG91dHB1dCBjYXB0dXJlZCBpbiB0aGUgcmVuZGVyZXIgZHVyaW5nIHRoZSBlbmFibGUgd2luZG93IFx1MjAxNFxuICAgKiBwb3B1bGF0ZWQgKipvbmx5Kiogd2hlbiB0aGUgcGx1Z2luIGZhaWxlZCB0byBsb2FkIGFuZCB0aGUgbW9ua2V5LXBhdGNoIHNhd1xuICAgKiBubyB0aHJvdyAoYCFlcnJvck1lc3NhZ2UgJiYgIWlzTG9hZGVkYCksIGkuZS4gZXhhY3RseSB0aGUgY2FzZSB0aGF0IHdvdWxkXG4gICAqIG90aGVyd2lzZSBzdXJmYWNlIHRoZSBnZW5lcmljIHtAbGluayBnZXRHZW5lcmljUGx1Z2luTG9hZEZhaWx1cmVNZXNzYWdlfSB0ZXh0LlxuICAgKiBgdW5kZWZpbmVkYCBvdGhlcndpc2UgKGluY2x1ZGluZyBvbiBzdWNjZXNzIGFuZCB3aGVuIHtAbGluayBFbmFibGVQbHVnaW5SZXN1bHQuZXJyb3JNZXNzYWdlfSBhbHJlYWR5IGhhcyB0aGUgZXJyb3IpLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGVyZXJDb25zb2xlRXJyb3JzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmludGVyZmFjZSBJbnRlZ3JhdGlvblRlc3RpbmdFcnJvclRvU3RyaW5nIHtcbiAgZXJyb3JUb1N0cmluZyhlcnJvcjogdW5rbm93bik6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEludGVncmF0aW9uVGVzdGluZ0hvbGRlciB7XG4gIF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc6IEludGVncmF0aW9uVGVzdGluZ0Vycm9yVG9TdHJpbmc7XG59XG5cbi8qKlxuICogRW5hYmxlcyBhIHBsdWdpbiBpbnNpZGUgT2JzaWRpYW4gYW5kIGNhcHR1cmVzIGFueSBsb2FkIGVycm9yLlxuICpcbiAqIE1vbmtleS1wYXRjaGVzIGBhcHAucGx1Z2lucy5sb2FkUGx1Z2luYCB0byBpbnRlcmNlcHQgZXJyb3JzIGJlZm9yZVxuICogT2JzaWRpYW4ncyBgZW5hYmxlUGx1Z2luYCB0cnktY2F0Y2ggc3dhbGxvd3MgdGhlbS4gVGhlIG9yaWdpbmFsIG1ldGhvZFxuICogaXMgYWx3YXlzIHJlc3RvcmVkIGluIGEgYGZpbmFsbHlgIGJsb2NrLlxuICpcbiAqIERlc2lnbmVkIHRvIGJlIHBhc3NlZCBhcyB0aGUgYGNhbGxiYWNrYCBhcmd1bWVudCB0byB7QGxpbmsgZXZhbEluT2JzaWRpYW59LlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBjb21tb24gaW5wdXQgcGx1cyB0aGUgcGx1Z2luIElELlxuICogQHBhcmFtIGlucHV0LmFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gaW5wdXQucGx1Z2luSWQgLSBUaGUgSUQgb2YgdGhlIHBsdWdpbiB0byBlbmFibGUuXG4gKiBAcmV0dXJucyBUaGUgZW5hYmxlIHJlc3VsdCB3aXRoIGVycm9yIG1lc3NhZ2UgYW5kIGVuYWJsZWQgc3RhdHVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5hYmxlUGx1Z2luV2l0aEVycm9yQ2FwdHVyZSh7IGFwcCwgcGx1Z2luSWQgfTogQ29tbW9uQXJndW1lbnRzICYgRW5hYmxlUGx1Z2luUGFyYW1zKTogUHJvbWlzZTxFbmFibGVQbHVnaW5SZXN1bHQ+IHtcbiAgaWYgKCFhcHAucGx1Z2lucy5pc0VuYWJsZWQoKSkge1xuICAgIGF3YWl0IGFwcC5wbHVnaW5zLnNldEVuYWJsZSh0cnVlKTtcbiAgfVxuXG4gIC8qXG4gICAqIEZvcmNlIGEgZ2VudWluZSByZWxvYWQgd2hlbiByZXRyeWluZy4gSWYgYSBwcmlvciBhdHRlbXB0IGxlZnQgdGhlIHBsdWdpbiBpblxuICAgKiB0aGUgZW5hYmxlZCBzZXQgYnV0IG5vdCBsb2FkZWQgKHRoZSBjb2xkLWJvb3QgcmFjZSksIGEgcGxhaW4gcmUtZW5hYmxlIGNhblxuICAgKiBzaG9ydC1jaXJjdWl0IG9uIHNvbWUgT2JzaWRpYW4gdmVyc2lvbnMgd2l0aG91dCByZS1hdHRlbXB0aW5nIHRoZSBsb2FkLlxuICAgKiBGdWxseSByZXNldCB0aGUgZW5hYmxlZCBzdGF0ZSBmaXJzdCBzbyB0aGUgYGVuYWJsZVBsdWdpbkFuZFNhdmVgIGJlbG93IGlzIGFcbiAgICogcmVhbCBmcmVzaCBlbmFibGUgKyBsb2FkLiBOby1vcCBvbiB0aGUgZmlyc3QgYXR0ZW1wdCAobm90IHlldCBlbmFibGVkKS5cbiAgICovXG4gIGlmIChhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpICYmICFPYmplY3QuaGFzT3duKGFwcC5wbHVnaW5zLnBsdWdpbnMsIHBsdWdpbklkKSkge1xuICAgIGF3YWl0IGFwcC5wbHVnaW5zLmRpc2FibGVQbHVnaW5BbmRTYXZlKHBsdWdpbklkKTtcbiAgfVxuXG4gIGxldCBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCAtLSBJbnRlbnRpb25hbCBtb25rZXktcGF0Y2g7IHJlc3RvcmVkIGluIGZpbmFsbHkuXG4gIGNvbnN0IG9yaWdMb2FkUGx1Z2luID0gYXBwLnBsdWdpbnMubG9hZFBsdWdpbjtcbiAgYXBwLnBsdWdpbnMubG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uIGxvYWRQbHVnaW4oaWQ6IHN0cmluZywgaXNVc2VyRW5hYmxlZD86IGJvb2xlYW4pOiBQcm9taXNlPFBsdWdpbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcmlnTG9hZFBsdWdpbi5jYWxsKHRoaXMsIGlkLCBpc1VzZXJFbmFibGVkKTtcbiAgICAgIGVycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCAtLSBBcHByb3ZlZCBkb3VibGUgY2FzdDogYF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIGlzIG91ciBpbnRlcm5hbCBXaW5kb3cgYXVnbWVudGF0aW9uLCBpbnRlbnRpb25hbGx5IGtlcHQgbG9jYWwgKG5vdCBkZWNsYXJlZCBnbG9iYWxseSkgdG8gYXZvaWQgbGVha2luZyBpbnRvIGNvbnN1bWVyIHR5cGVzLlxuICAgICAgY29uc3QgaG9sZGVyID0gZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIFBhcnRpYWw8SW50ZWdyYXRpb25UZXN0aW5nSG9sZGVyPjtcbiAgICAgIGVycm9yTWVzc2FnZSA9IGhvbGRlci5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy5lcnJvclRvU3RyaW5nKGVycm9yKSA/PyBTdHJpbmcoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIC8qXG4gICAqIExheWVyIDEgXHUyMDE0IGNhcHR1cmUgdGhlIHJlbmRlcmVyIGNvbnNvbGUgKyB1bmNhdWdodCBlcnJvcnMgZm9yIHRoZSBkdXJhdGlvbiBvZlxuICAgKiB0aGUgZW5hYmxlLiBJZiBPYnNpZGlhbiBzd2FsbG93cyB0aGUgbG9hZCBlcnJvciBiZWZvcmUgdGhlIG1vbmtleS1wYXRjaCBhYm92ZVxuICAgKiBzZWVzIGl0IChsZWF2aW5nIGBlcnJvck1lc3NhZ2VgIGVtcHR5KSwgdGhlIHJlYWwgY2F1c2UgaXMgdHlwaWNhbGx5IHN0aWxsXG4gICAqIGBjb25zb2xlLmVycm9yYCdkLCBzbyBjYXB0dXJpbmcgaXQgaGVyZSBzdXJmYWNlcyBpdCBpbiBwbGFjZSBvZiB0aGUgZ2VuZXJpY1xuICAgKiBmYWxsYmFjay4gV29ya3Mgb24gZGVza3RvcCBhbmQgQW5kcm9pZCBhbGlrZSBzaW5jZSB0aGlzIHdob2xlIGZ1bmN0aW9uIGlzXG4gICAqIHNlcmlhbGl6ZWQgYW5kIGluamVjdGVkIGludG8gdGhlIHJlbmRlcmVyLlxuICAgKi9cbiAgY29uc3QgY2FwdHVyZWRDb25zb2xlOiBzdHJpbmdbXSA9IFtdO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gQXBwcm92ZWQgZG91YmxlIGNhc3QsIHNhbWUgcmF0aW9uYWxlIGFzIGFib3ZlLlxuICBjb25zdCBmb3JtYXRIb2xkZXIgPSBnbG9iYWxUaGlzIGFzIHVua25vd24gYXMgUGFydGlhbDxJbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXI+O1xuICBmdW5jdGlvbiBmb3JtYXRBcmd1bWVudChhcmd1bWVudDogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHJldHVybiBmb3JtYXRIb2xkZXIuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8uZXJyb3JUb1N0cmluZyhhcmd1bWVudCkgPz8gU3RyaW5nKGFyZ3VtZW50KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBhcmd1bWVudDtcbiAgICB9XG4gICAgaWYgKGFyZ3VtZW50ID09PSB1bmRlZmluZWQgfHwgYXJndW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBTdHJpbmcoYXJndW1lbnQpO1xuICAgIH1cbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoYXJndW1lbnQpO1xuICAgIHJldHVybiBqc29uID8/IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCk7XG4gIH1cbiAgZnVuY3Rpb24gcmVjb3JkQ29uc29sZSguLi5pbnB1dDogdW5rbm93bltdKTogdm9pZCB7XG4gICAgY2FwdHVyZWRDb25zb2xlLnB1c2goaW5wdXQubWFwKChhcmd1bWVudCkgPT4gZm9ybWF0QXJndW1lbnQoYXJndW1lbnQpKS5qb2luKCcgJykpO1xuICB9XG4gIGNvbnN0IG9yaWdDb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICBjb25zdCBvcmlnQ29uc29sZVdhcm4gPSBjb25zb2xlLndhcm47XG4gIGNvbnNvbGUuZXJyb3IgPSAoLi4uaW5wdXQ6IHVua25vd25bXSk6IHZvaWQgPT4ge1xuICAgIHJlY29yZENvbnNvbGUoLi4uaW5wdXQpO1xuICAgIG9yaWdDb25zb2xlRXJyb3IuYXBwbHkoY29uc29sZSwgaW5wdXQpO1xuICB9O1xuICBjb25zb2xlLndhcm4gPSAoLi4uaW5wdXQ6IHVua25vd25bXSk6IHZvaWQgPT4ge1xuICAgIHJlY29yZENvbnNvbGUoLi4uaW5wdXQpO1xuICAgIG9yaWdDb25zb2xlV2Fybi5hcHBseShjb25zb2xlLCBpbnB1dCk7XG4gIH07XG4gIGZ1bmN0aW9uIG9uV2luZG93RXJyb3IoZXZlbnQ6IEVycm9yRXZlbnQpOiB2b2lkIHtcbiAgICBjYXB0dXJlZENvbnNvbGUucHVzaChldmVudC5lcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZm9ybWF0QXJndW1lbnQoZXZlbnQuZXJyb3IpIDogZXZlbnQubWVzc2FnZSk7XG4gIH1cbiAgZnVuY3Rpb24gb25VbmhhbmRsZWRSZWplY3Rpb24oZXZlbnQ6IFByb21pc2VSZWplY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIGNhcHR1cmVkQ29uc29sZS5wdXNoKGZvcm1hdEFyZ3VtZW50KGV2ZW50LnJlYXNvbikpO1xuICB9XG4gIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbldpbmRvd0Vycm9yKTtcbiAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCBvblVuaGFuZGxlZFJlamVjdGlvbik7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAucGx1Z2lucy5lbmFibGVQbHVnaW5BbmRTYXZlKHBsdWdpbklkKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBJbnRlbnRpb25hbCByZXN0b3JlIG9mIG1vbmtleS1wYXRjaC5cbiAgICBhcHAucGx1Z2lucy5sb2FkUGx1Z2luID0gb3JpZ0xvYWRQbHVnaW47XG4gICAgY29uc29sZS5lcnJvciA9IG9yaWdDb25zb2xlRXJyb3I7XG4gICAgY29uc29sZS53YXJuID0gb3JpZ0NvbnNvbGVXYXJuO1xuICAgIGdsb2JhbFRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbldpbmRvd0Vycm9yKTtcbiAgICBnbG9iYWxUaGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsIG9uVW5oYW5kbGVkUmVqZWN0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IGlzTG9hZGVkID0gT2JqZWN0Lmhhc093bihhcHAucGx1Z2lucy5wbHVnaW5zLCBwbHVnaW5JZCk7XG5cbiAgbGV0IHJlbmRlcmVyQ29uc29sZUVycm9yczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZiAoIWVycm9yTWVzc2FnZSAmJiAhaXNMb2FkZWQpIHtcbiAgICBjb25zdCBqb2luZWQgPSBjYXB0dXJlZENvbnNvbGUuam9pbignXFxuJykudHJpbSgpO1xuICAgIHJlbmRlcmVyQ29uc29sZUVycm9ycyA9IGpvaW5lZCB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVycm9yTWVzc2FnZSxcbiAgICBpc0VuYWJsZWQ6IGFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZCksXG4gICAgaXNMb2FkZWQsXG4gICAgcmVuZGVyZXJDb25zb2xlRXJyb3JzXG4gIH07XG59XG5cbi8qKlxuICogVGhlIGdlbmVyaWMgbGFzdC1yZXNvcnQgbWVzc2FnZSBzaG93biB3aGVuIGEgcGx1Z2luIGlzIGluIHRoZSBlbmFibGVkIHNldCBidXRcbiAqIG5vdCBsb2FkZWQgYW5kIG5vIHJlYWwgZXJyb3IgY291bGQgYmUgY2FwdHVyZWQgKG5laXRoZXIgdGhlIGBsb2FkUGx1Z2luYFxuICogbW9ua2V5LXBhdGNoIG5vciB0aGUgcmVuZGVyZXIgY29uc29sZSBub3IsIG9uIEFuZHJvaWQsIGBhZGIgbG9nY2F0YCBzdXJmYWNlZCBhXG4gKiBjYXVzZSkuXG4gKlxuICogSG9zdC1zaWRlIGhlbHBlciBcdTIwMTQgdXNlZCBieSB0aGUgc2V0dXAgb3JjaGVzdHJhdGlvbiB0byBjb21wb3NlIHRoZSBmaW5hbFxuICogZmFpbHVyZSBtZXNzYWdlLCBzbyB0aGUgcmVuZGVyZXItaW5qZWN0ZWQge0BsaW5rIGVuYWJsZVBsdWdpbldpdGhFcnJvckNhcHR1cmV9XG4gKiBzdGF5cyBzZWxmLWNvbnRhaW5lZC5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgSUQgb2YgdGhlIHBsdWdpbiB0aGF0IGZhaWxlZCB0byBsb2FkLlxuICogQHJldHVybnMgVGhlIGdlbmVyaWMgZmFpbHVyZSBtZXNzYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VuZXJpY1BsdWdpbkxvYWRGYWlsdXJlTWVzc2FnZShwbHVnaW5JZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBQbHVnaW4gXCIke3BsdWdpbklkfVwiIGlzIGluIHRoZSBlbmFibGVkIHNldCBidXQgbm90IGxvYWRlZC4gYFxuICAgICsgJ09ic2lkaWFuIG1heSBoYXZlIGNhdWdodCB0aGUgZXJyb3IgYmVmb3JlIHRoZSBtb25rZXktcGF0Y2guICdcbiAgICArICdDaGVjayB0aGUgT2JzaWRpYW4gY29uc29sZSBmb3IgZGV0YWlscy4nO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBK0VBLGVBQXNCLDZCQUE2QixFQUFFLEtBQUssU0FBUyxHQUFzRTtBQUN2SSxNQUFJLENBQUMsSUFBSSxRQUFRLFVBQVUsR0FBRztBQUM1QixVQUFNLElBQUksUUFBUSxVQUFVLElBQUk7QUFBQSxFQUNsQztBQVNBLE1BQUksSUFBSSxRQUFRLGVBQWUsSUFBSSxRQUFRLEtBQUssQ0FBQyxPQUFPLE9BQU8sSUFBSSxRQUFRLFNBQVMsUUFBUSxHQUFHO0FBQzdGLFVBQU0sSUFBSSxRQUFRLHFCQUFxQixRQUFRO0FBQUEsRUFDakQ7QUFFQSxNQUFJO0FBRUosUUFBTSxpQkFBaUIsSUFBSSxRQUFRO0FBQ25DLE1BQUksUUFBUSxhQUFhLGVBQWUsV0FBVyxJQUFZLGVBQTBDO0FBQ3ZHLFFBQUk7QUFDRixZQUFNLFNBQVMsTUFBTSxlQUFlLEtBQUssTUFBTSxJQUFJLGFBQWE7QUFDaEUscUJBQWU7QUFDZixhQUFPO0FBQUEsSUFDVCxTQUFTLE9BQU87QUFFZCxZQUFNLFNBQVM7QUFDZixxQkFBZSxPQUFPLDhCQUE4QixjQUFjLEtBQUssS0FBSyxPQUFPLEtBQUs7QUFDeEYsWUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBVUEsUUFBTSxrQkFBNEIsQ0FBQztBQUVuQyxRQUFNLGVBQWU7QUFDckIsV0FBUyxlQUFlLFVBQTJCO0FBQ2pELFFBQUksb0JBQW9CLE9BQU87QUFDN0IsYUFBTyxhQUFhLDhCQUE4QixjQUFjLFFBQVEsS0FBSyxPQUFPLFFBQVE7QUFBQSxJQUM5RjtBQUNBLFFBQUksT0FBTyxhQUFhLFVBQVU7QUFDaEMsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLGFBQWEsVUFBYSxhQUFhLE1BQU07QUFDL0MsYUFBTyxPQUFPLFFBQVE7QUFBQSxJQUN4QjtBQUNBLFVBQU0sT0FBTyxLQUFLLFVBQVUsUUFBUTtBQUNwQyxXQUFPLFFBQVEsT0FBTyxVQUFVLFNBQVMsS0FBSyxRQUFRO0FBQUEsRUFDeEQ7QUFDQSxXQUFTLGlCQUFpQixPQUF3QjtBQUNoRCxvQkFBZ0IsS0FBSyxNQUFNLElBQUksQ0FBQyxhQUFhLGVBQWUsUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFBQSxFQUNsRjtBQUNBLFFBQU0sbUJBQW1CLFFBQVE7QUFDakMsUUFBTSxrQkFBa0IsUUFBUTtBQUNoQyxVQUFRLFFBQVEsSUFBSSxVQUEyQjtBQUM3QyxrQkFBYyxHQUFHLEtBQUs7QUFDdEIscUJBQWlCLE1BQU0sU0FBUyxLQUFLO0FBQUEsRUFDdkM7QUFDQSxVQUFRLE9BQU8sSUFBSSxVQUEyQjtBQUM1QyxrQkFBYyxHQUFHLEtBQUs7QUFDdEIsb0JBQWdCLE1BQU0sU0FBUyxLQUFLO0FBQUEsRUFDdEM7QUFDQSxXQUFTLGNBQWMsT0FBeUI7QUFDOUMsb0JBQWdCLEtBQUssTUFBTSxpQkFBaUIsUUFBUSxlQUFlLE1BQU0sS0FBSyxJQUFJLE1BQU0sT0FBTztBQUFBLEVBQ2pHO0FBQ0EsV0FBUyxxQkFBcUIsT0FBb0M7QUFDaEUsb0JBQWdCLEtBQUssZUFBZSxNQUFNLE1BQU0sQ0FBQztBQUFBLEVBQ25EO0FBQ0EsYUFBVyxpQkFBaUIsU0FBUyxhQUFhO0FBQ2xELGFBQVcsaUJBQWlCLHNCQUFzQixvQkFBb0I7QUFFdEUsTUFBSTtBQUNGLFVBQU0sSUFBSSxRQUFRLG9CQUFvQixRQUFRO0FBQUEsRUFDaEQsVUFBRTtBQUVBLFFBQUksUUFBUSxhQUFhO0FBQ3pCLFlBQVEsUUFBUTtBQUNoQixZQUFRLE9BQU87QUFDZixlQUFXLG9CQUFvQixTQUFTLGFBQWE7QUFDckQsZUFBVyxvQkFBb0Isc0JBQXNCLG9CQUFvQjtBQUFBLEVBQzNFO0FBRUEsUUFBTSxXQUFXLE9BQU8sT0FBTyxJQUFJLFFBQVEsU0FBUyxRQUFRO0FBRTVELE1BQUk7QUFDSixNQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVTtBQUM5QixVQUFNLFNBQVMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFLEtBQUs7QUFDL0MsNEJBQXdCLFVBQVU7QUFBQSxFQUNwQztBQUVBLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQSxXQUFXLElBQUksUUFBUSxlQUFlLElBQUksUUFBUTtBQUFBLElBQ2xEO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFDRjtBQWVPLFNBQVMsbUNBQW1DLFVBQTBCO0FBQzNFLFNBQU8sV0FBVyxRQUFRO0FBRzVCOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -6,12 +6,12 @@
6
6
  import type { App, Editor, Modifier, TFile } from 'obsidian';
7
7
  import type * as obsidian from 'obsidian';
8
8
  import type { Promisable } from 'type-fest';
9
- import type { ContextArgs, ContextId } from './context-id.mjs';
9
+ import type { ContextArguments, ContextId } from './context-id.mjs';
10
10
  import type { ObsidianTransport } from './transport.mjs';
11
11
  /**
12
12
  * Common arguments automatically provided to every {@link evalInObsidian} callback.
13
13
  */
14
- export interface CommonArgs {
14
+ export interface CommonArguments {
15
15
  /**
16
16
  * The Obsidian {@link App} instance.
17
17
  */
@@ -34,7 +34,7 @@ export interface CommonArgs {
34
34
  obsidianModule: typeof obsidian;
35
35
  }
36
36
  /**
37
- * Parameters for {@link CommonArgs.createNote}.
37
+ * Parameters for {@link CommonArguments.createNote}.
38
38
  */
39
39
  export interface CreateNoteParams {
40
40
  /**
@@ -50,12 +50,11 @@ export interface CreateNoteParams {
50
50
  /**
51
51
  * Parameters for {@link evalInObsidian}.
52
52
  */
53
- export interface EvalInObsidianParams<Args extends GenericObject, Result, TContextId extends ContextId<unknown> | undefined = undefined> {
53
+ export interface EvalInObsidianParams<Input extends GenericObject, Result, TContextId extends ContextId<unknown> | undefined = undefined> {
54
54
  /**
55
- * Additional arguments to pass to the function. Values may include functions —
56
- * they are serialized via `toString()`.
55
+ * The function to evaluate in the Obsidian context.
57
56
  */
58
- readonly args?: Args;
57
+ callback(input: CommonArguments & ContextArguments<TContextId> & Input): Promisable<Result>;
59
58
  /**
60
59
  * A {@link ContextId} linking this call to a persistent store on `window`
61
60
  * in the Obsidian process. The callback receives a typed `context` object
@@ -65,9 +64,10 @@ export interface EvalInObsidianParams<Args extends GenericObject, Result, TConte
65
64
  */
66
65
  readonly contextId?: TContextId;
67
66
  /**
68
- * The function to evaluate in the Obsidian context.
67
+ * Additional arguments to pass to the function. Values may include functions —
68
+ * they are serialized via `toString()`.
69
69
  */
70
- fn(args: Args & CommonArgs & ContextArgs<TContextId>): Promisable<Result>;
70
+ readonly input?: Input;
71
71
  /**
72
72
  * Skips pre-flight checks (vault registration, CLI availability).
73
73
  * Used internally by vault registration functions.
@@ -90,7 +90,7 @@ export interface EvalInObsidianParams<Args extends GenericObject, Result, TConte
90
90
  */
91
91
  export type GenericObject = Record<string, unknown>;
92
92
  /**
93
- * Parameters for {@link CommonArgs.hoverElement}.
93
+ * Parameters for {@link CommonArguments.hoverElement}.
94
94
  */
95
95
  export interface HoverElementParams {
96
96
  /**
@@ -102,7 +102,7 @@ export interface HoverElementParams {
102
102
  }
103
103
  /**
104
104
  * The shared library bag injected into every {@link evalInObsidian} callback as
105
- * {@link CommonArgs.lib}.
105
+ * {@link CommonArguments.lib}.
106
106
  *
107
107
  * Two layers compose into this one bag. The **base** — the harness-provided
108
108
  * renderer-driving helpers declared below (the trusted-input primitives and
@@ -281,7 +281,7 @@ export interface Lib {
281
281
  waitUntil(this: void, params: WaitUntilParams): Promise<void>;
282
282
  }
283
283
  /**
284
- * Parameters for {@link CommonArgs.moveMouse}.
284
+ * Parameters for {@link CommonArguments.moveMouse}.
285
285
  */
286
286
  export interface MoveMouseParams {
287
287
  /**
@@ -294,7 +294,7 @@ export interface MoveMouseParams {
294
294
  readonly y: number;
295
295
  }
296
296
  /**
297
- * Parameters for {@link CommonArgs.pressKey}.
297
+ * Parameters for {@link CommonArguments.pressKey}.
298
298
  */
299
299
  export interface PressKeyParams {
300
300
  /**
@@ -303,7 +303,7 @@ export interface PressKeyParams {
303
303
  * (`'Up'` / `'Down'` / `'Left'` / `'Right'`), or a printable character
304
304
  * (`'a'`, `'1'`). The produced character (when the key inserts text) is the
305
305
  * literal `key` value; case-correct text belongs to
306
- * {@link CommonArgs.typeIntoEditor}, not a key-press primitive.
306
+ * {@link CommonArguments.typeIntoEditor}, not a key-press primitive.
307
307
  */
308
308
  readonly key: string;
309
309
  /**
@@ -317,7 +317,7 @@ export interface PressKeyParams {
317
317
  readonly modifiers?: readonly Modifier[];
318
318
  }
319
319
  /**
320
- * Parameters for {@link CommonArgs.typeIntoEditor}.
320
+ * Parameters for {@link CommonArguments.typeIntoEditor}.
321
321
  */
322
322
  export interface TypeIntoEditorParams {
323
323
  /**
@@ -326,13 +326,13 @@ export interface TypeIntoEditorParams {
326
326
  */
327
327
  readonly editor: Editor;
328
328
  /**
329
- * The text to type. Each code point is pressed via {@link CommonArgs.pressKey}
329
+ * The text to type. Each code point is pressed via {@link CommonArguments.pressKey}
330
330
  * (a trusted `keyDown` → `char` → `keyUp`), exactly as a real user typing.
331
331
  */
332
332
  readonly text: string;
333
333
  }
334
334
  /**
335
- * Parameters for {@link CommonArgs.unhoverElement}.
335
+ * Parameters for {@link CommonArguments.unhoverElement}.
336
336
  */
337
337
  export interface UnhoverElementParams {
338
338
  /**
@@ -344,7 +344,7 @@ export interface UnhoverElementParams {
344
344
  readonly element: HTMLElement;
345
345
  }
346
346
  /**
347
- * Parameters for {@link CommonArgs.waitUntil}.
347
+ * Parameters for {@link CommonArguments.waitUntil}.
348
348
  */
349
349
  export interface WaitUntilParams {
350
350
  /**
@@ -377,15 +377,15 @@ export interface WaitUntilParams {
377
377
  * Evaluates a function inside the running Obsidian instance
378
378
  * via the active transport and returns the parsed result.
379
379
  *
380
- * The function receives an args object that includes `app`, `obsidianModule`,
381
- * `context`, and any additional `args` passed by the caller.
380
+ * The function receives an input object that includes `app`, `obsidianModule`,
381
+ * `context`, and any additional `input` passed by the caller.
382
382
  * It is serialized via `toString()` and invoked as an IIFE.
383
383
  * The function must be self-contained — closures over local variables will not work.
384
- * Pass any needed values as `args` — they are JSON-serialized and deserialized on the Obsidian side.
384
+ * Pass any needed values as `input` — they are JSON-serialized and deserialized on the Obsidian side.
385
385
  *
386
386
  * The result is `JSON.stringify`'d on the Obsidian side and parsed back.
387
387
  *
388
388
  * @param params - The parameters for the function to evaluate.
389
- * @returns A {@link Promise} that resolves to the return value of `fn`.
389
+ * @returns A {@link Promise} that resolves to the return value of `callback`.
390
390
  */
391
- export declare function evalInObsidian<Args extends GenericObject, Result, TContextId extends ContextId<unknown> | undefined = undefined>(params: EvalInObsidianParams<Args, Result, TContextId>): Promise<Result>;
391
+ export declare function evalInObsidian<Input extends GenericObject, Result, TContextId extends ContextId<unknown> | undefined = undefined>(params: EvalInObsidianParams<Input, Result, TContextId>): Promise<Result>;