obsidian-integration-testing 4.2.6 → 4.4.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 (60) hide show
  1. package/README.md +71 -0
  2. package/dist/lib/cjs/enable-plugin.cjs +1 -1
  3. package/dist/lib/cjs/enable-plugin.d.cts +4 -4
  4. package/dist/lib/cjs/eval-in-obsidian.cjs +3 -5
  5. package/dist/lib/cjs/eval-in-obsidian.d.cts +5 -5
  6. package/dist/lib/cjs/generate-function-call.cjs +1 -1
  7. package/dist/lib/cjs/generate-function-call.d.cts +4 -4
  8. package/dist/lib/cjs/global-setup-core.cjs +39 -11
  9. package/dist/lib/cjs/global-setup-core.d.cts +13 -5
  10. package/dist/lib/cjs/jest/global-setup.cjs +24 -14
  11. package/dist/lib/cjs/jest/global-setup.d.cts +37 -4
  12. package/dist/lib/cjs/jest/global-teardown.cjs +26 -0
  13. package/dist/lib/cjs/jest/global-teardown.d.cts +11 -0
  14. package/dist/lib/cjs/library.cjs +1 -1
  15. package/dist/lib/cjs/namespace-bootstrap.cjs +1 -1
  16. package/dist/lib/cjs/obsidian-namespace.cjs +1 -1
  17. package/dist/lib/cjs/obsidian-namespace.d.cts +6 -6
  18. package/dist/lib/cjs/setup-lock.cjs +158 -0
  19. package/dist/lib/cjs/setup-lock.d.cts +55 -0
  20. package/dist/lib/cjs/strict-proxy.cjs +1 -1
  21. package/dist/lib/cjs/strict-proxy.d.cts +3 -2
  22. package/dist/lib/cjs/transport-desktop-cdp.cjs +1 -1
  23. package/dist/lib/cjs/transport-desktop-cli.cjs +1 -1
  24. package/dist/lib/cjs/transport-desktop-cli.d.cts +1 -1
  25. package/dist/lib/cjs/transport-factory.cjs +1 -1
  26. package/dist/lib/cjs/transport-options.cjs +1 -1
  27. package/dist/lib/cjs/transport-options.d.cts +14 -14
  28. package/dist/lib/cjs/vitest/global-setup.cjs +27 -19
  29. package/dist/lib/cjs/vitest/global-setup.d.cts +35 -3
  30. package/dist/lib/cjs/vitest/typings.d.cts +1 -1
  31. package/dist/lib/esm/enable-plugin.d.mts +4 -4
  32. package/dist/lib/esm/enable-plugin.mjs +1 -1
  33. package/dist/lib/esm/eval-in-obsidian.d.mts +5 -5
  34. package/dist/lib/esm/eval-in-obsidian.mjs +3 -5
  35. package/dist/lib/esm/generate-function-call.d.mts +4 -4
  36. package/dist/lib/esm/generate-function-call.mjs +1 -1
  37. package/dist/lib/esm/global-setup-core.d.mts +13 -5
  38. package/dist/lib/esm/global-setup-core.mjs +39 -11
  39. package/dist/lib/esm/jest/global-setup.d.mts +37 -4
  40. package/dist/lib/esm/jest/global-setup.mjs +23 -14
  41. package/dist/lib/esm/jest/global-teardown.d.mts +11 -0
  42. package/dist/lib/esm/jest/global-teardown.mjs +6 -0
  43. package/dist/lib/esm/library.mjs +1 -1
  44. package/dist/lib/esm/namespace-bootstrap.mjs +1 -1
  45. package/dist/lib/esm/obsidian-namespace.d.mts +6 -6
  46. package/dist/lib/esm/setup-lock.d.mts +55 -0
  47. package/dist/lib/esm/setup-lock.mjs +132 -0
  48. package/dist/lib/esm/strict-proxy.d.mts +3 -2
  49. package/dist/lib/esm/strict-proxy.mjs +1 -1
  50. package/dist/lib/esm/transport-desktop-cdp.mjs +1 -1
  51. package/dist/lib/esm/transport-desktop-cli.d.mts +1 -1
  52. package/dist/lib/esm/transport-desktop-cli.mjs +1 -1
  53. package/dist/lib/esm/transport-factory.mjs +1 -1
  54. package/dist/lib/esm/transport-options.d.mts +14 -14
  55. package/dist/lib/esm/vitest/global-setup.d.mts +35 -3
  56. package/dist/lib/esm/vitest/global-setup.mjs +26 -19
  57. package/dist/lib/esm/vitest/typings.d.mts +1 -1
  58. package/dist/obsidian-integration-testing-4.4.0.tgz +0 -0
  59. package/package.json +34 -21
  60. package/dist/obsidian-integration-testing-4.2.6.tgz +0 -0
@@ -7,7 +7,36 @@
7
7
  * to test workers via Vitest's `project.provide` / `inject`.
