obsidian-integration-testing 1.0.0 → 1.1.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.
- package/README.md +15 -11
- package/dist/lib/cjs/index.cjs +1 -1
- package/dist/lib/cjs/index.d.cts +0 -1
- package/dist/lib/cjs/integration-global-setup.cjs +14 -13
- package/dist/lib/cjs/integration-global-setup.d.cts +5 -4
- package/dist/lib/cjs/noop.cjs +34 -0
- package/dist/lib/cjs/noop.d.cts +15 -0
- package/dist/lib/cjs/temp-vault.cjs +22 -13
- package/dist/lib/cjs/temp-vault.d.cts +14 -16
- package/dist/lib/esm/index.d.mts +0 -1
- package/dist/lib/esm/index.mjs +1 -1
- package/dist/lib/esm/integration-global-setup.d.mts +5 -4
- package/dist/lib/esm/integration-global-setup.mjs +13 -14
- package/dist/lib/esm/noop.d.mts +15 -0
- package/dist/lib/esm/noop.mjs +9 -0
- package/dist/lib/esm/temp-vault.d.mts +14 -16
- package/dist/lib/esm/temp-vault.mjs +22 -13
- package/dist/obsidian-integration-testing-1.1.0.tgz +0 -0
- package/package.json +2 -6
- package/dist/obsidian-integration-testing-1.0.0.tgz +0 -0
- package/patches/@vitest+runner+4.1.0.patch +0 -22
- package/scripts/postinstall.mjs +0 -29
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# obsidian-integration-testing
|
|
2
2
|
|
|
3
3
|
[](https://www.buymeacoffee.com/mnaoumov)
|
|
4
|
+
[](https://www.npmjs.com/package/obsidian-integration-testing)
|
|
5
|
+
[](https://www.npmjs.com/package/obsidian-integration-testing)
|
|
4
6
|
[](https://github.com/mnaoumov/obsidian-integration-testing/releases)
|
|
5
7
|
[](https://github.com/mnaoumov/obsidian-integration-testing)
|
|
6
8
|
|
|
@@ -142,11 +144,11 @@ interface Context {
|
|
|
142
144
|
file: TFile;
|
|
143
145
|
}
|
|
144
146
|
|
|
145
|
-
const vault = new TempVault(
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
147
|
+
const vault = new TempVault();
|
|
148
|
+
|
|
149
|
+
vault.populate({
|
|
150
|
+
'note.md': '# Hello',
|
|
151
|
+
'folder/nested.md': 'nested content',
|
|
150
152
|
});
|
|
151
153
|
|
|
152
154
|
const contextId = new ContextId<Context>();
|
|
@@ -191,25 +193,27 @@ it('should access the TFile from context', async () => {
|
|
|
191
193
|
});
|
|
192
194
|
```
|
|
193
195
|
|
|
196
|
+
Both `TempVault` and `ContextId` implement `AsyncDisposable`, so you can use `await using` for automatic cleanup.
|
|
197
|
+
|
|
194
198
|
Parent directories are created automatically. To create an empty folder, use a path ending with `/` and an empty string as content.
|
|
195
199
|
|
|
196
200
|
### Test your plugin
|
|
197
201
|
|
|
198
|
-
Use `
|
|
202
|
+
Use `getTempVault()` to get the temporary vault created by the global setup:
|
|
199
203
|
|
|
200
204
|
```ts
|
|
201
205
|
import { describe, expect, it } from 'vitest';
|
|
202
206
|
import { evalInObsidian } from 'obsidian-integration-testing';
|
|
203
|
-
import {
|
|
207
|
+
import { getTempVault } from 'obsidian-integration-testing/obsidian-plugin-vitest-setup';
|
|
204
208
|
|
|
205
209
|
describe('my-plugin', () => {
|
|
206
|
-
const
|
|
210
|
+
const vault = getTempVault();
|
|
207
211
|
|
|
208
212
|
it('should be enabled', async () => {
|
|
209
213
|
const isEnabled = await evalInObsidian({
|
|
210
214
|
args: { pluginId: 'my-plugin' },
|
|
211
215
|
fn: ({ app, pluginId }) => app.plugins.enabledPlugins.has(pluginId),
|
|
212
|
-
vaultPath
|
|
216
|
+
vaultPath: vault.path
|
|
213
217
|
});
|
|
214
218
|
expect(isEnabled).toBe(true);
|
|
215
219
|
});
|
|
@@ -219,12 +223,12 @@ describe('my-plugin', () => {
|
|
|
219
223
|
fn: async ({ app }) => {
|
|
220
224
|
await app.vault.create('test.md', '# Hello');
|
|
221
225
|
},
|
|
222
|
-
vaultPath
|
|
226
|
+
vaultPath: vault.path
|
|
223
227
|
});
|
|
224
228
|
|
|
225
229
|
const content = await evalInObsidian({
|
|
226
230
|
fn: ({ app }) => app.vault.adapter.read('test.md'),
|
|
227
|
-
vaultPath
|
|
231
|
+
vaultPath: vault.path
|
|
228
232
|
});
|
|
229
233
|
expect(content).toBe('# Hello');
|
|
230
234
|
});
|
package/dist/lib/cjs/index.cjs
CHANGED
|
@@ -37,4 +37,4 @@ var import_vault_registry = require("./vault-registry.cjs");
|
|
|
37
37
|
registerVault,
|
|
38
38
|
unregisterVault
|
|
39
39
|
});
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGludGVncmF0aW9uIHRlc3RpbmcgbW9kdWxlLlxuICovXG5cbmV4cG9ydCB7IENvbnRleHRJZCB9IGZyb20gJy4vY29udGV4dC1pZC5janMnO1xuZXhwb3J0IHR5cGUgeyBFdmFsSW5PYnNpZGlhblBhcmFtcyB9IGZyb20gJy4vb2JzaWRpYW4tY2xpLmNqcyc7XG5leHBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vb2JzaWRpYW4tY2xpLmNqcyc7XG5leHBvcnQgeyBUZW1wVmF1bHQgfSBmcm9tICcuL3RlbXAtdmF1bHQuY2pzJztcbmV4cG9ydCB7XG4gIHJlZ2lzdGVyVmF1bHQsXG4gIHVucmVnaXN0ZXJWYXVsdFxufSBmcm9tICcuL3ZhdWx0LXJlZ2lzdHJ5LmNqcyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSx3QkFBMEI7QUFFMUIsMEJBQStCO0FBQy9CLHdCQUEwQjtBQUMxQiw0QkFHTzsiLAogICJuYW1lcyI6IFtdCn0K
|
package/dist/lib/cjs/index.d.cts
CHANGED
|
@@ -6,6 +6,5 @@
|
|
|
6
6
|
export { ContextId } from './context-id.cjs';
|
|
7
7
|
export type { EvalInObsidianParams } from './obsidian-cli.cjs';
|
|
8
8
|
export { evalInObsidian } from './obsidian-cli.cjs';
|
|
9
|
-
export type { TempVaultParams } from './temp-vault.cjs';
|
|
10
9
|
export { TempVault } from './temp-vault.cjs';
|
|
11
10
|
export { registerVault, unregisterVault } from './vault-registry.cjs';
|
|
@@ -18,19 +18,19 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var integration_global_setup_exports = {};
|
|
20
20
|
__export(integration_global_setup_exports, {
|
|
21
|
-
|
|
21
|
+
getTempVault: () => getTempVault,
|
|
22
22
|
setup: () => setup,
|
|
23
23
|
teardown: () => teardown
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(integration_global_setup_exports);
|
|
26
26
|
var import_node_fs = require("node:fs");
|
|
27
27
|
var import_promises = require("node:fs/promises");
|
|
28
|
-
var import_node_os = require("node:os");
|
|
29
28
|
var import_node_path = require("node:path");
|
|
30
29
|
var import_vitest = require("vitest");
|
|
31
30
|
var import_obsidian_cli = require("./obsidian-cli.cjs");
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
var import_temp_vault = require("./temp-vault.cjs");
|
|
32
|
+
function getTempVault() {
|
|
33
|
+
return (0, import_vitest.inject)("tempVault");
|
|
34
34
|
}
|
|
35
35
|
const DIST_DEV = "dist/dev";
|
|
36
36
|
const DIST_BUILD = "dist/build";
|
|
@@ -38,7 +38,7 @@ const MAIN_JS = "main.js";
|
|
|
38
38
|
const OBSIDIAN_CONFIG_DIR = ".obsidian";
|
|
39
39
|
const PLUGINS_DIR = "plugins";
|
|
40
40
|
const COMMUNITY_PLUGINS_JSON = "community-plugins.json";
|
|
41
|
-
let
|
|
41
|
+
let tempVault;
|
|
42
42
|
async function setup(project) {
|
|
43
43
|
const projectRoot = findProjectRoot();
|
|
44
44
|
const distPath = await resolveDistPath(projectRoot);
|
|
@@ -47,11 +47,12 @@ async function setup(project) {
|
|
|
47
47
|
const mainJs = (0, import_node_path.join)(distPath, MAIN_JS);
|
|
48
48
|
const buildStat = await (0, import_promises.stat)(mainJs);
|
|
49
49
|
console.warn(`Using ${distPath} (${buildStat.mtime.toISOString()}). If outdated, rebuild.`);
|
|
50
|
-
|
|
51
|
-
const pluginDir = (0, import_node_path.join)(
|
|
50
|
+
tempVault = new import_temp_vault.TempVault();
|
|
51
|
+
const pluginDir = (0, import_node_path.join)(tempVault.path, OBSIDIAN_CONFIG_DIR, PLUGINS_DIR, pluginId);
|
|
52
52
|
await (0, import_promises.mkdir)(pluginDir, { recursive: true });
|
|
53
53
|
await (0, import_promises.cp)(distPath, pluginDir, { recursive: true });
|
|
54
|
-
await (0, import_promises.writeFile)((0, import_node_path.join)(
|
|
54
|
+
await (0, import_promises.writeFile)((0, import_node_path.join)(tempVault.path, OBSIDIAN_CONFIG_DIR, COMMUNITY_PLUGINS_JSON), JSON.stringify([pluginId]));
|
|
55
|
+
await tempVault.register();
|
|
55
56
|
await (0, import_obsidian_cli.evalInObsidian)({
|
|
56
57
|
args: { pluginId },
|
|
57
58
|
// eslint-disable-next-line no-shadow -- No actual shadowing as the function is executed externally.
|
|
@@ -59,12 +60,12 @@ async function setup(project) {
|
|
|
59
60
|
await app.plugins.enablePluginAndSave(pluginId2);
|
|
60
61
|
},
|
|
61
62
|
shouldSkipPreflightChecks: true,
|
|
62
|
-
vaultPath:
|
|
63
|
+
vaultPath: tempVault.path
|
|
63
64
|
});
|
|
64
|
-
project.provide("
|
|
65
|
+
project.provide("tempVault", tempVault);
|
|
65
66
|
}
|
|
66
67
|
async function teardown() {
|
|
67
|
-
await
|
|
68
|
+
await tempVault.dispose();
|
|
68
69
|
}
|
|
69
70
|
function findProjectRoot() {
|
|
70
71
|
let dir = process.cwd();
|
|
@@ -99,8 +100,8 @@ async function resolveDistPath(projectRoot) {
|
|
|
99
100
|
}
|
|
100
101
|
// Annotate the CommonJS export names for ESM import in node:
|
|
101
102
|
0 && (module.exports = {
|
|
102
|
-
|
|
103
|
+
getTempVault,
|
|
103
104
|
setup,
|
|
104
105
|
teardown
|
|
105
106
|
});
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uLWdsb2JhbC1zZXR1cC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBDb250YWlucyB0aGUgZ2xvYmFsIHNldHVwIGFuZCB0ZWFyZG93biBmdW5jdGlvbnMgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk1hbmlmZXN0IH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUZXN0UHJvamVjdCB9IGZyb20gJ3ZpdGVzdC9ub2RlJztcblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIG1rZGlyLFxuICByZWFkRmlsZSxcbiAgc3RhdCxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vb2JzaWRpYW4tY2xpLmNqcyc7XG5pbXBvcnQgeyBUZW1wVmF1bHQgfSBmcm9tICcuL3RlbXAtdmF1bHQuY2pzJztcblxuZGVjbGFyZSBtb2R1bGUgJ3ZpdGVzdCcge1xuICBpbnRlcmZhY2UgUHJvdmlkZWRDb250ZXh0IHtcbiAgICB0ZW1wVmF1bHQ6IFRlbXBWYXVsdDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHRlbXBvcmFyeSB2YXVsdCBwcm92aWRlZCBieSB0aGUgZ2xvYmFsIHNldHVwLlxuICpcbiAqIEByZXR1cm5zIFRoZSB0ZW1wb3JhcnkgdmF1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW1wVmF1bHQoKTogVGVtcFZhdWx0IHtcbiAgcmV0dXJuIGluamVjdCgndGVtcFZhdWx0Jyk7XG59XG5cbmNvbnN0IERJU1RfREVWID0gJ2Rpc3QvZGV2JztcbmNvbnN0IERJU1RfQlVJTEQgPSAnZGlzdC9idWlsZCc7XG5jb25zdCBNQUlOX0pTID0gJ21haW4uanMnO1xuY29uc3QgT0JTSURJQU5fQ09ORklHX0RJUiA9ICcub2JzaWRpYW4nO1xuY29uc3QgUExVR0lOU19ESVIgPSAncGx1Z2lucyc7XG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19KU09OID0gJ2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuXG5sZXQgdGVtcFZhdWx0OiBUZW1wVmF1bHQ7XG5cbi8qKlxuICogVml0ZXN0IGdsb2JhbCBzZXR1cCBmdW5jdGlvbi5cbiAqXG4gKiBDb3BpZXMgdGhlIGJ1aWx0IHBsdWdpbiBpbnRvIGEgdGVtcG9yYXJ5IHZhdWx0LCBlbmFibGVzIGl0IHZpYSB0aGUgT2JzaWRpYW4gQ0xJLFxuICogYW5kIHByb3ZpZGVzIGB0ZW1wVmF1bHRQYXRoYCB0byB0ZXN0cy5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdCAtIFRoZSBWaXRlc3QgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwKHByb2plY3Q6IFRlc3RQcm9qZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb2plY3RSb290ID0gZmluZFByb2plY3RSb290KCk7XG4gIGNvbnN0IGRpc3RQYXRoID0gYXdhaXQgcmVzb2x2ZURpc3RQYXRoKHByb2plY3RSb290KTtcbiAgY29uc3QgbWFuaWZlc3RKc29uID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShqb2luKGRpc3RQYXRoLCAnbWFuaWZlc3QuanNvbicpLCAndXRmLTgnKSkgYXMgUGx1Z2luTWFuaWZlc3Q7XG4gIGNvbnN0IHBsdWdpbklkID0gbWFuaWZlc3RKc29uLmlkO1xuXG4gIGNvbnN0IG1haW5KcyA9IGpvaW4oZGlzdFBhdGgsIE1BSU5fSlMpO1xuICBjb25zdCBidWlsZFN0YXQgPSBhd2FpdCBzdGF0KG1haW5Kcyk7XG5cbiAgY29uc29sZS53YXJuKGBVc2luZyAke2Rpc3RQYXRofSAoJHtidWlsZFN0YXQubXRpbWUudG9JU09TdHJpbmcoKX0pLiBJZiBvdXRkYXRlZCwgcmVidWlsZC5gKTtcblxuICB0ZW1wVmF1bHQgPSBuZXcgVGVtcFZhdWx0KCk7XG4gIGNvbnN0IHBsdWdpbkRpciA9IGpvaW4odGVtcFZhdWx0LnBhdGgsIE9CU0lESUFOX0NPTkZJR19ESVIsIFBMVUdJTlNfRElSLCBwbHVnaW5JZCk7XG4gIGF3YWl0IG1rZGlyKHBsdWdpbkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IGNwKGRpc3RQYXRoLCBwbHVnaW5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB3cml0ZUZpbGUoam9pbih0ZW1wVmF1bHQucGF0aCwgT0JTSURJQU5fQ09ORklHX0RJUiwgQ09NTVVOSVRZX1BMVUdJTlNfSlNPTiksIEpTT04uc3RyaW5naWZ5KFtwbHVnaW5JZF0pKTtcbiAgYXdhaXQgdGVtcFZhdWx0LnJlZ2lzdGVyKCk7XG5cbiAgYXdhaXQgZXZhbEluT2JzaWRpYW4oe1xuICAgIGFyZ3M6IHsgcGx1Z2luSWQgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93IC0tIE5vIGFjdHVhbCBzaGFkb3dpbmcgYXMgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGV4dGVybmFsbHkuXG4gICAgZm46IGFzeW5jICh7IGFwcCwgcGx1Z2luSWQgfSkgPT4ge1xuICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG4gICAgfSxcbiAgICBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzOiB0cnVlLFxuICAgIHZhdWx0UGF0aDogdGVtcFZhdWx0LnBhdGhcbiAgfSk7XG5cbiAgcHJvamVjdC5wcm92aWRlKCd0ZW1wVmF1bHQnLCB0ZW1wVmF1bHQpO1xufVxuXG4vKipcbiAqIFZpdGVzdCBnbG9iYWwgdGVhcmRvd24gZnVuY3Rpb24uXG4gKlxuICogUmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IHZhdWx0IGNyZWF0ZWQgZHVyaW5nIHNldHVwLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVhcmRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHRlbXBWYXVsdC5kaXNwb3NlKCk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIHByb2plY3Qgcm9vdCBieSB3YWxraW5nIHVwIGZyb20gYHByb2Nlc3MuY3dkKClgIGxvb2tpbmcgZm9yIGBwYWNrYWdlLmpzb25gLlxuICpcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbmZ1bmN0aW9uIGZpbmRQcm9qZWN0Um9vdCgpOiBzdHJpbmcge1xuICBsZXQgZGlyID0gcHJvY2Vzcy5jd2QoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBMb29wIHRlcm1pbmF0ZXMgYXQgZmlsZXN5c3RlbSByb290LlxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChleGlzdHNTeW5jKGpvaW4oZGlyLCAncGFja2FnZS5qc29uJykpKSB7XG4gICAgICByZXR1cm4gZGlyO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBqb2luKGRpciwgJy4uJyk7XG4gICAgaWYgKHBhcmVudCA9PT0gZGlyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHByb2plY3Qgcm9vdCAobm8gcGFja2FnZS5qc29uIGZvdW5kKS4nKTtcbiAgICB9XG4gICAgZGlyID0gcGFyZW50O1xuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGRpc3QgcGF0aCB0byB1c2UgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICpcbiAqIFBpY2tzIHdoaWNoZXZlciBvZiBgZGlzdC9kZXZgIGFuZCBgZGlzdC9idWlsZGAgaGFzIGEgbmV3ZXIgYG1haW4uanNgLlxuICogSWYgb25seSBvbmUgZXhpc3RzLCB0aGF0IG9uZSBpcyB1c2VkLiBUaHJvd3MgaWYgbmVpdGhlciBleGlzdHMuXG4gKlxuICogQHBhcmFtIHByb2plY3RSb290IC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3Qgcm9vdC5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjaG9zZW4gZGlzdCBmb2xkZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVEaXN0UGF0aChwcm9qZWN0Um9vdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGV2UGF0aCA9IGpvaW4ocHJvamVjdFJvb3QsIERJU1RfREVWKTtcbiAgY29uc3QgYnVpbGRQYXRoID0gam9pbihwcm9qZWN0Um9vdCwgRElTVF9CVUlMRCk7XG4gIGNvbnN0IGRldk1haW5KcyA9IGpvaW4oZGV2UGF0aCwgTUFJTl9KUyk7XG4gIGNvbnN0IGJ1aWxkTWFpbkpzID0gam9pbihidWlsZFBhdGgsIE1BSU5fSlMpO1xuICBjb25zdCBkZXZTdGF0ID0gZXhpc3RzU3luYyhkZXZNYWluSnMpID8gYXdhaXQgc3RhdChkZXZNYWluSnMpIDogbnVsbDtcbiAgY29uc3QgYnVpbGRTdGF0ID0gZXhpc3RzU3luYyhidWlsZE1haW5KcykgPyBhd2FpdCBzdGF0KGJ1aWxkTWFpbkpzKSA6IG51bGw7XG5cbiAgaWYgKGRldlN0YXQgJiYgYnVpbGRTdGF0KSB7XG4gICAgcmV0dXJuIGRldlN0YXQubXRpbWUgPiBidWlsZFN0YXQubXRpbWUgPyBkZXZQYXRoIDogYnVpbGRQYXRoO1xuICB9XG5cbiAgaWYgKGRldlN0YXQpIHtcbiAgICByZXR1cm4gZGV2UGF0aDtcbiAgfVxuXG4gIGlmIChidWlsZFN0YXQpIHtcbiAgICByZXR1cm4gYnVpbGRQYXRoO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBidWlsZCBmb3VuZC4gUnVuIGBucG0gcnVuIGJ1aWxkYCBvciBgbnBtIHJ1biBkZXZgIGZpcnN0LicpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQSxxQkFBMkI7QUFDM0Isc0JBTU87QUFDUCx1QkFBcUI7QUFDckIsb0JBQXVCO0FBRXZCLDBCQUErQjtBQUMvQix3QkFBMEI7QUFhbkIsU0FBUyxlQUEwQjtBQUN4QyxhQUFPLHNCQUFPLFdBQVc7QUFDM0I7QUFFQSxNQUFNLFdBQVc7QUFDakIsTUFBTSxhQUFhO0FBQ25CLE1BQU0sVUFBVTtBQUNoQixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLGNBQWM7QUFDcEIsTUFBTSx5QkFBeUI7QUFFL0IsSUFBSTtBQVVKLGVBQXNCLE1BQU0sU0FBcUM7QUFDL0QsUUFBTSxjQUFjLGdCQUFnQjtBQUNwQyxRQUFNLFdBQVcsTUFBTSxnQkFBZ0IsV0FBVztBQUNsRCxRQUFNLGVBQWUsS0FBSyxNQUFNLFVBQU0sOEJBQVMsdUJBQUssVUFBVSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3hGLFFBQU0sV0FBVyxhQUFhO0FBRTlCLFFBQU0sYUFBUyx1QkFBSyxVQUFVLE9BQU87QUFDckMsUUFBTSxZQUFZLFVBQU0sc0JBQUssTUFBTTtBQUVuQyxVQUFRLEtBQUssU0FBUyxRQUFRLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQywwQkFBMEI7QUFFMUYsY0FBWSxJQUFJLDRCQUFVO0FBQzFCLFFBQU0sZ0JBQVksdUJBQUssVUFBVSxNQUFNLHFCQUFxQixhQUFhLFFBQVE7QUFDakYsWUFBTSx1QkFBTSxXQUFXLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDMUMsWUFBTSxvQkFBRyxVQUFVLFdBQVcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNqRCxZQUFNLCtCQUFVLHVCQUFLLFVBQVUsTUFBTSxxQkFBcUIsc0JBQXNCLEdBQUcsS0FBSyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0csUUFBTSxVQUFVLFNBQVM7QUFFekIsWUFBTSxvQ0FBZTtBQUFBLElBQ25CLE1BQU0sRUFBRSxTQUFTO0FBQUE7QUFBQSxJQUVqQixJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQUFBLFVBQVMsTUFBTTtBQUMvQixZQUFNLElBQUksUUFBUSxvQkFBb0JBLFNBQVE7QUFBQSxJQUNoRDtBQUFBLElBQ0EsMkJBQTJCO0FBQUEsSUFDM0IsV0FBVyxVQUFVO0FBQUEsRUFDdkIsQ0FBQztBQUVELFVBQVEsUUFBUSxhQUFhLFNBQVM7QUFDeEM7QUFPQSxlQUFzQixXQUEwQjtBQUM5QyxRQUFNLFVBQVUsUUFBUTtBQUMxQjtBQU9BLFNBQVMsa0JBQTBCO0FBQ2pDLE1BQUksTUFBTSxRQUFRLElBQUk7QUFHdEIsU0FBTyxNQUFNO0FBQ1gsWUFBSSwrQkFBVyx1QkFBSyxLQUFLLGNBQWMsQ0FBQyxHQUFHO0FBQ3pDLGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxhQUFTLHVCQUFLLEtBQUssSUFBSTtBQUM3QixRQUFJLFdBQVcsS0FBSztBQUNsQixZQUFNLElBQUksTUFBTSxzREFBc0Q7QUFBQSxJQUN4RTtBQUNBLFVBQU07QUFBQSxFQUNSO0FBQ0Y7QUFXQSxlQUFlLGdCQUFnQixhQUFzQztBQUNuRSxRQUFNLGNBQVUsdUJBQUssYUFBYSxRQUFRO0FBQzFDLFFBQU0sZ0JBQVksdUJBQUssYUFBYSxVQUFVO0FBQzlDLFFBQU0sZ0JBQVksdUJBQUssU0FBUyxPQUFPO0FBQ3ZDLFFBQU0sa0JBQWMsdUJBQUssV0FBVyxPQUFPO0FBQzNDLFFBQU0sY0FBVSwyQkFBVyxTQUFTLElBQUksVUFBTSxzQkFBSyxTQUFTLElBQUk7QUFDaEUsUUFBTSxnQkFBWSwyQkFBVyxXQUFXLElBQUksVUFBTSxzQkFBSyxXQUFXLElBQUk7QUFFdEUsTUFBSSxXQUFXLFdBQVc7QUFDeEIsV0FBTyxRQUFRLFFBQVEsVUFBVSxRQUFRLFVBQVU7QUFBQSxFQUNyRDtBQUVBLE1BQUksU0FBUztBQUNYLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxXQUFXO0FBQ2IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLElBQUksTUFBTSw2REFBNkQ7QUFDL0U7IiwKICAibmFtZXMiOiBbInBsdWdpbklkIl0KfQo=
|
|
@@ -4,17 +4,18 @@
|
|
|
4
4
|
* Contains the global setup and teardown functions for integration tests.
|
|
5
5
|
*/
|
|
6
6
|
import type { TestProject } from 'vitest/node';
|
|
7
|
+
import { TempVault } from './temp-vault.cjs';
|
|
7
8
|
declare module 'vitest' {
|
|
8
9
|
interface ProvidedContext {
|
|
9
|
-
|
|
10
|
+
tempVault: TempVault;
|
|
10
11
|
}
|
|
11
12
|
}
|
|
12
13
|
/**
|
|
13
|
-
* Returns the temporary vault
|
|
14
|
+
* Returns the temporary vault provided by the global setup.
|
|
14
15
|
*
|
|
15
|
-
* @returns The
|
|
16
|
+
* @returns The temporary vault.
|
|
16
17
|
*/
|
|
17
|
-
export declare function
|
|
18
|
+
export declare function getTempVault(): TempVault;
|
|
18
19
|
/**
|
|
19
20
|
* Vitest global setup function.
|
|
20
21
|
*
|
|
@@ -0,0 +1,34 @@
|
|
|
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 noop_exports = {};
|
|
20
|
+
__export(noop_exports, {
|
|
21
|
+
noop: () => noop,
|
|
22
|
+
noopAsync: () => noopAsync
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(noop_exports);
|
|
25
|
+
function noop() {
|
|
26
|
+
}
|
|
27
|
+
async function noopAsync() {
|
|
28
|
+
}
|
|
29
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
30
|
+
0 && (module.exports = {
|
|
31
|
+
noop,
|
|
32
|
+
noopAsync
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25vb3AudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogTm8tb3AgZnVuY3Rpb25zLlxuICovXG5cbi8qKlxuICogTm8tb3AgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAvLyBOby1vcFxufVxuXG4vKipcbiAqIE5vLW9wIGFzeW5jIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbm9vcEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBOby1vcFxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU08sU0FBUyxPQUFhO0FBRTdCO0FBT0EsZUFBc0IsWUFBMkI7QUFFakQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
*
|
|
4
|
+
* No-op functions.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* No-op function.
|
|
8
|
+
*/
|
|
9
|
+
export declare function noop(): void;
|
|
10
|
+
/**
|
|
11
|
+
* No-op async function.
|
|
12
|
+
*
|
|
13
|
+
* @returns A promise that resolves when the function is complete.
|
|
14
|
+
*/
|
|
15
|
+
export declare function noopAsync(): Promise<void>;
|
|
@@ -34,13 +34,29 @@ class TempVault {
|
|
|
34
34
|
*/
|
|
35
35
|
path;
|
|
36
36
|
/**
|
|
37
|
-
* Creates a new temp vault
|
|
37
|
+
* Creates a new temp vault.
|
|
38
38
|
*
|
|
39
|
-
* @param
|
|
39
|
+
* @param path - An explicit vault path. If omitted, a temp directory is created.
|
|
40
40
|
*/
|
|
41
|
-
constructor(
|
|
42
|
-
this.path =
|
|
43
|
-
|
|
41
|
+
constructor(path) {
|
|
42
|
+
this.path = path ?? (0, import_node_fs.mkdtempSync)((0, import_node_path.join)((0, import_node_os.tmpdir)(), "temp-vault-"));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Unregisters the vault from Obsidian and deletes the temp directory.
|
|
46
|
+
*/
|
|
47
|
+
async dispose() {
|
|
48
|
+
await (0, import_vault_registry.unregisterVault)(this.path);
|
|
49
|
+
await retryRm(this.path);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Writes files and folders into the vault directory.
|
|
53
|
+
* Parent directories are created automatically.
|
|
54
|
+
* Paths ending with `/` are treated as empty folders (content must be empty string).
|
|
55
|
+
*
|
|
56
|
+
* @param files - Map of file/folder paths to content.
|
|
57
|
+
*/
|
|
58
|
+
populate(files) {
|
|
59
|
+
for (const [filePath, content] of Object.entries(files)) {
|
|
44
60
|
const fullPath = (0, import_node_path.join)(this.path, filePath);
|
|
45
61
|
if (filePath.endsWith("/")) {
|
|
46
62
|
if (content !== "") {
|
|
@@ -53,13 +69,6 @@ class TempVault {
|
|
|
53
69
|
}
|
|
54
70
|
}
|
|
55
71
|
}
|
|
56
|
-
/**
|
|
57
|
-
* Unregisters the vault from Obsidian and deletes the temp directory.
|
|
58
|
-
*/
|
|
59
|
-
async dispose() {
|
|
60
|
-
await (0, import_vault_registry.unregisterVault)(this.path);
|
|
61
|
-
await retryRm(this.path);
|
|
62
|
-
}
|
|
63
72
|
/**
|
|
64
73
|
* Registers this vault in the running Obsidian instance so the CLI can target it.
|
|
65
74
|
*/
|
|
@@ -93,4 +102,4 @@ async function retryRm(path) {
|
|
|
93
102
|
0 && (module.exports = {
|
|
94
103
|
TempVault
|
|
95
104
|
});
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RlbXAtdmF1bHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogTWFuYWdlcyB0ZW1wb3JhcnkgdmF1bHQgbGlmZWN5Y2xlIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqL1xuXG5pbXBvcnQge1xuICBta2RpclN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgcm0gfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pblxufSBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQge1xuICByZWdpc3RlclZhdWx0LFxuICB1bnJlZ2lzdGVyVmF1bHRcbn0gZnJvbSAnLi92YXVsdC1yZWdpc3RyeS5janMnO1xuXG5jb25zdCBSTV9SRVRSWV9ERUxBWV9NUyA9IDUwMDtcbmNvbnN0IFJNX1JFVFJZX1RJTUVPVVRfTVMgPSAxMDAwMDtcblxuLyoqXG4gKiBBIHRlbXBvcmFyeSBPYnNpZGlhbiB2YXVsdCBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKlxuICogQ3JlYXRlcyBhIHRlbXAgZGlyZWN0b3J5IGFuZCByZWdpc3RlcnMgaXQgaW4gdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2VcbiAqIHNvIHRoYXQgdGhlIE9ic2lkaWFuIENMSSBjYW4gdGFyZ2V0IGl0IHZpYSBgY3dkYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBWYXVsdCB7XG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdGVtcG9yYXJ5IHZhdWx0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB0ZW1wIHZhdWx0LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIEFuIGV4cGxpY2l0IHZhdWx0IHBhdGguIElmIG9taXR0ZWQsIGEgdGVtcCBkaXJlY3RvcnkgaXMgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXRoPzogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXRoID0gcGF0aCA/PyBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCAndGVtcC12YXVsdC0nKSk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgdGhlIHZhdWx0IGZyb20gT2JzaWRpYW4gYW5kIGRlbGV0ZXMgdGhlIHRlbXAgZGlyZWN0b3J5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdW5yZWdpc3RlclZhdWx0KHRoaXMucGF0aCk7XG4gICAgYXdhaXQgcmV0cnlSbSh0aGlzLnBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlcyBmaWxlcyBhbmQgZm9sZGVycyBpbnRvIHRoZSB2YXVsdCBkaXJlY3RvcnkuXG4gICAqIFBhcmVudCBkaXJlY3RvcmllcyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgKiBQYXRocyBlbmRpbmcgd2l0aCBgL2AgYXJlIHRyZWF0ZWQgYXMgZW1wdHkgZm9sZGVycyAoY29udGVudCBtdXN0IGJlIGVtcHR5IHN0cmluZykuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlcyAtIE1hcCBvZiBmaWxlL2ZvbGRlciBwYXRocyB0byBjb250ZW50LlxuICAgKi9cbiAgcHVibGljIHBvcHVsYXRlKGZpbGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVzKSkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKHRoaXMucGF0aCwgZmlsZVBhdGgpO1xuICAgICAgaWYgKGZpbGVQYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgaWYgKGNvbnRlbnQgIT09ICcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb2xkZXIgcGF0aCBcIiR7ZmlsZVBhdGh9XCIgbXVzdCBoYXZlIGVtcHR5IGNvbnRlbnRgKTtcbiAgICAgICAgfVxuICAgICAgICBta2RpclN5bmMoZnVsbFBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWtkaXJTeW5jKGRpcm5hbWUoZnVsbFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgd3JpdGVGaWxlU3luYyhmdWxsUGF0aCwgY29udGVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGlzIHZhdWx0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHNvIHRoZSBDTEkgY2FuIHRhcmdldCBpdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWdpc3RlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCByZWdpc3RlclZhdWx0KHRoaXMucGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmMgZGlzcG9zYWJsZSBzdXBwb3J0IGZvciBgYXdhaXQgdXNpbmdgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB2YXVsdCBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcG9zZSgpO1xuICB9XG59XG5cbi8qKlxuICogUmV0cmllcyBgcm1gIHVudGlsIGl0IHN1Y2NlZWRzIG9yIHRpbWVzIG91dC5cbiAqIE9ic2lkaWFuIG1heSBob2xkIGZpbGUgbG9ja3MgYnJpZWZseSBhZnRlciBhIHdpbmRvdyBpcyBkZXN0cm95ZWQuXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRpcmVjdG9yeSBpcyByZW1vdmVkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXRyeVJtKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBSTV9SRVRSWV9USU1FT1VUX01TO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgUk1fUkVUUllfREVMQVlfTVMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8vIEZpbmFsIGF0dGVtcHQgXHUyMDE0IGxldCBpdCB0aHJvdy5cbiAgYXdhaXQgcm0ocGF0aCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLHFCQUlPO0FBQ1Asc0JBQW1CO0FBQ25CLHFCQUF1QjtBQUN2Qix1QkFHTztBQUVQLDRCQUdPO0FBRVAsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxzQkFBc0I7QUFRckIsTUFBTSxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9ULFlBQVksTUFBZTtBQUNoQyxTQUFLLE9BQU8sWUFBUSxnQ0FBWSwyQkFBSyx1QkFBTyxHQUFHLGFBQWEsQ0FBQztBQUFBLEVBQy9EO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFhLFVBQXlCO0FBQ3BDLGNBQU0sdUNBQWdCLEtBQUssSUFBSTtBQUMvQixVQUFNLFFBQVEsS0FBSyxJQUFJO0FBQUEsRUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sU0FBUyxPQUFxQztBQUNuRCxlQUFXLENBQUMsVUFBVSxPQUFPLEtBQUssT0FBTyxRQUFRLEtBQUssR0FBRztBQUN2RCxZQUFNLGVBQVcsdUJBQUssS0FBSyxNQUFNLFFBQVE7QUFDekMsVUFBSSxTQUFTLFNBQVMsR0FBRyxHQUFHO0FBQzFCLFlBQUksWUFBWSxJQUFJO0FBQ2xCLGdCQUFNLElBQUksTUFBTSxnQkFBZ0IsUUFBUSwyQkFBMkI7QUFBQSxRQUNyRTtBQUNBLHNDQUFVLFVBQVUsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUFBLE1BQ3pDLE9BQU87QUFDTCwwQ0FBVSwwQkFBUSxRQUFRLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNoRCwwQ0FBYyxVQUFVLE9BQU87QUFBQSxNQUNqQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFhLFdBQTBCO0FBQ3JDLGNBQU0scUNBQWMsS0FBSyxJQUFJO0FBQUEsRUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxPQUFjLE9BQU8sWUFBWSxJQUFtQjtBQUNsRCxXQUFPLEtBQUssUUFBUTtBQUFBLEVBQ3RCO0FBQ0Y7QUFTQSxlQUFlLFFBQVEsTUFBNkI7QUFDbEQsUUFBTSxXQUFXLEtBQUssSUFBSSxJQUFJO0FBQzlCLFNBQU8sS0FBSyxJQUFJLElBQUksVUFBVTtBQUM1QixRQUFJO0FBQ0YsZ0JBQU0sb0JBQUcsTUFBTSxFQUFFLE9BQU8sTUFBTSxXQUFXLEtBQUssQ0FBQztBQUMvQztBQUFBLElBQ0YsUUFBUTtBQUNOLFlBQU0sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM3QixtQkFBVyxTQUFTLGlCQUFpQjtBQUFBLE1BQ3ZDLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUVBLFlBQU0sb0JBQUcsTUFBTSxFQUFFLE9BQU8sTUFBTSxXQUFXLEtBQUssQ0FBQztBQUNqRDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
*
|
|
4
|
+
* Manages temporary vault lifecycle for integration tests.
|
|
3
5
|
*/
|
|
4
|
-
export interface TempVaultParams {
|
|
5
|
-
/**
|
|
6
|
-
* Map of file paths to content. Parent directories are created automatically.
|
|
7
|
-
*
|
|
8
|
-
* To create an empty folder, use a path ending with `/` and an empty string as content.
|
|
9
|
-
*/
|
|
10
|
-
files?: Record<string, string>;
|
|
11
|
-
/**
|
|
12
|
-
* An explicit vault path. If omitted, a temp directory is created.
|
|
13
|
-
*/
|
|
14
|
-
path?: string;
|
|
15
|
-
}
|
|
16
6
|
/**
|
|
17
7
|
* A temporary Obsidian vault for integration tests.
|
|
18
8
|
*
|
|
@@ -25,15 +15,23 @@ export declare class TempVault {
|
|
|
25
15
|
*/
|
|
26
16
|
readonly path: string;
|
|
27
17
|
/**
|
|
28
|
-
* Creates a new temp vault
|
|
18
|
+
* Creates a new temp vault.
|
|
29
19
|
*
|
|
30
|
-
* @param
|
|
20
|
+
* @param path - An explicit vault path. If omitted, a temp directory is created.
|
|
31
21
|
*/
|
|
32
|
-
constructor(
|
|
22
|
+
constructor(path?: string);
|
|
33
23
|
/**
|
|
34
24
|
* Unregisters the vault from Obsidian and deletes the temp directory.
|
|
35
25
|
*/
|
|
36
26
|
dispose(): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Writes files and folders into the vault directory.
|
|
29
|
+
* Parent directories are created automatically.
|
|
30
|
+
* Paths ending with `/` are treated as empty folders (content must be empty string).
|
|
31
|
+
*
|
|
32
|
+
* @param files - Map of file/folder paths to content.
|
|
33
|
+
*/
|
|
34
|
+
populate(files: Record<string, string>): void;
|
|
37
35
|
/**
|
|
38
36
|
* Registers this vault in the running Obsidian instance so the CLI can target it.
|
|
39
37
|
*/
|
package/dist/lib/esm/index.d.mts
CHANGED
|
@@ -6,6 +6,5 @@
|
|
|
6
6
|
export { ContextId } from './context-id.mjs';
|
|
7
7
|
export type { EvalInObsidianParams } from './obsidian-cli.mjs';
|
|
8
8
|
export { evalInObsidian } from './obsidian-cli.mjs';
|
|
9
|
-
export type { TempVaultParams } from './temp-vault.mjs';
|
|
10
9
|
export { TempVault } from './temp-vault.mjs';
|
|
11
10
|
export { registerVault, unregisterVault } from './vault-registry.mjs';
|
package/dist/lib/esm/index.mjs
CHANGED
|
@@ -12,4 +12,4 @@ export {
|
|
|
12
12
|
registerVault,
|
|
13
13
|
unregisterVault
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGludGVncmF0aW9uIHRlc3RpbmcgbW9kdWxlLlxuICovXG5cbmV4cG9ydCB7IENvbnRleHRJZCB9IGZyb20gJy4vY29udGV4dC1pZC5tanMnO1xuZXhwb3J0IHR5cGUgeyBFdmFsSW5PYnNpZGlhblBhcmFtcyB9IGZyb20gJy4vb2JzaWRpYW4tY2xpLm1qcyc7XG5leHBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vb2JzaWRpYW4tY2xpLm1qcyc7XG5leHBvcnQgeyBUZW1wVmF1bHQgfSBmcm9tICcuL3RlbXAtdmF1bHQubWpzJztcbmV4cG9ydCB7XG4gIHJlZ2lzdGVyVmF1bHQsXG4gIHVucmVnaXN0ZXJWYXVsdFxufSBmcm9tICcuL3ZhdWx0LXJlZ2lzdHJ5Lm1qcyc7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFNQSxTQUFTLGlCQUFpQjtBQUUxQixTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGlCQUFpQjtBQUMxQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSzsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -4,17 +4,18 @@
|
|
|
4
4
|
* Contains the global setup and teardown functions for integration tests.
|
|
5
5
|
*/
|
|
6
6
|
import type { TestProject } from 'vitest/node';
|
|
7
|
+
import { TempVault } from './temp-vault.mjs';
|
|
7
8
|
declare module 'vitest' {
|
|
8
9
|
interface ProvidedContext {
|
|
9
|
-
|
|
10
|
+
tempVault: TempVault;
|
|
10
11
|
}
|
|
11
12
|
}
|
|
12
13
|
/**
|
|
13
|
-
* Returns the temporary vault
|
|
14
|
+
* Returns the temporary vault provided by the global setup.
|
|
14
15
|
*
|
|
15
|
-
* @returns The
|
|
16
|
+
* @returns The temporary vault.
|
|
16
17
|
*/
|
|
17
|
-
export declare function
|
|
18
|
+
export declare function getTempVault(): TempVault;
|
|
18
19
|
/**
|
|
19
20
|
* Vitest global setup function.
|
|
20
21
|
*
|
|
@@ -2,18 +2,16 @@ import { existsSync } from "node:fs";
|
|
|
2
2
|
import {
|
|
3
3
|
cp,
|
|
4
4
|
mkdir,
|
|
5
|
-
mkdtemp,
|
|
6
5
|
readFile,
|
|
7
|
-
rm,
|
|
8
6
|
stat,
|
|
9
7
|
writeFile
|
|
10
8
|
} from "node:fs/promises";
|
|
11
|
-
import { tmpdir } from "node:os";
|
|
12
9
|
import { join } from "node:path";
|
|
13
10
|
import { inject } from "vitest";
|
|
14
11
|
import { evalInObsidian } from "./obsidian-cli.mjs";
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
import { TempVault } from "./temp-vault.mjs";
|
|
13
|
+
function getTempVault() {
|
|
14
|
+
return inject("tempVault");
|
|
17
15
|
}
|
|
18
16
|
const DIST_DEV = "dist/dev";
|
|
19
17
|
const DIST_BUILD = "dist/build";
|
|
@@ -21,7 +19,7 @@ const MAIN_JS = "main.js";
|
|
|
21
19
|
const OBSIDIAN_CONFIG_DIR = ".obsidian";
|
|
22
20
|
const PLUGINS_DIR = "plugins";
|
|
23
21
|
const COMMUNITY_PLUGINS_JSON = "community-plugins.json";
|
|
24
|
-
let
|
|
22
|
+
let tempVault;
|
|
25
23
|
async function setup(project) {
|
|
26
24
|
const projectRoot = findProjectRoot();
|
|
27
25
|
const distPath = await resolveDistPath(projectRoot);
|
|
@@ -30,11 +28,12 @@ async function setup(project) {
|
|
|
30
28
|
const mainJs = join(distPath, MAIN_JS);
|
|
31
29
|
const buildStat = await stat(mainJs);
|
|
32
30
|
console.warn(`Using ${distPath} (${buildStat.mtime.toISOString()}). If outdated, rebuild.`);
|
|
33
|
-
|
|
34
|
-
const pluginDir = join(
|
|
31
|
+
tempVault = new TempVault();
|
|
32
|
+
const pluginDir = join(tempVault.path, OBSIDIAN_CONFIG_DIR, PLUGINS_DIR, pluginId);
|
|
35
33
|
await mkdir(pluginDir, { recursive: true });
|
|
36
34
|
await cp(distPath, pluginDir, { recursive: true });
|
|
37
|
-
await writeFile(join(
|
|
35
|
+
await writeFile(join(tempVault.path, OBSIDIAN_CONFIG_DIR, COMMUNITY_PLUGINS_JSON), JSON.stringify([pluginId]));
|
|
36
|
+
await tempVault.register();
|
|
38
37
|
await evalInObsidian({
|
|
39
38
|
args: { pluginId },
|
|
40
39
|
// eslint-disable-next-line no-shadow -- No actual shadowing as the function is executed externally.
|
|
@@ -42,12 +41,12 @@ async function setup(project) {
|
|
|
42
41
|
await app.plugins.enablePluginAndSave(pluginId2);
|
|
43
42
|
},
|
|
44
43
|
shouldSkipPreflightChecks: true,
|
|
45
|
-
vaultPath:
|
|
44
|
+
vaultPath: tempVault.path
|
|
46
45
|
});
|
|
47
|
-
project.provide("
|
|
46
|
+
project.provide("tempVault", tempVault);
|
|
48
47
|
}
|
|
49
48
|
async function teardown() {
|
|
50
|
-
await
|
|
49
|
+
await tempVault.dispose();
|
|
51
50
|
}
|
|
52
51
|
function findProjectRoot() {
|
|
53
52
|
let dir = process.cwd();
|
|
@@ -81,8 +80,8 @@ async function resolveDistPath(projectRoot) {
|
|
|
81
80
|
throw new Error("No build found. Run `npm run build` or `npm run dev` first.");
|
|
82
81
|
}
|
|
83
82
|
export {
|
|
84
|
-
|
|
83
|
+
getTempVault,
|
|
85
84
|
setup,
|
|
86
85
|
teardown
|
|
87
86
|
};
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uLWdsb2JhbC1zZXR1cC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBDb250YWlucyB0aGUgZ2xvYmFsIHNldHVwIGFuZCB0ZWFyZG93biBmdW5jdGlvbnMgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk1hbmlmZXN0IH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUZXN0UHJvamVjdCB9IGZyb20gJ3ZpdGVzdC9ub2RlJztcblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIG1rZGlyLFxuICByZWFkRmlsZSxcbiAgc3RhdCxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vb2JzaWRpYW4tY2xpLm1qcyc7XG5pbXBvcnQgeyBUZW1wVmF1bHQgfSBmcm9tICcuL3RlbXAtdmF1bHQubWpzJztcblxuZGVjbGFyZSBtb2R1bGUgJ3ZpdGVzdCcge1xuICBpbnRlcmZhY2UgUHJvdmlkZWRDb250ZXh0IHtcbiAgICB0ZW1wVmF1bHQ6IFRlbXBWYXVsdDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHRlbXBvcmFyeSB2YXVsdCBwcm92aWRlZCBieSB0aGUgZ2xvYmFsIHNldHVwLlxuICpcbiAqIEByZXR1cm5zIFRoZSB0ZW1wb3JhcnkgdmF1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW1wVmF1bHQoKTogVGVtcFZhdWx0IHtcbiAgcmV0dXJuIGluamVjdCgndGVtcFZhdWx0Jyk7XG59XG5cbmNvbnN0IERJU1RfREVWID0gJ2Rpc3QvZGV2JztcbmNvbnN0IERJU1RfQlVJTEQgPSAnZGlzdC9idWlsZCc7XG5jb25zdCBNQUlOX0pTID0gJ21haW4uanMnO1xuY29uc3QgT0JTSURJQU5fQ09ORklHX0RJUiA9ICcub2JzaWRpYW4nO1xuY29uc3QgUExVR0lOU19ESVIgPSAncGx1Z2lucyc7XG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19KU09OID0gJ2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuXG5sZXQgdGVtcFZhdWx0OiBUZW1wVmF1bHQ7XG5cbi8qKlxuICogVml0ZXN0IGdsb2JhbCBzZXR1cCBmdW5jdGlvbi5cbiAqXG4gKiBDb3BpZXMgdGhlIGJ1aWx0IHBsdWdpbiBpbnRvIGEgdGVtcG9yYXJ5IHZhdWx0LCBlbmFibGVzIGl0IHZpYSB0aGUgT2JzaWRpYW4gQ0xJLFxuICogYW5kIHByb3ZpZGVzIGB0ZW1wVmF1bHRQYXRoYCB0byB0ZXN0cy5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdCAtIFRoZSBWaXRlc3QgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwKHByb2plY3Q6IFRlc3RQcm9qZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb2plY3RSb290ID0gZmluZFByb2plY3RSb290KCk7XG4gIGNvbnN0IGRpc3RQYXRoID0gYXdhaXQgcmVzb2x2ZURpc3RQYXRoKHByb2plY3RSb290KTtcbiAgY29uc3QgbWFuaWZlc3RKc29uID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShqb2luKGRpc3RQYXRoLCAnbWFuaWZlc3QuanNvbicpLCAndXRmLTgnKSkgYXMgUGx1Z2luTWFuaWZlc3Q7XG4gIGNvbnN0IHBsdWdpbklkID0gbWFuaWZlc3RKc29uLmlkO1xuXG4gIGNvbnN0IG1haW5KcyA9IGpvaW4oZGlzdFBhdGgsIE1BSU5fSlMpO1xuICBjb25zdCBidWlsZFN0YXQgPSBhd2FpdCBzdGF0KG1haW5Kcyk7XG5cbiAgY29uc29sZS53YXJuKGBVc2luZyAke2Rpc3RQYXRofSAoJHtidWlsZFN0YXQubXRpbWUudG9JU09TdHJpbmcoKX0pLiBJZiBvdXRkYXRlZCwgcmVidWlsZC5gKTtcblxuICB0ZW1wVmF1bHQgPSBuZXcgVGVtcFZhdWx0KCk7XG4gIGNvbnN0IHBsdWdpbkRpciA9IGpvaW4odGVtcFZhdWx0LnBhdGgsIE9CU0lESUFOX0NPTkZJR19ESVIsIFBMVUdJTlNfRElSLCBwbHVnaW5JZCk7XG4gIGF3YWl0IG1rZGlyKHBsdWdpbkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IGNwKGRpc3RQYXRoLCBwbHVnaW5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB3cml0ZUZpbGUoam9pbih0ZW1wVmF1bHQucGF0aCwgT0JTSURJQU5fQ09ORklHX0RJUiwgQ09NTVVOSVRZX1BMVUdJTlNfSlNPTiksIEpTT04uc3RyaW5naWZ5KFtwbHVnaW5JZF0pKTtcbiAgYXdhaXQgdGVtcFZhdWx0LnJlZ2lzdGVyKCk7XG5cbiAgYXdhaXQgZXZhbEluT2JzaWRpYW4oe1xuICAgIGFyZ3M6IHsgcGx1Z2luSWQgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93IC0tIE5vIGFjdHVhbCBzaGFkb3dpbmcgYXMgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGV4dGVybmFsbHkuXG4gICAgZm46IGFzeW5jICh7IGFwcCwgcGx1Z2luSWQgfSkgPT4ge1xuICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG4gICAgfSxcbiAgICBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzOiB0cnVlLFxuICAgIHZhdWx0UGF0aDogdGVtcFZhdWx0LnBhdGhcbiAgfSk7XG5cbiAgcHJvamVjdC5wcm92aWRlKCd0ZW1wVmF1bHQnLCB0ZW1wVmF1bHQpO1xufVxuXG4vKipcbiAqIFZpdGVzdCBnbG9iYWwgdGVhcmRvd24gZnVuY3Rpb24uXG4gKlxuICogUmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IHZhdWx0IGNyZWF0ZWQgZHVyaW5nIHNldHVwLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVhcmRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHRlbXBWYXVsdC5kaXNwb3NlKCk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIHByb2plY3Qgcm9vdCBieSB3YWxraW5nIHVwIGZyb20gYHByb2Nlc3MuY3dkKClgIGxvb2tpbmcgZm9yIGBwYWNrYWdlLmpzb25gLlxuICpcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbmZ1bmN0aW9uIGZpbmRQcm9qZWN0Um9vdCgpOiBzdHJpbmcge1xuICBsZXQgZGlyID0gcHJvY2Vzcy5jd2QoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBMb29wIHRlcm1pbmF0ZXMgYXQgZmlsZXN5c3RlbSByb290LlxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChleGlzdHNTeW5jKGpvaW4oZGlyLCAncGFja2FnZS5qc29uJykpKSB7XG4gICAgICByZXR1cm4gZGlyO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBqb2luKGRpciwgJy4uJyk7XG4gICAgaWYgKHBhcmVudCA9PT0gZGlyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHByb2plY3Qgcm9vdCAobm8gcGFja2FnZS5qc29uIGZvdW5kKS4nKTtcbiAgICB9XG4gICAgZGlyID0gcGFyZW50O1xuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGRpc3QgcGF0aCB0byB1c2UgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICpcbiAqIFBpY2tzIHdoaWNoZXZlciBvZiBgZGlzdC9kZXZgIGFuZCBgZGlzdC9idWlsZGAgaGFzIGEgbmV3ZXIgYG1haW4uanNgLlxuICogSWYgb25seSBvbmUgZXhpc3RzLCB0aGF0IG9uZSBpcyB1c2VkLiBUaHJvd3MgaWYgbmVpdGhlciBleGlzdHMuXG4gKlxuICogQHBhcmFtIHByb2plY3RSb290IC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3Qgcm9vdC5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjaG9zZW4gZGlzdCBmb2xkZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVEaXN0UGF0aChwcm9qZWN0Um9vdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGV2UGF0aCA9IGpvaW4ocHJvamVjdFJvb3QsIERJU1RfREVWKTtcbiAgY29uc3QgYnVpbGRQYXRoID0gam9pbihwcm9qZWN0Um9vdCwgRElTVF9CVUlMRCk7XG4gIGNvbnN0IGRldk1haW5KcyA9IGpvaW4oZGV2UGF0aCwgTUFJTl9KUyk7XG4gIGNvbnN0IGJ1aWxkTWFpbkpzID0gam9pbihidWlsZFBhdGgsIE1BSU5fSlMpO1xuICBjb25zdCBkZXZTdGF0ID0gZXhpc3RzU3luYyhkZXZNYWluSnMpID8gYXdhaXQgc3RhdChkZXZNYWluSnMpIDogbnVsbDtcbiAgY29uc3QgYnVpbGRTdGF0ID0gZXhpc3RzU3luYyhidWlsZE1haW5KcykgPyBhd2FpdCBzdGF0KGJ1aWxkTWFpbkpzKSA6IG51bGw7XG5cbiAgaWYgKGRldlN0YXQgJiYgYnVpbGRTdGF0KSB7XG4gICAgcmV0dXJuIGRldlN0YXQubXRpbWUgPiBidWlsZFN0YXQubXRpbWUgPyBkZXZQYXRoIDogYnVpbGRQYXRoO1xuICB9XG5cbiAgaWYgKGRldlN0YXQpIHtcbiAgICByZXR1cm4gZGV2UGF0aDtcbiAgfVxuXG4gIGlmIChidWlsZFN0YXQpIHtcbiAgICByZXR1cm4gYnVpbGRQYXRoO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBidWlsZCBmb3VuZC4gUnVuIGBucG0gcnVuIGJ1aWxkYCBvciBgbnBtIHJ1biBkZXZgIGZpcnN0LicpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBV0EsU0FBUyxrQkFBa0I7QUFDM0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFlBQVk7QUFDckIsU0FBUyxjQUFjO0FBRXZCLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsaUJBQWlCO0FBYW5CLFNBQVMsZUFBMEI7QUFDeEMsU0FBTyxPQUFPLFdBQVc7QUFDM0I7QUFFQSxNQUFNLFdBQVc7QUFDakIsTUFBTSxhQUFhO0FBQ25CLE1BQU0sVUFBVTtBQUNoQixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLGNBQWM7QUFDcEIsTUFBTSx5QkFBeUI7QUFFL0IsSUFBSTtBQVVKLGVBQXNCLE1BQU0sU0FBcUM7QUFDL0QsUUFBTSxjQUFjLGdCQUFnQjtBQUNwQyxRQUFNLFdBQVcsTUFBTSxnQkFBZ0IsV0FBVztBQUNsRCxRQUFNLGVBQWUsS0FBSyxNQUFNLE1BQU0sU0FBUyxLQUFLLFVBQVUsZUFBZSxHQUFHLE9BQU8sQ0FBQztBQUN4RixRQUFNLFdBQVcsYUFBYTtBQUU5QixRQUFNLFNBQVMsS0FBSyxVQUFVLE9BQU87QUFDckMsUUFBTSxZQUFZLE1BQU0sS0FBSyxNQUFNO0FBRW5DLFVBQVEsS0FBSyxTQUFTLFFBQVEsS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFDLDBCQUEwQjtBQUUxRixjQUFZLElBQUksVUFBVTtBQUMxQixRQUFNLFlBQVksS0FBSyxVQUFVLE1BQU0scUJBQXFCLGFBQWEsUUFBUTtBQUNqRixRQUFNLE1BQU0sV0FBVyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQzFDLFFBQU0sR0FBRyxVQUFVLFdBQVcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNqRCxRQUFNLFVBQVUsS0FBSyxVQUFVLE1BQU0scUJBQXFCLHNCQUFzQixHQUFHLEtBQUssVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdHLFFBQU0sVUFBVSxTQUFTO0FBRXpCLFFBQU0sZUFBZTtBQUFBLElBQ25CLE1BQU0sRUFBRSxTQUFTO0FBQUE7QUFBQSxJQUVqQixJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQUFBLFVBQVMsTUFBTTtBQUMvQixZQUFNLElBQUksUUFBUSxvQkFBb0JBLFNBQVE7QUFBQSxJQUNoRDtBQUFBLElBQ0EsMkJBQTJCO0FBQUEsSUFDM0IsV0FBVyxVQUFVO0FBQUEsRUFDdkIsQ0FBQztBQUVELFVBQVEsUUFBUSxhQUFhLFNBQVM7QUFDeEM7QUFPQSxlQUFzQixXQUEwQjtBQUM5QyxRQUFNLFVBQVUsUUFBUTtBQUMxQjtBQU9BLFNBQVMsa0JBQTBCO0FBQ2pDLE1BQUksTUFBTSxRQUFRLElBQUk7QUFHdEIsU0FBTyxNQUFNO0FBQ1gsUUFBSSxXQUFXLEtBQUssS0FBSyxjQUFjLENBQUMsR0FBRztBQUN6QyxhQUFPO0FBQUEsSUFDVDtBQUNBLFVBQU0sU0FBUyxLQUFLLEtBQUssSUFBSTtBQUM3QixRQUFJLFdBQVcsS0FBSztBQUNsQixZQUFNLElBQUksTUFBTSxzREFBc0Q7QUFBQSxJQUN4RTtBQUNBLFVBQU07QUFBQSxFQUNSO0FBQ0Y7QUFXQSxlQUFlLGdCQUFnQixhQUFzQztBQUNuRSxRQUFNLFVBQVUsS0FBSyxhQUFhLFFBQVE7QUFDMUMsUUFBTSxZQUFZLEtBQUssYUFBYSxVQUFVO0FBQzlDLFFBQU0sWUFBWSxLQUFLLFNBQVMsT0FBTztBQUN2QyxRQUFNLGNBQWMsS0FBSyxXQUFXLE9BQU87QUFDM0MsUUFBTSxVQUFVLFdBQVcsU0FBUyxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUk7QUFDaEUsUUFBTSxZQUFZLFdBQVcsV0FBVyxJQUFJLE1BQU0sS0FBSyxXQUFXLElBQUk7QUFFdEUsTUFBSSxXQUFXLFdBQVc7QUFDeEIsV0FBTyxRQUFRLFFBQVEsVUFBVSxRQUFRLFVBQVU7QUFBQSxFQUNyRDtBQUVBLE1BQUksU0FBUztBQUNYLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxXQUFXO0FBQ2IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLElBQUksTUFBTSw2REFBNkQ7QUFDL0U7IiwKICAibmFtZXMiOiBbInBsdWdpbklkIl0KfQo=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
*
|
|
4
|
+
* No-op functions.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* No-op function.
|
|
8
|
+
*/
|
|
9
|
+
export declare function noop(): void;
|
|
10
|
+
/**
|
|
11
|
+
* No-op async function.
|
|
12
|
+
*
|
|
13
|
+
* @returns A promise that resolves when the function is complete.
|
|
14
|
+
*/
|
|
15
|
+
export declare function noopAsync(): Promise<void>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
function noop() {
|
|
2
|
+
}
|
|
3
|
+
async function noopAsync() {
|
|
4
|
+
}
|
|
5
|
+
export {
|
|
6
|
+
noop,
|
|
7
|
+
noopAsync
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25vb3AudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogTm8tb3AgZnVuY3Rpb25zLlxuICovXG5cbi8qKlxuICogTm8tb3AgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAvLyBOby1vcFxufVxuXG4vKipcbiAqIE5vLW9wIGFzeW5jIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbm9vcEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBOby1vcFxufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBU08sU0FBUyxPQUFhO0FBRTdCO0FBT0EsZUFBc0IsWUFBMkI7QUFFakQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
*
|
|
4
|
+
* Manages temporary vault lifecycle for integration tests.
|
|
3
5
|
*/
|
|
4
|
-
export interface TempVaultParams {
|
|
5
|
-
/**
|
|
6
|
-
* Map of file paths to content. Parent directories are created automatically.
|
|
7
|
-
*
|
|
8
|
-
* To create an empty folder, use a path ending with `/` and an empty string as content.
|
|
9
|
-
*/
|
|
10
|
-
files?: Record<string, string>;
|
|
11
|
-
/**
|
|
12
|
-
* An explicit vault path. If omitted, a temp directory is created.
|
|
13
|
-
*/
|
|
14
|
-
path?: string;
|
|
15
|
-
}
|
|
16
6
|
/**
|
|
17
7
|
* A temporary Obsidian vault for integration tests.
|
|
18
8
|
*
|
|
@@ -25,15 +15,23 @@ export declare class TempVault {
|
|
|
25
15
|
*/
|
|
26
16
|
readonly path: string;
|
|
27
17
|
/**
|
|
28
|
-
* Creates a new temp vault
|
|
18
|
+
* Creates a new temp vault.
|
|
29
19
|
*
|
|
30
|
-
* @param
|
|
20
|
+
* @param path - An explicit vault path. If omitted, a temp directory is created.
|
|
31
21
|
*/
|
|
32
|
-
constructor(
|
|
22
|
+
constructor(path?: string);
|
|
33
23
|
/**
|
|
34
24
|
* Unregisters the vault from Obsidian and deletes the temp directory.
|
|
35
25
|
*/
|
|
36
26
|
dispose(): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Writes files and folders into the vault directory.
|
|
29
|
+
* Parent directories are created automatically.
|
|
30
|
+
* Paths ending with `/` are treated as empty folders (content must be empty string).
|
|
31
|
+
*
|
|
32
|
+
* @param files - Map of file/folder paths to content.
|
|
33
|
+
*/
|
|
34
|
+
populate(files: Record<string, string>): void;
|
|
37
35
|
/**
|
|
38
36
|
* Registers this vault in the running Obsidian instance so the CLI can target it.
|
|
39
37
|
*/
|
|
@@ -21,13 +21,29 @@ class TempVault {
|
|
|
21
21
|
*/
|
|
22
22
|
path;
|
|
23
23
|
/**
|
|
24
|
-
* Creates a new temp vault
|
|
24
|
+
* Creates a new temp vault.
|
|
25
25
|
*
|
|
26
|
-
* @param
|
|
26
|
+
* @param path - An explicit vault path. If omitted, a temp directory is created.
|
|
27
27
|
*/
|
|
28
|
-
constructor(
|
|
29
|
-
this.path =
|
|
30
|
-
|
|
28
|
+
constructor(path) {
|
|
29
|
+
this.path = path ?? mkdtempSync(join(tmpdir(), "temp-vault-"));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Unregisters the vault from Obsidian and deletes the temp directory.
|
|
33
|
+
*/
|
|
34
|
+
async dispose() {
|
|
35
|
+
await unregisterVault(this.path);
|
|
36
|
+
await retryRm(this.path);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Writes files and folders into the vault directory.
|
|
40
|
+
* Parent directories are created automatically.
|
|
41
|
+
* Paths ending with `/` are treated as empty folders (content must be empty string).
|
|
42
|
+
*
|
|
43
|
+
* @param files - Map of file/folder paths to content.
|
|
44
|
+
*/
|
|
45
|
+
populate(files) {
|
|
46
|
+
for (const [filePath, content] of Object.entries(files)) {
|
|
31
47
|
const fullPath = join(this.path, filePath);
|
|
32
48
|
if (filePath.endsWith("/")) {
|
|
33
49
|
if (content !== "") {
|
|
@@ -40,13 +56,6 @@ class TempVault {
|
|
|
40
56
|
}
|
|
41
57
|
}
|
|
42
58
|
}
|
|
43
|
-
/**
|
|
44
|
-
* Unregisters the vault from Obsidian and deletes the temp directory.
|
|
45
|
-
*/
|
|
46
|
-
async dispose() {
|
|
47
|
-
await unregisterVault(this.path);
|
|
48
|
-
await retryRm(this.path);
|
|
49
|
-
}
|
|
50
59
|
/**
|
|
51
60
|
* Registers this vault in the running Obsidian instance so the CLI can target it.
|
|
52
61
|
*/
|
|
@@ -79,4 +88,4 @@ async function retryRm(path) {
|
|
|
79
88
|
export {
|
|
80
89
|
TempVault
|
|
81
90
|
};
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RlbXAtdmF1bHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogTWFuYWdlcyB0ZW1wb3JhcnkgdmF1bHQgbGlmZWN5Y2xlIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqL1xuXG5pbXBvcnQge1xuICBta2RpclN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgcm0gfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pblxufSBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQge1xuICByZWdpc3RlclZhdWx0LFxuICB1bnJlZ2lzdGVyVmF1bHRcbn0gZnJvbSAnLi92YXVsdC1yZWdpc3RyeS5tanMnO1xuXG5jb25zdCBSTV9SRVRSWV9ERUxBWV9NUyA9IDUwMDtcbmNvbnN0IFJNX1JFVFJZX1RJTUVPVVRfTVMgPSAxMDAwMDtcblxuLyoqXG4gKiBBIHRlbXBvcmFyeSBPYnNpZGlhbiB2YXVsdCBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKlxuICogQ3JlYXRlcyBhIHRlbXAgZGlyZWN0b3J5IGFuZCByZWdpc3RlcnMgaXQgaW4gdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2VcbiAqIHNvIHRoYXQgdGhlIE9ic2lkaWFuIENMSSBjYW4gdGFyZ2V0IGl0IHZpYSBgY3dkYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBWYXVsdCB7XG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdGVtcG9yYXJ5IHZhdWx0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB0ZW1wIHZhdWx0LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIEFuIGV4cGxpY2l0IHZhdWx0IHBhdGguIElmIG9taXR0ZWQsIGEgdGVtcCBkaXJlY3RvcnkgaXMgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXRoPzogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXRoID0gcGF0aCA/PyBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCAndGVtcC12YXVsdC0nKSk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgdGhlIHZhdWx0IGZyb20gT2JzaWRpYW4gYW5kIGRlbGV0ZXMgdGhlIHRlbXAgZGlyZWN0b3J5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdW5yZWdpc3RlclZhdWx0KHRoaXMucGF0aCk7XG4gICAgYXdhaXQgcmV0cnlSbSh0aGlzLnBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlcyBmaWxlcyBhbmQgZm9sZGVycyBpbnRvIHRoZSB2YXVsdCBkaXJlY3RvcnkuXG4gICAqIFBhcmVudCBkaXJlY3RvcmllcyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgKiBQYXRocyBlbmRpbmcgd2l0aCBgL2AgYXJlIHRyZWF0ZWQgYXMgZW1wdHkgZm9sZGVycyAoY29udGVudCBtdXN0IGJlIGVtcHR5IHN0cmluZykuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlcyAtIE1hcCBvZiBmaWxlL2ZvbGRlciBwYXRocyB0byBjb250ZW50LlxuICAgKi9cbiAgcHVibGljIHBvcHVsYXRlKGZpbGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVzKSkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKHRoaXMucGF0aCwgZmlsZVBhdGgpO1xuICAgICAgaWYgKGZpbGVQYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgaWYgKGNvbnRlbnQgIT09ICcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb2xkZXIgcGF0aCBcIiR7ZmlsZVBhdGh9XCIgbXVzdCBoYXZlIGVtcHR5IGNvbnRlbnRgKTtcbiAgICAgICAgfVxuICAgICAgICBta2RpclN5bmMoZnVsbFBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWtkaXJTeW5jKGRpcm5hbWUoZnVsbFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgd3JpdGVGaWxlU3luYyhmdWxsUGF0aCwgY29udGVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGlzIHZhdWx0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHNvIHRoZSBDTEkgY2FuIHRhcmdldCBpdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWdpc3RlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCByZWdpc3RlclZhdWx0KHRoaXMucGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmMgZGlzcG9zYWJsZSBzdXBwb3J0IGZvciBgYXdhaXQgdXNpbmdgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB2YXVsdCBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcG9zZSgpO1xuICB9XG59XG5cbi8qKlxuICogUmV0cmllcyBgcm1gIHVudGlsIGl0IHN1Y2NlZWRzIG9yIHRpbWVzIG91dC5cbiAqIE9ic2lkaWFuIG1heSBob2xkIGZpbGUgbG9ja3MgYnJpZWZseSBhZnRlciBhIHdpbmRvdyBpcyBkZXN0cm95ZWQuXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRpcmVjdG9yeSBpcyByZW1vdmVkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXRyeVJtKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBSTV9SRVRSWV9USU1FT1VUX01TO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgUk1fUkVUUllfREVMQVlfTVMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8vIEZpbmFsIGF0dGVtcHQgXHUyMDE0IGxldCBpdCB0aHJvdy5cbiAgYXdhaXQgcm0ocGF0aCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBTUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxVQUFVO0FBQ25CLFNBQVMsY0FBYztBQUN2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxzQkFBc0I7QUFRckIsTUFBTSxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9ULFlBQVksTUFBZTtBQUNoQyxTQUFLLE9BQU8sUUFBUSxZQUFZLEtBQUssT0FBTyxHQUFHLGFBQWEsQ0FBQztBQUFBLEVBQy9EO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFhLFVBQXlCO0FBQ3BDLFVBQU0sZ0JBQWdCLEtBQUssSUFBSTtBQUMvQixVQUFNLFFBQVEsS0FBSyxJQUFJO0FBQUEsRUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sU0FBUyxPQUFxQztBQUNuRCxlQUFXLENBQUMsVUFBVSxPQUFPLEtBQUssT0FBTyxRQUFRLEtBQUssR0FBRztBQUN2RCxZQUFNLFdBQVcsS0FBSyxLQUFLLE1BQU0sUUFBUTtBQUN6QyxVQUFJLFNBQVMsU0FBUyxHQUFHLEdBQUc7QUFDMUIsWUFBSSxZQUFZLElBQUk7QUFDbEIsZ0JBQU0sSUFBSSxNQUFNLGdCQUFnQixRQUFRLDJCQUEyQjtBQUFBLFFBQ3JFO0FBQ0Esa0JBQVUsVUFBVSxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQUEsTUFDekMsT0FBTztBQUNMLGtCQUFVLFFBQVEsUUFBUSxHQUFHLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDaEQsc0JBQWMsVUFBVSxPQUFPO0FBQUEsTUFDakM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsTUFBYSxXQUEwQjtBQUNyQyxVQUFNLGNBQWMsS0FBSyxJQUFJO0FBQUEsRUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxPQUFjLE9BQU8sWUFBWSxJQUFtQjtBQUNsRCxXQUFPLEtBQUssUUFBUTtBQUFBLEVBQ3RCO0FBQ0Y7QUFTQSxlQUFlLFFBQVEsTUFBNkI7QUFDbEQsUUFBTSxXQUFXLEtBQUssSUFBSSxJQUFJO0FBQzlCLFNBQU8sS0FBSyxJQUFJLElBQUksVUFBVTtBQUM1QixRQUFJO0FBQ0YsWUFBTSxHQUFHLE1BQU0sRUFBRSxPQUFPLE1BQU0sV0FBVyxLQUFLLENBQUM7QUFDL0M7QUFBQSxJQUNGLFFBQVE7QUFDTixZQUFNLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDN0IsbUJBQVcsU0FBUyxpQkFBaUI7QUFBQSxNQUN2QyxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFFQSxRQUFNLEdBQUcsTUFBTSxFQUFFLE9BQU8sTUFBTSxXQUFXLEtBQUssQ0FBQztBQUNqRDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "obsidian-integration-testing",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Simplifies integration testing of Obsidian plugins.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"obsidian",
|
|
@@ -49,9 +49,7 @@
|
|
|
49
49
|
"**/package.json",
|
|
50
50
|
"dist/",
|
|
51
51
|
"LICENSE",
|
|
52
|
-
"
|
|
53
|
-
"README.md",
|
|
54
|
-
"scripts/postinstall.mjs"
|
|
52
|
+
"README.md"
|
|
55
53
|
],
|
|
56
54
|
"scripts": {
|
|
57
55
|
"build": "jiti scripts/build.ts",
|
|
@@ -67,7 +65,6 @@
|
|
|
67
65
|
"lint:fix": "jiti scripts/lint-fix.ts",
|
|
68
66
|
"lint:md": "jiti scripts/lint-md.ts",
|
|
69
67
|
"lint:md:fix": "jiti scripts/lint-md-fix.ts",
|
|
70
|
-
"postinstall": "node scripts/postinstall.mjs",
|
|
71
68
|
"prepare": "jiti scripts/prepare.ts",
|
|
72
69
|
"spellcheck": "jiti scripts/spellcheck.ts",
|
|
73
70
|
"test": "jiti scripts/test.ts",
|
|
@@ -113,7 +110,6 @@
|
|
|
113
110
|
"nano-staged": "latest",
|
|
114
111
|
"obsidian": "latest",
|
|
115
112
|
"obsidian-typings": "obsidian-public-latest",
|
|
116
|
-
"patch-package": "latest",
|
|
117
113
|
"semver": "latest",
|
|
118
114
|
"type-fest": "latest",
|
|
119
115
|
"typescript": "latest",
|
|
Binary file
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
diff --git a/node_modules/@vitest/runner/dist/tasks.d-D2GKpdwQ.d.ts b/node_modules/@vitest/runner/dist/tasks.d-D2GKpdwQ.d.ts
|
|
2
|
-
index 2989304..00afc9c 100644
|
|
3
|
-
--- a/node_modules/@vitest/runner/dist/tasks.d-D2GKpdwQ.d.ts
|
|
4
|
-
+++ b/node_modules/@vitest/runner/dist/tasks.d-D2GKpdwQ.d.ts
|
|
5
|
-
@@ -1330,7 +1330,7 @@ interface TestAttachment {
|
|
6
|
-
/** File system path to the attachment */
|
|
7
|
-
path?: string;
|
|
8
|
-
/** Inline attachment content as a string or raw binary data */
|
|
9
|
-
- body?: string | Uint8Array;
|
|
10
|
-
+ body?: string | Uint8Array | undefined;
|
|
11
|
-
}
|
|
12
|
-
interface Location {
|
|
13
|
-
/** Line number in the source file (1-indexed) */
|
|
14
|
-
@@ -1365,7 +1365,7 @@ interface TestArtifactBase {
|
|
15
|
-
/** File or data attachments associated with this artifact */
|
|
16
|
-
attachments?: TestAttachment[];
|
|
17
|
-
/** Source location where this artifact was created */
|
|
18
|
-
- location?: TestArtifactLocation;
|
|
19
|
-
+ location?: TestArtifactLocation | undefined;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* @deprecated Use {@linkcode TestArtifactLocation} instead.
|
package/scripts/postinstall.mjs
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { spawnSync } from 'node:child_process';
|
|
2
|
-
import {
|
|
3
|
-
join,
|
|
4
|
-
relative
|
|
5
|
-
} from 'node:path/posix';
|
|
6
|
-
import {
|
|
7
|
-
cwd,
|
|
8
|
-
env
|
|
9
|
-
} from 'node:process';
|
|
10
|
-
|
|
11
|
-
const isGlobalInstall = env.npm_config_global === 'true';
|
|
12
|
-
|
|
13
|
-
if (isGlobalInstall) {
|
|
14
|
-
console.log('Global install detected, skipping patch-package...');
|
|
15
|
-
process.exit(0);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
let pkgDir = cwd().replace(/\\/g, '/');
|
|
19
|
-
const patchDir = join(pkgDir, 'patches');
|
|
20
|
-
const relativePath = '/node_modules/obsidian-test-mocks';
|
|
21
|
-
if (pkgDir.endsWith(relativePath)) {
|
|
22
|
-
pkgDir = pkgDir.slice(0, -relativePath.length);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
spawnSync(`npx patch-package --patch-dir "${relative(pkgDir, patchDir)}"`, {
|
|
26
|
-
shell: true,
|
|
27
|
-
stdio: 'inherit',
|
|
28
|
-
cwd: pkgDir
|
|
29
|
-
});
|