obsidian-integration-testing 8.1.1 → 8.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -14
- package/dist/lib/cjs/appium-dependencies.cjs +48 -0
- package/dist/lib/cjs/appium-dependencies.d.cts +55 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/transport-factory.cjs +56 -4
- package/dist/lib/cjs/transport-options.cjs +1 -1
- package/dist/lib/cjs/transport-options.d.cts +21 -3
- package/dist/lib/esm/appium-dependencies.d.mts +55 -0
- package/dist/lib/esm/appium-dependencies.mjs +22 -0
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/transport-factory.mjs +60 -4
- package/dist/lib/esm/transport-options.d.mts +21 -3
- package/dist/obsidian-integration-testing-8.2.0.tgz +0 -0
- package/package.json +1 -1
- package/dist/obsidian-integration-testing-8.1.1.tgz +0 -0
|
@@ -68,9 +68,11 @@ export interface ObsidianAndroidAppiumTransportOptions {
|
|
|
68
68
|
* Whether the auto-started Appium server console window is shown.
|
|
69
69
|
*
|
|
70
70
|
* When `false` (the default), the `npx appium` server process is spawned with
|
|
71
|
-
* its console window hidden (`windowsHide`)
|
|
72
|
-
*
|
|
73
|
-
*
|
|
71
|
+
* its console window hidden (`windowsHide`) and its output discarded, so it
|
|
72
|
+
* neither steals focus nor writes to the invoking terminal. Ignored when
|
|
73
|
+
* attaching to an already-running Appium server ({@link shouldAutoStartAppium}
|
|
74
|
+
* `false`, or the server already reachable). Set `true` to see the server log window
|
|
75
|
+
* and its live output.
|
|
74
76
|
*
|
|
75
77
|
* @default `false`
|
|
76
78
|
*/
|
|
@@ -118,6 +120,22 @@ export interface ObsidianAndroidAppiumTransportOptions {
|
|
|
118
120
|
* of creating a new session, avoiding duplicate Appium/ADB connections.
|
|
119
121
|
*/
|
|
120
122
|
readonly sessionId?: string;
|
|
123
|
+
/**
|
|
124
|
+
* Whether to automatically install missing Appium dependencies (the
|
|
125
|
+
* `uiautomator2` driver, and Appium itself) before auto-starting the server.
|
|
126
|
+
*
|
|
127
|
+
* When `true` (the default) and the harness is about to auto-start the Appium
|
|
128
|
+
* server ({@link shouldAutoStartAppium}), the factory first ensures Appium is
|
|
129
|
+
* installed (globally, via `npm install -g appium`) and that the
|
|
130
|
+
* `uiautomator2` driver is installed (`appium driver install uiautomator2`),
|
|
131
|
+
* installing whichever is missing. Ignored when attaching to an
|
|
132
|
+
* already-running server (nothing is auto-started, so nothing is installed) or
|
|
133
|
+
* when {@link shouldAutoStartAppium} is `false`. Set it to `false` to manage
|
|
134
|
+
* the Appium toolchain yourself and skip the machine-mutating global install.
|
|
135
|
+
*
|
|
136
|
+
* @default `true`
|
|
137
|
+
*/
|
|
138
|
+
readonly shouldAutoInstallAppiumDependencies?: boolean;
|
|
121
139
|
/**
|
|
122
140
|
* Whether to automatically start the Appium server if it is not reachable.
|
|
123
141
|
*
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Pure helpers for deciding whether the harness must auto-install the Appium
|
|
5
|
+
* dependencies (the `uiautomator2` driver) before it auto-starts the Appium
|
|
6
|
+
* server, plus resolving the auto-install opt-out from the transport options.
|
|
7
|
+
* Kept separate from the integration-only `transport-factory` so the parsing and
|
|
8
|
+
* default resolution stay unit-testable (the factory itself shells out to `npm`
|
|
9
|
+
* / `npx` and is excluded from unit tests).
|
|
10
|
+
*/
|
|
11
|
+
import type { ObsidianAndroidAppiumTransportOptions } from './transport-options.mjs';
|
|
12
|
+
/**
|
|
13
|
+
* The Appium driver name required to automate Obsidian Mobile on Android.
|
|
14
|
+
*/
|
|
15
|
+
export declare const UIAUTOMATOR2_DRIVER_NAME = "uiautomator2";
|
|
16
|
+
/**
|
|
17
|
+
* Parameters for {@link checkIsAppiumDriverInstalled}.
|
|
18
|
+
*/
|
|
19
|
+
export interface CheckIsAppiumDriverInstalledParams {
|
|
20
|
+
/**
|
|
21
|
+
* Raw stdout of `appium driver list --installed --json` — a JSON object keyed
|
|
22
|
+
* by installed driver name (`{}` when none are installed).
|
|
23
|
+
*/
|
|
24
|
+
readonly driverListJson: string;
|
|
25
|
+
/** The driver name to look for (e.g. {@link UIAUTOMATOR2_DRIVER_NAME}). */
|
|
26
|
+
readonly driverName: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Decides whether a given Appium driver is installed, from the raw JSON output
|
|
30
|
+
* of `appium driver list --installed --json`.
|
|
31
|
+
*
|
|
32
|
+
* `--installed` restricts the listing to installed drivers, so a driver is
|
|
33
|
+
* present exactly when its name is a key of the parsed object. Malformed or
|
|
34
|
+
* non-object output (an empty string, a log line that leaked onto stdout, a
|
|
35
|
+
* JSON primitive, `null`) is treated as "not installed" so the caller proceeds
|
|
36
|
+
* to install — the install command is only issued when this returns `false`.
|
|
37
|
+
*
|
|
38
|
+
* @param params - The sampled driver-list output and the driver name to check.
|
|
39
|
+
* @returns `true` when the driver is listed as installed.
|
|
40
|
+
*/
|
|
41
|
+
export declare function checkIsAppiumDriverInstalled(params: CheckIsAppiumDriverInstalledParams): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Resolves whether the harness may auto-install missing Appium dependencies,
|
|
44
|
+
* applying the default when the option is omitted.
|
|
45
|
+
*
|
|
46
|
+
* This only governs the machine-mutating install step (a global `npm install -g
|
|
47
|
+
* appium` and an `appium driver install`); it is a no-op unless the harness is
|
|
48
|
+
* also auto-starting the Appium server ({@link
|
|
49
|
+
* ObsidianAndroidAppiumTransportOptions.shouldAutoStartAppium}). Set it to
|
|
50
|
+
* `false` to manage the Appium toolchain yourself.
|
|
51
|
+
*
|
|
52
|
+
* @param options - The Android Appium transport options.
|
|
53
|
+
* @returns Whether missing Appium dependencies may be auto-installed.
|
|
54
|
+
*/
|
|
55
|
+
export declare function resolveShouldAutoInstallAppiumDependencies(options: ObsidianAndroidAppiumTransportOptions): boolean;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const UIAUTOMATOR2_DRIVER_NAME = "uiautomator2";
|
|
2
|
+
function checkIsAppiumDriverInstalled(params) {
|
|
3
|
+
let parsed;
|
|
4
|
+
try {
|
|
5
|
+
parsed = JSON.parse(params.driverListJson);
|
|
6
|
+
} catch {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
if (typeof parsed !== "object" || parsed === null) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
return params.driverName in parsed;
|
|
13
|
+
}
|
|
14
|
+
function resolveShouldAutoInstallAppiumDependencies(options) {
|
|
15
|
+
return options.shouldAutoInstallAppiumDependencies ?? true;
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
UIAUTOMATOR2_DRIVER_NAME,
|
|
19
|
+
checkIsAppiumDriverInstalled,
|
|
20
|
+
resolveShouldAutoInstallAppiumDependencies
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FwcGl1bS1kZXBlbmRlbmNpZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIGhlbHBlcnMgZm9yIGRlY2lkaW5nIHdoZXRoZXIgdGhlIGhhcm5lc3MgbXVzdCBhdXRvLWluc3RhbGwgdGhlIEFwcGl1bVxuICogZGVwZW5kZW5jaWVzICh0aGUgYHVpYXV0b21hdG9yMmAgZHJpdmVyKSBiZWZvcmUgaXQgYXV0by1zdGFydHMgdGhlIEFwcGl1bVxuICogc2VydmVyLCBwbHVzIHJlc29sdmluZyB0aGUgYXV0by1pbnN0YWxsIG9wdC1vdXQgZnJvbSB0aGUgdHJhbnNwb3J0IG9wdGlvbnMuXG4gKiBLZXB0IHNlcGFyYXRlIGZyb20gdGhlIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1mYWN0b3J5YCBzbyB0aGUgcGFyc2luZyBhbmRcbiAqIGRlZmF1bHQgcmVzb2x1dGlvbiBzdGF5IHVuaXQtdGVzdGFibGUgKHRoZSBmYWN0b3J5IGl0c2VsZiBzaGVsbHMgb3V0IHRvIGBucG1gXG4gKiAvIGBucHhgIGFuZCBpcyBleGNsdWRlZCBmcm9tIHVuaXQgdGVzdHMpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMubWpzJztcblxuLyoqXG4gKiBUaGUgQXBwaXVtIGRyaXZlciBuYW1lIHJlcXVpcmVkIHRvIGF1dG9tYXRlIE9ic2lkaWFuIE1vYmlsZSBvbiBBbmRyb2lkLlxuICovXG5leHBvcnQgY29uc3QgVUlBVVRPTUFUT1IyX0RSSVZFUl9OQU1FID0gJ3VpYXV0b21hdG9yMic7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNoZWNrSXNBcHBpdW1Ecml2ZXJJbnN0YWxsZWR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrSXNBcHBpdW1Ecml2ZXJJbnN0YWxsZWRQYXJhbXMge1xuICAvKipcbiAgICogUmF3IHN0ZG91dCBvZiBgYXBwaXVtIGRyaXZlciBsaXN0IC0taW5zdGFsbGVkIC0tanNvbmAgXHUyMDE0IGEgSlNPTiBvYmplY3Qga2V5ZWRcbiAgICogYnkgaW5zdGFsbGVkIGRyaXZlciBuYW1lIChge31gIHdoZW4gbm9uZSBhcmUgaW5zdGFsbGVkKS5cbiAgICovXG4gIHJlYWRvbmx5IGRyaXZlckxpc3RKc29uOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBkcml2ZXIgbmFtZSB0byBsb29rIGZvciAoZS5nLiB7QGxpbmsgVUlBVVRPTUFUT1IyX0RSSVZFUl9OQU1FfSkuICovXG4gIHJlYWRvbmx5IGRyaXZlck5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoZXRoZXIgYSBnaXZlbiBBcHBpdW0gZHJpdmVyIGlzIGluc3RhbGxlZCwgZnJvbSB0aGUgcmF3IEpTT04gb3V0cHV0XG4gKiBvZiBgYXBwaXVtIGRyaXZlciBsaXN0IC0taW5zdGFsbGVkIC0tanNvbmAuXG4gKlxuICogYC0taW5zdGFsbGVkYCByZXN0cmljdHMgdGhlIGxpc3RpbmcgdG8gaW5zdGFsbGVkIGRyaXZlcnMsIHNvIGEgZHJpdmVyIGlzXG4gKiBwcmVzZW50IGV4YWN0bHkgd2hlbiBpdHMgbmFtZSBpcyBhIGtleSBvZiB0aGUgcGFyc2VkIG9iamVjdC4gTWFsZm9ybWVkIG9yXG4gKiBub24tb2JqZWN0IG91dHB1dCAoYW4gZW1wdHkgc3RyaW5nLCBhIGxvZyBsaW5lIHRoYXQgbGVha2VkIG9udG8gc3Rkb3V0LCBhXG4gKiBKU09OIHByaW1pdGl2ZSwgYG51bGxgKSBpcyB0cmVhdGVkIGFzIFwibm90IGluc3RhbGxlZFwiIHNvIHRoZSBjYWxsZXIgcHJvY2VlZHNcbiAqIHRvIGluc3RhbGwgXHUyMDE0IHRoZSBpbnN0YWxsIGNvbW1hbmQgaXMgb25seSBpc3N1ZWQgd2hlbiB0aGlzIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHNhbXBsZWQgZHJpdmVyLWxpc3Qgb3V0cHV0IGFuZCB0aGUgZHJpdmVyIG5hbWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgZHJpdmVyIGlzIGxpc3RlZCBhcyBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lzQXBwaXVtRHJpdmVySW5zdGFsbGVkKHBhcmFtczogQ2hlY2tJc0FwcGl1bURyaXZlckluc3RhbGxlZFBhcmFtcyk6IGJvb2xlYW4ge1xuICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UocGFyYW1zLmRyaXZlckxpc3RKc29uKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IHBhcnNlZCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbXMuZHJpdmVyTmFtZSBpbiBwYXJzZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2hldGhlciB0aGUgaGFybmVzcyBtYXkgYXV0by1pbnN0YWxsIG1pc3NpbmcgQXBwaXVtIGRlcGVuZGVuY2llcyxcbiAqIGFwcGx5aW5nIHRoZSBkZWZhdWx0IHdoZW4gdGhlIG9wdGlvbiBpcyBvbWl0dGVkLlxuICpcbiAqIFRoaXMgb25seSBnb3Zlcm5zIHRoZSBtYWNoaW5lLW11dGF0aW5nIGluc3RhbGwgc3RlcCAoYSBnbG9iYWwgYG5wbSBpbnN0YWxsIC1nXG4gKiBhcHBpdW1gIGFuZCBhbiBgYXBwaXVtIGRyaXZlciBpbnN0YWxsYCk7IGl0IGlzIGEgbm8tb3AgdW5sZXNzIHRoZSBoYXJuZXNzIGlzXG4gKiBhbHNvIGF1dG8tc3RhcnRpbmcgdGhlIEFwcGl1bSBzZXJ2ZXIgKHtAbGlua1xuICogT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucy5zaG91bGRBdXRvU3RhcnRBcHBpdW19KS4gU2V0IGl0IHRvXG4gKiBgZmFsc2VgIHRvIG1hbmFnZSB0aGUgQXBwaXVtIHRvb2xjaGFpbiB5b3Vyc2VsZi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBBbmRyb2lkIEFwcGl1bSB0cmFuc3BvcnQgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFdoZXRoZXIgbWlzc2luZyBBcHBpdW0gZGVwZW5kZW5jaWVzIG1heSBiZSBhdXRvLWluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTaG91bGRBdXRvSW5zdGFsbEFwcGl1bURlcGVuZGVuY2llcyhcbiAgb3B0aW9uczogT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9uc1xuKTogYm9vbGVhbiB7XG4gIHJldHVybiBvcHRpb25zLnNob3VsZEF1dG9JbnN0YWxsQXBwaXVtRGVwZW5kZW5jaWVzID8/IHRydWU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFnQk8sTUFBTSwyQkFBMkI7QUE2QmpDLFNBQVMsNkJBQTZCLFFBQXFEO0FBQ2hHLE1BQUk7QUFDSixNQUFJO0FBQ0YsYUFBUyxLQUFLLE1BQU0sT0FBTyxjQUFjO0FBQUEsRUFDM0MsUUFBUTtBQUNOLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxPQUFPLFdBQVcsWUFBWSxXQUFXLE1BQU07QUFDakQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLE9BQU8sY0FBYztBQUM5QjtBQWVPLFNBQVMsMkNBQ2QsU0FDUztBQUNULFNBQU8sUUFBUSx1Q0FBdUM7QUFDeEQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/dist/lib/esm/library.mjs
CHANGED