appium 2.0.0-beta.8 → 2.0.0-rc.1

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 (206) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +149 -58
  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 -441
  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 -300
  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 -60
  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 +252 -148
  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 +262 -223
  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 +189 -184
  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 +406 -234
  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 +220 -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 +276 -0
  116. package/build/lib/utils.d.ts.map +1 -0
  117. package/build/lib/utils.js +373 -271
  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 +555 -185
  147. package/lib/cli/args.js +275 -407
  148. package/lib/cli/driver-command.js +132 -24
  149. package/lib/cli/extension-command.js +751 -272
  150. package/lib/cli/extension.js +47 -20
  151. package/lib/cli/parser.js +267 -95
  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 +243 -132
  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 +59 -36
  167. package/lib/main.js +392 -104
  168. package/lib/schema/arg-spec.js +229 -0
  169. package/lib/schema/cli-args.js +241 -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 +315 -167
  175. package/package.json +84 -82
  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 -3669
  190. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  191. package/build/lib/cli/argparse-actions.js +0 -104
  192. package/build/lib/cli/npm.js +0 -207
  193. package/build/lib/cli/parser-helpers.js +0 -93
  194. package/build/lib/driver-config.js +0 -77
  195. package/build/lib/drivers.js +0 -99
  196. package/build/lib/extension-config.js +0 -253
  197. package/build/lib/plugin-config.js +0 -59
  198. package/build/lib/plugins.js +0 -14
  199. package/lib/cli/argparse-actions.js +0 -77
  200. package/lib/cli/npm.js +0 -183
  201. package/lib/cli/parser-helpers.js +0 -91
  202. package/lib/driver-config.js +0 -46
  203. package/lib/drivers.js +0 -84
  204. package/lib/extension-config.js +0 -209
  205. package/lib/plugin-config.js +0 -34
  206. package/lib/plugins.js +0 -10
