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.
- package/build/lib/appium.d.ts +137 -14
- 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.js +3 -3
- package/build/lib/cli/extension-command.js.map +1 -0
- package/build/lib/cli/extension.d.ts +2 -2
- package/build/lib/cli/extension.d.ts.map +1 -1
- 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.js +3 -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 +288 -27
- package/build/lib/utils.d.ts.map +1 -1
- package/build/lib/utils.js +7 -35
- package/build/lib/utils.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/lib/appium.js +27 -18
- package/lib/extension/driver-config.js +2 -1
- package/lib/extension/manifest.js +49 -32
- package/lib/schema/cli-transformers.js +27 -24
- package/lib/utils.js +87 -66
- package/package.json +16 -15
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,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 {
|
|
63
|
-
* @returns {Capabilities}
|
|
322
|
+
* @template {Constraints} [C={}]
|
|
323
|
+
* @param {NSCapabilities<C>} caps
|
|
324
|
+
* @returns {Capabilities<C>}
|
|
64
325
|
*/
|
|
65
|
-
export function removeAppiumPrefixes(caps:
|
|
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.
|
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,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
|
-
|
|
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
|
-
|
|
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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"}
|