@kaeawc/auto-mobile 0.0.92 → 0.0.94

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 (257) hide show
  1. package/dist/build-info.json +12 -12
  2. package/dist/schemas/test-plan.schema.json +370 -52
  3. package/dist/src/ble-peripheral.py +153 -0
  4. package/dist/src/{chunk-r14wwk37.js → chunk-026y62r9.js} +12 -12
  5. package/dist/src/chunk-0jyfg947.js +4 -0
  6. package/dist/src/{chunk-950qcq1e.js → chunk-0zfpp1wh.js} +4 -4
  7. package/dist/src/chunk-13qxf7ym.js +7 -0
  8. package/dist/src/chunk-1scenrk7.js +4 -0
  9. package/dist/src/chunk-1vb5ph1k.js +4 -0
  10. package/dist/src/chunk-20g565q7.js +5 -0
  11. package/dist/src/chunk-21h6dhdm.js +5 -0
  12. package/dist/src/{chunk-2e6s75qv.js → chunk-25mfpthk.js} +8 -8
  13. package/dist/src/{chunk-9rkfyt6q.js → chunk-2b39zyxc.js} +3 -3
  14. package/dist/src/chunk-2gzd6wbd.js +4 -0
  15. package/dist/src/{chunk-eka89q3k.js → chunk-3dntffy9.js} +1 -1
  16. package/dist/src/chunk-3gfczcsn.js +4 -0
  17. package/dist/src/chunk-3h5jz1vb.js +9 -0
  18. package/dist/src/chunk-41zcy6b3.js +5 -0
  19. package/dist/src/chunk-47n9m2de.js +4 -0
  20. package/dist/src/chunk-4vxeq0vd.js +58 -0
  21. package/dist/src/chunk-59dx6qaf.js +4 -0
  22. package/dist/src/chunk-5sdf9y92.js +4 -0
  23. package/dist/src/chunk-5wk1t46v.js +5 -0
  24. package/dist/src/chunk-661c50hh.js +17 -0
  25. package/dist/src/chunk-68n6bjjd.js +21 -0
  26. package/dist/src/{chunk-zg67wjkh.js → chunk-69pmjdf2.js} +3 -3
  27. package/dist/src/chunk-6hrj3jt6.js +145 -0
  28. package/dist/src/{chunk-b4cxdzwy.js → chunk-6myr26wx.js} +8 -8
  29. package/dist/src/chunk-6n96k09n.js +4 -0
  30. package/dist/src/chunk-6vwrbkre.js +4 -0
  31. package/dist/src/chunk-6wk0yrab.js +4 -0
  32. package/dist/src/chunk-6yhm9een.js +4 -0
  33. package/dist/src/chunk-7k7gjg2t.js +7 -0
  34. package/dist/src/chunk-7n5fz68h.js +4 -0
  35. package/dist/src/chunk-8cvnpnbp.js +4 -0
  36. package/dist/src/chunk-8kzv7rk7.js +4 -0
  37. package/dist/src/chunk-8nj68t1v.js +167 -0
  38. package/dist/src/{chunk-r20pe1nv.js → chunk-96r3bpg7.js} +3 -3
  39. package/dist/src/chunk-97x887te.js +4 -0
  40. package/dist/src/{chunk-sz1a7p43.js → chunk-99a6tbvd.js} +1 -1
  41. package/dist/src/chunk-9p5d2994.js +5 -0
  42. package/dist/src/{chunk-w7zsh13a.js → chunk-9q265er0.js} +4 -4
  43. package/dist/src/chunk-9xgnrv5w.js +5 -0
  44. package/dist/src/chunk-9xgsmshb.js +5 -0
  45. package/dist/src/chunk-a02d1wgv.js +4 -0
  46. package/dist/src/{chunk-km0dy5vc.js → chunk-a9ps00a1.js} +10 -10
  47. package/dist/src/chunk-aewdveet.js +5 -0
  48. package/dist/src/chunk-b3tdtq7r.js +9 -0
  49. package/dist/src/chunk-bn7jx7a2.js +4 -0
  50. package/dist/src/chunk-bnyw27ja.js +4 -0
  51. package/dist/src/{chunk-s1zq65ny.js → chunk-bpwsg76p.js} +2 -2
  52. package/dist/src/chunk-bvranw3g.js +4 -0
  53. package/dist/src/chunk-c25a84zb.js +4 -0
  54. package/dist/src/chunk-c27yv1dx.js +5 -0
  55. package/dist/src/chunk-c3ewxm4x.js +5 -0
  56. package/dist/src/chunk-cb1ga9rd.js +7 -0
  57. package/dist/src/chunk-cn7fwy7k.js +4 -0
  58. package/dist/src/chunk-cnvy4a64.js +4 -0
  59. package/dist/src/chunk-cqhw4yr6.js +5 -0
  60. package/dist/src/{chunk-v90es00d.js → chunk-ctmfshjc.js} +2 -2
  61. package/dist/src/chunk-ctwmhz13.js +4 -0
  62. package/dist/src/{chunk-qv2918jt.js → chunk-d3jx9bz5.js} +2 -2
  63. package/dist/src/{chunk-wry6skrm.js → chunk-d6rb08ga.js} +1 -1
  64. package/dist/src/chunk-ddqhj4eg.js +5 -0
  65. package/dist/src/{chunk-d57432wq.js → chunk-ddrhs1c3.js} +2 -2
  66. package/dist/src/chunk-dnjnh9p6.js +4 -0
  67. package/dist/src/{chunk-ajsrz473.js → chunk-dw5rwgya.js} +3 -3
  68. package/dist/src/chunk-e0870khr.js +5 -0
  69. package/dist/src/chunk-ea3k10kj.js +4 -0
  70. package/dist/src/chunk-emv82m1w.js +7 -0
  71. package/dist/src/chunk-f3m6pdnx.js +4 -0
  72. package/dist/src/chunk-f84z32cb.js +4 -0
  73. package/dist/src/chunk-fpczgf0z.js +4 -0
  74. package/dist/src/chunk-g2js4c2v.js +971 -0
  75. package/dist/src/chunk-g3af2qbk.js +5 -0
  76. package/dist/src/chunk-gadtna7s.js +11 -0
  77. package/dist/src/{chunk-c9nk1r78.js → chunk-gcyx407v.js} +3 -3
  78. package/dist/src/{chunk-jdqvcq0a.js → chunk-gfpntwc1.js} +3 -3
  79. package/dist/src/chunk-gmnm5e3e.js +4 -0
  80. package/dist/src/chunk-gp6vb5gf.js +4 -0
  81. package/dist/src/chunk-gppgy7pa.js +4 -0
  82. package/dist/src/chunk-hegfz0ae.js +5 -0
  83. package/dist/src/chunk-hpzxdp1k.js +17 -0
  84. package/dist/src/{chunk-2v7tw1nj.js → chunk-j69g8b50.js} +3 -3
  85. package/dist/src/chunk-jvstjnqm.js +19 -0
  86. package/dist/src/chunk-jzqrv78s.js +4 -0
  87. package/dist/src/chunk-k2948b8d.js +4 -0
  88. package/dist/src/chunk-k4ftd40d.js +4 -0
  89. package/dist/src/chunk-kd9vfaxh.js +5 -0
  90. package/dist/src/{chunk-34zxqcmq.js → chunk-kdczmgwk.js} +3 -3
  91. package/dist/src/chunk-ke3wn14v.js +4 -0
  92. package/dist/src/chunk-kh5n7m6w.js +4 -0
  93. package/dist/src/{chunk-0dfnyfkh.js → chunk-khejfph4.js} +3 -3
  94. package/dist/src/chunk-kny2xemh.js +4 -0
  95. package/dist/src/chunk-knyzw9md.js +4 -0
  96. package/dist/src/chunk-mbzpt2hp.js +4 -0
  97. package/dist/src/chunk-mm8rcxad.js +4 -0
  98. package/dist/src/chunk-nc4516tx.js +4 -0
  99. package/dist/src/{chunk-stfzjr9y.js → chunk-ntfrqrqn.js} +5 -5
  100. package/dist/src/chunk-nz5h2j52.js +4 -0
  101. package/dist/src/chunk-p22s97qy.js +4 -0
  102. package/dist/src/chunk-p9kt1sgr.js +6 -0
  103. package/dist/src/{chunk-9y5bcy28.js → chunk-pf282r5g.js} +4 -4
  104. package/dist/src/chunk-pnd4mrxy.js +4 -0
  105. package/dist/src/chunk-pqqteyj6.js +4 -0
  106. package/dist/src/chunk-qj1tbnv2.js +8 -0
  107. package/dist/src/chunk-qnh9egwr.js +4 -0
  108. package/dist/src/chunk-qy3khhf8.js +8 -0
  109. package/dist/src/chunk-r0vp315h.js +11 -0
  110. package/dist/src/chunk-r4j43b9s.js +237 -0
  111. package/dist/src/{chunk-4pfftt07.js → chunk-r54cxxze.js} +3 -3
  112. package/dist/src/chunk-r6pvhj33.js +325 -0
  113. package/dist/src/chunk-rb7aa5gr.js +54 -0
  114. package/dist/src/chunk-rdj50kb4.js +4 -0
  115. package/dist/src/chunk-rnd4vcas.js +4 -0
  116. package/dist/src/chunk-s3y3zfcx.js +14 -0
  117. package/dist/src/chunk-s4g43k75.js +5 -0
  118. package/dist/src/chunk-sfqe223f.js +311 -0
  119. package/dist/src/chunk-sqdrxjw5.js +7 -0
  120. package/dist/src/{chunk-0w1spptt.js → chunk-t54k47em.js} +4 -4
  121. package/dist/src/chunk-tek4pnvv.js +26 -0
  122. package/dist/src/chunk-tn74y7af.js +4 -0
  123. package/dist/src/chunk-tvq0nzam.js +5 -0
  124. package/dist/src/chunk-tx4f0h9c.js +6 -0
  125. package/dist/src/chunk-vdqag3fj.js +5 -0
  126. package/dist/src/chunk-vz5zzs57.js +4 -0
  127. package/dist/src/chunk-w4s2vfpj.js +4 -0
  128. package/dist/src/chunk-w5yypt53.js +42 -0
  129. package/dist/src/{chunk-r0f1q783.js → chunk-w68v64vh.js} +3 -3
  130. package/dist/src/chunk-whwj0pdk.js +5 -0
  131. package/dist/src/chunk-wnmqt1dc.js +4 -0
  132. package/dist/src/{chunk-8en08r7q.js → chunk-wpe46vsa.js} +3 -3
  133. package/dist/src/chunk-wxdjeb4k.js +27 -0
  134. package/dist/src/chunk-xcqzwf9j.js +247 -0
  135. package/dist/src/chunk-xezekwwn.js +5 -0
  136. package/dist/src/chunk-xf19m15s.js +4 -0
  137. package/dist/src/chunk-xghbxha4.js +4 -0
  138. package/dist/src/{chunk-jhnbfj19.js → chunk-xn9m3xc2.js} +5 -5
  139. package/dist/src/{chunk-a4k9rt7z.js → chunk-yqfz4vts.js} +3 -3
  140. package/dist/src/chunk-z8tvs8nk.js +5 -0
  141. package/dist/src/chunk-zm2rehqb.js +5 -0
  142. package/dist/src/chunk-zs6dqm35.js +4 -0
  143. package/dist/src/daemon/processEntry.js +2 -2
  144. package/dist/src/index.js +4 -4
  145. package/dist/src/runtime/bunRuntimeGuard.js +2 -2
  146. package/dist/src/utils/workers/iosBundleExtractWorker.js +2 -2
  147. package/ios/CameraPosterInjection/Injection/CameraPosterInjection.m +466 -0
  148. package/package.json +4 -3
  149. package/schemas/test-plan.schema.json +370 -52
  150. package/dist/src/chunk-09442h7v.js +0 -4
  151. package/dist/src/chunk-0e4gm1kj.js +0 -5
  152. package/dist/src/chunk-0eb8576f.js +0 -4
  153. package/dist/src/chunk-0rjm4nx7.js +0 -5
  154. package/dist/src/chunk-1zmh2eak.js +0 -4
  155. package/dist/src/chunk-28k63ha3.js +0 -5
  156. package/dist/src/chunk-2d4wmp8b.js +0 -4
  157. package/dist/src/chunk-32jpxz2y.js +0 -323
  158. package/dist/src/chunk-3jmvqygr.js +0 -238
  159. package/dist/src/chunk-3swvfhqt.js +0 -5
  160. package/dist/src/chunk-44bt78m9.js +0 -5
  161. package/dist/src/chunk-488vt2bp.js +0 -4
  162. package/dist/src/chunk-4fgdhcwx.js +0 -5
  163. package/dist/src/chunk-4jp2se4w.js +0 -4
  164. package/dist/src/chunk-4vhr9e4t.js +0 -4
  165. package/dist/src/chunk-4xd6zs3y.js +0 -15
  166. package/dist/src/chunk-51567pg8.js +0 -4
  167. package/dist/src/chunk-5agqsfev.js +0 -4
  168. package/dist/src/chunk-5d706gmr.js +0 -4
  169. package/dist/src/chunk-5kd4rqk7.js +0 -5
  170. package/dist/src/chunk-61t538bm.js +0 -4
  171. package/dist/src/chunk-6d3mmqxt.js +0 -54
  172. package/dist/src/chunk-6hyt398x.js +0 -5
  173. package/dist/src/chunk-6mnr8kpm.js +0 -4
  174. package/dist/src/chunk-79q5xsdc.js +0 -42
  175. package/dist/src/chunk-7bdgand3.js +0 -4
  176. package/dist/src/chunk-84cp9dw5.js +0 -4
  177. package/dist/src/chunk-86f2h5ww.js +0 -5
  178. package/dist/src/chunk-8cghfzb2.js +0 -19
  179. package/dist/src/chunk-9tf2p9y9.js +0 -5
  180. package/dist/src/chunk-a2sc4jm0.js +0 -5
  181. package/dist/src/chunk-aa5ng3d1.js +0 -4
  182. package/dist/src/chunk-b3h0a6ca.js +0 -4
  183. package/dist/src/chunk-b6a737qt.js +0 -4
  184. package/dist/src/chunk-bn64x5z5.js +0 -5
  185. package/dist/src/chunk-bvh649za.js +0 -12
  186. package/dist/src/chunk-c9tyfg4j.js +0 -26
  187. package/dist/src/chunk-cfsdfqnm.js +0 -4
  188. package/dist/src/chunk-cxyf04jc.js +0 -7
  189. package/dist/src/chunk-da08tx5v.js +0 -4
  190. package/dist/src/chunk-f2tc08m2.js +0 -4
  191. package/dist/src/chunk-f8tnk179.js +0 -5
  192. package/dist/src/chunk-f9s1kkhx.js +0 -5
  193. package/dist/src/chunk-fbp8a4rx.js +0 -4
  194. package/dist/src/chunk-fd2z0sze.js +0 -4
  195. package/dist/src/chunk-fk927f4q.js +0 -54
  196. package/dist/src/chunk-fxmr3a0f.js +0 -4
  197. package/dist/src/chunk-gaqwhd44.js +0 -4
  198. package/dist/src/chunk-ggtd5x5a.js +0 -5
  199. package/dist/src/chunk-gndcfrm7.js +0 -4
  200. package/dist/src/chunk-h3n4adc6.js +0 -310
  201. package/dist/src/chunk-h5pjbb83.js +0 -4
  202. package/dist/src/chunk-hgnnh302.js +0 -4
  203. package/dist/src/chunk-hmke8nhx.js +0 -5
  204. package/dist/src/chunk-j2bx12hn.js +0 -4
  205. package/dist/src/chunk-j70y1a2g.js +0 -4
  206. package/dist/src/chunk-js1jpyxp.js +0 -6
  207. package/dist/src/chunk-kbjq0qvb.js +0 -4
  208. package/dist/src/chunk-kfwx57xd.js +0 -4
  209. package/dist/src/chunk-kzwctna2.js +0 -4
  210. package/dist/src/chunk-m9ehyehy.js +0 -4
  211. package/dist/src/chunk-mct91p1f.js +0 -4
  212. package/dist/src/chunk-mf9spd4g.js +0 -5
  213. package/dist/src/chunk-mgrcansb.js +0 -4
  214. package/dist/src/chunk-mqc1d0eb.js +0 -6
  215. package/dist/src/chunk-n1zmpk0z.js +0 -4
  216. package/dist/src/chunk-ncyjf63g.js +0 -4
  217. package/dist/src/chunk-nr64d21q.js +0 -973
  218. package/dist/src/chunk-nwm2pq5v.js +0 -168
  219. package/dist/src/chunk-pm06b05d.js +0 -9
  220. package/dist/src/chunk-q50s00ry.js +0 -4
  221. package/dist/src/chunk-qwye1958.js +0 -14
  222. package/dist/src/chunk-r8z9pfve.js +0 -5
  223. package/dist/src/chunk-rdpgkjf6.js +0 -4
  224. package/dist/src/chunk-rkr0dks9.js +0 -5
  225. package/dist/src/chunk-rn84t3sf.js +0 -11
  226. package/dist/src/chunk-s123kn7n.js +0 -4
  227. package/dist/src/chunk-s73qn3fx.js +0 -4
  228. package/dist/src/chunk-sjn0nj4p.js +0 -5
  229. package/dist/src/chunk-sns0c35v.js +0 -7
  230. package/dist/src/chunk-t4dr5c8v.js +0 -8
  231. package/dist/src/chunk-tc8k9c1j.js +0 -4
  232. package/dist/src/chunk-teznhase.js +0 -4
  233. package/dist/src/chunk-ty9xgmz4.js +0 -4
  234. package/dist/src/chunk-tyazf3sk.js +0 -145
  235. package/dist/src/chunk-v6npjrjm.js +0 -5
  236. package/dist/src/chunk-vbvtzkwz.js +0 -5
  237. package/dist/src/chunk-vefd8qee.js +0 -8
  238. package/dist/src/chunk-vs9r72ta.js +0 -17
  239. package/dist/src/chunk-w2mwa0jk.js +0 -4
  240. package/dist/src/chunk-w88k0bgr.js +0 -4
  241. package/dist/src/chunk-wzdt0enk.js +0 -4
  242. package/dist/src/chunk-xhhv854c.js +0 -4
  243. package/dist/src/chunk-y58270hd.js +0 -4
  244. package/dist/src/chunk-yk0hmbex.js +0 -4
  245. package/dist/src/chunk-ympy4fdz.js +0 -28
  246. package/dist/src/chunk-yw436axy.js +0 -4
  247. package/dist/src/chunk-z04jrpjy.js +0 -5
  248. package/dist/src/chunk-z2xznczw.js +0 -4
  249. package/dist/src/chunk-z4xnrgps.js +0 -4
  250. package/dist/src/chunk-z7csyszv.js +0 -4
  251. package/dist/src/chunk-z8t0v07j.js +0 -11
  252. package/dist/src/chunk-z916af47.js +0 -228
  253. package/dist/src/chunk-zcr8he8q.js +0 -5
  254. package/dist/src/chunk-zd9vmkzn.js +0 -9
  255. package/dist/src/chunk-zj939v0h.js +0 -5
  256. package/dist/src/chunk-zkdjwtc1.js +0 -4
  257. package/dist/src/chunk-zkv5kzt6.js +0 -4
