obsidian-integration-testing 9.2.2 → 10.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -1096
- package/dist/lib/cjs/appium-dependencies.cjs +5 -5
- package/dist/lib/cjs/appium-dependencies.d.cts +4 -2
- package/dist/lib/cjs/appium-session-config.cjs +1 -1
- package/dist/lib/cjs/asar-fallback-detection.cjs +4 -4
- package/dist/lib/cjs/asar-fallback-detection.d.cts +15 -7
- package/dist/lib/cjs/avd-list.cjs +1 -1
- package/dist/lib/cjs/avd-list.d.cts +6 -2
- package/dist/lib/cjs/capture-obsidian-screenshot.cjs +60 -0
- package/dist/lib/cjs/capture-obsidian-screenshot.d.cts +53 -0
- package/dist/lib/cjs/capture-screenshot.cjs +82 -0
- package/dist/lib/cjs/capture-screenshot.d.cts +99 -0
- package/dist/lib/cjs/cli.cjs +4 -4
- package/dist/lib/cjs/compatibility-options.cjs +13 -13
- package/dist/lib/cjs/compatibility-options.d.cts +24 -12
- package/dist/lib/cjs/connect-to-cdp.cjs +10 -4
- package/dist/lib/cjs/connect-to-cdp.d.cts +19 -6
- package/dist/lib/cjs/context-id.cjs +5 -5
- package/dist/lib/cjs/context-id.d.cts +1 -1
- package/dist/lib/cjs/context-provider.cjs +5 -5
- package/dist/lib/cjs/context-provider.d.cts +4 -4
- package/dist/lib/cjs/demo-vault-populate.cjs +5 -5
- package/dist/lib/cjs/demo-vault-populate.d.cts +4 -4
- package/dist/lib/cjs/demo-vault-tree.cjs +4 -4
- package/dist/lib/cjs/demo-vault-tree.d.cts +3 -3
- package/dist/lib/cjs/device-readiness.cjs +3 -3
- package/dist/lib/cjs/device-readiness.d.cts +7 -3
- package/dist/lib/cjs/ecmascript-version.cjs +1 -1
- package/dist/lib/cjs/electron-compatibility.cjs +4 -4
- package/dist/lib/cjs/electron-compatibility.d.cts +33 -17
- package/dist/lib/cjs/emulator-arguments.cjs +36 -0
- package/dist/lib/{esm/emulator-args.d.mts → cjs/emulator-arguments.d.cts} +6 -4
- package/dist/lib/cjs/enable-plugin.cjs +29 -29
- package/dist/lib/cjs/enable-plugin.d.cts +6 -6
- package/dist/lib/cjs/eval-in-obsidian.cjs +9 -9
- package/dist/lib/cjs/eval-in-obsidian.d.cts +23 -23
- package/dist/lib/cjs/exec.cjs +49 -53
- package/dist/lib/cjs/exec.d.cts +9 -9
- package/dist/lib/cjs/function-expression.cjs +8 -8
- package/dist/lib/cjs/function-expression.d.cts +4 -4
- package/dist/lib/cjs/generate-function-call.cjs +6 -6
- package/dist/lib/cjs/generate-function-call.d.cts +15 -9
- package/dist/lib/cjs/global-setup-core.cjs +43 -43
- package/dist/lib/cjs/global-setup-core.d.cts +19 -9
- package/dist/lib/cjs/incompatible-installer-version-error.cjs +10 -4
- package/dist/lib/cjs/incompatible-installer-version-error.d.cts +18 -6
- package/dist/lib/cjs/index.cjs +22 -10
- package/dist/lib/cjs/index.d.cts +12 -8
- package/dist/lib/cjs/installer-asset.cjs +4 -4
- package/dist/lib/cjs/installer-asset.d.cts +21 -7
- package/dist/lib/cjs/installer-compatibility.cjs +4 -4
- package/dist/lib/cjs/installer-compatibility.d.cts +36 -18
- package/dist/lib/cjs/jest/global-setup-no-plugin.cjs +3 -3
- package/dist/lib/cjs/jest/global-setup-no-plugin.d.cts +1 -1
- package/dist/lib/cjs/jest/global-setup.cjs +11 -11
- package/dist/lib/cjs/jest/global-setup.d.cts +12 -8
- package/dist/lib/cjs/jest/global-teardown-no-plugin.cjs +2 -3
- package/dist/lib/cjs/jest/global-teardown-no-plugin.d.cts +1 -2
- package/dist/lib/cjs/jest/global-teardown.cjs +2 -3
- package/dist/lib/cjs/jest/global-teardown.d.cts +1 -2
- package/dist/lib/cjs/jest/setup.cjs +2 -2
- package/dist/lib/cjs/jest/setup.d.cts +1 -1
- package/dist/lib/cjs/json-with-functions.cjs +7 -7
- package/dist/lib/cjs/leftover-cleanup.cjs +14 -14
- package/dist/lib/cjs/leftover-cleanup.d.cts +42 -20
- package/dist/lib/cjs/library.cjs +2 -2
- package/dist/lib/cjs/namespace-bootstrap.cjs +46 -40
- package/dist/lib/cjs/native-dialog-monitor.cjs +15 -13
- package/dist/lib/cjs/normalize-optional-properties.cjs +3 -3
- package/dist/lib/cjs/normalize-optional-properties.d.cts +2 -2
- package/dist/lib/cjs/obsidian-config.cjs +30 -31
- package/dist/lib/cjs/obsidian-config.d.cts +8 -8
- package/dist/lib/cjs/obsidian-executable.cjs +2 -2
- package/dist/lib/cjs/obsidian-installer.cjs +37 -37
- package/dist/lib/cjs/obsidian-installer.d.cts +7 -3
- package/dist/lib/cjs/obsidian-instance.cjs +3 -3
- package/dist/lib/cjs/obsidian-instance.d.cts +18 -8
- package/dist/lib/cjs/obsidian-metadata.cjs +28 -1
- package/dist/lib/cjs/obsidian-metadata.d.cts +36 -12
- package/dist/lib/cjs/obsidian-namespace.cjs +1 -1
- package/dist/lib/cjs/obsidian-namespace.d.cts +25 -11
- package/dist/lib/cjs/obsidian-version-switch.cjs +9 -9
- package/dist/lib/cjs/obsidian-version-switch.d.cts +14 -10
- package/dist/lib/cjs/obsidian-version.cjs +3 -3
- package/dist/lib/cjs/obsidian-version.d.cts +15 -5
- package/dist/lib/cjs/owned-vault-seed.cjs +1 -1
- package/dist/lib/cjs/owned-vault-seed.d.cts +24 -8
- package/dist/lib/cjs/parent-liveness.cjs +4 -4
- package/dist/lib/cjs/parent-liveness.d.cts +7 -3
- package/dist/lib/cjs/poll-in-obsidian.cjs +5 -5
- package/dist/lib/cjs/poll-in-obsidian.d.cts +12 -12
- package/dist/lib/cjs/poll-until.cjs +1 -1
- package/dist/lib/cjs/poll-until.d.cts +21 -7
- package/dist/lib/cjs/process-exit-message.cjs +1 -1
- package/dist/lib/cjs/process-exit-message.d.cts +21 -7
- package/dist/lib/cjs/renderer-boot-detection.cjs +9 -9
- package/dist/lib/cjs/renderer-boot-detection.d.cts +31 -27
- package/dist/lib/cjs/renderer-failed-to-initialize-error.cjs +1 -1
- package/dist/lib/cjs/renderer-failed-to-initialize-error.d.cts +1 -1
- package/dist/lib/cjs/setup-lock.cjs +26 -26
- package/dist/lib/cjs/setup-lock.d.cts +6 -2
- package/dist/lib/cjs/silent-asar-fallback-error.cjs +7 -3
- package/dist/lib/cjs/silent-asar-fallback-error.d.cts +12 -4
- package/dist/lib/cjs/spawn-options.cjs +1 -1
- package/dist/lib/cjs/spawn-options.d.cts +3 -1
- package/dist/lib/cjs/strict-proxy.cjs +25 -25
- package/dist/lib/cjs/strict-proxy.d.cts +3 -3
- package/dist/lib/cjs/temporary-vault.cjs +166 -0
- package/dist/lib/cjs/{temp-vault.d.cts → temporary-vault.d.cts} +3 -3
- package/dist/lib/cjs/transport-appium.cjs +29 -7
- package/dist/lib/cjs/transport-appium.d.cts +23 -3
- package/dist/lib/cjs/transport-desktop-cdp.cjs +99 -57
- package/dist/lib/cjs/transport-desktop-cdp.d.cts +44 -17
- package/dist/lib/cjs/transport-factory.cjs +62 -63
- package/dist/lib/cjs/transport.cjs +1 -1
- package/dist/lib/cjs/transport.d.cts +15 -0
- package/dist/lib/cjs/type-guards.cjs +8 -3
- package/dist/lib/cjs/type-guards.d.cts +9 -2
- package/dist/lib/cjs/vault-path-match.cjs +9 -9
- package/dist/lib/cjs/vault-path-match.d.cts +11 -11
- package/dist/lib/cjs/version-matrix.cjs +1 -1
- package/dist/lib/cjs/version-matrix.d.cts +51 -17
- package/dist/lib/cjs/visibility.cjs +7 -7
- package/dist/lib/cjs/visibility.d.cts +5 -5
- package/dist/lib/cjs/vitest/global-setup-no-plugin.cjs +3 -3
- package/dist/lib/cjs/vitest/global-setup-no-plugin.d.cts +2 -2
- package/dist/lib/cjs/vitest/global-setup.cjs +9 -9
- package/dist/lib/cjs/vitest/global-setup.d.cts +4 -4
- package/dist/lib/cjs/vitest/setup.cjs +2 -2
- package/dist/lib/cjs/vitest/typings.d.cts +2 -2
- package/dist/lib/esm/appium-dependencies.d.mts +4 -2
- package/dist/lib/esm/appium-dependencies.mjs +4 -4
- package/dist/lib/esm/appium-session-config.mjs +1 -1
- package/dist/lib/esm/asar-fallback-detection.d.mts +15 -7
- package/dist/lib/esm/asar-fallback-detection.mjs +3 -3
- package/dist/lib/esm/avd-list.d.mts +6 -2
- package/dist/lib/esm/avd-list.mjs +1 -1
- package/dist/lib/esm/capture-obsidian-screenshot.d.mts +53 -0
- package/dist/lib/esm/capture-obsidian-screenshot.mjs +29 -0
- package/dist/lib/esm/capture-screenshot.d.mts +99 -0
- package/dist/lib/esm/capture-screenshot.mjs +55 -0
- package/dist/lib/esm/cli.mjs +4 -4
- package/dist/lib/esm/compatibility-options.d.mts +24 -12
- package/dist/lib/esm/compatibility-options.mjs +10 -10
- package/dist/lib/esm/connect-to-cdp.d.mts +19 -6
- package/dist/lib/esm/connect-to-cdp.mjs +12 -6
- package/dist/lib/esm/context-id.d.mts +1 -1
- package/dist/lib/esm/context-id.mjs +5 -5
- package/dist/lib/esm/context-provider.d.mts +4 -4
- package/dist/lib/esm/context-provider.mjs +5 -5
- package/dist/lib/esm/demo-vault-populate.d.mts +4 -4
- package/dist/lib/esm/demo-vault-populate.mjs +5 -5
- package/dist/lib/esm/demo-vault-tree.d.mts +3 -3
- package/dist/lib/esm/demo-vault-tree.mjs +4 -4
- package/dist/lib/esm/device-readiness.d.mts +7 -3
- package/dist/lib/esm/device-readiness.mjs +3 -3
- package/dist/lib/esm/ecmascript-version.mjs +1 -1
- package/dist/lib/esm/electron-compatibility.d.mts +33 -17
- package/dist/lib/esm/electron-compatibility.mjs +3 -3
- package/dist/lib/{cjs/emulator-args.d.cts → esm/emulator-arguments.d.mts} +6 -4
- package/dist/lib/esm/emulator-arguments.mjs +12 -0
- package/dist/lib/esm/enable-plugin.d.mts +6 -6
- package/dist/lib/esm/enable-plugin.mjs +29 -29
- package/dist/lib/esm/eval-in-obsidian.d.mts +23 -23
- package/dist/lib/esm/eval-in-obsidian.mjs +9 -9
- package/dist/lib/esm/exec.d.mts +9 -9
- package/dist/lib/esm/exec.mjs +49 -53
- package/dist/lib/esm/function-expression.d.mts +4 -4
- package/dist/lib/esm/function-expression.mjs +8 -8
- package/dist/lib/esm/generate-function-call.d.mts +15 -9
- package/dist/lib/esm/generate-function-call.mjs +6 -6
- package/dist/lib/esm/global-setup-core.d.mts +19 -9
- package/dist/lib/esm/global-setup-core.mjs +45 -45
- package/dist/lib/esm/incompatible-installer-version-error.d.mts +18 -6
- package/dist/lib/esm/incompatible-installer-version-error.mjs +10 -4
- package/dist/lib/esm/index.d.mts +12 -8
- package/dist/lib/esm/index.mjs +21 -9
- package/dist/lib/esm/installer-asset.d.mts +21 -7
- package/dist/lib/esm/installer-asset.mjs +4 -4
- package/dist/lib/esm/installer-compatibility.d.mts +36 -18
- package/dist/lib/esm/installer-compatibility.mjs +3 -3
- package/dist/lib/esm/jest/global-setup-no-plugin.d.mts +1 -1
- package/dist/lib/esm/jest/global-setup-no-plugin.mjs +3 -3
- package/dist/lib/esm/jest/global-setup.d.mts +12 -8
- package/dist/lib/esm/jest/global-setup.mjs +10 -10
- package/dist/lib/esm/jest/global-teardown-no-plugin.d.mts +1 -2
- package/dist/lib/esm/jest/global-teardown-no-plugin.mjs +2 -3
- package/dist/lib/esm/jest/global-teardown.d.mts +1 -2
- package/dist/lib/esm/jest/global-teardown.mjs +2 -3
- package/dist/lib/esm/jest/setup.d.mts +1 -1
- package/dist/lib/esm/jest/setup.mjs +2 -2
- package/dist/lib/esm/json-with-functions.mjs +7 -7
- package/dist/lib/esm/leftover-cleanup.d.mts +42 -20
- package/dist/lib/esm/leftover-cleanup.mjs +12 -12
- package/dist/lib/esm/library.mjs +2 -2
- package/dist/lib/esm/namespace-bootstrap.mjs +46 -40
- package/dist/lib/esm/native-dialog-monitor.mjs +15 -13
- package/dist/lib/esm/normalize-optional-properties.d.mts +2 -2
- package/dist/lib/esm/normalize-optional-properties.mjs +3 -3
- package/dist/lib/esm/obsidian-config.d.mts +8 -8
- package/dist/lib/esm/obsidian-config.mjs +27 -28
- package/dist/lib/esm/obsidian-executable.mjs +2 -2
- package/dist/lib/esm/obsidian-installer.d.mts +7 -3
- package/dist/lib/esm/obsidian-installer.mjs +36 -36
- package/dist/lib/esm/obsidian-instance.d.mts +18 -8
- package/dist/lib/esm/obsidian-instance.mjs +3 -3
- package/dist/lib/esm/obsidian-metadata.d.mts +36 -12
- package/dist/lib/esm/obsidian-metadata.mjs +28 -1
- package/dist/lib/esm/obsidian-namespace.d.mts +25 -11
- package/dist/lib/esm/obsidian-version-switch.d.mts +14 -10
- package/dist/lib/esm/obsidian-version-switch.mjs +9 -9
- package/dist/lib/esm/obsidian-version.d.mts +15 -5
- package/dist/lib/esm/obsidian-version.mjs +3 -3
- package/dist/lib/esm/owned-vault-seed.d.mts +24 -8
- package/dist/lib/esm/owned-vault-seed.mjs +1 -1
- package/dist/lib/esm/parent-liveness.d.mts +7 -3
- package/dist/lib/esm/parent-liveness.mjs +3 -3
- package/dist/lib/esm/poll-in-obsidian.d.mts +12 -12
- package/dist/lib/esm/poll-in-obsidian.mjs +5 -5
- package/dist/lib/esm/poll-until.d.mts +21 -7
- package/dist/lib/esm/poll-until.mjs +1 -1
- package/dist/lib/esm/process-exit-message.d.mts +21 -7
- package/dist/lib/esm/process-exit-message.mjs +1 -1
- package/dist/lib/esm/renderer-boot-detection.d.mts +31 -27
- package/dist/lib/esm/renderer-boot-detection.mjs +7 -7
- package/dist/lib/esm/renderer-failed-to-initialize-error.d.mts +1 -1
- package/dist/lib/esm/renderer-failed-to-initialize-error.mjs +1 -1
- package/dist/lib/esm/setup-lock.d.mts +6 -2
- package/dist/lib/esm/setup-lock.mjs +26 -26
- package/dist/lib/esm/silent-asar-fallback-error.d.mts +12 -4
- package/dist/lib/esm/silent-asar-fallback-error.mjs +7 -3
- package/dist/lib/esm/spawn-options.d.mts +3 -1
- package/dist/lib/esm/spawn-options.mjs +1 -1
- package/dist/lib/esm/strict-proxy.d.mts +3 -3
- package/dist/lib/esm/strict-proxy.mjs +25 -25
- package/dist/lib/esm/{temp-vault.d.mts → temporary-vault.d.mts} +3 -3
- package/dist/lib/esm/temporary-vault.mjs +157 -0
- package/dist/lib/esm/transport-appium.d.mts +23 -3
- package/dist/lib/esm/transport-appium.mjs +32 -7
- package/dist/lib/esm/transport-desktop-cdp.d.mts +44 -17
- package/dist/lib/esm/transport-desktop-cdp.mjs +113 -67
- package/dist/lib/esm/transport-factory.mjs +71 -72
- package/dist/lib/esm/transport.d.mts +15 -0
- package/dist/lib/esm/type-guards.d.mts +9 -2
- package/dist/lib/esm/type-guards.mjs +7 -3
- package/dist/lib/esm/vault-path-match.d.mts +11 -11
- package/dist/lib/esm/vault-path-match.mjs +7 -7
- package/dist/lib/esm/version-matrix.d.mts +51 -17
- package/dist/lib/esm/version-matrix.mjs +1 -1
- package/dist/lib/esm/visibility.d.mts +5 -5
- package/dist/lib/esm/visibility.mjs +5 -5
- package/dist/lib/esm/vitest/global-setup-no-plugin.d.mts +2 -2
- package/dist/lib/esm/vitest/global-setup-no-plugin.mjs +3 -3
- package/dist/lib/esm/vitest/global-setup.d.mts +4 -4
- package/dist/lib/esm/vitest/global-setup.mjs +8 -8
- package/dist/lib/esm/vitest/setup.mjs +2 -2
- package/dist/lib/esm/vitest/typings.d.mts +2 -2
- package/dist/obsidian-integration-testing-10.1.0.tgz +0 -0
- package/package.json +35 -18
- package/dist/lib/cjs/emulator-args.cjs +0 -36
- package/dist/lib/cjs/temp-vault.cjs +0 -166
- package/dist/lib/esm/emulator-args.mjs +0 -12
- package/dist/lib/esm/temp-vault.mjs +0 -157
- package/dist/obsidian-integration-testing-9.2.2.tgz +0 -0
|
@@ -20,7 +20,7 @@ var appium_dependencies_exports = {};
|
|
|
20
20
|
__export(appium_dependencies_exports, {
|
|
21
21
|
UIAUTOMATOR2_DRIVER_NAME: () => UIAUTOMATOR2_DRIVER_NAME,
|
|
22
22
|
checkIsAppiumDriverInstalled: () => checkIsAppiumDriverInstalled,
|
|
23
|
-
|
|
23
|
+
willAutoInstallAppiumDependencies: () => willAutoInstallAppiumDependencies
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(appium_dependencies_exports);
|
|
26
26
|
const UIAUTOMATOR2_DRIVER_NAME = "uiautomator2";
|
|
@@ -34,15 +34,15 @@ function checkIsAppiumDriverInstalled(params) {
|
|
|
34
34
|
if (typeof parsed !== "object" || parsed === null) {
|
|
35
35
|
return false;
|
|
36
36
|
}
|
|
37
|
-
return params.driverName
|
|
37
|
+
return Object.hasOwn(parsed, params.driverName);
|
|
38
38
|
}
|
|
39
|
-
function
|
|
39
|
+
function willAutoInstallAppiumDependencies(options) {
|
|
40
40
|
return options.shouldAutoInstallAppiumDependencies ?? true;
|
|
41
41
|
}
|
|
42
42
|
// Annotate the CommonJS export names for ESM import in node:
|
|
43
43
|
0 && (module.exports = {
|
|
44
44
|
UIAUTOMATOR2_DRIVER_NAME,
|
|
45
45
|
checkIsAppiumDriverInstalled,
|
|
46
|
-
|
|
46
|
+
willAutoInstallAppiumDependencies
|
|
47
47
|
});
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FwcGl1bS1kZXBlbmRlbmNpZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIGhlbHBlcnMgZm9yIGRlY2lkaW5nIHdoZXRoZXIgdGhlIGhhcm5lc3MgbXVzdCBhdXRvLWluc3RhbGwgdGhlIEFwcGl1bVxuICogZGVwZW5kZW5jaWVzICh0aGUgYHVpYXV0b21hdG9yMmAgZHJpdmVyKSBiZWZvcmUgaXQgYXV0by1zdGFydHMgdGhlIEFwcGl1bVxuICogc2VydmVyLCBwbHVzIHJlc29sdmluZyB0aGUgYXV0by1pbnN0YWxsIG9wdC1vdXQgZnJvbSB0aGUgdHJhbnNwb3J0IG9wdGlvbnMuXG4gKiBLZXB0IHNlcGFyYXRlIGZyb20gdGhlIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1mYWN0b3J5YCBzbyB0aGUgcGFyc2luZyBhbmRcbiAqIGRlZmF1bHQgcmVzb2x1dGlvbiBzdGF5IHVuaXQtdGVzdGFibGUgKHRoZSBmYWN0b3J5IGl0c2VsZiBzaGVsbHMgb3V0IHRvIGBucG1gXG4gKiAvIGBucHhgIGFuZCBpcyBleGNsdWRlZCBmcm9tIHVuaXQgdGVzdHMpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcblxuLyoqXG4gKiBUaGUgQXBwaXVtIGRyaXZlciBuYW1lIHJlcXVpcmVkIHRvIGF1dG9tYXRlIE9ic2lkaWFuIE1vYmlsZSBvbiBBbmRyb2lkLlxuICovXG5leHBvcnQgY29uc3QgVUlBVVRPTUFUT1IyX0RSSVZFUl9OQU1FID0gJ3VpYXV0b21hdG9yMic7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNoZWNrSXNBcHBpdW1Ecml2ZXJJbnN0YWxsZWR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrSXNBcHBpdW1Ecml2ZXJJbnN0YWxsZWRQYXJhbXMge1xuICAvKipcbiAgICogUmF3IHN0ZG91dCBvZiBgYXBwaXVtIGRyaXZlciBsaXN0IC0taW5zdGFsbGVkIC0tanNvbmAgXHUyMDE0IGEgSlNPTiBvYmplY3Qga2V5ZWRcbiAgICogYnkgaW5zdGFsbGVkIGRyaXZlciBuYW1lIChge31gIHdoZW4gbm9uZSBhcmUgaW5zdGFsbGVkKS5cbiAgICovXG4gIHJlYWRvbmx5IGRyaXZlckxpc3RKc29uOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSBkcml2ZXIgbmFtZSB0byBsb29rIGZvciAoZS5nLiB7QGxpbmsgVUlBVVRPTUFUT1IyX0RSSVZFUl9OQU1FfSkuXG4gICAqL1xuICByZWFkb25seSBkcml2ZXJOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgZ2l2ZW4gQXBwaXVtIGRyaXZlciBpcyBpbnN0YWxsZWQsIGZyb20gdGhlIHJhdyBKU09OIG91dHB1dFxuICogb2YgYGFwcGl1bSBkcml2ZXIgbGlzdCAtLWluc3RhbGxlZCAtLWpzb25gLlxuICpcbiAqIGAtLWluc3RhbGxlZGAgcmVzdHJpY3RzIHRoZSBsaXN0aW5nIHRvIGluc3RhbGxlZCBkcml2ZXJzLCBzbyBhIGRyaXZlciBpc1xuICogcHJlc2VudCBleGFjdGx5IHdoZW4gaXRzIG5hbWUgaXMgYSBrZXkgb2YgdGhlIHBhcnNlZCBvYmplY3QuIE1hbGZvcm1lZCBvclxuICogbm9uLW9iamVjdCBvdXRwdXQgKGFuIGVtcHR5IHN0cmluZywgYSBsb2cgbGluZSB0aGF0IGxlYWtlZCBvbnRvIHN0ZG91dCwgYVxuICogSlNPTiBwcmltaXRpdmUsIGBudWxsYCkgaXMgdHJlYXRlZCBhcyBcIm5vdCBpbnN0YWxsZWRcIiBzbyB0aGUgY2FsbGVyIHByb2NlZWRzXG4gKiB0byBpbnN0YWxsIFx1MjAxNCB0aGUgaW5zdGFsbCBjb21tYW5kIGlzIG9ubHkgaXNzdWVkIHdoZW4gdGhpcyByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzYW1wbGVkIGRyaXZlci1saXN0IG91dHB1dCBhbmQgdGhlIGRyaXZlciBuYW1lIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGRyaXZlciBpcyBsaXN0ZWQgYXMgaW5zdGFsbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJc0FwcGl1bURyaXZlckluc3RhbGxlZChwYXJhbXM6IENoZWNrSXNBcHBpdW1Ecml2ZXJJbnN0YWxsZWRQYXJhbXMpOiBib29sZWFuIHtcbiAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHBhcmFtcy5kcml2ZXJMaXN0SnNvbik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBwYXJzZWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0Lmhhc093bihwYXJzZWQsIHBhcmFtcy5kcml2ZXJOYW1lKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB3aGV0aGVyIHRoZSBoYXJuZXNzIG1heSBhdXRvLWluc3RhbGwgbWlzc2luZyBBcHBpdW0gZGVwZW5kZW5jaWVzLFxuICogYXBwbHlpbmcgdGhlIGRlZmF1bHQgd2hlbiB0aGUgb3B0aW9uIGlzIG9taXR0ZWQuXG4gKlxuICogVGhpcyBvbmx5IGdvdmVybnMgdGhlIG1hY2hpbmUtbXV0YXRpbmcgaW5zdGFsbCBzdGVwIChhIGdsb2JhbCBgbnBtIGluc3RhbGwgLWdcbiAqIGFwcGl1bWAgYW5kIGFuIGBhcHBpdW0gZHJpdmVyIGluc3RhbGxgKTsgaXQgaXMgYSBuby1vcCB1bmxlc3MgdGhlIGhhcm5lc3MgaXNcbiAqIGFsc28gYXV0by1zdGFydGluZyB0aGUgQXBwaXVtIHNlcnZlciAoe0BsaW5rXG4gKiBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zLnNob3VsZEF1dG9TdGFydEFwcGl1bX0pLiBTZXQgaXQgdG9cbiAqIGBmYWxzZWAgdG8gbWFuYWdlIHRoZSBBcHBpdW0gdG9vbGNoYWluIHlvdXJzZWxmLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIEFuZHJvaWQgQXBwaXVtIHRyYW5zcG9ydCBvcHRpb25zLlxuICogQHJldHVybnMgV2hldGhlciBtaXNzaW5nIEFwcGl1bSBkZXBlbmRlbmNpZXMgbWF5IGJlIGF1dG8taW5zdGFsbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2lsbEF1dG9JbnN0YWxsQXBwaXVtRGVwZW5kZW5jaWVzKFxuICBvcHRpb25zOiBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIG9wdGlvbnMuc2hvdWxkQXV0b0luc3RhbGxBcHBpdW1EZXBlbmRlbmNpZXMgPz8gdHJ1ZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0JPLE1BQU0sMkJBQTJCO0FBK0JqQyxTQUFTLDZCQUE2QixRQUFxRDtBQUNoRyxNQUFJO0FBQ0osTUFBSTtBQUNGLGFBQVMsS0FBSyxNQUFNLE9BQU8sY0FBYztBQUFBLEVBQzNDLFFBQVE7QUFDTixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksT0FBTyxXQUFXLFlBQVksV0FBVyxNQUFNO0FBQ2pELFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxPQUFPLE9BQU8sUUFBUSxPQUFPLFVBQVU7QUFDaEQ7QUFlTyxTQUFTLGtDQUNkLFNBQ1M7QUFDVCxTQUFPLFFBQVEsdUNBQXVDO0FBQ3hEOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -22,7 +22,9 @@ export interface CheckIsAppiumDriverInstalledParams {
|
|
|
22
22
|
* by installed driver name (`{}` when none are installed).
|
|
23
23
|
*/
|
|
24
24
|
readonly driverListJson: string;
|
|
25
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
The driver name to look for (e.g. {@link UIAUTOMATOR2_DRIVER_NAME}).
|
|
27
|
+
*/
|
|
26
28
|
readonly driverName: string;
|
|
27
29
|
}
|
|
28
30
|
/**
|
|
@@ -52,4 +54,4 @@ export declare function checkIsAppiumDriverInstalled(params: CheckIsAppiumDriver
|
|
|
52
54
|
* @param options - The Android Appium transport options.
|
|
53
55
|
* @returns Whether missing Appium dependencies may be auto-installed.
|
|
54
56
|
*/
|
|
55
|
-
export declare function
|
|
57
|
+
export declare function willAutoInstallAppiumDependencies(options: ObsidianAndroidAppiumTransportOptions): boolean;
|
|
@@ -39,4 +39,4 @@ function resolveSessionConnectionRetryTimeoutInMilliseconds(options) {
|
|
|
39
39
|
resolveAppiumStartTimeoutInMilliseconds,
|
|
40
40
|
resolveSessionConnectionRetryTimeoutInMilliseconds
|
|
41
41
|
});
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FwcGl1bS1zZXNzaW9uLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlc29sdmVzIHR1bmFibGUgQXBwaXVtIHNlcnZlci1zdGFydCBhbmQgc2Vzc2lvbi1lc3RhYmxpc2htZW50IHRpbWVvdXRzIGZyb21cbiAqIHRoZSB0cmFuc3BvcnQgb3B0aW9ucywgYXBwbHlpbmcgZGVmYXVsdHMuIEtlcHQgc2VwYXJhdGUgZnJvbSB0aGVcbiAqIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1mYWN0b3J5YCBzbyB0aGUgZGVmYXVsdCByZXNvbHV0aW9uIHN0YXlzXG4gKiB1bml0LXRlc3RhYmxlICh0aGUgZmFjdG9yeSBpdHNlbGYgbmVlZHMgYSByZWFsIEFwcGl1bSBzZXJ2ZXIgYW5kIGlzIGV4Y2x1ZGVkXG4gKiBmcm9tIHVuaXQgdGVzdHMpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcblxuLyoqXG4gKiBEZWZhdWx0IGZvciB7QGxpbmsgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucy5hcHBpdW1TdGFydFRpbWVvdXRJbk1pbGxpc2Vjb25kc30uXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDE4MF8wMDA7XG5cbi8qKlxuICogRGVmYXVsdCBmb3Ige0BsaW5rIE9ic2lkaWFuQW5kcm9pZEFwcGl1bVRyYW5zcG9ydE9wdGlvbnMuc2Vzc2lvbkNvbm5lY3Rpb25SZXRyeVRpbWVvdXRJbk1pbGxpc2Vjb25kc30uXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFU1NJT05fQ09OTkVDVElPTl9SRVRSWV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDE4MF8wMDA7XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGF1dG8tc3RhcnRlZCBBcHBpdW0gc2VydmVyIHJlYWRpbmVzcyB0aW1lb3V0LCBhcHBseWluZyB0aGVcbiAqIGRlZmF1bHQgd2hlbiB0aGUgb3B0aW9uIGlzIG9taXR0ZWQuXG4gKlxuICogVGhpcyBnb3Zlcm5zIGhvdyBsb25nIHRoZSBmYWN0b3J5IHBvbGxzIHRoZSBhdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlcidzXG4gKiBgL3N0YXR1c2AgZW5kcG9pbnQgYmVmb3JlIGdpdmluZyB1cC4gT25seSByZWxldmFudCB3aGVuIHRoZSBoYXJuZXNzXG4gKiBhdXRvLXN0YXJ0cyB0aGUgc2VydmVyOyB3aGVuIGF0dGFjaGluZyB0byBhbiBhbHJlYWR5LXJ1bm5pbmcgc2VydmVyIHRoZSB3YWl0XG4gKiBpcyBza2lwcGVkIGVudGlyZWx5LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIEFuZHJvaWQgQXBwaXVtIHRyYW5zcG9ydCBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFwcGl1bVN0YXJ0VGltZW91dEluTWlsbGlzZWNvbmRzKFxuICBvcHRpb25zOiBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zXG4pOiBudW1iZXIge1xuICByZXR1cm4gb3B0aW9ucy5hcHBpdW1TdGFydFRpbWVvdXRJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX0FQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgQXBwaXVtIHNlc3Npb24gY29ubmVjdGlvbiByZXRyeSB0aW1lb3V0LCBhcHBseWluZyB0aGUgZGVmYXVsdFxuICogd2hlbiB0aGUgb3B0aW9uIGlzIG9taXR0ZWQuXG4gKlxuICogVGhpcyBnb3Zlcm5zIGhvdyBsb25nIFdlYkRyaXZlcklPJ3MgYHJlbW90ZSgpYCB3YWl0cyBmb3IgdGhlIHNlc3Npb24gdG8gYmVcbiAqIGVzdGFibGlzaGVkIChVaUF1dG9tYXRvcjIgc2VydmVyIGluc3RhbGwgKyBhcHAgbGF1bmNoKSBcdTIwMTQgZW1waXJpY2FsbHkgdGhlXG4gKiBsYXJnZXN0IGFuZCBtb3N0IGxvYWQtc2Vuc2l0aXZlIHN0ZXAgb2YgdGhlIEFuZHJvaWQgc2V0dXAsIHNvIGl0IGlzIHRoZSBrbm9iXG4gKiB0byByYWlzZSB3aGVuIHNlc3Npb24gZXN0YWJsaXNobWVudCB0aW1lcyBvdXQgb24gYSBjb2xkIG9yIGNvbnRlbmRlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBBbmRyb2lkIEFwcGl1bSB0cmFuc3BvcnQgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTZXNzaW9uQ29ubmVjdGlvblJldHJ5VGltZW91dEluTWlsbGlzZWNvbmRzKFxuICBvcHRpb25zOiBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zXG4pOiBudW1iZXIge1xuICByZXR1cm4gb3B0aW9ucy5zZXNzaW9uQ29ubmVjdGlvblJldHJ5VGltZW91dEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfU0VTU0lPTl9DT05ORUNUSU9OX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVPLE1BQU0sK0NBQStDO0FBS3JELE1BQU0sMkRBQTJEO0FBY2pFLFNBQVMsd0NBQ2QsU0FDUTtBQUNSLFNBQU8sUUFBUSxvQ0FBb0M7QUFDckQ7QUFjTyxTQUFTLG1EQUNkLFNBQ1E7QUFDUixTQUFPLFFBQVEsK0NBQStDO0FBQ2hFOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -18,11 +18,11 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var asar_fallback_detection_exports = {};
|
|
20
20
|
__export(asar_fallback_detection_exports, {
|
|
21
|
-
|
|
21
|
+
resolveAsarFallback: () => resolveAsarFallback
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(asar_fallback_detection_exports);
|
|
24
24
|
var import_obsidian_version = require("./obsidian-version.cjs");
|
|
25
|
-
function
|
|
25
|
+
function resolveAsarFallback(params) {
|
|
26
26
|
const { requestedVersion, runningApiVersion } = params;
|
|
27
27
|
if (requestedVersion === void 0 || runningApiVersion === void 0) {
|
|
28
28
|
return {
|
|
@@ -43,6 +43,6 @@ function checkAsarFallback(params) {
|
|
|
43
43
|
}
|
|
44
44
|
// Annotate the CommonJS export names for ESM import in node:
|
|
45
45
|
0 && (module.exports = {
|
|
46
|
-
|
|
46
|
+
resolveAsarFallback
|
|
47
47
|
});
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FzYXItZmFsbGJhY2stZGV0ZWN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSB2ZXJkaWN0IG9uIHdoZXRoZXIgYSBib290ZWQgb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgaXMgYWN0dWFsbHkgcnVubmluZ1xuICogdGhlIHBpbm5lZCBhcHAgKGFzYXIpIHZlcnNpb24sIG9yICoqc2lsZW50bHkgZmVsbCBiYWNrKiogdG8gdGhlIGluc3RhbGxlcidzIG93blxuICogYnVuZGxlZCBhc2FyLiBLZXB0IHNlcGFyYXRlIGZyb20gdGhlIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1kZXNrdG9wLWNkcGBcbiAqICh3aGljaCByZWFkcyB0aGUgbGl2ZSB2ZXJzaW9uIG92ZXIgQ0RQIGFuZCBpcyBleGNsdWRlZCBmcm9tIHVuaXQgdGVzdHMpIHNvIHRoZVxuICogdGllciBsb2dpYyBzdGF5cyB1bml0LXRlc3RhYmxlIFx1MjAxNCBtaXJyb3JpbmcgdGhlIGBpbnN0YWxsZXItY29tcGF0aWJpbGl0eWAgL1xuICogYGVsZWN0cm9uLWNvbXBhdGliaWxpdHlgIC8gYHJlbmRlcmVyLWJvb3QtZGV0ZWN0aW9uYCBzcGxpdC5cbiAqXG4gKiBXaGVuIGFuIGFzYXIgaXMgc3dhcHBlZCBvbnRvIGFuIGluc3RhbGxlciBzaGVsbCBiZWxvdyBpdHMgcmVhbCBib290IGZsb29yLCB0aGVcbiAqIHJlbmRlcmVyIGRvZXMgbm90IGFsd2F5cyBkZWFkLWJvb3QgKHRoZSBibGFjayBzY3JlZW4gYHJlbmRlcmVyLWJvb3QtZGV0ZWN0aW9uYFxuICogY2F0Y2hlcykuIFNvbWUgYXBwIHZlcnNpb25zIGluc3RlYWQgKipzaWxlbnRseSByZXZlcnQgdG8gdGhlIGluc3RhbGxlcidzIG93blxuICogYnVuZGxlZCBhc2FyKiogYW5kIHJlbmRlciBhIHBlcmZlY3RseSBoZWFsdGh5IFVJIG9mIHRoZSAqd3JvbmcgKG9sZGVyKSogdmVyc2lvbi5cbiAqIFRoZSBkZWFkLWJvb3QgZGV0ZWN0b3IgcmVhZHMgdGhhdCBoZWFsdGh5IFVJIGFzIGEgZmFsc2UtcG9zaXRpdmUgXCJydW5uYWJsZVwiIFx1MjAxNFxuICogZXhhY3RseSBob3cgT2JzaWRpYW4gYDEuMTMuMGAgb24gaW5zdGFsbGVyIGAxLjEuOWAgd2FzIGZpcnN0IG1pcy1tZWFzdXJlZCAoaXRcbiAqIHJlcG9ydHMgYGFwaVZlcnNpb25gIGAxLjEuOWAsIG5vdCBgMS4xMy4wYCkuXG4gKlxuICogVGhlIGRpc2NyaW1pbmF0b3IgaXMgdGhlICoqcnVubmluZyoqIGFwcCB2ZXJzaW9uLCByZWFkIGxpdmUgcG9zdC1ib290XG4gKiAoYGlwY1JlbmRlcmVyLnNlbmRTeW5jKCd2ZXJzaW9uJylgIC8gYG9ic2lkaWFuTW9kdWxlLmFwaVZlcnNpb25gLCB3aGljaCBib3RoXG4gKiB0cmFjayB0aGUgYXNhciBhY3R1YWxseSBydW5uaW5nKS4gVGhpcyB2ZXJkaWN0IGNvbXBhcmVzIGl0IHRvIHRoZSBwaW5uZWRcbiAqIHZlcnNpb246IGVxdWFsIFx1MjFEMiBgJ21hdGNoJ2AsIGRpZmZlcmVudCBcdTIxRDIgYCdmYWxsYmFjaydgICh0aGUgcGluIHdhcyBub3QgaG9ub3JlZCksXG4gKiBhbmQgYCd1bmtub3duJ2Agd2hlbiBlaXRoZXIgdmVyc2lvbiBpcyB1bmF2YWlsYWJsZSAobm8gYXNhciB3YXMgc3dhcHBlZCwgb3IgdGhlXG4gKiBsaXZlIHZlcnNpb24gY291bGQgbm90IGJlIHJlYWQpIFx1MjAxNCBpbiB3aGljaCBjYXNlIG5vdGhpbmcgaXMgdGhyb3duIG9yIHdhcm5lZC5cbiAqL1xuXG5pbXBvcnQgeyBjb21wYXJlVmVyc2lvbnMgfSBmcm9tICcuL29ic2lkaWFuLXZlcnNpb24uY2pzJztcblxuLyoqXG4gKiBUaGUgc2lsZW50LWFzYXItZmFsbGJhY2sgdmVyZGljdCBmb3IgYSBib290ZWQgb3duZWQgaW5zdGFuY2UsIGNhcnJpZWQgYXMgZGF0YVxuICogb24gdGhlIHRyYW5zcG9ydCAvIGNvbm5lY3Rpb24gcmVzdWx0IHNvIGNvbnN1bWVycyBjYW4gYXNzZXJ0IG9uIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzYXJGYWxsYmFjayB7XG4gIC8qKlxuICBBIGh1bWFuLXJlYWRhYmxlIGV4cGxhbmF0aW9uLCBwcmVzZW50IGZvciB0aGUgYCdmYWxsYmFjaydgIHRpZXIuXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgcGlubmVkIGFwcCAoYXNhcikgdmVyc2lvbiB0aGF0IHdhcyByZXF1ZXN0ZWQsIG9yIGBudWxsYCB3aGVuIG5vbmUuXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0ZWRWZXJzaW9uOiBudWxsIHwgc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgYXBwIChhc2FyKSB2ZXJzaW9uIGFjdHVhbGx5IHJ1bm5pbmcsIG9yIGBudWxsYCB3aGVuIHVucmVhZGFibGUuXG4gICAqL1xuICByZWFkb25seSBydW5uaW5nQXBpVmVyc2lvbjogbnVsbCB8IHN0cmluZztcblxuICAvKipcbiAgVGhlIHJlc29sdmVkIGZhbGxiYWNrIHRpZXIuXG4gICAqL1xuICByZWFkb25seSB0aWVyOiBBc2FyRmFsbGJhY2tUaWVyO1xufVxuXG4vKipcbiAqIFRoZSBzaWxlbnQtYXNhci1mYWxsYmFjayB0aWVyIGZvciBhIGJvb3RlZCBvd25lZCBpbnN0YW5jZS5cbiAqXG4gKiAtIGAnbWF0Y2gnYCBcdTIwMTQgdGhlIHJ1bm5pbmcgYXBwIHZlcnNpb24gZXF1YWxzIHRoZSBwaW5uZWQgdmVyc2lvbjsgdGhlIHBpbiB3YXNcbiAqICAgaG9ub3JlZC5cbiAqIC0gYCdmYWxsYmFjaydgIFx1MjAxNCB0aGUgcnVubmluZyBhcHAgdmVyc2lvbiBkaWZmZXJzIGZyb20gdGhlIHBpbm5lZCB2ZXJzaW9uOyB0aGVcbiAqICAgaW5zdGFsbGVyIHNpbGVudGx5IHJhbiBhIGRpZmZlcmVudCAoaXRzIG93biBidW5kbGVkKSBhc2FyIGluc3RlYWQgb2YgdGhlIHBpbi5cbiAqIC0gYCd1bmtub3duJ2AgXHUyMDE0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIChubyBhc2FyIHdhcyBzd2FwcGVkLCBzbyB0aGVyZSBpcyBubyBwaW4gdG9cbiAqICAgdmVyaWZ5LCBvciB0aGUgbGl2ZSBydW5uaW5nIHZlcnNpb24gY291bGQgbm90IGJlIHJlYWQpLlxuICovXG5leHBvcnQgdHlwZSBBc2FyRmFsbGJhY2tUaWVyID0gJ2ZhbGxiYWNrJyB8ICdtYXRjaCcgfCAndW5rbm93bic7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVBc2FyRmFsbGJhY2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBpbm5lZCBPYnNpZGlhbiBhcHAgKGFzYXIpIHZlcnNpb24gdGhlIG93bmVkIGluc3RhbmNlIHdhcyBhc2tlZCB0byBydW4sXG4gICAqIG9yIGB1bmRlZmluZWRgIHdoZW4gbm8gYXNhciB3YXMgc3dhcHBlZCAoc28gdGhlcmUgaXMgbm90aGluZyB0byB2ZXJpZnkpLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdGVkVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIChhc2FyKSB2ZXJzaW9uIHRoZSBpbnN0YW5jZSBpcyBhY3R1YWxseSBydW5uaW5nLCByZWFkIGxpdmVcbiAgICogcG9zdC1ib290LCBvciBgdW5kZWZpbmVkYCB3aGVuIGl0IGNvdWxkIG5vdCBiZSByZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgcnVubmluZ0FwaVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgc2lsZW50LWFzYXItZmFsbGJhY2sgdmVyZGljdCBmb3IgYSBib290ZWQgb3duZWQgaW5zdGFuY2UuXG4gKlxuICogT25seSBgJ2ZhbGxiYWNrJ2Agd2FycmFudHMgYWN0aW9uIChhIHRocm93IC8gd2FybmluZyk7IGAnbWF0Y2gnYCBhbmQgYCd1bmtub3duJ2BcbiAqIGFyZSBzaWxlbnQuIENvbXBhcmlzb24gaXMgYSBwdXJlIGB4LnkuemAgdmVyc2lvbiBjb21wYXJlIFx1MjAxNCBubyBJL08uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwaW5uZWQgdmVyc2lvbiBhbmQgdGhlIGxpdmUgcnVubmluZyB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGZhbGxiYWNrIHZlcmRpY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQXNhckZhbGxiYWNrKHBhcmFtczogUmVzb2x2ZUFzYXJGYWxsYmFja1BhcmFtcyk6IEFzYXJGYWxsYmFjayB7XG4gIGNvbnN0IHsgcmVxdWVzdGVkVmVyc2lvbiwgcnVubmluZ0FwaVZlcnNpb24gfSA9IHBhcmFtcztcblxuICBpZiAocmVxdWVzdGVkVmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IHJ1bm5pbmdBcGlWZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVxdWVzdGVkVmVyc2lvbjogcmVxdWVzdGVkVmVyc2lvbiA/PyBudWxsLFxuICAgICAgcnVubmluZ0FwaVZlcnNpb246IHJ1bm5pbmdBcGlWZXJzaW9uID8/IG51bGwsXG4gICAgICB0aWVyOiAndW5rbm93bidcbiAgICB9O1xuICB9XG5cbiAgaWYgKGNvbXBhcmVWZXJzaW9ucyhydW5uaW5nQXBpVmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbikgPT09IDApIHtcbiAgICByZXR1cm4geyByZXF1ZXN0ZWRWZXJzaW9uLCBydW5uaW5nQXBpVmVyc2lvbiwgdGllcjogJ21hdGNoJyB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlOiBgT2JzaWRpYW4gd2FzIHBpbm5lZCB0byBhcHAgdmVyc2lvbiAke3JlcXVlc3RlZFZlcnNpb259IGJ1dCBpcyBhY3R1YWxseSBydW5uaW5nICR7cnVubmluZ0FwaVZlcnNpb259IFx1MjAxNCBgXG4gICAgICArICd0aGUgaW5zdGFsbGVyIHNpbGVudGx5IGZlbGwgYmFjayB0byBpdHMgb3duIGJ1bmRsZWQgYXNhciBpbnN0ZWFkIG9mIHJ1bm5pbmcgdGhlIHBpbm5lZCB2ZXJzaW9uLiAnXG4gICAgICArIGBQaW4gYW4gb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uIGF0IG9yIGFib3ZlICR7cmVxdWVzdGVkVmVyc2lvbn0ncyBydW4gZmxvb3Igc28gdGhlIHBpbiBhY3R1YWxseSBydW5zLmAsXG4gICAgcmVxdWVzdGVkVmVyc2lvbixcbiAgICBydW5uaW5nQXBpVmVyc2lvbixcbiAgICB0aWVyOiAnZmFsbGJhY2snXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMEJBLDhCQUFnQztBQWtFekIsU0FBUyxvQkFBb0IsUUFBaUQ7QUFDbkYsUUFBTSxFQUFFLGtCQUFrQixrQkFBa0IsSUFBSTtBQUVoRCxNQUFJLHFCQUFxQixVQUFhLHNCQUFzQixRQUFXO0FBQ3JFLFdBQU87QUFBQSxNQUNMLGtCQUFrQixvQkFBb0I7QUFBQSxNQUN0QyxtQkFBbUIscUJBQXFCO0FBQUEsTUFDeEMsTUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBRUEsVUFBSSx5Q0FBZ0IsbUJBQW1CLGdCQUFnQixNQUFNLEdBQUc7QUFDOUQsV0FBTyxFQUFFLGtCQUFrQixtQkFBbUIsTUFBTSxRQUFRO0FBQUEsRUFDOUQ7QUFFQSxTQUFPO0FBQUEsSUFDTCxTQUFTLHNDQUFzQyxnQkFBZ0IsNEJBQTRCLGlCQUFpQix1SkFFekQsZ0JBQWdCO0FBQUEsSUFDbkU7QUFBQSxJQUNBO0FBQUEsSUFDQSxNQUFNO0FBQUEsRUFDUjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -28,13 +28,21 @@
|
|
|
28
28
|
* on the transport / connection result so consumers can assert on it.
|
|
29
29
|
*/
|
|
30
30
|
export interface AsarFallback {
|
|
31
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
A human-readable explanation, present for the `'fallback'` tier.
|
|
33
|
+
*/
|
|
32
34
|
readonly message?: string;
|
|
33
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
The pinned app (asar) version that was requested, or `null` when none.
|
|
37
|
+
*/
|
|
34
38
|
readonly requestedVersion: null | string;
|
|
35
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
The app (asar) version actually running, or `null` when unreadable.
|
|
41
|
+
*/
|
|
36
42
|
readonly runningApiVersion: null | string;
|
|
37
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
The resolved fallback tier.
|
|
45
|
+
*/
|
|
38
46
|
readonly tier: AsarFallbackTier;
|
|
39
47
|
}
|
|
40
48
|
/**
|
|
@@ -49,9 +57,9 @@ export interface AsarFallback {
|
|
|
49
57
|
*/
|
|
50
58
|
export type AsarFallbackTier = 'fallback' | 'match' | 'unknown';
|
|
51
59
|
/**
|
|
52
|
-
* Parameters for {@link
|
|
60
|
+
* Parameters for {@link resolveAsarFallback}.
|
|
53
61
|
*/
|
|
54
|
-
export interface
|
|
62
|
+
export interface ResolveAsarFallbackParams {
|
|
55
63
|
/**
|
|
56
64
|
* The pinned Obsidian app (asar) version the owned instance was asked to run,
|
|
57
65
|
* or `undefined` when no asar was swapped (so there is nothing to verify).
|
|
@@ -72,4 +80,4 @@ export interface CheckAsarFallbackParams {
|
|
|
72
80
|
* @param params - The pinned version and the live running version.
|
|
73
81
|
* @returns The fallback verdict.
|
|
74
82
|
*/
|
|
75
|
-
export declare function
|
|
83
|
+
export declare function resolveAsarFallback(params: ResolveAsarFallbackParams): AsarFallback;
|
|
@@ -33,4 +33,4 @@ function listAvailableAvds(avdListOutput) {
|
|
|
33
33
|
checkAvdExists,
|
|
34
34
|
listAvailableAvds
|
|
35
35
|
});
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2F2ZC1saXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSBoZWxwZXJzIGZvciBwYXJzaW5nIGBlbXVsYXRvciAtbGlzdC1hdmRzYCBvdXRwdXQ6IGV4dHJhY3RpbmcgdGhlXG4gKiBhdmFpbGFibGUgQVZEIG5hbWVzIGFuZCBjaGVja2luZyB3aGV0aGVyIGEgcmVxdWVzdGVkIEFWRCBleGlzdHMuXG4gKlxuICogS2VwdCBzZXBhcmF0ZSBmcm9tIHRoZSBpbnRlZ3JhdGlvbi1vbmx5IGB0cmFuc3BvcnQtZmFjdG9yeWAgKGV4Y2x1ZGVkIGZyb21cbiAqIHVuaXQgdGVzdHMpIHNvIHRoZSBwYXJzaW5nIHN0YXlzIHVuaXQtdGVzdGFibGUgXHUyMDE0IHRoZSBmYWN0b3J5IGl0c2VsZiBzaGVsbHMgb3V0XG4gKiB0byB0aGUgYGVtdWxhdG9yYCBiaW5hcnkuXG4gKi9cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY2hlY2tBdmRFeGlzdHN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrQXZkRXhpc3RzUGFyYW1zIHtcbiAgLyoqXG4gIFJhdyBzdGRvdXQgb2YgYGVtdWxhdG9yIC1saXN0LWF2ZHNgIFx1MjAxNCBvbmUgQVZEIG5hbWUgcGVyIGxpbmUuXG4gICAqL1xuICByZWFkb25seSBhdmRMaXN0T3V0cHV0OiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSBBVkQgbmFtZSB0byBsb29rIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGF2ZE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoZXRoZXIgYSBnaXZlbiBBVkQgZXhpc3RzLCBmcm9tIHRoZSByYXcgc3Rkb3V0IG9mXG4gKiBgZW11bGF0b3IgLWxpc3QtYXZkc2AuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBsaXN0aW5nIG91dHB1dCBhbmQgdGhlIEFWRCBuYW1lIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIEFWRCBuYW1lIGFwcGVhcnMgaW4gdGhlIGxpc3RpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0F2ZEV4aXN0cyhwYXJhbXM6IENoZWNrQXZkRXhpc3RzUGFyYW1zKTogYm9vbGVhbiB7XG4gIHJldHVybiBsaXN0QXZhaWxhYmxlQXZkcyhwYXJhbXMuYXZkTGlzdE91dHB1dCkuaW5jbHVkZXMocGFyYW1zLmF2ZE5hbWUpO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgYXZhaWxhYmxlIEFWRCBuYW1lcyBmcm9tIHRoZSByYXcgc3Rkb3V0IG9mIGBlbXVsYXRvciAtbGlzdC1hdmRzYC5cbiAqXG4gKiBUaGUgY29tbWFuZCBwcmludHMgb25lIEFWRCBuYW1lIHBlciBsaW5lOyBibGFuayBsaW5lcyBhbmQgc3Vycm91bmRpbmdcbiAqIHdoaXRlc3BhY2UgYXJlIGlnbm9yZWQuIFNvbWUgZW11bGF0b3IgYnVpbGRzIGVtaXQgYW4gaW5mb3JtYXRpb25hbCBiYW5uZXJcbiAqIChlLmcuIGBJTkZPICAgIHwgLi4uYCkgdG8gc3Rkb3V0IGJlZm9yZSB0aGUgbGlzdCwgc28gdGhvc2UgbGluZXMgYXJlIGRyb3BwZWQuXG4gKlxuICogQHBhcmFtIGF2ZExpc3RPdXRwdXQgLSBSYXcgc3Rkb3V0IG9mIGBlbXVsYXRvciAtbGlzdC1hdmRzYC5cbiAqIEByZXR1cm5zIFRoZSBhdmFpbGFibGUgQVZEIG5hbWVzLCBpbiBsaXN0ZWQgb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0QXZhaWxhYmxlQXZkcyhhdmRMaXN0T3V0cHV0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBhdmRMaXN0T3V0cHV0XG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IGxpbmUudHJpbSgpKVxuICAgIC5maWx0ZXIoKGxpbmUpID0+IGxpbmUubGVuZ3RoID4gMCAmJiAhbGluZS5pbmNsdWRlcygnfCcpKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlDTyxTQUFTLGVBQWUsUUFBdUM7QUFDcEUsU0FBTyxrQkFBa0IsT0FBTyxhQUFhLEVBQUUsU0FBUyxPQUFPLE9BQU87QUFDeEU7QUFZTyxTQUFTLGtCQUFrQixlQUFpQztBQUNqRSxTQUFPLGNBQ0osTUFBTSxJQUFJLEVBQ1YsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsRUFDekIsT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEtBQUssQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDO0FBQzVEOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -12,9 +12,13 @@
|
|
|
12
12
|
* Parameters for {@link checkAvdExists}.
|
|
13
13
|
*/
|
|
14
14
|
export interface CheckAvdExistsParams {
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
Raw stdout of `emulator -list-avds` — one AVD name per line.
|
|
17
|
+
*/
|
|
16
18
|
readonly avdListOutput: string;
|
|
17
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
The AVD name to look for.
|
|
21
|
+
*/
|
|
18
22
|
readonly avdName: string;
|
|
19
23
|
}
|
|
20
24
|
/**
|
|
@@ -0,0 +1,60 @@
|
|
|
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 capture_obsidian_screenshot_exports = {};
|
|
30
|
+
__export(capture_obsidian_screenshot_exports, {
|
|
31
|
+
captureObsidianScreenshot: () => captureObsidianScreenshot
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(capture_obsidian_screenshot_exports);
|
|
34
|
+
var import_node_process = __toESM(require("node:process"), 1);
|
|
35
|
+
var import_context_provider = require("./context-provider.cjs");
|
|
36
|
+
var import_normalize_optional_properties = require("./normalize-optional-properties.cjs");
|
|
37
|
+
var import_transport_factory = require("./transport-factory.cjs");
|
|
38
|
+
async function captureObsidianScreenshot(options) {
|
|
39
|
+
const {
|
|
40
|
+
heightInPixels,
|
|
41
|
+
transport: transportOverride,
|
|
42
|
+
vaultPath,
|
|
43
|
+
widthInPixels
|
|
44
|
+
} = options ?? {};
|
|
45
|
+
const cwd = vaultPath ?? (0, import_context_provider.getVaultPath)() ?? import_node_process.default.cwd();
|
|
46
|
+
const transport = transportOverride ?? await (0, import_transport_factory.getOrCreateTransport)((0, import_context_provider.getTransportOptions)());
|
|
47
|
+
if (!transport.captureScreenshot) {
|
|
48
|
+
throw new Error("captureObsidianScreenshot: the active transport cannot capture screenshots.");
|
|
49
|
+
}
|
|
50
|
+
return transport.captureScreenshot((0, import_normalize_optional_properties.normalizeOptionalProperties)({
|
|
51
|
+
cwd,
|
|
52
|
+
heightInPixels,
|
|
53
|
+
widthInPixels
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
57
|
+
0 && (module.exports = {
|
|
58
|
+
captureObsidianScreenshot
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENhcHR1cmVzIGEgc2NyZWVuc2hvdCBvZiB0aGUgT2JzaWRpYW4gaW5zdGFuY2UgdGhlIGN1cnJlbnQgdGVzdCBjb250ZXh0IGlzXG4gKiBhbHJlYWR5IGRyaXZpbmcuXG4gKlxuICogVGhlIHRyYW5zcG9ydC1sZXZlbCBgY2FwdHVyZVNjcmVlbnNob3RgIG5lZWRzIGEgdHJhbnNwb3J0IGluIGhhbmQsIHdoaWNoIGFcbiAqIHRlc3QgcnVubmluZyB1bmRlciB0aGUgaGFybmVzcydzIGdsb2JhbCBzZXR1cCBuZXZlciBoYXMgXHUyMDE0IHRoZSBpbnN0YW5jZSBpc1xuICogb3duZWQgYnkgdGhhdCBzZXR1cCBhbmQgcmVhY2hlZCB0aHJvdWdoIHRoZSBjb250ZXh0IHByb3ZpZGVyLiBUaGlzIGlzIHRoZVxuICogY29udGV4dC1yZXNvbHZpbmcgZW50cnkgcG9pbnQsIHRoZSBzY3JlZW5zaG90IGNvdW50ZXJwYXJ0IG9mXG4gKiBgZXZhbEluT2JzaWRpYW5gIC8gYHBvbGxJbk9ic2lkaWFuYDogd2l0aCBubyBhcmd1bWVudHMgYXQgYWxsIGl0IGNhcHR1cmVzXG4gKiB3aGF0ZXZlciBpbnN0YW5jZSB0aGUgYWN0aXZlIHByb2plY3QgaXMgZHJpdmluZywgZGVza3RvcCBvciBtb2JpbGUuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgY29kZSAoZHJpdmVzIGEgbGl2ZSBPYnNpZGlhbikgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHsgQ2FwdHVyZVNjcmVlbnNob3RQYXJhbXMgfSBmcm9tICcuL2NhcHR1cmUtc2NyZWVuc2hvdC5janMnO1xuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LmNqcyc7XG5cbmltcG9ydCB7XG4gIGdldFRyYW5zcG9ydE9wdGlvbnMsXG4gIGdldFZhdWx0UGF0aFxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4vbm9ybWFsaXplLW9wdGlvbmFsLXByb3BlcnRpZXMuY2pzJztcbmltcG9ydCB7IGdldE9yQ3JlYXRlVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZmFjdG9yeS5janMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBjYXB0dXJlT2JzaWRpYW5TY3JlZW5zaG90fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlT2JzaWRpYW5TY3JlZW5zaG90T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZXhhY3QgaGVpZ2h0IGluIHBpeGVscyB0aGUgY2FwdHVyZWQgaW1hZ2Ugc2hvdWxkIGhhdmUuXG4gICAqXG4gICAqIERlc2t0b3Agb25seSwgYW5kIG9ubHkgbWVhbmluZ2Z1bCB0b2dldGhlciB3aXRoIHtAbGluayB3aWR0aEluUGl4ZWxzfS5cbiAgICogSWdub3JlZCBvbiBtb2JpbGUsIHdoZXJlIHRoZSBpbWFnZSBpcyBhbHdheXMgdGhlIGRldmljZSdzIG5hdGl2ZVxuICAgKiBmcmFtZWJ1ZmZlciBcdTIwMTQgc2l6ZSB0aG9zZSBieSBjaG9vc2luZyBhbiBBVkQgd2l0aCB0aGUgd2FudGVkIHNjcmVlblxuICAgKiBnZW9tZXRyeS5cbiAgICovXG4gIHJlYWRvbmx5IGhlaWdodEluUGl4ZWxzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgdHJhbnNwb3J0LiBXaGVuIG9taXR0ZWQsIHRoZSB0cmFuc3BvcnQgdGhlIGN1cnJlbnQgdGVzdFxuICAgKiBjb250ZXh0IGlzIGRyaXZpbmcgaXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zcG9ydD86IE9ic2lkaWFuVHJhbnNwb3J0O1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgcGF0aCB0byBjYXB0dXJlLiBXaGVuIG9taXR0ZWQsIHRoZSBjdXJyZW50IHRlc3QgY29udGV4dCdzIHZhdWx0XG4gICAqIGlzIHVzZWQuXG4gICAqL1xuICByZWFkb25seSB2YXVsdFBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBleGFjdCB3aWR0aCBpbiBwaXhlbHMgdGhlIGNhcHR1cmVkIGltYWdlIHNob3VsZCBoYXZlLlxuICAgKlxuICAgKiBTZWUge0BsaW5rIGhlaWdodEluUGl4ZWxzfSBcdTIwMTQgdGhlIHR3byBhcmUgc2V0IHRvZ2V0aGVyIG9yIG5vdCBhdCBhbGwuXG4gICAqL1xuICByZWFkb25seSB3aWR0aEluUGl4ZWxzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENhcHR1cmVzIGEgUE5HIHNjcmVlbnNob3Qgb2YgdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UsIHJlc29sdmluZyB0aGVcbiAqIHRyYW5zcG9ydCBhbmQgdmF1bHQgZnJvbSB0aGUgY3VycmVudCB0ZXN0IGNvbnRleHQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBzaXplLCB0cmFuc3BvcnQgYW5kIHZhdWx0IG92ZXJyaWRlcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJhdyBQTkcgYnl0ZXMuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBhY3RpdmUgdHJhbnNwb3J0IGNhbm5vdCBjYXB0dXJlIHNjcmVlbnNob3RzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdChvcHRpb25zPzogQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMpOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgY29uc3Qge1xuICAgIGhlaWdodEluUGl4ZWxzLFxuICAgIHRyYW5zcG9ydDogdHJhbnNwb3J0T3ZlcnJpZGUsXG4gICAgdmF1bHRQYXRoLFxuICAgIHdpZHRoSW5QaXhlbHNcbiAgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgY29uc3QgY3dkID0gdmF1bHRQYXRoID8/IGdldFZhdWx0UGF0aCgpID8/IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydE92ZXJyaWRlID8/IGF3YWl0IGdldE9yQ3JlYXRlVHJhbnNwb3J0KGdldFRyYW5zcG9ydE9wdGlvbnMoKSk7XG5cbiAgaWYgKCF0cmFuc3BvcnQuY2FwdHVyZVNjcmVlbnNob3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhcHR1cmVPYnNpZGlhblNjcmVlbnNob3Q6IHRoZSBhY3RpdmUgdHJhbnNwb3J0IGNhbm5vdCBjYXB0dXJlIHNjcmVlbnNob3RzLicpO1xuICB9XG5cbiAgcmV0dXJuIHRyYW5zcG9ydC5jYXB0dXJlU2NyZWVuc2hvdChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8Q2FwdHVyZVNjcmVlbnNob3RQYXJhbXM+KHtcbiAgICBjd2QsXG4gICAgaGVpZ2h0SW5QaXhlbHMsXG4gICAgd2lkdGhJblBpeGVsc1xuICB9KSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdCQSwwQkFBb0I7QUFLcEIsOEJBR087QUFDUCwyQ0FBNEM7QUFDNUMsK0JBQXFDO0FBNENyQyxlQUFzQiwwQkFBMEIsU0FBaUU7QUFDL0csUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBLFdBQVc7QUFBQSxJQUNYO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSSxXQUFXLENBQUM7QUFFaEIsUUFBTSxNQUFNLGlCQUFhLHNDQUFhLEtBQUssb0JBQUFBLFFBQVEsSUFBSTtBQUN2RCxRQUFNLFlBQVkscUJBQXFCLFVBQU0sbURBQXFCLDZDQUFvQixDQUFDO0FBRXZGLE1BQUksQ0FBQyxVQUFVLG1CQUFtQjtBQUNoQyxVQUFNLElBQUksTUFBTSw2RUFBNkU7QUFBQSxFQUMvRjtBQUVBLFNBQU8sVUFBVSxzQkFBa0Isa0VBQXFEO0FBQUEsSUFDdEY7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQyxDQUFDO0FBQ0o7IiwKICAibmFtZXMiOiBbInByb2Nlc3MiXQp9Cg==
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Captures a screenshot of the Obsidian instance the current test context is
|
|
5
|
+
* already driving.
|
|
6
|
+
*
|
|
7
|
+
* The transport-level `captureScreenshot` needs a transport in hand, which a
|
|
8
|
+
* test running under the harness's global setup never has — the instance is
|
|
9
|
+
* owned by that setup and reached through the context provider. This is the
|
|
10
|
+
* context-resolving entry point, the screenshot counterpart of
|
|
11
|
+
* `evalInObsidian` / `pollInObsidian`: with no arguments at all it captures
|
|
12
|
+
* whatever instance the active project is driving, desktop or mobile.
|
|
13
|
+
*/
|
|
14
|
+
import type { ObsidianTransport } from './transport.cjs';
|
|
15
|
+
/**
|
|
16
|
+
* Options for {@link captureObsidianScreenshot}.
|
|
17
|
+
*/
|
|
18
|
+
export interface CaptureObsidianScreenshotOptions {
|
|
19
|
+
/**
|
|
20
|
+
* The exact height in pixels the captured image should have.
|
|
21
|
+
*
|
|
22
|
+
* Desktop only, and only meaningful together with {@link widthInPixels}.
|
|
23
|
+
* Ignored on mobile, where the image is always the device's native
|
|
24
|
+
* framebuffer — size those by choosing an AVD with the wanted screen
|
|
25
|
+
* geometry.
|
|
26
|
+
*/
|
|
27
|
+
readonly heightInPixels?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Override the transport. When omitted, the transport the current test
|
|
30
|
+
* context is driving is used.
|
|
31
|
+
*/
|
|
32
|
+
readonly transport?: ObsidianTransport;
|
|
33
|
+
/**
|
|
34
|
+
* The vault path to capture. When omitted, the current test context's vault
|
|
35
|
+
* is used.
|
|
36
|
+
*/
|
|
37
|
+
readonly vaultPath?: string;
|
|
38
|
+
/**
|
|
39
|
+
* The exact width in pixels the captured image should have.
|
|
40
|
+
*
|
|
41
|
+
* See {@link heightInPixels} — the two are set together or not at all.
|
|
42
|
+
*/
|
|
43
|
+
readonly widthInPixels?: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Captures a PNG screenshot of the running Obsidian instance, resolving the
|
|
47
|
+
* transport and vault from the current test context.
|
|
48
|
+
*
|
|
49
|
+
* @param options - Optional size, transport and vault overrides.
|
|
50
|
+
* @returns A {@link Promise} that resolves to the raw PNG bytes.
|
|
51
|
+
* @throws Error if the active transport cannot capture screenshots.
|
|
52
|
+
*/
|
|
53
|
+
export declare function captureObsidianScreenshot(options?: CaptureObsidianScreenshotOptions): Promise<Uint8Array>;
|
|
@@ -0,0 +1,82 @@
|
|
|
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 capture_screenshot_exports = {};
|
|
20
|
+
__export(capture_screenshot_exports, {
|
|
21
|
+
buildDeviceMetricsOverride: () => buildDeviceMetricsOverride,
|
|
22
|
+
decodeBase64Png: () => decodeBase64Png,
|
|
23
|
+
isPng: () => isPng,
|
|
24
|
+
readPngDimensions: () => readPngDimensions
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(capture_screenshot_exports);
|
|
27
|
+
const PNG_MARKER = "PNG";
|
|
28
|
+
const PNG_MARKER_OFFSET = 1;
|
|
29
|
+
const PNG_IHDR_MARKER = "IHDR";
|
|
30
|
+
const PNG_IHDR_MARKER_OFFSET = 12;
|
|
31
|
+
const PNG_WIDTH_OFFSET = 16;
|
|
32
|
+
const PNG_HEIGHT_OFFSET = 20;
|
|
33
|
+
const PNG_HEADER_MIN_LENGTH = 24;
|
|
34
|
+
const CAPTURE_DEVICE_SCALE_FACTOR = 1;
|
|
35
|
+
function buildDeviceMetricsOverride(params) {
|
|
36
|
+
const { heightInPixels, widthInPixels } = params;
|
|
37
|
+
if (heightInPixels === void 0 && widthInPixels === void 0) {
|
|
38
|
+
return void 0;
|
|
39
|
+
}
|
|
40
|
+
if (heightInPixels === void 0 || widthInPixels === void 0) {
|
|
41
|
+
throw new Error("captureScreenshot: widthInPixels and heightInPixels must be given together.");
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
deviceScaleFactor: CAPTURE_DEVICE_SCALE_FACTOR,
|
|
45
|
+
height: heightInPixels,
|
|
46
|
+
mobile: false,
|
|
47
|
+
width: widthInPixels
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function decodeBase64Png(base64) {
|
|
51
|
+
return new Uint8Array(Buffer.from(base64, "base64"));
|
|
52
|
+
}
|
|
53
|
+
function isPng(bytes) {
|
|
54
|
+
return readAscii(bytes, PNG_MARKER_OFFSET, PNG_MARKER.length) === PNG_MARKER && readAscii(bytes, PNG_IHDR_MARKER_OFFSET, PNG_IHDR_MARKER.length) === PNG_IHDR_MARKER;
|
|
55
|
+
}
|
|
56
|
+
function readPngDimensions(bytes) {
|
|
57
|
+
if (!isPng(bytes)) {
|
|
58
|
+
throw new Error("readPngDimensions: the given bytes are not a PNG.");
|
|
59
|
+
}
|
|
60
|
+
if (bytes.length < PNG_HEADER_MIN_LENGTH) {
|
|
61
|
+
throw new Error(`readPngDimensions: a PNG header needs at least ${String(PNG_HEADER_MIN_LENGTH)} bytes, got ${String(bytes.length)}.`);
|
|
62
|
+
}
|
|
63
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
64
|
+
return {
|
|
65
|
+
heightInPixels: view.getUint32(PNG_HEIGHT_OFFSET),
|
|
66
|
+
widthInPixels: view.getUint32(PNG_WIDTH_OFFSET)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function readAscii(bytes, offset, length) {
|
|
70
|
+
if (bytes.length < offset + length) {
|
|
71
|
+
return "";
|
|
72
|
+
}
|
|
73
|
+
return Buffer.from(bytes.subarray(offset, offset + length)).toString("ascii");
|
|
74
|
+
}
|
|
75
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
76
|
+
0 && (module.exports = {
|
|
77
|
+
buildDeviceMetricsOverride,
|
|
78
|
+
decodeBase64Png,
|
|
79
|
+
isPng,
|
|
80
|
+
readPngDimensions
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NhcHR1cmUtc2NyZWVuc2hvdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFB1cmUgaGVscGVycyBmb3Igc2NyZWVuc2hvdCBjYXB0dXJlOiBidWlsZGluZyB0aGUgQ0RQIGRldmljZS1tZXRyaWNzIG92ZXJyaWRlXG4gKiBwYXlsb2FkLCBkZWNvZGluZyBhIGJhc2U2NC1lbmNvZGVkIFBORywgYW5kIHJlYWRpbmcgYSBQTkcncyBwaXhlbCBkaW1lbnNpb25zXG4gKiBvdXQgb2YgaXRzIElIRFIgaGVhZGVyLlxuICpcbiAqIEtlcHQgc2VwYXJhdGUgZnJvbSB0aGUgdHJhbnNwb3J0cyAod2hpY2ggYXJlIGludGVncmF0aW9uLW9ubHkgYW5kIGV4Y2x1ZGVkXG4gKiBmcm9tIHVuaXQgdGVzdHMpIHNvIHRoZSBwYXlsb2FkIHNoYXBlIGFuZCB0aGUgUE5HIHBhcnNpbmcgc3RheSB1bml0LXRlc3RhYmxlIFx1MjAxNFxuICogdGhlIHRyYW5zcG9ydHMgdGhlbXNlbHZlcyBvbmx5IHRhbGsgdG8gQ0RQIC8gQXBwaXVtLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRXhjZXB0IH0gZnJvbSAndHlwZS1mZXN0JztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBjYXB0dXJpbmcgYSBzY3JlZW5zaG90IG9mIGEgcnVubmluZyBPYnNpZGlhbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlU2NyZWVuc2hvdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgKHZhdWx0IHBhdGgpIGlkZW50aWZ5aW5nIHdoaWNoIE9ic2lkaWFuIHdpbmRvdyB0b1xuICAgKiBjYXB0dXJlLlxuICAgKlxuICAgKiBNaXJyb3JzIHRoZSBgY3dkYCBvZiBhbiBldmFsdWF0aW9uOiBhIGRlc2t0b3AgaW5zdGFuY2UgY2FuIGhvbGQgc2V2ZXJhbFxuICAgKiB2YXVsdCB3aW5kb3dzLCBhbmQgdGhlIGNhcHR1cmUgaGFzIHRvIGJlIHJvdXRlZCB0byB0aGUgcmlnaHQgb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgY3dkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBleGFjdCBoZWlnaHQgaW4gcGl4ZWxzIHRoZSBjYXB0dXJlZCBpbWFnZSBzaG91bGQgaGF2ZS5cbiAgICpcbiAgICogRGVza3RvcCBvbmx5LCBhbmQgb25seSBtZWFuaW5nZnVsIHRvZ2V0aGVyIHdpdGgge0BsaW5rIHdpZHRoSW5QaXhlbHN9OiB0aGVcbiAgICogdmlld3BvcnQgaXMgcGlubmVkIHRvIHRoZXNlIG1ldHJpY3MgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FwdHVyZSwgc28gdGhlXG4gICAqIHJlc3VsdGluZyBQTkcgaXMgZXhhY3RseSB0aGlzIHNpemUgd2hhdGV2ZXIgc2l6ZSB0aGUgd2luZG93IGhhcHBlbnMgdG8gYmUuXG4gICAqIE9taXQgYm90aCB0byBjYXB0dXJlIHRoZSB3aW5kb3cgYXQgaXRzIG5hdHVyYWwgc2l6ZS5cbiAgICpcbiAgICogSWdub3JlZCBieSB0aGUgQXBwaXVtIHRyYW5zcG9ydCwgd2hpY2ggY2FuIG9ubHkgcmV0dXJuIHRoZSBkZXZpY2UncyBuYXRpdmVcbiAgICogZnJhbWVidWZmZXIgXHUyMDE0IHNpemUgYSBtb2JpbGUgY2FwdHVyZSBieSBjaG9vc2luZyBhbiBBVkQgd2l0aCB0aGUgd2FudGVkXG4gICAqIHNjcmVlbiBnZW9tZXRyeSBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVpZ2h0SW5QaXhlbHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBleGFjdCB3aWR0aCBpbiBwaXhlbHMgdGhlIGNhcHR1cmVkIGltYWdlIHNob3VsZCBoYXZlLlxuICAgKlxuICAgKiBTZWUge0BsaW5rIGhlaWdodEluUGl4ZWxzfSBcdTIwMTQgdGhlIHR3byBhcmUgc2V0IHRvZ2V0aGVyIG9yIG5vdCBhdCBhbGwuXG4gICAqL1xuICByZWFkb25seSB3aWR0aEluUGl4ZWxzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBwaXhlbCBkaW1lbnNpb25zIHJlYWQgb3V0IG9mIGEgUE5HJ3MgSUhEUiBoZWFkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG5nRGltZW5zaW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgaGVpZ2h0IGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGhlaWdodEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB3aWR0aCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSB3aWR0aEluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIEFTQ0lJIG1hcmtlciBpbnNpZGUgYSBQTkcncyA4LWJ5dGUgc2lnbmF0dXJlLlxuICpcbiAqIE1hdGNoZWQgYXMgdGV4dCByYXRoZXIgdGhhbiBhcyB0aGUgcmF3IHNpZ25hdHVyZSBieXRlcyBzbyB0aGlzIGZpbGUgc3RheXNcbiAqIHB1cmUgQVNDSUkgXHUyMDE0IHR3byBvZiB0aG9zZSBlaWdodCBieXRlcyBhcmUgdW5wcmludGFibGUsIGFuZCBhIGxpdGVyYWwgYDB4MUFgXG4gKiBpbiBhIHNvdXJjZSBmaWxlIGlzIHJlYWQgYXMgZW5kLW9mLWZpbGUgYnkgc29tZSBXaW5kb3dzIHRvb2xpbmcuXG4gKi9cbmNvbnN0IFBOR19NQVJLRVIgPSAnUE5HJztcblxuLyoqXG4gKiBCeXRlIG9mZnNldCBvZiB7QGxpbmsgUE5HX01BUktFUn0sIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBzaWduYXR1cmUncyBsZWFkaW5nXG4gKiB1bnByaW50YWJsZSBieXRlLlxuICovXG5jb25zdCBQTkdfTUFSS0VSX09GRlNFVCA9IDE7XG5cbi8qKlxuICogVGhlIElIRFIgY2h1bmsncyB0eXBlIG1hcmtlci5cbiAqXG4gKiBSZXF1aXJlZCBhbG9uZ3NpZGUge0BsaW5rIFBOR19NQVJLRVJ9IGJlY2F1c2UgdGhlIGRpbWVuc2lvbnMgYXJlIHJlYWQgb3V0IG9mXG4gKiBleGFjdGx5IHRoYXQgY2h1bmssIHNvIGl0cyBwcmVzZW5jZSBpcyB3aGF0IGFjdHVhbGx5IGhhcyB0byBob2xkIGhlcmUuXG4gKi9cbmNvbnN0IFBOR19JSERSX01BUktFUiA9ICdJSERSJztcblxuLyoqXG4gKiBCeXRlIG9mZnNldCBvZiB7QGxpbmsgUE5HX0lIRFJfTUFSS0VSfTogdGhlIDgtYnl0ZSBzaWduYXR1cmUgcGx1cyB0aGUgY2h1bmsnc1xuICogNC1ieXRlIGxlbmd0aCBmaWVsZC5cbiAqL1xuY29uc3QgUE5HX0lIRFJfTUFSS0VSX09GRlNFVCA9IDEyO1xuXG4vKipcbiAqIEJ5dGUgb2Zmc2V0IG9mIHRoZSBiaWctZW5kaWFuIGB3aWR0aGAgZmllbGQsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBJSERSIHR5cGUuXG4gKi9cbmNvbnN0IFBOR19XSURUSF9PRkZTRVQgPSAxNjtcblxuLyoqXG4gKiBCeXRlIG9mZnNldCBvZiB0aGUgYmlnLWVuZGlhbiBgaGVpZ2h0YCBmaWVsZCwgaW1tZWRpYXRlbHkgYWZ0ZXIgYHdpZHRoYC5cbiAqL1xuY29uc3QgUE5HX0hFSUdIVF9PRkZTRVQgPSAyMDtcblxuLyoqXG4gKiBUaGUgc2hvcnRlc3QgcHJlZml4IGZyb20gd2hpY2gge0BsaW5rIHJlYWRQbmdEaW1lbnNpb25zfSBjYW4gcmVhZDogZXZlcnl0aGluZ1xuICogdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgSUhEUiBgaGVpZ2h0YCBmaWVsZC5cbiAqL1xuY29uc3QgUE5HX0hFQURFUl9NSU5fTEVOR1RIID0gMjQ7XG5cbi8qKlxuICogRGV2aWNlIHNjYWxlIGZhY3RvciBmb3IgYSBjYXB0dXJlLlxuICpcbiAqIEFsd2F5cyBgMWAsIHNvIHRoZSBlbWl0dGVkIFBORyBpcyBleGFjdGx5IHRoZSByZXF1ZXN0ZWQgQ1NTIHBpeGVsIHNpemUgcmF0aGVyXG4gKiB0aGFuIGEgbXVsdGlwbGUgb2YgaXQuXG4gKi9cbmNvbnN0IENBUFRVUkVfREVWSUNFX1NDQUxFX0ZBQ1RPUiA9IDE7XG5cbi8qKlxuICogQnVpbGRzIHRoZSBgRW11bGF0aW9uLnNldERldmljZU1ldHJpY3NPdmVycmlkZWAgcGF5bG9hZCB0aGF0IHBpbnMgYSBkZXNrdG9wXG4gKiBjYXB0dXJlIHRvIGFuIGV4YWN0IHBpeGVsIHNpemUuXG4gKlxuICogVGFrZXMgb25seSB0aGUgc2l6ZSBoYWxmIG9mIHtAbGluayBDYXB0dXJlU2NyZWVuc2hvdFBhcmFtc30gXHUyMDE0IHJvdXRpbmcgdGhlXG4gKiBjYXB0dXJlIHRvIGEgd2luZG93IGlzIHRoZSB0cmFuc3BvcnQncyBqb2IsIG5vdCB0aGUgcGF5bG9hZCdzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcmVxdWVzdGVkIGNhcHR1cmUgc2l6ZS5cbiAqIEByZXR1cm5zIFRoZSBDRFAgcGF5bG9hZCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBubyBzaXplIHdhcyByZXF1ZXN0ZWQgKGNhcHR1cmUgdGhlIHdpbmRvdyBhcyBpdCBpcykuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGV4YWN0bHkgb25lIG9mIHRoZSB0d28gZGltZW5zaW9ucyBpcyBnaXZlbiBcdTIwMTQgYSBoYWxmLXNwZWNpZmllZCBzaXplIGNhbm5vdCBiZSBob25vdXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRGV2aWNlTWV0cmljc092ZXJyaWRlKHBhcmFtczogRXhjZXB0PENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLCAnY3dkJz4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgaGVpZ2h0SW5QaXhlbHMsIHdpZHRoSW5QaXhlbHMgfSA9IHBhcmFtcztcbiAgaWYgKGhlaWdodEluUGl4ZWxzID09PSB1bmRlZmluZWQgJiYgd2lkdGhJblBpeGVscyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChoZWlnaHRJblBpeGVscyA9PT0gdW5kZWZpbmVkIHx8IHdpZHRoSW5QaXhlbHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2FwdHVyZVNjcmVlbnNob3Q6IHdpZHRoSW5QaXhlbHMgYW5kIGhlaWdodEluUGl4ZWxzIG11c3QgYmUgZ2l2ZW4gdG9nZXRoZXIuJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRldmljZVNjYWxlRmFjdG9yOiBDQVBUVVJFX0RFVklDRV9TQ0FMRV9GQUNUT1IsXG4gICAgaGVpZ2h0OiBoZWlnaHRJblBpeGVscyxcbiAgICBtb2JpbGU6IGZhbHNlLFxuICAgIHdpZHRoOiB3aWR0aEluUGl4ZWxzXG4gIH07XG59XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgYmFzZTY0IHBheWxvYWQgYm90aCBDRFAgKGBQYWdlLmNhcHR1cmVTY3JlZW5zaG90YCkgYW5kIEFwcGl1bVxuICogKGB0YWtlU2NyZWVuc2hvdGApIHJldHVybiBpbnRvIHJhdyBQTkcgYnl0ZXMuXG4gKlxuICogQHBhcmFtIGJhc2U2NCAtIFRoZSBiYXNlNjQtZW5jb2RlZCBpbWFnZSBkYXRhLlxuICogQHJldHVybnMgVGhlIGRlY29kZWQgYnl0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVCYXNlNjRQbmcoYmFzZTY0OiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKTtcbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoZXRoZXIgdGhlIGdpdmVuIGJ5dGVzIGFyZSBhIFBORyBjYXJyeWluZyBhbiBJSERSIGNodW5rLlxuICpcbiAqIFVzZWQgdG8gZmFpbCBhIGNhcHR1cmUgbG91ZGx5IHdoZW4gYSB0cmFuc3BvcnQgaGFuZHMgYmFjayBzb21ldGhpbmcgdGhhdCBpc1xuICogbm90IGFuIGltYWdlLCByYXRoZXIgdGhhbiB3cml0aW5nIGEgY29ycnVwdCBmaWxlIHRvIGRpc2suXG4gKlxuICogQHBhcmFtIGJ5dGVzIC0gVGhlIGJ5dGVzIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGJ5dGVzIGFyZSBhIFBORy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG5nKGJ5dGVzOiBVaW50OEFycmF5KTogYm9vbGVhbiB7XG4gIHJldHVybiByZWFkQXNjaWkoYnl0ZXMsIFBOR19NQVJLRVJfT0ZGU0VULCBQTkdfTUFSS0VSLmxlbmd0aCkgPT09IFBOR19NQVJLRVJcbiAgICAmJiByZWFkQXNjaWkoYnl0ZXMsIFBOR19JSERSX01BUktFUl9PRkZTRVQsIFBOR19JSERSX01BUktFUi5sZW5ndGgpID09PSBQTkdfSUhEUl9NQVJLRVI7XG59XG5cbi8qKlxuICogUmVhZHMgYSBQTkcncyBwaXhlbCBkaW1lbnNpb25zIGZyb20gaXRzIElIRFIgaGVhZGVyLlxuICpcbiAqIFRoZSB3aG9sZSBwb2ludCBpcyB2ZXJpZmljYXRpb246IGEgY2FwdHVyZSB0aGF0IHNpbGVudGx5IGNvbWVzIGJhY2sgYXQgdGhlXG4gKiB3cm9uZyBzaXplIGlzIHRoZSBmYWlsdXJlIG1vZGUgdGhhdCBwcm9kdWNlcyBhbiBvZmYtc3BlYyBzY3JlZW5zaG90IHNldCwgc29cbiAqIHRoZSBzaXplIGlzIHJlYWQgYmFjayBmcm9tIHRoZSBieXRlcyByYXRoZXIgdGhhbiBhc3N1bWVkIGZyb20gdGhlIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGJ5dGVzIC0gVGhlIFBORyBieXRlcy5cbiAqIEByZXR1cm5zIFRoZSBpbWFnZSdzIHdpZHRoIGFuZCBoZWlnaHQgaW4gcGl4ZWxzLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgYnl0ZXMgYXJlIG5vdCBhIFBORywgb3IgYXJlIHRvbyBzaG9ydCB0byBjYXJyeSBhbiBJSERSIGhlYWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRQbmdEaW1lbnNpb25zKGJ5dGVzOiBVaW50OEFycmF5KTogUG5nRGltZW5zaW9ucyB7XG4gIGlmICghaXNQbmcoYnl0ZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWFkUG5nRGltZW5zaW9uczogdGhlIGdpdmVuIGJ5dGVzIGFyZSBub3QgYSBQTkcuJyk7XG4gIH1cblxuICBpZiAoYnl0ZXMubGVuZ3RoIDwgUE5HX0hFQURFUl9NSU5fTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGByZWFkUG5nRGltZW5zaW9uczogYSBQTkcgaGVhZGVyIG5lZWRzIGF0IGxlYXN0ICR7U3RyaW5nKFBOR19IRUFERVJfTUlOX0xFTkdUSCl9IGJ5dGVzLCBnb3QgJHtTdHJpbmcoYnl0ZXMubGVuZ3RoKX0uYCk7XG4gIH1cblxuICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ5dGVzLmJ1ZmZlciwgYnl0ZXMuYnl0ZU9mZnNldCwgYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gIHJldHVybiB7XG4gICAgaGVpZ2h0SW5QaXhlbHM6IHZpZXcuZ2V0VWludDMyKFBOR19IRUlHSFRfT0ZGU0VUKSxcbiAgICB3aWR0aEluUGl4ZWxzOiB2aWV3LmdldFVpbnQzMihQTkdfV0lEVEhfT0ZGU0VUKVxuICB9O1xufVxuXG4vKipcbiAqIFJlYWRzIGEgZml4ZWQtbGVuZ3RoIEFTQ0lJIG1hcmtlciBvdXQgb2YgYSBieXRlIGJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMgLSBUaGUgYnl0ZXMgdG8gcmVhZCBmcm9tLlxuICogQHBhcmFtIG9mZnNldCAtIEJ5dGUgb2Zmc2V0IHRoZSBtYXJrZXIgc3RhcnRzIGF0LlxuICogQHBhcmFtIGxlbmd0aCAtIE1hcmtlciBsZW5ndGggaW4gYnl0ZXMuXG4gKiBAcmV0dXJucyBUaGUgZGVjb2RlZCBtYXJrZXIsIG9yIGFuIGVtcHR5IHN0cmluZyB3aGVuIHRoZSBidWZmZXIgaXMgdG9vIHNob3J0IHRvIGhvbGQgaXQuXG4gKi9cbmZ1bmN0aW9uIHJlYWRBc2NpaShieXRlczogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGJ5dGVzLmxlbmd0aCA8IG9mZnNldCArIGxlbmd0aCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuZnJvbShieXRlcy5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCkpLnRvU3RyaW5nKCdhc2NpaScpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVFQSxNQUFNLGFBQWE7QUFNbkIsTUFBTSxvQkFBb0I7QUFRMUIsTUFBTSxrQkFBa0I7QUFNeEIsTUFBTSx5QkFBeUI7QUFLL0IsTUFBTSxtQkFBbUI7QUFLekIsTUFBTSxvQkFBb0I7QUFNMUIsTUFBTSx3QkFBd0I7QUFROUIsTUFBTSw4QkFBOEI7QUFhN0IsU0FBUywyQkFBMkIsUUFBcUY7QUFDOUgsUUFBTSxFQUFFLGdCQUFnQixjQUFjLElBQUk7QUFDMUMsTUFBSSxtQkFBbUIsVUFBYSxrQkFBa0IsUUFBVztBQUMvRCxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksbUJBQW1CLFVBQWEsa0JBQWtCLFFBQVc7QUFDL0QsVUFBTSxJQUFJLE1BQU0sNkVBQTZFO0FBQUEsRUFDL0Y7QUFFQSxTQUFPO0FBQUEsSUFDTCxtQkFBbUI7QUFBQSxJQUNuQixRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsRUFDVDtBQUNGO0FBU08sU0FBUyxnQkFBZ0IsUUFBNEI7QUFDMUQsU0FBTyxJQUFJLFdBQVcsT0FBTyxLQUFLLFFBQVEsUUFBUSxDQUFDO0FBQ3JEO0FBV08sU0FBUyxNQUFNLE9BQTRCO0FBQ2hELFNBQU8sVUFBVSxPQUFPLG1CQUFtQixXQUFXLE1BQU0sTUFBTSxjQUM3RCxVQUFVLE9BQU8sd0JBQXdCLGdCQUFnQixNQUFNLE1BQU07QUFDNUU7QUFhTyxTQUFTLGtCQUFrQixPQUFrQztBQUNsRSxNQUFJLENBQUMsTUFBTSxLQUFLLEdBQUc7QUFDakIsVUFBTSxJQUFJLE1BQU0sbURBQW1EO0FBQUEsRUFDckU7QUFFQSxNQUFJLE1BQU0sU0FBUyx1QkFBdUI7QUFDeEMsVUFBTSxJQUFJLE1BQU0sa0RBQWtELE9BQU8scUJBQXFCLENBQUMsZUFBZSxPQUFPLE1BQU0sTUFBTSxDQUFDLEdBQUc7QUFBQSxFQUN2STtBQUVBLFFBQU0sT0FBTyxJQUFJLFNBQVMsTUFBTSxRQUFRLE1BQU0sWUFBWSxNQUFNLFVBQVU7QUFDMUUsU0FBTztBQUFBLElBQ0wsZ0JBQWdCLEtBQUssVUFBVSxpQkFBaUI7QUFBQSxJQUNoRCxlQUFlLEtBQUssVUFBVSxnQkFBZ0I7QUFBQSxFQUNoRDtBQUNGO0FBVUEsU0FBUyxVQUFVLE9BQW1CLFFBQWdCLFFBQXdCO0FBQzVFLE1BQUksTUFBTSxTQUFTLFNBQVMsUUFBUTtBQUNsQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sT0FBTyxLQUFLLE1BQU0sU0FBUyxRQUFRLFNBQVMsTUFBTSxDQUFDLEVBQUUsU0FBUyxPQUFPO0FBQzlFOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Pure helpers for screenshot capture: building the CDP device-metrics override
|
|
5
|
+
* payload, decoding a base64-encoded PNG, and reading a PNG's pixel dimensions
|
|
6
|
+
* out of its IHDR header.
|
|
7
|
+
*
|
|
8
|
+
* Kept separate from the transports (which are integration-only and excluded
|
|
9
|
+
* from unit tests) so the payload shape and the PNG parsing stay unit-testable —
|
|
10
|
+
* the transports themselves only talk to CDP / Appium.
|
|
11
|
+
*/
|
|
12
|
+
import type { Except } from 'type-fest';
|
|
13
|
+
/**
|
|
14
|
+
* Parameters for capturing a screenshot of a running Obsidian instance.
|
|
15
|
+
*/
|
|
16
|
+
export interface CaptureScreenshotParams {
|
|
17
|
+
/**
|
|
18
|
+
* The working directory (vault path) identifying which Obsidian window to
|
|
19
|
+
* capture.
|
|
20
|
+
*
|
|
21
|
+
* Mirrors the `cwd` of an evaluation: a desktop instance can hold several
|
|
22
|
+
* vault windows, and the capture has to be routed to the right one.
|
|
23
|
+
*/
|
|
24
|
+
readonly cwd: string;
|
|
25
|
+
/**
|
|
26
|
+
* The exact height in pixels the captured image should have.
|
|
27
|
+
*
|
|
28
|
+
* Desktop only, and only meaningful together with {@link widthInPixels}: the
|
|
29
|
+
* viewport is pinned to these metrics for the duration of the capture, so the
|
|
30
|
+
* resulting PNG is exactly this size whatever size the window happens to be.
|
|
31
|
+
* Omit both to capture the window at its natural size.
|
|
32
|
+
*
|
|
33
|
+
* Ignored by the Appium transport, which can only return the device's native
|
|
34
|
+
* framebuffer — size a mobile capture by choosing an AVD with the wanted
|
|
35
|
+
* screen geometry instead.
|
|
36
|
+
*/
|
|
37
|
+
readonly heightInPixels?: number;
|
|
38
|
+
/**
|
|
39
|
+
* The exact width in pixels the captured image should have.
|
|
40
|
+
*
|
|
41
|
+
* See {@link heightInPixels} — the two are set together or not at all.
|
|
42
|
+
*/
|
|
43
|
+
readonly widthInPixels?: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The pixel dimensions read out of a PNG's IHDR header.
|
|
47
|
+
*/
|
|
48
|
+
export interface PngDimensions {
|
|
49
|
+
/**
|
|
50
|
+
* The image height in pixels.
|
|
51
|
+
*/
|
|
52
|
+
readonly heightInPixels: number;
|
|
53
|
+
/**
|
|
54
|
+
* The image width in pixels.
|
|
55
|
+
*/
|
|
56
|
+
readonly widthInPixels: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Builds the `Emulation.setDeviceMetricsOverride` payload that pins a desktop
|
|
60
|
+
* capture to an exact pixel size.
|
|
61
|
+
*
|
|
62
|
+
* Takes only the size half of {@link CaptureScreenshotParams} — routing the
|
|
63
|
+
* capture to a window is the transport's job, not the payload's.
|
|
64
|
+
*
|
|
65
|
+
* @param params - The requested capture size.
|
|
66
|
+
* @returns The CDP payload, or `undefined` when no size was requested (capture the window as it is).
|
|
67
|
+
* @throws Error if exactly one of the two dimensions is given — a half-specified size cannot be honoured.
|
|
68
|
+
*/
|
|
69
|
+
export declare function buildDeviceMetricsOverride(params: Except<CaptureScreenshotParams, 'cwd'>): Record<string, unknown> | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Decodes the base64 payload both CDP (`Page.captureScreenshot`) and Appium
|
|
72
|
+
* (`takeScreenshot`) return into raw PNG bytes.
|
|
73
|
+
*
|
|
74
|
+
* @param base64 - The base64-encoded image data.
|
|
75
|
+
* @returns The decoded bytes.
|
|
76
|
+
*/
|
|
77
|
+
export declare function decodeBase64Png(base64: string): Uint8Array;
|
|
78
|
+
/**
|
|
79
|
+
* Decides whether the given bytes are a PNG carrying an IHDR chunk.
|
|
80
|
+
*
|
|
81
|
+
* Used to fail a capture loudly when a transport hands back something that is
|
|
82
|
+
* not an image, rather than writing a corrupt file to disk.
|
|
83
|
+
*
|
|
84
|
+
* @param bytes - The bytes to check.
|
|
85
|
+
* @returns `true` when the bytes are a PNG.
|
|
86
|
+
*/
|
|
87
|
+
export declare function isPng(bytes: Uint8Array): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Reads a PNG's pixel dimensions from its IHDR header.
|
|
90
|
+
*
|
|
91
|
+
* The whole point is verification: a capture that silently comes back at the
|
|
92
|
+
* wrong size is the failure mode that produces an off-spec screenshot set, so
|
|
93
|
+
* the size is read back from the bytes rather than assumed from the request.
|
|
94
|
+
*
|
|
95
|
+
* @param bytes - The PNG bytes.
|
|
96
|
+
* @returns The image's width and height in pixels.
|
|
97
|
+
* @throws Error if the bytes are not a PNG, or are too short to carry an IHDR header.
|
|
98
|
+
*/
|
|
99
|
+
export declare function readPngDimensions(bytes: Uint8Array): PngDimensions;
|
package/dist/lib/cjs/cli.cjs
CHANGED
|
@@ -74,7 +74,7 @@ function buildOptions(values) {
|
|
|
74
74
|
function parseNumber(flag, raw) {
|
|
75
75
|
const value = Number(raw);
|
|
76
76
|
if (!Number.isFinite(value)) {
|
|
77
|
-
throw new
|
|
77
|
+
throw new TypeError(`--${flag} must be a number, got: ${raw}`);
|
|
78
78
|
}
|
|
79
79
|
return value;
|
|
80
80
|
}
|
|
@@ -84,12 +84,12 @@ function waitForShutdownOrInstanceClose(cdpUrl) {
|
|
|
84
84
|
const versionUrl = `${cdpUrl}/json/version`;
|
|
85
85
|
let isSettled = false;
|
|
86
86
|
const timer = setInterval(() => {
|
|
87
|
-
|
|
87
|
+
probeAlive().catch(() => {
|
|
88
88
|
});
|
|
89
89
|
}, POLL_INTERVAL_IN_MILLISECONDS);
|
|
90
90
|
import_node_process.default.once("SIGINT", settle);
|
|
91
91
|
import_node_process.default.once("SIGTERM", settle);
|
|
92
|
-
async function
|
|
92
|
+
async function probeAlive() {
|
|
93
93
|
try {
|
|
94
94
|
const response = await fetch(versionUrl);
|
|
95
95
|
if (!response.ok) {
|
|
@@ -113,4 +113,4 @@ function waitForShutdownOrInstanceClose(cdpUrl) {
|
|
|
113
113
|
0 && (module.exports = {
|
|
114
114
|
main
|
|
115
115
|
});
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaW4gQ0xJIG92ZXIge0BsaW5rIGNvbm5lY3RUb0NkcH06IGxhdW5jaGVzIChvciBhdHRhY2hlcyB0bykgYSBDRFAtZW5hYmxlZFxuICogT2JzaWRpYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcnVudGltZSBoZWxwZXIgbmFtZXNwYWNlIGJvb3RzdHJhcHBlZCwgcHJpbnRzIHRoZVxuICogY2hvc2VuIENEUCBwb3J0L1VSTCwgYW5kIHN0YXlzIGFsaXZlIHVudGlsIGludGVycnVwdGVkIHNvIGFuIGV4dGVybmFsIHRvb2xcbiAqIChyYXcgQ0RQIGB3c2AsIERldlRvb2xzLCBcdTIwMjYpIGNhbiBhdHRhY2guXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgQ0xJIChsYXVuY2hlcyBPYnNpZGlhbiAvIENEUCkgY292ZXJlZCBtYW51YWxseSwgbm90IGJ5IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBwYXJzZUFyZ3MgfSBmcm9tICdub2RlOnV0aWwnO1xuXG5pbXBvcnQgdHlwZSB7IENvbm5lY3RUb0NkcE9wdGlvbnMgfSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLmNqcyc7XG5cbmltcG9ydCB7IGNvbm5lY3RUb0NkcCB9IGZyb20gJy4vY29ubmVjdC10by1jZHAuY2pzJztcblxuLyoqXG4gKiBUaGUgc2hhcGUgb2YgdGhlIHBhcnNlZCBDTEkgZmxhZyB2YWx1ZXMuXG4gKi9cbmludGVyZmFjZSBQYXJzZWRDbGlWYWx1ZXMge1xuICAnY29tbWFuZC10aW1lb3V0Jz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgJ2hvc3QnPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAnbm8tcmVtb3ZlLXZhdWx0Jz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICdvYnNpZGlhbi1pbnN0YWxsZXItdmVyc2lvbic/
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaW4gQ0xJIG92ZXIge0BsaW5rIGNvbm5lY3RUb0NkcH06IGxhdW5jaGVzIChvciBhdHRhY2hlcyB0bykgYSBDRFAtZW5hYmxlZFxuICogT2JzaWRpYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcnVudGltZSBoZWxwZXIgbmFtZXNwYWNlIGJvb3RzdHJhcHBlZCwgcHJpbnRzIHRoZVxuICogY2hvc2VuIENEUCBwb3J0L1VSTCwgYW5kIHN0YXlzIGFsaXZlIHVudGlsIGludGVycnVwdGVkIHNvIGFuIGV4dGVybmFsIHRvb2xcbiAqIChyYXcgQ0RQIGB3c2AsIERldlRvb2xzLCBcdTIwMjYpIGNhbiBhdHRhY2guXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgQ0xJIChsYXVuY2hlcyBPYnNpZGlhbiAvIENEUCkgY292ZXJlZCBtYW51YWxseSwgbm90IGJ5IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBwYXJzZUFyZ3MgfSBmcm9tICdub2RlOnV0aWwnO1xuXG5pbXBvcnQgdHlwZSB7IENvbm5lY3RUb0NkcE9wdGlvbnMgfSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLmNqcyc7XG5cbmltcG9ydCB7IGNvbm5lY3RUb0NkcCB9IGZyb20gJy4vY29ubmVjdC10by1jZHAuY2pzJztcblxuLyoqXG4gKiBUaGUgc2hhcGUgb2YgdGhlIHBhcnNlZCBDTEkgZmxhZyB2YWx1ZXMuXG4gKi9cbmludGVyZmFjZSBQYXJzZWRDbGlWYWx1ZXMge1xuICAnY29tbWFuZC10aW1lb3V0Jz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgJ2hvc3QnPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAnbm8tcmVtb3ZlLXZhdWx0Jz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICdvYnNpZGlhbi1pbnN0YWxsZXItdmVyc2lvbic/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICdvYnNpZGlhbi12ZXJzaW9uJz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgJ3BvcnQnPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAndmF1bHQnPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcnNlcyBDTEkgYXJndW1lbnRzLCBvcGVucyB0aGUgY29ubmVjdGlvbiwgcHJpbnRzIGl0cyBlbmRwb2ludCwgYW5kIGJsb2Nrc1xuICogdW50aWwgYFNJR0lOVGAvYFNJR1RFUk1gIG9yIHRoZSBvd25lZCBPYnNpZGlhbiB3aW5kb3cgaXMgY2xvc2VkLCBkaXNwb3NpbmcgdGhlXG4gKiBjb25uZWN0aW9uIG9uIHNodXRkb3duLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgdmFsdWVzIH0gPSBwYXJzZUFyZ3Moe1xuICAgIG9wdGlvbnM6IHtcbiAgICAgICdjb21tYW5kLXRpbWVvdXQnOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAnaG9zdCc6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICduby1yZW1vdmUtdmF1bHQnOiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICAgICAgJ29ic2lkaWFuLWluc3RhbGxlci12ZXJzaW9uJzogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgJ29ic2lkaWFuLXZlcnNpb24nOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAncG9ydCc6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICd2YXVsdCc6IHsgdHlwZTogJ3N0cmluZycgfVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IGNvbm5lY3RUb0NkcChidWlsZE9wdGlvbnModmFsdWVzKSk7XG5cbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoXG4gICAgJ09ic2lkaWFuIENEUCByZWFkeS5cXG4nXG4gICAgICArIGAgIHBvcnQ6ICAgJHtTdHJpbmcoY29ubmVjdGlvbi5wb3J0KX1cXG5gXG4gICAgICArIGAgIGNkcFVybDogJHtjb25uZWN0aW9uLmNkcFVybH1cXG5gXG4gICAgICArIGAgIHZhdWx0OiAgJHtjb25uZWN0aW9uLnZhdWx0LnBhdGh9XFxuYFxuICAgICAgKyAnUnVudGltZSBoZWxwZXJzIGJvb3RzdHJhcHBlZCBhcyB3aW5kb3cuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZy5cXG4nXG4gICAgICArICdQcmVzcyBDdHJsK0MgdG8gc3RvcC5cXG4nXG4gICk7XG5cbiAgYXdhaXQgd2FpdEZvclNodXRkb3duT3JJbnN0YW5jZUNsb3NlKGNvbm5lY3Rpb24uY2RwVXJsKTtcblxuICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxuU2h1dHRpbmcgZG93blx1MjAyNlxcbicpO1xuICBhd2FpdCBjb25uZWN0aW9uLmRpc3Bvc2UoKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMge0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnN9IGZyb20gcGFyc2VkIENMSSBmbGFnIHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0gdmFsdWVzIC0gVGhlIHBhcnNlZCBgcGFyc2VBcmdzYCB2YWx1ZXMuXG4gKiBAcmV0dXJucyBUaGUgY29ubmVjdGlvbiBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBidWlsZE9wdGlvbnModmFsdWVzOiBQYXJzZWRDbGlWYWx1ZXMpOiBDb25uZWN0VG9DZHBPcHRpb25zIHtcbiAgcmV0dXJuIHtcbiAgICAuLi4odmFsdWVzWydjb21tYW5kLXRpbWVvdXQnXSAhPT0gdW5kZWZpbmVkICYmIHsgY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kczogcGFyc2VOdW1iZXIoJ2NvbW1hbmQtdGltZW91dCcsIHZhbHVlc1snY29tbWFuZC10aW1lb3V0J10pIH0pLFxuICAgIC4uLih2YWx1ZXMuaG9zdCAhPT0gdW5kZWZpbmVkICYmIHsgaG9zdDogdmFsdWVzLmhvc3QgfSksXG4gICAgLi4uKHZhbHVlc1snbm8tcmVtb3ZlLXZhdWx0J10gPT09IHRydWUgJiYgeyBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZTogZmFsc2UgfSksXG4gICAgLi4uKHZhbHVlc1snb2JzaWRpYW4taW5zdGFsbGVyLXZlcnNpb24nXSAhPT0gdW5kZWZpbmVkICYmIHsgb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uOiB2YWx1ZXNbJ29ic2lkaWFuLWluc3RhbGxlci12ZXJzaW9uJ10gfSksXG4gICAgLi4uKHZhbHVlc1snb2JzaWRpYW4tdmVyc2lvbiddICE9PSB1bmRlZmluZWQgJiYgeyBvYnNpZGlhblZlcnNpb246IHZhbHVlc1snb2JzaWRpYW4tdmVyc2lvbiddIH0pLFxuICAgIC4uLih2YWx1ZXMucG9ydCAhPT0gdW5kZWZpbmVkICYmIHsgcG9ydDogcGFyc2VOdW1iZXIoJ3BvcnQnLCB2YWx1ZXMucG9ydCkgfSksXG4gICAgLi4uKHZhbHVlcy52YXVsdCAhPT0gdW5kZWZpbmVkICYmIHsgdmF1bHQ6IHZhbHVlcy52YXVsdCB9KVxuICB9O1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIG51bWVyaWMgQ0xJIGZsYWcgdmFsdWUsIHRocm93aW5nIG9uIGEgbm9uLWZpbml0ZSByZXN1bHQuXG4gKlxuICogQHBhcmFtIGZsYWcgLSBUaGUgZmxhZyBuYW1lIChmb3IgdGhlIGVycm9yIG1lc3NhZ2UpLlxuICogQHBhcmFtIHJhdyAtIFRoZSByYXcgc3RyaW5nIHZhbHVlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBudW1iZXIuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGByYXdgIGlzIG5vdCBhIGZpbml0ZSBudW1iZXIuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTnVtYmVyKGZsYWc6IHN0cmluZywgcmF3OiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCB2YWx1ZSA9IE51bWJlcihyYXcpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAtLSR7ZmxhZ30gbXVzdCBiZSBhIG51bWJlciwgZ290OiAke3Jhd31gKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgb25jZSB0aGUgcHJvY2VzcyByZWNlaXZlcyBgU0lHSU5UYC9gU0lHVEVSTWAsIG9yIHRoZSBDRFAgZW5kcG9pbnRcbiAqIHN0b3BzIGFuc3dlcmluZyAodGhlIG93bmVkIE9ic2lkaWFuIHdpbmRvdyB3YXMgY2xvc2VkKS5cbiAqXG4gKiBAcGFyYW0gY2RwVXJsIC0gVGhlIGNvbm5lY3Rpb24ncyBDRFAgYmFzZSBVUkwgdG8gcG9sbC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb24gdGhlIGZpcnN0IHNodXRkb3duIHRyaWdnZXIuXG4gKi9cbmZ1bmN0aW9uIHdhaXRGb3JTaHV0ZG93bk9ySW5zdGFuY2VDbG9zZShjZHBVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBQT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDEwMDA7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHZlcnNpb25VcmwgPSBgJHtjZHBVcmx9L2pzb24vdmVyc2lvbmA7XG4gICAgbGV0IGlzU2V0dGxlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBwcm9iZUFsaXZlKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAvLyBJZ25vcmUgcG9sbCBlcnJvcnMuXG4gICAgICB9KTtcbiAgICB9LCBQT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG5cbiAgICBwcm9jZXNzLm9uY2UoJ1NJR0lOVCcsIHNldHRsZSk7XG4gICAgcHJvY2Vzcy5vbmNlKCdTSUdURVJNJywgc2V0dGxlKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHByb2JlQWxpdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHZlcnNpb25VcmwpO1xuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgc2V0dGxlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBUaGUgQ0RQIHBvcnQgc3RvcHBlZCBhbnN3ZXJpbmc6IHRoZSBPYnNpZGlhbiB3aW5kb3cgd2FzIGNsb3NlZC5cbiAgICAgICAgc2V0dGxlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0dGxlKCk6IHZvaWQge1xuICAgICAgaWYgKGlzU2V0dGxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0EsMEJBQW9CO0FBQ3BCLHVCQUEwQjtBQUkxQiw0QkFBNkI7QUFzQjdCLGVBQXNCLE9BQXNCO0FBQzFDLFFBQU0sRUFBRSxPQUFPLFFBQUksNEJBQVU7QUFBQSxJQUMzQixTQUFTO0FBQUEsTUFDUCxtQkFBbUIsRUFBRSxNQUFNLFNBQVM7QUFBQSxNQUNwQyxRQUFRLEVBQUUsTUFBTSxTQUFTO0FBQUEsTUFDekIsbUJBQW1CLEVBQUUsTUFBTSxVQUFVO0FBQUEsTUFDckMsOEJBQThCLEVBQUUsTUFBTSxTQUFTO0FBQUEsTUFDL0Msb0JBQW9CLEVBQUUsTUFBTSxTQUFTO0FBQUEsTUFDckMsUUFBUSxFQUFFLE1BQU0sU0FBUztBQUFBLE1BQ3pCLFNBQVMsRUFBRSxNQUFNLFNBQVM7QUFBQSxJQUM1QjtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sYUFBYSxVQUFNLG9DQUFhLGFBQWEsTUFBTSxDQUFDO0FBRTFELHNCQUFBQSxRQUFRLE9BQU87QUFBQSxJQUNiO0FBQUEsWUFDaUIsT0FBTyxXQUFXLElBQUksQ0FBQztBQUFBLFlBQ3ZCLFdBQVcsTUFBTTtBQUFBLFlBQ2pCLFdBQVcsTUFBTSxJQUFJO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFHeEM7QUFFQSxRQUFNLCtCQUErQixXQUFXLE1BQU07QUFFdEQsc0JBQUFBLFFBQVEsT0FBTyxNQUFNLHlCQUFvQjtBQUN6QyxRQUFNLFdBQVcsUUFBUTtBQUMzQjtBQVFBLFNBQVMsYUFBYSxRQUE4QztBQUNsRSxTQUFPO0FBQUEsSUFDTCxHQUFJLE9BQU8saUJBQWlCLE1BQU0sVUFBYSxFQUFFLDhCQUE4QixZQUFZLG1CQUFtQixPQUFPLGlCQUFpQixDQUFDLEVBQUU7QUFBQSxJQUN6SSxHQUFJLE9BQU8sU0FBUyxVQUFhLEVBQUUsTUFBTSxPQUFPLEtBQUs7QUFBQSxJQUNyRCxHQUFJLE9BQU8saUJBQWlCLE1BQU0sUUFBUSxFQUFFLDRCQUE0QixNQUFNO0FBQUEsSUFDOUUsR0FBSSxPQUFPLDRCQUE0QixNQUFNLFVBQWEsRUFBRSwwQkFBMEIsT0FBTyw0QkFBNEIsRUFBRTtBQUFBLElBQzNILEdBQUksT0FBTyxrQkFBa0IsTUFBTSxVQUFhLEVBQUUsaUJBQWlCLE9BQU8sa0JBQWtCLEVBQUU7QUFBQSxJQUM5RixHQUFJLE9BQU8sU0FBUyxVQUFhLEVBQUUsTUFBTSxZQUFZLFFBQVEsT0FBTyxJQUFJLEVBQUU7QUFBQSxJQUMxRSxHQUFJLE9BQU8sVUFBVSxVQUFhLEVBQUUsT0FBTyxPQUFPLE1BQU07QUFBQSxFQUMxRDtBQUNGO0FBVUEsU0FBUyxZQUFZLE1BQWMsS0FBcUI7QUFDdEQsUUFBTSxRQUFRLE9BQU8sR0FBRztBQUN4QixNQUFJLENBQUMsT0FBTyxTQUFTLEtBQUssR0FBRztBQUMzQixVQUFNLElBQUksVUFBVSxLQUFLLElBQUksMkJBQTJCLEdBQUcsRUFBRTtBQUFBLEVBQy9EO0FBQ0EsU0FBTztBQUNUO0FBU0EsU0FBUywrQkFBK0IsUUFBK0I7QUFDckUsUUFBTSxnQ0FBZ0M7QUFDdEMsU0FBTyxJQUFJLFFBQWMsQ0FBQyxZQUFZO0FBQ3BDLFVBQU0sYUFBYSxHQUFHLE1BQU07QUFDNUIsUUFBSSxZQUFZO0FBRWhCLFVBQU0sUUFBUSxZQUFZLE1BQU07QUFDOUIsaUJBQVcsRUFBRSxNQUFNLE1BQU07QUFBQSxNQUV6QixDQUFDO0FBQUEsSUFDSCxHQUFHLDZCQUE2QjtBQUVoQyx3QkFBQUEsUUFBUSxLQUFLLFVBQVUsTUFBTTtBQUM3Qix3QkFBQUEsUUFBUSxLQUFLLFdBQVcsTUFBTTtBQUU5QixtQkFBZSxhQUE0QjtBQUN6QyxVQUFJO0FBQ0YsY0FBTSxXQUFXLE1BQU0sTUFBTSxVQUFVO0FBQ3ZDLFlBQUksQ0FBQyxTQUFTLElBQUk7QUFDaEIsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRixRQUFRO0FBRU4sZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsYUFBUyxTQUFlO0FBQ3RCLFVBQUksV0FBVztBQUNiO0FBQUEsTUFDRjtBQUNBLGtCQUFZO0FBQ1osb0JBQWMsS0FBSztBQUNuQixjQUFRO0FBQUEsSUFDVjtBQUFBLEVBQ0YsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJwcm9jZXNzIl0KfQo=
|