appium 2.0.0-beta.46 → 2.0.0-beta.48

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 (141) hide show
  1. package/README.md +145 -44
  2. package/build/lib/appium.d.ts +3 -103
  3. package/build/lib/appium.d.ts.map +1 -1
  4. package/build/lib/appium.js +679 -549
  5. package/build/lib/appium.js.map +1 -1
  6. package/build/lib/cli/args.js +247 -127
  7. package/build/lib/cli/args.js.map +1 -1
  8. package/build/lib/cli/driver-command.d.ts +24 -5
  9. package/build/lib/cli/driver-command.d.ts.map +1 -1
  10. package/build/lib/cli/driver-command.js +78 -88
  11. package/build/lib/cli/driver-command.js.map +1 -1
  12. package/build/lib/cli/extension-command.d.ts +33 -24
  13. package/build/lib/cli/extension-command.d.ts.map +1 -1
  14. package/build/lib/cli/extension-command.js +729 -512
  15. package/build/lib/cli/extension-command.js.map +1 -1
  16. package/build/lib/cli/extension.d.ts +7 -6
  17. package/build/lib/cli/extension.d.ts.map +1 -1
  18. package/build/lib/cli/extension.js +68 -65
  19. package/build/lib/cli/extension.js.map +1 -1
  20. package/build/lib/cli/parser.d.ts +3 -3
  21. package/build/lib/cli/parser.d.ts.map +1 -1
  22. package/build/lib/cli/parser.js +234 -192
  23. package/build/lib/cli/parser.js.map +1 -1
  24. package/build/lib/cli/plugin-command.js +58 -87
  25. package/build/lib/cli/plugin-command.js.map +1 -1
  26. package/build/lib/cli/utils.js +66 -69
  27. package/build/lib/cli/utils.js.map +1 -1
  28. package/build/lib/config-file.d.ts.map +1 -1
  29. package/build/lib/config-file.js +189 -120
  30. package/build/lib/config-file.js.map +1 -1
  31. package/build/lib/config.d.ts.map +1 -1
  32. package/build/lib/config.js +254 -213
  33. package/build/lib/config.js.map +1 -1
  34. package/build/lib/constants.d.ts +6 -5
  35. package/build/lib/constants.d.ts.map +1 -1
  36. package/build/lib/constants.js +65 -59
  37. package/build/lib/constants.js.map +1 -1
  38. package/build/lib/extension/driver-config.js +199 -164
  39. package/build/lib/extension/driver-config.js.map +1 -1
  40. package/build/lib/extension/extension-config.d.ts +33 -26
  41. package/build/lib/extension/extension-config.d.ts.map +1 -1
  42. package/build/lib/extension/extension-config.js +541 -396
  43. package/build/lib/extension/extension-config.js.map +1 -1
  44. package/build/lib/extension/index.js +98 -68
  45. package/build/lib/extension/index.js.map +1 -1
  46. package/build/lib/extension/manifest-migrations.d.ts +27 -0
  47. package/build/lib/extension/manifest-migrations.d.ts.map +1 -0
  48. package/build/lib/extension/manifest-migrations.js +118 -0
  49. package/build/lib/extension/manifest-migrations.js.map +1 -0
  50. package/build/lib/extension/manifest.d.ts +35 -63
  51. package/build/lib/extension/manifest.d.ts.map +1 -1
  52. package/build/lib/extension/manifest.js +500 -240
  53. package/build/lib/extension/manifest.js.map +1 -1
  54. package/build/lib/extension/package-changed.js +57 -61
  55. package/build/lib/extension/package-changed.js.map +1 -1
  56. package/build/lib/extension/plugin-config.d.ts +2 -3
  57. package/build/lib/extension/plugin-config.d.ts.map +1 -1
  58. package/build/lib/extension/plugin-config.js +94 -70
  59. package/build/lib/extension/plugin-config.js.map +1 -1
  60. package/build/lib/grid-register.js +119 -137
  61. package/build/lib/grid-register.js.map +1 -1
  62. package/build/lib/logger.d.ts +1 -1
  63. package/build/lib/logger.d.ts.map +1 -1
  64. package/build/lib/logger.js +5 -15
  65. package/build/lib/logger.js.map +1 -1
  66. package/build/lib/logsink.d.ts.map +1 -1
  67. package/build/lib/logsink.js +189 -183
  68. package/build/lib/logsink.js.map +1 -1
  69. package/build/lib/main.d.ts +19 -12
  70. package/build/lib/main.d.ts.map +1 -1
  71. package/build/lib/main.js +330 -304
  72. package/build/lib/main.js.map +1 -1
  73. package/build/lib/schema/arg-spec.js +153 -108
  74. package/build/lib/schema/arg-spec.js.map +1 -1
  75. package/build/lib/schema/cli-args.js +203 -164
  76. package/build/lib/schema/cli-args.js.map +1 -1
  77. package/build/lib/schema/cli-transformers.js +117 -72
  78. package/build/lib/schema/cli-transformers.js.map +1 -1
  79. package/build/lib/schema/index.js +17 -32
  80. package/build/lib/schema/index.js.map +1 -1
  81. package/build/lib/schema/keywords.js +125 -67
  82. package/build/lib/schema/keywords.js.map +1 -1
  83. package/build/lib/schema/schema.d.ts.map +1 -1
  84. package/build/lib/schema/schema.js +582 -417
  85. package/build/lib/schema/schema.js.map +1 -1
  86. package/build/lib/utils.d.ts +41 -255
  87. package/build/lib/utils.d.ts.map +1 -1
  88. package/build/lib/utils.js +342 -193
  89. package/build/lib/utils.js.map +1 -1
  90. package/build/tsconfig.tsbuildinfo +1 -1
  91. package/build/types/cli.d.ts +45 -34
  92. package/build/types/cli.d.ts.map +1 -1
  93. package/build/types/cli.js +3 -0
  94. package/build/types/cli.js.map +1 -0
  95. package/build/types/index.d.ts +1 -2
  96. package/build/types/index.d.ts.map +1 -1
  97. package/build/types/index.js +19 -0
  98. package/build/types/index.js.map +1 -0
  99. package/build/types/manifest/base.d.ts +135 -0
  100. package/build/types/manifest/base.d.ts.map +1 -0
  101. package/build/types/manifest/base.js +3 -0
  102. package/build/types/manifest/base.js.map +1 -0
  103. package/build/types/manifest/index.d.ts +19 -0
  104. package/build/types/manifest/index.d.ts.map +1 -0
  105. package/build/types/manifest/index.js +40 -0
  106. package/build/types/manifest/index.js.map +1 -0
  107. package/build/types/manifest/v3.d.ts +139 -0
  108. package/build/types/manifest/v3.d.ts.map +1 -0
  109. package/build/types/manifest/v3.js +3 -0
  110. package/build/types/manifest/v3.js.map +1 -0
  111. package/lib/appium.js +1 -1
  112. package/lib/cli/args.js +1 -1
  113. package/lib/cli/driver-command.js +17 -0
  114. package/lib/cli/extension-command.js +119 -65
  115. package/lib/cli/extension.js +9 -8
  116. package/lib/cli/parser.js +2 -2
  117. package/lib/config-file.js +2 -3
  118. package/lib/config.js +3 -2
  119. package/lib/constants.js +7 -5
  120. package/lib/extension/extension-config.js +52 -47
  121. package/lib/extension/manifest-migrations.js +120 -0
  122. package/lib/extension/manifest.js +184 -103
  123. package/lib/extension/plugin-config.js +1 -2
  124. package/lib/logsink.js +26 -5
  125. package/lib/main.js +58 -50
  126. package/lib/schema/schema.js +6 -1
  127. package/lib/utils.js +62 -0
  128. package/package.json +24 -25
  129. package/scripts/autoinstall-extensions.js +78 -26
  130. package/types/cli.ts +81 -42
  131. package/types/index.ts +1 -2
  132. package/types/manifest/README.md +30 -0
  133. package/types/manifest/base.ts +158 -0
  134. package/types/manifest/index.ts +27 -0
  135. package/types/manifest/v3.ts +161 -0
  136. package/build/types/appium-manifest.d.ts +0 -59
  137. package/build/types/appium-manifest.d.ts.map +0 -1
  138. package/build/types/extension-manifest.d.ts +0 -55
  139. package/build/types/extension-manifest.d.ts.map +0 -1
  140. package/types/appium-manifest.ts +0 -73
  141. package/types/extension-manifest.ts +0 -64
