lim 0.1.4 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/README.md +836 -0
  2. package/bin/dev.js +16 -0
  3. package/bin/run.js +63 -0
  4. package/dist/base-command.d.ts +51 -0
  5. package/dist/base-command.d.ts.map +1 -0
  6. package/dist/base-command.js +441 -0
  7. package/dist/base-command.js.map +1 -0
  8. package/dist/commands/android/connect.d.ts +17 -0
  9. package/dist/commands/android/connect.d.ts.map +1 -0
  10. package/dist/commands/android/connect.js +50 -0
  11. package/dist/commands/android/connect.js.map +1 -0
  12. package/dist/commands/android/create.d.ts +25 -0
  13. package/dist/commands/android/create.d.ts.map +1 -0
  14. package/dist/commands/android/create.js +202 -0
  15. package/dist/commands/android/create.js.map +1 -0
  16. package/dist/commands/android/delete.d.ts +17 -0
  17. package/dist/commands/android/delete.d.ts.map +1 -0
  18. package/dist/commands/android/delete.js +44 -0
  19. package/dist/commands/android/delete.js.map +1 -0
  20. package/dist/commands/android/element-tree.d.ts +16 -0
  21. package/dist/commands/android/element-tree.d.ts.map +1 -0
  22. package/dist/commands/android/element-tree.js +60 -0
  23. package/dist/commands/android/element-tree.js.map +1 -0
  24. package/dist/commands/android/find-element.d.ts +28 -0
  25. package/dist/commands/android/find-element.d.ts.map +1 -0
  26. package/dist/commands/android/find-element.js +70 -0
  27. package/dist/commands/android/find-element.js.map +1 -0
  28. package/dist/commands/android/get.d.ts +17 -0
  29. package/dist/commands/android/get.d.ts.map +1 -0
  30. package/dist/commands/android/get.js +43 -0
  31. package/dist/commands/android/get.js.map +1 -0
  32. package/dist/commands/android/install-app.d.ts +18 -0
  33. package/dist/commands/android/install-app.d.ts.map +1 -0
  34. package/dist/commands/android/install-app.js +70 -0
  35. package/dist/commands/android/install-app.js.map +1 -0
  36. package/dist/commands/android/list.d.ts +19 -0
  37. package/dist/commands/android/list.d.ts.map +1 -0
  38. package/dist/commands/android/list.js +61 -0
  39. package/dist/commands/android/list.js.map +1 -0
  40. package/dist/commands/android/open-url.d.ts +18 -0
  41. package/dist/commands/android/open-url.d.ts.map +1 -0
  42. package/dist/commands/android/open-url.js +51 -0
  43. package/dist/commands/android/open-url.js.map +1 -0
  44. package/dist/commands/android/press-key.d.ts +19 -0
  45. package/dist/commands/android/press-key.d.ts.map +1 -0
  46. package/dist/commands/android/press-key.js +52 -0
  47. package/dist/commands/android/press-key.js.map +1 -0
  48. package/dist/commands/android/record.d.ts +22 -0
  49. package/dist/commands/android/record.d.ts.map +1 -0
  50. package/dist/commands/android/record.js +100 -0
  51. package/dist/commands/android/record.js.map +1 -0
  52. package/dist/commands/android/screenshot.d.ts +18 -0
  53. package/dist/commands/android/screenshot.d.ts.map +1 -0
  54. package/dist/commands/android/screenshot.js +66 -0
  55. package/dist/commands/android/screenshot.js.map +1 -0
  56. package/dist/commands/android/scroll.d.ts +32 -0
  57. package/dist/commands/android/scroll.d.ts.map +1 -0
  58. package/dist/commands/android/scroll.js +72 -0
  59. package/dist/commands/android/scroll.js.map +1 -0
  60. package/dist/commands/android/tap-element.d.ts +27 -0
  61. package/dist/commands/android/tap-element.d.ts.map +1 -0
  62. package/dist/commands/android/tap-element.js +60 -0
  63. package/dist/commands/android/tap-element.js.map +1 -0
  64. package/dist/commands/android/tap.d.ts +25 -0
  65. package/dist/commands/android/tap.d.ts.map +1 -0
  66. package/dist/commands/android/tap.js +55 -0
  67. package/dist/commands/android/tap.js.map +1 -0
  68. package/dist/commands/android/type.d.ts +31 -0
  69. package/dist/commands/android/type.d.ts.map +1 -0
  70. package/dist/commands/android/type.js +53 -0
  71. package/dist/commands/android/type.js.map +1 -0
  72. package/dist/commands/asset/delete.d.ts +17 -0
  73. package/dist/commands/asset/delete.d.ts.map +1 -0
  74. package/dist/commands/asset/delete.js +23 -0
  75. package/dist/commands/asset/delete.js.map +1 -0
  76. package/dist/commands/asset/list.d.ts +22 -0
  77. package/dist/commands/asset/list.d.ts.map +1 -0
  78. package/dist/commands/asset/list.js +97 -0
  79. package/dist/commands/asset/list.js.map +1 -0
  80. package/dist/commands/asset/pull.d.ts +19 -0
  81. package/dist/commands/asset/pull.d.ts.map +1 -0
  82. package/dist/commands/asset/pull.js +84 -0
  83. package/dist/commands/asset/pull.js.map +1 -0
  84. package/dist/commands/asset/push.d.ts +18 -0
  85. package/dist/commands/asset/push.d.ts.map +1 -0
  86. package/dist/commands/asset/push.js +43 -0
  87. package/dist/commands/asset/push.js.map +1 -0
  88. package/dist/commands/ios/app-log.d.ts +20 -0
  89. package/dist/commands/ios/app-log.d.ts.map +1 -0
  90. package/dist/commands/ios/app-log.js +86 -0
  91. package/dist/commands/ios/app-log.js.map +1 -0
  92. package/dist/commands/ios/cp.d.ts +19 -0
  93. package/dist/commands/ios/cp.d.ts.map +1 -0
  94. package/dist/commands/ios/cp.js +64 -0
  95. package/dist/commands/ios/cp.js.map +1 -0
  96. package/dist/commands/ios/create.d.ts +25 -0
  97. package/dist/commands/ios/create.d.ts.map +1 -0
  98. package/dist/commands/ios/create.js +165 -0
  99. package/dist/commands/ios/create.js.map +1 -0
  100. package/dist/commands/ios/delete.d.ts +17 -0
  101. package/dist/commands/ios/delete.d.ts.map +1 -0
  102. package/dist/commands/ios/delete.js +44 -0
  103. package/dist/commands/ios/delete.js.map +1 -0
  104. package/dist/commands/ios/element-tree.d.ts +16 -0
  105. package/dist/commands/ios/element-tree.d.ts.map +1 -0
  106. package/dist/commands/ios/element-tree.js +57 -0
  107. package/dist/commands/ios/element-tree.js.map +1 -0
  108. package/dist/commands/ios/get.d.ts +17 -0
  109. package/dist/commands/ios/get.d.ts.map +1 -0
  110. package/dist/commands/ios/get.js +44 -0
  111. package/dist/commands/ios/get.js.map +1 -0
  112. package/dist/commands/ios/info.d.ts +16 -0
  113. package/dist/commands/ios/info.d.ts.map +1 -0
  114. package/dist/commands/ios/info.js +55 -0
  115. package/dist/commands/ios/info.js.map +1 -0
  116. package/dist/commands/ios/install-app.d.ts +20 -0
  117. package/dist/commands/ios/install-app.d.ts.map +1 -0
  118. package/dist/commands/ios/install-app.js +97 -0
  119. package/dist/commands/ios/install-app.js.map +1 -0
  120. package/dist/commands/ios/launch-app.d.ts +23 -0
  121. package/dist/commands/ios/launch-app.d.ts.map +1 -0
  122. package/dist/commands/ios/launch-app.js +74 -0
  123. package/dist/commands/ios/launch-app.js.map +1 -0
  124. package/dist/commands/ios/list-apps.d.ts +16 -0
  125. package/dist/commands/ios/list-apps.d.ts.map +1 -0
  126. package/dist/commands/ios/list-apps.js +51 -0
  127. package/dist/commands/ios/list-apps.js.map +1 -0
  128. package/dist/commands/ios/list.d.ts +19 -0
  129. package/dist/commands/ios/list.d.ts.map +1 -0
  130. package/dist/commands/ios/list.js +61 -0
  131. package/dist/commands/ios/list.js.map +1 -0
  132. package/dist/commands/ios/lsof.d.ts +16 -0
  133. package/dist/commands/ios/lsof.d.ts.map +1 -0
  134. package/dist/commands/ios/lsof.js +47 -0
  135. package/dist/commands/ios/lsof.js.map +1 -0
  136. package/dist/commands/ios/open-url.d.ts +18 -0
  137. package/dist/commands/ios/open-url.d.ts.map +1 -0
  138. package/dist/commands/ios/open-url.js +51 -0
  139. package/dist/commands/ios/open-url.js.map +1 -0
  140. package/dist/commands/ios/perform.d.ts +18 -0
  141. package/dist/commands/ios/perform.d.ts.map +1 -0
  142. package/dist/commands/ios/perform.js +228 -0
  143. package/dist/commands/ios/perform.js.map +1 -0
  144. package/dist/commands/ios/press-key.d.ts +19 -0
  145. package/dist/commands/ios/press-key.d.ts.map +1 -0
  146. package/dist/commands/ios/press-key.js +52 -0
  147. package/dist/commands/ios/press-key.js.map +1 -0
  148. package/dist/commands/ios/record.d.ts +22 -0
  149. package/dist/commands/ios/record.d.ts.map +1 -0
  150. package/dist/commands/ios/record.js +101 -0
  151. package/dist/commands/ios/record.js.map +1 -0
  152. package/dist/commands/ios/reverse.d.ts +19 -0
  153. package/dist/commands/ios/reverse.d.ts.map +1 -0
  154. package/dist/commands/ios/reverse.js +97 -0
  155. package/dist/commands/ios/reverse.js.map +1 -0
  156. package/dist/commands/ios/screenshot.d.ts +18 -0
  157. package/dist/commands/ios/screenshot.d.ts.map +1 -0
  158. package/dist/commands/ios/screenshot.js +65 -0
  159. package/dist/commands/ios/screenshot.js.map +1 -0
  160. package/dist/commands/ios/scroll.d.ts +19 -0
  161. package/dist/commands/ios/scroll.d.ts.map +1 -0
  162. package/dist/commands/ios/scroll.js +57 -0
  163. package/dist/commands/ios/scroll.js.map +1 -0
  164. package/dist/commands/ios/simctl.d.ts +17 -0
  165. package/dist/commands/ios/simctl.d.ts.map +1 -0
  166. package/dist/commands/ios/simctl.js +72 -0
  167. package/dist/commands/ios/simctl.js.map +1 -0
  168. package/dist/commands/ios/sync.d.ts +23 -0
  169. package/dist/commands/ios/sync.d.ts.map +1 -0
  170. package/dist/commands/ios/sync.js +90 -0
  171. package/dist/commands/ios/sync.js.map +1 -0
  172. package/dist/commands/ios/syslog.d.ts +16 -0
  173. package/dist/commands/ios/syslog.d.ts.map +1 -0
  174. package/dist/commands/ios/syslog.js +62 -0
  175. package/dist/commands/ios/syslog.js.map +1 -0
  176. package/dist/commands/ios/tap-element.d.ts +23 -0
  177. package/dist/commands/ios/tap-element.d.ts.map +1 -0
  178. package/dist/commands/ios/tap-element.js +92 -0
  179. package/dist/commands/ios/tap-element.js.map +1 -0
  180. package/dist/commands/ios/tap.d.ts +25 -0
  181. package/dist/commands/ios/tap.d.ts.map +1 -0
  182. package/dist/commands/ios/tap.js +55 -0
  183. package/dist/commands/ios/tap.js.map +1 -0
  184. package/dist/commands/ios/terminate-app.d.ts +18 -0
  185. package/dist/commands/ios/terminate-app.d.ts.map +1 -0
  186. package/dist/commands/ios/terminate-app.js +49 -0
  187. package/dist/commands/ios/terminate-app.js.map +1 -0
  188. package/dist/commands/ios/toggle-keyboard.d.ts +15 -0
  189. package/dist/commands/ios/toggle-keyboard.d.ts.map +1 -0
  190. package/dist/commands/ios/toggle-keyboard.js +45 -0
  191. package/dist/commands/ios/toggle-keyboard.js.map +1 -0
  192. package/dist/commands/ios/type.d.ts +19 -0
  193. package/dist/commands/ios/type.d.ts.map +1 -0
  194. package/dist/commands/ios/type.js +53 -0
  195. package/dist/commands/ios/type.js.map +1 -0
  196. package/dist/commands/ios/xcodebuild.d.ts +17 -0
  197. package/dist/commands/ios/xcodebuild.d.ts.map +1 -0
  198. package/dist/commands/ios/xcodebuild.js +59 -0
  199. package/dist/commands/ios/xcodebuild.js.map +1 -0
  200. package/dist/commands/ios/xcrun.d.ts +17 -0
  201. package/dist/commands/ios/xcrun.d.ts.map +1 -0
  202. package/dist/commands/ios/xcrun.js +60 -0
  203. package/dist/commands/ios/xcrun.js.map +1 -0
  204. package/dist/commands/login.d.ts +14 -0
  205. package/dist/commands/login.d.ts.map +1 -0
  206. package/dist/commands/login.js +22 -0
  207. package/dist/commands/login.js.map +1 -0
  208. package/dist/commands/logout.d.ts +14 -0
  209. package/dist/commands/logout.d.ts.map +1 -0
  210. package/dist/commands/logout.js +18 -0
  211. package/dist/commands/logout.js.map +1 -0
  212. package/dist/commands/session/start.d.ts +16 -0
  213. package/dist/commands/session/start.d.ts.map +1 -0
  214. package/dist/commands/session/start.js +129 -0
  215. package/dist/commands/session/start.js.map +1 -0
  216. package/dist/commands/session/status.d.ts +14 -0
  217. package/dist/commands/session/status.d.ts.map +1 -0
  218. package/dist/commands/session/status.js +65 -0
  219. package/dist/commands/session/status.js.map +1 -0
  220. package/dist/commands/session/stop.d.ts +18 -0
  221. package/dist/commands/session/stop.d.ts.map +1 -0
  222. package/dist/commands/session/stop.js +76 -0
  223. package/dist/commands/session/stop.js.map +1 -0
  224. package/dist/commands/skills/install.d.ts +18 -0
  225. package/dist/commands/skills/install.d.ts.map +1 -0
  226. package/dist/commands/skills/install.js +473 -0
  227. package/dist/commands/skills/install.js.map +1 -0
  228. package/dist/commands/xcode/attach-simulator.d.ts +18 -0
  229. package/dist/commands/xcode/attach-simulator.d.ts.map +1 -0
  230. package/dist/commands/xcode/attach-simulator.js +55 -0
  231. package/dist/commands/xcode/attach-simulator.js.map +1 -0
  232. package/dist/commands/xcode/build.d.ts +35 -0
  233. package/dist/commands/xcode/build.d.ts.map +1 -0
  234. package/dist/commands/xcode/build.js +192 -0
  235. package/dist/commands/xcode/build.js.map +1 -0
  236. package/dist/commands/xcode/create.d.ts +22 -0
  237. package/dist/commands/xcode/create.d.ts.map +1 -0
  238. package/dist/commands/xcode/create.js +189 -0
  239. package/dist/commands/xcode/create.js.map +1 -0
  240. package/dist/commands/xcode/delete.d.ts +17 -0
  241. package/dist/commands/xcode/delete.d.ts.map +1 -0
  242. package/dist/commands/xcode/delete.js +44 -0
  243. package/dist/commands/xcode/delete.js.map +1 -0
  244. package/dist/commands/xcode/get.d.ts +17 -0
  245. package/dist/commands/xcode/get.d.ts.map +1 -0
  246. package/dist/commands/xcode/get.js +59 -0
  247. package/dist/commands/xcode/get.js.map +1 -0
  248. package/dist/commands/xcode/list.d.ts +18 -0
  249. package/dist/commands/xcode/list.d.ts.map +1 -0
  250. package/dist/commands/xcode/list.js +58 -0
  251. package/dist/commands/xcode/list.js.map +1 -0
  252. package/dist/commands/xcode/sync.d.ts +24 -0
  253. package/dist/commands/xcode/sync.d.ts.map +1 -0
  254. package/dist/commands/xcode/sync.js +93 -0
  255. package/dist/commands/xcode/sync.js.map +1 -0
  256. package/dist/index.d.ts +2 -0
  257. package/dist/index.d.ts.map +1 -0
  258. package/dist/index.js +6 -0
  259. package/dist/index.js.map +1 -0
  260. package/dist/lib/additional-files.d.ts +6 -0
  261. package/dist/lib/additional-files.d.ts.map +1 -0
  262. package/dist/lib/additional-files.js +19 -0
  263. package/dist/lib/additional-files.js.map +1 -0
  264. package/dist/lib/android-selector.d.ts +50 -0
  265. package/dist/lib/android-selector.d.ts.map +1 -0
  266. package/dist/lib/android-selector.js +103 -0
  267. package/dist/lib/android-selector.js.map +1 -0
  268. package/dist/lib/auth.d.ts +2 -0
  269. package/dist/lib/auth.d.ts.map +1 -0
  270. package/dist/lib/auth.js +60 -0
  271. package/dist/lib/auth.js.map +1 -0
  272. package/dist/lib/config.d.ts +65 -0
  273. package/dist/lib/config.d.ts.map +1 -0
  274. package/dist/lib/config.js +290 -0
  275. package/dist/lib/config.js.map +1 -0
  276. package/dist/lib/daemon-client.d.ts +9 -0
  277. package/dist/lib/daemon-client.d.ts.map +1 -0
  278. package/dist/lib/daemon-client.js +81 -0
  279. package/dist/lib/daemon-client.js.map +1 -0
  280. package/dist/lib/daemon.d.ts +41 -0
  281. package/dist/lib/daemon.d.ts.map +1 -0
  282. package/dist/lib/daemon.js +511 -0
  283. package/dist/lib/daemon.js.map +1 -0
  284. package/dist/lib/detox-version.d.ts +12 -0
  285. package/dist/lib/detox-version.d.ts.map +1 -0
  286. package/dist/lib/detox-version.js +30 -0
  287. package/dist/lib/detox-version.js.map +1 -0
  288. package/dist/lib/duration.d.ts +2 -0
  289. package/dist/lib/duration.d.ts.map +1 -0
  290. package/dist/lib/duration.js +37 -0
  291. package/dist/lib/duration.js.map +1 -0
  292. package/dist/lib/formatting.d.ts +3 -0
  293. package/dist/lib/formatting.d.ts.map +1 -0
  294. package/dist/lib/formatting.js +31 -0
  295. package/dist/lib/formatting.js.map +1 -0
  296. package/dist/lib/ignore-patterns.d.ts +2 -0
  297. package/dist/lib/ignore-patterns.d.ts.map +1 -0
  298. package/dist/lib/ignore-patterns.js +18 -0
  299. package/dist/lib/ignore-patterns.js.map +1 -0
  300. package/dist/lib/instance-client-factory.d.ts +29 -0
  301. package/dist/lib/instance-client-factory.d.ts.map +1 -0
  302. package/dist/lib/instance-client-factory.js +87 -0
  303. package/dist/lib/instance-client-factory.js.map +1 -0
  304. package/dist/lib/launch-app-runtime.d.ts +23 -0
  305. package/dist/lib/launch-app-runtime.d.ts.map +1 -0
  306. package/dist/lib/launch-app-runtime.js +58 -0
  307. package/dist/lib/launch-app-runtime.js.map +1 -0
  308. package/dist/lib/remote-skills.d.ts +47 -0
  309. package/dist/lib/remote-skills.d.ts.map +1 -0
  310. package/dist/lib/remote-skills.js +241 -0
  311. package/dist/lib/remote-skills.js.map +1 -0
  312. package/dist/lib/reverse-port-mapping.d.ts +6 -0
  313. package/dist/lib/reverse-port-mapping.d.ts.map +1 -0
  314. package/dist/lib/reverse-port-mapping.js +24 -0
  315. package/dist/lib/reverse-port-mapping.js.map +1 -0
  316. package/dist/lib/skills.d.ts +17 -0
  317. package/dist/lib/skills.d.ts.map +1 -0
  318. package/dist/lib/skills.js +153 -0
  319. package/dist/lib/skills.js.map +1 -0
  320. package/package.json +69 -13
  321. package/.npmignore +0 -2
  322. package/build/lib/index.js +0 -1498
  323. package/build/lib/index.map +0 -1
  324. package/build/lib/utils/courier.js +0 -98
  325. package/build/lib/utils/courier.map +0 -1
  326. package/build/lib/utils/polyfill.js +0 -146
  327. package/build/lib/utils/polyfill.map +0 -1
  328. package/build.sh +0 -9
  329. package/index.js +0 -2
  330. package/lib/index.js +0 -284
  331. package/lib/utils/courier.js +0 -108
  332. package/lib/utils/polyfill.js +0 -36
  333. package/native.js +0 -2
