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.
Files changed (70) hide show
  1. package/README.md +9 -9
  2. package/build/lib/appium-config.schema.json +0 -0
  3. package/build/lib/appium.js +157 -53
  4. package/build/lib/cli/argparse-actions.js +104 -0
  5. package/build/lib/cli/args.js +115 -279
  6. package/build/lib/cli/driver-command.js +11 -1
  7. package/build/lib/cli/extension-command.js +60 -8
  8. package/build/lib/cli/extension.js +30 -7
  9. package/build/lib/cli/npm.js +17 -14
  10. package/build/lib/cli/parser.js +152 -89
  11. package/build/lib/cli/plugin-command.js +11 -1
  12. package/build/lib/cli/utils.js +29 -3
  13. package/build/lib/config-file.js +141 -0
  14. package/build/lib/config.js +76 -61
  15. package/build/lib/driver-config.js +42 -19
  16. package/build/lib/drivers.js +8 -4
  17. package/build/lib/ext-config-io.js +165 -0
  18. package/build/lib/extension-config.js +130 -61
  19. package/build/lib/grid-register.js +22 -24
  20. package/build/lib/logger.js +3 -3
  21. package/build/lib/logsink.js +11 -13
  22. package/build/lib/main.js +197 -77
  23. package/build/lib/plugin-config.js +20 -10
  24. package/build/lib/plugins.js +4 -2
  25. package/build/lib/schema/appium-config-schema.js +252 -0
  26. package/build/lib/schema/arg-spec.js +120 -0
  27. package/build/lib/schema/cli-args.js +173 -0
  28. package/build/lib/schema/cli-transformers.js +76 -0
  29. package/build/lib/schema/index.js +36 -0
  30. package/build/lib/schema/keywords.js +62 -0
  31. package/build/lib/schema/schema.js +357 -0
  32. package/build/lib/utils.js +44 -99
  33. package/lib/appium-config.schema.json +277 -0
  34. package/lib/appium.js +201 -65
  35. package/lib/cli/argparse-actions.js +77 -0
  36. package/lib/cli/args.js +174 -375
  37. package/lib/cli/driver-command.js +4 -0
  38. package/lib/cli/extension-command.js +70 -5
  39. package/lib/cli/extension.js +25 -5
  40. package/lib/cli/npm.js +18 -12
  41. package/lib/cli/parser.js +254 -79
  42. package/lib/cli/plugin-command.js +4 -0
  43. package/lib/cli/utils.js +21 -1
  44. package/lib/config-file.js +227 -0
  45. package/lib/config.js +109 -62
  46. package/lib/driver-config.js +66 -11
  47. package/lib/drivers.js +4 -1
  48. package/lib/ext-config-io.js +287 -0
  49. package/lib/extension-config.js +225 -67
  50. package/lib/grid-register.js +27 -24
  51. package/lib/logger.js +1 -1
  52. package/lib/logsink.js +10 -7
  53. package/lib/main.js +211 -77
  54. package/lib/plugin-config.js +34 -5
  55. package/lib/plugins.js +1 -0
  56. package/lib/schema/appium-config-schema.js +286 -0
  57. package/lib/schema/arg-spec.js +218 -0
  58. package/lib/schema/cli-args.js +273 -0
  59. package/lib/schema/cli-transformers.js +123 -0
  60. package/lib/schema/index.js +2 -0
  61. package/lib/schema/keywords.js +119 -0
  62. package/lib/schema/schema.js +577 -0
  63. package/lib/utils.js +42 -88
  64. package/package.json +55 -80
  65. package/postinstall.js +71 -0
  66. package/types/appium-config.d.ts +197 -0
  67. package/types/types.d.ts +201 -0
  68. package/CHANGELOG.md +0 -3515
  69. package/build/lib/cli/parser-helpers.js +0 -82
  70. package/lib/cli/parser-helpers.js +0 -79
