appium 2.0.0-beta.6 → 2.0.0-beta.60

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 (204) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +156 -65
  3. package/build/lib/appium.d.ts +229 -0
  4. package/build/lib/appium.d.ts.map +1 -0
  5. package/build/lib/appium.js +678 -439
  6. package/build/lib/appium.js.map +1 -0
  7. package/build/lib/cli/args.d.ts +17 -0
  8. package/build/lib/cli/args.d.ts.map +1 -0
  9. package/build/lib/cli/args.js +263 -319
  10. package/build/lib/cli/args.js.map +1 -0
  11. package/build/lib/cli/driver-command.d.ts +102 -0
  12. package/build/lib/cli/driver-command.d.ts.map +1 -0
  13. package/build/lib/cli/driver-command.js +131 -81
  14. package/build/lib/cli/driver-command.js.map +1 -0
  15. package/build/lib/cli/extension-command.d.ts +402 -0
  16. package/build/lib/cli/extension-command.d.ts.map +1 -0
  17. package/build/lib/cli/extension-command.js +799 -383
  18. package/build/lib/cli/extension-command.js.map +1 -0
  19. package/build/lib/cli/extension.d.ts +23 -0
  20. package/build/lib/cli/extension.d.ts.map +1 -0
  21. package/build/lib/cli/extension.js +71 -54
  22. package/build/lib/cli/extension.js.map +1 -0
  23. package/build/lib/cli/parser.d.ts +84 -0
  24. package/build/lib/cli/parser.d.ts.map +1 -0
  25. package/build/lib/cli/parser.js +240 -128
  26. package/build/lib/cli/parser.js.map +1 -0
  27. package/build/lib/cli/plugin-command.d.ts +99 -0
  28. package/build/lib/cli/plugin-command.d.ts.map +1 -0
  29. package/build/lib/cli/plugin-command.js +125 -81
  30. package/build/lib/cli/plugin-command.js.map +1 -0
  31. package/build/lib/cli/utils.d.ts +29 -0
  32. package/build/lib/cli/utils.d.ts.map +1 -0
  33. package/build/lib/cli/utils.js +72 -51
  34. package/build/lib/cli/utils.js.map +1 -0
  35. package/build/lib/config-file.d.ts +100 -0
  36. package/build/lib/config-file.d.ts.map +1 -0
  37. package/build/lib/config-file.js +207 -0
  38. package/build/lib/config-file.js.map +1 -0
  39. package/build/lib/config.d.ts +49 -0
  40. package/build/lib/config.d.ts.map +1 -0
  41. package/build/lib/config.js +267 -202
  42. package/build/lib/config.js.map +1 -0
  43. package/build/lib/constants.d.ts +56 -0
  44. package/build/lib/constants.d.ts.map +1 -0
  45. package/build/lib/constants.js +73 -0
  46. package/build/lib/constants.js.map +1 -0
  47. package/build/lib/extension/driver-config.d.ts +82 -0
  48. package/build/lib/extension/driver-config.d.ts.map +1 -0
  49. package/build/lib/extension/driver-config.js +210 -0
  50. package/build/lib/extension/driver-config.js.map +1 -0
  51. package/build/lib/extension/extension-config.d.ts +270 -0
  52. package/build/lib/extension/extension-config.d.ts.map +1 -0
  53. package/build/lib/extension/extension-config.js +601 -0
  54. package/build/lib/extension/extension-config.js.map +1 -0
  55. package/build/lib/extension/index.d.ts +48 -0
  56. package/build/lib/extension/index.d.ts.map +1 -0
  57. package/build/lib/extension/index.js +105 -0
  58. package/build/lib/extension/index.js.map +1 -0
  59. package/build/lib/extension/manifest-migrations.d.ts +27 -0
  60. package/build/lib/extension/manifest-migrations.d.ts.map +1 -0
  61. package/build/lib/extension/manifest-migrations.js +134 -0
  62. package/build/lib/extension/manifest-migrations.js.map +1 -0
  63. package/build/lib/extension/manifest.d.ts +145 -0
  64. package/build/lib/extension/manifest.d.ts.map +1 -0
  65. package/build/lib/extension/manifest.js +528 -0
  66. package/build/lib/extension/manifest.js.map +1 -0
  67. package/build/lib/extension/package-changed.d.ts +11 -0
  68. package/build/lib/extension/package-changed.d.ts.map +1 -0
  69. package/build/lib/extension/package-changed.js +62 -0
  70. package/build/lib/extension/package-changed.js.map +1 -0
  71. package/build/lib/extension/plugin-config.d.ts +56 -0
  72. package/build/lib/extension/plugin-config.d.ts.map +1 -0
  73. package/build/lib/extension/plugin-config.js +102 -0
  74. package/build/lib/extension/plugin-config.js.map +1 -0
  75. package/build/lib/grid-register.d.ts +10 -0
  76. package/build/lib/grid-register.d.ts.map +1 -0
  77. package/build/lib/grid-register.js +122 -144
  78. package/build/lib/grid-register.js.map +1 -0
  79. package/build/lib/logger.d.ts +3 -0
  80. package/build/lib/logger.d.ts.map +1 -0
  81. package/build/lib/logger.js +5 -17
  82. package/build/lib/logger.js.map +1 -0
  83. package/build/lib/logsink.d.ts +4 -0
  84. package/build/lib/logsink.d.ts.map +1 -0
  85. package/build/lib/logsink.js +190 -187
  86. package/build/lib/logsink.js.map +1 -0
  87. package/build/lib/main.d.ts +62 -0
  88. package/build/lib/main.d.ts.map +1 -0
  89. package/build/lib/main.js +339 -229
  90. package/build/lib/main.js.map +1 -0
  91. package/build/lib/schema/arg-spec.d.ts +143 -0
  92. package/build/lib/schema/arg-spec.d.ts.map +1 -0
  93. package/build/lib/schema/arg-spec.js +164 -0
  94. package/build/lib/schema/arg-spec.js.map +1 -0
  95. package/build/lib/schema/cli-args.d.ts +19 -0
  96. package/build/lib/schema/cli-args.d.ts.map +1 -0
  97. package/build/lib/schema/cli-args.js +217 -0
  98. package/build/lib/schema/cli-args.js.map +1 -0
  99. package/build/lib/schema/cli-transformers.d.ts +5 -0
  100. package/build/lib/schema/cli-transformers.d.ts.map +1 -0
  101. package/build/lib/schema/cli-transformers.js +124 -0
  102. package/build/lib/schema/cli-transformers.js.map +1 -0
  103. package/build/lib/schema/index.d.ts +3 -0
  104. package/build/lib/schema/index.d.ts.map +1 -0
  105. package/build/lib/schema/index.js +19 -0
  106. package/build/lib/schema/index.js.map +1 -0
  107. package/build/lib/schema/keywords.d.ts +24 -0
  108. package/build/lib/schema/keywords.d.ts.map +1 -0
  109. package/build/lib/schema/keywords.js +128 -0
  110. package/build/lib/schema/keywords.js.map +1 -0
  111. package/build/lib/schema/schema.d.ts +260 -0
  112. package/build/lib/schema/schema.d.ts.map +1 -0
  113. package/build/lib/schema/schema.js +640 -0
  114. package/build/lib/schema/schema.js.map +1 -0
  115. package/build/lib/utils.d.ts +266 -0
  116. package/build/lib/utils.d.ts.map +1 -0
  117. package/build/lib/utils.js +349 -273
  118. package/build/lib/utils.js.map +1 -0
  119. package/build/types/cli.d.ts +134 -0
  120. package/build/types/cli.d.ts.map +1 -0
  121. package/build/types/cli.js +3 -0
  122. package/build/types/cli.js.map +1 -0
  123. package/build/types/index.d.ts +15 -0
  124. package/build/types/index.d.ts.map +1 -0
  125. package/build/types/index.js +19 -0
  126. package/build/types/index.js.map +1 -0
  127. package/build/types/manifest/base.d.ts +135 -0
  128. package/build/types/manifest/base.d.ts.map +1 -0
  129. package/build/types/manifest/base.js +3 -0
  130. package/build/types/manifest/base.js.map +1 -0
  131. package/build/types/manifest/index.d.ts +21 -0
  132. package/build/types/manifest/index.d.ts.map +1 -0
  133. package/build/types/manifest/index.js +42 -0
  134. package/build/types/manifest/index.js.map +1 -0
  135. package/build/types/manifest/v3.d.ts +139 -0
  136. package/build/types/manifest/v3.d.ts.map +1 -0
  137. package/build/types/manifest/v3.js +3 -0
  138. package/build/types/manifest/v3.js.map +1 -0
  139. package/build/types/manifest/v4.d.ts +139 -0
  140. package/build/types/manifest/v4.d.ts.map +1 -0
  141. package/build/types/manifest/v4.js +3 -0
  142. package/build/types/manifest/v4.js.map +1 -0
  143. package/driver.d.ts +1 -0
  144. package/driver.js +14 -0
  145. package/index.js +11 -0
  146. package/lib/appium.js +558 -186
  147. package/lib/cli/args.js +277 -422
  148. package/lib/cli/driver-command.js +132 -24
  149. package/lib/cli/extension-command.js +751 -272
  150. package/lib/cli/extension.js +49 -18
  151. package/lib/cli/parser.js +263 -83
  152. package/lib/cli/plugin-command.js +122 -22
  153. package/lib/cli/utils.js +24 -10
  154. package/lib/config-file.js +220 -0
  155. package/lib/config.js +246 -111
  156. package/lib/constants.js +79 -0
  157. package/lib/extension/driver-config.js +247 -0
  158. package/lib/extension/extension-config.js +709 -0
  159. package/lib/extension/index.js +116 -0
  160. package/lib/extension/manifest-migrations.js +136 -0
  161. package/lib/extension/manifest.js +580 -0
  162. package/lib/extension/package-changed.js +64 -0
  163. package/lib/extension/plugin-config.js +112 -0
  164. package/lib/grid-register.js +49 -35
  165. package/lib/logger.js +1 -2
  166. package/lib/logsink.js +64 -38
  167. package/lib/main.js +318 -103
  168. package/lib/schema/arg-spec.js +229 -0
  169. package/lib/schema/cli-args.js +238 -0
  170. package/lib/schema/cli-transformers.js +119 -0
  171. package/lib/schema/index.js +2 -0
  172. package/lib/schema/keywords.js +136 -0
  173. package/lib/schema/schema.js +725 -0
  174. package/lib/utils.js +289 -167
  175. package/package.json +84 -84
  176. package/plugin.d.ts +1 -0
  177. package/plugin.js +13 -0
  178. package/scripts/autoinstall-extensions.js +243 -0
  179. package/support.d.ts +1 -0
  180. package/support.js +13 -0
  181. package/tsconfig.json +25 -0
  182. package/types/cli.ts +193 -0
  183. package/types/index.ts +20 -0
  184. package/types/manifest/README.md +30 -0
  185. package/types/manifest/base.ts +158 -0
  186. package/types/manifest/index.ts +28 -0
  187. package/types/manifest/v3.ts +161 -0
  188. package/types/manifest/v4.ts +161 -0
  189. package/CHANGELOG.md +0 -3515
  190. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  191. package/build/lib/cli/npm.js +0 -208
  192. package/build/lib/cli/parser-helpers.js +0 -82
  193. package/build/lib/driver-config.js +0 -77
  194. package/build/lib/drivers.js +0 -96
  195. package/build/lib/extension-config.js +0 -253
  196. package/build/lib/plugin-config.js +0 -59
  197. package/build/lib/plugins.js +0 -14
  198. package/lib/cli/npm.js +0 -184
  199. package/lib/cli/parser-helpers.js +0 -79
  200. package/lib/driver-config.js +0 -46
  201. package/lib/drivers.js +0 -81
  202. package/lib/extension-config.js +0 -209
  203. package/lib/plugin-config.js +0 -34
  204. package/lib/plugins.js +0 -10