@@ -1,178 +1,217 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.toParserArgs = toParserArgs;
7
-
8
- require("source-map-support/register");
9
-
10
- var _argparse = require("argparse");
11
-
12
- var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
- var _configFile = require("../config-file");
15
-
16
- var _schema = require("./schema");
17
-
18
- var _cliTransformers = require("./cli-transformers");
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.toParserArgs = void 0;
7
+ const argparse_1 = require("argparse");
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const config_file_1 = require("../config-file");
10
+ const schema_1 = require("./schema");
11
+ const cli_transformers_1 = require("./cli-transformers");
12
+ /**
13
+ * This module concerns functions which convert schema definitions to
14
+ * `argparse`-compatible data structures, for deriving CLI arguments from a
15
+ * schema.
16
+ */
17
+ /**
18
+ * Lookup of possible values for the `type` field in a JSON schema.
19
+ * @type {Readonly<Record<string, import('json-schema').JSONSchema7TypeName>>}
20
+ */
22
21
  const TYPENAMES = Object.freeze({
23
- ARRAY: 'array',
24
- OBJECT: 'object',
25
- BOOLEAN: 'boolean',
26
- INTEGER: 'integer',
27
- NUMBER: 'number',
28
- NULL: 'null',
29
- STRING: 'string'
22
+ ARRAY: 'array',
23
+ OBJECT: 'object',
24
+ BOOLEAN: 'boolean',
25
+ INTEGER: 'integer',
26
+ NUMBER: 'number',
27
+ NULL: 'null',
28
+ STRING: 'string',
30
29
  });
30
+ /**
31
+ * Options with alias lengths less than this will be considered "short" flags.
32
+ */
31
33
  const SHORT_ARG_CUTOFF = 3;
