appium 2.0.0-beta.7 → 2.0.0-beta.71
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/LICENSE +1 -1
- package/README.md +149 -58
- package/build/lib/appium.d.ts +229 -0
- package/build/lib/appium.d.ts.map +1 -0
- package/build/lib/appium.js +678 -439
- package/build/lib/appium.js.map +1 -0
- package/build/lib/cli/args.d.ts +17 -0
- package/build/lib/cli/args.d.ts.map +1 -0
- package/build/lib/cli/args.js +263 -300
- package/build/lib/cli/args.js.map +1 -0
- package/build/lib/cli/driver-command.d.ts +102 -0
- package/build/lib/cli/driver-command.d.ts.map +1 -0
- package/build/lib/cli/driver-command.js +131 -81
- package/build/lib/cli/driver-command.js.map +1 -0
- package/build/lib/cli/extension-command.d.ts +402 -0
- package/build/lib/cli/extension-command.d.ts.map +1 -0
- package/build/lib/cli/extension-command.js +799 -383
- package/build/lib/cli/extension-command.js.map +1 -0
- package/build/lib/cli/extension.d.ts +23 -0
- package/build/lib/cli/extension.d.ts.map +1 -0
- package/build/lib/cli/extension.js +71 -60
- package/build/lib/cli/extension.js.map +1 -0
- package/build/lib/cli/parser.d.ts +84 -0
- package/build/lib/cli/parser.d.ts.map +1 -0
- package/build/lib/cli/parser.js +252 -148
- package/build/lib/cli/parser.js.map +1 -0
- package/build/lib/cli/plugin-command.d.ts +99 -0
- package/build/lib/cli/plugin-command.d.ts.map +1 -0
- package/build/lib/cli/plugin-command.js +125 -81
- package/build/lib/cli/plugin-command.js.map +1 -0
- 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 +72 -51
- package/build/lib/cli/utils.js.map +1 -0
- 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 +207 -0
- package/build/lib/config-file.js.map +1 -0
- package/build/lib/config.d.ts +49 -0
- package/build/lib/config.d.ts.map +1 -0
- package/build/lib/config.js +262 -223
- package/build/lib/config.js.map +1 -0
- package/build/lib/constants.d.ts +56 -0
- package/build/lib/constants.d.ts.map +1 -0
- package/build/lib/constants.js +73 -0
- package/build/lib/constants.js.map +1 -0
- package/build/lib/extension/driver-config.d.ts +82 -0
- package/build/lib/extension/driver-config.d.ts.map +1 -0
- package/build/lib/extension/driver-config.js +210 -0
- package/build/lib/extension/driver-config.js.map +1 -0
- package/build/lib/extension/extension-config.d.ts +270 -0
- package/build/lib/extension/extension-config.d.ts.map +1 -0
- package/build/lib/extension/extension-config.js +601 -0
- package/build/lib/extension/extension-config.js.map +1 -0
- package/build/lib/extension/index.d.ts +48 -0
- package/build/lib/extension/index.d.ts.map +1 -0
- package/build/lib/extension/index.js +105 -0
- package/build/lib/extension/index.js.map +1 -0
- package/build/lib/extension/manifest-migrations.d.ts +27 -0
- package/build/lib/extension/manifest-migrations.d.ts.map +1 -0
- package/build/lib/extension/manifest-migrations.js +134 -0
- package/build/lib/extension/manifest-migrations.js.map +1 -0
- package/build/lib/extension/manifest.d.ts +145 -0
- package/build/lib/extension/manifest.d.ts.map +1 -0
- package/build/lib/extension/manifest.js +528 -0
- package/build/lib/extension/manifest.js.map +1 -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 +62 -0
- package/build/lib/extension/package-changed.js.map +1 -0
- package/build/lib/extension/plugin-config.d.ts +56 -0
- package/build/lib/extension/plugin-config.d.ts.map +1 -0
- package/build/lib/extension/plugin-config.js +102 -0
- package/build/lib/extension/plugin-config.js.map +1 -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 +122 -144
- package/build/lib/grid-register.js.map +1 -0
- package/build/lib/logger.d.ts +3 -0
- package/build/lib/logger.d.ts.map +1 -0
- package/build/lib/logger.js +5 -17
- package/build/lib/logger.js.map +1 -0
- package/build/lib/logsink.d.ts +4 -0
- package/build/lib/logsink.d.ts.map +1 -0
- package/build/lib/logsink.js +189 -184
- package/build/lib/logsink.js.map +1 -0
- package/build/lib/main.d.ts +62 -0
- package/build/lib/main.d.ts.map +1 -0
- package/build/lib/main.js +388 -234
- package/build/lib/main.js.map +1 -0
- 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 +164 -0
- package/build/lib/schema/arg-spec.js.map +1 -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 +220 -0
- package/build/lib/schema/cli-args.js.map +1 -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 +124 -0
- package/build/lib/schema/cli-transformers.js.map +1 -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 +19 -0
- package/build/lib/schema/index.js.map +1 -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 +128 -0
- package/build/lib/schema/keywords.js.map +1 -0
- package/build/lib/schema/schema.d.ts +260 -0
- package/build/lib/schema/schema.d.ts.map +1 -0
- package/build/lib/schema/schema.js +640 -0
- package/build/lib/schema/schema.js.map +1 -0
- package/build/lib/utils.d.ts +266 -0
- package/build/lib/utils.d.ts.map +1 -0
- package/build/lib/utils.js +349 -273
- package/build/lib/utils.js.map +1 -0
- package/build/types/cli.d.ts +134 -0
- package/build/types/cli.d.ts.map +1 -0
- package/build/types/cli.js +3 -0
- package/build/types/cli.js.map +1 -0
- package/build/types/index.d.ts +15 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/index.js +19 -0
- package/build/types/index.js.map +1 -0
- package/build/types/manifest/base.d.ts +135 -0
- package/build/types/manifest/base.d.ts.map +1 -0
- package/build/types/manifest/base.js +3 -0
- package/build/types/manifest/base.js.map +1 -0
- package/build/types/manifest/index.d.ts +21 -0
- package/build/types/manifest/index.d.ts.map +1 -0
- package/build/types/manifest/index.js +42 -0
- package/build/types/manifest/index.js.map +1 -0
- package/build/types/manifest/v3.d.ts +139 -0
- package/build/types/manifest/v3.d.ts.map +1 -0
- package/build/types/manifest/v3.js +3 -0
- package/build/types/manifest/v3.js.map +1 -0
- package/build/types/manifest/v4.d.ts +139 -0
- package/build/types/manifest/v4.d.ts.map +1 -0
- package/build/types/manifest/v4.js +3 -0
- package/build/types/manifest/v4.js.map +1 -0
- package/driver.d.ts +1 -0
- package/driver.js +14 -0
- package/index.js +11 -0
- package/lib/appium.js +558 -186
- package/lib/cli/args.js +275 -407
- package/lib/cli/driver-command.js +132 -24
- package/lib/cli/extension-command.js +751 -272
- package/lib/cli/extension.js +47 -20
- package/lib/cli/parser.js +267 -95
- package/lib/cli/plugin-command.js +122 -22
- package/lib/cli/utils.js +24 -10
- package/lib/config-file.js +220 -0
- package/lib/config.js +243 -132
- package/lib/constants.js +79 -0
- package/lib/extension/driver-config.js +247 -0
- package/lib/extension/extension-config.js +709 -0
- package/lib/extension/index.js +116 -0
- package/lib/extension/manifest-migrations.js +136 -0
- package/lib/extension/manifest.js +580 -0
- package/lib/extension/package-changed.js +64 -0
- package/lib/extension/plugin-config.js +112 -0
- package/lib/grid-register.js +49 -35
- package/lib/logger.js +1 -2
- package/lib/logsink.js +59 -36
- package/lib/main.js +369 -104
- package/lib/schema/arg-spec.js +229 -0
- package/lib/schema/cli-args.js +241 -0
- package/lib/schema/cli-transformers.js +119 -0
- package/lib/schema/index.js +2 -0
- package/lib/schema/keywords.js +136 -0
- package/lib/schema/schema.js +725 -0
- package/lib/utils.js +289 -167
- package/package.json +84 -83
- package/plugin.d.ts +1 -0
- package/plugin.js +13 -0
- package/scripts/autoinstall-extensions.js +243 -0
- package/support.d.ts +1 -0
- package/support.js +13 -0
- package/tsconfig.json +25 -0
- package/types/cli.ts +193 -0
- package/types/index.ts +20 -0
- package/types/manifest/README.md +30 -0
- package/types/manifest/base.ts +158 -0
- package/types/manifest/index.ts +28 -0
- package/types/manifest/v3.ts +161 -0
- package/types/manifest/v4.ts +161 -0
- package/CHANGELOG.md +0 -3594
- package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
- package/build/lib/cli/argparse-actions.js +0 -104
- package/build/lib/cli/npm.js +0 -200
- package/build/lib/cli/parser-helpers.js +0 -93
- package/build/lib/driver-config.js +0 -77
- package/build/lib/drivers.js +0 -99
- package/build/lib/extension-config.js +0 -253
- package/build/lib/plugin-config.js +0 -59
- package/build/lib/plugins.js +0 -14
- package/lib/cli/argparse-actions.js +0 -77
- package/lib/cli/npm.js +0 -175
- package/lib/cli/parser-helpers.js +0 -91
- package/lib/driver-config.js +0 -46
- package/lib/drivers.js +0 -84
- package/lib/extension-config.js +0 -209
- package/lib/plugin-config.js +0 -34
- package/lib/plugins.js +0 -10
package/build/lib/cli/args.js
CHANGED
|
@@ -1,311 +1,274 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
require("
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var _parserHelpers = require("./parser-helpers");
|
|
13
|
-
|
|
14
|
-
var _extensionConfig = require("../extension-config");
|
|
15
|
-
|
|
16
|
-
var _argparseActions = require("./argparse-actions");
|
|
17
|
-
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getExtensionArgs = exports.getServerArgs = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
|
+
const extension_config_1 = require("../extension/extension-config");
|
|
10
|
+
const cli_args_1 = require("../schema/cli-args");
|
|
18
11
|
const DRIVER_EXAMPLE = 'xcuitest';
|
|
19
12
|
const PLUGIN_EXAMPLE = 'find_by_image';
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
dest: 'address'
|
|
64
|
-
}], [['-p', '--port'], {
|
|
65
|
-
default: 4723,
|
|
66
|
-
required: false,
|
|
67
|
-
type: 'int',
|
|
68
|
-
help: 'port to listen on',
|
|
69
|
-
dest: 'port'
|
|
70
|
-
}], [['-pa', '--base-path'], {
|
|
71
|
-
required: false,
|
|
72
|
-
default: _appiumBaseDriver.DEFAULT_BASE_PATH,
|
|
73
|
-
dest: 'basePath',
|
|
74
|
-
help: 'Base path to use as the prefix for all webdriver routes running ' + `on this server`
|
|
75
|
-
}], [['-ka', '--keep-alive-timeout'], {
|
|
76
|
-
required: false,
|
|
77
|
-
default: null,
|
|
78
|
-
dest: 'keepAliveTimeout',
|
|
79
|
-
type: 'int',
|
|
80
|
-
help: 'Number of seconds the Appium server should apply as both the keep-alive timeout ' + 'and the connection timeout for all requests. Defaults to 600 (10 minutes).'
|
|
81
|
-
}], [['-ca', '--callback-address'], {
|
|
82
|
-
required: false,
|
|
83
|
-
dest: 'callbackAddress',
|
|
84
|
-
default: null,
|
|
85
|
-
help: 'callback IP Address (default: same as --address)'
|
|
86
|
-
}], [['-cp', '--callback-port'], {
|
|
87
|
-
required: false,
|
|
88
|
-
dest: 'callbackPort',
|
|
89
|
-
default: null,
|
|
90
|
-
type: 'int',
|
|
91
|
-
help: 'callback port (default: same as port)'
|
|
92
|
-
}], [['--session-override'], {
|
|
93
|
-
default: false,
|
|
94
|
-
dest: 'sessionOverride',
|
|
95
|
-
action: 'store_true',
|
|
96
|
-
required: false,
|
|
97
|
-
help: 'Enables session override (clobbering)'
|
|
98
|
-
}], [['-g', '--log'], {
|
|
99
|
-
default: null,
|
|
100
|
-
dest: 'logFile',
|
|
101
|
-
required: false,
|
|
102
|
-
help: 'Also send log output to this file'
|
|
103
|
-
}], [['--log-level'], {
|
|
104
|
-
choices: ['info', 'info:debug', 'info:info', 'info:warn', 'info:error', 'warn', 'warn:debug', 'warn:info', 'warn:warn', 'warn:error', 'error', 'error:debug', 'error:info', 'error:warn', 'error:error', 'debug', 'debug:debug', 'debug:info', 'debug:warn', 'debug:error'],
|
|
105
|
-
default: 'debug',
|
|
106
|
-
dest: 'loglevel',
|
|
107
|
-
required: false,
|
|
108
|
-
help: 'log level; default (console[:file]): debug[:debug]'
|
|
109
|
-
}], [['--log-timestamp'], {
|
|
110
|
-
default: false,
|
|
111
|
-
required: false,
|
|
112
|
-
help: 'Show timestamps in console output',
|
|
113
|
-
action: 'store_true',
|
|
114
|
-
dest: 'logTimestamp'
|
|
115
|
-
}], [['--local-timezone'], {
|
|
116
|
-
default: false,
|
|
117
|
-
required: false,
|
|
118
|
-
help: 'Use local timezone for timestamps',
|
|
119
|
-
action: 'store_true',
|
|
120
|
-
dest: 'localTimezone'
|
|
121
|
-
}], [['--log-no-colors'], {
|
|
122
|
-
default: false,
|
|
123
|
-
required: false,
|
|
124
|
-
help: 'Do not use colors in console output',
|
|
125
|
-
action: 'store_true',
|
|
126
|
-
dest: 'logNoColors'
|
|
127
|
-
}], [['-G', '--webhook'], {
|
|
128
|
-
default: null,
|
|
129
|
-
required: false,
|
|
130
|
-
dest: 'webhook',
|
|
131
|
-
help: 'Also send log output to this HTTP listener, for example localhost:9876'
|
|
132
|
-
}], [['--nodeconfig'], {
|
|
133
|
-
required: false,
|
|
134
|
-
default: null,
|
|
135
|
-
dest: 'nodeconfig',
|
|
136
|
-
help: 'Configuration JSON file to register appium with selenium grid'
|
|
137
|
-
}], [['--chromedriver-port'], {
|
|
138
|
-
default: null,
|
|
139
|
-
dest: 'chromeDriverPort',
|
|
140
|
-
required: false,
|
|
141
|
-
action: _argparseActions.StoreDeprecatedDefaultCapabilityAction,
|
|
142
|
-
type: 'int',
|
|
143
|
-
help: 'Port upon which ChromeDriver will run. If not given, Android driver will pick a random available port.'
|
|
144
|
-
}], [['--chromedriver-executable'], {
|
|
145
|
-
default: null,
|
|
146
|
-
dest: 'chromedriverExecutable',
|
|
147
|
-
action: _argparseActions.StoreDeprecatedDefaultCapabilityAction,
|
|
148
|
-
required: false,
|
|
149
|
-
help: 'ChromeDriver executable full path'
|
|
150
|
-
}], [['--show-config'], {
|
|
151
|
-
default: false,
|
|
152
|
-
dest: 'showConfig',
|
|
153
|
-
action: 'store_true',
|
|
154
|
-
required: false,
|
|
155
|
-
help: 'Show info about the appium server configuration and exit'
|
|
156
|
-
}], [['--no-perms-check'], {
|
|
157
|
-
default: false,
|
|
158
|
-
dest: 'noPermsCheck',
|
|
159
|
-
action: 'store_true',
|
|
160
|
-
required: false,
|
|
161
|
-
help: 'Bypass Appium\'s checks to ensure we can read/write necessary files'
|
|
162
|
-
}], [['--strict-caps'], {
|
|
163
|
-
default: false,
|
|
164
|
-
dest: 'enforceStrictCaps',
|
|
165
|
-
action: 'store_true',
|
|
166
|
-
required: false,
|
|
167
|
-
help: 'Cause sessions to fail if desired caps are sent in that Appium ' + 'does not recognize as valid for the selected device'
|
|
168
|
-
}], [['--tmp'], {
|
|
169
|
-
default: null,
|
|
170
|
-
dest: 'tmpDir',
|
|
171
|
-
required: false,
|
|
172
|
-
help: 'Absolute path to directory Appium can use to manage temporary ' + 'files, like built-in iOS apps it needs to move around. On *nix/Mac ' + 'defaults to /tmp, on Windows defaults to C:\\Windows\\Temp'
|
|
173
|
-
}], [['--trace-dir'], {
|
|
174
|
-
default: null,
|
|
175
|
-
dest: 'traceDir',
|
|
176
|
-
required: false,
|
|
177
|
-
help: 'Absolute path to directory Appium use to save ios instruments ' + 'traces, defaults to <tmp dir>/appium-instruments'
|
|
178
|
-
}], [['--debug-log-spacing'], {
|
|
179
|
-
dest: 'debugLogSpacing',
|
|
180
|
-
default: false,
|
|
181
|
-
action: 'store_true',
|
|
182
|
-
required: false,
|
|
183
|
-
help: 'Add exaggerated spacing in logs to help with visual inspection'
|
|
184
|
-
}], [['--suppress-adb-kill-server'], {
|
|
185
|
-
dest: 'suppressKillServer',
|
|
186
|
-
default: false,
|
|
187
|
-
action: _argparseActions.StoreDeprecatedDefaultCapabilityAction,
|
|
188
|
-
required: false,
|
|
189
|
-
help: '(Android-only) If set, prevents Appium from killing the adb server instance'
|
|
190
|
-
}], [['--long-stacktrace'], {
|
|
191
|
-
dest: 'longStacktrace',
|
|
192
|
-
default: false,
|
|
193
|
-
required: false,
|
|
194
|
-
action: 'store_true',
|
|
195
|
-
help: 'Add long stack traces to log entries. Recommended for debugging only.'
|
|
196
|
-
}], [['--webkit-debug-proxy-port'], {
|
|
197
|
-
default: 27753,
|
|
198
|
-
dest: 'webkitDebugProxyPort',
|
|
199
|
-
action: _argparseActions.StoreDeprecatedDefaultCapabilityAction,
|
|
200
|
-
required: false,
|
|
201
|
-
type: 'int',
|
|
202
|
-
help: '(IOS-only) Local port used for communication with ios-webkit-debug-proxy'
|
|
203
|
-
}], [['--webdriveragent-port'], {
|
|
204
|
-
default: 8100,
|
|
205
|
-
dest: 'wdaLocalPort',
|
|
206
|
-
action: _argparseActions.StoreDeprecatedDefaultCapabilityAction,
|
|
207
|
-
required: false,
|
|
208
|
-
type: 'int',
|
|
209
|
-
help: '(IOS-only, XCUITest-only) Local port used for communication with WebDriverAgent'
|
|
210
|
-
}], [['-dc', _argparseActions.DEFAULT_CAPS_ARG], {
|
|
211
|
-
dest: 'defaultCapabilities',
|
|
212
|
-
default: {},
|
|
213
|
-
type: _parserHelpers.parseDefaultCaps,
|
|
214
|
-
required: false,
|
|
215
|
-
help: 'Set the default desired capabilities, which will be set on each ' + 'session unless overridden by received capabilities. For example: ' + '[ \'{"app": "myapp.app", "deviceName": "iPhone Simulator"}\' ' + '| /path/to/caps.json ]'
|
|
216
|
-
}], [['--relaxed-security'], {
|
|
217
|
-
default: false,
|
|
218
|
-
dest: 'relaxedSecurityEnabled',
|
|
219
|
-
action: 'store_true',
|
|
220
|
-
required: false,
|
|
221
|
-
help: 'Disable additional security checks, so it is possible to use some advanced features, provided ' + 'by drivers supporting this option. Only enable it if all the ' + 'clients are in the trusted network and it\'s not the case if a client could potentially ' + 'break out of the session sandbox. Specific features can be overridden by ' + 'using the --deny-insecure flag'
|
|
222
|
-
}], [['--allow-insecure'], {
|
|
223
|
-
dest: 'allowInsecure',
|
|
224
|
-
default: [],
|
|
225
|
-
type: _parserHelpers.parseSecurityFeatures,
|
|
226
|
-
required: false,
|
|
227
|
-
help: 'Set which insecure features are allowed to run in this server\'s sessions. ' + 'Features are defined on a driver level; see documentation for more details. ' + 'This should be either a comma-separated list of feature names, or a path to ' + 'a file where each feature name is on a line. Note that features defined via ' + '--deny-insecure will be disabled, even if also listed here.'
|
|
228
|
-
}], [['--deny-insecure'], {
|
|
229
|
-
dest: 'denyInsecure',
|
|
230
|
-
default: [],
|
|
231
|
-
type: _parserHelpers.parseSecurityFeatures,
|
|
232
|
-
required: false,
|
|
233
|
-
help: 'Set which insecure features are not allowed to run in this server\'s sessions. ' + 'Features are defined on a driver level; see documentation for more details. ' + 'This should be either a comma-separated list of feature names, or a path to ' + 'a file where each feature name is on a line. Features listed here will not be ' + 'enabled even if also listed in --allow-insecure, and even if --relaxed-security ' + 'is turned on. For example: execute_driver_script,adb_shell'
|
|
234
|
-
}]];
|
|
235
|
-
exports.serverArgs = serverArgs;
|
|
236
|
-
const globalExtensionArgs = [[['--json'], {
|
|
237
|
-
required: false,
|
|
238
|
-
default: false,
|
|
239
|
-
action: 'store_true',
|
|
240
|
-
help: 'Use JSON for output format',
|
|
241
|
-
dest: 'json'
|
|
242
|
-
}]];
|
|
243
|
-
const extensionArgs = {
|
|
244
|
-
[_extensionConfig.DRIVER_TYPE]: {},
|
|
245
|
-
[_extensionConfig.PLUGIN_TYPE]: {}
|
|
246
|
-
};
|
|
247
|
-
exports.extensionArgs = extensionArgs;
|
|
248
|
-
|
|
13
|
+
/**
|
|
14
|
+
* This is necessary because we pass the array into `argparse`. `argparse` is bad and mutates things. We don't want that.
|
|
15
|
+
* Bad `argparse`! Bad!
|
|
16
|
+
*/
|
|
17
|
+
const INSTALL_TYPES_ARRAY = [...extension_config_1.INSTALL_TYPES];
|
|
18
|
+
/** @type {Set<ExtensionType>} */
|
|
19
|
+
const EXTENSION_TYPES = new Set([constants_1.DRIVER_TYPE, constants_1.PLUGIN_TYPE]);
|
|
20
|
+
// this set of args works for both drivers and plugins ('extensions')
|
|
21
|
+
/** @type {ArgumentDefinitions} */
|
|
22
|
+
const globalExtensionArgs = new Map([
|
|
23
|
+
[
|
|
24
|
+
['--json'],
|
|
25
|
+
{
|
|
26
|
+
required: false,
|
|
27
|
+
default: false,
|
|
28
|
+
action: 'store_true',
|
|
29
|
+
help: 'Use JSON for output format',
|
|
30
|
+
dest: 'json',
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
]);
|
|
34
|
+
/**
|
|
35
|
+
* Builds a Record of extension types to a Record of subcommands to their argument definitions
|
|
36
|
+
*/
|
|
37
|
+
const getExtensionArgs = lodash_1.default.memoize(function getExtensionArgs() {
|
|
38
|
+
const extensionArgs = {};
|
|
39
|
+
for (const type of EXTENSION_TYPES) {
|
|
40
|
+
extensionArgs[type] = {
|
|
41
|
+
[constants_1.EXT_SUBCOMMAND_LIST]: makeListArgs(type),
|
|
42
|
+
[constants_1.EXT_SUBCOMMAND_INSTALL]: makeInstallArgs(type),
|
|
43
|
+
[constants_1.EXT_SUBCOMMAND_UNINSTALL]: makeUninstallArgs(type),
|
|
44
|
+
[constants_1.EXT_SUBCOMMAND_UPDATE]: makeUpdateArgs(type),
|
|
45
|
+
[constants_1.EXT_SUBCOMMAND_RUN]: makeRunArgs(type),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return /** @type {Record<ExtensionType, Record<import('appium/types').CliExtensionSubcommand,ArgumentDefinitions>>} */ (extensionArgs);
|
|
49
|
+
});
|
|
50
|
+
exports.getExtensionArgs = getExtensionArgs;
|
|
51
|
+
/**
|
|
52
|
+
* Makes the opts for the `list` subcommand for each extension type.
|
|
53
|
+
* @param {ExtensionType} type
|
|
54
|
+
* @returns {ArgumentDefinitions}
|
|
55
|
+
*/
|
|
249
56
|
function makeListArgs(type) {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
57
|
+
return new Map([
|
|
58
|
+
...globalExtensionArgs,
|
|
59
|
+
[
|
|
60
|
+
['--installed'],
|
|
61
|
+
{
|
|
62
|
+
required: false,
|
|
63
|
+
default: false,
|
|
64
|
+
action: 'store_true',
|
|
65
|
+
help: `List only installed ${type}s`,
|
|
66
|
+
dest: 'showInstalled',
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
[
|
|
70
|
+
['--updates'],
|
|
71
|
+
{
|
|
72
|
+
required: false,
|
|
73
|
+
default: false,
|
|
74
|
+
action: 'store_true',
|
|
75
|
+
help: 'Show information about newer versions',
|
|
76
|
+
dest: 'showUpdates',
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
[
|
|
80
|
+
['--verbose'],
|
|
81
|
+
{
|
|
82
|
+
required: false,
|
|
83
|
+
default: false,
|
|
84
|
+
action: 'store_true',
|
|
85
|
+
help: 'Show more information about each extension',
|
|
86
|
+
dest: 'verbose',
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
]);
|
|
263
90
|
}
|
|
264
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Makes the opts for the `install` subcommand for each extension type
|
|
93
|
+
* @param {ExtensionType} type
|
|
94
|
+
* @returns {ArgumentDefinitions}
|
|
95
|
+
*/
|
|
265
96
|
function makeInstallArgs(type) {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
97
|
+
return new Map([
|
|
98
|
+
...globalExtensionArgs,
|
|
99
|
+
[
|
|
100
|
+
[type],
|
|
101
|
+
{
|
|
102
|
+
type: 'str',
|
|
103
|
+
help: `Name of the ${type} to install, for example: ` + type === constants_1.DRIVER_TYPE
|
|
104
|
+
? DRIVER_EXAMPLE
|
|
105
|
+
: PLUGIN_EXAMPLE,
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
[
|
|
109
|
+
['--source'],
|
|
110
|
+
{
|
|
111
|
+
required: false,
|
|
112
|
+
default: null,
|
|
113
|
+
choices: INSTALL_TYPES_ARRAY,
|
|
114
|
+
help: `Where to look for the ${type} if it is not one of Appium's verified ` +
|
|
115
|
+
`${type}s. Possible values: ${INSTALL_TYPES_ARRAY.join(', ')}`,
|
|
116
|
+
dest: 'installType',
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
[
|
|
120
|
+
['--package'],
|
|
121
|
+
{
|
|
122
|
+
required: false,
|
|
123
|
+
default: null,
|
|
124
|
+
type: 'str',
|
|
125
|
+
help: `If installing from Git or GitHub, the package name, as defined in the plugin's ` +
|
|
126
|
+
`package.json file in the "name" field, cannot be determined automatically, and ` +
|
|
127
|
+
`should be reported here, otherwise the install will probably fail.`,
|
|
128
|
+
dest: 'packageName',
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
]);
|
|
282
132
|
}
|
|
283
|
-
|
|
133
|
+
/**
|
|
134
|
+
* Makes the opts for the `uninstall` subcommand for each extension type
|
|
135
|
+
* @param {ExtensionType} type
|
|
136
|
+
* @returns {ArgumentDefinitions}
|
|
137
|
+
*/
|
|
284
138
|
function makeUninstallArgs(type) {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
139
|
+
return new Map([
|
|
140
|
+
...globalExtensionArgs,
|
|
141
|
+
[
|
|
142
|
+
[type],
|
|
143
|
+
{
|
|
144
|
+
type: 'str',
|
|
145
|
+
help: 'Name of the driver to uninstall, for example: ' + type === constants_1.DRIVER_TYPE
|
|
146
|
+
? DRIVER_EXAMPLE
|
|
147
|
+
: PLUGIN_EXAMPLE,
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
]);
|
|
289
151
|
}
|
|
290
|
-
|
|
152
|
+
/**
|
|
153
|
+
* Makes the opts for the `update` subcommand for each extension type
|
|
154
|
+
* @param {ExtensionType} type
|
|
155
|
+
* @returns {ArgumentDefinitions}
|
|
156
|
+
*/
|
|
291
157
|
function makeUpdateArgs(type) {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
158
|
+
return new Map([
|
|
159
|
+
...globalExtensionArgs,
|
|
160
|
+
[
|
|
161
|
+
[type],
|
|
162
|
+
{
|
|
163
|
+
type: 'str',
|
|
164
|
+
help: `Name of the ${type} to update, or the word "installed" to update all installed ` +
|
|
165
|
+
`${type}s. To see available updates, run "appium ${type} list --installed --updates". ` +
|
|
166
|
+
'For example: ' +
|
|
167
|
+
type ===
|
|
168
|
+
constants_1.DRIVER_TYPE
|
|
169
|
+
? DRIVER_EXAMPLE
|
|
170
|
+
: PLUGIN_EXAMPLE,
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
[
|
|
174
|
+
['--unsafe'],
|
|
175
|
+
{
|
|
176
|
+
required: false,
|
|
177
|
+
default: false,
|
|
178
|
+
action: 'store_true',
|
|
179
|
+
help: `Include updates that might have a new major revision, and potentially include ` +
|
|
180
|
+
`breaking changes`,
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
]);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Makes the opts for the `run` subcommand for each extension type
|
|
187
|
+
* @param {ExtensionType} type
|
|
188
|
+
* @returns {ArgumentDefinitions}
|
|
189
|
+
*/
|
|
190
|
+
function makeRunArgs(type) {
|
|
191
|
+
return new Map([
|
|
192
|
+
...globalExtensionArgs,
|
|
193
|
+
[
|
|
194
|
+
[type],
|
|
195
|
+
{
|
|
196
|
+
type: 'str',
|
|
197
|
+
help: `Name of the ${type} to run a script from, for example: ` + type === constants_1.DRIVER_TYPE
|
|
198
|
+
? DRIVER_EXAMPLE
|
|
199
|
+
: PLUGIN_EXAMPLE,
|
|
200
|
+
},
|
|
201
|
+
],
|
|
202
|
+
[
|
|
203
|
+
['scriptName'],
|
|
204
|
+
{
|
|
205
|
+
default: null,
|
|
206
|
+
type: 'str',
|
|
207
|
+
help: `Name of the script to run from the ${type}. The script name must be a key ` +
|
|
208
|
+
`inside the "appium.scripts" field inside the ${type}'s "package.json" file`,
|
|
209
|
+
},
|
|
210
|
+
],
|
|
211
|
+
]);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Derives the options for the `server` command from the schema, and adds the arguments
|
|
215
|
+
* which are disallowed in the config file.
|
|
216
|
+
* @returns {ArgumentDefinitions}
|
|
217
|
+
*/
|
|
218
|
+
function getServerArgs() {
|
|
219
|
+
return new Map([...(0, cli_args_1.toParserArgs)(), ...serverArgsDisallowedInConfig]);
|
|
301
220
|
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvYXJncy5qcyJdLCJuYW1lcyI6WyJEUklWRVJfRVhBTVBMRSIsIlBMVUdJTl9FWEFNUExFIiwiVVNFX0FMTF9QTFVHSU5TIiwic2hhcmVkQXJncyIsInJlcXVpcmVkIiwiZGVmYXVsdCIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fSE9NRSIsIkRFRkFVTFRfQVBQSVVNX0hPTUUiLCJoZWxwIiwiZGVzdCIsImFjdGlvbiIsInNlcnZlckFyZ3MiLCJ0eXBlIiwicGFyc2VQbHVnaW5OYW1lcyIsIlN0b3JlRGVwcmVjYXRlZERlZmF1bHRDYXBhYmlsaXR5QWN0aW9uIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJjaG9pY2VzIiwiREVGQVVMVF9DQVBTX0FSRyIsInBhcnNlRGVmYXVsdENhcHMiLCJwYXJzZVNlY3VyaXR5RmVhdHVyZXMiLCJnbG9iYWxFeHRlbnNpb25BcmdzIiwiZXh0ZW5zaW9uQXJncyIsIkRSSVZFUl9UWVBFIiwiUExVR0lOX1RZUEUiLCJtYWtlTGlzdEFyZ3MiLCJtYWtlSW5zdGFsbEFyZ3MiLCJwYXJzZUluc3RhbGxUeXBlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJJTlNUQUxMX1RZUEVTIiwibWFrZVVuaW5zdGFsbEFyZ3MiLCJtYWtlVXBkYXRlQXJncyIsImxpc3QiLCJpbnN0YWxsIiwidW5pbnN0YWxsIiwidXBkYXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxjQUFjLEdBQUcsVUFBdkI7QUFDQSxNQUFNQyxjQUFjLEdBQUcsZUFBdkI7QUFDQSxNQUFNQyxlQUFlLEdBQUcsS0FBeEI7O0FBR0EsTUFBTUMsVUFBVSxHQUFHLENBQ2pCLENBQUMsQ0FBQyxLQUFELEVBQVEsUUFBUixFQUFrQixlQUFsQixDQUFELEVBQXFDO0FBQ25DQyxFQUFBQSxRQUFRLEVBQUUsS0FEeUI7QUFFbkNDLEVBQUFBLE9BQU8sRUFBRUMsT0FBTyxDQUFDQyxHQUFSLENBQVlDLFdBQVosSUFB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RWtCQSxJQUZsQixLQUUyQlUsNEJBRjNCLEdBRXlDeEIsY0FGekMsR0FFMERDO0FBSnpELEdBQVQsQ0FGSyxFQVFMLENBQUMsQ0FBQyxVQUFELENBQUQsRUFBZTtBQUNiRyxJQUFBQSxRQUFRLEVBQUUsS0FERztBQUViQyxJQUFBQSxPQUFPLEVBQUUsS0FGSTtBQUdiTyxJQUFBQSxNQUFNLEVBQUUsWUFISztBQUliRixJQUFBQSxJQUFJLEVBQUcsZ0ZBQUQsR0FDQztBQUxNLEdBQWYsQ0FSSyxDQUFQO0FBZ0JEOztBQUVELEtBQUssTUFBTUksSUFBWCxJQUFtQixDQUFDVSw0QkFBRCxFQUFjQyw0QkFBZCxDQUFuQixFQUErQztBQUM3Q0YsRUFBQUEsYUFBYSxDQUFDVCxJQUFELENBQWIsQ0FBb0JvQixJQUFwQixHQUEyQlIsWUFBWSxDQUFDWixJQUFELENBQXZDO0FBQ0FTLEVBQUFBLGFBQWEsQ0FBQ1QsSUFBRCxDQUFiLENBQW9CcUIsT0FBcEIsR0FBOEJSLGVBQWUsQ0FBQ2IsSUFBRCxDQUE3QztBQUNBUyxFQUFBQSxhQUFhLENBQUNULElBQUQsQ0FBYixDQUFvQnNCLFNBQXBCLEdBQWdDSixpQkFBaUIsQ0FBQ2xCLElBQUQsQ0FBakQ7QUFDQVMsRUFBQUEsYUFBYSxDQUFDVCxJQUFELENBQWIsQ0FBb0J1QixNQUFwQixHQUE2QkosY0FBYyxDQUFDbkIsSUFBRCxDQUEzQztBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVGQVVMVF9CQVNFX1BBVEggfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgcGFyc2VTZWN1cml0eUZlYXR1cmVzLCBwYXJzZURlZmF1bHRDYXBzLCBwYXJzZVBsdWdpbk5hbWVzLCBwYXJzZUluc3RhbGxUeXBlcyB9IGZyb20gJy4vcGFyc2VyLWhlbHBlcnMnO1xuaW1wb3J0IHsgSU5TVEFMTF9UWVBFUywgREVGQVVMVF9BUFBJVU1fSE9NRSwgRFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFIH0gZnJvbSAnLi4vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBERUZBVUxUX0NBUFNfQVJHLCBTdG9yZURlcHJlY2F0ZWREZWZhdWx0Q2FwYWJpbGl0eUFjdGlvbiB9IGZyb20gJy4vYXJncGFyc2UtYWN0aW9ucyc7XG5cbmNvbnN0IERSSVZFUl9FWEFNUExFID0gJ3hjdWl0ZXN0JztcbmNvbnN0IFBMVUdJTl9FWEFNUExFID0gJ2ZpbmRfYnlfaW1hZ2UnO1xuY29uc3QgVVNFX0FMTF9QTFVHSU5TID0gJ2FsbCc7XG5cbi8vIHNoYXJlZEFyZ3Mgd2lsbCBiZSBhZGRlZCB0byBldmVyeSBzdWJjb21tYW5kXG5jb25zdCBzaGFyZWRBcmdzID0gW1xuICBbWyctYWgnLCAnLS1ob21lJywgJy0tYXBwaXVtLWhvbWUnXSwge1xuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0OiBwcm9jZXNzLmVudi5BUFBJVU1fSE9NRSB8fCBERUZBVUxUX0FQUElVTV9IT01FLFxuICAgIGhlbHA6ICdUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIEFwcGl1bSB3aWxsIGtlZXAgaW5zdGFsbGVkIGRyaXZlcnMsIHBsdWdpbnMsIGFuZCBhbnkgb3RoZXIgbWV0YWRhdGEgbmVjZXNzYXJ5IGZvciBpdHMgb3BlcmF0aW9uJyxcbiAgICBkZXN0OiAnYXBwaXVtSG9tZScsXG4gIH1dLFxuXG4gIFtbJy0tbG9nLWZpbHRlcnMnXSwge1xuICAgIGRlc3Q6ICdsb2dGaWx0ZXJzJyxcbiAgICBkZWZhdWx0OiBudWxsLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBhY3Rpb246ICdzdG9yZV90cnVlJyxcbiAgICBoZWxwOiAnU2V0IHRoZSBmdWxsIHBhdGggdG8gYSBKU09OIGZpbGUgY29udGFpbmluZyBvbmUgb3IgbW9yZSBsb2cgZmlsdGVyaW5nIHJ1bGVzJyxcbiAgfV0sXG5dO1xuXG5jb25zdCBzZXJ2ZXJBcmdzID0gW1xuICBbWyctLXNoZWxsJ10sIHtcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogbnVsbCxcbiAgICBoZWxwOiAnRW50ZXIgUkVQTCBtb2RlJyxcbiAgICBhY3Rpb246ICdzdG9yZV90cnVlJyxcbiAgICBkZXN0OiAnc2hlbGwnLFxuICB9XSxcblxuICBbWyctLXBsdWdpbnMnXSwge1xuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0OiBbXSxcbiAgICBoZWxwOiBgQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpbnN0YWxsZWQgcGx1Z2luIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGFjdGl2ZSBmb3IgdGhpcyBgICtcbiAgICAgICAgICBgc2VydmVyLiBUbyBhY3RpdmF0ZSBhbGwgcGx1Z2lucywgeW91IGNhbiB1c2UgdGhlIHNpbmdsZSBzdHJpbmcgXCIke1VTRV9BTExfUExVR0lOU31cIiBgICtcbiAgICAgICAgICBgYXMgdGhlIHZhbHVlIChlLmcuIC0tcGx1Z2lucz0ke1VTRV9BTExfUExVR0lOU30pYCxcbiAgICB0eXBlOiBwYXJzZVBsdWdpbk5hbWVzLFxuICAgIGRlc3Q6ICdwbHVnaW5zJyxcbiAgfV0sXG5cbiAgW1snLS1hbGxvdy1jb3JzJ10sIHtcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gICAgYWN0aW9uOiAnc3RvcmVfdHJ1ZScsXG4gICAgaGVscDogJ1doZXRoZXIgdGhlIEFwcGl1bSBzZXJ2ZXIgc2hvdWxkIGFsbG93IHdlYiBicm93c2VyIGNvbm5lY3Rpb25zIGZyb20gYW55IGhvc3QnLFxuICAgIGRlc3Q6ICdhbGxvd0NvcnMnLFxuICB9XSxcblxuICBbWyctLXJlYm9vdCddLCB7XG4gICAgZGVmYXVsdDogZmFsc2UsXG4gICAgZGVzdDogJ3JlYm9vdCcsXG4gICAgYWN0aW9uOiBTdG9yZURlcHJlY2F0ZWREZWZhdWx0Q2FwYWJpbGl0eUFjdGlvbixcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgaGVscDogJyhBbmRyb2lkLW9ubHkpIHJlYm9vdCBlbXVsYXRvciBhZnRlciBlYWNoIHNlc3Npb24gYW5kIGtpbGwgaXQgYXQgdGhlIGVuZCcsXG4gIH1dLFxuXG4gIFtbJy1hJywgJy0tYWRkcmVzcyddLCB7XG4gICAgZGVmYXVsdDogJzAuMC4wLjAnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnSVAgQWRkcmVzcyB0byBsaXN0ZW4gb24nLFxuICAgIGRlc3Q6ICdhZGRyZXNzJyxcbiAgfV0sXG5cbiAgW1snLXAnLCAnLS1wb3J0J10sIHtcbiAgICBkZWZhdWx0OiA0NzIzLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICB0eXBlOiAnaW50JyxcbiAgICBoZWxwOiAncG9ydCB0byBsaXN0ZW4gb24nLFxuICAgIGRlc3Q6ICdwb3J0JyxcbiAgfV0sXG5cbiAgW1snLXBhJywgJy0tYmFzZS1wYXRoJ10sIHtcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogREVGQVVMVF9CQVNFX1BBVEgsXG4gICAgZGVzdDogJ2Jhc2VQYXRoJyxcbiAgICBoZWxwOiAnQmFzZSBwYXRoIHRvIHVzZSBhcyB0aGUgcHJlZml4IGZvciBhbGwgd2ViZHJpdmVyIHJvdXRlcyBydW5uaW5nICcgK1xuICAgICAgICAgIGBvbiB0aGlzIHNlcnZlcmBcbiAgfV0sXG5cbiAgW1snLWthJywgJy0ta2VlcC1hbGl2ZS10aW1lb3V0J10sIHtcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogbnVsbCxcbiAgICBkZXN0OiAna2VlcEFsaXZlVGltZW91dCcsXG4gICAgdHlwZTogJ2ludCcsXG4gICAgaGVscDogJ051bWJlciBvZiBzZWNvbmRzIHRoZSBBcHBpdW0gc2VydmVyIHNob3VsZCBhcHBseSBhcyBib3RoIHRoZSBrZWVwLWFsaXZlIHRpbWVvdXQgJyArXG4gICAgICAgICAgJ2FuZCB0aGUgY29ubmVjdGlvbiB0aW1lb3V0IGZvciBhbGwgcmVxdWVzdHMuIERlZmF1bHRzIHRvIDYwMCAoMTAgbWludXRlcykuJ1xuICB9XSxcblxuICBbWyctY2EnLCAnLS1jYWxsYmFjay1hZGRyZXNzJ10sIHtcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVzdDogJ2NhbGxiYWNrQWRkcmVzcycsXG4gICAgZGVmYXVsdDogbnVsbCxcbiAgICBoZWxwOiAnY2FsbGJhY2sgSVAgQWRkcmVzcyAoZGVmYXVsdDogc2FtZSBhcyAtLWFkZHJlc3MpJyxcbiAgfV0sXG5cbiAgW1snLWNwJywgJy0tY2FsbGJhY2stcG9ydCddLCB7XG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlc3Q6ICdjYWxsYmFja1BvcnQnLFxuICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgdHlwZTogJ2ludCcsXG4gICAgaGVscDogJ2NhbGxiYWNrIHBvcnQgKGRlZmF1bHQ6IHNhbWUgYXMgcG9ydCknLFxuICB9XSxcblxuICBbWyctLXNlc3Npb24tb3ZlcnJpZGUnXSwge1xuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIGRlc3Q6ICdzZXNzaW9uT3ZlcnJpZGUnLFxuICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnRW5hYmxlcyBzZXNzaW9uIG92ZXJyaWRlIChjbG9iYmVyaW5nKScsXG4gIH1dLFxuXG4gIFtbJy1nJywgJy0tbG9nJ10sIHtcbiAgICBkZWZhdWx0OiBudWxsLFxuICAgIGRlc3Q6ICdsb2dGaWxlJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgaGVscDogJ0Fsc28gc2VuZCBsb2cgb3V0cHV0IHRvIHRoaXMgZmlsZScsXG4gIH1dLFxuXG4gIFtbJy0tbG9nLWxldmVsJ10sIHtcbiAgICBjaG9pY2VzOiBbXG4gICAgICAnaW5mbycsICdpbmZvOmRlYnVnJywgJ2luZm86aW5mbycsICdpbmZvOndhcm4nLCAnaW5mbzplcnJvcicsXG4gICAgICAnd2FybicsICd3YXJuOmRlYnVnJywgJ3dhcm46aW5mbycsICd3YXJuOndhcm4nLCAnd2FybjplcnJvcicsXG4gICAgICAnZXJyb3InLCAnZXJyb3I6ZGVidWcnLCAnZXJyb3I6aW5mbycsICdlcnJvcjp3YXJuJywgJ2Vycm9yOmVycm9yJyxcbiAgICAgICdkZWJ1ZycsICdkZWJ1ZzpkZWJ1ZycsICdkZWJ1ZzppbmZvJywgJ2RlYnVnOndhcm4nLCAnZGVidWc6ZXJyb3InLFxuICAgIF0sXG4gICAgZGVmYXVsdDogJ2RlYnVnJyxcbiAgICBkZXN0OiAnbG9nbGV2ZWwnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnbG9nIGxldmVsOyBkZWZhdWx0IChjb25zb2xlWzpmaWxlXSk6IGRlYnVnWzpkZWJ1Z10nLFxuICB9XSxcblxuICBbWyctLWxvZy10aW1lc3RhbXAnXSwge1xuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnU2hvdyB0aW1lc3RhbXBzIGluIGNvbnNvbGUgb3V0cHV0JyxcbiAgICBhY3Rpb246ICdzdG9yZV90cnVlJyxcbiAgICBkZXN0OiAnbG9nVGltZXN0YW1wJyxcbiAgfV0sXG5cbiAgW1snLS1sb2NhbC10aW1lem9uZSddLCB7XG4gICAgZGVmYXVsdDogZmFsc2UsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGhlbHA6ICdVc2UgbG9jYWwgdGltZXpvbmUgZm9yIHRpbWVzdGFtcHMnLFxuICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgIGRlc3Q6ICdsb2NhbFRpbWV6b25lJyxcbiAgfV0sXG5cbiAgW1snLS1sb2ctbm8tY29sb3JzJ10sIHtcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgaGVscDogJ0RvIG5vdCB1c2UgY29sb3JzIGluIGNvbnNvbGUgb3V0cHV0JyxcbiAgICBhY3Rpb246ICdzdG9yZV90cnVlJyxcbiAgICBkZXN0OiAnbG9nTm9Db2xvcnMnLFxuICB9XSxcblxuICBbWyctRycsICctLXdlYmhvb2snXSwge1xuICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlc3Q6ICd3ZWJob29rJyxcbiAgICBoZWxwOiAnQWxzbyBzZW5kIGxvZyBvdXRwdXQgdG8gdGhpcyBIVFRQIGxpc3RlbmVyLCBmb3IgZXhhbXBsZSBsb2NhbGhvc3Q6OTg3NicsXG4gIH1dLFxuXG4gIFtbJy0tbm9kZWNvbmZpZyddLCB7XG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgZGVzdDogJ25vZGVjb25maWcnLFxuICAgIGhlbHA6ICdDb25maWd1cmF0aW9uIEpTT04gZmlsZSB0byByZWdpc3RlciBhcHBpdW0gd2l0aCBzZWxlbml1bSBncmlkJyxcbiAgfV0sXG5cbiAgW1snLS1jaHJvbWVkcml2ZXItcG9ydCddLCB7XG4gICAgZGVmYXVsdDogbnVsbCxcbiAgICBkZXN0OiAnY2hyb21lRHJpdmVyUG9ydCcsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGFjdGlvbjogU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24sXG4gICAgdHlwZTogJ2ludCcsXG4gICAgaGVscDogJ1BvcnQgdXBvbiB3aGljaCBDaHJvbWVEcml2ZXIgd2lsbCBydW4uIElmIG5vdCBnaXZlbiwgQW5kcm9pZCBkcml2ZXIgd2lsbCBwaWNrIGEgcmFuZG9tIGF2YWlsYWJsZSBwb3J0LicsXG4gIH1dLFxuXG4gIFtbJy0tY2hyb21lZHJpdmVyLWV4ZWN1dGFibGUnXSwge1xuICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgZGVzdDogJ2Nocm9tZWRyaXZlckV4ZWN1dGFibGUnLFxuICAgIGFjdGlvbjogU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24sXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGhlbHA6ICdDaHJvbWVEcml2ZXIgZXhlY3V0YWJsZSBmdWxsIHBhdGgnLFxuICB9XSxcblxuICBbWyctLXNob3ctY29uZmlnJ10sIHtcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICBkZXN0OiAnc2hvd0NvbmZpZycsXG4gICAgYWN0aW9uOiAnc3RvcmVfdHJ1ZScsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGhlbHA6ICdTaG93IGluZm8gYWJvdXQgdGhlIGFwcGl1bSBzZXJ2ZXIgY29uZmlndXJhdGlvbiBhbmQgZXhpdCcsXG4gIH1dLFxuXG4gIFtbJy0tbm8tcGVybXMtY2hlY2snXSwge1xuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIGRlc3Q6ICdub1Blcm1zQ2hlY2snLFxuICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnQnlwYXNzIEFwcGl1bVxcJ3MgY2hlY2tzIHRvIGVuc3VyZSB3ZSBjYW4gcmVhZC93cml0ZSBuZWNlc3NhcnkgZmlsZXMnLFxuICB9XSxcblxuICBbWyctLXN0cmljdC1jYXBzJ10sIHtcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICBkZXN0OiAnZW5mb3JjZVN0cmljdENhcHMnLFxuICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnQ2F1c2Ugc2Vzc2lvbnMgdG8gZmFpbCBpZiBkZXNpcmVkIGNhcHMgYXJlIHNlbnQgaW4gdGhhdCBBcHBpdW0gJyArXG4gICAgICAgICAgJ2RvZXMgbm90IHJlY29nbml6ZSBhcyB2YWxpZCBmb3IgdGhlIHNlbGVjdGVkIGRldmljZScsXG4gIH1dLFxuXG4gIFtbJy0tdG1wJ10sIHtcbiAgICBkZWZhdWx0OiBudWxsLFxuICAgIGRlc3Q6ICd0bXBEaXInLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnQWJzb2x1dGUgcGF0aCB0byBkaXJlY3RvcnkgQXBwaXVtIGNhbiB1c2UgdG8gbWFuYWdlIHRlbXBvcmFyeSAnICtcbiAgICAgICAgICAnZmlsZXMsIGxpa2UgYnVpbHQtaW4gaU9TIGFwcHMgaXQgbmVlZHMgdG8gbW92ZSBhcm91bmQuIE9uICpuaXgvTWFjICcgK1xuICAgICAgICAgICdkZWZhdWx0cyB0byAvdG1wLCBvbiBXaW5kb3dzIGRlZmF1bHRzIHRvIEM6XFxcXFdpbmRvd3NcXFxcVGVtcCcsXG4gIH1dLFxuXG4gIFtbJy0tdHJhY2UtZGlyJ10sIHtcbiAgICBkZWZhdWx0OiBudWxsLFxuICAgIGRlc3Q6ICd0cmFjZURpcicsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGhlbHA6ICdBYnNvbHV0ZSBwYXRoIHRvIGRpcmVjdG9yeSBBcHBpdW0gdXNlIHRvIHNhdmUgaW9zIGluc3RydW1lbnRzICcgK1xuICAgICAgICAgICd0cmFjZXMsIGRlZmF1bHRzIHRvIDx0bXAgZGlyPi9hcHBpdW0taW5zdHJ1bWVudHMnLFxuICB9XSxcblxuICBbWyctLWRlYnVnLWxvZy1zcGFjaW5nJ10sIHtcbiAgICBkZXN0OiAnZGVidWdMb2dTcGFjaW5nJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICBhY3Rpb246ICdzdG9yZV90cnVlJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgaGVscDogJ0FkZCBleGFnZ2VyYXRlZCBzcGFjaW5nIGluIGxvZ3MgdG8gaGVscCB3aXRoIHZpc3VhbCBpbnNwZWN0aW9uJyxcbiAgfV0sXG5cbiAgW1snLS1zdXBwcmVzcy1hZGIta2lsbC1zZXJ2ZXInXSwge1xuICAgIGRlc3Q6ICdzdXBwcmVzc0tpbGxTZXJ2ZXInLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIGFjdGlvbjogU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24sXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGhlbHA6ICcoQW5kcm9pZC1vbmx5KSBJZiBzZXQsIHByZXZlbnRzIEFwcGl1bSBmcm9tIGtpbGxpbmcgdGhlIGFkYiBzZXJ2ZXIgaW5zdGFuY2UnLFxuICB9XSxcblxuICBbWyctLWxvbmctc3RhY2t0cmFjZSddLCB7XG4gICAgZGVzdDogJ2xvbmdTdGFja3RyYWNlJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgYWN0aW9uOiAnc3RvcmVfdHJ1ZScsXG4gICAgaGVscDogJ0FkZCBsb25nIHN0YWNrIHRyYWNlcyB0byBsb2cgZW50cmllcy4gUmVjb21tZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LicsXG4gIH1dLFxuXG4gIFtbJy0td2Via2l0LWRlYnVnLXByb3h5LXBvcnQnXSwge1xuICAgIGRlZmF1bHQ6IDI3NzUzLFxuICAgIGRlc3Q6ICd3ZWJraXREZWJ1Z1Byb3h5UG9ydCcsXG4gICAgYWN0aW9uOiBTdG9yZURlcHJlY2F0ZWREZWZhdWx0Q2FwYWJpbGl0eUFjdGlvbixcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgdHlwZTogJ2ludCcsXG4gICAgaGVscDogJyhJT1Mtb25seSkgTG9jYWwgcG9ydCB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggaW9zLXdlYmtpdC1kZWJ1Zy1wcm94eSdcbiAgfV0sXG5cbiAgW1snLS13ZWJkcml2ZXJhZ2VudC1wb3J0J10sIHtcbiAgICBkZWZhdWx0OiA4MTAwLFxuICAgIGRlc3Q6ICd3ZGFMb2NhbFBvcnQnLFxuICAgIGFjdGlvbjogU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24sXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHR5cGU6ICdpbnQnLFxuICAgIGhlbHA6ICcoSU9TLW9ubHksIFhDVUlUZXN0LW9ubHkpIExvY2FsIHBvcnQgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFdlYkRyaXZlckFnZW50J1xuICB9XSxcblxuICBbWyctZGMnLCBERUZBVUxUX0NBUFNfQVJHXSwge1xuICAgIGRlc3Q6ICdkZWZhdWx0Q2FwYWJpbGl0aWVzJyxcbiAgICBkZWZhdWx0OiB7fSxcbiAgICB0eXBlOiBwYXJzZURlZmF1bHRDYXBzLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnU2V0IHRoZSBkZWZhdWx0IGRlc2lyZWQgY2FwYWJpbGl0aWVzLCB3aGljaCB3aWxsIGJlIHNldCBvbiBlYWNoICcgK1xuICAgICAgICAgICdzZXNzaW9uIHVubGVzcyBvdmVycmlkZGVuIGJ5IHJlY2VpdmVkIGNhcGFiaWxpdGllcy4gRm9yIGV4YW1wbGU6ICcgK1xuICAgICAgICAgICdbIFxcJ3tcImFwcFwiOiBcIm15YXBwLmFwcFwiLCBcImRldmljZU5hbWVcIjogXCJpUGhvbmUgU2ltdWxhdG9yXCJ9XFwnICcgK1xuICAgICAgICAgICd8IC9wYXRoL3RvL2NhcHMuanNvbiBdJ1xuICB9XSxcblxuICBbWyctLXJlbGF4ZWQtc2VjdXJpdHknXSwge1xuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIGRlc3Q6ICdyZWxheGVkU2VjdXJpdHlFbmFibGVkJyxcbiAgICBhY3Rpb246ICdzdG9yZV90cnVlJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgaGVscDogJ0Rpc2FibGUgYWRkaXRpb25hbCBzZWN1cml0eSBjaGVja3MsIHNvIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBzb21lIGFkdmFuY2VkIGZlYXR1cmVzLCBwcm92aWRlZCAnICtcbiAgICAgICAgICAnYnkgZHJpdmVycyBzdXBwb3J0aW5nIHRoaXMgb3B0aW9uLiBPbmx5IGVuYWJsZSBpdCBpZiBhbGwgdGhlICcgK1xuICAgICAgICAgICdjbGllbnRzIGFyZSBpbiB0aGUgdHJ1c3RlZCBuZXR3b3JrIGFuZCBpdFxcJ3Mgbm90IHRoZSBjYXNlIGlmIGEgY2xpZW50IGNvdWxkIHBvdGVudGlhbGx5ICcgK1xuICAgICAgICAgICdicmVhayBvdXQgb2YgdGhlIHNlc3Npb24gc2FuZGJveC4gU3BlY2lmaWMgZmVhdHVyZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgJyArXG4gICAgICAgICAgJ3VzaW5nIHRoZSAtLWRlbnktaW5zZWN1cmUgZmxhZycsXG4gIH1dLFxuXG4gIFtbJy0tYWxsb3ctaW5zZWN1cmUnXSwge1xuICAgIGRlc3Q6ICdhbGxvd0luc2VjdXJlJyxcbiAgICBkZWZhdWx0OiBbXSxcbiAgICB0eXBlOiBwYXJzZVNlY3VyaXR5RmVhdHVyZXMsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGhlbHA6ICdTZXQgd2hpY2ggaW5zZWN1cmUgZmVhdHVyZXMgYXJlIGFsbG93ZWQgdG8gcnVuIGluIHRoaXMgc2VydmVyXFwncyBzZXNzaW9ucy4gJyArXG4gICAgICAgICAgJ0ZlYXR1cmVzIGFyZSBkZWZpbmVkIG9uIGEgZHJpdmVyIGxldmVsOyBzZWUgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLiAnICtcbiAgICAgICAgICAnVGhpcyBzaG91bGQgYmUgZWl0aGVyIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZmVhdHVyZSBuYW1lcywgb3IgYSBwYXRoIHRvICcgK1xuICAgICAgICAgICdhIGZpbGUgd2hlcmUgZWFjaCBmZWF0dXJlIG5hbWUgaXMgb24gYSBsaW5lLiBOb3RlIHRoYXQgZmVhdHVyZXMgZGVmaW5lZCB2aWEgJyArXG4gICAgICAgICAgJy0tZGVueS1pbnNlY3VyZSB3aWxsIGJlIGRpc2FibGVkLCBldmVuIGlmIGFsc28gbGlzdGVkIGhlcmUuJyxcbiAgfV0sXG5cbiAgW1snLS1kZW55LWluc2VjdXJlJ10sIHtcbiAgICBkZXN0OiAnZGVueUluc2VjdXJlJyxcbiAgICBkZWZhdWx0OiBbXSxcbiAgICB0eXBlOiBwYXJzZVNlY3VyaXR5RmVhdHVyZXMsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGhlbHA6ICdTZXQgd2hpY2ggaW5zZWN1cmUgZmVhdHVyZXMgYXJlIG5vdCBhbGxvd2VkIHRvIHJ1biBpbiB0aGlzIHNlcnZlclxcJ3Mgc2Vzc2lvbnMuICcgK1xuICAgICAgICAgICdGZWF0dXJlcyBhcmUgZGVmaW5lZCBvbiBhIGRyaXZlciBsZXZlbDsgc2VlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy4gJyArXG4gICAgICAgICAgJ1RoaXMgc2hvdWxkIGJlIGVpdGhlciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZlYXR1cmUgbmFtZXMsIG9yIGEgcGF0aCB0byAnICtcbiAgICAgICAgICAnYSBmaWxlIHdoZXJlIGVhY2ggZmVhdHVyZSBuYW1lIGlzIG9uIGEgbGluZS4gRmVhdHVyZXMgbGlzdGVkIGhlcmUgd2lsbCBub3QgYmUgJyArXG4gICAgICAgICAgJ2VuYWJsZWQgZXZlbiBpZiBhbHNvIGxpc3RlZCBpbiAtLWFsbG93LWluc2VjdXJlLCBhbmQgZXZlbiBpZiAtLXJlbGF4ZWQtc2VjdXJpdHkgJyArXG4gICAgICAgICAgJ2lzIHR1cm5lZCBvbi4gRm9yIGV4YW1wbGU6IGV4ZWN1dGVfZHJpdmVyX3NjcmlwdCxhZGJfc2hlbGwnLFxuICB9XSxcbl07XG5cbi8vIHRoaXMgc2V0IG9mIGFyZ3Mgd29ya3MgZm9yIGJvdGggZHJpdmVycyBhbmQgcGx1Z2lucyAoJ2V4dGVuc2lvbnMnKVxuY29uc3QgZ2xvYmFsRXh0ZW5zaW9uQXJncyA9IFtcbiAgW1snLS1qc29uJ10sIHtcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gICAgYWN0aW9uOiAnc3RvcmVfdHJ1ZScsXG4gICAgaGVscDogJ1VzZSBKU09OIGZvciBvdXRwdXQgZm9ybWF0JyxcbiAgICBkZXN0OiAnanNvbidcbiAgfV1cbl07XG5cbmNvbnN0IGV4dGVuc2lvbkFyZ3MgPSB7W0RSSVZFUl9UWVBFXToge30sIFtQTFVHSU5fVFlQRV06IHt9fTtcblxuZnVuY3Rpb24gbWFrZUxpc3RBcmdzICh0eXBlKSB7XG4gIHJldHVybiBbXG4gICAgLi4uZ2xvYmFsRXh0ZW5zaW9uQXJncyxcbiAgICBbWyctLWluc3RhbGxlZCddLCB7XG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgICAgaGVscDogYExpc3Qgb25seSBpbnN0YWxsZWQgJHt0eXBlfXNgLFxuICAgICAgZGVzdDogJ3Nob3dJbnN0YWxsZWQnXG4gICAgfV0sXG4gICAgW1snLS11cGRhdGVzJ10sIHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgYWN0aW9uOiAnc3RvcmVfdHJ1ZScsXG4gICAgICBoZWxwOiAnU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBuZXdlciB2ZXJzaW9ucycsXG4gICAgICBkZXN0OiAnc2hvd1VwZGF0ZXMnXG4gICAgfV1cbiAgXTtcbn1cblxuXG5mdW5jdGlvbiBtYWtlSW5zdGFsbEFyZ3MgKHR5cGUpIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtbdHlwZV0sIHtcbiAgICAgIHR5cGU6ICdzdHInLFxuICAgICAgaGVscDogYE5hbWUgb2YgdGhlICR7dHlwZX0gdG8gaW5zdGFsbCwgZm9yIGV4YW1wbGU6IGAgK1xuICAgICAgICAgICAgdHlwZSA9PT0gRFJJVkVSX1RZUEUgPyBEUklWRVJfRVhBTVBMRSA6IFBMVUdJTl9FWEFNUExFLFxuICAgIH1dLFxuICAgIFtbJy0tc291cmNlJ10sIHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB0eXBlOiBwYXJzZUluc3RhbGxUeXBlcyxcbiAgICAgIGhlbHA6IGBXaGVyZSB0byBsb29rIGZvciB0aGUgJHt0eXBlfSBpZiBpdCBpcyBub3Qgb25lIG9mIEFwcGl1bSdzIHZlcmlmaWVkIGAgK1xuICAgICAgICAgICAgYCR7dHlwZX1zLiBQb3NzaWJsZSB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkoSU5TVEFMTF9UWVBFUyl9YCxcbiAgICAgIGRlc3Q6ICdpbnN0YWxsVHlwZSdcbiAgICB9XSxcbiAgICBbWyctLXBhY2thZ2UnXSwge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIHR5cGU6ICdzdHInLFxuICAgICAgaGVscDogYElmIGluc3RhbGxpbmcgZnJvbSBHaXQgb3IgR2l0SHViLCB0aGUgcGFja2FnZSBuYW1lLCBhcyBkZWZpbmVkIGluIHRoZSBwbHVnaW4ncyBgICtcbiAgICAgICAgICAgIGBwYWNrYWdlLmpzb24gZmlsZSBpbiB0aGUgXCJuYW1lXCIgZmllbGQsIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHksIGFuZCBgICtcbiAgICAgICAgICAgIGBzaG91bGQgYmUgcmVwb3J0ZWQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBpbnN0YWxsIHdpbGwgcHJvYmFibHkgZmFpbC5gLFxuICAgICAgZGVzdDogJ3BhY2thZ2VOYW1lJyxcbiAgICB9XSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gbWFrZVVuaW5zdGFsbEFyZ3MgKHR5cGUpIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtbdHlwZV0sIHtcbiAgICAgIHR5cGU6ICdzdHInLFxuICAgICAgaGVscDogJ05hbWUgb2YgdGhlIGRyaXZlciB0byB1bmluc3RhbGwsIGZvciBleGFtcGxlOiAnICtcbiAgICAgICAgICAgIHR5cGUgPT09IERSSVZFUl9UWVBFID8gRFJJVkVSX0VYQU1QTEUgOiBQTFVHSU5fRVhBTVBMRVxuICAgIH1dLFxuICBdO1xufVxuXG5mdW5jdGlvbiBtYWtlVXBkYXRlQXJncyAodHlwZSkge1xuICByZXR1cm4gW1xuICAgIC4uLmdsb2JhbEV4dGVuc2lvbkFyZ3MsXG4gICAgW1t0eXBlXSwge1xuICAgICAgdHlwZTogJ3N0cicsXG4gICAgICBoZWxwOiBgTmFtZSBvZiB0aGUgJHt0eXBlfSB0byB1cGRhdGUsIG9yIHRoZSB3b3JkIFwiaW5zdGFsbGVkXCIgdG8gdXBkYXRlIGFsbCBpbnN0YWxsZWQgYCArXG4gICAgICAgICAgICBgJHt0eXBlfXMuIFRvIHNlZSBhdmFpbGFibGUgdXBkYXRlcywgcnVuIFwiYXBwaXVtICR7dHlwZX0gbGlzdCAtLWluc3RhbGxlZCAtLXVwZGF0ZXNcIi4gYCArXG4gICAgICAgICAgICAnRm9yIGV4YW1wbGU6ICcgKyB0eXBlID09PSBEUklWRVJfVFlQRSA/IERSSVZFUl9FWEFNUExFIDogUExVR0lOX0VYQU1QTEUsXG4gICAgfV0sXG4gICAgW1snLS11bnNhZmUnXSwge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBhY3Rpb246ICdzdG9yZV90cnVlJyxcbiAgICAgIGhlbHA6IGBJbmNsdWRlIHVwZGF0ZXMgdGhhdCBtaWdodCBoYXZlIGEgbmV3IG1ham9yIHJldmlzaW9uLCBhbmQgcG90ZW50aWFsbHkgaW5jbHVkZSBgICtcbiAgICAgICAgICAgIGBicmVha2luZyBjaGFuZ2VzYCxcbiAgICB9XSxcbiAgXTtcbn1cblxuZm9yIChjb25zdCB0eXBlIG9mIFtEUklWRVJfVFlQRSwgUExVR0lOX1RZUEVdKSB7XG4gIGV4dGVuc2lvbkFyZ3NbdHlwZV0ubGlzdCA9IG1ha2VMaXN0QXJncyh0eXBlKTtcbiAgZXh0ZW5zaW9uQXJnc1t0eXBlXS5pbnN0YWxsID0gbWFrZUluc3RhbGxBcmdzKHR5cGUpO1xuICBleHRlbnNpb25BcmdzW3R5cGVdLnVuaW5zdGFsbCA9IG1ha2VVbmluc3RhbGxBcmdzKHR5cGUpO1xuICBleHRlbnNpb25BcmdzW3R5cGVdLnVwZGF0ZSA9IG1ha2VVcGRhdGVBcmdzKHR5cGUpO1xufVxuXG5leHBvcnQge1xuICBzaGFyZWRBcmdzLFxuICBzZXJ2ZXJBcmdzLFxuICBleHRlbnNpb25BcmdzLFxuICBVU0VfQUxMX1BMVUdJTlMsXG59O1xuIl0sImZpbGUiOiJsaWIvY2xpL2FyZ3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
221
|
+
exports.getServerArgs = getServerArgs;
|
|
222
|
+
/**
|
|
223
|
+
* These don't make sense in the context of a config file for obvious reasons.
|
|
224
|
+
* @type {ArgumentDefinitions}
|
|
225
|
+
*/
|
|
226
|
+
const serverArgsDisallowedInConfig = new Map([
|
|
227
|
+
[
|
|
228
|
+
['--shell'],
|
|
229
|
+
{
|
|
230
|
+
required: false,
|
|
231
|
+
help: 'Enter REPL mode',
|
|
232
|
+
action: 'store_const',
|
|
233
|
+
const: true,
|
|
234
|
+
dest: 'shell',
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
[
|
|
238
|
+
['--show-build-info'],
|
|
239
|
+
{
|
|
240
|
+
dest: 'showBuildInfo',
|
|
241
|
+
action: 'store_const',
|
|
242
|
+
const: true,
|
|
243
|
+
required: false,
|
|
244
|
+
help: 'Show info about the Appium build and exit',
|
|
245
|
+
},
|
|
246
|
+
],
|
|
247
|
+
[
|
|
248
|
+
['--show-config'],
|
|
249
|
+
{
|
|
250
|
+
dest: 'showConfig',
|
|
251
|
+
action: 'store_const',
|
|
252
|
+
const: true,
|
|
253
|
+
required: false,
|
|
254
|
+
help: 'Show the current Appium configuration and exit',
|
|
255
|
+
},
|
|
256
|
+
],
|
|
257
|
+
[
|
|
258
|
+
['--config'],
|
|
259
|
+
{
|
|
260
|
+
dest: 'configFile',
|
|
261
|
+
type: 'str',
|
|
262
|
+
required: false,
|
|
263
|
+
help: 'Explicit path to Appium configuration file',
|
|
264
|
+
},
|
|
265
|
+
],
|
|
266
|
+
]);
|
|
267
|
+
/**
|
|
268
|
+
* @typedef {import('@appium/types').ExtensionType} ExtensionType
|
|
269
|
+
*/
|
|
270
|
+
/**
|
|
271
|
+
* A tuple of argument aliases and argument options
|
|
272
|
+
* @typedef {Map<[name: string]|[name: string, alias: string],import('argparse').ArgumentOptions>} ArgumentDefinitions
|
|
273
|
+
*/
|
|
274
|
+
//# sourceMappingURL=args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../lib/cli/args.js"],"names":[],"mappings":"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"}
|