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.
- package/build/lib/bidi-commands.d.ts.map +1 -1
- package/build/lib/bidi-commands.js.map +1 -1
- package/build/lib/cli/extension-command.d.ts +109 -0
- package/build/lib/cli/extension-command.d.ts.map +1 -1
- package/build/lib/cli/extension-command.js +251 -89
- package/build/lib/cli/extension-command.js.map +1 -1
- package/build/lib/cli/parser.js +2 -2
- package/build/lib/cli/parser.js.map +1 -1
- package/build/lib/constants.js +3 -3
- package/build/lib/constants.js.map +1 -1
- package/build/lib/extension/extension-config.js +7 -7
- package/build/lib/extension/extension-config.js.map +1 -1
- package/build/lib/extension/manifest.js +6 -6
- package/build/lib/extension/manifest.js.map +1 -1
- package/build/lib/extension/package-changed.js +3 -3
- package/build/lib/extension/package-changed.js.map +1 -1
- package/build/lib/main.d.ts.map +1 -1
- package/build/lib/main.js +9 -2
- package/build/lib/main.js.map +1 -1
- package/build/lib/schema/cli-transformers.js +5 -5
- package/build/lib/schema/cli-transformers.js.map +1 -1
- package/build/lib/schema/schema.js +2 -2
- package/build/lib/schema/schema.js.map +1 -1
- package/build/lib/utils.d.ts +1 -1
- package/build/lib/utils.d.ts.map +1 -1
- package/build/lib/utils.js +8 -8
- package/build/lib/utils.js.map +1 -1
- package/build/types/cli.d.ts.map +1 -1
- package/index.js +1 -3
- package/lib/bidi-commands.ts +2 -2
- package/lib/cli/extension-command.js +274 -98
- package/lib/cli/parser.js +1 -1
- package/lib/constants.js +1 -1
- package/lib/extension/extension-config.js +2 -2
- package/lib/extension/manifest.js +1 -1
- package/lib/extension/package-changed.js +1 -1
- package/lib/main.js +10 -2
- package/lib/schema/cli-transformers.js +1 -1
- package/lib/schema/schema.js +1 -1
- package/lib/utils.js +3 -3
- package/package.json +18 -20
- package/scripts/autoinstall-extensions.js +7 -10
- package/types/cli.ts +1 -1
- package/LICENSE +0 -201
package/build/lib/utils.js
CHANGED
|
@@ -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
|
|
25
|
+
const node_util_1 = require("node:util");
|
|
26
26
|
const support_1 = require("@appium/support");
|
|
27
|
-
const
|
|
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} */ (
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
239
|
+
process.env.NODE_PATH = lodash_1.default.without(nodePathParts, appiumModuleSearchRoot).join(node_path_1.default.delimiter);
|
|
240
240
|
}
|
|
241
241
|
}
|
|
242
242
|
/**
|
package/build/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":";;;;;;AAkCA,kDAKC;AA2BD,0DA+EC;AAQD,oDAQC;AAOD,oDAEC;AAgBD,8CAGC;AAyBD,wCA+CC;AAyBD,oCAqBC;AAQD,kDAEC;AAQD,gDAEC;AAQD,wDAEC;AAQD,kDAEC;AAQD,kDAEC;AASD,0CAYC;AASD,0BA8CC;AAQD,sCAEC;AA3bD,oDAAuB;AACvB,sDAA8B;AAC9B,qDAK6B;AAC7B
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":"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"}
|
package/build/types/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../types/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AACjE,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AACtC,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AACvC,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AACxC,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC;AACtC,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAC1C,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAE1C;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEtE;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,mBAAmB,GAAG,eAAe,CAAC;AAElF;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../types/cli.ts"],"names":[],"mappings":"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"}
|
package/index.js
CHANGED
package/lib/bidi-commands.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
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
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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
|
-
|
|
378
|
+
} catch {
|
|
379
|
+
// Ignore errors reading package.json
|
|
241
380
|
}
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
242
383
|
|
|
243
|
-
|
|
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
|
-
* @
|
|
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
|
-
|
|
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
package/lib/constants.js
CHANGED
|
@@ -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
|
/**
|