obsidian-integration-testing 1.1.2 → 1.2.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 (81) hide show
  1. package/README.md +238 -14
  2. package/dist/lib/cjs/context-id.cjs +1 -1
  3. package/dist/lib/cjs/context-id.d.cts +1 -1
  4. package/dist/lib/cjs/enable-plugin.cjs +54 -0
  5. package/dist/lib/cjs/enable-plugin.d.cts +44 -0
  6. package/dist/lib/cjs/exec.cjs +4 -4
  7. package/dist/lib/cjs/exec.d.cts +8 -8
  8. package/dist/lib/cjs/function-expression.cjs +1 -1
  9. package/dist/lib/cjs/function-expression.d.cts +1 -1
  10. package/dist/lib/cjs/index.cjs +13 -1
  11. package/dist/lib/cjs/index.d.cts +9 -1
  12. package/dist/lib/cjs/integration-global-setup.cjs +19 -6
  13. package/dist/lib/cjs/integration-global-setup.d.cts +1 -6
  14. package/dist/lib/cjs/json-with-functions.cjs +1 -1
  15. package/dist/lib/cjs/json-with-functions.d.cts +1 -1
  16. package/dist/lib/cjs/noop.cjs +1 -1
  17. package/dist/lib/cjs/noop.d.cts +1 -1
  18. package/dist/lib/cjs/obsidian-cli.cjs +10 -76
  19. package/dist/lib/cjs/obsidian-cli.d.cts +9 -3
  20. package/dist/lib/cjs/obsidian-config.cjs +1 -1
  21. package/dist/lib/cjs/obsidian-config.d.cts +1 -1
  22. package/dist/lib/cjs/temp-vault.cjs +47 -5
  23. package/dist/lib/cjs/temp-vault.d.cts +19 -1
  24. package/dist/lib/cjs/transport-appium.cjs +232 -0
  25. package/dist/lib/cjs/transport-appium.d.cts +164 -0
  26. package/dist/lib/cjs/transport-desktop-cdp.cjs +390 -0
  27. package/dist/lib/cjs/transport-desktop-cdp.d.cts +158 -0
  28. package/dist/lib/cjs/transport-desktop-cli.cjs +221 -0
  29. package/dist/lib/cjs/transport-desktop-cli.d.cts +65 -0
  30. package/dist/lib/cjs/transport-factory.cjs +94 -0
  31. package/dist/lib/cjs/transport-factory.d.cts +25 -0
  32. package/dist/lib/cjs/transport-options.cjs +17 -0
  33. package/dist/lib/cjs/transport-options.d.cts +100 -0
  34. package/dist/lib/cjs/transport.cjs +17 -0
  35. package/dist/lib/cjs/transport.d.cts +86 -0
  36. package/dist/lib/cjs/type-guards.cjs +1 -1
  37. package/dist/lib/cjs/type-guards.d.cts +1 -1
  38. package/dist/lib/cjs/vault-registry.cjs +7 -56
  39. package/dist/lib/cjs/vault-registry.d.cts +3 -5
  40. package/dist/lib/esm/context-id.d.mts +1 -1
  41. package/dist/lib/esm/context-id.mjs +1 -1
  42. package/dist/lib/esm/enable-plugin.d.mts +44 -0
  43. package/dist/lib/esm/enable-plugin.mjs +30 -0
  44. package/dist/lib/esm/exec.d.mts +8 -8
  45. package/dist/lib/esm/exec.mjs +4 -4
  46. package/dist/lib/esm/function-expression.d.mts +1 -1
  47. package/dist/lib/esm/function-expression.mjs +1 -1
  48. package/dist/lib/esm/index.d.mts +9 -1
  49. package/dist/lib/esm/index.mjs +9 -1
  50. package/dist/lib/esm/integration-global-setup.d.mts +1 -6
  51. package/dist/lib/esm/integration-global-setup.mjs +19 -6
  52. package/dist/lib/esm/json-with-functions.d.mts +1 -1
  53. package/dist/lib/esm/json-with-functions.mjs +1 -1
  54. package/dist/lib/esm/noop.d.mts +1 -1
  55. package/dist/lib/esm/noop.mjs +1 -1
  56. package/dist/lib/esm/obsidian-cli.d.mts +9 -3
  57. package/dist/lib/esm/obsidian-cli.mjs +10 -80
  58. package/dist/lib/esm/obsidian-config.d.mts +1 -1
  59. package/dist/lib/esm/obsidian-config.mjs +1 -1
  60. package/dist/lib/esm/temp-vault.d.mts +19 -1
  61. package/dist/lib/esm/temp-vault.mjs +54 -7
  62. package/dist/lib/esm/transport-appium.d.mts +164 -0
  63. package/dist/lib/esm/transport-appium.mjs +208 -0
  64. package/dist/lib/esm/transport-desktop-cdp.d.mts +158 -0
  65. package/dist/lib/esm/transport-desktop-cdp.mjs +356 -0
  66. package/dist/lib/esm/transport-desktop-cli.d.mts +65 -0
  67. package/dist/lib/esm/transport-desktop-cli.mjs +190 -0
  68. package/dist/lib/esm/transport-factory.d.mts +25 -0
  69. package/dist/lib/esm/transport-factory.mjs +69 -0
  70. package/dist/lib/esm/transport-options.d.mts +100 -0
  71. package/dist/lib/esm/transport-options.mjs +1 -0
  72. package/dist/lib/esm/transport.d.mts +86 -0
  73. package/dist/lib/esm/transport.mjs +1 -0
  74. package/dist/lib/esm/type-guards.d.mts +1 -1
  75. package/dist/lib/esm/type-guards.mjs +1 -1
  76. package/dist/lib/esm/vault-registry.d.mts +3 -5
  77. package/dist/lib/esm/vault-registry.mjs +7 -56
  78. package/dist/obsidian-integration-testing-1.2.0.tgz +0 -0
  79. package/package.json +11 -2
  80. package/scripts/postinstall.mjs +29 -0
  81. package/dist/obsidian-integration-testing-1.1.2.tgz +0 -0
@@ -1,15 +1,10 @@
1
1
  /**
2
- * @packageDocumentation
2
+ * @file
3
3
  *
4
4
  * Contains the global setup and teardown functions for integration tests.
5
5
  */
6
6
  import type { TestProject } from 'vitest/node';
7
7
  import { TempVault } from './temp-vault.mjs';
