appium 2.0.0-beta.3 → 2.0.0-beta.34

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 (149) hide show
  1. package/README.md +10 -11
  2. package/build/lib/appium.d.ts +215 -0
  3. package/build/lib/appium.d.ts.map +1 -0
  4. package/build/lib/appium.js +241 -132
  5. package/build/lib/cli/args.d.ts +20 -0
  6. package/build/lib/cli/args.d.ts.map +1 -0
  7. package/build/lib/cli/args.js +96 -282
  8. package/build/lib/cli/driver-command.d.ts +36 -0
  9. package/build/lib/cli/driver-command.d.ts.map +1 -0
  10. package/build/lib/cli/driver-command.js +19 -12
  11. package/build/lib/cli/extension-command.d.ts +345 -0
  12. package/build/lib/cli/extension-command.d.ts.map +1 -0
  13. package/build/lib/cli/extension-command.js +171 -96
  14. package/build/lib/cli/extension.d.ts +14 -0
  15. package/build/lib/cli/extension.d.ts.map +1 -0
  16. package/build/lib/cli/extension.js +31 -16
  17. package/build/lib/cli/parser.d.ts +80 -0
  18. package/build/lib/cli/parser.d.ts.map +1 -0
  19. package/build/lib/cli/parser.js +152 -95
  20. package/build/lib/cli/plugin-command.d.ts +39 -0
  21. package/build/lib/cli/plugin-command.d.ts.map +1 -0
  22. package/build/lib/cli/plugin-command.js +18 -13
  23. package/build/lib/cli/utils.d.ts +29 -0
  24. package/build/lib/cli/utils.d.ts.map +1 -0
  25. package/build/lib/cli/utils.js +27 -3
  26. package/build/lib/config-file.d.ts +100 -0
  27. package/build/lib/config-file.d.ts.map +1 -0
  28. package/build/lib/config-file.js +136 -0
  29. package/build/lib/config.d.ts +41 -0
  30. package/build/lib/config.d.ts.map +1 -0
  31. package/build/lib/config.js +92 -67
  32. package/build/lib/constants.d.ts +48 -0
  33. package/build/lib/constants.d.ts.map +1 -0
  34. package/build/lib/constants.js +60 -0
  35. package/build/lib/extension/driver-config.d.ts +84 -0
  36. package/build/lib/extension/driver-config.d.ts.map +1 -0
  37. package/build/lib/extension/driver-config.js +190 -0
  38. package/build/lib/extension/extension-config.d.ts +170 -0
  39. package/build/lib/extension/extension-config.d.ts.map +1 -0
  40. package/build/lib/extension/extension-config.js +297 -0
  41. package/build/lib/extension/index.d.ts +39 -0
  42. package/build/lib/extension/index.d.ts.map +1 -0
  43. package/build/lib/extension/index.js +77 -0
  44. package/build/lib/extension/manifest.d.ts +174 -0
  45. package/build/lib/extension/manifest.d.ts.map +1 -0
  46. package/build/lib/extension/manifest.js +246 -0
  47. package/build/lib/extension/package-changed.d.ts +11 -0
  48. package/build/lib/extension/package-changed.d.ts.map +1 -0
  49. package/build/lib/extension/package-changed.js +68 -0
  50. package/build/lib/extension/plugin-config.d.ts +62 -0
  51. package/build/lib/extension/plugin-config.d.ts.map +1 -0
  52. package/build/lib/extension/plugin-config.js +87 -0
  53. package/build/lib/grid-register.d.ts +10 -0
  54. package/build/lib/grid-register.d.ts.map +1 -0
  55. package/build/lib/grid-register.js +21 -25
  56. package/build/lib/logger.d.ts +3 -0
  57. package/build/lib/logger.d.ts.map +1 -0
  58. package/build/lib/logger.js +4 -6
  59. package/build/lib/logsink.d.ts +4 -0
  60. package/build/lib/logsink.d.ts.map +1 -0
  61. package/build/lib/logsink.js +12 -16
  62. package/build/lib/main.d.ts +54 -0
  63. package/build/lib/main.d.ts.map +1 -0
  64. package/build/lib/main.js +189 -90
  65. package/build/lib/schema/arg-spec.d.ts +143 -0
  66. package/build/lib/schema/arg-spec.d.ts.map +1 -0
  67. package/build/lib/schema/arg-spec.js +119 -0
  68. package/build/lib/schema/cli-args.d.ts +19 -0
  69. package/build/lib/schema/cli-args.d.ts.map +1 -0
  70. package/build/lib/schema/cli-args.js +180 -0
  71. package/build/lib/schema/cli-transformers.d.ts +5 -0
  72. package/build/lib/schema/cli-transformers.d.ts.map +1 -0
  73. package/build/lib/schema/cli-transformers.js +74 -0
  74. package/build/lib/schema/index.d.ts +3 -0
  75. package/build/lib/schema/index.d.ts.map +1 -0
  76. package/build/lib/schema/index.js +34 -0
  77. package/build/lib/schema/keywords.d.ts +24 -0
  78. package/build/lib/schema/keywords.d.ts.map +1 -0
  79. package/build/lib/schema/keywords.js +70 -0
  80. package/build/lib/schema/schema.d.ts +259 -0
  81. package/build/lib/schema/schema.d.ts.map +1 -0
  82. package/build/lib/schema/schema.js +452 -0
  83. package/build/lib/utils.d.ts +66 -0
  84. package/build/lib/utils.d.ts.map +1 -0
  85. package/build/lib/utils.js +35 -139
  86. package/build/tsconfig.tsbuildinfo +1 -0
  87. package/build/types/appium-manifest.d.ts +40 -0
  88. package/build/types/appium-manifest.d.ts.map +1 -0
  89. package/build/types/cli.d.ts +112 -0
  90. package/build/types/cli.d.ts.map +1 -0
  91. package/build/types/extension.d.ts +43 -0
  92. package/build/types/extension.d.ts.map +1 -0
  93. package/build/types/external-manifest.d.ts +47 -0
  94. package/build/types/external-manifest.d.ts.map +1 -0
  95. package/build/types/index.d.ts +15 -0
  96. package/build/types/index.d.ts.map +1 -0
  97. package/index.js +11 -0
  98. package/lib/appium-config.schema.json +278 -0
  99. package/lib/appium.js +402 -155
  100. package/lib/cli/args.js +174 -377
  101. package/lib/cli/driver-command.js +22 -7
  102. package/lib/cli/extension-command.js +372 -177
  103. package/lib/cli/extension.js +32 -10
  104. package/lib/cli/parser.js +253 -83
  105. package/lib/cli/plugin-command.js +19 -6
  106. package/lib/cli/utils.js +22 -2
  107. package/lib/config-file.js +223 -0
  108. package/lib/config.js +170 -69
  109. package/lib/constants.js +78 -0
  110. package/lib/extension/driver-config.js +249 -0
  111. package/lib/extension/extension-config.js +458 -0
  112. package/lib/extension/index.js +102 -0
  113. package/lib/extension/manifest.js +484 -0
  114. package/lib/extension/package-changed.js +63 -0
  115. package/lib/extension/plugin-config.js +113 -0
  116. package/lib/grid-register.js +25 -22
  117. package/lib/logger.js +1 -1
  118. package/lib/logsink.js +14 -7
  119. package/lib/main.js +255 -90
  120. package/lib/schema/arg-spec.js +232 -0
  121. package/lib/schema/cli-args.js +261 -0
  122. package/lib/schema/cli-transformers.js +122 -0
  123. package/lib/schema/index.js +2 -0
  124. package/lib/schema/keywords.js +134 -0
  125. package/lib/schema/schema.js +734 -0
  126. package/lib/utils.js +85 -129
  127. package/package.json +68 -85
  128. package/scripts/postinstall.js +71 -0
  129. package/types/appium-manifest.ts +61 -0
  130. package/types/cli.ts +153 -0
  131. package/types/extension.ts +56 -0
  132. package/types/external-manifest.ts +58 -0
  133. package/types/index.ts +14 -0
  134. package/CHANGELOG.md +0 -3515
  135. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  136. package/build/lib/cli/npm.js +0 -206
  137. package/build/lib/cli/parser-helpers.js +0 -82
  138. package/build/lib/driver-config.js +0 -77
  139. package/build/lib/drivers.js +0 -96
  140. package/build/lib/extension-config.js +0 -251
  141. package/build/lib/plugin-config.js +0 -59
  142. package/build/lib/plugins.js +0 -14
  143. package/lib/cli/npm.js +0 -183
  144. package/lib/cli/parser-helpers.js +0 -79
  145. package/lib/driver-config.js +0 -46
  146. package/lib/drivers.js +0 -81
  147. package/lib/extension-config.js +0 -208
  148. package/lib/plugin-config.js +0 -34
  149. package/lib/plugins.js +0 -10
