appium 3.1.2 → 3.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.
Files changed (44) hide show
  1. package/build/lib/bidi-commands.d.ts.map +1 -1
  2. package/build/lib/bidi-commands.js.map +1 -1
  3. package/build/lib/cli/extension-command.d.ts +109 -0
  4. package/build/lib/cli/extension-command.d.ts.map +1 -1
  5. package/build/lib/cli/extension-command.js +251 -89
  6. package/build/lib/cli/extension-command.js.map +1 -1
  7. package/build/lib/cli/parser.js +2 -2
  8. package/build/lib/cli/parser.js.map +1 -1
  9. package/build/lib/constants.js +3 -3
  10. package/build/lib/constants.js.map +1 -1
  11. package/build/lib/extension/extension-config.js +7 -7
  12. package/build/lib/extension/extension-config.js.map +1 -1
  13. package/build/lib/extension/manifest.js +6 -6
  14. package/build/lib/extension/manifest.js.map +1 -1
  15. package/build/lib/extension/package-changed.js +3 -3
  16. package/build/lib/extension/package-changed.js.map +1 -1
  17. package/build/lib/main.d.ts.map +1 -1
  18. package/build/lib/main.js +9 -2
  19. package/build/lib/main.js.map +1 -1
  20. package/build/lib/schema/cli-transformers.js +5 -5
  21. package/build/lib/schema/cli-transformers.js.map +1 -1
  22. package/build/lib/schema/schema.js +2 -2
  23. package/build/lib/schema/schema.js.map +1 -1
  24. package/build/lib/utils.d.ts +1 -1
  25. package/build/lib/utils.d.ts.map +1 -1
  26. package/build/lib/utils.js +8 -8
  27. package/build/lib/utils.js.map +1 -1
  28. package/build/types/cli.d.ts.map +1 -1
  29. package/index.js +1 -3
  30. package/lib/bidi-commands.ts +2 -2
  31. package/lib/cli/extension-command.js +274 -98
  32. package/lib/cli/parser.js +1 -1
  33. package/lib/constants.js +1 -1
  34. package/lib/extension/extension-config.js +2 -2
  35. package/lib/extension/manifest.js +1 -1
  36. package/lib/extension/package-changed.js +1 -1
  37. package/lib/main.js +10 -2
  38. package/lib/schema/cli-transformers.js +1 -1
  39. package/lib/schema/schema.js +1 -1
  40. package/lib/utils.js +3 -3
  41. package/package.json +18 -20
  42. package/scripts/autoinstall-extensions.js +7 -10
  43. package/types/cli.ts +1 -1
  44. package/LICENSE +0 -201
@@ -22,9 +22,9 @@ exports.isBroadcastIp = isBroadcastIp;
22
22
  const lodash_1 = __importDefault(require("lodash"));
23
23
  const logger_1 = __importDefault(require("./logger"));
24
24
  const base_driver_1 = require("@appium/base-driver");
25
- const util_1 = require("util");
25
+ const node_util_1 = require("node:util");
26
26
  const support_1 = require("@appium/support");
27
- const path_1 = __importDefault(require("path"));
27
+ const node_path_1 = __importDefault(require("node:path"));
28
28
  const constants_1 = require("./constants");
29
29
  const node_os_1 = __importDefault(require("node:os"));
30
30
  const W3C_APPIUM_PREFIX = 'appium';
