appium 3.2.2 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/cli/args.d.ts +16 -12
- package/build/lib/cli/args.d.ts.map +1 -1
- package/build/lib/cli/args.js +15 -35
- package/build/lib/cli/args.js.map +1 -1
- package/build/lib/cli/driver-command.d.ts +51 -93
- package/build/lib/cli/driver-command.d.ts.map +1 -1
- package/build/lib/cli/driver-command.js +11 -66
- package/build/lib/cli/driver-command.js.map +1 -1
- package/build/lib/cli/extension-command.d.ts +211 -415
- package/build/lib/cli/extension-command.d.ts.map +1 -1
- package/build/lib/cli/extension-command.js +384 -653
- package/build/lib/cli/extension-command.js.map +1 -1
- package/build/lib/cli/extension.d.ts +11 -16
- package/build/lib/cli/extension.d.ts.map +1 -1
- package/build/lib/cli/extension.js +10 -28
- package/build/lib/cli/extension.js.map +1 -1
- package/build/lib/cli/parser.d.ts +40 -69
- package/build/lib/cli/parser.d.ts.map +1 -1
- package/build/lib/cli/parser.js +24 -59
- package/build/lib/cli/parser.js.map +1 -1
- package/build/lib/cli/plugin-command.d.ts +50 -90
- package/build/lib/cli/plugin-command.d.ts.map +1 -1
- package/build/lib/cli/plugin-command.js +11 -63
- package/build/lib/cli/plugin-command.js.map +1 -1
- package/build/lib/cli/setup-command.d.ts +21 -26
- package/build/lib/cli/setup-command.d.ts.map +1 -1
- package/build/lib/cli/setup-command.js +13 -55
- package/build/lib/cli/setup-command.js.map +1 -1
- package/build/lib/cli/utils.d.ts +27 -29
- package/build/lib/cli/utils.d.ts.map +1 -1
- package/build/lib/cli/utils.js +29 -31
- package/build/lib/cli/utils.js.map +1 -1
- package/build/lib/config-file.d.ts +24 -67
- package/build/lib/config-file.d.ts.map +1 -1
- package/build/lib/config-file.js +56 -115
- package/build/lib/config-file.js.map +1 -1
- package/build/lib/config.d.ts +42 -44
- package/build/lib/config.d.ts.map +1 -1
- package/build/lib/config.js +75 -107
- package/build/lib/config.js.map +1 -1
- package/build/lib/constants.d.ts +23 -23
- package/build/lib/constants.d.ts.map +1 -1
- package/build/lib/constants.js +10 -15
- package/build/lib/constants.js.map +1 -1
- package/build/lib/doctor/doctor.d.ts +40 -57
- package/build/lib/doctor/doctor.d.ts.map +1 -1
- package/build/lib/doctor/doctor.js +29 -60
- package/build/lib/doctor/doctor.js.map +1 -1
- package/build/lib/grid-register.d.ts +32 -7
- package/build/lib/grid-register.d.ts.map +1 -1
- package/build/lib/grid-register.js +84 -48
- package/build/lib/grid-register.js.map +1 -1
- package/build/lib/logsink.d.ts +13 -22
- package/build/lib/logsink.d.ts.map +1 -1
- package/build/lib/logsink.js +48 -103
- package/build/lib/logsink.js.map +1 -1
- package/build/lib/main.js +1 -1
- package/build/lib/main.js.map +1 -1
- package/build/lib/schema/arg-spec.d.ts +32 -107
- package/build/lib/schema/arg-spec.d.ts.map +1 -1
- package/build/lib/schema/arg-spec.js +11 -107
- package/build/lib/schema/arg-spec.js.map +1 -1
- package/build/lib/schema/cli-args.d.ts +3 -15
- package/build/lib/schema/cli-args.d.ts.map +1 -1
- package/build/lib/schema/cli-args.js +15 -105
- package/build/lib/schema/cli-args.js.map +1 -1
- package/build/lib/schema/cli-transformers.d.ts +15 -12
- package/build/lib/schema/cli-transformers.d.ts.map +1 -1
- package/build/lib/schema/cli-transformers.js +15 -45
- package/build/lib/schema/cli-transformers.js.map +1 -1
- package/build/lib/schema/index.d.ts +2 -2
- package/build/lib/schema/index.d.ts.map +1 -1
- package/build/lib/schema/index.js.map +1 -1
- package/build/lib/schema/keywords.d.ts +12 -20
- package/build/lib/schema/keywords.d.ts.map +1 -1
- package/build/lib/schema/keywords.js +6 -51
- package/build/lib/schema/keywords.js.map +1 -1
- package/build/lib/schema/schema.d.ts +106 -231
- package/build/lib/schema/schema.d.ts.map +1 -1
- package/build/lib/schema/schema.js +75 -345
- package/build/lib/schema/schema.js.map +1 -1
- package/build/lib/utils.d.ts +59 -238
- package/build/lib/utils.d.ts.map +1 -1
- package/build/lib/utils.js +55 -207
- package/build/lib/utils.js.map +1 -1
- package/lib/cli/{args.js → args.ts} +40 -51
- package/lib/cli/driver-command.ts +122 -0
- package/lib/cli/{extension-command.js → extension-command.ts} +610 -689
- package/lib/cli/extension.ts +65 -0
- package/lib/cli/{parser.js → parser.ts} +48 -71
- package/lib/cli/plugin-command.ts +117 -0
- package/lib/cli/{setup-command.js → setup-command.ts} +57 -72
- package/lib/cli/utils.ts +97 -0
- package/lib/config-file.ts +212 -0
- package/lib/{config.js → config.ts} +129 -141
- package/lib/{constants.js → constants.ts} +30 -41
- package/lib/doctor/{doctor.js → doctor.ts} +81 -91
- package/lib/grid-register.ts +250 -0
- package/lib/{logsink.js → logsink.ts} +91 -137
- package/lib/main.js +1 -1
- package/lib/schema/arg-spec.ts +131 -0
- package/lib/schema/cli-args.ts +171 -0
- package/lib/schema/cli-transformers.ts +83 -0
- package/lib/schema/keywords.ts +96 -0
- package/lib/schema/schema.ts +449 -0
- package/lib/utils.ts +404 -0
- package/package.json +16 -16
- package/lib/cli/driver-command.js +0 -174
- package/lib/cli/extension.js +0 -74
- package/lib/cli/plugin-command.js +0 -164
- package/lib/cli/utils.js +0 -91
- package/lib/config-file.js +0 -228
- package/lib/grid-register.js +0 -146
- package/lib/schema/arg-spec.js +0 -229
- package/lib/schema/cli-args.js +0 -254
- package/lib/schema/cli-transformers.js +0 -113
- package/lib/schema/keywords.js +0 -136
- package/lib/schema/schema.js +0 -725
- package/lib/utils.js +0 -512
- /package/lib/schema/{index.js → index.ts} +0 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import {ArgumentTypeError, type ArgumentOptions} from 'argparse';
|
|
2
|
+
import _ from 'lodash';
|
|
3
|
+
import type {JSONSchema7, JSONSchema7TypeName} from 'json-schema';
|
|
4
|
+
import {formatErrors} from '../config-file';
|
|
5
|
+
import {flattenSchema, validate} from './schema';
|
|
6
|
+
import {transformers, parseCsvLine} from './cli-transformers';
|
|
7
|
+
import type {ArgSpec} from './arg-spec';
|
|
8
|
+
import type {AppiumJSONSchemaKeywords, AppiumCliTransformerName} from './keywords';
|
|
9
|
+
import type {ArgumentDefinitions} from '../cli/args';
|
|
10
|
+
|
|
11
|
+
type AppiumJSONSchema = AppiumJSONSchemaKeywords & JSONSchema7;
|
|
12
|
+
type ArgDef = [[string] | [string, string], ArgumentOptions];
|
|
13
|
+
|
|
14
|
+
const TYPENAMES: Readonly<Record<string, JSONSchema7TypeName>> = Object.freeze({
|
|
15
|
+
ARRAY: 'array',
|
|
16
|
+
OBJECT: 'object',
|
|
17
|
+
BOOLEAN: 'boolean',
|
|
18
|
+
INTEGER: 'integer',
|
|
19
|
+
NUMBER: 'number',
|
|
20
|
+
NULL: 'null',
|
|
21
|
+
STRING: 'string',
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const SHORT_ARG_CUTOFF = 3;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Converts the finalized, flattened schema representation into
|
|
28
|
+
* `ArgumentDefinitions` for handoff to `argparse`.
|
|
29
|
+
*/
|
|
30
|
+
export function toParserArgs(): ArgumentDefinitions {
|
|
31
|
+
const flattened = flattenSchema().filter(({schema}) => !schema.appiumCliIgnored);
|
|
32
|
+
return new Map(
|
|
33
|
+
_.map(flattened, ({schema, argSpec}) => subSchemaToArgDef(schema as AppiumJSONSchema, argSpec))
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Convert an alias (`foo`) to a flag (`--foo`) or short flag (`-f`).
|
|
39
|
+
*/
|
|
40
|
+
function aliasToFlag(argSpec: ArgSpec, alias?: string): string {
|
|
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}-${_.kebabCase(extName)}-${arg}`
|
|
47
|
+
: `--${extType}-${_.kebabCase(extName)}-${_.kebabCase(arg)}`;
|
|
48
|
+
}
|
|
49
|
+
return isShort ? `-${arg}` : `--${_.kebabCase(arg)}`;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const screamingSnakeCase = _.flow(_.snakeCase, _.toUpper);
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Given an argument spec, return a validator/coercer function backed by schema validation.
|
|
56
|
+
*/
|
|
57
|
+
function getSchemaValidator<Coerced>(
|
|
58
|
+
{ref: schemaId}: ArgSpec,
|
|
59
|
+
coerce: (value: string) => Coerced = _.identity as (value: string) => Coerced
|
|
60
|
+
): (value: string) => Coerced {
|
|
61
|
+
return (value) => {
|
|
62
|
+
const coerced = coerce(value);
|
|
63
|
+
const errors = validate(coerced, schemaId);
|
|
64
|
+
if (_.isEmpty(errors)) {
|
|
65
|
+
return coerced;
|
|
66
|
+
}
|
|
67
|
+
throw new ArgumentTypeError('\n\n' + formatErrors(errors, value, {schemaId}));
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function makeDescription(schema: AppiumJSONSchema): string {
|
|
72
|
+
const {appiumCliDescription, description = '', appiumDeprecated} = schema;
|
|
73
|
+
let desc = appiumCliDescription ?? description;
|
|
74
|
+
if (appiumDeprecated) {
|
|
75
|
+
desc = `[DEPRECATED] ${desc}`;
|
|
76
|
+
}
|
|
77
|
+
return desc;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function subSchemaToArgDef(subSchema: AppiumJSONSchema, argSpec: ArgSpec): ArgDef {
|
|
81
|
+
const {type, appiumCliAliases, appiumCliTransformer, enum: enumValues} = subSchema;
|
|
82
|
+
const {name, arg} = argSpec;
|
|
83
|
+
|
|
84
|
+
const aliases = [
|
|
85
|
+
aliasToFlag(argSpec),
|
|
86
|
+
...((appiumCliAliases ?? []) as string[]).map((alias) => aliasToFlag(argSpec, alias)),
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
const argOpts: ArgumentOptions = {
|
|
90
|
+
required: false,
|
|
91
|
+
help: makeDescription(subSchema),
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
if (!argSpec.extType) {
|
|
95
|
+
argOpts.dest = argSpec.rawDest;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
let argTypeFunction: ((value: string) => unknown) | undefined;
|
|
99
|
+
|
|
100
|
+
switch (type) {
|
|
101
|
+
case TYPENAMES.BOOLEAN: {
|
|
102
|
+
argOpts.action = 'store_const';
|
|
103
|
+
argOpts.const = true;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
case TYPENAMES.OBJECT: {
|
|
107
|
+
argTypeFunction = _.flow(transformers.json, (o) => {
|
|
108
|
+
if (!_.isPlainObject(o)) {
|
|
109
|
+
throw new ArgumentTypeError(`'${_.truncate(String(o), {length: 100})}' must be a plain object`);
|
|
110
|
+
}
|
|
111
|
+
return o;
|
|
112
|
+
});
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
case TYPENAMES.ARRAY: {
|
|
116
|
+
argTypeFunction = parseCsvLine;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
case TYPENAMES.NUMBER: {
|
|
120
|
+
argTypeFunction = getSchemaValidator(argSpec, parseFloat);
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
case TYPENAMES.INTEGER: {
|
|
124
|
+
argTypeFunction = getSchemaValidator(argSpec, _.parseInt);
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case TYPENAMES.STRING: {
|
|
128
|
+
argTypeFunction = getSchemaValidator(argSpec);
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case TYPENAMES.NULL:
|
|
132
|
+
default: {
|
|
133
|
+
throw new TypeError(`Schema property "${arg}": \`${type}\` type unknown or disallowed`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (type !== TYPENAMES.BOOLEAN) {
|
|
138
|
+
argOpts.metavar = screamingSnakeCase(name);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (appiumCliTransformer && transformers[appiumCliTransformer as AppiumCliTransformerName]) {
|
|
142
|
+
if (type === TYPENAMES.ARRAY) {
|
|
143
|
+
const csvTransformer = argTypeFunction as (x: string) => string[];
|
|
144
|
+
argTypeFunction = (val) =>
|
|
145
|
+
_.flatMap(csvTransformer(val).map(transformers[appiumCliTransformer as AppiumCliTransformerName]));
|
|
146
|
+
} else {
|
|
147
|
+
argTypeFunction = _.flow(
|
|
148
|
+
argTypeFunction ?? _.identity,
|
|
149
|
+
transformers[appiumCliTransformer as AppiumCliTransformerName]
|
|
150
|
+
) as (value: string) => unknown;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (argTypeFunction) {
|
|
155
|
+
argOpts.type = argTypeFunction;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (enumValues && !_.isEmpty(enumValues)) {
|
|
159
|
+
if (type === TYPENAMES.STRING) {
|
|
160
|
+
argOpts.choices = enumValues.map(String);
|
|
161
|
+
} else {
|
|
162
|
+
throw new TypeError(
|
|
163
|
+
`Problem with schema for ${arg}; \`enum\` is only supported for \`type: 'string'\``
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const finalAliases = aliases as [string] | [string, string];
|
|
169
|
+
return [finalAliases, argOpts];
|
|
170
|
+
}
|
|
171
|
+
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import {ArgumentTypeError} from 'argparse';
|
|
2
|
+
import {readFileSync, existsSync} from 'node:fs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This module provides transformer functions for CLI arguments.
|
|
6
|
+
*
|
|
7
|
+
* Use case: config schemas can accept richer types (arrays/objects), but CLI
|
|
8
|
+
* values are strings. Transformers convert string input into those richer types.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Splits a CSV string into an array
|
|
13
|
+
*/
|
|
14
|
+
export function parseCsvLine(value: string): string[] {
|
|
15
|
+
return value
|
|
16
|
+
.split(',')
|
|
17
|
+
.map((v) => v.trim())
|
|
18
|
+
.filter(Boolean);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const transformers = {
|
|
22
|
+
/**
|
|
23
|
+
* Given a CSV-style string or pathname, parse it into an array.
|
|
24
|
+
* The file can also be split on newlines.
|
|
25
|
+
*/
|
|
26
|
+
csv: (csvOrPath: string): string[] => {
|
|
27
|
+
let csv = csvOrPath;
|
|
28
|
+
let loadedFromFile = false;
|
|
29
|
+
// Value could be a single CSV token or a filepath; attempt file first.
|
|
30
|
+
if (existsSync(csvOrPath)) {
|
|
31
|
+
try {
|
|
32
|
+
csv = readFileSync(csvOrPath, 'utf8');
|
|
33
|
+
} catch (err) {
|
|
34
|
+
throw new ArgumentTypeError(`Could not read file '${csvOrPath}': ${(err as Error).message}`);
|
|
35
|
+
}
|
|
36
|
+
loadedFromFile = true;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
return loadedFromFile ? parseCsvFile(csv) : parseCsvLine(csv);
|
|
40
|
+
} catch (err) {
|
|
41
|
+
const msg = loadedFromFile
|
|
42
|
+
? `The provided value of '${csvOrPath}' must be a valid CSV`
|
|
43
|
+
: `Must be a comma-delimited string, e.g., "foo,bar,baz"`;
|
|
44
|
+
throw new TypeError(`${msg}. Original error: ${(err as Error).message}`);
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Parse a string which could be a path to a JSON file or a JSON string.
|
|
50
|
+
*/
|
|
51
|
+
json: (jsonOrPath: string): Record<string, any> => {
|
|
52
|
+
let json = jsonOrPath;
|
|
53
|
+
let loadedFromFile = false;
|
|
54
|
+
if (existsSync(jsonOrPath)) {
|
|
55
|
+
try {
|
|
56
|
+
// Intentionally sync: argparse type hooks are synchronous.
|
|
57
|
+
json = readFileSync(jsonOrPath, 'utf8');
|
|
58
|
+
} catch (err) {
|
|
59
|
+
throw new ArgumentTypeError(`Could not read file '${jsonOrPath}': ${(err as Error).message}`);
|
|
60
|
+
}
|
|
61
|
+
loadedFromFile = true;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
return JSON.parse(json);
|
|
65
|
+
} catch (e) {
|
|
66
|
+
const msg = loadedFromFile
|
|
67
|
+
? `'${jsonOrPath}' must be a valid JSON`
|
|
68
|
+
: `The provided value must be a valid JSON`;
|
|
69
|
+
throw new TypeError(`${msg}. Original error: ${(e as Error).message}`);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
} as const;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Split a file by newline then calls {@link parseCsvLine} on each line.
|
|
76
|
+
*/
|
|
77
|
+
function parseCsvFile(value: string): string[] {
|
|
78
|
+
return value
|
|
79
|
+
.split(/\r?\n/)
|
|
80
|
+
.map((v) => v.trim())
|
|
81
|
+
.filter(Boolean)
|
|
82
|
+
.flatMap(parseCsvLine);
|
|
83
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type {KeywordDefinition} from 'ajv';
|
|
2
|
+
import {transformers} from './cli-transformers';
|
|
3
|
+
|
|
4
|
+
export type AppiumCliTransformerName = keyof typeof transformers;
|
|
5
|
+
|
|
6
|
+
export interface AppiumJSONSchemaKeywords {
|
|
7
|
+
appiumCliDest?: string;
|
|
8
|
+
appiumCliDescription?: string;
|
|
9
|
+
appiumCliAliases?: string[];
|
|
10
|
+
appiumCliIgnored?: boolean;
|
|
11
|
+
appiumCliTransformer?: AppiumCliTransformerName;
|
|
12
|
+
appiumDeprecated?: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Collection of keyword definitions to add to the singleton `Ajv` instance.
|
|
17
|
+
*/
|
|
18
|
+
export const keywords: Record<string, KeywordDefinition> = {
|
|
19
|
+
/**
|
|
20
|
+
* List of alias names for a CLI arg.
|
|
21
|
+
*/
|
|
22
|
+
appiumCliAliases: {
|
|
23
|
+
keyword: 'appiumCliAliases',
|
|
24
|
+
metaSchema: {
|
|
25
|
+
type: 'array',
|
|
26
|
+
items: {
|
|
27
|
+
type: 'string',
|
|
28
|
+
minLength: 1,
|
|
29
|
+
},
|
|
30
|
+
minItems: 1,
|
|
31
|
+
uniqueItems: true,
|
|
32
|
+
description:
|
|
33
|
+
'List of aliases for the argument. Aliases shorter than three (3) characters will be prefixed with a single dash; otherwise two (2).',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
/**
|
|
37
|
+
* Explicit destination key name in parsed args.
|
|
38
|
+
*/
|
|
39
|
+
appiumCliDest: {
|
|
40
|
+
keyword: 'appiumCliDest',
|
|
41
|
+
metaSchema: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
minLength: 1,
|
|
44
|
+
description: 'Name of the associated property in the parsed CLI arguments object',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
/**
|
|
48
|
+
* CLI-specific description (overrides generic schema description for help text).
|
|
49
|
+
*/
|
|
50
|
+
appiumCliDescription: {
|
|
51
|
+
keyword: 'appiumCliDescription',
|
|
52
|
+
schemaType: 'string',
|
|
53
|
+
metaSchema: {
|
|
54
|
+
type: 'string',
|
|
55
|
+
minLength: 1,
|
|
56
|
+
description: 'Description to provide in the --help text of the CLI. Overrides `description`',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
/**
|
|
60
|
+
* Named transformer to apply to CLI value before validation.
|
|
61
|
+
*/
|
|
62
|
+
appiumCliTransformer: {
|
|
63
|
+
keyword: 'appiumCliTransformer',
|
|
64
|
+
metaSchema: {
|
|
65
|
+
type: 'string',
|
|
66
|
+
enum: Object.keys(transformers) as AppiumCliTransformerName[],
|
|
67
|
+
description:
|
|
68
|
+
'The name of a custom transformer to run against the value as provided via the CLI.',
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
/**
|
|
72
|
+
* If true, this property is not exposed as a CLI arg.
|
|
73
|
+
*/
|
|
74
|
+
appiumCliIgnored: {
|
|
75
|
+
keyword: 'appiumCliIgnored',
|
|
76
|
+
metaSchema: {
|
|
77
|
+
type: 'boolean',
|
|
78
|
+
description:
|
|
79
|
+
'If `true`, Appium will not provide this property as a CLI argument. This is NOT the same as a "hidden" argument.',
|
|
80
|
+
enum: [true],
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
/**
|
|
84
|
+
* Marks property as deprecated for CLI docs/help output.
|
|
85
|
+
*/
|
|
86
|
+
appiumDeprecated: {
|
|
87
|
+
keyword: 'appiumDeprecated',
|
|
88
|
+
metaSchema: {
|
|
89
|
+
type: 'boolean',
|
|
90
|
+
description: 'If `true`, this property will be displayed as "deprecated" to the user',
|
|
91
|
+
enum: [true],
|
|
92
|
+
$comment:
|
|
93
|
+
'JSON schema draft-2019-09 keyword `deprecated` serves the same purpose. This keyword should itself be deprecated if we move to draft-2019-09!',
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
};
|