obsidian-integration-testing 1.3.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +54 -11
  2. package/dist/lib/cjs/context-provider.cjs +37 -0
  3. package/dist/lib/cjs/context-provider.d.cts +28 -0
  4. package/dist/lib/cjs/global-setup-core.cjs +126 -0
  5. package/dist/lib/cjs/global-setup-core.d.cts +48 -0
  6. package/dist/lib/cjs/index.cjs +4 -2
  7. package/dist/lib/cjs/index.d.cts +2 -1
  8. package/dist/lib/cjs/jest/global-setup.cjs +63 -0
  9. package/dist/lib/cjs/jest/global-setup.d.cts +61 -0
  10. package/dist/lib/cjs/obsidian-cli.cjs +3 -3
  11. package/dist/lib/cjs/obsidian-cli.d.cts +1 -1
  12. package/dist/lib/cjs/temp-vault.cjs +7 -7
  13. package/dist/lib/cjs/temp-vault.d.cts +3 -3
  14. package/dist/lib/cjs/transport-desktop-cdp.cjs +25 -1
  15. package/dist/lib/cjs/transport-desktop-cdp.d.cts +12 -0
  16. package/dist/lib/cjs/transport-desktop-cli.cjs +24 -1
  17. package/dist/lib/cjs/transport-desktop-cli.d.cts +11 -0
  18. package/dist/lib/cjs/vault-registry.cjs +4 -4
  19. package/dist/lib/cjs/vault-registry.d.cts +8 -2
  20. package/dist/lib/cjs/vitest/global-setup.cjs +52 -0
  21. package/dist/lib/{esm/integration-global-setup.d.mts → cjs/vitest/global-setup.d.cts} +5 -2
  22. package/dist/lib/{esm/vitest.d.mts → cjs/vitest/typings.d.cts} +1 -1
  23. package/dist/lib/esm/context-provider.d.mts +28 -0
  24. package/dist/lib/esm/context-provider.mjs +12 -0
  25. package/dist/lib/esm/global-setup-core.d.mts +48 -0
  26. package/dist/lib/esm/global-setup-core.mjs +107 -0
  27. package/dist/lib/esm/index.d.mts +2 -1
  28. package/dist/lib/esm/index.mjs +3 -2
  29. package/dist/lib/esm/jest/global-setup.d.mts +61 -0
  30. package/dist/lib/esm/jest/global-setup.mjs +39 -0
  31. package/dist/lib/esm/obsidian-cli.d.mts +1 -1
  32. package/dist/lib/esm/obsidian-cli.mjs +3 -3
  33. package/dist/lib/esm/temp-vault.d.mts +3 -3
  34. package/dist/lib/esm/temp-vault.mjs +7 -7
  35. package/dist/lib/esm/transport-desktop-cdp.d.mts +12 -0
  36. package/dist/lib/esm/transport-desktop-cdp.mjs +29 -2
  37. package/dist/lib/esm/transport-desktop-cli.d.mts +11 -0
  38. package/dist/lib/esm/transport-desktop-cli.mjs +25 -1
  39. package/dist/lib/esm/vault-registry.d.mts +8 -2
  40. package/dist/lib/esm/vault-registry.mjs +4 -4
  41. package/dist/lib/{cjs/integration-global-setup.d.cts → esm/vitest/global-setup.d.mts} +5 -2
  42. package/dist/lib/esm/vitest/global-setup.mjs +29 -0
  43. package/dist/lib/{cjs/vitest.d.cts → esm/vitest/typings.d.mts} +1 -1
  44. package/dist/obsidian-integration-testing-2.0.0.tgz +0 -0
  45. package/package.json +25 -11
  46. package/dist/lib/cjs/integration-global-setup.cjs +0 -132
  47. package/dist/lib/esm/integration-global-setup.mjs +0 -112
  48. package/dist/obsidian-integration-testing-1.3.2.tgz +0 -0
  49. /package/dist/lib/cjs/{vitest.cjs → vitest/typings.cjs} +0 -0
  50. /package/dist/lib/esm/{vitest.mjs → vitest/typings.mjs} +0 -0
@@ -1,3 +1,9 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Manages vault registration in the running Obsidian instance.
5
+ * Delegates to the transport resolved from the context provider.
6
+ */
1
7
  import type { ObsidianTransport } from './transport.cjs';
2
8
  /**
3
9
  * Registers a vault path in the running Obsidian instance.
@@ -6,7 +12,7 @@ import type { ObsidianTransport } from './transport.cjs';
6
12
  *
7
13
  * @param vaultPath - The absolute path to the vault folder.
8
14
  * @param transportOverride - An explicit transport to use. When omitted,
9
- * falls back to `inject('obsidianTransport')` (requires vitest worker context).
15
+ * falls back to the transport configured via the context provider.
10
16
  */
11
17
  export declare function registerVault(vaultPath: string, transportOverride?: ObsidianTransport): Promise<void>;
12
18
  /**
@@ -16,6 +22,6 @@ export declare function registerVault(vaultPath: string, transportOverride?: Obs
16
22
  *
17
23
  * @param vaultPath - The absolute path to the vault folder.
18
24
  * @param transportOverride - An explicit transport to use. When omitted,
19
- * falls back to `inject('obsidianTransport')` (requires vitest worker context).
25
+ * falls back to the transport configured via the context provider.
20
26
  */
21
27
  export declare function unregisterVault(vaultPath: string, transportOverride?: ObsidianTransport): Promise<void>;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var global_setup_exports = {};
20
+ __export(global_setup_exports, {
21
+ getTempVault: () => getTempVault,
22
+ setup: () => setup,
23
+ teardown: () => teardown
24
+ });
25
+ module.exports = __toCommonJS(global_setup_exports);
26
+ var import_vitest = require("vitest");
27
+ var import_context_provider = require("../context-provider.cjs");
28
+ var import_global_setup_core = require("../global-setup-core.cjs");
29
+ var import_temp_vault = require("../temp-vault.cjs");
30
+ (0, import_context_provider.setTransportOptionsResolver)(() => (0, import_vitest.inject)("obsidianTransport"));
31
+ let setupResult;
32
+ function getTempVault() {
33
+ const tempVaultPath = (0, import_vitest.inject)("tempVaultPath");
34
+ return new import_temp_vault.TempVault(tempVaultPath);
35
+ }
36
+ async function setup(project) {
37
+ const environmentOptions = project.config.environmentOptions;
38
+ const transportOptions = environmentOptions?.["obsidianTransport"];
39
+ setupResult = await (0, import_global_setup_core.coreSetup)({ transportOptions });
40
+ project.provide("obsidianTransport", setupResult.transportOptions);
41
+ project.provide("tempVaultPath", setupResult.tempVault.path);
42
+ }
43
+ async function teardown() {
44
+ await (0, import_global_setup_core.coreTeardown)(setupResult);
45
+ }
46
+ // Annotate the CommonJS export names for ESM import in node:
47
+ 0 && (module.exports = {
48
+ getTempVault,
49
+ setup,
50
+ teardown
51
+ });
52
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3ZpdGVzdC9nbG9iYWwtc2V0dXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBWaXRlc3QgZ2xvYmFsIHNldHVwIGFuZCB0ZWFyZG93biBhZGFwdGVyLlxuICpcbiAqIERlbGVnYXRlcyB0byB0aGUgZnJhbWV3b3JrLWFnbm9zdGljIGNvcmUgYW5kIGJyaWRnZXMgY29udGV4dFxuICogdG8gdGVzdCB3b3JrZXJzIHZpYSBWaXRlc3QncyBgcHJvamVjdC5wcm92aWRlYCAvIGBpbmplY3RgLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IFRlc3RQcm9qZWN0IH0gZnJvbSAndml0ZXN0L25vZGUnO1xuXG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IENvcmVTZXR1cFJlc3VsdCB9IGZyb20gJy4uL2dsb2JhbC1zZXR1cC1jb3JlLmNqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4uL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5cbmltcG9ydCB7IHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlciB9IGZyb20gJy4uL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmltcG9ydCB7XG4gIGNvcmVTZXR1cCxcbiAgY29yZVRlYXJkb3duXG59IGZyb20gJy4uL2dsb2JhbC1zZXR1cC1jb3JlLmNqcyc7XG5pbXBvcnQgeyBUZW1wVmF1bHQgfSBmcm9tICcuLi90ZW1wLXZhdWx0LmNqcyc7XG5cbnNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcigoKSA9PiBpbmplY3QoJ29ic2lkaWFuVHJhbnNwb3J0JykpO1xuXG5sZXQgc2V0dXBSZXN1bHQ6IENvcmVTZXR1cFJlc3VsdCB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0ZW1wb3JhcnkgdmF1bHQgcHJvdmlkZWQgYnkgdGhlIGdsb2JhbCBzZXR1cC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdGVtcG9yYXJ5IHZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcFZhdWx0KCk6IFRlbXBWYXVsdCB7XG4gIGNvbnN0IHRlbXBWYXVsdFBhdGggPSBpbmplY3QoJ3RlbXBWYXVsdFBhdGgnKTtcbiAgcmV0dXJuIG5ldyBUZW1wVmF1bHQodGVtcFZhdWx0UGF0aCk7XG59XG5cbi8qKlxuICogVml0ZXN0IGdsb2JhbCBzZXR1cCBmdW5jdGlvbi5cbiAqXG4gKiBDb3BpZXMgdGhlIGJ1aWx0IHBsdWdpbiBpbnRvIGEgdGVtcG9yYXJ5IHZhdWx0LCBlbmFibGVzIGl0IHZpYSB0aGUgT2JzaWRpYW4gQ0xJLFxuICogYW5kIHByb3ZpZGVzIGB0ZW1wVmF1bHRQYXRoYCB0byB0ZXN0cy5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdCAtIFRoZSBWaXRlc3QgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwKHByb2plY3Q6IFRlc3RQcm9qZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGVudmlyb25tZW50T3B0aW9ucyA9IHByb2plY3QuY29uZmlnLmVudmlyb25tZW50T3B0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgY29uc3QgdHJhbnNwb3J0T3B0aW9ucyA9IGVudmlyb25tZW50T3B0aW9ucz8uWydvYnNpZGlhblRyYW5zcG9ydCddIGFzIE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB8IHVuZGVmaW5lZDtcblxuICBzZXR1cFJlc3VsdCA9IGF3YWl0IGNvcmVTZXR1cCh7IHRyYW5zcG9ydE9wdGlvbnMgfSk7XG5cbiAgcHJvamVjdC5wcm92aWRlKCdvYnNpZGlhblRyYW5zcG9ydCcsIHNldHVwUmVzdWx0LnRyYW5zcG9ydE9wdGlvbnMpO1xuICBwcm9qZWN0LnByb3ZpZGUoJ3RlbXBWYXVsdFBhdGgnLCBzZXR1cFJlc3VsdC50ZW1wVmF1bHQucGF0aCk7XG59XG5cbi8qKlxuICogVml0ZXN0IGdsb2JhbCB0ZWFyZG93biBmdW5jdGlvbi5cbiAqXG4gKiBSZW1vdmVzIHRoZSB0ZW1wb3JhcnkgdmF1bHQgY3JlYXRlZCBkdXJpbmcgc2V0dXAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZWFyZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgY29yZVRlYXJkb3duKHNldHVwUmVzdWx0KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYUEsb0JBQXVCO0FBS3ZCLDhCQUE0QztBQUM1QywrQkFHTztBQUNQLHdCQUEwQjtBQUFBLElBRTFCLHFEQUE0QixVQUFNLHNCQUFPLG1CQUFtQixDQUFDO0FBRTdELElBQUk7QUFPRyxTQUFTLGVBQTBCO0FBQ3hDLFFBQU0sb0JBQWdCLHNCQUFPLGVBQWU7QUFDNUMsU0FBTyxJQUFJLDRCQUFVLGFBQWE7QUFDcEM7QUFVQSxlQUFzQixNQUFNLFNBQXFDO0FBQy9ELFFBQU0scUJBQXFCLFFBQVEsT0FBTztBQUMxQyxRQUFNLG1CQUFtQixxQkFBcUIsbUJBQW1CO0FBRWpFLGdCQUFjLFVBQU0sb0NBQVUsRUFBRSxpQkFBaUIsQ0FBQztBQUVsRCxVQUFRLFFBQVEscUJBQXFCLFlBQVksZ0JBQWdCO0FBQ2pFLFVBQVEsUUFBUSxpQkFBaUIsWUFBWSxVQUFVLElBQUk7QUFDN0Q7QUFPQSxlQUFzQixXQUEwQjtBQUM5QyxZQUFNLHVDQUFhLFdBQVc7QUFDaEM7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -1,10 +1,13 @@
1
1
  /**
2
2
  * @file
3
3
  *
4
- * Contains the global setup and teardown functions for integration tests.
4
+ * Vitest global setup and teardown adapter.
5
+ *
6
+ * Delegates to the framework-agnostic core and bridges context
7
+ * to test workers via Vitest's `project.provide` / `inject`.
5
8
  */
6
9
  import type { TestProject } from 'vitest/node';
7
- import { TempVault } from './temp-vault.mjs';
10
+ import { TempVault } from '../temp-vault.cjs';
8
11
  /**
9
12
  * Returns the temporary vault provided by the global setup.
10
13
  *
@@ -7,7 +7,7 @@
7
7
  * Provides intellisense for `environmentOptions.obsidianTransport`
8
8
  * and `inject('obsidianTransport')` / `inject('tempVaultPath')`.
9
9
  */