@@ -55,7 +55,7 @@ function makeNonW3cCapsError() {
55
55
  * @todo May want to force color to be `false` if {@link isStdoutTTY} is `false`.
56
56
  */
57
57
  exports.inspect = lodash_1.default.flow(lodash_1.default.partialRight(
58
- /** @type {(object: any, options: import('util').InspectOptions) => string} */ (util_1.inspect), { colors: true, depth: null, compact: !isStdoutTTY }), (...args) => {
58
+ /** @type {(object: any, options: import('util').InspectOptions) => string} */ (node_util_1.inspect), { colors: true, depth: null, compact: !isStdoutTTY }), (...args) => {
59
59
  logger_1.default.info(...args);
60
60
  });
61
61
  /**
@@ -195,7 +195,7 @@ exports.getAppiumModuleRoot = lodash_1.default.memoize(function getAppiumModuleR
195
195
  function adjustNodePath() {
196
196
  let appiumModuleSearchRoot;
197
197
  try {
198
- appiumModuleSearchRoot = path_1.default.dirname((0, exports.getAppiumModuleRoot)());
198
+ appiumModuleSearchRoot = node_path_1.default.dirname((0, exports.getAppiumModuleRoot)());
199
199
  }
200
200
  catch (error) {
201
201
  logger_1.default.warn(error.message);
@@ -208,7 +208,7 @@ function adjustNodePath() {
208
208
  // ! so it could break (maybe, eventually).
209
209
  // See https://gist.github.com/branneman/8048520#7-the-hack
210
210
  // @ts-ignore see above comment
211
- require('module').Module._initPaths();
211
+ require('node:module').Module._initPaths();
212
212
  return true;
213
213
  }
214
214
  catch {
@@ -225,18 +225,18 @@ function adjustNodePath() {
225
225
  }
226
226
  return;
227
227
  }
228
- const nodePathParts = process.env.NODE_PATH.split(path_1.default.delimiter);
228
+ const nodePathParts = process.env.NODE_PATH.split(node_path_1.default.delimiter);
229
229
  if (nodePathParts.includes(appiumModuleSearchRoot)) {
230
230
  process.env.APPIUM_OMIT_PEER_DEPS = '1';
231
231
  return;
232
232
  }
233
233
  nodePathParts.push(appiumModuleSearchRoot);
234
- process.env.NODE_PATH = nodePathParts.join(path_1.default.delimiter);
234
+ process.env.NODE_PATH = nodePathParts.join(node_path_1.default.delimiter);
235
235
  if (refreshRequirePaths()) {
236
236
  process.env.APPIUM_OMIT_PEER_DEPS = '1';
237
237
  }
238
238
  else {
239
- process.env.NODE_PATH = lodash_1.default.without(nodePathParts, appiumModuleSearchRoot).join(path_1.default.delimiter);
239
+ process.env.NODE_PATH = lodash_1.default.without(nodePathParts, appiumModuleSearchRoot).join(node_path_1.default.delimiter);
240
240
  }
241
241
  }
242
242
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../types/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../types/cli.ts"],"names":[],"mappings":"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"}
package/index.js CHANGED
@@ -1,11 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- const {asyncify} = require('asyncbox');
4
-
5
3
  const appium = require('./build/lib/main.js');
6
4
 
7
5
  if (require.main === module) {
8
- asyncify(appium.main);
6
+ appium.main();
9
7
  }
10
8
 
11
9
  module.exports = appium;
@@ -23,7 +23,7 @@ import type {
23
23
  BiDiResultData
24
24
  } from '@appium/types';
25
25
 
26
- type ExtensionPlugin = Plugin & ExtensionCore
26
+ type ExtensionPlugin = Plugin & ExtensionCore;
27
27
  type AnyDriver = ExternalDriver | AppiumDriver;
28
28
  type SendData = (data: string | Buffer) => Promise<void>;
29
29
  type LogSocketError = (err: Error) => void;
@@ -448,7 +448,7 @@ function initBidiEventListeners(
448
448
  // sure the client is subscribed and then pass it on
449
449
  const eventLogCounts: Record<string, number> = BIDI_EVENTS_MAP.get(bidiHandlerDriver) ?? {};
450
450
  BIDI_EVENTS_MAP.set(bidiHandlerDriver, eventLogCounts);
451
- const eventListenerFactory = (extType: 'driver'|'plugin', ext: ExtensionCore) => {
451
+ const eventListenerFactory = (extType: 'driver' | 'plugin', ext: ExtensionCore) => {
452
452
  const eventListener = async ({context, method, params = {}}) => {
453
453
  // if the driver didn't specify a context, use the empty context
454
454
  if (!context) {
@@ -1,6 +1,6 @@
1
1
  import B from 'bluebird';
2
2
  import _ from 'lodash';
3
- import path from 'path';
3
+ import path from 'node:path';
4
4
  import {npm, util, env, console, fs, system} from '@appium/support';
5
5
  import {spinWith, RingBuffer} from './utils';
6
6
  import {
@@ -12,14 +12,15 @@ import {
12
12
  } from '../extension/extension-config';
13
13
  import {SubProcess} from 'teen_process';
14
14
  import {packageDidChange} from '../extension/package-changed';
15
- import {spawn} from 'child_process';
15
+ import {spawn} from 'node:child_process';
16
16
  import {inspect} from 'node:util';
17
- import {pathToFileURL} from 'url';
17
+ import {pathToFileURL} from 'node:url';
18
18
  import {Doctor, EXIT_CODE as DOCTOR_EXIT_CODE} from '../doctor/doctor';
19
19
  import {getAppiumModuleRoot, npmPackage} from '../utils';
20
20
  import * as semver from 'semver';
21
21
 
22
22
  const UPDATE_ALL = 'installed';
23
+ const MAX_CONCURRENT_REPO_FETCHES = 5;
23
24
 
24
25
  class NotUpdatableError extends Error {}
25
26
  class NoUpdatesAvailableError extends Error {}
@@ -96,6 +97,7 @@ class ExtensionCliCommand {
96
97
  * For TS to understand that a function throws an exception, it must actually throw an exception--
97
98
  * in other words, _calling_ a function which is guaranteed to throw an exception is not enough--
98
99
  * nor is something like `@returns {never}` which does not imply a thrown exception.
100
+ *
99
101
  * @param {string} message
100
102
  * @protected
101
103
  * @throws {Error}
@@ -121,18 +123,45 @@ class ExtensionCliCommand {
121
123
 
122
124
  /**
123
125
  * List extensions
126
+ *
124
127
  * @template {ExtensionType} ExtType
125
128
  * @param {ListOptions} opts
126
129
  * @return {Promise<ExtensionList<ExtType>>} map of extension names to extension data
127
130
  */
128
131
  async list({showInstalled, showUpdates, verbose = false}) {
129
- let lsMsg = `Listing ${showInstalled ? 'installed' : 'available'} ${this.type}s`;
132
+ const listData = this._buildListData(showInstalled);
133
+
134
+ const lsMsg =
135
+ `Listing ${showInstalled ? 'installed' : 'available'} ${this.type}s` +
136
+ (verbose ? ' (verbose mode)' : ' (rerun with --verbose for more info)');
137
+ await this._checkForUpdates(listData, showUpdates, lsMsg);
138
+
139
+ if (this.isJsonOutput) {
140
+ await this._addRepositoryUrlsToListData(listData);
141
+ return listData;
142
+ }
143
+
130
144
  if (verbose) {
131
- lsMsg += ' (verbose mode)';
145
+ await this._addRepositoryUrlsToListData(listData);
146
+ this.log.log(inspect(listData, {colors: true, depth: null}));
147
+ return listData;
132
148
  }
149
+
150
+ return await this._displayNormalListOutput(listData, showUpdates);
151
+ }
152
+
153
+ /**
154
+ * Build the initial list data structure from installed and known extensions
155
+ *
156
+ * @template {ExtensionType} ExtType
157
+ * @param {boolean} showInstalled
158
+ * @returns {ExtensionList<ExtType>}
159
+ * @private
160
+ */
161
+ _buildListData(showInstalled) {
133
162
  const installedNames = Object.keys(this.config.installedExtensions);
134
163
  const knownNames = Object.keys(this.knownExtensions);
135
- const listData = [...installedNames, ...knownNames].reduce((acc, name) => {
164
+ return [...installedNames, ...knownNames].reduce((acc, name) => {
136
165
  if (!acc[name]) {
137
166
  if (installedNames.includes(name)) {
138
167
  acc[name] = {
@@ -148,99 +177,233 @@ class ExtensionCliCommand {
148
177
  }
149
178
  return acc;
150
179
  }, /** @type {ExtensionList<ExtType>} */ ({}));
180
+ }
151
181
 
152
- // if we want to show whether updates are available, put that behind a spinner
182
+ /**
183
+ * Check for available updates for installed extensions
184
+ *
185
+ * @template {ExtensionType} ExtType
186
+ * @param {ExtensionList<ExtType>} listData
187
+ * @param {boolean} showUpdates
188
+ * @param {string} lsMsg
189
+ * @returns {Promise<void>}
190
+ * @private
191
+ */
192
+ async _checkForUpdates(listData, showUpdates, lsMsg) {
153
193
  await spinWith(this.isJsonOutput, lsMsg, async () => {
194
+ // We'd like to still show lsMsg even if showUpdates is false
154
195
  if (!showUpdates) {
155
196
  return;
156
197
  }
157
- for (const [ext, data] of _.toPairs(listData)) {
158
- if (!data.installed || data.installType !== INSTALL_TYPE_NPM) {
159
- // don't need to check for updates on exts that aren't installed
160
- // also don't need to check for updates on non-npm exts
161
- continue;
162
- }
163
- try {
164
- const updates = await this.checkForExtensionUpdate(ext);
165
- data.updateVersion = updates.safeUpdate;
166
- data.unsafeUpdateVersion = updates.unsafeUpdate;
167
- data.upToDate = updates.safeUpdate === null && updates.unsafeUpdate === null;
168
- } catch (e) {
169
- data.updateError = e.message;
170
- }
171
- }
198
+
199
+ // Filter to only extensions that need update checks (installed npm packages)
200
+ const extensionsToCheck = _.toPairs(listData).filter(
201
+ ([, data]) => data.installed && data.installType === INSTALL_TYPE_NPM
202
+ );
203
+
204
+ await B.map(
205
+ extensionsToCheck,
206
+ async ([ext, data]) => {
207
+ try {
208
+ const updates = await this.checkForExtensionUpdate(ext);
209
+ data.updateVersion = updates.safeUpdate;
210
+ data.unsafeUpdateVersion = updates.unsafeUpdate;
211
+ data.upToDate = updates.safeUpdate === null && updates.unsafeUpdate === null;
212
+ } catch (e) {
213
+ data.updateError = e.message;
214
+ }
215
+ },
216
+ {concurrency: MAX_CONCURRENT_REPO_FETCHES}
217
+ );
172
218
  });
219
+ }
173
220
 
174
- /**
175
- * Type guard to narrow "installed" extensions, which have more data
176
- * @param {any} data
177
- * @returns {data is InstalledExtensionListData<ExtType>}
178
- */
179
- const extIsInstalled = (data) => Boolean(data.installed);
221
+ /**
222
+ * Add repository URLs to list data for all extensions
223
+ *
224
+ * @template {ExtensionType} ExtType
225
+ * @param {ExtensionList<ExtType>} listData
226
+ * @returns {Promise<void>}
227
+ * @private
228
+ */
229
+ async _addRepositoryUrlsToListData(listData) {
230
+ await spinWith(this.isJsonOutput, 'Fetching repository information', async () => {
231
+ await B.map(
232
+ _.values(listData),
233
+ async (data) => {
234
+ const repoUrl = await this._getRepositoryUrl(data);
235
+ if (repoUrl) {
236
+ data.repositoryUrl = repoUrl;
237
+ }
238
+ },
239
+ {concurrency: MAX_CONCURRENT_REPO_FETCHES}
240
+ );
241
+ });
242
+ }
180
243
 
181
- // if we're just getting the data, short circuit return here since we don't need to do any
182
- // formatting logic
183
- if (this.isJsonOutput) {
184
- return listData;
244
+ /**
245
+ * Display normal formatted output
246
+ *
247
+ * @template {ExtensionType} ExtType
248
+ * @param {ExtensionList<ExtType>} listData
249
+ * @param {boolean} showUpdates
250
+ * @returns {Promise<ExtensionList<ExtType>>}
251
+ * @private
252
+ */
253
+ async _displayNormalListOutput(listData, showUpdates) {
254
+ for (const [name, data] of _.toPairs(listData)) {
255
+ const line = await this._formatExtensionLine(name, data, showUpdates);
256
+ this.log.log(line);
185
257
  }
186
258
 
187
- if (verbose) {
188
- this.log.log(inspect(listData, {colors: true, depth: null}));
189
- return listData;
259
+ return listData;
260
+ }
261
+
262
+ /**
263
+ * Format a single extension line for display
264
+ *
265
+ * @template {ExtensionType} ExtType
266
+ * @param {string} name
267
+ * @param {ExtensionListData<ExtType>} data
268
+ * @param {boolean} showUpdates
269
+ * @returns {Promise<string>}
270
+ * @private
271
+ */
272
+ async _formatExtensionLine(name, data, showUpdates) {
273
+ if (data.installed) {
274
+ const installTxt = this._formatInstallText(/** @type {InstalledExtensionListData<ExtType>} */ (data));
275
+ const updateTxt = showUpdates ? this._formatUpdateText(/** @type {InstalledExtensionListData<ExtType>} */ (data)) : '';
276
+ return `- ${name.yellow}${installTxt}${updateTxt}`;
190
277
  }
191
- for (const [name, data] of _.toPairs(listData)) {
192
- let installTxt = ' [not installed]'.grey;
193
- let updateTxt = '';
194
- let upToDateTxt = '';
195
- let unsafeUpdateTxt = '';
196
- if (extIsInstalled(data)) {
197
- const {
198
- installType,
199
- installSpec,
200
- updateVersion,
201
- unsafeUpdateVersion,
202
- version,
203
- upToDate,
204
- updateError,
205
- } = data;
206
- let typeTxt;
207
- switch (installType) {
208
- case INSTALL_TYPE_GIT:
209
- case INSTALL_TYPE_GITHUB:
210
- typeTxt = `(cloned from ${installSpec})`.yellow;
211
- break;
212
- case INSTALL_TYPE_LOCAL:
213
- typeTxt = `(linked from ${installSpec})`.magenta;
214
- break;
215
- case INSTALL_TYPE_DEV:
216
- typeTxt = '(dev mode)';
217
- break;
218
- default:
219
- typeTxt = '(npm)';
220
- }
221
- installTxt = `@${version.yellow} ${('[installed ' + typeTxt + ']').green}`;
222
-
223
- if (showUpdates) {
224
- if (updateError) {
225
- updateTxt = ` [Cannot check for updates: ${updateError}]`.red;
226
- } else {
227
- if (updateVersion) {
228
- updateTxt = ` [${updateVersion} available]`.magenta;
229
- }
230
- if (upToDate) {
231
- upToDateTxt = ` [Up to date]`.green;
232
- }
233
- if (unsafeUpdateVersion) {
234
- unsafeUpdateTxt = ` [${unsafeUpdateVersion} available (potentially unsafe)]`.cyan;
235
- }
278
+ const installTxt = ' [not installed]'.grey;
279
+ return `- ${name.yellow}${installTxt}`;
280
+ }
281
+
282
+ /**
283
+ * Format installation status text
284
+ *
285
+ * @template {ExtensionType} ExtType
286
+ * @param {InstalledExtensionListData<ExtType>} data
287
+ * @returns {string}
288
+ * @private
289
+ */
290
+ _formatInstallText(data) {
291
+ const {installType, installSpec, version} = data;
292
+ let typeTxt;
293
+ switch (installType) {
294
+ case INSTALL_TYPE_GIT:
295
+ case INSTALL_TYPE_GITHUB:
296
+ typeTxt = `(cloned from ${installSpec})`.yellow;
297
+ break;
298
+ case INSTALL_TYPE_LOCAL:
299
+ typeTxt = `(linked from ${installSpec})`.magenta;
300
+ break;
301
+ case INSTALL_TYPE_DEV:
302
+ typeTxt = '(dev mode)';
303
+ break;
304
+ default:
305
+ typeTxt = '(npm)';
306
+ }
307
+ return `@${version.yellow} ${('[installed ' + typeTxt + ']').green}`;
308
+ }
309
+
310
+ /**
311
+ * Format update information text
312
+ *
313
+ * @template {ExtensionType} ExtType
314
+ * @param {InstalledExtensionListData<ExtType>} data
315
+ * @returns {string}
316
+ * @private
317
+ */
318
+ _formatUpdateText(data) {
319
+ const {updateVersion, unsafeUpdateVersion, upToDate, updateError} = data;
320
+ if (updateError) {
321
+ return ` [Cannot check for updates: ${updateError}]`.red;
322
+ }
323
+ let txt = '';
324
+ if (updateVersion) {
325
+ txt += ` [${updateVersion} available]`.magenta;
326
+ }
327
+ if (upToDate) {
328
+ txt += ` [Up to date]`.green;
329
+ }
330
+ if (unsafeUpdateVersion) {
331
+ txt += ` [${unsafeUpdateVersion} available (potentially unsafe)]`.cyan;
332
+ }
333
+ return txt;
334
+ }
335
+
336
+ /**
337
+ * Get repository URL from package data
338
+ *
339
+ * @template {ExtensionType} ExtType
340
+ * @param {ExtensionListData<ExtType>} data
341
+ * @returns {Promise<string|null>}
342
+ * @private
343
+ */
344
+ async _getRepositoryUrl(data) {
345
+ if (data.installed && data.installPath) {
346
+ return await this._getRepositoryUrlFromInstalled(
347
+ /** @type {InstalledExtensionListData<ExtType>} */ (data)
348
+ );
349
+ }
350
+ if (data.pkgName && !data.installed) {
351
+ return await this._getRepositoryUrlFromNpm(data.pkgName);
352
+ }
353
+ return null;
354
+ }
355
+
356
+ /**
357
+ * Get repository URL from installed extension's package.json
358
+ *
359
+ * @template {ExtensionType} ExtType
360
+ * @param {InstalledExtensionListData<ExtType>} data
361
+ * @returns {Promise<string|null>}
362
+ * @private
363
+ */
364
+ async _getRepositoryUrlFromInstalled(data) {
365
+ try {
366
+ const pkgJsonPath = path.join(data.installPath, 'package.json');
367
+ if (await fs.exists(pkgJsonPath)) {
368
+ const pkg = JSON.parse(await fs.readFile(pkgJsonPath, 'utf8'));
369
+ if (pkg.repository) {
370
+ if (typeof pkg.repository === 'string') {
371
+ return pkg.repository;
372
+ }
373
+ if (pkg.repository.url) {
374
+ return pkg.repository.url.replace(/^git\+/, '').replace(/\.git$/, '');
236
375
  }
237
376
  }
238
377
  }
239
-
240
- this.log.log(`- ${name.yellow}${installTxt}${updateTxt}${upToDateTxt}${unsafeUpdateTxt}`);
378
+ } catch {
379
+ // Ignore errors reading package.json
241
380
  }
381
+ return null;
382
+ }
242
383
 
243
- return listData;
384
+ /**
385
+ * Get repository URL from npm for a package name
386
+ *
387
+ * @param {string} pkgName
388
+ * @returns {Promise<string|null>}
389
+ * @private
390
+ */
391
+ async _getRepositoryUrlFromNpm(pkgName) {
392
+ try {
393
+ const repoInfo = await npm.getPackageInfo(pkgName, ['repository']);
394
+ // When requesting only 'repository', npm.getPackageInfo returns the repository object directly
395
+ if (repoInfo) {
396
+ if (typeof repoInfo === 'string') {
397
+ return repoInfo;
398
+ }
399
+ if (repoInfo.url) {
400
+ return repoInfo.url.replace(/^git\+/, '').replace(/\.git$/, '');
401
+ }
402
+ }
403
+ } catch {
404
+ // Ignore errors fetching from npm
405
+ }
406
+ return null;
244
407
  }
245
408
 
246
409
  /**
@@ -454,18 +617,6 @@ class ExtensionCliCommand {
454
617
  return {pkg, installPath};
455
618
  });
456
619
 
457
- /** @type {Promise<void>[]} */
458
- const symlinkInjectionPromises = _.uniq([
459
- ...Object.values(this.config.installedExtensions).map((ext) => ext.installPath),
460
- installPath,
461
- ]).map((instPath) => injectAppiumSymlink.bind(this)(path.join(instPath, 'node_modules')));
462
- // After the extension is installed, we try to inject the appium module symlink
463
- // into the extension's node_modules folder if it is not there yet.
464
- // We also inject the symlink into other installed extensions' node_modules folders
465
- // as these might be cleaned up unexpectedly by npm
466
- // (see https://github.com/appium/python-client/pull/1177#issuecomment-3419826643).
467
- await Promise.all(symlinkInjectionPromises);
468
-
469
620
  return this.getInstallationReceipt({
470
621
  pkg,
471
622
  installPath,
@@ -971,11 +1122,35 @@ class ExtensionCliCommand {
971
1122
  * This is needed to ensure proper module resolution for installed extensions,
972
1123
  * especially ESM ones.
973
1124
  *
974
- * @this {ExtensionCliCommand}
1125
+ * @param {ExtensionConfig<ExtensionType>} driverConfig
1126
+ * @param {ExtensionConfig<ExtensionType>} pluginConfig
1127
+ * @param {import('@appium/types').AppiumLogger} logger
1128
+ */
1129
+ export async function injectAppiumSymlinks(driverConfig, pluginConfig, logger) {
1130
+ const installPaths = _.compact([
1131
+ ...Object.values(driverConfig.installedExtensions || {}),
1132
+ ...Object.values(pluginConfig.installedExtensions || {})
1133
+ ].filter((details) => details.installType === INSTALL_TYPE_NPM)
1134
+ .map((details) => details.installPath));
1135
+ // After the extension is installed, we try to inject the appium module symlink
1136
+ // into the extension's node_modules folder if it is not there yet.
1137
+ // We also inject the symlink into other installed extensions' node_modules folders
1138
+ // as these might be cleaned up unexpectedly by npm
1139
+ // (see https://github.com/appium/python-client/pull/1177#issuecomment-3419826643).
1140
+ await Promise.all(
1141
+ installPaths.map((installPath) => injectAppiumSymlink(path.join(installPath, 'node_modules'), logger))
1142
+ );
1143
+ }
1144
+
1145
+ /**
1146
+ * This is needed to ensure proper module resolution for installed extensions,
1147
+ * especially ESM ones.
1148
+ *
975
1149
  * @param {string} dstFolder The destination folder where the symlink should be created
1150
+ * @param {import('@appium/types').AppiumLogger} logger
976
1151
  * @returns {Promise<void>}
977
1152
  */
978
- async function injectAppiumSymlink(dstFolder) {
1153
+ async function injectAppiumSymlink(dstFolder, logger) {
979
1154
  let appiumModuleRoot;
980
1155
  try {
981
1156
  appiumModuleRoot = getAppiumModuleRoot();
@@ -985,7 +1160,7 @@ async function injectAppiumSymlink(dstFolder) {
985
1160
  }
986
1161
  } catch (error) {
987
1162
  // This error is not fatal, we may still doing just fine if the module being loaded is a CJS one
988
- this.log.info(
1163
+ logger.info(
989
1164
  `Cannot create a symlink to the appium module '${appiumModuleRoot}' in '${dstFolder}'. ` +
990
1165
  `Original error: ${error.message}`
991
1166
  );
@@ -1013,6 +1188,7 @@ export {ExtensionCliCommand as ExtensionCommand};
1013
1188
  * @property {string|null} unsafeUpdateVersion - Same as above, but a major version bump
1014
1189
  * @property {string} [updateError] - Update check error message (if present)
1015
1190
  * @property {boolean} [devMode] - If Appium is run from an extension's working copy
1191
+ * @property {string} [repositoryUrl] - Repository URL for the extension (if available)
1016
1192
  */
1017
1193
 
1018
1194
  /**
package/lib/cli/parser.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {fs} from '@appium/support';
2
2
  import {ArgumentParser} from 'argparse';
3
3
  import _ from 'lodash';
4
- import path from 'path';
4
+ import path from 'node:path';
5
5
  import {
6
6
  DRIVER_TYPE,
7
7
  EXT_SUBCOMMAND_DOCTOR,
package/lib/constants.js CHANGED
@@ -1,4 +1,4 @@
1
- import path from 'path';
1
+ import path from 'node:path';
2
2
 
3
3
  /**
4
4
  * The name of the extension type for drivers
@@ -1,7 +1,7 @@
1
1
  import {util, fs, system} from '@appium/support';
2
2
  import B from 'bluebird';
3
3
  import _ from 'lodash';
4
- import path from 'path';
4
+ import path from 'node:path';
5
5
  import resolveFrom from 'resolve-from';
6
6
  import {satisfies} from 'semver';
7
7
  import {commandClasses} from '../cli/extension';
@@ -12,7 +12,7 @@ import {
12
12
  isAllowedSchemaFileExtension,
13
13
  registerSchema,
14
14
  } from '../schema/schema';
15
- import { pathToFileURL } from 'url';
15
+ import { pathToFileURL } from 'node:url';
16
16
 
17
17
  const DEFAULT_ENTRY_POINT = 'index.js';
18
18
  /**