appium-xcuitest-driver 4.11.0 → 4.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +23 -0
  2. package/build/lib/app-utils.js.map +1 -0
  3. package/build/lib/build-wda.js.map +1 -0
  4. package/build/lib/cert-utils.js.map +1 -0
  5. package/build/lib/commands/activeAppInfo.js.map +1 -0
  6. package/build/lib/commands/alert.js.map +1 -0
  7. package/build/lib/commands/app-management.js.map +1 -0
  8. package/build/lib/commands/appearance.js.map +1 -0
  9. package/build/lib/commands/battery.js.map +1 -0
  10. package/build/lib/commands/biometric.js.map +1 -0
  11. package/build/lib/commands/certificate.js.map +1 -0
  12. package/build/lib/commands/clipboard.js.map +1 -0
  13. package/build/lib/commands/condition.js.map +1 -0
  14. package/build/lib/commands/context.js.map +1 -0
  15. package/build/lib/commands/cookies.js.map +1 -0
  16. package/build/lib/commands/deviceInfo.js.map +1 -0
  17. package/build/lib/commands/element.js.map +1 -0
  18. package/build/lib/commands/execute.js +2 -1
  19. package/build/lib/commands/execute.js.map +1 -0
  20. package/build/lib/commands/file-movement.js.map +1 -0
  21. package/build/lib/commands/find.js.map +1 -0
  22. package/build/lib/commands/general.js.map +1 -0
  23. package/build/lib/commands/gesture.js +27 -1
  24. package/build/lib/commands/gesture.js.map +1 -0
  25. package/build/lib/commands/index.js.map +1 -0
  26. package/build/lib/commands/iohid.js.map +1 -0
  27. package/build/lib/commands/keychains.js.map +1 -0
  28. package/build/lib/commands/localization.js.map +1 -0
  29. package/build/lib/commands/location.js.map +1 -0
  30. package/build/lib/commands/lock.js.map +1 -0
  31. package/build/lib/commands/log.js.map +1 -0
  32. package/build/lib/commands/navigation.js.map +1 -0
  33. package/build/lib/commands/notifications.js.map +1 -0
  34. package/build/lib/commands/pasteboard.js.map +1 -0
  35. package/build/lib/commands/pcap.js.map +1 -0
  36. package/build/lib/commands/performance.js.map +1 -0
  37. package/build/lib/commands/permissions.js.map +1 -0
  38. package/build/lib/commands/proxy-helper.js.map +1 -0
  39. package/build/lib/commands/record-audio.js.map +1 -0
  40. package/build/lib/commands/recordscreen.js.map +1 -0
  41. package/build/lib/commands/screenshots.js.map +1 -0
  42. package/build/lib/commands/source.js.map +1 -0
  43. package/build/lib/commands/timeouts.js.map +1 -0
  44. package/build/lib/commands/web.js.map +1 -0
  45. package/build/lib/commands/xctest.js.map +1 -0
  46. package/build/lib/cookies.js.map +1 -0
  47. package/build/lib/css-converter.js.map +1 -0
  48. package/build/lib/desired-caps.js.map +1 -0
  49. package/build/lib/device-connections-factory.js.map +1 -0
  50. package/build/lib/device-log/ios-crash-log.js.map +1 -0
  51. package/build/lib/device-log/ios-device-log.js.map +1 -0
  52. package/build/lib/device-log/ios-log.js.map +1 -0
  53. package/build/lib/device-log/ios-performance-log.js.map +1 -0
  54. package/build/lib/device-log/ios-simulator-log.js.map +1 -0
  55. package/build/lib/device-log/rotating-log.js.map +1 -0
  56. package/build/lib/device-log/safari-console-log.js.map +1 -0
  57. package/build/lib/device-log/safari-network-log.js.map +1 -0
  58. package/build/lib/driver.js.map +1 -0
  59. package/build/lib/ios-deploy.js.map +1 -0
  60. package/build/lib/ios-fs-helpers.js.map +1 -0
  61. package/build/lib/ios-generic-simulators.js.map +1 -0
  62. package/build/lib/logger.js.map +1 -0
  63. package/build/lib/py-ios-device-client.js.map +1 -0
  64. package/build/lib/real-device-management.js.map +1 -0
  65. package/build/lib/simulator-management.js.map +1 -0
  66. package/build/lib/utils.js.map +1 -0
  67. package/lib/commands/execute.js +2 -0
  68. package/lib/commands/gesture.js +22 -0
  69. package/npm-shrinkwrap.json +296 -820
  70. package/package.json +3 -3
package/README.md CHANGED
@@ -1290,6 +1290,29 @@ js.executeScript("mobile: dragFromToForDuration", params);
1290
1290
 
