appium-xcuitest-driver
Version:
Appium driver for iOS using XCUITest for backend
74 lines (68 loc) • 1.96 kB
text/typescript
import type {
LogEntryAddedEvent,
ContextUpdatedEvent,
BiDiLogLevel,
NetworkMonitorBiDiEvent,
} from './types';
import {NATIVE_WIN} from '../../utils';
import {CONTEXT_UPDATED_EVENT, LOG_ENTRY_ADDED_EVENT, NETWORK_MONITOR_EVENT} from './constants';
import type {LogEntry} from '../types';
import _ from 'lodash';
function toContextUpdatedEvent(method: string, contextName: string): ContextUpdatedEvent {
return {
method,
params: {
name: contextName,
type: contextName === NATIVE_WIN ? 'NATIVE' : 'WEB',
},
};
}
export const makeContextUpdatedEvent = (contextName: string) =>
toContextUpdatedEvent(CONTEXT_UPDATED_EVENT, contextName);
/**
* Builds a BiDi event for a single DVT NetworkMonitor instrument payload.
* Clones the payload with `structuredClone` so subscribers get a plain snapshot (safe if anything
* downstream mutates) without the lossiness of `JSON.stringify` (e.g. `NaN`, `undefined` handling).
*/
export function makeNetworkMonitorEvent(event: object): NetworkMonitorBiDiEvent {
return {
context: NATIVE_WIN,
method: NETWORK_MONITOR_EVENT,
params: {
event: structuredClone(event) as Record<string, unknown>,
},
};
}
/** Builds the BiDi log.entryAdded payload from an internal log entry. */
export function makeLogEntryAddedEvent(
entry: LogEntry,
context: string,
type: string,
): LogEntryAddedEvent {
return {
context,
method: LOG_ENTRY_ADDED_EVENT,
params: {
type,
level: adjustLogLevel(entry.level),
source: {
realm: '',
context,
},
text: entry.message,
timestamp: entry.timestamp,
},
};
}
function adjustLogLevel(originalLevel: string): BiDiLogLevel {
const originalLevelLc = _.toLower(originalLevel);
switch (originalLevelLc) {
case 'debug':
case 'info':
case 'warn':
case 'error':
return originalLevelLc as BiDiLogLevel;
default:
return 'info';
}
}