@@ -0,0 +1,101 @@
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 path_1 = __importDefault(require("path"));
7
+ const core_1 = require("@oclif/core");
8
+ const base_command_1 = require("../../base-command");
9
+ const instance_client_factory_1 = require("../../lib/instance-client-factory");
10
+ class IosRecord extends base_command_1.BaseCommand {
11
+ async run() {
12
+ const { args, flags } = await this.parse(IosRecord);
13
+ this.setParsedFlags(flags);
14
+ await this.withAuth(async () => {
15
+ const resolvedInstance = this.resolveIosInstance(flags.id);
16
+ const id = resolvedInstance.id;
17
+ if (false) {
18
+ this.error('ios record only supports iOS instances');
19
+ }
20
+ if (args.action === 'start') {
21
+ if ((0, instance_client_factory_1.hasActiveSession)(id)) {
22
+ await (0, instance_client_factory_1.sendSessionCommand)(id, 'start-recording', [flags.quality]);
23
+ }
24
+ else {
25
+ const { client, disconnect } = await (0, instance_client_factory_1.getIosInstanceClient)(this.client, resolvedInstance);
26
+ try {
27
+ await client.startRecording({ quality: flags.quality });
28
+ }
29
+ finally {
30
+ disconnect();
31
+ }
32
+ }
33
+ this.log('Recording started');
34
+ return;
35
+ }
36
+ const outputPath = flags.output ? path_1.default.resolve(flags.output) : this.defaultRecordingPath();
37
+ const saveTo = {
38
+ localPath: outputPath,
39
+ presignedUrl: flags['presigned-url'],
40
+ };
41
+ if ((0, instance_client_factory_1.hasActiveSession)(id)) {
42
+ await (0, instance_client_factory_1.sendSessionCommand)(id, 'stop-recording', [saveTo]);
43
+ this.log(`Recording saved to ${outputPath}`);
44
+ if (flags['presigned-url']) {
45
+ this.log('Recording uploaded using the provided presigned URL');
46
+ }
47
+ return;
48
+ }
49
+ const { client, disconnect } = await (0, instance_client_factory_1.getIosInstanceClient)(this.client, resolvedInstance);
50
+ try {
51
+ await client.stopRecording(saveTo);
52
+ this.log(`Recording saved to ${outputPath}`);
53
+ if (flags['presigned-url']) {
54
+ this.log('Recording uploaded using the provided presigned URL');
55
+ }
56
+ }
57
+ finally {
58
+ disconnect();
59
+ }
60
+ });
61
+ }
62
+ defaultRecordingPath() {
63
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
64
+ return path_1.default.join(process.cwd(), `video_${timestamp}.mp4`);
65
+ }
66
+ }
67
+ IosRecord.summary = 'Start or stop video recording on a running iOS instance';
68
+ IosRecord.description = 'Control screen recording on a running iOS instance. Start recording first, then stop recording to download the file locally or upload it directly with `--presigned-url`.';
69
+ IosRecord.examples = [
70
+ '<%= config.bin %> ios record start',
71
+ '<%= config.bin %> ios record stop',
72
+ '<%= config.bin %> ios record stop -o recording.mp4 --id <instance-ID>',
73
+ '<%= config.bin %> ios record stop --presigned-url https://example.com/upload --id <instance-ID>',
74
+ '<%= config.bin %> ios record start --quality 8',
75
+ ];
76
+ IosRecord.args = {
77
+ action: core_1.Args.string({
78
+ description: 'Recording action to perform: `start` begins capturing and `stop` finalizes the video file',
79
+ required: true,
80
+ options: ['start', 'stop'],
81
+ }),
82
+ };
83
+ IosRecord.flags = {
84
+ ...base_command_1.BaseCommand.baseFlags,
85
+ id: core_1.Flags.string({
86
+ description: 'iOS instance ID to record. Defaults to the last created iOS instance.',
87
+ }),
88
+ quality: core_1.Flags.integer({
89
+ description: 'Recording quality from 5 to 10. Higher values increase quality and file size when starting a recording.',
90
+ default: 5,
91
+ }),
92
+ output: core_1.Flags.string({
93
+ char: 'o',
94
+ description: 'Local file path for the finished recording when using the `stop` action. Defaults to a timestamped mp4 in the current directory.',
95
+ }),
96
+ 'presigned-url': core_1.Flags.string({
97
+ description: 'Presigned upload URL to receive the recording when using the `stop` action. Use this if you will upload the recording to a bucket.',
98
+ }),
99
+ };
100
+ exports.default = IosRecord;
101
+ //# sourceMappingURL=record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/commands/ios/record.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class IosReverse extends BaseCommand {
3
+ static summary: string;
4
+ static description: string;
5
+ static examples: string[];
6
+ static args: {
7
+ mapping: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ 'local-host': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ 'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
14
+ quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
+ create: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
16
+ };
17
+ run(): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=reverse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reverse.d.ts","sourceRoot":"","sources":["../../../src/commands/ios/reverse.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,OAAO,SAA0D;IACxE,MAAM,CAAC,WAAW,SAC4O;IAC9P,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI;;MAMT;IAEF,MAAM,CAAC,KAAK;;;;;;;MAWV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqE3B"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../base-command");
5
+ const instance_client_factory_1 = require("../../lib/instance-client-factory");
6
+ const reverse_port_mapping_1 = require("../../lib/reverse-port-mapping");
7
+ class IosReverse extends base_command_1.BaseCommand {
8
+ async run() {
9
+ const { args, flags } = await this.parse(IosReverse);
10
+ this.setParsedFlags(flags);
11
+ await this.withAuth(async () => {
12
+ const { remotePort, localPort } = (0, reverse_port_mapping_1.parseReversePortMapping)(args.mapping);
13
+ const localHost = flags['local-host'];
14
+ const resolvedInstance = this.resolveIosInstance(flags.id);
15
+ const { client, disconnect } = await (0, instance_client_factory_1.getIosInstanceClient)(this.client, resolvedInstance);
16
+ let tunnel;
17
+ try {
18
+ tunnel = await client.startReverseTunnel({
19
+ remotePort,
20
+ localPort,
21
+ localHost,
22
+ logLevel: flags.json || flags.quiet ? 'none' : 'info',
23
+ });
24
+ const ready = {
25
+ instanceId: resolvedInstance.id,
26
+ remoteHost: tunnel.remoteAddress.address,
27
+ remotePort: tunnel.remoteAddress.port,
28
+ localHost,
29
+ localPort,
30
+ };
31
+ if (flags.json) {
32
+ this.outputJson(ready);
33
+ }
34
+ else {
35
+ this.output(`Remote endpoint: ${ready.remoteHost}:${ready.remotePort}`);
36
+ this.output(`${ready.remoteHost}:${ready.remotePort} -> ${ready.localHost}:${ready.localPort}`);
37
+ this.output(`Use ${ready.remoteHost}:${ready.remotePort} from the simulator (for example exp://${ready.remoteHost}:${ready.remotePort}).`);
38
+ this.info('Reverse tunnel started. Press Ctrl+C to stop.');
39
+ }
40
+ const activeTunnel = tunnel;
41
+ await new Promise((resolve, reject) => {
42
+ const keepAlive = setInterval(() => { }, 1 << 30);
43
+ let stopping = false;
44
+ const cleanup = () => {
45
+ clearInterval(keepAlive);
46
+ unsubscribe();
47
+ process.off('SIGINT', shutdown);
48
+ process.off('SIGTERM', shutdown);
49
+ };
50
+ const shutdown = () => {
51
+ stopping = true;
52
+ cleanup();
53
+ this.info('Stopping reverse tunnel...');
54
+ resolve();
55
+ };
56
+ const unsubscribe = activeTunnel.onConnectionStateChange((state) => {
57
+ if (state === 'disconnected' && !stopping) {
58
+ cleanup();
59
+ reject(new Error('Reverse tunnel disconnected unexpectedly'));
60
+ }
61
+ });
62
+ process.once('SIGINT', shutdown);
63
+ process.once('SIGTERM', shutdown);
64
+ });
65
+ }
66
+ finally {
67
+ tunnel?.close();
68
+ disconnect();
69
+ }
70
+ });
71
+ }
72
+ }
73
+ IosReverse.summary = 'Expose a local client-first service to the simulator';
74
+ IosReverse.description = 'Open a long-lived reverse tunnel so an app in the remote iOS Simulator can connect to LISTEN_IP:remotePort and reach a local client-first service such as an HTTP or WebSocket dev server. Remote ports must be in the reserved Limrun range 57090-57099.';
75
+ IosReverse.examples = [
76
+ '<%= config.bin %> ios reverse 57090:8081 --id <instance-ID>',
77
+ '<%= config.bin %> ios reverse 57091:3000 --id <instance-ID>',
78
+ '<%= config.bin %> ios reverse 57090:8081 --local-host 127.0.0.1',
79
+ ];
80
+ IosReverse.args = {
81
+ mapping: core_1.Args.string({
82
+ description: 'Port mapping as <remotePort> or <remotePort>:<localPort>. remotePort must be 57090-57099.',
83
+ required: true,
84
+ }),
85
+ };
86
+ IosReverse.flags = {
87
+ ...base_command_1.BaseCommand.baseFlags,
88
+ id: core_1.Flags.string({
89
+ description: 'iOS instance ID to target. Defaults to the last created iOS instance, but `--id` is recommended for scripts and agents.',
90
+ }),
91
+ 'local-host': core_1.Flags.string({
92
+ description: 'Host for the local service on your machine. Defaults to 127.0.0.1; non-loopback hosts are intended for debugging.',
93
+ default: '127.0.0.1',
94
+ }),
95
+ };
96
+ exports.default = IosReverse;
97
+ //# sourceMappingURL=reverse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reverse.js","sourceRoot":"","sources":["../../../src/commands/ios/reverse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class IosScreenshot extends BaseCommand {
3
+ static summary: string;
4
+ static description: string;
5
+ static examples: string[];
6
+ static args: {
7
+ path: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ 'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
+ quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
14
+ create: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=screenshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/commands/ios/screenshot.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOjD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAC,OAAO,SAAsD;IACpE,MAAM,CAAC,WAAW,SAA0F;IAC5G,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgC3B"}
@@ -0,0 +1,65 @@
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 fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const core_1 = require("@oclif/core");
9
+ const base_command_1 = require("../../base-command");
10
+ const instance_client_factory_1 = require("../../lib/instance-client-factory");
11
+ class IosScreenshot extends base_command_1.BaseCommand {
12
+ async run() {
13
+ const { args, flags } = await this.parse(IosScreenshot);
14
+ this.setParsedFlags(flags);
15
+ await this.withAuth(async () => {
16
+ const resolvedInstance = this.resolveIosInstance(flags.id);
17
+ const id = resolvedInstance.id;
18
+ if (false) {
19
+ this.error('ios screenshot only supports iOS instances');
20
+ }
21
+ let screenshot;
22
+ if ((0, instance_client_factory_1.hasActiveSession)(id)) {
23
+ screenshot = await (0, instance_client_factory_1.sendSessionCommand)(id, 'screenshot');
24
+ }
25
+ else {
26
+ const { client, disconnect } = await (0, instance_client_factory_1.getIosInstanceClient)(this.client, resolvedInstance);
27
+ try {
28
+ screenshot = await client.screenshot();
29
+ }
30
+ finally {
31
+ disconnect();
32
+ }
33
+ }
34
+ const outPath = path_1.default.resolve(args.path);
35
+ fs_1.default.writeFileSync(outPath, Buffer.from(screenshot.base64, 'base64'));
36
+ if (flags.json) {
37
+ this.outputJson({ path: outPath });
38
+ }
39
+ else {
40
+ this.log(`Screenshot saved to ${outPath}`);
41
+ }
42
+ });
43
+ }
44
+ }
45
+ IosScreenshot.summary = 'Capture a screenshot from a running iOS instance';
46
+ IosScreenshot.description = 'Capture the current screen from a running iOS instance and save the image to a file.';
47
+ IosScreenshot.examples = [
48
+ '<%= config.bin %> ios screenshot screenshot.png',
49
+ '<%= config.bin %> ios screenshot screenshot.png --id <instance-ID>',
50
+ '<%= config.bin %> ios screenshot screenshot.png --json',
51
+ ];
52
+ IosScreenshot.args = {
53
+ path: core_1.Args.string({
54
+ description: 'File path where the screenshot should be written.',
55
+ required: true,
56
+ }),
57
+ };
58
+ IosScreenshot.flags = {
59
+ ...base_command_1.BaseCommand.baseFlags,
60
+ id: core_1.Flags.string({
61
+ description: 'iOS instance ID to capture. Defaults to the last created iOS instance.',
62
+ }),
63
+ };
64
+ exports.default = IosScreenshot;
65
+ //# sourceMappingURL=screenshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/commands/ios/screenshot.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,sCAA0C;AAC1C,qDAAiD;AACjD,+EAI2C;AAE3C,MAAqB,aAAc,SAAQ,0BAAW;IAuBpD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC;YAC/B,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC3D,CAAC;YAED,IAAI,UAAe,CAAC;YACpB,IAAI,IAAA,0CAAgB,EAAC,EAAE,CAAC,EAAE,CAAC;gBACzB,UAAU,GAAG,MAAM,IAAA,4CAAkB,EAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,8CAAoB,EAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;gBACzF,IAAI,CAAC;oBACH,UAAU,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;gBACzC,CAAC;wBAAS,CAAC;oBACT,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;YACpE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AArDM,qBAAO,GAAG,kDAAkD,CAAC;AAC7D,yBAAW,GAAG,sFAAsF,CAAC;AACrG,sBAAQ,GAAG;IAChB,iDAAiD;IACjD,oEAAoE;IACpE,wDAAwD;CACzD,CAAC;AAEK,kBAAI,GAAG;IACZ,IAAI,EAAE,WAAI,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,mDAAmD;QAChE,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;AAEK,mBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,EAAE,EAAE,YAAK,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,wEAAwE;KACtF,CAAC;CACH,CAAC;kBArBiB,aAAa"}
@@ -0,0 +1,19 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class IosScroll extends BaseCommand {
3
+ static summary: string;
4
+ static description: string;
5
+ static examples: string[];
6
+ static args: {
7
+ direction: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ amount: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ 'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
14
+ quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
+ create: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
16
+ };
17
+ run(): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=scroll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/commands/ios/scroll.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOjD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,OAAO,SAAsC;IACpD,MAAM,CAAC,WAAW,SAC4E;IAC9F,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,IAAI;;MAMT;IAEF,MAAM,CAAC,KAAK;;;;;;;MASV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB3B"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../base-command");
5
+ const instance_client_factory_1 = require("../../lib/instance-client-factory");
6
+ class IosScroll extends base_command_1.BaseCommand {
7
+ async run() {
8
+ const { args, flags } = await this.parse(IosScroll);
9
+ this.setParsedFlags(flags);
10
+ await this.withAuth(async () => {
11
+ const resolvedInstance = this.resolveIosInstance(flags.id);
12
+ const id = resolvedInstance.id;
13
+ if (false) {
14
+ this.error('ios scroll only supports iOS instances');
15
+ }
16
+ if ((0, instance_client_factory_1.hasActiveSession)(id)) {
17
+ await (0, instance_client_factory_1.sendSessionCommand)(id, 'scroll', [args.direction, flags.amount]);
18
+ }
19
+ else {
20
+ const { client, disconnect } = await (0, instance_client_factory_1.getIosInstanceClient)(this.client, resolvedInstance);
21
+ try {
22
+ const direction = args.direction;
23
+ await client.scroll(direction, flags.amount);
24
+ }
25
+ finally {
26
+ disconnect();
27
+ }
28
+ }
29
+ this.log(`Scrolled ${args.direction}`);
30
+ });
31
+ }
32
+ }
33
+ IosScroll.summary = 'Scroll on a running iOS instance';
34
+ IosScroll.description = 'Scroll the current screen on a running iOS instance. The amount is interpreted as pixels.';
35
+ IosScroll.examples = [
36
+ '<%= config.bin %> ios scroll down --amount 500',
37
+ '<%= config.bin %> ios scroll down --amount 500 --id <instance-ID>',
38
+ ];
39
+ IosScroll.args = {
40
+ direction: core_1.Args.string({
41
+ description: 'Scroll direction to apply',
42
+ required: true,
43
+ options: ['up', 'down', 'left', 'right'],
44
+ }),
45
+ };
46
+ IosScroll.flags = {
47
+ ...base_command_1.BaseCommand.baseFlags,
48
+ id: core_1.Flags.string({
49
+ description: 'iOS instance ID to target. Defaults to the last created iOS instance.',
50
+ }),
51
+ amount: core_1.Flags.integer({
52
+ description: 'Scroll amount in pixels.',
53
+ default: 300,
54
+ }),
55
+ };
56
+ exports.default = IosScroll;
57
+ //# sourceMappingURL=scroll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/commands/ios/scroll.ts"],"names":[],"mappings":";;AAAA,sCAA0C;AAC1C,qDAAiD;AACjD,+EAI2C;AAE3C,MAAqB,SAAU,SAAQ,0BAAW;IA4BhD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC;YAC/B,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,IAAA,0CAAgB,EAAC,EAAE,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAA,4CAAkB,EAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,8CAAoB,EAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;gBACzF,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,IAAI,CAAC,SAA6C,CAAC;oBACrE,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC/C,CAAC;wBAAS,CAAC;oBACT,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;;AAnDM,iBAAO,GAAG,kCAAkC,CAAC;AAC7C,qBAAW,GAChB,2FAA2F,CAAC;AACvF,kBAAQ,GAAG;IAChB,gDAAgD;IAChD,mEAAmE;CACpE,CAAC;AAEK,cAAI,GAAG;IACZ,SAAS,EAAE,WAAI,CAAC,MAAM,CAAC;QACrB,WAAW,EAAE,2BAA2B;QACxC,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;KACzC,CAAC;CACH,CAAC;AAEK,eAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,EAAE,EAAE,YAAK,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,uEAAuE;KACrF,CAAC;IACF,MAAM,EAAE,YAAK,CAAC,OAAO,CAAC;QACpB,WAAW,EAAE,0BAA0B;QACvC,OAAO,EAAE,GAAG;KACb,CAAC;CACH,CAAC;kBA1BiB,SAAS"}
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class IosSimctl extends BaseCommand {
3
+ static summary: string;
4
+ static description: string;
5
+ static examples: string[];
6
+ static strict: boolean;
7
+ static args: {};
8
+ static flags: {
9
+ id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ 'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
+ quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
+ create: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=simctl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simctl.d.ts","sourceRoot":"","sources":["../../../src/commands/ios/simctl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AASjD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,OAAO,SAA0C;IACxD,MAAM,CAAC,WAAW,SAC+J;IACjL,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,MAAM,UAAS;IAEtB,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,KAAK;;;;;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsD3B"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../base-command");
5
+ const instance_client_factory_1 = require("../../lib/instance-client-factory");
6
+ class IosSimctl extends base_command_1.BaseCommand {
7
+ async run() {
8
+ const parsed = await this.parse(IosSimctl);
9
+ const flags = parsed.flags;
10
+ const rawArgs = parsed.argv ?? [];
11
+ this.setParsedFlags(flags);
12
+ await this.withAuth(async () => {
13
+ if (rawArgs.length === 0) {
14
+ this.error('Provide at least one simctl argument after `lim ios simctl --`.');
15
+ }
16
+ const resolvedInstance = this.resolveIosInstance(flags.id);
17
+ const id = resolvedInstance.id;
18
+ if (false) {
19
+ this.error('ios simctl only supports iOS instances');
20
+ }
21
+ const { client, disconnect } = await (0, instance_client_factory_1.getIosInstanceClient)(this.client, resolvedInstance);
22
+ try {
23
+ const execution = client.simctl(rawArgs);
24
+ if (flags.json) {
25
+ const result = (await execution.wait());
26
+ this.outputJson(result);
27
+ if (result.code !== 0)
28
+ this.exit(result.code);
29
+ return;
30
+ }
31
+ execution.on('stdout', (chunk) => {
32
+ process.stdout.write(chunk);
33
+ });
34
+ execution.on('stderr', (chunk) => {
35
+ process.stderr.write(chunk);
36
+ });
37
+ const result = (await new Promise((resolve, reject) => {
38
+ execution.once('exit', (code) => {
39
+ execution
40
+ .wait()
41
+ .then((waitResult) => resolve({ ...waitResult, code }))
42
+ .catch(reject);
43
+ });
44
+ execution.once('error', reject);
45
+ }));
46
+ if (result.code !== 0) {
47
+ this.error(`simctl failed with exit code ${result.code}`, { exit: result.code });
48
+ }
49
+ }
50
+ finally {
51
+ disconnect();
52
+ }
53
+ });
54
+ }
55
+ }
56
+ IosSimctl.summary = 'Run simctl on a running iOS instance';
57
+ IosSimctl.description = 'Run `simctl` against the target iOS instance with streaming stdout/stderr. Pass the command arguments after the subcommand, for example `lim ios simctl -- listapps booted`.';
58
+ IosSimctl.examples = [
59
+ '<%= config.bin %> ios simctl -- listapps booted',
60
+ '<%= config.bin %> ios simctl -- getenv booted HOME',
61
+ '<%= config.bin %> ios simctl -- listapps booted --json',
62
+ ];
63
+ IosSimctl.strict = false;
64
+ IosSimctl.args = {};
65
+ IosSimctl.flags = {
66
+ ...base_command_1.BaseCommand.baseFlags,
67
+ id: core_1.Flags.string({
68
+ description: 'iOS instance ID to target. Defaults to the last created iOS instance.',
69
+ }),
70
+ };
71
+ exports.default = IosSimctl;
72
+ //# sourceMappingURL=simctl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simctl.js","sourceRoot":"","sources":["../../../src/commands/ios/simctl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class IosSync extends BaseCommand {
3
+ static summary: string;
4
+ static description: string;
5
+ static examples: string[];
6
+ static args: {
7
+ path: import("@oclif/core/lib/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ watch: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
+ install: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
+ 'launch-mode': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
+ 'basis-cache-dir': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
+ 'max-patch-bytes': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
+ 'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
18
+ quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
19
+ create: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
20
+ };
21
+ run(): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/ios/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAAW;IAC9C,MAAM,CAAC,OAAO,SAAuD;IACrE,MAAM,CAAC,WAAW,SAC8M;IAEhO,MAAM,CAAC,QAAQ,WAOb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;MAyBV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2C3B"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../base-command");
5
+ const instance_client_factory_1 = require("../../lib/instance-client-factory");
6
+ class IosSync extends base_command_1.BaseCommand {
7
+ async run() {
8
+ const { args, flags } = await this.parse(IosSync);
9
+ this.setParsedFlags(flags);
10
+ await this.withAuth(async () => {
11
+ const resolvedInstance = this.resolveIosInstance(flags.id);
12
+ const id = resolvedInstance.id;
13
+ const syncPath = args.path ?? process.cwd();
14
+ const { client, disconnect } = await (0, instance_client_factory_1.getIosInstanceClient)(this.client, resolvedInstance);
15
+ this.info(`Syncing app bundle ${syncPath} to instance ${id}...`);
16
+ const result = await client.syncApp(syncPath, {
17
+ watch: flags.watch,
18
+ install: flags.install,
19
+ basisCacheDir: flags['basis-cache-dir'],
20
+ maxPatchBytes: flags['max-patch-bytes'],
21
+ launchMode: flags['launch-mode'],
22
+ });
23
+ this.output('App sync complete.');
24
+ if (result.installedBundleId) {
25
+ this.output(`Installed bundle ID: ${result.installedBundleId}`);
26
+ }
27
+ if (flags.watch && result.stopWatching) {
28
+ this.output('Watching for changes. Press Ctrl+C to stop.');
29
+ await new Promise((resolve) => {
30
+ const keepAlive = setInterval(() => { }, 1 << 30);
31
+ const shutdown = () => {
32
+ clearInterval(keepAlive);
33
+ result.stopWatching();
34
+ disconnect();
35
+ resolve();
36
+ };
37
+ process.on('SIGINT', shutdown);
38
+ process.on('SIGTERM', shutdown);
39
+ });
40
+ }
41
+ else {
42
+ disconnect();
43
+ }
44
+ });
45
+ }
46
+ }
47
+ IosSync.summary = 'Sync a built app bundle to a running iOS instance';
48
+ IosSync.description = 'Push a built `.app` bundle folder (or the current working directory if omitted) to a running iOS instance and optionally install or relaunch it after each sync. Use `xcode sync` for source code and project file syncing.';
49
+ IosSync.examples = [
50
+ '<%= config.bin %> ios sync ./Build/Products/Debug-iphonesimulator/MyApp.app',
51
+ '<%= config.bin %> ios sync ./MyApp.app --id <ios-instance-ID>',
52
+ '<%= config.bin %> ios sync ./MyApp.app --watch',
53
+ '<%= config.bin %> ios sync ./MyApp.app --no-install',
54
+ '<%= config.bin %> ios sync ./MyApp.app --launch-mode RelaunchIfRunning',
55
+ '<%= config.bin %> ios sync ./MyApp.app --basis-cache-dir ./.limrun-cache --max-patch-bytes 2097152',
56
+ ];
57
+ IosSync.args = {
58
+ path: core_1.Args.string({
59
+ description: 'Local `.app` bundle folder to sync. Defaults to the current working directory.',
60
+ required: false,
61
+ }),
62
+ };
63
+ IosSync.flags = {
64
+ ...base_command_1.BaseCommand.baseFlags,
65
+ id: core_1.Flags.string({
66
+ description: 'iOS instance ID to sync to. Defaults to the last created iOS instance.',
67
+ }),
68
+ watch: core_1.Flags.boolean({
69
+ description: 'Keep watching the app bundle folder and push changes automatically',
70
+ default: false,
71
+ allowNo: true,
72
+ }),
73
+ install: core_1.Flags.boolean({
74
+ description: 'Install the synced app after each sync',
75
+ default: true,
76
+ allowNo: true,
77
+ }),
78
+ 'launch-mode': core_1.Flags.string({
79
+ description: 'Launch behavior after install when installation is enabled',
80
+ options: ['ForegroundIfRunning', 'RelaunchIfRunning'],
81
+ }),
82
+ 'basis-cache-dir': core_1.Flags.string({
83
+ description: 'Directory to use for the client-side delta sync cache.',
84
+ }),
85
+ 'max-patch-bytes': core_1.Flags.integer({
86
+ description: 'Maximum patch size in bytes before falling back to a full upload.',
87
+ }),
88
+ };
89
+ exports.default = IosSync;
90
+ //# sourceMappingURL=sync.js.map