8
8
  */
9
9
  import type { TestProject } from 'vitest/node';
10
+ import type { PopulateFilesParams } from '../temp-vault.mjs';
10
11
  import { TempVault } from '../temp-vault.mjs';
12
+ /**
13
+ * Options for {@link createSetup}.
14
+ */
15
+ export interface CreateSetupOptions {
16
+ /**
17
+ * Returns files/folders to write into the vault before Obsidian opens it (see
18
+ * {@link CoreSetupParams.populate}). A thunk so large fixtures are built lazily,
19
+ * once, in the setup process.
20
+ */
21
+ populate?(this: void): PopulateFilesParams;
22
+ }
23
+ /**
24
+ * A Vitest `globalSetup` module's `setup` / `teardown` pair.
25
+ */
26
+ export interface VitestGlobalSetup {
27
+ setup(this: void, project: TestProject): Promise<void>;
28
+ teardown(this: void): Promise<void>;
29
+ }
30
+ /**
31
+ * Creates a Vitest global setup/teardown pair, optionally pre-populating the vault
32
+ * before Obsidian opens it — use this for a dedicated large-vault/performance
33
+ * project. The plain {@link setup} / {@link teardown} exports are the no-populate
34
+ * case (`createSetup()`).
35
+ *
36
+ * @param options - Setup options.
37
+ * @returns The `setup` and `teardown` functions to re-export from a `globalSetup` module.
38
+ */
39
+ export declare function createSetup(options?: CreateSetupOptions): VitestGlobalSetup;
11
40
  /**
12
41
  * Returns the temporary vault provided by the global setup.
13
42
  *
@@ -15,17 +44,20 @@ import { TempVault } from '../temp-vault.mjs';
15
44
  */
16
45
  export declare function getTempVault(): TempVault;
17
46
  /**
18
- * Vitest global setup function.
47
+ * Vitest global setup function (no pre-population).
19
48
  *
20
49
  * Copies the built plugin into a temporary vault, enables it via the Obsidian CLI,
21
50
  * and provides `tempVaultPath` to tests.
22
51
  *
23
52
  * @param project - The Vitest project.
53
+ * @returns A promise that resolves when setup completes.
24
54
  */
25
- export declare function setup(project: TestProject): Promise<void>;
55
+ export declare const setup: (this: void, project: TestProject) => Promise<void>;
26
56
  /**
27
57
  * Vitest global teardown function.
28
58
  *
29
59
  * Removes the temporary vault created during setup.
60
+ *
61
+ * @returns A promise that resolves when teardown completes.
30
62
  */
31
- export declare function teardown(): Promise<void>;
63
+ export declare const teardown: (this: void) => Promise<void>;
@@ -12,7 +12,27 @@ import { serializeError } from "../serialize-error.mjs";
12
12
  import { TempVault } from "../temp-vault.mjs";
13
13
  setTransportOptionsResolver(() => inject("obsidianTransport"));
14
14
  setVaultPathResolver(() => inject("tempVaultPath"));
15
- let setupResult;
15
+ function createSetup(options) {
16
+ let setupResult;
17
+ return { setup: setup2, teardown: teardown2 };
18
+ async function setup2(project) {
19
+ const environmentOptions = project.config.environmentOptions;
20
+ const transportOptions = environmentOptions?.["obsidianTransport"];
21
+ const label = transportOptions?.type ?? "obsidian-cli";
22
+ try {
23
+ setupResult = await coreSetup({ populate: options?.populate?.(), transportOptions });
24
+ } catch (error) {
25
+ log(`[integration-setup:${label}] Setup failed (tests for this project will be skipped): ${serializeError(error)}`);
26
+ project.provide("setupError", serializeError(error));
27
+ return;
28
+ }
29
+ project.provide("obsidianTransport", setupResult.transportOptions);
30
+ project.provide("tempVaultPath", setupResult.tempVault.path);
31
+ }
32
+ async function teardown2() {
33
+ await coreTeardown(setupResult);
34
+ }
35
+ }
16
36
  function getTempVault() {
17
37
  const tempVaultPath = inject("tempVaultPath");
18
38
  const setupErrorMessage = inject("setupError");
@@ -21,26 +41,13 @@ function getTempVault() {
21
41
  }
22
42
  return new TempVault(tempVaultPath);
23
43
  }
24
- async function setup(project) {
25
- const environmentOptions = project.config.environmentOptions;
26
- const transportOptions = environmentOptions?.["obsidianTransport"];
27
- const label = transportOptions?.type ?? "obsidian-cli";
28
- try {
29
- setupResult = await coreSetup({ transportOptions });
30
- } catch (error) {
31
- log(`[integration-setup:${label}] Setup failed (tests for this project will be skipped): ${serializeError(error)}`);
32
- project.provide("setupError", serializeError(error));
33
- return;
34
- }
35
- project.provide("obsidianTransport", setupResult.transportOptions);
36
- project.provide("tempVaultPath", setupResult.tempVault.path);
37
- }
38
- async function teardown() {
39
- await coreTeardown(setupResult);
40
- }
44
+ const defaultGlobalSetup = createSetup();
45
+ const setup = defaultGlobalSetup.setup;
46
+ const teardown = defaultGlobalSetup.teardown;
41
47
  export {
48
+ createSetup,
42
49
  getTempVault,
43
50
  setup,
44
51
  teardown
45
52
  };
