serve-sim 0.1.47-beta.128.1 → 0.1.47

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/serve-sim.js CHANGED
@@ -154,7 +154,7 @@ Usage:
154
154
  serve-sim permissions reset <permission|all> <bundle-id> [-d <udid|name>]
155
155
  serve-sim permissions list [bundle-id] [-d <udid|name>]
156
156
 
157
- Permissions: ${zQ().join(", ")}`),process.exit(1);let Y=J.device?a(J.device):Q$();if(!Y)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);if(J.verb==="list"){let G={udid:Y,bundleId:J.bundleId??null,tcc:J2(Y,J.bundleId),location:X2(Y,J.bundleId),notifications:W2(Y,J.bundleId)};console.log(JSON.stringify(G,null,Q?0:2)),process.exit(0)}let X=J.bundleId;try{if(J.permission==="all")for(let G of zQ())f7(Y,"reset",G,void 0,X);else f7(Y,J.verb,J.permission,J.value,X)}catch(G){console.error(G?.message??String(G)),process.exit(1)}if(Q)console.log(JSON.stringify({udid:Y,verb:J.verb,permission:J.permission,value:J.value??null,bundleId:X}));else{let G=J.value?` (${J.value})`:"";console.log(`\uD83D\uDD10 ${J.verb} ${J.permission}${G} for ${X} on ${Y}`)}process.exit(0)}FQ();Y8();function s7($,Q={}){let Z=new Date($.timestamp),J=Number.isNaN(Z.getTime())?$.timestamp:Z.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"}),Y=Q.deviceLabel??($.device?$.device.slice(0,8):null),X=$.status==="error"?" failed":"";return[J,Y,`${T2($)}${X?` (${X.trim()})`:""}`].filter(Boolean).join(" ")}function T2($){if($.kind==="tap"){let Q=W8($.details,"current")??W8($.details,"start");return Q?`Tap at ${TQ(Q)}`:"Tap"}if($.kind==="drag"){let Q=W8($.details,"start"),Z=W8($.details,"current");if(Q&&Z)return`Drag from ${TQ(Q)} to ${TQ(Z)}`;return"Drag"}if($.kind==="key"){let Q=j2($.details,"key")??$.action??"key",Z=$.action==="down"?"down":$.action==="up"?"up":$.action;return Z?`Key ${Z} ${t7(Q)}`:`Key ${t7(Q)}`}if($.kind==="rotate"){let Q=$.action?e7($.action):"";return Q?`Rotate ${Q}`:"Rotate"}return E2($.msg??$.summary)}function W8($,Q){let Z=$?.[Q];if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let J=Z;return typeof J.x==="number"&&typeof J.y==="number"?{x:J.x,y:J.y}:null}function j2($,Q){let Z=$?.[Q];return typeof Z==="string"&&Z.length>0?Z:null}function TQ($){return`${r7($.x)}, ${r7($.y)}`}function r7($){if(!Number.isFinite($))return"?";return(Math.round((q2($,0,1)+Number.EPSILON)*100)/100).toFixed(2)}function q2($,Q,Z){return Math.min(Z,Math.max(Q,$))}function E2($){return $.replace(/\b[a-z]+(?:_[a-z]+)+\b/g,e7)}function e7($){return $.replace(/[-_]+/g," ")}function t7($){return{MetaLeft:"Left Command",MetaRight:"Right Command",AltLeft:"Left Option",AltRight:"Right Option",ControlLeft:"Left Control",ControlRight:"Right Control",ShiftLeft:"Left Shift",ShiftRight:"Right Shift",ArrowLeft:"Left Arrow",ArrowRight:"Right Arrow",ArrowUp:"Up Arrow",ArrowDown:"Down Arrow"}[$]??$}var $9=["devices","tools","devtools"];function Q9($){let Q=$.split(",").map((J)=>J.trim().toLowerCase()).filter(Boolean);if(Q.length===1&&Q[0]==="none")return[];if(Q.length===0||Q.includes("none"))throw Error("Expected 'none' or a comma-separated list of: devices, tools, devtools.");let Z=Q.filter((J)=>!$9.includes(J));if(Z.length>0)throw Error(`Unknown pane${Z.length===1?"":"s"}: ${Z.join(", ")}. Expected: ${$9.join(", ")}.`);return[...new Set(Q)]}function Z9($){let Q=$.trim().toLowerCase();if(Q==="light"||Q==="dark")return Q;throw Error("Expected simulator theme: light or dark.")}EQ();var I$=r0(import.meta.url);function mX(){return"0.1.47-beta.128.1"}function cX(){if(!V$(H$))w6(H$,{recursive:!0})}function s($){if($)return x6(i0($));for(let Q of o0()){let Z=x6(Q);if(Z)return Z}return null}var m0={at:0,booted:null};function j5(){let $=Date.now();if(m0.booted&&$-m0.at<1000)return m0.booted;try{let Q=X$("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),Z=JSON.parse(Q),J=new Set;for(let Y of Object.values(Z.devices))for(let X of Y)if(X.state==="Booted")J.add(X.udid);return m0={at:$,booted:J},J}catch{return null}}function x6($){try{if(!V$($))return J$("state file missing %s",$),null;let Q=w7(l$($,"utf-8"));if(!Q)return J$("malformed state %s",$),YQ($),null;let Z=X8(Q);if(!Z)return J$("helper pid %d dead, removing stale state %s",Q.pid,$),YQ($),null;if(Z.pid!==Q.pid)G8(Z);return J$("state ok pid=%d device=%s port=%d",Z.pid,Z.device,Z.port),Z}catch(Q){return J$("readStateFile threw for %s: %o",$,Q),null}}function q5($){let Q=s($);if(!Q)return null;let Z=K8(Q,j5(),process.pid);if(Z==="keep")return Q;if(J$("recycling %s helper pid=%d for unbooted device %s",Z,Q.pid,Q.device),Z==="recycle-helper"){for(let J of XQ(Q))T0(J);s0(Q.port)}return c$($),null}function c0(){let $=[];for(let Q of o0()){let Z=x6(Q);if(Z)$.push(Z)}return $}function lX($){a$($),J$("wrote state pid=%d device=%s port=%d",$.pid,$.device,$.port)}function c$($){if($){J$("clearState device=%s",$);try{v8(i0($))}catch{}}else{J$("clearState (all)");for(let Q of o0())try{v8(Q)}catch{}}}function f6(){try{let $=X$("xcrun simctl list devices -j",{encoding:"utf-8"}),Q=JSON.parse($),Z=Object.keys(Q.devices).filter((J)=>/SimRuntime\.iOS-/i.test(J)).sort((J,Y)=>{let X=(J.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),G=(Y.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(G[0]??0)-(X[0]??0)||(G[1]??0)-(X[1]??0)});for(let J of Z){let X=(Q.devices[J]??[]).find((G)=>G.isAvailable!==!1&&/^iPhone\b/i.test(G.name));if(X)return{udid:X.udid,name:X.name}}}catch{}return null}function N5($){return E5().get($)??null}function E5(){let $=new Map;try{let Q=X$("xcrun simctl list devices -j",{encoding:"utf-8"}),Z=JSON.parse(Q);for(let J of Object.values(Z.devices))for(let Y of J)$.set(Y.udid,Y.name)}catch{}return $}function k6($){try{let Q=X$("xcrun simctl list devices -j",{encoding:"utf-8"}),Z=JSON.parse(Q);for(let J of Object.values(Z.devices))for(let Y of J)if(Y.udid===$)return Y.state==="Booted"}catch{}return!1}function pX($){if(!k6($))try{X$(`xcrun simctl boot ${$}`,{encoding:"utf-8",stdio:"pipe"})}catch(Q){let Z=(Q.stderr??Q.message??"").toLowerCase();if(!Z.includes("booted")&&!Z.includes("current state"))throw Error(`Failed to boot device ${$}: ${Q.stderr||Q.message}`)}try{X$("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function dX(){let $=gX();for(let Q of Object.values($))for(let Z of Q??[])if(Z.family==="IPv4"&&!Z.internal)return Z.address;return null}async function O5($){let Q=new Set(c0().map((Z)=>Z.port));for(let Z=$;Z<$+100;Z++){if(Q.has(Z))continue;if(await N7(Z))return Z}throw Error(`No available port found in range ${$}-${$+99}`)}async function nX($){let Q=k6($);if(pX($),Q)return;try{vX("xcrun",L8($),{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch(Z){if(!k6($))console.error(`Device ${$} failed to reach booted state: ${Z.stderr||Z.message}`),process.exit(1)}}function iX($){if(process.argv[0]&&/(^|\/)serve-sim$/.test(process.argv[0]))return{command:process.argv[0],args:$};return{command:process.argv[0],args:[process.argv[1],...$]}}async function oX($,Q=150000){let Z=Date.now();while(Date.now()-Z<Q){let J=s($);if(J)return J;await new Promise((Y)=>setTimeout(Y,200))}return null}async function A5($,Q,Z){w$("startHelper udid=%s port=%d detach=%s",$,Q,Z.detach);let J="127.0.0.1";cX(),c$($),s0(Q);let Y=M$(H$,`server-${$}.log`),X=S6(Y,"w"),{command:G,args:V}=iX([$,"--port",String(Q),"--host",J,"--exit-on-simulator-shutdown"]),z=F5(G,V,{detached:Z.detach,stdio:["ignore",X,X]});if(y6(X),Z.detach)z.unref();let K=await oX($);if(!K){if(z.pid)T0(z.pid);let W="";try{W=l$(Y,"utf-8").trim()}catch{}console.error(W?`Preview server failed:
157
+ Permissions: ${zQ().join(", ")}`),process.exit(1);let Y=J.device?a(J.device):Q$();if(!Y)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);if(J.verb==="list"){let G={udid:Y,bundleId:J.bundleId??null,tcc:J2(Y,J.bundleId),location:X2(Y,J.bundleId),notifications:W2(Y,J.bundleId)};console.log(JSON.stringify(G,null,Q?0:2)),process.exit(0)}let X=J.bundleId;try{if(J.permission==="all")for(let G of zQ())f7(Y,"reset",G,void 0,X);else f7(Y,J.verb,J.permission,J.value,X)}catch(G){console.error(G?.message??String(G)),process.exit(1)}if(Q)console.log(JSON.stringify({udid:Y,verb:J.verb,permission:J.permission,value:J.value??null,bundleId:X}));else{let G=J.value?` (${J.value})`:"";console.log(`\uD83D\uDD10 ${J.verb} ${J.permission}${G} for ${X} on ${Y}`)}process.exit(0)}FQ();Y8();function s7($,Q={}){let Z=new Date($.timestamp),J=Number.isNaN(Z.getTime())?$.timestamp:Z.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"}),Y=Q.deviceLabel??($.device?$.device.slice(0,8):null),X=$.status==="error"?" failed":"";return[J,Y,`${T2($)}${X?` (${X.trim()})`:""}`].filter(Boolean).join(" ")}function T2($){if($.kind==="tap"){let Q=W8($.details,"current")??W8($.details,"start");return Q?`Tap at ${TQ(Q)}`:"Tap"}if($.kind==="drag"){let Q=W8($.details,"start"),Z=W8($.details,"current");if(Q&&Z)return`Drag from ${TQ(Q)} to ${TQ(Z)}`;return"Drag"}if($.kind==="key"){let Q=j2($.details,"key")??$.action??"key",Z=$.action==="down"?"down":$.action==="up"?"up":$.action;return Z?`Key ${Z} ${t7(Q)}`:`Key ${t7(Q)}`}if($.kind==="rotate"){let Q=$.action?e7($.action):"";return Q?`Rotate ${Q}`:"Rotate"}return E2($.msg??$.summary)}function W8($,Q){let Z=$?.[Q];if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let J=Z;return typeof J.x==="number"&&typeof J.y==="number"?{x:J.x,y:J.y}:null}function j2($,Q){let Z=$?.[Q];return typeof Z==="string"&&Z.length>0?Z:null}function TQ($){return`${r7($.x)}, ${r7($.y)}`}function r7($){if(!Number.isFinite($))return"?";return(Math.round((q2($,0,1)+Number.EPSILON)*100)/100).toFixed(2)}function q2($,Q,Z){return Math.min(Z,Math.max(Q,$))}function E2($){return $.replace(/\b[a-z]+(?:_[a-z]+)+\b/g,e7)}function e7($){return $.replace(/[-_]+/g," ")}function t7($){return{MetaLeft:"Left Command",MetaRight:"Right Command",AltLeft:"Left Option",AltRight:"Right Option",ControlLeft:"Left Control",ControlRight:"Right Control",ShiftLeft:"Left Shift",ShiftRight:"Right Shift",ArrowLeft:"Left Arrow",ArrowRight:"Right Arrow",ArrowUp:"Up Arrow",ArrowDown:"Down Arrow"}[$]??$}var $9=["devices","tools","devtools"];function Q9($){let Q=$.split(",").map((J)=>J.trim().toLowerCase()).filter(Boolean);if(Q.length===1&&Q[0]==="none")return[];if(Q.length===0||Q.includes("none"))throw Error("Expected 'none' or a comma-separated list of: devices, tools, devtools.");let Z=Q.filter((J)=>!$9.includes(J));if(Z.length>0)throw Error(`Unknown pane${Z.length===1?"":"s"}: ${Z.join(", ")}. Expected: ${$9.join(", ")}.`);return[...new Set(Q)]}function Z9($){let Q=$.trim().toLowerCase();if(Q==="light"||Q==="dark")return Q;throw Error("Expected simulator theme: light or dark.")}EQ();var I$=r0(import.meta.url);function mX(){return"0.1.47"}function cX(){if(!V$(H$))w6(H$,{recursive:!0})}function s($){if($)return x6(i0($));for(let Q of o0()){let Z=x6(Q);if(Z)return Z}return null}var m0={at:0,booted:null};function j5(){let $=Date.now();if(m0.booted&&$-m0.at<1000)return m0.booted;try{let Q=X$("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),Z=JSON.parse(Q),J=new Set;for(let Y of Object.values(Z.devices))for(let X of Y)if(X.state==="Booted")J.add(X.udid);return m0={at:$,booted:J},J}catch{return null}}function x6($){try{if(!V$($))return J$("state file missing %s",$),null;let Q=w7(l$($,"utf-8"));if(!Q)return J$("malformed state %s",$),YQ($),null;let Z=X8(Q);if(!Z)return J$("helper pid %d dead, removing stale state %s",Q.pid,$),YQ($),null;if(Z.pid!==Q.pid)G8(Z);return J$("state ok pid=%d device=%s port=%d",Z.pid,Z.device,Z.port),Z}catch(Q){return J$("readStateFile threw for %s: %o",$,Q),null}}function q5($){let Q=s($);if(!Q)return null;let Z=K8(Q,j5(),process.pid);if(Z==="keep")return Q;if(J$("recycling %s helper pid=%d for unbooted device %s",Z,Q.pid,Q.device),Z==="recycle-helper"){for(let J of XQ(Q))T0(J);s0(Q.port)}return c$($),null}function c0(){let $=[];for(let Q of o0()){let Z=x6(Q);if(Z)$.push(Z)}return $}function lX($){a$($),J$("wrote state pid=%d device=%s port=%d",$.pid,$.device,$.port)}function c$($){if($){J$("clearState device=%s",$);try{v8(i0($))}catch{}}else{J$("clearState (all)");for(let Q of o0())try{v8(Q)}catch{}}}function f6(){try{let $=X$("xcrun simctl list devices -j",{encoding:"utf-8"}),Q=JSON.parse($),Z=Object.keys(Q.devices).filter((J)=>/SimRuntime\.iOS-/i.test(J)).sort((J,Y)=>{let X=(J.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),G=(Y.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(G[0]??0)-(X[0]??0)||(G[1]??0)-(X[1]??0)});for(let J of Z){let X=(Q.devices[J]??[]).find((G)=>G.isAvailable!==!1&&/^iPhone\b/i.test(G.name));if(X)return{udid:X.udid,name:X.name}}}catch{}return null}function N5($){return E5().get($)??null}function E5(){let $=new Map;try{let Q=X$("xcrun simctl list devices -j",{encoding:"utf-8"}),Z=JSON.parse(Q);for(let J of Object.values(Z.devices))for(let Y of J)$.set(Y.udid,Y.name)}catch{}return $}function k6($){try{let Q=X$("xcrun simctl list devices -j",{encoding:"utf-8"}),Z=JSON.parse(Q);for(let J of Object.values(Z.devices))for(let Y of J)if(Y.udid===$)return Y.state==="Booted"}catch{}return!1}function pX($){if(!k6($))try{X$(`xcrun simctl boot ${$}`,{encoding:"utf-8",stdio:"pipe"})}catch(Q){let Z=(Q.stderr??Q.message??"").toLowerCase();if(!Z.includes("booted")&&!Z.includes("current state"))throw Error(`Failed to boot device ${$}: ${Q.stderr||Q.message}`)}try{X$("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function dX(){let $=gX();for(let Q of Object.values($))for(let Z of Q??[])if(Z.family==="IPv4"&&!Z.internal)return Z.address;return null}async function O5($){let Q=new Set(c0().map((Z)=>Z.port));for(let Z=$;Z<$+100;Z++){if(Q.has(Z))continue;if(await N7(Z))return Z}throw Error(`No available port found in range ${$}-${$+99}`)}async function nX($){let Q=k6($);if(pX($),Q)return;try{vX("xcrun",L8($),{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch(Z){if(!k6($))console.error(`Device ${$} failed to reach booted state: ${Z.stderr||Z.message}`),process.exit(1)}}function iX($){if(process.argv[0]&&/(^|\/)serve-sim$/.test(process.argv[0]))return{command:process.argv[0],args:$};return{command:process.argv[0],args:[process.argv[1],...$]}}async function oX($,Q=150000){let Z=Date.now();while(Date.now()-Z<Q){let J=s($);if(J)return J;await new Promise((Y)=>setTimeout(Y,200))}return null}async function A5($,Q,Z){w$("startHelper udid=%s port=%d detach=%s",$,Q,Z.detach);let J="127.0.0.1";cX(),c$($),s0(Q);let Y=M$(H$,`server-${$}.log`),X=S6(Y,"w"),{command:G,args:V}=iX([$,"--port",String(Q),"--host",J,"--exit-on-simulator-shutdown"]),z=F5(G,V,{detached:Z.detach,stdio:["ignore",X,X]});if(y6(X),Z.detach)z.unref();let K=await oX($);if(!K){if(z.pid)T0(z.pid);let W="";try{W=l$(Y,"utf-8").trim()}catch{}console.error(W?`Preview server failed:
158
158
  ${W}`:"Preview server failed to start"),process.exit(1)}return Z.detach?{pid:K.pid}:{pid:K.pid,child:z}}async function aX($,Q,Z){ZQ("follow devices=%o startPort=%d",$,Q);let J=$.length>0?$.map(a):(()=>{let K=Q$();if(K)return[K];let W=f6();if(!W)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!Z)console.log(`No booted simulator — booting ${W.name}...`);return[W.udid]})(),Y=new Map,X=[],G=Q;for(let K of J){let W=q5(K);if(W){if(!Z){let T=N5(K)??K;if(J.length>1)console.log(`