8
- declare module 'vitest' {
9
- interface ProvidedContext {
10
- tempVaultPath: string;
11
- }
12
- }
13
8
  /**
14
9
  * Returns the temporary vault provided by the global setup.
15
10
  *
@@ -8,8 +8,10 @@ import {
8
8
  } from "node:fs/promises";
9
9
  import { join } from "node:path";
10
10
  import { inject } from "vitest";
11
+ import { enablePluginWithErrorCapture } from "./enable-plugin.mjs";
11
12
  import { evalInObsidian } from "./obsidian-cli.mjs";
12
13
  import { TempVault } from "./temp-vault.mjs";
14
+ import { createTransportFromOptions } from "./transport-factory.mjs";
13
15
  function getTempVault() {
14
16
  const tempVaultPath = inject("tempVaultPath");
15
17
  return new TempVault(tempVaultPath);
@@ -21,11 +23,19 @@ const OBSIDIAN_CONFIG_DIR = ".obsidian";
21
23
  const PLUGINS_DIR = "plugins";
22
24
  const COMMUNITY_PLUGINS_JSON = "community-plugins.json";
23
25
  let tempVault;
26
+ let transport;
24
27
  async function setup(project) {
28
+ const transportOptions = project.config.environmentOptions["obsidianTransport"];
29
+ transport = await createTransportFromOptions(transportOptions);
25
30
  const projectRoot = findProjectRoot();
26
31
  const distPath = await resolveDistPath(projectRoot);
27
32
  const manifestJson = JSON.parse(await readFile(join(distPath, "manifest.json"), "utf-8"));
28
33
  const pluginId = manifestJson.id;
34
+ if (transport.isMobile && manifestJson.isDesktopOnly) {
35
+ throw new Error(
36
+ `Plugin "${pluginId}" has isDesktopOnly: true in manifest.json. Mobile integration tests cannot run for desktop-only plugins.`
37
+ );
38
+ }
29
39
  const mainJs = join(distPath, MAIN_JS);
30
40
  const buildStat = await stat(mainJs);
31
41
  console.warn(`Using ${distPath} (${buildStat.mtime.toISOString()}). If outdated, rebuild.`);
@@ -34,20 +44,23 @@ async function setup(project) {
34
44
  await mkdir(pluginDir, { recursive: true });
35
45
  await cp(distPath, pluginDir, { recursive: true });
36
46
  await writeFile(join(tempVault.path, OBSIDIAN_CONFIG_DIR, COMMUNITY_PLUGINS_JSON), JSON.stringify([pluginId]));
47
+ await tempVault.syncToDevice();
37
48
  await tempVault.register();
38
- await evalInObsidian({
49
+ const { errorMessage } = await evalInObsidian({
39
50
  args: { pluginId },
40
- // eslint-disable-next-line no-shadow -- No actual shadowing as the function is executed externally.
41
- fn: async ({ app, pluginId: pluginId2 }) => {
42
- await app.plugins.enablePluginAndSave(pluginId2);
43
- },
51
+ fn: enablePluginWithErrorCapture,
44
52
  shouldSkipPreflightChecks: true,
45
53
  vaultPath: tempVault.path
46
54
  });
55
+ if (errorMessage) {
56
+ throw new Error(`Plugin "${pluginId}" failed to load: ${errorMessage}`);
57
+ }
58
+ project.provide("obsidianTransport", transportOptions);
47
59
  project.provide("tempVaultPath", tempVault.path);
48
60
  }
49
61
  async function teardown() {
50
62
  await tempVault.dispose();
63
+ await transport.dispose?.();
51
64
  }
52
65
  function findProjectRoot() {
53
66
  let dir = process.cwd();
@@ -85,4 +98,4 @@ export {
85
98
  setup,
86
99
  teardown
87
100
  };
88
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uLWdsb2JhbC1zZXR1cC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBDb250YWlucyB0aGUgZ2xvYmFsIHNldHVwIGFuZCB0ZWFyZG93biBmdW5jdGlvbnMgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk1hbmlmZXN0IH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUZXN0UHJvamVjdCB9IGZyb20gJ3ZpdGVzdC9ub2RlJztcblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIG1rZGlyLFxuICByZWFkRmlsZSxcbiAgc3RhdCxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vb2JzaWRpYW4tY2xpLm1qcyc7XG5pbXBvcnQgeyBUZW1wVmF1bHQgfSBmcm9tICcuL3RlbXAtdmF1bHQubWpzJztcblxuZGVjbGFyZSBtb2R1bGUgJ3ZpdGVzdCcge1xuICBpbnRlcmZhY2UgUHJvdmlkZWRDb250ZXh0IHtcbiAgICB0ZW1wVmF1bHRQYXRoOiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0ZW1wb3JhcnkgdmF1bHQgcHJvdmlkZWQgYnkgdGhlIGdsb2JhbCBzZXR1cC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdGVtcG9yYXJ5IHZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcFZhdWx0KCk6IFRlbXBWYXVsdCB7XG4gIGNvbnN0IHRlbXBWYXVsdFBhdGggPSBpbmplY3QoJ3RlbXBWYXVsdFBhdGgnKTtcbiAgcmV0dXJuIG5ldyBUZW1wVmF1bHQodGVtcFZhdWx0UGF0aCk7XG59XG5cbmNvbnN0IERJU1RfREVWID0gJ2Rpc3QvZGV2JztcbmNvbnN0IERJU1RfQlVJTEQgPSAnZGlzdC9idWlsZCc7XG5jb25zdCBNQUlOX0pTID0gJ21haW4uanMnO1xuY29uc3QgT0JTSURJQU5fQ09ORklHX0RJUiA9ICcub2JzaWRpYW4nO1xuY29uc3QgUExVR0lOU19ESVIgPSAncGx1Z2lucyc7XG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19KU09OID0gJ2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuXG5sZXQgdGVtcFZhdWx0OiBUZW1wVmF1bHQ7XG5cbi8qKlxuICogVml0ZXN0IGdsb2JhbCBzZXR1cCBmdW5jdGlvbi5cbiAqXG4gKiBDb3BpZXMgdGhlIGJ1aWx0IHBsdWdpbiBpbnRvIGEgdGVtcG9yYXJ5IHZhdWx0LCBlbmFibGVzIGl0IHZpYSB0aGUgT2JzaWRpYW4gQ0xJLFxuICogYW5kIHByb3ZpZGVzIGB0ZW1wVmF1bHRQYXRoYCB0byB0ZXN0cy5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdCAtIFRoZSBWaXRlc3QgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwKHByb2plY3Q6IFRlc3RQcm9qZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb2plY3RSb290ID0gZmluZFByb2plY3RSb290KCk7XG4gIGNvbnN0IGRpc3RQYXRoID0gYXdhaXQgcmVzb2x2ZURpc3RQYXRoKHByb2plY3RSb290KTtcbiAgY29uc3QgbWFuaWZlc3RKc29uID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShqb2luKGRpc3RQYXRoLCAnbWFuaWZlc3QuanNvbicpLCAndXRmLTgnKSkgYXMgUGx1Z2luTWFuaWZlc3Q7XG4gIGNvbnN0IHBsdWdpbklkID0gbWFuaWZlc3RKc29uLmlkO1xuXG4gIGNvbnN0IG1haW5KcyA9IGpvaW4oZGlzdFBhdGgsIE1BSU5fSlMpO1xuICBjb25zdCBidWlsZFN0YXQgPSBhd2FpdCBzdGF0KG1haW5Kcyk7XG5cbiAgY29uc29sZS53YXJuKGBVc2luZyAke2Rpc3RQYXRofSAoJHtidWlsZFN0YXQubXRpbWUudG9JU09TdHJpbmcoKX0pLiBJZiBvdXRkYXRlZCwgcmVidWlsZC5gKTtcblxuICB0ZW1wVmF1bHQgPSBuZXcgVGVtcFZhdWx0KCk7XG4gIGNvbnN0IHBsdWdpbkRpciA9IGpvaW4odGVtcFZhdWx0LnBhdGgsIE9CU0lESUFOX0NPTkZJR19ESVIsIFBMVUdJTlNfRElSLCBwbHVnaW5JZCk7XG4gIGF3YWl0IG1rZGlyKHBsdWdpbkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IGNwKGRpc3RQYXRoLCBwbHVnaW5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB3cml0ZUZpbGUoam9pbih0ZW1wVmF1bHQucGF0aCwgT0JTSURJQU5fQ09ORklHX0RJUiwgQ09NTVVOSVRZX1BMVUdJTlNfSlNPTiksIEpTT04uc3RyaW5naWZ5KFtwbHVnaW5JZF0pKTtcbiAgYXdhaXQgdGVtcFZhdWx0LnJlZ2lzdGVyKCk7XG5cbiAgYXdhaXQgZXZhbEluT2JzaWRpYW4oe1xuICAgIGFyZ3M6IHsgcGx1Z2luSWQgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93IC0tIE5vIGFjdHVhbCBzaGFkb3dpbmcgYXMgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGV4dGVybmFsbHkuXG4gICAgZm46IGFzeW5jICh7IGFwcCwgcGx1Z2luSWQgfSkgPT4ge1xuICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG4gICAgfSxcbiAgICBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzOiB0cnVlLFxuICAgIHZhdWx0UGF0aDogdGVtcFZhdWx0LnBhdGhcbiAgfSk7XG5cbiAgcHJvamVjdC5wcm92aWRlKCd0ZW1wVmF1bHRQYXRoJywgdGVtcFZhdWx0LnBhdGgpO1xufVxuXG4vKipcbiAqIFZpdGVzdCBnbG9iYWwgdGVhcmRvd24gZnVuY3Rpb24uXG4gKlxuICogUmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IHZhdWx0IGNyZWF0ZWQgZHVyaW5nIHNldHVwLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVhcmRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHRlbXBWYXVsdC5kaXNwb3NlKCk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIHByb2plY3Qgcm9vdCBieSB3YWxraW5nIHVwIGZyb20gYHByb2Nlc3MuY3dkKClgIGxvb2tpbmcgZm9yIGBwYWNrYWdlLmpzb25gLlxuICpcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbmZ1bmN0aW9uIGZpbmRQcm9qZWN0Um9vdCgpOiBzdHJpbmcge1xuICBsZXQgZGlyID0gcHJvY2Vzcy5jd2QoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBMb29wIHRlcm1pbmF0ZXMgYXQgZmlsZXN5c3RlbSByb290LlxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChleGlzdHNTeW5jKGpvaW4oZGlyLCAncGFja2FnZS5qc29uJykpKSB7XG4gICAgICByZXR1cm4gZGlyO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBqb2luKGRpciwgJy4uJyk7XG4gICAgaWYgKHBhcmVudCA9PT0gZGlyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHByb2plY3Qgcm9vdCAobm8gcGFja2FnZS5qc29uIGZvdW5kKS4nKTtcbiAgICB9XG4gICAgZGlyID0gcGFyZW50O1xuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGRpc3QgcGF0aCB0byB1c2UgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICpcbiAqIFBpY2tzIHdoaWNoZXZlciBvZiBgZGlzdC9kZXZgIGFuZCBgZGlzdC9idWlsZGAgaGFzIGEgbmV3ZXIgYG1haW4uanNgLlxuICogSWYgb25seSBvbmUgZXhpc3RzLCB0aGF0IG9uZSBpcyB1c2VkLiBUaHJvd3MgaWYgbmVpdGhlciBleGlzdHMuXG4gKlxuICogQHBhcmFtIHByb2plY3RSb290IC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3Qgcm9vdC5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjaG9zZW4gZGlzdCBmb2xkZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVEaXN0UGF0aChwcm9qZWN0Um9vdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGV2UGF0aCA9IGpvaW4ocHJvamVjdFJvb3QsIERJU1RfREVWKTtcbiAgY29uc3QgYnVpbGRQYXRoID0gam9pbihwcm9qZWN0Um9vdCwgRElTVF9CVUlMRCk7XG4gIGNvbnN0IGRldk1haW5KcyA9IGpvaW4oZGV2UGF0aCwgTUFJTl9KUyk7XG4gIGNvbnN0IGJ1aWxkTWFpbkpzID0gam9pbihidWlsZFBhdGgsIE1BSU5fSlMpO1xuICBjb25zdCBkZXZTdGF0ID0gZXhpc3RzU3luYyhkZXZNYWluSnMpID8gYXdhaXQgc3RhdChkZXZNYWluSnMpIDogbnVsbDtcbiAgY29uc3QgYnVpbGRTdGF0ID0gZXhpc3RzU3luYyhidWlsZE1haW5KcykgPyBhd2FpdCBzdGF0KGJ1aWxkTWFpbkpzKSA6IG51bGw7XG5cbiAgaWYgKGRldlN0YXQgJiYgYnVpbGRTdGF0KSB7XG4gICAgcmV0dXJuIGRldlN0YXQubXRpbWUgPiBidWlsZFN0YXQubXRpbWUgPyBkZXZQYXRoIDogYnVpbGRQYXRoO1xuICB9XG5cbiAgaWYgKGRldlN0YXQpIHtcbiAgICByZXR1cm4gZGV2UGF0aDtcbiAgfVxuXG4gIGlmIChidWlsZFN0YXQpIHtcbiAgICByZXR1cm4gYnVpbGRQYXRoO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBidWlsZCBmb3VuZC4gUnVuIGBucG0gcnVuIGJ1aWxkYCBvciBgbnBtIHJ1biBkZXZgIGZpcnN0LicpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBV0EsU0FBUyxrQkFBa0I7QUFDM0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFlBQVk7QUFDckIsU0FBUyxjQUFjO0FBRXZCLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsaUJBQWlCO0FBYW5CLFNBQVMsZUFBMEI7QUFDeEMsUUFBTSxnQkFBZ0IsT0FBTyxlQUFlO0FBQzVDLFNBQU8sSUFBSSxVQUFVLGFBQWE7QUFDcEM7QUFFQSxNQUFNLFdBQVc7QUFDakIsTUFBTSxhQUFhO0FBQ25CLE1BQU0sVUFBVTtBQUNoQixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLGNBQWM7QUFDcEIsTUFBTSx5QkFBeUI7QUFFL0IsSUFBSTtBQVVKLGVBQXNCLE1BQU0sU0FBcUM7QUFDL0QsUUFBTSxjQUFjLGdCQUFnQjtBQUNwQyxRQUFNLFdBQVcsTUFBTSxnQkFBZ0IsV0FBVztBQUNsRCxRQUFNLGVBQWUsS0FBSyxNQUFNLE1BQU0sU0FBUyxLQUFLLFVBQVUsZUFBZSxHQUFHLE9BQU8sQ0FBQztBQUN4RixRQUFNLFdBQVcsYUFBYTtBQUU5QixRQUFNLFNBQVMsS0FBSyxVQUFVLE9BQU87QUFDckMsUUFBTSxZQUFZLE1BQU0sS0FBSyxNQUFNO0FBRW5DLFVBQVEsS0FBSyxTQUFTLFFBQVEsS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFDLDBCQUEwQjtBQUUxRixjQUFZLElBQUksVUFBVTtBQUMxQixRQUFNLFlBQVksS0FBSyxVQUFVLE1BQU0scUJBQXFCLGFBQWEsUUFBUTtBQUNqRixRQUFNLE1BQU0sV0FBVyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQzFDLFFBQU0sR0FBRyxVQUFVLFdBQVcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNqRCxRQUFNLFVBQVUsS0FBSyxVQUFVLE1BQU0scUJBQXFCLHNCQUFzQixHQUFHLEtBQUssVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdHLFFBQU0sVUFBVSxTQUFTO0FBRXpCLFFBQU0sZUFBZTtBQUFBLElBQ25CLE1BQU0sRUFBRSxTQUFTO0FBQUE7QUFBQSxJQUVqQixJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQUFBLFVBQVMsTUFBTTtBQUMvQixZQUFNLElBQUksUUFBUSxvQkFBb0JBLFNBQVE7QUFBQSxJQUNoRDtBQUFBLElBQ0EsMkJBQTJCO0FBQUEsSUFDM0IsV0FBVyxVQUFVO0FBQUEsRUFDdkIsQ0FBQztBQUVELFVBQVEsUUFBUSxpQkFBaUIsVUFBVSxJQUFJO0FBQ2pEO0FBT0EsZUFBc0IsV0FBMEI7QUFDOUMsUUFBTSxVQUFVLFFBQVE7QUFDMUI7QUFPQSxTQUFTLGtCQUEwQjtBQUNqQyxNQUFJLE1BQU0sUUFBUSxJQUFJO0FBR3RCLFNBQU8sTUFBTTtBQUNYLFFBQUksV0FBVyxLQUFLLEtBQUssY0FBYyxDQUFDLEdBQUc7QUFDekMsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLFNBQVMsS0FBSyxLQUFLLElBQUk7QUFDN0IsUUFBSSxXQUFXLEtBQUs7QUFDbEIsWUFBTSxJQUFJLE1BQU0sc0RBQXNEO0FBQUEsSUFDeEU7QUFDQSxVQUFNO0FBQUEsRUFDUjtBQUNGO0FBV0EsZUFBZSxnQkFBZ0IsYUFBc0M7QUFDbkUsUUFBTSxVQUFVLEtBQUssYUFBYSxRQUFRO0FBQzFDLFFBQU0sWUFBWSxLQUFLLGFBQWEsVUFBVTtBQUM5QyxRQUFNLFlBQVksS0FBSyxTQUFTLE9BQU87QUFDdkMsUUFBTSxjQUFjLEtBQUssV0FBVyxPQUFPO0FBQzNDLFFBQU0sVUFBVSxXQUFXLFNBQVMsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJO0FBQ2hFLFFBQU0sWUFBWSxXQUFXLFdBQVcsSUFBSSxNQUFNLEtBQUssV0FBVyxJQUFJO0FBRXRFLE1BQUksV0FBVyxXQUFXO0FBQ3hCLFdBQU8sUUFBUSxRQUFRLFVBQVUsUUFBUSxVQUFVO0FBQUEsRUFDckQ7QUFFQSxNQUFJLFNBQVM7QUFDWCxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksV0FBVztBQUNiLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxJQUFJLE1BQU0sNkRBQTZEO0FBQy9FOyIsCiAgIm5hbWVzIjogWyJwbHVnaW5JZCJdCn0K
101
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uLWdsb2JhbC1zZXR1cC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHRoZSBnbG9iYWwgc2V0dXAgYW5kIHRlYXJkb3duIGZ1bmN0aW9ucyBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgc2V0dXAgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luTWFuaWZlc3QgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFRlc3RQcm9qZWN0IH0gZnJvbSAndml0ZXN0L25vZGUnO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBjcCxcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBzdGF0LFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ3ZpdGVzdCc7XG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5tanMnO1xuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0Lm1qcyc7XG5cbmltcG9ydCB7IGVuYWJsZVBsdWdpbldpdGhFcnJvckNhcHR1cmUgfSBmcm9tICcuL2VuYWJsZS1wbHVnaW4ubWpzJztcbmltcG9ydCB7IGV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9vYnNpZGlhbi1jbGkubWpzJztcbmltcG9ydCB7IFRlbXBWYXVsdCB9IGZyb20gJy4vdGVtcC12YXVsdC5tanMnO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5Lm1qcyc7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdGVtcG9yYXJ5IHZhdWx0IHByb3ZpZGVkIGJ5IHRoZSBnbG9iYWwgc2V0dXAuXG4gKlxuICogQHJldHVybnMgVGhlIHRlbXBvcmFyeSB2YXVsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbXBWYXVsdCgpOiBUZW1wVmF1bHQge1xuICBjb25zdCB0ZW1wVmF1bHRQYXRoID0gaW5qZWN0KCd0ZW1wVmF1bHRQYXRoJyk7XG4gIHJldHVybiBuZXcgVGVtcFZhdWx0KHRlbXBWYXVsdFBhdGgpO1xufVxuXG5jb25zdCBESVNUX0RFViA9ICdkaXN0L2Rldic7XG5jb25zdCBESVNUX0JVSUxEID0gJ2Rpc3QvYnVpbGQnO1xuY29uc3QgTUFJTl9KUyA9ICdtYWluLmpzJztcbmNvbnN0IE9CU0lESUFOX0NPTkZJR19ESVIgPSAnLm9ic2lkaWFuJztcbmNvbnN0IFBMVUdJTlNfRElSID0gJ3BsdWdpbnMnO1xuY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfSlNPTiA9ICdjb21tdW5pdHktcGx1Z2lucy5qc29uJztcblxubGV0IHRlbXBWYXVsdDogVGVtcFZhdWx0O1xubGV0IHRyYW5zcG9ydDogT2JzaWRpYW5UcmFuc3BvcnQ7XG5cbi8qKlxuICogVml0ZXN0IGdsb2JhbCBzZXR1cCBmdW5jdGlvbi5cbiAqXG4gKiBDb3BpZXMgdGhlIGJ1aWx0IHBsdWdpbiBpbnRvIGEgdGVtcG9yYXJ5IHZhdWx0LCBlbmFibGVzIGl0IHZpYSB0aGUgT2JzaWRpYW4gQ0xJLFxuICogYW5kIHByb3ZpZGVzIGB0ZW1wVmF1bHRQYXRoYCB0byB0ZXN0cy5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdCAtIFRoZSBWaXRlc3QgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwKHByb2plY3Q6IFRlc3RQcm9qZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRyYW5zcG9ydE9wdGlvbnMgPSBwcm9qZWN0LmNvbmZpZy5lbnZpcm9ubWVudE9wdGlvbnNbJ29ic2lkaWFuVHJhbnNwb3J0J10gYXMgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkO1xuICB0cmFuc3BvcnQgPSBhd2FpdCBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyh0cmFuc3BvcnRPcHRpb25zKTtcblxuICBjb25zdCBwcm9qZWN0Um9vdCA9IGZpbmRQcm9qZWN0Um9vdCgpO1xuICBjb25zdCBkaXN0UGF0aCA9IGF3YWl0IHJlc29sdmVEaXN0UGF0aChwcm9qZWN0Um9vdCk7XG4gIGNvbnN0IG1hbmlmZXN0SnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUoam9pbihkaXN0UGF0aCwgJ21hbmlmZXN0Lmpzb24nKSwgJ3V0Zi04JykpIGFzIFBsdWdpbk1hbmlmZXN0O1xuICBjb25zdCBwbHVnaW5JZCA9IG1hbmlmZXN0SnNvbi5pZDtcblxuICBpZiAodHJhbnNwb3J0LmlzTW9iaWxlICYmIG1hbmlmZXN0SnNvbi5pc0Rlc2t0b3BPbmx5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luSWR9XCIgaGFzIGlzRGVza3RvcE9ubHk6IHRydWUgaW4gbWFuaWZlc3QuanNvbi4gTW9iaWxlIGludGVncmF0aW9uIHRlc3RzIGNhbm5vdCBydW4gZm9yIGRlc2t0b3Atb25seSBwbHVnaW5zLmBcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbWFpbkpzID0gam9pbihkaXN0UGF0aCwgTUFJTl9KUyk7XG4gIGNvbnN0IGJ1aWxkU3RhdCA9IGF3YWl0IHN0YXQobWFpbkpzKTtcblxuICBjb25zb2xlLndhcm4oYFVzaW5nICR7ZGlzdFBhdGh9ICgke2J1aWxkU3RhdC5tdGltZS50b0lTT1N0cmluZygpfSkuIElmIG91dGRhdGVkLCByZWJ1aWxkLmApO1xuXG4gIHRlbXBWYXVsdCA9IG5ldyBUZW1wVmF1bHQoKTtcbiAgY29uc3QgcGx1Z2luRGlyID0gam9pbih0ZW1wVmF1bHQucGF0aCwgT0JTSURJQU5fQ09ORklHX0RJUiwgUExVR0lOU19ESVIsIHBsdWdpbklkKTtcbiAgYXdhaXQgbWtkaXIocGx1Z2luRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgY3AoZGlzdFBhdGgsIHBsdWdpbkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IHdyaXRlRmlsZShqb2luKHRlbXBWYXVsdC5wYXRoLCBPQlNJRElBTl9DT05GSUdfRElSLCBDT01NVU5JVFlfUExVR0lOU19KU09OKSwgSlNPTi5zdHJpbmdpZnkoW3BsdWdpbklkXSkpO1xuICBhd2FpdCB0ZW1wVmF1bHQuc3luY1RvRGV2aWNlKCk7XG4gIGF3YWl0IHRlbXBWYXVsdC5yZWdpc3RlcigpO1xuXG4gIC8vIEVuYWJsZSB0aGUgcGx1Z2luIGFuZCB2ZXJpZnkgaXQgbG9hZGVkLiBPYnNpZGlhbidzIGVuYWJsZVBsdWdpbigpIHdyYXBzXG4gIC8vIExvYWRQbHVnaW4oKSBpbiBhIHRyeS1jYXRjaCB0aGF0IHN3YWxsb3dzIGVycm9ycyBhbmQgcmV0dXJucyBmYWxzZS5cbiAgLy8gV2UgbW9ua2V5LXBhdGNoIGxvYWRQbHVnaW4oKSB0byBjYXB0dXJlIHRoZSBlcnJvciBiZWZvcmUgaXQncyBzd2FsbG93ZWQuXG4gIGNvbnN0IHsgZXJyb3JNZXNzYWdlIH0gPSBhd2FpdCBldmFsSW5PYnNpZGlhbih7XG4gICAgYXJnczogeyBwbHVnaW5JZCB9LFxuICAgIGZuOiBlbmFibGVQbHVnaW5XaXRoRXJyb3JDYXB0dXJlLFxuICAgIHNob3VsZFNraXBQcmVmbGlnaHRDaGVja3M6IHRydWUsXG4gICAgdmF1bHRQYXRoOiB0ZW1wVmF1bHQucGF0aFxuICB9KTtcblxuICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gXCIke3BsdWdpbklkfVwiIGZhaWxlZCB0byBsb2FkOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgfVxuXG4gIHByb2plY3QucHJvdmlkZSgnb2JzaWRpYW5UcmFuc3BvcnQnLCB0cmFuc3BvcnRPcHRpb25zKTtcbiAgcHJvamVjdC5wcm92aWRlKCd0ZW1wVmF1bHRQYXRoJywgdGVtcFZhdWx0LnBhdGgpO1xufVxuXG4vKipcbiAqIFZpdGVzdCBnbG9iYWwgdGVhcmRvd24gZnVuY3Rpb24uXG4gKlxuICogUmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IHZhdWx0IGNyZWF0ZWQgZHVyaW5nIHNldHVwLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVhcmRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHRlbXBWYXVsdC5kaXNwb3NlKCk7XG4gIGF3YWl0IHRyYW5zcG9ydC5kaXNwb3NlPy4oKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgcHJvamVjdCByb290IGJ5IHdhbGtpbmcgdXAgZnJvbSBgcHJvY2Vzcy5jd2QoKWAgbG9va2luZyBmb3IgYHBhY2thZ2UuanNvbmAuXG4gKlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuZnVuY3Rpb24gZmluZFByb2plY3RSb290KCk6IHN0cmluZyB7XG4gIGxldCBkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIExvb3AgdGVybWluYXRlcyBhdCBmaWxlc3lzdGVtIHJvb3QuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGV4aXN0c1N5bmMoam9pbihkaXIsICdwYWNrYWdlLmpzb24nKSkpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGpvaW4oZGlyLCAnLi4nKTtcbiAgICBpZiAocGFyZW50ID09PSBkaXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgcHJvamVjdCByb290IChubyBwYWNrYWdlLmpzb24gZm91bmQpLicpO1xuICAgIH1cbiAgICBkaXIgPSBwYXJlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgZGlzdCBwYXRoIHRvIHVzZSBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKlxuICogUGlja3Mgd2hpY2hldmVyIG9mIGBkaXN0L2RldmAgYW5kIGBkaXN0L2J1aWxkYCBoYXMgYSBuZXdlciBgbWFpbi5qc2AuXG4gKiBJZiBvbmx5IG9uZSBleGlzdHMsIHRoYXQgb25lIGlzIHVzZWQuIFRocm93cyBpZiBuZWl0aGVyIGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdFJvb3QgLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcHJvamVjdCByb290LlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGNob3NlbiBkaXN0IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZURpc3RQYXRoKHByb2plY3RSb290OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkZXZQYXRoID0gam9pbihwcm9qZWN0Um9vdCwgRElTVF9ERVYpO1xuICBjb25zdCBidWlsZFBhdGggPSBqb2luKHByb2plY3RSb290LCBESVNUX0JVSUxEKTtcbiAgY29uc3QgZGV2TWFpbkpzID0gam9pbihkZXZQYXRoLCBNQUlOX0pTKTtcbiAgY29uc3QgYnVpbGRNYWluSnMgPSBqb2luKGJ1aWxkUGF0aCwgTUFJTl9KUyk7XG4gIGNvbnN0IGRldlN0YXQgPSBleGlzdHNTeW5jKGRldk1haW5KcykgPyBhd2FpdCBzdGF0KGRldk1haW5KcykgOiBudWxsO1xuICBjb25zdCBidWlsZFN0YXQgPSBleGlzdHNTeW5jKGJ1aWxkTWFpbkpzKSA/IGF3YWl0IHN0YXQoYnVpbGRNYWluSnMpIDogbnVsbDtcblxuICBpZiAoZGV2U3RhdCAmJiBidWlsZFN0YXQpIHtcbiAgICByZXR1cm4gZGV2U3RhdC5tdGltZSA+IGJ1aWxkU3RhdC5tdGltZSA/IGRldlBhdGggOiBidWlsZFBhdGg7XG4gIH1cblxuICBpZiAoZGV2U3RhdCkge1xuICAgIHJldHVybiBkZXZQYXRoO1xuICB9XG5cbiAgaWYgKGJ1aWxkU3RhdCkge1xuICAgIHJldHVybiBidWlsZFBhdGg7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGJ1aWxkIGZvdW5kLiBSdW4gYG5wbSBydW4gYnVpbGRgIG9yIGBucG0gcnVuIGRldmAgZmlyc3QuJyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFXQSxTQUFTLGtCQUFrQjtBQUMzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsWUFBWTtBQUNyQixTQUFTLGNBQWM7QUFLdkIsU0FBUyxvQ0FBb0M7QUFDN0MsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyxrQ0FBa0M7QUFPcEMsU0FBUyxlQUEwQjtBQUN4QyxRQUFNLGdCQUFnQixPQUFPLGVBQWU7QUFDNUMsU0FBTyxJQUFJLFVBQVUsYUFBYTtBQUNwQztBQUVBLE1BQU0sV0FBVztBQUNqQixNQUFNLGFBQWE7QUFDbkIsTUFBTSxVQUFVO0FBQ2hCLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sY0FBYztBQUNwQixNQUFNLHlCQUF5QjtBQUUvQixJQUFJO0FBQ0osSUFBSTtBQVVKLGVBQXNCLE1BQU0sU0FBcUM7QUFDL0QsUUFBTSxtQkFBbUIsUUFBUSxPQUFPLG1CQUFtQixtQkFBbUI7QUFDOUUsY0FBWSxNQUFNLDJCQUEyQixnQkFBZ0I7QUFFN0QsUUFBTSxjQUFjLGdCQUFnQjtBQUNwQyxRQUFNLFdBQVcsTUFBTSxnQkFBZ0IsV0FBVztBQUNsRCxRQUFNLGVBQWUsS0FBSyxNQUFNLE1BQU0sU0FBUyxLQUFLLFVBQVUsZUFBZSxHQUFHLE9BQU8sQ0FBQztBQUN4RixRQUFNLFdBQVcsYUFBYTtBQUU5QixNQUFJLFVBQVUsWUFBWSxhQUFhLGVBQWU7QUFDcEQsVUFBTSxJQUFJO0FBQUEsTUFDUixXQUFXLFFBQVE7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFNBQVMsS0FBSyxVQUFVLE9BQU87QUFDckMsUUFBTSxZQUFZLE1BQU0sS0FBSyxNQUFNO0FBRW5DLFVBQVEsS0FBSyxTQUFTLFFBQVEsS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFDLDBCQUEwQjtBQUUxRixjQUFZLElBQUksVUFBVTtBQUMxQixRQUFNLFlBQVksS0FBSyxVQUFVLE1BQU0scUJBQXFCLGFBQWEsUUFBUTtBQUNqRixRQUFNLE1BQU0sV0FBVyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQzFDLFFBQU0sR0FBRyxVQUFVLFdBQVcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNqRCxRQUFNLFVBQVUsS0FBSyxVQUFVLE1BQU0scUJBQXFCLHNCQUFzQixHQUFHLEtBQUssVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdHLFFBQU0sVUFBVSxhQUFhO0FBQzdCLFFBQU0sVUFBVSxTQUFTO0FBS3pCLFFBQU0sRUFBRSxhQUFhLElBQUksTUFBTSxlQUFlO0FBQUEsSUFDNUMsTUFBTSxFQUFFLFNBQVM7QUFBQSxJQUNqQixJQUFJO0FBQUEsSUFDSiwyQkFBMkI7QUFBQSxJQUMzQixXQUFXLFVBQVU7QUFBQSxFQUN2QixDQUFDO0FBRUQsTUFBSSxjQUFjO0FBQ2hCLFVBQU0sSUFBSSxNQUFNLFdBQVcsUUFBUSxxQkFBcUIsWUFBWSxFQUFFO0FBQUEsRUFDeEU7QUFFQSxVQUFRLFFBQVEscUJBQXFCLGdCQUFnQjtBQUNyRCxVQUFRLFFBQVEsaUJBQWlCLFVBQVUsSUFBSTtBQUNqRDtBQU9BLGVBQXNCLFdBQTBCO0FBQzlDLFFBQU0sVUFBVSxRQUFRO0FBQ3hCLFFBQU0sVUFBVSxVQUFVO0FBQzVCO0FBT0EsU0FBUyxrQkFBMEI7QUFDakMsTUFBSSxNQUFNLFFBQVEsSUFBSTtBQUd0QixTQUFPLE1BQU07QUFDWCxRQUFJLFdBQVcsS0FBSyxLQUFLLGNBQWMsQ0FBQyxHQUFHO0FBQ3pDLGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxTQUFTLEtBQUssS0FBSyxJQUFJO0FBQzdCLFFBQUksV0FBVyxLQUFLO0FBQ2xCLFlBQU0sSUFBSSxNQUFNLHNEQUFzRDtBQUFBLElBQ3hFO0FBQ0EsVUFBTTtBQUFBLEVBQ1I7QUFDRjtBQVdBLGVBQWUsZ0JBQWdCLGFBQXNDO0FBQ25FLFFBQU0sVUFBVSxLQUFLLGFBQWEsUUFBUTtBQUMxQyxRQUFNLFlBQVksS0FBSyxhQUFhLFVBQVU7QUFDOUMsUUFBTSxZQUFZLEtBQUssU0FBUyxPQUFPO0FBQ3ZDLFFBQU0sY0FBYyxLQUFLLFdBQVcsT0FBTztBQUMzQyxRQUFNLFVBQVUsV0FBVyxTQUFTLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSTtBQUNoRSxRQUFNLFlBQVksV0FBVyxXQUFXLElBQUksTUFBTSxLQUFLLFdBQVcsSUFBSTtBQUV0RSxNQUFJLFdBQVcsV0FBVztBQUN4QixXQUFPLFFBQVEsUUFBUSxVQUFVLFFBQVEsVUFBVTtBQUFBLEVBQ3JEO0FBRUEsTUFBSSxTQUFTO0FBQ1gsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLFdBQVc7QUFDYixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sSUFBSSxNQUFNLDZEQUE2RDtBQUMvRTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @packageDocumentation
2
+ * @file
3
3
  *
4
4
  * Serializes a value to JSON, preserving function bodies as raw source text.
5
5
  */
