@mnaoumov/obsidian-dev-toolkit 2.1.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/bin/archive-demo-vault.mjs +8 -0
- package/bin/generate-coverage-badge.mjs +8 -0
- package/bundlers/esbuild-impl/feature-options/package.json +6 -0
- package/bundlers/obsidian-cli-reload/package.json +6 -0
- package/bundlers/obsidian-plugin-build/package.json +6 -0
- package/bundlers/obsidian-plugin-features/package.json +6 -0
- package/bundlers/obsidian-plugin-transforms/package.json +6 -0
- package/bundlers/obsidian-plugin-webpack-loader/package.json +6 -0
- package/bundlers/obsidian-plugins-folder-deployment/package.json +6 -0
- package/bundlers/parcel/package.json +6 -0
- package/bundlers/rollup/package.json +6 -0
- package/bundlers/rollup-compatible/package.json +6 -0
- package/bundlers/rollup-compatible-features/package.json +6 -0
- package/bundlers/vite/package.json +6 -0
- package/bundlers/webpack/package.json +6 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +3 -188
- package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +2 -18
- package/dist/lib/cjs/bundlers/esbuild-impl/feature-options.cjs +173 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/feature-options.d.cts +60 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +4 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +30 -82
- package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +7 -24
- package/dist/lib/cjs/bundlers/index.cjs +39 -3
- package/dist/lib/cjs/bundlers/index.d.cts +12 -0
- package/dist/lib/cjs/bundlers/obsidian-cli-reload.cjs +182 -0
- package/dist/lib/cjs/bundlers/obsidian-cli-reload.d.cts +37 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-build.cjs +278 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-build.d.cts +217 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-features.cjs +242 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-features.d.cts +186 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-transforms.cjs +306 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-transforms.d.cts +231 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-webpack-loader.cjs +182 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-webpack-loader.d.cts +47 -0
- package/dist/lib/cjs/bundlers/obsidian-plugins-folder-deployment.cjs +320 -0
- package/dist/lib/cjs/bundlers/obsidian-plugins-folder-deployment.d.cts +44 -0
- package/dist/lib/cjs/bundlers/parcel.cjs +462 -0
- package/dist/lib/cjs/bundlers/parcel.d.cts +128 -0
- package/dist/lib/cjs/bundlers/rollup-compatible-features.cjs +181 -0
- package/dist/lib/cjs/bundlers/rollup-compatible-features.d.cts +128 -0
- package/dist/lib/cjs/bundlers/rollup-compatible.cjs +138 -0
- package/dist/lib/cjs/bundlers/rollup-compatible.d.cts +84 -0
- package/dist/lib/cjs/bundlers/rollup.cjs +218 -0
- package/dist/lib/cjs/bundlers/rollup.d.cts +99 -0
- package/dist/lib/cjs/bundlers/vite.cjs +229 -0
- package/dist/lib/cjs/bundlers/vite.d.cts +105 -0
- package/dist/lib/cjs/bundlers/webpack.cjs +354 -0
- package/dist/lib/cjs/bundlers/webpack.d.cts +133 -0
- package/dist/lib/cjs/demo-vault-cli.cjs +131 -0
- package/dist/lib/cjs/demo-vault-cli.d.cts +15 -0
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/test-runners/coverage-badge-cli.cjs +160 -0
- package/dist/lib/cjs/test-runners/coverage-badge-cli.d.cts +25 -0
- package/dist/lib/cjs/test-runners/coverage-badge.cjs +279 -0
- package/dist/lib/cjs/test-runners/coverage-badge.d.cts +143 -0
- package/dist/lib/cjs/test-runners/e2e-runner-support.cjs +170 -0
- package/dist/lib/cjs/test-runners/e2e-runner-support.d.cts +36 -0
- package/dist/lib/cjs/test-runners/index.cjs +18 -3
- package/dist/lib/cjs/test-runners/index.d.cts +5 -0
- package/dist/lib/cjs/test-runners/obsidian-test-runner.cjs +147 -0
- package/dist/lib/cjs/test-runners/obsidian-test-runner.d.cts +42 -0
- package/dist/lib/cjs/test-runners/wdio-obsidian.cjs +205 -0
- package/dist/lib/cjs/test-runners/wdio-obsidian.d.cts +199 -0
- package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +2 -18
- package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +3 -192
- package/dist/lib/esm/bundlers/esbuild-impl/feature-options.d.mts +60 -0
- package/dist/lib/esm/bundlers/esbuild-impl/feature-options.mjs +82 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +3 -1
- package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +7 -24
- package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +41 -87
- package/dist/lib/esm/bundlers/index.d.mts +12 -0
- package/dist/lib/esm/bundlers/index.mjs +26 -2
- package/dist/lib/esm/bundlers/obsidian-cli-reload.d.mts +37 -0
- package/dist/lib/esm/bundlers/obsidian-cli-reload.mjs +83 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-build.d.mts +217 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-build.mjs +166 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-features.d.mts +186 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-features.mjs +126 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-transforms.d.mts +231 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-transforms.mjs +194 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-webpack-loader.d.mts +47 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-webpack-loader.mjs +89 -0
- package/dist/lib/esm/bundlers/obsidian-plugins-folder-deployment.d.mts +44 -0
- package/dist/lib/esm/bundlers/obsidian-plugins-folder-deployment.mjs +228 -0
- package/dist/lib/esm/bundlers/parcel.d.mts +128 -0
- package/dist/lib/esm/bundlers/parcel.mjs +361 -0
- package/dist/lib/esm/bundlers/rollup-compatible-features.d.mts +128 -0
- package/dist/lib/esm/bundlers/rollup-compatible-features.mjs +93 -0
- package/dist/lib/esm/bundlers/rollup-compatible.d.mts +84 -0
- package/dist/lib/esm/bundlers/rollup-compatible.mjs +43 -0
- package/dist/lib/esm/bundlers/rollup.d.mts +99 -0
- package/dist/lib/esm/bundlers/rollup.mjs +130 -0
- package/dist/lib/esm/bundlers/vite.d.mts +105 -0
- package/dist/lib/esm/bundlers/vite.mjs +144 -0
- package/dist/lib/esm/bundlers/webpack.d.mts +133 -0
- package/dist/lib/esm/bundlers/webpack.mjs +259 -0
- package/dist/lib/esm/demo-vault-cli.d.mts +15 -0
- package/dist/lib/esm/demo-vault-cli.mjs +23 -0
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/test-runners/coverage-badge-cli.d.mts +25 -0
- package/dist/lib/esm/test-runners/coverage-badge-cli.mjs +51 -0
- package/dist/lib/esm/test-runners/coverage-badge.d.mts +143 -0
- package/dist/lib/esm/test-runners/coverage-badge.mjs +181 -0
- package/dist/lib/esm/test-runners/e2e-runner-support.d.mts +36 -0
- package/dist/lib/esm/test-runners/e2e-runner-support.mjs +61 -0
- package/dist/lib/esm/test-runners/index.d.mts +5 -0
- package/dist/lib/esm/test-runners/index.mjs +12 -2
- package/dist/lib/esm/test-runners/obsidian-test-runner.d.mts +42 -0
- package/dist/lib/esm/test-runners/obsidian-test-runner.mjs +52 -0
- package/dist/lib/esm/test-runners/wdio-obsidian.d.mts +199 -0
- package/dist/lib/esm/test-runners/wdio-obsidian.mjs +110 -0
- package/package.json +102 -4
- package/test-runners/coverage-badge/package.json +6 -0
- package/test-runners/coverage-badge-cli/package.json +6 -0
- package/test-runners/e2e-runner-support/package.json +6 -0
- package/test-runners/obsidian-test-runner/package.json +6 -0
- package/test-runners/wdio-obsidian/package.json +6 -0
- package/tsconfig/preact.json +7 -0
- package/tsconfig/react.json +7 -0
- package/tsconfig/solid.json +7 -0
- package/tsconfig/svelte.json +7 -0
- package/tsconfig/vue.json +7 -0
- package/types/styles.d.ts +32 -0
- package/types/wasm.d.ts +11 -0
|
@@ -3,12 +3,22 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import * as coverage_badge_cli from "./coverage-badge-cli.mjs";
|
|
7
|
+
import * as coverage_badge from "./coverage-badge.mjs";
|
|
8
|
+
import * as e2e_runner_support from "./e2e-runner-support.mjs";
|
|
6
9
|
import * as integration_test_plugin from "./integration-test-plugin.mjs";
|
|
10
|
+
import * as obsidian_test_runner from "./obsidian-test-runner.mjs";
|
|
7
11
|
import * as performance_eval_cap from "./performance-eval-cap.mjs";
|
|
8
12
|
import * as vitest_config from "./vitest-config.mjs";
|
|
13
|
+
import * as wdio_obsidian from "./wdio-obsidian.mjs";
|
|
9
14
|
export {
|
|
15
|
+
coverage_badge as "coverage-badge",
|
|
16
|
+
coverage_badge_cli as "coverage-badge-cli",
|
|
17
|
+
e2e_runner_support as "e2e-runner-support",
|
|
10
18
|
integration_test_plugin as "integration-test-plugin",
|
|
19
|
+
obsidian_test_runner as "obsidian-test-runner",
|
|
11
20
|
performance_eval_cap as "performance-eval-cap",
|
|
12
|
-
vitest_config as "vitest-config"
|
|
21
|
+
vitest_config as "vitest-config",
|
|
22
|
+
wdio_obsidian as "wdio-obsidian"
|
|
13
23
|
};
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdjb3ZlcmFnZS1iYWRnZS1jbGknIGZyb20gJy4vY292ZXJhZ2UtYmFkZ2UtY2xpLnRzJztcbmV4cG9ydCAqIGFzICdjb3ZlcmFnZS1iYWRnZScgZnJvbSAnLi9jb3ZlcmFnZS1iYWRnZS50cyc7XG5leHBvcnQgKiBhcyAnZTJlLXJ1bm5lci1zdXBwb3J0JyBmcm9tICcuL2UyZS1ydW5uZXItc3VwcG9ydC50cyc7XG5leHBvcnQgKiBhcyAnaW50ZWdyYXRpb24tdGVzdC1wbHVnaW4nIGZyb20gJy4vaW50ZWdyYXRpb24tdGVzdC1wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ29ic2lkaWFuLXRlc3QtcnVubmVyJyBmcm9tICcuL29ic2lkaWFuLXRlc3QtcnVubmVyLnRzJztcbmV4cG9ydCAqIGFzICdwZXJmb3JtYW5jZS1ldmFsLWNhcCcgZnJvbSAnLi9wZXJmb3JtYW5jZS1ldmFsLWNhcC50cyc7XG5leHBvcnQgKiBhcyAndml0ZXN0LWNvbmZpZycgZnJvbSAnLi92aXRlc3QtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICd3ZGlvLW9ic2lkaWFuJyBmcm9tICcuL3dkaW8tb2JzaWRpYW4udHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFFQSxZQUFZQSx3QkFBMEI7QUFDdEMsWUFBWUMsb0JBQXNCO0FBQ2xDLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyw2QkFBK0I7QUFDM0MsWUFBWUMsMEJBQTRCO0FBQ3hDLFlBQVlDLDBCQUE0QjtBQUN4QyxZQUFZQyxtQkFBcUI7QUFDakMsWUFBWUMsbUJBQXFCOyIsCiAgIm5hbWVzIjogWyJjb3ZlcmFnZS1iYWRnZS1jbGkiLCAiY292ZXJhZ2UtYmFkZ2UiLCAiZTJlLXJ1bm5lci1zdXBwb3J0IiwgImludGVncmF0aW9uLXRlc3QtcGx1Z2luIiwgIm9ic2lkaWFuLXRlc3QtcnVubmVyIiwgInBlcmZvcm1hbmNlLWV2YWwtY2FwIiwgInZpdGVzdC1jb25maWciLCAid2Rpby1vYnNpZGlhbiJdCn0K
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* End-to-end tests with `obsidian-test`: it bundles the plugin together with the test files, installs it into a
|
|
6
|
+
* temporary vault, launches the installed Obsidian and runs the tests inside it with `node:test`.
|
|
7
|
+
*
|
|
8
|
+
* {@link testEndToEndWithObsidianTest} is the `test:e2e` script.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Options for {@link testEndToEndWithObsidianTest}.
|
|
12
|
+
*/
|
|
13
|
+
export interface TestEndToEndWithObsidianTestOptions {
|
|
14
|
+
/**
|
|
15
|
+
* The command that launches Obsidian. Defaults to `obsidian-test`'s own, `obsidian`; point it at the executable
|
|
16
|
+
* when `obsidian` is not on `PATH`.
|
|
17
|
+
*/
|
|
18
|
+
readonly obsidianCommand?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Whether `obsidian-test` may replay its cached results when the plugin, the tests and Obsidian are unchanged.
|
|
21
|
+
* Defaults to `true`; `false` passes `--force`.
|
|
22
|
+
*/
|
|
23
|
+
readonly shouldUseCache?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* The glob of the test files, relative to the project root. Defaults to {@link DEFAULT_END_TO_END_SPECS}.
|
|
26
|
+
* `obsidian-test`'s own default also matches every `*.test.ts`, which would bundle the unit tests into Obsidian.
|
|
27
|
+
*/
|
|
28
|
+
readonly testPattern?: string;
|
|
29
|
+
/**
|
|
30
|
+
* The vault to run in, relative to the project root. `obsidian-test` installs the plugin INTO it, so it must be a
|
|
31
|
+
* scratch vault, never the demo vault. Defaults to a temporary vault.
|
|
32
|
+
*/
|
|
33
|
+
readonly vaultPath?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Runs the end-to-end tests with `obsidian-test`. It is the body of a plugin's `test:e2e` script.
|
|
37
|
+
*
|
|
38
|
+
* @param options - The {@link TestEndToEndWithObsidianTestOptions}.
|
|
39
|
+
* @returns A {@link Promise} that resolves once the tests pass.
|
|
40
|
+
* @throws When `obsidian-test` is missing or a test fails.
|
|
41
|
+
*/
|
|
42
|
+
export declare function testEndToEndWithObsidianTest(options?: TestEndToEndWithObsidianTestOptions): Promise<void>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
|
|
33
|
+
import { execFromRoot } from "@mnaoumov/typescript-dev-toolkit/root";
|
|
34
|
+
import {
|
|
35
|
+
assertProjectPackagesInstalled,
|
|
36
|
+
DEFAULT_END_TO_END_SPECS
|
|
37
|
+
} from "./e2e-runner-support.mjs";
|
|
38
|
+
async function testEndToEndWithObsidianTest(options = {}) {
|
|
39
|
+
assertProjectPackagesInstalled({ packageNames: ["obsidian-test"], requester: "testEndToEndWithObsidianTest()" });
|
|
40
|
+
await execFromRoot([
|
|
41
|
+
"obsidian-test",
|
|
42
|
+
"--testPattern",
|
|
43
|
+
options.testPattern ?? DEFAULT_END_TO_END_SPECS,
|
|
44
|
+
...options.vaultPath === void 0 ? [] : ["--vault-path", options.vaultPath],
|
|
45
|
+
...options.obsidianCommand === void 0 ? [] : ["--obsidian-cmd", options.obsidianCommand],
|
|
46
|
+
...options.shouldUseCache ?? true ? [] : ["--force"]
|
|
47
|
+
], { isInteractive: true });
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
testEndToEndWithObsidianTest
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90ZXN0LXJ1bm5lcnMvb2JzaWRpYW4tdGVzdC1ydW5uZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVuZC10by1lbmQgdGVzdHMgd2l0aCBgb2JzaWRpYW4tdGVzdGA6IGl0IGJ1bmRsZXMgdGhlIHBsdWdpbiB0b2dldGhlciB3aXRoIHRoZSB0ZXN0IGZpbGVzLCBpbnN0YWxscyBpdCBpbnRvIGFcbiAqIHRlbXBvcmFyeSB2YXVsdCwgbGF1bmNoZXMgdGhlIGluc3RhbGxlZCBPYnNpZGlhbiBhbmQgcnVucyB0aGUgdGVzdHMgaW5zaWRlIGl0IHdpdGggYG5vZGU6dGVzdGAuXG4gKlxuICoge0BsaW5rIHRlc3RFbmRUb0VuZFdpdGhPYnNpZGlhblRlc3R9IGlzIHRoZSBgdGVzdDplMmVgIHNjcmlwdC5cbiAqL1xuXG5pbXBvcnQgeyBleGVjRnJvbVJvb3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yb290JztcblxuaW1wb3J0IHtcbiAgYXNzZXJ0UHJvamVjdFBhY2thZ2VzSW5zdGFsbGVkLFxuICBERUZBVUxUX0VORF9UT19FTkRfU1BFQ1Ncbn0gZnJvbSAnLi9lMmUtcnVubmVyLXN1cHBvcnQudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB0ZXN0RW5kVG9FbmRXaXRoT2JzaWRpYW5UZXN0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0RW5kVG9FbmRXaXRoT2JzaWRpYW5UZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCB0aGF0IGxhdW5jaGVzIE9ic2lkaWFuLiBEZWZhdWx0cyB0byBgb2JzaWRpYW4tdGVzdGAncyBvd24sIGBvYnNpZGlhbmA7IHBvaW50IGl0IGF0IHRoZSBleGVjdXRhYmxlXG4gICAqIHdoZW4gYG9ic2lkaWFuYCBpcyBub3Qgb24gYFBBVEhgLlxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5Db21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGBvYnNpZGlhbi10ZXN0YCBtYXkgcmVwbGF5IGl0cyBjYWNoZWQgcmVzdWx0cyB3aGVuIHRoZSBwbHVnaW4sIHRoZSB0ZXN0cyBhbmQgT2JzaWRpYW4gYXJlIHVuY2hhbmdlZC5cbiAgICogRGVmYXVsdHMgdG8gYHRydWVgOyBgZmFsc2VgIHBhc3NlcyBgLS1mb3JjZWAuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRVc2VDYWNoZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBnbG9iIG9mIHRoZSB0ZXN0IGZpbGVzLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FTkRfVE9fRU5EX1NQRUNTfS5cbiAgICogYG9ic2lkaWFuLXRlc3RgJ3Mgb3duIGRlZmF1bHQgYWxzbyBtYXRjaGVzIGV2ZXJ5IGAqLnRlc3QudHNgLCB3aGljaCB3b3VsZCBidW5kbGUgdGhlIHVuaXQgdGVzdHMgaW50byBPYnNpZGlhbi5cbiAgICovXG4gIHJlYWRvbmx5IHRlc3RQYXR0ZXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgdG8gcnVuIGluLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LiBgb2JzaWRpYW4tdGVzdGAgaW5zdGFsbHMgdGhlIHBsdWdpbiBJTlRPIGl0LCBzbyBpdCBtdXN0IGJlIGFcbiAgICogc2NyYXRjaCB2YXVsdCwgbmV2ZXIgdGhlIGRlbW8gdmF1bHQuIERlZmF1bHRzIHRvIGEgdGVtcG9yYXJ5IHZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHRQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGVuZC10by1lbmQgdGVzdHMgd2l0aCBgb2JzaWRpYW4tdGVzdGAuIEl0IGlzIHRoZSBib2R5IG9mIGEgcGx1Z2luJ3MgYHRlc3Q6ZTJlYCBzY3JpcHQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFRlc3RFbmRUb0VuZFdpdGhPYnNpZGlhblRlc3RPcHRpb25zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgdGVzdHMgcGFzcy5cbiAqIEB0aHJvd3MgV2hlbiBgb2JzaWRpYW4tdGVzdGAgaXMgbWlzc2luZyBvciBhIHRlc3QgZmFpbHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0RW5kVG9FbmRXaXRoT2JzaWRpYW5UZXN0KG9wdGlvbnM6IFRlc3RFbmRUb0VuZFdpdGhPYnNpZGlhblRlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXNzZXJ0UHJvamVjdFBhY2thZ2VzSW5zdGFsbGVkKHsgcGFja2FnZU5hbWVzOiBbJ29ic2lkaWFuLXRlc3QnXSwgcmVxdWVzdGVyOiAndGVzdEVuZFRvRW5kV2l0aE9ic2lkaWFuVGVzdCgpJyB9KTtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAnb2JzaWRpYW4tdGVzdCcsXG4gICAgJy0tdGVzdFBhdHRlcm4nLFxuICAgIG9wdGlvbnMudGVzdFBhdHRlcm4gPz8gREVGQVVMVF9FTkRfVE9fRU5EX1NQRUNTLFxuICAgIC4uLm9wdGlvbnMudmF1bHRQYXRoID09PSB1bmRlZmluZWQgPyBbXSA6IFsnLS12YXVsdC1wYXRoJywgb3B0aW9ucy52YXVsdFBhdGhdLFxuICAgIC4uLm9wdGlvbnMub2JzaWRpYW5Db21tYW5kID09PSB1bmRlZmluZWQgPyBbXSA6IFsnLS1vYnNpZGlhbi1jbWQnLCBvcHRpb25zLm9ic2lkaWFuQ29tbWFuZF0sXG4gICAgLi4ub3B0aW9ucy5zaG91bGRVc2VDYWNoZSA/PyB0cnVlID8gW10gOiBbJy0tZm9yY2UnXVxuICBdLCB7IGlzSW50ZXJhY3RpdmU6IHRydWUgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU0EsU0FBUyxvQkFBb0I7QUFFN0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFzQ1AsZUFBc0IsNkJBQTZCLFVBQStDLENBQUMsR0FBa0I7QUFDbkgsaUNBQStCLEVBQUUsY0FBYyxDQUFDLGVBQWUsR0FBRyxXQUFXLGlDQUFpQyxDQUFDO0FBQy9HLFFBQU0sYUFBYTtBQUFBLElBQ2pCO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUSxlQUFlO0FBQUEsSUFDdkIsR0FBRyxRQUFRLGNBQWMsU0FBWSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsUUFBUSxTQUFTO0FBQUEsSUFDNUUsR0FBRyxRQUFRLG9CQUFvQixTQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixRQUFRLGVBQWU7QUFBQSxJQUMxRixHQUFHLFFBQVEsa0JBQWtCLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUztBQUFBLEVBQ3JELEdBQUcsRUFBRSxlQUFlLEtBQUssQ0FBQztBQUM1QjsiLCJuYW1lcyI6W119
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* End-to-end tests with `wdio-obsidian-service`: WebdriverIO drives a sandboxed copy of Obsidian, downloaded per
|
|
6
|
+
* version into a cache, with the plugin installed into a copy of the test vault.
|
|
7
|
+
*
|
|
8
|
+
* {@link defineWdioObsidianConfig} derives the `wdio.conf.mts` from the project's layout, and
|
|
9
|
+
* {@link testEndToEndWithWdioObsidian} is the `test:e2e` script: a production build, then `wdio run`.
|
|
10
|
+
*
|
|
11
|
+
* The config is typed structurally rather than through `@wdio/types`, so this module costs a project that does not
|
|
12
|
+
* use WebdriverIO nothing, and the returned object is assignable to `WebdriverIO.Config` in one that does.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* The per-test timeout {@link defineWdioObsidianConfig} gives mocha by default, in milliseconds. Obsidian is
|
|
16
|
+
* started once per spec file, which a single test's budget has to absorb.
|
|
17
|
+
*/
|
|
18
|
+
export declare const DEFAULT_WDIO_OBSIDIAN_TEST_TIMEOUT_IN_MILLISECONDS = 60000;
|
|
19
|
+
/**
|
|
20
|
+
* The config files {@link testEndToEndWithWdioObsidian} looks for, in order.
|
|
21
|
+
*/
|
|
22
|
+
export declare const WDIO_CONFIG_FILE_NAMES: readonly string[];
|
|
23
|
+
/**
|
|
24
|
+
* Options for {@link defineWdioObsidianConfig}.
|
|
25
|
+
*/
|
|
26
|
+
export interface DefineWdioObsidianConfigOptions {
|
|
27
|
+
/**
|
|
28
|
+
* The Obsidian app versions to test, one capability each: a version such as `1.8.10`, `latest`, `latest-beta`, or
|
|
29
|
+
* `earliest` (the `minAppVersion` of `manifest.json`). Defaults to `['latest']`; `['earliest', 'latest']` tests
|
|
30
|
+
* both ends of the supported range.
|
|
31
|
+
*/
|
|
32
|
+
readonly appVersions?: readonly string[];
|
|
33
|
+
/**
|
|
34
|
+
* The folder Obsidian versions are downloaded into, relative to the project root. Defaults to `.obsidian-cache`,
|
|
35
|
+
* which belongs in `.gitignore`.
|
|
36
|
+
*/
|
|
37
|
+
readonly cacheFolder?: string;
|
|
38
|
+
/**
|
|
39
|
+
* The Obsidian installer (Electron) version, `earliest` or `latest` compatible with each app version, or an exact
|
|
40
|
+
* one. Defaults to the service's own choice.
|
|
41
|
+
*/
|
|
42
|
+
readonly installerVersion?: string;
|
|
43
|
+
/**
|
|
44
|
+
* How many Obsidian instances run in parallel. Defaults to WebdriverIO's.
|
|
45
|
+
*/
|
|
46
|
+
readonly maxInstances?: number;
|
|
47
|
+
/**
|
|
48
|
+
* The folder holding the built plugin (`main.js`, `manifest.json`, `styles.css`), relative to the project root.
|
|
49
|
+
* Defaults to `dist/build`, where the production build writes it.
|
|
50
|
+
*/
|
|
51
|
+
readonly pluginFolder?: string;
|
|
52
|
+
/**
|
|
53
|
+
* The spec files, relative to the project root. Defaults to {@link DEFAULT_END_TO_END_SPECS}.
|
|
54
|
+
*/
|
|
55
|
+
readonly specs?: readonly string[];
|
|
56
|
+
/**
|
|
57
|
+
* The per-test timeout, in milliseconds. Defaults to {@link DEFAULT_WDIO_OBSIDIAN_TEST_TIMEOUT_IN_MILLISECONDS}.
|
|
58
|
+
*/
|
|
59
|
+
readonly testTimeoutInMilliseconds?: number;
|
|
60
|
+
/**
|
|
61
|
+
* The vault every test starts from, relative to the project root. The service opens a COPY of it, so the tests
|
|
62
|
+
* never change the folder. Defaults to the plugin's demo vault (`demo-vault`) when the project has one, and to an
|
|
63
|
+
* empty vault otherwise; `false` forces the empty vault.
|
|
64
|
+
*/
|
|
65
|
+
readonly vault?: false | string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Options for {@link testEndToEndWithWdioObsidian}.
|
|
69
|
+
*/
|
|
70
|
+
export interface TestEndToEndWithWdioObsidianOptions {
|
|
71
|
+
/**
|
|
72
|
+
* The WebdriverIO config file, relative to the project root. Defaults to the first of
|
|
73
|
+
* {@link WDIO_CONFIG_FILE_NAMES} that exists.
|
|
74
|
+
*/
|
|
75
|
+
readonly configPath?: string;
|
|
76
|
+
/**
|
|
77
|
+
* Whether to run the production build first, so the tests load the current `dist/build`. Defaults to `true`.
|
|
78
|
+
*/
|
|
79
|
+
readonly shouldBuild?: boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* A `wdio-obsidian-service` capability: one Obsidian version to run the specs against.
|
|
83
|
+
*/
|
|
84
|
+
export interface WdioObsidianCapability {
|
|
85
|
+
/**
|
|
86
|
+
* Always `obsidian`, which is what routes the capability to the service.
|
|
87
|
+
*/
|
|
88
|
+
'browserName': 'obsidian';
|
|
89
|
+
/**
|
|
90
|
+
* The Obsidian app version.
|
|
91
|
+
*/
|
|
92
|
+
'browserVersion': string;
|
|
93
|
+
/**
|
|
94
|
+
* The service's own options for this capability.
|
|
95
|
+
*/
|
|
96
|
+
'wdio:obsidianOptions': WdioObsidianCapabilityOptions;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The `wdio:obsidianOptions` of a {@link WdioObsidianCapability}.
|
|
100
|
+
*/
|
|
101
|
+
export interface WdioObsidianCapabilityOptions {
|
|
102
|
+
/**
|
|
103
|
+
* The Obsidian installer version.
|
|
104
|
+
*/
|
|
105
|
+
readonly installerVersion?: string;
|
|
106
|
+
/**
|
|
107
|
+
* The plugin folders to install into the vault.
|
|
108
|
+
*/
|
|
109
|
+
readonly plugins: string[];
|
|
110
|
+
/**
|
|
111
|
+
* The vault to open a copy of.
|
|
112
|
+
*/
|
|
113
|
+
readonly vault?: string;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The WebdriverIO configuration {@link defineWdioObsidianConfig} returns. Every field is plain data, so a project
|
|
117
|
+
* changes any of them by spreading the result: `{ ...defineWdioObsidianConfig(), logLevel: 'info' }`.
|
|
118
|
+
*/
|
|
119
|
+
export interface WdioObsidianConfig {
|
|
120
|
+
/**
|
|
121
|
+
* Where Obsidian versions are downloaded.
|
|
122
|
+
*/
|
|
123
|
+
cacheDir: string;
|
|
124
|
+
/**
|
|
125
|
+
* One capability per Obsidian version.
|
|
126
|
+
*/
|
|
127
|
+
capabilities: WdioObsidianCapability[];
|
|
128
|
+
/**
|
|
129
|
+
* The test framework.
|
|
130
|
+
*/
|
|
131
|
+
framework: 'mocha';
|
|
132
|
+
/**
|
|
133
|
+
* WebdriverIO's log level.
|
|
134
|
+
*/
|
|
135
|
+
logLevel: 'debug' | 'error' | 'info' | 'silent' | 'trace' | 'warn';
|
|
136
|
+
/**
|
|
137
|
+
* How many Obsidian instances run in parallel.
|
|
138
|
+
*/
|
|
139
|
+
maxInstances?: number;
|
|
140
|
+
/**
|
|
141
|
+
* Mocha's options.
|
|
142
|
+
*/
|
|
143
|
+
mochaOpts: WdioObsidianMochaOptions;
|
|
144
|
+
/**
|
|
145
|
+
* The reporters. `obsidian` is the spec reporter, naming the Obsidian version instead of Chromium's.
|
|
146
|
+
*/
|
|
147
|
+
reporters: string[];
|
|
148
|
+
/**
|
|
149
|
+
* Where the specs run.
|
|
150
|
+
*/
|
|
151
|
+
runner: 'local';
|
|
152
|
+
/**
|
|
153
|
+
* The services. `obsidian` is `wdio-obsidian-service`.
|
|
154
|
+
*/
|
|
155
|
+
services: string[];
|
|
156
|
+
/**
|
|
157
|
+
* The spec files.
|
|
158
|
+
*/
|
|
159
|
+
specs: string[];
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* The `mochaOpts` of a {@link WdioObsidianConfig}.
|
|
163
|
+
*/
|
|
164
|
+
export interface WdioObsidianMochaOptions {
|
|
165
|
+
/**
|
|
166
|
+
* The per-test timeout, in milliseconds.
|
|
167
|
+
*/
|
|
168
|
+
readonly timeout: number;
|
|
169
|
+
/**
|
|
170
|
+
* The interface the specs are written in.
|
|
171
|
+
*/
|
|
172
|
+
readonly ui: 'bdd';
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Builds the WebdriverIO configuration for end-to-end tests with `wdio-obsidian-service`, derived from the plugin's
|
|
176
|
+
* layout: the production build in `dist/build` is the plugin under test, the demo vault (when there is one) is the
|
|
177
|
+
* vault, and the specs live in `e2e/`.
|
|
178
|
+
*
|
|
179
|
+
* `wdio.conf.mts`:
|
|
180
|
+
*
|
|
181
|
+
* ```ts
|
|
182
|
+
* import { defineWdioObsidianConfig } from '@mnaoumov/obsidian-dev-toolkit/test-runners/wdio-obsidian';
|
|
183
|
+
*
|
|
184
|
+
* export const config: WebdriverIO.Config = defineWdioObsidianConfig({ appVersions: ['earliest', 'latest'] });
|
|
185
|
+
* ```
|
|
186
|
+
*
|
|
187
|
+
* @param options - The {@link DefineWdioObsidianConfigOptions}.
|
|
188
|
+
* @returns The configuration, to export as `config`.
|
|
189
|
+
*/
|
|
190
|
+
export declare function defineWdioObsidianConfig(options?: DefineWdioObsidianConfigOptions): WdioObsidianConfig;
|
|
191
|
+
/**
|
|
192
|
+
* Runs the end-to-end tests with `wdio-obsidian-service`: the production build, then `wdio run <config>`. It is the
|
|
193
|
+
* body of a plugin's `test:e2e` script.
|
|
194
|
+
*
|
|
195
|
+
* @param options - The {@link TestEndToEndWithWdioObsidianOptions}.
|
|
196
|
+
* @returns A {@link Promise} that resolves once the tests pass.
|
|
197
|
+
* @throws When a package is missing, no config file is found, the build fails or a test fails.
|
|
198
|
+
*/
|
|
199
|
+
export declare function testEndToEndWithWdioObsidian(options?: TestEndToEndWithWdioObsidianOptions): Promise<void>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
|
|
33
|
+
import { npmRun } from "@mnaoumov/typescript-dev-toolkit/npm-run";
|
|
34
|
+
import {
|
|
35
|
+
execFromRoot,
|
|
36
|
+
resolvePathFromRootSafe
|
|
37
|
+
} from "@mnaoumov/typescript-dev-toolkit/root";
|
|
38
|
+
import { existsSync } from "node:fs";
|
|
39
|
+
import { ObsidianPluginRepoPaths } from "../obsidian-plugin-repo-paths.mjs";
|
|
40
|
+
import {
|
|
41
|
+
assertProjectPackagesInstalled,
|
|
42
|
+
DEFAULT_END_TO_END_SPECS
|
|
43
|
+
} from "./e2e-runner-support.mjs";
|
|
44
|
+
const DEFAULT_WDIO_OBSIDIAN_TEST_TIMEOUT_IN_MILLISECONDS = 6e4;
|
|
45
|
+
const WDIO_CONFIG_FILE_NAMES = ["wdio.conf.mts", "wdio.conf.ts"];
|
|
46
|
+
const WDIO_OBSIDIAN_PACKAGES = ["@wdio/cli", "@wdio/local-runner", "@wdio/mocha-framework", "wdio-obsidian-reporter", "wdio-obsidian-service"];
|
|
47
|
+
function defineWdioObsidianConfig(options = {}) {
|
|
48
|
+
const pluginFolder = resolvePathFromRootSafe({ path: options.pluginFolder ?? ObsidianPluginRepoPaths.DistBuild });
|
|
49
|
+
const vault = resolveVault(options.vault);
|
|
50
|
+
const capabilityOptions = {
|
|
51
|
+
plugins: [pluginFolder],
|
|
52
|
+
...options.installerVersion !== void 0 && { installerVersion: options.installerVersion },
|
|
53
|
+
...vault !== void 0 && { vault }
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
// eslint-disable-next-line unicorn/name-replacements -- WebdriverIO's own option name.
|
|
57
|
+
cacheDir: resolvePathFromRootSafe({ path: options.cacheFolder ?? ".obsidian-cache" }),
|
|
58
|
+
capabilities: (options.appVersions ?? ["latest"]).map((appVersion) => ({
|
|
59
|
+
"browserName": "obsidian",
|
|
60
|
+
"browserVersion": appVersion,
|
|
61
|
+
"wdio:obsidianOptions": { ...capabilityOptions, plugins: [...capabilityOptions.plugins] }
|
|
62
|
+
})),
|
|
63
|
+
framework: "mocha",
|
|
64
|
+
logLevel: "warn",
|
|
65
|
+
...options.maxInstances !== void 0 && { maxInstances: options.maxInstances },
|
|
66
|
+
// eslint-disable-next-line unicorn/name-replacements -- WebdriverIO's own option name.
|
|
67
|
+
mochaOpts: {
|
|
68
|
+
timeout: options.testTimeoutInMilliseconds ?? DEFAULT_WDIO_OBSIDIAN_TEST_TIMEOUT_IN_MILLISECONDS,
|
|
69
|
+
ui: "bdd"
|
|
70
|
+
},
|
|
71
|
+
reporters: ["obsidian"],
|
|
72
|
+
runner: "local",
|
|
73
|
+
services: ["obsidian"],
|
|
74
|
+
specs: [...options.specs ?? [DEFAULT_END_TO_END_SPECS]]
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
async function testEndToEndWithWdioObsidian(options = {}) {
|
|
78
|
+
assertProjectPackagesInstalled({ packageNames: WDIO_OBSIDIAN_PACKAGES, requester: "testEndToEndWithWdioObsidian()" });
|
|
79
|
+
const configPath = options.configPath ?? findWdioConfigFile();
|
|
80
|
+
if (options.shouldBuild ?? true) {
|
|
81
|
+
await npmRun("build");
|
|
82
|
+
}
|
|
83
|
+
await execFromRoot(["wdio", "run", configPath], { isInteractive: true });
|
|
84
|
+
}
|
|
85
|
+
function findWdioConfigFile() {
|
|
86
|
+
const configFileName = WDIO_CONFIG_FILE_NAMES.find((fileName) => existsSync(resolvePathFromRootSafe({ path: fileName })));
|
|
87
|
+
if (configFileName === void 0) {
|
|
88
|
+
throw new Error(
|
|
89
|
+
`testEndToEndWithWdioObsidian() found no WebdriverIO config (${WDIO_CONFIG_FILE_NAMES.join(", ")}) in the project root. Create wdio.conf.mts exporting \`config = defineWdioObsidianConfig()\`, or pass \`configPath\`.`
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
return configFileName;
|
|
93
|
+
}
|
|
94
|
+
function resolveVault(vault) {
|
|
95
|
+
if (vault === false) {
|
|
96
|
+
return void 0;
|
|
97
|
+
}
|
|
98
|
+
if (vault !== void 0) {
|
|
99
|
+
return resolvePathFromRootSafe({ path: vault });
|
|
100
|
+
}
|
|
101
|
+
const demoVaultPath = resolvePathFromRootSafe({ path: ObsidianPluginRepoPaths.DemoVault });
|
|
102
|
+
return existsSync(demoVaultPath) ? demoVaultPath : void 0;
|
|
103
|
+
}
|
|
104
|
+
export {
|
|
105
|
+
DEFAULT_WDIO_OBSIDIAN_TEST_TIMEOUT_IN_MILLISECONDS,
|
|
106
|
+
WDIO_CONFIG_FILE_NAMES,
|
|
107
|
+
defineWdioObsidianConfig,
|
|
108
|
+
testEndToEndWithWdioObsidian
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90ZXN0LXJ1bm5lcnMvd2Rpby1vYnNpZGlhbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRW5kLXRvLWVuZCB0ZXN0cyB3aXRoIGB3ZGlvLW9ic2lkaWFuLXNlcnZpY2VgOiBXZWJkcml2ZXJJTyBkcml2ZXMgYSBzYW5kYm94ZWQgY29weSBvZiBPYnNpZGlhbiwgZG93bmxvYWRlZCBwZXJcbiAqIHZlcnNpb24gaW50byBhIGNhY2hlLCB3aXRoIHRoZSBwbHVnaW4gaW5zdGFsbGVkIGludG8gYSBjb3B5IG9mIHRoZSB0ZXN0IHZhdWx0LlxuICpcbiAqIHtAbGluayBkZWZpbmVXZGlvT2JzaWRpYW5Db25maWd9IGRlcml2ZXMgdGhlIGB3ZGlvLmNvbmYubXRzYCBmcm9tIHRoZSBwcm9qZWN0J3MgbGF5b3V0LCBhbmRcbiAqIHtAbGluayB0ZXN0RW5kVG9FbmRXaXRoV2Rpb09ic2lkaWFufSBpcyB0aGUgYHRlc3Q6ZTJlYCBzY3JpcHQ6IGEgcHJvZHVjdGlvbiBidWlsZCwgdGhlbiBgd2RpbyBydW5gLlxuICpcbiAqIFRoZSBjb25maWcgaXMgdHlwZWQgc3RydWN0dXJhbGx5IHJhdGhlciB0aGFuIHRocm91Z2ggYEB3ZGlvL3R5cGVzYCwgc28gdGhpcyBtb2R1bGUgY29zdHMgYSBwcm9qZWN0IHRoYXQgZG9lcyBub3RcbiAqIHVzZSBXZWJkcml2ZXJJTyBub3RoaW5nLCBhbmQgdGhlIHJldHVybmVkIG9iamVjdCBpcyBhc3NpZ25hYmxlIHRvIGBXZWJkcml2ZXJJTy5Db25maWdgIGluIG9uZSB0aGF0IGRvZXMuXG4gKi9cblxuaW1wb3J0IHsgbnBtUnVuIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbnBtLXJ1bic7XG5pbXBvcnQge1xuICBleGVjRnJvbVJvb3QsXG4gIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L3Jvb3QnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGFzc2VydFByb2plY3RQYWNrYWdlc0luc3RhbGxlZCxcbiAgREVGQVVMVF9FTkRfVE9fRU5EX1NQRUNTXG59IGZyb20gJy4vZTJlLXJ1bm5lci1zdXBwb3J0LnRzJztcblxuLyoqXG4gKiBUaGUgcGVyLXRlc3QgdGltZW91dCB7QGxpbmsgZGVmaW5lV2Rpb09ic2lkaWFuQ29uZmlnfSBnaXZlcyBtb2NoYSBieSBkZWZhdWx0LCBpbiBtaWxsaXNlY29uZHMuIE9ic2lkaWFuIGlzXG4gKiBzdGFydGVkIG9uY2UgcGVyIHNwZWMgZmlsZSwgd2hpY2ggYSBzaW5nbGUgdGVzdCdzIGJ1ZGdldCBoYXMgdG8gYWJzb3JiLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9XRElPX09CU0lESUFOX1RFU1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA2MF8wMDA7XG5cbi8qKlxuICogVGhlIGNvbmZpZyBmaWxlcyB7QGxpbmsgdGVzdEVuZFRvRW5kV2l0aFdkaW9PYnNpZGlhbn0gbG9va3MgZm9yLCBpbiBvcmRlci5cbiAqL1xuZXhwb3J0IGNvbnN0IFdESU9fQ09ORklHX0ZJTEVfTkFNRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWyd3ZGlvLmNvbmYubXRzJywgJ3dkaW8uY29uZi50cyddO1xuXG4vKipcbiAqIFRoZSBwYWNrYWdlcyBhIGB3ZGlvLW9ic2lkaWFuLXNlcnZpY2VgIHNldHVwIG5lZWRzIGluIHRoZSBwcm9qZWN0LlxuICovXG5jb25zdCBXRElPX09CU0lESUFOX1BBQ0tBR0VTOiByZWFkb25seSBzdHJpbmdbXSA9IFsnQHdkaW8vY2xpJywgJ0B3ZGlvL2xvY2FsLXJ1bm5lcicsICdAd2Rpby9tb2NoYS1mcmFtZXdvcmsnLCAnd2Rpby1vYnNpZGlhbi1yZXBvcnRlcicsICd3ZGlvLW9ic2lkaWFuLXNlcnZpY2UnXTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZGVmaW5lV2Rpb09ic2lkaWFuQ29uZmlnfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbmVXZGlvT2JzaWRpYW5Db25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgdmVyc2lvbnMgdG8gdGVzdCwgb25lIGNhcGFiaWxpdHkgZWFjaDogYSB2ZXJzaW9uIHN1Y2ggYXMgYDEuOC4xMGAsIGBsYXRlc3RgLCBgbGF0ZXN0LWJldGFgLCBvclxuICAgKiBgZWFybGllc3RgICh0aGUgYG1pbkFwcFZlcnNpb25gIG9mIGBtYW5pZmVzdC5qc29uYCkuIERlZmF1bHRzIHRvIGBbJ2xhdGVzdCddYDsgYFsnZWFybGllc3QnLCAnbGF0ZXN0J11gIHRlc3RzXG4gICAqIGJvdGggZW5kcyBvZiB0aGUgc3VwcG9ydGVkIHJhbmdlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwVmVyc2lvbnM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciBPYnNpZGlhbiB2ZXJzaW9ucyBhcmUgZG93bmxvYWRlZCBpbnRvLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LiBEZWZhdWx0cyB0byBgLm9ic2lkaWFuLWNhY2hlYCxcbiAgICogd2hpY2ggYmVsb25ncyBpbiBgLmdpdGlnbm9yZWAuXG4gICAqL1xuICByZWFkb25seSBjYWNoZUZvbGRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGluc3RhbGxlciAoRWxlY3Ryb24pIHZlcnNpb24sIGBlYXJsaWVzdGAgb3IgYGxhdGVzdGAgY29tcGF0aWJsZSB3aXRoIGVhY2ggYXBwIHZlcnNpb24sIG9yIGFuIGV4YWN0XG4gICAqIG9uZS4gRGVmYXVsdHMgdG8gdGhlIHNlcnZpY2UncyBvd24gY2hvaWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbGVyVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogSG93IG1hbnkgT2JzaWRpYW4gaW5zdGFuY2VzIHJ1biBpbiBwYXJhbGxlbC4gRGVmYXVsdHMgdG8gV2ViZHJpdmVySU8ncy5cbiAgICovXG4gIHJlYWRvbmx5IG1heEluc3RhbmNlcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciBob2xkaW5nIHRoZSBidWlsdCBwbHVnaW4gKGBtYWluLmpzYCwgYG1hbmlmZXN0Lmpzb25gLCBgc3R5bGVzLmNzc2ApLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LlxuICAgKiBEZWZhdWx0cyB0byBgZGlzdC9idWlsZGAsIHdoZXJlIHRoZSBwcm9kdWN0aW9uIGJ1aWxkIHdyaXRlcyBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbkZvbGRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNwZWMgZmlsZXMsIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3QuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VORF9UT19FTkRfU1BFQ1N9LlxuICAgKi9cbiAgcmVhZG9ubHkgc3BlY3M/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHBlci10ZXN0IHRpbWVvdXQsIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfV0RJT19PQlNJRElBTl9URVNUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTfS5cbiAgICovXG4gIHJlYWRvbmx5IHRlc3RUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCBldmVyeSB0ZXN0IHN0YXJ0cyBmcm9tLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LiBUaGUgc2VydmljZSBvcGVucyBhIENPUFkgb2YgaXQsIHNvIHRoZSB0ZXN0c1xuICAgKiBuZXZlciBjaGFuZ2UgdGhlIGZvbGRlci4gRGVmYXVsdHMgdG8gdGhlIHBsdWdpbidzIGRlbW8gdmF1bHQgKGBkZW1vLXZhdWx0YCkgd2hlbiB0aGUgcHJvamVjdCBoYXMgb25lLCBhbmQgdG8gYW5cbiAgICogZW1wdHkgdmF1bHQgb3RoZXJ3aXNlOyBgZmFsc2VgIGZvcmNlcyB0aGUgZW1wdHkgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSB2YXVsdD86IGZhbHNlIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB0ZXN0RW5kVG9FbmRXaXRoV2Rpb09ic2lkaWFufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0RW5kVG9FbmRXaXRoV2Rpb09ic2lkaWFuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgV2ViZHJpdmVySU8gY29uZmlnIGZpbGUsIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3QuIERlZmF1bHRzIHRvIHRoZSBmaXJzdCBvZlxuICAgKiB7QGxpbmsgV0RJT19DT05GSUdfRklMRV9OQU1FU30gdGhhdCBleGlzdHMuXG4gICAqL1xuICByZWFkb25seSBjb25maWdQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJ1biB0aGUgcHJvZHVjdGlvbiBidWlsZCBmaXJzdCwgc28gdGhlIHRlc3RzIGxvYWQgdGhlIGN1cnJlbnQgYGRpc3QvYnVpbGRgLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRCdWlsZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBgd2Rpby1vYnNpZGlhbi1zZXJ2aWNlYCBjYXBhYmlsaXR5OiBvbmUgT2JzaWRpYW4gdmVyc2lvbiB0byBydW4gdGhlIHNwZWNzIGFnYWluc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2Rpb09ic2lkaWFuQ2FwYWJpbGl0eSB7XG4gIC8qKlxuICAgKiBBbHdheXMgYG9ic2lkaWFuYCwgd2hpY2ggaXMgd2hhdCByb3V0ZXMgdGhlIGNhcGFiaWxpdHkgdG8gdGhlIHNlcnZpY2UuXG4gICAqL1xuICAnYnJvd3Nlck5hbWUnOiAnb2JzaWRpYW4nO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIHZlcnNpb24uXG4gICAqL1xuICAnYnJvd3NlclZlcnNpb24nOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2aWNlJ3Mgb3duIG9wdGlvbnMgZm9yIHRoaXMgY2FwYWJpbGl0eS5cbiAgICovXG4gICd3ZGlvOm9ic2lkaWFuT3B0aW9ucyc6IFdkaW9PYnNpZGlhbkNhcGFiaWxpdHlPcHRpb25zO1xufVxuXG4vKipcbiAqIFRoZSBgd2RpbzpvYnNpZGlhbk9wdGlvbnNgIG9mIGEge0BsaW5rIFdkaW9PYnNpZGlhbkNhcGFiaWxpdHl9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdkaW9PYnNpZGlhbkNhcGFiaWxpdHlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBpbnN0YWxsZXIgdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxlclZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZm9sZGVycyB0byBpbnN0YWxsIGludG8gdGhlIHZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCB0byBvcGVuIGEgY29weSBvZi5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBXZWJkcml2ZXJJTyBjb25maWd1cmF0aW9uIHtAbGluayBkZWZpbmVXZGlvT2JzaWRpYW5Db25maWd9IHJldHVybnMuIEV2ZXJ5IGZpZWxkIGlzIHBsYWluIGRhdGEsIHNvIGEgcHJvamVjdFxuICogY2hhbmdlcyBhbnkgb2YgdGhlbSBieSBzcHJlYWRpbmcgdGhlIHJlc3VsdDogYHsgLi4uZGVmaW5lV2Rpb09ic2lkaWFuQ29uZmlnKCksIGxvZ0xldmVsOiAnaW5mbycgfWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2Rpb09ic2lkaWFuQ29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXJlIE9ic2lkaWFuIHZlcnNpb25zIGFyZSBkb3dubG9hZGVkLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gV2ViZHJpdmVySU8ncyBvd24gb3B0aW9uIG5hbWUuXG4gIGNhY2hlRGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9uZSBjYXBhYmlsaXR5IHBlciBPYnNpZGlhbiB2ZXJzaW9uLlxuICAgKi9cbiAgY2FwYWJpbGl0aWVzOiBXZGlvT2JzaWRpYW5DYXBhYmlsaXR5W107XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXN0IGZyYW1ld29yay5cbiAgICovXG4gIGZyYW1ld29yazogJ21vY2hhJztcblxuICAvKipcbiAgICogV2ViZHJpdmVySU8ncyBsb2cgbGV2ZWwuXG4gICAqL1xuICBsb2dMZXZlbDogJ2RlYnVnJyB8ICdlcnJvcicgfCAnaW5mbycgfCAnc2lsZW50JyB8ICd0cmFjZScgfCAnd2Fybic7XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IE9ic2lkaWFuIGluc3RhbmNlcyBydW4gaW4gcGFyYWxsZWwuXG4gICAqL1xuICBtYXhJbnN0YW5jZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1vY2hhJ3Mgb3B0aW9ucy5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIFdlYmRyaXZlcklPJ3Mgb3duIG9wdGlvbiBuYW1lLlxuICBtb2NoYU9wdHM6IFdkaW9PYnNpZGlhbk1vY2hhT3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHJlcG9ydGVycy4gYG9ic2lkaWFuYCBpcyB0aGUgc3BlYyByZXBvcnRlciwgbmFtaW5nIHRoZSBPYnNpZGlhbiB2ZXJzaW9uIGluc3RlYWQgb2YgQ2hyb21pdW0ncy5cbiAgICovXG4gIHJlcG9ydGVyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBzcGVjcyBydW4uXG4gICAqL1xuICBydW5uZXI6ICdsb2NhbCc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2aWNlcy4gYG9ic2lkaWFuYCBpcyBgd2Rpby1vYnNpZGlhbi1zZXJ2aWNlYC5cbiAgICovXG4gIHNlcnZpY2VzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHNwZWMgZmlsZXMuXG4gICAqL1xuICBzcGVjczogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIGBtb2NoYU9wdHNgIG9mIGEge0BsaW5rIFdkaW9PYnNpZGlhbkNvbmZpZ30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2Rpb09ic2lkaWFuTW9jaGFPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwZXItdGVzdCB0aW1lb3V0LCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcmZhY2UgdGhlIHNwZWNzIGFyZSB3cml0dGVuIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgdWk6ICdiZGQnO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgV2ViZHJpdmVySU8gY29uZmlndXJhdGlvbiBmb3IgZW5kLXRvLWVuZCB0ZXN0cyB3aXRoIGB3ZGlvLW9ic2lkaWFuLXNlcnZpY2VgLCBkZXJpdmVkIGZyb20gdGhlIHBsdWdpbidzXG4gKiBsYXlvdXQ6IHRoZSBwcm9kdWN0aW9uIGJ1aWxkIGluIGBkaXN0L2J1aWxkYCBpcyB0aGUgcGx1Z2luIHVuZGVyIHRlc3QsIHRoZSBkZW1vIHZhdWx0ICh3aGVuIHRoZXJlIGlzIG9uZSkgaXMgdGhlXG4gKiB2YXVsdCwgYW5kIHRoZSBzcGVjcyBsaXZlIGluIGBlMmUvYC5cbiAqXG4gKiBgd2Rpby5jb25mLm10c2A6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGRlZmluZVdkaW9PYnNpZGlhbkNvbmZpZyB9IGZyb20gJ0BtbmFvdW1vdi9vYnNpZGlhbi1kZXYtdG9vbGtpdC90ZXN0LXJ1bm5lcnMvd2Rpby1vYnNpZGlhbic7XG4gKlxuICogZXhwb3J0IGNvbnN0IGNvbmZpZzogV2ViZHJpdmVySU8uQ29uZmlnID0gZGVmaW5lV2Rpb09ic2lkaWFuQ29uZmlnKHsgYXBwVmVyc2lvbnM6IFsnZWFybGllc3QnLCAnbGF0ZXN0J10gfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgRGVmaW5lV2Rpb09ic2lkaWFuQ29uZmlnT3B0aW9uc30uXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiwgdG8gZXhwb3J0IGFzIGBjb25maWdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lV2Rpb09ic2lkaWFuQ29uZmlnKG9wdGlvbnM6IERlZmluZVdkaW9PYnNpZGlhbkNvbmZpZ09wdGlvbnMgPSB7fSk6IFdkaW9PYnNpZGlhbkNvbmZpZyB7XG4gIGNvbnN0IHBsdWdpbkZvbGRlciA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogb3B0aW9ucy5wbHVnaW5Gb2xkZXIgPz8gT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGlzdEJ1aWxkIH0pO1xuICBjb25zdCB2YXVsdCA9IHJlc29sdmVWYXVsdChvcHRpb25zLnZhdWx0KTtcbiAgY29uc3QgY2FwYWJpbGl0eU9wdGlvbnM6IFdkaW9PYnNpZGlhbkNhcGFiaWxpdHlPcHRpb25zID0ge1xuICAgIHBsdWdpbnM6IFtwbHVnaW5Gb2xkZXJdLFxuICAgIC4uLihvcHRpb25zLmluc3RhbGxlclZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiB7IGluc3RhbGxlclZlcnNpb246IG9wdGlvbnMuaW5zdGFsbGVyVmVyc2lvbiB9KSxcbiAgICAuLi4odmF1bHQgIT09IHVuZGVmaW5lZCAmJiB7IHZhdWx0IH0pXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBXZWJkcml2ZXJJTydzIG93biBvcHRpb24gbmFtZS5cbiAgICBjYWNoZURpcjogcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBvcHRpb25zLmNhY2hlRm9sZGVyID8/ICcub2JzaWRpYW4tY2FjaGUnIH0pLFxuICAgIGNhcGFiaWxpdGllczogKG9wdGlvbnMuYXBwVmVyc2lvbnMgPz8gWydsYXRlc3QnXSkubWFwKChhcHBWZXJzaW9uKSA9PiAoe1xuICAgICAgJ2Jyb3dzZXJOYW1lJzogJ29ic2lkaWFuJyxcbiAgICAgICdicm93c2VyVmVyc2lvbic6IGFwcFZlcnNpb24sXG4gICAgICAnd2RpbzpvYnNpZGlhbk9wdGlvbnMnOiB7IC4uLmNhcGFiaWxpdHlPcHRpb25zLCBwbHVnaW5zOiBbLi4uY2FwYWJpbGl0eU9wdGlvbnMucGx1Z2luc10gfVxuICAgIH0pKSxcbiAgICBmcmFtZXdvcms6ICdtb2NoYScsXG4gICAgbG9nTGV2ZWw6ICd3YXJuJyxcbiAgICAuLi4ob3B0aW9ucy5tYXhJbnN0YW5jZXMgIT09IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlczogb3B0aW9ucy5tYXhJbnN0YW5jZXMgfSksXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gV2ViZHJpdmVySU8ncyBvd24gb3B0aW9uIG5hbWUuXG4gICAgbW9jaGFPcHRzOiB7XG4gICAgICB0aW1lb3V0OiBvcHRpb25zLnRlc3RUaW1lb3V0SW5NaWxsaXNlY29uZHMgPz8gREVGQVVMVF9XRElPX09CU0lESUFOX1RFU1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICB1aTogJ2JkZCdcbiAgICB9LFxuICAgIHJlcG9ydGVyczogWydvYnNpZGlhbiddLFxuICAgIHJ1bm5lcjogJ2xvY2FsJyxcbiAgICBzZXJ2aWNlczogWydvYnNpZGlhbiddLFxuICAgIHNwZWNzOiBbLi4ub3B0aW9ucy5zcGVjcyA/PyBbREVGQVVMVF9FTkRfVE9fRU5EX1NQRUNTXV1cbiAgfTtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBlbmQtdG8tZW5kIHRlc3RzIHdpdGggYHdkaW8tb2JzaWRpYW4tc2VydmljZWA6IHRoZSBwcm9kdWN0aW9uIGJ1aWxkLCB0aGVuIGB3ZGlvIHJ1biA8Y29uZmlnPmAuIEl0IGlzIHRoZVxuICogYm9keSBvZiBhIHBsdWdpbidzIGB0ZXN0OmUyZWAgc2NyaXB0LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBUZXN0RW5kVG9FbmRXaXRoV2Rpb09ic2lkaWFuT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHRlc3RzIHBhc3MuXG4gKiBAdGhyb3dzIFdoZW4gYSBwYWNrYWdlIGlzIG1pc3NpbmcsIG5vIGNvbmZpZyBmaWxlIGlzIGZvdW5kLCB0aGUgYnVpbGQgZmFpbHMgb3IgYSB0ZXN0IGZhaWxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEVuZFRvRW5kV2l0aFdkaW9PYnNpZGlhbihvcHRpb25zOiBUZXN0RW5kVG9FbmRXaXRoV2Rpb09ic2lkaWFuT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGFzc2VydFByb2plY3RQYWNrYWdlc0luc3RhbGxlZCh7IHBhY2thZ2VOYW1lczogV0RJT19PQlNJRElBTl9QQUNLQUdFUywgcmVxdWVzdGVyOiAndGVzdEVuZFRvRW5kV2l0aFdkaW9PYnNpZGlhbigpJyB9KTtcbiAgY29uc3QgY29uZmlnUGF0aCA9IG9wdGlvbnMuY29uZmlnUGF0aCA/PyBmaW5kV2Rpb0NvbmZpZ0ZpbGUoKTtcbiAgaWYgKG9wdGlvbnMuc2hvdWxkQnVpbGQgPz8gdHJ1ZSkge1xuICAgIGF3YWl0IG5wbVJ1bignYnVpbGQnKTtcbiAgfVxuICBhd2FpdCBleGVjRnJvbVJvb3QoWyd3ZGlvJywgJ3J1bicsIGNvbmZpZ1BhdGhdLCB7IGlzSW50ZXJhY3RpdmU6IHRydWUgfSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRXZGlvQ29uZmlnRmlsZSgpOiBzdHJpbmcge1xuICBjb25zdCBjb25maWdGaWxlTmFtZSA9IFdESU9fQ09ORklHX0ZJTEVfTkFNRVMuZmluZCgoZmlsZU5hbWUpID0+IGV4aXN0c1N5bmMocmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBmaWxlTmFtZSB9KSkpO1xuICBpZiAoY29uZmlnRmlsZU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGB0ZXN0RW5kVG9FbmRXaXRoV2Rpb09ic2lkaWFuKCkgZm91bmQgbm8gV2ViZHJpdmVySU8gY29uZmlnICgke1dESU9fQ09ORklHX0ZJTEVfTkFNRVMuam9pbignLCAnKX0pIGluIHRoZSBwcm9qZWN0IHJvb3QuIGBcbiAgICAgICAgKyAnQ3JlYXRlIHdkaW8uY29uZi5tdHMgZXhwb3J0aW5nIGBjb25maWcgPSBkZWZpbmVXZGlvT2JzaWRpYW5Db25maWcoKWAsIG9yIHBhc3MgYGNvbmZpZ1BhdGhgLidcbiAgICApO1xuICB9XG4gIHJldHVybiBjb25maWdGaWxlTmFtZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVZhdWx0KHZhdWx0OiBEZWZpbmVXZGlvT2JzaWRpYW5Db25maWdPcHRpb25zWyd2YXVsdCddKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhdWx0ID09PSBmYWxzZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiB2YXVsdCB9KTtcbiAgfVxuICBjb25zdCBkZW1vVmF1bHRQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EZW1vVmF1bHQgfSk7XG4gIHJldHVybiBleGlzdHNTeW5jKGRlbW9WYXVsdFBhdGgpID8gZGVtb1ZhdWx0UGF0aCA6IHVuZGVmaW5lZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhQSxTQUFTLGNBQWM7QUFDdkI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGtCQUFrQjtBQUUzQixTQUFTLCtCQUErQjtBQUN4QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQU1BLE1BQU0scURBQXFEO0FBSzNELE1BQU0seUJBQTRDLENBQUMsaUJBQWlCLGNBQWM7QUFLekYsTUFBTSx5QkFBNEMsQ0FBQyxhQUFhLHNCQUFzQix5QkFBeUIsMEJBQTBCLHVCQUF1QjtBQXVNekosU0FBUyx5QkFBeUIsVUFBMkMsQ0FBQyxHQUF1QjtBQUMxRyxRQUFNLGVBQWUsd0JBQXdCLEVBQUUsTUFBTSxRQUFRLGdCQUFnQix3QkFBd0IsVUFBVSxDQUFDO0FBQ2hILFFBQU0sUUFBUSxhQUFhLFFBQVEsS0FBSztBQUN4QyxRQUFNLG9CQUFtRDtBQUFBLElBQ3ZELFNBQVMsQ0FBQyxZQUFZO0FBQUEsSUFDdEIsR0FBSSxRQUFRLHFCQUFxQixVQUFhLEVBQUUsa0JBQWtCLFFBQVEsaUJBQWlCO0FBQUEsSUFDM0YsR0FBSSxVQUFVLFVBQWEsRUFBRSxNQUFNO0FBQUEsRUFDckM7QUFFQSxTQUFPO0FBQUE7QUFBQSxJQUVMLFVBQVUsd0JBQXdCLEVBQUUsTUFBTSxRQUFRLGVBQWUsa0JBQWtCLENBQUM7QUFBQSxJQUNwRixlQUFlLFFBQVEsZUFBZSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO0FBQUEsTUFDckUsZUFBZTtBQUFBLE1BQ2Ysa0JBQWtCO0FBQUEsTUFDbEIsd0JBQXdCLEVBQUUsR0FBRyxtQkFBbUIsU0FBUyxDQUFDLEdBQUcsa0JBQWtCLE9BQU8sRUFBRTtBQUFBLElBQzFGLEVBQUU7QUFBQSxJQUNGLFdBQVc7QUFBQSxJQUNYLFVBQVU7QUFBQSxJQUNWLEdBQUksUUFBUSxpQkFBaUIsVUFBYSxFQUFFLGNBQWMsUUFBUSxhQUFhO0FBQUE7QUFBQSxJQUUvRSxXQUFXO0FBQUEsTUFDVCxTQUFTLFFBQVEsNkJBQTZCO0FBQUEsTUFDOUMsSUFBSTtBQUFBLElBQ047QUFBQSxJQUNBLFdBQVcsQ0FBQyxVQUFVO0FBQUEsSUFDdEIsUUFBUTtBQUFBLElBQ1IsVUFBVSxDQUFDLFVBQVU7QUFBQSxJQUNyQixPQUFPLENBQUMsR0FBRyxRQUFRLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQztBQUFBLEVBQ3hEO0FBQ0Y7QUFVQSxlQUFzQiw2QkFBNkIsVUFBK0MsQ0FBQyxHQUFrQjtBQUNuSCxpQ0FBK0IsRUFBRSxjQUFjLHdCQUF3QixXQUFXLGlDQUFpQyxDQUFDO0FBQ3BILFFBQU0sYUFBYSxRQUFRLGNBQWMsbUJBQW1CO0FBQzVELE1BQUksUUFBUSxlQUFlLE1BQU07QUFDL0IsVUFBTSxPQUFPLE9BQU87QUFBQSxFQUN0QjtBQUNBLFFBQU0sYUFBYSxDQUFDLFFBQVEsT0FBTyxVQUFVLEdBQUcsRUFBRSxlQUFlLEtBQUssQ0FBQztBQUN6RTtBQUVBLFNBQVMscUJBQTZCO0FBQ3BDLFFBQU0saUJBQWlCLHVCQUF1QixLQUFLLENBQUMsYUFBYSxXQUFXLHdCQUF3QixFQUFFLE1BQU0sU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN4SCxNQUFJLG1CQUFtQixRQUFXO0FBQ2hDLFVBQU0sSUFBSTtBQUFBLE1BQ1IsK0RBQStELHVCQUF1QixLQUFLLElBQUksQ0FBQztBQUFBLElBRWxHO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVBLFNBQVMsYUFBYSxPQUFxRTtBQUN6RixNQUFJLFVBQVUsT0FBTztBQUNuQixXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksVUFBVSxRQUFXO0FBQ3ZCLFdBQU8sd0JBQXdCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFBQSxFQUNoRDtBQUNBLFFBQU0sZ0JBQWdCLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLFVBQVUsQ0FBQztBQUN6RixTQUFPLFdBQVcsYUFBYSxJQUFJLGdCQUFnQjtBQUNyRDsiLCJuYW1lcyI6W119
|