obsidian-integration-testing 1.3.2 → 2.0.1
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.
- package/README.md +54 -11
- package/dist/lib/cjs/context-provider.cjs +37 -0
- package/dist/lib/cjs/context-provider.d.cts +28 -0
- package/dist/lib/cjs/global-setup-core.cjs +127 -0
- package/dist/lib/cjs/global-setup-core.d.cts +48 -0
- package/dist/lib/cjs/index.cjs +4 -2
- package/dist/lib/cjs/index.d.cts +2 -1
- package/dist/lib/cjs/jest/global-setup.cjs +63 -0
- package/dist/lib/cjs/jest/global-setup.d.cts +61 -0
- package/dist/lib/cjs/log.cjs +32 -0
- package/dist/lib/cjs/log.d.cts +11 -0
- package/dist/lib/cjs/obsidian-cli.cjs +3 -3
- package/dist/lib/cjs/obsidian-cli.d.cts +1 -1
- package/dist/lib/cjs/temp-vault.cjs +7 -7
- package/dist/lib/cjs/temp-vault.d.cts +3 -3
- package/dist/lib/cjs/transport-appium.cjs +12 -11
- package/dist/lib/cjs/transport-desktop-cdp.cjs +35 -10
- package/dist/lib/cjs/transport-desktop-cdp.d.cts +12 -0
- package/dist/lib/cjs/transport-desktop-cli.cjs +34 -10
- package/dist/lib/cjs/transport-desktop-cli.d.cts +11 -0
- package/dist/lib/cjs/transport-factory.cjs +15 -14
- package/dist/lib/cjs/vault-registry.cjs +4 -4
- package/dist/lib/cjs/vault-registry.d.cts +8 -2
- package/dist/lib/cjs/vitest/global-setup.cjs +52 -0
- package/dist/lib/{esm/integration-global-setup.d.mts → cjs/vitest/global-setup.d.cts} +5 -2
- package/dist/lib/{esm/vitest.d.mts → cjs/vitest/typings.d.cts} +1 -1
- package/dist/lib/esm/context-provider.d.mts +28 -0
- package/dist/lib/esm/context-provider.mjs +12 -0
- package/dist/lib/esm/global-setup-core.d.mts +48 -0
- package/dist/lib/esm/global-setup-core.mjs +108 -0
- package/dist/lib/esm/index.d.mts +2 -1
- package/dist/lib/esm/index.mjs +3 -2
- package/dist/lib/esm/jest/global-setup.d.mts +61 -0
- package/dist/lib/esm/jest/global-setup.mjs +39 -0
- package/dist/lib/esm/log.d.mts +11 -0
- package/dist/lib/esm/log.mjs +8 -0
- package/dist/lib/esm/obsidian-cli.d.mts +1 -1
- package/dist/lib/esm/obsidian-cli.mjs +3 -3
- package/dist/lib/esm/temp-vault.d.mts +3 -3
- package/dist/lib/esm/temp-vault.mjs +7 -7
- package/dist/lib/esm/transport-appium.mjs +12 -11
- package/dist/lib/esm/transport-desktop-cdp.d.mts +12 -0
- package/dist/lib/esm/transport-desktop-cdp.mjs +39 -11
- package/dist/lib/esm/transport-desktop-cli.d.mts +11 -0
- package/dist/lib/esm/transport-desktop-cli.mjs +35 -10
- package/dist/lib/esm/transport-factory.mjs +15 -14
- package/dist/lib/esm/vault-registry.d.mts +8 -2
- package/dist/lib/esm/vault-registry.mjs +4 -4
- package/dist/lib/{cjs/integration-global-setup.d.cts → esm/vitest/global-setup.d.mts} +5 -2
- package/dist/lib/esm/vitest/global-setup.mjs +29 -0
- package/dist/lib/{cjs/vitest.d.cts → esm/vitest/typings.d.mts} +1 -1
- package/dist/obsidian-integration-testing-2.0.1.tgz +0 -0
- package/package.json +25 -11
- package/dist/lib/cjs/integration-global-setup.cjs +0 -132
- package/dist/lib/esm/integration-global-setup.mjs +0 -112
- package/dist/obsidian-integration-testing-1.3.2.tgz +0 -0
- /package/dist/lib/cjs/{vitest.cjs → vitest/typings.cjs} +0 -0
- /package/dist/lib/esm/{vitest.mjs → vitest/typings.mjs} +0 -0
package/README.md
CHANGED
|
@@ -16,7 +16,9 @@ npm install --save-dev obsidian-integration-testing
|
|
|
16
16
|
|
|
17
17
|
## Quick start
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
The global setup expects your built plugin in `dist/dev` or `dist/build` (whichever has a newer `main.js`), with a `manifest.json` at the root of the chosen folder. The setup creates a temporary vault, copies the build into it, and enables the plugin.
|
|
20
|
+
|
|
21
|
+
### Vitest
|
|
20
22
|
|
|
21
23
|
```ts
|
|
22
24
|
// vitest.config.ts
|
|
@@ -24,15 +26,34 @@ import { defineConfig } from 'vitest/config';
|
|
|
24
26
|
|
|
25
27
|
export default defineConfig({
|
|
26
28
|
test: {
|
|
27
|
-
globalSetup: ['obsidian-integration-testing/
|
|
29
|
+
globalSetup: ['obsidian-integration-testing/vitest-global-setup'],
|
|
28
30
|
},
|
|
29
31
|
});
|
|
30
32
|
```
|
|
31
33
|
|
|
32
|
-
By default this uses the **`CLI` transport** (requires `CLI` enabled in Obsidian settings). See [Transport modes](#transport-modes) for alternatives.
|
|
33
|
-
|
|
34
34
|
Vitest module augmentations (`environmentOptions.obsidianTransport`, `inject('obsidianTransport')`, `inject('tempVaultPath')`) are included automatically when you import from `obsidian-integration-testing` — no extra `tsconfig.json` configuration needed.
|
|
35
35
|
|
|
36
|
+
### Jest
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
// jest.config.ts
|
|
40
|
+
export default {
|
|
41
|
+
globalSetup: 'obsidian-integration-testing/jest-global-setup',
|
|
42
|
+
};
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
To configure transport options with Jest, populate `globalThis.__obsidianIntegrationTesting` before the global setup runs (e.g., in a setup file or via Jest `globals`):
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
globalThis.__obsidianIntegrationTesting = {
|
|
49
|
+
transportOptions: { type: 'obsidian-cdp' },
|
|
50
|
+
};
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
After setup, `globalThis.__obsidianIntegrationTesting.tempVaultPath` is available in test workers.
|
|
54
|
+
|
|
55
|
+
By default this uses the **`CLI` transport** (requires `CLI` enabled in Obsidian settings). See [Transport modes](#transport-modes) for alternatives.
|
|
56
|
+
|
|
36
57
|
### Write integration tests
|
|
37
58
|
|
|
38
59
|
Use `evalInObsidian()` to run code inside the Obsidian process. The `vaultPath` is optional — it defaults to `process.cwd()`:
|
|
@@ -199,10 +220,12 @@ Parent directories are created automatically. To create an empty folder, use a p
|
|
|
199
220
|
|
|
200
221
|
Use `getTempVault()` to get the temporary vault created by the global setup:
|
|
201
222
|
|
|
223
|
+
**Vitest:**
|
|
224
|
+
|
|
202
225
|
```ts
|
|
203
226
|
import { describe, expect, it } from 'vitest';
|
|
204
227
|
import { evalInObsidian } from 'obsidian-integration-testing';
|
|
205
|
-
import { getTempVault } from 'obsidian-integration-testing/
|
|
228
|
+
import { getTempVault } from 'obsidian-integration-testing/vitest-global-setup';
|
|
206
229
|
|
|
207
230
|
describe('my-plugin', () => {
|
|
208
231
|
const vault = getTempVault();
|
|
@@ -233,6 +256,26 @@ describe('my-plugin', () => {
|
|
|
233
256
|
});
|
|
234
257
|
```
|
|
235
258
|
|
|
259
|
+
**Jest:**
|
|
260
|
+
|
|
261
|
+
```ts
|
|
262
|
+
import { evalInObsidian } from 'obsidian-integration-testing';
|
|
263
|
+
import { getTempVault } from 'obsidian-integration-testing/jest-global-setup';
|
|
264
|
+
|
|
265
|
+
describe('my-plugin', () => {
|
|
266
|
+
const vault = getTempVault();
|
|
267
|
+
|
|
268
|
+
it('should be enabled', async () => {
|
|
269
|
+
const isEnabled = await evalInObsidian({
|
|
270
|
+
args: { pluginId: 'my-plugin' },
|
|
271
|
+
fn: ({ app, pluginId }) => app.plugins.enabledPlugins.has(pluginId),
|
|
272
|
+
vaultPath: vault.path
|
|
273
|
+
});
|
|
274
|
+
expect(isEnabled).toBe(true);
|
|
275
|
+
});
|
|
276
|
+
});
|
|
277
|
+
```
|
|
278
|
+
|
|
236
279
|
> [!WARNING]
|
|
237
280
|
>
|
|
238
281
|
> **Parallelism:**
|
|
@@ -302,7 +345,7 @@ const title2 = await evalInObsidian({
|
|
|
302
345
|
|
|
303
346
|
### Transport modes
|
|
304
347
|
|
|
305
|
-
The transport determines how the library communicates with Obsidian. Configure it via
|
|
348
|
+
The transport determines how the library communicates with Obsidian. Configure it via transport options in your test framework's config (see [Quick start](#quick-start)):
|
|
306
349
|
|
|
307
350
|
| Type | Platform | Mechanism |
|
|
308
351
|
|----------------------------|----------|-------------------------------------------------------------|
|
|
@@ -355,7 +398,7 @@ Connects via WebSocket to Obsidian `Chrome DevTools Protocol` (`CDP`) endpoint.
|
|
|
355
398
|
export default defineConfig({
|
|
356
399
|
test: {
|
|
357
400
|
fileParallelism: false,
|
|
358
|
-
globalSetup: ['obsidian-integration-testing/
|
|
401
|
+
globalSetup: ['obsidian-integration-testing/vitest-global-setup'],
|
|
359
402
|
environmentOptions: {
|
|
360
403
|
obsidianTransport: { type: 'obsidian-cdp' },
|
|
361
404
|
},
|
|
@@ -440,7 +483,7 @@ Runs tests against Obsidian Mobile on an Android emulator or real device via App
|
|
|
440
483
|
export default defineConfig({
|
|
441
484
|
test: {
|
|
442
485
|
fileParallelism: false,
|
|
443
|
-
globalSetup: ['obsidian-integration-testing/
|
|
486
|
+
globalSetup: ['obsidian-integration-testing/vitest-global-setup'],
|
|
444
487
|
environmentOptions: {
|
|
445
488
|
obsidianTransport: {
|
|
446
489
|
type: 'obsidian-android-appium',
|
|
@@ -471,7 +514,7 @@ export default defineConfig({
|
|
|
471
514
|
test: {
|
|
472
515
|
name: 'integration-tests:desktop-cli',
|
|
473
516
|
fileParallelism: false,
|
|
474
|
-
globalSetup: ['obsidian-integration-testing/
|
|
517
|
+
globalSetup: ['obsidian-integration-testing/vitest-global-setup'],
|
|
475
518
|
include: ['src/**/*.integration.test.ts'],
|
|
476
519
|
exclude: ['src/**/*.android.integration.test.ts'],
|
|
477
520
|
// default, can be omitted
|
|
@@ -484,7 +527,7 @@ export default defineConfig({
|
|
|
484
527
|
test: {
|
|
485
528
|
name: 'integration-tests:desktop-cdp',
|
|
486
529
|
fileParallelism: false,
|
|
487
|
-
globalSetup: ['obsidian-integration-testing/
|
|
530
|
+
globalSetup: ['obsidian-integration-testing/vitest-global-setup'],
|
|
488
531
|
include: ['src/**/*.integration.test.ts'],
|
|
489
532
|
exclude: ['src/**/*.android.integration.test.ts'],
|
|
490
533
|
environmentOptions: {
|
|
@@ -496,7 +539,7 @@ export default defineConfig({
|
|
|
496
539
|
test: {
|
|
497
540
|
name: 'integration-tests:android-appium',
|
|
498
541
|
fileParallelism: false,
|
|
499
|
-
globalSetup: ['obsidian-integration-testing/
|
|
542
|
+
globalSetup: ['obsidian-integration-testing/vitest-global-setup'],
|
|
500
543
|
include: ['src/**/*.android.integration.test.ts'],
|
|
501
544
|
environmentOptions: {
|
|
502
545
|
obsidianTransport: {
|
|
@@ -0,0 +1,37 @@
|
|
|
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 context_provider_exports = {};
|
|
20
|
+
__export(context_provider_exports, {
|
|
21
|
+
getTransportOptions: () => getTransportOptions,
|
|
22
|
+
setTransportOptionsResolver: () => setTransportOptionsResolver
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(context_provider_exports);
|
|
25
|
+
let resolver;
|
|
26
|
+
function getTransportOptions() {
|
|
27
|
+
return resolver?.();
|
|
28
|
+
}
|
|
29
|
+
function setTransportOptionsResolver(fn) {
|
|
30
|
+
resolver = fn;
|
|
31
|
+
}
|
|
32
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
33
|
+
0 && (module.exports = {
|
|
34
|
+
getTransportOptions,
|
|
35
|
+
setTransportOptionsResolver
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbnRleHQtcHJvdmlkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBGcmFtZXdvcmstbmV1dHJhbCBjb250ZXh0IHByb3ZpZGVyIGZvciBpbnRlZ3JhdGlvbiB0ZXN0IHN0YXRlLlxuICpcbiAqIEVhY2ggZnJhbWV3b3JrIGFkYXB0ZXIgKHZpdGVzdCwgamVzdCkgcmVnaXN0ZXJzIGEgcmVzb2x2ZXIgdmlhXG4gKiB7QGxpbmsgc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyfSBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLlxuICogQ29yZSBtb2R1bGVzIGNhbGwge0BsaW5rIGdldFRyYW5zcG9ydE9wdGlvbnN9IHRvIHJldHJpZXZlIHRoZVxuICogdHJhbnNwb3J0IG9wdGlvbnMgd2l0aG91dCBkZXBlbmRpbmcgb24gYW55IHNwZWNpZmljIHRlc3QgZnJhbWV3b3JrLlxuICovXG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgY3VycmVudCB0cmFuc3BvcnQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyID0gKCkgPT4gT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkO1xuXG5sZXQgcmVzb2x2ZXI6IFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlciB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cmFuc3BvcnQgb3B0aW9ucyByZXNvbHZlZCBieSB0aGUgcmVnaXN0ZXJlZCBmcmFtZXdvcmsgYWRhcHRlci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdHJhbnNwb3J0IG9wdGlvbnMsIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBjb25maWd1cmVkIChkZWZhdWx0cyB0byBDTEkgdHJhbnNwb3J0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zcG9ydE9wdGlvbnMoKTogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHJlc29sdmVyPy4oKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSByZXNvbHZlciBmdW5jdGlvbiBmb3IgdHJhbnNwb3J0IG9wdGlvbnMuIENhbGxlZCBieSBmcmFtZXdvcmtcbiAqIGFkYXB0ZXJzIGF0IG1vZHVsZSBsb2FkIHRpbWUgdG8gYnJpZGdlIHRoZWlyIG5hdGl2ZSBpbmplY3Rpb24gbWVjaGFuaXNtcy5cbiAqXG4gKiBAcGFyYW0gZm4gLSBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRUcmFuc3BvcnRPcHRpb25zUmVzb2x2ZXIoZm46IFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcik6IHZvaWQge1xuICByZXNvbHZlciA9IGZuO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0JBLElBQUk7QUFPRyxTQUFTLHNCQUE0RDtBQUMxRSxTQUFPLFdBQVc7QUFDcEI7QUFRTyxTQUFTLDRCQUE0QixJQUFvQztBQUM5RSxhQUFXO0FBQ2I7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -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.cjs';
|
|
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,127 @@
|
|
|
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_core_exports = {};
|
|
20
|
+
__export(global_setup_core_exports, {
|
|
21
|
+
coreSetup: () => coreSetup,
|
|
22
|
+
coreTeardown: () => coreTeardown
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(global_setup_core_exports);
|
|
25
|
+
var import_node_fs = require("node:fs");
|
|
26
|
+
var import_promises = require("node:fs/promises");
|
|
27
|
+
var import_node_path = require("node:path");
|
|
28
|
+
var import_node_process = require("node:process");
|
|
29
|
+
var import_enable_plugin = require("./enable-plugin.cjs");
|
|
30
|
+
var import_log = require("./log.cjs");
|
|
31
|
+
var import_obsidian_cli = require("./obsidian-cli.cjs");
|
|
32
|
+
var import_temp_vault = require("./temp-vault.cjs");
|
|
33
|
+
var import_transport_factory = require("./transport-factory.cjs");
|
|
34
|
+
const DIST_DEV = "dist/dev";
|
|
35
|
+
const DIST_BUILD = "dist/build";
|
|
36
|
+
const MAIN_JS = "main.js";
|
|
37
|
+
const OBSIDIAN_CONFIG_DIR = ".obsidian";
|
|
38
|
+
const PLUGINS_DIR = "plugins";
|
|
39
|
+
const COMMUNITY_PLUGINS_JSON = "community-plugins.json";
|
|
40
|
+
async function coreSetup(params) {
|
|
41
|
+
const projectRoot = findProjectRoot();
|
|
42
|
+
const envFilePath = (0, import_node_path.join)(projectRoot, ".env");
|
|
43
|
+
if ((0, import_node_fs.existsSync)(envFilePath)) {
|
|
44
|
+
(0, import_node_process.loadEnvFile)(envFilePath);
|
|
45
|
+
}
|
|
46
|
+
const transportOptions = params?.transportOptions;
|
|
47
|
+
(0, import_log.log)("[integration-setup] Creating transport...");
|
|
48
|
+
const transport = await (0, import_transport_factory.createTransportFromOptions)(transportOptions);
|
|
49
|
+
(0, import_log.log)(`[integration-setup] Transport created: ${transport.constructor.name}`);
|
|
50
|
+
(0, import_log.log)(`[integration-setup] Project root: ${projectRoot}`);
|
|
51
|
+
const distPath = await resolveDistPath(projectRoot);
|
|
52
|
+
const manifestJson = JSON.parse(await (0, import_promises.readFile)((0, import_node_path.join)(distPath, "manifest.json"), "utf-8"));
|
|
53
|
+
const pluginId = manifestJson.id;
|
|
54
|
+
if (transport.isMobile && manifestJson.isDesktopOnly) {
|
|
55
|
+
throw new Error(
|
|
56
|
+
`Plugin "${pluginId}" has isDesktopOnly: true in manifest.json. Mobile integration tests cannot run for desktop-only plugins.`
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
const mainJs = (0, import_node_path.join)(distPath, MAIN_JS);
|
|
60
|
+
const buildStat = await (0, import_promises.stat)(mainJs);
|
|
61
|
+
(0, import_log.log)(`[integration-setup] Using ${distPath} (${buildStat.mtime.toISOString()}). If outdated, rebuild.`);
|
|
62
|
+
const tempVault = new import_temp_vault.TempVault();
|
|
63
|
+
(0, import_log.log)(`[integration-setup] Created temp vault: ${tempVault.path}`);
|
|
64
|
+
const pluginDir = (0, import_node_path.join)(tempVault.path, OBSIDIAN_CONFIG_DIR, PLUGINS_DIR, pluginId);
|
|
65
|
+
await (0, import_promises.mkdir)(pluginDir, { recursive: true });
|
|
66
|
+
await (0, import_promises.cp)(distPath, pluginDir, { recursive: true });
|
|
67
|
+
await (0, import_promises.writeFile)((0, import_node_path.join)(tempVault.path, OBSIDIAN_CONFIG_DIR, COMMUNITY_PLUGINS_JSON), JSON.stringify([pluginId]));
|
|
68
|
+
(0, import_log.log)("[integration-setup] Syncing vault to device...");
|
|
69
|
+
await tempVault.syncToDevice(transport);
|
|
70
|
+
(0, import_log.log)("[integration-setup] Registering vault...");
|
|
71
|
+
await tempVault.register(transport);
|
|
72
|
+
(0, import_log.log)("[integration-setup] Vault registered.");
|
|
73
|
+
(0, import_log.log)(`[integration-setup] Enabling plugin "${pluginId}"...`);
|
|
74
|
+
const { errorMessage } = await (0, import_obsidian_cli.evalInObsidian)({
|
|
75
|
+
args: { pluginId },
|
|
76
|
+
fn: import_enable_plugin.enablePluginWithErrorCapture,
|
|
77
|
+
shouldSkipPreflightChecks: true,
|
|
78
|
+
transport,
|
|
79
|
+
vaultPath: tempVault.path
|
|
80
|
+
});
|
|
81
|
+
if (errorMessage) {
|
|
82
|
+
throw new Error(`Plugin "${pluginId}" failed to load: ${errorMessage}`);
|
|
83
|
+
}
|
|
84
|
+
(0, import_log.log)(`[integration-setup] Plugin "${pluginId}" enabled successfully.`);
|
|
85
|
+
return { tempVault, transport, transportOptions };
|
|
86
|
+
}
|
|
87
|
+
async function coreTeardown(result) {
|
|
88
|
+
await result?.tempVault.dispose(result.transport);
|
|
89
|
+
await result?.transport.dispose?.();
|
|
90
|
+
}
|
|
91
|
+
function findProjectRoot() {
|
|
92
|
+
let dir = process.cwd();
|
|
93
|
+
while (true) {
|
|
94
|
+
if ((0, import_node_fs.existsSync)((0, import_node_path.join)(dir, "package.json"))) {
|
|
95
|
+
return dir;
|
|
96
|
+
}
|
|
97
|
+
const parent = (0, import_node_path.join)(dir, "..");
|
|
98
|
+
if (parent === dir) {
|
|
99
|
+
throw new Error("Could not find project root (no package.json found).");
|
|
100
|
+
}
|
|
101
|
+
dir = parent;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function resolveDistPath(projectRoot) {
|
|
105
|
+
const devPath = (0, import_node_path.join)(projectRoot, DIST_DEV);
|
|
106
|
+
const buildPath = (0, import_node_path.join)(projectRoot, DIST_BUILD);
|
|
107
|
+
const devMainJs = (0, import_node_path.join)(devPath, MAIN_JS);
|
|
108
|
+
const buildMainJs = (0, import_node_path.join)(buildPath, MAIN_JS);
|
|
109
|
+
const devStat = (0, import_node_fs.existsSync)(devMainJs) ? await (0, import_promises.stat)(devMainJs) : null;
|
|
110
|
+
const buildStat = (0, import_node_fs.existsSync)(buildMainJs) ? await (0, import_promises.stat)(buildMainJs) : null;
|
|
111
|
+
if (devStat && buildStat) {
|
|
112
|
+
return devStat.mtime > buildStat.mtime ? devPath : buildPath;
|
|
113
|
+
}
|
|
114
|
+
if (devStat) {
|
|
115
|
+
return devPath;
|
|
116
|
+
}
|
|
117
|
+
if (buildStat) {
|
|
118
|
+
return buildPath;
|
|
119
|
+
}
|
|
120
|
+
throw new Error("No build found. Run `npm run build` or `npm run dev` first.");
|
|
121
|
+
}
|
|
122
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
123
|
+
0 && (module.exports = {
|
|
124
|
+
coreSetup,
|
|
125
|
+
coreTeardown
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2dsb2JhbC1zZXR1cC1jb3JlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRnJhbWV3b3JrLWFnbm9zdGljIGNvcmUgbG9naWMgZm9yIGludGVncmF0aW9uIHRlc3QgZ2xvYmFsIHNldHVwIGFuZCB0ZWFyZG93bi5cbiAqXG4gKiBWaXRlc3QgYW5kIEplc3QgYWRhcHRlcnMgZGVsZWdhdGUgdG8gdGhlc2UgZnVuY3Rpb25zLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk1hbmlmZXN0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBjcCxcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBzdGF0LFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGxvYWRFbnZGaWxlIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuaW1wb3J0IHsgZW5hYmxlUGx1Z2luV2l0aEVycm9yQ2FwdHVyZSB9IGZyb20gJy4vZW5hYmxlLXBsdWdpbi5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9vYnNpZGlhbi1jbGkuY2pzJztcbmltcG9ydCB7IFRlbXBWYXVsdCB9IGZyb20gJy4vdGVtcC12YXVsdC5janMnO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5cbmNvbnN0IERJU1RfREVWID0gJ2Rpc3QvZGV2JztcbmNvbnN0IERJU1RfQlVJTEQgPSAnZGlzdC9idWlsZCc7XG5jb25zdCBNQUlOX0pTID0gJ21haW4uanMnO1xuY29uc3QgT0JTSURJQU5fQ09ORklHX0RJUiA9ICcub2JzaWRpYW4nO1xuY29uc3QgUExVR0lOU19ESVIgPSAncGx1Z2lucyc7XG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19KU09OID0gJ2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb3JlU2V0dXB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcmVTZXR1cFBhcmFtcyB7XG4gIC8qKiBUcmFuc3BvcnQgb3B0aW9ucy4gV2hlbiBvbWl0dGVkLCBkZWZhdWx0cyB0byB0aGUgQ0xJIHRyYW5zcG9ydC4gKi9cbiAgdHJhbnNwb3J0T3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXN1bHQgcmV0dXJuZWQgYnkge0BsaW5rIGNvcmVTZXR1cH0sIHVzZWQgYnkgZnJhbWV3b3JrIGFkYXB0ZXJzXG4gKiB0byBwYXNzIGNvbnRleHQgdG8gdGVzdCB3b3JrZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcmVTZXR1cFJlc3VsdCB7XG4gIC8qKiBUaGUgdGVtcG9yYXJ5IHZhdWx0IGNyZWF0ZWQgZHVyaW5nIHNldHVwLiAqL1xuICB0ZW1wVmF1bHQ6IFRlbXBWYXVsdDtcblxuICAvKiogVGhlIHRyYW5zcG9ydCBpbnN0YW5jZSB1c2VkIGR1cmluZyBzZXR1cC4gKi9cbiAgdHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydDtcblxuICAvKiogVGhlIHRyYW5zcG9ydCBvcHRpb25zIHRoYXQgd2VyZSByZXNvbHZlZC4gKi9cbiAgdHJhbnNwb3J0T3B0aW9uczogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEZyYW1ld29yay1hZ25vc3RpYyBnbG9iYWwgc2V0dXAgbG9naWMuXG4gKlxuICogTG9hZHMgYC5lbnZgIGZyb20gdGhlIHByb2plY3Qgcm9vdCwgY3JlYXRlcyBhIHRyYW5zcG9ydCwgY29waWVzIHRoZSBidWlsdFxuICogcGx1Z2luIGludG8gYSB0ZW1wb3JhcnkgdmF1bHQsIHJlZ2lzdGVycyB0aGUgdmF1bHQgd2l0aCBPYnNpZGlhbiwgYW5kXG4gKiBlbmFibGVzIHRoZSBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFNldHVwIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgc2V0dXAgcmVzdWx0IGNvbnRhaW5pbmcgdGhlIHRlbXAgdmF1bHQsIHRyYW5zcG9ydCwgYW5kIHJlc29sdmVkIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3JlU2V0dXAocGFyYW1zPzogQ29yZVNldHVwUGFyYW1zKTogUHJvbWlzZTxDb3JlU2V0dXBSZXN1bHQ+IHtcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBmaW5kUHJvamVjdFJvb3QoKTtcbiAgY29uc3QgZW52RmlsZVBhdGggPSBqb2luKHByb2plY3RSb290LCAnLmVudicpO1xuICBpZiAoZXhpc3RzU3luYyhlbnZGaWxlUGF0aCkpIHtcbiAgICBsb2FkRW52RmlsZShlbnZGaWxlUGF0aCk7XG4gIH1cblxuICBjb25zdCB0cmFuc3BvcnRPcHRpb25zID0gcGFyYW1zPy50cmFuc3BvcnRPcHRpb25zO1xuICBsb2coJ1tpbnRlZ3JhdGlvbi1zZXR1cF0gQ3JlYXRpbmcgdHJhbnNwb3J0Li4uJyk7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IGF3YWl0IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKHRyYW5zcG9ydE9wdGlvbnMpO1xuICBsb2coYFtpbnRlZ3JhdGlvbi1zZXR1cF0gVHJhbnNwb3J0IGNyZWF0ZWQ6ICR7dHJhbnNwb3J0LmNvbnN0cnVjdG9yLm5hbWV9YCk7XG5cbiAgbG9nKGBbaW50ZWdyYXRpb24tc2V0dXBdIFByb2plY3Qgcm9vdDogJHtwcm9qZWN0Um9vdH1gKTtcbiAgY29uc3QgZGlzdFBhdGggPSBhd2FpdCByZXNvbHZlRGlzdFBhdGgocHJvamVjdFJvb3QpO1xuICBjb25zdCBtYW5pZmVzdEpzb24gPSBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKGpvaW4oZGlzdFBhdGgsICdtYW5pZmVzdC5qc29uJyksICd1dGYtOCcpKSBhcyBQbHVnaW5NYW5pZmVzdDtcbiAgY29uc3QgcGx1Z2luSWQgPSBtYW5pZmVzdEpzb24uaWQ7XG5cbiAgaWYgKHRyYW5zcG9ydC5pc01vYmlsZSAmJiBtYW5pZmVzdEpzb24uaXNEZXNrdG9wT25seSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbklkfVwiIGhhcyBpc0Rlc2t0b3BPbmx5OiB0cnVlIGluIG1hbmlmZXN0Lmpzb24uIE1vYmlsZSBpbnRlZ3JhdGlvbiB0ZXN0cyBjYW5ub3QgcnVuIGZvciBkZXNrdG9wLW9ubHkgcGx1Z2lucy5gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG1haW5KcyA9IGpvaW4oZGlzdFBhdGgsIE1BSU5fSlMpO1xuICBjb25zdCBidWlsZFN0YXQgPSBhd2FpdCBzdGF0KG1haW5Kcyk7XG5cbiAgbG9nKGBbaW50ZWdyYXRpb24tc2V0dXBdIFVzaW5nICR7ZGlzdFBhdGh9ICgke2J1aWxkU3RhdC5tdGltZS50b0lTT1N0cmluZygpfSkuIElmIG91dGRhdGVkLCByZWJ1aWxkLmApO1xuXG4gIGNvbnN0IHRlbXBWYXVsdCA9IG5ldyBUZW1wVmF1bHQoKTtcbiAgbG9nKGBbaW50ZWdyYXRpb24tc2V0dXBdIENyZWF0ZWQgdGVtcCB2YXVsdDogJHt0ZW1wVmF1bHQucGF0aH1gKTtcbiAgY29uc3QgcGx1Z2luRGlyID0gam9pbih0ZW1wVmF1bHQucGF0aCwgT0JTSURJQU5fQ09ORklHX0RJUiwgUExVR0lOU19ESVIsIHBsdWdpbklkKTtcbiAgYXdhaXQgbWtkaXIocGx1Z2luRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgY3AoZGlzdFBhdGgsIHBsdWdpbkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IHdyaXRlRmlsZShqb2luKHRlbXBWYXVsdC5wYXRoLCBPQlNJRElBTl9DT05GSUdfRElSLCBDT01NVU5JVFlfUExVR0lOU19KU09OKSwgSlNPTi5zdHJpbmdpZnkoW3BsdWdpbklkXSkpO1xuXG4gIGxvZygnW2ludGVncmF0aW9uLXNldHVwXSBTeW5jaW5nIHZhdWx0IHRvIGRldmljZS4uLicpO1xuICBhd2FpdCB0ZW1wVmF1bHQuc3luY1RvRGV2aWNlKHRyYW5zcG9ydCk7XG4gIGxvZygnW2ludGVncmF0aW9uLXNldHVwXSBSZWdpc3RlcmluZyB2YXVsdC4uLicpO1xuICBhd2FpdCB0ZW1wVmF1bHQucmVnaXN0ZXIodHJhbnNwb3J0KTtcbiAgbG9nKCdbaW50ZWdyYXRpb24tc2V0dXBdIFZhdWx0IHJlZ2lzdGVyZWQuJyk7XG5cbiAgLy8gRW5hYmxlIHRoZSBwbHVnaW4gYW5kIHZlcmlmeSBpdCBsb2FkZWQuIE9ic2lkaWFuJ3MgZW5hYmxlUGx1Z2luKCkgd3JhcHNcbiAgLy8gTG9hZFBsdWdpbigpIGluIGEgdHJ5LWNhdGNoIHRoYXQgc3dhbGxvd3MgZXJyb3JzIGFuZCByZXR1cm5zIGZhbHNlLlxuICAvLyBXZSBtb25rZXktcGF0Y2ggbG9hZFBsdWdpbigpIHRvIGNhcHR1cmUgdGhlIGVycm9yIGJlZm9yZSBpdCdzIHN3YWxsb3dlZC5cbiAgbG9nKGBbaW50ZWdyYXRpb24tc2V0dXBdIEVuYWJsaW5nIHBsdWdpbiBcIiR7cGx1Z2luSWR9XCIuLi5gKTtcbiAgY29uc3QgeyBlcnJvck1lc3NhZ2UgfSA9IGF3YWl0IGV2YWxJbk9ic2lkaWFuKHtcbiAgICBhcmdzOiB7IHBsdWdpbklkIH0sXG4gICAgZm46IGVuYWJsZVBsdWdpbldpdGhFcnJvckNhcHR1cmUsXG4gICAgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrczogdHJ1ZSxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmF1bHRQYXRoOiB0ZW1wVmF1bHQucGF0aFxuICB9KTtcblxuICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gXCIke3BsdWdpbklkfVwiIGZhaWxlZCB0byBsb2FkOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgfVxuXG4gIGxvZyhgW2ludGVncmF0aW9uLXNldHVwXSBQbHVnaW4gXCIke3BsdWdpbklkfVwiIGVuYWJsZWQgc3VjY2Vzc2Z1bGx5LmApO1xuXG4gIHJldHVybiB7IHRlbXBWYXVsdCwgdHJhbnNwb3J0LCB0cmFuc3BvcnRPcHRpb25zIH07XG59XG5cbi8qKlxuICogRnJhbWV3b3JrLWFnbm9zdGljIGdsb2JhbCB0ZWFyZG93biBsb2dpYy5cbiAqXG4gKiBEaXNwb3NlcyBvZiB0aGUgdGVtcG9yYXJ5IHZhdWx0IGFuZCB0cmFuc3BvcnQgY3JlYXRlZCBkdXJpbmcgc2V0dXAuXG4gKlxuICogQHBhcmFtIHJlc3VsdCAtIFRoZSByZXN1bHQgZnJvbSB7QGxpbmsgY29yZVNldHVwfS4gV2hlbiBgdW5kZWZpbmVkYCwgZG9lcyBub3RoaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29yZVRlYXJkb3duKHJlc3VsdD86IENvcmVTZXR1cFJlc3VsdCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCByZXN1bHQ/LnRlbXBWYXVsdC5kaXNwb3NlKHJlc3VsdC50cmFuc3BvcnQpO1xuICBhd2FpdCByZXN1bHQ/LnRyYW5zcG9ydC5kaXNwb3NlPy4oKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgcHJvamVjdCByb290IGJ5IHdhbGtpbmcgdXAgZnJvbSBgcHJvY2Vzcy5jd2QoKWAgbG9va2luZyBmb3IgYHBhY2thZ2UuanNvbmAuXG4gKlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuZnVuY3Rpb24gZmluZFByb2plY3RSb290KCk6IHN0cmluZyB7XG4gIGxldCBkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIExvb3AgdGVybWluYXRlcyBhdCBmaWxlc3lzdGVtIHJvb3QuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGV4aXN0c1N5bmMoam9pbihkaXIsICdwYWNrYWdlLmpzb24nKSkpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGpvaW4oZGlyLCAnLi4nKTtcbiAgICBpZiAocGFyZW50ID09PSBkaXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgcHJvamVjdCByb290IChubyBwYWNrYWdlLmpzb24gZm91bmQpLicpO1xuICAgIH1cbiAgICBkaXIgPSBwYXJlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgZGlzdCBwYXRoIHRvIHVzZSBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKlxuICogUGlja3Mgd2hpY2hldmVyIG9mIGBkaXN0L2RldmAgYW5kIGBkaXN0L2J1aWxkYCBoYXMgYSBuZXdlciBgbWFpbi5qc2AuXG4gKiBJZiBvbmx5IG9uZSBleGlzdHMsIHRoYXQgb25lIGlzIHVzZWQuIFRocm93cyBpZiBuZWl0aGVyIGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdFJvb3QgLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcHJvamVjdCByb290LlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGNob3NlbiBkaXN0IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZURpc3RQYXRoKHByb2plY3RSb290OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkZXZQYXRoID0gam9pbihwcm9qZWN0Um9vdCwgRElTVF9ERVYpO1xuICBjb25zdCBidWlsZFBhdGggPSBqb2luKHByb2plY3RSb290LCBESVNUX0JVSUxEKTtcbiAgY29uc3QgZGV2TWFpbkpzID0gam9pbihkZXZQYXRoLCBNQUlOX0pTKTtcbiAgY29uc3QgYnVpbGRNYWluSnMgPSBqb2luKGJ1aWxkUGF0aCwgTUFJTl9KUyk7XG4gIGNvbnN0IGRldlN0YXQgPSBleGlzdHNTeW5jKGRldk1haW5KcykgPyBhd2FpdCBzdGF0KGRldk1haW5KcykgOiBudWxsO1xuICBjb25zdCBidWlsZFN0YXQgPSBleGlzdHNTeW5jKGJ1aWxkTWFpbkpzKSA/IGF3YWl0IHN0YXQoYnVpbGRNYWluSnMpIDogbnVsbDtcblxuICBpZiAoZGV2U3RhdCAmJiBidWlsZFN0YXQpIHtcbiAgICByZXR1cm4gZGV2U3RhdC5tdGltZSA+IGJ1aWxkU3RhdC5tdGltZSA/IGRldlBhdGggOiBidWlsZFBhdGg7XG4gIH1cblxuICBpZiAoZGV2U3RhdCkge1xuICAgIHJldHVybiBkZXZQYXRoO1xuICB9XG5cbiAgaWYgKGJ1aWxkU3RhdCkge1xuICAgIHJldHVybiBidWlsZFBhdGg7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGJ1aWxkIGZvdW5kLiBSdW4gYG5wbSBydW4gYnVpbGRgIG9yIGBucG0gcnVuIGRldmAgZmlyc3QuJyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZQSxxQkFBMkI7QUFDM0Isc0JBTU87QUFDUCx1QkFBcUI7QUFDckIsMEJBQTRCO0FBSzVCLDJCQUE2QztBQUM3QyxpQkFBb0I7QUFDcEIsMEJBQStCO0FBQy9CLHdCQUEwQjtBQUMxQiwrQkFBMkM7QUFFM0MsTUFBTSxXQUFXO0FBQ2pCLE1BQU0sYUFBYTtBQUNuQixNQUFNLFVBQVU7QUFDaEIsTUFBTSxz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
|
|
@@ -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.cjs';
|
|
9
|
+
import type { ObsidianTransport } from './transport.cjs';
|
|
10
|
+
import { TempVault } from './temp-vault.cjs';
|
|
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>;
|
package/dist/lib/cjs/index.cjs
CHANGED
|
@@ -26,11 +26,12 @@ __export(index_exports, {
|
|
|
26
26
|
createTransportFromOptions: () => import_transport_factory.createTransportFromOptions,
|
|
27
27
|
evalInObsidian: () => import_obsidian_cli.evalInObsidian,
|
|
28
28
|
registerVault: () => import_vault_registry.registerVault,
|
|
29
|
+
setTransportOptionsResolver: () => import_context_provider.setTransportOptionsResolver,
|
|
29
30
|
unregisterVault: () => import_vault_registry.unregisterVault
|
|
30
31
|
});
|
|
31
32
|
module.exports = __toCommonJS(index_exports);
|
|
32
|
-
var import_vitest = require("./vitest.ts");
|
|
33
33
|
var import_context_id = require("./context-id.cjs");
|
|
34
|
+
var import_context_provider = require("./context-provider.cjs");
|
|
34
35
|
var import_obsidian_cli = require("./obsidian-cli.cjs");
|
|
35
36
|
var import_temp_vault = require("./temp-vault.cjs");
|
|
36
37
|
var import_transport_appium = require("./transport-appium.cjs");
|
|
@@ -48,6 +49,7 @@ var import_vault_registry = require("./vault-registry.cjs");
|
|
|
48
49
|
createTransportFromOptions,
|
|
49
50
|
evalInObsidian,
|
|
50
51
|
registerVault,
|
|
52
|
+
setTransportOptionsResolver,
|
|
51
53
|
unregisterVault
|
|
52
54
|
});
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHsgQ29udGV4dElkIH0gZnJvbSAnLi9jb250ZXh0LWlkLmNqcyc7XG5leHBvcnQgdHlwZSB7IFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlciB9IGZyb20gJy4vY29udGV4dC1wcm92aWRlci5janMnO1xuZXhwb3J0IHsgc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyIH0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5leHBvcnQgdHlwZSB7IEV2YWxJbk9ic2lkaWFuUGFyYW1zIH0gZnJvbSAnLi9vYnNpZGlhbi1jbGkuY2pzJztcbmV4cG9ydCB7IGV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9vYnNpZGlhbi1jbGkuY2pzJztcbmV4cG9ydCB7IFRlbXBWYXVsdCB9IGZyb20gJy4vdGVtcC12YXVsdC5janMnO1xuZXhwb3J0IHR5cGUgeyBBcHBpdW1UcmFuc3BvcnRDb25maWcgfSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0uY2pzJztcbmV4cG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5janMnO1xuZXhwb3J0IHR5cGUgeyBEZXNrdG9wQ2RwVHJhbnNwb3J0Q29uZmlnIH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jZHAuY2pzJztcbmV4cG9ydCB7IERlc2t0b3BDZHBUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5janMnO1xuZXhwb3J0IHsgRGVza3RvcENsaVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2xpLmNqcyc7XG5leHBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhbkNsaVRyYW5zcG9ydE9wdGlvbnMsXG4gIE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuZXhwb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkuY2pzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSx3QkFBMEI7QUFFMUIsOEJBQTRDO0FBRTVDLDBCQUErQjtBQUMvQix3QkFBMEI7QUFFMUIsOEJBQWdDO0FBRWhDLG1DQUFvQztBQUNwQyxtQ0FBb0M7QUFDcEMsK0JBQTJDO0FBVzNDLDRCQUdPOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/dist/lib/cjs/index.d.cts
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Contains the entry point for the integration testing module.
|
|
5
5
|
*/
|
|
6
|
-
import './vitest.cjs';
|
|
7
6
|
export { ContextId } from './context-id.cjs';
|
|
7
|
+
export type { TransportOptionsResolver } from './context-provider.cjs';
|
|
8
|
+
export { setTransportOptionsResolver } from './context-provider.cjs';
|
|
8
9
|
export type { EvalInObsidianParams } from './obsidian-cli.cjs';
|
|
9
10
|
export { evalInObsidian } from './obsidian-cli.cjs';
|
|
10
11
|
export { TempVault } from './temp-vault.cjs';
|
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
getTransportOptions: () => getTransportOptions,
|
|
23
|
+
setup: () => setup,
|
|
24
|
+
teardown: () => teardown
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(global_setup_exports);
|
|
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)(() => globalThis.__obsidianIntegrationTesting?.transportOptions);
|
|
31
|
+
let setupResult;
|
|
32
|
+
function getTempVault() {
|
|
33
|
+
const tempVaultPath = globalThis.__obsidianIntegrationTesting?.tempVaultPath;
|
|
34
|
+
if (!tempVaultPath) {
|
|
35
|
+
throw new Error(
|
|
36
|
+
"globalThis.__obsidianIntegrationTesting.tempVaultPath is not set. Did you configure obsidian-integration-testing/jest-global-setup as a Jest globalSetup?"
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
return new import_temp_vault.TempVault(tempVaultPath);
|
|
40
|
+
}
|
|
41
|
+
function getTransportOptions() {
|
|
42
|
+
return globalThis.__obsidianIntegrationTesting?.transportOptions;
|
|
43
|
+
}
|
|
44
|
+
async function setup() {
|
|
45
|
+
const transportOptions = globalThis.__obsidianIntegrationTesting?.transportOptions;
|
|
46
|
+
setupResult = await (0, import_global_setup_core.coreSetup)({ transportOptions });
|
|
47
|
+
globalThis.__obsidianIntegrationTesting = {
|
|
48
|
+
...globalThis.__obsidianIntegrationTesting,
|
|
49
|
+
tempVaultPath: setupResult.tempVault.path,
|
|
50
|
+
transportOptions: setupResult.transportOptions
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
async function teardown() {
|
|
54
|
+
await (0, import_global_setup_core.coreTeardown)(setupResult);
|
|
55
|
+
}
|
|
56
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
57
|
+
0 && (module.exports = {
|
|
58
|
+
getTempVault,
|
|
59
|
+
getTransportOptions,
|
|
60
|
+
setup,
|
|
61
|
+
teardown
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2plc3QvZ2xvYmFsLXNldHVwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSmVzdCBnbG9iYWwgc2V0dXAgYW5kIHRlYXJkb3duIGFkYXB0ZXIuXG4gKlxuICogRGVsZWdhdGVzIHRvIHRoZSBmcmFtZXdvcmstYWdub3N0aWMgY29yZSBhbmQgYnJpZGdlcyBjb250ZXh0XG4gKiB0byB0ZXN0IHdvcmtlcnMgdmlhIGBnbG9iYWxUaGlzLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvcmVTZXR1cFJlc3VsdCB9IGZyb20gJy4uL2dsb2JhbC1zZXR1cC1jb3JlLmNqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4uL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5cbmltcG9ydCB7IHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlciB9IGZyb20gJy4uL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmltcG9ydCB7XG4gIGNvcmVTZXR1cCxcbiAgY29yZVRlYXJkb3duXG59IGZyb20gJy4uL2dsb2JhbC1zZXR1cC1jb3JlLmNqcyc7XG5pbXBvcnQgeyBUZW1wVmF1bHQgfSBmcm9tICcuLi90ZW1wLXZhdWx0LmNqcyc7XG5cbi8qKlxuICogU2hhcGUgb2YgYGdsb2JhbFRoaXMuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ2AuXG4gKlxuICogQ29uc3VtZXJzIG1heSBwcmUtcG9wdWxhdGUgYHRyYW5zcG9ydE9wdGlvbnNgIGJlZm9yZSB0aGUgZ2xvYmFsIHNldHVwIHJ1bnNcbiAqIChlLmcuLCB2aWEgSmVzdCBjb25maWcgYGdsb2JhbHNgKS4gVGhlIHNldHVwIHRoZW4gYWRkcyBgdGVtcFZhdWx0UGF0aGAuXG4gKi9cbmludGVyZmFjZSBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0dsb2JhbCB7XG4gIC8qKiBUZW1wIHZhdWx0IHBhdGgsIHNldCBieSB0aGUgZ2xvYmFsIHNldHVwIGZvciB0ZXN0IHdvcmtlcnMuICovXG4gIHRlbXBWYXVsdFBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFRyYW5zcG9ydCBvcHRpb25zLiBTZXQgYnkgdGhlIGNvbnN1bWVyIGJlZm9yZSBzZXR1cCwgb3IgYnkgdGhlIHNldHVwIGl0c2VsZi4gKi9cbiAgdHJhbnNwb3J0T3B0aW9ucz86IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB8IHVuZGVmaW5lZDtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgdmFycy1vbi10b3AgLS0gUmVxdWlyZWQgZm9yIGBkZWNsYXJlIGdsb2JhbGAgYXVnbWVudGF0aW9uLiAqL1xuZGVjbGFyZSBnbG9iYWwge1xuICAvKipcbiAgICogTmFtZXNwYWNlIGZvciBhbGwgYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmdgIGdsb2JhbCBzdGF0ZS5cbiAgICogQ29uc3VtZXJzIGNvbmZpZ3VyZSB0cmFuc3BvcnQgb3B0aW9ucyBoZXJlOyB0aGUgc2V0dXAgcG9wdWxhdGVzIHRoZSByZXN0LlxuICAgKi9cbiAgdmFyIF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc6IE9ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nR2xvYmFsIHwgdW5kZWZpbmVkO1xufVxuLyogZXNsaW50LWVuYWJsZSB2YXJzLW9uLXRvcCAtLSBFbmQgb2YgYGRlY2xhcmUgZ2xvYmFsYCBibG9jay4gKi9cblxuc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyKCgpID0+IGdsb2JhbFRoaXMuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8udHJhbnNwb3J0T3B0aW9ucyk7XG5cbmxldCBzZXR1cFJlc3VsdDogQ29yZVNldHVwUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHRlbXBvcmFyeSB2YXVsdCBwcm92aWRlZCBieSB0aGUgZ2xvYmFsIHNldHVwLlxuICpcbiAqIFJlYWRzIHRoZSB2YXVsdCBwYXRoIGZyb20gYGdsb2JhbFRoaXMuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZy50ZW1wVmF1bHRQYXRoYCxcbiAqIHdoaWNoIGlzIHNldCBieSB0aGUgSmVzdCBnbG9iYWwgc2V0dXAuXG4gKlxuICogQHJldHVybnMgVGhlIHRlbXBvcmFyeSB2YXVsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbXBWYXVsdCgpOiBUZW1wVmF1bHQge1xuICBjb25zdCB0ZW1wVmF1bHRQYXRoID0gZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy50ZW1wVmF1bHRQYXRoO1xuICBpZiAoIXRlbXBWYXVsdFBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnRlbXBWYXVsdFBhdGggaXMgbm90IHNldC4gRGlkIHlvdSBjb25maWd1cmUgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZy9qZXN0LWdsb2JhbC1zZXR1cCBhcyBhIEplc3QgZ2xvYmFsU2V0dXA/J1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ldyBUZW1wVmF1bHQodGVtcFZhdWx0UGF0aCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHJhbnNwb3J0IG9wdGlvbnMgcHJvdmlkZWQgYnkgdGhlIGdsb2JhbCBzZXR1cC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdHJhbnNwb3J0IG9wdGlvbnMsIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBjb25maWd1cmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNwb3J0T3B0aW9ucygpOiBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy50cmFuc3BvcnRPcHRpb25zO1xufVxuXG4vKipcbiAqIEplc3QgZ2xvYmFsIHNldHVwIGZ1bmN0aW9uLlxuICpcbiAqIENvcGllcyB0aGUgYnVpbHQgcGx1Z2luIGludG8gYSB0ZW1wb3JhcnkgdmF1bHQsIGVuYWJsZXMgaXQgdmlhIHRoZSBPYnNpZGlhbiBDTEksXG4gKiBhbmQgcG9wdWxhdGVzIGBnbG9iYWxUaGlzLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIGZvciB0ZXN0cy5cbiAqXG4gKiBUcmFuc3BvcnQgb3B0aW9ucyBhcmUgcmVhZCBmcm9tIGBnbG9iYWxUaGlzLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmcudHJhbnNwb3J0T3B0aW9uc2AuXG4gKiBTZXQgdGhpcyBpbiB5b3VyIEplc3QgY29uZmlnIHZpYSB0aGUgYGdsb2JhbHNgIG9wdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0cmFuc3BvcnRPcHRpb25zID0gZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy50cmFuc3BvcnRPcHRpb25zO1xuXG4gIHNldHVwUmVzdWx0ID0gYXdhaXQgY29yZVNldHVwKHsgdHJhbnNwb3J0T3B0aW9ucyB9KTtcblxuICBnbG9iYWxUaGlzLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmcgPSB7XG4gICAgLi4uZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLFxuICAgIHRlbXBWYXVsdFBhdGg6IHNldHVwUmVzdWx0LnRlbXBWYXVsdC5wYXRoLFxuICAgIHRyYW5zcG9ydE9wdGlvbnM6IHNldHVwUmVzdWx0LnRyYW5zcG9ydE9wdGlvbnNcbiAgfTtcbn1cblxuLyoqXG4gKiBKZXN0IGdsb2JhbCB0ZWFyZG93biBmdW5jdGlvbi5cbiAqXG4gKiBSZW1vdmVzIHRoZSB0ZW1wb3JhcnkgdmF1bHQgY3JlYXRlZCBkdXJpbmcgc2V0dXAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZWFyZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgY29yZVRlYXJkb3duKHNldHVwUmVzdWx0KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQSw4QkFBNEM7QUFDNUMsK0JBR087QUFDUCx3QkFBMEI7QUFBQSxJQTBCMUIscURBQTRCLE1BQU0sV0FBVyw4QkFBOEIsZ0JBQWdCO0FBRTNGLElBQUk7QUFVRyxTQUFTLGVBQTBCO0FBQ3hDLFFBQU0sZ0JBQWdCLFdBQVcsOEJBQThCO0FBQy9ELE1BQUksQ0FBQyxlQUFlO0FBQ2xCLFVBQU0sSUFBSTtBQUFBLE1BQ1I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU8sSUFBSSw0QkFBVSxhQUFhO0FBQ3BDO0FBT08sU0FBUyxzQkFBNEQ7QUFDMUUsU0FBTyxXQUFXLDhCQUE4QjtBQUNsRDtBQVdBLGVBQXNCLFFBQXVCO0FBQzNDLFFBQU0sbUJBQW1CLFdBQVcsOEJBQThCO0FBRWxFLGdCQUFjLFVBQU0sb0NBQVUsRUFBRSxpQkFBaUIsQ0FBQztBQUVsRCxhQUFXLCtCQUErQjtBQUFBLElBQ3hDLEdBQUcsV0FBVztBQUFBLElBQ2QsZUFBZSxZQUFZLFVBQVU7QUFBQSxJQUNyQyxrQkFBa0IsWUFBWTtBQUFBLEVBQ2hDO0FBQ0Y7QUFPQSxlQUFzQixXQUEwQjtBQUM5QyxZQUFNLHVDQUFhLFdBQVc7QUFDaEM7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -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.cjs';
|
|
10
|
+
import { TempVault } from '../temp-vault.cjs';
|
|
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,32 @@
|
|
|
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 log_exports = {};
|
|
20
|
+
__export(log_exports, {
|
|
21
|
+
log: () => log
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(log_exports);
|
|
24
|
+
function log(message) {
|
|
25
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
26
|
+
console.warn(`[${timestamp}] ${message}`);
|
|
27
|
+
}
|
|
28
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
29
|
+
0 && (module.exports = {
|
|
30
|
+
log
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xvZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVybmFsIGxvZ2dpbmcgaGVscGVyIHRoYXQgcHJlcGVuZHMgSVNPIHRpbWVzdGFtcHMgdG8gaW50ZWdyYXRpb24tc2V0dXAgbWVzc2FnZXMuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoaW4gbG9nZ2luZyB3cmFwcGVyLCBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLiAqL1xuXG4vKipcbiAqIExvZ3MgYSB0aW1lc3RhbXBlZCBtZXNzYWdlIHRvIHN0ZGVyciB2aWEgYGNvbnNvbGUud2FybmAuXG4gKlxuICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBsb2cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2cobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgY29uc29sZS53YXJuKGBbJHt0aW1lc3RhbXB9XSAke21lc3NhZ2V9YCk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYU8sU0FBUyxJQUFJLFNBQXVCO0FBQ3pDLFFBQU0sYUFBWSxvQkFBSSxLQUFLLEdBQUUsWUFBWTtBQUN6QyxVQUFRLEtBQUssSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFO0FBQzFDOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Internal logging helper that prepends ISO timestamps to integration-setup messages.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Logs a timestamped message to stderr via `console.warn`.
|
|
8
|
+
*
|
|
9
|
+
* @param message - The message to log.
|
|
10
|
+
*/
|
|
11
|
+
export declare function log(message: string): void;
|