46
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3ZpdGVzdC9nbG9iYWwtc2V0dXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBWaXRlc3QgZ2xvYmFsIHNldHVwIGFuZCB0ZWFyZG93biBhZGFwdGVyLlxuICpcbiAqIERlbGVnYXRlcyB0byB0aGUgZnJhbWV3b3JrLWFnbm9zdGljIGNvcmUgYW5kIGJyaWRnZXMgY29udGV4dFxuICogdG8gdGVzdCB3b3JrZXJzIHZpYSBWaXRlc3QncyBgcHJvamVjdC5wcm92aWRlYCAvIGBpbmplY3RgLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IFRlc3RQcm9qZWN0IH0gZnJvbSAndml0ZXN0L25vZGUnO1xuXG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IENvcmVTZXR1cFJlc3VsdCB9IGZyb20gJy4uL2dsb2JhbC1zZXR1cC1jb3JlLm1qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4uL3RyYW5zcG9ydC1vcHRpb25zLm1qcyc7XG5cbmltcG9ydCB7XG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi4vY29udGV4dC1wcm92aWRlci5tanMnO1xuaW1wb3J0IHtcbiAgY29yZVNldHVwLFxuICBjb3JlVGVhcmRvd25cbn0gZnJvbSAnLi4vZ2xvYmFsLXNldHVwLWNvcmUubWpzJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJy4uL2xvZy5tanMnO1xuaW1wb3J0IHsgc2VyaWFsaXplRXJyb3IgfSBmcm9tICcuLi9zZXJpYWxpemUtZXJyb3IubWpzJztcbmltcG9ydCB7IFRlbXBWYXVsdCB9IGZyb20gJy4uL3RlbXAtdmF1bHQubWpzJztcblxuc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyKCgpID0+IGluamVjdCgnb2JzaWRpYW5UcmFuc3BvcnQnKSk7XG5zZXRWYXVsdFBhdGhSZXNvbHZlcigoKSA9PiBpbmplY3QoJ3RlbXBWYXVsdFBhdGgnKSk7XG5cbmxldCBzZXR1cFJlc3VsdDogQ29yZVNldHVwUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHRlbXBvcmFyeSB2YXVsdCBwcm92aWRlZCBieSB0aGUgZ2xvYmFsIHNldHVwLlxuICpcbiAqIEByZXR1cm5zIFRoZSB0ZW1wb3JhcnkgdmF1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW1wVmF1bHQoKTogVGVtcFZhdWx0IHtcbiAgY29uc3QgdGVtcFZhdWx0UGF0aCA9IGluamVjdCgndGVtcFZhdWx0UGF0aCcpO1xuICBjb25zdCBzZXR1cEVycm9yTWVzc2FnZSA9IGluamVjdCgnc2V0dXBFcnJvcicpO1xuICBpZiAoc2V0dXBFcnJvck1lc3NhZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludGVncmF0aW9uIHNldHVwIGZhaWxlZCBcdTIwMTQgY2Fubm90IGdldCB0ZW1wIHZhdWx0OiAke3NldHVwRXJyb3JNZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBuZXcgVGVtcFZhdWx0KHRlbXBWYXVsdFBhdGgpO1xufVxuXG4vKipcbiAqIFZpdGVzdCBnbG9iYWwgc2V0dXAgZnVuY3Rpb24uXG4gKlxuICogQ29waWVzIHRoZSBidWlsdCBwbHVnaW4gaW50byBhIHRlbXBvcmFyeSB2YXVsdCwgZW5hYmxlcyBpdCB2aWEgdGhlIE9ic2lkaWFuIENMSSxcbiAqIGFuZCBwcm92aWRlcyBgdGVtcFZhdWx0UGF0aGAgdG8gdGVzdHMuXG4gKlxuICogQHBhcmFtIHByb2plY3QgLSBUaGUgVml0ZXN0IHByb2plY3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cChwcm9qZWN0OiBUZXN0UHJvamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBlbnZpcm9ubWVudE9wdGlvbnMgPSBwcm9qZWN0LmNvbmZpZy5lbnZpcm9ubWVudE9wdGlvbnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHRyYW5zcG9ydE9wdGlvbnMgPSBlbnZpcm9ubWVudE9wdGlvbnM/Llsnb2JzaWRpYW5UcmFuc3BvcnQnXSBhcyBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGxhYmVsID0gdHJhbnNwb3J0T3B0aW9ucz8udHlwZSA/PyAnb2JzaWRpYW4tY2xpJztcblxuICB0cnkge1xuICAgIHNldHVwUmVzdWx0ID0gYXdhaXQgY29yZVNldHVwKHsgdHJhbnNwb3J0T3B0aW9ucyB9KTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAvLyBDYXRjaCBzZXR1cCBlcnJvcnMgc28gdGhhdCBvdGhlciBwcm9qZWN0cycgdGVzdHMgY2FuIHN0aWxsIHJ1bi5cbiAgICAvLyBJbmRpdmlkdWFsIHRlc3RzIGluIHRoaXMgcHJvamVjdCB3aWxsIGZhaWwgd2l0aCB0aGUgc3RvcmVkIGVycm9yXG4gICAgLy8gV2hlbiB0aGV5IHRyeSB0byBpbmplY3QgdGhlIHRlbXAgdmF1bHQgcGF0aC5cbiAgICBsb2coYFtpbnRlZ3JhdGlvbi1zZXR1cDoke2xhYmVsfV0gU2V0dXAgZmFpbGVkICh0ZXN0cyBmb3IgdGhpcyBwcm9qZWN0IHdpbGwgYmUgc2tpcHBlZCk6ICR7c2VyaWFsaXplRXJyb3IoZXJyb3IpfWApO1xuICAgIHByb2plY3QucHJvdmlkZSgnc2V0dXBFcnJvcicsIHNlcmlhbGl6ZUVycm9yKGVycm9yKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJvamVjdC5wcm92aWRlKCdvYnNpZGlhblRyYW5zcG9ydCcsIHNldHVwUmVzdWx0LnRyYW5zcG9ydE9wdGlvbnMpO1xuICBwcm9qZWN0LnByb3ZpZGUoJ3RlbXBWYXVsdFBhdGgnLCBzZXR1cFJlc3VsdC50ZW1wVmF1bHQucGF0aCk7XG59XG5cbi8qKlxuICogVml0ZXN0IGdsb2JhbCB0ZWFyZG93biBmdW5jdGlvbi5cbiAqXG4gKiBSZW1vdmVzIHRoZSB0ZW1wb3JhcnkgdmF1bHQgY3JlYXRlZCBkdXJpbmcgc2V0dXAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZWFyZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgY29yZVRlYXJkb3duKHNldHVwUmVzdWx0KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQWFBLFNBQVMsY0FBYztBQUt2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxXQUFXO0FBQ3BCLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsaUJBQWlCO0FBRTFCLDRCQUE0QixNQUFNLE9BQU8sbUJBQW1CLENBQUM7QUFDN0QscUJBQXFCLE1BQU0sT0FBTyxlQUFlLENBQUM7QUFFbEQsSUFBSTtBQU9HLFNBQVMsZUFBMEI7QUFDeEMsUUFBTSxnQkFBZ0IsT0FBTyxlQUFlO0FBQzVDLFFBQU0sb0JBQW9CLE9BQU8sWUFBWTtBQUM3QyxNQUFJLG1CQUFtQjtBQUNyQixVQUFNLElBQUksTUFBTSwwREFBcUQsaUJBQWlCLEVBQUU7QUFBQSxFQUMxRjtBQUNBLFNBQU8sSUFBSSxVQUFVLGFBQWE7QUFDcEM7QUFVQSxlQUFzQixNQUFNLFNBQXFDO0FBQy9ELFFBQU0scUJBQXFCLFFBQVEsT0FBTztBQUMxQyxRQUFNLG1CQUFtQixxQkFBcUIsbUJBQW1CO0FBQ2pFLFFBQU0sUUFBUSxrQkFBa0IsUUFBUTtBQUV4QyxNQUFJO0FBQ0Ysa0JBQWMsTUFBTSxVQUFVLEVBQUUsaUJBQWlCLENBQUM7QUFBQSxFQUNwRCxTQUFTLE9BQWdCO0FBSXZCLFFBQUksc0JBQXNCLEtBQUssNERBQTRELGVBQWUsS0FBSyxDQUFDLEVBQUU7QUFDbEgsWUFBUSxRQUFRLGNBQWMsZUFBZSxLQUFLLENBQUM7QUFDbkQ7QUFBQSxFQUNGO0FBRUEsVUFBUSxRQUFRLHFCQUFxQixZQUFZLGdCQUFnQjtBQUNqRSxVQUFRLFFBQVEsaUJBQWlCLFlBQVksVUFBVSxJQUFJO0FBQzdEO0FBT0EsZUFBc0IsV0FBMEI7QUFDOUMsUUFBTSxhQUFhLFdBQVc7QUFDaEM7IiwKICAibmFtZXMiOiBbXQp9Cg==
53
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3ZpdGVzdC9nbG9iYWwtc2V0dXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBWaXRlc3QgZ2xvYmFsIHNldHVwIGFuZCB0ZWFyZG93biBhZGFwdGVyLlxuICpcbiAqIERlbGVnYXRlcyB0byB0aGUgZnJhbWV3b3JrLWFnbm9zdGljIGNvcmUgYW5kIGJyaWRnZXMgY29udGV4dFxuICogdG8gdGVzdCB3b3JrZXJzIHZpYSBWaXRlc3QncyBgcHJvamVjdC5wcm92aWRlYCAvIGBpbmplY3RgLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IFRlc3RQcm9qZWN0IH0gZnJvbSAndml0ZXN0L25vZGUnO1xuXG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IENvcmVTZXR1cFJlc3VsdCB9IGZyb20gJy4uL2dsb2JhbC1zZXR1cC1jb3JlLm1qcyc7XG5pbXBvcnQgdHlwZSB7IFBvcHVsYXRlRmlsZXNQYXJhbXMgfSBmcm9tICcuLi90ZW1wLXZhdWx0Lm1qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4uL3RyYW5zcG9ydC1vcHRpb25zLm1qcyc7XG5cbmltcG9ydCB7XG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi4vY29udGV4dC1wcm92aWRlci5tanMnO1xuaW1wb3J0IHtcbiAgY29yZVNldHVwLFxuICBjb3JlVGVhcmRvd25cbn0gZnJvbSAnLi4vZ2xvYmFsLXNldHVwLWNvcmUubWpzJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJy4uL2xvZy5tanMnO1xuaW1wb3J0IHsgc2VyaWFsaXplRXJyb3IgfSBmcm9tICcuLi9zZXJpYWxpemUtZXJyb3IubWpzJztcbmltcG9ydCB7IFRlbXBWYXVsdCB9IGZyb20gJy4uL3RlbXAtdmF1bHQubWpzJztcblxuc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyKCgpID0+IGluamVjdCgnb2JzaWRpYW5UcmFuc3BvcnQnKSk7XG5zZXRWYXVsdFBhdGhSZXNvbHZlcigoKSA9PiBpbmplY3QoJ3RlbXBWYXVsdFBhdGgnKSk7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGNyZWF0ZVNldHVwfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVTZXR1cE9wdGlvbnMge1xuICAvKipcbiAgICogUmV0dXJucyBmaWxlcy9mb2xkZXJzIHRvIHdyaXRlIGludG8gdGhlIHZhdWx0IGJlZm9yZSBPYnNpZGlhbiBvcGVucyBpdCAoc2VlXG4gICAqIHtAbGluayBDb3JlU2V0dXBQYXJhbXMucG9wdWxhdGV9KS4gQSB0aHVuayBzbyBsYXJnZSBmaXh0dXJlcyBhcmUgYnVpbHQgbGF6aWx5LFxuICAgKiBvbmNlLCBpbiB0aGUgc2V0dXAgcHJvY2Vzcy5cbiAgICovXG4gIHBvcHVsYXRlPyh0aGlzOiB2b2lkKTogUG9wdWxhdGVGaWxlc1BhcmFtcztcbn1cblxuLyoqXG4gKiBBIFZpdGVzdCBgZ2xvYmFsU2V0dXBgIG1vZHVsZSdzIGBzZXR1cGAgLyBgdGVhcmRvd25gIHBhaXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVml0ZXN0R2xvYmFsU2V0dXAge1xuICBzZXR1cCh0aGlzOiB2b2lkLCBwcm9qZWN0OiBUZXN0UHJvamVjdCk6IFByb21pc2U8dm9pZD47XG4gIHRlYXJkb3duKHRoaXM6IHZvaWQpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBWaXRlc3QgZ2xvYmFsIHNldHVwL3RlYXJkb3duIHBhaXIsIG9wdGlvbmFsbHkgcHJlLXBvcHVsYXRpbmcgdGhlIHZhdWx0XG4gKiBiZWZvcmUgT2JzaWRpYW4gb3BlbnMgaXQgXHUyMDE0IHVzZSB0aGlzIGZvciBhIGRlZGljYXRlZCBsYXJnZS12YXVsdC9wZXJmb3JtYW5jZVxuICogcHJvamVjdC4gVGhlIHBsYWluIHtAbGluayBzZXR1cH0gLyB7QGxpbmsgdGVhcmRvd259IGV4cG9ydHMgYXJlIHRoZSBuby1wb3B1bGF0ZVxuICogY2FzZSAoYGNyZWF0ZVNldHVwKClgKS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFNldHVwIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgYHNldHVwYCBhbmQgYHRlYXJkb3duYCBmdW5jdGlvbnMgdG8gcmUtZXhwb3J0IGZyb20gYSBgZ2xvYmFsU2V0dXBgIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldHVwKG9wdGlvbnM/OiBDcmVhdGVTZXR1cE9wdGlvbnMpOiBWaXRlc3RHbG9iYWxTZXR1cCB7XG4gIGxldCBzZXR1cFJlc3VsdDogQ29yZVNldHVwUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7IHNldHVwLCB0ZWFyZG93biB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNldHVwKHByb2plY3Q6IFRlc3RQcm9qZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW52aXJvbm1lbnRPcHRpb25zID0gcHJvamVjdC5jb25maWcuZW52aXJvbm1lbnRPcHRpb25zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRyYW5zcG9ydE9wdGlvbnMgPSBlbnZpcm9ubWVudE9wdGlvbnM/Llsnb2JzaWRpYW5UcmFuc3BvcnQnXSBhcyBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgbGFiZWwgPSB0cmFuc3BvcnRPcHRpb25zPy50eXBlID8/ICdvYnNpZGlhbi1jbGknO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldHVwUmVzdWx0ID0gYXdhaXQgY29yZVNldHVwKHsgcG9wdWxhdGU6IG9wdGlvbnM/LnBvcHVsYXRlPy4oKSwgdHJhbnNwb3J0T3B0aW9ucyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgLy8gQ2F0Y2ggc2V0dXAgZXJyb3JzIHNvIHRoYXQgb3RoZXIgcHJvamVjdHMnIHRlc3RzIGNhbiBzdGlsbCBydW4uXG4gICAgICAvLyBJbmRpdmlkdWFsIHRlc3RzIGluIHRoaXMgcHJvamVjdCB3aWxsIGZhaWwgd2l0aCB0aGUgc3RvcmVkIGVycm9yXG4gICAgICAvLyBXaGVuIHRoZXkgdHJ5IHRvIGluamVjdCB0aGUgdGVtcCB2YXVsdCBwYXRoLlxuICAgICAgbG9nKGBbaW50ZWdyYXRpb24tc2V0dXA6JHtsYWJlbH1dIFNldHVwIGZhaWxlZCAodGVzdHMgZm9yIHRoaXMgcHJvamVjdCB3aWxsIGJlIHNraXBwZWQpOiAke3NlcmlhbGl6ZUVycm9yKGVycm9yKX1gKTtcbiAgICAgIHByb2plY3QucHJvdmlkZSgnc2V0dXBFcnJvcicsIHNlcmlhbGl6ZUVycm9yKGVycm9yKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvamVjdC5wcm92aWRlKCdvYnNpZGlhblRyYW5zcG9ydCcsIHNldHVwUmVzdWx0LnRyYW5zcG9ydE9wdGlvbnMpO1xuICAgIHByb2plY3QucHJvdmlkZSgndGVtcFZhdWx0UGF0aCcsIHNldHVwUmVzdWx0LnRlbXBWYXVsdC5wYXRoKTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHRlYXJkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGNvcmVUZWFyZG93bihzZXR1cFJlc3VsdCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0ZW1wb3JhcnkgdmF1bHQgcHJvdmlkZWQgYnkgdGhlIGdsb2JhbCBzZXR1cC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdGVtcG9yYXJ5IHZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcFZhdWx0KCk6IFRlbXBWYXVsdCB7XG4gIGNvbnN0IHRlbXBWYXVsdFBhdGggPSBpbmplY3QoJ3RlbXBWYXVsdFBhdGgnKTtcbiAgY29uc3Qgc2V0dXBFcnJvck1lc3NhZ2UgPSBpbmplY3QoJ3NldHVwRXJyb3InKTtcbiAgaWYgKHNldHVwRXJyb3JNZXNzYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlZ3JhdGlvbiBzZXR1cCBmYWlsZWQgXHUyMDE0IGNhbm5vdCBnZXQgdGVtcCB2YXVsdDogJHtzZXR1cEVycm9yTWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gbmV3IFRlbXBWYXVsdCh0ZW1wVmF1bHRQYXRoKTtcbn1cblxuY29uc3QgZGVmYXVsdEdsb2JhbFNldHVwID0gY3JlYXRlU2V0dXAoKTtcblxuLyoqXG4gKiBWaXRlc3QgZ2xvYmFsIHNldHVwIGZ1bmN0aW9uIChubyBwcmUtcG9wdWxhdGlvbikuXG4gKlxuICogQ29waWVzIHRoZSBidWlsdCBwbHVnaW4gaW50byBhIHRlbXBvcmFyeSB2YXVsdCwgZW5hYmxlcyBpdCB2aWEgdGhlIE9ic2lkaWFuIENMSSxcbiAqIGFuZCBwcm92aWRlcyBgdGVtcFZhdWx0UGF0aGAgdG8gdGVzdHMuXG4gKlxuICogQHBhcmFtIHByb2plY3QgLSBUaGUgVml0ZXN0IHByb2plY3QuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHNldHVwIGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldHVwID0gZGVmYXVsdEdsb2JhbFNldHVwLnNldHVwO1xuXG4vKipcbiAqIFZpdGVzdCBnbG9iYWwgdGVhcmRvd24gZnVuY3Rpb24uXG4gKlxuICogUmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IHZhdWx0IGNyZWF0ZWQgZHVyaW5nIHNldHVwLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGVhcmRvd24gY29tcGxldGVzLlxuICovXG5leHBvcnQgY29uc3QgdGVhcmRvd24gPSBkZWZhdWx0R2xvYmFsU2V0dXAudGVhcmRvd247XG4iXSwKICAibWFwcGluZ3MiOiAiQUFhQSxTQUFTLGNBQWM7QUFNdkI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsV0FBVztBQUNwQixTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGlCQUFpQjtBQUUxQiw0QkFBNEIsTUFBTSxPQUFPLG1CQUFtQixDQUFDO0FBQzdELHFCQUFxQixNQUFNLE9BQU8sZUFBZSxDQUFDO0FBK0IzQyxTQUFTLFlBQVksU0FBaUQ7QUFDM0UsTUFBSTtBQUVKLFNBQU8sRUFBRSxPQUFBQSxRQUFPLFVBQUFDLFVBQVM7QUFFekIsaUJBQWVELE9BQU0sU0FBcUM7QUFDeEQsVUFBTSxxQkFBcUIsUUFBUSxPQUFPO0FBQzFDLFVBQU0sbUJBQW1CLHFCQUFxQixtQkFBbUI7QUFDakUsVUFBTSxRQUFRLGtCQUFrQixRQUFRO0FBRXhDLFFBQUk7QUFDRixvQkFBYyxNQUFNLFVBQVUsRUFBRSxVQUFVLFNBQVMsV0FBVyxHQUFHLGlCQUFpQixDQUFDO0FBQUEsSUFDckYsU0FBUyxPQUFnQjtBQUl2QixVQUFJLHNCQUFzQixLQUFLLDREQUE0RCxlQUFlLEtBQUssQ0FBQyxFQUFFO0FBQ2xILGNBQVEsUUFBUSxjQUFjLGVBQWUsS0FBSyxDQUFDO0FBQ25EO0FBQUEsSUFDRjtBQUVBLFlBQVEsUUFBUSxxQkFBcUIsWUFBWSxnQkFBZ0I7QUFDakUsWUFBUSxRQUFRLGlCQUFpQixZQUFZLFVBQVUsSUFBSTtBQUFBLEVBQzdEO0FBRUEsaUJBQWVDLFlBQTBCO0FBQ3ZDLFVBQU0sYUFBYSxXQUFXO0FBQUEsRUFDaEM7QUFDRjtBQU9PLFNBQVMsZUFBMEI7QUFDeEMsUUFBTSxnQkFBZ0IsT0FBTyxlQUFlO0FBQzVDLFFBQU0sb0JBQW9CLE9BQU8sWUFBWTtBQUM3QyxNQUFJLG1CQUFtQjtBQUNyQixVQUFNLElBQUksTUFBTSwwREFBcUQsaUJBQWlCLEVBQUU7QUFBQSxFQUMxRjtBQUNBLFNBQU8sSUFBSSxVQUFVLGFBQWE7QUFDcEM7QUFFQSxNQUFNLHFCQUFxQixZQUFZO0FBV2hDLE1BQU0sUUFBUSxtQkFBbUI7QUFTakMsTUFBTSxXQUFXLG1CQUFtQjsiLAogICJuYW1lcyI6IFsic2V0dXAiLCAidGVhcmRvd24iXQp9Cg==
@@ -48,6 +48,6 @@ declare module 'vitest/node' {
48
48
  *
49
49
  * When omitted, defaults to the CLI transport (`obsidian-cli`).
50
50
  */
51
- obsidianTransport?: ObsidianTransportOptions;
51
+ readonly obsidianTransport?: ObsidianTransportOptions;
52
52
  }
