@limrun/appium-xcuitest-driver 10.4.3-lim.1

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 (444) hide show
  1. package/CHANGELOG.md +2600 -0
  2. package/LICENSE +201 -0
  3. package/README.md +55 -0
  4. package/build/index.d.ts +5 -0
  5. package/build/index.js +41 -0
  6. package/build/lib/app-infos-cache.d.ts +62 -0
  7. package/build/lib/app-infos-cache.d.ts.map +1 -0
  8. package/build/lib/app-infos-cache.js +180 -0
  9. package/build/lib/app-infos-cache.js.map +1 -0
  10. package/build/lib/app-utils.d.ts +89 -0
  11. package/build/lib/app-utils.d.ts.map +1 -0
  12. package/build/lib/app-utils.js +657 -0
  13. package/build/lib/app-utils.js.map +1 -0
  14. package/build/lib/commands/active-app-info.d.ts +9 -0
  15. package/build/lib/commands/active-app-info.d.ts.map +1 -0
  16. package/build/lib/commands/active-app-info.js +14 -0
  17. package/build/lib/commands/active-app-info.js.map +1 -0
  18. package/build/lib/commands/advanced-battery-types.d.ts +444 -0
  19. package/build/lib/commands/advanced-battery-types.d.ts.map +1 -0
  20. package/build/lib/commands/advanced-battery-types.js +8 -0
  21. package/build/lib/commands/advanced-battery-types.js.map +1 -0
  22. package/build/lib/commands/alert.d.ts +45 -0
  23. package/build/lib/commands/alert.d.ts.map +1 -0
  24. package/build/lib/commands/alert.js +87 -0
  25. package/build/lib/commands/alert.js.map +1 -0
  26. package/build/lib/commands/app-management.d.ts +153 -0
  27. package/build/lib/commands/app-management.d.ts.map +1 -0
  28. package/build/lib/commands/app-management.js +323 -0
  29. package/build/lib/commands/app-management.js.map +1 -0
  30. package/build/lib/commands/app-strings.d.ts +16 -0
  31. package/build/lib/commands/app-strings.d.ts.map +1 -0
  32. package/build/lib/commands/app-strings.js +30 -0
  33. package/build/lib/commands/app-strings.js.map +1 -0
  34. package/build/lib/commands/appearance.d.ts +22 -0
  35. package/build/lib/commands/appearance.d.ts.map +1 -0
  36. package/build/lib/commands/appearance.js +74 -0
  37. package/build/lib/commands/appearance.js.map +1 -0
  38. package/build/lib/commands/audit.d.ts +43 -0
  39. package/build/lib/commands/audit.d.ts.map +1 -0
  40. package/build/lib/commands/audit.js +31 -0
  41. package/build/lib/commands/audit.js.map +1 -0
  42. package/build/lib/commands/battery.d.ts +13 -0
  43. package/build/lib/commands/battery.d.ts.map +1 -0
  44. package/build/lib/commands/battery.js +49 -0
  45. package/build/lib/commands/battery.js.map +1 -0
  46. package/build/lib/commands/bidi/constants.d.ts +6 -0
  47. package/build/lib/commands/bidi/constants.d.ts.map +1 -0
  48. package/build/lib/commands/bidi/constants.js +10 -0
  49. package/build/lib/commands/bidi/constants.js.map +1 -0
  50. package/build/lib/commands/bidi/models.d.ts +9 -0
  51. package/build/lib/commands/bidi/models.d.ts.map +1 -0
  52. package/build/lib/commands/bidi/models.js +54 -0
  53. package/build/lib/commands/bidi/models.js.map +1 -0
  54. package/build/lib/commands/bidi/types.d.ts +26 -0
  55. package/build/lib/commands/bidi/types.d.ts.map +1 -0
  56. package/build/lib/commands/bidi/types.js +4 -0
  57. package/build/lib/commands/bidi/types.js.map +1 -0
  58. package/build/lib/commands/biometric.d.ts +32 -0
  59. package/build/lib/commands/biometric.d.ts.map +1 -0
  60. package/build/lib/commands/biometric.js +54 -0
  61. package/build/lib/commands/biometric.js.map +1 -0
  62. package/build/lib/commands/certificate.d.ts +50 -0
  63. package/build/lib/commands/certificate.d.ts.map +1 -0
  64. package/build/lib/commands/certificate.js +454 -0
  65. package/build/lib/commands/certificate.js.map +1 -0
  66. package/build/lib/commands/clipboard.d.ts +21 -0
  67. package/build/lib/commands/clipboard.d.ts.map +1 -0
  68. package/build/lib/commands/clipboard.js +36 -0
  69. package/build/lib/commands/clipboard.js.map +1 -0
  70. package/build/lib/commands/condition.d.ts +102 -0
  71. package/build/lib/commands/condition.d.ts.map +1 -0
  72. package/build/lib/commands/condition.js +146 -0
  73. package/build/lib/commands/condition.js.map +1 -0
  74. package/build/lib/commands/content-size.d.ts +30 -0
  75. package/build/lib/commands/content-size.d.ts.map +1 -0
  76. package/build/lib/commands/content-size.js +67 -0
  77. package/build/lib/commands/content-size.js.map +1 -0
  78. package/build/lib/commands/context.d.ts +191 -0
  79. package/build/lib/commands/context.d.ts.map +1 -0
  80. package/build/lib/commands/context.js +625 -0
  81. package/build/lib/commands/context.js.map +1 -0
  82. package/build/lib/commands/deviceInfo.d.ts +12 -0
  83. package/build/lib/commands/deviceInfo.d.ts.map +1 -0
  84. package/build/lib/commands/deviceInfo.js +25 -0
  85. package/build/lib/commands/deviceInfo.js.map +1 -0
  86. package/build/lib/commands/element.d.ts +108 -0
  87. package/build/lib/commands/element.d.ts.map +1 -0
  88. package/build/lib/commands/element.js +395 -0
  89. package/build/lib/commands/element.js.map +1 -0
  90. package/build/lib/commands/enum.d.ts +105 -0
  91. package/build/lib/commands/enum.d.ts.map +1 -0
  92. package/build/lib/commands/enum.js +113 -0
  93. package/build/lib/commands/enum.js.map +1 -0
  94. package/build/lib/commands/execute.d.ts +33 -0
  95. package/build/lib/commands/execute.d.ts.map +1 -0
  96. package/build/lib/commands/execute.js +142 -0
  97. package/build/lib/commands/execute.js.map +1 -0
  98. package/build/lib/commands/file-movement.d.ts +90 -0
  99. package/build/lib/commands/file-movement.d.ts.map +1 -0
  100. package/build/lib/commands/file-movement.js +477 -0
  101. package/build/lib/commands/file-movement.js.map +1 -0
  102. package/build/lib/commands/find.d.ts +21 -0
  103. package/build/lib/commands/find.d.ts.map +1 -0
  104. package/build/lib/commands/find.js +199 -0
  105. package/build/lib/commands/find.js.map +1 -0
  106. package/build/lib/commands/general.d.ts +137 -0
  107. package/build/lib/commands/general.d.ts.map +1 -0
  108. package/build/lib/commands/general.js +270 -0
  109. package/build/lib/commands/general.js.map +1 -0
  110. package/build/lib/commands/geolocation.d.ts +57 -0
  111. package/build/lib/commands/geolocation.d.ts.map +1 -0
  112. package/build/lib/commands/geolocation.js +58 -0
  113. package/build/lib/commands/geolocation.js.map +1 -0
  114. package/build/lib/commands/gesture.d.ts +283 -0
  115. package/build/lib/commands/gesture.d.ts.map +1 -0
  116. package/build/lib/commands/gesture.js +565 -0
  117. package/build/lib/commands/gesture.js.map +1 -0
  118. package/build/lib/commands/hid-event.d.ts +2773 -0
  119. package/build/lib/commands/hid-event.d.ts.map +1 -0
  120. package/build/lib/commands/hid-event.js +1633 -0
  121. package/build/lib/commands/hid-event.js.map +1 -0
  122. package/build/lib/commands/increase-contrast.d.ts +24 -0
  123. package/build/lib/commands/increase-contrast.d.ts.map +1 -0
  124. package/build/lib/commands/increase-contrast.js +49 -0
  125. package/build/lib/commands/increase-contrast.js.map +1 -0
  126. package/build/lib/commands/iohid.d.ts +1372 -0
  127. package/build/lib/commands/iohid.d.ts.map +1 -0
  128. package/build/lib/commands/iohid.js +63 -0
  129. package/build/lib/commands/iohid.js.map +1 -0
  130. package/build/lib/commands/keyboard.d.ts +32 -0
  131. package/build/lib/commands/keyboard.d.ts.map +1 -0
  132. package/build/lib/commands/keyboard.js +67 -0
  133. package/build/lib/commands/keyboard.js.map +1 -0
  134. package/build/lib/commands/keychains.d.ts +10 -0
  135. package/build/lib/commands/keychains.d.ts.map +1 -0
  136. package/build/lib/commands/keychains.js +22 -0
  137. package/build/lib/commands/keychains.js.map +1 -0
  138. package/build/lib/commands/localization.d.ts +17 -0
  139. package/build/lib/commands/localization.d.ts.map +1 -0
  140. package/build/lib/commands/localization.js +34 -0
  141. package/build/lib/commands/localization.js.map +1 -0
  142. package/build/lib/commands/location.d.ts +40 -0
  143. package/build/lib/commands/location.d.ts.map +1 -0
  144. package/build/lib/commands/location.js +121 -0
  145. package/build/lib/commands/location.js.map +1 -0
  146. package/build/lib/commands/lock.d.ts +23 -0
  147. package/build/lib/commands/lock.d.ts.map +1 -0
  148. package/build/lib/commands/lock.js +49 -0
  149. package/build/lib/commands/lock.js.map +1 -0
  150. package/build/lib/commands/log.d.ts +68 -0
  151. package/build/lib/commands/log.d.ts.map +1 -0
  152. package/build/lib/commands/log.js +287 -0
  153. package/build/lib/commands/log.js.map +1 -0
  154. package/build/lib/commands/memory.d.ts +11 -0
  155. package/build/lib/commands/memory.d.ts.map +1 -0
  156. package/build/lib/commands/memory.js +49 -0
  157. package/build/lib/commands/memory.js.map +1 -0
  158. package/build/lib/commands/navigation.d.ts +44 -0
  159. package/build/lib/commands/navigation.d.ts.map +1 -0
  160. package/build/lib/commands/navigation.js +121 -0
  161. package/build/lib/commands/navigation.js.map +1 -0
  162. package/build/lib/commands/notifications.d.ts +28 -0
  163. package/build/lib/commands/notifications.d.ts.map +1 -0
  164. package/build/lib/commands/notifications.js +64 -0
  165. package/build/lib/commands/notifications.js.map +1 -0
  166. package/build/lib/commands/pasteboard.d.ts +23 -0
  167. package/build/lib/commands/pasteboard.d.ts.map +1 -0
  168. package/build/lib/commands/pasteboard.js +43 -0
  169. package/build/lib/commands/pasteboard.js.map +1 -0
  170. package/build/lib/commands/pcap.d.ts +54 -0
  171. package/build/lib/commands/pcap.d.ts.map +1 -0
  172. package/build/lib/commands/pcap.js +149 -0
  173. package/build/lib/commands/pcap.js.map +1 -0
  174. package/build/lib/commands/performance.d.ts +85 -0
  175. package/build/lib/commands/performance.d.ts.map +1 -0
  176. package/build/lib/commands/performance.js +331 -0
  177. package/build/lib/commands/performance.js.map +1 -0
  178. package/build/lib/commands/permissions.d.ts +36 -0
  179. package/build/lib/commands/permissions.d.ts.map +1 -0
  180. package/build/lib/commands/permissions.js +80 -0
  181. package/build/lib/commands/permissions.js.map +1 -0
  182. package/build/lib/commands/proxy-helper.d.ts +15 -0
  183. package/build/lib/commands/proxy-helper.d.ts.map +1 -0
  184. package/build/lib/commands/proxy-helper.js +117 -0
  185. package/build/lib/commands/proxy-helper.js.map +1 -0
  186. package/build/lib/commands/record-audio.d.ts +69 -0
  187. package/build/lib/commands/record-audio.d.ts.map +1 -0
  188. package/build/lib/commands/record-audio.js +228 -0
  189. package/build/lib/commands/record-audio.js.map +1 -0
  190. package/build/lib/commands/recordscreen.d.ts +89 -0
  191. package/build/lib/commands/recordscreen.d.ts.map +1 -0
  192. package/build/lib/commands/recordscreen.js +326 -0
  193. package/build/lib/commands/recordscreen.js.map +1 -0
  194. package/build/lib/commands/screenshots.d.ts +16 -0
  195. package/build/lib/commands/screenshots.d.ts.map +1 -0
  196. package/build/lib/commands/screenshots.js +129 -0
  197. package/build/lib/commands/screenshots.js.map +1 -0
  198. package/build/lib/commands/simctl.d.ts +27 -0
  199. package/build/lib/commands/simctl.d.ts.map +1 -0
  200. package/build/lib/commands/simctl.js +65 -0
  201. package/build/lib/commands/simctl.js.map +1 -0
  202. package/build/lib/commands/source.d.ts +16 -0
  203. package/build/lib/commands/source.d.ts.map +1 -0
  204. package/build/lib/commands/source.js +128 -0
  205. package/build/lib/commands/source.js.map +1 -0
  206. package/build/lib/commands/timeouts.d.ts +53 -0
  207. package/build/lib/commands/timeouts.d.ts.map +1 -0
  208. package/build/lib/commands/timeouts.js +71 -0
  209. package/build/lib/commands/timeouts.js.map +1 -0
  210. package/build/lib/commands/types.d.ts +539 -0
  211. package/build/lib/commands/types.d.ts.map +1 -0
  212. package/build/lib/commands/types.js +3 -0
  213. package/build/lib/commands/types.js.map +1 -0
  214. package/build/lib/commands/web.d.ts +297 -0
  215. package/build/lib/commands/web.d.ts.map +1 -0
  216. package/build/lib/commands/web.js +1029 -0
  217. package/build/lib/commands/web.js.map +1 -0
  218. package/build/lib/commands/xctest-record-screen.d.ts +92 -0
  219. package/build/lib/commands/xctest-record-screen.d.ts.map +1 -0
  220. package/build/lib/commands/xctest-record-screen.js +193 -0
  221. package/build/lib/commands/xctest-record-screen.js.map +1 -0
  222. package/build/lib/commands/xctest.d.ts +71 -0
  223. package/build/lib/commands/xctest.d.ts.map +1 -0
  224. package/build/lib/commands/xctest.js +257 -0
  225. package/build/lib/commands/xctest.js.map +1 -0
  226. package/build/lib/css-converter.d.ts +10 -0
  227. package/build/lib/css-converter.d.ts.map +1 -0
  228. package/build/lib/css-converter.js +258 -0
  229. package/build/lib/css-converter.js.map +1 -0
  230. package/build/lib/desired-caps.d.ts +506 -0
  231. package/build/lib/desired-caps.d.ts.map +1 -0
  232. package/build/lib/desired-caps.js +400 -0
  233. package/build/lib/desired-caps.js.map +1 -0
  234. package/build/lib/device-connections-factory.d.ts +13 -0
  235. package/build/lib/device-connections-factory.d.ts.map +1 -0
  236. package/build/lib/device-connections-factory.js +244 -0
  237. package/build/lib/device-connections-factory.js.map +1 -0
  238. package/build/lib/device-log/helpers.d.ts +10 -0
  239. package/build/lib/device-log/helpers.d.ts.map +1 -0
  240. package/build/lib/device-log/helpers.js +37 -0
  241. package/build/lib/device-log/helpers.js.map +1 -0
  242. package/build/lib/device-log/ios-crash-log.d.ts +34 -0
  243. package/build/lib/device-log/ios-crash-log.d.ts.map +1 -0
  244. package/build/lib/device-log/ios-crash-log.js +141 -0
  245. package/build/lib/device-log/ios-crash-log.js.map +1 -0
  246. package/build/lib/device-log/ios-device-log.d.ts +19 -0
  247. package/build/lib/device-log/ios-device-log.d.ts.map +1 -0
  248. package/build/lib/device-log/ios-device-log.js +42 -0
  249. package/build/lib/device-log/ios-device-log.js.map +1 -0
  250. package/build/lib/device-log/ios-log.d.ts +24 -0
  251. package/build/lib/device-log/ios-log.d.ts.map +1 -0
  252. package/build/lib/device-log/ios-log.js +50 -0
  253. package/build/lib/device-log/ios-log.js.map +1 -0
  254. package/build/lib/device-log/ios-performance-log.d.ts +18 -0
  255. package/build/lib/device-log/ios-performance-log.d.ts.map +1 -0
  256. package/build/lib/device-log/ios-performance-log.js +43 -0
  257. package/build/lib/device-log/ios-performance-log.js.map +1 -0
  258. package/build/lib/device-log/ios-simulator-log.d.ts +38 -0
  259. package/build/lib/device-log/ios-simulator-log.d.ts.map +1 -0
  260. package/build/lib/device-log/ios-simulator-log.js +184 -0
  261. package/build/lib/device-log/ios-simulator-log.js.map +1 -0
  262. package/build/lib/device-log/line-consuming-log.d.ts +9 -0
  263. package/build/lib/device-log/line-consuming-log.d.ts.map +1 -0
  264. package/build/lib/device-log/line-consuming-log.js +16 -0
  265. package/build/lib/device-log/line-consuming-log.js.map +1 -0
  266. package/build/lib/device-log/safari-console-log.d.ts +67 -0
  267. package/build/lib/device-log/safari-console-log.d.ts.map +1 -0
  268. package/build/lib/device-log/safari-console-log.js +81 -0
  269. package/build/lib/device-log/safari-console-log.js.map +1 -0
  270. package/build/lib/device-log/safari-network-log.d.ts +75 -0
  271. package/build/lib/device-log/safari-network-log.d.ts.map +1 -0
  272. package/build/lib/device-log/safari-network-log.js +47 -0
  273. package/build/lib/device-log/safari-network-log.js.map +1 -0
  274. package/build/lib/doctor/checks.d.ts +3 -0
  275. package/build/lib/doctor/checks.d.ts.map +1 -0
  276. package/build/lib/doctor/checks.js +39 -0
  277. package/build/lib/doctor/checks.js.map +1 -0
  278. package/build/lib/doctor/optional-checks.d.ts +46 -0
  279. package/build/lib/doctor/optional-checks.d.ts.map +1 -0
  280. package/build/lib/doctor/optional-checks.js +129 -0
  281. package/build/lib/doctor/optional-checks.js.map +1 -0
  282. package/build/lib/doctor/required-checks.d.ts +42 -0
  283. package/build/lib/doctor/required-checks.d.ts.map +1 -0
  284. package/build/lib/doctor/required-checks.js +94 -0
  285. package/build/lib/doctor/required-checks.js.map +1 -0
  286. package/build/lib/doctor/utils.d.ts +8 -0
  287. package/build/lib/doctor/utils.d.ts.map +1 -0
  288. package/build/lib/doctor/utils.js +21 -0
  289. package/build/lib/doctor/utils.js.map +1 -0
  290. package/build/lib/driver.d.ts +2429 -0
  291. package/build/lib/driver.d.ts.map +1 -0
  292. package/build/lib/driver.js +1967 -0
  293. package/build/lib/driver.js.map +1 -0
  294. package/build/lib/execute-method-map.d.ts +552 -0
  295. package/build/lib/execute-method-map.d.ts.map +1 -0
  296. package/build/lib/execute-method-map.js +586 -0
  297. package/build/lib/execute-method-map.js.map +1 -0
  298. package/build/lib/ios-fs-helpers.d.ts +75 -0
  299. package/build/lib/ios-fs-helpers.d.ts.map +1 -0
  300. package/build/lib/ios-fs-helpers.js +370 -0
  301. package/build/lib/ios-fs-helpers.js.map +1 -0
  302. package/build/lib/ios-generic-simulators.d.ts +6 -0
  303. package/build/lib/ios-generic-simulators.d.ts.map +1 -0
  304. package/build/lib/ios-generic-simulators.js +14 -0
  305. package/build/lib/ios-generic-simulators.js.map +1 -0
  306. package/build/lib/logger.d.ts +3 -0
  307. package/build/lib/logger.d.ts.map +1 -0
  308. package/build/lib/logger.js +6 -0
  309. package/build/lib/logger.js.map +1 -0
  310. package/build/lib/method-map.d.ts +229 -0
  311. package/build/lib/method-map.d.ts.map +1 -0
  312. package/build/lib/method-map.js +200 -0
  313. package/build/lib/method-map.js.map +1 -0
  314. package/build/lib/real-device-clients/base-device-client.d.ts +22 -0
  315. package/build/lib/real-device-clients/base-device-client.d.ts.map +1 -0
  316. package/build/lib/real-device-clients/base-device-client.js +14 -0
  317. package/build/lib/real-device-clients/base-device-client.js.map +1 -0
  318. package/build/lib/real-device-clients/py-ios-device-client.d.ts +21 -0
  319. package/build/lib/real-device-clients/py-ios-device-client.d.ts.map +1 -0
  320. package/build/lib/real-device-clients/py-ios-device-client.js +125 -0
  321. package/build/lib/real-device-clients/py-ios-device-client.js.map +1 -0
  322. package/build/lib/real-device-management.d.ts +53 -0
  323. package/build/lib/real-device-management.d.ts.map +1 -0
  324. package/build/lib/real-device-management.js +128 -0
  325. package/build/lib/real-device-management.js.map +1 -0
  326. package/build/lib/real-device.d.ts +112 -0
  327. package/build/lib/real-device.d.ts.map +1 -0
  328. package/build/lib/real-device.js +352 -0
  329. package/build/lib/real-device.js.map +1 -0
  330. package/build/lib/simulator-management.d.ts +96 -0
  331. package/build/lib/simulator-management.d.ts.map +1 -0
  332. package/build/lib/simulator-management.js +278 -0
  333. package/build/lib/simulator-management.js.map +1 -0
  334. package/build/lib/stubs.d.ts +3 -0
  335. package/build/lib/stubs.d.ts.map +1 -0
  336. package/build/lib/stubs.js +3 -0
  337. package/build/lib/stubs.js.map +1 -0
  338. package/build/lib/types.d.ts +31 -0
  339. package/build/lib/types.d.ts.map +1 -0
  340. package/build/lib/types.js +3 -0
  341. package/build/lib/types.js.map +1 -0
  342. package/build/lib/utils.d.ts +191 -0
  343. package/build/lib/utils.d.ts.map +1 -0
  344. package/build/lib/utils.js +549 -0
  345. package/build/lib/utils.js.map +1 -0
  346. package/build/lib/xcrun.d.ts +3 -0
  347. package/build/lib/xcrun.d.ts.map +1 -0
  348. package/build/lib/xcrun.js +17 -0
  349. package/build/lib/xcrun.js.map +1 -0
  350. package/index.js +7 -0
  351. package/lib/app-infos-cache.js +187 -0
  352. package/lib/app-utils.js +710 -0
  353. package/lib/commands/active-app-info.js +12 -0
  354. package/lib/commands/advanced-battery-types.ts +454 -0
  355. package/lib/commands/alert.js +88 -0
  356. package/lib/commands/app-management.js +346 -0
  357. package/lib/commands/app-strings.js +30 -0
  358. package/lib/commands/appearance.js +71 -0
  359. package/lib/commands/audit.js +31 -0
  360. package/lib/commands/battery.js +45 -0
  361. package/lib/commands/bidi/constants.ts +6 -0
  362. package/lib/commands/bidi/models.ts +55 -0
  363. package/lib/commands/bidi/types.ts +31 -0
  364. package/lib/commands/biometric.js +53 -0
  365. package/lib/commands/certificate.js +497 -0
  366. package/lib/commands/clipboard.js +35 -0
  367. package/lib/commands/condition.js +155 -0
  368. package/lib/commands/content-size.js +68 -0
  369. package/lib/commands/context.js +705 -0
  370. package/lib/commands/deviceInfo.js +27 -0
  371. package/lib/commands/element.js +423 -0
  372. package/lib/commands/enum.ts +108 -0
  373. package/lib/commands/execute.js +153 -0
  374. package/lib/commands/file-movement.js +510 -0
  375. package/lib/commands/find.js +205 -0
  376. package/lib/commands/general.js +278 -0
  377. package/lib/commands/geolocation.js +56 -0
  378. package/lib/commands/gesture.js +596 -0
  379. package/lib/commands/hid-event.ts +1634 -0
  380. package/lib/commands/increase-contrast.js +50 -0
  381. package/lib/commands/iohid.js +64 -0
  382. package/lib/commands/keyboard.js +62 -0
  383. package/lib/commands/keychains.js +18 -0
  384. package/lib/commands/localization.js +30 -0
  385. package/lib/commands/location.js +131 -0
  386. package/lib/commands/lock.js +46 -0
  387. package/lib/commands/log.js +327 -0
  388. package/lib/commands/memory.js +51 -0
  389. package/lib/commands/navigation.js +125 -0
  390. package/lib/commands/notifications.js +66 -0
  391. package/lib/commands/pasteboard.js +42 -0
  392. package/lib/commands/pcap.js +168 -0
  393. package/lib/commands/performance.js +392 -0
  394. package/lib/commands/permissions.js +85 -0
  395. package/lib/commands/proxy-helper.js +122 -0
  396. package/lib/commands/record-audio.js +264 -0
  397. package/lib/commands/recordscreen.js +391 -0
  398. package/lib/commands/screenshots.js +137 -0
  399. package/lib/commands/simctl.js +71 -0
  400. package/lib/commands/source.js +131 -0
  401. package/lib/commands/timeouts.js +68 -0
  402. package/lib/commands/types.ts +648 -0
  403. package/lib/commands/web.js +1113 -0
  404. package/lib/commands/xctest-record-screen.js +204 -0
  405. package/lib/commands/xctest.js +285 -0
  406. package/lib/css-converter.js +311 -0
  407. package/lib/desired-caps.js +396 -0
  408. package/lib/device-connections-factory.js +269 -0
  409. package/lib/device-log/helpers.ts +40 -0
  410. package/lib/device-log/ios-crash-log.ts +166 -0
  411. package/lib/device-log/ios-device-log.ts +51 -0
  412. package/lib/device-log/ios-log.ts +70 -0
  413. package/lib/device-log/ios-performance-log.ts +50 -0
  414. package/lib/device-log/ios-simulator-log.ts +202 -0
  415. package/lib/device-log/line-consuming-log.ts +16 -0
  416. package/lib/device-log/safari-console-log.ts +117 -0
  417. package/lib/device-log/safari-network-log.ts +120 -0
  418. package/lib/doctor/checks.ts +3 -0
  419. package/lib/doctor/optional-checks.ts +173 -0
  420. package/lib/doctor/required-checks.ts +120 -0
  421. package/lib/doctor/utils.ts +18 -0
  422. package/lib/driver.js +2316 -0
  423. package/lib/execute-method-map.ts +585 -0
  424. package/lib/ios-fs-helpers.js +355 -0
  425. package/lib/ios-generic-simulators.js +11 -0
  426. package/lib/logger.js +5 -0
  427. package/lib/method-map.js +196 -0
  428. package/lib/real-device-clients/base-device-client.ts +34 -0
  429. package/lib/real-device-clients/py-ios-device-client.ts +149 -0
  430. package/lib/real-device-management.js +133 -0
  431. package/lib/real-device.js +347 -0
  432. package/lib/simulator-management.js +324 -0
  433. package/lib/stubs.ts +3 -0
  434. package/lib/types.ts +33 -0
  435. package/lib/utils.js +551 -0
  436. package/lib/xcrun.js +16 -0
  437. package/package.json +175 -0
  438. package/scripts/build-docs.js +56 -0
  439. package/scripts/build-wda.js +42 -0
  440. package/scripts/download-wda-sim.mjs +68 -0
  441. package/scripts/image-mounter.mjs +239 -0
  442. package/scripts/open-wda.mjs +15 -0
  443. package/scripts/tunnel-creation.mjs +359 -0
  444. package/scripts/utils.js +16 -0
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.assertIDB = assertIDB;
7
+ exports.parseXCTestStdout = parseXCTestStdout;
8
+ exports.mobileRunXCTest = mobileRunXCTest;
9
+ exports.mobileInstallXCTestBundle = mobileInstallXCTestBundle;
10
+ exports.mobileListXCTestBundles = mobileListXCTestBundles;
11
+ exports.mobileListXCTestsInTestBundle = mobileListXCTestsInTestBundle;
12
+ const bluebird_1 = __importDefault(require("bluebird"));
13
+ const support_1 = require("appium/support");
14
+ const lodash_1 = __importDefault(require("lodash"));
15
+ const driver_1 = require("appium/driver");
16
+ const XCTEST_TIMEOUT = 360000; // 60 minute timeout
17
+ const xctestLog = support_1.logger.getLogger('XCTest');
18
+ /**
19
+ * Asserts that IDB is present and that launchWithIDB was used
20
+ *
21
+ * @param {XCUITestDriver['opts']} opts Opts object from the driver instance
22
+ */
23
+ function assertIDB(opts) {
24
+ if (!this.device?.idb || !opts.launchWithIDB) {
25
+ throw new Error(`To use XCTest runner, IDB (https://github.com/facebook/idb) must be installed ` +
26
+ `and sessions must be run with the "launchWithIDB" capability`);
27
+ }
28
+ return this.device.idb;
29
+ }
30
+ /**
31
+ * Parse the stdout of XC test log
32
+ * @param {string} stdout A line of standard out from `idb xctest run ...`
33
+ * @returns {XCTestResult[]|string[]} results The final output of the XCTest run
34
+ */
35
+ function parseXCTestStdout(stdout) {
36
+ // Parses a 'key' into JSON format
37
+ function parseKey(name) {
38
+ const words = name.split(' ');
39
+ let out = '';
40
+ for (const word of words) {
41
+ out += word.substr(0, 1).toUpperCase() + word.substr(1);
42
+ }
43
+ return out.substr(0, 1).toLowerCase() + out.substr(1);
44
+ }
45
+ // Parses a 'value' into JSON format
46
+ function parseValue(value) {
47
+ value = value || '';
48
+ switch (value.toLowerCase()) {
49
+ case 'true':
50
+ return true;
51
+ case 'false':
52
+ return false;
53
+ case '':
54
+ return null;
55
+ default:
56
+ break;
57
+ }
58
+ if (!isNaN(value)) {
59
+ if (!lodash_1.default.isString(value)) {
60
+ return 0;
61
+ }
62
+ else if (value.indexOf('.') > 0) {
63
+ return parseFloat(value);
64
+ }
65
+ return parseInt(value, 10);
66
+ }
67
+ return value;
68
+ }
69
+ if (!stdout) {
70
+ return [];
71
+ }
72
+ // Parse each line into an array
73
+ const lines = stdout.trim().split('\n');
74
+ // One single string, just return the string
75
+ if (lines.length === 1 && !lines[0].includes('|')) {
76
+ return [lines[0]];
77
+ }
78
+ /** @type {XCTestResult[]} */
79
+ const results = [];
80
+ for (const line of lines) {
81
+ // The properties are split up by pipes and each property
82
+ // has the format "Some Key : Some Value"
83
+ const properties = line.split('|');
84
+ // Parse each property
85
+ /** @type {XCTestResult} */
86
+ const output = /** @type {any} */ ({});
87
+ let entryIndex = 0;
88
+ for (const prop of properties) {
89
+ if (entryIndex === 0) {
90
+ // The first property only contains one string that contains
91
+ // the test name (e.g.: 'XCTesterAppUITests - XCTesterAppUITests.XCTesterAppUITests/testExample')
92
+ output.testName = prop.trim();
93
+ }
94
+ else if (prop.trim().startsWith('Location')) {
95
+ // The Location property has a value that comes after 'Location' without colon.
96
+ // e.g. Location /path/to/XCTesterAppUITests/XCTesterAppUITests.swift:36
97
+ output.location = prop.substring(prop.indexOf('Location') + 8).trim();
98
+ }
99
+ else {
100
+ let [key, value] = prop.split(':');
101
+ output[parseKey(key.trim())] = parseValue(value ? value.trim() : '');
102
+ }
103
+ entryIndex++;
104
+ }
105
+ // keep backward compatibility
106
+ // old pattern: XCTesterAppUITests - XCTesterAppUITests.XCTesterAppUITests/testExample | Passed: True | Crashed: False | Duration: 1.485 | Failure message: | Location :0
107
+ // latest pattern: XCTesterAppUITests - XCTesterAppUITests.XCTesterAppUITests/testExample | Status: passed | Duration: 1.9255789518356323
108
+ if (!output.passed) {
109
+ output.passed = output.status === 'passed';
110
+ output.crashed = output.status === 'crashed';
111
+ }
112
+ else if (!output.status) {
113
+ if (output.passed) {
114
+ output.status = 'passed';
115
+ }
116
+ else if (output.crashed) {
117
+ output.status = 'crashed';
118
+ }
119
+ else {
120
+ output.status = 'failed';
121
+ }
122
+ }
123
+ // Add this line to the results
124
+ results.push(output);
125
+ }
126
+ return results;
127
+ }
128
+ /**
129
+ * @typedef {Error} XCUITestError
130
+ *
131
+ * @property {number} code Subprocess exit code
132
+ * @property {string} signal The signal (SIG*) that caused the process to fail
133
+ * @property {XCTestResult[]} results The output of the failed test (if there is output)
134
+ */
135
+ /**
136
+ * Run a native XCTest script.
137
+ *
138
+ * Launches a subprocess that runs the XC Test and blocks until it is completed. Parses the stdout of the process and returns its result as an array.
139
+ *
140
+ * **Facebook's [IDB](https://github.com/facebook/idb) tool is required** to run such tests; see [the idb docs](https://fbidb.io/docs/test-execution/) for reference.
141
+ *
142
+ * @param {string} testRunnerBundleId - Test app bundle (e.g.: `io.appium.XCTesterAppUITests.xctrunner`)
143
+ * @param {string} appUnderTestBundleId - App-under-test bundle
144
+ * @param {string} xcTestBundleId - XCTest bundle ID
145
+ * @param {string[]} args - Launch arguments to start the test with (see [reference documentation](https://developer.apple.com/documentation/xctest/xcuiapplication/1500477-launcharguments))
146
+ * @param {'app'|'ui'|'logic'} testType - XC test type
147
+ * @param {import('@appium/types').StringRecord} [env] - Environment variables passed to test
148
+ * @param {number} timeout - Timeout (in ms) for session completion.
149
+ * @throws {XCUITestError} Error thrown if subprocess returns non-zero exit code
150
+ * @returns {Promise<import('./types').RunXCTestResult>} The array of test results
151
+ * @this {XCUITestDriver}
152
+ */
153
+ async function mobileRunXCTest(testRunnerBundleId, appUnderTestBundleId, xcTestBundleId, args = [], testType = 'ui', env, timeout = XCTEST_TIMEOUT) {
154
+ const subproc = await assertIDB(this.opts).runXCUITest(testRunnerBundleId, appUnderTestBundleId, xcTestBundleId, { env, args, testType });
155
+ return await new bluebird_1.default((resolve, reject) => {
156
+ let mostRecentLogObject = null;
157
+ let xctestTimeout;
158
+ let lastErrorMessage = null;
159
+ if (timeout > 0) {
160
+ xctestTimeout = setTimeout(() => reject(new driver_1.errors.TimeoutError(`Timed out after '${timeout}ms' waiting for XCTest to complete`)), timeout);
161
+ }
162
+ subproc.on('output', (stdout, stderr) => {
163
+ if (stdout) {
164
+ try {
165
+ mostRecentLogObject = parseXCTestStdout(stdout);
166
+ }
167
+ catch (err) {
168
+ // Fails if log parsing fails.
169
+ // This is in case IDB changes the way that logs are formatted and
170
+ // it breaks 'parseXCTestStdout'. If that happens we still want the process
171
+ // to finish
172
+ this.log.warn(`Failed to parse logs from test output: '${stdout}'`);
173
+ this.log.debug(err.stack);
174
+ }
175
+ }
176
+ if (stderr) {
177
+ lastErrorMessage = stderr;
178
+ xctestLog.error(stderr);
179
+ }
180
+ if (stdout) {
181
+ xctestLog.info(stdout);
182
+ }
183
+ });
184
+ subproc.on('exit', (code, signal) => {
185
+ clearTimeout(xctestTimeout);
186
+ if (code !== 0) {
187
+ const err = /** @type {any} */ (new Error(lastErrorMessage || mostRecentLogObject));
188
+ err.code = code;
189
+ if (signal != null) {
190
+ err.signal = signal;
191
+ }
192
+ if (mostRecentLogObject) {
193
+ err.result = mostRecentLogObject;
194
+ }
195
+ return reject(err);
196
+ }
197
+ resolve({
198
+ code,
199
+ signal,
200
+ results: mostRecentLogObject,
201
+ passed: true,
202
+ });
203
+ });
204
+ });
205
+ }
206
+ /**
207
+ * Installs an XCTest bundle to the device under test.
208
+ *
209
+ * **Facebook's [IDB](https://github.com/facebook/idb) tool is required** for this command to work.
210
+ *
211
+ * @param {string} xctestApp - Path of the XCTest app (URL or filename with extension `.app`)
212
+ * @returns {Promise<void>}
213
+ * @this {XCUITestDriver}
214
+ */
215
+ async function mobileInstallXCTestBundle(xctestApp) {
216
+ if (!lodash_1.default.isString(xctestApp)) {
217
+ throw new driver_1.errors.InvalidArgumentError(`'xctestApp' is a required parameter for 'installXCTestBundle' and ` +
218
+ `must be a string. Found '${xctestApp}'`);
219
+ }
220
+ xctestLog.info(`Installing bundle '${xctestApp}'`);
221
+ const idb = assertIDB(this.opts);
222
+ const res = await this.helpers.configureApp(xctestApp, '.xctest');
223
+ await idb.installXCTestBundle(res);
224
+ }
225
+ /**
226
+ * List XCTest bundles that are installed on the device.
227
+ *
228
+ * **Facebook's [IDB](https://github.com/facebook/idb) tool is required** for this command to work.
229
+ *
230
+ * @returns {Promise<string[]>} List of XCTest bundles (e.g.: `XCTesterAppUITests.XCTesterAppUITests/testLaunchPerformance`)
231
+ * @this {XCUITestDriver}
232
+ */
233
+ async function mobileListXCTestBundles() {
234
+ return await assertIDB(this.opts).listXCTestBundles();
235
+ }
236
+ /**
237
+ * List XCTests in a test bundle
238
+ *
239
+ * **Facebook's [IDB](https://github.com/facebook/idb) tool is required** for this command to work.
240
+ * @param {string} bundle - Bundle ID of the XCTest
241
+ *
242
+ * @returns {Promise<string[]>} The list of xctests in the test bundle (e.g., `['XCTesterAppUITests.XCTesterAppUITests/testExample', 'XCTesterAppUITests.XCTesterAppUITests/testLaunchPerformance']`)
243
+ * @this {XCUITestDriver}
244
+ */
245
+ async function mobileListXCTestsInTestBundle(bundle) {
246
+ if (!lodash_1.default.isString(bundle)) {
247
+ throw new driver_1.errors.InvalidArgumentError(`'bundle' is a required parameter for 'listXCTestsInTestBundle' and ` +
248
+ `must be a string. Found '${bundle}'`);
249
+ }
250
+ const idb = assertIDB(this.opts);
251
+ return await idb.listXCTestsInTestBundle(bundle);
252
+ }
253
+ /**
254
+ * @typedef {import('../driver').XCUITestDriver} XCUITestDriver
255
+ * @typedef {import('./types').XCTestResult} XCTestResult
256
+ */
257
+ //# sourceMappingURL=xctest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xctest.js","sourceRoot":"","sources":["../../../lib/commands/xctest.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export default CssConverter;
2
+ declare namespace CssConverter {
3
+ /**
4
+ * Convert a CSS selector to a iOS Class Chain selector
5
+ * @param {string} cssSelector CSS Selector
6
+ * @returns {string} The CSS selector converted to an iOS Class Chain
7
+ */
8
+ function toIosClassChainSelector(cssSelector: string): string;
9
+ }
10
+ //# sourceMappingURL=css-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-converter.d.ts","sourceRoot":"","sources":["../../lib/css-converter.js"],"names":[],"mappings":";;IA6RA;;;;OAIG;IACH,8CAHW,MAAM,GACJ,MAAM,CAoBlB"}
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const css_selector_parser_1 = require("css-selector-parser");
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const driver_1 = require("appium/driver");
9
+ const logger_js_1 = __importDefault(require("./logger.js"));
10
+ const CssConverter = {};
11
+ const parseCssSelector = (0, css_selector_parser_1.createParser)({
12
+ syntax: {
13
+ pseudoClasses: {
14
+ unknown: 'accept',
15
+ definitions: {
16
+ Selector: ['has'],
17
+ },
18
+ },
19
+ combinators: ['>', '+', '~'],
20
+ attributes: {
21
+ operators: ['^=', '$=', '*=', '~=', '='],
22
+ },
23
+ ids: true,
24
+ classNames: true,
25
+ tag: {
26
+ wildcard: true,
27
+ },
28
+ },
29
+ substitutes: true,
30
+ });
31
+ const BOOLEAN_ATTRS = ['visible', 'accessible', 'accessibility-container', 'enabled'];
32
+ const NUMERIC_ATTRS = ['index'];
33
+ const STR_ATTRS = ['label', 'name', 'value', 'type'];
34
+ const ALL_ATTRS = [...BOOLEAN_ATTRS, ...NUMERIC_ATTRS, ...STR_ATTRS];
35
+ /**
36
+ * @type {[string, string[]][]}
37
+ */
38
+ const ATTRIBUTE_ALIASES = [
39
+ ['name', ['id']],
40
+ ['index', ['nth-child']],
41
+ ];
42
+ /**
43
+ * Convert hyphen separated word to camel case
44
+ *
45
+ * @param {string?} str
46
+ * @returns {string} The hyphen separated word translated to camel case
47
+ */
48
+ function toCamelCase(str) {
49
+ if (!str) {
50
+ return '';
51
+ }
52
+ const tokens = str
53
+ .split('-')
54
+ .map((str) => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase());
55
+ const out = tokens.join('');
56
+ return out.charAt(0).toLowerCase() + out.slice(1);
57
+ }
58
+ /**
59
+ * Get the boolean from a CSS object. If empty, return true. If not true/false/empty, throw exception
60
+ *
61
+ * @param {import('css-selector-parser').AstAttribute|import('css-selector-parser').AstPseudoClass} cssAttr
62
+ * @returns {string} Either 'true' or 'false'. If value is empty, return 'true'
63
+ */
64
+ function requireBoolean(cssAttr) {
65
+ // @ts-ignore We only support strings
66
+ const attrValue = cssAttr.value?.value;
67
+ const val = lodash_1.default.toLower(attrValue) || 'true'; // an omitted boolean attribute means 'true' (e.g.: input[checked] means checked is true)
68
+ switch (val) {
69
+ case '0':
70
+ case 'false':
71
+ return '0';
72
+ case '1':
73
+ case 'true':
74
+ return '1';
75
+ default:
76
+ throw new TypeError(`'${cssAttr.name}' must be true/1 or false/0 or empty. Found '${attrValue}'`);
77
+ }
78
+ }
79
+ /**
80
+ * Get the canonical form of a CSS attribute name
81
+ *
82
+ * Converts to lowercase and if an attribute name is an alias for something else, return
83
+ * what it is an alias for
84
+ *
85
+ * @param {import('css-selector-parser').AstAttribute|import('css-selector-parser').AstPseudoClass} cssEntity
86
+ * @returns {string} The canonical attribute name
87
+ */
88
+ function requireEntityName(cssEntity) {
89
+ const entityName = cssEntity.name.toLowerCase();
90
+ // Check if it's supported and if it is, return it
91
+ if (ALL_ATTRS.includes(entityName)) {
92
+ return entityName.toLowerCase();
93
+ }
94
+ // If attrName is an alias for something else, return that
95
+ for (const [officialAttr, aliasAttrs] of ATTRIBUTE_ALIASES) {
96
+ if (aliasAttrs.includes(entityName)) {
97
+ return officialAttr;
98
+ }
99
+ }
100
+ throw new Error(`'${entityName}' is not a valid attribute. ` +
101
+ `Supported attributes are: '${ALL_ATTRS.join(', ')}'`);
102
+ }
103
+ /**
104
+ * Convert a CSS attribute into a UiSelector method call
105
+ *
106
+ * @param {import('css-selector-parser').AstAttribute} cssAttr CSS attribute object
107
+ * @returns {string|{index: string|undefined}} CSS attribute parsed as UiSelector
108
+ */
109
+ function parseAttr(cssAttr) {
110
+ // @ts-ignore We only care for strings
111
+ const attrValue = cssAttr.value?.value;
112
+ if (!lodash_1.default.isString(attrValue) && !lodash_1.default.isEmpty(attrValue)) {
113
+ throw new TypeError(`'${cssAttr.name}=${attrValue}' is an invalid attribute. ` +
114
+ `Only 'string' and empty attribute types are supported. Found '${attrValue}'`);
115
+ }
116
+ const attrName = toCamelCase(requireEntityName(cssAttr));
117
+ // Validate that it's a supported attribute
118
+ if (!STR_ATTRS.includes(attrName) && !BOOLEAN_ATTRS.includes(attrName)) {
119
+ throw new Error(`'${attrName}' is not supported. Supported attributes are ` +
120
+ `'${[...STR_ATTRS, ...BOOLEAN_ATTRS].join(', ')}'`);
121
+ }
122
+ // Parse index if it's an index attribute
123
+ if (attrName === 'index') {
124
+ return { index: attrValue };
125
+ }
126
+ if (BOOLEAN_ATTRS.includes(attrName)) {
127
+ return `${attrName} == ${requireBoolean(cssAttr)}`;
128
+ }
129
+ let value = attrValue || '';
130
+ if (value === '') {
131
+ return `[${attrName} LIKE ${value}]`;
132
+ }
133
+ switch (cssAttr.operator) {
134
+ case '=':
135
+ return `${attrName} == "${value}"`;
136
+ case '*=':
137
+ return `${attrName} MATCHES "${lodash_1.default.escapeRegExp(value)}"`;
138
+ case '^=':
139
+ return `${attrName} BEGINSWITH "${value}"`;
140
+ case '$=':
141
+ return `${attrName} ENDSWITH "${value}"`;
142
+ case '~=':
143
+ return `${attrName} CONTAINS "${value}"`;
144
+ default:
145
+ // Unreachable, but adding error in case a new CSS attribute is added.
146
+ throw new Error(`Unsupported CSS attribute operator '${cssAttr.operator}'. ` +
147
+ ` '=', '*=', '^=', '$=' and '~=' are supported.`);
148
+ }
149
+ }
150
+ /**
151
+ * Convert a CSS pseudo class to a UiSelector
152
+ *
153
+ * @param {import('css-selector-parser').AstPseudoClass} cssPseudo
154
+ * @returns {string|{index: string|undefined}|undefined} Pseudo selector parsed as UiSelector
155
+ */
156
+ function parsePseudo(cssPseudo) {
157
+ // @ts-ignore We only care for strings
158
+ const argValue = cssPseudo.argument?.value;
159
+ if (!lodash_1.default.isString(argValue) && !lodash_1.default.isEmpty(argValue)) {
160
+ throw new TypeError(`'${cssPseudo.name}=${argValue}'. ` +
161
+ `Unsupported css pseudo class value: '${argValue}'. Only 'string' type or empty is supported.`);
162
+ }
163
+ const pseudoName = requireEntityName(cssPseudo);
164
+ if (BOOLEAN_ATTRS.includes(pseudoName)) {
165
+ return `${toCamelCase(pseudoName)} == ${requireBoolean(cssPseudo)}`;
166
+ }
167
+ if (pseudoName === 'index') {
168
+ return { index: argValue };
169
+ }
170
+ }
171
+ /**
172
+ * Convert a CSS rule to a UiSelector
173
+ * @param {import('css-selector-parser').AstRule} cssRule CSS rule definition
174
+ */
175
+ function parseCssRule(cssRule) {
176
+ if (cssRule.combinator && ![' ', '>'].includes(cssRule.combinator)) {
177
+ throw new Error(`'${cssRule.combinator}' is not a supported combinator. ` +
178
+ `Only child combinator (>) and descendant combinator are supported.`);
179
+ }
180
+ let iosClassChainSelector = '';
181
+ const astClassNames = /** @type {import('css-selector-parser').AstClassName[]} */ (cssRule.items.filter(({ type }) => type === 'ClassName'));
182
+ const classNames = astClassNames.map(({ name }) => name);
183
+ if (classNames.length) {
184
+ throw new driver_1.errors.InvalidSelectorError(`'${[cssRule || '', ...classNames].join('.')}'
185
+ is not a valid ios class. Must be a single string (e.g.: XCUIElementTypeWindow) without
186
+ dots separating them`);
187
+ }
188
+ const astTag = /** @type {import('css-selector-parser').AstTagName|undefined} */ (cssRule.items.find(({ type }) => type === 'TagName'));
189
+ let tagName = astTag?.name ?? '';
190
+ if (tagName && tagName !== '*' && !lodash_1.default.startsWith(lodash_1.default.toLower(tagName), 'xcuielementtype')) {
191
+ const capitalizedTagName = tagName.charAt(0).toUpperCase() + tagName.slice(1);
192
+ tagName = `XCUIElementType${capitalizedTagName}`;
193
+ }
194
+ iosClassChainSelector += tagName || '*';
195
+ /** @type {(string|{index: string|undefined}|undefined)[]} */
196
+ const attrs = [];
197
+ const astIds = /** @type {import('css-selector-parser').AstId[]} */ (cssRule.items.filter(({ type }) => type === 'Id'));
198
+ const ids = astIds.map(({ name }) => name);
199
+ if (ids.length) {
200
+ attrs.push(`name == "${ids[0]}"`);
201
+ }
202
+ const attributes = /** @type {import('css-selector-parser').AstAttribute[]} */ (cssRule.items.filter(({ type }) => type === 'Attribute'));
203
+ for (const attr of attributes) {
204
+ attrs.push(parseAttr(attr));
205
+ }
206
+ const pseudoClasses = /** @type {import('css-selector-parser').AstPseudoClass[]} */ (cssRule.items.filter(({ type }) => type === 'PseudoClass'));
207
+ for (const pseudo of pseudoClasses) {
208
+ attrs.push(parsePseudo(pseudo));
209
+ }
210
+ const nonIndexAttrs = attrs.filter((attr) => lodash_1.default.isString(attr));
211
+ if (!lodash_1.default.isEmpty(nonIndexAttrs)) {
212
+ iosClassChainSelector += `[\`${nonIndexAttrs.join(' AND ')}\`]`;
213
+ }
214
+ const indexAttr = attrs.find((attr) => lodash_1.default.isObject(attr) && attr.index);
215
+ if (indexAttr) {
216
+ iosClassChainSelector += `[${ /** @type { {index: string} } */(indexAttr).index}]`;
217
+ }
218
+ if (cssRule.nestedRule) {
219
+ iosClassChainSelector += `/${parseCssRule(cssRule.nestedRule)}`;
220
+ }
221
+ return cssRule.combinator === '>' ? iosClassChainSelector : `**/${iosClassChainSelector}`;
222
+ }
223
+ /**
224
+ * Convert CSS object to iOS Class Chain selector
225
+ *
226
+ * @param {import('css-selector-parser').AstSelector} css CSS object
227
+ * @returns {string} The CSS object parsed as a UiSelector
228
+ */
229
+ function parseCssObject(css) {
230
+ if (!lodash_1.default.isEmpty(css.rules)) {
231
+ return parseCssRule(css.rules[0]);
232
+ }
233
+ throw new Error('No rules could be parsed out of the current selector');
234
+ }
235
+ /**
236
+ * Convert a CSS selector to a iOS Class Chain selector
237
+ * @param {string} cssSelector CSS Selector
238
+ * @returns {string} The CSS selector converted to an iOS Class Chain
239
+ */
240
+ CssConverter.toIosClassChainSelector = function toIosClassChainSelector(cssSelector) {
241
+ let cssObj;
242
+ try {
243
+ cssObj = parseCssSelector(cssSelector);
244
+ }
245
+ catch (e) {
246
+ logger_js_1.default.debug(e.stack);
247
+ throw new driver_1.errors.InvalidSelectorError(`Invalid CSS selector '${cssSelector}'. Reason: '${e.message}'`);
248
+ }
249
+ try {
250
+ return parseCssObject(cssObj);
251
+ }
252
+ catch (e) {
253
+ logger_js_1.default.debug(e.stack);
254
+ throw new driver_1.errors.InvalidSelectorError(`Unsupported CSS selector '${cssSelector}'. Reason: '${e.message}'`);
255
+ }
256
+ };
257
+ exports.default = CssConverter;
258
+ //# sourceMappingURL=css-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-converter.js","sourceRoot":"","sources":["../../lib/css-converter.js"],"names":[],"mappings":"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"}