UNPKG

webdriverio-automation

Version:

WebdriverIO-Automation android ios project

1,244 lines (1,215 loc) 101 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.routeToCommandName = routeToCommandName; exports.NO_SESSION_ID_COMMANDS = exports.ALL_COMMANDS = exports.METHOD_MAP = void 0; require("source-map-support/register"); var _lodash = _interopRequireDefault(require("lodash")); var _driver = _interopRequireDefault(require("../basedriver/driver")); var _appiumSupport = require("appium-support"); const METHOD_MAP = { '/wd/hub/status': { GET: { command: 'getStatus' } }, '/wd/hub/session': { POST: { command: 'createSession', payloadParams: { validate: jsonObj => !jsonObj.capabilities && !jsonObj.desiredCapabilities && 'we require one of "desiredCapabilities" or "capabilities" object', optional: ['desiredCapabilities', 'requiredCapabilities', 'capabilities'] } } }, '/wd/hub/sessions': { GET: { command: 'getSessions' } }, '/wd/hub/session/:sessionId': { GET: { command: 'getSession' }, DELETE: { command: 'deleteSession' } }, '/wd/hub/session/:sessionId/timeouts': { GET: { command: 'getTimeouts' }, POST: { command: 'timeouts', payloadParams: { validate: (jsonObj, protocolName) => { if (protocolName === _driver.default.DRIVER_PROTOCOL.W3C) { if (!_appiumSupport.util.hasValue(jsonObj.script) && !_appiumSupport.util.hasValue(jsonObj.pageLoad) && !_appiumSupport.util.hasValue(jsonObj.implicit)) { return 'W3C protocol expects any of script, pageLoad or implicit to be set'; } } else { if (!_appiumSupport.util.hasValue(jsonObj.type) || !_appiumSupport.util.hasValue(jsonObj.ms)) { return 'MJSONWP protocol requires type and ms'; } } }, optional: ['type', 'ms', 'script', 'pageLoad', 'implicit'] } } }, '/wd/hub/session/:sessionId/timeouts/async_script': { POST: { command: 'asyncScriptTimeout', payloadParams: { required: ['ms'] } } }, '/wd/hub/session/:sessionId/timeouts/implicit_wait': { POST: { command: 'implicitWait', payloadParams: { required: ['ms'] } } }, '/wd/hub/session/:sessionId/window_handle': { GET: { command: 'getWindowHandle' } }, '/wd/hub/session/:sessionId/window/handle': { GET: { command: 'getWindowHandle' } }, '/wd/hub/session/:sessionId/window_handles': { GET: { command: 'getWindowHandles' } }, '/wd/hub/session/:sessionId/window/handles': { GET: { command: 'getWindowHandles' } }, '/wd/hub/session/:sessionId/url': { GET: { command: 'getUrl' }, POST: { command: 'setUrl', payloadParams: { required: ['url'] } } }, '/wd/hub/session/:sessionId/forward': { POST: { command: 'forward' } }, '/wd/hub/session/:sessionId/back': { POST: { command: 'back' } }, '/wd/hub/session/:sessionId/refresh': { POST: { command: 'refresh' } }, '/wd/hub/session/:sessionId/execute': { POST: { command: 'execute', payloadParams: { required: ['script', 'args'] } } }, '/wd/hub/session/:sessionId/execute_async': { POST: { command: 'executeAsync', payloadParams: { required: ['script', 'args'] } } }, '/wd/hub/session/:sessionId/screenshot': { GET: { command: 'getScreenshot' } }, '/wd/hub/session/:sessionId/ime/available_engines': { GET: { command: 'availableIMEEngines' } }, '/wd/hub/session/:sessionId/ime/active_engine': { GET: { command: 'getActiveIMEEngine' } }, '/wd/hub/session/:sessionId/ime/activated': { GET: { command: 'isIMEActivated' } }, '/wd/hub/session/:sessionId/ime/deactivate': { POST: { command: 'deactivateIMEEngine' } }, '/wd/hub/session/:sessionId/ime/activate': { POST: { command: 'activateIMEEngine', payloadParams: { required: ['engine'] } } }, '/wd/hub/session/:sessionId/frame': { POST: { command: 'setFrame', payloadParams: { required: ['id'] } } }, '/wd/hub/session/:sessionId/frame/parent': { POST: {} }, '/wd/hub/session/:sessionId/window': { GET: { command: 'getWindowHandle' }, POST: { command: 'setWindow', payloadParams: { optional: ['name', 'handle'], makeArgs: jsonObj => { if (_appiumSupport.util.hasValue(jsonObj.handle) && !_appiumSupport.util.hasValue(jsonObj.name)) { return [jsonObj.handle, jsonObj.handle]; } if (_appiumSupport.util.hasValue(jsonObj.name) && !_appiumSupport.util.hasValue(jsonObj.handle)) { return [jsonObj.name, jsonObj.name]; } return [jsonObj.name, jsonObj.handle]; }, validate: jsonObj => !_appiumSupport.util.hasValue(jsonObj.name) && !_appiumSupport.util.hasValue(jsonObj.handle) && 'we require one of "name" or "handle" to be set' } }, DELETE: { command: 'closeWindow' } }, '/wd/hub/session/:sessionId/window/:windowhandle/size': { GET: { command: 'getWindowSize' }, POST: {} }, '/wd/hub/session/:sessionId/window/:windowhandle/position': { POST: {}, GET: {} }, '/wd/hub/session/:sessionId/window/:windowhandle/maximize': { POST: { command: 'maximizeWindow' } }, '/wd/hub/session/:sessionId/cookie': { GET: { command: 'getCookies' }, POST: { command: 'setCookie', payloadParams: { required: ['cookie'] } }, DELETE: { command: 'deleteCookies' } }, '/wd/hub/session/:sessionId/cookie/:name': { GET: { command: 'getCookie' }, DELETE: { command: 'deleteCookie' } }, '/wd/hub/session/:sessionId/source': { GET: { command: 'getPageSource' } }, '/wd/hub/session/:sessionId/title': { GET: { command: 'title' } }, '/wd/hub/session/:sessionId/element': { POST: { command: 'findElement', payloadParams: { required: ['using', 'value'] } } }, '/wd/hub/session/:sessionId/elements': { POST: { command: 'findElements', payloadParams: { required: ['using', 'value'] } } }, '/wd/hub/session/:sessionId/element/active': { GET: { command: 'active' }, POST: { command: 'active' } }, '/wd/hub/session/:sessionId/element/:elementId': { GET: {} }, '/wd/hub/session/:sessionId/element/:elementId/element': { POST: { command: 'findElementFromElement', payloadParams: { required: ['using', 'value'] } } }, '/wd/hub/session/:sessionId/element/:elementId/elements': { POST: { command: 'findElementsFromElement', payloadParams: { required: ['using', 'value'] } } }, '/wd/hub/session/:sessionId/element/:elementId/click': { POST: { command: 'click' } }, '/wd/hub/session/:sessionId/element/:elementId/submit': { POST: { command: 'submit' } }, '/wd/hub/session/:sessionId/element/:elementId/text': { GET: { command: 'getText' } }, '/wd/hub/session/:sessionId/element/:elementId/value': { POST: { command: 'setValue', payloadParams: { validate: jsonObj => !_appiumSupport.util.hasValue(jsonObj.value) && !_appiumSupport.util.hasValue(jsonObj.text) && 'we require one of "text" or "value" params', optional: ['value', 'text'], makeArgs: jsonObj => [jsonObj.value || jsonObj.text] } } }, '/wd/hub/session/:sessionId/keys': { POST: { command: 'keys', payloadParams: { required: ['value'] } } }, '/wd/hub/session/:sessionId/element/:elementId/name': { GET: { command: 'getName' } }, '/wd/hub/session/:sessionId/element/:elementId/clear': { POST: { command: 'clear' } }, '/wd/hub/session/:sessionId/element/:elementId/selected': { GET: { command: 'elementSelected' } }, '/wd/hub/session/:sessionId/element/:elementId/enabled': { GET: { command: 'elementEnabled' } }, '/wd/hub/session/:sessionId/element/:elementId/attribute/:name': { GET: { command: 'getAttribute' } }, '/wd/hub/session/:sessionId/element/:elementId/equals/:otherId': { GET: { command: 'equalsElement' } }, '/wd/hub/session/:sessionId/element/:elementId/displayed': { GET: { command: 'elementDisplayed' } }, '/wd/hub/session/:sessionId/element/:elementId/location': { GET: { command: 'getLocation' } }, '/wd/hub/session/:sessionId/element/:elementId/location_in_view': { GET: { command: 'getLocationInView' } }, '/wd/hub/session/:sessionId/element/:elementId/size': { GET: { command: 'getSize' } }, '/wd/hub/session/:sessionId/element/:elementId/css/:propertyName': { GET: { command: 'getCssProperty' } }, '/wd/hub/session/:sessionId/orientation': { GET: { command: 'getOrientation' }, POST: { command: 'setOrientation', payloadParams: { required: ['orientation'] } } }, '/wd/hub/session/:sessionId/rotation': { GET: { command: 'getRotation' }, POST: { command: 'setRotation', payloadParams: { required: ['x', 'y', 'z'] } } }, '/wd/hub/session/:sessionId/moveto': { POST: { command: 'moveTo', payloadParams: { optional: ['element', 'xoffset', 'yoffset'] } } }, '/wd/hub/session/:sessionId/click': { POST: { command: 'clickCurrent', payloadParams: { optional: ['button'] } } }, '/wd/hub/session/:sessionId/buttondown': { POST: {} }, '/wd/hub/session/:sessionId/buttonup': { POST: {} }, '/wd/hub/session/:sessionId/doubleclick': { POST: {} }, '/wd/hub/session/:sessionId/touch/click': { POST: { command: 'click', payloadParams: { required: ['element'] } } }, '/wd/hub/session/:sessionId/touch/down': { POST: { command: 'touchDown', payloadParams: { required: ['x', 'y'] } } }, '/wd/hub/session/:sessionId/touch/up': { POST: { command: 'touchUp', payloadParams: { required: ['x', 'y'] } } }, '/wd/hub/session/:sessionId/touch/move': { POST: { command: 'touchMove', payloadParams: { required: ['x', 'y'] } } }, '/wd/hub/session/:sessionId/touch/scroll': { POST: {} }, '/wd/hub/session/:sessionId/touch/doubleclick': { POST: {} }, '/wd/hub/session/:sessionId/actions': { POST: { command: 'performActions', payloadParams: { required: ['actions'] } } }, '/wd/hub/session/:sessionId/touch/longclick': { POST: { command: 'touchLongClick', payloadParams: { required: ['elements'] } } }, '/wd/hub/session/:sessionId/touch/flick': { POST: { command: 'flick', payloadParams: { optional: ['element', 'xspeed', 'yspeed', 'xoffset', 'yoffset', 'speed'] } } }, '/wd/hub/session/:sessionId/location': { GET: { command: 'getGeoLocation' }, POST: { command: 'setGeoLocation', payloadParams: { required: ['location'] } } }, '/wd/hub/session/:sessionId/local_storage': { GET: {}, POST: {}, DELETE: {} }, '/wd/hub/session/:sessionId/local_storage/key/:key': { GET: {}, DELETE: {} }, '/wd/hub/session/:sessionId/local_storage/size': { GET: {} }, '/wd/hub/session/:sessionId/session_storage': { GET: {}, POST: {}, DELETE: {} }, '/wd/hub/session/:sessionId/session_storage/key/:key': { GET: {}, DELETE: {} }, '/wd/hub/session/:sessionId/session_storage/size': { GET: {} }, '/wd/hub/session/:sessionId/log': { POST: { command: 'getLog', payloadParams: { required: ['type'] } } }, '/wd/hub/session/:sessionId/log/types': { GET: { command: 'getLogTypes' } }, '/wd/hub/session/:sessionId/application_cache/status': { GET: {} }, '/wd/hub/session/:sessionId/context': { GET: { command: 'getCurrentContext' }, POST: { command: 'setContext', payloadParams: { required: ['name'] } } }, '/wd/hub/session/:sessionId/contexts': { GET: { command: 'getContexts' } }, '/wd/hub/session/:sessionId/element/:elementId/pageIndex': { GET: { command: 'getPageIndex' } }, '/wd/hub/session/:sessionId/network_connection': { GET: { command: 'getNetworkConnection' }, POST: { command: 'setNetworkConnection', payloadParams: { unwrap: 'parameters', required: ['type'] } } }, '/wd/hub/session/:sessionId/touch/perform': { POST: { command: 'performTouch', payloadParams: { wrap: 'actions', required: ['actions'] } } }, '/wd/hub/session/:sessionId/touch/multi/perform': { POST: { command: 'performMultiAction', payloadParams: { required: ['actions'], optional: ['elementId'] } } }, '/wd/hub/session/:sessionId/receive_async_response': { POST: { command: 'receiveAsyncResponse', payloadParams: { required: ['status', 'value'] } } }, '/wd/hub/session/:sessionId/appium/device/shake': { POST: { command: 'mobileShake' } }, '/wd/hub/session/:sessionId/appium/device/system_time': { GET: { command: 'getDeviceTime', payloadParams: { optional: ['format'] } }, POST: { command: 'getDeviceTime', payloadParams: { optional: ['format'] } } }, '/wd/hub/session/:sessionId/appium/device/lock': { POST: { command: 'lock', payloadParams: { optional: ['seconds'] } } }, '/wd/hub/session/:sessionId/appium/device/unlock': { POST: { command: 'unlock' } }, '/wd/hub/session/:sessionId/appium/device/is_locked': { POST: { command: 'isLocked' } }, '/wd/hub/session/:sessionId/appium/start_recording_screen': { POST: { command: 'startRecordingScreen', payloadParams: { optional: ['options'] } } }, '/wd/hub/session/:sessionId/appium/stop_recording_screen': { POST: { command: 'stopRecordingScreen', payloadParams: { optional: ['options'] } } }, '/wd/hub/session/:sessionId/appium/performanceData/types': { POST: { command: 'getPerformanceDataTypes' } }, '/wd/hub/session/:sessionId/appium/getPerformanceData': { POST: { command: 'getPerformanceData', payloadParams: { required: ['packageName', 'dataType'], optional: ['dataReadTimeout'] } } }, '/wd/hub/session/:sessionId/appium/device/press_keycode': { POST: { command: 'pressKeyCode', payloadParams: { required: ['keycode'], optional: ['metastate', 'flags'] } } }, '/wd/hub/session/:sessionId/appium/device/long_press_keycode': { POST: { command: 'longPressKeyCode', payloadParams: { required: ['keycode'], optional: ['metastate', 'flags'] } } }, '/wd/hub/session/:sessionId/appium/device/finger_print': { POST: { command: 'fingerprint', payloadParams: { required: ['fingerprintId'] } } }, '/wd/hub/session/:sessionId/appium/device/send_sms': { POST: { command: 'sendSMS', payloadParams: { required: ['phoneNumber', 'message'] } } }, '/wd/hub/session/:sessionId/appium/device/gsm_call': { POST: { command: 'gsmCall', payloadParams: { required: ['phoneNumber', 'action'] } } }, '/wd/hub/session/:sessionId/appium/device/gsm_signal': { POST: { command: 'gsmSignal', payloadParams: { validate: jsonObj => !_appiumSupport.util.hasValue(jsonObj.signalStrength) && !_appiumSupport.util.hasValue(jsonObj.signalStrengh) && 'we require one of "signalStrength" or "signalStrengh" params', optional: ['signalStrength', 'signalStrengh'], makeArgs: jsonObj => [_appiumSupport.util.hasValue(jsonObj.signalStrength) ? jsonObj.signalStrength : jsonObj.signalStrengh] } } }, '/wd/hub/session/:sessionId/appium/device/gsm_voice': { POST: { command: 'gsmVoice', payloadParams: { required: ['state'] } } }, '/wd/hub/session/:sessionId/appium/device/power_capacity': { POST: { command: 'powerCapacity', payloadParams: { required: ['percent'] } } }, '/wd/hub/session/:sessionId/appium/device/power_ac': { POST: { command: 'powerAC', payloadParams: { required: ['state'] } } }, '/wd/hub/session/:sessionId/appium/device/network_speed': { POST: { command: 'networkSpeed', payloadParams: { required: ['netspeed'] } } }, '/wd/hub/session/:sessionId/appium/device/keyevent': { POST: { command: 'keyevent', payloadParams: { required: ['keycode'], optional: ['metastate'] } } }, '/wd/hub/session/:sessionId/appium/device/rotate': { POST: { command: 'mobileRotation', payloadParams: { required: ['x', 'y', 'radius', 'rotation', 'touchCount', 'duration'], optional: ['element'] } } }, '/wd/hub/session/:sessionId/appium/device/current_activity': { GET: { command: 'getCurrentActivity' } }, '/wd/hub/session/:sessionId/appium/device/current_package': { GET: { command: 'getCurrentPackage' } }, '/wd/hub/session/:sessionId/appium/device/install_app': { POST: { command: 'installApp', payloadParams: { required: ['appPath'], optional: ['options'] } } }, '/wd/hub/session/:sessionId/appium/device/activate_app': { POST: { command: 'activateApp', payloadParams: { required: [['appId'], ['bundleId']], optional: ['options'] } } }, '/wd/hub/session/:sessionId/appium/device/remove_app': { POST: { command: 'removeApp', payloadParams: { required: [['appId'], ['bundleId']], optional: ['options'] } } }, '/wd/hub/session/:sessionId/appium/device/terminate_app': { POST: { command: 'terminateApp', payloadParams: { required: [['appId'], ['bundleId']], optional: ['options'] } } }, '/wd/hub/session/:sessionId/appium/device/app_installed': { POST: { command: 'isAppInstalled', payloadParams: { required: [['appId'], ['bundleId']] } } }, '/wd/hub/session/:sessionId/appium/device/app_state': { GET: { command: 'queryAppState', payloadParams: { required: [['appId'], ['bundleId']] } }, POST: { command: 'queryAppState', payloadParams: { required: [['appId'], ['bundleId']] } } }, '/wd/hub/session/:sessionId/appium/device/hide_keyboard': { POST: { command: 'hideKeyboard', payloadParams: { optional: ['strategy', 'key', 'keyCode', 'keyName'] } } }, '/wd/hub/session/:sessionId/appium/device/is_keyboard_shown': { GET: { command: 'isKeyboardShown' } }, '/wd/hub/session/:sessionId/appium/device/push_file': { POST: { command: 'pushFile', payloadParams: { required: ['path', 'data'] } } }, '/wd/hub/session/:sessionId/appium/device/pull_file': { POST: { command: 'pullFile', payloadParams: { required: ['path'] } } }, '/wd/hub/session/:sessionId/appium/device/pull_folder': { POST: { command: 'pullFolder', payloadParams: { required: ['path'] } } }, '/wd/hub/session/:sessionId/appium/device/toggle_airplane_mode': { POST: { command: 'toggleFlightMode' } }, '/wd/hub/session/:sessionId/appium/device/toggle_data': { POST: { command: 'toggleData' } }, '/wd/hub/session/:sessionId/appium/device/toggle_wifi': { POST: { command: 'toggleWiFi' } }, '/wd/hub/session/:sessionId/appium/device/toggle_location_services': { POST: { command: 'toggleLocationServices' } }, '/wd/hub/session/:sessionId/appium/device/open_notifications': { POST: { command: 'openNotifications' } }, '/wd/hub/session/:sessionId/appium/device/start_activity': { POST: { command: 'startActivity', payloadParams: { required: ['appPackage', 'appActivity'], optional: ['appWaitPackage', 'appWaitActivity', 'intentAction', 'intentCategory', 'intentFlags', 'optionalIntentArguments', 'dontStopAppOnReset'] } } }, '/wd/hub/session/:sessionId/appium/device/system_bars': { GET: { command: 'getSystemBars' } }, '/wd/hub/session/:sessionId/appium/device/display_density': { GET: { command: 'getDisplayDensity' } }, '/wd/hub/session/:sessionId/appium/simulator/touch_id': { POST: { command: 'touchId', payloadParams: { required: ['match'] } } }, '/wd/hub/session/:sessionId/appium/simulator/toggle_touch_id_enrollment': { POST: { command: 'toggleEnrollTouchId', payloadParams: { optional: ['enabled'] } } }, '/wd/hub/session/:sessionId/appium/app/launch': { POST: { command: 'launchApp' } }, '/wd/hub/session/:sessionId/appium/app/close': { POST: { command: 'closeApp' } }, '/wd/hub/session/:sessionId/appium/app/reset': { POST: { command: 'reset' } }, '/wd/hub/session/:sessionId/appium/app/background': { POST: { command: 'background', payloadParams: { required: ['seconds'] } } }, '/wd/hub/session/:sessionId/appium/app/end_test_coverage': { POST: { command: 'endCoverage', payloadParams: { required: ['intent', 'path'] } } }, '/wd/hub/session/:sessionId/appium/app/strings': { POST: { command: 'getStrings', payloadParams: { optional: ['language', 'stringFile'] } } }, '/wd/hub/session/:sessionId/appium/element/:elementId/value': { POST: { command: 'setValueImmediate', payloadParams: { validate: jsonObj => !_appiumSupport.util.hasValue(jsonObj.value) && !_appiumSupport.util.hasValue(jsonObj.text) && 'we require one of "text" or "value" params', optional: ['value', 'text'], makeArgs: jsonObj => [jsonObj.value || jsonObj.text] } } }, '/wd/hub/session/:sessionId/appium/element/:elementId/replace_value': { POST: { command: 'replaceValue', payloadParams: { validate: jsonObj => !_appiumSupport.util.hasValue(jsonObj.value) && !_appiumSupport.util.hasValue(jsonObj.text) && 'we require one of "text" or "value" params', optional: ['value', 'text'], makeArgs: jsonObj => [jsonObj.value || jsonObj.text] } } }, '/wd/hub/session/:sessionId/appium/settings': { POST: { command: 'updateSettings', payloadParams: { required: ['settings'] } }, GET: { command: 'getSettings' } }, '/wd/hub/session/:sessionId/appium/receive_async_response': { POST: { command: 'receiveAsyncResponse', payloadParams: { required: ['response'] } } }, '/wd/hub/session/:sessionId/appium/execute_driver': { POST: { command: 'executeDriverScript', payloadParams: { required: ['script'], optional: ['type', 'timeout'] } } }, '/wd/hub/session/:sessionId/alert_text': { GET: { command: 'getAlertText' }, POST: { command: 'setAlertText', payloadParams: { required: ['text'] } } }, '/wd/hub/session/:sessionId/accept_alert': { POST: { command: 'postAcceptAlert' } }, '/wd/hub/session/:sessionId/dismiss_alert': { POST: { command: 'postDismissAlert' } }, '/wd/hub/session/:sessionId/alert/text': { GET: { command: 'getAlertText' }, POST: { command: 'setAlertText', payloadParams: { validate: jsonObj => !_appiumSupport.util.hasValue(jsonObj.value) && !_appiumSupport.util.hasValue(jsonObj.text) && 'either "text" or "value" must be set', optional: ['value', 'text'], makeArgs: jsonObj => [jsonObj.value || jsonObj.text] } } }, '/wd/hub/session/:sessionId/alert/accept': { POST: { command: 'postAcceptAlert' } }, '/wd/hub/session/:sessionId/alert/dismiss': { POST: { command: 'postDismissAlert' } }, '/wd/hub/session/:sessionId/element/:elementId/rect': { GET: { command: 'getElementRect' } }, '/wd/hub/session/:sessionId/execute/sync': { POST: { command: 'execute', payloadParams: { required: ['script', 'args'] } } }, '/wd/hub/session/:sessionId/execute/async': { POST: { command: 'executeAsync', payloadParams: { required: ['script', 'args'] } } }, '/wd/hub/session/:sessionId/screenshot/:elementId': { GET: { command: 'getElementScreenshot' } }, '/wd/hub/session/:sessionId/element/:elementId/screenshot': { GET: { command: 'getElementScreenshot' } }, '/wd/hub/session/:sessionId/window/rect': { GET: { command: 'getWindowRect' }, POST: { command: 'setWindowRect' } }, '/wd/hub/session/:sessionId/window/maximize': { POST: { command: 'maximizeWindow' } }, '/wd/hub/session/:sessionId/window/minimize': { POST: { command: 'minimizeWindow' } }, '/wd/hub/session/:sessionId/window/fullscreen': { POST: { command: 'fullScreenWindow' } }, '/wd/hub/session/:sessionId/element/:elementId/property/:name': { GET: { command: 'getProperty' } }, '/wd/hub/session/:sessionId/appium/device/set_clipboard': { POST: { command: 'setClipboard', payloadParams: { required: ['content'], optional: ['contentType', 'label'] } } }, '/wd/hub/session/:sessionId/appium/device/get_clipboard': { POST: { command: 'getClipboard', payloadParams: { optional: ['contentType'] } } }, '/wd/hub/session/:sessionId/appium/compare_images': { POST: { command: 'compareImages', payloadParams: { required: ['mode', 'firstImage', 'secondImage'], optional: ['options'] } } } }; exports.METHOD_MAP = METHOD_MAP; let ALL_COMMANDS = []; exports.ALL_COMMANDS = ALL_COMMANDS; for (let v of _lodash.default.values(METHOD_MAP)) { for (let m of _lodash.default.values(v)) { if (m.command) { ALL_COMMANDS.push(m.command); } } } const RE_ESCAPE = /[-[\]{}()+?.,\\^$|#\s]/g; const RE_PARAM = /([:*])(\w+)/g; class Route { constructor(route) { this.paramNames = []; let reStr = route.replace(RE_ESCAPE, '\\$&'); reStr = reStr.replace(RE_PARAM, (_, mode, name) => { this.paramNames.push(name); return mode === ':' ? '([^/]*)' : '(.*)'; }); this.routeRegexp = new RegExp(`^${reStr}$`); } parse(url) { let matches = url.match(this.routeRegexp); if (!matches) return; let i = 0; let params = {}; while (i < this.paramNames.length) { const paramName = this.paramNames[i++]; params[paramName] = matches[i]; } return params; } } function routeToCommandName(endpoint, method) { let dstRoute = null; if (endpoint.includes('?')) { endpoint = endpoint.slice(0, endpoint.indexOf('?')); } const actualEndpoint = endpoint === '/' ? '' : _lodash.default.startsWith(endpoint, '/') ? endpoint : `/${endpoint}`; for (let currentRoute of _lodash.default.keys(METHOD_MAP)) { const route = new Route(currentRoute); if (route.parse(`/wd/hub/session/ignored-session-id${actualEndpoint}`) || route.parse(`/wd/hub${actualEndpoint}`) || route.parse(actualEndpoint)) { dstRoute = currentRoute; break; } } if (!dstRoute) return; const methods = _lodash.default.get(METHOD_MAP, dstRoute); method = _lodash.default.toUpper(method); if (_lodash.default.has(methods, method)) { const dstMethod = _lodash.default.get(methods, method); if (dstMethod.command) { return dstMethod.command; } } } const NO_SESSION_ID_COMMANDS = ['createSession', 'getStatus', 'getSessions']; exports.NO_SESSION_ID_COMMANDS = NO_SESSION_ID_COMMANDS;require('source-map-support').install(); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wcm90b2NvbC9yb3V0ZXMuanMiXSwibmFtZXMiOlsiTUVUSE9EX01BUCIsIkdFVCIsImNvbW1hbmQiLCJQT1NUIiwicGF5bG9hZFBhcmFtcyIsInZhbGlkYXRlIiwianNvbk9iaiIsImNhcGFiaWxpdGllcyIsImRlc2lyZWRDYXBhYmlsaXRpZXMiLCJvcHRpb25hbCIsIkRFTEVURSIsInByb3RvY29sTmFtZSIsIkJhc2VEcml2ZXIiLCJEUklWRVJfUFJPVE9DT0wiLCJXM0MiLCJ1dGlsIiwiaGFzVmFsdWUiLCJzY3JpcHQiLCJwYWdlTG9hZCIsImltcGxpY2l0IiwidHlwZSIsIm1zIiwicmVxdWlyZWQiLCJtYWtlQXJncyIsImhhbmRsZSIsIm5hbWUiLCJ2YWx1ZSIsInRleHQiLCJ1bndyYXAiLCJ3cmFwIiwic2lnbmFsU3RyZW5ndGgiLCJzaWduYWxTdHJlbmdoIiwiQUxMX0NPTU1BTkRTIiwidiIsIl8iLCJ2YWx1ZXMiLCJtIiwicHVzaCIsIlJFX0VTQ0FQRSIsIlJFX1BBUkFNIiwiUm91dGUiLCJjb25zdHJ1Y3RvciIsInJvdXRlIiwicGFyYW1OYW1lcyIsInJlU3RyIiwicmVwbGFjZSIsIm1vZGUiLCJyb3V0ZVJlZ2V4cCIsIlJlZ0V4cCIsInBhcnNlIiwidXJsIiwibWF0Y2hlcyIsIm1hdGNoIiwiaSIsInBhcmFtcyIsImxlbmd0aCIsInBhcmFtTmFtZSIsInJvdXRlVG9Db21tYW5kTmFtZSIsImVuZHBvaW50IiwibWV0aG9kIiwiZHN0Um91dGUiLCJpbmNsdWRlcyIsInNsaWNlIiwiaW5kZXhPZiIsImFjdHVhbEVuZHBvaW50Iiwic3RhcnRzV2l0aCIsImN1cnJlbnRSb3V0ZSIsImtleXMiLCJtZXRob2RzIiwiZ2V0IiwidG9VcHBlciIsImhhcyIsImRzdE1ldGhvZCIsIk5PX1NFU1NJT05fSURfQ09NTUFORFMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQU1BLE1BQU1BLFVBQVUsR0FBRztBQUNqQixv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