53
53
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-integration-testing",
3
- "version": "4.2.6",
3
+ "version": "4.4.0",
4
4
  "description": "Simplifies integration testing of Obsidian plugins.",
5
5
  "keywords": [
6
6
  "obsidian",
@@ -40,6 +40,16 @@
40
40
  "default": "./dist/lib/cjs/jest/global-setup.cjs"
41
41
  }
42
42
  },
43
+ "./jest-global-teardown": {
44
+ "import": {
45
+ "types": "./dist/lib/esm/jest/global-teardown.d.mts",
46
+ "default": "./dist/lib/esm/jest/global-teardown.mjs"
47
+ },
48
+ "require": {
49
+ "types": "./dist/lib/cjs/jest/global-teardown.d.cts",
50
+ "default": "./dist/lib/cjs/jest/global-teardown.cjs"
51
+ }
52
+ },
43
53
  "./vitest-global-setup": {
44
54
  "import": {
45
55
  "types": "./dist/lib/esm/vitest/global-setup.d.mts",
@@ -96,27 +106,30 @@
96
106
  "@sinonjs/fake-timers": "13.0.5",
97
107
  "electron": "42.0.1",
98
108
  "eslint-plugin-import": "$eslint-plugin-import-x",
109
+ "js-yaml": "^4.2.0",
99
110
  "lodash": "4.18.1",
100
111
  "lodash-es": "4.18.1",
112
+ "markdown-it": "^14.2.0",
101
113
  "mermaid": "11.15.0",
102
114
  "tmp": "0.2.5",
103
115
  "type-fest": "$type-fest",
104
116
  "typescript": "$typescript",
105
- "urlpattern-polyfill": "npm:dry-uninstall"
117
+ "urlpattern-polyfill": "npm:dry-uninstall",
118
+ "vite": "$vite"
106
119
  },
107
120
  "dependencies": {
108
121
  "puppeteer-core": "^25.1.0",
109
122
  "webdriverio": "9.27.0"
110
123
  },
111
124
  "devDependencies": {
112
- "@commitlint/cli": "^21.0.1",
113
- "@commitlint/config-conventional": "^21.0.1",
125
+ "@commitlint/cli": "^21.0.2",
126
+ "@commitlint/config-conventional": "^21.0.2",
114
127
  "@commitlint/types": "^21.0.1",
115
128
  "@eslint-community/eslint-plugin-eslint-comments": "^4.7.2",
116
129
  "@eslint/compat": "^2.1.0",
117
130
  "@eslint/config-helpers": "^0.6.0",
118
131
  "@eslint/js": "^10.0.1",
119
- "@obsidian-typings/obsidian-public-latest": "^6.12.0",
132
+ "@obsidian-typings/obsidian-public-latest": "^6.15.0",
120
133
  "@stylistic/eslint-plugin": "^5.10.0",
121
134
  "@total-typescript/ts-reset": "^0.6.1",
122
135
  "@tsconfig/strictest": "^2.0.8",
@@ -124,22 +137,22 @@
124
137
  "@types/markdown-it": "^14.1.2",
125
138
  "@types/semver": "^7.7.1",
126
139
  "@types/turndown": "^5.0.6",
127
- "@typescript-eslint/rule-tester": "^8.60.0",
128
- "@typescript-eslint/utils": "^8.60.0",
129
- "@vitest/coverage-v8": "^4.1.7",
140
+ "@typescript-eslint/rule-tester": "^8.61.1",
141
+ "@typescript-eslint/utils": "^8.61.1",
142
+ "@vitest/coverage-v8": "^4.1.9",
130
143
  "@vitest/runner": "4.1.0",
131
144
  "@wdio/protocols": "9.27.0",
132
145
  "@wdio/types": "9.27.0",
133
146
  "better-typescript-lib": "^2.12.0",
134
- "cspell": "^10.0.0",
147
+ "cspell": "^10.0.1",
135
148
  "czg": "^1.13.1",
136
149
  "dprint": "^0.54.0",
137
- "esbuild": "^0.28.0",
138
- "eslint": "^10.4.0",
139
- "eslint-import-resolver-typescript": "^4.4.4",
150
+ "esbuild": "^0.28.1",
151
+ "eslint": "^10.5.0",
152
+ "eslint-import-resolver-typescript": "^4.4.5",
140
153
  "eslint-plugin-import-x": "^4.16.2",
141
- "eslint-plugin-jsdoc": "^63.0.0",
142
- "eslint-plugin-perfectionist": "^5.9.0",
154
+ "eslint-plugin-jsdoc": "^63.0.6",
155
+ "eslint-plugin-perfectionist": "^5.9.1",
143
156
  "eslint-plugin-tsdoc": "^0.5.2",
144
157
  "globals": "^17.6.0",
145
158
  "husky": "^9.1.7",
@@ -147,18 +160,18 @@
147
160
  "jest-config": "^30.4.2",
148
161
  "jiti": "^2.7.0",
149
162
  "jsdom": "^29.1.1",
150
- "markdownlint": "^0.40.0",
163
+ "markdownlint": "^0.41.0",
151
164
  "markdownlint-cli2": "^0.22.1",
152
165
  "markdownlint-rule-relative-links": "^5.1.0",
153
166
  "nano-staged": "^1.0.2",
154
- "obsidian": "^1.12.3",
155
- "semver": "^7.8.1",
167
+ "obsidian": "^1.13.1",
168
+ "semver": "^7.8.5",
156
169
  "ts-jest": "^29.4.11",
157
- "type-fest": "^5.6.0",
170
+ "type-fest": "^5.7.0",
158
171
  "typescript": "^6.0.3",
159
- "typescript-eslint": "^8.60.0",
160
- "vite": "8.0.12",
161
- "vitest": "^4.1.7"
172
+ "typescript-eslint": "^8.61.1",
173
+ "vite": "^8.0.12",
174
+ "vitest": "^4.1.9"
162
175
  },
163
176
  "peerDependencies": {
164
177
  "obsidian": "^1.12.3",