UNPKG

appium

Version:

Automation for Apps.

219 lines (188 loc) 5.46 kB
import {DriverType, PluginType, ServerArgs} from '@appium/types'; import {SetOptional} from 'type-fest'; import {InstallType} from './manifest'; export type CliCommandServer = 'server'; export type CliCommandSetup = 'setup'; export type CliCommandDriver = DriverType; export type CliCommandPlugin = PluginType; /** * Extension-specific commands */ export type CliExtensionCommand = CliCommandDriver | CliCommandPlugin; /** * Possible commands for the `appium` CLI. */ export type CliCommand = CliCommandServer | CliExtensionCommand | CliCommandSetup; /** * Possible subcommands of {@linkcode CliCommandSetup}. * The command name will be preset name to get drivers/plugins to be installed. */ export type CliCommandSetupSubcommand = 'mobile' | 'browser' | 'desktop' | 'reset'; /** * Possible subcommands of {@linkcode CliCommandDriver} or * {@linkcode CliCommandPlugin}. */ export type CliExtensionSubcommand = 'install' | 'list' | 'run' | 'uninstall' | 'update'| 'doctor'; export interface CliExtensionSubcommandListArgs { showInstalled?: boolean; showUpdates?: boolean; } export interface CliExtensionSubcommandInstallArgs { installType: InstallType; packageName?: string; } export interface CliExtensionSubcommandUpdateArgs { unsafe?: boolean; } /** * Random stuff that may appear in the parsed args which has no equivalent in a * config file. */ export interface MoreArgs { /** * Possible subcommands. If empty, defaults to {@linkcode CliCommandServer}. */ subcommand?: CliCommand; /** * Path to config file, if any. Does not make sense for this to be allowed in a config file! */ configFile?: string; /** * If true, show the config and exit */ showConfig?: boolean; /** * If true, show the server debug info and exit */ showDebugInfo?: boolean; /** * If true, open a REPL */ shell?: boolean; } /** * These arguments are not necessarily supported by the CLI, but via programmatic usage / tests. */ export interface ProgrammaticArgs { /** * If `true`, throw on error instead of exit. */ throwInsteadOfExit?: boolean; /** * Seems to only be used in tests or standalone driver calls */ logHandler?: (...args: any[]) => void; /** * Alternate way to set `APPIUM_HOME` for tests. Since we don't want to muck about * with the environment, we just set it here. * * Setting this means that any discovery of the proper `APPIUM_HOME` path is bypassed * and is equivalent to setting `APPIUM_HOME` in the environment. */ appiumHome?: string; /** * If true, show the {@link BuildInfo build info} and exit */ showBuildInfo?: boolean; /** * If true, show config and exit */ showConfig?: boolean; /** * If true, show debug info and exit */ showDebugInfo?: boolean; } export interface DriverExtArgs { driverCommand: CliExtensionSubcommand; driver?: string; } export interface PluginExtArgs { pluginCommand: CliExtensionSubcommand; plugin?: string; } export interface SetupArgs { setupCommand?: CliCommandSetupSubcommand; } /** * These are args which the user will specify if using an extension command */ export interface BaseExtArgs<Cmd extends CliExtensionCommand> { subcommand: Cmd; /** * Output JSON instead of human-readable text */ json?: boolean; /** * Output nothing */ suppressOutput?: boolean; /** * Extra args to pass to extension scripts */ extraArgs?: string[]; } /** * Args for extension commands; includes a subcommand */ export type ExtArgs< Cmd extends CliExtensionCommand, SubCmd extends CliExtensionSubcommand | CliCommandSetupSubcommand > = BaseExtArgs<Cmd> & (Cmd extends CliCommandSetup ? SetupArgs : Cmd extends CliCommandDriver ? DriverExtArgs : Cmd extends CliCommandPlugin ? PluginExtArgs : never) & (SubCmd extends 'install' ? CliExtensionSubcommandInstallArgs : SubCmd extends 'list' ? CliExtensionSubcommandListArgs : SubCmd extends 'update' ? CliExtensionSubcommandUpdateArgs : never); /** * Some generic bits of arguments; should not be used outside this declaration */ export type CommonArgs< Cmd extends CliCommand = CliCommandServer, SubCmd extends CliExtensionSubcommand | CliCommandSetupSubcommand | void = void > = MoreArgs & ProgrammaticArgs & (Cmd extends CliCommandServer ? ServerArgs : Cmd extends CliCommandSetup ? SetupArgs : Cmd extends CliExtensionCommand ? SubCmd extends CliExtensionSubcommand | CliCommandSetupSubcommand ? ExtArgs<Cmd, SubCmd> : never : never); /** * Fully-parsed arguments, containing defaults, computed args, and config file values. */ export type ParsedArgs< Cmd extends CliCommand = CliCommandServer, SubCmd extends CliExtensionSubcommand | CliCommandSetupSubcommand | void = void > = CommonArgs<Cmd, SubCmd>; /** * Like {@linkcode ParsedArgs} except server arguments are all optional. * * _May_ have defaults applied; _may_ contain config values; _may_ contain computed args. */ export type Args< Cmd extends CliCommand = CliCommandServer, SubCmd extends CliExtensionSubcommand | CliCommandSetupSubcommand | void = void > = Cmd extends CliCommandServer ? SetOptional<CommonArgs<Cmd>, keyof ServerArgs> : ParsedArgs<Cmd, SubCmd>; /** * Shown by `appium --build-info` */ export type BuildInfo = { version: string; 'git-sha'?: string; built?: string; };