appium 2.0.0-beta.43 → 2.0.0-beta.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/appium.d.ts +137 -15
- package/build/lib/appium.d.ts.map +1 -1
- package/build/lib/appium.js +5 -5
- package/build/lib/appium.js.map +1 -0
- package/build/lib/cli/args.js +3 -3
- package/build/lib/cli/args.js.map +1 -0
- package/build/lib/cli/driver-command.js +3 -3
- package/build/lib/cli/driver-command.js.map +1 -0
- package/build/lib/cli/extension-command.d.ts.map +1 -1
- package/build/lib/cli/extension-command.js +4 -4
- package/build/lib/cli/extension-command.js.map +1 -0
- package/build/lib/cli/extension.js +3 -3
- package/build/lib/cli/extension.js.map +1 -0
- package/build/lib/cli/parser.js +3 -3
- package/build/lib/cli/parser.js.map +1 -0
- package/build/lib/cli/plugin-command.js +3 -3
- package/build/lib/cli/plugin-command.js.map +1 -0
- package/build/lib/cli/utils.js +3 -3
- package/build/lib/cli/utils.js.map +1 -0
- package/build/lib/config-file.js +3 -3
- package/build/lib/config-file.js.map +1 -0
- package/build/lib/config.js +3 -3
- package/build/lib/config.js.map +1 -0
- package/build/lib/constants.js +3 -3
- package/build/lib/constants.js.map +1 -0
- package/build/lib/extension/driver-config.d.ts +3 -2
- package/build/lib/extension/driver-config.d.ts.map +1 -1
- package/build/lib/extension/driver-config.js +3 -3
- package/build/lib/extension/driver-config.js.map +1 -0
- package/build/lib/extension/extension-config.js +3 -3
- package/build/lib/extension/extension-config.js.map +1 -0
- package/build/lib/extension/index.js +3 -3
- package/build/lib/extension/index.js.map +1 -0
- package/build/lib/extension/manifest.d.ts +1 -2
- package/build/lib/extension/manifest.d.ts.map +1 -1
- package/build/lib/extension/manifest.js +35 -30
- package/build/lib/extension/manifest.js.map +1 -0
- package/build/lib/extension/package-changed.js +3 -3
- package/build/lib/extension/package-changed.js.map +1 -0
- package/build/lib/extension/plugin-config.js +3 -3
- package/build/lib/extension/plugin-config.js.map +1 -0
- package/build/lib/grid-register.js +3 -3
- package/build/lib/grid-register.js.map +1 -0
- package/build/lib/logger.js.map +1 -0
- package/build/lib/logsink.js +3 -3
- package/build/lib/logsink.js.map +1 -0
- package/build/lib/main.d.ts.map +1 -1
- package/build/lib/main.js +4 -3
- package/build/lib/main.js.map +1 -0
- package/build/lib/schema/arg-spec.js +3 -3
- package/build/lib/schema/arg-spec.js.map +1 -0
- package/build/lib/schema/cli-args.js +3 -3
- package/build/lib/schema/cli-args.js.map +1 -0
- package/build/lib/schema/cli-transformers.d.ts +1 -1
- package/build/lib/schema/cli-transformers.d.ts.map +1 -1
- package/build/lib/schema/cli-transformers.js +23 -18
- package/build/lib/schema/cli-transformers.js.map +1 -0
- package/build/lib/schema/index.js.map +1 -0
- package/build/lib/schema/keywords.js.map +1 -0
- package/build/lib/schema/schema.js +3 -3
- package/build/lib/schema/schema.js.map +1 -0
- package/build/lib/utils.d.ts +296 -27
- package/build/lib/utils.d.ts.map +1 -1
- package/build/lib/utils.js +60 -27
- package/build/lib/utils.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/lib/appium.js +32 -18
- package/lib/cli/extension-command.js +2 -1
- package/lib/extension/driver-config.js +2 -1
- package/lib/extension/manifest.js +49 -32
- package/lib/main.js +3 -1
- package/lib/schema/cli-transformers.js +27 -23
- package/lib/utils.js +143 -62
- package/package.json +17 -18
- package/test.d.ts +0 -7
- package/test.js +0 -13
package/build/lib/utils.d.ts
CHANGED
|
@@ -1,21 +1,274 @@
|
|
|
1
|
-
export type
|
|
2
|
-
|
|
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?:
|
|
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("@
|
|
11
|
-
|
|
12
|
-
|
|
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
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
* @
|
|
30
|
-
* @
|
|
31
|
-
* @param {
|
|
32
|
-
* @param {
|
|
33
|
-
* @
|
|
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:
|
|
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
|
-
* @
|
|
39
|
-
* @
|
|
293
|
+
* @template {Constraints} [C={}]
|
|
294
|
+
* @param {Capabilities<C>} caps - Desired capabilities object
|
|
295
|
+
* @returns {NSCapabilities<C>}
|
|
40
296
|
*/
|
|
41
|
-
export function insertAppiumPrefixes(caps:
|
|
42
|
-
|
|
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,9 +319,17 @@ export function getPackageVersion(pkgName: any): any;
|
|
|
58
319
|
*/
|
|
59
320
|
export function pullSettings(caps: any | null): any;
|
|
60
321
|
/**
|
|
61
|
-
*
|
|
62
|
-
* @param {
|
|
63
|
-
* @returns {Capabilities}
|
|
322
|
+
* @template {Constraints} [C={}]
|
|
323
|
+
* @param {NSCapabilities<C>} caps
|
|
324
|
+
* @returns {Capabilities<C>}
|
|
325
|
+
*/
|
|
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>;
|
|
327
|
+
/**
|
|
328
|
+
* Adjusts NODE_PATH environment variable,
|
|
329
|
+
* so drivers and plugins could load their peer dependencies.
|
|
330
|
+
* Read https://nodejs.org/api/modules.html#loading-from-the-global-folders
|
|
331
|
+
* for more details.
|
|
332
|
+
* @returns {void}
|
|
64
333
|
*/
|
|
65
|
-
export function
|
|
334
|
+
export function adjustNodePath(): void;
|
|
66
335
|
//# sourceMappingURL=utils.d.ts.map
|
package/build/lib/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":"
|
|
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"}
|
package/build/lib/utils.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
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
|
});
|
|
6
|
+
exports.adjustNodePath = adjustNodePath;
|
|
8
7
|
exports.getPackageVersion = getPackageVersion;
|
|
9
8
|
exports.insertAppiumPrefixes = insertAppiumPrefixes;
|
|
10
9
|
exports.inspect = void 0;
|
|
@@ -22,7 +21,14 @@ var _baseDriver = require("@appium/base-driver");
|
|
|
22
21
|
|
|
23
22
|
var _util = require("util");
|
|
24
23
|
|
|
24
|
+
var _support = require("@appium/support");
|
|
25
|
+
|
|
26
|
+
var _path = _interopRequireDefault(require("path"));
|
|
27
|
+
|
|
28
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
+
|
|
25
30
|
const W3C_APPIUM_PREFIX = 'appium';
|
|
31
|
+
const STANDARD_CAPS_LOWERCASE = new Set([..._baseDriver.STANDARD_CAPS].map(cap => cap.toLowerCase()));
|
|
26
32
|
const isStdoutTTY = process.stdout.isTTY;
|
|
27
33
|
|
|
28
34
|
const inspect = _lodash.default.flow(_lodash.default.partialRight(_util.inspect, {
|
|
@@ -64,7 +70,7 @@ function parseCapsForInnerDriver(jsonwpCapabilities, w3cCapabilities, constraint
|
|
|
64
70
|
for (const [defaultCapKey, defaultCapValue] of _lodash.default.toPairs(defaultCapabilities)) {
|
|
65
71
|
let isCapAlreadySet = false;
|
|
66
72
|
|
|
67
|
-
for (const firstMatchEntry of w3cCapabilities.firstMatch
|
|
73
|
+
for (const firstMatchEntry of w3cCapabilities.firstMatch ?? []) {
|
|
68
74
|
if (_lodash.default.isPlainObject(firstMatchEntry) && _lodash.default.has(removeAppiumPrefixes(firstMatchEntry), removeAppiumPrefix(defaultCapKey))) {
|
|
69
75
|
isCapAlreadySet = true;
|
|
70
76
|
break;
|
|
@@ -130,32 +136,11 @@ function parseCapsForInnerDriver(jsonwpCapabilities, w3cCapabilities, constraint
|
|
|
130
136
|
}
|
|
131
137
|
|
|
132
138
|
function insertAppiumPrefixes(caps) {
|
|
133
|
-
|
|
134
|
-
let prefixedCaps = {};
|
|
135
|
-
|
|
136
|
-
for (let [name, value] of _lodash.default.toPairs(caps)) {
|
|
137
|
-
if (STANDARD_CAPS.includes(name) || name.includes(':')) {
|
|
138
|
-
prefixedCaps[name] = value;
|
|
139
|
-
} else {
|
|
140
|
-
prefixedCaps[`${W3C_APPIUM_PREFIX}:${name}`] = value;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
return prefixedCaps;
|
|
139
|
+
return _lodash.default.mapKeys(caps, (_, key) => STANDARD_CAPS_LOWERCASE.has(key.toLowerCase()) || key.includes(':') ? key : `${W3C_APPIUM_PREFIX}:${key}`);
|
|
145
140
|
}
|
|
146
141
|
|
|
147
142
|
function removeAppiumPrefixes(caps) {
|
|
148
|
-
|
|
149
|
-
return caps;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const fixedCaps = {};
|
|
153
|
-
|
|
154
|
-
for (let [name, value] of _lodash.default.toPairs(caps)) {
|
|
155
|
-
fixedCaps[removeAppiumPrefix(name)] = value;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
return fixedCaps;
|
|
143
|
+
return _lodash.default.mapKeys(caps, (_, key) => removeAppiumPrefix(key));
|
|
159
144
|
}
|
|
160
145
|
|
|
161
146
|
function removeAppiumPrefix(key) {
|
|
@@ -168,6 +153,54 @@ function getPackageVersion(pkgName) {
|
|
|
168
153
|
return pkgInfo.version;
|
|
169
154
|
}
|
|
170
155
|
|
|
156
|
+
function adjustNodePath() {
|
|
157
|
+
const selfRoot = _support.node.getModuleRootSync('appium', __filename);
|
|
158
|
+
|
|
159
|
+
if (!selfRoot || _path.default.dirname(selfRoot).length >= selfRoot.length) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const nodeModulesRoot = _path.default.dirname(selfRoot);
|
|
164
|
+
|
|
165
|
+
const refreshRequirePaths = () => {
|
|
166
|
+
try {
|
|
167
|
+
require('module').Module._initPaths();
|
|
168
|
+
|
|
169
|
+
return true;
|
|
170
|
+
} catch (e) {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
if (!process.env.NODE_PATH) {
|
|
176
|
+
process.env.NODE_PATH = nodeModulesRoot;
|
|
177
|
+
|
|
178
|
+
if (refreshRequirePaths()) {
|
|
179
|
+
process.env.APPIUM_OMIT_PEER_DEPS = '1';
|
|
180
|
+
} else {
|
|
181
|
+
delete process.env.NODE_PATH;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const nodePathParts = process.env.NODE_PATH.split(_path.default.delimiter);
|
|
188
|
+
|
|
189
|
+
if (nodePathParts.includes(nodeModulesRoot)) {
|
|
190
|
+
process.env.APPIUM_OMIT_PEER_DEPS = '1';
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
nodePathParts.push(nodeModulesRoot);
|
|
195
|
+
process.env.NODE_PATH = nodePathParts.join(_path.default.delimiter);
|
|
196
|
+
|
|
197
|
+
if (refreshRequirePaths()) {
|
|
198
|
+
process.env.APPIUM_OMIT_PEER_DEPS = '1';
|
|
199
|
+
} else {
|
|
200
|
+
process.env.NODE_PATH = _lodash.default.without(nodePathParts, nodeModulesRoot).join(_path.default.delimiter);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
171
204
|
function pullSettings(caps) {
|
|
172
205
|
if (!_lodash.default.isPlainObject(caps) || _lodash.default.isEmpty(caps)) {
|
|
173
206
|
return {};
|
|
@@ -188,4 +221,4 @@ function pullSettings(caps) {
|
|
|
188
221
|
|
|
189
222
|
return result;
|
|
190
223
|
}
|
|
191
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImlzU3Rkb3V0VFRZIiwicHJvY2VzcyIsInN0ZG91dCIsImlzVFRZIiwiaW5zcGVjdCIsIl8iLCJmbG93IiwicGFydGlhbFJpZ2h0IiwiZHVtcCIsImNvbG9ycyIsImRlcHRoIiwiY29tcGFjdCIsImFyZ3MiLCJsb2dnZXIiLCJpbmZvIiwicGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIiLCJqc29ud3BDYXBhYmlsaXRpZXMiLCJ3M2NDYXBhYmlsaXRpZXMiLCJjb25zdHJhaW50cyIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJoYXNXM0NDYXBzIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImhhc0pTT05XUENhcHMiLCJkZXNpcmVkQ2FwcyIsInByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyIsInByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyIsInByb3RvY29sIiwiUFJPVE9DT0xTIiwiVzNDIiwiZXJyb3IiLCJFcnJvciIsImNsb25lRGVlcCIsImlzRW1wdHkiLCJkZWZhdWx0Q2FwS2V5IiwiZGVmYXVsdENhcFZhbHVlIiwidG9QYWlycyIsImlzQ2FwQWxyZWFkeVNldCIsImZpcnN0TWF0Y2hFbnRyeSIsImZpcnN0TWF0Y2giLCJyZW1vdmVBcHBpdW1QcmVmaXhlcyIsInJlbW92ZUFwcGl1bVByZWZpeCIsImFsd2F5c01hdGNoIiwicHJvY2Vzc0NhcGFiaWxpdGllcyIsIm1lc3NhZ2UiLCJpbnNlcnRBcHBpdW1QcmVmaXhlcyIsImNhcHMiLCJTVEFOREFSRF9DQVBTIiwicHJlZml4ZWRDYXBzIiwibmFtZSIsInZhbHVlIiwiaW5jbHVkZXMiLCJmaXhlZENhcHMiLCJrZXkiLCJwcmVmaXgiLCJzdGFydHNXaXRoIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiZ2V0UGFja2FnZVZlcnNpb24iLCJwa2dOYW1lIiwicGtnSW5mbyIsInJlcXVpcmUiLCJ2ZXJzaW9uIiwicHVsbFNldHRpbmdzIiwicmVzdWx0IiwibWF0Y2giLCJleGVjIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7cHJvY2Vzc0NhcGFiaWxpdGllcywgUFJPVE9DT0xTfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7aW5zcGVjdCBhcyBkdW1wfSBmcm9tICd1dGlsJztcblxuY29uc3QgVzNDX0FQUElVTV9QUkVGSVggPSAnYXBwaXVtJztcblxuLyoqXG4gKlxuICogSWYgYHN0ZG91dGAgaXMgYSBUVFksIHRoaXMgaXMgYHRydWVgLlxuICpcbiAqIFVzZWQgZm9yIHRpZ2h0ZXIgY29udHJvbCBvdmVyIGxvZyBvdXRwdXQuXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaXNTdGRvdXRUVFkgPSBwcm9jZXNzLnN0ZG91dC5pc1RUWTtcblxuLyoqXG4gKiBEdW1wcyB0byB2YWx1ZSB0byB0aGUgY29uc29sZSB1c2luZyBgaW5mb2AgbG9nZ2VyLlxuICpcbiAqIEB0b2RvIE1heSB3YW50IHRvIGZvcmNlIGNvbG9yIHRvIGJlIGBmYWxzZWAgaWYge0BsaW5rIGlzU3Rkb3V0VFRZfSBpcyBgZmFsc2VgLlxuICovXG5jb25zdCBpbnNwZWN0ID0gXy5mbG93KFxuICBfLnBhcnRpYWxSaWdodChcbiAgICAvKiogQHR5cGUgeyhvYmplY3Q6IGFueSwgb3B0aW9uczogaW1wb3J0KCd1dGlsJykuSW5zcGVjdE9wdGlvbnMpID0+IHN0cmluZ30gKi8gKGR1bXApLFxuICAgIHtjb2xvcnM6IHRydWUsIGRlcHRoOiBudWxsLCBjb21wYWN0OiAhaXNTdGRvdXRUVFl9XG4gICksXG4gICguLi5hcmdzKSA9PiB7XG4gICAgbG9nZ2VyLmluZm8oLi4uYXJncyk7XG4gIH1cbik7XG5cbi8qKlxuICogVGFrZXMgdGhlIGNhcHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGFuZCB0cmFuc2xhdGVzIHRoZW1cbiAqIGludG8gY2FwcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBpbm5lciBkcml2ZXJzLlxuICpcbiAqIEBwYXJhbSB7YW55fSBqc29ud3BDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7VzNDQ2FwYWJpbGl0aWVzfSB3M2NDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29uc3RyYWludHN9IGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRlZmF1bHRDYXBhYmlsaXRpZXNDb25maWd9IFtkZWZhdWx0Q2FwYWJpbGl0aWVzXVxuICogQHJldHVybnMge1BhcnNlZERyaXZlckNhcHN8SW52YWxpZENhcHN9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyKFxuICBqc29ud3BDYXBhYmlsaXRpZXMsXG4gIHczY0NhcGFiaWxpdGllcyxcbiAgY29uc3RyYWludHMgPSB7fSxcbiAgZGVmYXVsdENhcGFiaWxpdGllcyA9IHt9XG4pIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGNhbGxlciBzZW50IEpTT05XUCBjYXBzLCBXM0MgY2Fwcywgb3IgYm90aFxuICBjb25zdCBoYXNXM0NDYXBzID1cbiAgICBfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzKSAmJlxuICAgIChfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdhbHdheXNNYXRjaCcpIHx8IF8uaGFzKHczY0NhcGFiaWxpdGllcywgJ2ZpcnN0TWF0Y2gnKSk7XG4gIGNvbnN0IGhhc0pTT05XUENhcHMgPSBfLmlzUGxhaW5PYmplY3QoanNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgbGV0IGRlc2lyZWRDYXBzID0gLyoqIEB0eXBlIHtQYXJzZWREcml2ZXJDYXBzWydkZXNpcmVkQ2FwcyddfSAqLyAoe30pO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzO1xuXG4gIGlmICghaGFzVzNDQ2Fwcykge1xuICAgIHJldHVybiAvKiogQHR5cGUge0ludmFsaWRDYXBzfSAqLyAoe1xuICAgICAgcHJvdG9jb2w6IFBST1RPQ09MUy5XM0MsXG4gICAgICBlcnJvcjogbmV3IEVycm9yKCdXM0MgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSBwcm92aWRlZCcpLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qge1czQ30gPSBQUk9UT0NPTFM7XG4gIGNvbnN0IHByb3RvY29sID0gVzNDO1xuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuICBqc29ud3BDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChqc29ud3BDYXBhYmlsaXRpZXMpO1xuICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICBkZWZhdWx0Q2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAoZGVmYXVsdENhcGFiaWxpdGllcyk7XG5cbiAgaWYgKCFfLmlzRW1wdHkoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgICAgZm9yIChjb25zdCBbZGVmYXVsdENhcEtleSwgZGVmYXVsdENhcFZhbHVlXSBvZiBfLnRvUGFpcnMoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICAgICAgbGV0IGlzQ2FwQWxyZWFkeVNldCA9IGZhbHNlO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBmaXJzdE1hdGNoIGVudHJpZXNcbiAgICAgICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggfHwgW10pIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBfLmlzUGxhaW5PYmplY3QoZmlyc3RNYXRjaEVudHJ5KSAmJlxuICAgICAgICAgICAgXy5oYXMocmVtb3ZlQXBwaXVtUHJlZml4ZXMoZmlyc3RNYXRjaEVudHJ5KSwgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNDYXBBbHJlYWR5U2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBhbHdheXNNYXRjaCBlbnRyaWVzXG4gICAgICAgIGlzQ2FwQWxyZWFkeVNldCA9XG4gICAgICAgICAgaXNDYXBBbHJlYWR5U2V0IHx8XG4gICAgICAgICAgKF8uaXNQbGFpbk9iamVjdCh3M2NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2gpICYmXG4gICAgICAgICAgICBfLmhhcyhcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4ZXModzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKSxcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgaWYgKGlzQ2FwQWxyZWFkeVNldCkge1xuICAgICAgICAgIC8vIFNraXAgaWYgdGhlIGtleSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHByb3ZpZGVkIGNhcHNcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgYWRkIHRoZSBkZWZhdWx0IGNhcGFiaWxpdHkgaWYgaXQgaXMgbm90IG92ZXJyaWRkZW5cbiAgICAgICAgaWYgKF8uaXNFbXB0eSh3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCkpIHtcbiAgICAgICAgICB3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCA9IFt7W2RlZmF1bHRDYXBLZXldOiBkZWZhdWx0Q2FwVmFsdWV9XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaFswXVtkZWZhdWx0Q2FwS2V5XSA9IGRlZmF1bHRDYXBWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGFzSlNPTldQQ2Fwcykge1xuICAgICAganNvbndwQ2FwYWJpbGl0aWVzID0ge1xuICAgICAgICAuLi5yZW1vdmVBcHBpdW1QcmVmaXhlcyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSxcbiAgICAgICAgLi4uanNvbndwQ2FwYWJpbGl0aWVzLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgTUpTT05XUCBjYXBzXG4gIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gey4uLmpzb253cENhcGFiaWxpdGllc307XG4gIH1cblxuICAvLyBHZXQgVzNDIGNhcHNcbiAgaWYgKGhhc1czQ0NhcHMpIHtcbiAgICAvLyBDYWxsIHRoZSBwcm9jZXNzIGNhcGFiaWxpdGllcyBhbGdvcml0aG0gdG8gZmluZCBtYXRjaGluZyBjYXBzIG9uIHRoZSBXM0NcbiAgICAvLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vamxpcHBzL3NpbXBsZS13ZC1zcGVjI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzKVxuICAgIHRyeSB7XG4gICAgICBkZXNpcmVkQ2FwcyA9IHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cywgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBDb3VsZCBub3QgcGFyc2UgVzNDIGNhcGFiaWxpdGllczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7SW52YWxpZENhcHN9ICovICh7XG4gICAgICAgIGRlc2lyZWRDYXBzLFxuICAgICAgICBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsXG4gICAgICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHczYyBjYXBhYmlsaXRpZXMgcGF5bG9hZCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIG1hdGNoaW5nIGNhcHMgaW4gYGFsd2F5c01hdGNoYFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyA9IHtcbiAgICAgIGFsd2F5c01hdGNoOiB7Li4uaW5zZXJ0QXBwaXVtUHJlZml4ZXMoZGVzaXJlZENhcHMpfSxcbiAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHN9ICovICh7XG4gICAgZGVzaXJlZENhcHMsXG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICBwcm90b2NvbCxcbiAgfSk7XG59XG5cbi8qKlxuICogVGFrZXMgYSBjYXBhYmlsaXRpZXMgb2JqZWN0cyBhbmQgcHJlZml4ZXMgY2FwYWJpbGl0aWVzIHdpdGggYGFwcGl1bTpgXG4gKiBAcGFyYW0ge0NhcGFiaWxpdGllc30gY2FwcyBEZXNpcmVkIGNhcGFiaWxpdGllcyBvYmplY3RcbiAqIEByZXR1cm5zIHtBcHBpdW1XM0NDYXBhYmlsaXRpZXN9XG4gKi9cbmZ1bmN0aW9uIGluc2VydEFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgLy8gU3RhbmRhcmQsIG5vbi1wcmVmaXhlZCBjYXBhYmlsaXRpZXMgKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tdGFibGUtb2Ytc3RhbmRhcmQtY2FwYWJpbGl0aWVzKVxuICBjb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAgICdicm93c2VyTmFtZScsXG4gICAgJ2Jyb3dzZXJWZXJzaW9uJyxcbiAgICAncGxhdGZvcm1OYW1lJyxcbiAgICAnYWNjZXB0SW5zZWN1cmVDZXJ0cycsXG4gICAgJ3BhZ2VMb2FkU3RyYXRlZ3knLFxuICAgICdwcm94eScsXG4gICAgJ3NldFdpbmRvd1JlY3QnLFxuICAgICd0aW1lb3V0cycsXG4gICAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJyxcbiAgXTtcblxuICBsZXQgcHJlZml4ZWRDYXBzID0ge307XG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgaWYgKFNUQU5EQVJEX0NBUFMuaW5jbHVkZXMobmFtZSkgfHwgbmFtZS5pbmNsdWRlcygnOicpKSB7XG4gICAgICBwcmVmaXhlZENhcHNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ZWRDYXBzW2Ake1czQ19BUFBJVU1fUFJFRklYfToke25hbWV9YF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByZWZpeGVkQ2Fwcztcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBcHBpdW1XM0NDYXBhYmlsaXRpZXN9IGNhcHNcbiAqIEByZXR1cm5zIHtDYXBhYmlsaXRpZXN9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykpIHtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIC8qKiBAdHlwZSB7Q2FwYWJpbGl0aWVzfSAqL1xuICBjb25zdCBmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBmaXhlZENhcHNbcmVtb3ZlQXBwaXVtUHJlZml4KG5hbWUpXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBmaXhlZENhcHM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeChrZXkpIHtcbiAgY29uc3QgcHJlZml4ID0gYCR7VzNDX0FQUElVTV9QUkVGSVh9OmA7XG4gIHJldHVybiBfLnN0YXJ0c1dpdGgoa2V5LCBwcmVmaXgpID8ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKSA6IGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2FnZVZlcnNpb24ocGtnTmFtZSkge1xuICBjb25zdCBwa2dJbmZvID0gcmVxdWlyZShgJHtwa2dOYW1lfS9wYWNrYWdlLmpzb25gKSB8fCB7fTtcbiAgcmV0dXJuIHBrZ0luZm8udmVyc2lvbjtcbn1cblxuLyoqXG4gKiBQdWxscyB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgQXBwaXVtIHNldHRpbmdzIGZyb20gdGhlIGdpdmVuIGNhcGFiaWxpdGllcyBhcmd1bWVudC5cbiAqIEVhY2ggc2V0dGluZyBpdGVtIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiAqIGBzZXR0aW5nW3NldHRpbmdfbmFtZV06IHNldHRpbmdfdmFsdWVgXG4gKiBUaGUgY2FwYWJpbGl0aWVzIGFyZ3VtZW50IGl0c2VsZiBnZXRzIG11dGF0ZWQsIHNvIGl0IGRvZXMgbm90IGNvbnRhaW4gcGFyc2VkXG4gKiBzZXR0aW5ncyBhbnltb3JlIHRvIGF2b2lkIGZ1cnRoZXIgcGFyc2luZyBpc3N1ZXMuXG4gKiBDaGVja1xuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi9hZHZhbmNlZC1jb25jZXB0cy9zZXR0aW5ncy5tZFxuICogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgYXZhaWxhYmxlIHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSB7P09iamVjdH0gY2FwcyAtIENhcGFiaWxpdGllcyBkaWN0aW9uYXJ5LiBJdCBpcyBtdXRhdGVkIGlmXG4gKiBvbmUgb3IgbW9yZSBzZXR0aW5ncyBoYXZlIGJlZW4gcHVsbGVkIGZyb20gaXRcbiAqIEByZXR1cm4ge09iamVjdH0gLSBBbiBlbXB0eSBkaWN0aW9uYXJ5IGlmIHRoZSBnaXZlbiBjYXBzIGNvbnRhaW5zIG5vXG4gKiBzZXR0aW5nIGl0ZW1zIG9yIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHBhcnNlZCBBcHBpdW0gc2V0dGluZyBuYW1lcyBhbG9uZyB3aXRoXG4gKiB0aGVpciB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHB1bGxTZXR0aW5ncyhjYXBzKSB7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGNhcHMpIHx8IF8uaXNFbXB0eShjYXBzKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBjb25zdCBtYXRjaCA9IC9cXGJzZXR0aW5nc1xcWyhcXFMrKVxcXSQvLmV4ZWMoa2V5KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXN1bHRbbWF0Y2hbMV1dID0gdmFsdWU7XG4gICAgZGVsZXRlIGNhcHNba2V5XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQge1xuICBpbnNwZWN0LFxuICBwYXJzZUNhcHNGb3JJbm5lckRyaXZlcixcbiAgaW5zZXJ0QXBwaXVtUHJlZml4ZXMsXG4gIGdldFBhY2thZ2VWZXJzaW9uLFxuICBwdWxsU2V0dGluZ3MsXG4gIHJlbW92ZUFwcGl1bVByZWZpeGVzLFxufTtcblxuLyoqXG4gKiBAdG9kbyBwcm90b2NvbCBpcyBtb3JlIHNwZWNpZmljXG4gKiBAdHlwZWRlZiBQYXJzZWREcml2ZXJDYXBzXG4gKiBAcHJvcGVydHkge0NhcGFiaWxpdGllc30gZGVzaXJlZENhcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm90b2NvbFxuICogQHByb3BlcnR5IHthbnl9IFtwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXNdXG4gKiBAcHJvcGVydHkge1czQ0NhcGFiaWxpdGllc30gW3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllc11cbiAqL1xuXG4vKipcbiAqIEB0b2RvIHByb3RvY29sIGlzIG1vcmUgc3BlY2lmaWNcbiAqIEB0eXBlZGVmIEludmFsaWRDYXBzXG4gKiBAcHJvcGVydHkge0Vycm9yfSBlcnJvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb3RvY29sXG4gKiBAcHJvcGVydHkge0NhcGFiaWxpdGllc30gW2Rlc2lyZWRDYXBzXVxuICogQHByb3BlcnR5IHthbnl9IFtwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXNdXG4gKiBAcHJvcGVydHkge1czQ0NhcGFiaWxpdGllc30gW3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllc11cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXN9IFczQ0NhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNhcGFiaWxpdGllc30gQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtVzNDQ2FwYWJpbGl0aWVzfSBBcHBpdW1XM0NDYXBhYmlsaXRpZXNcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsUUFBMUI7QUFTQSxNQUFNQyxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxLQUFuQzs7QUFPQSxNQUFNQyxPQUFPLEdBQUdDLGVBQUEsQ0FBRUMsSUFBRixDQUNkRCxlQUFBLENBQUVFLFlBQUYsQ0FDa0ZDLGFBRGxGLEVBRUU7RUFBQ0MsTUFBTSxFQUFFLElBQVQ7RUFBZUMsS0FBSyxFQUFFLElBQXRCO0VBQTRCQyxPQUFPLEVBQUUsQ0FBQ1g7QUFBdEMsQ0FGRixDQURjLEVBS2QsQ0FBQyxHQUFHWSxJQUFKLEtBQWE7RUFDWEMsZUFBQSxDQUFPQyxJQUFQLENBQVksR0FBR0YsSUFBZjtBQUNELENBUGEsQ0FBaEI7Ozs7QUFvQkEsU0FBU0csdUJBQVQsQ0FDRUMsa0JBREYsRUFFRUMsZUFGRixFQUdFQyxXQUFXLEdBQUcsRUFIaEIsRUFJRUMsbUJBQW1CLEdBQUcsRUFKeEIsRUFLRTtFQUVBLE1BQU1DLFVBQVUsR0FDZGYsZUFBQSxDQUFFZ0IsYUFBRixDQUFnQkosZUFBaEIsTUFDQ1osZUFBQSxDQUFFaUIsR0FBRixDQUFNTCxlQUFOLEVBQXVCLGFBQXZCLEtBQXlDWixlQUFBLENBQUVpQixHQUFGLENBQU1MLGVBQU4sRUFBdUIsWUFBdkIsQ0FEMUMsQ0FERjs7RUFHQSxNQUFNTSxhQUFhLEdBQUdsQixlQUFBLENBQUVnQixhQUFGLENBQWdCTCxrQkFBaEIsQ0FBdEI7O0VBQ0EsSUFBSVEsV0FBVyxHQUFtRCxFQUFsRTtFQUVBLElBQUlDLHdCQUFKO0VBRUEsSUFBSUMsMkJBQUo7O0VBRUEsSUFBSSxDQUFDTixVQUFMLEVBQWlCO0lBQ2YsT0FBbUM7TUFDakNPLFFBQVEsRUFBRUMscUJBQUEsQ0FBVUMsR0FEYTtNQUVqQ0MsS0FBSyxFQUFFLElBQUlDLEtBQUosQ0FBVSxxQ0FBVjtJQUYwQixDQUFuQztFQUlEOztFQUVELE1BQU07SUFBQ0Y7RUFBRCxJQUFRRCxxQkFBZDtFQUNBLE1BQU1ELFFBQVEsR0FBR0UsR0FBakI7RUFHQWIsa0JBQWtCLEdBQUdYLGVBQUEsQ0FBRTJCLFNBQUYsQ0FBWWhCLGtCQUFaLENBQXJCO0VBQ0FDLGVBQWUsR0FBR1osZUFBQSxDQUFFMkIsU0FBRixDQUFZZixlQUFaLENBQWxCO0VBQ0FFLG1CQUFtQixHQUFHZCxlQUFBLENBQUUyQixTQUFGLENBQVliLG1CQUFaLENBQXRCOztFQUVBLElBQUksQ0FBQ2QsZUFBQSxDQUFFNEIsT0FBRixDQUFVZCxtQkFBVixDQUFMLEVBQXFDO0lBQ25DLElBQUlDLFVBQUosRUFBZ0I7TUFDZCxLQUFLLE1BQU0sQ0FBQ2MsYUFBRCxFQUFnQkMsZUFBaEIsQ0FBWCxJQUErQzlCLGVBQUEsQ0FBRStCLE9BQUYsQ0FBVWpCLG1CQUFWLENBQS9DLEVBQStFO1FBQzdFLElBQUlrQixlQUFlLEdBQUcsS0FBdEI7O1FBRUEsS0FBSyxNQUFNQyxlQUFYLElBQThCckIsZUFBZSxDQUFDc0IsVUFBaEIsSUFBOEIsRUFBNUQsRUFBZ0U7VUFDOUQsSUFDRWxDLGVBQUEsQ0FBRWdCLGFBQUYsQ0FBZ0JpQixlQUFoQixLQUNBakMsZUFBQSxDQUFFaUIsR0FBRixDQUFNa0Isb0JBQW9CLENBQUNGLGVBQUQsQ0FBMUIsRUFBNkNHLGtCQUFrQixDQUFDUCxhQUFELENBQS9ELENBRkYsRUFHRTtZQUNBRyxlQUFlLEdBQUcsSUFBbEI7WUFDQTtVQUNEO1FBQ0Y7O1FBRURBLGVBQWUsR0FDYkEsZUFBZSxJQUNkaEMsZUFBQSxDQUFFZ0IsYUFBRixDQUFnQkosZUFBZSxDQUFDeUIsV0FBaEMsS0FDQ3JDLGVBQUEsQ0FBRWlCLEdBQUYsQ0FDRWtCLG9CQUFvQixDQUFDdkIsZUFBZSxDQUFDeUIsV0FBakIsQ0FEdEIsRUFFRUQsa0JBQWtCLENBQUNQLGFBQUQsQ0FGcEIsQ0FISjs7UUFPQSxJQUFJRyxlQUFKLEVBQXFCO1VBRW5CO1FBQ0Q7O1FBR0QsSUFBSWhDLGVBQUEsQ0FBRTRCLE9BQUYsQ0FBVWhCLGVBQWUsQ0FBQ3NCLFVBQTFCLENBQUosRUFBMkM7VUFDekN0QixlQUFlLENBQUNzQixVQUFoQixHQUE2QixDQUFDO1lBQUMsQ0FBQ0wsYUFBRCxHQUFpQkM7VUFBbEIsQ0FBRCxDQUE3QjtRQUNELENBRkQsTUFFTztVQUNMbEIsZUFBZSxDQUFDc0IsVUFBaEIsQ0FBMkIsQ0FBM0IsRUFBOEJMLGFBQTlCLElBQStDQyxlQUEvQztRQUNEO01BQ0Y7SUFDRjs7SUFDRCxJQUFJWixhQUFKLEVBQW1CO01BQ2pCUCxrQkFBa0IsR0FBRyxFQUNuQixHQUFHd0Isb0JBQW9CLENBQUNyQixtQkFBRCxDQURKO1FBRW5CLEdBQUdIO01BRmdCLENBQXJCO0lBSUQ7RUFDRjs7RUFHRCxJQUFJTyxhQUFKLEVBQW1CO0lBQ2pCRywyQkFBMkIsR0FBRyxFQUFDLEdBQUdWO0lBQUosQ0FBOUI7RUFDRDs7RUFHRCxJQUFJSSxVQUFKLEVBQWdCO0lBR2QsSUFBSTtNQUNGSSxXQUFXLEdBQUcsSUFBQW1CLCtCQUFBLEVBQW9CMUIsZUFBcEIsRUFBcUNDLFdBQXJDLEVBQWtELElBQWxELENBQWQ7SUFDRCxDQUZELENBRUUsT0FBT1ksS0FBUCxFQUFjO01BQ2RqQixlQUFBLENBQU9DLElBQVAsQ0FBYSxxQ0FBb0NnQixLQUFLLENBQUNjLE9BQVEsRUFBL0Q7O01BQ0EsT0FBbUM7UUFDakNwQixXQURpQztRQUVqQ0UsMkJBRmlDO1FBR2pDRCx3QkFIaUM7UUFJakNFLFFBSmlDO1FBS2pDRztNQUxpQyxDQUFuQztJQU9EOztJQUdETCx3QkFBd0IsR0FBRztNQUN6QmlCLFdBQVcsRUFBRSxFQUFDLEdBQUdHLG9CQUFvQixDQUFDckIsV0FBRDtNQUF4QixDQURZO01BRXpCZSxVQUFVLEVBQUUsQ0FBQyxFQUFEO0lBRmEsQ0FBM0I7RUFJRDs7RUFFRCxPQUF3QztJQUN0Q2YsV0FEc0M7SUFFdENFLDJCQUZzQztJQUd0Q0Qsd0JBSHNDO0lBSXRDRTtFQUpzQyxDQUF4QztBQU1EOztBQU9ELFNBQVNrQixvQkFBVCxDQUE4QkMsSUFBOUIsRUFBb0M7RUFFbEMsTUFBTUMsYUFBYSxHQUFHLENBQ3BCLGFBRG9CLEVBRXBCLGdCQUZvQixFQUdwQixjQUhvQixFQUlwQixxQkFKb0IsRUFLcEIsa0JBTG9CLEVBTXBCLE9BTm9CLEVBT3BCLGVBUG9CLEVBUXBCLFVBUm9CLEVBU3BCLHlCQVRvQixDQUF0QjtFQVlBLElBQUlDLFlBQVksR0FBRyxFQUFuQjs7RUFDQSxLQUFLLElBQUksQ0FBQ0MsSUFBRCxFQUFPQyxLQUFQLENBQVQsSUFBMEI3QyxlQUFBLENBQUUrQixPQUFGLENBQVVVLElBQVYsQ0FBMUIsRUFBMkM7SUFDekMsSUFBSUMsYUFBYSxDQUFDSSxRQUFkLENBQXVCRixJQUF2QixLQUFnQ0EsSUFBSSxDQUFDRSxRQUFMLENBQWMsR0FBZCxDQUFwQyxFQUF3RDtNQUN0REgsWUFBWSxDQUFDQyxJQUFELENBQVosR0FBcUJDLEtBQXJCO0lBQ0QsQ0FGRCxNQUVPO01BQ0xGLFlBQVksQ0FBRSxHQUFFakQsaUJBQWtCLElBQUdrRCxJQUFLLEVBQTlCLENBQVosR0FBK0NDLEtBQS9DO0lBQ0Q7RUFDRjs7RUFDRCxPQUFPRixZQUFQO0FBQ0Q7O0FBT0QsU0FBU1Isb0JBQVQsQ0FBOEJNLElBQTlCLEVBQW9DO0VBQ2xDLElBQUksQ0FBQ3pDLGVBQUEsQ0FBRWdCLGFBQUYsQ0FBZ0J5QixJQUFoQixDQUFMLEVBQTRCO0lBQzFCLE9BQU9BLElBQVA7RUFDRDs7RUFHRCxNQUFNTSxTQUFTLEdBQUcsRUFBbEI7O0VBQ0EsS0FBSyxJQUFJLENBQUNILElBQUQsRUFBT0MsS0FBUCxDQUFULElBQTBCN0MsZUFBQSxDQUFFK0IsT0FBRixDQUFVVSxJQUFWLENBQTFCLEVBQTJDO0lBQ3pDTSxTQUFTLENBQUNYLGtCQUFrQixDQUFDUSxJQUFELENBQW5CLENBQVQsR0FBc0NDLEtBQXRDO0VBQ0Q7O0VBQ0QsT0FBT0UsU0FBUDtBQUNEOztBQUVELFNBQVNYLGtCQUFULENBQTRCWSxHQUE1QixFQUFpQztFQUMvQixNQUFNQyxNQUFNLEdBQUksR0FBRXZELGlCQUFrQixHQUFwQztFQUNBLE9BQU9NLGVBQUEsQ0FBRWtELFVBQUYsQ0FBYUYsR0FBYixFQUFrQkMsTUFBbEIsSUFBNEJELEdBQUcsQ0FBQ0csU0FBSixDQUFjRixNQUFNLENBQUNHLE1BQXJCLENBQTVCLEdBQTJESixHQUFsRTtBQUNEOztBQUVELFNBQVNLLGlCQUFULENBQTJCQyxPQUEzQixFQUFvQztFQUNsQyxNQUFNQyxPQUFPLEdBQUdDLE9BQU8sQ0FBRSxHQUFFRixPQUFRLGVBQVosQ0FBUCxJQUFzQyxFQUF0RDtFQUNBLE9BQU9DLE9BQU8sQ0FBQ0UsT0FBZjtBQUNEOztBQWtCRCxTQUFTQyxZQUFULENBQXNCakIsSUFBdEIsRUFBNEI7RUFDMUIsSUFBSSxDQUFDekMsZUFBQSxDQUFFZ0IsYUFBRixDQUFnQnlCLElBQWhCLENBQUQsSUFBMEJ6QyxlQUFBLENBQUU0QixPQUFGLENBQVVhLElBQVYsQ0FBOUIsRUFBK0M7SUFDN0MsT0FBTyxFQUFQO0VBQ0Q7O0VBRUQsTUFBTWtCLE1BQU0sR0FBRyxFQUFmOztFQUNBLEtBQUssTUFBTSxDQUFDWCxHQUFELEVBQU1ILEtBQU4sQ0FBWCxJQUEyQjdDLGVBQUEsQ0FBRStCLE9BQUYsQ0FBVVUsSUFBVixDQUEzQixFQUE0QztJQUMxQyxNQUFNbUIsS0FBSyxHQUFHLHVCQUF1QkMsSUFBdkIsQ0FBNEJiLEdBQTVCLENBQWQ7O0lBQ0EsSUFBSSxDQUFDWSxLQUFMLEVBQVk7TUFDVjtJQUNEOztJQUVERCxNQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFELENBQU4sQ0FBTixHQUFtQmYsS0FBbkI7SUFDQSxPQUFPSixJQUFJLENBQUNPLEdBQUQsQ0FBWDtFQUNEOztFQUNELE9BQU9XLE1BQVA7QUFDRCJ9
|
|
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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"}
|