@@ -0,0 +1,452 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.validate = exports.resetSchema = exports.registerSchema = exports.isFinalized = exports.isAllowedSchemaFileExtension = exports.hasArgSpec = exports.getSchema = exports.getDefaultsForSchema = exports.getDefaultsForExtension = exports.getArgSpec = exports.getAllArgSpecs = exports.flattenSchema = exports.finalizeSchema = exports.SchemaUnsupportedSchemaError = exports.SchemaUnknownSchemaError = exports.SchemaNameConflictError = exports.SchemaFinalizationError = exports.RoachHotelMap = exports.ALLOWED_SCHEMA_EXTENSIONS = void 0;
9
+
10
+ require("source-map-support/register");
11
+
12
+ var _ajv = _interopRequireDefault(require("ajv"));
13
+
14
+ var _ajvFormats = _interopRequireDefault(require("ajv-formats"));
15
+
16
+ var _lodash = _interopRequireDefault(require("lodash"));
17
+
18
+ var _path = _interopRequireDefault(require("path"));
19
+
20
+ var _constants = require("../constants");
21
+
22
+ var _schema = require("@appium/schema");
23
+
24
+ var _argSpec = require("./arg-spec");
25
+
26
+ var _keywords = require("./keywords");
27
+
28
+ class RoachHotelMap extends Map {
29
+ set(key, value) {
30
+ if (this.has(key)) {
31
+ throw new Error(`${key} is already set`);
32
+ }
33
+
34
+ return super.set(key, value);
35
+ }
36
+
37
+ delete(key) {
38
+ return false;
39
+ }
40
+
41
+ clear() {
42
+ throw new Error(`Cannot clear RoachHotelMap`);
43
+ }
44
+
45
+ }
46
+
47
+ exports.RoachHotelMap = RoachHotelMap;
48
+ const ALLOWED_SCHEMA_EXTENSIONS = new Set(['.json', '.js', '.cjs']);
49
+ exports.ALLOWED_SCHEMA_EXTENSIONS = ALLOWED_SCHEMA_EXTENSIONS;
50
+
51
+ class AppiumSchema {
52
+ _argSpecs = new RoachHotelMap();
53
+ _registeredSchemas = {
54
+ [_constants.DRIVER_TYPE]: new Map(),
55
+ [_constants.PLUGIN_TYPE]: new Map()
56
+ };
57
+ _ajv;
58
+ static _instance;
59
+ _finalizedSchemas = null;
60
+
61
+ constructor() {
62
+ this._ajv = AppiumSchema._instantiateAjv();
63
+ }
64
+
65
+ static create() {
66
+ if (!AppiumSchema._instance) {
67
+ const instance = new AppiumSchema();
68
+ AppiumSchema._instance = instance;
69
+
70
+ _lodash.default.bindAll(instance, ['finalize', 'flatten', 'getAllArgSpecs', 'getArgSpec', 'getDefaults', 'getDefaultsForExtension', 'getSchema', 'hasArgSpec', 'isFinalized', 'registerSchema', 'hasRegisteredSchema', 'reset', 'validate']);
71
+ }
72
+
73
+ return AppiumSchema._instance;
74
+ }
75
+
76
+ hasRegisteredSchema(extType, extName) {
77
+ return this._registeredSchemas[extType].has(extName);
78
+ }
79
+
80
+ isFinalized() {
81
+ return Boolean(this._finalizedSchemas);
82
+ }
83
+
84
+ getAllArgSpecs() {
85
+ return this._argSpecs;
86
+ }
87
+
88
+ finalize() {
89
+ if (this.isFinalized()) {
90
+ return this._finalizedSchemas;
91
+ }
92
+
93
+ const ajv = this._ajv;
94
+
95
+ const baseSchema = _lodash.default.cloneDeep(_schema.AppiumConfigJsonSchema);
96
+
97
+ const addArgSpecs = (schema, extType, extName) => {
98
+ for (let [propName, propSchema] of Object.entries(schema)) {
99
+ const argSpec = _argSpec.ArgSpec.create(propName, {
100
+ dest: propSchema.appiumCliDest,
101
+ defaultValue: propSchema.default,
102
+ extType,
103
+ extName
104
+ });
105
+
106
+ const {
107
+ arg
108
+ } = argSpec;
109
+
110
+ this._argSpecs.set(arg, argSpec);
111
+ }
112
+ };
113
+
114
+ addArgSpecs(_lodash.default.omit(baseSchema.properties.server.properties, [_constants.DRIVER_TYPE, _constants.PLUGIN_TYPE]));
115
+ const finalizedSchemas = {};
116
+
117
+ const finalSchema = _lodash.default.reduce(this._registeredSchemas, (baseSchema, extensionSchemas, extType) => {
118
+ extensionSchemas.forEach((schema, extName) => {
119
+ const $ref = _argSpec.ArgSpec.toSchemaBaseRef(extType, extName);
120
+
121
+ schema.$id = $ref;
122
+ schema.additionalProperties = false;
123
+ baseSchema.properties.server.properties[extType].properties[extName] = {
124
+ $ref,
125
+ $comment: extName
126
+ };
127
+ ajv.validateSchema(schema, true);
128
+ addArgSpecs(schema.properties, extType, extName);
129
+ ajv.addSchema(schema, $ref);
130
+ finalizedSchemas[$ref] = schema;
131
+ });
132
+ return baseSchema;
133
+ }, baseSchema);
134
+
135
+ ajv.addSchema(finalSchema, _argSpec.APPIUM_CONFIG_SCHEMA_ID);
136
+ finalizedSchemas[_argSpec.APPIUM_CONFIG_SCHEMA_ID] = finalSchema;
137
+ ajv.validateSchema(finalSchema, true);
138
+ this._finalizedSchemas = finalizedSchemas;
139
+ return Object.freeze(finalizedSchemas);
140
+ }
141
+
142
+ static _instantiateAjv() {
143
+ const ajv = (0, _ajvFormats.default)(new _ajv.default({
144
+ allErrors: true
145
+ }));
146
+
147
+ _lodash.default.forEach(_keywords.keywords, keyword => {
148
+ ajv.addKeyword(keyword);
149
+ });
150
+
151
+ return ajv;
152
+ }
153
+
154
+ reset() {
155
+ for (const schemaId of Object.keys((_this$_finalizedSchem = this._finalizedSchemas) !== null && _this$_finalizedSchem !== void 0 ? _this$_finalizedSchem : {})) {
156
+ var _this$_finalizedSchem;
157
+
158
+ this._ajv.removeSchema(schemaId);
159
+ }
160
+
161
+ this._argSpecs = new RoachHotelMap();
162
+ this._registeredSchemas = {
163
+ [_constants.DRIVER_TYPE]: new Map(),
164
+ [_constants.PLUGIN_TYPE]: new Map()
165
+ };
166
+ this._finalizedSchemas = null;
167
+ this._ajv = AppiumSchema._instantiateAjv();
168
+ }
169
+
170
+ registerSchema(extType, extName, schema) {
171
+ if (!(extType && extName) || _lodash.default.isUndefined(schema)) {
172
+ throw new TypeError('Expected extension type, extension name, and a defined schema');
173
+ }
174
+
175
+ if (!AppiumSchema.isSupportedSchemaType(schema)) {
176
+ throw new SchemaUnsupportedSchemaError(schema, extType, extName);
177
+ }
178
+
179
+ const normalizedExtName = _lodash.default.kebabCase(extName);
180
+
181
+ if (this.hasRegisteredSchema(extType, normalizedExtName)) {
182
+ if (this._registeredSchemas[extType].get(normalizedExtName) === schema) {
183
+ return;
184
+ }
185
+
186
+ throw new SchemaNameConflictError(extType, extName);
187
+ }
188
+
189
+ this._ajv.validateSchema(schema, true);
190
+
191
+ this._registeredSchemas[extType].set(normalizedExtName, schema);
192
+ }
193
+
194
+ getArgSpec(name, extType, extName) {
195
+ return this._argSpecs.get(_argSpec.ArgSpec.toArg(name, extType, extName));
196
+ }
197
+
198
+ hasArgSpec(name, extType, extName) {
199
+ return this._argSpecs.has(_argSpec.ArgSpec.toArg(name, extType, extName));
200
+ }
201
+
202
+ getDefaults(flatten = true) {
203
+ if (!this.isFinalized()) {
204
+ throw new SchemaFinalizationError();
205
+ }
206
+
207
+ const reducer = flatten ? (defaults, {
208
+ defaultValue,
209
+ dest
210
+ }) => {
211
+ if (!_lodash.default.isUndefined(defaultValue)) {
212
+ defaults[dest] = defaultValue;
213
+ }
214
+
215
+ return defaults;
216
+ } : (defaults, {
217
+ defaultValue,
218
+ dest
219
+ }) => {
220
+ if (!_lodash.default.isUndefined(defaultValue)) {
221
+ _lodash.default.set(defaults, dest, defaultValue);
222
+ }
223
+
224
+ return defaults;
225
+ };
226
+ const retval = {};
227
+ return [...this._argSpecs.values()].reduce(reducer, retval);
228
+ }
229
+
230
+ getDefaultsForExtension(extType, extName) {
231
+ if (!this.isFinalized()) {
232
+ throw new SchemaFinalizationError();
233
+ }
234
+
235
+ const specs = [...this._argSpecs.values()].filter(spec => spec.extType === extType && spec.extName === extName);
236
+ return specs.reduce((defaults, {
237
+ defaultValue,
238
+ rawDest
239
+ }) => {
240
+ if (!_lodash.default.isUndefined(defaultValue)) {
241
+ defaults[rawDest] = defaultValue;
242
+ }
243
+
244
+ return defaults;
245
+ }, {});
246
+ }
247
+
248
+ flatten() {
249
+ const schema = this.getSchema();
250
+ const stack = [{
251
+ properties: schema.properties,
252
+ prefix: []
253
+ }];
254
+ const flattened = [];
255
+
256
+ for (const {
257
+ properties,
258
+ prefix
259
+ } of stack) {
260
+ const pairs = _lodash.default.toPairs(properties);
261
+
262
+ for (const [key, value] of pairs) {
263
+ const {
264
+ properties,
265
+ $ref
266
+ } = value;
267
+
268
+ if (properties) {
269
+ stack.push({
270
+ properties,
271
+ prefix: key === _argSpec.SERVER_PROP_NAME ? [] : [...prefix, key]
272
+ });
273
+ } else if ($ref) {
274
+ let refSchema;
275
+
276
+ try {
277
+ refSchema = this.getSchema($ref);
278
+ } catch (err) {
279
+ throw new SchemaUnknownSchemaError($ref);
280
+ }
281
+
282
+ const {
283
+ normalizedExtName
284
+ } = _argSpec.ArgSpec.extensionInfoFromRootSchemaId($ref);
285
+
286
+ if (!normalizedExtName) {
287
+ throw new ReferenceError(`Could not determine extension name from schema ID ${$ref}. This is a bug.`);
288
+ }
289
+
290
+ stack.push({
291
+ properties: refSchema.properties,
292
+ prefix: [...prefix, key, normalizedExtName]
293
+ });
294
+ } else if (key !== _constants.DRIVER_TYPE && key !== _constants.PLUGIN_TYPE) {
295
+ const [extType, extName] = prefix;
296
+ const argSpec = this.getArgSpec(key, extType, extName);
297
+
298
+ if (!argSpec) {
299
+ throw new ReferenceError(`Unknown argument with key ${key}, extType ${extType} and extName ${extName}. This is a bug.`);
300
+ }
301
+
302
+ flattened.push({
303
+ schema: _lodash.default.cloneDeep(value),
304
+ argSpec
305
+ });
306
+ }
307
+ }
308
+ }
309
+
310
+ return flattened;
311
+ }
312
+
313
+ getSchema(ref = _argSpec.APPIUM_CONFIG_SCHEMA_ID) {
314
+ return this._getValidator(ref).schema;
315
+ }
316
+
317
+ _getValidator(id = _argSpec.APPIUM_CONFIG_SCHEMA_ID) {
318
+ const validator = this._ajv.getSchema(id);
319
+
320
+ if (!validator) {
321
+ if (id === _argSpec.APPIUM_CONFIG_SCHEMA_ID) {
322
+ throw new SchemaFinalizationError();
323
+ } else {
324
+ throw new SchemaUnknownSchemaError(id);
325
+ }
326
+ }
327
+
328
+ return validator;
329
+ }
330
+
331
+ validate(value, ref = _argSpec.APPIUM_CONFIG_SCHEMA_ID) {
332
+ const validator = this._getValidator(ref);
333
+
334
+ return !validator(value) && _lodash.default.isArray(validator.errors) ? [...validator.errors] : [];
335
+ }
336
+
337
+ static isAllowedSchemaFileExtension(filename) {
338
+ return ALLOWED_SCHEMA_EXTENSIONS.has(_path.default.extname(filename));
339
+ }
340
+
341
+ static isSupportedSchemaType(schema) {
342
+ return _lodash.default.isPlainObject(schema) && schema.$async !== true;
343
+ }
344
+
345
+ }
346
+
347
+ class SchemaFinalizationError extends Error {
348
+ code = 'APPIUMERR_SCHEMA_FINALIZATION';
349
+
350
+ constructor() {
351
+ super('Schema not yet finalized; `finalize()` must be called first.');
352
+ }
353
+
354
+ }
355
+
356
+ exports.SchemaFinalizationError = SchemaFinalizationError;
357
+
358
+ class SchemaNameConflictError extends Error {
359
+ code = 'APPIUMERR_SCHEMA_NAME_CONFLICT';
360
+ data;
361
+
362
+ constructor(extType, extName) {
363
+ super(`Name for ${extType} schema "${extName}" conflicts with an existing schema`);
364
+ this.data = {
365
+ extType,
366
+ extName
367
+ };
368
+ }
369
+
370
+ }
371
+
372
+ exports.SchemaNameConflictError = SchemaNameConflictError;
373
+
374
+ class SchemaUnknownSchemaError extends ReferenceError {
375
+ code = 'APPIUMERR_SCHEMA_UNKNOWN_SCHEMA';
376
+ data;
377
+
378
+ constructor(schemaId) {
379
+ super(`Unknown schema: "${schemaId}"`);
380
+ this.data = {
381
+ schemaId
382
+ };
383
+ }
384
+
385
+ }
386
+
387
+ exports.SchemaUnknownSchemaError = SchemaUnknownSchemaError;
388
+
389
+ class SchemaUnsupportedSchemaError extends TypeError {
390
+ code = 'APPIUMERR_SCHEMA_UNSUPPORTED_SCHEMA';
391
+ data;
392
+
393
+ constructor(schema, extType, extName) {
394
+ super((() => {
395
+ let msg = `Unsupported schema from ${extType} "${extName}":`;
396
+
397
+ if (_lodash.default.isBoolean(schema)) {
398
+ return `${msg} schema cannot be a boolean`;
399
+ }
400
+
401
+ if (_lodash.default.isPlainObject(schema)) {
402
+ if (schema.$async) {
403
+ return `${msg} schema cannot be an async schema`;
404
+ }
405
+
406
+ throw new TypeError(`schema IS supported; this error should not be thrown (this is a bug). value of schema: ${JSON.stringify(schema)}`);
407
+ }
408
+
409
+ return `${msg} schema must be a plain object without a true "$async" property`;
410
+ })());
411
+ this.data = {
412
+ schema,
413
+ extType,
414
+ extName
415
+ };
416
+ }
417
+
418
+ }
419
+
420
+ exports.SchemaUnsupportedSchemaError = SchemaUnsupportedSchemaError;
421
+ const appiumSchema = AppiumSchema.create();
422
+ const {
423
+ registerSchema,
424
+ getAllArgSpecs,
425
+ getArgSpec,
426
+ hasArgSpec,
427
+ isFinalized,
428
+ finalize: finalizeSchema,
429
+ reset: resetSchema,
430
+ validate,
431
+ getSchema,
432
+ flatten: flattenSchema,
433
+ getDefaults: getDefaultsForSchema,
434
+ getDefaultsForExtension
435
+ } = appiumSchema;
436
+ exports.getDefaultsForExtension = getDefaultsForExtension;
437
+ exports.getDefaultsForSchema = getDefaultsForSchema;
438
+ exports.flattenSchema = flattenSchema;
439
+ exports.getSchema = getSchema;
440
+ exports.validate = validate;
441
+ exports.resetSchema = resetSchema;
442
+ exports.finalizeSchema = finalizeSchema;
443
+ exports.isFinalized = isFinalized;
444
+ exports.hasArgSpec = hasArgSpec;
445
+ exports.getArgSpec = getArgSpec;
446
+ exports.getAllArgSpecs = getAllArgSpecs;
447
+ exports.registerSchema = registerSchema;
448
+ const {
449
+ isAllowedSchemaFileExtension
450
+ } = AppiumSchema;
451
+ exports.isAllowedSchemaFileExtension = isAllowedSchemaFileExtension;
452
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb2FjaEhvdGVsTWFwIiwiTWFwIiwic2V0Iiwia2V5IiwidmFsdWUiLCJoYXMiLCJFcnJvciIsImRlbGV0ZSIsImNsZWFyIiwiQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyIsIlNldCIsIkFwcGl1bVNjaGVtYSIsIl9hcmdTcGVjcyIsIl9yZWdpc3RlcmVkU2NoZW1hcyIsIkRSSVZFUl9UWVBFIiwiUExVR0lOX1RZUEUiLCJfYWp2IiwiX2luc3RhbmNlIiwiX2ZpbmFsaXplZFNjaGVtYXMiLCJjb25zdHJ1Y3RvciIsIl9pbnN0YW50aWF0ZUFqdiIsImNyZWF0ZSIsImluc3RhbmNlIiwiXyIsImJpbmRBbGwiLCJoYXNSZWdpc3RlcmVkU2NoZW1hIiwiZXh0VHlwZSIsImV4dE5hbWUiLCJpc0ZpbmFsaXplZCIsIkJvb2xlYW4iLCJnZXRBbGxBcmdTcGVjcyIsImZpbmFsaXplIiwiYWp2IiwiYmFzZVNjaGVtYSIsImNsb25lRGVlcCIsIkFwcGl1bUNvbmZpZ0pzb25TY2hlbWEiLCJhZGRBcmdTcGVjcyIsInNjaGVtYSIsInByb3BOYW1lIiwicHJvcFNjaGVtYSIsIk9iamVjdCIsImVudHJpZXMiLCJhcmdTcGVjIiwiQXJnU3BlYyIsImRlc3QiLCJhcHBpdW1DbGlEZXN0IiwiZGVmYXVsdFZhbHVlIiwiZGVmYXVsdCIsImFyZyIsIm9taXQiLCJwcm9wZXJ0aWVzIiwic2VydmVyIiwiZmluYWxpemVkU2NoZW1hcyIsImZpbmFsU2NoZW1hIiwicmVkdWNlIiwiZXh0ZW5zaW9uU2NoZW1hcyIsImZvckVhY2giLCIkcmVmIiwidG9TY2hlbWFCYXNlUmVmIiwiJGlkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCIkY29tbWVudCIsInZhbGlkYXRlU2NoZW1hIiwiYWRkU2NoZW1hIiwiQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQiLCJmcmVlemUiLCJBanYiLCJhbGxFcnJvcnMiLCJrZXl3b3JkcyIsImtleXdvcmQiLCJhZGRLZXl3b3JkIiwicmVzZXQiLCJzY2hlbWFJZCIsImtleXMiLCJyZW1vdmVTY2hlbWEiLCJyZWdpc3RlclNjaGVtYSIsImlzVW5kZWZpbmVkIiwiVHlwZUVycm9yIiwiaXNTdXBwb3J0ZWRTY2hlbWFUeXBlIiwiU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvciIsIm5vcm1hbGl6ZWRFeHROYW1lIiwia2ViYWJDYXNlIiwiZ2V0IiwiU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IiLCJnZXRBcmdTcGVjIiwibmFtZSIsInRvQXJnIiwiaGFzQXJnU3BlYyIsImdldERlZmF1bHRzIiwiZmxhdHRlbiIsIlNjaGVtYUZpbmFsaXphdGlvbkVycm9yIiwicmVkdWNlciIsImRlZmF1bHRzIiwicmV0dmFsIiwidmFsdWVzIiwiZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24iLCJzcGVjcyIsImZpbHRlciIsInNwZWMiLCJyYXdEZXN0IiwiZ2V0U2NoZW1hIiwic3RhY2siLCJwcmVmaXgiLCJmbGF0dGVuZWQiLCJwYWlycyIsInRvUGFpcnMiLCJwdXNoIiwiU0VSVkVSX1BST1BfTkFNRSIsInJlZlNjaGVtYSIsImVyciIsIlNjaGVtYVVua25vd25TY2hlbWFFcnJvciIsImV4dGVuc2lvbkluZm9Gcm9tUm9vdFNjaGVtYUlkIiwiUmVmZXJlbmNlRXJyb3IiLCJyZWYiLCJfZ2V0VmFsaWRhdG9yIiwiaWQiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZSIsImlzQXJyYXkiLCJlcnJvcnMiLCJpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uIiwiZmlsZW5hbWUiLCJwYXRoIiwiZXh0bmFtZSIsImlzUGxhaW5PYmplY3QiLCIkYXN5bmMiLCJjb2RlIiwiZGF0YSIsIm1zZyIsImlzQm9vbGVhbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJhcHBpdW1TY2hlbWEiLCJmaW5hbGl6ZVNjaGVtYSIsInJlc2V0U2NoZW1hIiwiZmxhdHRlblNjaGVtYSIsImdldERlZmF1bHRzRm9yU2NoZW1hIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NjaGVtYS9zY2hlbWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgQWp2IGZyb20gJ2Fqdic7XG5pbXBvcnQgYWRkRm9ybWF0cyBmcm9tICdhanYtZm9ybWF0cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwaXVtQ29uZmlnSnNvblNjaGVtYSB9IGZyb20gJ0BhcHBpdW0vc2NoZW1hJztcbmltcG9ydCB7IEFQUElVTV9DT05GSUdfU0NIRU1BX0lELCBBcmdTcGVjLCBTRVJWRVJfUFJPUF9OQU1FIH0gZnJvbSAnLi9hcmctc3BlYyc7XG5pbXBvcnQgeyBrZXl3b3JkcyB9IGZyb20gJy4va2V5d29yZHMnO1xuXG4vKipcbiAqIEtleS92YWx1ZSBwYWlycyBnbyBpbi4uLiBidXQgdGhleSBkb24ndCBjb21lIG91dC5cbiAqXG4gKiBAdGVtcGxhdGUgSyxWXG4gKiBAZXh0ZW5kcyB7TWFwPEssVj59XG4gKi9cbmV4cG9ydCBjbGFzcyBSb2FjaEhvdGVsTWFwIGV4dGVuZHMgTWFwIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7S30ga2V5XG4gICAqIEBwYXJhbSB7Vn0gdmFsdWVcbiAgICovXG4gIHNldCAoa2V5LCB2YWx1ZSkge1xuICAgIGlmICh0aGlzLmhhcyhrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7a2V5fSBpcyBhbHJlYWR5IHNldGApO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuc2V0KGtleSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7S30ga2V5XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZGVsZXRlIChrZXkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgUm9hY2hIb3RlbE1hcGApO1xuICB9XG59XG5cbi8qKlxuICogRXh0ZW5zaW9ucyB0aGF0IGFuIGV4dGVuc2lvbiBzY2hlbWEgZmlsZSBjYW4gaGF2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFsnLmpzb24nLCAnLmpzJywgJy5janMnXSk7XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBBanYgYW5kIHNjaGVtYS1yZWxhdGVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBTaG91bGQgaGF2ZSBiZWVuIG5hbWVkIEhpZ2hsYW5kZXIsIGJlY2F1c2UgX3RoZXJlIGNhbiBvbmx5IGJlIG9uZV9cbiAqL1xuY2xhc3MgQXBwaXVtU2NoZW1hIHtcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB1bmlxdWUgYXJndW1lbnQgSURzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcge0BsaW5rIEFyZ1NwZWN9cy5cbiAgICpcbiAgICogQW4gXCJhcmd1bWVudFwiIGlzIGEgQ0xJIGFyZ3VtZW50IG9yIGEgY29uZmlnIHByb3BlcnR5LlxuICAgKlxuICAgKiBVc2VkIHRvIHByb3ZpZGUgZWFzeSBsb29rdXBzIG9mIGFyZ3VtZW50IG1ldGFkYXRhIHdoZW4gY29udmVydGluZyBiZXR3ZWVuIGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnMgb2YgdGhvc2UgYXJndW1lbnRzLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7Um9hY2hIb3RlbE1hcDxzdHJpbmcsQXJnU3BlYz59XG4gICAqL1xuICBfYXJnU3BlY3MgPSBuZXcgUm9hY2hIb3RlbE1hcCgpO1xuXG4gIC8qKlxuICAgKiBBIG1hcCBvZiBleHRlbnNpb24gdHlwZXMgdG8gZXh0ZW5zaW9uIG5hbWVzIHRvIHNjaGVtYSBvYmplY3RzLlxuICAgKlxuICAgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHVzZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBuYW1pbmcgY29uZmxpY3RzLiBUaGUgc2NoZW1hc1xuICAgKiBhcmUgc3RvcmVkIGhlcmUgaW4gbWVtb3J5IHVudGlsIHRoZSBpbnN0YW5jZSBpcyBfZmluYWxpemVkXy5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlY29yZDxFeHRlbnNpb25UeXBlLE1hcDxzdHJpbmcsU2NoZW1hT2JqZWN0Pj59XG4gICAqL1xuICBfcmVnaXN0ZXJlZFNjaGVtYXMgPSB7W0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLCBbUExVR0lOX1RZUEVdOiBuZXcgTWFwKCl9O1xuXG4gIC8qKlxuICAgKiBBanYgaW5zdGFuY2VcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Fqdn1cbiAgICovXG4gIF9hanY7XG5cbiAgLyoqXG4gICAqIFNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0FwcGl1bVNjaGVtYX1cbiAgICovXG4gIHN0YXRpYyBfaW5zdGFuY2U7XG5cbiAgLyoqXG4gICAqIExvb2t1cCBvZiBzY2hlbWEgSURzIHRvIGZpbmFsaXplZCBzY2hlbWFzLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgcmVmZXJlbmNlcywgYnV0IHJhdGhlciB0aGUgcm9vdCBzY2hlbWFzIHRoZW1zZWx2ZXMuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD4/fVxuICAgKi9cbiAgX2ZpbmFsaXplZFNjaGVtYXMgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBBanYsIGFkZHMgc3RhbmRhcmQgZm9ybWF0cyBhbmQgb3VyIGN1c3RvbSBrZXl3b3Jkcy5cbiAgICogQHNlZSBodHRwczovL25wbS5pbS9hanYtZm9ybWF0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuX2FqdiA9IEFwcGl1bVNjaGVtYS5faW5zdGFudGlhdGVBanYoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IGZ1bmN0aW9uIGZvciB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2UgaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIGNyZWF0ZXMgYSBuZXcgb25lLlxuICAgKiBCaW5kcyBwdWJsaWMgbWV0aG9kcyB0byB0aGUgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtBcHBpdW1TY2hlbWF9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlICgpIHtcbiAgICBpZiAoIUFwcGl1bVNjaGVtYS5faW5zdGFuY2UpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEFwcGl1bVNjaGVtYSgpO1xuICAgICAgQXBwaXVtU2NoZW1hLl9pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgXy5iaW5kQWxsKGluc3RhbmNlLCBbXG4gICAgICAgICdmaW5hbGl6ZScsXG4gICAgICAgICdmbGF0dGVuJyxcbiAgICAgICAgJ2dldEFsbEFyZ1NwZWNzJyxcbiAgICAgICAgJ2dldEFyZ1NwZWMnLFxuICAgICAgICAnZ2V0RGVmYXVsdHMnLFxuICAgICAgICAnZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24nLFxuICAgICAgICAnZ2V0U2NoZW1hJyxcbiAgICAgICAgJ2hhc0FyZ1NwZWMnLFxuICAgICAgICAnaXNGaW5hbGl6ZWQnLFxuICAgICAgICAncmVnaXN0ZXJTY2hlbWEnLFxuICAgICAgICAnaGFzUmVnaXN0ZXJlZFNjaGVtYScsXG4gICAgICAgICdyZXNldCcsXG4gICAgICAgICd2YWxpZGF0ZScsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXBwaXVtU2NoZW1hLl9pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBhIHNjaGVtYSBoYXMgYmVlbiByZWdpc3RlcmVkIHVzaW5nIGdpdmVuIGV4dGVuc2lvbiB0eXBlIGFuZCBuYW1lLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgbm90IGRlcGVuZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgaW5zdGFuY2UgaGFzIGJlZW4gX2ZpbmFsaXplZF8uXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gTmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgcmVnaXN0ZXJlZFxuICAgKi9cbiAgaGFzUmVnaXN0ZXJlZFNjaGVtYSAoZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hc1tleHRUeXBlXS5oYXMoZXh0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGB0cnVlYCBpZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplIGZpbmFsaXplfSBoYXMgYmVlbiBjYWxsZWRcbiAgICogc3VjY2Vzc2Z1bGx5IGFuZCB7QGxpbmsgQXBwaXVtU2NoZW1hLnJlc2V0IHJlc2V0fSBoYXMgbm90IGJlZW4gY2FsbGVkIHNpbmNlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgZmluYWxpemVkXG4gICAqL1xuICBpc0ZpbmFsaXplZCAoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZmluYWxpemVkU2NoZW1hcyk7XG4gIH1cblxuICBnZXRBbGxBcmdTcGVjcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgdGhpcyB3aGVuIG5vIG1vcmUgc2NoZW1hcyB3aWxsIGJlIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIFRoaXMgZG9lcyB0aHJlZSB0aGluZ3M6XG4gICAqIDEuIEl0IGNvbWJpbmVzIGFsbCBzY2hlbWFzIGZyb20gZXh0ZW5zaW9ucyBpbnRvIHRoZSBBcHBpdW0gY29uZmlnIHNjaGVtYSxcbiAgICogICAgdGhlbiBhZGRzIHRoZSByZXN1bHQgdG8gdGhlIGBBanZgIGluc3RhbmNlLlxuICAgKiAyLiBJdCBhZGRzIHNjaGVtYXMgZm9yIF9lYWNoXyBhcmd1bWVudC9wcm9wZXJ0eSBmb3IgdmFsaWRhdGlvbiBwdXJwb3Nlcy5cbiAgICogICAgVGhlIENMSSB1c2VzIHRoZXNlIHNjaGVtYXMgdG8gdmFsaWRhdGUgc3BlY2lmaWMgYXJndW1lbnRzLlxuICAgKiAzLiBUaGUgc2NoZW1hcyBhcmUgdmFsaWRhdGVkIGFnYWluc3QgSlNPTiBzY2hlbWEgZHJhZnQtMDcgKHdoaWNoIGlzIHRoZVxuICAgKiAgICBvbmx5IG9uZSBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKVxuICAgKlxuICAgKiBBbnkgbWV0aG9kIGluIHRoaXMgaW5zdGFuY2UgdGhhdCBuZWVkcyB0byBpbnRlcmFjdCB3aXRoIHRoZSBgQWp2YCBpbnN0YW5jZVxuICAgKiB3aWxsIHRocm93IGlmIHRoaXMgbWV0aG9kIGhhcyBub3QgYmVlbiBjYWxsZWQuXG4gICAqXG4gICAqIElmIHRoZSBpbnN0YW5jZSBoYXMgYWxyZWFkeSBiZWVuIGZpbmFsaXplZCwgdGhpcyBpcyBhIG5vLW9wLlxuICAgKiBAcHVibGljXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgc2NoZW1hIGlzIG5vdCB2YWxpZFxuICAgKiBAcmV0dXJucyB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+Pn0gUmVjb3JkIG9mIHNjaGVtYSBJRHMgdG8gZnVsbCBzY2hlbWEgb2JqZWN0c1xuICAgKi9cbiAgZmluYWxpemUgKCkge1xuICAgIGlmICh0aGlzLmlzRmluYWxpemVkKCkpIHtcbiAgICAgIHJldHVybiAvKiogQHR5cGUge05vbk51bGxhYmxlPHR5cGVvZiB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzPn0gKi8gKFxuICAgICAgICB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGFqdiA9IHRoaXMuX2FqdjtcblxuICAgIC8vIEFqdiB3aWxsIF9tdXRhdGVfIHRoZSBzY2hlbWEsIHNvIHdlIG5lZWQgdG8gY2xvbmUgaXQuXG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IF8uY2xvbmVEZWVwKEFwcGl1bUNvbmZpZ0pzb25TY2hlbWEpO1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1NjaGVtYU9iamVjdH0gc2NoZW1hXG4gICAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV1cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdXG4gICAgICovXG4gICAgY29uc3QgYWRkQXJnU3BlY3MgPSAoc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKSA9PiB7XG4gICAgICBmb3IgKGxldCBbcHJvcE5hbWUsIHByb3BTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYSkpIHtcbiAgICAgICAgY29uc3QgYXJnU3BlYyA9IEFyZ1NwZWMuY3JlYXRlKHByb3BOYW1lLCB7XG4gICAgICAgICAgZGVzdDogcHJvcFNjaGVtYS5hcHBpdW1DbGlEZXN0LFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogcHJvcFNjaGVtYS5kZWZhdWx0LFxuICAgICAgICAgIGV4dFR5cGUsXG4gICAgICAgICAgZXh0TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHthcmd9ID0gYXJnU3BlYztcbiAgICAgICAgdGhpcy5fYXJnU3BlY3Muc2V0KGFyZywgYXJnU3BlYyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGFkZEFyZ1NwZWNzKFxuICAgICAgXy5vbWl0KGJhc2VTY2hlbWEucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllcywgW1xuICAgICAgICBEUklWRVJfVFlQRSxcbiAgICAgICAgUExVR0lOX1RZUEUsXG4gICAgICBdKSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pn1cbiAgICAgKi9cbiAgICBjb25zdCBmaW5hbGl6ZWRTY2hlbWFzID0ge307XG5cbiAgICBjb25zdCBmaW5hbFNjaGVtYSA9IF8ucmVkdWNlKFxuICAgICAgdGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXMsXG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSB7dHlwZW9mIGJhc2VTY2hlbWF9IGJhc2VTY2hlbWFcbiAgICAgICAqIEBwYXJhbSB7TWFwPHN0cmluZyxTY2hlbWFPYmplY3Q+fSBleHRlbnNpb25TY2hlbWFzXG4gICAgICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGVcbiAgICAgICAqL1xuICAgICAgKGJhc2VTY2hlbWEsIGV4dGVuc2lvblNjaGVtYXMsIGV4dFR5cGUpID0+IHtcbiAgICAgICAgZXh0ZW5zaW9uU2NoZW1hcy5mb3JFYWNoKChzY2hlbWEsIGV4dE5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCAkcmVmID0gQXJnU3BlYy50b1NjaGVtYUJhc2VSZWYoZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgICAgICAgc2NoZW1hLiRpZCA9ICRyZWY7XG4gICAgICAgICAgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZmFsc2U7IC8vIHRoaXMgbWFrZXMgYHNjaGVtYWAgYmVjb21lIGEgYFN0cmljdFNjaGVtYU9iamVjdGBcbiAgICAgICAgICBiYXNlU2NoZW1hLnByb3BlcnRpZXMuc2VydmVyLnByb3BlcnRpZXNbZXh0VHlwZV0ucHJvcGVydGllc1tleHROYW1lXSA9XG4gICAgICAgICAgICB7JHJlZiwgJGNvbW1lbnQ6IGV4dE5hbWV9O1xuICAgICAgICAgIGFqdi52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuICAgICAgICAgIGFkZEFyZ1NwZWNzKHNjaGVtYS5wcm9wZXJ0aWVzLCBleHRUeXBlLCBleHROYW1lKTtcbiAgICAgICAgICBhanYuYWRkU2NoZW1hKHNjaGVtYSwgJHJlZik7XG4gICAgICAgICAgZmluYWxpemVkU2NoZW1hc1skcmVmXSA9IC8qKiBAdHlwZSB7U3RyaWN0U2NoZW1hT2JqZWN0fSAqLyAoc2NoZW1hKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBiYXNlU2NoZW1hO1xuICAgICAgfSxcbiAgICAgIGJhc2VTY2hlbWEsXG4gICAgKTtcblxuICAgIGFqdi5hZGRTY2hlbWEoZmluYWxTY2hlbWEsIEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKTtcbiAgICBmaW5hbGl6ZWRTY2hlbWFzW0FQUElVTV9DT05GSUdfU0NIRU1BX0lEXSA9IGZpbmFsU2NoZW1hO1xuICAgIGFqdi52YWxpZGF0ZVNjaGVtYShmaW5hbFNjaGVtYSwgdHJ1ZSk7XG5cbiAgICB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzID0gZmluYWxpemVkU2NoZW1hcztcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShmaW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIGFuZCBjcmVhdGVzIGFuIEFqdiBpbnN0YW5jZS5cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge0Fqdn1cbiAgICovXG4gIHN0YXRpYyBfaW5zdGFudGlhdGVBanYgKCkge1xuICAgIGNvbnN0IGFqdiA9IGFkZEZvcm1hdHMoXG4gICAgICBuZXcgQWp2KHtcbiAgICAgICAgLy8gd2l0aG91dCB0aGlzIG5vdCBtdWNoIHZhbGlkYXRpb24gYWN0dWFsbHkgaGFwcGVuc1xuICAgICAgICBhbGxFcnJvcnM6IHRydWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gYWRkIGN1c3RvbSBrZXl3b3JkcyB0byBhanYuIHNlZSBzY2hlbWEta2V5d29yZHMuanNcbiAgICBfLmZvckVhY2goa2V5d29yZHMsIChrZXl3b3JkKSA9PiB7XG4gICAgICBhanYuYWRkS2V5d29yZChrZXl3b3JkKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhanY7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoaXMgaW5zdGFuY2UgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLlxuICAgKlxuICAgKiAtIFJlbW92ZXMgYWxsIGFkZGVkIHNjaGVtYXMgZnJvbSB0aGUgYEFqdmAgaW5zdGFuY2VcbiAgICogLSBSZXNldHMgdGhlIG1hcCBvZiB7QGxpbmsgQXJnU3BlYyBBcmdTcGVjc31cbiAgICogLSBSZXNldHMgdGhlIG1hcCBvZiByZWdpc3RlcmVkIHNjaGVtYXNcbiAgICogLSBTZXRzIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hLl9maW5hbGl6ZWQgX2ZpbmFsaXplZH0gZmxhZyB0byBgZmFsc2VgXG4gICAqXG4gICAqIElmIHlvdSBuZWVkIHRvIGNhbGwge0BsaW5rIEFwcGl1bVNjaGVtYS5maW5hbGl6ZX0gYWdhaW4sIHlvdSdsbCB3YW50IHRvIGNhbGwgdGhpcyBmaXJzdC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZXNldCAoKSB7XG4gICAgZm9yIChjb25zdCBzY2hlbWFJZCBvZiBPYmplY3Qua2V5cyh0aGlzLl9maW5hbGl6ZWRTY2hlbWFzID8/IHt9KSkge1xuICAgICAgdGhpcy5fYWp2LnJlbW92ZVNjaGVtYShzY2hlbWFJZCk7XG4gICAgfVxuICAgIHRoaXMuX2FyZ1NwZWNzID0gbmV3IFJvYWNoSG90ZWxNYXAoKTtcbiAgICB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hcyA9IHtcbiAgICAgIFtEUklWRVJfVFlQRV06IG5ldyBNYXAoKSxcbiAgICAgIFtQTFVHSU5fVFlQRV06IG5ldyBNYXAoKSxcbiAgICB9O1xuICAgIHRoaXMuX2ZpbmFsaXplZFNjaGVtYXMgPSBudWxsO1xuXG4gICAgLy8gQWp2IHNlZW1zIHRvIGhhdmUgYW4gb3Zlci1lYWdlciBjYWNoZSwgc28gd2UgaGF2ZSB0byBkdW1wIHRoZSBvYmplY3QgZW50aXJlbHkuXG4gICAgdGhpcy5fYWp2ID0gQXBwaXVtU2NoZW1hLl9pbnN0YW50aWF0ZUFqdigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHNjaGVtYSBmcm9tIGFuIGV4dGVuc2lvbi5cbiAgICpcbiAgICogVGhpcyBpcyBcImZhaWwtZmFzdFwiIGluIHRoYXQgdGhlIHNjaGVtYSB3aWxsIGltbWVkaWF0ZWx5IGJlIHZhbGlkYXRlZCBhZ2FpbnN0IEpTT04gc2NoZW1hIGRyYWZ0LTA3IF9vcl8gd2hhdGV2ZXIgdGhlIHZhbHVlIG9mIHRoZSBzY2hlbWEncyBgJHNjaGVtYWAgcHJvcCBpcy5cbiAgICpcbiAgICogRG9lcyBfbm90XyBhZGQgdGhlIHNjaGVtYSB0byB0aGUgYGFqdmAgaW5zdGFuY2UgKHRoaXMgaXMgZG9uZSBieSB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSkuXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gVW5pcXVlIGV4dGVuc2lvbiBuYW1lIGZvciBgdHlwZWBcbiAgICogQHBhcmFtIHtTY2hlbWFPYmplY3R9IHNjaGVtYSAtIFNjaGVtYSBvYmplY3RcbiAgICogQHRocm93cyB7U2NoZW1hTmFtZUNvbmZsaWN0RXJyb3J9IElmIHRoZSBzY2hlbWEgaXMgYW4gaW52YWxpZFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHJlZ2lzdGVyU2NoZW1hIChleHRUeXBlLCBleHROYW1lLCBzY2hlbWEpIHtcbiAgICBpZiAoIShleHRUeXBlICYmIGV4dE5hbWUpIHx8IF8uaXNVbmRlZmluZWQoc2NoZW1hKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ0V4cGVjdGVkIGV4dGVuc2lvbiB0eXBlLCBleHRlbnNpb24gbmFtZSwgYW5kIGEgZGVmaW5lZCBzY2hlbWEnLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFBcHBpdW1TY2hlbWEuaXNTdXBwb3J0ZWRTY2hlbWFUeXBlKHNjaGVtYSkpIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWFVbnN1cHBvcnRlZFNjaGVtYUVycm9yKHNjaGVtYSwgZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRFeHROYW1lID0gXy5rZWJhYkNhc2UoZXh0TmFtZSk7XG4gICAgaWYgKHRoaXMuaGFzUmVnaXN0ZXJlZFNjaGVtYShleHRUeXBlLCBub3JtYWxpemVkRXh0TmFtZSkpIHtcbiAgICAgIGlmICh0aGlzLl9yZWdpc3RlcmVkU2NoZW1hc1tleHRUeXBlXS5nZXQobm9ybWFsaXplZEV4dE5hbWUpID09PSBzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFNjaGVtYU5hbWVDb25mbGljdEVycm9yKGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLl9hanYudmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0cnVlKTtcblxuICAgIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLnNldChub3JtYWxpemVkRXh0TmFtZSwgc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEge0BsaW5rIEFyZ1NwZWN9IGZvciB0aGUgZ2l2ZW4gYXJndW1lbnQgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDTEkgYXJndW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7QXJnU3BlY3x1bmRlZmluZWR9IEFyZ1NwZWMgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXRBcmdTcGVjIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzLmdldChBcmdTcGVjLnRvQXJnKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5zdGFuY2Uga25vd3MgYWJvdXQgYW4gYXJndW1lbnQgYnkgdGhlIGdpdmVuIGBuYW1lYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDTEkgYXJndW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHN1Y2ggYW4ge0BsaW5rIEFyZ1NwZWN9IGV4aXN0c1xuICAgKi9cbiAgaGFzQXJnU3BlYyAobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9hcmdTcGVjcy5oYXMoQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGBSZWNvcmRgIG9mIGFyZ3VtZW50IFwiZGVzdFwiIHN0cmluZ3MgdG8gZGVmYXVsdCB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBcImRlc3RcIiBzdHJpbmcgaXMgdGhlIHByb3BlcnR5IG5hbWUgaW4gb2JqZWN0IHJldHVybmVkIGJ5XG4gICAqIGBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlclsncGFyc2VfYXJncyddYC5cbiAgICogQHRlbXBsYXRlIHtib29sZWFufHVuZGVmaW5lZH0gRmxhdHRlbmVkXG4gICAqIEBwYXJhbSB7RmxhdHRlbmVkfSBbZmxhdHRlbj10cnVlXSAtIElmIGB0cnVlYCwgZmxhdHRlbnMgdGhlIHJldHVybmVkIG9iamVjdFxuICAgKiB1c2luZyBcImtleXBhdGhcIi1zdHlsZSBrZXlzIG9mIHRoZSBmb3JtYXQgYDxleHRUeXBlPi48ZXh0TmFtZT4uPGFyZ05hbWU+YC5cbiAgICogT3RoZXJ3aXNlLCByZXR1cm5zIGEgbmVzdGVkIG9iamVjdCB1c2luZyBgZXh0VHlwZWAgYW5kIGBleHROYW1lYCBhc1xuICAgKiBwcm9wZXJ0aWVzLiBCYXNlIGFyZ3VtZW50cyAoc2VydmVyIGFyZ3VtZW50cykgYXJlIGFsd2F5cyBhdCB0aGUgdG9wIGxldmVsLlxuICAgKiBAcmV0dXJucyB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fVxuICAgKi9cbiAgZ2V0RGVmYXVsdHMgKGZsYXR0ZW4gPSAvKiogQHR5cGUge0ZsYXR0ZW5lZH0gKi8gKHRydWUpKSB7XG4gICAgaWYgKCF0aGlzLmlzRmluYWxpemVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNhbGxiYWNrIERlZmF1bHRSZWR1Y2VyXG4gICAgICogQHBhcmFtIHtEZWZhdWx0VmFsdWVzPEZsYXR0ZW5lZD59IGRlZmF1bHRzXG4gICAgICogQHBhcmFtIHtBcmdTcGVjfSBhcmdTcGVjXG4gICAgICogQHJldHVybnMge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn1cbiAgICAgKi9cbiAgICAvKiogQHR5cGUge0RlZmF1bHRSZWR1Y2VyfSAqL1xuICAgIGNvbnN0IHJlZHVjZXIgPSBmbGF0dGVuXG4gICAgICA/IChkZWZhdWx0cywge2RlZmF1bHRWYWx1ZSwgZGVzdH0pID0+IHtcbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICBkZWZhdWx0c1tkZXN0XSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgICB9XG4gICAgICA6IChkZWZhdWx0cywge2RlZmF1bHRWYWx1ZSwgZGVzdH0pID0+IHtcbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICBfLnNldChkZWZhdWx0cywgZGVzdCwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgICB9O1xuXG4gICAgLyoqIEB0eXBlIHtEZWZhdWx0VmFsdWVzPEZsYXR0ZW5lZD59ICovXG4gICAgY29uc3QgcmV0dmFsID0ge307XG4gICAgcmV0dXJuIFsuLi50aGlzLl9hcmdTcGVjcy52YWx1ZXMoKV0ucmVkdWNlKHJlZHVjZXIsIHJldHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGZsYXR0ZW5lZCBSZWNvcmQgb2YgZGVmYXVsdHMgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLiBLZXlzIHdpbGxcbiAgICogYmUgb2YgZm9ybWF0IGA8YXJnTmFtZT5gLlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGUgLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLEFyZ1NwZWNEZWZhdWx0VmFsdWU+fVxuICAgKi9cbiAgZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24gKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBpZiAoIXRoaXMuaXNGaW5hbGl6ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgfVxuICAgIGNvbnN0IHNwZWNzID0gWy4uLnRoaXMuX2FyZ1NwZWNzLnZhbHVlcygpXS5maWx0ZXIoXG4gICAgICAoc3BlYykgPT4gc3BlYy5leHRUeXBlID09PSBleHRUeXBlICYmIHNwZWMuZXh0TmFtZSA9PT0gZXh0TmFtZSxcbiAgICApO1xuICAgIHJldHVybiBzcGVjcy5yZWR1Y2UoKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCByYXdEZXN0fSkgPT4ge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgZGVmYXVsdHNbcmF3RGVzdF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfSwge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW4gc2NoZW1hIGludG8gYW4gYXJyYXkgb2YgYFNjaGVtYU9iamVjdGBzIGFuZCBhc3NvY2lhdGVkXG4gICAqIHtAbGluayBBcmdTcGVjIEFyZ1NwZWNzfS5cbiAgICpcbiAgICogQ29udmVydHMgbmVzdGVkIGV4dGVuc2lvbiBzY2hlbWFzIHRvIGtleXMgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiB0eXBlIGFuZFxuICAgKiBuYW1lLiBVc2VkIHdoZW4gdHJhbnNsYXRpbmcgdG8gYGFyZ3BhcnNlYCBvcHRpb25zIG9yIGdldHRpbmcgdGhlIGxpc3Qgb2ZcbiAgICogZGVmYXVsdCB2YWx1ZXMgKHNlZSB7QGxpbmsgQXBwaXVtU2NoZW1hLmdldERlZmF1bHRzfSkgZm9yIENMSSBvciBvdGhlcndpc2UuXG4gICAqXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gaW50ZXJtZWRpYXRlIHJlcHJzZW50YXRpb24gdXNlZCBieSBgY2xpLWFyZ3NgXG4gICAqIG1vZHVsZSdzIGB0b1BhcnNlckFyZ3NgLCB3aGljaCBjb252ZXJ0cyB0aGUgZmluYWxpemVkIHNjaGVtYSB0byBwYXJhbWV0ZXJzXG4gICAqIHVzZWQgYnkgYGFyZ3BhcnNlYC5cbiAgICogQHRocm93cyBJZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSBoYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAgICogQHJldHVybnMge0ZsYXR0ZW5lZFNjaGVtYX1cbiAgICovXG4gIGZsYXR0ZW4gKCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hKCk7XG5cbiAgICAvKiogQHR5cGUgeyB7cHJvcGVydGllczogU2NoZW1hT2JqZWN0LCBwcmVmaXg6IHN0cmluZ1tdfVtdIH0gKi9cbiAgICBjb25zdCBzdGFjayA9IFt7cHJvcGVydGllczogc2NoZW1hLnByb3BlcnRpZXMsIHByZWZpeDogW119XTtcbiAgICAvKiogQHR5cGUge0ZsYXR0ZW5lZFNjaGVtYX0gKi9cbiAgICBjb25zdCBmbGF0dGVuZWQgPSBbXTtcblxuICAgIC8vIHRoaXMgYml0IGlzIGEgcmVjdXJzaXZlIGFsZ29yaXRobSByZXdyaXR0ZW4gYXMgYSBmb3IgbG9vcC5cbiAgICAvLyB3aGVuIHdlIGZpbmQgc29tZXRoaW5nIHdlIHdhbnQgdG8gdHJhdmVyc2UsIHdlIGFkZCBpdCB0byBgc3RhY2tgXG4gICAgZm9yIChjb25zdCB7cHJvcGVydGllcywgcHJlZml4fSBvZiBzdGFjaykge1xuICAgICAgY29uc3QgcGFpcnMgPSBfLnRvUGFpcnMocHJvcGVydGllcyk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBwYWlycykge1xuICAgICAgICBjb25zdCB7cHJvcGVydGllcywgJHJlZn0gPSB2YWx1ZTtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgICAgICBwcmVmaXg6IGtleSA9PT0gU0VSVkVSX1BST1BfTkFNRSA/IFtdIDogWy4uLnByZWZpeCwga2V5XSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgkcmVmKSB7XG4gICAgICAgICAgbGV0IHJlZlNjaGVtYTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVmU2NoZW1hID0gdGhpcy5nZXRTY2hlbWEoJHJlZik7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4gaWYgYW4gZXh0ZW5zaW9uIHNjaGVtYSBzdXBwbGllcyBhICRyZWYgdG8gYSBub24tZXhpc3RlbnQgc2NoZW1hXG4gICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yKCRyZWYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7bm9ybWFsaXplZEV4dE5hbWV9ID1cbiAgICAgICAgICAgIEFyZ1NwZWMuZXh0ZW5zaW9uSW5mb0Zyb21Sb290U2NoZW1hSWQoJHJlZik7XG4gICAgICAgICAgaWYgKCFub3JtYWxpemVkRXh0TmFtZSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcbiAgICAgICAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgZXh0ZW5zaW9uIG5hbWUgZnJvbSBzY2hlbWEgSUQgJHskcmVmfS4gVGhpcyBpcyBhIGJ1Zy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiByZWZTY2hlbWEucHJvcGVydGllcyxcbiAgICAgICAgICAgIHByZWZpeDogWy4uLnByZWZpeCwga2V5LCBub3JtYWxpemVkRXh0TmFtZV0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSBEUklWRVJfVFlQRSAmJiBrZXkgIT09IFBMVUdJTl9UWVBFKSB7XG4gICAgICAgICAgY29uc3QgW2V4dFR5cGUsIGV4dE5hbWVdID0gcHJlZml4O1xuICAgICAgICAgIGNvbnN0IGFyZ1NwZWMgPSB0aGlzLmdldEFyZ1NwZWMoXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAvKiogQHR5cGUge0V4dGVuc2lvblR5cGV9ICovIChleHRUeXBlKSxcbiAgICAgICAgICAgIGV4dE5hbWUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWFyZ1NwZWMpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXG4gICAgICAgICAgICAgIGBVbmtub3duIGFyZ3VtZW50IHdpdGgga2V5ICR7a2V5fSwgZXh0VHlwZSAke2V4dFR5cGV9IGFuZCBleHROYW1lICR7ZXh0TmFtZX0uIFRoaXMgaXMgYSBidWcuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHtzY2hlbWE6IF8uY2xvbmVEZWVwKHZhbHVlKSwgYXJnU3BlY30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHNjaGVtYSBpdHNlbGZcbiAgICogQHB1YmxpY1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlZl0gLSBTY2hlbWEgSURcbiAgICogQHRocm93cyBJZiB0aGUgc2NoZW1hIGhhcyBub3QgeWV0IGJlZW4gZmluYWxpemVkXG4gICAqIEByZXR1cm5zIHtTY2hlbWFPYmplY3R9XG4gICAqL1xuICBnZXRTY2hlbWEgKHJlZiA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7U2NoZW1hT2JqZWN0fSAqLyAodGhpcy5fZ2V0VmFsaWRhdG9yKHJlZikuc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgc2NoZW1hIHZhbGlkYXRvciBmdW5jdGlvbiBmcm9tIEFqdlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2lkXSAtIFNjaGVtYSBJRFxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCdhanYnKS5WYWxpZGF0ZUZ1bmN0aW9ufVxuICAgKi9cbiAgX2dldFZhbGlkYXRvciAoaWQgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuX2Fqdi5nZXRTY2hlbWEoaWQpO1xuICAgIGlmICghdmFsaWRhdG9yKSB7XG4gICAgICBpZiAoaWQgPT09IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgICAgIHRocm93IG5ldyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVVua25vd25TY2hlbWFFcnJvcihpZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYW4gb2JqZWN0LCB2YWxpZGF0ZXMgaXQgYWdhaW5zdCB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEuXG4gICAqIElmIGVycm9ycyBvY2N1ciwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgbm9uLWVtcHR5LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgKGhvcGVmdWxseSBhbiBvYmplY3QpIHRvIHZhbGlkYXRlIGFnYWluc3QgdGhlIHNjaGVtYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlZl0gLSBTY2hlbWEgSUQgb3IgcmVmLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IEFycmF5IG9mIGVycm9ycywgaWYgYW55LlxuICAgKi9cbiAgdmFsaWRhdGUgKHZhbHVlLCByZWYgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuX2dldFZhbGlkYXRvcihyZWYpO1xuICAgIHJldHVybiAhdmFsaWRhdG9yKHZhbHVlKSAmJiBfLmlzQXJyYXkodmFsaWRhdG9yLmVycm9ycylcbiAgICAgID8gWy4uLnZhbGlkYXRvci5lcnJvcnNdXG4gICAgICA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGBmaWxlbmFtZWAncyBmaWxlIGV4dGVuc2lvbiBpcyBhbGxvd2VkIChpbiB7QGxpbmsgQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OU30pLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbiAoZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUy5oYXMocGF0aC5leHRuYW1lKGZpbGVuYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYHNjaGVtYWAgaXMgYSBwbGFpbiBvYmplY3Qgd2l0aCBhIG5vbi10cnVlIGAkYXN5bmNgIHByb3BlcnR5LlxuICAgKiBAcGFyYW0ge2FueX0gc2NoZW1hIC0gU2NoZW1hIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIHtzY2hlbWEgaXMgU2NoZW1hT2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGlzU3VwcG9ydGVkU2NoZW1hVHlwZSAoc2NoZW1hKSB7XG4gICAgcmV0dXJuIF8uaXNQbGFpbk9iamVjdChzY2hlbWEpICYmIHNjaGVtYS4kYXN5bmMgIT09IHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiB0aGUge0BsaW5rIEFwcGl1bVNjaGVtYX0gaW5zdGFuY2UgaGFzIG5vdCB5ZXQgYmVlbiBmaW5hbGl6ZWQsIGJ1dFxuICogdGhlIG1ldGhvZCBjYWxsZWQgcmVxdWlyZXMgaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgY29kZSA9ICdBUFBJVU1FUlJfU0NIRU1BX0ZJTkFMSVpBVElPTic7XG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKCdTY2hlbWEgbm90IHlldCBmaW5hbGl6ZWQ7IGBmaW5hbGl6ZSgpYCBtdXN0IGJlIGNhbGxlZCBmaXJzdC4nKTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgXCJ1bmlxdWVcIiBzY2hlbWEgSUQgY29uZmxpY3RzIHdpdGggYW4gZXhpc3Rpbmcgc2NoZW1hIElELlxuICpcbiAqIFRoaXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGNhdXNlZCBieSBhdHRlbXB0aW5nIHRvIHJlZ2lzdGVyIHRoZSBzYW1lIHNjaGVtYSB0d2ljZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYU5hbWVDb25mbGljdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfTkFNRV9DT05GTElDVCc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7ZXh0VHlwZTogRXh0ZW5zaW9uVHlwZSwgZXh0TmFtZTogc3RyaW5nfT59XG4gICAqL1xuICBkYXRhO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICovXG4gIGNvbnN0cnVjdG9yIChleHRUeXBlLCBleHROYW1lKSB7XG4gICAgc3VwZXIoXG4gICAgICBgTmFtZSBmb3IgJHtleHRUeXBlfSBzY2hlbWEgXCIke2V4dE5hbWV9XCIgY29uZmxpY3RzIHdpdGggYW4gZXhpc3Rpbmcgc2NoZW1hYCxcbiAgICApO1xuICAgIHRoaXMuZGF0YSA9IHtleHRUeXBlLCBleHROYW1lfTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgc2NoZW1hIElEIHdhcyBleHBlY3RlZCwgYnV0IGl0IGRvZXNuJ3QgZXhpc3Qgb24gdGhlIHtAbGluayBBanZ9IGluc3RhbmNlLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yIGV4dGVuZHMgUmVmZXJlbmNlRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfVU5LTk9XTl9TQ0hFTUEnO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8e3NjaGVtYUlkOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWFJZFxuICAgKi9cbiAgY29uc3RydWN0b3IgKHNjaGVtYUlkKSB7XG4gICAgc3VwZXIoYFVua25vd24gc2NoZW1hOiBcIiR7c2NoZW1hSWR9XCJgKTtcbiAgICB0aGlzLmRhdGEgPSB7c2NoZW1hSWR9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzY2hlbWEgaXMgcHJvdmlkZWQsIGJ1dCBpdCdzIG9mIGFuIHVuc3VwcG9ydGVkIHR5cGUuXG4gKlxuICogXCJWYWxpZFwiIHNjaGVtYXMgd2hpY2ggYXJlIHVuc3VwcG9ydGVkIGluY2x1ZGUgYm9vbGVhbiBzY2hlbWFzIGFuZCBhc3luYyBzY2hlbWFzXG4gKiAoaGF2aW5nIGEgYHRydWVgIGAkYXN5bmNgIHByb3BlcnR5KS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYVVuc3VwcG9ydGVkU2NoZW1hRXJyb3IgZXh0ZW5kcyBUeXBlRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfVU5TVVBQT1JURURfU0NIRU1BJztcblxuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHtzY2hlbWE6IGFueSwgZXh0VHlwZTogRXh0ZW5zaW9uVHlwZSwgZXh0TmFtZTogc3RyaW5nfT59XG4gICAqL1xuICBkYXRhO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gc2NoZW1hXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKHNjaGVtYSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvODI3N1xuICAgIHN1cGVyKFxuICAgICAgKCgpID0+IHtcbiAgICAgICAgbGV0IG1zZyA9IGBVbnN1cHBvcnRlZCBzY2hlbWEgZnJvbSAke2V4dFR5cGV9IFwiJHtleHROYW1lfVwiOmA7XG4gICAgICAgIGlmIChfLmlzQm9vbGVhbihzY2hlbWEpKSB7XG4gICAgICAgICAgcmV0dXJuIGAke21zZ30gc2NoZW1hIGNhbm5vdCBiZSBhIGJvb2xlYW5gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzUGxhaW5PYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICAgIGlmIChzY2hlbWEuJGFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7bXNnfSBzY2hlbWEgY2Fubm90IGJlIGFuIGFzeW5jIHNjaGVtYWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBzY2hlbWEgSVMgc3VwcG9ydGVkOyB0aGlzIGVycm9yIHNob3VsZCBub3QgYmUgdGhyb3duICh0aGlzIGlzIGEgYnVnKS4gdmFsdWUgb2Ygc2NoZW1hOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICApfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7bXNnfSBzY2hlbWEgbXVzdCBiZSBhIHBsYWluIG9iamVjdCB3aXRob3V0IGEgdHJ1ZSBcIiRhc3luY1wiIHByb3BlcnR5YDtcbiAgICAgIH0pKCksXG4gICAgKTtcbiAgICB0aGlzLmRhdGEgPSB7c2NoZW1hLCBleHRUeXBlLCBleHROYW1lfTtcbiAgfVxufVxuXG5jb25zdCBhcHBpdW1TY2hlbWEgPSBBcHBpdW1TY2hlbWEuY3JlYXRlKCk7XG5cbmV4cG9ydCBjb25zdCB7XG4gIHJlZ2lzdGVyU2NoZW1hLFxuICBnZXRBbGxBcmdTcGVjcyxcbiAgZ2V0QXJnU3BlYyxcbiAgaGFzQXJnU3BlYyxcbiAgaXNGaW5hbGl6ZWQsXG4gIGZpbmFsaXplOiBmaW5hbGl6ZVNjaGVtYSxcbiAgcmVzZXQ6IHJlc2V0U2NoZW1hLFxuICB2YWxpZGF0ZSxcbiAgZ2V0U2NoZW1hLFxuICBmbGF0dGVuOiBmbGF0dGVuU2NoZW1hLFxuICBnZXREZWZhdWx0czogZ2V0RGVmYXVsdHNGb3JTY2hlbWEsXG4gIGdldERlZmF1bHRzRm9yRXh0ZW5zaW9uLFxufSA9IGFwcGl1bVNjaGVtYTtcbmV4cG9ydCBjb25zdCB7aXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbn0gPSBBcHBpdW1TY2hlbWE7XG5cbi8qKlxuICogQXBwaXVtIG9ubHkgc3VwcG9ydHMgc2NoZW1hcyB0aGF0IGFyZSBwbGFpbiBvYmplY3RzOyBub3QgYXJyYXlzLlxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0ICYge1trZXk6IG51bWJlcl06IG5ldmVyfX0gU2NoZW1hT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9leHRlbnNpb24vbWFuaWZlc3QnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cblxuLyoqXG4gKiBBbiBvYmplY3QgaGF2aW5nIHByb3BlcnR5IGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiBTdHJpY3RQcm9wXG4gKiBAcHJvcGVydHkge2ZhbHNlfSBhZGRpdGlvbmFsUHJvcGVydGllc1xuICovXG5cbi8qKlxuICogQSB7QGxpbmsgU2NoZW1hT2JqZWN0fSB3aXRoIGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiB7U2NoZW1hT2JqZWN0ICYgU3RyaWN0UHJvcH0gU3RyaWN0U2NoZW1hT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBBIGxpc3Qgb2Ygc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB7QGxpbmsgQXJnU3BlY30gb2JqZWN0cy5cbiAqXG4gKiBJbnRlcm1lZGlhdGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB3aGVuIGNvbnZlcnRpbmcgdGhlIGVudGlyZSBzY2hlbWEgZG93biB0byBDTEkgYXJndW1lbnRzLlxuICogQHR5cGVkZWYgeyB7c2NoZW1hOiBTY2hlbWFPYmplY3QsIGFyZ1NwZWM6IEFyZ1NwZWN9W10gfSBGbGF0dGVuZWRTY2hlbWFcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtBcmdTcGVjWydkZWZhdWx0VmFsdWUnXX0gQXJnU3BlY0RlZmF1bHRWYWx1ZVxuICovXG5cbi8qKlxuICogZS5nLiBge2RyaXZlcjoge2ZvbzogJ2Jhcid9fWAgd2hlcmUgYGZvb2AgaXMgdGhlIGFyZyBuYW1lIGFuZCBgYmFyYCBpcyB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLFJlY29yZDxzdHJpbmcsQXJnU3BlY0RlZmF1bHRWYWx1ZT4+fSBOZXN0ZWRBcmdTcGVjRGVmYXVsdFZhbHVlXG4gKi9cblxuLyoqXG4gKiBIZWxwZXIgdHlwZSBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmdldERlZmF1bHRzfVxuICogQHRlbXBsYXRlIHtib29sZWFufHVuZGVmaW5lZH0gRmxhdHRlbmVkXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZyxGbGF0dGVuZWQgZXh0ZW5kcyB0cnVlID8gQXJnU3BlY0RlZmF1bHRWYWx1ZSA6IEFyZ1NwZWNEZWZhdWx0VmFsdWUgfCBOZXN0ZWRBcmdTcGVjRGVmYXVsdFZhbHVlPn0gRGVmYXVsdFZhbHVlc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBUU8sTUFBTUEsYUFBTixTQUE0QkMsR0FBNUIsQ0FBZ0M7RUFLckNDLEdBQUcsQ0FBRUMsR0FBRixFQUFPQyxLQUFQLEVBQWM7SUFDZixJQUFJLEtBQUtDLEdBQUwsQ0FBU0YsR0FBVCxDQUFKLEVBQW1CO01BQ2pCLE1BQU0sSUFBSUcsS0FBSixDQUFXLEdBQUVILEdBQUksaUJBQWpCLENBQU47SUFDRDs7SUFDRCxPQUFPLE1BQU1ELEdBQU4sQ0FBVUMsR0FBVixFQUFlQyxLQUFmLENBQVA7RUFDRDs7RUFNREcsTUFBTSxDQUFFSixHQUFGLEVBQU87SUFDWCxPQUFPLEtBQVA7RUFDRDs7RUFFREssS0FBSyxHQUFJO0lBQ1AsTUFBTSxJQUFJRixLQUFKLENBQVcsNEJBQVgsQ0FBTjtFQUNEOztBQXRCb0M7OztBQTRCaEMsTUFBTUcseUJBQXlCLEdBQUcsSUFBSUMsR0FBSixDQUFRLENBQUMsT0FBRCxFQUFVLEtBQVYsRUFBaUIsTUFBakIsQ0FBUixDQUFsQzs7O0FBT1AsTUFBTUMsWUFBTixDQUFtQjtFQVVqQkMsU0FBUyxHQUFHLElB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
@@ -0,0 +1,66 @@
1
+ export type ParsedDriverCaps = {
2
+ desiredCaps: Capabilities;
3
+ protocol: string;
4
+ processedJsonwpCapabilities?: any;
5
+ processedW3CCapabilities?: W3CCapabilities | undefined;
6
+ };
7
+ export type InvalidCaps = {
8
+ error: Error;
9
+ protocol: string;
10
+ desiredCaps?: Partial<import("@wdio/types/build/Capabilities").Capabilities & import("@wdio/types/build/Capabilities").AppiumCapabilities & {
11
+ [x: string]: any;
12
+ }> | undefined;
13
+ processedJsonwpCapabilities?: any;
14
+ processedW3CCapabilities?: W3CCapabilities | undefined;
15
+ };
16
+ export type W3CCapabilities = import('@appium/types').W3CCapabilities;
17
+ export type Capabilities = import('@appium/types').Capabilities;
18
+ export type AppiumW3CCapabilities = import('@appium/types').AppiumW3CCapabilities;
19
+ /**
20
+ * Dumps to value to the console using `info` logger.
21
+ *
22
+ * @todo May want to force color to be `false` if {@link isStdoutTTY} is `false`.
23
+ */
24
+ export const inspect: (t1: any) => void;
25
+ /**
26
+ * Takes the caps that were provided in the request and translates them
27
+ * into caps that can be used by the inner drivers.
28
+ *
29
+ * @param {any} jsonwpCapabilities
30
+ * @param {W3CCapabilities} w3cCapabilities
31
+ * @param {import('@appium/types').Constraints} constraints
32
+ * @param {import('@appium/types').DefaultCapabilitiesConfig} [defaultCapabilities]
33
+ * @returns {ParsedDriverCaps|InvalidCaps}
34
+ */
35
+ export function parseCapsForInnerDriver(jsonwpCapabilities: any, w3cCapabilities: W3CCapabilities, constraints?: import('@appium/types').Constraints, defaultCapabilities?: import("@appium/types").DefaultCapabilitiesConfig | undefined): ParsedDriverCaps | InvalidCaps;
36
+ /**
37
+ * Takes a capabilities objects and prefixes capabilities with `appium:`
38
+ * @param {Capabilities} caps Desired capabilities object
39
+ * @returns {AppiumW3CCapabilities}
40
+ */
41
+ export function insertAppiumPrefixes(caps: Capabilities): AppiumW3CCapabilities;
42
+ export function getPackageVersion(pkgName: any): any;
43
+ /**
44
+ * Pulls the initial values of Appium settings from the given capabilities argument.
45
+ * Each setting item must satisfy the following format:
46
+ * `setting[setting_name]: setting_value`
47
+ * The capabilities argument itself gets mutated, so it does not contain parsed
48
+ * settings anymore to avoid further parsing issues.
49
+ * Check
50
+ * https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/settings.md
51
+ * for more details on the available settings.
52
+ *
53
+ * @param {?Object} caps - Capabilities dictionary. It is mutated if
54
+ * one or more settings have been pulled from it
55
+ * @return {Object} - An empty dictionary if the given caps contains no
56
+ * setting items or a dictionary containing parsed Appium setting names along with
57
+ * their values.
58
+ */
59
+ export function pullSettings(caps: any | null): any;
60
+ /**
61
+ *
62
+ * @param {AppiumW3CCapabilities} caps
63
+ * @returns {Capabilities}
64
+ */
65
+ export function removeAppiumPrefixes(caps: AppiumW3CCapabilities): Capabilities;
66
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":";iBAwOc,YAAY;cACZ,MAAM;kCACN,GAAG;;;;WAOH,KAAK;cACL,MAAM;;;;kCAEN,GAAG;;;8BAKJ,OAAO,eAAe,EAAE,eAAe;2BACvC,OAAO,eAAe,EAAE,YAAY;oCACpC,OAAO,eAAe,EAAE,qBAAqB;AA1O1D;;;;GAIG;AACH,wCAOK;AAEL;;;;;;;;;GASG;AACH,4DANW,GAAG,mBACH,eAAe,gBACf,OAAO,eAAe,EAAE,WAAW,wFAEjC,gBAAgB,GAAC,WAAW,CA2FxC;AAED;;;;GAIG;AACH,2CAHW,YAAY,GACV,qBAAqB,CAyBjC;AAyBD,qDAGC;AAED;;;;;;;;;;;;;;;GAeG;AACH,oDAgBC;AA5DD;;;;GAIG;AACH,2CAHW,qBAAqB,GACnB,YAAY,CAaxB"}