appium 2.0.0-beta.3 → 2.0.0-beta.30
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/README.md +10 -11
- package/build/lib/appium.d.ts +215 -0
- package/build/lib/appium.d.ts.map +1 -0
- package/build/lib/appium.js +238 -132
- package/build/lib/cli/args.d.ts +20 -0
- package/build/lib/cli/args.d.ts.map +1 -0
- package/build/lib/cli/args.js +96 -282
- package/build/lib/cli/driver-command.d.ts +36 -0
- package/build/lib/cli/driver-command.d.ts.map +1 -0
- package/build/lib/cli/driver-command.js +19 -12
- package/build/lib/cli/extension-command.d.ts +345 -0
- package/build/lib/cli/extension-command.d.ts.map +1 -0
- package/build/lib/cli/extension-command.js +171 -96
- package/build/lib/cli/extension.d.ts +14 -0
- package/build/lib/cli/extension.d.ts.map +1 -0
- package/build/lib/cli/extension.js +31 -16
- package/build/lib/cli/parser.d.ts +79 -0
- package/build/lib/cli/parser.d.ts.map +1 -0
- package/build/lib/cli/parser.js +152 -95
- package/build/lib/cli/plugin-command.d.ts +39 -0
- package/build/lib/cli/plugin-command.d.ts.map +1 -0
- package/build/lib/cli/plugin-command.js +18 -13
- package/build/lib/cli/utils.d.ts +29 -0
- package/build/lib/cli/utils.d.ts.map +1 -0
- package/build/lib/cli/utils.js +27 -3
- package/build/lib/config-file.d.ts +100 -0
- package/build/lib/config-file.d.ts.map +1 -0
- package/build/lib/config-file.js +136 -0
- package/build/lib/config.d.ts +40 -0
- package/build/lib/config.d.ts.map +1 -0
- package/build/lib/config.js +92 -67
- package/build/lib/constants.d.ts +48 -0
- package/build/lib/constants.d.ts.map +1 -0
- package/build/lib/constants.js +60 -0
- package/build/lib/extension/driver-config.d.ts +84 -0
- package/build/lib/extension/driver-config.d.ts.map +1 -0
- package/build/lib/extension/driver-config.js +190 -0
- package/build/lib/extension/extension-config.d.ts +170 -0
- package/build/lib/extension/extension-config.d.ts.map +1 -0
- package/build/lib/extension/extension-config.js +297 -0
- package/build/lib/extension/index.d.ts +39 -0
- package/build/lib/extension/index.d.ts.map +1 -0
- package/build/lib/extension/index.js +77 -0
- package/build/lib/extension/manifest.d.ts +174 -0
- package/build/lib/extension/manifest.d.ts.map +1 -0
- package/build/lib/extension/manifest.js +246 -0
- package/build/lib/extension/package-changed.d.ts +11 -0
- package/build/lib/extension/package-changed.d.ts.map +1 -0
- package/build/lib/extension/package-changed.js +68 -0
- package/build/lib/extension/plugin-config.d.ts +62 -0
- package/build/lib/extension/plugin-config.d.ts.map +1 -0
- package/build/lib/extension/plugin-config.js +87 -0
- package/build/lib/grid-register.d.ts +10 -0
- package/build/lib/grid-register.d.ts.map +1 -0
- package/build/lib/grid-register.js +21 -25
- package/build/lib/logger.d.ts +3 -0
- package/build/lib/logger.d.ts.map +1 -0
- package/build/lib/logger.js +4 -6
- package/build/lib/logsink.d.ts +4 -0
- package/build/lib/logsink.d.ts.map +1 -0
- package/build/lib/logsink.js +12 -16
- package/build/lib/main.d.ts +51 -0
- package/build/lib/main.d.ts.map +1 -0
- package/build/lib/main.js +174 -82
- package/build/lib/schema/arg-spec.d.ts +143 -0
- package/build/lib/schema/arg-spec.d.ts.map +1 -0
- package/build/lib/schema/arg-spec.js +119 -0
- package/build/lib/schema/cli-args.d.ts +19 -0
- package/build/lib/schema/cli-args.d.ts.map +1 -0
- package/build/lib/schema/cli-args.js +180 -0
- package/build/lib/schema/cli-transformers.d.ts +5 -0
- package/build/lib/schema/cli-transformers.d.ts.map +1 -0
- package/build/lib/schema/cli-transformers.js +74 -0
- package/build/lib/schema/index.d.ts +3 -0
- package/build/lib/schema/index.d.ts.map +1 -0
- package/build/lib/schema/index.js +34 -0
- package/build/lib/schema/keywords.d.ts +24 -0
- package/build/lib/schema/keywords.d.ts.map +1 -0
- package/build/lib/schema/keywords.js +70 -0
- package/build/lib/schema/schema.d.ts +259 -0
- package/build/lib/schema/schema.d.ts.map +1 -0
- package/build/lib/schema/schema.js +452 -0
- package/build/lib/utils.d.ts +66 -0
- package/build/lib/utils.d.ts.map +1 -0
- package/build/lib/utils.js +35 -139
- package/build/tsconfig.tsbuildinfo +1 -0
- package/index.js +11 -0
- package/lib/appium-config.schema.json +278 -0
- package/lib/appium.js +398 -155
- package/lib/cli/args.js +174 -377
- package/lib/cli/driver-command.js +22 -7
- package/lib/cli/extension-command.js +372 -177
- package/lib/cli/extension.js +32 -10
- package/lib/cli/parser.js +252 -83
- package/lib/cli/plugin-command.js +19 -6
- package/lib/cli/utils.js +22 -2
- package/lib/config-file.js +223 -0
- package/lib/config.js +169 -69
- package/lib/constants.js +78 -0
- package/lib/extension/driver-config.js +249 -0
- package/lib/extension/extension-config.js +458 -0
- package/lib/extension/index.js +102 -0
- package/lib/extension/manifest.js +486 -0
- package/lib/extension/package-changed.js +63 -0
- package/lib/extension/plugin-config.js +113 -0
- package/lib/grid-register.js +25 -22
- package/lib/logger.js +1 -1
- package/lib/logsink.js +14 -7
- package/lib/main.js +233 -83
- package/lib/schema/arg-spec.js +232 -0
- package/lib/schema/cli-args.js +261 -0
- package/lib/schema/cli-transformers.js +122 -0
- package/lib/schema/index.js +2 -0
- package/lib/schema/keywords.js +134 -0
- package/lib/schema/schema.js +734 -0
- package/lib/utils.js +85 -129
- package/package.json +62 -85
- package/scripts/postinstall.js +71 -0
- package/types/appium-manifest.d.ts +61 -0
- package/types/cli.d.ts +134 -0
- package/types/extension.d.ts +56 -0
- package/types/external-manifest.d.ts +58 -0
- package/types/index.d.ts +7 -0
- package/CHANGELOG.md +0 -3515
- package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
- package/build/lib/cli/npm.js +0 -206
- package/build/lib/cli/parser-helpers.js +0 -82
- package/build/lib/driver-config.js +0 -77
- package/build/lib/drivers.js +0 -96
- package/build/lib/extension-config.js +0 -251
- package/build/lib/plugin-config.js +0 -59
- package/build/lib/plugins.js +0 -14
- package/lib/cli/npm.js +0 -183
- package/lib/cli/parser-helpers.js +0 -79
- package/lib/driver-config.js +0 -46
- package/lib/drivers.js +0 -81
- package/lib/extension-config.js +0 -208
- package/lib/plugin-config.js +0 -34
- package/lib/plugins.js +0 -10
package/build/lib/main.js
CHANGED
|
@@ -1,14 +1,38 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
5
|
-
|
|
6
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
7
5
|
|
|
8
6
|
Object.defineProperty(exports, "__esModule", {
|
|
9
7
|
value: true
|
|
10
8
|
});
|
|
9
|
+
Object.defineProperty(exports, "finalizeSchema", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () {
|
|
12
|
+
return _schema.finalizeSchema;
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
Object.defineProperty(exports, "getSchema", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () {
|
|
18
|
+
return _schema.getSchema;
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
exports.init = init;
|
|
11
22
|
exports.main = main;
|
|
23
|
+
Object.defineProperty(exports, "readConfigFile", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get: function () {
|
|
26
|
+
return _configFile.readConfigFile;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
exports.resolveAppiumHome = void 0;
|
|
30
|
+
Object.defineProperty(exports, "validate", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return _schema.validate;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
12
36
|
|
|
13
37
|
require("source-map-support/register");
|
|
14
38
|
|
|
@@ -16,41 +40,40 @@ var _logsink = require("./logsink");
|
|
|
16
40
|
|
|
17
41
|
var _logger = _interopRequireDefault(require("./logger"));
|
|
18
42
|
|
|
19
|
-
var
|
|
43
|
+
var _baseDriver = require("@appium/base-driver");
|
|
20
44
|
|
|
21
|
-
var
|
|
45
|
+
var _support = require("@appium/support");
|
|
22
46
|
|
|
23
47
|
var _asyncbox = require("asyncbox");
|
|
24
48
|
|
|
25
|
-
var
|
|
26
|
-
|
|
27
|
-
var _args = require("./cli/args");
|
|
49
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
28
50
|
|
|
29
|
-
var
|
|
51
|
+
var _appium = require("./appium");
|
|
30
52
|
|
|
31
|
-
var
|
|
53
|
+
var _extension = require("./cli/extension");
|
|
32
54
|
|
|
33
|
-
var
|
|
55
|
+
var _parser = require("./cli/parser");
|
|
34
56
|
|
|
35
|
-
var
|
|
57
|
+
var _config = require("./config");
|
|
36
58
|
|
|
37
|
-
var
|
|
59
|
+
var _configFile = require("./config-file");
|
|
38
60
|
|
|
39
|
-
var
|
|
61
|
+
var _extension2 = require("./extension");
|
|
40
62
|
|
|
41
|
-
var
|
|
63
|
+
var _constants = require("./constants");
|
|
42
64
|
|
|
43
65
|
var _gridRegister = _interopRequireDefault(require("./grid-register"));
|
|
44
66
|
|
|
67
|
+
var _schema = require("./schema/schema");
|
|
68
|
+
|
|
45
69
|
var _utils = require("./utils");
|
|
46
70
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}) {
|
|
71
|
+
const {
|
|
72
|
+
resolveAppiumHome
|
|
73
|
+
} = _support.env;
|
|
74
|
+
exports.resolveAppiumHome = resolveAppiumHome;
|
|
75
|
+
|
|
76
|
+
async function preflightChecks(args, throwInsteadOfExit = false) {
|
|
54
77
|
try {
|
|
55
78
|
(0, _config.checkNodeOk)();
|
|
56
79
|
|
|
@@ -58,15 +81,13 @@ async function preflightChecks({
|
|
|
58
81
|
require('longjohn').async_trace_limit = -1;
|
|
59
82
|
}
|
|
60
83
|
|
|
61
|
-
if (args.
|
|
62
|
-
await (0, _config.
|
|
84
|
+
if (args.showBuildInfo) {
|
|
85
|
+
await (0, _config.showBuildInfo)();
|
|
63
86
|
process.exit(0);
|
|
64
87
|
}
|
|
65
88
|
|
|
66
89
|
(0, _config.warnNodeDeprecations)();
|
|
67
|
-
(0,
|
|
68
|
-
await driverConfig.read();
|
|
69
|
-
await pluginConfig.read();
|
|
90
|
+
(0, _schema.validate)(args);
|
|
70
91
|
|
|
71
92
|
if (args.tmpDir) {
|
|
72
93
|
await (0, _config.validateTmpDir)(args.tmpDir);
|
|
@@ -85,16 +106,16 @@ async function preflightChecks({
|
|
|
85
106
|
function logNonDefaultArgsWarning(args) {
|
|
86
107
|
_logger.default.info('Non-default server args:');
|
|
87
108
|
|
|
88
|
-
(0, _utils.
|
|
109
|
+
(0, _utils.inspect)(args);
|
|
89
110
|
}
|
|
90
111
|
|
|
91
112
|
function logDefaultCapabilitiesWarning(caps) {
|
|
92
113
|
_logger.default.info('Default capabilities, which will be added to each request ' + 'unless overridden by desired capabilities:');
|
|
93
114
|
|
|
94
|
-
(0, _utils.
|
|
115
|
+
(0, _utils.inspect)(caps);
|
|
95
116
|
}
|
|
96
117
|
|
|
97
|
-
async function logStartupInfo(
|
|
118
|
+
async function logStartupInfo(args) {
|
|
98
119
|
let welcome = `Welcome to Appium v${_config.APPIUM_VER}`;
|
|
99
120
|
let appiumRev = await (0, _config.getGitRev)();
|
|
100
121
|
|
|
@@ -104,7 +125,7 @@ async function logStartupInfo(parser, args) {
|
|
|
104
125
|
|
|
105
126
|
_logger.default.info(welcome);
|
|
106
127
|
|
|
107
|
-
let showArgs = (0, _config.
|
|
128
|
+
let showArgs = (0, _config.getNonDefaultServerArgs)(args);
|
|
108
129
|
|
|
109
130
|
if (_lodash.default.size(showArgs)) {
|
|
110
131
|
logNonDefaultArgsWarning(showArgs);
|
|
@@ -121,88 +142,161 @@ function logServerPort(address, port) {
|
|
|
121
142
|
_logger.default.info(logMessage);
|
|
122
143
|
}
|
|
123
144
|
|
|
124
|
-
|
|
125
|
-
|
|
145
|
+
function getServerUpdaters(driverClasses, pluginClasses) {
|
|
146
|
+
return _lodash.default.compact(_lodash.default.map([...driverClasses, ...pluginClasses], 'updateServer'));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function getExtraMethodMap(driverClasses, pluginClasses) {
|
|
150
|
+
return [...driverClasses, ...pluginClasses].reduce((map, klass) => ({ ...map,
|
|
151
|
+
...klass.newMethodMap
|
|
152
|
+
}), {});
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
async function init(args) {
|
|
156
|
+
var _args$appiumHome;
|
|
157
|
+
|
|
158
|
+
const appiumHome = (_args$appiumHome = args === null || args === void 0 ? void 0 : args.appiumHome) !== null && _args$appiumHome !== void 0 ? _args$appiumHome : await resolveAppiumHome();
|
|
159
|
+
const {
|
|
160
|
+
driverConfig,
|
|
161
|
+
pluginConfig
|
|
162
|
+
} = await (0, _extension2.loadExtensions)(appiumHome);
|
|
163
|
+
const parser = (0, _parser.getParser)();
|
|
126
164
|
let throwInsteadOfExit = false;
|
|
165
|
+
let preConfigParsedArgs;
|
|
166
|
+
let parsedArgs;
|
|
167
|
+
let defaults = {};
|
|
127
168
|
|
|
128
169
|
if (args) {
|
|
129
|
-
|
|
170
|
+
var _args$subcommand;
|
|
130
171
|
|
|
131
172
|
if (args.throwInsteadOfExit) {
|
|
132
173
|
throwInsteadOfExit = true;
|
|
133
174
|
delete args.throwInsteadOfExit;
|
|
134
175
|
}
|
|
176
|
+
|
|
177
|
+
preConfigParsedArgs = { ...args,
|
|
178
|
+
subcommand: (_args$subcommand = args.subcommand) !== null && _args$subcommand !== void 0 ? _args$subcommand : _constants.SERVER_SUBCOMMAND
|
|
179
|
+
};
|
|
135
180
|
} else {
|
|
136
|
-
|
|
181
|
+
preConfigParsedArgs = parser.parseArgs();
|
|
137
182
|
}
|
|
138
183
|
|
|
139
|
-
await (0,
|
|
184
|
+
const configResult = await (0, _configFile.readConfigFile)(preConfigParsedArgs.configFile);
|
|
185
|
+
|
|
186
|
+
if (!_lodash.default.isEmpty(configResult.errors)) {
|
|
187
|
+
var _configResult$reason;
|
|
140
188
|
|
|
141
|
-
|
|
142
|
-
await (0, _extension.runExtensionCommand)(args, args.subcommand);
|
|
143
|
-
process.exit();
|
|
189
|
+
throw new Error(`Errors in config file ${configResult.filepath}:\n ${(_configResult$reason = configResult.reason) !== null && _configResult$reason !== void 0 ? _configResult$reason : configResult.errors}`);
|
|
144
190
|
}
|
|
145
191
|
|
|
146
|
-
if (
|
|
192
|
+
if (preConfigParsedArgs.subcommand === _constants.SERVER_SUBCOMMAND) {
|
|
193
|
+
var _configResult$config;
|
|
194
|
+
|
|
195
|
+
defaults = (0, _schema.getDefaultsForSchema)(false);
|
|
196
|
+
parsedArgs = _lodash.default.defaultsDeep(preConfigParsedArgs, (_configResult$config = configResult.config) === null || _configResult$config === void 0 ? void 0 : _configResult$config.server, defaults);
|
|
197
|
+
|
|
198
|
+
if (preConfigParsedArgs.showConfig) {
|
|
199
|
+
(0, _config.showConfig)((0, _config.getNonDefaultServerArgs)(preConfigParsedArgs), configResult, defaults, parsedArgs);
|
|
200
|
+
return {};
|
|
201
|
+
}
|
|
202
|
+
} else {
|
|
203
|
+
parsedArgs = preConfigParsedArgs;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
await (0, _logsink.init)(parsedArgs);
|
|
207
|
+
|
|
208
|
+
if (parsedArgs.subcommand === _constants.DRIVER_TYPE) {
|
|
209
|
+
await (0, _extension.runExtensionCommand)(parsedArgs, driverConfig);
|
|
210
|
+
return {};
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if (parsedArgs.subcommand === _constants.PLUGIN_TYPE) {
|
|
214
|
+
await (0, _extension.runExtensionCommand)(parsedArgs, pluginConfig);
|
|
215
|
+
return {};
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
if (parsedArgs.logFilters) {
|
|
147
219
|
const {
|
|
148
220
|
issues,
|
|
149
221
|
rules
|
|
150
|
-
} = await
|
|
222
|
+
} = await _support.logger.loadSecureValuesPreprocessingRules(parsedArgs.logFilters);
|
|
151
223
|
|
|
152
224
|
if (!_lodash.default.isEmpty(issues)) {
|
|
153
|
-
throw new Error(`The log filtering rules config '${
|
|
225
|
+
throw new Error(`The log filtering rules config '${parsedArgs.logFilters}' has issues: ` + JSON.stringify(issues, null, 2));
|
|
154
226
|
}
|
|
155
227
|
|
|
156
228
|
if (_lodash.default.isEmpty(rules)) {
|
|
157
|
-
_logger.default.warn(`Found no log filtering rules in '${
|
|
229
|
+
_logger.default.warn(`Found no log filtering rules in '${parsedArgs.logFilters}'. Is that expected?`);
|
|
158
230
|
} else {
|
|
159
|
-
_logger.default.info(`Loaded ${
|
|
231
|
+
_logger.default.info(`Loaded ${_support.util.pluralize('filtering rule', rules.length, true)} from '${parsedArgs.logFilters}'`);
|
|
160
232
|
}
|
|
161
233
|
}
|
|
162
234
|
|
|
163
|
-
|
|
164
|
-
const driverConfig = new _driverConfig.default(args.appiumHome);
|
|
165
|
-
const pluginConfig = new _pluginConfig.default(args.appiumHome);
|
|
235
|
+
const appiumDriver = new _appium.AppiumDriver(parsedArgs);
|
|
166
236
|
appiumDriver.driverConfig = driverConfig;
|
|
167
|
-
await preflightChecks(
|
|
168
|
-
|
|
169
|
-
|
|
237
|
+
await preflightChecks(parsedArgs, throwInsteadOfExit);
|
|
238
|
+
return {
|
|
239
|
+
appiumDriver,
|
|
240
|
+
parsedArgs,
|
|
170
241
|
driverConfig,
|
|
242
|
+
pluginConfig
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
async function main(args) {
|
|
247
|
+
const {
|
|
248
|
+
appiumDriver,
|
|
249
|
+
parsedArgs,
|
|
171
250
|
pluginConfig,
|
|
172
|
-
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
appiumDriver.plugins = plugins;
|
|
188
|
-
let server = await (0, _appiumBaseDriver.server)({
|
|
251
|
+
driverConfig
|
|
252
|
+
} = await init(args);
|
|
253
|
+
|
|
254
|
+
if (!appiumDriver || !parsedArgs || !pluginConfig || !driverConfig) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const pluginClasses = (0, _extension2.getActivePlugins)(pluginConfig, parsedArgs.usePlugins);
|
|
259
|
+
appiumDriver.pluginClasses = pluginClasses;
|
|
260
|
+
await logStartupInfo(parsedArgs);
|
|
261
|
+
let routeConfiguringFunction = (0, _baseDriver.routeConfiguringFunction)(appiumDriver);
|
|
262
|
+
const driverClasses = (0, _extension2.getActiveDrivers)(driverConfig, parsedArgs.useDrivers);
|
|
263
|
+
const serverUpdaters = getServerUpdaters(driverClasses, pluginClasses);
|
|
264
|
+
const extraMethodMap = getExtraMethodMap(driverClasses, pluginClasses);
|
|
265
|
+
const serverOpts = {
|
|
189
266
|
routeConfiguringFunction,
|
|
190
|
-
port:
|
|
191
|
-
hostname:
|
|
192
|
-
allowCors:
|
|
193
|
-
basePath:
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
267
|
+
port: parsedArgs.port,
|
|
268
|
+
hostname: parsedArgs.address,
|
|
269
|
+
allowCors: parsedArgs.allowCors,
|
|
270
|
+
basePath: parsedArgs.basePath,
|
|
271
|
+
serverUpdaters,
|
|
272
|
+
extraMethodMap
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
if (parsedArgs.keepAliveTimeout) {
|
|
276
|
+
serverOpts.keepAliveTimeout = parsedArgs.keepAliveTimeout * 1000;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
let server;
|
|
280
|
+
|
|
281
|
+
try {
|
|
282
|
+
server = await (0, _baseDriver.server)(serverOpts);
|
|
283
|
+
} catch (err) {
|
|
284
|
+
_logger.default.error(`Could not configure Appium server. It's possible that a driver or plugin tried ` + `to update the server and failed. Original error: ${err.message}`);
|
|
285
|
+
|
|
286
|
+
_logger.default.debug(err.stack);
|
|
287
|
+
|
|
288
|
+
return process.exit(1);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
if (parsedArgs.allowCors) {
|
|
198
292
|
_logger.default.warn('You have enabled CORS requests from any host. Be careful not ' + 'to visit sites which could maliciously try to start Appium ' + 'sessions on your machine');
|
|
199
293
|
}
|
|
200
294
|
|
|
201
295
|
appiumDriver.server = server;
|
|
202
296
|
|
|
203
297
|
try {
|
|
204
|
-
if (
|
|
205
|
-
await (0, _gridRegister.default)(
|
|
298
|
+
if (parsedArgs.nodeconfig) {
|
|
299
|
+
await (0, _gridRegister.default)(parsedArgs.nodeconfig, parsedArgs.address, parsedArgs.port, parsedArgs.basePath);
|
|
206
300
|
}
|
|
207
301
|
} catch (err) {
|
|
208
302
|
await server.close();
|
|
@@ -228,15 +322,13 @@ async function main(args = null) {
|
|
|
228
322
|
});
|
|
229
323
|
}
|
|
230
324
|
|
|
231
|
-
logServerPort(
|
|
325
|
+
logServerPort(parsedArgs.address, parsedArgs.port);
|
|
232
326
|
driverConfig.print();
|
|
233
|
-
pluginConfig.print(
|
|
327
|
+
pluginConfig.print(pluginClasses.map(p => p.pluginName));
|
|
234
328
|
return server;
|
|
235
329
|
}
|
|
236
330
|
|
|
237
331
|
if (require.main === module) {
|
|
238
332
|
(0, _asyncbox.asyncify)(main);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9tYWluLmpzIl0sIm5hbWVzIjpbInByZWZsaWdodENoZWNrcyIsInBhcnNlciIsImFyZ3MiLCJkcml2ZXJDb25maWciLCJwbHVnaW5Db25maWciLCJ0aHJvd0luc3RlYWRPZkV4aXQiLCJsb25nU3RhY2t0cmFjZSIsInJlcXVpcmUiLCJhc3luY190cmFjZV9saW1pdCIsInNob3dDb25maWciLCJwcm9jZXNzIiwiZXhpdCIsInJlYWQiLCJ0bXBEaXIiLCJlcnIiLCJsb2dnZXIiLCJlcnJvciIsIm1lc3NhZ2UiLCJyZWQiLCJsb2dOb25EZWZhdWx0QXJnc1dhcm5pbmciLCJpbmZvIiwibG9nRGVmYXVsdENhcGFiaWxpdGllc1dhcm5pbmciLCJjYXBzIiwibG9nU3RhcnR1cEluZm8iLCJ3ZWxjb21lIiwiQVBQSVVNX1ZFUiIsImFwcGl1bVJldiIsInNob3dBcmdzIiwiXyIsInNpemUiLCJpc0VtcHR5IiwiZGVmYXVsdENhcGFiaWxpdGllcyIsImxvZ1NlcnZlclBvcnQiLCJhZGRyZXNzIiwicG9ydCIsImxvZ01lc3NhZ2UiLCJtYWluIiwiT2JqZWN0IiwiYXNzaWduIiwicGFyc2VBcmdzIiwic3ViY29tbWFuZCIsIkRSSVZFUl9UWVBFIiwiUExVR0lOX1RZUEUiLCJsb2dGaWx0ZXJzIiwiaXNzdWVzIiwicnVsZXMiLCJsb2dGYWN0b3J5IiwibG9hZFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NpbmdSdWxlcyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIndhcm4iLCJ1dGlsIiwicGx1cmFsaXplIiwibGVuZ3RoIiwiYXBwaXVtRHJpdmVyIiwiQXBwaXVtRHJpdmVyIiwiRHJpdmVyQ29uZmlnIiwiYXBwaXVtSG9tZSIsIlBsdWdpbkNvbmZpZyIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInBsdWdpbnMiLCJrZXlzIiwiaW5zdGFsbGVkRXh0ZW5zaW9ucyIsImZpbHRlciIsInBsdWdpbk5hbWUiLCJpbmNsdWRlcyIsIlVTRV9BTExfUExVR0lOUyIsIm1hcCIsIlBsdWdpbkNsYXNzIiwiQm9vbGVhbiIsInNlcnZlciIsImhvc3RuYW1lIiwiYWxsb3dDb3JzIiwiYmFzZVBhdGgiLCJub2RlY29uZmlnIiwiY2xvc2UiLCJzaWduYWwiLCJvbmNlIiwib25TaWduYWwiLCJkZWxldGVBbGxTZXNzaW9ucyIsImZvcmNlIiwicmVhc29uIiwiZSIsInByaW50IiwibW9kdWxlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxlQUFlQSxlQUFmLENBQWdDO0FBQUNDLEVBQUFBLE1BQUQ7QUFBU0MsRUFBQUEsSUFBVDtBQUFlQyxFQUFBQSxZQUFmO0FBQTZCQyxFQUFBQSxZQUE3QjtBQUEyQ0MsRUFBQUEsa0JBQWtCLEdBQUc7QUFBaEUsQ0FBaEMsRUFBd0c7QUFDdEcsTUFBSTtBQUNGOztBQUNBLFFBQUlILElBQUksQ0FBQ0ksY0FBVCxFQUF5QjtBQUN2QkMsTUFBQUEsT0FBTyxDQUFDLFVBQUQsQ0FBUCxDQUFvQkMsaUJBQXBCLEdBQXdDLENBQUMsQ0FBekM7QUFDRDs7QUFDRCxRQUFJTixJQUFJLENBQUNPLFVBQVQsRUFBcUI7QUFDbkIsWUFBTSx5QkFBTjtBQUNBQyxNQUFBQSxPQUFPLENBQUNDLElBQVIsQ0FBYSxDQUFiO0FBQ0Q7O0FBQ0Q7QUFDQSxvQ0FBbUJWLE1BQW5CLEVBQTJCQyxJQUEzQjtBQUNBLFVBQU1DLFlBQVksQ0FBQ1MsSUFBYixFQUFOO0FBQ0EsVUFBTVIsWUFBWSxDQUFDUSxJQUFiLEVBQU47O0FBQ0EsUUFBSVYsSUFBSSxDQUFDVyxNQUFULEVBQWlCO0FBQ2YsWUFBTSw0QkFBZVgsSUFBSSxDQUFDVyxNQUFwQixDQUFOO0FBQ0Q7QUFDRixHQWhCRCxDQWdCRSxPQUFPQyxHQUFQLEVBQVk7QUFDWkMsb0JBQU9DLEtBQVAsQ0FBYUYsR0FBRyxDQUFD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akQsSUFBVDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLy8gdHJhbnNwaWxlOm1haW5cblxuaW1wb3J0IHsgaW5pdCBhcyBsb2dzaW5rSW5pdCB9IGZyb20gJy4vbG9nc2luayc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJzsgLy8gbG9nZ2VyIG5lZWRzIHRvIHJlbWFpbiBmaXJzdCBvZiBpbXBvcnRzXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgc2VydmVyIGFzIGJhc2VTZXJ2ZXIsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiBhcyBtYWtlUm91dGVyIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBnZXRQYXJzZXIsIGdldERlZmF1bHRTZXJ2ZXJBcmdzIH0gZnJvbSAnLi9jbGkvcGFyc2VyJztcbmltcG9ydCB7IFVTRV9BTExfUExVR0lOUyB9IGZyb20gJy4vY2xpL2FyZ3MnO1xuaW1wb3J0IHsgbG9nZ2VyIGFzIGxvZ0ZhY3RvcnksIHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQge1xuICBzaG93Q29uZmlnLCBjaGVja05vZGVPaywgdmFsaWRhdGVTZXJ2ZXJBcmdzLFxuICB3YXJuTm9kZURlcHJlY2F0aW9ucywgdmFsaWRhdGVUbXBEaXIsIGdldE5vbkRlZmF1bHRBcmdzLFxuICBnZXRHaXRSZXYsIEFQUElVTV9WRVJcbn0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IERyaXZlckNvbmZpZyBmcm9tICcuL2RyaXZlci1jb25maWcnO1xuaW1wb3J0IFBsdWdpbkNvbmZpZyBmcm9tICcuL3BsdWdpbi1jb25maWcnO1xuaW1wb3J0IHsgRFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFIH0gZnJvbSAnLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IHJ1bkV4dGVuc2lvbkNvbW1hbmQgfSBmcm9tICcuL2NsaS9leHRlbnNpb24nO1xuaW1wb3J0IHsgQXBwaXVtRHJpdmVyIH0gZnJvbSAnLi9hcHBpdW0nO1xuaW1wb3J0IHJlZ2lzdGVyTm9kZSBmcm9tICcuL2dyaWQtcmVnaXN0ZXInO1xuaW1wb3J0IHsgaW5zcGVjdE9iamVjdCB9IGZyb20gJy4vdXRpbHMnO1xuXG5cbmFzeW5jIGZ1bmN0aW9uIHByZWZsaWdodENoZWNrcyAoe3BhcnNlciwgYXJncywgZHJpdmVyQ29uZmlnLCBwbHVnaW5Db25maWcsIHRocm93SW5zdGVhZE9mRXhpdCA9IGZhbHNlfSkge1xuICB0cnkge1xuICAgIGNoZWNrTm9kZU9rKCk7XG4gICAgaWYgKGFyZ3MubG9uZ1N0YWNrdHJhY2UpIHtcbiAgICAgIHJlcXVpcmUoJ2xvbmdqb2huJykuYXN5bmNfdHJhY2VfbGltaXQgPSAtMTtcbiAgICB9XG4gICAgaWYgKGFyZ3Muc2hvd0NvbmZpZykge1xuICAgICAgYXdhaXQgc2hvd0NvbmZpZygpO1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cbiAgICB3YXJuTm9kZURlcHJlY2F0aW9ucygpO1xuICAgIHZhbGlkYXRlU2VydmVyQXJncyhwYXJzZXIsIGFyZ3MpO1xuICAgIGF3YWl0IGRyaXZlckNvbmZpZy5yZWFkKCk7XG4gICAgYXdhaXQgcGx1Z2luQ29uZmlnLnJlYWQoKTtcbiAgICBpZiAoYXJncy50bXBEaXIpIHtcbiAgICAgIGF3YWl0IHZhbGlkYXRlVG1wRGlyKGFyZ3MudG1wRGlyKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZS5yZWQpO1xuICAgIGlmICh0aHJvd0luc3RlYWRPZkV4aXQpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9nTm9uRGVmYXVsdEFyZ3NXYXJuaW5nIChhcmdzKSB7XG4gIGxvZ2dlci5pbmZvKCdOb24tZGVmYXVsdCBzZXJ2ZXIgYXJnczonKTtcbiAgaW5zcGVjdE9iamVjdChhcmdzKTtcbn1cblxuZnVuY3Rpb24gbG9nRGVmYXVsdENhcGFiaWxpdGllc1dhcm5pbmcgKGNhcHMpIHtcbiAgbG9nZ2VyLmluZm8oJ0RlZmF1bHQgY2FwYWJpbGl0aWVzLCB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIGVhY2ggcmVxdWVzdCAnICtcbiAgICAgICAgICAgICAgJ3VubGVzcyBvdmVycmlkZGVuIGJ5IGRlc2lyZWQgY2FwYWJpbGl0aWVzOicpO1xuICBpbnNwZWN0T2JqZWN0KGNhcHMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2dTdGFydHVwSW5mbyAocGFyc2VyLCBhcmdzKSB7XG4gIGxldCB3ZWxjb21lID0gYFdlbGNvbWUgdG8gQXBwaXVtIHYke0FQUElVTV9WRVJ9YDtcbiAgbGV0IGFwcGl1bVJldiA9IGF3YWl0IGdldEdpdFJldigpO1xuICBpZiAoYXBwaXVtUmV2KSB7XG4gICAgd2VsY29tZSArPSBgIChSRVYgJHthcHBpdW1SZXZ9KWA7XG4gIH1cbiAgbG9nZ2VyLmluZm8od2VsY29tZSk7XG5cbiAgbGV0IHNob3dBcmdzID0gZ2V0Tm9uRGVmYXVsdEFyZ3MocGFyc2VyLCBhcmdzKTtcbiAgaWYgKF8uc2l6ZShzaG93QXJncykpIHtcbiAgICBsb2dOb25EZWZhdWx0QXJnc1dhcm5pbmcoc2hvd0FyZ3MpO1xuICB9XG4gIGlmICghXy5pc0VtcHR5KGFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBsb2dEZWZhdWx0Q2FwYWJpbGl0aWVzV2FybmluZyhhcmdzLmRlZmF1bHRDYXBhYmlsaXRpZXMpO1xuICB9XG4gIC8vIFRPRE86IGJyaW5nIGJhY2sgbG9nbGV2ZWwgcmVwb3J0aW5nIGJlbG93IG9uY2UgbG9nZ2VyIGlzIGZsdXNoZWQgb3V0XG4gIC8vIGxvZ2dlci5pbmZvKCdDb25zb2xlIExvZ0xldmVsOiAnICsgbG9nZ2VyLnRyYW5zcG9ydHMuY29uc29sZS5sZXZlbCk7XG4gIC8vIGlmIChsb2dnZXIudHJhbnNwb3J0cy5maWxlKSB7XG4gIC8vICAgbG9nZ2VyLmluZm8oJ0ZpbGUgTG9nTGV2ZWw6ICcgKyBsb2dnZXIudHJhbnNwb3J0cy5maWxlLmxldmVsKTtcbiAgLy8gfVxufVxuXG5mdW5jdGlvbiBsb2dTZXJ2ZXJQb3J0IChhZGRyZXNzLCBwb3J0KSB7XG4gIGxldCBsb2dNZXNzYWdlID0gYEFwcGl1bSBSRVNUIGh0dHAgaW50ZXJmYWNlIGxpc3RlbmVyIHN0YXJ0ZWQgb24gYCArXG4gICAgICAgICAgICAgICAgICAgYCR7YWRkcmVzc306JHtwb3J0fWA7XG4gIGxvZ2dlci5pbmZvKGxvZ01lc3NhZ2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluIChhcmdzID0gbnVsbCkge1xuICBsZXQgcGFyc2VyID0gZ2V0UGFyc2VyKCk7XG4gIGxldCB0aHJvd0luc3RlYWRPZkV4aXQgPSBmYWxzZTtcbiAgaWYgKGFyZ3MpIHtcbiAgICAvLyBhIGNvbnRhaW5pbmcgcGFja2FnZSBwYXNzZWQgaW4gdGhlaXIgb3duIGFyZ3MsIGxldCdzIGZpbGwgdGhlbSBvdXRcbiAgICAvLyB3aXRoIGRlZmF1bHRzXG4gICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGdldERlZmF1bHRTZXJ2ZXJBcmdzKCksIGFyZ3MpO1xuXG4gICAgLy8gaWYgd2UgaGF2ZSBhIGNvbnRhaW5pbmcgcGFja2FnZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgYXMgYSBDTEkgcHJvY2VzcyxcbiAgICAvLyB0aGF0IHBhY2thZ2UgbWlnaHQgbm90IGFwcHJlY2lhdGUgdXMgY2FsbGluZyAncHJvY2Vzcy5leGl0JyB3aWxseS1cbiAgICAvLyBuaWxseSwgc28gZ2l2ZSBpdCB0aGUgb3B0aW9uIHRvIGhhdmUgdXMgdGhyb3cgaW5zdGVhZCBvZiBleGl0XG4gICAgaWYgKGFyZ3MudGhyb3dJbnN0ZWFkT2ZFeGl0KSB7XG4gICAgICB0aHJvd0luc3RlYWRPZkV4aXQgPSB0cnVlO1xuICAgICAgLy8gYnV0IHJlbW92ZSBpdCBzaW5jZSBpdCdzIG5vdCBhIHJlYWwgc2VydmVyIGFyZyBwZXIgc2VcbiAgICAgIGRlbGV0ZSBhcmdzLnRocm93SW5zdGVhZE9mRXhpdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gb3RoZXJ3aXNlIHBhcnNlIGZyb20gQ0xJXG4gICAgYXJncyA9IHBhcnNlci5wYXJzZUFyZ3MoKTtcbiAgfVxuICBhd2FpdCBsb2dzaW5rSW5pdChhcmdzKTtcblxuICAvLyBpZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIHRoZSAnZHJpdmVyJyBDTEksIGRvbid0IHJ1biB0aGUgbm9ybWFsIHNlcnZlcixcbiAgLy8gYnV0IGluc3RlYWQgcGFzcyBjb250cm9sIHRvIHRoZSBkcml2ZXIgQ0xJXG4gIGlmIChhcmdzLnN1YmNvbW1hbmQgPT09IERSSVZFUl9UWVBFIHx8IGFyZ3Muc3ViY29tbWFuZCA9PT0gUExVR0lOX1RZUEUpIHtcbiAgICBhd2FpdCBydW5FeHRlbnNpb25Db21tYW5kKGFyZ3MsIGFyZ3Muc3ViY29tbWFuZCk7XG4gICAgcHJvY2Vzcy5leGl0KCk7XG4gIH1cblxuICBpZiAoYXJncy5sb2dGaWx0ZXJzKSB7XG4gICAgY29uc3Qge2lzc3VlcywgcnVsZXN9ID0gYXdhaXQgbG9nRmFjdG9yeS5sb2FkU2VjdXJlVmFsdWVzUHJlcHJvY2Vzc2luZ1J1bGVzKGFyZ3MubG9nRmlsdGVycyk7XG4gICAgaWYgKCFfLmlzRW1wdHkoaXNzdWVzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgbG9nIGZpbHRlcmluZyBydWxlcyBjb25maWcgJyR7YXJncy5sb2dGaWx0ZXJzfScgaGFzIGlzc3VlczogYCArXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGlzc3VlcywgbnVsbCwgMikpO1xuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KHJ1bGVzKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYEZvdW5kIG5vIGxvZyBmaWx0ZXJpbmcgcnVsZXMgaW4gJyR7YXJncy5sb2dGaWx0ZXJzfScuIElzIHRoYXQgZXhwZWN0ZWQ/YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBMb2FkZWQgJHt1dGlsLnBsdXJhbGl6ZSgnZmlsdGVyaW5nIHJ1bGUnLCBydWxlcy5sZW5ndGgsIHRydWUpfSBmcm9tICcke2FyZ3MubG9nRmlsdGVyc30nYCk7XG4gICAgfVxuICB9XG5cbiAgbGV0IGFwcGl1bURyaXZlciA9IG5ldyBBcHBpdW1Ecml2ZXIoYXJncyk7XG4gIGNvbnN0IGRyaXZlckNvbmZpZyA9IG5ldyBEcml2ZXJDb25maWcoYXJncy5hcHBpdW1Ib21lKTtcbiAgY29uc3QgcGx1Z2luQ29uZmlnID0gbmV3IFBsdWdpbkNvbmZpZyhhcmdzLmFwcGl1bUhvbWUpO1xuICBhcHBpdW1Ecml2ZXIuZHJpdmVyQ29uZmlnID0gZHJpdmVyQ29uZmlnO1xuICBhd2FpdCBwcmVmbGlnaHRDaGVja3Moe3BhcnNlciwgYXJncywgZHJpdmVyQ29uZmlnLCBwbHVnaW5Db25maWcsIHRocm93SW5zdGVhZE9mRXhpdH0pO1xuICBhd2FpdCBsb2dTdGFydHVwSW5mbyhwYXJzZXIsIGFyZ3MpO1xuICBsZXQgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uID0gbWFrZVJvdXRlcihhcHBpdW1Ecml2ZXIpO1xuXG4gIC8vIGZpbmQgYW55IHBsdWdpbiBuYW1lIHdoaWNoIGhhcyBiZWVuIGluc3RhbGxlZCwgYW5kIHdoaWNoIGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgYWN0aXZhdGlvbiBieVxuICAvLyB1c2luZyB0aGUgLS1wbHVnaW5zIGZsYWcsIGFuZCB0dXJuIGVhY2ggb25lIGludG8gYW4gaW5zdGFudGlhdGVkIHBsdWdpbiBvYmplY3QsIHNvIHdlIGNhbiBzZW5kXG4gIC8vIHRoZW0gYXMgb2JqZWN0cyB0byB0aGUgc2VydmVyIGluaXQuIHdlIGFsc28gd2FudCB0byBzZW5kL2Fzc2lnbiB0aGVtIHRvIHRoZSB1bWJyZWxsYSBkcml2ZXIgc29cbiAgLy8gaXQgY2FuIHVzZSB0aGVtIHRvIHdyYXAgY29tbWFuZCBleGVjdXRpb25cbiAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKHBsdWdpbkNvbmZpZy5pbnN0YWxsZWRFeHRlbnNpb25zKS5maWx0ZXIoKHBsdWdpbk5hbWUpID0+XG4gICAgXy5pbmNsdWRlcyhhcmdzLnBsdWdpbnMsIHBsdWdpbk5hbWUpIHx8XG4gICAgKGFyZ3MucGx1Z2lucy5sZW5ndGggPT09IDEgJiYgYXJncy5wbHVnaW5zWzBdID09PSBVU0VfQUxMX1BMVUdJTlMpXG4gICkubWFwKChwbHVnaW5OYW1lKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFBsdWdpbkNsYXNzID0gcGx1Z2luQ29uZmlnLnJlcXVpcmUocGx1Z2luTmFtZSk7XG4gICAgICByZXR1cm4gbmV3IFBsdWdpbkNsYXNzKHBsdWdpbk5hbWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBDb3VsZCBub3QgbG9hZCBwbHVnaW4gJyR7cGx1Z2luTmFtZX0nLCBzbyBpdCB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEVycm9yIGAgK1xuICAgICAgICAgICAgICAgICAgIGBpbiBsb2FkaW5nIHRoZSBwbHVnaW4gd2FzOiAke2Vycn1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pLmZpbHRlcihCb29sZWFuKTtcbiAgYXBwaXVtRHJpdmVyLnBsdWdpbnMgPSBwbHVnaW5zO1xuXG4gIGxldCBzZXJ2ZXIgPSBhd2FpdCBiYXNlU2VydmVyKHtcbiAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sXG4gICAgcG9ydDogYXJncy5wb3J0LFxuICAgIGhvc3RuYW1lOiBhcmdzLmFkZHJlc3MsXG4gICAgYWxsb3dDb3JzOiBhcmdzLmFsbG93Q29ycyxcbiAgICBiYXNlUGF0aDogYXJncy5iYXNlUGF0aCxcbiAgICBwbHVnaW5zLFxuICB9KTtcbiAgaWYgKGFyZ3MuYWxsb3dDb3JzKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1lvdSBoYXZlIGVuYWJsZWQgQ09SUyByZXF1ZXN0cyBmcm9tIGFueSBob3N0LiBCZSBjYXJlZnVsIG5vdCAnICtcbiAgICAgICAgICAgICAgICAndG8gdmlzaXQgc2l0ZXMgd2hpY2ggY291bGQgbWFsaWNpb3VzbHkgdHJ5IHRvIHN0YXJ0IEFwcGl1bSAnICtcbiAgICAgICAgICAgICAgICAnc2Vzc2lvbnMgb24geW91ciBtYWNoaW5lJyk7XG4gIH1cbiAgYXBwaXVtRHJpdmVyLnNlcnZlciA9IHNlcnZlcjtcbiAgdHJ5IHtcbiAgICAvLyBUT0RPIHByZWxhdW5jaCBpZiBhcmdzLmxhdW5jaCBpcyBzZXRcbiAgICAvLyBUT0RPOiBzdGFydEFsZXJ0U29ja2V0KHNlcnZlciwgYXBwaXVtU2VydmVyKTtcblxuICAgIC8vIGNvbmZpZ3VyZSBhcyBub2RlIG9uIGdyaWQsIGlmIG5lY2Vzc2FyeVxuICAgIGlmIChhcmdzLm5vZGVjb25maWcgIT09IG51bGwpIHtcbiAgICAgIGF3YWl0IHJlZ2lzdGVyTm9kZShhcmdzLm5vZGVjb25maWcsIGFyZ3MuYWRkcmVzcywgYXJncy5wb3J0LCBhcmdzLmJhc2VQYXRoKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGF3YWl0IHNlcnZlci5jbG9zZSgpO1xuICAgIHRocm93IGVycjtcbiAgfVxuXG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIFsnU0lHSU5UJywgJ1NJR1RFUk0nXSkge1xuICAgIHByb2Nlc3Mub25jZShzaWduYWwsIGFzeW5jIGZ1bmN0aW9uIG9uU2lnbmFsICgpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBSZWNlaXZlZCAke3NpZ25hbH0gLSBzaHV0dGluZyBkb3duYCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBhcHBpdW1Ecml2ZXIuZGVsZXRlQWxsU2Vzc2lvbnMoe1xuICAgICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgICAgIHJlYXNvbjogYFRoZSBwcm9jZXNzIGhhcyByZWNlaXZlZCAke3NpZ25hbH0gc2lnbmFsYCxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHNlcnZlci5jbG9zZSgpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGUpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsb2dTZXJ2ZXJQb3J0KGFyZ3MuYWRkcmVzcywgYXJncy5wb3J0KTtcbiAgZHJpdmVyQ29uZmlnLnByaW50KCk7XG4gIHBsdWdpbkNvbmZpZy5wcmludChwbHVnaW5zKTtcblxuICByZXR1cm4gc2VydmVyO1xufVxuXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgYXN5bmNpZnkobWFpbik7XG59XG5cbmV4cG9ydCB7IG1haW4gfTtcbiJdLCJmaWxlIjoibGliL21haW4uanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9tYWluLmpzIl0sIm5hbWVzIjpbInJlc29sdmVBcHBpdW1Ib21lIiwiZW52IiwicHJlZmxpZ2h0Q2hlY2tzIiwiYXJncyIsInRocm93SW5zdGVhZE9mRXhpdCIsImxvbmdTdGFja3RyYWNlIiwicmVxdWlyZSIsImFzeW5jX3RyYWNlX2xpbWl0Iiwic2hvd0J1aWxkSW5mbyIsInByb2Nlc3MiLCJleGl0IiwidG1wRGlyIiwiZXJyIiwibG9nZ2VyIiwiZXJyb3IiLCJtZXNzYWdlIiwicmVkIiwibG9nTm9uRGVmYXVsdEFyZ3NXYXJuaW5nIiwiaW5mbyIsImxvZ0RlZmF1bHRDYXBhYmlsaXRpZXNXYXJuaW5nIiwiY2FwcyIsImxvZ1N0YXJ0dXBJbmZvIiwid2VsY29tZSIsIkFQUElVTV9WRVIiLCJhcHBpdW1SZXYiLCJzaG93QXJncyIsIl8iLCJzaXplIiwiaXNFbXB0eSIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJsb2dTZXJ2ZXJQb3J0IiwiYWRkcmVzcyIsInBvcnQiLCJsb2dNZXNzYWdlIiwiZ2V0U2VydmVyVXBkYXRlcnMiLCJkcml2ZXJDbGFzc2VzIiwicGx1Z2luQ2xhc3NlcyIsImNvbXBhY3QiLCJtYXAiLCJnZXRFeHRyYU1ldGhvZE1hcCIsInJlZHVjZSIsImtsYXNzIiwibmV3TWV0aG9kTWFwIiwiaW5pdCIsImFwcGl1bUhvbWUiLCJkcml2ZXJDb25maWciLCJwbHVnaW5Db25maWciLCJwYXJzZXIiLCJwcmVDb25maWdQYXJzZWRBcmdzIiwicGFyc2VkQXJncyIsImRlZmF1bHRzIiwic3ViY29tbWFuZCIsIlNFUlZFUl9TVUJDT01NQU5EIiwicGFyc2VBcmdzIiwiY29uZmlnUmVzdWx0IiwiY29uZmlnRmlsZSIsImVycm9ycyIsIkVycm9yIiwiZmlsZXBhdGgiLCJyZWFzb24iLCJkZWZhdWx0c0RlZXAiLCJjb25maWciLCJzZXJ2ZXIiLCJzaG93Q29uZmlnIiwiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsImxvZ0ZpbHRlcnMiLCJpc3N1ZXMiLCJydWxlcyIsImxvZ0ZhY3RvcnkiLCJsb2FkU2VjdXJlVmFsdWVzUHJlcHJvY2Vzc2luZ1J1bGVzIiwiSlNPTiIsInN0cmluZ2lmeSIsIndhcm4iLCJ1dGlsIiwicGx1cmFsaXplIiwibGVuZ3RoIiwiYXBwaXVtRHJpdmVyIiwiQXBwaXVtRHJpdmVyIiwibWFpbiIsInVzZVBsdWdpbnMiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJ1c2VEcml2ZXJzIiwic2VydmVyVXBkYXRlcnMiLCJleHRyYU1ldGhvZE1hcCIsInNlcnZlck9wdHMiLCJob3N0bmFtZSIsImFsbG93Q29ycyIsImJhc2VQYXRoIiwia2VlcEFsaXZlVGltZW91dCIsImRlYnVnIiwic3RhY2siLCJub2RlY29uZmlnIiwiY2xvc2UiLCJzaWduYWwiLCJvbmNlIiwib25TaWduYWwiLCJkZWxldGVBbGxTZXNzaW9ucyIsImZvcmNlIiwiZSIsInByaW50IiwicCIsInBsdWdpbk5hbWUiLCJtb2R1bGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU07QUFBQ0EsRUFBQUE7QUFBRCxJQUFzQkMsWUFBNUI7OztBQU9BLGVBQWVDLGVBQWYsQ0FBZ0NDLElBQWhDLEVBQXNDQyxrQkFBa0IsR0FBRyxLQUEzRCxFQUFrRTtBQUNoRSxNQUFJO0FBQ0Y7O0FBQ0EsUUFBSUQsSUFBSSxDQUFDRSxjQUFULEVBQXlCO0FBQ3ZCQyxNQUFBQSxPQUFPLENBQUMsVUFBRCxDQUFQLENBQW9CQyxpQkFBcEIsR0FBd0MsQ0FBQyxDQUF6QztBQUNEOztBQUNELFFBQUlKLElBQUksQ0FBQ0ssYUFBVCxFQUF3QjtBQUN0QixZQUFNLDRCQUFOO0FBQ0FDLE1BQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUFhLENB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IGxvZ3NpbmtJbml0IH0gZnJvbSAnLi9sb2dzaW5rJzsgLy8gdGhpcyBpbXBvcnQgbmVlZHMgdG8gY29tZSBmaXJzdCBzaW5jZSBpdCBzZXRzIHVwIGdsb2JhbCBucG1sb2dcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInOyAvLyBsb2dnZXIgbmVlZHMgdG8gcmVtYWluIHNlY29uZFxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIGFzIG1ha2VSb3V0ZXIsIHNlcnZlciBhcyBiYXNlU2VydmVyIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBsb2dnZXIgYXMgbG9nRmFjdG9yeSwgdXRpbCwgZW52IH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEFwcGl1bURyaXZlciB9IGZyb20gJy4vYXBwaXVtJztcbmltcG9ydCB7IHJ1bkV4dGVuc2lvbkNvbW1hbmQgfSBmcm9tICcuL2NsaS9leHRlbnNpb24nO1xuaW1wb3J0IHsgZ2V0UGFyc2VyIH0gZnJvbSAnLi9jbGkvcGFyc2VyJztcbmltcG9ydCB7IEFQUElVTV9WRVIsIGNoZWNrTm9kZU9rLCBnZXRHaXRSZXYsIGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzLCBzaG93Q29uZmlnLCBzaG93QnVpbGRJbmZvLCB2YWxpZGF0ZVRtcERpciwgd2Fybk5vZGVEZXByZWNhdGlvbnMgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyByZWFkQ29uZmlnRmlsZSB9IGZyb20gJy4vY29uZmlnLWZpbGUnO1xuaW1wb3J0IHsgbG9hZEV4dGVuc2lvbnMsIGdldEFjdGl2ZVBsdWdpbnMsIGdldEFjdGl2ZURyaXZlcnMgfSBmcm9tICcuL2V4dGVuc2lvbic7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUsIFNFUlZFUl9TVUJDT01NQU5EIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHJlZ2lzdGVyTm9kZSBmcm9tICcuL2dyaWQtcmVnaXN0ZXInO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdHNGb3JTY2hlbWEsIHZhbGlkYXRlIH0gZnJvbSAnLi9zY2hlbWEvc2NoZW1hJztcbmltcG9ydCB7IGluc3BlY3QgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3Qge3Jlc29sdmVBcHBpdW1Ib21lfSA9IGVudjtcblxuLyoqXG4gKlxuICogQHBhcmFtIHtQYXJzZWRBcmdzfSBhcmdzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0aHJvd0luc3RlYWRPZkV4aXRdXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByZWZsaWdodENoZWNrcyAoYXJncywgdGhyb3dJbnN0ZWFkT2ZFeGl0ID0gZmFsc2UpIHtcbiAgdHJ5IHtcbiAgICBjaGVja05vZGVPaygpO1xuICAgIGlmIChhcmdzLmxvbmdTdGFja3RyYWNlKSB7XG4gICAgICByZXF1aXJlKCdsb25nam9obicpLmFzeW5jX3RyYWNlX2xpbWl0ID0gLTE7XG4gICAgfVxuICAgIGlmIChhcmdzLnNob3dCdWlsZEluZm8pIHtcbiAgICAgIGF3YWl0IHNob3dCdWlsZEluZm8oKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG4gICAgd2Fybk5vZGVEZXByZWNhdGlvbnMoKTtcblxuICAgIHZhbGlkYXRlKGFyZ3MpO1xuXG4gICAgaWYgKGFyZ3MudG1wRGlyKSB7XG4gICAgICBhd2FpdCB2YWxpZGF0ZVRtcERpcihhcmdzLnRtcERpcik7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyLm1lc3NhZ2UucmVkKTtcbiAgICBpZiAodGhyb3dJbnN0ZWFkT2ZFeGl0KSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtQYXJ0aWFsPFBhcnNlZEFyZ3M+fSBhcmdzXG4gKi9cbmZ1bmN0aW9uIGxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyAoYXJncykge1xuICBsb2dnZXIuaW5mbygnTm9uLWRlZmF1bHQgc2VydmVyIGFyZ3M6Jyk7XG4gIGluc3BlY3QoYXJncyk7XG59XG5cbmZ1bmN0aW9uIGxvZ0RlZmF1bHRDYXBhYmlsaXRpZXNXYXJuaW5nIChjYXBzKSB7XG4gIGxvZ2dlci5pbmZvKCdEZWZhdWx0IGNhcGFiaWxpdGllcywgd2hpY2ggd2lsbCBiZSBhZGRlZCB0byBlYWNoIHJlcXVlc3QgJyArXG4gICAgICAgICAgICAgICd1bmxlc3Mgb3ZlcnJpZGRlbiBieSBkZXNpcmVkIGNhcGFiaWxpdGllczonKTtcbiAgaW5zcGVjdChjYXBzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BhcnNlZEFyZ3N9IGFyZ3NcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9nU3RhcnR1cEluZm8gKGFyZ3MpIHtcbiAgbGV0IHdlbGNvbWUgPSBgV2VsY29tZSB0byBBcHBpdW0gdiR7QVBQSVVNX1ZFUn1gO1xuICBsZXQgYXBwaXVtUmV2ID0gYXdhaXQgZ2V0R2l0UmV2KCk7XG4gIGlmIChhcHBpdW1SZXYpIHtcbiAgICB3ZWxjb21lICs9IGAgKFJFViAke2FwcGl1bVJldn0pYDtcbiAgfVxuICBsb2dnZXIuaW5mbyh3ZWxjb21lKTtcblxuICBsZXQgc2hvd0FyZ3MgPSBnZXROb25EZWZhdWx0U2VydmVyQXJncyhhcmdzKTtcbiAgaWYgKF8uc2l6ZShzaG93QXJncykpIHtcbiAgICBsb2dOb25EZWZhdWx0QXJnc1dhcm5pbmcoc2hvd0FyZ3MpO1xuICB9XG4gIGlmICghXy5pc0VtcHR5KGFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBsb2dEZWZhdWx0Q2FwYWJpbGl0aWVzV2FybmluZyhhcmdzLmRlZmF1bHRDYXBhYmlsaXRpZXMpO1xuICB9XG4gIC8vIFRPRE86IGJyaW5nIGJhY2sgbG9nbGV2ZWwgcmVwb3J0aW5nIGJlbG93IG9uY2UgbG9nZ2VyIGlzIGZsdXNoZWQgb3V0XG4gIC8vIGxvZ2dlci5pbmZvKCdDb25zb2xlIExvZ0xldmVsOiAnICsgbG9nZ2VyLnRyYW5zcG9ydHMuY29uc29sZS5sZXZlbCk7XG4gIC8vIGlmIChsb2dnZXIudHJhbnNwb3J0cy5maWxlKSB7XG4gIC8vICAgbG9nZ2VyLmluZm8oJ0ZpbGUgTG9nTGV2ZWw6ICcgKyBsb2dnZXIudHJhbnNwb3J0cy5maWxlLmxldmVsKTtcbiAgLy8gfVxufVxuXG4vKipcbiAqIExvZ3MgdGhlIGFkZHJlc3MgYW5kIHBvcnQgdGhlIHNlcnZlciBpcyBsaXN0ZW5pbmcgb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gQWRkcmVzc1xuICogQHBhcmFtIHtudW1iZXJ9IHBvcnQgLSBQb3J0XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gbG9nU2VydmVyUG9ydCAoYWRkcmVzcywgcG9ydCkge1xuICBsZXQgbG9nTWVzc2FnZSA9IGBBcHBpdW0gUkVTVCBodHRwIGludGVyZmFjZSBsaXN0ZW5lciBzdGFydGVkIG9uIGAgK1xuICAgICAgICAgICAgICAgICAgIGAke2FkZHJlc3N9OiR7cG9ydH1gO1xuICBsb2dnZXIuaW5mbyhsb2dNZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgbGlzdCBvZiBgdXBkYXRlU2VydmVyYCBmdW5jdGlvbnMgZnJvbSBhbGwgZXh0ZW5zaW9uc1xuICogQHBhcmFtIHtEcml2ZXJDbGFzc1tdfSBkcml2ZXJDbGFzc2VzXG4gKiBAcGFyYW0ge1BsdWdpbkNsYXNzW119IHBsdWdpbkNsYXNzZXNcbiAqIEByZXR1cm5zIHtpbXBvcnQoJ0BhcHBpdW0vYmFzZS1kcml2ZXIvbGliL2Jhc2Vkcml2ZXIvZHJpdmVyJykuVXBkYXRlU2VydmVyQ2FsbGJhY2tbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2VydmVyVXBkYXRlcnMgKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpIHtcbiAgcmV0dXJuIF8uY29tcGFjdChfLm1hcChbLi4uZHJpdmVyQ2xhc3NlcywgLi4ucGx1Z2luQ2xhc3Nlc10sICd1cGRhdGVTZXJ2ZXInKSk7XG59XG5cbi8qKlxuICogTWFrZXMgYSBiaWcgYE1ldGhvZE1hcGAgZnJvbSBhbGwgdGhlIGxpdHRsZSBgTWV0aG9kTWFwYHMgaW4gdGhlIGV4dGVuc2lvbnNcbiAqIEBwYXJhbSB7RHJpdmVyQ2xhc3NbXX0gZHJpdmVyQ2xhc3Nlc1xuICogQHBhcmFtIHtQbHVnaW5DbGFzc1tdfSBwbHVnaW5DbGFzc2VzXG4gKiBAcmV0dXJucyB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuTWV0aG9kTWFwfVxuICovXG5mdW5jdGlvbiBnZXRFeHRyYU1ldGhvZE1hcCAoZHJpdmVyQ2xhc3NlcywgcGx1Z2luQ2xhc3Nlcykge1xuICByZXR1cm4gWy4uLmRyaXZlckNsYXNzZXMsIC4uLnBsdWdpbkNsYXNzZXNdLnJlZHVjZShcbiAgICAobWFwLCBrbGFzcykgPT4gKHsuLi5tYXAsIC4uLmtsYXNzLm5ld01ldGhvZE1hcH0pLFxuICAgIHt9XG4gICk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgQXBwaXVtLCBidXQgZG9lcyBub3Qgc3RhcnQgdGhlIHNlcnZlci5cbiAqXG4gKiBVc2UgdGhpcyB0byBnZXQgYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2NoZW1hLlxuICpcbiAqIElmIGBhcmdzYCBjb250YWlucyBhIG5vbi1lbXB0eSBgc3ViY29tbWFuZGAgd2hpY2ggaXMgbm90IGBzZXJ2ZXJgLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge1BhcnRpYWxBcmdzfSBbYXJnc10gLSBQYXJ0aWFsIGFyZ3MgKHByb2dhbW1hdGljIHVzYWdlIG9ubHkpXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTZXJ2ZXJJbml0UmVzdWx0IHwgRXh0Q29tbWFuZEluaXRSZXN1bHQ+fVxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7aW5pdCwgZ2V0U2NoZW1hfSBmcm9tICdhcHBpdW0nO1xuICogY29uc3Qgb3B0aW9ucyA9IHt9OyAvLyBjb25maWcgb2JqZWN0XG4gKiBhd2FpdCBpbml0KG9wdGlvbnMpO1xuICogY29uc3Qgc2NoZW1hID0gZ2V0U2NoZW1hKCk7IC8vIGVudGlyZSBjb25maWcgc2NoZW1hIGluY2x1ZGluZyBwbHVnaW5zIGFuZCBkcml2ZXJzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXQgKGFyZ3MpIHtcbiAgY29uc3QgYXBwaXVtSG9tZSA9IGFyZ3M/LmFwcGl1bUhvbWUgPz8gYXdhaXQgcmVzb2x2ZUFwcGl1bUhvbWUoKTtcblxuICBjb25zdCB7ZHJpdmVyQ29uZmlnLCBwbHVnaW5Db25maWd9ID0gYXdhaXQgbG9hZEV4dGVuc2lvbnMoYXBwaXVtSG9tZSk7XG5cbiAgY29uc3QgcGFyc2VyID0gZ2V0UGFyc2VyKCk7XG4gIGxldCB0aHJvd0luc3RlYWRPZkV4aXQgPSBmYWxzZTtcbiAgLyoqIEB0eXBlIHtQYXJzZWRBcmdzfSAqL1xuICBsZXQgcHJlQ29uZmlnUGFyc2VkQXJncztcbiAgLyoqIEB0eXBlIHtQYXJzZWRBcmdzfSAqL1xuICBsZXQgcGFyc2VkQXJncztcbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBkZWZpbml0aW9uIChpbnN0ZWFkIG9mIGRlY2xhcmF0aW9uKSBiZWNhdXNlIFRTIGNhbid0IGZpZ3VyZSBvdXRcbiAgICogdGhlIHZhbHVlIHdpbGwgYmUgZGVmaW5lZCB3aGVuIGl0J3MgdXNlZC5cbiAgICogQHR5cGUge1JldHVyblR5cGU8Z2V0RGVmYXVsdHNGb3JTY2hlbWE+fVxuICAgKi9cbiAgbGV0IGRlZmF1bHRzID0ge307XG4gIGlmIChhcmdzKSB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIGNvbnRhaW5pbmcgcGFja2FnZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgYXMgYSBDTEkgcHJvY2VzcyxcbiAgICAvLyB0aGF0IHBhY2thZ2UgbWlnaHQgbm90IGFwcHJlY2lhdGUgdXMgY2FsbGluZyAncHJvY2Vzcy5leGl0JyB3aWxseS1cbiAgICAvLyBuaWxseSwgc28gZ2l2ZSBpdCB0aGUgb3B0aW9uIHRvIGhhdmUgdXMgdGhyb3cgaW5zdGVhZCBvZiBleGl0XG4gICAgaWYgKGFyZ3MudGhyb3dJbnN0ZWFkT2ZFeGl0KSB7XG4gICAgICB0aHJvd0luc3RlYWRPZkV4aXQgPSB0cnVlO1xuICAgICAgLy8gYnV0IHJlbW92ZSBpdCBzaW5jZSBpdCdzIG5vdCBhIHJlYWwgc2VydmVyIGFyZyBwZXIgc2VcbiAgICAgIGRlbGV0ZSBhcmdzLnRocm93SW5zdGVhZE9mRXhpdDtcbiAgICB9XG4gICAgcHJlQ29uZmlnUGFyc2VkQXJncyA9IC8qKiBAdHlwZSB7UGFyc2VkQXJnc30gKi8oey4uLmFyZ3MsIHN1YmNvbW1hbmQ6IGFyZ3Muc3ViY29tbWFuZCA/PyBTRVJWRVJfU1VCQ09NTUFORH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG90aGVyd2lzZSBwYXJzZSBmcm9tIENMSVxuICAgIHByZUNvbmZpZ1BhcnNlZEFyZ3MgPSBwYXJzZXIucGFyc2VBcmdzKCk7XG4gIH1cblxuICBjb25zdCBjb25maWdSZXN1bHQgPSBhd2FpdCByZWFkQ29uZmlnRmlsZShwcmVDb25maWdQYXJzZWRBcmdzLmNvbmZpZ0ZpbGUpO1xuXG4gIGlmICghXy5pc0VtcHR5KGNvbmZpZ1Jlc3VsdC5lcnJvcnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvcnMgaW4gY29uZmlnIGZpbGUgJHtjb25maWdSZXN1bHQuZmlsZXBhdGh9OlxcbiAke2NvbmZpZ1Jlc3VsdC5yZWFzb24gPz8gY29uZmlnUmVzdWx0LmVycm9yc31gKTtcbiAgfVxuXG4gIC8vIG1lcmdlIGNvbmZpZyBhbmQgYXBwbHkgZGVmYXVsdHMuXG4gIC8vIHRoZSBvcmRlciBvZiBwcmVjZW5kZWNlIGlzOlxuICAvLyAxLiBjb21tYW5kIGxpbmUgYXJnc1xuICAvLyAyLiBjb25maWcgZmlsZVxuICAvLyAzLiBkZWZhdWx0cyBmcm9tIGNvbmZpZyBmaWxlLlxuICBpZiAocHJlQ29uZmlnUGFyc2VkQXJncy5zdWJjb21tYW5kID09PSBTRVJWRVJfU1VCQ09NTUFORCkge1xuICAgIGRlZmF1bHRzID0gZ2V0RGVmYXVsdHNGb3JTY2hlbWEoZmFsc2UpO1xuXG4gICAgcGFyc2VkQXJncyA9IF8uZGVmYXVsdHNEZWVwKFxuICAgICAgcHJlQ29uZmlnUGFyc2VkQXJncyxcbiAgICAgIGNvbmZpZ1Jlc3VsdC5jb25maWc/LnNlcnZlcixcbiAgICAgIGRlZmF1bHRzXG4gICAgKTtcblxuICAgIGlmIChwcmVDb25maWdQYXJzZWRBcmdzLnNob3dDb25maWcpIHtcbiAgICAgIHNob3dDb25maWcoZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MocHJlQ29uZmlnUGFyc2VkQXJncyksIGNvbmZpZ1Jlc3VsdCwgZGVmYXVsdHMsIHBhcnNlZEFyZ3MpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICB9IGVsc2Uge1xuICAgIHBhcnNlZEFyZ3MgPSBwcmVDb25maWdQYXJzZWRBcmdzO1xuICB9XG5cbiAgYXdhaXQgbG9nc2lua0luaXQocGFyc2VkQXJncyk7XG5cbiAgLy8gaWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCB0aGUgJ2RyaXZlcicgQ0xJLCBkb24ndCBydW4gdGhlIG5vcm1hbCBzZXJ2ZXIsXG4gIC8vIGJ1dCBpbnN0ZWFkIHBhc3MgY29udHJvbCB0byB0aGUgZHJpdmVyIENMSVxuICBpZiAocGFyc2VkQXJncy5zdWJjb21tYW5kID09PSBEUklWRVJfVFlQRSkge1xuICAgIGF3YWl0IHJ1bkV4dGVuc2lvbkNvbW1hbmQocGFyc2VkQXJncywgZHJpdmVyQ29uZmlnKTtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgaWYgKHBhcnNlZEFyZ3Muc3ViY29tbWFuZCA9PT0gUExVR0lOX1RZUEUpIHtcbiAgICBhd2FpdCBydW5FeHRlbnNpb25Db21tYW5kKHBhcnNlZEFyZ3MsIHBsdWdpbkNvbmZpZyk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgaWYgKHBhcnNlZEFyZ3MubG9nRmlsdGVycykge1xuICAgIGNvbnN0IHtpc3N1ZXMsIHJ1bGVzfSA9IGF3YWl0IGxvZ0ZhY3RvcnkubG9hZFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NpbmdSdWxlcyhwYXJzZWRBcmdzLmxvZ0ZpbHRlcnMpO1xuICAgIGlmICghXy5pc0VtcHR5KGlzc3VlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGxvZyBmaWx0ZXJpbmcgcnVsZXMgY29uZmlnICcke3BhcnNlZEFyZ3MubG9nRmlsdGVyc30nIGhhcyBpc3N1ZXM6IGAgK1xuICAgICAgICBKU09OLnN0cmluZ2lmeShpc3N1ZXMsIG51bGwsIDIpKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eShydWxlcykpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBGb3VuZCBubyBsb2cgZmlsdGVyaW5nIHJ1bGVzIGluICcke3BhcnNlZEFyZ3MubG9nRmlsdGVyc30nLiBJcyB0aGF0IGV4cGVjdGVkP2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuaW5mbyhgTG9hZGVkICR7dXRpbC5wbHVyYWxpemUoJ2ZpbHRlcmluZyBydWxlJywgcnVsZXMubGVuZ3RoLCB0cnVlKX0gZnJvbSAnJHtwYXJzZWRBcmdzLmxvZ0ZpbHRlcnN9J2ApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFwcGl1bURyaXZlciA9IG5ldyBBcHBpdW1Ecml2ZXIocGFyc2VkQXJncyk7XG4gIC8vIHNldCB0aGUgY29uZmlnIG9uIHRoZSB1bWJyZWxsYSBkcml2ZXIgc28gaXQgY2FuIG1hdGNoIGRyaXZlcnMgdG8gY2Fwc1xuICBhcHBpdW1Ecml2ZXIuZHJpdmVyQ29uZmlnID0gZHJpdmVyQ29uZmlnO1xuICBhd2FpdCBwcmVmbGlnaHRDaGVja3MocGFyc2VkQXJncywgdGhyb3dJbnN0ZWFkT2ZFeGl0KTtcblxuICByZXR1cm4gLyoqIEB0eXBlIHtTZXJ2ZXJJbml0UmVzdWx0fSAqLyh7YXBwaXVtRHJpdmVyLCBwYXJzZWRBcmdzLCBkcml2ZXJDb25maWcsIHBsdWdpbkNvbmZpZ30pO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIEFwcGl1bSdzIGNvbmZpZy4gIFN0YXJ0cyBzZXJ2ZXIgaWYgYXBwcm9wcmlhdGUgYW5kIHJlc29sdmVzIHRoZVxuICogc2VydmVyIGluc3RhbmNlIGlmIHNvOyBvdGhlcndpc2UgcmVzb2x2ZXMgdy8gYHVuZGVmaW5lZGAuXG4gKiBAcGFyYW0ge1BhcnRpYWxBcmdzfSBbYXJnc10gLSBBcmd1bWVudHMgZnJvbSBDTEkgb3Igb3RoZXJ3aXNlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoJ2h0dHAnKS5TZXJ2ZXJ8dW5kZWZpbmVkPn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWFpbiAoYXJncykge1xuICBjb25zdCB7YXBwaXVtRHJpdmVyLCBwYXJzZWRBcmdzLCBwbHVnaW5Db25maWcsIGRyaXZlckNvbmZpZ30gPSAvKiogQHR5cGUge1NlcnZlckluaXRSZXN1bHR9ICovKGF3YWl0IGluaXQoYXJncykpO1xuXG4gIGlmICghYXBwaXVtRHJpdmVyIHx8ICFwYXJzZWRBcmdzIHx8ICFwbHVnaW5Db25maWcgfHwgIWRyaXZlckNvbmZpZykge1xuICAgIC8vIGlmIHRoaXMgYnJhbmNoIGlzIHRha2VuLCB3ZSd2ZSBydW4gYSBkaWZmZXJlbnQgc3ViY29tbWFuZCwgc28gdGhlcmUncyBub3RoaW5nXG4gICAgLy8gbGVmdCB0byBkbyBoZXJlLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBsdWdpbkNsYXNzZXMgPSBnZXRBY3RpdmVQbHVnaW5zKHBsdWdpbkNvbmZpZywgcGFyc2VkQXJncy51c2VQbHVnaW5zKTtcbiAgLy8gc2V0IHRoZSBhY3RpdmUgcGx1Z2lucyBvbiB0aGUgdW1icmVsbGEgZHJpdmVyIHNvIGl0IGNhbiB1c2UgdGhlbSBmb3IgY29tbWFuZHNcbiAgYXBwaXVtRHJpdmVyLnBsdWdpbkNsYXNzZXMgPSBwbHVnaW5DbGFzc2VzO1xuXG4gIGF3YWl0IGxvZ1N0YXJ0dXBJbmZvKHBhcnNlZEFyZ3MpO1xuICBsZXQgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uID0gbWFrZVJvdXRlcihhcHBpdW1Ecml2ZXIpO1xuXG4gIGNvbnN0IGRyaXZlckNsYXNzZXMgPSBnZXRBY3RpdmVEcml2ZXJzKGRyaXZlckNvbmZpZywgcGFyc2VkQXJncy51c2VEcml2ZXJzKTtcbiAgY29uc3Qgc2VydmVyVXBkYXRlcnMgPSBnZXRTZXJ2ZXJVcGRhdGVycyhkcml2ZXJDbGFzc2VzLCBwbHVnaW5DbGFzc2VzKTtcbiAgY29uc3QgZXh0cmFNZXRob2RNYXAgPSBnZXRFeHRyYU1ldGhvZE1hcChkcml2ZXJDbGFzc2VzLCBwbHVnaW5DbGFzc2VzKTtcblxuICBjb25zdCBzZXJ2ZXJPcHRzID0ge1xuICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbixcbiAgICBwb3J0OiBwYXJzZWRBcmdzLnBvcnQsXG4gICAgaG9zdG5hbWU6IHBhcnNlZEFyZ3MuYWRkcmVzcyxcbiAgICBhbGxvd0NvcnM6IHBhcnNlZEFyZ3MuYWxsb3dDb3JzLFxuICAgIGJhc2VQYXRoOiBwYXJzZWRBcmdzLmJhc2VQYXRoLFxuICAgIHNlcnZlclVwZGF0ZXJzLFxuICAgIGV4dHJhTWV0aG9kTWFwLFxuICB9O1xuICBpZiAocGFyc2VkQXJncy5rZWVwQWxpdmVUaW1lb3V0KSB7XG4gICAgc2VydmVyT3B0cy5rZWVwQWxpdmVUaW1lb3V0ID0gcGFyc2VkQXJncy5rZWVwQWxpdmVUaW1lb3V0ICogMTAwMDtcbiAgfVxuICBsZXQgc2VydmVyO1xuICB0cnkge1xuICAgIHNlcnZlciA9IGF3YWl0IGJhc2VTZXJ2ZXIoc2VydmVyT3B0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcihgQ291bGQgbm90IGNvbmZpZ3VyZSBBcHBpdW0gc2VydmVyLiBJdCdzIHBvc3NpYmxlIHRoYXQgYSBkcml2ZXIgb3IgcGx1Z2luIHRyaWVkIGAgK1xuICAgICAgICAgICAgICAgICBgdG8gdXBkYXRlIHRoZSBzZXJ2ZXIgYW5kIGZhaWxlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgbG9nZ2VyLmRlYnVnKGVyci5zdGFjayk7XG4gICAgcmV0dXJuIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGlmIChwYXJzZWRBcmdzLmFsbG93Q29ycykge1xuICAgIGxvZ2dlci53YXJuKCdZb3UgaGF2ZSBlbmFibGVkIENPUlMgcmVxdWVzdHMgZnJvbSBhbnkgaG9zdC4gQmUgY2FyZWZ1bCBub3QgJyArXG4gICAgICAgICAgICAgICAgJ3RvIHZpc2l0IHNpdGVzIHdoaWNoIGNvdWxkIG1hbGljaW91c2x5IHRyeSB0byBzdGFydCBBcHBpdW0gJyArXG4gICAgICAgICAgICAgICAgJ3Nlc3Npb25zIG9uIHlvdXIgbWFjaGluZScpO1xuICB9XG4gIGFwcGl1bURyaXZlci5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gIHRyeSB7XG4gICAgLy8gY29uZmlndXJlIGFzIG5vZGUgb24gZ3JpZCwgaWYgbmVjZXNzYXJ5XG4gICAgLy8gZmFsc3kgdmFsdWVzIHNob3VsZCBub3QgY2F1c2UgdGhpcyB0byBydW5cbiAgICBpZiAocGFyc2VkQXJncy5ub2RlY29uZmlnKSB7XG4gICAgICBhd2FpdCByZWdpc3Rlck5vZGUocGFyc2VkQXJncy5ub2RlY29uZmlnLCBwYXJzZWRBcmdzLmFkZHJlc3MsIHBhcnNlZEFyZ3MucG9ydCwgcGFyc2VkQXJncy5iYXNlUGF0aCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBbJ1NJR0lOVCcsICdTSUdURVJNJ10pIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCBhc3luYyBmdW5jdGlvbiBvblNpZ25hbCAoKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgUmVjZWl2ZWQgJHtzaWduYWx9IC0gc2h1dHRpbmcgZG93bmApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXBwaXVtRHJpdmVyLmRlbGV0ZUFsbFNlc3Npb25zKHtcbiAgICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgICByZWFzb246IGBUaGUgcHJvY2VzcyBoYXMgcmVjZWl2ZWQgJHtzaWduYWx9IHNpZ25hbGAsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihlKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9nU2VydmVyUG9ydChwYXJzZWRBcmdzLmFkZHJlc3MsIHBhcnNlZEFyZ3MucG9ydCk7XG4gIGRyaXZlckNvbmZpZy5wcmludCgpO1xuICBwbHVnaW5Db25maWcucHJpbnQocGx1Z2luQ2xhc3Nlcy5tYXAoKHApID0+IHAucGx1Z2luTmFtZSkpO1xuXG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbi8vIE5PVEU6IHRoaXMgaXMgaGVyZSBmb3IgYmFja3dhcmRzIGNvbXBhdCBmb3IgYW55IHNjcmlwdHMgcmVmZXJlbmNpbmcgYG1haW4uanNgIGRpcmVjdGx5XG4vLyAobW9yZSBzcGVjaWZpY2FsbHksIGBidWlsZC9saWIvbWFpbi5qc2ApXG4vLyB0aGUgZXhlY3V0YWJsZSBpcyBub3cgYC4uL2luZGV4LmpzYCwgc28gdGhhdCBtb2R1bGUgd2lsbCB0eXBpY2FsbHkgYmUgYHJlcXVpcmUubWFpbmAuXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgYXN5bmNpZnkobWFpbik7XG59XG5cbi8vIGV2ZXJ5dGhpbmcgYmVsb3cgaGVyZSBpcyBpbnRlbmRlZCB0byBiZSBhIHB1YmxpYyBBUEkuXG5leHBvcnQgeyByZWFkQ29uZmlnRmlsZSB9IGZyb20gJy4vY29uZmlnLWZpbGUnO1xuZXhwb3J0IHsgZmluYWxpemVTY2hlbWEsIGdldFNjaGVtYSwgdmFsaWRhdGUgfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEnO1xuZXhwb3J0IHsgbWFpbiwgaW5pdCwgcmVzb2x2ZUFwcGl1bUhvbWUgfTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi90eXBlcy9jbGknKS5QYXJzZWRBcmdzfSBQYXJzZWRBcmdzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi90eXBlcy9jbGknKS5QYXJ0aWFsQXJnc30gUGFydGlhbEFyZ3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL3R5cGVzJykuRHJpdmVyVHlwZX0gRHJpdmVyVHlwZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vdHlwZXMnKS5QbHVnaW5UeXBlfSBQbHVnaW5UeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi90eXBlcy9leHRlbnNpb24nKS5Ecml2ZXJDbGFzc30gRHJpdmVyQ2xhc3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL3R5cGVzL2V4dGVuc2lvbicpLlBsdWdpbkNsYXNzfSBQbHVnaW5DbGFzc1xuICovXG5cbi8qKlxuICogTGl0ZXJhbGx5IGFuIGVtcHR5IG9iamVjdFxuICogQHR5cGVkZWYgeyB7fSB9IEV4dENvbW1hbmRJbml0UmVzdWx0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZXJ2ZXJJbml0RGF0YVxuICogQHByb3BlcnR5IHtBcHBpdW1Ecml2ZXJ9IGFwcGl1bURyaXZlciAtIFRoZSBBcHBpdW0gZHJpdmVyXG4gKiBAcHJvcGVydHkge1BhcnNlZEFyZ3N9IHBhcnNlZEFyZ3MgLSBUaGUgcGFyc2VkIGFyZ3VtZW50c1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1NlcnZlckluaXREYXRhICYgaW1wb3J0KCcuL2V4dGVuc2lvbicpLkV4dGVuc2lvbkNvbmZpZ3N9IFNlcnZlckluaXRSZXN1bHRcbiAqL1xuIl19
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The original ID of the Appium config schema.
|
|
3
|
+
* We use this in the CLI to convert it to `argparse` options.
|
|
4
|
+
*/
|
|
5
|
+
export const APPIUM_CONFIG_SCHEMA_ID: "appium.json";
|
|
6
|
+
/**
|
|
7
|
+
* The schema prop containing server-related options. Everything in here
|
|
8
|
+
* is "native" to Appium.
|
|
9
|
+
* Used by {@link flattenSchema} for transforming the schema into CLI args.
|
|
10
|
+
*/
|
|
11
|
+
export const SERVER_PROP_NAME: "server";
|
|
12
|
+
/**
|
|
13
|
+
* An `ArgSpec` is a class representing metadata about an argument (or config
|
|
14
|
+
* option) used for cross-referencing.
|
|
15
|
+
*
|
|
16
|
+
* This class has no instance methods, and is basically just a read-only "struct".
|
|
17
|
+
* @template D
|
|
18
|
+
*/
|
|
19
|
+
export class ArgSpec<D> {
|
|
20
|
+
/**
|
|
21
|
+
* Return the schema ID (`$id`) for the **argument** given the parameters.
|
|
22
|
+
*
|
|
23
|
+
* If you need the "root" or "base" schema ID, use {@link ArgSpec.toSchemaBaseRef} instead.
|
|
24
|
+
* @param {string} name - Argument name
|
|
25
|
+
* @param {ExtensionType} [extType] - Extension type
|
|
26
|
+
* @param {string} [extName] - Extension name
|
|
27
|
+
* @returns {string} Schema ID
|
|
28
|
+
*/
|
|
29
|
+
static toSchemaRef(name: string, extType?: import("../../types").ExtensionType | undefined, extName?: string | undefined): string;
|
|
30
|
+
/**
|
|
31
|
+
* Return the schema ID for an extension or the base schema ID.
|
|
32
|
+
* @param {ExtensionType} [extType] - Extension type
|
|
33
|
+
* @param {string} [extName] - Extension name
|
|
34
|
+
*/
|
|
35
|
+
static toSchemaBaseRef(extType?: import("../../types").ExtensionType | undefined, extName?: string | undefined): string;
|
|
36
|
+
/**
|
|
37
|
+
* Return the unique ID for the argument given the parameters.
|
|
38
|
+
* @param {string} name - Argument name
|
|
39
|
+
* @param {ExtensionType} [extType] - Extension type
|
|
40
|
+
* @param {string} [extName] - Extension name
|
|
41
|
+
* @returns {string} Unique ID
|
|
42
|
+
*/
|
|
43
|
+
static toArg(name: string, extType?: import("../../types").ExtensionType | undefined, extName?: string | undefined): string;
|
|
44
|
+
/**
|
|
45
|
+
* Normalizes a raw extension name (not including the type).
|
|
46
|
+
* @param {string} extName - Extension name
|
|
47
|
+
* @returns {string} Normalized extension name
|
|
48
|
+
*/
|
|
49
|
+
static toNormalizedExtName(extName: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* When given the root ID of a schema for an extension (`<extType>-<normalizedExtName>.json`) Returns an object containing the extension type and the _normalized_ extension name.
|
|
52
|
+
* @param {string} schemaId - Root schema ID
|
|
53
|
+
* @returns { {extType?: ExtensionType, normalizedExtName?: string} }
|
|
54
|
+
*/
|
|
55
|
+
static extensionInfoFromRootSchemaId(schemaId: string): {
|
|
56
|
+
extType?: ExtensionType;
|
|
57
|
+
normalizedExtName?: string;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Creates an `ArgSpec`
|
|
61
|
+
*
|
|
62
|
+
* @param {string} name - The canonical name of the argument. Corresponds to a key in a schema's
|
|
63
|
+
* `properties` property.
|
|
64
|
+
* @template D
|
|
65
|
+
* @param {ArgSpecOptions<D>} [opts] - Options
|
|
66
|
+
* @returns {Readonly<ArgSpec>}
|
|
67
|
+
*/
|
|
68
|
+
static create<D_1>(name: string, opts?: ArgSpecOptions<D_1> | undefined): Readonly<ArgSpec<any>>;
|
|
69
|
+
/**
|
|
70
|
+
* Builds some computed fields and assigns them to the instance.
|
|
71
|
+
*
|
|
72
|
+
* Undefined properties are not assigned.
|
|
73
|
+
*
|
|
74
|
+
* The _constructor_ is private. Use {@link ArgSpec.create} instead.
|
|
75
|
+
* @private
|
|
76
|
+
* @param {string} name
|
|
77
|
+
* @param {ArgSpecOptions<D>} [opts]
|
|
78
|
+
*/
|
|
79
|
+
private constructor();
|
|
80
|
+
/**
|
|
81
|
+
* The canonical name of the argument. Corresponds to key in schema's `properties` prop.
|
|
82
|
+
* @type {string}
|
|
83
|
+
*/
|
|
84
|
+
name: string;
|
|
85
|
+
/**
|
|
86
|
+
* The `ExtensionType` of the argument. This will be set if the arg came from an extension;
|
|
87
|
+
* otherwise it will be `undefined`.
|
|
88
|
+
* @type {ExtensionType|undefined}
|
|
89
|
+
*/
|
|
90
|
+
extType: ExtensionType | undefined;
|
|
91
|
+
/**
|
|
92
|
+
* The name of the extension, if this argument came from an extension.
|
|
93
|
+
*
|
|
94
|
+
* Otherwise `undefined`.
|
|
95
|
+
* @type {string|undefined}
|
|
96
|
+
*/
|
|
97
|
+
extName: string | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* The schema ID (`$id`) for the argument. This is automatically determined, and any user-provided `$id`s will be overwritten.
|
|
100
|
+
*
|
|
101
|
+
* @type {string}
|
|
102
|
+
*/
|
|
103
|
+
ref: string;
|
|
104
|
+
/**
|
|
105
|
+
* The CLI argument, sans leading dashes.
|
|
106
|
+
* @type {string}
|
|
107
|
+
*/
|
|
108
|
+
arg: string;
|
|
109
|
+
/**
|
|
110
|
+
* The desired keypath for the argument after arguments have been parsed.
|
|
111
|
+
*
|
|
112
|
+
* Typically this is camelCased. If the arg came from an extension, it will be prefixed with
|
|
113
|
+
* `<extType>.<extName>.`
|
|
114
|
+
* @type {string}
|
|
115
|
+
*/
|
|
116
|
+
dest: string;
|
|
117
|
+
/**
|
|
118
|
+
* The same as {@link ArgSpec.dest} but without the leading `<extType>.<extName>.` prefix.
|
|
119
|
+
*/
|
|
120
|
+
rawDest: string;
|
|
121
|
+
/**
|
|
122
|
+
* Whatever the default value of this argument is, as specified by the
|
|
123
|
+
* `default` property of the schema.
|
|
124
|
+
* @type {D|undefined}
|
|
125
|
+
*/
|
|
126
|
+
defaultValue: D | undefined;
|
|
127
|
+
/**
|
|
128
|
+
* String representation, useful for debugging
|
|
129
|
+
* @returns {string}
|
|
130
|
+
*/
|
|
131
|
+
toString(): string;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Options for {@link ArgSpec.create }
|
|
135
|
+
*/
|
|
136
|
+
export type ArgSpecOptions<D> = {
|
|
137
|
+
extName?: string | undefined;
|
|
138
|
+
extType?: import("../../types").ExtensionType | undefined;
|
|
139
|
+
dest?: string | undefined;
|
|
140
|
+
defaultValue?: D | undefined;
|
|
141
|
+
};
|
|
142
|
+
export type ExtensionType = import('../extension/manifest').ExtensionType;
|
|
143
|
+
//# sourceMappingURL=arg-spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arg-spec.d.ts","sourceRoot":"","sources":["../../../lib/schema/arg-spec.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH,oDAAqD;AAErD;;;;GAIG;AACH,wCAAyC;AAYzC;;;;;;GAMG;AACH;IA0FE;;;;;;;;OAQG;IACH,yBALW,MAAM,4FAGJ,MAAM,CAQlB;IAED;;;;OAIG;IACH,wHAKC;IAED;;;;;;OAMG;IACH,mBALW,MAAM,4FAGJ,MAAM,CAQlB;IAED;;;;OAIG;IACH,oCAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;OAIG;IACH,+CAHW,MAAM,GACH;QAAC,OAAO,CAAC,EAAE,aAAa,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAC,CAYlE;IAED;;;;;;;;OAQG;IACH,yBANW,MAAM,2CAIJ,sBAAiB,CAI7B;IAnHD;;;;;;;;;OASG;IACH,sBAsBC;IAvFD;;;OAGG;IACH,MAFU,MAAM,CAEX;IAEL;;;;OAIG;IACH,SAFU,aAAa,GAAC,SAAS,CAEzB;IAER;;;;;OAKG;IACH,SAFU,MAAM,GAAC,SAAS,CAElB;IAER;;;;OAIG;IACH,KAFU,MAAM,CAEZ;IAEJ;;;OAGG;IACH,KAFU,MAAM,CAEZ;IAEJ;;;;;;OAMG;IACH,MAFU,MAAM,CAEX;IAEL;;OAEG;IACH,gBAAQ;IAER;;;;OAIG;IACH,cAFU,CAAC,GAAC,SAAS,CAER;IAuHb;;;OAGG;IAEH,YAHa,MAAM,CASlB;CACF;;;;;;;;;;4BAaY,OAAO,uBAAuB,EAAE,aAAa"}
|