@@ -1,4 +0,0 @@
1
- // @bun
2
- import{MO,PU}from"./chunk-z916af47.js";import"./chunk-tyazf3sk.js";import"./chunk-z04jrpjy.js";import"./chunk-0e4gm1kj.js";import"./chunk-4fgdhcwx.js";import"./chunk-6d3mmqxt.js";import"./chunk-zg67wjkh.js";import"./chunk-h3n4adc6.js";import"./chunk-32jpxz2y.js";import"./chunk-79q5xsdc.js";import"./chunk-ggtd5x5a.js";import"./chunk-z8t0v07j.js";import"./chunk-mf9spd4g.js";export{PU as describeDefaultAppFileProviderCoverage,MO as getAppFileService};
3
-
4
- //# debugId=184E9AD8ED15E5E764756E2164756E21
@@ -1,7 +0,0 @@
1
- // @bun
2
- import{i,wr,te,e}from"./chunk-z8t0v07j.js";import{g,E}from"./chunk-mf9spd4g.js";import{ke}from"./chunk-32jpxz2y.js";import{ga,aZ}from"./chunk-nwm2pq5v.js";import{Kr,rl,xs,v,yn,F,S,UC,nn,Xc,HT,LL,OW,L5,M,na,rR,ii,cg,dg,ck,k}from"./chunk-h3n4adc6.js";import{n,a,h,b,s,Me,p}from"./chunk-79q5xsdc.js";import{Zn}from"./chunk-6d3mmqxt.js";import{xu,Bf,Bd,jH,KH,_Z,$f,Hp,P6}from"./chunk-a4k9rt7z.js";import{KF}from"./chunk-zg67wjkh.js";import{r,t,u}from"./chunk-9rkfyt6q.js";import{promises as Xe}from"fs";import*as ae from"path";var Z=Me(n(),n()),q=b(n()),st=s({snapshotName:n(),timestamp:n(),deviceId:n(),deviceName:n(),platform:p(["android","ios"]),deviceType:n().optional(),osVersion:n().optional(),snapshotType:p(["vm","adb","simctl","app_data"]),includeAppData:h(),includeSettings:h(),packages:q.optional(),foregroundApp:n().optional(),settings:s({global:Z.optional(),secure:Z.optional(),system:Z.optional()}).optional(),iosSettings:s({values:Z,ui:s({appearance:p(["light","dark"]).optional(),contentSize:n().optional()}).optional()}).optional(),appDataBackup:s({backupFile:n().optional(),backedUpPackages:q.optional(),skippedPackages:q.optional(),failedPackages:q.optional(),totalPackages:a().optional(),backupTimedOut:h().optional(),backupMethod:p(["root_pull","none","simctl_copy"]).optional(),bundleStatuses:b(s({bundleId:n(),status:p(["captured","skipped-no-container","not-installed","failed"])})).optional()}).optional(),fixture:s({avdName:n(),systemImageId:n(),avdConfigHash:n(),emulatorVersion:n(),userdataGeneration:n()}).optional()});function rt(o,c){let d;try{d=JSON.parse(c)}catch(l){return e.warn(`[DeviceSnapshotRepository] Failed to parse manifest for ${o}: ${r(l)}`),null}let m=st.safeParse(d);if(m.success)return m.data;return e.warn(`[DeviceSnapshotRepository] Manifest for ${o} failed validation: ${m.error.message}`),typeof d==="object"&&d!==null&&!Array.isArray(d)?d:null}function Ie(o){let c=rt(o.snapshot_name,o.manifest_json);if(!c)return null;return{snapshotName:o.snapshot_name,deviceId:o.device_id,deviceName:o.device_name,platform:o.platform,snapshotType:o.snapshot_type,includeAppData:Boolean(o.include_app_data),includeSettings:Boolean(o.include_settings),createdAt:o.created_at,lastAccessedAt:o.last_accessed_at,sizeBytes:o.size_unknown?null:o.size_bytes,pendingReclaim:Boolean(o.pending_reclaim),...o.pending_reclaim_reason===null?{}:{pendingReclaimReason:o.pending_reclaim_reason},manifest:c}}var pt={deviceId:(o,c)=>{o.device_id=c},deviceName:(o,c)=>{o.device_name=c},platform:(o,c)=>{o.platform=c},snapshotType:(o,c)=>{o.snapshot_type=c},includeAppData:(o,c)=>{o.include_app_data=c?1:0},includeSettings:(o,c)=>{o.include_settings=c?1:0},createdAt:(o,c)=>{o.created_at=c},lastAccessedAt:(o,c)=>{o.last_accessed_at=c},pendingReclaim:(o,c)=>{o.pending_reclaim=c?1:0},pendingReclaimReason:(o,c)=>{o.pending_reclaim_reason=c},manifest:(o,c)=>{o.manifest_json=JSON.stringify(c)}};function ct(o){let c={};for(let[d,m]of Object.entries(pt)){let l=o[d];if(l!==void 0)m(c,l)}if(o.sizeBytes!==void 0)c.size_bytes=o.sizeBytes??0,c.size_unknown=o.sizeBytes===null?1:0;return c}class me{db;constructor({db:o}={}){this.db=o??null}getDb(){return this.db??ke()}async insertSnapshot(o){let c=await this.getDb(),d={snapshot_name:o.snapshotName,device_id:o.deviceId,device_name:o.deviceName,platform:o.platform,snapshot_type:o.snapshotType,include_app_data:o.includeAppData?1:0,include_settings:o.includeSettings?1:0,created_at:o.createdAt,last_accessed_at:o.lastAccessedAt,size_bytes:o.sizeBytes??0,size_unknown:o.sizeBytes===null?1:0,pending_reclaim:o.pendingReclaim?1:0,pending_reclaim_reason:o.pendingReclaimReason??null,manifest_json:JSON.stringify(o.manifest)};await c.insertInto("device_snapshots").values(d).onConflict((m)=>m.column("snapshot_name").doUpdateSet({device_id:d.device_id,device_name:d.device_name,platform:d.platform,snapshot_type:d.snapshot_type,include_app_data:d.include_app_data,include_settings:d.include_settings,last_accessed_at:d.last_accessed_at,size_bytes:d.size_bytes,size_unknown:d.size_unknown,pending_reclaim:d.pending_reclaim,pending_reclaim_reason:d.pending_reclaim_reason,manifest_json:d.manifest_json})).execute()}async updateSnapshot(o,c){let d=await this.getDb(),m=ct(c);if(Object.keys(m).length===0)return;await d.updateTable("device_snapshots").set(m).where("snapshot_name","=",o).execute()}async getSnapshot(o){let d=await(await this.getDb()).selectFrom("device_snapshots").selectAll().where("snapshot_name","=",o).executeTakeFirst();return d?Ie(d):null}async listSnapshots(o={}){let d=(await this.getDb()).selectFrom("device_snapshots").selectAll();if(o.deviceId)d=d.where("device_id","=",o.deviceId);if(o.platform)d=d.where("platform","=",o.platform);if(o.snapshotType)d=d.where("snapshot_type","=",o.snapshotType);if(o.pendingReclaim!==void 0)d=d.where("pending_reclaim","=",o.pendingReclaim?1:0);if(o.orderByLastAccessed)d=d.orderBy("last_accessed_at",o.orderByLastAccessed);if(o.orderByCreatedAt)d=d.orderBy("created_at",o.orderByCreatedAt);if(o.limit&&o.limit>0)d=d.limit(o.limit);return(await d.execute()).map((l)=>Ie(l)).filter((l)=>Boolean(l))}async touchSnapshot(o,c){await this.updateSnapshot(o,{lastAccessedAt:c})}async deleteSnapshot(o){let d=await(await this.getDb()).deleteFrom("device_snapshots").where("snapshot_name","=",o).executeTakeFirst();return Number(d.numDeletedRows??0)>0}}function ee(o,c){if(typeof o==="boolean")return o;if(typeof o==="string"){let d=o.trim().toLowerCase();if(d==="true")return!0;if(d==="false")return!1}return c}function he(o,c,d){if(o===void 0||o===null||o==="")return c;let m=typeof o==="string"?Number(o):o;if(!Number.isFinite(m)||m<=0)return c;let l=d?m:Math.round(m);return l>0?l:c}function dt(o,c){if(o===void 0||o===null||o==="")return;let d=typeof o==="string"?Number(o):o;if(!Number.isFinite(d)||d<=0)return;let m=c?d:Math.round(d);return m>0?m:void 0}function L(o){let c=o&&typeof o==="object"?o:{};return{includeAppData:ee(c.includeAppData,ga.includeAppData),includeSettings:ee(c.includeSettings,ga.includeSettings),useVmSnapshot:ee(c.useVmSnapshot,ga.useVmSnapshot),strictBackupMode:ee(c.strictBackupMode,ga.strictBackupMode),vmSnapshotTimeoutMs:he(c.vmSnapshotTimeoutMs,ga.vmSnapshotTimeoutMs,!1),maxVmSnapshotsPerAvd:he(c.maxVmSnapshotsPerAvd,ga.maxVmSnapshotsPerAvd,!1),maxVmArchiveSizeMb:dt(c.maxVmArchiveSizeMb,!0),maxArchiveSizeMb:he(c.maxArchiveSizeMb,ga.maxArchiveSizeMb,!0)}}var wE={ARCHIVE:"automobile:deviceSnapshots/archive"};function be(o,c,d){return OW(c,{simctl:o}).terminateApp(d)}var ut=[{domain:".GlobalPreferences",key:"AppleLocale"}];async function mt(o,c){let d={};try{let m=(await o.executeCommandArgs(["ui",c,"appearance"])).stdout.trim();if(m==="light"||m==="dark")d.appearance=m}catch(m){e.warn(`[iOS] Failed to read appearance: ${m}`)}try{let m=(await o.executeCommandArgs(["ui",c,"content_size"])).stdout.trim();if(m)d.contentSize=m}catch(m){e.warn(`[iOS] Failed to read content_size: ${m}`)}return Object.keys(d).length>0?d:void 0}async function Pe(o,c){let d={};for(let{domain:m,key:l}of ut)try{let y=(await o.executeCommandArgs(["spawn",c,"defaults","read",m,l])).stdout.trim();if(y)d[`${m}/${l}`]=y}catch(f){e.debug(`[iOS] No value for ${m}/${l}: ${f}`)}return{values:d,ui:await mt(o,c)}}async function xe(o,c,d){for(let[m,l]of Object.entries(d.values)){let f=m.indexOf("/");if(f<0)continue;let y=m.slice(0,f),D=m.slice(f+1);try{await o.executeCommandArgs(["spawn",c,"defaults","write",y,D,l])}catch(w){e.warn(`[iOS] Failed to write ${y}/${D}: ${w}`)}}if(d.ui?.appearance)try{await o.executeCommandArgs(["ui",c,"appearance",d.ui.appearance])}catch(m){e.warn(`[iOS] Failed to restore appearance: ${m}`)}if(d.ui?.contentSize)try{await o.executeCommandArgs(["ui",c,"content_size",d.ui.contentSize])}catch(m){e.warn(`[iOS] Failed to restore content_size: ${m}`)}}class Ce{options;kind="simulator";constructor(o){this.options=o}getDeviceInfo(){return this.options.simctl.getDeviceInfo(this.options.deviceId)}getRuntimes(){return this.options.simctl.getRuntimes()}captureSettings(){return Pe(this.options.simctl,this.options.deviceId)}restoreSettings(o){return xe(this.options.simctl,this.options.deviceId,o)}getAppDataContainerPath(o){return LL(this.options.simctl,this.options.deviceId,o,this.options.containerOwnership)}terminateAppIfRunning(o){return be(this.options.simctl,this.options.deviceId,o)}listAppsOrThrow(){return new UC(this.options.deviceId,this.options.simctl).listApps()}listApps(){return L5(this.options.deviceId,this.options).listApps()}}function ne(o,c){return yn(o)?{kind:"physical"}:new Ce({deviceId:o,simctl:c.simctl,containerOwnership:c.containerOwnership})}import{promises as V}from"fs";import*as ie from"path";var le="isVmSnapshotSaveDispatched";class fe{iosCaptureContainerFiles;consoleBusyRegistry;device;adb;emulator;store;iosSnapshotBackend;constructor(o,c={}){let{adbFactory:d=v,emulator:m,store:l=new $f,simctl:f,consoleBusyRegistry:y=xs}=c;this.iosCaptureContainerFiles=c.iosCaptureContainerFiles??{mkdir:async(D)=>{await V.mkdir(D,{recursive:!0})},cp:(D,w)=>V.cp(D,w,{recursive:!0}),pathExists:na},this.consoleBusyRegistry=y,this.device=o,this.adb=d.create(o),this.emulator=m||new ii,this.store=l,this.iosSnapshotBackend=ne(o.deviceId,{simctl:f||new F(o),containerOwnership:c.containerOwnership})}get simulatorSnapshotBackend(){if(this.iosSnapshotBackend.kind==="physical")throw Error("Snapshot app listing is not supported for physical iOS devices");return this.iosSnapshotBackend}async capture(o){return this.execute(o)}async execute(o){switch(Bf(o.snapshotName),this.device.platform){case"android":return this.executeAndroid(o);case"ios":if(this.iosSnapshotBackend.kind==="physical")throw new t(`Device snapshots are not supported on physical iOS devices (${this.device.deviceId}); they require a Simulator (simctl).`);return this.executeIos(o);default:throw new t(`Snapshot capture is not supported for platform '${this.device.platform}'`)}}async executeAndroid(o){let{snapshotName:c,includeAppData:d=!0,includeSettings:m=!0,useVmSnapshot:l=!0,vmSnapshotTimeoutMs:f=30000}=o;e.info(`Capturing snapshot '${c}' for device ${this.device.deviceId}`);let y=this.device.deviceId.startsWith("emulator-"),D=l&&y,w;if(D)w=await this.captureVmSnapshot(c,m,f);else w=await this.captureSettingsSnapshot(c,d,m);return e.info(`Snapshot '${c}' captured successfully (type: ${w.snapshotType})`),{snapshotName:w.snapshotName,timestamp:w.timestamp,snapshotType:w.snapshotType,manifest:w}}async captureVmSnapshot(o,c,d){e.info(`Using VM snapshot for emulator ${this.device.deviceId}`);let m=!1;try{let l=cg("save",o);e.info(`Executing: adb -s ${this.device.deviceId} ${l}`);let f;try{f=await this.consoleBusyRegistry.runExclusive(this.device.deviceId,()=>this.adb.execute(l.split(" "),{timeoutMs:d,waitForProcessSettlementAfterAbort:!0,beforeDispatch:async()=>{m=!0}}))}catch(R){throw Error(ck("save",o,R))}let y=dg("save",o,f);if(!y.ok)throw Error(y.errorMessage);e.info("VM snapshot saved successfully");let D;if(c)D=await this.captureSettings();let w=await this.getForegroundApp();return{snapshotName:o,timestamp:new Date().toISOString(),deviceId:this.device.deviceId,deviceName:this.device.name,platform:"android",snapshotType:"vm",includeAppData:!0,includeSettings:c,foregroundApp:w,settings:D}}catch(l){let f=r(l);e.error(`Failed to capture VM snapshot: ${f}`);let y=new t(`Failed to capture VM snapshot: ${f}`);if(m)Object.assign(y,{[le]:!0});throw y}}async captureSettingsSnapshot(o,c,d){if(e.info(`Using settings-only snapshot for device ${this.device.deviceId}`),c)e.warn("App-data snapshots are not supported on non-VM Android (the adb backup path was removed in #5708); capturing settings only. Use a VM snapshot on an emulator to capture app data.");try{let m=await this.getForegroundApp(),l;if(d)l=await this.captureSettings(),await this.saveSettings(o,l);return{snapshotName:o,timestamp:new Date().toISOString(),deviceId:this.device.deviceId,deviceName:this.device.name,platform:"android",snapshotType:"adb",includeAppData:!1,includeSettings:d,foregroundApp:m,settings:l}}catch(m){throw e.error(`Failed to capture settings snapshot: ${r(m)}`,m),u(m,"Failed to capture settings snapshot")}}async getForegroundApp(){try{return(await this.adb.getForegroundApp())?.packageName}catch(o){e.warn(`Failed to get foreground app: ${o}`);return}}async captureSettings(){e.info("Capturing device settings");let o=["global","secure","system"],c={};for(let d of o)await this.captureSettingsNamespace(d,c);return c}async captureSettingsNamespace(o,c){try{let d=!1;try{let l=await k.getInstance(this.device).requestSettingsList(o);if(l.success&&l.entries)c[o]=l.entries,d=!0}catch(m){e.debug(`[CaptureSnapshot] a11y settings list failed for ${o}: ${m}`)}if(!d){let m=await this.adb.executeCommand(`shell settings list ${o}`);c[o]=this.parseSettings(m.stdout)}e.info(`Captured ${Object.keys(c[o]).length} ${o} settings`)}catch(d){e.warn(`Failed to capture ${o} settings: ${d}`),c[o]={}}}parseSettings(o){let c={};for(let d of o.split(`
3
- `)){let m=d.trim();if(!m)continue;let l=m.match(/^(.+?)=(.*)$/);if(l)c[l[1]]=l[2]}return c}async saveSettings(o,c){let d=this.getAndroidPathOptions(),m=this.store.getSnapshotPathWithOptions(o,d);await V.mkdir(m,{recursive:!0});let l=this.store.getSettingsPath(o,d);await V.writeFile(l,JSON.stringify(c,null,2),"utf-8"),e.info(`Saved settings to ${l}`)}getAndroidPathOptions(){if(this.device.deviceId.startsWith("emulator-"))return{platform:"android",avdName:this.device.name};return}async executeIos(o){let{snapshotName:c,includeAppData:d=!0,includeSettings:m=!0,useVmSnapshot:l=!0,strictBackupMode:f=!1,appBundleIds:y}=o;if(e.info(`[iOS] Capturing snapshot '${c}' for simulator ${this.device.deviceId}`),l)e.info("[iOS] useVmSnapshot is ignored; using app container backups for portability");let D=await this.getIosDeviceMetadata(),w=this.getIosPathOptions(),A;if(m)A=await this.simulatorSnapshotBackend.captureSettings();let R=d?await this.captureIosAppData(c,y,f,w):void 0,I={snapshotName:c,timestamp:new Date().toISOString(),deviceId:this.device.deviceId,deviceName:this.device.name,platform:"ios",deviceType:D.deviceType,osVersion:D.osVersion,snapshotType:"app_data",includeAppData:d,includeSettings:m,...A?{iosSettings:A}:{},appDataBackup:R};return await this.saveIosMetadata(c,I,w),e.info(`[iOS] Snapshot '${c}' captured successfully (type: ${I.snapshotType})`),{snapshotName:I.snapshotName,timestamp:I.timestamp,snapshotType:I.snapshotType,manifest:I}}getIosPathOptions(){return{platform:"ios",deviceId:this.device.deviceId}}async captureIosAppData(o,c,d,m){let l=Array.from(new Set((c??[]).map((y)=>y.trim()).filter(Boolean)));if(l.length===0)throw new t("No app bundle IDs provided for iOS app-data capture. Pass appBundleIds with at least one installed app, or set includeAppData:false for a settings-only snapshot.");e.info("[iOS] Capturing app data containers");let f=this.store.getAppDataPath(o,m);await V.mkdir(f,{recursive:!0});try{return await this.backupIosAppContainers(l,d,f)}catch(y){throw await this.store.deleteSnapshotData(o,m),y}}async backupIosAppContainers(o,c,d){let m=await this.getInstalledIosBundleIds(),l=[],f=[],y=[],D=[];for(let w of o){if(!m.has(w)){e.warn(`[iOS] ${w} is not installed; skipping app data capture`),D.push(w),l.push({bundleId:w,status:"not-installed"});continue}try{let A=await this.simulatorSnapshotBackend.getAppDataContainerPath(w);if(!A){e.warn(`[iOS] ${w} has no data container; skipping app data capture`),y.push(w),l.push({bundleId:w,status:"skipped-no-container"});continue}e.info(`[iOS] Backing up app data: ${w}`),await this.copyIosAppContainer(A,d,w),f.push(w),l.push({bundleId:w,status:"captured"})}catch(A){if(A instanceof Xc)throw A;e.warn(`[iOS] Failed to backup app data for ${w}: ${A}`),D.push(w),l.push({bundleId:w,status:"failed"})}}if(c&&f.length<o.length){let w=new Set(f),A=o.filter((R)=>!w.has(R));throw new t(`Failed to backup app data for ${A.length} of ${o.length} requested app(s) in strictBackupMode (all-or-nothing): ${A.join(", ")}.`)}if(f.length===0){let w=[`iOS app-data capture backed up 0 of ${o.length} requested app(s) (${o.join(", ")}).`];if(D.length>0)w.push(`Failed: ${D.join(", ")}.`);if(y.length>0)w.push(`Skipped (no data container): ${y.join(", ")}.`);throw w.push("Pass appBundleIds for installed apps that have a data container, or set includeAppData:false for a settings-only snapshot."),new t(w.join(" "))}return{backupMethod:"simctl_copy",totalPackages:o.length,backedUpPackages:f,skippedPackages:y,failedPackages:D,bundleStatuses:l}}async getInstalledIosBundleIds(){let o;try{o=await this.simulatorSnapshotBackend.listAppsOrThrow()}catch(d){throw u(d,"Failed to list installed iOS apps to validate appBundleIds")}let c=new Set;for(let d of o){let m=nn(d);if(m)c.add(m)}return c}async copyIosAppContainer(o,c,d){let m=ie.join(c,d);await this.iosCaptureContainerFiles.mkdir(m);for(let l of HT){let f=ie.join(o,l),y=ie.join(m,l);if(await this.iosCaptureContainerFiles.pathExists(f))await this.iosCaptureContainerFiles.cp(f,y)}}async getIosDeviceMetadata(){try{let o=await this.simulatorSnapshotBackend.getDeviceInfo();if(!o)return{};let c=o.deviceTypeIdentifier??o.model,d=o.os_version;if(!d&&o.runtime){let l=(await this.simulatorSnapshotBackend.getRuntimes()).find((f)=>f.identifier===o.runtime);d=l?.version||l?.name}return{deviceType:c,osVersion:d}}catch(o){return e.warn(`[iOS] Failed to read simulator metadata: ${o}`),{}}}async saveIosMetadata(o,c,d){let m=this.store.getSnapshotPathWithOptions(o,d);await V.mkdir(m,{recursive:!0});let l=this.store.getMetadataPath(o,d);await V.writeFile(l,JSON.stringify(c,null,2),"utf-8"),e.info(`[iOS] Wrote metadata to ${l}`)}}import{promises as $e}from"fs";import*as oe from"path";function Oe(o){let c=o.trim(),d=c.match(/^(\d+)(?:\.(\d+))?(?:\.\d+)?$/)??c.match(/^[iI][oO][sS][- _]?(\d+)(?:[.\-_ ](\d+))?(?:[.\-_ ]\d+)?$/)??c.match(/^com\.apple\.CoreSimulator\.SimRuntime\.[iI][oO][sS]-(\d+)(?:-(\d+))?(?:-\d+)?$/);if(!d)return null;let m=Number(d[1]),l=d[2]===void 0?void 0:Number(d[2]);return Number.isFinite(m)&&(l===void 0||Number.isFinite(l))?{major:m,minor:l}:null}var ht=new Set(["global","secure","system"]);function lt(o){return ht.has(o)}function ft(o,c,d,m){let l=o==="vm"&&!c,f=d?"useVmSnapshot is disabled":`device ${m} is not an emulator`;return{snapshotType:c?"vm":"adb",restoreMode:c?"vm":"settings_only",...l?{restoreNote:`VM state was not restored; only captured Android settings were applied because ${f}.`}:{}}}class Se{windowCacheInvalidator=new Zn;consoleBusyRegistry;device;adb;emulator;store;timer;iosSnapshotBackend;iosRestoreOperations;constructor(o,c={}){let{adbFactory:d=v,emulator:m,timer:l=i,store:f=new $f,simctl:y,consoleBusyRegistry:D=xs,iosRestoreOperations:w}=c;this.consoleBusyRegistry=D,this.device=o,this.adb=d.create(o),this.emulator=m||new ii,this.store=f,this.timer=l,this.iosSnapshotBackend=ne(o.deviceId,{simctl:y||new F(o),containerOwnership:c.containerOwnership}),this.iosRestoreOperations=w??{pathExists:na,terminateAppIfRunning:(A,R)=>this.simulatorSnapshotBackend.terminateAppIfRunning(R),getAppDataContainerPath:(A,R)=>this.simulatorSnapshotBackend.getAppDataContainerPath(R),rm:(A,R)=>$e.rm(A,R),cp:(A,R,I)=>$e.cp(A,R,I)}}get simulatorSnapshotBackend(){if(this.iosSnapshotBackend.kind==="physical")throw Error("Snapshot app listing is not supported for physical iOS devices");return this.iosSnapshotBackend}async restore(o){return this.execute(o)}async execute(o){switch(Bf(o.snapshotName),this.device.platform){case"android":return this.executeAndroid(o);case"ios":if(this.iosSnapshotBackend.kind==="physical")throw new t(`Device snapshots are not supported on physical iOS devices (${this.device.deviceId}); they require a Simulator (simctl).`);return this.executeIos(o);default:throw new t(`Snapshot restore is not supported for platform '${this.device.platform}'`)}}async executeAndroid(o){let{snapshotName:c,manifest:d,useVmSnapshot:m=!0,vmSnapshotTimeoutMs:l=30000,onVmSnapshotLoaded:f,onBeforeVmSnapshotLoad:y}=o;if(e.info(`Restoring snapshot '${c}' (type: ${d.snapshotType}) to device ${this.device.deviceId}`),d.platform!==this.device.platform)throw new t(`Snapshot platform '${d.platform}' does not match device platform '${this.device.platform}'`);let D=this.device.deviceId.startsWith("emulator-"),w=m&&d.snapshotType==="vm"&&D,A=[];if(w)await this.restoreVmSnapshot(c,d,l,{onVmSnapshotLoaded:f,onBeforeVmSnapshotLoad:y});else A=await this.restoreSettingsSnapshot(d);if(A.length===0)e.info(`Snapshot '${c}' restored successfully`);else e.warn(`Snapshot '${c}' partially restored: ${A.length} item(s) failed`);return{...ft(d.snapshotType,w,D,this.device.deviceId),restoredAt:new Date().toISOString(),success:A.length===0,failures:A}}async restoreVmSnapshot(o,c,d,{onVmSnapshotLoaded:m,onBeforeVmSnapshotLoad:l}={}){e.info(`Restoring VM snapshot for emulator ${this.device.deviceId}`);try{let f=cg("load",o);e.info(`Executing: adb -s ${this.device.deviceId} ${f}`),await l?.();let y;try{y=await this.consoleBusyRegistry.runExclusive(this.device.deviceId,()=>this.adb.execute(f.split(" "),{timeoutMs:d,waitForProcessSettlementAfterAbort:!0}))}catch(w){throw Error(ck("load",o,w))}let D=dg("load",o,y);if(!D.ok)throw Object.assign(Error(D.errorMessage),{isDefinitiveVmSnapshotLoadFailure:!0});e.info("VM snapshot restored successfully"),await m?.(),await this.emulator.waitForEmulatorReady(c.deviceName,d,null,{targetDeviceId:this.device.deviceId,options:{skipWakeAndUnlock:!0}}),e.info("VM snapshot restoration complete")}catch(f){let y=r(f);e.error(`Failed to restore VM snapshot: ${y}`);let D=`Failed to restore VM snapshot '${o}' on device ${this.device.deviceId}`,w=f instanceof t?new t(`${D}: ${f.message}`,{cause:f}):u(f,D);if(f instanceof Error&&f.isDefinitiveVmSnapshotLoadFailure===!0)Object.assign(w,{isDefinitiveVmSnapshotLoadFailure:!0});throw w}}async restoreSettingsSnapshot(o){e.info(`Restoring settings-only snapshot for device ${this.device.deviceId}`);try{let c=[];if(o.includeSettings&&o.settings)c=await this.restoreSettings(o.settings);if(o.foregroundApp)await this.restoreForegroundApp(o.foregroundApp);return e.info("Settings snapshot restoration complete"),c}catch(c){throw e.error(`Failed to restore settings snapshot: ${r(c)}`,c),u(c,"Failed to restore settings snapshot")}}async restoreSettings(o){e.info("Restoring device settings");let c=[];for(let[d,m]of Object.entries(o)){if(!m||Object.keys(m).length===0)continue;e.info(`Restoring ${Object.keys(m).length} ${d} settings`);let l=0,f=0;if(!lt(d)){f=Object.keys(m).length,e.warn(`Skipping unsupported settings namespace ${d}`);for(let y of Object.keys(m))c.push({kind:"android_setting",namespace:d,key:y,reason:"unsupported settings namespace"});e.info(`${d} settings restored: ${l} succeeded, ${f} failed`);continue}for(let[y,D]of Object.entries(m)){if(!/^[A-Za-z0-9_.:-]+$/.test(y)){f++,e.warn(`Failed to restore ${d} setting ${y}: invalid settings key`),c.push({kind:"android_setting",namespace:d,key:y,reason:"invalid settings key"});continue}try{await this.applyAndroidSetting(d,y,D),l++}catch(w){f++,e.warn(`Failed to restore ${d} setting ${y}: ${w}`),c.push({kind:"android_setting",namespace:d,key:y,reason:r(w)})}}e.info(`${d} settings restored: ${l} succeeded, ${f} failed`)}return c}async applyAndroidSetting(o,c,d){let m=!1;try{if((await k.getInstance(this.device).requestSettingsPut(o,c,d,{valueType:"string"})).success)m=!0}catch(l){e.debug(`[RestoreSnapshot] a11y settings put failed for ${o}/${c}: ${l}`)}if(!m)await this.adb.executeCommand(`shell settings put ${o} ${S(c)} ${S(d)}`)}async restoreForegroundApp(o){e.info(`Restoring foreground app: ${o}`);try{await this.adb.executeCommand(`shell am start -a android.intent.action.MAIN -c android.intent.category.LAUNCHER ${S(o)}`),e.info(`Launched ${o}`)}catch(c){e.warn(`Failed to restore foreground app: ${c}`)}finally{this.windowCacheInvalidator.invalidate(this.device,!0)}}async executeIos(o){let{snapshotName:c,manifest:d}=o;if(e.info(`[iOS] Restoring snapshot '${c}' (type: ${d.snapshotType})`),d.platform!=="ios")throw new t(`Snapshot platform '${d.platform}' does not match device platform '${this.device.platform}'`);if(d.snapshotType!=="app_data")throw new t(`Unsupported iOS snapshot type '${d.snapshotType}'. Re-capture using app container backups.`);if(await this.validateIosSnapshotCompatibility(d),d.includeSettings&&d.iosSettings)await this.simulatorSnapshotBackend.restoreSettings(d.iosSettings);let m=await this.restoreIosAppData(c,d);if(m.length===0)e.info(`[iOS] Snapshot '${c}' restored successfully`);else e.warn(`[iOS] Snapshot '${c}' partially restored: ${m.length} bundle(s) failed`);return{snapshotType:d.snapshotType,restoredAt:new Date().toISOString(),success:m.length===0,failures:m}}getIosPathOptions(o){return{platform:"ios",deviceId:o??this.device.deviceId}}async restoreIosAppData(o,c){if(!c.includeAppData)return e.info("[iOS] Snapshot does not include app data; skipping restore"),[];let d=await this.resolveIosAppDataPath(o,c);if(!d)return e.warn(`[iOS] App data directory not found for snapshot '${o}'`),[];if(c.appDataBackup?.backupMethod==="none")return e.info("[iOS] Snapshot app data backup method is 'none'; skipping restore"),[];let m=await this.resolveIosSnapshotBundleIds(d,c);if(m.length===0)return e.warn("[iOS] No app bundle IDs found to restore"),[];let l=await this.getInstalledIosBundleIds();if(l.size>0){let y=m.filter((D)=>!l.has(D));if(y.length>0)throw new t(`App(s) not installed on simulator: ${y.join(", ")}. Please reinstall and retry restore.`)}else e.warn("[iOS] Unable to verify installed apps; proceeding with restore");let f=[];for(let y of m)try{await this.restoreIosBundleContainer(y,d)}catch(D){e.warn(`[iOS] Failed to restore app data for ${y}: ${D}`),f.push({kind:"ios_bundle",bundleId:y,reason:r(D)})}return f}async resolveIosAppDataPath(o,c){let d=this.store.getAppDataPath(o,this.getIosPathOptions(c.deviceId));if(await this.iosRestoreOperations.pathExists(d))return d;if(!c.deviceId||c.deviceId===this.device.deviceId)return;let m=this.store.getAppDataPath(o,this.getIosPathOptions(this.device.deviceId));if(!await this.iosRestoreOperations.pathExists(m))return;return e.info(`[iOS] App data not found for '${c.deviceId}', using current device path '${this.device.deviceId}'`),m}async restoreIosBundleContainer(o,c){await this.iosRestoreOperations.terminateAppIfRunning(this.device.deviceId,o);let d=await this.iosRestoreOperations.getAppDataContainerPath(this.device.deviceId,o);if(!d)throw new t(`App data container not found for ${o}`);let m=oe.join(c,o);for(let l of HT){let f=oe.join(m,l);if(!await this.iosRestoreOperations.pathExists(f))continue;let y=oe.join(d,l);await this.iosRestoreOperations.rm(y,{recursive:!0,force:!0});try{await this.iosRestoreOperations.cp(f,y,{recursive:!0})}catch(D){throw new t(`Existing destination data was wiped/deleted and is now gone at '${y}'; restore copy failed: ${r(D)}`,{cause:D})}}}async validateIosSnapshotCompatibility(o){if(!o.osVersion){e.warn("[iOS] Snapshot OS version missing; skipping compatibility check");return}let c=Oe(o.osVersion);if(!c)throw new t(`Snapshot manifest osVersion '${o.osVersion}' is not an iOS version. Expected an iOS version such as '26.5', 'iOS 26.5' or 'com.apple.CoreSimulator.SimRuntime.iOS-26-5'.`);let d=await this.getIosDeviceOsVersion();if(!d){e.warn("[iOS] Unable to read simulator OS version; skipping compatibility check");return}let m=Oe(d);if(!m)throw new t(`Simulator OS version '${d}' is not an iOS version. Expected an iOS version such as '26.5', 'iOS 26.5' or 'com.apple.CoreSimulator.SimRuntime.iOS-26-5'.`);if(c.major!==m.major)throw new t(`Snapshot iOS version '${o.osVersion}' is incompatible with simulator iOS '${d}'. Please restore on an iOS ${c.major}.x simulator.`)}async getIosDeviceOsVersion(){try{let o=await this.simulatorSnapshotBackend.getDeviceInfo();if(!o)return;let c=o.os_version;if(!c&&o.runtime){let m=(await this.simulatorSnapshotBackend.getRuntimes()).find((l)=>l.identifier===o.runtime);c=m?.version||m?.name}return c}catch(o){e.warn(`[iOS] Failed to read simulator OS version: ${o}`);return}}async getInstalledIosBundleIds(){try{let c=(await this.simulatorSnapshotBackend.listApps()).map((d)=>d.bundleId||d.CFBundleIdentifier).filter((d)=>typeof d==="string"&&d.length>0);return new Set(c)}catch(o){return e.warn(`[iOS] Failed to list installed apps: ${o}`),new Set}}async resolveIosSnapshotBundleIds(o,c){let d=c.appDataBackup?.backedUpPackages;if(d&&d.length>0)return d;try{return(await wr(o)).filter((l)=>l.isDirectory()).map((l)=>l.name)}catch(m){return e.warn(`[iOS] Failed to read app data bundles: ${m}`),[]}}}import{readFile as gt,stat as yt}from"fs/promises";import{isAbsolute as Ve,join as Be,resolve as wt}from"path";import{createHash as St}from"crypto";import{join as vt}from"path";var ve="userdata-qemu.img",Ne=(o)=>St("sha256").update(o).digest("hex");class ge{deps;constructor(o){this.deps=o}async currentIdentity(o){let c=await this.deps.avdDirectory.resolveAvdDirectory(o);if(!c)throw new t(`AVD '${o}' is not on this host`);let d=await this.deps.config.readConfig(o);if(!d?.systemImagePackage||!d.systemImagePath)throw new t(`AVD '${o}' lacks system-image metadata in config.ini`);let m=await this.deps.imageMetadata(d.systemImagePath),l=(await this.deps.emulatorVersion()).split(`
4
- `)[0]?.trim()??"";if(!l)throw new t("Could not read the emulator version for the fixture identity");let f=this.deps.userdataImage?.(c)??vt(c,ve),y=await this.deps.fileIdentity(f);return{avdName:o,systemImageId:`${d.systemImagePackage}:${Ne(m)}`,avdConfigHash:Ne(JSON.stringify(d.hardware??{})),emulatorVersion:l,userdataGeneration:y?`${y.ino}:${y.birthtimeMs}`:"none"}}}var Dt=1e4;function Ee(){let o=new Kr,c=new ii;return new ge({config:o,avdDirectory:o,imageMetadata:async(d)=>gt(Rt(d,Ve(d)?void 0:rl()?.androidHome),"utf8"),userdataImage:(d)=>It(d,E(g.EMULATOR_ARGS)),emulatorVersion:async()=>{let d=await c.executeCommand(["-version"],Dt);return d.error?"":d.stdout},fileIdentity:(d)=>At(d)})}async function At(o,c=yt){try{let d=await c(o);return{ino:d.ino,birthtimeMs:d.birthtimeMs}}catch(d){if(d.code!=="ENOENT")throw d;return e.debug(`[DeviceSnapshot] no userdata image at ${o}`),null}}function Rt(o,c){if(Ve(o))return Be(o,"source.properties");if(!c)throw new t("A snapshot fixture needs installed system-image metadata");return wt(c,o,"source.properties")}function It(o,c){let d=c?rR(c):[],m=d.indexOf("-data");if(m===-1)return Be(o,ve);let l=d[m+1];if(!l||l.startsWith("-"))throw new t("AUTOMOBILE_EMULATOR_ARGS passes -data without a path, so a fixture cannot tell which userdata image the emulator runs");return l}async function _e(o,c){let d=await c.currentIdentity(o.avdName),m=[];if(d.avdName!==o.avdName)m.push("avd-changed");if(d.systemImageId!==o.systemImageId)m.push("system-image-changed");if(d.avdConfigHash!==o.avdConfigHash)m.push("avd-config-changed");if(d.emulatorVersion!==o.emulatorVersion)m.push("emulator-version-changed");if(d.userdataGeneration!==o.userdataGeneration)m.push("userdata-wiped");return m.length===0?{valid:!0}:{valid:!1,reasons:m}}function bt(o,c){return o.platform==="android"&&o.deviceId.startsWith("emulator-")&&c}async function Fe(o,c){let{device:d,snapshotName:m,useVmSnapshot:l,fixture:f}=o;if(!f)return;if(!bt(d,l))throw new xu("fixture_requires_vm_snapshot",m,`Snapshot '${m}' cannot be a fixture: fixtures are Android emulator VM snapshots only. Capture on an emulator without useVmSnapshot: false.`);let y=await c.currentIdentity(d.name);return{identity:y,confirmUnchanged:async()=>(await Te(y,m,c),y)}}async function Te(o,c,d){let m=await _e(o,d);if(!m.valid)throw new xu("fixture_invalidated",c,`Fixture '${c}' no longer matches AVD '${o.avdName}' (${m.reasons.join(", ")}). Capture it again with fixture: true.`,m.reasons)}async function ze(o,c,d,m){let l=o.manifest.fixture;if(c.fixture&&!l)throw new xu("snapshot_not_a_fixture",o.snapshotName,`Snapshot '${o.snapshotName}' was not captured as a fixture. Capture it again with fixture: true.`);if(!l)return;if(c.fixture&&!d)throw new xu("fixture_requires_vm_snapshot",o.snapshotName,`Fixture '${o.snapshotName}' reloads its VM snapshot; restore it without useVmSnapshot: false.`);await Te(l,o.snapshotName,m)}function Pt(o,c){if(o.platform!==c.platform)return!1;if(c.platform==="ios")return o.deviceId===c.deviceId;let d=c.deviceId.startsWith("emulator-"),m=o.deviceId.startsWith("emulator-");if(!d)return o.deviceId===c.deviceId;return m&&o.deviceName===c.name||o.deviceId.length===0&&o.deviceName===c.name||o.deviceId===c.deviceId&&o.deviceName.length===0}function BU(o,c,d="restored"){if(Pt(o,c))return;let m=`${o.platform} device '${o.deviceName||"unknown"}' (${o.deviceId||"unknown ID"})`,l=`${c.platform} device '${c.name}' (${c.deviceId})`;throw new t(`Snapshot '${o.snapshotName}' belongs to ${m} and cannot be ${d==="restored"?"restored to":"deleted on"} ${l}. `+(d==="restored"?"Restore it on its original device or capture a snapshot for the target device.":"Delete it on its original device."))}function Le(o,c){return`${o}\x00${c}`}async function je(o,c){let d=new Set(o.filter((l)=>l.platform==="android"&&l.snapshotType==="vm").map((l)=>Le(l.deviceName,l.snapshotName))),m=[];try{for(let l of await c.listKnownAvdNames()){let f=await c.listAvdSnapshotDirectories(l);m.push(...f.filter((y)=>y.snapshotName!==Hp&&!d.has(Le(l,y.snapshotName))).map((y)=>({avdName:l,...y})))}}catch(l){e.warn(`[DeviceSnapshot] Failed to scan for orphaned in-AVD snapshots: ${l}`,l)}return{count:m.length,totalSizeBytes:m.reduce((l,f)=>l+(f.sizeBytes??0),0),unsizedCount:m.filter((l)=>l.sizeBytes===null).length,entries:m}}var j={prepareForIncarnationChange:async()=>{},invalidate:async()=>{},settleIncarnationChange:async()=>{}};function EJ(o){let c=j;return j=o,()=>{j=c}}var $U={prepareForIncarnationChange:(...o)=>j.prepareForIncarnationChange(...o),invalidate:(...o)=>j.invalidate(...o),settleIncarnationChange:(...o)=>j.settleIncarnationChange(...o)};var ye=null,xt="manifest.json",Ct=500,$t=50,Ot=64,Ue=!1,We=0;function re(o){if(Ue)return;Ue=!0;let c=We;o.timer.sleep(Ct).then(()=>{if(c!==We)return;Nt().catch((d)=>{e.warn("[DeviceSnapshot] Startup snapshot journal sweep failed",d)})}).catch((d)=>{e.warn("[DeviceSnapshot] Startup snapshot journal sweep delay failed",d)})}async function Nt(){let{snapshotStore:o}=await bi(),{entries:c,truncated:d}=await o.listLeftoverSnapshotJournals({maxEntries:$t,maxScopeDirectories:Ot}),m={recovered:0,failed:0,skippedLocked:0,truncated:d};for(let{snapshotName:l,options:f}of c){if(J.has(l)){m.skippedLocked++;continue}try{await G(l,()=>o.recoverSnapshotData(l,f)),m.recovered++}catch(y){e.warn(`[DeviceSnapshot] Failed to recover snapshot '${l}' in scope ${JSON.stringify(f??"flat")}`,y),m.failed++}}if(d)e.warn("[DeviceSnapshot] Snapshot journal sweep truncated; remaining artifacts are left to lazy recovery");if(m.recovered||m.failed||m.skippedLocked)e.info(`[DeviceSnapshot] Snapshot journal sweep: ${m.recovered} recovered, ${m.failed} failed, ${m.skippedLocked} locked`);return m}var J=new Map,Mt=new Map,Vt="archive-budget",Bt=new Map,kt="config-update",Et=new Map,H=new Map,we=new Map;function _t(o,c){let d=H.get(o)??new Map;d.set(c,(d.get(c)??0)+1),H.set(o,d)}function Ft(o,c){let d=H.get(o);if(!d)return;let m=d.get(c);if(m===void 0)return;if(m===1)d.delete(c);else d.set(c,m-1);if(d.size===0)H.delete(o)}function Tt(o){let c=H.get(o);return new Set([...c??new Map].filter(([,d])=>d>0).map(([d])=>d))}function zt(o,c){let d=Tt(o);if(c!==void 0)d.add(c);return d}async function Lt(o,c,d,m){if(!Ze(o,d))return m();_t(o.name,c);try{return await m()}finally{Ft(o.name,c)}}function Ze(o,c){return o.platform==="android"&&o.deviceId.startsWith("emulator-")&&c}function pe(o,c,d){let l=(o.get(c)??Promise.resolve()).then(d,d),f=l.then(()=>{return},()=>{return});return o.set(c,f),f.finally(()=>{if(o.get(c)===f)o.delete(c)}),l}function G(o,c){return pe(J,o,c)}function jt(o){return pe(Mt,Vt,o)}function Ut(o){return pe(Bt,kt,o)}function Wt(o,c){return pe(Et,o,c)}function ce(o){if(o.platform==="ios")return{platform:"ios",deviceId:o.deviceId};if(o.platform==="android"&&o.deviceId?.startsWith("emulator-")&&o.avdName)return{platform:"android",avdName:o.avdName};return}async function bi(){if(!ye)ye={snapshotRepository:new me,configRepository:aZ(),snapshotStore:new $f,avdSnapshots:new P6(new $f),timer:i,vmRetentionRetryBackoff:te({initialDelayMs:100,maxDelayMs:5000}),now:()=>new Date,createCaptureProvider:(o,c,d)=>new fe(o,{timer:c,store:d}),createRestoreProvider:(o,c,d)=>new Se(o,{timer:c,store:d}),deviceIncarnationInvalidator:$U,fixtureIdentityProbe:Ee()};return ye}function Ht(o){return{includeAppData:o.includeAppData,includeSettings:o.includeSettings,useVmSnapshot:o.useVmSnapshot,strictBackupMode:o.strictBackupMode,vmSnapshotTimeoutMs:o.vmSnapshotTimeoutMs,maxVmSnapshotsPerAvd:o.maxVmSnapshotsPerAvd,maxVmArchiveSizeMb:o.maxVmArchiveSizeMb,maxArchiveSizeMb:o.maxArchiveSizeMb}}function Jt(o,c){return{includeAppData:c.includeAppData??o.includeAppData,includeSettings:c.includeSettings??o.includeSettings,useVmSnapshot:c.useVmSnapshot??o.useVmSnapshot,strictBackupMode:c.strictBackupMode??o.strictBackupMode,vmSnapshotTimeoutMs:c.vmSnapshotTimeoutMs??o.vmSnapshotTimeoutMs,maxVmSnapshotsPerAvd:c.maxVmSnapshotsPerAvd??o.maxVmSnapshotsPerAvd,maxVmArchiveSizeMb:c.maxVmArchiveSizeMb??o.maxVmArchiveSizeMb,maxArchiveSizeMb:c.maxArchiveSizeMb??o.maxArchiveSizeMb}}function Gt(o){if(o===null)return"unknown";if(o<=0)return"0 B";let c=["B","KB","MB","GB"],d=Math.min(Math.floor(Math.log(o)/Math.log(1024)),c.length-1);return`${(o/Math.pow(1024,d)).toFixed(2)} ${c[d]}`}function Kt(o){return{snapshotName:o.snapshotName,restorable:!o.pendingReclaim,deviceId:o.deviceId,deviceName:o.deviceName,platform:o.platform,snapshotType:o.snapshotType,includeAppData:o.includeAppData,includeSettings:o.includeSettings,createdAt:o.createdAt,lastAccessedAt:o.lastAccessedAt,sizeBytes:o.sizeBytes,sizeLabel:Gt(o.sizeBytes),...o.pendingReclaim?{pendingReclaim:!0,...o.pendingReclaimReason===void 0?{}:{pendingReclaimReason:o.pendingReclaimReason}}:{}}}function B(o){return o.platform==="android"&&o.snapshotType==="vm"}async function qe(o,c,d,{avdSnapshots:m,pathOptions:l}){if(!B(c))return d.getSnapshotSizeBytes(o,l);let f=await m.measureVmSnapshotBytes(c.deviceName,o);if(f===null)e.warn(`[DeviceSnapshot] Could not measure the in-AVD payload of VM snapshot '${o}' for AVD '${c.deviceName}'; recording its size as unknown`);return f}function Yt(o){return typeof o==="object"&&o!==null&&o[le]===!0}async function He(o,c,d,{vmSnapshotTimeoutMs:m,context:l}){try{let f=await d.findLiveEmulatorSerial(o.name);if(!f){e.warn(`[DeviceSnapshot] Skipping cleanup of ${l} VM snapshot '${c}' because AVD '${o.name}' is not live`);return}let y=await d.deleteVmSnapshot(f,c,m,o.name);if(!y.reclaimed)e.warn(`[DeviceSnapshot] Could not clean up ${l} VM snapshot '${c}' on AVD '${o.name}': ${y.reason??"unknown reason"}`)}catch(f){e.warn(`[DeviceSnapshot] Failed to clean up ${l} VM snapshot '${c}' on AVD '${o.name}': ${r(f)}`,f)}}async function Qt({device:o,snapshotName:c,includeSettings:d,snapshotRepository:m,avdSnapshots:l,vmSnapshotTimeoutMs:f,now:y,error:D}){let w=`VM snapshot save was dispatched but capture failed: ${r(D)}`,A=null;try{A=await l.measureVmSnapshotBytes(o.name,c)}catch(I){e.warn(`[DeviceSnapshot] Failed to measure orphaned VM snapshot '${c}' on AVD '${o.name}': ${r(I)}`,I)}let R=y().toISOString();try{let I=await m.getSnapshot(c);if(I&&(!B(I)||I.deviceName!==o.name)){let x=B(I)?`it belongs to AVD '${I.deviceName}' (${I.deviceId})`:"it is a non-VM snapshot record";return e.warn(`[DeviceSnapshot] Same-named capture '${c}' failed on AVD '${o.name}' (${o.deviceId}); preserving the existing row because ${x}: ${w}`),await He(o,c,l,{vmSnapshotTimeoutMs:f,context:"failed same-named"}),!1}return await m.insertSnapshot({snapshotName:c,deviceId:o.deviceId,deviceName:o.name,platform:"android",snapshotType:"vm",includeAppData:!0,includeSettings:d,createdAt:R,lastAccessedAt:R,sizeBytes:A,pendingReclaim:!0,pendingReclaimReason:w,manifest:{snapshotName:c,timestamp:R,deviceId:o.deviceId,deviceName:o.name,platform:"android",snapshotType:"vm",includeAppData:!0,includeSettings:d}}),e.warn(`[DeviceSnapshot] Recorded pending reclaim for orphaned VM snapshot '${c}' on AVD '${o.name}': ${w}`),!0}catch(I){return e.warn(`[DeviceSnapshot] Failed to record pending reclaim for orphaned VM snapshot '${c}' on AVD '${o.name}': ${r(I)}`,I),await He(o,c,l,{vmSnapshotTimeoutMs:f,context:"unrecordable"}),!1}}function Xt(o){if(!o||typeof o!=="object")return!1;let c=o;return typeof c.snapshotName==="string"&&typeof c.timestamp==="string"&&typeof c.deviceId==="string"&&typeof c.deviceName==="string"&&(c.platform==="android"||c.platform==="ios")&&Zt(c.snapshotType)&&typeof c.includeAppData==="boolean"&&typeof c.includeSettings==="boolean"}function Zt(o){return o==="adb"||o==="vm"||o==="simctl"||o==="app_data"}function qt(o){if(!o||typeof o!=="object"||Array.isArray(o))return!1;let c=o;return["global","secure","system"].every((d)=>{let m=c[d];return m===void 0||typeof m==="object"&&m!==null&&!Array.isArray(m)})}function Je(o,c){if(c.snapshotName===o)return c;return{...c,snapshotName:o}}function en(o,c){return Number.isNaN(Date.parse(o))?c:o}async function Ge(o){try{let c=await Xe.readFile(o,"utf-8"),d=JSON.parse(c);if(!Xt(d))return e.warn(`[DeviceSnapshot] Manifest at '${o}' has an unexpected shape`),null;return d}catch(c){if(c.code!=="ENOENT")e.warn(`[DeviceSnapshot] Failed to read manifest at '${o}': ${c}`);return null}}async function tn(o,c,d){let m=await Ge(c.getMetadataPath(o,d));if(m)return Je(o,m);let l=ae.join(c.getSnapshotPathWithOptions(o,d),xt),f=await Ge(l);if(f)return Je(o,f);return null}async function on(o,c,d,m){let l=c.getSettingsPath(o,d),f;try{f=await Xe.readFile(l,"utf-8")}catch(D){if(D.code!=="ENOENT")e.warn(`[DeviceSnapshot] Failed to read settings for '${o}': ${D}`);return null}let y;try{y=JSON.parse(f)}catch(D){return e.warn(`[DeviceSnapshot] Settings file for '${o}' is not valid JSON: ${D}`),null}if(!qt(y))return e.warn(`[DeviceSnapshot] Settings file for '${o}' has an unexpected shape`),null;return{snapshotName:o,timestamp:m().toISOString(),deviceId:"",deviceName:d?.avdName??"",platform:"android",snapshotType:"adb",includeAppData:!1,includeSettings:!0,settings:y}}async function de(o,c,d,m){let l=await tn(o,c,d);if(l)return l;if(d?.platform==="ios")return null;return on(o,c,d,m)}async function se(o,c,d,{snapshotRepository:m,now:l,pathOptions:f}){let{avdSnapshots:y}=await bi(),D=await qe(o,c,d,{avdSnapshots:y,pathOptions:f}),w=l().toISOString(),A=en(c.timestamp,w),R={snapshotName:o,deviceId:c.deviceId,deviceName:c.deviceName,platform:c.platform,snapshotType:c.snapshotType,includeAppData:c.includeAppData,includeSettings:c.includeSettings,createdAt:A,lastAccessedAt:A,sizeBytes:D,manifest:c};try{return await m.insertSnapshot(R),R}catch(I){return e.warn(`[DeviceSnapshot] Failed to import legacy snapshot '${o}': ${I}`),m.getSnapshot(o)}}async function bK(o,c,d,m){let l=await de(o,c,void 0,m);if(l)return se(o,l,c,{snapshotRepository:d,now:m});let f=await an(o,c,m);if(!f)return null;return se(o,f.manifest,c,{snapshotRepository:d,now:m,pathOptions:f.pathOptions})}async function*et(o){for(let c of["android","ios"]){let d=ae.join(o.getBasePath(),c),m;try{m=await wr(d)}catch(l){if(l.code!=="ENOENT")e.warn(`[DeviceSnapshot] Failed to scan ${c} snapshot scope: ${l}`);continue}for(let l of m){if(!l.isDirectory())continue;yield{pathOptions:c==="ios"?{platform:"ios",deviceId:l.name}:{platform:"android",avdName:l.name},scopedDirPath:ae.join(d,l.name)}}}}async function an(o,c,d){for await(let{pathOptions:m}of et(c)){if(!await c.snapshotDirectoryExists(o,m))continue;let f=await de(o,c,m,d);if(f)return{manifest:f,pathOptions:m}}return null}async function sn(o,c,d,m){let l;try{l=await wr(c.getBasePath())}catch(y){if(y.code!=="ENOENT")e.warn(`[DeviceSnapshot] Failed to scan legacy snapshots: ${y}`);return!1}let f=!1;for(let y of l){if(!y.isDirectory())continue;let D=y.name;if(D.endsWith(Bd))continue;if(Ae(D))continue;if(m.has(D)||J.has(D))continue;let w=await de(D,c,void 0,d);if(!w)continue;if(await se(D,w,c,{snapshotRepository:o,now:d}))m.add(D),f=!0}return f}async function rn(o,c,d,m){let l=!1;for await(let{pathOptions:f,scopedDirPath:y}of et(c)){let D;try{D=await wr(y)}catch(w){if(w.code!=="ENOENT")e.warn(`[DeviceSnapshot] Failed to scan snapshots under ${y}: ${w}`);continue}for(let w of D){if(!w.isDirectory())continue;let A=w.name;if(A.endsWith(Bd))continue;if(m.has(A)||J.has(A))continue;let R=await de(A,c,f,d);if(!R)continue;if(await se(A,R,c,{snapshotRepository:o,now:d,pathOptions:f}))m.add(A),l=!0}}return l}async function pn(o,c,d,m){let l=await sn(o,c,d,m),f=await rn(o,c,d,m);return l||f}async function kp(){await KF([wE.ARCHIVE])}function cn(o){let c=_Z(o);if(c?.kind==="scope-root")throw new t(`Snapshot name '${o}' is reserved. Please choose a different name.`);if(c?.kind==="suffix")throw new t(`Snapshot name '${o}' ends with the reserved '${Bd}' suffix (case-insensitively). Please choose a different name.`)}function dn(o){if(o.trim().toLowerCase()===Hp.toLowerCase())throw new t(`Snapshot name '${Hp}' is reserved for the emulator's own quick-boot snapshot and cannot be used as an AutoMobile capture name.`)}async function tt(o,c){let{snapshotRepository:d,avdSnapshots:m}=await bi(),l=o.deviceName,f=await m.findLiveEmulatorSerial(l);if(f)await d.updateSnapshot(o.snapshotName,{pendingReclaim:!0,pendingReclaimReason:`reclaiming the in-AVD payload on AVD '${l}'`});let y=f?await m.deleteVmSnapshot(f,o.snapshotName,c,l):{reclaimed:!1,reason:`emulator for AVD '${l}' is not running; in-AVD snapshot left in place`};if(y.reclaimed)return!0;return e.warn(`[DeviceSnapshot] Could not reclaim the in-AVD payload of VM snapshot '${o.snapshotName}': ${y.reason}. Keeping the record so the reclaim can be completed when that emulator is next seen live.`),await d.updateSnapshot(o.snapshotName,{pendingReclaim:!0,pendingReclaimReason:y.reason}),!1}var Ke=Symbol("snapshot-record-superseded");function nt(o,c){return o.deviceId===c.deviceId&&o.deviceName===c.deviceName&&o.snapshotType===c.snapshotType&&o.createdAt===c.createdAt&&o.sizeBytes===c.sizeBytes&&o.manifest.timestamp===c.manifest.timestamp}async function UU(o,c){if(J.has(o.snapshotName))return e.debug(`[DeviceSnapshot] Skipping reclaim of '${o.snapshotName}': a capture or restore of that name is in flight`),Ke;return G(o.snapshotName,async()=>{let{snapshotRepository:d}=await bi(),m=await d.getSnapshot(o.snapshotName);if(!m||!nt(m,o))return e.debug(`[DeviceSnapshot] Skipping reclaim of '${o.snapshotName}': the record was replaced after it was selected`),Ke;return c()})}async function un(o,c,d){if(!(d instanceof xu)||d.code!=="fixture_invalidated")throw d;let m=(!B(o)||await tt(o,c))&&await GO(o);throw new xu(d.code,d.snapshotName,`${d.message} ${m?"It was removed.":"Its in-AVD snapshot could not be reclaimed now and is pending."}`,d.reasons)}async function KO(o,c){return await UU(o,async()=>{if(B(o)&&!await tt(o,c))return!1;return GO(o)})===!0}async function GO(o){let{snapshotStore:c}=await bi(),d=ce({platform:o.platform,deviceId:o.deviceId,avdName:o.deviceName}),m=[d];if(d?.platform==="android"&&!Ae(o.snapshotName))m.push(void 0);for(let l of m)try{await c.recoverSnapshotData(o.snapshotName,l)}catch(f){e.warn(`[DeviceSnapshot] Recovery before deletion failed for '${o.snapshotName}' in scope ${JSON.stringify(l??"flat")}`,f);let y=await c.discardSnapshotArtifacts(o.snapshotName,l);if(y.length>0)e.warn(`[DeviceSnapshot] Snapshot artifacts left behind after deletion: ${y.join(", ")}`)}return mn(o)}async function mn(o){let{snapshotRepository:c}=await bi();return await it(o),c.deleteSnapshot(o.snapshotName)}async function it(o,c={}){let{snapshotStore:d}=await bi(),m=ce({platform:o.platform,deviceId:o.deviceId,avdName:o.deviceName});if(d.getSnapshotPathWithOptions(o.snapshotName,m)===c.preserveSnapshotPath)return;if(await d.deleteSnapshotData(o.snapshotName,m),m?.platform==="android"&&!Ae(o.snapshotName)&&d.getSnapshotPath(o.snapshotName)!==c.preserveSnapshotPath)await d.deleteSnapshotData(o.snapshotName)}function Ae(o){return o===KH||o===jH}async function hn(o){let{snapshotRepository:c,avdSnapshots:d}=await bi(),m=[];for(let l of o){if(l.sizeBytes!==null||!B(l)){m.push(l);continue}let f=await G(l.snapshotName,async()=>{let y=await d.measureVmSnapshotBytes(l.deviceName,l.snapshotName),D=await c.getSnapshot(l.snapshotName);if(!D||!nt(D,l)){e.warn(`[DeviceSnapshot] Concurrent replacement detected while re-measuring VM snapshot '${l.snapshotName}'; skipping stale size update.`);return}if(y===null)return D;try{return await c.updateSnapshot(l.snapshotName,{sizeBytes:y}),{...D,sizeBytes:y}}catch(w){return e.warn(`[DeviceSnapshot] Failed to record the re-measured size of VM snapshot '${l.snapshotName}': ${r(w)}`,w),D}});if(f)m.push(f)}return m}async function De(o){return jt(async()=>{let c=Math.max(0,Math.floor(o*1024*1024)),{snapshotRepository:d}=await bi(),{vmSnapshotTimeoutMs:m}=await Ac(),l=(await d.listSnapshots({orderByLastAccessed:"asc"})).filter((w)=>w.snapshotType!=="vm"),f=l.reduce((w,A)=>w+(A.sizeBytes??0),0),y=l.filter((w)=>w.sizeBytes===null).length;if(y>0)e.warn(`[DeviceSnapshot] ${y} snapshot record(s) have an unknown size and are excluded from the non-VM archive budget`);if(c===0||f<=c)return{evictedSnapshotNames:[],currentSizeBytes:f,maxSizeBytes:c,unsizedCount:y};let D=[];for(let w of l){if(f<=c)break;try{if(await KO(w,m))D.push(w.snapshotName),f-=w.sizeBytes??0}catch(A){e.warn(`[DeviceSnapshot] Failed to evict snapshot ${w.snapshotName}: ${A}`)}}if(f>c)e.warn(`[DeviceSnapshot] Non-VM archive size ${f} bytes still exceeds limit ${c} bytes after eviction`);if(D.length>0)e.warn(`[DeviceSnapshot] Evicted ${D.length} snapshot(s) under the app_data byte budget (maxArchiveSizeMb=${o}): ${D.join(", ")}`),await kp();return{evictedSnapshotNames:D,currentSizeBytes:f,maxSizeBytes:c,unsizedCount:y}})}function ln(o){if(o.maxVmArchiveSizeMb===void 0)return Number.POSITIVE_INFINITY;return Math.max(0,Math.floor(o.maxVmArchiveSizeMb*1024*1024))}function ot(o){return o.snapshots.reduce((c,d)=>c+(d.sizeBytes??0),0)}function fn(o,c,d){return o!==void 0&&c.maxVmArchiveSizeMb!==void 0&&(o.sizeBytes??0)>d}function Sn(o,c){return o.snapshots.find((d)=>!c.has(d.snapshotName)&&!o.failedNames.has(d.snapshotName))}async function Ye(o,c,d,m){let l=Sn(o,d);if(!l)return"no-candidate";try{if(!await KO(l,c.vmSnapshotTimeoutMs)){let{snapshotRepository:f}=await bi(),y=await f.getSnapshot(l.snapshotName);if(y?.pendingReclaim)return"deferred";if(!y||y.deviceName!==l.deviceName)return o.snapshots=o.snapshots.filter((D)=>D.snapshotName!==l.snapshotName),"removed-concurrently";return o.failedNames.add(l.snapshotName),"failed"}return o.snapshots=o.snapshots.filter((f)=>f.snapshotName!==l.snapshotName),o.evictedSnapshotNames.push(l.snapshotName),(m==="count"?o.countEvictedSnapshotNames:o.byteEvictedSnapshotNames).push(l.snapshotName),"evicted"}catch(f){return e.warn(`[DeviceSnapshot] Failed to evict snapshot ${l.snapshotName}: ${f}`),o.failedNames.add(l.snapshotName),"failed"}}async function vn(o){let{snapshotRepository:c}=await bi(),d=await hn((await c.listSnapshots({snapshotType:"vm"})).filter((m)=>m.deviceName===o&&!m.pendingReclaim&&!m.manifest.fixture));return d.sort((m,l)=>m.lastAccessedAt.localeCompare(l.lastAccessedAt)),{snapshots:d,evictedSnapshotNames:[],countEvictedSnapshotNames:[],byteEvictedSnapshotNames:[],failedNames:new Set}}async function gn(o,c,d,m){while(o.snapshots.length>c.maxVmSnapshotsPerAvd){let l=await Ye(o,c,d,"count");if(l==="deferred"||l==="no-candidate")return}while(ot(o)>m){let l=await Ye(o,c,d,"byte");if(l==="deferred"||l==="no-candidate")return}}function wn(o,c,d){if(o.evictedSnapshotNames.length===0)return;e.warn(`[DeviceSnapshot] Evicted ${o.evictedSnapshotNames.length} VM snapshot(s) for AVD '${c}': ${o.countEvictedSnapshotNames.length} by the per-AVD count retention (maxVmSnapshotsPerAvd=${d.maxVmSnapshotsPerAvd}), ${o.byteEvictedSnapshotNames.length} by the VM byte budget (maxVmArchiveSizeMb=${d.maxVmArchiveSizeMb??"unlimited"}): `+o.evictedSnapshotNames.join(", "))}async function Dn(o,c,d,{currentSizeBytes:m,maxSizeBytes:l,excludeFromEviction:f}){let y=d.snapshots.length>c.maxVmSnapshotsPerAvd||c.maxVmArchiveSizeMb!==void 0&&m>l;if(d.failedNames.size===0||!y){we.delete(o);return}let{timer:D,vmRetentionRetryBackoff:w}=await bi(),A=(we.get(o)??0)+1;we.set(o,A),D.setTimeout(()=>{Ac().then((R)=>Re(o,R,{excludeFromEviction:f})).catch((R)=>{e.warn(`[DeviceSnapshot] Deferred VM retention retry for AVD '${o}' failed: `+r(R),R)})},w.delayForAttempt(A))}async function Re(o,c,d={}){return Wt(o,async()=>{let m=await vn(o),l=zt(o,d.excludeFromEviction),f=ln(c),y=m.snapshots.filter((x)=>x.sizeBytes===null).length;if(y>0)e.warn(`[DeviceSnapshot] ${y} VM snapshot record(s) have an unknown size and are excluded from the VM retention byte budget`);let D=d.excludeFromEviction?m.snapshots.find((x)=>x.snapshotName===d.excludeFromEviction):void 0,w=fn(D,c,f);if(!w)await gn(m,c,l,f);let A=d.excludeFromEviction?m.snapshots.find((x)=>x.snapshotName===d.excludeFromEviction):void 0,R=d.excludeFromEviction!==void 0&&A===void 0,I=ot(m);if(c.maxVmArchiveSizeMb!==void 0&&I>f)e.warn(`[DeviceSnapshot] VM snapshots for AVD '${o}' total ${I} bytes still exceed limit ${f} bytes after retention`);if(wn(m,o,c),m.evictedSnapshotNames.length>0)await kp();return await Dn(o,c,m,{currentSizeBytes:I,maxSizeBytes:f,excludeFromEviction:d.excludeFromEviction}),{evictedSnapshotNames:m.evictedSnapshotNames,currentSizeBytes:I,maxSizeBytes:f,unsizedCount:y,cannotFitExcluded:w,excludedSnapshotMissing:R,excludedSnapshotRecord:A??null,excludedSnapshotSizeBytes:A?.sizeBytes??null,countEvictedSnapshotNames:m.countEvictedSnapshotNames,byteEvictedSnapshotNames:m.byteEvictedSnapshotNames}})}async function Qe(o){let{snapshotRepository:c}=await bi(),d=await c.listSnapshots({snapshotType:"vm"}),m=[...new Set(d.map((f)=>f.deviceName))],l=await Promise.all(m.map((f)=>Re(f,o)));return{evictedSnapshotNames:l.flatMap((f)=>f.evictedSnapshotNames),currentSizeBytes:l.reduce((f,y)=>f+y.currentSizeBytes,0),maxSizeBytes:o.maxVmArchiveSizeMb===void 0?0:o.maxVmArchiveSizeMb*1024*1024,unsizedCount:l.reduce((f,y)=>f+y.unsizedCount,0)}}async function An(o){if(o.platform!=="android"||!o.deviceId.startsWith("emulator-")||!o.name)return[];let{snapshotRepository:c,avdSnapshots:d}=await bi(),m;try{m=await c.listSnapshots({pendingReclaim:!0,snapshotType:"vm"})}catch(y){return e.warn(`[DeviceSnapshot] Failed to read pending VM snapshot reclaims: ${y}`,y),[]}let l=[],{vmSnapshotTimeoutMs:f}=await Ac();for(let y of m.filter((D)=>D.deviceName===o.name))if(await UU(y,async()=>{let w=await d.deleteVmSnapshot(o.deviceId,y.snapshotName,f,y.deviceName);if(!w.reclaimed)return e.warn(`[DeviceSnapshot] Pending reclaim of VM snapshot '${y.snapshotName}' still incomplete: ${w.reason}`),!1;return GO(y)})===!0)l.push(y.snapshotName);if(l.length>0)e.info(`[DeviceSnapshot] Completed ${l.length} pending VM snapshot reclaim(s) for AVD '${o.name}'`),await kp();return l}async function Rn(o,c,d){let{snapshotRepository:m,avdSnapshots:l}=await bi(),f=await m.getSnapshot(o);if(!f?.pendingReclaim||!B(f)||f.deviceName===c)return;let y=await l.findLiveEmulatorSerial(f.deviceName),D=y?await l.deleteVmSnapshot(y,o,d,f.deviceName):{reclaimed:!1,reason:`emulator for AVD '${f.deviceName}' is not running`};if(D.reclaimed){e.info(`[DeviceSnapshot] Reclaimed the pending in-AVD payload of '${o}' on AVD '${f.deviceName}' before reusing that name on AVD '${c}'`);return}e.warn(`[DeviceSnapshot] Capturing '${o}' on AVD '${c}' overwrites the only record of a pending reclaim for AVD '${f.deviceName}' (${D.reason}). Its in-AVD payload stays on disk and is reported as an orphan until it is removed manually (see docs/using/test-prep-tools.md).`)}async function Ac(){let{configRepository:o}=await bi(),c=await o.getConfig();if(c)return L(c);return L(M.getDeviceSnapshotDefaults())}async function IJ(o){return Ut(async()=>{let{configRepository:c,timer:d}=await bi();if(re({timer:d}),o===null){await c.clearConfig();let w=L(M.getDeviceSnapshotDefaults()),[A,R]=await Promise.all([De(w.maxArchiveSizeMb),Qe(w)]);return{config:w,evictedSnapshotNames:[...A.evictedSnapshotNames,...R.evictedSnapshotNames]}}let m=await Ac(),l=Jt(Ht(m),o),f=L(l);await c.setConfig(f);let[y,D]=await Promise.all([De(f.maxArchiveSizeMb),Qe(f)]);return{config:f,evictedSnapshotNames:[...y.evictedSnapshotNames,...D.evictedSnapshotNames]}})}async function In(o,c,d,m){let l=await De(d.maxArchiveSizeMb);if(o.manifest.snapshotType!=="vm")return l.evictedSnapshotNames;let f=await Re(c.name,d,o.manifest.fixture?{}:{excludeFromEviction:o.snapshotName});if(f.excludedSnapshotMissing)throw new t(`Snapshot '${o.snapshotName}' was removed by a concurrent VM retention sweep before capture could complete; capture did not succeed`);if(!f.cannotFitExcluded)return[...l.evictedSnapshotNames,...f.evictedSnapshotNames];if(m)throw await kp(),new t(`Snapshot '${o.snapshotName}' recapture exceeds the configured maxVmArchiveSizeMb budget for AVD '${c.name}'. The emulator's destructive snapshot save already irreversibly overwrote the prior payload under this name, so the new oversized capture was kept rather than deleting the only remaining usable snapshot.`);let y=f.excludedSnapshotRecord;if(y){if(!await KO(y,d.vmSnapshotTimeoutMs))throw await kp(),new t(`Snapshot '${o.snapshotName}' exceeds maxVmArchiveSizeMb but its VM payload could not be reclaimed; it remains tracked for a later reclaim`)}let D=Math.floor((d.maxVmArchiveSizeMb??0)*1024*1024);throw new t(`Snapshot '${o.snapshotName}' could not be captured because its VM payload (${f.excludedSnapshotSizeBytes??"unknown"} bytes) exceeds the configured maxVmArchiveSizeMb budget for AVD '${c.name}' (${D} bytes)`)}async function bn(o,c,d,m){if(Bf(c),cn(c),Ze(o,d))dn(c);let{fixtureIdentityProbe:l}=await bi();return Fe({device:o,snapshotName:c,useVmSnapshot:d,fixture:m.fixture},l)}async function _J(o,c){let{snapshotRepository:d,snapshotStore:m,avdSnapshots:l,timer:f,now:y,createCaptureProvider:D}=await bi();re({timer:f});let w=await Ac(),A=c.useVmSnapshot??w.useVmSnapshot,R=c.snapshotName??m.generateSnapshotName(o.name),I=await bn(o,R,A,c);await An(o);let x=ce({platform:o.platform,deviceId:o.deviceId,avdName:o.name}),O={...w,includeAppData:c.includeAppData??w.includeAppData,includeSettings:c.includeSettings??w.includeSettings,useVmSnapshot:A,strictBackupMode:c.strictBackupMode??w.strictBackupMode,vmSnapshotTimeoutMs:c.vmSnapshotTimeoutMs??w.vmSnapshotTimeoutMs};return Lt(o,R,O.useVmSnapshot,async()=>{let _=!1,U=await G(R,async()=>{let N=await d.getSnapshot(R);_=N!==null&&N.deviceName===o.name,await Rn(R,o.name,O.vmSnapshotTimeoutMs);let ue=D(o,f,m),z,Q=!1;try{z=await m.replaceSnapshotData(R,x,async()=>{let P=await ue.capture({snapshotName:R,includeAppData:O.includeAppData,includeSettings:O.includeSettings,useVmSnapshot:O.useVmSnapshot,strictBackupMode:O.strictBackupMode,vmSnapshotTimeoutMs:O.vmSnapshotTimeoutMs,appBundleIds:c.appBundleIds});Q=P.manifest.snapshotType==="vm",P.manifest.fixture??=await I?.confirmUnchanged();let W=await qe(R,P.manifest,m,{avdSnapshots:l,pathOptions:x}),X=P.manifest.timestamp;return await d.insertSnapshot({snapshotName:P.snapshotName,deviceId:P.manifest.deviceId,deviceName:P.manifest.deviceName,platform:P.manifest.platform,snapshotType:P.manifest.snapshotType,includeAppData:P.manifest.includeAppData,includeSettings:P.manifest.includeSettings,createdAt:X,lastAccessedAt:X,sizeBytes:W,manifest:P.manifest}),P})}catch(P){if(o.platform==="android"&&o.deviceId.startsWith("emulator-")&&(Yt(P)||Q)){if(await Qt({device:o,snapshotName:R,includeSettings:O.includeSettings,snapshotRepository:d,avdSnapshots:l,vmSnapshotTimeoutMs:O.vmSnapshotTimeoutMs,now:y,error:P}))await kp()}throw P}if(N)try{await it(N,{preserveSnapshotPath:m.getSnapshotPathWithOptions(R,x)})}catch(P){e.warn(`[DeviceSnapshot] Failed to retire prior archive data for '${R}': ${r(P)}`,P)}return z}),T=await Ac(),K={...O,maxVmSnapshotsPerAvd:T.maxVmSnapshotsPerAvd,maxArchiveSizeMb:T.maxArchiveSizeMb,maxVmArchiveSizeMb:T.maxVmArchiveSizeMb},Y=await In(U,o,K,_);return await kp(),{result:U,evictedSnapshotNames:Y}})}async function xJ(o,c){let{snapshotRepository:d,snapshotStore:m,timer:l,now:f,createRestoreProvider:y,deviceIncarnationInvalidator:D,fixtureIdentityProbe:w}=await bi();return re({timer:l}),Bf(c.snapshotName),G(c.snapshotName,async()=>{let A=await d.getSnapshot(c.snapshotName);if(!A)A=await bK(c.snapshotName,m,d,f);if(!A)throw new t(`Snapshot '${c.snapshotName}' not found`);if(BU(A,o),A.pendingReclaim){let C=A.pendingReclaimReason?`: ${A.pendingReclaimReason}`:"";throw new t(`Snapshot '${A.snapshotName}' is awaiting reclaim after a failed capture${C}`)}let R=await Ac(),I=c.useVmSnapshot??R.useVmSnapshot,x=c.vmSnapshotTimeoutMs??R.vmSnapshotTimeoutMs;await ze(A,c,I,w).catch((C)=>un(A,x,C));try{await m.recoverSnapshotData(A.snapshotName,ce({platform:A.platform,deviceId:A.deviceId,avdName:A.deviceName}))}catch(C){throw e.warn(`[DeviceSnapshot] Failed to recover snapshot '${A.snapshotName}' before restore: ${r(C)}`,C),u(C,`Failed to recover snapshot '${A.snapshotName}' before restore`)}let O=y(o,l,m),_=!1,U=!1,T=!1,K=!1,Y=!1,N={},ue=async()=>{if(_||o.platform!=="android"||!o.deviceId.startsWith("emulator-")||A.manifest.snapshotType!=="vm"||!I)return;_=!0,await D.prepareForIncarnationChange(o)},z=async()=>{if(U||o.platform!=="android"||!o.deviceId.startsWith("emulator-")||A.manifest.snapshotType!=="vm"||!I)return;U=!0;let C=await D.invalidate(o);if(typeof C==="string")N={deviceSessionUuid:C}},Q=async()=>{T=!0,await z()},P=async()=>{if(!_||K)return;K=!0,await D.settleIncarnationChange(o,{ready:Y})},W;try{W=await O.restore({snapshotName:A.snapshotName,manifest:A.manifest,useVmSnapshot:I,vmSnapshotTimeoutMs:x,onBeforeVmSnapshotLoad:ue,onVmSnapshotLoaded:Q}),Y=!0,await z()}catch(C){let at=C instanceof Error&&C.isDefinitiveVmSnapshotLoadFailure===!0;if(T||!at)await z();throw u(C,`Failed to restore snapshot '${A.snapshotName}'`)}finally{await P()}let X=f().toISOString();return await d.touchSnapshot(A.snapshotName,X),await kp(),{result:W,manifest:A.manifest,...N}})}async function CJ(){let{snapshotRepository:o,snapshotStore:c,now:d,timer:m}=await bi();re({timer:m});let l=await o.listSnapshots({orderByCreatedAt:"desc"}),f=new Set(l.map((I)=>I.snapshotName)),D=await pn(o,c,d,f)?await o.listSnapshots({orderByCreatedAt:"desc"}):l,w=D.map(Kt),A=D.reduce((I,x)=>I+(x.sizeBytes??0),0),R=await je(D,(await bi()).avdSnapshots);return{snapshots:w,count:w.length,totalSizeBytes:A,unsizedCount:D.filter((I)=>I.sizeBytes===null).length,pendingReclaimCount:D.filter((I)=>I.pendingReclaim).length,orphanedAvdSnapshots:R}}
5
- export{wE,BU,EJ,$U,bi,bK,kp,UU,KO,GO,Ac,IJ,_J,xJ,CJ};
6
-
7
- //# debugId=849EC12827E1A41F64756E2164756E21
@@ -1,4 +0,0 @@
1
- // @bun
2
- import{Nt}from"./chunk-32jpxz2y.js";import"./chunk-z8t0v07j.js";import"./chunk-mf9spd4g.js";export{Nt as defaultLockOwnerGenerationProbe};
3
-
4
- //# debugId=226DD93EAC4B6ED664756E2164756E21
@@ -1,4 +0,0 @@
1
- // @bun
2
- import{v2,b2,S2}from"./chunk-r0f1q783.js";import"./chunk-6d3mmqxt.js";import"./chunk-32jpxz2y.js";import"./chunk-ggtd5x5a.js";import"./chunk-z8t0v07j.js";import"./chunk-mf9spd4g.js";export{v2 as getWebRtcStreamSocketPath,b2 as startWebRtcStreamSocketServer,S2 as stopWebRtcStreamSocketServer};
3
-
4
- //# debugId=5D8C2223B702385164756E2164756E21
@@ -1,5 +0,0 @@
1
- // @bun
2
- var EV=process.ppid;
3
- export{EV};
4
-
5
- //# debugId=44ABC48DFE511DFE64756E2164756E21
@@ -1,5 +0,0 @@
1
- // @bun
2
- import{g,E}from"./chunk-mf9spd4g.js";import{t}from"./chunk-9rkfyt6q.js";import{existsSync as c}from"fs";var CP=g.IOS_SCREEN_CAPTURE_HELPER.name,l=g.IOS_SCREEN_CAPTURE_HELPER.legacyName;function Ub(r=process.env){return E(g.IOS_SCREEN_CAPTURE_HELPER,r)}function Hb(r,n={}){let o=n.env??process.env,s=n.exists??c,a=[r,Ub(o)].filter((e)=>Boolean(e));for(let e of a)if(s(e))return e;throw new t(`No executable screen-capture-helper was found at the configured path. Set ${CP} to the absolute path of a local development build.`)}
3
- export{CP,Ub,Hb};
4
-
5
- //# debugId=74623408091C66AE64756E2164756E21
@@ -1,4 +0,0 @@
1
- // @bun
2
- import{Z0,Kl,oc,Q0,Vd,Tq,kq,poe}from"./chunk-0rjm4nx7.js";import"./chunk-4fgdhcwx.js";import"./chunk-6d3mmqxt.js";import"./chunk-h3n4adc6.js";import"./chunk-32jpxz2y.js";import"./chunk-79q5xsdc.js";import"./chunk-ggtd5x5a.js";import"./chunk-z8t0v07j.js";import"./chunk-mf9spd4g.js";export{poe as ClearText,Z0 as DEVICE_TIMESTAMP_SECOND_GRANULARITY_MARGIN_MS,Tq as clearTextWithKeyEvents,Vd as getFocusedTextField,Q0 as getFocusedTextFieldIdentity,Kl as getFocusedTextLength,oc as hasFocusedTextInput,kq as verifyKeyEventClear};
3
-
4
- //# debugId=2B783D075124E76364756E2164756E21
@@ -1,4 +0,0 @@
1
- // @bun
2
- import{KB,goe,ke,BD,z3,j3,K3,G3,up}from"./chunk-32jpxz2y.js";import"./chunk-z8t0v07j.js";import"./chunk-mf9spd4g.js";export{goe as DATABASE_STARTUP_MIGRATION_FAILURE,KB as SQLITE_BUSY_TIMEOUT_MS,j3 as awaitInFlightMigrations,G3 as closeDatabase,BD as ensureMigrations,ke as getDatabase,up as getDatabasePath,z3 as getMigrationsError,K3 as refusedDatabaseAccessCountAfterShutdownClose};
3
-
4
- //# debugId=A4B2BC7AE91ADD5364756E2164756E21