10
- import type { ObsidianTransportOptions } from './transport-options.mjs';
10
+ import type { ObsidianTransportOptions } from '../transport-options.cjs';
11
11
  declare module 'vitest' {
12
12
  interface ProvidedContext {
13
13
  /**
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Framework-neutral context provider for integration test state.
5
+ *
6
+ * Each framework adapter (vitest, jest) registers a resolver via
7
+ * {@link setTransportOptionsResolver} during module initialization.
8
+ * Core modules call {@link getTransportOptions} to retrieve the
9
+ * transport options without depending on any specific test framework.
10
+ */
11
+ import type { ObsidianTransportOptions } from './transport-options.mjs';
12
+ /**
13
+ * A function that resolves the current transport options.
14
+ */
15
+ export type TransportOptionsResolver = () => ObsidianTransportOptions | undefined;
16
+ /**
17
+ * Returns the transport options resolved by the registered framework adapter.
18
+ *
19
+ * @returns The transport options, or `undefined` if not configured (defaults to CLI transport).
20
+ */
21
+ export declare function getTransportOptions(): ObsidianTransportOptions | undefined;
22
+ /**
23
+ * Registers a resolver function for transport options. Called by framework
24
+ * adapters at module load time to bridge their native injection mechanisms.
25
+ *
26
+ * @param fn - The resolver function.
27
+ */
28
+ export declare function setTransportOptionsResolver(fn: TransportOptionsResolver): void;
@@ -0,0 +1,12 @@
1
+ let resolver;
2
+ function getTransportOptions() {
3
+ return resolver?.();
4
+ }
5
+ function setTransportOptionsResolver(fn) {
6
+ resolver = fn;
7
+ }
8
+ export {
9
+ getTransportOptions,
10
+ setTransportOptionsResolver
11
+ };
12
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbnRleHQtcHJvdmlkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBGcmFtZXdvcmstbmV1dHJhbCBjb250ZXh0IHByb3ZpZGVyIGZvciBpbnRlZ3JhdGlvbiB0ZXN0IHN0YXRlLlxuICpcbiAqIEVhY2ggZnJhbWV3b3JrIGFkYXB0ZXIgKHZpdGVzdCwgamVzdCkgcmVnaXN0ZXJzIGEgcmVzb2x2ZXIgdmlhXG4gKiB7QGxpbmsgc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyfSBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLlxuICogQ29yZSBtb2R1bGVzIGNhbGwge0BsaW5rIGdldFRyYW5zcG9ydE9wdGlvbnN9IHRvIHJldHJpZXZlIHRoZVxuICogdHJhbnNwb3J0IG9wdGlvbnMgd2l0aG91dCBkZXBlbmRpbmcgb24gYW55IHNwZWNpZmljIHRlc3QgZnJhbWV3b3JrLlxuICovXG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5tanMnO1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgY3VycmVudCB0cmFuc3BvcnQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyID0gKCkgPT4gT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkO1xuXG5sZXQgcmVzb2x2ZXI6IFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlciB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cmFuc3BvcnQgb3B0aW9ucyByZXNvbHZlZCBieSB0aGUgcmVnaXN0ZXJlZCBmcmFtZXdvcmsgYWRhcHRlci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdHJhbnNwb3J0IG9wdGlvbnMsIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBjb25maWd1cmVkIChkZWZhdWx0cyB0byBDTEkgdHJhbnNwb3J0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zcG9ydE9wdGlvbnMoKTogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHJlc29sdmVyPy4oKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSByZXNvbHZlciBmdW5jdGlvbiBmb3IgdHJhbnNwb3J0IG9wdGlvbnMuIENhbGxlZCBieSBmcmFtZXdvcmtcbiAqIGFkYXB0ZXJzIGF0IG1vZHVsZSBsb2FkIHRpbWUgdG8gYnJpZGdlIHRoZWlyIG5hdGl2ZSBpbmplY3Rpb24gbWVjaGFuaXNtcy5cbiAqXG4gKiBAcGFyYW0gZm4gLSBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRUcmFuc3BvcnRPcHRpb25zUmVzb2x2ZXIoZm46IFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcik6IHZvaWQge1xuICByZXNvbHZlciA9IGZuO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBa0JBLElBQUk7QUFPRyxTQUFTLHNCQUE0RDtBQUMxRSxTQUFPLFdBQVc7QUFDcEI7QUFRTyxTQUFTLDRCQUE0QixJQUFvQztBQUM5RSxhQUFXO0FBQ2I7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Framework-agnostic core logic for integration test global setup and teardown.
5
+ *
6
+ * Vitest and Jest adapters delegate to these functions.
7
+ */
8
+ import type { ObsidianTransportOptions } from './transport-options.mjs';
9
+ import type { ObsidianTransport } from './transport.mjs';
10
+ import { TempVault } from './temp-vault.mjs';
11
+ /**
12
+ * Parameters for {@link coreSetup}.
13
+ */
14
+ export interface CoreSetupParams {
15
+ /** Transport options. When omitted, defaults to the CLI transport. */
16
+ transportOptions?: ObsidianTransportOptions | undefined;
17
+ }
18
+ /**
19
+ * Result returned by {@link coreSetup}, used by framework adapters
20
+ * to pass context to test workers.
21
+ */
22
+ export interface CoreSetupResult {
23
+ /** The temporary vault created during setup. */
24
+ tempVault: TempVault;
25
+ /** The transport instance used during setup. */
26
+ transport: ObsidianTransport;
27
+ /** The transport options that were resolved. */
28
+ transportOptions: ObsidianTransportOptions | undefined;
29
+ }
30
+ /**
31
+ * Framework-agnostic global setup logic.
32
+ *
33
+ * Loads `.env` from the project root, creates a transport, copies the built
34
+ * plugin into a temporary vault, registers the vault with Obsidian, and
35
+ * enables the plugin.
36
+ *
37
+ * @param params - Setup parameters.
38
+ * @returns The setup result containing the temp vault, transport, and resolved options.
39
+ */
40
+ export declare function coreSetup(params?: CoreSetupParams): Promise<CoreSetupResult>;
41
+ /**
42
+ * Framework-agnostic global teardown logic.
43
+ *
44
+ * Disposes of the temporary vault and transport created during setup.
45
+ *
46
+ * @param result - The result from {@link coreSetup}. When `undefined`, does nothing.
47
+ */
48
+ export declare function coreTeardown(result?: CoreSetupResult): Promise<void>;
@@ -0,0 +1,107 @@
1
+ import { existsSync } from "node:fs";
2
+ import {
3
+ cp,
4
+ mkdir,
5
+ readFile,
6
+ stat,
7
+ writeFile
8
+ } from "node:fs/promises";
9
+ import { join } from "node:path";
10
+ import { loadEnvFile } from "node:process";
11
+ import { enablePluginWithErrorCapture } from "./enable-plugin.mjs";
12
+ import { evalInObsidian } from "./obsidian-cli.mjs";
13
+ import { TempVault } from "./temp-vault.mjs";
14
+ import { createTransportFromOptions } from "./transport-factory.mjs";
15
+ const DIST_DEV = "dist/dev";
16
+ const DIST_BUILD = "dist/build";
17
+ const MAIN_JS = "main.js";
18
+ const OBSIDIAN_CONFIG_DIR = ".obsidian";
19
+ const PLUGINS_DIR = "plugins";
20
+ const COMMUNITY_PLUGINS_JSON = "community-plugins.json";
21
+ async function coreSetup(params) {
22
+ const projectRoot = findProjectRoot();
23
+ const envFilePath = join(projectRoot, ".env");
24
+ if (existsSync(envFilePath)) {
25
+ loadEnvFile(envFilePath);
26
+ }
27
+ const transportOptions = params?.transportOptions;
28
+ console.warn("[integration-setup] Creating transport...");
29
+ const transport = await createTransportFromOptions(transportOptions);
30
+ console.warn(`[integration-setup] Transport created: ${transport.constructor.name}`);
31
+ console.warn(`[integration-setup] Project root: ${projectRoot}`);
32
+ const distPath = await resolveDistPath(projectRoot);
33
+ const manifestJson = JSON.parse(await readFile(join(distPath, "manifest.json"), "utf-8"));
34
+ const pluginId = manifestJson.id;
35
+ if (transport.isMobile && manifestJson.isDesktopOnly) {
36
+ throw new Error(
37
+ `Plugin "${pluginId}" has isDesktopOnly: true in manifest.json. Mobile integration tests cannot run for desktop-only plugins.`
38
+ );
39
+ }
40
+ const mainJs = join(distPath, MAIN_JS);
41
+ const buildStat = await stat(mainJs);
42
+ console.warn(`[integration-setup] Using ${distPath} (${buildStat.mtime.toISOString()}). If outdated, rebuild.`);
43
+ const tempVault = new TempVault();
44
+ console.warn(`[integration-setup] Created temp vault: ${tempVault.path}`);
45
+ const pluginDir = join(tempVault.path, OBSIDIAN_CONFIG_DIR, PLUGINS_DIR, pluginId);
46
+ await mkdir(pluginDir, { recursive: true });
47
+ await cp(distPath, pluginDir, { recursive: true });
48
+ await writeFile(join(tempVault.path, OBSIDIAN_CONFIG_DIR, COMMUNITY_PLUGINS_JSON), JSON.stringify([pluginId]));
49
+ console.warn("[integration-setup] Syncing vault to device...");
50
+ await tempVault.syncToDevice(transport);
51
+ console.warn("[integration-setup] Registering vault...");
52
+ await tempVault.register(transport);
53
+ console.warn("[integration-setup] Vault registered.");
54
+ console.warn(`[integration-setup] Enabling plugin "${pluginId}"...`);
55
+ const { errorMessage } = await evalInObsidian({
56
+ args: { pluginId },
57
+ fn: enablePluginWithErrorCapture,
58
+ shouldSkipPreflightChecks: true,
59
+ transport,
60
+ vaultPath: tempVault.path
61
+ });
62
+ if (errorMessage) {
63
+ throw new Error(`Plugin "${pluginId}" failed to load: ${errorMessage}`);
64
+ }
65
+ console.warn(`[integration-setup] Plugin "${pluginId}" enabled successfully.`);
66
+ return { tempVault, transport, transportOptions };
67
+ }
68
+ async function coreTeardown(result) {
69
+ await result?.tempVault.dispose(result.transport);
70
+ await result?.transport.dispose?.();
71
+ }
72
+ function findProjectRoot() {
73
+ let dir = process.cwd();
74
+ while (true) {
75
+ if (existsSync(join(dir, "package.json"))) {
76
+ return dir;
77
+ }
78
+ const parent = join(dir, "..");
79
+ if (parent === dir) {
80
+ throw new Error("Could not find project root (no package.json found).");
81
+ }
82
+ dir = parent;
83
+ }
84
+ }
85
+ async function resolveDistPath(projectRoot) {
86
+ const devPath = join(projectRoot, DIST_DEV);
87
+ const buildPath = join(projectRoot, DIST_BUILD);
88
+ const devMainJs = join(devPath, MAIN_JS);
89
+ const buildMainJs = join(buildPath, MAIN_JS);
90
+ const devStat = existsSync(devMainJs) ? await stat(devMainJs) : null;
91
+ const buildStat = existsSync(buildMainJs) ? await stat(buildMainJs) : null;
92
+ if (devStat && buildStat) {
93
+ return devStat.mtime > buildStat.mtime ? devPath : buildPath;
94
+ }
95
+ if (devStat) {
96
+ return devPath;
97
+ }
98
+ if (buildStat) {
99
+ return buildPath;
100
+ }
101
+ throw new Error("No build found. Run `npm run build` or `npm run dev` first.");
102
+ }
103
+ export {
104
+ coreSetup,
105
+ coreTeardown
106
+ };
107
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2dsb2JhbC1zZXR1cC1jb3JlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRnJhbWV3b3JrLWFnbm9zdGljIGNvcmUgbG9naWMgZm9yIGludGVncmF0aW9uIHRlc3QgZ2xvYmFsIHNldHVwIGFuZCB0ZWFyZG93bi5cbiAqXG4gKiBWaXRlc3QgYW5kIEplc3QgYWRhcHRlcnMgZGVsZWdhdGUgdG8gdGhlc2UgZnVuY3Rpb25zLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk1hbmlmZXN0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBjcCxcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBzdGF0LFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGxvYWRFbnZGaWxlIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLm1qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQubWpzJztcblxuaW1wb3J0IHsgZW5hYmxlUGx1Z2luV2l0aEVycm9yQ2FwdHVyZSB9IGZyb20gJy4vZW5hYmxlLXBsdWdpbi5tanMnO1xuaW1wb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL29ic2lkaWFuLWNsaS5tanMnO1xuaW1wb3J0IHsgVGVtcFZhdWx0IH0gZnJvbSAnLi90ZW1wLXZhdWx0Lm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcblxuY29uc3QgRElTVF9ERVYgPSAnZGlzdC9kZXYnO1xuY29uc3QgRElTVF9CVUlMRCA9ICdkaXN0L2J1aWxkJztcbmNvbnN0IE1BSU5fSlMgPSAnbWFpbi5qcyc7XG5jb25zdCBPQlNJRElBTl9DT05GSUdfRElSID0gJy5vYnNpZGlhbic7XG5jb25zdCBQTFVHSU5TX0RJUiA9ICdwbHVnaW5zJztcbmNvbnN0IENPTU1VTklUWV9QTFVHSU5TX0pTT04gPSAnY29tbXVuaXR5LXBsdWdpbnMuanNvbic7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvcmVTZXR1cH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29yZVNldHVwUGFyYW1zIHtcbiAgLyoqIFRyYW5zcG9ydCBvcHRpb25zLiBXaGVuIG9taXR0ZWQsIGRlZmF1bHRzIHRvIHRoZSBDTEkgdHJhbnNwb3J0LiAqL1xuICB0cmFuc3BvcnRPcHRpb25zPzogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc3VsdCByZXR1cm5lZCBieSB7QGxpbmsgY29yZVNldHVwfSwgdXNlZCBieSBmcmFtZXdvcmsgYWRhcHRlcnNcbiAqIHRvIHBhc3MgY29udGV4dCB0byB0ZXN0IHdvcmtlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29yZVNldHVwUmVzdWx0IHtcbiAgLyoqIFRoZSB0ZW1wb3JhcnkgdmF1bHQgY3JlYXRlZCBkdXJpbmcgc2V0dXAuICovXG4gIHRlbXBWYXVsdDogVGVtcFZhdWx0O1xuXG4gIC8qKiBUaGUgdHJhbnNwb3J0IGluc3RhbmNlIHVzZWQgZHVyaW5nIHNldHVwLiAqL1xuICB0cmFuc3BvcnQ6IE9ic2lkaWFuVHJhbnNwb3J0O1xuXG4gIC8qKiBUaGUgdHJhbnNwb3J0IG9wdGlvbnMgdGhhdCB3ZXJlIHJlc29sdmVkLiAqL1xuICB0cmFuc3BvcnRPcHRpb25zOiBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRnJhbWV3b3JrLWFnbm9zdGljIGdsb2JhbCBzZXR1cCBsb2dpYy5cbiAqXG4gKiBMb2FkcyBgLmVudmAgZnJvbSB0aGUgcHJvamVjdCByb290LCBjcmVhdGVzIGEgdHJhbnNwb3J0LCBjb3BpZXMgdGhlIGJ1aWx0XG4gKiBwbHVnaW4gaW50byBhIHRlbXBvcmFyeSB2YXVsdCwgcmVnaXN0ZXJzIHRoZSB2YXVsdCB3aXRoIE9ic2lkaWFuLCBhbmRcbiAqIGVuYWJsZXMgdGhlIHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gU2V0dXAgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBzZXR1cCByZXN1bHQgY29udGFpbmluZyB0aGUgdGVtcCB2YXVsdCwgdHJhbnNwb3J0LCBhbmQgcmVzb2x2ZWQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvcmVTZXR1cChwYXJhbXM/OiBDb3JlU2V0dXBQYXJhbXMpOiBQcm9taXNlPENvcmVTZXR1cFJlc3VsdD4ge1xuICBjb25zdCBwcm9qZWN0Um9vdCA9IGZpbmRQcm9qZWN0Um9vdCgpO1xuICBjb25zdCBlbnZGaWxlUGF0aCA9IGpvaW4ocHJvamVjdFJvb3QsICcuZW52Jyk7XG4gIGlmIChleGlzdHNTeW5jKGVudkZpbGVQYXRoKSkge1xuICAgIGxvYWRFbnZGaWxlKGVudkZpbGVQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IHRyYW5zcG9ydE9wdGlvbnMgPSBwYXJhbXM/LnRyYW5zcG9ydE9wdGlvbnM7XG4gIGNvbnNvbGUud2FybignW2ludGVncmF0aW9uLXNldHVwXSBDcmVhdGluZyB0cmFuc3BvcnQuLi4nKTtcbiAgY29uc3QgdHJhbnNwb3J0ID0gYXdhaXQgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnModHJhbnNwb3J0T3B0aW9ucyk7XG4gIGNvbnNvbGUud2FybihgW2ludGVncmF0aW9uLXNldHVwXSBUcmFuc3BvcnQgY3JlYXRlZDogJHt0cmFuc3BvcnQuY29uc3RydWN0b3IubmFtZX1gKTtcblxuICBjb25zb2xlLndhcm4oYFtpbnRlZ3JhdGlvbi1zZXR1cF0gUHJvamVjdCByb290OiAke3Byb2plY3RSb290fWApO1xuICBjb25zdCBkaXN0UGF0aCA9IGF3YWl0IHJlc29sdmVEaXN0UGF0aChwcm9qZWN0Um9vdCk7XG4gIGNvbnN0IG1hbmlmZXN0SnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUoam9pbihkaXN0UGF0aCwgJ21hbmlmZXN0Lmpzb24nKSwgJ3V0Zi04JykpIGFzIFBsdWdpbk1hbmlmZXN0O1xuICBjb25zdCBwbHVnaW5JZCA9IG1hbmlmZXN0SnNvbi5pZDtcblxuICBpZiAodHJhbnNwb3J0LmlzTW9iaWxlICYmIG1hbmlmZXN0SnNvbi5pc0Rlc2t0b3BPbmx5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luSWR9XCIgaGFzIGlzRGVza3RvcE9ubHk6IHRydWUgaW4gbWFuaWZlc3QuanNvbi4gTW9iaWxlIGludGVncmF0aW9uIHRlc3RzIGNhbm5vdCBydW4gZm9yIGRlc2t0b3Atb25seSBwbHVnaW5zLmBcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbWFpbkpzID0gam9pbihkaXN0UGF0aCwgTUFJTl9KUyk7XG4gIGNvbnN0IGJ1aWxkU3RhdCA9IGF3YWl0IHN0YXQobWFpbkpzKTtcblxuICBjb25zb2xlLndhcm4oYFtpbnRlZ3JhdGlvbi1zZXR1cF0gVXNpbmcgJHtkaXN0UGF0aH0gKCR7YnVpbGRTdGF0Lm10aW1lLnRvSVNPU3RyaW5nKCl9KS4gSWYgb3V0ZGF0ZWQsIHJlYnVpbGQuYCk7XG5cbiAgY29uc3QgdGVtcFZhdWx0ID0gbmV3IFRlbXBWYXVsdCgpO1xuICBjb25zb2xlLndhcm4oYFtpbnRlZ3JhdGlvbi1zZXR1cF0gQ3JlYXRlZCB0ZW1wIHZhdWx0OiAke3RlbXBWYXVsdC5wYXRofWApO1xuICBjb25zdCBwbHVnaW5EaXIgPSBqb2luKHRlbXBWYXVsdC5wYXRoLCBPQlNJRElBTl9DT05GSUdfRElSLCBQTFVHSU5TX0RJUiwgcGx1Z2luSWQpO1xuICBhd2FpdCBta2RpcihwbHVnaW5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCBjcChkaXN0UGF0aCwgcGx1Z2luRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgd3JpdGVGaWxlKGpvaW4odGVtcFZhdWx0LnBhdGgsIE9CU0lESUFOX0NPTkZJR19ESVIsIENPTU1VTklUWV9QTFVHSU5TX0pTT04pLCBKU09OLnN0cmluZ2lmeShbcGx1Z2luSWRdKSk7XG5cbiAgY29uc29sZS53YXJuKCdbaW50ZWdyYXRpb24tc2V0dXBdIFN5bmNpbmcgdmF1bHQgdG8gZGV2aWNlLi4uJyk7XG4gIGF3YWl0IHRlbXBWYXVsdC5zeW5jVG9EZXZpY2UodHJhbnNwb3J0KTtcbiAgY29uc29sZS53YXJuKCdbaW50ZWdyYXRpb24tc2V0dXBdIFJlZ2lzdGVyaW5nIHZhdWx0Li4uJyk7XG4gIGF3YWl0IHRlbXBWYXVsdC5yZWdpc3Rlcih0cmFuc3BvcnQpO1xuICBjb25zb2xlLndhcm4oJ1tpbnRlZ3JhdGlvbi1zZXR1cF0gVmF1bHQgcmVnaXN0ZXJlZC4nKTtcblxuICAvLyBFbmFibGUgdGhlIHBsdWdpbiBhbmQgdmVyaWZ5IGl0IGxvYWRlZC4gT2JzaWRpYW4ncyBlbmFibGVQbHVnaW4oKSB3cmFwc1xuICAvLyBMb2FkUGx1Z2luKCkgaW4gYSB0cnktY2F0Y2ggdGhhdCBzd2FsbG93cyBlcnJvcnMgYW5kIHJldHVybnMgZmFsc2UuXG4gIC8vIFdlIG1vbmtleS1wYXRjaCBsb2FkUGx1Z2luKCkgdG8gY2FwdHVyZSB0aGUgZXJyb3IgYmVmb3JlIGl0J3Mgc3dhbGxvd2VkLlxuICBjb25zb2xlLndhcm4oYFtpbnRlZ3JhdGlvbi1zZXR1cF0gRW5hYmxpbmcgcGx1Z2luIFwiJHtwbHVnaW5JZH1cIi4uLmApO1xuICBjb25zdCB7IGVycm9yTWVzc2FnZSB9ID0gYXdhaXQgZXZhbEluT2JzaWRpYW4oe1xuICAgIGFyZ3M6IHsgcGx1Z2luSWQgfSxcbiAgICBmbjogZW5hYmxlUGx1Z2luV2l0aEVycm9yQ2FwdHVyZSxcbiAgICBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzOiB0cnVlLFxuICAgIHRyYW5zcG9ydCxcbiAgICB2YXVsdFBhdGg6IHRlbXBWYXVsdC5wYXRoXG4gIH0pO1xuXG4gIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiBcIiR7cGx1Z2luSWR9XCIgZmFpbGVkIHRvIGxvYWQ6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICB9XG5cbiAgY29uc29sZS53YXJuKGBbaW50ZWdyYXRpb24tc2V0dXBdIFBsdWdpbiBcIiR7cGx1Z2luSWR9XCIgZW5hYmxlZCBzdWNjZXNzZnVsbHkuYCk7XG5cbiAgcmV0dXJuIHsgdGVtcFZhdWx0LCB0cmFuc3BvcnQsIHRyYW5zcG9ydE9wdGlvbnMgfTtcbn1cblxuLyoqXG4gKiBGcmFtZXdvcmstYWdub3N0aWMgZ2xvYmFsIHRlYXJkb3duIGxvZ2ljLlxuICpcbiAqIERpc3Bvc2VzIG9mIHRoZSB0ZW1wb3JhcnkgdmF1bHQgYW5kIHRyYW5zcG9ydCBjcmVhdGVkIGR1cmluZyBzZXR1cC5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0IC0gVGhlIHJlc3VsdCBmcm9tIHtAbGluayBjb3JlU2V0dXB9LiBXaGVuIGB1bmRlZmluZWRgLCBkb2VzIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3JlVGVhcmRvd24ocmVzdWx0PzogQ29yZVNldHVwUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJlc3VsdD8udGVtcFZhdWx0LmRpc3Bvc2UocmVzdWx0LnRyYW5zcG9ydCk7XG4gIGF3YWl0IHJlc3VsdD8udHJhbnNwb3J0LmRpc3Bvc2U/LigpO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBwcm9qZWN0IHJvb3QgYnkgd2Fsa2luZyB1cCBmcm9tIGBwcm9jZXNzLmN3ZCgpYCBsb29raW5nIGZvciBgcGFja2FnZS5qc29uYC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcHJvamVjdCByb290LlxuICovXG5mdW5jdGlvbiBmaW5kUHJvamVjdFJvb3QoKTogc3RyaW5nIHtcbiAgbGV0IGRpciA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gTG9vcCB0ZXJtaW5hdGVzIGF0IGZpbGVzeXN0ZW0gcm9vdC5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoZXhpc3RzU3luYyhqb2luKGRpciwgJ3BhY2thZ2UuanNvbicpKSkge1xuICAgICAgcmV0dXJuIGRpcjtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gam9pbihkaXIsICcuLicpO1xuICAgIGlmIChwYXJlbnQgPT09IGRpcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBwcm9qZWN0IHJvb3QgKG5vIHBhY2thZ2UuanNvbiBmb3VuZCkuJyk7XG4gICAgfVxuICAgIGRpciA9IHBhcmVudDtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBkaXN0IHBhdGggdG8gdXNlIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqXG4gKiBQaWNrcyB3aGljaGV2ZXIgb2YgYGRpc3QvZGV2YCBhbmQgYGRpc3QvYnVpbGRgIGhhcyBhIG5ld2VyIGBtYWluLmpzYC5cbiAqIElmIG9ubHkgb25lIGV4aXN0cywgdGhhdCBvbmUgaXMgdXNlZC4gVGhyb3dzIGlmIG5laXRoZXIgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBwcm9qZWN0Um9vdCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgY2hvc2VuIGRpc3QgZm9sZGVyLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRGlzdFBhdGgocHJvamVjdFJvb3Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRldlBhdGggPSBqb2luKHByb2plY3RSb290LCBESVNUX0RFVik7XG4gIGNvbnN0IGJ1aWxkUGF0aCA9IGpvaW4ocHJvamVjdFJvb3QsIERJU1RfQlVJTEQpO1xuICBjb25zdCBkZXZNYWluSnMgPSBqb2luKGRldlBhdGgsIE1BSU5fSlMpO1xuICBjb25zdCBidWlsZE1haW5KcyA9IGpvaW4oYnVpbGRQYXRoLCBNQUlOX0pTKTtcbiAgY29uc3QgZGV2U3RhdCA9IGV4aXN0c1N5bmMoZGV2TWFpbkpzKSA/IGF3YWl0IHN0YXQoZGV2TWFpbkpzKSA6IG51bGw7XG4gIGNvbnN0IGJ1aWxkU3RhdCA9IGV4aXN0c1N5bmMoYnVpbGRNYWluSnMpID8gYXdhaXQgc3RhdChidWlsZE1haW5KcykgOiBudWxsO1xuXG4gIGlmIChkZXZTdGF0ICYmIGJ1aWxkU3RhdCkge1xuICAgIHJldHVybiBkZXZTdGF0Lm10aW1lID4gYnVpbGRTdGF0Lm10aW1lID8gZGV2UGF0aCA6IGJ1aWxkUGF0aDtcbiAgfVxuXG4gIGlmIChkZXZTdGF0KSB7XG4gICAgcmV0dXJuIGRldlBhdGg7XG4gIH1cblxuICBpZiAoYnVpbGRTdGF0KSB7XG4gICAgcmV0dXJuIGJ1aWxkUGF0aDtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignTm8gYnVpbGQgZm91bmQuIFJ1biBgbnBtIHJ1biBidWlsZGAgb3IgYG5wbSBydW4gZGV2YCBmaXJzdC4nKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQVlBLFNBQVMsa0JBQWtCO0FBQzNCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxZQUFZO0FBQ3JCLFNBQVMsbUJBQW1CO0FBSzVCLFNBQVMsb0NBQW9DO0FBQzdDLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsaUJB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
@@ -3,8 +3,9 @@
3
3
  *
4
4
  * Contains the entry point for the integration testing module.
5
5
  */
6
- import './vitest.mjs';
7
6
  export { ContextId } from './context-id.mjs';
7
+ export type { TransportOptionsResolver } from './context-provider.mjs';
8
+ export { setTransportOptionsResolver } from './context-provider.mjs';
8
9
  export type { EvalInObsidianParams } from './obsidian-cli.mjs';
9
10
  export { evalInObsidian } from './obsidian-cli.mjs';
10
11
  export { TempVault } from './temp-vault.mjs';
@@ -1,5 +1,5 @@
1
- import "./vitest.ts";
2
1
  import { ContextId } from "./context-id.mjs";
2
+ import { setTransportOptionsResolver } from "./context-provider.mjs";
3
3
  import { evalInObsidian } from "./obsidian-cli.mjs";
4
4
  import { TempVault } from "./temp-vault.mjs";
5
5
  import { AppiumTransport } from "./transport-appium.mjs";
@@ -19,6 +19,7 @@ export {
19
19
  createTransportFromOptions,
20
20
  evalInObsidian,
21
21
  registerVault,
22
+ setTransportOptionsResolver,
22
23
  unregisterVault
23
24
  };
24
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXVuYXNzaWduZWQtaW1wb3J0IC0tIFNpZGUtZWZmZWN0IGltcG9ydCB0byBpbmNsdWRlIHZpdGVzdCBtb2R1bGUgYXVnbWVudGF0aW9ucyBpbiB0aGUgZGVjbGFyYXRpb24gb3V0cHV0LlxuaW1wb3J0ICcuL3ZpdGVzdC50cyc7XG5cbmV4cG9ydCB7IENvbnRleHRJZCB9IGZyb20gJy4vY29udGV4dC1pZC5tanMnO1xuZXhwb3J0IHR5cGUgeyBFdmFsSW5PYnNpZGlhblBhcmFtcyB9IGZyb20gJy4vb2JzaWRpYW4tY2xpLm1qcyc7XG5leHBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vb2JzaWRpYW4tY2xpLm1qcyc7XG5leHBvcnQgeyBUZW1wVmF1bHQgfSBmcm9tICcuL3RlbXAtdmF1bHQubWpzJztcbmV4cG9ydCB0eXBlIHsgQXBwaXVtVHJhbnNwb3J0Q29uZmlnIH0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLm1qcyc7XG5leHBvcnQgeyBBcHBpdW1UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0ubWpzJztcbmV4cG9ydCB0eXBlIHsgRGVza3RvcENkcFRyYW5zcG9ydENvbmZpZyB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5leHBvcnQgeyBEZXNrdG9wQ2RwVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jZHAubWpzJztcbmV4cG9ydCB7IERlc2t0b3BDbGlUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNsaS5tanMnO1xuZXhwb3J0IHsgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuQW5kcm9pZEFwcGl1bVRyYW5zcG9ydE9wdGlvbnMsXG4gIE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5DbGlUcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQubWpzJztcbmV4cG9ydCB7XG4gIHJlZ2lzdGVyVmF1bHQsXG4gIHVucmVnaXN0ZXJWYXVsdFxufSBmcm9tICcuL3ZhdWx0LXJlZ2lzdHJ5Lm1qcyc7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFPQSxPQUFPO0FBRVAsU0FBUyxpQkFBaUI7QUFFMUIsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxpQkFBaUI7QUFFMUIsU0FBUyx1QkFBdUI7QUFFaEMsU0FBUywyQkFBMkI7QUFDcEMsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxrQ0FBa0M7QUFXM0M7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7IiwKICAibmFtZXMiOiBbXQp9Cg==
25
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHsgQ29udGV4dElkIH0gZnJvbSAnLi9jb250ZXh0LWlkLm1qcyc7XG5leHBvcnQgdHlwZSB7IFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlciB9IGZyb20gJy4vY29udGV4dC1wcm92aWRlci5tanMnO1xuZXhwb3J0IHsgc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyIH0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5leHBvcnQgdHlwZSB7IEV2YWxJbk9ic2lkaWFuUGFyYW1zIH0gZnJvbSAnLi9vYnNpZGlhbi1jbGkubWpzJztcbmV4cG9ydCB7IGV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9vYnNpZGlhbi1jbGkubWpzJztcbmV4cG9ydCB7IFRlbXBWYXVsdCB9IGZyb20gJy4vdGVtcC12YXVsdC5tanMnO1xuZXhwb3J0IHR5cGUgeyBBcHBpdW1UcmFuc3BvcnRDb25maWcgfSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0ubWpzJztcbmV4cG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5tanMnO1xuZXhwb3J0IHR5cGUgeyBEZXNrdG9wQ2RwVHJhbnNwb3J0Q29uZmlnIH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jZHAubWpzJztcbmV4cG9ydCB7IERlc2t0b3BDZHBUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5tanMnO1xuZXhwb3J0IHsgRGVza3RvcENsaVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2xpLm1qcyc7XG5leHBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhbkNsaVRyYW5zcG9ydE9wdGlvbnMsXG4gIE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuZXhwb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkubWpzJztcbiJdLAogICJtYXBwaW5ncyI6ICJBQU1BLFNBQVMsaUJBQWlCO0FBRTFCLFNBQVMsbUNBQW1DO0FBRTVDLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsaUJBQWlCO0FBRTFCLFNBQVMsdUJBQXVCO0FBRWhDLFNBQVMsMkJBQTJCO0FBQ3BDLFNBQVMsMkJBQTJCO0FBQ3BDLFNBQVMsa0NBQWtDO0FBVzNDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Jest global setup and teardown adapter.
5
+ *
6
+ * Delegates to the framework-agnostic core and bridges context
7
+ * to test workers via `globalThis.__obsidianIntegrationTesting`.
8
+ */
9
+ import type { ObsidianTransportOptions } from '../transport-options.mjs';
10
+ import { TempVault } from '../temp-vault.mjs';
11
+ /**
12
+ * Shape of `globalThis.__obsidianIntegrationTesting`.
13
+ *
14
+ * Consumers may pre-populate `transportOptions` before the global setup runs
15
+ * (e.g., via Jest config `globals`). The setup then adds `tempVaultPath`.
16
+ */
17
+ interface ObsidianIntegrationTestingGlobal {
18
+ /** Temp vault path, set by the global setup for test workers. */
19
+ tempVaultPath?: string | undefined;
20
+ /** Transport options. Set by the consumer before setup, or by the setup itself. */
21
+ transportOptions?: ObsidianTransportOptions | undefined;
22
+ }
23
+ declare global {
24
+ /**
25
+ * Namespace for all `obsidian-integration-testing` global state.
26
+ * Consumers configure transport options here; the setup populates the rest.
27
+ */
28
+ var __obsidianIntegrationTesting: ObsidianIntegrationTestingGlobal | undefined;
29
+ }
30
+ /**
31
+ * Returns the temporary vault provided by the global setup.
32
+ *
33
+ * Reads the vault path from `globalThis.__obsidianIntegrationTesting.tempVaultPath`,
34
+ * which is set by the Jest global setup.
35
+ *
36
+ * @returns The temporary vault.
37
+ */
38
+ export declare function getTempVault(): TempVault;
39
+ /**
40
+ * Returns the transport options provided by the global setup.
41
+ *
42
+ * @returns The transport options, or `undefined` if not configured.
43
+ */
44
+ export declare function getTransportOptions(): ObsidianTransportOptions | undefined;
45
+ /**
46
+ * Jest global setup function.
47
+ *
48
+ * Copies the built plugin into a temporary vault, enables it via the Obsidian CLI,
49
+ * and populates `globalThis.__obsidianIntegrationTesting` for tests.
50
+ *
51
+ * Transport options are read from `globalThis.__obsidianIntegrationTesting.transportOptions`.
52
+ * Set this in your Jest config via the `globals` option.
53
+ */
54
+ export declare function setup(): Promise<void>;
55
+ /**
56
+ * Jest global teardown function.
57
+ *
58
+ * Removes the temporary vault created during setup.
59
+ */
60
+ export declare function teardown(): Promise<void>;
61
+ export {};
@@ -0,0 +1,39 @@
1
+ import { setTransportOptionsResolver } from "../context-provider.mjs";
2
+ import {
3
+ coreSetup,
4
+ coreTeardown
5
+ } from "../global-setup-core.mjs";
6
+ import { TempVault } from "../temp-vault.mjs";
7
+ setTransportOptionsResolver(() => globalThis.__obsidianIntegrationTesting?.transportOptions);
8
+ let setupResult;
9
+ function getTempVault() {
10
+ const tempVaultPath = globalThis.__obsidianIntegrationTesting?.tempVaultPath;
11
+ if (!tempVaultPath) {
12
+ throw new Error(
13
+ "globalThis.__obsidianIntegrationTesting.tempVaultPath is not set. Did you configure obsidian-integration-testing/jest-global-setup as a Jest globalSetup?"
14
+ );
15
+ }
16
+ return new TempVault(tempVaultPath);
17
+ }
18
+ function getTransportOptions() {
19
+ return globalThis.__obsidianIntegrationTesting?.transportOptions;
20
+ }
21
+ async function setup() {
22
+ const transportOptions = globalThis.__obsidianIntegrationTesting?.transportOptions;
23
+ setupResult = await coreSetup({ transportOptions });
24
+ globalThis.__obsidianIntegrationTesting = {
25
+ ...globalThis.__obsidianIntegrationTesting,
26
+ tempVaultPath: setupResult.tempVault.path,
27
+ transportOptions: setupResult.transportOptions
28
+ };
29
+ }
30
+ async function teardown() {
31
+ await coreTeardown(setupResult);
32
+ }
33
+ export {
34
+ getTempVault,
35
+ getTransportOptions,
36
+ setup,
37
+ teardown
38
+ };
39
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2plc3QvZ2xvYmFsLXNldHVwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSmVzdCBnbG9iYWwgc2V0dXAgYW5kIHRlYXJkb3duIGFkYXB0ZXIuXG4gKlxuICogRGVsZWdhdGVzIHRvIHRoZSBmcmFtZXdvcmstYWdub3N0aWMgY29yZSBhbmQgYnJpZGdlcyBjb250ZXh0XG4gKiB0byB0ZXN0IHdvcmtlcnMgdmlhIGBnbG9iYWxUaGlzLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvcmVTZXR1cFJlc3VsdCB9IGZyb20gJy4uL2dsb2JhbC1zZXR1cC1jb3JlLm1qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4uL3RyYW5zcG9ydC1vcHRpb25zLm1qcyc7XG5cbmltcG9ydCB7IHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlciB9IGZyb20gJy4uL2NvbnRleHQtcHJvdmlkZXIubWpzJztcbmltcG9ydCB7XG4gIGNvcmVTZXR1cCxcbiAgY29yZVRlYXJkb3duXG59IGZyb20gJy4uL2dsb2JhbC1zZXR1cC1jb3JlLm1qcyc7XG5pbXBvcnQgeyBUZW1wVmF1bHQgfSBmcm9tICcuLi90ZW1wLXZhdWx0Lm1qcyc7XG5cbi8qKlxuICogU2hhcGUgb2YgYGdsb2JhbFRoaXMuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ2AuXG4gKlxuICogQ29uc3VtZXJzIG1heSBwcmUtcG9wdWxhdGUgYHRyYW5zcG9ydE9wdGlvbnNgIGJlZm9yZSB0aGUgZ2xvYmFsIHNldHVwIHJ1bnNcbiAqIChlLmcuLCB2aWEgSmVzdCBjb25maWcgYGdsb2JhbHNgKS4gVGhlIHNldHVwIHRoZW4gYWRkcyBgdGVtcFZhdWx0UGF0aGAuXG4gKi9cbmludGVyZmFjZSBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0dsb2JhbCB7XG4gIC8qKiBUZW1wIHZhdWx0IHBhdGgsIHNldCBieSB0aGUgZ2xvYmFsIHNldHVwIGZvciB0ZXN0IHdvcmtlcnMuICovXG4gIHRlbXBWYXVsdFBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFRyYW5zcG9ydCBvcHRpb25zLiBTZXQgYnkgdGhlIGNvbnN1bWVyIGJlZm9yZSBzZXR1cCwgb3IgYnkgdGhlIHNldHVwIGl0c2VsZi4gKi9cbiAgdHJhbnNwb3J0T3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB8IHVuZGVmaW5lZDtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgdmFycy1vbi10b3AgLS0gUmVxdWlyZWQgZm9yIGBkZWNsYXJlIGdsb2JhbGAgYXVnbWVudGF0aW9uLiAqL1xuZGVjbGFyZSBnbG9iYWwge1xuICAvKipcbiAgICogTmFtZXNwYWNlIGZvciBhbGwgYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmdgIGdsb2JhbCBzdGF0ZS5cbiAgICogQ29uc3VtZXJzIGNvbmZpZ3VyZSB0cmFuc3BvcnQgb3B0aW9ucyBoZXJlOyB0aGUgc2V0dXAgcG9wdWxhdGVzIHRoZSByZXN0LlxuICAgKi9cbiAgdmFyIF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc6IE9ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nR2xvYmFsIHwgdW5kZWZpbmVkO1xufVxuLyogZXNsaW50LWVuYWJsZSB2YXJzLW9uLXRvcCAtLSBFbmQgb2YgYGRlY2xhcmUgZ2xvYmFsYCBibG9jay4gKi9cblxuc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyKCgpID0+IGdsb2JhbFRoaXMuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8udHJhbnNwb3J0T3B0aW9ucyk7XG5cbmxldCBzZXR1cFJlc3VsdDogQ29yZVNldHVwUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHRlbXBvcmFyeSB2YXVsdCBwcm92aWRlZCBieSB0aGUgZ2xvYmFsIHNldHVwLlxuICpcbiAqIFJlYWRzIHRoZSB2YXVsdCBwYXRoIGZyb20gYGdsb2JhbFRoaXMuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZy50ZW1wVmF1bHRQYXRoYCxcbiAqIHdoaWNoIGlzIHNldCBieSB0aGUgSmVzdCBnbG9iYWwgc2V0dXAuXG4gKlxuICogQHJldHVybnMgVGhlIHRlbXBvcmFyeSB2YXVsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbXBWYXVsdCgpOiBUZW1wVmF1bHQge1xuICBjb25zdCB0ZW1wVmF1bHRQYXRoID0gZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy50ZW1wVmF1bHRQYXRoO1xuICBpZiAoIXRlbXBWYXVsdFBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnRlbXBWYXVsdFBhdGggaXMgbm90IHNldC4gRGlkIHlvdSBjb25maWd1cmUgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZy9qZXN0LWdsb2JhbC1zZXR1cCBhcyBhIEplc3QgZ2xvYmFsU2V0dXA/J1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ldyBUZW1wVmF1bHQodGVtcFZhdWx0UGF0aCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHJhbnNwb3J0IG9wdGlvbnMgcHJvdmlkZWQgYnkgdGhlIGdsb2JhbCBzZXR1cC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdHJhbnNwb3J0IG9wdGlvbnMsIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBjb25maWd1cmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNwb3J0T3B0aW9ucygpOiBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy50cmFuc3BvcnRPcHRpb25zO1xufVxuXG4vKipcbiAqIEplc3QgZ2xvYmFsIHNldHVwIGZ1bmN0aW9uLlxuICpcbiAqIENvcGllcyB0aGUgYnVpbHQgcGx1Z2luIGludG8gYSB0ZW1wb3JhcnkgdmF1bHQsIGVuYWJsZXMgaXQgdmlhIHRoZSBPYnNpZGlhbiBDTEksXG4gKiBhbmQgcG9wdWxhdGVzIGBnbG9iYWxUaGlzLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIGZvciB0ZXN0cy5cbiAqXG4gKiBUcmFuc3BvcnQgb3B0aW9ucyBhcmUgcmVhZCBmcm9tIGBnbG9iYWxUaGlzLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmcudHJhbnNwb3J0T3B0aW9uc2AuXG4gKiBTZXQgdGhpcyBpbiB5b3VyIEplc3QgY29uZmlnIHZpYSB0aGUgYGdsb2JhbHNgIG9wdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0cmFuc3BvcnRPcHRpb25zID0gZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy50cmFuc3BvcnRPcHRpb25zO1xuXG4gIHNldHVwUmVzdWx0ID0gYXdhaXQgY29yZVNldHVwKHsgdHJhbnNwb3J0T3B0aW9ucyB9KTtcblxuICBnbG9iYWxUaGlzLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmcgPSB7XG4gICAgLi4uZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLFxuICAgIHRlbXBWYXVsdFBhdGg6IHNldHVwUmVzdWx0LnRlbXBWYXVsdC5wYXRoLFxuICAgIHRyYW5zcG9ydE9wdGlvbnM6IHNldHVwUmVzdWx0LnRyYW5zcG9ydE9wdGlvbnNcbiAgfTtcbn1cblxuLyoqXG4gKiBKZXN0IGdsb2JhbCB0ZWFyZG93biBmdW5jdGlvbi5cbiAqXG4gKiBSZW1vdmVzIHRoZSB0ZW1wb3JhcnkgdmF1bHQgY3JlYXRlZCBkdXJpbmcgc2V0dXAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZWFyZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgY29yZVRlYXJkb3duKHNldHVwUmVzdWx0KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQWNBLFNBQVMsbUNBQW1DO0FBQzVDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxpQkFBaUI7QUEwQjFCLDRCQUE0QixNQUFNLFdBQVcsOEJBQThCLGdCQUFnQjtBQUUzRixJQUFJO0FBVUcsU0FBUyxlQUEwQjtBQUN4QyxRQUFNLGdCQUFnQixXQUFXLDhCQUE4QjtBQUMvRCxNQUFJLENBQUMsZUFBZTtBQUNsQixVQUFNLElBQUk7QUFBQSxNQUNSO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPLElBQUksVUFBVSxhQUFhO0FBQ3BDO0FBT08sU0FBUyxzQkFBNEQ7QUFDMUUsU0FBTyxXQUFXLDhCQUE4QjtBQUNsRDtBQVdBLGVBQXNCLFFBQXVCO0FBQzNDLFFBQU0sbUJBQW1CLFdBQVcsOEJBQThCO0FBRWxFLGdCQUFjLE1BQU0sVUFBVSxFQUFFLGlCQUFpQixDQUFDO0FBRWxELGFBQVcsK0JBQStCO0FBQUEsSUFDeEMsR0FBRyxXQUFXO0FBQUEsSUFDZCxlQUFlLFlBQVksVUFBVTtBQUFBLElBQ3JDLGtCQUFrQixZQUFZO0FBQUEsRUFDaEM7QUFDRjtBQU9BLGVBQXNCLFdBQTBCO0FBQzlDLFFBQU0sYUFBYSxXQUFXO0FBQ2hDOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -51,7 +51,7 @@ export interface EvalInObsidianParams<Args extends GenericObject, Result, TConte
51
51
  shouldSkipPreflightChecks?: boolean;
52
52
  /**
53
53
  * Override the transport for this call. When omitted, uses the transport
54
- * configured via `environmentOptions.obsidianTransport` in vitest config.
54
+ * configured via the context provider (set by the framework adapter's global setup).
55
55
  */
56
56
  transport?: ObsidianTransport;
57
57
  /**
@@ -1,6 +1,6 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import process from "node:process";
3
- import { inject } from "vitest";
3
+ import { getTransportOptions } from "./context-provider.mjs";
4
4
  import { getFunctionExpressionString } from "./function-expression.mjs";
5
5
  import { jsonWithFunctions } from "./json-with-functions.mjs";
6
6
  import { getOrCreateTransport } from "./transport-factory.mjs";
@@ -11,7 +11,7 @@ async function evalInObsidian(params) {
11
11
  if (vaultPath !== void 0 && !existsSync(vaultPath)) {
12
12
  throw new Error(`Vault path does not exist: ${vaultPath}`);
13
13
  }
14
- const transport = transportOverride ?? await getOrCreateTransport(inject("obsidianTransport"));
14
+ const transport = transportOverride ?? await getOrCreateTransport(getTransportOptions());
15
15
  if (!shouldSkipPreflightChecks) {
16
16
  await transport.preflightCheck(cwd);
17
17
  }
@@ -88,4 +88,4 @@ function getObsidianModulePluginFn() {
88
88
  export {
89
89
  evalInObsidian
90
90
  };
91
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEV2YWx1YXRlcyBhIGZ1bmN0aW9uIGluc2lkZSBhIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UgdmlhIGEgcGx1Z2dhYmxlIHRyYW5zcG9ydC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lc3BhY2UgLS0gV2UgbmVlZCB0byByZWZlcmVuY2UgYG9ic2lkaWFuYCBtb2R1bGUuXG5pbXBvcnQgdHlwZSAqIGFzIG9ic2lkaWFuIGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmdzLFxuICBDb250ZXh0SWRcbn0gZnJvbSAnLi9jb250ZXh0LWlkLm1qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQubWpzJztcblxuaW1wb3J0IHsgZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nIH0gZnJvbSAnLi9mdW5jdGlvbi1leHByZXNzaW9uLm1qcyc7XG5pbXBvcnQgeyBqc29uV2l0aEZ1bmN0aW9ucyB9IGZyb20gJy4vanNvbi13aXRoLWZ1bmN0aW9ucy5tanMnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5Lm1qcyc7XG5cbmludGVyZmFjZSBFeHBvcnRzV2l0aERlZmF1bHQge1xuICBkZWZhdWx0OiB1bmtub3duO1xufVxuXG5jb25zdCBOT19PVVRQVVQgPSAnKG5vIG91dHB1dCknO1xuXG4vKipcbiAqIENvbW1vbiBhcmd1bWVudHMgYXV0b21hdGljYWxseSBwcm92aWRlZCB0byBldmVyeSB7QGxpbmsgZXZhbEluT2JzaWRpYW59IGNhbGxiYWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkFyZ3Mge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHtAbGluayBBcHB9IGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBgb2JzaWRpYW5gIG1vZHVsZSwgcmVzb2x2ZWQgYXQgcnVudGltZSBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gICAqL1xuICBvYnNpZGlhbk1vZHVsZTogdHlwZW9mIG9ic2lkaWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBldmFsSW5PYnNpZGlhbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbEluT2JzaWRpYW5QYXJhbXM8QXJncyBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4ge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uIFZhbHVlcyBtYXkgaW5jbHVkZSBmdW5jdGlvbnMgXHUyMDE0XG4gICAqIHRoZXkgYXJlIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAgICovXG4gIGFyZ3M/OiBBcmdzO1xuXG4gIC8qKlxuICAgKiBBIHtAbGluayBDb250ZXh0SWR9IGxpbmtpbmcgdGhpcyBjYWxsIHRvIGEgcGVyc2lzdGVudCBzdG9yZSBvbiBgd2luZG93YFxuICAgKiBpbiB0aGUgT2JzaWRpYW4gcHJvY2Vzcy4gVGhlIGNhbGxiYWNrIHJlY2VpdmVzIGEgdHlwZWQgYGNvbnRleHRgIG9iamVjdFxuICAgKiB0aGF0IHN1cnZpdmVzIGFjcm9zcyBjYWxscyBzaGFyaW5nIHRoZSBzYW1lIElELlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGBjb250ZXh0YCBpcyBhIGZyZXNoIGVtcHR5IG9iamVjdCBlYWNoIGNhbGwuXG4gICAqL1xuICBjb250ZXh0SWQ/OiBUQ29udGV4dElkO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUgaW4gdGhlIE9ic2lkaWFuIGNvbnRleHQuXG4gICAqL1xuICBmbihhcmdzOiBBcmdzICYgQ29tbW9uQXJncyAmIENvbnRleHRBcmdzPFRDb250ZXh0SWQ+KTogUHJvbWlzYWJsZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBTa2lwcyBwcmUtZmxpZ2h0IGNoZWNrcyAodmF1bHQgcmVnaXN0cmF0aW9uLCBDTEkgYXZhaWxhYmlsaXR5KS5cbiAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IHZhdWx0IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB0cmFuc3BvcnQgZm9yIHRoaXMgY2FsbC4gV2hlbiBvbWl0dGVkLCB1c2VzIHRoZSB0cmFuc3BvcnRcbiAgICogY29uZmlndXJlZCB2aWEgYGVudmlyb25tZW50T3B0aW9ucy5vYnNpZGlhblRyYW5zcG9ydGAgaW4gdml0ZXN0IGNvbmZpZy5cbiAgICovXG4gIHRyYW5zcG9ydD86IE9ic2lkaWFuVHJhbnNwb3J0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gdmF1bHQuIERlZmF1bHRzIHRvIGBwcm9jZXNzLmN3ZCgpYC5cbiAgICovXG4gIHZhdWx0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHBsYWluIG9iamVjdCB3aXRoIHN0cmluZyBrZXlzLlxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICogRXZhbHVhdGVzIGEgZnVuY3Rpb24gaW5zaWRlIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlXG4gKiB2aWEgdGhlIGFjdGl2ZSB0cmFuc3BvcnQgYW5kIHJldHVybnMgdGhlIHBhcnNlZCByZXN1bHQuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGFuIGFyZ3Mgb2JqZWN0IHRoYXQgaW5jbHVkZXMgYGFwcGAsIGBvYnNpZGlhbk1vZHVsZWAsXG4gKiBgY29udGV4dGAsIGFuZCBhbnkgYWRkaXRpb25hbCBgYXJnc2AgcGFzc2VkIGJ5IHRoZSBjYWxsZXIuXG4gKiBJdCBpcyBzZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAgYW5kIGludm9rZWQgYXMgYW4gSUlGRS5cbiAqIFRoZSBmdW5jdGlvbiBtdXN0IGJlIHNlbGYtY29udGFpbmVkIFx1MjAxNCBjbG9zdXJlcyBvdmVyIGxvY2FsIHZhcmlhYmxlcyB3aWxsIG5vdCB3b3JrLlxuICogUGFzcyBhbnkgbmVlZGVkIHZhbHVlcyBhcyBgYXJnc2AgXHUyMDE0IHRoZXkgYXJlIEpTT04tc2VyaWFsaXplZCBhbmQgZGVzZXJpYWxpemVkIG9uIHRoZSBPYnNpZGlhbiBzaWRlLlxuICpcbiAqIFRoZSByZXN1bHQgaXMgYEpTT04uc3RyaW5naWZ5YCdkIG9uIHRoZSBPYnNpZGlhbiBzaWRlIGFuZCBwYXJzZWQgYmFjay5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiBgZm5gLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXZhbEluT2JzaWRpYW48QXJncyBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gIHBhcmFtczogRXZhbEluT2JzaWRpYW5QYXJhbXM8QXJncywgUmVzdWx0LCBUQ29udGV4dElkPlxuKTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCAtLSBgZm5gIGNhbiBiZSB1bmJvdW5kLlxuICBjb25zdCB7IGFyZ3MgPSB7fSwgY29udGV4dElkLCBmbiwgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcyA9IGZhbHNlLCB0cmFuc3BvcnQ6IHRyYW5zcG9ydE92ZXJyaWRlLCB2YXVsdFBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgY3dkID0gdmF1bHRQYXRoID8/IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gQ2hlY2s6IFZhdWx0IHBhdGggZXhpc3RzIG9uIGRpc2suXG4gIGlmICh2YXVsdFBhdGggIT09IHVuZGVmaW5lZCAmJiAhZXhpc3RzU3luYyh2YXVsdFBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYXVsdCBwYXRoIGRvZXMgbm90IGV4aXN0OiAke3ZhdWx0UGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydE92ZXJyaWRlID8/IGF3YWl0IGdldE9yQ3JlYXRlVHJhbnNwb3J0KGluamVjdCgnb2JzaWRpYW5UcmFuc3BvcnQnKSk7XG5cbiAgaWYgKCFzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzKSB7XG4gICAgYXdhaXQgdHJhbnNwb3J0LnByZWZsaWdodENoZWNrKGN3ZCk7XG4gIH1cblxuICBjb25zdCBTTElDRV9TVEFSVCA9IDI7XG4gIGNvbnN0IHJhbmRvbVN1ZmZpeCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZShTTElDRV9TVEFSVCk7XG4gIGNvbnN0IGNvbnRleHRFeHByID0gY29udGV4dElkXG4gICAgPyBgKCh3aW5kb3cuX19vYnNpZGlhbkNvbnRleHRzX18gPz89IHt9KVtcIiR7U3RyaW5nKGNvbnRleHRJZCl9XCJdID8/PSB7fSlgXG4gICAgOiAne30nO1xuICBjb25zdCBleHByZXNzaW9uID0gYFxuKGFzeW5jICgpID0+IHtcbiAgY29uc3QgZm4ke3JhbmRvbVN1ZmZpeH0gPSAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhmbil9O1xuICBjb25zdCBvYnNpZGlhbk1vZHVsZSR7cmFuZG9tU3VmZml4fSA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFhcHAud29ya3NwYWNlLmFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHkpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBhcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkocmVzb2x2ZSkpO1xuICAgIH1cbiAgICBpZiAoIWFwcC5wbHVnaW5zLmlzRW5hYmxlZCgpKSB7XG4gICAgICBhd2FpdCBhcHAucGx1Z2lucy5zZXRFbmFibGUodHJ1ZSk7XG4gICAgfVxuICAgICR7Z2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKGdldE9ic2lkaWFuTW9kdWxlUGx1Z2luRm4pfVxuICAgICR7Z2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKGdldE9ic2lkaWFuTW9kdWxlKX1cbiAgICByZXR1cm4gYXdhaXQgZ2V0T2JzaWRpYW5Nb2R1bGUoKTtcbiAgfSkoKTtcbiAgY29uc3QgYXJncyR7cmFuZG9tU3VmZml4fSA9ICR7anNvbldpdGhGdW5jdGlvbnMoYXJncyl9O1xuICBjb25zdCBjb250ZXh0JHtyYW5kb21TdWZmaXh9ID0gJHtjb250ZXh0RXhwcn07XG4gIGNvbnN0IGZ1bGxBcmdzJHtyYW5kb21TdWZmaXh9ID0gT2JqZWN0LmFzc2lnbihhcmdzJHtyYW5kb21TdWZmaXh9LCB7IGFwcCwgb2JzaWRpYW5Nb2R1bGU6IG9ic2lkaWFuTW9kdWxlJHtyYW5kb21TdWZmaXh9LCBjb250ZXh0OiBjb250ZXh0JHtyYW5kb21TdWZmaXh9IH0pO1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXdhaXQgZm4ke3JhbmRvbVN1ZmZpeH0oZnVsbEFyZ3Mke3JhbmRvbVN1ZmZpeH0pKTtcbn0pKClgO1xuXG4gIGNvbnN0IHJlc3VsdFN0ciA9IGF3YWl0IHRyYW5zcG9ydC5ldmFsdWF0ZShleHByZXNzaW9uLCB7IGN3ZCB9KTtcblxuICBpZiAocmVzdWx0U3RyID09PSBOT19PVVRQVVQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIFJlc3VsdDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzdWx0U3RyKSBhcyBSZXN1bHQ7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXZhbEluT2JzaWRpYW46IE9ic2lkaWFuIHJldHVybmVkIG5vbi1KU09OIG91dHB1dDogJHtyZXN1bHRTdHJ9YCk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgdmlhIHRvU3RyaW5nKCkgYW5kIGV4ZWN1dGVkIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcywgbm90IGluIE5vZGUuIENvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMuICovXG5cbi8qKlxuICogSW5qZWN0ZWQgaW50byB0aGUgT2JzaWRpYW4gcHJvY2VzcyB0byByZXNvbHZlIHRoZSBgb2JzaWRpYW5gIG1vZHVsZS5cbiAqIFVzZXMgYSBjYWNoZWQgdmFsdWUgb24gYGFwcGAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgaW5zdGFsbHMgYSB0ZW1wb3JhcnlcbiAqIHBsdWdpbiB0aGF0IGNhbGxzIGByZXF1aXJlKCdvYnNpZGlhbicpYCBhbmQgY2FjaGVzIHRoZSByZXN1bHQuXG4gKlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZSBcdTIwMTQgaXQgaXMgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgLlxuICogYGdldE9ic2lkaWFuTW9kdWxlUGx1Z2luRm5gIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgc2FtZSBzY29wZVxuICogKHRoZSBnZW5lcmF0ZWQgSUlGRSBoYW5kbGVzIHRoaXMpLlxuICpcbiAqIEByZXR1cm5zIFRoZSBgb2JzaWRpYW5gIG1vZHVsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0T2JzaWRpYW5Nb2R1bGUoKTogUHJvbWlzZTx0eXBlb2Ygb2JzaWRpYW4+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kZXByZWNhdGVkIC0tIFdlIG5lZWQgZ2xvYmFsIGBhcHBgIHZhcmlhYmxlLlxuICBjb25zdCBhcHAgPSB3aW5kb3cuYXBwO1xuICBpbnRlcmZhY2UgT2JzaWRpYW5Nb2R1bGVIb2xkZXIge1xuICAgIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG4gIH1cbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGVIb2xkZXIgPSBhcHAgYXMgUGFydGlhbDxPYnNpZGlhbk1vZHVsZUhvbGRlcj47XG4gIGlmIChvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSkge1xuICAgIHJldHVybiBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZTtcbiAgfVxuICBjb25zdCBTTElDRV9TVEFSVCA9IDI7XG4gIGNvbnN0IHJhbmRvbVN1ZmZpeCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZShTTElDRV9TVEFSVCk7XG4gIGNvbnN0IHRlbXBNb2R1bGVOYW1lID0gYGdldC1vYnNpZGlhbi1tb2R1bGUtJHtyYW5kb21TdWZmaXh9YDtcbiAgY29uc3QgZGlyID0gYCR7YXBwLnZhdWx0LmNvbmZpZ0Rpcn0vcGx1Z2lucy8ke3RlbXBNb2R1bGVOYW1lfWA7XG4gIGFwcC5wbHVnaW5zLm1hbmlmZXN0c1t0ZW1wTW9kdWxlTmFtZV0gPSB7XG4gICAgYXV0aG9yOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZGlyLFxuICAgIGlkOiB0ZW1wTW9kdWxlTmFtZSxcbiAgICBpc0Rlc2t0b3BPbmx5OiBmYWxzZSxcbiAgICBtaW5BcHBWZXJzaW9uOiAnJyxcbiAgICBuYW1lOiB0ZW1wTW9kdWxlTmFtZSxcbiAgICB2ZXJzaW9uOiAnJ1xuICB9O1xuICBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5ta2RpcihkaXIpO1xuICBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci53cml0ZShgJHtkaXJ9L21haW4uanNgLCBgKCR7U3RyaW5nKGdldE9ic2lkaWFuTW9kdWxlUGx1Z2luRm4pfSkoKTtgKTtcbiAgYXdhaXQgYXBwLnBsdWdpbnMubG9hZFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLnVuaW5zdGFsbFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIEl0IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aGluIGBsb2FkUGx1Z2luYC5cbiAgaWYgKG9ic2lkaWFuTW9kdWxlSG9sZGVyLm9ic2lkaWFuTW9kdWxlKSB7XG4gICAgcmV0dXJuIG9ic2lkaWFuTW9kdWxlSG9sZGVyLm9ic2lkaWFuTW9kdWxlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgb2JzaWRpYW4gbW9kdWxlJyk7XG59XG5cbi8qKlxuICogVGhlIGJvZHkgb2YgdGhlIHRlbXBvcmFyeSBwbHVnaW4gdGhhdCBleHRyYWN0cyB0aGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKiBTZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAgYW5kIHdyaXR0ZW4gdG8gYG1haW4uanNgIGJ5IHtAbGluayBnZXRPYnNpZGlhbk1vZHVsZX0uXG4gKiBNdXN0IE5PVCByZWZlcmVuY2UgYW55IG91dGVyIHNjb3BlLlxuICovXG5mdW5jdGlvbiBnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuKCk6IHZvaWQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWRlcHJlY2F0ZWQgLS0gV2UgbmVlZCBnbG9iYWwgYGFwcGAgdmFyaWFibGUuXG4gIGNvbnN0IGFwcCA9IHdpbmRvdy5hcHA7XG4gIGludGVyZmFjZSBPYnNpZGlhbk1vZHVsZUhvbGRlciB7XG4gICAgb2JzaWRpYW5Nb2R1bGU6IHR5cGVvZiBvYnNpZGlhbjtcbiAgfVxuICBjb25zdCBvYnNpZGlhbk1vZHVsZUhvbGRlciA9IGFwcCBhcyBQYXJ0aWFsPE9ic2lkaWFuTW9kdWxlSG9sZGVyPjtcblxuICBjb25zdCBwbHVnaW5SZXF1aXJlID0gcmVxdWlyZTtcbiAgY29uc3QgcGx1Z2luRXhwb3J0cyA9IGV4cG9ydHMgYXMgRXhwb3J0c1dpdGhEZWZhdWx0O1xuXG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlID0gcGx1Z2luUmVxdWlyZSgnb2JzaWRpYW4nKSBhcyB0eXBlb2Ygb2JzaWRpYW47XG4gIG9ic2lkaWFuTW9kdWxlSG9sZGVyLm9ic2lkaWFuTW9kdWxlID0gb2JzaWRpYW5Nb2R1bGU7XG4gIHBsdWdpbkV4cG9ydHMuZGVmYXVsdCA9IG9ic2lkaWFuTW9kdWxlLlBsdWdpbjtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQVdBLFNBQVMsa0JBQWtCO0FBQzNCLE9BQU8sYUFBYTtBQUNwQixTQUFTLGNBQWM7QUFRdkIsU0FBUyxtQ0FBbUM7QUFDNUMsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyw0QkFBNEI7QUFNckMsTUFBTSxZQUFZO0FBaUZsQixlQUFzQixlQUNwQixRQUNpQjtBQUVqQixRQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsV0FBVyxJQUFJLDRCQUE0QixPQUFPLFdBQVcsbUJBQW1CLFVBQVUsSUFBSTtBQUNqSCxRQUFNLE1BQU0sYUFBYSxRQUFRLElBQUk7QUFHckMsTUFBSSxjQUFjLFVBQWEsQ0FBQyxXQUFXLFNBQVMsR0FBRztBQUNyRCxVQUFNLElBQUksTUFBTSw4QkFBOEIsU0FBUyxFQUFFO0FBQUEsRUFDM0Q7QUFFQSxRQUFNLFlBQVkscUJBQXFCLE1BQU0scUJBQXFCLE9BQU8sbUJBQW1CLENBQUM7QUFFN0YsTUFBSSxDQUFDLDJCQUEyQjtBQUM5QixVQUFNLFVBQVUsZUFBZSxHQUFHO0FBQUEsRUFDcEM7QUFFQSxRQUFNLGNBQWM7QUFDcEIsUUFBTSxlQUFlLE9BQU8sS0FBSyxPQUFPLENBQUMsRUFBRSxNQUFNLFdBQVc7QUFDNUQsUUFBTSxjQUFjLFlBQ2hCLDBDQUEwQyxPQUFPLFNBQVMsQ0FBQyxlQUMzRDtBQUNKLFFBQU0sYUFBYTtBQUFBO0FBQUEsWUFFVCxZQUFZLE1BQU0sNEJBQTRCLEVBQUUsQ0FBQztBQUFBLHdCQUNyQyxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFPOUIsNEJBQTRCLHlCQUF5QixDQUFDO0FBQUEsTUFDdEQsNEJBQTRCLGlCQUFpQixDQUFDO0FBQUE7QUFBQTtBQUFBLGNBR3RDLFlBQVksTUFBTSxrQkFBa0IsSUFBSSxDQUFDO0FBQUEsaUJBQ3RDLFlBQVksTUFBTSxXQUFXO0FBQUEsa0JBQzVCLFlBQVksd0JBQXdCLFlBQVksMENBQTBDLFlBQVkscUJBQXFCLFlBQVk7QUFBQSxrQ0FDdkgsWUFBWSxZQUFZLFlBQVk7QUFBQTtBQUdwRSxRQUFNLFlBQVksTUFBTSxVQUFVLFNBQVMsWUFBWSxFQUFFLElBQUksQ0FBQztBQUU5RCxNQUFJLGNBQWMsV0FBVztBQUMzQixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUk7QUFDRixXQUFPLEtBQUssTUFBTSxTQUFTO0FBQUEsRUFDN0IsUUFBUTtBQUNOLFVBQU0sSUFBSSxNQUFNLHNEQUFzRCxTQUFTLEVBQUU7QUFBQSxFQUNuRjtBQUNGO0FBZUEsZUFBZSxvQkFBOEM7QUFFM0QsUUFBTSxNQUFNLE9BQU87QUFJbkIsUUFBTSx1QkFBdUI7QUFDN0IsTUFBSSxxQkFBcUIsZ0JBQWdCO0FBQ3ZDLFdBQU8scUJBQXFCO0FBQUEsRUFDOUI7QUFDQSxRQUFNLGNBQWM7QUFDcEIsUUFBTSxlQUFlLE9BQU8sS0FBSyxPQUFPLENBQUMsRUFBRSxNQUFNLFdBQVc7QUFDNUQsUUFBTSxpQkFBaUIsdUJBQXVCLFlBQVk7QUFDMUQsUUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLFNBQVMsWUFBWSxjQUFjO0FBQzVELE1BQUksUUFBUSxVQUFVLGNBQWMsSUFBSTtBQUFBLElBQ3RDLFFBQVE7QUFBQSxJQUNSLGFBQWE7QUFBQSxJQUNiO0FBQUEsSUFDQSxJQUFJO0FBQUEsSUFDSixlQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsRUFDWDtBQUNBLFFBQU0sSUFBSSxNQUFNLFFBQVEsTUFBTSxHQUFHO0FBQ2pDLFFBQU0sSUFBSSxNQUFNLFFBQVEsTUFBTSxHQUFHLEdBQUcsWUFBWSxJQUFJLE9BQU8seUJBQXlCLENBQUMsTUFBTTtBQUMzRixRQUFNLElBQUksUUFBUSxXQUFXLGNBQWM7QUFDM0MsUUFBTSxJQUFJLFFBQVEsZ0JBQWdCLGNBQWM7QUFFaEQsTUFBSSxxQkFBcUIsZ0JBQWdCO0FBQ3ZDLFdBQU8scUJBQXFCO0FBQUEsRUFDOUI7QUFDQSxRQUFNLElBQUksTUFBTSxnQ0FBZ0M7QUFDbEQ7QUFPQSxTQUFTLDRCQUFrQztBQUV6QyxRQUFNLE1BQU0sT0FBTztBQUluQixRQUFNLHVCQUF1QjtBQUU3QixRQUFNLGdCQUFnQjtBQUN0QixRQUFNLGdCQUFnQjtBQUV0QixRQUFNLGlCQUFpQixjQUFjLFVBQVU7QUFDL0MsdUJBQXFCLGlCQUFpQjtBQUN0QyxnQkFBYyxVQUFVLGVBQWU7QUFDekM7IiwKICAibmFtZXMiOiBbXQp9Cg==
91
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEV2YWx1YXRlcyBhIGZ1bmN0aW9uIGluc2lkZSBhIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UgdmlhIGEgcGx1Z2dhYmxlIHRyYW5zcG9ydC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lc3BhY2UgLS0gV2UgbmVlZCB0byByZWZlcmVuY2UgYG9ic2lkaWFuYCBtb2R1bGUuXG5pbXBvcnQgdHlwZSAqIGFzIG9ic2lkaWFuIGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQ29udGV4dEFyZ3MsXG4gIENvbnRleHRJZFxufSBmcm9tICcuL2NvbnRleHQtaWQubWpzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuXG5pbXBvcnQgeyBnZXRUcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcgfSBmcm9tICcuL2Z1bmN0aW9uLWV4cHJlc3Npb24ubWpzJztcbmltcG9ydCB7IGpzb25XaXRoRnVuY3Rpb25zIH0gZnJvbSAnLi9qc29uLXdpdGgtZnVuY3Rpb25zLm1qcyc7XG5pbXBvcnQgeyBnZXRPckNyZWF0ZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcblxuaW50ZXJmYWNlIEV4cG9ydHNXaXRoRGVmYXVsdCB7XG4gIGRlZmF1bHQ6IHVua25vd247XG59XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5cbi8qKlxuICogQ29tbW9uIGFyZ3VtZW50cyBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIHRvIGV2ZXJ5IHtAbGluayBldmFsSW5PYnNpZGlhbn0gY2FsbGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uQXJncyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4ge0BsaW5rIEFwcH0gaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGBvYnNpZGlhbmAgbW9kdWxlLCByZXNvbHZlZCBhdCBydW50aW1lIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcy5cbiAgICovXG4gIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGV2YWxJbk9ic2lkaWFufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmFsSW5PYnNpZGlhblBhcmFtczxBcmdzIGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4gVmFsdWVzIG1heSBpbmNsdWRlIGZ1bmN0aW9ucyBcdTIwMTRcbiAgICogdGhleSBhcmUgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgLlxuICAgKi9cbiAgYXJncz86IEFyZ3M7XG5cbiAgLyoqXG4gICAqIEEge0BsaW5rIENvbnRleHRJZH0gbGlua2luZyB0aGlzIGNhbGwgdG8gYSBwZXJzaXN0ZW50IHN0b3JlIG9uIGB3aW5kb3dgXG4gICAqIGluIHRoZSBPYnNpZGlhbiBwcm9jZXNzLiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgYSB0eXBlZCBgY29udGV4dGAgb2JqZWN0XG4gICAqIHRoYXQgc3Vydml2ZXMgYWNyb3NzIGNhbGxzIHNoYXJpbmcgdGhlIHNhbWUgSUQuXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgYGNvbnRleHRgIGlzIGEgZnJlc2ggZW1wdHkgb2JqZWN0IGVhY2ggY2FsbC5cbiAgICovXG4gIGNvbnRleHRJZD86IFRDb250ZXh0SWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZSBpbiB0aGUgT2JzaWRpYW4gY29udGV4dC5cbiAgICovXG4gIGZuKGFyZ3M6IEFyZ3MgJiBDb21tb25BcmdzICYgQ29udGV4dEFyZ3M8VENvbnRleHRJZD4pOiBQcm9taXNhYmxlPFJlc3VsdD47XG5cbiAgLyoqXG4gICAqIFNraXBzIHByZS1mbGlnaHQgY2hlY2tzICh2YXVsdCByZWdpc3RyYXRpb24sIENMSSBhdmFpbGFiaWxpdHkpLlxuICAgKiBVc2VkIGludGVybmFsbHkgYnkgdmF1bHQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHRyYW5zcG9ydCBmb3IgdGhpcyBjYWxsLiBXaGVuIG9taXR0ZWQsIHVzZXMgdGhlIHRyYW5zcG9ydFxuICAgKiBjb25maWd1cmVkIHZpYSB0aGUgY29udGV4dCBwcm92aWRlciAoc2V0IGJ5IHRoZSBmcmFtZXdvcmsgYWRhcHRlcidzIGdsb2JhbCBzZXR1cCkuXG4gICAqL1xuICB0cmFuc3BvcnQ/OiBPYnNpZGlhblRyYW5zcG9ydDtcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIE9ic2lkaWFuIHZhdWx0LiBEZWZhdWx0cyB0byBgcHJvY2Vzcy5jd2QoKWAuXG4gICAqL1xuICB2YXVsdFBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwbGFpbiBvYmplY3Qgd2l0aCBzdHJpbmcga2V5cy5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY09iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIEV2YWx1YXRlcyBhIGZ1bmN0aW9uIGluc2lkZSB0aGUgcnVubmluZyBPYnNpZGlhbiBpbnN0YW5jZVxuICogdmlhIHRoZSBhY3RpdmUgdHJhbnNwb3J0IGFuZCByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LlxuICpcbiAqIFRoZSBmdW5jdGlvbiByZWNlaXZlcyBhbiBhcmdzIG9iamVjdCB0aGF0IGluY2x1ZGVzIGBhcHBgLCBgb2JzaWRpYW5Nb2R1bGVgLFxuICogYGNvbnRleHRgLCBhbmQgYW55IGFkZGl0aW9uYWwgYGFyZ3NgIHBhc3NlZCBieSB0aGUgY2FsbGVyLlxuICogSXQgaXMgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCBpbnZva2VkIGFzIGFuIElJRkUuXG4gKiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBzZWxmLWNvbnRhaW5lZCBcdTIwMTQgY2xvc3VyZXMgb3ZlciBsb2NhbCB2YXJpYWJsZXMgd2lsbCBub3Qgd29yay5cbiAqIFBhc3MgYW55IG5lZWRlZCB2YWx1ZXMgYXMgYGFyZ3NgIFx1MjAxNCB0aGV5IGFyZSBKU09OLXNlcmlhbGl6ZWQgYW5kIGRlc2VyaWFsaXplZCBvbiB0aGUgT2JzaWRpYW4gc2lkZS5cbiAqXG4gKiBUaGUgcmVzdWx0IGlzIGBKU09OLnN0cmluZ2lmeWAnZCBvbiB0aGUgT2JzaWRpYW4gc2lkZSBhbmQgcGFyc2VkIGJhY2suXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgYGZuYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV2YWxJbk9ic2lkaWFuPEFyZ3MgZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBSZXN1bHQsIFRDb250ZXh0SWQgZXh0ZW5kcyBDb250ZXh0SWQ8dW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICBwYXJhbXM6IEV2YWxJbk9ic2lkaWFuUGFyYW1zPEFyZ3MsIFJlc3VsdCwgVENvbnRleHRJZD5cbik6IFByb21pc2U8UmVzdWx0PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgLS0gYGZuYCBjYW4gYmUgdW5ib3VuZC5cbiAgY29uc3QgeyBhcmdzID0ge30sIGNvbnRleHRJZCwgZm4sIHNob3VsZFNraXBQcmVmbGlnaHRDaGVja3MgPSBmYWxzZSwgdHJhbnNwb3J0OiB0cmFuc3BvcnRPdmVycmlkZSwgdmF1bHRQYXRoIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGN3ZCA9IHZhdWx0UGF0aCA/PyBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8vIENoZWNrOiBWYXVsdCBwYXRoIGV4aXN0cyBvbiBkaXNrLlxuICBpZiAodmF1bHRQYXRoICE9PSB1bmRlZmluZWQgJiYgIWV4aXN0c1N5bmModmF1bHRQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmF1bHQgcGF0aCBkb2VzIG5vdCBleGlzdDogJHt2YXVsdFBhdGh9YCk7XG4gIH1cblxuICBjb25zdCB0cmFuc3BvcnQgPSB0cmFuc3BvcnRPdmVycmlkZSA/PyBhd2FpdCBnZXRPckNyZWF0ZVRyYW5zcG9ydChnZXRUcmFuc3BvcnRPcHRpb25zKCkpO1xuXG4gIGlmICghc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcykge1xuICAgIGF3YWl0IHRyYW5zcG9ydC5wcmVmbGlnaHRDaGVjayhjd2QpO1xuICB9XG5cbiAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICBjb25zdCByYW5kb21TdWZmaXggPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICBjb25zdCBjb250ZXh0RXhwciA9IGNvbnRleHRJZFxuICAgID8gYCgod2luZG93Ll9fb2JzaWRpYW5Db250ZXh0c19fID8/PSB7fSlbXCIke1N0cmluZyhjb250ZXh0SWQpfVwiXSA/Pz0ge30pYFxuICAgIDogJ3t9JztcbiAgY29uc3QgZXhwcmVzc2lvbiA9IGBcbihhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGZuJHtyYW5kb21TdWZmaXh9ID0gJHtnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoZm4pfTtcbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGUke3JhbmRvbVN1ZmZpeH0gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmICghYXBwLndvcmtzcGFjZS5hcHAud29ya3NwYWNlLmxheW91dFJlYWR5KSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KHJlc29sdmUpKTtcbiAgICB9XG4gICAgaWYgKCFhcHAucGx1Z2lucy5pc0VuYWJsZWQoKSkge1xuICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuc2V0RW5hYmxlKHRydWUpO1xuICAgIH1cbiAgICAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuKX1cbiAgICAke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhnZXRPYnNpZGlhbk1vZHVsZSl9XG4gICAgcmV0dXJuIGF3YWl0IGdldE9ic2lkaWFuTW9kdWxlKCk7XG4gIH0pKCk7XG4gIGNvbnN0IGFyZ3Mke3JhbmRvbVN1ZmZpeH0gPSAke2pzb25XaXRoRnVuY3Rpb25zKGFyZ3MpfTtcbiAgY29uc3QgY29udGV4dCR7cmFuZG9tU3VmZml4fSA9ICR7Y29udGV4dEV4cHJ9O1xuICBjb25zdCBmdWxsQXJncyR7cmFuZG9tU3VmZml4fSA9IE9iamVjdC5hc3NpZ24oYXJncyR7cmFuZG9tU3VmZml4fSwgeyBhcHAsIG9ic2lkaWFuTW9kdWxlOiBvYnNpZGlhbk1vZHVsZSR7cmFuZG9tU3VmZml4fSwgY29udGV4dDogY29udGV4dCR7cmFuZG9tU3VmZml4fSB9KTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGF3YWl0IGZuJHtyYW5kb21TdWZmaXh9KGZ1bGxBcmdzJHtyYW5kb21TdWZmaXh9KSk7XG59KSgpYDtcblxuICBjb25zdCByZXN1bHRTdHIgPSBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgeyBjd2QgfSk7XG5cbiAgaWYgKHJlc3VsdFN0ciA9PT0gTk9fT1VUUFVUKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBSZXN1bHQ7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3VsdFN0cikgYXMgUmVzdWx0O1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV2YWxJbk9ic2lkaWFuOiBPYnNpZGlhbiByZXR1cm5lZCBub24tSlNPTiBvdXRwdXQ6ICR7cmVzdWx0U3RyfWApO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBTZXJpYWxpemVkIHZpYSB0b1N0cmluZygpIGFuZCBleGVjdXRlZCBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MsIG5vdCBpbiBOb2RlLiBDb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLiAqL1xuXG4vKipcbiAqIEluamVjdGVkIGludG8gdGhlIE9ic2lkaWFuIHByb2Nlc3MgdG8gcmVzb2x2ZSB0aGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKiBVc2VzIGEgY2FjaGVkIHZhbHVlIG9uIGBhcHBgIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGluc3RhbGxzIGEgdGVtcG9yYXJ5XG4gKiBwbHVnaW4gdGhhdCBjYWxscyBgcmVxdWlyZSgnb2JzaWRpYW4nKWAgYW5kIGNhY2hlcyB0aGUgcmVzdWx0LlxuICpcbiAqIE11c3QgTk9UIHJlZmVyZW5jZSBhbnkgb3V0ZXIgc2NvcGUgXHUyMDE0IGl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAqIGBnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuYCBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIHNhbWUgc2NvcGVcbiAqICh0aGUgZ2VuZXJhdGVkIElJRkUgaGFuZGxlcyB0aGlzKS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYG9ic2lkaWFuYCBtb2R1bGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE9ic2lkaWFuTW9kdWxlKCk6IFByb21pc2U8dHlwZW9mIG9ic2lkaWFuPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZGVwcmVjYXRlZCAtLSBXZSBuZWVkIGdsb2JhbCBgYXBwYCB2YXJpYWJsZS5cbiAgY29uc3QgYXBwID0gd2luZG93LmFwcDtcbiAgaW50ZXJmYWNlIE9ic2lkaWFuTW9kdWxlSG9sZGVyIHtcbiAgICBvYnNpZGlhbk1vZHVsZTogdHlwZW9mIG9ic2lkaWFuO1xuICB9XG4gIGNvbnN0IG9ic2lkaWFuTW9kdWxlSG9sZGVyID0gYXBwIGFzIFBhcnRpYWw8T2JzaWRpYW5Nb2R1bGVIb2xkZXI+O1xuICBpZiAob2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGUpIHtcbiAgICByZXR1cm4gb2JzaWRpYW5Nb2R1bGVIb2xkZXIub2JzaWRpYW5Nb2R1bGU7XG4gIH1cbiAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICBjb25zdCByYW5kb21TdWZmaXggPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICBjb25zdCB0ZW1wTW9kdWxlTmFtZSA9IGBnZXQtb2JzaWRpYW4tbW9kdWxlLSR7cmFuZG9tU3VmZml4fWA7XG4gIGNvbnN0IGRpciA9IGAke2FwcC52YXVsdC5jb25maWdEaXJ9L3BsdWdpbnMvJHt0ZW1wTW9kdWxlTmFtZX1gO1xuICBhcHAucGx1Z2lucy5tYW5pZmVzdHNbdGVtcE1vZHVsZU5hbWVdID0ge1xuICAgIGF1dGhvcjogJycsXG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGRpcixcbiAgICBpZDogdGVtcE1vZHVsZU5hbWUsXG4gICAgaXNEZXNrdG9wT25seTogZmFsc2UsXG4gICAgbWluQXBwVmVyc2lvbjogJycsXG4gICAgbmFtZTogdGVtcE1vZHVsZU5hbWUsXG4gICAgdmVyc2lvbjogJydcbiAgfTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIoZGlyKTtcbiAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUoYCR7ZGlyfS9tYWluLmpzYCwgYCgke1N0cmluZyhnZXRPYnNpZGlhbk1vZHVsZVBsdWdpbkZuKX0pKCk7YCk7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmxvYWRQbHVnaW4odGVtcE1vZHVsZU5hbWUpO1xuICBhd2FpdCBhcHAucGx1Z2lucy51bmluc3RhbGxQbHVnaW4odGVtcE1vZHVsZU5hbWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBJdCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGhpbiBgbG9hZFBsdWdpbmAuXG4gIGlmIChvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSkge1xuICAgIHJldHVybiBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG9ic2lkaWFuIG1vZHVsZScpO1xufVxuXG4vKipcbiAqIFRoZSBib2R5IG9mIHRoZSB0ZW1wb3JhcnkgcGx1Z2luIHRoYXQgZXh0cmFjdHMgdGhlIGBvYnNpZGlhbmAgbW9kdWxlLlxuICogU2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCB3cml0dGVuIHRvIGBtYWluLmpzYCBieSB7QGxpbmsgZ2V0T2JzaWRpYW5Nb2R1bGV9LlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZS5cbiAqL1xuZnVuY3Rpb24gZ2V0T2JzaWRpYW5Nb2R1bGVQbHVnaW5GbigpOiB2b2lkIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kZXByZWNhdGVkIC0tIFdlIG5lZWQgZ2xvYmFsIGBhcHBgIHZhcmlhYmxlLlxuICBjb25zdCBhcHAgPSB3aW5kb3cuYXBwO1xuICBpbnRlcmZhY2UgT2JzaWRpYW5Nb2R1bGVIb2xkZXIge1xuICAgIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG4gIH1cbiAgY29uc3Qgb2JzaWRpYW5Nb2R1bGVIb2xkZXIgPSBhcHAgYXMgUGFydGlhbDxPYnNpZGlhbk1vZHVsZUhvbGRlcj47XG5cbiAgY29uc3QgcGx1Z2luUmVxdWlyZSA9IHJlcXVpcmU7XG4gIGNvbnN0IHBsdWdpbkV4cG9ydHMgPSBleHBvcnRzIGFzIEV4cG9ydHNXaXRoRGVmYXVsdDtcblxuICBjb25zdCBvYnNpZGlhbk1vZHVsZSA9IHBsdWdpblJlcXVpcmUoJ29ic2lkaWFuJykgYXMgdHlwZW9mIG9ic2lkaWFuO1xuICBvYnNpZGlhbk1vZHVsZUhvbGRlci5vYnNpZGlhbk1vZHVsZSA9IG9ic2lkaWFuTW9kdWxlO1xuICBwbHVnaW5FeHBvcnRzLmRlZmF1bHQgPSBvYnNpZGlhbk1vZHVsZS5QbHVnaW47XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFXQSxTQUFTLGtCQUFrQjtBQUMzQixPQUFPLGFBQWE7QUFRcEIsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxtQ0FBbUM7QUFDNUMsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyw0QkFBNEI7QUFNckMsTUFBTSxZQUFZO0FBaUZsQixlQUFzQixlQUNwQixRQUNpQjtBQUVqQixRQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsV0FBVyxJQUFJLDRCQUE0QixPQUFPLFdBQVcsbUJBQW1CLFVBQVUsSUFBSTtBQUNqSCxRQUFNLE1BQU0sYUFBYSxRQUFRLElBQUk7QUFHckMsTUFBSSxjQUFjLFVBQWEsQ0FBQyxXQUFXLFNBQVMsR0FBRztBQUNyRCxVQUFNLElBQUksTUFBTSw4QkFBOEIsU0FBUyxFQUFFO0FBQUEsRUFDM0Q7QUFFQSxRQUFNLFlBQVkscUJBQXFCLE1BQU0scUJBQXFCLG9CQUFvQixDQUFDO0FBRXZGLE1BQUksQ0FBQywyQkFBMkI7QUFDOUIsVUFBTSxVQUFVLGVBQWUsR0FBRztBQUFBLEVBQ3BDO0FBRUEsUUFBTSxjQUFjO0FBQ3BCLFFBQU0sZUFBZSxPQUFPLEtBQUssT0FBTyxDQUFDLEVBQUUsTUFBTSxXQUFXO0FBQzVELFFBQU0sY0FBYyxZQUNoQiwwQ0FBMEMsT0FBTyxTQUFTLENBQUMsZUFDM0Q7QUFDSixRQUFNLGFBQWE7QUFBQTtBQUFBLFlBRVQsWUFBWSxNQUFNLDRCQUE0QixFQUFFLENBQUM7QUFBQSx3QkFDckMsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTzlCLDRCQUE0Qix5QkFBeUIsQ0FBQztBQUFBLE1BQ3RELDRCQUE0QixpQkFBaUIsQ0FBQztBQUFBO0FBQUE7QUFBQSxjQUd0QyxZQUFZLE1BQU0sa0JBQWtCLElBQUksQ0FBQztBQUFBLGlCQUN0QyxZQUFZLE1BQU0sV0FBVztBQUFBLGtCQUM1QixZQUFZLHdCQUF3QixZQUFZLDBDQUEwQyxZQUFZLHFCQUFxQixZQUFZO0FBQUEsa0NBQ3ZILFlBQVksWUFBWSxZQUFZO0FBQUE7QUFHcEUsUUFBTSxZQUFZLE1BQU0sVUFBVSxTQUFTLFlBQVksRUFBRSxJQUFJLENBQUM7QUFFOUQsTUFBSSxjQUFjLFdBQVc7QUFDM0IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJO0FBQ0YsV0FBTyxLQUFLLE1BQU0sU0FBUztBQUFBLEVBQzdCLFFBQVE7QUFDTixVQUFNLElBQUksTUFBTSxzREFBc0QsU0FBUyxFQUFFO0FBQUEsRUFDbkY7QUFDRjtBQWVBLGVBQWUsb0JBQThDO0FBRTNELFFBQU0sTUFBTSxPQUFPO0FBSW5CLFFBQU0sdUJBQXVCO0FBQzdCLE1BQUkscUJBQXFCLGdCQUFnQjtBQUN2QyxXQUFPLHFCQUFxQjtBQUFBLEVBQzlCO0FBQ0EsUUFBTSxjQUFjO0FBQ3BCLFFBQU0sZUFBZSxPQUFPLEtBQUssT0FBTyxDQUFDLEVBQUUsTUFBTSxXQUFXO0FBQzVELFFBQU0saUJBQWlCLHVCQUF1QixZQUFZO0FBQzFELFFBQU0sTUFBTSxHQUFHLElBQUksTUFBTSxTQUFTLFlBQVksY0FBYztBQUM1RCxNQUFJLFFBQVEsVUFBVSxjQUFjLElBQUk7QUFBQSxJQUN0QyxRQUFRO0FBQUEsSUFDUixhQUFhO0FBQUEsSUFDYjtBQUFBLElBQ0EsSUFBSTtBQUFBLElBQ0osZUFBZTtBQUFBLElBQ2YsZUFBZTtBQUFBLElBQ2YsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLEVBQ1g7QUFDQSxRQUFNLElBQUksTUFBTSxRQUFRLE1BQU0sR0FBRztBQUNqQyxRQUFNLElBQUksTUFBTSxRQUFRLE1BQU0sR0FBRyxHQUFHLFlBQVksSUFBSSxPQUFPLHlCQUF5QixDQUFDLE1BQU07QUFDM0YsUUFBTSxJQUFJLFFBQVEsV0FBVyxjQUFjO0FBQzNDLFFBQU0sSUFBSSxRQUFRLGdCQUFnQixjQUFjO0FBRWhELE1BQUkscUJBQXFCLGdCQUFnQjtBQUN2QyxXQUFPLHFCQUFxQjtBQUFBLEVBQzlCO0FBQ0EsUUFBTSxJQUFJLE1BQU0sZ0NBQWdDO0FBQ2xEO0FBT0EsU0FBUyw0QkFBa0M7QUFFekMsUUFBTSxNQUFNLE9BQU87QUFJbkIsUUFBTSx1QkFBdUI7QUFFN0IsUUFBTSxnQkFBZ0I7QUFDdEIsUUFBTSxnQkFBZ0I7QUFFdEIsUUFBTSxpQkFBaUIsY0FBYyxVQUFVO0FBQy9DLHVCQUFxQixpQkFBaUI7QUFDdEMsZ0JBQWMsVUFBVSxlQUFlO0FBQ3pDOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -25,7 +25,7 @@ export declare class TempVault {
25
25
  * Unregisters the vault from Obsidian and deletes the temp directory.
26
26
  *
27
27
  * @param transportOverride - An explicit transport to use when unregistering.
28
- * When omitted, falls back to `inject('obsidianTransport')`.
28
+ * When omitted, falls back to the transport configured via the context provider.
29
29
  */
30
30
  dispose(transportOverride?: ObsidianTransport): Promise<void>;
31
31
  /**
@@ -40,7 +40,7 @@ export declare class TempVault {
40
40
  * Registers this vault in the running Obsidian instance so the CLI can target it.
41
41
  *
42
42
  * @param transportOverride - An explicit transport to use. When omitted,
43
- * falls back to `inject('obsidianTransport')`.
43
+ * falls back to the transport configured via the context provider.
44
44
  */
45
45
  register(transportOverride?: ObsidianTransport): Promise<void>;
46
46
  /**
@@ -60,7 +60,7 @@ export declare class TempVault {
60
60
  * a mobile transport.
61
61
  *
62
62
  * @param transportOverride - An explicit transport to use. When omitted,
63
- * falls back to `inject('obsidianTransport')`.
63
+ * falls back to the transport configured via the context provider.
64
64
  */
65
65
  syncToDevice(transportOverride?: ObsidianTransport): Promise<void>;
66
66
  /**