sudo-prompt-x 10.0.0-beta.1

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.
@@ -0,0 +1,136 @@
1
+ const e = require("../exec-BjS_tGOr.cjs");
2
+ const t = require("../escape-CgAzXRKO.cjs");
3
+ const n = require("../node-D37hqdIB.cjs");
4
+ let r = require("node:fs/promises");
5
+ let i = require("node:path/posix");
6
+ function transformIcon(e) {
7
+ if (!e) return e;
8
+ if (typeof e != "string") throw Error("Icon path must be a string.");
9
+ e = e.trim();
10
+ if (e.length === 0) throw Error("Icon path must not be empty.");
11
+ return e;
12
+ }
13
+ function transformOptions(t, n) {
14
+ n = e.r(t, n);
15
+ n.icns = transformIcon(n.icns);
16
+ if (!process.env.USER) throw Error("\"USER\" environment variable is not defined.");
17
+ return {
18
+ ...n,
19
+ command: t
20
+ };
21
+ }
22
+ async function unpackApplet({ appletPath: e, options: { tmpdir: a, signal: o } }) {
23
+ let s = (0, i.join)(a, "applet.zip");
24
+ await (0, r.writeFile)(s, "UEsDBAoAAAAAAKyCmFsAAAAAAAAAAAAAAAAJAAAAQ29udGVudHMvUEsDBAoAAAAIAKyCmFuUdoaooQEAAL4DAAATAAAAQ29udGVudHMvSW5mby5wbGlzdH2TUW+bMBSFn5dfwXgPTqUpqiZKlQQiRaKdVcikPU2ufUusGtuzTQn79TNJ2iVk7BFzvnPPvb6O7/e1CN7AWK7kXXgTzcIAJFWMy+ou3Jbr6W14n0ziz+m3VfkDZ4EW3LoAb5f5ZhWEU4QWWgtAKC3TAOebogy8B0LZYxiEO+f0V4Tato1Ir4qoqnuhRdgoDcZ1uTebeiBijoW+zNH9Io4/ZZy6ZPIpfoUuWa2XjWQCFkKo9oHvgeWKEsF/E+cRG6Ne5LXONICGUApvIJSuQbonqLz+Q26d8R0nmax8gl2MTt8DPtsDbRx5FjAED/25MW5DlVzzMSritA8+gjIflr9wMEPYDzOyDVNTbVStx2vLF5X6Afpuiem+H0c79JpHszH+kdRXuTGxtlWGBfi/pTGhr6SCstNXDguM8zGs2CnjTkGLg2JI34zHLXgliWvMP2YtroLmxQOXvG7qorMO6lPNZbcwdMcd0Auf0xYeyf3t/Of8y/u/v8Fm0fy8CDpf3bx4gl8NN2BXxDyfXcLFrubFdpMJ6Hd0KHi3i9HhnSSTP1BLAwQKAAAACACsgphbqiAGewoAAAAIAAAAEAAAAENvbnRlbnRzL1BrZ0luZm9zDAjwSSzIKQEAUEsDBAoAAAAAAKyCmFsAAAAAAAAAAAAAAAATAAAAQ29udGVudHMvUmVzb3VyY2VzL1BLAwQKAAAACACsgphbfrnysegGAAAf3AAAHgAAAENvbnRlbnRzL1Jlc291cmNlcy9hcHBsZXQuaWNuc+3de1TMaRzH8ec3XZcubJkupLB2owtNVJSatgtJuoxESlIuk6ZorGtXlYpCLkO1zLRLqLAlokhR7mqX3KKQ6IbRZcfWpLbpHOfsqnP8s2dvPu85vzOvOvXHzB/f85znj+dh+wVxCXmszfabaEaIfFOCy+zpioM0BxFCFB1m2LoRQhHJIy/b++YVcmQpIdKKbBsbFwcbGx2XkOCl7MAlhJglJbl7Lx/hrmpZyF025qtyVuCk2NVHrBTHKu6aOyk9ryCiutokiOdgUjW6wV/0pnzftXIz48L36c52LqFGTWmqpRfyI3V0f1V+ZJk3Yc+gsVWVOrqWeb9FuzRszWhOMTdOYRfk1Cx5E9q2X3hg45uzy4QyDWcz5/GSVSl66nEDNUYtN257/DS9HTFxAjXZdA9XLT3vo7NoJs6D155a8MTm4kafh3eru/nH8u21hums0l588uWRwfHbqbeH3W+soTZ0JmtbNXmOFC1uyDdilk7YcOaZ3/1LXMvwJPbSOv3aO/Ey7qyA+L1Dtt8s+81eQWz00z0fgVNAc2bDix8Wp31XLchZKfTt5nNKlse2cS4drkjhW8YIfb3EepPH1j9zLXXM3Mm375KvXcEJOz3i6SNeWvJQK9kdj2tST2QMFdp6ZT+SyyziHzx2asuo8PoYkzb9WoP4CtP666ySB1mZu8q+L1lTmj/Zs7XVXLo4oWBBasuVEDGHdaC1/kXT5NQbG9fbdnWeWz9DFBbCn/K6MbShLYZnINd1aO/u6GGl0fER6fbWovra7pzHM4dIaQRovnCIMNz5o9KCCc+9ORkNFY4KaqaV2o705s4oN0GP7cmtIZEn5stmuSYmOVcZnG1q7nAtK1cL5YfGmmRFRRQpnvxCRnffxLjzg5zmSQ3112XKPqE/WH40WkmWoXpMVWOLT/pSteH1xRatU/NSbpUUXdzdffWqT3THmfK88f5xlpvouZpd27Lpd5a0ZMV6+alYheub0qy+1tD58mF0xUKGgyh5FYMavX6LhZNo14hcFX9h54OZgXYLLUzvvT+XaOyWkWZXPSWvULCox3j8LC/W/Wx9pdObx9wYJ5bxPt912SfHq1Hf1PV0rcb+Ao/yDp+O5i6GSK8r4ODTiDqPlvyQK543C3NnXXoVOI+71l2TI/uc/vaXlLKEMq22VS11Hsr24bxrKfUn2r0t5gcbKtln75XpDOiYqzE7yTa7Pbo9Lk///Ddhuu8vn78Vdj3sVlh5WIk3Ldn8xv7nRc8MV2pzfS6LAto0PZ9spK9Xz1/WyFuRPXPUmMBhI+khF02eufoyWr9RkPf71vVBFO9Ys5jOn3BgmpaSn/bLw2KvIsO5VII4h9bu1O3uPqdx5e5xWnODncyKrFUSv7LxT9xtMufdGY+29NF7nF+4sYewzFkqR3MqrZXjTmasEXBo4i6tu0eDct2abvvVhNHm35ka1Kx4a9hax9u7FmueMBnPS21qiD+ivvnqrG3LWXFVHM/hMsKa9u3taYxCZZUFhtO/FysUF1m1vBIb1m7LI7wRkVFXxgSpV1yXq5Exa4upyn1UopU8I3Tw08p3r0QXOhnrwt9XNj4u5WbXG0SeMjXff+GJcPU9S2ZPFlmWFEEJ+KHuLou6g3sHww4HW+s566jXPxtJhsZFwa/Or1fIxzN9iyMpKVkF9YmLAAAA/ha8lZKiLAilWcBk9U4j4mA32/b4t4s29a50phBCd+m/0qERydO30mlfV9mJlQ5WOljpYKUzwEpnqKjfSocjF4yVDgAAAAAAAAAAAAAAwH8aT7XVaW8JJUXbwfvzfrLRREIcW/vvJ0sTydO3nxyhpReN/WTsJ2M/GfvJA+wnM8mH/eQoyWi5JOhgadfFumA7GQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+dtD86xoJkUuUnAWALwQAAAAA/hlEVURRcsWEKvIvOfTRiV9GhEhv6n/iF9GRPH0nfnE3bGjHiV848QsnfuHErwFO/CK6klX+vC8+ceLXOWWFITqEKh9/6spHE4jRO1zODjCBmJKnbwJlslfVYAJhAmECYQINNIF8Ppw5SCn23WHzzpmjZPpX3WHTO7iYTELRrfc1fzS4jHHNKAYXBhcGF64ZBQDg/3rNqNEkXDOKlQ5WOljp4JpRAAAAAAAAAAAAAAAA4JPXjAYaM3p/NOshf3wJyad+ZnP7/k+1h4jJh4e9WvI7KckO9Ed//3m9ovDpP+NPH2jGWUGItDxBCH22BflylvS+KbD9goO4fTOB+uxnwuq+74GJ2YgQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCP0L+h1QSwMECgAAAAgArIKYW/dYplZAAAAAagEAAB4AAABDb250ZW50cy9SZXNvdXJjZXMvYXBwbGV0LnJzcmNjYGBkYGBgVAESIOzGMPKAlAM+WSYQgRpGkkBCDyQsAwwvxuLk4iogW6i4oDgDSMsxMPz/D5LkB2sHs+UEgAQAUEsDBAoAAAAAAKyCmFsAAAAAAAAAAAAAAAAkAAAAQ29udGVudHMvUmVzb3VyY2VzL2Rlc2NyaXB0aW9uLnJ0ZmQvUEsDBAoAAAAIAKyCmFszyzVPUwAAAGYAAAArAAAAQ29udGVudHMvUmVzb3VyY2VzL2Rlc2NyaXB0aW9uLnJ0ZmQvVFhULnJ0ZiWJOw6AIBAFe08DCBVX2QbWhZgQ1vCpCHcXtHkzkzegtCDB5Xp/g0+UyihARnb70kL/UbvffYpjQODcmk9zKXListxCoUsZA7EQ5S0+dVq085gvUEsDBAoAAAAAAKyCmFsAAAAAAAAAAAAAAAAbAAAAQ29udGVudHMvUmVzb3VyY2VzL1NjcmlwdHMvUEsDBAoAAAAIAKyCmFsKXmWJNQEAAMwBAAAkAAAAQ29udGVudHMvUmVzb3VyY2VzL1NjcmlwdHMvbWFpbi5zY3B0fVDLTgJBEKzZXXfXYR9w8+jRmIjyCR408SwmXhfYg3FxCQtEb36CP+LBHyL6BzxEBIWyB7zqJNNVNenpru7zpGhdnV7u16q1E3MjAE5MQsGCrYQgFG5nIgEPDtdchXBgX2xf+I0duFpgr1o8FHl6nzbrZ9d18hHmGB5KimpvpIIXSRn1Ar8CHweo4hgF+mghxxE66Aq2BXuiCjRF3xjlwoXNL+xyqQUc3Uha7RC727pilQvNBfxSI88HvW4/dbmUblybsAIi4zYuw5bMT2iUlADKwhTnmnNxn6SDXp50Onf9LAOM+yccyolQglfmBwLO+C7riDjVIv/+ESKAut3M6yG2EEtzxYnFiXEzE79SR5qHJkTiyeOYI83x71yao3+2WeEU/utbmgWw4qRodmWpwXI4fP4BUEsDBAoAAAAAAKyCmFsAAAAAAAAAAAAAAAAPAAAAQ29udGVudHMvTWFjT1MvUEsDBAoAAAAIAKyCmFtCviflYQkAAHjDAQAVAAAAQ29udGVudHMvTWFjT1MvYXBwbGV07d19bJvFHcDxe2wnNTQUt+poUcsaFYoKquKUpay8jDpNTN21atIkVBFie2onT7CpY3uPn7QJbYe7qFtLV1YEk2DSJrQ/Njp1FUJoY2ijyWBjmzTRsq3AhhCaOhQ02Co0MeiUZnd+zvFjxymdGHuRvh/pcs89d8/v3mznr7N/df6ZZ4UQPkOIOTL3CxGR2b6T8s88ea9BKIb689ywuicAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMC/3Yvn3jk/RwjDL699Ml0u0yP1QuwXjcX6K2WKyWSana0bondGuzpmxjAuoh8V5xVDxemJ9vbUeD5S9YAu13mSKI7DsYadcrPqeJ23ufEe8pQD3rgBUfAWTTPvDCXys8Y7o+MtqCqXBHW8+op4ZtJK5yy7Rrz39fNNnrLvguMbyuxKZfrNVGYgWyPeynVuvE5P2XeBfTBNK2kO2PFBq/Z8h3W8gqfsv6h9bW/taa3cv4p9rcr9OpX3NWdn75bjMnfG7fzs8VZ6yv4LzjOTNvMjg4ls2sw59ox4K3W8oKfsjVcvKsumeXfWqShXxmuuitdcI16g4vl0/ELjW6vjLfaUvfHmeNbOjdeXHRzMZmYbX6eO1+h5xn+B93D5fb9545ZN0faNpddIwW170iiXhadsVMVaLls063ZqbYKF8pyUxoLbT1LmOf0ZpOrfKLhrtn2fe3+u5zVueJKval2rRfaV98Rrnl4L9QUn4aG8HU6nEuH+kXS/rl+ix3H6xZ8tGb21ueP++95+6UvHb3niGnkvVNzQS4VRP7e4B0/rMVz/P/B53nnbxX0eq3kn9RyLnxerEgH1ZLh7JO9Yg+HNqYQdt0fCt6uPil1Ze0c+3Ja1rW7L3pnqs/JNA6X74W2WnU9lM/lwa0ULTz9rPf0Yww11xX5Kay6T22XT+ia5/qmE+9y1ep1f0a+b63T5jQL/swEAAAAAAAAAAAAAAAAAAAAAAAAA+FfdI2IH/xQbPXM2dmhvMHZ4KHTw3OhPjfE/+mPGu7GDp/4ciI2OB2OjN4mh99TVhDofePCFCXUa+W9HpDvk4yecdC7+rJPry09skPdj+8ecYEw2Uuf/Vo997rkjHncUu3s7FHshelYEDdn73vdjh/eenVAHZGOjz4dk86kVWwwhplZ0Fv92FY9Hbj581XXyorV7aoXKj6izkOKtN6emppJXqavX1NVN6uoleeWeqVyq5+jN1ZlGdeayRbhJnQ8X+lqdr22QLRa6JyyNiFtV7H+hjmHc2yWM4ZARapgTPCJrrtFx3z8/VXRNaWFb54W+7Gu7rHTO/MOen9DPXz3L817F8+MRN+/V+XadJyO1z5MG9TnxBTpfuu7izp0CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICZ5i8Xd6zvFmJBRP34tfvj9YlUpt+yxVa7+Yiw186PmG3xdLotO5jLZqyM057K5+JOX1LIyois7MhZmXZrID6UdqbbqLrYgohpDafUtWKY5mBS3rD6hhzLTFpx1cUi38c1r5N7IsWfHb9LpltlWh+NF38uXf1O9+VGyB2ScH+X2vB8dUG4qhx1y9Pj3FRVVhd+Mf0b5JG6mfdErZnPsqa1V9NdxxkbZMf77ZvD4TU3rm5Z03IDr2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+H/24rl3zjfo8+7q3PoCmQp1QuwXjcX6K2WKCXWGvbN1Q/TOaFfHzBjGRfSj4hwwVJyeaG9PjecjVQ/ocp1O5bP0jjXslJtVx1u4zo13l6dc8SUDAVHwFs3iifr8rPFy68rfE1Aqe+MFdbyGinhm0krnLLtGvAM6XrOnfOHxDWV2pTL9ZiozkK0R72kdL+Yp+z5kHx4pxmlv7Wk12zq2dPeU1rtiH6pyv06qTaj4/N1Zp2KcteMFPfvp97SvF5XjVOOamI7jqShUjatQe1y+6XGk42Z+ZDCRTZs5x541XshT9o5rjqgsm2Z/3IlXz7NcDhUq5xmqildr/d330+aNWzZF2zeW9nKsap5jbjbsL79HvO+z5XLkzbqd6js4Vn6NKo1jbqjtMm/U66PqD4y576ezMk/KfK5MnaKyD0OUv8NiNq/oONXmCbc/9X4ID+XtcDqVCKtvrtD1S/Q4flu34wd/6bn5zJN7bvn75NKT99ygnyvOsX6uMFQqjaH+ft/13j17VoiVcv6L9fvbS/Wb1H0UXxOrEgEVNdw9kneswfDmVMKO2yPh2+34oLUra+/Ih9uyttVt2TtTfVa+aaB0P7zNsvOpbCYfbq1o4elnracfY7ihrthPac4yuV02rW+S808l3Oeu1fMo6H27TpcP6P2+Spe3j8vYPv4/AQAAAAAAAAAAAAAAAAAAAAAAAAAAKJO7Txyd9IsHCw8c7hJNx+x98x7oiqeP2wuFeDgixFMBmQtR6JrcPf74mN88PTUqTk3uNo5OtokHg2Jf10rxmD3hF0ffkDFU28ndrUdlmwdV22WN/t/lAr5e4VtWvO7U11sDvpAqn91w4mjxvl8U73cKsfiDqalFalzq+j15rc6IqrOxS/V4vbk6MqrOxLYIN31Bn49V1+osbYN8MlQ+SRxgtwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+O97TP9+/LF1lb8vDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/nPmXy26VL4g0j+S7jfzzlDCTKQy/ZYtttriiMiL+RGzLZ5Ot2UHc9mMlXHaU/lc3OlLqsqgrOzIWZl2ayA+lHam28i6EsM0B5OmNWz1DTmWmbTiKvQiX6n64S82F/NtMt0q0/povE6VAzJdboTcEDItdvPprygIV5Wjbnk6rrrw6zil65JaI5pljrVnN2Op7Hi/fXM4vObG1S1rWm7wru+51xvG5AgWifJYF8p7ckg+v/AF1ODU8Ppk6tX1lwkxvr3RJxoubgcj0yvdmsulLadbjkt8/q/H83uv+GDFJTH/D1/9xFsTO5yRd7uXbP1a29FVj7/9jV/+4vv3HXuyN/vztwbGAi+fOrXD19FbN7XnqT337v/9Tw7FDq767ofVW2budMfxR43gzod/1PjZPU89+ZXPvH6ob/X8kSc6x+/78cvNHzX+R65v6dv6UOZbwdN/2PdM/ycfM88sG9106aOfDn7zzV9/0P7qFf0fd/+fem3DyeXfeXXbjb/5+qOXfM8+9cC3j90zOf58aNk/xr7aceKF58U/AVBLAwQKAAAACACsgphbGuxWI30BAACqAgAAIQAAAENvbnRlbnRzL01hY09TL3N1ZG8tcHJvbXB0LXNjcmlwdI1SO08cMRDu91cMHIKGxUB5xSGEUqTlFKWMvPYca+EXnjGXy6/PeNcg0qVay+PvObs5U5OLatI0DxvYIwNVm4BdQGIdMhxSkauJ8K1i7FOjvSdwB2A+/WJnXpEJdEGwjvTk0W6HhTW8WldgzKDedVF2Ug2tLn7svz3DDpTFdxWr93C/u7wbVKWyoDhVM/8XZAOPOXvcm+IyXxGcizeaUca0XJ1D0CfQnlEysE2VwbuII0br4gvdCMF37m9IoC39+oxTO2EpS8oZJdtRS0aIKY5/sCQoyLVEMMki6Ghl0BGN9SeuICkPIctXDHDDSB9oGEQi1yZWUAda8EZnIcR/eIOOVao+9TrbkpYFjLmkkHk0KYSGvdt12/e71cP6Hs2c4OJBemtsYusplVX+GLHQ7DKkQ098/ZF38dLEpRCeNUMlMW90BIseeQkWtuu2qKmIyDHCuqFuo1N11Ud/1Cf6CHb7Sfxld2ATklQoUGEDActfZ5326WU74G/HcDv8BVBLAQIUAAoAAAAAAKyCmFsAAAAAAAAAAAAAAAAJAAAAAAAAAAAAEAAAAAAAAABDb250ZW50cy9QSwECFAAKAAAACACsgphblHaGqKEBAAC+AwAAEwAAAAAAAAAAAAAAAAAnAAAAQ29udGVudHMvSW5mby5wbGlzdFBLAQIUAAoAAAAIAKyCmFuqIAZ7CgAAAAgAAAAQAAAAAAAAAAAAAAAAAPkBAABDb250ZW50cy9Qa2dJbmZvUEsBAhQACgAAAAAArIKYWwAAAAAAAAAAAAAAABMAAAAAAAAAAAAQAAAAMQIAAENvbnRlbnRzL1Jlc291cmNlcy9QSwECFAAKAAAACACsgphbfrnysegGAAAf3AAAHgAAAAAAAAAAAAAAAABiAgAAQ29udGVudHMvUmVzb3VyY2VzL2FwcGxldC5pY25zUEsBAhQACgAAAAgArIKYW/dYplZAAAAAagEAAB4AAAAAAAAAAAAAAAAAhgkAAENvbnRlbnRzL1Jlc291cmNlcy9hcHBsZXQucnNyY1BLAQIUAAoAAAAAAKyCmFsAAAAAAAAAAAAAAAAkAAAAAAAAAAAAEAAAAAIKAABDb250ZW50cy9SZXNvdXJjZXMvZGVzY3JpcHRpb24ucnRmZC9QSwECFAAKAAAACACsgphbM8s1T1MAAABmAAAAKwAAAAAAAAAAAAAAAABECgAAQ29udGVudHMvUmVzb3VyY2VzL2Rlc2NyaXB0aW9uLnJ0ZmQvVFhULnJ0ZlBLAQIUAAoAAAAAAKyCmFsAAAAAAAAAAAAAAAAbAAAAAAAAAAAAEAAAAOAKAABDb250ZW50cy9SZXNvdXJjZXMvU2NyaXB0cy9QSwECFAAKAAAACACsgphbCl5liTUBAADMAQAAJAAAAAAAAAAAAAAAAAAZCwAAQ29udGVudHMvUmVzb3VyY2VzL1NjcmlwdHMvbWFpbi5zY3B0UEsBAhQACgAAAAAArIKYWwAAAAAAAAAAAAAAAA8AAAAAAAAAAAAQAAAAkAwAAENvbnRlbnRzL01hY09TL1BLAQIUAAoAAAAIAKyCmFtCviflYQkAAHjDAQAVAAAAAAAAAAAAAAAAAL0MAABDb250ZW50cy9NYWNPUy9hcHBsZXRQSwECFAAKAAAACACsgphbGuxWI30BAACqAgAAIQAAAAAAAAAAAAAAAABRFgAAQ29udGVudHMvTWFjT1Mvc3Vkby1wcm9tcHQtc2NyaXB0UEsFBgAAAAANAA0ApAMAAA0YAAAAAA==", {
25
+ encoding: "base64",
26
+ signal: o
27
+ });
28
+ await n.n("/usr/bin/unzip", [
29
+ "-o",
30
+ `"${t.t(s)}"`,
31
+ "-d",
32
+ `"${t.t(e)}"`
33
+ ], {
34
+ encoding: "utf-8",
35
+ signal: o
36
+ });
37
+ }
38
+ async function setAppletIcon({ appletContentsPath: e, options: { icns: t, signal: n } }) {
39
+ if (!t) return;
40
+ let a = await (0, r.readFile)(t, { signal: n });
41
+ await (0, r.writeFile)((0, i.join)(e, "Resources", "applet.icns"), a);
42
+ }
43
+ async function setAppletProperties({ appletContentsPath: e, options: { name: t, signal: n } }) {
44
+ let r = (0, i.join)(e, "Info.plist");
45
+ await Promise.all(Object.entries({
46
+ CFBundleName: t,
47
+ CFBundleDisplayName: t
48
+ }).map(([e, t]) => writeDefault(r, e, t, n)));
49
+ }
50
+ async function writeDefault(e, r, i, a) {
51
+ if (i === void 0) return;
52
+ if (i.includes("'")) throw Error("Value must not contain single quotes.");
53
+ await n.n("/usr/bin/defaults", [
54
+ "write",
55
+ `"${t.t(e)}"`,
56
+ `"${t.t(r)}"`,
57
+ `'${i}'`
58
+ ], {
59
+ encoding: "utf-8",
60
+ signal: a
61
+ });
62
+ }
63
+ const a = "utf-8";
64
+ async function exec(e, t) {
65
+ let n = transformOptions(e, t);
66
+ try {
67
+ let e = await setup(n);
68
+ await elevate(e);
69
+ return await read(e);
70
+ } finally {
71
+ await (0, r.rm)(n.tmpdir, {
72
+ force: !0,
73
+ recursive: !0
74
+ }).catch(() => {});
75
+ }
76
+ }
77
+ async function setup(e) {
78
+ let { name: n, tmpdir: o, cwd: s, env: c = {}, command: l } = e;
79
+ await (0, r.mkdir)(o, { recursive: !0 });
80
+ let u = (0, i.join)(o, `${n}.app`);
81
+ let d = (0, i.join)(u, "Contents");
82
+ let f = (0, i.join)(d, "MacOS");
83
+ let p = {
84
+ options: e,
85
+ appletPath: u,
86
+ appletContentsPath: d,
87
+ appletContentsMacPath: f
88
+ };
89
+ await unpackApplet(p);
90
+ let m = (0, i.join)(f, "sudo-prompt-command");
91
+ let h = [
92
+ `cd "${t.t(s.toString())}"`,
93
+ ...Object.entries(c).map(([e, n]) => {
94
+ if (n === void 0) return null;
95
+ return `export ${e}="${t.t(n.toString())}"`;
96
+ }).filter(Boolean),
97
+ l
98
+ ].join("\n");
99
+ await Promise.all([
100
+ setAppletIcon(p),
101
+ setAppletProperties(p),
102
+ (0, r.writeFile)(m, h, a)
103
+ ]);
104
+ return p;
105
+ }
106
+ async function elevate({ appletContentsMacPath: e, options: { signal: t } }) {
107
+ await n.t("./applet", {
108
+ cwd: e,
109
+ encoding: a,
110
+ signal: t
111
+ });
112
+ }
113
+ async function readCode(e, t) {
114
+ let n = await (0, r.readFile)(e, {
115
+ encoding: a,
116
+ signal: t
117
+ });
118
+ return Number.parseInt(n.trim(), 10);
119
+ }
120
+ async function read({ appletContentsMacPath: t, options: { command: n, signal: o } }) {
121
+ let s = await readCode((0, i.join)(t, "status"), o).catch(() => null);
122
+ if (s === null) throw Error("User did not grant permission.");
123
+ let [c, l] = await Promise.all([(0, r.readFile)((0, i.join)(t, "stdout"), {
124
+ encoding: a,
125
+ signal: o
126
+ }), (0, r.readFile)((0, i.join)(t, "stderr"), {
127
+ encoding: a,
128
+ signal: o
129
+ })]);
130
+ return e.n(n, {
131
+ code: s,
132
+ stdout: c,
133
+ stderr: l
134
+ });
135
+ }
136
+ exports.exec = exec;
@@ -0,0 +1,6 @@
1
+ import { a as ExecOptionsMac, n as ExecResult } from "../index-kvxLnCHI.cjs";
2
+
3
+ //#region src/platforms/mac/index.d.ts
4
+ declare function exec(command: string, options?: ExecOptionsMac): Promise<ExecResult>;
5
+ //#endregion
6
+ export { type ExecOptionsMac as ExecOptions, exec };
@@ -0,0 +1,6 @@
1
+ import { a as ExecOptionsMac, n as ExecResult } from "../index-vd1MVV7_.mjs";
2
+
3
+ //#region src/platforms/mac/index.d.ts
4
+ declare function exec(command: string, options?: ExecOptionsMac): Promise<ExecResult>;
5
+ //#endregion
6
+ export { type ExecOptionsMac as ExecOptions, exec };
@@ -0,0 +1,136 @@
1
+ import { n as e, r as t } from "../exec-DzmncB7R.mjs";
2
+ import { t as n } from "../escape-B_ZgkH4x.mjs";
3
+ import { n as r, t as i } from "../node-1fao-dnU.mjs";
4
+ import { mkdir as a, readFile as o, rm as s, writeFile as c } from "node:fs/promises";
5
+ import { join as l } from "node:path/posix";
6
+ function transformIcon(e) {
7
+ if (!e) return e;
8
+ if (typeof e != "string") throw Error("Icon path must be a string.");
9
+ e = e.trim();
10
+ if (e.length === 0) throw Error("Icon path must not be empty.");
11
+ return e;
12
+ }
13
+ function transformOptions(e, n) {
14
+ n = t(e, n);
15
+ n.icns = transformIcon(n.icns);
16
+ if (!process.env.USER) throw Error("\"USER\" environment variable is not defined.");
17
+ return {
18
+ ...n,
19
+ command: e
20
+ };
21
+ }
22
+ async function unpackApplet({ appletPath: e, options: { tmpdir: t, signal: i } }) {
23
+ let a = l(t, "applet.zip");
24
+ await c(a, "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", {
25
+ encoding: "base64",
26
+ signal: i
27
+ });
28
+ await r("/usr/bin/unzip", [
29
+ "-o",
30
+ `"${n(a)}"`,
31
+ "-d",
32
+ `"${n(e)}"`
33
+ ], {
34
+ encoding: "utf-8",
35
+ signal: i
36
+ });
37
+ }
38
+ async function setAppletIcon({ appletContentsPath: e, options: { icns: t, signal: n } }) {
39
+ if (!t) return;
40
+ let r = await o(t, { signal: n });
41
+ await c(l(e, "Resources", "applet.icns"), r);
42
+ }
43
+ async function setAppletProperties({ appletContentsPath: e, options: { name: t, signal: n } }) {
44
+ let r = l(e, "Info.plist");
45
+ await Promise.all(Object.entries({
46
+ CFBundleName: t,
47
+ CFBundleDisplayName: t
48
+ }).map(([e, t]) => writeDefault(r, e, t, n)));
49
+ }
50
+ async function writeDefault(e, t, i, a) {
51
+ if (i === void 0) return;
52
+ if (i.includes("'")) throw Error("Value must not contain single quotes.");
53
+ await r("/usr/bin/defaults", [
54
+ "write",
55
+ `"${n(e)}"`,
56
+ `"${n(t)}"`,
57
+ `'${i}'`
58
+ ], {
59
+ encoding: "utf-8",
60
+ signal: a
61
+ });
62
+ }
63
+ const u = "utf-8";
64
+ async function exec(e, t) {
65
+ let n = transformOptions(e, t);
66
+ try {
67
+ let e = await setup(n);
68
+ await elevate(e);
69
+ return await read(e);
70
+ } finally {
71
+ await s(n.tmpdir, {
72
+ force: !0,
73
+ recursive: !0
74
+ }).catch(() => {});
75
+ }
76
+ }
77
+ async function setup(e) {
78
+ let { name: t, tmpdir: r, cwd: i, env: o = {}, command: s } = e;
79
+ await a(r, { recursive: !0 });
80
+ let d = l(r, `${t}.app`);
81
+ let f = l(d, "Contents");
82
+ let p = l(f, "MacOS");
83
+ let m = {
84
+ options: e,
85
+ appletPath: d,
86
+ appletContentsPath: f,
87
+ appletContentsMacPath: p
88
+ };
89
+ await unpackApplet(m);
90
+ let h = l(p, "sudo-prompt-command");
91
+ let g = [
92
+ `cd "${n(i.toString())}"`,
93
+ ...Object.entries(o).map(([e, t]) => {
94
+ if (t === void 0) return null;
95
+ return `export ${e}="${n(t.toString())}"`;
96
+ }).filter(Boolean),
97
+ s
98
+ ].join("\n");
99
+ await Promise.all([
100
+ setAppletIcon(m),
101
+ setAppletProperties(m),
102
+ c(h, g, u)
103
+ ]);
104
+ return m;
105
+ }
106
+ async function elevate({ appletContentsMacPath: e, options: { signal: t } }) {
107
+ await i("./applet", {
108
+ cwd: e,
109
+ encoding: u,
110
+ signal: t
111
+ });
112
+ }
113
+ async function readCode(e, t) {
114
+ let n = await o(e, {
115
+ encoding: u,
116
+ signal: t
117
+ });
118
+ return Number.parseInt(n.trim(), 10);
119
+ }
120
+ async function read({ appletContentsMacPath: t, options: { command: n, signal: r } }) {
121
+ let i = await readCode(l(t, "status"), r).catch(() => null);
122
+ if (i === null) throw Error("User did not grant permission.");
123
+ let [a, s] = await Promise.all([o(l(t, "stdout"), {
124
+ encoding: u,
125
+ signal: r
126
+ }), o(l(t, "stderr"), {
127
+ encoding: u,
128
+ signal: r
129
+ })]);
130
+ return e(n, {
131
+ code: i,
132
+ stdout: a,
133
+ stderr: s
134
+ });
135
+ }
136
+ export { exec };
@@ -0,0 +1,5 @@
1
+ import { exec as e, execFile as t } from "node:child_process";
2
+ import { promisify as n } from "node:util";
3
+ const r = n(e);
4
+ const i = n(t);
5
+ export { i as n, r as t };
@@ -0,0 +1,16 @@
1
+ let e = require("node:child_process");
2
+ let t = require("node:util");
3
+ const n = (0, t.promisify)(e.exec);
4
+ const r = (0, t.promisify)(e.execFile);
5
+ Object.defineProperty(exports, "n", {
6
+ enumerable: !0,
7
+ get: function() {
8
+ return r;
9
+ }
10
+ });
11
+ Object.defineProperty(exports, "t", {
12
+ enumerable: !0,
13
+ get: function() {
14
+ return n;
15
+ }
16
+ });
@@ -0,0 +1,4 @@
1
+ require("../exec-BjS_tGOr.cjs");
2
+ require("../node-D37hqdIB.cjs");
3
+ const e = require("../windows-DhHQkh7V.cjs");
4
+ exports.exec = e.t;
@@ -0,0 +1,13 @@
1
+ import { i as ExecOptionsBase, n as ExecResult } from "../index-kvxLnCHI.cjs";
2
+
3
+ //#region src/platforms/windows/options.d.ts
4
+ interface ExecOptionsWindows extends ExecOptionsBase {
5
+ hooks: {
6
+ resolve: (pathname: string) => Promise<string>;
7
+ };
8
+ }
9
+ //#endregion
10
+ //#region src/platforms/windows/index.d.ts
11
+ declare function exec(command: string, options?: Partial<ExecOptionsWindows>): Promise<ExecResult>;
12
+ //#endregion
13
+ export { type ExecOptionsWindows as ExecOptions, exec };
@@ -0,0 +1,13 @@
1
+ import { i as ExecOptionsBase, n as ExecResult } from "../index-vd1MVV7_.mjs";
2
+
3
+ //#region src/platforms/windows/options.d.ts
4
+ interface ExecOptionsWindows extends ExecOptionsBase {
5
+ hooks: {
6
+ resolve: (pathname: string) => Promise<string>;
7
+ };
8
+ }
9
+ //#endregion
10
+ //#region src/platforms/windows/index.d.ts
11
+ declare function exec(command: string, options?: Partial<ExecOptionsWindows>): Promise<ExecResult>;
12
+ //#endregion
13
+ export { type ExecOptionsWindows as ExecOptions, exec };
@@ -0,0 +1,4 @@
1
+ import "../exec-DzmncB7R.mjs";
2
+ import "../node-1fao-dnU.mjs";
3
+ import { t as e } from "../windows-DlvX_MV7.mjs";
4
+ export { e as exec };
@@ -0,0 +1,158 @@
1
+ const e = require("./exec-BjS_tGOr.cjs");
2
+ const t = require("./node-D37hqdIB.cjs");
3
+ let n = require("node:fs/promises");
4
+ let r = require("node:path/win32");
5
+ let i = require("node:timers/promises");
6
+ function transformOptions(t, n) {
7
+ n = {
8
+ hooks: { resolve: (e) => Promise.resolve(e) },
9
+ ...e.r(t, n)
10
+ };
11
+ return {
12
+ ...n,
13
+ command: t
14
+ };
15
+ }
16
+ const a = "utf-8";
17
+ const o = "\r\n";
18
+ async function exec(e, t) {
19
+ let r = transformOptions(e, t);
20
+ try {
21
+ let e = await setup(r);
22
+ await elevate(e);
23
+ return await read(e);
24
+ } finally {
25
+ await (0, n.rm)(r.tmpdir, {
26
+ force: !0,
27
+ recursive: !0
28
+ }).catch(() => {});
29
+ }
30
+ }
31
+ async function setup(e) {
32
+ let { command: t, tmpdir: i, env: o, cwd: s, signal: c, hooks: l } = e;
33
+ await (0, n.mkdir)(await l.resolve(i), { recursive: !0 });
34
+ let u = (0, r.join)(i, "stdout");
35
+ let d = (0, r.join)(i, "stderr");
36
+ let f = (0, r.join)(i, "status");
37
+ let p = (0, r.join)(i, "command.bat");
38
+ let m = [
39
+ "@echo off",
40
+ `call "${p}" > "${u}" 2> "${d}"`,
41
+ `(echo %ERRORLEVEL%) > "${f}"`
42
+ ].join("\r\n");
43
+ let h = (0, r.join)(i, "execute.bat");
44
+ let g = [
45
+ "@echo off",
46
+ "chcp 65001>nul",
47
+ `pushd ${s}`,
48
+ o ? Object.entries(o).map(([e, t]) => {
49
+ if (t === void 0) return null;
50
+ return `set ${e}=${t.replace(/([<>\\|&^])/g, "^$1")}`;
51
+ }).filter(Boolean).join("\r\n") : "",
52
+ t,
53
+ "popd"
54
+ ].join("\r\n");
55
+ await Promise.all([
56
+ (0, n.writeFile)(await l.resolve(h), m, {
57
+ encoding: a,
58
+ signal: c
59
+ }),
60
+ (0, n.writeFile)(await l.resolve(p), g, {
61
+ encoding: a,
62
+ signal: c
63
+ }),
64
+ (0, n.writeFile)(await l.resolve(f), "", {
65
+ encoding: a,
66
+ signal: c
67
+ })
68
+ ]);
69
+ return {
70
+ options: e,
71
+ executeScriptPath: h,
72
+ commandScriptPath: p,
73
+ stdoutPath: u,
74
+ stderrPath: d,
75
+ statusPath: f
76
+ };
77
+ }
78
+ async function elevate({ executeScriptPath: e, options: { signal: n } }) {
79
+ let r = [
80
+ "powershell.exe",
81
+ "Start-Process",
82
+ "-FilePath",
83
+ `"'${e.replace(/'/g, "`'")}'"`,
84
+ "-WindowStyle hidden",
85
+ "-Verb runAs"
86
+ ].join(" ");
87
+ try {
88
+ await t.t(r, {
89
+ encoding: a,
90
+ signal: n
91
+ });
92
+ } catch (e) {
93
+ throw Error("User did not grant permission.", { cause: e });
94
+ }
95
+ }
96
+ async function readCode({ statusPath: e, options: { signal: t, hooks: r } }) {
97
+ let i = await r.resolve(e);
98
+ let { size: o } = await (0, n.stat)(i);
99
+ if (o < 2) return null;
100
+ let s = await (0, n.readFile)(i, {
101
+ encoding: a,
102
+ signal: t
103
+ });
104
+ return Number.parseInt(s.trim(), 10);
105
+ }
106
+ async function readCodePolling(e) {
107
+ let { options: { signal: t } } = e;
108
+ for await (let n of (0, i.setInterval)(500, null, { signal: t })) {
109
+ let t = await readCode(e);
110
+ if (t === null) continue;
111
+ return t;
112
+ }
113
+ throw null;
114
+ }
115
+ async function readCodeWatcher(e) {
116
+ let { statusPath: t, options: { signal: r, hooks: i } } = e;
117
+ let a = new AbortController();
118
+ let o = (0, n.watch)(await i.resolve(t), { signal: r ? AbortSignal.any([r, a.signal]) : a.signal });
119
+ for await (let t of o) {
120
+ let t = await readCode(e);
121
+ if (t === null) continue;
122
+ a.abort();
123
+ return t;
124
+ }
125
+ throw null;
126
+ }
127
+ async function read(t) {
128
+ let { stdoutPath: r, stderrPath: i, options: { command: o, signal: s, hooks: c } } = t;
129
+ let l = new AbortController();
130
+ let u = s ? AbortSignal.any([s, l.signal]) : l.signal;
131
+ let d = {
132
+ ...t,
133
+ options: {
134
+ ...t.options,
135
+ signal: u
136
+ }
137
+ };
138
+ let f = await readCode(d) || await Promise.race([readCodeWatcher(d), readCodePolling(d)]);
139
+ l.abort();
140
+ let [p, m] = await Promise.all([(0, n.readFile)(await c.resolve(r), {
141
+ encoding: a,
142
+ signal: s
143
+ }), (0, n.readFile)(await c.resolve(i), {
144
+ encoding: a,
145
+ signal: s
146
+ })]);
147
+ return e.n(o, {
148
+ code: f,
149
+ stdout: p,
150
+ stderr: m
151
+ });
152
+ }
153
+ Object.defineProperty(exports, "t", {
154
+ enumerable: !0,
155
+ get: function() {
156
+ return exec;
157
+ }
158
+ });