@wdio/appium-service 9.21.0 → 9.23.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 CHANGED
@@ -111,6 +111,82 @@ export const config = {
111
111
  ```
112
112
  **Note:** The utilization of aliases is discouraged and unsupported. Instead, please use the full property name in lower camel case.
113
113
 
114
+ ## CLI Command
115
+
116
+ This package includes a CLI command to quickly start the Appium server and open the Appium Inspector in your browser. This makes it easier to work with Appium when using WebdriverIO.
117
+
118
+ ### Usage
119
+
120
+ ```sh
121
+ npx start-appium-inspector [options]
122
+ ```
123
+
124
+ The command will:
125
+ - Check if the Appium Inspector plugin is installed (required for the Inspector to work)
126
+ - Automatically start the Appium server with the Inspector plugin enabled
127
+ - Open the Appium Inspector at `http://localhost:{port}/inspector` in your default browser
128
+ - Handle cleanup when you press `Ctrl+C`
129
+
130
+ ### Prerequisites
131
+
132
+ Make sure you have Appium installed with the drivers you need:
133
+
134
+ ```sh
135
+ # Install Appium globally
136
+ npm install -g appium
137
+
138
+ # Install drivers (examples)
139
+ appium driver install uiautomator2 # For Android
140
+ appium driver install xcuitest # For iOS
141
+ ```
142
+
143
+ Or install Appium locally in your project:
144
+
145
+ ```sh
146
+ npm install --save-dev appium
147
+ ```
148
+
149
+ **Important:** The Appium Inspector plugin must be installed for this CLI command to work. The command will automatically check if the plugin is installed before starting the server. If it's not installed, you'll see an error with instructions.
150
+
151
+ Install the Appium Inspector plugin:
152
+
153
+ ```sh
154
+ # Add it as a local dependency
155
+ npm install --D appium-inspector-plugin
156
+
157
+ # Add it globally, depending on how you installed it before
158
+ appium plugin install inspector
159
+ ```
160
+
161
+ For more information about installing and using the Appium Inspector plugin, see the [Appium Inspector documentation](https://appium.github.io/appium-inspector/latest/quickstart/installation/#appium-plugin).
162
+
163
+ ### Examples
164
+
165
+ Start with default port (4723):
166
+ ```sh
167
+ npx start-appium-inspector
168
+ ```
169
+
170
+ Start with a custom port:
171
+ ```sh
172
+ npx start-appium-inspector --port=8080
173
+ ```
174
+
175
+ Pass additional Appium server arguments:
176
+ ```sh
177
+ npx start-appium-inspector --port=4723 --base-path=/wd/hub --relaxed-security
178
+ ```
179
+
180
+ The command accepts all standard Appium server arguments. For a complete list of available arguments, see the [Appium documentation](https://appium.io/docs/en/latest/cli/args/).
181
+
182
+ ### Appium Inspector
183
+
184
+ The CLI automatically opens the Appium Inspector web application at `http://localhost:{port}/inspector`, which provides a GUI interface for inspecting and interacting with your mobile apps. The Inspector is served directly from the Appium server when the Inspector plugin is enabled. For more information about the Appium Inspector, visit the [Appium Inspector GitHub repository](https://github.com/appium/appium-inspector).
185
+
186
+ **Note:**
187
+ - The Appium Inspector requires CORS to be enabled on the Appium server. The CLI automatically adds the `--allow-cors` flag to ensure compatibility.
188
+ - The CLI uses the `--use-plugins=inspector` flag to enable the Appium Inspector plugin. Before running the command, make sure you have installed the Appium Inspector plugin (see Prerequisites above).
189
+
114
190
  ----
115
191
 
116
192
  For more information on WebdriverIO see the [homepage](https://webdriver.io).
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { run } from '../build/cli.js'
3
+
4
+ run().catch((err) => {
5
+ console.error(err)
6
+ process.exit(1)
7
+ })
@@ -0,0 +1,8 @@
1
+ import { type ChildProcessByStdio } from 'node:child_process';
2
+ import { type Readable } from 'node:stream';
3
+ export declare function extractPortFromCliArgs(args: string[]): number;
4
+ export declare function determineAppiumCliCommand(command?: string): Promise<string>;
5
+ export declare function checkInspectorPluginInstalled(appiumCommandPath: string): Promise<void>;
6
+ export declare function startAppiumForCli(appiumCommandPath: string, args: string[], timeout?: number): Promise<ChildProcessByStdio<null, Readable, Readable>>;
7
+ export declare function openBrowser(url: string): Promise<void>;
8
+ //# sourceMappingURL=cli-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-utils.d.ts","sourceRoot":"","sources":["../src/cli-utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACpF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AAoC3C,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAE7D;AAYD,wBAAsB,yBAAyB,CAAC,OAAO,SAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BnF;AAED,wBAAsB,6BAA6B,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC5F;AAED,wBAAsB,iBAAiB,CACnC,iBAAiB,EAAE,MAAM,EACzB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,SAAuB,GAC/B,OAAO,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CA6GxD;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB5D"}
package/build/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function run(): Promise<void>;
2
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAMA,wBAAsB,GAAG,kBAqDxB"}
package/build/cli.js ADDED
@@ -0,0 +1,229 @@
1
+ // src/cli-utils.ts
2
+ import { resolve } from "node:path";
3
+ import url from "node:url";
4
+ import { resolve as resolveModule } from "import-meta-resolve";
5
+ import { execSync, spawn, exec } from "node:child_process";
6
+ import os from "node:os";
7
+ import { promisify } from "node:util";
8
+ var APPIUM_START_TIMEOUT = 30 * 1e3;
9
+ function extractPortFromArgs(args) {
10
+ const portArgIndex = args.findIndex((arg) => arg.startsWith("--port"));
11
+ if (portArgIndex === -1) {
12
+ return null;
13
+ }
14
+ const portArg = args[portArgIndex];
15
+ let portValue;
16
+ if (portArg.includes("=")) {
17
+ portValue = portArg.split("=")[1];
18
+ } else {
19
+ const nextArg = args[portArgIndex + 1];
20
+ if (!nextArg || nextArg.startsWith("--")) {
21
+ throw new Error("Missing port value after --port flag.");
22
+ }
23
+ portValue = nextArg;
24
+ }
25
+ const port = Number(portValue);
26
+ if (Number.isInteger(port) && port >= 1 && port <= 65535) {
27
+ return port;
28
+ }
29
+ return null;
30
+ }
31
+ function extractPortFromCliArgs(args) {
32
+ return extractPortFromArgs(args) ?? 4723;
33
+ }
34
+ async function tryResolveModule(command, from) {
35
+ try {
36
+ const entryPath = await resolveModule(command, from);
37
+ return url.fileURLToPath(entryPath);
38
+ } catch {
39
+ return null;
40
+ }
41
+ }
42
+ async function determineAppiumCliCommand(command = "appium") {
43
+ const localNodeModules = resolve(process.cwd(), "node_modules");
44
+ const localPath = await tryResolveModule(command, url.pathToFileURL(localNodeModules).toString());
45
+ if (localPath) {
46
+ return localPath;
47
+ }
48
+ const packagePath = await tryResolveModule(command, import.meta.url);
49
+ if (packagePath) {
50
+ return packagePath;
51
+ }
52
+ try {
53
+ const npmPrefix = execSync("npm config get prefix", { encoding: "utf-8" }).trim();
54
+ const globalNodeModules = resolve(npmPrefix, "lib", "node_modules");
55
+ const globalPath = await tryResolveModule(command, url.pathToFileURL(globalNodeModules).toString());
56
+ if (globalPath) {
57
+ return globalPath;
58
+ }
59
+ } catch {
60
+ }
61
+ throw new Error(
62
+ "Appium is not installed. Please install it globally via `npm install -g appium`\nor locally in your project via `npm i --save-dev appium`. Do not forget to also\ninstall the drivers for your platform."
63
+ );
64
+ }
65
+ async function checkInspectorPluginInstalled(appiumCommandPath) {
66
+ const INSPECTOR_PLUGIN_DOCS_URL = "https://appium.github.io/appium-inspector/latest/quickstart/installation/#appium-plugin";
67
+ const helpMessage = `Please check this link for more information: ${INSPECTOR_PLUGIN_DOCS_URL}`;
68
+ try {
69
+ const { stdout, stderr } = await promisify(exec)(`${appiumCommandPath} plugin list --installed`, {
70
+ encoding: "utf-8"
71
+ });
72
+ const output = stderr || stdout;
73
+ if (!output || output.trim().length === 0) {
74
+ throw new Error(
75
+ `Appium Inspector plugin is not installed. ${helpMessage}`
76
+ );
77
+ }
78
+ const lines = output.split("\n");
79
+ const inspectorLine = lines.find((line) => /^-.*inspector/i.test(line.trim()));
80
+ if (!inspectorLine) {
81
+ throw new Error(
82
+ `Appium Inspector plugin is not installed. ${helpMessage}`
83
+ );
84
+ }
85
+ } catch (err) {
86
+ if (err instanceof Error && !err.message.includes("Inspector plugin")) {
87
+ throw new Error(
88
+ `Failed to check Appium Inspector plugin installation: ${err.message}. ${helpMessage}`
89
+ );
90
+ }
91
+ throw err;
92
+ }
93
+ }
94
+ async function startAppiumForCli(appiumCommandPath, args, timeout = APPIUM_START_TIMEOUT) {
95
+ let command = "node";
96
+ const appiumArgs = [appiumCommandPath, ...args];
97
+ if (os.platform() === "win32") {
98
+ appiumArgs.unshift("/c", command);
99
+ command = "cmd";
100
+ }
101
+ const appiumProcess = spawn(command, appiumArgs, {
102
+ stdio: ["ignore", "pipe", "pipe"]
103
+ });
104
+ let errorCaptured = false;
105
+ let timeoutId;
106
+ let error;
107
+ return new Promise((resolvePromise, reject) => {
108
+ let outputBuffer = "";
109
+ timeoutId = setTimeout(() => {
110
+ rejectOnce(new Error("Timeout: Appium did not start within expected time"));
111
+ }, timeout);
112
+ const rejectOnce = (err) => {
113
+ if (!errorCaptured) {
114
+ errorCaptured = true;
115
+ clearTimeout(timeoutId);
116
+ reject(err);
117
+ }
118
+ };
119
+ const onErrorMessage = (data) => {
120
+ const message = data.toString();
121
+ const isDebuggerMessage = message.includes("Debugger attached") || message.includes("Debugger listening on") || message.includes("For help, see: https://nodejs.org/en/docs/inspector");
122
+ if (isDebuggerMessage) {
123
+ return;
124
+ }
125
+ if (!errorCaptured) {
126
+ error = message || "Appium exited without error message";
127
+ const isWarning = message.trim().startsWith("WARN");
128
+ if (!isWarning) {
129
+ rejectOnce(new Error(error));
130
+ return;
131
+ }
132
+ }
133
+ process.stderr.write(message);
134
+ };
135
+ const onStdout = (data) => {
136
+ outputBuffer += data.toString();
137
+ process.stdout.write(data.toString());
138
+ if (outputBuffer.includes("Appium REST http interface listener started")) {
139
+ outputBuffer = "";
140
+ clearTimeout(timeoutId);
141
+ resolvePromise(appiumProcess);
142
+ }
143
+ };
144
+ appiumProcess.stdout.on("data", onStdout);
145
+ appiumProcess.stderr.on("data", onErrorMessage);
146
+ appiumProcess.once("exit", (exitCode) => {
147
+ let errorMessage = `Appium exited before timeout (exit code: ${exitCode})`;
148
+ if (exitCode === 2) {
149
+ errorMessage += "\n" + (error?.toString() || "Check that you don't already have a running Appium service.");
150
+ } else if (errorCaptured) {
151
+ errorMessage += `
152
+ ${error?.toString()}`;
153
+ }
154
+ if (exitCode !== 0) {
155
+ console.error(errorMessage);
156
+ }
157
+ rejectOnce(new Error(errorMessage));
158
+ });
159
+ });
160
+ }
161
+ async function openBrowser(url2) {
162
+ console.log("\u{1F310} Opening Appium Inspector in your default browser...");
163
+ let command;
164
+ const platform = os.platform();
165
+ if (platform === "win32") {
166
+ command = `start "" "${url2}"`;
167
+ } else if (platform === "darwin") {
168
+ command = `open "${url2}"`;
169
+ } else {
170
+ command = `xdg-open "${url2}"`;
171
+ }
172
+ try {
173
+ execSync(command, { stdio: "ignore" });
174
+ console.log("\u2705 Opened Appium Inspector in your default browser.");
175
+ } catch {
176
+ console.warn(`\u26A0\uFE0F Automatically starting the default browser didn't work, please open your favorite browser and paste the url '${url2}' in there`);
177
+ }
178
+ }
179
+
180
+ // src/cli.ts
181
+ import treeKill from "tree-kill";
182
+ import { promisify as promisify2 } from "node:util";
183
+ var promisifiedTreeKill = promisify2(treeKill);
184
+ async function run() {
185
+ const args = process.argv.slice(2);
186
+ const port = extractPortFromCliArgs(args);
187
+ const requiredFlags = ["--log-timestamp", "--use-plugins=inspector", "--allow-cors"];
188
+ args.push(`--port=${port}`);
189
+ requiredFlags.forEach((flag) => {
190
+ if (!args.includes(flag)) {
191
+ args.push(flag);
192
+ }
193
+ });
194
+ const command = await determineAppiumCliCommand();
195
+ const serverArgs = ["server", ...args];
196
+ console.log("\u23F3 Checking inspector plugin...");
197
+ await checkInspectorPluginInstalled(command);
198
+ console.log("\u{1F680} Starting Appium server...");
199
+ console.log(`\u{1F4E1} Command: ${command} ${serverArgs.join(" ")}`);
200
+ console.log("\u23F3 Waiting for Appium server to be ready...");
201
+ console.log("\u2139\uFE0F Press Ctrl+C to stop Appium server and exit\n\n");
202
+ const appiumProcess = await startAppiumForCli(command, serverArgs);
203
+ await openBrowser(`http://localhost:${port}/inspector`);
204
+ let isCleaningUp = false;
205
+ const cleanup = async () => {
206
+ if (isCleaningUp) {
207
+ return;
208
+ }
209
+ isCleaningUp = true;
210
+ if (appiumProcess && appiumProcess.pid) {
211
+ console.log("\n\u{1F6D1} Stopping Appium server...");
212
+ try {
213
+ await promisifiedTreeKill(appiumProcess.pid, "SIGTERM");
214
+ console.log("\u2705 Appium server stopped successfully");
215
+ } catch (err) {
216
+ console.error("Error stopping Appium:", err);
217
+ }
218
+ }
219
+ process.removeListener("SIGINT", cleanup);
220
+ process.removeListener("SIGTERM", cleanup);
221
+ process.exit(0);
222
+ };
223
+ process.on("SIGINT", cleanup);
224
+ process.on("SIGTERM", cleanup);
225
+ process.stdin.resume();
226
+ }
227
+ export {
228
+ run
229
+ };
package/build/index.js CHANGED
@@ -148,7 +148,8 @@ var AppiumLauncher = class _AppiumLauncher {
148
148
  }
149
149
  this._appiumCliArgs.push(...formatCliArgs({ ...this._args }));
150
150
  const command = await this._getCommand(this._options.command);
151
- this._process = await this._startAppium(command, this._appiumCliArgs);
151
+ const timeout = this._options.appiumStartTimeout ?? APPIUM_START_TIMEOUT;
152
+ this._process = await this._startAppium(command, this._appiumCliArgs, timeout);
152
153
  if (this._logPath) {
153
154
  this._redirectLogStream(this._logPath);
154
155
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAIlE,OAAO,KAAK,EAAyB,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAa5E,MAAM,CAAC,OAAO,OAAO,cAAe,YAAW,QAAQ,CAAC,eAAe;;IAQ/D,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO,CAAC;IATpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,CAA+C;IAChE,OAAO,CAAC,eAAe,CAAiB;gBAG5B,QAAQ,EAAE,mBAAmB,EAC7B,aAAa,EAAE,YAAY,CAAC,sBAAsB,EAClD,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,YAAA;YAS1B,WAAW;IAqBzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyDlB,SAAS;IAqDf,OAAO,CAAC,mBAAmB,CAAsC;IAC3D,UAAU;IAmChB,OAAO,CAAC,YAAY;YA2GN,kBAAkB;mBAeX,iBAAiB;CAezC"}
1
+ {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAIlE,OAAO,KAAK,EAAyB,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAa5E,MAAM,CAAC,OAAO,OAAO,cAAe,YAAW,QAAQ,CAAC,eAAe;;IAQ/D,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO,CAAC;IATpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,CAA+C;IAChE,OAAO,CAAC,eAAe,CAAiB;gBAG5B,QAAQ,EAAE,mBAAmB,EAC7B,aAAa,EAAE,YAAY,CAAC,sBAAsB,EAClD,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,YAAA;YAS1B,WAAW;IAqBzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyDlB,SAAS;IAuDf,OAAO,CAAC,mBAAmB,CAAsC;IAC3D,UAAU;IAmChB,OAAO,CAAC,YAAY;YA2GN,kBAAkB;mBAeX,iBAAiB;CAezC"}
package/build/types.d.ts CHANGED
@@ -137,6 +137,11 @@ export interface AppiumServiceConfig {
137
137
  * @default {}
138
138
  */
139
139
  args?: AppiumServerArguments;
140
+ /**
141
+ * Timeout in milliseconds for Appium to start successfully.
142
+ * @default 30000
143
+ */
144
+ appiumStartTimeout?: number;
140
145
  }
141
146
  export type ArgValue = string | number | boolean | null | object;
142
147
  export type KeyValueArgs = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAChC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAClC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,qBAAqB,CAAA;CAC/B;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAA;AAChE,MAAM,MAAM,YAAY,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAChC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAClC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,qBAAqB,CAAA;IAE5B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAA;AAChE,MAAM,MAAM,YAAY,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wdio/appium-service",
3
- "version": "9.21.0",
3
+ "version": "9.23.0",
4
4
  "description": "A WebdriverIO service to start & stop Appium Server",
5
5
  "author": "Morten Bjerg Gregersen <morten@mogee.dk>",
6
6
  "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-appium-service",
@@ -25,28 +25,36 @@
25
25
  "bugs": {
26
26
  "url": "https://github.com/webdriverio/webdriverio/issues"
27
27
  },
28
+ "bin": {
29
+ "start-appium-inspector": "./bin/start-appium-inspector.js"
30
+ },
28
31
  "type": "module",
29
32
  "types": "./build/index.d.ts",
30
33
  "exports": {
31
34
  ".": {
32
35
  "import": "./build/index.js",
33
36
  "types": "./build/index.d.ts"
37
+ },
38
+ "./cli": {
39
+ "import": "./build/cli.js",
40
+ "importSource": "./src/cli.ts",
41
+ "types": "./build/cli.d.ts"
34
42
  }
35
43
  },
36
44
  "typeScriptVersion": "3.8.3",
37
45
  "dependencies": {
38
- "@wdio/config": "9.21.0",
46
+ "@wdio/config": "9.23.0",
39
47
  "@wdio/logger": "9.18.0",
40
48
  "@wdio/types": "9.20.0",
41
- "@wdio/utils": "9.21.0",
49
+ "@wdio/utils": "9.23.0",
42
50
  "change-case": "^5.4.3",
43
51
  "get-port": "^7.0.0",
44
52
  "import-meta-resolve": "^4.0.0",
45
53
  "tree-kill": "^1.2.2",
46
- "webdriverio": "9.21.0"
54
+ "webdriverio": "9.23.0"
47
55
  },
48
56
  "publishConfig": {
49
57
  "access": "public"
50
58
  },
51
- "gitHead": "cfbd795427524c3add91b2c980e6866477875332"
59
+ "gitHead": "5b35e4e2b94e3ac5247ec2bf27f2f5e41ef00372"
52
60
  }