UNPKG

@appium/types

Version:

Various type declarations used across Appium

323 lines (290 loc) 7.76 kB
import {ConditionalPick, MultidimensionalReadonlyArray} from 'type-fest'; import {Driver, DriverCommand} from './driver'; import {Plugin, PluginCommand} from './plugin'; import {StringRecord} from './util'; /** * Defines the shape of a payload for a {@linkcode MethodDef}. */ export interface PayloadParams { wrap?: string; unwrap?: string; required?: ReadonlyArray<string> | MultidimensionalReadonlyArray<string, 2>; optional?: ReadonlyArray<string>; validate?: (obj: any, protocol: string) => boolean | string | undefined; makeArgs?: (obj: any) => any; } /** * A mapping of URL paths to HTTP methods to either a {@linkcode DriverMethodDef} or {@linkcode PluginMethodDef}. * * Extensions can define new methods for the Appium server to map to command names, of the same * format as used in Appium's `routes.js`. * * @example * ```js * { * '/session/:sessionId/new_method': { * GET: {command: 'getNewThing'}, * POST: {command: 'setNewThing', payloadParams: {required: ['someParam']}} * } * } * ``` */ export type MethodMap<T extends Plugin | Driver> = T extends Plugin ? Readonly<PluginMethodMap<T>> : T extends Driver ? Readonly<DriverMethodMap<T>> : never; /** * A {@linkcode MethodMap} for a {@linkcode Driver}. */ export interface DriverMethodMap<T extends Driver> { [key: string]: { GET?: DriverMethodDef<T>; POST?: DriverMethodDef<T>; DELETE?: DriverMethodDef<T>; }; } /** * Both {@linkcode DriverMethodDef} and {@linkcode PluginMethodDef} share these properties. */ export interface BaseMethodDef { /** * If true, this `Method` will never proxy. */ readonly neverProxy?: boolean; /** * Specifies shape of payload */ readonly payloadParams?: PayloadParams; /** * If true, this `Method` will be removed and should not be used by clients */ readonly deprecated?: boolean; /** * Any additional info string or comments to this command. */ readonly info?: string; } /** * A definition of an exposed API command in a {@linkcode Driver}. */ export interface DriverMethodDef<T extends Driver, D extends boolean = boolean> extends BaseMethodDef { /** * Name of the command. */ readonly command?: D extends true ? string : keyof ConditionalPick<Required<T>, DriverCommand>; } /** * A definition of an exposed API command in a {@linkcode Plugin}. */ export interface PluginMethodDef<T extends Plugin> extends BaseMethodDef { /** * Name of the command. */ readonly command?: keyof ConditionalPick<Required<T>, DriverCommand>; } /** * A mapping of URL paths to HTTP methods to {@linkcode PluginMethodDef}. */ export interface PluginMethodMap<T extends Plugin> { [key: string]: { GET?: PluginMethodDef<T>; POST?: PluginMethodDef<T>; DELETE?: PluginMethodDef<T>; }; } export interface ExecuteMethodDef<Ext extends Plugin | Driver> { command: keyof ConditionalPick< Required<Ext>, Ext extends Plugin ? PluginCommand : Ext extends Driver ? DriverCommand : never >; } /** * Properties shared by execute method definitions in both plugins and drivers */ export interface BaseExecuteMethodDef { params?: { required?: ReadonlyArray<string>; optional?: ReadonlyArray<string>; }; /** * If this is `true`, then the method is marked for deprecation. */ readonly deprecated?: boolean; /** * Any additional info string or comments to this execute method. */ readonly info?: string; } /** * A definition of an execute method in a {@linkcode Driver}. */ export interface DriverExecuteMethodDef<T extends Driver> extends BaseExecuteMethodDef { command: keyof ConditionalPick<T, DriverCommand>; } /** * A definition of an execute method in a {@linkcode Plugin}. */ export interface PluginExecuteMethodDef<T extends Plugin> extends BaseExecuteMethodDef { command: keyof ConditionalPick<T, PluginCommand>; } /** * Definition of an execute method (which overloads the behavior of the `execute` command) in a {@linkcode Driver} or {@linkcode Plugin}. */ export type ExecuteMethodMap<T extends Plugin | Driver> = T extends Plugin ? Readonly<StringRecord<PluginExecuteMethodDef<T>>> : T extends Driver ? Readonly<StringRecord<DriverExecuteMethodDef<T>>> : never; export interface BidiMethodParams { required?: readonly string[]; optional?: readonly string[]; }; export interface BidiMethodDef extends BaseExecuteMethodDef { command: string; params?: BidiMethodParams; } export interface BidiMethodMap { [k: string]: BidiMethodDef; } export interface BidiModuleMap { [k: string]: BidiMethodMap; } // https://w3c.github.io/webdriver-bidi/#protocol-definition export interface GenericBiDiCommandResponse { id: number; [key: string]: any; } export interface BiDiResultData { [key: string]: any; } export interface SuccessBiDiCommandResponse extends GenericBiDiCommandResponse { type: 'success'; result: BiDiResultData; } export interface ErrorBiDiCommandResponse extends GenericBiDiCommandResponse { type: 'error'; error: string; message: string; stacktrace?: string; } export interface RestCommandItemParam { /** * Command parameter name */ name: string; /** * True if the parameter is required for the given command */ required: boolean; } export interface RestCommandItem { /** * Command name */ command?: string; /** * Whether the command is marked for deprecation */ deprecated?: boolean; /** * Optional infostring about the command's purpose or a comment */ info?: string; /** * List of command parameters */ params?: RestCommandItemParam[]; } export interface RestMethodsToCommandsMap { /** * Method name to command info mapping */ [method: string]: RestCommandItem; } export interface RestCommandsMap { /** * Command paths to methods map in the base driver */ base: Record<string, RestMethodsToCommandsMap>; /** * Command paths to methods map in the session-specific driver */ driver: Record<string, RestMethodsToCommandsMap>; /** * Plugin name to command paths to methods map */ plugins?: Record<string, Record<string, RestMethodsToCommandsMap>>; } export interface BiDiCommandItemParam { /** * Command parameter name */ name: string; /** * True if the parameter is required for the given command */ required: boolean; } export interface BiDiCommandItem { /** * Command name */ command?: string; /** * Whether the command is marked for deprecation */ deprecated?: boolean; /** * Optional infostring about the command's purpose or a comment */ info?: string; /** * List of command parameters */ params?: BiDiCommandItemParam[]; } export interface BiDiCommandNamesToInfosMap { [name: string]: BiDiCommandItem; } export interface BiDiCommandsMap { /** * Domains to BiDi commands mapping in the base driver */ base: Record<string, BiDiCommandNamesToInfosMap>; /** * Domains to BiDi commands mapping in the session-specific driver */ driver: Record<string, BiDiCommandNamesToInfosMap>; /** * Plugin name to domains to BiDi commands mapping */ plugins?: Record<string, Record<string, BiDiCommandNamesToInfosMap>>; } export interface ListCommandsResponse { /** * REST APIs mapping */ rest?: RestCommandsMap; /** * BiDi APIs mapping */ bidi?: BiDiCommandsMap; } export interface RestExtensionsMap { /** * Driver execute methods mapping */ driver: RestMethodsToCommandsMap; /** * Plugins execute methods mapping */ plugins?: Record<string, RestMethodsToCommandsMap>; } export interface ListExtensionsResponse { /** * Rest extensions mapping */ rest?: RestExtensionsMap; }