appium-webdriveragent 4.9.0 → 4.9.2
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.
- package/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.m +9 -1
- package/WebDriverAgentRunner-Runner.app.zip +0 -0
- package/WebDriverAgentTests/UnitTests/Doubles/XCElementSnapshotDouble.h +1 -0
- package/WebDriverAgentTests/UnitTests/Doubles/XCElementSnapshotDouble.m +1 -5
- package/WebDriverAgentTests/UnitTests/FBXPathTests.m +2 -1
- package/build/index.js +1 -10
- package/build/lib/check-dependencies.js +1 -18
- package/build/lib/check-dependencies.js.map +1 -1
- package/build/lib/constants.js +1 -7
- package/build/lib/constants.js.map +1 -1
- package/build/lib/logger.js +1 -5
- package/build/lib/logger.js.map +1 -1
- package/build/lib/no-session-proxy.js +1 -10
- package/build/lib/no-session-proxy.js.map +1 -1
- package/build/lib/utils.js +8 -75
- package/build/lib/utils.js.map +1 -1
- package/build/lib/webdriveragent.js +2 -86
- package/build/lib/webdriveragent.js.map +1 -1
- package/build/lib/xcodebuild.js +5 -71
- package/build/lib/xcodebuild.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webdriveragent.js","names":["WDA_LAUNCH_TIMEOUT","WDA_AGENT_PORT","WDA_CF_BUNDLE_NAME","SHARED_RESOURCES_GUARD","AsyncLock","WebDriverAgent","constructor","xcodeVersion","args","log","_","clone","defaultLogger","device","platformVersion","platformName","iosSdkVersion","host","isRealDevice","realDevice","idb","wdaBundlePath","setWDAPaths","bootstrapPath","agentPath","wdaLocalPort","wdaRemotePort","wdaBaseUrl","WDA_BASE_URL","prebuildWDA","webDriverAgentUrl","started","wdaConnectionTimeout","useXctestrunFile","usePrebuiltWDA","derivedDataPath","mjpegServerPort","updatedWDABundleId","xcodebuild","XcodeBuild","showXcodeLog","xcodeConfigFile","xcodeOrgId","xcodeSigningId","keychainPath","keychainPassword","useSimpleBuildTest","launchTimeout","wdaLaunchTimeout","allowProvisioningDeviceRegistration","resultBundlePath","resultBundleVersion","BOOTSTRAP_PATH","info","path","resolve","cleanupObsoleteProcesses","obsoletePids","getPIDsListeningOnPort","url","port","cmdLine","includes","toLowerCase","udid","isEmpty","debug","length","exec","e","warn","message","isRunning","getStatus","basePath","noSessionProxy","NoSessionProxy","server","hostname","base","timeout","command","err","href","uninstall","bundleIds","getUserInstalledBundleIdsByBundleName","bundleId","removeApp","_cleanupProjectIfFresh","homeFolder","process","env","HOME","currentUpgradeTimestamp","getWDAUpgradeTimestamp","isInteger","timestampPath","WDA_UPGRADE_TIMESTAMP_PATH","didTimestampExist","fs","exists","access","W_OK","ign","recentUpgradeTimestamp","parseInt","readFile","mkdirp","dirname","writeFile","cleanProject","launch","sessionId","setupProxies","Error","synchronizationKey","normalize","acquire","resetTestProcesses","startWithIDB","init","prebuild","start","wdaBundleId","testBundleId","prepareWDA","USE_PORT","WDA_PRODUCT_BUNDLE_IDENTIFIER","MJPEG_SERVER_PORT","runXCUITest","parseBundleId","infoPlistPath","join","infoPlist","plist","parsePlist","CFBundleIdentifier","fetchWDABundle","isAppInstalled","installApp","installXCTestBundle","bundleWDASim","wdaBundlePaths","glob","WDA_RUNNER_APP","absolute","isSourceFresh","existsPromises","sep","map","subPath","B","all","some","v","proxyOpts","keepAlive","jwproxy","JWProxy","proxyReqRes","bind","quit","reset","_url","parse","protocol","fullyStarted","retrieveDerivedDataPath","setupCaching","status","build","productBundleIdentifier","upgradedAt","util","hasValue","WDA_RUNNER_BUNDLE_ID","actualUpgradeTimestamp","toLower","quitAndUninstall"],"sources":["../../lib/webdriveragent.js"],"sourcesContent":["import _ from 'lodash';\nimport path from 'path';\nimport url from 'url';\nimport B from 'bluebird';\nimport { JWProxy } from 'appium/driver';\nimport { fs, util, plist, mkdirp } from 'appium/support';\nimport defaultLogger from './logger';\nimport { NoSessionProxy } from './no-session-proxy';\nimport {\n getWDAUpgradeTimestamp, resetTestProcesses, getPIDsListeningOnPort, BOOTSTRAP_PATH\n} from './utils';\nimport XcodeBuild from './xcodebuild';\nimport AsyncLock from 'async-lock';\nimport { exec } from 'teen_process';\nimport { bundleWDASim } from './check-dependencies';\nimport {\n WDA_RUNNER_BUNDLE_ID, WDA_RUNNER_APP, WDA_BASE_URL, WDA_UPGRADE_TIMESTAMP_PATH,\n} from './constants';\n\nconst WDA_LAUNCH_TIMEOUT = 60 * 1000;\nconst WDA_AGENT_PORT = 8100;\nconst WDA_CF_BUNDLE_NAME = 'WebDriverAgentRunner-Runner';\nconst SHARED_RESOURCES_GUARD = new AsyncLock();\n\nclass WebDriverAgent {\n constructor (xcodeVersion, args = {}, log = null) {\n this.xcodeVersion = xcodeVersion;\n\n this.args = _.clone(args);\n this.log = log ?? defaultLogger;\n\n this.device = args.device;\n this.platformVersion = args.platformVersion;\n this.platformName = args.platformName;\n this.iosSdkVersion = args.iosSdkVersion;\n this.host = args.host;\n this.isRealDevice = !!args.realDevice;\n this.idb = (args.device || {}).idb;\n this.wdaBundlePath = args.wdaBundlePath;\n\n this.setWDAPaths(args.bootstrapPath, args.agentPath);\n\n this.wdaLocalPort = args.wdaLocalPort;\n this.wdaRemotePort = args.wdaLocalPort || WDA_AGENT_PORT;\n this.wdaBaseUrl = args.wdaBaseUrl || WDA_BASE_URL;\n\n this.prebuildWDA = args.prebuildWDA;\n\n this.webDriverAgentUrl = args.webDriverAgentUrl;\n\n this.started = false;\n\n this.wdaConnectionTimeout = args.wdaConnectionTimeout;\n\n this.useXctestrunFile = args.useXctestrunFile;\n this.usePrebuiltWDA = args.usePrebuiltWDA;\n this.derivedDataPath = args.derivedDataPath;\n this.mjpegServerPort = args.mjpegServerPort;\n\n this.updatedWDABundleId = args.updatedWDABundleId;\n\n this.xcodebuild = new XcodeBuild(this.xcodeVersion, this.device, {\n platformVersion: this.platformVersion,\n platformName: this.platformName,\n iosSdkVersion: this.iosSdkVersion,\n agentPath: this.agentPath,\n bootstrapPath: this.bootstrapPath,\n realDevice: this.isRealDevice,\n showXcodeLog: args.showXcodeLog,\n xcodeConfigFile: args.xcodeConfigFile,\n xcodeOrgId: args.xcodeOrgId,\n xcodeSigningId: args.xcodeSigningId,\n keychainPath: args.keychainPath,\n keychainPassword: args.keychainPassword,\n useSimpleBuildTest: args.useSimpleBuildTest,\n usePrebuiltWDA: args.usePrebuiltWDA,\n updatedWDABundleId: this.updatedWDABundleId,\n launchTimeout: args.wdaLaunchTimeout || WDA_LAUNCH_TIMEOUT,\n wdaRemotePort: this.wdaRemotePort,\n useXctestrunFile: this.useXctestrunFile,\n derivedDataPath: args.derivedDataPath,\n mjpegServerPort: this.mjpegServerPort,\n allowProvisioningDeviceRegistration: args.allowProvisioningDeviceRegistration,\n resultBundlePath: args.resultBundlePath,\n resultBundleVersion: args.resultBundleVersion,\n }, this.log);\n }\n\n setWDAPaths (bootstrapPath, agentPath) {\n // allow the user to specify a place for WDA. This is undocumented and\n // only here for the purposes of testing development of WDA\n this.bootstrapPath = bootstrapPath || BOOTSTRAP_PATH;\n this.log.info(`Using WDA path: '${this.bootstrapPath}'`);\n\n // for backward compatibility we need to be able to specify agentPath too\n this.agentPath = agentPath || path.resolve(this.bootstrapPath, 'WebDriverAgent.xcodeproj');\n this.log.info(`Using WDA agent: '${this.agentPath}'`);\n }\n\n async cleanupObsoleteProcesses () {\n const obsoletePids = await getPIDsListeningOnPort(this.url.port,\n (cmdLine) => cmdLine.includes('/WebDriverAgentRunner') &&\n !cmdLine.toLowerCase().includes(this.device.udid.toLowerCase()));\n\n if (_.isEmpty(obsoletePids)) {\n this.log.debug(`No obsolete cached processes from previous WDA sessions ` +\n `listening on port ${this.url.port} have been found`);\n return;\n }\n\n this.log.info(`Detected ${obsoletePids.length} obsolete cached process${obsoletePids.length === 1 ? '' : 'es'} ` +\n `from previous WDA sessions. Cleaning them up`);\n try {\n await exec('kill', obsoletePids);\n } catch (e) {\n this.log.warn(`Failed to kill obsolete cached process${obsoletePids.length === 1 ? '' : 'es'} '${obsoletePids}'. ` +\n `Original error: ${e.message}`);\n }\n }\n\n /**\n * Return boolean if WDA is running or not\n * @return {boolean} True if WDA is running\n * @throws {Error} If there was invalid response code or body\n */\n async isRunning () {\n return !!(await this.getStatus());\n }\n\n get basePath () {\n if (this.url.path === '/') {\n return '';\n }\n return this.url.path || '';\n }\n\n /**\n * Return current running WDA's status like below\n * {\n * \"state\": \"success\",\n * \"os\": {\n * \"name\": \"iOS\",\n * \"version\": \"11.4\",\n * \"sdkVersion\": \"11.3\"\n * },\n * \"ios\": {\n * \"simulatorVersion\": \"11.4\",\n * \"ip\": \"172.254.99.34\"\n * },\n * \"build\": {\n * \"time\": \"Jun 24 2018 17:08:21\",\n * \"productBundleIdentifier\": \"com.facebook.WebDriverAgentRunner\"\n * }\n * }\n *\n * @return {?object} State Object\n * @throws {Error} If there was invalid response code or body\n */\n async getStatus () {\n const noSessionProxy = new NoSessionProxy({\n server: this.url.hostname,\n port: this.url.port,\n base: this.basePath,\n timeout: 3000,\n });\n try {\n return await noSessionProxy.command('/status', 'GET');\n } catch (err) {\n this.log.debug(`WDA is not listening at '${this.url.href}'`);\n return null;\n }\n }\n\n /**\n * Uninstall WDAs from the test device.\n * Over Xcode 11, multiple WDA can be in the device since Xcode 11 generates different WDA.\n * Appium does not expect multiple WDAs are running on a device.\n */\n async uninstall () {\n try {\n const bundleIds = await this.device.getUserInstalledBundleIdsByBundleName(WDA_CF_BUNDLE_NAME);\n if (_.isEmpty(bundleIds)) {\n this.log.debug('No WDAs on the device.');\n return;\n }\n\n this.log.debug(`Uninstalling WDAs: '${bundleIds}'`);\n for (const bundleId of bundleIds) {\n await this.device.removeApp(bundleId);\n }\n } catch (e) {\n this.log.debug(e);\n this.log.warn(`WebDriverAgent uninstall failed. Perhaps, it is already uninstalled? ` +\n `Original error: ${e.message}`);\n }\n }\n\n async _cleanupProjectIfFresh () {\n const homeFolder = process.env.HOME;\n if (!homeFolder) {\n this.log.info('The HOME folder path cannot be determined');\n return;\n }\n\n const currentUpgradeTimestamp = await getWDAUpgradeTimestamp();\n if (!_.isInteger(currentUpgradeTimestamp)) {\n this.log.info('It is impossible to determine the timestamp of the package');\n return;\n }\n\n const timestampPath = path.resolve(homeFolder, WDA_UPGRADE_TIMESTAMP_PATH);\n const didTimestampExist = await fs.exists(timestampPath);\n if (didTimestampExist) {\n try {\n await fs.access(timestampPath, fs.W_OK);\n } catch (ign) {\n this.log.info(`WebDriverAgent upgrade timestamp at '${timestampPath}' is not writeable. ` +\n `Skipping sources cleanup`);\n return;\n }\n const recentUpgradeTimestamp = parseInt(await fs.readFile(timestampPath, 'utf8'), 10);\n if (_.isInteger(recentUpgradeTimestamp)) {\n if (recentUpgradeTimestamp >= currentUpgradeTimestamp) {\n this.log.info(`WebDriverAgent does not need a cleanup. The sources are up to date ` +\n `(${recentUpgradeTimestamp} >= ${currentUpgradeTimestamp})`);\n return;\n }\n this.log.info(`WebDriverAgent sources have been upgraded ` +\n `(${recentUpgradeTimestamp} < ${currentUpgradeTimestamp})`);\n } else {\n this.log.warn(`The recent upgrade timestamp at '${timestampPath}' is corrupted. Trying to fix it`);\n }\n }\n\n try {\n await mkdirp(path.dirname(timestampPath));\n await fs.writeFile(timestampPath, `${currentUpgradeTimestamp}`, 'utf8');\n this.log.debug(`Stored the recent WebDriverAgent upgrade timestamp ${currentUpgradeTimestamp} ` +\n `at '${timestampPath}'`);\n } catch (e) {\n this.log.info(`Unable to create the recent WebDriverAgent upgrade timestamp at '${timestampPath}'. ` +\n `Original error: ${e.message}`);\n return;\n }\n\n if (!didTimestampExist) {\n this.log.info('There is no need to perform the project cleanup. A fresh install has been detected');\n return;\n }\n\n try {\n await this.xcodebuild.cleanProject();\n } catch (e) {\n this.log.warn(`Cannot perform WebDriverAgent project cleanup. Original error: ${e.message}`);\n }\n }\n\n /**\n * Return current running WDA's status like below after launching WDA\n * {\n * \"state\": \"success\",\n * \"os\": {\n * \"name\": \"iOS\",\n * \"version\": \"11.4\",\n * \"sdkVersion\": \"11.3\"\n * },\n * \"ios\": {\n * \"simulatorVersion\": \"11.4\",\n * \"ip\": \"172.254.99.34\"\n * },\n * \"build\": {\n * \"time\": \"Jun 24 2018 17:08:21\",\n * \"productBundleIdentifier\": \"com.facebook.WebDriverAgentRunner\"\n * }\n * }\n *\n * @param {string} sessionId Launch WDA and establish the session with this sessionId\n * @return {?object} State Object\n * @throws {Error} If there was invalid response code or body\n */\n async launch (sessionId) {\n if (this.webDriverAgentUrl) {\n this.log.info(`Using provided WebdriverAgent at '${this.webDriverAgentUrl}'`);\n this.url = this.webDriverAgentUrl;\n this.setupProxies(sessionId);\n return await this.getStatus();\n }\n\n this.log.info('Launching WebDriverAgent on the device');\n\n this.setupProxies(sessionId);\n\n if (!this.useXctestrunFile && !await fs.exists(this.agentPath)) {\n throw new Error(`Trying to use WebDriverAgent project at '${this.agentPath}' but the ` +\n 'file does not exist');\n }\n\n // useXctestrunFile and usePrebuiltWDA use existing dependencies\n // It depends on user side\n if (this.idb || this.useXctestrunFile || (this.derivedDataPath && this.usePrebuiltWDA)) {\n this.log.info('Skipped WDA project cleanup according to the provided capabilities');\n } else {\n const synchronizationKey = path.normalize(this.bootstrapPath);\n await SHARED_RESOURCES_GUARD.acquire(synchronizationKey,\n async () => await this._cleanupProjectIfFresh());\n }\n\n // We need to provide WDA local port, because it might be occupied\n await resetTestProcesses(this.device.udid, !this.isRealDevice);\n\n if (this.idb) {\n return await this.startWithIDB();\n }\n\n await this.xcodebuild.init(this.noSessionProxy);\n\n // Start the xcodebuild process\n if (this.prebuildWDA) {\n await this.xcodebuild.prebuild();\n }\n return await this.xcodebuild.start();\n }\n\n async startWithIDB () {\n this.log.info('Will launch WDA with idb instead of xcodebuild since the corresponding flag is enabled');\n const {wdaBundleId, testBundleId} = await this.prepareWDA();\n const env = {\n USE_PORT: this.wdaRemotePort,\n WDA_PRODUCT_BUNDLE_IDENTIFIER: this.updatedWDABundleId,\n };\n if (this.mjpegServerPort) {\n env.MJPEG_SERVER_PORT = this.mjpegServerPort;\n }\n\n return await this.idb.runXCUITest(wdaBundleId, wdaBundleId, testBundleId, {env});\n }\n\n async parseBundleId (wdaBundlePath) {\n const infoPlistPath = path.join(wdaBundlePath, 'Info.plist');\n const infoPlist = await plist.parsePlist(await fs.readFile(infoPlistPath));\n if (!infoPlist.CFBundleIdentifier) {\n throw new Error(`Could not find bundle id in '${infoPlistPath}'`);\n }\n return infoPlist.CFBundleIdentifier;\n }\n\n async prepareWDA () {\n const wdaBundlePath = this.wdaBundlePath || await this.fetchWDABundle();\n const wdaBundleId = await this.parseBundleId(wdaBundlePath);\n if (!await this.device.isAppInstalled(wdaBundleId)) {\n await this.device.installApp(wdaBundlePath);\n }\n const testBundleId = await this.idb.installXCTestBundle(path.join(wdaBundlePath, 'PlugIns', 'WebDriverAgentRunner.xctest'));\n return {wdaBundleId, testBundleId, wdaBundlePath};\n }\n\n async fetchWDABundle () {\n if (!this.derivedDataPath) {\n return await bundleWDASim(this.xcodebuild);\n }\n const wdaBundlePaths = await fs.glob(`${this.derivedDataPath}/**/*${WDA_RUNNER_APP}/`, {\n absolute: true,\n });\n if (_.isEmpty(wdaBundlePaths)) {\n throw new Error(`Could not find the WDA bundle in '${this.derivedDataPath}'`);\n }\n return wdaBundlePaths[0];\n }\n\n async isSourceFresh () {\n const existsPromises = [\n 'Resources',\n `Resources${path.sep}WebDriverAgent.bundle`,\n ].map((subPath) => fs.exists(path.resolve(this.bootstrapPath, subPath)));\n return (await B.all(existsPromises)).some((v) => v === false);\n }\n\n setupProxies (sessionId) {\n const proxyOpts = {\n log: this.log,\n server: this.url.hostname,\n port: this.url.port,\n base: this.basePath,\n timeout: this.wdaConnectionTimeout,\n keepAlive: true,\n };\n\n this.jwproxy = new JWProxy(proxyOpts);\n this.jwproxy.sessionId = sessionId;\n this.proxyReqRes = this.jwproxy.proxyReqRes.bind(this.jwproxy);\n\n this.noSessionProxy = new NoSessionProxy(proxyOpts);\n }\n\n async quit () {\n this.log.info('Shutting down sub-processes');\n\n await this.xcodebuild.quit();\n await this.xcodebuild.reset();\n\n if (this.jwproxy) {\n this.jwproxy.sessionId = null;\n }\n\n this.started = false;\n\n if (!this.args.webDriverAgentUrl) {\n // if we populated the url ourselves (during `setupCaching` call, for instance)\n // then clean that up. If the url was supplied, we want to keep it\n this.webDriverAgentUrl = null;\n }\n }\n\n get url () {\n if (!this._url) {\n if (this.webDriverAgentUrl) {\n this._url = url.parse(this.webDriverAgentUrl);\n } else {\n const port = this.wdaLocalPort || WDA_AGENT_PORT;\n const {protocol, hostname} = url.parse(this.wdaBaseUrl || WDA_BASE_URL);\n this._url = url.parse(`${protocol}//${hostname}:${port}`);\n }\n }\n return this._url;\n }\n\n set url (_url) {\n this._url = url.parse(_url);\n }\n\n get fullyStarted () {\n return this.started;\n }\n\n set fullyStarted (started = false) {\n this.started = started;\n }\n\n async retrieveDerivedDataPath () {\n return await this.xcodebuild.retrieveDerivedDataPath();\n }\n\n /**\n * Reuse running WDA if it has the same bundle id with updatedWDABundleId.\n * Or reuse it if it has the default id without updatedWDABundleId.\n * Uninstall it if the method faces an exception for the above situation.\n *\n * @param {string} updatedWDABundleId BundleId you'd like to use\n */\n async setupCaching () {\n const status = await this.getStatus();\n if (!status || !status.build) {\n this.log.debug('WDA is currently not running. There is nothing to cache');\n return;\n }\n\n const {\n productBundleIdentifier,\n upgradedAt,\n } = status.build;\n // for real device\n if (util.hasValue(productBundleIdentifier) && util.hasValue(this.updatedWDABundleId) && this.updatedWDABundleId !== productBundleIdentifier) {\n this.log.info(`Will uninstall running WDA since it has different bundle id. The actual value is '${productBundleIdentifier}'.`);\n return await this.uninstall();\n }\n // for simulator\n if (util.hasValue(productBundleIdentifier) && !util.hasValue(this.updatedWDABundleId) && WDA_RUNNER_BUNDLE_ID !== productBundleIdentifier) {\n this.log.info(`Will uninstall running WDA since its bundle id is not equal to the default value ${WDA_RUNNER_BUNDLE_ID}`);\n return await this.uninstall();\n }\n\n const actualUpgradeTimestamp = await getWDAUpgradeTimestamp();\n this.log.debug(`Upgrade timestamp of the currently bundled WDA: ${actualUpgradeTimestamp}`);\n this.log.debug(`Upgrade timestamp of the WDA on the device: ${upgradedAt}`);\n if (actualUpgradeTimestamp && upgradedAt && _.toLower(`${actualUpgradeTimestamp}`) !== _.toLower(`${upgradedAt}`)) {\n this.log.info('Will uninstall running WDA since it has different version in comparison to the one ' +\n `which is bundled with appium-xcuitest-driver module (${actualUpgradeTimestamp} != ${upgradedAt})`);\n return await this.uninstall();\n }\n\n const message = util.hasValue(productBundleIdentifier)\n ? `Will reuse previously cached WDA instance at '${this.url.href}' with '${productBundleIdentifier}'`\n : `Will reuse previously cached WDA instance at '${this.url.href}'`;\n this.log.info(`${message}. Set the wdaLocalPort capability to a value different from ${this.url.port} if this is an undesired behavior.`);\n this.webDriverAgentUrl = this.url.href;\n }\n\n /**\n * Quit and uninstall running WDA.\n */\n async quitAndUninstall () {\n await this.quit();\n await this.uninstall();\n }\n}\n\nexport default WebDriverAgent;\nexport { WebDriverAgent };\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AACA;;AACA;;AAIA,MAAMA,kBAAkB,GAAG,KAAK,IAAhC;AACA,MAAMC,cAAc,GAAG,IAAvB;AACA,MAAMC,kBAAkB,GAAG,6BAA3B;AACA,MAAMC,sBAAsB,GAAG,IAAIC,kBAAJ,EAA/B;;AAEA,MAAMC,cAAN,CAAqB;EACnBC,WAAW,CAAEC,YAAF,EAAgBC,IAAI,GAAG,EAAvB,EAA2BC,GAAG,GAAG,IAAjC,EAAuC;IAChD,KAAKF,YAAL,GAAoBA,YAApB;IAEA,KAAKC,IAAL,GAAYE,eAAA,CAAEC,KAAF,CAAQH,IAAR,CAAZ;IACA,KAAKC,GAAL,GAAWA,GAAG,IAAIG,eAAlB;IAEA,KAAKC,MAAL,GAAcL,IAAI,CAACK,MAAnB;IACA,KAAKC,eAAL,GAAuBN,IAAI,CAACM,eAA5B;IACA,KAAKC,YAAL,GAAoBP,IAAI,CAACO,YAAzB;IACA,KAAKC,aAAL,GAAqBR,IAAI,CAACQ,aAA1B;IACA,KAAKC,IAAL,GAAYT,IAAI,CAACS,IAAjB;IACA,KAAKC,YAAL,GAAoB,CAAC,CAACV,IAAI,CAACW,UAA3B;IACA,KAAKC,GAAL,GAAW,CAACZ,IAAI,CAACK,MAAL,IAAe,EAAhB,EAAoBO,GAA/B;IACA,KAAKC,aAAL,GAAqBb,IAAI,CAACa,aAA1B;IAEA,KAAKC,WAAL,CAAiBd,IAAI,CAACe,aAAtB,EAAqCf,IAAI,CAACgB,SAA1C;IAEA,KAAKC,YAAL,GAAoBjB,IAAI,CAACiB,YAAzB;IACA,KAAKC,aAAL,GAAqBlB,IAAI,CAACiB,YAAL,IAAqBxB,cAA1C;IACA,KAAK0B,UAAL,GAAkBnB,IAAI,CAACmB,UAAL,IAAmBC,uBAArC;IAEA,KAAKC,WAAL,GAAmBrB,IAAI,CAACqB,WAAxB;IAEA,KAAKC,iBAAL,GAAyBtB,IAAI,CAACsB,iBAA9B;IAEA,KAAKC,OAAL,GAAe,KAAf;IAEA,KAAKC,oBAAL,GAA4BxB,IAAI,CAACwB,oBAAjC;IAEA,KAAKC,gBAAL,GAAwBzB,IAAI,CAACyB,gBAA7B;IACA,KAAKC,cAAL,GAAsB1B,IAAI,CAAC0B,cAA3B;IACA,KAAKC,eAAL,GAAuB3B,IAAI,CAAC2B,eAA5B;IACA,KAAKC,eAAL,GAAuB5B,IAAI,CAAC4B,eAA5B;IAEA,KAAKC,kBAAL,GAA0B7B,IAAI,CAAC6B,kBAA/B;IAEA,KAAKC,UAAL,GAAkB,IAAIC,mBAAJ,CAAe,KAAKhC,YAApB,EAAkC,KAAKM,MAAvC,EAA+C;MAC/DC,eAAe,EAAE,KAAKA,eADyC;MAE/DC,YAAY,EAAE,KAAKA,YAF4C;MAG/DC,aAAa,EAAE,KAAKA,aAH2C;MAI/DQ,SAAS,EAAE,KAAKA,SAJ+C;MAK/DD,aAAa,EAAE,KAAKA,aAL2C;MAM/DJ,UAAU,EAAE,KAAKD,YAN8C;MAO/DsB,YAAY,EAAEhC,IAAI,CAACgC,YAP4C;MAQ/DC,eAAe,EAAEjC,IAAI,CAACiC,eARyC;MAS/DC,UAAU,EAAElC,IAAI,CAACkC,UAT8C;MAU/DC,cAAc,EAAEnC,IAAI,CAACmC,cAV0C;MAW/DC,YAAY,EAAEpC,IAAI,CAACoC,YAX4C;MAY/DC,gBAAgB,EAAErC,IAAI,CAACqC,gBAZwC;MAa/DC,kBAAkB,EAAEtC,IAAI,CAACsC,kBAbsC;MAc/DZ,cAAc,EAAE1B,IAAI,CAAC0B,cAd0C;MAe/DG,kBAAkB,EAAE,KAAKA,kBAfsC;MAgB/DU,aAAa,EAAEvC,IAAI,CAACwC,gBAAL,IAAyBhD,kBAhBuB;MAiB/D0B,aAAa,EAAE,KAAKA,aAjB2C;MAkB/DO,gBAAgB,EAAE,KAAKA,gBAlBwC;MAmB/DE,eAAe,EAAE3B,IAAI,CAAC2B,eAnByC;MAoB/DC,eAAe,EAAE,KAAKA,eApByC;MAqB/Da,mCAAmC,EAAEzC,IAAI,CAACyC,mCArBqB;MAsB/DC,gBAAgB,EAAE1C,IAAI,CAAC0C,gBAtBwC;MAuB/DC,mBAAmB,EAAE3C,IAAI,CAAC2C;IAvBqC,CAA/C,EAwBf,KAAK1C,GAxBU,CAAlB;EAyBD;;EAEDa,WAAW,CAAEC,aAAF,EAAiBC,SAAjB,EAA4B;IAGrC,KAAKD,aAAL,GAAqBA,aAAa,IAAI6B,qBAAtC;IACA,KAAK3C,GAAL,CAAS4C,IAAT,CAAe,oBAAmB,KAAK9B,aAAc,GAArD;IAGA,KAAKC,SAAL,GAAiBA,SAAS,IAAI8B,aAAA,CAAKC,OAAL,CAAa,KAAKhC,aAAlB,EAAiC,0BAAjC,CAA9B;IACA,KAAKd,GAAL,CAAS4C,IAAT,CAAe,qBAAoB,KAAK7B,SAAU,GAAlD;EACD;;EAE6B,MAAxBgC,wBAAwB,GAAI;IAChC,MAAMC,YAAY,GAAG,MAAM,IAAAC,6BAAA,EAAuB,KAAKC,GAAL,CAASC,IAAhC,EACxBC,OAAD,IAAaA,OAAO,CAACC,QAAR,CAAiB,uBAAjB,KACX,CAACD,OAAO,CAACE,WAAR,GAAsBD,QAAtB,CAA+B,KAAKjD,MAAL,CAAYmD,IAAZ,CAAiBD,WAAjB,EAA/B,CAFsB,CAA3B;;IAIA,IAAIrD,eAAA,CAAEuD,OAAF,CAAUR,YAAV,CAAJ,EAA6B;MAC3B,KAAKhD,GAAL,CAASyD,KAAT,CAAgB,0DAAD,GACZ,qBAAoB,KAAKP,GAAL,CAASC,IAAK,kBADrC;MAEA;IACD;;IAED,KAAKnD,GAAL,CAAS4C,IAAT,CAAe,YAAWI,YAAY,CAACU,MAAO,2BAA0BV,YAAY,CAACU,MAAb,KAAwB,CAAxB,GAA4B,EAA5B,GAAiC,IAAK,GAAhG,GACX,8CADH;;IAEA,IAAI;MACF,MAAM,IAAAC,kBAAA,EAAK,MAAL,EAAaX,YAAb,CAAN;IACD,CAFD,CAEE,OAAOY,CAAP,EAAU;MACV,KAAK5D,GAAL,CAAS6D,IAAT,CAAe,yCAAwCb,YAAY,CAACU,MAAb,KAAwB,CAAxB,GAA4B,EAA5B,GAAiC,IAAK,KAAIV,YAAa,KAAhG,GACX,mBAAkBY,CAAC,CAACE,OAAQ,EAD/B;IAED;EACF;;EAOc,MAATC,SAAS,GAAI;IACjB,OAAO,CAAC,EAAE,MAAM,KAAKC,SAAL,EAAR,CAAR;EACD;;EAEW,IAARC,QAAQ,GAAI;IACd,IAAI,KAAKf,GAAL,CAASL,IAAT,KAAkB,GAAtB,EAA2B;MACzB,OAAO,EAAP;IACD;;IACD,OAAO,KAAKK,GAAL,CAASL,IAAT,IAAiB,EAAxB;EACD;;EAwBc,MAATmB,SAAS,GAAI;IACjB,MAAME,cAAc,GAAG,IAAIC,8BAAJ,CAAmB;MACxCC,MAAM,EAAE,KAAKlB,GAAL,CAASmB,QADuB;MAExClB,IAAI,EAAE,KAAKD,GAAL,CAASC,IAFyB;MAGxCmB,IAAI,EAAE,KAAKL,QAH6B;MAIxCM,OAAO,EAAE;IAJ+B,CAAnB,CAAvB;;IAMA,IAAI;MACF,OAAO,MAAML,cAAc,CAACM,OAAf,CAAuB,SAAvB,EAAkC,KAAlC,CAAb;IACD,CAFD,CAEE,OAAOC,GAAP,EAAY;MACZ,KAAKzE,GAAL,CAASyD,KAAT,CAAgB,4BAA2B,KAAKP,GAAL,CAASwB,IAAK,GAAzD;MACA,OAAO,IAAP;IACD;EACF;;EAOc,MAATC,SAAS,GAAI;IACjB,IAAI;MACF,MAAMC,SAAS,GAAG,MAAM,KAAKxE,MAAL,CAAYyE,qCAAZ,CAAkDpF,kBAAlD,CAAxB;;MACA,IAAIQ,eAAA,CAAEuD,OAAF,CAAUoB,SAAV,CAAJ,EAA0B;QACxB,KAAK5E,GAAL,CAASyD,KAAT,CAAe,wBAAf;QACA;MACD;;MAED,KAAKzD,GAAL,CAASyD,KAAT,CAAgB,uBAAsBmB,SAAU,GAAhD;;MACA,KAAK,MAAME,QAAX,IAAuBF,SAAvB,EAAkC;QAChC,MAAM,KAAKxE,MAAL,CAAY2E,SAAZ,CAAsBD,QAAtB,CAAN;MACD;IACF,CAXD,CAWE,OAAOlB,CAAP,EAAU;MACV,KAAK5D,GAAL,CAASyD,KAAT,CAAeG,CAAf;MACA,KAAK5D,GAAL,CAAS6D,IAAT,CAAe,uEAAD,GACX,mBAAkBD,CAAC,CAACE,OAAQ,EAD/B;IAED;EACF;;EAE2B,MAAtBkB,sBAAsB,GAAI;IAC9B,MAAMC,UAAU,GAAGC,OAAO,CAACC,GAAR,CAAYC,IAA/B;;IACA,IAAI,CAACH,UAAL,EAAiB;MACf,KAAKjF,GAAL,CAAS4C,IAAT,CAAc,2CAAd;MACA;IACD;;IAED,MAAMyC,uBAAuB,GAAG,MAAM,IAAAC,6BAAA,GAAtC;;IACA,IAAI,CAACrF,eAAA,CAAEsF,SAAF,CAAYF,uBAAZ,CAAL,EAA2C;MACzC,KAAKrF,GAAL,CAAS4C,IAAT,CAAc,4DAAd;MACA;IACD;;IAED,MAAM4C,aAAa,GAAG3C,aAAA,CAAKC,OAAL,CAAamC,UAAb,EAAyBQ,qCAAzB,CAAtB;;IACA,MAAMC,iBAAiB,GAAG,MAAMC,WAAA,CAAGC,MAAH,CAAUJ,aAAV,CAAhC;;IACA,IAAIE,iBAAJ,EAAuB;MACrB,IAAI;QACF,MAAMC,WAAA,CAAGE,MAAH,CAAUL,aAAV,EAAyBG,WAAA,CAAGG,IAA5B,CAAN;MACD,CAFD,CAEE,OAAOC,GAAP,EAAY;QACZ,KAAK/F,GAAL,CAAS4C,IAAT,CAAe,wCAAuC4C,aAAc,sBAAtD,GACX,0BADH;QAEA;MACD;;MACD,MAAMQ,sBAAsB,GAAGC,QAAQ,CAAC,MAAMN,WAAA,CAAGO,QAAH,CAAYV,aAAZ,EAA2B,MAA3B,CAAP,EAA2C,EAA3C,CAAvC;;MACA,IAAIvF,eAAA,CAAEsF,SAAF,CAAYS,sBAAZ,CAAJ,EAAyC;QACvC,IAAIA,sBAAsB,IAAIX,uBAA9B,EAAuD;UACrD,KAAKrF,GAAL,CAAS4C,IAAT,CAAe,qEAAD,GACX,IAAGoD,sBAAuB,OAAMX,uBAAwB,GAD3D;UAEA;QACD;;QACD,KAAKrF,GAAL,CAAS4C,IAAT,CAAe,4CAAD,GACX,IAAGoD,sBAAuB,MAAKX,uBAAwB,GAD1D;MAED,CARD,MAQO;QACL,KAAKrF,GAAL,CAAS6D,IAAT,CAAe,oCAAmC2B,aAAc,kCAAhE;MACD;IACF;;IAED,IAAI;MACF,MAAM,IAAAW,eAAA,EAAOtD,aAAA,CAAKuD,OAAL,CAAaZ,aAAb,CAAP,CAAN;MACA,MAAMG,WAAA,CAAGU,SAAH,CAAab,aAAb,EAA6B,GAAEH,uBAAwB,EAAvD,EAA0D,MAA1D,CAAN;MACA,KAAKrF,GAAL,CAASyD,KAAT,CAAgB,sDAAqD4B,uBAAwB,GAA9E,GACZ,OAAMG,aAAc,GADvB;IAED,CALD,CAKE,OAAO5B,CAAP,EAAU;MACV,KAAK5D,GAAL,CAAS4C,IAAT,CAAe,oEAAmE4C,aAAc,KAAlF,GACX,mBAAkB5B,CAAC,CAACE,OAAQ,EAD/B;MAEA;IACD;;IAED,IAAI,CAAC4B,iBAAL,EAAwB;MACtB,KAAK1F,GAAL,CAAS4C,IAAT,CAAc,oFAAd;MACA;IACD;;IAED,IAAI;MACF,MAAM,KAAKf,UAAL,CAAgByE,YAAhB,EAAN;IACD,CAFD,CAEE,OAAO1C,CAAP,EAAU;MACV,KAAK5D,GAAL,CAAS6D,IAAT,CAAe,kEAAiED,CAAC,CAACE,OAAQ,EAA1F;IACD;EACF;;EAyBW,MAANyC,MAAM,CAAEC,SAAF,EAAa;IACvB,IAAI,KAAKnF,iBAAT,EAA4B;MAC1B,KAAKrB,GAAL,CAAS4C,IAAT,CAAe,qCAAoC,KAAKvB,iBAAkB,GAA1E;MACA,KAAK6B,GAAL,GAAW,KAAK7B,iBAAhB;MACA,KAAKoF,YAAL,CAAkBD,SAAlB;MACA,OAAO,MAAM,KAAKxC,SAAL,EAAb;IACD;;IAED,KAAKhE,GAAL,CAAS4C,IAAT,CAAc,wCAAd;IAEA,KAAK6D,YAAL,CAAkBD,SAAlB;;IAEA,IAAI,CAAC,KAAKhF,gBAAN,IAA0B,EAAC,MAAMmE,WAAA,CAAGC,MAAH,CAAU,KAAK7E,SAAf,CAAP,CAA9B,EAAgE;MAC9D,MAAM,IAAI2F,KAAJ,CAAW,4CAA2C,KAAK3F,SAAU,YAA3D,GACA,qBADV,CAAN;IAED;;IAID,IAAI,KAAKJ,GAAL,IAAY,KAAKa,gBAAjB,IAAsC,KAAKE,eAAL,IAAwB,KAAKD,cAAvE,EAAwF;MACtF,KAAKzB,GAAL,CAAS4C,IAAT,CAAc,oEAAd;IACD,CAFD,MAEO;MACL,MAAM+D,kBAAkB,GAAG9D,aAAA,CAAK+D,SAAL,CAAe,KAAK9F,aAApB,CAA3B;;MACA,MAAMpB,sBAAsB,CAACmH,OAAvB,CAA+BF,kBAA/B,EACJ,YAAY,MAAM,KAAK3B,sBAAL,EADd,CAAN;IAED;;IAGD,MAAM,IAAA8B,yBAAA,EAAmB,KAAK1G,MAAL,CAAYmD,IAA/B,EAAqC,CAAC,KAAK9C,YAA3C,CAAN;;IAEA,IAAI,KAAKE,GAAT,EAAc;MACZ,OAAO,MAAM,KAAKoG,YAAL,EAAb;IACD;;IAED,MAAM,KAAKlF,UAAL,CAAgBmF,IAAhB,CAAqB,KAAK9C,cAA1B,CAAN;;IAGA,IAAI,KAAK9C,WAAT,EAAsB;MACpB,MAAM,KAAKS,UAAL,CAAgBoF,QAAhB,EAAN;IACD;;IACD,OAAO,MAAM,KAAKpF,UAAL,CAAgBqF,KAAhB,EAAb;EACD;;EAEiB,MAAZH,YAAY,GAAI;IACpB,KAAK/G,GAAL,CAAS4C,IAAT,CAAc,wFAAd;IACA,MAAM;MAACuE,WAAD;MAAcC;IAAd,IAA8B,MAAM,KAAKC,UAAL,EAA1C;IACA,MAAMlC,GAAG,GAAG;MACVmC,QAAQ,EAAE,KAAKrG,aADL;MAEVsG,6BAA6B,EAAE,KAAK3F;IAF1B,CAAZ;;IAIA,IAAI,KAAKD,eAAT,EAA0B;MACxBwD,GAAG,CAACqC,iBAAJ,GAAwB,KAAK7F,eAA7B;IACD;;IAED,OAAO,MAAM,KAAKhB,GAAL,CAAS8G,WAAT,CAAqBN,WAArB,EAAkCA,WAAlC,EAA+CC,YAA/C,EAA6D;MAACjC;IAAD,CAA7D,CAAb;EACD;;EAEkB,MAAbuC,aAAa,CAAE9G,aAAF,EAAiB;IAClC,MAAM+G,aAAa,GAAG9E,aAAA,CAAK+E,IAAL,CAAUhH,aAAV,EAAyB,YAAzB,CAAtB;;IACA,MAAMiH,SAAS,GAAG,MAAMC,cAAA,CAAMC,UAAN,CAAiB,MAAMpC,WAAA,CAAGO,QAAH,CAAYyB,aAAZ,CAAvB,CAAxB;;IACA,IAAI,CAACE,SAAS,CAACG,kBAAf,EAAmC;MACjC,MAAM,IAAItB,KAAJ,CAAW,gCAA+BiB,aAAc,GAAxD,CAAN;IACD;;IACD,OAAOE,SAAS,CAACG,kBAAjB;EACD;;EAEe,MAAVX,UAAU,GAAI;IAClB,MAAMzG,aAAa,GAAG,KAAKA,aAAL,KAAsB,MAAM,KAAKqH,cAAL,EAA5B,CAAtB;IACA,MAAMd,WAAW,GAAG,MAAM,KAAKO,aAAL,CAAmB9G,aAAnB,CAA1B;;IACA,IAAI,EAAC,MAAM,KAAKR,MAAL,CAAY8H,cAAZ,CAA2Bf,WAA3B,CAAP,CAAJ,EAAoD;MAClD,MAAM,KAAK/G,MAAL,CAAY+H,UAAZ,CAAuBvH,aAAvB,CAAN;IACD;;IACD,MAAMwG,YAAY,GAAG,MAAM,KAAKzG,GAAL,CAASyH,mBAAT,CAA6BvF,aAAA,CAAK+E,IAAL,CAAUhH,aAAV,EAAyB,SAAzB,EAAoC,6BAApC,CAA7B,CAA3B;IACA,OAAO;MAACuG,WAAD;MAAcC,YAAd;MAA4BxG;IAA5B,CAAP;EACD;;EAEmB,MAAdqH,cAAc,GAAI;IACtB,IAAI,CAAC,KAAKvG,eAAV,EAA2B;MACzB,OAAO,MAAM,IAAA2G,+BAAA,EAAa,KAAKxG,UAAlB,CAAb;IACD;;IACD,MAAMyG,cAAc,GAAG,MAAM3C,WAAA,CAAG4C,IAAH,CAAS,GAAE,KAAK7G,eAAgB,QAAO8G,yBAAe,GAAtD,EAA0D;MACrFC,QAAQ,EAAE;IAD2E,CAA1D,CAA7B;;IAGA,IAAIxI,eAAA,CAAEuD,OAAF,CAAU8E,cAAV,CAAJ,EAA+B;MAC7B,MAAM,IAAI5B,KAAJ,CAAW,qCAAoC,KAAKhF,eAAgB,GAApE,CAAN;IACD;;IACD,OAAO4G,cAAc,CAAC,CAAD,CAArB;EACD;;EAEkB,MAAbI,aAAa,GAAI;IACrB,MAAMC,cAAc,GAAG,CACrB,WADqB,EAEpB,YAAW9F,aAAA,CAAK+F,GAAI,uBAFA,EAGrBC,GAHqB,CAGhBC,OAAD,IAAanD,WAAA,CAAGC,MAAH,CAAU/C,aAAA,CAAKC,OAAL,CAAa,KAAKhC,aAAlB,EAAiCgI,OAAjC,CAAV,CAHI,CAAvB;IAIA,OAAO,CAAC,MAAMC,iBAAA,CAAEC,GAAF,CAAML,cAAN,CAAP,EAA8BM,IAA9B,CAAoCC,CAAD,IAAOA,CAAC,KAAK,KAAhD,CAAP;EACD;;EAEDzC,YAAY,CAAED,SAAF,EAAa;IACvB,MAAM2C,SAAS,GAAG;MAChBnJ,GAAG,EAAE,KAAKA,GADM;MAEhBoE,MAAM,EAAE,KAAKlB,GAAL,CAASmB,QAFD;MAGhBlB,IAAI,EAAE,KAAKD,GAAL,CAASC,IAHC;MAIhBmB,IAAI,EAAE,KAAKL,QAJK;MAKhBM,OAAO,EAAE,KAAKhD,oBALE;MAMhB6H,SAAS,EAAE;IANK,CAAlB;IASA,KAAKC,OAAL,GAAe,IAAIC,eAAJ,CAAYH,SAAZ,CAAf;IACA,KAAKE,OAAL,CAAa7C,SAAb,GAAyBA,SAAzB;IACA,KAAK+C,WAAL,GAAmB,KAAKF,OAAL,CAAaE,WAAb,CAAyBC,IAAzB,CAA8B,KAAKH,OAAnC,CAAnB;IAEA,KAAKnF,cAAL,GAAsB,IAAIC,8BAAJ,CAAmBgF,SAAnB,CAAtB;EACD;;EAES,MAAJM,IAAI,GAAI;IACZ,KAAKzJ,GAAL,CAAS4C,IAAT,CAAc,6BAAd;IAEA,MAAM,KAAKf,UAAL,CAAgB4H,IAAhB,EAAN;IACA,MAAM,KAAK5H,UAAL,CAAgB6H,KAAhB,EAAN;;IAEA,IAAI,KAAKL,OAAT,EAAkB;MAChB,KAAKA,OAAL,CAAa7C,SAAb,GAAyB,IAAzB;IACD;;IAED,KAAKlF,OAAL,GAAe,KAAf;;IAEA,IAAI,CAAC,KAAKvB,IAAL,CAAUsB,iBAAf,EAAkC;MAGhC,KAAKA,iBAAL,GAAyB,IAAzB;IACD;EACF;;EAEM,IAAH6B,GAAG,GAAI;IACT,IAAI,CAAC,KAAKyG,IAAV,EAAgB;MACd,IAAI,KAAKtI,iBAAT,EAA4B;QAC1B,KAAKsI,IAAL,GAAYzG,aAAA,CAAI0G,KAAJ,CAAU,KAAKvI,iBAAf,CAAZ;MACD,CAFD,MAEO;QACL,MAAM8B,IAAI,GAAG,KAAKnC,YAAL,IAAqBxB,cAAlC;;QACA,MAAM;UAACqK,QAAD;UAAWxF;QAAX,IAAuBnB,aAAA,CAAI0G,KAAJ,CAAU,KAAK1I,UAAL,IAAmBC,uBAA7B,CAA7B;;QACA,KAAKwI,IAAL,GAAYzG,aAAA,CAAI0G,KAAJ,CAAW,GAAEC,QAAS,KAAIxF,QAAS,IAAGlB,IAAK,EAA3C,CAAZ;MACD;IACF;;IACD,OAAO,KAAKwG,IAAZ;EACD;;EAEM,IAAHzG,GAAG,CAAEyG,IAAF,EAAQ;IACb,KAAKA,IAAL,GAAYzG,aAAA,CAAI0G,KAAJ,CAAUD,IAAV,CAAZ;EACD;;EAEe,IAAZG,YAAY,GAAI;IAClB,OAAO,KAAKxI,OAAZ;EACD;;EAEe,IAAZwI,YAAY,CAAExI,OAAO,GAAG,KAAZ,EAAmB;IACjC,KAAKA,OAAL,GAAeA,OAAf;EACD;;EAE4B,MAAvByI,uBAAuB,GAAI;IAC/B,OAAO,MAAM,KAAKlI,UAAL,CAAgBkI,uBAAhB,EAAb;EACD;;EASiB,MAAZC,YAAY,GAAI;IACpB,MAAMC,MAAM,GAAG,MAAM,KAAKjG,SAAL,EAArB;;IACA,IAAI,CAACiG,MAAD,IAAW,CAACA,MAAM,CAACC,KAAvB,EAA8B;MAC5B,KAAKlK,GAAL,CAASyD,KAAT,CAAe,yDAAf;MACA;IACD;;IAED,MAAM;MACJ0G,uBADI;MAEJC;IAFI,IAGFH,MAAM,CAACC,KAHX;;IAKA,IAAIG,aAAA,CAAKC,QAAL,CAAcH,uBAAd,KAA0CE,aAAA,CAAKC,QAAL,CAAc,KAAK1I,kBAAnB,CAA1C,IAAoF,KAAKA,kBAAL,KAA4BuI,uBAApH,EAA6I;MAC3I,KAAKnK,GAAL,CAAS4C,IAAT,CAAe,qFAAoFuH,uBAAwB,IAA3H;MACA,OAAO,MAAM,KAAKxF,SAAL,EAAb;IACD;;IAED,IAAI0F,aAAA,CAAKC,QAAL,CAAcH,uBAAd,KAA0C,CAACE,aAAA,CAAKC,QAAL,CAAc,KAAK1I,kBAAnB,CAA3C,IAAqF2I,+BAAA,KAAyBJ,uBAAlH,EAA2I;MACzI,KAAKnK,GAAL,CAAS4C,IAAT,CAAe,oFAAmF2H,+BAAqB,EAAvH;MACA,OAAO,MAAM,KAAK5F,SAAL,EAAb;IACD;;IAED,MAAM6F,sBAAsB,GAAG,MAAM,IAAAlF,6BAAA,GAArC;IACA,KAAKtF,GAAL,CAASyD,KAAT,CAAgB,mDAAkD+G,sBAAuB,EAAzF;IACA,KAAKxK,GAAL,CAASyD,KAAT,CAAgB,+CAA8C2G,UAAW,EAAzE;;IACA,IAAII,sBAAsB,IAAIJ,UAA1B,IAAwCnK,eAAA,CAAEwK,OAAF,CAAW,GAAED,sBAAuB,EAApC,MAA2CvK,eAAA,CAAEwK,OAAF,CAAW,GAAEL,UAAW,EAAxB,CAAvF,EAAmH;MACjH,KAAKpK,GAAL,CAAS4C,IAAT,CAAc,wFACX,wDAAuD4H,sBAAuB,OAAMJ,UAAW,GADlG;MAEA,OAAO,MAAM,KAAKzF,SAAL,EAAb;IACD;;IAED,MAAMb,OAAO,GAAGuG,aAAA,CAAKC,QAAL,CAAcH,uBAAd,IACX,iDAAgD,KAAKjH,GAAL,CAASwB,IAAK,WAAUyF,uBAAwB,GADrF,GAEX,iDAAgD,KAAKjH,GAAL,CAASwB,IAAK,GAFnE;IAGA,KAAK1E,GAAL,CAAS4C,IAAT,CAAe,GAAEkB,OAAQ,+DAA8D,KAAKZ,GAAL,CAASC,IAAK,oCAArG;IACA,KAAK9B,iBAAL,GAAyB,KAAK6B,GAAL,CAASwB,IAAlC;EACD;;EAKqB,MAAhBgG,gBAAgB,GAAI;IACxB,MAAM,KAAKjB,IAAL,EAAN;IACA,MAAM,KAAK9E,SAAL,EAAN;EACD;;AArdkB;;;eAwdN/E,c"}
|
|
1
|
+
{"version":3,"file":"webdriveragent.js","names":["WDA_LAUNCH_TIMEOUT","WDA_AGENT_PORT","WDA_CF_BUNDLE_NAME","SHARED_RESOURCES_GUARD","AsyncLock","WebDriverAgent","constructor","xcodeVersion","args","log","_","clone","defaultLogger","device","platformVersion","platformName","iosSdkVersion","host","isRealDevice","realDevice","idb","wdaBundlePath","setWDAPaths","bootstrapPath","agentPath","wdaLocalPort","wdaRemotePort","wdaBaseUrl","WDA_BASE_URL","prebuildWDA","webDriverAgentUrl","started","wdaConnectionTimeout","useXctestrunFile","usePrebuiltWDA","derivedDataPath","mjpegServerPort","updatedWDABundleId","xcodebuild","XcodeBuild","showXcodeLog","xcodeConfigFile","xcodeOrgId","xcodeSigningId","keychainPath","keychainPassword","useSimpleBuildTest","launchTimeout","wdaLaunchTimeout","allowProvisioningDeviceRegistration","resultBundlePath","resultBundleVersion","BOOTSTRAP_PATH","info","path","resolve","cleanupObsoleteProcesses","obsoletePids","getPIDsListeningOnPort","url","port","cmdLine","includes","toLowerCase","udid","isEmpty","debug","length","exec","e","warn","message","isRunning","getStatus","basePath","noSessionProxy","NoSessionProxy","server","hostname","base","timeout","command","err","href","uninstall","bundleIds","getUserInstalledBundleIdsByBundleName","bundleId","removeApp","_cleanupProjectIfFresh","homeFolder","process","env","HOME","currentUpgradeTimestamp","getWDAUpgradeTimestamp","isInteger","timestampPath","WDA_UPGRADE_TIMESTAMP_PATH","didTimestampExist","fs","exists","access","W_OK","ign","recentUpgradeTimestamp","parseInt","readFile","mkdirp","dirname","writeFile","cleanProject","launch","sessionId","setupProxies","Error","synchronizationKey","normalize","acquire","resetTestProcesses","startWithIDB","init","prebuild","start","wdaBundleId","testBundleId","prepareWDA","USE_PORT","WDA_PRODUCT_BUNDLE_IDENTIFIER","MJPEG_SERVER_PORT","runXCUITest","parseBundleId","infoPlistPath","join","infoPlist","plist","parsePlist","CFBundleIdentifier","fetchWDABundle","isAppInstalled","installApp","installXCTestBundle","bundleWDASim","wdaBundlePaths","glob","WDA_RUNNER_APP","absolute","isSourceFresh","existsPromises","sep","map","subPath","B","all","some","v","proxyOpts","keepAlive","jwproxy","JWProxy","proxyReqRes","bind","quit","reset","_url","parse","protocol","fullyStarted","retrieveDerivedDataPath","setupCaching","status","build","productBundleIdentifier","upgradedAt","util","hasValue","WDA_RUNNER_BUNDLE_ID","actualUpgradeTimestamp","toLower","quitAndUninstall"],"sources":["../../lib/webdriveragent.js"],"sourcesContent":["import _ from 'lodash';\nimport path from 'path';\nimport url from 'url';\nimport B from 'bluebird';\nimport { JWProxy } from 'appium/driver';\nimport { fs, util, plist, mkdirp } from 'appium/support';\nimport defaultLogger from './logger';\nimport { NoSessionProxy } from './no-session-proxy';\nimport {\n getWDAUpgradeTimestamp, resetTestProcesses, getPIDsListeningOnPort, BOOTSTRAP_PATH\n} from './utils';\nimport XcodeBuild from './xcodebuild';\nimport AsyncLock from 'async-lock';\nimport { exec } from 'teen_process';\nimport { bundleWDASim } from './check-dependencies';\nimport {\n WDA_RUNNER_BUNDLE_ID, WDA_RUNNER_APP, WDA_BASE_URL, WDA_UPGRADE_TIMESTAMP_PATH,\n} from './constants';\n\nconst WDA_LAUNCH_TIMEOUT = 60 * 1000;\nconst WDA_AGENT_PORT = 8100;\nconst WDA_CF_BUNDLE_NAME = 'WebDriverAgentRunner-Runner';\nconst SHARED_RESOURCES_GUARD = new AsyncLock();\n\nclass WebDriverAgent {\n constructor (xcodeVersion, args = {}, log = null) {\n this.xcodeVersion = xcodeVersion;\n\n this.args = _.clone(args);\n this.log = log ?? defaultLogger;\n\n this.device = args.device;\n this.platformVersion = args.platformVersion;\n this.platformName = args.platformName;\n this.iosSdkVersion = args.iosSdkVersion;\n this.host = args.host;\n this.isRealDevice = !!args.realDevice;\n this.idb = (args.device || {}).idb;\n this.wdaBundlePath = args.wdaBundlePath;\n\n this.setWDAPaths(args.bootstrapPath, args.agentPath);\n\n this.wdaLocalPort = args.wdaLocalPort;\n this.wdaRemotePort = args.wdaLocalPort || WDA_AGENT_PORT;\n this.wdaBaseUrl = args.wdaBaseUrl || WDA_BASE_URL;\n\n this.prebuildWDA = args.prebuildWDA;\n\n this.webDriverAgentUrl = args.webDriverAgentUrl;\n\n this.started = false;\n\n this.wdaConnectionTimeout = args.wdaConnectionTimeout;\n\n this.useXctestrunFile = args.useXctestrunFile;\n this.usePrebuiltWDA = args.usePrebuiltWDA;\n this.derivedDataPath = args.derivedDataPath;\n this.mjpegServerPort = args.mjpegServerPort;\n\n this.updatedWDABundleId = args.updatedWDABundleId;\n\n this.xcodebuild = new XcodeBuild(this.xcodeVersion, this.device, {\n platformVersion: this.platformVersion,\n platformName: this.platformName,\n iosSdkVersion: this.iosSdkVersion,\n agentPath: this.agentPath,\n bootstrapPath: this.bootstrapPath,\n realDevice: this.isRealDevice,\n showXcodeLog: args.showXcodeLog,\n xcodeConfigFile: args.xcodeConfigFile,\n xcodeOrgId: args.xcodeOrgId,\n xcodeSigningId: args.xcodeSigningId,\n keychainPath: args.keychainPath,\n keychainPassword: args.keychainPassword,\n useSimpleBuildTest: args.useSimpleBuildTest,\n usePrebuiltWDA: args.usePrebuiltWDA,\n updatedWDABundleId: this.updatedWDABundleId,\n launchTimeout: args.wdaLaunchTimeout || WDA_LAUNCH_TIMEOUT,\n wdaRemotePort: this.wdaRemotePort,\n useXctestrunFile: this.useXctestrunFile,\n derivedDataPath: args.derivedDataPath,\n mjpegServerPort: this.mjpegServerPort,\n allowProvisioningDeviceRegistration: args.allowProvisioningDeviceRegistration,\n resultBundlePath: args.resultBundlePath,\n resultBundleVersion: args.resultBundleVersion,\n }, this.log);\n }\n\n setWDAPaths (bootstrapPath, agentPath) {\n // allow the user to specify a place for WDA. This is undocumented and\n // only here for the purposes of testing development of WDA\n this.bootstrapPath = bootstrapPath || BOOTSTRAP_PATH;\n this.log.info(`Using WDA path: '${this.bootstrapPath}'`);\n\n // for backward compatibility we need to be able to specify agentPath too\n this.agentPath = agentPath || path.resolve(this.bootstrapPath, 'WebDriverAgent.xcodeproj');\n this.log.info(`Using WDA agent: '${this.agentPath}'`);\n }\n\n async cleanupObsoleteProcesses () {\n const obsoletePids = await getPIDsListeningOnPort(this.url.port,\n (cmdLine) => cmdLine.includes('/WebDriverAgentRunner') &&\n !cmdLine.toLowerCase().includes(this.device.udid.toLowerCase()));\n\n if (_.isEmpty(obsoletePids)) {\n this.log.debug(`No obsolete cached processes from previous WDA sessions ` +\n `listening on port ${this.url.port} have been found`);\n return;\n }\n\n this.log.info(`Detected ${obsoletePids.length} obsolete cached process${obsoletePids.length === 1 ? '' : 'es'} ` +\n `from previous WDA sessions. Cleaning them up`);\n try {\n await exec('kill', obsoletePids);\n } catch (e) {\n this.log.warn(`Failed to kill obsolete cached process${obsoletePids.length === 1 ? '' : 'es'} '${obsoletePids}'. ` +\n `Original error: ${e.message}`);\n }\n }\n\n /**\n * Return boolean if WDA is running or not\n * @return {boolean} True if WDA is running\n * @throws {Error} If there was invalid response code or body\n */\n async isRunning () {\n return !!(await this.getStatus());\n }\n\n get basePath () {\n if (this.url.path === '/') {\n return '';\n }\n return this.url.path || '';\n }\n\n /**\n * Return current running WDA's status like below\n * {\n * \"state\": \"success\",\n * \"os\": {\n * \"name\": \"iOS\",\n * \"version\": \"11.4\",\n * \"sdkVersion\": \"11.3\"\n * },\n * \"ios\": {\n * \"simulatorVersion\": \"11.4\",\n * \"ip\": \"172.254.99.34\"\n * },\n * \"build\": {\n * \"time\": \"Jun 24 2018 17:08:21\",\n * \"productBundleIdentifier\": \"com.facebook.WebDriverAgentRunner\"\n * }\n * }\n *\n * @return {?object} State Object\n * @throws {Error} If there was invalid response code or body\n */\n async getStatus () {\n const noSessionProxy = new NoSessionProxy({\n server: this.url.hostname,\n port: this.url.port,\n base: this.basePath,\n timeout: 3000,\n });\n try {\n return await noSessionProxy.command('/status', 'GET');\n } catch (err) {\n this.log.debug(`WDA is not listening at '${this.url.href}'`);\n return null;\n }\n }\n\n /**\n * Uninstall WDAs from the test device.\n * Over Xcode 11, multiple WDA can be in the device since Xcode 11 generates different WDA.\n * Appium does not expect multiple WDAs are running on a device.\n */\n async uninstall () {\n try {\n const bundleIds = await this.device.getUserInstalledBundleIdsByBundleName(WDA_CF_BUNDLE_NAME);\n if (_.isEmpty(bundleIds)) {\n this.log.debug('No WDAs on the device.');\n return;\n }\n\n this.log.debug(`Uninstalling WDAs: '${bundleIds}'`);\n for (const bundleId of bundleIds) {\n await this.device.removeApp(bundleId);\n }\n } catch (e) {\n this.log.debug(e);\n this.log.warn(`WebDriverAgent uninstall failed. Perhaps, it is already uninstalled? ` +\n `Original error: ${e.message}`);\n }\n }\n\n async _cleanupProjectIfFresh () {\n const homeFolder = process.env.HOME;\n if (!homeFolder) {\n this.log.info('The HOME folder path cannot be determined');\n return;\n }\n\n const currentUpgradeTimestamp = await getWDAUpgradeTimestamp();\n if (!_.isInteger(currentUpgradeTimestamp)) {\n this.log.info('It is impossible to determine the timestamp of the package');\n return;\n }\n\n const timestampPath = path.resolve(homeFolder, WDA_UPGRADE_TIMESTAMP_PATH);\n const didTimestampExist = await fs.exists(timestampPath);\n if (didTimestampExist) {\n try {\n await fs.access(timestampPath, fs.W_OK);\n } catch (ign) {\n this.log.info(`WebDriverAgent upgrade timestamp at '${timestampPath}' is not writeable. ` +\n `Skipping sources cleanup`);\n return;\n }\n const recentUpgradeTimestamp = parseInt(await fs.readFile(timestampPath, 'utf8'), 10);\n if (_.isInteger(recentUpgradeTimestamp)) {\n if (recentUpgradeTimestamp >= currentUpgradeTimestamp) {\n this.log.info(`WebDriverAgent does not need a cleanup. The sources are up to date ` +\n `(${recentUpgradeTimestamp} >= ${currentUpgradeTimestamp})`);\n return;\n }\n this.log.info(`WebDriverAgent sources have been upgraded ` +\n `(${recentUpgradeTimestamp} < ${currentUpgradeTimestamp})`);\n } else {\n this.log.warn(`The recent upgrade timestamp at '${timestampPath}' is corrupted. Trying to fix it`);\n }\n }\n\n try {\n await mkdirp(path.dirname(timestampPath));\n await fs.writeFile(timestampPath, `${currentUpgradeTimestamp}`, 'utf8');\n this.log.debug(`Stored the recent WebDriverAgent upgrade timestamp ${currentUpgradeTimestamp} ` +\n `at '${timestampPath}'`);\n } catch (e) {\n this.log.info(`Unable to create the recent WebDriverAgent upgrade timestamp at '${timestampPath}'. ` +\n `Original error: ${e.message}`);\n return;\n }\n\n if (!didTimestampExist) {\n this.log.info('There is no need to perform the project cleanup. A fresh install has been detected');\n return;\n }\n\n try {\n await this.xcodebuild.cleanProject();\n } catch (e) {\n this.log.warn(`Cannot perform WebDriverAgent project cleanup. Original error: ${e.message}`);\n }\n }\n\n /**\n * Return current running WDA's status like below after launching WDA\n * {\n * \"state\": \"success\",\n * \"os\": {\n * \"name\": \"iOS\",\n * \"version\": \"11.4\",\n * \"sdkVersion\": \"11.3\"\n * },\n * \"ios\": {\n * \"simulatorVersion\": \"11.4\",\n * \"ip\": \"172.254.99.34\"\n * },\n * \"build\": {\n * \"time\": \"Jun 24 2018 17:08:21\",\n * \"productBundleIdentifier\": \"com.facebook.WebDriverAgentRunner\"\n * }\n * }\n *\n * @param {string} sessionId Launch WDA and establish the session with this sessionId\n * @return {?object} State Object\n * @throws {Error} If there was invalid response code or body\n */\n async launch (sessionId) {\n if (this.webDriverAgentUrl) {\n this.log.info(`Using provided WebdriverAgent at '${this.webDriverAgentUrl}'`);\n this.url = this.webDriverAgentUrl;\n this.setupProxies(sessionId);\n return await this.getStatus();\n }\n\n this.log.info('Launching WebDriverAgent on the device');\n\n this.setupProxies(sessionId);\n\n if (!this.useXctestrunFile && !await fs.exists(this.agentPath)) {\n throw new Error(`Trying to use WebDriverAgent project at '${this.agentPath}' but the ` +\n 'file does not exist');\n }\n\n // useXctestrunFile and usePrebuiltWDA use existing dependencies\n // It depends on user side\n if (this.idb || this.useXctestrunFile || (this.derivedDataPath && this.usePrebuiltWDA)) {\n this.log.info('Skipped WDA project cleanup according to the provided capabilities');\n } else {\n const synchronizationKey = path.normalize(this.bootstrapPath);\n await SHARED_RESOURCES_GUARD.acquire(synchronizationKey,\n async () => await this._cleanupProjectIfFresh());\n }\n\n // We need to provide WDA local port, because it might be occupied\n await resetTestProcesses(this.device.udid, !this.isRealDevice);\n\n if (this.idb) {\n return await this.startWithIDB();\n }\n\n await this.xcodebuild.init(this.noSessionProxy);\n\n // Start the xcodebuild process\n if (this.prebuildWDA) {\n await this.xcodebuild.prebuild();\n }\n return await this.xcodebuild.start();\n }\n\n async startWithIDB () {\n this.log.info('Will launch WDA with idb instead of xcodebuild since the corresponding flag is enabled');\n const {wdaBundleId, testBundleId} = await this.prepareWDA();\n const env = {\n USE_PORT: this.wdaRemotePort,\n WDA_PRODUCT_BUNDLE_IDENTIFIER: this.updatedWDABundleId,\n };\n if (this.mjpegServerPort) {\n env.MJPEG_SERVER_PORT = this.mjpegServerPort;\n }\n\n return await this.idb.runXCUITest(wdaBundleId, wdaBundleId, testBundleId, {env});\n }\n\n async parseBundleId (wdaBundlePath) {\n const infoPlistPath = path.join(wdaBundlePath, 'Info.plist');\n const infoPlist = await plist.parsePlist(await fs.readFile(infoPlistPath));\n if (!infoPlist.CFBundleIdentifier) {\n throw new Error(`Could not find bundle id in '${infoPlistPath}'`);\n }\n return infoPlist.CFBundleIdentifier;\n }\n\n async prepareWDA () {\n const wdaBundlePath = this.wdaBundlePath || await this.fetchWDABundle();\n const wdaBundleId = await this.parseBundleId(wdaBundlePath);\n if (!await this.device.isAppInstalled(wdaBundleId)) {\n await this.device.installApp(wdaBundlePath);\n }\n const testBundleId = await this.idb.installXCTestBundle(path.join(wdaBundlePath, 'PlugIns', 'WebDriverAgentRunner.xctest'));\n return {wdaBundleId, testBundleId, wdaBundlePath};\n }\n\n async fetchWDABundle () {\n if (!this.derivedDataPath) {\n return await bundleWDASim(this.xcodebuild);\n }\n const wdaBundlePaths = await fs.glob(`${this.derivedDataPath}/**/*${WDA_RUNNER_APP}/`, {\n absolute: true,\n });\n if (_.isEmpty(wdaBundlePaths)) {\n throw new Error(`Could not find the WDA bundle in '${this.derivedDataPath}'`);\n }\n return wdaBundlePaths[0];\n }\n\n async isSourceFresh () {\n const existsPromises = [\n 'Resources',\n `Resources${path.sep}WebDriverAgent.bundle`,\n ].map((subPath) => fs.exists(path.resolve(this.bootstrapPath, subPath)));\n return (await B.all(existsPromises)).some((v) => v === false);\n }\n\n setupProxies (sessionId) {\n const proxyOpts = {\n log: this.log,\n server: this.url.hostname,\n port: this.url.port,\n base: this.basePath,\n timeout: this.wdaConnectionTimeout,\n keepAlive: true,\n };\n\n this.jwproxy = new JWProxy(proxyOpts);\n this.jwproxy.sessionId = sessionId;\n this.proxyReqRes = this.jwproxy.proxyReqRes.bind(this.jwproxy);\n\n this.noSessionProxy = new NoSessionProxy(proxyOpts);\n }\n\n async quit () {\n this.log.info('Shutting down sub-processes');\n\n await this.xcodebuild.quit();\n await this.xcodebuild.reset();\n\n if (this.jwproxy) {\n this.jwproxy.sessionId = null;\n }\n\n this.started = false;\n\n if (!this.args.webDriverAgentUrl) {\n // if we populated the url ourselves (during `setupCaching` call, for instance)\n // then clean that up. If the url was supplied, we want to keep it\n this.webDriverAgentUrl = null;\n }\n }\n\n get url () {\n if (!this._url) {\n if (this.webDriverAgentUrl) {\n this._url = url.parse(this.webDriverAgentUrl);\n } else {\n const port = this.wdaLocalPort || WDA_AGENT_PORT;\n const {protocol, hostname} = url.parse(this.wdaBaseUrl || WDA_BASE_URL);\n this._url = url.parse(`${protocol}//${hostname}:${port}`);\n }\n }\n return this._url;\n }\n\n set url (_url) {\n this._url = url.parse(_url);\n }\n\n get fullyStarted () {\n return this.started;\n }\n\n set fullyStarted (started = false) {\n this.started = started;\n }\n\n async retrieveDerivedDataPath () {\n return await this.xcodebuild.retrieveDerivedDataPath();\n }\n\n /**\n * Reuse running WDA if it has the same bundle id with updatedWDABundleId.\n * Or reuse it if it has the default id without updatedWDABundleId.\n * Uninstall it if the method faces an exception for the above situation.\n *\n * @param {string} updatedWDABundleId BundleId you'd like to use\n */\n async setupCaching () {\n const status = await this.getStatus();\n if (!status || !status.build) {\n this.log.debug('WDA is currently not running. There is nothing to cache');\n return;\n }\n\n const {\n productBundleIdentifier,\n upgradedAt,\n } = status.build;\n // for real device\n if (util.hasValue(productBundleIdentifier) && util.hasValue(this.updatedWDABundleId) && this.updatedWDABundleId !== productBundleIdentifier) {\n this.log.info(`Will uninstall running WDA since it has different bundle id. The actual value is '${productBundleIdentifier}'.`);\n return await this.uninstall();\n }\n // for simulator\n if (util.hasValue(productBundleIdentifier) && !util.hasValue(this.updatedWDABundleId) && WDA_RUNNER_BUNDLE_ID !== productBundleIdentifier) {\n this.log.info(`Will uninstall running WDA since its bundle id is not equal to the default value ${WDA_RUNNER_BUNDLE_ID}`);\n return await this.uninstall();\n }\n\n const actualUpgradeTimestamp = await getWDAUpgradeTimestamp();\n this.log.debug(`Upgrade timestamp of the currently bundled WDA: ${actualUpgradeTimestamp}`);\n this.log.debug(`Upgrade timestamp of the WDA on the device: ${upgradedAt}`);\n if (actualUpgradeTimestamp && upgradedAt && _.toLower(`${actualUpgradeTimestamp}`) !== _.toLower(`${upgradedAt}`)) {\n this.log.info('Will uninstall running WDA since it has different version in comparison to the one ' +\n `which is bundled with appium-xcuitest-driver module (${actualUpgradeTimestamp} != ${upgradedAt})`);\n return await this.uninstall();\n }\n\n const message = util.hasValue(productBundleIdentifier)\n ? `Will reuse previously cached WDA instance at '${this.url.href}' with '${productBundleIdentifier}'`\n : `Will reuse previously cached WDA instance at '${this.url.href}'`;\n this.log.info(`${message}. Set the wdaLocalPort capability to a value different from ${this.url.port} if this is an undesired behavior.`);\n this.webDriverAgentUrl = this.url.href;\n }\n\n /**\n * Quit and uninstall running WDA.\n */\n async quitAndUninstall () {\n await this.quit();\n await this.uninstall();\n }\n}\n\nexport default WebDriverAgent;\nexport { WebDriverAgent };\n"],"mappings":"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"}
|