@@ -0,0 +1,601 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
+ if (kind === "m") throw new TypeError("Private method is not writable");
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ var _ExtensionConfig_listDataCache;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.ExtensionConfig = exports.INSTALL_TYPES = exports.INSTALL_TYPE_DEV = exports.INSTALL_TYPE_GIT = exports.INSTALL_TYPE_GITHUB = exports.INSTALL_TYPE_LOCAL = exports.INSTALL_TYPE_NPM = void 0;
19
+ const support_1 = require("@appium/support");
20
+ const bluebird_1 = __importDefault(require("bluebird"));
21
+ const lodash_1 = __importDefault(require("lodash"));
22
+ const path_1 = __importDefault(require("path"));
23
+ const resolve_from_1 = __importDefault(require("resolve-from"));
24
+ const semver_1 = require("semver");
25
+ const extension_1 = require("../cli/extension");
26
+ const config_1 = require("../config");
27
+ const logger_1 = __importDefault(require("../logger"));
28
+ const schema_1 = require("../schema/schema");
29
+ /**
30
+ * "npm" install type
31
+ * Used when extension was installed by npm package name
32
+ * @remarks _All_ extensions are installed _by_ `npm`, but only this one means the package name was
33
+ * used to specify it
34
+ */
35
+ exports.INSTALL_TYPE_NPM = 'npm';
36
+ /**
37
+ * "local" install type
38
+ * Used when extension was installed from a local path
39
+ */
40
+ exports.INSTALL_TYPE_LOCAL = 'local';
41
+ /**
42
+ * "github" install type
43
+ * Used when extension was installed via GitHub URL
44
+ */
45
+ exports.INSTALL_TYPE_GITHUB = 'github';
46
+ /**
47
+ * "git" install type
48
+ * Used when extensions was installed via Git URL
49
+ */
50
+ exports.INSTALL_TYPE_GIT = 'git';
51
+ /**
52
+ * "dev" install type
53
+ * Used when automatically detected as a working copy
54
+ */
55
+ exports.INSTALL_TYPE_DEV = 'dev';
56
+ /** @type {Set<InstallType>} */
57
+ exports.INSTALL_TYPES = new Set([
58
+ exports.INSTALL_TYPE_GIT,
59
+ exports.INSTALL_TYPE_GITHUB,
60
+ exports.INSTALL_TYPE_LOCAL,
61
+ exports.INSTALL_TYPE_NPM,
62
+ exports.INSTALL_TYPE_DEV,
63
+ ]);
64
+ /**
65
+ * This class is abstract. It should not be instantiated directly.
66
+ *
67
+ * Subclasses should provide the generic parameter to implement.
68
+ * @template {ExtensionType} ExtType
69
+ */
70
+ class ExtensionConfig {
71
+ /**
72
+ * @protected
73
+ * @param {ExtType} extensionType - Type of extension
74
+ * @param {Manifest} manifest - `Manifest` instance
75
+ */
76
+ constructor(extensionType, manifest) {
77
+ /**
78
+ * @type {import('../cli/extension-command').ExtensionList<ExtType>|undefined}
79
+ */
80
+ _ExtensionConfig_listDataCache.set(this, void 0);
81
+ this.extensionType = extensionType;
82
+ this.installedExtensions = manifest.getExtensionData(extensionType);
83
+ this.manifest = manifest;
84
+ }
85
+ get manifestPath() {
86
+ return this.manifest.manifestPath;
87
+ }
88
+ get appiumHome() {
89
+ return this.manifest.appiumHome;
90
+ }
91
+ /**
92
+ * Returns a list of errors for a given extension.
93
+ *
94
+ * @param {ExtName<ExtType>} extName
95
+ * @param {ExtManifest<ExtType>} extManifest
96
+ * @returns {ExtManifestProblem[]}
97
+ */
98
+ getProblems(extName, extManifest) {
99
+ return [
100
+ ...this.getGenericConfigProblems(extManifest, extName),
101
+ ...this.getConfigProblems(extManifest, extName),
102
+ ...this.getSchemaProblems(extManifest, extName),
103
+ ];
104
+ }
105
+ /**
106
+ * Returns a list of warnings for a given extension.
107
+ *
108
+ * @param {ExtName<ExtType>} extName
109
+ * @param {ExtManifest<ExtType>} extManifest
110
+ * @returns {Promise<string[]>}
111
+ */
112
+ async getWarnings(extName, extManifest) {
113
+ const [genericConfigWarnings, configWarnings] = await bluebird_1.default.all([
114
+ this.getGenericConfigWarnings(extManifest, extName),
115
+ this.getConfigWarnings(extManifest, extName),
116
+ ]);
117
+ return [...genericConfigWarnings, ...configWarnings];
118
+ }
119
+ /**
120
+ * Returns a list of extension-type-specific issues. To be implemented by subclasses.
121
+ * @abstract
122
+ * @param {ExtManifest<ExtType>} extManifest
123
+ * @param {ExtName<ExtType>} extName
124
+ * @returns {Promise<string[]>}
125
+ */
126
+ // eslint-disable-next-line no-unused-vars,require-await
127
+ async getConfigWarnings(extManifest, extName) {
128
+ return [];
129
+ }
130
+ /**
131
+ *
132
+ * @param {Map<ExtName<ExtType>,ExtManifestProblem[]>} [errorMap]
133
+ * @param {Map<ExtName<ExtType>,string[]>} [warningMap]
134
+ */
135
+ getValidationResultSummaries(errorMap = new Map(), warningMap = new Map()) {
136
+ /**
137
+ * Array of computed strings
138
+ * @type {string[]}
139
+ */
140
+ const errorSummaries = [];
141
+ for (const [extName, problems] of errorMap.entries()) {
142
+ if (lodash_1.default.isEmpty(problems)) {
143
+ continue;
144
+ }
145
+ // remove this extension from the list since it's not valid
146
+ errorSummaries.push(`${this.extensionType} "${extName}" had ${support_1.util.pluralize('error', problems.length)} and will not be available:`);
147
+ for (const problem of problems) {
148
+ errorSummaries.push(` - ${problem.err} (Actual value: ` + `${JSON.stringify(problem.val)})`);
149
+ }
150
+ }
151
+ /** @type {string[]} */
152
+ const warningSummaries = [];
153
+ for (const [extName, warnings] of warningMap.entries()) {
154
+ if (lodash_1.default.isEmpty(warnings)) {
155
+ continue;
156
+ }
157
+ const extTypeText = lodash_1.default.capitalize(this.extensionType);
158
+ const problemEnumerationText = support_1.util.pluralize('potential problem', warnings.length, true);
159
+ warningSummaries.push(`${extTypeText} "${extName}" has ${problemEnumerationText}: `);
160
+ for (const warning of warnings) {
161
+ warningSummaries.push(` - ${warning}`);
162
+ }
163
+ }
164
+ return { errorSummaries, warningSummaries };
165
+ }
166
+ /**
167
+ * Checks extensions for problems. To be called by subclasses' `validate` method.
168
+ *
169
+ * Errors and warnings will be displayed to the user.
170
+ *
171
+ * This method mutates `exts`.
172
+ *
173
+ * @protected
174
+ * @param {ExtRecord<ExtType>} exts - Lookup of extension names to {@linkcode ExtManifest} objects
175
+ * @returns {Promise<ExtRecord<ExtType>>} The same lookup, but picking only error-free extensions
176
+ */
177
+ async _validate(exts) {
178
+ /**
179
+ * Lookup of extension names to {@linkcode ExtManifestProblem ExtManifestProblems}
180
+ * @type {Map<ExtName<ExtType>,ExtManifestProblem[]>}
181
+ */
182
+ const errorMap = new Map();
183
+ /**
184
+ * Lookup of extension names to warnings.
185
+ * @type {Map<ExtName<ExtType>,string[]>}
186
+ */
187
+ const warningMap = new Map();
188
+ for (const [extName, extManifest] of lodash_1.default.toPairs(exts)) {
189
+ const [errors, warnings] = await bluebird_1.default.all([
190
+ this.getProblems(extName, extManifest),
191
+ this.getWarnings(extName, extManifest),
192
+ ]);
193
+ if (errors.length) {
194
+ delete exts[extName];
195
+ }
196
+ errorMap.set(extName, errors);
197
+ warningMap.set(extName, warnings);
198
+ }
199
+ const { errorSummaries, warningSummaries } = this.getValidationResultSummaries(errorMap, warningMap);
200
+ if (!lodash_1.default.isEmpty(errorSummaries)) {
201
+ logger_1.default.error(`Appium encountered ${support_1.util.pluralize('error', errorMap.size, true)} while validating ${this.extensionType}s found in manifest ${this.manifestPath}`);
202
+ for (const summary of errorSummaries) {
203
+ logger_1.default.error(summary);
204
+ }
205
+ }
206
+ else {
207
+ // only display warnings if there are no errors!
208
+ if (!lodash_1.default.isEmpty(warningSummaries)) {
209
+ logger_1.default.warn(`Appium encountered ${support_1.util.pluralize('warning', warningMap.size, true)} while validating ${this.extensionType}s found in manifest ${this.manifestPath}`);
210
+ for (const summary of warningSummaries) {
211
+ logger_1.default.warn(summary);
212
+ }
213
+ }
214
+ }
215
+ return exts;
216
+ }
217
+ /**
218
+ * Retrieves listing data for extensions via command class.
219
+ *
220
+ * This is an expensive operation, so the result is cached. Currently, there is no
221
+ * use case for invalidating the cache.
222
+ * @protected
223
+ * @returns {Promise<import('../cli/extension-command').ExtensionList<ExtType>>}
224
+ */
225
+ async getListData() {
226
+ if (__classPrivateFieldGet(this, _ExtensionConfig_listDataCache, "f")) {
227
+ return __classPrivateFieldGet(this, _ExtensionConfig_listDataCache, "f");
228
+ }
229
+ const CommandClass = /** @type {ExtCommand<ExtType>} */ (extension_1.commandClasses[this.extensionType]);
230
+ const cmd = new CommandClass({ config: this, json: true });
231
+ const listData = await cmd.list({ showInstalled: true, showUpdates: true });
232
+ __classPrivateFieldSet(this, _ExtensionConfig_listDataCache, listData, "f");
233
+ return listData;
234
+ }
235
+ /**
236
+ * Returns a list of warnings for a particular extension.
237
+ *
238
+ * By definition, a non-empty list of warnings does _not_ imply the extension cannot be loaded,
239
+ * but it may not work as expected or otherwise throw an exception at runtime.
240
+ *
241
+ * @param {ExtManifest<ExtType>} extManifest
242
+ * @param {ExtName<ExtType>} extName
243
+ * @returns {Promise<string[]>}
244
+ */
245
+ async getGenericConfigWarnings(extManifest, extName) {
246
+ const { appiumVersion, installSpec, installType, pkgName } = extManifest;
247
+ const warnings = [];
248
+ const invalidFields = [];
249
+ if (!lodash_1.default.isString(installSpec)) {
250
+ invalidFields.push('installSpec');
251
+ }
252
+ if (!exports.INSTALL_TYPES.has(installType)) {
253
+ invalidFields.push('installType');
254
+ }
255
+ const extTypeText = lodash_1.default.capitalize(this.extensionType);
256
+ if (invalidFields.length) {
257
+ const invalidFieldsEnumerationText = support_1.util.pluralize('invalid or missing field', invalidFields.length, true);
258
+ const invalidFieldsText = invalidFields.map((field) => `"${field}"`).join(', ');
259
+ warnings.push(`${extTypeText} "${extName}" (package \`${pkgName}\`) has ${invalidFieldsEnumerationText} (${invalidFieldsText}) in \`extensions.yaml\`; this may cause upgrades done via the \`appium\` CLI tool to fail. Please reinstall with \`appium ${this.extensionType} uninstall ${extName}\` and \`appium ${this.extensionType} install ${extName}\` to attempt a fix.`);
260
+ }
261
+ /**
262
+ * Helps concatenate warning messages related to peer dependencies
263
+ * @param {string} reason
264
+ * @returns string
265
+ */
266
+ const createPeerWarning = (reason) => `${extTypeText} "${extName}" (package \`${pkgName}\`) may be incompatible with the current version of Appium (v${config_1.APPIUM_VER}) due to ${reason}`;
267
+ if (lodash_1.default.isString(appiumVersion) && !(0, semver_1.satisfies)(config_1.APPIUM_VER, appiumVersion)) {
268
+ const listData = await this.getListData();
269
+ const extListData =
270
+ /** @type {import('../cli/extension-command').ExtensionListData<ExtType>} */ (listData[extName]);
271
+ if (extListData?.installed) {
272
+ const { updateVersion, upToDate } = extListData;
273
+ if (!upToDate) {
274
+ warnings.push(createPeerWarning(`its peer dependency on older Appium v${appiumVersion}. Please upgrade \`${pkgName}\` to v${updateVersion} or newer.`));
275
+ }
276
+ else {
277
+ warnings.push(createPeerWarning(`its peer dependency on older Appium v${appiumVersion}. Please ask the developer of \`${pkgName}\` to update the peer dependency on Appium to v${config_1.APPIUM_VER}.`));
278
+ }
279
+ }
280
+ }
281
+ else if (!lodash_1.default.isString(appiumVersion)) {
282
+ const listData = await this.getListData();
283
+ const extListData =
284
+ /** @type {import('../cli/extension-command').InstalledExtensionListData<ExtType>} */ (listData[extName]);
285
+ if (!extListData?.upToDate && extListData?.updateVersion) {
286
+ warnings.push(createPeerWarning(`an invalid or missing peer dependency on Appium. A newer version of \`${pkgName}\` is available; please attempt to upgrade "${extName}" to v${extListData.updateVersion} or newer.`));
287
+ }
288
+ else {
289
+ warnings.push(createPeerWarning(`an invalid or missing peer dependency on Appium. Please ask the developer of \`${pkgName}\` to add a peer dependency on \`^appium@${config_1.APPIUM_VER}\`.`));
290
+ }
291
+ }
292
+ return warnings;
293
+ }
294
+ /**
295
+ * Returns list of unrecoverable errors (if any) for the given extension _if_ it has a `schema` property.
296
+ *
297
+ * @param {ExtManifest<ExtType>} extManifest - Extension data (from manifest)
298
+ * @param {ExtName<ExtType>} extName - Extension name (from manifest)
299
+ * @returns {ExtManifestProblem[]}
300
+ */
301
+ getSchemaProblems(extManifest, extName) {
302
+ /** @type {ExtManifestProblem[]} */
303
+ const problems = [];
304
+ const { schema: argSchemaPath } = extManifest;
305
+ if (ExtensionConfig.extDataHasSchema(extManifest)) {
306
+ if (lodash_1.default.isString(argSchemaPath)) {
307
+ if ((0, schema_1.isAllowedSchemaFileExtension)(argSchemaPath)) {
308
+ try {
309
+ this.readExtensionSchema(extName, extManifest);
310
+ }
311
+ catch (err) {
312
+ problems.push({
313
+ err: `Unable to register schema at path ${argSchemaPath}; ${err.message}`,
314
+ val: argSchemaPath,
315
+ });
316
+ }
317
+ }
318
+ else {
319
+ problems.push({
320
+ err: `Schema file has unsupported extension. Allowed: ${[
321
+ ...schema_1.ALLOWED_SCHEMA_EXTENSIONS,
322
+ ].join(', ')}`,
323
+ val: argSchemaPath,
324
+ });
325
+ }
326
+ }
327
+ else if (lodash_1.default.isPlainObject(argSchemaPath)) {
328
+ try {
329
+ this.readExtensionSchema(extName, extManifest);
330
+ }
331
+ catch (err) {
332
+ problems.push({
333
+ err: `Unable to register embedded schema; ${err.message}`,
334
+ val: argSchemaPath,
335
+ });
336
+ }
337
+ }
338
+ else {
339
+ problems.push({
340
+ err: 'Incorrectly formatted schema field; must be a path to a schema file or a schema object.',
341
+ val: argSchemaPath,
342
+ });
343
+ }
344
+ }
345
+ return problems;
346
+ }
347
+ /**
348
+ * Return a list of generic unrecoverable errors for the given extension
349
+ * @param {ExtManifest<ExtType>} extManifest - Extension data (from manifest)
350
+ * @param {ExtName<ExtType>} extName - Extension name (from manifest)
351
+ * @returns {ExtManifestProblem[]}
352
+ */
353
+ // eslint-disable-next-line no-unused-vars
354
+ getGenericConfigProblems(extManifest, extName) {
355
+ const { version, pkgName, mainClass } = extManifest;
356
+ const problems = [];
357
+ if (!lodash_1.default.isString(version)) {
358
+ problems.push({
359
+ err: `Invalid or missing \`version\` field in my \`package.json\` and/or \`extensions.yaml\` (must be a string)`,
360
+ val: version,
361
+ });
362
+ }
363
+ if (!lodash_1.default.isString(pkgName)) {
364
+ problems.push({
365
+ err: `Invalid or missing \`name\` field in my \`package.json\` and/or \`extensions.yaml\` (must be a string)`,
366
+ val: pkgName,
367
+ });
368
+ }
369
+ if (!lodash_1.default.isString(mainClass)) {
370
+ problems.push({
371
+ err: `Invalid or missing \`appium.mainClass\` field in my \`package.json\` and/or \`mainClass\` field in \`extensions.yaml\` (must be a string)`,
372
+ val: mainClass,
373
+ });
374
+ }
375
+ return problems;
376
+ }
377
+ /**
378
+ * @abstract
379
+ * @param {ExtManifest<ExtType>} extManifest
380
+ * @param {ExtName<ExtType>} extName
381
+ * @returns {ExtManifestProblem[]}
382
+ */
383
+ // eslint-disable-next-line no-unused-vars
384
+ getConfigProblems(extManifest, extName) {
385
+ // shoud override this method if special validation is necessary for this extension type
386
+ return [];
387
+ }
388
+ /**
389
+ * @param {string} extName
390
+ * @param {ExtManifest<ExtType>} extManifest
391
+ * @param {ExtensionConfigMutationOpts} opts
392
+ * @returns {Promise<void>}
393
+ */
394
+ async addExtension(extName, extManifest, { write = true } = {}) {
395
+ this.manifest.setExtension(this.extensionType, extName, extManifest);
396
+ if (write) {
397
+ await this.manifest.write();
398
+ }
399
+ }
400
+ /**
401
+ * @param {ExtName<ExtType>} extName
402
+ * @param {ExtManifest<ExtType>} extManifest
403
+ * @param {ExtensionConfigMutationOpts} opts
404
+ * @returns {Promise<void>}
405
+ */
406
+ async updateExtension(extName, extManifest, { write = true } = {}) {
407
+ this.manifest.setExtension(this.extensionType, extName, {
408
+ ...this.installedExtensions[extName],
409
+ ...extManifest,
410
+ });
411
+ if (write) {
412
+ await this.manifest.write();
413
+ }
414
+ }
415
+ /**
416
+ * Remove an extension from the list of installed extensions, and optionally avoid a write to the manifest file.
417
+ *
418
+ * @param {ExtName<ExtType>} extName
419
+ * @param {ExtensionConfigMutationOpts} opts
420
+ * @returns {Promise<void>}
421
+ */
422
+ async removeExtension(extName, { write = true } = {}) {
423
+ this.manifest.deleteExtension(this.extensionType, extName);
424
+ if (write) {
425
+ await this.manifest.write();
426
+ }
427
+ }
428
+ /**
429
+ * @param {ExtName<ExtType>[]} [activeNames]
430
+ * @returns {void}
431
+ */
432
+ // eslint-disable-next-line no-unused-vars
433
+ print(activeNames) {
434
+ if (lodash_1.default.isEmpty(this.installedExtensions)) {
435
+ logger_1.default.info(`No ${this.extensionType}s have been installed in ${this.appiumHome}. Use the "appium ${this.extensionType}" ` +
436
+ 'command to install the one(s) you want to use.');
437
+ return;
438
+ }
439
+ logger_1.default.info(`Available ${this.extensionType}s:`);
440
+ for (const [extName, extManifest] of /** @type {[string, ExtManifest<ExtType>][]} */ (lodash_1.default.toPairs(this.installedExtensions))) {
441
+ logger_1.default.info(` - ${this.extensionDesc(extName, extManifest)}`);
442
+ }
443
+ }
444
+ /**
445
+ * Returns a string describing the extension. Subclasses must implement.
446
+ * @param {ExtName<ExtType>} extName - Extension name
447
+ * @param {ExtManifest<ExtType>} extManifest - Extension data
448
+ * @returns {string}
449
+ * @abstract
450
+ */
451
+ // eslint-disable-next-line no-unused-vars
452
+ extensionDesc(extName, extManifest) {
453
+ throw new Error('This must be implemented in a subclass');
454
+ }
455
+ /**
456
+ * Returns--with reasonable accuracy--the path on disk to the extension.
457
+ *
458
+ * If `installPath` is present in the manifest, then it is used; otherwise we just guess.
459
+ * @param {keyof typeof this.installedExtensions} extName
460
+ * @returns {string}
461
+ */
462
+ getInstallPath(extName) {
463
+ return (this.installedExtensions[extName]?.installPath ??
464
+ path_1.default.join(this.appiumHome, 'node_modules', this.installedExtensions[extName].pkgName));
465
+ }
466
+ /**
467
+ * Loads extension and returns its main class (constructor)
468
+ * @param {ExtName<ExtType>} extName
469
+ * @returns {ExtClass<ExtType>}
470
+ */
471
+ require(extName) {
472
+ const { mainClass } = this.installedExtensions[extName];
473
+ const reqPath = this.getInstallPath(extName);
474
+ /** @type {string} */
475
+ let reqResolved;
476
+ try {
477
+ reqResolved = require.resolve(reqPath);
478
+ }
479
+ catch (err) {
480
+ throw new ReferenceError(`Could not find a ${this.extensionType} installed at ${reqPath}`);
481
+ }
482
+ // note: this will only reload the entry point
483
+ if (process.env.APPIUM_RELOAD_EXTENSIONS && require.cache[reqResolved]) {
484
+ logger_1.default.debug(`Removing ${reqResolved} from require cache`);
485
+ delete require.cache[reqResolved];
486
+ }
487
+ logger_1.default.debug(`Requiring ${this.extensionType} at ${reqPath}`);
488
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
489
+ const MainClass = require(reqPath)[mainClass];
490
+ if (!MainClass) {
491
+ throw new ReferenceError(`Could not find a class named "${mainClass}" exported by ${this.extensionType} "${extName}"`);
492
+ }
493
+ return MainClass;
494
+ }
495
+ /**
496
+ * @param {string} extName
497
+ * @returns {boolean}
498
+ */
499
+ isInstalled(extName) {
500
+ return extName in this.installedExtensions;
501
+ }
502
+ /**
503
+ * Intended to be called by corresponding instance methods of subclass.
504
+ * @private
505
+ * @template {ExtensionType} ExtType
506
+ * @param {string} appiumHome
507
+ * @param {ExtType} extType
508
+ * @param {ExtName<ExtType>} extName - Extension name (unique to its type)
509
+ * @param {ExtManifestWithSchema<ExtType>} extManifest - Extension config
510
+ * @returns {import('ajv').SchemaObject|undefined}
511
+ */
512
+ static _readExtensionSchema(appiumHome, extType, extName, extManifest) {
513
+ const { pkgName, schema: argSchemaPath } = extManifest;
514
+ if (!argSchemaPath) {
515
+ throw new TypeError(`No \`schema\` property found in config for ${extType} ${pkgName} -- why is this function being called?`);
516
+ }
517
+ let moduleObject;
518
+ if (lodash_1.default.isString(argSchemaPath)) {
519
+ const schemaPath = (0, resolve_from_1.default)(appiumHome, path_1.default.join(pkgName, argSchemaPath));
520
+ moduleObject = require(schemaPath);
521
+ }
522
+ else {
523
+ moduleObject = argSchemaPath;
524
+ }
525
+ // this sucks. default exports should be destroyed
526
+ const schema = moduleObject.__esModule ? moduleObject.default : moduleObject;
527
+ (0, schema_1.registerSchema)(extType, extName, schema);
528
+ return schema;
529
+ }
530
+ /**
531
+ * Returns `true` if a specific {@link ExtManifest} object has a `schema` prop.
532
+ * The {@link ExtManifest} object becomes a {@link ExtManifestWithSchema} object.
533
+ * @template {ExtensionType} ExtType
534
+ * @param {ExtManifest<ExtType>} extManifest
535
+ * @returns {extManifest is ExtManifestWithSchema<ExtType>}
536
+ */
537
+ static extDataHasSchema(extManifest) {
538
+ return lodash_1.default.isString(extManifest?.schema) || lodash_1.default.isObject(extManifest?.schema);
539
+ }
540
+ /**
541
+ * If an extension provides a schema, this will load the schema and attempt to
542
+ * register it with the schema registrar.
543
+ * @param {ExtName<ExtType>} extName - Name of extension
544
+ * @param {ExtManifestWithSchema<ExtType>} extManifest - Extension data
545
+ * @returns {import('ajv').SchemaObject|undefined}
546
+ */
547
+ readExtensionSchema(extName, extManifest) {
548
+ return ExtensionConfig._readExtensionSchema(this.appiumHome, this.extensionType, extName, extManifest);
549
+ }
550
+ }
551
+ exports.ExtensionConfig = ExtensionConfig;
552
+ _ExtensionConfig_listDataCache = new WeakMap();
553
+ /**
554
+ * An issue with the {@linkcode ExtManifest} for a particular extension.
555
+ *
556
+ * The existance of such an object implies that the extension cannot be loaded.
557
+ * @typedef ExtManifestProblem
558
+ * @property {string} err - Error message
559
+ * @property {any} val - Associated value
560
+ */
561
+ /**
562
+ * An optional logging function provided to an {@link ExtensionConfig} subclass.
563
+ * @callback ExtensionLogFn
564
+ * @param {...any} args
565
+ * @returns {void}
566
+ */
567
+ /**
568
+ * @typedef {import('@appium/types').ExtensionType} ExtensionType
569
+ * @typedef {import('./manifest').Manifest} Manifest
570
+ * @typedef {import('appium/types').InstallType} InstallType
571
+ */
572
+ /**
573
+ * @template {ExtensionType} ExtType
574
+ * @typedef {import('appium/types').ExtManifest<ExtType>} ExtManifest
575
+ */
576
+ /**
577
+ * @template {ExtensionType} ExtType
578
+ * @typedef {ExtManifest<ExtType> & {schema: NonNullable<ExtManifest<ExtType>['schema']>}} ExtManifestWithSchema
579
+ */
580
+ /**
581
+ * @template {ExtensionType} ExtType
582
+ * @typedef {import('appium/types').ExtName<ExtType>} ExtName
583
+ */
584
+ /**
585
+ * @template {ExtensionType} ExtType
586
+ * @typedef {import('appium/types').ExtClass<ExtType>} ExtClass
587
+ */
588
+ /**
589
+ * @template {ExtensionType} ExtType
590
+ * @typedef {import('appium/types').ExtRecord<ExtType>} ExtRecord
591
+ */
592
+ /**
593
+ * @template {ExtensionType} ExtType
594
+ * @typedef {import('../cli/extension').ExtCommand<ExtType>} ExtCommand
595
+ */
596
+ /**
597
+ * Options for various methods in {@link ExtensionConfig}
598
+ * @typedef ExtensionConfigMutationOpts
599
+ * @property {boolean} [write=true] Whether or not to write the manifest to disk after a mutation operation
600
+ */
601
+ //# sourceMappingURL=extension-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-config.js","sourceRoot":"","sources":["../../../lib/extension/extension-config.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Loads extensions and creates `ExtensionConfig` instances.
3
+ *
4
+ * - Reads the manifest file, creating if necessary
5
+ * - Using the parsed extension data, creates/gets the `ExtensionConfig` subclass instances
6
+ * - Returns these instances
7
+ *
8
+ * If `appiumHome` is needed, use `resolveAppiumHome` from the `env` module in `@appium/support`.
9
+ * @param {string} appiumHome
10
+ * @returns {Promise<ExtensionConfigs>}
11
+ */
12
+ export function loadExtensions(appiumHome: string): Promise<ExtensionConfigs>;
13
+ /**
14
+ * Find any plugin name which has been installed, and which has been requested for activation by
15
+ * using the --use-plugins flag, and turn each one into its class, so we can send them as objects
16
+ * to the server init. We also want to send/assign them to the umbrella driver so it can use them
17
+ * to wrap command execution
18
+ *
19
+ * @param {import('./plugin-config').PluginConfig} pluginConfig - a plugin extension config
20
+ * @param {string[]} usePlugins
21
+ * @returns {PluginNameMap} Mapping of PluginClass to name
22
+ */
23
+ export function getActivePlugins(pluginConfig: import('./plugin-config').PluginConfig, usePlugins?: string[]): PluginNameMap;
24
+ /**
25
+ * Find any driver name which has been installed, and turn each one into its class, so we can send
26
+ * them as objects to the server init in case they need to add methods/routes or update the server.
27
+ * If the --drivers flag was given, this method only loads the given drivers.
28
+ *
29
+ * @param {import('./driver-config').DriverConfig} driverConfig - a driver extension config
30
+ * @param {string[]} [useDrivers] - optional list of drivers to load
31
+ * @returns {DriverNameMap}
32
+ */
33
+ export function getActiveDrivers(driverConfig: import('./driver-config').DriverConfig, useDrivers?: string[] | undefined): DriverNameMap;
34
+ /**
35
+ * A mapping of {@linkcode PluginClass } classes to their names.
36
+ */
37
+ export type PluginNameMap = Map<PluginClass, string>;
38
+ /**
39
+ * A mapping of {@linkcode DriverClass } classes to their names.
40
+ */
41
+ export type DriverNameMap = Map<DriverClass, string>;
42
+ export type PluginClass = import('@appium/types').PluginClass;
43
+ export type DriverClass = import('@appium/types').DriverClass;
44
+ export type ExtensionConfigs = {
45
+ driverConfig: import('./driver-config').DriverConfig;
46
+ pluginConfig: import('./plugin-config').PluginConfig;
47
+ };
48
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/extension/index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;GAUG;AACH,2CAHW,MAAM,GACJ,QAAQ,gBAAgB,CAAC,CAUrC;AAED;;;;;;;;;GASG;AACH,+CAJW,OAAO,iBAAiB,EAAE,YAAY,eACtC,MAAM,EAAE,iBA2BlB;AAED;;;;;;;;GAQG;AACH,+CAJW,OAAO,iBAAiB,EAAE,YAAY,oDAwBhD;;;;4BAIY,IAAI,WAAW,EAAC,MAAM,CAAC;;;;4BAKvB,IAAI,WAAW,EAAC,MAAM,CAAC;0BAIvB,OAAO,eAAe,EAAE,WAAW;0BACnC,OAAO,eAAe,EAAE,WAAW;;kBAKlC,OAAO,iBAAiB,EAAE,YAAY;kBACtC,OAAO,iBAAiB,EAAE,YAAY"}