@kaeawc/auto-mobile 0.0.92 → 0.0.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-info.json +12 -12
- package/dist/schemas/test-plan.schema.json +370 -52
- package/dist/src/{chunk-jhnbfj19.js → chunk-00167wan.js} +5 -5
- package/dist/src/chunk-0jrrsnc9.js +6 -0
- package/dist/src/chunk-0n6swkwg.js +5 -0
- package/dist/src/chunk-0qsy1qsx.js +57 -0
- package/dist/src/chunk-11m8wj8j.js +237 -0
- package/dist/src/{chunk-4pfftt07.js → chunk-1p7xf5kb.js} +3 -3
- package/dist/src/chunk-23p5f095.js +4 -0
- package/dist/src/{chunk-a4k9rt7z.js → chunk-26k317v5.js} +3 -3
- package/dist/src/chunk-284ptqa4.js +7 -0
- package/dist/src/chunk-28re4xrg.js +4 -0
- package/dist/src/chunk-2f9rkmhx.js +5 -0
- package/dist/src/chunk-2fxdh48t.js +4 -0
- package/dist/src/chunk-2tbdrbt6.js +4 -0
- package/dist/src/chunk-2tqzq5qh.js +971 -0
- package/dist/src/chunk-32gvv9b4.js +21 -0
- package/dist/src/chunk-3f3t1x97.js +8 -0
- package/dist/src/chunk-3fspkbc7.js +4 -0
- package/dist/src/chunk-3qwrzxh0.js +11 -0
- package/dist/src/chunk-3sy6ahhz.js +26 -0
- package/dist/src/chunk-3vg455e6.js +4 -0
- package/dist/src/chunk-3xkpk44w.js +5 -0
- package/dist/src/chunk-3y6eykz9.js +4 -0
- package/dist/src/chunk-49bsqdx3.js +4 -0
- package/dist/src/chunk-4hw3665t.js +42 -0
- package/dist/src/chunk-58wzr3mt.js +5 -0
- package/dist/src/chunk-5d2hft6c.js +5 -0
- package/dist/src/chunk-5snsn9cf.js +4 -0
- package/dist/src/chunk-5tm9mn47.js +54 -0
- package/dist/src/chunk-5zc77a5t.js +4 -0
- package/dist/src/chunk-64j0majr.js +19 -0
- package/dist/src/chunk-65y8v4td.js +17 -0
- package/dist/src/chunk-6awz7vhq.js +5 -0
- package/dist/src/{chunk-stfzjr9y.js → chunk-6bznss4t.js} +5 -5
- package/dist/src/chunk-6ep7f5ge.js +4 -0
- package/dist/src/{chunk-0dfnyfkh.js → chunk-6wt9rgjf.js} +3 -3
- package/dist/src/chunk-6xmss8er.js +8 -0
- package/dist/src/chunk-710rxz9y.js +5 -0
- package/dist/src/chunk-7cs2da62.js +5 -0
- package/dist/src/chunk-7g103b54.js +4 -0
- package/dist/src/chunk-7j5vj4pa.js +4 -0
- package/dist/src/chunk-7rz9898k.js +5 -0
- package/dist/src/chunk-7tw8x05v.js +4 -0
- package/dist/src/chunk-7zy586cb.js +4 -0
- package/dist/src/{chunk-r0f1q783.js → chunk-8037tzzj.js} +3 -3
- package/dist/src/chunk-84nanf8s.js +5 -0
- package/dist/src/{chunk-950qcq1e.js → chunk-8g1922rp.js} +4 -4
- package/dist/src/chunk-8gvwcv2p.js +4 -0
- package/dist/src/{chunk-sz1a7p43.js → chunk-8ph29g99.js} +1 -1
- package/dist/src/chunk-8thrmfat.js +4 -0
- package/dist/src/chunk-8zgzzs7k.js +78 -0
- package/dist/src/chunk-97b1zmaq.js +4 -0
- package/dist/src/chunk-9fth9ayh.js +4 -0
- package/dist/src/chunk-9j6anhjr.js +4 -0
- package/dist/src/{chunk-w7zsh13a.js → chunk-aabchzxk.js} +4 -4
- package/dist/src/{chunk-wry6skrm.js → chunk-ayp07wbb.js} +1 -1
- package/dist/src/chunk-bfjwqk8q.js +4 -0
- package/dist/src/{chunk-jdqvcq0a.js → chunk-bfw6125s.js} +3 -3
- package/dist/src/chunk-bnhscm2n.js +4 -0
- package/dist/src/chunk-bxmsax22.js +5 -0
- package/dist/src/chunk-c1vs4g1n.js +4 -0
- package/dist/src/chunk-ct3e7yng.js +4 -0
- package/dist/src/{chunk-8en08r7q.js → chunk-cyy71ggq.js} +3 -3
- package/dist/src/chunk-ddzkz92z.js +4 -0
- package/dist/src/chunk-dgrbdpb7.js +9 -0
- package/dist/src/chunk-drdz8hee.js +5 -0
- package/dist/src/chunk-e98dqnc9.js +145 -0
- package/dist/src/chunk-eersndy7.js +5 -0
- package/dist/src/chunk-eggq53ks.js +4 -0
- package/dist/src/chunk-f2dya7cs.js +4 -0
- package/dist/src/chunk-fbakd6cw.js +4 -0
- package/dist/src/chunk-fgb98zjj.js +5 -0
- package/dist/src/chunk-fmpad823.js +5 -0
- package/dist/src/{chunk-v90es00d.js → chunk-g04bwyj3.js} +2 -2
- package/dist/src/chunk-g0xr8zw0.js +4 -0
- package/dist/src/chunk-g3rjs80x.js +4 -0
- package/dist/src/chunk-g78rtrfv.js +4 -0
- package/dist/src/{chunk-r20pe1nv.js → chunk-g7tmjbkt.js} +3 -3
- package/dist/src/chunk-gabgv3y5.js +4 -0
- package/dist/src/chunk-gmr45m8f.js +4 -0
- package/dist/src/chunk-gsyfebqj.js +4 -0
- package/dist/src/chunk-h5rpn9wr.js +247 -0
- package/dist/src/chunk-hb1x7v55.js +4 -0
- package/dist/src/chunk-hrfytkxh.js +168 -0
- package/dist/src/chunk-j4yjzbak.js +4 -0
- package/dist/src/chunk-jd6a5v6p.js +5 -0
- package/dist/src/chunk-jh6vhqzx.js +5 -0
- package/dist/src/chunk-kn5spq15.js +4 -0
- package/dist/src/{chunk-w2mwa0jk.js → chunk-m94qs0f0.js} +2 -2
- package/dist/src/chunk-mjrps0ac.js +7 -0
- package/dist/src/chunk-n03dmn5q.js +5 -0
- package/dist/src/chunk-n72qhwd9.js +4 -0
- package/dist/src/{chunk-km0dy5vc.js → chunk-ndt1ccxm.js} +9 -9
- package/dist/src/chunk-nr6y0n4y.js +5 -0
- package/dist/src/chunk-pcsen2vs.js +4 -0
- package/dist/src/chunk-ppfr0b8h.js +4 -0
- package/dist/src/chunk-q10bdnat.js +4 -0
- package/dist/src/chunk-q9xmq595.js +4 -0
- package/dist/src/{chunk-2v7tw1nj.js → chunk-qcxzr2my.js} +3 -3
- package/dist/src/chunk-qf6nynk6.js +7 -0
- package/dist/src/chunk-qyqypn28.js +5 -0
- package/dist/src/chunk-r2epb56s.js +4 -0
- package/dist/src/chunk-r5bxavdx.js +311 -0
- package/dist/src/{chunk-r14wwk37.js → chunk-r6z1eztj.js} +12 -12
- package/dist/src/{chunk-d57432wq.js → chunk-r7bpkgff.js} +2 -2
- package/dist/src/chunk-r8jf3d92.js +4 -0
- package/dist/src/{chunk-9rkfyt6q.js → chunk-rbpdk7m0.js} +3 -3
- package/dist/src/chunk-rc0dbypm.js +4 -0
- package/dist/src/chunk-rhcty4ms.js +4 -0
- package/dist/src/chunk-rpvckv3p.js +4 -0
- package/dist/src/{chunk-s1zq65ny.js → chunk-rqc9ap3x.js} +2 -2
- package/dist/src/chunk-rvvy1bte.js +7 -0
- package/dist/src/chunk-ry0mz41y.js +4 -0
- package/dist/src/{chunk-34zxqcmq.js → chunk-s3jc6cwp.js} +3 -3
- package/dist/src/chunk-sfv61xjb.js +6 -0
- package/dist/src/chunk-t6bfvfkg.js +4 -0
- package/dist/src/chunk-t6c8akcm.js +5 -0
- package/dist/src/chunk-t7w8rctc.js +4 -0
- package/dist/src/chunk-thbh3jew.js +5 -0
- package/dist/src/chunk-v2wd4n3e.js +5 -0
- package/dist/src/{chunk-zg67wjkh.js → chunk-v6pya0dm.js} +3 -3
- package/dist/src/chunk-vy3bwm1d.js +17 -0
- package/dist/src/chunk-w3vs79ex.js +27 -0
- package/dist/src/chunk-w4zga19f.js +4 -0
- package/dist/src/chunk-w5b2jwk3.js +14 -0
- package/dist/src/chunk-w7hkv422.js +5 -0
- package/dist/src/{chunk-qv2918jt.js → chunk-waqwcjyn.js} +2 -2
- package/dist/src/{chunk-b4cxdzwy.js → chunk-wbh8spm5.js} +7 -7
- package/dist/src/{chunk-ajsrz473.js → chunk-wyrkw6hw.js} +3 -3
- package/dist/src/chunk-xa73x2cx.js +5 -0
- package/dist/src/{chunk-eka89q3k.js → chunk-xgan0qqp.js} +1 -1
- package/dist/src/chunk-y2vs6jwg.js +4 -0
- package/dist/src/chunk-yattm52s.js +4 -0
- package/dist/src/{chunk-9y5bcy28.js → chunk-yb97j25b.js} +4 -4
- package/dist/src/{chunk-c9nk1r78.js → chunk-ybbtagbt.js} +3 -3
- package/dist/src/chunk-ycaj2sgf.js +9 -0
- package/dist/src/chunk-yf7ympyz.js +325 -0
- package/dist/src/chunk-yjawdzk8.js +4 -0
- package/dist/src/chunk-z637nqg8.js +11 -0
- package/dist/src/{chunk-0w1spptt.js → chunk-zgja5f3p.js} +4 -4
- package/dist/src/chunk-zs1sghs9.js +4 -0
- package/dist/src/daemon/processEntry.js +2 -2
- package/dist/src/index.js +4 -4
- package/dist/src/runtime/bunRuntimeGuard.js +2 -2
- package/dist/src/utils/workers/iosBundleExtractWorker.js +2 -2
- package/ios/CameraPosterInjection/Injection/CameraPosterInjection.m +466 -0
- package/package.json +3 -2
- package/schemas/test-plan.schema.json +370 -52
- package/dist/src/chunk-09442h7v.js +0 -4
- package/dist/src/chunk-0e4gm1kj.js +0 -5
- package/dist/src/chunk-0eb8576f.js +0 -4
- package/dist/src/chunk-0rjm4nx7.js +0 -5
- package/dist/src/chunk-1zmh2eak.js +0 -4
- package/dist/src/chunk-28k63ha3.js +0 -5
- package/dist/src/chunk-2d4wmp8b.js +0 -4
- package/dist/src/chunk-2e6s75qv.js +0 -78
- package/dist/src/chunk-32jpxz2y.js +0 -323
- package/dist/src/chunk-3jmvqygr.js +0 -238
- package/dist/src/chunk-3swvfhqt.js +0 -5
- package/dist/src/chunk-44bt78m9.js +0 -5
- package/dist/src/chunk-488vt2bp.js +0 -4
- package/dist/src/chunk-4fgdhcwx.js +0 -5
- package/dist/src/chunk-4jp2se4w.js +0 -4
- package/dist/src/chunk-4vhr9e4t.js +0 -4
- package/dist/src/chunk-4xd6zs3y.js +0 -15
- package/dist/src/chunk-51567pg8.js +0 -4
- package/dist/src/chunk-5agqsfev.js +0 -4
- package/dist/src/chunk-5d706gmr.js +0 -4
- package/dist/src/chunk-5kd4rqk7.js +0 -5
- package/dist/src/chunk-61t538bm.js +0 -4
- package/dist/src/chunk-6d3mmqxt.js +0 -54
- package/dist/src/chunk-6hyt398x.js +0 -5
- package/dist/src/chunk-6mnr8kpm.js +0 -4
- package/dist/src/chunk-79q5xsdc.js +0 -42
- package/dist/src/chunk-7bdgand3.js +0 -4
- package/dist/src/chunk-84cp9dw5.js +0 -4
- package/dist/src/chunk-86f2h5ww.js +0 -5
- package/dist/src/chunk-8cghfzb2.js +0 -19
- package/dist/src/chunk-9tf2p9y9.js +0 -5
- package/dist/src/chunk-a2sc4jm0.js +0 -5
- package/dist/src/chunk-aa5ng3d1.js +0 -4
- package/dist/src/chunk-b3h0a6ca.js +0 -4
- package/dist/src/chunk-b6a737qt.js +0 -4
- package/dist/src/chunk-bn64x5z5.js +0 -5
- package/dist/src/chunk-bvh649za.js +0 -12
- package/dist/src/chunk-c9tyfg4j.js +0 -26
- package/dist/src/chunk-cfsdfqnm.js +0 -4
- package/dist/src/chunk-cxyf04jc.js +0 -7
- package/dist/src/chunk-da08tx5v.js +0 -4
- package/dist/src/chunk-f2tc08m2.js +0 -4
- package/dist/src/chunk-f8tnk179.js +0 -5
- package/dist/src/chunk-f9s1kkhx.js +0 -5
- package/dist/src/chunk-fbp8a4rx.js +0 -4
- package/dist/src/chunk-fd2z0sze.js +0 -4
- package/dist/src/chunk-fk927f4q.js +0 -54
- package/dist/src/chunk-fxmr3a0f.js +0 -4
- package/dist/src/chunk-gaqwhd44.js +0 -4
- package/dist/src/chunk-ggtd5x5a.js +0 -5
- package/dist/src/chunk-gndcfrm7.js +0 -4
- package/dist/src/chunk-h3n4adc6.js +0 -310
- package/dist/src/chunk-h5pjbb83.js +0 -4
- package/dist/src/chunk-hgnnh302.js +0 -4
- package/dist/src/chunk-hmke8nhx.js +0 -5
- package/dist/src/chunk-j2bx12hn.js +0 -4
- package/dist/src/chunk-j70y1a2g.js +0 -4
- package/dist/src/chunk-js1jpyxp.js +0 -6
- package/dist/src/chunk-kbjq0qvb.js +0 -4
- package/dist/src/chunk-kfwx57xd.js +0 -4
- package/dist/src/chunk-kzwctna2.js +0 -4
- package/dist/src/chunk-m9ehyehy.js +0 -4
- package/dist/src/chunk-mct91p1f.js +0 -4
- package/dist/src/chunk-mf9spd4g.js +0 -5
- package/dist/src/chunk-mgrcansb.js +0 -4
- package/dist/src/chunk-mqc1d0eb.js +0 -6
- package/dist/src/chunk-n1zmpk0z.js +0 -4
- package/dist/src/chunk-ncyjf63g.js +0 -4
- package/dist/src/chunk-nr64d21q.js +0 -973
- package/dist/src/chunk-nwm2pq5v.js +0 -168
- package/dist/src/chunk-pm06b05d.js +0 -9
- package/dist/src/chunk-q50s00ry.js +0 -4
- package/dist/src/chunk-qwye1958.js +0 -14
- package/dist/src/chunk-r8z9pfve.js +0 -5
- package/dist/src/chunk-rdpgkjf6.js +0 -4
- package/dist/src/chunk-rkr0dks9.js +0 -5
- package/dist/src/chunk-rn84t3sf.js +0 -11
- package/dist/src/chunk-s123kn7n.js +0 -4
- package/dist/src/chunk-s73qn3fx.js +0 -4
- package/dist/src/chunk-sjn0nj4p.js +0 -5
- package/dist/src/chunk-sns0c35v.js +0 -7
- package/dist/src/chunk-t4dr5c8v.js +0 -8
- package/dist/src/chunk-tc8k9c1j.js +0 -4
- package/dist/src/chunk-teznhase.js +0 -4
- package/dist/src/chunk-ty9xgmz4.js +0 -4
- package/dist/src/chunk-tyazf3sk.js +0 -145
- package/dist/src/chunk-v6npjrjm.js +0 -5
- package/dist/src/chunk-vbvtzkwz.js +0 -5
- package/dist/src/chunk-vefd8qee.js +0 -8
- package/dist/src/chunk-vs9r72ta.js +0 -17
- package/dist/src/chunk-w88k0bgr.js +0 -4
- package/dist/src/chunk-wzdt0enk.js +0 -4
- package/dist/src/chunk-xhhv854c.js +0 -4
- package/dist/src/chunk-y58270hd.js +0 -4
- package/dist/src/chunk-yk0hmbex.js +0 -4
- package/dist/src/chunk-ympy4fdz.js +0 -28
- package/dist/src/chunk-yw436axy.js +0 -4
- package/dist/src/chunk-z04jrpjy.js +0 -5
- package/dist/src/chunk-z2xznczw.js +0 -4
- package/dist/src/chunk-z4xnrgps.js +0 -4
- package/dist/src/chunk-z7csyszv.js +0 -4
- package/dist/src/chunk-z8t0v07j.js +0 -11
- package/dist/src/chunk-z916af47.js +0 -228
- package/dist/src/chunk-zcr8he8q.js +0 -5
- package/dist/src/chunk-zd9vmkzn.js +0 -9
- package/dist/src/chunk-zj939v0h.js +0 -5
- package/dist/src/chunk-zkdjwtc1.js +0 -4
- package/dist/src/chunk-zkv5kzt6.js +0 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{i,l,e}from"./chunk-
|
|
3
|
-
export{
|
|
2
|
+
import{i,l,e}from"./chunk-z637nqg8.js";import{Ky,CA,DA,Gy}from"./chunk-hrfytkxh.js";var g=1e4,RU=1e4,y={getConfig:Ky,resolveMode:CA,apply:DA,isEnabled:Gy};class h{intervalHandle=null;lastAppliedModes=new Map;inFlightApplies=new Map;pendingClaims=new Map;pending=null;timer;dependencies;stopped=!1;constructor(n=i,t=y){this.timer=n,this.dependencies=t}start(){if(this.intervalHandle)return;this.stopped=!1,this.intervalHandle=this.timer.setInterval(()=>{this.trigger()},g),this.trigger()}setScope(n){this.scope=n}scope;isEnabled(){return(this.dependencies.isEnabled??Gy)()&&(this.scope?.isEnabled?.()??!0)}async syncDevice(n){if(this.stopped||!this.isEnabled()||n.platform!=="android")return;try{let t=await this.dependencies.getConfig(n.sessionKey);if(!d(t)||this.stopped)return;let p=await this.dependencies.resolveMode(t);if(this.stopped)return;let a=this.inFlightApplies.get(n.deviceId);if(a){this.retryClaimAfter(a,n);return}await this.applyToDevice(n,p,t,(r)=>d(r)&&A(r,t))}catch(t){e.warn(`[Appearance] Failed to apply appearance on claim to ${n.deviceId}: ${t}`)}}retryClaimAfter(n,t){let p=this.pendingClaims.has(t.deviceId);if(this.pendingClaims.set(t.deviceId,t),p)return;let a=()=>{let r=this.pendingClaims.get(t.deviceId);if(this.pendingClaims.delete(t.deviceId),r&&!this.stopped)this.syncDevice(r)};n.then(a,a)}async stop(){if(this.stopped=!0,this.intervalHandle)this.timer.clearInterval(this.intervalHandle),this.intervalHandle=null;await this.pending,this.lastAppliedModes.clear()}async trigger(){if(this.stopped)return;if(!this.isEnabled())return;if(this.pending)return this.pending;return this.pending=this.tick().catch((n)=>{e.warn(`[Appearance] Host sync tick failed: ${n}`)}).finally(()=>{this.pending=null}),this.pending}async tick(){let n=this.scope?.getTargets()??this.ownTargets();if(this.stopped)return;let t=new Map;for(let p of n){if(this.stopped)return;try{let a=await this.dependencies.getConfig(p.sessionKey);if(this.stopped)return;if(!a.syncWithHost){this.lastAppliedModes.delete(p.deviceId);continue}let r=`${a.syncWithHost}:${a.defaultMode}`,s=t.get(r);if(!s)s=this.dependencies.resolveMode(a),t.set(r,s);let c=await s;if(this.stopped)return;if(this.isAlreadyApplied(p,c))continue;await this.applyToDevice(p,c,a,u(a))}catch(a){e.warn(`[Appearance] Failed to apply host sync mode to ${p.deviceId}: ${a}`)}}}async applyToDevice(n,t,p,a){if(!this.isEnabled())return;if(this.inFlightApplies.has(n.deviceId)){e.debug(`[Appearance] Skipping ${n.deviceId}: appearance apply still in flight`);return}let r=!1,s=this.applyIfStillOwed(n,t,a);if(this.inFlightApplies.set(n.deviceId,s),s.then(()=>{this.inFlightApplies.delete(n.deviceId)},(f)=>{if(this.inFlightApplies.delete(n.deviceId),r)e.warn(`[Appearance] Apply failed after deadline for ${n.deviceId}`,f)}),await l(s,{timer:this.timer,timeoutMs:this.dependencies.applyDeadlineMs??RU,label:`Appearance apply for ${n.deviceId}`,onTimeout:()=>{r=!0}})&&!this.stopped)this.lastAppliedModes.set(n.deviceId,{mode:t,incarnation:n.incarnation})}async applyIfStillOwed(n,t,p){if(this.scope?.beforeApply&&!this.skipReason(n))await this.scope.beforeApply(n);let a=this.skipReason(n);if(!a){let r=await this.dependencies.getConfig(n.sessionKey);a=this.skipReason(n)??(p(r)?void 0:"its holder's appearance config changed")}if(a)return e.debug(`[Appearance] Skipping ${n.deviceId}: ${a} before the apply`),!1;return await this.dependencies.apply(n,t),!0}skipReason(n){if(this.stopped)return"the scheduler stopped";if(!this.isEnabled())return"appearance sync was switched off";return this.isHeldBySameSession(n)?void 0:"its holder changed"}isHeldBySameSession(n){let t=(this.scope?.getTargets()??this.ownTargets()).find((p)=>p.deviceId===n.deviceId);return t!==void 0&&t.sessionKey===n.sessionKey}isAlreadyApplied(n,t){let p=this.lastAppliedModes.get(n.deviceId);return p?.mode===t&&(p.incarnation===void 0||n.incarnation===void 0||p.incarnation===n.incarnation)}ownTargets(){return this.dependencies.getTargets?.()??[]}}function d(n){return n.syncWithHost||n.applyOnConnect}function A(n,t){return n.syncWithHost===t.syncWithHost&&n.defaultMode===t.defaultMode}function u(n){return(t)=>t.syncWithHost&&t.defaultMode===n.defaultMode}var o=new h;function $K(n){if(n)o.setScope(n);o.start()}async function UK(){await o.stop()}async function HK(){await o.trigger()}async function qK(n){await o.syncDevice(n)}
|
|
3
|
+
export{RU,$K,UK,HK,qK};
|
|
4
4
|
|
|
5
|
-
//# debugId=
|
|
5
|
+
//# debugId=E2C6100AF9988DF664756E2164756E21
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Eae,U8}from"./chunk-11m8wj8j.js";import"./chunk-dgrbdpb7.js";import"./chunk-65y8v4td.js";import"./chunk-0jrrsnc9.js";import"./chunk-hrfytkxh.js";import"./chunk-26k317v5.js";import"./chunk-64j0majr.js";import"./chunk-2f9rkmhx.js";import"./chunk-0n6swkwg.js";import"./chunk-00167wan.js";import"./chunk-284ptqa4.js";import"./chunk-yb97j25b.js";import"./chunk-e98dqnc9.js";import"./chunk-w7hkv422.js";import"./chunk-7rz9898k.js";import"./chunk-fgb98zjj.js";import"./chunk-3xkpk44w.js";import"./chunk-0qsy1qsx.js";import"./chunk-rvvy1bte.js";import"./chunk-r5bxavdx.js";import"./chunk-yf7ympyz.js";import"./chunk-4hw3665t.js";import"./chunk-5d2hft6c.js";import"./chunk-z637nqg8.js";import"./chunk-58wzr3mt.js";export{Eae as formatConsoleOutput,U8 as runDoctor};
|
|
3
|
+
|
|
4
|
+
//# debugId=474081E012DA110D64756E2164756E21
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{nr,wr,Xe,dn,e}from"./chunk-z8t0v07j.js";import{QS,Kr,pe,xs,v,ii,cg,hB,dg,ck}from"./chunk-h3n4adc6.js";import{r,t,u}from"./chunk-9rkfyt6q.js";class xu extends t{code;snapshotName;reasons;retryable=!1;constructor(n,i,a,s=[]){super(a);this.code=n;this.snapshotName=i;this.reasons=s;this.name="SnapshotFixtureRefusedError"}toPayload(){return{code:this.code,snapshotName:this.snapshotName,retryable:this.retryable,...this.reasons.length>0?{reasons:[...this.reasons]}:{}}}}import*as w from"path";function ky(n,i){let a=(s)=>{throw new t(`Invalid ${n} '${i}': ${s}. Use a single path segment without path separators, '.'/'..', or an absolute path.`)};if(typeof i!=="string"||i.trim().length===0){a(`${n} must be a non-empty string`);return}if(i.includes("\x00")){a(`${n} contains a NUL byte`);return}if(i.includes("/")||i.includes("\\")){a(`${n} contains a path separator`);return}if(i==="."||i===".."){a(`${n} is a path traversal segment`);return}if(w.isAbsolute(i)||w.win32.isAbsolute(i)){a(`${n} is an absolute path`);return}}function Bf(n){if(ky("snapshot name",n),DI(n))throw new t("Broker baseline snapshots are reserved and cannot be accessed by deviceSnapshot tools")}var R6="automobile-broker-baseline-v1";function DI(n){return n.toLowerCase().startsWith("automobile-broker-baseline-")}import{promises as p}from"fs";import*as d from"path";var Bd=".replacing",jH="ios",KH="android";function _Z(n){let i=n.toLowerCase();if(i===jH||i===KH)return{kind:"scope-root",name:i};if(i.endsWith(Bd))return{kind:"suffix",suffix:Bd};return}async function b(n){let i=await p.open(n,"r");try{await i.sync()}finally{await i.close()}}class $f{syncDirectory;syncFile;basePath;constructor(n,i=b,a=(s)=>s.sync()){this.syncDirectory=i;this.syncFile=a;this.basePath=n||Xe(dn.SNAPSHOTS)}getBasePath(){return this.basePath}async ensureSnapshotsDirectory(){try{await p.mkdir(this.basePath,{recursive:!0})}catch(n){throw e.error(`Failed to create snapshots directory: ${n}`),n}}getSnapshotPath(n){return d.join(this.basePath,n)}getSnapshotPathWithOptions(n,i){if(i?.platform==="ios"&&i.deviceId)return ky("iOS device id",i.deviceId),d.join(this.basePath,jH,i.deviceId,n);if(i?.platform==="android"&&i.avdName)return ky("Android AVD name",i.avdName),d.join(this.basePath,KH,i.avdName,n);return this.getSnapshotPath(n)}getSettingsPath(n,i){return d.join(this.getSnapshotPathWithOptions(n,i),"settings.json")}getMetadataPath(n,i){return d.join(this.getSnapshotPathWithOptions(n,i),"metadata.json")}getAppDataPath(n,i){let a=i?.platform==="ios"?"app-data":"app_data";return d.join(this.getSnapshotPathWithOptions(n,i),a)}async snapshotDirectoryExists(n,i){try{return await p.access(this.getSnapshotPathWithOptions(n,i)),!0}catch(a){return e.debug(`src/utils/DeviceSnapshotStore.ts fallback failed: ${a}`,a),!1}}async replaceSnapshotData(n,i,a){let s=this.getSnapshotPathWithOptions(n,i),o=`${s}${Bd}`,c=this.getJournalPath(s);await this.recoverSnapshotData(n,i);let m=await this.pathExists(s);if(await this.writeJournal(c,m?"pending-existing":"pending-new"),m){try{await p.rename(s,o)}catch(h){if(h.code!=="ENOENT")throw h;await this.writeJournal(c,"pending-new")}await this.syncParent(s)}let l;try{l=await a()}catch(h){try{await this.recoverSnapshotData(n,i)}catch(g){e.warn(`Failed to roll back snapshot '${n}' after a failed overwrite; prior data may be stranded at '${o}': ${g}`)}throw h}await this.writeJournal(c,"committed");try{await this.recoverSnapshotData(n,i)}catch(h){e.warn(`Failed to clean committed snapshot journal '${c}'; it will be cleaned up on the next capture: ${h}`)}return l}async recoverSnapshotData(n,i){let a=this.getSnapshotPathWithOptions(n,i),s=`${a}${Bd}`,o=this.getJournalPath(a),c=this.getTempJournalPath(o),m=d.dirname(a);await p.mkdir(m,{recursive:!0});let l=await nr(m);if(l.includes(d.basename(c)))await p.rm(c);let h=l.includes(d.basename(o))?await p.readFile(o,"utf-8"):void 0,g=await this.pathExists(s);if(h===void 0){if(g)await this.recoverLegacyAside(a,s);return}if(h!=="pending-existing"&&h!=="pending-new"&&h!=="committed")throw Error(`Invalid snapshot journal at '${o}': '${h}'`);if(h==="committed")await p.rm(s,{recursive:!0,force:!0});else if(g){if(h!=="pending-existing")throw Error(`Unexpected set-aside snapshot for new capture at '${s}'`);await p.rm(a,{recursive:!0,force:!0}),await p.rename(s,a)}else if(h==="pending-new")await p.rm(a,{recursive:!0,force:!0});await this.syncParent(a),await p.rm(o),await this.syncParent(a)}async discardSnapshotArtifacts(n,i){let a=this.getSnapshotPathWithOptions(n,i),s=this.getJournalPath(a),o=[];for(let c of[`${a}${Bd}`,s,this.getTempJournalPath(s)])try{await p.rm(c,{recursive:!0,force:!0})}catch(m){e.warn(`Failed to discard snapshot artifact '${c}'`,m),o.push(c)}return o}async listLeftoverSnapshotJournals(n){let i=[],a=await this.readJournalDirectory(this.getBasePath());if(this.collectJournalEntries(a,void 0,i,n.maxEntries))return{entries:i,truncated:!0};let s=0;for(let o of["android","ios"]){if(!a.some((l)=>l.name===o&&l.isDirectory()))continue;let c=d.join(this.getBasePath(),o),m=await this.readJournalDirectory(c);for(let l of m){if(!l.isDirectory()||!this.isSafeJournalSegment(l.name))continue;if(s>=n.maxScopeDirectories)return{entries:i,truncated:!0};s++;let h=o==="android"?{platform:o,avdName:l.name}:{platform:o,deviceId:l.name},g=await this.readJournalDirectory(d.join(c,l.name));if(this.collectJournalEntries(g,h,i,n.maxEntries))return{entries:i,truncated:!0}}}return{entries:i,truncated:!1}}async readJournalDirectory(n){try{return(await wr(n)).sort((a,s)=>a.name<s.name?-1:a.name>s.name?1:0)}catch(i){if(i.code==="ENOENT")return e.debug(`Snapshot journal directory '${n}' does not exist`,i),[];throw u(i,`Failed to enumerate snapshot journals in '${n}'`)}}isSafeJournalSegment(n){try{return ky("snapshot journal segment",n),!0}catch(i){return e.debug(`Skipping unsafe snapshot journal segment '${n}'`,i),!1}}collectJournalEntries(n,i,a,s){let o=new Set;for(let c of n){if(!c.name.endsWith(Bd)||c.isSymbolicLink())continue;let m=c.name.endsWith(".journal.tmp.replacing")?".journal.tmp.replacing":c.name.endsWith(".journal.replacing")?".journal.replacing":Bd,l=c.name.slice(0,-m.length);if(!this.isSafeJournalSegment(l)||o.has(l))continue;if(!i&&["android","ios"].includes(l))continue;if(o.add(l),a.length>=s)return!0;if(a.push({snapshotName:l,options:i}),a.length>=s)return!0}return!1}async recoverLegacyAside(n,i){if(await this.pathExists(n))e.warn(`Removing legacy set-aside snapshot '${i}' because '${n}' exists`),await p.rm(i,{recursive:!0,force:!0});else e.warn(`Restoring legacy set-aside snapshot '${i}' to '${n}'`),await p.rename(i,n);await this.syncParent(n)}getJournalPath(n){return`${n}.journal${Bd}`}getTempJournalPath(n){return`${n.slice(0,-Bd.length)}.tmp${Bd}`}async writeJournal(n,i){let a=this.getTempJournalPath(n),s=await p.open(a,"wx");try{await s.writeFile(i),await this.syncFile(s)}finally{await s.close()}await p.rename(a,n),await this.syncParent(n)}async syncParent(n){try{await this.syncDirectory(d.dirname(n))}catch(i){let a=i.code;if(a==="EPERM"||a==="EINVAL"||a==="EISDIR"||a==="ENOTSUP"){e.debug(`Skipping unsupported directory sync for '${n}': ${i}`);return}throw i}}async pathExists(n){return(await nr(d.dirname(n))).includes(d.basename(n))}async deleteSnapshotData(n,i){let a=this.getSnapshotPathWithOptions(n,i);try{await p.rm(a,{recursive:!0,force:!0})}catch(s){e.warn(`Failed to delete snapshot data '${n}': ${s}`)}}generateSnapshotName(n){let a=new Date().toISOString().replace(/[:.]/g,"-").replace("T","_").split(".")[0];if(n)return`${n.replace(/[^a-zA-Z0-9-_]/g,"_")}_${a}`;return`snapshot_${a}`}async getSnapshotSizeBytes(n,i){let a=this.getSnapshotPathWithOptions(n,i),s;try{s=await wr(a)}catch(o){if(o.code==="ENOENT")return e.debug(`Snapshot archive ${a} does not exist: ${o}`),0;return e.warn(`Failed to read snapshot archive ${a}: ${o}`,o),null}return this.getDirectorySizeFromEntries(a,s)}async getDirectorySize(n){let i;try{i=await wr(n)}catch(a){return e.debug(`Failed to get directory size for ${n}: ${a}`),null}return this.getDirectorySizeFromEntries(n,i)}async getDirectorySizeFromEntries(n,i){let a=0;for(let s of i){let o=d.join(n,s.name);if(s.isDirectory()){let c=await this.getDirectorySize(o);if(c===null)return null;a+=c}else{let c=await this.getFileSize(o);if(c===null)return null;a+=c}}return a}async listSubdirectoryNames(n){try{return(await wr(n)).filter((a)=>a.isDirectory()).map((a)=>a.name)}catch(i){return e.debug(`Failed to list subdirectories of ${n}: ${i}`),null}}async listFileNames(n){try{return(await wr(n)).filter((a)=>a.isFile()).map((a)=>a.name)}catch(i){return e.debug(`Failed to list files of ${n}: ${i}`),null}}async getFileSize(n){try{return(await p.stat(n)).size}catch(i){return e.debug(`Failed to stat ${n} while measuring a directory: ${i}`),null}}}async function GH(n,i){if(!n)return null;return(await i()).find((s)=>s.name===n)?.deviceId??null}import*as P from"path";var Hp="default_boot",D=".avd",A=".ini";class P6{directories;avdDirectories;emulator;adbFactory;consoleBusyRegistry;constructor(n=new $f,{avdDirectories:i=new Kr,emulator:a=new ii,adbFactory:s=v,consoleBusyRegistry:o=xs}={}){this.consoleBusyRegistry=o,this.directories=n,this.avdDirectories=i,this.emulator=a,this.adbFactory=s}async measureVmSnapshotBytes(n,i){let a=await this.resolveSnapshotsRoot(n);if(!a)return null;return this.directories.getDirectorySize(P.join(a,i))}async listAvdSnapshotDirectories(n){let i=await this.resolveSnapshotsRoot(n);if(!i)return[];let a=await this.directories.listSubdirectoryNames(i);if(!a)return[];let s=[];for(let o of a){if(DI(o))continue;let c=P.join(i,o);s.push({snapshotName:o,directoryPath:c,sizeBytes:await this.directories.getDirectorySize(c)})}return s}async listKnownAvdNames(){let n=this.avdDirectories.getAvdHome(),i=new Set;for(let[a,s]of[[await this.directories.listSubdirectoryNames(n),D],[await this.directories.listFileNames(n),A]])for(let o of a??[])if(o.endsWith(s)&&o.length>s.length)i.add(o.slice(0,-s.length));return Array.from(i)}async findLiveEmulatorSerial(n){if(!n)return null;try{return await GH(n,()=>this.emulator.getBootedDevices(!0))}catch(i){return e.warn(`[AvdSnapshot] Failed to look up a live emulator for AVD '${n}': ${r(i)}`,i),null}}async deleteVmSnapshot(n,i,a,s){if(DI(i))return{reclaimed:!1,reason:"Broker baseline snapshot is reserved"};let o=this.adbFactory.create({deviceId:n,name:n,platform:"android"}),c;try{c=cg("delete",i)}catch(y){let f=r(y);return e.warn(`[AvdSnapshot] ${f}`,y),{reclaimed:!1,reason:f}}let m=s===void 0?void 0:new AbortController,l=m?pe(m.signal):void 0,h,g;try{g=await this.consoleBusyRegistry.runExclusive(n,async()=>o.execute(c.split(" "),{timeoutMs:a,waitForProcessSettlementAfterAbort:!0,...m?{signal:l,beforeDispatch:async(y)=>{let f=await this.emulator.resolveAvdNameForSerial(n,{signal:l,timeoutMs:y??a,consoleExclusiveOwner:!0});if(f!==s)throw h=`Skipping VM snapshot delete for '${i}': serial '${n}' expected AVD '${s}' but currently hosts '${f??"no longer live"}'`,e.warn(`[AvdSnapshot] ${h}`),m.abort(),Error(h)}}:{}}))}catch(y){if(h!==void 0)return{reclaimed:!1,reason:h};let f=ck("delete",i,y);return e.warn(`[AvdSnapshot] ${f}`,y),{reclaimed:!1,reason:f}}let S=dg("delete",i,g);if(S.ok)return{reclaimed:!0};if(hB(S.errorMessage))return e.debug(`[AvdSnapshot] ${S.errorMessage}`),{reclaimed:!0};return e.warn(`[AvdSnapshot] ${S.errorMessage}`),{reclaimed:!1,reason:S.errorMessage}}async resolveSnapshotsRoot(n){if(!n)return null;let i=await this.avdDirectories.resolveAvdDirectory(n);if(!i)return null;return P.join(i,QS)}}
|
|
3
|
-
export{
|
|
2
|
+
import{Qt,Rr,Qe,fn,e}from"./chunk-z637nqg8.js";import{xw,Br,me,Fs,v,oi,Lg,y$,Bg,Lk}from"./chunk-r5bxavdx.js";import{r,t,u}from"./chunk-rbpdk7m0.js";class Ju extends t{code;snapshotName;reasons;retryable=!1;constructor(n,i,a,s=[]){super(a);this.code=n;this.snapshotName=i;this.reasons=s;this.name="SnapshotFixtureRefusedError"}toPayload(){return{code:this.code,snapshotName:this.snapshotName,retryable:this.retryable,...this.reasons.length>0?{reasons:[...this.reasons]}:{}}}}import*as w from"path";function Jy(n,i){let a=(s)=>{throw new t(`Invalid ${n} '${i}': ${s}. Use a single path segment without path separators, '.'/'..', or an absolute path.`)};if(typeof i!=="string"||i.trim().length===0){a(`${n} must be a non-empty string`);return}if(i.includes("\x00")){a(`${n} contains a NUL byte`);return}if(i.includes("/")||i.includes("\\")){a(`${n} contains a path separator`);return}if(i==="."||i===".."){a(`${n} is a path traversal segment`);return}if(w.isAbsolute(i)||w.win32.isAbsolute(i)){a(`${n} is an absolute path`);return}}function dh(n){if(Jy("snapshot name",n),d_(n))throw new t("Broker baseline snapshots are reserved and cannot be accessed by deviceSnapshot tools")}var V4="automobile-broker-baseline-v1";function d_(n){return n.toLowerCase().startsWith("automobile-broker-baseline-")}import{promises as p}from"fs";import*as d from"path";var Zd=".replacing",Gq="ios",Yq="android";function kQ(n){let i=n.toLowerCase();if(i===Gq||i===Yq)return{kind:"scope-root",name:i};if(i.endsWith(Zd))return{kind:"suffix",suffix:Zd};return}async function b(n){let i=await p.open(n,"r");try{await i.sync()}finally{await i.close()}}class lh{syncDirectory;syncFile;basePath;constructor(n,i=b,a=(s)=>s.sync()){this.syncDirectory=i;this.syncFile=a;this.basePath=n||Qe(fn.SNAPSHOTS)}getBasePath(){return this.basePath}async ensureSnapshotsDirectory(){try{await p.mkdir(this.basePath,{recursive:!0})}catch(n){throw e.error(`Failed to create snapshots directory: ${n}`),n}}getSnapshotPath(n){return d.join(this.basePath,n)}getSnapshotPathWithOptions(n,i){if(i?.platform==="ios"&&i.deviceId)return Jy("iOS device id",i.deviceId),d.join(this.basePath,Gq,i.deviceId,n);if(i?.platform==="android"&&i.avdName)return Jy("Android AVD name",i.avdName),d.join(this.basePath,Yq,i.avdName,n);return this.getSnapshotPath(n)}getSettingsPath(n,i){return d.join(this.getSnapshotPathWithOptions(n,i),"settings.json")}getMetadataPath(n,i){return d.join(this.getSnapshotPathWithOptions(n,i),"metadata.json")}getAppDataPath(n,i){let a=i?.platform==="ios"?"app-data":"app_data";return d.join(this.getSnapshotPathWithOptions(n,i),a)}async snapshotDirectoryExists(n,i){try{return await p.access(this.getSnapshotPathWithOptions(n,i)),!0}catch(a){return e.debug(`src/utils/DeviceSnapshotStore.ts fallback failed: ${a}`,a),!1}}async replaceSnapshotData(n,i,a){let s=this.getSnapshotPathWithOptions(n,i),o=`${s}${Zd}`,c=this.getJournalPath(s);await this.recoverSnapshotData(n,i);let m=await this.pathExists(s);if(await this.writeJournal(c,m?"pending-existing":"pending-new"),m){try{await p.rename(s,o)}catch(h){if(h.code!=="ENOENT")throw h;await this.writeJournal(c,"pending-new")}await this.syncParent(s)}let l;try{l=await a()}catch(h){try{await this.recoverSnapshotData(n,i)}catch(g){e.warn(`Failed to roll back snapshot '${n}' after a failed overwrite; prior data may be stranded at '${o}': ${g}`)}throw h}await this.writeJournal(c,"committed");try{await this.recoverSnapshotData(n,i)}catch(h){e.warn(`Failed to clean committed snapshot journal '${c}'; it will be cleaned up on the next capture: ${h}`)}return l}async recoverSnapshotData(n,i){let a=this.getSnapshotPathWithOptions(n,i),s=`${a}${Zd}`,o=this.getJournalPath(a),c=this.getTempJournalPath(o),m=d.dirname(a);await p.mkdir(m,{recursive:!0});let l=await Qt(m);if(l.includes(d.basename(c)))await p.rm(c);let h=l.includes(d.basename(o))?await p.readFile(o,"utf-8"):void 0,g=await this.pathExists(s);if(h===void 0){if(g)await this.recoverLegacyAside(a,s);return}if(h!=="pending-existing"&&h!=="pending-new"&&h!=="committed")throw Error(`Invalid snapshot journal at '${o}': '${h}'`);if(h==="committed")await p.rm(s,{recursive:!0,force:!0});else if(g){if(h!=="pending-existing")throw Error(`Unexpected set-aside snapshot for new capture at '${s}'`);await p.rm(a,{recursive:!0,force:!0}),await p.rename(s,a)}else if(h==="pending-new")await p.rm(a,{recursive:!0,force:!0});await this.syncParent(a),await p.rm(o),await this.syncParent(a)}async discardSnapshotArtifacts(n,i){let a=this.getSnapshotPathWithOptions(n,i),s=this.getJournalPath(a),o=[];for(let c of[`${a}${Zd}`,s,this.getTempJournalPath(s)])try{await p.rm(c,{recursive:!0,force:!0})}catch(m){e.warn(`Failed to discard snapshot artifact '${c}'`,m),o.push(c)}return o}async listLeftoverSnapshotJournals(n){let i=[],a=await this.readJournalDirectory(this.getBasePath());if(this.collectJournalEntries(a,void 0,i,n.maxEntries))return{entries:i,truncated:!0};let s=0;for(let o of["android","ios"]){if(!a.some((l)=>l.name===o&&l.isDirectory()))continue;let c=d.join(this.getBasePath(),o),m=await this.readJournalDirectory(c);for(let l of m){if(!l.isDirectory()||!this.isSafeJournalSegment(l.name))continue;if(s>=n.maxScopeDirectories)return{entries:i,truncated:!0};s++;let h=o==="android"?{platform:o,avdName:l.name}:{platform:o,deviceId:l.name},g=await this.readJournalDirectory(d.join(c,l.name));if(this.collectJournalEntries(g,h,i,n.maxEntries))return{entries:i,truncated:!0}}}return{entries:i,truncated:!1}}async readJournalDirectory(n){try{return(await Rr(n)).sort((a,s)=>a.name<s.name?-1:a.name>s.name?1:0)}catch(i){if(i.code==="ENOENT")return e.debug(`Snapshot journal directory '${n}' does not exist`,i),[];throw u(i,`Failed to enumerate snapshot journals in '${n}'`)}}isSafeJournalSegment(n){try{return Jy("snapshot journal segment",n),!0}catch(i){return e.debug(`Skipping unsafe snapshot journal segment '${n}'`,i),!1}}collectJournalEntries(n,i,a,s){let o=new Set;for(let c of n){if(!c.name.endsWith(Zd)||c.isSymbolicLink())continue;let m=c.name.endsWith(".journal.tmp.replacing")?".journal.tmp.replacing":c.name.endsWith(".journal.replacing")?".journal.replacing":Zd,l=c.name.slice(0,-m.length);if(!this.isSafeJournalSegment(l)||o.has(l))continue;if(!i&&["android","ios"].includes(l))continue;if(o.add(l),a.length>=s)return!0;if(a.push({snapshotName:l,options:i}),a.length>=s)return!0}return!1}async recoverLegacyAside(n,i){if(await this.pathExists(n))e.warn(`Removing legacy set-aside snapshot '${i}' because '${n}' exists`),await p.rm(i,{recursive:!0,force:!0});else e.warn(`Restoring legacy set-aside snapshot '${i}' to '${n}'`),await p.rename(i,n);await this.syncParent(n)}getJournalPath(n){return`${n}.journal${Zd}`}getTempJournalPath(n){return`${n.slice(0,-Zd.length)}.tmp${Zd}`}async writeJournal(n,i){let a=this.getTempJournalPath(n),s=await p.open(a,"wx");try{await s.writeFile(i),await this.syncFile(s)}finally{await s.close()}await p.rename(a,n),await this.syncParent(n)}async syncParent(n){try{await this.syncDirectory(d.dirname(n))}catch(i){let a=i.code;if(a==="EPERM"||a==="EINVAL"||a==="EISDIR"||a==="ENOTSUP"){e.debug(`Skipping unsupported directory sync for '${n}': ${i}`);return}throw i}}async pathExists(n){return(await Qt(d.dirname(n))).includes(d.basename(n))}async deleteSnapshotData(n,i){let a=this.getSnapshotPathWithOptions(n,i);try{await p.rm(a,{recursive:!0,force:!0})}catch(s){e.warn(`Failed to delete snapshot data '${n}': ${s}`)}}generateSnapshotName(n){let a=new Date().toISOString().replace(/[:.]/g,"-").replace("T","_").split(".")[0];if(n)return`${n.replace(/[^a-zA-Z0-9-_]/g,"_")}_${a}`;return`snapshot_${a}`}async getSnapshotSizeBytes(n,i){let a=this.getSnapshotPathWithOptions(n,i),s;try{s=await Rr(a)}catch(o){if(o.code==="ENOENT")return e.debug(`Snapshot archive ${a} does not exist: ${o}`),0;return e.warn(`Failed to read snapshot archive ${a}: ${o}`,o),null}return this.getDirectorySizeFromEntries(a,s)}async getDirectorySize(n){let i;try{i=await Rr(n)}catch(a){return e.debug(`Failed to get directory size for ${n}: ${a}`),null}return this.getDirectorySizeFromEntries(n,i)}async getDirectorySizeFromEntries(n,i){let a=0;for(let s of i){let o=d.join(n,s.name);if(s.isDirectory()){let c=await this.getDirectorySize(o);if(c===null)return null;a+=c}else{let c=await this.getFileSize(o);if(c===null)return null;a+=c}}return a}async listSubdirectoryNames(n){try{return(await Rr(n)).filter((a)=>a.isDirectory()).map((a)=>a.name)}catch(i){return e.debug(`Failed to list subdirectories of ${n}: ${i}`),null}}async listFileNames(n){try{return(await Rr(n)).filter((a)=>a.isFile()).map((a)=>a.name)}catch(i){return e.debug(`Failed to list files of ${n}: ${i}`),null}}async getFileSize(n){try{return(await p.stat(n)).size}catch(i){return e.debug(`Failed to stat ${n} while measuring a directory: ${i}`),null}}}async function Jq(n,i){if(!n)return null;return(await i()).find((s)=>s.name===n)?.deviceId??null}import*as P from"path";var lm="default_boot",D=".avd",A=".ini";class W4{directories;avdDirectories;emulator;adbFactory;consoleBusyRegistry;constructor(n=new lh,{avdDirectories:i=new Br,emulator:a=new oi,adbFactory:s=v,consoleBusyRegistry:o=Fs}={}){this.consoleBusyRegistry=o,this.directories=n,this.avdDirectories=i,this.emulator=a,this.adbFactory=s}async measureVmSnapshotBytes(n,i){let a=await this.resolveSnapshotsRoot(n);if(!a)return null;return this.directories.getDirectorySize(P.join(a,i))}async listAvdSnapshotDirectories(n){let i=await this.resolveSnapshotsRoot(n);if(!i)return[];let a=await this.directories.listSubdirectoryNames(i);if(!a)return[];let s=[];for(let o of a){if(d_(o))continue;let c=P.join(i,o);s.push({snapshotName:o,directoryPath:c,sizeBytes:await this.directories.getDirectorySize(c)})}return s}async listKnownAvdNames(){let n=this.avdDirectories.getAvdHome(),i=new Set;for(let[a,s]of[[await this.directories.listSubdirectoryNames(n),D],[await this.directories.listFileNames(n),A]])for(let o of a??[])if(o.endsWith(s)&&o.length>s.length)i.add(o.slice(0,-s.length));return Array.from(i)}async findLiveEmulatorSerial(n){if(!n)return null;try{return await Jq(n,()=>this.emulator.getBootedDevices(!0))}catch(i){return e.warn(`[AvdSnapshot] Failed to look up a live emulator for AVD '${n}': ${r(i)}`,i),null}}async deleteVmSnapshot(n,i,a,s){if(d_(i))return{reclaimed:!1,reason:"Broker baseline snapshot is reserved"};let o=this.adbFactory.create({deviceId:n,name:n,platform:"android"}),c;try{c=Lg("delete",i)}catch(y){let f=r(y);return e.warn(`[AvdSnapshot] ${f}`,y),{reclaimed:!1,reason:f}}let m=s===void 0?void 0:new AbortController,l=m?me(m.signal):void 0,h,g;try{g=await this.consoleBusyRegistry.runExclusive(n,async()=>o.execute(c.split(" "),{timeoutMs:a,waitForProcessSettlementAfterAbort:!0,...m?{signal:l,beforeDispatch:async(y)=>{let f=await this.emulator.resolveAvdNameForSerial(n,{signal:l,timeoutMs:y??a,consoleExclusiveOwner:!0});if(f!==s)throw h=`Skipping VM snapshot delete for '${i}': serial '${n}' expected AVD '${s}' but currently hosts '${f??"no longer live"}'`,e.warn(`[AvdSnapshot] ${h}`),m.abort(),Error(h)}}:{}}))}catch(y){if(h!==void 0)return{reclaimed:!1,reason:h};let f=Lk("delete",i,y);return e.warn(`[AvdSnapshot] ${f}`,y),{reclaimed:!1,reason:f}}let S=Bg("delete",i,g);if(S.ok)return{reclaimed:!0};if(y$(S.errorMessage))return e.debug(`[AvdSnapshot] ${S.errorMessage}`),{reclaimed:!0};return e.warn(`[AvdSnapshot] ${S.errorMessage}`),{reclaimed:!1,reason:S.errorMessage}}async resolveSnapshotsRoot(n){if(!n)return null;let i=await this.avdDirectories.resolveAvdDirectory(n);if(!i)return null;return P.join(i,xw)}}
|
|
3
|
+
export{Ju,Jy,dh,V4,d_,Zd,Gq,Yq,kQ,lh,Jq,lm,W4};
|
|
4
4
|
|
|
5
|
-
//# debugId=
|
|
5
|
+
//# debugId=C80DE22C3BEAA7A864756E2164756E21
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{i,l,e}from"./chunk-z637nqg8.js";import{uk,LR,Ai,hr,Ce}from"./chunk-r5bxavdx.js";import{t,u}from"./chunk-rbpdk7m0.js";function _(r){let s=[],n=[];for(let o of r.split(`
|
|
3
|
+
`)){let d=o.trim();if(!d)continue;let c=o.length-o.trimStart().length;while(n.length&&n[n.length-1].indent>=c)n.pop();let a={text:d,indent:c,children:[]};n[n.length-1]?.children.push(a),s.push(a),n.push(a)}return s}function v(r){let s=new Map;for(let{text:n}of r?.children??[]){let o=n.match(/^([A-Za-z0-9_.]+):\s+granted=(true|false)\b(.*)$/);if(!o)continue;let[,d,c,a]=o;s.set(d,{permission:d,state:c==="true"?"granted":"denied",source:"androidRuntime",raw:{granted:c==="true",flags:a.trim()||null}})}return s}function I(r,s){let o=r.children.find((d)=>d.text.startsWith("sharedUser=SharedUserSetting{"))?.text.split(" ")[1]?.split("/")[0];return o?s.find((d)=>d.text==="Shared users:")?.children.find((d)=>d.text.startsWith(`SharedUser [${o}]`)):void 0}function gn(r,s,n=0){let o=_(r),d=o.find((p)=>p.text.startsWith(`Package [${s}]`)),c=d?.children.find((p)=>p.text==="requested permissions:");if(!d)return;let a=I(d,o),m=d.children.find((p)=>p.text==="install permissions:")??a?.children.find((p)=>p.text==="install permissions:"),f=d.children.find((p)=>p.text.startsWith(`User ${n}:`)),S=a?.children.find((p)=>p.text.startsWith(`User ${n}:`)),g=f?.children.find((p)=>p.text==="runtime permissions:")??S?.children.find((p)=>p.text==="runtime permissions:");return{requestedPermissions:new Set(c?.children.map((p)=>p.text)??[]),installPermissions:v(m),runtimePermissions:v(g)}}function A(r){return["shell",`echo $$; exec ${r.join(" ")}`]}function O(r){let s=r.trim();if(!/^\d+$/.test(s))return;let n=Number(s);return Number.isSafeInteger(n)&&n>0?n:void 0}function w(r){let s={pid:void 0},n="",o=!1;return r.on("data",(d)=>{if(o)return;n+=d.toString();let c=n.indexOf(`
|
|
4
|
+
`);if(c===-1&&n.length<=32)return;o=!0,s.pid=O(c===-1?n:n.slice(0,c))}),s}function c5(r,s){let n=r.split(/[\0\s]+/).filter((o)=>o.length>0);return n.length>0&&(n[0]==="screenrecord"||n[0].endsWith("/screenrecord"))&&n.includes(s)}function iee(r,s){if(r.warning=s?.warning??r.warning,r.warning?.includes("rejected --display-id"))r.recordedPanel=void 0}function N(r,s){return r!==void 0&&r!==null&&r!==0&&/usage|unknown (?:option|argument)|unrecognized (?:option|argument)/i.test(s.join(""))}async function j0(r,s,n=20){let o=Error("screenrecord display flag probe timed out");try{await l(r.exitPromise,{timer:s,timeoutMs:n,label:"screenrecord display flag probe",timeoutError:()=>o})}catch(d){if(d!==o)throw u(d,"Android screenrecord startup failed");e.debug("[VideoCapture] screenrecord display flag probe found a live capture")}return N(r.exitState.exitCode,r.stderr)}function M(r,s){if(s!==void 0&&s!=="active")throw new t("Recording a selected Android panel requires API 34 or newer.");let n=Ai(r,"active",{}),o={key:n.key,role:n.role};return{panel:o,activePanel:o,warning:"Android API below 34: recording the default display without a pinned panel."}}function U(r,s){if(!r.displays?.panels.length){if(s!==void 0&&s!=="active")Ai(r,s,{});return}let n=Ai(r,s,{}),o={key:n.key,role:n.role};return{panel:o,activePanel:o}}async function lV(r,s,{request:n,signal:o,timer:d=i}={}){if(LR(r,n),(r.displays?.panels.length??0)<2)return U(r,n);if(r.apiLevel!==void 0&&r.apiLevel<34)return M(r,n);let c=await new hr(d).resolve(r,s,o,!0),a=Ce.observedPanel(r.deviceId),m=a&&r.displays?.panels.some((S)=>S.key===a.key)?a:c.display,f=Ai(r,n,{focusedPanelKey:m.key,activePanelKey:c.display.key,posture:c.display.posture});if(!/^(0|[1-9]\d*)$/.test(f.key))throw new t(`Display panel "${f.key}" has no physical Android display ID.`);return{panel:{key:f.key,role:f.role},physicalId:f.key,activePanel:{key:m.key,role:m.role}}}var Ci=180,d5=170000,HA={gracefulExit:1e4,pkill:8000,tempFileRemove:8000,probe:5000,pkillOpts:{timeoutMs:8000}},L=100;async function W(r,s){if(!r||r.readableEnded||r.destroyed)return;let n=new Promise((d)=>{r.once("end",d),r.once("close",d)}),o=Error("screenrecord stderr drain timed out");try{await l(n,{timer:s,timeoutMs:L,label:"screenrecord stderr drain",timeoutError:()=>o})}catch(d){if(d!==o)throw d;e.debug("[VideoCapture] screenrecord stderr did not end before the drain deadline")}}var D=1000,F=8192,V=1000,j=/\/sdcard\/auto-mobile-[^\s'":]+\.mp4/g,x={maxStderrChars:F};function K0(r){return r.join("").replace(j,"<device recording file>").trim().slice(-V)}function b_(r,s){let n=r.exitCode;if(!(n!==void 0&&n!==null&&n!==0)&&!r.signal)return;let d=r.signal?`signal ${r.signal}`:`code ${n}`,c=r.endedAt?` at ${r.endedAt}`:"",a=K0(s);return`exited${c} with ${d}${a?`: ${a}`:""}`}async function oee(r,s,n,o){n.abortSignal?.throwIfAborted();let[d,c]=o.deviceTempPaths,a=await T(r,{argv:s,deviceTempPath:d},n,o);if(!("failure"in a))return a;if(!n.abortSignal?.aborted)e.warn(`[VideoCapture] ${a.failure.message} ${K0(a.stderr)?"":"stderr was empty; "}retrying once after ${o.timer.now()-a.launchedAtMs} ms since launch.`);await o.cleanupFailedStart(a.devicePid,d),n.abortSignal?.throwIfAborted();let m=await T(r,{argv:s,deviceTempPath:c},n,o);if("failure"in m)throw await o.cleanupFailedStart(m.devicePid,c),n.abortSignal?.throwIfAborted(),m.failure;return m}async function T(r,{argv:s,deviceTempPath:n},o,{device:d,physicalDisplayId:c,timer:a,cleanupFailedStart:m}){let f=[...s,n],S=a.now(),g=await r.spawn(A(f),{signal:o.abortSignal,abortSignalScope:"startup"}),p=w(g.stdout),b=()=>g.kill("SIGTERM");o.abortSignal?.addEventListener("abort",b,{once:!0});let h=[];try{if(o.abortSignal?.aborted)b();let{exitState:y,exitPromise:P}=uk(g,h,x),R,E=c;if(await j0({exitPromise:P,exitState:y,stderr:h},a,D)&&c!==void 0&&d.apiLevel===void 0)R="Android screenrecord rejected --display-id; recording the default display.",e.warn(`[VideoCapture] ${R}`),S=a.now(),g=await r.spawn(A(f.filter((C,k)=>C!=="--display-id"&&f[k-1]!=="--display-id")),{signal:o.abortSignal,abortSignalScope:"startup"}),p=w(g.stdout),h=[],{exitState:y,exitPromise:P}=uk(g,h,x),E=void 0,await j0({exitPromise:P,exitState:y,stderr:h},a,D);if(b_(y,h))return o.abortSignal?.throwIfAborted(),await W(g.stderr,a),{failure:new t(`Android screenrecord ${b_(y,h)} within ${D} ms of launch, so no recording was started.`),stderr:h,devicePid:p,launchedAtMs:S};return{process:g,exitState:y,exitPromise:P,stderr:h,devicePid:p,warning:R,physicalDisplayId:E,launchedAtMs:S,deviceTempPath:n}}catch(y){throw await m(p,n),y}finally{o.abortSignal?.removeEventListener("abort",b)}}class jc extends t{}class fm extends t{deviceId;recordingIds;code="orphan_recorder_active";retryable=!0;constructor(r,s,n){super(`A recorder from before the daemon restart is still running on device '${r}' and could not be stopped. Retry or stop it by id (${s.join(", ")}).`,{cause:n});this.deviceId=r;this.recordingIds=s;this.name="OrphanRecorderActiveError"}toPayload(){return{code:this.code,message:this.message,retryable:this.retryable,deviceId:this.deviceId,recordingIds:this.recordingIds}}}
|
|
5
|
+
export{gn,c5,iee,j0,lV,Ci,d5,HA,K0,b_,oee,jc,fm};
|
|
6
|
+
|
|
7
|
+
//# debugId=882C6167F086E95D64756E2164756E21
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{c2,k9,j$,Ya,Gg,Wae,Yg,bf,Sa}from"./chunk-yf7ympyz.js";import"./chunk-z637nqg8.js";import"./chunk-58wzr3mt.js";export{c2 as DARWIN_PS_LSTART_ENV,Ya as compareProcessGenerationTokens,bf as currentDaemonProcessGenerationToken,k9 as daemonGenerationMatches,j$ as darwinProcessGenerationToken,Wae as processGenerationReadIsCheap,Yg as readDarwinProcessGenerationToken,Gg as readLinuxProcessGenerationToken,Sa as readProcessGenerationTokenForPid};
|
|
3
|
+
|
|
4
|
+
//# debugId=E7730E19C396E45B64756E2164756E21
|