159
159
  ==> ${T} (${K}) <==`);console.log(` Already running on port ${W.port}`),console.log(` Stream: ${W.streamUrl}`),console.log(` WebSocket: ${W.wsUrl}`)}X.push(W);continue}G=await O5(G);let{child:R}=await A5(K,G,{detach:!1});if(R)Y.set(K,R);let M=s(K)??o$(K,G,"/","127.0.0.1");if(X.push(M),!Z){let T=N5(K)??K;if(J.length>1)console.log(`
160
160
  ==> ${T} (${K}) <==`);console.log(` Stream: ${M.streamUrl}`),console.log(` WebSocket: ${M.wsUrl}`),console.log(` Port: ${G}`)}G++}if(X.length===1){let K=X[0];console.log(JSON.stringify({url:K.url,streamUrl:K.streamUrl,wsUrl:K.wsUrl,port:K.port,device:K.device}))}else console.log(JSON.stringify({devices:X.map((K)=>({url:K.url,streamUrl:K.streamUrl,wsUrl:K.wsUrl,port:K.port,device:K.device}))}));if(Y.size===0)return;let V=!1,z=(K)=>{if(V)return;if(V=!0,!Z)console.log(`
@@ -210,5 +210,5 @@ Examples:
210
210
  serve-sim --list Show all running streams
