appium-geckodriver 2.2.1 → 2.2.3

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/lib/gecko.ts CHANGED
@@ -1,4 +1,3 @@
1
- import _ from 'lodash';
2
1
  import os from 'node:os';
3
2
  import path from 'node:path';
4
3
  import {JWProxy, errors} from 'appium/driver';
@@ -24,20 +23,6 @@ export interface SessionOptions {
24
23
  reqBasePath?: string;
25
24
  }
26
25
 
27
- export class GeckoProxy extends JWProxy {
28
- didProcessExit?: boolean;
29
-
30
- override async proxyCommand(url: string, method: HTTPMethod, body: HTTPBody = null) {
31
- if (this.didProcessExit) {
32
- throw new errors.InvalidContextError(
33
- `'${method} ${url}' cannot be proxied to Gecko Driver server because ` +
34
- 'its process is not running (probably crashed). Check the Appium log for more details',
35
- );
36
- }
37
- return await super.proxyCommand(url, method, body);
38
- }
39
- }
40
-
41
26
  class GeckoDriverProcess {
42
27
  private readonly noReset?: boolean;
43
28
  private readonly verbosity?: string;
@@ -93,7 +78,7 @@ class GeckoDriverProcess {
93
78
  const driverBin = await this.resolveGeckodriverBinary();
94
79
  const args: string[] = [];
95
80
  /* #region Options */
96
- switch (_.toLower(this.verbosity)) {
81
+ switch (this.verbosity?.toLowerCase()) {
97
82
  case VERBOSITY.DEBUG:
98
83
  args.push('-v');
99
84
  break;
@@ -104,7 +89,7 @@ class GeckoDriverProcess {
104
89
  if (this.noReset) {
105
90
  args.push('--connect-existing');
106
91
  // https://firefox-source-docs.mozilla.org/testing/geckodriver/Flags.html#code-connect-existing-code
107
- if (_.isNil(this.marionettePort)) {
92
+ if (this.marionettePort == null) {
108
93
  this.log.info(
109
94
  `'marionettePort' capability value is not provided while 'noReset' is enabled`,
110
95
  );
@@ -113,7 +98,7 @@ class GeckoDriverProcess {
113
98
  );
114
99
  }
115
100
  args.push('--marionette-port', `${this.marionettePort ?? DEFAULT_MARIONETTE_PORT}`);
116
- } else if (!_.isNil(this.marionettePort)) {
101
+ } else if (this.marionettePort != null) {
117
102
  args.push('--marionette-port', `${this.marionettePort}`);
118
103
  }
119
104
  /* #endregion */
@@ -124,7 +109,7 @@ class GeckoDriverProcess {
124
109
  }
125
110
  this._proc = new SubProcess(driverBin, args);
126
111
  this._proc.on('output', (stdout, stderr) => {
127
- const line = _.trim(stdout || stderr);
112
+ const line = (stdout || stderr).trim();
128
113
  if (line) {
129
114
  this.log.debug(`[${GD_BINARY}] ${line}`);
130
115
  }
@@ -172,9 +157,31 @@ class GeckoDriverProcess {
172
157
  }
173
158
  }
174
159
 
160
+ export class GeckoProxy extends JWProxy {
161
+ didProcessExit?: boolean;
162
+
163
+ override async proxyCommand(url: string, method: HTTPMethod, body: HTTPBody = null) {
164
+ if (this.didProcessExit) {
165
+ throw new errors.InvalidContextError(
166
+ `'${method} ${url}' cannot be proxied to Gecko Driver server because ` +
167
+ 'its process is not running (probably crashed). Check the Appium log for more details',
168
+ );
169
+ }
170
+ return await super.proxyCommand(url, method, body);
171
+ }
172
+ }
173
+
175
174
  const RUNNING_PROCESS_IDS: (number | undefined)[] = [];
175
+ const removeRunningProcessId = (pid: number): void => {
176
+ let idx = RUNNING_PROCESS_IDS.indexOf(pid);
177
+ while (idx >= 0) {
178
+ RUNNING_PROCESS_IDS.splice(idx, 1);
179
+ idx = RUNNING_PROCESS_IDS.indexOf(pid);
180
+ }
181
+ };
182
+
176
183
  process.once('exit', () => {
177
- if (_.isEmpty(RUNNING_PROCESS_IDS)) {
184
+ if (RUNNING_PROCESS_IDS.length === 0) {
178
185
  return;
179
186
  }
180
187
 
@@ -266,7 +273,7 @@ export class GeckoDriverServer {
266
273
  const pid = this._process.proc?.pid;
267
274
  if (pid) {
268
275
  RUNNING_PROCESS_IDS.push(pid);
269
- this._process.proc?.on('exit', () => void _.pull(RUNNING_PROCESS_IDS, pid));
276
+ this._process.proc?.on('exit', () => removeRunningProcessId(pid));
270
277
  }
271
278
 
272
279
  return (await this._proxy.command('/session', 'POST', {
package/lib/utils.ts CHANGED
@@ -1,4 +1,3 @@
1
- import _ from 'lodash';
2
1
  import {fs, net, zip, tempDir} from 'appium/support';
3
2
  import tar from 'tar-stream';
4
3
  import zlib from 'node:zlib';
@@ -14,7 +13,7 @@ const GECKO_CAP_PREFIXES = ['moz:'] as const;
14
13
  */
15
14
  export function formatCapsForServer(caps: StringRecord): StringRecord {
16
15
  const result: StringRecord = {};
17
- for (const [name, value] of _.toPairs(caps)) {
16
+ for (const [name, value] of Object.entries(caps)) {
18
17
  if (
19
18
  GECKO_CAP_PREFIXES.some((prefix) => name.startsWith(prefix)) ||
20
19
  STANDARD_CAPS.has(name as any)
@@ -27,7 +26,7 @@ export function formatCapsForServer(caps: StringRecord): StringRecord {
27
26
  }
28
27
  if (result.platformName) {
29
28
  // Geckodriver only supports lowercase platform names
30
- result.platformName = _.toLower(result.platformName);
29
+ result.platformName = result.platformName.toLowerCase();
31
30
  }
32
31
  return result;
33
32
  }
@@ -50,7 +49,7 @@ export async function mkdirp(p: string): Promise<void> {
50
49
  * Extract a specific file from a tar.gz archive
51
50
  */
52
51
  export async function extractFileFromTarGz(
53
- srcAcrhive: string,
52
+ srcArchive: string,
54
53
  fileToExtract: string,
55
54
  dstPath: string,
56
55
  ): Promise<void> {
@@ -79,7 +78,7 @@ export async function extractFileFromTarGz(
79
78
  } else {
80
79
  return reject(
81
80
  new Error(
82
- `The file '${fileToExtract}' could not be found in the '${srcAcrhive}' archive`,
81
+ `The file '${fileToExtract}' could not be found in the '${srcArchive}' archive`,
83
82
  ),
84
83
  );
85
84
  }
@@ -87,7 +86,7 @@ export async function extractFileFromTarGz(
87
86
  });
88
87
  });
89
88
 
90
- fs.createReadStream(srcAcrhive).pipe(zlib.createGunzip()).pipe(extract);
89
+ fs.createReadStream(srcArchive).pipe(zlib.createGunzip()).pipe(extract);
91
90
 
92
91
  await extractPromise;
93
92
  }
@@ -96,12 +95,12 @@ export async function extractFileFromTarGz(
96
95
  * Extract a specific file from a zip archive
97
96
  */
98
97
  export async function extractFileFromZip(
99
- srcAcrhive: string,
98
+ srcArchive: string,
100
99
  fileToExtract: string,
101
100
  dstPath: string,
102
101
  ): Promise<void> {
103
102
  let didFindEntry = false;
104
- await zip.readEntries(srcAcrhive, async ({entry, extractEntryTo}) => {
103
+ await zip.readEntries(srcArchive, async ({entry, extractEntryTo}) => {
105
104
  if (didFindEntry || entry.fileName !== fileToExtract) {
106
105
  return;
107
106
  }
@@ -117,7 +116,7 @@ export async function extractFileFromZip(
117
116
  });
118
117
  if (!didFindEntry) {
119
118
  throw new Error(
120
- `The file '${fileToExtract}' could not be found in the '${srcAcrhive}' archive`,
119
+ `The file '${fileToExtract}' could not be found in the '${srcArchive}' archive`,
121
120
  );
122
121
  }
123
122
  }
@@ -1,19 +1,18 @@
1
1
  {
2
2
  "name": "appium-geckodriver",
3
- "version": "2.2.1",
3
+ "version": "2.2.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "appium-geckodriver",
9
- "version": "2.2.1",
9
+ "version": "2.2.3",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "appium-adb": "^14.0.0",
13
13
  "asyncbox": "^6.0.1",
14
14
  "axios": "^1.7.7",
15
15
  "bluebird": "^3.5.1",
16
- "lodash": "^4.17.4",
17
16
  "portscanner": "2.2.0",
18
17
  "semver": "^7.6.3",
19
18
  "tar-stream": "^3.1.7",
@@ -26,7 +25,6 @@
26
25
  "@semantic-release/changelog": "^6.0.1",
27
26
  "@semantic-release/git": "^10.0.1",
28
27
  "@types/bluebird": "^3.5.38",
29
- "@types/lodash": "^4.14.196",
30
28
  "@types/mocha": "^10.0.1",
31
29
  "@types/node": "^25.0.0",
32
30
  "chai": "^6.0.0",
@@ -48,14 +46,14 @@
48
46
  }
49
47
  },
50
48
  "node_modules/@appium/logger": {
51
- "version": "2.0.6",
52
- "resolved": "https://registry.npmjs.org/@appium/logger/-/logger-2.0.6.tgz",
53
- "integrity": "sha512-9e8n9CtINBwi1ASEU5OyswmR2F7OnbrGfmf9yTy9i+rx4GR9RJlEp0/arsxvuyWCep67tOmM4FiRyXxxHjOK5Q==",
49
+ "version": "2.0.7",
50
+ "resolved": "https://registry.npmjs.org/@appium/logger/-/logger-2.0.7.tgz",
51
+ "integrity": "sha512-WqagwYDZlPsSkICrXL9wB1E7qgErnwmYc/Q6NLVAC2ckXkWioh3fZ49AK5zevbJCnnkQbU2y8497Mk4xWDetkg==",
54
52
  "license": "ISC",
55
53
  "dependencies": {
56
54
  "console-control-strings": "1.1.0",
57
55
  "lodash": "4.18.1",
58
- "lru-cache": "11.3.3",
56
+ "lru-cache": "11.3.5",
59
57
  "set-blocking": "2.0.0"
60
58
  },
61
59
  "engines": {
@@ -77,14 +75,14 @@
77
75
  }
78
76
  },
79
77
  "node_modules/@appium/support": {
80
- "version": "7.1.0",
81
- "resolved": "https://registry.npmjs.org/@appium/support/-/support-7.1.0.tgz",
82
- "integrity": "sha512-kY4Qv4TzLCYmZnN2eNptEa8RiRzpbimIQ6tKuDaqLC2Y3q5Al4NumL/xRQAvfXJq/hNezq2Jh8NwciEW8zX/0g==",
78
+ "version": "7.1.1",
79
+ "resolved": "https://registry.npmjs.org/@appium/support/-/support-7.1.1.tgz",
80
+ "integrity": "sha512-WJewvoQxDOaVKjlvjVwifNDMQUVdCy0Edcxobl6I7pJzSE2O15Bi3BEq5AMzDpaXs7DtjZTLkHT29Tin9KHV3Q==",
83
81
  "license": "Apache-2.0",
84
82
  "dependencies": {
85
- "@appium/logger": "2.0.6",
83
+ "@appium/logger": "2.0.7",
86
84
  "@appium/tsconfig": "1.1.2",
87
- "@appium/types": "1.3.0",
85
+ "@appium/types": "1.3.1",
88
86
  "@colors/colors": "1.6.0",
89
87
  "archiver": "7.0.1",
90
88
  "asyncbox": "6.1.0",
@@ -111,9 +109,9 @@
111
109
  "semver": "7.7.4",
112
110
  "shell-quote": "1.8.3",
113
111
  "supports-color": "10.2.2",
114
- "teen_process": "4.1.0",
115
- "type-fest": "5.5.0",
116
- "uuid": "13.0.0",
112
+ "teen_process": "4.1.1",
113
+ "type-fest": "5.6.0",
114
+ "uuid": "14.0.0",
117
115
  "which": "6.0.1",
118
116
  "yauzl": "3.3.0"
119
117
  },
@@ -125,10 +123,34 @@
125
123
  "sharp": "0.34.5"
126
124
  }
127
125
  },
126
+ "node_modules/@appium/support/node_modules/asyncbox": {
127
+ "version": "6.1.0",
128
+ "resolved": "https://registry.npmjs.org/asyncbox/-/asyncbox-6.1.0.tgz",
129
+ "integrity": "sha512-KZwKNVnDdDe0ubN+fFMuHhSljZNHnbjdJABImoqFzQP61oIg6sMlhXIqOIu3WRd7YwW89q+eVj2Ty/Ax5dbh2Q==",
130
+ "license": "Apache-2.0",
131
+ "dependencies": {
132
+ "p-limit": "^7.2.0"
133
+ },
134
+ "engines": {
135
+ "node": "^20.19.0 || ^22.12.0 || >=24.0.0",
136
+ "npm": ">=10"
137
+ }
138
+ },
139
+ "node_modules/@appium/support/node_modules/axios": {
140
+ "version": "1.15.0",
141
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
142
+ "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
143
+ "license": "MIT",
144
+ "dependencies": {
145
+ "follow-redirects": "^1.15.11",
146
+ "form-data": "^4.0.5",
147
+ "proxy-from-env": "^2.1.0"
148
+ }
149
+ },
128
150
  "node_modules/@appium/support/node_modules/teen_process": {
129
- "version": "4.1.0",
130
- "resolved": "https://registry.npmjs.org/teen_process/-/teen_process-4.1.0.tgz",
131
- "integrity": "sha512-AN8y3MYPExB3r2mkkX9r0wEF4xPfhKOj6YvcfeIqQai+GVhTIhjjdkPvwI5CFT4z8UQ5aZWldzbJ+jNejYAdGw==",
151
+ "version": "4.1.1",
152
+ "resolved": "https://registry.npmjs.org/teen_process/-/teen_process-4.1.1.tgz",
153
+ "integrity": "sha512-E9gaYuVaWrvbxzZDgZ/MjWkPKqiKETBWSRy06qz1GOyKU22mI76JrxzaGbeddcHcmW8ZFXPowPv1ad3a7S+Xvg==",
132
154
  "license": "Apache-2.0",
133
155
  "dependencies": {
134
156
  "lodash": "^4.17.21",
@@ -153,15 +175,15 @@
153
175
  }
154
176
  },
155
177
  "node_modules/@appium/types": {
156
- "version": "1.3.0",
157
- "resolved": "https://registry.npmjs.org/@appium/types/-/types-1.3.0.tgz",
158
- "integrity": "sha512-Gv4ev/5K5N7TvAHqem2DmB50zipC951QlmCDpuxDNHQl2dtCr20vJgnN8if7upqLcBX/6yNp3udR+f1n99zgcQ==",
178
+ "version": "1.3.1",
179
+ "resolved": "https://registry.npmjs.org/@appium/types/-/types-1.3.1.tgz",
180
+ "integrity": "sha512-SWTntQ8EAI1m6P2LWqcqASGkRLk5HiKv2V2x7DSfknS8AsiF2ymr6T6oPJ7hUrTkEUA/3ncTSZji5Oq4h5TjzA==",
159
181
  "license": "Apache-2.0",
160
182
  "dependencies": {
161
- "@appium/logger": "2.0.6",
183
+ "@appium/logger": "2.0.7",
162
184
  "@appium/schema": "1.1.0",
163
185
  "@appium/tsconfig": "1.1.2",
164
- "type-fest": "5.5.0"
186
+ "type-fest": "5.6.0"
165
187
  },
166
188
  "engines": {
167
189
  "node": "^20.19.0 || ^22.12.0 || >=24.0.0",
@@ -201,9 +223,9 @@
201
223
  }
202
224
  },
203
225
  "node_modules/@emnapi/runtime": {
204
- "version": "1.9.2",
205
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz",
206
- "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==",
226
+ "version": "1.10.0",
227
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
228
+ "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
207
229
  "extraneous": true,
208
230
  "license": "MIT",
209
231
  "dependencies": {
@@ -377,9 +399,9 @@
377
399
  "license": "MIT"
378
400
  },
379
401
  "node_modules/@xmldom/xmldom": {
380
- "version": "0.8.12",
381
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.12.tgz",
382
- "integrity": "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==",
402
+ "version": "0.8.13",
403
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz",
404
+ "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==",
383
405
  "license": "MIT",
384
406
  "engines": {
385
407
  "node": ">=10.0.0"
@@ -425,15 +447,14 @@
425
447
  }
426
448
  },
427
449
  "node_modules/appium-adb": {
428
- "version": "14.3.2",
429
- "resolved": "https://registry.npmjs.org/appium-adb/-/appium-adb-14.3.2.tgz",
430
- "integrity": "sha512-V3YLPzHHG8vjw8oQ7d7sR6OvbadLIYwv5WYji3/YBrAe0NTRzhzj07e/m3XML+ipDOweZhKBebAclavdgkJWWg==",
450
+ "version": "14.3.4",
451
+ "resolved": "https://registry.npmjs.org/appium-adb/-/appium-adb-14.3.4.tgz",
452
+ "integrity": "sha512-vjxKXP4JIAEKAmKh4dQF1E434JV5cec03n8aUNP3t+TFdw43rVQxbvbQ0fZ0ztaVl9/qWJsWjp6UA6OMwyciLQ==",
431
453
  "license": "Apache-2.0",
432
454
  "dependencies": {
433
455
  "@appium/support": "^7.0.0-rc.1",
434
456
  "async-lock": "^1.0.0",
435
457
  "asyncbox": "^6.0.1",
436
- "bluebird": "^3.4.7",
437
458
  "ini": "^6.0.0",
438
459
  "lodash": "^4.0.0",
439
460
  "lru-cache": "^11.1.0",
@@ -482,9 +503,9 @@
482
503
  }
483
504
  },
484
505
  "node_modules/archiver-utils/node_modules/brace-expansion": {
485
- "version": "2.0.3",
486
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
487
- "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
506
+ "version": "2.1.0",
507
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz",
508
+ "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==",
488
509
  "license": "MIT",
489
510
  "dependencies": {
490
511
  "balanced-match": "^1.0.0"
@@ -568,9 +589,9 @@
568
589
  "license": "MIT"
569
590
  },
570
591
  "node_modules/asyncbox": {
571
- "version": "6.1.0",
572
- "resolved": "https://registry.npmjs.org/asyncbox/-/asyncbox-6.1.0.tgz",
573
- "integrity": "sha512-KZwKNVnDdDe0ubN+fFMuHhSljZNHnbjdJABImoqFzQP61oIg6sMlhXIqOIu3WRd7YwW89q+eVj2Ty/Ax5dbh2Q==",
592
+ "version": "6.2.0",
593
+ "resolved": "https://registry.npmjs.org/asyncbox/-/asyncbox-6.2.0.tgz",
594
+ "integrity": "sha512-z1XpHkoT3y+1aXfazEY5d7HN2eOi50fLq7ZTxG0H4WegLxrtEAI5Vsc6OR9dOwoC3SJQLXyV0ZVnPEh6GIgMKQ==",
574
595
  "license": "Apache-2.0",
575
596
  "dependencies": {
576
597
  "p-limit": "^7.2.0"
@@ -587,20 +608,20 @@
587
608
  "license": "MIT"
588
609
  },
589
610
  "node_modules/axios": {
590
- "version": "1.15.0",
591
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
592
- "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
611
+ "version": "1.16.0",
612
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz",
613
+ "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==",
593
614
  "license": "MIT",
594
615
  "dependencies": {
595
- "follow-redirects": "^1.15.11",
616
+ "follow-redirects": "^1.16.0",
596
617
  "form-data": "^4.0.5",
597
618
  "proxy-from-env": "^2.1.0"
598
619
  }
599
620
  },
600
621
  "node_modules/b4a": {
601
- "version": "1.8.0",
602
- "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz",
603
- "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==",
622
+ "version": "1.8.1",
623
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz",
624
+ "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==",
604
625
  "license": "Apache-2.0",
605
626
  "peerDependencies": {
606
627
  "react-native-b4a": "*"
@@ -632,9 +653,9 @@
632
653
  }
633
654
  },
634
655
  "node_modules/bare-fs": {
635
- "version": "4.7.0",
636
- "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.0.tgz",
637
- "integrity": "sha512-xzqKsCFxAek9aezYhjJuJRXBIaYlg/0OGDTZp+T8eYmYMlm66cs6cYko02drIyjN2CBbi+I6L7YfXyqpqtKRXA==",
656
+ "version": "4.7.1",
657
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.1.tgz",
658
+ "integrity": "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==",
638
659
  "license": "Apache-2.0",
639
660
  "dependencies": {
640
661
  "bare-events": "^2.5.4",
@@ -656,9 +677,9 @@
656
677
  }
657
678
  },
658
679
  "node_modules/bare-os": {
659
- "version": "3.8.7",
660
- "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.8.7.tgz",
661
- "integrity": "sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==",
680
+ "version": "3.9.1",
681
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.1.tgz",
682
+ "integrity": "sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==",
662
683
  "license": "Apache-2.0",
663
684
  "engines": {
664
685
  "bare": ">=1.14.0"
@@ -674,9 +695,9 @@
674
695
  }
675
696
  },
676
697
  "node_modules/bare-stream": {
677
- "version": "2.12.0",
678
- "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.12.0.tgz",
679
- "integrity": "sha512-w28i8lkBgREV3rPXGbgK+BO66q+ZpKqRWrZLiCdmmUlLPrQ45CzkvRhN+7lnv00Gpi2zy5naRxnUFAxCECDm9g==",
698
+ "version": "2.13.1",
699
+ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.1.tgz",
700
+ "integrity": "sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==",
680
701
  "license": "Apache-2.0",
681
702
  "dependencies": {
682
703
  "streamx": "^2.25.0",
@@ -700,9 +721,9 @@
700
721
  }
701
722
  },
702
723
  "node_modules/bare-url": {
703
- "version": "2.4.0",
704
- "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.0.tgz",
705
- "integrity": "sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==",
724
+ "version": "2.4.2",
725
+ "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.2.tgz",
726
+ "integrity": "sha512-/9a2j4ac6ckpmAHvod/ob7x439OAHst/drc2Clnq+reRYd/ovddwcF4LfoxHyNk5AuGBnPg+HqFjmE/Zpq6v0A==",
706
727
  "license": "Apache-2.0",
707
728
  "dependencies": {
708
729
  "bare-path": "^3.0.0"
@@ -1176,9 +1197,9 @@
1176
1197
  }
1177
1198
  },
1178
1199
  "node_modules/follow-redirects": {
1179
- "version": "1.15.11",
1180
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
1181
- "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
1200
+ "version": "1.16.0",
1201
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
1202
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
1182
1203
  "funding": [
1183
1204
  {
1184
1205
  "type": "individual",
@@ -1501,9 +1522,9 @@
1501
1522
  }
1502
1523
  },
1503
1524
  "node_modules/hasown": {
1504
- "version": "2.0.2",
1505
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
1506
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
1525
+ "version": "2.0.3",
1526
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz",
1527
+ "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
1507
1528
  "license": "MIT",
1508
1529
  "dependencies": {
1509
1530
  "function-bind": "^1.1.2"
@@ -1513,9 +1534,9 @@
1513
1534
  }
1514
1535
  },
1515
1536
  "node_modules/hosted-git-info": {
1516
- "version": "9.0.2",
1517
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz",
1518
- "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==",
1537
+ "version": "9.0.3",
1538
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.3.tgz",
1539
+ "integrity": "sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==",
1519
1540
  "license": "ISC",
1520
1541
  "dependencies": {
1521
1542
  "lru-cache": "^11.1.0"
@@ -1764,9 +1785,9 @@
1764
1785
  }
1765
1786
  },
1766
1787
  "node_modules/lru-cache": {
1767
- "version": "11.3.3",
1768
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.3.tgz",
1769
- "integrity": "sha512-JvNw9Y81y33E+BEYPr0U7omo+U9AySnsMsEiXgwT6yqd31VQWTLNQqmT4ou5eqPFUrTfIDFta2wKhB1hyohtAQ==",
1788
+ "version": "11.3.5",
1789
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz",
1790
+ "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==",
1770
1791
  "license": "BlueOak-1.0.0",
1771
1792
  "engines": {
1772
1793
  "node": "20 || >=22"
@@ -2112,9 +2133,9 @@
2112
2133
  }
2113
2134
  },
2114
2135
  "node_modules/readdir-glob/node_modules/brace-expansion": {
2115
- "version": "2.0.3",
2116
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
2117
- "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
2136
+ "version": "2.1.0",
2137
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz",
2138
+ "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==",
2118
2139
  "license": "MIT",
2119
2140
  "dependencies": {
2120
2141
  "balanced-match": "^1.0.0"
@@ -2275,13 +2296,7 @@
2275
2296
  "spdx-license-ids": "^3.0.0"
2276
2297
  }
2277
2298
  },
2278
- "node_modules/spdx-exceptions": {
2279
- "version": "2.5.0",
2280
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
2281
- "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
2282
- "license": "CC-BY-3.0"
2283
- },
2284
- "node_modules/spdx-expression-parse": {
2299
+ "node_modules/spdx-correct/node_modules/spdx-expression-parse": {
2285
2300
  "version": "3.0.1",
2286
2301
  "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
2287
2302
  "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
@@ -2291,6 +2306,12 @@
2291
2306
  "spdx-license-ids": "^3.0.0"
2292
2307
  }
2293
2308
  },
2309
+ "node_modules/spdx-exceptions": {
2310
+ "version": "2.5.0",
2311
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
2312
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
2313
+ "license": "CC-BY-3.0"
2314
+ },
2294
2315
  "node_modules/spdx-license-ids": {
2295
2316
  "version": "3.0.23",
2296
2317
  "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz",
@@ -2453,9 +2474,9 @@
2453
2474
  }
2454
2475
  },
2455
2476
  "node_modules/tar-stream": {
2456
- "version": "3.1.8",
2457
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz",
2458
- "integrity": "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==",
2477
+ "version": "3.2.0",
2478
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.2.0.tgz",
2479
+ "integrity": "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==",
2459
2480
  "license": "MIT",
2460
2481
  "dependencies": {
2461
2482
  "b4a": "^1.6.4",
@@ -2465,9 +2486,9 @@
2465
2486
  }
2466
2487
  },
2467
2488
  "node_modules/teen_process": {
2468
- "version": "4.1.1",
2469
- "resolved": "https://registry.npmjs.org/teen_process/-/teen_process-4.1.1.tgz",
2470
- "integrity": "sha512-E9gaYuVaWrvbxzZDgZ/MjWkPKqiKETBWSRy06qz1GOyKU22mI76JrxzaGbeddcHcmW8ZFXPowPv1ad3a7S+Xvg==",
2489
+ "version": "4.1.2",
2490
+ "resolved": "https://registry.npmjs.org/teen_process/-/teen_process-4.1.2.tgz",
2491
+ "integrity": "sha512-MLmWBU1vLjzYuz0BMWtEnriZl9ikFiCQWUKTmVIhnOErJ7jlHOIUEaqrPFGr0lCMxN6hhUl5pPGc3ya7Huj3jA==",
2471
2492
  "license": "Apache-2.0",
2472
2493
  "dependencies": {
2473
2494
  "lodash": "^4.17.21",
@@ -2519,9 +2540,9 @@
2519
2540
  "license": "0BSD"
2520
2541
  },
2521
2542
  "node_modules/type-fest": {
2522
- "version": "5.5.0",
2523
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz",
2524
- "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==",
2543
+ "version": "5.6.0",
2544
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz",
2545
+ "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==",
2525
2546
  "license": "(MIT OR CC0-1.0)",
2526
2547
  "dependencies": {
2527
2548
  "tagged-tag": "^1.0.0"
@@ -2567,9 +2588,9 @@
2567
2588
  "license": "MIT"
2568
2589
  },
2569
2590
  "node_modules/uuid": {
2570
- "version": "13.0.0",
2571
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz",
2572
- "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==",
2591
+ "version": "14.0.0",
2592
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz",
2593
+ "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==",
2573
2594
  "funding": [
2574
2595
  "https://github.com/sponsors/broofa",
2575
2596
  "https://github.com/sponsors/ctavan"
@@ -2589,6 +2610,16 @@
2589
2610
  "spdx-expression-parse": "^3.0.0"
2590
2611
  }
2591
2612
  },
2613
+ "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": {
2614
+ "version": "3.0.1",
2615
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
2616
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
2617
+ "license": "MIT",
2618
+ "dependencies": {
2619
+ "spdx-exceptions": "^2.1.0",
2620
+ "spdx-license-ids": "^3.0.0"
2621
+ }
2622
+ },
2592
2623
  "node_modules/which": {
2593
2624
  "version": "6.0.1",
2594
2625
  "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz",
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "seamonkey",
8
8
  "firefox"
9
9
  ],
10
- "version": "2.2.1",
10
+ "version": "2.2.3",
11
11
  "author": "Appium Contributors",
12
12
  "license": "Apache-2.0",
13
13
  "repository": {
@@ -62,7 +62,6 @@
62
62
  "asyncbox": "^6.0.1",
63
63
  "axios": "^1.7.7",
64
64
  "bluebird": "^3.5.1",
65
- "lodash": "^4.17.4",
66
65
  "portscanner": "2.2.0",
67
66
  "semver": "^7.6.3",
68
67
  "tar-stream": "^3.1.7",
@@ -88,7 +87,6 @@
88
87
  "@semantic-release/changelog": "^6.0.1",
89
88
  "@semantic-release/git": "^10.0.1",
90
89
  "@types/bluebird": "^3.5.38",
91
- "@types/lodash": "^4.14.196",
92
90
  "@types/mocha": "^10.0.1",
93
91
  "@types/node": "^25.0.0",
94
92
  "chai": "^6.0.0",