UNPKG

@appium/typedoc-plugin-appium

Version:

TypeDoc plugin for Appium & its extensions

97 lines (83 loc) 3.07 kB
import {Context} from 'typedoc'; import { isBaseDriverDeclarationReflection, isClassDeclarationReflection, isMethodMapDeclarationReflection, } from '../guards'; import {AppiumPluginLogger} from '../logger'; import {BuiltinCommands} from '../model/builtin-commands'; import {BaseConverter} from './base-converter'; import {convertMethodMap} from './method-map'; import {KnownMethods} from './types'; import { findChildByNameAndGuard, findCommandMethodsInReflection, findParentReflectionByName, } from './utils'; /** * Name of the builtin method map in `@appium/base-driver` */ export const NAME_METHOD_MAP = 'METHOD_MAP'; export const NAME_BASE_DRIVER_CLASS = 'BaseDriver'; /** * Name of the module which contains the builtin method map */ export const NAME_BUILTIN_COMMAND_MODULE = '@appium/base-driver'; export class BuiltinMethodMapConverter extends BaseConverter<BuiltinCommands> { /** * Creates a child logger for this instance * @param ctx Typedoc Context * @param log Logger */ constructor( ctx: Context, log: AppiumPluginLogger, protected readonly knownBuiltinMethods: KnownMethods ) { super(ctx, log.createChildLogger(NAME_BUILTIN_COMMAND_MODULE)); } /** * Converts `@appium/base-driver` into a `RouteMap`, if it can. * * @returns Object containing a declaration reflection of `@appium/base-driver` and its associated * route map (if found). */ public override convert(): BuiltinCommands { const {project} = this.ctx; const baseDriverModuleRefl = findParentReflectionByName(project, NAME_BUILTIN_COMMAND_MODULE); if (!isBaseDriverDeclarationReflection(baseDriverModuleRefl)) { this.log.error('Could not find %s', NAME_BUILTIN_COMMAND_MODULE); return new BuiltinCommands(); } this.log.verbose('Converting builtin method map'); // we need base driver class to find methods implemented in it const baseDriverClassRefl = findChildByNameAndGuard( baseDriverModuleRefl, NAME_BASE_DRIVER_CLASS, isClassDeclarationReflection ); if (!baseDriverClassRefl) { this.log.error('Could not find module %s', NAME_BUILTIN_COMMAND_MODULE); return new BuiltinCommands(); } const methodMap = baseDriverModuleRefl.getChildByName(NAME_METHOD_MAP); if (!isMethodMapDeclarationReflection(methodMap)) { this.log.error('Could not find %s in %s', NAME_METHOD_MAP, NAME_BUILTIN_COMMAND_MODULE); return new BuiltinCommands(); } const knownClassMethods = findCommandMethodsInReflection(baseDriverClassRefl); const baseDriverRoutes = convertMethodMap({ ctx: this.ctx, log: this.log, methodMapRefl: methodMap, parentRefl: baseDriverModuleRefl, knownClassMethods, knownBuiltinMethods: this.knownBuiltinMethods, }); if (!baseDriverRoutes.size) { this.log.error('Could not find any commands in %s', NAME_BUILTIN_COMMAND_MODULE); return new BuiltinCommands(); } return new BuiltinCommands(baseDriverRoutes, baseDriverModuleRefl); } }