@@ -0,0 +1,640 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ 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");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ 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");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ var _a, _AppiumSchema_argSpecs, _AppiumSchema_registeredSchemas, _AppiumSchema_ajv, _AppiumSchema_instance, _AppiumSchema_finalizedSchemas;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.isAllowedSchemaFileExtension = exports.getDefaultsForExtension = exports.getDefaultsForSchema = exports.flattenSchema = exports.getSchema = exports.validate = exports.resetSchema = exports.finalizeSchema = exports.isFinalized = exports.hasArgSpec = exports.getArgSpec = exports.getAllArgSpecs = exports.registerSchema = exports.SchemaUnsupportedSchemaError = exports.SchemaUnknownSchemaError = exports.SchemaNameConflictError = exports.SchemaFinalizationError = exports.ALLOWED_SCHEMA_EXTENSIONS = exports.RoachHotelMap = void 0;
19
+ const ajv_1 = __importDefault(require("ajv"));
20
+ const ajv_formats_1 = __importDefault(require("ajv-formats"));
21
+ const lodash_1 = __importDefault(require("lodash"));
22
+ const path_1 = __importDefault(require("path"));
23
+ const constants_1 = require("../constants");
24
+ const schema_1 = require("@appium/schema");
25
+ const arg_spec_1 = require("./arg-spec");
26
+ const keywords_1 = require("./keywords");
27
+ /**
28
+ * Key/value pairs go in... but they don't come out.
29
+ *
30
+ * @template K,V
31
+ * @extends {Map<K,V>}
32
+ */
33
+ class RoachHotelMap extends Map {
34
+ /**
35
+ * @param {K} key
36
+ * @param {V} value
37
+ */
38
+ set(key, value) {
39
+ if (this.has(key)) {
40
+ throw new Error(`${key} is already set`);
41
+ }
42
+ return super.set(key, value);
43
+ }
44
+ /**
45
+ * @param {K} key
46
+ */
47
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
48
+ delete(key) {
49
+ return false;
50
+ }
51
+ clear() {
52
+ throw new Error(`Cannot clear RoachHotelMap`);
53
+ }
54
+ }
55
+ exports.RoachHotelMap = RoachHotelMap;
56
+ /**
57
+ * Extensions that an extension schema file can have.
58
+ */
59
+ exports.ALLOWED_SCHEMA_EXTENSIONS = Object.freeze(new Set(/** @type {AllowedSchemaExtension[]} */ (['.json', '.js', '.cjs'])));
60
+ const SCHEMA_KEY = '$schema';
61
+ /**
62
+ * A wrapper around Ajv and schema-related functions.
63
+ *
64
+ * Should have been named Highlander, because _there can only be one_
65
+ */
66
+ class AppiumSchema {
67
+ /**
68
+ * Initializes Ajv, adds standard formats and our custom keywords.
69
+ * @see https://npm.im/ajv-formats
70
+ * @private
71
+ */
72
+ constructor() {
73
+ /**
74
+ * A mapping of unique argument IDs to their corresponding {@link ArgSpec}s.
75
+ *
76
+ * An "argument" is a CLI argument or a config property.
77
+ *
78
+ * Used to provide easy lookups of argument metadata when converting between different representations of those arguments.
79
+ * @type {RoachHotelMap<string,ArgSpec>}
80
+ */
81
+ _AppiumSchema_argSpecs.set(this, new RoachHotelMap());
82
+ /**
83
+ * A map of extension types to extension names to schema objects.
84
+ *
85
+ * This data structure is used to ensure there are no naming conflicts. The schemas
86
+ * are stored here in memory until the instance is _finalized_.
87
+ * @type {Record<ExtensionType,Map<string,SchemaObject>>}
88
+ */
89
+ _AppiumSchema_registeredSchemas.set(this, { [constants_1.DRIVER_TYPE]: new Map(), [constants_1.PLUGIN_TYPE]: new Map() });
90
+ /**
91
+ * Ajv instance
92
+ *
93
+ * @type {Ajv}
94
+ */
95
+ _AppiumSchema_ajv.set(this, void 0);
96
+ /**
97
+ * Lookup of schema IDs to finalized schemas.
98
+ *
99
+ * This does not include references, but rather the root schemas themselves.
100
+ * @type {Record<string,StrictSchemaObject>?}
101
+ */
102
+ _AppiumSchema_finalizedSchemas.set(this, null);
103
+ __classPrivateFieldSet(this, _AppiumSchema_ajv, AppiumSchema._instantiateAjv(), "f");
104
+ }
105
+ /**
106
+ * Factory function for {@link AppiumSchema} instances.
107
+ *
108
+ * Returns a singleton instance if one exists, otherwise creates a new one.
109
+ * Binds public methods to the instance.
110
+ * @returns {AppiumSchema}
111
+ */
112
+ static create() {
113
+ if (!__classPrivateFieldGet(AppiumSchema, _a, "f", _AppiumSchema_instance)) {
114
+ const instance = new AppiumSchema();
115
+ __classPrivateFieldSet(AppiumSchema, _a, instance, "f", _AppiumSchema_instance);
116
+ lodash_1.default.bindAll(instance, [
117
+ 'finalize',
118
+ 'flatten',
119
+ 'getAllArgSpecs',
120
+ 'getArgSpec',
121
+ 'getDefaults',
122
+ 'getDefaultsForExtension',
123
+ 'getSchema',
124
+ 'hasArgSpec',
125
+ 'isFinalized',
126
+ 'registerSchema',
127
+ 'hasRegisteredSchema',
128
+ 'reset',
129
+ 'validate',
130
+ ]);
131
+ }
132
+ return __classPrivateFieldGet(AppiumSchema, _a, "f", _AppiumSchema_instance);
133
+ }
134
+ /**
135
+ * Returns `true` if a schema has been registered using given extension type and name.
136
+ *
137
+ * This does not depend on whether or not the instance has been _finalized_.
138
+ * @param {ExtensionType} extType - Extension type
139
+ * @param {string} extName - Name
140
+ * @returns {boolean} If registered
141
+ */
142
+ hasRegisteredSchema(extType, extName) {
143
+ return __classPrivateFieldGet(this, _AppiumSchema_registeredSchemas, "f")[extType].has(extName);
144
+ }
145
+ /**
146
+ * Return `true` if {@link AppiumSchema.finalize finalize} has been called
147
+ * successfully and {@link AppiumSchema.reset reset} has not been called since.
148
+ * @returns {boolean} If finalized
149
+ */
150
+ isFinalized() {
151
+ return Boolean(__classPrivateFieldGet(this, _AppiumSchema_finalizedSchemas, "f"));
152
+ }
153
+ getAllArgSpecs() {
154
+ return __classPrivateFieldGet(this, _AppiumSchema_argSpecs, "f");
155
+ }
156
+ /**
157
+ * Call this when no more schemas will be registered.
158
+ *
159
+ * This does three things:
160
+ * 1. It combines all schemas from extensions into the Appium config schema,
161
+ * then adds the result to the `Ajv` instance.
162
+ * 2. It adds schemas for _each_ argument/property for validation purposes.
163
+ * The CLI uses these schemas to validate specific arguments.
164
+ * 3. The schemas are validated against JSON schema draft-07 (which is the
165
+ * only one supported at this time)
166
+ *
167
+ * Any method in this instance that needs to interact with the `Ajv` instance
168
+ * will throw if this method has not been called.
169
+ *
170
+ * If the instance has already been finalized, this is a no-op.
171
+ * @public
172
+ * @throws {Error} If the schema is not valid
173
+ * @returns {Readonly<Record<string,StrictSchemaObject>>} Record of schema IDs to full schema objects
174
+ */
175
+ finalize() {
176
+ if (this.isFinalized()) {
177
+ return /** @type {Record<string,StrictSchemaObject>} */ (__classPrivateFieldGet(this, _AppiumSchema_finalizedSchemas, "f"));
178
+ }
179
+ const ajv = __classPrivateFieldGet(this, _AppiumSchema_ajv, "f");
180
+ // Ajv will _mutate_ the schema, so we need to clone it.
181
+ const baseSchema = lodash_1.default.cloneDeep(schema_1.AppiumConfigJsonSchema);
182
+ /**
183
+ *
184
+ * @param {SchemaObject} schema
185
+ * @param {ExtensionType} [extType]
186
+ * @param {string} [extName]
187
+ */
188
+ const addArgSpecs = (schema, extType, extName) => {
189
+ for (let [propName, propSchema] of Object.entries(schema)) {
190
+ const argSpec = arg_spec_1.ArgSpec.create(propName, {
191
+ dest: propSchema.appiumCliDest,
192
+ defaultValue: propSchema.default,
193
+ extType,
194
+ extName,
195
+ });
196
+ const { arg } = argSpec;
197
+ __classPrivateFieldGet(this, _AppiumSchema_argSpecs, "f").set(arg, argSpec);
198
+ }
199
+ };
200
+ addArgSpecs(lodash_1.default.omit(baseSchema.properties.server.properties, [constants_1.DRIVER_TYPE, constants_1.PLUGIN_TYPE]));
201
+ /**
202
+ * @type {Record<string,StrictSchemaObject>}
203
+ */
204
+ const finalizedSchemas = {};
205
+ const finalSchema = lodash_1.default.reduce(__classPrivateFieldGet(this, _AppiumSchema_registeredSchemas, "f"),
206
+ /**
207
+ * @param {typeof baseSchema} baseSchema
208
+ * @param {Map<string,SchemaObject>} extensionSchemas
209
+ * @param {ExtensionType} extType
210
+ */
211
+ (baseSchema, extensionSchemas, extType) => {
212
+ extensionSchemas.forEach((schema, extName) => {
213
+ const $ref = arg_spec_1.ArgSpec.toSchemaBaseRef(extType, extName);
214
+ schema.$id = $ref;
215
+ schema.additionalProperties = false; // this makes `schema` become a `StrictSchemaObject`
216
+ baseSchema.properties.server.properties[extType].properties[extName] = {
217
+ $ref,
218
+ $comment: extName,
219
+ };
220
+ ajv.validateSchema(schema, true);
221
+ addArgSpecs(schema.properties, extType, extName);
222
+ ajv.addSchema(schema, $ref);
223
+ finalizedSchemas[$ref] = /** @type {StrictSchemaObject} */ (schema);
224
+ });
225
+ return baseSchema;
226
+ }, baseSchema);
227
+ ajv.addSchema(finalSchema, arg_spec_1.APPIUM_CONFIG_SCHEMA_ID);
228
+ finalizedSchemas[arg_spec_1.APPIUM_CONFIG_SCHEMA_ID] = finalSchema;
229
+ ajv.validateSchema(finalSchema, true);
230
+ __classPrivateFieldSet(this, _AppiumSchema_finalizedSchemas, finalizedSchemas, "f");
231
+ return Object.freeze(finalizedSchemas);
232
+ }
233
+ /**
234
+ * Configures and creates an Ajv instance.
235
+ * @private
236
+ * @returns {Ajv}
237
+ */
238
+ static _instantiateAjv() {
239
+ const ajv = (0, ajv_formats_1.default)(new ajv_1.default({
240
+ // without this not much validation actually happens
241
+ allErrors: true,
242
+ }));
243
+ // add custom keywords to ajv. see schema-keywords.js
244
+ lodash_1.default.forEach(keywords_1.keywords, (keyword) => {
245
+ ajv.addKeyword(keyword);
246
+ });
247
+ return ajv;
248
+ }
249
+ /**
250
+ * Resets this instance to its original state.
251
+ *
252
+ * - Removes all added schemas from the `Ajv` instance
253
+ * - Resets the map of {@link ArgSpec ArgSpecs}
254
+ * - Resets the map of registered schemas
255
+ * - Sets the {@link AppiumSchema._finalized _finalized} flag to `false`
256
+ *
257
+ * If you need to call {@link AppiumSchema.finalize} again, you'll want to call this first.
258
+ * @returns {void}
259
+ */
260
+ reset() {
261
+ for (const schemaId of Object.keys(__classPrivateFieldGet(this, _AppiumSchema_finalizedSchemas, "f") ?? {})) {
262
+ __classPrivateFieldGet(this, _AppiumSchema_ajv, "f").removeSchema(schemaId);
263
+ }
264
+ __classPrivateFieldSet(this, _AppiumSchema_argSpecs, new RoachHotelMap(), "f");
265
+ __classPrivateFieldSet(this, _AppiumSchema_registeredSchemas, {
266
+ [constants_1.DRIVER_TYPE]: new Map(),
267
+ [constants_1.PLUGIN_TYPE]: new Map(),
268
+ }, "f");
269
+ __classPrivateFieldSet(this, _AppiumSchema_finalizedSchemas, null, "f");
270
+ // Ajv seems to have an over-eager cache, so we have to dump the object entirely.
271
+ __classPrivateFieldSet(this, _AppiumSchema_ajv, AppiumSchema._instantiateAjv(), "f");
272
+ }
273
+ /**
274
+ * Registers a schema from an extension.
275
+ *
276
+ * This is "fail-fast" in that the schema will immediately be validated against JSON schema draft-07 _or_ whatever the value of the schema's `$schema` prop is.
277
+ *
278
+ * Does _not_ add the schema to the `ajv` instance (this is done by {@link AppiumSchema.finalize}).
279
+ * @param {ExtensionType} extType - Extension type
280
+ * @param {string} extName - Unique extension name for `type`
281
+ * @param {SchemaObject} schema - Schema object
282
+ * @throws {SchemaNameConflictError} If the schema is an invalid
283
+ * @returns {void}
284
+ */
285
+ registerSchema(extType, extName, schema) {
286
+ if (!(extType && extName) || lodash_1.default.isUndefined(schema)) {
287
+ throw new TypeError('Expected extension type, extension name, and a defined schema');
288
+ }
289
+ if (!AppiumSchema.isSupportedSchemaType(schema)) {
290
+ throw new SchemaUnsupportedSchemaError(schema, extType, extName);
291
+ }
292
+ const normalizedExtName = lodash_1.default.kebabCase(extName);
293
+ if (this.hasRegisteredSchema(extType, normalizedExtName)) {
294
+ if (lodash_1.default.isEqual(__classPrivateFieldGet(this, _AppiumSchema_registeredSchemas, "f")[extType].get(normalizedExtName), schema)) {
295
+ return;
296
+ }
297
+ throw new SchemaNameConflictError(extType, extName);
298
+ }
299
+ __classPrivateFieldGet(this, _AppiumSchema_ajv, "f").validateSchema(schema, true);
300
+ __classPrivateFieldGet(this, _AppiumSchema_registeredSchemas, "f")[extType].set(normalizedExtName, schema);
301
+ }
302
+ /**
303
+ * Returns a {@link ArgSpec} for the given argument name.
304
+ * @param {string} name - CLI argument name
305
+ * @param {ExtensionType} [extType] - Extension type
306
+ * @param {string} [extName] - Extension name
307
+ * @returns {ArgSpec|undefined} ArgSpec or `undefined` if not found
308
+ */
309
+ getArgSpec(name, extType, extName) {
310
+ return __classPrivateFieldGet(this, _AppiumSchema_argSpecs, "f").get(arg_spec_1.ArgSpec.toArg(name, extType, extName));
311
+ }
312
+ /**
313
+ * Returns `true` if the instance knows about an argument by the given `name`.
314
+ * @param {string} name - CLI argument name
315
+ * @param {ExtensionType} [extType] - Extension type
316
+ * @param {string} [extName] - Extension name
317
+ * @returns {boolean} `true` if such an {@link ArgSpec} exists
318
+ */
319
+ hasArgSpec(name, extType, extName) {
320
+ return __classPrivateFieldGet(this, _AppiumSchema_argSpecs, "f").has(arg_spec_1.ArgSpec.toArg(name, extType, extName));
321
+ }
322
+ /**
323
+ * Returns a `Record` of argument "dest" strings to default values.
324
+ *
325
+ * The "dest" string is the property name in object returned by
326
+ * `argparse.ArgumentParser['parse_args']`.
327
+ * @template {boolean|undefined} Flattened
328
+ * @param {Flattened} [flatten=true] - If `true`, flattens the returned object
329
+ * using "keypath"-style keys of the format `<extType>.<extName>.<argName>`.
330
+ * Otherwise, returns a nested object using `extType` and `extName` as
331
+ * properties. Base arguments (server arguments) are always at the top level.
332
+ * @returns {DefaultValues<Flattened>}
333
+ */
334
+ getDefaults(flatten = /** @type {Flattened} */ (true)) {
335
+ if (!this.isFinalized()) {
336
+ throw new SchemaFinalizationError();
337
+ }
338
+ /**
339
+ * @private
340
+ * @callback DefaultReducer
341
+ * @param {DefaultValues<Flattened>} defaults
342
+ * @param {ArgSpec} argSpec
343
+ * @returns {DefaultValues<Flattened>}
344
+ */
345
+ /** @type {DefaultReducer} */
346
+ const reducer = flatten
347
+ ? (defaults, { defaultValue, dest }) => {
348
+ if (!lodash_1.default.isUndefined(defaultValue)) {
349
+ defaults[dest] = defaultValue;
350
+ }
351
+ return defaults;
352
+ }
353
+ : (defaults, { defaultValue, dest }) => {
354
+ if (!lodash_1.default.isUndefined(defaultValue)) {
355
+ lodash_1.default.set(defaults, dest, defaultValue);
356
+ }
357
+ return defaults;
358
+ };
359
+ /** @type {DefaultValues<Flattened>} */
360
+ const retval = {};
361
+ return [...__classPrivateFieldGet(this, _AppiumSchema_argSpecs, "f").values()].reduce(reducer, retval);
362
+ }
363
+ /**
364
+ * Returns a flattened Record of defaults for a specific extension. Keys will
365
+ * be of format `<argName>`.
366
+ * @param {ExtensionType} extType - Extension type
367
+ * @param {string} extName - Extension name
368
+ * @returns {Record<string,ArgSpecDefaultValue>}
369
+ */
370
+ getDefaultsForExtension(extType, extName) {
371
+ if (!this.isFinalized()) {
372
+ throw new SchemaFinalizationError();
373
+ }
374
+ const specs = [...__classPrivateFieldGet(this, _AppiumSchema_argSpecs, "f").values()].filter((spec) => spec.extType === extType && spec.extName === extName);
375
+ return specs.reduce((defaults, { defaultValue, rawDest }) => {
376
+ if (!lodash_1.default.isUndefined(defaultValue)) {
377
+ defaults[rawDest] = defaultValue;
378
+ }
379
+ return defaults;
380
+ }, {});
381
+ }
382
+ /**
383
+ * Flatten schema into an array of `SchemaObject`s and associated
384
+ * {@link ArgSpec ArgSpecs}.
385
+ *
386
+ * Converts nested extension schemas to keys based on the extension type and
387
+ * name. Used when translating to `argparse` options or getting the list of
388
+ * default values (see {@link AppiumSchema.getDefaults}) for CLI or otherwise.
389
+ *
390
+ * The return value is an intermediate reprsentation used by `cli-args`
391
+ * module's `toParserArgs`, which converts the finalized schema to parameters
392
+ * used by `argparse`.
393
+ * @throws If {@link AppiumSchema.finalize} has not been called yet.
394
+ * @returns {FlattenedSchema}
395
+ */
396
+ flatten() {
397
+ const schema = this.getSchema();
398
+ /** @type { {properties: SchemaObject, prefix: string[]}[] } */
399
+ const stack = [{ properties: schema.properties, prefix: [] }];
400
+ /** @type {FlattenedSchema} */
401
+ const flattened = [];
402
+ // this bit is a recursive algorithm rewritten as a for loop.
403
+ // when we find something we want to traverse, we add it to `stack`
404
+ for (const { properties, prefix } of stack) {
405
+ const pairs = lodash_1.default.toPairs(properties);
406
+ for (const [key, value] of pairs) {
407
+ if (key === SCHEMA_KEY) {
408
+ continue;
409
+ }
410
+ const { properties, $ref } = value;
411
+ if (properties) {
412
+ stack.push({
413
+ properties,
414
+ prefix: key === arg_spec_1.SERVER_PROP_NAME ? [] : [...prefix, key],
415
+ });
416
+ }
417
+ else if ($ref) {
418
+ let refSchema;
419
+ try {
420
+ refSchema = this.getSchema($ref);
421
+ }
422
+ catch (err) {
423
+ // this can happen if an extension schema supplies a $ref to a non-existent schema
424
+ throw new SchemaUnknownSchemaError($ref);
425
+ }
426
+ const { normalizedExtName } = arg_spec_1.ArgSpec.extensionInfoFromRootSchemaId($ref);
427
+ if (!normalizedExtName) {
428
+ /* istanbul ignore next */
429
+ throw new ReferenceError(`Could not determine extension name from schema ID ${$ref}. This is a bug.`);
430
+ }
431
+ stack.push({
432
+ properties: refSchema.properties,
433
+ prefix: [...prefix, key, normalizedExtName],
434
+ });
435
+ }
436
+ else if (key !== constants_1.DRIVER_TYPE && key !== constants_1.PLUGIN_TYPE) {
437
+ const [extType, extName] = prefix;
438
+ const argSpec = this.getArgSpec(key, /** @type {ExtensionType} */ (extType), extName);
439
+ if (!argSpec) {
440
+ /* istanbul ignore next */
441
+ throw new ReferenceError(`Unknown argument with key ${key}, extType ${extType} and extName ${extName}. This is a bug.`);
442
+ }
443
+ flattened.push({ schema: lodash_1.default.cloneDeep(value), argSpec });
444
+ }
445
+ }
446
+ }
447
+ return flattened;
448
+ }
449
+ /**
450
+ * Retrieves the schema itself
451
+ * @public
452
+ * @param {string} [ref] - Schema ID
453
+ * @throws If the schema has not yet been finalized
454
+ * @returns {SchemaObject}
455
+ */
456
+ getSchema(ref = arg_spec_1.APPIUM_CONFIG_SCHEMA_ID) {
457
+ return /** @type {SchemaObject} */ (this._getValidator(ref).schema);
458
+ }
459
+ /**
460
+ * Retrieves schema validator function from Ajv
461
+ * @param {string} [id] - Schema ID
462
+ * @private
463
+ * @returns {import('ajv').ValidateFunction}
464
+ */
465
+ _getValidator(id = arg_spec_1.APPIUM_CONFIG_SCHEMA_ID) {
466
+ const validator = __classPrivateFieldGet(this, _AppiumSchema_ajv, "f").getSchema(id);
467
+ if (!validator) {
468
+ if (id === arg_spec_1.APPIUM_CONFIG_SCHEMA_ID) {
469
+ throw new SchemaFinalizationError();
470
+ }
471
+ else {
472
+ throw new SchemaUnknownSchemaError(id);
473
+ }
474
+ }
475
+ return validator;
476
+ }
477
+ /**
478
+ * Given an object, validates it against the Appium config schema.
479
+ * If errors occur, the returned array will be non-empty.
480
+ * @param {any} value - The value (hopefully an object) to validate against the schema
481
+ * @param {string} [ref] - Schema ID or ref.
482
+ * @public
483
+ * @returns {import('ajv').ErrorObject[]} Array of errors, if any.
484
+ */
485
+ validate(value, ref = arg_spec_1.APPIUM_CONFIG_SCHEMA_ID) {
486
+ const validator = this._getValidator(ref);
487
+ return !validator(value) && lodash_1.default.isArray(validator.errors) ? [...validator.errors] : [];
488
+ }
489
+ /**
490
+ * Returns `true` if `filename`'s file extension is allowed (in {@link ALLOWED_SCHEMA_EXTENSIONS}).
491
+ * @param {import('type-fest').LiteralUnion<AllowedSchemaExtension, string>} filename
492
+ * @returns {boolean}
493
+ */
494
+ static isAllowedSchemaFileExtension(filename) {
495
+ return exports.ALLOWED_SCHEMA_EXTENSIONS.has(
496
+ /** @type {AllowedSchemaExtension} */ (path_1.default.extname(filename)));
497
+ }
498
+ /**
499
+ * Returns `true` if `schema` is a plain object with a non-true `$async` property.
500
+ * @param {any} schema - Schema to check
501
+ * @returns {schema is SchemaObject}
502
+ */
503
+ static isSupportedSchemaType(schema) {
504
+ return lodash_1.default.isPlainObject(schema) && schema.$async !== true;
505
+ }
506
+ }
507
+ _a = AppiumSchema, _AppiumSchema_argSpecs = new WeakMap(), _AppiumSchema_registeredSchemas = new WeakMap(), _AppiumSchema_ajv = new WeakMap(), _AppiumSchema_finalizedSchemas = new WeakMap();
508
+ /**
509
+ * Singleton instance.
510
+ * @type {AppiumSchema}
511
+ */
512
+ _AppiumSchema_instance = { value: void 0 };
513
+ /**
514
+ * Thrown when the {@link AppiumSchema} instance has not yet been finalized, but
515
+ * the method called requires it.
516
+ */
517
+ class SchemaFinalizationError extends Error {
518
+ constructor() {
519
+ super('Schema not yet finalized; `finalize()` must be called first.');
520
+ /**
521
+ * @type {Readonly<string>}
522
+ */
523
+ this.code = 'APPIUMERR_SCHEMA_FINALIZATION';
524
+ }
525
+ }
526
+ exports.SchemaFinalizationError = SchemaFinalizationError;
527
+ /**
528
+ * Thrown when a "unique" schema ID conflicts with an existing schema ID.
529
+ *
530
+ * This is likely going to be caused by attempting to register the same schema twice.
531
+ */
532
+ class SchemaNameConflictError extends Error {
533
+ /**
534
+ * @param {ExtensionType} extType
535
+ * @param {string} extName
536
+ */
537
+ constructor(extType, extName) {
538
+ super(`Name for ${extType} schema "${extName}" conflicts with an existing schema`);
539
+ /**
540
+ * @type {Readonly<string>}
541
+ */
542
+ this.code = 'APPIUMERR_SCHEMA_NAME_CONFLICT';
543
+ this.data = { extType, extName };
544
+ }
545
+ }
546
+ exports.SchemaNameConflictError = SchemaNameConflictError;
547
+ /**
548
+ * Thrown when a schema ID was expected, but it doesn't exist on the {@link Ajv} instance.
549
+ */
550
+ class SchemaUnknownSchemaError extends ReferenceError {
551
+ /**
552
+ * @param {string} schemaId
553
+ */
554
+ constructor(schemaId) {
555
+ super(`Unknown schema: "${schemaId}"`);
556
+ /**
557
+ * @type {Readonly<string>}
558
+ */
559
+ this.code = 'APPIUMERR_SCHEMA_UNKNOWN_SCHEMA';
560
+ this.data = { schemaId };
561
+ }
562
+ }
563
+ exports.SchemaUnknownSchemaError = SchemaUnknownSchemaError;
564
+ /**
565
+ * Thrown when a schema is provided, but it's of an unsupported type.
566
+ *
567
+ * "Valid" schemas which are unsupported include boolean schemas and async schemas
568
+ * (having a `true` `$async` property).
569
+ */
570
+ class SchemaUnsupportedSchemaError extends TypeError {
571
+ /**
572
+ * @param {any} schema
573
+ * @param {ExtensionType} extType
574
+ * @param {string} extName
575
+ */
576
+ constructor(schema, extType, extName) {
577
+ // https://github.com/Microsoft/TypeScript/issues/8277
578
+ super((() => {
579
+ let msg = `Unsupported schema from ${extType} "${extName}":`;
580
+ if (lodash_1.default.isBoolean(schema)) {
581
+ return `${msg} schema cannot be a boolean`;
582
+ }
583
+ if (lodash_1.default.isPlainObject(schema)) {
584
+ if (schema.$async) {
585
+ return `${msg} schema cannot be an async schema`;
586
+ }
587
+ /* istanbul ignore next */
588
+ throw new TypeError(`schema IS supported; this error should not be thrown (this is a bug). value of schema: ${JSON.stringify(schema)}`);
589
+ }
590
+ return `${msg} schema must be a plain object without a true "$async" property`;
591
+ })());
592
+ /**
593
+ * @type {Readonly<string>}
594
+ */
595
+ this.code = 'APPIUMERR_SCHEMA_UNSUPPORTED_SCHEMA';
596
+ this.data = { schema, extType, extName };
597
+ }
598
+ }
599
+ exports.SchemaUnsupportedSchemaError = SchemaUnsupportedSchemaError;
600
+ const appiumSchema = AppiumSchema.create();
601
+ exports.registerSchema = appiumSchema.registerSchema, exports.getAllArgSpecs = appiumSchema.getAllArgSpecs, exports.getArgSpec = appiumSchema.getArgSpec, exports.hasArgSpec = appiumSchema.hasArgSpec, exports.isFinalized = appiumSchema.isFinalized, exports.finalizeSchema = appiumSchema.finalize, exports.resetSchema = appiumSchema.reset, exports.validate = appiumSchema.validate, exports.getSchema = appiumSchema.getSchema, exports.flattenSchema = appiumSchema.flatten, exports.getDefaultsForSchema = appiumSchema.getDefaults, exports.getDefaultsForExtension = appiumSchema.getDefaultsForExtension;
602
+ exports.isAllowedSchemaFileExtension = AppiumSchema.isAllowedSchemaFileExtension;
603
+ /**
604
+ * Appium only supports schemas that are plain objects; not arrays.
605
+ * @typedef {import('ajv').SchemaObject & {[key: number]: never}} SchemaObject
606
+ */
607
+ /**
608
+ * @typedef {import('@appium/types').ExtensionType} ExtensionType
609
+ */
610
+ /**
611
+ * An object having property `additionalProperties: false`
612
+ * @typedef StrictProp
613
+ * @property {false} additionalProperties
614
+ */
615
+ /**
616
+ * A {@link SchemaObject} with `additionalProperties: false`
617
+ * @typedef {SchemaObject & StrictProp} StrictSchemaObject
618
+ */
619
+ /**
620
+ * A list of schemas associated with properties and their corresponding {@link ArgSpec} objects.
621
+ *
622
+ * Intermediate data structure used when converting the entire schema down to CLI arguments.
623
+ * @typedef { {schema: SchemaObject, argSpec: ArgSpec}[] } FlattenedSchema
624
+ */
625
+ /**
626
+ * @typedef {ArgSpec['defaultValue']} ArgSpecDefaultValue
627
+ */
628
+ /**
629
+ * e.g. `{driver: {foo: 'bar'}}` where `foo` is the arg name and `bar` is the default value.
630
+ * @typedef {Record<string,Record<string,ArgSpecDefaultValue>>} NestedArgSpecDefaultValue
631
+ */
632
+ /**
633
+ * Helper type for the return value of {@link AppiumSchema.getDefaults}
634
+ * @template {boolean|undefined} Flattened
635
+ * @typedef {Record<string,Flattened extends true ? ArgSpecDefaultValue : ArgSpecDefaultValue | NestedArgSpecDefaultValue>} DefaultValues
636
+ */
637
+ /**
638
+ * @typedef {'.json'|'.js'|'.cjs'} AllowedSchemaExtension
639
+ */
640
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../lib/schema/schema.js"],"names":[],"mappings":"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"}