appium
Version: 
Automation for Apps.
152 lines • 5.43 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const lodash_1 = __importDefault(require("lodash"));
const extension_command_1 = __importDefault(require("./extension-command"));
const constants_1 = require("../constants");
require("@colors/colors");
const REQ_DRIVER_FIELDS = ['driverName', 'automationName', 'platformNames', 'mainClass'];
/**
 * @extends {ExtensionCliCommand<DriverType>}
 */
class DriverCliCommand extends extension_command_1.default {
    /**
     * @param {import('./extension-command').ExtensionCommandOptions<DriverType>} opts
     */
    constructor({ config, json }) {
        super({ config, json });
        this.knownExtensions = constants_1.KNOWN_DRIVERS;
    }
    /**
     * Install a driver
     *
     * @param {DriverInstallOpts} opts
     * @return {Promise<ExtRecord<DriverType>>}
     */
    async install({ driver, installType, packageName }) {
        return await super._install({
            installSpec: driver,
            installType,
            packageName,
        });
    }
    /**
     * Uninstall a driver
     *
     * @param {DriverUninstallOpts} opts
     * @return {Promise<ExtRecord<DriverType>>}
     */
    async uninstall({ driver }) {
        return await super._uninstall({ installSpec: driver });
    }
    /**
     * Update a driver
     *
     * @param {DriverUpdateOpts} opts
     * @return {Promise<import('./extension-command').ExtensionUpdateResult>}
     */
    async update({ driver, unsafe }) {
        return await super._update({ installSpec: driver, unsafe });
    }
    /**
     *
     * @param {DriverRunOptions} opts
     * @return {Promise<import('./extension-command').RunOutput>}
     */
    async run({ driver, scriptName, extraArgs }) {
        return await super._run({
            installSpec: driver,
            scriptName,
            extraArgs,
            bufferOutput: this.isJsonOutput,
        });
    }
    /**
     * Runs doctor checks for the given driver.
     *
     * @param {DriverDoctorOptions} opts
     * @returns {Promise<number>} The amount of executed doctor checks.
     * @throws {Error} If any of the mandatory Doctor checks fails.
     */
    async doctor({ driver }) {
        return await super._doctor({
            installSpec: driver,
        });
    }
    /**
     *
     * @param {import('./extension-command').ExtensionArgs} opts
     * @returns {string}
     */
    getPostInstallText({ extName, extData }) {
        return (`Driver ${extName}@${extData.version} successfully installed\n`.green +
            `- automationName: ${extData.automationName.green}\n` +
            `- platformNames: ${JSON.stringify(extData.platformNames).green}`);
    }
    /**
     * Validates fields in `appium` field of `driverMetadata`
     *
     * For any `package.json` fields which a driver requires, validate the type of
     * those fields on the `package.json` data, throwing an error if anything is
     * amiss.
     * @param {import('appium/types').ExtMetadata<DriverType>} driverMetadata
     * @param {string} installSpec
     */
    validateExtensionFields(driverMetadata, installSpec) {
        const missingFields = REQ_DRIVER_FIELDS.reduce((acc, field) => (driverMetadata[field] ? acc : [...acc, field]), []);
        if (!lodash_1.default.isEmpty(missingFields)) {
            throw new Error(`Driver "${installSpec}" did not expose correct fields for compability ` +
                `with Appium. Missing fields: ${JSON.stringify(missingFields)}`);
        }
    }
}
exports.default = DriverCliCommand;
/**
 * @typedef {import('@appium/types').ExtensionType} ExtensionType
 * @typedef {import('@appium/types').DriverType} DriverType
 */
/**
 * @template {ExtensionType} ExtType
 * @typedef {import('appium/types').ExtRecord<ExtType>} ExtRecord
 */
/**
 * @typedef DriverCommandOptions
 * @property {import('../extension/extension-config').ExtensionConfig<DriverType>} config
 * @property {boolean} json
 */
/**
 * Options for {@linkcode DriverCliCommand.install}
 * @typedef DriverInstallOpts
 * @property {string} driver - the name or spec of a driver to install
 * @property {InstallType} installType - how to install this driver. One of the INSTALL_TYPES
 * @property {string} [packageName] - for git/github installs, the driver node package name
 */
/**
 * @typedef {import('appium/types').InstallType} InstallType
 */
/**
 * Options for {@linkcode DriverCliCommand.uninstall}
 * @typedef DriverUninstallOpts
 * @property {string} driver - the name or spec of a driver to uninstall
 */
/**
 * Options for {@linkcode DriverCliCommand.update}
 * @typedef DriverUpdateOpts
 * @property {string} driver - the name of the driver to update
 * @property {boolean} unsafe - if true, will perform unsafe updates past major revision boundaries
 */
/**
 * Options for {@linkcode DriverCliCommand.run}.
 * @typedef DriverRunOptions
 * @property {string} driver - name of the driver to run a script from
 * @property {string} scriptName - name of the script to run
 * @property {string[]} [extraArgs] - arguments to pass to the script
 */
/**
 * Options for {@linkcode DriverCliCommand.doctor}.
 * @typedef DriverDoctorOptions
 * @property {string} driver - name of the driver to run doctor checks for
 */
//# sourceMappingURL=driver-command.js.map