@@ -19,4 +19,4 @@ function jsonWithFunctions(value) {
19
19
  export {
20
20
  jsonWithFunctions
21
21
  };
22
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2pzb24td2l0aC1mdW5jdGlvbnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogU2VyaWFsaXplcyBhIHZhbHVlIHRvIEpTT04sIHByZXNlcnZpbmcgZnVuY3Rpb24gYm9kaWVzIGFzIHJhdyBzb3VyY2UgdGV4dC5cbiAqL1xuXG5pbXBvcnQgeyBnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcgfSBmcm9tICcuL2Z1bmN0aW9uLWV4cHJlc3Npb24ubWpzJztcblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgdmFsdWUgdG8gSlNPTiB3aXRoIGZ1bmN0aW9uIGJvZGllcyBpbmNsdWRlZCBhcyByYXcgc291cmNlIHRleHQuXG4gKlxuICogU3RhbmRhcmQgYEpTT04uc3RyaW5naWZ5YCBvbWl0cyBmdW5jdGlvbnMgZW50aXJlbHkuIFRoaXMgaGVscGVyIHJlcGxhY2VzXG4gKiBlYWNoIGZ1bmN0aW9uIHZhbHVlIHdpdGggYSB1bmlxdWUgcGxhY2Vob2xkZXIgZHVyaW5nIHN0cmluZ2lmaWNhdGlvbixcbiAqIHRoZW4gc3Vic3RpdHV0ZXMgdGhlIHBsYWNlaG9sZGVycyB3aXRoIHRoZSByZWFsIGB0b1N0cmluZygpYCBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNlcmlhbGl6ZS5cbiAqIEByZXR1cm5zIEEgSlNPTi1saWtlIHN0cmluZyB3aGVyZSBmdW5jdGlvbnMgYXBwZWFyIGFzIHRoZWlyIHNvdXJjZSB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbldpdGhGdW5jdGlvbnModmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCBmdW5jdGlvbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3QgSlNPTl9JTkRFTlQgPSAyO1xuICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkodmFsdWUsIChfa2V5OiBzdHJpbmcsIHZhbDogdW5rbm93bik6IEpTT05WYWx1ZUY8dW5rbm93bj4gPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBwbGFjZWhvbGRlciA9IGBfX2ZuXyR7U3RyaW5nKGZ1bmN0aW9uTWFwLnNpemUpfV9fYDtcbiAgICAgIGZ1bmN0aW9uTWFwLnNldChwbGFjZWhvbGRlciwgZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKHZhbCkpO1xuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyO1xuICAgIH1cbiAgICByZXR1cm4gdmFsIGFzIEpTT05WYWx1ZUY8dW5rbm93bj47XG4gIH0sIEpTT05fSU5ERU5UKTtcblxuICBsZXQgcmVzdWx0ID0ganNvbjtcbiAgZm9yIChjb25zdCBbcGxhY2Vob2xkZXIsIGZuU291cmNlXSBvZiBmdW5jdGlvbk1hcCkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKGBcIiR7cGxhY2Vob2xkZXJ9XCJgLCBmblNvdXJjZSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBTUEsU0FBUyxtQ0FBbUM7QUFZckMsU0FBUyxrQkFBa0IsT0FBd0I7QUFDeEQsUUFBTSxjQUFjLG9CQUFJLElBQW9CO0FBRTVDLFFBQU0sY0FBYztBQUNwQixRQUFNLE9BQU8sS0FBSyxVQUFVLE9BQU8sQ0FBQyxNQUFjLFFBQXNDO0FBQ3RGLFFBQUksT0FBTyxRQUFRLFlBQVk7QUFDN0IsWUFBTSxjQUFjLFFBQVEsT0FBTyxZQUFZLElBQUksQ0FBQztBQUNwRCxrQkFBWSxJQUFJLGFBQWEsNEJBQTRCLEdBQUcsQ0FBQztBQUM3RCxhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU87QUFBQSxFQUNULEdBQUcsV0FBVztBQUVkLE1BQUksU0FBUztBQUNiLGFBQVcsQ0FBQyxhQUFhLFFBQVEsS0FBSyxhQUFhO0FBQ2pELGFBQVMsT0FBTyxRQUFRLElBQUksV0FBVyxLQUFLLFFBQVE7QUFBQSxFQUN0RDtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
22
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2pzb24td2l0aC1mdW5jdGlvbnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTZXJpYWxpemVzIGEgdmFsdWUgdG8gSlNPTiwgcHJlc2VydmluZyBmdW5jdGlvbiBib2RpZXMgYXMgcmF3IHNvdXJjZSB0ZXh0LlxuICovXG5cbmltcG9ydCB7IGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyB9IGZyb20gJy4vZnVuY3Rpb24tZXhwcmVzc2lvbi5tanMnO1xuXG4vKipcbiAqIFNlcmlhbGl6ZXMgYSB2YWx1ZSB0byBKU09OIHdpdGggZnVuY3Rpb24gYm9kaWVzIGluY2x1ZGVkIGFzIHJhdyBzb3VyY2UgdGV4dC5cbiAqXG4gKiBTdGFuZGFyZCBgSlNPTi5zdHJpbmdpZnlgIG9taXRzIGZ1bmN0aW9ucyBlbnRpcmVseS4gVGhpcyBoZWxwZXIgcmVwbGFjZXNcbiAqIGVhY2ggZnVuY3Rpb24gdmFsdWUgd2l0aCBhIHVuaXF1ZSBwbGFjZWhvbGRlciBkdXJpbmcgc3RyaW5naWZpY2F0aW9uLFxuICogdGhlbiBzdWJzdGl0dXRlcyB0aGUgcGxhY2Vob2xkZXJzIHdpdGggdGhlIHJlYWwgYHRvU3RyaW5nKClgIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2VyaWFsaXplLlxuICogQHJldHVybnMgQSBKU09OLWxpa2Ugc3RyaW5nIHdoZXJlIGZ1bmN0aW9ucyBhcHBlYXIgYXMgdGhlaXIgc291cmNlIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uV2l0aEZ1bmN0aW9ucyh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IGZ1bmN0aW9uTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICBjb25zdCBKU09OX0lOREVOVCA9IDI7XG4gIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgKF9rZXk6IHN0cmluZywgdmFsOiB1bmtub3duKTogSlNPTlZhbHVlRjx1bmtub3duPiA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gYF9fZm5fJHtTdHJpbmcoZnVuY3Rpb25NYXAuc2l6ZSl9X19gO1xuICAgICAgZnVuY3Rpb25NYXAuc2V0KHBsYWNlaG9sZGVyLCBnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcodmFsKSk7XG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXI7XG4gICAgfVxuICAgIHJldHVybiB2YWwgYXMgSlNPTlZhbHVlRjx1bmtub3duPjtcbiAgfSwgSlNPTl9JTkRFTlQpO1xuXG4gIGxldCByZXN1bHQgPSBqc29uO1xuICBmb3IgKGNvbnN0IFtwbGFjZWhvbGRlciwgZm5Tb3VyY2VdIG9mIGZ1bmN0aW9uTWFwKSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoYFwiJHtwbGFjZWhvbGRlcn1cImAsIGZuU291cmNlKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFNQSxTQUFTLG1DQUFtQztBQVlyQyxTQUFTLGtCQUFrQixPQUF3QjtBQUN4RCxRQUFNLGNBQWMsb0JBQUksSUFBb0I7QUFFNUMsUUFBTSxjQUFjO0FBQ3BCLFFBQU0sT0FBTyxLQUFLLFVBQVUsT0FBTyxDQUFDLE1BQWMsUUFBc0M7QUFDdEYsUUFBSSxPQUFPLFFBQVEsWUFBWTtBQUM3QixZQUFNLGNBQWMsUUFBUSxPQUFPLFlBQVksSUFBSSxDQUFDO0FBQ3BELGtCQUFZLElBQUksYUFBYSw0QkFBNEIsR0FBRyxDQUFDO0FBQzdELGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTztBQUFBLEVBQ1QsR0FBRyxXQUFXO0FBRWQsTUFBSSxTQUFTO0FBQ2IsYUFBVyxDQUFDLGFBQWEsUUFBUSxLQUFLLGFBQWE7QUFDakQsYUFBUyxPQUFPLFFBQVEsSUFBSSxXQUFXLEtBQUssUUFBUTtBQUFBLEVBQ3REO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @packageDocumentation
2
+ * @file
3
3
  *
4
4
  * No-op functions.
5
5
  */
@@ -6,4 +6,4 @@ export {
6
6
  noop,
7
7
  noopAsync
8
8
  };
9
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25vb3AudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogTm8tb3AgZnVuY3Rpb25zLlxuICovXG5cbi8qKlxuICogTm8tb3AgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAvLyBOby1vcFxufVxuXG4vKipcbiAqIE5vLW9wIGFzeW5jIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbm9vcEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBOby1vcFxufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBU08sU0FBUyxPQUFhO0FBRTdCO0FBT0EsZUFBc0IsWUFBMkI7QUFFakQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
9
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25vb3AudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBOby1vcCBmdW5jdGlvbnMuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEVtcHR5LWJvZGllZCBmdW5jdGlvbnMgYXJlIG5vdCBpbnN0cnVtZW50ZWQgYnkgdjggY292ZXJhZ2UuICovXG5cbi8qKlxuICogTm8tb3AgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAvLyBOby1vcFxufVxuXG4vKipcbiAqIE5vLW9wIGFzeW5jIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbm9vcEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBOby1vcFxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBV08sU0FBUyxPQUFhO0FBRTdCO0FBT0EsZUFBc0IsWUFBMkI7QUFFakQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -1,12 +1,13 @@
1
1
  /**
2
- * @packageDocumentation
2
+ * @file
3
3
  *
4
- * Evaluates a function inside a running Obsidian instance via the Obsidian CLI.
4
+ * Evaluates a function inside a running Obsidian instance via a pluggable transport.
5
5
  */
6
6
  import type { App } from 'obsidian';
7
7
  import type * as obsidian from 'obsidian';
8
8
  import type { Promisable } from 'type-fest';
9
9
  import type { ContextArgs, ContextId } from './context-id.mjs';
10
+ import type { ObsidianTransport } from './transport.mjs';
10
11
  /**
11
12
  * Common arguments automatically provided to every {@link evalInObsidian} callback.
12
13
  */
@@ -48,6 +49,11 @@ export interface EvalInObsidianParams<Args extends GenericObject, Result, TConte
48
49
  * @internal
49
50
  */
50
51
  shouldSkipPreflightChecks?: boolean;
52
+ /**
53
+ * Override the transport for this call. When omitted, uses the transport
54
+ * configured via `environmentOptions.obsidianTransport` in vitest config.
55
+ */
56
+ transport?: ObsidianTransport;
51
57
  /**
52
58
  * The path to the Obsidian vault. Defaults to `process.cwd()`.
53
59
  */
@@ -59,7 +65,7 @@ export interface EvalInObsidianParams<Args extends GenericObject, Result, TConte
59
65
  export type GenericObject = Record<string, unknown>;
60
66
  /**
61
67
  * Evaluates a function inside the running Obsidian instance
62
- * via the Obsidian CLI and returns the parsed result.
68
+ * via the active transport and returns the parsed result.
63
69
  *
64
70
  * The function receives an args object that includes `app`, `obsidianModule`,
65
71
  * `context`, and any additional `args` passed by the caller.
@@ -1,33 +1,19 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import process from "node:process";
3
- import { exec } from "./exec.mjs";
3
+ import { inject } from "vitest";
4
4
  import { getFunctionExpressionString } from "./function-expression.mjs";
5
5
  import { jsonWithFunctions } from "./json-with-functions.mjs";
6
- import {
7
- getVaultId,
8
- isCliEnabled,
9
- isVaultRegistered
10
- } from "./obsidian-config.mjs";
6
+ import { getOrCreateTransport } from "./transport-factory.mjs";
11
7
  const NO_OUTPUT = "(no output)";
12
- const UNABLE_TO_FIND_OBSIDIAN = "unable to find Obsidian";
13
- const AUTO_START_POLL_INTERVAL_MS = 2e3;
14
- const AUTO_START_TIMEOUT_MS = 3e4;
15
8
  async function evalInObsidian(params) {
16
- const { args = {}, contextId, fn, shouldSkipPreflightChecks = false, vaultPath } = params;
9
+ const { args = {}, contextId, fn, shouldSkipPreflightChecks = false, transport: transportOverride, vaultPath } = params;
17
10
  const cwd = vaultPath ?? process.cwd();
18
11
  if (vaultPath !== void 0 && !existsSync(vaultPath)) {
19
12
  throw new Error(`Vault path does not exist: ${vaultPath}`);
20
13
  }
14
+ const transport = transportOverride ?? await getOrCreateTransport(inject("obsidianTransport"));
21
15
  if (!shouldSkipPreflightChecks) {
22
- if (!isVaultRegistered(cwd)) {
23
- throw new Error(
24
- `Vault is not registered in Obsidian: ${cwd}. Register the vault first with registerVault() or TempVault.register().`
25
- );
26
- }
27
- if (!isCliEnabled()) {
28
- throw new Error("Obsidian CLI is disabled. Enable it in Obsidian Settings \u2192 General \u2192 CLI.");
29
- }
30
- await assertObsidianCliAvailable();
16
+ await transport.preflightCheck(cwd);
31
17
  }
32
18
  const SLICE_START = 2;
33
19
  const randomSuffix = String(Math.random()).slice(SLICE_START);
@@ -51,63 +37,16 @@ async function evalInObsidian(params) {
51
37
  const fullArgs${randomSuffix} = Object.assign(args${randomSuffix}, { app, obsidianModule: obsidianModule${randomSuffix}, context: context${randomSuffix} });
52
38
  return JSON.stringify(await fn${randomSuffix}(fullArgs${randomSuffix}));
53
39
  })()`;
54
- const command = ["obsidian", "eval", `code=${expression}`];
55
- let resultStr;
56
- try {
57
- resultStr = await exec(command, { cwd, isQuiet: true });
58
- } catch (error) {
59
- const message = error instanceof Error ? error.message : String(error);
60
- if (message.includes(UNABLE_TO_FIND_OBSIDIAN)) {
61
- resultStr = await ensureObsidianRunning({ command, cwd });
62
- } else {
63
- throw error;
64
- }
65
- }
66
- if (resultStr === "" || resultStr === "Vault not found.") {
67
- throw new Error(`Unexpected empty response from Obsidian CLI for path: ${cwd}`);
68
- }
69
- const resultJson = resultStr.startsWith("=> ") ? resultStr.slice("=> ".length) : resultStr;
70
- if (resultJson === NO_OUTPUT) {
40
+ const resultStr = await transport.evaluate(expression, { cwd });
41
+ if (resultStr === NO_OUTPUT) {
71
42
  return void 0;
72
43
  }
73
44
  try {
74
- return JSON.parse(resultJson);
45
+ return JSON.parse(resultStr);
75
46
  } catch {
76
47
  throw new Error(`evalInObsidian: Obsidian returned non-JSON output: ${resultStr}`);
77
48
  }
78
49
  }
79
- async function assertObsidianCliAvailable() {
80
- const command = process.platform === "win32" ? "where.exe obsidian" : "which obsidian";
81
- try {
82
- await exec(command, { isQuiet: true });
83
- } catch {
84
- throw new Error("Obsidian CLI is not available. Ensure Obsidian is installed and its CLI is in your PATH.");
85
- }
86
- }
87
- async function ensureObsidianRunning(params) {
88
- console.warn("Obsidian is not running. Starting Obsidian...");
89
- const vaultId = getVaultId(params.cwd);
90
- const uri = vaultId ? `obsidian://open?vault=${vaultId}` : "obsidian://open";
91
- try {
92
- await exec(getOpenUriCommand(uri), { isQuiet: true });
93
- } catch {
94
- }
95
- const deadline = Date.now() + AUTO_START_TIMEOUT_MS;
96
- while (Date.now() < deadline) {
97
- await new Promise((r) => {
98
- setTimeout(r, AUTO_START_POLL_INTERVAL_MS);
99
- });
100
- try {
101
- return await exec(params.command, { cwd: params.cwd, isQuiet: true });
102
- } catch (error) {
103
- const message = error instanceof Error ? error.message : String(error);
104
- if (!message.includes(UNABLE_TO_FIND_OBSIDIAN)) {
105
- throw error;
106
- }
107
- }
108
- }
109
- throw new Error(`Obsidian did not start within ${String(AUTO_START_TIMEOUT_MS)}ms.`);
110
- }
111
50
  async function getObsidianModule() {
112
51
  const app = window.app;
113
52
  const obsidianModuleHolder = app;
@@ -123,7 +62,7 @@ async function getObsidianModule() {
123
62
  description: "",
124
63
  dir,
125
64
  id: tempModuleName,
126
- isDesktopOnly: true,
65
+ isDesktopOnly: false,
127
66
  minAppVersion: "",
128
67
  name: tempModuleName,
129
68
  version: ""
@@ -146,16 +85,7 @@ function getObsidianModulePluginFn() {
146
85
  obsidianModuleHolder.obsidianModule = obsidianModule;
147
86
  pluginExports.default = obsidianModule.Plugin;
148
87
  }
149
- function getOpenUriCommand(uri) {
150
- if (process.platform === "win32") {
151
- return `start "" "${uri}"`;
152
- }
153
- if (process.platform === "darwin") {
154
- return `open "${uri}"`;
155
- }
156
- return `xdg-open "${uri}"`;
157
- }
158
88
  export {
159
89
  evalInObsidian
160
90
  };
161
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgYSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSB0aGUgT2JzaWRpYW4gQ0xJLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5hbWVzcGFjZSAtLSBXZSBuZWVkIHRvIHJlZmVyZW5jZSBgb2JzaWRpYW5gIG1vZHVsZS5cbmltcG9ydCB0eXBlICogYXMgb2JzaWRpYW4gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUge1xuICBDb250ZXh0QXJncyxcbiAgQ29udGV4dElkXG59IGZyb20gJy4vY29udGV4dC1pZC5tanMnO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLm1qcyc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcgfSBmcm9tICcuL2Z1bmN0aW9uLWV4cHJlc3Npb24ubWpzJztcbmltcG9ydCB7IGpzb25XaXRoRnVuY3Rpb25zIH0gZnJvbSAnLi9qc29uLXdpdGgtZnVuY3Rpb25zLm1qcyc7XG5pbXBvcnQge1xuICBnZXRWYXVsdElkLFxuICBpc0NsaUVuYWJsZWQsXG4gIGlzVmF1bHRSZWdpc3RlcmVkXG59IGZyb20gJy4vb2JzaWRpYW4tY29uZmlnLm1qcyc7XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5jb25zdCBVTkFCTEVfVE9fRklORF9PQlNJRElBTiA9ICd1bmFibGUgdG8gZmluZCBPYnNpZGlhbic7XG5jb25zdCBBVVRPX1NUQVJUX1BPTExfSU5URVJWQUxfTVMgPSAyMDAwO1xuY29uc3QgQVVUT19TVEFSVF9USU1FT1VUX01TID0gMzAwMDA7XG5cbi8qKlxuICogQ29tbW9uIGFyZ3VtZW50cyBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIHRvIGV2ZXJ5IHtAbGluayBldmFsSW5PYnNpZGlhbn0gY2FsbGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uQXJncyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4ge0BsaW5rIEFwcH0gaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGBvYnNpZGlhbmAgbW9kdWxlLCByZXNvbHZlZCBhdCBydW50aW1lIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcy5cbiAgICovXG4gIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGV2YWxJbk9ic2lkaWFufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmFsSW5PYnNpZGlhblBhcmFtczxBcmdzIGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4gVmFsdWVzIG1heSBpbmNsdWRlIGZ1bmN0aW9ucyBcdTIwMTRcbiAgICogdGhleSBhcmUgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgLlxuICAgKi9cbiAgYXJncz86IEFyZ3M7XG5cbiAgLyoqXG4gICAqIEEge0BsaW5rIENvbnRleHRJZH0gbGlua2luZyB0aGlzIGNhbGwgdG8gYSBwZXJzaXN0ZW50IHN0b3JlIG9uIGB3aW5kb3dgXG4gICAqIGluIHRoZSBPYnNpZGlhbiBwcm9jZXNzLiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgYSB0eXBlZCBgY29udGV4dGAgb2JqZWN0XG4gICAqIHRoYXQgc3Vydml2ZXMgYWNyb3NzIGNhbGxzIHNoYXJpbmcgdGhlIHNhbWUgSUQuXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgYGNvbnRleHRgIGlzIGEgZnJlc2ggZW1wdHkgb2JqZWN0IGVhY2ggY2FsbC5cbiAgICovXG4gIGNvbnRleHRJZD86IFRDb250ZXh0SWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZSBpbiB0aGUgT2JzaWRpYW4gY29udGV4dC5cbiAgICovXG4gIGZuKGFyZ3M6IEFyZ3MgJiBDb21tb25BcmdzICYgQ29udGV4dEFyZ3M8VENvbnRleHRJZD4pOiBQcm9taXNhYmxlPFJlc3VsdD47XG5cbiAgLyoqXG4gICAqIFNraXBzIHByZS1mbGlnaHQgY2hlY2tzICh2YXVsdCByZWdpc3RyYXRpb24sIENMSSBhdmFpbGFiaWxpdHkpLlxuICAgKiBVc2VkIGludGVybmFsbHkgYnkgdmF1bHQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIE9ic2lkaWFuIHZhdWx0LiBEZWZhdWx0cyB0byBgcHJvY2Vzcy5jd2QoKWAuXG4gICAqL1xuICB2YXVsdFBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwbGFpbiBvYmplY3Qgd2l0aCBzdHJpbmcga2V5cy5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY09iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIEV2YWx1YXRlcyBhIGZ1bmN0aW9uIGluc2lkZSB0aGUgcnVubmluZyBPYnNpZGlhbiBpbnN0YW5jZVxuICogdmlhIHRoZSBPYnNpZGlhbiBDTEkgYW5kIHJldHVybnMgdGhlIHBhcnNlZCByZXN1bHQuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGFuIGFyZ3Mgb2JqZWN0IHRoYXQgaW5jbHVkZXMgYGFwcGAsIGBvYnNpZGlhbk1vZHVsZWAsXG4gKiBgY29udGV4dGAsIGFuZCBhbnkgYWRkaXRpb25hbCBgYXJnc2AgcGFzc2VkIGJ5IHRoZSBjYWxsZXIuXG4gKiBJdCBpcyBzZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAgYW5kIGludm9rZWQgYXMgYW4gSUlGRS5cbiAqIFRoZSBmdW5jdGlvbiBtdXN0IGJlIHNlbGYtY29udGFpbmVkIFx1MjAxNCBjbG9zdXJlcyBvdmVyIGxvY2FsIHZhcmlhYmxlcyB3aWxsIG5vdCB3b3JrLlxuICogUGFzcyBhbnkgbmVlZGVkIHZhbHVlcyBhcyBgYXJnc2AgXHUyMDE0IHRoZXkgYXJlIEpTT04tc2VyaWFsaXplZCBhbmQgZGVzZXJpYWxpemVkIG9uIHRoZSBPYnNpZGlhbiBzaWRlLlxuICpcbiAqIFRoZSByZXN1bHQgaXMgYEpTT04uc3RyaW5naWZ5YCdkIG9uIHRoZSBPYnNpZGlhbiBzaWRlIGFuZCBwYXJzZWQgYmFjay5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiBgZm5gLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXZhbEluT2JzaWRpYW48QXJncyBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gIHBhcmFtczogRXZhbEluT2JzaWRpYW5QYXJhbXM8QXJncywgUmVzdWx0LCBUQ29udGV4dElkPlxuKTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCAtLSBgZm5gIGNhbiBiZSB1bmJvdW5kLlxuICBjb25zdCB7IGFyZ3MgPSB7fSwgY29udGV4dElkLCBmbiwgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcyA9IGZhbHNlLCB2YXVsdFBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgY3dkID0gdmF1bHRQYXRoID8/IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gQ2hlY2sgMTogVmF1bHQgcGF0aCBleGlzdHMgb24gZGlzay5cbiAgaWYgKHZhdWx0UGF0aCAhPT0gdW5kZWZpbmVkICYmICFleGlzdHNTeW5jKHZhdWx0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhdWx0IHBhdGggZG9lcyBub3QgZXhpc3Q6ICR7dmF1bHRQYXRofWApO1xuICB9XG5cbiAgaWYgKCFzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzKSB7XG4gICAgLy8gQ2hlY2sgMjogVmF1bHQgaXMgcmVnaXN0ZXJlZCBpbiBPYnNpZGlhbi5cbiAgICBpZiAoIWlzVmF1bHRSZWdpc3RlcmVkKGN3ZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFZhdWx0IGlzIG5vdCByZWdpc3RlcmVkIGluIE9ic2lkaWFuOiAke2N3ZH0uIFJlZ2lzdGVyIHRoZSB2YXVsdCBmaXJzdCB3aXRoIHJlZ2lzdGVyVmF1bHQoKSBvciBUZW1wVmF1bHQucmVnaXN0ZXIoKS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENoZWNrIDM6IENMSSBpcyBlbmFibGVkIGluIE9ic2lkaWFuIHNldHRpbmdzLlxuICAgIGlmICghaXNDbGlFbmFibGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2JzaWRpYW4gQ0xJIGlzIGRpc2FibGVkLiBFbmFibGUgaXQgaW4gT2JzaWRpYW4gU2V0dGluZ3MgXFx1MjE5MiBHZW5lcmFsIFxcdTIxOTIgQ0xJLicpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIDQ6IE9ic2lkaWFuIENMSSBiaW5hcnkgaXMgaW4gUEFUSC5cbiAgICBhd2FpdCBhc3NlcnRPYnNpZGlhbkNsaUF2YWlsYWJsZSgpO1xuICB9XG5cbiAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICBjb25zdCByYW5kb21TdWZmaXggPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICBjb25zdCBjb250ZXh0RXhwciA9IGNvbnRleHRJZFxuICAgID8gYCgod2luZG93Ll9fb2JzaWRpYW5Db250ZXh0c19fID8/PSB7fSlbXCIke1N0cmluZyhjb250ZXh0SWQpfVwiXSA/Pz0ge30pYFxuICAgIDogJ3t9JztcbiAgY29uc3QgZXhwcmVzc2lvbiA9IGBcbihhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGZuJHtyYW5kb21TdWZmaXh9ID0gJHtnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoZm4pfTtcbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGUke3JhbmRvbVN1ZmZpeH0gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmICghYXBwLndvcmtzcGFjZS5hcHAud29ya3NwYWNlLmxheW91dFJlYWR5KSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KHJlc29sdmUpKTtcbiAgICB9XG4gICAgaWYgKCFhcHAucGx1Z2lucy5pc0VuYWJsZWQoKSkge1xuICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuc2V0RW5hYmxlKHRydWUpO1xuICAgIH1cbiAgICAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuKX1cbiAgICAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhnZXRPYnNpZGlhbk1vZHVsZSl9XG4gICAgcmV0dXJuIGF3YWl0IGdldE9ic2lkaWFuTW9kdWxlKCk7XG4gIH0pKCk7XG4gIGNvbnN0IGFyZ3Mke3JhbmRvbVN1ZmZpeH0gPSAke2pzb25XaXRoRnVuY3Rpb25zKGFyZ3MpfTtcbiAgY29uc3QgY29udGV4dCR7cmFuZG9tU3VmZml4fSA9ICR7Y29udGV4dEV4cHJ9O1xuICBjb25zdCBmdWxsQXJncyR7cmFuZG9tU3VmZml4fSA9IE9iamVjdC5hc3NpZ24oYXJncyR7cmFuZG9tU3VmZml4fSwgeyBhcHAsIG9ic2lkaWFuTW9kdWxlOiBvYnNpZGlhbk1vZHVsZSR7cmFuZG9tU3VmZml4fSwgY29udGV4dDogY29udGV4dCR7cmFuZG9tU3VmZml4fSB9KTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGF3YWl0IGZuJHtyYW5kb21TdWZmaXh9KGZ1bGxBcmdzJHtyYW5kb21TdWZmaXh9KSk7XG59KSgpYDtcblxuICBjb25zdCBjb21tYW5kID0gWydvYnNpZGlhbicsICdldmFsJywgYGNvZGU9JHtleHByZXNzaW9ufWBdO1xuXG4gIGxldCByZXN1bHRTdHI6IHN0cmluZztcbiAgdHJ5IHtcbiAgICByZXN1bHRTdHIgPSBhd2FpdCBleGVjKGNvbW1hbmQsIHsgY3dkLCBpc1F1aWV0OiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4pKSB7XG4gICAgICAvLyBDaGVjayA1OiBPYnNpZGlhbiBpcyBub3QgcnVubmluZyBcdTIwMTQgYXV0by1zdGFydCBpdC5cbiAgICAgIHJlc3VsdFN0ciA9IGF3YWl0IGVuc3VyZU9ic2lkaWFuUnVubmluZyh7IGNvbW1hbmQsIGN3ZCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlc3VsdFN0ciA9PT0gJycgfHwgcmVzdWx0U3RyID09PSAnVmF1bHQgbm90IGZvdW5kLicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZW1wdHkgcmVzcG9uc2UgZnJvbSBPYnNpZGlhbiBDTEkgZm9yIHBhdGg6ICR7Y3dkfWApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0SnNvbiA9IHJlc3VsdFN0ci5zdGFydHNXaXRoKCc9PiAnKSA/IHJlc3VsdFN0ci5zbGljZSgnPT4gJy5sZW5ndGgpIDogcmVzdWx0U3RyO1xuICBpZiAocmVzdWx0SnNvbiA9PT0gTk9fT1VUUFVUKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBSZXN1bHQ7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3VsdEpzb24pIGFzIFJlc3VsdDtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBldmFsSW5PYnNpZGlhbjogT2JzaWRpYW4gcmV0dXJuZWQgbm9uLUpTT04gb3V0cHV0OiAke3Jlc3VsdFN0cn1gKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBPYnNpZGlhbiBDTEkgYmluYXJ5IGlzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtIFBBVEguXG4gKlxuICogQHRocm93cyBJZiB0aGUgQ0xJIGJpbmFyeSBpcyBub3QgZm91bmQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFzc2VydE9ic2lkaWFuQ2xpQXZhaWxhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb21tYW5kID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICd3aGVyZS5leGUgb2JzaWRpYW4nIDogJ3doaWNoIG9ic2lkaWFuJztcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPYnNpZGlhbiBDTEkgaXMgbm90IGF2YWlsYWJsZS4gRW5zdXJlIE9ic2lkaWFuIGlzIGluc3RhbGxlZCBhbmQgaXRzIENMSSBpcyBpbiB5b3VyIFBBVEguJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBMYXVuY2hlcyBPYnNpZGlhbiB2aWEgdGhlIGBvYnNpZGlhbjovL2AgVVJJIHByb3RvY29sIGFuZCByZXRyaWVzIHRoZSBldmFsXG4gKiB1bnRpbCBPYnNpZGlhbiBiZWNvbWVzIGF2YWlsYWJsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGV4ZWMgcGFyYW1ldGVycyBmb3IgdGhlIGV2YWwgY29tbWFuZC5cbiAqIEBwYXJhbSBwYXJhbXMuY29tbWFuZCAtIFRoZSBDTEkgY29tbWFuZCBhcnJheSB0byByZXRyeS5cbiAqIEBwYXJhbSBwYXJhbXMuY3dkIC0gVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgZXZhbCBjb21tYW5kLlxuICogQHJldHVybnMgVGhlIHJlc3VsdCBzdHJpbmcgZnJvbSB0aGUgc3VjY2Vzc2Z1bCBldmFsLlxuICovXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVPYnNpZGlhblJ1bm5pbmcocGFyYW1zOiB7IGNvbW1hbmQ6IHN0cmluZ1tdOyBjd2Q6IHN0cmluZyB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc29sZS53YXJuKCdPYnNpZGlhbiBpcyBub3QgcnVubmluZy4gU3RhcnRpbmcgT2JzaWRpYW4uLi4nKTtcblxuICBjb25zdCB2YXVsdElkID0gZ2V0VmF1bHRJZChwYXJhbXMuY3dkKTtcbiAgY29uc3QgdXJpID0gdmF1bHRJZCA/IGBvYnNpZGlhbjovL29wZW4/dmF1bHQ9JHt2YXVsdElkfWAgOiAnb2JzaWRpYW46Ly9vcGVuJztcblxuICB0cnkge1xuICAgIGF3YWl0IGV4ZWMoZ2V0T3BlblVyaUNvbW1hbmQodXJpKSwgeyBpc1F1aWV0OiB0cnVlIH0pO1xuICB9IGNhdGNoIHtcbiAgICAvLyBUaGUgb3BlbiBjb21tYW5kIG1heSBmYWlsIG9uIHNvbWUgc3lzdGVtcyBcdTIwMTQgd2UnbGwgc3RpbGwgdHJ5IHBvbGxpbmcuXG4gIH1cblxuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBBVVRPX1NUQVJUX1RJTUVPVVRfTVM7XG4gIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4ge1xuICAgICAgc2V0VGltZW91dChyLCBBVVRPX1NUQVJUX1BPTExfSU5URVJWQUxfTVMpO1xuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZXhlYyhwYXJhbXMuY29tbWFuZCwgeyBjd2Q6IHBhcmFtcy5jd2QsIGlzUXVpZXQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBpZiAoIW1lc3NhZ2UuaW5jbHVkZXMoVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4pKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgT2JzaWRpYW4gZGlkIG5vdCBzdGFydCB3aXRoaW4gJHtTdHJpbmcoQVVUT19TVEFSVF9USU1FT1VUX01TKX1tcy5gKTtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgdmlhIHRvU3RyaW5nKCkgYW5kIGV4ZWN1dGVkIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcywgbm90IGluIE5vZGUuIENvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMuICovXG5cbi8qKlxuICogSW5qZWN0ZWQgaW50byB0aGUgT2JzaWRpYW4gcHJvY2VzcyB0byByZXNvbHZlIHRoZSBgb2JzaWRpYW5gIG1vZHVsZS5cbiAqIFVzZXMgYSBjYWNoZWQgdmFsdWUgb24gYGFwcGAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgaW5zdGFsbHMgYSB0ZW1wb3JhcnlcbiAqIHBsdWdpbiB0aGF0IGNhbGxzIGByZXF1aXJlKCdvYnNpZGlhbicpYCBhbmQgY2FjaGVzIHRoZSByZXN1bHQuXG4gKlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZSBcdTIwMTQgaXQgaXMgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgLlxuICogYGdldE9ic2lkaWFuTW9kdWxlUGx1Z2luRm5gIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgc2FtZSBzY29wZVxuICogKHRoZSBnZW5lcmF0ZWQgSUlGRSBoYW5kbGVzIHRoaXMpLlxuICpcbiAqIEByZXR1cm5zIFRoZSBgb2JzaWRpYW5gIG1vZHVsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0T2JzaWRpYW5Nb2R1bGUoKTogUHJvbWlzZTx0eXBlb2Ygb2JzaWRpYW4+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kZXByZWNhdGVkIC0tIFdlIG5lZWQgZ2xvYmFsIGBhcHBgIHZhcmlhYmxlLlxuICBjb25zdCBhcHAgPSB3aW5kb3cuYXBwO1xuICBpbnRlcmZhY2UgT2JzaWRpYW5Nb2R1bGVIb2xkZXIge1xuICAgIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG4gIH1cbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGVIb2xkZXIgPSBhcHAgYXMgUGFydGlhbDxPYnNpZGlhbk1vZHVsZUhvbGRlcj47XG4gIGlmIChvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSkge1xuICAgIHJldHVybiBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZTtcbiAgfVxuICBjb25zdCBTTElDRV9TVEFSVCA9IDI7XG4gIGNvbnN0IHJhbmRvbVN1ZmZpeCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZShTTElDRV9TVEFSVCk7XG4gIGNvbnN0IHRlbXBNb2R1bGVOYW1lID0gYGdldC1vYnNpZGlhbi1tb2R1bGUtJHtyYW5kb21TdWZmaXh9YDtcbiAgY29uc3QgZGlyID0gYCR7YXBwLnZhdWx0LmNvbmZpZ0Rpcn0vcGx1Z2lucy8ke3RlbXBNb2R1bGVOYW1lfWA7XG4gIGFwcC5wbHVnaW5zLm1hbmlmZXN0c1t0ZW1wTW9kdWxlTmFtZV0gPSB7XG4gICAgYXV0aG9yOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZGlyLFxuICAgIGlkOiB0ZW1wTW9kdWxlTmFtZSxcbiAgICBpc0Rlc2t0b3BPbmx5OiB0cnVlLFxuICAgIG1pbkFwcFZlcnNpb246ICcnLFxuICAgIG5hbWU6IHRlbXBNb2R1bGVOYW1lLFxuICAgIHZlcnNpb246ICcnXG4gIH07XG4gIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLm1rZGlyKGRpcik7XG4gIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLndyaXRlKGAke2Rpcn0vbWFpbi5qc2AsIGAoJHtTdHJpbmcoZ2V0T2JzaWRpYW5Nb2R1bGVQbHVnaW5Gbil9KSgpO2ApO1xuICBhd2FpdCBhcHAucGx1Z2lucy5sb2FkUGx1Z2luKHRlbXBNb2R1bGVOYW1lKTtcbiAgYXdhaXQgYXBwLnBsdWdpbnMudW5pbnN0YWxsUGx1Z2luKHRlbXBNb2R1bGVOYW1lKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gSXQgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoaW4gYGxvYWRQbHVnaW5gLlxuICBpZiAob2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGUpIHtcbiAgICByZXR1cm4gb2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBvYnNpZGlhbiBtb2R1bGUnKTtcbn1cblxuLyoqXG4gKiBUaGUgYm9keSBvZiB0aGUgdGVtcG9yYXJ5IHBsdWdpbiB0aGF0IGV4dHJhY3RzIHRoZSBgb2JzaWRpYW5gIG1vZHVsZS5cbiAqIFNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgd3JpdHRlbiB0byBgbWFpbi5qc2AgYnkge0BsaW5rIGdldE9ic2lkaWFuTW9kdWxlfS5cbiAqIE11c3QgTk9UIHJlZmVyZW5jZSBhbnkgb3V0ZXIgc2NvcGUuXG4gKi9cbmZ1bmN0aW9uIGdldE9ic2lkaWFuTW9kdWxlUGx1Z2luRm4oKTogdm9pZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZGVwcmVjYXRlZCAtLSBXZSBuZWVkIGdsb2JhbCBgYXBwYCB2YXJpYWJsZS5cbiAgY29uc3QgYXBwID0gd2luZG93LmFwcDtcbiAgaW50ZXJmYWNlIE9ic2lkaWFuTW9kdWxlSG9sZGVyIHtcbiAgICBvYnNpZGlhbk1vZHVsZTogdHlwZW9mIG9ic2lkaWFuO1xuICB9XG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlSG9sZGVyID0gYXBwIGFzIFBhcnRpYWw8T2JzaWRpYW5Nb2R1bGVIb2xkZXI+O1xuXG4gIGNvbnN0IHBsdWdpblJlcXVpcmUgPSByZXF1aXJlO1xuICBjb25zdCBwbHVnaW5FeHBvcnRzID0gZXhwb3J0cyBhcyB7XG4gICAgZGVmYXVsdDogdW5rbm93bjtcbiAgfTtcblxuICBjb25zdCBvYnNpZGlhbk1vZHVsZSA9IHBsdWdpblJlcXVpcmUoJ29ic2lkaWFuJykgYXMgdHlwZW9mIG9ic2lkaWFuO1xuICBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSA9IG9ic2lkaWFuTW9kdWxlO1xuICBwbHVnaW5FeHBvcnRzLmRlZmF1bHQgPSBvYnNpZGlhbk1vZHVsZS5QbHVnaW47XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29tbWFuZCB0byBvcGVuIGEgVVJJLlxuICpcbiAqIEBwYXJhbSB1cmkgLSBUaGUgVVJJIHRvIG9wZW4uXG4gKiBAcmV0dXJucyBUaGUgc2hlbGwgY29tbWFuZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldE9wZW5VcmlDb21tYW5kKHVyaTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gYHN0YXJ0IFwiXCIgXCIke3VyaX1cImA7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gYG9wZW4gXCIke3VyaX1cImA7XG4gIH1cblxuICByZXR1cm4gYHhkZy1vcGVuIFwiJHt1cml9XCJgO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBV0EsU0FBUyxrQkFBa0I7QUFDM0IsT0FBTyxhQUFhO0FBT3BCLFNBQVMsWUFBWTtBQUNyQixTQUFTLG1DQUFtQztBQUM1QyxTQUFTLHlCQUF5QjtBQUNsQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxNQUFNLFlBQVk7QUFDbEIsTUFBTSwwQkFBMEI7QUFDaEMsTUFBTSw4QkFBOEI7QUFDcEMsTUFBTSx3QkFBd0I7QUEyRTlCLGVBQXNCLGVBQ3BCLFFBQ2lCO0FBRWpCLFFBQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxXQUFXLElBQUksNEJBQTRCLE9BQU8sVUFBVSxJQUFJO0FBQ25GLFFBQU0sTUFBTSxhQUFhLFFBQVEsSUFBSTtBQUdyQyxNQUFJLGNBQWMsVUFBYSxDQUFDLFdBQVcsU0FBUyxHQUFHO0FBQ3JELFVBQU0sSUFBSSxNQUFNLDhCQUE4QixTQUFTLEVBQUU7QUFBQSxFQUMzRDtBQUVBLE1BQUksQ0FBQywyQkFBMkI7QUFFOUIsUUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUc7QUFDM0IsWUFBTSxJQUFJO0FBQUEsUUFDUix3Q0FBd0MsR0FBRztBQUFBLE1BQzdDO0FBQUEsSUFDRjtBQUdBLFFBQUksQ0FBQyxhQUFhLEdBQUc7QUFDbkIsWUFBTSxJQUFJLE1BQU0scUZBQXFGO0FBQUEsSUFDdkc7QUFHQSxVQUFNLDJCQUEyQjtBQUFBLEVBQ25DO0FBRUEsUUFBTSxjQUFjO0FBQ3BCLFFBQU0sZUFBZSxPQUFPLEtBQUssT0FBTyxDQUFDLEVBQUUsTUFBTSxXQUFXO0FBQzVELFFBQU0sY0FBYyxZQUNoQiwwQ0FBMEMsT0FBTyxTQUFTLENBQUMsZUFDM0Q7QUFDSixRQUFNLGFBQWE7QUFBQTtBQUFB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
91
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEV2YWx1YXRlcyBhIGZ1bmN0aW9uIGluc2lkZSBhIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UgdmlhIGEgcGx1Z2dhYmxlIHRyYW5zcG9ydC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lc3BhY2UgLS0gV2UgbmVlZCB0byByZWZlcmVuY2UgYG9ic2lkaWFuYCBtb2R1bGUuXG5pbXBvcnQgdHlwZSAqIGFzIG9ic2lkaWFuIGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmdzLFxuICBDb250ZXh0SWRcbn0gZnJvbSAnLi9jb250ZXh0LWlkLm1qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQubWpzJztcblxuaW1wb3J0IHsgZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nIH0gZnJvbSAnLi9mdW5jdGlvbi1leHByZXNzaW9uLm1qcyc7XG5pbXBvcnQgeyBqc29uV2l0aEZ1bmN0aW9ucyB9IGZyb20gJy4vanNvbi13aXRoLWZ1bmN0aW9ucy5tanMnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5Lm1qcyc7XG5cbmludGVyZmFjZSBFeHBvcnRzV2l0aERlZmF1bHQge1xuICBkZWZhdWx0OiB1bmtub3duO1xufVxuXG5jb25zdCBOT19PVVRQVVQgPSAnKG5vIG91dHB1dCknO1xuXG4vKipcbiAqIENvbW1vbiBhcmd1bWVudHMgYXV0b21hdGljYWxseSBwcm92aWRlZCB0byBldmVyeSB7QGxpbmsgZXZhbEluT2JzaWRpYW59IGNhbGxiYWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkFyZ3Mge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHtAbGluayBBcHB9IGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBgb2JzaWRpYW5gIG1vZHVsZSwgcmVzb2x2ZWQgYXQgcnVudGltZSBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gICAqL1xuICBvYnNpZGlhbk1vZHVsZTogdHlwZW9mIG9ic2lkaWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBldmFsSW5PYnNpZGlhbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbEluT2JzaWRpYW5QYXJhbXM8QXJncyBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4ge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uIFZhbHVlcyBtYXkgaW5jbHVkZSBmdW5jdGlvbnMgXHUyMDE0XG4gICAqIHRoZXkgYXJlIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAgICovXG4gIGFyZ3M/OiBBcmdzO1xuXG4gIC8qKlxuICAgKiBBIHtAbGluayBDb250ZXh0SWR9IGxpbmtpbmcgdGhpcyBjYWxsIHRvIGEgcGVyc2lzdGVudCBzdG9yZSBvbiBgd2luZG93YFxuICAgKiBpbiB0aGUgT2JzaWRpYW4gcHJvY2Vzcy4gVGhlIGNhbGxiYWNrIHJlY2VpdmVzIGEgdHlwZWQgYGNvbnRleHRgIG9iamVjdFxuICAgKiB0aGF0IHN1cnZpdmVzIGFjcm9zcyBjYWxscyBzaGFyaW5nIHRoZSBzYW1lIElELlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGBjb250ZXh0YCBpcyBhIGZyZXNoIGVtcHR5IG9iamVjdCBlYWNoIGNhbGwuXG4gICAqL1xuICBjb250ZXh0SWQ/OiBUQ29udGV4dElkO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUgaW4gdGhlIE9ic2lkaWFuIGNvbnRleHQuXG4gICAqL1xuICBmbihhcmdzOiBBcmdzICYgQ29tbW9uQXJncyAmIENvbnRleHRBcmdzPFRDb250ZXh0SWQ+KTogUHJvbWlzYWJsZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBTa2lwcyBwcmUtZmxpZ2h0IGNoZWNrcyAodmF1bHQgcmVnaXN0cmF0aW9uLCBDTEkgYXZhaWxhYmlsaXR5KS5cbiAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IHZhdWx0IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB0cmFuc3BvcnQgZm9yIHRoaXMgY2FsbC4gV2hlbiBvbWl0dGVkLCB1c2VzIHRoZSB0cmFuc3BvcnRcbiAgICogY29uZmlndXJlZCB2aWEgYGVudmlyb25tZW50T3B0aW9ucy5vYnNpZGlhblRyYW5zcG9ydGAgaW4gdml0ZXN0IGNvbmZpZy5cbiAgICovXG4gIHRyYW5zcG9ydD86IE9ic2lkaWFuVHJhbnNwb3J0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gdmF1bHQuIERlZmF1bHRzIHRvIGBwcm9jZXNzLmN3ZCgpYC5cbiAgICovXG4gIHZhdWx0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHBsYWluIG9iamVjdCB3aXRoIHN0cmluZyBrZXlzLlxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICogRXZhbHVhdGVzIGEgZnVuY3Rpb24gaW5zaWRlIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlXG4gKiB2aWEgdGhlIGFjdGl2ZSB0cmFuc3BvcnQgYW5kIHJldHVybnMgdGhlIHBhcnNlZCByZXN1bHQuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGFuIGFyZ3Mgb2JqZWN0IHRoYXQgaW5jbHVkZXMgYGFwcGAsIGBvYnNpZGlhbk1vZHVsZWAsXG4gKiBgY29udGV4dGAsIGFuZCBhbnkgYWRkaXRpb25hbCBgYXJnc2AgcGFzc2VkIGJ5IHRoZSBjYWxsZXIuXG4gKiBJdCBpcyBzZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAgYW5kIGludm9rZWQgYXMgYW4gSUlGRS5cbiAqIFRoZSBmdW5jdGlvbiBtdXN0IGJlIHNlbGYtY29udGFpbmVkIFx1MjAxNCBjbG9zdXJlcyBvdmVyIGxvY2FsIHZhcmlhYmxlcyB3aWxsIG5vdCB3b3JrLlxuICogUGFzcyBhbnkgbmVlZGVkIHZhbHVlcyBhcyBgYXJnc2AgXHUyMDE0IHRoZXkgYXJlIEpTT04tc2VyaWFsaXplZCBhbmQgZGVzZXJpYWxpemVkIG9uIHRoZSBPYnNpZGlhbiBzaWRlLlxuICpcbiAqIFRoZSByZXN1bHQgaXMgYEpTT04uc3RyaW5naWZ5YCdkIG9uIHRoZSBPYnNpZGlhbiBzaWRlIGFuZCBwYXJzZWQgYmFjay5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiBgZm5gLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXZhbEluT2JzaWRpYW48QXJncyBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gIHBhcmFtczogRXZhbEluT2JzaWRpYW5QYXJhbXM8QXJncywgUmVzdWx0LCBUQ29udGV4dElkPlxuKTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCAtLSBgZm5gIGNhbiBiZSB1bmJvdW5kLlxuICBjb25zdCB7IGFyZ3MgPSB7fSwgY29udGV4dElkLCBmbiwgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcyA9IGZhbHNlLCB0cmFuc3BvcnQ6IHRyYW5zcG9ydE92ZXJyaWRlLCB2YXVsdFBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgY3dkID0gdmF1bHRQYXRoID8/IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gQ2hlY2s6IFZhdWx0IHBhdGggZXhpc3RzIG9uIGRpc2suXG4gIGlmICh2YXVsdFBhdGggIT09IHVuZGVmaW5lZCAmJiAhZXhpc3RzU3luYyh2YXVsdFBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYXVsdCBwYXRoIGRvZXMgbm90IGV4aXN0OiAke3ZhdWx0UGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydE92ZXJyaWRlID8/IGF3YWl0IGdldE9yQ3JlYXRlVHJhbnNwb3J0KGluamVjdCgnb2JzaWRpYW5UcmFuc3BvcnQnKSk7XG5cbiAgaWYgKCFzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzKSB7XG4gICAgYXdhaXQgdHJhbnNwb3J0LnByZWZsaWdodENoZWNrKGN3ZCk7XG4gIH1cblxuICBjb25zdCBTTElDRV9TVEFSVCA9IDI7XG4gIGNvbnN0IHJhbmRvbVN1ZmZpeCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZShTTElDRV9TVEFSVCk7XG4gIGNvbnN0IGNvbnRleHRFeHByID0gY29udGV4dElkXG4gICAgPyBgKCh3aW5kb3cuX19vYnNpZGlhbkNvbnRleHRzX18gPz89IHt9KVtcIiR7U3RyaW5nKGNvbnRleHRJZCl9XCJdID8/PSB7fSlgXG4gICAgOiAne30nO1xuICBjb25zdCBleHByZXNzaW9uID0gYFxuKGFzeW5jICgpID0+IHtcbiAgY29uc3QgZm4ke3JhbmRvbVN1ZmZpeH0gPSAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhmbil9O1xuICBjb25zdCBvYnNpZGlhbk1vZHVsZSR7cmFuZG9tU3VmZml4fSA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFhcHAud29ya3NwYWNlLmFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHkpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBhcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkocmVzb2x2ZSkpO1xuICAgIH1cbiAgICBpZiAoIWFwcC5wbHVnaW5zLmlzRW5hYmxlZCgpKSB7XG4gICAgICBhd2FpdCBhcHAucGx1Z2lucy5zZXRFbmFibGUodHJ1ZSk7XG4gICAgfVxuICAgICR7Z2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKGdldE9ic2lkaWFuTW9kdWxlUGx1Z2luRm4pfVxuICAgICR7Z2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKGdldE9ic2lkaWFuTW9kdWxlKX1cbiAgICByZXR1cm4gYXdhaXQgZ2V0T2JzaWRpYW5Nb2R1bGUoKTtcbiAgfSkoKTtcbiAgY29uc3QgYXJncyR7cmFuZG9tU3VmZml4fSA9ICR7anNvbldpdGhGdW5jdGlvbnMoYXJncyl9O1xuICBjb25zdCBjb250ZXh0JHtyYW5kb21TdWZmaXh9ID0gJHtjb250ZXh0RXhwcn07XG4gIGNvbnN0IGZ1bGxBcmdzJHtyYW5kb21TdWZmaXh9ID0gT2JqZWN0LmFzc2lnbihhcmdzJHtyYW5kb21TdWZmaXh9LCB7IGFwcCwgb2JzaWRpYW5Nb2R1bGU6IG9ic2lkaWFuTW9kdWxlJHtyYW5kb21TdWZmaXh9LCBjb250ZXh0OiBjb250ZXh0JHtyYW5kb21TdWZmaXh9IH0pO1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXdhaXQgZm4ke3JhbmRvbVN1ZmZpeH0oZnVsbEFyZ3Mke3JhbmRvbVN1ZmZpeH0pKTtcbn0pKClgO1xuXG4gIGNvbnN0IHJlc3VsdFN0ciA9IGF3YWl0IHRyYW5zcG9ydC5ldmFsdWF0ZShleHByZXNzaW9uLCB7IGN3ZCB9KTtcblxuICBpZiAocmVzdWx0U3RyID09PSBOT19PVVRQVVQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIFJlc3VsdDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzdWx0U3RyKSBhcyBSZXN1bHQ7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXZhbEluT2JzaWRpYW46IE9ic2lkaWFuIHJldHVybmVkIG5vbi1KU09OIG91dHB1dDogJHtyZXN1bHRTdHJ9YCk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgdmlhIHRvU3RyaW5nKCkgYW5kIGV4ZWN1dGVkIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcywgbm90IGluIE5vZGUuIENvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMuICovXG5cbi8qKlxuICogSW5qZWN0ZWQgaW50byB0aGUgT2JzaWRpYW4gcHJvY2VzcyB0byByZXNvbHZlIHRoZSBgb2JzaWRpYW5gIG1vZHVsZS5cbiAqIFVzZXMgYSBjYWNoZWQgdmFsdWUgb24gYGFwcGAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgaW5zdGFsbHMgYSB0ZW1wb3JhcnlcbiAqIHBsdWdpbiB0aGF0IGNhbGxzIGByZXF1aXJlKCdvYnNpZGlhbicpYCBhbmQgY2FjaGVzIHRoZSByZXN1bHQuXG4gKlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZSBcdTIwMTQgaXQgaXMgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgLlxuICogYGdldE9ic2lkaWFuTW9kdWxlUGx1Z2luRm5gIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgc2FtZSBzY29wZVxuICogKHRoZSBnZW5lcmF0ZWQgSUlGRSBoYW5kbGVzIHRoaXMpLlxuICpcbiAqIEByZXR1cm5zIFRoZSBgb2JzaWRpYW5gIG1vZHVsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0T2JzaWRpYW5Nb2R1bGUoKTogUHJvbWlzZTx0eXBlb2Ygb2JzaWRpYW4+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kZXByZWNhdGVkIC0tIFdlIG5lZWQgZ2xvYmFsIGBhcHBgIHZhcmlhYmxlLlxuICBjb25zdCBhcHAgPSB3aW5kb3cuYXBwO1xuICBpbnRlcmZhY2UgT2JzaWRpYW5Nb2R1bGVIb2xkZXIge1xuICAgIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG4gIH1cbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGVIb2xkZXIgPSBhcHAgYXMgUGFydGlhbDxPYnNpZGlhbk1vZHVsZUhvbGRlcj47XG4gIGlmIChvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSkge1xuICAgIHJldHVybiBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZTtcbiAgfVxuICBjb25zdCBTTElDRV9TVEFSVCA9IDI7XG4gIGNvbnN0IHJhbmRvbVN1ZmZpeCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZShTTElDRV9TVEFSVCk7XG4gIGNvbnN0IHRlbXBNb2R1bGVOYW1lID0gYGdldC1vYnNpZGlhbi1tb2R1bGUtJHtyYW5kb21TdWZmaXh9YDtcbiAgY29uc3QgZGlyID0gYCR7YXBwLnZhdWx0LmNvbmZpZ0Rpcn0vcGx1Z2lucy8ke3RlbXBNb2R1bGVOYW1lfWA7XG4gIGFwcC5wbHVnaW5zLm1hbmlmZXN0c1t0ZW1wTW9kdWxlTmFtZV0gPSB7XG4gICAgYXV0aG9yOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZGlyLFxuICAgIGlkOiB0ZW1wTW9kdWxlTmFtZSxcbiAgICBpc0Rlc2t0b3BPbmx5OiBmYWxzZSxcbiAgICBtaW5BcHBWZXJzaW9uOiAnJyxcbiAgICBuYW1lOiB0ZW1wTW9kdWxlTmFtZSxcbiAgICB2ZXJzaW9uOiAnJ1xuICB9O1xuICBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5ta2RpcihkaXIpO1xuICBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci53cml0ZShgJHtkaXJ9L21haW4uanNgLCBgKCR7U3RyaW5nKGdldE9ic2lkaWFuTW9kdWxlUGx1Z2luRm4pfSkoKTtgKTtcbiAgYXdhaXQgYXBwLnBsdWdpbnMubG9hZFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLnVuaW5zdGFsbFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIEl0IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aGluIGBsb2FkUGx1Z2luYC5cbiAgaWYgKG9ic2lkaWFuTW9kdWxlSG9sZGVyLm9ic2lkaWFuTW9kdWxlKSB7XG4gICAgcmV0dXJuIG9ic2lkaWFuTW9kdWxlSG9sZGVyLm9ic2lkaWFuTW9kdWxlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgb2JzaWRpYW4gbW9kdWxlJyk7XG59XG5cbi8qKlxuICogVGhlIGJvZHkgb2YgdGhlIHRlbXBvcmFyeSBwbHVnaW4gdGhhdCBleHRyYWN0cyB0aGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKiBTZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAgYW5kIHdyaXR0ZW4gdG8gYG1haW4uanNgIGJ5IHtAbGluayBnZXRPYnNpZGlhbk1vZHVsZX0uXG4gKiBNdXN0IE5PVCByZWZlcmVuY2UgYW55IG91dGVyIHNjb3BlLlxuICovXG5mdW5jdGlvbiBnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuKCk6IHZvaWQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWRlcHJlY2F0ZWQgLS0gV2UgbmVlZCBnbG9iYWwgYGFwcGAgdmFyaWFibGUuXG4gIGNvbnN0IGFwcCA9IHdpbmRvdy5hcHA7XG4gIGludGVyZmFjZSBPYnNpZGlhbk1vZHVsZUhvbGRlciB7XG4gICAgb2JzaWRpYW5Nb2R1bGU6IHR5cGVvZiBvYnNpZGlhbjtcbiAgfVxuICBjb25zdCBvYnNpZGlhbk1vZHVsZUhvbGRlciA9IGFwcCBhcyBQYXJ0aWFsPE9ic2lkaWFuTW9kdWxlSG9sZGVyPjtcblxuICBjb25zdCBwbHVnaW5SZXF1aXJlID0gcmVxdWlyZTtcbiAgY29uc3QgcGx1Z2luRXhwb3J0cyA9IGV4cG9ydHMgYXMgRXhwb3J0c1dpdGhEZWZhdWx0O1xuXG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlID0gcGx1Z2luUmVxdWlyZSgnb2JzaWRpYW4nKSBhcyB0eXBlb2Ygb2JzaWRpYW47XG4gIG9ic2lkaWFuTW9kdWxlSG9sZGVyLm9ic2lkaWFuTW9kdWxlID0gb2JzaWRpYW5Nb2R1bGU7XG4gIHBsdWdpbkV4cG9ydHMuZGVmYXVsdCA9IG9ic2lkaWFuTW9kdWxlLlBsdWdpbjtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQVdBLFNBQVMsa0JBQWtCO0FBQzNCLE9BQU8sYUFBYTtBQUNwQixTQUFTLGNBQWM7QUFRdkIsU0FBUyxtQ0FBbUM7QUFDNUMsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyw0QkFBNEI7QUFNckMsTUFBTSxZQUFZO0FBaUZsQixlQUFzQixlQUNwQixRQUNpQjtBQUVqQixRQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsV0FBVyxJQUFJLDRCQUE0QixPQUFPLFdBQVcsbUJBQW1CLFVBQVUsSUFBSTtBQUNqSCxRQUFNLE1BQU0sYUFBYSxRQUFRLElBQUk7QUFHckMsTUFBSSxjQUFjLFVBQWEsQ0FBQyxXQUFXLFNBQVMsR0FBRztBQUNyRCxVQUFNLElBQUksTUFBTSw4QkFBOEIsU0FBUyxFQUFFO0FBQUEsRUFDM0Q7QUFFQSxRQUFNLFlBQVkscUJBQXFCLE1B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
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @packageDocumentation
2
+ * @file
3
3
  *
4
4
  * Reads and queries Obsidian's local configuration (`obsidian.json`).
5
5
  */
@@ -55,4 +55,4 @@ export {
55
55
  isCliEnabled,
56
56
  isVaultRegistered
57
57
  };
58
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBSZWFkcyBhbmQgcXVlcmllcyBPYnNpZGlhbidzIGxvY2FsIGNvbmZpZ3VyYXRpb24gKGBvYnNpZGlhbi5qc29uYCkuXG4gKi9cblxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge1xuICBqb2luLFxuICByZXNvbHZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG4vKipcbiAqIFRoZSB0b3AtbGV2ZWwgc3RydWN0dXJlIG9mIE9ic2lkaWFuJ3MgYG9ic2lkaWFuLmpzb25gIGNvbmZpZyBmaWxlLlxuICovXG5pbnRlcmZhY2UgT2JzaWRpYW5Kc29uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIENMSSBpcyBlbmFibGVkIGluIE9ic2lkaWFuIHNldHRpbmdzLlxuICAgKi9cbiAgY2xpPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWFwIG9mIHZhdWx0IElEcyB0byB2YXVsdCBlbnRyaWVzLlxuICAgKi9cbiAgdmF1bHRzOiBSZWNvcmQ8c3RyaW5nLCBPYnNpZGlhblZhdWx0RW50cnk+O1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIHZhdWx0IGVudHJ5IGluIGBvYnNpZGlhbi5qc29uYC5cbiAqL1xuaW50ZXJmYWNlIE9ic2lkaWFuVmF1bHRFbnRyeSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB2YXVsdCBpcyBjdXJyZW50bHkgb3Blbi5cbiAgICovXG4gIG9wZW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICAgKi9cbiAgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgb2YgdGhlIGxhc3QgYWNjZXNzLlxuICAgKi9cbiAgdHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBoZXggdmF1bHQgSUQgZm9yIGEgZ2l2ZW4gdmF1bHQgcGF0aCBmcm9tIE9ic2lkaWFuJ3MgcmVnaXN0cnkuXG4gKlxuICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gKiBAcmV0dXJucyBUaGUgdmF1bHQgSUQsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSB2YXVsdCBpcyBub3QgcmVnaXN0ZXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZhdWx0SWQodmF1bHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBjb25maWcgPSByZWFkT2JzaWRpYW5Kc29uKCk7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXQgPSBub3JtYWxpemVQYXRoKHZhdWx0UGF0aCk7XG5cbiAgZm9yIChjb25zdCBbaWQsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhjb25maWcudmF1bHRzKSkge1xuICAgIGlmIChub3JtYWxpemVQYXRoKGVudHJ5LnBhdGgpID09PSBub3JtYWxpemVkVGFyZ2V0KSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgT2JzaWRpYW4gQ0xJIGlzIGVuYWJsZWQgaW4gT2JzaWRpYW4ncyBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIENMSSBpcyBlbmFibGVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xpRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgY29uc3QgY29uZmlnID0gcmVhZE9ic2lkaWFuSnNvbigpO1xuICByZXR1cm4gY29uZmlnPy5jbGkgPT09IHRydWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSB2YXVsdCBwYXRoIGlzIHJlZ2lzdGVyZWQgaW4gT2JzaWRpYW4ncyB2YXVsdCByZWdpc3RyeS5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmF1bHQgaXMgcmVnaXN0ZXJlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhdWx0UmVnaXN0ZXJlZCh2YXVsdFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0VmF1bHRJZCh2YXVsdFBhdGgpICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aCB0byBPYnNpZGlhbidzIGNvbmZpZyBkaXJlY3RvcnkuXG4gKlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGBvYnNpZGlhbi9gIGNvbmZpZyBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGdldE9ic2lkaWFuQ29uZmlnRGlyKCk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgY29uc3QgYXBwRGF0YSA9IHByb2Nlc3MuZW52WydBUFBEQVRBJ107XG4gICAgaWYgKGFwcERhdGEpIHtcbiAgICAgIHJldHVybiBqb2luKGFwcERhdGEsICdvYnNpZGlhbicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiBqb2luKGhvbWVkaXIoKSwgJ0xpYnJhcnknLCAnQXBwbGljYXRpb24gU3VwcG9ydCcsICdvYnNpZGlhbicpO1xuICB9XG5cbiAgcmV0dXJuIGpvaW4ocHJvY2Vzcy5lbnZbJ1hER19DT05GSUdfSE9NRSddID8/IGpvaW4oaG9tZWRpcigpLCAnLmNvbmZpZycpLCAnb2JzaWRpYW4nKTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgdmF1bHQgcGF0aCBmb3IgY29tcGFyaXNvbi5cbiAqIE9uIFdpbmRvd3MsIHBhdGhzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBzZXBhcmF0b3JzIG1heSB2YXJ5LlxuICpcbiAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgcGF0aCB0byBub3JtYWxpemUuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwYXRoLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKHZhdWx0UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKHZhdWx0UGF0aCk7XG4gIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gcmVzb2x2ZWQudG9Mb3dlckNhc2UoKSA6IHJlc29sdmVkO1xufVxuXG4vKipcbiAqIFJlYWRzIGFuZCBwYXJzZXMgT2JzaWRpYW4ncyBgb2JzaWRpYW4uanNvbmAgY29uZmlnIGZpbGUuXG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBjb25maWcsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgY2FuJ3QgYmUgcGFyc2VkLlxuICovXG5mdW5jdGlvbiByZWFkT2JzaWRpYW5Kc29uKCk6IE9ic2lkaWFuSnNvbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBqb2luKGdldE9ic2lkaWFuQ29uZmlnRGlyKCksICdvYnNpZGlhbi5qc29uJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50KSBhcyBPYnNpZGlhbkpzb247XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQU1BLFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsZUFBZTtBQUN4QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLE9BQU8sYUFBYTtBQTJDYixTQUFTLFdBQVcsV0FBdUM7QUFDaEUsUUFBTSxTQUFTLGlCQUFpQjtBQUNoQyxNQUFJLENBQUMsUUFBUTtBQUNYLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxtQkFBbUIsY0FBYyxTQUFTO0FBRWhELGFBQVcsQ0FBQyxJQUFJLEtBQUssS0FBSyxPQUFPLFFBQVEsT0FBTyxNQUFNLEdBQUc7QUFDdkQsUUFBSSxjQUFjLE1BQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUNsRCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFPTyxTQUFTLGVBQXdCO0FBQ3RDLFFBQU0sU0FBUyxpQkFBaUI7QUFDaEMsU0FBTyxRQUFRLFFBQVE7QUFDekI7QUFRTyxTQUFTLGtCQUFrQixXQUE0QjtBQUM1RCxTQUFPLFdBQVcsU0FBUyxNQUFNO0FBQ25DO0FBT0EsU0FBUyx1QkFBK0I7QUFDdEMsTUFBSSxRQUFRLGFBQWEsU0FBUztBQUNoQyxVQUFNLFVBQVUsUUFBUSxJQUFJLFNBQVM7QUFDckMsUUFBSSxTQUFTO0FBQ1gsYUFBTyxLQUFLLFNBQVMsVUFBVTtBQUFBLElBQ2pDO0FBQUEsRUFDRjtBQUVBLE1BQUksUUFBUSxhQUFhLFVBQVU7QUFDakMsV0FBTyxLQUFLLFFBQVEsR0FBRyxXQUFXLHVCQUF1QixVQUFVO0FBQUEsRUFDckU7QUFFQSxTQUFPLEtBQUssUUFBUSxJQUFJLGlCQUFpQixLQUFLLEtBQUssUUFBUSxHQUFHLFNBQVMsR0FBRyxVQUFVO0FBQ3RGO0FBU0EsU0FBUyxjQUFjLFdBQTJCO0FBQ2hELFFBQU0sV0FBVyxRQUFRLFNBQVM7QUFDbEMsU0FBTyxRQUFRLGFBQWEsVUFBVSxTQUFTLFlBQVksSUFBSTtBQUNqRTtBQU9BLFNBQVMsbUJBQTZDO0FBQ3BELFFBQU0sYUFBYSxLQUFLLHFCQUFxQixHQUFHLGVBQWU7QUFDL0QsTUFBSTtBQUNGLFVBQU0sVUFBVSxhQUFhLFlBQVksT0FBTztBQUNoRCxXQUFPLEtBQUssTUFBTSxPQUFPO0FBQUEsRUFDM0IsUUFBUTtBQUNOLFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
58
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlYWRzIGFuZCBxdWVyaWVzIE9ic2lkaWFuJ3MgbG9jYWwgY29uZmlndXJhdGlvbiAoYG9ic2lkaWFuLmpzb25gKS5cbiAqL1xuXG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7XG4gIGpvaW4sXG4gIHJlc29sdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbi8qKlxuICogVGhlIHRvcC1sZXZlbCBzdHJ1Y3R1cmUgb2YgT2JzaWRpYW4ncyBgb2JzaWRpYW4uanNvbmAgY29uZmlnIGZpbGUuXG4gKi9cbmludGVyZmFjZSBPYnNpZGlhbkpzb24ge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgQ0xJIGlzIGVuYWJsZWQgaW4gT2JzaWRpYW4gc2V0dGluZ3MuXG4gICAqL1xuICBjbGk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNYXAgb2YgdmF1bHQgSURzIHRvIHZhdWx0IGVudHJpZXMuXG4gICAqL1xuICB2YXVsdHM6IFJlY29yZDxzdHJpbmcsIE9ic2lkaWFuVmF1bHRFbnRyeT47XG59XG5cbi8qKlxuICogQSBzaW5nbGUgdmF1bHQgZW50cnkgaW4gYG9ic2lkaWFuLmpzb25gLlxuICovXG5pbnRlcmZhY2UgT2JzaWRpYW5WYXVsdEVudHJ5IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHZhdWx0IGlzIGN1cnJlbnRseSBvcGVuLlxuICAgKi9cbiAgb3Blbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCBvZiB0aGUgbGFzdCBhY2Nlc3MuXG4gICAqL1xuICB0czogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGhleCB2YXVsdCBJRCBmb3IgYSBnaXZlbiB2YXVsdCBwYXRoIGZyb20gT2JzaWRpYW4ncyByZWdpc3RyeS5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAqIEByZXR1cm5zIFRoZSB2YXVsdCBJRCwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIHZhdWx0IGlzIG5vdCByZWdpc3RlcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmF1bHRJZCh2YXVsdFBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbmZpZyA9IHJlYWRPYnNpZGlhbkpzb24oKTtcbiAgaWYgKCFjb25maWcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZFRhcmdldCA9IG5vcm1hbGl6ZVBhdGgodmF1bHRQYXRoKTtcblxuICBmb3IgKGNvbnN0IFtpZCwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy52YXVsdHMpKSB7XG4gICAgaWYgKG5vcm1hbGl6ZVBhdGgoZW50cnkucGF0aCkgPT09IG5vcm1hbGl6ZWRUYXJnZXQpIHtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBPYnNpZGlhbiBDTEkgaXMgZW5hYmxlZCBpbiBPYnNpZGlhbidzIHNldHRpbmdzLlxuICpcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgQ0xJIGlzIGVuYWJsZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDbGlFbmFibGVkKCk6IGJvb2xlYW4ge1xuICBjb25zdCBjb25maWcgPSByZWFkT2JzaWRpYW5Kc29uKCk7XG4gIHJldHVybiBjb25maWc/LmNsaSA9PT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHZhdWx0IHBhdGggaXMgcmVnaXN0ZXJlZCBpbiBPYnNpZGlhbidzIHZhdWx0IHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YXVsdCBpcyByZWdpc3RlcmVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmF1bHRSZWdpc3RlcmVkKHZhdWx0UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRWYXVsdElkKHZhdWx0UGF0aCkgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBwYXRoIHRvIE9ic2lkaWFuJ3MgY29uZmlnIGRpcmVjdG9yeS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgYG9ic2lkaWFuL2AgY29uZmlnIGRpcmVjdG9yeS5cbiAqL1xuZnVuY3Rpb24gZ2V0T2JzaWRpYW5Db25maWdEaXIoKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBjb25zdCBhcHBEYXRhID0gcHJvY2Vzcy5lbnZbJ0FQUERBVEEnXTtcbiAgICBpZiAoYXBwRGF0YSkge1xuICAgICAgcmV0dXJuIGpvaW4oYXBwRGF0YSwgJ29ic2lkaWFuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGpvaW4oaG9tZWRpcigpLCAnTGlicmFyeScsICdBcHBsaWNhdGlvbiBTdXBwb3J0JywgJ29ic2lkaWFuJyk7XG4gIH1cblxuICByZXR1cm4gam9pbihwcm9jZXNzLmVudlsnWERHX0NPTkZJR19IT01FJ10gPz8gam9pbihob21lZGlyKCksICcuY29uZmlnJyksICdvYnNpZGlhbicpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSB2YXVsdCBwYXRoIGZvciBjb21wYXJpc29uLlxuICogT24gV2luZG93cywgcGF0aHMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHNlcGFyYXRvcnMgbWF5IHZhcnkuXG4gKlxuICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBwYXRoIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHBhdGguXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgodmF1bHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUodmF1bHRQYXRoKTtcbiAgcmV0dXJuIHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyByZXNvbHZlZC50b0xvd2VyQ2FzZSgpIDogcmVzb2x2ZWQ7XG59XG5cbi8qKlxuICogUmVhZHMgYW5kIHBhcnNlcyBPYnNpZGlhbidzIGBvYnNpZGlhbi5qc29uYCBjb25maWcgZmlsZS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGNvbmZpZywgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBvciBjYW4ndCBiZSBwYXJzZWQuXG4gKi9cbmZ1bmN0aW9uIHJlYWRPYnNpZGlhbkpzb24oKTogT2JzaWRpYW5Kc29uIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IGpvaW4oZ2V0T2JzaWRpYW5Db25maWdEaXIoKSwgJ29ic2lkaWFuLmpzb24nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTeW5jKGNvbmZpZ1BhdGgsICd1dGYtOCcpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIE9ic2lkaWFuSnNvbjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBTUEsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxlQUFlO0FBQ3hCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsT0FBTyxhQUFhO0FBMkNiLFNBQVMsV0FBVyxXQUF1QztBQUNoRSxRQUFNLFNBQVMsaUJBQWlCO0FBQ2hDLE1BQUksQ0FBQyxRQUFRO0FBQ1gsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLG1CQUFtQixjQUFjLFNBQVM7QUFFaEQsYUFBVyxDQUFDLElBQUksS0FBSyxLQUFLLE9BQU8sUUFBUSxPQUFPLE1BQU0sR0FBRztBQUN2RCxRQUFJLGNBQWMsTUFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQ2xELGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQU9PLFNBQVMsZUFBd0I7QUFDdEMsUUFBTSxTQUFTLGlCQUFpQjtBQUNoQyxTQUFPLFFBQVEsUUFBUTtBQUN6QjtBQVFPLFNBQVMsa0JBQWtCLFdBQTRCO0FBQzVELFNBQU8sV0FBVyxTQUFTLE1BQU07QUFDbkM7QUFPQSxTQUFTLHVCQUErQjtBQUN0QyxNQUFJLFFBQVEsYUFBYSxTQUFTO0FBQ2hDLFVBQU0sVUFBVSxRQUFRLElBQUksU0FBUztBQUNyQyxRQUFJLFNBQVM7QUFDWCxhQUFPLEtBQUssU0FBUyxVQUFVO0FBQUEsSUFDakM7QUFBQSxFQUNGO0FBRUEsTUFBSSxRQUFRLGFBQWEsVUFBVTtBQUNqQyxXQUFPLEtBQUssUUFBUSxHQUFHLFdBQVcsdUJBQXVCLFVBQVU7QUFBQSxFQUNyRTtBQUVBLFNBQU8sS0FBSyxRQUFRLElBQUksaUJBQWlCLEtBQUssS0FBSyxRQUFRLEdBQUcsU0FBUyxHQUFHLFVBQVU7QUFDdEY7QUFTQSxTQUFTLGNBQWMsV0FBMkI7QUFDaEQsUUFBTSxXQUFXLFFBQVEsU0FBUztBQUNsQyxTQUFPLFFBQVEsYUFBYSxVQUFVLFNBQVMsWUFBWSxJQUFJO0FBQ2pFO0FBT0EsU0FBUyxtQkFBNkM7QUFDcEQsUUFBTSxhQUFhLEtBQUsscUJBQXFCLEdBQUcsZUFBZTtBQUMvRCxNQUFJO0FBQ0YsVUFBTSxVQUFVLGFBQWEsWUFBWSxPQUFPO0FBQ2hELFdBQU8sS0FBSyxNQUFNLE9BQU87QUFBQSxFQUMzQixRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @packageDocumentation
2
+ * @file
3
3
  *
4
4
  * Manages temporary vault lifecycle for integration tests.
5
5
  */
@@ -42,4 +42,22 @@ export declare class TempVault {
42
42
  * @returns A promise that resolves when the vault is disposed.
43
43
  */
44
44
  [Symbol.asyncDispose](): Promise<void>;
45
+ /**
46
+ * Pushes all files from the local staging directory to the target device
47
+ * via the active transport's `pushFiles()`.
48
+ *
49
+ * On desktop transports this is a no-op (files are already local).
50
+ * On mobile transports (Appium) this pushes files to the device.
51
+ *
52
+ * Call this after {@link populate} and before {@link register} when using
53
+ * a mobile transport.
54
+ */
55
+ syncToDevice(): Promise<void>;
56
+ /**
57
+ * Recursively reads all files from a directory into a flat map.
58
+ *
59
+ * @param dir - The directory to read.
60
+ * @returns A map of relative file paths to content strings.
61
+ */
62
+ private collectFiles;
45
63
  }
@@ -3,18 +3,25 @@ import {
3
3
  mkdtempSync,
4
4
  writeFileSync
5
5
  } from "node:fs";
6
- import { rm } from "node:fs/promises";
6
+ import {
7
+ readdir,
8
+ readFile,
9
+ rm
10
+ } from "node:fs/promises";
7
11
  import { tmpdir } from "node:os";
8
12
  import {
9
13
  dirname,
10
- join
14
+ join,
15
+ relative
11
16
  } from "node:path";
17
+ import { inject } from "vitest";
18
+ import { getOrCreateTransport } from "./transport-factory.mjs";
12
19
  import {
13
20
  registerVault,
14
21
  unregisterVault
15
22
  } from "./vault-registry.mjs";
16
- const RM_RETRY_DELAY_MS = 500;
17
- const RM_RETRY_TIMEOUT_MS = 1e4;
23
+ const RM_RETRY_DELAY_IN_MILLISECONDS = 500;
24
+ const RM_RETRY_TIMEOUT_IN_MILLISECONDS = 1e4;
18
25
  class TempVault {
19
26
  /**
20
27
  * The absolute path to the temporary vault.
@@ -70,16 +77,56 @@ class TempVault {
70
77
  async [Symbol.asyncDispose]() {
71
78
  return this.dispose();
72
79
  }
80
+ /* v8 ignore start -- Integration-time code that requires a running transport via inject(). */
81
+ /**
82
+ * Pushes all files from the local staging directory to the target device
83
+ * via the active transport's `pushFiles()`.
84
+ *
85
+ * On desktop transports this is a no-op (files are already local).
86
+ * On mobile transports (Appium) this pushes files to the device.
87
+ *
88
+ * Call this after {@link populate} and before {@link register} when using
89
+ * a mobile transport.
90
+ */
91
+ async syncToDevice() {
92
+ const transport = await getOrCreateTransport(inject("obsidianTransport"));
93
+ if (!transport.pushFiles) {
94
+ return;
95
+ }
96
+ const files = await this.collectFiles(this.path);
97
+ await transport.pushFiles(this.path, files);
98
+ }
99
+ /**
100
+ * Recursively reads all files from a directory into a flat map.
101
+ *
102
+ * @param dir - The directory to read.
103
+ * @returns A map of relative file paths to content strings.
104
+ */
105
+ async collectFiles(dir) {
106
+ const result = {};
107
+ const entries = await readdir(dir, { withFileTypes: true });
108
+ for (const entry of entries) {
109
+ const fullPath = join(dir, entry.name);
110
+ const relativePath = relative(this.path, fullPath);
111
+ if (entry.isDirectory()) {
112
+ Object.assign(result, await this.collectFiles(fullPath));
113
+ } else {
114
+ result[relativePath] = await readFile(fullPath, "utf-8");
115
+ }
116
+ }
117
+ return result;
118
+ }
119
+ /* v8 ignore stop */
73
120
  }
74
121
  async function retryRm(path) {
75
- const deadline = Date.now() + RM_RETRY_TIMEOUT_MS;
122
+ const deadline = Date.now() + RM_RETRY_TIMEOUT_IN_MILLISECONDS;
76
123
  while (Date.now() < deadline) {
77
124
  try {
78
125
  await rm(path, { force: true, recursive: true });
79
126
  return;
80
127
  } catch {
81
128
  await new Promise((resolve) => {
82
- setTimeout(resolve, RM_RETRY_DELAY_MS);
129
+ setTimeout(resolve, RM_RETRY_DELAY_IN_MILLISECONDS);
83
130
  });
84
131
  }
85
132
  }
@@ -88,4 +135,4 @@ async function retryRm(path) {
88
135
  export {
89
136
  TempVault
90
137
  };
91
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RlbXAtdmF1bHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogTWFuYWdlcyB0ZW1wb3JhcnkgdmF1bHQgbGlmZWN5Y2xlIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqL1xuXG5pbXBvcnQge1xuICBta2RpclN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgcm0gfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pblxufSBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQge1xuICByZWdpc3RlclZhdWx0LFxuICB1bnJlZ2lzdGVyVmF1bHRcbn0gZnJvbSAnLi92YXVsdC1yZWdpc3RyeS5tanMnO1xuXG5jb25zdCBSTV9SRVRSWV9ERUxBWV9NUyA9IDUwMDtcbmNvbnN0IFJNX1JFVFJZX1RJTUVPVVRfTVMgPSAxMDAwMDtcblxuLyoqXG4gKiBBIHRlbXBvcmFyeSBPYnNpZGlhbiB2YXVsdCBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKlxuICogQ3JlYXRlcyBhIHRlbXAgZGlyZWN0b3J5IGFuZCByZWdpc3RlcnMgaXQgaW4gdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2VcbiAqIHNvIHRoYXQgdGhlIE9ic2lkaWFuIENMSSBjYW4gdGFyZ2V0IGl0IHZpYSBgY3dkYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBWYXVsdCB7XG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdGVtcG9yYXJ5IHZhdWx0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB0ZW1wIHZhdWx0LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIEFuIGV4cGxpY2l0IHZhdWx0IHBhdGguIElmIG9taXR0ZWQsIGEgdGVtcCBkaXJlY3RvcnkgaXMgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXRoPzogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXRoID0gcGF0aCA/PyBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCAndGVtcC12YXVsdC0nKSk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgdGhlIHZhdWx0IGZyb20gT2JzaWRpYW4gYW5kIGRlbGV0ZXMgdGhlIHRlbXAgZGlyZWN0b3J5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdW5yZWdpc3RlclZhdWx0KHRoaXMucGF0aCk7XG4gICAgYXdhaXQgcmV0cnlSbSh0aGlzLnBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlcyBmaWxlcyBhbmQgZm9sZGVycyBpbnRvIHRoZSB2YXVsdCBkaXJlY3RvcnkuXG4gICAqIFBhcmVudCBkaXJlY3RvcmllcyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgKiBQYXRocyBlbmRpbmcgd2l0aCBgL2AgYXJlIHRyZWF0ZWQgYXMgZW1wdHkgZm9sZGVycyAoY29udGVudCBtdXN0IGJlIGVtcHR5IHN0cmluZykuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlcyAtIE1hcCBvZiBmaWxlL2ZvbGRlciBwYXRocyB0byBjb250ZW50LlxuICAgKi9cbiAgcHVibGljIHBvcHVsYXRlKGZpbGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVzKSkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKHRoaXMucGF0aCwgZmlsZVBhdGgpO1xuICAgICAgaWYgKGZpbGVQYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgaWYgKGNvbnRlbnQgIT09ICcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb2xkZXIgcGF0aCBcIiR7ZmlsZVBhdGh9XCIgbXVzdCBoYXZlIGVtcHR5IGNvbnRlbnRgKTtcbiAgICAgICAgfVxuICAgICAgICBta2RpclN5bmMoZnVsbFBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWtkaXJTeW5jKGRpcm5hbWUoZnVsbFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgd3JpdGVGaWxlU3luYyhmdWxsUGF0aCwgY29udGVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGlzIHZhdWx0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHNvIHRoZSBDTEkgY2FuIHRhcmdldCBpdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWdpc3RlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCByZWdpc3RlclZhdWx0KHRoaXMucGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmMgZGlzcG9zYWJsZSBzdXBwb3J0IGZvciBgYXdhaXQgdXNpbmdgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB2YXVsdCBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcG9zZSgpO1xuICB9XG59XG5cbi8qKlxuICogUmV0cmllcyBgcm1gIHVudGlsIGl0IHN1Y2NlZWRzIG9yIHRpbWVzIG91dC5cbiAqIE9ic2lkaWFuIG1heSBob2xkIGZpbGUgbG9ja3MgYnJpZWZseSBhZnRlciBhIHdpbmRvdyBpcyBkZXN0cm95ZWQuXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRpcmVjdG9yeSBpcyByZW1vdmVkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXRyeVJtKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBSTV9SRVRSWV9USU1FT1VUX01TO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgUk1fUkVUUllfREVMQVlfTVMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8vIEZpbmFsIGF0dGVtcHQgXHUyMDE0IGxldCBpdCB0aHJvdy5cbiAgYXdhaXQgcm0ocGF0aCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBTUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxVQUFVO0FBQ25CLFNBQVMsY0FBYztBQUN2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxzQkFBc0I7QUFRckIsTUFBTSxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9ULFlBQVksTUFBZTtBQUNoQyxTQUFLLE9BQU8sUUFBUSxZQUFZLEtBQUssT0FBTyxHQUFHLGFBQWEsQ0FBQztBQUFBLEVBQy9EO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFhLFVBQXlCO0FBQ3BDLFVBQU0sZ0JBQWdCLEtBQUssSUFBSTtBQUMvQixVQUFNLFFBQVEsS0FBSyxJQUFJO0FBQUEsRUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sU0FBUyxPQUFxQztBQUNuRCxlQUFXLENBQUMsVUFBVSxPQUFPLEtBQUssT0FBTyxRQUFRLEtBQUssR0FBRztBQUN2RCxZQUFNLFdBQVcsS0FBSyxLQUFLLE1BQU0sUUFBUTtBQUN6QyxVQUFJLFNBQVMsU0FBUyxHQUFHLEdBQUc7QUFDMUIsWUFBSSxZQUFZLElBQUk7QUFDbEIsZ0JBQU0sSUFBSSxNQUFNLGdCQUFnQixRQUFRLDJCQUEyQjtBQUFBLFFBQ3JFO0FBQ0Esa0JBQVUsVUFBVSxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQUEsTUFDekMsT0FBTztBQUNMLGtCQUFVLFFBQVEsUUFBUSxHQUFHLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDaEQsc0JBQWMsVUFBVSxPQUFPO0FBQUEsTUFDakM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsTUFBYSxXQUEwQjtBQUNyQyxVQUFNLGNBQWMsS0FBSyxJQUFJO0FBQUEsRUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxPQUFjLE9BQU8sWUFBWSxJQUFtQjtBQUNsRCxXQUFPLEtBQUssUUFBUTtBQUFBLEVBQ3RCO0FBQ0Y7QUFTQSxlQUFlLFFBQVEsTUFBNkI7QUFDbEQsUUFBTSxXQUFXLEtBQUssSUFBSSxJQUFJO0FBQzlCLFNBQU8sS0FBSyxJQUFJLElBQUksVUFBVTtBQUM1QixRQUFJO0FBQ0YsWUFBTSxHQUFHLE1BQU0sRUFBRSxPQUFPLE1BQU0sV0FBVyxLQUFLLENBQUM7QUFDL0M7QUFBQSxJQUNGLFFBQVE7QUFDTixZQUFNLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDN0IsbUJBQVcsU0FBUyxpQkFBaUI7QUFBQSxNQUN2QyxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFFQSxRQUFNLEdBQUcsTUFBTSxFQUFFLE9BQU8sTUFBTSxXQUFXLEtBQUssQ0FBQztBQUNqRDsiLAogICJuYW1lcyI6IFtdCn0K
138
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RlbXAtdmF1bHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBNYW5hZ2VzIHRlbXBvcmFyeSB2YXVsdCBsaWZlY3ljbGUgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbmltcG9ydCB7XG4gIG1rZGlyU3luYyxcbiAgbWtkdGVtcFN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICByZWFkZGlyLFxuICByZWFkRmlsZSxcbiAgcm1cbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIGpvaW4sXG4gIHJlbGF0aXZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgeyBnZXRPckNyZWF0ZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcbmltcG9ydCB7XG4gIHJlZ2lzdGVyVmF1bHQsXG4gIHVucmVnaXN0ZXJWYXVsdFxufSBmcm9tICcuL3ZhdWx0LXJlZ2lzdHJ5Lm1qcyc7XG5cbmNvbnN0IFJNX1JFVFJZX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFJNX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTAwMDA7XG5cbi8qKlxuICogQSB0ZW1wb3JhcnkgT2JzaWRpYW4gdmF1bHQgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICpcbiAqIENyZWF0ZXMgYSB0ZW1wIGRpcmVjdG9yeSBhbmQgcmVnaXN0ZXJzIGl0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlXG4gKiBzbyB0aGF0IHRoZSBPYnNpZGlhbiBDTEkgY2FuIHRhcmdldCBpdCB2aWEgYGN3ZGAuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wVmF1bHQge1xuICAvKipcbiAgICogVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHRlbXBvcmFyeSB2YXVsdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdGVtcCB2YXVsdC5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBBbiBleHBsaWNpdCB2YXVsdCBwYXRoLiBJZiBvbWl0dGVkLCBhIHRlbXAgZGlyZWN0b3J5IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGF0aD86IHN0cmluZykge1xuICAgIHRoaXMucGF0aCA9IHBhdGggPz8gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgJ3RlbXAtdmF1bHQtJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXJzIHRoZSB2YXVsdCBmcm9tIE9ic2lkaWFuIGFuZCBkZWxldGVzIHRoZSB0ZW1wIGRpcmVjdG9yeS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHVucmVnaXN0ZXJWYXVsdCh0aGlzLnBhdGgpO1xuICAgIGF3YWl0IHJldHJ5Um0odGhpcy5wYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgZmlsZXMgYW5kIGZvbGRlcnMgaW50byB0aGUgdmF1bHQgZGlyZWN0b3J5LlxuICAgKiBQYXJlbnQgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS5cbiAgICogUGF0aHMgZW5kaW5nIHdpdGggYC9gIGFyZSB0cmVhdGVkIGFzIGVtcHR5IGZvbGRlcnMgKGNvbnRlbnQgbXVzdCBiZSBlbXB0eSBzdHJpbmcpLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZXMgLSBNYXAgb2YgZmlsZS9mb2xkZXIgcGF0aHMgdG8gY29udGVudC5cbiAgICovXG4gIHB1YmxpYyBwb3B1bGF0ZShmaWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhmaWxlcykpIHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gam9pbih0aGlzLnBhdGgsIGZpbGVQYXRoKTtcbiAgICAgIGlmIChmaWxlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgIGlmIChjb250ZW50ICE9PSAnJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRm9sZGVyIHBhdGggXCIke2ZpbGVQYXRofVwiIG11c3QgaGF2ZSBlbXB0eSBjb250ZW50YCk7XG4gICAgICAgIH1cbiAgICAgICAgbWtkaXJTeW5jKGZ1bGxQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1rZGlyU3luYyhkaXJuYW1lKGZ1bGxQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHdyaXRlRmlsZVN5bmMoZnVsbFBhdGgsIGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhpcyB2YXVsdCBpbiB0aGUgcnVubmluZyBPYnNpZGlhbiBpbnN0YW5jZSBzbyB0aGUgQ0xJIGNhbiB0YXJnZXQgaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgcmVnaXN0ZXJWYXVsdCh0aGlzLnBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzeW5jIGRpc3Bvc2FibGUgc3VwcG9ydCBmb3IgYGF3YWl0IHVzaW5nYC5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdmF1bHQgaXMgZGlzcG9zZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgdGhhdCByZXF1aXJlcyBhIHJ1bm5pbmcgdHJhbnNwb3J0IHZpYSBpbmplY3QoKS4gKi9cblxuICAvKipcbiAgICogUHVzaGVzIGFsbCBmaWxlcyBmcm9tIHRoZSBsb2NhbCBzdGFnaW5nIGRpcmVjdG9yeSB0byB0aGUgdGFyZ2V0IGRldmljZVxuICAgKiB2aWEgdGhlIGFjdGl2ZSB0cmFuc3BvcnQncyBgcHVzaEZpbGVzKClgLlxuICAgKlxuICAgKiBPbiBkZXNrdG9wIHRyYW5zcG9ydHMgdGhpcyBpcyBhIG5vLW9wIChmaWxlcyBhcmUgYWxyZWFkeSBsb2NhbCkuXG4gICAqIE9uIG1vYmlsZSB0cmFuc3BvcnRzIChBcHBpdW0pIHRoaXMgcHVzaGVzIGZpbGVzIHRvIHRoZSBkZXZpY2UuXG4gICAqXG4gICAqIENhbGwgdGhpcyBhZnRlciB7QGxpbmsgcG9wdWxhdGV9IGFuZCBiZWZvcmUge0BsaW5rIHJlZ2lzdGVyfSB3aGVuIHVzaW5nXG4gICAqIGEgbW9iaWxlIHRyYW5zcG9ydC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzeW5jVG9EZXZpY2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdHJhbnNwb3J0ID0gYXdhaXQgZ2V0T3JDcmVhdGVUcmFuc3BvcnQoaW5qZWN0KCdvYnNpZGlhblRyYW5zcG9ydCcpKTtcbiAgICBpZiAoIXRyYW5zcG9ydC5wdXNoRmlsZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMuY29sbGVjdEZpbGVzKHRoaXMucGF0aCk7XG4gICAgYXdhaXQgdHJhbnNwb3J0LnB1c2hGaWxlcyh0aGlzLnBhdGgsIGZpbGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSByZWFkcyBhbGwgZmlsZXMgZnJvbSBhIGRpcmVjdG9yeSBpbnRvIGEgZmxhdCBtYXAuXG4gICAqXG4gICAqIEBwYXJhbSBkaXIgLSBUaGUgZGlyZWN0b3J5IHRvIHJlYWQuXG4gICAqIEByZXR1cm5zIEEgbWFwIG9mIHJlbGF0aXZlIGZpbGUgcGF0aHMgdG8gY29udGVudCBzdHJpbmdzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb2xsZWN0RmlsZXMoZGlyOiBzdHJpbmcpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihkaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKGRpciwgZW50cnkubmFtZSk7XG4gICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZSh0aGlzLnBhdGgsIGZ1bGxQYXRoKTtcblxuICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIGF3YWl0IHRoaXMuY29sbGVjdEZpbGVzKGZ1bGxQYXRoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbcmVsYXRpdmVQYXRoXSA9IGF3YWl0IHJlYWRGaWxlKGZ1bGxQYXRoLCAndXRmLTgnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG59XG5cbi8qKlxuICogUmV0cmllcyBgcm1gIHVudGlsIGl0IHN1Y2NlZWRzIG9yIHRpbWVzIG91dC5cbiAqIE9ic2lkaWFuIG1heSBob2xkIGZpbGUgbG9ja3MgYnJpZWZseSBhZnRlciBhIHdpbmRvdyBpcyBkZXN0cm95ZWQuXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRpcmVjdG9yeSBpcyByZW1vdmVkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXRyeVJtKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBSTV9SRVRSWV9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBybShwYXRoLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIFJNX1JFVFJZX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLy8gRmluYWwgYXR0ZW1wdCBcdTIwMTQgbGV0IGl0IHRocm93LlxuICBhd2FpdCBybShwYXRoLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFNQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGNBQWM7QUFDdkI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxjQUFjO0FBRXZCLFNBQVMsNEJBQTRCO0FBQ3JDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsTUFBTSxpQ0FBaUM7QUFDdkMsTUFBTSxtQ0FBbUM7QUFRbEMsTUFBTSxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9ULFlBQVksTUFBZTtBQUNoQyxTQUFLLE9BQU8sUUFBUSxZQUFZLEtB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