@@ -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 _path = _interopRequireDefault(require("path"));
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 _args = require("./args");
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
- function getParser(debug = false) {
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
- if (!_lodash.default.includes([_extensionConfig.DRIVER_TYPE, _extensionConfig.PLUGIN_TYPE, 'server', '-h'], args[0])) {
49
- args.splice(0, 0, 'server');
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
- return this._parseArgs(args, namespace);
53
- }.bind(parser);
35
+ const version = _support.fs.readPackageJsonFrom(_utils.rootDir).version;
54
36
 
55
- return parser;
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
- function addServerToParser(sharedArgs, subParsers, debug) {
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
- for (const [flags, opts] of [...sharedArgs, ..._args.serverArgs]) {
66
- serverParser.addArgument([...flags], { ...opts
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
- return _args.serverArgs;
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
- function getDefaultServerArgs() {
74
- let defaults = {};
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
- for (let [, arg] of _args.serverArgs) {
77
- defaults[arg.dest] = arg.defaultValue;
96
+ _lodash.default.set(unpacked, dest, value);
97
+ } else {
98
+ unpacked[key] = value;
99
+ }
100
+
101
+ return unpacked;
102
+ }, {});
78
103
  }
79
104
 
80
- return defaults;
81
- }
105
+ static _patchExit(parser) {
106
+ parser.exit = (code, msg) => {
107
+ throw new Error(msg);
108
+ };
109
+ }
82
110
 
83
- function addExtensionsToParser(sharedArgs, subParsers, debug) {
84
- for (const type of [_extensionConfig.DRIVER_TYPE, _extensionConfig.PLUGIN_TYPE]) {
85
- const extParser = subParsers.addParser(type, {
86
- addHelp: true,
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
- const parserSpecs = [{
95
- command: 'list',
96
- args: _args.extensionArgs[type].list,
97
- help: `List available and installed ${type}s`
98
- }, {
99
- command: 'install',
100
- args: _args.extensionArgs[type].install,
101
- help: `Install a ${type}`
102
- }, {
103
- command: 'uninstall',
104
- args: _args.extensionArgs[type].uninstall,
105
- help: `Uninstall a ${type}`
106
- }, {
107
- command: 'update',
108
- args: _args.extensionArgs[type].update,
109
- help: `Update installed ${type}s to the latest version`
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
- for (const [flags, opts] of [...sharedArgs, ...args]) {
123
- parser.addArgument([...flags], { ...opts
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvcGx1Z2luLWNvbW1hbmQuanMiXSwibmFtZXMiOlsiUkVRX1BMVUdJTl9GSUVMRFMiLCJQbHVnaW5Db21tYW5kIiwiRXh0ZW5zaW9uQ29tbWFuZCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwianNvbiIsInR5cGUiLCJQTFVHSU5fVFlQRSIsImtub3duRXh0ZW5zaW9ucyIsIktOT1dOX1BMVUdJTlMiLCJpbnN0YWxsIiwicGx1Z2luIiwiaW5zdGFsbFR5cGUiLCJwYWNrYWdlTmFtZSIsImV4dCIsInVuaW5zdGFsbCIsInVwZGF0ZSIsInVuc2FmZSIsImdldFBvc3RJbnN0YWxsVGV4dCIsImV4dE5hbWUiLCJleHREYXRhIiwidmVyc2lvbiIsImdyZWVuIiwidmFsaWRhdGVFeHRlbnNpb25GaWVsZHMiLCJhcHBpdW1Qa2dEYXRhIiwibWlzc2luZ0ZpZWxkcyIsInJlZHVjZSIsImFjYyIsImZpZWxkIiwiXyIsImlzRW1wdHkiLCJFcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsQ0FBQyxZQUFELEVBQWUsV0FBZixDQUExQjs7QUFFZSxNQUFNQyxhQUFOLFNBQTRCQyx5QkFBNUIsQ0FBNkM7QUFFMURDLEVBQUFBLFdBQVcsQ0FBRTtBQUFDQyxJQUFBQSxNQUFEO0FBQVNDLElBQUFBO0FBQVQsR0FBRixFQUFrQjtBQUMzQixVQUFNO0FBQUNELE1BQUFBLE1BQUQ7QUFBU0MsTUFBQUEsSUFBVDtBQUFlQyxNQUFBQSxJQUFJLEVBQUVDO0FBQXJCLEtBQU47QUFDQSxTQUFLQyxlQUFMLEdBQXVCQyxzQkFBdkI7QUFDRDs7QUFFRCxRQUFNQyxPQUFOLENBQWU7QUFBQ0MsSUFBQUEsTUFBRDtBQUFTQyxJQUFBQSxXQUFUO0FBQXNCQyxJQUFBQTtBQUF0QixHQUFmLEVBQW1EO0FBQ2pELFdBQU8sTUFBTSxNQUFNSCxPQUFOLENBQWM7QUFBQ0ksTUFBQUEsR0FBRyxFQUFFSCxNQUFOO0FBQWNDLE1BQUFBLFdBQWQ7QUFBMkJDLE1BQUFBO0FBQTNCLEtBQWQsQ0FBYjtBQUNEOztBQUVELFFBQU1FLFNBQU4sQ0FBaUI7QUFBQ0osSUFBQUE7QUFBRCxHQUFqQixFQUEyQjtBQUN6QixXQUFPLE1BQU0sTUFBTUksU0FBTixDQUFnQjtBQUFDRCxNQUFBQSxHQUFHLEVBQUVIO0FBQU4sS0FBaEIsQ0FBYjtBQUNEOztBQUVELFFBQU1LLE1BQU4sQ0FBYztBQUFDTCxJQUFBQSxNQUFEO0FBQVNNLElBQUFBO0FBQVQsR0FBZCxFQUFnQztBQUM5QixXQUFPLE1BQU0sTUFBTUQsTUFBTixDQUFhO0FBQUNGLE1BQUFBLEdBQUcsRUFBRUgsTUFBTjtBQUFjTSxNQUFBQTtBQUFkLEtBQWIsQ0FBYjtBQUNEOztBQUVEQyxFQUFBQSxrQkFBa0IsQ0FBRTtBQUFDQyxJQUFBQSxPQUFEO0FBQVVDLElBQUFBO0FBQVYsR0FBRixFQUFzQjtBQUN0QyxXQUFRLFVBQVNELE9BQVEsSUFBR0MsT0FBTyxDQUFDQyxPQUFRLHlCQUFyQyxDQUE4REMsS0FBckU7QUFDRDs7QUFFREMsRUFBQUEsdUJBQXVCLENBQUVDLGFBQUYsRUFBaUI7QUFDdEMsVUFBTUMsYUFBYSxHQUFHekIsaUJBQWlCLENBQUMwQixNQUFsQixDQUF5QixDQUFDQyxHQUFELEVBQU1DLEtBQU4sS0FDN0NKLGFBQWEsQ0FBQ0ksS0FBRCxDQUFiLEdBQXVCRCxHQUF2QixHQUE2QixDQUFDLEdBQUdBLEdBQUosRUFBU0MsS0FBVCxDQURULEVBRW5CLEVBRm1CLENBQXRCOztBQUlBLFFBQUksQ0FBQ0MsZ0JBQUVDLE9BQUYsQ0FBVUwsYUFBVixDQUFMLEVBQStCO0FBQzdCLFlBQU0sSUFBSU0sS0FBSixDQUFXLGlFQUFELEdBQ0MsZ0NBQStCQyxJQUFJLENBQUNDLFNBQUwsQ0FBZVIsYUFBZixDQUE4QixFQUR4RSxDQUFOO0FBRUQ7QUFFRjs7QUFqQ3lEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBFeHRlbnNpb25Db21tYW5kIGZyb20gJy4vZXh0ZW5zaW9uLWNvbW1hbmQnO1xuaW1wb3J0IHsgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IEtOT1dOX1BMVUdJTlMgfSBmcm9tICcuLi9wbHVnaW5zJztcblxuY29uc3QgUkVRX1BMVUdJTl9GSUVMRFMgPSBbJ3BsdWdpbk5hbWUnLCAnbWFpbkNsYXNzJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsdWdpbkNvbW1hbmQgZXh0ZW5kcyBFeHRlbnNpb25Db21tYW5kIHtcblxuICBjb25zdHJ1Y3RvciAoe2NvbmZpZywganNvbn0pIHtcbiAgICBzdXBlcih7Y29uZmlnLCBqc29uLCB0eXBlOiBQTFVHSU5fVFlQRX0pO1xuICAgIHRoaXMua25vd25FeHRlbnNpb25zID0gS05PV05fUExVR0lOUztcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGwgKHtwbHVnaW4sIGluc3RhbGxUeXBlLCBwYWNrYWdlTmFtZX0pIHtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuaW5zdGFsbCh7ZXh0OiBwbHVnaW4sIGluc3RhbGxUeXBlLCBwYWNrYWdlTmFtZX0pO1xuICB9XG5cbiAgYXN5bmMgdW5pbnN0YWxsICh7cGx1Z2lufSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci51bmluc3RhbGwoe2V4dDogcGx1Z2lufSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGUgKHtwbHVnaW4sIHVuc2FmZX0pIHtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIudXBkYXRlKHtleHQ6IHBsdWdpbiwgdW5zYWZlfSk7XG4gIH1cblxuICBnZXRQb3N0SW5zdGFsbFRleHQgKHtleHROYW1lLCBleHREYXRhfSkge1xuICAgIHJldHVybiBgUGx1Z2luICR7ZXh0TmFtZX1AJHtleHREYXRhLnZlcnNpb259IHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWRgLmdyZWVuO1xuICB9XG5cbiAgdmFsaWRhdGVFeHRlbnNpb25GaWVsZHMgKGFwcGl1bVBrZ0RhdGEpIHtcbiAgICBjb25zdCBtaXNzaW5nRmllbGRzID0gUkVRX1BMVUdJTl9GSUVMRFMucmVkdWNlKChhY2MsIGZpZWxkKSA9PiAoXG4gICAgICBhcHBpdW1Qa2dEYXRhW2ZpZWxkXSA/IGFjYyA6IFsuLi5hY2MsIGZpZWxkXVxuICAgICksIFtdKTtcblxuICAgIGlmICghXy5pc0VtcHR5KG1pc3NpbmdGaWVsZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbGxlZCBwbHVnaW4gZGlkIG5vdCBleHBvc2UgY29ycmVjdCBmaWVsZHMgZm9yIGNvbXBhYmlsaXR5IGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGB3aXRoIEFwcGl1bS4gTWlzc2luZyBmaWVsZHM6ICR7SlNPTi5zdHJpbmdpZnkobWlzc2luZ0ZpZWxkcyl9YCk7XG4gICAgfVxuXG4gIH1cblxufVxuIl0sImZpbGUiOiJsaWIvY2xpL3BsdWdpbi1jb21tYW5kLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
95
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvcGx1Z2luLWNvbW1hbmQuanMiXSwibmFtZXMiOlsiUkVRX1BMVUdJTl9GSUVMRFMiLCJQbHVnaW5Db21tYW5kIiwiRXh0ZW5zaW9uQ29tbWFuZCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwianNvbiIsInR5cGUiLCJQTFVHSU5fVFlQRSIsImtub3duRXh0ZW5zaW9ucyIsIktOT1dOX1BMVUdJTlMiLCJpbnN0YWxsIiwicGx1Z2luIiwiaW5zdGFsbFR5cGUiLCJwYWNrYWdlTmFtZSIsImV4dCIsInVuaW5zdGFsbCIsInVwZGF0ZSIsInVuc2FmZSIsInJ1biIsInNjcmlwdE5hbWUiLCJnZXRQb3N0SW5zdGFsbFRleHQiLCJleHROYW1lIiwiZXh0RGF0YSIsInZlcnNpb24iLCJncmVlbiIsInZhbGlkYXRlRXh0ZW5zaW9uRmllbGRzIiwiYXBwaXVtUGtnRGF0YSIsIm1pc3NpbmdGaWVsZHMiLCJyZWR1Y2UiLCJhY2MiLCJmaWVsZCIsIl8iLCJpc0VtcHR5IiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGlCQUFpQixHQUFHLENBQUMsWUFBRCxFQUFlLFdBQWYsQ0FBMUI7O0FBRWUsTUFBTUMsYUFBTixTQUE0QkMseUJBQTVCLENBQTZDO0FBRTFEQyxFQUFBQSxXQUFXLENBQUU7QUFBQ0MsSUFBQUEsTUFBRDtBQUFTQyxJQUFBQTtBQUFULEdBQUYsRUFBa0I7QUFDM0IsVUFBTTtBQUFDRCxNQUFBQSxNQUFEO0FBQVNDLE1BQUFBLElBQVQ7QUFBZUMsTUFBQUEsSUFBSSxFQUFFQztBQUFyQixLQUFOO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QkMsc0JBQXZCO0FBQ0Q7O0FBRVksUUFBUEMsT0FBTyxDQUFFO0FBQUNDLElBQUFBLE1BQUQ7QUFBU0MsSUFBQUEsV0FBVDtBQUFzQkMsSUFBQUE7QUFBdEIsR0FBRixFQUFzQztBQUNqRCxXQUFPLE1BQU0sTUFBTUgsT0FBTixDQUFjO0FBQUNJLE1BQUFBLEdBQUcsRUFBRUgsTUFBTjtBQUFjQyxNQUFBQSxXQUFkO0FBQTJCQyxNQUFBQTtBQUEzQixLQUFkLENBQWI7QUFDRDs7QUFFYyxRQUFURSxTQUFTLENBQUU7QUFBQ0osSUFBQUE7QUFBRCxHQUFGLEVBQVk7QUFDekIsV0FBTyxNQUFNLE1BQU1JLFNBQU4sQ0FBZ0I7QUFBQ0QsTUFBQUEsR0FBRyxFQUFFSDtBQUFOLEtBQWhCLENBQWI7QUFDRDs7QUFFVyxRQUFOSyxNQUFNLENBQUU7QUFBQ0wsSUFBQUEsTUFBRDtBQUFTTSxJQUFBQTtBQUFULEdBQUYsRUFBb0I7QUFDOUIsV0FBTyxNQUFNLE1BQU1ELE1BQU4sQ0FBYTtBQUFDRixNQUFBQSxHQUFHLEVBQUVILE1BQU47QUFBY00sTUFBQUE7QUFBZCxLQUFiLENBQWI7QUFDRDs7QUFFUSxRQUFIQyxHQUFHLENBQUU7QUFBQ1AsSUFBQUEsTUFBRDtBQUFTUSxJQUFBQTtBQUFULEdBQUYsRUFBd0I7QUFDL0IsV0FBTyxNQUFNLE1BQU1ELEdBQU4sQ0FBVTtBQUFDSixNQUFBQSxHQUFHLEVBQUVILE1BQU47QUFBY1EsTUFBQUE7QUFBZCxLQUFWLENBQWI7QUFDRDs7QUFFREMsRUFBQUEsa0JBQWtCLENBQUU7QUFBQ0MsSUFBQUEsT0FBRDtBQUFVQyxJQUFBQTtBQUFWLEdBQUYsRUFBc0I7QUFDdEMsV0FBUSxVQUFTRCxPQUFRLElBQUdDLE9BQU8sQ0FBQ0MsT0FBUSx5QkFBckMsQ0FBOERDLEtBQXJFO0FBQ0Q7O0FBRURDLEVBQUFBLHVCQUF1QixDQUFFQyxhQUFGLEVBQWlCO0FBQ3RDLFVBQU1DLGFBQWEsR0FBRzNCLGlCQUFpQixDQUFDNEIsTUFBbEIsQ0FBeUIsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEtBQzdDSixhQUFhLENBQUNJLEtBQUQsQ0FBYixHQUF1QkQsR0FBdkIsR0FBNkIsQ0FBQyxHQUFHQSxHQUFKLEVBQVNDLEtBQVQsQ0FEVCxFQUVuQixFQUZtQixDQUF0Qjs7QUFJQSxRQUFJLENBQUNDLGdCQUFFQyxPQUFGLENBQVVMLGFBQVYsQ0FBTCxFQUErQjtBQUM3QixZQUFNLElBQUlNLEtBQUosQ0FBVyxpRUFBRCxHQUNDLGdDQUErQkMsSUFBSSxDQUFDQyxTQUFMLENBQWVSLGFBQWYsQ0FBOEIsRUFEeEUsQ0FBTjtBQUVEO0FBRUY7O0FBckN5RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgRXh0ZW5zaW9uQ29tbWFuZCBmcm9tICcuL2V4dGVuc2lvbi1jb21tYW5kJztcbmltcG9ydCB7IFBMVUdJTl9UWVBFIH0gZnJvbSAnLi4vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBLTk9XTl9QTFVHSU5TIH0gZnJvbSAnLi4vcGx1Z2lucyc7XG5cbmNvbnN0IFJFUV9QTFVHSU5fRklFTERTID0gWydwbHVnaW5OYW1lJywgJ21haW5DbGFzcyddO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5Db21tYW5kIGV4dGVuZHMgRXh0ZW5zaW9uQ29tbWFuZCB7XG5cbiAgY29uc3RydWN0b3IgKHtjb25maWcsIGpzb259KSB7XG4gICAgc3VwZXIoe2NvbmZpZywganNvbiwgdHlwZTogUExVR0lOX1RZUEV9KTtcbiAgICB0aGlzLmtub3duRXh0ZW5zaW9ucyA9IEtOT1dOX1BMVUdJTlM7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsICh7cGx1Z2luLCBpbnN0YWxsVHlwZSwgcGFja2FnZU5hbWV9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmluc3RhbGwoe2V4dDogcGx1Z2luLCBpbnN0YWxsVHlwZSwgcGFja2FnZU5hbWV9KTtcbiAgfVxuXG4gIGFzeW5jIHVuaW5zdGFsbCAoe3BsdWdpbn0pIHtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIudW5pbnN0YWxsKHtleHQ6IHBsdWdpbn0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlICh7cGx1Z2luLCB1bnNhZmV9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnVwZGF0ZSh7ZXh0OiBwbHVnaW4sIHVuc2FmZX0pO1xuICB9XG5cbiAgYXN5bmMgcnVuICh7cGx1Z2luLCBzY3JpcHROYW1lfSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5ydW4oe2V4dDogcGx1Z2luLCBzY3JpcHROYW1lfSk7XG4gIH1cblxuICBnZXRQb3N0SW5zdGFsbFRleHQgKHtleHROYW1lLCBleHREYXRhfSkge1xuICAgIHJldHVybiBgUGx1Z2luICR7ZXh0TmFtZX1AJHtleHREYXRhLnZlcnNpb259IHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWRgLmdyZWVuO1xuICB9XG5cbiAgdmFsaWRhdGVFeHRlbnNpb25GaWVsZHMgKGFwcGl1bVBrZ0RhdGEpIHtcbiAgICBjb25zdCBtaXNzaW5nRmllbGRzID0gUkVRX1BMVUdJTl9GSUVMRFMucmVkdWNlKChhY2MsIGZpZWxkKSA9PiAoXG4gICAgICBhcHBpdW1Qa2dEYXRhW2ZpZWxkXSA/IGFjYyA6IFsuLi5hY2MsIGZpZWxkXVxuICAgICksIFtdKTtcblxuICAgIGlmICghXy5pc0VtcHR5KG1pc3NpbmdGaWVsZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbGxlZCBwbHVnaW4gZGlkIG5vdCBleHBvc2UgY29ycmVjdCBmaWVsZHMgZm9yIGNvbXBhYmlsaXR5IGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGB3aXRoIEFwcGl1bS4gTWlzc2luZyBmaWVsZHM6ICR7SlNPTi5zdHJpbmdpZnkobWlzc2luZ0ZpZWxkcyl9YCk7XG4gICAgfVxuXG4gIH1cblxufVxuIl0sImZpbGUiOiJsaWIvY2xpL3BsdWdpbi1jb21tYW5kLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -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
- }require('source-map-support').install();
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvdXRpbHMuanMiXSwibmFtZXMiOlsiSlNPTl9TUEFDRVMiLCJlcnJBbmRRdWl0IiwianNvbiIsIm1zZyIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3IiLCJyZWQiLCJzdGRlcnIiLCJwcm9jZXNzIiwiZXhpdCIsInNwaW5XaXRoIiwiZm4iLCJzcGlubmVyIiwic3RhcnQiLCJyZXMiLCJzdWNjZWVkIiwiZXJyIiwiZmFpbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFFQSxNQUFNQSxXQUFXLEdBQUcsQ0FBcEI7OztBQU9BLFNBQVNDLFVBQVQsQ0FBcUJDLElBQXJCLEVBQTJCQyxHQUEzQixFQUFnQztBQUM5QixNQUFJRCxJQUFKLEVBQVU7QUFDUkUsSUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVlDLElBQUksQ0FBQ0MsU0FBTCxDQUFlO0FBQUNDLE1BQUFBLEtBQUssRUFBRyxHQUFFTCxHQUFJO0FBQWYsS0FBZixFQUFrQyxJQUFsQyxFQUF3Q0gsV0FBeEMsQ0FBWjtBQUNELEdBRkQsTUFFTztBQUNMSSxJQUFBQSxPQUFPLENBQUNJLEtBQVIsQ0FBZSxHQUFFTCxHQUFJLEVBQVAsQ0FBU00sR0FBdkI7O0FBQ0EsUUFBSU4sR0FBRyxDQUFDTyxNQUFSLEVBQWdCO0FBQ2ROLE1BQUFBLE9BQU8sQ0FBQ0ksS0FBUixDQUFlLEdBQUVMLEdBQUcsQ0FBQ08sTUFBTyxFQUFkLENBQWdCRCxHQUE5QjtBQUNEO0FBQ0Y7O0FBQ0RFLEVBQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUFhLENBQWI7QUFDRDs7QUFPRCxTQUFTUCxHQUFULENBQWNILElBQWQsRUFBb0JDLEdBQXBCLEVBQXlCO0FBQ3ZCLEdBQUNELElBQUQsSUFBU0UsT0FBTyxDQUFDQyxHQUFSLENBQVlGLEdBQVosQ0FBVDtBQUNEOztBQVFELGVBQWVVLFFBQWYsQ0FBeUJYLElBQXpCLEVBQStCQyxHQUEvQixFQUFvQ1csRUFBcEMsRUFBd0M7QUFDdEMsTUFBSVosSUFBSixFQUFVO0FBQ1IsV0FBTyxNQUFNWSxFQUFFLEVBQWY7QUFDRDs7QUFDRCxRQUFNQyxPQUFPLEdBQUcsa0JBQUlaLEdBQUosRUFBU2EsS0FBVCxFQUFoQjtBQUNBLE1BQUlDLEdBQUo7O0FBQ0EsTUFBSTtBQUNGQSxJQUFBQSxHQUFHLEdBQUcsTUFBTUgsRUFBRSxFQUFkO0FBQ0FDLElBQUFBLE9BQU8sQ0FBQ0csT0FBUjtBQUNBLFdBQU9ELEdBQVA7QUFDRCxHQUpELENBSUUsT0FBT0UsR0FBUCxFQUFZO0FBQ1pKLElBQUFBLE9BQU8sQ0FBQ0ssSUFBUjtBQUNBLFVBQU1ELEdBQU47QUFDRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuXG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5cbmNvbnN0IEpTT05fU1BBQ0VTID0gNDtcblxuLyoqKlxuICogTG9nIGFuIGVycm9yIHRvIHRoZSBjb25zb2xlIGFuZCBleGl0IHRoZSBwcm9jZXNzLlxuICogQHBhcmFtIHtib29sZWFufSBqc29uIC0gd2hldGhlciB3ZSBzaG91bGQgbG9nIGpzb24gb3IgdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IG1zZyAtIGVycm9yIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZXJyQW5kUXVpdCAoanNvbiwgbXNnKSB7XG4gIGlmIChqc29uKSB7XG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiBgJHttc2d9YH0sIG51bGwsIEpTT05fU1BBQ0VTKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcihgJHttc2d9YC5yZWQpO1xuICAgIGlmIChtc2cuc3RkZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke21zZy5zdGRlcnJ9YC5yZWQpO1xuICAgIH1cbiAgfVxuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBsb2cgc29tZXRoaW5nIHRvIHRoZSBjb25zb2xlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGpzb24gLSB3aGV0aGVyIHdlIGFyZSBpbiBqc29uIG1vZGUgKGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdCBsb2cpXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIC0gc3RyaW5nIHRvIGxvZ1xuICovXG5mdW5jdGlvbiBsb2cgKGpzb24sIG1zZykge1xuICAhanNvbiAmJiBjb25zb2xlLmxvZyhtc2cpO1xufVxuXG4vKipcbiAqIFN0YXJ0IGEgc3Bpbm5lciwgZXhlY3V0ZSBhbiBhc3luYyBmdW5jdGlvbiwgYW5kIHRoZW4gc3RvcCB0aGUgc3Bpbm5lclxuICogQHBhcmFtIHtib29sZWFufSBqc29uIC0gd2hldGhlciB3ZSBhcmUgaW4ganNvbiBtb2RlIChhbmQgc2hvdWxkIHRoZXJlZm9yZSBub3QgbG9nKVxuICogQHBhcmFtIHtzdHJpbmd9IG1zZyAtIHN0cmluZyB0byBsb2dcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIHNwaW5uaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwaW5XaXRoIChqc29uLCBtc2csIGZuKSB7XG4gIGlmIChqc29uKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH1cbiAgY29uc3Qgc3Bpbm5lciA9IG9yYShtc2cpLnN0YXJ0KCk7XG4gIGxldCByZXM7XG4gIHRyeSB7XG4gICAgcmVzID0gYXdhaXQgZm4oKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoKTtcbiAgICByZXR1cm4gcmVzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzcGlubmVyLmZhaWwoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZXJyQW5kUXVpdCxcbiAgbG9nLFxuICBzcGluV2l0aCxcbiAgSlNPTl9TUEFDRVNcbn07XG4iXSwiZmlsZSI6ImxpYi9jbGkvdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
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==