obsidian-integration-testing 4.2.6 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -0
- package/dist/lib/cjs/enable-plugin.cjs +1 -1
- package/dist/lib/cjs/enable-plugin.d.cts +4 -4
- package/dist/lib/cjs/eval-in-obsidian.cjs +3 -5
- package/dist/lib/cjs/eval-in-obsidian.d.cts +5 -5
- package/dist/lib/cjs/generate-function-call.cjs +1 -1
- package/dist/lib/cjs/generate-function-call.d.cts +4 -4
- package/dist/lib/cjs/global-setup-core.cjs +39 -11
- package/dist/lib/cjs/global-setup-core.d.cts +13 -5
- package/dist/lib/cjs/jest/global-setup.cjs +24 -14
- package/dist/lib/cjs/jest/global-setup.d.cts +37 -4
- package/dist/lib/cjs/jest/global-teardown.cjs +26 -0
- package/dist/lib/cjs/jest/global-teardown.d.cts +11 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/namespace-bootstrap.cjs +1 -1
- package/dist/lib/cjs/obsidian-namespace.cjs +1 -1
- package/dist/lib/cjs/obsidian-namespace.d.cts +6 -6
- package/dist/lib/cjs/setup-lock.cjs +158 -0
- package/dist/lib/cjs/setup-lock.d.cts +55 -0
- package/dist/lib/cjs/strict-proxy.cjs +1 -1
- package/dist/lib/cjs/strict-proxy.d.cts +3 -2
- package/dist/lib/cjs/transport-desktop-cdp.cjs +1 -1
- package/dist/lib/cjs/transport-desktop-cli.cjs +1 -1
- package/dist/lib/cjs/transport-desktop-cli.d.cts +1 -1
- package/dist/lib/cjs/transport-factory.cjs +1 -1
- package/dist/lib/cjs/transport-options.cjs +1 -1
- package/dist/lib/cjs/transport-options.d.cts +14 -14
- package/dist/lib/cjs/vitest/global-setup.cjs +27 -19
- package/dist/lib/cjs/vitest/global-setup.d.cts +35 -3
- package/dist/lib/cjs/vitest/typings.d.cts +1 -1
- package/dist/lib/esm/enable-plugin.d.mts +4 -4
- package/dist/lib/esm/enable-plugin.mjs +1 -1
- package/dist/lib/esm/eval-in-obsidian.d.mts +5 -5
- package/dist/lib/esm/eval-in-obsidian.mjs +3 -5
- package/dist/lib/esm/generate-function-call.d.mts +4 -4
- package/dist/lib/esm/generate-function-call.mjs +1 -1
- package/dist/lib/esm/global-setup-core.d.mts +13 -5
- package/dist/lib/esm/global-setup-core.mjs +39 -11
- package/dist/lib/esm/jest/global-setup.d.mts +37 -4
- package/dist/lib/esm/jest/global-setup.mjs +23 -14
- package/dist/lib/esm/jest/global-teardown.d.mts +11 -0
- package/dist/lib/esm/jest/global-teardown.mjs +6 -0
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/namespace-bootstrap.mjs +1 -1
- package/dist/lib/esm/obsidian-namespace.d.mts +6 -6
- package/dist/lib/esm/setup-lock.d.mts +55 -0
- package/dist/lib/esm/setup-lock.mjs +132 -0
- package/dist/lib/esm/strict-proxy.d.mts +3 -2
- package/dist/lib/esm/strict-proxy.mjs +1 -1
- package/dist/lib/esm/transport-desktop-cdp.mjs +1 -1
- package/dist/lib/esm/transport-desktop-cli.d.mts +1 -1
- package/dist/lib/esm/transport-desktop-cli.mjs +1 -1
- package/dist/lib/esm/transport-factory.mjs +1 -1
- package/dist/lib/esm/transport-options.d.mts +14 -14
- package/dist/lib/esm/vitest/global-setup.d.mts +35 -3
- package/dist/lib/esm/vitest/global-setup.mjs +26 -19
- package/dist/lib/esm/vitest/typings.d.mts +1 -1
- package/dist/obsidian-integration-testing-4.4.0.tgz +0 -0
- package/package.json +34 -21
- package/dist/obsidian-integration-testing-4.2.6.tgz +0 -0
|
@@ -18,6 +18,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var global_setup_exports = {};
|
|
20
20
|
__export(global_setup_exports, {
|
|
21
|
+
createSetup: () => createSetup,
|
|
22
|
+
default: () => global_setup_default,
|
|
21
23
|
getTempVault: () => getTempVault,
|
|
22
24
|
getTransportOptions: () => getTransportOptions,
|
|
23
25
|
setup: () => setup,
|
|
@@ -29,7 +31,22 @@ var import_global_setup_core = require("../global-setup-core.cjs");
|
|
|
29
31
|
var import_temp_vault = require("../temp-vault.cjs");
|
|
30
32
|
(0, import_context_provider.setTransportOptionsResolver)(() => globalThis.__obsidianIntegrationTesting?.transportOptions);
|
|
31
33
|
(0, import_context_provider.setVaultPathResolver)(() => globalThis.__obsidianIntegrationTesting?.tempVaultPath);
|
|
32
|
-
|
|
34
|
+
function createSetup(options) {
|
|
35
|
+
let setupResult;
|
|
36
|
+
return { setup: setup2, teardown: teardown2 };
|
|
37
|
+
async function setup2() {
|
|
38
|
+
const transportOptions = globalThis.__obsidianIntegrationTesting?.transportOptions;
|
|
39
|
+
setupResult = await (0, import_global_setup_core.coreSetup)({ populate: options?.populate?.(), transportOptions });
|
|
40
|
+
globalThis.__obsidianIntegrationTesting = {
|
|
41
|
+
...globalThis.__obsidianIntegrationTesting,
|
|
42
|
+
tempVaultPath: setupResult.tempVault.path,
|
|
43
|
+
transportOptions: setupResult.transportOptions
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
async function teardown2() {
|
|
47
|
+
await (0, import_global_setup_core.coreTeardown)(setupResult);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
33
50
|
function getTempVault() {
|
|
34
51
|
const tempVaultPath = globalThis.__obsidianIntegrationTesting?.tempVaultPath;
|
|
35
52
|
if (!tempVaultPath) {
|
|
@@ -42,23 +59,16 @@ function getTempVault() {
|
|
|
42
59
|
function getTransportOptions() {
|
|
43
60
|
return globalThis.__obsidianIntegrationTesting?.transportOptions;
|
|
44
61
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
...globalThis.__obsidianIntegrationTesting,
|
|
50
|
-
tempVaultPath: setupResult.tempVault.path,
|
|
51
|
-
transportOptions: setupResult.transportOptions
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
async function teardown() {
|
|
55
|
-
await (0, import_global_setup_core.coreTeardown)(setupResult);
|
|
56
|
-
}
|
|
62
|
+
const defaultGlobalSetup = createSetup();
|
|
63
|
+
const setup = defaultGlobalSetup.setup;
|
|
64
|
+
const teardown = defaultGlobalSetup.teardown;
|
|
65
|
+
var global_setup_default = setup;
|
|
57
66
|
// Annotate the CommonJS export names for ESM import in node:
|
|
58
67
|
0 && (module.exports = {
|
|
68
|
+
createSetup,
|
|
59
69
|
getTempVault,
|
|
60
70
|
getTransportOptions,
|
|
61
71
|
setup,
|
|
62
72
|
teardown
|
|
63
73
|
});
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2plc3QvZ2xvYmFsLXNldHVwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSmVzdCBnbG9iYWwgc2V0dXAgYW5kIHRlYXJkb3duIGFkYXB0ZXIuXG4gKlxuICogRGVsZWdhdGVzIHRvIHRoZSBmcmFtZXdvcmstYWdub3N0aWMgY29yZSBhbmQgYnJpZGdlcyBjb250ZXh0XG4gKiB0byB0ZXN0IHdvcmtlcnMgdmlhIGBnbG9iYWxUaGlzLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvcmVTZXR1cFJlc3VsdCB9IGZyb20gJy4uL2dsb2JhbC1zZXR1cC1jb3JlLmNqcyc7XG5pbXBvcnQgdHlwZSB7IFBvcHVsYXRlRmlsZXNQYXJhbXMgfSBmcm9tICcuLi90ZW1wLXZhdWx0LmNqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4uL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5cbmltcG9ydCB7XG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi4vY29udGV4dC1wcm92aWRlci5janMnO1xuaW1wb3J0IHtcbiAgY29yZVNldHVwLFxuICBjb3JlVGVhcmRvd25cbn0gZnJvbSAnLi4vZ2xvYmFsLXNldHVwLWNvcmUuY2pzJztcbmltcG9ydCB7IFRlbXBWYXVsdCB9IGZyb20gJy4uL3RlbXAtdmF1bHQuY2pzJztcblxuLyoqXG4gKiBTaGFwZSBvZiBgZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYC5cbiAqXG4gKiBDb25zdW1lcnMgbWF5IHByZS1wb3B1bGF0ZSBgdHJhbnNwb3J0T3B0aW9uc2AgYmVmb3JlIHRoZSBnbG9iYWwgc2V0dXAgcnVuc1xuICogKGUuZy4sIHZpYSBKZXN0IGNvbmZpZyBgZ2xvYmFsc2ApLiBUaGUgc2V0dXAgdGhlbiBhZGRzIGB0ZW1wVmF1bHRQYXRoYC5cbiAqL1xuaW50ZXJmYWNlIE9ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nR2xvYmFsIHtcbiAgLyoqIFRlbXAgdmF1bHQgcGF0aCwgc2V0IGJ5IHRoZSBnbG9iYWwgc2V0dXAgZm9yIHRlc3Qgd29ya2Vycy4gKi9cbiAgdGVtcFZhdWx0UGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogVHJhbnNwb3J0IG9wdGlvbnMuIFNldCBieSB0aGUgY29uc3VtZXIgYmVmb3JlIHNldHVwLCBvciBieSB0aGUgc2V0dXAgaXRzZWxmLiAqL1xuICB0cmFuc3BvcnRPcHRpb25zPzogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSB2YXJzLW9uLXRvcCAtLSBSZXF1aXJlZCBmb3IgYGRlY2xhcmUgZ2xvYmFsYCBhdWdtZW50YXRpb24uICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8qKlxuICAgKiBOYW1lc3BhY2UgZm9yIGFsbCBgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZ2AgZ2xvYmFsIHN0YXRlLlxuICAgKiBDb25zdW1lcnMgY29uZmlndXJlIHRyYW5zcG9ydCBvcHRpb25zIGhlcmU7IHRoZSBzZXR1cCBwb3B1bGF0ZXMgdGhlIHJlc3QuXG4gICAqL1xuICB2YXIgX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZzogT2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdHbG9iYWwgfCB1bmRlZmluZWQ7XG59XG4vKiBlc2xpbnQtZW5hYmxlIHZhcnMtb24tdG9wIC0tIEVuZCBvZiBgZGVjbGFyZSBnbG9iYWxgIGJsb2NrLiAqL1xuXG5zZXRUcmFuc3BvcnRPcHRpb25zUmVzb2x2ZXIoKCkgPT4gZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy50cmFuc3BvcnRPcHRpb25zKTtcbnNldFZhdWx0UGF0aFJlc29sdmVyKCgpID0+IGdsb2JhbFRoaXMuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8udGVtcFZhdWx0UGF0aCk7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGNyZWF0ZVNldHVwfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVTZXR1cE9wdGlvbnMge1xuICAvKipcbiAgICogUmV0dXJucyBmaWxlcy9mb2xkZXJzIHRvIHdyaXRlIGludG8gdGhlIHZhdWx0IGJlZm9yZSBPYnNpZGlhbiBvcGVucyBpdCAoc2VlXG4gICAqIHtAbGluayBDb3JlU2V0dXBQYXJhbXMucG9wdWxhdGV9KS4gQSB0aHVuayBzbyBsYXJnZSBmaXh0dXJlcyBhcmUgYnVpbHQgbGF6aWx5LFxuICAgKiBvbmNlLCBpbiB0aGUgc2V0dXAgcHJvY2Vzcy5cbiAgICovXG4gIHBvcHVsYXRlPyh0aGlzOiB2b2lkKTogUG9wdWxhdGVGaWxlc1BhcmFtcztcbn1cblxuLyoqXG4gKiBBIEplc3QgYGdsb2JhbFNldHVwYCAvIGBnbG9iYWxUZWFyZG93bmAgbW9kdWxlJ3MgYHNldHVwYCAvIGB0ZWFyZG93bmAgcGFpci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKZXN0R2xvYmFsU2V0dXAge1xuICBzZXR1cCh0aGlzOiB2b2lkKTogUHJvbWlzZTx2b2lkPjtcbiAgdGVhcmRvd24odGhpczogdm9pZCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIEplc3QgZ2xvYmFsIHNldHVwL3RlYXJkb3duIHBhaXIsIG9wdGlvbmFsbHkgcHJlLXBvcHVsYXRpbmcgdGhlIHZhdWx0XG4gKiBiZWZvcmUgT2JzaWRpYW4gb3BlbnMgaXQgXHUyMDE0IHVzZSB0aGlzIGZvciBhIGRlZGljYXRlZCBsYXJnZS12YXVsdC9wZXJmb3JtYW5jZVxuICogc2V0dXAuIFRoZSBwbGFpbiB7QGxpbmsgc2V0dXB9IC8ge0BsaW5rIHRlYXJkb3dufSBleHBvcnRzIGFyZSB0aGUgbm8tcG9wdWxhdGVcbiAqIGNhc2UgKGBjcmVhdGVTZXR1cCgpYCkuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBTZXR1cCBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIGBzZXR1cGAgYW5kIGB0ZWFyZG93bmAgZnVuY3Rpb25zIHRvIHJlLWV4cG9ydCBmcm9tIGEgYGdsb2JhbFNldHVwYCBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXR1cChvcHRpb25zPzogQ3JlYXRlU2V0dXBPcHRpb25zKTogSmVzdEdsb2JhbFNldHVwIHtcbiAgbGV0IHNldHVwUmVzdWx0OiBDb3JlU2V0dXBSZXN1bHQgfCB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHsgc2V0dXAsIHRlYXJkb3duIH07XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2V0dXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdHJhbnNwb3J0T3B0aW9ucyA9IGdsb2JhbFRoaXMuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8udHJhbnNwb3J0T3B0aW9ucztcblxuICAgIHNldHVwUmVzdWx0ID0gYXdhaXQgY29yZVNldHVwKHsgcG9wdWxhdGU6IG9wdGlvbnM/LnBvcHVsYXRlPy4oKSwgdHJhbnNwb3J0T3B0aW9ucyB9KTtcblxuICAgIGdsb2JhbFRoaXMuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZyA9IHtcbiAgICAgIC4uLmdsb2JhbFRoaXMuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZyxcbiAgICAgIHRlbXBWYXVsdFBhdGg6IHNldHVwUmVzdWx0LnRlbXBWYXVsdC5wYXRoLFxuICAgICAgdHJhbnNwb3J0T3B0aW9uczogc2V0dXBSZXN1bHQudHJhbnNwb3J0T3B0aW9uc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB0ZWFyZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBjb3JlVGVhcmRvd24oc2V0dXBSZXN1bHQpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdGVtcG9yYXJ5IHZhdWx0IHByb3ZpZGVkIGJ5IHRoZSBnbG9iYWwgc2V0dXAuXG4gKlxuICogUmVhZHMgdGhlIHZhdWx0IHBhdGggZnJvbSBgZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnRlbXBWYXVsdFBhdGhgLFxuICogd2hpY2ggaXMgc2V0IGJ5IHRoZSBKZXN0IGdsb2JhbCBzZXR1cC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdGVtcG9yYXJ5IHZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcFZhdWx0KCk6IFRlbXBWYXVsdCB7XG4gIGNvbnN0IHRlbXBWYXVsdFBhdGggPSBnbG9iYWxUaGlzLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc/LnRlbXBWYXVsdFBhdGg7XG4gIGlmICghdGVtcFZhdWx0UGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdnbG9iYWxUaGlzLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmcudGVtcFZhdWx0UGF0aCBpcyBub3Qgc2V0LiBEaWQgeW91IGNvbmZpZ3VyZSBvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nL2plc3QtZ2xvYmFsLXNldHVwIGFzIGEgSmVzdCBnbG9iYWxTZXR1cD8nXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbmV3IFRlbXBWYXVsdCh0ZW1wVmF1bHRQYXRoKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cmFuc3BvcnQgb3B0aW9ucyBwcm92aWRlZCBieSB0aGUgZ2xvYmFsIHNldHVwLlxuICpcbiAqIEByZXR1cm5zIFRoZSB0cmFuc3BvcnQgb3B0aW9ucywgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGNvbmZpZ3VyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc3BvcnRPcHRpb25zKCk6IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnbG9iYWxUaGlzLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc/LnRyYW5zcG9ydE9wdGlvbnM7XG59XG5cbmNvbnN0IGRlZmF1bHRHbG9iYWxTZXR1cCA9IGNyZWF0ZVNldHVwKCk7XG5cbi8qKlxuICogSmVzdCBnbG9iYWwgc2V0dXAgZnVuY3Rpb24gKG5vIHByZS1wb3B1bGF0aW9uKS5cbiAqXG4gKiBDb3BpZXMgdGhlIGJ1aWx0IHBsdWdpbiBpbnRvIGEgdGVtcG9yYXJ5IHZhdWx0LCBlbmFibGVzIGl0IHZpYSB0aGUgT2JzaWRpYW4gQ0xJLFxuICogYW5kIHBvcHVsYXRlcyBgZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCBmb3IgdGVzdHMuXG4gKlxuICogVHJhbnNwb3J0IG9wdGlvbnMgYXJlIHJlYWQgZnJvbSBgZ2xvYmFsVGhpcy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnRyYW5zcG9ydE9wdGlvbnNgLlxuICogU2V0IHRoaXMgaW4geW91ciBKZXN0IGNvbmZpZyB2aWEgdGhlIGBnbG9iYWxzYCBvcHRpb24uXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBzZXR1cCBjb21wbGV0ZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXR1cCA9IGRlZmF1bHRHbG9iYWxTZXR1cC5zZXR1cDtcblxuLyoqXG4gKiBKZXN0IGdsb2JhbCB0ZWFyZG93biBmdW5jdGlvbi5cbiAqXG4gKiBSZW1vdmVzIHRoZSB0ZW1wb3JhcnkgdmF1bHQgY3JlYXRlZCBkdXJpbmcgc2V0dXAuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0ZWFyZG93biBjb21wbGV0ZXMuXG4gKi9cbmV4cG9ydCBjb25zdCB0ZWFyZG93biA9IGRlZmF1bHRHbG9iYWxTZXR1cC50ZWFyZG93bjtcblxuLy8gSmVzdCdzIGBnbG9iYWxTZXR1cGAgY29uZmlnIGNhbiByZWZlcmVuY2UgdGhpcyBtb2R1bGUgZGlyZWN0bHkgYmVjYXVzZSBpdHMgZGVmYXVsdCBleHBvcnQgaXMgdGhlIHNldHVwIGZ1bmN0aW9uLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0IC0tIEplc3QncyBnbG9iYWxTZXR1cCBsb2FkZXIgcmVxdWlyZXMgYSBkZWZhdWx0LWV4cG9ydCBmdW5jdGlvbi5cbmV4cG9ydCBkZWZhdWx0IHNldHVwO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFlQSw4QkFHTztBQUNQLCtCQUdPO0FBQ1Asd0JBQTBCO0FBQUEsSUEwQjFCLHFEQUE0QixNQUFNLFdBQVcsOEJBQThCLGdCQUFnQjtBQUFBLElBQzNGLDhDQUFxQixNQUFNLFdBQVcsOEJBQThCLGFBQWE7QUErQjFFLFNBQVMsWUFBWSxTQUErQztBQUN6RSxNQUFJO0FBRUosU0FBTyxFQUFFLE9BQUFBLFFBQU8sVUFBQUMsVUFBUztBQUV6QixpQkFBZUQsU0FBdUI7QUFDcEMsVUFBTSxtQkFBbUIsV0FBVyw4QkFBOEI7QUFFbEUsa0JBQWMsVUFBTSxvQ0FBVSxFQUFFLFVBQVUsU0FBUyxXQUFXLEdBQUcsaUJBQWlCLENBQUM7QUFFbkYsZUFBVywrQkFBK0I7QUFBQSxNQUN4QyxHQUFHLFdBQVc7QUFBQSxNQUNkLGVBQWUsWUFBWSxVQUFVO0FBQUEsTUFDckMsa0JBQWtCLFlBQVk7QUFBQSxJQUNoQztBQUFBLEVBQ0Y7QUFFQSxpQkFBZUMsWUFBMEI7QUFDdkMsY0FBTSx1Q0FBYSxXQUFXO0FBQUEsRUFDaEM7QUFDRjtBQVVPLFNBQVMsZUFBMEI7QUFDeEMsUUFBTSxnQkFBZ0IsV0FBVyw4QkFBOEI7QUFDL0QsTUFBSSxDQUFDLGVBQWU7QUFDbEIsVUFBTSxJQUFJO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTyxJQUFJLDRCQUFVLGFBQWE7QUFDcEM7QUFPTyxTQUFTLHNCQUE0RDtBQUMxRSxTQUFPLFdBQVcsOEJBQThCO0FBQ2xEO0FBRUEsTUFBTSxxQkFBcUIsWUFBWTtBQWFoQyxNQUFNLFFBQVEsbUJBQW1CO0FBU2pDLE1BQU0sV0FBVyxtQkFBbUI7QUFJM0MsSUFBTyx1QkFBUTsiLAogICJuYW1lcyI6IFsic2V0dXAiLCAidGVhcmRvd24iXQp9Cg==
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* Delegates to the framework-agnostic core and bridges context
|
|
7
7
|
* to test workers via `globalThis.__obsidianIntegrationTesting`.
|
|
8
8
|
*/
|
|
9
|
+
import type { PopulateFilesParams } from '../temp-vault.cjs';
|
|
9
10
|
import type { ObsidianTransportOptions } from '../transport-options.cjs';
|
|
10
11
|
import { TempVault } from '../temp-vault.cjs';
|
|
11
12
|
/**
|
|
@@ -27,6 +28,34 @@ declare global {
|
|
|
27
28
|
*/
|
|
28
29
|
var __obsidianIntegrationTesting: ObsidianIntegrationTestingGlobal | undefined;
|
|
29
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Options for {@link createSetup}.
|
|
33
|
+
*/
|
|
34
|
+
export interface CreateSetupOptions {
|
|
35
|
+
/**
|
|
36
|
+
* Returns files/folders to write into the vault before Obsidian opens it (see
|
|
37
|
+
* {@link CoreSetupParams.populate}). A thunk so large fixtures are built lazily,
|
|
38
|
+
* once, in the setup process.
|
|
39
|
+
*/
|
|
40
|
+
populate?(this: void): PopulateFilesParams;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* A Jest `globalSetup` / `globalTeardown` module's `setup` / `teardown` pair.
|
|
44
|
+
*/
|
|
45
|
+
export interface JestGlobalSetup {
|
|
46
|
+
setup(this: void): Promise<void>;
|
|
47
|
+
teardown(this: void): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Creates a Jest global setup/teardown pair, optionally pre-populating the vault
|
|
51
|
+
* before Obsidian opens it — use this for a dedicated large-vault/performance
|
|
52
|
+
* setup. The plain {@link setup} / {@link teardown} exports are the no-populate
|
|
53
|
+
* case (`createSetup()`).
|
|
54
|
+
*
|
|
55
|
+
* @param options - Setup options.
|
|
56
|
+
* @returns The `setup` and `teardown` functions to re-export from a `globalSetup` module.
|
|
57
|
+
*/
|
|
58
|
+
export declare function createSetup(options?: CreateSetupOptions): JestGlobalSetup;
|
|
30
59
|
/**
|
|
31
60
|
* Returns the temporary vault provided by the global setup.
|
|
32
61
|
*
|
|
@@ -43,19 +72,23 @@ export declare function getTempVault(): TempVault;
|
|
|
43
72
|
*/
|
|
44
73
|
export declare function getTransportOptions(): ObsidianTransportOptions | undefined;
|
|
45
74
|
/**
|
|
46
|
-
* Jest global setup function.
|
|
75
|
+
* Jest global setup function (no pre-population).
|
|
47
76
|
*
|
|
48
77
|
* Copies the built plugin into a temporary vault, enables it via the Obsidian CLI,
|
|
49
78
|
* and populates `globalThis.__obsidianIntegrationTesting` for tests.
|
|
50
79
|
*
|
|
51
80
|
* Transport options are read from `globalThis.__obsidianIntegrationTesting.transportOptions`.
|
|
52
81
|
* Set this in your Jest config via the `globals` option.
|
|
82
|
+
*
|
|
83
|
+
* @returns A promise that resolves when setup completes.
|
|
53
84
|
*/
|
|
54
|
-
export declare
|
|
85
|
+
export declare const setup: (this: void) => Promise<void>;
|
|
55
86
|
/**
|
|
56
87
|
* Jest global teardown function.
|
|
57
88
|
*
|
|
58
89
|
* Removes the temporary vault created during setup.
|
|
90
|
+
*
|
|
91
|
+
* @returns A promise that resolves when teardown completes.
|
|
59
92
|
*/
|
|
60
|
-
export declare
|
|
61
|
-
export
|
|
93
|
+
export declare const teardown: (this: void) => Promise<void>;
|
|
94
|
+
export default setup;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var global_teardown_exports = {};
|
|
20
|
+
__export(global_teardown_exports, {
|
|
21
|
+
default: () => global_teardown_default
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(global_teardown_exports);
|
|
24
|
+
var import_global_setup = require("./global-setup.cjs");
|
|
25
|
+
var global_teardown_default = import_global_setup.teardown;
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2plc3QvZ2xvYmFsLXRlYXJkb3duLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSmVzdCBnbG9iYWwgdGVhcmRvd24gZW50cnkgcG9pbnQuXG4gKlxuICogSmVzdCByZXF1aXJlcyBgZ2xvYmFsVGVhcmRvd25gIHRvIGJlIGEgc2VwYXJhdGUgbW9kdWxlIHdob3NlIGRlZmF1bHQgZXhwb3J0IGlzXG4gKiB0aGUgdGVhcmRvd24gZnVuY3Rpb24uIEl0IHJlLWV4cG9ydHMgdGhlIHRlYXJkb3duIGZyb20gdGhlIHNldHVwIG1vZHVsZSBzbyBib3RoXG4gKiBzaGFyZSB0aGUgc2FtZSBzZXR1cCBzdGF0ZSB3aXRoaW4gdGhlIEplc3QgcGFyZW50IHByb2Nlc3MuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgdGVhcmRvd24gY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB7IHRlYXJkb3duIH0gZnJvbSAnLi9nbG9iYWwtc2V0dXAuY2pzJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0IC0tIEplc3QncyBnbG9iYWxUZWFyZG93biBsb2FkZXIgcmVxdWlyZXMgYSBkZWZhdWx0LWV4cG9ydCBmdW5jdGlvbi5cbmV4cG9ydCBkZWZhdWx0IHRlYXJkb3duO1xuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLDBCQUF5QjtBQUd6QixJQUFPLDBCQUFROyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Jest global teardown entry point.
|
|
5
|
+
*
|
|
6
|
+
* Jest requires `globalTeardown` to be a separate module whose default export is
|
|
7
|
+
* the teardown function. It re-exports the teardown from the setup module so both
|
|
8
|
+
* share the same setup state within the Jest parent process.
|
|
9
|
+
*/
|
|
10
|
+
import { teardown } from './global-setup.cjs';
|
|
11
|
+
export default teardown;
|
package/dist/lib/cjs/library.cjs
CHANGED
|
@@ -21,7 +21,7 @@ __export(library_exports, {
|
|
|
21
21
|
LIBRARY_VERSION: () => LIBRARY_VERSION
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(library_exports);
|
|
24
|
-
const LIBRARY_VERSION = false ? "dev" : "4.
|
|
24
|
+
const LIBRARY_VERSION = false ? "dev" : "4.3.0";
|
|
25
25
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
26
|
0 && (module.exports = {
|
|
27
27
|
LIBRARY_VERSION
|
|
@@ -144,4 +144,4 @@ ${this.serializeError(error.cause, depth + 1)}`;
|
|
|
144
144
|
0 && (module.exports = {
|
|
145
145
|
ensureNamespaceBootstrapped
|
|
146
146
|
});
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hbWVzcGFjZS1ib290c3RyYXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCb290c3RyYXBzIHRoZSBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIG5hbWVzcGFjZSBpbiB0aGVcbiAqIE9ic2lkaWFuIHByb2Nlc3MuIEV4dHJhY3RlZCB0byBpdHMgb3duIG1vZHVsZSB0byBhdm9pZCBkZXBlbmRlbmN5IGN5Y2xlc1xuICogYmV0d2VlbiBgZXZhbC1pbi1vYnNpZGlhbi50c2AgYW5kIHRoZSB0cmFuc3BvcnQgbW9kdWxlcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFBhcmFtcyB9IGZyb20gJy4vZ2VuZXJhdGUtZnVuY3Rpb24tY2FsbC5janMnO1xuaW1wb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuaW1wb3J0IHsgZ2VuZXJhdGVGdW5jdGlvbkNhbGwgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwuY2pzJztcbmltcG9ydCB7IExJQlJBUllfVkVSU0lPTiB9IGZyb20gJy4vbGlicmFyeS5janMnO1xuXG5pbnRlcmZhY2UgQm9vdHN0cmFwTmFtZXNwYWNlUGFyYW1zIHtcbiAgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhlIGB3aW5kb3cuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ2AgbmFtZXNwYWNlIGlzIGJvb3RzdHJhcHBlZFxuICogaW4gdGhlIE9ic2lkaWFuIHByb2Nlc3Mgd2l0aCB0aGUgY3VycmVudCBsaWJyYXJ5IHZlcnNpb24uXG4gKlxuICogUGVyZm9ybXMgYSBsaWdodHdlaWdodCB2ZXJzaW9uIGNoZWNrIHZpYSB0aGUgdHJhbnNwb3J0LiBJZiB0aGUgbmFtZXNwYWNlXG4gKiBkb2Vzbid0IGV4aXN0IG9yIGhhcyBhIGRpZmZlcmVudCB2ZXJzaW9uLCBzZW5kcyB0aGUgZnVsbCBib290c3RyYXAgZXhwcmVzc2lvblxuICogdG8gcmVnaXN0ZXIgYWxsIGhlbHBlciBmdW5jdGlvbnMuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9ydCAtIFRoZSB0cmFuc3BvcnQgdG8gdXNlIGZvciBldmFsdWF0aW9uLlxuICogQHBhcmFtIGN3ZCAtIFRoZSB3b3JraW5nIGRpcmVjdG9yeSAodmF1bHQgcGF0aCkuXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gT3B0aW9uYWwgcGVyLWV2YWwgdGltZW91dC4gRm9yd2FyZGVkIHRvIGJvdGhcbiAqICAgdGhlIHZlcnNpb24gY2hlY2sgYW5kIHRoZSBib290c3RyYXAgZXZhbCBzbyBhIGh1bmcgYG9ic2lkaWFuIGV2YWxgIHJlamVjdHNcbiAqICAgaW5zdGVhZCBvZiBibG9ja2luZyB0aGUgY2FsbGVyIGluZGVmaW5pdGVseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0cmFuc3BvcnQ6IE9ic2lkaWFuVHJhbnNwb3J0LCBjd2Q6IHN0cmluZywgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGV2YWxPcHRpb25zOiBUcmFuc3BvcnRFdmFsT3B0aW9ucyA9IHtcbiAgICBjd2QsXG4gICAgLi4uKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgdGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gIH07XG4gIGNvbnN0IHZlcnNpb25Kc29uID0gSlNPTi5zdHJpbmdpZnkoTElCUkFSWV9WRVJTSU9OKTtcbiAgY29uc3QgY2hlY2tSZXN1bHQgPSBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoXG4gICAgYEpTT04uc3RyaW5naWZ5KHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy52ZXJzaW9uID09PSAke3ZlcnNpb25Kc29ufSlgLFxuICAgIGV2YWxPcHRpb25zXG4gICk7XG5cbiAgaWYgKGNoZWNrUmVzdWx0ID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBib290c3RyYXBFeHByID0gZ2VuZXJhdGVGdW5jdGlvbkNhbGwoYm9vdHN0cmFwTmFtZXNwYWNlLCB7IHZlcnNpb246IExJQlJBUllfVkVSU0lPTiB9KTtcbiAgYXdhaXQgdHJhbnNwb3J0LmV2YWx1YXRlKGJvb3RzdHJhcEV4cHIsIGV2YWxPcHRpb25zKTtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgdmlhIHRvU3RyaW5nKCkgYW5kIGV4ZWN1dGVkIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcywgbm90IGluIE5vZGUuIENvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMuICovXG5cbi8qKlxuICogQm9vdHN0cmFwcyB0aGUgYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCBuYW1lc3BhY2Ugd2l0aCBhbGxcbiAqIGhlbHBlciBmdW5jdGlvbnMuIFNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgc2VudCB0byBPYnNpZGlhbiBvbmNlXG4gKiBwZXIgbGlicmFyeSB2ZXJzaW9uLlxuICpcbiAqIFByZXNlcnZlcyBgY29udGV4dHNgIGFjcm9zcyB2ZXJzaW9uIHVwZ3JhZGVzIHNvIGxpdmUge0BsaW5rIENvbnRleHRJZH1cbiAqIHJlZmVyZW5jZXMgc3Vydml2ZS5cbiAqXG4gKiBNdXN0IE5PVCByZWZlcmVuY2UgYW55IG91dGVyIHNjb3BlIFx1MjAxNCBpdCBpcyBzZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAuXG4gKlxuICogQHBhcmFtIGJvb3RzdHJhcFBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGluY2x1ZGluZyB0aGUgbGlicmFyeSB2ZXJzaW9uLlxuICovXG5mdW5jdGlvbiBib290c3RyYXBOYW1lc3BhY2UoYm9vdHN0cmFwUGFyYW1zOiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFBhcmFtczxCb290c3RyYXBOYW1lc3BhY2VQYXJhbXM+KTogdm9pZCB7XG4gIGludGVyZmFjZSBJbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXIge1xuICAgIF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc6IEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZVN0YXRlO1xuICB9XG5cbiAgaW50ZXJmYWNlIEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZVN0YXRlIHtcbiAgICBjb250ZXh0czogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICAgIG9ic2lkaWFuTW9kdWxlPzogdW5rbm93bjtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gIH1cblxuICBpbnRlcmZhY2UgSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlIGV4dGVuZHMgSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlU3RhdGUge1xuICAgIHJlYWRvbmx5IGFwcDogQXBwO1xuICAgIGRlc3Ryb3lDdXJyZW50V2luZG93KCk6IFByb21pc2U8dm9pZD47XG4gICAgZW5zdXJlTGF5b3V0UmVhZHkoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBldmFsV3JhcHBlcihuc1BhcmFtczogRXZhbFdyYXBwZXJQYXJhbXMpOiBQcm9taXNlPHN0cmluZz47XG4gICAgZ2V0T2JzaWRpYW5Nb2R1bGUoKTogUHJvbWlzZTx1bmtub3duPjtcbiAgICBpcGNTZW5kU3luYyhuc1BhcmFtczogSXBjU2VuZFN5bmNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHBvbGxWYXVsdEJhc2VQYXRoKCk6IFByb21pc2U8c3RyaW5nPjtcbiAgICBzZXJpYWxpemVFcnJvcihlcnJvcjogdW5rbm93biwgZGVwdGg/OiBudW1iZXIpOiBzdHJpbmc7XG4gICAgc2V0TG9jYWxTdG9yYWdlSXRlbShuc1BhcmFtczogU2V0TG9jYWxTdG9yYWdlSXRlbVBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIH1cblxuICBpbnRlcmZhY2UgRXZhbFdyYXBwZXJQYXJhbXMge1xuICAgIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnRleHRJZD86IHN0cmluZztcbiAgICBmbihmbkFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdW5rbm93bjtcbiAgfVxuXG4gIGludGVyZmFjZSBGaWxlU3lzdGVtQWRhcHRlckxpa2Uge1xuICAgIGdldEJhc2VQYXRoKCk6IHN0cmluZztcbiAgfVxuXG4gIGludGVyZmFjZSBJcGNTZW5kU3luY1BhcmFtcyB7XG4gICAgYXJnczogdW5rbm93bltdO1xuICAgIGNoYW5uZWw6IHN0cmluZztcbiAgfVxuXG4gIGludGVyZmFjZSBTZXRMb2NhbFN0b3JhZ2VJdGVtUGFyYW1zIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGF5IChpbiBtcykgYmVmb3JlIGludm9raW5nIGBlbGVjdHJvbldpbmRvdy5kZXN0cm95KClgIHNvIHRoZSBldmFsIHRoYXRcbiAgICogdHJpZ2dlcmVkIHRoZSBjYWxsIGhhcyB0aW1lIHRvIHJldHVybiBpdHMgcmVzdWx0IHRvIHRoZSBjYWxsZXIuIFdpdGhvdXRcbiAgICogaXQgdGhlIHJlbmRlcmVyIGRpZXMgYmVmb3JlIHRoZSBJUEMgcmVwbHkgc2hpcHMsIHRoZSBjYWxsZXIgd2FpdHMgZm9yIHRoZVxuICAgKiBmdWxsIGV2YWwgdGltZW91dCwgYW5kIHN0YWxlIGBCcm93c2VyV2luZG93YCBlbnRyaWVzIHBpbGUgdXAuXG4gICAqL1xuICBjb25zdCBERVNUUk9ZX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDUwO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCAtLSBBcHByb3ZlZCBkb3VibGUgY2FzdDogYF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIGlzIG91ciBpbnRlcm5hbCBXaW5kb3cgYXVnbWVudGF0aW9uLCBpbnRlbnRpb25hbGx5IGtlcHQgbG9jYWwgKG5vdCBkZWNsYXJlZCBnbG9iYWxseSkgdG8gYXZvaWQgbGVha2luZyBpbnRvIGNvbnN1bWVyIHR5cGVzLlxuICBjb25zdCBob2xkZXIgPSB3aW5kb3cgYXMgdW5rbm93biBhcyBQYXJ0aWFsPEludGVncmF0aW9uVGVzdGluZ0hvbGRlcj47XG4gIGNvbnN0IGV4aXN0aW5nQ29udGV4dHMgPSBob2xkZXIuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8uY29udGV4dHMgPz8ge307XG4gIGNvbnN0IGV4aXN0aW5nT2JzaWRpYW5Nb2R1bGUgPSBob2xkZXIuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8ub2JzaWRpYW5Nb2R1bGU7XG5cbiAgY29uc3QgbnM6IEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZSA9IHtcbiAgICBnZXQgYXBwKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kZXByZWNhdGVkIC0tIGBhcHBgIGdldHRlciByZWFkcyBgd2luZG93LmFwcGAgd2hpY2ggaXMgc2V0IGJ5IE9ic2lkaWFuLlxuICAgICAgcmV0dXJuIHdpbmRvdy5hcHA7XG4gICAgfSxcblxuICAgIGNvbnRleHRzOiBleGlzdGluZ0NvbnRleHRzLFxuXG4gICAgYXN5bmMgZGVzdHJveUN1cnJlbnRXaW5kb3codGhpczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCB0aGlzLmVuc3VyZUxheW91dFJlYWR5KCk7XG4gICAgICBhd2FpdCBzbGVlcCgwKTtcbiAgICAgIGNvbnN0IGVsZWN0cm9uV2luZG93ID0gd2luZG93LmVsZWN0cm9uV2luZG93O1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVjdHJvbldpbmRvdy5kZXN0cm95KCk7XG4gICAgICB9LCBERVNUUk9ZX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVuc3VyZUxheW91dFJlYWR5KHRoaXM6IEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkocmVzb2x2ZSk7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZXZhbFdyYXBwZXIodGhpczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlLCBwYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgaWYgKCF0aGlzLmFwcC5wbHVnaW5zLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwLnBsdWdpbnMuc2V0RW5hYmxlKHRydWUpO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2JzaWRpYW5Nb2R1bGUgPSBhd2FpdCB0aGlzLmdldE9ic2lkaWFuTW9kdWxlKCk7XG4gICAgICBjb25zdCBjb250ZXh0ID0gcGFyYW1zLmNvbnRleHRJZFxuICAgICAgICA/ICh0aGlzLmNvbnRleHRzW3BhcmFtcy5jb250ZXh0SWRdID8/PSB7fSlcbiAgICAgICAgOiB7fTtcbiAgICAgIGNvbnN0IGZ1bGxBcmdzID0geyAuLi5wYXJhbXMuYXJncywgYXBwOiB0aGlzLmFwcCwgY29udGV4dCwgb2JzaWRpYW5Nb2R1bGUgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBhcmFtcy5mbihmdWxsQXJncyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICd1bmRlZmluZWQnIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IHZhbHVlOiByZXN1bHQgfSk7XG4gICAgICB9IGNhdGNoIChldmFsRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ2Vycm9yJywgdmFsdWU6IHRoaXMuc2VyaWFsaXplRXJyb3IoZXZhbEVycm9yKSB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T2JzaWRpYW5Nb2R1bGUodGhpczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICBpZiAodGhpcy5vYnNpZGlhbk1vZHVsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vYnNpZGlhbk1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICAgICAgY29uc3QgcmFuZG9tU3VmZml4ID0gU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKFNMSUNFX1NUQVJUKTtcbiAgICAgIGNvbnN0IHRlbXBNb2R1bGVOYW1lID0gYGdldC1vYnNpZGlhbi1tb2R1bGUtJHtyYW5kb21TdWZmaXh9YDtcbiAgICAgIGNvbnN0IGRpciA9IGAke3RoaXMuYXBwLnZhdWx0LmNvbmZpZ0Rpcn0vcGx1Z2lucy8ke3RlbXBNb2R1bGVOYW1lfWA7XG4gICAgICB0aGlzLmFwcC5wbHVnaW5zLm1hbmlmZXN0c1t0ZW1wTW9kdWxlTmFtZV0gPSB7XG4gICAgICAgIGF1dGhvcjogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgZGlyLFxuICAgICAgICBpZDogdGVtcE1vZHVsZU5hbWUsXG4gICAgICAgIGlzRGVza3RvcE9ubHk6IGZhbHNlLFxuICAgICAgICBtaW5BcHBWZXJzaW9uOiAnJyxcbiAgICAgICAgbmFtZTogdGVtcE1vZHVsZU5hbWUsXG4gICAgICAgIHZlcnNpb246ICcnXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5ta2RpcihkaXIpO1xuXG4gICAgICBjb25zdCBwbHVnaW5GbkJvZHkgPSAnY29uc3Qgcj1yZXF1aXJlLGU9ZXhwb3J0cztjb25zdCBtPXIoXFwnb2JzaWRpYW5cXCcpO3dpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLm9ic2lkaWFuTW9kdWxlPW07ZS5kZWZhdWx0PW0uUGx1Z2luOyc7XG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLndyaXRlKGAke2Rpcn0vbWFpbi5qc2AsIHBsdWdpbkZuQm9keSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuYXBwLnBsdWdpbnMubG9hZFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG4gICAgICBhd2FpdCB0aGlzLmFwcC5wbHVnaW5zLnVuaW5zdGFsbFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG5cbiAgICAgIGlmICh0aGlzLm9ic2lkaWFuTW9kdWxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9ic2lkaWFuTW9kdWxlO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG9ic2lkaWFuIG1vZHVsZScpO1xuICAgIH0sXG5cbiAgICBhc3luYyBpcGNTZW5kU3luYyh0aGlzOiBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UsIHBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVMYXlvdXRSZWFkeSgpO1xuICAgICAgd2luZG93LmVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKHBhcmFtcy5jaGFubmVsLCAuLi5wYXJhbXMuYXJncyk7XG4gICAgfSxcblxuICAgIG9ic2lkaWFuTW9kdWxlOiBleGlzdGluZ09ic2lkaWFuTW9kdWxlLFxuXG4gICAgYXN5bmMgcG9sbFZhdWx0QmFzZVBhdGgodGhpczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlTGF5b3V0UmVhZHkoKTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIERhdGFBZGFwdGVyIGlzIGFjdHVhbGx5IEZpbGVTeXN0ZW1BZGFwdGVyIGF0IHJ1bnRpbWUgb24gZGVza3RvcC5cbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSgodGhpcy5hcHAudmF1bHQuYWRhcHRlciBhcyB1bmtub3duIGFzIEZpbGVTeXN0ZW1BZGFwdGVyTGlrZSkuZ2V0QmFzZVBhdGgoKSk7XG4gICAgfSxcblxuICAgIHNlcmlhbGl6ZUVycm9yKHRoaXM6IEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZSwgZXJyb3I6IHVua25vd24sIGRlcHRoID0gMCk6IHN0cmluZyB7XG4gICAgICBjb25zdCBDQVVTRV9JTkRFTlRfU0laRSA9IDI7XG4gICAgICBjb25zdCBpbmRlbnQgPSAnICcucmVwZWF0KGRlcHRoICogQ0FVU0VfSU5ERU5UX1NJWkUpO1xuXG4gICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICByZXR1cm4gYCR7aW5kZW50fSR7U3RyaW5nKGVycm9yKX1gO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFja09yTWVzc2FnZSA9IGVycm9yLnN0YWNrID8/IGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICAgIGxldCByZXN1bHQgPSBzdGFja09yTWVzc2FnZS5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiBgJHtpbmRlbnR9JHtsaW5lfWApLmpvaW4oJ1xcbicpO1xuXG4gICAgICBpZiAoZXJyb3IuY2F1c2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgKz0gYFxcbiR7aW5kZW50fVtjYXVzZV06YDtcbiAgICAgICAgcmVzdWx0ICs9IGBcXG4ke3RoaXMuc2VyaWFsaXplRXJyb3IoZXJyb3IuY2F1c2UsIGRlcHRoICsgMSl9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgc2V0TG9jYWxTdG9yYWdlSXRlbSh0aGlzOiBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UsIHBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVMYXlvdXRSZWFkeSgpO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0ocGFyYW1zLmtleSwgcGFyYW1zLnZhbHVlKTtcbiAgICB9LFxuXG4gICAgdmVyc2lvbjogYm9vdHN0cmFwUGFyYW1zLnZlcnNpb25cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gQXBwcm92ZWQgZG91YmxlIGNhc3Q6IGBfX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCBpcyBvdXIgaW50ZXJuYWwgV2luZG93IGF1Z21lbnRhdGlvbiwgaW50ZW50aW9uYWxseSBrZXB0IGxvY2FsIChub3QgZGVjbGFyZWQgZ2xvYmFsbHkpIHRvIGF2b2lkIGxlYWtpbmcgaW50byBjb25zdW1lciB0eXBlcy5cbiAgKHdpbmRvdyBhcyB1bmtub3duIGFzIFBhcnRpYWw8SW50ZWdyYXRpb25UZXN0aW5nSG9sZGVyPikuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZyA9IG5zO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdCQSxvQ0FBcUM7QUFDckMscUJBQWdDO0FBb0JoQyxlQUFzQiw0QkFBNEIsV0FBOEIsS0FBYSx1QkFBK0M7QUFDMUksUUFBTSxjQUFvQztBQUFBLElBQ3hDO0FBQUEsSUFDQSxHQUFJLDBCQUEwQixVQUFhLEVBQUUsc0JBQXNCO0FBQUEsRUFDckU7QUFDQSxRQUFNLGNBQWMsS0FBSyxVQUFVLDhCQUFlO0FBQ2xELFFBQU0sY0FBYyxNQUFNLFVBQVU7QUFBQSxJQUNsQyxtRUFBbUUsV0FBVztBQUFBLElBQzlFO0FBQUEsRUFDRjtBQUVBLE1BQUksZ0JBQWdC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
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hbWVzcGFjZS1ib290c3RyYXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCb290c3RyYXBzIHRoZSBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIG5hbWVzcGFjZSBpbiB0aGVcbiAqIE9ic2lkaWFuIHByb2Nlc3MuIEV4dHJhY3RlZCB0byBpdHMgb3duIG1vZHVsZSB0byBhdm9pZCBkZXBlbmRlbmN5IGN5Y2xlc1xuICogYmV0d2VlbiBgZXZhbC1pbi1vYnNpZGlhbi50c2AgYW5kIHRoZSB0cmFuc3BvcnQgbW9kdWxlcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFBhcmFtcyB9IGZyb20gJy4vZ2VuZXJhdGUtZnVuY3Rpb24tY2FsbC5janMnO1xuaW1wb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuaW1wb3J0IHsgZ2VuZXJhdGVGdW5jdGlvbkNhbGwgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwuY2pzJztcbmltcG9ydCB7IExJQlJBUllfVkVSU0lPTiB9IGZyb20gJy4vbGlicmFyeS5janMnO1xuXG5pbnRlcmZhY2UgQm9vdHN0cmFwTmFtZXNwYWNlUGFyYW1zIHtcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhlIGB3aW5kb3cuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ2AgbmFtZXNwYWNlIGlzIGJvb3RzdHJhcHBlZFxuICogaW4gdGhlIE9ic2lkaWFuIHByb2Nlc3Mgd2l0aCB0aGUgY3VycmVudCBsaWJyYXJ5IHZlcnNpb24uXG4gKlxuICogUGVyZm9ybXMgYSBsaWdodHdlaWdodCB2ZXJzaW9uIGNoZWNrIHZpYSB0aGUgdHJhbnNwb3J0LiBJZiB0aGUgbmFtZXNwYWNlXG4gKiBkb2Vzbid0IGV4aXN0IG9yIGhhcyBhIGRpZmZlcmVudCB2ZXJzaW9uLCBzZW5kcyB0aGUgZnVsbCBib290c3RyYXAgZXhwcmVzc2lvblxuICogdG8gcmVnaXN0ZXIgYWxsIGhlbHBlciBmdW5jdGlvbnMuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9ydCAtIFRoZSB0cmFuc3BvcnQgdG8gdXNlIGZvciBldmFsdWF0aW9uLlxuICogQHBhcmFtIGN3ZCAtIFRoZSB3b3JraW5nIGRpcmVjdG9yeSAodmF1bHQgcGF0aCkuXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gT3B0aW9uYWwgcGVyLWV2YWwgdGltZW91dC4gRm9yd2FyZGVkIHRvIGJvdGhcbiAqICAgdGhlIHZlcnNpb24gY2hlY2sgYW5kIHRoZSBib290c3RyYXAgZXZhbCBzbyBhIGh1bmcgYG9ic2lkaWFuIGV2YWxgIHJlamVjdHNcbiAqICAgaW5zdGVhZCBvZiBibG9ja2luZyB0aGUgY2FsbGVyIGluZGVmaW5pdGVseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0cmFuc3BvcnQ6IE9ic2lkaWFuVHJhbnNwb3J0LCBjd2Q6IHN0cmluZywgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGV2YWxPcHRpb25zOiBUcmFuc3BvcnRFdmFsT3B0aW9ucyA9IHtcbiAgICBjd2QsXG4gICAgLi4uKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgdGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gIH07XG4gIGNvbnN0IHZlcnNpb25Kc29uID0gSlNPTi5zdHJpbmdpZnkoTElCUkFSWV9WRVJTSU9OKTtcbiAgY29uc3QgY2hlY2tSZXN1bHQgPSBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoXG4gICAgYEpTT04uc3RyaW5naWZ5KHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy52ZXJzaW9uID09PSAke3ZlcnNpb25Kc29ufSlgLFxuICAgIGV2YWxPcHRpb25zXG4gICk7XG5cbiAgaWYgKGNoZWNrUmVzdWx0ID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBib290c3RyYXBFeHByID0gZ2VuZXJhdGVGdW5jdGlvbkNhbGwoYm9vdHN0cmFwTmFtZXNwYWNlLCB7IHZlcnNpb246IExJQlJBUllfVkVSU0lPTiB9KTtcbiAgYXdhaXQgdHJhbnNwb3J0LmV2YWx1YXRlKGJvb3RzdHJhcEV4cHIsIGV2YWxPcHRpb25zKTtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgdmlhIHRvU3RyaW5nKCkgYW5kIGV4ZWN1dGVkIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcywgbm90IGluIE5vZGUuIENvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMuICovXG5cbi8qKlxuICogQm9vdHN0cmFwcyB0aGUgYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCBuYW1lc3BhY2Ugd2l0aCBhbGxcbiAqIGhlbHBlciBmdW5jdGlvbnMuIFNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgc2VudCB0byBPYnNpZGlhbiBvbmNlXG4gKiBwZXIgbGlicmFyeSB2ZXJzaW9uLlxuICpcbiAqIFByZXNlcnZlcyBgY29udGV4dHNgIGFjcm9zcyB2ZXJzaW9uIHVwZ3JhZGVzIHNvIGxpdmUge0BsaW5rIENvbnRleHRJZH1cbiAqIHJlZmVyZW5jZXMgc3Vydml2ZS5cbiAqXG4gKiBNdXN0IE5PVCByZWZlcmVuY2UgYW55IG91dGVyIHNjb3BlIFx1MjAxNCBpdCBpcyBzZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAuXG4gKlxuICogQHBhcmFtIGJvb3RzdHJhcFBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGluY2x1ZGluZyB0aGUgbGlicmFyeSB2ZXJzaW9uLlxuICovXG5mdW5jdGlvbiBib290c3RyYXBOYW1lc3BhY2UoYm9vdHN0cmFwUGFyYW1zOiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFBhcmFtczxCb290c3RyYXBOYW1lc3BhY2VQYXJhbXM+KTogdm9pZCB7XG4gIGludGVyZmFjZSBJbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXIge1xuICAgIF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc6IEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZVN0YXRlO1xuICB9XG5cbiAgaW50ZXJmYWNlIEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZVN0YXRlIHtcbiAgICBjb250ZXh0czogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICAgIG9ic2lkaWFuTW9kdWxlPzogdW5rbm93bjtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gIH1cblxuICBpbnRlcmZhY2UgSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlIGV4dGVuZHMgSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlU3RhdGUge1xuICAgIHJlYWRvbmx5IGFwcDogQXBwO1xuICAgIGRlc3Ryb3lDdXJyZW50V2luZG93KCk6IFByb21pc2U8dm9pZD47XG4gICAgZW5zdXJlTGF5b3V0UmVhZHkoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBldmFsV3JhcHBlcihuc1BhcmFtczogRXZhbFdyYXBwZXJQYXJhbXMpOiBQcm9taXNlPHN0cmluZz47XG4gICAgZ2V0T2JzaWRpYW5Nb2R1bGUoKTogUHJvbWlzZTx1bmtub3duPjtcbiAgICBpcGNTZW5kU3luYyhuc1BhcmFtczogSXBjU2VuZFN5bmNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHBvbGxWYXVsdEJhc2VQYXRoKCk6IFByb21pc2U8c3RyaW5nPjtcbiAgICBzZXJpYWxpemVFcnJvcihlcnJvcjogdW5rbm93biwgZGVwdGg/OiBudW1iZXIpOiBzdHJpbmc7XG4gICAgc2V0TG9jYWxTdG9yYWdlSXRlbShuc1BhcmFtczogU2V0TG9jYWxTdG9yYWdlSXRlbVBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIH1cblxuICBpbnRlcmZhY2UgRXZhbFdyYXBwZXJQYXJhbXMge1xuICAgIHJlYWRvbmx5IGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJlYWRvbmx5IGNvbnRleHRJZD86IHN0cmluZztcbiAgICBmbihmbkFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdW5rbm93bjtcbiAgfVxuXG4gIGludGVyZmFjZSBGaWxlU3lzdGVtQWRhcHRlckxpa2Uge1xuICAgIGdldEJhc2VQYXRoKCk6IHN0cmluZztcbiAgfVxuXG4gIGludGVyZmFjZSBJcGNTZW5kU3luY1BhcmFtcyB7XG4gICAgcmVhZG9ubHkgYXJnczogdW5rbm93bltdO1xuICAgIHJlYWRvbmx5IGNoYW5uZWw6IHN0cmluZztcbiAgfVxuXG4gIGludGVyZmFjZSBTZXRMb2NhbFN0b3JhZ2VJdGVtUGFyYW1zIHtcbiAgICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGF5IChpbiBtcykgYmVmb3JlIGludm9raW5nIGBlbGVjdHJvbldpbmRvdy5kZXN0cm95KClgIHNvIHRoZSBldmFsIHRoYXRcbiAgICogdHJpZ2dlcmVkIHRoZSBjYWxsIGhhcyB0aW1lIHRvIHJldHVybiBpdHMgcmVzdWx0IHRvIHRoZSBjYWxsZXIuIFdpdGhvdXRcbiAgICogaXQgdGhlIHJlbmRlcmVyIGRpZXMgYmVmb3JlIHRoZSBJUEMgcmVwbHkgc2hpcHMsIHRoZSBjYWxsZXIgd2FpdHMgZm9yIHRoZVxuICAgKiBmdWxsIGV2YWwgdGltZW91dCwgYW5kIHN0YWxlIGBCcm93c2VyV2luZG93YCBlbnRyaWVzIHBpbGUgdXAuXG4gICAqL1xuICBjb25zdCBERVNUUk9ZX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDUwO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCAtLSBBcHByb3ZlZCBkb3VibGUgY2FzdDogYF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIGlzIG91ciBpbnRlcm5hbCBXaW5kb3cgYXVnbWVudGF0aW9uLCBpbnRlbnRpb25hbGx5IGtlcHQgbG9jYWwgKG5vdCBkZWNsYXJlZCBnbG9iYWxseSkgdG8gYXZvaWQgbGVha2luZyBpbnRvIGNvbnN1bWVyIHR5cGVzLlxuICBjb25zdCBob2xkZXIgPSB3aW5kb3cgYXMgdW5rbm93biBhcyBQYXJ0aWFsPEludGVncmF0aW9uVGVzdGluZ0hvbGRlcj47XG4gIGNvbnN0IGV4aXN0aW5nQ29udGV4dHMgPSBob2xkZXIuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8uY29udGV4dHMgPz8ge307XG4gIGNvbnN0IGV4aXN0aW5nT2JzaWRpYW5Nb2R1bGUgPSBob2xkZXIuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8ub2JzaWRpYW5Nb2R1bGU7XG5cbiAgY29uc3QgbnM6IEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZSA9IHtcbiAgICBnZXQgYXBwKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kZXByZWNhdGVkIC0tIGBhcHBgIGdldHRlciByZWFkcyBgd2luZG93LmFwcGAgd2hpY2ggaXMgc2V0IGJ5IE9ic2lkaWFuLlxuICAgICAgcmV0dXJuIHdpbmRvdy5hcHA7XG4gICAgfSxcblxuICAgIGNvbnRleHRzOiBleGlzdGluZ0NvbnRleHRzLFxuXG4gICAgYXN5bmMgZGVzdHJveUN1cnJlbnRXaW5kb3codGhpczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCB0aGlzLmVuc3VyZUxheW91dFJlYWR5KCk7XG4gICAgICBhd2FpdCBzbGVlcCgwKTtcbiAgICAgIGNvbnN0IGVsZWN0cm9uV2luZG93ID0gd2luZG93LmVsZWN0cm9uV2luZG93O1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVjdHJvbldpbmRvdy5kZXN0cm95KCk7XG4gICAgICB9LCBERVNUUk9ZX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVuc3VyZUxheW91dFJlYWR5KHRoaXM6IEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkocmVzb2x2ZSk7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZXZhbFdyYXBwZXIodGhpczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlLCBwYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgaWYgKCF0aGlzLmFwcC5wbHVnaW5zLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwLnBsdWdpbnMuc2V0RW5hYmxlKHRydWUpO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2JzaWRpYW5Nb2R1bGUgPSBhd2FpdCB0aGlzLmdldE9ic2lkaWFuTW9kdWxlKCk7XG4gICAgICBjb25zdCBjb250ZXh0ID0gcGFyYW1zLmNvbnRleHRJZFxuICAgICAgICA/ICh0aGlzLmNvbnRleHRzW3BhcmFtcy5jb250ZXh0SWRdID8/PSB7fSlcbiAgICAgICAgOiB7fTtcbiAgICAgIGNvbnN0IGZ1bGxBcmdzID0geyAuLi5wYXJhbXMuYXJncywgYXBwOiB0aGlzLmFwcCwgY29udGV4dCwgb2JzaWRpYW5Nb2R1bGUgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBhcmFtcy5mbihmdWxsQXJncyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICd1bmRlZmluZWQnIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IHZhbHVlOiByZXN1bHQgfSk7XG4gICAgICB9IGNhdGNoIChldmFsRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ2Vycm9yJywgdmFsdWU6IHRoaXMuc2VyaWFsaXplRXJyb3IoZXZhbEVycm9yKSB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T2JzaWRpYW5Nb2R1bGUodGhpczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICBpZiAodGhpcy5vYnNpZGlhbk1vZHVsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vYnNpZGlhbk1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgU0xJQ0VfU1RBUlQgPSAyO1xuICAgICAgY29uc3QgcmFuZG9tU3VmZml4ID0gU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKFNMSUNFX1NUQVJUKTtcbiAgICAgIGNvbnN0IHRlbXBNb2R1bGVOYW1lID0gYGdldC1vYnNpZGlhbi1tb2R1bGUtJHtyYW5kb21TdWZmaXh9YDtcbiAgICAgIGNvbnN0IGRpciA9IGAke3RoaXMuYXBwLnZhdWx0LmNvbmZpZ0Rpcn0vcGx1Z2lucy8ke3RlbXBNb2R1bGVOYW1lfWA7XG4gICAgICB0aGlzLmFwcC5wbHVnaW5zLm1hbmlmZXN0c1t0ZW1wTW9kdWxlTmFtZV0gPSB7XG4gICAgICAgIGF1dGhvcjogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgZGlyLFxuICAgICAgICBpZDogdGVtcE1vZHVsZU5hbWUsXG4gICAgICAgIGlzRGVza3RvcE9ubHk6IGZhbHNlLFxuICAgICAgICBtaW5BcHBWZXJzaW9uOiAnJyxcbiAgICAgICAgbmFtZTogdGVtcE1vZHVsZU5hbWUsXG4gICAgICAgIHZlcnNpb246ICcnXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5ta2RpcihkaXIpO1xuXG4gICAgICBjb25zdCBwbHVnaW5GbkJvZHkgPSAnY29uc3Qgcj1yZXF1aXJlLGU9ZXhwb3J0cztjb25zdCBtPXIoXFwnb2JzaWRpYW5cXCcpO3dpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLm9ic2lkaWFuTW9kdWxlPW07ZS5kZWZhdWx0PW0uUGx1Z2luOyc7XG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLndyaXRlKGAke2Rpcn0vbWFpbi5qc2AsIHBsdWdpbkZuQm9keSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuYXBwLnBsdWdpbnMubG9hZFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG4gICAgICBhd2FpdCB0aGlzLmFwcC5wbHVnaW5zLnVuaW5zdGFsbFBsdWdpbih0ZW1wTW9kdWxlTmFtZSk7XG5cbiAgICAgIGlmICh0aGlzLm9ic2lkaWFuTW9kdWxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9ic2lkaWFuTW9kdWxlO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG9ic2lkaWFuIG1vZHVsZScpO1xuICAgIH0sXG5cbiAgICBhc3luYyBpcGNTZW5kU3luYyh0aGlzOiBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UsIHBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVMYXlvdXRSZWFkeSgpO1xuICAgICAgd2luZG93LmVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKHBhcmFtcy5jaGFubmVsLCAuLi5wYXJhbXMuYXJncyk7XG4gICAgfSxcblxuICAgIG9ic2lkaWFuTW9kdWxlOiBleGlzdGluZ09ic2lkaWFuTW9kdWxlLFxuXG4gICAgYXN5bmMgcG9sbFZhdWx0QmFzZVBhdGgodGhpczogSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlTGF5b3V0UmVhZHkoKTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIERhdGFBZGFwdGVyIGlzIGFjdHVhbGx5IEZpbGVTeXN0ZW1BZGFwdGVyIGF0IHJ1bnRpbWUgb24gZGVza3RvcC5cbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSgodGhpcy5hcHAudmF1bHQuYWRhcHRlciBhcyB1bmtub3duIGFzIEZpbGVTeXN0ZW1BZGFwdGVyTGlrZSkuZ2V0QmFzZVBhdGgoKSk7XG4gICAgfSxcblxuICAgIHNlcmlhbGl6ZUVycm9yKHRoaXM6IEludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZSwgZXJyb3I6IHVua25vd24sIGRlcHRoID0gMCk6IHN0cmluZyB7XG4gICAgICBjb25zdCBDQVVTRV9JTkRFTlRfU0laRSA9IDI7XG4gICAgICBjb25zdCBpbmRlbnQgPSAnICcucmVwZWF0KGRlcHRoICogQ0FVU0VfSU5ERU5UX1NJWkUpO1xuXG4gICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICByZXR1cm4gYCR7aW5kZW50fSR7U3RyaW5nKGVycm9yKX1gO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFja09yTWVzc2FnZSA9IGVycm9yLnN0YWNrID8/IGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICAgIGxldCByZXN1bHQgPSBzdGFja09yTWVzc2FnZS5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiBgJHtpbmRlbnR9JHtsaW5lfWApLmpvaW4oJ1xcbicpO1xuXG4gICAgICBpZiAoZXJyb3IuY2F1c2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgKz0gYFxcbiR7aW5kZW50fVtjYXVzZV06YDtcbiAgICAgICAgcmVzdWx0ICs9IGBcXG4ke3RoaXMuc2VyaWFsaXplRXJyb3IoZXJyb3IuY2F1c2UsIGRlcHRoICsgMSl9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgc2V0TG9jYWxTdG9yYWdlSXRlbSh0aGlzOiBJbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UsIHBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVMYXlvdXRSZWFkeSgpO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0ocGFyYW1zLmtleSwgcGFyYW1zLnZhbHVlKTtcbiAgICB9LFxuXG4gICAgdmVyc2lvbjogYm9vdHN0cmFwUGFyYW1zLnZlcnNpb25cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gQXBwcm92ZWQgZG91YmxlIGNhc3Q6IGBfX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCBpcyBvdXIgaW50ZXJuYWwgV2luZG93IGF1Z21lbnRhdGlvbiwgaW50ZW50aW9uYWxseSBrZXB0IGxvY2FsIChub3QgZGVjbGFyZWQgZ2xvYmFsbHkpIHRvIGF2b2lkIGxlYWtpbmcgaW50byBjb25zdW1lciB0eXBlcy5cbiAgKHdpbmRvdyBhcyB1bmtub3duIGFzIFBhcnRpYWw8SW50ZWdyYXRpb25UZXN0aW5nSG9sZGVyPikuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZyA9IG5zO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdCQSxvQ0FBcUM7QUFDckMscUJBQWdDO0FBb0JoQyxlQUFzQiw0QkFBNEIsV0FBOEIsS0FBYSx1QkFBK0M7QUFDMUksUUFBTSxjQUFvQztBQUFBLElBQ3hDO0FBQUEsSUFDQSxHQUFJLDBCQUEwQixVQUFhLEVBQUUsc0JBQXNCO0FBQUEsRUFDckU7QUFDQSxRQUFNLGNBQWMsS0FBSyxVQUFVLDhCQUFlO0FBQ2xELFFBQU0sY0FBYyxNQUFNLFVB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
|
|
@@ -14,4 +14,4 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
14
14
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
15
|
var obsidian_namespace_exports = {};
|
|
16
16
|
module.exports = __toCommonJS(obsidian_namespace_exports);
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLW5hbWVzcGFjZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIG5hbWVzcGFjZVxuICogdXNlZCBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuIEFsbCBsaWJyYXJ5IHN0YXRlIGFuZCByZWdpc3RlcmVkIGhlbHBlclxuICogZnVuY3Rpb25zIGxpdmUgdW5kZXIgdGhpcyBzaW5nbGUgbmFtZXNwYWNlIHRvIGF2b2lkIHBvbGx1dGluZyBgd2luZG93YC5cbiAqL1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSByZWdpc3RlcmVkIGBldmFsV3JhcHBlcmAgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbFdyYXBwZXJOYW1lc3BhY2VQYXJhbXMge1xuICAvKiogVXNlci1zdXBwbGllZCBhcmd1bWVudHMgdG8gcGFzcyB0byBgZm5gLiAqL1xuICByZWFkb25seSBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIE9wdGlvbmFsIGNvbnRleHQgSUQgZm9yIHBlcnNpc3RlbnQgc3RvcmFnZS4gKi9cbiAgcmVhZG9ubHkgY29udGV4dElkPzogc3RyaW5nO1xuICAvKiogVGhlIHVzZXIgZnVuY3Rpb24gdG8gZXZhbHVhdGUuICovXG4gIGZuKGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgT2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2UuaXBjU2VuZFN5bmN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwY1NlbmRTeW5jTmFtZXNwYWNlUGFyYW1zIHtcbiAgLyoqIFRoZSBJUEMgYXJndW1lbnRzLiAqL1xuICByZWFkb25seSBhcmdzOiB1bmtub3duW107XG4gIC8qKiBUaGUgSVBDIGNoYW5uZWwgbmFtZS4gKi9cbiAgcmVhZG9ubHkgY2hhbm5lbDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhvbGRlciBpbnRlcmZhY2UgZm9yIHR5cGUtc2FmZSBhY2Nlc3MgdG8gYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYC5cbiAqIFVzZSB3aXRoIGBQYXJ0aWFsPE9ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nSG9sZGVyPmAgdG8gc2FmZWx5IGNoZWNrIGV4aXN0ZW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0hvbGRlciB7XG4gIF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc6IE9ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlO1xufVxuXG4vKipcbiAqIFRoZSBuYW1lc3BhY2Ugb2JqZWN0IHN0b3JlZCBvbiBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgXG4gKiBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuIFJlZ2lzdGVyZWQgb25jZSB2aWEge0BsaW5rIGJvb3RzdHJhcE5hbWVzcGFjZX1cbiAqIGFuZCByZXVzZWQgYWNyb3NzIGFsbCBzdWJzZXF1ZW50IGBldmFsSW5PYnNpZGlhbmAgY2FsbHMuXG4gKlxuICogQWxsIGZ1bmN0aW9ucyBhY2Nlc3MgYHdpbmRvdy5hcHBgIGRpcmVjdGx5IFx1MjAxNCBjYWxsZXJzIGRvIG5vdCBuZWVkIHRvIHBhc3MgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2Uge1xuICAvKipcbiAgICogUGVyc2lzdGVudCBjb250ZXh0IG9iamVjdHMga2V5ZWQgYnkge0BsaW5rIENvbnRleHRJZH0gc3RyaW5nLlxuICAgKiBQcmVzZXJ2ZWQgYWNyb3NzIHZlcnNpb24gdXBncmFkZXMgc28gbGl2ZSBjb250ZXh0IHJlZmVyZW5jZXMgc3Vydml2ZS5cbiAgICovXG4gIGNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBjdXJyZW50IEVsZWN0cm9uIHdpbmRvdy5cbiAgICovXG4gIGRlc3Ryb3lDdXJyZW50V2luZG93KCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdhaXRzIGZvciB0aGUgT2JzaWRpYW4gd29ya3NwYWNlIGxheW91dCB0byBiZSByZWFkeS5cbiAgICovXG4gIGVuc3VyZUxheW91dFJlYWR5KCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSB0b3AtbGV2ZWwgd3JhcHBlciB0aGF0IHNldHMgdXAgY29udGV4dCwgcmVzb2x2ZXMgdGhlIG9ic2lkaWFuIG1vZHVsZSxcbiAgICogY2FsbHMgdGhlIHVzZXIncyBmdW5jdGlvbiwgYW5kIHJldHVybnMgYSBKU09OIGVudmVsb3BlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBpbmNsdWRpbmcgdGhlIHVzZXIncyBmdW5jdGlvbiwgYXJncywgYW5kIGNvbnRleHQgSUQuXG4gICAqIEByZXR1cm5zIEEgSlNPTi1zdHJpbmdpZmllZCByZXN1bHQgZW52ZWxvcGUuXG4gICAqL1xuICBldmFsV3JhcHBlcihwYXJhbXM6IEV2YWxXcmFwcGVyTmFtZXNwYWNlUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgYG9ic2lkaWFuYCBtb2R1bGUgYXQgcnVudGltZSBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBgb2JzaWRpYW5gIG1vZHVsZS5cbiAgICovXG4gIGdldE9ic2lkaWFuTW9kdWxlKCk6IFByb21pc2U8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFNlbmRzIGFuIElQQyBtZXNzYWdlIHN5bmNocm9ub3VzbHkgdmlhIEVsZWN0cm9uJ3MgYGlwY1JlbmRlcmVyYC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBJUEMgY2hhbm5lbCBhbmQgYXJndW1lbnRzLlxuICAgKi9cbiAgaXBjU2VuZFN5bmMocGFyYW1zOiBJcGNTZW5kU3luY05hbWVzcGFjZVBhcmFtcyk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIENhY2hlZCBgb2JzaWRpYW5gIG1vZHVsZSwgc2V0IGJ5IHtAbGluayBnZXRPYnNpZGlhbk1vZHVsZX0gb24gZmlyc3QgcmVzb2x1dGlvbi5cbiAgICovXG4gIG9ic2lkaWFuTW9kdWxlPzogdW5rbm93bjtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmF1bHQncyBiYXNlIHBhdGggYXMgYSBKU09OLWVuY29kZWQgc3RyaW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgSlNPTi1lbmNvZGVkIGJhc2UgcGF0aC5cbiAgICovXG4gIHBvbGxWYXVsdEJhc2VQYXRoKCk6IFByb21pc2U8c3RyaW5nPjtcblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhbiBlcnJvciBpbnRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIHdpdGggc3RhY2sgdHJhY2UgYW5kIGNhdXNlIGNoYWluLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gc2VyaWFsaXplLlxuICAgKiBAcGFyYW0gZGVwdGggLSBUaGUgY3VycmVudCBuZXN0aW5nIGRlcHRoLlxuICAgKiBAcmV0dXJucyBBIGZvcm1hdHRlZCBlcnJvciBzdHJpbmcuXG4gICAqL1xuICBzZXJpYWxpemVFcnJvcihlcnJvcjogdW5rbm93biwgZGVwdGg/OiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNldHMgYSBgbG9jYWxTdG9yYWdlYCBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGtleSBhbmQgdmFsdWUgdG8gc2V0LlxuICAgKi9cbiAgc2V0TG9jYWxTdG9yYWdlSXRlbShwYXJhbXM6IFNldExvY2FsU3RvcmFnZUl0ZW1OYW1lc3BhY2VQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgbGlicmFyeSB2ZXJzaW9uIHRoYXQgd2FzIHVzZWQgdG8gYm9vdHN0cmFwIHRoaXMgbmFtZXNwYWNlLlxuICAgKiBVc2VkIHRvIGRldGVjdCB2ZXJzaW9uIG1pc21hdGNoZXMgYW5kIHJlLWluaXRpYWxpemUuXG4gICAqL1xuICB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIE9ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlLnNldExvY2FsU3RvcmFnZUl0ZW19LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNldExvY2FsU3RvcmFnZUl0ZW1OYW1lc3BhY2VQYXJhbXMge1xuICAvKiogVGhlIGxvY2FsU3RvcmFnZSBrZXkuICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICAvKiogVGhlIGxvY2FsU3RvcmFnZSB2YWx1ZS4gKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export interface EvalWrapperNamespaceParams {
|
|
12
12
|
/** User-supplied arguments to pass to `fn`. */
|
|
13
|
-
args: Record<string, unknown>;
|
|
13
|
+
readonly args: Record<string, unknown>;
|
|
14
14
|
/** Optional context ID for persistent storage. */
|
|
15
|
-
contextId?: string;
|
|
15
|
+
readonly contextId?: string;
|
|
16
16
|
/** The user function to evaluate. */
|
|
17
17
|
fn(args: Record<string, unknown>): unknown;
|
|
18
18
|
}
|
|
@@ -21,9 +21,9 @@ export interface EvalWrapperNamespaceParams {
|
|
|
21
21
|
*/
|
|
22
22
|
export interface IpcSendSyncNamespaceParams {
|
|
23
23
|
/** The IPC arguments. */
|
|
24
|
-
args: unknown[];
|
|
24
|
+
readonly args: unknown[];
|
|
25
25
|
/** The IPC channel name. */
|
|
26
|
-
channel: string;
|
|
26
|
+
readonly channel: string;
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Holder interface for type-safe access to `window.__obsidianIntegrationTesting`.
|
|
@@ -108,7 +108,7 @@ export interface ObsidianIntegrationTestingNamespace {
|
|
|
108
108
|
*/
|
|
109
109
|
export interface SetLocalStorageItemNamespaceParams {
|
|
110
110
|
/** The localStorage key. */
|
|
111
|
-
key: string;
|
|
111
|
+
readonly key: string;
|
|
112
112
|
/** The localStorage value. */
|
|
113
|
-
value: string;
|
|
113
|
+
readonly value: string;
|
|
114
114
|
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var setup_lock_exports = {};
|
|
30
|
+
__export(setup_lock_exports, {
|
|
31
|
+
acquireSetupLock: () => acquireSetupLock
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(setup_lock_exports);
|
|
34
|
+
var import_node_fs = require("node:fs");
|
|
35
|
+
var import_node_os = require("node:os");
|
|
36
|
+
var import_node_path = require("node:path");
|
|
37
|
+
var import_node_process = __toESM(require("node:process"), 1);
|
|
38
|
+
var import_log = require("./log.cjs");
|
|
39
|
+
const LOCK_DIR_NAME = "obsidian-integration-testing";
|
|
40
|
+
const LOCK_FILE_SUFFIX = ".setup.lock";
|
|
41
|
+
const POLL_INTERVAL_IN_MILLISECONDS = 500;
|
|
42
|
+
const MILLISECONDS_PER_SECOND = 1e3;
|
|
43
|
+
const SECONDS_PER_MINUTE = 60;
|
|
44
|
+
const STALE_LOCK_AGE_IN_MINUTES = 30;
|
|
45
|
+
const DEFAULT_TIMEOUT_IN_MINUTES = 60;
|
|
46
|
+
const STALE_LOCK_AGE_IN_MILLISECONDS = STALE_LOCK_AGE_IN_MINUTES * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND;
|
|
47
|
+
const DEFAULT_TIMEOUT_IN_MILLISECONDS = DEFAULT_TIMEOUT_IN_MINUTES * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND;
|
|
48
|
+
const PROCESS_EXISTENCE_PROBE_SIGNAL = 0;
|
|
49
|
+
async function acquireSetupLock(params) {
|
|
50
|
+
const {
|
|
51
|
+
label,
|
|
52
|
+
scope
|
|
53
|
+
} = params;
|
|
54
|
+
const timeoutInMilliseconds = params.timeoutInMilliseconds ?? DEFAULT_TIMEOUT_IN_MILLISECONDS;
|
|
55
|
+
const lockFilePath = getLockFilePath(scope);
|
|
56
|
+
(0, import_node_fs.mkdirSync)(getLockDir(), { recursive: true });
|
|
57
|
+
const deadlineInMilliseconds = Date.now() + timeoutInMilliseconds;
|
|
58
|
+
let hasLoggedWait = false;
|
|
59
|
+
for (; ; ) {
|
|
60
|
+
if (tryCreateLockFile(lockFilePath, label)) {
|
|
61
|
+
return createLockHandle(lockFilePath);
|
|
62
|
+
}
|
|
63
|
+
const info = readLockFileInfo(lockFilePath);
|
|
64
|
+
if (info && isLockStale(info)) {
|
|
65
|
+
(0, import_log.log)(`[integration-setup:${label}] Stealing stale '${scope}' setup lock from ${describeInfo(info)}.`);
|
|
66
|
+
(0, import_node_fs.rmSync)(lockFilePath, { force: true });
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (Date.now() >= deadlineInMilliseconds) {
|
|
70
|
+
throw new Error(
|
|
71
|
+
`Timed out after ${String(timeoutInMilliseconds)}ms waiting for the '${scope}' integration-test setup lock held by ${describeHolder(info)}. Another integration-test run is still in progress.`
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
if (!hasLoggedWait) {
|
|
75
|
+
hasLoggedWait = true;
|
|
76
|
+
(0, import_log.log)(`[integration-setup:${label}] Waiting for the '${scope}' setup lock held by ${describeHolder(info)} to be released...`);
|
|
77
|
+
}
|
|
78
|
+
await delay(POLL_INTERVAL_IN_MILLISECONDS);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function createLockHandle(lockFilePath) {
|
|
82
|
+
let isReleased = false;
|
|
83
|
+
return {
|
|
84
|
+
release() {
|
|
85
|
+
if (isReleased) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
isReleased = true;
|
|
89
|
+
(0, import_node_fs.rmSync)(lockFilePath, { force: true });
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function delay(milliseconds) {
|
|
94
|
+
return new Promise((resolve) => {
|
|
95
|
+
setTimeout(resolve, milliseconds);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
function describeHolder(info) {
|
|
99
|
+
return info ? describeInfo(info) : "another run";
|
|
100
|
+
}
|
|
101
|
+
function describeInfo(info) {
|
|
102
|
+
return `pid ${String(info.pid)} (${info.label}) on ${info.hostname}`;
|
|
103
|
+
}
|
|
104
|
+
function getErrorCode(error) {
|
|
105
|
+
if (error instanceof Error && "code" in error && typeof error.code === "string") {
|
|
106
|
+
return error.code;
|
|
107
|
+
}
|
|
108
|
+
return void 0;
|
|
109
|
+
}
|
|
110
|
+
function getLockDir() {
|
|
111
|
+
return (0, import_node_path.join)((0, import_node_os.tmpdir)(), LOCK_DIR_NAME);
|
|
112
|
+
}
|
|
113
|
+
function getLockFilePath(scope) {
|
|
114
|
+
return (0, import_node_path.join)(getLockDir(), `${scope}${LOCK_FILE_SUFFIX}`);
|
|
115
|
+
}
|
|
116
|
+
function isLockStale(info) {
|
|
117
|
+
if (info.hostname === (0, import_node_os.hostname)()) {
|
|
118
|
+
return !isProcessAlive(info.pid);
|
|
119
|
+
}
|
|
120
|
+
return Date.now() - info.acquiredAtInMilliseconds > STALE_LOCK_AGE_IN_MILLISECONDS;
|
|
121
|
+
}
|
|
122
|
+
function isProcessAlive(pid) {
|
|
123
|
+
try {
|
|
124
|
+
import_node_process.default.kill(pid, PROCESS_EXISTENCE_PROBE_SIGNAL);
|
|
125
|
+
return true;
|
|
126
|
+
} catch (error) {
|
|
127
|
+
return getErrorCode(error) === "EPERM";
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function readLockFileInfo(lockFilePath) {
|
|
131
|
+
try {
|
|
132
|
+
return JSON.parse((0, import_node_fs.readFileSync)(lockFilePath, "utf-8"));
|
|
133
|
+
} catch {
|
|
134
|
+
return void 0;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function tryCreateLockFile(lockFilePath, label) {
|
|
138
|
+
const info = {
|
|
139
|
+
acquiredAtInMilliseconds: Date.now(),
|
|
140
|
+
hostname: (0, import_node_os.hostname)(),
|
|
141
|
+
label,
|
|
142
|
+
pid: import_node_process.default.pid
|
|
143
|
+
};
|
|
144
|
+
try {
|
|
145
|
+
(0, import_node_fs.writeFileSync)(lockFilePath, JSON.stringify(info), { flag: "wx" });
|
|
146
|
+
return true;
|
|
147
|
+
} catch (error) {
|
|
148
|
+
if (getErrorCode(error) === "EEXIST") {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
throw error;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
155
|
+
0 && (module.exports = {
|
|
156
|
+
acquireSetupLock
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3NldHVwLWxvY2sudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDcm9zcy1wcm9jZXNzIGFkdmlzb3J5IGxvY2sgdGhhdCBzZXJpYWxpemVzIHdob2xlIGludGVncmF0aW9uLXRlc3QgcnVucy5cbiAqXG4gKiBUd28gdGVzdCBydW5zIHRoYXQgZHJpdmUgdGhlIHNhbWUgc2hhcmVkIHJlc291cmNlcyBjb3JydXB0IGVhY2ggb3RoZXI6IG9uXG4gKiBkZXNrdG9wIHRoZXkgc2hhcmUgdGhlIHNpbmdsZSBsb2NhbCBPYnNpZGlhbiBpbnN0YW5jZSwgaXRzIGBvYnNpZGlhbi5qc29uYFxuICogcmVnaXN0cnksIGFuZCB0aGUgQ0RQIHBvcnQ7IG9uIEFuZHJvaWQgdGhleSBzaGFyZSB0aGUgZW11bGF0b3IgYW5kIHRoZSBBcHBpdW1cbiAqIHNlcnZlci4gT25lIHJ1bidzIHNldHVwL3RlYXJkb3duIGtpbGxzIG9yIHJlY29uZmlndXJlcyB0aGUgaW5zdGFuY2UgdGhlIG90aGVyXG4gKiBydW4gaXMgbWlkLWV2YWwgb24gKG9ic2VydmVkIGFzIGBFQ09OTlJFRlVTRURgIG9yIFwidmF1bHQgbm90IG9wZW5cIiksIHNvIGJvdGhcbiAqIHJ1bnMgZmFpbC5cbiAqXG4gKiBUaGlzIGxvY2sgbWFrZXMgdGhlIHNlY29uZCBydW4gKip3YWl0KiogZm9yIHRoZSBmaXJzdCB0byBmaW5pc2ggaW5zdGVhZCBvZlxuICogcnVubmluZyBjb25jdXJyZW50bHkuIEl0IGlzIGhlbGQgZm9yIHRoZSBlbnRpcmUgcnVuOiBhY3F1aXJlZCBhdCB0aGUgc3RhcnQgb2ZcbiAqIHRoZSBjb3JlIHNldHVwIGFuZCByZWxlYXNlZCBieSB0aGUgY29yZSB0ZWFyZG93biAoYW5kIGJ5IHRoZSBwcm9jZXNzIGNsZWFudXBcbiAqIGhhbmRsZXJzKS4gVGhlIGxvY2sgaXMgYSBzZW50aW5lbCBmaWxlIGluIGEgc2hhcmVkIHRlbXAgZGlyZWN0b3J5LCBjYXJyeWluZ1xuICogdGhlIGhvbGRlcidzIFBJRCBzbyBhIHJ1biB0aGF0IGNyYXNoZWQgd2l0aG91dCByZWxlYXNpbmcgbGVhdmVzIGEgbG9jayB0aGF0XG4gKiB0aGUgbmV4dCBydW4gZGV0ZWN0cyBhcyBzdGFsZSBhbmQgc3RlYWxzLlxuICovXG5cbmltcG9ydCB7XG4gIG1rZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jLFxuICBybVN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBob3N0bmFtZSxcbiAgdG1wZGlyXG59IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuXG5jb25zdCBMT0NLX0RJUl9OQU1FID0gJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnO1xuY29uc3QgTE9DS19GSUxFX1NVRkZJWCA9ICcuc2V0dXAubG9jayc7XG5jb25zdCBQT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IE1JTExJU0VDT05EU19QRVJfU0VDT05EID0gMTAwMDtcbmNvbnN0IFNFQ09ORFNfUEVSX01JTlVURSA9IDYwO1xuY29uc3QgU1RBTEVfTE9DS19BR0VfSU5fTUlOVVRFUyA9IDMwO1xuY29uc3QgREVGQVVMVF9USU1FT1VUX0lOX01JTlVURVMgPSA2MDtcbmNvbnN0IFNUQUxFX0xPQ0tfQUdFX0lOX01JTExJU0VDT05EUyA9IFNUQUxFX0xPQ0tfQUdFX0lOX01JTlVURVMgKiBTRUNPTkRTX1BFUl9NSU5VVEUgKiBNSUxMSVNFQ09ORFNfUEVSX1NFQ09ORDtcbmNvbnN0IERFRkFVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSBERUZBVUxUX1RJTUVPVVRfSU5fTUlOVVRFUyAqIFNFQ09ORFNfUEVSX01JTlVURSAqIE1JTExJU0VDT05EU19QRVJfU0VDT05EO1xuY29uc3QgUFJPQ0VTU19FWElTVEVOQ0VfUFJPQkVfU0lHTkFMID0gMDtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYWNxdWlyZVNldHVwTG9ja30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNxdWlyZVNldHVwTG9ja1BhcmFtcyB7XG4gIC8qKiBTaG9ydCB0cmFuc3BvcnQgbGFiZWwgZm9yIGxvZyBtZXNzYWdlcyAoZS5nLiBgXCJvYnNpZGlhbi1jbGlcImApLiAqL1xuICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMb2dpY2FsIHNjb3BlIHRoZSBsb2NrIHNlcmlhbGl6ZXMgd2l0aGluLiBSdW5zIHRoYXQgc2hhcmUgcmVzb3VyY2VzIG11c3RcbiAgICogdXNlIHRoZSBzYW1lIHNjb3BlIChlLmcuIGBcImRlc2t0b3BcImAgZm9yIHRoZSBDTEkvQ0RQIHRyYW5zcG9ydHMsIGBcImFuZHJvaWRcImBcbiAgICogZm9yIHRoZSBBcHBpdW0gdHJhbnNwb3J0KS5cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gdGltZSB0byB3YWl0IGZvciBhIGNvbXBldGluZyBydW4gdG8gcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgZ2l2aW5nXG4gICAqIHVwIGFuZCB0aHJvd2luZy5cbiAgICpcbiAgICogQGRlZmF1bHQgMSBob3VyXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQSBoZWxkIHNldHVwIGxvY2suIFJlbGVhc2UgaXQgb25jZSB0aGUgcnVuJ3MgdGVhcmRvd24gaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2V0dXBMb2NrIHtcbiAgLyoqIFJlbGVhc2VzIHRoZSBsb2NrLiBTYWZlIHRvIGNhbGwgbW9yZSB0aGFuIG9uY2UuICovXG4gIHJlbGVhc2UoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgSlNPTiBwYXlsb2FkIHN0b3JlZCBpbnNpZGUgYSBsb2NrIGZpbGUsIGlkZW50aWZ5aW5nIHRoZSBob2xkZXIuXG4gKi9cbmludGVyZmFjZSBMb2NrRmlsZUluZm8ge1xuICAvKiogV2hlbiB0aGUgbG9jayB3YXMgYWNxdWlyZWQgKGBEYXRlLm5vdygpYCBlcG9jaCBtaWxsaXNlY29uZHMpLiAqL1xuICByZWFkb25seSBhY3F1aXJlZEF0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKiogVGhlIGhvc3QgdGhhdCBob2xkcyB0aGUgbG9jayAoUElEIGxpdmVuZXNzIGlzIG9ubHkgdmFsaWQgb24gdGhlIHNhbWUgaG9zdCkuICovXG4gIHJlYWRvbmx5IGhvc3RuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSB0cmFuc3BvcnQgbGFiZWwgb2YgdGhlIGhvbGRpbmcgcnVuLiAqL1xuICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuXG4gIC8qKiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgaG9sZGluZyBydW4uICovXG4gIHJlYWRvbmx5IHBpZDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFjcXVpcmVzIHRoZSBjcm9zcy1wcm9jZXNzIHNldHVwIGxvY2sgZm9yIHRoZSBnaXZlbiBzY29wZSwgd2FpdGluZyB1bnRpbCBhbnlcbiAqIGNvbXBldGluZyBydW4gcmVsZWFzZXMgaXQgKG9yIGl0cyBsb2NrIGlzIGRldGVjdGVkIGFzIHN0YWxlKS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGxvY2sgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIEEgaGFuZGxlIHdob3NlIHtAbGluayBTZXR1cExvY2sucmVsZWFzZX0gZnJlZXMgdGhlIGxvY2suXG4gKiBAdGhyb3dzIElmIHRoZSBsb2NrIGNhbm5vdCBiZSBhY3F1aXJlZCB3aXRoaW4gYHRpbWVvdXRJbk1pbGxpc2Vjb25kc2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3F1aXJlU2V0dXBMb2NrKHBhcmFtczogQWNxdWlyZVNldHVwTG9ja1BhcmFtcyk6IFByb21pc2U8U2V0dXBMb2NrPiB7XG4gIGNvbnN0IHtcbiAgICBsYWJlbCxcbiAgICBzY29wZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCB0aW1lb3V0SW5NaWxsaXNlY29uZHMgPSBwYXJhbXMudGltZW91dEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gIGNvbnN0IGxvY2tGaWxlUGF0aCA9IGdldExvY2tGaWxlUGF0aChzY29wZSk7XG4gIG1rZGlyU3luYyhnZXRMb2NrRGlyKCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IGRlYWRsaW5lSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpICsgdGltZW91dEluTWlsbGlzZWNvbmRzO1xuICBsZXQgaGFzTG9nZ2VkV2FpdCA9IGZhbHNlO1xuXG4gIGZvciAoOzspIHtcbiAgICBpZiAodHJ5Q3JlYXRlTG9ja0ZpbGUobG9ja0ZpbGVQYXRoLCBsYWJlbCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVMb2NrSGFuZGxlKGxvY2tGaWxlUGF0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5mbyA9IHJlYWRMb2NrRmlsZUluZm8obG9ja0ZpbGVQYXRoKTtcbiAgICBpZiAoaW5mbyAmJiBpc0xvY2tTdGFsZShpbmZvKSkge1xuICAgICAgbG9nKGBbaW50ZWdyYXRpb24tc2V0dXA6JHtsYWJlbH1dIFN0ZWFsaW5nIHN0YWxlICcke3Njb3BlfScgc2V0dXAgbG9jayBmcm9tICR7ZGVzY3JpYmVJbmZvKGluZm8pfS5gKTtcbiAgICAgIHJtU3luYyhsb2NrRmlsZVBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoRGF0ZS5ub3coKSA+PSBkZWFkbGluZUluTWlsbGlzZWNvbmRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaW1lZCBvdXQgYWZ0ZXIgJHtTdHJpbmcodGltZW91dEluTWlsbGlzZWNvbmRzKX1tcyB3YWl0aW5nIGZvciB0aGUgJyR7c2NvcGV9JyBpbnRlZ3JhdGlvbi10ZXN0IHNldHVwIGxvY2sgYFxuICAgICAgICAgICsgYGhlbGQgYnkgJHtkZXNjcmliZUhvbGRlcihpbmZvKX0uIEFub3RoZXIgaW50ZWdyYXRpb24tdGVzdCBydW4gaXMgc3RpbGwgaW4gcHJvZ3Jlc3MuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWhhc0xvZ2dlZFdhaXQpIHtcbiAgICAgIGhhc0xvZ2dlZFdhaXQgPSB0cnVlO1xuICAgICAgbG9nKGBbaW50ZWdyYXRpb24tc2V0dXA6JHtsYWJlbH1dIFdhaXRpbmcgZm9yIHRoZSAnJHtzY29wZX0nIHNldHVwIGxvY2sgaGVsZCBieSAke2Rlc2NyaWJlSG9sZGVyKGluZm8pfSB0byBiZSByZWxlYXNlZC4uLmApO1xuICAgIH1cblxuICAgIGF3YWl0IGRlbGF5KFBPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgU2V0dXBMb2NrfSBoYW5kbGUgdGhhdCByZW1vdmVzIHRoZSBsb2NrIGZpbGUgb24gcmVsZWFzZS5cbiAqXG4gKiBAcGFyYW0gbG9ja0ZpbGVQYXRoIC0gVGhlIHBhdGggdG8gdGhlIGxvY2sgZmlsZSB0byByZW1vdmUgb24gcmVsZWFzZS5cbiAqIEByZXR1cm5zIFRoZSBsb2NrIGhhbmRsZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTG9ja0hhbmRsZShsb2NrRmlsZVBhdGg6IHN0cmluZyk6IFNldHVwTG9jayB7XG4gIGxldCBpc1JlbGVhc2VkID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgcmVsZWFzZSgpOiB2b2lkIHtcbiAgICAgIGlmIChpc1JlbGVhc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlzUmVsZWFzZWQgPSB0cnVlO1xuICAgICAgcm1TeW5jKGxvY2tGaWxlUGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5LiBVc2VkIHRvIHBvbGwgYmV0d2VlbiBsb2NrLWFjcXVpc2l0aW9uIGF0dGVtcHRzLlxuICpcbiAqIEBwYXJhbSBtaWxsaXNlY29uZHMgLSBUaGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGRlbGF5LlxuICovXG5mdW5jdGlvbiBkZWxheShtaWxsaXNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1pbGxpc2Vjb25kcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBjdXJyZW50IGxvY2sgaG9sZGVyIGZvciBsb2cvZXJyb3JcbiAqIG1lc3NhZ2VzLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIHBhcnNlZCBsb2NrIGluZm8sIG9yIGB1bmRlZmluZWRgIGlmIGl0IGNvdWxkIG5vdCBiZSByZWFkLlxuICogQHJldHVybnMgQSBkZXNjcmlwdGlvbiBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlSG9sZGVyKGluZm86IExvY2tGaWxlSW5mbyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiBpbmZvID8gZGVzY3JpYmVJbmZvKGluZm8pIDogJ2Fub3RoZXIgcnVuJztcbn1cblxuLyoqXG4gKiBGb3JtYXRzIGEge0BsaW5rIExvY2tGaWxlSW5mb30gYXMgYSBzaG9ydCBpZGVudGlmaWVyIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBsb2NrIGluZm8uXG4gKiBAcmV0dXJucyBBIHN0cmluZyBsaWtlIGBwaWQgMTIzNCAob2JzaWRpYW4tY2xpKSBvbiBob3N0YC5cbiAqL1xuZnVuY3Rpb24gZGVzY3JpYmVJbmZvKGluZm86IExvY2tGaWxlSW5mbyk6IHN0cmluZyB7XG4gIHJldHVybiBgcGlkICR7U3RyaW5nKGluZm8ucGlkKX0gKCR7aW5mby5sYWJlbH0pIG9uICR7aW5mby5ob3N0bmFtZX1gO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBgY29kZWAgZnJvbSBhIE5vZGUuanMgc3lzdGVtIGVycm9yLCBpZiBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSB0aHJvd24gdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgZXJyb3IgY29kZSBzdHJpbmcsIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBhIGNvZGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBnZXRFcnJvckNvZGUoZXJyb3I6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAnY29kZScgaW4gZXJyb3IgJiYgdHlwZW9mIGVycm9yLmNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGVycm9yLmNvZGU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzaGFyZWQgbG9jayBkaXJlY3RvcnkgaW5zaWRlIHRoZSBPUyB0ZW1wIGRpcmVjdG9yeS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbG9jayBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGdldExvY2tEaXIoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4odG1wZGlyKCksIExPQ0tfRElSX05BTUUpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGxvY2sgZmlsZSBwYXRoIGZvciB0aGUgZ2l2ZW4gc2NvcGUuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gVGhlIGxvY2sgc2NvcGUuXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgc2NvcGUncyBsb2NrIGZpbGUuXG4gKi9cbmZ1bmN0aW9uIGdldExvY2tGaWxlUGF0aChzY29wZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oZ2V0TG9ja0RpcigpLCBgJHtzY29wZX0ke0xPQ0tfRklMRV9TVUZGSVh9YCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgbG9jayBjYW4gYmUgY29uc2lkZXJlZCBhYmFuZG9uZWQuXG4gKlxuICogT24gdGhlIHNhbWUgaG9zdCwgdGhlIGhvbGRlcidzIFBJRCBpcyBwcm9iZWQgZGlyZWN0bHk6IGEgZGVhZCBQSUQgbWVhbnMgdGhlXG4gKiBydW4gY3Jhc2hlZCB3aXRob3V0IHJlbGVhc2luZy4gT24gYSBkaWZmZXJlbnQgaG9zdCAoYSBzaGFyZWQvbmV0d29yayB0ZW1wXG4gKiBkaXJlY3RvcnkpIHRoZSBQSUQgY2Fubm90IGJlIHByb2JlZCwgc28gYW4gYWdlIHRocmVzaG9sZCBpcyB1c2VkIGluc3RlYWQuXG4gKlxuICogQHBhcmFtIGluZm8gLSBUaGUgcGFyc2VkIGxvY2sgaW5mby5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbG9jayBpcyBzdGFsZSBhbmQgbWF5IGJlIHN0b2xlbi5cbiAqL1xuZnVuY3Rpb24gaXNMb2NrU3RhbGUoaW5mbzogTG9ja0ZpbGVJbmZvKTogYm9vbGVhbiB7XG4gIGlmIChpbmZvLmhvc3RuYW1lID09PSBob3N0bmFtZSgpKSB7XG4gICAgcmV0dXJuICFpc1Byb2Nlc3NBbGl2ZShpbmZvLnBpZCk7XG4gIH1cblxuICByZXR1cm4gRGF0ZS5ub3coKSAtIGluZm8uYWNxdWlyZWRBdEluTWlsbGlzZWNvbmRzID4gU1RBTEVfTE9DS19BR0VfSU5fTUlMTElTRUNPTkRTO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgcHJvY2VzcyB3aXRoIHRoZSBnaXZlbiBQSUQgaXMgY3VycmVudGx5IGFsaXZlLlxuICpcbiAqIEBwYXJhbSBwaWQgLSBUaGUgcHJvY2VzcyBJRCB0byBwcm9iZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvY2VzcyBleGlzdHMuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvY2Vzc0FsaXZlKHBpZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgcHJvY2Vzcy5raWxsKHBpZCwgUFJPQ0VTU19FWElTVEVOQ0VfUFJPQkVfU0lHTkFMKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAvLyBgRVBFUk1gIG1lYW5zIHRoZSBwcm9jZXNzIGV4aXN0cyBidXQgaXMgb3duZWQgYnkgYW5vdGhlciB1c2VyIFx1MjAxNCBzdGlsbCBhbGl2ZS5cbiAgICByZXR1cm4gZ2V0RXJyb3JDb2RlKGVycm9yKSA9PT0gJ0VQRVJNJztcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGFuZCBwYXJzZXMgdGhlIGxvY2sgZmlsZSwgaWYgaXQgZXhpc3RzIGFuZCBpcyB2YWxpZCBKU09OLlxuICpcbiAqIEBwYXJhbSBsb2NrRmlsZVBhdGggLSBUaGUgcGF0aCB0byB0aGUgbG9jayBmaWxlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBsb2NrIGluZm8sIG9yIGB1bmRlZmluZWRgIGlmIGl0IGNvdWxkIG5vdCBiZSByZWFkLlxuICovXG5mdW5jdGlvbiByZWFkTG9ja0ZpbGVJbmZvKGxvY2tGaWxlUGF0aDogc3RyaW5nKTogTG9ja0ZpbGVJbmZvIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMobG9ja0ZpbGVQYXRoLCAndXRmLTgnKSkgYXMgTG9ja0ZpbGVJbmZvO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gYXRvbWljYWxseSBjcmVhdGUgdGhlIGxvY2sgZmlsZSAoZmFpbGluZyBpZiBpdCBhbHJlYWR5IGV4aXN0cykuXG4gKlxuICogQHBhcmFtIGxvY2tGaWxlUGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBsb2NrIGZpbGUuXG4gKiBAcGFyYW0gbGFiZWwgLSBUaGUgdHJhbnNwb3J0IGxhYmVsIHRvIHJlY29yZCBpbiB0aGUgbG9jayBmaWxlLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBsb2NrIHdhcyBhY3F1aXJlZCwgYGZhbHNlYCBpZiBpdCBpcyBhbHJlYWR5IGhlbGQuXG4gKiBAdGhyb3dzIElmIHRoZSBmaWxlIHN5c3RlbSBmYWlscyBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIHRoZSBmaWxlIGV4aXN0aW5nLlxuICovXG5mdW5jdGlvbiB0cnlDcmVhdGVMb2NrRmlsZShsb2NrRmlsZVBhdGg6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBpbmZvOiBMb2NrRmlsZUluZm8gPSB7XG4gICAgYWNxdWlyZWRBdEluTWlsbGlzZWNvbmRzOiBEYXRlLm5vdygpLFxuICAgIGhvc3RuYW1lOiBob3N0bmFtZSgpLFxuICAgIGxhYmVsLFxuICAgIHBpZDogcHJvY2Vzcy5waWRcbiAgfTtcblxuICB0cnkge1xuICAgIHdyaXRlRmlsZVN5bmMobG9ja0ZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShpbmZvKSwgeyBmbGFnOiAnd3gnIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGlmIChnZXRFcnJvckNvZGUoZXJyb3IpID09PSAnRUVYSVNUJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFvQkEscUJBS087QUFDUCxxQkFHTztBQUNQLHVCQUFxQjtBQUNyQiwwQkFBb0I7QUFFcEIsaUJBQW9CO0FBRXBCLE1BQU0sZ0JBQWdCO0FBQ3RCLE1BQU0sbUJBQW1CO0FBQ3pCLE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0sMEJBQTBCO0FBQ2hDLE1BQU0scUJBQXFCO0FB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
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Cross-process advisory lock that serializes whole integration-test runs.
|
|
5
|
+
*
|
|
6
|
+
* Two test runs that drive the same shared resources corrupt each other: on
|
|
7
|
+
* desktop they share the single local Obsidian instance, its `obsidian.json`
|
|
8
|
+
* registry, and the CDP port; on Android they share the emulator and the Appium
|
|
9
|
+
* server. One run's setup/teardown kills or reconfigures the instance the other
|
|
10
|
+
* run is mid-eval on (observed as `ECONNREFUSED` or "vault not open"), so both
|
|
11
|
+
* runs fail.
|
|
12
|
+
*
|
|
13
|
+
* This lock makes the second run **wait** for the first to finish instead of
|
|
14
|
+
* running concurrently. It is held for the entire run: acquired at the start of
|
|
15
|
+
* the core setup and released by the core teardown (and by the process cleanup
|
|
16
|
+
* handlers). The lock is a sentinel file in a shared temp directory, carrying
|
|
17
|
+
* the holder's PID so a run that crashed without releasing leaves a lock that
|
|
18
|
+
* the next run detects as stale and steals.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Parameters for {@link acquireSetupLock}.
|
|
22
|
+
*/
|
|
23
|
+
export interface AcquireSetupLockParams {
|
|
24
|
+
/** Short transport label for log messages (e.g. `"obsidian-cli"`). */
|
|
25
|
+
readonly label: string;
|
|
26
|
+
/**
|
|
27
|
+
* Logical scope the lock serializes within. Runs that share resources must
|
|
28
|
+
* use the same scope (e.g. `"desktop"` for the CLI/CDP transports, `"android"`
|
|
29
|
+
* for the Appium transport).
|
|
30
|
+
*/
|
|
31
|
+
readonly scope: string;
|
|
32
|
+
/**
|
|
33
|
+
* Maximum time to wait for a competing run to release the lock before giving
|
|
34
|
+
* up and throwing.
|
|
35
|
+
*
|
|
36
|
+
* @default 1 hour
|
|
37
|
+
*/
|
|
38
|
+
readonly timeoutInMilliseconds?: number | undefined;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A held setup lock. Release it once the run's teardown is complete.
|
|
42
|
+
*/
|
|
43
|
+
export interface SetupLock {
|
|
44
|
+
/** Releases the lock. Safe to call more than once. */
|
|
45
|
+
release(): void;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Acquires the cross-process setup lock for the given scope, waiting until any
|
|
49
|
+
* competing run releases it (or its lock is detected as stale).
|
|
50
|
+
*
|
|
51
|
+
* @param params - The lock parameters.
|
|
52
|
+
* @returns A handle whose {@link SetupLock.release} frees the lock.
|
|
53
|
+
* @throws If the lock cannot be acquired within `timeoutInMilliseconds`.
|
|
54
|
+
*/
|
|
55
|
+
export declare function acquireSetupLock(params: AcquireSetupLockParams): Promise<SetupLock>;
|