appium 2.0.0-beta.2 → 2.0.0-beta.20
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 +9 -9
- package/build/lib/appium-config.schema.json +0 -0
- package/build/lib/appium.js +157 -53
- package/build/lib/cli/argparse-actions.js +104 -0
- package/build/lib/cli/args.js +115 -279
- package/build/lib/cli/driver-command.js +11 -1
- package/build/lib/cli/extension-command.js +60 -8
- package/build/lib/cli/extension.js +30 -7
- package/build/lib/cli/npm.js +17 -14
- package/build/lib/cli/parser.js +152 -89
- package/build/lib/cli/plugin-command.js +11 -1
- package/build/lib/cli/utils.js +29 -3
- package/build/lib/config-file.js +141 -0
- package/build/lib/config.js +76 -61
- package/build/lib/driver-config.js +42 -19
- package/build/lib/drivers.js +8 -4
- package/build/lib/ext-config-io.js +165 -0
- package/build/lib/extension-config.js +130 -61
- package/build/lib/grid-register.js +22 -24
- package/build/lib/logger.js +3 -3
- package/build/lib/logsink.js +11 -13
- package/build/lib/main.js +197 -77
- package/build/lib/plugin-config.js +20 -10
- package/build/lib/plugins.js +4 -2
- package/build/lib/schema/appium-config-schema.js +252 -0
- package/build/lib/schema/arg-spec.js +120 -0
- package/build/lib/schema/cli-args.js +173 -0
- package/build/lib/schema/cli-transformers.js +76 -0
- package/build/lib/schema/index.js +36 -0
- package/build/lib/schema/keywords.js +62 -0
- package/build/lib/schema/schema.js +357 -0
- package/build/lib/utils.js +44 -99
- package/lib/appium-config.schema.json +277 -0
- package/lib/appium.js +201 -65
- package/lib/cli/argparse-actions.js +77 -0
- package/lib/cli/args.js +174 -375
- package/lib/cli/driver-command.js +4 -0
- package/lib/cli/extension-command.js +70 -5
- package/lib/cli/extension.js +25 -5
- package/lib/cli/npm.js +18 -12
- package/lib/cli/parser.js +254 -79
- package/lib/cli/plugin-command.js +4 -0
- package/lib/cli/utils.js +21 -1
- package/lib/config-file.js +227 -0
- package/lib/config.js +109 -62
- package/lib/driver-config.js +66 -11
- package/lib/drivers.js +4 -1
- package/lib/ext-config-io.js +287 -0
- package/lib/extension-config.js +225 -67
- package/lib/grid-register.js +27 -24
- package/lib/logger.js +1 -1
- package/lib/logsink.js +10 -7
- package/lib/main.js +211 -77
- package/lib/plugin-config.js +34 -5
- package/lib/plugins.js +1 -0
- package/lib/schema/appium-config-schema.js +286 -0
- package/lib/schema/arg-spec.js +218 -0
- package/lib/schema/cli-args.js +273 -0
- package/lib/schema/cli-transformers.js +123 -0
- package/lib/schema/index.js +2 -0
- package/lib/schema/keywords.js +119 -0
- package/lib/schema/schema.js +577 -0
- package/lib/utils.js +42 -88
- package/package.json +55 -80
- package/postinstall.js +71 -0
- package/types/appium-config.d.ts +197 -0
- package/types/types.d.ts +201 -0
- package/CHANGELOG.md +0 -3515
- package/build/lib/cli/parser-helpers.js +0 -82
- package/lib/cli/parser-helpers.js +0 -79
package/build/lib/cli/parser.js
CHANGED
|
@@ -5,130 +5,193 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
+
exports.default = exports.SERVER_SUBCOMMAND = exports.ArgParser = void 0;
|
|
8
9
|
exports.getParser = getParser;
|
|
9
|
-
exports.getDefaultServerArgs = getDefaultServerArgs;
|
|
10
|
-
exports.default = void 0;
|
|
11
10
|
|
|
12
11
|
require("source-map-support/register");
|
|
13
12
|
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
|
+
var _support = require("@appium/support");
|
|
17
14
|
|
|
18
15
|
var _argparse = require("argparse");
|
|
19
16
|
|
|
20
|
-
var
|
|
17
|
+
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
18
|
+
|
|
19
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
20
|
+
|
|
21
|
+
var _path = _interopRequireDefault(require("path"));
|
|
21
22
|
|
|
22
23
|
var _extensionConfig = require("../extension-config");
|
|
23
24
|
|
|
25
|
+
var _schema = require("../schema");
|
|
26
|
+
|
|
24
27
|
var _utils = require("../utils");
|
|
25
28
|
|
|
26
|
-
|
|
27
|
-
const parser = new _argparse.ArgumentParser({
|
|
28
|
-
version: require(_path.default.resolve(_utils.rootDir, 'package.json')).version,
|
|
29
|
-
addHelp: true,
|
|
30
|
-
description: 'A webdriver-compatible server for use with native and hybrid iOS and Android applications.',
|
|
31
|
-
prog: process.argv[1] ? _path.default.basename(process.argv[1]) : 'appium',
|
|
32
|
-
debug
|
|
33
|
-
});
|
|
34
|
-
const subParsers = parser.addSubparsers({
|
|
35
|
-
dest: 'subcommand',
|
|
36
|
-
debug
|
|
37
|
-
});
|
|
38
|
-
const serverArgs = addServerToParser(_args.sharedArgs, subParsers, debug);
|
|
39
|
-
parser.rawArgs = serverArgs;
|
|
40
|
-
addExtensionsToParser(_args.sharedArgs, subParsers, debug);
|
|
41
|
-
parser._parseArgs = parser.parseArgs;
|
|
42
|
-
|
|
43
|
-
parser.parseArgs = function (args, namespace) {
|
|
44
|
-
if (_lodash.default.isUndefined(args)) {
|
|
45
|
-
args = [...process.argv.slice(2)];
|
|
46
|
-
}
|
|
29
|
+
var _args = require("./args");
|
|
47
30
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
31
|
+
const SERVER_SUBCOMMAND = 'server';
|
|
32
|
+
exports.SERVER_SUBCOMMAND = SERVER_SUBCOMMAND;
|
|
33
|
+
const NON_SERVER_ARGS = Object.freeze(new Set([_extensionConfig.DRIVER_TYPE, _extensionConfig.PLUGIN_TYPE, SERVER_SUBCOMMAND, '-h', '--help', '-v', '--version']));
|
|
51
34
|
|
|
52
|
-
|
|
53
|
-
}.bind(parser);
|
|
35
|
+
const version = _support.fs.readPackageJsonFrom(_utils.rootDir).version;
|
|
54
36
|
|
|
55
|
-
|
|
56
|
-
|
|
37
|
+
class ArgParser {
|
|
38
|
+
constructor(debug = false) {
|
|
39
|
+
const prog = process.argv[1] ? _path.default.basename(process.argv[1]) : 'appium';
|
|
40
|
+
const parser = new _argparse.ArgumentParser({
|
|
41
|
+
add_help: true,
|
|
42
|
+
description: 'A webdriver-compatible server that facilitates automation of web, mobile, and other types of apps across various platforms.',
|
|
43
|
+
prog
|
|
44
|
+
});
|
|
57
45
|
|
|
58
|
-
|
|
59
|
-
const serverParser = subParsers.addParser('server', {
|
|
60
|
-
addHelp: true,
|
|
61
|
-
help: 'Run an Appium server',
|
|
62
|
-
debug
|
|
63
|
-
});
|
|
46
|
+
ArgParser._patchExit(parser);
|
|
64
47
|
|
|
65
|
-
|
|
66
|
-
|
|
48
|
+
this.prog = prog;
|
|
49
|
+
this.debug = debug;
|
|
50
|
+
this.parser = parser;
|
|
51
|
+
parser.add_argument('-v', '--version', {
|
|
52
|
+
action: 'version',
|
|
53
|
+
version
|
|
54
|
+
});
|
|
55
|
+
const subParsers = parser.add_subparsers({
|
|
56
|
+
dest: 'subcommand'
|
|
67
57
|
});
|
|
58
|
+
|
|
59
|
+
const serverArgs = ArgParser._addServerToParser(subParsers);
|
|
60
|
+
|
|
61
|
+
this.rawArgs = serverArgs;
|
|
62
|
+
|
|
63
|
+
ArgParser._addExtensionCommandsToParser(subParsers);
|
|
64
|
+
|
|
65
|
+
this.parse_args = this.parseArgs;
|
|
68
66
|
}
|
|
69
67
|
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
parseArgs(args = process.argv.slice(2)) {
|
|
69
|
+
if (!NON_SERVER_ARGS.has(args[0])) {
|
|
70
|
+
args.unshift(SERVER_SUBCOMMAND);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
const parsed = this.parser.parse_args(args);
|
|
75
|
+
return ArgParser._transformParsedArgs(parsed);
|
|
76
|
+
} catch (err) {
|
|
77
|
+
if (this.debug) {
|
|
78
|
+
throw err;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
{
|
|
82
|
+
console.error();
|
|
83
|
+
console.error(err.message);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
72
88
|
|
|
73
|
-
|
|
74
|
-
|
|
89
|
+
static _transformParsedArgs(args) {
|
|
90
|
+
return _lodash.default.reduce(args, (unpacked, value, key) => {
|
|
91
|
+
if ((0, _schema.hasArgSpec)(key)) {
|
|
92
|
+
const {
|
|
93
|
+
dest
|
|
94
|
+
} = (0, _schema.getArgSpec)(key);
|
|
75
95
|
|
|
76
|
-
|
|
77
|
-
|
|
96
|
+
_lodash.default.set(unpacked, dest, value);
|
|
97
|
+
} else {
|
|
98
|
+
unpacked[key] = value;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return unpacked;
|
|
102
|
+
}, {});
|
|
78
103
|
}
|
|
79
104
|
|
|
80
|
-
|
|
81
|
-
|
|
105
|
+
static _patchExit(parser) {
|
|
106
|
+
parser.exit = (code, msg) => {
|
|
107
|
+
throw new Error(msg);
|
|
108
|
+
};
|
|
109
|
+
}
|
|
82
110
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
help: `Access the ${type} management CLI commands`,
|
|
88
|
-
debug
|
|
89
|
-
});
|
|
90
|
-
const extSubParsers = extParser.addSubparsers({
|
|
91
|
-
dest: `${type}Command`,
|
|
92
|
-
debug
|
|
111
|
+
static _addServerToParser(subParser) {
|
|
112
|
+
const serverParser = subParser.add_parser('server', {
|
|
113
|
+
add_help: true,
|
|
114
|
+
help: 'Run an Appium server'
|
|
93
115
|
});
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
for (const {
|
|
113
|
-
command,
|
|
114
|
-
args,
|
|
115
|
-
help
|
|
116
|
-
} of parserSpecs) {
|
|
117
|
-
const parser = extSubParsers.addParser(command, {
|
|
118
|
-
help,
|
|
119
|
-
debug
|
|
116
|
+
|
|
117
|
+
ArgParser._patchExit(serverParser);
|
|
118
|
+
|
|
119
|
+
const serverArgs = (0, _args.getServerArgs)();
|
|
120
|
+
|
|
121
|
+
for (const [flagsOrNames, opts] of serverArgs) {
|
|
122
|
+
serverParser.add_argument(...flagsOrNames, { ...opts
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return serverArgs;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
static _addExtensionCommandsToParser(subParsers) {
|
|
130
|
+
for (const type of [_extensionConfig.DRIVER_TYPE, _extensionConfig.PLUGIN_TYPE]) {
|
|
131
|
+
const extParser = subParsers.add_parser(type, {
|
|
132
|
+
add_help: true,
|
|
133
|
+
help: `Access the ${type} management CLI commands`
|
|
120
134
|
});
|
|
121
135
|
|
|
122
|
-
|
|
123
|
-
|
|
136
|
+
ArgParser._patchExit(extParser);
|
|
137
|
+
|
|
138
|
+
const extSubParsers = extParser.add_subparsers({
|
|
139
|
+
dest: `${type}Command`
|
|
140
|
+
});
|
|
141
|
+
const extensionArgs = (0, _args.getExtensionArgs)();
|
|
142
|
+
const parserSpecs = [{
|
|
143
|
+
command: 'list',
|
|
144
|
+
args: extensionArgs[type].list,
|
|
145
|
+
help: `List available and installed ${type}s`
|
|
146
|
+
}, {
|
|
147
|
+
command: 'install',
|
|
148
|
+
args: extensionArgs[type].install,
|
|
149
|
+
help: `Install a ${type}`
|
|
150
|
+
}, {
|
|
151
|
+
command: 'uninstall',
|
|
152
|
+
args: extensionArgs[type].uninstall,
|
|
153
|
+
help: `Uninstall a ${type}`
|
|
154
|
+
}, {
|
|
155
|
+
command: 'update',
|
|
156
|
+
args: extensionArgs[type].update,
|
|
157
|
+
help: `Update installed ${type}s to the latest version`
|
|
158
|
+
}, {
|
|
159
|
+
command: 'run',
|
|
160
|
+
args: extensionArgs[type].run,
|
|
161
|
+
help: `Run a script (defined inside the ${type}'s package.json under the ` + `“scripts” field inside the “appium” field) from an installed ${type}`
|
|
162
|
+
}];
|
|
163
|
+
|
|
164
|
+
for (const {
|
|
165
|
+
command,
|
|
166
|
+
args,
|
|
167
|
+
help
|
|
168
|
+
} of parserSpecs) {
|
|
169
|
+
const parser = extSubParsers.add_parser(command, {
|
|
170
|
+
help
|
|
124
171
|
});
|
|
172
|
+
|
|
173
|
+
ArgParser._patchExit(parser);
|
|
174
|
+
|
|
175
|
+
for (const [flagsOrNames, opts] of args) {
|
|
176
|
+
parser.add_argument(...flagsOrNames, { ...opts
|
|
177
|
+
});
|
|
178
|
+
}
|
|
125
179
|
}
|
|
126
180
|
}
|
|
127
181
|
}
|
|
182
|
+
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
exports.ArgParser = ArgParser;
|
|
186
|
+
|
|
187
|
+
async function getParser(debug = false) {
|
|
188
|
+
await _bluebird.default.all([_args.driverConfig.read(), _args.pluginConfig.read()]);
|
|
189
|
+
(0, _schema.finalizeSchema)();
|
|
190
|
+
return new ArgParser(debug);
|
|
128
191
|
}
|
|
129
192
|
|
|
130
193
|
var _default = getParser;
|
|
131
194
|
exports.default = _default;require('source-map-support').install();
|
|
132
195
|
|
|
133
196
|
|
|
134
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvcGFyc2VyLmpzIl0sIm5hbWVzIjpbImdldFBhcnNlciIsImRlYnVnIiwicGFyc2VyIiwiQXJndW1lbnRQYXJzZXIiLCJ2ZXJzaW9uIiwicmVxdWlyZSIsInBhdGgiLCJyZXNvbHZlIiwicm9vdERpciIsImFkZEhlbHAiLCJkZXNjcmlwdGlvbiIsInByb2ciLCJwcm9jZXNzIiwiYXJndiIsImJhc2VuYW1lIiwic3ViUGFyc2VycyIsImFkZFN1YnBhcnNlcnMiLCJkZXN0Iiwic2VydmVyQXJncyIsImFkZFNlcnZlclRvUGFyc2VyIiwic2hhcmVkQXJncyIsInJhd0FyZ3MiLCJhZGRFeHRlbnNpb25zVG9QYXJzZXIiLCJfcGFyc2VBcmdzIiwicGFyc2VBcmdzIiwiYXJncyIsIm5hbWVzcGFjZSIsIl8iLCJpc1VuZGVmaW5lZCIsInNsaWNlIiwiaW5jbHVkZXMiLCJEUklWRVJfVFlQRSIsIlBMVUdJTl9UWVBFIiwic3BsaWNlIiwiYmluZCIsInNlcnZlclBhcnNlciIsImFkZFBhcnNlciIsImhlbHAiLCJmbGFncyIsIm9wdHMiLCJhZGRBcmd1bWVudCIsImdldERlZmF1bHRTZXJ2ZXJBcmdzIiwiZGVmYXVsdHMiLCJhcmciLCJkZWZhdWx0VmFsdWUiLCJ0eXBlIiwiZXh0UGFyc2VyIiwiZXh0U3ViUGFyc2VycyIsInBhcnNlclNwZWNzIiwiY29tbWFuZCIsImV4dGVuc2lvbkFyZ3MiLCJsaXN0IiwiaW5zdGFsbCIsInVuaW5zdGFsbCIsInVwZGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLFNBQVNBLFNBQVQsQ0FBb0JDLEtBQUssR0FBRyxLQUE1QixFQUFtQztBQUNqQyxRQUFNQyxNQUFNLEdBQUcsSUFBSUMsd0JBQUosQ0FBbUI7QUFDaENDLElBQUFBLE9BQU8sRUFBRUMsT0FBTyxDQUFDQyxjQUFLQyxPQUFMLENBQWFDLGNBQWIsRUFBc0IsY0FBdEIsQ0FBRCxD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RDtBQUFVeEIsTUFBQUEsSUFBVjtBQUFnQlksTUFBQUE7QUFBaEIsS0FBWCxJQUFvQ1csV0FBcEMsRUFBaUQ7QUFDL0MsWUFBTTlDLE1BQU0sR0FBRzZDLGFBQWEsQ0FBQ1gsU0FBZCxDQUF3QmEsT0FBeEIsRUFBaUM7QUFBQ1osUUFBQUEsSUFBRDtBQUFPcEMsUUFBQUE7QUFBUCxPQUFqQyxDQUFmOztBQUNBLFdBQUssTUFBTSxDQUFDcUMsS0FBRCxFQUFRQyxJQUFSLENBQVgsSUFBNEIsQ0FBQyxHQUFHbkIsVUFBSixFQUFnQixHQUFHSyxJQUFuQixDQUE1QixFQUFzRDtBQUVwRHZCLFFBQUFBLE1BQU0sQ0FBQ3NDLFdBQVAsQ0FBbUIsQ0FBQyxHQUFHRixLQUFKLENBQW5CLEVBQStCLEVBQUMsR0FBR0M7QUFBSixTQUEvQjtBQUNEO0FBQ0Y7QUFDRjtBQUNGOztlQUVjdkMsUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEFyZ3VtZW50UGFyc2VyIH0gZnJvbSAnYXJncGFyc2UnO1xuaW1wb3J0IHsgc2hhcmVkQXJncywgc2VydmVyQXJncywgZXh0ZW5zaW9uQXJncyB9IGZyb20gJy4vYXJncyc7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IHJvb3REaXIgfSBmcm9tICcuLi91dGlscyc7XG5cbmZ1bmN0aW9uIGdldFBhcnNlciAoZGVidWcgPSBmYWxzZSkge1xuICBjb25zdCBwYXJzZXIgPSBuZXcgQXJndW1lbnRQYXJzZXIoe1xuICAgIHZlcnNpb246IHJlcXVpcmUocGF0aC5yZXNvbHZlKHJvb3REaXIsICdwYWNrYWdlLmpzb24nKSkudmVyc2lvbixcbiAgICBhZGRIZWxwOiB0cnVlLFxuICAgIGRlc2NyaXB0aW9uOiAnQSB3ZWJkcml2ZXItY29tcGF0aWJsZSBzZXJ2ZXIgZm9yIHVzZSB3aXRoIG5hdGl2ZSBhbmQgaHlicmlkIGlPUyBhbmQgQW5kcm9pZCBhcHBsaWNhdGlvbnMuJyxcbiAgICBwcm9nOiBwcm9jZXNzLmFyZ3ZbMV0gPyBwYXRoLmJhc2VuYW1lKHByb2Nlc3MuYXJndlsxXSkgOiAnYXBwaXVtJyxcbiAgICBkZWJ1Z1xuICB9KTtcbiAgY29uc3Qgc3ViUGFyc2VycyA9IHBhcnNlci5hZGRTdWJwYXJzZXJzKHtkZXN0OiAnc3ViY29tbWFuZCcsIGRlYnVnfSk7XG5cbiAgLy8gYWRkIHRoZSAnc2VydmVyJyBzdWJjb21tYW5kLCBhbmQgc3RvcmUgdGhlIHJhdyBhcmd1bWVudHMgb24gdGhlIHBhcnNlclxuICAvLyBvYmplY3QgYXMgYSB3YXkgZm9yIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIHRvIHdvcmsgd2l0aCB0aGUgYXJndW1lbnRzXG4gIC8vIGNvbmNlcHR1YWxseSByYXRoZXIgdGhhbiBqdXN0IHRocm91Z2ggYXJncGFyc2VcbiAgY29uc3Qgc2VydmVyQXJncyA9IGFkZFNlcnZlclRvUGFyc2VyKHNoYXJlZEFyZ3MsIHN1YlBhcnNlcnMsIGRlYnVnKTtcbiAgcGFyc2VyLnJhd0FyZ3MgPSBzZXJ2ZXJBcmdzO1xuXG4gIC8vIGFkZCB0aGUgJ2RyaXZlcicgYW5kICdwbHVnaW4nIHN1YmNvbW1hbmRzXG4gIGFkZEV4dGVuc2lvbnNUb1BhcnNlcihzaGFyZWRBcmdzLCBzdWJQYXJzZXJzLCBkZWJ1Zyk7XG5cbiAgLy8gbW9kaWZ5IHRoZSBwYXJzZUFyZ3MgZnVuY3Rpb24gdG8gaW5zZXJ0IHRoZSAnc2VydmVyJyBzdWJjb21tYW5kIGlmIHRoZVxuICAvLyB1c2VyIGhhc24ndCBzcGVjaWZpZWQgYSBzdWJjb21tYW5kIG9yIHRoZSBnbG9iYWwgaGVscCBjb21tYW5kXG4gIHBhcnNlci5fcGFyc2VBcmdzID0gcGFyc2VyLnBhcnNlQXJncztcbiAgcGFyc2VyLnBhcnNlQXJncyA9IGZ1bmN0aW9uIChhcmdzLCBuYW1lc3BhY2UpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChhcmdzKSkge1xuICAgICAgYXJncyA9IFsuLi5wcm9jZXNzLmFyZ3Yuc2xpY2UoMildO1xuICAgIH1cbiAgICBpZiAoIV8uaW5jbHVkZXMoW0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRSwgJ3NlcnZlcicsICctaCddLCBhcmdzWzBdKSkge1xuICAgICAgYXJncy5zcGxpY2UoMCwgMCwgJ3NlcnZlcicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcGFyc2VBcmdzKGFyZ3MsIG5hbWVzcGFjZSk7XG4gIH0uYmluZChwYXJzZXIpO1xuICByZXR1cm4gcGFyc2VyO1xufVxuXG5mdW5jdGlvbiBhZGRTZXJ2ZXJUb1BhcnNlciAoc2hhcmVkQXJncywgc3ViUGFyc2VycywgZGVidWcpIHtcbiAgY29uc3Qgc2VydmVyUGFyc2VyID0gc3ViUGFyc2Vycy5hZGRQYXJzZXIoJ3NlcnZlcicsIHtcbiAgICBhZGRIZWxwOiB0cnVlLFxuICAgIGhlbHA6ICdSdW4gYW4gQXBwaXVtIHNlcnZlcicsXG4gICAgZGVidWdcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBbZmxhZ3MsIG9wdHNdIG9mIFsuLi5zaGFyZWRBcmdzLCAuLi5zZXJ2ZXJBcmdzXSkge1xuICAgIC8vIGFkZEFyZ3VtZW50IG11dGF0ZXMgYXJndW1lbnRzIHNvIG1ha2UgY29waWVzXG4gICAgc2VydmVyUGFyc2VyLmFkZEFyZ3VtZW50KFsuLi5mbGFnc10sIHsuLi5vcHRzfSk7XG4gIH1cblxuICByZXR1cm4gc2VydmVyQXJncztcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFNlcnZlckFyZ3MgKCkge1xuICBsZXQgZGVmYXVsdHMgPSB7fTtcbiAgZm9yIChsZXQgWywgYXJnXSBvZiBzZXJ2ZXJBcmdzKSB7XG4gICAgZGVmYXVsdHNbYXJnLmRlc3RdID0gYXJnLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICByZXR1cm4gZGVmYXVsdHM7XG59XG5cbmZ1bmN0aW9uIGFkZEV4dGVuc2lvbnNUb1BhcnNlciAoc2hhcmVkQXJncywgc3ViUGFyc2VycywgZGVidWcpIHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIFtEUklWRVJfVFlQRSwgUExVR0lOX1RZUEVdKSB7XG4gICAgY29uc3QgZXh0UGFyc2VyID0gc3ViUGFyc2Vycy5hZGRQYXJzZXIodHlwZSwge1xuICAgICAgYWRkSGVscDogdHJ1ZSxcbiAgICAgIGhlbHA6IGBBY2Nlc3MgdGhlICR7dHlwZX0gbWFuYWdlbWVudCBDTEkgY29tbWFuZHNgLFxuICAgICAgZGVidWdcbiAgICB9KTtcbiAgICBjb25zdCBleHRTdWJQYXJzZXJzID0gZXh0UGFyc2VyLmFkZFN1YnBhcnNlcnMoe1xuICAgICAgZGVzdDogYCR7dHlwZX1Db21tYW5kYCxcbiAgICAgIGRlYnVnXG4gICAgfSk7XG4gICAgY29uc3QgcGFyc2VyU3BlY3MgPSBbXG4gICAgICB7Y29tbWFuZDogJ2xpc3QnLCBhcmdzOiBleHRlbnNpb25BcmdzW3R5cGVdLmxpc3QsXG4gICAgICAgaGVscDogYExpc3QgYXZhaWxhYmxlIGFuZCBpbnN0YWxsZWQgJHt0eXBlfXNgfSxcbiAgICAgIHtjb21tYW5kOiAnaW5zdGFsbCcsIGFyZ3M6IGV4dGVuc2lvbkFyZ3NbdHlwZV0uaW5zdGFsbCxcbiAgICAgICBoZWxwOiBgSW5zdGFsbCBhICR7dHlwZX1gfSxcbiAgICAgIHtjb21tYW5kOiAndW5pbnN0YWxsJywgYXJnczogZXh0ZW5zaW9uQXJnc1t0eXBlXS51bmluc3RhbGwsXG4gICAgICAgaGVscDogYFVuaW5zdGFsbCBhICR7dHlwZX1gfSxcbiAgICAgIHtjb21tYW5kOiAndXBkYXRlJywgYXJnczogZXh0ZW5zaW9uQXJnc1t0eXBlXS51cGRhdGUsXG4gICAgICAgaGVscDogYFVwZGF0ZSBpbnN0YWxsZWQgJHt0eXBlfXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uYH0sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qge2NvbW1hbmQsIGFyZ3MsIGhlbHB9IG9mIHBhcnNlclNwZWNzKSB7XG4gICAgICBjb25zdCBwYXJzZXIgPSBleHRTdWJQYXJzZXJzLmFkZFBhcnNlcihjb21tYW5kLCB7aGVscCwgZGVidWd9KTtcbiAgICAgIGZvciAoY29uc3QgW2ZsYWdzLCBvcHRzXSBvZiBbLi4uc2hhcmVkQXJncywgLi4uYXJnc10pIHtcbiAgICAgICAgLy8gYWRkQXJndW1lbnQgbXV0YXRlcyBwYXJhbXMgc28gbWFrZSBzdXJlIHRvIHNlbmQgaW4gY29waWVzIGluc3RlYWRcbiAgICAgICAgcGFyc2VyLmFkZEFyZ3VtZW50KFsuLi5mbGFnc10sIHsuLi5vcHRzfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFBhcnNlcjtcbmV4cG9ydCB7IGdldFBhcnNlciwgZ2V0RGVmYXVsdFNlcnZlckFyZ3MgfTtcbiJdLCJmaWxlIjoibGliL2NsaS9wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
197
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvcGFyc2VyLmpzIl0sIm5hbWVzIjpbIlNFUlZFUl9TVUJDT01NQU5EIiwiTk9OX1NFUlZFUl9BUkdTIiwiT2JqZWN0IiwiZnJlZXplIiwiU2V0IiwiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsInZlcnNpb24iLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJyb290RGlyIiwiQXJnUGFyc2VyIiwiY29uc3RydWN0b3IiLCJkZWJ1ZyIsInByb2ciLCJwcm9jZXNzIiwiYXJndiIsInBhdGgiLCJiYXNlbmFtZSIsInBhcnNlciIsIkFyZ3VtZW50UGFyc2VyIiwiYWRkX2hlbHAiLCJkZXNjcmlwdGlvbiIsIl9wYXRjaEV4aXQiLCJhZGRfYXJndW1lbnQiLCJhY3Rpb24iLCJzdWJQYXJzZXJzIiwiYWRkX3N1YnBhcnNlcnMiLCJkZXN0Iiwic2VydmVyQXJncyIsIl9hZGRTZXJ2ZXJUb1BhcnNlciIsInJhd0FyZ3MiLCJfYWRkRXh0ZW5zaW9uQ29tbWFuZHNUb1BhcnNlciIsInBhcnNlX2FyZ3MiLCJwYXJzZUFyZ3MiLCJhcmdzIiwic2xpY2UiLCJoYXMiLCJ1bnNoaWZ0IiwicGFyc2VkIiwiX3RyYW5zZm9ybVBhcnNlZEFyZ3MiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJtZXNzYWdlIiwiZXhpdCIsIl8iLCJyZWR1Y2UiLCJ1bnBhY2tlZCIsInZhbHVlIiwia2V5Iiwic2V0IiwiY29kZSIsIm1zZyIsIkVycm9yIiwic3ViUGFyc2VyIiwic2VydmVyUGFyc2VyIiwiYWRkX3BhcnNlciIsImhlbHAiLCJmbGFnc09yTmFtZXMiLCJvcHRzIiwidHlwZSIsImV4dFBhcnNlciIsImV4dFN1YlBhcnNlcnMiLCJleHRlbnNpb25BcmdzIiwicGFyc2VyU3BlY3MiLCJjb21tYW5kIiwibGlzdCIsImluc3RhbGwiLCJ1bmluc3RhbGwiLCJ1cGRhdGUiLCJydW4iLCJnZXRQYXJzZXIiLCJCIiwiYWxsIiwiZHJpdmVyQ29uZmlnIiwicmVhZCIsInBsdWdp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RyxvQkFBbUJHLElBQUs7QUFIakMsT0FoQmtCLEVBcUJsQjtBQUNFSyxRQUFBQSxPQUFPLEVBQUUsS0FEWDtBQUVFL0IsUUFBQUEsSUFBSSxFQUFFNkIsYUFBYSxDQUFDSCxJQUFELENBQWIsQ0FBb0JVLEdBRjVCO0FBR0ViLFFBQUFBLElBQUksRUFDRCxvQ0FBbUNHLElBQUssNEJBQXpDLEdBQ0MsZ0VBQStEQSxJQUFLO0FBTHpFLE9BckJrQixDQUFwQjs7QUE4QkEsV0FBSyxNQUFNO0FBQUNLLFFBQUFBLE9BQUQ7QUFBVS9CLFFBQUFBLElBQVY7QUFBZ0J1QixRQUFBQTtBQUFoQixPQUFYLElBQW9DTyxXQUFwQyxFQUFpRDtBQUMvQyxjQUFNOUMsTUFBTSxHQUFHNEMsYUFBYSxDQUFDTixVQUFkLENBQXlCUyxPQUF6QixFQUFrQztBQUFDUixVQUFBQTtBQUFELFNBQWxDLENBQWY7O0FBRUEvQyxRQUFBQSxTQUFTLENBQUNZLFVBQVYsQ0FBcUJKLE1BQXJCOztBQUVBLGFBQUssTUFBTSxDQUFDd0MsWUFBRCxFQUFlQyxJQUFmLENBQVgsSUFBbUN6QixJQUFuQyxFQUF5QztBQUd2Q2hCLFVBQUFBLE1BQU0sQ0FBQ0ssWUFBUCxDQUFvQixHQUFHbUMsWUFBdkIsRUFBcUMsRUFBQyxHQUFHQztBQUFKLFdBQXJDO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7O0FBak5hOzs7O0FBNE5oQixlQUFlWSxTQUFmLENBQTBCM0QsS0FBSyxHQUFHLEtBQWxDLEVBQXlDO0FBQ3ZDLFFBQU00RCxrQkFBRUMsR0FBRixDQUFNLENBQUNDLG1CQUFhQyxJQUFiLEVBQUQsRUFBc0JDLG1CQUFhRCxJQUFiLEVBQXRCLENBQU4sQ0FBTjtBQUNBO0FBRUEsU0FBTyxJQUFJakUsU0FBSixDQUFjRSxLQUFkLENBQVA7QUFDRDs7ZUFFYzJELFMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHsgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgQXJndW1lbnRQYXJzZXIgfSBmcm9tICdhcmdwYXJzZSc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IGZpbmFsaXplU2NoZW1hLCBnZXRBcmdTcGVjLCBoYXNBcmdTcGVjIH0gZnJvbSAnLi4vc2NoZW1hJztcbmltcG9ydCB7IHJvb3REaXIgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBkcml2ZXJDb25maWcsXG4gIGdldEV4dGVuc2lvbkFyZ3MsXG4gIGdldFNlcnZlckFyZ3MsXG4gIHBsdWdpbkNvbmZpZ1xufSBmcm9tICcuL2FyZ3MnO1xuXG5leHBvcnQgY29uc3QgU0VSVkVSX1NVQkNPTU1BTkQgPSAnc2VydmVyJztcblxuLyoqXG4gKiBJZiB0aGUgcGFyc2VkIGFyZ3MgZG8gbm90IGNvbnRhaW4gYW55IG9mIHRoZXNlIHZhbHVlcywgdGhlbiB3ZVxuICogd2lsbCBhdXRvbWF0aWFsbHkgaW5qZWN0IHRoZSBgc2VydmVyYCBzdWJjb21tYW5kLlxuICovXG5jb25zdCBOT05fU0VSVkVSX0FSR1MgPSBPYmplY3QuZnJlZXplKFxuICBuZXcgU2V0KFtcbiAgICBEUklWRVJfVFlQRSxcbiAgICBQTFVHSU5fVFlQRSxcbiAgICBTRVJWRVJfU1VCQ09NTUFORCxcbiAgICAnLWgnLFxuICAgICctLWhlbHAnLFxuICAgICctdicsXG4gICAgJy0tdmVyc2lvbidcbiAgXSlcbik7XG5cbmNvbnN0IHZlcnNpb24gPSBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKHJvb3REaXIpLnZlcnNpb247XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBgYXJncGFyc2VgXG4gKlxuICogLSBIYW5kbGVzIGluc3RhbnRpYXRpb24sIGNvbmZpZ3VyYXRpb24sIGFuZCBtb25rZXlwYXRjaGluZyBvZiBhblxuICogICAgYEFyZ3VtZW50UGFyc2VyYCBpbnN0YW5jZSBmb3IgQXBwaXVtIHNlcnZlciBhbmQgaXRzIGV4dGVuc2lvbnNcbiAqIC0gSGFuZGxlcyBlcnJvciBjb25kaXRpb25zLCBtZXNzYWdlcywgYW5kIGV4aXQgYmVoYXZpb3JcbiAqL1xuY2xhc3MgQXJnUGFyc2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlYnVnXSAtIElmIHRydWUsIHRocm93IGluc3RlYWQgb2YgZXhpdCBvbiBlcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yIChkZWJ1ZyA9IGZhbHNlKSB7XG4gICAgY29uc3QgcHJvZyA9IHByb2Nlc3MuYXJndlsxXSA/IHBhdGguYmFzZW5hbWUocHJvY2Vzcy5hcmd2WzFdKSA6ICdhcHBpdW0nO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBBcmd1bWVudFBhcnNlcih7XG4gICAgICBhZGRfaGVscDogdHJ1ZSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnQSB3ZWJkcml2ZXItY29tcGF0aWJsZSBzZXJ2ZXIgdGhhdCBmYWNpbGl0YXRlcyBhdXRvbWF0aW9uIG9mIHdlYiwgbW9iaWxlLCBhbmQgb3RoZXIgdHlwZXMgb2YgYXBwcyBhY3Jvc3MgdmFyaW91cyBwbGF0Zm9ybXMuJyxcbiAgICAgIHByb2csXG4gICAgfSk7XG5cbiAgICBBcmdQYXJzZXIuX3BhdGNoRXhpdChwYXJzZXIpO1xuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbSBuYW1lICh0eXBpY2FsbHkgYGFwcGl1bWApXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnByb2cgPSBwcm9nO1xuXG4gICAgLyoqXG4gICAgICogSWYgYHRydWVgLCB0aHJvdyBhbiBlcnJvciBvbiBwYXJzZSBmYWlsdXJlIGluc3RlYWQgb2YgcHJpbnRpbmcgaGVscFxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGVidWcgPSBkZWJ1ZztcblxuICAgIC8qKlxuICAgICAqIFdyYXBwZWQgYEFyZ3VtZW50UGFyc2VyYCBpbnN0YW5jZVxuICAgICAqIEB0eXBlIHtBcmd1bWVudFBhcnNlcn1cbiAgICAgKi9cbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcblxuICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyc2lvbicsIHtcbiAgICAgIGFjdGlvbjogJ3ZlcnNpb24nLFxuICAgICAgdmVyc2lvbixcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1YlBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoe2Rlc3Q6ICdzdWJjb21tYW5kJ30pO1xuXG4gICAgLy8gYWRkIHRoZSAnc2VydmVyJyBzdWJjb21tYW5kLCBhbmQgc3RvcmUgdGhlIHJhdyBhcmd1bWVudHMgb24gdGhlIHBhcnNlclxuICAgIC8vIG9iamVjdCBhcyBhIHdheSBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgdG8gd29yayB3aXRoIHRoZSBhcmd1bWVudHNcbiAgICAvLyBjb25jZXB0dWFsbHkgcmF0aGVyIHRoYW4ganVzdCB0aHJvdWdoIGFyZ3BhcnNlXG4gICAgY29uc3Qgc2VydmVyQXJncyA9IEFyZ1BhcnNlci5fYWRkU2VydmVyVG9QYXJzZXIoc3ViUGFyc2Vycyk7XG5cbiAgICB0aGlzLnJhd0FyZ3MgPSBzZXJ2ZXJBcmdzO1xuXG4gICAgLy8gYWRkIHRoZSAnZHJpdmVyJyBhbmQgJ3BsdWdpbicgc3ViY29tbWFuZHNcbiAgICBBcmdQYXJzZXIuX2FkZEV4dGVuc2lvbkNvbW1hbmRzVG9QYXJzZXIoc3ViUGFyc2Vycyk7XG5cbiAgICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAvIGRyb3AtaW4gd3JhcHBlclxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtBcmdQYXJzZXJbJ3BhcnNlQXJncyddfVxuICAgICAqL1xuICAgIHRoaXMucGFyc2VfYXJncyA9IHRoaXMucGFyc2VBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFyZ3VtZW50cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuXG4gICAqXG4gICAqIElmIG5vIHN1YmNvbW1hbmQgaXMgcGFzc2VkIGluLCB0aGlzIG1ldGhvZCB3aWxsIGluamVjdCB0aGUgYHNlcnZlcmAgc3ViY29tbWFuZC5cbiAgICpcbiAgICogYEFyZ1BhcnNlci5wcm90b3R5cGUucGFyc2VfYXJnc2AgaXMgYW4gYWxpYXMgb2YgdGhpcyBtZXRob2QuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzXSAtIEFycmF5IG9mIGFyZ3VtZW50cywgb3N0ZW5zaWJseSBmcm9tIGBwcm9jZXNzLmFyZ3ZgLiBHYXRoZXJzIGFyZ3MgZnJvbSBgcHJvY2Vzcy5hcmd2YCBpZiBub3QgcHJvdmlkZWQuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3R5cGVzJykuUGFyc2VkQXJnc30gLSBUaGUgcGFyc2VkIGFyZ3VtZW50c1xuICAgKi9cbiAgcGFyc2VBcmdzIChhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSB7XG4gICAgaWYgKCFOT05fU0VSVkVSX0FSR1MuaGFzKGFyZ3NbMF0pKSB7XG4gICAgICBhcmdzLnVuc2hpZnQoU0VSVkVSX1NVQkNPTU1BTkQpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpO1xuICAgICAgcmV0dXJuIEFyZ1BhcnNlci5fdHJhbnNmb3JtUGFyc2VkQXJncyhwYXJzZWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgLy8gdGhpcyBpc24ndCB0ZXN0ZWQgdmlhIHVuaXQgdGVzdHMgKHdlIHVzZSBgZGVidWc6IHRydWVgKSBzbyBtYXkgZXNjYXBlIGNvdmVyYWdlLlxuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKCk7IC8vIG5lZWQgYW4gZXh0cmEgc3BhY2Ugc2luY2UgYXJncGFyc2UgcHJpbnRzIHVzYWdlLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhbiBvYmplY3QgZnVsbCBvZiBhcmd1bWVudHMgYXMgcmV0dXJuZWQgYnkgYGFyZ3BhcnNlci5wYXJzZV9hcmdzYCxcbiAgICogZXhwYW5kIHRoZSBvbmVzIGZvciBleHRlbnNpb25zIGludG8gYSBuZXN0ZWQgb2JqZWN0IHN0cnVjdHVyZSBhbmQgcmVuYW1lXG4gICAqIGtleXMgdG8gbWF0Y2ggdGhlIGludGVuZGVkIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBFLmcuLCBgeydkcml2ZXItZm9vLWJhcic6IGJhen1gIGJlY29tZXMgYHtkcml2ZXI6IHtmb286IHtiYXI6ICdiYXonfX19YFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIF90cmFuc2Zvcm1QYXJzZWRBcmdzIChhcmdzKSB7XG4gICAgcmV0dXJuIF8ucmVkdWNlKFxuICAgICAgYXJncyxcbiAgICAgICh1bnBhY2tlZCwgdmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoaGFzQXJnU3BlYyhrZXkpKSB7XG4gICAgICAgICAgY29uc3Qge2Rlc3R9ID0gLyoqIEB0eXBlIHtpbXBvcnQoJy4uL3NjaGVtYS9hcmctc3BlYycpLkFyZ1NwZWN9ICovKGdldEFyZ1NwZWMoa2V5KSk7XG4gICAgICAgICAgXy5zZXQodW5wYWNrZWQsIGRlc3QsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGlzIGNvdWxkIGJlIGFueXRoaW5nIHRoYXQgX2lzbid0XyBhIHNlcnZlciBhcmdcbiAgICAgICAgICB1bnBhY2tlZFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVucGFja2VkO1xuICAgICAgfSxcbiAgICAgIHt9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyB0aGUgYGV4aXQoKWAgbWV0aG9kIG9mIHRoZSBwYXJzZXIgdG8gdGhyb3cgYW4gZXJyb3IsIHNvIHdlIGNhbiBoYW5kbGUgaXQgbWFudWFsbHkuXG4gICAqIEBwYXJhbSB7QXJndW1lbnRQYXJzZXJ9IHBhcnNlclxuICAgKi9cbiAgc3RhdGljIF9wYXRjaEV4aXQgKHBhcnNlcikge1xuICAgIHBhcnNlci5leGl0ID0gKGNvZGUsIG1zZykgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYXJncGFyc2UnKS5TdWJQYXJzZXJ9IHN1YlBhcnNlclxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCcuL2FyZ3MnKS5Bcmd1bWVudERlZmluaXRpb25zfVxuICAgKi9cbiAgc3RhdGljIF9hZGRTZXJ2ZXJUb1BhcnNlciAoc3ViUGFyc2VyKSB7XG4gICAgY29uc3Qgc2VydmVyUGFyc2VyID0gc3ViUGFyc2VyLmFkZF9wYXJzZXIoJ3NlcnZlcicsIHtcbiAgICAgIGFkZF9oZWxwOiB0cnVlLFxuICAgICAgaGVscDogJ1J1biBhbiBBcHBpdW0gc2VydmVyJyxcbiAgICB9KTtcblxuICAgIEFyZ1BhcnNlci5fcGF0Y2hFeGl0KHNlcnZlclBhcnNlcik7XG5cbiAgICBjb25zdCBzZXJ2ZXJBcmdzID0gZ2V0U2VydmVyQXJncygpO1xuICAgIGZvciAoY29uc3QgW2ZsYWdzT3JOYW1lcywgb3B0c10gb2Ygc2VydmVyQXJncykge1xuICAgICAgLy8gVFMgZG9lc24ndCBsaWtlIHRoZSBzcHJlYWQgb3BlcmF0b3IgaGVyZS5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHNlcnZlclBhcnNlci5hZGRfYXJndW1lbnQoLi4uZmxhZ3NPck5hbWVzLCB7Li4ub3B0c30pO1xuICAgIH1cblxuICAgIHJldHVybiBzZXJ2ZXJBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXh0ZW5zaW9uIHN1Yi1zdWItY29tbWFuZHMgdG8gYGRyaXZlcmAvYHBsdWdpbmAgc3ViY29tbWFuZHNcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2FyZ3BhcnNlJykuU3ViUGFyc2VyfSBzdWJQYXJzZXJzXG4gICAqL1xuICBzdGF0aWMgX2FkZEV4dGVuc2lvbkNvbW1hbmRzVG9QYXJzZXIgKHN1YlBhcnNlcnMpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgW0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRV0pIHtcbiAgICAgIGNvbnN0IGV4dFBhcnNlciA9IHN1YlBhcnNlcnMuYWRkX3BhcnNlcih0eXBlLCB7XG4gICAgICAgIGFkZF9oZWxwOiB0cnVlLFxuICAgICAgICBoZWxwOiBgQWNjZXNzIHRoZSAke3R5cGV9IG1hbmFnZW1lbnQgQ0xJIGNvbW1hbmRzYCxcbiAgICAgIH0pO1xuXG4gICAgICBBcmdQYXJzZXIuX3BhdGNoRXhpdChleHRQYXJzZXIpO1xuXG4gICAgICBjb25zdCBleHRTdWJQYXJzZXJzID0gZXh0UGFyc2VyLmFkZF9zdWJwYXJzZXJzKHtcbiAgICAgICAgZGVzdDogYCR7dHlwZX1Db21tYW5kYCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZXh0ZW5zaW9uQXJncyA9IGdldEV4dGVuc2lvbkFyZ3MoKTtcbiAgICAgIGNvbnN0IHBhcnNlclNwZWNzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY29tbWFuZDogJ2xpc3QnLFxuICAgICAgICAgIGFyZ3M6IGV4dGVuc2lvbkFyZ3NbdHlwZV0ubGlzdCxcbiAgICAgICAgICBoZWxwOiBgTGlzdCBhdmFpbGFibGUgYW5kIGluc3RhbGxlZCAke3R5cGV9c2AsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAnaW5zdGFsbCcsXG4gICAgICAgICAgYXJnczogZXh0ZW5zaW9uQXJnc1t0eXBlXS5pbnN0YWxsLFxuICAgICAgICAgIGhlbHA6IGBJbnN0YWxsIGEgJHt0eXBlfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAndW5pbnN0YWxsJyxcbiAgICAgICAgICBhcmdzOiBleHRlbnNpb25BcmdzW3R5cGVdLnVuaW5zdGFsbCxcbiAgICAgICAgICBoZWxwOiBgVW5pbnN0YWxsIGEgJHt0eXBlfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAndXBkYXRlJyxcbiAgICAgICAgICBhcmdzOiBleHRlbnNpb25BcmdzW3R5cGVdLnVwZGF0ZSxcbiAgICAgICAgICBoZWxwOiBgVXBkYXRlIGluc3RhbGxlZCAke3R5cGV9cyB0byB0aGUgbGF0ZXN0IHZlcnNpb25gLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29tbWFuZDogJ3J1bicsXG4gICAgICAgICAgYXJnczogZXh0ZW5zaW9uQXJnc1t0eXBlXS5ydW4sXG4gICAgICAgICAgaGVscDpcbiAgICAgICAgICAgIGBSdW4gYSBzY3JpcHQgKGRlZmluZWQgaW5zaWRlIHRoZSAke3R5cGV9J3MgcGFja2FnZS5qc29uIHVuZGVyIHRoZSBgICtcbiAgICAgICAgICAgIGDigJxzY3JpcHRz4oCdIGZpZWxkIGluc2lkZSB0aGUg4oCcYXBwaXVt4oCdIGZpZWxkKSBmcm9tIGFuIGluc3RhbGxlZCAke3R5cGV9YCxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3Qge2NvbW1hbmQsIGFyZ3MsIGhlbHB9IG9mIHBhcnNlclNwZWNzKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IGV4dFN1YlBhcnNlcnMuYWRkX3BhcnNlcihjb21tYW5kLCB7aGVscH0pO1xuXG4gICAgICAgIEFyZ1BhcnNlci5fcGF0Y2hFeGl0KHBhcnNlcik7XG5cbiAgICAgICAgZm9yIChjb25zdCBbZmxhZ3NPck5hbWVzLCBvcHRzXSBvZiBhcmdzKSB7XG4gICAgICAgICAgLy8gYWRkX2FyZ3VtZW50IG11dGF0ZXMgcGFyYW1zIHNvIG1ha2Ugc3VyZSB0byBzZW5kIGluIGNvcGllcyBpbnN0ZWFkXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoLi4uZmxhZ3NPck5hbWVzLCB7Li4ub3B0c30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBBcmdQYXJzZXJ9IGluc3RhbmNlLiAgTmVjZXNzYXJpbHkgcmVhZHMgZXh0ZW5zaW9uIGNvbmZpZ3VyYXRpb25cbiAqIGJlZm9yZWhhbmQsIGFuZCBmaW5hbGl6ZXMgdGhlIGNvbmZpZyBzY2hlbWEuXG4gKlxuICogQGNvbnN0cnVjdHMgQXJnUGFyc2VyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtkZWJ1Z10gLSBJZiBgdHJ1ZWAsIHRocm93IGluc3RlYWQgb2YgZXhpdCB1cG9uIHBhcnNpbmcgZXJyb3JcbiAqIEByZXR1cm5zIHtQcm9taXNlPEFyZ1BhcnNlcj59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBhcnNlciAoZGVidWcgPSBmYWxzZSkge1xuICBhd2FpdCBCLmFsbChbZHJpdmVyQ29uZmlnLnJlYWQoKSwgcGx1Z2luQ29uZmlnLnJlYWQoKV0pO1xuICBmaW5hbGl6ZVNjaGVtYSgpO1xuXG4gIHJldHVybiBuZXcgQXJnUGFyc2VyKGRlYnVnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0UGFyc2VyO1xuZXhwb3J0IHsgZ2V0UGFyc2VyLCBBcmdQYXJzZXIgfTtcbiJdLCJmaWxlIjoibGliL2NsaS9wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -62,6 +62,16 @@ class PluginCommand extends _extensionCommand.default {
|
|
|
62
62
|
});
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
+
async run({
|
|
66
|
+
plugin,
|
|
67
|
+
scriptName
|
|
68
|
+
}) {
|
|
69
|
+
return await super.run({
|
|
70
|
+
ext: plugin,
|
|
71
|
+
scriptName
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
65
75
|
getPostInstallText({
|
|
66
76
|
extName,
|
|
67
77
|
extData
|
|
@@ -82,4 +92,4 @@ class PluginCommand extends _extensionCommand.default {
|
|
|
82
92
|
exports.default = PluginCommand;require('source-map-support').install();
|
|
83
93
|
|
|
84
94
|
|
|
85
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
95
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvcGx1Z2luLWNvbW1hbmQuanMiXSwibmFtZXMiOlsiUkVRX1BMVUdJTl9GSUVMRFMiLCJQbHVnaW5Db21tYW5kIiwiRXh0ZW5zaW9uQ29tbWFuZCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwianNvbiIsInR5cGUiLCJQTFVHSU5fVFlQRSIsImtub3duRXh0ZW5zaW9ucyIsIktOT1dOX1BMVUdJTlMiLCJpbnN0YWxsIiwicGx1Z2luIiwiaW5zdGFsbFR5cGUiLCJwYWNrYWdlTmFtZSIsImV4dCIsInVuaW5zdGFsbCIsInVwZGF0ZSIsInVuc2FmZSIsInJ1biIsInNjcmlwdE5hbWUiLCJnZXRQb3N0SW5zdGFsbFRleHQiLCJleHROYW1lIiwiZXh0RGF0YSIsInZlcnNpb24iLCJncmVlbiIsInZhbGlkYXRlRXh0ZW5zaW9uRmllbGRzIiwiYXBwaXVtUGtnRGF0YSIsIm1pc3NpbmdGaWVsZHMiLCJyZWR1Y2UiLCJhY2MiLCJmaWVsZCIsIl8iLCJpc0VtcHR5IiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGlCQUFpQixHQUFHLENBQUMsWUFBRCxFQUFlLFdBQWYsQ0FBMUI7O0FBRWUsTUFBTUMsYUFBTixTQUE0QkMseUJBQTVCLENBQTZDO0FBRTFEQyxFQUFBQSxXQUFXLENBQUU7QUFBQ0MsSUFBQUEsTUFBRDtBQUFTQyxJQUFBQTtBQUFULEdBQUYsRUFBa0I7QUFDM0IsVUFBTTtBQUFDRCxNQUFBQSxNQUFEO0FBQVNDLE1BQUFBLElBQVQ7QUFBZUMsTUFBQUEsSUFBSSxFQUFFQztBQUFyQixLQUFOO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QkMsc0JBQXZCO0FBQ0Q7O0FBRVksUUFBUEMsT0FBTyxDQUFFO0FBQUNDLElBQUFBLE1BQUQ7QUFBU0MsSUFBQUEsV0FBVDtBQUFzQkMsSUFBQUE7QUFBdEIsR0FBRixFQUFzQztBQUNqRCxXQUFPLE1BQU0sTUFBTUgsT0FBTixDQUFjO0FBQUNJLE1BQUFBLEdBQUcsRUFBRUgsTUFBTjtBQUFjQyxNQUFBQSxXQUFkO0FBQTJCQyxNQUFBQTtBQUEzQixLQUFkLENBQWI7QUFDRDs7QUFFYyxRQUFURSxTQUFTLENBQUU7QUFBQ0osSUFBQUE7QUFBRCxHQUFGLEVBQVk7QUFDekIsV0FBTyxNQUFNLE1BQU1JLFNBQU4sQ0FBZ0I7QUFBQ0QsTUFBQUEsR0FBRyxFQUFFSDtBQUFOLEtBQWhCLENBQWI7QUFDRDs7QUFFVyxRQUFOSyxNQUFNLENBQUU7QUFBQ0wsSUFBQUEsTUFBRDtBQUFTTSxJQUFBQTtBQUFULEdBQUYsRUFBb0I7QUFDOUIsV0FBTyxNQUFNLE1BQU1ELE1BQU4sQ0FBYTtBQUFDRixNQUFBQSxHQUFHLEVBQUVILE1BQU47QUFBY00sTUFBQUE7QUFBZCxLQUFiLENBQWI7QUFDRDs7QUFFUSxRQUFIQyxHQUFHLENBQUU7QUFBQ1AsSUFBQUEsTUFBRDtBQUFTUSxJQUFBQTtBQUFULEdBQUYsRUFBd0I7QUFDL0IsV0FBTyxNQUFNLE1BQU1ELEdBQU4sQ0FBVTtBQUFDSixNQUFBQSxHQUFHLEVBQUVILE1BQU47QUFBY1EsTUFBQUE7QUFBZCxLQUFWLENBQWI7QUFDRDs7QUFFREMsRUFBQUEsa0JBQWtCLENBQUU7QUFBQ0MsSUFBQUEsT0FBRDtBQUFVQyxJQUFBQTtBQUFWLEdBQUYsRUFBc0I7QUFDdEMsV0FBUSxVQUFTRCxPQUFRLElBQUdDLE9BQU8sQ0FBQ0MsT0FBUSx5QkFBckMsQ0FBOERDLEtBQXJFO0FBQ0Q7O0FBRURDLEVBQUFBLHVCQUF1QixDQUFFQyxhQUFGLEVBQWlCO0FBQ3RDLFVBQU1DLGFBQWEsR0FBRzNCLGlCQUFpQixDQUFDNEIsTUFBbEIsQ0FBeUIsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEtBQzdDSixhQUFhLENBQUNJLEtBQUQsQ0FBYixHQUF1QkQsR0FBdkIsR0FBNkIsQ0FBQyxHQUFHQSxHQUFKLEVBQVNDLEtBQVQsQ0FEVCxFQUVuQixFQUZtQixDQUF0Qjs7QUFJQSxRQUFJLENBQUNDLGdCQUFFQyxPQUFGLENBQVVMLGFBQVYsQ0FBTCxFQUErQjtBQUM3QixZQUFNLElBQUlNLEtBQUosQ0FBVyxpRUFBRCxHQUNDLGdDQUErQkMsSUFBSSxDQUFDQyxTQUFMLENBQWVSLGFBQWYsQ0FBOEIsRUFEeEUsQ0FBTjtBQUVEO0FBRUY7O0FBckN5RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgRXh0ZW5zaW9uQ29tbWFuZCBmcm9tICcuL2V4dGVuc2lvbi1jb21tYW5kJztcbmltcG9ydCB7IFBMVUdJTl9UWVBFIH0gZnJvbSAnLi4vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBLTk9XTl9QTFVHSU5TIH0gZnJvbSAnLi4vcGx1Z2lucyc7XG5cbmNvbnN0IFJFUV9QTFVHSU5fRklFTERTID0gWydwbHVnaW5OYW1lJywgJ21haW5DbGFzcyddO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5Db21tYW5kIGV4dGVuZHMgRXh0ZW5zaW9uQ29tbWFuZCB7XG5cbiAgY29uc3RydWN0b3IgKHtjb25maWcsIGpzb259KSB7XG4gICAgc3VwZXIoe2NvbmZpZywganNvbiwgdHlwZTogUExVR0lOX1RZUEV9KTtcbiAgICB0aGlzLmtub3duRXh0ZW5zaW9ucyA9IEtOT1dOX1BMVUdJTlM7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsICh7cGx1Z2luLCBpbnN0YWxsVHlwZSwgcGFja2FnZU5hbWV9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmluc3RhbGwoe2V4dDogcGx1Z2luLCBpbnN0YWxsVHlwZSwgcGFja2FnZU5hbWV9KTtcbiAgfVxuXG4gIGFzeW5jIHVuaW5zdGFsbCAoe3BsdWdpbn0pIHtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIudW5pbnN0YWxsKHtleHQ6IHBsdWdpbn0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlICh7cGx1Z2luLCB1bnNhZmV9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnVwZGF0ZSh7ZXh0OiBwbHVnaW4sIHVuc2FmZX0pO1xuICB9XG5cbiAgYXN5bmMgcnVuICh7cGx1Z2luLCBzY3JpcHROYW1lfSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5ydW4oe2V4dDogcGx1Z2luLCBzY3JpcHROYW1lfSk7XG4gIH1cblxuICBnZXRQb3N0SW5zdGFsbFRleHQgKHtleHROYW1lLCBleHREYXRhfSkge1xuICAgIHJldHVybiBgUGx1Z2luICR7ZXh0TmFtZX1AJHtleHREYXRhLnZlcnNpb259IHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWRgLmdyZWVuO1xuICB9XG5cbiAgdmFsaWRhdGVFeHRlbnNpb25GaWVsZHMgKGFwcGl1bVBrZ0RhdGEpIHtcbiAgICBjb25zdCBtaXNzaW5nRmllbGRzID0gUkVRX1BMVUdJTl9GSUVMRFMucmVkdWNlKChhY2MsIGZpZWxkKSA9PiAoXG4gICAgICBhcHBpdW1Qa2dEYXRhW2ZpZWxkXSA/IGFjYyA6IFsuLi5hY2MsIGZpZWxkXVxuICAgICksIFtdKTtcblxuICAgIGlmICghXy5pc0VtcHR5KG1pc3NpbmdGaWVsZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbGxlZCBwbHVnaW4gZGlkIG5vdCBleHBvc2UgY29ycmVjdCBmaWVsZHMgZm9yIGNvbXBhYmlsaXR5IGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGB3aXRoIEFwcGl1bS4gTWlzc2luZyBmaWVsZHM6ICR7SlNPTi5zdHJpbmdpZnkobWlzc2luZ0ZpZWxkcyl9YCk7XG4gICAgfVxuXG4gIH1cblxufVxuIl0sImZpbGUiOiJsaWIvY2xpL3BsdWdpbi1jb21tYW5kLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
package/build/lib/cli/utils.js
CHANGED
|
@@ -5,10 +5,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
+
exports.RingBuffer = exports.JSON_SPACES = void 0;
|
|
8
9
|
exports.errAndQuit = errAndQuit;
|
|
9
10
|
exports.log = log;
|
|
10
11
|
exports.spinWith = spinWith;
|
|
11
|
-
exports.JSON_SPACES = void 0;
|
|
12
12
|
|
|
13
13
|
require("source-map-support/register");
|
|
14
14
|
|
|
@@ -53,7 +53,33 @@ async function spinWith(json, msg, fn) {
|
|
|
53
53
|
spinner.fail();
|
|
54
54
|
throw err;
|
|
55
55
|
}
|
|
56
|
-
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
class RingBuffer {
|
|
59
|
+
constructor(size = 50) {
|
|
60
|
+
this.size = size;
|
|
61
|
+
this.buffer = [];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
getBuff() {
|
|
65
|
+
return this.buffer;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
dequeue() {
|
|
69
|
+
this.buffer.shift();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
enqueue(item) {
|
|
73
|
+
if (this.buffer.length >= this.size) {
|
|
74
|
+
this.dequeue();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
this.buffer.push(item);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
exports.RingBuffer = RingBuffer;require('source-map-support').install();
|
|
57
83
|
|
|
58
84
|
|
|
59
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvdXRpbHMuanMiXSwibmFtZXMiOlsiSlNPTl9TUEFDRVMiLCJlcnJBbmRRdWl0IiwianNvbiIsIm1zZyIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3IiLCJyZWQiLCJzdGRlcnIiLCJwcm9jZXNzIiwiZXhpdCIsInNwaW5XaXRoIiwiZm4iLCJzcGlubmVyIiwic3RhcnQiLCJyZXMiLCJzdWNjZWVkIiwiZXJyIiwiZmFpbCIsIlJpbmdCdWZmZXIiLCJjb25zdHJ1Y3RvciIsInNpemUiLCJidWZmZXIiLCJnZXRCdWZmIiwiZGVxdWV1ZSIsInNoaWZ0IiwiZW5xdWV1ZSIsIml0ZW0iLCJsZW5ndGgiLCJwdXNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUVBOztBQUVBLE1BQU1BLFdBQVcsR0FBRyxDQUFwQjs7O0FBT0EsU0FBU0MsVUFBVCxDQUFxQkMsSUFBckIsRUFBMkJDLEdBQTNCLEVBQWdDO0FBQzlCLE1BQUlELElBQUosRUFBVTtBQUNSRSxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsSUFBSSxDQUFDQyxTQUFMLENBQWU7QUFBQ0MsTUFBQUEsS0FBSyxFQUFHLEdBQUVMLEdBQUk7QUFBZixLQUFmLEVBQWtDLElBQWxDLEVBQXdDSCxXQUF4QyxDQUFaO0FBQ0QsR0FGRCxNQUVPO0FBQ0xJLElBQUFBLE9BQU8sQ0FBQ0ksS0FBUixDQUFlLEdBQUVMLEdBQUksRUFBUCxDQUFTTSxHQUF2Qjs7QUFDQSxRQUFJTixHQUFHLENBQUNPLE1BQVIsRUFBZ0I7QUFDZE4sTUFBQUEsT0FBTyxDQUFDSSxLQUFSLENBQWUsR0FBRUwsR0FBRyxDQUFDTyxNQUFPLEVBQWQsQ0FBZ0JELEdBQTlCO0FBQ0Q7QUFDRjs7QUFDREUsRUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWEsQ0FBYjtBQUNEOztBQU9ELFNBQVNQLEdBQVQsQ0FBY0gsSUFBZCxFQUFvQkMsR0FBcEIsRUFBeUI7QUFDdkIsR0FBQ0QsSUFBRCxJQUFTRSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsR0FBWixDQUFUO0FBQ0Q7O0FBUUQsZUFBZVUsUUFBZixDQUF5QlgsSUFBekIsRUFBK0JDLEdBQS9CLEVBQW9DVyxFQUFwQyxFQUF3QztBQUN0QyxNQUFJWixJQUFKLEVBQVU7QUFDUixXQUFPLE1BQU1ZLEVBQUUsRUFBZjtBQUNEOztBQUNELFFBQU1DLE9BQU8sR0FBRyxrQkFBSVosR0FBSixFQUFTYSxLQUFULEVBQWhCO0FBQ0EsTUFBSUMsR0FBSjs7QUFDQSxNQUFJO0FBQ0ZBLElBQUFBLEdBQUcsR0FBRyxNQUFNSCxFQUFFLEVBQWQ7QUFDQUMsSUFBQUEsT0FBTyxDQUFDRyxPQUFSO0FBQ0EsV0FBT0QsR0FBUDtBQUNELEdBSkQsQ0FJRSxPQUFPRSxHQUFQLEVBQVk7QUFDWkosSUFBQUEsT0FBTyxDQUFDSyxJQUFSO0FBQ0EsVUFBTUQsR0FBTjtBQUNEO0FBQ0Y7O0FBRUQsTUFBTUUsVUFBTixDQUFpQjtBQUNmQyxFQUFBQSxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7QUFDdEIsU0FBS0EsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0MsTUFBTCxHQUFjLEVBQWQ7QUFDRDs7QUFDREMsRUFBQUEsT0FBTyxHQUFJO0FBQ1QsV0FBTyxLQUFLRCxNQUFaO0FBQ0Q7O0FBQ0RFLEVBQUFBLE9BQU8sR0FBSTtBQUNULFNBQUtGLE1BQUwsQ0FBWUcsS0FBWjtBQUNEOztBQUNEQyxFQUFBQSxPQUFPLENBQUVDLElBQUYsRUFBUTtBQUNiLFFBQUksS0FBS0wsTUFBTCxDQUFZTSxNQUFaLElBQXNCLEtBQUtQLElBQS9CLEVBQXFDO0FBQ25DLFdBQUtHLE9BQUw7QUFDRDs7QUFDRCxTQUFLRixNQUFMLENBQVlPLElBQVosQ0FBaUJGLElBQWpCO0FBQ0Q7O0FBaEJjIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuXG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5cbmNvbnN0IEpTT05fU1BBQ0VTID0gNDtcblxuLyoqKlxuICogTG9nIGFuIGVycm9yIHRvIHRoZSBjb25zb2xlIGFuZCBleGl0IHRoZSBwcm9jZXNzLlxuICogQHBhcmFtIHtib29sZWFufSBqc29uIC0gd2hldGhlciB3ZSBzaG91bGQgbG9nIGpzb24gb3IgdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IG1zZyAtIGVycm9yIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZXJyQW5kUXVpdCAoanNvbiwgbXNnKSB7XG4gIGlmIChqc29uKSB7XG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiBgJHttc2d9YH0sIG51bGwsIEpTT05fU1BBQ0VTKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcihgJHttc2d9YC5yZWQpO1xuICAgIGlmIChtc2cuc3RkZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke21zZy5zdGRlcnJ9YC5yZWQpO1xuICAgIH1cbiAgfVxuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBsb2cgc29tZXRoaW5nIHRvIHRoZSBjb25zb2xlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGpzb24gLSB3aGV0aGVyIHdlIGFyZSBpbiBqc29uIG1vZGUgKGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdCBsb2cpXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIC0gc3RyaW5nIHRvIGxvZ1xuICovXG5mdW5jdGlvbiBsb2cgKGpzb24sIG1zZykge1xuICAhanNvbiAmJiBjb25zb2xlLmxvZyhtc2cpO1xufVxuXG4vKipcbiAqIFN0YXJ0IGEgc3Bpbm5lciwgZXhlY3V0ZSBhbiBhc3luYyBmdW5jdGlvbiwgYW5kIHRoZW4gc3RvcCB0aGUgc3Bpbm5lclxuICogQHBhcmFtIHtib29sZWFufSBqc29uIC0gd2hldGhlciB3ZSBhcmUgaW4ganNvbiBtb2RlIChhbmQgc2hvdWxkIHRoZXJlZm9yZSBub3QgbG9nKVxuICogQHBhcmFtIHtzdHJpbmd9IG1zZyAtIHN0cmluZyB0byBsb2dcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIHNwaW5uaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwaW5XaXRoIChqc29uLCBtc2csIGZuKSB7XG4gIGlmIChqc29uKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH1cbiAgY29uc3Qgc3Bpbm5lciA9IG9yYShtc2cpLnN0YXJ0KCk7XG4gIGxldCByZXM7XG4gIHRyeSB7XG4gICAgcmVzID0gYXdhaXQgZm4oKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoKTtcbiAgICByZXR1cm4gcmVzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzcGlubmVyLmZhaWwoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY2xhc3MgUmluZ0J1ZmZlciB7XG4gIGNvbnN0cnVjdG9yIChzaXplID0gNTApIHtcbiAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgIHRoaXMuYnVmZmVyID0gW107XG4gIH1cbiAgZ2V0QnVmZiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyO1xuICB9XG4gIGRlcXVldWUgKCkge1xuICAgIHRoaXMuYnVmZmVyLnNoaWZ0KCk7XG4gIH1cbiAgZW5xdWV1ZSAoaXRlbSkge1xuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPj0gdGhpcy5zaXplKSB7XG4gICAgICB0aGlzLmRlcXVldWUoKTtcbiAgICB9XG4gICAgdGhpcy5idWZmZXIucHVzaChpdGVtKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBlcnJBbmRRdWl0LFxuICBsb2csXG4gIHNwaW5XaXRoLFxuICBKU09OX1NQQUNFUyxcbiAgUmluZ0J1ZmZlclxufTtcbiJdLCJmaWxlIjoibGliL2NsaS91dGlscy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.formatErrors = formatErrors;
|
|
9
|
+
exports.readConfigFile = readConfigFile;
|
|
10
|
+
|
|
11
|
+
require("source-map-support/register");
|
|
12
|
+
|
|
13
|
+
var _betterAjvErrors = _interopRequireDefault(require("@sidvind/better-ajv-errors"));
|
|
14
|
+
|
|
15
|
+
var _lilconfig = require("lilconfig");
|
|
16
|
+
|
|
17
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
18
|
+
|
|
19
|
+
var _yaml = _interopRequireDefault(require("yaml"));
|
|
20
|
+
|
|
21
|
+
var _schema = require("./schema/schema");
|
|
22
|
+
|
|
23
|
+
function yamlLoader(filepath, content) {
|
|
24
|
+
return _yaml.default.parse(content);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const rawConfig = new Map();
|
|
28
|
+
|
|
29
|
+
function jsonLoader(filepath, content) {
|
|
30
|
+
rawConfig.set(filepath, content);
|
|
31
|
+
return JSON.parse(content);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function loadConfigFile(lc, filepath) {
|
|
35
|
+
try {
|
|
36
|
+
return await lc.load(filepath);
|
|
37
|
+
} catch (err) {
|
|
38
|
+
if (err.code === 'ENOENT') {
|
|
39
|
+
err.message = `Config file not found at user-provided path: ${filepath}`;
|
|
40
|
+
throw err;
|
|
41
|
+
} else if (err instanceof SyntaxError) {
|
|
42
|
+
err.message = `Config file at user-provided path ${filepath} is invalid:\n${err.message}`;
|
|
43
|
+
throw err;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
throw err;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async function searchConfigFile(lc) {
|
|
51
|
+
return await lc.search();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function formatErrors(errors = [], config = {}, opts = {}) {
|
|
55
|
+
if (errors && !errors.length) {
|
|
56
|
+
throw new TypeError('Array of errors must be non-empty');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return (0, _betterAjvErrors.default)((0, _schema.getSchema)(opts.schemaId), config, errors, {
|
|
60
|
+
json: opts.json,
|
|
61
|
+
format: 'cli'
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async function readConfigFile(filepath, opts = {}) {
|
|
66
|
+
const lc = (0, _lilconfig.lilconfig)('appium', {
|
|
67
|
+
loaders: {
|
|
68
|
+
'.yaml': yamlLoader,
|
|
69
|
+
'.yml': yamlLoader,
|
|
70
|
+
'.json': jsonLoader,
|
|
71
|
+
noExt: jsonLoader
|
|
72
|
+
},
|
|
73
|
+
packageProp: 'appiumConfig'
|
|
74
|
+
});
|
|
75
|
+
const result = filepath ? await loadConfigFile(lc, filepath) : await searchConfigFile(lc);
|
|
76
|
+
|
|
77
|
+
if (result && !result.isEmpty && result.filepath) {
|
|
78
|
+
const {
|
|
79
|
+
normalize = true,
|
|
80
|
+
pretty = true
|
|
81
|
+
} = opts;
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
let configResult;
|
|
85
|
+
const errors = (0, _schema.validate)(result.config);
|
|
86
|
+
|
|
87
|
+
if (_lodash.default.isEmpty(errors)) {
|
|
88
|
+
configResult = { ...result,
|
|
89
|
+
errors
|
|
90
|
+
};
|
|
91
|
+
} else {
|
|
92
|
+
const reason = formatErrors(errors, result.config, {
|
|
93
|
+
json: rawConfig.get(result.filepath),
|
|
94
|
+
pretty
|
|
95
|
+
});
|
|
96
|
+
configResult = reason ? { ...result,
|
|
97
|
+
errors,
|
|
98
|
+
reason
|
|
99
|
+
} : { ...result,
|
|
100
|
+
errors
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (normalize) {
|
|
105
|
+
configResult.config = normalizeConfig(configResult.config);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return configResult;
|
|
109
|
+
} finally {
|
|
110
|
+
rawConfig.delete(result.filepath);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return result !== null && result !== void 0 ? result : {};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function normalizeConfig(config) {
|
|
118
|
+
const schema = (0, _schema.getSchema)();
|
|
119
|
+
|
|
120
|
+
const normalize = (config, section) => {
|
|
121
|
+
const obj = _lodash.default.isUndefined(section) ? config : _lodash.default.get(config, section, config);
|
|
122
|
+
|
|
123
|
+
const mappedObj = _lodash.default.mapKeys(obj, (__, prop) => {
|
|
124
|
+
var _schema$properties$pr, _schema$properties$pr2;
|
|
125
|
+
|
|
126
|
+
return (_schema$properties$pr = (_schema$properties$pr2 = schema.properties[prop]) === null || _schema$properties$pr2 === void 0 ? void 0 : _schema$properties$pr2.appiumCliDest) !== null && _schema$properties$pr !== void 0 ? _schema$properties$pr : _lodash.default.camelCase(prop);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
return _lodash.default.mapValues(mappedObj, (value, property) => {
|
|
130
|
+
const nextSection = section ? `${section}.${property}` : property;
|
|
131
|
+
return isSchemaTypeObject(value) ? normalize(config, nextSection) : value;
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
const isSchemaTypeObject = schema => Boolean(schema.properties);
|
|
136
|
+
|
|
137
|
+
return normalize(config);
|
|
138
|
+
}require('source-map-support').install();
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25maWctZmlsZS5qcyJdLCJuYW1lcyI6WyJ5YW1sTG9hZGVyIiwiZmlsZXBhdGgiLCJjb250ZW50IiwieWFtbCIsInBhcnNlIiwicmF3Q29uZmlnIiwiTWFwIiwianNvbkxvYWRlciIsInNldCIsIkpTT04iLCJsb2FkQ29uZmlnRmlsZSIsImxjIiwibG9hZCIsImVyciIsImNvZGUiLCJtZXNzYWdlIiwiU3ludGF4RXJyb3IiLCJzZWFyY2hDb25maWdGaWxlIiwic2VhcmNoIiwiZm9ybWF0RXJyb3JzIiwiZXJyb3JzIiwiY29uZmlnIiwib3B0cyIsImxlbmd0aCIsIlR5cGVFcnJvciIsInNjaGVtYUlkIiwianNvbiIsImZvcm1hdCIsInJlYWRDb25maWdGaWxlIiwibG9hZGVycyIsIm5vRXh0IiwicGFja2FnZVByb3AiLCJyZXN1bHQiLCJpc0VtcHR5Iiwibm9ybWFsaXplIiwicHJldHR5IiwiY29uZmlnUmVzdWx0IiwiXyIsInJlYXNvbiIsImdldCIsIm5vcm1hbGl6ZUNvbmZpZyIsImRlbGV0ZSIsInNjaGVtYSIsInNlY3Rpb24iLCJvYmoiLCJpc1VuZGVmaW5lZCIsIm1hcHBlZE9iaiIsIm1hcEtleXMiLCJfXyIsInByb3AiLCJwcm9wZXJ0aWVzIiwiYXBwaXVtQ2xpRGVzdCIsImNhbWVsQ2FzZSIsIm1hcFZhbHVlcyIsInZhbHVlIiwicHJvcGVydHkiLCJuZXh0U2VjdGlvbiIsImlzU2NoZW1hVHlwZU9iamVjdCIsIkJvb2xlYW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU1BLFNBQVNBLFVBQVQsQ0FBcUJDLFFBQXJCLEVBQStCQyxPQUEvQixFQUF3QztBQUN0QyxTQUFPQyxjQUFLQyxLQUFMLENBQVdGLE9BQVgsQ0FBUDtBQUNEOztBQVFELE1BQU1HLFNBQVMsR0FBRyxJQUFJQyxHQUFKLEVBQWxCOztBQU9BLFNBQVNDLFVBQVQsQ0FBcUJOLFFBQXJCLEVBQStCQyxPQUEvQixF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QU9aLGdCQUFFZ0IsU0FBRixDQUFZUCxTQUFaLEVBQXVCLENBQUNRLEtBQUQsRUFBUUMsUUFBUixLQUFxQjtBQUNqRCxZQUFNQyxXQUFXLEdBQUdiLE9BQU8sR0FBSSxHQUFFQSxPQUFRLElBQUdZLFFBQVMsRUFBMUIsR0FBOEJBLFFBQXpEO0FBQ0EsYUFBT0Usa0JBQWtCLENBQUNILEtBQUQsQ0FBbEIsR0FBNEJwQixTQUFTLENBQUNiLE1BQUQsRUFBU21DLFdBQVQsQ0FBckMsR0FBNkRGLEtBQXBFO0FBQ0QsS0FITSxDQUFQO0FBSUQsR0FYRDs7QUFpQkEsUUFBTUcsa0JBQWtCLEdBQUlmLE1BQUQsSUFBWWdCLE9BQU8sQ0FBQ2hCLE1BQU0sQ0FBQ1EsVUFBUixDQUE5Qzs7QUFFQSxTQUFPaEIsU0FBUyxDQUFDYixNQUFELENBQWhCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IGJldHRlckFqdkVycm9ycyBmcm9tICdAc2lkdmluZC9iZXR0ZXItYWp2LWVycm9ycyc7XG5pbXBvcnQgeyBsaWxjb25maWcgfSBmcm9tICdsaWxjb25maWcnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB5YW1sIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgZ2V0U2NoZW1hLCB2YWxpZGF0ZSB9IGZyb20gJy4vc2NoZW1hL3NjaGVtYSc7XG5cbi8qKlxuICogbGlsY29uZmlnIGxvYWRlciB0byBoYW5kbGUgYC55YW1sYCBmaWxlc1xuICogQHR5cGUge2ltcG9ydCgnbGlsY29uZmlnJykuTG9hZGVyU3luY31cbiAqL1xuZnVuY3Rpb24geWFtbExvYWRlciAoZmlsZXBhdGgsIGNvbnRlbnQpIHtcbiAgcmV0dXJuIHlhbWwucGFyc2UoY29udGVudCk7XG59XG5cbi8qKlxuICogQSBjYWNoZSBvZiB0aGUgcmF3IGNvbmZpZyBmaWxlIChhIEpTT04gc3RyaW5nKSBhdCBhIGZpbGVwYXRoLlxuICogVGhpcyBpcyB1c2VkIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nLlxuICogTm90ZSB0aGF0IGNvbmZpZyBmaWxlcyBuZWVkbid0IGJlIEpTT04sIGJ1dCBpdCBoZWxwcyBpZiB0aGV5IGFyZS5cbiAqIEB0eXBlIHtNYXA8c3RyaW5nLFJhd0pzb24+fVxuICovXG5jb25zdCByYXdDb25maWcgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogQ3VzdG9tIEpTT04gbG9hZGVyIHRoYXQgY2FjaGVzIHRoZSByYXcgY29uZmlnIGZpbGUgKGZvciB1c2Ugd2l0aCBgYmV0dGVyLWFqdi1lcnJvcnNgKS5cbiAqIElmIGl0IHdlcmVuJ3QgZm9yIHRoaXMgY2FjaGUsIHRoaXMgd291bGQgYmUgdW5uZWNlc3NhcnkuXG4gKiBAdHlwZSB7aW1wb3J0KCdsaWxjb25maWcnKS5Mb2FkZXJTeW5jfVxuICovXG5mdW5jdGlvbiBqc29uTG9hZGVyIChmaWxlcGF0aCwgY29udGVudCkge1xuICByYXdDb25maWcuc2V0KGZpbGVwYXRoLCBjb250ZW50KTtcbiAgcmV0dXJuIEpTT04ucGFyc2UoY29udGVudCk7XG59XG5cbi8qKlxuICogTG9hZHMgYSBjb25maWcgZmlsZSBmcm9tIGFuIGV4cGxpY2l0IHBhdGhcbiAqIEBwYXJhbSB7TGlsY29uZmlnQXN5bmNTZWFyY2hlcn0gbGMgLSBsaWxjb25maWcgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlcGF0aCAtIFBhdGggdG8gY29uZmlnIGZpbGVcbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydCgnbGlsY29uZmlnJykuTGlsY29uZmlnUmVzdWx0Pn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9hZENvbmZpZ0ZpbGUgKGxjLCBmaWxlcGF0aCkge1xuICB0cnkge1xuICAgIC8vIHJlbW92aW5nIFwiYXdhaXRcIiB3aWxsIGNhdXNlIGFueSByZWplY3Rpb24gdG8gX25vdF8gYmUgY2F1Z2h0IGluIHRoaXMgYmxvY2shXG4gICAgcmV0dXJuIGF3YWl0IGxjLmxvYWQoZmlsZXBhdGgpO1xuICB9IGNhdGNoICgvKiogQHR5cGUge3Vua25vd259ICovZXJyKSB7XG4gICAgaWYgKC8qKiBAdHlwZSB7Tm9kZUpTLkVycm5vRXhjZXB0aW9ufSAqLyhlcnIpLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAvKiogQHR5cGUge05vZGVKUy5FcnJub0V4Y2VwdGlvbn0gKi8oZXJyKS5tZXNzYWdlID0gYENvbmZpZyBmaWxlIG5vdCBmb3VuZCBhdCB1c2VyLXByb3ZpZGVkIHBhdGg6ICR7ZmlsZXBhdGh9YDtcbiAgICAgIHRocm93IGVycjtcbiAgICB9IGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAvLyBnZW5lcmFsbHkgaW52YWxpZCBKU09OXG4gICAgICBlcnIubWVzc2FnZSA9IGBDb25maWcgZmlsZSBhdCB1c2VyLXByb3ZpZGVkIHBhdGggJHtmaWxlcGF0aH0gaXMgaW52YWxpZDpcXG4ke2Vyci5tZXNzYWdlfWA7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKipcbiAqIFNlYXJjaGVzIGZvciBhIGNvbmZpZyBmaWxlXG4gKiBAcGFyYW0ge0xpbGNvbmZpZ0FzeW5jU2VhcmNoZXJ9IGxjIC0gbGlsY29uZmlnIGluc3RhbmNlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoJ2xpbGNvbmZpZycpLkxpbGNvbmZpZ1Jlc3VsdD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNlYXJjaENvbmZpZ0ZpbGUgKGxjKSB7XG4gIHJldHVybiBhd2FpdCBsYy5zZWFyY2goKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBlcnJvcnMgYW5kIHRoZSByZXN1bHQgb2YgbG9hZGluZyBhIGNvbmZpZyBmaWxlLCBnZW5lcmF0ZSBhXG4gKiBoZWxwZnVsIHN0cmluZyBmb3IgdGhlIHVzZXIuXG4gKlxuICogLSBJZiBgb3B0c2AgY29udGFpbnMgYSBganNvbmAgcHJvcGVydHksIHRoaXMgc2hvdWxkIGJlIHRoZSBvcmlnaW5hbCBKU09OXG4gKiAgIF9zdHJpbmdfIG9mIHRoZSBjb25maWcgZmlsZS4gIFRoaXMgaXMgb25seSBhcHBsaWNhYmxlIGlmIHRoZSBjb25maWcgZmlsZVxuICogICB3YXMgaW4gSlNPTiBmb3JtYXQuIElmIHByZXNlbnQsIGl0IHdpbGwgYXNzb2NpYXRlIGxpbmUgbnVtYmVycyB3aXRoIGVycm9ycy5cbiAqIC0gSWYgYGVycm9yc2AgaGFwcGVucyB0byBiZSBlbXB0eSwgdGhpcyB3aWxsIHRocm93LlxuICogQHBhcmFtIHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IGVycm9ycyAtIE5vbi1lbXB0eSBhcnJheSBvZiBlcnJvcnMuIFJlcXVpcmVkLlxuICogQHBhcmFtIHtSZWFkQ29uZmlnRmlsZVJlc3VsdFsnY29uZmlnJ118YW55fSBbY29uZmlnXSAtXG4gKiBDb25maWd1cmF0aW9uICYgbWV0YWRhdGFcbiAqIEBwYXJhbSB7Rm9ybWF0Q29uZmlnRXJyb3JzT3B0aW9uc30gW29wdHNdXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGBlcnJvcnNgIGlzIGVtcHR5XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RXJyb3JzIChlcnJvcnMgPSBbXSwgY29uZmlnID0ge30sIG9wdHMgPSB7fSkge1xuICBpZiAoZXJyb3JzICYmICFlcnJvcnMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgb2YgZXJyb3JzIG11c3QgYmUgbm9uLWVtcHR5Jyk7XG4gIH1cbiAgcmV0dXJuIGJldHRlckFqdkVycm9ycyhnZXRTY2hlbWEob3B0cy5zY2hlbWFJZCksIGNvbmZpZywgZXJyb3JzLCB7XG4gICAganNvbjogb3B0cy5qc29uLFxuICAgIGZvcm1hdDogJ2NsaScsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdpdmVuIGFuIG9wdGlvbmFsIHBhdGgsIHJlYWQgYSBjb25maWcgZmlsZS4gVmFsaWRhdGVzIHRoZSBjb25maWcgZmlsZS5cbiAqXG4gKiBDYWxsIHtAbGluayB2YWxpZGF0ZX0gaWYgeW91IGFscmVhZHkgaGF2ZSBhIGNvbmZpZyBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZpbGVwYXRoXSAtIFBhdGggdG8gY29uZmlnIGZpbGUsIGlmIHdlIGhhdmUgb25lXG4gKiBAcGFyYW0ge1JlYWRDb25maWdGaWxlT3B0aW9uc30gW29wdHNdIC0gT3B0aW9uc1xuICogQHB1YmxpY1xuICogQHJldHVybnMge1Byb21pc2U8UmVhZENvbmZpZ0ZpbGVSZXN1bHQ+fSBDb250YWlucyBjb25maWcgYW5kIGZpbGVwYXRoLCBpZiBmb3VuZCwgYW5kIGFueSBlcnJvcnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRDb25maWdGaWxlIChmaWxlcGF0aCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGxjID0gbGlsY29uZmlnKCdhcHBpdW0nLCB7XG4gICAgbG9hZGVyczoge1xuICAgICAgJy55YW1sJzogeWFtbExvYWRlcixcbiAgICAgICcueW1sJzogeWFtbExvYWRlcixcbiAgICAgICcuanNvbic6IGpzb25Mb2FkZXIsXG4gICAgICBub0V4dDoganNvbkxvYWRlcixcbiAgICB9LFxuICAgIHBhY2thZ2VQcm9wOiAnYXBwaXVtQ29uZmlnJ1xuICB9KTtcblxuICBjb25zdCByZXN1bHQgPSBmaWxlcGF0aFxuICAgID8gYXdhaXQgbG9hZENvbmZpZ0ZpbGUobGMsIGZpbGVwYXRoKVxuICAgIDogYXdhaXQgc2VhcmNoQ29uZmlnRmlsZShsYyk7XG5cbiAgaWYgKHJlc3VsdCAmJiAhcmVzdWx0LmlzRW1wdHkgJiYgcmVzdWx0LmZpbGVwYXRoKSB7XG4gICAgY29uc3Qge25vcm1hbGl6ZSA9IHRydWUsIHByZXR0eSA9IHRydWV9ID0gb3B0cztcbiAgICB0cnkge1xuICAgICAgLyoqIEB0eXBlIHtSZWFkQ29uZmlnRmlsZVJlc3VsdH0gKi9cbiAgICAgIGxldCBjb25maWdSZXN1bHQ7XG4gICAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZShyZXN1bHQuY29uZmlnKTtcbiAgICAgIGlmIChfLmlzRW1wdHkoZXJyb3JzKSkge1xuICAgICAgICBjb25maWdSZXN1bHQgPSB7Li4ucmVzdWx0LCBlcnJvcnN9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVhc29uID0gZm9ybWF0RXJyb3JzKGVycm9ycywgcmVzdWx0LmNvbmZpZywge1xuICAgICAgICAgIGpzb246IHJhd0NvbmZpZy5nZXQocmVzdWx0LmZpbGVwYXRoKSxcbiAgICAgICAgICBwcmV0dHksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25maWdSZXN1bHQgPSByZWFzb25cbiAgICAgICAgICA/IHsuLi5yZXN1bHQsIGVycm9ycywgcmVhc29ufVxuICAgICAgICAgIDogey4uLnJlc3VsdCwgZXJyb3JzfTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vcm1hbGl6ZSkge1xuICAgICAgICAvLyBub3JtYWxpemUgKHRvIGNhbWVsIGNhc2UpIGFsbCB0b3AtbGV2ZWwgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGNvbmZpZyBmaWxlXG4gICAgICAgIGNvbmZpZ1Jlc3VsdC5jb25maWcgPSBub3JtYWxpemVDb25maWcoXG4gICAgICAgICAgLyoqIEB0eXBlIHtBcHBpdW1Db25maWd9ICovIChjb25maWdSZXN1bHQuY29uZmlnKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbmZpZ1Jlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gY2xlYW4gdXAgdGhlIHJhdyBjb25maWcgZmlsZSBjYWNoZSwgd2hpY2ggaXMgb25seSBrZXB0IHRvIGJldHRlciByZXBvcnQgZXJyb3JzLlxuICAgICAgcmF3Q29uZmlnLmRlbGV0ZShyZXN1bHQuZmlsZXBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0ID8/IHt9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgc2NoZW1hIHByb3BlcnR5IG5hbWVzIHRvIGVpdGhlciBhKSB0aGUgdmFsdWUgb2YgdGhlIGBhcHBpdW1DbGlEZXN0YCBwcm9wZXJ0eSwgaWYgYW55OyBvciBiKSBjYW1lbC1jYXNlXG4gKiBAcGFyYW0ge0FwcGl1bUNvbmZpZ30gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBvYmplY3RcbiAqIEByZXR1cm5zIHtOb3JtYWxpemVkQXBwaXVtQ29uZmlnfSBOZXcgb2JqZWN0IHdpdGggY2FtZWwtY2FzZWQga2V5cyAob3IgYGRlc3RgIGtleXMpLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVDb25maWcgKGNvbmZpZykge1xuICBjb25zdCBzY2hlbWEgPSBnZXRTY2hlbWEoKTtcbiAgLyoqXG4gICAqIEBwYXJhbSB7QXBwaXVtQ29uZmlnfSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWN0aW9uXSAtIEtleXBhdGggKGxvZGFzaCBgXy5nZXQoKWAgc3R5bGUpIHRvIHNlY3Rpb24gb2YgY29uZmlnLiBJZiBvbWl0dGVkLCBhc3N1bWUgcm9vdCBBcHBpdW0gY29uZmlnIHNjaGVtYVxuICAgKiBAcmV0dXJucyBOb3JtYWxpemVkIHNlY3Rpb24gb2YgY29uZmlnXG4gICAqL1xuICBjb25zdCBub3JtYWxpemUgPSAoY29uZmlnLCBzZWN0aW9uKSA9PiB7XG4gICAgY29uc3Qgb2JqID0gXy5pc1VuZGVmaW5lZChzZWN0aW9uKSA/IGNvbmZpZyA6IF8uZ2V0KGNvbmZpZywgc2VjdGlvbiwgY29uZmlnKTtcblxuICAgIGNvbnN0IG1hcHBlZE9iaiA9IF8ubWFwS2V5cyhvYmosIChfXywgcHJvcCkgPT5cbiAgICAgIHNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BdPy5hcHBpdW1DbGlEZXN0ID8/IF8uY2FtZWxDYXNlKHByb3ApLFxuICAgICk7XG5cbiAgICByZXR1cm4gXy5tYXBWYWx1ZXMobWFwcGVkT2JqLCAodmFsdWUsIHByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBuZXh0U2VjdGlvbiA9IHNlY3Rpb24gPyBgJHtzZWN0aW9ufS4ke3Byb3BlcnR5fWAgOiBwcm9wZXJ0eTtcbiAgICAgIHJldHVybiBpc1NjaGVtYVR5cGVPYmplY3QodmFsdWUpID8gbm9ybWFsaXplKGNvbmZpZywgbmV4dFNlY3Rpb24pIDogdmFsdWU7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzY2hlbWEgcHJvcCByZWZlcmVuY2VzIGFuIG9iamVjdCwgb3IgaWYgaXQncyBhbiBvYmplY3QgaXRzZWxmXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdhanYnKS5TY2hlbWFPYmplY3R8b2JqZWN0fSBzY2hlbWEgLSBSZWZlcmVuY2luZyBzY2hlbWEgb2JqZWN0XG4gICAqL1xuICBjb25zdCBpc1NjaGVtYVR5cGVPYmplY3QgPSAoc2NoZW1hKSA9PiBCb29sZWFuKHNjaGVtYS5wcm9wZXJ0aWVzKTtcblxuICByZXR1cm4gbm9ybWFsaXplKGNvbmZpZyk7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNhbGxpbmcge0BsaW5rIHJlYWRDb25maWdGaWxlfS5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlYWRDb25maWdGaWxlUmVzdWx0XG4gKiBAcHJvcGVydHkge2ltcG9ydCgnYWp2JykuRXJyb3JPYmplY3RbXX0gW2Vycm9yc10gLSBWYWxpZGF0aW9uIGVycm9yc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmaWxlcGF0aF0gLSBUaGUgcGF0aCB0byB0aGUgY29uZmlnIGZpbGUsIGlmIGZvdW5kXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpc0VtcHR5XSAtIElmIGB0cnVlYCwgdGhlIGNvbmZpZyBmaWxlIGV4aXN0cyBidXQgaXMgZW1wdHlcbiAqIEBwcm9wZXJ0eSB7QXBwaXVtQ29uZmlnfSBbY29uZmlnXSAtIFRoZSBwYXJzZWQgY29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd8YmV0dGVyQWp2RXJyb3JzLklPdXRwdXRFcnJvcltdfSBbcmVhc29uXSAtIEh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2VzIGFuZCBzdWdnZXN0aW9ucy4gSWYgdGhlIGBwcmV0dHlgIG9wdGlvbiBpcyBgdHJ1ZWAsIHRoaXMgd2lsbCBiZSBhIG5pY2Ugc3RyaW5nIHRvIHByaW50LlxuICovXG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJlYWRDb25maWdGaWxlfS5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlYWRDb25maWdGaWxlT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbcHJldHR5PXRydWVdIElmIGBmYWxzZWAsIGRvIG5vdCB1c2UgY29sb3IgYW5kIGZhbmN5IGZvcm1hdHRpbmcgaW4gdGhlIGByZWFzb25gIHByb3BlcnR5IG9mIHRoZSB7QGxpbmsgUmVhZENvbmZpZ0ZpbGVSZXN1bHR9LiBUaGUgdmFsdWUgb2YgYHJlYXNvbmAgaXMgdGhlbiBzdWl0YWJsZSBmb3IgbWFjaGluZS1yZWFkaW5nLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbm9ybWFsaXplPXRydWVdIElmIGBmYWxzZWAsIGRvIG5vdCBub3JtYWxpemUga2V5IG5hbWVzIHRvIGNhbWVsIGNhc2UuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGFuIGBBc3luY1NlYXJjaGVyYCB3aGljaCBpcyBpbmV4cGxpY2FibHkgX25vdF8gZXhwb3J0ZWQgYnkgdGhlIGBsaWxjb25maWdgIHR5cGUgZGVmaW5pdGlvbi5cbiAqIEB0eXBlZGVmIHtSZXR1cm5UeXBlPGltcG9ydCgnbGlsY29uZmlnJylbXCJsaWxjb25maWdcIl0+fSBMaWxjb25maWdBc3luY1NlYXJjaGVyXG4gKi9cblxuLyoqXG4gKiBUaGUgY29udGVudHMgb2YgYW4gQXBwaXVtIGNvbmZpZyBmaWxlLiBHZW5lcmF0ZWQgZnJvbSBzY2hlbWFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL3R5cGVzL3R5cGVzJykuQXBwaXVtQ29uZmlnfSBBcHBpdW1Db25maWdcbiAqL1xuXG4vKipcbiAqIFRoZSBjb250ZW50cyBvZiBhbiBBcHBpdW0gY29uZmlnIGZpbGUgd2l0aCBjYW1lbGNhc2VkIHByb3BlcnR5IG5hbWVzIChhbmQgdXNpbmcgYGFwcGl1bUNsaURlc3RgIHZhbHVlIGlmIHByZXNlbnQpLiBHZW5lcmF0ZWQgZnJvbSB7QGxpbmsgQXBwaXVtQ29uZmlnfVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vdHlwZXMvdHlwZXMnKS5Ob3JtYWxpemVkQXBwaXVtQ29uZmlnfSBOb3JtYWxpemVkQXBwaXVtQ29uZmlnXG4gKi9cblxuLyoqXG4gKiBUaGUgc3RyaW5nIHNob3VsZCBiZSBhIHJhdyBKU09OIHN0cmluZy5cbiAqIEB0eXBlZGVmIHtzdHJpbmd9IFJhd0pzb25cbiAqL1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBmb3JtYXRFcnJvcnN9LlxuICogQHR5cGVkZWYge09iamVjdH0gRm9ybWF0Q29uZmlnRXJyb3JzT3B0aW9uc1xuICogQHByb3BlcnR5IHtpbXBvcnQoJy4vY29uZmlnLWZpbGUnKS5SYXdKc29ufSBbanNvbl0gLSBSYXcgSlNPTiBjb25maWcgKGFzIHN0cmluZylcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3ByZXR0eT10cnVlXSAtIFdoZXRoZXIgdG8gZm9ybWF0IGVycm9ycyBhcyBhIENMSS1mcmllbmRseSBzdHJpbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSAgW3NjaGVtYUlkXSAtIFNwZWNpZmljIElEIG9mIGEgcHJvcDsgb3RoZXJ3aXNlIGVudGlyZSBzY2hlbWFcbiAqL1xuIl0sImZpbGUiOiJsaWIvY29uZmlnLWZpbGUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|