211
211
  serve-sim --kill Stop all streams`).action(async($,Q)=>{if(Q.list!==void 0){sX(typeof Q.list==="string"?Q.list:void 0);return}if(Q.kill!==void 0){eX(typeof Q.kill==="string"?Q.kill:void 0);return}let Z=Q.port;if(Q.detach){let J=await rX($,Z??3100);tX(J)}else if(Q.preview===!1)await aX($,Z??3100,!!Q.quiet);else{let J=Q.panes!==void 0||Q.fit?{...Q.panes!==void 0?{panes:Q.panes}:{},...Q.fit?{fit:!0}:{}}:void 0;await qG(Z??3200,$,Z!==void 0,Q.host,Q.codec,J,Q.theme,!!Q.exitOnSimulatorShutdown)}});var R$=["-d, --device <udid>","Target a specific simulator (udid or name)"];e.command("gesture").description("Send a touch gesture").argument("<json>",`Gesture JSON, e.g. '{"type":"begin","x":0.5,"y":0.5}'`).option(...R$).action(($,Q)=>JG($,Q.device));e.command("tap").description("Tap at normalized 0..1 coords").argument("<x>","X coord, normalized 0..1").argument("<y>","Y coord, normalized 0..1").option(...R$).action(($,Q,Z)=>YG($,Q,Z.device));e.command("button").description("Send a hardware button press").argument("[name]","Button name","home").option(...R$).action(($,Q)=>WG($,Q.device));e.command("type").description("Type text (US keyboard only)").argument("[text...]","Text to type").option(...R$).option("--stdin","Read text from stdin").option("--file <path>","Read text from a file").action(($,Q)=>XG($,{device:Q.device,stdin:Q.stdin,file:Q.file}));e.command("rotate").description("Set device orientation (portrait|portrait_upside_down|landscape_left|landscape_right)").argument("<orientation>").option(...R$).action(($,Q)=>KG($,Q.device));e.command("repair-input").description("Repair Device Hub input; restarts SpringBoard and closes running apps").option(...R$).action(async($)=>{let Q=$.device?a($.device):Q$();if(!Q)throw Error("No booted simulator found.");let{repairDeviceHubInput:Z}=await Promise.resolve().then(() => (kQ(),H9)),J=await Z(Q);console.log(J?"Input repaired. Restart serve-sim to reconnect its guest services, then reopen your app.":"Input is not shadowed by Device Hub; no restart needed.")});e.command("fold").description("Set the iPhone Duo hinge angle in degrees (0 closed, 180 fully open)").argument("<deg>","Hinge angle from 0 to 180",($)=>{let Q=Number($);if(!$.trim()||!Number.isFinite(Q)||Q<0||Q>180)throw new R0("Hinge angle must be between 0 and 180 degrees.");return Q}).option(...R$).action(($,Q)=>GG($,Q.device));e.command("ca-debug").description("Toggle a CoreAnimation debug render flag (blended|copies|misaligned|offscreen|slow-animations)").argument("<option>").argument("<state>","on|off").option(...R$).action(($,Q,Z)=>VG($,Q,Z.device));e.command("memory-warning").description("Simulate a memory warning on the device").option(...R$).action(($)=>HG($.device));e.command("event-log").description("Show recent simulator events").option(...R$).option("-j, --json","Print JSON").option("-n, --limit <count>","Maximum number of events").action(($)=>$G($.device,{json:$.json,limit:$.limit}));e.command("camera").description("Inject a synthetic camera feed and launch an app (see `camera --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action(($)=>TG($));e.command("permissions").description("Manage app permissions (see `permissions` with no args for usage)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action(($)=>c7($));e.command("ui").description("Get or set simulator-wide UI options (see `ui --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action(($)=>a7($));await e.parseAsync(process.argv);
212
212
 
213
- //# debugId=2C34B341F881D6E364756E2164756E21
213
+ //# debugId=5C8E9580C906546064756E2164756E21
214
214
  //# sourceMappingURL=serve-sim.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "serve-sim",
3
- "version": "0.1.47-beta.128.1",
3
+ "version": "0.1.47",
4
4
  "type": "module",
5
5
  "author": {
6
6
  "name": "Evan Bacon",