appium 2.0.0-beta.44 → 2.0.0-beta.46

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 (72) hide show
  1. package/build/lib/appium.d.ts +137 -14
  2. package/build/lib/appium.d.ts.map +1 -1
  3. package/build/lib/appium.js +5 -5
  4. package/build/lib/appium.js.map +1 -0
  5. package/build/lib/cli/args.js +3 -3
  6. package/build/lib/cli/args.js.map +1 -0
  7. package/build/lib/cli/driver-command.js +3 -3
  8. package/build/lib/cli/driver-command.js.map +1 -0
  9. package/build/lib/cli/extension-command.js +3 -3
  10. package/build/lib/cli/extension-command.js.map +1 -0
  11. package/build/lib/cli/extension.d.ts +2 -2
  12. package/build/lib/cli/extension.d.ts.map +1 -1
  13. package/build/lib/cli/extension.js +3 -3
  14. package/build/lib/cli/extension.js.map +1 -0
  15. package/build/lib/cli/parser.js +3 -3
  16. package/build/lib/cli/parser.js.map +1 -0
  17. package/build/lib/cli/plugin-command.js +3 -3
  18. package/build/lib/cli/plugin-command.js.map +1 -0
  19. package/build/lib/cli/utils.js +3 -3
  20. package/build/lib/cli/utils.js.map +1 -0
  21. package/build/lib/config-file.js +3 -3
  22. package/build/lib/config-file.js.map +1 -0
  23. package/build/lib/config.js +3 -3
  24. package/build/lib/config.js.map +1 -0
  25. package/build/lib/constants.js +3 -3
  26. package/build/lib/constants.js.map +1 -0
  27. package/build/lib/extension/driver-config.d.ts +3 -2
  28. package/build/lib/extension/driver-config.d.ts.map +1 -1
  29. package/build/lib/extension/driver-config.js +3 -3
  30. package/build/lib/extension/driver-config.js.map +1 -0
  31. package/build/lib/extension/extension-config.js +3 -3
  32. package/build/lib/extension/extension-config.js.map +1 -0
  33. package/build/lib/extension/index.js +3 -3
  34. package/build/lib/extension/index.js.map +1 -0
  35. package/build/lib/extension/manifest.d.ts +1 -2
  36. package/build/lib/extension/manifest.d.ts.map +1 -1
  37. package/build/lib/extension/manifest.js +35 -30
  38. package/build/lib/extension/manifest.js.map +1 -0
  39. package/build/lib/extension/package-changed.js +3 -3
  40. package/build/lib/extension/package-changed.js.map +1 -0
  41. package/build/lib/extension/plugin-config.js +3 -3
  42. package/build/lib/extension/plugin-config.js.map +1 -0
  43. package/build/lib/grid-register.js +3 -3
  44. package/build/lib/grid-register.js.map +1 -0
  45. package/build/lib/logger.js.map +1 -0
  46. package/build/lib/logsink.js +3 -3
  47. package/build/lib/logsink.js.map +1 -0
  48. package/build/lib/main.js +3 -3
  49. package/build/lib/main.js.map +1 -0
  50. package/build/lib/schema/arg-spec.js +3 -3
  51. package/build/lib/schema/arg-spec.js.map +1 -0
  52. package/build/lib/schema/cli-args.js +3 -3
  53. package/build/lib/schema/cli-args.js.map +1 -0
  54. package/build/lib/schema/cli-transformers.d.ts +1 -1
  55. package/build/lib/schema/cli-transformers.d.ts.map +1 -1
  56. package/build/lib/schema/cli-transformers.js +23 -18
  57. package/build/lib/schema/cli-transformers.js.map +1 -0
  58. package/build/lib/schema/index.js.map +1 -0
  59. package/build/lib/schema/keywords.js.map +1 -0
  60. package/build/lib/schema/schema.js +3 -3
  61. package/build/lib/schema/schema.js.map +1 -0
  62. package/build/lib/utils.d.ts +288 -27
  63. package/build/lib/utils.d.ts.map +1 -1
  64. package/build/lib/utils.js +7 -35
  65. package/build/lib/utils.js.map +1 -0
  66. package/build/tsconfig.tsbuildinfo +1 -1
  67. package/lib/appium.js +27 -18
  68. package/lib/extension/driver-config.js +2 -1
  69. package/lib/extension/manifest.js +49 -32
  70. package/lib/schema/cli-transformers.js +27 -24
  71. package/lib/utils.js +87 -66
  72. package/package.json +16 -15