1291
1291
  [clickForDuration:thenDragToElement:](https://developer.apple.com/documentation/xctest/xcuielement/1500989-clickforduration?language=objc)
1292
1292
 
1293
+ ### mobile: dragFromToWithVelocity
1294
+
1295
+ Initiates a press-and-hold gesture, drags to another coordinate or an element with a velocity you specify, and holds for a duration you specify.
1296
+
1297
+ #### Arguments
1298
+
1299
+ Name | Type | Required | Description | Example
1300
+ --- | --- | --- | --- | ---
1301
+ fromElementId | string | no | The internal element identifier (as hexadecimal hash string) to start the drag gesture from. Absolute screen coordinates are expected if this argument is not set | fe50b60b-916d-420b-8728-ee2072ec53eb
1302
+ toElementId | string | no | The internal element identifier (as hexadecimal hash string) to end the drag gesture on. This parameter is mandatory if `fromElementId` is provided | fe50b60b-916d-420b-8728-ee2072ec53eb
1303
+ pressDuration | number | yes | Float number of seconds in range [0, 60]. How long the tap gesture at starting drag point should be before to start dragging | 0.5
1304
+ holdDuration | number | yes | Float number of seconds in range [0, 60]. The duration for which to hold over the other coordinate or the given element after dragging | 0.1
1305
+ velocity | number | yes | The speed at which to move from the initial press position to the other element or coordinate, expressed in pixels per second | 400
1306
+ fromX | number | no | The x coordinate of starting drag point. Must be provided if `fromElementId` is not defined | 100
1307
+ fromY | number | no | The y coordinate of starting drag point. Must be provided if `fromElementId` is not defined | 100
1308
+ toX | number | no | The x coordinate of ending drag point. Must be provided if `fromElementId` is not defined | 200
1309
+ toY | number | no | The y coordinate of ending drag point. Must be provided if `fromElementId` is not defined | 200
1310
+
1311
+ #### References
1312
+
1313
+ [pressForDuration:thenDragToElement:withVelocity:thenHoldForDuration:](https://developer.apple.com/documentation/xctest/xcuielement/3551693-pressforduration?language=objc)
1314
+ [pressForDuration:thenDragToCoordinate:withVelocity:thenHoldForDuration:](https://developer.apple.com/documentation/xctest/xcuicoordinate/3551692-pressforduration?language=objc)
1315
+
1293
1316
  ### mobile: selectPickerWheelValue
1294
1317
 
1295
1318
  Performs selection of the next or previous picker wheel value. This might
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-utils.js","names":["STRINGSDICT_RESOURCE","STRINGS_RESOURCE","SAFARI_BUNDLE_ID","APP_EXT","IPA_EXT","extractPlistEntry","app","entryName","plistPath","path","resolve","plist","parsePlistFile","err","Error","basename","message","extractBundleId","bundleId","log","debug","fetchSupportedAppPlatforms","result","_","isArray","warn","verifyApplicationPlatform","expectedPlatform","supportedPlatforms","JSON","stringify","isSimulator","isTvOS","prefix","suffix","dstPlatform","includes","readResource","resourcePath","data","key","value","toPairs","isString","parseLocalizableStrings","opts","language","localizableStringsDir","stringFile","strictMode","info","lprojRoot","subfolder","fs","exists","resourcePaths","dstPath","push","isEmpty","resourceFiles","readdir","filter","name","some","x","endsWith","map","length","resultStrings","toAbsolutePath","p","isAbsolute","process","cwd","util","isSubPath","keys","merge","e","isAppBundle","appPath","toLower","stat","isDirectory","join","findApps","archivePath","appExtensions","useSystemUnzipEnv","env","APPIUM_PREFER_SYSTEM_UNZIP","useSystemUnzip","tmpRoot","tempDir","openDir","zip","extractAllTo","globPattern","ext","replace","sortedBundleItems","glob","strict","sort","a","b","split","sep","isolateAppBundle","appRoot","dstRoot","mv","mkdirp"],"sources":["../../lib/app-utils.js"],"sourcesContent":["import _ from 'lodash';\nimport path from 'path';\nimport { plist, fs, util, tempDir, zip } from 'appium/support';\nimport log from './logger.js';\n\nconst STRINGSDICT_RESOURCE = '.stringsdict';\nconst STRINGS_RESOURCE = '.strings';\nconst SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';\nconst APP_EXT = '.app';\nconst IPA_EXT = '.ipa';\n\nasync function extractPlistEntry (app, entryName) {\n const plistPath = path.resolve(app, 'Info.plist');\n try {\n return (await plist.parsePlistFile(plistPath))[entryName];\n } catch (err) {\n throw new Error(`Could not extract Info.plist from '${path.basename(app)}': ${err.message}`);\n }\n}\n\nasync function extractBundleId (app) {\n const bundleId = await extractPlistEntry(app, 'CFBundleIdentifier');\n log.debug(`Getting bundle ID from app '${app}': '${bundleId}'`);\n return bundleId;\n}\n\nasync function fetchSupportedAppPlatforms (app) {\n try {\n const result = await extractPlistEntry(app, 'CFBundleSupportedPlatforms');\n if (!_.isArray(result)) {\n log.warn(`${path.basename(app)}': CFBundleSupportedPlatforms is not a valid list`);\n return [];\n }\n return result;\n } catch (err) {\n log.warn(\n `Cannot extract the list of supported platforms from '${path.basename(app)}': ${err.message}`\n );\n return [];\n }\n}\n\n/**\n * @typedef {Object} PlatformOpts\n *\n * @property {boolean} isSimulator - Whether the destination platform is a Simulator\n * @property {boolean} isTvOS - Whether the destination platform is a Simulator\n */\n\n/**\n * Verify whether the given application is compatible to the\n * platform where it is going to be installed and tested.\n *\n * @param {string} app - The actual path to the application bundle\n * @param {PlatformOpts} expectedPlatform\n * @throws {Error} If bundle architecture does not match the expected device architecture.\n */\nasync function verifyApplicationPlatform (app, expectedPlatform) {\n log.debug('Verifying application platform');\n\n const supportedPlatforms = await fetchSupportedAppPlatforms(app);\n log.debug(`CFBundleSupportedPlatforms: ${JSON.stringify(supportedPlatforms)}`);\n\n const {\n isSimulator,\n isTvOS,\n } = expectedPlatform;\n const prefix = isTvOS ? 'AppleTV' : 'iPhone';\n const suffix = isSimulator ? 'Simulator' : 'OS';\n const dstPlatform = `${prefix}${suffix}`;\n if (!supportedPlatforms.includes(dstPlatform)) {\n throw new Error(`${isSimulator ? 'Simulator' : 'Real device'} architecture is unsupported by the '${app}' application. ` +\n `Make sure the correct deployment target has been selected for its compilation in Xcode.`);\n }\n}\n\nasync function readResource (resourcePath) {\n const data = await plist.parsePlistFile(resourcePath);\n const result = {};\n for (const [key, value] of _.toPairs(data)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n}\n\nasync function parseLocalizableStrings (opts) {\n const {\n app,\n language = 'en',\n localizableStringsDir,\n stringFile,\n strictMode,\n } = opts;\n\n if (!app) {\n const message = `Strings extraction is not supported if 'app' capability is not set`;\n if (strictMode) {\n throw new Error(message);\n }\n log.info(message);\n return {};\n }\n\n let lprojRoot;\n for (const subfolder of [`${language}.lproj`, localizableStringsDir, '']) {\n lprojRoot = path.resolve(app, subfolder);\n if (await fs.exists(lprojRoot)) {\n break;\n }\n const message = `No '${lprojRoot}' resources folder has been found`;\n if (strictMode) {\n throw new Error(message);\n }\n log.debug(message);\n }\n log.info(`Will extract resource strings from '${lprojRoot}'`);\n\n const resourcePaths = [];\n if (stringFile) {\n const dstPath = path.resolve(lprojRoot, stringFile);\n if (await fs.exists(dstPath)) {\n resourcePaths.push(dstPath);\n } else {\n const message = `No '${dstPath}' resource file has been found for '${app}'`;\n if (strictMode) {\n throw new Error(message);\n }\n log.info(message);\n log.info(`Getting all the available strings from '${lprojRoot}'`);\n }\n }\n\n if (_.isEmpty(resourcePaths) && await fs.exists(lprojRoot)) {\n const resourceFiles = (await fs.readdir(lprojRoot))\n .filter((name) => _.some([STRINGS_RESOURCE, STRINGSDICT_RESOURCE], (x) => name.endsWith(x)))\n .map((name) => path.resolve(lprojRoot, name));\n resourcePaths.push(...resourceFiles);\n }\n log.info(`Got ${resourcePaths.length} resource file(s) in '${lprojRoot}'`);\n\n if (_.isEmpty(resourcePaths)) {\n return {};\n }\n\n const resultStrings = {};\n const toAbsolutePath = function (p) {\n return path.isAbsolute(p) ? p : path.resolve(process.cwd(), p);\n };\n for (const resourcePath of resourcePaths) {\n if (!util.isSubPath(toAbsolutePath(resourcePath), toAbsolutePath(app))) {\n // security precaution\n throw new Error(`'${resourcePath}' is expected to be located under '${app}'`);\n }\n try {\n const data = await readResource(resourcePath);\n log.debug(`Parsed ${_.keys(data).length} string(s) from '${resourcePath}'`);\n _.merge(resultStrings, data);\n } catch (e) {\n log.warn(`Cannot parse '${resourcePath}' resource. Original error: ${e.message}`);\n }\n }\n\n log.info(`Got ${_.keys(resultStrings).length} string(s) from '${lprojRoot}'`);\n return resultStrings;\n}\n\n/**\n * Check whether the given path on the file system points to the .app bundle root\n *\n * @param {string} appPath Possible .app bundle root\n * @returns {boolean} Whether the given path points to an .app bundle\n */\nasync function isAppBundle (appPath) {\n return _.endsWith(_.toLower(appPath), APP_EXT)\n && (await fs.stat(appPath)).isDirectory()\n && await fs.exists(path.join(appPath, 'Info.plist'));\n}\n\n/**\n * Extract the given archive and looks for items with given extensions in it\n *\n * @param {string} archivePath Full path to a .zip archive\n * @param {Array<string>} appExtensions List of matching item extensions\n * @returns {[string, Array<String>]} Tuple, where the first element points to\n * a temporary folder root where the archive has been extracted and the second item\n * contains a list of relative paths to matched items\n */\nasync function findApps (archivePath, appExtensions) {\n const useSystemUnzipEnv = process.env.APPIUM_PREFER_SYSTEM_UNZIP;\n const useSystemUnzip = _.isEmpty(useSystemUnzipEnv)\n || !['0', 'false'].includes(_.toLower(useSystemUnzipEnv));\n const tmpRoot = await tempDir.openDir();\n await zip.extractAllTo(archivePath, tmpRoot, {useSystemUnzip});\n const globPattern = `**/*.+(${appExtensions.map((ext) => ext.replace(/^\\./, '')).join('|')})`;\n const sortedBundleItems = (await fs.glob(globPattern, {\n cwd: tmpRoot,\n strict: false,\n })).sort((a, b) => a.split(path.sep).length - b.split(path.sep).length);\n return [tmpRoot, sortedBundleItems];\n}\n\n/**\n * Moves the application bundle to a newly created temporary folder\n *\n * @param {string} appRoot Full path to the .app bundle\n * @returns {string} The new path to the app bundle.\n * The name of the app bundle remains though\n */\nasync function isolateAppBundle (appRoot) {\n const tmpRoot = await tempDir.openDir();\n const dstRoot = path.join(tmpRoot, path.basename(appRoot));\n await fs.mv(appRoot, dstRoot, {mkdirp: true});\n return dstRoot;\n}\n\nexport {\n extractBundleId, verifyApplicationPlatform, parseLocalizableStrings,\n SAFARI_BUNDLE_ID, fetchSupportedAppPlatforms, APP_EXT, IPA_EXT,\n isAppBundle, findApps, isolateAppBundle,\n};\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-wda.js","names":["DEFAULT_SIM_NAME","build","xcodeVersion","getAndCheckXcodeVersion","iosVersion","getAndCheckIosSdkVersion","deviceName","translateDeviceName","device","getExistingSim","platformVersion","wda","WebDriverAgent","iosSdkVersion","showXcodeLog","xcodebuild","start","require","main","module","asyncify"],"sources":["../../lib/build-wda.js"],"sourcesContent":["import { WebDriverAgent } from 'appium-webdriveragent';\nimport { translateDeviceName, getAndCheckXcodeVersion, getAndCheckIosSdkVersion } from './utils';\nimport { getExistingSim } from './simulator-management';\nimport { asyncify } from 'asyncbox';\n\nconst DEFAULT_SIM_NAME = 'iPhone 12';\n\n// TODO: allow passing in all the various build params as CLI args\nasync function build () {\n const xcodeVersion = await getAndCheckXcodeVersion();\n const iosVersion = await getAndCheckIosSdkVersion();\n const deviceName = translateDeviceName(iosVersion, DEFAULT_SIM_NAME);\n const device = await getExistingSim({\n platformVersion: iosVersion,\n deviceName\n });\n const wda = new WebDriverAgent(xcodeVersion, {\n iosSdkVersion: iosVersion,\n platformVersion: iosVersion,\n showXcodeLog: true,\n device,\n });\n await wda.xcodebuild.start(true);\n}\n\nif (require.main === module) {\n asyncify(build);\n}\n\nexport default build;\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA,MAAMA,gBAAgB,GAAG,WAAzB;;AAGA,eAAeC,KAAf,GAAwB;EACtB,MAAMC,YAAY,GAAG,MAAM,IAAAC,8BAAA,GAA3B;EACA,MAAMC,UAAU,GAAG,MAAM,IAAAC,+BAAA,GAAzB;EACA,MAAMC,UAAU,GAAG,IAAAC,0BAAA,EAAoBH,UAApB,EAAgCJ,gBAAhC,CAAnB;EACA,MAAMQ,MAAM,GAAG,MAAM,IAAAC,mCAAA,EAAe;IAClCC,eAAe,EAAEN,UADiB;IAElCE;EAFkC,CAAf,CAArB;EAIA,MAAMK,GAAG,GAAG,IAAIC,oCAAJ,CAAmBV,YAAnB,EAAiC;IAC3CW,aAAa,EAAET,UAD4B;IAE3CM,eAAe,EAAEN,UAF0B;IAG3CU,YAAY,EAAE,IAH6B;IAI3CN;EAJ2C,CAAjC,CAAZ;EAMA,MAAMG,GAAG,CAACI,UAAJ,CAAeC,KAAf,CAAqB,IAArB,CAAN;AACD;;AAED,IAAIC,OAAO,CAACC,IAAR,KAAiBC,MAArB,EAA6B;EAC3B,IAAAC,kBAAA,EAASnB,KAAT;AACD;;eAEcA,K"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cert-utils.js","names":["doesSupportKeychainApi","_","memoize","device","simctl","exec","args","e","installCertificate","payload","addRootCertificate","raw","hasCertificateLegacy","hasSSLCert","udid","installCertificateLegacy","installSSLCert"],"sources":["../../lib/cert-utils.js"],"sourcesContent":["import _ from 'lodash';\nimport { installSSLCert, hasSSLCert } from 'appium-ios-simulator';\n\n/**\n * Check whether the given Simulator device supports simctl keychain API.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @returns {boolean} `true` if the current Simulator SDK supports keychain commands.\n */\nconst doesSupportKeychainApi = _.memoize(async function doesSupportKeychainApi (device) {\n try {\n await device.simctl.exec('help', {\n args: ['keychain']\n });\n return true;\n } catch (e) {\n return false;\n }\n});\n\n/**\n * Adds a certificate to the trusted root store.\n * Simulator must be in BOOTED state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n */\nasync function installCertificate (device, payload) {\n await device.simctl.addRootCertificate(payload, {raw: true});\n}\n\n/**\n * Check whether the given certificate is already installed.\n * The function is using hacky calls to make certificate stuff working for older SDKs.\n * Simulator must be in SHUTDOWN state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n * @returns {boolean} `true` if the certificate is already present in the root store.\n */\nasync function hasCertificateLegacy (device, payload) {\n return await hasSSLCert(payload, device.udid);\n}\n\n/**\n * Adds a certificate to the trusted root store.\n * The function is using hacky calls to make certificate stuff working for older SDKs.\n * Simulator must be in SHUTDOWN state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n */\nasync function installCertificateLegacy (device, payload) {\n await installSSLCert(payload, device.udid);\n}\n\n\nexport {\n doesSupportKeychainApi, installCertificate, installCertificateLegacy,\n hasCertificateLegacy\n};\n"],"mappings":";;;;;;;;;;;;;;AAAA;;AACA;;AAQA,MAAMA,sBAAsB,GAAGC,eAAA,CAAEC,OAAF,CAAU,eAAeF,sBAAf,CAAuCG,MAAvC,EAA+C;EACtF,IAAI;IACF,MAAMA,MAAM,CAACC,MAAP,CAAcC,IAAd,CAAmB,MAAnB,EAA2B;MAC/BC,IAAI,EAAE,CAAC,UAAD;IADyB,CAA3B,CAAN;IAGA,OAAO,IAAP;EACD,CALD,CAKE,OAAOC,CAAP,EAAU;IACV,OAAO,KAAP;EACD;AACF,CAT8B,CAA/B;;;;AAkBA,eAAeC,kBAAf,CAAmCL,MAAnC,EAA2CM,OAA3C,EAAoD;EAClD,MAAMN,MAAM,CAACC,MAAP,CAAcM,kBAAd,CAAiCD,OAAjC,EAA0C;IAACE,GAAG,EAAE;EAAN,CAA1C,CAAN;AACD;;AAWD,eAAeC,oBAAf,CAAqCT,MAArC,EAA6CM,OAA7C,EAAsD;EACpD,OAAO,MAAM,IAAAI,8BAAA,EAAWJ,OAAX,EAAoBN,MAAM,CAACW,IAA3B,CAAb;AACD;;AAUD,eAAeC,wBAAf,CAAyCZ,MAAzC,EAAiDM,OAAjD,EAA0D;EACxD,MAAM,IAAAO,kCAAA,EAAeP,OAAf,EAAwBN,MAAM,CAACW,IAA/B,CAAN;AACD"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activeAppInfo.js","names":["extensions","commands","mobileGetActiveAppInfo","proxyCommand","Object","assign"],"sources":["../../../lib/commands/activeAppInfo.js"],"sourcesContent":["const extensions = {}, commands = {};\n\n/**\n * Returns ActiveApp info.\n *\n * @returns {Object} The response of `/wda/activeAppInfo'`\n * @throws {Error} if an error raised by command\n */\ncommands.mobileGetActiveAppInfo = async function mobileGetActiveAppInfo () {\n return await this.proxyCommand('/wda/activeAppInfo', 'GET');\n};\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":";;;;;;;;;AAAA,MAAMA,UAAU,GAAG,EAAnB;AAAA,MAAuBC,QAAQ,GAAG,EAAlC;;;AAQAA,QAAQ,CAACC,sBAAT,GAAkC,eAAeA,sBAAf,GAAyC;EACzE,OAAO,MAAM,KAAKC,YAAL,CAAkB,oBAAlB,EAAwC,KAAxC,CAAb;AACD,CAFD;;AAIAC,MAAM,CAACC,MAAP,CAAcL,UAAd,EAA0BC,QAA1B;eAEeD,U"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.js","names":["commands","toAlertParams","opts","params","buttonLabel","name","getAlertText","proxyCommand","setAlertText","value","postAcceptAlert","postDismissAlert","getAlertButtons","mobileHandleAlert","action","Error"],"sources":["../../../lib/commands/alert.js"],"sourcesContent":["const commands = {};\n\nfunction toAlertParams (opts = {}) {\n const params = {};\n if (opts.buttonLabel) {\n params.name = opts.buttonLabel;\n }\n return params;\n}\n\ncommands.getAlertText = async function getAlertText () {\n return await this.proxyCommand('/alert/text', 'GET');\n};\n\ncommands.setAlertText = async function setAlertText (value) {\n return await this.proxyCommand('/alert/text', 'POST', {value});\n};\n\ncommands.postAcceptAlert = async function postAcceptAlert (opts = {}) {\n return await this.proxyCommand('/alert/accept', 'POST', toAlertParams(opts));\n};\n\ncommands.postDismissAlert = async function postDismissAlert (opts = {}) {\n return await this.proxyCommand('/alert/dismiss', 'POST', toAlertParams(opts));\n};\n\ncommands.getAlertButtons = async function getAlertButtons () {\n return await this.proxyCommand('/wda/alert/buttons', 'GET');\n};\n\ncommands.mobileHandleAlert = async function mobileHandleAlert (opts = {}) {\n switch (opts.action) {\n case 'accept':\n return await this.postAcceptAlert(opts);\n case 'dismiss':\n return await this.postDismissAlert(opts);\n case 'getButtons':\n return await this.getAlertButtons();\n default:\n throw new Error(`The 'action' value should be either 'accept', 'dismiss' or 'getButtons'. ` +\n `'${opts.action}' is provided instead.`);\n }\n};\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;;AAAA,MAAMA,QAAQ,GAAG,EAAjB;;;AAEA,SAASC,aAAT,CAAwBC,IAAI,GAAG,EAA/B,EAAmC;EACjC,MAAMC,MAAM,GAAG,EAAf;;EACA,IAAID,IAAI,CAACE,WAAT,EAAsB;IACpBD,MAAM,CAACE,IAAP,GAAcH,IAAI,CAACE,WAAnB;EACD;;EACD,OAAOD,MAAP;AACD;;AAEDH,QAAQ,CAACM,YAAT,GAAwB,eAAeA,YAAf,GAA+B;EACrD,OAAO,MAAM,KAAKC,YAAL,CAAkB,aAAlB,EAAiC,KAAjC,CAAb;AACD,CAFD;;AAIAP,QAAQ,CAACQ,YAAT,GAAwB,eAAeA,YAAf,CAA6BC,KAA7B,EAAoC;EAC1D,OAAO,MAAM,KAAKF,YAAL,CAAkB,aAAlB,EAAiC,MAAjC,EAAyC;IAACE;EAAD,CAAzC,CAAb;AACD,CAFD;;AAIAT,QAAQ,CAACU,eAAT,GAA2B,eAAeA,eAAf,CAAgCR,IAAI,GAAG,EAAvC,EAA2C;EACpE,OAAO,MAAM,KAAKK,YAAL,CAAkB,eAAlB,EAAmC,MAAnC,EAA2CN,aAAa,CAACC,IAAD,CAAxD,CAAb;AACD,CAFD;;AAIAF,QAAQ,CAACW,gBAAT,GAA4B,eAAeA,gBAAf,CAAiCT,IAAI,GAAG,EAAxC,EAA4C;EACtE,OAAO,MAAM,KAAKK,YAAL,CAAkB,gBAAlB,EAAoC,MAApC,EAA4CN,aAAa,CAACC,IAAD,CAAzD,CAAb;AACD,CAFD;;AAIAF,QAAQ,CAACY,eAAT,GAA2B,eAAeA,eAAf,GAAkC;EAC3D,OAAO,MAAM,KAAKL,YAAL,CAAkB,oBAAlB,EAAwC,KAAxC,CAAb;AACD,CAFD;;AAIAP,QAAQ,CAACa,iBAAT,GAA6B,eAAeA,iBAAf,CAAkCX,IAAI,GAAG,EAAzC,EAA6C;EACxE,QAAQA,IAAI,CAACY,MAAb;IACE,KAAK,QAAL;MACE,OAAO,MAAM,KAAKJ,eAAL,CAAqBR,IAArB,CAAb;;IACF,KAAK,SAAL;MACE,OAAO,MAAM,KAAKS,gBAAL,CAAsBT,IAAtB,CAAb;;IACF,KAAK,YAAL;MACE,OAAO,MAAM,KAAKU,eAAL,EAAb;;IACF;MACE,MAAM,IAAIG,KAAJ,CAAW,2EAAD,GACC,IAAGb,IAAI,CAACY,MAAO,wBAD1B,CAAN;EARJ;AAWD,CAZD;;eAeed,Q"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-management.js","names":["commands","requireOptions","opts","reqKeys","key","_","isString","isEmpty","errors","InvalidArgumentError","mobileInstallApp","app","timeoutMs","strategy","srcAppPath","helpers","configureApp","log","info","isRealDevice","device","udid","fs","exists","errorAndThrow","installApp","appPushTimeout","appInstallStrategy","mobileIsAppInstalled","bundleId","installed","isAppInstalled","mobileRemoveApp","removeApp","err","warn","message","mobileLaunchApp","launchOptions","arguments","isArray","environment","proxyCommand","mobileTerminateApp","mobileActivateApp","mobileKillApp","UnsupportedOperationError","terminateApp","mobileQueryAppState","appPath","isPlainObject","activateApp","Object","assign","queryAppState","mobileListApps","NotImplementedError","applicationType","service","services","startInstallationProxyService","listApplications","close"],"sources":["../../../lib/commands/app-management.js"],"sourcesContent":["import _ from 'lodash';\nimport { fs } from 'appium/support';\nimport { errors } from 'appium/driver';\nimport { services } from 'appium-ios-device';\n\nconst commands = {};\n\nfunction requireOptions (opts = {}, reqKeys = []) {\n for (const key of reqKeys) {\n if (!_.isString(opts[key]) || _.isEmpty(opts[key])) {\n throw new errors.InvalidArgumentError(\n `'${key}' is expected to be a valid string. '${opts[key]}' is given instead`\n );\n }\n }\n return opts;\n}\n\ncommands.mobileInstallApp = async function mobileInstallApp (opts = {}) {\n const { app, timeoutMs, strategy } = requireOptions(opts, ['app']);\n const srcAppPath = await this.helpers.configureApp(app, '.app');\n this.log.info(`Installing '${srcAppPath}' to the ${this.isRealDevice() ? 'real device' : 'Simulator'} ` +\n `with UDID '${this.opts.device.udid}'`);\n if (!await fs.exists(srcAppPath)) {\n this.log.errorAndThrow(`The application at '${srcAppPath}' does not exist or is not accessible`);\n }\n await this.opts.device.installApp(\n srcAppPath, timeoutMs ?? this.opts.appPushTimeout, strategy ?? this.opts.appInstallStrategy\n );\n this.log.info(`Installation of '${srcAppPath}' succeeded`);\n};\n\ncommands.mobileIsAppInstalled = async function mobileIsAppInstalled (opts = {}) {\n const {bundleId} = requireOptions(opts, ['bundleId']);\n const installed = await this.opts.device.isAppInstalled(bundleId);\n this.log.info(`App '${bundleId}' is${installed ? '' : ' not'} installed`);\n return installed;\n};\n\ncommands.mobileRemoveApp = async function mobileRemoveApp (opts = {}) {\n const {bundleId} = requireOptions(opts, ['bundleId']);\n this.log.info(`Uninstalling the application with bundle identifier '${bundleId}' ` +\n `from the ${this.isRealDevice() ? 'real device' : 'Simulator'} with UDID '${this.opts.device.udid}'`);\n try {\n await this.opts.device.removeApp(bundleId);\n this.log.info(`Removal of '${bundleId}' succeeded`);\n return true;\n } catch (err) {\n this.log.warn(`Cannot remove '${bundleId}'. Original error: ${err.message}`);\n return false;\n }\n};\n\ncommands.mobileLaunchApp = async function mobileLaunchApp (opts = {}) {\n const launchOptions = requireOptions(opts, ['bundleId']);\n if (opts.arguments) {\n launchOptions.arguments = _.isArray(opts.arguments) ? opts.arguments : [opts.arguments];\n }\n if (opts.environment) {\n launchOptions.environment = opts.environment;\n }\n return await this.proxyCommand('/wda/apps/launch', 'POST', launchOptions);\n};\n\ncommands.mobileTerminateApp = async function mobileTerminateApp (opts = {}) {\n return await this.proxyCommand('/wda/apps/terminate', 'POST', requireOptions(opts, ['bundleId']));\n};\n\ncommands.mobileActivateApp = async function mobileActivateApp (opts = {}) {\n return await this.proxyCommand('/wda/apps/activate', 'POST', requireOptions(opts, ['bundleId']));\n};\n\n/**\n * Kill the given bundle id process via instruments service.\n * https://github.com/YueChen-C/py-ios-device/blob/51f4683c5c3c385a015858ada07a5f1c62d3cf57/ios_device/cli/base.py#L220\n *\n * @param {Object} opts - Options set, which must contain `bundleId` property\n * @returns {boolean} Returns true if the bundle id process was killed. Otherwise false.\n */\ncommands.mobileKillApp = async function mobileKillApp (opts = {}) {\n if (!this.isRealDevice()) {\n throw new errors.UnsupportedOperationError('A real device is required');\n }\n\n const {bundleId} = requireOptions(opts, ['bundleId']);\n return await this.opts.device.terminateApp(bundleId);\n};\n\n/**\n * Returns the current application state\n *\n * @param {Object} opts - Options set, which must contain `bundleId` property\n * @returns {number} The actual application state code. See\n * https://developer.apple.com/documentation/xctest/xcuiapplicationstate?language=objc\n * to get the list of possible values.\n */\ncommands.mobileQueryAppState = async function mobileQueryAppState (opts = {}) {\n return await this.proxyCommand('/wda/apps/state', 'POST', requireOptions(opts, ['bundleId']));\n};\n\ncommands.installApp = async function installApp (appPath, opts = {}) {\n await this.mobileInstallApp({\n ...(_.isPlainObject(opts) ? opts : {}),\n app: appPath,\n });\n};\n\ncommands.activateApp = async function activateApp (bundleId, opts = {}) {\n return await this.mobileLaunchApp(Object.assign({}, opts, {bundleId}));\n};\n\ncommands.isAppInstalled = async function isAppInstalled (bundleId) {\n return await this.mobileIsAppInstalled({bundleId});\n};\n\ncommands.terminateApp = async function terminateApp (bundleId) {\n return await this.mobileTerminateApp({bundleId});\n};\n\ncommands.queryAppState = async function queryAppState (bundleId) {\n return await this.mobileQueryAppState({bundleId});\n};\n\n/**\n * @typedef {Object} ListAppsOptions\n * @property {'System'|'User'} applicationType [User] The type of applications to list\n */\n\n/**\n * List applications installed on the real device under test\n *\n * @param {ListAppsOptions} opts\n * @returns {Array<Object>} A list of apps, where each item is a map where keys are\n * bundle identifiers and values are maps of platform-specific app properties.\n */\ncommands.mobileListApps = async function mobileListApps (opts = {}) {\n if (!this.isRealDevice()) {\n throw new errors.NotImplementedError(`This extension is only supported on real devices`);\n }\n\n const {\n applicationType = 'User',\n } = opts;\n const service = await services.startInstallationProxyService(this.opts.device.udid);\n try {\n return await service.listApplications({applicationType});\n } finally {\n service.close();\n }\n};\n\nexport default commands;\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appearance.js","names":["commands","mobileSetAppearance","opts","style","includes","_","toLower","Error","util","compareVersions","platformVersion","isSimulator","device","setAppearance","e","log","debug","stack","proxyCommand","name","mobileSiriCommand","text","mobileGetAppearance","getAppearance","ign","userInterfaceStyle"],"sources":["../../../lib/commands/appearance.js"],"sourcesContent":["import _ from 'lodash';\nimport { util } from 'appium/support';\n\n\nconst commands = {};\n\n/**\n * @typedef {Object} SetAppearanceOptions\n *\n * @property {string} style - Currently two styles are supported:\n * - dark\n * - light\n */\n\n/**\n * Set the device's UI appearance style\n *\n * @since iOS 12.0\n * @param {SetAppearanceOptions} opts\n * @throws {Error} if the current platform does not support UI\n * appearance changes\n */\ncommands.mobileSetAppearance = async function mobileSetAppearance (opts = {}) {\n const {\n style,\n } = opts;\n if (!['light', 'dark'].includes(_.toLower(style))) {\n throw new Error(`The 'style' value is expected to equal either 'light' or 'dark'`);\n }\n if (util.compareVersions(this.opts.platformVersion, '<', '12.0')) {\n throw new Error('Changing appearance is only supported since iOS 12');\n }\n\n if (this.isSimulator()) {\n try {\n return void (await this.opts.device.setAppearance(style));\n } catch (e) {\n this.log.debug(e.stack);\n }\n }\n try {\n return void (await this.proxyCommand('/wda/device/appearance', 'POST', {name: style}));\n } catch (e) {\n this.log.debug(e.stack);\n }\n // Fall back to the ugly Siri workaround if the current SDK is too old\n await this.mobileSiriCommand({\n text: `Turn ${_.toLower(style) === 'dark' ? 'on' : 'off'} dark mode`,\n });\n};\n\n/**\n * @typedef {Object} Appearance\n * @property {string} style - The device's UI appearance value.\n * This could be one of:\n * - `light`\n * - `dark`\n * - `unknown`\n * - `unsupported`\n */\n\n/**\n * Get the device's UI appearance style.\n *\n * @since Xcode SDK 11\n * @returns {Appearance}\n */\ncommands.mobileGetAppearance = async function mobileGetAppearance () {\n if (util.compareVersions(this.opts.platformVersion, '<', '12.0')) {\n return 'unsupported';\n }\n\n let style;\n if (this.isSimulator()) {\n try {\n style = await this.opts.device.getAppearance();\n } catch (ign) {}\n }\n if (!style) {\n style = (await this.proxyCommand('/wda/device/info', 'GET')).userInterfaceStyle || 'unknown';\n }\n return {\n style,\n };\n};\n\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAGA,MAAMA,QAAQ,GAAG,EAAjB;;;AAkBAA,QAAQ,CAACC,mBAAT,GAA+B,eAAeA,mBAAf,CAAoCC,IAAI,GAAG,EAA3C,EAA+C;EAC5E,MAAM;IACJC;EADI,IAEFD,IAFJ;;EAGA,IAAI,CAAC,CAAC,OAAD,EAAU,MAAV,EAAkBE,QAAlB,CAA2BC,eAAA,CAAEC,OAAF,CAAUH,KAAV,CAA3B,CAAL,EAAmD;IACjD,MAAM,IAAII,KAAJ,CAAW,iEAAX,CAAN;EACD;;EACD,IAAIC,aAAA,CAAKC,eAAL,CAAqB,KAAKP,IAAL,CAAUQ,eAA/B,EAAgD,GAAhD,EAAqD,MAArD,CAAJ,EAAkE;IAChE,MAAM,IAAIH,KAAJ,CAAU,oDAAV,CAAN;EACD;;EAED,IAAI,KAAKI,WAAL,EAAJ,EAAwB;IACtB,IAAI;MACF,OAAO,MAAM,MAAM,KAAKT,IAAL,CAAUU,MAAV,CAAiBC,aAAjB,CAA+BV,KAA/B,CAAZ,CAAP;IACD,CAFD,CAEE,OAAOW,CAAP,EAAU;MACV,KAAKC,GAAL,CAASC,KAAT,CAAeF,CAAC,CAACG,KAAjB;IACD;EACF;;EACD,IAAI;IACF,OAAO,MAAM,MAAM,KAAKC,YAAL,CAAkB,wBAAlB,EAA4C,MAA5C,EAAoD;MAACC,IAAI,EAAEhB;IAAP,CAApD,CAAZ,CAAP;EACD,CAFD,CAEE,OAAOW,CAAP,EAAU;IACV,KAAKC,GAAL,CAASC,KAAT,CAAeF,CAAC,CAACG,KAAjB;EACD;;EAED,MAAM,KAAKG,iBAAL,CAAuB;IAC3BC,IAAI,EAAG,QAAOhB,eAAA,CAAEC,OAAF,CAAUH,KAAV,MAAqB,MAArB,GAA8B,IAA9B,GAAqC,KAAM;EAD9B,CAAvB,CAAN;AAGD,CA3BD;;AA6CAH,QAAQ,CAACsB,mBAAT,GAA+B,eAAeA,mBAAf,GAAsC;EACnE,IAAId,aAAA,CAAKC,eAAL,CAAqB,KAAKP,IAAL,CAAUQ,eAA/B,EAAgD,GAAhD,EAAqD,MAArD,CAAJ,EAAkE;IAChE,OAAO,aAAP;EACD;;EAED,IAAIP,KAAJ;;EACA,IAAI,KAAKQ,WAAL,EAAJ,EAAwB;IACtB,IAAI;MACFR,KAAK,GAAG,MAAM,KAAKD,IAAL,CAAUU,MAAV,CAAiBW,aAAjB,EAAd;IACD,CAFD,CAEE,OAAOC,GAAP,EAAY,CAAE;EACjB;;EACD,IAAI,CAACrB,KAAL,EAAY;IACVA,KAAK,GAAG,CAAC,MAAM,KAAKe,YAAL,CAAkB,kBAAlB,EAAsC,KAAtC,CAAP,EAAqDO,kBAArD,IAA2E,SAAnF;EACD;;EACD,OAAO;IACLtB;EADK,CAAP;AAGD,CAjBD;;eAqBeH,Q"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"battery.js","names":["extensions","commands","mobileGetBatteryInfo","proxyCommand","Object","assign"],"sources":["../../../lib/commands/battery.js"],"sourcesContent":["let extensions = {}, commands = {};\n\n/**\n * @typedef {Object} BatteryInfo\n *\n * @property {number} level - Battery level in range [0.0, 1.0], where\n * 1.0 means 100% charge.\n * @property {number} state - Battery state. The following values are possible:\n * UIDeviceBatteryStateUnknown = 0\n * UIDeviceBatteryStateUnplugged = 1 // on battery, discharging\n * UIDeviceBatteryStateCharging = 2 // plugged in, less than 100%\n * UIDeviceBatteryStateFull = 3 // plugged in, at 100%\n */\n\n/**\n * Reads the battery information from the device under test.\n * This endpoint only returns reliable result on real devices.\n *\n * @returns {BatteryInfo} The actual battery info\n */\ncommands.mobileGetBatteryInfo = async function mobileGetBatteryInfo () {\n return await this.proxyCommand('/wda/batteryInfo', 'GET');\n};\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":";;;;;;;;;AAAA,IAAIA,UAAU,GAAG,EAAjB;AAAA,IAAqBC,QAAQ,GAAG,EAAhC;;;AAoBAA,QAAQ,CAACC,oBAAT,GAAgC,eAAeA,oBAAf,GAAuC;EACrE,OAAO,MAAM,KAAKC,YAAL,CAAkB,kBAAlB,EAAsC,KAAtC,CAAb;AACD,CAFD;;AAIAC,MAAM,CAACC,MAAP,CAAcL,UAAd,EAA0BC,QAA1B;eAEeD,U"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"biometric.js","names":["commands","helpers","extensions","assertIsSimulator","driver","isSimulator","Error","mobileEnrollBiometric","opts","isEnabled","device","enrollBiometric","mobileSendBiometricMatch","match","type","sendBiometricMatch","mobileIsBiometricEnrolled","isBiometricEnrolled","Object","assign"],"sources":["../../../lib/commands/biometric.js"],"sourcesContent":["let commands = {}, helpers = {}, extensions = {};\n\nfunction assertIsSimulator (driver) {\n if (!driver.isSimulator()) {\n throw new Error('Biometric enrollment can only be performed on Simulator');\n }\n}\n\n/**\n * @typedef {Object} EnrollOptions\n *\n * @property {?boolean} isEnabled [true] - Whether to enable/disable biometric enrollment.\n */\n\n/**\n * Enrolls biometric authentication on Simulator.\n *\n * @param {EnrollOptions} opts - Enrollment options.\n * @throws {Error} If enrollment fails or the device is not a Simulator.\n */\ncommands.mobileEnrollBiometric = async function mobileEnrollBiometric (opts = {}) {\n const {\n isEnabled = true,\n } = opts;\n\n assertIsSimulator(this);\n\n await this.opts.device.enrollBiometric(isEnabled);\n};\n\n/**\n * @typedef {Object} BiometricMatchOptions\n *\n * @property {?string} type [touchId] - The biometric feature name.\n * @property {?boolean} match [true] - Whether to simulate biometric match or non-match.\n */\n\n/**\n * Emulates biometric match/non-match event on Simulator.\n * The biometric feature is expected to be already enrolled before executing that.\n *\n * @param {BiometricMatchOptions} opts - Matching options.\n * @throws {Error} If matching fails or the device is not a Simulator.\n */\ncommands.mobileSendBiometricMatch = async function mobileSendBiometricMatch (opts = {}) {\n const {\n match = true,\n type = 'touchId',\n } = opts;\n\n assertIsSimulator(this);\n\n await this.opts.device.sendBiometricMatch(match, type);\n};\n\n/**\n * Checks whether biometric is currently enrolled or not.\n *\n * @return {boolean} True if biometric is enrolled.\n * @throws {Error} If the detection fails or the device is not a Simulator.\n */\ncommands.mobileIsBiometricEnrolled = async function mobileIsBiometricEnrolled () {\n assertIsSimulator(this);\n\n return await this.opts.device.isBiometricEnrolled();\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;;;AAAA,IAAIA,QAAQ,GAAG,EAAf;AAAA,IAAmBC,OAAO,GAAG,EAA7B;AAAA,IAAiCC,UAAU,GAAG,EAA9C;;;;AAEA,SAASC,iBAAT,CAA4BC,MAA5B,EAAoC;EAClC,IAAI,CAACA,MAAM,CAACC,WAAP,EAAL,EAA2B;IACzB,MAAM,IAAIC,KAAJ,CAAU,yDAAV,CAAN;EACD;AACF;;AAcDN,QAAQ,CAACO,qBAAT,GAAiC,eAAeA,qBAAf,CAAsCC,IAAI,GAAG,EAA7C,EAAiD;EAChF,MAAM;IACJC,SAAS,GAAG;EADR,IAEFD,IAFJ;EAIAL,iBAAiB,CAAC,IAAD,CAAjB;EAEA,MAAM,KAAKK,IAAL,CAAUE,MAAV,CAAiBC,eAAjB,CAAiCF,SAAjC,CAAN;AACD,CARD;;AAwBAT,QAAQ,CAACY,wBAAT,GAAoC,eAAeA,wBAAf,CAAyCJ,IAAI,GAAG,EAAhD,EAAoD;EACtF,MAAM;IACJK,KAAK,GAAG,IADJ;IAEJC,IAAI,GAAG;EAFH,IAGFN,IAHJ;EAKAL,iBAAiB,CAAC,IAAD,CAAjB;EAEA,MAAM,KAAKK,IAAL,CAAUE,MAAV,CAAiBK,kBAAjB,CAAoCF,KAApC,EAA2CC,IAA3C,CAAN;AACD,CATD;;AAiBAd,QAAQ,CAACgB,yBAAT,GAAqC,eAAeA,yBAAf,GAA4C;EAC/Eb,iBAAiB,CAAC,IAAD,CAAjB;EAEA,OAAO,MAAM,KAAKK,IAAL,CAAUE,MAAV,CAAiBO,mBAAjB,EAAb;AACD,CAJD;;AAMAC,MAAM,CAACC,MAAP,CAAcjB,UAAd,EAA0BF,QAA1B,EAAoCC,OAApC;eAEeC,U"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certificate.js","names":["extensions","commands","CONFIG_EXTENSION","HOST_PORT_RANGE","TMPSERVER_STARTUP_TIMEOUT","Settings","General","type","value","Profile","About","Certificate_Trust_Settings","Button","Install","Allow","Done","Return_to_Settings","Alert","extractCommonName","certBuffer","tempCert","tempDir","open","prefix","suffix","fs","writeFile","path","stdout","exec","parseCommonName","err","Error","message","rimraf","LIBRE_SSL_PATTERN","OPEN_SSL_PATTERN","stringCertificate","result","reduce","acc","r","match","toMobileConfig","commonName","getUUID","util","uuidV4","toUpperCase","contentUuid","PayloadContent","PayloadCertificateFileName","PayloadDescription","PayloadDisplayName","PayloadIdentifier","PayloadType","PayloadUUID","PayloadVersion","os","hostname","split","PayloadRemovalDisallowed","clickElement","driver","locator","options","element","timeout","skipIfInvisible","lookupDelay","retryInterval","findNativeElementOrElements","JSON","stringify","nativeClick","installPre122Certificate","B","delay","trustCertificateInPreferences","name","switchLocator","retry","mobileSwipe","direction","postAcceptAlert","installPost122Certificate","activateApp","isCertFound","swipeNum","mobileInstallCertificate","opts","content","isRoot","_","isEmpty","isSimulator","methodName","device","simctl","Buffer","from","toString","raw","e","log","debug","info","client","Pyidevice","udid","assertExists","installProfile","payload","tmpRoot","openDir","tmpPort","findAPortNotInUse","configName","configPath","resolve","tmpServer","http","createServer","res","configFile","readFile","end","cn","mobileConfig","plist","updatePlistFile","host","certUrl","listen","waitForCondition","checkPortStatus","ign","waitMs","intervalMs","isRealDevice","proxyCommand","url","isWebContext","setUrl","openUrl","isCertAlreadyInstalled","compareVersions","platformVersion","bundleId","warn","toInMemoryBase64","close","mobileListCertificates","errors","NotImplementedError","listProfiles","Object","assign"],"sources":["../../../lib/commands/certificate.js"],"sourcesContent":["import _ from 'lodash';\nimport { fs, plist, tempDir, util } from 'appium/support';\nimport { retryInterval, retry, waitForCondition } from 'asyncbox';\nimport B from 'bluebird';\nimport os from 'os';\nimport path from 'path';\nimport http from 'http';\nimport { exec } from 'teen_process';\nimport { findAPortNotInUse, checkPortStatus } from 'portscanner';\nimport Pyidevice from '../py-ios-device-client';\nimport { errors } from 'appium/driver';\n\nlet extensions = {}, commands = {};\n\nconst CONFIG_EXTENSION = 'mobileconfig';\nconst HOST_PORT_RANGE = [38200, 38299];\nconst TMPSERVER_STARTUP_TIMEOUT = 5000;\nconst Settings = {\n General: {\n type: 'accessibility id',\n value: 'General',\n },\n Profile: {\n type: '-ios predicate string',\n value: `name BEGINSWITH 'Profile'`,\n },\n About: {\n type: 'accessibility id',\n value: 'About',\n },\n Certificate_Trust_Settings: {\n type: 'accessibility id',\n value: 'Certificate Trust Settings',\n },\n};\nconst Button = {\n Install: {\n type: 'accessibility id',\n value: 'Install',\n },\n Allow: {\n type: 'accessibility id',\n value: 'Allow',\n },\n Done: {\n type: 'accessibility id',\n value: 'Done',\n },\n Return_to_Settings: {\n type: 'accessibility id',\n value: 'Return to Settings',\n },\n};\nconst Alert = {\n Install: {\n type: '-ios class chain',\n value: '**/XCUIElementTypeAny[`type == \\'XCUIElementTypeAlert\\' OR type == \\'XCUIElementTypeSheet\\'`]/**/XCUIElementTypeButton[`label == \\'Install\\'`]',\n },\n};\n\n\nasync function extractCommonName (certBuffer) {\n const tempCert = await tempDir.open({\n prefix: 'cert',\n suffix: '.cer'\n });\n try {\n await fs.writeFile(tempCert.path, certBuffer);\n const {stdout} = await exec('openssl', ['x509', '-noout', '-subject', '-in', tempCert.path]);\n return parseCommonName(stdout);\n } catch (err) {\n throw new Error(`Cannot parse common name value from the certificate. Is it valid and base64-encoded? ` +\n `Original error: ${err.message}`);\n } finally {\n await fs.rimraf(tempCert.path);\n }\n}\n\nconst LIBRE_SSL_PATTERN = /\\/CN=([^\\/]+)/; // eslint-disable-line no-useless-escape\nconst OPEN_SSL_PATTERN = /,\\sCN\\s=\\s([^,]+)/;\n\nfunction parseCommonName (stringCertificate) {\n const result = [LIBRE_SSL_PATTERN, OPEN_SSL_PATTERN].reduce((acc, r) => {\n if (acc) {\n return acc;\n }\n const match = r.exec(stringCertificate);\n return match && match[1];\n }, null);\n if (!result) {\n throw new Error(`There is no common name value in '${stringCertificate}' output`);\n }\n return result;\n}\n\n/**\n * Generates Apple's over-the-air configuration profile\n * for certificate deployment based on the given PEM certificate content.\n * Read https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/iPhoneOTAConfiguration/Introduction/Introduction.html\n * for more details on such profiles.\n *\n * @param {Buffer} certBuffer - The actual content of PEM certificate encoded into NodeJS buffer\n * @param {string} commonName - Certificate's common name\n * @returns {Object} The encoded structure of the given certificate, which is ready to be passed\n * as an argument to plist builder\n * @throws {Error} If the given certificate cannot be parsed\n */\nfunction toMobileConfig (certBuffer, commonName) {\n const getUUID = () => util.uuidV4().toUpperCase();\n const contentUuid = getUUID();\n return {\n PayloadContent: [{\n PayloadCertificateFileName: `${commonName}.cer`,\n PayloadContent: certBuffer,\n PayloadDescription: 'Adds a CA root certificate',\n PayloadDisplayName: commonName,\n PayloadIdentifier: `com.apple.security.root.${contentUuid}`,\n PayloadType: 'com.apple.security.root',\n PayloadUUID: contentUuid,\n PayloadVersion: 1\n }],\n PayloadDisplayName: commonName,\n PayloadIdentifier: `${os.hostname().split('.')[0]}.${getUUID()}`,\n PayloadRemovalDisallowed: false,\n PayloadType: 'Configuration',\n PayloadUUID: getUUID(),\n PayloadVersion: 1\n };\n}\n\nasync function clickElement (driver, locator, options = {}) {\n let element = null;\n const {\n timeout = 5000,\n skipIfInvisible = false\n } = options;\n const lookupDelay = 500;\n try {\n element = await retryInterval(timeout < lookupDelay ? 1 : timeout / lookupDelay, lookupDelay,\n () => driver.findNativeElementOrElements(locator.type, locator.value, false)\n );\n } catch (err) {\n if (skipIfInvisible) {\n return false;\n }\n throw new Error(`Cannot find ${JSON.stringify(locator)} within ${timeout}ms timeout`);\n }\n await driver.nativeClick(element);\n return true;\n}\n\nasync function installPre122Certificate (driver) {\n // Accept Safari alert\n await clickElement(driver, Button.Allow, {\n // certificate load might take some time on slow machines\n timeout: 15000,\n });\n // Wait until Preferences are opened\n await B.delay(2000);\n\n // Go through Preferences wizard\n if (!await clickElement(driver, Button.Install, {\n skipIfInvisible: true,\n })) {\n return false;\n }\n // We need to click Install button on two different tabs\n // The second one confirms the previous\n await B.delay(1500);\n await clickElement(driver, Button.Install);\n // Accept alert\n await clickElement(driver, Alert.Install);\n // Finish adding certificate\n await clickElement(driver, Button.Done);\n return true;\n}\n\nasync function trustCertificateInPreferences (driver, name) {\n await clickElement(driver, Settings.General);\n await clickElement(driver, Settings.About);\n const switchLocator = {\n type: '-ios class chain',\n value: `**/XCUIElementTypeCell[\\`label == '${name}'\\`]/**/XCUIElementTypeSwitch`,\n };\n await retry(5, async () => {\n await driver.mobileSwipe({\n element: await driver.findNativeElementOrElements('class name', 'XCUIElementTypeTable', false),\n direction: 'up'\n });\n await clickElement(driver, Settings.Certificate_Trust_Settings, {\n timeout: 500,\n });\n\n await driver.findNativeElementOrElements(switchLocator.type, switchLocator.value, false);\n });\n // Only click the switch if it is set to Off\n if (await clickElement(driver, {\n type: switchLocator.type,\n value: `${switchLocator.value}[\\`value == '0'\\`]`\n }, {\n timeout: 1000,\n skipIfInvisible: true,\n })) {\n await driver.postAcceptAlert();\n }\n}\n\nasync function installPost122Certificate (driver, name) {\n // Accept Safari alert\n await clickElement(driver, Button.Allow, {\n // certificate load might take some time on slow machines\n timeout: 15000,\n });\n // Wait for the second alert\n await B.delay(2000);\n\n await driver.postAcceptAlert();\n await driver.activateApp('com.apple.Preferences');\n await clickElement(driver, Settings.General);\n await clickElement(driver, Settings.Profile);\n // Select the target cert\n let isCertFound = false;\n for (let swipeNum = 0; swipeNum < 5; ++swipeNum) {\n if (await clickElement(driver, {\n type: '-ios class chain',\n value: `**/XCUIElementTypeCell[\\`label == '${name}'\\`]`,\n }, {\n timeout: 500,\n skipIfInvisible: true,\n })) {\n isCertFound = true;\n break;\n }\n\n await driver.mobileSwipe({\n element: await driver.findNativeElementOrElements('class name', 'XCUIElementTypeTable', false),\n direction: 'up'\n });\n }\n if (!isCertFound) {\n throw new Error(`'${name}' cannot be found in the certificates list`);\n }\n\n // Install option is only visible if the cert is not installed yet\n if (!await clickElement(driver, Button.Install, {\n skipIfInvisible: true,\n })) {\n return false;\n }\n await B.delay(1500);\n // Confirm untrusted cert install\n await clickElement(driver, Button.Install);\n // Accept alert\n await clickElement(driver, Alert.Install);\n // Finish adding certificate\n await clickElement(driver, Button.Done);\n\n return true;\n}\n\n/**\n * @typedef {Object} CertificateInstallationOptions\n *\n * @property {!string} content - Base64-encoded content of the public certificate\n * @property {?string} commonName - Common name of the certificate. If this is not set\n * then the script will try to parse it from the given certificate content.\n * @property {?boolean} isRoot [true] - This option defines where the certificate should be\n * installed to: either Trusted Root Store (`true`, the default option) or\n * the Keychain (`false`). On environments other than Xcode 11.4+ Simulator this\n * option is ignored.\n */\n\n/**\n * Installs a custom certificate onto the device.\n * Since Xcode SDK 11.4 Apple has added a dedicated simctl subcommand to quickly handle\n * certificates on Simulator over CLI.\n * On real devices or simulators before Xcode 11.4 SDK\n * Apple provides no official way to do it via the command line.\n * In such case (and also as a fallback if CLI setup fails)\n * this method tries to wrap the certificate into .mobileconfig format\n * and then deploys the wrapped file to the internal HTTP server,\n * so one can open it via mobile Safari.\n * Then the algorithm goes through the profile installation procedure by\n * clicking the necessary buttons using WebDriverAgent.\n *\n * @param {CertificateInstallationOptions} opts\n * @returns {?string} The content of the generated .mobileconfig file as\n * base64-encoded string. This config might be useful for debugging purposes.\n * If the certificate has been successfully set via CLI then nothing is returned.\n */\ncommands.mobileInstallCertificate = async function mobileInstallCertificate (opts = {}) {\n const {\n content,\n commonName,\n isRoot = true,\n } = opts;\n if (_.isEmpty(content)) {\n throw new Error('Certificate content should not be empty');\n }\n\n if (this.isSimulator()) {\n try {\n const methodName = isRoot ? 'addRootCertificate' : 'addCertificate';\n await this.opts.device.simctl[methodName](\n Buffer.from(content, 'base64').toString(), {raw: true}\n );\n return;\n } catch (e) {\n this.log.debug(e);\n this.log.info(`The certificate cannot be installed via CLI. ` +\n `Falling back to UI-based deployment`);\n }\n } else {\n const client = new Pyidevice(this.opts.udid);\n if (await client.assertExists(false)) {\n await client.installProfile({payload: Buffer.from(content, 'base64')});\n return;\n } else {\n this.log.info('pyidevice is not installed on your system. ' +\n 'Falling back to the (slow) UI-based installation');\n }\n }\n\n const tmpRoot = await tempDir.openDir();\n const tmpPort = await findAPortNotInUse(HOST_PORT_RANGE[0], HOST_PORT_RANGE[1]);\n const configName = `appium.${CONFIG_EXTENSION}`;\n const configPath = path.resolve(tmpRoot, configName);\n const tmpServer = http.createServer(async function (_, res) {\n const configFile = await fs.readFile(configPath);\n res.end(configFile);\n });\n try {\n const certBuffer = Buffer.from(content, 'base64');\n const cn = commonName || await extractCommonName(certBuffer);\n const mobileConfig = toMobileConfig(certBuffer, cn);\n try {\n await plist.updatePlistFile(configPath, mobileConfig, false, false);\n } catch (err) {\n throw new Error(`Cannot store the generated config as '${configPath}'. ` +\n `Original error: ${err.message}`);\n }\n\n try {\n const host = os.hostname();\n const certUrl = `http://${host}:${tmpPort}/${configName}`;\n await tmpServer.listen(tmpPort);\n try {\n await waitForCondition(async () => {\n try {\n return (await checkPortStatus(tmpPort, host)) === 'open';\n } catch (ign) {\n return false;\n }\n }, {\n waitMs: TMPSERVER_STARTUP_TIMEOUT,\n intervalMs: 300,\n });\n this.log.debug(`The temporary web server is running at http://${host}:${tmpPort}`);\n } catch (e) {\n throw new Error(`The temporary web server cannot be started at http://${host}:${tmpPort}.`);\n }\n if (this.isRealDevice()) {\n try {\n await this.proxyCommand('/url', 'POST', {url: certUrl});\n } catch (err) {\n if (this.isWebContext()) {\n // The command above does not always work on real devices\n await this.setUrl(certUrl);\n } else {\n throw err;\n }\n }\n } else {\n await this.opts.device.openUrl(certUrl);\n }\n\n let isCertAlreadyInstalled = false;\n if (util.compareVersions(this.opts.platformVersion, '>=', '12.2')) {\n if (await installPost122Certificate(this, cn)) {\n await clickElement(this, Settings.Profile);\n await trustCertificateInPreferences(this, cn);\n } else {\n isCertAlreadyInstalled = true;\n }\n } else {\n if (await installPre122Certificate(this)) {\n await clickElement(this, Button.Return_to_Settings);\n await trustCertificateInPreferences(this, cn);\n } else {\n isCertAlreadyInstalled = true;\n }\n }\n if (isCertAlreadyInstalled) {\n this.log.info(`It looks like the '${cn}' certificate has been already added to the CA root`);\n }\n } finally {\n if (this.opts.bundleId) {\n try {\n await this.activateApp(this.opts.bundleId);\n } catch (e) {\n this.log.warn(`Cannot restore the application '${this.opts.bundleId}'. Original error: ${e.message}`);\n }\n }\n }\n\n return (await util.toInMemoryBase64(configPath)).toString();\n } finally {\n await tmpServer.close();\n await fs.rimraf(tmpRoot);\n }\n};\n\n/**\n * Lists installed certificates for real devices only\n * if [py-ios-device](https://github.com/YueChen-C/py-ios-device) tool\n * is available on the server machine.\n *\n * @returns {Object} Returns map of certificates installed on the real device\n * @throws {Error} If attempting to list certificates for simulated device or if py-ios-device\n * is not installed\n */\ncommands.mobileListCertificates = async function mobileListCertificates () {\n if (!this.isRealDevice()) {\n throw new errors.NotImplementedError('This extension is only supported on real devices');\n }\n const client = new Pyidevice(this.opts.udid);\n if (await client.assertExists(false)) {\n return await client.listProfiles();\n }\n throw new Error('pyidevice is not installed on your system, command cannot be executed.');\n};\n\nObject.assign(extensions, commands);\nexport { commands, parseCommonName };\nexport default extensions;\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.js","names":["extensions","commands","setClipboard","content","contentType","proxyCommand","getClipboard","Object","assign"],"sources":["../../../lib/commands/clipboard.js"],"sourcesContent":["let extensions = {}, commands = {};\n\n\n/**\n * Sets the primary clipboard's content on the device under test.\n *\n * @param {!string} content - The content to be set as base64 encoded string.\n * @param {?string} contentType [plaintext] - The type of the content to set.\n * Only `plaintext`, 'image and 'url' are supported.\n */\ncommands.setClipboard = async function setClipboard (content, contentType) {\n await this.proxyCommand('/wda/setPasteboard', 'POST', {\n content,\n contentType,\n });\n};\n\n/**\n * Gets the content of the primary clipboard on the device under test.\n *\n * @param {?string} contentType [plaintext] - The type of the content to get.\n * Only `plaintext`, 'image and 'url' are supported.\n * @returns {string} The actual clipboard content encoded into base64 string.\n * An empty string is returned if the clipboard contains no data.\n */\ncommands.getClipboard = async function getClipboard (contentType) {\n return await this.proxyCommand('/wda/getPasteboard', 'POST', {\n contentType,\n });\n};\n\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":";;;;;;;;;AAAA,IAAIA,UAAU,GAAG,EAAjB;AAAA,IAAqBC,QAAQ,GAAG,EAAhC;;;AAUAA,QAAQ,CAACC,YAAT,GAAwB,eAAeA,YAAf,CAA6BC,OAA7B,EAAsCC,WAAtC,EAAmD;EACzE,MAAM,KAAKC,YAAL,CAAkB,oBAAlB,EAAwC,MAAxC,EAAgD;IACpDF,OADoD;IAEpDC;EAFoD,CAAhD,CAAN;AAID,CALD;;AAeAH,QAAQ,CAACK,YAAT,GAAwB,eAAeA,YAAf,CAA6BF,WAA7B,EAA0C;EAChE,OAAO,MAAM,KAAKC,YAAL,CAAkB,oBAAlB,EAAwC,MAAxC,EAAgD;IAC3DD;EAD2D,CAAhD,CAAb;AAGD,CAJD;;AAOAG,MAAM,CAACC,MAAP,CAAcR,UAAd,EAA0BC,QAA1B;eAEeD,U"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition.js","names":["commands","requireConditionInducerCompatibleDevice","driver","isSimulator","log","errorAndThrow","util","compareVersions","opts","platformVersion","mobileListConditionInducers","listConditionInducers","conditionInducerService","services","startInstrumentService","device","udid","ret","callChannel","INSTRUMENT_CHANNEL","CONDITION_INDUCER","selector","close","mobileEnableConditionInducer","enableConditionInducer","options","_conditionInducerService","_socketClient","destroyed","conditionID","profileID","_","isBoolean","JSON","stringify","mobileDisableConditionInducer","disableConditionInducer","warn"],"sources":["../../../lib/commands/condition.js"],"sourcesContent":["import { INSTRUMENT_CHANNEL, services } from 'appium-ios-device';\nimport _ from 'lodash';\nimport { util } from 'appium/support';\n\nconst commands = {};\n\nfunction requireConditionInducerCompatibleDevice (driver) {\n if (driver.isSimulator()) {\n driver.log.errorAndThrow('Condition inducer only works on real devices');\n }\n if (util.compareVersions(driver.opts.platformVersion, '<', '13.0')) {\n driver.log.errorAndThrow('Condition inducer is only supported since iOS 13+');\n }\n }\n\n/**\n * @typedef {Object} Profile\n * @property {String} name\n * @property {String} identifier the property is profileID used in MobileEnableConditionInducer\n * @property {String} description Configuration details\n */\n\n/**\n * We can use the returned data to determine whether the Condition is enabled and the currently enabled configuration information\n * @typedef {Object} Condition\n * @property {Array<Profile>} profiles\n * @property {String} identifier the property is conditionID used in MobileEnableConditionInducer\n * @property {boolean} profilesSorted\n * @property {boolean} isDestructive\n * @property {boolean} isInternal\n * @property {boolean} isActive `true` if this condition identifier is enabled\n * @property {String} activeProfile enabled profiles identifier\n */\n\n/**\n * Get all ConditionInducer configuration information\n * We will use conditionID and profileID in the mobileEnableConditionInducer\n * @returns {Array<Condition>}\n * [{\n * \"profiles\": [\n * {\n * \"name\": \"100% packet loss\",\n * \"identifier\": \"SlowNetwork100PctLoss\", // MobileEnableConditionInducer profileID\n * \"description\": \"Name: 100% Loss Scenario\\n\n * Downlink Bandwidth: 0 Mbps\\n\n * Downlink Latency:0 ms\\n\n * Downlink Packet Loss Ratio: 100%\\n\n * Uplink Bandwidth: 0 Mbps\\n\n * Uplink Latency: 0 ms\\n\n * Uplink Packet Loss Ratio: 100%\"\n * }\n * ],\n * \"profilesSorted\": true,\n * \"identifier\": \"SlowNetworkCondition\", // MobileEnableConditionInducer conditionID\n * \"isDestructive\": false,\n * \"isInternal\": false,\n * \"activeProfile\": \"\",\n * \"name\": \"Network Link\",\n * \"isActive\": false\n * }]\n */\ncommands.mobileListConditionInducers = async function listConditionInducers () {\n requireConditionInducerCompatibleDevice(this);\n const conditionInducerService = await services.startInstrumentService(this.opts.device.udid);\n try {\n const ret = await conditionInducerService.callChannel(INSTRUMENT_CHANNEL.CONDITION_INDUCER, 'availableConditionInducers');\n return ret.selector;\n } finally {\n conditionInducerService.close();\n }\n};\n\n/**\n * Enable condition inducer. The socket needs to remain connected during operation\n * conditionID Condition[0].identifier\n * profileID Condition[0].profiles[0].identifier\n * @param {{conditionID,profileID}} options\n * @returns {boolean} `true` if enable the condition succeeded\n * @throws {Error} If try to start another Condition and the previous Condition has not stopped, it will throw an error\n */\ncommands.mobileEnableConditionInducer = async function enableConditionInducer (options = {}) {\n requireConditionInducerCompatibleDevice(this);\n if (this._conditionInducerService && !this._conditionInducerService._socketClient.destroyed) {\n this.log.errorAndThrow(`Condition inducer has been started. A condition is already active.`);\n }\n const {\n conditionID,\n profileID,\n } = options;\n this._conditionInducerService = await services.startInstrumentService(this.opts.device.udid);\n const ret = await this._conditionInducerService.callChannel(INSTRUMENT_CHANNEL.CONDITION_INDUCER,\n 'enableConditionWithIdentifier:profileIdentifier:', conditionID, profileID);\n if (!_.isBoolean(ret.selector)) {\n this._conditionInducerService.close();\n this._conditionInducerService = null;\n this.log.errorAndThrow(`Enable condition inducer error: '${JSON.stringify(ret.selector)}'`);\n }\n return ret.selector;\n};\n\n/**\n * Disable condition inducer\n * this call upon driver deletion\n * @returns {boolean} `true` if disable the condition succeeded\n */\ncommands.mobileDisableConditionInducer = async function disableConditionInducer () {\n if (!this._conditionInducerService) {\n this.log.warn('Condition inducer server is not started');\n return false;\n }\n try {\n const ret = await this._conditionInducerService.callChannel(INSTRUMENT_CHANNEL.CONDITION_INDUCER, 'disableActiveCondition');\n if (!_.isBoolean(ret.selector)) {\n this.log.warn(`Disable condition inducer error: '${JSON.stringify(ret.selector)}'`);\n return false;\n }\n return ret.selector;\n } finally {\n if (this._conditionInducerService) {\n this._conditionInducerService.close();\n this._conditionInducerService = null;\n }\n }\n};\n\nexport {commands};\nexport default commands;\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":["NATIVE_WIN","WEBVIEW_WIN","WEBVIEW_BASE","RECENT_WEBVIEW_DETECTION_TIMEOUT_MS","commands","helpers","extensions","getCurrentContext","curContext","getContextsAndViews","useUrl","log","debug","webviews","listWebFrames","ctxs","id","view","contexts","push","toString","useNewSafari","isRealDevice","opts","safari","activateRecentWebview","timer","timing","Timer","start","spinTimeMs","spinHandles","contextId","getRecentWebviewContextId","err","message","includes","error","Error","stack","setContext","remote","cancelPageLoad","getDuration","asMilliSeconds","warn","B","delay","element","findUIElementOrElements","nativeClick","stopRemote","closeWindowBeforeDisconnecting","errorAndThrow","closeWindow","disconnect","curWebFrames","curWebCoords","setCurrentUrl","url","_currentUrl","getCurrentUrl","titleRegExp","urlRegExp","_","isRegExp","errors","InvalidArgumentError","currentUrl","filter","ctx","find","title","test","isWebContext","isWebview","getNewRemoteDebugger","socketPath","device","getWebInspectorSocket","createRemoteDebugger","bundleId","additionalBundleIds","additionalWebviewBundleIds","isSafari","includeSafari","includeSafariInWebviews","pageLoadMs","platformVersion","remoteDebugProxy","garbageCollectOnExecute","util","hasValue","safariGarbageCollect","udid","logAllCommunication","safariLogAllCommunication","logAllCommunicationHexDump","safariLogAllCommunicationHexDump","socketChunkSize","safariSocketChunkSize","webInspectorMaxFrameLength","safariWebInspectorMaxFrameLength","name","callback","skipReadyCheck","alreadyInContext","desired","current","isNativeContext","context","replace","isUndefined","getContexts","NoSuchContextError","oldContext","curWindowHandle","appIdKey","pageIdKey","map","split","parseInt","selectingNewPage","selectPage","enablePerformanceLogging","logs","performance","IOSPerformanceLog","startCapture","safariConsole","startConsole","addLogLine","bind","safariNetwork","startNetwork","connectToRemoteDebugger","on","RemoteDebugger","EVENT_PAGE_CHANGE","onPageChange","EVENT_FRAMES_DETACHED","isEmpty","pluralize","length","join","connect","webviewConnectTimeout","setConnectionKey","getWebviewPages","selectApp","undefined","webviewConnectRetries","ignoreAboutBlankUrl","pageArray","mapFn","fullContextList","mobileGetContexts","waitForWebviewMs","isNumber","isNaN","curOpt","toFixed","setWindow","noop","isErrorType","NoSuchWindowError","getWindowHandle","NotImplementedError","getWindowHandles","pageChangeNotification","JSON","stringify","isConnected","newIds","newPages","keyId","isUrlIgnored","safariIgnoreWebHostnames","ignoredHosts","b","trim","ignoredHost","hostname","URL","ign","page","isKey","info","curAppIdKey","curPageIdKey","newPage","last","needsPageLoad","contextArray","isEqual","pageLoad","currentPageId","p","catch","windowHandleCache","Object","assign"],"sources":["../../../lib/commands/context.js"],"sourcesContent":["import { createRemoteDebugger, RemoteDebugger } from 'appium-remote-debugger';\nimport { errors, isErrorType } from 'appium/driver';\nimport { util, timing } from 'appium/support';\nimport B from 'bluebird';\nimport IOSPerformanceLog from '../device-log/ios-performance-log';\nimport _ from 'lodash';\n\nconst NATIVE_WIN = 'NATIVE_APP';\nconst WEBVIEW_WIN = 'WEBVIEW';\nconst WEBVIEW_BASE = `${WEBVIEW_WIN}_`;\nconst RECENT_WEBVIEW_DETECTION_TIMEOUT_MS = 90000;\n\nconst commands = {}, helpers = {}, extensions = {};\n\n\ncommands.getCurrentContext = async function getCurrentContext () { // eslint-disable-line require-await\n if (this.curContext && this.curContext !== NATIVE_WIN) {\n return `${WEBVIEW_BASE}${this.curContext}`;\n }\n return NATIVE_WIN;\n};\n\nextensions.getContextsAndViews = async function getContextsAndViews (useUrl = true) {\n this.log.debug('Retrieving contexts and views');\n let webviews = await this.listWebFrames(useUrl);\n\n let ctxs = [{id: NATIVE_WIN, view: {}}];\n this.contexts = [NATIVE_WIN];\n for (let view of webviews) {\n ctxs.push({id: `${WEBVIEW_BASE}${view.id}`, view});\n this.contexts.push(view.id.toString());\n }\n return ctxs;\n};\n\n// Right now we don't necessarily wait for webview\n// and frame to load, which leads to race conditions and flakiness,\n// let's see if we can transition to something better\nextensions.useNewSafari = function useNewSafari () {\n return !this.isRealDevice() && this.opts.safari;\n};\n\nextensions.activateRecentWebview = async function activateRecentWebview () {\n this.log.debug('Activating a recent webview');\n const timer = new timing.Timer().start();\n const spinTimeMs = 500;\n const spinHandles = async () => {\n let contextId;\n try {\n contextId = await this.getRecentWebviewContextId(/.*/, /.*/);\n } catch (err) {\n if (!err.message.includes('Could not connect to a valid app after')) {\n const error = new Error(`Could not navigate to webview! Err: ${err.message}`);\n error.stack += `\\nCaused by: ${err.stack}`;\n throw error;\n }\n this.log.debug('Could not navigate to webview. Retrying if possible.');\n }\n if (contextId) {\n this.log.debug(`Picking webview '${contextId}'`);\n await this.setContext(contextId);\n await this.remote.cancelPageLoad();\n return;\n }\n\n // no webview was found\n if (timer.getDuration().asMilliSeconds >= RECENT_WEBVIEW_DETECTION_TIMEOUT_MS) {\n // too slow, get out\n throw new Error('Could not navigate to webview; there are none!');\n }\n\n this.log.warn('Could not find any webviews yet, refreshing/retrying');\n if (this.isRealDevice() || !this.opts.safari) {\n // on a real device, when not using Safari, we just want to try again\n await B.delay(spinTimeMs);\n return await spinHandles();\n }\n\n // find the reload button and tap it, if possible\n let element;\n try {\n this.log.debug('Finding and tapping reload button');\n element = await this.findUIElementOrElements('accessibility id', 'ReloadButton', '', false);\n await this.nativeClick(element);\n } catch (err) {\n this.log.warn(`Error finding and tapping reload button: ${err.message}`);\n this.log.warn('Retrying.');\n await B.delay(spinTimeMs);\n }\n\n // try it all again\n return await spinHandles();\n };\n await spinHandles();\n};\n\nhelpers.stopRemote = async function stopRemote (closeWindowBeforeDisconnecting = false) {\n if (!this.remote) {\n this.log.errorAndThrow('Tried to leave a web frame but were not in one');\n }\n\n if (closeWindowBeforeDisconnecting) {\n await this.closeWindow();\n }\n await this.remote.disconnect();\n this.curContext = null;\n this.curWebFrames = [];\n this.curWebCoords = null;\n this.remote = null;\n};\n\nhelpers.setCurrentUrl = function setCurrentUrl (url) {\n this._currentUrl = url;\n};\n\nhelpers.getCurrentUrl = function getCurrentUrl () {\n return this._currentUrl;\n};\n\nextensions.getRecentWebviewContextId = async function getRecentWebviewContextId (titleRegExp, urlRegExp) {\n if (!_.isRegExp(titleRegExp) && !_.isRegExp(urlRegExp)) {\n throw new errors.InvalidArgumentError(\n 'A regular expression for either web view title or url must be provided'\n );\n }\n\n const currentUrl = this.getCurrentUrl();\n const contexts = _.filter(await this.getContextsAndViews(false), 'view');\n // first try to match by current url\n if (currentUrl) {\n const ctx = contexts.find(({view}) => (view.url || '') === currentUrl);\n if (ctx) {\n return ctx.id;\n }\n }\n // if not, try to match by regular expression\n return (contexts.find(({view}) =>\n view.title && titleRegExp?.test(view.title) || view.url && urlRegExp?.test(view.url)\n ))?.id;\n};\n\nextensions.isWebContext = function isWebContext () {\n return !!this.curContext && this.curContext !== NATIVE_WIN;\n};\n\nextensions.isWebview = function isWebview () {\n return this.isWebContext();\n};\n\nextensions.getNewRemoteDebugger = async function getNewRemoteDebugger () {\n let socketPath;\n if (!this.isRealDevice()) {\n socketPath = await this.opts.device.getWebInspectorSocket();\n }\n return createRemoteDebugger({\n bundleId: this.opts.bundleId,\n additionalBundleIds: this.opts.additionalWebviewBundleIds,\n isSafari: this.isSafari(),\n includeSafari: this.opts.includeSafariInWebviews,\n useNewSafari: this.useNewSafari(),\n pageLoadMs: this.pageLoadMs,\n platformVersion: this.opts.platformVersion,\n socketPath,\n remoteDebugProxy: this.opts.remoteDebugProxy,\n garbageCollectOnExecute: util.hasValue(this.opts.safariGarbageCollect)\n ? !!this.opts.safariGarbageCollect\n : false,\n udid: this.opts.udid,\n logAllCommunication: this.opts.safariLogAllCommunication,\n logAllCommunicationHexDump: this.opts.safariLogAllCommunicationHexDump,\n socketChunkSize: this.opts.safariSocketChunkSize,\n webInspectorMaxFrameLength: this.opts.safariWebInspectorMaxFrameLength\n }, this.isRealDevice());\n};\n\n/**\n * Set context\n *\n * @param {?string} name - The name of context to set. It could be 'null' as NATIVE_WIN.\n * @param {callback} callback The callback. (It is not called in this method)\n * @param {boolean} skipReadyCheck - Whether it waits for the new context is ready\n */\ncommands.setContext = async function setContext (name, callback, skipReadyCheck) {\n function alreadyInContext (desired, current) {\n return (desired === current ||\n (desired === null && current === NATIVE_WIN) ||\n (desired === NATIVE_WIN && current === null));\n }\n function isNativeContext (context) {\n return context === NATIVE_WIN || context === null;\n }\n\n // allow the full context list to be passed in\n if (name && name.id) {\n name = name.id;\n }\n\n this.log.debug(`Attempting to set context to '${name || NATIVE_WIN}' from '${this.curContext ? this.curContext : NATIVE_WIN}'`);\n\n if (alreadyInContext(name, this.curContext) || alreadyInContext(_.replace(name, WEBVIEW_BASE, ''), this.curContext)) {\n // already in the named context, no need to do anything\n this.log.debug(`Already in '${name || NATIVE_WIN}' context. Doing nothing.`);\n return;\n }\n if (isNativeContext(name)) {\n // switching into the native context\n this.curContext = null;\n return;\n }\n\n // switching into a webview context\n\n // if contexts have not already been retrieved, get them\n if (_.isUndefined(this.contexts)) {\n await this.getContexts();\n }\n\n let contextId = _.replace(name, WEBVIEW_BASE, '');\n if (contextId === '') {\n // allow user to pass in \"WEBVIEW\" without an index\n // the second context will be the first webview as\n // the first is always NATIVE_APP\n contextId = this.contexts[1];\n }\n if (!_.includes(this.contexts, contextId)) {\n throw new errors.NoSuchContextError();\n }\n\n const oldContext = this.curContext;\n this.curContext = this.curWindowHandle = contextId;\n\n // `contextId` will be in the form of `appId.pageId` in this case\n const [appIdKey, pageIdKey] = _.map(contextId.split('.'), (id) => parseInt(id, 10));\n try {\n this.selectingNewPage = true;\n await this.remote.selectPage(appIdKey, pageIdKey, skipReadyCheck);\n } catch (err) {\n this.curContext = this.curWindowHandle = oldContext;\n throw err;\n } finally {\n this.selectingNewPage = false;\n }\n\n // attempt to start performance logging, if requested\n if (this.opts.enablePerformanceLogging && this.remote) {\n this.log.debug(`Starting performance log on '${this.curContext}'`);\n this.logs.performance = new IOSPerformanceLog(this.remote);\n await this.logs.performance.startCapture();\n }\n\n // start safari logging if the logs handlers are active\n if (name && name !== NATIVE_WIN && this.logs) {\n if (this.logs.safariConsole) {\n await this.remote.startConsole(this.logs.safariConsole.addLogLine.bind(this.logs.safariConsole));\n }\n if (this.logs.safariNetwork) {\n await this.remote.startNetwork(this.logs.safariNetwork.addLogLine.bind(this.logs.safariNetwork));\n }\n }\n};\n\nextensions.connectToRemoteDebugger = async function connectToRemoteDebugger () {\n this.remote = await this.getNewRemoteDebugger();\n\n this.remote.on(RemoteDebugger.EVENT_PAGE_CHANGE, this.onPageChange.bind(this));\n this.remote.on(RemoteDebugger.EVENT_FRAMES_DETACHED, () => {\n if (!_.isEmpty(this.curWebFrames)) {\n this.log.debug(`Clearing ${util.pluralize('frame', this.curWebFrames.length, true)}: ${this.curWebFrames.join(', ')}`);\n }\n this.curWebFrames = [];\n });\n\n await this.remote.connect(this.opts.webviewConnectTimeout);\n};\n\nextensions.listWebFrames = async function listWebFrames (useUrl = true) {\n useUrl = useUrl && !this.isRealDevice() && !!this.getCurrentUrl();\n this.log.debug(`Selecting by url: ${useUrl}${useUrl ? ` (expected url: '${this.getCurrentUrl()}')` : ''}`);\n\n if (!this.remote) {\n await this.connectToRemoteDebugger();\n if (!this.remote.appIdKey) {\n await this.remote.setConnectionKey();\n }\n }\n const getWebviewPages = async () => {\n try {\n return await this.remote.selectApp(\n useUrl ? this.getCurrentUrl() : undefined,\n this.opts.webviewConnectRetries,\n this.opts.ignoreAboutBlankUrl\n );\n } catch (err) {\n this.log.debug(`No available web pages: ${err.message}`);\n return [];\n }\n };\n const pageArray = await getWebviewPages();\n if (_.isEmpty(pageArray)) {\n // we have no web frames, but continue anyway\n this.log.debug('No web frames found.');\n }\n return pageArray;\n};\n\ncommands.getContexts = async function getContexts () {\n this.log.debug('Getting list of available contexts');\n const contexts = await this.getContextsAndViews(false);\n\n const mapFn = this.opts.fullContextList\n ? function (context) {\n return {\n id: context.id.toString(),\n title: context.view.title,\n url: context.view.url,\n bundleId: context.view.bundleId,\n };\n }\n : (context) => context.id.toString();\n return contexts.map(mapFn);\n};\n\n/**\n * @typedef {Object} Context\n *\n * @property {string} id - The identifier of the context. The native context\n * will be 'NATIVE_APP' and the webviews will be\n * 'WEBVIEW_xxx'\n * @property {?string} title - The title associated with the webview content\n * @property {?string} url - The url associated with the webview content\n */\n\n/**\n * Get the contexts available, with information about the url and title of each\n * webview\n *\n * @param {Object} opts - Options set, which can include `waitForWebviewMs` to\n * specify the period to poll for available webviews\n * @returns {Array} List of Context objects\n */\nextensions.mobileGetContexts = async function mobileGetContexts (opts = {}) {\n let {\n waitForWebviewMs = 0,\n } = opts;\n\n // make sure it is a number, so the duration check works properly\n if (!_.isNumber(waitForWebviewMs)) {\n waitForWebviewMs = parseInt(waitForWebviewMs, 10);\n if (isNaN(waitForWebviewMs)) {\n waitForWebviewMs = 0;\n }\n }\n\n const curOpt = this.opts.fullContextList;\n this.opts.fullContextList = true;\n\n const timer = new timing.Timer().start();\n try {\n let contexts;\n do {\n contexts = await this.getContexts();\n\n if (contexts.length >= 2) {\n this.log.debug(`Found webview context after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n return contexts;\n }\n this.log.debug(`No webviews found in ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n } while (timer.getDuration().asMilliSeconds < waitForWebviewMs);\n return contexts;\n } finally {\n // reset the option so there are no side effects\n this.opts.fullContextList = curOpt;\n }\n};\n\ncommands.setWindow = async function setWindow (name, skipReadyCheck) {\n try {\n await this.setContext(name, _.noop, skipReadyCheck);\n } catch (err) {\n // translate the error in terms of windows\n throw isErrorType(err, errors.NoSuchContextError)\n ? new errors.NoSuchWindowError()\n : err;\n }\n};\n\ncommands.getWindowHandle = async function getWindowHandle () { // eslint-disable-line require-await\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n this.log.debug(`Getting current window handle`);\n return this.curContext;\n};\n\ncommands.getWindowHandles = async function getWindowHandles () {\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n this.log.debug('Getting list of available window handles');\n const contexts = await this.getContextsAndViews(false);\n return contexts\n // get rid of the native app context\n .filter((context) => context.id !== NATIVE_WIN)\n // get the `app.id` format expected\n .map((context) => context.view.id.toString());\n};\n\nextensions.onPageChange = async function onPageChange (pageChangeNotification) {\n this.log.debug(`Remote debugger notified us of a new page listing: ${JSON.stringify(pageChangeNotification)}`);\n if (this.selectingNewPage) {\n this.log.debug('We are in the middle of selecting a page, ignoring');\n return;\n }\n if (!this.remote || !this.remote.isConnected) {\n this.log.debug('We have not yet connected, ignoring');\n return;\n }\n\n const {appIdKey, pageArray} = pageChangeNotification;\n\n let newIds = [];\n let newPages = [];\n let keyId = null;\n\n // Checks if a URL is blacklisted in the 'safariIgnoreWebHostnames' capability\n function isUrlIgnored (url, safariIgnoreWebHostnames) {\n const ignoredHosts = (safariIgnoreWebHostnames || '')\n .split(',')\n .map((b) => b.trim())\n .filter((b) => !_.isEmpty(b));\n for (const ignoredHost of ignoredHosts) {\n if (ignoredHost === 'about:blank' && url === 'about:blank') {\n return true;\n } else {\n try {\n const hostname = new URL(url).hostname;\n if (hostname === ignoredHost) {\n return true;\n }\n } catch (ign) {\n // do nothing if invalid URL\n }\n }\n }\n return false;\n }\n\n for (const page of pageArray) {\n const id = page.id.toString();\n newIds.push(id);\n if (page.isKey) {\n keyId = id;\n }\n const contextId = `${appIdKey}.${id}`;\n\n // add if this is a new page\n if (!_.includes(this.contexts, contextId)) {\n if (isUrlIgnored(page.url, this.opts.safariIgnoreWebHostnames)) {\n this.log.info(`Not tracking '${page.url}' page because it is blacklisted. ` +\n `'safariIgnoreWebHostnames'=${this.opts.safariIgnoreWebHostnames}`);\n } else {\n newPages.push(id);\n this.contexts.push(contextId);\n }\n }\n }\n\n if (!keyId) {\n // if there is no key id, pull the first id from the page array and use that\n // as a stand in\n this.log.debug('No key id found. Choosing first id from page array');\n keyId = newIds[0] || null;\n }\n\n if (!util.hasValue(this.curContext)) {\n this.log.debug('We do not appear to have window set yet, ignoring');\n return;\n }\n\n const [curAppIdKey, curPageIdKey] = this.curContext.split('.');\n\n if (curAppIdKey !== appIdKey) {\n this.log.debug('Page change not referring to currently selected app, ignoring.');\n return;\n }\n\n let newPage = null;\n if (newPages.length) {\n newPage = _.last(newPages);\n this.log.debug(`We have new pages, selecting page '${newPage}'`);\n } else if (!_.includes(newIds, curPageIdKey)) {\n this.log.debug('New page listing from remote debugger does not contain ' +\n 'current window; assuming it is closed');\n if (!util.hasValue(keyId)) {\n this.log.error('Do not have our current window anymore, and there ' +\n 'are not any more to load! Doing nothing...');\n this.setCurrentUrl(undefined);\n return;\n }\n\n this.log.debug(`Debugger already selected page '${keyId}', ` +\n `confirming that choice.`);\n this.curContext = `${appIdKey}.${keyId}`;\n newPage = keyId;\n } else {\n // at this point, there are no new pages, and the current page still exists\n this.log.debug('Checking if page needs to load');\n // If a window navigates to an anchor it doesn't always fire a page\n // callback event. Let's check if we wound up in such a situation.\n const needsPageLoad = (() => {\n // need to map the page ids to context ids\n const contextArray = _.map(pageArray, (page) => `${appIdKey}.${page.id}`);\n // check if the current context exists in both our recorded contexts,\n // and the page array\n return !_.isEqual(_.find(this.contexts, this.curContext), _.find(contextArray, this.curContext));\n })();\n\n if (needsPageLoad) {\n this.log.debug('Page load needed. Loading...');\n await this.remote.pageLoad();\n }\n\n this.log.debug('New page listing is same as old, doing nothing');\n }\n\n // make sure that the page listing isn't indicating a redirect\n if (util.hasValue(this.curContext)) {\n let currentPageId = parseInt(_.last(this.curContext.split('.')), 10);\n let page = _.find(pageArray, (p) => parseInt(p.id, 10) === currentPageId);\n if (page && page.url !== this.getCurrentUrl()) {\n this.log.debug(`Redirected from '${this.getCurrentUrl()}' to '${page.url}'`);\n this.setCurrentUrl(page.url);\n }\n }\n\n if (util.hasValue(newPage)) {\n this.selectingNewPage = true;\n const oldContext = this.curContext;\n this.curContext = `${appIdKey}.${newPage}`;\n // do not wait, as this can take a long time, and the response is not necessary\n // eslint-disable-next-line promise/prefer-await-to-callbacks, promise/prefer-await-to-then\n this.remote.selectPage(appIdKey, parseInt(newPage, 10)).catch((err) => {\n this.log.warn(`Failed to select page: ${err.message}`);\n this.curContext = oldContext;\n });\n this.selectingNewPage = false;\n }\n this.windowHandleCache = pageArray;\n};\n\n\nObject.assign(commands, extensions, helpers);\nexport default commands;\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.js","names":["commands","helpers","extensions","getCookies","isWebContext","errors","NotImplementedError","cookies","remote","decodedCookieValues","map","cookie","decodeURI","value","error","log","debug","name","warn","undefined","_","zip","filter","isUndefined","Object","assign","deleteCookie","cookieName","find","_deleteCookie","deleteCookies","url","secure","domain","path"],"sources":["../../../lib/commands/cookies.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.getCookies = async function getCookies () {\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n\n // get the cookies from the remote debugger, or an empty object\n const cookies = await this.remote.getCookies() || {cookies: []};\n\n // the value is URI encoded, so decode it safely\n const decodedCookieValues = cookies.cookies.map((cookie) => {\n try {\n return decodeURI(cookie.value);\n } catch (error) {\n this.log.debug(`Cookie ${cookie.name} was not decoded successfully. Cookie value: ${cookie.value}`);\n this.log.warn(error);\n return undefined;\n }\n });\n\n // zip cookes with decoded value, removing undefined cookie values\n return _.zip(cookies.cookies, decodedCookieValues)\n .filter(([, value]) => !_.isUndefined(value))\n .map(([cookie, value]) => Object.assign({}, cookie, {value}));\n};\n\ncommands.deleteCookie = async function deleteCookie (cookieName) {\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n\n const cookies = await this.getCookies();\n const cookie = cookies.find((cookie) => cookie.name === cookieName);\n if (!cookie) {\n this.log.debug(`Cookie '${cookieName}' not found. Ignoring.`);\n return true;\n }\n\n await this._deleteCookie(cookie);\n return true;\n};\n\ncommands.deleteCookies = async function deleteCookies () {\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n\n const cookies = await this.getCookies();\n for (const cookie of cookies) {\n await this._deleteCookie(cookie);\n }\n return true;\n};\n\nhelpers._deleteCookie = async function _deleteCookie (cookie) {\n const url = `http${cookie.secure ? 's' : ''}://${cookie.domain}${cookie.path}`;\n return await this.remote.deleteCookie(cookie.name, url);\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAGA,IAAIA,QAAQ,GAAG,EAAf;AAAA,IAAmBC,OAAO,GAAG,EAA7B;AAAA,IAAiCC,UAAU,GAAG,EAA9C;;;;AAEAF,QAAQ,CAACG,UAAT,GAAsB,eAAeA,UAAf,GAA6B;EACjD,IAAI,CAAC,KAAKC,YAAL,EAAL,EAA0B;IACxB,MAAM,IAAIC,cAAA,CAAOC,mBAAX,EAAN;EACD;;EAGD,MAAMC,OAAO,GAAG,OAAM,KAAKC,MAAL,CAAYL,UAAZ,EAAN,KAAkC;IAACI,OAAO,EAAE;EAAV,CAAlD;EAGA,MAAME,mBAAmB,GAAGF,OAAO,CAACA,OAAR,CAAgBG,GAAhB,CAAqBC,MAAD,IAAY;IAC1D,IAAI;MACF,OAAOC,SAAS,CAACD,MAAM,CAACE,KAAR,CAAhB;IACD,CAFD,CAEE,OAAOC,KAAP,EAAc;MACd,KAAKC,GAAL,CAASC,KAAT,CAAgB,UAASL,MAAM,CAACM,IAAK,gDAA+CN,MAAM,CAACE,KAAM,EAAjG;MACA,KAAKE,GAAL,CAASG,IAAT,CAAcJ,KAAd;MACA,OAAOK,SAAP;IACD;EACF,CAR2B,CAA5B;EAWA,OAAOC,eAAA,CAAEC,GAAF,CAAMd,OAAO,CAACA,OAAd,EAAuBE,mBAAvB,EACJa,MADI,CACG,CAAC,GAAGT,KAAH,CAAD,KAAe,CAACO,eAAA,CAAEG,WAAF,CAAcV,KAAd,CADnB,EAEJH,GAFI,CAEA,CAAC,CAACC,MAAD,EAASE,KAAT,CAAD,KAAqBW,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBd,MAAlB,EAA0B;IAACE;EAAD,CAA1B,CAFrB,CAAP;AAGD,CAvBD;;AAyBAb,QAAQ,CAAC0B,YAAT,GAAwB,eAAeA,YAAf,CAA6BC,UAA7B,EAAyC;EAC/D,IAAI,CAAC,KAAKvB,YAAL,EAAL,EAA0B;IACxB,MAAM,IAAIC,cAAA,CAAOC,mBAAX,EAAN;EACD;;EAED,MAAMC,OAAO,GAAG,MAAM,KAAKJ,UAAL,EAAtB;EACA,MAAMQ,MAAM,GAAGJ,OAAO,CAACqB,IAAR,CAAcjB,MAAD,IAAYA,MAAM,CAACM,IAAP,KAAgBU,UAAzC,CAAf;;EACA,IAAI,CAAChB,MAAL,EAAa;IACX,KAAKI,GAAL,CAASC,KAAT,CAAgB,WAAUW,UAAW,wBAArC;IACA,OAAO,IAAP;EACD;;EAED,MAAM,KAAKE,aAAL,CAAmBlB,MAAnB,CAAN;EACA,OAAO,IAAP;AACD,CAdD;;AAgBAX,QAAQ,CAAC8B,aAAT,GAAyB,eAAeA,aAAf,GAAgC;EACvD,IAAI,CAAC,KAAK1B,YAAL,EAAL,EAA0B;IACxB,MAAM,IAAIC,cAAA,CAAOC,mBAAX,EAAN;EACD;;EAED,MAAMC,OAAO,GAAG,MAAM,KAAKJ,UAAL,EAAtB;;EACA,KAAK,MAAMQ,MAAX,IAAqBJ,OAArB,EAA8B;IAC5B,MAAM,KAAKsB,aAAL,CAAmBlB,MAAnB,CAAN;EACD;;EACD,OAAO,IAAP;AACD,CAVD;;AAYAV,OAAO,CAAC4B,aAAR,GAAwB,eAAeA,aAAf,CAA8BlB,MAA9B,EAAsC;EAC5D,MAAMoB,GAAG,GAAI,OAAMpB,MAAM,CAACqB,MAAP,GAAgB,GAAhB,GAAsB,EAAG,MAAKrB,MAAM,CAACsB,MAAO,GAAEtB,MAAM,CAACuB,IAAK,EAA7E;EACA,OAAO,MAAM,KAAK1B,MAAL,CAAYkB,YAAZ,CAAyBf,MAAM,CAACM,IAAhC,EAAsCc,GAAtC,CAAb;AACD,CAHD;;AAKAP,MAAM,CAACC,MAAP,CAAcvB,UAAd,EAA0BF,QAA1B,EAAoCC,OAApC;eAEeC,U"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deviceInfo.js","names":["extensions","commands","mobileGetDeviceInfo","infoByWda","proxyCommand","isRealDevice","lockdownInfo","utilities","getDeviceInfo","opts","device","udid","Object","assign"],"sources":["../../../lib/commands/deviceInfo.js"],"sourcesContent":["import { utilities } from 'appium-ios-device';\n\nconst extensions = {}, commands = {};\n\n/**\n * Returns device info.\n *\n * @returns {Object} The response of `/wda/device/info'`\n * @throws {Error} if an error raised by command\n */\ncommands.mobileGetDeviceInfo = async function mobileGetDeviceInfo () {\n const infoByWda = await this.proxyCommand('/wda/device/info', 'GET');\n\n if (this.isRealDevice()) {\n const lockdownInfo = await utilities.getDeviceInfo(this.opts.device.udid);\n return {...infoByWda, ...{lockdownInfo}};\n }\n\n return infoByWda;\n};\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":";;;;;;;;;AAAA;;AAEA,MAAMA,UAAU,GAAG,EAAnB;AAAA,MAAuBC,QAAQ,GAAG,EAAlC;;;AAQAA,QAAQ,CAACC,mBAAT,GAA+B,eAAeA,mBAAf,GAAsC;EACnE,MAAMC,SAAS,GAAG,MAAM,KAAKC,YAAL,CAAkB,kBAAlB,EAAsC,KAAtC,CAAxB;;EAEA,IAAI,KAAKC,YAAL,EAAJ,EAAyB;IACvB,MAAMC,YAAY,GAAG,MAAMC,0BAAA,CAAUC,aAAV,CAAwB,KAAKC,IAAL,CAAUC,MAAV,CAAiBC,IAAzC,CAA3B;IACA,OAAO,EAAC,GAAGR,SAAJ;MAAe,GAAG;QAACG;MAAD;IAAlB,CAAP;EACD;;EAED,OAAOH,SAAP;AACD,CATD;;AAWAS,MAAM,CAACC,MAAP,CAAcb,UAAd,EAA0BC,QAA1B;eAEeD,U"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.js","names":["commands","extensions","elementDisplayed","el","util","unwrapElement","isWebContext","atomsElement","getAtomsElement","executeAtom","proxyCommand","elementEnabled","elementSelected","getName","script","getNativeAttribute","attribute","getContentSize","value","includes","_","isNull","isString","JSON","stringify","getAttribute","getProperty","property","getText","getElementRect","x","y","getLocation","width","height","getSize","getNativeRect","loc","opts","absoluteWebLocations","xOffset","yOffset","execute","rect","getLocationInView","prepareInputValue","inp","isArray","isFinite","some","f","Error","join","map","k","setValueImmediate","log","info","setValue","keys","clear","errors","NotYetImplementedError","type","locator","contentHeight","children","findElOrEls","length","head","firstRect","lastRect","last","elsInRow","initialRects","i","push","spaceBetweenEls","numRows","Math","ceil","size","origin","top","left","scrollableOffset","isKeyboardShown","findNativeElementOrElements","ign","Object","assign"],"sources":["../../../lib/commands/element.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\nimport { util } from 'appium/support';\n\n\nconst commands = {}, extensions = {};\n\ncommands.elementDisplayed = async function elementDisplayed (el) {\n el = util.unwrapElement(el);\n if (this.isWebContext()) {\n const atomsElement = this.getAtomsElement(el);\n return await this.executeAtom('is_displayed', [atomsElement]);\n }\n\n return await this.proxyCommand(`/element/${el}/displayed`, 'GET');\n};\n\ncommands.elementEnabled = async function elementEnabled (el) {\n el = util.unwrapElement(el);\n if (this.isWebContext()) {\n const atomsElement = this.getAtomsElement(el);\n return await this.executeAtom('is_enabled', [atomsElement]);\n }\n\n return await this.proxyCommand(`/element/${el}/enabled`, 'GET');\n};\n\ncommands.elementSelected = async function elementSelected (el) {\n el = util.unwrapElement(el);\n if (this.isWebContext()) {\n const atomsElement = this.getAtomsElement(el);\n return await this.executeAtom('is_selected', [atomsElement]);\n }\n\n return await this.proxyCommand(`/element/${el}/selected`, 'GET');\n};\n\ncommands.getName = async function getName (el) {\n el = util.unwrapElement(el);\n if (this.isWebContext()) {\n const atomsElement = this.getAtomsElement(el);\n const script = 'return arguments[0].tagName.toLowerCase()';\n return await this.executeAtom('execute_script', [script, [atomsElement]]);\n }\n\n return await this.proxyCommand(`/element/${el}/name`, 'GET');\n};\n\ncommands.getNativeAttribute = async function getNativeAttribute (attribute, el) {\n if (attribute === 'contentSize') {\n // don't proxy requests for the content size of a scrollable element\n return await this.getContentSize(el);\n }\n\n el = util.unwrapElement(el);\n\n // otherwise let WDA handle attribute requests\n let value = await this.proxyCommand(`/element/${el}/attribute/${attribute}`, 'GET');\n // Transform the result for the case when WDA returns an integer representation for a boolean value\n if ([0, 1].includes(value)) {\n value = !!value;\n }\n // The returned value must be of type string according to https://www.w3.org/TR/webdriver/#get-element-attribute\n return (_.isNull(value) || _.isString(value)) ? value : JSON.stringify(value);\n};\n\ncommands.getAttribute = async function getAttribute (attribute, el) {\n el = util.unwrapElement(el);\n if (!this.isWebContext()) {\n return await this.getNativeAttribute(attribute, el);\n }\n const atomsElement = this.getAtomsElement(el);\n return await this.executeAtom('get_attribute_value', [atomsElement, attribute]);\n};\n\ncommands.getProperty = async function getProperty (property, el) {\n el = util.unwrapElement(el);\n if (!this.isWebContext()) {\n return await this.getNativeAttribute(property, el);\n }\n const atomsElement = this.getAtomsElement(el);\n return await this.executeAtom('get_attribute_value', [atomsElement, property]);\n};\n\ncommands.getText = async function getText (el) {\n el = util.unwrapElement(el);\n if (!this.isWebContext()) {\n return await this.proxyCommand(`/element/${el}/text`, 'GET');\n }\n let atomsElement = this.getAtomsElement(el);\n return await this.executeAtom('get_text', [atomsElement]);\n};\n\ncommands.getElementRect = async function getElementRect (el) {\n if (this.isWebContext()) {\n // Mobile safari doesn't support rect\n const {x, y} = await this.getLocation(el);\n const {width, height} = await this.getSize(el);\n return {x, y, width, height};\n }\n\n el = util.unwrapElement(el);\n return await this.getNativeRect(el);\n};\n\nextensions.getNativeRect = async function getNativeRect (el) {\n return await this.proxyCommand(`/element/${el}/rect`, 'GET');\n};\n\ncommands.getLocation = async function getLocation (el) {\n el = util.unwrapElement(el);\n if (this.isWebContext()) {\n const atomsElement = await this.getAtomsElement(el);\n let loc = await this.executeAtom('get_top_left_coordinates', [atomsElement]);\n if (this.opts.absoluteWebLocations) {\n const script = 'return [' +\n 'Math.max(window.pageXOffset,document.documentElement.scrollLeft,document.body.scrollLeft),' +\n 'Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop)];';\n const [xOffset, yOffset] = await this.execute(script);\n loc.x += xOffset;\n loc.y += yOffset;\n }\n return loc;\n }\n\n const rect = await this.getElementRect(el);\n return {x: rect.x, y: rect.y};\n};\n\ncommands.getLocationInView = async function getLocationInView (el) {\n return await this.getLocation(el);\n};\n\ncommands.getSize = async function getSize (el) {\n el = util.unwrapElement(el);\n if (this.isWebContext()) {\n return await this.executeAtom('get_size', [this.getAtomsElement(el)]);\n }\n\n const rect = await this.getElementRect(el);\n return {width: rect.width, height: rect.height};\n};\n\n/**\n * Prepares the input value to be passed as an argument to WDA.\n *\n * @param {string|Array<string>|number} inp The actual text to type.\n * Acceptable values of `inp`:\n * ['some text']\n * ['s', 'o', 'm', 'e', ' ', 't', 'e', 'x', 't']\n * 'some text'\n * 1234\n * @throws {Error} If the value is not acceptable for input\n * @returns {Array<string>} The preprocessed value\n */\nfunction prepareInputValue (inp) {\n if (![_.isArray, _.isString, _.isFinite].some((f) => f(inp))) {\n throw new Error(`Only strings, numbers and arrays are supported as input arguments. ` +\n `Received: ${JSON.stringify(inp)}`);\n }\n\n // make it into a string, so then we assure\n // the array items are single characters\n if (_.isArray(inp)) {\n inp = inp.join('');\n } else if (_.isFinite(inp)) {\n inp = `${inp}`;\n }\n // The `split` method must not be used on the string\n // to properly handle all Unicode code points\n return [...inp].map((k) => {\n if (['\\uE006', '\\uE007'].includes(k)) { // RETURN or ENTER\n return '\\n';\n }\n if (['\\uE003', '\\ue017'].includes(k)) { // BACKSPACE or DELETE\n return '\\b';\n }\n return k;\n });\n}\n\ncommands.setValueImmediate = async function setValueImmediate (value, el) {\n // WDA does not provide no way to set the value directly\n this.log.info('There is currently no way to bypass typing using XCUITest. Setting value through keyboard');\n await this.setValue(value, el);\n};\n\ncommands.setValue = async function setValue (value, el) {\n el = util.unwrapElement(el);\n if (!this.isWebContext()) {\n await this.proxyCommand(`/element/${el}/value`, 'POST', {\n value: prepareInputValue(value),\n });\n return;\n }\n\n const atomsElement = this.getAtomsElement(el);\n await this.executeAtom('click', [atomsElement]);\n await this.executeAtom('type', [atomsElement, value]);\n};\n\ncommands.keys = async function keys (value) {\n await this.proxyCommand('/wda/keys', 'POST', {\n value: prepareInputValue(value),\n });\n};\n\ncommands.clear = async function clear (el) {\n el = util.unwrapElement(el);\n if (this.isWebContext()) {\n const atomsElement = this.getAtomsElement(el);\n await this.executeAtom('clear', [atomsElement]);\n return;\n }\n await this.proxyCommand(`/element/${el}/clear`, 'POST');\n};\n\ncommands.getContentSize = async function getContentSize (el) {\n if (this.isWebContext()) {\n throw new errors.NotYetImplementedError('Support for getContentSize for web context is not yet implemented. Please contact an Appium dev');\n }\n\n const type = await this.getAttribute('type', el);\n\n if (type !== 'XCUIElementTypeTable' &&\n type !== 'XCUIElementTypeCollectionView') {\n throw new Error(`Can't get content size for type '${type}', only for ` +\n `tables and collection views`);\n }\n let locator = '*';\n if (type === 'XCUIElementTypeTable') {\n // only find table cells, not just any children\n locator = 'XCUIElementTypeCell';\n }\n\n let contentHeight = 0;\n const children = await this.findElOrEls(`class chain`, locator, true, el);\n if (children.length === 1) {\n // if we know there's only one element, we can optimize to make just one\n // call to WDA\n const rect = await this.getElementRect(_.head(children));\n contentHeight = rect.height;\n } else if (children.length) {\n // otherwise if we have multiple elements, logic differs based on element\n // type\n switch (type) {\n case 'XCUIElementTypeTable': {\n const firstRect = await this.getElementRect(_.head(children));\n const lastRect = await this.getElementRect(_.last(children));\n contentHeight = lastRect.y + lastRect.height - firstRect.y;\n break;\n }\n case 'XCUIElementTypeCollectionView': {\n let elsInRow = 1; // we know there must be at least one element in the row\n let firstRect = await this.getElementRect(_.head(children));\n let initialRects = [firstRect];\n for (let i = 1; i < children.length; i++) {\n const rect = await this.getElementRect(children[i]);\n initialRects.push(rect);\n if (rect.y !== firstRect.y) {\n elsInRow = i;\n break;\n }\n }\n const spaceBetweenEls = initialRects[elsInRow].y - initialRects[elsInRow - 1].y - initialRects[elsInRow - 1].height;\n const numRows = Math.ceil(children.length / elsInRow);\n\n // assume all cells are the same height\n contentHeight = (numRows * firstRect.height) + (spaceBetweenEls * (numRows - 1));\n break;\n }\n default: throw new Error(`Programming error: type '${type}' was not ` +\n `valid but should have already been rejected`);\n }\n }\n const size = await this.getSize(el);\n const origin = await this.getLocationInView(el);\n // attributes have to be strings, so stringify this up\n return JSON.stringify({\n width: size.width,\n height: size.height,\n top: origin.y,\n left: origin.x,\n scrollableOffset: contentHeight\n });\n};\n\ncommands.isKeyboardShown = async function isKeyboardShown () {\n try {\n await this.findNativeElementOrElements('class name', 'XCUIElementTypeKeyboard', false);\n return true;\n } catch (ign) {\n return false;\n }\n};\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AAGA,MAAMA,QAAQ,GAAG,EAAjB;AAAA,MAAqBC,UAAU,GAAG,EAAlC;;;AAEAD,QAAQ,CAACE,gBAAT,GAA4B,eAAeA,gBAAf,CAAiCC,EAAjC,EAAqC;EAC/DA,EAAE,GAAGC,aAAA,CAAKC,aAAL,CAAmBF,EAAnB,CAAL;;EACA,IAAI,KAAKG,YAAL,EAAJ,EAAyB;IACvB,MAAMC,YAAY,GAAG,KAAKC,eAAL,CAAqBL,EAArB,CAArB;IACA,OAAO,MAAM,KAAKM,WAAL,CAAiB,cAAjB,EAAiC,CAACF,YAAD,CAAjC,CAAb;EACD;;EAED,OAAO,MAAM,KAAKG,YAAL,CAAmB,YAAWP,EAAG,YAAjC,EAA8C,KAA9C,CAAb;AACD,CARD;;AAUAH,QAAQ,CAACW,cAAT,GAA0B,eAAeA,cAAf,CAA+BR,EAA/B,EAAmC;EAC3DA,EAAE,GAAGC,aAAA,CAAKC,aAAL,CAAmBF,EAAnB,CAAL;;EACA,IAAI,KAAKG,YAAL,EAAJ,EAAyB;IACvB,MAAMC,YAAY,GAAG,KAAKC,eAAL,CAAqBL,EAArB,CAArB;IACA,OAAO,MAAM,KAAKM,WAAL,CAAiB,YAAjB,EAA+B,CAACF,YAAD,CAA/B,CAAb;EACD;;EAED,OAAO,MAAM,KAAKG,YAAL,CAAmB,YAAWP,EAAG,UAAjC,EAA4C,KAA5C,CAAb;AACD,CARD;;AAUAH,QAAQ,CAACY,eAAT,GAA2B,eAAeA,eAAf,CAAgCT,EAAhC,EAAoC;EAC7DA,EAAE,GAAGC,aAAA,CAAKC,aAAL,CAAmBF,EAAnB,CAAL;;EACA,IAAI,KAAKG,YAAL,EAAJ,EAAyB;IACvB,MAAMC,YAAY,GAAG,KAAKC,eAAL,CAAqBL,EAArB,CAArB;IACA,OAAO,MAAM,KAAKM,WAAL,CAAiB,aAAjB,EAAgC,CAACF,YAAD,CAAhC,CAAb;EACD;;EAED,OAAO,MAAM,KAAKG,YAAL,CAAmB,YAAWP,EAAG,WAAjC,EAA6C,KAA7C,CAAb;AACD,CARD;;AAUAH,QAAQ,CAACa,OAAT,GAAmB,eAAeA,OAAf,CAAwBV,EAAxB,EAA4B;EAC7CA,EAAE,GAAGC,aAAA,CAAKC,aAAL,CAAmBF,EAAnB,CAAL;;EACA,IAAI,KAAKG,YAAL,EAAJ,EAAyB;IACvB,MAAMC,YAAY,GAAG,KAAKC,eAAL,CAAqBL,EAArB,CAArB;IACA,MAAMW,MAAM,GAAG,2CAAf;IACA,OAAO,MAAM,KAAKL,WAAL,CAAiB,gBAAjB,EAAmC,CAACK,MAAD,EAAS,CAACP,YAAD,CAAT,CAAnC,CAAb;EACD;;EAED,OAAO,MAAM,KAAKG,YAAL,CAAmB,YAAWP,EAAG,OAAjC,EAAyC,KAAzC,CAAb;AACD,CATD;;AAWAH,QAAQ,CAACe,kBAAT,GAA8B,eAAeA,kBAAf,CAAmCC,SAAnC,EAA8Cb,EAA9C,EAAkD;EAC9E,IAAIa,SAAS,KAAK,aAAlB,EAAiC;IAE/B,OAAO,MAAM,KAAKC,cAAL,CAAoBd,EAApB,CAAb;EACD;;EAEDA,EAAE,GAAGC,aAAA,CAAKC,aAAL,CAAmBF,EAAnB,CAAL;EAGA,IAAIe,KAAK,GAAG,MAAM,KAAKR,YAAL,CAAmB,YAAWP,EAAG,cAAaa,SAAU,EAAxD,EAA2D,KAA3D,CAAlB;;EAEA,IAAI,CAAC,CAAD,EAAI,CAAJ,EAAOG,QAAP,CAAgBD,KAAhB,CAAJ,EAA4B;IAC1BA,KAAK,GAAG,CAAC,CAACA,KAAV;EACD;;EAED,OAAQE,eAAA,CAAEC,MAAF,CAASH,KAAT,KAAmBE,eAAA,CAAEE,QAAF,CAAWJ,KAAX,CAApB,GAAyCA,KAAzC,GAAiDK,IAAI,CAACC,SAAL,CAAeN,KAAf,CAAxD;AACD,CAhBD;;AAkBAlB,QAAQ,CAACyB,YAAT,GAAwB,eAAeA,YAAf,CAA6BT,SAA7B,EAAwCb,EAAxC,EAA4C;EAClEA,EAAE,GAAGC,aAAA,CAAKC,aAAL,CAAmBF,EAAnB,CAAL;;EACA,IAAI,CAAC,KAAKG,YAAL,EAAL,EAA0B;IACxB,OAAO,MAAM,KAAKS,kBAAL,CAAwBC,SAAxB,EAAmCb,EAAnC,CAAb;EACD;;EACD,MAAMI,YAAY,GAAG,KAAKC,eAAL,CAAqBL,EAArB,CAArB;EACA,OAAO,MAAM,KAAKM,WAAL,CAAiB,qBAAjB,EAAwC,CAACF,YAAD,EAAeS,SAAf,CAAxC,CAAb;AACD,CAPD;;AASAhB,QAAQ,CAAC0B,WAAT,GAAuB,eAAeA,WAAf,CAA4BC,QAA5B,EAAsCxB,EAAtC,EAA0C;EAC/DA,EAAE,GAAGC,aAAA,CAAKC,aAAL,CAAmBF,EAAnB,CAAL;;EACA,IAAI,CAAC,KAAKG,YAAL,EAAL,EAA0B;IACxB,OAAO,MAAM,KAAKS,kBAAL,CAAwBY,QAAxB,EAAkCxB,EAAlC,CAAb;EACD;;EACD,MAAMI,YAAY,GAAG,KAAKC,eAAL,CAAqBL,EAArB,CAArB;EACA,OAAO,MAAM,KAAKM,WAAL,CAAiB,qBAAjB,EAAwC,CAACF,YAAD,EAAeoB,QAAf,CAAxC,CAAb;AACD,CAPD;;AASA3B,QAAQ,CAAC4B,OAAT,GAAmB,eAAeA,OAAf,CAAwBzB,EAAxB,EAA4B;EAC7CA,EAAE,GAAGC,aAAA,CAAKC,aAAL,CAAmBF,EAAnB,CAAL;;EACA,IAAI,CAAC,KAAKG,YAAL,EAAL,EAA0B;IACxB,OAAO,MAAM,KAAKI,YAAL,CAAmB,YAAWP,EAAG,OAAjC,EAAyC,KAAzC,CAAb;EACD;;EACD,IAAII,YAAY,GAAG,KAAKC,eAAL,CAAqBL,EAArB,CAAnB;EACA,OAAO,MAAM,KAAKM,WAAL,CAAiB,UAAjB,EAA6B,CAACF,YAAD,CAA7B,CAAb;AACD,CAPD;;AASAP,QAAQ,CAAC6B,cAAT,GAA0B,eAAeA,cAAf,CAA+B1B,EAA/B,EAAmC;EAC3D,IAAI,KAAKG,YAAL,EAAJ,EAAyB;IAEvB,MAAM;MAACwB,CAAD;MAAIC;IAAJ,IAAS,MAAM,KAAKC,WAAL,CAAiB7B,EAAjB,CAArB;IACA,MAAM;MAAC8B,KAAD;MAAQC;IAAR,IAAkB,MAAM,KAAKC,OAAL,CAAahC,EAAb,CAA9B;IACA,OAAO;MAAC2B,CAAD;MAAIC,CAAJ;MAAOE,KAAP;MAAcC;IAAd,CAAP;EACD;;EAED/B,EAAE,GAAGC,aAAA,CAAKC,aAAL,CAAmBF,EAAnB,CAAL;EACA,OAAO,MAAM,KAAKiC,aAAL,CAAmBjC,EAAnB,CAAb;AACD,CAVD;;AAYAF,UAAU,CAACmC,aAAX,GAA2B,eAAeA,aAAf,CAA8BjC,EAA9B,EAAkC;EAC3D,OAAO,MAAM,KAAKO,YAAL,CAAmB,YAAWP,EAAG,OAAjC,EAAyC,KAAzC,CAAb;AACD,CAFD;;AAIAH,QAAQ,CAACgC,WAAT,GAAuB,eAAeA,WAAf,CAA4B7B,EAA5B,EAAgC;EACrDA,EAAE,GAAGC,aAAA,CAAKC,aAAL,CAAmBF,EAAnB,CAAL;;EACA,IAAI,KAAKG,YAAL,EAAJ,EAAyB;IACvB,MAAMC,YAAY,GAAG,MAAM,KAAKC,eAAL,CAAqBL,EAArB,CAA3B;IACA,IAAIkC,GAAG,GAAG,MAAM,KAAK5B,WAAL,CAAiB,0BAAjB,EAA6C,CAACF,YAAD,CAA7C,CAAhB;;IACA,IAAI,KAAK+B,IAAL,CAAUC,oBAAd,EAAoC;MAClC,MAAMzB,MAAM,GAAG,aACb,4FADa,GAEb,2FAFF;MAGA,MAAM,CAAC0B,OAAD,EAAUC,OAAV,IAAqB,MAAM,KAAKC,OAAL,CAAa5B,MAAb,CAAjC;MACAuB,GAAG,CAACP,CAAJ,IAASU,OAAT;MACAH,GAAG,CAACN,CAAJ,IAASU,OAAT;IACD;;IACD,OAAOJ,GAAP;EACD;;EAED,MAAMM,IAAI,GAAG,MAAM,KAAKd,cAAL,CAAoB1B,EAApB,CAAnB;EACA,OAAO;IAAC2B,CAAC,EAAEa,IAAI,CAACb,CAAT;IAAYC,CAAC,EAAEY,IAAI,CAACZ;EAApB,CAAP;AACD,CAlBD;;AAoBA/B,QAAQ,CAAC4C,iBAAT,GAA6B,eAAeA,iBAAf,CAAkCzC,EAAlC,EAAsC;EACjE,OAAO,MAAM,KAAK6B,WAAL,CAAiB7B,EAAjB,CAAb;AACD,CAFD;;AAIAH,QAAQ,CAACmC,OAAT,GAAmB,eAAeA,OAAf,CAAwBhC,EAAxB,EAA4B;EAC7CA,EAAE,GAAGC,aAAA,CAAKC,aAAL,CAAmBF,EAAnB,CAAL;;EACA,IAAI,KAAKG,YAAL,EAAJ,EAAyB;IACvB,OAAO,MAAM,KAAKG,WAAL,CAAiB,UAAjB,EAA6B,CAAC,KAAKD,eAAL,CAAqBL,EAArB,CAAD,CAA7B,CAAb;EACD;;EAED,MAAMwC,IAAI,GAAG,MAAM,KAAKd,cAAL,CAAoB1B,EAApB,CAAnB;EACA,OAAO;IAAC8B,KAAK,EAAEU,IAAI,CAACV,KAAb;IAAoBC,MAAM,EAAES,IAAI,CAACT;EAAjC,CAAP;AACD,CARD;;AAsBA,SAASW,iBAAT,CAA4BC,GAA5B,EAAiC;EAC/B,IAAI,CAAC,CAAC1B,eAAA,CAAE2B,OAAH,EAAY3B,eAAA,CAAEE,QAAd,EAAwBF,eAAA,CAAE4B,QAA1B,EAAoCC,IAApC,CAA0CC,CAAD,IAAOA,CAAC,CAACJ,GAAD,CAAjD,CAAL,EAA8D;IAC5D,MAAM,IAAIK,KAAJ,CAAW,qEAAD,GACb,aAAY5B,IAAI,CAACC,SAAL,CAAesB,GAAf,CAAoB,EAD7B,CAAN;EAED;;EAID,IAAI1B,eAAA,CAAE2B,OAAF,CAAUD,GAAV,CAAJ,EAAoB;IAClBA,GAAG,GAAGA,GAAG,CAACM,IAAJ,CAAS,EAAT,CAAN;EACD,CAFD,MAEO,IAAIhC,eAAA,CAAE4B,QAAF,CAAWF,GAAX,CAAJ,EAAqB;IAC1BA,GAAG,GAAI,GAAEA,GAAI,EAAb;EACD;;EAGD,OAAO,CAAC,GAAGA,GAAJ,EAASO,GAAT,CAAcC,CAAD,IAAO;IACzB,IAAI,CAAC,QAAD,EAAW,QAAX,EAAqBnC,QAArB,CAA8BmC,CAA9B,CAAJ,EAAsC;MACpC,OAAO,IAAP;IACD;;IACD,IAAI,CAAC,QAAD,EAAW,QAAX,EAAqBnC,QAArB,CAA8BmC,CAA9B,CAAJ,EAAsC;MACpC,OAAO,IAAP;IACD;;IACD,OAAOA,CAAP;EACD,CARM,CAAP;AASD;;AAEDtD,QAAQ,CAACuD,iBAAT,GAA6B,eAAeA,iBAAf,CAAkCrC,KAAlC,EAAyCf,EAAzC,EAA6C;EAExE,KAAKqD,GAAL,CAASC,IAAT,CAAc,2FAAd;EACA,MAAM,KAAKC,QAAL,CAAcxC,KAAd,EAAqBf,EAArB,CAAN;AACD,CAJD;;AAMAH,QAAQ,CAAC0D,QAAT,GAAoB,eAAeA,QAAf,CAAyBxC,KAAzB,EAAgCf,EAAhC,EAAoC;EACtDA,EAAE,GAAGC,aAAA,CAAKC,aAAL,CAAmBF,EAAnB,CAAL;;EACA,IAAI,CAAC,KAAKG,YAAL,EAAL,EAA0B;IACxB,MAAM,KAAKI,YAAL,CAAmB,YAAWP,EAAG,QAAjC,EAA0C,MAA1C,EAAkD;MACtDe,KAAK,EAAE2B,iBAAiB,CAAC3B,KAAD;IAD8B,CAAlD,CAAN;IAGA;EACD;;EAED,MAAMX,YAAY,GAAG,KAAKC,eAAL,CAAqBL,EAArB,CAArB;EACA,MAAM,KAAKM,WAAL,CAAiB,OAAjB,EAA0B,CAACF,YAAD,CAA1B,CAAN;EACA,MAAM,KAAKE,WAAL,CAAiB,MAAjB,EAAyB,CAACF,YAAD,EAAeW,KAAf,CAAzB,CAAN;AACD,CAZD;;AAcAlB,QAAQ,CAAC2D,IAAT,GAAgB,eAAeA,IAAf,CAAqBzC,KAArB,EAA4B;EAC1C,MAAM,KAAKR,YAAL,CAAkB,WAAlB,EAA+B,MAA/B,EAAuC;IAC3CQ,KAAK,EAAE2B,iBAAiB,CAAC3B,KAAD;EADmB,CAAvC,CAAN;AAGD,CAJD;;AAMAlB,QAAQ,CAAC4D,KAAT,GAAiB,eAAeA,KAAf,CAAsBzD,EAAtB,EAA0B;EACzCA,EAAE,GAAGC,aAAA,CAAKC,aAAL,CAAmBF,EAAnB,CAAL;;EACA,IAAI,KAAKG,YAAL,EAAJ,EAAyB;IACvB,MAAMC,YAAY,GAAG,KAAKC,eAAL,CAAqBL,EAArB,CAArB;IACA,MAAM,KAAKM,WAAL,CAAiB,OAAjB,EAA0B,CAACF,YAAD,CAA1B,CAAN;IACA;EACD;;EACD,MAAM,KAAKG,YAAL,CAAmB,YAAWP,EAAG,QAAjC,EAA0C,MAA1C,CAAN;AACD,CARD;;AAUAH,QAAQ,CAACiB,cAAT,GAA0B,eAAeA,cAAf,CAA+Bd,EAA/B,EAAmC;EAC3D,IAAI,KAAKG,YAAL,EAAJ,EAAyB;IACvB,MAAM,IAAIuD,cAAA,CAAOC,sBAAX,CAAkC,iGAAlC,CAAN;EACD;;EAED,MAAMC,IAAI,GAAG,MAAM,KAAKtC,YAAL,CAAkB,MAAlB,EAA0BtB,EAA1B,CAAnB;;EAEA,IAAI4D,IAAI,KAAK,sBAAT,IACAA,IAAI,KAAK,+BADb,EAC8C;IAC5C,MAAM,IAAIZ,KAAJ,CAAW,oCAAmCY,IAAK,cAAzC,GACC,6BADX,CAAN;EAED;;EACD,IAAIC,OAAO,GAAG,GAAd;;EACA,IAAID,IAAI,KAAK,sBAAb,EAAqC;IAEnCC,OAAO,GAAG,qBAAV;EACD;;EAED,IAAIC,aAAa,GAAG,CAApB;EACA,MAAMC,QAAQ,GAAG,MAAM,KAAKC,WAAL,CAAkB,aAAlB,EAAgCH,OAAhC,EAAyC,IAAzC,EAA+C7D,EAA/C,CAAvB;;EACA,IAAI+D,QAAQ,CAACE,MAAT,KAAoB,CAAxB,EAA2B;IAGzB,MAAMzB,IAAI,GAAG,MAAM,KAAKd,cAAL,CAAoBT,eAAA,CAAEiD,IAAF,CAAOH,QAAP,CAApB,CAAnB;IACAD,aAAa,GAAGtB,IAAI,CAACT,MAArB;EACD,CALD,MAKO,IAAIgC,QAAQ,CAACE,MAAb,EAAqB;IAG1B,QAAQL,IAAR;MACE,KAAK,sBAAL;QAA6B;UAC3B,MAAMO,SAAS,GAAG,MAAM,KAAKzC,cAAL,CAAoBT,eAAA,CAAEiD,IAAF,CAAOH,QAAP,CAApB,CAAxB;UACA,MAAMK,QAAQ,GAAG,MAAM,KAAK1C,cAAL,CAAoBT,eAAA,CAAEoD,IAAF,CAAON,QAAP,CAApB,CAAvB;UACAD,aAAa,GAAGM,QAAQ,CAACxC,CAAT,GAAawC,QAAQ,CAACrC,MAAtB,GAA+BoC,SAAS,CAACvC,CAAzD;UACA;QACD;;MACD,KAAK,+BAAL;QAAsC;UACpC,IAAI0C,QAAQ,GAAG,CAAf;UACA,IAAIH,SAAS,GAAG,MAAM,KAAKzC,cAAL,CAAoBT,eAAA,CAAEiD,IAAF,CAAOH,QAAP,CAApB,CAAtB;UACA,IAAIQ,YAAY,GAAG,CAACJ,SAAD,CAAnB;;UACA,KAAK,IAAIK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGT,QAAQ,CAACE,MAA7B,EAAqCO,CAAC,EAAtC,EAA0C;YACxC,MAAMhC,IAAI,GAAG,MAAM,KAAKd,cAAL,CAAoBqC,QAAQ,CAACS,CAAD,CAA5B,CAAnB;YACAD,YAAY,CAACE,IAAb,CAAkBjC,IAAlB;;YACA,IAAIA,IAAI,CAACZ,CAAL,KAAWuC,SAAS,CAACvC,CAAzB,EAA4B;cAC1B0C,QAAQ,GAAGE,CAAX;cACA;YACD;UACF;;UACD,MAAME,eAAe,GAAGH,YAAY,CAACD,QAAD,CAAZ,CAAuB1C,CAAvB,GAA2B2C,YAAY,CAACD,QAAQ,GAAG,CAAZ,CAAZ,CAA2B1C,CAAtD,GAA0D2C,YAAY,CAACD,QAAQ,GAAG,CAAZ,CAAZ,CAA2BvC,MAA7G;UACA,MAAM4C,OAAO,GAAGC,IAAI,CAACC,IAAL,CAAUd,QAAQ,CAACE,MAAT,GAAkBK,QAA5B,CAAhB;UAGAR,aAAa,GAAIa,OAAO,GAAGR,SAAS,CAACpC,MAArB,GAAgC2C,eAAe,IAAIC,OAAO,GAAG,CAAd,CAA/D;UACA;QACD;;MACD;QAAS,MAAM,IAAI3B,KAAJ,CAAW,4BAA2BY,IAAK,YAAjC,GACC,6CADX,CAAN;IA1BX;EA6BD;;EACD,MAAMkB,IAAI,GAAG,MAAM,KAAK9C,OAAL,CAAahC,EAAb,CAAnB;EACA,MAAM+E,MAAM,GAAG,MAAM,KAAKtC,iBAAL,CAAuBzC,EAAvB,CAArB;EAEA,OAAOoB,IAAI,CAACC,SAAL,CAAe;IACpBS,KAAK,EAAEgD,IAAI,CAAChD,KADQ;IAEpBC,MAAM,EAAE+C,IAAI,CAAC/C,MAFO;IAGpBiD,GAAG,EAAED,MAAM,CAACnD,CAHQ;IAIpBqD,IAAI,EAAEF,MAAM,CAACpD,CAJO;IAKpBuD,gBAAgB,EAAEpB;EALE,CAAf,CAAP;AAOD,CApED;;AAsEAjE,QAAQ,CAACsF,eAAT,GAA2B,eAAeA,eAAf,GAAkC;EAC3D,IAAI;IACF,MAAM,KAAKC,2BAAL,CAAiC,YAAjC,EAA+C,yBAA/C,EAA0E,KAA1E,CAAN;IACA,OAAO,IAAP;EACD,CAHD,CAGE,OAAOC,GAAP,EAAY;IACZ,OAAO,KAAP;EACD;AACF,CAPD;;AASAC,MAAM,CAACC,MAAP,CAAczF,UAAd,EAA0BD,QAA1B;eAEeC,U"}
@@ -73,6 +73,7 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
73
73
  touchAndHold: 'mobileTouchAndHold',
74
74
  dragFromToForDuration: 'mobileDragFromToForDuration',
75
75
  rotateElement: 'mobileRotateElement',
76
+ dragFromToWithVelocity: 'mobileDragFromToWithVelocity',
76
77
  forcePress: 'mobileForcePress',
77
78
  scrollToElement: 'mobileScrollToElement',
78
79
  alert: 'mobileHandleAlert',
@@ -145,4 +146,4 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
145
146
 
146
147
  var _default = extensions;
147
148
  exports.default = _default;
148
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJzdGF0dXMiLCJ2YWx1ZSIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInV0aWwiLCJoYXNWYWx1ZSIsImFzeW5jUHJvbWlzZSIsIndhcm4iLCJyZWplY3QiLCJlcnJvckZyb21Db2RlIiwibWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsImVycm9yIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwicmVzb2x2ZSIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJyZXBsYWNlIiwidHJpbSIsImV4ZWN1dGVNb2JpbGUiLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiY29udmVydEVsZW1lbnRzRm9yQXRvbXMiLCJyZXN1bHQiLCJleGVjdXRlQXRvbSIsImNhY2hlV2ViRWxlbWVudHMiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZXhlY3V0ZUFzeW5jIiwiYXN5bmNXYWl0TXMiLCJwcm9taXNlIiwicmVtb3RlIiwiZXhlY3V0ZUF0b21Bc3luYyIsImN1cldlYkZyYW1lcyIsIndhaXRGb3JBdG9tIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJjb21tYW5kTWFwIiwidGFwIiwic2Nyb2xsIiwic2VsZWN0UGlja2VyV2hlZWxWYWx1ZSIsInN3aXBlIiwicGluY2giLCJkb3VibGVUYXAiLCJ0d29GaW5nZXJUYXAiLCJ0YXBXaXRoTnVtYmVyT2ZUYXBzIiwidG91Y2hBbmRIb2xkIiwiZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIiwicm90YXRlRWxlbWVudCIsImZvcmNlUHJlc3MiLCJzY3JvbGxUb0VsZW1lbnQiLCJhbGVydCIsInNldFBhc3RlYm9hcmQiLCJnZXRQYXN0ZWJvYXJkIiwic291cmNlIiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsQXBwIiwiaXNBcHBJbnN0YWxsZWQiLCJyZW1vdmVBcHAiLCJsYXVuY2hBcHAiLCJ0ZXJtaW5hdGVBcHAiLCJraWxsQXBwIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwibGlzdEFwcHMiLCJ2aWV3cG9ydFNjcmVlbnNob3QiLCJ2aWV3cG9ydFJlY3QiLCJzdGFydFBlcmZSZWNvcmQiLCJzdG9wUGVyZlJlY29yZCIsImluc3RhbGxDZXJ0aWZpY2F0ZSIsImxpc3RDZXJ0aWZpY2F0ZXMiLCJzdGFydExvZ3NCcm9hZGNhc3QiLCJzdG9wTG9nc0Jyb2FkY2FzdCIsImJhdHRlcnlJbmZvIiwiZGV2aWNlSW5mbyIsImdldERldmljZVRpbWUiLCJhY3RpdmVBcHBJbmZvIiwiZGV2aWNlU2NyZWVuSW5mbyIsInByZXNzQnV0dG9uIiwiZW5yb2xsQmlvbWV0cmljIiwic2VuZEJpb21ldHJpY01hdGNoIiwiaXNCaW9tZXRyaWNFbnJvbGxlZCIsImNsZWFyS2V5Y2hhaW5zIiwiZ2V0UGVybWlzc2lvbiIsInNldFBlcm1pc3Npb24iLCJyZXNldFBlcm1pc3Npb24iLCJnZXRBcHBlYXJhbmNlIiwic2V0QXBwZWFyYW5jZSIsInNpcmlDb21tYW5kIiwicHVzaEZpbGUiLCJwdWxsRmlsZSIsInB1bGxGb2xkZXIiLCJkZWxldGVGaWxlIiwiZGVsZXRlRm9sZGVyIiwic3RhcnRBdWRpb1JlY29yZGluZyIsInN0b3BBdWRpb1JlY29yZGluZyIsInJ1blhDVGVzdCIsImluc3RhbGxYQ1Rlc3RCdW5kbGUiLCJsaXN0WENUZXN0QnVuZGxlcyIsImxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlIiwicHVzaE5vdGlmaWNhdGlvbiIsImV4cGVjdE5vdGlmaWNhdGlvbiIsInBlcmZvcm1Jb0hpZEV2ZW50IiwiY29uZmlndXJlTG9jYWxpemF0aW9uIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJzdGFydFBjYXAiLCJzdG9wUGNhcCIsImxpc3RDb25kaXRpb25JbmR1Y2VycyIsImVuYWJsZUNvbmRpdGlvbkluZHVjZXIiLCJkaXNhYmxlQ29uZGl0aW9uSW5kdWNlciIsImhhcyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIiwiam9pbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBlcnJvcnMsIGVycm9yRnJvbUNvZGUsIGVycm9yRnJvbVczQ0pzb25Db2RlXG59IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLnJlY2VpdmVBc3luY1Jlc3BvbnNlID0gYXN5bmMgZnVuY3Rpb24gcmVjZWl2ZUFzeW5jUmVzcG9uc2UgKHN0YXR1cywgdmFsdWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHRoaXMubG9nLmRlYnVnKGBSZWNlaXZlZCBhc3luYyByZXNwb25zZTogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLmFzeW5jUHJvbWlzZSkpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBSZWNlaXZlZCBhc3luYyByZXNwb25zZSB3aGVuIHdlIHdlcmUgbm90IGV4cGVjdGluZyBvbmUhIGAgK1xuICAgICAgYFJlc3BvbnNlIHdhczogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHV0aWwuaGFzVmFsdWUoc3RhdHVzKSAmJiBzdGF0dXMgIT09IDApIHtcbiAgICAvLyBNSlNPTldQXG4gICAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlamVjdChlcnJvckZyb21Db2RlKHN0YXR1cywgdmFsdWUubWVzc2FnZSkpO1xuICB9XG4gIGlmICghdXRpbC5oYXNWYWx1ZShzdGF0dXMpICYmIHZhbHVlICYmIF8uaXNTdHJpbmcodmFsdWUuZXJyb3IpKSB7XG4gICAgLy8gVzNDXG4gICAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlamVjdChlcnJvckZyb21XM0NKc29uQ29kZSh2YWx1ZS5lcnJvciwgdmFsdWUubWVzc2FnZSwgdmFsdWUuc3RhY2t0cmFjZSkpO1xuICB9XG4gIHJldHVybiB0aGlzLmFzeW5jUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUgKHNjcmlwdCwgYXJncykge1xuICBpZiAoc2NyaXB0Lm1hdGNoKC9ebW9iaWxlOi8pKSB7XG4gICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL15tb2JpbGU6LywgJycpLnRyaW0oKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlTW9iaWxlKHNjcmlwdCwgXy5pc0FycmF5KGFyZ3MpID8gYXJnc1swXSA6IGFyZ3MpO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBhcmdzID0gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmdzKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIGFyZ3NdKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZUFzeW5jID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUFzeW5jIChzY3JpcHQsIGFyZ3MpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBhcmdzID0gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmdzKTtcbiAgdGhpcy5hc3luY1dhaXRNcyA9IHRoaXMuYXN5bmNXYWl0TXMgfHwgMDtcbiAgY29uc3QgcHJvbWlzZSA9IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tQXN5bmMoJ2V4ZWN1dGVfYXN5bmNfc2NyaXB0JywgW1xuICAgIHNjcmlwdCwgYXJncywgdGhpcy5hc3luY1dhaXRNc1xuICBdLCB0aGlzLmN1cldlYkZyYW1lcyk7XG4gIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKSk7XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlTW9iaWxlIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgY29tbWFuZE1hcCA9IHtcbiAgICAvL3JlZ2lvbiBnZXN0dXJlcyBzdXBwb3J0XG4gICAgdGFwOiAnbW9iaWxlVGFwJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHNlbGVjdFBpY2tlcldoZWVsVmFsdWU6ICdtb2JpbGVTZWxlY3RQaWNrZXJXaGVlbFZhbHVlJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2OC1zd2lwZWxlZnQ/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4Njc0LXN3aXBlcmlnaHQ/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY3LXN3aXBldXA/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY0LXN3aXBlZG93bj9sYW5ndWFnZT1vYmpjXG4gICAgc3dpcGU6ICdtb2JpbGVTd2lwZScsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjktcGluY2h3aXRoc2NhbGU/bGFuZ3VhZ2U9b2JqY1xuICAgIHBpbmNoOiAnbW9iaWxlUGluY2gnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjczLWRvdWJsZXRhcD9sYW5ndWFnZT1vYmpjXG4gICAgZG91YmxlVGFwOiAnbW9iaWxlRG91YmxlVGFwJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3NS10d29maW5nZXJ0YXA/bGFuZ3VhZ2U9b2JqY1xuICAgIHR3b0ZpbmdlclRhcDogJ21vYmlsZVR3b0ZpbmdlclRhcCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzEtdGFwd2l0aG51bWJlcm9mdGFwcz9sYW5ndWFnZT1vYmpjXG4gICAgdGFwV2l0aE51bWJlck9mVGFwczogJ21vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjYzLXByZXNzZm9yZHVyYXRpb24/bGFuZ3VhZ2U9b2JqY1xuICAgIHRvdWNoQW5kSG9sZDogJ21vYmlsZVRvdWNoQW5kSG9sZCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzAtcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uOiAnbW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2NS1yb3RhdGU/bGFuZ3VhZ2U9b2JqY1xuICAgIHJvdGF0ZUVsZW1lbnQ6ICdtb2JpbGVSb3RhdGVFbGVtZW50JyxcbiAgICBmb3JjZVByZXNzOiAnbW9iaWxlRm9yY2VQcmVzcycsXG4gICAgc2Nyb2xsVG9FbGVtZW50OiAnbW9iaWxlU2Nyb2xsVG9FbGVtZW50JyxcblxuICAgIC8vZW5kcmVnaW9uIGdlc3R1cmVzIHN1cHBvcnRcbiAgICBhbGVydDogJ21vYmlsZUhhbmRsZUFsZXJ0JyxcblxuICAgIHNldFBhc3RlYm9hcmQ6ICdtb2JpbGVTZXRQYXN0ZWJvYXJkJyxcbiAgICBnZXRQYXN0ZWJvYXJkOiAnbW9iaWxlR2V0UGFzdGVib2FyZCcsXG5cbiAgICBzb3VyY2U6ICdtb2JpbGVHZXRTb3VyY2UnLFxuICAgIGdldENvbnRleHRzOiAnbW9iaWxlR2V0Q29udGV4dHMnLFxuXG4gICAgLy9yZWdpb24gbXVsdGlwbGUgYXBwcyBtYW5hZ2VtZW50XG4gICAgaW5zdGFsbEFwcDogJ21vYmlsZUluc3RhbGxBcHAnLFxuICAgIGlzQXBwSW5zdGFsbGVkOiAnbW9iaWxlSXNBcHBJbnN0YWxsZWQnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgbGF1bmNoQXBwOiAnbW9iaWxlTGF1bmNoQXBwJyxcbiAgICB0ZXJtaW5hdGVBcHA6ICdtb2JpbGVUZXJtaW5hdGVBcHAnLFxuICAgIGtpbGxBcHA6ICdtb2JpbGVLaWxsQXBwJyxcbiAgICBxdWVyeUFwcFN0YXRlOiAnbW9iaWxlUXVlcnlBcHBTdGF0ZScsXG4gICAgYWN0aXZhdGVBcHA6ICdtb2JpbGVBY3RpdmF0ZUFwcCcsXG4gICAgbGlzdEFwcHM6ICdtb2JpbGVMaXN0QXBwcycsXG4gICAgLy9lbmRyZWdpb24gbXVsdGlwbGUgYXBwcyBtYW5hZ2VtZW50XG5cbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdnZXRWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ2dldFZpZXdwb3J0UmVjdCcsXG5cbiAgICBzdGFydFBlcmZSZWNvcmQ6ICdtb2JpbGVTdGFydFBlcmZSZWNvcmQnLFxuICAgIHN0b3BQZXJmUmVjb3JkOiAnbW9iaWxlU3RvcFBlcmZSZWNvcmQnLFxuXG4gICAgaW5zdGFsbENlcnRpZmljYXRlOiAnbW9iaWxlSW5zdGFsbENlcnRpZmljYXRlJyxcbiAgICBsaXN0Q2VydGlmaWNhdGVzOiAnbW9iaWxlTGlzdENlcnRpZmljYXRlcycsXG5cbiAgICBzdGFydExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdGFydExvZ3NCcm9hZGNhc3QnLFxuICAgIHN0b3BMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RvcExvZ3NCcm9hZGNhc3QnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG4gICAgZGV2aWNlSW5mbzogJ21vYmlsZUdldERldmljZUluZm8nLFxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcbiAgICBhY3RpdmVBcHBJbmZvOiAnbW9iaWxlR2V0QWN0aXZlQXBwSW5mbycsXG4gICAgZGV2aWNlU2NyZWVuSW5mbzogJ2dldFNjcmVlbkluZm8nLFxuXG4gICAgcHJlc3NCdXR0b246ICdtb2JpbGVQcmVzc0J1dHRvbicsXG5cbiAgICBlbnJvbGxCaW9tZXRyaWM6ICdtb2JpbGVFbnJvbGxCaW9tZXRyaWMnLFxuICAgIHNlbmRCaW9tZXRyaWNNYXRjaDogJ21vYmlsZVNlbmRCaW9tZXRyaWNNYXRjaCcsXG4gICAgaXNCaW9tZXRyaWNFbnJvbGxlZDogJ21vYmlsZUlzQmlvbWV0cmljRW5yb2xsZWQnLFxuXG4gICAgY2xlYXJLZXljaGFpbnM6ICdtb2JpbGVDbGVhcktleWNoYWlucycsXG5cbiAgICBnZXRQZXJtaXNzaW9uOiAnbW9iaWxlR2V0UGVybWlzc2lvbicsXG4gICAgc2V0UGVybWlzc2lvbjogJ21vYmlsZVNldFBlcm1pc3Npb25zJyxcbiAgICByZXNldFBlcm1pc3Npb246ICdtb2JpbGVSZXNldFBlcm1pc3Npb24nLFxuXG4gICAgZ2V0QXBwZWFyYW5jZTogJ21vYmlsZUdldEFwcGVhcmFuY2UnLFxuICAgIHNldEFwcGVhcmFuY2U6ICdtb2JpbGVTZXRBcHBlYXJhbmNlJyxcblxuICAgIHNpcmlDb21tYW5kOiAnbW9iaWxlU2lyaUNvbW1hbmQnLFxuXG4gICAgcHVzaEZpbGU6ICdtb2JpbGVQdXNoRmlsZScsXG4gICAgcHVsbEZpbGU6ICdtb2JpbGVQdWxsRmlsZScsXG4gICAgcHVsbEZvbGRlcjogJ21vYmlsZVB1bGxGb2xkZXInLFxuICAgIGRlbGV0ZUZpbGU6ICdtb2JpbGVEZWxldGVGaWxlJyxcbiAgICBkZWxldGVGb2xkZXI6ICdtb2JpbGVEZWxldGVGb2xkZXInLFxuXG4gICAgc3RhcnRBdWRpb1JlY29yZGluZzogJ3N0YXJ0QXVkaW9SZWNvcmRpbmcnLFxuICAgIHN0b3BBdWRpb1JlY29yZGluZzogJ3N0b3BBdWRpb1JlY29yZGluZycsXG5cbiAgICAvLyBYQ1Rlc3RcbiAgICBydW5YQ1Rlc3Q6ICdtb2JpbGVSdW5YQ1Rlc3QnLFxuICAgIGluc3RhbGxYQ1Rlc3RCdW5kbGU6ICdtb2JpbGVJbnN0YWxsWENUZXN0QnVuZGxlJyxcbiAgICBsaXN0WENUZXN0QnVuZGxlczogJ21vYmlsZUxpc3RYQ1Rlc3RCdW5kbGVzJyxcbiAgICBsaXN0WENUZXN0c0luVGVzdEJ1bmRsZTogJ21vYmlsZUxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlJyxcblxuICAgIHB1c2hOb3RpZmljYXRpb246ICdtb2JpbGVQdXNoTm90aWZpY2F0aW9uJyxcbiAgICBleHBlY3ROb3RpZmljYXRpb246ICdtb2JpbGVFeHBlY3ROb3RpZmljYXRpb24nLFxuXG4gICAgcGVyZm9ybUlvSGlkRXZlbnQ6ICdtb2JpbGVQZXJmb3JtSW9IaWRFdmVudCcsXG5cbiAgICBjb25maWd1cmVMb2NhbGl6YXRpb246ICdtb2JpbGVDb25maWd1cmVMb2NhbGl6YXRpb24nLFxuXG4gICAgcmVzZXRMb2NhdGlvblNlcnZpY2U6ICdtb2JpbGVSZXNldExvY2F0aW9uU2VydmljZScsXG5cbiAgICBzdGFydFBjYXA6ICdtb2JpbGVTdGFydFBjYXAnLFxuICAgIHN0b3BQY2FwOiAnbW9iaWxlU3RvcFBjYXAnLFxuICAgIGxpc3RDb25kaXRpb25JbmR1Y2VyczogJ21vYmlsZUxpc3RDb25kaXRpb25JbmR1Y2VycycsXG4gICAgZW5hYmxlQ29uZGl0aW9uSW5kdWNlcjogJ21vYmlsZUVuYWJsZUNvbmRpdGlvbkluZHVjZXInLFxuICAgIGRpc2FibGVDb25kaXRpb25JbmR1Y2VyOiAnbW9iaWxlRGlzYWJsZUNvbmRpdGlvbkluZHVjZXInLFxuICB9O1xuXG4gIGlmICghXy5oYXMoY29tbWFuZE1hcCwgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgJyR7bW9iaWxlQ29tbWFuZH0nLiBPbmx5ICR7Xy5rZXlzKGNvbW1hbmRNYXApLmpvaW4oJywgJyl9IGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQuYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXNbY29tbWFuZE1hcFttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUdBOztBQUVBLE1BQU1BLFVBQVUsR0FBRyxFQUFuQjs7QUFFQUEsVUFBVSxDQUFDQyxvQkFBWCxHQUFrQyxlQUFlQSxvQkFBZixDQUFxQ0MsTUFBckMsRUFBNkNDLEtBQTdDLEVBQW9EO0VBQ3BGLEtBQUtDLEdBQUwsQ0FBU0MsS0FBVCxDQUFnQiw0QkFBMkJDLElBQUksQ0FBQ0MsU0FBTCxDQUFlSixLQUFmLENBQXNCLEVBQWpFOztFQUNBLElBQUksQ0FBQ0ssYUFBQSxDQUFLQyxRQUFMLENBQWMsS0FBS0MsWUFBbkIsQ0FBTCxFQUF1QztJQUNyQyxLQUFLTixHQUFMLENBQVNPLElBQVQsQ0FB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
149
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJzdGF0dXMiLCJ2YWx1ZSIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInV0aWwiLCJoYXNWYWx1ZSIsImFzeW5jUHJvbWlzZSIsIndhcm4iLCJyZWplY3QiLCJlcnJvckZyb21Db2RlIiwibWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsImVycm9yIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwicmVzb2x2ZSIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJyZXBsYWNlIiwidHJpbSIsImV4ZWN1dGVNb2JpbGUiLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiY29udmVydEVsZW1lbnRzRm9yQXRvbXMiLCJyZXN1bHQiLCJleGVjdXRlQXRvbSIsImNhY2hlV2ViRWxlbWVudHMiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZXhlY3V0ZUFzeW5jIiwiYXN5bmNXYWl0TXMiLCJwcm9taXNlIiwicmVtb3RlIiwiZXhlY3V0ZUF0b21Bc3luYyIsImN1cldlYkZyYW1lcyIsIndhaXRGb3JBdG9tIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJjb21tYW5kTWFwIiwidGFwIiwic2Nyb2xsIiwic2VsZWN0UGlja2VyV2hlZWxWYWx1ZSIsInN3aXBlIiwicGluY2giLCJkb3VibGVUYXAiLCJ0d29GaW5nZXJUYXAiLCJ0YXBXaXRoTnVtYmVyT2ZUYXBzIiwidG91Y2hBbmRIb2xkIiwiZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIiwicm90YXRlRWxlbWVudCIsImRyYWdGcm9tVG9XaXRoVmVsb2NpdHkiLCJmb3JjZVByZXNzIiwic2Nyb2xsVG9FbGVtZW50IiwiYWxlcnQiLCJzZXRQYXN0ZWJvYXJkIiwiZ2V0UGFzdGVib2FyZCIsInNvdXJjZSIsImdldENvbnRleHRzIiwiaW5zdGFsbEFwcCIsImlzQXBwSW5zdGFsbGVkIiwicmVtb3ZlQXBwIiwibGF1bmNoQXBwIiwidGVybWluYXRlQXBwIiwia2lsbEFwcCIsInF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsImxpc3RBcHBzIiwidmlld3BvcnRTY3JlZW5zaG90Iiwidmlld3BvcnRSZWN0Iiwic3RhcnRQZXJmUmVjb3JkIiwic3RvcFBlcmZSZWNvcmQiLCJpbnN0YWxsQ2VydGlmaWNhdGUiLCJsaXN0Q2VydGlmaWNhdGVzIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJiYXR0ZXJ5SW5mbyIsImRldmljZUluZm8iLCJnZXREZXZpY2VUaW1lIiwiYWN0aXZlQXBwSW5mbyIsImRldmljZVNjcmVlbkluZm8iLCJwcmVzc0J1dHRvbiIsImVucm9sbEJpb21ldHJpYyIsInNlbmRCaW9tZXRyaWNNYXRjaCIsImlzQmlvbWV0cmljRW5yb2xsZWQiLCJjbGVhcktleWNoYWlucyIsImdldFBlcm1pc3Npb24iLCJzZXRQZXJtaXNzaW9uIiwicmVzZXRQZXJtaXNzaW9uIiwiZ2V0QXBwZWFyYW5jZSIsInNldEFwcGVhcmFuY2UiLCJzaXJpQ29tbWFuZCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImRlbGV0ZUZvbGRlciIsInN0YXJ0QXVkaW9SZWNvcmRpbmciLCJzdG9wQXVkaW9SZWNvcmRpbmciLCJydW5YQ1Rlc3QiLCJpbnN0YWxsWENUZXN0QnVuZGxlIiwibGlzdFhDVGVzdEJ1bmRsZXMiLCJsaXN0WENUZXN0c0luVGVzdEJ1bmRsZSIsInB1c2hOb3RpZmljYXRpb24iLCJleHBlY3ROb3RpZmljYXRpb24iLCJwZXJmb3JtSW9IaWRFdmVudCIsImNvbmZpZ3VyZUxvY2FsaXphdGlvbiIsInJlc2V0TG9jYXRpb25TZXJ2aWNlIiwic3RhcnRQY2FwIiwic3RvcFBjYXAiLCJsaXN0Q29uZGl0aW9uSW5kdWNlcnMiLCJlbmFibGVDb25kaXRpb25JbmR1Y2VyIiwiZGlzYWJsZUNvbmRpdGlvbkluZHVjZXIiLCJoYXMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwia2V5cyIsImpvaW4iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZXhlY3V0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgZXJyb3JzLCBlcnJvckZyb21Db2RlLCBlcnJvckZyb21XM0NKc29uQ29kZVxufSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IGV4dGVuc2lvbnMgPSB7fTtcblxuZXh0ZW5zaW9ucy5yZWNlaXZlQXN5bmNSZXNwb25zZSA9IGFzeW5jIGZ1bmN0aW9uIHJlY2VpdmVBc3luY1Jlc3BvbnNlIChzdGF0dXMsIHZhbHVlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aGlzLmxvZy5kZWJ1ZyhgUmVjZWl2ZWQgYXN5bmMgcmVzcG9uc2U6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5hc3luY1Byb21pc2UpKSB7XG4gICAgdGhpcy5sb2cud2FybihgUmVjZWl2ZWQgYXN5bmMgcmVzcG9uc2Ugd2hlbiB3ZSB3ZXJlIG5vdCBleHBlY3Rpbmcgb25lISBgICtcbiAgICAgIGBSZXNwb25zZSB3YXM6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKHN0YXR1cykgJiYgc3RhdHVzICE9PSAwKSB7XG4gICAgLy8gTUpTT05XUFxuICAgIHJldHVybiB0aGlzLmFzeW5jUHJvbWlzZS5yZWplY3QoZXJyb3JGcm9tQ29kZShzdGF0dXMsIHZhbHVlLm1lc3NhZ2UpKTtcbiAgfVxuICBpZiAoIXV0aWwuaGFzVmFsdWUoc3RhdHVzKSAmJiB2YWx1ZSAmJiBfLmlzU3RyaW5nKHZhbHVlLmVycm9yKSkge1xuICAgIC8vIFczQ1xuICAgIHJldHVybiB0aGlzLmFzeW5jUHJvbWlzZS5yZWplY3QoZXJyb3JGcm9tVzNDSnNvbkNvZGUodmFsdWUuZXJyb3IsIHZhbHVlLm1lc3NhZ2UsIHZhbHVlLnN0YWNrdHJhY2UpKTtcbiAgfVxuICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlIChzY3JpcHQsIGFyZ3MpIHtcbiAgaWYgKHNjcmlwdC5tYXRjaCgvXm1vYmlsZTovKSkge1xuICAgIHNjcmlwdCA9IHNjcmlwdC5yZXBsYWNlKC9ebW9iaWxlOi8sICcnKS50cmltKCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZU1vYmlsZShzY3JpcHQsIF8uaXNBcnJheShhcmdzKSA/IGFyZ3NbMF0gOiBhcmdzKTtcbiAgfSBlbHNlIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgYXJncyA9IHRoaXMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMoYXJncyk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBhcmdzXSk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhyZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVBc3luYyA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBc3luYyAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgYXJncyA9IHRoaXMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMoYXJncyk7XG4gIHRoaXMuYXN5bmNXYWl0TXMgPSB0aGlzLmFzeW5jV2FpdE1zIHx8IDA7XG4gIGNvbnN0IHByb21pc2UgPSB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbUFzeW5jKCdleGVjdXRlX2FzeW5jX3NjcmlwdCcsIFtcbiAgICBzY3JpcHQsIGFyZ3MsIHRoaXMuYXN5bmNXYWl0TXNcbiAgXSwgdGhpcy5jdXJXZWJGcmFtZXMpO1xuICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSkpO1xufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlTW9iaWxlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZU1vYmlsZSAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGNvbW1hbmRNYXAgPSB7XG4gICAgLy9yZWdpb24gZ2VzdHVyZXMgc3VwcG9ydFxuICAgIHRhcDogJ21vYmlsZVRhcCcsXG4gICAgc2Nyb2xsOiAnbW9iaWxlU2Nyb2xsJyxcbiAgICBzZWxlY3RQaWNrZXJXaGVlbFZhbHVlOiAnbW9iaWxlU2VsZWN0UGlja2VyV2hlZWxWYWx1ZScsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2Njgtc3dpcGVsZWZ0P2xhbmd1YWdlPW9iamNcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3NC1zd2lwZXJpZ2h0P2xhbmd1YWdlPW9iamNcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2Ny1zd2lwZXVwP2xhbmd1YWdlPW9iamNcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2NC1zd2lwZWRvd24/bGFuZ3VhZ2U9b2JqY1xuICAgIHN3aXBlOiAnbW9iaWxlU3dpcGUnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY5LXBpbmNod2l0aHNjYWxlP2xhbmd1YWdlPW9iamNcbiAgICBwaW5jaDogJ21vYmlsZVBpbmNoJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3My1kb3VibGV0YXA/bGFuZ3VhZ2U9b2JqY1xuICAgIGRvdWJsZVRhcDogJ21vYmlsZURvdWJsZVRhcCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzUtdHdvZmluZ2VydGFwP2xhbmd1YWdlPW9iamNcbiAgICB0d29GaW5nZXJUYXA6ICdtb2JpbGVUd29GaW5nZXJUYXAnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjcxLXRhcHdpdGhudW1iZXJvZnRhcHM/bGFuZ3VhZ2U9b2JqY1xuICAgIHRhcFdpdGhOdW1iZXJPZlRhcHM6ICdtb2JpbGVUYXBXaXRoTnVtYmVyT2ZUYXBzJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2My1wcmVzc2ZvcmR1cmF0aW9uP2xhbmd1YWdlPW9iamNcbiAgICB0b3VjaEFuZEhvbGQ6ICdtb2JpbGVUb3VjaEFuZEhvbGQnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjcwLXByZXNzZm9yZHVyYXRpb24/bGFuZ3VhZ2U9b2JqY1xuICAgIGRyYWdGcm9tVG9Gb3JEdXJhdGlvbjogJ21vYmlsZURyYWdGcm9tVG9Gb3JEdXJhdGlvbicsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjUtcm90YXRlP2xhbmd1YWdlPW9iamNcbiAgICByb3RhdGVFbGVtZW50OiAnbW9iaWxlUm90YXRlRWxlbWVudCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWljb29yZGluYXRlLzM1NTE2OTItcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgZHJhZ0Zyb21Ub1dpdGhWZWxvY2l0eTogJ21vYmlsZURyYWdGcm9tVG9XaXRoVmVsb2NpdHknLFxuICAgIGZvcmNlUHJlc3M6ICdtb2JpbGVGb3JjZVByZXNzJyxcbiAgICBzY3JvbGxUb0VsZW1lbnQ6ICdtb2JpbGVTY3JvbGxUb0VsZW1lbnQnLFxuXG4gICAgLy9lbmRyZWdpb24gZ2VzdHVyZXMgc3VwcG9ydFxuICAgIGFsZXJ0OiAnbW9iaWxlSGFuZGxlQWxlcnQnLFxuXG4gICAgc2V0UGFzdGVib2FyZDogJ21vYmlsZVNldFBhc3RlYm9hcmQnLFxuICAgIGdldFBhc3RlYm9hcmQ6ICdtb2JpbGVHZXRQYXN0ZWJvYXJkJyxcblxuICAgIHNvdXJjZTogJ21vYmlsZUdldFNvdXJjZScsXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICAvL3JlZ2lvbiBtdWx0aXBsZSBhcHBzIG1hbmFnZW1lbnRcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcmVtb3ZlQXBwOiAnbW9iaWxlUmVtb3ZlQXBwJyxcbiAgICBsYXVuY2hBcHA6ICdtb2JpbGVMYXVuY2hBcHAnLFxuICAgIHRlcm1pbmF0ZUFwcDogJ21vYmlsZVRlcm1pbmF0ZUFwcCcsXG4gICAga2lsbEFwcDogJ21vYmlsZUtpbGxBcHAnLFxuICAgIHF1ZXJ5QXBwU3RhdGU6ICdtb2JpbGVRdWVyeUFwcFN0YXRlJyxcbiAgICBhY3RpdmF0ZUFwcDogJ21vYmlsZUFjdGl2YXRlQXBwJyxcbiAgICBsaXN0QXBwczogJ21vYmlsZUxpc3RBcHBzJyxcbiAgICAvL2VuZHJlZ2lvbiBtdWx0aXBsZSBhcHBzIG1hbmFnZW1lbnRcblxuICAgIHZpZXdwb3J0U2NyZWVuc2hvdDogJ2dldFZpZXdwb3J0U2NyZWVuc2hvdCcsXG4gICAgdmlld3BvcnRSZWN0OiAnZ2V0Vmlld3BvcnRSZWN0JyxcblxuICAgIHN0YXJ0UGVyZlJlY29yZDogJ21vYmlsZVN0YXJ0UGVyZlJlY29yZCcsXG4gICAgc3RvcFBlcmZSZWNvcmQ6ICdtb2JpbGVTdG9wUGVyZlJlY29yZCcsXG5cbiAgICBpbnN0YWxsQ2VydGlmaWNhdGU6ICdtb2JpbGVJbnN0YWxsQ2VydGlmaWNhdGUnLFxuICAgIGxpc3RDZXJ0aWZpY2F0ZXM6ICdtb2JpbGVMaXN0Q2VydGlmaWNhdGVzJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG4gICAgZ2V0RGV2aWNlVGltZTogJ21vYmlsZUdldERldmljZVRpbWUnLFxuICAgIGFjdGl2ZUFwcEluZm86ICdtb2JpbGVHZXRBY3RpdmVBcHBJbmZvJyxcbiAgICBkZXZpY2VTY3JlZW5JbmZvOiAnZ2V0U2NyZWVuSW5mbycsXG5cbiAgICBwcmVzc0J1dHRvbjogJ21vYmlsZVByZXNzQnV0dG9uJyxcblxuICAgIGVucm9sbEJpb21ldHJpYzogJ21vYmlsZUVucm9sbEJpb21ldHJpYycsXG4gICAgc2VuZEJpb21ldHJpY01hdGNoOiAnbW9iaWxlU2VuZEJpb21ldHJpY01hdGNoJyxcbiAgICBpc0Jpb21ldHJpY0Vucm9sbGVkOiAnbW9iaWxlSXNCaW9tZXRyaWNFbnJvbGxlZCcsXG5cbiAgICBjbGVhcktleWNoYWluczogJ21vYmlsZUNsZWFyS2V5Y2hhaW5zJyxcblxuICAgIGdldFBlcm1pc3Npb246ICdtb2JpbGVHZXRQZXJtaXNzaW9uJyxcbiAgICBzZXRQZXJtaXNzaW9uOiAnbW9iaWxlU2V0UGVybWlzc2lvbnMnLFxuICAgIHJlc2V0UGVybWlzc2lvbjogJ21vYmlsZVJlc2V0UGVybWlzc2lvbicsXG5cbiAgICBnZXRBcHBlYXJhbmNlOiAnbW9iaWxlR2V0QXBwZWFyYW5jZScsXG4gICAgc2V0QXBwZWFyYW5jZTogJ21vYmlsZVNldEFwcGVhcmFuY2UnLFxuXG4gICAgc2lyaUNvbW1hbmQ6ICdtb2JpbGVTaXJpQ29tbWFuZCcsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuICAgIGRlbGV0ZUZvbGRlcjogJ21vYmlsZURlbGV0ZUZvbGRlcicsXG5cbiAgICBzdGFydEF1ZGlvUmVjb3JkaW5nOiAnc3RhcnRBdWRpb1JlY29yZGluZycsXG4gICAgc3RvcEF1ZGlvUmVjb3JkaW5nOiAnc3RvcEF1ZGlvUmVjb3JkaW5nJyxcblxuICAgIC8vIFhDVGVzdFxuICAgIHJ1blhDVGVzdDogJ21vYmlsZVJ1blhDVGVzdCcsXG4gICAgaW5zdGFsbFhDVGVzdEJ1bmRsZTogJ21vYmlsZUluc3RhbGxYQ1Rlc3RCdW5kbGUnLFxuICAgIGxpc3RYQ1Rlc3RCdW5kbGVzOiAnbW9iaWxlTGlzdFhDVGVzdEJ1bmRsZXMnLFxuICAgIGxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlOiAnbW9iaWxlTGlzdFhDVGVzdHNJblRlc3RCdW5kbGUnLFxuXG4gICAgcHVzaE5vdGlmaWNhdGlvbjogJ21vYmlsZVB1c2hOb3RpZmljYXRpb24nLFxuICAgIGV4cGVjdE5vdGlmaWNhdGlvbjogJ21vYmlsZUV4cGVjdE5vdGlmaWNhdGlvbicsXG5cbiAgICBwZXJmb3JtSW9IaWRFdmVudDogJ21vYmlsZVBlcmZvcm1Jb0hpZEV2ZW50JyxcblxuICAgIGNvbmZpZ3VyZUxvY2FsaXphdGlvbjogJ21vYmlsZUNvbmZpZ3VyZUxvY2FsaXphdGlvbicsXG5cbiAgICByZXNldExvY2F0aW9uU2VydmljZTogJ21vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlJyxcblxuICAgIHN0YXJ0UGNhcDogJ21vYmlsZVN0YXJ0UGNhcCcsXG4gICAgc3RvcFBjYXA6ICdtb2JpbGVTdG9wUGNhcCcsXG4gICAgbGlzdENvbmRpdGlvbkluZHVjZXJzOiAnbW9iaWxlTGlzdENvbmRpdGlvbkluZHVjZXJzJyxcbiAgICBlbmFibGVDb25kaXRpb25JbmR1Y2VyOiAnbW9iaWxlRW5hYmxlQ29uZGl0aW9uSW5kdWNlcicsXG4gICAgZGlzYWJsZUNvbmRpdGlvbkluZHVjZXI6ICdtb2JpbGVEaXNhYmxlQ29uZGl0aW9uSW5kdWNlcicsXG4gIH07XG5cbiAgaWYgKCFfLmhhcyhjb21tYW5kTWFwLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCAnJHttb2JpbGVDb21tYW5kfScuIE9ubHkgJHtfLmtleXMoY29tbWFuZE1hcCkuam9pbignLCAnKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1tjb21tYW5kTWFwW21vYmlsZUNvbW1hbmRdXShvcHRzKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHLEVBQW5COztBQUVBQSxVQUFVLENBQUNDLG9CQUFYLEdBQWtDLGVBQWVBLG9CQUFmLENBQXFDQyxN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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","names":["extensions","receiveAsyncResponse","status","value","log","debug","JSON","stringify","util","hasValue","asyncPromise","warn","reject","errorFromCode","message","_","isString","error","errorFromW3CJsonCode","stacktrace","resolve","execute","script","args","match","replace","trim","executeMobile","isArray","isWebContext","convertElementsForAtoms","result","executeAtom","cacheWebElements","errors","NotImplementedError","executeAsync","asyncWaitMs","promise","remote","executeAtomAsync","curWebFrames","waitForAtom","mobileCommand","opts","commandMap","tap","scroll","selectPickerWheelValue","swipe","pinch","doubleTap","twoFingerTap","tapWithNumberOfTaps","touchAndHold","dragFromToForDuration","rotateElement","dragFromToWithVelocity","forcePress","scrollToElement","alert","setPasteboard","getPasteboard","source","getContexts","installApp","isAppInstalled","removeApp","launchApp","terminateApp","killApp","queryAppState","activateApp","listApps","viewportScreenshot","viewportRect","startPerfRecord","stopPerfRecord","installCertificate","listCertificates","startLogsBroadcast","stopLogsBroadcast","batteryInfo","deviceInfo","getDeviceTime","activeAppInfo","deviceScreenInfo","pressButton","enrollBiometric","sendBiometricMatch","isBiometricEnrolled","clearKeychains","getPermission","setPermission","resetPermission","getAppearance","setAppearance","siriCommand","pushFile","pullFile","pullFolder","deleteFile","deleteFolder","startAudioRecording","stopAudioRecording","runXCTest","installXCTestBundle","listXCTestBundles","listXCTestsInTestBundle","pushNotification","expectNotification","performIoHidEvent","configureLocalization","resetLocationService","startPcap","stopPcap","listConditionInducers","enableConditionInducer","disableConditionInducer","has","UnknownCommandError","keys","join"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport {\n errors, errorFromCode, errorFromW3CJsonCode\n} from 'appium/driver';\nimport { util } from 'appium/support';\n\nconst extensions = {};\n\nextensions.receiveAsyncResponse = async function receiveAsyncResponse (status, value) { // eslint-disable-line require-await\n this.log.debug(`Received async response: ${JSON.stringify(value)}`);\n if (!util.hasValue(this.asyncPromise)) {\n this.log.warn(`Received async response when we were not expecting one! ` +\n `Response was: ${JSON.stringify(value)}`);\n return;\n }\n\n if (util.hasValue(status) && status !== 0) {\n // MJSONWP\n return this.asyncPromise.reject(errorFromCode(status, value.message));\n }\n if (!util.hasValue(status) && value && _.isString(value.error)) {\n // W3C\n return this.asyncPromise.reject(errorFromW3CJsonCode(value.error, value.message, value.stacktrace));\n }\n return this.asyncPromise.resolve(value);\n};\n\nextensions.execute = async function execute (script, args) {\n if (script.match(/^mobile:/)) {\n script = script.replace(/^mobile:/, '').trim();\n return await this.executeMobile(script, _.isArray(args) ? args[0] : args);\n } else if (this.isWebContext()) {\n args = this.convertElementsForAtoms(args);\n const result = await this.executeAtom('execute_script', [script, args]);\n return this.cacheWebElements(result);\n } else {\n throw new errors.NotImplementedError();\n }\n};\n\nextensions.executeAsync = async function executeAsync (script, args) {\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n\n args = this.convertElementsForAtoms(args);\n this.asyncWaitMs = this.asyncWaitMs || 0;\n const promise = this.remote.executeAtomAsync('execute_async_script', [\n script, args, this.asyncWaitMs\n ], this.curWebFrames);\n return this.cacheWebElements(await this.waitForAtom(promise));\n};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const commandMap = {\n //region gestures support\n tap: 'mobileTap',\n scroll: 'mobileScroll',\n selectPickerWheelValue: 'mobileSelectPickerWheelValue',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618668-swipeleft?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618674-swiperight?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618667-swipeup?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618664-swipedown?language=objc\n swipe: 'mobileSwipe',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618669-pinchwithscale?language=objc\n pinch: 'mobilePinch',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618673-doubletap?language=objc\n doubleTap: 'mobileDoubleTap',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618675-twofingertap?language=objc\n twoFingerTap: 'mobileTwoFingerTap',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618671-tapwithnumberoftaps?language=objc\n tapWithNumberOfTaps: 'mobileTapWithNumberOfTaps',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618663-pressforduration?language=objc\n touchAndHold: 'mobileTouchAndHold',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618670-pressforduration?language=objc\n dragFromToForDuration: 'mobileDragFromToForDuration',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618665-rotate?language=objc\n rotateElement: 'mobileRotateElement',\n // https://developer.apple.com/documentation/xctest/xcuicoordinate/3551692-pressforduration?language=objc\n dragFromToWithVelocity: 'mobileDragFromToWithVelocity',\n forcePress: 'mobileForcePress',\n scrollToElement: 'mobileScrollToElement',\n\n //endregion gestures support\n alert: 'mobileHandleAlert',\n\n setPasteboard: 'mobileSetPasteboard',\n getPasteboard: 'mobileGetPasteboard',\n\n source: 'mobileGetSource',\n getContexts: 'mobileGetContexts',\n\n //region multiple apps management\n installApp: 'mobileInstallApp',\n isAppInstalled: 'mobileIsAppInstalled',\n removeApp: 'mobileRemoveApp',\n launchApp: 'mobileLaunchApp',\n terminateApp: 'mobileTerminateApp',\n killApp: 'mobileKillApp',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n listApps: 'mobileListApps',\n //endregion multiple apps management\n\n viewportScreenshot: 'getViewportScreenshot',\n viewportRect: 'getViewportRect',\n\n startPerfRecord: 'mobileStartPerfRecord',\n stopPerfRecord: 'mobileStopPerfRecord',\n\n installCertificate: 'mobileInstallCertificate',\n listCertificates: 'mobileListCertificates',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n batteryInfo: 'mobileGetBatteryInfo',\n deviceInfo: 'mobileGetDeviceInfo',\n getDeviceTime: 'mobileGetDeviceTime',\n activeAppInfo: 'mobileGetActiveAppInfo',\n deviceScreenInfo: 'getScreenInfo',\n\n pressButton: 'mobilePressButton',\n\n enrollBiometric: 'mobileEnrollBiometric',\n sendBiometricMatch: 'mobileSendBiometricMatch',\n isBiometricEnrolled: 'mobileIsBiometricEnrolled',\n\n clearKeychains: 'mobileClearKeychains',\n\n getPermission: 'mobileGetPermission',\n setPermission: 'mobileSetPermissions',\n resetPermission: 'mobileResetPermission',\n\n getAppearance: 'mobileGetAppearance',\n setAppearance: 'mobileSetAppearance',\n\n siriCommand: 'mobileSiriCommand',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n deleteFolder: 'mobileDeleteFolder',\n\n startAudioRecording: 'startAudioRecording',\n stopAudioRecording: 'stopAudioRecording',\n\n // XCTest\n runXCTest: 'mobileRunXCTest',\n installXCTestBundle: 'mobileInstallXCTestBundle',\n listXCTestBundles: 'mobileListXCTestBundles',\n listXCTestsInTestBundle: 'mobileListXCTestsInTestBundle',\n\n pushNotification: 'mobilePushNotification',\n expectNotification: 'mobileExpectNotification',\n\n performIoHidEvent: 'mobilePerformIoHidEvent',\n\n configureLocalization: 'mobileConfigureLocalization',\n\n resetLocationService: 'mobileResetLocationService',\n\n startPcap: 'mobileStartPcap',\n stopPcap: 'mobileStopPcap',\n listConditionInducers: 'mobileListConditionInducers',\n enableConditionInducer: 'mobileEnableConditionInducer',\n disableConditionInducer: 'mobileDisableConditionInducer',\n };\n\n if (!_.has(commandMap, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command '${mobileCommand}'. Only ${_.keys(commandMap).join(', ')} commands are supported.`);\n }\n return await this[commandMap[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":"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"}