appium-android-driver
Version:
Android UiAutomator and Chrome support for Appium
95 lines • 3.2 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GET_SERVER_LOGS_FEATURE = exports.ADB_SHELL_FEATURE = void 0;
exports.requireArgs = requireArgs;
exports.parseArray = parseArray;
exports.removeAllSessionWebSocketHandlers = removeAllSessionWebSocketHandlers;
exports.nativeLogEntryToSeleniumEntry = nativeLogEntryToSeleniumEntry;
exports.toLogRecord = toLogRecord;
const lodash_1 = __importDefault(require("lodash"));
const driver_1 = require("appium/driver");
exports.ADB_SHELL_FEATURE = 'adb_shell';
exports.GET_SERVER_LOGS_FEATURE = 'get_server_logs';
const COLOR_CODE_PATTERN = /\u001b\[(\d+(;\d+)*)?m/g; // eslint-disable-line no-control-regex
/**
* Assert the presence of particular keys in the given object
*
* @param {string|string[]} argNames one or more key names
* @param {any} opts the object to check
* @returns {Record<string, any>} the same given object
*/
function requireArgs(argNames, opts) {
for (const argName of lodash_1.default.isArray(argNames) ? argNames : [argNames]) {
if (!lodash_1.default.has(opts, argName)) {
throw new driver_1.errors.InvalidArgumentError(`'${argName}' argument must be provided`);
}
}
return opts;
}
/**
*
* @param {string | string[]} cap
* @returns {string[]}
*/
function parseArray(cap) {
let parsedCaps;
try {
// @ts-ignore this is fine
parsedCaps = JSON.parse(cap);
}
catch { }
if (lodash_1.default.isArray(parsedCaps)) {
return parsedCaps;
}
else if (lodash_1.default.isString(cap)) {
return [cap];
}
throw new Error(`must provide a string or JSON Array; received ${cap}`);
}
/**
* @this {AndroidDriver}
* @returns {Promise<void>}
*/
async function removeAllSessionWebSocketHandlers() {
if (!this.sessionId || !lodash_1.default.isFunction(this.server?.getWebSocketHandlers)) {
return;
}
const activeHandlers = await this.server.getWebSocketHandlers(this.sessionId);
for (const pathname of lodash_1.default.keys(activeHandlers)) {
await this.server.removeWebSocketHandler(pathname);
}
}
/**
*
* @param {Object} x
* @returns {LogEntry}
*/
function nativeLogEntryToSeleniumEntry(x) {
const msg = lodash_1.default.isEmpty(x.prefix) ? x.message : `[${x.prefix}] ${x.message}`;
return toLogRecord(
/** @type {any} */ (x).timestamp ?? Date.now(), lodash_1.default.replace(msg, COLOR_CODE_PATTERN, ''));
}
/**
*
* @see {@link https://github.com/SeleniumHQ/selenium/blob/0d425676b3c9df261dd641917f867d4d5ce7774d/java/client/src/org/openqa/selenium/logging/LogEntry.java}
* @param {number} timestamp
* @param {string} message
* @param {string} [level='ALL']
* @returns {LogEntry}
*/
function toLogRecord(timestamp, message, level = 'ALL') {
return {
timestamp,
// @ts-ignore It's ok
level,
message,
};
}
/**
* @typedef {import('appium-adb').LogEntry} LogEntry
* @typedef {import('./driver').AndroidDriver} AndroidDriver
*/
//# sourceMappingURL=utils.js.map
;