@@ -1,21 +1,274 @@
1
- export type ParsedDriverCaps = {
2
- desiredCaps: Capabilities;
1
+ export type StringRecord = import('@appium/types').StringRecord;
2
+ export type BaseDriverCapConstraints = import('@appium/types').BaseDriverCapConstraints;
3
+ export type ParsedDriverCaps<C extends Readonly<Record<string, import("@appium/types").Constraint>> = {
4
+ readonly platformName: {
5
+ readonly presence: true;
6
+ readonly isString: true;
7
+ };
8
+ readonly app: {
9
+ readonly isString: true;
10
+ };
11
+ readonly deviceName: {
12
+ readonly isString: true;
13
+ };
14
+ readonly platformVersion: {
15
+ readonly isString: true;
16
+ };
17
+ readonly newCommandTimeout: {
18
+ readonly isNumber: true;
19
+ };
20
+ readonly automationName: {
21
+ readonly isString: true;
22
+ };
23
+ readonly autoLaunch: {
24
+ readonly isBoolean: true;
25
+ };
26
+ readonly udid: {
27
+ readonly isString: true;
28
+ };
29
+ readonly orientation: {
30
+ readonly inclusion: readonly ["LANDSCAPE", "PORTRAIT"];
31
+ };
32
+ readonly autoWebview: {
33
+ readonly isBoolean: true;
34
+ };
35
+ readonly noReset: {
36
+ readonly isBoolean: true;
37
+ };
38
+ readonly fullReset: {
39
+ readonly isBoolean: true;
40
+ };
41
+ readonly language: {
42
+ readonly isString: true;
43
+ };
44
+ readonly locale: {
45
+ readonly isString: true;
46
+ };
47
+ readonly eventTimings: {
48
+ readonly isBoolean: true;
49
+ };
50
+ readonly printPageSourceOnFindFailure: {
51
+ readonly isBoolean: true;
52
+ };
53
+ }, J = any> = {
54
+ desiredCaps: Capabilities<C>;
3
55
  protocol: string;
4
- processedJsonwpCapabilities?: any;
5
- processedW3CCapabilities?: W3CCapabilities | undefined;
56
+ processedJsonwpCapabilities?: J | undefined;
57
+ processedW3CCapabilities?: W3CCapabilities<C, void> | undefined;
6
58
  };
7
- export type InvalidCaps = {
59
+ export type InvalidCaps<C extends Readonly<Record<string, import("@appium/types").Constraint>> = {
60
+ readonly platformName: {
61
+ readonly presence: true;
62
+ readonly isString: true;
63
+ };
64
+ readonly app: {
65
+ readonly isString: true;
66
+ };
67
+ readonly deviceName: {
68
+ readonly isString: true;
69
+ };
70
+ readonly platformVersion: {
71
+ readonly isString: true;
72
+ };
73
+ readonly newCommandTimeout: {
74
+ readonly isNumber: true;
75
+ };
76
+ readonly automationName: {
77
+ readonly isString: true;
78
+ };
79
+ readonly autoLaunch: {
80
+ readonly isBoolean: true;
81
+ };
82
+ readonly udid: {
83
+ readonly isString: true;
84
+ };
85
+ readonly orientation: {
86
+ readonly inclusion: readonly ["LANDSCAPE", "PORTRAIT"];
87
+ };
88
+ readonly autoWebview: {
89
+ readonly isBoolean: true;
90
+ };
91
+ readonly noReset: {
92
+ readonly isBoolean: true;
93
+ };
94
+ readonly fullReset: {
95
+ readonly isBoolean: true;
96
+ };
97
+ readonly language: {
98
+ readonly isString: true;
99
+ };
100
+ readonly locale: {
101
+ readonly isString: true;
102
+ };
103
+ readonly eventTimings: {
104
+ readonly isBoolean: true;
105
+ };
106
+ readonly printPageSourceOnFindFailure: {
107
+ readonly isBoolean: true;
108
+ };
109
+ }, J = any> = {
8
110
  error: Error;
9
111
  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;
112
+ desiredCaps?: Partial<import("@appium/types").ConstraintsToCaps<C> & void> | undefined;
113
+ processedJsonwpCapabilities?: J | undefined;
114
+ processedW3CCapabilities?: W3CCapabilities<C, void> | undefined;
15
115
  };
16
- export type W3CCapabilities = import('@appium/types').W3CCapabilities;
17
- export type Capabilities = import('@appium/types').Capabilities;
18
- export type AppiumW3CCapabilities = import('@appium/types').AppiumW3CCapabilities;
116
+ export type Capabilities<C extends Readonly<Record<string, import("@appium/types").Constraint>> = {
117
+ readonly platformName: {
118
+ readonly presence: true;
119
+ readonly isString: true;
120
+ };
121
+ readonly app: {
122
+ readonly isString: true;
123
+ };
124
+ readonly deviceName: {
125
+ readonly isString: true;
126
+ };
127
+ readonly platformVersion: {
128
+ readonly isString: true;
129
+ };
130
+ readonly newCommandTimeout: {
131
+ readonly isNumber: true;
132
+ };
133
+ readonly automationName: {
134
+ readonly isString: true;
135
+ };
136
+ readonly autoLaunch: {
137
+ readonly isBoolean: true;
138
+ };
139
+ readonly udid: {
140
+ readonly isString: true;
141
+ };
142
+ readonly orientation: {
143
+ readonly inclusion: readonly ["LANDSCAPE", "PORTRAIT"];
144
+ };
145
+ readonly autoWebview: {
146
+ readonly isBoolean: true;
147
+ };
148
+ readonly noReset: {
149
+ readonly isBoolean: true;
150
+ };
151
+ readonly fullReset: {
152
+ readonly isBoolean: true;
153
+ };
154
+ readonly language: {
155
+ readonly isString: true;
156
+ };
157
+ readonly locale: {
158
+ readonly isString: true;
159
+ };
160
+ readonly eventTimings: {
161
+ readonly isBoolean: true;
162
+ };
163
+ readonly printPageSourceOnFindFailure: {
164
+ readonly isBoolean: true;
165
+ };
166
+ }, Extra extends void | import("@appium/types").StringRecord = void> = import('@appium/types').Capabilities<C, Extra>;
167
+ export type W3CCapabilities<C extends Readonly<Record<string, import("@appium/types").Constraint>> = {
168
+ readonly platformName: {
169
+ readonly presence: true;
170
+ readonly isString: true;
171
+ };
172
+ readonly app: {
173
+ readonly isString: true;
174
+ };
175
+ readonly deviceName: {
176
+ readonly isString: true;
177
+ };
178
+ readonly platformVersion: {
179
+ readonly isString: true;
180
+ };
181
+ readonly newCommandTimeout: {
182
+ readonly isNumber: true;
183
+ };
184
+ readonly automationName: {
185
+ readonly isString: true;
186
+ };
187
+ readonly autoLaunch: {
188
+ readonly isBoolean: true;
189
+ };
190
+ readonly udid: {
191
+ readonly isString: true;
192
+ };
193
+ readonly orientation: {
194
+ readonly inclusion: readonly ["LANDSCAPE", "PORTRAIT"];
195
+ };
196
+ readonly autoWebview: {
197
+ readonly isBoolean: true;
198
+ };
199
+ readonly noReset: {
200
+ readonly isBoolean: true;
201
+ };
202
+ readonly fullReset: {
203
+ readonly isBoolean: true;
204
+ };
205
+ readonly language: {
206
+ readonly isString: true;
207
+ };
208
+ readonly locale: {
209
+ readonly isString: true;
210
+ };
211
+ readonly eventTimings: {
212
+ readonly isBoolean: true;
213
+ };
214
+ readonly printPageSourceOnFindFailure: {
215
+ readonly isBoolean: true;
216
+ };
217
+ }, Extra extends void | import("@appium/types").StringRecord = void> = import('@appium/types').W3CCapabilities<C, Extra>;
218
+ export type NSCapabilities<C extends Readonly<Record<string, import("@appium/types").Constraint>> = {
219
+ readonly platformName: {
220
+ readonly presence: true;
221
+ readonly isString: true;
222
+ };
223
+ readonly app: {
224
+ readonly isString: true;
225
+ };
226
+ readonly deviceName: {
227
+ readonly isString: true;
228
+ };
229
+ readonly platformVersion: {
230
+ readonly isString: true;
231
+ };
232
+ readonly newCommandTimeout: {
233
+ readonly isNumber: true;
234
+ };
235
+ readonly automationName: {
236
+ readonly isString: true;
237
+ };
238
+ readonly autoLaunch: {
239
+ readonly isBoolean: true;
240
+ };
241
+ readonly udid: {
242
+ readonly isString: true;
243
+ };
244
+ readonly orientation: {
245
+ readonly inclusion: readonly ["LANDSCAPE", "PORTRAIT"];
246
+ };
247
+ readonly autoWebview: {
248
+ readonly isBoolean: true;
249
+ };
250
+ readonly noReset: {
251
+ readonly isBoolean: true;
252
+ };
253
+ readonly fullReset: {
254
+ readonly isBoolean: true;
255
+ };
256
+ readonly language: {
257
+ readonly isString: true;
258
+ };
259
+ readonly locale: {
260
+ readonly isString: true;
261
+ };
262
+ readonly eventTimings: {
263
+ readonly isBoolean: true;
264
+ };
265
+ readonly printPageSourceOnFindFailure: {
266
+ readonly isBoolean: true;
267
+ };
268
+ }, Extra extends void | import("@appium/types").StringRecord = void> = import('@appium/types').NSCapabilities<C, Extra>;
269
+ export type ConstraintsToCaps<C extends Readonly<Record<string, import("@appium/types").Constraint>>> = import('@appium/types').ConstraintsToCaps<C>;
270
+ export type StringKeyOf<T> = import('type-fest').StringKeyOf<T>;
271
+ export type Constraints = import('@appium/types').Constraints;
19
272
  /**
20
273
  * Dumps to value to the console using `info` logger.
21
274
  *
@@ -26,20 +279,28 @@ export const inspect: (t1: any) => void;
26
279
  * Takes the caps that were provided in the request and translates them
27
280
  * into caps that can be used by the inner drivers.
28
281
  *
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}
282
+ * @template {Constraints} C
283
+ * @template [J=any]
284
+ * @param {J} jsonwpCapabilities
285
+ * @param {W3CCapabilities<C>} w3cCapabilities
286
+ * @param {C} constraints
287
+ * @param {NSCapabilities<C>} [defaultCapabilities]
288
+ * @returns {ParsedDriverCaps<C,J>|InvalidCaps<C,J>}
34
289
  */
35
- export function parseCapsForInnerDriver(jsonwpCapabilities: any, w3cCapabilities: W3CCapabilities, constraints?: import('@appium/types').Constraints, defaultCapabilities?: import("@appium/types").DefaultCapabilitiesConfig | undefined): ParsedDriverCaps | InvalidCaps;
290
+ export function parseCapsForInnerDriver<C extends Readonly<Record<string, import("@appium/types").Constraint>>, J = any>(jsonwpCapabilities: J, w3cCapabilities: W3CCapabilities<C, void>, constraints?: C, defaultCapabilities?: Partial<import("@appium/types").CapsToNSCaps<import("@appium/types").ConstraintsToCaps<C> & void, "appium">> | undefined): ParsedDriverCaps<C, J> | InvalidCaps<C, J>;
36
291
  /**
37
292
  * Takes a capabilities objects and prefixes capabilities with `appium:`
38
- * @param {Capabilities} caps Desired capabilities object
39
- * @returns {AppiumW3CCapabilities}
293
+ * @template {Constraints} [C={}]
294
+ * @param {Capabilities<C>} caps - Desired capabilities object
295
+ * @returns {NSCapabilities<C>}
40
296
  */
41
- export function insertAppiumPrefixes(caps: Capabilities): AppiumW3CCapabilities;
42
- export function getPackageVersion(pkgName: any): any;
297
+ export function insertAppiumPrefixes<C extends Readonly<Record<string, import("@appium/types").Constraint>> = {}>(caps: Partial<import("@appium/types").ConstraintsToCaps<C> & void>): Partial<import("@appium/types").CapsToNSCaps<import("@appium/types").ConstraintsToCaps<C> & void, "appium">>;
298
+ /**
299
+ *
300
+ * @param {string} pkgName
301
+ * @returns {string|undefined}
302
+ */
303
+ export function getPackageVersion(pkgName: string): string | undefined;
43
304
  /**
44
305
  * Pulls the initial values of Appium settings from the given capabilities argument.
45
306
  * Each setting item must satisfy the following format:
@@ -58,11 +319,11 @@ export function getPackageVersion(pkgName: any): any;
58
319
  */
59
320
  export function pullSettings(caps: any | null): any;
60
321
  /**
61
- *
62
- * @param {AppiumW3CCapabilities} caps
63
- * @returns {Capabilities}
322
+ * @template {Constraints} [C={}]
323
+ * @param {NSCapabilities<C>} caps
324
+ * @returns {Capabilities<C>}
64
325
  */
65
- export function removeAppiumPrefixes(caps: AppiumW3CCapabilities): Capabilities;
326
+ export function removeAppiumPrefixes<C extends Readonly<Record<string, import("@appium/types").Constraint>> = {}>(caps: Partial<import("@appium/types").CapsToNSCaps<import("@appium/types").ConstraintsToCaps<C> & void, "appium">>): Partial<import("@appium/types").ConstraintsToCaps<C> & void>;
66
327
  /**
67
328
  * Adjusts NODE_PATH environment variable,
68
329
  * so drivers and plugins could load their peer dependencies.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":";iBA6Tc,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;AA9T1D;;;;GAIG;AACH,wCAQE;AAEF;;;;;;;;;GASG;AACH,4DANW,GAAG,mBACH,eAAe,gBACf,OAAO,eAAe,EAAE,WAAW,wFAEjC,gBAAgB,GAAC,WAAW,CAgHxC;AAED;;;;GAIG;AACH,2CAHW,YAAY,GACV,qBAAqB,CAyBjC;AAyBD,qDAGC;AA2DD;;;;;;;;;;;;;;;GAeG;AACH,oDAgBC;AArHD;;;;GAIG;AACH,2CAHW,qBAAqB,GACnB,YAAY,CAaxB;AAYD;;;;;;GAMG;AACH,kCAFa,IAAI,CAkDhB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":"2BA8Sa,OAAO,eAAe,EAAE,YAAY;uCACpC,OAAO,eAAe,EAAE,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO/C,aAAa,CAAC,CAAC;cACf,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAUN,KAAK;cACL,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uEASP,OAAO,eAAe,EAAE,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uEAM9C,OAAO,eAAe,EAAE,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uEAMjD,OAAO,eAAe,EAAE,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC;wGAKhD,OAAO,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAC;6BAK5C,OAAO,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;0BAIlC,OAAO,eAAe,EAAE,WAAW;AAlVhD;;;;GAIG;AACH,wCAQE;AAEF;;;;;;;;;;;GAWG;AACH,wYAgHC;AAED;;;;;GAKG;AACH,oSAQC;AAoBD;;;;GAIG;AACH,2CAHW,MAAM,GACJ,MAAM,GAAC,SAAS,CAK5B;AAuDD;;;;;;;;;;;;;;;GAeG;AACH,oDAgBC;AAjHD;;;;GAIG;AACH,oSAEC;AAqBD;;;;;;GAMG;AACH,kCAFa,IAAI,CA8ChB"}
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -27,7 +25,10 @@ var _support = require("@appium/support");
27
25
 
28
26
  var _path = _interopRequireDefault(require("path"));
29
27
 
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
30
  const W3C_APPIUM_PREFIX = 'appium';
31
+ const STANDARD_CAPS_LOWERCASE = new Set([..._baseDriver.STANDARD_CAPS].map(cap => cap.toLowerCase()));
31
32
  const isStdoutTTY = process.stdout.isTTY;
32
33
 
33
34
  const inspect = _lodash.default.flow(_lodash.default.partialRight(_util.inspect, {
@@ -69,7 +70,7 @@ function parseCapsForInnerDriver(jsonwpCapabilities, w3cCapabilities, constraint
69
70
  for (const [defaultCapKey, defaultCapValue] of _lodash.default.toPairs(defaultCapabilities)) {
70
71
  let isCapAlreadySet = false;
71
72
 
72
- for (const firstMatchEntry of w3cCapabilities.firstMatch || []) {
73
+ for (const firstMatchEntry of w3cCapabilities.firstMatch ?? []) {
73
74
  if (_lodash.default.isPlainObject(firstMatchEntry) && _lodash.default.has(removeAppiumPrefixes(firstMatchEntry), removeAppiumPrefix(defaultCapKey))) {
74
75
  isCapAlreadySet = true;
75
76
  break;
@@ -135,32 +136,11 @@ function parseCapsForInnerDriver(jsonwpCapabilities, w3cCapabilities, constraint
135
136
  }
136
137
 
137
138
  function insertAppiumPrefixes(caps) {
138
- const STANDARD_CAPS = ['browserName', 'browserVersion', 'platformName', 'acceptInsecureCerts', 'pageLoadStrategy', 'proxy', 'setWindowRect', 'timeouts', 'unhandledPromptBehavior'];
139
- let prefixedCaps = {};
140
-
141
- for (let [name, value] of _lodash.default.toPairs(caps)) {
142
- if (STANDARD_CAPS.includes(name) || name.includes(':')) {
143
- prefixedCaps[name] = value;
144
- } else {
145
- prefixedCaps[`${W3C_APPIUM_PREFIX}:${name}`] = value;
146
- }
147
- }
148
-
149
- return prefixedCaps;
139
+ return _lodash.default.mapKeys(caps, (_, key) => STANDARD_CAPS_LOWERCASE.has(key.toLowerCase()) || key.includes(':') ? key : `${W3C_APPIUM_PREFIX}:${key}`);
150
140
  }
151
141
 
152
142
  function removeAppiumPrefixes(caps) {
153
- if (!_lodash.default.isPlainObject(caps)) {
154
- return caps;
155
- }
156
-
157
- const fixedCaps = {};
158
-
159
- for (let [name, value] of _lodash.default.toPairs(caps)) {
160
- fixedCaps[removeAppiumPrefix(name)] = value;
161
- }
162
-
163
- return fixedCaps;
143
+ return _lodash.default.mapKeys(caps, (_, key) => removeAppiumPrefix(key));
164
144
  }
165
145
 
166
146
  function removeAppiumPrefix(key) {
@@ -188,8 +168,6 @@ function adjustNodePath() {
188
168
 
189
169
  return true;
190
170
  } catch (e) {
191
- _logger.default.info(`Module init paths cannot be refreshed. Original error: ${e.message}`);
192
-
193
171
  return false;
194
172
  }
195
173
  };
@@ -198,8 +176,6 @@ function adjustNodePath() {
198
176
  process.env.NODE_PATH = nodeModulesRoot;
199
177
 
200
178
  if (refreshRequirePaths()) {
201
- _logger.default.info(`Setting NODE_PATH to '${nodeModulesRoot}'`);
202
-
203
179
  process.env.APPIUM_OMIT_PEER_DEPS = '1';
204
180
  } else {
205
181
  delete process.env.NODE_PATH;
@@ -211,8 +187,6 @@ function adjustNodePath() {
211
187
  const nodePathParts = process.env.NODE_PATH.split(_path.default.delimiter);
212
188
 
213
189
  if (nodePathParts.includes(nodeModulesRoot)) {
214
- _logger.default.info(`NODE_PATH already includes '${nodeModulesRoot}'`);
215
-
216
190
  process.env.APPIUM_OMIT_PEER_DEPS = '1';
217
191
  return;
218
192
  }
@@ -221,8 +195,6 @@ function adjustNodePath() {
221
195
  process.env.NODE_PATH = nodePathParts.join(_path.default.delimiter);
222
196
 
223
197
  if (refreshRequirePaths()) {
224
- _logger.default.info(`Adding '${nodeModulesRoot}' to NODE_PATH`);
225
-
226
198
  process.env.APPIUM_OMIT_PEER_DEPS = '1';
227
199
  } else {
228
200
  process.env.NODE_PATH = _lodash.default.without(nodePathParts, nodeModulesRoot).join(_path.default.delimiter);
@@ -249,4 +221,4 @@ function pullSettings(caps) {
249
221
 
250
222
  return result;
251
223
  }
252
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImlzU3Rkb3V0VFRZIiwicHJvY2VzcyIsInN0ZG91dCIsImlzVFRZIiwiaW5zcGVjdCIsIl8iLCJmbG93IiwicGFydGlhbFJpZ2h0IiwiZHVtcCIsImNvbG9ycyIsImRlcHRoIiwiY29tcGFjdCIsImFyZ3MiLCJsb2dnZXIiLCJpbmZvIiwicGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIiLCJqc29ud3BDYXBhYmlsaXRpZXMiLCJ3M2NDYXBhYmlsaXRpZXMiLCJjb25zdHJhaW50cyIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJoYXNXM0NDYXBzIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImhhc0pTT05XUENhcHMiLCJkZXNpcmVkQ2FwcyIsInByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyIsInByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyIsInByb3RvY29sIiwiUFJPVE9DT0xTIiwiVzNDIiwiZXJyb3IiLCJFcnJvciIsImNsb25lRGVlcCIsImlzRW1wdHkiLCJkZWZhdWx0Q2FwS2V5IiwiZGVmYXVsdENhcFZhbHVlIiwidG9QYWlycyIsImlzQ2FwQWxyZWFkeVNldCIsImZpcnN0TWF0Y2hFbnRyeSIsImZpcnN0TWF0Y2giLCJyZW1vdmVBcHBpdW1QcmVmaXhlcyIsInJlbW92ZUFwcGl1bVByZWZpeCIsImFsd2F5c01hdGNoIiwicHJvY2Vzc0NhcGFiaWxpdGllcyIsIm1lc3NhZ2UiLCJpbnNlcnRBcHBpdW1QcmVmaXhlcyIsImNhcHMiLCJTVEFOREFSRF9DQVBTIiwicHJlZml4ZWRDYXBzIiwibmFtZSIsInZhbHVlIiwiaW5jbHVkZXMiLCJmaXhlZENhcHMiLCJrZXkiLCJwcmVmaXgiLCJzdGFydHNXaXRoIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiZ2V0UGFja2FnZVZlcnNpb24iLCJwa2dOYW1lIiwicGtnSW5mbyIsInJlcXVpcmUiLCJ2ZXJzaW9uIiwiYWRqdXN0Tm9kZVBhdGgiLCJzZWxmUm9vdCIsIm5vZGUiLCJnZXRNb2R1bGVSb290U3luYyIsIl9fZmlsZW5hbWUiLCJwYXRoIiwiZGlybmFtZSIsIm5vZGVNb2R1bGVzUm9vdCIsInJlZnJlc2hSZXF1aXJlUGF0aHMiLCJNb2R1bGUiLCJfaW5pdFBhdGhzIiwiZSIsImVudiIsIk5PREVfUEFUSCIsIkFQUElVTV9PTUlUX1BFRVJfREVQUyIsIm5vZGVQYXRoUGFydHMiLCJzcGxpdCIsImRlbGltaXRlciIsInB1c2giLCJqb2luIiwid2l0aG91dCIsInB1bGxTZXR0aW5ncyIsInJlc3VsdCIsIm1hdGNoIiwiZXhlYyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQge3Byb2Nlc3NDYXBhYmlsaXRpZXMsIFBST1RPQ09MU30gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQge2luc3BlY3QgYXMgZHVtcH0gZnJvbSAndXRpbCc7XG5pbXBvcnQge25vZGV9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuY29uc3QgVzNDX0FQUElVTV9QUkVGSVggPSAnYXBwaXVtJztcblxuLyoqXG4gKlxuICogSWYgYHN0ZG91dGAgaXMgYSBUVFksIHRoaXMgaXMgYHRydWVgLlxuICpcbiAqIFVzZWQgZm9yIHRpZ2h0ZXIgY29udHJvbCBvdmVyIGxvZyBvdXRwdXQuXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaXNTdGRvdXRUVFkgPSBwcm9jZXNzLnN0ZG91dC5pc1RUWTtcblxuLyoqXG4gKiBEdW1wcyB0byB2YWx1ZSB0byB0aGUgY29uc29sZSB1c2luZyBgaW5mb2AgbG9nZ2VyLlxuICpcbiAqIEB0b2RvIE1heSB3YW50IHRvIGZvcmNlIGNvbG9yIHRvIGJlIGBmYWxzZWAgaWYge0BsaW5rIGlzU3Rkb3V0VFRZfSBpcyBgZmFsc2VgLlxuICovXG5jb25zdCBpbnNwZWN0ID0gXy5mbG93KFxuICBfLnBhcnRpYWxSaWdodChcbiAgICAvKiogQHR5cGUgeyhvYmplY3Q6IGFueSwgb3B0aW9uczogaW1wb3J0KCd1dGlsJykuSW5zcGVjdE9wdGlvbnMpID0+IHN0cmluZ30gKi8gKGR1bXApLFxuICAgIHtjb2xvcnM6IHRydWUsIGRlcHRoOiBudWxsLCBjb21wYWN0OiAhaXNTdGRvdXRUVFl9XG4gICksXG4gICguLi5hcmdzKSA9PiB7XG4gICAgbG9nZ2VyLmluZm8oLi4uYXJncyk7XG4gIH1cbik7XG5cbi8qKlxuICogVGFrZXMgdGhlIGNhcHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGFuZCB0cmFuc2xhdGVzIHRoZW1cbiAqIGludG8gY2FwcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBpbm5lciBkcml2ZXJzLlxuICpcbiAqIEBwYXJhbSB7YW55fSBqc29ud3BDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7VzNDQ2FwYWJpbGl0aWVzfSB3M2NDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29uc3RyYWludHN9IGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRlZmF1bHRDYXBhYmlsaXRpZXNDb25maWd9IFtkZWZhdWx0Q2FwYWJpbGl0aWVzXVxuICogQHJldHVybnMge1BhcnNlZERyaXZlckNhcHN8SW52YWxpZENhcHN9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyKFxuICBqc29ud3BDYXBhYmlsaXRpZXMsXG4gIHczY0NhcGFiaWxpdGllcyxcbiAgY29uc3RyYWludHMgPSB7fSxcbiAgZGVmYXVsdENhcGFiaWxpdGllcyA9IHt9XG4pIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGNhbGxlciBzZW50IEpTT05XUCBjYXBzLCBXM0MgY2Fwcywgb3IgYm90aFxuICBjb25zdCBoYXNXM0NDYXBzID1cbiAgICBfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzKSAmJlxuICAgIChfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdhbHdheXNNYXRjaCcpIHx8IF8uaGFzKHczY0NhcGFiaWxpdGllcywgJ2ZpcnN0TWF0Y2gnKSk7XG4gIGNvbnN0IGhhc0pTT05XUENhcHMgPSBfLmlzUGxhaW5PYmplY3QoanNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgbGV0IGRlc2lyZWRDYXBzID0gLyoqIEB0eXBlIHtQYXJzZWREcml2ZXJDYXBzWydkZXNpcmVkQ2FwcyddfSAqLyAoe30pO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzO1xuXG4gIGlmICghaGFzVzNDQ2Fwcykge1xuICAgIHJldHVybiAvKiogQHR5cGUge0ludmFsaWRDYXBzfSAqLyAoe1xuICAgICAgcHJvdG9jb2w6IFBST1RPQ09MUy5XM0MsXG4gICAgICBlcnJvcjogbmV3IEVycm9yKCdXM0MgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSBwcm92aWRlZCcpLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qge1czQ30gPSBQUk9UT0NPTFM7XG4gIGNvbnN0IHByb3RvY29sID0gVzNDO1xuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuICBqc29ud3BDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChqc29ud3BDYXBhYmlsaXRpZXMpO1xuICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICBkZWZhdWx0Q2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAoZGVmYXVsdENhcGFiaWxpdGllcyk7XG5cbiAgaWYgKCFfLmlzRW1wdHkoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgICAgZm9yIChjb25zdCBbZGVmYXVsdENhcEtleSwgZGVmYXVsdENhcFZhbHVlXSBvZiBfLnRvUGFpcnMoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICAgICAgbGV0IGlzQ2FwQWxyZWFkeVNldCA9IGZhbHNlO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBmaXJzdE1hdGNoIGVudHJpZXNcbiAgICAgICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggfHwgW10pIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBfLmlzUGxhaW5PYmplY3QoZmlyc3RNYXRjaEVudHJ5KSAmJlxuICAgICAgICAgICAgXy5oYXMocmVtb3ZlQXBwaXVtUHJlZml4ZXMoZmlyc3RNYXRjaEVudHJ5KSwgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNDYXBBbHJlYWR5U2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBhbHdheXNNYXRjaCBlbnRyaWVzXG4gICAgICAgIGlzQ2FwQWxyZWFkeVNldCA9XG4gICAgICAgICAgaXNDYXBBbHJlYWR5U2V0IHx8XG4gICAgICAgICAgKF8uaXNQbGFpbk9iamVjdCh3M2NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2gpICYmXG4gICAgICAgICAgICBfLmhhcyhcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4ZXModzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKSxcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgaWYgKGlzQ2FwQWxyZWFkeVNldCkge1xuICAgICAgICAgIC8vIFNraXAgaWYgdGhlIGtleSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHByb3ZpZGVkIGNhcHNcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgYWRkIHRoZSBkZWZhdWx0IGNhcGFiaWxpdHkgaWYgaXQgaXMgbm90IG92ZXJyaWRkZW5cbiAgICAgICAgaWYgKF8uaXNFbXB0eSh3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCkpIHtcbiAgICAgICAgICB3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCA9IFt7W2RlZmF1bHRDYXBLZXldOiBkZWZhdWx0Q2FwVmFsdWV9XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaFswXVtkZWZhdWx0Q2FwS2V5XSA9IGRlZmF1bHRDYXBWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGFzSlNPTldQQ2Fwcykge1xuICAgICAganNvbndwQ2FwYWJpbGl0aWVzID0ge1xuICAgICAgICAuLi5yZW1vdmVBcHBpdW1QcmVmaXhlcyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSxcbiAgICAgICAgLi4uanNvbndwQ2FwYWJpbGl0aWVzLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgTUpTT05XUCBjYXBzXG4gIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gey4uLmpzb253cENhcGFiaWxpdGllc307XG4gIH1cblxuICAvLyBHZXQgVzNDIGNhcHNcbiAgaWYgKGhhc1czQ0NhcHMpIHtcbiAgICAvLyBDYWxsIHRoZSBwcm9jZXNzIGNhcGFiaWxpdGllcyBhbGdvcml0aG0gdG8gZmluZCBtYXRjaGluZyBjYXBzIG9uIHRoZSBXM0NcbiAgICAvLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vamxpcHBzL3NpbXBsZS13ZC1zcGVjI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzKVxuICAgIHRyeSB7XG4gICAgICBkZXNpcmVkQ2FwcyA9IHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cywgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBDb3VsZCBub3QgcGFyc2UgVzNDIGNhcGFiaWxpdGllczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7SW52YWxpZENhcHN9ICovICh7XG4gICAgICAgIGRlc2lyZWRDYXBzLFxuICAgICAgICBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsXG4gICAgICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHczYyBjYXBhYmlsaXRpZXMgcGF5bG9hZCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIG1hdGNoaW5nIGNhcHMgaW4gYGFsd2F5c01hdGNoYFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyA9IHtcbiAgICAgIGFsd2F5c01hdGNoOiB7Li4uaW5zZXJ0QXBwaXVtUHJlZml4ZXMoZGVzaXJlZENhcHMpfSxcbiAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHN9ICovICh7XG4gICAgZGVzaXJlZENhcHMsXG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICBwcm90b2NvbCxcbiAgfSk7XG59XG5cbi8qKlxuICogVGFrZXMgYSBjYXBhYmlsaXRpZXMgb2JqZWN0cyBhbmQgcHJlZml4ZXMgY2FwYWJpbGl0aWVzIHdpdGggYGFwcGl1bTpgXG4gKiBAcGFyYW0ge0NhcGFiaWxpdGllc30gY2FwcyBEZXNpcmVkIGNhcGFiaWxpdGllcyBvYmplY3RcbiAqIEByZXR1cm5zIHtBcHBpdW1XM0NDYXBhYmlsaXRpZXN9XG4gKi9cbmZ1bmN0aW9uIGluc2VydEFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgLy8gU3RhbmRhcmQsIG5vbi1wcmVmaXhlZCBjYXBhYmlsaXRpZXMgKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tdGFibGUtb2Ytc3RhbmRhcmQtY2FwYWJpbGl0aWVzKVxuICBjb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAgICdicm93c2VyTmFtZScsXG4gICAgJ2Jyb3dzZXJWZXJzaW9uJyxcbiAgICAncGxhdGZvcm1OYW1lJyxcbiAgICAnYWNjZXB0SW5zZWN1cmVDZXJ0cycsXG4gICAgJ3BhZ2VMb2FkU3RyYXRlZ3knLFxuICAgICdwcm94eScsXG4gICAgJ3NldFdpbmRvd1JlY3QnLFxuICAgICd0aW1lb3V0cycsXG4gICAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJyxcbiAgXTtcblxuICBsZXQgcHJlZml4ZWRDYXBzID0ge307XG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgaWYgKFNUQU5EQVJEX0NBUFMuaW5jbHVkZXMobmFtZSkgfHwgbmFtZS5pbmNsdWRlcygnOicpKSB7XG4gICAgICBwcmVmaXhlZENhcHNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ZWRDYXBzW2Ake1czQ19BUFBJVU1fUFJFRklYfToke25hbWV9YF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByZWZpeGVkQ2Fwcztcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBcHBpdW1XM0NDYXBhYmlsaXRpZXN9IGNhcHNcbiAqIEByZXR1cm5zIHtDYXBhYmlsaXRpZXN9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykpIHtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIC8qKiBAdHlwZSB7Q2FwYWJpbGl0aWVzfSAqL1xuICBjb25zdCBmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBmaXhlZENhcHNbcmVtb3ZlQXBwaXVtUHJlZml4KG5hbWUpXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBmaXhlZENhcHM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeChrZXkpIHtcbiAgY29uc3QgcHJlZml4ID0gYCR7VzNDX0FQUElVTV9QUkVGSVh9OmA7XG4gIHJldHVybiBfLnN0YXJ0c1dpdGgoa2V5LCBwcmVmaXgpID8ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKSA6IGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2FnZVZlcnNpb24ocGtnTmFtZSkge1xuICBjb25zdCBwa2dJbmZvID0gcmVxdWlyZShgJHtwa2dOYW1lfS9wYWNrYWdlLmpzb25gKSB8fCB7fTtcbiAgcmV0dXJuIHBrZ0luZm8udmVyc2lvbjtcbn1cblxuLyoqXG4gKiBBZGp1c3RzIE5PREVfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSxcbiAqIHNvIGRyaXZlcnMgYW5kIHBsdWdpbnMgY291bGQgbG9hZCB0aGVpciBwZWVyIGRlcGVuZGVuY2llcy5cbiAqIFJlYWQgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9tb2R1bGVzLmh0bWwjbG9hZGluZy1mcm9tLXRoZS1nbG9iYWwtZm9sZGVyc1xuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhZGp1c3ROb2RlUGF0aCgpIHtcbiAgY29uc3Qgc2VsZlJvb3QgPSBub2RlLmdldE1vZHVsZVJvb3RTeW5jKCdhcHBpdW0nLCBfX2ZpbGVuYW1lKTtcbiAgaWYgKCFzZWxmUm9vdCB8fCBwYXRoLmRpcm5hbWUoc2VsZlJvb3QpLmxlbmd0aCA+PSBzZWxmUm9vdC5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgbm9kZU1vZHVsZXNSb290ID0gcGF0aC5kaXJuYW1lKHNlbGZSb290KTtcblxuICBjb25zdCByZWZyZXNoUmVxdWlyZVBhdGhzID0gKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyAhIFRoaXMgaGFjayBhbGxvd3MgdXMgdG8gYXZvaWQgbW9kaWZpY2F0aW9uIG9mIGltcG9ydFxuICAgICAgLy8gISBzdGF0ZW1lbnRzIGluIGNsaWVudCBtb2R1bGVzLiBJdCB1c2VzIGEgcHJpdmF0ZSBBUEkgdGhvdWdoLFxuICAgICAgLy8gISBzbyBpdCBjb3VsZCBicmVhayAobWF5YmUsIGV2ZW50dWFsbHkpLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2JyYW5uZW1hbi84MDQ4NTIwIzctdGhlLWhhY2tcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJlcXVpcmUoJ21vZHVsZScpLk1vZHVsZS5faW5pdFBhdGhzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgTW9kdWxlIGluaXQgcGF0aHMgY2Fubm90IGJlIHJlZnJlc2hlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBpZiAoIXByb2Nlc3MuZW52Lk5PREVfUEFUSCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IG5vZGVNb2R1bGVzUm9vdDtcbiAgICBpZiAocmVmcmVzaFJlcXVpcmVQYXRocygpKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgU2V0dGluZyBOT0RFX1BBVEggdG8gJyR7bm9kZU1vZHVsZXNSb290fSdgKTtcbiAgICAgIHByb2Nlc3MuZW52LkFQUElVTV9PTUlUX1BFRVJfREVQUyA9ICcxJztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52Lk5PREVfUEFUSDtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgbm9kZVBhdGhQYXJ0cyA9IHByb2Nlc3MuZW52Lk5PREVfUEFUSC5zcGxpdChwYXRoLmRlbGltaXRlcik7XG4gIGlmIChub2RlUGF0aFBhcnRzLmluY2x1ZGVzKG5vZGVNb2R1bGVzUm9vdCkpIHtcbiAgICBsb2dnZXIuaW5mbyhgTk9ERV9QQVRIIGFscmVhZHkgaW5jbHVkZXMgJyR7bm9kZU1vZHVsZXNSb290fSdgKTtcbiAgICBwcm9jZXNzLmVudi5BUFBJVU1fT01JVF9QRUVSX0RFUFMgPSAnMSc7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbm9kZVBhdGhQYXJ0cy5wdXNoKG5vZGVNb2R1bGVzUm9vdCk7XG4gIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IG5vZGVQYXRoUGFydHMuam9pbihwYXRoLmRlbGltaXRlcik7XG4gIGlmIChyZWZyZXNoUmVxdWlyZVBhdGhzKCkpIHtcbiAgICBsb2dnZXIuaW5mbyhgQWRkaW5nICcke25vZGVNb2R1bGVzUm9vdH0nIHRvIE5PREVfUEFUSGApO1xuICAgIHByb2Nlc3MuZW52LkFQUElVTV9PTUlUX1BFRVJfREVQUyA9ICcxJztcbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX1BBVEggPSBfLndpdGhvdXQobm9kZVBhdGhQYXJ0cywgbm9kZU1vZHVsZXNSb290KS5qb2luKHBhdGguZGVsaW1pdGVyKTtcbiAgfVxufVxuXG4vKipcbiAqIFB1bGxzIHRoZSBpbml0aWFsIHZhbHVlcyBvZiBBcHBpdW0gc2V0dGluZ3MgZnJvbSB0aGUgZ2l2ZW4gY2FwYWJpbGl0aWVzIGFyZ3VtZW50LlxuICogRWFjaCBzZXR0aW5nIGl0ZW0gbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuICogYHNldHRpbmdbc2V0dGluZ19uYW1lXTogc2V0dGluZ192YWx1ZWBcbiAqIFRoZSBjYXBhYmlsaXRpZXMgYXJndW1lbnQgaXRzZWxmIGdldHMgbXV0YXRlZCwgc28gaXQgZG9lcyBub3QgY29udGFpbiBwYXJzZWRcbiAqIHNldHRpbmdzIGFueW1vcmUgdG8gYXZvaWQgZnVydGhlciBwYXJzaW5nIGlzc3Vlcy5cbiAqIENoZWNrXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9ibG9iL21hc3Rlci9kb2NzL2VuL2FkdmFuY2VkLWNvbmNlcHRzL3NldHRpbmdzLm1kXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBhdmFpbGFibGUgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIHs/T2JqZWN0fSBjYXBzIC0gQ2FwYWJpbGl0aWVzIGRpY3Rpb25hcnkuIEl0IGlzIG11dGF0ZWQgaWZcbiAqIG9uZSBvciBtb3JlIHNldHRpbmdzIGhhdmUgYmVlbiBwdWxsZWQgZnJvbSBpdFxuICogQHJldHVybiB7T2JqZWN0fSAtIEFuIGVtcHR5IGRpY3Rpb25hcnkgaWYgdGhlIGdpdmVuIGNhcHMgY29udGFpbnMgbm9cbiAqIHNldHRpbmcgaXRlbXMgb3IgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgcGFyc2VkIEFwcGl1bSBzZXR0aW5nIG5hbWVzIGFsb25nIHdpdGhcbiAqIHRoZWlyIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gcHVsbFNldHRpbmdzKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykgfHwgXy5pc0VtcHR5KGNhcHMpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhjYXBzKSkge1xuICAgIGNvbnN0IG1hdGNoID0gL1xcYnNldHRpbmdzXFxbKFxcUyspXFxdJC8uZXhlYyhrZXkpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc3VsdFttYXRjaFsxXV0gPSB2YWx1ZTtcbiAgICBkZWxldGUgY2Fwc1trZXldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCB7XG4gIGluc3BlY3QsXG4gIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyLFxuICBpbnNlcnRBcHBpdW1QcmVmaXhlcyxcbiAgZ2V0UGFja2FnZVZlcnNpb24sXG4gIHB1bGxTZXR0aW5ncyxcbiAgcmVtb3ZlQXBwaXVtUHJlZml4ZXMsXG4gIGFkanVzdE5vZGVQYXRoLFxufTtcblxuLyoqXG4gKiBAdG9kbyBwcm90b2NvbCBpcyBtb3JlIHNwZWNpZmljXG4gKiBAdHlwZWRlZiBQYXJzZWREcml2ZXJDYXBzXG4gKiBAcHJvcGVydHkge0NhcGFiaWxpdGllc30gZGVzaXJlZENhcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm90b2NvbFxuICogQHByb3BlcnR5IHthbnl9IFtwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXNdXG4gKiBAcHJvcGVydHkge1czQ0NhcGFiaWxpdGllc30gW3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllc11cbiAqL1xuXG4vKipcbiAqIEB0b2RvIHByb3RvY29sIGlzIG1vcmUgc3BlY2lmaWNcbiAqIEB0eXBlZGVmIEludmFsaWRDYXBzXG4gKiBAcHJvcGVydHkge0Vycm9yfSBlcnJvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb3RvY29sXG4gKiBAcHJvcGVydHkge0NhcGFiaWxpdGllc30gW2Rlc2lyZWRDYXBzXVxuICogQHByb3BlcnR5IHthbnl9IFtwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXNdXG4gKiBAcHJvcGVydHkge1czQ0NhcGFiaWxpdGllc30gW3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllc11cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXN9IFczQ0NhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNhcGFiaWxpdGllc30gQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBw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
224
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsIlNUQU5EQVJEX0NBUFNfTE9XRVJDQVNFIiwiU2V0IiwiU1RBTkRBUkRfQ0FQUyIsIm1hcCIsImNhcCIsInRvTG93ZXJDYXNlIiwiaXNTdGRvdXRUVFkiLCJwcm9jZXNzIiwic3Rkb3V0IiwiaXNUVFkiLCJpbnNwZWN0IiwiXyIsImZsb3ciLCJwYXJ0aWFsUmlnaHQiLCJkdW1wIiwiY29sb3JzIiwiZGVwdGgiLCJjb21wYWN0IiwiYXJncyIsImxvZ2dlciIsImluZm8iLCJwYXJzZUNhcHNGb3JJbm5lckRyaXZlciIsImpzb253cENhcGFiaWxpdGllcyIsInczY0NhcGFiaWxpdGllcyIsImNvbnN0cmFpbnRzIiwiZGVmYXVsdENhcGFiaWxpdGllcyIsImhhc1czQ0NhcHMiLCJpc1BsYWluT2JqZWN0IiwiaGFzIiwiaGFzSlNPTldQQ2FwcyIsImRlc2lyZWRDYXBzIiwicHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzIiwicHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzIiwicHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJXM0MiLCJlcnJvciIsIkVycm9yIiwiY2xvbmVEZWVwIiwiaXNFbXB0eSIsImRlZmF1bHRDYXBLZXkiLCJkZWZhdWx0Q2FwVmFsdWUiLCJ0b1BhaXJzIiwiaXNDYXBBbHJlYWR5U2V0IiwiZmlyc3RNYXRjaEVudHJ5IiwiZmlyc3RNYXRjaCIsInJlbW92ZUFwcGl1bVByZWZpeGVzIiwicmVtb3ZlQXBwaXVtUHJlZml4IiwiYWx3YXlzTWF0Y2giLCJwcm9jZXNzQ2FwYWJpbGl0aWVzIiwibWVzc2FnZSIsImluc2VydEFwcGl1bVByZWZpeGVzIiwiY2FwcyIsIm1hcEtleXMiLCJrZXkiLCJpbmNsdWRlcyIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJnZXRQYWNrYWdlVmVyc2lvbiIsInBrZ05hbWUiLCJwa2dJbmZvIiwicmVxdWlyZSIsInZlcnNpb24iLCJhZGp1c3ROb2RlUGF0aCIsInNlbGZSb290Iiwibm9kZSIsImdldE1vZHVsZVJvb3RTeW5jIiwiX19maWxlbmFtZSIsInBhdGgiLCJkaXJuYW1lIiwibm9kZU1vZHVsZXNSb290IiwicmVmcmVzaFJlcXVpcmVQYXRocyIsIk1vZHVsZSIsIl9pbml0UGF0aHMiLCJlIiwiZW52IiwiTk9ERV9QQVRIIiwiQVBQSVVNX09NSVRfUEVFUl9ERVBTIiwibm9kZVBhdGhQYXJ0cyIsInNwbGl0IiwiZGVsaW1pdGVyIiwicHVzaCIsImpvaW4iLCJ3aXRob3V0IiwicHVsbFNldHRpbmdzIiwicmVzdWx0IiwidmFsdWUiLCJtYXRjaCIsImV4ZWMiXSwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHtwcm9jZXNzQ2FwYWJpbGl0aWVzLCBQUk9UT0NPTFMsIFNUQU5EQVJEX0NBUFN9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHtpbnNwZWN0IGFzIGR1bXB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHtub2RlfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmNvbnN0IFczQ19BUFBJVU1fUFJFRklYID0gJ2FwcGl1bSc7XG5jb25zdCBTVEFOREFSRF9DQVBTX0xPV0VSQ0FTRSA9IG5ldyBTZXQoWy4uLlNUQU5EQVJEX0NBUFNdLm1hcCgoY2FwKSA9PiBjYXAudG9Mb3dlckNhc2UoKSkpO1xuXG4vKipcbiAqXG4gKiBJZiBgc3Rkb3V0YCBpcyBhIFRUWSwgdGhpcyBpcyBgdHJ1ZWAuXG4gKlxuICogVXNlZCBmb3IgdGlnaHRlciBjb250cm9sIG92ZXIgbG9nIG91dHB1dC5cbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5jb25zdCBpc1N0ZG91dFRUWSA9IHByb2Nlc3Muc3Rkb3V0LmlzVFRZO1xuXG4vKipcbiAqIER1bXBzIHRvIHZhbHVlIHRvIHRoZSBjb25zb2xlIHVzaW5nIGBpbmZvYCBsb2dnZXIuXG4gKlxuICogQHRvZG8gTWF5IHdhbnQgdG8gZm9yY2UgY29sb3IgdG8gYmUgYGZhbHNlYCBpZiB7QGxpbmsgaXNTdGRvdXRUVFl9IGlzIGBmYWxzZWAuXG4gKi9cbmNvbnN0IGluc3BlY3QgPSBfLmZsb3coXG4gIF8ucGFydGlhbFJpZ2h0KFxuICAgIC8qKiBAdHlwZSB7KG9iamVjdDogYW55LCBvcHRpb25zOiBpbXBvcnQoJ3V0aWwnKS5JbnNwZWN0T3B0aW9ucykgPT4gc3RyaW5nfSAqLyAoZHVtcCksXG4gICAge2NvbG9yczogdHJ1ZSwgZGVwdGg6IG51bGwsIGNvbXBhY3Q6ICFpc1N0ZG91dFRUWX1cbiAgKSxcbiAgKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dnZXIuaW5mbyguLi5hcmdzKTtcbiAgfVxuKTtcblxuLyoqXG4gKiBUYWtlcyB0aGUgY2FwcyB0aGF0IHdlcmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYW5kIHRyYW5zbGF0ZXMgdGhlbVxuICogaW50byBjYXBzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGlubmVyIGRyaXZlcnMuXG4gKlxuICogQHRlbXBsYXRlIHtDb25zdHJhaW50c30gQ1xuICogQHRlbXBsYXRlIFtKPWFueV1cbiAqIEBwYXJhbSB7Sn0ganNvbndwQ2FwYWJpbGl0aWVzXG4gKiBAcGFyYW0ge1czQ0NhcGFiaWxpdGllczxDPn0gdzNjQ2FwYWJpbGl0aWVzXG4gKiBAcGFyYW0ge0N9IGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0ge05TQ2FwYWJpbGl0aWVzPEM+fSBbZGVmYXVsdENhcGFiaWxpdGllc11cbiAqIEByZXR1cm5zIHtQYXJzZWREcml2ZXJDYXBzPEMsSj58SW52YWxpZENhcHM8QyxKPn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIoXG4gIGpzb253cENhcGFiaWxpdGllcyxcbiAgdzNjQ2FwYWJpbGl0aWVzLFxuICBjb25zdHJhaW50cyA9IC8qKiBAdHlwZSB7Q30gKi8gKHt9KSxcbiAgZGVmYXVsdENhcGFiaWxpdGllcyA9IHt9XG4pIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGNhbGxlciBzZW50IEpTT05XUCBjYXBzLCBXM0MgY2Fwcywgb3IgYm90aFxuICBjb25zdCBoYXNXM0NDYXBzID1cbiAgICBfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzKSAmJlxuICAgIChfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdhbHdheXNNYXRjaCcpIHx8IF8uaGFzKHczY0NhcGFiaWxpdGllcywgJ2ZpcnN0TWF0Y2gnKSk7XG4gIGNvbnN0IGhhc0pTT05XUENhcHMgPSBfLmlzUGxhaW5PYmplY3QoanNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgbGV0IGRlc2lyZWRDYXBzID0gLyoqIEB0eXBlIHtQYXJzZWREcml2ZXJDYXBzPEM+WydkZXNpcmVkQ2FwcyddfSAqLyAoe30pO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHM8Qz5bJ3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHM8Qz5bJ3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzO1xuXG4gIGlmICghaGFzVzNDQ2Fwcykge1xuICAgIHJldHVybiAvKiogQHR5cGUge0ludmFsaWRDYXBzPEM+fSAqLyAoe1xuICAgICAgcHJvdG9jb2w6IFBST1RPQ09MUy5XM0MsXG4gICAgICBlcnJvcjogbmV3IEVycm9yKCdXM0MgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSBwcm92aWRlZCcpLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qge1czQ30gPSBQUk9UT0NPTFM7XG4gIGNvbnN0IHByb3RvY29sID0gVzNDO1xuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuICBqc29ud3BDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChqc29ud3BDYXBhYmlsaXRpZXMpO1xuICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICBkZWZhdWx0Q2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAoZGVmYXVsdENhcGFiaWxpdGllcyk7XG5cbiAgaWYgKCFfLmlzRW1wdHkoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgICAgZm9yIChjb25zdCBbZGVmYXVsdENhcEtleSwgZGVmYXVsdENhcFZhbHVlXSBvZiBfLnRvUGFpcnMoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICAgICAgbGV0IGlzQ2FwQWxyZWFkeVNldCA9IGZhbHNlO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBmaXJzdE1hdGNoIGVudHJpZXNcbiAgICAgICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggPz8gW10pIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBfLmlzUGxhaW5PYmplY3QoZmlyc3RNYXRjaEVudHJ5KSAmJlxuICAgICAgICAgICAgXy5oYXMocmVtb3ZlQXBwaXVtUHJlZml4ZXMoZmlyc3RNYXRjaEVudHJ5KSwgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNDYXBBbHJlYWR5U2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBhbHdheXNNYXRjaCBlbnRyaWVzXG4gICAgICAgIGlzQ2FwQWxyZWFkeVNldCA9XG4gICAgICAgICAgaXNDYXBBbHJlYWR5U2V0IHx8XG4gICAgICAgICAgKF8uaXNQbGFpbk9iamVjdCh3M2NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2gpICYmXG4gICAgICAgICAgICBfLmhhcyhcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4ZXModzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKSxcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgaWYgKGlzQ2FwQWxyZWFkeVNldCkge1xuICAgICAgICAgIC8vIFNraXAgaWYgdGhlIGtleSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHByb3ZpZGVkIGNhcHNcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgYWRkIHRoZSBkZWZhdWx0IGNhcGFiaWxpdHkgaWYgaXQgaXMgbm90IG92ZXJyaWRkZW5cbiAgICAgICAgaWYgKF8uaXNFbXB0eSh3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCkpIHtcbiAgICAgICAgICB3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCA9IC8qKiBAdHlwZSB7VzNDQ2FwYWJpbGl0aWVzPEM+WydmaXJzdE1hdGNoJ119ICovIChbXG4gICAgICAgICAgICB7W2RlZmF1bHRDYXBLZXldOiBkZWZhdWx0Q2FwVmFsdWV9LFxuICAgICAgICAgIF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoWzBdW2RlZmF1bHRDYXBLZXldID0gZGVmYXVsdENhcFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgICBqc29ud3BDYXBhYmlsaXRpZXMgPSB7XG4gICAgICAgIC4uLnJlbW92ZUFwcGl1bVByZWZpeGVzKGRlZmF1bHRDYXBhYmlsaXRpZXMpLFxuICAgICAgICAuLi5qc29ud3BDYXBhYmlsaXRpZXMsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldCBNSlNPTldQIGNhcHNcbiAgaWYgKGhhc0pTT05XUENhcHMpIHtcbiAgICBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMgPSB7Li4uanNvbndwQ2FwYWJpbGl0aWVzfTtcbiAgfVxuXG4gIC8vIEdldCBXM0MgY2Fwc1xuICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgIC8vIENhbGwgdGhlIHByb2Nlc3MgY2FwYWJpbGl0aWVzIGFsZ29yaXRobSB0byBmaW5kIG1hdGNoaW5nIGNhcHMgb24gdGhlIFczQ1xuICAgIC8vIChzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qbGlwcHMvc2ltcGxlLXdkLXNwZWMjcHJvY2Vzc2luZy1jYXBhYmlsaXRpZXMpXG4gICAgdHJ5IHtcbiAgICAgIGRlc2lyZWRDYXBzID0gcHJvY2Vzc0NhcGFiaWxpdGllcyh3M2NDYXBhYmlsaXRpZXMsIGNvbnN0cmFpbnRzLCB0cnVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmluZm8oYENvdWxkIG5vdCBwYXJzZSBXM0MgY2FwYWJpbGl0aWVzOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtJbnZhbGlkQ2FwczxDLEo+fSAqLyAoe1xuICAgICAgICBkZXNpcmVkQ2FwcyxcbiAgICAgICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgICAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBlcnJvcixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIG5ldyB3M2MgY2FwYWJpbGl0aWVzIHBheWxvYWQgdGhhdCBjb250YWlucyBvbmx5IHRoZSBtYXRjaGluZyBjYXBzIGluIGBhbHdheXNNYXRjaGBcbiAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMgPSB7XG4gICAgICBhbHdheXNNYXRjaDogey4uLmluc2VydEFwcGl1bVByZWZpeGVzKGRlc2lyZWRDYXBzKX0sXG4gICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gLyoqIEB0eXBlIHtQYXJzZWREcml2ZXJDYXBzPEMsSj59ICovICh7XG4gICAgZGVzaXJlZENhcHMsXG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICBwcm90b2NvbCxcbiAgfSk7XG59XG5cbi8qKlxuICogVGFrZXMgYSBjYXBhYmlsaXRpZXMgb2JqZWN0cyBhbmQgcHJlZml4ZXMgY2FwYWJpbGl0aWVzIHdpdGggYGFwcGl1bTpgXG4gKiBAdGVtcGxhdGUge0NvbnN0cmFpbnRzfSBbQz17fV1cbiAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzPEM+fSBjYXBzIC0gRGVzaXJlZCBjYXBhYmlsaXRpZXMgb2JqZWN0XG4gKiBAcmV0dXJucyB7TlNDYXBhYmlsaXRpZXM8Qz59XG4gKi9cbmZ1bmN0aW9uIGluc2VydEFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7TlNDYXBhYmlsaXRpZXM8Qz59ICovIChcbiAgICBfLm1hcEtleXMoY2FwcywgKF8sIGtleSkgPT5cbiAgICAgIFNUQU5EQVJEX0NBUFNfTE9XRVJDQVNFLmhhcyhrZXkudG9Mb3dlckNhc2UoKSkgfHwga2V5LmluY2x1ZGVzKCc6JylcbiAgICAgICAgPyBrZXlcbiAgICAgICAgOiBgJHtXM0NfQVBQSVVNX1BSRUZJWH06JHtrZXl9YFxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUge0NvbnN0cmFpbnRzfSBbQz17fV1cbiAqIEBwYXJhbSB7TlNDYXBhYmlsaXRpZXM8Qz59IGNhcHNcbiAqIEByZXR1cm5zIHtDYXBhYmlsaXRpZXM8Qz59XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Q2FwYWJpbGl0aWVzPEM+fSAqLyAoXy5tYXBLZXlzKGNhcHMsIChfLCBrZXkpID0+IHJlbW92ZUFwcGl1bVByZWZpeChrZXkpKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQXBwaXVtUHJlZml4KGtleSkge1xuICBjb25zdCBwcmVmaXggPSBgJHtXM0NfQVBQSVVNX1BSRUZJWH06YDtcbiAgcmV0dXJuIF8uc3RhcnRzV2l0aChrZXksIHByZWZpeCkgPyBrZXkuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpIDoga2V5O1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGtnTmFtZVxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGdldFBhY2thZ2VWZXJzaW9uKHBrZ05hbWUpIHtcbiAgY29uc3QgcGtnSW5mbyA9IHJlcXVpcmUoYCR7cGtnTmFtZX0vcGFja2FnZS5qc29uYCkgfHwge307XG4gIHJldHVybiBwa2dJbmZvLnZlcnNpb247XG59XG5cbi8qKlxuICogQWRqdXN0cyBOT0RFX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsXG4gKiBzbyBkcml2ZXJzIGFuZCBwbHVnaW5zIGNvdWxkIGxvYWQgdGhlaXIgcGVlciBkZXBlbmRlbmNpZXMuXG4gKiBSZWFkIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvbW9kdWxlcy5odG1sI2xvYWRpbmctZnJvbS10aGUtZ2xvYmFsLWZvbGRlcnNcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYWRqdXN0Tm9kZVBhdGgoKSB7XG4gIGNvbnN0IHNlbGZSb290ID0gbm9kZS5nZXRNb2R1bGVSb290U3luYygnYXBwaXVtJywgX19maWxlbmFtZSk7XG4gIGlmICghc2VsZlJvb3QgfHwgcGF0aC5kaXJuYW1lKHNlbGZSb290KS5sZW5ndGggPj0gc2VsZlJvb3QubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG5vZGVNb2R1bGVzUm9vdCA9IHBhdGguZGlybmFtZShzZWxmUm9vdCk7XG5cbiAgY29uc3QgcmVmcmVzaFJlcXVpcmVQYXRocyA9ICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gISBUaGlzIGhhY2sgYWxsb3dzIHVzIHRvIGF2b2lkIG1vZGlmaWNhdGlvbiBvZiBpbXBvcnRcbiAgICAgIC8vICEgc3RhdGVtZW50cyBpbiBjbGllbnQgbW9kdWxlcy4gSXQgdXNlcyBhIHByaXZhdGUgQVBJIHRob3VnaCxcbiAgICAgIC8vICEgc28gaXQgY291bGQgYnJlYWsgKG1heWJlLCBldmVudHVhbGx5KS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9icmFubmVtYW4vODA0ODUyMCM3LXRoZS1oYWNrXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXF1aXJlKCdtb2R1bGUnKS5Nb2R1bGUuX2luaXRQYXRocygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBpZiAoIXByb2Nlc3MuZW52Lk5PREVfUEFUSCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IG5vZGVNb2R1bGVzUm9vdDtcbiAgICBpZiAocmVmcmVzaFJlcXVpcmVQYXRocygpKSB7XG4gICAgICBwcm9jZXNzLmVudi5BUFBJVU1fT01JVF9QRUVSX0RFUFMgPSAnMSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5OT0RFX1BBVEg7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5vZGVQYXRoUGFydHMgPSBwcm9jZXNzLmVudi5OT0RFX1BBVEguc3BsaXQocGF0aC5kZWxpbWl0ZXIpO1xuICBpZiAobm9kZVBhdGhQYXJ0cy5pbmNsdWRlcyhub2RlTW9kdWxlc1Jvb3QpKSB7XG4gICAgcHJvY2Vzcy5lbnYuQVBQSVVNX09NSVRfUEVFUl9ERVBTID0gJzEnO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG5vZGVQYXRoUGFydHMucHVzaChub2RlTW9kdWxlc1Jvb3QpO1xuICBwcm9jZXNzLmVudi5OT0RFX1BBVEggPSBub2RlUGF0aFBhcnRzLmpvaW4ocGF0aC5kZWxpbWl0ZXIpO1xuICBpZiAocmVmcmVzaFJlcXVpcmVQYXRocygpKSB7XG4gICAgcHJvY2Vzcy5lbnYuQVBQSVVNX09NSVRfUEVFUl9ERVBTID0gJzEnO1xuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IF8ud2l0aG91dChub2RlUGF0aFBhcnRzLCBub2RlTW9kdWxlc1Jvb3QpLmpvaW4ocGF0aC5kZWxpbWl0ZXIpO1xuICB9XG59XG5cbi8qKlxuICogUHVsbHMgdGhlIGluaXRpYWwgdmFsdWVzIG9mIEFwcGl1bSBzZXR0aW5ncyBmcm9tIHRoZSBnaXZlbiBjYXBhYmlsaXRpZXMgYXJndW1lbnQuXG4gKiBFYWNoIHNldHRpbmcgaXRlbSBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4gKiBgc2V0dGluZ1tzZXR0aW5nX25hbWVdOiBzZXR0aW5nX3ZhbHVlYFxuICogVGhlIGNhcGFiaWxpdGllcyBhcmd1bWVudCBpdHNlbGYgZ2V0cyBtdXRhdGVkLCBzbyBpdCBkb2VzIG5vdCBjb250YWluIHBhcnNlZFxuICogc2V0dGluZ3MgYW55bW9yZSB0byBhdm9pZCBmdXJ0aGVyIHBhcnNpbmcgaXNzdWVzLlxuICogQ2hlY2tcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2Jsb2IvbWFzdGVyL2RvY3MvZW4vYWR2YW5jZWQtY29uY2VwdHMvc2V0dGluZ3MubWRcbiAqIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGF2YWlsYWJsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0gez9PYmplY3R9IGNhcHMgLSBDYXBhYmlsaXRpZXMgZGljdGlvbmFyeS4gSXQgaXMgbXV0YXRlZCBpZlxuICogb25lIG9yIG1vcmUgc2V0dGluZ3MgaGF2ZSBiZWVuIHB1bGxlZCBmcm9tIGl0XG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gQW4gZW1wdHkgZGljdGlvbmFyeSBpZiB0aGUgZ2l2ZW4gY2FwcyBjb250YWlucyBub1xuICogc2V0dGluZyBpdGVtcyBvciBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBwYXJzZWQgQXBwaXVtIHNldHRpbmcgbmFtZXMgYWxvbmcgd2l0aFxuICogdGhlaXIgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBwdWxsU2V0dGluZ3MoY2Fwcykge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYXBzKSB8fCBfLmlzRW1wdHkoY2FwcykpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgY29uc3QgbWF0Y2ggPSAvXFxic2V0dGluZ3NcXFsoXFxTKylcXF0kLy5leGVjKGtleSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzdWx0W21hdGNoWzFdXSA9IHZhbHVlO1xuICAgIGRlbGV0ZSBjYXBzW2tleV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IHtcbiAgaW5zcGVjdCxcbiAgcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIsXG4gIGluc2VydEFwcGl1bVByZWZpeGVzLFxuICBnZXRQYWNrYWdlVmVyc2lvbixcbiAgcHVsbFNldHRpbmdzLFxuICByZW1vdmVBcHBpdW1QcmVmaXhlcyxcbiAgYWRqdXN0Tm9kZVBhdGgsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5TdHJpbmdSZWNvcmR9IFN0cmluZ1JlY29yZFxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkJhc2VEcml2ZXJDYXBDb25zdHJhaW50c30gQmFzZURyaXZlckNhcENvbnN0cmFpbnRzXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge0NvbnN0cmFpbnRzfSBbQz1CYXNlRHJpdmVyQ2FwQ29uc3RyYWludHNdXG4gKiBAdGVtcGxhdGUgW0o9YW55XVxuICogQHR5cGVkZWYgUGFyc2VkRHJpdmVyQ2Fwc1xuICogQHByb3BlcnR5IHtDYXBhYmlsaXRpZXM8Qz59IGRlc2lyZWRDYXBzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvdG9jb2xcbiAqIEBwcm9wZXJ0eSB7Sn0gW3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllc11cbiAqIEBwcm9wZXJ0eSB7VzNDQ2FwYWJpbGl0aWVzPEM+fSBbcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzXVxuICovXG5cbi8qKlxuICogQHRvZG8gcHJvdG9jb2wgaXMgbW9yZSBzcGVjaWZpY1xuICogQHRlbXBsYXRlIHtDb25zdHJhaW50c30gW0M9QmFzZURyaXZlckNhcENvbnN0cmFpbnRzXVxuICogQHRlbXBsYXRlIFtKPWFueV1cbiAqIEB0eXBlZGVmIEludmFsaWRDYXBzXG4gKiBAcHJvcGVydHkge0Vycm9yfSBlcnJvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb3RvY29sXG4gKiBAcHJvcGVydHkge0NhcGFiaWxpdGllczxDPn0gW2Rlc2lyZWRDYXBzXVxuICogQHByb3BlcnR5IHtKfSBbcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzXVxuICogQHByb3BlcnR5IHtXM0NDYXBhYmlsaXRpZXM8Qz59IFtwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXNdXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge0NvbnN0cmFpbnRzfSBbQz1CYXNlRHJpdmVyQ2FwQ29uc3RyYWludHNdXG4gKiBAdGVtcGxhdGUge1N0cmluZ1JlY29yZHx2b2lkfSBbRXh0cmE9dm9pZF1cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5DYXBhYmlsaXRpZXM8QywgRXh0cmE+fSBDYXBhYmlsaXRpZXNcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7Q29uc3RyYWludHN9IFtDPUJhc2VEcml2ZXJDYXBDb25zdHJhaW50c11cbiAqIEB0ZW1wbGF0ZSB7U3RyaW5nUmVjb3JkfHZvaWR9IFtFeHRyYT12b2lkXVxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlczQ0NhcGFiaWxpdGllczxDLCBFeHRyYT59IFczQ0NhcGFiaWxpdGllc1xuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtDb25zdHJhaW50c30gW0M9QmFzZURyaXZlckNhcENvbnN0cmFpbnRzXVxuICogQHRlbXBsYXRlIHtTdHJpbmdSZWNvcmR8dm9pZH0gW0V4dHJhPXZvaWRdXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuTlNDYXBhYmlsaXRpZXM8QywgRXh0cmE+fSBOU0NhcGFiaWxpdGllc1xuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtDb25zdHJhaW50c30gQ1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNvbnN0cmFpbnRzVG9DYXBzPEM+fSBDb25zdHJhaW50c1RvQ2Fwc1xuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3R5cGUtZmVzdCcpLlN0cmluZ0tleU9mPFQ+fSBTdHJpbmdLZXlPZlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNvbnN0cmFpbnRzfSBDb25zdHJhaW50c1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsUUFBMUI7QUFDQSxNQUFNQyx1QkFBdUIsR0FBRyxJQUFJQyxHQUFKLENBQVEsQ0FBQyxHQUFHQyx5QkFBSixFQUFtQkMsR0FBbkIsQ0FBd0JDLEdBQUQsSUFBU0EsR0FBRyxDQUFDQyxXQUFKLEVBQWhDLENBQVIsQ0FBaEM7QUFTQSxNQUFNQyxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxLQUFuQzs7QUFPQSxNQUFNQyxPQUFPLEdBQUdDLGVBQUEsQ0FBRUMsSUFBRixD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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":["W3C_APPIUM_PREFIX","STANDARD_CAPS_LOWERCASE","Set","STANDARD_CAPS","map","cap","toLowerCase","isStdoutTTY","process","stdout","isTTY","inspect","_","flow","partialRight","dump","colors","depth","compact","args","logger","info","parseCapsForInnerDriver","jsonwpCapabilities","w3cCapabilities","constraints","defaultCapabilities","hasW3CCaps","isPlainObject","has","hasJSONWPCaps","desiredCaps","processedW3CCapabilities","processedJsonwpCapabilities","protocol","PROTOCOLS","W3C","error","Error","cloneDeep","isEmpty","defaultCapKey","defaultCapValue","toPairs","isCapAlreadySet","firstMatchEntry","firstMatch","removeAppiumPrefixes","removeAppiumPrefix","alwaysMatch","processCapabilities","message","insertAppiumPrefixes","caps","mapKeys","key","includes","prefix","startsWith","substring","length","getPackageVersion","pkgName","pkgInfo","require","version","adjustNodePath","selfRoot","node","getModuleRootSync","__filename","path","dirname","nodeModulesRoot","refreshRequirePaths","Module","_initPaths","e","env","NODE_PATH","APPIUM_OMIT_PEER_DEPS","nodePathParts","split","delimiter","push","join","without","pullSettings","result","value","match","exec"],"sources":["../../lib/utils.js"],"sourcesContent":["import _ from 'lodash';\nimport logger from './logger';\nimport {processCapabilities, PROTOCOLS, STANDARD_CAPS} from '@appium/base-driver';\nimport {inspect as dump} from 'util';\nimport {node} from '@appium/support';\nimport path from 'path';\n\nconst W3C_APPIUM_PREFIX = 'appium';\nconst STANDARD_CAPS_LOWERCASE = new Set([...STANDARD_CAPS].map((cap) => cap.toLowerCase()));\n\n/**\n *\n * If `stdout` is a TTY, this is `true`.\n *\n * Used for tighter control over log output.\n * @type {boolean}\n */\nconst isStdoutTTY = process.stdout.isTTY;\n\n/**\n * Dumps to value to the console using `info` logger.\n *\n * @todo May want to force color to be `false` if {@link isStdoutTTY} is `false`.\n */\nconst inspect = _.flow(\n _.partialRight(\n /** @type {(object: any, options: import('util').InspectOptions) => string} */ (dump),\n {colors: true, depth: null, compact: !isStdoutTTY}\n ),\n (...args) => {\n logger.info(...args);\n }\n);\n\n/**\n * Takes the caps that were provided in the request and translates them\n * into caps that can be used by the inner drivers.\n *\n * @template {Constraints} C\n * @template [J=any]\n * @param {J} jsonwpCapabilities\n * @param {W3CCapabilities<C>} w3cCapabilities\n * @param {C} constraints\n * @param {NSCapabilities<C>} [defaultCapabilities]\n * @returns {ParsedDriverCaps<C,J>|InvalidCaps<C,J>}\n */\nfunction parseCapsForInnerDriver(\n jsonwpCapabilities,\n w3cCapabilities,\n constraints = /** @type {C} */ ({}),\n defaultCapabilities = {}\n) {\n // Check if the caller sent JSONWP caps, W3C caps, or both\n const hasW3CCaps =\n _.isPlainObject(w3cCapabilities) &&\n (_.has(w3cCapabilities, 'alwaysMatch') || _.has(w3cCapabilities, 'firstMatch'));\n const hasJSONWPCaps = _.isPlainObject(jsonwpCapabilities);\n let desiredCaps = /** @type {ParsedDriverCaps<C>['desiredCaps']} */ ({});\n /** @type {ParsedDriverCaps<C>['processedW3CCapabilities']} */\n let processedW3CCapabilities;\n /** @type {ParsedDriverCaps<C>['processedJsonwpCapabilities']} */\n let processedJsonwpCapabilities;\n\n if (!hasW3CCaps) {\n return /** @type {InvalidCaps<C>} */ ({\n protocol: PROTOCOLS.W3C,\n error: new Error('W3C capabilities should be provided'),\n });\n }\n\n const {W3C} = PROTOCOLS;\n const protocol = W3C;\n\n // Make sure we don't mutate the original arguments\n jsonwpCapabilities = _.cloneDeep(jsonwpCapabilities);\n w3cCapabilities = _.cloneDeep(w3cCapabilities);\n defaultCapabilities = _.cloneDeep(defaultCapabilities);\n\n if (!_.isEmpty(defaultCapabilities)) {\n if (hasW3CCaps) {\n for (const [defaultCapKey, defaultCapValue] of _.toPairs(defaultCapabilities)) {\n let isCapAlreadySet = false;\n // Check if the key is already present in firstMatch entries\n for (const firstMatchEntry of w3cCapabilities.firstMatch ?? []) {\n if (\n _.isPlainObject(firstMatchEntry) &&\n _.has(removeAppiumPrefixes(firstMatchEntry), removeAppiumPrefix(defaultCapKey))\n ) {\n isCapAlreadySet = true;\n break;\n }\n }\n // Check if the key is already present in alwaysMatch entries\n isCapAlreadySet =\n isCapAlreadySet ||\n (_.isPlainObject(w3cCapabilities.alwaysMatch) &&\n _.has(\n removeAppiumPrefixes(w3cCapabilities.alwaysMatch),\n removeAppiumPrefix(defaultCapKey)\n ));\n if (isCapAlreadySet) {\n // Skip if the key is already present in the provided caps\n continue;\n }\n\n // Only add the default capability if it is not overridden\n if (_.isEmpty(w3cCapabilities.firstMatch)) {\n w3cCapabilities.firstMatch = /** @type {W3CCapabilities<C>['firstMatch']} */ ([\n {[defaultCapKey]: defaultCapValue},\n ]);\n } else {\n w3cCapabilities.firstMatch[0][defaultCapKey] = defaultCapValue;\n }\n }\n }\n if (hasJSONWPCaps) {\n jsonwpCapabilities = {\n ...removeAppiumPrefixes(defaultCapabilities),\n ...jsonwpCapabilities,\n };\n }\n }\n\n // Get MJSONWP caps\n if (hasJSONWPCaps) {\n processedJsonwpCapabilities = {...jsonwpCapabilities};\n }\n\n // Get W3C caps\n if (hasW3CCaps) {\n // Call the process capabilities algorithm to find matching caps on the W3C\n // (see: https://github.com/jlipps/simple-wd-spec#processing-capabilities)\n try {\n desiredCaps = processCapabilities(w3cCapabilities, constraints, true);\n } catch (error) {\n logger.info(`Could not parse W3C capabilities: ${error.message}`);\n return /** @type {InvalidCaps<C,J>} */ ({\n desiredCaps,\n processedJsonwpCapabilities,\n processedW3CCapabilities,\n protocol,\n error,\n });\n }\n\n // Create a new w3c capabilities payload that contains only the matching caps in `alwaysMatch`\n processedW3CCapabilities = {\n alwaysMatch: {...insertAppiumPrefixes(desiredCaps)},\n firstMatch: [{}],\n };\n }\n\n return /** @type {ParsedDriverCaps<C,J>} */ ({\n desiredCaps,\n processedJsonwpCapabilities,\n processedW3CCapabilities,\n protocol,\n });\n}\n\n/**\n * Takes a capabilities objects and prefixes capabilities with `appium:`\n * @template {Constraints} [C={}]\n * @param {Capabilities<C>} caps - Desired capabilities object\n * @returns {NSCapabilities<C>}\n */\nfunction insertAppiumPrefixes(caps) {\n return /** @type {NSCapabilities<C>} */ (\n _.mapKeys(caps, (_, key) =>\n STANDARD_CAPS_LOWERCASE.has(key.toLowerCase()) || key.includes(':')\n ? key\n : `${W3C_APPIUM_PREFIX}:${key}`\n )\n );\n}\n\n/**\n * @template {Constraints} [C={}]\n * @param {NSCapabilities<C>} caps\n * @returns {Capabilities<C>}\n */\nfunction removeAppiumPrefixes(caps) {\n return /** @type {Capabilities<C>} */ (_.mapKeys(caps, (_, key) => removeAppiumPrefix(key)));\n}\n\n/**\n * @param {string} key\n * @returns {string}\n */\nfunction removeAppiumPrefix(key) {\n const prefix = `${W3C_APPIUM_PREFIX}:`;\n return _.startsWith(key, prefix) ? key.substring(prefix.length) : key;\n}\n\n/**\n *\n * @param {string} pkgName\n * @returns {string|undefined}\n */\nfunction getPackageVersion(pkgName) {\n const pkgInfo = require(`${pkgName}/package.json`) || {};\n return pkgInfo.version;\n}\n\n/**\n * Adjusts NODE_PATH environment variable,\n * so drivers and plugins could load their peer dependencies.\n * Read https://nodejs.org/api/modules.html#loading-from-the-global-folders\n * for more details.\n * @returns {void}\n */\nfunction adjustNodePath() {\n const selfRoot = node.getModuleRootSync('appium', __filename);\n if (!selfRoot || path.dirname(selfRoot).length >= selfRoot.length) {\n return;\n }\n const nodeModulesRoot = path.dirname(selfRoot);\n\n const refreshRequirePaths = () => {\n try {\n // ! This hack allows us to avoid modification of import\n // ! statements in client modules. It uses a private API though,\n // ! so it could break (maybe, eventually).\n // See https://gist.github.com/branneman/8048520#7-the-hack\n // @ts-ignore\n require('module').Module._initPaths();\n return true;\n } catch (e) {\n return false;\n }\n };\n\n if (!process.env.NODE_PATH) {\n process.env.NODE_PATH = nodeModulesRoot;\n if (refreshRequirePaths()) {\n process.env.APPIUM_OMIT_PEER_DEPS = '1';\n } else {\n delete process.env.NODE_PATH;\n }\n return;\n }\n\n const nodePathParts = process.env.NODE_PATH.split(path.delimiter);\n if (nodePathParts.includes(nodeModulesRoot)) {\n process.env.APPIUM_OMIT_PEER_DEPS = '1';\n return;\n }\n\n nodePathParts.push(nodeModulesRoot);\n process.env.NODE_PATH = nodePathParts.join(path.delimiter);\n if (refreshRequirePaths()) {\n process.env.APPIUM_OMIT_PEER_DEPS = '1';\n } else {\n process.env.NODE_PATH = _.without(nodePathParts, nodeModulesRoot).join(path.delimiter);\n }\n}\n\n/**\n * Pulls the initial values of Appium settings from the given capabilities argument.\n * Each setting item must satisfy the following format:\n * `setting[setting_name]: setting_value`\n * The capabilities argument itself gets mutated, so it does not contain parsed\n * settings anymore to avoid further parsing issues.\n * Check\n * https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/settings.md\n * for more details on the available settings.\n *\n * @param {?Object} caps - Capabilities dictionary. It is mutated if\n * one or more settings have been pulled from it\n * @return {Object} - An empty dictionary if the given caps contains no\n * setting items or a dictionary containing parsed Appium setting names along with\n * their values.\n */\nfunction pullSettings(caps) {\n if (!_.isPlainObject(caps) || _.isEmpty(caps)) {\n return {};\n }\n\n const result = {};\n for (const [key, value] of _.toPairs(caps)) {\n const match = /\\bsettings\\[(\\S+)\\]$/.exec(key);\n if (!match) {\n continue;\n }\n\n result[match[1]] = value;\n delete caps[key];\n }\n return result;\n}\n\nexport {\n inspect,\n parseCapsForInnerDriver,\n insertAppiumPrefixes,\n getPackageVersion,\n pullSettings,\n removeAppiumPrefixes,\n adjustNodePath,\n};\n\n/**\n * @typedef {import('@appium/types').StringRecord} StringRecord\n * @typedef {import('@appium/types').BaseDriverCapConstraints} BaseDriverCapConstraints\n */\n\n/**\n * @template {Constraints} [C=BaseDriverCapConstraints]\n * @template [J=any]\n * @typedef ParsedDriverCaps\n * @property {Capabilities<C>} desiredCaps\n * @property {string} protocol\n * @property {J} [processedJsonwpCapabilities]\n * @property {W3CCapabilities<C>} [processedW3CCapabilities]\n */\n\n/**\n * @todo protocol is more specific\n * @template {Constraints} [C=BaseDriverCapConstraints]\n * @template [J=any]\n * @typedef InvalidCaps\n * @property {Error} error\n * @property {string} protocol\n * @property {Capabilities<C>} [desiredCaps]\n * @property {J} [processedJsonwpCapabilities]\n * @property {W3CCapabilities<C>} [processedW3CCapabilities]\n */\n\n/**\n * @template {Constraints} [C=BaseDriverCapConstraints]\n * @template {StringRecord|void} [Extra=void]\n * @typedef {import('@appium/types').Capabilities<C, Extra>} Capabilities\n */\n\n/**\n * @template {Constraints} [C=BaseDriverCapConstraints]\n * @template {StringRecord|void} [Extra=void]\n * @typedef {import('@appium/types').W3CCapabilities<C, Extra>} W3CCapabilities\n */\n\n/**\n * @template {Constraints} [C=BaseDriverCapConstraints]\n * @template {StringRecord|void} [Extra=void]\n * @typedef {import('@appium/types').NSCapabilities<C, Extra>} NSCapabilities\n */\n\n/**\n * @template {Constraints} C\n * @typedef {import('@appium/types').ConstraintsToCaps<C>} ConstraintsToCaps\n */\n\n/**\n * @template T\n * @typedef {import('type-fest').StringKeyOf<T>} StringKeyOf\n */\n\n/**\n * @typedef {import('@appium/types').Constraints} Constraints\n */\n"],"mappings":"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"}