32
-
34
+ /**
35
+ * Convert an alias (`foo`) to a flag (`--foo`) or a short flag (`-f`).
36
+ * @param {ArgSpec} argSpec - the argument specification
37
+ * @param {string} [alias] - the alias to convert to a flag
38
+ * @returns {string} the flag
39
+ */
33
40
  function aliasToFlag(argSpec, alias) {
34
- const {
35
- extType,
36
- extName,
37
- name
38
- } = argSpec;
39
- const arg = alias ?? name;
40
- const isShort = arg.length < SHORT_ARG_CUTOFF;
41
-
42
- if (extType && extName) {
43
- return isShort ? `--${extType}-${_lodash.default.kebabCase(extName)}-${arg}` : `--${extType}-${_lodash.default.kebabCase(extName)}-${_lodash.default.kebabCase(arg)}`;
44
- }
45
-
46
- return isShort ? `-${arg}` : `--${_lodash.default.kebabCase(arg)}`;
47
- }
48
-
49
- const screamingSnakeCase = _lodash.default.flow(_lodash.default.snakeCase, _lodash.default.toUpper);
50
-
51
- function getSchemaValidator({
52
- ref: schemaId
53
- }, coerce = _lodash.default.identity) {
54
- return value => {
55
- const coerced = coerce(value);
56
- const errors = (0, _schema.validate)(coerced, schemaId);
57
-
58
- if (_lodash.default.isEmpty(errors)) {
59
- return coerced;
41
+ const { extType, extName, name } = argSpec;
42
+ const arg = alias ?? name;
43
+ const isShort = arg.length < SHORT_ARG_CUTOFF;
44
+ if (extType && extName) {
45
+ return isShort
46
+ ? `--${extType}-${lodash_1.default.kebabCase(extName)}-${arg}`
47
+ : `--${extType}-${lodash_1.default.kebabCase(extName)}-${lodash_1.default.kebabCase(arg)}`;
60
48
  }
61
-
62
- throw new _argparse.ArgumentTypeError('\n\n' + (0, _configFile.formatErrors)(errors, value, {
63
- schemaId
64
- }));
65
- };
49
+ return isShort ? `-${arg}` : `--${lodash_1.default.kebabCase(arg)}`;
66
50
  }
67
-
51
+ /**
52
+ * Converts a string to SCREAMING_SNAKE_CASE
53
+ */
54
+ const screamingSnakeCase = lodash_1.default.flow(lodash_1.default.snakeCase, lodash_1.default.toUpper);
55
+ /**
56
+ * Given unique property name `name`, return a function which validates a value
57
+ * against a property within the schema.
58
+ * @template Coerced
59
+ * @param {ArgSpec} argSpec - Argument name
60
+ * @param {(value: string) => Coerced} [coerce] - Function to coerce to a different
61
+ * primitive
62
+ * @todo See if we can remove `coerce` by allowing Ajv to coerce in its
63
+ * constructor options
64
+ * @returns
65
+ */
66
+ function getSchemaValidator({ ref: schemaId }, coerce = lodash_1.default.identity) {
67
+ /** @param {string} value */
68
+ return (value) => {
69
+ const coerced = coerce(value);
70
+ const errors = (0, schema_1.validate)(coerced, schemaId);
71
+ if (lodash_1.default.isEmpty(errors)) {
72
+ return coerced;
73
+ }
74
+ throw new argparse_1.ArgumentTypeError('\n\n' + (0, config_file_1.formatErrors)(errors, value, { schemaId }));
75
+ };
76
+ }
77
+ /**
78
+ * Determine the description for display on the CLI, given the schema.
79
+ * @param {AppiumJSONSchema} schema
80
+ * @returns {string}
81
+ */
68
82
  function makeDescription(schema) {
69
- const {
70
- appiumCliDescription,
71
- description = '',
72
- appiumDeprecated
73
- } = schema;
74
- let desc = appiumCliDescription ?? description;
75
-
76
- if (appiumDeprecated) {
77
- desc = `[DEPRECATED] ${desc}`;
78
- }
79
-
80
- return desc;
83
+ const { appiumCliDescription, description = '', appiumDeprecated } = schema;
84
+ let desc = appiumCliDescription ?? description;
85
+ if (appiumDeprecated) {
86
+ desc = `[DEPRECATED] ${desc}`;
87
+ }
88
+ return desc;
81
89
  }
82
-
90
+ /**
91
+ * Given arg `name`, a JSON schema `subSchema`, and options, return an argument definition
92
+ * as understood by `argparse`.
93
+ * @param {AppiumJSONSchema} subSchema - JSON schema for the option
94
+ * @param {ArgSpec} argSpec - Argument spec tuple
95
+ * @returns {[string[], import('argparse').ArgumentOptions]} Tuple of flag and options
96
+ */
83
97
  function subSchemaToArgDef(subSchema, argSpec) {
84
- let {
85
- type,
86
- appiumCliAliases,
87
- appiumCliTransformer,
88
- enum: enumValues
89
- } = subSchema;
90
- const {
91
- name,
92
- arg
93
- } = argSpec;
94
- const aliases = [aliasToFlag(argSpec), ...(appiumCliAliases ?? []).map(alias => aliasToFlag(argSpec, alias))];
95
- let argOpts = {
96
- required: false,
97
- help: makeDescription(subSchema)
98
- };
99
- let argTypeFunction;
100
-
101
- switch (type) {
102
- case TYPENAMES.BOOLEAN:
103
- {
104
- argOpts.action = 'store_const';
105
- argOpts.const = true;
106
- break;
107
- }
108
-
109
- case TYPENAMES.OBJECT:
110
- {
111
- argTypeFunction = _cliTransformers.transformers.json;
112
- break;
113
- }
114
-
115
- case TYPENAMES.ARRAY:
116
- {
117
- argTypeFunction = _cliTransformers.transformers.csv;
118
- break;
119
- }
120
-
121
- case TYPENAMES.NUMBER:
122
- {
123
- argTypeFunction = getSchemaValidator(argSpec, parseFloat);
124
- break;
125
- }
126
-
127
- case TYPENAMES.INTEGER:
128
- {
129
- argTypeFunction = getSchemaValidator(argSpec, _lodash.default.parseInt);
130
- break;
131
- }
132
-
133
- case TYPENAMES.STRING:
134
- {
135
- argTypeFunction = getSchemaValidator(argSpec);
136
- break;
137
- }
138
-
139
- case TYPENAMES.NULL:
140
- default:
141
- {
142
- throw new TypeError(`Schema property "${arg}": \`${type}\` type unknown or disallowed`);
143
- }
144
- }
145
-
146
- if (type !== TYPENAMES.BOOLEAN) {
147
- argOpts.metavar = screamingSnakeCase(name);
148
- }
149
-
150
- if (type !== TYPENAMES.ARRAY && type !== TYPENAMES.OBJECT && appiumCliTransformer) {
151
- argTypeFunction = _lodash.default.flow(argTypeFunction ?? _lodash.default.identity, _cliTransformers.transformers[appiumCliTransformer]);
152
- }
153
-
154
- if (argTypeFunction) {
155
- argOpts.type = argTypeFunction;
156
- }
157
-
158
- if (enumValues && !_lodash.default.isEmpty(enumValues)) {
159
- if (type === TYPENAMES.STRING) {
160
- argOpts.choices = enumValues.map(String);
161
- } else {
162
- throw new TypeError(`Problem with schema for ${arg}; \`enum\` is only supported for \`type: 'string'\``);
98
+ let { type, appiumCliAliases, appiumCliTransformer, enum: enumValues } = subSchema;
99
+ const { name, arg } = argSpec;
100
+ const aliases = [
101
+ aliasToFlag(argSpec),
102
+ ... /** @type {string[]} */(appiumCliAliases ?? []).map((alias) => aliasToFlag(argSpec, alias)),
103
+ ];
104
+ /** @type {import('argparse').ArgumentOptions} */
105
+ let argOpts = {
106
+ required: false,
107
+ help: makeDescription(subSchema),
108
+ };
109
+ /**
110
+ * Generally we will provide a `type` to `argparse` as a function which
111
+ * validates using ajv (which is much more full-featured than what `argparse`
112
+ * can offer). The exception is `boolean`-type options, which have no
113
+ * `argType`.
114
+ *
115
+ * Not sure if this type is correct, but it's not doing what I want. I want
116
+ * to say "this is a function which returns something of type `T` where `T` is
117
+ * never a `Promise`". This function must be sync.
118
+ * @type {((value: string) => unknown)|undefined}
119
+ */
120
+ let argTypeFunction;
121
+ // handle special cases for various types
122
+ switch (type) {
123
+ // booleans do not have a type per `ArgumentOptions`, just an "action"
124
+ // NOTE: due to limitations of `argparse`, we cannot provide fancy help text, and must rely on its internal error messaging.
125
+ case TYPENAMES.BOOLEAN: {
126
+ argOpts.action = 'store_const';
127
+ argOpts.const = true;
128
+ break;
129
+ }
130
+ case TYPENAMES.OBJECT: {
131
+ argTypeFunction = cli_transformers_1.transformers.json;
132
+ break;
133
+ }
134
+ // arrays are treated as CSVs, because `argparse` doesn't handle array data.
135
+ case TYPENAMES.ARRAY: {
136
+ argTypeFunction = cli_transformers_1.transformers.csv;
137
+ break;
138
+ }
139
+ // "number" type is coerced to float. `argparse` does this for us if we use `float` type, but
140
+ // we don't.
141
+ case TYPENAMES.NUMBER: {
142
+ argTypeFunction = getSchemaValidator(argSpec, parseFloat);
143
+ break;
144
+ }
145
+ // "integer" is coerced to an .. integer. again, `argparse` would do this for us if we used `int`.
146
+ case TYPENAMES.INTEGER: {
147
+ argTypeFunction = getSchemaValidator(argSpec, lodash_1.default.parseInt);
148
+ break;
149
+ }
150
+ // strings (like number and integer) are subject to further validation
151
+ // (e.g., must satisfy a mask or regex or even some custom validation
152
+ // function)
153
+ case TYPENAMES.STRING: {
154
+ argTypeFunction = getSchemaValidator(argSpec);
155
+ break;
156
+ }
157
+ // TODO: there may be some way to restrict this at the Ajv level --
158
+ // that may involve patching the metaschema.
159
+ case TYPENAMES.NULL:
160
+ // falls through
161
+ default: {
162
+ throw new TypeError(`Schema property "${arg}": \`${type}\` type unknown or disallowed`);
163
+ }
163
164
  }
164
- }
165
-
166
- return [aliases, argOpts];
165
+ // metavar is used in help text. `boolean` cannot have a metavar--it is not
166
+ // displayed--and `argparse` throws if you give it one.
167
+ if (type !== TYPENAMES.BOOLEAN) {
168
+ argOpts.metavar = screamingSnakeCase(name);
169
+ }
170
+ // the validity of "appiumCliTransformer" should already have been determined
171
+ // by ajv during schema validation in `finalizeSchema()`. the `array` &
172
+ // `object` types have already added a formatter (see above, so we don't do it
173
+ // twice).
174
+ if (type !== TYPENAMES.ARRAY && type !== TYPENAMES.OBJECT && appiumCliTransformer) {
175
+ argTypeFunction = lodash_1.default.flow(argTypeFunction ?? lodash_1.default.identity, cli_transformers_1.transformers[appiumCliTransformer]);
176
+ }
177
+ if (argTypeFunction) {
178
+ argOpts.type = argTypeFunction;
179
+ }
180
+ // convert JSON schema `enum` to `choices`. `enum` can contain any JSON type, but `argparse`
181
+ // is limited to a single type per arg (I think). so let's make everything a string.
182
+ // and might as well _require_ the `type: string` while we're at it.
183
+ if (enumValues && !lodash_1.default.isEmpty(enumValues)) {
184
+ if (type === TYPENAMES.STRING) {
185
+ argOpts.choices = enumValues.map(String);
186
+ }
187
+ else {
188
+ throw new TypeError(`Problem with schema for ${arg}; \`enum\` is only supported for \`type: 'string'\``);
189
+ }
190
+ }
191
+ return [aliases, argOpts];
167
192
  }
168
-
193
+ /**
194
+ * Converts the finalized, flattened schema representation into
195
+ * ArgumentDefinitions for handoff to `argparse`.
196
+ *
197
+ * @throws If schema has not been added to ajv (via `finalizeSchema()`)
198
+ * @returns {import('../cli/args').ArgumentDefinitions} A map of arryas of
199
+ * aliases to `argparse` arguments; empty if no schema found
200
+ */
169
201
  function toParserArgs() {
170
- const flattened = (0, _schema.flattenSchema)().filter(({
171
- schema
172
- }) => !schema.appiumCliIgnored);
173
- return new Map(_lodash.default.map(flattened, ({
174
- schema,
175
- argSpec
176
- }) => subSchemaToArgDef(schema, argSpec)));
202
+ const flattened = (0, schema_1.flattenSchema)().filter(({ schema }) => !schema.appiumCliIgnored);
203
+ return new Map(lodash_1.default.map(flattened, ({ schema, argSpec }) => subSchemaToArgDef(schema, argSpec)));
177
204
  }
178
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUWVBFTkFNRVMiLCJPYmplY3QiLCJmcmVlemUiLCJBUlJBWSIsIk9CSkVDVCIsIkJPT0xFQU4iLCJJTlRFR0VSIiwiTlVNQkVSIiwiTlVMTCIsIlNUUklORyIsIlNIT1JUX0FSR19DVVRPRkYiLCJhbGlhc1RvRmxhZyIsImFyZ1NwZWMiLCJhbGlhcyIsImV4dFR5cGUiLCJleHROYW1lIiwibmFtZSIsImFyZyIsImlzU2hvcnQiLCJsZW5ndGgiLCJfIiwia2ViYWJDYXNlIiwic2NyZWFtaW5nU25ha2VDYXNlIiwiZmxvdyIsInNuYWtlQ2FzZSIsInRvVXBwZXIiLCJnZXRTY2hlbWFWYWxpZGF0b3IiLCJyZWYiLCJzY2hlbWFJZCIsImNvZXJjZSIsImlkZW50aXR5IiwidmFsdWUiLCJjb2VyY2VkIiwiZXJyb3JzIiwidmFsaWRhdGUiLCJpc0VtcHR5IiwiQXJndW1lbnRUeXBlRXJyb3IiLCJmb3JtYXRFcnJvcnMiLCJtYWtlRGVzY3JpcHRpb24iLCJzY2hlbWEiLCJhcHBpdW1DbGlEZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwiYXBwaXVtRGVwcmVjYXRlZCIsImRlc2MiLCJzdWJTY2hlbWFUb0FyZ0RlZiIsInN1YlNjaGVtYSIsInR5cGUiLCJhcHBpdW1DbGlBbGlhc2VzIiwiYXBwaXVtQ2xpVHJhbnNmb3JtZXIiLCJlbnVtIiwiZW51bVZhbHVlcyIsImFsaWFzZXMiLCJtYXAiLCJhcmdPcHRzIiwicmVxdWlyZWQiLCJoZWxwIiwiYXJnVHlwZUZ1bmN0aW9uIiwiYWN0aW9uIiwiY29uc3QiLCJ0cmFuc2Zvcm1lcnMiLCJqc29uIiwiY3N2IiwicGFyc2VGbG9hdCIsInBhcnNlSW50IiwiVHlwZUVycm9yIiwibWV0YXZhciIsImNob2ljZXMiLCJTdHJpbmciLCJ0b1BhcnNlckFyZ3MiLCJmbGF0dGVuZWQiLCJmbGF0dGVuU2NoZW1hIiwiZmlsdGVyIiwiYXBwaXVtQ2xpSWdub3JlZCIsIk1hcCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2hlbWEvY2xpLWFyZ3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcmd1bWVudFR5cGVFcnJvcn0gZnJvbSAnYXJncGFyc2UnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7Zm9ybWF0RXJyb3JzIGFzIGZvcm1hdEVycm9yc30gZnJvbSAnLi4vY29uZmlnLWZpbGUnO1xuaW1wb3J0IHtmbGF0dGVuU2NoZW1hLCB2YWxpZGF0ZX0gZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHt0cmFuc2Zvcm1lcnN9IGZyb20gJy4vY2xpLXRyYW5zZm9ybWVycyc7XG5cbi8qKlxuICogVGhpcyBtb2R1bGUgY29uY2VybnMgZnVuY3Rpb25zIHdoaWNoIGNvbnZlcnQgc2NoZW1hIGRlZmluaXRpb25zIHRvXG4gKiBgYXJncGFyc2VgLWNvbXBhdGlibGUgZGF0YSBzdHJ1Y3R1cmVzLCBmb3IgZGVyaXZpbmcgQ0xJIGFyZ3VtZW50cyBmcm9tIGFcbiAqIHNjaGVtYS5cbiAqL1xuXG4vKipcbiAqIExvb2t1cCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBgdHlwZWAgZmllbGQgaW4gYSBKU09OIHNjaGVtYS5cbiAqIEB0eXBlIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoJ2pzb24tc2NoZW1hJykuSlNPTlNjaGVtYTdUeXBlTmFtZT4+fVxuICovXG5jb25zdCBUWVBFTkFNRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgQVJSQVk6ICdhcnJheScsXG4gIE9CSkVDVDogJ29iamVjdCcsXG4gIEJPT0xFQU46ICdib29sZWFuJyxcbiAgSU5URUdFUjogJ2ludGVnZXInLFxuICBOVU1CRVI6ICdudW1iZXInLFxuICBOVUxMOiAnbnVsbCcsXG4gIFNUUklORzogJ3N0cmluZycsXG59KTtcblxuLyoqXG4gKiBPcHRpb25zIHdpdGggYWxpYXMgbGVuZ3RocyBsZXNzIHRoYW4gdGhpcyB3aWxsIGJlIGNvbnNpZGVyZWQgXCJzaG9ydFwiIGZsYWdzLlxuICovXG5jb25zdCBTSE9SVF9BUkdfQ1VUT0ZGID0gMztcblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFsaWFzIChgZm9vYCkgdG8gYSBmbGFnIChgLS1mb29gKSBvciBhIHNob3J0IGZsYWcgKGAtZmApLlxuICogQHBhcmFtIHtBcmdTcGVjfSBhcmdTcGVjIC0gdGhlIGFyZ3VtZW50IHNwZWNpZmljYXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpYXNdIC0gdGhlIGFsaWFzIHRvIGNvbnZlcnQgdG8gYSBmbGFnXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgZmxhZ1xuICovXG5mdW5jdGlvbiBhbGlhc1RvRmxhZyhhcmdTcGVjLCBhbGlhcykge1xuICBjb25zdCB7ZXh0VHlwZSwgZXh0TmFtZSwgbmFtZX0gPSBhcmdTcGVjO1xuICBjb25zdCBhcmcgPSBhbGlhcyA/PyBuYW1lO1xuICBjb25zdCBpc1Nob3J0ID0gYXJnLmxlbmd0aCA8IFNIT1JUX0FSR19DVVRPRkY7XG4gIGlmIChleHRUeXBlICYmIGV4dE5hbWUpIHtcbiAgICByZXR1cm4gaXNTaG9ydFxuICAgICAgPyBgLS0ke2V4dFR5cGV9LSR7Xy5rZWJhYkNhc2UoZXh0TmFtZSl9LSR7YXJnfWBcbiAgICAgIDogYC0tJHtleHRUeXBlfS0ke18ua2ViYWJDYXNlKGV4dE5hbWUpfS0ke18ua2ViYWJDYXNlKGFyZyl9YDtcbiAgfVxuICByZXR1cm4gaXNTaG9ydCA/IGAtJHthcmd9YCA6IGAtLSR7Xy5rZWJhYkNhc2UoYXJnKX1gO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIFNDUkVBTUlOR19TTkFLRV9DQVNFXG4gKi9cbmNvbnN0IHNjcmVhbWluZ1NuYWtlQ2FzZSA9IF8uZmxvdyhfLnNuYWtlQ2FzZSwgXy50b1VwcGVyKTtcblxuLyoqXG4gKiBHaXZlbiB1bmlxdWUgcHJvcGVydHkgbmFtZSBgbmFtZWAsIHJldHVybiBhIGZ1bmN0aW9uIHdoaWNoIHZhbGlkYXRlcyBhIHZhbHVlXG4gKiBhZ2FpbnN0IGEgcHJvcGVydHkgd2l0aGluIHRoZSBzY2hlbWEuXG4gKiBAdGVtcGxhdGUgQ29lcmNlZFxuICogQHBhcmFtIHtBcmdTcGVjfSBhcmdTcGVjIC0gQXJndW1lbnQgbmFtZVxuICogQHBhcmFtIHsodmFsdWU6IHN0cmluZykgPT4gQ29lcmNlZH0gW2NvZXJjZV0gLSBGdW5jdGlvbiB0byBjb2VyY2UgdG8gYSBkaWZmZXJlbnRcbiAqIHByaW1pdGl2ZVxuICogQHRvZG8gU2VlIGlmIHdlIGNhbiByZW1vdmUgYGNvZXJjZWAgYnkgYWxsb3dpbmcgQWp2IHRvIGNvZXJjZSBpbiBpdHNcbiAqIGNvbnN0cnVjdG9yIG9wdGlvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIGdldFNjaGVtYVZhbGlkYXRvcih7cmVmOiBzY2hlbWFJZH0sIGNvZXJjZSA9IF8uaWRlbnRpdHkpIHtcbiAgLyoqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAqL1xuICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgY29lcmNlZCA9IGNvZXJjZSh2YWx1ZSk7XG4gICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGUoY29lcmNlZCwgc2NoZW1hSWQpO1xuICAgIGlmIChfLmlzRW1wdHkoZXJyb3JzKSkge1xuICAgICAgcmV0dXJuIGNvZXJjZWQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBBcmd1bWVudFR5cGVFcnJvcignXFxuXFxuJyArIGZvcm1hdEVycm9ycyhlcnJvcnMsIHZhbHVlLCB7c2NoZW1hSWR9KSk7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIHRoZSBkZXNjcmlwdGlvbiBmb3IgZGlzcGxheSBvbiB0aGUgQ0xJLCBnaXZlbiB0aGUgc2NoZW1hLlxuICogQHBhcmFtIHtBcHBpdW1KU09OU2NoZW1hfSBzY2hlbWFcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIG1ha2VEZXNjcmlwdGlvbihzY2hlbWEpIHtcbiAgY29uc3Qge2FwcGl1bUNsaURlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbiA9ICcnLCBhcHBpdW1EZXByZWNhdGVkfSA9IHNjaGVtYTtcbiAgbGV0IGRlc2MgPSBhcHBpdW1DbGlEZXNjcmlwdGlvbiA/PyBkZXNjcmlwdGlvbjtcbiAgaWYgKGFwcGl1bURlcHJlY2F0ZWQpIHtcbiAgICBkZXNjID0gYFtERVBSRUNBVEVEXSAke2Rlc2N9YDtcbiAgfVxuICByZXR1cm4gZGVzYztcbn1cblxuLyoqXG4gKiBHaXZlbiBhcmcgYG5hbWVgLCBhIEpTT04gc2NoZW1hIGBzdWJTY2hlbWFgLCBhbmQgb3B0aW9ucywgcmV0dXJuIGFuIGFyZ3VtZW50IGRlZmluaXRpb25cbiAqIGFzIHVuZGVyc3Rvb2QgYnkgYGFyZ3BhcnNlYC5cbiAqIEBwYXJhbSB7QXBwaXVtSlNPTlNjaGVtYX0gc3ViU2NoZW1hIC0gSlNPTiBzY2hlbWEgZm9yIHRoZSBvcHRpb25cbiAqIEBwYXJhbSB7QXJnU3BlY30gYXJnU3BlYyAtIEFyZ3VtZW50IHNwZWMgdHVwbGVcbiAqIEByZXR1cm5zIHtbc3RyaW5nW10sIGltcG9ydCgnYXJncGFyc2UnKS5Bcmd1bWVudE9wdGlvbnNdfSBUdXBsZSBvZiBmbGFnIGFuZCBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIHN1YlNjaGVtYVRvQXJnRGVmKHN1YlNjaGVtYSwgYXJnU3BlYykge1xuICBsZXQge3R5cGUsIGFwcGl1bUNsaUFsaWFzZXMsIGFwcGl1bUNsaVRyYW5zZm9ybWVyLCBlbnVtOiBlbnVtVmFsdWVzfSA9IHN1YlNjaGVtYTtcblxuICBjb25zdCB7bmFtZSwgYXJnfSA9IGFyZ1NwZWM7XG5cbiAgY29uc3QgYWxpYXNlcyA9IFtcbiAgICBhbGlhc1RvRmxhZyhhcmdTcGVjKSxcbiAgICAuLi4vKiogQHR5cGUge3N0cmluZ1tdfSAqLyAoYXBwaXVtQ2xpQWxpYXNlcyA/PyBbXSkubWFwKChhbGlhcykgPT4gYWxpYXNUb0ZsYWcoYXJnU3BlYywgYWxpYXMpKSxcbiAgXTtcblxuICAvKiogQHR5cGUge2ltcG9ydCgnYXJncGFyc2UnKS5Bcmd1bWVudE9wdGlvbnN9ICovXG4gIGxldCBhcmdPcHRzID0ge1xuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiBtYWtlRGVzY3JpcHRpb24oc3ViU2NoZW1hKSxcbiAgfTtcblxuICAvKipcbiAgICogR2VuZXJhbGx5IHdlIHdpbGwgcHJvdmlkZSBhIGB0eXBlYCB0byBgYXJncGFyc2VgIGFzIGEgZnVuY3Rpb24gd2hpY2hcbiAgICogdmFsaWRhdGVzIHVzaW5nIGFqdiAod2hpY2ggaXMgbXVjaCBtb3JlIGZ1bGwtZmVhdHVyZWQgdGhhbiB3aGF0IGBhcmdwYXJzZWBcbiAgICogY2FuIG9mZmVyKS4gVGhlIGV4Y2VwdGlvbiBpcyBgYm9vbGVhbmAtdHlwZSBvcHRpb25zLCB3aGljaCBoYXZlIG5vXG4gICAqIGBhcmdUeXBlYC5cbiAgICpcbiAgICogTm90IHN1cmUgaWYgdGhpcyB0eXBlIGlzIGNvcnJlY3QsIGJ1dCBpdCdzIG5vdCBkb2luZyB3aGF0IEkgd2FudC4gIEkgd2FudFxuICAgKiB0byBzYXkgXCJ0aGlzIGlzIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBzb21ldGhpbmcgb2YgdHlwZSBgVGAgd2hlcmUgYFRgIGlzXG4gICAqIG5ldmVyIGEgYFByb21pc2VgXCIuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgc3luYy5cbiAgICogQHR5cGUgeygodmFsdWU6IHN0cmluZykgPT4gdW5rbm93bil8dW5kZWZpbmVkfVxuICAgKi9cbiAgbGV0IGFyZ1R5cGVGdW5jdGlvbjtcblxuICAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlcyBmb3IgdmFyaW91cyB0eXBlc1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAvLyBib29sZWFucyBkbyBub3QgaGF2ZSBhIHR5cGUgcGVyIGBBcmd1bWVudE9wdGlvbnNgLCBqdXN0IGFuIFwiYWN0aW9uXCJcbiAgICAvLyBOT1RFOiBkdWUgdG8gbGltaXRhdGlvbnMgb2YgYGFyZ3BhcnNlYCwgd2UgY2Fubm90IHByb3ZpZGUgZmFuY3kgaGVscCB0ZXh0LCBhbmQgbXVzdCByZWx5IG9uIGl0cyBpbnRlcm5hbCBlcnJvciBtZXNzYWdpbmcuXG4gICAgY2FzZSBUWVBFTkFNRVMuQk9PTEVBTjoge1xuICAgICAgYXJnT3B0cy5hY3Rpb24gPSAnc3RvcmVfY29uc3QnO1xuICAgICAgYXJnT3B0cy5jb25zdCA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIFRZUEVOQU1FUy5PQkpFQ1Q6IHtcbiAgICAgIGFyZ1R5cGVGdW5jdGlvbiA9IHRyYW5zZm9ybWVycy5qc29uO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gYXJyYXlzIGFyZSB0cmVhdGVkIGFzIENTVnMsIGJlY2F1c2UgYGFyZ3BhcnNlYCBkb2Vzbid0IGhhbmRsZSBhcnJheSBkYXRhLlxuICAgIGNhc2UgVFlQRU5BTUVTLkFSUkFZOiB7XG4gICAgICBhcmdUeXBlRnVuY3Rpb24gPSB0cmFuc2Zvcm1lcnMuY3N2O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gXCJudW1iZXJcIiB0eXBlIGlzIGNvZXJjZWQgdG8gZmxvYXQuIGBhcmdwYXJzZWAgZG9lcyB0aGlzIGZvciB1cyBpZiB3ZSB1c2UgYGZsb2F0YCB0eXBlLCBidXRcbiAgICAvLyB3ZSBkb24ndC5cbiAgICBjYXNlIFRZUEVOQU1FUy5OVU1CRVI6IHtcbiAgICAgIGFyZ1R5cGVGdW5jdGlvbiA9IGdldFNjaGVtYVZhbGlkYXRvcihhcmdTcGVjLCBwYXJzZUZsb2F0KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFwiaW50ZWdlclwiIGlzIGNvZXJjZWQgdG8gYW4gLi4gaW50ZWdlci4gIGFnYWluLCBgYXJncGFyc2VgIHdvdWxkIGRvIHRoaXMgZm9yIHVzIGlmIHdlIHVzZWQgYGludGAuXG4gICAgY2FzZSBUWVBFTkFNRVMuSU5URUdFUjoge1xuICAgICAgYXJnVHlwZUZ1bmN0aW9uID0gZ2V0U2NoZW1hVmFsaWRhdG9yKGFyZ1NwZWMsIF8ucGFyc2VJbnQpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gc3RyaW5ncyAobGlrZSBudW1iZXIgYW5kIGludGVnZXIpIGFyZSBzdWJqZWN0IHRvIGZ1cnRoZXIgdmFsaWRhdGlvblxuICAgIC8vIChlLmcuLCBtdXN0IHNhdGlzZnkgYSBtYXNrIG9yIHJlZ2V4IG9yIGV2ZW4gc29tZSBjdXN0b20gdmFsaWRhdGlvblxuICAgIC8vIGZ1bmN0aW9uKVxuICAgIGNhc2UgVFlQRU5BTUVTLlNUUklORzoge1xuICAgICAgYXJnVHlwZUZ1bmN0aW9uID0gZ2V0U2NoZW1hVmFsaWRhdG9yKGFyZ1NwZWMpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogdGhlcmUgbWF5IGJlIHNvbWUgd2F5IHRvIHJlc3RyaWN0IHRoaXMgYXQgdGhlIEFqdiBsZXZlbCAtLVxuICAgIC8vIHRoYXQgbWF5IGludm9sdmUgcGF0Y2hpbmcgdGhlIG1ldGFzY2hlbWEuXG4gICAgY2FzZSBUWVBFTkFNRVMuTlVMTDpcbiAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgZGVmYXVsdDoge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgU2NoZW1hIHByb3BlcnR5IFwiJHthcmd9XCI6IFxcYCR7dHlwZX1cXGAgdHlwZSB1bmtub3duIG9yIGRpc2FsbG93ZWRgKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXRhdmFyIGlzIHVzZWQgaW4gaGVscCB0ZXh0LiBgYm9vbGVhbmAgY2Fubm90IGhhdmUgYSBtZXRhdmFyLS1pdCBpcyBub3RcbiAgLy8gZGlzcGxheWVkLS1hbmQgYGFyZ3BhcnNlYCB0aHJvd3MgaWYgeW91IGdpdmUgaXQgb25lLlxuICBpZiAodHlwZSAhPT0gVFlQRU5BTUVTLkJPT0xFQU4pIHtcbiAgICBhcmdPcHRzLm1ldGF2YXIgPSBzY3JlYW1pbmdTbmFrZUNhc2UobmFtZSk7XG4gIH1cblxuICAvLyB0aGUgdmFsaWRpdHkgb2YgXCJhcHBpdW1DbGlUcmFuc2Zvcm1lclwiIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBkZXRlcm1pbmVkXG4gIC8vIGJ5IGFqdiBkdXJpbmcgc2NoZW1hIHZhbGlkYXRpb24gaW4gYGZpbmFsaXplU2NoZW1hKClgLiB0aGUgYGFycmF5YCAmXG4gIC8vIGBvYmplY3RgIHR5cGVzIGhhdmUgYWxyZWFkeSBhZGRlZCBhIGZvcm1hdHRlciAoc2VlIGFib3ZlLCBzbyB3ZSBkb24ndCBkbyBpdFxuICAvLyB0d2ljZSkuXG4gIGlmICh0eXBlICE9PSBUWVBFTkFNRVMuQVJSQVkgJiYgdHlwZSAhPT0gVFlQRU5BTUVTLk9CSkVDVCAmJiBhcHBpdW1DbGlUcmFuc2Zvcm1lcikge1xuICAgIGFyZ1R5cGVGdW5jdGlvbiA9IF8uZmxvdyhhcmdUeXBlRnVuY3Rpb24gPz8gXy5pZGVudGl0eSwgdHJhbnNmb3JtZXJzW2FwcGl1bUNsaVRyYW5zZm9ybWVyXSk7XG4gIH1cblxuICBpZiAoYXJnVHlwZUZ1bmN0aW9uKSB7XG4gICAgYXJnT3B0cy50eXBlID0gYXJnVHlwZUZ1bmN0aW9uO1xuICB9XG5cbiAgLy8gY29udmVydCBKU09OIHNjaGVtYSBgZW51bWAgdG8gYGNob2ljZXNgLiBgZW51bWAgY2FuIGNvbnRhaW4gYW55IEpTT04gdHlwZSwgYnV0IGBhcmdwYXJzZWBcbiAgLy8gaXMgbGltaXRlZCB0byBhIHNpbmdsZSB0eXBlIHBlciBhcmcgKEkgdGhpbmspLiAgc28gbGV0J3MgbWFrZSBldmVyeXRoaW5nIGEgc3RyaW5nLlxuICAvLyBhbmQgbWlnaHQgYXMgd2VsbCBfcmVxdWlyZV8gdGhlIGB0eXBlOiBzdHJpbmdgIHdoaWxlIHdlJ3JlIGF0IGl0LlxuICBpZiAoZW51bVZhbHVlcyAmJiAhXy5pc0VtcHR5KGVudW1WYWx1ZXMpKSB7XG4gICAgaWYgKHR5cGUgPT09IFRZUEVOQU1FUy5TVFJJTkcpIHtcbiAgICAgIGFyZ09wdHMuY2hvaWNlcyA9IGVudW1WYWx1ZXMubWFwKFN0cmluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGBQcm9ibGVtIHdpdGggc2NoZW1hIGZvciAke2FyZ307IFxcYGVudW1cXGAgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFxcYHR5cGU6ICdzdHJpbmcnXFxgYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2FsaWFzZXMsIGFyZ09wdHNdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBmaW5hbGl6ZWQsIGZsYXR0ZW5lZCBzY2hlbWEgcmVwcmVzZW50YXRpb24gaW50b1xuICogQXJndW1lbnREZWZpbml0aW9ucyBmb3IgaGFuZG9mZiB0byBgYXJncGFyc2VgLlxuICpcbiAqIEB0aHJvd3MgSWYgc2NoZW1hIGhhcyBub3QgYmVlbiBhZGRlZCB0byBhanYgKHZpYSBgZmluYWxpemVTY2hlbWEoKWApXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuLi9jbGkvYXJncycpLkFyZ3VtZW50RGVmaW5pdGlvbnN9IEEgbWFwIG9mIGFycnlhcyBvZlxuICogYWxpYXNlcyB0byBgYXJncGFyc2VgIGFyZ3VtZW50czsgZW1wdHkgaWYgbm8gc2NoZW1hIGZvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1BhcnNlckFyZ3MoKSB7XG4gIGNvbnN0IGZsYXR0ZW5lZCA9IGZsYXR0ZW5TY2hlbWEoKS5maWx0ZXIoKHtzY2hlbWF9KSA9PiAhc2NoZW1hLmFwcGl1bUNsaUlnbm9yZWQpO1xuICByZXR1cm4gbmV3IE1hcChfLm1hcChmbGF0dGVuZWQsICh7c2NoZW1hLCBhcmdTcGVjfSkgPT4gc3ViU2NoZW1hVG9BcmdEZWYoc2NoZW1hLCBhcmdTcGVjKSkpO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYvZGlzdC90eXBlcycpLkZvcm1hdFZhbGlkYXRvcjxUPn0gRm9ybWF0VmFsaWRhdG9yPFQ+XG4gKi9cblxuLyoqXG4gKiBBIEpTT04gNyBzY2hlbWEgd2l0aCBvdXIgY3VzdG9tIGtleXdvcmRzLlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9rZXl3b3JkcycpLkFwcGl1bUpTT05TY2hlbWFLZXl3b3JkcyAmIGltcG9ydCgnanNvbi1zY2hlbWEnKS5KU09OU2NoZW1hN30gQXBwaXVtSlNPTlNjaGVtYVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9hcmctc3BlYycpLkFyZ1NwZWN9IEFyZ1NwZWNcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQVlBLE1BQU1BLFNBQVMsR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWM7RUFDOUJDLEtBQUssRUFBRSxPQUR1QjtFQUU5QkMsTUFBTSxFQUFFLFFBRnNCO0VBRzlCQyxPQUFPLEVBQUUsU0FIcUI7RUFJOUJDLE9BQU8sRUFBRSxTQUpxQjtFQUs5QkMsTUFBTSxFQUFFLFFBTHNCO0VBTTlCQyxJQUFJLEVBQUUsTUFOd0I7RUFPOUJDLE1BQU0sRUFBRTtBQVBzQixDQUFkLENBQWxCO0FBYUEsTUFBTUMsZ0JBQWdCLEdBQUcsQ0FBekI7O0FBUUEsU0FBU0MsV0FBVCxDQUFxQkMsT0FBckIsRUFBOEJDLEtBQTlCLEVBQXFDO0VBQ25DLE1BQU07SUFBQ0MsT0FBRDtJQUFVQyxPQUFWO0lBQW1CQztFQUFuQixJQUEyQkosT0FBakM7RUFDQSxNQUFNSyxHQUFHLEdBQUdKLEtBQUssSUFBSUcsSUFBckI7RUFDQSxNQUFNRSxPQUFPLEdBQUdELEdBQUcsQ0FBQ0UsTUFBSixHQUFhVCxnQkFBN0I7O0VBQ0EsSUFBSUksT0FBTyxJQUFJQyxPQUFmLEVBQXdCO0lBQ3RCLE9BQU9HLE9BQU8sR0FDVCxLQUFJSixPQUFRLElBQUdNLGVBQUEsQ0FBRUMsU0FBRixDQUFZTixPQUFaLENBQXFCLElBQUdFLEdBQUksRUFEbEMsR0FFVCxLQUFJSCxPQUFRLElBQUdNLGVBQUEsQ0FBRUMsU0FBRixDQUFZTixPQUFaLENBQXFCLElBQUdLLGVBQUEsQ0FBRUMsU0FBRixDQUFZSixHQUFaLENBQWlCLEVBRjdEO0VBR0Q7O0VBQ0QsT0FBT0MsT0FBTyxHQUFJLElBQUdELEdBQUksRUFBWCxHQUFnQixLQUFJRyxlQUFBLENBQUVDLFNBQUYsQ0FBWUosR0FBWixDQUFpQixFQUFuRDtBQUNEOztBQUtELE1BQU1LLGtCQUFrQixHQUFHRixlQUFBLENBQUVHLElBQUYsQ0FBT0gsZUFBQSxDQUFFSSxTQUFULEVBQW9CSixlQUFBLENBQUVLLE9BQXRCLENBQTNCOztBQWFBLFNBQVNDLGtCQUFULENBQTRCO0VBQUNDLEdBQUcsRUFBRUM7QUFBTixDQUE1QixFQUE2Q0MsTUFBTSxHQUFHVCxlQUFBLENBQUVVLFFBQXhELEVBQWtFO0VBRWhFLE9BQVFDLEtBQUQsSUFBVztJQUNoQixNQUFNQyxPQUFPLEdBQUdILE1BQU0sQ0FBQ0UsS0FBRCxDQUF0QjtJQUNBLE1BQU1FLE1BQU0sR0FBRyxJQUFBQyxnQkFBQSxFQUFTRixPQUFULEVBQWtCSixRQUFsQixDQUFmOztJQUNBLElBQUlSLGVBQUEsQ0FBRWUsT0FBRixDQUFVRixNQUFWLENBQUosRUFBdUI7TUFDckIsT0FBT0QsT0FBUDtJQUNEOztJQUNELE1BQU0sSUFBSUksMkJBQUosQ0FBc0IsU0FBUyxJQUFBQyx3QkFBQSxFQUFhSixNQUFiLEVBQXFCRixLQUFyQixFQUE0QjtNQUFDSDtJQUFELENBQTVCLENBQS9CLENBQU47RUFDRCxDQVBEO0FBUUQ7O0FBT0QsU0FBU1UsZUFBVCxDQUF5QkMsTUFBekIsRUFBaUM7RUFDL0IsTUFBTTtJQUFDQyxvQkFBRDtJQUF1QkMsV0FBVyxHQUFHLEVBQXJDO0lBQXlDQztFQUF6QyxJQUE2REgsTUFBbkU7RUFDQSxJQUFJSSxJQUFJLEdBQUdILG9CQUFvQixJQUFJQyxXQUFuQzs7RUFDQSxJQUFJQyxnQkFBSixFQUFzQjtJQUNwQkMsSUFBSSxHQUFJLGdCQUFlQSxJQUFLLEVBQTVCO0VBQ0Q7O0VBQ0QsT0FBT0EsSUFBUDtBQUNEOztBQVNELFNBQVNDLGlCQUFULENBQTJCQyxTQUEzQixFQUFzQ2pDLE9BQXRDLEVBQStDO0VBQzdDLElBQUk7SUFBQ2tDLElBQUQ7SUFBT0MsZ0JBQVA7SUFBeUJDLG9CQUF6QjtJQUErQ0MsSUFBSSxFQUFFQztFQUFyRCxJQUFtRUwsU0FBdkU7RUFFQSxNQUFNO0lBQUM3QixJQUFEO0lBQU9DO0VBQVAsSUFBY0wsT0FBcEI7RUFFQSxNQUFNdUMsT0FBTyxHQUFHLENBQ2R4QyxXQUFXLENBQUNDLE9BQUQsQ0FERyxFQUVkLEdBQTJCLENBQUNtQyxnQkFBZ0IsSUFBSSxFQUFyQixFQUF5QkssR0FBekIsQ0FBOEJ2QyxLQUFELElBQVdGLFdBQVcsQ0FBQ0MsT0FBRCxFQUFVQyxLQUFWLENBQW5ELENBRmIsQ0FBaEI7RUFNQSxJQUFJd0MsT0FBTyxHQUFHO0lBQ1pDLFFBQVEsRUFBRSxLQURFO0lBRVpDLElBQUksRUFBRWpCLGVBQWUsQ0FBQ08sU0FBRDtFQUZULENBQWQ7RUFnQkEsSUFBSVcsZUFBSjs7RUFHQSxRQUFRVixJQUFSO0lBR0UsS0FBSzlDLFNBQVMsQ0FBQ0ssT0FBZjtNQUF3QjtRQUN0QmdELE9BQU8sQ0FBQ0ksTUFBUixHQUFpQixhQUFqQjtRQUNBSixPQUFPLENBQUNLLEtBQVIsR0FBZ0IsSUFBaEI7UUFDQTtNQUNEOztJQUVELEtBQUsxRCxTQUFTLENBQUNJLE1BQWY7TUFBdUI7UUFDckJvRCxlQUFlLEdBQUdHLDZCQUFBLENBQWFDLElBQS9CO1FBQ0E7TUFDRDs7SUFHRCxLQUFLNUQsU0FBUyxDQUFDRyxLQUFmO01BQXNCO1FBQ3BCcUQsZUFBZSxHQUFHRyw2QkFBQSxDQUFhRSxHQUEvQjtRQUNBO01BQ0Q7O0lBSUQsS0FBSzdELFNBQVMsQ0FBQ08sTUFBZjtNQUF1QjtRQUNyQmlELGVBQWUsR0FBRzlCLGtCQUFrQixDQUFDZCxPQUFELEVBQVVrRCxVQUFWLENBQXBDO1FBQ0E7TUFDRDs7SUFHRCxLQUFLOUQsU0FBUyxDQUFDTSxPQUFmO01BQXdCO1FBQ3RCa0QsZUFBZSxHQUFHOUIsa0JBQWtCLENBQUNkLE9BQUQsRUFBVVEsZUFBQSxDQUFFMkMsUUFBWixDQUFwQztRQUNBO01BQ0Q7O0lBS0QsS0FBSy9ELFNBQVMsQ0FBQ1MsTUFBZjtNQUF1QjtRQUNyQitDLGVBQWUsR0FBRzlCLGtCQUFrQixDQUFDZCxPQUFELENBQXBDO1FBQ0E7TUFDRDs7SUFJRCxLQUFLWixTQUFTLENBQUNRLElBQWY7SUFFQTtNQUFTO1FBQ1AsTUFBTSxJQUFJd0QsU0FBSixDQUFlLG9CQUFtQi9DLEdBQUksUUFBTzZCLElBQUssK0JBQWxELENBQU47TUFDRDtFQS9DSDs7RUFvREEsSUFBSUEsSUFBSSxLQUFLOUMsU0FBUyxDQUFDSyxPQUF2QixFQUFnQztJQUM5QmdELE9BQU8sQ0FBQ1ksT0FBUixHQUFrQjNDLGtCQUFrQixDQUFDTixJQUFELENBQXBDO0VBQ0Q7O0VBTUQsSUFBSThCLElBQUksS0FBSzlDLFNBQVMsQ0FBQ0csS0FBbkIsSUFBNEIyQyxJQUFJLEtBQUs5QyxTQUFTLENBQUNJLE1BQS9DLElBQXlENEMsb0JBQTdELEVBQW1GO0lBQ2pGUSxlQUFlLEdBQUdwQyxlQUFBLENBQUVHLElBQUYsQ0FBT2lDLGVBQWUsSUFBSXBDLGVBQUEsQ0FBRVUsUUFBNUIsRUFBc0M2Qiw2QkFBQSxDQUFhWCxvQkFBYixDQUF0QyxDQUFsQjtFQUNEOztFQUVELElBQUlRLGVBQUosRUFBcUI7SUFDbkJILE9BQU8sQ0FBQ1AsSUFBUixHQUFlVSxlQUFmO0VBQ0Q7O0VBS0QsSUFBSU4sVUFBVSxJQUFJLENBQUM5QixlQUFBLENBQUVlLE9BQUYsQ0FBVWUsVUFBVixDQUFuQixFQUEwQztJQUN4QyxJQUFJSixJQUFJLEtBQUs5QyxTQUFTLENBQUNTLE1BQXZCLEVBQStCO01BQzdCNEMsT0FBTyxDQUFDYSxPQUFSLEdBQWtCaEIsVUFBVSxDQUFDRSxHQUFYLENBQWVlLE1BQWYsQ0FBbEI7SUFDRCxDQUZELE1BRU87TUFDTCxNQUFNLElBQUlILFNBQUosQ0FDSCwyQkFBMEIvQyxHQUFJLHFEQUQzQixDQUFOO0lBR0Q7RUFDRjs7RUFFRCxPQUFPLENBQUNrQyxPQUFELEVBQVVFLE9BQVYsQ0FBUDtBQUNEOztBQVVNLFNBQVNlLFlBQVQsR0FBd0I7RUFDN0IsTUFBTUMsU0FBUyxHQUFHLElBQUFDLHFCQUFBLElBQWdCQyxNQUFoQixDQUF1QixDQUFDO0lBQUNoQztFQUFELENBQUQsS0FBYyxDQUFDQSxNQUFNLENBQUNpQyxnQkFBN0MsQ0FBbEI7RUFDQSxPQUFPLElBQUlDLEdBQUosQ0FBUXJELGVBQUEsQ0FBRWdDLEdBQUYsQ0FBTWlCLFNBQU4sRUFBaUIsQ0FBQztJQUFDOUIsTUFBRDtJQUFTM0I7RUFBVCxDQUFELEtBQXVCZ0MsaUJBQWlCLENBQUNMLE1BQUQsRUFBUzNCLE9BQVQsQ0FBekQsQ0FBUixDQUFQO0FBQ0QifQ==
205
+ exports.toParserArgs = toParserArgs;
206
+ /**
207
+ * @template T
208
+ * @typedef {import('ajv/dist/types').FormatValidator<T>} FormatValidator<T>
209
+ */
210
+ /**
211
+ * A JSON 7 schema with our custom keywords.
212
+ * @typedef {import('./keywords').AppiumJSONSchemaKeywords & import('json-schema').JSONSchema7} AppiumJSONSchema
213
+ */
214
+ /**
215
+ * @typedef {import('./arg-spec').ArgSpec} ArgSpec
216
+ */
217
+ //# sourceMappingURL=cli-args.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-args.js","names":["TYPENAMES","Object","freeze","ARRAY","OBJECT","BOOLEAN","INTEGER","NUMBER","NULL","STRING","SHORT_ARG_CUTOFF","aliasToFlag","argSpec","alias","extType","extName","name","arg","isShort","length","_","kebabCase","screamingSnakeCase","flow","snakeCase","toUpper","getSchemaValidator","ref","schemaId","coerce","identity","value","coerced","errors","validate","isEmpty","ArgumentTypeError","formatErrors","makeDescription","schema","appiumCliDescription","description","appiumDeprecated","desc","subSchemaToArgDef","subSchema","type","appiumCliAliases","appiumCliTransformer","enum","enumValues","aliases","map","argOpts","required","help","argTypeFunction","action","const","transformers","json","csv","parseFloat","parseInt","TypeError","metavar","choices","String","toParserArgs","flattened","flattenSchema","filter","appiumCliIgnored","Map"],"sources":["../../../lib/schema/cli-args.js"],"sourcesContent":["import {ArgumentTypeError} from 'argparse';\nimport _ from 'lodash';\nimport {formatErrors as formatErrors} from '../config-file';\nimport {flattenSchema, validate} from './schema';\nimport {transformers} from './cli-transformers';\n\n/**\n * This module concerns functions which convert schema definitions to\n * `argparse`-compatible data structures, for deriving CLI arguments from a\n * schema.\n */\n\n/**\n * Lookup of possible values for the `type` field in a JSON schema.\n * @type {Readonly<Record<string, import('json-schema').JSONSchema7TypeName>>}\n */\nconst TYPENAMES = Object.freeze({\n ARRAY: 'array',\n OBJECT: 'object',\n BOOLEAN: 'boolean',\n INTEGER: 'integer',\n NUMBER: 'number',\n NULL: 'null',\n STRING: 'string',\n});\n\n/**\n * Options with alias lengths less than this will be considered \"short\" flags.\n */\nconst SHORT_ARG_CUTOFF = 3;\n\n/**\n * Convert an alias (`foo`) to a flag (`--foo`) or a short flag (`-f`).\n * @param {ArgSpec} argSpec - the argument specification\n * @param {string} [alias] - the alias to convert to a flag\n * @returns {string} the flag\n */\nfunction aliasToFlag(argSpec, alias) {\n const {extType, extName, name} = argSpec;\n const arg = alias ?? name;\n const isShort = arg.length < SHORT_ARG_CUTOFF;\n if (extType && extName) {\n return isShort\n ? `--${extType}-${_.kebabCase(extName)}-${arg}`\n : `--${extType}-${_.kebabCase(extName)}-${_.kebabCase(arg)}`;\n }\n return isShort ? `-${arg}` : `--${_.kebabCase(arg)}`;\n}\n\n/**\n * Converts a string to SCREAMING_SNAKE_CASE\n */\nconst screamingSnakeCase = _.flow(_.snakeCase, _.toUpper);\n\n/**\n * Given unique property name `name`, return a function which validates a value\n * against a property within the schema.\n * @template Coerced\n * @param {ArgSpec} argSpec - Argument name\n * @param {(value: string) => Coerced} [coerce] - Function to coerce to a different\n * primitive\n * @todo See if we can remove `coerce` by allowing Ajv to coerce in its\n * constructor options\n * @returns\n */\nfunction getSchemaValidator({ref: schemaId}, coerce = _.identity) {\n /** @param {string} value */\n return (value) => {\n const coerced = coerce(value);\n const errors = validate(coerced, schemaId);\n if (_.isEmpty(errors)) {\n return coerced;\n }\n throw new ArgumentTypeError('\\n\\n' + formatErrors(errors, value, {schemaId}));\n };\n}\n\n/**\n * Determine the description for display on the CLI, given the schema.\n * @param {AppiumJSONSchema} schema\n * @returns {string}\n */\nfunction makeDescription(schema) {\n const {appiumCliDescription, description = '', appiumDeprecated} = schema;\n let desc = appiumCliDescription ?? description;\n if (appiumDeprecated) {\n desc = `[DEPRECATED] ${desc}`;\n }\n return desc;\n}\n\n/**\n * Given arg `name`, a JSON schema `subSchema`, and options, return an argument definition\n * as understood by `argparse`.\n * @param {AppiumJSONSchema} subSchema - JSON schema for the option\n * @param {ArgSpec} argSpec - Argument spec tuple\n * @returns {[string[], import('argparse').ArgumentOptions]} Tuple of flag and options\n */\nfunction subSchemaToArgDef(subSchema, argSpec) {\n let {type, appiumCliAliases, appiumCliTransformer, enum: enumValues} = subSchema;\n\n const {name, arg} = argSpec;\n\n const aliases = [\n aliasToFlag(argSpec),\n .../** @type {string[]} */ (appiumCliAliases ?? []).map((alias) => aliasToFlag(argSpec, alias)),\n ];\n\n /** @type {import('argparse').ArgumentOptions} */\n let argOpts = {\n required: false,\n help: makeDescription(subSchema),\n };\n\n /**\n * Generally we will provide a `type` to `argparse` as a function which\n * validates using ajv (which is much more full-featured than what `argparse`\n * can offer). The exception is `boolean`-type options, which have no\n * `argType`.\n *\n * Not sure if this type is correct, but it's not doing what I want. I want\n * to say \"this is a function which returns something of type `T` where `T` is\n * never a `Promise`\". This function must be sync.\n * @type {((value: string) => unknown)|undefined}\n */\n let argTypeFunction;\n\n // handle special cases for various types\n switch (type) {\n // booleans do not have a type per `ArgumentOptions`, just an \"action\"\n // NOTE: due to limitations of `argparse`, we cannot provide fancy help text, and must rely on its internal error messaging.\n case TYPENAMES.BOOLEAN: {\n argOpts.action = 'store_const';\n argOpts.const = true;\n break;\n }\n\n case TYPENAMES.OBJECT: {\n argTypeFunction = transformers.json;\n break;\n }\n\n // arrays are treated as CSVs, because `argparse` doesn't handle array data.\n case TYPENAMES.ARRAY: {\n argTypeFunction = transformers.csv;\n break;\n }\n\n // \"number\" type is coerced to float. `argparse` does this for us if we use `float` type, but\n // we don't.\n case TYPENAMES.NUMBER: {\n argTypeFunction = getSchemaValidator(argSpec, parseFloat);\n break;\n }\n\n // \"integer\" is coerced to an .. integer. again, `argparse` would do this for us if we used `int`.\n case TYPENAMES.INTEGER: {\n argTypeFunction = getSchemaValidator(argSpec, _.parseInt);\n break;\n }\n\n // strings (like number and integer) are subject to further validation\n // (e.g., must satisfy a mask or regex or even some custom validation\n // function)\n case TYPENAMES.STRING: {\n argTypeFunction = getSchemaValidator(argSpec);\n break;\n }\n\n // TODO: there may be some way to restrict this at the Ajv level --\n // that may involve patching the metaschema.\n case TYPENAMES.NULL:\n // falls through\n default: {\n throw new TypeError(`Schema property \"${arg}\": \\`${type}\\` type unknown or disallowed`);\n }\n }\n\n // metavar is used in help text. `boolean` cannot have a metavar--it is not\n // displayed--and `argparse` throws if you give it one.\n if (type !== TYPENAMES.BOOLEAN) {\n argOpts.metavar = screamingSnakeCase(name);\n }\n\n // the validity of \"appiumCliTransformer\" should already have been determined\n // by ajv during schema validation in `finalizeSchema()`. the `array` &\n // `object` types have already added a formatter (see above, so we don't do it\n // twice).\n if (type !== TYPENAMES.ARRAY && type !== TYPENAMES.OBJECT && appiumCliTransformer) {\n argTypeFunction = _.flow(argTypeFunction ?? _.identity, transformers[appiumCliTransformer]);\n }\n\n if (argTypeFunction) {\n argOpts.type = argTypeFunction;\n }\n\n // convert JSON schema `enum` to `choices`. `enum` can contain any JSON type, but `argparse`\n // is limited to a single type per arg (I think). so let's make everything a string.\n // and might as well _require_ the `type: string` while we're at it.\n if (enumValues && !_.isEmpty(enumValues)) {\n if (type === TYPENAMES.STRING) {\n argOpts.choices = enumValues.map(String);\n } else {\n throw new TypeError(\n `Problem with schema for ${arg}; \\`enum\\` is only supported for \\`type: 'string'\\``\n );\n }\n }\n\n return [aliases, argOpts];\n}\n\n/**\n * Converts the finalized, flattened schema representation into\n * ArgumentDefinitions for handoff to `argparse`.\n *\n * @throws If schema has not been added to ajv (via `finalizeSchema()`)\n * @returns {import('../cli/args').ArgumentDefinitions} A map of arryas of\n * aliases to `argparse` arguments; empty if no schema found\n */\nexport function toParserArgs() {\n const flattened = flattenSchema().filter(({schema}) => !schema.appiumCliIgnored);\n return new Map(_.map(flattened, ({schema, argSpec}) => subSchemaToArgDef(schema, argSpec)));\n}\n\n/**\n * @template T\n * @typedef {import('ajv/dist/types').FormatValidator<T>} FormatValidator<T>\n */\n\n/**\n * A JSON 7 schema with our custom keywords.\n * @typedef {import('./keywords').AppiumJSONSchemaKeywords & import('json-schema').JSONSchema7} AppiumJSONSchema\n */\n\n/**\n * @typedef {import('./arg-spec').ArgSpec} ArgSpec\n */\n"],"mappings":"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"}
1
+ {"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../../../lib/schema/cli-args.js"],"names":[],"mappings":"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"}