@kaeawc/auto-mobile 0.0.91 → 0.0.92
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/README.md +16 -0
- package/dist/schemas/prototype-icon-names.json +302 -0
- package/dist/src/chunk-09442h7v.js +4 -0
- package/dist/src/chunk-0dfnyfkh.js +5 -0
- package/dist/src/chunk-0e4gm1kj.js +5 -0
- package/dist/src/chunk-0eb8576f.js +4 -0
- package/dist/src/chunk-0rjm4nx7.js +5 -0
- package/dist/src/chunk-0w1spptt.js +6 -0
- package/dist/src/chunk-1zmh2eak.js +4 -0
- package/dist/src/chunk-28k63ha3.js +5 -0
- package/dist/src/chunk-2d4wmp8b.js +4 -0
- package/dist/src/chunk-2e6s75qv.js +78 -0
- package/dist/src/chunk-2v7tw1nj.js +5 -0
- package/dist/src/chunk-32jpxz2y.js +323 -0
- package/dist/src/chunk-34zxqcmq.js +5 -0
- package/dist/src/chunk-3jmvqygr.js +238 -0
- package/dist/src/chunk-3swvfhqt.js +5 -0
- package/dist/src/chunk-44bt78m9.js +5 -0
- package/dist/src/chunk-488vt2bp.js +4 -0
- package/dist/src/chunk-4fgdhcwx.js +5 -0
- package/dist/src/chunk-4jp2se4w.js +4 -0
- package/dist/src/chunk-4pfftt07.js +5 -0
- package/dist/src/chunk-4vhr9e4t.js +4 -0
- package/dist/src/chunk-4xd6zs3y.js +15 -0
- package/dist/src/chunk-51567pg8.js +4 -0
- package/dist/src/chunk-5agqsfev.js +4 -0
- package/dist/src/chunk-5d706gmr.js +4 -0
- package/dist/src/chunk-5kd4rqk7.js +5 -0
- package/dist/src/chunk-5s645vr4.js +4 -0
- package/dist/src/chunk-61t538bm.js +4 -0
- package/dist/src/chunk-6d3mmqxt.js +54 -0
- package/dist/src/chunk-6hyt398x.js +5 -0
- package/dist/src/chunk-6mnr8kpm.js +4 -0
- package/dist/src/chunk-6pg7bqck.js +4 -0
- package/dist/src/chunk-79q5xsdc.js +42 -0
- package/dist/src/chunk-7bdgand3.js +4 -0
- package/dist/src/chunk-84cp9dw5.js +4 -0
- package/dist/src/chunk-86f2h5ww.js +5 -0
- package/dist/src/chunk-8cghfzb2.js +19 -0
- package/dist/src/chunk-8en08r7q.js +5 -0
- package/dist/src/chunk-950qcq1e.js +10 -0
- package/dist/src/chunk-9rkfyt6q.js +5 -0
- package/dist/src/chunk-9tf2p9y9.js +5 -0
- package/dist/src/chunk-9y5bcy28.js +6 -0
- package/dist/src/chunk-a2sc4jm0.js +5 -0
- package/dist/src/chunk-a4k9rt7z.js +5 -0
- package/dist/src/chunk-aa5ng3d1.js +4 -0
- package/dist/src/chunk-ajsrz473.js +5 -0
- package/dist/src/chunk-b3h0a6ca.js +4 -0
- package/dist/src/chunk-b4cxdzwy.js +20 -0
- package/dist/src/chunk-b6a737qt.js +4 -0
- package/dist/src/chunk-bn64x5z5.js +5 -0
- package/dist/src/chunk-bvh649za.js +12 -0
- package/dist/src/chunk-c9nk1r78.js +5 -0
- package/dist/src/chunk-c9tyfg4j.js +26 -0
- package/dist/src/chunk-cfsdfqnm.js +4 -0
- package/dist/src/chunk-cxyf04jc.js +7 -0
- package/dist/src/chunk-d57432wq.js +4 -0
- package/dist/src/chunk-da08tx5v.js +4 -0
- package/dist/src/chunk-eka89q3k.js +4 -0
- package/dist/src/chunk-f2tc08m2.js +4 -0
- package/dist/src/chunk-f8tnk179.js +5 -0
- package/dist/src/chunk-f9s1kkhx.js +5 -0
- package/dist/src/chunk-fbp8a4rx.js +4 -0
- package/dist/src/chunk-fd2z0sze.js +4 -0
- package/dist/src/chunk-fk927f4q.js +54 -0
- package/dist/src/chunk-fxmr3a0f.js +4 -0
- package/dist/src/chunk-gaqwhd44.js +4 -0
- package/dist/src/chunk-ggtd5x5a.js +5 -0
- package/dist/src/chunk-gndcfrm7.js +4 -0
- package/dist/src/chunk-h3n4adc6.js +310 -0
- package/dist/src/chunk-h5pjbb83.js +4 -0
- package/dist/src/chunk-hgnnh302.js +4 -0
- package/dist/src/chunk-hmke8nhx.js +5 -0
- package/dist/src/chunk-j2bx12hn.js +4 -0
- package/dist/src/chunk-j70y1a2g.js +4 -0
- package/dist/src/chunk-jdqvcq0a.js +5 -0
- package/dist/src/chunk-jhnbfj19.js +55 -0
- package/dist/src/chunk-js1jpyxp.js +6 -0
- package/dist/src/chunk-kbjq0qvb.js +4 -0
- package/dist/src/chunk-kfwx57xd.js +4 -0
- package/dist/src/chunk-km0dy5vc.js +71 -0
- package/dist/src/chunk-kzwctna2.js +4 -0
- package/dist/src/chunk-m9ehyehy.js +4 -0
- package/dist/src/chunk-mct91p1f.js +4 -0
- package/dist/src/chunk-mf9spd4g.js +5 -0
- package/dist/src/chunk-mgrcansb.js +4 -0
- package/dist/src/chunk-mqc1d0eb.js +6 -0
- package/dist/src/chunk-n1zmpk0z.js +4 -0
- package/dist/src/chunk-ncyjf63g.js +4 -0
- package/dist/src/chunk-nr64d21q.js +973 -0
- package/dist/src/chunk-nwm2pq5v.js +168 -0
- package/dist/src/chunk-pm06b05d.js +9 -0
- package/dist/src/chunk-q50s00ry.js +4 -0
- package/dist/src/chunk-qv2918jt.js +4 -0
- package/dist/src/chunk-qwye1958.js +14 -0
- package/dist/src/chunk-r0f1q783.js +5 -0
- package/dist/src/chunk-r14wwk37.js +18 -0
- package/dist/src/chunk-r20pe1nv.js +5 -0
- package/dist/src/chunk-r8z9pfve.js +5 -0
- package/dist/src/chunk-rdpgkjf6.js +4 -0
- package/dist/src/chunk-rkr0dks9.js +5 -0
- package/dist/src/chunk-rn84t3sf.js +11 -0
- package/dist/src/chunk-s123kn7n.js +4 -0
- package/dist/src/chunk-s1zq65ny.js +4 -0
- package/dist/src/chunk-s73qn3fx.js +4 -0
- package/dist/src/chunk-sjn0nj4p.js +5 -0
- package/dist/src/chunk-sns0c35v.js +7 -0
- package/dist/src/chunk-stfzjr9y.js +8 -0
- package/dist/src/chunk-sz1a7p43.js +4 -0
- package/dist/src/chunk-t4dr5c8v.js +8 -0
- package/dist/src/chunk-tc8k9c1j.js +4 -0
- package/dist/src/chunk-teznhase.js +4 -0
- package/dist/src/chunk-ty9xgmz4.js +4 -0
- package/dist/src/chunk-tyazf3sk.js +145 -0
- package/dist/src/chunk-v6npjrjm.js +5 -0
- package/dist/src/chunk-v90es00d.js +4 -0
- package/dist/src/chunk-vbvtzkwz.js +5 -0
- package/dist/src/chunk-vefd8qee.js +8 -0
- package/dist/src/chunk-vs9r72ta.js +17 -0
- package/dist/src/chunk-w2mwa0jk.js +4 -0
- package/dist/src/chunk-w7zsh13a.js +9 -0
- package/dist/src/chunk-w88k0bgr.js +4 -0
- package/dist/src/chunk-wry6skrm.js +4 -0
- package/dist/src/chunk-wzdt0enk.js +4 -0
- package/dist/src/chunk-xhhv854c.js +4 -0
- package/dist/src/chunk-y58270hd.js +4 -0
- package/dist/src/chunk-yk0hmbex.js +4 -0
- package/dist/src/chunk-ympy4fdz.js +28 -0
- package/dist/src/chunk-yw436axy.js +4 -0
- package/dist/src/chunk-z04jrpjy.js +5 -0
- package/dist/src/chunk-z2xznczw.js +4 -0
- package/dist/src/chunk-z4xnrgps.js +4 -0
- package/dist/src/chunk-z7csyszv.js +4 -0
- package/dist/src/chunk-z8t0v07j.js +11 -0
- package/dist/src/chunk-z916af47.js +228 -0
- package/dist/src/chunk-zcr8he8q.js +5 -0
- package/dist/src/chunk-zd9vmkzn.js +9 -0
- package/dist/src/chunk-zg67wjkh.js +5 -0
- package/dist/src/chunk-zj939v0h.js +5 -0
- package/dist/src/chunk-zkdjwtc1.js +4 -0
- package/dist/src/chunk-zkv5kzt6.js +4 -0
- package/dist/src/daemon/processEntry.js +4 -0
- package/dist/src/index.js +4 -2843
- package/dist/src/runtime/bunRuntimeGuard.js +4 -0
- package/dist/src/utils/workers/iosBundleExtractWorker.js +2 -3
- package/package.json +5 -5
- package/schemas/README.md +16 -0
- package/schemas/prototype-icon-names.json +302 -0
- package/node_modules/@borewit/text-codec/README.md +0 -87
- package/node_modules/@jimp/diff/node_modules/pixelmatch/README.md +0 -110
- package/node_modules/@jimp/diff/node_modules/pixelmatch/node_modules/pngjs/README.md +0 -433
- package/node_modules/@jimp/file-ops/dist/browser/index.js +0 -8
- package/node_modules/@jimp/js-png/README.md +0 -35
- package/node_modules/@jimp/js-png/src/__image_snapshots__/index-node-test-ts-png-should-use-png-options-1-snap.png +0 -0
- package/node_modules/@jimp/js-png/src/output.png +0 -0
- package/node_modules/@jimp/js-png/vitest.config.browser.mjs +0 -3
- package/node_modules/@jimp/plugin-resize/README.md +0 -12
- package/node_modules/@jimp/plugin-resize/vitest.config.browser.mjs +0 -3
- package/node_modules/@tokenizer/inflate/README.md +0 -114
- package/node_modules/@tokenizer/token/README.md +0 -19
- package/node_modules/await-to-js/README.md +0 -82
- package/node_modules/debug/README.md +0 -481
- package/node_modules/exif-parser/README.md +0 -83
- package/node_modules/file-type/readme.md +0 -667
- package/node_modules/ieee754/README.md +0 -51
- package/node_modules/mime/README.md +0 -178
- package/node_modules/ms/readme.md +0 -59
- package/node_modules/parse-bmfont-xml/README.md +0 -74
- package/node_modules/parse-bmfont-xml/lib/browser.js +0 -85
- package/node_modules/parse-bmfont-xml/node_modules/xml2js/README.md +0 -507
- package/node_modules/pngjs/README.md +0 -287
- package/node_modules/sax/README.md +0 -228
- package/node_modules/strtok3/README.md +0 -795
- package/node_modules/tinycolor2/README.md +0 -492
- package/node_modules/tinycolor2/cjs/test.js +0 -2191
- package/node_modules/tinycolor2/cjs/test_template.js +0 -26
- package/node_modules/tinycolor2/deno_asserts@0.168.0.mjs +0 -807
- package/node_modules/tinycolor2/esm/test.js +0 -2189
- package/node_modules/tinycolor2/esm/test_template.js +0 -24
- package/node_modules/tinycolor2/tinycolor.js +0 -1191
- package/node_modules/token-types/README.md +0 -160
- package/node_modules/uint8array-extras/readme.md +0 -318
- package/node_modules/xml-parse-from-string/README.md +0 -35
- package/node_modules/xmlbuilder/README.md +0 -86
- package/node_modules/zod/README.md +0 -208
- package/node_modules/zod/v4/locales/ar.d.cts +0 -4
- package/node_modules/zod/v4/locales/ar.d.ts +0 -4
- package/node_modules/zod/v4/locales/az.d.cts +0 -4
- package/node_modules/zod/v4/locales/az.d.ts +0 -4
- package/node_modules/zod/v4/locales/be.d.cts +0 -4
- package/node_modules/zod/v4/locales/be.d.ts +0 -4
- package/node_modules/zod/v4/locales/ca.d.cts +0 -4
- package/node_modules/zod/v4/locales/ca.d.ts +0 -4
- package/node_modules/zod/v4/locales/cs.d.cts +0 -4
- package/node_modules/zod/v4/locales/cs.d.ts +0 -4
- package/node_modules/zod/v4/locales/de.d.cts +0 -4
- package/node_modules/zod/v4/locales/de.d.ts +0 -4
- package/node_modules/zod/v4/locales/en.d.cts +0 -5
- package/node_modules/zod/v4/locales/en.d.ts +0 -5
- package/node_modules/zod/v4/locales/eo.d.cts +0 -5
- package/node_modules/zod/v4/locales/eo.d.ts +0 -5
- package/node_modules/zod/v4/locales/es.d.cts +0 -4
- package/node_modules/zod/v4/locales/es.d.ts +0 -4
- package/node_modules/zod/v4/locales/fa.d.cts +0 -4
- package/node_modules/zod/v4/locales/fa.d.ts +0 -4
- package/node_modules/zod/v4/locales/fi.d.cts +0 -4
- package/node_modules/zod/v4/locales/fi.d.ts +0 -4
- package/node_modules/zod/v4/locales/fr-CA.d.cts +0 -4
- package/node_modules/zod/v4/locales/fr-CA.d.ts +0 -4
- package/node_modules/zod/v4/locales/fr.d.cts +0 -4
- package/node_modules/zod/v4/locales/fr.d.ts +0 -4
- package/node_modules/zod/v4/locales/he.d.cts +0 -4
- package/node_modules/zod/v4/locales/he.d.ts +0 -4
- package/node_modules/zod/v4/locales/hu.d.cts +0 -4
- package/node_modules/zod/v4/locales/hu.d.ts +0 -4
- package/node_modules/zod/v4/locales/id.d.cts +0 -4
- package/node_modules/zod/v4/locales/id.d.ts +0 -4
- package/node_modules/zod/v4/locales/index.d.cts +0 -39
- package/node_modules/zod/v4/locales/index.d.ts +0 -39
- package/node_modules/zod/v4/locales/it.d.cts +0 -4
- package/node_modules/zod/v4/locales/it.d.ts +0 -4
- package/node_modules/zod/v4/locales/ja.d.cts +0 -4
- package/node_modules/zod/v4/locales/ja.d.ts +0 -4
- package/node_modules/zod/v4/locales/kh.d.cts +0 -4
- package/node_modules/zod/v4/locales/kh.d.ts +0 -4
- package/node_modules/zod/v4/locales/ko.d.cts +0 -4
- package/node_modules/zod/v4/locales/ko.d.ts +0 -4
- package/node_modules/zod/v4/locales/mk.d.cts +0 -4
- package/node_modules/zod/v4/locales/mk.d.ts +0 -4
- package/node_modules/zod/v4/locales/ms.d.cts +0 -4
- package/node_modules/zod/v4/locales/ms.d.ts +0 -4
- package/node_modules/zod/v4/locales/nl.d.cts +0 -4
- package/node_modules/zod/v4/locales/nl.d.ts +0 -4
- package/node_modules/zod/v4/locales/no.d.cts +0 -4
- package/node_modules/zod/v4/locales/no.d.ts +0 -4
- package/node_modules/zod/v4/locales/ota.d.cts +0 -4
- package/node_modules/zod/v4/locales/ota.d.ts +0 -4
- package/node_modules/zod/v4/locales/pl.d.cts +0 -4
- package/node_modules/zod/v4/locales/pl.d.ts +0 -4
- package/node_modules/zod/v4/locales/ps.d.cts +0 -4
- package/node_modules/zod/v4/locales/ps.d.ts +0 -4
- package/node_modules/zod/v4/locales/pt.d.cts +0 -4
- package/node_modules/zod/v4/locales/pt.d.ts +0 -4
- package/node_modules/zod/v4/locales/ru.d.cts +0 -4
- package/node_modules/zod/v4/locales/ru.d.ts +0 -4
- package/node_modules/zod/v4/locales/sl.d.cts +0 -4
- package/node_modules/zod/v4/locales/sl.d.ts +0 -4
- package/node_modules/zod/v4/locales/sv.d.cts +0 -4
- package/node_modules/zod/v4/locales/sv.d.ts +0 -4
- package/node_modules/zod/v4/locales/ta.d.cts +0 -4
- package/node_modules/zod/v4/locales/ta.d.ts +0 -4
- package/node_modules/zod/v4/locales/th.d.cts +0 -4
- package/node_modules/zod/v4/locales/th.d.ts +0 -4
- package/node_modules/zod/v4/locales/tr.d.cts +0 -5
- package/node_modules/zod/v4/locales/tr.d.ts +0 -5
- package/node_modules/zod/v4/locales/ua.d.cts +0 -4
- package/node_modules/zod/v4/locales/ua.d.ts +0 -4
- package/node_modules/zod/v4/locales/ur.d.cts +0 -4
- package/node_modules/zod/v4/locales/ur.d.ts +0 -4
- package/node_modules/zod/v4/locales/vi.d.cts +0 -4
- package/node_modules/zod/v4/locales/vi.d.ts +0 -4
- package/node_modules/zod/v4/locales/zh-CN.d.cts +0 -4
- package/node_modules/zod/v4/locales/zh-CN.d.ts +0 -4
- package/node_modules/zod/v4/locales/zh-TW.d.cts +0 -4
- package/node_modules/zod/v4/locales/zh-TW.d.ts +0 -4
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Xt,U,q,ne,le,v,$n,F,S,Vo,Ke,o,R,W,Im,YL,Ot,cz,Ls,k}from"./chunk-h3n4adc6.js";import{i,Q,l,e}from"./chunk-z8t0v07j.js";import{vh,Kq,Gq,vF,O4,bF,Yq,Jq,qS,VS,Xq,Jx,Gy,M4,SF}from"./chunk-0e4gm1kj.js";import{dm,At,Zl}from"./chunk-6d3mmqxt.js";import{r,t,u}from"./chunk-9rkfyt6q.js";import{Lt}from"./chunk-2v7tw1nj.js";var tr={smaller:0.85,larger:1.15},Pf=72,Af=1280;function Ze(s,n){if(typeof s==="number"){let c=Math.round(s);if(c<Pf)return{error:`Cannot set display density: ${c} dpi is below Android's ${Pf} dpi minimum.`};if(c>Af)return{error:`Cannot set display density: ${c} dpi exceeds Android's ${Af} dpi maximum.`};return{command:`shell wm density ${c}`,target:c}}if(s==="default")return{command:"shell wm density reset",target:"default"};if(n===void 0)return{error:`Cannot resolve relative density bucket '${s}': the device's physical density could not be read.`};let a=Math.round(n*tr[s]);if(a<Pf)return{error:`Cannot resolve relative density bucket '${s}': ${a} dpi is below Android's ${Pf} dpi minimum.`};if(a>Af)return{error:`Cannot resolve relative density bucket '${s}': ${a} dpi exceeds Android's ${Af} dpi maximum.`};return{command:`shell wm density ${a}`,target:a}}function je(s,n,a){if(n!==void 0)(a.invalidate??Ls)(s.deviceId,"Display density changed by displayConfig")}function rr(s,n){let a=s.scopes??["0"],c=(n.scopes??["0"]).filter((d)=>!a.includes(d));if(c.length===0)return!1;return s.commands=[...s.commands,...n.commands],s.scopes=[...a,...c],!0}class qe{entries=new Map;has(s,n){return this.entries.get(s)?.actions.has(n)??!1}record(s,n,a){let c=this.entries.get(s.deviceId)??{device:s,actions:new Map};if(this.entries.set(s.deviceId,c),c.device=s,a!==void 0)c.owner=a;let d=c.actions.get(n.facet);if(d?.facet==="display"&&n.facet==="display"){let p=Object.keys(n.values).some((f)=>!(f in d.values));return d.values={...n.values,...d.values},p}if(d&&"commands"in d&&"commands"in n)return rr(d,n);if(d)return!1;return c.actions.set(n.facet,n),!0}forget(s,n){let a=this.entries.get(s);if(a?.actions.delete(n),a&&a.actions.size===0)this.entries.delete(s)}forgetScopes(s,n,a){let c=this.entries.get(s)?.actions.get(n);if(!c||!("commands"in c))return;let d=c.scopes??["0"],p=d.flatMap((f,m)=>a.includes(f)?[]:[m]);if(p.length===0){this.forget(s,n);return}c.commands=p.map((f)=>c.commands[f]),c.scopes=p.map((f)=>d[f])}pending(s){return[...this.entries.get(s)?.actions.values()??[]].reverse()}restoresOnRelease(s){return this.entries.get(s)?.owner!==void 0}takeOwnedBy(s,n){let a=this.entries.get(s);if(a?.owner!==n)return;return this.entries.delete(s),{device:a.device,actions:[...a.actions.values()].reverse()}}retireDevice(s){this.entries.delete(s)}}var xl=new qe;var ir=29,sr=29,B8=["none","corner","double","hole","tall","waterfall"],$8=["gestural","threebutton","twobutton"],nr="com.android.internal.display.cutout.emulation.",or="com.android.internal.systemui.navbar.",de="debug.hwui.force_dark";async function Ye(s,n,a){o(a);let c=await s.executeCommand(n,{noRetry:!0,signal:a}),d=c.stderr??"";if(Ke(c.stdout,d))throw new t(`'${n}' failed: ${`${c.stdout}
|
|
3
|
+
${d}`.trim()}`);return c.stdout}function X(s,n){return Ye(s.deps.shell,n,s.deps.signal)}async function fe(s,n){for(let a of n)await X(s,a)}function Xe(s,n){return s.apiLevel!==null&&s.apiLevel<n?`needs API ${n}+, device is API ${s.apiLevel}`:void 0}function ar(s){return s.match(/Override size:\s*(\d+x\d+)/)?.[1]}function me(s){return[...s.matchAll(/^\s*\[(x| )\]\s+(\S+)/gm)].map((n)=>({name:n[2],enabled:n[1]==="x"}))}async function ye(s,n,a){let c=s.registry.record(s.device,n,s.deps.owner);try{await a()}catch(d){if(c)s.registry.forget(s.device.deviceId,n.facet);throw d}}async function lr(s,n){let a=ar(await X(s,"shell wm size")),c=a?`shell wm size ${a}`:"shell wm size reset",d=n==="default"?"shell wm size reset":`shell wm size ${n}`;return await ye(s,{facet:"screenSize",commands:[c]},()=>fe(s,[d])),le(s.device.deviceId)?{step:"screenSize",status:"applied",detail:d}:{step:"screenSize",status:"partial",detail:`${d} (physical device: best effort)`}}function cr(s){return{...s.fontScale!==void 0?{fontScale:s.fontScale}:{},...s.density!==void 0?{density:s.density}:{},...s.forceDark===!0?{theme:"dark"}:{}}}function ur(s,n){let a=s.previous??{},c=a.fontScale;return{...n.fontScale!==void 0&&c!==void 0?{fontScale:c}:{},...n.density!==void 0&&a.density!==void 0?{density:a.density}:{},...n.theme!==void 0&&a.theme!==void 0?{theme:a.theme}:{}}}async function dr(s,n){let a=await s.deps.displayConfig.setConfig(n),c=ur(a,n);if(Object.keys(c).length>0)s.registry.record(s.device,{facet:"display",values:c},s.deps.owner);let d=Object.keys(n).join(", ");if(!a.success)return{step:"display",status:"failed",detail:a.error??`displayConfig ${d} failed`};let p=n.density!==void 0&&a.supported.density==="partial";return{step:"display",status:p?"partial":"applied",detail:p?`displayConfig ${d} (density is best effort on this device)`:`displayConfig ${d}`}}async function We(s,n,a,c){let d=Xe(s,ir);if(d)return{step:n,status:"unsupported",detail:d};let p=me(await X(s,"shell cmd overlay list android")),f=c===void 0?void 0:`${a}${c}`;if(f&&!p.some((D)=>D.name===f))return{step:n,status:"unsupported",detail:`overlay ${f} is not on this system image`};let m=p.filter((D)=>D.name.startsWith(a)&&D.enabled),y=m[0]?[`shell cmd overlay enable-exclusive --category ${m[0].name}`]:f?[`shell cmd overlay disable ${f}`]:[],g=f?[`shell cmd overlay enable-exclusive --category ${f}`]:m.map((D)=>`shell cmd overlay disable ${D.name}`);return await ye(s,{facet:n,commands:y},()=>fe(s,g)),{step:n,status:"applied",detail:g.join("; ")||"already none"}}async function pr(s,n){let a=Xe(s,sr);if(a)return{step:"forceDark",status:"unsupported",detail:a};let c=(await X(s,`shell getprop ${de}`)).trim(),d=`shell setprop ${de} ${n}`;return await ye(s,{facet:"forceDark",commands:[`shell setprop ${de} ${S(c)}`]},()=>fe(s,[d])),{step:"forceDark",status:"applied",detail:`${d}; applies to activities started afterwards, so relaunch the app`}}async function fr(s,n){let a=await s.deps.posture.read(s.deps.signal),c=await s.deps.posture.set(n,s.deps.signal);if(c.status==="unsupported")return{step:"posture",status:"unsupported",detail:c.detail};if(a===void 0)return{step:"posture",status:"partial",detail:`posture ${n} set, but the previous posture was unreadable, so reset cannot restore it`};return s.registry.record(s.device,{facet:"posture",posture:a},s.deps.owner),{step:"posture",status:"applied",detail:`posture ${n}`}}function mr(s){return s==="none"?void 0:s}function yr(s,n){let a=[],{screenSize:c,cutout:d,navigationMode:p,forceDark:f,posture:m}=n,y=cr(n);if(c!==void 0)a.push(["screenSize",()=>lr(s,c)]);if(Object.keys(y).length>0)a.push(["display",()=>dr(s,y)]);if(d!==void 0)a.push(["cutout",()=>We(s,"cutout",nr,mr(d))]);if(p!==void 0)a.push(["navigationMode",()=>We(s,"navigationMode",or,p)]);if(f!==void 0)a.push(["forceDark",()=>pr(s,f)]);if(m!==void 0)a.push(["posture",()=>fr(s,m)]);return a}async function gr(s,n){try{return await n()}catch(a){return e.warn(`displayProfile ${s} step failed: ${r(a)}`,a),{step:s,status:"failed",detail:u(a,`${s} failed`).message}}}function hr(s){let n=s.screenSize;if(n!==void 0&&n!=="default"&&!/^\d+x\d+$/.test(n))throw new t(`screenSize must be WIDTHxHEIGHT (e.g. 1080x2400) or default, not '${n}'.`)}function Sr(s){if(s.every((n)=>n.status==="applied"))return"applied";return s.some((n)=>n.status==="applied"||n.status==="partial")?"partial":"unsupported"}function pe(s){return s.map((n)=>`${n.step}: ${n.detail??n.status}`).join("; ")}async function He(s,n){if(s.platform!=="android")throw new t(`displayProfile is Android-only; ${s.deviceId} is ${s.platform}. Use displayConfig and setPosture on iOS.`);let a=await Ot(n.shell,void 0,void 0,n.signal);return{device:s,deps:n,registry:n.registry??xl,apiLevel:a}}async function x1(s,n,a){hr(n);let c=await He(s,a),d=yr(c,n);if(d.length===0)throw new t("displayProfile apply needs at least one display field.");let p=[];for(let[g,D]of d)p.push(await gr(g,D));if(!p.some((g)=>g.status==="applied"||g.status==="partial")&&p.some((g)=>g.status==="failed"))throw new t(`displayProfile changed nothing on ${s.deviceId}: ${pe(p)}`);let m=c.registry.pending(s.deviceId).map((g)=>g.facet),y=Sr(p);return{message:`Applied display profile to ${s.deviceId} (${y}): ${pe(p)}`,deviceId:s.deviceId,action:"apply",status:y,steps:p,...m.length>0?{restore:{facets:m,onSessionRelease:c.registry.restoresOnRelease(s.deviceId)}}:{}}}async function mG(s,n,a){switch(n.facet){case"display":{let c=await s.displayConfig.setConfig(n.values);if(!c.success)throw new t(c.error??"displayConfig restore failed");return}case"posture":{let c=await s.posture.set(n.posture,a);if(c.status!=="applied")throw new t(c.detail??`posture ${n.posture} could not be restored`);return}default:for(let c of n.commands)await Ye(s.shell,c,a)}}async function C1(s,n){let a=await He(s,n),c=[];for(let p of a.registry.pending(s.deviceId))try{await mG(n,p,n.signal),a.registry.forget(s.deviceId,p.facet),c.push({step:p.facet,status:"applied"})}catch(f){e.warn(`displayProfile restore of ${p.facet} failed: ${r(f)}`,f),c.push({step:p.facet,status:"failed",detail:u(f,`restore ${p.facet} failed`).message})}let d=c.filter((p)=>p.status==="failed");if(d.length>0)throw new t(`displayProfile reset on ${s.deviceId} failed: ${pe(d)}`);return{message:c.length===0?`No displayProfile change is recorded on ${s.deviceId}; nothing was changed.`:`Restored ${c.map((p)=>p.step).join(", ")} on ${s.deviceId}`,deviceId:s.deviceId,action:"reset",status:"applied",steps:c}}var PP=["size","navigationMode","displayCutout"],Qe="size, navigationMode and displayCutout are Android only (`wm size` and `cmd overlay`).",vr={navigationMode:"Navigation mode",displayCutout:"Display cutout"},Dr={navigationMode:"navigationMode",displayCutout:"cutout"},br="0",wr=/^[A-Za-z0-9_.:]+$/,Cr=["screenSize","navigationMode","cutout"],Ar="shell cmd overlay list android";function O(s){return PP.some((n)=>s[n]!==void 0)}function et(s){return Object.fromEntries(Object.entries(s).filter(([n,a])=>a!==void 0&&!PP.includes(n)&&!(n==="reset"&&a===!1)))}function tt(s){let n=s.platform==="android";return{size:n?le(s.deviceId)?!0:"partial":!1,navigationMode:n,displayCutout:n}}function H(s){let n=bF("navigationMode",vF(s,"navigationMode")),a=bF("displayCutout",vF(s,"displayCutout"));return{...n===void 0?{}:{navigationMode:n},...a===void 0?{}:{displayCutout:a}}}function Je(s){return{navigationMode:Yq(s,"navigationMode"),displayCutout:Yq(s,"displayCutout")}}class ge{device;adb;options;registry;invalidate;constructor(s,n,a={}){this.device=s;this.adb=n;this.options=a;this.registry=a.registry??xl,this.invalidate=a.invalidate??Ls}get displayId(){return this.options.displayId??0}async run(s){let n=await this.adb.executeCommand(s,{noRetry:!0});if(Ke(n.stdout,n.stderr??""))throw Error(`'${s}' reported: ${`${n.stdout} ${n.stderr??""}`.trim()}`);return n.stdout}async runChecked(s,n){try{return await this.run(s),[]}catch(a){return e.warn(`[DisplayGeometry] ${n} command failed: ${r(a)}`,a),[`${n}: '${s}' failed: ${r(a)}`]}}async readSize(){let s=await this.run(VS(this.options.displayId)),n=qS(s);if(n===void 0)throw Error(`could not parse 'wm size' output: ${s.trim()||"(empty)"}`);return n}async readOverlays(){let s=me(await this.run(Ar)).filter((n)=>wr.test(n.name)).map((n)=>({packageName:n.name,enabled:n.enabled}));if(s.length===0)throw Error("could not parse 'cmd overlay list' output");return s}async read(){let[s,n]=await Promise.allSettled([this.readSize(),this.readOverlays()]),a={};if(s.status==="fulfilled")a.size=Gy(s.value);else e.warn(`[DisplayGeometry] size read failed: ${r(s.reason)}`,s.reason);if(n.status==="rejected")return e.warn(`[DisplayGeometry] overlay read failed: ${r(n.reason)}`,n.reason),{values:a};return{values:{...a,...H(n.value)},available:Je(n.value)}}async prepare(s){let n=this.overlaySteps(s);try{let a={previous:{}};if(s.size!==void 0){let c=await this.readSize(),d=this.sizeRefusal(s.size,c);if(d)return{refusal:d};a.size={current:c,target:s.size},a.previous.size=Jx(c)}if(n.length>0){let c=await this.readOverlays(),d=this.overlayRefusal(s,c);if(d)return{refusal:d};a.overlays={entries:c,steps:n},a.available=Je(c),Object.assign(a.previous,H(c))}return a}catch(a){return e.warn(`[DisplayGeometry] pre-read failed: ${r(a)}`,a),{refusal:`Could not read the display geometry: ${r(a)}`}}}overlaySteps(s){return["navigationMode","displayCutout"].flatMap((n)=>{let a=s[n];return a===void 0?[]:[{group:n,target:O4(n,a)}]})}sizeRefusal(s,n){if(s==="default"||n.physical===void 0)return;let{width:a,height:c}=n.physical,d=a*Kq,p=c*Kq;if(s.width<vh||s.height<vh||s.width>d||s.height>p)return`Cannot set display size ${SF(s)}: Android clamps each side to ${vh}..${Kq}x the physical size (${vh}-${d} x ${vh}-${p} px for this ${SF(n.physical)} display, natural orientation).`;return}overlayRefusal(s,n){let a=["navigationMode","displayCutout"].flatMap((c)=>{let d=s[c],p=Yq(n,c);return d===void 0||p.includes(d)?[]:[`${c} '${d}' is not available on this system image; its overlays allow: ${p.join(", ")}.`]});return a.length>0?a.join(" "):void 0}async apply(s){let n=[],a=await this.applySize(s.size,n),c=await this.applyOverlays(s.overlays,n);if(a||c)this.invalidate(this.device.deviceId,"Display geometry changed by displayConfig");let d=await this.verify(s,n);return{previous:s.previous,...d?{applied:d}:{},...s.available?{available:s.available}:{},errors:n}}async applySize(s,n){if(!s||M4(Jx(s.current),s.target))return!1;this.registry.record(this.device,{facet:"screenSize",commands:[Xq(Jx(s.current),this.options.displayId)],scopes:[String(this.displayId)]},this.options.owner);let a=Xq(s.target,this.options.displayId);return n.push(...await this.runChecked(a,"size")),!0}async applyOverlays(s,n){let a=!1;for(let c of s?.steps??[]){let d=s?.entries??[],p=vF(d,c.group),f=Jq(p,c.target);if(f.length>0)this.recordOverlayOriginal(d,c.group,p),a=!0;for(let m of f){let y=await this.runChecked(m,c.group);if(n.push(...y),y.length>0)break}}return a}recordOverlayOriginal(s,n,a){let c=Gq(s,n).map((d)=>d.packageName);this.registry.record(this.device,{facet:Dr[n],commands:Jq(c,a)},this.options.owner)}async verify(s,n){let a={};try{if(s.size){let c=await this.readSize();a.size=Gy(c);let d=s.size.target==="default"?Jx(c):a.size;if(!M4(d,s.size.target))n.push(`Display size remained ${SF(d)} after requesting ${SF(s.size.target)}.`)}if(s.overlays){let c=await this.readOverlays();Object.assign(a,H(c));for(let d of s.overlays.steps)this.verifyOverlayStep(d,vF(c,d.group),n)}return a}catch(c){return e.warn(`[DisplayGeometry] post-read failed: ${r(c)}`,c),n.push(`failed to read applied display geometry: ${r(c)}`),Object.keys(a).length>0?a:void 0}}verifyOverlayStep(s,n,a){if(Jq(n,s.target).length>0)a.push(`${vr[s.group]} remained ${String(bF(s.group,n)??n.join(", "))} after requesting ${String(bF(s.group,s.target)??s.target.join(", "))}.`)}async reset(){let s=[],n=await this.snapshot(),a=this.registry.pending(this.device.deviceId).flatMap((f)=>("commands"in f)&&Cr.includes(f.facet)?[f]:[]),c=String(this.displayId),d=!1;for(let f of a){let m=f.scopes??[br],y=f.facet==="screenSize"?m.indexOf(c):-1;if(f.facet==="screenSize"&&y<0)continue;d||=f.facet==="screenSize";let g=f.facet==="screenSize"?[f.commands[y]]:f.commands;if(!await this.runAll(g,f.facet,s))if(f.facet==="screenSize")this.registry.forgetScopes(this.device.deviceId,f.facet,[c]);else this.registry.forget(this.device.deviceId,f.facet)}if(!d)await this.runAll([Xq("default",this.options.displayId)],"size",s);this.invalidate(this.device.deviceId,"Display geometry reset by displayConfig");let p=await this.snapshot();return{previous:n,...Object.keys(p).length>0?{applied:p}:{},errors:s}}async runAll(s,n,a){for(let c of s){let d=await this.runChecked(c,n);if(a.push(...d),d.length>0)return!0}return!1}async snapshot(){let[s,n]=await Promise.allSettled([this.readSize(),this.readOverlays()]);return{...s.status==="fulfilled"?{size:Jx(s.value)}:{},...n.status==="fulfilled"?H(n.value):{}}}}var L=1;function rt(s){let n=s.trim();if(n==="null")return L;if(!/^[+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/.test(n))return;let a=Number(n);return Number.isFinite(a)&&a>0?a:void 0}function he(s){let n=s.trim();return n==="null"?"default":rt(n)}function Se(s){let n=new Map;for(let p of s.matchAll(/^[ \t]*(Physical|Override) density:[ \t]*([^\r\n]*)/gim)){let f=p[1].toLowerCase(),m=p[2].trim(),y=Number(m);if(!/^\d+$/.test(m)||!Number.isSafeInteger(y)||y<=0||n.has(f))return{effective:void 0,overridden:!1};n.set(f,y)}let a=n.get("physical"),c=n.get("override"),d=c!==void 0&&Number.isFinite(c);return{...a!==void 0&&Number.isFinite(a)?{physical:a}:{},effective:d?c:a!==void 0&&Number.isFinite(a)?a:void 0,overridden:d}}function ve(s){switch((s.match(/Night mode:\s*(\w+)/i)?.[1]??s.trim()).toLowerCase()){case"yes":return"dark";case"no":return"light";case"auto":return"system";case"custom":return"custom";default:return}}function De(s){switch(s){case"dark":return"yes";case"light":return"no";case"system":return"auto";case"custom":return"custom"}}var D1=["extra-small","small","medium","large","extra-large","extra-extra-large","extra-extra-extra-large","accessibility-medium","accessibility-large","accessibility-extra-large","accessibility-extra-extra-large","accessibility-extra-extra-extra-large"],be="large",N={"extra-small":14,small:15,medium:16,large:17,"extra-large":19,"extra-extra-large":21,"extra-extra-extra-large":23,"accessibility-medium":28,"accessibility-large":33,"accessibility-extra-large":40,"accessibility-extra-extra-large":47,"accessibility-extra-extra-extra-large":53};function Ir(s){return Math.round(N[s]/N.large*100)/100}function Pr(s){let n=s*N.large;return D1.reduce((a,c)=>Math.abs(N[c]-n)<=Math.abs(N[a]-n)?c:a)}function we(s){return D1.includes(s)}function Rr(s){return s==="default"?be:Pr(s)}var it=new Map;Xt({name:"ios-display-config-content-size-baselines",onDeviceIdentityReplaced:(s)=>it.delete(s),onDeviceIncarnationChanged:()=>{}});var st={get:()=>{return},set:()=>{},delete:()=>{}},z="density is not supported on iOS: there is no simctl, defaults or XCUITest control for display density.";class Ce{device;simctl;baselines;constructor(s,n,a=it){this.device=s;this.simctl=n;this.baselines=a}clearBaseline(){this.baselines.delete(this.device.deviceId)}async read(){let[s,n]=await Promise.all([this.readTheme(),this.readContentSizeOrUndefined()]);return{theme:s,...$r(n)}}async readRestorable(){let[s,n]=await Promise.all([this.readThemeOrUndefined(),this.readContentSizeOrUndefined()]);return{...s!==void 0?{theme:s}:{},...n!==void 0?{contentSize:n}:{}}}async set(s){let n=s.reset===!0,a=n?this.baselines.get(this.device.deviceId):xr(s),c=await this.readPrevious(a!==void 0);if(!n&&a!==void 0&&c.contentSize!==void 0)this.recordBaseline(c.contentSize);let d=n?"light":s.theme,p=await this.apply(s,d,a),{applied:f,readError:m}=await this.readApplied();p.push(...m?[m]:[],...Er(f,d,a));let y=n?this.confirmRestore(f,a):void 0;return{previous:c,...f?{applied:f}:{},errors:p,...y?{restoredContentSize:y}:{}}}async apply(s,n,a){return[...s.density!==void 0&&!s.reset?[z]:[],...n!==void 0?await this.setAppearance(n):[],...a!==void 0?await this.setContentSize(a):[]]}confirmRestore(s,n){if(n===void 0||s?.contentSize!==n)return;return this.baselines.delete(this.device.deviceId),n}recordBaseline(s){if(this.baselines.get(this.device.deviceId)===void 0)this.baselines.set(this.device.deviceId,s)}async readPrevious(s){let[n,a]=await Promise.all([this.readTheme(),s?this.readContentSize():this.readContentSizeOrUndefined()]);return{theme:n,...a!==void 0?{contentSize:a}:{}}}async readApplied(){try{return{applied:await this.read()}}catch(s){return e.warn(`[DisplayConfig] setConfig post-read failed (iOS simulator): ${r(s)}`,s),{readError:`failed to read applied theme: ${r(s)}`}}}async readTheme(){let s=await this.readThemeOrUndefined();if(s===void 0)throw Error("simctl did not report a readable Simulator appearance");return s}async readThemeOrUndefined(){let n=(await this.simctl.executeCommandArgs(["ui",this.device.deviceId,"appearance"])).stdout.trim();return n==="light"||n==="dark"?n:void 0}async readContentSize(){let n=(await this.simctl.executeCommandArgs(["ui",this.device.deviceId,"content_size"])).stdout.trim().toLowerCase();if(!we(n))throw Error(`simctl reported an unknown Simulator content size '${n}'`);return n}async readContentSizeOrUndefined(){try{return await this.readContentSize()}catch(s){e.warn(`[DisplayConfig] content_size read failed on ${this.device.deviceId}: ${r(s)}`,s);return}}async setAppearance(s){if(s!=="light"&&s!=="dark")return[`Cannot set theme '${s}' on the iOS Simulator: 'simctl ui appearance' only accepts 'light' or 'dark'.`];return this.run(["ui",this.device.deviceId,"appearance",s],`appearance ${s}`)}setContentSize(s){return this.run(["ui",this.device.deviceId,"content_size",s],`content_size ${s}`)}async run(s,n){try{return await this.simctl.executeCommandArgs(s),[]}catch(a){return e.warn(`[DisplayConfig] 'simctl ui ${n}' failed: ${r(a)}`,a),[`'simctl ui ${n}' failed: ${r(a)}`]}}}function $r(s){return s===void 0?{}:{contentSize:s,fontScale:Ir(s)}}function xr(s){if(s.contentSize!==void 0)return s.contentSize;return s.fontScale===void 0?void 0:Rr(s.fontScale)}function Er(s,n,a){if(!s)return[];return[...n!==void 0&&s.theme!==n?[`Simulator appearance remained ${s.theme} after requesting ${n}`]:[],...a!==void 0&&s.contentSize!==a?[`Simulator content size remained ${String(s.contentSize)} after requesting ${a}`]:[]]}var nt="[REDACTED]",Tr=new Map([["int","int"],["integer","int"],["boolean","bool"],["bool","bool"],["true","bool"],["false","bool"],["real","float"],["double","float"],["float","float"],["string","string"],["date","date"],["data","data"],["array","array"],["dictionary","dictionary"],["dict","dictionary"]]);function E(s){let n=s.trim().toLowerCase().replace(/^type is\s+/,"");return Tr.get(n)??"unknown"}var ot=Lt(Im());async function U8(s){try{let n=await ot.parseStringPromise(s,{explicitChildren:!0,preserveChildrenOrder:!0,explicitRoot:!1,trim:!1}),a=n["#name"]==="plist"?n.$$?.[0]:void 0;if(!a||a["#name"]!=="dict")throw new t("The iOS UserDefaults plist must contain a dictionary.");return new Map(at(a).map(([c,d])=>{let p=Ae(d);return[c,{type:E(d["#name"]),value:typeof p==="object"?JSON.stringify(p):p}]}))}catch(n){throw u(n,"Failed to parse iOS UserDefaults XML plist")}}function at(s){let n=s.$$??[],a=[];for(let c=0;c<n.length;c+=2){let d=n[c],p=n[c+1];if(d?.["#name"]!=="key"||!p)throw new t("Malformed iOS UserDefaults plist dictionary key/value pair.");a.push([d._??"",p])}return a}function Ae(s){let n=s._??"";switch(s["#name"]){case"dict":return Object.fromEntries(at(s).map(([a,c])=>[a,Ae(c)]));case"array":return(s.$$??[]).map(Ae);case"integer":return _r(n);case"real":return Ie(n);case"true":return!0;case"false":return!1;case"date":return new Date(n).toISOString();case"data":return n.replace(/\s/g,"");case"string":return n;default:throw new t(`Unsupported iOS UserDefaults plist tag '${s["#name"]}'.`)}}function _r(s){if(!/^-?\d+$/.test(s.trim()))throw new t("Invalid integer in iOS UserDefaults plist.");let n=Number(s);return Number.isSafeInteger(n)?n:s.trim()}function Ie(s){let n=s.trim().toLowerCase();if(n==="nan")return"nan";if(["inf","+inf","infinity","+infinity"].includes(n))return"inf";if(["-inf","-infinity"].includes(n))return"-inf";let a=Number(s);if(!Number.isFinite(a))throw new t("Invalid real in iOS UserDefaults plist.");return a}function EM(s){let n=Math.fround(s);if(Number.isNaN(n))return"NaN";if(n===Number.POSITIVE_INFINITY)return"Infinity";if(n===Number.NEGATIVE_INFINITY)return"-Infinity";if(Object.is(n,-0))return"-0.0";if(n===0)return"0.0";let a="";for(let c=1;c<=9;c+=1){let d=n.toPrecision(c);if(Math.fround(Number(d))===n){a=d;break}}return Or(a||String(n),n)}function Or(s,n){let a=/^(-?)(\d+(?:\.\d+)?)(?:e([+-]?\d+))?$/i.exec(s);if(!a)return s;let c=a[1],d=a[2],p=d.indexOf(".")===-1?d.length:d.indexOf("."),f=d.replace(".",""),m=f.search(/[1-9]/),y=f.slice(m).replace(/0+$/,"")||"0",g=Number(a[3]??0)+p-m-1,D=Math.abs(n);if(D<0.001||D>=1e7)return`${c}${y[0]}.${y.slice(1)||"0"}E${g}`;let h=g+1;if(h<=0)return`${c}0.${"0".repeat(-h)}${y}`;if(h>=y.length)return`${c}${y}${"0".repeat(h-y.length)}.0`;return`${c}${y.slice(0,h)}.${y.slice(h)}`}var ee=Lt(Im());function Re(s,n){return`shell run-as ${Vo(s)}${n?` --user ${n}`:""}`}function Fr(s,n){return n?`${s} (user ${n})`:s}function AP(s){let n=s.endsWith(".xml")?s.slice(0,-4):s;if(!/^[A-Za-z0-9_.-]+$/.test(n)||n==="."||n==="..")throw new t("Android SharedPreferences file name must be a safe file name using letters, numbers, underscore, dash, or dot.");return n}async function oy(s,n,a,c){try{return(await s.executeCommand(`${Re(n,c)} cat shared_prefs/${a}.xml`)).stdout}catch(d){if(dt(d))return"<map/>";throw $e("read",d,n,c)}}async function fG(s,n,a,c){try{return{xml:(await s.executeCommand(`${Re(n,c)} cat shared_prefs/${a}.xml`)).stdout,exists:!0}}catch(d){if(dt(d))return{xml:"<map/>",exists:!1};throw $e("read",d,n,c)}}async function TP(s,n,a,{xml:c,userId:d}){let f=`mkdir -p shared_prefs && printf '%s' '${Buffer.from(c,"utf8").toString("base64")}' | base64 -d > shared_prefs/${a}.xml`;try{await s.executeCommand(`${Re(n,d)} sh -c ${Vo(f)}`)}catch(m){throw $e("write",m,n,d)}}async function kP(s){let n=s.trim();if(!n)return{map:{}};try{let a=await ee.parseStringPromise(n,{explicitArray:!0,explicitRoot:!0,trim:!1,explicitChildren:!0,preserveChildrenOrder:!0,charsAsChildren:!0,includeWhiteChars:!0});return zr(Pe(a))}catch(a){throw u(a,"Failed to parse Android SharedPreferences XML")}}function KE(s){return new ee.Builder({xmldec:{version:"1.0",encoding:"utf-8",standalone:!0},renderOpts:{pretty:!1}}).buildObject(s)}function IM(s,n){for(let[a,c]of Object.entries(s.map))if(Array.isArray(c))s.map[a]=c.filter((d)=>d?.$?.name!==n)}function EP(s){if(Array.isArray(s))return s;if(s===void 0||s===null)return[];return[s]}function I(s,n){return EP(s).find((a)=>a?.$?.name===n)??null}var lt="$$",ct="#name",Lr="__text__";function Pe(s){if(Array.isArray(s))return s.map(Pe);if(!J(s))return s;let n={};for(let[c,d]of Object.entries(s))if(c!==lt&&c!==ct)n[c]=c==="$"?d:Pe(d);let a=Nr(s[lt]);if(n._===void 0&&a!==void 0)n._=a;return Object.keys(n).length===1&&typeof n._==="string"?n._:n}function Nr(s){if(!Array.isArray(s)||s.length===0)return;let n=s.filter((a)=>J(a)&&a[ct]===Lr);if(n.length!==s.length)return;return n.map((a)=>String(a._??"")).join("")}function zr(s){if(!J(s))return{map:{}};if(!J(s.map))return{...s,map:{}};return s}function J(s){return typeof s==="object"&&s!==null&&!Array.isArray(s)}function ut(s){let n=s;for(let a=0;a<5&&n instanceof Error;a+=1){let c=n,d=[c.stderr,c.stdout].map((p)=>Buffer.isBuffer(p)?p.toString():p).filter((p)=>typeof p==="string"&&p.length>0);if(d.length>0)return d.join(`
|
|
4
|
+
`);n=n.cause}return r(s).split(`
|
|
5
|
+
`).filter((a)=>!a.includes("Command failed:")).join(`
|
|
6
|
+
`)}var kr=/^run-as: couldn't stat \/data\/user(?:_de)?\/(\d+)\b/m,Mr=/^run-as:/m,Vr=/^cat: [^\n]*shared_prefs\/[^/\s:]+\.xml: No such file or directory/m;function dt(s){let n=ut(s);return!Mr.test(n)&&Vr.test(n)}function $e(s,n,a,c){let d=kr.exec(ut(n))?.[1];if(d!==void 0)return new t(`Cannot ${s} Android SharedPreferences: user ${d} does not exist, or ${a} is not installed for it (run-as could not open /data/user/${d}). Pass a userId of an existing user that has the app installed.`,{cause:n});return new t(`Failed to ${s} Android SharedPreferences via run-as. This requires a debuggable/test build for ${Fr(a,c)}. ${r(n)}`,{cause:n})}var O1=2,M1=2500,H8=5000,q8=/^(?:Command execution failed: )?iOS key-value storage requires \S+ to be the foreground app$/,V8="This value comes from the on-disk plist and may lag a running app because cfprefsd can hold newer values.",Br="defaults write to an absolute path bypasses the preferences daemon. A running app may not see the change, and cfprefsd may later overwrite it with cached state until the app restarts. verified: true proves only file content, not the running app's state.",hG="App-group suites live in the group container and are only reachable through the embedded SDK on this preference route.",IP=1e4,N1=30000,pt=-2147483648,ft=2147483647,Gr={string:"string",bool:"boolean",int:"int",float:"float"},Ur=[["string","STRING"],["boolean","BOOLEAN"],["int","INT"],["long","LONG"],["float","FLOAT"],["set","STRING_SET"],["null","UNKNOWN"]];async function W8(s){let n=await kP(s),a=[];for(let[c,d]of Ur)for(let p of EP(n.map[c])){let f=p.$?.name;if(typeof f!=="string")continue;let m=Zr(c,p);a.push({key:f,type:d,value:m})}return a}function Zr(s,n){if(s==="null")return null;if(s==="string")return n._??"";if(s==="set")return JSON.stringify(mt(n));if(s==="float"){let c=n.$?.value;return c===void 0?null:EM(Number(c))}let a=n.$?.value;return a===void 0?null:String(a)}function gG(s){let n=s.suite??`${s.appId}_preferences`;try{return AP(n)}catch{throw new t("Android SharedPreferences suite must be a safe file name using letters, numbers, underscore, dash, or dot.")}}async function z8(s,n){let c=(await kP(s)).map??{},d=I(c.string,n);if(d)return{type:"string",value:d._??""};let p=Kr(c,n);if(p)return p;let f=I(c.long,n);if(f)return{type:"long",value:Xr(f.$?.value??"")};let m=I(c.set,n);if(m)return{type:"stringSet",value:mt(m)};return null}function Kr(s,n){let a=I(s.boolean,n);if(a)return{type:"bool",value:sy(a.$?.value??"","bool")};let c=I(s.int,n);if(c)return{type:"int",value:sy(c.$?.value??"","int")};let d=I(s.float,n);if(d)return{type:"float",value:sy(d.$?.value??"","float")};return null}async function j8(s,n,a,c){let d=await kP(s);d.map??={},IM(d,n);let p=Gr[c],f=EP(d.map[p]);return f.push(jr(n,a,c)),d.map[p]=f,KE(d)}function mt(s){return EP(s.string).map((n)=>{if(typeof n==="string")return n;return n?._??""})}function jr(s,n,a){if(a==="string")return{_:ay(n),$:{name:s}};if(a==="int")qr(n);return{$:{name:s,value:a==="float"?EM(n):ay(n)}}}function qr(s){if(typeof s!=="number"||!Number.isInteger(s)||s<pt||s>ft)throw new t(`Android SharedPreferences int values must fit in the signed 32-bit range (${pt} to ${ft}).`)}var K8={string:"STRING",int:"INT",bool:"BOOLEAN",float:"FLOAT"};function yG(s){return s==="standard"?"Standard":s}function G8(s){if(!yt(s))throw new t(`iOS UserDefaults SDK write failed: ${r(s)}. The write may or may not have been applied. Read the value through the SDK before retrying; no container write was attempted.`,{cause:s})}function yt(s){let n=r(s);if(/(?:^|: )sdk_unavailable_not_dispatched$/.test(n))return!0;return/^(?:Command execution failed: )?iOS key-value storage requires (?:[A-Za-z0-9_.-]+ to embed and initialize the AutoMobile SDK and call UserDefaultsInspector\.shared\.setEnabled\(true\)|the target app to embed the AutoMobile SDK)$/.test(n)}function vG(s){let n=r(s);return yt(s)||s instanceof YL||n==="CtrlProxy service port changed"||n==="Failed to connect to CtrlProxy"||/^(?:Get preference timeout after \d+ms|iOS UserDefaults request timed out after \d+ms\.)$/.test(n)||/^(?:WebSocket (?:is not open|closed|connection closed)|Connection (?:closed|lost)|connection_lost)$/.test(n)||/^iOS key-value storage requires the target app to embed the AutoMobile SDK, initialize it, and call UserDefaultsInspector\.shared\.setEnabled\(true\): /.test(n)&&/(?:Could not connect to the server|couldn[\u2019']t connect to the server|connection refused|network connection was lost|not connected to the Internet|request timed out)\.?$/i.test(n)||/^iOS key-value storage requires the target app to embed or upgrade the AutoMobile SDK: (?:not_found|HTTP 404)$/.test(n)||/(?:^|: )user_defaults_inspection_disabled$/.test(n)}function _P(s){return s.redacted===!0||s.value===nt}function Y8(s){let n=s.value;if(_P(s))return{type:E(s.type),value:null,redacted:!0};let a=E(s.type);if(n!==null&&(a==="array"||a==="dictionary")){if(Wr(n,a))return{type:a,value:n,valueFormat:"canonical-json"};return{type:"unknown",value:n,valueFormat:"sdk-description",warning:"The SDK could not encode this collection as canonical JSON (older SDKs can fall back for nested Date/Data; unsafe integers are also non-canonical). The raw SDK description may be lossy; the container-plist route, used when the SDK is not connected, returns recursive JSON with ISO/base64 leaves and exact integer strings."}}return{type:a,value:n===null?null:a==="int"?ht(n):a==="bool"?gt(n):a==="float"?Ie(n):n}}function Wr(s,n){try{let a=!1,c=JSON.parse(s,(d,p)=>{if(typeof p==="number"&&Number.isInteger(p)&&!Number.isSafeInteger(p))a=!0;return p});return!a&&(n==="array"?Array.isArray(c):c!==null&&typeof c==="object"&&!Array.isArray(c))}catch(a){return e.debug("iOS SDK collection is not canonical JSON",a),!1}}function Fb(s){let n=s.suite?.trim().toLowerCase();return!n||n==="standard"||!!s.appId&&n===s.appId.toLowerCase()}function _M(s){return Fb(s)?s.appId:GE(s.suite)}function GE(s){if(!/^[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)*$/.test(s))throw new t("iOS UserDefaults suite must be an identifier using letters, numbers, underscore, dash, or dot, without path separators or empty path segments.");return s}function J8(s){switch(s){case"bool":return"-bool";case"int":return"-int";case"float":return"-float";case"string":return"-string"}}function X8(s,n){return sy(ay(s),n)}function sy(s,n){switch(n){case"bool":return gt(s);case"int":return Yr(s);case"float":return Hr(s);case"string":return s}}function Z8(s,n){try{return sy(s,n),!0}catch(a){return e.debug("Preference read-back cannot be parsed as the requested type",a),!1}}function Q8(s,n){if(n===void 0||n==="string")return F1(s);if(n==="int")return ht(s);if(n==="bool"||n==="float")return sy(s,n);return F1(s)}function F1(s){if(s.endsWith(`\r
|
|
7
|
+
`))return s.slice(0,-2);if(s.endsWith(`
|
|
8
|
+
`)||s.endsWith("\r"))return s.slice(0,-1);return s}function eX(s){let n=E(s);return n==="unknown"?void 0:n}function gt(s){let n=s.trim().toLowerCase();if(["1","true","yes"].includes(n))return!0;if(["0","false","no"].includes(n))return!1;throw new t(`Expected bool preference value, got '${s}'.`)}function Yr(s){let n=s.trim();if(!/^-?\d+$/.test(n))throw new t(`Expected int preference value, got '${s}'.`);let a=Number.parseInt(n,10);if(!Number.isSafeInteger(a))throw new t(`Expected int preference value within JavaScript's safe integer range, got '${s}'.`);return a}function ht(s){let n=s.trim();if(!/^-?\d+$/.test(n))throw new t(`Expected int preference value, got '${s}'.`);let a=BigInt(n);if(a<BigInt(Number.MIN_SAFE_INTEGER)||a>BigInt(Number.MAX_SAFE_INTEGER))return n;return Number(a)}function Xr(s){let n=s.trim();if(!/^-?\d+$/.test(n))throw new t(`Expected long preference value, got '${s}'.`);let a=BigInt(n),c=-9223372036854775808n,d=9223372036854775807n;if(a<c||a>d)throw new t(`Expected signed 64-bit long preference value, got '${s}'.`);if(a<BigInt(Number.MIN_SAFE_INTEGER)||a>BigInt(Number.MAX_SAFE_INTEGER))return n;return Number(a)}function Hr(s){let n=s.trim();if(!/^-?(?:\d+|\d*\.\d+)(?:[eE][+-]?\d+)?$/.test(n))throw new t(`Expected float preference value, got '${s}'.`);let a=Number.parseFloat(n);if(!Number.isFinite(a))throw new t(`Expected float preference value, got '${s}'.`);return a}function ay(s){if(s===null)return"";return String(s)}function tX(s,n,a){if(s===null)return!1;return sy(ay(s),a)===n}function Lb(s){let n=r(s).trim(),a=typeof s==="object"&&s!==null&&"stderr"in s&&typeof s.stderr==="string"?s.stderr.trim():"";return[/The domain\/default pair of \([^)]+\) does not exist\.?$/i,/Domain [^\n]+ does not exist\.?$/i,/Domain [^\n]+ not found\.?$/i,/Domain [^\n]+ does not contain (?:a value for )?[^\n]+\.?$/i,/Could not find key '[^'\n]+' in domain '[^'\n]+'\.?(?:\s+Defaults have not been changed\.?)?$/i].some((c)=>c.test(n)||c.test(a))}function bG(s){return/Application not found|No such file or directory|NSPOSIXErrorDomain, code=2/i.test(s)}function L1(s){let n=r(s);return/timed out/i.test(n)||/Failed to connect to (?:the )?CoreSimulator service/i.test(n)||/CoreSimulatorService connection (?:refused|reset|interrupted|invalidated)/i.test(n)||/connection (?:refused|reset|interrupted|invalidated)/i.test(n)||/Unable to lookup in current state: Booting/i.test(n)}function B1(){return new t(`iOS UserDefaults preference operation timed out after ${N1}ms.`)}function rX(s,n,a){if(a===void 0||n===M1)return()=>new t(`iOS ${s} timed out after ${n}ms.`);if(a<=n)return B1;return()=>new t(`iOS ${s} timed out after ${n}ms (operation budget ${N1}ms).`)}function SG(s,n,a){if(s==="ios"&&n==="userDefaults"){if(a==="sdk")return;if(a==="container-plist")return Br;return"UserDefaults writes go through the preferences daemon; a running app that cached the value may need a cold relaunch to observe the change."}if(s==="android"&&n==="systemProperty")return"Android system properties are global and generally reset on reboot.";if(s==="android"&&n==="sharedPreferences")return"SharedPreferences writes edit the XML file on disk; a running app that cached the value may need a cold relaunch to observe the change.";return}function wG(s){return new t(`${s} On physical iOS devices, getPreference and setPreference require the app to embed the AutoMobile SDK with storage inspection enabled and to be connected. Launch the app's DEBUG build with the SDK, or use an iOS Simulator.`)}var Do=["increaseContrast","reduceMotion","boldText","colorInversion","colorCorrection","magnification","magnificationScale","extraDim"],nX=["off","deuteranomaly","protanomaly","tritanomaly","grayscale"],wt=new Map;Xt({name:"display-config-accessibility-baselines",onDeviceIdentityReplaced:(s)=>wt.delete(s),onDeviceIncarnationChanged:()=>{}});function re(s,n,a){return{decode:a,encode:(c,d)=>c===!0?s:d!==void 0&&!a(d)?d:n}}var Jr=31,Qr="300",xM=["window_animation_scale","transition_animation_scale","animator_duration_scale"],xe="com.apple.Accessibility",ei="ReduceMotionEnabled",ti="EnhancedTextLegibilityEnabled",ri="Written to the Simulator's com.apple.Accessibility defaults and read back from there; UIKit reads it at launch, so relaunch the app under test before observing.",ii="No automatable per-device control on physical iOS; set it in the Settings app.",si=/^[+]?(?:\d+(?:\.\d*)?|\.\d+)$/;function ie(s){let n=s.trim();if(n==="null")return null;if(!si.test(n))throw Error(`unexpected setting value '${n}'`);return n}function ni(s){return s!==null&&Number(s)!==0}function oi(s){return s!==null&&s.split(",").every((n)=>n!=="null"&&Number(n)===0)}async function B(s,n){let a=await s.executeCommand(n,{noRetry:!0}),c=a.stderr??"";if(Ke(a.stdout,c))throw Error(`'${n}' reported: ${`${a.stdout} ${c}`.trim()}`);return a.stdout}async function se(s,n,a,c){await B(s,c===null?`shell settings delete ${n} ${a}`:`shell settings put ${n} ${a} ${c}`)}function M(s,n,a){return{support:!0,...re(a,"0",ni),read:async()=>ie(await B(s,`shell settings get secure ${n}`)),write:(c)=>se(s,"secure",n,c)}}function ai(s){return{support:!0,...re("0,0,0","1,1,1",oi),read:async()=>(await Promise.all(xM.map(async(a)=>ie(await B(s,`shell settings get global ${a}`))))).map((a)=>a??"null").join(","),write:async(n)=>{let a=(n??"null,null,null").split(",");if(a.length!==xM.length)throw Error(`malformed animation scale snapshot '${n}'`);await Promise.all(xM.map((c,d)=>se(s,"global",c,a[d]==="null"?null:a[d])))}}}var li=31,Ct={grayscale:"0",protanomaly:"11",deuteranomaly:"12",tritanomaly:"13"},ci=2;function St(s){let[n,a]=(s??"null,null").split(",");if(n!=="1")return"off";return Object.entries(Ct).find(([,d])=>d===a)?.[0]??"deuteranomaly"}var Ee=["accessibility_display_daltonizer_enabled","accessibility_display_daltonizer"];function ui(s){return{support:!0,decode:St,encode:(n,a)=>{if(n!=="off")return`1,${Ct[n]}`;return a!==void 0&&St(a)==="off"?a:`0,${a?.split(",")[1]??"null"}`},read:async()=>(await Promise.all(Ee.map(async(a)=>ie(await B(s,`shell settings get secure ${a}`))))).map((a)=>a??"null").join(","),write:async(n)=>{let a=(n??"null,null").split(",");if(a.length!==Ee.length)throw Error(`malformed color correction snapshot '${n}'`);for(let c of[1,0]){let d=a[c];await se(s,"secure",Ee[c],d==="null"?null:d)}}}}function di(s){return{support:!0,decode:(a)=>a===null?ci:Number(a),encode:(a)=>String(a),read:async()=>ie(await B(s,"shell settings get secure accessibility_display_magnification_scale")),write:(a)=>se(s,"secure","accessibility_display_magnification_scale",a)}}function vt(s,n,a,c){if(a===null)return{unsupported:`Could not read the Android API level to gate ${s} (API ${n}+).`};return a<n?{unsupported:`${s} needs Android API ${n}+ (device is API ${a}).`}:c()}function pi(s,n){return{increaseContrast:M(s,"high_text_contrast_enabled","1"),reduceMotion:ai(s),boldText:vt("Bold text",Jr,n,()=>M(s,"font_weight_adjustment",Qr)),colorInversion:M(s,"accessibility_display_inversion_enabled","1"),colorCorrection:ui(s),magnification:M(s,"accessibility_display_magnification_enabled","1"),magnificationScale:di(s),extraDim:vt("Extra dim",li,n,()=>M(s,"reduce_bright_colors_activated","1"))}}function fi(s,n){return{support:!0,...re("enabled","disabled",(a)=>a==="enabled"),read:async()=>{let a=(await s.executeCommandArgs(["ui",n,"increase_contrast"])).stdout.trim();if(a!=="enabled"&&a!=="disabled")throw Error(`'simctl ui increase_contrast' reported '${a}'`);return a},write:async(a)=>{await s.executeCommandArgs(["ui",n,"increase_contrast",a??"disabled"])}}}function Dt(s,n,a){let c=(...d)=>s.executeCommandArgs(["spawn",n,"defaults",...d]);return{support:"partial",note:ri,...re("1","0",(d)=>d==="1"),read:async()=>{try{let d=(await c("read",xe,a)).stdout.trim();if(d!=="0"&&d!=="1")throw Error(`'defaults read ${a}' reported '${d}'`);return d}catch(d){if(Lb(d))return e.debug(`[DisplayConfig] Simulator default ${a} is unset`,d),null;throw d}},write:async(d)=>{await(d===null?c("delete",xe,a):c("write",xe,a,"-bool",d==="1"?"YES":"NO"))}}}var V={unsupported:"Android only: the iOS Simulator has no control for it."};function mi(s,n){return{increaseContrast:fi(s,n),reduceMotion:Dt(s,n,ei),boldText:Dt(s,n,ti),colorInversion:V,colorCorrection:V,magnification:V,magnificationScale:V,extraDim:V}}function te(s=ii){return{supported:Object.fromEntries(Do.map((n)=>[n,!1])),notes:Object.fromEntries(Do.map((n)=>[n,s]))}}function P(s){return Do.filter((n)=>s[n]!==void 0)}function Te(s){return!("unsupported"in s)}class _e{device;dependencies;baselines;settingsPromise;constructor(s,n={}){this.device=s;this.dependencies=n;this.baselines=n.baselines??wt}hasBaseline(){return Object.keys(this.baselines.get(this.device.deviceId)??{}).length>0}clearBaseline(){this.baselines.delete(this.device.deviceId)}async read(){let s=await this.settings();if(!s)return{values:{},...te()};return Pt(await this.readAll(s))}async set(s){let n=await this.settings();if(!n)return this.unsupportedChange(P(s));let a=await this.readAll(n),c=[],d=[];for(let f of P(s)){let m=await this.applyField(f,s[f],n[f],a[f]);if(c.push(...m),m.length===0)d.push(f)}let p=await this.readAll(n);return c.push(...hi(s,d,p)),bt(a,p,c,[])}async reset(){let s=this.baselines.get(this.device.deviceId)??{},n=Do.filter((y)=>(y in s)),a=await this.settings();if(!a)return this.unsupportedChange(n);let c=await this.readAll(a),d=await this.writeSnapshot(a,yi(s,n)),p=await this.readAll(a),f=n.filter((y)=>("raw"in p[y])&&p[y].raw===s[y]),m={...s};for(let y of f)delete m[y];this.storeBaseline(m);for(let y of n.filter((g)=>!f.includes(g)))if(!d.some((g)=>g.startsWith(`${y}:`)))d.push(`${y}: remained ${gi(p[y])} after restoring ${String(s[y])}`);return bt(c,p,d,f)}async readSnapshot(s){let n=await this.settings();if(!n||s.length===0)return{};let a=await this.readAll(n);return Object.fromEntries(s.filter((c)=>("raw"in a[c])).map((c)=>[c,a[c].raw]))}async restoreSnapshot(s){let n=await this.settings();if(!n)return[];let a=await this.writeSnapshot(n,s);for(let c of a)e.warn(`[DisplayConfig] Failed to restore ${c} on ${this.device.deviceId}`);return Do.filter((c)=>(c in s)&&!a.some((d)=>d.startsWith(`${c}:`)))}unsupportedChange(s){let n=te();return{values:{},...n,previous:{},applied:{},errors:s.map((a)=>`${a}: ${n.notes[a]}`),restored:[]}}settings(){return this.settingsPromise??=this.resolveSettings(),this.settingsPromise}async resolveSettings(){if(this.device.platform==="ios"){let n=this.dependencies.simctl;return this.dependencies.iosSimulator&&n?mi(n,this.device.deviceId):void 0}let s=this.dependencies.adb?.();if(!s)return;return pi(s,await Ot(s))}async readAll(s){let n=await Promise.all(Do.map(async(a)=>[a,await this.readField(a,s[a])]));return Object.fromEntries(n)}async readField(s,n){if(!Te(n))return{support:!1,note:n.unsupported};try{let a=await n.read();return{raw:a,value:n.decode(a),support:n.support,...n.note?{note:n.note}:{}}}catch(a){return e.warn(`[DisplayConfig] ${s} read failed on ${this.device.deviceId}: ${r(a)}`,a),{support:!1,note:`Could not read ${s}: ${r(a)}`}}}async applyField(s,n,a,c){if(!Te(a))return[`${s}: ${a.unsupported}`];if(!("raw"in c))return[`${s}: ${c.note??"current value is unreadable"}; left unchanged`];let d=c.raw??null;this.recordBaseline(s,d);let p=this.baselines.get(this.device.deviceId)?.[s];return this.writeField(s,a,a.encode(n,p))}async writeSnapshot(s,n){let a=[];for(let c of Do.filter((d)=>(d in n))){let d=s[c];a.push(...Te(d)?await this.writeField(c,d,n[c]??null):[`${c}: ${d.unsupported}`])}return a}async writeField(s,n,a){try{return await n.write(a),[]}catch(c){return e.warn(`[DisplayConfig] ${s} write failed on ${this.device.deviceId}: ${r(c)}`,c),[`${s}: write failed: ${r(c)}`]}}recordBaseline(s,n){let a=this.baselines.get(this.device.deviceId)??{};if(!(s in a))this.storeBaseline({...a,[s]:n})}storeBaseline(s){if(Object.keys(s).length===0)this.baselines.delete(this.device.deviceId);else this.baselines.set(this.device.deviceId,s)}}function yi(s,n){return Object.fromEntries(n.map((a)=>[a,s[a]??null]))}function gi(s){return"raw"in s?String(s.raw):"unreadable"}function It(s){return Object.fromEntries(Do.filter((n)=>("raw"in s[n])).map((n)=>[n,s[n].value]))}function Pt(s){return{values:It(s),supported:Object.fromEntries(Do.map((n)=>[n,s[n].support])),notes:Object.fromEntries(Do.filter((n)=>s[n].note!==void 0).map((n)=>[n,s[n].note]))}}function bt(s,n,a,c){let d=Pt(n);return{...d,previous:It(s),applied:d.values,errors:a,restored:c}}function hi(s,n,a){return n.flatMap((c)=>{let d=a[c];if(d.value===void 0)return[`${c}: could not read back the applied value`];let p=d.value;return p===s[c]?[]:[`${c} remained ${String(p)} after requesting ${String(s[c])}`]})}function Rt(s){let n=Oe(s)||O(s)||P(s).length>0;if(s.reset===!0&&n)return"reset cannot be combined with an explicit fontScale, contentSize, density, theme, size, navigationMode, displayCutout, or accessibility display preference: reset restores the platform defaults and recorded baselines. Send reset on its own, or send only the explicit fields you want to change.";if(s.reset!==!0&&!n)return"At least one of fontScale, contentSize, density, theme, size, navigationMode, displayCutout, an accessibility display preference, or reset must be provided to set display config.";if(s.fontScale!==void 0&&s.contentSize!==void 0)return"fontScale and contentSize both select the text size: send one of them.";return}function Oe(s){return s.fontScale!==void 0||s.density!==void 0||s.theme!==void 0||s.contentSize!==void 0}function $t(s){return{...s.fontScale!==void 0?{fontScale:s.fontScale}:{},...s.density!==void 0?{density:s.density}:{},...s.theme!==void 0?{theme:s.theme}:{},...s.contentSize!==void 0?{contentSize:s.contentSize}:{},...s.reset!==void 0?{reset:s.reset}:{}}}function xt(s){return Object.fromEntries(P(s).map((n)=>[n,s[n]]))}function Et(s,n,a,c){if(s!==void 0)return s;let d=a?Si(c):void 0;return[n,d].filter(Boolean).join(" ")||void 0}function Si(s){return s.length>0?`Restored ${s.join(", ")} to the value displayConfig replaced.`:"No accessibility display preference changed by displayConfig needed restoring."}function Tt(s,n,a){let c=[...s?.error?[s.error]:[],...n.errors],d=c.length>0?c.join("; "):void 0,p=d??s?.message;return{...s,...a,...s?{supported:s.supported}:{},success:d===void 0,applied:{...s?.applied,...n.applied},previous:{...s?.previous,...n.previous},...n.available?{available:n.available}:{},...d?{error:d}:{},...p===void 0?{}:{message:p}}}function vi(s,n){let a=(d)=>d===!0||d==="partial",c={};if(n.theme)c.theme="light";if(s==="ios"&&n.fontScale)c.contentSize=be;for(let d of["increaseContrast","reduceMotion","boldText","colorInversion","magnification","extraDim"])if(a(n[d]))c[d]=!1;if(a(n.colorCorrection))c.colorCorrection="off";return c}async function _t(s,n){let a=await s.setConfig({reset:!0});if(!a.success&&a.previous===void 0)return a;let c=(await s.accessibility().read()).supported,d=vi(n,{...a.supported,...c}),p=Object.keys(d).length>0?await s.setConfig(d):void 0;s.clearBaselines();let f=[a.error,p?.error].filter((g)=>g!==void 0),m=f.length>0?f.join("; "):void 0,y=Object.keys(d).join(", ")||"none needed";return{...a,success:m===void 0,applied:{...a.applied,...p?.applied},...m?{error:m}:{},message:m??`Factory reset: restored platform defaults (${y}).`}}function Ft(s,n,a){if(a!==void 0)return a;if(!s)return;return`Reset font scale and density to device defaults; ${n===void 0?"night mode left unchanged (no night-mode baseline was recorded by displayConfig)":`night mode restored to ${n} (changed earlier by displayConfig)`}.`}var kt=new Map;Xt({name:"android-display-config-theme-baselines",onDeviceIdentityReplaced:(s)=>kt.delete(s),onDeviceIncarnationChanged:()=>{}});var Nt="fontScale is not supported on iOS devices: there is no simctl, defaults or XCUITest control for the system text scale. The iOS Simulator supports it as a Dynamic Type category.",Di="contentSize is an iOS Dynamic Type category and is only supported on the iOS Simulator; use fontScale on Android.";class cy{device;get platform(){return Q(this.device.platform,"Display configuration")}adbFactory;simctl;iosRunnerAppearance;themeBaselines;accessibilityBaselines;contentSizeBaselines;geometryOptions;constructor(s,n={}){this.device=s,this.themeBaselines=n.themeBaselines??kt,this.adbFactory=n.adbFactory??v,this.simctl=n.simctl??new F(s),this.accessibilityBaselines=n.accessibilityBaselines,this.iosRunnerAppearance=n.iosRunnerAppearance,this.contentSizeBaselines=n.contentSizeBaselines,this.geometryOptions=n.geometry??{}}accessibility(){return new _e(this.device,{adb:()=>this.adbFactory.create(this.device),simctl:this.simctl,iosSimulator:this.platform==="ios"&&this.isIosSimulator(),...this.accessibilityBaselines?{baselines:this.accessibilityBaselines}:{}})}iosAppearance(){let s=this.iosRunnerAppearance??Zl(this.device),n=async(a)=>{let c=await s.requestAppearance(a);if(!c.success)throw Error(`CtrlProxy runner appearance request failed: ${c.error??"unknown error"}. Physical-device theme control needs a runner that supports request_appearance.`);return c.appearance==="light"||c.appearance==="dark"?c.appearance:void 0};return{target:"device",read:()=>n(),write:async(a)=>{await n(a)}}}isIosSimulator(){return W({deviceId:this.device.deviceId})==="simulator"}support(){if(this.platform==="ios"){let s=this.isIosSimulator();return{fontScale:s,density:!1,theme:!0,...s?{}:te().supported}}return{fontScale:!0,theme:!0,density:le(this.device.deviceId)?!0:"partial",...tt(this.device)}}unsupported(s){return{success:!1,deviceId:this.device.deviceId,platform:this.platform,supported:this.support(),error:s}}async readIosTheme(){return this.iosAppearance().read()}async setIosAppearance(s){let n=this.iosAppearance();if(s!=="light"&&s!=="dark")return[`Cannot set theme '${s}' on the iOS ${n.target}: only 'light' or 'dark' can be set.`];try{return await n.write(s),[]}catch(a){return[`Setting the iOS ${n.target} appearance to ${s} failed: ${r(a)}`]}}iosSimulator(){return new Ce(this.device,this.simctl,this.contentSizeBaselines)}async getIosConfig(){try{let s=this.isIosSimulator()?await this.iosSimulator().read():await this.readIosThemeSnapshot();return this.withAccessibilityRead(s,await this.accessibility().read())}catch(s){return e.warn(`[DisplayConfig] getConfig failed (iOS): ${r(s)}`,s),this.failure(r(s))}}failure(s){return{success:!1,deviceId:this.device.deviceId,platform:this.platform,supported:this.support(),error:s}}async applyIosChanges(s){let n=[];if(s.fontScale!==void 0||s.contentSize!==void 0)n.push(Nt);if(s.density!==void 0)n.push(z);if(s.theme!==void 0)n.push(...await this.setIosAppearance(s.theme));return n}async readIosThemeSnapshot(){let s=await this.readIosTheme();if(s===void 0)throw Error(`iOS did not report a readable ${this.iosAppearance().target} appearance`);return{theme:s}}iosPreReadFailure(s){return e.warn(`[DisplayConfig] setConfig pre-read failed (iOS simulator): ${r(s)}`,s),{success:!1,deviceId:this.device.deviceId,platform:this.platform,supported:this.support(),error:r(s)}}async readIosAppliedSnapshot(){try{return{applied:await this.readIosThemeSnapshot()}}catch(s){return e.warn(`[DisplayConfig] setConfig post-read failed (iOS simulator): ${r(s)}`,s),{readError:`failed to read applied theme: ${r(s)}`}}}validateIosDeviceSetInput(s){if(!s.reset&&s.theme===void 0){if(s.fontScale!==void 0||s.contentSize!==void 0)return this.unsupported(Nt);if(s.density!==void 0)return this.unsupported(z)}return}async applyIosMutation(s,n){if(!s.reset){if(s.theme!==void 0)this.recordIosThemeBaseline(n);return{errors:await this.applyIosChanges(s),expectedTheme:s.theme}}let a=this.iosResetTheme(),c=await this.setIosAppearance(a);if(c.length===0)this.themeBaselines.delete(this.device.deviceId);return{errors:c,expectedTheme:a}}recordIosThemeBaseline(s){let n=this.device.deviceId;if(s.theme&&!this.themeBaselines.get(n))this.themeBaselines.set(n,s.theme)}iosResetTheme(){return this.themeBaselines.get(this.device.deviceId)??"light"}async setIosDeviceConfig(s){let n=this.validateIosDeviceSetInput(s);if(n)return n;let a;try{a=await this.readIosThemeSnapshot()}catch(g){return this.iosPreReadFailure(g)}let{errors:c,expectedTheme:d}=await this.applyIosMutation(s,a),{applied:p,readError:f}=await this.readIosAppliedSnapshot(),m=f?[...c,f]:[...c];if(p&&d&&p.theme!==d)m.push(`iOS ${this.iosAppearance().target} appearance remained ${p.theme} after requesting ${d}`);let y=m.length>0?m.join("; "):void 0;return{success:y===void 0,deviceId:this.device.deviceId,platform:this.platform,supported:this.support(),...p?{applied:p}:{},previous:a,...y?{error:y}:{}}}async setIosSimulatorConfig(s){if(!s.reset&&s.theme===void 0&&s.fontScale===void 0&&s.contentSize===void 0&&s.density!==void 0)return this.unsupported(z);let n;try{n=await this.iosSimulator().set(s)}catch(d){return e.warn(`[DisplayConfig] setConfig pre-read failed (iOS simulator): ${r(d)}`,d),this.failure(r(d))}let a=n.errors.length>0?n.errors.join("; "):void 0,c=n.restoredContentSize;return{success:a===void 0,deviceId:this.device.deviceId,platform:this.platform,supported:this.support(),...n.applied?{applied:n.applied}:{},previous:n.previous,...a?{error:a}:{},...c&&!a?{message:`Restored the Simulator content size to ${c} (changed earlier by displayConfig).`}:{}}}async getConfig(){if(this.platform==="ios")return this.getIosConfig();try{let s=this.adbFactory.create(this.device),n=await this.readValues(s),a=await this.geometry(s).read(),c=this.withAccessibilityRead({...n,...a.values},await this.accessibility().read());return a.available?{...c,available:a.available}:c}catch(s){return e.warn(`[DisplayConfig] getConfig failed: ${r(s)}`,s),{success:!1,deviceId:this.device.deviceId,platform:this.platform,supported:this.support(),error:r(s)}}}withAccessibilityRead(s,n){return{success:!0,deviceId:this.device.deviceId,platform:this.platform,supported:{...this.support(),...n.supported},...zt(n.notes),current:{...s,...n.values}}}async getRestorableConfig(){if(this.platform==="ios"){if(this.isIosSimulator())return this.iosSimulator().readRestorable();let s=await this.readIosTheme();return s===void 0?{}:{theme:s}}return(await this.readRawValues(this.adbFactory.create(this.device))).restorableValues}invalidRequest(s){return{success:!1,deviceId:this.device.deviceId,platform:this.platform,supported:this.support(),error:s}}async setConfig(s){if(s.factory===!0&&s.reset===!0)return _t(this,this.platform);let n=this.refuseSetInput(s);if(n)return n;if(this.platform==="android"&&(s.reset===!0||O(s)))return this.setWithGeometry(s);return this.setNonGeometry(s)}clearBaselines(){if(this.themeBaselines.delete(this.device.deviceId),this.accessibility().clearBaseline(),this.platform==="ios")this.iosSimulator().clearBaseline()}geometry(s){return new ge(this.device,s,this.geometryOptions)}async setWithGeometry(s){let n=this.geometry(this.adbFactory.create(this.device)),c=s.reset===!0?void 0:await n.prepare(s);if(c&&"refusal"in c)return this.invalidRequest(c.refusal);let d=et(s),p=Object.keys(d).length>0?await this.setNonGeometry(d):void 0;if(p&&!p.success&&p.previous===void 0)return p;let f=c?await n.apply(c):await n.reset();return Tt(p,f,{deviceId:this.device.deviceId,platform:this.platform,supported:this.support()})}async setNonGeometry(s){let n=s.reset===!0,a=this.accessibility(),c=P(s).length>0||n&&a.hasBaseline(),d=n||Oe(s)?await this.setDisplayFields($t(s)):void 0;if(d&&(!c||!d.success&&d.previous===void 0))return d;let p=n?await a.reset():await a.set(xt(s));return this.mergeAccessibilityChange(d,p,n)}refuseSetInput(s){let n=Rt(s);if(n!==void 0)return this.invalidRequest(n);if(this.platform==="android"&&s.contentSize!==void 0)return this.unsupported(Di);if(this.platform!=="android"&&O(s))return this.unsupported(Qe);return}setDisplayFields(s){if(this.platform!=="ios")return this.setAndroidConfig(s);return this.isIosSimulator()?this.setIosSimulatorConfig(s):this.setIosDeviceConfig(s)}mergeAccessibilityChange(s,n,a){let c=[...s?.error?[s.error]:[],...n.errors],d=c.length>0?c.join("; "):void 0,p=Et(d,s?.message,a,n.restored);return{success:d===void 0,deviceId:this.device.deviceId,platform:this.platform,supported:{...s?.supported??this.support(),...n.supported},...zt(n.notes),applied:{...s?.applied,...n.applied},previous:{...s?.previous,...n.previous},...d?{error:d}:{},...p?{message:p}:{}}}async setAndroidConfig(s){let n=this.adbFactory.create(this.device),a,c;try{let h=await this.readRawValues(n);a=h.restorableValues,c=h.physicalDensity}catch(h){return e.warn(`[DisplayConfig] setConfig pre-read failed: ${r(h)}`,h),{success:!1,deviceId:this.device.deviceId,platform:this.platform,supported:this.support(),error:r(h),message:r(h)}}let d=this.prepareAndroidTheme(s,a),p=s.reset?await this.applyReset(n,d):await this.applyChanges(n,s,c),{errors:f,issuedDensity:m}=p;je(this.device,m,this.geometryOptions);let y;try{let h=await this.readRawValues(n);y=h.values;let b=this.verifyAndroidAppliedConfig(s,h,m,d);this.confirmAndroidThemeRestore(p.restoredTheme,h.values.theme),f.push(...b)}catch(h){e.warn(`[DisplayConfig] setConfig post-read failed: ${r(h)}`,h),f.push(`failed to read applied values: ${r(h)}`)}let g=f.length>0?f.join("; "):void 0,D=Ft(s.reset,d,g);return{success:g===void 0,deviceId:this.device.deviceId,platform:this.platform,supported:this.support(),...y?{applied:y}:{},previous:a,...g?{error:g}:{},...D!==void 0?{message:D}:{}}}prepareAndroidTheme(s,n){if(s.reset)return this.themeBaselines.get(this.device.deviceId);if(s.theme!==void 0&&n.theme!==void 0&&this.themeBaselines.get(this.device.deviceId)===void 0)this.themeBaselines.set(this.device.deviceId,n.theme);return s.theme}confirmAndroidThemeRestore(s,n){if(s!==void 0&&n===s)this.themeBaselines.delete(this.device.deviceId)}async readValues(s){return(await this.readRawValues(s)).values}async readRawValues(s){let[n,a,c]=await Promise.all([this.run(s,"shell settings get system font_scale","font scale"),this.run(s,"shell wm density","density"),this.run(s,"shell cmd uimode night","night mode")]),d=Se(a),p=he(n),f=ve(c),m=[];if(p===void 0)m.push("font scale");if(d.effective===void 0)m.push("display density");if(f===void 0)m.push("night mode");if(m.length>0)throw Error(`Could not parse Android display baseline: ${m.join(", ")}.`);let g={fontScale:p==="default"?L:p,density:d.effective,theme:f},D={...g,fontScale:p,density:d.overridden?d.effective:"default"};return{values:g,restorableValues:D,physicalDensity:d.physical}}async applyChanges(s,n,a){let c=[];if(n.fontScale!==void 0){let p=n.fontScale==="default"?"shell settings delete system font_scale":`shell settings put system font_scale ${n.fontScale}`;c.push(...await this.runChecked(s,p,"font scale"))}let d;if(n.density!==void 0){let p=Ze(n.density,a);if("error"in p)c.push(p.error);else c.push(...await this.runChecked(s,p.command,"density")),d=p.target}if(n.theme!==void 0)c.push(...await this.runChecked(s,`shell cmd uimode night ${De(n.theme)}`,"night mode"));return{errors:c,issuedDensity:d}}async applyReset(s,n){let a=[];a.push(...await this.runChecked(s,"shell settings delete system font_scale","font scale")),a.push(...await this.runChecked(s,"shell wm density reset","density"));let c;if(n!==void 0){let d=await this.runChecked(s,`shell cmd uimode night ${De(n)}`,"night mode");if(a.push(...d),d.length===0)c=n}return{errors:a,issuedDensity:"default",restoredTheme:c}}verifyAndroidAppliedConfig(s,n,a,c){let d=[],p=s.reset?"default":s.fontScale,f=n.restorableValues.fontScale;if(p!==void 0&&!(p==="default"?f==="default"||f===L:f===p))d.push(`Font scale remained ${String(f)} after requesting ${String(p)}.`);let y=a;if(y!==void 0){let g=y==="default"?n.restorableValues.density:n.values.density;if(g!==y)d.push(`Display density remained ${String(g)} after requesting ${String(y)}.`)}if(c!==void 0&&n.values.theme!==c)d.push(`Night mode remained ${String(n.values.theme)} after requesting ${c}.`);return d}async run(s,n,a){try{let c=await s.executeCommand(n,{noRetry:!0}),d=c.stdout,p=c.stderr??"";if(Ke(d,p))throw Error(`'${n}' reported: ${`${d} ${p}`.trim()}`);return d}catch(c){throw new t(`${a}: failed to read '${n}': ${r(c)}`,{cause:c})}}async runChecked(s,n,a){try{let c=await s.executeCommand(n,{noRetry:!0}),d=c.stdout,p=c.stderr??"";if(Ke(d,p))return[`${a}: '${n}' reported: ${`${d} ${p}`.trim()}`];return[]}catch(c){return e.warn(`[DisplayConfig] ${a} command failed: ${r(c)}`,c),[`${a}: '${n}' failed: ${r(c)}`]}}}function zt(s){return Object.keys(s).length>0?{supportNotes:s}:{}}function w(s){if(s===null||s===void 0)return null;let n=s.trim();if(!n||n==="null"||n==="undefined")return null;return n}function x(s){let n=w(s);if(n==="12"||n==="24")return n;return null}function C(s){let n=w(s);if(n===null)return null;let a=n.toLowerCase();if(a==="1"||a==="true")return!0;if(a==="0"||a==="false")return!1;return null}function Le(s){let n=w(s);if(!n)return null;return n.split(",")[0]?.trim()||null}var bi=/\bare\s+\[([^\]]*)\]\s*$/,Mt=/\bUnknown package\s+\S+\s+for userId\s+\d+/;function G(s,n=""){let c=w(s)?.match(bi)?.[1];if(c!==void 0)return{kind:"list",list:c.trim()};if(Mt.test(s)||Mt.test(n))return{kind:"notInstalled"};return{kind:"unreadable"}}function oe(s){let n=s.trim();if(!n)return null;let a=n.match(/@calendar=([a-z0-9-]+)/i);if(a&&a[1])return a[1];let c=n.replace(/_/g,"-"),d=c.toLowerCase().indexOf("-u-");if(d===-1)return null;let f=c.slice(d+3).split("-").filter(Boolean),m=0;while(m<f.length){let y=f[m];if(y.length===2){m+=1;let g=[];while(m<f.length&&f[m].length>2)g.push(f[m]),m+=1;if(y.toLowerCase()==="ca"&&g.length>0)return g.join("-")}else m+=1}return null}var wi=/^q[a-t][a-z]$/;function Gt(s){let a;try{a=new Intl.Locale(s.replace(/_/g,"-")).language.toLowerCase()}catch(c){return e.debug(`locale tag "${s}" is not a well-formed BCP 47 tag: ${c}`),`Invalid locale "${s}": not a well-formed BCP 47 language tag (e.g. "fr-FR", "sr-Latn-RS" or "zh-Hant-TW").`}if(a==="und")return`Invalid locale "${s}": "und" (undetermined) is not a real locale; use a language such as "fr-FR".`;if(wi.test(a))return`Invalid locale "${s}": "${a}" is in the private-use language range (qaa-qtz), which is not a real locale (e.g. "fr-FR", "sr-Latn-RS" or "zh-Hant-TW").`;return null}function Fe(s){try{return new Intl.DateTimeFormat("en-US",{timeZone:s}).resolvedOptions().timeZone}catch(n){return e.debug(`time zone "${s}" is not known to the runtime: ${n}`),null}}function Ci(s,n){let a=s.toLowerCase(),c=[n,...Intl.supportedValuesOf("timeZone")].find((d)=>d.toLowerCase()===a);return c===void 0||c===s?null:c}var Ai=/^GMT([+-])(\d{1,2})(?::(\d{2})|(\d{2}))?$/;function Ii(s){let n=Ai.exec(s);if(!n)return!1;let a=Number(n[2]),c=Number(n[3]??n[4]??"0");return a<=23&&c<=59}var Pi=/^[A-Z][A-Za-z0-9._+-]*(?:\/[A-Z][A-Za-z0-9._+-]*){1,2}$/,Ri=new Set(["EST5EDT","CST6CDT","MST7MDT","PST8PDT"]);function Ne(s,n){if(n==="android"&&Ii(s))return{error:null};let a='e.g. "America/Los_Angeles", "Asia/Kolkata" or "UTC"';if(/^[+-]/.test(s))return{error:`Invalid time zone "${s}": a bare UTC offset is not a zone id and the device has no entry for it. Use an IANA id (${a}) or a fixed-offset zone such as "Etc/GMT-5" (the sign is inverted: Etc/GMT-5 is UTC+5).`};if(Ri.has(s))return{error:null};let c=Fe(s);if(c===null)return Pi.test(s)?{error:null,note:`Time zone "${s}" could not be validated: it is not in the host's time zone database, which may be older than the device's. It was sent as given and the device stores any string, so only its read-back vouches for it; check the spelling if the zone is not in effect.`}:{error:`Invalid time zone "${s}": not an IANA time zone id (${a}).`};let d=Ci(s,c);if(d!==null)return{error:`Invalid time zone "${s}": zone ids are case-sensitive on the device; did you mean "${d}"?`};return{error:null}}function $i(s,n){return Ne(s,n).error}function A(s,n){if(!s)return!1;if(s===n)return!0;let a=Fe(s),c=Fe(n);return a!==null&&a===c&&$i(s)===null}function Vt(s){let n;try{let p=new Intl.Locale(s.replace(/_/g,"-"));n=(p.language==="und"?p:p.maximize()).toString().split("-")}catch(p){return e.debug(`locale tag "${s}" is not comparable: ${p}`),null}let a=(n.shift()??"").toLowerCase(),c=n[0]!==void 0&&/^[A-Za-z]{4}$/.test(n[0])?n.shift():"",d=n[0]!==void 0&&/^([A-Za-z]{2}|\d{3})$/.test(n[0])?n.shift():"";return{language:a,script:(c??"").toLowerCase(),region:(d??"").toUpperCase(),rest:n.join("-").toLowerCase()}}function Bt(s){try{return new Intl.Locale(s.replace(/_/g,"-")).region?.toUpperCase()??null}catch(n){return e.debug(`locale tag "${s}" has no readable region: ${n}`),null}}function ae(s,n){if(!s)return!1;let a=Vt(s),c=Vt(n);if(!a||!c)return!1;if(a.language!==c.language||a.script!==c.script||a.rest!==c.rest)return!1;let d=Bt(n);return d===null||Bt(s)===d}var ze=33;class RG{adb;constructor(s){this.adb=s}async readAppLocales(s,n){let a=await Ot(this.adb,void 0,i,n);if(a===null||a<ze)return null;if((await this.adb.listUsers(n)).filter((m)=>m.running).length>1)return null;let d=await new At(this.adb).resolve({packageName:s,installedOnly:!0,signal:n}),p=await this.adb.executeCommand(`shell cmd locale get-app-locales ${S(s)} --user ${d.userId}`,{noRetry:!0,signal:n}),f=G(p.stdout,p.stderr);return f.kind==="list"?{userId:d.userId,locales:f.list}:null}async readSettingRow(s,n,a){let c=await this.adb.executeCommand(`shell settings get ${s} ${n}`,{noRetry:!0,signal:a});return c.error||c.stderr.trim()?{readable:!1}:{readable:!0,value:w(c.stdout)}}}function Ut(s){return s.readable?Le(s.list):null}function Zt(s){return s.split(",").map((n)=>n.trim().replace(/_/g,"-").toLowerCase()).filter(Boolean)}function Kt(s,n){return Zt(s).join(",")===Zt(n).join(",")}function jt(s){return!s.readable&&s.notInstalled}function xi(s,n){return`Cannot change the locale: app ${s} is not installed for user ${n}; nothing was changed. Check the appId, or install the app first.`}function Z(s){if(!s.readable)return"unknown (it could not be read)";return s.list?`"${s.list}"`:"unset"}function qt(s,n,a){return`Locale change outcome is indeterminate: "${s}" was sent but no result was confirmed (${n}). ${a} was not restored and may have changed. Do not retry automatically. Check the current locale before retrying.`}var K="shell getprop persist.sys.timezone",Ei="persist.sys.timezone was stored and read back, which does not confirm the zone is in effect: a raw setprop bypasses the system time-zone setter, so already-running apps may keep the previous zone until restarted.";function Ti(s,n){if(s.length===0)return"";if(s.length===1&&!n)return` (${s[0]?.message})`;return` (${s.map(({label:a,message:c})=>`${a}: ${c}`).join("; ")})`}var ke=60000,_i=2000;class Me{device;adb;timer;defaultCalendarSystem="gregory";constructor(s,n,a=i){this.device=s;this.adb=n;this.timer=a}async setLocale(s,n){if(!n.appId)return{success:!1,languageTag:s,error:"appId is required for Android locale changes. Provide the target app package so AutoMobile can choose the supported Android locale path."};let a=Gt(s);if(a)return{success:!1,languageTag:s,error:a};return this.setTargetAppLocale(s,n.appId,n)}async setSystemLocale(s,n,a){let c=await this.readSetting("shell getprop persist.sys.locale");try{await this.runShellCommand(`shell setprop persist.sys.locale ${S(s)}`),await this.runShellCommand("shell stop; start")}catch(m){e.warn(`[SystemConfigurationManager] Failed to set device-wide locale: ${r(m)}`,m);let y=r(m);return{success:!1,languageTag:s,previousLanguageTag:c,localeScope:"system",error:`Failed to set device-wide locale: ${y}`}}let d=await this.waitForFrameworkReady(),p=await this.readSetting("shell getprop persist.sys.locale");if(p===null)return{success:!1,languageTag:s,previousLanguageTag:c,localeScope:"system",error:qt(s,`persist.sys.locale could not be read back${d?"":` and the framework did not report boot_completed within ${ke}ms after stop; start`}`,"the device-wide locale")};if(!ae(p,s)){let m=await this.restoreSystemLocale(c,p);return{success:!1,languageTag:s,previousLanguageTag:c,localeScope:"system",error:`Read-back verification failed: expected persist.sys.locale "${s}" but got "${p??"null"}"${m}`}}if(!d)e.warn(`[SystemConfigurationManager] Device-wide locale ${s} was applied and persisted, but the framework did not report boot_completed within ${ke}ms after stop; start. Subsequent tools may briefly see the device as not fully booted.`);let f=n.broadcast===!1?!1:await this.broadcastLocaleChange();return{success:!0,languageTag:s,previousLanguageTag:c,method:a,localeScope:"system",broadcasted:f}}async restoreSystemLocale(s,n){let a=(f)=>s===null?f===null:ae(f,s);if(a(n))return"";let c=s===null?"unset":`"${s}"`,d="";try{await this.runShellCommand(`shell setprop persist.sys.locale ${S(s??"")}`),await this.runShellCommand("shell stop; start")}catch(f){e.warn(`[SystemConfigurationManager] Failed to restore device-wide locale: ${r(f)}`,f),d=` (${r(f)})`}await this.waitForFrameworkReady();let p=await this.readSetting("shell getprop persist.sys.locale");if(a(p))return`. Restored the previous device-wide locale (${c}).`;return`. Restoring the previous device-wide locale (${c}) failed${d}; persist.sys.locale is left as "${p??"null"}".`}async waitForFrameworkReady(){let s=this.timer.now()+ke;for(;;){let n=null;try{let a=await this.adb.executeCommand("shell getprop sys.boot_completed",{noRetry:!0});n=w(a.stdout)}catch(a){e.debug(`[SystemConfigurationManager] boot_completed probe failed: ${a}`)}if(n==="1")return!0;if(this.timer.now()>=s)return!1;await this.timer.sleep(_i)}}async setLegacyAppLocale(s,n,a){let c=await this.ensureRootForLegacyLocale(a);if(!c.success)return{success:!1,languageTag:s,error:c.error};return this.setSystemLocale(s,n,"setprop persist.sys.locale + stop/start after adb root")}async setTargetAppLocale(s,n,a){let c=await Ot(this.adb);if(c!==null&&c<ze)return this.setLegacyAppLocale(s,a,c);let d=await this.resolveTargetUserId(n);if("error"in d)return{success:!1,languageTag:s,error:d.error};let p=d.userId,f=await this.readAppLocales(n,p),m=Ut(f),y={success:!1,languageTag:s,previousLanguageTag:m,error:xi(n,p)},g=await this.sendAppLocale(n,p,s,f);if(g==="notInstalled")return y;if(g!=="sent")return{success:!1,languageTag:s,previousLanguageTag:m,error:g.error};let D=await this.readAppLocales(n,p);if(jt(D))return y;if(!D.readable)return{success:!1,languageTag:s,previousLanguageTag:m,error:qt(s,`the app's locale could not be read back for ${n}`,`the app's locale (previously ${Z(f)})`)};let h=Ut(D);if(!ae(h,s)){let er=await this.restoreAppLocales(n,p,f,D);return{success:!1,languageTag:s,previousLanguageTag:m,error:`Read-back verification failed for ${n}: expected "${s}" but got "${h??"null"}"${er}`}}let b=a.broadcast===!1?!1:await this.broadcastLocaleChange();return{success:!0,languageTag:s,previousLanguageTag:m,method:`cmd locale set-app-locales ${n} --user ${p}`,localeScope:"app",broadcasted:b,...d.warning?{warning:d.warning}:{}}}async sendAppLocale(s,n,a,c){if(jt(c))return"notInstalled";try{let d=await this.adb.executeCommand(`shell cmd locale set-app-locales ${S(s)} --user ${n} --locales ${S(a)}`);return G(d.stdout,d.stderr).kind==="notInstalled"?"notInstalled":"sent"}catch(d){return e.warn(`[SystemConfigurationManager] Failed to set app locale: ${r(d)}`,d),{error:`Failed to set app locale for ${s}: ${r(d)}`}}}async resolveTargetUserId(s){try{return{userId:(await new At(this.adb).resolve({packageName:s,installedOnly:!0})).userId}}catch(n){e.warn(`[SystemConfigurationManager] Failed to resolve Android user for ${s}: ${r(n)}`,n);let a=await this.singleUserFallback(s,n);if(a)return a;return{error:n instanceof dm?n.message:`Failed to resolve Android user for ${s}: ${r(n)}`}}}async singleUserFallback(s,n){if(!(n instanceof dm)||n.details.kind!=="unavailable"||n.details.users.some((a)=>a.userId!==0)||!await this.currentUserIsPrimary())return null;return{userId:0,warning:`Could not read the device's Android user list and found no sign of a second user, so ${s}'s locale was set for user 0. If the device has a work profile or secondary user, verify the locale on the intended one.`}}async currentUserIsPrimary(){try{let s=await this.adb.executeCommand("shell am get-current-user",{noRetry:!0});return Number.parseInt(s.stdout.trim(),10)===0}catch(s){return e.warn(`[SystemConfigurationManager] Could not read the current Android user: ${r(s)}`,s),!1}}async ensureRootForLegacyLocale(s){let n=await cz(this.adb);return n.success?n:{success:!1,error:`Android API ${s} does not support app-scoped locale changes, so AutoMobile must use the root-backed system locale path. ${n.error}`}}async setTimeZone(s){let n=await this.readSetting(K),a=await this.attemptTimeZoneWrite(`shell setprop persist.sys.timezone ${S(s)}`,"Failed to set time zone"),c=await this.readSetting(K);if(c===null)return{success:!1,zoneId:s,previousZoneId:n,error:`${this.indeterminateTimeZoneError(s,n)}${this.timeZoneWriteFailure(a)}`};if(a.success&&A(c,s))return{success:!0,zoneId:s,previousZoneId:n,method:"setprop persist.sys.timezone",warning:Ei};let d=await this.attemptTimeZoneWrite(`shell cmd alarm set-timezone ${S(s)}`,"cmd alarm set-timezone fallback failed");if(c=await this.readSetting(K),c===null)return{success:!1,zoneId:s,previousZoneId:n,error:`${this.indeterminateTimeZoneError(s,n)}${this.timeZoneWriteFailure(a,d)}`};if(!A(c,s)){let p=await this.restoreSystemTimeZone(n,c);return{success:!1,zoneId:s,previousZoneId:n,error:`Read-back verification failed: expected "${s}" but got "${c}"${p}${this.timeZoneWriteFailure(a,d)}`}}return{success:!0,zoneId:s,previousZoneId:n,method:"cmd alarm set-timezone"}}async attemptTimeZoneWrite(s,n){try{return await this.adb.executeCommand(s),{success:!0}}catch(a){return e.warn(`[SystemConfigurationManager] ${n}: ${r(a)}`,a),{success:!1,error:a}}}indeterminateTimeZoneError(s,n){return`Time zone change outcome is indeterminate: "${s}" was sent but no result was confirmed (persist.sys.timezone could not be read back). The device-wide time zone was not restored and may have changed${n===null?"":` (previously "${n}")`}. Do not retry automatically. Check the current time zone before retrying.`}timeZoneWriteFailure(s,n){let a=[];if(!s.success)a.push(r(s.error));if(n&&!n.success)a.push(`cmd alarm set-timezone: ${r(n.error)}`);return a.length===0?"":` Failed to set time zone: ${a.join("; ")}.`}async restoreSystemTimeZone(s,n){let a=(g)=>s===null?g===null:A(g,s);if(a(n))return"";let c=s===null?"unset":`"${s}"`,d=[],p=!1,f=n;try{await this.adb.executeCommand(`shell setprop persist.sys.timezone ${S(s??"")}`)}catch(g){e.warn(`[SystemConfigurationManager] Failed to restore time zone: ${r(g)}`,g),d.push({label:"setprop",message:r(g)})}let m=await this.readSetting(K);if(a(m))return`. Restored the previous time zone (${c}).`;if(s!==null){p=!0;let g=await this.restoreTimeZoneWithAlarm(s);if(f=g.value,g.error)d.push({label:"cmd alarm set-timezone",message:g.error});if(a(g.value))return`. Restored the previous time zone (${c}).`}let y=Ti(d,p);return`. Restoring the previous time zone (${c}) failed${y}; persist.sys.timezone is left as "${f??"null"}".`}async restoreTimeZoneWithAlarm(s){let n;try{await this.adb.executeCommand(`shell cmd alarm set-timezone ${S(s)}`)}catch(a){n=r(a),e.warn(`[SystemConfigurationManager] Failed to restore time zone with cmd alarm: ${n}`,a)}return{value:await this.readSetting(K),error:n}}async setTextDirection(s,n){let a=await this.readSetting("shell settings get global debug.force_rtl"),c=await this.readSetting("shell settings get global force_rtl"),d=C(a??c),p=[],f=a!==null||c===null,m=c!==null;if(f)p.push("debug.force_rtl");if(m)p.push("force_rtl");if(p.length===0)p.push("debug.force_rtl");let y=[],g=s?1:0;for(let h of p)try{await this.runShellCommand(`shell settings put global ${h} ${g}`),y.push(h)}catch(b){e.warn(`[SystemConfigurationManager] Failed to set ${h}: ${b}`)}if(y.length===0)return{success:!1,rtl:s,previousRtl:d,error:"Failed to update RTL settings"};let D=n.broadcast===!1?!1:await this.broadcastLocaleChange();return{success:!0,rtl:s,previousRtl:d,settings:y,broadcasted:D}}async set24HourFormat(s){let n=await this.readSetting("shell settings get system time_12_24"),a=s?"24":"12";try{return await this.runShellCommand(`shell settings put system time_12_24 ${a}`),{success:!0,enabled:s,previousFormat:x(n)}}catch(c){e.warn(`[SystemConfigurationManager] Failed to set 24-hour format: ${r(c)}`,c);let d=r(c);return{success:!1,enabled:s,previousFormat:x(n),error:`Failed to set 24-hour format: ${d}`}}}async setCalendarSystem(s){let a=(await this.getCalendarSystem()).calendarSystem??null;try{await this.runShellCommand(`shell settings put system calendar_type ${S(s)}`);let c=await this.readSetting("shell settings get system calendar_type");if(!c||c!==s)return{success:!1,calendarSystem:c??s,previousCalendarSystem:a,error:`Read-back verification failed: expected "${s}" but got "${c??"null"}"`};return{success:!0,calendarSystem:c,previousCalendarSystem:a}}catch(c){e.warn(`[SystemConfigurationManager] Failed to set calendar system: ${r(c)}`,c);let d=r(c);return{success:!1,calendarSystem:s,previousCalendarSystem:a,error:`Failed to set calendar system: ${d}`}}}async getCalendarSystem(){let s=await this.readSetting("shell settings get system calendar_type");if(s)return{success:!0,calendarSystem:s,source:"settings.calendar_type"};let n=await this.getCurrentLocaleTag();if(n){let a=oe(n);if(a)return{success:!0,calendarSystem:a,locale:n,source:"locale"}}return{success:!0,calendarSystem:this.defaultCalendarSystem,locale:n??null,source:"default"}}async getLocalizationSettings(){let s=await this.getCurrentLocaleTag(),n=await this.readSetting("shell getprop persist.sys.timezone"),a=x(await this.readSetting("shell settings get system time_12_24")),c=await this.readSetting("shell settings get global debug.force_rtl"),d=await this.readSetting("shell settings get global force_rtl"),p=C(c)??C(d),f=p===null?null:p?"rtl":"ltr",m=await this.getCalendarSystem();return{success:m.success,locale:s,timeZone:n,textDirection:f,timeFormat:a,calendarSystem:m.calendarSystem??null,error:m.error}}async broadcastLocaleChange(){try{return await this.adb.executeCommand("shell am broadcast -a android.intent.action.LOCALE_CHANGED"),!0}catch(s){return e.warn(`[SystemConfigurationManager] Failed to broadcast localization change: ${s}`),!1}}async readSetting(s){let n=s.match(/^shell\s+settings\s+get\s+(system|secure|global)\s+(\S+)\s*$/);if(n){let a=n[1],c=n[2];try{let p=await k.getInstance(this.device).requestSettingsGet(a,c);if(p.success)return w(p.found?p.value??null:null)}catch(d){e.debug(`[SystemConfigurationManager] a11y settings get failed for ${a}/${c}: ${d}`)}}try{let a=await this.adb.executeCommand(s,{noRetry:!0});return w(a.stdout)}catch(a){return e.warn(`[SystemConfigurationManager] Failed to read setting (${s}): ${a}`),null}}async runShellCommand(s){let n=s.match(/^shell\s+settings\s+put\s+(system|secure|global)\s+(\S+)\s+(.+)$/);if(n){let a=n[1],c=n[2],d=n[3].trim();try{if((await k.getInstance(this.device).requestSettingsPut(a,c,d,{valueType:"string"})).success)return}catch(p){e.debug(`[SystemConfigurationManager] a11y settings put failed for ${a}/${c}: ${p}`)}}await this.adb.executeCommand(s)}async getCurrentLocaleTag(){let s=await this.readSetting("shell settings get system system_locales"),n=Le(s);if(n)return n;let a=await this.getEffectiveLocaleTag();if(a)return a;let c=await this.readSetting("shell getprop persist.sys.locale");if(c)return c;let d=await this.readSetting("shell getprop persist.sys.language");if(!d)return null;let p=await this.readSetting("shell getprop persist.sys.country");if(p)return`${d}-${p}`;return d}async readAppLocales(s,n){try{let a=await this.adb.executeCommand(`shell cmd locale get-app-locales ${S(s)} --user ${n}`,{noRetry:!0}),c=G(a.stdout,a.stderr);if(c.kind==="list")return{readable:!0,list:c.list};return{readable:!1,notInstalled:c.kind==="notInstalled"}}catch(a){return e.warn(`[SystemConfigurationManager] Failed to read Android app locale for ${s}: ${a}`),{readable:!1,notInstalled:!1}}}async restoreAppLocales(s,n,a,c){if(!a.readable)return`. The app's previous locale could not be read before the change, so it was not restored; the app's locale is now ${Z(c)}.`;if(c.readable&&Kt(c.list,a.list))return"";let d="";try{await this.adb.executeCommand(`shell cmd locale set-app-locales ${S(s)} --user ${n} --locales ${S(a.list)}`)}catch(f){e.warn(`[SystemConfigurationManager] Failed to restore app locale for ${s}: ${r(f)}`,f),d=` (${r(f)})`}let p=await this.readAppLocales(s,n);if(p.readable&&Kt(p.list,a.list))return`. Restored the app's previous locale (${Z(a)}).`;return`. Restoring the app's previous locale (${Z(a)}) failed${d}; the app's locale is left as ${Z(p)}.`}async getEffectiveLocaleTag(){try{let s=await this.adb.executeCommand("shell am get-config",{noRetry:!0});return this.parseLocaleFromAmConfig(s.stdout)}catch(s){return e.warn(`[SystemConfigurationManager] Failed to read effective Android locale: ${s}`),null}}parseLocaleFromAmConfig(s){let n=w(s);if(!n)return null;let a=n.match(/(?:^|[-\s])b\+([a-z]{2,3})(?:\+([A-Za-z]{4}))?(?:\+([A-Z]{2}|\d{3}))?(?=[-\s]|$)/);if(a?.[1])return[a[1],a[2],a[3]].filter(Boolean).join("-");let c=n.match(/(?:^|[-\s])([a-z]{2,3})-r([A-Z]{2})(?=[-\s]|$)/);if(c?.[1]&&c[2])return`${c[1]}-${c[2]}`;return n.match(/(?:^|[-\s])([a-z]{2,3})(?=[-\s]|$)/)?.[1]??null}}function T(s){return W({deviceId:s})==="simulator"}function ce(s){let n=[s],a=s.split("-");for(let c=a.length-1;c>=1;c--){let d=a.slice(0,c).join("-");if(!n.includes(d))n.push(d)}return n}function Ve(s){if(s==="1")return"24";if(s==="0")return"12";return s}var _="System configuration is not supported on physical iOS devices.",Wt="gregory",ue="com.apple.mobiletimerd",j="AutomaticTimeZoneSetting",Oi="AppleTimeZone was stored and read back, which does not confirm that running apps observe the new zone. Automatic time zone is now off so the zone stays pinned.";class Be{device;processExecutor;defaultCalendarSystem=Wt;constructor(s,n){this.device=s;this.processExecutor=n}async setLocale(s,n){if(!this.isSimulator())return{success:!1,languageTag:s,error:_};try{let a=await this.iosDefaultsRead(".GlobalPreferences","AppleLocale"),c=this.toAppleLocale(s);await this.iosDefaultsWrite(".GlobalPreferences","AppleLocale",[c]);let d=this.buildAppleLanguages(s);await this.processExecutor.executeCommand("xcrun",$n(["spawn",this.device.deviceId,"defaults","write",".GlobalPreferences","AppleLanguages","-array",...d]));let p=await this.iosDefaultsRead(".GlobalPreferences","AppleLocale");if(!p||p!==c)return{success:!1,languageTag:s,previousLanguageTag:a,error:`Read-back verification failed: expected "${c}" but got "${p??"null"}"`};return{success:!0,languageTag:s,previousLanguageTag:a,appliedLanguages:d,method:"defaults write AppleLocale + AppleLanguages"}}catch(a){let c=r(a);return e.warn(`Failed to set locale: ${r(a)}`,a),{success:!1,languageTag:s,error:`Failed to set locale: ${c}`}}}async setTimeZone(s){if(!this.isSimulator())return{success:!1,zoneId:s,error:_};let n={zoneId:await this.iosDefaultsRead(".GlobalPreferences","AppleTimeZone"),automatic:await this.iosDefaultsRead(ue,j)};try{await this.iosDefaultsWrite(ue,j,["-bool","NO"])}catch(c){return this.timeZoneWriteFailure(s,c,"")}let a;try{await this.iosDefaultsWrite(".GlobalPreferences","AppleTimeZone",[s]),a=await this.iosDefaultsRead(".GlobalPreferences","AppleTimeZone")}catch(c){let d=await this.restoreTimeZoneSettings(n,null);return this.timeZoneWriteFailure(s,c,d)}if(a===null)return{success:!1,zoneId:s,previousZoneId:n.zoneId,error:`Time zone change outcome is indeterminate: "${s}" was sent but no result was confirmed (AppleTimeZone could not be read back). The simulator's time zone and its automatic time zone setting were not restored: automatic time zone is off and the zone may have changed${n.zoneId===null?"":` (previously "${n.zoneId}")`}. Do not retry automatically. Check the current time zone before retrying.`};if(!A(a,s)){let c=await this.restoreTimeZoneSettings(n,a);return{success:!1,zoneId:s,previousZoneId:n.zoneId,error:`Read-back verification failed: expected "${s}" but got "${a}"${c}`}}return{success:!0,zoneId:s,previousZoneId:n.zoneId,warning:Oi}}timeZoneWriteFailure(s,n,a){let c=r(n);return e.warn(`Failed to set time zone: ${c}`,n),{success:!1,zoneId:s,error:`Failed to set time zone: ${c}${a}`}}async restoreTimeZoneSettings(s,n){let a=[];if(!(s.zoneId===null?n===null:A(n,s.zoneId)))await this.restoreDefault(".GlobalPreferences","AppleTimeZone",s.zoneId===null?null:[s.zoneId],a);let d=C(s.automatic);if(s.automatic!==null&&d===null)a.push(`the earlier automatic time zone value "${s.automatic}" is not a boolean`);else await this.restoreDefault(ue,j,d===null?null:["-bool",d?"YES":"NO"],a);a.push(...await this.timeZoneRestoreMismatches(s));let p=s.zoneId===null?"unset":`"${s.zoneId}"`,f=s.automatic===null?"unset":`"${s.automatic}"`;return a.length===0?`. Restored automatic time zone (${f}) and the previous time zone (${p}).`:`. Restoring the previous automatic time zone (${f}) and time zone (${p}) failed: ${a.join("; ")}.`}async timeZoneRestoreMismatches(s){let n=await this.iosDefaultsRead(".GlobalPreferences","AppleTimeZone"),a=await this.iosDefaultsRead(ue,j),c=[];if(!(s.zoneId===null?n===null:A(n,s.zoneId)))c.push(`AppleTimeZone is left as "${n??"null"}"`);if(C(a)!==C(s.automatic))c.push(`${j} is left as "${a??"null"}"`);return c}async restoreDefault(s,n,a,c){try{if(a===null)await this.processExecutor.executeCommand("xcrun",$n(["spawn",this.device.deviceId,"defaults","delete",s,n]));else await this.iosDefaultsWrite(s,n,a)}catch(d){e.warn(`Failed to restore ${s} ${n}: ${r(d)}`,d),c.push(`${n}: ${r(d)}`)}}async setTextDirection(s,n){return{success:!1,rtl:s,error:'Text direction is not supported on iOS. To mirror a prototype without changing the system locale, set window.layoutDirection: "rtl" on its prototype spec.'}}async set24HourFormat(s){if(!this.isSimulator())return{success:!1,enabled:s,error:_};try{let n=await this.iosDefaultsRead(".GlobalPreferences","AppleICUForce24HourTime"),a=x(Ve(n));await this.iosDefaultsWrite(".GlobalPreferences","AppleICUForce24HourTime",["-bool",s?"YES":"NO"]);let c=await this.iosDefaultsRead(".GlobalPreferences","AppleICUForce24HourTime"),d=s?"1":"0";if(!c||c!==d)return{success:!1,enabled:s,previousFormat:a,error:`Read-back verification failed: expected "${d}" but got "${c??"null"}"`};return{success:!0,enabled:s,previousFormat:a}}catch(n){let a=r(n);return e.warn(`Failed to set 24-hour format: ${r(n)}`,n),{success:!1,enabled:s,error:`Failed to set 24-hour format: ${a}`}}}async setCalendarSystem(s){if(!this.isSimulator())return{success:!1,calendarSystem:s,error:_};try{let n=await this.iosDefaultsRead(".GlobalPreferences","AppleCalendar");await this.iosDefaultsWrite(".GlobalPreferences","AppleCalendar",[s]);let a=await this.iosDefaultsRead(".GlobalPreferences","AppleCalendar");if(!a||a!==s)return{success:!1,calendarSystem:a??s,previousCalendarSystem:n,error:`Read-back verification failed: expected "${s}" but got "${a??"null"}"`};return{success:!0,calendarSystem:a,previousCalendarSystem:n}}catch(n){let a=r(n);return e.warn(`Failed to set calendar system: ${r(n)}`,n),{success:!1,calendarSystem:s,error:`Failed to set calendar system: ${a}`}}}async getCalendarSystem(){if(!this.isSimulator())return{success:!1,error:_};let s=await this.iosDefaultsRead(".GlobalPreferences","AppleCalendar");if(s)return{success:!0,calendarSystem:s,source:"default"};let n=await this.iosDefaultsRead(".GlobalPreferences","AppleLocale");if(n){let a=oe(n);if(a)return{success:!0,calendarSystem:a,locale:n,source:"locale"}}return{success:!0,calendarSystem:Wt,locale:n??null,source:"default"}}async getLocalizationSettings(){if(!this.isSimulator())return{success:!1,error:_};let s=await this.iosDefaultsRead(".GlobalPreferences","AppleLocale"),n=await this.iosDefaultsRead(".GlobalPreferences","AppleLanguages"),a=await this.iosDefaultsRead(".GlobalPreferences","AppleTimeZone"),c=await this.iosDefaultsRead(".GlobalPreferences","AppleICUForce24HourTime"),d=x(Ve(c)),p=await this.getCalendarSystem();return{success:!0,locale:s,languages:n,timeZone:a,textDirection:null,timeFormat:d,calendarSystem:p.calendarSystem??null}}async broadcastLocaleChange(){return!1}buildAppleLanguages(s){return ce(s)}isSimulator(){return T(this.device.deviceId)}async iosDefaultsRead(s,n){try{let a=await this.processExecutor.executeCommand("xcrun",$n(["spawn",this.device.deviceId,"defaults","read",s,n]));return w(a.stdout)}catch(a){return e.debug(`src/features/utility/system-configuration/IosSystemConfigurationAdapter.ts defaults read failed: ${a}`,a),null}}async iosDefaultsWrite(s,n,a){await this.processExecutor.executeCommand("xcrun",$n(["spawn",this.device.deviceId,"defaults","write",s,n,...a]))}toAppleLocale(s){return s.replace(/-/g,"_")}}function Yt(s,n,a){if(s.platform==="ios")return new Be(s,a);return new Me(s,n)}var Ht=500,Fi=10,Li=/^[a-zA-Z][a-zA-Z0-9-]*(\.[a-zA-Z][a-zA-Z0-9-]*)+$/;class dy{device;processExecutor;timer;adapter;constructor(s,n=v,a=new ne,c=i){this.device=s,this.processExecutor=a,this.timer=c,this.adapter=Yt(s,n.create(s),a)}async setLocale(s,n={}){let a=s.trim();if(!a)return{success:!1,languageTag:s,error:"languageTag must be a non-empty string"};return this.adapter.setLocale(a,n)}async setTimeZone(s){let n=s.trim();if(!n)return{success:!1,zoneId:s,error:"zoneId must be a non-empty string"};let a=Ne(n,Q(this.device.platform,"Setting the time zone"));if(a.error)return{success:!1,zoneId:s,error:a.error};let c=await this.adapter.setTimeZone(n);return a.note?Ni(c,a.note):c}async setTextDirection(s,n={}){return this.adapter.setTextDirection(s,n)}async broadcastLocaleChange(){return this.adapter.broadcastLocaleChange()}async set24HourFormat(s){return this.adapter.set24HourFormat(s)}async setCalendarSystem(s){let n=s.trim();if(!n)return{success:!1,calendarSystem:s,error:"calendarSystem must be a non-empty string"};return this.adapter.setCalendarSystem(n)}async getCalendarSystem(){return this.adapter.getCalendarSystem()}async getLocalizationSettings(){return this.adapter.getLocalizationSettings()}buildAppleLanguages(s){return ce(s)}async restartSpringBoard(){if(!T(this.device.deviceId))return!1;try{await this.processExecutor.executeCommand("xcrun",$n(["spawn",this.device.deviceId,"launchctl","stop","com.apple.SpringBoard"]))}catch(s){return e.warn(`[SystemConfigurationManager] Failed to stop SpringBoard: ${s}`),!1}for(let s=0;s<Fi;s++){await this.timer.sleep(Ht);try{let n=await this.processExecutor.executeCommand("xcrun",$n(["spawn",this.device.deviceId,"launchctl","list","com.apple.SpringBoard"]));if(n.stdout&&n.stdout.includes("SpringBoard"))return!0}catch(n){e.debug(`[SystemConfigurationManager] SpringBoard restart probe: ${r(n)}`)}}return e.warn("[SystemConfigurationManager] SpringBoard did not restart within timeout"),!1}async postLocaleChangeNotification(){if(!T(this.device.deviceId))return!1;try{return await this.processExecutor.executeCommand("xcrun",$n(["spawn",this.device.deviceId,"notifyutil","-p","com.apple.language.changed"])),!0}catch(s){return e.warn(`[SystemConfigurationManager] Failed to post locale notification: ${s}`),!1}}async applyIosLiveChanges(s){let n=T(this.device.deviceId),a=await this.restartSpringBoard(),c=await this.postLocaleChangeNotification(),d={springBoardRestarted:a,notificationPosted:c};if(s)if(!Li.test(s))e.warn(`[SystemConfigurationManager] Invalid bundle ID: ${s}`),d.appRestarted=!1;else if(!n)e.warn("[SystemConfigurationManager] iOS app restart after localization is only supported on simulators"),d.appRestarted=!1;else try{await this.processExecutor.executeCommand("xcrun",$n(["terminate",this.device.deviceId,s])),await this.timer.sleep(Ht),await this.processExecutor.executeCommand("xcrun",$n(["launch",this.device.deviceId,s])),d.appRestarted=!0}catch(p){e.warn(`[SystemConfigurationManager] Failed to restart app ${s}: ${p}`),d.appRestarted=!1}return d}}function Ni(s,n){return s.success?{...s,warning:s.warning?`${s.warning} ${n}`:n}:{...s,error:s.error?`${s.error}. ${n}`:n}}var CM=["fontScale","contentSize","density","nightMode"],zi=[...CM,...Do];function ki(s){return Do.filter((n)=>s.includes(n))}function Y(s,n){return Object.fromEntries(n.filter((a)=>(a in s)).map((a)=>[a,s[a]]))}var Mi={get:()=>{return},set:()=>{},delete:()=>{}};class xP{adbFactory;simctlFor;constructor(s=v,n){this.adbFactory=s;this.simctlFor=n}displayConfig(s,n={}){let a=this.simctlFor?.(s);return new cy(s,{adbFactory:this.adbFactory,...a?{simctl:a}:{},...n})}async read(s,n,a=q()){return a?.throwIfAborted(),U(a,()=>R(this.readValues(s,n),a))}async readValues(s,n){let a={};if(n.some((d)=>CM.includes(d)))Object.assign(a,Vi(await this.displayConfig(s).getRestorableConfig()));let c=ki(n);if(c.length>0)Object.assign(a,await this.displayConfig(s).accessibility().readSnapshot(c));if(n.some((d)=>!zi.includes(d))){let d=await new dy(s,this.adbFactory).getLocalizationSettings();if(d.success)Object.assign(a,{...s.platform==="ios"&&d.locale?{locale:d.locale}:{},...d.timeFormat!==void 0?{timeFormat:d.timeFormat}:{},...d.calendarSystem?{calendarSystem:d.calendarSystem}:{}})}return Y(a,n)}async write(s,n){let a=[],c=Bi(n);if(c.keys.length>0){let p=await this.displayConfig(s,{themeBaselines:Mi,contentSizeBaselines:st}).setConfig(c.input);if(p.success)a.push(...c.keys);else e.warn(`Failed to reset display settings on ${s.deviceId}: ${p.error}`)}a.push(...await this.writeAccessibility(s,n));let d=new dy(s,this.adbFactory);if(typeof n.locale==="string"){let p=await d.setLocale(n.locale,{broadcast:!1});this.collect(p,"locale",s,a)}if("timeFormat"in n){if(await this.writeTimeFormat(s,d,n.timeFormat??null))a.push("timeFormat")}if(typeof n.calendarSystem==="string"){let p=await d.setCalendarSystem(n.calendarSystem);this.collect(p,"calendarSystem",s,a)}return a}async writeAccessibility(s,n){let a=Object.fromEntries(Do.filter((c)=>typeof n[c]==="string"||n[c]===null).map((c)=>[c,n[c]]));if(Object.keys(a).length===0)return[];return this.displayConfig(s).accessibility().restoreSnapshot(a)}collect(s,n,a,c){if(s.success)c.push(n);else e.warn(`Failed to reset ${n} on ${a.deviceId}: ${s.error}`)}async writeTimeFormat(s,n,a){if(a==="12"||a==="24"){let c=await n.set24HourFormat(a==="24");if(!c.success)e.warn(`Failed to reset timeFormat on ${s.deviceId}: ${c.error}`);return c.success}if(s.platform!=="android")return e.warn(`Cannot unset the 24-hour override on ${s.deviceId}; leaving it as is`),!0;try{return await this.adbFactory.create(s).executeCommand("shell settings delete system time_12_24"),!0}catch(c){return e.warn(`Failed to unset timeFormat on ${s.deviceId}: ${r(c)}`,c),!1}}}function Vi(s){return{...s.fontScale!==void 0?{fontScale:s.fontScale}:{},...s.density!==void 0?{density:s.density}:{},...s.theme!==void 0?{nightMode:s.theme}:{},...s.contentSize!==void 0?{contentSize:s.contentSize}:{}}}function Bi(s){let n={},a=[];if(typeof s.fontScale==="number"||s.fontScale==="default")n.fontScale=s.fontScale,a.push("fontScale");if(typeof s.density==="number"||s.density==="default")n.density=s.density,a.push("density");if(we(s.contentSize))n.contentSize=s.contentSize,a.push("contentSize");if(typeof s.nightMode==="string")n.theme=s.nightMode,a.push("nightMode");return{input:n,keys:a}}var Bb=["fontScale","contentSize","density","nightMode","locale","timeFormat","calendarSystem","increaseContrast","reduceMotion","boldText","colorInversion","colorCorrection","magnification","magnificationScale","extraDim"];class Ge extends Error{}function $b(s,n,a,c){let{timer:d,capMs:p,label:f}=c,m=l(a,{timer:d,timeoutMs:p,unref:!0,label:f,timeoutError:()=>new Ge}).then(()=>{return},(y)=>{if(y instanceof Ge)e.warn(`[acquisition cleanup] ${f} on ${n} exceeded ${p}ms; the device is no longer held for it`);else e.warn(`[acquisition cleanup] Failed to ${f} on ${n}: ${r(y)}`,y)});s.registerAcquisitionDeviceCleanup(n,m,p)}function Ue(s){return Bb.filter((n)=>(n in s))}var Jt=15000;class PG{persistence;access;holderOf;queues=new Map;identityEpochs=new Map;pendingResetFences=new Map;timer;resetWaitMs;constructor(s,n,a,{timer:c=i,resetWaitMs:d=Jt}={}){this.persistence=s;this.access=n;this.holderOf=a;this.timer=c,this.resetWaitMs=d}recordBeforeChange(s,n){let a=this.holderOf(s.deviceId),c={value:!1},d=a===null||n.length===0?this.settled(s.deviceId):this.enqueueRecord(s,n,a,c);return this.awaitPendingReset(s.deviceId,d,a,{abandoned:c,keys:n})}async awaitPendingReset(s,n,a,{abandoned:c,keys:d}){try{await l(n,{timer:this.timer,timeoutMs:this.resetWaitMs,label:`Reset of device settings on ${s}`})}catch(p){if(c.value=!0,a!==null)this.fenceKeys(s,d,a);e.warn(`Proceeding with a settings change on ${s} before its pending reset finished: ${r(p)}`,p)}}fenceKeys(s,n,a){for(let c of this.pendingResetFences.get(s)??[]){for(let d of n)c.keys.add(d);c.sessionId=a}}enqueueRecord(s,n,a,c){return this.enqueue(s.deviceId,async()=>{if(c.value)return;let d=await this.persistence.get(s.deviceId),p=d?.values??{},f=n.filter((g)=>!(g in p)),m=f.length>0?await this.access.read(s,f):{},y={...Y(m,f),...p};if(Ue(y).length===0)return;if(d&&d.sessionId===a&&Ue(m).length===0)return;await this.persistence.put(s.deviceId,{platform:s.platform,name:s.name,sessionId:a,values:y})})}resetOnAcquisition(s,n){let a={keys:new Set,sessionId:n},c=this.pendingResetFences.get(s)??new Set;c.add(a),this.pendingResetFences.set(s,c);let d=this.enqueue(s,()=>this.runReset(s,n,a));return d.then(()=>{if(c.delete(a),c.size===0&&this.pendingResetFences.get(s)===c)this.pendingResetFences.delete(s)}),d}async runReset(s,n,a){let c=await this.persistence.get(s);if(!c||c.sessionId===n)return;let d={deviceId:s,name:c.name,platform:c.platform},p=Ue(c.values),f=await this.access.read(d,p),m=p.filter((b)=>a.keys.has(b)),y=p.filter((b)=>!a.keys.has(b)&&(!(b in f)||f[b]!==c.values[b])),g=y.length>0?await this.access.write(d,Y(c.values,y)):[],D=y.filter((b)=>!g.includes(b)),h=[...D,...m];if(h.length===0){await this.persistence.delete(s);return}if(D.length>0)e.warn(`Could not reset ${D.join(", ")} on ${s} to the recorded device defaults; the next acquisition by another session retries`);await this.persistence.put(s,{...c,...m.length>0?{sessionId:a.sessionId}:{},values:Y(c.values,h)})}forget(s){return this.identityEpochs.set(s,(this.identityEpochs.get(s)??0)+1),this.enqueue(s,()=>this.persistence.delete(s),!0)}settled(s){return this.queues.get(s)??Promise.resolve()}enqueue(s,n,a=!1){let c=this.queues.get(s)??Promise.resolve(),d=this.identityEpochs.get(s)??0,p=c.then(()=>a||(this.identityEpochs.get(s)??0)===d?n():void 0).catch((f)=>{e.warn(`Device setting defaults failed on ${s}: ${r(f)}`,f)});return this.queues.set(s,p),p.then(()=>{if(this.queues.get(s)===p)this.queues.delete(s)}),p}}var Qt;function iX(s){Qt=s}async function Ed(s,n){try{await Qt?.recordBeforeChange(s,n)}catch(a){e.warn(`Failed to record device setting defaults on ${s.deviceId}: ${r(a)}`,a)}}function oX(s,n,a=i){return(c,d)=>{$b(s,c,n.resetOnAcquisition(c,d),{timer:a,capMs:Jt,label:`reset device setting defaults for session ${d}`})}}var Gi="device-setting-defaults";function Ui(s){return{name:Gi,onDeviceIdentityReplaced:(n)=>{s.forget(n)},onDeviceIncarnationChanged:()=>{}}}function sX(s){return Xt(Ui(s))}
|
|
9
|
+
export{Pf,Af,xl,B8,$8,x1,mG,C1,PP,D1,U8,EM,AP,oy,fG,TP,kP,KE,IM,EP,O1,M1,H8,q8,V8,hG,IP,N1,W8,gG,z8,j8,K8,yG,G8,vG,_P,Y8,Fb,_M,GE,J8,X8,sy,Z8,Q8,F1,eX,ay,tX,Lb,bG,L1,B1,rX,SG,wG,Do,nX,xM,cy,RG,dy,CM,xP,Bb,$b,PG,iX,Ed,oX,sX};
|
|
10
|
+
|
|
11
|
+
//# debugId=D706F8FDC5739E9464756E2164756E21
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{e}from"./chunk-z8t0v07j.js";import"./chunk-mf9spd4g.js";import{up}from"./chunk-32jpxz2y.js";import"./chunk-nwm2pq5v.js";import{So}from"./chunk-h3n4adc6.js";import"./chunk-a2sc4jm0.js";import"./chunk-ggtd5x5a.js";import"./chunk-8cghfzb2.js";import"./chunk-tyazf3sk.js";import"./chunk-79q5xsdc.js";import"./chunk-44bt78m9.js";import"./chunk-jhnbfj19.js";import"./chunk-6d3mmqxt.js";import"./chunk-4fgdhcwx.js";import"./chunk-0e4gm1kj.js";import{ku}from"./chunk-zd9vmkzn.js";import"./chunk-vs9r72ta.js";import"./chunk-mqc1d0eb.js";import"./chunk-a4k9rt7z.js";import"./chunk-sjn0nj4p.js";import"./chunk-bn64x5z5.js";import"./chunk-sns0c35v.js";import{r,t}from"./chunk-9rkfyt6q.js";import{realpathSync as p}from"fs";import{basename as h,dirname as g,resolve as f}from"path";function b(o){let n=f(o);try{return p(n)}catch(a){e.debug(`Direct-mode DB realpath unavailable: ${r(a)}`);try{return f(p(g(n)),h(n))}catch(D){return e.debug(`Direct-mode DB parent realpath unavailable: ${r(D)}`),n}}}function P(o,n){return o.filter((a)=>a.dbPath!==void 0&&b(a.dbPath)===n)}function _(o){let n=b(o.resolveDbPath()),a=o.findLiveDaemonDbOwners(),D=P(a,n);if(D.length>0){let i=D.map((c)=>c.pid).join(", ");throw new t(`A live AutoMobile daemon (pid ${i}) already owns the database at ${n}. Direct mode (--no-proxy/--direct) would open a second writer on the same SQLite file, causing SQLITE_BUSY stalls and competing migrations. Resolve this by either running without --no-proxy/--direct to share the daemon, stopping the daemon, or setting AUTOMOBILE_DB_PATH (or AUTOMOBILE_DB_DIR) to an isolated database for this direct-mode instance.`)}let d=a.filter((i)=>i.dbPath===void 0);if(d.length>0){let i=d.map((c)=>c.pid).join(", ");throw new t(`Cannot safely start direct mode (--no-proxy/--direct): a live AutoMobile daemon (pid ${i}) is running but its database path could not be determined (it may still be starting up, or is using a non-default PID file), so a collision on ${n} cannot be ruled out. Wait for the daemon to finish starting and retry, stop the daemon, or set AUTOMOBILE_DB_PATH (or AUTOMOBILE_DB_DIR) to an isolated database for this direct-mode instance.`)}}function I(o={}){let n=o.manager??new ku,a=o.readPidFileData??So;return{resolveDbPath:o.resolveDbPath??up,findLiveDaemonDbOwners:()=>{let d;try{d=n.findLiveDaemonProcesses()}catch(l){let u=r(l);throw e.warn(`Direct-mode guard: process-table scan failed; refusing direct mode because same-DB daemon ownership cannot be verified. ${u}`,l),new t(`Cannot verify daemon ownership before starting direct mode (--no-proxy/--direct): failed to inspect the process table (${u}). Retry, stop any running daemon, or set AUTOMOBILE_DB_PATH (or AUTOMOBILE_DB_DIR) to an isolated database.`)}if(d.length===0)return[];let i=[],c=new Set,s=a();if(s&&typeof s.pid==="number"&&s.dbPath!==void 0&&d.includes(s.pid))i.push({pid:s.pid,dbPath:s.dbPath}),c.add(s.pid);let m=d.filter((l)=>!c.has(l));if(m.length>0){e.debug(`Direct-mode guard: ${m.length} live daemon(s) could not be mapped to a DB path (starting up or non-default PID file); direct mode will refuse to be safe: ${m.join(", ")}`);for(let l of m)i.push({pid:l,dbPath:void 0})}return i}}}export{_ as assertDirectModeDbOwnership,I as createDefaultDirectModeGuardDeps};
|
|
3
|
+
|
|
4
|
+
//# debugId=DAC110DDC61262BF64756E2164756E21
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import"./chunk-mf9spd4g.js";import"./chunk-z8t0v07j.js";import"./chunk-79q5xsdc.js";import{Z6}from"./chunk-stfzjr9y.js";import{t}from"./chunk-9rkfyt6q.js";import{createHash as l}from"crypto";import s from"path";function m(e){let r=e._meta??{},{frame:n,revision:o,variants:i,rendererVersion:p}=r;if(typeof n!=="string"||typeof o!=="number"||!Array.isArray(i)||typeof p!=="string"||typeof e.text!=="string")throw new t(`The prototype web page for ${e.uri} came back without its HTML or metadata; nothing was written.`);return{frame:n,revision:o,variants:i.map(String),rendererVersion:p}}var b=(e)=>l("sha256").update(e).digest("hex");function w(e,r,n){return`${Z6(e.variant??e.id)}-${r.frame}-r${r.revision}-${n.slice(0,12)}.html`}async function g(e,r,n){let o=e.outputPath;if(o===void 0)return s.join(r.defaultDir(),n);if(!s.isAbsolute(o))throw new t(`outputPath "${o}" is not absolute: give an absolute file or directory path, or omit outputPath to write under ${r.defaultDir()}.`);let i=await r.kind(o);if(i==="directory"||/[\\/]$/.test(o))return s.join(o,n);if(i==="other")throw new t(`outputPath "${o}" exists and is not a regular file or directory; choose another outputPath.`);if(s.extname(o).toLowerCase()!==".html")throw new t(`outputPath "${o}" is neither an .html file nor a directory: end a file path in .html, or end a directory path in "${s.sep}" (or name an existing directory) to write ${n} there.`);return o}function f(e){return new t(`${e} already exists with different content; pass overwrite: true to replace it, or choose another outputPath. Nothing was written.`)}var P=new Set(["EACCES","EPERM","EROFS","ENOENT","ENOTDIR","EISDIR"]);function x(e,r){let n=e?.code;if(n==="EEXIST")return f(r);let o=n!==void 0&&P.has(n)?` (${n})`:"",i=e instanceof Error?`: ${e.message}`:"";return new t(`Cannot write the prototype web page to ${r}${o}${i}. Choose a writable outputPath, or omit it to write under the AutoMobile data directory.`)}async function E(e,r,n,o){if(await e.kind(r)==="file"&&!o){let i=await e.read(r);if(Buffer.from(i).equals(Buffer.from(n)))return;throw f(r)}try{await e.write(r,n,{exclusive:!o})}catch(i){throw x(i,r)}}async function I(e,r){let{id:n,frame:o,revision:i,variant:p,mcpSessionId:h}=e,d=await r.readWeb({id:n,frame:o,revision:i,variant:p,mcpSessionId:h}),a=m(d),u=Buffer.from(d.text,"utf8"),y=b(u),c=await g(e,r.files,w(e,a,y));return await E(r.files,c,u,e.overwrite===!0),{path:c,sha256:y,bytes:u.length,frame:a.frame,revision:a.revision,variants:a.variants,rendererVersion:a.rendererVersion}}export{I as exportPrototypeWeb};
|
|
3
|
+
|
|
4
|
+
//# debugId=579437E5E9CEE05664756E2164756E21
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{i,e}from"./chunk-z8t0v07j.js";import{pe,B,o,M,zo,Vn,_e,Br,_}from"./chunk-h3n4adc6.js";import{Yx}from"./chunk-0e4gm1kj.js";import{oV,wV,RV,eT,AV}from"./chunk-6d3mmqxt.js";import{Lo,aC}from"./chunk-sns0c35v.js";import{r,t,u,yt}from"./chunk-9rkfyt6q.js";var Oc=5000,o0=2500,Hd=30000,ql=1770000;var s0=800,q6=500;async function My(a,n,c,{timeoutMs:m=s0,context:d="while TalkBack is on",platform:l="android"}={}){let p=n.now()+Math.max(0,m);while(n.now()<p){o(c);let s=await a(p-n.now());if(o(c),s&&n.now()<=p)return s;let y=p-n.now();if(y>0)await n.sleep(Math.min(q6,y))}throw o(c),new t(l==="ios"?`Unable to retrieve a fresh tap hierarchy: iOS runner failed to produce a view hierarchy ${d}. Observe again.`:`Unable to retrieve a fresh tap hierarchy: hierarchy unavailable from the accessibility service ${d}. Observe again and check that the accessibility service is running.`)}async function a0(a){let{adb:n,x:c,y:m,durationMs:d,signal:l,assertCurrent:p,logTag:s}=a;o(l);let y=Lo(d),w=Br(d),f=async(h)=>{p?.();let T=await n.executeCommand(h,{timeoutMs:w,signal:l});aC(h,T)};try{try{await f(`shell input touchscreen swipe ${c} ${m} ${c} ${m} ${y}`)}catch(h){if(e.warn(`[${s}] touch input swipe failed: ${r(h)}`,h),Yx(h,d,l),h instanceof _e)throw h;o(l),await f(`shell input swipe ${c} ${m} ${c} ${m} ${y}`)}}catch(h){if(e.warn(`[${s}] Android long press failed: ${r(h)}`,h),Yx(h,d,l),h instanceof _e)throw h;throw u(h,"Android long press failed")}}var A=300,VI=1500,c0=100;async function d0(a,n,c,{preTapHash:m,signal:d}){d=pe(d),o(d),await a.sleep(A),o(d);let l;try{l=await n(VI)}catch(s){if(d?.aborted||s instanceof Error&&s.name==="AbortError"||s instanceof _e||s instanceof Vn)throw s;return e.warn(`[androidGhostTapRetry] Post-tap hierarchy unreadable: ${r(s)}`,s),{status:"unavailable"}}if(o(d),!l||!m)return{status:"unavailable"};let p=c(l);if(!p)return{status:"unavailable"};if(p!==m)return{status:"changed"};return{status:"unchanged",hierarchy:l}}async function b(a,n,c,m){let l=(m?.timer??i).now()+n,p=await a.requestHierarchySync(new B,M.isRawElementSearchEnabled(),c,{timeoutMs:n}),s=p?a.convertToViewHierarchyResult(p.hierarchy):null;if(!s)return null;if(s.ctrlProxyIncomplete&&m)return oV(s,m,l,c);return s}function l0(a,n){if(!a)return!0;let c=n?.hierarchy;return Boolean(c&&typeof c==="object"&&"error"in c&&c.error)}async function u0(a,n){let{device:c}=a,{signal:m,screenSize:d}=n,l=Math.max(0,n.timeoutMs),p=a.timer.now()+l;switch(c.platform){case"android":{let s=await b(a.androidService,l,m,{adb:a.adb,timer:a.timer});return s?a.prepareForResponse(s,d):null}case"ios":{let s=_.getInstance(c),y=n.forceCapture?await s.requestHierarchySyncForTapRevalidation(void 0,!1,m,l):await s.requestHierarchySync(void 0,!1,m,{timeoutMs:l});if(!y?.hierarchy)return null;let w=a.viewHierarchy.normalizeIosHierarchy(s.convertToViewHierarchyResult(y.hierarchy)),f=y[zo];if(f==="device"||f==="client-cache")Object.assign(w,{[zo]:f});let h=a.prepareForResponse(w,d);return await RV(h,a.sdkBridge??wV(c,a.timer),m,Math.max(0,p-a.timer.now())),await AV(h,a.sdkWeb??eT(c,a.timer),m,Math.max(0,p-a.timer.now())),h}default:throw yt(c.platform,a.actionLabel)}}async function p0(a){let{timer:n,signal:c}=a,m=a.startTime+a.durationMs,d=a.maxRequests??Number.POSITIVE_INFINITY,l=0,p=a.startTime;while(n.now()<m&&l<d){if(o(c),a.pacing==="sleepFirst")await n.sleep(a.intervalMs);else{let y=Math.min(p,m)-n.now();if(y>0)await n.sleep(y),o(c)}if(n.now()>=m)break;p=n.now()+a.intervalMs;let s=await a.fetch(Math.max(0,m-n.now()));if(l+=1,!s)continue;if(a.discardLateResult&&n.now()>=m)break;if(a.accept(s))break}return{requestCount:l}}
|
|
3
|
+
export{Oc,o0,Hd,ql,s0,q6,My,a0,VI,c0,d0,l0,u0,p0};
|
|
4
|
+
|
|
5
|
+
//# debugId=30B0064D2A5C5D2F64756E2164756E21
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{ht,Zi,pe,Ea,o,R,eg,Ms,G,Ns,we,dl,_e,Br,Jv,Zv,k}from"./chunk-h3n4adc6.js";import{i,e}from"./chunk-z8t0v07j.js";import{r,t}from"./chunk-9rkfyt6q.js";function Q(n){return n?.startsWith("Element not found with ")===!0}function Y(n,a){return n&&!Q(a)}async function nT(n){if(Y(n.advertised,n.error))return!0;if(!n.advertised||!n.needsNodeSelector)return!1;return!await z(n.selected,n.readHierarchy)}async function z(n,a){let s=await q(a);return WF(s)&&V(n,s)}async function O(n,a,s){let c;try{c=await a()}catch(d){if(d instanceof _e)throw d;return e.warn(`[TalkBack] Cannot verify resource-id uniqueness: ${r(d)}`,d),`Unable to verify uniqueness of resource-id "${n}"; using coordinate fallback.`}if(!WF(c))return`Unable to verify uniqueness of resource-id "${n}" in an incomplete hierarchy; using coordinate fallback.`;let l=new we().project(c).filter((d)=>Ns(d.nativeId,n));J(l,s);let u=new Set(l.map((d)=>d.source)).size;if(u!==1)return u>1?`Selected resource-id "${n}" is shared by ${u} elements; using coordinate fallback.`:`Resource-id "${n}" is absent from the current hierarchy; using coordinate fallback.`;return}function J(n,a){if(!a)return;if(!n.some((c)=>["text","content-desc"].every((u)=>!a[u]||c.properties[u]===a[u])&&(!a.bounds||c.bounds!==void 0&&Ms(c.bounds,a.bounds,0))))throw new t("Selected element moved or is gone from the current hierarchy. Observe again before tapping.")}async function P(n,a,s={}){if(ee(n,s))return{element:n,hierarchy:null};let c=s.hierarchy??await q(a);if(!WF(c)&&!L(s))return{element:n,hierarchy:c};if(!c||c.hierarchy.error)throw new t("Cannot confirm the selected element because the accessibility hierarchy is unavailable. Observe again and check that the accessibility service is running.");return Z(n,c,s)}function Z(n,a,s){let c=V(n,a);if((!s.hierarchy||!c)&&s.reResolve){let l=te(s.reResolve,a);if(!l)throw new t("Selected element moved or is gone; the original selector no longer resolves. Observe again before tapping.");if(!_(n,l))throw new t("Selected element moved; the original selector now resolves to a different element. Observe again before tapping.");if(!l.bounds)throw new t("Selected element moved and has no current bounds. Observe again before tapping.");return s.onResolvedElement?.(l),{element:l,hierarchy:a}}if(!c)throw new t("Selected element moved or is gone from the current hierarchy. Observe again before tapping.");return{element:n,hierarchy:a}}function _(n,a){return["text","content-desc","resource-id","test-tag","unique-id","collection-row-index","collection-column-index"].every((s)=>n[s]===void 0||n[s]===a[s])}function WF(n){return!!n&&!n.hierarchy.error&&!n.ctrlProxyIncomplete&&!n.truncationReasons?.length&&!n.windows?.some((a)=>a.truncationReasons?.length)}async function q(n){try{return await n()}catch(a){if(a instanceof _e)throw a;return e.warn(`[TalkBack] Cannot confirm selected target: ${r(a)}`,a),null}}function V(n,a){return new we().project(a).some((s)=>_(n,s.properties)&&(!n.bounds||!!s.bounds&&Ms(s.bounds,n.bounds,0)))}function L(n){return!!(n.hierarchy||n.reResolve)}function ee(n,a){return!L(a)&&(!n["resource-id"]||!!n["test-tag"]||!!n["unique-id"])}function te(n,a){try{return n(a)}catch(s){if(s instanceof _e)throw s;throw new t("Selected element moved or is gone; the original selector cannot resolve unambiguously in the newer hierarchy. Observe again before tapping.",{cause:s})}}function Lo(n){return n>0?Math.max(1,Math.round(n)):Math.round(n)}function re(n,a){return`shell input touchscreen${a===void 0?"":` -d ${a}`} ${n}`}class TV extends t{}function aC(n,a){let s=[a.stdout,a.stderr].filter(Boolean).join(`
|
|
3
|
+
`);if(/(?:^|\r?\n)(?:Unknown command:|Error:|Usage: input\b)/.test(s))throw new TV(`Android command failed: ${n}: ${s.trim()}`)}async function dc(n,a,s,c={}){let{signal:l,assertCurrent:u,timeoutMs:d,onDispatch:p}=c;await X4(n,re(a,s),{signal:l,assertCurrent:u,timeoutMs:d,onDispatch:p})}async function X4(n,a,s={}){let{signal:c,assertCurrent:l,timeoutMs:u,onDispatch:d}=s;if(!l)d?.();let p=l?await n.execute(["shell",a.slice(6)],{signal:c,timeoutMs:u,beforeDispatch:async()=>{l(),d?.()}}):await n.executeCommand(a,{timeoutMs:u,signal:c});aC(a,p)}async function Ra(n,a){return a===void 0||a===0||await n.supportsCommand?.("gesture_display_id_v1")===!0}var Pa=500,kh=1e4,mm=60000,iT=1000,H=200;function Aa(n){return typeof n==="string"&&n.toLowerCase().includes("stale frame context")}var ne=10,oe=50;function GS(n,a){if(n.action==="longPress")return n.durationMs??1000;return a==="android"?ne:oe}var ie=300,ae=250;function se(n){return`The two taps started ${n} ms apart, too close to or beyond Android's ${ie} ms double-tap timeout, so the app may not register a double tap. Update CtrlProxy so the double tap is sent as one device-timed gesture.`}async function Z4(n,a,s){let c=H-(n.now()-a);if(c>0)await R(n.sleep(c),s.signal);o(s.signal);let l=n.now()-a;if(l>ae){let u=se(l);e.warn(`[doubleTap] ${u}`),s.onWarning?.(u)}}async function Q4(n,a){let{signal:s}=a,c=n;if(typeof c.requestDoubleTapCoordinates!=="function")return!1;o(s);let l=!1,u=await c.requestDoubleTapCoordinates(a.x,a.y,()=>{l=!0},{frameContext:a.frameContext,displayId:a.displayId,signal:s,beforeSend:a.assertCurrent});if(u.success)a.onTapDelivered?.(),a.onTapDelivered?.();if(o(s),u.success)return!0;return ce(u,{dispatched:l,frameContext:a.frameContext})}function ce(n,a){let{error:s}=n;if(a.frameContext!==void 0&&Aa(s))throw new t(s??"Stale frame context; observe a fresh frame before retrying");if(a.dispatched){if(n.acknowledged===!0)throw new t(`Double tap was rejected by CtrlProxy: ${s??"unknown error"}`);throw new t(`Double tap outcome is indeterminate: the gesture was dispatched but no result was confirmed (${s??"unknown error"}). Do not retry automatically.`)}return e.debug(`[doubleTap] single-gesture double tap not used (${s??"unknown error"}); sending two taps`),!1}async function Eh(n){let{timer:a,signal:s}=n;if(n.client&&await Q4(n.client,{...n.point,frameContext:n.frameContext,displayId:n.displayId,signal:s,assertCurrent:n.assertCurrent,onTapDelivered:n.onTapDelivered}))return;let c=a.now();await n.tap(!1),await Z4(a,c,{signal:s,onWarning:n.onWarning}),n.assertCurrent?.(),await n.tap(!0)}function Ih(n,a="coordinate activation"){if(n===void 0||n===0)return;return new t(`TalkBack ${a} cannot target display ${n}; no gesture was dispatched.`)}class cC extends t{}function xQ(n){return!(n instanceof cC)}function fn(n){return new cC(`Tap outcome is indeterminate: the request was dispatched but no result was confirmed (${n??"unknown error"}). Do not retry automatically.`)}async function YS(n,a,s,{durationMs:c,options:l={}}){let{x:u,y:d}=s,{frameContext:p,signal:m,assertCurrent:f,onTapDelivered:g}=l;o(m);let b=!1,y=()=>{b=!0},h=Jv(c),v=await n.requestTapCoordinates({x:u,y:d,duration:c,timeoutMs:h,frameContext:p,onDispatch:y,signal:m,beforeSend:f});if(v.success)g?.();if(o(m),v.success)return;if(p!==void 0&&Aa(v.error))throw new t(v.error??"Stale frame context; observe a fresh frame before retrying");if(b)throw fn(v.error);e.warn(`[TapOnElement] dispatchGesture tap failed (${v.error}), falling back to ADB input`),await dc(a,c>=Pa?`swipe ${u} ${d} ${u} ${d} ${Lo(c)}`:`tap ${u} ${d}`,void 0,{signal:m,assertCurrent:f,timeoutMs:c>=Pa?Br(c):void 0}),g?.(),o(m)}async function JS(n,a,{durationMs:s,frameContext:c,options:l={}}){return U(n,a,{durationMs:s,frameContext:c,options:l})}async function XS(n,a,{durationMs:s=50,frameContext:c,options:l={}}={}){return U(n,a,{durationMs:s,frameContext:c,options:{...l,failureLabel:"double tap",doubleTap:!0}})}async function U(n,a,{durationMs:s,frameContext:c,options:l}){let{x:u,y:d}=a,{failureLabel:p="tap",signal:m,doubleTap:f=!1}=l;if(f)o(m,!0);let g=l.timeoutMs??Jv(s),b=!1,y=()=>{b=!0},h;try{h=f?await n.requestDoubleTapCoordinates(u,d,g,{frameContext:c,signal:m,onDispatch:y}):await n.requestTapCoordinates({x:u,y:d,duration:s,timeoutMs:g,frameContext:c,signal:m,onDispatch:y})}catch(v){if(le(v,b,m))throw e.warn(`[coordinateTapDispatch] iOS ${p} transport failed`,v),fn(r(v));throw v}if(h.success)return;if(ue(h,b))throw e.warn(`[coordinateTapDispatch] iOS ${p} at (${u}, ${d}) unconfirmed after ${g}ms: ${h.error??"no error"}; the runner may stay busy until its XCUITest gesture returns`),fn(h.error);throw new t(`CtrlProxy iOS ${p} failed: ${h.error}`)}function le(n,a,s){return a&&!(n instanceof t)&&n!==s?.reason}function ue(n,a){if(dl(n))return!0;return(n.dispatched??a)&&n.acknowledged!==!0&&!Aa(n.error)}function de(n,a,s){if(n.success||n.focusCompleted)s.onDispatched();if(!n.success)return;if(a==="doubleTap")s.onDispatched();for(let c of n.warnings??[])s.onWarning?.(c)}function me(n,a){let{target:s,signal:c,talkBack:l}=a,u={assertCurrent:()=>{o(c),s.assertCurrent()}};return async({x:d,y:p})=>{u.assertCurrent();let m=n.action,f=m==="longPress"?n.duration??800:50,g=m==="tap"?await l.strategy.executePreciseTap(d,p,l.driver,u):await l.strategy.executeCoordinateFallback({x:d,y:p},m,f,{driver:l.driver,fenceOptions:{displayFence:u}});if(de(g,m,a),o(c),!g.success)throw new t(`TalkBack coordinate tap failed: ${g.error??"activation was not confirmed"}${g.focusCompleted?" Focus touch was delivered; activation failed. Do not retry automatically.":""}`)}}async function zF(n,a,s,c){let{target:l,signal:u,timer:d=i}=c,p=c.talkBack?Ih(l.displayId):void 0;if(p)throw p;if(c.talkBack)return me(s,{...c,talkBack:c.talkBack});let m=await Ra(n,l.displayId),f=async({x:g,y:b},y)=>{o(u),l.assertCurrent();let h=s.action==="longPress"?s.duration??800:10;if(m){let v=!1,w=()=>{v=!0},C=await n.requestTapCoordinates({x:g,y:b,duration:h,timeoutMs:Jv(h),onDispatch:w,signal:u,displayId:l.displayId===0?void 0:l.displayId,beforeSend:l.assertCurrent});if(C.success)y();if(o(u),C.success)return;if(v)throw fn(C.error);if(Aa(C.error))throw new t(C.error??"Stale frame context");e.warn(`[androidDisplayTapDispatch] dispatchGesture tap failed (${C.error}), falling back to ADB input`)}await dc(a,s.action==="longPress"?`swipe ${g} ${b} ${g} ${b} ${Lo(h)}`:`tap ${g} ${b}`,l.displayId,{signal:u,assertCurrent:l.assertCurrent,timeoutMs:s.action==="longPress"?Br(h):void 0}),y(),o(u)};return async(g)=>{let b=0,y=()=>{b++,c.onDispatched()};try{if(s.action==="doubleTap")await Eh({client:m?n:void 0,point:g,displayId:l.displayId===0?void 0:l.displayId,timer:d,signal:u,assertCurrent:l.assertCurrent,onTapDelivered:y,onWarning:c.onWarning,tap:()=>f(g,y)});else await f(g,y)}catch(h){if(s.action==="doubleTap"&&b===1)throw fn(`${r(h)}. Double tap partially applied: one tap was delivered; the second tap was not confirmed`);throw h}}}function x(n){return typeof n==="string"&&n.length>0?n:void 0}function j(n){return typeof n==="number"&&Number.isInteger(n)?n:void 0}function rs(n){let a={resourceId:x(n["resource-id"]),testTag:x(n["test-tag"]),uniqueId:x(n["unique-id"])},s=j(n["collection-row-index"]),c=j(n["collection-column-index"]),l=a.resourceId!==void 0||a.testTag!==void 0||a.uniqueId!==void 0;if(l&&s!==void 0&&c!==void 0)a.collectionRow=s,a.collectionColumn=c;return l?a:void 0}function Zs(n){return n.testTag!==void 0||n.uniqueId!==void 0||n.collectionRow!==void 0||n.collectionColumn!==void 0}function W(n,a){let{testTag:s,resourceId:c}=n;if(s===void 0||n.uniqueId!==void 0||n.collectionRow!==void 0||n.collectionColumn!==void 0)return;let l=a.filter((u)=>u["test-tag"]===s&&(c===void 0||u["resource-id"]===c)).length;return l>1?`test tag "${s}" is shared by ${l} elements, so it does not identify the target`:void 0}async function _h(n,a,s){if(Zs(n))return await a.supportsNodeActionSelectors()?void 0:"Runner does not support stable node selectors";return O(n.resourceId,()=>a.getAccessibilityHierarchy?.()??Promise.resolve(null),s)}class D{textMatcher;constructor(n=new Zv){this.textMatcher=n}findTargetIndex(n,a,s={}){return this.resolveTargetCandidate(n,a,s)?.index??null}findCurrentFocusIndex(n,a){if(!n||a.length===0)return null;let s=a.indexOf(n);if(s>=0)return s;let c=this.getResourceId(n);if(c)return this.findIndexByValue(a,n,(p)=>this.getResourceId(p),{value:c});let l=this.getTestTag(n);if(l)return this.findIndexByValue(a,n,(p)=>this.getTestTag(p),{value:l});let u=this.getContentDesc(n);if(u)return this.findIndexByValue(a,n,(p)=>this.getContentDesc(p),{value:u,caseInsensitive:!0});let d=this.getText(n);if(d)return this.findIndexByValue(a,n,(p)=>this.getText(p),{value:d,caseInsensitive:!0});if(n.bounds){let p=n.bounds,m=a.findIndex((f)=>f.bounds&&f.bounds.left===p.left&&f.bounds.top===p.top&&f.bounds.right===p.right&&f.bounds.bottom===p.bottom);return m===-1?null:m}return null}matchesSelector(n,a,s={}){let c=this.getResourceId(n),l=this.getContentDesc(n),u=this.getTestTag(n),d=this.getText(n);if(a.resourceId&&a.resourceId!==c)return!1;if(a.testTag&&a.testTag!==u)return!1;if(a.text){let p=this.createTextMatcher(a.text,s);if(!(p(d)||p(l)))return!1}if(a.contentDesc){if(!this.createTextMatcher(a.contentDesc,s)(l))return!1}return!0}matchesFocusedTarget(n,a,s){let c=this.resolveTargetCandidate(a,s);if(!c)return!1;let l={partialMatch:c.partialMatch};if(!this.matchesSelector(n,s,l))return!1;if(c.matchCount===1)return!0;return n===c.element||c.element.bounds!==void 0&&this.boundsMatch(n,c.element.bounds)}createTextMatcher(n,a){let s=a.partialMatch??!1,c=a.caseSensitive??!1;return this.textMatcher.createTextMatcher(n,s,c)}findMatches(n,a,s){return n.flatMap((c,l)=>this.matchesSelector(c,a,s)?[{element:c,index:l}]:[])}resolveTargetCandidate(n,a,s={}){let c=this.findMatches(n,a,{...s,partialMatch:!1}),l=c.length===0&&s.partialMatch!==!1,u=l?this.findMatches(n,a,{...s,partialMatch:!0}):c;if(u.length===0)return null;return{...this.selectTargetCandidate(u,a),matchCount:u.length,partialMatch:l}}selectTargetCandidate(n,a){if(n.length===1)return n[0];if(!a.bounds)return this.firstVisibleOrFirst(n);return n.find(({element:c})=>this.boundsMatch(c,a.bounds))??this.nearestBoundsMatch(n,a.bounds)}firstVisibleOrFirst(n){return n.find(({element:a})=>this.isVisible(a))??n[0]}nearestBoundsMatch(n,a){let s,c=Number.POSITIVE_INFINITY;for(let l of n){if(!l.element.bounds)continue;let u=this.boundsDistance(l.element.bounds,a);if(u<c)s=l,c=u}return s??this.firstVisibleOrFirst(n)}findIndexByValue(n,a,s,{value:c,caseInsensitive:l=!1}){let u=l?c.toLowerCase():c,d=n.flatMap((m,f)=>{let g=s(m);if(!g)return[];return(l?g.toLowerCase():g)===u?[{element:m,index:f}]:[]});if(d.length===1)return d[0].index;let p=a.bounds;if(!p)return null;return d.find(({element:m})=>this.boundsMatch(m,p))?.index??null}getResourceId(n){let a=n["resource-id"]??n.resourceId;return typeof a==="string"&&a.length>0?a:void 0}getContentDesc(n){let a=n["content-desc"]??n.contentDesc;return typeof a==="string"&&a.length>0?a:void 0}getTestTag(n){let a=n["test-tag"]??n.testTag;return typeof a==="string"&&a.length>0?a:void 0}getText(n){return typeof n.text==="string"&&n.text.length>0?n.text:void 0}isVisible(n){if(!n.bounds)return!1;let a=n.bounds.right-n.bounds.left,s=n.bounds.bottom-n.bounds.top;return a>0&&s>0}boundsMatch(n,a){if(!n.bounds)return!1;return n.bounds.left===a.left&&n.bounds.top===a.top&&n.bounds.right===a.right&&n.bounds.bottom===a.bottom}boundsDistance(n,a){let s=(n.left+n.right)/2,c=(n.top+n.bottom)/2,l=(a.left+a.right)/2,u=(a.top+a.bottom)/2;return(s-l)**2+(c-u)**2}}class A{detectPlatform(n){if(!n)return e.warn("[DeviceDetection] Empty device ID provided, defaulting to Android"),"android";let a=/^emulator-\d+$/;if(Ea(n))return e.info(`[DeviceDetection] Detected iOS device: ${n}`),"ios";if(a.test(n))return e.info(`[DeviceDetection] Detected Android emulator: ${n}`),"android";return e.info(`[DeviceDetection] Device ID pattern suggests Android device: ${n}`),"android"}isiOSDevice(n){return this.detectPlatform(n)==="ios"}isAndroidDevice(n){return this.detectPlatform(n)==="android"}static detectPlatform=(n)=>new A().detectPlatform(n);static isiOSDevice=(n)=>new A().isiOSDevice(n);static isAndroidDevice=(n)=>new A().isAndroidDevice(n)}class S extends Error{}class T extends t{}class I{accessibilityService;constructor(n){this.accessibilityService=n}async getAccessibilityHierarchy(){return this.accessibilityService.getAccessibilityHierarchy(void 0,{skipWaitForFresh:!1,disableAllFiltering:!0})}async requestTraversalOrder(){return this.accessibilityService.requestTraversalOrder()}async requestCurrentFocus(){return this.accessibilityService.requestCurrentFocus()}async requestAction(n,a,s){return this.accessibilityService.requestAction(n,a,void 0,{signal:s})}async requestNodeAction(n,a,s){return this.accessibilityService.requestNodeAction(n,a,{signal:s})}async supportsNodeActionSelectors(){return this.accessibilityService.supportsNodeActionSelectors()}}class B{createDriver(n){return new I(k.getInstance(n))}}var fe="Request time budget exhausted during focus navigation.";function M(n,a){if(n instanceof S||ht(n)||a<=0)return n;let s=r(n);return new S(`${s.endsWith(".")?s:`${s}.`} Focus navigation partially applied: ${a} accessibility-focus request${a===1?"":"s"} already moved the TalkBack cursor and the target was not activated. Observe before retrying; do not retry automatically.`,{cause:n})}function N(n,a,s){try{o(n)}catch(l){throw M(l,s)}let c=Zi()?.getDeadlineMs?.();if(c!==void 0&&a.now()>=c)throw M(Error(fe),s)}function ge(n){let a=n.bounds;return[n["resource-id"]??"",n["content-desc"]??"",n.text??"",a?`${a.left},${a.top},${a.right},${a.bottom}`:""].join("|")}function K(n){return n.map(ge).sort().join(`
|
|
4
|
+
`)}class F{static DEFAULT_FOCUS_SETTLE_MS=100;static FOCUS_READBACK_BOUND_MS=500;matcher;timer;driverFactory;deviceResolver;constructor(n={}){this.matcher=n.matcher??new D,this.timer=n.timer??i,this.driverFactory=n.driverFactory??new B,this.deviceResolver=n.deviceResolver??this.resolveDevice}async navigateToElement(n,a,s={}){let c=pe(s.signal),l={focusRequests:0};try{return await this.runNavigation(n,a,{...s,signal:c,onFocusRequested:()=>{l.focusRequests+=1,s.onFocusRequested?.()}},l)}catch(u){throw c?.aborted?M(u,l.focusRequests):u}}async runNavigation(n,a,s,c){let{signal:l}=s,u=this.deviceResolver(n);if(u.platform!=="android")throw new t("TalkBack focus navigation is only supported on Android devices.");let d=this.driverFactory.createDriver(u);N(l,this.timer,c.focusRequests);let p=await this.verifyNavigationState(d,a,!1,l);if(s.onFocusObserved?.(p.currentFocus,p.orderedElements),p.reachedTarget)return!0;let m=p.targetIndex===null?void 0:p.orderedElements[p.targetIndex];if(!m)throw new T(`Target not found in the accessibility traversal (${this.describeSelector(a)}). Use observe to inspect elements and the diagnostics returned by tapOn/waitFor failures.`+this.describeTraversalTruncation(p));await this.requestFocus(d,m,p.orderedElements,{options:s,progress:c});let f=await this.readCursorAfterFocusRequest(d,a,s,c.focusRequests);if(s.onFocusObserved?.(f.currentFocus,f.orderedElements),f.reachedTarget)return!0;throw this.unreachedTargetError(p,f,a)}async readCursorAfterFocusRequest(n,a,s,c){let{signal:l}=s,u=Math.max(0,s.focusSettleMs??F.DEFAULT_FOCUS_SETTLE_MS),d=u>0?Math.max(1,Math.ceil(F.FOCUS_READBACK_BOUND_MS/u)):1,p;for(let m=1;;m+=1){if(u>0)await R(this.timer.sleep(u),l);if(N(l,this.timer,c),p=await this.verifyNavigationState(n,a,!0,l),p.reachedTarget||m>=d)return p}}async requestFocus(n,a,s,{options:c,progress:l}){let{signal:u}=c,d=rs(a);if(!d)throw new T("The target has no resource-id, test tag or unique id, so the TalkBack cursor cannot be moved onto it without a touch gesture.");let p=W(d,s)??await _h(d,n,a);if(p)throw new T(`The TalkBack cursor cannot be moved onto the target: ${p}.`);N(u,this.timer,l.focusRequests),c.displayFence?.assertCurrent(),c.onFocusRequested?.();let m=await R(Zs(d)?n.requestNodeAction("focus",d,u):n.requestAction("focus",d.resourceId,u),u);if(!m.success)throw new t(`Could not move the TalkBack cursor onto the target: ${m.error??"ACTION_ACCESSIBILITY_FOCUS failed"}. No tap was sent.`)}unreachedTargetError(n,a,s){let c=this.describeSelector(s);if(K(n.orderedElements)!==K(a.orderedElements))return new t(`The screen changed while moving the TalkBack cursor onto the target (${c}), and the cursor is not on it. No tap was sent. Observe the new screen and resolve the target again.`);let l=a.currentFocus?this.describeFocus(a.currentFocus):"no element has accessibility focus";return new t(`The TalkBack cursor did not move onto the target (${c}) after the focus request; ${l}. No tap was sent. Observe before retrying.`)}resolveDevice(n){let a=A.detectPlatform(n);return{name:n,deviceId:n,platform:a}}async verifyNavigationState(n,a,s,c){let l=await R(n.requestTraversalOrder(),c);if(l.error){let f=`Failed to get traversal order: ${l.error}`;throw s?new t(`${f}. The focus request may have moved the cursor; no tap was sent.`):new T(f)}let u=l.elements??[],d=this.matcher.findTargetIndex(u,a),p=null;if(l.focusedIndex!==null&&l.focusedIndex!==void 0)p=u[l.focusedIndex]??null;if(!p){let f=await R(n.requestCurrentFocus(),c);if(f.error)e.warn(`[FocusNavigation] Failed to get current focus: ${f.error}`);else p=f.focusedElement??null}let m=p?this.matcher.matchesFocusedTarget(p,u,a):!1;return{orderedElements:u,currentFocus:p,targetIndex:d,reachedTarget:m,truncationReasons:l.truncationReasons}}describeTraversalTruncation(n){return n.truncationReasons?.includes("max_children")?" the accessibility traversal was truncated (max_children); the target may be beyond the cap.":""}describeFocus(n){let a=n.text||n["content-desc"]||n["resource-id"];return a?`focus is on "${a}"`:"focus is on another element"}describeSelector(n){let a=[];if(n.resourceId)a.push(`resourceId="${n.resourceId}"`);if(n.text)a.push(`text="${n.text}"`);if(n.contentDesc)a.push(`contentDesc="${n.contentDesc}"`);if(n.testTag)a.push(`testTag="${n.testTag}"`);return a.length>0?a.join(", "):"unknown selector"}}var he=500,kV="TalkBack activation is unconfirmed: the coordinate gesture completed, but the element may only have received accessibility focus. Observe the result before retrying.";function be(n,a){return Array.isArray(n.actions)&&n.actions.includes(a)}class rv{matcher;executor;timer;constructor(n={}){this.matcher=n.matcher??new D,this.executor=n.executor??new F({matcher:this.matcher,timer:n.timer,driverFactory:n.driverFactory}),this.timer=n.timer??i}async executeTap(n,a,s,{fence:c,signal:l}={}){let u={reachable:!1,traversalOrder:[],focusTrapDetected:!1},d=a?.["resource-id"],p=a.text,m=a["content-desc"];if(!d&&!p&&!m)return{success:!1,method:"focus-navigation",error:"Element has no resource-id, text, or content-desc for navigation",screenReaderNavigation:u};let f=this.createFocusSelector({resourceId:d,elementText:p,elementContentDesc:m,bounds:a.bounds}),g=pe(l),b=0,y=[];try{if(!await this.executor.navigateToElement(n,f,{displayFence:c,signal:g,onFocusObserved:(C,X)=>{y=[...X],this.appendTraversalFocus(u,C)},onFocusRequested:()=>{b+=1}}))throw new t("Focus navigation did not reach target element")}catch(w){if(w instanceof T)return e.warn(`[TalkBackTapStrategy] Focus navigation unavailable: ${w.message}`,w),{success:!1,method:"focus-navigation",error:w.message,screenReaderNavigation:u};throw w}u.reachable=!0,e.info("[TalkBackTapStrategy] Focus navigation successful, activating element");let h=()=>N(g,this.timer,b);return h(),{...await this.activateElement(a,s,{fence:c,orderedElements:y,assertLive:h}),screenReaderNavigation:u}}createFocusSelector({resourceId:n,elementText:a,elementContentDesc:s,bounds:c}){return{...n?{resourceId:n}:{},...a?{text:a}:{},...s?{contentDesc:s}:{},bounds:c}}appendTraversalFocus(n,a){if(!a)return;let s=n.traversalOrder.at(-1);if(!s||this.focusSignature(s)!==this.focusSignature(a))n.traversalOrder.push(a)}focusSignature(n){let a=n.bounds;return[n["resource-id"]??"",n["content-desc"]??"",n.text??"",a?`${a.left},${a.top},${a.right},${a.bottom}`:""].join("|")}async executeDirectActivation(n,a,s={}){let c=await P(n,()=>a.getAccessibilityHierarchy?.()??Promise.resolve(null),s),l=c.element!==n?{element:c.element}:{};n=c.element;let u={supportsNodeActionSelectors:()=>a.supportsNodeActionSelectors(),getAccessibilityHierarchy:async()=>c.hierarchy},d=rs(n);if(!d)return{success:!1,...l,method:"accessibility-action",error:"Element has no stable selector for direct accessibility activation"};let p=await _h(d,u,n);if(p)return{success:!1,...l,method:"accessibility-action",error:p};let m=Zs(d)?await a.requestNodeAction("click",d):await a.requestAction("click",d.resourceId);if(m.success)return e.info("[TalkBackTapStrategy] Direct activation via ACTION_CLICK succeeded"),{success:!0,...l,method:"accessibility-action"};if(m.dispatched&&m.acknowledged!==!0)throw fn(m.error);return{success:!1,...l,method:"accessibility-action",error:m.error??"ACTION_CLICK failed"}}async executeCoordinateFallback(n,a,s,{driver:c,fenceOptions:l={}}){let{x:u,y:d}=n,p=l.displayFence,m=a==="longPress"?s:50;if(a==="doubleTap"){p?.assertCurrent();let g=await this.dispatchDriverTap(c,u,d,{durationMs:m,doubleTap:!0});if(!g.success)return{success:!1,method:"coordinate-fallback",error:`Double tap failed: ${g.error}`,unsupportedCapability:g.unsupportedCapability,completedTaps:0};return{success:!0,method:"coordinate-fallback",completedTaps:2,warnings:[kV]}}p?.assertCurrent();let f=await this.dispatchDriverTap(c,u,d,{durationMs:m});if(!f.success)return{success:!1,method:"coordinate-fallback",error:f.error};if(a==="tap")return{success:!1,method:"coordinate-fallback",error:"A single coordinate touch only moves TalkBack focus and does not activate the element"};return{success:!0,method:"coordinate-fallback"}}async executePreciseTap(n,a,s,c){c?.assertCurrent();let l=await this.dispatchDriverTap(s,n,a,{durationMs:50});if(!l.success)return{success:!1,method:"coordinate-fallback",error:`Focus tap failed: ${l.error}`,focusCompleted:!1,completedTaps:0};return await this.timer.sleep(he),{...await this.executeCoordinateFallback({x:n,y:a},"doubleTap",50,{driver:s,fenceOptions:{displayFence:c}}),focusCompleted:!0}}async executeLongPress(n,a,s,{driver:c,fenceOptions:l={}}){let{x:u,y:d}=n,p=l.displayFence,m=await P(s,()=>c.getAccessibilityHierarchy?.()??Promise.resolve(null),l);if(m.element!==s){let y=m.element.bounds;u=Math.round((y.left+y.right)/2),d=Math.round((y.top+y.bottom)/2)}let f=m.element!==s?{element:m.element}:{};s=m.element;let g={supportsNodeActionSelectors:()=>c.supportsNodeActionSelectors(),getAccessibilityHierarchy:async()=>m.hierarchy},b=rs(s);if(b){let y=await _h(b,g,s);if(y)return e.info(`[TalkBackTapStrategy] ${y}`),{...await this.executeCoordinateFallback({x:u,y:d},"longPress",a,{driver:c,fenceOptions:{displayFence:p}}),...f};let h=Zs(b)?await c.requestNodeAction("long_click",b):await c.requestAction("long_click",b.resourceId);if(h.success)return e.info("[TalkBackTapStrategy] Long press via ACTION_LONG_CLICK succeeded"),{success:!0,...f,method:"accessibility-action"};if(h.dispatched&&h.acknowledged!==!0)throw fn(h.error);if(await nT({advertised:be(s,"long_click"),error:h.error,needsNodeSelector:Zs(b),selected:s,readHierarchy:()=>c.getAccessibilityHierarchy?.()??Promise.resolve(null)}))return{success:!1,...f,method:"accessibility-action",error:h.error??"ACTION_LONG_CLICK failed",semanticActionFailure:!0};e.warn(`[TalkBackTapStrategy] ACTION_LONG_CLICK failed (${h.error}), falling back to coordinate gesture`)}return{...await this.executeCoordinateFallback({x:u,y:d},"longPress",a,{driver:c,fenceOptions:{displayFence:p}}),...f}}async activateElement(n,a,{fence:s={assertCurrent:()=>{}},orderedElements:c,assertLive:l}){let u=n["resource-id"],d=await this.resolveActivationCenter(n,a,c),p=50;if(l(),!d){if(u){e.warn("[TalkBackTapStrategy] Activation target has no bounds; using ACTION_CLICK fallback");let f=await this.executeDirectActivation(n,a);if(f.success)return{success:!0,method:"accessibility-action"};return{success:!1,method:"focus-navigation",error:`Activation failed: target has no bounds and ACTION_CLICK failed (${f.error??"unknown"})`}}return{success:!1,method:"focus-navigation",error:"Activation failed: target has no bounds and no resource-id for ACTION_CLICK"}}s.assertCurrent();let m=await this.dispatchDriverTap(a,d.x,d.y,{durationMs:50,doubleTap:!0});if(!m.success){if(l(),u){if(e.warn("[TalkBackTapStrategy] Double-tap activation failed, trying ACTION_CLICK fallback"),!(await this.executeDirectActivation(n,a)).success)return{success:!1,method:"focus-navigation",error:"Activation failed: double-tap and ACTION_CLICK both failed",unsupportedCapability:m.unsupportedCapability};return{success:!0,method:"accessibility-action"}}return{success:!1,method:"focus-navigation",error:"Activation failed: double-tap failed",unsupportedCapability:m.unsupportedCapability}}return e.info("[TalkBackTapStrategy] Element activation gesture sent via focus navigation"),{success:!0,method:"focus-navigation",warnings:[kV]}}async dispatchDriverTap(n,a,s,{durationMs:c,doubleTap:l=!1}){let u=!1,d;try{let p=()=>{u=!0};d=l?await n.requestDoubleTapCoordinates(a,s,p):await n.requestTapCoordinates({x:a,y:s,duration:c,onDispatch:p})}catch(p){if(u)throw fn(r(p));if(p instanceof _e||p instanceof t)throw p;return e.warn(`[TalkBackTapStrategy] Coordinate tap failed before dispatch: ${r(p)}`,p),{success:!1,totalTimeMs:0,error:r(p)}}if(!d.success&&u)throw fn(d.error);return d}getElementCenter(n){if(!n.bounds)return null;return{x:Math.round((n.bounds.left+n.bounds.right)/2),y:Math.round((n.bounds.top+n.bounds.bottom)/2)}}async resolveActivationCenter(n,a,s){try{let c=await a.requestCurrentFocus(),l=c.focusedElement;if(l?.bounds&&!c.error){let u=this.createFocusSelector({resourceId:x(n["resource-id"]),elementText:x(n.text),elementContentDesc:x(n["content-desc"]),bounds:n.bounds}),d=await this.activationTraversal(a,s,u);if(this.matcher.matchesFocusedTarget(l,d,u))return this.getElementCenter(l);throw new t("TalkBack focus no longer matches the selected activation target.")}}catch(c){if(c instanceof t)throw c;e.debug(`[TalkBackTapStrategy] Could not read current focus for activation: ${c}`)}return this.getElementCenter(n)}async activationTraversal(n,a,s){let c;try{c=await n.requestTraversalOrder()}catch(d){if(d instanceof _e)throw d;e.warn(`[TalkBackTapStrategy] Could not refresh activation traversal: ${r(d)}`,d)}if(!c?.error&&c?.elements?.length)return c.elements;let l=a.filter((d)=>this.matcher.matchesSelector(d,s));if((l.length?l:a.filter((d)=>this.matcher.matchesSelector(d,s,{partialMatch:!0}))).length===1)return a;throw new t("Cannot verify the selected TalkBack activation target: fresh traversal is unavailable or empty.")}}function CQ(n,a,s){if(typeof n==="object"&&n!==null)return n;return{progress:n,perf:a,signal:s}}function DQ(n,a,s){if(typeof n==="object"&&n!==null)return n;return{progress:n,signal:a,deadlineMs:s?.requestDeadlineMs}}function OQ(n,a,s){if(typeof n==="object"&&n!==null)return n;return{progress:n,signal:a,planContext:s}}function jF(n){return n===void 0?void 0:{requestDeadlineMs:n}}function ye(n){return typeof n==="object"&&n!==null&&"aborted"in n}function xh(n){if(n===void 0||ye(n))return{signal:n};return n}function Bo(n,a){if(typeof n==="object"&&n!==null)return n;return{progress:n,signal:a}}var E=(n)=>n===!0||n==="true";function Ta(n){return E(n.focused)||E(n.isFocused)||E(n["has-keyboard-focus"])||E(n["accessibility-focused"])||E(n.accessibilityFocused)}class dC{parser;constructor(n=new G){this.parser=n}findFocusedTextInput(n){let a=[this.parser.extractRootNodes(n),...this.parser.extractWindowRootGroups(n,"topmost-first")];for(let s of a){let c=this.findInRoots(s);if(c)return c}return null}findInRoots(n){for(let a of n){let s=null;if(this.parser.traverseNode(a,(c)=>{if(s)return;let l=this.parser.extractNodeProperties(c),u=l.class||l.className;if(E(l.focused)&&u&&eg.some((d)=>u.includes(d)))s=this.parser.parseNodeBounds(c)}),s)return s}return null}}
|
|
5
|
+
export{nT,WF,Lo,TV,aC,dc,X4,Ra,Pa,kh,mm,iT,Aa,GS,Z4,Q4,Eh,Ih,cC,xQ,fn,YS,JS,XS,zF,rs,Zs,_h,kV,rv,CQ,DQ,OQ,jF,xh,Bo,Ta,dC};
|
|
6
|
+
|
|
7
|
+
//# debugId=2EC48C7DF660202464756E2164756E21
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Pu,eP,Z2}from"./chunk-z916af47.js";import{b0}from"./chunk-4xd6zs3y.js";import{Lt}from"./chunk-2v7tw1nj.js";import st from"path";var K=1024,at=/^[0-9a-f]{64}$/;function J(u){if(!URL.canParse(u))return"url must be an absolute https URL";let c=new URL(u);if(c.protocol!=="https:")return"url must use https; ProtoViewer refuses any other scheme";if(c.username!==""||c.password!=="")return"url must not carry credentials; anyone who scans the QR would receive them";if(c.hash!=="")return"url must not have a #fragment; it is never sent to the host";return}function W(u,c){if(!at.test(c))throw Error("sha256 must be 64 lowercase hex characters");return`automobile-proto://import?url=${encodeURIComponent(u)}&sha256=${c}`}var V=function(u,c){let i=u,a=U[c],e=null,t=0,s=null,y=[],b={},p=function(o,h){if(t=i*4+17,e=function(n){let l=Array(n);for(let f=0;f<n;f+=1){l[f]=Array(n);for(let w=0;w<n;w+=1)l[f][w]=null}return l}(t),d(0,0),d(t-7,0),d(0,t-7),T(),R(),L(o,h),i>=7)C(o);if(s==null)s=ft(i,a,y);D(s,h)},d=function(o,h){for(let n=-1;n<=7;n+=1){if(o+n<=-1||t<=o+n)continue;for(let l=-1;l<=7;l+=1){if(h+l<=-1||t<=h+l)continue;if(0<=n&&n<=6&&(l==0||l==6)||0<=l&&l<=6&&(n==0||n==6)||2<=n&&n<=4&&2<=l&&l<=4)e[o+n][h+l]=!0;else e[o+n][h+l]=!1}}},P=function(){let o=0,h=0;for(let n=0;n<8;n+=1){p(!0,n);let l=N.getLostPoint(b);if(n==0||o>l)o=l,h=n}return h},R=function(){for(let o=8;o<t-8;o+=1){if(e[o][6]!=null)continue;e[o][6]=o%2==0}for(let o=8;o<t-8;o+=1){if(e[6][o]!=null)continue;e[6][o]=o%2==0}},T=function(){let o=N.getPatternPosition(i);for(let h=0;h<o.length;h+=1)for(let n=0;n<o.length;n+=1){let l=o[h],f=o[n];if(e[l][f]!=null)continue;for(let w=-2;w<=2;w+=1)for(let x=-2;x<=2;x+=1)if(w==-2||w==2||x==-2||x==2||w==0&&x==0)e[l+w][f+x]=!0;else e[l+w][f+x]=!1}},C=function(o){let h=N.getBCHTypeNumber(i);for(let n=0;n<18;n+=1){let l=!o&&(h>>n&1)==1;e[Math.floor(n/3)][n%3+t-8-3]=l}for(let n=0;n<18;n+=1){let l=!o&&(h>>n&1)==1;e[n%3+t-8-3][Math.floor(n/3)]=l}},L=function(o,h){let n=a<<3|h,l=N.getBCHTypeInfo(n);for(let f=0;f<15;f+=1){let w=!o&&(l>>f&1)==1;if(f<6)e[f][8]=w;else if(f<8)e[f+1][8]=w;else e[t-15+f][8]=w}for(let f=0;f<15;f+=1){let w=!o&&(l>>f&1)==1;if(f<8)e[8][t-f-1]=w;else if(f<9)e[8][15-f-1+1]=w;else e[8][15-f-1]=w}e[t-8][8]=!o},D=function(o,h){let n=-1,l=t-1,f=7,w=0,x=N.getMaskFunction(h);for(let A=t-1;A>0;A-=2){if(A==6)A-=1;while(!0){for(let m=0;m<2;m+=1)if(e[l][A-m]==null){let M=!1;if(w<o.length)M=(o[w]>>>f&1)==1;if(x(l,A-m))M=!M;if(e[l][A-m]=M,f-=1,f==-1)w+=1,f=7}if(l+=n,l<0||t<=l){l-=n,n=-n;break}}}},ut=function(o,h){let n=0,l=0,f=0,w=Array(h.length),x=Array(h.length);for(let _=0;_<h.length;_+=1){let B=h[_].dataCount,E=h[_].totalCount-B;l=Math.max(l,B),f=Math.max(f,E),w[_]=Array(B);for(let I=0;I<w[_].length;I+=1)w[_][I]=255&o.getBuffer()[I+n];n+=B;let G=N.getErrorCorrectPolynomial(E),X=Q(w[_],G.getLength()-1).mod(G);x[_]=Array(G.getLength()-1);for(let I=0;I<x[_].length;I+=1){let q=I+X.getLength()-x[_].length;x[_][I]=q>=0?X.getAt(q):0}}let A=0;for(let _=0;_<h.length;_+=1)A+=h[_].totalCount;let m=Array(A),M=0;for(let _=0;_<l;_+=1)for(let B=0;B<h.length;B+=1)if(_<w[B].length)m[M]=w[B][_],M+=1;for(let _=0;_<f;_+=1)for(let B=0;B<h.length;B+=1)if(_<x[B].length)m[M]=x[B][_],M+=1;return m},ft=function(o,h,n){let l=Z.getRSBlocks(o,h),f=z();for(let x=0;x<n.length;x+=1){let A=n[x];f.put(A.getMode(),4),f.put(A.getLength(),N.getLengthInBits(A.getMode(),o)),A.write(f)}let w=0;for(let x=0;x<l.length;x+=1)w+=l[x].dataCount;if(f.getLengthInBits()>w*8)throw"code length overflow. ("+f.getLengthInBits()+">"+w*8+")";if(f.getLengthInBits()+4<=w*8)f.put(0,4);while(f.getLengthInBits()%8!=0)f.putBit(!1);while(!0){if(f.getLengthInBits()>=w*8)break;if(f.put(236,8),f.getLengthInBits()>=w*8)break;f.put(17,8)}return ut(f,l)};b.addData=function(o,h){h=h||"Byte";let n=null;switch(h){case"Numeric":n=lt(o);break;case"Alphanumeric":n=ht(o);break;case"Byte":n=gt(o);break;case"Kanji":n=dt(o);break;default:throw"mode:"+h}y.push(n),s=null},b.isDark=function(o,h){if(o<0||t<=o||h<0||t<=h)throw o+","+h;return e[o][h]},b.getModuleCount=function(){return t},b.make=function(){if(i<1){let o=1;for(;o<40;o++){let h=Z.getRSBlocks(o,a),n=z();for(let f=0;f<y.length;f++){let w=y[f];n.put(w.getMode(),4),n.put(w.getLength(),N.getLengthInBits(w.getMode(),o)),w.write(n)}let l=0;for(let f=0;f<h.length;f++)l+=h[f].dataCount;if(n.getLengthInBits()<=l*8)break}i=o}p(!1,P())},b.createTableTag=function(o,h){o=o||2,h=typeof h>"u"?o*4:h;let n="";n+='<table style="',n+=" border-width: 0px; border-style: none;",n+=" border-collapse: collapse;",n+=" padding: 0px; margin: "+h+"px;",n+='">',n+="<tbody>";for(let l=0;l<b.getModuleCount();l+=1){n+="<tr>";for(let f=0;f<b.getModuleCount();f+=1)n+='<td style="',n+=" border-width: 0px; border-style: none;",n+=" border-collapse: collapse;",n+=" padding: 0px; margin: 0px;",n+=" width: "+o+"px;",n+=" height: "+o+"px;",n+=" background-color: ",n+=b.isDark(l,f)?"#000000":"#ffffff",n+=";",n+='"/>';n+="</tr>"}return n+="</tbody>",n+="</table>",n},b.createSvgTag=function(o,h,n,l){let f={};if(typeof arguments[0]=="object")f=arguments[0],o=f.cellSize,h=f.margin,n=f.alt,l=f.title;o=o||2,h=typeof h>"u"?o*4:h,n=typeof n==="string"?{text:n}:n||{},n.text=n.text||null,n.id=n.text?n.id||"qrcode-description":null,l=typeof l==="string"?{text:l}:l||{},l.text=l.text||null,l.id=l.text?l.id||"qrcode-title":null;let w=b.getModuleCount()*o+h*2,x,A,m,M,_="",B;B="l"+o+",0 0,"+o+" -"+o+",0 0,-"+o+"z ",_+='<svg version="1.1" xmlns="http://www.w3.org/2000/svg"',_+=!f.scalable?' width="'+w+'px" height="'+w+'px"':"",_+=' viewBox="0 0 '+w+" "+w+'" ',_+=' preserveAspectRatio="xMinYMin meet"',_+=l.text||n.text?' role="img" aria-labelledby="'+v([l.id,n.id].join(" ").trim())+'"':"",_+=">",_+=l.text?'<title id="'+v(l.id)+'">'+v(l.text)+"</title>":"",_+=n.text?'<description id="'+v(n.id)+'">'+v(n.text)+"</description>":"",_+='<rect width="100%" height="100%" fill="white" cx="0" cy="0"/>',_+='<path d="';for(m=0;m<b.getModuleCount();m+=1){M=m*o+h;for(x=0;x<b.getModuleCount();x+=1)if(b.isDark(m,x))A=x*o+h,_+="M"+A+","+M+B}return _+='" stroke="transparent" fill="black"/>',_+="</svg>",_},b.createDataURL=function(o,h){o=o||2,h=typeof h>"u"?o*4:h;let n=b.getModuleCount()*o+h*2,l=h,f=n-h;return bt(n,n,function(w,x){if(l<=w&&w<f&&l<=x&&x<f){let A=Math.floor((w-l)/o),m=Math.floor((x-l)/o);return b.isDark(m,A)?0:1}else return 1})},b.createImgTag=function(o,h,n){o=o||2,h=typeof h>"u"?o*4:h;let l=b.getModuleCount()*o+h*2,f="";if(f+="<img",f+=' src="',f+=b.createDataURL(o,h),f+='"',f+=' width="',f+=l,f+='"',f+=' height="',f+=l,f+='"',n)f+=' alt="',f+=v(n),f+='"';return f+="/>",f};let v=function(o){let h="";for(let n=0;n<o.length;n+=1){let l=o.charAt(n);switch(l){case"<":h+="<";break;case">":h+=">";break;case"&":h+="&";break;case'"':h+=""";break;default:h+=l;break}}return h},ct=function(o){o=typeof o>"u"?2:o;let n=b.getModuleCount()*1+o*2,l=o,f=n-o,w,x,A,m,M,_={"\u2588\u2588":"\u2588","\u2588 ":"\u2580"," \u2588":"\u2584"," ":" "},B={"\u2588\u2588":"\u2580","\u2588 ":"\u2580"," \u2588":" "," ":" "},E="";for(w=0;w<n;w+=2){A=Math.floor((w-l)/1),m=Math.floor((w+1-l)/1);for(x=0;x<n;x+=1){if(M="\u2588",l<=x&&x<f&&l<=w&&w<f&&b.isDark(A,Math.floor((x-l)/1)))M=" ";if(l<=x&&x<f&&l<=w+1&&w+1<f&&b.isDark(m,Math.floor((x-l)/1)))M+=" ";else M+="\u2588";E+=o<1&&w+1>=f?B[M]:_[M]}E+=`
|
|
3
|
+
`}if(n%2&&o>0)return E.substring(0,E.length-n-1)+Array(n+1).join("\u2580");return E.substring(0,E.length-1)};return b.createASCII=function(o,h){if(o=o||1,o<2)return ct(h);o-=1,h=typeof h>"u"?o*2:h;let n=b.getModuleCount()*o+h*2,l=h,f=n-h,w,x,A,m,M=Array(o+1).join("\u2588\u2588"),_=Array(o+1).join(" "),B="",E="";for(w=0;w<n;w+=1){A=Math.floor((w-l)/o),E="";for(x=0;x<n;x+=1){if(m=1,l<=x&&x<f&&l<=w&&w<f&&b.isDark(A,Math.floor((x-l)/o)))m=0;E+=m?M:_}for(A=0;A<o;A+=1)B+=E+`
|
|
4
|
+
`}return B.substring(0,B.length-1)},b.renderTo2dContext=function(o,h){h=h||2;let n=b.getModuleCount();for(let l=0;l<n;l++)for(let f=0;f<n;f++)o.fillStyle=b.isDark(l,f)?"black":"white",o.fillRect(f*h,l*h,h,h)},b};V.stringToBytes=function(u){let c=[];for(let g=0;g<u.length;g+=1){let r=u.charCodeAt(g);c.push(r&255)}return c};V.createStringToBytes=function(u,c){let g=function(){let i=wt(u),a=function(){let s=i.read();if(s==-1)throw"eof";return s},e=0,t={};while(!0){let s=i.read();if(s==-1)break;let y=a(),b=a(),p=a(),d=String.fromCharCode(s<<8|y),P=b<<8|p;t[d]=P,e+=1}if(e!=c)throw e+" != "+c;return t}(),r=63;return function(i){let a=[];for(let e=0;e<i.length;e+=1){let t=i.charCodeAt(e);if(t<128)a.push(t);else{let s=g[i.charAt(e)];if(typeof s=="number")if((s&255)==s)a.push(s);else a.push(s>>>8),a.push(s&255);else a.push(63)}}return a}};var k={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},U={L:1,M:0,Q:3,H:2},O={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},N=function(){let u=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],c=1335,g=7973,r=21522,i={},a=function(e){let t=0;while(e!=0)t+=1,e>>>=1;return t};return i.getBCHTypeInfo=function(e){let t=e<<10;while(a(t)-a(1335)>=0)t^=1335<<a(t)-a(1335);return(e<<10|t)^21522},i.getBCHTypeNumber=function(e){let t=e<<12;while(a(t)-a(7973)>=0)t^=7973<<a(t)-a(7973);return e<<12|t},i.getPatternPosition=function(e){return u[e-1]},i.getMaskFunction=function(e){switch(e){case O.PATTERN000:return function(t,s){return(t+s)%2==0};case O.PATTERN001:return function(t,s){return t%2==0};case O.PATTERN010:return function(t,s){return s%3==0};case O.PATTERN011:return function(t,s){return(t+s)%3==0};case O.PATTERN100:return function(t,s){return(Math.floor(t/2)+Math.floor(s/3))%2==0};case O.PATTERN101:return function(t,s){return t*s%2+t*s%3==0};case O.PATTERN110:return function(t,s){return(t*s%2+t*s%3)%2==0};case O.PATTERN111:return function(t,s){return(t*s%3+(t+s)%2)%2==0};default:throw"bad maskPattern:"+e}},i.getErrorCorrectPolynomial=function(e){let t=Q([1],0);for(let s=0;s<e;s+=1)t=t.multiply(Q([1,S.gexp(s)],0));return t},i.getLengthInBits=function(e,t){if(1<=t&&t<10)switch(e){case k.MODE_NUMBER:return 10;case k.MODE_ALPHA_NUM:return 9;case k.MODE_8BIT_BYTE:return 8;case k.MODE_KANJI:return 8;default:throw"mode:"+e}else if(t<27)switch(e){case k.MODE_NUMBER:return 12;case k.MODE_ALPHA_NUM:return 11;case k.MODE_8BIT_BYTE:return 16;case k.MODE_KANJI:return 10;default:throw"mode:"+e}else if(t<41)switch(e){case k.MODE_NUMBER:return 14;case k.MODE_ALPHA_NUM:return 13;case k.MODE_8BIT_BYTE:return 16;case k.MODE_KANJI:return 12;default:throw"mode:"+e}else throw"type:"+t},i.getLostPoint=function(e){let t=e.getModuleCount(),s=0;for(let p=0;p<t;p+=1)for(let d=0;d<t;d+=1){let P=0,R=e.isDark(p,d);for(let T=-1;T<=1;T+=1){if(p+T<0||t<=p+T)continue;for(let C=-1;C<=1;C+=1){if(d+C<0||t<=d+C)continue;if(T==0&&C==0)continue;if(R==e.isDark(p+T,d+C))P+=1}}if(P>5)s+=3+P-5}for(let p=0;p<t-1;p+=1)for(let d=0;d<t-1;d+=1){let P=0;if(e.isDark(p,d))P+=1;if(e.isDark(p+1,d))P+=1;if(e.isDark(p,d+1))P+=1;if(e.isDark(p+1,d+1))P+=1;if(P==0||P==4)s+=3}for(let p=0;p<t;p+=1)for(let d=0;d<t-6;d+=1)if(e.isDark(p,d)&&!e.isDark(p,d+1)&&e.isDark(p,d+2)&&e.isDark(p,d+3)&&e.isDark(p,d+4)&&!e.isDark(p,d+5)&&e.isDark(p,d+6))s+=40;for(let p=0;p<t;p+=1)for(let d=0;d<t-6;d+=1)if(e.isDark(d,p)&&!e.isDark(d+1,p)&&e.isDark(d+2,p)&&e.isDark(d+3,p)&&e.isDark(d+4,p)&&!e.isDark(d+5,p)&&e.isDark(d+6,p))s+=40;let y=0;for(let p=0;p<t;p+=1)for(let d=0;d<t;d+=1)if(e.isDark(d,p))y+=1;let b=Math.abs(100*y/t/t-50)/5;return s+=b*10,s},i}(),S=function(){let u=Array(256),c=Array(256);for(let r=0;r<8;r+=1)u[r]=1<<r;for(let r=8;r<256;r+=1)u[r]=u[r-4]^u[r-5]^u[r-6]^u[r-8];for(let r=0;r<255;r+=1)c[u[r]]=r;let g={};return g.glog=function(r){if(r<1)throw"glog("+r+")";return c[r]},g.gexp=function(r){while(r<0)r+=255;while(r>=256)r-=255;return u[r]},g}(),Q=function(u,c){if(typeof u.length>"u")throw u.length+"/"+c;let g=function(){let i=0;while(i<u.length&&u[i]==0)i+=1;let a=Array(u.length-i+c);for(let e=0;e<u.length-i;e+=1)a[e]=u[e+i];return a}(),r={};return r.getAt=function(i){return g[i]},r.getLength=function(){return g.length},r.multiply=function(i){let a=Array(r.getLength()+i.getLength()-1);for(let e=0;e<r.getLength();e+=1)for(let t=0;t<i.getLength();t+=1)a[e+t]^=S.gexp(S.glog(r.getAt(e))+S.glog(i.getAt(t)));return Q(a,0)},r.mod=function(i){if(r.getLength()-i.getLength()<0)return r;let a=S.glog(r.getAt(0))-S.glog(i.getAt(0)),e=Array(r.getLength());for(let t=0;t<r.getLength();t+=1)e[t]=r.getAt(t);for(let t=0;t<i.getLength();t+=1)e[t]^=S.gexp(S.glog(i.getAt(t))+a);return Q(e,0).mod(i)},r},Z=function(){let u=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],c=function(i,a){let e={};return e.totalCount=i,e.dataCount=a,e},g={},r=function(i,a){switch(a){case U.L:return u[(i-1)*4+0];case U.M:return u[(i-1)*4+1];case U.Q:return u[(i-1)*4+2];case U.H:return u[(i-1)*4+3];default:return}};return g.getRSBlocks=function(i,a){let e=r(i,a);if(typeof e>"u")throw"bad rs block @ typeNumber:"+i+"/errorCorrectionLevel:"+a;let t=e.length/3,s=[];for(let y=0;y<t;y+=1){let b=e[y*3+0],p=e[y*3+1],d=e[y*3+2];for(let P=0;P<b;P+=1)s.push(c(p,d))}return s},g}(),z=function(){let u=[],c=0,g={};return g.getBuffer=function(){return u},g.getAt=function(r){let i=Math.floor(r/8);return(u[i]>>>7-r%8&1)==1},g.put=function(r,i){for(let a=0;a<i;a+=1)g.putBit((r>>>i-a-1&1)==1)},g.getLengthInBits=function(){return c},g.putBit=function(r){let i=Math.floor(c/8);if(u.length<=i)u.push(0);if(r)u[i]|=128>>>c%8;c+=1},g},lt=function(u){let c=k.MODE_NUMBER,g=u,r={};r.getMode=function(){return c},r.getLength=function(e){return g.length},r.write=function(e){let t=g,s=0;while(s+2<t.length)e.put(i(t.substring(s,s+3)),10),s+=3;if(s<t.length){if(t.length-s==1)e.put(i(t.substring(s,s+1)),4);else if(t.length-s==2)e.put(i(t.substring(s,s+2)),7)}};let i=function(e){let t=0;for(let s=0;s<e.length;s+=1)t=t*10+a(e.charAt(s));return t},a=function(e){if("0"<=e&&e<="9")return e.charCodeAt(0)-48;throw"illegal char :"+e};return r},ht=function(u){let c=k.MODE_ALPHA_NUM,g=u,r={};r.getMode=function(){return c},r.getLength=function(a){return g.length},r.write=function(a){let e=g,t=0;while(t+1<e.length)a.put(i(e.charAt(t))*45+i(e.charAt(t+1)),11),t+=2;if(t<e.length)a.put(i(e.charAt(t)),6)};let i=function(a){if("0"<=a&&a<="9")return a.charCodeAt(0)-48;else if("A"<=a&&a<="Z")return a.charCodeAt(0)-65+10;else switch(a){case" ":return 36;case"$":return 37;case"%":return 38;case"*":return 39;case"+":return 40;case"-":return 41;case".":return 42;case"/":return 43;case":":return 44;default:throw"illegal char :"+a}};return r},gt=function(u){let c=k.MODE_8BIT_BYTE,g=u,r=V.stringToBytes(u),i={};return i.getMode=function(){return c},i.getLength=function(a){return r.length},i.write=function(a){for(let e=0;e<r.length;e+=1)a.put(r[e],8)},i},dt=function(u){let c=k.MODE_KANJI,g=u,r=V.stringToBytes;(function(e,t){let s=r(e);if(s.length!=2||(s[0]<<8|s[1])!=t)throw"sjis not supported."})("\u53CB",38726);let i=r(u),a={};return a.getMode=function(){return c},a.getLength=function(e){return~~(i.length/2)},a.write=function(e){let t=i,s=0;while(s+1<t.length){let y=(255&t[s])<<8|255&t[s+1];if(33088<=y&&y<=40956)y-=33088;else if(57408<=y&&y<=60351)y-=49472;else throw"illegal char at "+(s+1)+"/"+y;y=(y>>>8&255)*192+(y&255),e.put(y,13),s+=2}if(s<t.length)throw"illegal char at "+(s+1)},a},tt=function(){let u=[],c={};return c.writeByte=function(g){u.push(g&255)},c.writeShort=function(g){c.writeByte(g),c.writeByte(g>>>8)},c.writeBytes=function(g,r,i){r=r||0,i=i||g.length;for(let a=0;a<i;a+=1)c.writeByte(g[a+r])},c.writeString=function(g){for(let r=0;r<g.length;r+=1)c.writeByte(g.charCodeAt(r))},c.toByteArray=function(){return u},c.toString=function(){let g="";g+="[";for(let r=0;r<u.length;r+=1){if(r>0)g+=",";g+=u[r]}return g+="]",g},c},pt=function(){let u=0,c=0,g=0,r="",i={},a=function(t){r+=String.fromCharCode(e(t&63))},e=function(t){if(t<0)throw"n:"+t;else if(t<26)return 65+t;else if(t<52)return 97+(t-26);else if(t<62)return 48+(t-52);else if(t==62)return 43;else if(t==63)return 47;else throw"n:"+t};return i.writeByte=function(t){u=u<<8|t&255,c+=8,g+=1;while(c>=6)a(u>>>c-6),c-=6},i.flush=function(){if(c>0)a(u<<6-c),u=0,c=0;if(g%3!=0){let t=3-g%3;for(let s=0;s<t;s+=1)r+="="}},i.toString=function(){return r},i},wt=function(u){let c=u,g=0,r=0,i=0,a={};a.read=function(){while(i<8){if(g>=c.length){if(i==0)return-1;throw"unexpected end of file./"+i}let s=c.charAt(g);if(g+=1,s=="=")return i=0,-1;else if(s.match(/^\s$/))continue;r=r<<6|e(s.charCodeAt(0)),i+=6}let t=r>>>i-8&255;return i-=8,t};let e=function(t){if(65<=t&&t<=90)return t-65;else if(97<=t&&t<=122)return t-97+26;else if(48<=t&&t<=57)return t-48+52;else if(t==43)return 62;else if(t==47)return 63;else throw"c:"+t};return a},yt=function(u,c){let g=u,r=c,i=Array(u*c),a={};a.setPixel=function(y,b,p){i[b*g+y]=p},a.write=function(y){y.writeString("GIF87a"),y.writeShort(g),y.writeShort(r),y.writeByte(128),y.writeByte(0),y.writeByte(0),y.writeByte(0),y.writeByte(0),y.writeByte(0),y.writeByte(255),y.writeByte(255),y.writeByte(255),y.writeString(","),y.writeShort(0),y.writeShort(0),y.writeShort(g),y.writeShort(r),y.writeByte(0);let b=2,p=t(b);y.writeByte(b);let d=0;while(p.length-d>255)y.writeByte(255),y.writeBytes(p,d,255),d+=255;y.writeByte(p.length-d),y.writeBytes(p,d,p.length-d),y.writeByte(0),y.writeString(";")};let e=function(y){let b=y,p=0,d=0,P={};return P.write=function(R,T){if(R>>>T!=0)throw"length over";while(p+T>=8)b.writeByte(255&(R<<p|d)),T-=8-p,R>>>=8-p,d=0,p=0;d=R<<p|d,p=p+T},P.flush=function(){if(p>0)b.writeByte(d)},P},t=function(y){let b=1<<y,p=(1<<y)+1,d=y+1,P=s();for(let D=0;D<b;D+=1)P.add(String.fromCharCode(D));P.add(String.fromCharCode(b)),P.add(String.fromCharCode(p));let R=tt(),T=e(R);T.write(b,d);let C=0,L=String.fromCharCode(i[C]);C+=1;while(C<i.length){let D=String.fromCharCode(i[C]);if(C+=1,P.contains(L+D))L=L+D;else{if(T.write(P.indexOf(L),d),P.size()<4095){if(P.size()==1<<d)d+=1;P.add(L+D)}L=D}}return T.write(P.indexOf(L),d),T.write(p,d),T.flush(),R.toByteArray()},s=function(){let y={},b=0,p={};return p.add=function(d){if(p.contains(d))throw"dup key:"+d;y[d]=b,b+=1},p.size=function(){return b},p.indexOf=function(d){return y[d]},p.contains=function(d){return typeof y[d]<"u"},p};return a},bt=function(u,c,g){let r=yt(u,c);for(let t=0;t<c;t+=1)for(let s=0;s<u;s+=1)r.setPixel(s,t,g(s,t));let i=tt();r.write(i);let a=pt(),e=i.toByteArray();for(let t=0;t<e.length;t+=1)a.writeByte(e[t]);return a.flush(),"data:image/gif;base64,"+a},et=V,mt=V.stringToBytes;var j=Lt(b0());function rt(u){let c=et(0,"M");return c.addData(u,"Byte"),c.make(),{size:c.getModuleCount(),dark:(g,r)=>c.isDark(g,r)}}var H=4;function ot(u,c=8){let r=(u.size+H*2)*c,i=r*4,a=new j.PNG({width:r,height:r});a.data.fill(255);for(let e=0;e<u.size;e++){let t=(e+H)*c*i;for(let s=0;s<u.size;s++)if(u.dark(e,s))xt(a.data,t+(s+H)*c*4,c);for(let s=1;s<c;s++)a.data.copy(a.data,t+s*i,t,t+i)}return j.PNG.sync.write(a,{colorType:0,deflateLevel:6})}function xt(u,c,g){for(let r=c;r<c+g*4;r+=4)u.fill(0,r,r+3)}function it(u){let c=[],g=-H,r=u.size+H;for(let i=g;i<r;i+=2){let a="";for(let e=g;e<r;e++){let t=!nt(u,i,e),s=i+1<r&&!nt(u,i+1,e);a+=t?s?"\u2588":"\u2580":s?"\u2584":" "}c.push(a)}return c.join(`
|
|
5
|
+
`)}function nt(u,c,g){return c>=0&&g>=0&&c<u.size&&g<u.size&&u.dark(c,g)}var _t={render(u){let c=rt(u);return{png:ot(c),terminal:it(c)}}},F="Nothing was written.";async function k7(u,c){let g=u.url===void 0?void 0:J(u.url);if(g)return Y("invalid_url",`${g}. ${F}`);if(Pu(u.spec))return Y("invalid_spec",`Element anchors are resolved against the live screen and cannot be shared; use {type:"bounds",bounds:{x,y,width,height}} anchors (dp) instead. ${F}`);let r=await Z2(u,u.spec,c,F);if("failure"in r)return r.failure;let i=eP(r.bytes),a=u.url===void 0?void 0:W(u.url,i);if(a!==void 0&&Buffer.byteLength(a)>K)return Y("invalid_url",`The import link is ${Buffer.byteLength(a)} bytes, over ${K}, too dense for a phone camera to read as a QR; use a shorter url. ${F}`);let e=c.files.outputDir(),t=`${Z6(u.spec.id)}-${i.slice(0,12)}`,s=st.join(e,`${t}.automobile-proto`);await c.files.write(s,r.bytes);let y={bundlePath:s,sha256:i,bytes:r.bytes.length};if(a===void 0||u.url===void 0)return{success:!0,share:y,warning:"No url was given, so there is no link or QR. Upload the bundle to a static https host, then share again with url set to where it is served."};let b=(c.qr??_t).render(a),p=eP(Buffer.from(a)).slice(0,12),d=st.join(e,`${t}-${p}.qr.png`);return await c.files.write(d,b.png),{success:!0,share:{...y,url:u.url,link:a,qrPngPath:d,qr:b.terminal},warning:`Upload ${s} so it is served byte-for-byte at ${u.url}; ProtoViewer refuses any other bytes. The link and QR open in an Android ProtoViewer that supports URL import, which asks before downloading; until then, or on iOS, send the bundle file itself and open it in ProtoViewer.`}}function Z6(u){let c=u.replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48);return c===""?"prototype":c}function Y(u,c){return{success:!1,errorCode:u,error:c}}
|
|
6
|
+
export{k7,Z6};
|
|
7
|
+
|
|
8
|
+
//# debugId=9E8C6B22AC6A05B164756E2164756E21
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import"./chunk-z8t0v07j.js";import{r,t}from"./chunk-9rkfyt6q.js";var l={ready:0,approval_required:3,restart_required:4,unavailable:1,failed:1},u=2,m="Usage: auto-mobile --ios-network-filter install [--upgrade] | status";function p(n){let[a,...e]=n;if(a==="install"){let o=e.filter((s)=>s!=="--upgrade");if(o.length>0)throw new t(`Unknown argument ${o[0]}. ${m}`);return{command:"install",upgrade:e.includes("--upgrade")}}if(a==="status"&&e.length===0)return{command:"status"};throw new t(m)}async function w(){let{NetworkFilterInstaller:n,NetworkFilterStatusInspector:a}=await import("./chunk-ty9xgmz4.js");return{install:(e)=>new n().install(e),status:()=>new a().inspect(),platform:process.platform,write:(e)=>console.log(e)}}async function f(n,a){let e;try{e=p(n)}catch(i){return(a?.write??console.error)(r(i)),u}let o=a??await w();if(e.command==="install"){let i=await o.install({upgrade:e.upgrade});return o.write(JSON.stringify(i)),l[i.state]}if(o.platform!=="darwin")return o.write(JSON.stringify({state:"unavailable",detail:"The Network Extension app only runs on macOS hosts."})),l.unavailable;let s=await o.status();return o.write(JSON.stringify(s)),s.report?l[s.report.state]:l.failed}export{f as runIosNetworkFilterCommand};
|
|
3
|
+
|
|
4
|
+
//# debugId=219BB55609E147A764756E2164756E21
|