just-bash 2.12.2 → 2.12.4
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/bin/chunks/awk2-RGDNV4HO.js +2 -0
- package/dist/bin/chunks/{base64-YXBFJFHG.js → base64-43M2R3GA.js} +1 -1
- package/dist/bin/{shell/chunks/cat-3J7U3HHI.js → chunks/cat-XZIJZXKP.js} +1 -1
- package/dist/bin/chunks/chunk-4C4F4EKM.js +2 -0
- package/dist/bin/{shell/chunks/chunk-MZKPWGID.js → chunks/chunk-54G6AE72.js} +23 -23
- package/dist/bin/chunks/chunk-55QIFSKH.js +36 -0
- package/dist/bin/chunks/chunk-6MF2IYQX.js +10 -0
- package/dist/bin/{shell/chunks/chunk-NEQEZ32M.js → chunks/chunk-CGE2EHYP.js} +3 -3
- package/dist/bin/chunks/chunk-DGFDVZ4N.js +21 -0
- package/dist/bin/chunks/chunk-EO5AH4U7.js +5 -0
- package/dist/bin/chunks/{chunk-2SIXTZCJ.js → chunk-EZS766DD.js} +4 -4
- package/dist/bin/{shell/chunks/chunk-THLAHQXV.js → chunks/chunk-FA2CHD73.js} +1 -1
- package/dist/bin/chunks/{chunk-BARKRZDC.js → chunk-GOJZHH3L.js} +1 -1
- package/dist/bin/chunks/{chunk-435ZOZCY.js → chunk-J4WYAO5Q.js} +1 -1
- package/dist/bin/chunks/chunk-LHN3LRVT.js +100 -0
- package/dist/bin/chunks/chunk-MRP4ZCD7.js +6 -0
- package/dist/bin/chunks/{chunk-JNPUO56K.js → chunk-NDP6L74Z.js} +1 -1
- package/dist/bin/chunks/chunk-PWZZGTFL.js +13 -0
- package/dist/bin/chunks/{chunk-3NVWSLHI.js → chunk-Q3FNZYGG.js} +99 -99
- package/dist/bin/{shell/chunks/chunk-7SWOLTCR.js → chunks/chunk-Q4WHWGOT.js} +1 -1
- package/dist/bin/chunks/chunk-SY2WM5RM.js +14 -0
- package/dist/bin/chunks/chunk-SYG3IW7P.js +2 -0
- package/dist/bin/chunks/chunk-SYL34GE7.js +21 -0
- package/dist/bin/chunks/{chunk-DREQRXNN.js → chunk-V5YFCVCZ.js} +1 -1
- package/dist/bin/chunks/chunk-V7VIJQD6.js +6 -0
- package/dist/bin/chunks/chunk-WMYKQURM.js +2 -0
- package/dist/bin/chunks/chunk-WO4B7WUT.js +2 -0
- package/dist/bin/{shell/chunks/chunk-5U7Q4GUC.js → chunks/chunk-WWZVR5NN.js} +4 -4
- package/dist/bin/chunks/{cut-HDHQDWRG.js → cut-5EY2XPXX.js} +1 -1
- package/dist/bin/chunks/expr-VEFRBJT4.js +2 -0
- package/dist/bin/chunks/flag-coverage-K6IBGWAC.js +2 -0
- package/dist/bin/chunks/{gzip-RQ5RIFJV.js → gzip-LHOO65AN.js} +1 -1
- package/dist/bin/chunks/jq-VBB2XIZS.js +2 -0
- package/dist/bin/chunks/ln-BEOFQJNP.js +2 -0
- package/dist/bin/chunks/python3-JX5PXXTX.js +17 -0
- package/dist/bin/chunks/sed-BYFYBR4A.js +2 -0
- package/dist/bin/chunks/sleep-E3K6M6BN.js +2 -0
- package/dist/bin/chunks/{sort-NZSEYCI6.js → sort-7GENYU2I.js} +1 -1
- package/dist/bin/chunks/sqlite3-SJHZFBT2.js +2 -0
- package/dist/bin/{shell/chunks/tar-VIYVHMER.js → chunks/tar-W5GBTEDZ.js} +1 -1
- package/dist/bin/chunks/time-AWAKKRSE.js +2 -0
- package/dist/bin/chunks/timeout-OLS72AZG.js +2 -0
- package/dist/bin/chunks/tr-LZF57GYP.js +2 -0
- package/dist/bin/chunks/{uniq-FZWFZEN5.js → uniq-TMSAIZM3.js} +1 -1
- package/dist/bin/chunks/worker.js +92 -29
- package/dist/bin/chunks/xan-BJ66NSYT.js +2 -0
- package/dist/bin/chunks/yq-GPYVGU2N.js +2 -0
- package/dist/bin/just-bash.js +294 -294
- package/dist/bin/shell/chunks/awk2-RGDNV4HO.js +2 -0
- package/dist/bin/shell/chunks/{base64-YXBFJFHG.js → base64-43M2R3GA.js} +1 -1
- package/dist/bin/{chunks/cat-3J7U3HHI.js → shell/chunks/cat-XZIJZXKP.js} +1 -1
- package/dist/bin/shell/chunks/chunk-4C4F4EKM.js +2 -0
- package/dist/bin/{chunks/chunk-MZKPWGID.js → shell/chunks/chunk-54G6AE72.js} +23 -23
- package/dist/bin/shell/chunks/chunk-55QIFSKH.js +36 -0
- package/dist/bin/shell/chunks/chunk-6MF2IYQX.js +10 -0
- package/dist/bin/{chunks/chunk-NEQEZ32M.js → shell/chunks/chunk-CGE2EHYP.js} +3 -3
- package/dist/bin/shell/chunks/chunk-DGFDVZ4N.js +21 -0
- package/dist/bin/shell/chunks/chunk-EO5AH4U7.js +5 -0
- package/dist/bin/shell/chunks/{chunk-2SIXTZCJ.js → chunk-EZS766DD.js} +4 -4
- package/dist/bin/{chunks/chunk-THLAHQXV.js → shell/chunks/chunk-FA2CHD73.js} +1 -1
- package/dist/bin/shell/chunks/{chunk-BARKRZDC.js → chunk-GOJZHH3L.js} +1 -1
- package/dist/bin/shell/chunks/{chunk-435ZOZCY.js → chunk-J4WYAO5Q.js} +1 -1
- package/dist/bin/shell/chunks/chunk-LHN3LRVT.js +100 -0
- package/dist/bin/shell/chunks/chunk-MRP4ZCD7.js +6 -0
- package/dist/bin/shell/chunks/{chunk-JNPUO56K.js → chunk-NDP6L74Z.js} +1 -1
- package/dist/bin/shell/chunks/chunk-PWZZGTFL.js +13 -0
- package/dist/bin/shell/chunks/{chunk-3NVWSLHI.js → chunk-Q3FNZYGG.js} +99 -99
- package/dist/bin/{chunks/chunk-7SWOLTCR.js → shell/chunks/chunk-Q4WHWGOT.js} +1 -1
- package/dist/bin/shell/chunks/chunk-SY2WM5RM.js +14 -0
- package/dist/bin/shell/chunks/chunk-SYG3IW7P.js +2 -0
- package/dist/bin/shell/chunks/chunk-SYL34GE7.js +21 -0
- package/dist/bin/shell/chunks/{chunk-DREQRXNN.js → chunk-V5YFCVCZ.js} +1 -1
- package/dist/bin/shell/chunks/chunk-V7VIJQD6.js +6 -0
- package/dist/bin/shell/chunks/chunk-WMYKQURM.js +2 -0
- package/dist/bin/shell/chunks/chunk-WO4B7WUT.js +2 -0
- package/dist/bin/{chunks/chunk-5U7Q4GUC.js → shell/chunks/chunk-WWZVR5NN.js} +4 -4
- package/dist/bin/shell/chunks/{cut-HDHQDWRG.js → cut-5EY2XPXX.js} +1 -1
- package/dist/bin/shell/chunks/expr-VEFRBJT4.js +2 -0
- package/dist/bin/shell/chunks/flag-coverage-K6IBGWAC.js +2 -0
- package/dist/bin/shell/chunks/{gzip-RQ5RIFJV.js → gzip-LHOO65AN.js} +1 -1
- package/dist/bin/shell/chunks/jq-VBB2XIZS.js +2 -0
- package/dist/bin/shell/chunks/ln-BEOFQJNP.js +2 -0
- package/dist/bin/shell/chunks/python3-JX5PXXTX.js +17 -0
- package/dist/bin/shell/chunks/sed-BYFYBR4A.js +2 -0
- package/dist/bin/shell/chunks/sleep-E3K6M6BN.js +2 -0
- package/dist/bin/shell/chunks/{sort-NZSEYCI6.js → sort-7GENYU2I.js} +1 -1
- package/dist/bin/shell/chunks/sqlite3-SJHZFBT2.js +2 -0
- package/dist/bin/{chunks/tar-VIYVHMER.js → shell/chunks/tar-W5GBTEDZ.js} +1 -1
- package/dist/bin/shell/chunks/time-AWAKKRSE.js +2 -0
- package/dist/bin/shell/chunks/timeout-OLS72AZG.js +2 -0
- package/dist/bin/shell/chunks/tr-LZF57GYP.js +2 -0
- package/dist/bin/shell/chunks/{uniq-FZWFZEN5.js → uniq-TMSAIZM3.js} +1 -1
- package/dist/bin/shell/chunks/xan-BJ66NSYT.js +2 -0
- package/dist/bin/shell/chunks/yq-GPYVGU2N.js +2 -0
- package/dist/bin/shell/shell.js +234 -234
- package/dist/bundle/browser.js +671 -671
- package/dist/bundle/chunks/awk2-XLDR2J4Q.js +1 -0
- package/dist/bundle/chunks/{base64-A3SGWC34.js → base64-4YMZCVJ5.js} +1 -1
- package/dist/bundle/chunks/{cat-C2OBLGHA.js → cat-RDUMLXKC.js} +1 -1
- package/dist/bundle/chunks/chunk-2OHMPZNZ.js +20 -0
- package/dist/bundle/chunks/chunk-3RCXHB4E.js +4 -0
- package/dist/bundle/chunks/chunk-CCNMISUL.js +1 -0
- package/dist/bundle/chunks/chunk-DOTBQEPN.js +5 -0
- package/dist/bundle/chunks/chunk-GENDESYN.js +1 -0
- package/dist/bundle/chunks/chunk-H4QOE4W3.js +99 -0
- package/dist/bundle/chunks/{chunk-C6ZZC5FL.js → chunk-K5BTXJQC.js} +99 -99
- package/dist/bundle/chunks/chunk-KAZYKNBG.js +13 -0
- package/dist/bundle/chunks/{chunk-KAEMRWOH.js → chunk-KMEYNNUA.js} +1 -1
- package/dist/bundle/chunks/{chunk-FO655G4V.js → chunk-LTZRCH7N.js} +23 -23
- package/dist/bundle/chunks/{chunk-XULIVM35.js → chunk-N4QLRJ32.js} +1 -1
- package/dist/bundle/chunks/{chunk-5CJQNRNJ.js → chunk-NTP6TTH5.js} +1 -1
- package/dist/bundle/chunks/{chunk-IBFD7QQD.js → chunk-QJ7O6ZN3.js} +1 -1
- package/dist/bundle/chunks/chunk-QUME7R6S.js +9 -0
- package/dist/bundle/chunks/{chunk-U7QI5ZS5.js → chunk-RVT3MU3A.js} +4 -4
- package/dist/bundle/chunks/{chunk-6NY2AP72.js → chunk-SDNKECQQ.js} +4 -4
- package/dist/bundle/chunks/chunk-T2EHE3CV.js +1 -0
- package/dist/bundle/chunks/chunk-TBAWQWQB.js +12 -0
- package/dist/bundle/chunks/chunk-TXBZCHCQ.js +5 -0
- package/dist/bundle/chunks/chunk-VYV3YE2F.js +35 -0
- package/dist/bundle/chunks/{chunk-UJIR5V54.js → chunk-W42IGK5R.js} +1 -1
- package/dist/bundle/chunks/{chunk-7BQDVPII.js → chunk-WAN3B6E3.js} +1 -1
- package/dist/bundle/chunks/{chunk-7C6RBHP3.js → chunk-WKFATFPP.js} +3 -3
- package/dist/bundle/chunks/chunk-XXZ46GOX.js +20 -0
- package/dist/bundle/chunks/chunk-ZK6J6F7O.js +1 -0
- package/dist/bundle/chunks/{cut-LO6YYY5P.js → cut-OPC3VAGB.js} +1 -1
- package/dist/bundle/chunks/expr-74QHYJL5.js +1 -0
- package/dist/bundle/chunks/flag-coverage-VGF5NAZP.js +1 -0
- package/dist/bundle/chunks/{gzip-Y4N2UKE7.js → gzip-AQXSGOVS.js} +1 -1
- package/dist/bundle/chunks/jq-JQXAVWNT.js +1 -0
- package/dist/bundle/chunks/ln-RI2SJGXU.js +1 -0
- package/dist/bundle/chunks/python3-TSPOVUHX.js +16 -0
- package/dist/bundle/chunks/sed-CJFW7UYO.js +1 -0
- package/dist/bundle/chunks/sleep-TFDNFOXK.js +1 -0
- package/dist/bundle/chunks/{sort-T7TNLWXL.js → sort-DCNRDA7U.js} +1 -1
- package/dist/bundle/chunks/sqlite3-CTI4ZW7L.js +1 -0
- package/dist/bundle/chunks/{tar-E2DVQEWO.js → tar-Y6LP5EBC.js} +1 -1
- package/dist/bundle/chunks/time-WBKSMCJ6.js +1 -0
- package/dist/bundle/chunks/timeout-O7WSXY5H.js +1 -0
- package/dist/bundle/chunks/tr-GVTWMRZB.js +1 -0
- package/dist/bundle/chunks/{uniq-ZXE4O5XB.js → uniq-SUNANL47.js} +1 -1
- package/dist/bundle/chunks/worker.js +92 -29
- package/dist/bundle/chunks/xan-VMLUNIDS.js +1 -0
- package/dist/bundle/chunks/yq-QXIYE3MW.js +1 -0
- package/dist/bundle/index.cjs +852 -852
- package/dist/bundle/index.js +242 -242
- package/dist/commands/awk/interpreter/context.d.ts +2 -0
- package/dist/commands/awk/interpreter/interpreter.d.ts +2 -0
- package/dist/commands/query-engine/evaluator.d.ts +3 -0
- package/dist/interpreter/defense-aware-command-context.d.ts +6 -0
- package/dist/interpreter/interpreter.d.ts +8 -0
- package/dist/interpreter/types.d.ts +5 -0
- package/dist/timers.d.ts +2 -11
- package/dist/types.d.ts +13 -0
- package/package.json +1 -1
- package/dist/bin/chunks/awk2-ZE5HJBNV.js +0 -2
- package/dist/bin/chunks/chunk-2FFXXW3F.js +0 -14
- package/dist/bin/chunks/chunk-4E3LY6YK.js +0 -10
- package/dist/bin/chunks/chunk-4FNW6LFM.js +0 -5
- package/dist/bin/chunks/chunk-4PZYIYYG.js +0 -36
- package/dist/bin/chunks/chunk-6L4K3UGO.js +0 -100
- package/dist/bin/chunks/chunk-EPIOK4SY.js +0 -6
- package/dist/bin/chunks/chunk-IYZRLSTQ.js +0 -2
- package/dist/bin/chunks/chunk-JJHAWOIB.js +0 -2
- package/dist/bin/chunks/chunk-K47SEEPI.js +0 -6
- package/dist/bin/chunks/chunk-KPWFKFSD.js +0 -21
- package/dist/bin/chunks/chunk-RYXW3SZQ.js +0 -13
- package/dist/bin/chunks/chunk-VZKEP45B.js +0 -21
- package/dist/bin/chunks/expr-MLHUWFYI.js +0 -2
- package/dist/bin/chunks/flag-coverage-LQ37DA4R.js +0 -2
- package/dist/bin/chunks/jq-CXSPO2J5.js +0 -2
- package/dist/bin/chunks/ln-5TCJXDGY.js +0 -2
- package/dist/bin/chunks/python3-74B25WCY.js +0 -17
- package/dist/bin/chunks/sed-DNLJZZXZ.js +0 -2
- package/dist/bin/chunks/sleep-GUJH2AMQ.js +0 -2
- package/dist/bin/chunks/sqlite3-57UI7HYL.js +0 -2
- package/dist/bin/chunks/time-FAWHHOMA.js +0 -2
- package/dist/bin/chunks/timeout-4O4YYRTS.js +0 -2
- package/dist/bin/chunks/tr-4V5A3V2C.js +0 -2
- package/dist/bin/chunks/xan-7NIVZ3HP.js +0 -2
- package/dist/bin/chunks/yq-L5ZSGLLO.js +0 -2
- package/dist/bin/shell/chunks/awk2-ZE5HJBNV.js +0 -2
- package/dist/bin/shell/chunks/chunk-2FFXXW3F.js +0 -14
- package/dist/bin/shell/chunks/chunk-4E3LY6YK.js +0 -10
- package/dist/bin/shell/chunks/chunk-4FNW6LFM.js +0 -5
- package/dist/bin/shell/chunks/chunk-4PZYIYYG.js +0 -36
- package/dist/bin/shell/chunks/chunk-6L4K3UGO.js +0 -100
- package/dist/bin/shell/chunks/chunk-EPIOK4SY.js +0 -6
- package/dist/bin/shell/chunks/chunk-IYZRLSTQ.js +0 -2
- package/dist/bin/shell/chunks/chunk-JJHAWOIB.js +0 -2
- package/dist/bin/shell/chunks/chunk-K47SEEPI.js +0 -6
- package/dist/bin/shell/chunks/chunk-KPWFKFSD.js +0 -21
- package/dist/bin/shell/chunks/chunk-RYXW3SZQ.js +0 -13
- package/dist/bin/shell/chunks/chunk-VZKEP45B.js +0 -21
- package/dist/bin/shell/chunks/expr-MLHUWFYI.js +0 -2
- package/dist/bin/shell/chunks/flag-coverage-LQ37DA4R.js +0 -2
- package/dist/bin/shell/chunks/jq-CXSPO2J5.js +0 -2
- package/dist/bin/shell/chunks/ln-5TCJXDGY.js +0 -2
- package/dist/bin/shell/chunks/python3-74B25WCY.js +0 -17
- package/dist/bin/shell/chunks/sed-DNLJZZXZ.js +0 -2
- package/dist/bin/shell/chunks/sleep-GUJH2AMQ.js +0 -2
- package/dist/bin/shell/chunks/sqlite3-57UI7HYL.js +0 -2
- package/dist/bin/shell/chunks/time-FAWHHOMA.js +0 -2
- package/dist/bin/shell/chunks/timeout-4O4YYRTS.js +0 -2
- package/dist/bin/shell/chunks/tr-4V5A3V2C.js +0 -2
- package/dist/bin/shell/chunks/xan-7NIVZ3HP.js +0 -2
- package/dist/bin/shell/chunks/yq-L5ZSGLLO.js +0 -2
- package/dist/bundle/chunks/awk2-T6LHPVZE.js +0 -1
- package/dist/bundle/chunks/chunk-5BFLZVGH.js +0 -20
- package/dist/bundle/chunks/chunk-7DBA735O.js +0 -5
- package/dist/bundle/chunks/chunk-7KHLIOOW.js +0 -4
- package/dist/bundle/chunks/chunk-AOFQVUAD.js +0 -99
- package/dist/bundle/chunks/chunk-BAAVD5NO.js +0 -20
- package/dist/bundle/chunks/chunk-BEFDX7IY.js +0 -1
- package/dist/bundle/chunks/chunk-KPFCTJEX.js +0 -12
- package/dist/bundle/chunks/chunk-LN5KAJOV.js +0 -5
- package/dist/bundle/chunks/chunk-NBAARP4B.js +0 -1
- package/dist/bundle/chunks/chunk-RHOPHAL6.js +0 -35
- package/dist/bundle/chunks/chunk-SL4FN3A5.js +0 -9
- package/dist/bundle/chunks/chunk-YIY2RKBW.js +0 -13
- package/dist/bundle/chunks/expr-3572LAOT.js +0 -1
- package/dist/bundle/chunks/flag-coverage-MPLWXQQK.js +0 -1
- package/dist/bundle/chunks/jq-MYSLFARY.js +0 -1
- package/dist/bundle/chunks/ln-YAIFIHCT.js +0 -1
- package/dist/bundle/chunks/python3-6BKA3FYA.js +0 -16
- package/dist/bundle/chunks/sed-3ZCNFRHI.js +0 -1
- package/dist/bundle/chunks/sleep-LB7FI6AB.js +0 -1
- package/dist/bundle/chunks/sqlite3-FVNA4KNF.js +0 -1
- package/dist/bundle/chunks/time-AGNW2ZY6.js +0 -1
- package/dist/bundle/chunks/timeout-VN35D5O7.js +0 -1
- package/dist/bundle/chunks/tr-2N7Q3KKJ.js +0 -1
- package/dist/bundle/chunks/xan-VTO4FP3H.js +0 -1
- package/dist/bundle/chunks/yq-JRZFRYSK.js +0 -1
package/dist/bundle/index.js
CHANGED
|
@@ -1,157 +1,157 @@
|
|
|
1
|
-
import{B as Ir,C as Rr,D as de,E as qe,F as te,G as Se,H as Rt,I as Lr,J as I,K as Fr,L as Mr,M as Ce,N as Es,O as Lt,P as H,a as kr,b as ms,c as Cr,d as Tt,e as J,f as B,g as fe,h as re,i as ke,j as ze,k as ys,l as It,m as _r,n as gs,o as Nr,p as we,q as Te,r as Or,s as xr,t as ws,u as vs,v as We,w as Dr,x as Tr,y as $e,z as bs}from"./chunks/chunk-4VCAQZKQ.js";import{a as Me,b as W,c as De,d as Ot,e as xt,f as Dt,g as z,h as Ar}from"./chunks/chunk-BEFDX7IY.js";import{a as At,b as Ae}from"./chunks/chunk-7KHLIOOW.js";import{a as St,b as Pt,e as hs}from"./chunks/chunk-NBAARP4B.js";import{a as ps}from"./chunks/chunk-IPJHKYVM.js";import{a as Fe,b as ge}from"./chunks/chunk-OJDRYQWQ.js";import{a as dt}from"./chunks/chunk-YNYSPYQ5.js";import{a as pe,b as me,c as ue,d as ye,e as Sr,f as j,g as He,h as kt,i as Ct,j as Pr,k as Q,l as _t,m as Le,n as Nt,o as Ee}from"./chunks/chunk-GFQRA5P5.js";import"./chunks/chunk-NUFRM6SI.js";import{a as xe}from"./chunks/chunk-44UOCSGV.js";import"./chunks/chunk-DXB73IDG.js";var Ze=[{name:"echo",load:async()=>(await import("./chunks/echo-O45JWWI2.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-C2OBLGHA.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-CX64KX2P.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-KSXFZCWH.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-QWGXDWUS.js")).mkdirCommand},{name:"rmdir",load:async()=>(await import("./chunks/rmdir-XTQXT7RK.js")).rmdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-DX2IJOQ4.js")).touchCommand},{name:"rm",load:async()=>(await import("./chunks/rm-KPTLPKPH.js")).rmCommand},{name:"cp",load:async()=>(await import("./chunks/cp-XOYR4ABJ.js")).cpCommand},{name:"mv",load:async()=>(await import("./chunks/mv-Z6MORUFL.js")).mvCommand},{name:"ln",load:async()=>(await import("./chunks/ln-YAIFIHCT.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-MIKE3OIT.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-D4OZ7N27.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-IEQO24KU.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-HT2B6D2J.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-S5ULNTJU.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-TQB3VNOX.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-74KBZFAX.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-LXKUQUAE.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-LXKUQUAE.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-LXKUQUAE.js")).egrepCommand},{name:"rg",load:async()=>(await import("./chunks/rg-RAICUFGG.js")).rgCommand},{name:"sed",load:async()=>(await import("./chunks/sed-3ZCNFRHI.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-T6LHPVZE.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-T7TNLWXL.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-ZXE4O5XB.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-5SLSESQG.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-LO6YYY5P.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-7N6AFSDS.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-2N7Q3KKJ.js")).trCommand},{name:"rev",load:async()=>(await import("./chunks/rev-XOSYPP45.js")).rev},{name:"nl",load:async()=>(await import("./chunks/nl-U5YJDM32.js")).nl},{name:"fold",load:async()=>(await import("./chunks/fold-LDSORVYE.js")).fold},{name:"expand",load:async()=>(await import("./chunks/expand-DTNXU4LQ.js")).expand},{name:"unexpand",load:async()=>(await import("./chunks/unexpand-RGTMIGZM.js")).unexpand},{name:"strings",load:async()=>(await import("./chunks/strings-7PLOGTPD.js")).strings},{name:"split",load:async()=>(await import("./chunks/split-SITCSYCZ.js")).split},{name:"column",load:async()=>(await import("./chunks/column-WLPMMSTS.js")).column},{name:"join",load:async()=>(await import("./chunks/join-GG2LDHE5.js")).join},{name:"tee",load:async()=>(await import("./chunks/tee-O7VXZDCO.js")).teeCommand},{name:"find",load:async()=>(await import("./chunks/find-DQFMWHAC.js")).findCommand},{name:"basename",load:async()=>(await import("./chunks/basename-AA2KJYZQ.js")).basenameCommand},{name:"dirname",load:async()=>(await import("./chunks/dirname-LEMTZZFS.js")).dirnameCommand},{name:"tree",load:async()=>(await import("./chunks/tree-LYXBS7DC.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-WO2ENHXQ.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-XZY4LKEO.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-XZY4LKEO.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-JE7RI5QX.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-JE7RI5QX.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-J4QRNGRO.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-2BBAQDTC.js")).xargsCommand},{name:"true",load:async()=>(await import("./chunks/true-WHJNXCHG.js")).trueCommand},{name:"false",load:async()=>(await import("./chunks/true-WHJNXCHG.js")).falseCommand},{name:"clear",load:async()=>(await import("./chunks/clear-5CZ5X4YR.js")).clearCommand},{name:"bash",load:async()=>(await import("./chunks/bash-IJWYRKFO.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-IJWYRKFO.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-MYSLFARY.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-A3SGWC34.js")).base64Command},{name:"diff",load:async()=>(await import("./chunks/diff-HJF2MPDN.js")).diffCommand},{name:"date",load:async()=>(await import("./chunks/date-DD7FVA2V.js")).dateCommand},{name:"sleep",load:async()=>(await import("./chunks/sleep-LB7FI6AB.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-VN35D5O7.js")).timeoutCommand},{name:"time",load:async()=>(await import("./chunks/time-AGNW2ZY6.js")).timeCommand},{name:"seq",load:async()=>(await import("./chunks/seq-RN5ZUASB.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-3572LAOT.js")).exprCommand},{name:"md5sum",load:async()=>(await import("./chunks/md5sum-INMIK4DX.js")).md5sumCommand},{name:"sha1sum",load:async()=>(await import("./chunks/sha1sum-VJPNLNU6.js")).sha1sumCommand},{name:"sha256sum",load:async()=>(await import("./chunks/sha256sum-PI32XWXY.js")).sha256sumCommand},{name:"file",load:async()=>(await import("./chunks/file-ZIGAJ4YS.js")).fileCommand},{name:"html-to-markdown",load:async()=>(await import("./chunks/html-to-markdown-TFCECAGV.js")).htmlToMarkdownCommand},{name:"help",load:async()=>(await import("./chunks/help-IA5CMGR4.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-XZHEH76L.js")).whichCommand},{name:"tac",load:async()=>(await import("./chunks/tac-SJGXQ4T2.js")).tac},{name:"hostname",load:async()=>(await import("./chunks/hostname-BK6HG2DE.js")).hostname},{name:"whoami",load:async()=>(await import("./chunks/whoami-DGKU3D2X.js")).whoami},{name:"od",load:async()=>(await import("./chunks/od-VJEF2UR5.js")).od},{name:"gzip",load:async()=>(await import("./chunks/gzip-Y4N2UKE7.js")).gzipCommand},{name:"gunzip",load:async()=>(await import("./chunks/gzip-Y4N2UKE7.js")).gunzipCommand},{name:"zcat",load:async()=>(await import("./chunks/gzip-Y4N2UKE7.js")).zcatCommand}];(typeof __BROWSER__>"u"||!__BROWSER__)&&(Ze.push({name:"tar",load:async()=>(await import("./chunks/tar-E2DVQEWO.js")).tarCommand}),Ze.push({name:"yq",load:async()=>(await import("./chunks/yq-JRZFRYSK.js")).yqCommand}),Ze.push({name:"xan",load:async()=>(await import("./chunks/xan-VTO4FP3H.js")).xanCommand}),Ze.push({name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-FVNA4KNF.js")).sqlite3Command}));var Ft=[];(typeof __BROWSER__>"u"||!__BROWSER__)&&(Ft.push({name:"python3",load:async()=>(await import("./chunks/python3-6BKA3FYA.js")).python3Command}),Ft.push({name:"python",load:async()=>(await import("./chunks/python3-6BKA3FYA.js")).pythonCommand}));var Wr=[{name:"curl",load:async()=>(await import("./chunks/curl-6L7YZUIH.js")).curlCommand}],zr=new Map;function $s(e){return{name:e.name,async execute(t,s){let r=zr.get(e.name);if(r||(r=await Ae.runTrustedAsync(()=>e.load()),zr.set(e.name,r)),s.coverage&&(typeof __BROWSER__>"u"||!__BROWSER__)){let{emitFlagCoverage:n}=await import("./chunks/flag-coverage-MPLWXQQK.js");n(s.coverage,e.name,t)}return r.execute(t,s)}}}function Ni(){return Ze.map(e=>e.name)}function Oi(){return Wr.map(e=>e.name)}function Vr(e){return(e?Ze.filter(s=>e.includes(s.name)):Ze).map($s)}function Br(){return Wr.map($s)}function xi(){return Ft.map(e=>e.name)}function jr(){return Ft.map($s)}function Ur(e){return"load"in e&&typeof e.load=="function"}function Di(e,t){return{name:e,trusted:!0,execute:t}}function Hr(e){let t=null;return{name:e.name,trusted:!0,async execute(s,r){return t||(t=await e.load()),t.execute(s,r)}}}var Ti=new TextEncoder,Ii=new TextDecoder;function Ie(e,t){if(e instanceof Uint8Array)return e;if(t==="base64")return Uint8Array.from(atob(e),s=>s.charCodeAt(0));if(t==="hex"){let s=new Uint8Array(e.length/2);for(let r=0;r<e.length;r+=2)s[r/2]=parseInt(e.slice(r,r+2),16);return s}if(t==="binary"||t==="latin1"){if(e.length<=65536)return Uint8Array.from(e,n=>n.charCodeAt(0));let r=new Uint8Array(e.length);for(let n=0;n<e.length;n++)r[n]=e.charCodeAt(n);return r}return Ti.encode(e)}function Je(e,t){if(t==="base64"){if(typeof Buffer<"u")return Buffer.from(e).toString("base64");let s=65536,r="";for(let n=0;n<e.length;n+=s){let i=e.subarray(n,n+s);r+=String.fromCharCode(...i)}return btoa(r)}if(t==="hex")return Array.from(e).map(s=>s.toString(16).padStart(2,"0")).join("");if(t==="binary"||t==="latin1"){if(typeof Buffer<"u")return Buffer.from(e).toString(t);let s=65536;if(e.length<=s)return String.fromCharCode(...e);let r="";for(let n=0;n<e.length;n+=s){let i=e.subarray(n,n+s);r+=String.fromCharCode(...i)}return r}return Ii.decode(e)}function ve(e){if(e!=null)return typeof e=="string"?e:e.encoding??void 0}var et=new TextEncoder;function Ri(e){return typeof e=="object"&&e!==null&&!(e instanceof Uint8Array)&&"content"in e}function ne(e,t){if(e.includes("\0"))throw new Error(`ENOENT: path contains null byte, ${t} '${e}'`)}var Re=class{data=new Map;constructor(t){if(this.data.set("/",{type:"directory",mode:493,mtime:new Date}),t)for(let[s,r]of Object.entries(t))typeof r=="function"?this.writeFileLazy(s,r):Ri(r)?this.writeFileSync(s,r.content,void 0,{mode:r.mode,mtime:r.mtime}):this.writeFileSync(s,r)}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let r=s.split("/").filter(i=>i&&i!=="."),n=[];for(let i of r)i===".."?n.pop():n.push(i);return`/${n.join("/")}`||"/"}dirname(t){let s=this.normalizePath(t);if(s==="/")return"/";let r=s.lastIndexOf("/");return r===0?"/":s.slice(0,r)}ensureParentDirs(t){let s=this.dirname(t);s!=="/"&&(this.data.has(s)||(this.ensureParentDirs(s),this.data.set(s,{type:"directory",mode:493,mtime:new Date})))}writeFileSync(t,s,r,n){ne(t,"write");let i=this.normalizePath(t);this.ensureParentDirs(i);let o=ve(r),a=Ie(s,o);this.data.set(i,{type:"file",content:a,mode:n?.mode??420,mtime:n?.mtime??new Date})}writeFileLazy(t,s,r){ne(t,"write");let n=this.normalizePath(t);this.ensureParentDirs(n),this.data.set(n,{type:"file",lazy:s,mode:r?.mode??420,mtime:r?.mtime??new Date})}async materializeLazy(t,s){let r=await s.lazy(),i={type:"file",content:typeof r=="string"?et.encode(r):r,mode:s.mode,mtime:s.mtime};return this.data.set(t,i),i}async readFile(t,s){let r=await this.readFileBuffer(t),n=ve(s);return Je(r,n)}async readFileBuffer(t){ne(t,"open");let s=this.resolvePathWithSymlinks(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, open '${t}'`);if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);if("lazy"in r){let n=await this.materializeLazy(s,r);return n.content instanceof Uint8Array?n.content:et.encode(n.content)}return r.content instanceof Uint8Array?r.content:et.encode(r.content)}async writeFile(t,s,r){this.writeFileSync(t,s,r)}async appendFile(t,s,r){ne(t,"append");let n=this.normalizePath(t),i=this.data.get(n);if(i&&i.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${t}'`);let o=ve(r),a=Ie(s,o);if(i?.type==="file"){let l=i;"lazy"in l&&(l=await this.materializeLazy(n,l));let c="content"in l&&l.content instanceof Uint8Array?l.content:et.encode("content"in l?l.content:""),u=new Uint8Array(c.length+a.length);u.set(c),u.set(a,c.length),this.data.set(n,{type:"file",content:u,mode:l.mode,mtime:new Date})}else this.writeFileSync(t,s,r)}async exists(t){if(t.includes("\0"))return!1;try{let s=this.resolvePathWithSymlinks(t);return this.data.has(s)}catch{return!1}}async stat(t){ne(t,"stat");let s=this.resolvePathWithSymlinks(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);r.type==="file"&&"lazy"in r&&(r=await this.materializeLazy(s,r));let n=0;return r.type==="file"&&"content"in r&&r.content&&(r.content instanceof Uint8Array?n=r.content.length:n=et.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:n,mtime:r.mtime||new Date}}async lstat(t){ne(t,"lstat");let s=this.resolveIntermediateSymlinks(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime||new Date};r.type==="file"&&"lazy"in r&&(r=await this.materializeLazy(s,r));let n=0;return r.type==="file"&&"content"in r&&r.content&&(r.content instanceof Uint8Array?n=r.content.length:n=et.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:n,mtime:r.mtime||new Date}}resolveSymlink(t,s){if(s.startsWith("/"))return this.normalizePath(s);let r=this.dirname(t);return this.normalizePath(r==="/"?`/${s}`:`${r}/${s}`)}resolveIntermediateSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let r=s.slice(1).split("/");if(r.length<=1)return s;let n="",i=new Set;for(let o=0;o<r.length-1;o++){let a=r[o];n=`${n}/${a}`;let l=this.data.get(n),c=0,u=40;for(;l&&l.type==="symlink"&&c<u;){if(i.has(n))throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`);i.add(n),n=this.resolveSymlink(n,l.target),l=this.data.get(n),c++}if(c>=u)throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`)}return`${n}/${r[r.length-1]}`}resolvePathWithSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let r=s.slice(1).split("/"),n="",i=new Set;for(let o of r){n=`${n}/${o}`;let a=this.data.get(n),l=0,c=40;for(;a&&a.type==="symlink"&&l<c;){if(i.has(n))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);i.add(n),n=this.resolveSymlink(n,a.target),a=this.data.get(n),l++}if(l>=c)throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`)}return n}async mkdir(t,s){this.mkdirSync(t,s)}mkdirSync(t,s){ne(t,"mkdir");let r=this.normalizePath(t);if(this.data.has(r)){if(this.data.get(r)?.type==="file")throw new Error(`EEXIST: file already exists, mkdir '${t}'`);if(!s?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${t}'`);return}let n=this.dirname(r);if(n!=="/"&&!this.data.has(n))if(s?.recursive)this.mkdirSync(n,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.data.set(r,{type:"directory",mode:493,mtime:new Date})}async readdir(t){return(await this.readdirWithFileTypes(t)).map(r=>r.name)}async readdirWithFileTypes(t){ne(t,"scandir");let s=this.normalizePath(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let n=new Set;for(;r&&r.type==="symlink";){if(n.has(s))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);n.add(s),s=this.resolveSymlink(s,r.target),r=this.data.get(s)}if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${t}'`);let i=s==="/"?"/":`${s}/`,o=new Map;for(let[a,l]of this.data.entries())if(a!==s&&a.startsWith(i)){let c=a.slice(i.length),u=c.split("/")[0];u&&!c.includes("/",u.length)&&!o.has(u)&&o.set(u,{name:u,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}return Array.from(o.values()).sort((a,l)=>a.name<l.name?-1:a.name>l.name?1:0)}async rm(t,s){ne(t,"rm");let r=this.normalizePath(t),n=this.data.get(r);if(!n){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}if(n.type==="directory"){let i=await this.readdir(r);if(i.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let o of i){let a=r==="/"?`/${o}`:`${r}/${o}`;await this.rm(a,s)}}}this.data.delete(r)}async cp(t,s,r){ne(t,"cp"),ne(s,"cp");let n=this.normalizePath(t),i=this.normalizePath(s),o=this.data.get(n);if(!o)throw new Error(`ENOENT: no such file or directory, cp '${t}'`);if(o.type==="file")if(this.ensureParentDirs(i),"content"in o){let a=o.content instanceof Uint8Array?new Uint8Array(o.content):o.content;this.data.set(i,{...o,content:a})}else this.data.set(i,{...o});else if(o.type==="symlink")this.ensureParentDirs(i),this.data.set(i,{...o});else if(o.type==="directory"){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let a=await this.readdir(n);for(let l of a){let c=n==="/"?`/${l}`:`${n}/${l}`,u=i==="/"?`/${l}`:`${i}/${l}`;await this.cp(c,u,r)}}}async mv(t,s){await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(t,s){if(s.startsWith("/"))return this.normalizePath(s);let r=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(r)}async chmod(t,s){ne(t,"chmod");let r=this.normalizePath(t),n=this.data.get(r);if(!n)throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);n.mode=s}async symlink(t,s){ne(s,"symlink");let r=this.normalizePath(s);if(this.data.has(r))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(r),this.data.set(r,{type:"symlink",target:t,mode:511,mtime:new Date})}async link(t,s){ne(t,"link"),ne(s,"link");let r=this.normalizePath(t),n=this.normalizePath(s),i=this.data.get(r);if(!i)throw new Error(`ENOENT: no such file or directory, link '${t}'`);if(i.type!=="file")throw new Error(`EPERM: operation not permitted, link '${t}'`);if(this.data.has(n))throw new Error(`EEXIST: file already exists, link '${s}'`);let o=i;"lazy"in o&&(o=await this.materializeLazy(r,o)),this.ensureParentDirs(n),this.data.set(n,{type:"file",content:o.content,mode:o.mode,mtime:o.mtime})}async readlink(t){ne(t,"readlink");let s=this.normalizePath(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return r.target}async realpath(t){ne(t,"realpath");let s=this.resolvePathWithSymlinks(t);if(!this.data.has(s))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);return s}async utimes(t,s,r){ne(t,"utimes");let n=this.normalizePath(t),i=this.resolvePathWithSymlinks(n),o=this.data.get(i);if(!o)throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);o.mtime=r}};function Li(e){let t=e;return typeof t.mkdirSync=="function"&&typeof t.writeFileSync=="function"}function Fi(e,t){e.mkdirSync("/bin",{recursive:!0}),e.mkdirSync("/usr/bin",{recursive:!0}),t&&(e.mkdirSync("/home/user",{recursive:!0}),e.mkdirSync("/tmp",{recursive:!0}))}function Mi(e){e.mkdirSync("/dev",{recursive:!0}),e.writeFileSync("/dev/null",""),e.writeFileSync("/dev/zero",new Uint8Array(0)),e.writeFileSync("/dev/stdin",""),e.writeFileSync("/dev/stdout",""),e.writeFileSync("/dev/stderr","")}function zi(e,t){e.mkdirSync("/proc/self/fd",{recursive:!0}),e.writeFileSync("/proc/version",`${kr}
|
|
1
|
+
import{B as Mr,C as zr,D as de,E as Ge,F as se,G as Pe,H as Mt,I as Wr,J as I,K as Vr,L as Br,M as Ce,N as Ps,O as zt,P as H,a as Or,b as ws,c as xr,d as Lt,e as ee,f as B,g as fe,h as re,i as ke,j as Ve,k as vs,l as Ft,m as Dr,n as bs,o as Tr,p as ve,q as Te,r as Ir,s as Rr,t as Es,u as $s,v as Be,w as Lr,x as Fr,y as Se,z as Ss}from"./chunks/chunk-4VCAQZKQ.js";import{a as W,b as De,c as Tt,d as It,e as Rt,f as z,g as Nr}from"./chunks/chunk-GENDESYN.js";import{a as Ct,b as _t,e as ys}from"./chunks/chunk-ZK6J6F7O.js";import{a as gs}from"./chunks/chunk-IPJHKYVM.js";import{a as We,b as we,c as yt}from"./chunks/chunk-OJDRYQWQ.js";import{a as mt,b as _r}from"./chunks/chunk-T2EHE3CV.js";import{a as Fe,b as pe}from"./chunks/chunk-3RCXHB4E.js";import{a as pt}from"./chunks/chunk-YNYSPYQ5.js";import{a as ze}from"./chunks/chunk-CCNMISUL.js";import{a as me,b as ye,c as ue,d as ge,e as kr,f as j,g as qe,h as Nt,i as Ot,j as Cr,k as J,l as xt,m as Me,n as Dt,o as $e}from"./chunks/chunk-GFQRA5P5.js";import"./chunks/chunk-NUFRM6SI.js";import{a as xe}from"./chunks/chunk-44UOCSGV.js";import"./chunks/chunk-DXB73IDG.js";var Ke=[{name:"echo",load:async()=>(await import("./chunks/echo-O45JWWI2.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-RDUMLXKC.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-CX64KX2P.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-KSXFZCWH.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-QWGXDWUS.js")).mkdirCommand},{name:"rmdir",load:async()=>(await import("./chunks/rmdir-XTQXT7RK.js")).rmdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-DX2IJOQ4.js")).touchCommand},{name:"rm",load:async()=>(await import("./chunks/rm-KPTLPKPH.js")).rmCommand},{name:"cp",load:async()=>(await import("./chunks/cp-XOYR4ABJ.js")).cpCommand},{name:"mv",load:async()=>(await import("./chunks/mv-Z6MORUFL.js")).mvCommand},{name:"ln",load:async()=>(await import("./chunks/ln-RI2SJGXU.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-MIKE3OIT.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-D4OZ7N27.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-IEQO24KU.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-HT2B6D2J.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-S5ULNTJU.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-TQB3VNOX.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-74KBZFAX.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-LXKUQUAE.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-LXKUQUAE.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-LXKUQUAE.js")).egrepCommand},{name:"rg",load:async()=>(await import("./chunks/rg-RAICUFGG.js")).rgCommand},{name:"sed",load:async()=>(await import("./chunks/sed-CJFW7UYO.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-XLDR2J4Q.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-DCNRDA7U.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-SUNANL47.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-5SLSESQG.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-OPC3VAGB.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-7N6AFSDS.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-GVTWMRZB.js")).trCommand},{name:"rev",load:async()=>(await import("./chunks/rev-XOSYPP45.js")).rev},{name:"nl",load:async()=>(await import("./chunks/nl-U5YJDM32.js")).nl},{name:"fold",load:async()=>(await import("./chunks/fold-LDSORVYE.js")).fold},{name:"expand",load:async()=>(await import("./chunks/expand-DTNXU4LQ.js")).expand},{name:"unexpand",load:async()=>(await import("./chunks/unexpand-RGTMIGZM.js")).unexpand},{name:"strings",load:async()=>(await import("./chunks/strings-7PLOGTPD.js")).strings},{name:"split",load:async()=>(await import("./chunks/split-SITCSYCZ.js")).split},{name:"column",load:async()=>(await import("./chunks/column-WLPMMSTS.js")).column},{name:"join",load:async()=>(await import("./chunks/join-GG2LDHE5.js")).join},{name:"tee",load:async()=>(await import("./chunks/tee-O7VXZDCO.js")).teeCommand},{name:"find",load:async()=>(await import("./chunks/find-DQFMWHAC.js")).findCommand},{name:"basename",load:async()=>(await import("./chunks/basename-AA2KJYZQ.js")).basenameCommand},{name:"dirname",load:async()=>(await import("./chunks/dirname-LEMTZZFS.js")).dirnameCommand},{name:"tree",load:async()=>(await import("./chunks/tree-LYXBS7DC.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-WO2ENHXQ.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-XZY4LKEO.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-XZY4LKEO.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-JE7RI5QX.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-JE7RI5QX.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-J4QRNGRO.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-2BBAQDTC.js")).xargsCommand},{name:"true",load:async()=>(await import("./chunks/true-WHJNXCHG.js")).trueCommand},{name:"false",load:async()=>(await import("./chunks/true-WHJNXCHG.js")).falseCommand},{name:"clear",load:async()=>(await import("./chunks/clear-5CZ5X4YR.js")).clearCommand},{name:"bash",load:async()=>(await import("./chunks/bash-IJWYRKFO.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-IJWYRKFO.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-JQXAVWNT.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-4YMZCVJ5.js")).base64Command},{name:"diff",load:async()=>(await import("./chunks/diff-HJF2MPDN.js")).diffCommand},{name:"date",load:async()=>(await import("./chunks/date-DD7FVA2V.js")).dateCommand},{name:"sleep",load:async()=>(await import("./chunks/sleep-TFDNFOXK.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-O7WSXY5H.js")).timeoutCommand},{name:"time",load:async()=>(await import("./chunks/time-WBKSMCJ6.js")).timeCommand},{name:"seq",load:async()=>(await import("./chunks/seq-RN5ZUASB.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-74QHYJL5.js")).exprCommand},{name:"md5sum",load:async()=>(await import("./chunks/md5sum-INMIK4DX.js")).md5sumCommand},{name:"sha1sum",load:async()=>(await import("./chunks/sha1sum-VJPNLNU6.js")).sha1sumCommand},{name:"sha256sum",load:async()=>(await import("./chunks/sha256sum-PI32XWXY.js")).sha256sumCommand},{name:"file",load:async()=>(await import("./chunks/file-ZIGAJ4YS.js")).fileCommand},{name:"html-to-markdown",load:async()=>(await import("./chunks/html-to-markdown-TFCECAGV.js")).htmlToMarkdownCommand},{name:"help",load:async()=>(await import("./chunks/help-IA5CMGR4.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-XZHEH76L.js")).whichCommand},{name:"tac",load:async()=>(await import("./chunks/tac-SJGXQ4T2.js")).tac},{name:"hostname",load:async()=>(await import("./chunks/hostname-BK6HG2DE.js")).hostname},{name:"whoami",load:async()=>(await import("./chunks/whoami-DGKU3D2X.js")).whoami},{name:"od",load:async()=>(await import("./chunks/od-VJEF2UR5.js")).od},{name:"gzip",load:async()=>(await import("./chunks/gzip-AQXSGOVS.js")).gzipCommand},{name:"gunzip",load:async()=>(await import("./chunks/gzip-AQXSGOVS.js")).gunzipCommand},{name:"zcat",load:async()=>(await import("./chunks/gzip-AQXSGOVS.js")).zcatCommand}];(typeof __BROWSER__>"u"||!__BROWSER__)&&(Ke.push({name:"tar",load:async()=>(await import("./chunks/tar-Y6LP5EBC.js")).tarCommand}),Ke.push({name:"yq",load:async()=>(await import("./chunks/yq-QXIYE3MW.js")).yqCommand}),Ke.push({name:"xan",load:async()=>(await import("./chunks/xan-VMLUNIDS.js")).xanCommand}),Ke.push({name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-CTI4ZW7L.js")).sqlite3Command}));var Wt=[];(typeof __BROWSER__>"u"||!__BROWSER__)&&(Wt.push({name:"python3",load:async()=>(await import("./chunks/python3-TSPOVUHX.js")).python3Command}),Wt.push({name:"python",load:async()=>(await import("./chunks/python3-TSPOVUHX.js")).pythonCommand}));var Ur=[{name:"curl",load:async()=>(await import("./chunks/curl-6L7YZUIH.js")).curlCommand}],jr=new Map;function As(e){return{name:e.name,async execute(t,s){let r=jr.get(e.name);if(r||(r=await pe.runTrustedAsync(()=>e.load()),jr.set(e.name,r)),s.coverage&&(typeof __BROWSER__>"u"||!__BROWSER__)){let{emitFlagCoverage:n}=await import("./chunks/flag-coverage-VGF5NAZP.js");n(s.coverage,e.name,t)}return r.execute(t,s)}}}function Ii(){return Ke.map(e=>e.name)}function Ri(){return Ur.map(e=>e.name)}function Hr(e){return(e?Ke.filter(s=>e.includes(s.name)):Ke).map(As)}function Zr(){return Ur.map(As)}function Li(){return Wt.map(e=>e.name)}function qr(){return Wt.map(As)}function Gr(e){return"load"in e&&typeof e.load=="function"}function Fi(e,t){return{name:e,trusted:!0,execute:t}}function Kr(e){let t=null;return{name:e.name,trusted:!0,async execute(s,r){return t||(t=await e.load()),t.execute(s,r)}}}var Mi=new TextEncoder,zi=new TextDecoder;function Ie(e,t){if(e instanceof Uint8Array)return e;if(t==="base64")return Uint8Array.from(atob(e),s=>s.charCodeAt(0));if(t==="hex"){let s=new Uint8Array(e.length/2);for(let r=0;r<e.length;r+=2)s[r/2]=parseInt(e.slice(r,r+2),16);return s}if(t==="binary"||t==="latin1"){if(e.length<=65536)return Uint8Array.from(e,n=>n.charCodeAt(0));let r=new Uint8Array(e.length);for(let n=0;n<e.length;n++)r[n]=e.charCodeAt(n);return r}return Mi.encode(e)}function tt(e,t){if(t==="base64"){if(typeof Buffer<"u")return Buffer.from(e).toString("base64");let s=65536,r="";for(let n=0;n<e.length;n+=s){let i=e.subarray(n,n+s);r+=String.fromCharCode(...i)}return btoa(r)}if(t==="hex")return Array.from(e).map(s=>s.toString(16).padStart(2,"0")).join("");if(t==="binary"||t==="latin1"){if(typeof Buffer<"u")return Buffer.from(e).toString(t);let s=65536;if(e.length<=s)return String.fromCharCode(...e);let r="";for(let n=0;n<e.length;n+=s){let i=e.subarray(n,n+s);r+=String.fromCharCode(...i)}return r}return zi.decode(e)}function be(e){if(e!=null)return typeof e=="string"?e:e.encoding??void 0}var st=new TextEncoder;function Wi(e){return typeof e=="object"&&e!==null&&!(e instanceof Uint8Array)&&"content"in e}function ne(e,t){if(e.includes("\0"))throw new Error(`ENOENT: path contains null byte, ${t} '${e}'`)}var Re=class{data=new Map;constructor(t){if(this.data.set("/",{type:"directory",mode:493,mtime:new Date}),t)for(let[s,r]of Object.entries(t))typeof r=="function"?this.writeFileLazy(s,r):Wi(r)?this.writeFileSync(s,r.content,void 0,{mode:r.mode,mtime:r.mtime}):this.writeFileSync(s,r)}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let r=s.split("/").filter(i=>i&&i!=="."),n=[];for(let i of r)i===".."?n.pop():n.push(i);return`/${n.join("/")}`||"/"}dirname(t){let s=this.normalizePath(t);if(s==="/")return"/";let r=s.lastIndexOf("/");return r===0?"/":s.slice(0,r)}ensureParentDirs(t){let s=this.dirname(t);s!=="/"&&(this.data.has(s)||(this.ensureParentDirs(s),this.data.set(s,{type:"directory",mode:493,mtime:new Date})))}writeFileSync(t,s,r,n){ne(t,"write");let i=this.normalizePath(t);this.ensureParentDirs(i);let o=be(r),a=Ie(s,o);this.data.set(i,{type:"file",content:a,mode:n?.mode??420,mtime:n?.mtime??new Date})}writeFileLazy(t,s,r){ne(t,"write");let n=this.normalizePath(t);this.ensureParentDirs(n),this.data.set(n,{type:"file",lazy:s,mode:r?.mode??420,mtime:r?.mtime??new Date})}async materializeLazy(t,s){let r=await s.lazy(),i={type:"file",content:typeof r=="string"?st.encode(r):r,mode:s.mode,mtime:s.mtime};return this.data.set(t,i),i}async readFile(t,s){let r=await this.readFileBuffer(t),n=be(s);return tt(r,n)}async readFileBuffer(t){ne(t,"open");let s=this.resolvePathWithSymlinks(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, open '${t}'`);if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);if("lazy"in r){let n=await this.materializeLazy(s,r);return n.content instanceof Uint8Array?n.content:st.encode(n.content)}return r.content instanceof Uint8Array?r.content:st.encode(r.content)}async writeFile(t,s,r){this.writeFileSync(t,s,r)}async appendFile(t,s,r){ne(t,"append");let n=this.normalizePath(t),i=this.data.get(n);if(i&&i.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${t}'`);let o=be(r),a=Ie(s,o);if(i?.type==="file"){let l=i;"lazy"in l&&(l=await this.materializeLazy(n,l));let c="content"in l&&l.content instanceof Uint8Array?l.content:st.encode("content"in l?l.content:""),u=new Uint8Array(c.length+a.length);u.set(c),u.set(a,c.length),this.data.set(n,{type:"file",content:u,mode:l.mode,mtime:new Date})}else this.writeFileSync(t,s,r)}async exists(t){if(t.includes("\0"))return!1;try{let s=this.resolvePathWithSymlinks(t);return this.data.has(s)}catch{return!1}}async stat(t){ne(t,"stat");let s=this.resolvePathWithSymlinks(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);r.type==="file"&&"lazy"in r&&(r=await this.materializeLazy(s,r));let n=0;return r.type==="file"&&"content"in r&&r.content&&(r.content instanceof Uint8Array?n=r.content.length:n=st.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:n,mtime:r.mtime||new Date}}async lstat(t){ne(t,"lstat");let s=this.resolveIntermediateSymlinks(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime||new Date};r.type==="file"&&"lazy"in r&&(r=await this.materializeLazy(s,r));let n=0;return r.type==="file"&&"content"in r&&r.content&&(r.content instanceof Uint8Array?n=r.content.length:n=st.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:n,mtime:r.mtime||new Date}}resolveSymlink(t,s){if(s.startsWith("/"))return this.normalizePath(s);let r=this.dirname(t);return this.normalizePath(r==="/"?`/${s}`:`${r}/${s}`)}resolveIntermediateSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let r=s.slice(1).split("/");if(r.length<=1)return s;let n="",i=new Set;for(let o=0;o<r.length-1;o++){let a=r[o];n=`${n}/${a}`;let l=this.data.get(n),c=0,u=40;for(;l&&l.type==="symlink"&&c<u;){if(i.has(n))throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`);i.add(n),n=this.resolveSymlink(n,l.target),l=this.data.get(n),c++}if(c>=u)throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`)}return`${n}/${r[r.length-1]}`}resolvePathWithSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let r=s.slice(1).split("/"),n="",i=new Set;for(let o of r){n=`${n}/${o}`;let a=this.data.get(n),l=0,c=40;for(;a&&a.type==="symlink"&&l<c;){if(i.has(n))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);i.add(n),n=this.resolveSymlink(n,a.target),a=this.data.get(n),l++}if(l>=c)throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`)}return n}async mkdir(t,s){this.mkdirSync(t,s)}mkdirSync(t,s){ne(t,"mkdir");let r=this.normalizePath(t);if(this.data.has(r)){if(this.data.get(r)?.type==="file")throw new Error(`EEXIST: file already exists, mkdir '${t}'`);if(!s?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${t}'`);return}let n=this.dirname(r);if(n!=="/"&&!this.data.has(n))if(s?.recursive)this.mkdirSync(n,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.data.set(r,{type:"directory",mode:493,mtime:new Date})}async readdir(t){return(await this.readdirWithFileTypes(t)).map(r=>r.name)}async readdirWithFileTypes(t){ne(t,"scandir");let s=this.normalizePath(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let n=new Set;for(;r&&r.type==="symlink";){if(n.has(s))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);n.add(s),s=this.resolveSymlink(s,r.target),r=this.data.get(s)}if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${t}'`);let i=s==="/"?"/":`${s}/`,o=new Map;for(let[a,l]of this.data.entries())if(a!==s&&a.startsWith(i)){let c=a.slice(i.length),u=c.split("/")[0];u&&!c.includes("/",u.length)&&!o.has(u)&&o.set(u,{name:u,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}return Array.from(o.values()).sort((a,l)=>a.name<l.name?-1:a.name>l.name?1:0)}async rm(t,s){ne(t,"rm");let r=this.normalizePath(t),n=this.data.get(r);if(!n){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}if(n.type==="directory"){let i=await this.readdir(r);if(i.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let o of i){let a=r==="/"?`/${o}`:`${r}/${o}`;await this.rm(a,s)}}}this.data.delete(r)}async cp(t,s,r){ne(t,"cp"),ne(s,"cp");let n=this.normalizePath(t),i=this.normalizePath(s),o=this.data.get(n);if(!o)throw new Error(`ENOENT: no such file or directory, cp '${t}'`);if(o.type==="file")if(this.ensureParentDirs(i),"content"in o){let a=o.content instanceof Uint8Array?new Uint8Array(o.content):o.content;this.data.set(i,{...o,content:a})}else this.data.set(i,{...o});else if(o.type==="symlink")this.ensureParentDirs(i),this.data.set(i,{...o});else if(o.type==="directory"){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let a=await this.readdir(n);for(let l of a){let c=n==="/"?`/${l}`:`${n}/${l}`,u=i==="/"?`/${l}`:`${i}/${l}`;await this.cp(c,u,r)}}}async mv(t,s){await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(t,s){if(s.startsWith("/"))return this.normalizePath(s);let r=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(r)}async chmod(t,s){ne(t,"chmod");let r=this.normalizePath(t),n=this.data.get(r);if(!n)throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);n.mode=s}async symlink(t,s){ne(s,"symlink");let r=this.normalizePath(s);if(this.data.has(r))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(r),this.data.set(r,{type:"symlink",target:t,mode:511,mtime:new Date})}async link(t,s){ne(t,"link"),ne(s,"link");let r=this.normalizePath(t),n=this.normalizePath(s),i=this.data.get(r);if(!i)throw new Error(`ENOENT: no such file or directory, link '${t}'`);if(i.type!=="file")throw new Error(`EPERM: operation not permitted, link '${t}'`);if(this.data.has(n))throw new Error(`EEXIST: file already exists, link '${s}'`);let o=i;"lazy"in o&&(o=await this.materializeLazy(r,o)),this.ensureParentDirs(n),this.data.set(n,{type:"file",content:o.content,mode:o.mode,mtime:o.mtime})}async readlink(t){ne(t,"readlink");let s=this.normalizePath(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return r.target}async realpath(t){ne(t,"realpath");let s=this.resolvePathWithSymlinks(t);if(!this.data.has(s))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);return s}async utimes(t,s,r){ne(t,"utimes");let n=this.normalizePath(t),i=this.resolvePathWithSymlinks(n),o=this.data.get(i);if(!o)throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);o.mtime=r}};function Vi(e){let t=e;return typeof t.mkdirSync=="function"&&typeof t.writeFileSync=="function"}function Bi(e,t){e.mkdirSync("/bin",{recursive:!0}),e.mkdirSync("/usr/bin",{recursive:!0}),t&&(e.mkdirSync("/home/user",{recursive:!0}),e.mkdirSync("/tmp",{recursive:!0}))}function ji(e){e.mkdirSync("/dev",{recursive:!0}),e.writeFileSync("/dev/null",""),e.writeFileSync("/dev/zero",new Uint8Array(0)),e.writeFileSync("/dev/stdin",""),e.writeFileSync("/dev/stdout",""),e.writeFileSync("/dev/stderr","")}function Ui(e,t){e.mkdirSync("/proc/self/fd",{recursive:!0}),e.writeFileSync("/proc/version",`${Or}
|
|
2
2
|
`),e.writeFileSync("/proc/self/exe","/bin/bash"),e.writeFileSync("/proc/self/cmdline","bash\0"),e.writeFileSync("/proc/self/comm",`bash
|
|
3
|
-
`),e.writeFileLazy?e.writeFileLazy("/proc/self/status",()=>
|
|
3
|
+
`),e.writeFileLazy?e.writeFileLazy("/proc/self/status",()=>ws(t)):e.writeFileSync("/proc/self/status",ws(t)),e.writeFileSync("/proc/self/fd/0","/dev/stdin"),e.writeFileSync("/proc/self/fd/1","/dev/stdout"),e.writeFileSync("/proc/self/fd/2","/dev/stderr")}function Xr(e,t,s={pid:1,ppid:0,uid:1e3,gid:1e3}){Vi(e)&&(Bi(e,t),ji(e),Ui(e,s))}var Hi=["allexport","errexit","noglob","noclobber","noexec","nounset","pipefail","posix","verbose","xtrace"],Zi=["braceexpand","hashall","interactive-comments"];function ks(e){let t=[],s=[...Zi.map(r=>({name:r,enabled:!0})),...Hi.map(r=>({name:r,enabled:e[r]}))].sort((r,n)=>r.name.localeCompare(n.name));for(let r of s)r.enabled&&t.push(r.name);return t.join(":")}function rt(e){e.state.env.set("SHELLOPTS",ks(e.state.options))}var qi=["dotglob","expand_aliases","extglob","failglob","globskipdots","globstar","lastpipe","nocaseglob","nocasematch","nullglob","xpg_echo"];function Cs(e){let t=[];for(let s of qi)e[s]&&t.push(s);return t.join(":")}function _s(e){e.state.env.set("BASHOPTS",Cs(e.state.shoptOptions))}var Gi="BASH_ALIAS_";function Yr(e){return e.parts.length!==1?!1:e.parts[0].type==="Literal"}function Qr(e){if(e.parts.length!==1)return null;let t=e.parts[0];return t.type==="Literal"?t.value:null}function Jr(e,t){return e.env.get(`${Gi}${t}`)}function Ns(e,t,s){if(!t.name||!Yr(t.name))return t;let r=Qr(t.name);if(!r)return t;let n=Jr(e,r);if(!n||s.has(r))return t;try{s.add(r);let i=new B,o=n,a=n.endsWith(" ");if(!a)for(let f of t.args){let d=tn(f);o+=` ${d}`}let l;try{l=i.parse(o)}catch(f){if(f instanceof Lt)throw f;return t}if(l.statements.length!==1||l.statements[0].pipelines.length!==1||l.statements[0].pipelines[0].commands.length!==1)return en(t,n);let c=l.statements[0].pipelines[0].commands[0];if(c.type!=="SimpleCommand")return en(t,n);let u={...c,assignments:[...t.assignments,...c.assignments],redirections:[...c.redirections,...t.redirections],line:t.line};if(a&&t.args.length>0&&(u={...u,args:[...u.args,...t.args]},u.args.length>0)){let f=u.args[0];if(Yr(f)){let d=Qr(f);if(d&&Jr(e,d)){let p={type:"SimpleCommand",name:f,args:u.args.slice(1),assignments:[],redirections:[]},y=Ns(e,p,s);y!==p&&(u={...u,name:y.name,args:[...y.args]})}}}return u}catch(i){throw s.delete(r),i}}function en(e,t){let s=t;for(let o of e.args){let a=tn(o);s+=` ${a}`}let r=new B,n=r.parseWordFromString("eval",!1,!1),i=r.parseWordFromString(`'${s.replace(/'/g,"'\\''")}'`,!1,!1);return{type:"SimpleCommand",name:n,args:[i],assignments:e.assignments,redirections:e.redirections,line:e.line}}function tn(e){let t="";for(let s of e.parts)switch(s.type){case"Literal":t+=s.value.replace(/([\s"'$`\\*?[\]{}()<>|&;#!])/g,"\\$1");break;case"SingleQuoted":t+=`'${s.value}'`;break;case"DoubleQuoted":t+=`"${s.parts.map(r=>r.type==="Literal"?r.value:`$${r.type}`).join("")}"`;break;case"ParameterExpansion":t+=`\${${s.parameter}}`;break;case"CommandSubstitution":t+="$(...)";break;case"ArithmeticExpansion":t+=`$((${s.expression}))`;break;case"Glob":t+=s.pattern;break;default:break}return t}async function sn(e,t){let s=t.parts.map(u=>u.type==="Literal"?u.value:"\0").join(""),r=s.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);if(!r||!s.endsWith(")"))return null;let n=r[1],i=[],o=!1,a="",l=!1;for(let u of t.parts)if(u.type==="Literal"){let f=u.value;if(!o){let d=f.indexOf("=(");d!==-1&&(o=!0,f=f.slice(d+2))}if(o){f.endsWith(")")&&(f=f.slice(0,-1));let d=f.split(/(\s+)/);for(let p of d)/^\s+$/.test(p)?(a||l)&&(i.push(a),a="",l=!1):p&&(a+=p)}}else if(o)if(u.type==="BraceExpansion")if(/^\[.+\]=/.test(a))a+=Ft({type:"Word",parts:[u]});else{(a||l)&&(i.push(a),a="",l=!1);let d=await Ce(e,{type:"Word",parts:[u]});i.push(...d.values)}else{(u.type==="SingleQuoted"||u.type==="DoubleQuoted"||u.type==="Escaped")&&(l=!0);let f=await I(e,{type:"Word",parts:[u]});a+=f}(a||l)&&i.push(a);let c=i.map(u=>/^\[.+\]=/.test(u)?u:u===""?"''":/[\s"'\\$`!*?[\]{}|&;<>()]/.test(u)&&!u.startsWith("'")&&!u.startsWith('"')?`'${u.replace(/'/g,"'\\''")}'`:u);return`${n}=(${c.join(" ")})`}async function rn(e,t){let s=-1,r=-1,n=!1;for(let h=0;h<t.parts.length;h++){let m=t.parts[h];if(m.type==="Literal"){let b=m.value.indexOf("+=");if(b!==-1){let P=m.value.slice(0,b);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(P)){s=h,r=b,n=!0;break}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(P)){s=h,r=b,n=!0;break}}let v=m.value.indexOf("=");if(v!==-1&&(v===0||m.value[v-1]!=="+")){let P=m.value.slice(0,v);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(P)||/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(P)){s=h,r=v;break}}}}if(s===-1)return null;let i=t.parts.slice(0,s),o=t.parts[s];if(o.type!=="Literal")return null;let a=n?2:1,l=o.value.slice(0,r),c=o.value.slice(r+a),u=t.parts.slice(s+1),f="";for(let h of i)f+=await I(e,{type:"Word",parts:[h]});f+=l;let d={type:"Word",parts:c!==""?[{type:"Literal",value:c},...u]:u},p=d.parts.length>0?await I(e,d):"";return`${f}${n?"+=":"="}${p}`}var Ki=["tar","yq","xan","sqlite3","python3","python"];function nn(e){return Ki.includes(e)}var F=Object.freeze({stdout:"",stderr:"",exitCode:0});function M(e=""){return{stdout:e,stderr:"",exitCode:0}}function A(e,t=1){return{stdout:"",stderr:e,exitCode:t}}function C(e,t,s){return{stdout:e,stderr:t,exitCode:s}}function Q(e){return{stdout:"",stderr:"",exitCode:e?0:1}}function _e(e,t,s="",r=""){throw new J(e,t,s,r)}function ce(e){let t=e.state.fileDescriptors;if(t&&t.size>=e.limits.maxFileDescriptors)throw new J(`too many open file descriptors (max ${e.limits.maxFileDescriptors})`,"file_descriptors")}function Os(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new Me;return F}if(t.length>1)throw new j(1,"",`bash: break: too many arguments
|
|
4
4
|
`);let s=1;if(t.length>0){let r=Number.parseInt(t[0],10);if(Number.isNaN(r)||r<1)throw new j(128,"",`bash: break: ${t[0]}: numeric argument required
|
|
5
|
-
`);s=r}throw new
|
|
5
|
+
`);s=r}throw new me(s)}async function xs(e,t){let s,r=!1,n=!1,i=0;for(;i<t.length;)if(t[i]==="--"){i++;break}else if(t[i]==="-L")n=!1,i++;else if(t[i]==="-P")n=!0,i++;else if(t[i].startsWith("-")&&t[i]!=="-")i++;else break;let o=t.slice(i);if(o.length===0||o[0]==="~"?s=e.state.env.get("HOME")||"/":o[0]==="-"?(s=e.state.previousDir,r=!0):s=o[0],!s.startsWith("/")&&!s.startsWith("./")&&!s.startsWith("../")&&s!=="."&&s!==".."){let f=e.state.env.get("CDPATH");if(f){let d=f.split(":").filter(p=>p);for(let p of d){let y=p.startsWith("/")?`${p}/${s}`:`${e.state.cwd}/${p}/${s}`;try{if((await e.fs.stat(y)).isDirectory){s=y,r=!0;break}}catch{}}}}let l=(s.startsWith("/")?s:`${e.state.cwd}/${s}`).split("/").filter(f=>f&&f!=="."),c="";for(let f of l)if(f==="..")c=c.split("/").slice(0,-1).join("/")||"/";else{c=c?`${c}/${f}`:`/${f}`;try{if(!(await e.fs.stat(c)).isDirectory)return A(`bash: cd: ${s}: Not a directory
|
|
6
6
|
`)}catch{return A(`bash: cd: ${s}: No such file or directory
|
|
7
7
|
`)}}let u=c||"/";if(n)try{u=await e.fs.realpath(u)}catch{}return e.state.previousDir=e.state.cwd,e.state.cwd=u,e.state.env.set("PWD",e.state.cwd),e.state.env.set("OLDPWD",e.state.previousDir),M(r?`${u}
|
|
8
|
-
`:"")}function
|
|
8
|
+
`:"")}function Ds(e,t){return e.fs.resolvePath(e.state.cwd,t)}var Xi=["-e","-a","-f","-d","-r","-w","-x","-s","-L","-h","-k","-g","-u","-G","-O","-b","-c","-p","-S","-t","-N"];function Vt(e){return Xi.includes(e)}async function Bt(e,t,s){let r=Ds(e,s);switch(t){case"-e":case"-a":return e.fs.exists(r);case"-f":return await e.fs.exists(r)?(await e.fs.stat(r)).isFile:!1;case"-d":return await e.fs.exists(r)?(await e.fs.stat(r)).isDirectory:!1;case"-r":return await e.fs.exists(r)?((await e.fs.stat(r)).mode&256)!==0:!1;case"-w":return await e.fs.exists(r)?((await e.fs.stat(r)).mode&128)!==0:!1;case"-x":return await e.fs.exists(r)?((await e.fs.stat(r)).mode&64)!==0:!1;case"-s":return await e.fs.exists(r)?(await e.fs.stat(r)).size>0:!1;case"-L":case"-h":try{return(await e.fs.lstat(r)).isSymbolicLink}catch{return!1}case"-k":return await e.fs.exists(r)?((await e.fs.stat(r)).mode&512)!==0:!1;case"-g":return await e.fs.exists(r)?((await e.fs.stat(r)).mode&1024)!==0:!1;case"-u":return await e.fs.exists(r)?((await e.fs.stat(r)).mode&2048)!==0:!1;case"-G":case"-O":return e.fs.exists(r);case"-b":return!1;case"-c":return["/dev/null","/dev/zero","/dev/random","/dev/urandom","/dev/tty","/dev/stdin","/dev/stdout","/dev/stderr"].includes(r);case"-p":return!1;case"-S":return!1;case"-t":return!1;case"-N":return e.fs.exists(r);default:return!1}}var Yi=["-nt","-ot","-ef"];function jt(e){return Yi.includes(e)}async function Ut(e,t,s,r){let n=Ds(e,s),i=Ds(e,r);switch(t){case"-nt":try{let o=await e.fs.stat(n),a=await e.fs.stat(i);return o.mtime>a.mtime}catch{return!1}case"-ot":try{let o=await e.fs.stat(n),a=await e.fs.stat(i);return o.mtime<a.mtime}catch{return!1}case"-ef":try{if(!await e.fs.exists(n)||!await e.fs.exists(i))return!1;let o=e.fs.resolvePath(e.state.cwd,n),a=e.fs.resolvePath(e.state.cwd,i);return o===a}catch{return!1}default:return!1}}var Qi=new Set(["-eq","-ne","-lt","-le","-gt","-ge"]);function Ht(e){return Qi.has(e)}function Zt(e,t,s){switch(e){case"-eq":return t===s;case"-ne":return t!==s;case"-lt":return t<s;case"-le":return t<=s;case"-gt":return t>s;case"-ge":return t>=s}}function gt(e){return e==="="||e==="=="||e==="!="}function qt(e,t,s,r=!1,n=!1,i=!1){if(r){let a=nt(t,s,n,i);return e==="!="?!a:a}if(n){let a=t.toLowerCase()===s.toLowerCase();return e==="!="?!a:a}let o=t===s;return e==="!="?!o:o}var Ji=new Set(["-z","-n"]);function Gt(e){return Ji.has(e)}function Kt(e,t){switch(e){case"-z":return t==="";case"-n":return t!==""}}async function Xt(e,t){let s=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(s){let r=s[1],n=s[2];if(e.state.associativeArrays?.has(r)){let a=n;return(a.startsWith("'")&&a.endsWith("'")||a.startsWith('"')&&a.endsWith('"'))&&(a=a.slice(1,-1)),a=a.replace(/\$([a-zA-Z_][a-zA-Z0-9_]*)/g,(l,c)=>e.state.env.get(c)||""),e.state.env.has(`${r}_${a}`)}let o;try{let a=new B,l=ee(a,n);o=await H(e,l.expression)}catch{if(/^-?\d+$/.test(n))o=Number.parseInt(n,10);else{let a=e.state.env.get(n);o=a?Number.parseInt(a,10):0}}if(o<0){let a=re(e,r),l=e.state.currentLine;if(a.length===0)return e.state.expansionStderr=(e.state.expansionStderr||"")+`bash: line ${l}: ${r}: bad array subscript
|
|
9
9
|
`,!1;if(o=Math.max(...a)+1+o,o<0)return e.state.expansionStderr=(e.state.expansionStderr||"")+`bash: line ${l}: ${r}: bad array subscript
|
|
10
|
-
`,!1}return e.state.env.has(`${r}_${o}`)}return e.state.env.has(t)?!0:e.state.associativeArrays?.has(t)?
|
|
11
|
-
`,2):
|
|
12
|
-
`,2):C("","",1)}if(t.length===3){let r=t[0],n=t[1],i=t[2];if(
|
|
13
|
-
`,2):
|
|
14
|
-
`)&&!r&&!n){o&&(t.push(s),s="",o=!1);continue}s+=a,o=!0}return o&&t.push(s),t}function
|
|
10
|
+
`,!1}return e.state.env.has(`${r}_${o}`)}return e.state.env.has(t)?!0:e.state.associativeArrays?.has(t)?Ve(e,t).length>0:re(e,t).length>0}async function je(e,t){switch(t.type){case"CondBinary":{let s=await I(e,t.left),r=t.right.parts.length>0&&t.right.parts.every(i=>i.type==="SingleQuoted"||i.type==="DoubleQuoted"||i.type==="Escaped"&&t.operator!=="=~"),n;if(t.operator==="=~")if(r){let i=await I(e,t.right);n=zr(i)}else n=await Vr(e,t.right);else gt(t.operator)&&!r?n=await Br(e,t.right):n=await I(e,t.right);if(gt(t.operator)){let i=e.state.shoptOptions.nocasematch;return qt(t.operator,s,n,!r,i,!0)}if(Ht(t.operator))return Zt(t.operator,await an(e,s),await an(e,n));if(jt(t.operator))return Ut(e,t.operator,s,n);switch(t.operator){case"=~":try{let i=e.state.shoptOptions.nocasematch,o=ro(n),l=pt(o,i?"i":"").match(s);if(ke(e,"BASH_REMATCH"),l)for(let c=0;c<l.length;c++)e.state.env.set(`BASH_REMATCH_${c}`,l[c]||"");return l!==null}catch{throw new Error("syntax error in regular expression")}case"<":return s<n;case">":return s>n;default:return!1}}case"CondUnary":{let s=await I(e,t.operand);return Vt(t.operator)?Bt(e,t.operator,s):Gt(t.operator)?Kt(t.operator,s):t.operator==="-v"?await Xt(e,s):t.operator==="-o"?Is(e,s):!1}case"CondNot":return e.state.shoptOptions.extglob&&t.operand.type==="CondGroup"&&t.operand.expression.type==="CondWord"?`!(${await I(e,t.operand.expression.word)})`!=="":!await je(e,t.operand);case"CondAnd":return await je(e,t.left)?await je(e,t.right):!1;case"CondOr":return await je(e,t.left)?!0:await je(e,t.right);case"CondGroup":return await je(e,t.expression);case"CondWord":return await I(e,t.word)!=="";default:return!1}}async function wt(e,t){if(t.length===0)return C("","",1);if(t.length===1)return Q(!!t[0]);if(t.length===2){let r=t[0],n=t[1];return r==="("?A(`test: '(' without matching ')'
|
|
11
|
+
`,2):Vt(r)?Q(await Bt(e,r,n)):Gt(r)?Q(Kt(r,n)):r==="!"?Q(!n):r==="-v"?Q(await Xt(e,n)):r==="-o"?Q(Is(e,n)):r==="="||r==="=="||r==="!="||r==="<"||r===">"||r==="-eq"||r==="-ne"||r==="-lt"||r==="-le"||r==="-gt"||r==="-ge"||r==="-nt"||r==="-ot"||r==="-ef"?A(`test: ${r}: unary operator expected
|
|
12
|
+
`,2):C("","",1)}if(t.length===3){let r=t[0],n=t[1],i=t[2];if(gt(n))return Q(qt(n,r,i));if(Ht(n)){let o=Yt(r),a=Yt(i);return!o.valid||!a.valid?C("","",2):Q(Zt(n,o.value,a.value))}if(jt(n))return Q(await Ut(e,n,r,i));switch(n){case"-a":return Q(r!==""&&i!=="");case"-o":return Q(r!==""||i!=="");case">":return Q(r>i);case"<":return Q(r<i)}if(r==="!"){let o=await wt(e,[n,i]);return C("",o.stderr,o.exitCode===0?1:o.exitCode===1?0:o.exitCode)}if(r==="("&&i===")")return Q(n!=="")}if(t.length===4){if(t[0]==="!"){let r=await wt(e,t.slice(1));return C("",r.stderr,r.exitCode===0?1:r.exitCode===1?0:r.exitCode)}if(t[0]==="("&&t[3]===")")return wt(e,[t[1],t[2]])}let s=await cn(e,t,0);return s.pos<t.length?A(`test: too many arguments
|
|
13
|
+
`,2):Q(s.value)}async function cn(e,t,s){return eo(e,t,s)}async function eo(e,t,s){let{value:r,pos:n}=await on(e,t,s);for(;t[n]==="-o";){let i=await on(e,t,n+1);r=r||i.value,n=i.pos}return{value:r,pos:n}}async function on(e,t,s){let{value:r,pos:n}=await Ts(e,t,s);for(;t[n]==="-a";){let i=await Ts(e,t,n+1);r=r&&i.value,n=i.pos}return{value:r,pos:n}}async function Ts(e,t,s){if(t[s]==="!"){let{value:r,pos:n}=await Ts(e,t,s+1);return{value:!r,pos:n}}return to(e,t,s)}async function to(e,t,s){let r=t[s];if(r==="("){let{value:i,pos:o}=await cn(e,t,s+1);return{value:i,pos:t[o]===")"?o+1:o}}let n=t[s+1];if(gt(n)){let i=r,o=t[s+2]??"";return{value:qt(n,i,o),pos:s+3}}if(Ht(n)){let i=Yt(r),o=Yt(t[s+2]??"0");return!i.valid||!o.valid?{value:!1,pos:s+3}:{value:Zt(n,i.value,o.value),pos:s+3}}if(jt(n)){let i=r,o=t[s+2]??"";return{value:await Ut(e,n,i,o),pos:s+3}}if(Vt(r)){let i=t[s+1]??"";return{value:await Bt(e,r,i),pos:s+2}}if(Gt(r)){let i=t[s+1]??"";return{value:Kt(r,i),pos:s+2}}if(r==="-v"){let i=t[s+1]??"";return{value:await Xt(e,i),pos:s+2}}if(r==="-o"){let i=t[s+1]??"";return{value:Is(e,i),pos:s+2}}return{value:r!==void 0&&r!=="",pos:s+1}}function nt(e,t,s=!1,r=!1){let n=`^${un(t,r)}$`;return pt(n,s?"is":"s").test(e)}function un(e,t){let s="";for(let r=0;r<e.length;r++){let n=e[r];if(t&&(n==="@"||n==="*"||n==="+"||n==="?"||n==="!")&&r+1<e.length&&e[r+1]==="("){let i=fn(e,r+1);if(i!==-1){let o=e.slice(r+2,i),a=dn(o),l=a.map(u=>un(u,t)),c=l.length>0?l.join("|"):"(?:)";if(n==="@")s+=`(?:${c})`;else if(n==="*")s+=`(?:${c})*`;else if(n==="+")s+=`(?:${c})+`;else if(n==="?")s+=`(?:${c})?`;else if(n==="!")if(i<e.length-1){let f=a.map(p=>hn(p,t));if(f.every(p=>p!==null)&&f.every(p=>p===f[0])&&f[0]!==null){let p=f[0];if(p===0)s+="(?:.+)";else{let y=[];p>0&&y.push(`.{0,${p-1}}`),y.push(`.{${p+1},}`),y.push(`(?!(?:${c})).{${p}}`),s+=`(?:${y.join("|")})`}}else s+=`(?:(?!(?:${c})).)*?`}else s+=`(?!(?:${c})$).*`;r=i;continue}}if(n==="\\")if(r+1<e.length){let i=e[r+1];/[\\^$.|+(){}[\]*?]/.test(i)?s+=`\\${i}`:s+=i,r++}else s+="\\\\";else if(n==="*")s+=".*";else if(n==="?")s+=".";else if(n==="["){let i=e.indexOf("]",r+1);i!==-1?(s+=e.slice(r,i+1),r=i):s+="\\["}else/[\\^$.|+(){}]/.test(n)?s+=`\\${n}`:s+=n}return s}function fn(e,t){let s=1,r=t+1;for(;r<e.length&&s>0;){let n=e[r];if(n==="\\"){r+=2;continue}if(n==="(")s++;else if(n===")"&&(s--,s===0))return r;r++}return-1}function dn(e){let t=[],s="",r=0,n=0;for(;n<e.length;){let i=e[n];if(i==="\\"){s+=i,n+1<e.length?(s+=e[n+1],n+=2):n++;continue}i==="("?(r++,s+=i):i===")"?(r--,s+=i):i==="|"&&r===0?(t.push(s),s=""):s+=i,n++}return t.push(s),t}function hn(e,t){let s=0,r=0;for(;r<e.length;){let n=e[r];if(t&&(n==="@"||n==="*"||n==="+"||n==="?"||n==="!")&&r+1<e.length&&e[r+1]==="("){let i=fn(e,r+1);if(i!==-1){if(n==="@"){let o=e.slice(r+2,i),l=dn(o).map(c=>hn(c,t));if(l.every(c=>c!==null)&&l.every(c=>c===l[0])){s+=l[0],r=i+1;continue}return null}return null}}if(n==="*")return null;if(n==="?"){s+=1,r++;continue}if(n==="["){let i=e.indexOf("]",r+1);if(i!==-1){s+=1,r=i+1;continue}s+=1,r++;continue}if(n==="\\"){s+=1,r+=2;continue}s+=1,r++}return s}function Is(e,t){let r=new Map([["errexit",()=>e.state.options.errexit===!0],["nounset",()=>e.state.options.nounset===!0],["pipefail",()=>e.state.options.pipefail===!0],["xtrace",()=>e.state.options.xtrace===!0],["e",()=>e.state.options.errexit===!0],["u",()=>e.state.options.nounset===!0],["x",()=>e.state.options.xtrace===!0]]).get(t);return r?r():!1}async function an(e,t){if(t=t.trim(),t==="")return 0;if(/^[+-]?(\d+#[a-zA-Z0-9@_]+|0[xX][0-9a-fA-F]+|0[0-7]+|\d+)$/.test(t))return ln(t);try{let s=new B,r=ee(s,t);return await H(e,r.expression)}catch{return ln(t)}}function so(e,t){let s=0;for(let r of e){let n;if(r>="0"&&r<="9")n=r.charCodeAt(0)-48;else if(r>="a"&&r<="z")n=r.charCodeAt(0)-97+10;else if(r>="A"&&r<="Z")n=r.charCodeAt(0)-65+36;else if(r==="@")n=62;else if(r==="_")n=63;else return Number.NaN;if(n>=t)return Number.NaN;s=s*t+n}return s}function ln(e){if(e=e.trim(),e==="")return 0;let t=!1;e.startsWith("-")?(t=!0,e=e.slice(1)):e.startsWith("+")&&(e=e.slice(1));let s,r=e.match(/^(\d+)#([a-zA-Z0-9@_]+)$/);if(r){let n=Number.parseInt(r[1],10);n>=2&&n<=64?s=so(r[2],n):s=0}else/^0[xX][0-9a-fA-F]+$/.test(e)?s=Number.parseInt(e,16):/^0[0-7]+$/.test(e)?s=Number.parseInt(e,8):s=Number.parseInt(e,10);return Number.isNaN(s)&&(s=0),t?-s:s}function Yt(e){if(e=e.trim(),e==="")return{value:0,valid:!0};let t=!1;if(e.startsWith("-")?(t=!0,e=e.slice(1)):e.startsWith("+")&&(e=e.slice(1)),!/^\d+$/.test(e))return{value:0,valid:!1};let s=Number.parseInt(e,10);return Number.isNaN(s)?{value:0,valid:!1}:{value:t?-s:s,valid:!0}}function ro(e){let t="",s=0;for(;s<e.length;)if(e[s]==="\\"&&s+1<e.length)t+=e[s]+e[s+1],s+=2;else if(e[s]==="["){let r=no(e,s);t+=r.converted,s=r.endIndex}else t+=e[s],s++;return t}function no(e,t){let s=t+1,r="[";s<e.length&&(e[s]==="^"||e[s]==="!")&&(r+="^",s++);let n=!1;s<e.length&&e[s]==="]"&&(n=!0,s++);let i=!1;s<e.length&&e[s]==="["&&s+1<e.length&&e[s+1]!==":"&&(i=!0,s++);let o="",a=!1;for(;s<e.length;){let l=e[s];if(l==="]"){a=!0,s++;break}if(l==="["&&s+1<e.length&&e[s+1]===":"){let c=e.indexOf(":]",s+2);if(c!==-1){let u=e.slice(s+2,c);o+=io(u),s=c+2;continue}}if(l==="["&&s+1<e.length){let c=e[s+1];if(c==="."||c==="="){let u=`${c}]`,f=e.indexOf(u,s+2);if(f!==-1){let d=e.slice(s+2,f);o+=d,s=f+2;continue}}}if(l==="\\"&&s+1<e.length){o+=l+e[s+1],s+=2;continue}o+=l,s++}return a?(n&&(r+="\\]"),i&&(r+="\\["),r+=o,r+="]",{converted:r,endIndex:s}):{converted:"\\[",endIndex:t+1}}function io(e){return new Map([["alnum","a-zA-Z0-9"],["alpha","a-zA-Z"],["ascii","\\x00-\\x7F"],["blank"," \\t"],["cntrl","\\x00-\\x1F\\x7F"],["digit","0-9"],["graph","!-~"],["lower","a-z"],["print"," -~"],["punct","!-/:-@\\[-`{-~"],["space"," \\t\\n\\r\\f\\v"],["upper","A-Z"],["word","a-zA-Z0-9_"],["xdigit","0-9A-Fa-f"]]).get(e)??""}function Ne(e){let t=[],s="",r=!1,n=!1,i=!1,o=!1;for(let a of e){if(i){s+=a,i=!1,o=!0;continue}if(a==="\\"){i=!0;continue}if(a==="'"&&!n){r||(o=!0),r=!r;continue}if(a==='"'&&!r){n||(o=!0),n=!n;continue}if((a===" "||a===" "||a===`
|
|
14
|
+
`)&&!r&&!n){o&&(t.push(s),s="",o=!1);continue}s+=a,o=!0}return o&&t.push(s),t}function Qt(e){let t=[],s=0;for(;s<e.length;){for(;s<e.length&&/\s/.test(e[s]);)s++;if(s>=e.length)break;if(e[s]!=="["){s++;continue}s++;let r="";if(e[s]==="'"||e[s]==='"'){let i=e[s];for(s++;s<e.length&&e[s]!==i;)r+=e[s],s++;e[s]===i&&s++}else for(;s<e.length&&e[s]!=="]"&&e[s]!=="=";)r+=e[s],s++;for(;s<e.length&&e[s]!=="]";)s++;if(e[s]==="]"&&s++,e[s]!=="=")continue;s++;let n="";if(e[s]==="'"||e[s]==='"'){let i=e[s];for(s++;s<e.length&&e[s]!==i;)e[s]==="\\"&&s+1<e.length&&s++,n+=e[s],s++;e[s]===i&&s++}else for(;s<e.length&&!/\s/.test(e[s]);)n+=e[s],s++;t.push([r,n])}return t}function pn(e){let t=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(t)return{name:t[1],isArray:!0,arrayElements:Ne(t[2])};let s=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([^\]]+)\]=(.*)$/s);if(s)return{name:s[1],isArray:!1,arrayIndex:s[2],value:s[3]};if(e.includes("=")){let r=e.indexOf("=");return{name:e.slice(0,r),isArray:!1,value:e.slice(r+1)}}return{name:e,isArray:!1}}async function oo(e,t){try{let s=new B,r=ee(s,t);return await H(e,r.expression)}catch{let s=parseInt(t,10);return Number.isNaN(s)?0:s}}async function mn(e,t,s={}){let{name:r,isArray:n,arrayElements:i,value:o,arrayIndex:a}=t,{makeReadonly:l=!1,checkReadonly:c=!0}=s;if(c){let u=se(e,r);if(u)return u}if(n&&i){for(let u=0;u<i.length;u++)e.state.env.set(`${r}_${u}`,i[u]);e.state.env.set(`${r}__length`,String(i.length))}else if(a!==void 0&&o!==void 0){let u=await oo(e,a);e.state.env.set(`${r}_${u}`,o);let f=parseInt(e.state.env.get(`${r}__length`)??"0",10);u>=f&&e.state.env.set(`${r}__length`,String(u+1))}else o!==void 0&&e.state.env.set(r,o);return l&&de(e,r),null}function Ue(e,t){e.state.localVarDepth=e.state.localVarDepth||new Map,e.state.localVarDepth.set(t,e.state.callDepth)}function it(e,t){return e.state.localVarDepth?.get(t)}function Jt(e,t){e.state.localVarDepth?.delete(t)}function yn(e,t,s){e.state.localVarStack=e.state.localVarStack||new Map;let r=e.state.localVarStack.get(t)||[];r.push({value:s,scopeIndex:e.state.localScopes.length-1}),e.state.localVarStack.set(t,r)}function es(e,t){let s=e.state.localVarStack?.get(t);if(!(!s||s.length===0))return s.pop()}function gn(e,t){if(e.state.localVarStack)for(let[s,r]of e.state.localVarStack.entries()){for(;r.length>0&&r[r.length-1].scopeIndex===t;)r.pop();r.length===0&&e.state.localVarStack.delete(s)}}var Rs=new Set([":",".","break","continue","eval","exec","exit","export","readonly","return","set","shift","trap","unset"]);function wn(e){return Rs.has(e)}var Ls=new Set(["if","then","else","elif","fi","case","esac","for","select","while","until","do","done","in","function","{","}","time","[[","]]","!"]),ot=new Set([":","true","false","cd","export","unset","exit","local","set","break","continue","return","eval","shift","getopts","compgen","complete","compopt","pushd","popd","dirs","source",".","read","mapfile","readarray","declare","typeset","readonly","let","command","shopt","exec","test","[","echo","printf","pwd","alias","unalias","type","hash","ulimit","umask","trap","times","wait","kill","jobs","fg","bg","disown","suspend","fc","history","help","enable","builtin","caller"]);async function Xe(e,t,s,r){try{if((await e.fs.stat(t)).isDirectory)return`bash: ${s}: Is a directory
|
|
15
15
|
`;if(r.checkNoclobber&&e.state.options.noclobber&&!r.isClobber&&s!=="/dev/null")return`bash: ${s}: cannot overwrite existing file
|
|
16
|
-
`}catch{}return null}function
|
|
17
|
-
`};s.set(r,await I(e,n.target))}else{let o=await
|
|
16
|
+
`}catch{}return null}function Le(e){let s=Math.min(e.length,8192);for(let r=0;r<s;r++)if(e.charCodeAt(r)>127)return"utf8";return"binary"}function ao(e){if(!e.startsWith("__rw__:"))return null;let t=e.slice(7),s=t.indexOf(":");if(s===-1)return null;let r=Number.parseInt(t.slice(0,s),10);if(Number.isNaN(r)||r<0)return null;let n=s+1,i=t.slice(n,n+r),o=n+r+1,a=t.slice(o),l=a.indexOf(":");if(l===-1)return null;let c=Number.parseInt(a.slice(0,l),10);if(Number.isNaN(c)||c<0)return null;let u=a.slice(l+1);return{path:i,position:c,content:u}}async function vn(e,t){let s=new Map;for(let r=0;r<t.length;r++){let n=t[r];if(n.target.type==="HereDoc")continue;if(n.operator===">&"||n.operator==="<&"){if(Ps(e,n.target))return{targets:s,error:`bash: $@: ambiguous redirect
|
|
17
|
+
`};s.set(r,await I(e,n.target))}else{let o=await zt(e,n.target);if("error"in o)return{targets:s,error:o.error};s.set(r,o.target)}}return{targets:s}}function lo(e){e.state.nextFd===void 0&&(e.state.nextFd=10);let t=e.state.nextFd,s=e.limits.maxFileDescriptors;if(t>=s)throw new Error(`bash: cannot allocate file descriptor: too many open files (max ${s})`);return e.state.nextFd++,t}async function ts(e,t){for(let s of t){if(!s.fdVariable)continue;if(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),(s.operator===">&"||s.operator==="<&")&&s.target.type==="Word"&&await I(e,s.target)==="-"){let i=e.state.env.get(s.fdVariable);if(i!==void 0){let o=Number.parseInt(i,10);Number.isNaN(o)||e.state.fileDescriptors.delete(o)}continue}let r=lo(e);if(e.state.env.set(s.fdVariable,String(r)),s.target.type==="Word"){let n=await I(e,s.target);if(s.operator===">&"||s.operator==="<&"){let i=Number.parseInt(n,10);if(!Number.isNaN(i)){let o=e.state.fileDescriptors.get(i);o!==void 0&&(ce(e),e.state.fileDescriptors.set(r,o));continue}}if(s.operator===">"||s.operator===">>"||s.operator===">|"||s.operator==="&>"||s.operator==="&>>"){let i=e.fs.resolvePath(e.state.cwd,n);(s.operator===">"||s.operator===">|"||s.operator==="&>")&&await e.fs.writeFile(i,"","binary"),ce(e),e.state.fileDescriptors.set(r,`__file__:${i}`)}else if(s.operator==="<<<")ce(e),e.state.fileDescriptors.set(r,`${n}
|
|
18
18
|
`);else if(s.operator==="<"||s.operator==="<>")try{let i=e.fs.resolvePath(e.state.cwd,n),o=await e.fs.readFile(i);ce(e),e.state.fileDescriptors.set(r,o)}catch{return C("",`bash: ${n}: No such file or directory
|
|
19
|
-
`,1)}}}return null}async function Oe(e,t){for(let s of t){if(s.target.type==="HereDoc")continue;let r=s.operator===">&";if(s.operator!==">"&&s.operator!==">|"&&s.operator!=="&>"&&!r)continue;let n;if(r){if(n=await I(e,s.target),n==="-"||!Number.isNaN(Number.parseInt(n,10))||s.fd!=null)continue}else{let a=await
|
|
19
|
+
`,1)}}}return null}async function Oe(e,t){for(let s of t){if(s.target.type==="HereDoc")continue;let r=s.operator===">&";if(s.operator!==">"&&s.operator!==">|"&&s.operator!=="&>"&&!r)continue;let n;if(r){if(n=await I(e,s.target),n==="-"||!Number.isNaN(Number.parseInt(n,10))||s.fd!=null)continue}else{let a=await zt(e,s.target);if("error"in a)return C("",a.error,1);n=a.target}let i=e.fs.resolvePath(e.state.cwd,n),o=s.operator===">|";if(i.includes("\0"))return C("",`bash: ${n}: No such file or directory
|
|
20
20
|
`,1);try{let a=await e.fs.stat(i);if(a.isDirectory)return C("",`bash: ${n}: Is a directory
|
|
21
21
|
`,1);if(e.state.options.noclobber&&!o&&!a.isDirectory&&n!=="/dev/null")return C("",`bash: ${n}: cannot overwrite existing file
|
|
22
22
|
`,1)}catch{}if(n!=="/dev/null"&&n!=="/dev/stdout"&&n!=="/dev/stderr"&&n!=="/dev/full"&&await e.fs.writeFile(i,"","binary"),n==="/dev/full")return C("",`bash: /dev/full: No space left on device
|
|
23
|
-
`,1)}return null}async function G(e,t,s,r){let{stdout:n,stderr:i,exitCode:o}=t;for(let
|
|
24
|
-
`,o=1,n="";continue}
|
|
25
|
-
`,o=1,n="";continue}switch(
|
|
26
|
-
`,o=1,n="";break}let
|
|
27
|
-
`,o=1;break}if(
|
|
28
|
-
`,o=1,n="";break}let
|
|
29
|
-
`,o=1;break}let
|
|
30
|
-
`,o=1)}break}if(
|
|
31
|
-
`,o=1,n=""):
|
|
32
|
-
`,o=1,n="")}}break}case"&>":{if(
|
|
33
|
-
`,o=1,n="";break}let
|
|
34
|
-
`,o=1,n="";break}let
|
|
35
|
-
`;throw new j(2,"",r)}let s={...t,sourceFile:t.sourceFile??e.state.currentSource??"main"};return e.state.functions.set(t.name,s),F}async function
|
|
23
|
+
`,1)}return null}async function G(e,t,s,r){let{stdout:n,stderr:i,exitCode:o}=t,a=t.stdoutEncoding==="binary"?()=>"binary":u=>Le(u);for(let u=0;u<s.length;u++){let f=s[u];if(f.target.type==="HereDoc")continue;let d,p=r?.get(u);if(p!==void 0)d=p;else if(f.operator===">&"||f.operator==="<&"){if(Ps(e,f.target)){i+=`bash: $@: ambiguous redirect
|
|
24
|
+
`,o=1,n="";continue}d=await I(e,f.target)}else{let h=await zt(e,f.target);if("error"in h){i+=h.error,o=1,n="";continue}d=h.target}if(!f.fdVariable){if(d.includes("\0")){i+=`bash: ${d.replace(/\0/g,"")}: No such file or directory
|
|
25
|
+
`,o=1,n="";continue}switch(f.operator){case">":case">|":{let y=f.fd??1,h=f.operator===">|";if(y===1){if(d==="/dev/stdout")break;if(d==="/dev/stderr"){i+=n,n="";break}if(d==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
26
|
+
`,o=1,n="";break}let m=e.fs.resolvePath(e.state.cwd,d),b=await Xe(e,m,d,{checkNoclobber:!0,isClobber:h});if(b){i+=b,o=1,n="";break}await e.fs.writeFile(m,n,a(n)),n=""}else if(y===2){if(d==="/dev/stderr")break;if(d==="/dev/stdout"){n+=i,i="";break}if(d==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
27
|
+
`,o=1;break}if(d==="/dev/null")i="";else{let m=e.fs.resolvePath(e.state.cwd,d),b=await Xe(e,m,d,{checkNoclobber:!0,isClobber:h});if(b){i+=b,o=1;break}await e.fs.writeFile(m,i,Le(i)),i=""}}break}case">>":{let y=f.fd??1;if(y===1){if(d==="/dev/stdout")break;if(d==="/dev/stderr"){i+=n,n="";break}if(d==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
28
|
+
`,o=1,n="";break}let h=e.fs.resolvePath(e.state.cwd,d),m=await Xe(e,h,d,{});if(m){i+=m,o=1,n="";break}await e.fs.appendFile(h,n,a(n)),n=""}else if(y===2){if(d==="/dev/stderr")break;if(d==="/dev/stdout"){n+=i,i="";break}if(d==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
29
|
+
`,o=1;break}let h=e.fs.resolvePath(e.state.cwd,d),m=await Xe(e,h,d,{});if(m){i+=m,o=1;break}await e.fs.appendFile(h,i,Le(i)),i=""}break}case">&":case"<&":{let y=f.fd??1;if(d==="-")break;if(d.endsWith("-")){let h=d.slice(0,-1),m=Number.parseInt(h,10);if(!Number.isNaN(m)){let b=e.state.fileDescriptors?.get(m);b!==void 0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(y,b),m>=3&&e.state.fileDescriptors?.delete(m)):m===1||m===2?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(y,`__dupout__:${m}`)):m===0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(y,`__dupin__:${m}`)):m>=3&&(i+=`bash: ${m}: Bad file descriptor
|
|
30
|
+
`,o=1)}break}if(d==="2"||d==="&2")y===1&&(i+=n,n="");else if(d==="1"||d==="&1")n+=i,i="";else{let h=Number.parseInt(d,10);if(Number.isNaN(h)){if(f.operator===">&"){let m=e.fs.resolvePath(e.state.cwd,d),b=await Xe(e,m,d,{checkNoclobber:!0});if(b){i=b,o=1,n="";break}if(f.fd==null){let v=n+i;await e.fs.writeFile(m,v,a(v)),n="",i=""}else y===1?(await e.fs.writeFile(m,n,a(n)),n=""):y===2&&(await e.fs.writeFile(m,i,Le(i)),i="")}}else{let m=e.state.fileDescriptors?.get(h);if(m?.startsWith("__file__:")){let b=m.slice(9);y===1?(await e.fs.appendFile(b,n,a(n)),n=""):y===2&&(await e.fs.appendFile(b,i,Le(i)),i="")}else if(m?.startsWith("__rw__:")){let b=ao(m);b&&(y===1?(await e.fs.appendFile(b.path,n,a(n)),n=""):y===2&&(await e.fs.appendFile(b.path,i,Le(i)),i=""))}else if(m?.startsWith("__dupout__:")){let b=Number.parseInt(m.slice(11),10);if(b!==1)if(b===2)y===1&&(i+=n,n="");else{let v=e.state.fileDescriptors?.get(b);if(v?.startsWith("__file__:")){let P=v.slice(9);y===1?(await e.fs.appendFile(P,n,a(n)),n=""):y===2&&(await e.fs.appendFile(P,i,Le(i)),i="")}}}else m?.startsWith("__dupin__:")?(i+=`bash: ${h}: Bad file descriptor
|
|
31
|
+
`,o=1,n=""):h>=3&&(i+=`bash: ${h}: Bad file descriptor
|
|
32
|
+
`,o=1,n="")}}break}case"&>":{if(d==="/dev/full"){i=`bash: echo: write error: No space left on device
|
|
33
|
+
`,o=1,n="";break}let y=e.fs.resolvePath(e.state.cwd,d),h=await Xe(e,y,d,{checkNoclobber:!0});if(h){i=h,o=1,n="";break}let m=n+i;await e.fs.writeFile(y,m,a(m)),n="",i="";break}case"&>>":{if(d==="/dev/full"){i=`bash: echo: write error: No space left on device
|
|
34
|
+
`,o=1,n="";break}let y=e.fs.resolvePath(e.state.cwd,d),h=await Xe(e,y,d,{});if(h){i=h,o=1,n="";break}let m=n+i;await e.fs.appendFile(y,m,a(m)),n="",i="";break}}}}let l=e.state.fileDescriptors?.get(1);if(l){if(l==="__dupout__:2")i+=n,n="";else if(l.startsWith("__file__:")){let u=l.slice(9);await e.fs.appendFile(u,n,a(n)),n=""}else if(l.startsWith("__file_append__:")){let u=l.slice(16);await e.fs.appendFile(u,n,a(n)),n=""}}let c=e.state.fileDescriptors?.get(2);if(c){if(c==="__dupout__:1")n+=i,i="";else if(c.startsWith("__file__:")){let u=c.slice(9);await e.fs.appendFile(u,i,Le(i)),i=""}else if(c.startsWith("__file_append__:")){let u=c.slice(16);await e.fs.appendFile(u,i,Le(i)),i=""}}return C(n,i,o)}function bn(e,t){if(e.state.options.posix&&Rs.has(t.name)){let r=`bash: line ${e.state.currentLine}: \`${t.name}': is a special builtin
|
|
35
|
+
`;throw new j(2,"",r)}let s={...t,sourceFile:t.sourceFile??e.state.currentSource??"main"};return e.state.functions.set(t.name,s),F}async function co(e,t){let s="";for(let r of t)if((r.operator==="<<"||r.operator==="<<-")&&r.target.type==="HereDoc"){let n=r.target,i=await I(e,n.content);n.stripTabs&&(i=i.split(`
|
|
36
36
|
`).map(a=>a.replace(/^\t+/,"")).join(`
|
|
37
37
|
`)),(r.fd??0)===0&&(s=i)}else if(r.operator==="<<<"&&r.target.type==="Word")s=`${await I(e,r.target)}
|
|
38
|
-
`;else if(r.operator==="<"&&r.target.type==="Word"){let n=await I(e,r.target),i=e.fs.resolvePath(e.state.cwd,n);try{s=await e.fs.readFile(i)}catch{}}return s}async function
|
|
39
|
-
`,2);let
|
|
40
|
-
`,2);s.push(
|
|
41
|
-
`,2);r=t[
|
|
42
|
-
`,2);n=t[
|
|
43
|
-
`,2);i=t[
|
|
44
|
-
`,2);let
|
|
45
|
-
`,2)}else if(w==="-F"){if(
|
|
46
|
-
`,2);f=t[
|
|
47
|
-
`,2);d=t[
|
|
48
|
-
`,2);u=t[
|
|
49
|
-
`,2)}else if(w==="--"){p.push(...t.slice(
|
|
50
|
-
`);for(let
|
|
51
|
-
`,2);throw
|
|
52
|
-
`),P=
|
|
53
|
-
`:"");return M(P)}function
|
|
54
|
-
`;if(s.length===0)return[t];let r=new Set(s.split("")),n=[],i="",o=0;for(;o<t.length;){let a=t[o];if(a==="\\"&&o+1<t.length){let l=t[o+1];i+=l,o+=2}else r.has(a)?(i.length>0&&(n.push(i),i=""),o++):(i+=a,o++)}return i.length>0&&n.push(i),n}function
|
|
38
|
+
`;else if(r.operator==="<"&&r.target.type==="Word"){let n=await I(e,r.target),i=e.fs.resolvePath(e.state.cwd,n);try{s=await e.fs.readFile(i)}catch{}}return s}async function ss(e,t,s,r="",n){e.state.callDepth++,e.state.callDepth>e.limits.maxCallDepth&&(e.state.callDepth--,_e(`${t.name}: maximum recursion depth (${e.limits.maxCallDepth}) exceeded, increase executionLimits.maxCallDepth`,"recursion")),e.state.funcNameStack||(e.state.funcNameStack=[]),e.state.callLineStack||(e.state.callLineStack=[]),e.state.sourceStack||(e.state.sourceStack=[]),e.state.funcNameStack.unshift(t.name),e.state.callLineStack.unshift(n??e.state.currentLine),e.state.sourceStack.unshift(t.sourceFile??"main"),e.state.localScopes.push(new Map),e.state.localExportedVars||(e.state.localExportedVars=[]),e.state.localExportedVars.push(new Set);let i=new Map;for(let c=0;c<s.length;c++)i.set(String(c+1),e.state.env.get(String(c+1))),e.state.env.set(String(c+1),s[c]);i.set("@",e.state.env.get("@")),i.set("#",e.state.env.get("#")),e.state.env.set("@",s.join(" ")),e.state.env.set("#",String(s.length));let o=()=>{let c=e.state.localScopes.length-1,u=e.state.localScopes.pop();if(u)for(let[f,d]of u)d===void 0?e.state.env.delete(f):e.state.env.set(f,d);if(gn(e,c),e.state.fullyUnsetLocals)for(let[f,d]of e.state.fullyUnsetLocals.entries())d===c&&e.state.fullyUnsetLocals.delete(f);if(e.state.localExportedVars&&e.state.localExportedVars.length>0){let f=e.state.localExportedVars.pop();if(f)for(let d of f)e.state.exportedVars?.delete(d)}for(let[f,d]of i)d===void 0?e.state.env.delete(f):e.state.env.set(f,d);e.state.funcNameStack?.shift(),e.state.callLineStack?.shift(),e.state.sourceStack?.shift(),e.state.callDepth--},{targets:a,error:l}=await vn(e,t.redirections);if(l)return o(),C("",l,1);try{let c=await co(e,t.redirections),u=r||c,f=await e.executeCommand(t.body,u);return o(),G(e,f,t.redirections,a)}catch(c){if(o(),c instanceof ue){let u=C(c.stdout,c.stderr,c.exitCode);return G(e,u,t.redirections,a)}throw c}}var $n=["!","[[","]]","case","do","done","elif","else","esac","fi","for","function","if","in","then","time","until","while","{","}"],Ms=[".",":","[","alias","bg","bind","break","builtin","caller","cd","command","compgen","complete","compopt","continue","declare","dirs","disown","echo","enable","eval","exec","exit","export","false","fc","fg","getopts","hash","help","history","jobs","kill","let","local","logout","mapfile","popd","printf","pushd","pwd","read","readarray","readonly","return","set","shift","shopt","source","suspend","test","times","trap","true","type","typeset","ulimit","umask","unalias","unset","wait"],uo=["autocd","assoc_expand_once","cdable_vars","cdspell","checkhash","checkjobs","checkwinsize","cmdhist","compat31","compat32","compat40","compat41","compat42","compat43","compat44","complete_fullquote","direxpand","dirspell","dotglob","execfail","expand_aliases","extdebug","extglob","extquote","failglob","force_fignore","globasciiranges","globstar","gnu_errfmt","histappend","histreedit","histverify","hostcomplete","huponexit","inherit_errexit","interactive_comments","lastpipe","lithist","localvar_inherit","localvar_unset","login_shell","mailwarn","no_empty_cmd_completion","nocaseglob","nocasematch","nullglob","progcomp","progcomp_alias","promptvars","restricted_shell","shift_verbose","sourcepath","xpg_echo"],fo=Ms;async function zs(e,t){let s=[],r=null,n="",i="",o=null,a=!1,l=!1,c=!1,u=null,f=null,d=null,p=[],y=["alias","arrayvar","binding","builtin","command","directory","disabled","enabled","export","file","function","group","helptopic","hostname","job","keyword","running","service","setopt","shopt","signal","stopped","user","variable"];for(let g=0;g<t.length;g++){let w=t[g];if(w==="-v")s.push("variable");else if(w==="-e")s.push("export");else if(w==="-f")s.push("file");else if(w==="-d")s.push("directory");else if(w==="-k")s.push("keyword");else if(w==="-A"){if(g++,g>=t.length)return A(`compgen: -A: option requires an argument
|
|
39
|
+
`,2);let E=t[g];if(!y.includes(E))return A(`compgen: ${E}: invalid action name
|
|
40
|
+
`,2);s.push(E)}else if(w==="-W"){if(g++,g>=t.length)return A(`compgen: -W: option requires an argument
|
|
41
|
+
`,2);r=t[g]}else if(w==="-P"){if(g++,g>=t.length)return A(`compgen: -P: option requires an argument
|
|
42
|
+
`,2);n=t[g]}else if(w==="-S"){if(g++,g>=t.length)return A(`compgen: -S: option requires an argument
|
|
43
|
+
`,2);i=t[g]}else if(w==="-o"){if(g++,g>=t.length)return A(`compgen: -o: option requires an argument
|
|
44
|
+
`,2);let E=t[g];if(E==="plusdirs")a=!0;else if(E==="dirnames")l=!0;else if(E==="default")c=!0;else if(!(E==="filenames"||E==="nospace"||E==="bashdefault"||E==="noquote"))return A(`compgen: ${E}: invalid option name
|
|
45
|
+
`,2)}else if(w==="-F"){if(g++,g>=t.length)return A(`compgen: -F: option requires an argument
|
|
46
|
+
`,2);f=t[g]}else if(w==="-C"){if(g++,g>=t.length)return A(`compgen: -C: option requires an argument
|
|
47
|
+
`,2);d=t[g]}else if(w==="-X"){if(g++,g>=t.length)return A(`compgen: -X: option requires an argument
|
|
48
|
+
`,2);u=t[g]}else if(w==="-G"){if(g++,g>=t.length)return A(`compgen: -G: option requires an argument
|
|
49
|
+
`,2)}else if(w==="--"){p.push(...t.slice(g+1));break}else w.startsWith("-")||p.push(w)}o=p[0]??null;let h=[];if(l){let g=await Fs(e,o);h.push(...g)}if(c){let g=await En(e,o);h.push(...g)}for(let g of s)if(g==="variable"){let w=ho(e,o);h.push(...w)}else if(g==="export"){let w=po(e,o);h.push(...w)}else if(g==="function"){let w=mo(e,o);h.push(...w)}else if(g==="builtin"){let w=yo(o);h.push(...w)}else if(g==="keyword"){let w=go(o);h.push(...w)}else if(g==="alias"){let w=wo(e,o);h.push(...w)}else if(g==="shopt"){let w=vo(o);h.push(...w)}else if(g==="helptopic"){let w=bo(o);h.push(...w)}else if(g==="directory"){let w=await Fs(e,o);h.push(...w)}else if(g==="file"){let w=await En(e,o);h.push(...w)}else if(g==="user"){let w=Eo(o);h.push(...w)}else if(g==="command"){let w=await $o(e,o);h.push(...w)}if(r!==null)try{let g=await So(e,r),w=Po(e,g);for(let E of w)(o===null||E.startsWith(o))&&h.push(E)}catch{return C("","",1)}if(a){let g=await Fs(e,o);for(let w of g)h.includes(w)||h.push(w)}let m="";if(f!==null){let g=e.state.functions.get(f);if(g){let w=new Map;w.set("COMP_WORDS__length",e.state.env.get("COMP_WORDS__length")),e.state.env.set("COMP_WORDS__length","0"),w.set("COMP_CWORD",e.state.env.get("COMP_CWORD")),e.state.env.set("COMP_CWORD","-1"),w.set("COMP_LINE",e.state.env.get("COMP_LINE")),e.state.env.set("COMP_LINE",""),w.set("COMP_POINT",e.state.env.get("COMP_POINT")),e.state.env.set("COMP_POINT","0");let E=new Map;for(let T of e.state.env.keys())(T==="COMPREPLY"||T.startsWith("COMPREPLY_")||T==="COMPREPLY__length")&&(E.set(T,e.state.env.get(T)),e.state.env.delete(T));let $=["compgen",p[0]??"",""];try{let T=await ss(e,g,$,"");if(T.exitCode!==0)return at(e,w),at(e,E),C("",T.stderr,1);m=T.stdout;let N=Ao(e);h.push(...N)}catch{return at(e,w),at(e,E),C("","",1)}at(e,w),at(e,E)}}if(d!==null)try{let g=fe(d),w=await e.executeScript(g);if(w.exitCode!==0)return C("",w.stderr,w.exitCode);if(w.stdout){let E=w.stdout.split(`
|
|
50
|
+
`);for(let $ of E)$.length>0&&h.push($)}}catch(g){if(g.name==="ParseException")return A(`compgen: -C: ${g.message}
|
|
51
|
+
`,2);throw g}let b=h;if(u!==null){let g=u.startsWith("!"),w=g?u.slice(1):u;b=h.filter(E=>{let $=nt(E,w,!1,!0);return g?$:!$})}if(b.length===0&&o!==null)return C(m,"",1);let v=b.map(g=>`${n}${g}${i}`).join(`
|
|
52
|
+
`),P=m+(v?`${v}
|
|
53
|
+
`:"");return M(P)}function ho(e,t){let s=new Set;for(let n of e.state.env.keys()){if(n.includes("_")&&/^[a-zA-Z_][a-zA-Z0-9_]*_\d+$/.test(n)||n.endsWith("__length"))continue;let i=n.split("_")[0];/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(n)?s.add(n):i&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(i)&&e.state.env.has(`${i}__length`)&&s.add(i)}let r=Array.from(s);return t!==null&&(r=r.filter(n=>n.startsWith(t))),r.sort()}function po(e,t){let s=e.state.exportedVars??new Set,r=Array.from(s);return t!==null&&(r=r.filter(n=>n.startsWith(t))),r=r.filter(n=>n.includes("_")&&/^[a-zA-Z_][a-zA-Z0-9_]*_\d+$/.test(n)||n.endsWith("__length")?!1:e.state.env.has(n)),r.sort()}function mo(e,t){let s=Array.from(e.state.functions.keys());return t!==null&&(s=s.filter(r=>r.startsWith(t))),s.sort()}function yo(e){let t=[...Ms];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}function go(e){let t=[...$n];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}function wo(e,t){let s=[];for(let n of e.state.env.keys())if(n.startsWith("BASH_ALIAS_")){let i=n.slice(11);s.push(i)}let r=s;return t!==null&&(r=r.filter(n=>n.startsWith(t))),r.sort()}function vo(e){let t=[...uo];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}function bo(e){let t=[...fo];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}async function Fs(e,t){let s=[];try{let r=e.state.cwd,n=t??"";if(t){let o=t.lastIndexOf("/");if(o!==-1){let a=t.slice(0,o)||"/";n=t.slice(o+1),a.startsWith("/")?r=a:r=`${e.state.cwd}/${a}`}}let i=await e.fs.readdir(r);for(let o of i){let a=`${r}/${o}`;try{if((await e.fs.stat(a)).isDirectory&&(!n||o.startsWith(n)))if(t?.includes("/")){let c=t.lastIndexOf("/"),u=t.slice(0,c+1);s.push(u+o)}else s.push(o)}catch{}}}catch{}return s.sort()}async function En(e,t){let s=[];try{let r=e.state.cwd,n=t??"";if(t){let o=t.lastIndexOf("/");if(o!==-1){let a=t.slice(0,o)||"/";n=t.slice(o+1),a.startsWith("/")?r=a:r=`${e.state.cwd}/${a}`}}let i=await e.fs.readdir(r);for(let o of i)if(!n||o.startsWith(n))if(t?.includes("/")){let a=t.lastIndexOf("/"),l=t.slice(0,a+1);s.push(l+o)}else s.push(o)}catch{}return s.sort()}function Eo(e){return["root","nobody"]}async function $o(e,t){let s=new Set;for(let i of Ms)s.add(i);for(let i of e.state.functions.keys())s.add(i);for(let i of e.state.env.keys())i.startsWith("BASH_ALIAS_")&&s.add(i.slice(11));for(let i of $n)s.add(i);let r=e.state.env.get("PATH")??"/usr/bin:/bin";for(let i of r.split(":"))if(i)try{let o=await e.fs.readdir(i);for(let a of o)s.add(a)}catch{}let n=Array.from(s);return t!==null&&(n=n.filter(i=>i.startsWith(t))),n.sort()}async function So(e,t){let r=new B().parseWordFromString(t,!1,!1);return await I(e,r)}function Po(e,t){let s=e.state.env.get("IFS")??`
|
|
54
|
+
`;if(s.length===0)return[t];let r=new Set(s.split("")),n=[],i="",o=0;for(;o<t.length;){let a=t[o];if(a==="\\"&&o+1<t.length){let l=t[o+1];i+=l,o+=2}else r.has(a)?(i.length>0&&(n.push(i),i=""),o++):(i+=a,o++)}return i.length>0&&n.push(i),n}function at(e,t){for(let[s,r]of t)r===void 0?e.state.env.delete(s):e.state.env.set(s,r)}function Ao(e){let t=[];if(e.state.env.get("COMPREPLY__length")!==void 0){let n=Se(e,"COMPREPLY");for(let[,i]of n)t.push(i)}else{let n=e.state.env.get("COMPREPLY");n!==void 0&&t.push(n)}return t}var ko=["bashdefault","default","dirnames","filenames","noquote","nosort","nospace","plusdirs"];function Vs(e,t){e.state.completionSpecs||(e.state.completionSpecs=new Map);let s=!1,r=!1,n=!1,i,o,a,l=[],c=[],u=[];for(let f=0;f<t.length;f++){let d=t[f];if(d==="-p")s=!0;else if(d==="-r")r=!0;else if(d==="-D")n=!0;else if(d==="-W"){if(f++,f>=t.length)return A(`complete: -W: option requires an argument
|
|
55
55
|
`,2);i=t[f]}else if(d==="-F"){if(f++,f>=t.length)return A(`complete: -F: option requires an argument
|
|
56
56
|
`,2);o=t[f]}else if(d==="-o"){if(f++,f>=t.length)return A(`complete: -o: option requires an argument
|
|
57
|
-
`,2);let p=t[f];if(!
|
|
57
|
+
`,2);let p=t[f];if(!ko.includes(p))return A(`complete: ${p}: invalid option name
|
|
58
58
|
`,2);l.push(p)}else if(d==="-A"){if(f++,f>=t.length)return A(`complete: -A: option requires an argument
|
|
59
59
|
`,2);c.push(t[f])}else if(d==="-C"){if(f++,f>=t.length)return A(`complete: -C: option requires an argument
|
|
60
60
|
`,2);a=t[f]}else if(d==="-G"){if(f++,f>=t.length)return A(`complete: -G: option requires an argument
|
|
61
61
|
`,2)}else if(d==="-P"){if(f++,f>=t.length)return A(`complete: -P: option requires an argument
|
|
62
62
|
`,2)}else if(d==="-S"){if(f++,f>=t.length)return A(`complete: -S: option requires an argument
|
|
63
63
|
`,2)}else if(d==="-X"){if(f++,f>=t.length)return A(`complete: -X: option requires an argument
|
|
64
|
-
`,2)}else if(d==="--"){u.push(...t.slice(f+1));break}else d.startsWith("-")||u.push(d)}if(r){if(u.length===0)return e.state.completionSpecs.clear(),M("");for(let f of u)e.state.completionSpecs.delete(f);return M("")}if(s)return u.length===0?
|
|
65
|
-
`,2);if(n){let f={isDefault:!0};return i!==void 0&&(f.wordlist=i),o!==void 0&&(f.function=o),a!==void 0&&(f.command=a),l.length>0&&(f.options=l),c.length>0&&(f.actions=c),e.state.completionSpecs.set("__default__",f),M("")}for(let f of u){let d=Object.create(null);i!==void 0&&(d.wordlist=i),o!==void 0&&(d.function=o),a!==void 0&&(d.command=a),l.length>0&&(d.options=l),c.length>0&&(d.actions=c),e.state.completionSpecs.set(f,d)}return M("")}function
|
|
64
|
+
`,2)}else if(d==="--"){u.push(...t.slice(f+1));break}else d.startsWith("-")||u.push(d)}if(r){if(u.length===0)return e.state.completionSpecs.clear(),M("");for(let f of u)e.state.completionSpecs.delete(f);return M("")}if(s)return u.length===0?Ws(e):Ws(e,u);if(t.length===0||u.length===0&&!i&&!o&&!a&&l.length===0&&c.length===0&&!n)return Ws(e);if(o&&u.length===0&&!n)return A(`complete: -F: option requires a command name
|
|
65
|
+
`,2);if(n){let f={isDefault:!0};return i!==void 0&&(f.wordlist=i),o!==void 0&&(f.function=o),a!==void 0&&(f.command=a),l.length>0&&(f.options=l),c.length>0&&(f.actions=c),e.state.completionSpecs.set("__default__",f),M("")}for(let f of u){let d=Object.create(null);i!==void 0&&(d.wordlist=i),o!==void 0&&(d.function=o),a!==void 0&&(d.command=a),l.length>0&&(d.options=l),c.length>0&&(d.actions=c),e.state.completionSpecs.set(f,d)}return M("")}function Ws(e,t){let s=e.state.completionSpecs;if(!s||s.size===0){if(t&&t.length>0){let i="";for(let o of t)i+=`complete: ${o}: no completion specification
|
|
66
66
|
`;return C("",i,1)}return M("")}let r=[],n=t||Array.from(s.keys());for(let i of n){if(i==="__default__")continue;let o=s.get(i);if(!o){if(t)return C(r.join(`
|
|
67
67
|
`)+(r.length>0?`
|
|
68
68
|
`:""),`complete: ${i}: no completion specification
|
|
69
69
|
`,1);continue}let a="complete";if(o.options)for(let l of o.options)a+=` -o ${l}`;if(o.actions)for(let l of o.actions)a+=` -A ${l}`;o.wordlist!==void 0&&(o.wordlist.includes(" ")||o.wordlist.includes("'")?a+=` -W '${o.wordlist}'`:a+=` -W ${o.wordlist}`),o.function!==void 0&&(a+=` -F ${o.function}`),o.isDefault&&(a+=" -D"),a+=` ${i}`,r.push(a)}return r.length===0?M(""):M(`${r.join(`
|
|
70
70
|
`)}
|
|
71
|
-
`)}var
|
|
72
|
-
`,2);let c=t[a];if(!
|
|
71
|
+
`)}var Sn=["bashdefault","default","dirnames","filenames","noquote","nosort","nospace","plusdirs"];function Bs(e,t){e.state.completionSpecs||(e.state.completionSpecs=new Map);let s=!1,r=!1,n=[],i=[],o=[];for(let a=0;a<t.length;a++){let l=t[a];if(l==="-D")s=!0;else if(l==="-E")r=!0;else if(l==="-o"){if(a++,a>=t.length)return A(`compopt: -o: option requires an argument
|
|
72
|
+
`,2);let c=t[a];if(!Sn.includes(c))return A(`compopt: ${c}: invalid option name
|
|
73
73
|
`,2);n.push(c)}else if(l==="+o"){if(a++,a>=t.length)return A(`compopt: +o: option requires an argument
|
|
74
|
-
`,2);let c=t[a];if(!
|
|
74
|
+
`,2);let c=t[a];if(!Sn.includes(c))return A(`compopt: ${c}: invalid option name
|
|
75
75
|
`,2);i.push(c)}else if(l==="--"){o.push(...t.slice(a+1));break}else!l.startsWith("-")&&!l.startsWith("+")&&o.push(l)}if(s){let a=e.state.completionSpecs.get("__default__")??{isDefault:!0},l=new Set(a.options??[]);for(let c of n)l.add(c);for(let c of i)l.delete(c);return a.options=l.size>0?Array.from(l):void 0,e.state.completionSpecs.set("__default__",a),M("")}if(r){let a=e.state.completionSpecs.get("__empty__")??{},l=new Set(a.options??[]);for(let c of n)l.add(c);for(let c of i)l.delete(c);return a.options=l.size>0?Array.from(l):void 0,e.state.completionSpecs.set("__empty__",a),M("")}if(o.length>0){for(let a of o){let l=e.state.completionSpecs.get(a)??{},c=new Set(l.options??[]);for(let u of n)c.add(u);for(let u of i)c.delete(u);l.options=c.size>0?Array.from(c):void 0,e.state.completionSpecs.set(a,l)}return M("")}return A(`compopt: not currently executing completion function
|
|
76
|
-
`,1)}function
|
|
76
|
+
`,1)}function js(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new Me;return F}if(t.length>1)throw new j(1,"",`bash: continue: too many arguments
|
|
77
77
|
`);let s=1;if(t.length>0){let r=Number.parseInt(t[0],10);if(Number.isNaN(r)||r<1)throw new j(1,"",`bash: continue: ${t[0]}: numeric argument required
|
|
78
|
-
`);s=r}throw new
|
|
79
|
-
`;else{let f=u.map(d=>{let p=e.state.env.get(`${i}_${d}`)??"",
|
|
80
|
-
`}continue}let l=re(e,i);if(l.length>0){let u=l.map(f=>{let d=e.state.env.get(`${i}_${f}`)??"";return`[${f}]=${
|
|
78
|
+
`);s=r}throw new ye(s)}function X(e,t){let s=e.state.env.get("HOME")||"/home/user";return t.split(":").map(i=>i==="~"?s:i==="~root"?"/root":i.startsWith("~/")?s+i.slice(1):i.startsWith("~root/")?`/root${i.slice(5)}`:i).join(":")}function Us(e){for(let t=0;t<e.length;t++){let s=e.charCodeAt(t);if(s<32||s===127)return!0}return!1}function Hs(e){let t="$'";for(let s=0;s<e.length;s++){let r=e[s],n=e.charCodeAt(s);n===7?t+="\\a":n===8?t+="\\b":n===9?t+="\\t":n===10?t+="\\n":n===11?t+="\\v":n===12?t+="\\f":n===13?t+="\\r":n===27?t+="\\e":n===39?t+="\\'":n===92?t+="\\\\":n<32||n===127?t+=`\\${n.toString(8).padStart(3,"0")}`:t+=r}return t+="'",t}function rs(e){return Us(e)?Hs(e):/^[a-zA-Z0-9_/.:\-@%+,=]*$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function Ye(e){return Us(e)?Hs(e):`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function Zs(e){return Us(e)?Hs(e):`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function Pn(e,t){let s="";return e.state.integerVars?.has(t)&&(s+="i"),e.state.lowercaseVars?.has(t)&&(s+="l"),ve(e,t)&&(s+="n"),e.state.readonlyVars?.has(t)&&(s+="r"),e.state.uppercaseVars?.has(t)&&(s+="u"),e.state.exportedVars?.has(t)&&(s+="x"),s===""?"--":`-${s}`}function qs(e){return e===""?"''":/[\s'\\]/.test(e)?`'${e.replace(/'/g,"'\\''")}'`:e}function An(e,t){let s="",r="",n=!1;for(let i of t){let o=Pn(e,i);if(e.state.associativeArrays?.has(i)){let u=Ve(e,i);if(u.length===0)s+=`declare -A ${i}=()
|
|
79
|
+
`;else{let f=u.map(d=>{let p=e.state.env.get(`${i}_${d}`)??"",y=qs(p);return`['${d}']=${y}`});s+=`declare -A ${i}=(${f.join(" ")})
|
|
80
|
+
`}continue}let l=re(e,i);if(l.length>0){let u=l.map(f=>{let d=e.state.env.get(`${i}_${f}`)??"";return`[${f}]=${Ye(d)}`});s+=`declare -a ${i}=(${u.join(" ")})
|
|
81
81
|
`;continue}if(e.state.env.has(`${i}__length`)){s+=`declare -a ${i}=()
|
|
82
|
-
`;continue}let c=e.state.env.get(i);if(c!==void 0)s+=`declare ${o} ${i}=${
|
|
82
|
+
`;continue}let c=e.state.env.get(i);if(c!==void 0)s+=`declare ${o} ${i}=${Zs(c)}
|
|
83
83
|
`;else{let u=e.state.declaredVars?.has(i),f=e.state.localVarDepth?.has(i);u||f?s+=`declare ${o} ${i}
|
|
84
84
|
`:(r+=`bash: declare: ${i}: not found
|
|
85
|
-
`,n=!0)}}return C(s,r,n?1:0)}function
|
|
86
|
-
`;else{let v=
|
|
87
|
-
`}continue}if(
|
|
85
|
+
`,n=!0)}}return C(s,r,n?1:0)}function kn(e,t){let{filterExport:s,filterReadonly:r,filterNameref:n,filterIndexedArray:i,filterAssocArray:o}=t,a=s||r||n||i||o,l="",c=new Set;for(let f of e.state.env.keys()){if(f.startsWith("BASH_"))continue;if(f.endsWith("__length")){let p=f.slice(0,-8);c.add(p);continue}let d=f.lastIndexOf("_");if(d>0){let p=f.slice(0,d),y=f.slice(d+1);if(/^\d+$/.test(y)||e.state.associativeArrays?.has(p)){c.add(p);continue}}c.add(f)}if(e.state.localVarDepth)for(let f of e.state.localVarDepth.keys())c.add(f);if(e.state.associativeArrays)for(let f of e.state.associativeArrays)c.add(f);let u=Array.from(c).sort();for(let f of u){let d=Pn(e,f),p=e.state.associativeArrays?.has(f),y=re(e,f),h=!p&&(y.length>0||e.state.env.has(`${f}__length`));if(a&&(o&&!p||i&&!h||s&&!e.state.exportedVars?.has(f)||r&&!e.state.readonlyVars?.has(f)||n&&!ve(e,f)))continue;if(p){let b=Ve(e,f);if(b.length===0)l+=`declare -A ${f}=()
|
|
86
|
+
`;else{let v=b.map(P=>{let g=e.state.env.get(`${f}_${P}`)??"",w=qs(g);return`['${P}']=${w}`});l+=`declare -A ${f}=(${v.join(" ")})
|
|
87
|
+
`}continue}if(y.length>0){let b=y.map(v=>{let P=e.state.env.get(`${f}_${v}`)??"";return`[${v}]=${Ye(P)}`});l+=`declare -a ${f}=(${b.join(" ")})
|
|
88
88
|
`;continue}if(e.state.env.has(`${f}__length`)){l+=`declare -a ${f}=()
|
|
89
|
-
`;continue}let
|
|
90
|
-
`)}return M(l)}function
|
|
91
|
-
`;else{let i=n.map(o=>{let a=e.state.env.get(`${r}_${o}`)??"",l=
|
|
92
|
-
`}}return M(t)}function
|
|
93
|
-
`;else{let o=i.map(a=>{let l=e.state.env.get(`${n}_${a}`)??"";return`[${a}]=${
|
|
94
|
-
`}}return M(t)}function
|
|
95
|
-
`)}return M(t)}function
|
|
96
|
-
`,2)}}}else if(R==="-i")f=!0;else if(R==="-l")d=!0;else if(R==="-u")p=!0;else if(R==="-f")
|
|
97
|
-
`,2);else
|
|
98
|
-
`;return M(_)}let N=!0,R="";for(let k of
|
|
99
|
-
`:N=!1;return C(R,"",N?0:1)}if(
|
|
89
|
+
`;continue}let m=e.state.env.get(f);m!==void 0&&(l+=`declare ${d} ${f}=${Zs(m)}
|
|
90
|
+
`)}return M(l)}function Cn(e){let t="",s=Array.from(e.state.associativeArrays??[]).sort();for(let r of s){let n=Ve(e,r);if(n.length===0)t+=`declare -A ${r}=()
|
|
91
|
+
`;else{let i=n.map(o=>{let a=e.state.env.get(`${r}_${o}`)??"",l=qs(a);return`['${o}']=${l}`});t+=`declare -A ${r}=(${i.join(" ")})
|
|
92
|
+
`}}return M(t)}function _n(e){let t="",s=new Set;for(let n of e.state.env.keys()){if(n.startsWith("BASH_"))continue;if(n.endsWith("__length")){let o=n.slice(0,-8);e.state.associativeArrays?.has(o)||s.add(o);continue}let i=n.lastIndexOf("_");if(i>0){let o=n.slice(0,i),a=n.slice(i+1);/^\d+$/.test(a)&&(e.state.associativeArrays?.has(o)||s.add(o))}}let r=Array.from(s).sort();for(let n of r){let i=re(e,n);if(i.length===0)t+=`declare -a ${n}=()
|
|
93
|
+
`;else{let o=i.map(a=>{let l=e.state.env.get(`${n}_${a}`)??"";return`[${a}]=${Ye(l)}`});t+=`declare -a ${n}=(${o.join(" ")})
|
|
94
|
+
`}}return M(t)}function Nn(e){let t="",s=new Set;for(let n of e.state.env.keys()){if(n.startsWith("BASH_"))continue;if(n.endsWith("__length")){let o=n.slice(0,-8);s.add(o);continue}let i=n.lastIndexOf("_");if(i>0){let o=n.slice(0,i),a=n.slice(i+1);if(/^\d+$/.test(a)||e.state.associativeArrays?.has(o)){s.add(o);continue}}s.add(n)}let r=Array.from(s).sort();for(let n of r){if(e.state.associativeArrays?.has(n)||re(e,n).length>0||e.state.env.has(`${n}__length`))continue;let a=e.state.env.get(n);a!==void 0&&(t+=`${n}=${rs(a)}
|
|
95
|
+
`)}return M(t)}function Gs(e,t){e.state.integerVars??=new Set,e.state.integerVars.add(t)}function vt(e,t){return e.state.integerVars?.has(t)??!1}function Ks(e,t){e.state.lowercaseVars??=new Set,e.state.lowercaseVars.add(t),e.state.uppercaseVars?.delete(t)}function Co(e,t){return e.state.lowercaseVars?.has(t)??!1}function Xs(e,t){e.state.uppercaseVars??=new Set,e.state.uppercaseVars.add(t),e.state.lowercaseVars?.delete(t)}function _o(e,t){return e.state.uppercaseVars?.has(t)??!1}function lt(e,t,s){return Co(e,t)?s.toLowerCase():_o(e,t)?s.toUpperCase():s}async function On(e,t){try{let s=new B,r=ee(s,t),n=await H(e,r.expression);return String(n)}catch{return"0"}}function No(e){let t=e.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);if(!t)return null;let s=t[0],r=s.length;if(e[r]!=="[")return null;let n=0,i=r+1;for(;r<e.length;r++)if(e[r]==="[")n++;else if(e[r]==="]"&&(n--,n===0))break;if(n!==0)return null;let o=e.slice(i,r);if(r++,e[r]!=="=")return null;r++;let a=e.slice(r);return{name:s,indexExpr:o,value:a}}async function Ys(e,t){let s=!1,r=!1,n=!1,i=!1,o=!1,a=!1,l=!1,c=!1,u=!1,f=!1,d=!1,p=!1,y=!1,h=!1,m=!1,b=[];for(let N=0;N<t.length;N++){let R=t[N];if(R==="-a")s=!0;else if(R==="-A")r=!0;else if(R==="-r")n=!0;else if(R==="-x")i=!0;else if(R==="-p")o=!0;else if(R==="-n")a=!0;else if(R==="+n")l=!0;else if(R==="+a")c=!0;else if(R==="+x")u=!0;else if(R==="--"){b.push(...t.slice(N+1));break}else if(R.startsWith("+")){for(let k of R.slice(1))if(k==="n")l=!0;else if(k==="a")c=!0;else if(k==="x")u=!0;else if(k!=="r"){if(k!=="i"){if(!(k==="f"||k==="F"))return C("",`bash: typeset: +${k}: invalid option
|
|
96
|
+
`,2)}}}else if(R==="-i")f=!0;else if(R==="-l")d=!0;else if(R==="-u")p=!0;else if(R==="-f")y=!0;else if(R==="-F")h=!0;else if(R==="-g")m=!0;else if(R.startsWith("-"))for(let k of R.slice(1))if(k==="a")s=!0;else if(k==="A")r=!0;else if(k==="r")n=!0;else if(k==="x")i=!0;else if(k==="p")o=!0;else if(k==="n")a=!0;else if(k==="i")f=!0;else if(k==="l")d=!0;else if(k==="u")p=!0;else if(k==="f")y=!0;else if(k==="F")h=!0;else if(k==="g")m=!0;else return C("",`bash: typeset: -${k}: invalid option
|
|
97
|
+
`,2);else b.push(R)}let P=e.state.localScopes.length>0&&!m,g=N=>{if(!P)return;let R=e.state.localScopes[e.state.localScopes.length-1];R.has(N)||R.set(N,e.state.env.get(N))},w=N=>{if(!P)return;let R=e.state.localScopes[e.state.localScopes.length-1];R.has(N)||R.set(N,e.state.env.get(N));let k=`${N}_`;for(let O of e.state.env.keys())O.startsWith(k)&&!O.includes("__")&&(R.has(O)||R.set(O,e.state.env.get(O)));let _=`${N}__length`;e.state.env.has(_)&&!R.has(_)&&R.set(_,e.state.env.get(_))},E=N=>{P&&Ue(e,N)};if(h){if(b.length===0){let k=Array.from(e.state.functions.keys()).sort(),_="";for(let O of k)_+=`declare -f ${O}
|
|
98
|
+
`;return M(_)}let N=!0,R="";for(let k of b)e.state.functions.has(k)?R+=`${k}
|
|
99
|
+
`:N=!1;return C(R,"",N?0:1)}if(y){if(b.length===0){let R="",k=Array.from(e.state.functions.keys()).sort();for(let _ of k)R+=`${_} ()
|
|
100
100
|
{
|
|
101
101
|
# function body
|
|
102
102
|
}
|
|
103
|
-
`;return M(R)}let N=!0;for(let R of
|
|
104
|
-
`,T=1;continue}if((s||!r&&!s)&&e.state.associativeArrays?.has(
|
|
105
|
-
`,T=1;continue}if(w(
|
|
106
|
-
`,T=1;continue}let
|
|
107
|
-
`,T=1;continue}e.state.env.set(x,L),Te(e,x),L!==""
|
|
108
|
-
`,T=1;continue}if(s||r?w(
|
|
109
|
-
`,T=1;continue}e.state.associativeArrays??=new Set,e.state.associativeArrays.add(
|
|
110
|
-
`}}return M(o)}for(let o of i){let a=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(a){let f=a[1],d=a[2],p=
|
|
103
|
+
`;return M(R)}let N=!0;for(let R of b)e.state.functions.has(R)||(N=!1);return C("","",N?0:1)}if(o&&b.length>0)return An(e,b);if(o&&b.length===0)return kn(e,{filterExport:i,filterReadonly:n,filterNameref:a,filterIndexedArray:s,filterAssocArray:r});if(b.length===0&&r&&!o)return Cn(e);if(b.length===0&&s&&!o)return _n(e);if(b.length===0&&!o)return Nn(e);let $="",T=0;for(let N of b){let R=N.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(R&&!c){let S=R[1],x=R[2];if(r&&re(e,S).length>0){$+=`bash: declare: ${S}: cannot convert indexed to associative array
|
|
104
|
+
`,T=1;continue}if((s||!r&&!s)&&e.state.associativeArrays?.has(S)){$+=`bash: declare: ${S}: cannot convert associative to indexed array
|
|
105
|
+
`,T=1;continue}if(w(S),r&&(e.state.associativeArrays??=new Set,e.state.associativeArrays.add(S)),ke(e,S),e.state.env.delete(S),e.state.env.delete(`${S}__length`),r&&x.includes("[")){let L=Qt(x);for(let[te,V]of L){let Y=X(e,V);e.state.env.set(`${S}_${te}`,Y)}}else if(r){let L=Ne(x);for(let te=0;te<L.length;te+=2){let V=L[te],Y=te+1<L.length?X(e,L[te+1]):"";e.state.env.set(`${S}_${V}`,Y)}}else{let L=Ne(x);if(L.some(V=>/^\[[^\]]+\]=/.test(V))){let V=0;for(let Y of L){let ae=Y.match(/^\[([^\]]+)\]=(.*)$/);if(ae){let he=ae[1],et=ae[2],xi=X(e,et),ht;if(/^-?\d+$/.test(he))ht=Number.parseInt(he,10);else try{let Di=new B,Ti=ee(Di,he);ht=await H(e,Ti.expression)}catch{ht=0}e.state.env.set(`${S}_${ht}`,xi),V=ht+1}else{let he=X(e,Y);e.state.env.set(`${S}_${V}`,he),V++}}}else{for(let V=0;V<L.length;V++)e.state.env.set(`${S}_${V}`,L[V]);e.state.env.set(`${S}__length`,String(L.length))}}E(S),n&&de(e,S),i&&Pe(e,S);continue}if(l){let S=N.includes("=")?N.slice(0,N.indexOf("=")):N;if(Ir(e,S),!N.includes("="))continue}if(u){let S=N.includes("=")?N.slice(0,N.indexOf("=")):N;if(Mt(e,S),!N.includes("="))continue}let k=No(N);if(k){let{name:S,indexExpr:x,value:L}=k,te=se(e,S);if(te)return te;w(S);let V;try{let ae=new B,he=ee(ae,x);V=await H(e,he.expression)}catch{let ae=parseInt(x,10);V=Number.isNaN(ae)?0:ae}e.state.env.set(`${S}_${V}`,L);let Y=parseInt(e.state.env.get(`${S}__length`)??"0",10);V>=Y&&e.state.env.set(`${S}__length`,String(V+1)),E(S),n&&de(e,S),i&&Pe(e,S);continue}let _=N.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(_&&!c){let S=_[1],x=_[2],L=se(e,S);if(L)return L;w(S);let te=Ne(x);if(e.state.associativeArrays?.has(S)){let V=Qt(x);for(let[Y,ae]of V){let he=X(e,ae);e.state.env.set(`${S}_${Y}`,he)}}else{let V=re(e,S),Y=0,ae=e.state.env.get(S);V.length===0&&ae!==void 0?(e.state.env.set(`${S}_0`,ae),e.state.env.delete(S),Y=1):V.length>0&&(Y=Math.max(...V)+1);for(let et=0;et<te.length;et++)e.state.env.set(`${S}_${Y+et}`,X(e,te[et]));let he=Y+te.length;e.state.env.set(`${S}__length`,String(he))}E(S),n&&de(e,S),i&&Pe(e,S);continue}let O=N.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(O){let S=O[1],x=X(e,O[2]),L=se(e,S);if(L)return L;g(S),f&&Gs(e,S),d&&Ks(e,S),p&&Xs(e,S);let V=re(e,S).length>0||e.state.associativeArrays?.has(S);if(vt(e,S)){let Y=e.state.env.get(S)??"0",ae=parseInt(Y,10)||0,he=parseInt(await On(e,x),10)||0;x=String(ae+he),e.state.env.set(S,x)}else if(V){x=lt(e,S,x);let Y=`${S}_0`,ae=e.state.env.get(Y)??"";e.state.env.set(Y,ae+x)}else{x=lt(e,S,x);let Y=e.state.env.get(S)??"";e.state.env.set(S,Y+x)}E(S),n&&de(e,S),i&&Pe(e,S),e.state.options.allexport&&!u&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(S));continue}if(N.includes("=")){let S=N.indexOf("="),x=N.slice(0,S),L=N.slice(S+1);if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(x)){$+=`bash: typeset: \`${x}': not a valid identifier
|
|
106
|
+
`,T=1;continue}let te=se(e,x);if(te)return te;if(g(x),a){if(L!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(L)){$+=`bash: declare: \`${L}': invalid variable name for name reference
|
|
107
|
+
`,T=1;continue}e.state.env.set(x,L),Te(e,x),L!==""&&$s(e,L)&&Es(e,x),E(x),n&&de(e,x),i&&Pe(e,x);continue}if(f&&Gs(e,x),d&&Ks(e,x),p&&Xs(e,x),vt(e,x)&&(L=await On(e,L)),L=lt(e,x,L),ve(e,x)){let V=Be(e,x);V&&V!==x?e.state.env.set(V,L):e.state.env.set(x,L)}else e.state.env.set(x,L);E(x),n&&de(e,x),i&&Pe(e,x),e.state.options.allexport&&!u&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(x))}else{let S=N;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(S)){$+=`bash: typeset: \`${S}': not a valid identifier
|
|
108
|
+
`,T=1;continue}if(s||r?w(S):g(S),a){Te(e,S);let L=e.state.env.get(S);L!==void 0&&L!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(L)?Rr(e,S):L&&$s(e,L)&&Es(e,S),E(S),n&&de(e,S),i&&Pe(e,S);continue}if(f&&Gs(e,S),d&&Ks(e,S),p&&Xs(e,S),r){if(re(e,S).length>0){$+=`bash: declare: ${S}: cannot convert indexed to associative array
|
|
109
|
+
`,T=1;continue}e.state.associativeArrays??=new Set,e.state.associativeArrays.add(S)}let x=Array.from(e.state.env.keys()).some(L=>L.startsWith(`${S}_`)&&!L.startsWith(`${S}__length`));!e.state.env.has(S)&&!x&&(s||r?e.state.env.set(`${S}__length`,"0"):(e.state.declaredVars??=new Set,e.state.declaredVars.add(S))),E(S),n&&de(e,S),i&&Pe(e,S)}}return C("",$,T)}async function Qs(e,t){let s=!1,r=!1,n=!1,i=[];for(let o=0;o<t.length;o++){let a=t[o];if(a==="-a")s=!0;else if(a==="-A")r=!0;else if(a==="-p")n=!0;else if(a==="--"){i.push(...t.slice(o+1));break}else a.startsWith("-")||i.push(a)}if(i.length===0){let o="",a=Array.from(e.state.readonlyVars||[]).sort();for(let l of a){let c=e.state.env.get(l);if(c!==void 0){let u=c.replace(/\\/g,"\\\\").replace(/"/g,'\\"');o+=`declare -r ${l}="${u}"
|
|
110
|
+
`}}return M(o)}for(let o of i){let a=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(a){let f=a[1],d=a[2],p=se(e,f);if(p)return p;let y=Ne(d);if(e.state.associativeArrays?.has(f)){let h=Qt(d);for(let[m,b]of h){let v=X(e,b);e.state.env.set(`${f}_${m}`,v)}}else{let h=re(e,f),m=0,b=e.state.env.get(f);h.length===0&&b!==void 0?(e.state.env.set(`${f}_0`,b),e.state.env.delete(f),m=1):h.length>0&&(m=Math.max(...h)+1);for(let P=0;P<y.length;P++)e.state.env.set(`${f}_${m+P}`,X(e,y[P]));let v=m+y.length;e.state.env.set(`${f}__length`,String(v))}de(e,f);continue}let l=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(l){let f=l[1],d=X(e,l[2]),p=se(e,f);if(p)return p;let y=e.state.env.get(f)??"";e.state.env.set(f,y+d),de(e,f);continue}let c=pn(o);if(c.value===void 0&&!c.isArray){de(e,c.name);continue}let u=await mn(e,c,{makeReadonly:!0});if(u)return u}return F}function Js(e){return e.state.directoryStack??=[],e.state.directoryStack}function bt(e,t){return t&&e===t?"~":t&&e.startsWith(`${t}/`)?`~${e.slice(t.length)}`:e}function Oo(e){let t=e.split("/").filter(r=>r&&r!=="."),s=[];for(let r of t)r===".."?s.pop():s.push(r);return`/${s.join("/")}`}async function er(e,t){let s=Js(e),r;for(let a=0;a<t.length;a++){let l=t[a];if(l==="--"){if(a+1<t.length){if(r!==void 0)return A(`bash: pushd: too many arguments
|
|
111
111
|
`,2);r=t[a+1],a++}}else{if(l.startsWith("-")&&l!=="-")return A(`bash: pushd: ${l}: invalid option
|
|
112
112
|
`,2);if(r!==void 0)return A(`bash: pushd: too many arguments
|
|
113
113
|
`,2);r=l}}if(r===void 0){if(s.length<2)return A(`bash: pushd: no other directory
|
|
114
|
-
`,1);let a=s[0];s[0]=s[1],s[1]=a,r=s[0]}let n;if(r.startsWith("/"))n=r;else if(r===".."){let a=e.state.cwd.split("/").filter(l=>l);a.pop(),n=`/${a.join("/")}`}else r==="."?n=e.state.cwd:r.startsWith("~")?n=(e.state.env.get("HOME")||"/")+r.slice(1):n=`${e.state.cwd}/${r}`;n=
|
|
114
|
+
`,1);let a=s[0];s[0]=s[1],s[1]=a,r=s[0]}let n;if(r.startsWith("/"))n=r;else if(r===".."){let a=e.state.cwd.split("/").filter(l=>l);a.pop(),n=`/${a.join("/")}`}else r==="."?n=e.state.cwd:r.startsWith("~")?n=(e.state.env.get("HOME")||"/")+r.slice(1):n=`${e.state.cwd}/${r}`;n=Oo(n);try{if(!(await e.fs.stat(n)).isDirectory)return A(`bash: pushd: ${r}: Not a directory
|
|
115
115
|
`,1)}catch{return A(`bash: pushd: ${r}: No such file or directory
|
|
116
|
-
`,1)}s.unshift(e.state.cwd),e.state.previousDir=e.state.cwd,e.state.cwd=n,e.state.env.set("PWD",n),e.state.env.set("OLDPWD",e.state.previousDir);let i=e.state.env.get("HOME")||"",o=`${[n,...s].map(a=>
|
|
117
|
-
`;return M(o)}function
|
|
116
|
+
`,1)}s.unshift(e.state.cwd),e.state.previousDir=e.state.cwd,e.state.cwd=n,e.state.env.set("PWD",n),e.state.env.set("OLDPWD",e.state.previousDir);let i=e.state.env.get("HOME")||"",o=`${[n,...s].map(a=>bt(a,i)).join(" ")}
|
|
117
|
+
`;return M(o)}function tr(e,t){let s=Js(e);for(let o of t)if(o!=="--")return o.startsWith("-")&&o!=="-"?A(`bash: popd: ${o}: invalid option
|
|
118
118
|
`,2):A(`bash: popd: too many arguments
|
|
119
119
|
`,2);if(s.length===0)return A(`bash: popd: directory stack empty
|
|
120
120
|
`,1);let r=s.shift();if(!r)return A(`bash: popd: directory stack empty
|
|
121
|
-
`,1);e.state.previousDir=e.state.cwd,e.state.cwd=r,e.state.env.set("PWD",r),e.state.env.set("OLDPWD",e.state.previousDir);let n=e.state.env.get("HOME")||"",i=`${[r,...s].map(o=>
|
|
122
|
-
`;return M(i)}function
|
|
121
|
+
`,1);e.state.previousDir=e.state.cwd,e.state.cwd=r,e.state.env.set("PWD",r),e.state.env.set("OLDPWD",e.state.previousDir);let n=e.state.env.get("HOME")||"",i=`${[r,...s].map(o=>bt(o,n)).join(" ")}
|
|
122
|
+
`;return M(i)}function sr(e,t){let s=Js(e),r=!1,n=!1,i=!1,o=!1;for(let u of t)if(u!=="--")if(u.startsWith("-"))for(let f of u.slice(1))if(f==="c")r=!0;else if(f==="l")n=!0;else if(f==="p")i=!0;else if(f==="v")i=!0,o=!0;else return A(`bash: dirs: -${f}: invalid option
|
|
123
123
|
`,2);else return A(`bash: dirs: too many arguments
|
|
124
|
-
`,1);if(r)return e.state.directoryStack=[],F;let a=[e.state.cwd,...s],l=e.state.env.get("HOME")||"",c;return o?(c=a.map((u,f)=>{let d=n?u:
|
|
124
|
+
`,1);if(r)return e.state.directoryStack=[],F;let a=[e.state.cwd,...s],l=e.state.env.get("HOME")||"",c;return o?(c=a.map((u,f)=>{let d=n?u:bt(u,l);return` ${f} ${d}`}).join(`
|
|
125
125
|
`),c+=`
|
|
126
|
-
`):i?c=a.map(u=>n?u:
|
|
126
|
+
`):i?c=a.map(u=>n?u:bt(u,l)).join(`
|
|
127
127
|
`)+`
|
|
128
|
-
`:c=a.map(u=>n?u:
|
|
129
|
-
`,M(c)}async function
|
|
128
|
+
`:c=a.map(u=>n?u:bt(u,l)).join(" ")+`
|
|
129
|
+
`,M(c)}async function ns(e,t,s){let r=t;if(r.length>0){let a=r[0];if(a==="--")r=r.slice(1);else if(a.startsWith("-")&&a!=="-"&&a.length>1)return A(`bash: eval: ${a}: invalid option
|
|
130
130
|
eval: usage: eval [arg ...]
|
|
131
|
-
`,2)}if(r.length===0)return F;let n=r.join(" ");if(n.trim()==="")return F;let i=e.state.groupStdin,o=s??e.state.groupStdin;o!==void 0&&(e.state.groupStdin=o);try{let a=fe(n);return await e.executeScript(a)}catch(a){if(a instanceof
|
|
132
|
-
`);throw a}finally{e.state.groupStdin=i}}function
|
|
133
|
-
`,s=2):s=(i%256+256)%256}throw new j(s,"",r)}function
|
|
134
|
-
`}}return M(o)}if(s){for(let o of r){let a,l;if(o.includes("=")){let c=o.indexOf("=");a=o.slice(0,c),l=
|
|
135
|
-
`,i=1;continue}if(l!==void 0)if(c){let f=e.state.env.get(a)??"";e.state.env.set(a,f+l)}else e.state.env.set(a,l);else e.state.env.has(a)||e.state.env.set(a,"");
|
|
136
|
-
`);let s=t[0],r=t[1],n=!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r),i=s.startsWith(":"),o=i?s.slice(1):s,a;if(t.length>2)a=t.slice(2);else{let h=Number.parseInt(e.state.env.get("#")||"0",10);a=[];for(let
|
|
131
|
+
`,2)}if(r.length===0)return F;let n=r.join(" ");if(n.trim()==="")return F;let i=e.state.groupStdin,o=s??e.state.groupStdin;o!==void 0&&(e.state.groupStdin=o);try{let a=fe(n);return await e.executeScript(a)}catch(a){if(a instanceof me||a instanceof ye||a instanceof ue||a instanceof j)throw a;if(a.name==="ParseException")return A(`bash: eval: ${a.message}
|
|
132
|
+
`);throw a}finally{e.state.groupStdin=i}}function rr(e,t){let s,r="";if(t.length===0)s=e.state.lastExitCode;else{let n=t[0],i=Number.parseInt(n,10);n===""||Number.isNaN(i)||!/^-?\d+$/.test(n)?(r=`bash: exit: ${n}: numeric argument required
|
|
133
|
+
`,s=2):s=(i%256+256)%256}throw new j(s,"",r)}function nr(e,t){let s=!1,r=[];for(let o of t)o==="-n"?s=!0:o==="-p"||o==="--"||r.push(o);if(r.length===0&&!s){let o="",a=e.state.exportedVars??new Set,l=Array.from(a).sort();for(let c of l){let u=e.state.env.get(c);if(u!==void 0){let f=u.replace(/\\/g,"\\\\").replace(/"/g,'\\"');o+=`declare -x ${c}="${f}"
|
|
134
|
+
`}}return M(o)}if(s){for(let o of r){let a,l;if(o.includes("=")){let c=o.indexOf("=");a=o.slice(0,c),l=X(e,o.slice(c+1)),e.state.env.set(a,l)}else a=o;Mt(e,a)}return F}let n="",i=0;for(let o of r){let a,l,c=!1,u=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(u)a=u[1],l=X(e,u[2]),c=!0;else if(o.includes("=")){let f=o.indexOf("=");a=o.slice(0,f),l=X(e,o.slice(f+1))}else a=o;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(a)){n+=`bash: export: \`${o}': not a valid identifier
|
|
135
|
+
`,i=1;continue}if(l!==void 0)if(c){let f=e.state.env.get(a)??"";e.state.env.set(a,f+l)}else e.state.env.set(a,l);else e.state.env.has(a)||e.state.env.set(a,"");Pe(e,a)}return C("",n,i)}function is(e,t){if(t.length<2)return A(`bash: getopts: usage: getopts optstring name [arg ...]
|
|
136
|
+
`);let s=t[0],r=t[1],n=!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r),i=s.startsWith(":"),o=i?s.slice(1):s,a;if(t.length>2)a=t.slice(2);else{let h=Number.parseInt(e.state.env.get("#")||"0",10);a=[];for(let m=1;m<=h;m++)a.push(e.state.env.get(String(m))||"")}let l=Number.parseInt(e.state.env.get("OPTIND")||"1",10);l<1&&(l=1);let c=Number.parseInt(e.state.env.get("__GETOPTS_CHARINDEX")||"0",10);if(e.state.env.set("OPTARG",""),l>a.length)return n||e.state.env.set(r,"?"),e.state.env.set("OPTIND",String(a.length+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"),{exitCode:n?2:1,stdout:"",stderr:""};let u=a[l-1];if(!u||u==="-"||!u.startsWith("-"))return n||e.state.env.set(r,"?"),{exitCode:n?2:1,stdout:"",stderr:""};if(u==="--")return e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"),n||e.state.env.set(r,"?"),{exitCode:n?2:1,stdout:"",stderr:""};let f=c===0?1:c,d=u[f];if(!d)return e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"),is(e,t);let p=o.indexOf(d);if(p===-1){let h="";return i?e.state.env.set("OPTARG",d):h=`bash: illegal option -- ${d}
|
|
137
137
|
`,n||e.state.env.set(r,"?"),f+1<u.length?(e.state.env.set("__GETOPTS_CHARINDEX",String(f+1)),e.state.env.set("OPTIND",String(l))):(e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0")),{exitCode:n?2:0,stdout:"",stderr:h}}if(p+1<o.length&&o[p+1]===":")if(f+1<u.length)e.state.env.set("OPTARG",u.slice(f+1)),e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0");else{if(l>=a.length){let h="";return i?(e.state.env.set("OPTARG",d),n||e.state.env.set(r,":")):(h=`bash: option requires an argument -- ${d}
|
|
138
|
-
`,n||e.state.env.set(r,"?")),e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"),{exitCode:n?2:0,stdout:"",stderr:h}}e.state.env.set("OPTARG",a[l]),e.state.env.set("OPTIND",String(l+2)),e.state.env.set("__GETOPTS_CHARINDEX","0")}else f+1<u.length?(e.state.env.set("__GETOPTS_CHARINDEX",String(f+1)),e.state.env.set("OPTIND",String(l))):(e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"));return n||e.state.env.set(r,d),{exitCode:n?2:0,stdout:"",stderr:""}}async function
|
|
139
|
-
`,1);a=t[c],c++}else if(
|
|
138
|
+
`,n||e.state.env.set(r,"?")),e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"),{exitCode:n?2:0,stdout:"",stderr:h}}e.state.env.set("OPTARG",a[l]),e.state.env.set("OPTIND",String(l+2)),e.state.env.set("__GETOPTS_CHARINDEX","0")}else f+1<u.length?(e.state.env.set("__GETOPTS_CHARINDEX",String(f+1)),e.state.env.set("OPTIND",String(l))):(e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"));return n||e.state.env.set(r,d),{exitCode:n?2:0,stdout:"",stderr:""}}async function ir(e,t){e.state.hashTable||(e.state.hashTable=new Map);let s=!1,r=!1,n=!1,i=!1,o=!1,a="",l=[],c=0;for(;c<t.length;){let y=t[c];if(y==="--"){c++,l.push(...t.slice(c));break}if(y==="-r")s=!0,c++;else if(y==="-d")r=!0,c++;else if(y==="-l")n=!0,c++;else if(y==="-t")o=!0,c++;else if(y==="-p"){if(i=!0,c++,c>=t.length)return A(`bash: hash: -p: option requires an argument
|
|
139
|
+
`,1);a=t[c],c++}else if(y.startsWith("-")&&y.length>1){for(let h of y.slice(1))if(h==="r")s=!0;else if(h==="d")r=!0;else if(h==="l")n=!0;else if(h==="t")o=!0;else return h==="p"?A(`bash: hash: -p: option requires an argument
|
|
140
140
|
`,1):A(`bash: hash: -${h}: invalid option
|
|
141
|
-
`,1);c++}else l.push(
|
|
142
|
-
`,1);let
|
|
143
|
-
`,
|
|
144
|
-
`,1);let
|
|
145
|
-
`:
|
|
146
|
-
`:(
|
|
147
|
-
`,h=!0)}return h?{exitCode:1,stdout:
|
|
148
|
-
`,1);let
|
|
149
|
-
`);let
|
|
150
|
-
`;else{
|
|
151
|
-
`;for(let[,h]of e.state.hashTable)
|
|
152
|
-
`}return M(
|
|
153
|
-
`,u=!0;continue}let h=!1;for(let
|
|
154
|
-
`,u=!0)}return u?A(f,1):F}var
|
|
141
|
+
`,1);c++}else l.push(y),c++}if(s)return e.state.hashTable.clear(),F;if(r){if(l.length===0)return A(`bash: hash: -d: option requires an argument
|
|
142
|
+
`,1);let y=!1,h="";for(let m of l)e.state.hashTable.has(m)?e.state.hashTable.delete(m):(h+=`bash: hash: ${m}: not found
|
|
143
|
+
`,y=!0);return y?A(h,1):F}if(o){if(l.length===0)return A(`bash: hash: -t: option requires an argument
|
|
144
|
+
`,1);let y="",h=!1,m="";for(let b of l){let v=e.state.hashTable.get(b);v?l.length>1?y+=`${b} ${v}
|
|
145
|
+
`:y+=`${v}
|
|
146
|
+
`:(m+=`bash: hash: ${b}: not found
|
|
147
|
+
`,h=!0)}return h?{exitCode:1,stdout:y,stderr:m}:M(y)}if(i){if(l.length===0)return A(`bash: hash: usage: hash [-lr] [-p pathname] [-dt] [name ...]
|
|
148
|
+
`,1);let y=l[0];return e.state.hashTable.set(y,a),F}if(l.length===0){if(e.state.hashTable.size===0)return M(`hash: hash table empty
|
|
149
|
+
`);let y="";if(n)for(let[h,m]of e.state.hashTable)y+=`builtin hash -p ${m} ${h}
|
|
150
|
+
`;else{y=`hits command
|
|
151
|
+
`;for(let[,h]of e.state.hashTable)y+=` 1 ${h}
|
|
152
|
+
`}return M(y)}let u=!1,f="",p=(e.state.env.get("PATH")||"/usr/bin:/bin").split(":");for(let y of l){if(y.includes("/")){f+=`bash: hash: ${y}: cannot use / in name
|
|
153
|
+
`,u=!0;continue}let h=!1;for(let m of p){if(!m)continue;let b=`${m}/${y}`;if(await e.fs.exists(b)){e.state.hashTable.set(y,b),h=!0;break}}h||(f+=`bash: hash: ${y}: not found
|
|
154
|
+
`,u=!0)}return u?A(f,1):F}var xn=new Map([[":",[": [arguments]",`Null command.
|
|
155
155
|
No effect; the command does nothing.
|
|
156
156
|
Exit Status:
|
|
157
157
|
Always succeeds.`]],[".",[". filename [arguments]",`Execute commands from a file in the current shell.
|
|
@@ -496,32 +496,32 @@ eval: usage: eval [arg ...]
|
|
|
496
496
|
job specification, and reports its termination status.
|
|
497
497
|
Exit Status:
|
|
498
498
|
Returns the status of the last ID; fails if ID is invalid or an invalid
|
|
499
|
-
option is given.`]]]),
|
|
500
|
-
`,2)}n++}else r.push(l),n++}if(r.length===0)return
|
|
501
|
-
`,o=!0;continue}for(let u of c){let f=
|
|
499
|
+
option is given.`]]]),Dn=[...xn.keys()].sort();function or(e,t){let s=!1,r=[],n=0;for(;n<t.length;){let l=t[n];if(l==="--"){for(n++;n<t.length;)r.push(t[n]),n++;break}if(l.startsWith("-")&&l.length>1){for(let c=1;c<l.length;c++){let u=l[c];if(u==="s")s=!0;else return A(`bash: help: -${u}: invalid option
|
|
500
|
+
`,2)}n++}else r.push(l),n++}if(r.length===0)return Do();let i="",o=!1,a="";for(let l of r){let c=xo(l);if(c.length===0){a+=`bash: help: no help topics match \`${l}'. Try \`help help' or \`man -k ${l}' or \`info ${l}'.
|
|
501
|
+
`,o=!0;continue}for(let u of c){let f=xn.get(u);if(!f)continue;let[d,p]=f;s?i+=`${u}: ${d}
|
|
502
502
|
`:i+=`${u}: ${d}
|
|
503
503
|
${p}
|
|
504
|
-
`}}return{exitCode:o?1:0,stdout:i,stderr:a}}function
|
|
504
|
+
`}}return{exitCode:o?1:0,stdout:i,stderr:a}}function xo(e){let t=e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,"."),s=pt(`^${t}$`);return Dn.filter(r=>s.test(r))}function Do(){let e=[];e.push("just-bash shell builtins"),e.push("These shell commands are defined internally. Type `help' to see this list."),e.push("Type `help name' to find out more about the function `name'."),e.push("");let t=36,s=Dn.slice(),r=Math.ceil(s.length/2);for(let n=0;n<r;n++){let i=s[n]||"",o=s[n+r]||"",a=i.padEnd(t);e.push(o?`${a}${o}`:i)}return M(`${e.join(`
|
|
505
505
|
`)}
|
|
506
|
-
`)}function
|
|
507
|
-
`);let s=
|
|
508
|
-
`)}return C("","",r===0?1:0)}async function
|
|
506
|
+
`)}function To(e){let t=[],s="",r=0;for(let n of e){for(let i of n)i==="("?r++:i===")"&&r--;s?s+=` ${n}`:s=n,r===0&&(t.push(s),s="")}return s&&t.push(s),t}async function ar(e,t){if(t.length===0)return A(`bash: let: expression expected
|
|
507
|
+
`);let s=To(t),r=0;for(let n of s)try{let o=fe(`(( ${n} ))`).statements[0];if(o&&o.pipelines.length>0&&o.pipelines[0].commands.length>0){let a=o.pipelines[0].commands[0];a.type==="ArithmeticCommand"&&(r=await H(e,a.expression.expression))}}catch(i){return A(`bash: let: ${n}: ${i.message}
|
|
508
|
+
`)}return C("","",r===0?1:0)}async function lr(e,t){if(e.state.localScopes.length===0)return A(`bash: local: can only be used in a function
|
|
509
509
|
`);let s=e.state.localScopes[e.state.localScopes.length-1],r="",n=0,i=!1,o=!1,a=!1,l=[];for(let c of t)if(c==="-n")i=!0;else if(c==="-a")o=!0;else if(c==="-p")a=!0;else if(c.startsWith("-")&&!c.includes("="))for(let u of c.slice(1))u==="n"?i=!0:u==="a"?o=!0:u==="p"&&(a=!0);else l.push(c);if(l.length===0){let c="",u=Array.from(s.keys()).filter(f=>!f.includes("_")||!f.match(/_\d+$/)).filter(f=>!f.includes("__length")).sort();for(let f of u){let d=e.state.env.get(f);d!==void 0&&(c+=`${f}=${d}
|
|
510
|
-
`)}return C(c,"",0)}for(let c of l){let u,f,d=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(d){u=d[1];let
|
|
511
|
-
`,n=1;continue}if(
|
|
512
|
-
`,n=1;continue}let
|
|
513
|
-
`,n=1;continue}e.state.env.set(u,f),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(u))}else{let
|
|
510
|
+
`)}return C(c,"",0)}for(let c of l){let u,f,d=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(d){u=d[1];let b=d[2];if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(u)){r+=`bash: local: \`${c}': not a valid identifier
|
|
511
|
+
`,n=1;continue}if(se(e,u,"bash"),!s.has(u)){s.set(u,e.state.env.get(u));let g=`${u}_`;for(let w of e.state.env.keys())w.startsWith(g)&&!w.includes("__")&&(s.has(w)||s.set(w,e.state.env.get(w)))}let v=`${u}_`;for(let g of e.state.env.keys())g.startsWith(v)&&!g.includes("__")&&e.state.env.delete(g);let P=Ne(b);for(let g=0;g<P.length;g++)e.state.env.set(`${u}_${g}`,P[g]);e.state.env.set(`${u}__length`,String(P.length)),Ue(e,u),i&&Te(e,u);continue}let p=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(p){u=p[1];let b=p[2];if(se(e,u,"bash"),!s.has(u)){s.set(u,e.state.env.get(u));let $=`${u}_`;for(let N of e.state.env.keys())N.startsWith($)&&!N.includes("__")&&(s.has(N)||s.set(N,e.state.env.get(N)));let T=`${u}__length`;e.state.env.has(T)&&!s.has(T)&&s.set(T,e.state.env.get(T))}let v=Ne(b),P=re(e,u),g=0,w=e.state.env.get(u);P.length===0&&w!==void 0?(e.state.env.set(`${u}_0`,w),e.state.env.delete(u),g=1):P.length>0&&(g=Math.max(...P)+1);for(let $=0;$<v.length;$++)e.state.env.set(`${u}_${g+$}`,X(e,v[$]));let E=g+v.length;e.state.env.set(`${u}__length`,String(E)),Ue(e,u),i&&Te(e,u);continue}let y=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(y){u=y[1];let b=X(e,y[2]);se(e,u,"bash"),s.has(u)||s.set(u,e.state.env.get(u));let v=e.state.env.get(u)??"";e.state.env.set(u,v+b),Ue(e,u),i&&Te(e,u);continue}let h=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([^\]]+)\]=(.*)$/s);if(h){u=h[1];let b=h[2],v=X(e,h[3]);if(se(e,u,"bash"),!s.has(u)){s.set(u,e.state.env.get(u));let w=`${u}_`;for(let $ of e.state.env.keys())$.startsWith(w)&&!$.includes("__")&&(s.has($)||s.set($,e.state.env.get($)));let E=`${u}__length`;e.state.env.has(E)&&!s.has(E)&&s.set(E,e.state.env.get(E))}let P;try{let w=new B,E=ee(w,b);P=await H(e,E.expression)}catch{let w=parseInt(b,10);P=Number.isNaN(w)?0:w}e.state.env.set(`${u}_${P}`,v);let g=parseInt(e.state.env.get(`${u}__length`)??"0",10);P>=g&&e.state.env.set(`${u}__length`,String(P+1)),Ue(e,u),i&&Te(e,u);continue}if(c.includes("=")){let b=c.indexOf("=");u=c.slice(0,b),f=X(e,c.slice(b+1))}else u=c;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(u)){r+=`bash: local: \`${c}': not a valid identifier
|
|
512
|
+
`,n=1;continue}let m=s.has(u);if(f!==void 0){let b=e.state.env.get(u);if(e.state.tempEnvBindings){let v=e.state.accessedTempEnvVars?.has(u),P=e.state.mutatedTempEnvVars?.has(u);if(!v&&!P)for(let g=e.state.tempEnvBindings.length-1;g>=0;g--){let w=e.state.tempEnvBindings[g];if(w.has(u)){b=w.get(u);break}}}yn(e,u,b)}if(!m){let b=e.state.env.get(u);if(e.state.tempEnvBindings)for(let v=e.state.tempEnvBindings.length-1;v>=0;v--){let P=e.state.tempEnvBindings[v];if(P.has(u)){b=P.get(u);break}}if(s.set(u,b),o){let v=`${u}_`;for(let g of e.state.env.keys())g.startsWith(v)&&!g.includes("__")&&(s.has(g)||s.set(g,e.state.env.get(g)));let P=`${u}__length`;e.state.env.has(P)&&!s.has(P)&&s.set(P,e.state.env.get(P))}}if(o&&f===void 0){let b=`${u}_`;for(let v of e.state.env.keys())v.startsWith(b)&&!v.includes("__")&&e.state.env.delete(v);e.state.env.set(`${u}__length`,"0")}else if(f!==void 0){if(se(e,u,"bash"),i&&f!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(f)){r+=`bash: local: \`${f}': invalid variable name for name reference
|
|
513
|
+
`,n=1;continue}e.state.env.set(u,f),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(u))}else{let b=e.state.tempEnvBindings?.some(v=>v.has(u));!m&&!b&&e.state.env.delete(u)}Ue(e,u),i&&Te(e,u)}return C("",r,n)}function cr(e,t,s){let r=`
|
|
514
514
|
`,n=0,i=0,o=0,a=!1,l="MAPFILE",c=0;for(;c<t.length;){let v=t[c];v==="-d"&&c+1<t.length?(r=t[c+1]===""?"\0":t[c+1]||`
|
|
515
|
-
`,c+=2):v==="-n"&&c+1<t.length?(n=Number.parseInt(t[c+1],10)||0,c+=2):v==="-O"&&c+1<t.length?(i=Number.parseInt(t[c+1],10)||0,c+=2):v==="-s"&&c+1<t.length?(o=Number.parseInt(t[c+1],10)||0,c+=2):v==="-t"?(a=!0,c++):v==="-u"||v==="-C"||v==="-c"?c+=2:(v.startsWith("-")||(l=v),c++)}let u=s;!u&&e.state.groupStdin!==void 0&&(u=e.state.groupStdin);let f=[],d=u,p=0,
|
|
516
|
-
`,1);let w=d,
|
|
517
|
-
`,1);f.push(P),p++}i===0&&ke(e,l);for(let v=0;v<f.length;v++)e.state.env.set(`${l}_${i+v}`,f[v]);let
|
|
518
|
-
`,o="",a=-1,l=-1,c=null,u=-1,f=-1,d=[],p=0,
|
|
519
|
-
`){_+=2,P=_;continue}if(x===
|
|
520
|
-
`){k+=2;continue}if(O===
|
|
515
|
+
`,c+=2):v==="-n"&&c+1<t.length?(n=Number.parseInt(t[c+1],10)||0,c+=2):v==="-O"&&c+1<t.length?(i=Number.parseInt(t[c+1],10)||0,c+=2):v==="-s"&&c+1<t.length?(o=Number.parseInt(t[c+1],10)||0,c+=2):v==="-t"?(a=!0,c++):v==="-u"||v==="-C"||v==="-c"?c+=2:(v.startsWith("-")||(l=v),c++)}let u=s;!u&&e.state.groupStdin!==void 0&&(u=e.state.groupStdin);let f=[],d=u,p=0,y=0,h=e.limits?.maxArrayElements??1e5;for(;d.length>0;){let v=d.indexOf(r);if(v===-1){if(d.length>0){if(y<o)y++;else if(n===0||p<n){if(i+p>=h)return C("",`mapfile: array element limit exceeded (${h})
|
|
516
|
+
`,1);let w=d,E=w.indexOf("\0");E!==-1&&(w=w.substring(0,E)),f.push(w),p++}}break}let P=d.substring(0,v),g=P.indexOf("\0");if(g!==-1&&(P=P.substring(0,g)),!a&&r!=="\0"&&(P+=r),d=d.substring(v+r.length),y<o){y++;continue}if(n>0&&p>=n)break;if(i+p>=h)return C("",`mapfile: array element limit exceeded (${h})
|
|
517
|
+
`,1);f.push(P),p++}i===0&&ke(e,l);for(let v=0;v<f.length;v++)e.state.env.set(`${l}_${i+v}`,f[v]);let m=parseInt(e.state.env.get(`${l}__length`)||"0",10),b=i+f.length;return e.state.env.set(`${l}__length`,String(Math.max(m,b))),e.state.groupStdin!==void 0&&!s&&(e.state.groupStdin=""),C("","",0)}function Io(e){if(!e.startsWith("__rw__:"))return null;let t=e.slice(7),s=t.indexOf(":");if(s===-1)return null;let r=Number.parseInt(t.slice(0,s),10);if(Number.isNaN(r)||r<0)return null;let n=s+1,i=t.slice(n,n+r),o=n+r+1,a=t.slice(o),l=a.indexOf(":");if(l===-1)return null;let c=Number.parseInt(a.slice(0,l),10);if(Number.isNaN(c)||c<0)return null;let u=a.slice(l+1);return{path:i,position:c,content:u}}function Ro(e,t,s){return`__rw__:${e.length}:${e}:${t}:${s}`}function ur(e,t,s,r=-1){let n=!1,i=`
|
|
518
|
+
`,o="",a=-1,l=-1,c=null,u=-1,f=-1,d=[],p=0,y=!1,h=(k,_)=>{let O=1;for(;O<k.length;){let S=k[O];if(S==="r")n=!0,O++;else if(S==="s")O++;else{if(S==="d")return O+1<k.length?(i=k.substring(O+1),{nextArgIndex:_+1}):_+1<t.length?(i=t[_+1],{nextArgIndex:_+2}):{nextArgIndex:_+1};if(S==="n"){if(O+1<k.length){let x=k.substring(O+1);return a=Number.parseInt(x,10),(Number.isNaN(a)||a<0)&&(y=!0,a=0),{nextArgIndex:_+1}}else if(_+1<t.length)return a=Number.parseInt(t[_+1],10),(Number.isNaN(a)||a<0)&&(y=!0,a=0),{nextArgIndex:_+2};return{nextArgIndex:_+1}}else if(S==="N"){if(O+1<k.length){let x=k.substring(O+1);return l=Number.parseInt(x,10),(Number.isNaN(l)||l<0)&&(y=!0,l=0),{nextArgIndex:_+1}}else if(_+1<t.length)return l=Number.parseInt(t[_+1],10),(Number.isNaN(l)||l<0)&&(y=!0,l=0),{nextArgIndex:_+2};return{nextArgIndex:_+1}}else{if(S==="a")return O+1<k.length?(c=k.substring(O+1),{nextArgIndex:_+1}):_+1<t.length?(c=t[_+1],{nextArgIndex:_+2}):{nextArgIndex:_+1};if(S==="p")return O+1<k.length?(o=k.substring(O+1),{nextArgIndex:_+1}):_+1<t.length?(o=t[_+1],{nextArgIndex:_+2}):{nextArgIndex:_+1};if(S==="u"){if(O+1<k.length){let x=k.substring(O+1);return u=Number.parseInt(x,10),Number.isNaN(u)||u<0?{nextArgIndex:-2}:{nextArgIndex:_+1}}else if(_+1<t.length)return u=Number.parseInt(t[_+1],10),Number.isNaN(u)||u<0?{nextArgIndex:-2}:{nextArgIndex:_+2};return{nextArgIndex:_+1}}else if(S==="t"){if(O+1<k.length){let x=k.substring(O+1);return f=Number.parseFloat(x),Number.isNaN(f)&&(f=0),{nextArgIndex:_+1}}else if(_+1<t.length)return f=Number.parseFloat(t[_+1]),Number.isNaN(f)&&(f=0),{nextArgIndex:_+2};return{nextArgIndex:_+1}}else if(S==="e"||S==="i"||S==="P"){if(S==="i"&&_+1<t.length)return{nextArgIndex:_+2};O++}else O++}}}return{nextArgIndex:_+1}};for(;p<t.length;){let k=t[p];if(k.startsWith("-")&&k.length>1&&k!=="--"){let _=h(k,p);if(_.nextArgIndex===-1)return{stdout:"",stderr:"",exitCode:2};if(_.nextArgIndex===-2)return{stdout:"",stderr:"",exitCode:1};p=_.nextArgIndex}else if(k==="--")for(p++;p<t.length;)d.push(t[p]),p++;else d.push(k),p++}if(y)return C("","",1);if(d.length===0&&c===null&&d.push("REPLY"),f===0){if(c)ke(e,c);else{for(let k of d)e.state.env.set(k,"");d.length===0&&e.state.env.set("REPLY","")}return C("","",0)}if(f<0&&f!==-1)return C("","",1);let m=s;u>=0?e.state.fileDescriptors?m=e.state.fileDescriptors.get(u)||"":m="":!m&&e.state.groupStdin!==void 0&&(m=e.state.groupStdin);let b=i===""?"\0":i,v="",P=0,g=!0,w=k=>{if(u>=0&&e.state.fileDescriptors)e.state.fileDescriptors.set(u,m.substring(k));else if(r>=0&&e.state.fileDescriptors){let _=e.state.fileDescriptors.get(r);if(_?.startsWith("__rw__:")){let O=Io(_);if(O){let S=O.position+k;e.state.fileDescriptors.set(r,Ro(O.path,S,O.content))}}}else e.state.groupStdin!==void 0&&!s&&(e.state.groupStdin=m.substring(k))};if(l>=0){let k=Math.min(l,m.length);v=m.substring(0,k),P=k,g=k>=l,w(P);let _=d[0]||"REPLY";e.state.env.set(_,v);for(let O=1;O<d.length;O++)e.state.env.set(d[O],"");return C("","",g?0:1)}else if(a>=0){let k=0,_=0,O=!1;for(;_<m.length&&k<a;){let S=m[_];if(S===b){P=_+1,O=!0;break}if(!n&&S==="\\"&&_+1<m.length){let x=m[_+1];if(x===b&&b===`
|
|
519
|
+
`){_+=2,P=_;continue}if(x===b){_+=2,k++,v+=x,P=_;continue}v+=x,_+=2,k++,P=_}else v+=S,_++,k++,P=_}g=k>=a||O,w(P)}else{P=0;let k=0;for(;k<m.length;){let _=m[k];if(_===b){P=k+b.length,g=!0;break}if(!n&&_==="\\"&&k+1<m.length){let O=m[k+1];if(O===`
|
|
520
|
+
`){k+=2;continue}if(O===b){v+=O,k+=2;continue}v+=_,v+=O,k+=2;continue}v+=_,k++}if(k>=m.length&&(g=!1,P=k,v.length===0&&m.length===0)){for(let _ of d)e.state.env.set(_,"");return c&&ke(e,c),C("","",1)}w(P)}b===`
|
|
521
521
|
`&&v.endsWith(`
|
|
522
|
-
`)&&(v=v.slice(0,-1));let
|
|
523
|
-
`,1);ke(e,c);for(let O=0;O<k.length;O++)e.state.env.set(`${c}_${O}`,
|
|
524
|
-
`,2);s=(n%256+256)%256}throw new ue(s)}var
|
|
522
|
+
`)&&(v=v.slice(0,-1));let E=k=>n?k:k.replace(/\\(.)/g,"$1");if(d.length===1&&d[0]==="REPLY")return e.state.env.set("REPLY",E(v)),C("","",g?0:1);let $=Dr(e.state.env);if(c){let{words:k}=bs(v,$,void 0,n),_=e.limits?.maxArrayElements??1e5;if(k.length>_)return C("",`read: array element limit exceeded (${_})
|
|
523
|
+
`,1);ke(e,c);for(let O=0;O<k.length;O++)e.state.env.set(`${c}_${O}`,E(k[O]));return C("","",g?0:1)}let T=d.length,{words:N,wordStarts:R}=bs(v,$,T,n);for(let k=0;k<d.length;k++){let _=d[k];if(k<d.length-1)e.state.env.set(_,E(N[k]??""));else if(k<R.length){let O=v.substring(R[k]);O=Tr(O,$,n),O=E(O),e.state.env.set(_,O)}else e.state.env.set(_,"")}return C("","",g?0:1)}function fr(e,t){if(e.state.callDepth===0&&e.state.sourceDepth===0)return A("bash: return: can only `return' from a function or sourced script\n");let s=e.state.lastExitCode;if(t.length>0){let r=t[0],n=Number.parseInt(r,10);if(r===""||Number.isNaN(n)||!/^-?\d+$/.test(r))return A(`bash: return: ${r}: numeric argument required
|
|
524
|
+
`,2);s=(n%256+256)%256}throw new ue(s)}var os=`set: usage: set [-eux] [+eux] [-o option] [+o option]
|
|
525
525
|
Options:
|
|
526
526
|
-e Exit immediately if a command exits with non-zero status
|
|
527
527
|
+e Disable -e
|
|
@@ -537,173 +537,173 @@ Options:
|
|
|
537
537
|
+o pipefail Disable pipefail
|
|
538
538
|
-o xtrace Same as -x
|
|
539
539
|
+o xtrace Disable xtrace
|
|
540
|
-
`,
|
|
540
|
+
`,Tn=new Map([["e","errexit"],["u","nounset"],["x","xtrace"],["v","verbose"],["f","noglob"],["C","noclobber"],["a","allexport"],["n","noexec"],["h",null],["b",null],["m",null],["B",null],["H",null],["P",null],["T",null],["E",null],["p",null]]),In=new Map([["errexit","errexit"],["pipefail","pipefail"],["nounset","nounset"],["xtrace","xtrace"],["verbose","verbose"],["noclobber","noclobber"],["noglob","noglob"],["allexport","allexport"],["noexec","noexec"],["posix","posix"],["vi","vi"],["emacs","emacs"],["notify",null],["monitor",null],["braceexpand",null],["histexpand",null],["physical",null],["functrace",null],["errtrace",null],["privileged",null],["hashall",null],["ignoreeof",null],["interactive-comments",null],["keyword",null],["onecmd",null]]),Rn=["errexit","nounset","pipefail","verbose","xtrace","posix","allexport","noclobber","noglob","noexec","vi","emacs"],Ln=["braceexpand","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","nolog","notify","onecmd","physical","privileged"];function Fn(e,t,s){t!==null&&(s&&(t==="vi"?e.state.options.emacs=!1:t==="emacs"&&(e.state.options.vi=!1)),e.state.options[t]=s,rt(e))}function Lo(e,t){return t+1<e.length&&!e[t+1].startsWith("-")&&!e[t+1].startsWith("+")}function Fo(e,t){let s=re(e,t);if(s.length===0)return`${t}=()`;let r=s.map(n=>{let i=e.state.env.get(`${t}_${n}`)??"";return`[${n}]=${Ye(i)}`});return`${t}=(${r.join(" ")})`}function Mo(e){return/^[a-zA-Z0-9_]+$/.test(e)?e:`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function zo(e,t){let s=Ve(e,t);if(s.length===0)return`${t}=()`;let r=s.map(n=>{let i=e.state.env.get(`${t}_${n}`)??"";return`[${Mo(n)}]=${Ye(i)}`});return`${t}=(${r.join(" ")} )`}function Wo(e){let t=new Set,s=e.state.associativeArrays??new Set;for(let r of e.state.env.keys()){let n=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)_(\d+)$/);if(n){let i=n[1];s.has(i)||t.add(i)}}return t}function Vo(e){return e.state.associativeArrays??new Set}function hr(e,t){if(t.includes("--help"))return M(os);if(t.length===0){let r=Wo(e),n=Vo(e),i=l=>{for(let c of n){let u=`${c}_`,f=`${c}__length`;if(l!==f&&l.startsWith(u)){if(l.slice(u.length).startsWith("_length"))continue;return!0}}return!1},o=[];for(let[l,c]of e.state.env){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(l)||r.has(l)||n.has(l))continue;let u=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)_(\d+)$/);if(u&&r.has(u[1]))continue;let f=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)__length$/);f&&r.has(f[1])||i(l)||f&&n.has(f[1])||o.push([l,c])}let a=[];for(let[l,c]of o.sort(([u],[f])=>u<f?-1:u>f?1:0))a.push(`${l}=${rs(c)}`);for(let l of[...r].sort((c,u)=>c<u?-1:c>u?1:0))a.push(Fo(e,l));for(let l of[...n].sort((c,u)=>c<u?-1:c>u?1:0))a.push(zo(e,l));return a.sort((l,c)=>{let u=l.split("=")[0],f=c.split("=")[0];return u<f?-1:u>f?1:0}),M(a.length>0?`${a.join(`
|
|
541
541
|
`)}
|
|
542
|
-
`:"")}let s=0;for(;s<t.length;){let r=t[s];if((r==="-o"||r==="+o")&&
|
|
543
|
-
${
|
|
542
|
+
`:"")}let s=0;for(;s<t.length;){let r=t[s];if((r==="-o"||r==="+o")&&Lo(t,s)){let n=t[s+1];if(!In.has(n)){let i=`bash: set: ${n}: invalid option name
|
|
543
|
+
${os}`;if(e.state.options.posix)throw new $e(1,"",i);return A(i)}Fn(e,In.get(n)??null,r==="-o"),s+=2;continue}if(r==="-o"){let n=Rn.map(a=>`${a.padEnd(16)}${e.state.options[a]?"on":"off"}`),i=Ln.map(a=>`${a.padEnd(16)}off`),o=[...n,...i].sort();return M(`${o.join(`
|
|
544
544
|
`)}
|
|
545
|
-
`)}if(r==="+o"){let n=
|
|
545
|
+
`)}if(r==="+o"){let n=Rn.map(a=>`set ${e.state.options[a]?"-o":"+o"} ${a}`),i=Ln.map(a=>`set +o ${a}`),o=[...n,...i].sort();return M(`${o.join(`
|
|
546
546
|
`)}
|
|
547
|
-
`)}if(r.length>1&&(r[0]==="-"||r[0]==="+")&&r[1]!=="-"){let n=r[0]==="-";for(let i=1;i<r.length;i++){let o=r[i];if(!
|
|
548
|
-
${
|
|
549
|
-
${
|
|
550
|
-
`;if(e.state.options.posix)throw new
|
|
551
|
-
`;if(e.state.options.posix)throw new
|
|
547
|
+
`)}if(r.length>1&&(r[0]==="-"||r[0]==="+")&&r[1]!=="-"){let n=r[0]==="-";for(let i=1;i<r.length;i++){let o=r[i];if(!Tn.has(o)){let a=`bash: set: ${r[0]}${o}: invalid option
|
|
548
|
+
${os}`;if(e.state.options.posix)throw new $e(1,"",a);return A(a)}Fn(e,Tn.get(o)??null,n)}s++;continue}if(r==="--")return dr(e,t.slice(s+1)),F;if(r==="-"){if(e.state.options.xtrace=!1,e.state.options.verbose=!1,rt(e),s+1<t.length)return dr(e,t.slice(s+1)),F;s++;continue}if(r==="+"){s++;continue}if(r.startsWith("-")||r.startsWith("+")){let n=`bash: set: ${r}: invalid option
|
|
549
|
+
${os}`;if(e.state.options.posix)throw new $e(1,"",n);return A(n)}return dr(e,t.slice(s)),F}return F}function dr(e,t){let s=1;for(;e.state.env.has(String(s));)e.state.env.delete(String(s)),s++;for(let r=0;r<t.length;r++)e.state.env.set(String(r+1),t[r]);e.state.env.set("#",String(t.length)),e.state.env.set("@",t.join(" ")),e.state.env.set("*",t.join(" "))}function pr(e,t){let s=1;if(t.length>0){let o=Number.parseInt(t[0],10);if(Number.isNaN(o)||o<0){let a=`bash: shift: ${t[0]}: numeric argument required
|
|
550
|
+
`;if(e.state.options.posix)throw new $e(1,"",a);return A(a)}s=o}let r=Number.parseInt(e.state.env.get("#")||"0",10);if(s>r){let o=`bash: shift: shift count out of range
|
|
551
|
+
`;if(e.state.options.posix)throw new $e(1,"",o);return A(o)}if(s===0)return F;let n=[];for(let o=1;o<=r;o++)n.push(e.state.env.get(String(o))||"");let i=n.slice(s);for(let o=1;o<=r;o++)e.state.env.delete(String(o));for(let o=0;o<i.length;o++)e.state.env.set(String(o+1),i[o]);return e.state.env.set("#",String(i.length)),e.state.env.set("@",i.join(" ")),F}async function mr(e,t){let s=t;if(s.length>0&&s[0]==="--"&&(s=s.slice(1)),s.length===0)return C("",`bash: source: filename argument required
|
|
552
552
|
`,2);let r=s[0],n=null,i=null;if(r.includes("/")){let c=e.fs.resolvePath(e.state.cwd,r);try{i=await e.fs.readFile(c),n=c}catch{}}else{let u=(e.state.env.get("PATH")||"").split(":").filter(f=>f);for(let f of u){let d=e.fs.resolvePath(e.state.cwd,`${f}/${r}`);try{if((await e.fs.stat(d)).isDirectory)continue;i=await e.fs.readFile(d),n=d;break}catch{}}if(i===null){let f=e.fs.resolvePath(e.state.cwd,r);try{i=await e.fs.readFile(f),n=f}catch{}}}if(i===null)return A(`bash: ${r}: No such file or directory
|
|
553
|
-
`);let o=new Map;if(s.length>1){for(let u=1;u<=9;u++)o.set(String(u),e.state.env.get(String(u)));o.set("#",e.state.env.get("#")),o.set("@",e.state.env.get("@"));let c=s.slice(1);e.state.env.set("#",String(c.length)),e.state.env.set("@",c.join(" "));for(let u=0;u<c.length&&u<9;u++)e.state.env.set(String(u+1),c[u]);for(let u=c.length+1;u<=9;u++)e.state.env.delete(String(u))}let a=e.state.currentSource,l=()=>{if(e.state.sourceDepth--,e.state.currentSource=a,s.length>1)for(let[c,u]of o)u===void 0?e.state.env.delete(c):e.state.env.set(c,u)};if(e.state.sourceDepth++,e.state.sourceDepth>e.limits.maxSourceDepth)throw e.state.sourceDepth--,new
|
|
554
|
-
`);throw c}}function
|
|
555
|
-
`,n=1;continue}let v=await
|
|
556
|
-
`,n=1;continue}if(v===null)continue;if(v<0){let P
|
|
557
|
-
`,n=1;continue}let
|
|
558
|
-
`,n=1;continue}let
|
|
559
|
-
`,n=1;continue}let u=i;if(
|
|
560
|
-
`,n=1;continue}let f=
|
|
561
|
-
`,n=1;continue}let
|
|
562
|
-
`,n=1;continue}if(
|
|
563
|
-
`,n=1;continue}let v=
|
|
564
|
-
`,n=1;continue}let P=h[v][0];e.state.env.delete(`${c}_${P}`);continue}e.state.env.delete(`${c}_${
|
|
565
|
-
`,n=1;continue}let a=i;if(
|
|
566
|
-
`,n=1;continue}let l=
|
|
567
|
-
`}}}l++}else break}for(;l<t.length;)a.push(t[l]),l++;if(o)return
|
|
568
|
-
`};if(a.length===0){if(s||r){let p=[];for(let
|
|
553
|
+
`);let o=new Map;if(s.length>1){for(let u=1;u<=9;u++)o.set(String(u),e.state.env.get(String(u)));o.set("#",e.state.env.get("#")),o.set("@",e.state.env.get("@"));let c=s.slice(1);e.state.env.set("#",String(c.length)),e.state.env.set("@",c.join(" "));for(let u=0;u<c.length&&u<9;u++)e.state.env.set(String(u+1),c[u]);for(let u=c.length+1;u<=9;u++)e.state.env.delete(String(u))}let a=e.state.currentSource,l=()=>{if(e.state.sourceDepth--,e.state.currentSource=a,s.length>1)for(let[c,u]of o)u===void 0?e.state.env.delete(c):e.state.env.set(c,u)};if(e.state.sourceDepth++,e.state.sourceDepth>e.limits.maxSourceDepth)throw e.state.sourceDepth--,new J(`source: maximum nesting depth (${e.limits.maxSourceDepth}) exceeded, increase executionLimits.maxSourceDepth`,"recursion");e.state.currentSource=r;try{let c=fe(i),u=await e.executeScript(c);return l(),u}catch(c){if(l(),c instanceof j)throw c;if(c instanceof ue)return C(c.stdout,c.stderr,c.exitCode);if(c.name==="ParseException")return A(`bash: ${r}: ${c.message}
|
|
554
|
+
`);throw c}}function Mn(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function Bo(e){return e.startsWith("'")&&e.endsWith("'")||e.startsWith('"')&&e.endsWith('"')}async function zn(e,t){if(Bo(t))return null;try{let s=new B,r=ee(s,t);return await H(e,r.expression)}catch{let s=parseInt(t,10);return Number.isNaN(s)?0:s}}function Wn(e,t){if(e.state.localVarStack?.has(t)){let r=es(e,t);if(r){r.value===void 0?e.state.env.delete(t):e.state.env.set(t,r.value);let n=e.state.localVarStack?.get(t);if(!n||n.length===0)Jt(e,t),e.state.localVarStack?.delete(t),e.state.fullyUnsetLocals=e.state.fullyUnsetLocals||new Map,e.state.fullyUnsetLocals.set(t,r.scopeIndex),yr(e,t);else{let i=n[n.length-1];e.state.localVarDepth=e.state.localVarDepth||new Map,e.state.localVarDepth.set(t,i.scopeIndex+1)}return!0}return e.state.env.delete(t),Jt(e,t),e.state.localVarStack?.delete(t),e.state.fullyUnsetLocals=e.state.fullyUnsetLocals||new Map,e.state.fullyUnsetLocals.set(t,0),!0}for(let r=e.state.localScopes.length-1;r>=0;r--){let n=e.state.localScopes[r];if(n.has(t)){let i=n.get(t);i===void 0?e.state.env.delete(t):e.state.env.set(t,i),n.delete(t);let o=!1;for(let a=r-1;a>=0;a--)if(e.state.localScopes[a].has(t)){e.state.localVarDepth&&e.state.localVarDepth.set(t,a+1),o=!0;break}return o||Jt(e,t),!0}}return!1}function yr(e,t){if(!e.state.tempEnvBindings||e.state.tempEnvBindings.length===0)return!1;for(let s=e.state.tempEnvBindings.length-1;s>=0;s--){let r=e.state.tempEnvBindings[s];if(r.has(t)){let n=r.get(t);return n===void 0?e.state.env.delete(t):e.state.env.set(t,n),r.delete(t),!0}}return!1}async function Vn(e,t){if(t.startsWith("'")&&t.endsWith("'"))return t.slice(1,-1);if(t.startsWith('"')&&t.endsWith('"')){let s=t.slice(1,-1),n=new B().parseWordFromString(s,!0,!1);return I(e,n)}if(t.includes("$")){let r=new B().parseWordFromString(t,!1,!1);return I(e,r)}return t}async function gr(e,t){let s="both",r="",n=0;for(let i of t){if(i==="-v"){s="variable";continue}if(i==="-f"){s="function";continue}if(s==="function"){e.state.functions.delete(i);continue}if(s==="variable"){let c=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(c){let d=c[1],p=c[2];if(p==="@"||p==="*"){let P=Se(e,d);for(let[g]of P)e.state.env.delete(`${d}_${g}`);e.state.env.delete(d);continue}let y=e.state.associativeArrays?.has(d);if(y){let P=await Vn(e,p);e.state.env.delete(`${d}_${P}`);continue}let h=Ss(e,d),m=e.state.declaredVars?.has(d);if((e.state.env.has(d)||m)&&!h&&!y){r+=`bash: unset: ${d}: not an array variable
|
|
555
|
+
`,n=1;continue}let v=await zn(e,p);if(v===null&&h){r+=`bash: unset: ${p}: not a valid identifier
|
|
556
|
+
`,n=1;continue}if(v===null)continue;if(v<0){let P=Se(e,d),g=P.length,w=e.state.currentLine;if(g===0){r+=`bash: line ${w}: unset: [${v}]: bad array subscript
|
|
557
|
+
`,n=1;continue}let E=g+v;if(E<0){r+=`bash: line ${w}: unset: [${v}]: bad array subscript
|
|
558
|
+
`,n=1;continue}let $=P[E][0];e.state.env.delete(`${d}_${$}`);continue}e.state.env.delete(`${d}_${v}`);continue}if(!Mn(i)){r+=`bash: unset: \`${i}': not a valid identifier
|
|
559
|
+
`,n=1;continue}let u=i;if(ve(e,i)){let d=Be(e,i);d&&d!==i&&(u=d)}if(Ge(e,u)){r+=`bash: unset: ${u}: cannot unset: readonly variable
|
|
560
|
+
`,n=1;continue}let f=it(e,u);if(f!==void 0&&f!==e.state.callDepth)Wn(e,u);else if(e.state.fullyUnsetLocals?.has(u))e.state.env.delete(u);else if(f!==void 0){let d=e.state.accessedTempEnvVars?.has(u),p=e.state.mutatedTempEnvVars?.has(u);if((d||p)&&e.state.localVarStack?.has(u)){let y=es(e,u);y?y.value===void 0?e.state.env.delete(u):e.state.env.set(u,y.value):e.state.env.delete(u)}else e.state.env.delete(u)}else yr(e,u)||e.state.env.delete(u);e.state.exportedVars?.delete(u);continue}let o=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(o){let c=o[1],u=o[2];if(u==="@"||u==="*"){let h=Se(e,c);for(let[m]of h)e.state.env.delete(`${c}_${m}`);e.state.env.delete(c);continue}let f=e.state.associativeArrays?.has(c);if(f){let h=await Vn(e,u);e.state.env.delete(`${c}_${h}`);continue}let d=Ss(e,c);if(e.state.env.has(c)&&!d&&!f){r+=`bash: unset: ${c}: not an array variable
|
|
561
|
+
`,n=1;continue}let y=await zn(e,u);if(y===null&&d){r+=`bash: unset: ${u}: not a valid identifier
|
|
562
|
+
`,n=1;continue}if(y===null)continue;if(y<0){let h=Se(e,c),m=h.length,b=e.state.currentLine;if(m===0){r+=`bash: line ${b}: unset: [${y}]: bad array subscript
|
|
563
|
+
`,n=1;continue}let v=m+y;if(v<0){r+=`bash: line ${b}: unset: [${y}]: bad array subscript
|
|
564
|
+
`,n=1;continue}let P=h[v][0];e.state.env.delete(`${c}_${P}`);continue}e.state.env.delete(`${c}_${y}`);continue}if(!Mn(i)){r+=`bash: unset: \`${i}': not a valid identifier
|
|
565
|
+
`,n=1;continue}let a=i;if(ve(e,i)){let c=Be(e,i);c&&c!==i&&(a=c)}if(Ge(e,a)){r+=`bash: unset: ${a}: cannot unset: readonly variable
|
|
566
|
+
`,n=1;continue}let l=it(e,a);if(l!==void 0&&l!==e.state.callDepth)Wn(e,a);else if(e.state.fullyUnsetLocals?.has(a))e.state.env.delete(a);else if(l!==void 0){let c=e.state.accessedTempEnvVars?.has(a),u=e.state.mutatedTempEnvVars?.has(a);if((c||u)&&e.state.localVarStack?.has(a)){let f=es(e,a);f?f.value===void 0?e.state.env.delete(a):e.state.env.set(a,f.value):e.state.env.delete(a)}else e.state.env.delete(a)}else yr(e,a)||e.state.env.delete(a);e.state.exportedVars?.delete(a),e.state.functions.delete(i)}return C("",r,n)}var wr=["extglob","dotglob","nullglob","failglob","globstar","globskipdots","nocaseglob","nocasematch","expand_aliases","lastpipe","xpg_echo"],jo=["autocd","cdable_vars","cdspell","checkhash","checkjobs","checkwinsize","cmdhist","compat31","compat32","compat40","compat41","compat42","compat43","compat44","complete_fullquote","direxpand","dirspell","execfail","extdebug","extquote","force_fignore","globasciiranges","gnu_errfmt","histappend","histreedit","histverify","hostcomplete","huponexit","inherit_errexit","interactive_comments","lithist","localvar_inherit","localvar_unset","login_shell","mailwarn","no_empty_cmd_completion","progcomp","progcomp_alias","promptvars","restricted_shell","shift_verbose","sourcepath"];function as(e){return wr.includes(e)}function Uo(e){return jo.includes(e)}function Bn(e,t){let s=!1,r=!1,n=!1,i=!1,o=!1,a=[],l=0;for(;l<t.length;){let d=t[l];if(d==="--"){l++;break}if(d.startsWith("-")&&d.length>1){for(let p=1;p<d.length;p++){let y=d[p];switch(y){case"s":s=!0;break;case"u":r=!0;break;case"p":n=!0;break;case"q":i=!0;break;case"o":o=!0;break;default:return{exitCode:2,stdout:"",stderr:`shopt: -${y}: invalid option
|
|
567
|
+
`}}}l++}else break}for(;l<t.length;)a.push(t[l]),l++;if(o)return Ho(e,a,s,r,n,i);if(s&&r)return{exitCode:1,stdout:"",stderr:`shopt: cannot set and unset shell options simultaneously
|
|
568
|
+
`};if(a.length===0){if(s||r){let p=[];for(let y of wr){let h=e.state.shoptOptions[y];s&&h?p.push(n?`shopt -s ${y}`:`${y} on`):r&&!h&&p.push(n?`shopt -u ${y}`:`${y} off`)}return{exitCode:0,stdout:p.length>0?`${p.join(`
|
|
569
569
|
`)}
|
|
570
|
-
`:"",stderr:""}}let d=[];for(let p of
|
|
570
|
+
`:"",stderr:""}}let d=[];for(let p of wr){let y=e.state.shoptOptions[p];d.push(n?`shopt ${y?"-s":"-u"} ${p}`:`${p} ${y?"on":"off"}`)}return{exitCode:0,stdout:`${d.join(`
|
|
571
571
|
`)}
|
|
572
|
-
`,stderr:""}}let c=!1,u="",f=[];for(let d of a){if(!
|
|
573
|
-
`,c=!0;continue}if(s)
|
|
572
|
+
`,stderr:""}}let c=!1,u="",f=[];for(let d of a){if(!as(d)&&!Uo(d)){u+=`shopt: ${d}: invalid shell option name
|
|
573
|
+
`,c=!0;continue}if(s)as(d)&&(e.state.shoptOptions[d]=!0,_s(e));else if(r)as(d)&&(e.state.shoptOptions[d]=!1,_s(e));else if(as(d)){let p=e.state.shoptOptions[d];i?p||(c=!0):n?(f.push(`shopt ${p?"-s":"-u"} ${d}`),p||(c=!0)):(f.push(`${d} ${p?"on":"off"}`),p||(c=!0))}else i?c=!0:n?(f.push(`shopt -u ${d}`),c=!0):(f.push(`${d} off`),c=!0)}return{exitCode:c?1:0,stdout:f.length>0?`${f.join(`
|
|
574
574
|
`)}
|
|
575
|
-
`:"",stderr:u}}function
|
|
575
|
+
`:"",stderr:u}}function Ho(e,t,s,r,n,i){let o=new Map([["errexit","errexit"],["pipefail","pipefail"],["nounset","nounset"],["xtrace","xtrace"],["verbose","verbose"],["posix","posix"],["allexport","allexport"],["noclobber","noclobber"],["noglob","noglob"],["noexec","noexec"],["vi","vi"],["emacs","emacs"]]),a=["braceexpand","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","nolog","notify","onecmd","physical","privileged"],l=[...o.keys(),...a].sort();if(t.length===0){let d=[];for(let p of l){let y=a.includes(p),h=o.get(p),m=y||!h?!1:e.state.options[h];s&&!m||r&&m||d.push(n?`set ${m?"-o":"+o"} ${p}`:`${p} ${m?"on":"off"}`)}return{exitCode:0,stdout:d.length>0?`${d.join(`
|
|
576
576
|
`)}
|
|
577
|
-
`:"",stderr:""}}let c=!1,u="",f=[];for(let d of t){let p=o.has(d),
|
|
578
|
-
`,c=!0;continue}if(
|
|
577
|
+
`:"",stderr:""}}let c=!1,u="",f=[];for(let d of t){let p=o.has(d),y=a.includes(d);if(!p&&!y){u+=`shopt: ${d}: invalid option name
|
|
578
|
+
`,c=!0;continue}if(y){s||r||(i?c=!0:n?(f.push(`set +o ${d}`),c=!0):(f.push(`${d} off`),c=!0));continue}let h=o.get(d);if(h)if(s)h==="vi"?e.state.options.emacs=!1:h==="emacs"&&(e.state.options.vi=!1),e.state.options[h]=!0,rt(e);else if(r)e.state.options[h]=!1,rt(e);else{let m=e.state.options[h];i?m||(c=!0):n?(f.push(`set ${m?"-o":"+o"} ${d}`),m||(c=!0)):(f.push(`${d} ${m?"on":"off"}`),m||(c=!0))}}return{exitCode:c?1:0,stdout:f.length>0?`${f.join(`
|
|
579
579
|
`)}
|
|
580
|
-
`:"",stderr:u}}async function
|
|
581
|
-
`;p=!0,
|
|
582
|
-
`,p=!0,
|
|
583
|
-
`;else{let
|
|
584
|
-
`;u
|
|
580
|
+
`:"",stderr:u}}async function jn(e,t,s){if(t.includes("/")){let o=e.fs.resolvePath(e.state.cwd,t);if(!await e.fs.exists(o))return{error:"not_found",path:o};let a=o.split("/").pop()||t,l=e.commands.get(a);try{let c=await e.fs.stat(o);return c.isDirectory?{error:"permission_denied",path:o}:l?{cmd:l,path:o}:(c.mode&73)!==0?{script:!0,path:o}:{error:"permission_denied",path:o}}catch{return{error:"not_found",path:o}}}if(!s&&e.state.hashTable){let o=e.state.hashTable.get(t);if(o)if(await e.fs.exists(o)){let a=e.commands.get(t);if(a)return{cmd:a,path:o};try{let l=await e.fs.stat(o);if(!l.isDirectory&&(l.mode&73)!==0)return{script:!0,path:o}}catch{}}else e.state.hashTable.delete(t)}let n=(s??e.state.env.get("PATH")??"/usr/bin:/bin").split(":");for(let o of n){if(!o)continue;let l=`${o.startsWith("/")?o:e.fs.resolvePath(e.state.cwd,o)}/${t}`;if(await e.fs.exists(l))try{let c=await e.fs.stat(l);if(c.isDirectory)continue;let u=(c.mode&73)!==0,f=e.commands.get(t),d=o==="/bin"||o==="/usr/bin";if(f&&d)return{cmd:f,path:l};if(u){if(f&&!d)return{script:!0,path:l};if(!f)return{script:!0,path:l}}}catch{}}if(!await e.fs.exists("/usr/bin")){let o=e.commands.get(t);if(o)return{cmd:o,path:`/usr/bin/${t}`}}return null}async function ls(e,t){let s=[];if(t.includes("/")){let i=e.fs.resolvePath(e.state.cwd,t);if(await e.fs.exists(i))try{let o=await e.fs.stat(i);o.isDirectory||(o.mode&73)!==0&&s.push(t)}catch{}return s}let n=(e.state.env.get("PATH")||"/usr/bin:/bin").split(":");for(let i of n){if(!i)continue;let a=`${i.startsWith("/")?i:e.fs.resolvePath(e.state.cwd,i)}/${t}`;if(await e.fs.exists(a)){try{if((await e.fs.stat(a)).isDirectory)continue}catch{continue}s.push(i.startsWith("/")?a:`${i}/${t}`)}}return s}function Zo(e){return e!==null&&typeof e=="object"&&"then"in e&&typeof e.then=="function"}function K(e,t,s,r){return((...n)=>{mt(t,s,`${r} call`);let i=e(...n);return Zo(i)?i.then(o=>(mt(t,s,`${r} post-await`),o),o=>{throw mt(t,s,`${r} post-await`),o}):(mt(t,s,`${r} return`),i)})}function qo(e,t,s){let r={readFile:K(e.readFile.bind(e),t,s,"fs.readFile"),readFileBuffer:K(e.readFileBuffer.bind(e),t,s,"fs.readFileBuffer"),writeFile:K(e.writeFile.bind(e),t,s,"fs.writeFile"),appendFile:K(e.appendFile.bind(e),t,s,"fs.appendFile"),exists:K(e.exists.bind(e),t,s,"fs.exists"),stat:K(e.stat.bind(e),t,s,"fs.stat"),mkdir:K(e.mkdir.bind(e),t,s,"fs.mkdir"),readdir:K(e.readdir.bind(e),t,s,"fs.readdir"),rm:K(e.rm.bind(e),t,s,"fs.rm"),cp:K(e.cp.bind(e),t,s,"fs.cp"),mv:K(e.mv.bind(e),t,s,"fs.mv"),resolvePath:K(e.resolvePath.bind(e),t,s,"fs.resolvePath"),getAllPaths:K(e.getAllPaths.bind(e),t,s,"fs.getAllPaths"),chmod:K(e.chmod.bind(e),t,s,"fs.chmod"),symlink:K(e.symlink.bind(e),t,s,"fs.symlink"),link:K(e.link.bind(e),t,s,"fs.link"),readlink:K(e.readlink.bind(e),t,s,"fs.readlink"),lstat:K(e.lstat.bind(e),t,s,"fs.lstat"),realpath:K(e.realpath.bind(e),t,s,"fs.realpath"),utimes:K(e.utimes.bind(e),t,s,"fs.utimes")};return e.readdirWithFileTypes&&(r.readdirWithFileTypes=K(e.readdirWithFileTypes.bind(e),t,s,"fs.readdirWithFileTypes")),r}function Un(e,t){if(!e.requireDefenseContext)return e;let s=`command:${t}`,r={...e,fs:qo(e.fs,e.requireDefenseContext,s)};return e.exec&&(r.exec=K(e.exec,e.requireDefenseContext,s,"exec")),e.fetch&&(r.fetch=K(e.fetch,e.requireDefenseContext,s,"fetch")),e.sleep&&(r.sleep=K(e.sleep,e.requireDefenseContext,s,"sleep")),e.getRegisteredCommands&&(r.getRegisteredCommands=K(e.getRegisteredCommands,e.requireDefenseContext,s,"getRegisteredCommands")),r}async function Gn(e,t,s,r){let n=!1,i=!1,o=!1,a=!1,l=!1,c=[];for(let h of t)if(h.startsWith("-")&&h.length>1)for(let m of h.slice(1))m==="t"?n=!0:m==="p"?i=!0:m==="P"?o=!0:m==="a"?a=!0:m==="f"&&(l=!0);else c.push(h);let u="",f="",d=0,p=!1,y=!1;for(let h of c){let m=!1;if(o){if(a){let E=await r(h);if(E.length>0){for(let $ of E)u+=`${$}
|
|
581
|
+
`;p=!0,m=!0}}else{let E=await s(h);E&&(u+=`${E}
|
|
582
|
+
`,p=!0,m=!0)}m||(y=!0);continue}let b=!l&&e.state.functions.has(h);if(a&&b){if(!i)if(n)u+=`function
|
|
583
|
+
`;else{let E=e.state.functions.get(h),$=E?Hn(h,E):`${h} is a function
|
|
584
|
+
`;u+=$}m=!0}let v=e.state.env.get(`BASH_ALIAS_${h}`);if(v!==void 0&&(a||!m)&&(i||(n?u+=`alias
|
|
585
585
|
`:u+=`${h} is aliased to \`${v}'
|
|
586
|
-
`),
|
|
586
|
+
`),m=!0,!a)||Ls.has(h)&&(a||!m)&&(i||(n?u+=`keyword
|
|
587
587
|
`:u+=`${h} is a shell keyword
|
|
588
|
-
`),
|
|
589
|
-
`;else{let
|
|
590
|
-
`;u
|
|
588
|
+
`),m=!0,!a))continue;if(!a&&b&&!m){if(!i)if(n)u+=`function
|
|
589
|
+
`;else{let E=e.state.functions.get(h),$=E?Hn(h,E):`${h} is a function
|
|
590
|
+
`;u+=$}m=!0;continue}if(!(ot.has(h)&&(a||!m)&&(i||(n?u+=`builtin
|
|
591
591
|
`:u+=`${h} is a shell builtin
|
|
592
|
-
`),
|
|
592
|
+
`),m=!0,!a))){if(a){let E=await r(h);for(let $ of E)i?u+=`${$}
|
|
593
593
|
`:n?u+=`file
|
|
594
|
-
`:u+=`${h} is ${
|
|
595
|
-
`,p=!0,
|
|
594
|
+
`:u+=`${h} is ${$}
|
|
595
|
+
`,p=!0,m=!0}else if(!m){let E=await s(h);E&&(i?u+=`${E}
|
|
596
596
|
`:n?u+=`file
|
|
597
|
-
`:u+=`${h} is ${
|
|
598
|
-
`,p=!0,
|
|
599
|
-
`)}}}return i?d=
|
|
597
|
+
`:u+=`${h} is ${E}
|
|
598
|
+
`,p=!0,m=!0)}if(!m&&(y=!0,!n&&!i)){let E=!0;if(h.includes("/")){let $=e.fs.resolvePath(e.state.cwd,h);await e.fs.exists($)&&(E=!1)}E&&(f+=`bash: type: ${h}: not found
|
|
599
|
+
`)}}}return i?d=y&&!p?1:0:d=y?1:0,C(u,f,d)}function Hn(e,t){let s;return t.body.type==="Group"?s=t.body.body.map(n=>Et(n)).join("; "):s=Et(t.body),`${e} is a function
|
|
600
600
|
${e} ()
|
|
601
601
|
{
|
|
602
602
|
${s}
|
|
603
603
|
}
|
|
604
|
-
`}function
|
|
604
|
+
`}function Et(e){if(Array.isArray(e))return e.map(t=>Et(t)).join("; ");if(e.type==="Statement"){let t=[];for(let s=0;s<e.pipelines.length;s++){let r=e.pipelines[s];t.push(Go(r)),e.operators[s]&&t.push(e.operators[s])}return t.join(" ")}if(e.type==="SimpleCommand"){let t=e,s=[];t.name&&s.push(Zn(t.name));for(let r of t.args)s.push(Zn(r));return s.join(" ")}return e.type==="Group"?`{ ${e.body.map(r=>Et(r)).join("; ")}; }`:"..."}function Go(e){let t=e.commands.map(s=>Et(s));return(e.negated?"! ":"")+t.join(" | ")}function Zn(e){let t="";for(let s of e.parts)s.type==="Literal"?t+=s.value:s.type==="DoubleQuoted"?t+=`"${s.parts.map(r=>qn(r)).join("")}"`:s.type==="SingleQuoted"?t+=`'${s.value}'`:t+=qn(s);return t}function qn(e){let t=e;return t.type==="Literal"?t.value??"":t.type==="Variable"?`$${t.name}`:""}async function Kn(e,t,s,r){let n="",i="",o=0;for(let a of t){if(!a){o=1;continue}let l=e.state.env.get(`BASH_ALIAS_${a}`);if(l!==void 0)r?n+=`${a} is an alias for "${l}"
|
|
605
605
|
`:n+=`alias ${a}='${l}'
|
|
606
|
-
`;else if(
|
|
606
|
+
`;else if(Ls.has(a))r?n+=`${a} is a shell keyword
|
|
607
607
|
`:n+=`${a}
|
|
608
|
-
`;else if(
|
|
608
|
+
`;else if(ot.has(a))r?n+=`${a} is a shell builtin
|
|
609
609
|
`:n+=`${a}
|
|
610
610
|
`;else if(e.state.functions.has(a))r?n+=`${a} is a function
|
|
611
611
|
`:n+=`${a}
|
|
612
612
|
`;else if(a.includes("/")){let c=e.fs.resolvePath(e.state.cwd,a),u=!1;if(await e.fs.exists(c))try{let f=await e.fs.stat(c);f.isDirectory||(f.mode&73)!==0&&(r?n+=`${a} is ${a}
|
|
613
613
|
`:n+=`${a}
|
|
614
614
|
`,u=!0)}catch{}u||(r&&(i+=`${a}: not found
|
|
615
|
-
`),o=1)}else if(e.commands.has(a)){let u=(e.state.env.get("PATH")??"/usr/bin:/bin").split(":"),f=null;for(let d of u){if(!d)continue;let p=`${d}/${a}`;try{let
|
|
615
|
+
`),o=1)}else if(e.commands.has(a)){let u=(e.state.env.get("PATH")??"/usr/bin:/bin").split(":"),f=null;for(let d of u){if(!d)continue;let p=`${d}/${a}`;try{let y=await e.fs.stat(p);if(!y.isDirectory&&(y.mode&73)!==0){f=p;break}}catch{}}f||(f=`/usr/bin/${a}`),r?n+=`${a} is ${f}
|
|
616
616
|
`:n+=`${f}
|
|
617
617
|
`}else r&&(i+=`${a}: not found
|
|
618
|
-
`),o=1}return C(n,i,o)}async function
|
|
619
|
-
`);let[,...o]=n;return r(i,o,[],s,!0,!1,-1)}async function
|
|
618
|
+
`),o=1}return C(n,i,o)}async function Xn(e,t){if(t.includes("/")){let n=e.fs.resolvePath(e.state.cwd,t);if(await e.fs.exists(n)){try{let i=await e.fs.stat(n);if(i.isDirectory||!((i.mode&73)!==0))return null}catch{return null}return t}return null}let r=(e.state.env.get("PATH")??"/usr/bin:/bin").split(":");for(let n of r){if(!n)continue;let o=`${n.startsWith("/")?n:e.fs.resolvePath(e.state.cwd,n)}/${t}`;if(await e.fs.exists(o)){try{if((await e.fs.stat(o)).isDirectory)continue}catch{continue}return`${n}/${t}`}}if(e.commands.has(t)){for(let n of r)if(n==="/usr/bin"||n==="/bin")return`${n}/${t}`;return`/usr/bin/${t}`}return null}async function Yn(e,t,s,r,n,i,o,a){let{ctx:l,runCommand:c}=e;if(l.coverage&&ot.has(t)&&l.coverage.hit(`bash:builtin:${t}`),t==="export")return nr(l,s);if(t==="unset")return gr(l,s);if(t==="exit")return rr(l,s);if(t==="local")return lr(l,s);if(t==="set")return hr(l,s);if(t==="break")return Os(l,s);if(t==="continue")return js(l,s);if(t==="return")return fr(l,s);if(t==="eval"&&l.state.options.posix)return ns(l,s,n);if(t==="shift")return pr(l,s);if(t==="getopts")return is(l,s);if(t==="compgen")return zs(l,s);if(t==="complete")return Vs(l,s);if(t==="compopt")return Bs(l,s);if(t==="pushd")return await er(l,s);if(t==="popd")return tr(l,s);if(t==="dirs")return sr(l,s);if(t==="source"||t===".")return mr(l,s);if(t==="read")return ur(l,s,n,a);if(t==="mapfile"||t==="readarray")return cr(l,s,n);if(t==="declare"||t==="typeset")return Ys(l,s);if(t==="readonly")return Qs(l,s);if(!i){let u=l.state.functions.get(t);if(u)return ss(l,u,s,n)}if(t==="eval")return ns(l,s,n);if(t==="cd")return await xs(l,s);if(t===":"||t==="true")return F;if(t==="false")return Q(!1);if(t==="let")return ar(l,s);if(t==="command")return Ko(e,s,n);if(t==="builtin")return Xo(e,s,n);if(t==="shopt")return Bn(l,s);if(t==="exec"){if(s.length===0)return F;let[u,...f]=s;return c(u,f,[],n,!1,!1,-1)}if(t==="wait")return F;if(t==="type")return await Gn(l,s,u=>Xn(l,u),u=>ls(l,u));if(t==="hash")return ir(l,s);if(t==="help")return or(l,s);if(t==="["||t==="test"){let u=s;if(t==="["){if(s[s.length-1]!=="]")return A("[: missing `]'\n",2);u=s.slice(0,-1)}return wt(l,u)}return null}async function Ko(e,t,s){let{ctx:r,runCommand:n}=e;if(t.length===0)return F;let i=!1,o=!1,a=!1,l=t;for(;l.length>0&&l[0].startsWith("-");){let f=l[0];if(f==="--"){l=l.slice(1);break}for(let d of f.slice(1))d==="p"?i=!0:d==="V"?o=!0:d==="v"&&(a=!0);l=l.slice(1)}if(l.length===0)return F;if(a||o)return await Kn(r,l,a,o);let[c,...u]=l;return n(c,u,[],s,!0,i,-1)}async function Xo(e,t,s){let{runCommand:r}=e;if(t.length===0)return F;let n=t;if(n[0]==="--"&&(n=n.slice(1),n.length===0))return F;let i=n[0];if(!ot.has(i))return A(`bash: builtin: ${i}: not a shell builtin
|
|
619
|
+
`);let[,...o]=n;return r(i,o,[],s,!0,!1,-1)}async function Qn(e,t,s,r,n){let{ctx:i,buildExportedEnv:o,executeUserScript:a}=e,c=await jn(i,t,n?"/usr/bin:/bin":void 0);if(!c)return nn(t)?A(`bash: ${t}: command not available in browser environments. Exclude '${t}' from your commands or use the Node.js bundle.
|
|
620
620
|
`,127):A(`bash: ${t}: command not found
|
|
621
621
|
`,127);if("error"in c)return c.error==="permission_denied"?A(`bash: ${t}: Permission denied
|
|
622
622
|
`,126):A(`bash: ${t}: No such file or directory
|
|
623
|
-
`,127);if("script"in c)return t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,c.path)),await a(c.path,s,r);let{cmd:u,path:f}=c;t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,f));let d=r||i.state.groupStdin||"",p=o(),
|
|
624
|
-
`)}}async function
|
|
625
|
-
`,exitCode:1}}async function
|
|
626
|
-
`,exitCode:1}}return{stdout:n,stderr:i,exitCode:o}}async function
|
|
627
|
-
`);let a=[];if(t.words===null)a=(e.state.env.get("@")||"").split(" ").filter(Boolean);else if(t.words.length===0)a=[];else try{for(let c of t.words){let u=await Ce(e,c);a.push(...u.values)}}catch(c){if(c instanceof
|
|
623
|
+
`,127);if("script"in c)return t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,c.path)),await a(c.path,s,r);let{cmd:u,path:f}=c;t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,f));let d=r||i.state.groupStdin||"",p=o(),y={fs:i.fs,cwd:i.state.cwd,env:i.state.env,exportedEnv:p,stdin:d,limits:i.limits,exec:i.execFn,fetch:i.fetch,getRegisteredCommands:()=>Array.from(i.commands.keys()),sleep:i.sleep,trace:i.trace,fileDescriptors:i.state.fileDescriptors,xpgEcho:i.state.shoptOptions.xpg_echo,coverage:i.coverage,signal:i.state.signal,requireDefenseContext:i.requireDefenseContext},h=Un(y,t);try{let m=()=>_r(i.requireDefenseContext,"command",`${t} execution`,()=>u.execute(s,h));return u.trusted?await pe.runTrustedAsync(()=>m()):await m()}catch(m){if(m instanceof J||m instanceof Fe)throw m;return A(`${t}: ${ze(xe(m))}
|
|
624
|
+
`)}}async function vr(e,t){let s=e.state.inCondition;e.state.inCondition=!0;let r="",n="",i=0;try{for(let o of t){let a=await e.executeStatement(o);r+=a.stdout,n+=a.stderr,i=a.exitCode}}finally{e.state.inCondition=s}return{stdout:r,stderr:n,exitCode:i}}function $t(e,t,s,r){if(e instanceof me)return t+=e.stdout,s+=e.stderr,e.levels>1&&r>1?(e.levels--,e.stdout=t,e.stderr=s,{action:"rethrow",stdout:t,stderr:s,error:e}):{action:"break",stdout:t,stderr:s};if(e instanceof ye)return t+=e.stdout,s+=e.stderr,e.levels>1&&r>1?(e.levels--,e.stdout=t,e.stderr=s,{action:"rethrow",stdout:t,stderr:s,error:e}):{action:"continue",stdout:t,stderr:s};if(e instanceof ue||e instanceof ge||e instanceof j||e instanceof J)return e.prependOutput(t,s),{action:"rethrow",stdout:t,stderr:s,error:e};let n=xe(e);return{action:"error",stdout:t,stderr:`${s}${n}
|
|
625
|
+
`,exitCode:1}}async function cs(e,t,s="",r=""){let n=s,i=r,o=0;try{for(let a of t){let l=await e.executeStatement(a);n+=l.stdout,i+=l.stderr,o=l.exitCode}}catch(a){if(Dt(a)||a instanceof ge||a instanceof j||a instanceof J||a instanceof Me)throw a.prependOutput(n,i),a;return{stdout:n,stderr:`${i}${xe(a)}
|
|
626
|
+
`,exitCode:1}}return{stdout:n,stderr:i,exitCode:o}}async function Jn(e,t){let s="",r="";for(let n of t.clauses){let i=await vr(e,n.condition);if(s+=i.stdout,r+=i.stderr,i.exitCode===0)return cs(e,n.body,s,r)}return t.elseBody?cs(e,t.elseBody,s,r):C(s,r,0)}async function ei(e,t){let s=await Oe(e,t.redirections);if(s)return s;let r="",n="",i=0,o=0;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t.variable))return A(`bash: \`${t.variable}': not a valid identifier
|
|
627
|
+
`);let a=[];if(t.words===null)a=(e.state.env.get("@")||"").split(" ").filter(Boolean);else if(t.words.length===0)a=[];else try{for(let c of t.words){let u=await Ce(e,c);a.push(...u.values)}}catch(c){if(c instanceof Ot)return{stdout:"",stderr:c.stderr,exitCode:1};throw c}e.state.loopDepth++;try{for(let c of a){o++,o>e.limits.maxLoopIterations&&_e(`for loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,n),e.state.env.set(t.variable,c);try{for(let u of t.body){let f=await e.executeStatement(u);r+=f.stdout,n+=f.stderr,i=f.exitCode}}catch(u){let f=$t(u,r,n,e.state.loopDepth);if(r=f.stdout,n=f.stderr,f.action==="break")break;if(f.action==="continue")continue;if(f.action==="error"){let d=C(r,n,f.exitCode??1);return G(e,d,t.redirections)}throw f.error}}}finally{e.state.loopDepth--}let l=C(r,n,i);return G(e,l,t.redirections)}async function ti(e,t){let s=await Oe(e,t.redirections);if(s)return s;let r=t.line;r!==void 0&&(e.state.currentLine=r);let n="",i="",o=0,a=0;t.init&&await H(e,t.init.expression),e.state.loopDepth++;try{for(;a++,a>e.limits.maxLoopIterations&&_e(`for loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,i),!(t.condition&&(r!==void 0&&(e.state.currentLine=r),await H(e,t.condition.expression)===0));){try{for(let c of t.body){let u=await e.executeStatement(c);n+=u.stdout,i+=u.stderr,o=u.exitCode}}catch(c){let u=$t(c,n,i,e.state.loopDepth);if(n=u.stdout,i=u.stderr,u.action==="break")break;if(u.action==="continue"){t.update&&await H(e,t.update.expression);continue}if(u.action==="error"){let f=C(n,i,u.exitCode??1);return G(e,f,t.redirections)}throw u.error}t.update&&await H(e,t.update.expression)}}finally{e.state.loopDepth--}let l=C(n,i,o);return G(e,l,t.redirections)}async function si(e,t,s=""){let r="",n="",i=0,o=0,a=s;for(let c of t.redirections)if((c.operator==="<<"||c.operator==="<<-")&&c.target.type==="HereDoc"){let u=c.target,f=await I(e,u.content);u.stripTabs&&(f=f.split(`
|
|
628
628
|
`).map(d=>d.replace(/^\t+/,"")).join(`
|
|
629
629
|
`)),a=f}else if(c.operator==="<<<"&&c.target.type==="Word")a=`${await I(e,c.target)}
|
|
630
630
|
`;else if(c.operator==="<"&&c.target.type==="Word")try{let u=await I(e,c.target),f=e.fs.resolvePath(e.state.cwd,u);a=await e.fs.readFile(f)}catch{let u=await I(e,c.target);return A(`bash: ${u}: No such file or directory
|
|
631
|
-
`)}let l=e.state.groupStdin;a&&(e.state.groupStdin=a),e.state.loopDepth++;try{for(;;){o++,o>e.limits.maxLoopIterations&&_e(`while loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,n);let c=0,u=!1,f=!1,d=e.state.inCondition;e.state.inCondition=!0;try{for(let p of t.condition){let
|
|
632
|
-
`,t||
|
|
631
|
+
`)}let l=e.state.groupStdin;a&&(e.state.groupStdin=a),e.state.loopDepth++;try{for(;;){o++,o>e.limits.maxLoopIterations&&_e(`while loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,n);let c=0,u=!1,f=!1,d=e.state.inCondition;e.state.inCondition=!0;try{for(let p of t.condition){let y=await e.executeStatement(p);r+=y.stdout,n+=y.stderr,c=y.exitCode}}catch(p){if(p instanceof me){if(r+=p.stdout,n+=p.stderr,p.levels>1&&e.state.loopDepth>1)throw p.levels--,p.stdout=r,p.stderr=n,e.state.inCondition=d,p;u=!0}else if(p instanceof ye){if(r+=p.stdout,n+=p.stderr,p.levels>1&&e.state.loopDepth>1)throw p.levels--,p.stdout=r,p.stderr=n,e.state.inCondition=d,p;f=!0}else throw e.state.inCondition=d,p}finally{e.state.inCondition=d}if(u)break;if(!f){if(c!==0)break;try{for(let p of t.body){let y=await e.executeStatement(p);r+=y.stdout,n+=y.stderr,i=y.exitCode}}catch(p){let y=$t(p,r,n,e.state.loopDepth);if(r=y.stdout,n=y.stderr,y.action==="break")break;if(y.action==="continue")continue;if(y.action==="error")return C(r,n,y.exitCode??1);throw y.error}}}}finally{e.state.loopDepth--,e.state.groupStdin=l}return C(r,n,i)}async function ri(e,t){let s="",r="",n=0,i=0;e.state.loopDepth++;try{for(;;){i++,i>e.limits.maxLoopIterations&&_e(`until loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",s,r);let o=await vr(e,t.condition);if(s+=o.stdout,r+=o.stderr,o.exitCode===0)break;try{for(let a of t.body){let l=await e.executeStatement(a);s+=l.stdout,r+=l.stderr,n=l.exitCode}}catch(a){let l=$t(a,s,r,e.state.loopDepth);if(s=l.stdout,r=l.stderr,l.action==="break")break;if(l.action==="continue")continue;if(l.action==="error")return C(s,r,l.exitCode??1);throw l.error}}}finally{e.state.loopDepth--}return C(s,r,n)}async function ni(e,t){let s=await Oe(e,t.redirections);if(s)return s;let r="",n="",i=0,o=await I(e,t.word),a=!1;for(let c=0;c<t.items.length;c++){let u=t.items[c],f=a;if(!a)for(let d of u.patterns){let p=await I(e,d);Wr(d)&&(p=Mr(p));let y=e.state.shoptOptions.nocasematch,h=e.state.shoptOptions.extglob;if(nt(o,p,y,h)){f=!0;break}}if(f){let d=await cs(e,u.body,r,n);if(r=d.stdout,n=d.stderr,i=d.exitCode,u.terminator===";;")break;u.terminator===";&"?a=!0:a=!1}else a=!1}let l=C(r,n,i);return G(e,l,t.redirections)}function br(e,t){if(e.parts.length!==1)return!1;let s=e.parts[0];return s.type!=="Literal"?!1:t.includes(s.value)}function ii(e){if(!e.startsWith("__rw__:"))return null;let t=e.slice(7),s=t.indexOf(":");if(s===-1)return null;let r=Number.parseInt(t.slice(0,s),10);if(Number.isNaN(r)||r<0)return null;let n=s+1,i=t.slice(n,n+r),o=n+r+1,a=t.slice(o),l=a.indexOf(":");if(l===-1)return null;let c=Number.parseInt(a.slice(0,l),10);if(Number.isNaN(c)||c<0)return null;let u=a.slice(l+1);return{path:i,position:c,content:u}}var oi="+ ";async function ai(e){let t=e.state.env.get("PS4");if(t===void 0)return oi;if(t==="")return"";try{let r=new B().parseWordFromString(t,!1,!1);return await I(e,r)}catch{return e.state.expansionStderr=`${e.state.expansionStderr||""}bash: ${t}: bad substitution
|
|
632
|
+
`,t||oi}}function Yo(e){return e.map(t=>Qo(t)).join(" ")}function Qo(e){if(e==="")return"''";if(!/[\s'"\\$`!*?[\]{}|&;<>()~#\n\t]/.test(e))return e;let s=/[\x00-\x1f\x7f]/.test(e),r=e.includes(`
|
|
633
633
|
`),n=e.includes(" "),i=e.includes("\\"),o=e.includes("'");if(s||r||n||i){let l="";for(let c of e){let u=c.charCodeAt(0);c===`
|
|
634
|
-
`?l+="\\n":c===" "?l+="\\t":c==="\\"?l+="\\\\":c==="'"?l+="'":c==='"'?l+='"':u<32||u===127?u<256?l+=`\\x${u.toString(16).padStart(2,"0")}`:l+=`\\u${u.toString(16).padStart(4,"0")}`:l+=c}return`$'${l}'`}return o?`"${e.replace(/([\\$`"])/g,"\\$1")}"`:`'${e}'`}async function
|
|
635
|
-
`}async function
|
|
636
|
-
`:""}async function
|
|
634
|
+
`?l+="\\n":c===" "?l+="\\t":c==="\\"?l+="\\\\":c==="'"?l+="'":c==='"'?l+='"':u<32||u===127?u<256?l+=`\\x${u.toString(16).padStart(2,"0")}`:l+=`\\u${u.toString(16).padStart(4,"0")}`:l+=c}return`$'${l}'`}return o?`"${e.replace(/([\\$`"])/g,"\\$1")}"`:`'${e}'`}async function li(e,t,s){if(!e.state.options.xtrace)return"";let r=await ai(e),n=[t,...s],i=Yo(n);return`${r}${i}
|
|
635
|
+
`}async function ci(e,t,s){return e.state.options.xtrace?`${await ai(e)}${t}=${s}
|
|
636
|
+
`:""}async function ui(e,t,s){let r=t.timed?ys():0,n="",i=F,o=0,a=[],l="",c=t.commands.length>1,u=e.state.lastArg;for(let d=0;d<t.commands.length;d++){let p=t.commands[d],y=d===t.commands.length-1,h=d===0;c&&(e.state.lastArg="",h||(e.state.groupStdin=void 0));let b=c&&(!y||!e.state.shoptOptions.lastpipe)?new Map(e.state.env):null,v;try{v=await s(p,n)}catch(P){if(P instanceof Nt)v={stdout:P.stdout,stderr:P.stderr,exitCode:1};else if(P instanceof j&&t.commands.length>1)v={stdout:P.stdout,stderr:P.stderr,exitCode:P.exitCode};else if(P instanceof ge&&t.commands.length>1)v={stdout:P.stdout,stderr:P.stderr,exitCode:P.exitCode};else throw b&&(e.state.env=b),P}b&&(e.state.env=b),a.push(v.exitCode),v.exitCode!==0&&(o=v.exitCode),y?i=v:(t.pipeStderr?.[d]??!1?n=v.stderr+v.stdout:(n=v.stdout,l+=v.stderr),i={stdout:"",stderr:"",exitCode:v.exitCode})}if(l&&(i={...i,stderr:l+i.stderr}),t.commands.length>1||t.commands.length===1&&t.commands[0].type==="SimpleCommand"){for(let d of e.state.env.keys())d.startsWith("PIPESTATUS_")&&e.state.env.delete(d);for(let d=0;d<a.length;d++)e.state.env.set(`PIPESTATUS_${d}`,String(a[d]));e.state.env.set("PIPESTATUS__length",String(a.length))}if(e.state.options.pipefail&&o!==0&&(i={...i,exitCode:o}),t.negated&&(i={...i,exitCode:i.exitCode===0?1:0}),t.timed){let p=(ys()-r)/1e3,y=Math.floor(p/60),h=p%60,m;t.timePosix?m=`real ${p.toFixed(2)}
|
|
637
637
|
user 0.00
|
|
638
638
|
sys 0.00
|
|
639
|
-
`:
|
|
640
|
-
real ${`${
|
|
639
|
+
`:m=`
|
|
640
|
+
real ${`${y}m${h.toFixed(3)}s`}
|
|
641
641
|
user 0m0.000s
|
|
642
642
|
sys 0m0.000s
|
|
643
|
-
`,i={...i,stderr:i.stderr+
|
|
644
|
-
`,1)};let l=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(l){let u=await
|
|
645
|
-
`,1)};if(
|
|
646
|
-
`,1)}}if(
|
|
647
|
-
`,{continueToNext:!0,xtraceOutput:o};let u=
|
|
648
|
-
`)}}async function
|
|
649
|
-
`,1)};a=f}}if(
|
|
650
|
-
`;if(i.fatal)throw new j(1,"",l);return{index:0,error:C("",l,1)}}let o=e.state.env.get(s);n=o?Number.parseInt(o,10):0}Number.isNaN(n)&&(n=0)}if(n<0){let i
|
|
643
|
+
`,i={...i,stderr:i.stderr+m}}return c&&!e.state.shoptOptions.lastpipe&&(e.state.lastArg=u),i}async function fi(e,t){let s=new Map,r="";for(let n of t.assignments){let i=n.name;if(n.array){let u=await Jo(e,t,i,n.array,n.append,s);if(u.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:u.error};if(r+=u.xtraceOutput,u.continueToNext)continue}let o=n.value?await I(e,n.value):"";if(i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[\]$/))return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:C("",`bash: ${i}: bad array subscript
|
|
644
|
+
`,1)};let l=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(l){let u=await na(e,t,l[1],l[2],o,n.append,s);if(u.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:u.error};if(u.continueToNext)continue}let c=await oa(e,t,i,o,n.append,s);if(c.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:c.error};r+=c.xtraceOutput,c.continueToNext}return{continueToNext:!1,xtraceOutput:r,tempAssignments:s}}async function Jo(e,t,s,r,n,i){let o="";if(/\[.+\]$/.test(s))return{continueToNext:!1,xtraceOutput:"",error:C("",`bash: ${s}: cannot assign list to array member
|
|
645
|
+
`,1)};if(ve(e,s)){let u=Lr(e,s);if(u===void 0||u==="")throw new j(1,"","");let f=Be(e,s);if(f&&/^[a-zA-Z_][a-zA-Z0-9_]*\[@\]$/.test(f))return{continueToNext:!1,xtraceOutput:"",error:C("",`bash: ${s}: cannot assign list to array member
|
|
646
|
+
`,1)}}if(Ge(e,s)){if(t.name)return o+=`bash: ${s}: readonly variable
|
|
647
|
+
`,{continueToNext:!0,xtraceOutput:o};let u=se(e,s);if(u)return{continueToNext:!1,xtraceOutput:"",error:u}}let a=e.state.associativeArrays?.has(s),l=ea(r),c=()=>{let u=`${s}_`;for(let f of e.state.env.keys())f.startsWith(u)&&!f.includes("__")&&e.state.env.delete(f);e.state.env.delete(s)};if(a&&l?await ta(e,t,s,r,n,c,u=>{o+=u}):l?await sa(e,s,r,n,c):await ra(e,s,r,n,c),t.name){i.set(s,e.state.env.get(s));let f=`(${r.map(d=>Ft(d)).join(" ")})`;e.state.env.set(s,f)}return{continueToNext:!0,xtraceOutput:o}}function ea(e){return e.some(t=>{if(t.parts.length>=2){let s=t.parts[0],r=t.parts[1];if(s.type!=="Glob"||!s.pattern.startsWith("["))return!1;if(s.pattern==="["&&(r.type==="DoubleQuoted"||r.type==="SingleQuoted")){if(t.parts.length<3)return!1;let n=t.parts[2];return n.type!=="Literal"?!1:n.value.startsWith("]=")||n.value.startsWith("]+=")}return r.type!=="Literal"?!1:r.value.startsWith("]")?r.value.startsWith("]=")||r.value.startsWith("]+="):s.pattern.endsWith("]")?r.value.startsWith("=")||r.value.startsWith("+="):!1}return!1})}async function ta(e,t,s,r,n,i,o){let a=[];for(let l of r){let c=vs(l);if(c){let{key:u,valueParts:f,append:d}=c,p;f.length>0?p=await I(e,{type:"Word",parts:f}):p="",p=X(e,p),a.push({type:"keyed",key:u,value:p,append:d})}else{let u=await I(e,l);a.push({type:"invalid",expandedValue:u})}}n||i();for(let l of a)if(l.type==="keyed")if(l.append){let c=e.state.env.get(`${s}_${l.key}`)??"";e.state.env.set(`${s}_${l.key}`,c+l.value)}else e.state.env.set(`${s}_${l.key}`,l.value);else{let c=t.line??e.state.currentLine??1;o(`bash: line ${c}: ${s}: ${l.expandedValue}: must use subscript when assigning associative array
|
|
648
|
+
`)}}async function sa(e,t,s,r,n){let i=[];for(let a of s){let l=vs(a);if(l){let{key:c,valueParts:u,append:f}=l,d;u.length>0?d=await I(e,{type:"Word",parts:u}):d="",d=X(e,d),i.push({type:"keyed",indexExpr:c,value:d,append:f})}else{let c=await Ce(e,a);i.push({type:"non-keyed",values:c.values})}}r||n();let o=0;for(let a of i)if(a.type==="keyed"){let l;try{let c=new B,u=ee(c,a.indexExpr);l=await H(e,u.expression,!1)}catch{if(/^-?\d+$/.test(a.indexExpr))l=Number.parseInt(a.indexExpr,10);else{let c=e.state.env.get(a.indexExpr);l=c?Number.parseInt(c,10):0,Number.isNaN(l)&&(l=0)}}if(a.append){let c=e.state.env.get(`${t}_${l}`)??"";e.state.env.set(`${t}_${l}`,c+a.value)}else e.state.env.set(`${t}_${l}`,a.value);o=l+1}else for(let l of a.values)e.state.env.set(`${t}_${o++}`,l)}async function ra(e,t,s,r,n){let i=[];for(let a of s){let l=await Ce(e,a);i.push(...l.values)}let o=0;if(r){let a=Se(e,t);if(a.length>0)o=Math.max(...a.map(([c])=>typeof c=="number"?c:0))+1;else{let l=e.state.env.get(t);l!==void 0&&(e.state.env.set(`${t}_0`,l),e.state.env.delete(t),o=1)}}else n();for(let a=0;a<i.length;a++)e.state.env.set(`${t}_${o+a}`,i[a]);r||e.state.env.set(`${t}__length`,String(i.length))}async function na(e,t,s,r,n,i,o){let a=s;if(ve(e,s)){let f=Be(e,s);if(f&&f!==s){if(f.includes("["))return{continueToNext:!1,xtraceOutput:"",error:C("",`bash: \`${f}': not a valid identifier
|
|
649
|
+
`,1)};a=f}}if(Ge(e,a)){if(t.name)return{continueToNext:!0,xtraceOutput:""};let f=se(e,a);if(f)return{continueToNext:!1,xtraceOutput:"",error:f}}let l=e.state.associativeArrays?.has(a),c;if(l)c=await di(e,a,r);else{let f=await ia(e,a,r);if(f.error)return{continueToNext:!1,xtraceOutput:"",error:f.error};c=`${a}_${f.index}`}let u=i?(e.state.env.get(c)||"")+n:n;if(t.name)o.set(c,e.state.env.get(c)),e.state.env.set(c,u);else{let f=it(e,a);if(f!==void 0&&f===e.state.callDepth&&e.state.localScopes.length>0){let d=e.state.localScopes[e.state.localScopes.length-1];d.has(c)||d.set(c,e.state.env.get(c))}e.state.env.set(c,u)}return{continueToNext:!0,xtraceOutput:""}}async function di(e,t,s){let r;if(s.startsWith("'")&&s.endsWith("'"))r=s.slice(1,-1);else if(s.startsWith('"')&&s.endsWith('"')){let n=s.slice(1,-1),o=new B().parseWordFromString(n,!0,!1);r=await I(e,o)}else if(s.includes("$")){let i=new B().parseWordFromString(s,!1,!1);r=await I(e,i)}else r=s;return`${t}_${r}`}async function ia(e,t,s){let r=s;s.startsWith('"')&&s.endsWith('"')&&s.length>=2&&(r=s.slice(1,-1));let n;if(/^-?\d+$/.test(r))n=Number.parseInt(r,10);else{try{let i=new B,o=ee(i,r);n=await H(e,o.expression,!1)}catch(i){if(i instanceof qe){let l=`bash: line ${e.state.currentLine}: ${s}: ${i.message}
|
|
650
|
+
`;if(i.fatal)throw new j(1,"",l);return{index:0,error:C("",l,1)}}let o=e.state.env.get(s);n=o?Number.parseInt(o,10):0}Number.isNaN(n)&&(n=0)}if(n<0){let i=Se(e,t);if(i.length===0){let a=e.state.currentLine;return{index:0,error:C("",`bash: line ${a}: ${t}[${s}]: bad array subscript
|
|
651
651
|
`,1)}}if(n=Math.max(...i.map(([a])=>typeof a=="number"?a:0))+1+n,n<0){let a=e.state.currentLine;return{index:0,error:C("",`bash: line ${a}: ${t}[${s}]: bad array subscript
|
|
652
|
-
`,1)}}}return{index:n}}async function
|
|
653
|
-
`,1)};if(f===null)return{continueToNext:!0,xtraceOutput:""};a=f;let d=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);d&&(l={arrayName:d[1],subscriptExpr:d[2]},a=d[1])}if(
|
|
654
|
-
`,{continueToNext:!0,xtraceOutput:o};let f=
|
|
655
|
-
`,1);return G(e,T,t.redirections)}w();let
|
|
652
|
+
`,1)}}}return{index:n}}async function oa(e,t,s,r,n,i){let o="",a=s,l=null;if(ve(e,s)){let f=Fr(e,s,r);if(f===void 0)return{continueToNext:!1,xtraceOutput:"",error:C("",`bash: ${s}: circular name reference
|
|
653
|
+
`,1)};if(f===null)return{continueToNext:!0,xtraceOutput:""};a=f;let d=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);d&&(l={arrayName:d[1],subscriptExpr:d[2]},a=d[1])}if(Ge(e,a)){if(t.name)return o+=`bash: ${a}: readonly variable
|
|
654
|
+
`,{continueToNext:!0,xtraceOutput:o};let f=se(e,a);if(f)return{continueToNext:!1,xtraceOutput:"",error:f}}let c;if(vt(e,a))try{let f=new B;if(n){let p=`(${e.state.env.get(a)||"0"}) + (${r})`,y=ee(f,p);c=String(await H(e,y.expression))}else{let d=ee(f,r);c=String(await H(e,d.expression))}}catch{c="0"}else{let{isArray:f}=await import("./chunks/expansion-HJ6B4DDG.js"),d=f(e,a)?`${a}_0`:a;c=n?(e.state.env.get(d)||"")+r:r}c=lt(e,a,c),o+=await ci(e,a,c);let u=a;if(l)u=await aa(e,l);else{let{isArray:f}=await import("./chunks/expansion-HJ6B4DDG.js");f(e,a)&&(u=`${a}_0`)}return t.name?(i.set(u,e.state.env.get(u)),e.state.env.set(u,c)):(e.state.env.set(u,c),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(a)),e.state.tempEnvBindings?.some(f=>f.has(a))&&(e.state.mutatedTempEnvVars=e.state.mutatedTempEnvVars||new Set,e.state.mutatedTempEnvVars.add(a))),{continueToNext:!1,xtraceOutput:o}}async function aa(e,t){let{arrayName:s,subscriptExpr:r}=t;if(e.state.associativeArrays?.has(s))return di(e,s,r);let i;if(/^-?\d+$/.test(r))i=Number.parseInt(r,10);else{try{let o=new B,a=ee(o,r);i=await H(e,a.expression,!1)}catch{let o=e.state.env.get(r);i=o?Number.parseInt(o,10):0}Number.isNaN(i)&&(i=0)}if(i<0){let o=Se(e,s);o.length>0&&(i=Math.max(...o.map(l=>l[0]))+1+i)}return`${s}_${i}`}async function hi(e,t,s,r){let n=await Oe(e,t.redirections);if(n)return n;let i=new Map(e.state.env),o=e.state.cwd,a={...e.state.options},l=new Map(e.state.functions),c=e.state.localScopes,u=e.state.localVarStack,f=e.state.localVarDepth,d=e.state.fullyUnsetLocals;if(e.state.localScopes=c.map($=>new Map($)),u){e.state.localVarStack=new Map;for(let[$,T]of u.entries())e.state.localVarStack.set($,T.map(N=>({...N})))}f&&(e.state.localVarDepth=new Map(f)),d&&(e.state.fullyUnsetLocals=new Map(d));let p=e.state.loopDepth,y=e.state.parentHasLoopContext;e.state.parentHasLoopContext=p>0,e.state.loopDepth=0;let h=e.state.lastArg,m=e.state.bashPid;e.state.bashPid=e.state.nextVirtualPid++;let b=e.state.groupStdin;s&&(e.state.groupStdin=s);let v="",P="",g=0,w=()=>{e.state.env=i,e.state.cwd=o,e.state.options=a,e.state.functions=l,e.state.localScopes=c,e.state.localVarStack=u,e.state.localVarDepth=f,e.state.fullyUnsetLocals=d,e.state.loopDepth=p,e.state.parentHasLoopContext=y,e.state.groupStdin=b,e.state.bashPid=m,e.state.lastArg=h};try{for(let $ of t.body){let T=await r($);v+=T.stdout,P+=T.stderr,g=T.exitCode}}catch($){if(w(),$ instanceof J)throw $;if($ instanceof Me){v+=$.stdout,P+=$.stderr;let N=C(v,P,0);return G(e,N,t.redirections)}if($ instanceof me||$ instanceof ye){v+=$.stdout,P+=$.stderr;let N=C(v,P,0);return G(e,N,t.redirections)}if($ instanceof j){v+=$.stdout,P+=$.stderr;let N=C(v,P,$.exitCode);return G(e,N,t.redirections)}if($ instanceof ue){v+=$.stdout,P+=$.stderr;let N=C(v,P,$.exitCode);return G(e,N,t.redirections)}if($ instanceof ge){let N=C(v+$.stdout,P+$.stderr,$.exitCode);return G(e,N,t.redirections)}let T=C(v,`${P}${xe($)}
|
|
655
|
+
`,1);return G(e,T,t.redirections)}w();let E=C(v,P,g);return G(e,E,t.redirections)}async function pi(e,t,s,r){let n="",i="",o=0,a=await ts(e,t.redirections);if(a)return a;let l=s;for(let f of t.redirections)if((f.operator==="<<"||f.operator==="<<-")&&f.target.type==="HereDoc"){let d=f.target,p=await I(e,d.content);d.stripTabs&&(p=p.split(`
|
|
656
656
|
`).map(h=>h.replace(/^\t+/,"")).join(`
|
|
657
|
-
`));let
|
|
657
|
+
`));let y=f.fd??0;y!==0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),ce(e),e.state.fileDescriptors.set(y,p)):l=p}else if(f.operator==="<<<"&&f.target.type==="Word")l=`${await I(e,f.target)}
|
|
658
658
|
`;else if(f.operator==="<"&&f.target.type==="Word")try{let d=await I(e,f.target),p=e.fs.resolvePath(e.state.cwd,d);l=await e.fs.readFile(p)}catch{let d=await I(e,f.target);return C("",`bash: ${d}: No such file or directory
|
|
659
|
-
`,1)}let c=e.state.groupStdin;l&&(e.state.groupStdin=l);try{for(let f of t.body){let d=await r(f);n+=d.stdout,i+=d.stderr,o=d.exitCode}}catch(f){if(e.state.groupStdin=c,f instanceof
|
|
660
|
-
`,1)}e.state.groupStdin=c;let u=C(n,i,o);return G(e,u,t.redirections)}async function
|
|
661
|
-
`,127)}if(i.startsWith("#!")){let
|
|
662
|
-
`);
|
|
663
|
-
`);throw
|
|
664
|
-
`);let n=0,i=-1,o=!1;for(let c=0;c<t.pipelines.length;c++){let u=t.pipelines[c],f=c>0?t.operators[c-1]:null;if(f==="&&"&&n!==0||f==="||"&&n===0)continue;let d=await this.executePipeline(u);s+=d.stdout,r+=d.stderr,n=d.exitCode,i=c,o=u.negated,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n))}let a=i<t.pipelines.length-1,l=this.ctx.state.errexitSafe;if(this.ctx.state.errexitSafe=a||o||l,this.ctx.state.options.errexit&&n!==0&&i===t.pipelines.length-1&&!o&&!this.ctx.state.inCondition&&!l)throw new
|
|
659
|
+
`,1)}let c=e.state.groupStdin;l&&(e.state.groupStdin=l);try{for(let f of t.body){let d=await r(f);n+=d.stdout,i+=d.stderr,o=d.exitCode}}catch(f){if(e.state.groupStdin=c,f instanceof J)throw f;if(Dt(f)||f instanceof ge||f instanceof j)throw f.prependOutput(n,i),f;return C(n,`${i}${xe(f)}
|
|
660
|
+
`,1)}e.state.groupStdin=c;let u=C(n,i,o);return G(e,u,t.redirections)}async function mi(e,t,s,r,n){let i;try{i=await e.fs.readFile(t)}catch{return A(`bash: ${t}: No such file or directory
|
|
661
|
+
`,127)}if(i.startsWith("#!")){let m=i.indexOf(`
|
|
662
|
+
`);m!==-1&&(i=i.slice(m+1))}let o=new Map(e.state.env),a=e.state.cwd,l={...e.state.options},c=e.state.loopDepth,u=e.state.parentHasLoopContext,f=e.state.lastArg,d=e.state.bashPid,p=e.state.groupStdin,y=e.state.currentSource;e.state.parentHasLoopContext=c>0,e.state.loopDepth=0,e.state.bashPid=e.state.nextVirtualPid++,r&&(e.state.groupStdin=r),e.state.currentSource=t,e.state.env.set("0",t),e.state.env.set("#",String(s.length)),e.state.env.set("@",s.join(" ")),e.state.env.set("*",s.join(" "));for(let m=0;m<s.length&&m<9;m++)e.state.env.set(String(m+1),s[m]);for(let m=s.length+1;m<=9;m++)e.state.env.delete(String(m));let h=()=>{e.state.env=o,e.state.cwd=a,e.state.options=l,e.state.loopDepth=c,e.state.parentHasLoopContext=u,e.state.lastArg=f,e.state.bashPid=d,e.state.groupStdin=p,e.state.currentSource=y};try{let b=new B().parse(i),v=await n(b);return h(),v}catch(m){if(h(),m instanceof j||m instanceof J)throw m;if(m.name==="ParseException")return A(`bash: ${t}: ${m.message}
|
|
663
|
+
`);throw m}}var St=class{ctx;constructor(t,s){this.ctx={state:s,fs:t.fs,commands:t.commands,limits:t.limits,execFn:t.exec,executeScript:this.executeScript.bind(this),executeStatement:this.executeStatement.bind(this),executeCommand:this.executeCommand.bind(this),fetch:t.fetch,sleep:t.sleep,trace:t.trace,coverage:t.coverage,requireDefenseContext:t.requireDefenseContext??!1}}assertDefenseContext(t){if(!this.ctx.requireDefenseContext||pe.isInSandboxedContext())return;let s=`interpreter ${t} attempted outside defense context`;throw new Fe(s,{timestamp:Date.now(),type:"missing_defense_context",message:s,path:"DefenseInDepthBox.context",stack:new Error().stack,executionId:pe.getCurrentExecutionId()})}buildExportedEnv(){let t=this.ctx.state.exportedVars,s=this.ctx.state.tempExportedVars,r=new Set;if(t)for(let i of t)r.add(i);if(s)for(let i of s)r.add(i);if(r.size===0)return Object.create(null);let n=Object.create(null);for(let i of r){let o=this.ctx.state.env.get(i);o!==void 0&&(n[i]=o)}return n}async executeScript(t){this.assertDefenseContext("execution");let s="",r="",n=0,i=this.ctx.limits.maxOutputSize,o=(a,l)=>{s.length+r.length+a.length+l.length>i&&_e(`total output size exceeded (>${i} bytes), increase executionLimits.maxOutputSize`,"output_size"),s+=a,r+=l};for(let a of t.statements)try{let l=await this.executeStatement(a);o(l.stdout,l.stderr),n=l.exitCode,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n))}catch(l){if(l instanceof j)throw l.prependOutput(s,r),l;if(l instanceof $e)return o(l.stdout,l.stderr),n=l.exitCode,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n)),{stdout:s,stderr:r,exitCode:n,env:We(this.ctx.state.env)};if(l instanceof J)throw l;if(l instanceof ge)return o(l.stdout,l.stderr),n=l.exitCode,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n)),{stdout:s,stderr:r,exitCode:n,env:We(this.ctx.state.env)};if(l instanceof kr)return o(l.stdout,l.stderr),n=1,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n)),{stdout:s,stderr:r,exitCode:n,env:We(this.ctx.state.env)};if(l instanceof Nt)return o(l.stdout,l.stderr),n=1,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n)),{stdout:s,stderr:r,exitCode:n,env:We(this.ctx.state.env)};if(l instanceof qe){o(l.stdout,l.stderr),n=1,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n));continue}if(l instanceof Cr){o(l.stdout,l.stderr),n=1,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n));continue}if(l instanceof me||l instanceof ye){if(this.ctx.state.loopDepth>0)throw l.prependOutput(s,r),l;o(l.stdout,l.stderr);continue}throw l instanceof ue&&l.prependOutput(s,r),l}return{stdout:s,stderr:r,exitCode:n,env:We(this.ctx.state.env)}}async executeUserScript(t,s,r=""){return mi(this.ctx,t,s,r,n=>this.executeScript(n))}async executeStatement(t){if(this.assertDefenseContext("statement"),this.ctx.state.signal?.aborted)throw new xt;if(this.ctx.state.commandCount++,this.ctx.state.commandCount>this.ctx.limits.maxCommandCount&&_e(`too many commands executed (>${this.ctx.limits.maxCommandCount}), increase executionLimits.maxCommandCount`,"commands"),t.deferredError)throw new Lt(t.deferredError.message,t.line??1,1);if(this.ctx.state.options.noexec)return F;this.ctx.state.errexitSafe=!1;let s="",r="";this.ctx.state.options.verbose&&!this.ctx.state.suppressVerbose&&t.sourceText&&(r+=`${t.sourceText}
|
|
664
|
+
`);let n=0,i=-1,o=!1;for(let c=0;c<t.pipelines.length;c++){let u=t.pipelines[c],f=c>0?t.operators[c-1]:null;if(f==="&&"&&n!==0||f==="||"&&n===0)continue;let d=await this.executePipeline(u);s+=d.stdout,r+=d.stderr,n=d.exitCode,i=c,o=u.negated,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n))}let a=i<t.pipelines.length-1,l=this.ctx.state.errexitSafe;if(this.ctx.state.errexitSafe=a||o||l,this.ctx.state.options.errexit&&n!==0&&i===t.pipelines.length-1&&!o&&!this.ctx.state.inCondition&&!l)throw new ge(n,s,r);return C(s,r,n)}async executePipeline(t){return ui(this.ctx,t,(s,r)=>this.executeCommand(s,r))}async executeCommand(t,s){switch(this.assertDefenseContext("command"),this.ctx.coverage?.hit(`bash:cmd:${t.type}`),t.type){case"SimpleCommand":return this.executeSimpleCommand(t,s);case"If":return Jn(this.ctx,t);case"For":return ei(this.ctx,t);case"CStyleFor":return ti(this.ctx,t);case"While":return si(this.ctx,t,s);case"Until":return ri(this.ctx,t);case"Case":return ni(this.ctx,t);case"Subshell":return this.executeSubshell(t,s);case"Group":return this.executeGroup(t,s);case"FunctionDef":return bn(this.ctx,t);case"ArithmeticCommand":return this.executeArithmeticCommand(t);case"ConditionalCommand":return this.executeConditionalCommand(t);default:return F}}async executeSimpleCommand(t,s){try{return await this.executeSimpleCommandInner(t,s)}catch(r){if(r instanceof Ot)return A(r.stderr);throw r}}async executeSimpleCommandInner(t,s){if(t.line!==void 0&&(this.ctx.state.currentLine=t.line),this.ctx.state.shoptOptions.expand_aliases&&t.name){let g=t,w=100;for(;w>0;){let E=this.expandAlias(g);if(E===g)break;g=E,w--}this.aliasExpansionStack.clear(),g!==t&&(t=g)}this.ctx.state.expansionStderr="";let r=await fi(this.ctx,t);if(r.error)return r.error;let n=r.tempAssignments,i=r.xtraceOutput;if(!t.name){if(t.redirections.length>0){let w=await Oe(this.ctx,t.redirections);if(w)return w;let E=C("",i,0);return G(this.ctx,E,t.redirections)}this.ctx.state.lastArg="";let g=(this.ctx.state.expansionStderr||"")+i;return this.ctx.state.expansionStderr="",C("",g,this.ctx.state.lastExitCode)}let o=t.name&&br(t.name,["local","declare","typeset","export","readonly"]),a=Array.from(n.keys());if(a.length>0&&!o){this.ctx.state.tempExportedVars=this.ctx.state.tempExportedVars||new Set;for(let g of a)this.ctx.state.tempExportedVars.add(g)}let l=await ts(this.ctx,t.redirections);if(l){for(let[g,w]of n)w===void 0?this.ctx.state.env.delete(g):this.ctx.state.env.set(g,w);return l}let c=-1;for(let g of t.redirections){if((g.operator==="<<"||g.operator==="<<-")&&g.target.type==="HereDoc"){let w=g.target,E=await I(this.ctx,w.content);w.stripTabs&&(E=E.split(`
|
|
665
665
|
`).map(T=>T.replace(/^\t+/,"")).join(`
|
|
666
|
-
`));let
|
|
667
|
-
`;continue}if(
|
|
668
|
-
`)}if(
|
|
669
|
-
`,127)}if(u==="exec"&&(f.length===0||f[0]==="--")){for(let
|
|
670
|
-
`)}break}case"<>":{let
|
|
671
|
-
`);return G(this.ctx,n,t.redirections)}}async executeConditionalCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await Oe(this.ctx,t.redirections);if(s)return s;try{let r=await
|
|
672
|
-
`,n);return G(this.ctx,i,t.redirections)}}};var ie={maxCallDepth:100,maxCommandCount:1e4,maxLoopIterations:1e4,maxAwkIterations:1e4,maxSedIterations:1e4,maxJqIterations:1e4,maxSqliteTimeoutMs:5e3,maxPythonTimeoutMs:3e4,maxGlobOperations:1e5,maxStringLength:10485760,maxArrayElements:1e5,maxHeredocSize:10485760,maxSubstitutionDepth:50,maxBraceExpansionResults:1e4,maxOutputSize:10485760,maxFileDescriptors:1024,maxSourceDepth:100};function
|
|
666
|
+
`));let $=g.fd??0;$!==0?(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),ce(this.ctx),this.ctx.state.fileDescriptors.set($,E)):s=E;continue}if(g.operator==="<<<"&&g.target.type==="Word"){s=`${await I(this.ctx,g.target)}
|
|
667
|
+
`;continue}if(g.operator==="<"&&g.target.type==="Word")try{let w=await I(this.ctx,g.target),E=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);s=await this.ctx.fs.readFile(E)}catch{let w=await I(this.ctx,g.target);for(let[E,$]of n)$===void 0?this.ctx.state.env.delete(E):this.ctx.state.env.set(E,$);return A(`bash: ${w}: No such file or directory
|
|
668
|
+
`)}if(g.operator==="<&"&&g.target.type==="Word"){let w=await I(this.ctx,g.target),E=Number.parseInt(w,10);if(!Number.isNaN(E)&&this.ctx.state.fileDescriptors){let $=this.ctx.state.fileDescriptors.get(E);if($!==void 0)if($.startsWith("__rw__:")){let T=ii($);T&&(s=T.content.slice(T.position),c=E)}else $.startsWith("__file__:")||$.startsWith("__file_append__:")||(s=$)}}}let u=await I(this.ctx,t.name),f=[],d=[];if(br(t.name,["local","declare","typeset","export","readonly"])&&(u==="local"||u==="declare"||u==="typeset"||u==="export"||u==="readonly"))for(let g of t.args){let w=await sn(this.ctx,g);if(w)f.push(w),d.push(!0);else{let E=await rn(this.ctx,g);if(E!==null)f.push(E),d.push(!0);else{let $=await Ce(this.ctx,g);for(let T of $.values)f.push(T),d.push($.quoted)}}}else for(let g of t.args){let w=await Ce(this.ctx,g);for(let E of w.values)f.push(E),d.push(w.quoted)}if(!u){if(t.name.parts.every(w=>w.type==="CommandSubstitution"||w.type==="ParameterExpansion"||w.type==="ArithmeticExpansion")){if(f.length>0){let w=f.shift();return d.shift(),await this.runCommand(w,f,d,s,!1,!1,c)}return C("","",this.ctx.state.lastExitCode)}return A(`bash: : command not found
|
|
669
|
+
`,127)}if(u==="exec"&&(f.length===0||f[0]==="--")){for(let g of t.redirections){if(g.target.type==="HereDoc"||g.fdVariable)continue;let w=await I(this.ctx,g.target),E=g.fd??(g.operator==="<"||g.operator==="<>"?0:1);switch(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),g.operator){case">":case">|":{let $=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);await this.ctx.fs.writeFile($,"","utf8"),ce(this.ctx),this.ctx.state.fileDescriptors.set(E,`__file__:${$}`);break}case">>":{let $=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);ce(this.ctx),this.ctx.state.fileDescriptors.set(E,`__file_append__:${$}`);break}case"<":{let $=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);try{let T=await this.ctx.fs.readFile($);ce(this.ctx),this.ctx.state.fileDescriptors.set(E,T)}catch{return A(`bash: ${w}: No such file or directory
|
|
670
|
+
`)}break}case"<>":{let $=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);try{let T=await this.ctx.fs.readFile($);ce(this.ctx),this.ctx.state.fileDescriptors.set(E,`__rw__:${$.length}:${$}:0:${T}`)}catch{await this.ctx.fs.writeFile($,"","utf8"),ce(this.ctx),this.ctx.state.fileDescriptors.set(E,`__rw__:${$.length}:${$}:0:`)}break}case">&":{if(w==="-")this.ctx.state.fileDescriptors.delete(E);else if(w.endsWith("-")){let $=w.slice(0,-1),T=Number.parseInt($,10);if(!Number.isNaN(T)){let N=this.ctx.state.fileDescriptors.get(T);N!==void 0?this.ctx.state.fileDescriptors.set(E,N):this.ctx.state.fileDescriptors.set(E,`__dupout__:${T}`),this.ctx.state.fileDescriptors.delete(T)}}else{let $=Number.parseInt(w,10);Number.isNaN($)||(ce(this.ctx),this.ctx.state.fileDescriptors.set(E,`__dupout__:${$}`))}break}case"<&":{if(w==="-")this.ctx.state.fileDescriptors.delete(E);else if(w.endsWith("-")){let $=w.slice(0,-1),T=Number.parseInt($,10);if(!Number.isNaN(T)){let N=this.ctx.state.fileDescriptors.get(T);N!==void 0?this.ctx.state.fileDescriptors.set(E,N):this.ctx.state.fileDescriptors.set(E,`__dupin__:${T}`),this.ctx.state.fileDescriptors.delete(T)}}else{let $=Number.parseInt(w,10);Number.isNaN($)||(ce(this.ctx),this.ctx.state.fileDescriptors.set(E,`__dupin__:${$}`))}break}}}for(let[g,w]of n)w===void 0?this.ctx.state.env.delete(g):this.ctx.state.env.set(g,w);if(this.ctx.state.tempExportedVars)for(let g of n.keys())this.ctx.state.tempExportedVars.delete(g);return F}let y=await li(this.ctx,u,f);n.size>0&&(this.ctx.state.tempEnvBindings=this.ctx.state.tempEnvBindings||[],this.ctx.state.tempEnvBindings.push(new Map(n)));let h,m=null;try{h=await this.runCommand(u,f,d,s,!1,!1,c)}catch(g){if(g instanceof me||g instanceof ye)m=g,h=F;else throw g}let b=i+y;if(b&&(h={...h,stderr:b+h.stderr}),h=await G(this.ctx,h,t.redirections),m)throw m;if(f.length>0){let g=f[f.length-1];if((u==="declare"||u==="local"||u==="typeset")&&/^[a-zA-Z_][a-zA-Z0-9_]*=\(/.test(g)){let w=g.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);w&&(g=w[1])}this.ctx.state.lastArg=g}else this.ctx.state.lastArg=u;let v=wn(u)&&u!=="unset"&&u!=="eval";if(!this.ctx.state.options.posix||!v)for(let[g,w]of n)this.ctx.state.fullyUnsetLocals?.has(g)||(w===void 0?this.ctx.state.env.delete(g):this.ctx.state.env.set(g,w));if(this.ctx.state.tempExportedVars)for(let g of n.keys())this.ctx.state.tempExportedVars.delete(g);return n.size>0&&this.ctx.state.tempEnvBindings&&this.ctx.state.tempEnvBindings.pop(),this.ctx.state.expansionStderr&&(h={...h,stderr:this.ctx.state.expansionStderr+h.stderr},this.ctx.state.expansionStderr=""),h}async runCommand(t,s,r,n,i=!1,o=!1,a=-1){let l={ctx:this.ctx,runCommand:(u,f,d,p,y,h,m)=>this.runCommand(u,f,d,p,y,h,m),buildExportedEnv:()=>this.buildExportedEnv(),executeUserScript:(u,f,d)=>this.executeUserScript(u,f,d)},c=await Yn(l,t,s,r,n,i,o,a);return c!==null?c:Qn(l,t,s,n,o)}aliasExpansionStack=new Set;expandAlias(t){return Ns(this.ctx.state,t,this.aliasExpansionStack)}async findCommandInPath(t){return ls(this.ctx,t)}async executeSubshell(t,s=""){return hi(this.ctx,t,s,r=>this.executeStatement(r))}async executeGroup(t,s=""){return pi(this.ctx,t,s,r=>this.executeStatement(r))}async executeArithmeticCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await Oe(this.ctx,t.redirections);if(s)return s;try{let r=await H(this.ctx,t.expression.expression),n=Q(r!==0);return this.ctx.state.expansionStderr&&(n={...n,stderr:this.ctx.state.expansionStderr+n.stderr},this.ctx.state.expansionStderr=""),G(this.ctx,n,t.redirections)}catch(r){let n=A(`bash: arithmetic expression: ${r.message}
|
|
671
|
+
`);return G(this.ctx,n,t.redirections)}}async executeConditionalCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await Oe(this.ctx,t.redirections);if(s)return s;try{let r=await je(this.ctx,t.expression),n=Q(r);return this.ctx.state.expansionStderr&&(n={...n,stderr:this.ctx.state.expansionStderr+n.stderr},this.ctx.state.expansionStderr=""),G(this.ctx,n,t.redirections)}catch(r){let n=r instanceof qe?1:2,i=A(`bash: conditional expression: ${r.message}
|
|
672
|
+
`,n);return G(this.ctx,i,t.redirections)}}};var ie={maxCallDepth:100,maxCommandCount:1e4,maxLoopIterations:1e4,maxAwkIterations:1e4,maxSedIterations:1e4,maxJqIterations:1e4,maxSqliteTimeoutMs:5e3,maxPythonTimeoutMs:3e4,maxGlobOperations:1e5,maxStringLength:10485760,maxArrayElements:1e5,maxHeredocSize:10485760,maxSubstitutionDepth:50,maxBraceExpansionResults:1e4,maxOutputSize:10485760,maxFileDescriptors:1024,maxSourceDepth:100};function yi(e){return e?{maxCallDepth:e.maxCallDepth??ie.maxCallDepth,maxCommandCount:e.maxCommandCount??ie.maxCommandCount,maxLoopIterations:e.maxLoopIterations??ie.maxLoopIterations,maxAwkIterations:e.maxAwkIterations??ie.maxAwkIterations,maxSedIterations:e.maxSedIterations??ie.maxSedIterations,maxJqIterations:e.maxJqIterations??ie.maxJqIterations,maxSqliteTimeoutMs:e.maxSqliteTimeoutMs??ie.maxSqliteTimeoutMs,maxPythonTimeoutMs:e.maxPythonTimeoutMs??ie.maxPythonTimeoutMs,maxGlobOperations:e.maxGlobOperations??ie.maxGlobOperations,maxStringLength:e.maxStringLength??ie.maxStringLength,maxArrayElements:e.maxArrayElements??ie.maxArrayElements,maxHeredocSize:e.maxHeredocSize??ie.maxHeredocSize,maxSubstitutionDepth:e.maxSubstitutionDepth??ie.maxSubstitutionDepth,maxBraceExpansionResults:e.maxBraceExpansionResults??ie.maxBraceExpansionResults,maxOutputSize:e.maxOutputSize??ie.maxOutputSize,maxFileDescriptors:e.maxFileDescriptors??ie.maxFileDescriptors,maxSourceDepth:e.maxSourceDepth??ie.maxSourceDepth}:{...ie}}function Er(e){try{let t=new URL(e);return{origin:t.origin,pathname:t.pathname,href:t.href}}catch{return null}}function la(e){let t=Er(e);return t?{origin:t.origin,pathPrefix:t.pathname}:null}function ca(e,t){let s=Er(e);if(!s)return!1;let r=la(t);return!r||s.origin!==r.origin?!1:r.pathPrefix==="/"||r.pathPrefix===""?!0:s.pathname.startsWith(r.pathPrefix)}function gi(e,t){return!t||t.length===0?!1:t.some(s=>ca(e,s))}function wi(e){let t=ua(e);if(t==="localhost"||t.endsWith(".localhost"))return!0;let s=vi(t);if(s)return bi(s);let r=da(t);return r?ha(r):!1}function ua(e){let t=e.trim().toLowerCase();return t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t}function fa(e){if(!e)return null;let t=10,s=e;if(s.startsWith("0x")||s.startsWith("0X")?(t=16,s=s.slice(2)):s.length>1&&s.startsWith("0")&&(t=8),!s||t===16&&!/^[0-9a-fA-F]+$/.test(s)||t===10&&!/^\d+$/.test(s)||t===8&&!/^[0-7]+$/.test(s))return null;let r=Number.parseInt(s,t);return!Number.isFinite(r)||r<0?null:r}function vi(e){let t=e.split(".");if(t.length===0||t.length>4)return null;let s=t.map(l=>fa(l));if(s.some(l=>l===null))return null;let r=s;if(t.length===1){let l=r[0];return l>4294967295?null:[l>>>24&255,l>>>16&255,l>>>8&255,l&255]}if(t.length===2){let[l,c]=r;return l>255||c>16777215?null:[l,c>>>16&255,c>>>8&255,c&255]}if(t.length===3){let[l,c,u]=r;return l>255||c>255||u>65535?null:[l,c,u>>>8&255,u&255]}let[n,i,o,a]=r;return n>255||i>255||o>255||a>255?null:[n,i,o,a]}function da(e){let t=e,s=null;if(t.includes(".")){let h=t.lastIndexOf(":");if(h<0)return null;let m=t.slice(h+1),b=vi(m);if(!b)return null;s=b,t=t.slice(0,h)}let r=t.includes("::")?t.split("::").length-1:0;if(r>1)return null;let[n,i]=t.split("::"),o=n?n.split(":").filter(Boolean):[],a=i?i.split(":").filter(Boolean):[],l=h=>/^[0-9a-f]{1,4}$/i.test(h)?Number.parseInt(h,16):null,c=o.map(l),u=a.map(l);if(c.some(h=>h===null)||u.some(h=>h===null))return null;let f=s?2:0,d=c.length+u.length+f,p=0;if(r===1){if(p=8-d,p<0)return null}else if(d!==8)return null;let y=[...c,...new Array(p).fill(0),...u];return s&&(y.push(s[0]<<8|s[1]),y.push(s[2]<<8|s[3])),y.length===8?y:null}function bi(e){let[t,s]=e;return t===127||t===10||t===172&&s>=16&&s<=31||t===192&&s===168||t===169&&s===254||t===0}function ha(e){if(e.every(n=>n===0)||e.slice(0,7).every(n=>n===0)&&e[7]===1||(e[0]&65472)===65152||(e[0]&65024)===64512)return!0;if(e[0]===0&&e[1]===0&&e[2]===0&&e[3]===0&&e[4]===0&&e[5]===65535){let n=[e[6]>>>8&255,e[6]&255,e[7]>>>8&255,e[7]&255];return bi(n)}return!1}function Ei(e){let t=[];for(let s of e){if(!Er(s)){t.push(`Invalid URL in allow-list: "${s}" - must be a valid URL with scheme and host (e.g., "https://example.com")`);continue}let n=new URL(s);if(n.protocol!=="http:"&&n.protocol!=="https:"){t.push(`Only http and https URLs are allowed in allow-list: "${s}"`);continue}if(!n.hostname){t.push(`Allow-list entry must include a hostname: "${s}"`);continue}(n.search||n.hash)&&t.push(`Query strings and fragments are ignored in allow-list entries: "${s}"`)}return t}var He=class extends Error{constructor(t){super(`Network access denied: URL not in allow-list: ${t}`),this.name="NetworkAccessDeniedError"}},ct=class extends Error{constructor(t){super(`Too many redirects (max: ${t})`),this.name="TooManyRedirectsError"}},ut=class extends Error{constructor(t){super(`Redirect target not in allow-list: ${t}`),this.name="RedirectNotAllowedError"}},us=class extends Error{constructor(t,s){super(`HTTP method '${t}' not allowed. Allowed methods: ${s.join(", ")}`),this.name="MethodNotAllowedError"}},Pt=class extends Error{constructor(t){super(`Response body too large (max: ${t} bytes)`),this.name="ResponseTooLargeError"}};var pa=20,ma=3e4,ya=10485760,ga=["GET","HEAD"],wa=new Set(["GET","HEAD","OPTIONS"]),va=new Set([301,302,303,307,308]);function $r(e){if(!e.dangerouslyAllowFullInternetAccess){let c=Ei(e.allowedUrlPrefixes??[]);if(c.length>0)throw new Error(`Invalid network allow-list:
|
|
673
673
|
${c.join(`
|
|
674
|
-
`)}`)}let t=e.maxRedirects??
|
|
675
|
-
`)}function
|
|
676
|
-
${n}${s.delimiter}`}return e.operator==="<<<"?`${t}<<< ${oe(e.target)}`:e.operator==="&>"||e.operator==="&>>"?`${e.operator} ${oe(e.target)}`:`${t}${e.operator} ${oe(e.target)}`}function
|
|
677
|
-
`)}function
|
|
678
|
-
${
|
|
679
|
-
${
|
|
674
|
+
`)}`)}let t=e.maxRedirects??pa,s=e.timeoutMs??ma,r=e.maxResponseSize??ya,n=e.dangerouslyAllowFullInternetAccess?["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"]:e.allowedMethods??ga,i=e.denyPrivateRanges??(typeof process<"u"&&process.env?.NODE_ENV==="production");function o(c){if(!e.dangerouslyAllowFullInternetAccess){if(i)try{let u=new URL(c);if(wi(u.hostname))throw new He(c)}catch(u){if(u instanceof He)throw u}if(!gi(c,e.allowedUrlPrefixes??[]))throw new He(c)}}function a(c){if(e.dangerouslyAllowFullInternetAccess)return;let u=c.toUpperCase();if(!n.includes(u))throw new us(u,n)}async function l(c,u={}){let f=u.method?.toUpperCase()??"GET";o(c),a(f);let d=c,p=0,y=u.followRedirects??!0,h=u.timeoutMs!==void 0?Math.min(u.timeoutMs,s):s;for(;;){let m=new AbortController,b=Ct(()=>m.abort(),h);try{let v={method:f,headers:u.headers,signal:m.signal,redirect:"manual"};u.body&&!wa.has(f)&&(v.body=u.body);let P=await pe.runTrustedAsync(()=>fetch(d,v));if(va.has(P.status)&&y){let g=P.headers.get("location");if(!g)return await $i(P,d,r);let w=new URL(g,d).href;try{o(w)}catch{throw new ut(w)}if(p++,p>t)throw new ct(t);d=w;continue}return await $i(P,d,r)}finally{_t(b)}}}return l}async function $i(e,t,s){let r=Object.create(null);if(e.headers.forEach((i,o)=>{r[o.toLowerCase()]=i}),s>0){let i=e.headers.get("content-length");if(i){let o=parseInt(i,10);if(!Number.isNaN(o)&&o>s)throw new Pt(s)}}let n;if(s>0&&e.body){let i=e.body.getReader(),o=new TextDecoder,a=[],l=0;for(;;){let{done:c,value:u}=await i.read();if(c)break;if(l+=u.byteLength,l>s)throw i.cancel(),new Pt(s);a.push(o.decode(u,{stream:!0}))}a.push(o.decode()),n=a.join("")}else n=await e.text();return{status:e.status,statusText:e.statusText,headers:r,body:n,url:t}}function At(e){return Je(e)}function Je(e){return e.statements.map(Si).join(`
|
|
675
|
+
`)}function Si(e){let t=[];for(let r=0;r<e.pipelines.length;r++)t.push(ba(e.pipelines[r])),r<e.operators.length&&t.push(e.operators[r]);let s=t.join(" ");return e.background&&(s+=" &"),s}function ba(e){let t=[];e.timed&&t.push(e.timePosix?"time -p":"time"),e.negated&&t.push("!");let s=[];for(let n=0;n<e.commands.length;n++)if(s.push(Pi(e.commands[n])),n<e.commands.length-1){let i=e.pipeStderr?.[n];s.push(i?"|&":"|")}return(t.length>0?`${t.join(" ")} `:"")+s.join(" ")}function Pi(e){switch(e.type){case"SimpleCommand":return Ea(e);case"If":return Oa(e);case"For":return xa(e);case"CStyleFor":return Da(e);case"While":return Ta(e);case"Until":return Ia(e);case"Case":return Ra(e);case"Subshell":return Fa(e);case"Group":return Ma(e);case"ArithmeticCommand":return za(e);case"ConditionalCommand":return Wa(e);case"FunctionDef":return Va(e);default:{let t=e;throw new Error(`Unsupported command type: ${t.type}`)}}}function Ea(e){let t=[];for(let s of e.assignments)t.push($a(s));e.name&&t.push(oe(e.name));for(let s of e.args)t.push(oe(s));for(let s of e.redirections)t.push(Ci(s));return t.join(" ")}function $a(e){let t=e.append?"+=":"=";if(e.array){let s=e.array.map(oe).join(" ");return`${e.name}${t}(${s})`}return e.value?`${e.name}${t}${oe(e.value)}`:`${e.name}${t}`}function oe(e){return e.parts.map(t=>fs(t,!1)).join("")}function Ze(e){return e.parts.map(t=>fs(t,!0)).join("")}function fs(e,t){switch(e.type){case"Literal":return t?Pa(e.value):Sa(e.value);case"SingleQuoted":return`'${e.value}'`;case"DoubleQuoted":return`"${e.parts.map(s=>fs(s,!0)).join("")}"`;case"Escaped":return`\\${e.value}`;case"ParameterExpansion":return Ai(e);case"CommandSubstitution":return e.legacy?`\`${Je(e.body)}\``:`$(${Je(e.body)})`;case"ArithmeticExpansion":return`$((${Z(e.expression.expression)}))`;case"ProcessSubstitution":return e.direction==="input"?`<(${Je(e.body)})`:`>(${Je(e.body)})`;case"BraceExpansion":return _a(e);case"TildeExpansion":return e.user!==null?`~${e.user}`:"~";case"Glob":return e.pattern;default:{let s=e;throw new Error(`Unsupported word part type: ${s.type}`)}}}function Sa(e){return e.replace(/[\s\\'"`!|&;()<>{}[\]*?~#]/g,"\\$&")}function Pa(e){return e.replace(/[$`"\\]/g,"\\$&")}function Aa(e,t){return e.parts.map(s=>ka(s,t)).join("")}function ka(e,t){switch(e.type){case"Literal":return t?e.value:e.value.replace(/[$`]/g,"\\$&");case"Escaped":return`\\${e.value}`;case"ParameterExpansion":return Ai(e);case"CommandSubstitution":return e.legacy?`\`${Je(e.body)}\``:`$(${Je(e.body)})`;case"ArithmeticExpansion":return`$((${Z(e.expression.expression)}))`;default:return fs(e,!1)}}function Ai(e){return e.operation?`\${${ki(e.parameter,e.operation)}}`:Ca(e.parameter)?`\${${e.parameter}}`:`$${e.parameter}`}function Ca(e){return!(/^[?#@*$!\-0-9]$/.test(e)||/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))}function ki(e,t){switch(t.type){case"Length":return`#${e}`;case"LengthSliceError":return`#${e}:`;case"BadSubstitution":return t.text;case"DefaultValue":return`${e}${t.checkEmpty?":":""}-${Ze(t.word)}`;case"AssignDefault":return`${e}${t.checkEmpty?":":""}=${Ze(t.word)}`;case"ErrorIfUnset":return`${e}${t.checkEmpty?":":""}?${t.word?Ze(t.word):""}`;case"UseAlternative":return`${e}${t.checkEmpty?":":""}+${Ze(t.word)}`;case"Substring":{let s=Z(t.offset.expression);return t.length?`${e}:${s}:${Z(t.length.expression)}`:`${e}:${s}`}case"PatternRemoval":{let s=t.side==="prefix"?"#":"%",r=t.greedy?`${s}${s}`:s;return`${e}${r}${Ze(t.pattern)}`}case"PatternReplacement":{let s="/";t.all?s="//":t.anchor==="start"?s="/#":t.anchor==="end"&&(s="/%");let r=t.replacement?`/${Ze(t.replacement)}`:"";return`${e}${s}${Ze(t.pattern)}${r}`}case"CaseModification":{let s=t.direction==="upper"?"^":",",r=t.all?`${s}${s}`:s,n=t.pattern?Ze(t.pattern):"";return`${e}${r}${n}`}case"Transform":return`${e}@${t.operator}`;case"Indirection":return t.innerOp?`!${ki(e,t.innerOp)}`:`!${e}`;case"ArrayKeys":return`!${t.array}[${t.star?"*":"@"}]`;case"VarNamePrefix":return`!${t.prefix}${t.star?"*":"@"}`;default:{let s=t;throw new Error(`Unsupported parameter operation type: ${s.type}`)}}}function _a(e){return`{${e.items.map(Na).join(",")}}`}function Na(e){if(e.type==="Word")return oe(e.word);let t=e.startStr??String(e.start),s=e.endStr??String(e.end);return e.step!==void 0?`${t}..${s}..${e.step}`:`${t}..${s}`}function Ci(e){let t=e.fdVariable?`{${e.fdVariable}}`:e.fd!==null?String(e.fd):"";if(e.operator==="<<"||e.operator==="<<-"){let s=e.target,r=s.quoted?`'${s.delimiter}'`:s.delimiter,n=Aa(s.content,s.quoted);return`${t}${e.operator}${r}
|
|
676
|
+
${n}${s.delimiter}`}return e.operator==="<<<"?`${t}<<< ${oe(e.target)}`:e.operator==="&>"||e.operator==="&>>"?`${e.operator} ${oe(e.target)}`:`${t}${e.operator} ${oe(e.target)}`}function Ae(e){return e.length===0?"":` ${e.map(Ci).join(" ")}`}function Ee(e){return e.map(Si).join(`
|
|
677
|
+
`)}function Oa(e){let t=[];for(let s=0;s<e.clauses.length;s++){let r=e.clauses[s],n=s===0?"if":"elif";t.push(`${n} ${Ee(r.condition)}; then
|
|
678
|
+
${Ee(r.body)}`)}return e.elseBody&&t.push(`else
|
|
679
|
+
${Ee(e.elseBody)}`),`${t.join(`
|
|
680
680
|
`)}
|
|
681
|
-
fi${
|
|
682
|
-
${
|
|
683
|
-
done${
|
|
684
|
-
${
|
|
685
|
-
done${
|
|
686
|
-
${
|
|
687
|
-
done${
|
|
688
|
-
${
|
|
689
|
-
done${
|
|
681
|
+
fi${Ae(e.redirections)}`}function xa(e){let t;if(e.words===null)t=`for ${e.variable}`;else{let s=e.words.map(oe).join(" ");t=`for ${e.variable} in ${s}`}return`${t}; do
|
|
682
|
+
${Ee(e.body)}
|
|
683
|
+
done${Ae(e.redirections)}`}function Da(e){let t=e.init?Z(e.init.expression):"",s=e.condition?Z(e.condition.expression):"",r=e.update?Z(e.update.expression):"";return`for ((${t}; ${s}; ${r})); do
|
|
684
|
+
${Ee(e.body)}
|
|
685
|
+
done${Ae(e.redirections)}`}function Ta(e){return`while ${Ee(e.condition)}; do
|
|
686
|
+
${Ee(e.body)}
|
|
687
|
+
done${Ae(e.redirections)}`}function Ia(e){return`until ${Ee(e.condition)}; do
|
|
688
|
+
${Ee(e.body)}
|
|
689
|
+
done${Ae(e.redirections)}`}function Ra(e){let t=e.items.map(La).join(`
|
|
690
690
|
`);return`case ${oe(e.word)} in
|
|
691
691
|
${t}
|
|
692
|
-
esac${
|
|
692
|
+
esac${Ae(e.redirections)}`}function La(e){let t=e.patterns.map(oe).join(" | "),s=Ee(e.body);return s?`${t})
|
|
693
693
|
${s}
|
|
694
694
|
${e.terminator}`:`${t})
|
|
695
|
-
${e.terminator}`}function
|
|
696
|
-
`],["OSTYPE","linux-gnu"],["MACHTYPE","x86_64-pc-linux-gnu"],["HOSTTYPE","x86_64"],["HOSTNAME","localhost"],["PWD",r],["OLDPWD",r],["OPTIND","1"],...Object.entries(t.env??{})]);if(this.limits=
|
|
695
|
+
${e.terminator}`}function Fa(e){return`(${Ee(e.body)})${Ae(e.redirections)}`}function Ma(e){return`{ ${Ee(e.body)}; }${Ae(e.redirections)}`}function za(e){return`((${Z(e.expression.expression)}))${Ae(e.redirections)}`}function Wa(e){return`[[ ${Qe(e.expression)} ]]${Ae(e.redirections)}`}function Va(e){let t=Pi(e.body);return`${e.name}() ${t}${Ae(e.redirections)}`}function Z(e){switch(e.type){case"ArithNumber":return String(e.value);case"ArithVariable":return e.hasDollarPrefix?`$${e.name}`:e.name;case"ArithSpecialVar":return`$${e.name}`;case"ArithBinary":return`${Z(e.left)} ${e.operator} ${Z(e.right)}`;case"ArithUnary":return e.prefix?`${e.operator}${Z(e.operand)}`:`${Z(e.operand)}${e.operator}`;case"ArithTernary":return`${Z(e.condition)} ? ${Z(e.consequent)} : ${Z(e.alternate)}`;case"ArithAssignment":return`${e.subscript?`${e.variable}[${Z(e.subscript)}]`:e.stringKey!==void 0?`${e.variable}[${e.stringKey}]`:e.variable} ${e.operator} ${Z(e.value)}`;case"ArithDynamicAssignment":return`${e.subscript?`${Z(e.target)}[${Z(e.subscript)}]`:Z(e.target)} ${e.operator} ${Z(e.value)}`;case"ArithDynamicElement":return`${Z(e.nameExpr)}[${Z(e.subscript)}]`;case"ArithGroup":return`(${Z(e.expression)})`;case"ArithNested":return`$((${Z(e.expression)}))`;case"ArithCommandSubst":return`$(${e.command})`;case"ArithBracedExpansion":return`\${${e.content}}`;case"ArithArrayElement":return e.stringKey!==void 0?`${e.array}[${e.stringKey}]`:e.index?`${e.array}[${Z(e.index)}]`:e.array;case"ArithDynamicBase":return`\${${e.baseExpr}}#${e.value}`;case"ArithDynamicNumber":return`\${${e.prefix}}${e.suffix}`;case"ArithConcat":return e.parts.map(Z).join("");case"ArithDoubleSubscript":return`${e.array}[${Z(e.index)}]`;case"ArithNumberSubscript":return`${e.number}[${e.errorToken}]`;case"ArithSyntaxError":return e.errorToken;case"ArithSingleQuote":return`'${e.content}'`;default:{let t=e;throw new Error(`Unsupported arithmetic expression type: ${t.type}`)}}}function Qe(e){switch(e.type){case"CondBinary":return`${oe(e.left)} ${e.operator} ${oe(e.right)}`;case"CondUnary":return`${e.operator} ${oe(e.operand)}`;case"CondNot":return`! ${Qe(e.operand)}`;case"CondAnd":return`${Qe(e.left)} && ${Qe(e.right)}`;case"CondOr":return`${Qe(e.left)} || ${Qe(e.right)}`;case"CondGroup":return`( ${Qe(e.expression)} )`;case"CondWord":return oe(e.word);default:{let t=e;throw new Error(`Unsupported conditional expression type: ${t.type}`)}}}var kt=class{fs;commands=new Map;useDefaultLayout=!1;limits;secureFetch;sleepFn;traceFn;logger;defenseInDepthConfig;coverageWriter;transformPlugins=[];state;constructor(t={}){let s=t.fs??new Re(t.files);this.fs=s,this.useDefaultLayout=!t.cwd&&!t.files;let r=t.cwd||(this.useDefaultLayout?"/home/user":"/"),n=new Map([["HOME",this.useDefaultLayout?"/home/user":"/"],["PATH","/usr/bin:/bin"],["IFS",`
|
|
696
|
+
`],["OSTYPE","linux-gnu"],["MACHTYPE","x86_64-pc-linux-gnu"],["HOSTTYPE","x86_64"],["HOSTNAME","localhost"],["PWD",r],["OLDPWD",r],["OPTIND","1"],...Object.entries(t.env??{})]);if(this.limits=yi({...t.executionLimits,...t.maxCallDepth!==void 0&&{maxCallDepth:t.maxCallDepth},...t.maxCommandCount!==void 0&&{maxCommandCount:t.maxCommandCount},...t.maxLoopIterations!==void 0&&{maxLoopIterations:t.maxLoopIterations}}),t.fetch?this.secureFetch=t.fetch:t.network&&(this.secureFetch=$r(t.network)),this.sleepFn=t.sleep,this.traceFn=t.trace,this.logger=t.logger,this.defenseInDepthConfig=t.defenseInDepth??!0,this.coverageWriter=t.coverage,this.state={env:n,cwd:r,previousDir:"/home/user",functions:new Map,localScopes:[],callDepth:0,sourceDepth:0,commandCount:0,lastExitCode:0,lastArg:"",startTime:Date.now(),lastBackgroundPid:0,virtualPid:t.processInfo?.pid??1,virtualPpid:t.processInfo?.ppid??0,virtualUid:t.processInfo?.uid??1e3,virtualGid:t.processInfo?.gid??1e3,bashPid:t.processInfo?.pid??1,nextVirtualPid:(t.processInfo?.pid??1)+1,currentLine:1,options:{errexit:!1,pipefail:!1,nounset:!1,xtrace:!1,verbose:!1,posix:!1,allexport:!1,noclobber:!1,noglob:!1,noexec:!1,vi:!1,emacs:!1},shoptOptions:{extglob:!1,dotglob:!1,nullglob:!1,failglob:!1,globstar:!1,globskipdots:!0,nocaseglob:!1,nocasematch:!1,expand_aliases:!1,lastpipe:!1,xpg_echo:!1},inCondition:!1,loopDepth:0,exportedVars:new Set(["HOME","PATH","PWD","OLDPWD",...Object.keys(t.env||{})]),readonlyVars:new Set(["SHELLOPTS","BASHOPTS"]),hashTable:new Map},this.state.env.set("SHELLOPTS",ks(this.state.options)),this.state.env.set("BASHOPTS",Cs(this.state.shoptOptions)),Xr(s,this.useDefaultLayout,{pid:this.state.virtualPid,ppid:this.state.virtualPpid,uid:this.state.virtualUid,gid:this.state.virtualGid}),r!=="/"&&s instanceof Re)try{s.mkdirSync(r,{recursive:!0})}catch{}for(let i of Hr(t.commands))this.registerCommand(i);if(t.fetch||t.network)for(let i of Zr())this.registerCommand(i);if(t.python)for(let i of qr())this.registerCommand(i);if(t.customCommands)for(let i of t.customCommands)Gr(i)?this.registerCommand(Kr(i)):this.registerCommand({...i,trusted:i.trusted??!0})}registerCommand(t){this.commands.set(t.name,t);let s=this.fs;if(typeof s.writeFileSync=="function"){let r=`#!/bin/bash
|
|
697
697
|
# Built-in command: ${t.name}
|
|
698
|
-
`;try{s.writeFileSync(`/bin/${t.name}`,r)}catch{}try{s.writeFileSync(`/usr/bin/${t.name}`,r)}catch{}}}logResult(t){return this.logger&&(t.stdout&&this.logger.debug("stdout",{output:t.stdout}),t.stderr&&this.logger.info("stderr",{output:t.stderr}),this.logger.info("exit",{exitCode:t.exitCode})),t.stdout=
|
|
699
|
-
`,exitCode:1,env:
|
|
700
|
-
`,exitCode:1,env:
|
|
701
|
-
`,exitCode:2,env:
|
|
702
|
-
`,exitCode:2,env:
|
|
703
|
-
`,exitCode:1,env:
|
|
698
|
+
`;try{s.writeFileSync(`/bin/${t.name}`,r)}catch{}try{s.writeFileSync(`/usr/bin/${t.name}`,r)}catch{}}}logResult(t){return this.logger&&(t.stdout&&this.logger.debug("stdout",{output:t.stdout}),t.stderr&&this.logger.info("stderr",{output:t.stderr}),this.logger.info("exit",{exitCode:t.exitCode})),t.stdout=Ni(t.stdout),t.stderr=Ni(t.stderr),t}async exec(t,s){if(this.state.callDepth===0&&(this.state.commandCount=0),this.state.commandCount++,this.state.commandCount>this.limits.maxCommandCount)return{stdout:"",stderr:`bash: maximum command count (${this.limits.maxCommandCount}) exceeded (possible infinite loop). Increase with executionLimits.maxCommandCount option.
|
|
699
|
+
`,exitCode:1,env:we(this.state.env,s?.env)};if(!t.trim())return{stdout:"",stderr:"",exitCode:0,env:we(this.state.env,s?.env)};this.logger?.info("exec",{command:t});let r=s?.cwd??this.state.cwd,n,i=r;if(s?.cwd)if(s.env&&"PWD"in s.env)n=s.env.PWD;else if(s?.env&&!("PWD"in s.env))try{n=await this.fs.realpath(r),i=n}catch{n=r}else n=r;let o=s?.replaceEnv?new Map:new Map(this.state.env);if(s?.env)for(let[f,d]of Object.entries(s.env))o.set(f,d);n!==void 0&&o.set("PWD",n);let a={...this.state,env:o,cwd:i,functions:new Map(this.state.functions),localScopes:[...this.state.localScopes],options:{...this.state.options},hashTable:this.state.hashTable,groupStdin:s?.stdin,signal:s?.signal},l=t;s?.rawScript||(l=_i(t));let c=this.defenseInDepthConfig?pe.getInstance(this.defenseInDepthConfig):null,u=c?.activate();try{let f=async()=>{let d=fe(l,{maxHeredocSize:this.limits.maxHeredocSize}),p;if(this.transformPlugins.length>0){let v=Object.create(null);for(let P of this.transformPlugins){let g=P.transform({ast:d,metadata:v});d=g.ast,g.metadata&&(v=yt(v,g.metadata))}p=v}let y={fs:this.fs,commands:this.commands,limits:this.limits,exec:this.exec.bind(this),fetch:this.secureFetch,sleep:this.sleepFn,trace:this.traceFn,coverage:this.coverageWriter,requireDefenseContext:c?.isEnabled()===!0},b=await new St(y,a).executeScript(d);return p&&(b.metadata=p),this.logResult(b)};return u?await u.run(f):await f()}catch(f){if(f instanceof j)return this.logResult({stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode,env:we(this.state.env,s?.env)});if(f instanceof $e)return this.logResult({stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode,env:we(this.state.env,s?.env)});if(f instanceof qe)return this.logResult({stdout:f.stdout,stderr:f.stderr,exitCode:1,env:we(this.state.env,s?.env)});if(f instanceof xt)return this.logResult({stdout:f.stdout,stderr:f.stderr,exitCode:124,env:we(this.state.env,s?.env)});if(f instanceof J)return this.logResult({stdout:f.stdout,stderr:ze(f.stderr),exitCode:J.EXIT_CODE,env:we(this.state.env,s?.env)});if(f instanceof Fe)return this.logResult({stdout:"",stderr:`bash: security violation: ${ze(f.message)}
|
|
700
|
+
`,exitCode:1,env:we(this.state.env,s?.env)});if(f.name==="ParseException")return this.logResult({stdout:"",stderr:`bash: syntax error: ${ze(f.message)}
|
|
701
|
+
`,exitCode:2,env:we(this.state.env,s?.env)});if(f instanceof xr)return this.logResult({stdout:"",stderr:`bash: ${ze(f.message)}
|
|
702
|
+
`,exitCode:2,env:we(this.state.env,s?.env)});if(f instanceof RangeError)return this.logResult({stdout:"",stderr:`bash: ${ze(f.message)}
|
|
703
|
+
`,exitCode:1,env:we(this.state.env,s?.env)});throw f}finally{u?.deactivate()}}async readFile(t){return this.fs.readFile(this.fs.resolvePath(this.state.cwd,t))}async writeFile(t,s){return this.fs.writeFile(this.fs.resolvePath(this.state.cwd,t),s)}getCwd(){return this.state.cwd}getEnv(){return We(this.state.env)}registerTransformPlugin(t){this.transformPlugins.push(t)}transform(t){let s=_i(t),r=fe(s,{maxHeredocSize:this.limits.maxHeredocSize}),n=Object.create(null);for(let i of this.transformPlugins){let o=i.transform({ast:r,metadata:n});r=o.ast,o.metadata&&(n=yt(n,o.metadata))}return{script:At(r),ast:r,metadata:n}}};function _i(e){let t=e.split(`
|
|
704
704
|
`),s=[],r=[];for(let n=0;n<t.length;n++){let i=t[n];if(r.length>0){let l=r[r.length-1];if((l.stripTabs?i.replace(/^\t+/,""):i)===l.delimiter){s.push(i.trimStart()),r.pop();continue}s.push(i);continue}let o=i.trimStart();s.push(o);let a=/<<(-?)\s*(['"]?)([\w-]+)\2/g;for(let l of o.matchAll(a)){let c=l[1]==="-",u=l[3];r.push({delimiter:u,stripTabs:c})}}return s.join(`
|
|
705
|
-
`)}var Ra=new TextDecoder("utf-8",{fatal:!0});function Pi(e){if(!e)return e;let t=!1;for(let r=0;r<e.length;r++){let n=e.charCodeAt(r);if(n>255)return e;n>127&&(t=!0)}if(!t)return e;let s=new Uint8Array(e.length);for(let r=0;r<e.length;r++)s[r]=e.charCodeAt(r);try{return Ra.decode(s)}catch{return e}}var cs=class{baseFs;mounts=new Map;constructor(t){if(this.baseFs=t?.base??new Re,t?.mounts)for(let{mountPoint:s,filesystem:r}of t.mounts)this.mount(s,r)}mount(t,s){this.validateMountPath(t);let r=this.normalizePath(t);this.validateMount(r),this.mounts.set(r,{mountPoint:r,filesystem:s})}unmount(t){let s=this.normalizePath(t);if(!this.mounts.has(s))throw new Error(`No filesystem mounted at '${t}'`);this.mounts.delete(s)}getMounts(){return Array.from(this.mounts.values()).map(t=>({mountPoint:t.mountPoint,filesystem:t.filesystem}))}isMountPoint(t){let s=this.normalizePath(t);return this.mounts.has(s)}validateMountPath(t){let s=t.split("/");for(let r of s)if(r==="."||r==="..")throw new Error(`Invalid mount point '${t}': contains '.' or '..' segments`)}validateMount(t){if(t==="/")throw new Error("Cannot mount at root '/'");for(let s of this.mounts.keys())if(s!==t){if(t.startsWith(`${s}/`))throw new Error(`Cannot mount at '${t}': inside existing mount '${s}'`);if(s.startsWith(`${t}/`))throw new Error(`Cannot mount at '${t}': would contain existing mount '${s}'`)}}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let r=s.split("/").filter(i=>i&&i!=="."),n=[];for(let i of r)i===".."?n.pop():n.push(i);return`/${n.join("/")}`}routePath(t){let s=this.normalizePath(t),r=null,n=0;for(let i of this.mounts.values()){let o=i.mountPoint;if(s===o)return{fs:i.filesystem,relativePath:"/"};s.startsWith(`${o}/`)&&o.length>n&&(r=i,n=o.length)}if(r){let i=s.slice(n);return{fs:r.filesystem,relativePath:i||"/"}}return{fs:this.baseFs,relativePath:s}}getChildMountPoints(t){let s=this.normalizePath(t),r=s==="/"?"/":`${s}/`,n=[];for(let i of this.mounts.keys())if(i.startsWith(r)){let a=i.slice(r.length).split("/")[0];a&&!n.includes(a)&&n.push(a)}return n}async readFile(t,s){let{fs:r,relativePath:n}=this.routePath(t);return r.readFile(n,s)}async readFileBuffer(t){let{fs:s,relativePath:r}=this.routePath(t);return s.readFileBuffer(r)}async writeFile(t,s,r){let{fs:n,relativePath:i}=this.routePath(t);return n.writeFile(i,s,r)}async appendFile(t,s,r){let{fs:n,relativePath:i}=this.routePath(t);return n.appendFile(i,s,r)}async exists(t){let s=this.normalizePath(t);if(this.mounts.has(s)||this.getChildMountPoints(s).length>0)return!0;let{fs:n,relativePath:i}=this.routePath(t);return n.exists(i)}async stat(t){let s=this.normalizePath(t),r=this.mounts.get(s);if(r)try{return await r.filesystem.stat("/")}catch{return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date}}if(this.getChildMountPoints(s).length>0)try{return await this.baseFs.stat(s)}catch{return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date}}let{fs:i,relativePath:o}=this.routePath(t);return i.stat(o)}async lstat(t){let s=this.normalizePath(t),r=this.mounts.get(s);if(r)try{return await r.filesystem.lstat("/")}catch{return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date}}if(this.getChildMountPoints(s).length>0)try{return await this.baseFs.lstat(s)}catch{return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date}}let{fs:i,relativePath:o}=this.routePath(t);return i.lstat(o)}async mkdir(t,s){let r=this.normalizePath(t);if(this.mounts.has(r)){if(s?.recursive)return;throw new Error(`EEXIST: directory already exists, mkdir '${t}'`)}if(this.getChildMountPoints(r).length>0&&s?.recursive)return;let{fs:i,relativePath:o}=this.routePath(t);return i.mkdir(o,s)}async readdir(t){let s=this.normalizePath(t),r=new Set,n=null,{fs:i,relativePath:o}=this.routePath(t);try{let l=await i.readdir(o);for(let c of l)r.add(c)}catch(l){let c=l.code,u=l.message||"";if(c!=="ENOENT"&&!u.includes("ENOENT"))throw l;n=l}let a=this.getChildMountPoints(s);for(let l of a)r.add(l);if(r.size===0&&n&&!this.mounts.has(s))throw n;return Array.from(r).sort()}async rm(t,s){let r=this.normalizePath(t);if(this.mounts.has(r))throw new Error(`EBUSY: mount point, cannot remove '${t}'`);if(this.getChildMountPoints(r).length>0)throw new Error(`EBUSY: contains mount points, cannot remove '${t}'`);let{fs:i,relativePath:o}=this.routePath(t);return i.rm(o,s)}async cp(t,s,r){let n=this.routePath(t),i=this.routePath(s);return n.fs===i.fs?n.fs.cp(n.relativePath,i.relativePath,r):this.crossMountCopy(t,s,r)}async mv(t,s){let r=this.normalizePath(t);if(this.mounts.has(r))throw new Error(`EBUSY: mount point, cannot move '${t}'`);let n=this.routePath(t),i=this.routePath(s);if(n.fs===i.fs)return n.fs.mv(n.relativePath,i.relativePath);await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}resolvePath(t,s){if(s.startsWith("/"))return this.normalizePath(s);let r=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(r)}getAllPaths(){let t=new Set;for(let s of this.baseFs.getAllPaths())t.add(s);for(let s of this.mounts.keys()){let r=s.split("/").filter(Boolean),n="";for(let o of r)n=`${n}/${o}`,t.add(n);let i=this.mounts.get(s);if(i)for(let o of i.filesystem.getAllPaths())o==="/"?t.add(s):t.add(`${s}${o}`)}return Array.from(t).sort()}async chmod(t,s){let r=this.normalizePath(t),n=this.mounts.get(r);if(n)return n.filesystem.chmod("/",s);let{fs:i,relativePath:o}=this.routePath(t);return i.chmod(o,s)}async symlink(t,s){let{fs:r,relativePath:n}=this.routePath(s);return r.symlink(t,n)}async link(t,s){let r=this.routePath(t),n=this.routePath(s);if(r.fs!==n.fs)throw new Error(`EXDEV: cross-device link not permitted, link '${t}' -> '${s}'`);return r.fs.link(r.relativePath,n.relativePath)}async readlink(t){let{fs:s,relativePath:r}=this.routePath(t);return s.readlink(r)}async realpath(t){let s=this.normalizePath(t);if(this.mounts.get(s))return s;let{fs:n,relativePath:i}=this.routePath(t),o=await n.realpath(i);for(let[a,l]of this.mounts)if(s===a||s.startsWith(`${a}/`))return o==="/"?a:`${a}${o}`;return o}async crossMountCopy(t,s,r){let n=await this.lstat(t);if(n.isFile){let i=await this.readFileBuffer(t);await this.writeFile(s,i),await this.chmod(s,n.mode)}else if(n.isDirectory){if(!r?.recursive)throw new Error(`cp: ${t} is a directory (not copied)`);await this.mkdir(s,{recursive:!0});let i=await this.readdir(t);for(let o of i){let a=t==="/"?`/${o}`:`${t}/${o}`,l=s==="/"?`/${o}`:`${s}/${o}`;await this.crossMountCopy(a,l,r)}}else if(n.isSymbolicLink){let i=await this.readlink(t);await this.symlink(i,s)}}async utimes(t,s,r){let{fs:n,relativePath:i}=this.routePath(t);return n.utimes(i,s,r)}};import*as Z from"node:fs";import*as le from"node:path";var La="/home/user/project",ct=class{root;canonicalRoot;mountPoint;readOnly;maxFileReadSize;allowSymlinks;memory=new Map;deleted=new Set;constructor(t){this.root=le.resolve(t.root);let s=t.mountPoint??La;if(this.mountPoint=s==="/"?"/":s.replace(/\/+$/,""),!this.mountPoint.startsWith("/"))throw new Error(`Mount point must be an absolute path: ${s}`);this.readOnly=t.readOnly??!1,this.maxFileReadSize=t.maxFileReadSize??10485760,this.allowSymlinks=t.allowSymlinks??!1,Dt(this.root,"OverlayFs"),this.canonicalRoot=Z.realpathSync(this.root),this.createMountPointDirs()}assertWritable(t){if(this.readOnly)throw new Error(`EROFS: read-only file system, ${t}`)}createMountPointDirs(){let t=this.mountPoint.split("/").filter(Boolean),s="";for(let r of t)s+=`/${r}`,this.memory.has(s)||this.memory.set(s,{type:"directory",mode:493,mtime:new Date});this.memory.has("/")||this.memory.set("/",{type:"directory",mode:493,mtime:new Date})}getMountPoint(){return this.mountPoint}mkdirSync(t,s){let n=W(t).split("/").filter(Boolean),i="";for(let o of n)i+=`/${o}`,this.memory.has(i)||this.memory.set(i,{type:"directory",mode:493,mtime:new Date})}writeFileSync(t,s){let r=W(t),n=this.getDirname(r);n!=="/"&&this.mkdirSync(n);let i=s instanceof Uint8Array?s:new TextEncoder().encode(s);this.memory.set(r,{type:"file",content:i,mode:420,mtime:new Date})}getDirname(t){let s=t.lastIndexOf("/");return s===0?"/":t.slice(0,s)}getRelativeToMount(t){return this.mountPoint==="/"?t:t===this.mountPoint?"/":t.startsWith(`${this.mountPoint}/`)?t.slice(this.mountPoint.length):null}toRealPath(t){let s=W(t),r=this.getRelativeToMount(s);if(r===null)return null;let n=le.join(this.root,r),i=le.resolve(n);return De(i,this.root)?i:null}dirname(t){let s=W(t);if(s==="/")return"/";let r=s.lastIndexOf("/");return r===0?"/":s.slice(0,r)}resolveRealPath_(t){return t?this.allowSymlinks?Ot(t,this.canonicalRoot):xt(t,this.root,this.canonicalRoot):null}resolveRealPathParent_(t){if(!t)return null;let s=le.dirname(t),r=this.resolveRealPath_(s);return r===null?null:le.join(r,le.basename(t))}sanitizeError(t,s,r){let n=t;if(n.path===void 0&&(n.message?.includes("ELOOP")||n.message?.includes("EFBIG")||n.message?.includes("EPERM")))throw t;let i=n.code||"EIO";throw new Error(`${i}: ${r} '${s}'`)}ensureParentDirs(t){let s=this.dirname(t);s!=="/"&&(this.memory.has(s)||(this.ensureParentDirs(s),this.memory.set(s,{type:"directory",mode:493,mtime:new Date})),this.deleted.delete(s))}async existsInOverlay(t){let s=W(t);if(this.deleted.has(s))return!1;if(this.memory.has(s))return!0;let r=this.resolveRealPathParent_(this.toRealPath(s));if(!r)return!1;try{return await Z.promises.lstat(r),!0}catch{return!1}}async readFile(t,s){let r=await this.readFileBuffer(t),n=ve(s);return Je(r,n)}async readFileBuffer(t,s=new Set){z(t,"open");let r=W(t);if(s.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);if(s.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, open '${t}'`);let n=this.memory.get(r);if(n){if(n.type==="symlink"){let o=this.resolveSymlink(r,n.target);return this.readFileBuffer(o,s)}if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return n.content}let i=this.resolveRealPath_(this.toRealPath(r));if(!i)throw new Error(`ENOENT: no such file or directory, open '${t}'`);try{let o=await Z.promises.lstat(i);if(o.isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, open '${t}'`);let c=await Z.promises.readlink(i),u=this.realTargetToVirtual(r,c),f=this.resolveSymlink(r,u);return this.readFileBuffer(f,s)}if(o.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);if(this.maxFileReadSize>0&&o.size>this.maxFileReadSize)throw new Error(`EFBIG: file too large, read '${t}' (${o.size} bytes, max ${this.maxFileReadSize})`);let a=this.allowSymlinks?Z.constants.O_RDONLY:Z.constants.O_RDONLY|Z.constants.O_NOFOLLOW,l=await Z.promises.open(i,a);try{let c=await l.readFile();return new Uint8Array(c)}finally{await l.close()}}catch(o){let a=o.code;if(a==="ENOENT")throw new Error(`ENOENT: no such file or directory, open '${t}'`);if(a==="ELOOP")throw new Error(`ENOENT: no such file or directory, open '${t}'`);this.sanitizeError(o,t,"open")}}async writeFile(t,s,r){z(t,"write"),this.assertWritable(`write '${t}'`);let n=W(t);this.ensureParentDirs(n);let i=ve(r),o=Ie(s,i);this.memory.set(n,{type:"file",content:o,mode:420,mtime:new Date}),this.deleted.delete(n)}async appendFile(t,s,r){z(t,"append"),this.assertWritable(`append '${t}'`);let n=W(t),i=ve(r),o=Ie(s,i),a;try{a=await this.readFileBuffer(n)}catch{a=new Uint8Array(0)}let l=new Uint8Array(a.length+o.length);l.set(a),l.set(o,a.length),this.ensureParentDirs(n),this.memory.set(n,{type:"file",content:l,mode:420,mtime:new Date}),this.deleted.delete(n)}async exists(t){return t.includes("\0")?!1:this.existsInOverlay(t)}async stat(t,s=new Set){z(t,"stat");let r=W(t);if(s.has(r))throw new Error(`ELOOP: too many levels of symbolic links, stat '${t}'`);if(s.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let n=this.memory.get(r);if(n){if(n.type==="symlink"){let a=this.resolveSymlink(r,n.target);return this.stat(a,s)}let o=0;return n.type==="file"&&(o=n.content.length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:o,mtime:n.mtime}}let i=this.resolveRealPath_(this.toRealPath(r));if(!i)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);try{let o=await Z.promises.lstat(i);if(o.isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let a=await Z.promises.readlink(i),l=this.realTargetToVirtual(r,a),c=this.resolveSymlink(r,l);return this.stat(c,s)}return{isFile:o.isFile(),isDirectory:o.isDirectory(),isSymbolicLink:!1,mode:o.mode,size:o.size,mtime:o.mtime}}catch(o){if(o.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, stat '${t}'`);this.sanitizeError(o,t,"stat")}}async lstat(t){z(t,"lstat");let s=W(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);let r=this.memory.get(s);if(r){if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime};let i=0;return r.type==="file"&&(i=r.content.length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:i,mtime:r.mtime}}let n=this.resolveRealPathParent_(this.toRealPath(s));if(!n)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);try{let i=await Z.promises.lstat(n);return{isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:i.isSymbolicLink(),mode:i.mode,size:i.size,mtime:i.mtime}}catch(i){if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);this.sanitizeError(i,t,"lstat")}}resolveSymlink(t,s){if(s.startsWith("/"))return W(s);let r=this.dirname(t);return W(r==="/"?`/${s}`:`${r}/${s}`)}realTargetToVirtual(t,s){let r=Ar(s,this.canonicalRoot);if(r.withinRoot){if(!le.isAbsolute(s))return s;let n=r.relativePath;return this.mountPoint==="/"?n:`${this.mountPoint}${n}`}return r.safeName}async mkdir(t,s){z(t,"mkdir"),this.assertWritable(`mkdir '${t}'`);let r=W(t);if(await this.existsInOverlay(r)){if(!s?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${t}'`);return}let i=this.dirname(r);if(i!=="/"&&!await this.existsInOverlay(i))if(s?.recursive)await this.mkdir(i,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.memory.set(r,{type:"directory",mode:493,mtime:new Date}),this.deleted.delete(r)}async readdirCore(t,s){if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let r=new Map,n=new Set,i=s==="/"?"/":`${s}/`;for(let a of this.deleted)if(a.startsWith(i)){let l=a.slice(i.length),c=l.split("/")[0];c&&!l.includes("/",c.length)&&n.add(c)}for(let[a,l]of this.memory)if(a!==s&&a.startsWith(i)){let c=a.slice(i.length),u=c.split("/")[0];u&&!n.has(u)&&!c.includes("/",1)&&r.set(u,{name:u,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}let o=this.resolveRealPath_(this.toRealPath(s));if(o)try{if(!this.allowSymlinks&&(await Z.promises.lstat(o)).isSymbolicLink()){if(!this.memory.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);return r}let a=await Z.promises.readdir(o,{withFileTypes:!0});for(let l of a)!n.has(l.name)&&!r.has(l.name)&&r.set(l.name,{name:l.name,isFile:l.isFile(),isDirectory:l.isDirectory(),isSymbolicLink:l.isSymbolicLink()})}catch(a){if(a.code==="ENOENT"){if(!this.memory.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`)}else a.code!=="ENOTDIR"&&this.sanitizeError(a,t,"scandir")}return r}async resolveForReaddir(t,s=!1){let r=W(t),n=new Set,i=s,o=this.memory.get(r);for(;o&&o.type==="symlink";){if(n.has(r))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);n.add(r),i=!0,r=this.resolveSymlink(r,o.target),o=this.memory.get(r)}if(o)return{normalized:r,outsideOverlay:!1};if(this.getRelativeToMount(r)===null)return{normalized:r,outsideOverlay:!0};let l=this.resolveRealPath_(this.toRealPath(r));if(!l)return{normalized:r,outsideOverlay:!0};try{if((await Z.promises.lstat(l)).isSymbolicLink()){if(!this.allowSymlinks)return{normalized:r,outsideOverlay:!0};let u=await Z.promises.readlink(l),f=this.realTargetToVirtual(r,u),d=this.resolveSymlink(r,f);return this.resolveForReaddir(d,!0)}return{normalized:r,outsideOverlay:!1}}catch{return i?{normalized:r,outsideOverlay:!0}:{normalized:r,outsideOverlay:!1}}}async readdir(t){z(t,"scandir");let{normalized:s,outsideOverlay:r}=await this.resolveForReaddir(t);if(r)return[];let n=await this.readdirCore(t,s);return Array.from(n.keys()).sort((i,o)=>i<o?-1:i>o?1:0)}async readdirWithFileTypes(t){z(t,"scandir");let{normalized:s,outsideOverlay:r}=await this.resolveForReaddir(t);if(r)return[];let n=await this.readdirCore(t,s);return Array.from(n.values()).sort((i,o)=>i.name<o.name?-1:i.name>o.name?1:0)}async rm(t,s){z(t,"rm"),this.assertWritable(`rm '${t}'`);let r=W(t);if(!await this.existsInOverlay(r)){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}try{if((await this.stat(r)).isDirectory){let o=await this.readdir(r);if(o.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let a of o){let l=r==="/"?`/${a}`:`${r}/${a}`;await this.rm(l,s)}}}}catch(i){if(i instanceof Error&&(i.message.includes("ENOTEMPTY")||i.message.includes("EISDIR")))throw i}this.deleted.add(r),this.memory.delete(r)}async cp(t,s,r){z(t,"cp"),z(s,"cp"),this.assertWritable(`cp '${s}'`);let n=W(t),i=W(s);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, cp '${t}'`);let a=await this.stat(n);if(a.isFile){let l=await this.readFileBuffer(n);await this.writeFile(i,l)}else if(a.isDirectory){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let l=await this.readdir(n);for(let c of l){let u=n==="/"?`/${c}`:`${n}/${c}`,f=i==="/"?`/${c}`:`${i}/${c}`;await this.cp(u,f,r)}}}async mv(t,s){this.assertWritable(`mv '${s}'`),await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}resolvePath(t,s){if(s.startsWith("/"))return W(s);let r=t==="/"?`/${s}`:`${t}/${s}`;return W(r)}getAllPaths(){let t=new Set(this.memory.keys());for(let s of this.deleted)t.delete(s);return this.scanRealFs("/",t),Array.from(t)}scanRealFs(t,s){if(this.deleted.has(t))return;let r=this.resolveRealPath_(this.toRealPath(t));if(r)try{let n=Z.readdirSync(r);for(let i of n){let o=t==="/"?`/${i}`:`${t}/${i}`;if(this.deleted.has(o))continue;s.add(o);let a=le.join(r,i);Z.lstatSync(a).isDirectory()&&this.scanRealFs(o,s)}}catch{}}async chmod(t,s){z(t,"chmod"),this.assertWritable(`chmod '${t}'`);let r=W(t);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);let i=this.memory.get(r);if(i){i.mode=s;return}let o=await this.stat(r);if(o.isFile){let a=await this.readFileBuffer(r);this.memory.set(r,{type:"file",content:a,mode:s,mtime:new Date})}else o.isDirectory&&this.memory.set(r,{type:"directory",mode:s,mtime:new Date})}async symlink(t,s){if(!this.allowSymlinks)throw new Error(`EPERM: operation not permitted, symlink '${s}'`);z(s,"symlink"),this.assertWritable(`symlink '${s}'`);let r=W(s);if(await this.existsInOverlay(r))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(r),this.memory.set(r,{type:"symlink",target:t,mode:511,mtime:new Date}),this.deleted.delete(r)}async link(t,s){z(t,"link"),z(s,"link"),this.assertWritable(`link '${s}'`);let r=W(t),n=W(s);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, link '${t}'`);let o=await this.stat(r);if(!o.isFile)throw new Error(`EPERM: operation not permitted, link '${t}'`);if(await this.existsInOverlay(n))throw new Error(`EEXIST: file already exists, link '${s}'`);let l=await this.readFileBuffer(r);this.ensureParentDirs(n),this.memory.set(n,{type:"file",content:l,mode:o.mode,mtime:new Date}),this.deleted.delete(n)}async readlink(t){z(t,"readlink");let s=W(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);let r=this.memory.get(s);if(r){if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return r.target}let n=this.resolveRealPathParent_(this.toRealPath(s));if(!n)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);try{let i=await Z.promises.readlink(n);if(!le.isAbsolute(i)){let o=le.resolve(le.dirname(n),i),a;try{a=Z.realpathSync(o)}catch{a=o}if(!De(a,this.canonicalRoot))return le.basename(i)}return this.realTargetToVirtual(s,i)}catch(i){if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(i.code==="EINVAL")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);this.sanitizeError(i,t,"readlink")}}async realpath(t){z(t,"realpath");let s=W(t),r=new Set,n=async a=>{let l=a==="/"?[]:a.slice(1).split("/"),c="";for(let u of l){if(c=`${c}/${u}`,r.has(c))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(c))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let f=this.memory.get(c),d=0,p=40;for(;f&&f.type==="symlink"&&d<p;){if(r.add(c),c=this.resolveSymlink(c,f.target),d++,r.has(c))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(c))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);f=this.memory.get(c)}if(d>=p)throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(!f){let m=this.toRealPath(c),h=this.resolveRealPath_(m);if(h)try{if((await Z.promises.lstat(h)).isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let S=await Z.promises.readlink(h),v=this.realTargetToVirtual(c,S);return r.add(c),c=this.resolveSymlink(c,v),n(c)}}catch(g){if(g.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);this.sanitizeError(g,t,"realpath")}else if(!this.allowSymlinks){let g=this.resolveRealPathParent_(m);if(g)try{if((await Z.promises.lstat(g)).isSymbolicLink())throw new Error(`ENOENT: no such file or directory, realpath '${t}'`)}catch(S){if(S.message?.includes("ENOENT")||S.message?.includes("ELOOP"))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);this.sanitizeError(S,t,"realpath")}}}}return c||"/"},i=await n(s);if(!await this.existsInOverlay(i))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);return i}async utimes(t,s,r){z(t,"utimes"),this.assertWritable(`utimes '${t}'`);let n=W(t);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);let o=this.memory.get(n);if(o){o.mtime=r;return}let a=await this.stat(n);if(a.isFile){let l=await this.readFileBuffer(n);this.memory.set(n,{type:"file",content:l,mode:a.mode,mtime:r})}else a.isDirectory&&this.memory.set(n,{type:"directory",mode:a.mode,mtime:r})}};import*as D from"node:fs";import*as U from"node:path";var us=class{root;canonicalRoot;maxFileReadSize;allowSymlinks;constructor(t){this.root=U.resolve(t.root),this.maxFileReadSize=t.maxFileReadSize??10485760,this.allowSymlinks=t.allowSymlinks??!1,Dt(this.root,"ReadWriteFs"),this.canonicalRoot=D.realpathSync(this.root)}resolveAndValidate(t,s){let r=this.allowSymlinks?Ot(t,this.canonicalRoot):xt(t,this.root,this.canonicalRoot);if(r===null)throw new Error(`EACCES: permission denied, '${s}' resolves outside sandbox`);return r}validateParent(t,s){let r=U.dirname(t),n=this.resolveAndValidate(r,s);return U.join(n,U.basename(t))}toRealPath(t){let s=W(t),r=U.join(this.root,s);return U.resolve(r)}async readFile(t,s){let r=await this.readFileBuffer(t),n=ve(s);return Je(r,n)}async readFileBuffer(t){z(t,"open");let s=this.toRealPath(t),r=this.resolveAndValidate(s,t);try{let n=this.allowSymlinks?D.constants.O_RDONLY:D.constants.O_RDONLY|D.constants.O_NOFOLLOW,i=await D.promises.open(r,n);try{if(this.maxFileReadSize>0){let a=await i.stat();if(a.size>this.maxFileReadSize)throw new Error(`EFBIG: file too large, read '${t}' (${a.size} bytes, max ${this.maxFileReadSize})`)}let o=await i.readFile();return new Uint8Array(o)}finally{await i.close()}}catch(n){let i=n;if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, open '${t}'`);if(i.code==="EISDIR")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);if(i.code==="ELOOP")throw new Error(`EACCES: permission denied, '${t}' is a symlink`);this.sanitizeError(n,t,"open")}}async writeFile(t,s,r){z(t,"write");let n=this.toRealPath(t),i=this.resolveAndValidate(n,t),o=ve(r),a=Ie(s,o),l=U.dirname(i);try{await D.promises.mkdir(l,{recursive:!0}),i=this.resolveAndValidate(n,t);let c=this.allowSymlinks?0:D.constants.O_NOFOLLOW,u=D.constants.O_WRONLY|D.constants.O_CREAT|D.constants.O_TRUNC|c,f=await D.promises.open(i,u,438);try{await f.writeFile(a)}finally{await f.close()}}catch(c){if(c.code==="ELOOP")throw new Error(`EACCES: permission denied, '${t}' is a symlink`);this.sanitizeError(c,t,"write")}}async appendFile(t,s,r){z(t,"append");let n=this.toRealPath(t),i=this.resolveAndValidate(n,t),o=ve(r),a=Ie(s,o),l=U.dirname(i);try{await D.promises.mkdir(l,{recursive:!0}),i=this.resolveAndValidate(n,t);let c=this.allowSymlinks?0:D.constants.O_NOFOLLOW,u=D.constants.O_WRONLY|D.constants.O_CREAT|D.constants.O_APPEND|c,f=await D.promises.open(i,u,438);try{await f.writeFile(a)}finally{await f.close()}}catch(c){if(c.code==="ELOOP")throw new Error(`EACCES: permission denied, '${t}' is a symlink`);this.sanitizeError(c,t,"append")}}async exists(t){if(t.includes("\0"))return!1;let s=this.toRealPath(t);try{let r=this.resolveAndValidate(s,t);return await D.promises.access(r),!0}catch{return!1}}async stat(t){z(t,"stat");let s=this.toRealPath(t),r=this.resolveAndValidate(s,t);try{let n=await D.promises.lstat(r);if(!this.allowSymlinks&&n.isSymbolicLink())throw new Error(`EACCES: permission denied, '${t}' is a symlink`);return{isFile:n.isFile(),isDirectory:n.isDirectory(),isSymbolicLink:n.isSymbolicLink(),mode:n.mode,size:n.size,mtime:n.mtime}}catch(n){if(n.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, stat '${t}'`);this.sanitizeError(n,t,"stat")}}async lstat(t){z(t,"lstat");let s=this.toRealPath(t),r=this.validateParent(s,t);try{let n=await D.promises.lstat(r);return{isFile:n.isFile(),isDirectory:n.isDirectory(),isSymbolicLink:n.isSymbolicLink(),mode:n.mode,size:n.size,mtime:n.mtime}}catch(n){if(n.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);this.sanitizeError(n,t,"lstat")}}async mkdir(t,s){z(t,"mkdir");let r=this.toRealPath(t),n=this.resolveAndValidate(r,t);try{await D.promises.mkdir(n,{recursive:s?.recursive})}catch(i){let o=i;if(o.code==="EEXIST")throw new Error(`EEXIST: file already exists, mkdir '${t}'`);if(o.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.sanitizeError(i,t,"mkdir")}}async readdir(t){return(await this.readdirWithFileTypes(t)).map(r=>r.name)}async readdirWithFileTypes(t){z(t,"scandir");let s=this.toRealPath(t),r=this.resolveAndValidate(s,t);try{if(!this.allowSymlinks&&(await D.promises.lstat(r)).isSymbolicLink())throw new Error(`EACCES: permission denied, '${t}' is a symlink`);return(await D.promises.readdir(r,{withFileTypes:!0})).map(i=>({name:i.name,isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:i.isSymbolicLink()})).sort((i,o)=>i.name<o.name?-1:i.name>o.name?1:0)}catch(n){let i=n;if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);if(i.code==="ENOTDIR")throw new Error(`ENOTDIR: not a directory, scandir '${t}'`);this.sanitizeError(n,t,"scandir")}}async rm(t,s){z(t,"rm");let r=this.toRealPath(t),n=this.resolveAndValidate(r,t);try{await D.promises.rm(n,{recursive:s?.recursive??!1,force:s?.force??!1})}catch(i){let o=i;if(o.code==="ENOENT"&&!s?.force)throw new Error(`ENOENT: no such file or directory, rm '${t}'`);if(o.code==="ENOTEMPTY")throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);this.sanitizeError(i,t,"rm")}}async cp(t,s,r){z(t,"cp"),z(s,"cp");let n=this.toRealPath(t),i=this.toRealPath(s),o=this.resolveAndValidate(n,t),a=this.resolveAndValidate(i,s);try{await D.promises.cp(o,a,{recursive:r?.recursive??!1,filter:async l=>{try{if(D.lstatSync(l).isSymbolicLink()){let u=await D.promises.realpath(l).catch(()=>null);return u===null?!1:De(u,this.canonicalRoot)}return!0}catch(c){return c.code==="ENOENT"}}})}catch(l){let c=l;if(c.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, cp '${t}'`);if(c.code==="EISDIR")throw new Error(`EISDIR: is a directory, cp '${t}'`);this.sanitizeError(l,t,"cp")}}async mv(t,s){z(t,"mv"),z(s,"mv");let r=this.toRealPath(t),n=this.toRealPath(s),i=this.validateParent(r,t),o=this.validateParent(n,s);try{if((await D.promises.lstat(i)).isSymbolicLink()){let c=await D.promises.readlink(i),u=U.resolve(U.dirname(o),c),f=await D.promises.realpath(u).catch(()=>u);if(!De(f,this.canonicalRoot))throw new Error(`EACCES: permission denied, mv '${t}' -> '${s}' would create symlink escaping sandbox`)}}catch(l){let c=l;if(c.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, mv '${t}'`);if(c.message?.includes("EACCES")||c.message?.includes("escaping sandbox"))throw l}let a=U.dirname(o);try{await D.promises.mkdir(a,{recursive:!0})}catch(l){this.sanitizeError(l,s,"mv")}try{await D.promises.rename(i,o)}catch(l){let c=l;if(c.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, mv '${t}'`);if(c.code==="EXDEV"){await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0});return}this.sanitizeError(l,t,"mv")}try{if(D.lstatSync(o).isDirectory()&&this.findEscapingSymlinks(o).length>0)throw await D.promises.rename(o,i),new Error(`EACCES: permission denied, mv '${t}' -> '${s}' would create symlinks escaping sandbox`)}catch(l){if(l.message?.includes("EACCES")||l.message?.includes("escaping sandbox"))throw l}}resolvePath(t,s){if(s.startsWith("/"))return W(s);let r=t==="/"?`/${s}`:`${t}/${s}`;return W(r)}getAllPaths(){let t=[];return this.scanDir("/",t),t}sanitizeError(t,s,r){let n=t;if(n.path===void 0&&(n.message?.includes("EACCES")||n.message?.includes("escaping sandbox")||n.message?.includes("EFBIG")))throw t;let i=n.code||"EIO";throw new Error(`${i}: ${r} '${s}'`)}findEscapingSymlinks(t){let s=[];try{let r=D.readdirSync(t);for(let n of r){let i=U.join(t,n);try{let o=D.lstatSync(i);if(o.isSymbolicLink()){let a=D.readlinkSync(i),l=U.resolve(t,a),c;try{c=D.realpathSync(l)}catch{c=l}De(c,this.canonicalRoot)||s.push(i)}else o.isDirectory()&&s.push(...this.findEscapingSymlinks(i))}catch{}}}catch{}return s}scanDir(t,s){let r=this.toRealPath(t),n;try{n=this.resolveAndValidate(r,t)}catch{return}try{let i=D.readdirSync(n);for(let o of i){let a=t==="/"?`/${o}`:`${t}/${o}`;s.push(a);let l=U.join(n,o);D.lstatSync(l).isDirectory()&&this.scanDir(a,s)}}catch{}}async chmod(t,s){z(t,"chmod");let r=this.toRealPath(t),n=this.resolveAndValidate(r,t);try{let i=this.allowSymlinks?D.constants.O_RDONLY:D.constants.O_RDONLY|D.constants.O_NOFOLLOW,o=await D.promises.open(n,i);try{await o.chmod(s)}finally{await o.close()}}catch(i){let o=i;if(o.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);if(o.code==="ELOOP")throw new Error(`EACCES: permission denied, '${t}' is a symlink`);this.sanitizeError(i,t,"chmod")}}async symlink(t,s){if(!this.allowSymlinks)throw new Error(`EPERM: operation not permitted, symlink '${s}'`);z(s,"symlink");let r=this.toRealPath(s),n=this.validateParent(r,s),i=W(s),o=W(U.dirname(i)),a=t.startsWith("/")?W(t):W(o==="/"?`/${t}`:`${o}/${t}`),l=U.join(this.canonicalRoot,a),c=U.dirname(n),u=t.startsWith("/")?l:U.relative(c,l)||".";try{await D.promises.symlink(u,n)}catch(f){if(f.code==="EEXIST")throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.sanitizeError(f,s,"symlink")}}async link(t,s){z(t,"link"),z(s,"link");let r=this.toRealPath(t),n=this.toRealPath(s),i=this.resolveAndValidate(r,t),o=this.resolveAndValidate(n,s);try{await D.promises.link(i,o)}catch(a){let l=a;if(l.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, link '${t}'`);if(l.code==="EEXIST")throw new Error(`EEXIST: file already exists, link '${s}'`);if(l.code==="EPERM")throw new Error(`EPERM: operation not permitted, link '${t}'`);this.sanitizeError(a,t,"link")}}async readlink(t){z(t,"readlink");let s=this.toRealPath(t),r=this.validateParent(s,t);try{let n=await D.promises.readlink(r),i=W(t),o=U.dirname(i),a=U.isAbsolute(n)?n:U.resolve(U.dirname(r),n),l=await D.promises.realpath(a).catch(()=>a);if(De(l,this.canonicalRoot)){let c=l.slice(this.canonicalRoot.length)||"/";return o==="/"?c.startsWith("/")?c.slice(1)||".":c:U.relative(o,c)}return U.basename(n)}catch(n){let i=n;if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(i.code==="EINVAL")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);this.sanitizeError(n,t,"readlink")}}async realpath(t){z(t,"realpath");let s=this.toRealPath(t);try{this.resolveAndValidate(s,t)}catch{throw new Error(`ENOENT: no such file or directory, realpath '${t}'`)}let r;try{r=await D.promises.realpath(s)}catch(n){let i=n;if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);if(i.code==="ELOOP")throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);this.sanitizeError(n,t,"realpath")}if(De(r,this.canonicalRoot))return r.slice(this.canonicalRoot.length)||"/";throw new Error(`ENOENT: no such file or directory, realpath '${t}'`)}async utimes(t,s,r){z(t,"utimes");let n=this.toRealPath(t),i=this.resolveAndValidate(n,t);try{let o=this.allowSymlinks?D.constants.O_RDONLY:D.constants.O_RDONLY|D.constants.O_NOFOLLOW,a=await D.promises.open(i,o);try{await a.utimes(s,r)}finally{await a.close()}}catch(o){let a=o;if(a.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);if(a.code==="ELOOP")throw new Error(`EACCES: permission denied, '${t}' is a symlink`);this.sanitizeError(o,t,"utimes")}}};var ut=class{cmdId;cwd;startedAt;exitCode;bashEnv;cmdLine;env;explicitCwd;signal;timeoutMs;abortController=new AbortController;timeoutId;externalAbortListener;resultPromise;constructor(t,s,r,n,i=!1,o,a){this.cmdId=crypto.randomUUID(),this.cwd=r,this.startedAt=new Date,this.bashEnv=t,this.cmdLine=s,this.env=n,this.explicitCwd=i,this.signal=o,this.timeoutMs=a,this.setupCancellation(),this.resultPromise=this.execute()}setupCancellation(){if(this.signal&&(this.signal.aborted?this.abortController.abort(this.signal.reason):(this.externalAbortListener=()=>{this.abortController.abort(this.signal?.reason)},this.signal.addEventListener("abort",this.externalAbortListener,{once:!0}))),this.timeoutMs!==void 0){let t=Math.max(0,this.timeoutMs);this.timeoutId=St(()=>{this.abortController.abort(new Error(`sandbox command timeout after ${t}ms`))},t)}}cleanupCancellation(){this.timeoutId!==void 0&&(Pt(this.timeoutId),this.timeoutId=void 0),this.signal&&this.externalAbortListener&&(this.signal.removeEventListener("abort",this.externalAbortListener),this.externalAbortListener=void 0)}async execute(){let t={cwd:this.explicitCwd?this.cwd:void 0,env:this.env,signal:this.abortController.signal};try{let s=await this.bashEnv.exec(this.cmdLine,t);return this.exitCode=s.exitCode,s}finally{this.cleanupCancellation()}}async*logs(){let t=await this.resultPromise;t.stdout&&(yield{type:"stdout",data:t.stdout,timestamp:new Date}),t.stderr&&(yield{type:"stderr",data:t.stderr,timestamp:new Date})}async wait(){return await this.resultPromise,this}async output(){let t=await this.resultPromise;return t.stdout+t.stderr}async stdout(){return(await this.resultPromise).stdout}async stderr(){return(await this.resultPromise).stderr}async kill(){this.abortController.abort(new Error("command killed"))}};var fs=class e{bashEnv;timeoutMs;constructor(t,s){this.bashEnv=t,this.timeoutMs=s}static async create(t){let s=t?.fs;if(t?.overlayRoot){if(t?.fs)throw new Error("Cannot specify both 'fs' and 'overlayRoot' options");s=new ct({root:t.overlayRoot})}let r=new $t({env:t?.env,cwd:t?.cwd,fs:s,maxCallDepth:t?.maxCallDepth,maxCommandCount:t?.maxCommandCount,maxLoopIterations:t?.maxLoopIterations,network:t?.network,defenseInDepth:t?.defenseInDepth});return new e(r,t?.timeoutMs)}async runCommand(t,s,r){let n,i,o,a,l=!1,c,u;if(typeof t=="object"){let h=t,g=[h.cmd,...h.args??[]];n=ps(g),i=h.cwd,o=h.env,a=h.signal,l=h.detached??!1,c=h.stdout,u=h.stderr}else if(Array.isArray(s)){let h=r;n=ps([t,...s]),a=h?.signal}else{n=t;let h=s;i=h?.cwd,o=h?.env}let f=i??this.bashEnv.getCwd(),d=i!==void 0,p=new ut(this.bashEnv,n,f,o,d,a,this.timeoutMs);if(l)return p;let m=await p.wait();if(c){let h=await p.stdout();h&&c.write(h)}if(u){let h=await p.stderr();h&&u.write(h)}return m}async writeFiles(t){let s=this.bashEnv.getCwd();for(let[r,n]of Object.entries(t)){let i;typeof n=="string"?i=n:n.encoding==="base64"?i=Buffer.from(n.content,"base64").toString("utf-8"):i=n.content;let o=this.bashEnv.fs.resolvePath(s,r),a=o.substring(0,o.lastIndexOf("/"))||"/";a!=="/"&&await this.bashEnv.fs.mkdir(a,{recursive:!0}),await this.bashEnv.writeFile(o,i)}}async readFile(t,s){let r=await this.bashEnv.readFile(t);return s==="base64"?Buffer.from(r).toString("base64"):r}async mkDir(t,s){let r=this.bashEnv.fs.resolvePath(this.bashEnv.getCwd(),t);await this.bashEnv.fs.mkdir(r,{recursive:s?.recursive??!1})}async stop(){}async extendTimeout(t){}get domain(){}get bashEnvInstance(){return this.bashEnv}};var ds=class{violations=[];violationsByType=new Map;options;constructor(t={}){this.options={maxViolationsPerType:t.maxViolationsPerType??100,includeStackTraces:t.includeStackTraces??!0,onViolation:t.onViolation??(()=>{}),logToConsole:t.logToConsole??!1}}record(t){let s=this.options.includeStackTraces?t:{...t,stack:void 0};this.violations.unshift(s);let r=this.violationsByType.get(t.type);r||(r=[],this.violationsByType.set(t.type,r)),r.length<this.options.maxViolationsPerType&&r.push(s),this.options.logToConsole&&console.warn(`[SecurityViolation] ${t.type}: ${t.message}`,t.path),this.options.onViolation(s)}getViolations(){return[...this.violations]}getViolationsByType(t){return[...this.violationsByType.get(t)??[]]}getSummary(){let t=[];for(let[s,r]of this.violationsByType){if(r.length===0)continue;let n=new Set,i=Number.POSITIVE_INFINITY,o=0;for(let a of r)n.add(a.path),i=Math.min(i,a.timestamp),o=Math.max(o,a.timestamp);t.push({type:s,count:r.length,firstSeen:i,lastSeen:o,paths:Array.from(n)})}return t.sort((s,r)=>r.count-s.count),t}getTotalCount(){return this.violations.length}hasViolations(){return this.violations.length>0}clear(){this.violations=[],this.violationsByType.clear()}createCallback(){return t=>this.record(t)}};function Ai(){return e=>{console.warn("[DefenseInDepth] Security violation detected:",`
|
|
705
|
+
`)}var Ba=new TextDecoder("utf-8",{fatal:!0});function Ni(e){if(!e)return e;let t=!1;for(let r=0;r<e.length;r++){let n=e.charCodeAt(r);if(n>255)return e;n>127&&(t=!0)}if(!t)return e;let s=new Uint8Array(e.length);for(let r=0;r<e.length;r++)s[r]=e.charCodeAt(r);try{return Ba.decode(s)}catch{return e}}var ds=class{baseFs;mounts=new Map;constructor(t){if(this.baseFs=t?.base??new Re,t?.mounts)for(let{mountPoint:s,filesystem:r}of t.mounts)this.mount(s,r)}mount(t,s){this.validateMountPath(t);let r=this.normalizePath(t);this.validateMount(r),this.mounts.set(r,{mountPoint:r,filesystem:s})}unmount(t){let s=this.normalizePath(t);if(!this.mounts.has(s))throw new Error(`No filesystem mounted at '${t}'`);this.mounts.delete(s)}getMounts(){return Array.from(this.mounts.values()).map(t=>({mountPoint:t.mountPoint,filesystem:t.filesystem}))}isMountPoint(t){let s=this.normalizePath(t);return this.mounts.has(s)}validateMountPath(t){let s=t.split("/");for(let r of s)if(r==="."||r==="..")throw new Error(`Invalid mount point '${t}': contains '.' or '..' segments`)}validateMount(t){if(t==="/")throw new Error("Cannot mount at root '/'");for(let s of this.mounts.keys())if(s!==t){if(t.startsWith(`${s}/`))throw new Error(`Cannot mount at '${t}': inside existing mount '${s}'`);if(s.startsWith(`${t}/`))throw new Error(`Cannot mount at '${t}': would contain existing mount '${s}'`)}}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let r=s.split("/").filter(i=>i&&i!=="."),n=[];for(let i of r)i===".."?n.pop():n.push(i);return`/${n.join("/")}`}routePath(t){let s=this.normalizePath(t),r=null,n=0;for(let i of this.mounts.values()){let o=i.mountPoint;if(s===o)return{fs:i.filesystem,relativePath:"/"};s.startsWith(`${o}/`)&&o.length>n&&(r=i,n=o.length)}if(r){let i=s.slice(n);return{fs:r.filesystem,relativePath:i||"/"}}return{fs:this.baseFs,relativePath:s}}getChildMountPoints(t){let s=this.normalizePath(t),r=s==="/"?"/":`${s}/`,n=[];for(let i of this.mounts.keys())if(i.startsWith(r)){let a=i.slice(r.length).split("/")[0];a&&!n.includes(a)&&n.push(a)}return n}async readFile(t,s){let{fs:r,relativePath:n}=this.routePath(t);return r.readFile(n,s)}async readFileBuffer(t){let{fs:s,relativePath:r}=this.routePath(t);return s.readFileBuffer(r)}async writeFile(t,s,r){let{fs:n,relativePath:i}=this.routePath(t);return n.writeFile(i,s,r)}async appendFile(t,s,r){let{fs:n,relativePath:i}=this.routePath(t);return n.appendFile(i,s,r)}async exists(t){let s=this.normalizePath(t);if(this.mounts.has(s)||this.getChildMountPoints(s).length>0)return!0;let{fs:n,relativePath:i}=this.routePath(t);return n.exists(i)}async stat(t){let s=this.normalizePath(t),r=this.mounts.get(s);if(r)try{return await r.filesystem.stat("/")}catch{return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date}}if(this.getChildMountPoints(s).length>0)try{return await this.baseFs.stat(s)}catch{return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date}}let{fs:i,relativePath:o}=this.routePath(t);return i.stat(o)}async lstat(t){let s=this.normalizePath(t),r=this.mounts.get(s);if(r)try{return await r.filesystem.lstat("/")}catch{return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date}}if(this.getChildMountPoints(s).length>0)try{return await this.baseFs.lstat(s)}catch{return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date}}let{fs:i,relativePath:o}=this.routePath(t);return i.lstat(o)}async mkdir(t,s){let r=this.normalizePath(t);if(this.mounts.has(r)){if(s?.recursive)return;throw new Error(`EEXIST: directory already exists, mkdir '${t}'`)}if(this.getChildMountPoints(r).length>0&&s?.recursive)return;let{fs:i,relativePath:o}=this.routePath(t);return i.mkdir(o,s)}async readdir(t){let s=this.normalizePath(t),r=new Set,n=null,{fs:i,relativePath:o}=this.routePath(t);try{let l=await i.readdir(o);for(let c of l)r.add(c)}catch(l){let c=l.code,u=l.message||"";if(c!=="ENOENT"&&!u.includes("ENOENT"))throw l;n=l}let a=this.getChildMountPoints(s);for(let l of a)r.add(l);if(r.size===0&&n&&!this.mounts.has(s))throw n;return Array.from(r).sort()}async rm(t,s){let r=this.normalizePath(t);if(this.mounts.has(r))throw new Error(`EBUSY: mount point, cannot remove '${t}'`);if(this.getChildMountPoints(r).length>0)throw new Error(`EBUSY: contains mount points, cannot remove '${t}'`);let{fs:i,relativePath:o}=this.routePath(t);return i.rm(o,s)}async cp(t,s,r){let n=this.routePath(t),i=this.routePath(s);return n.fs===i.fs?n.fs.cp(n.relativePath,i.relativePath,r):this.crossMountCopy(t,s,r)}async mv(t,s){let r=this.normalizePath(t);if(this.mounts.has(r))throw new Error(`EBUSY: mount point, cannot move '${t}'`);let n=this.routePath(t),i=this.routePath(s);if(n.fs===i.fs)return n.fs.mv(n.relativePath,i.relativePath);await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}resolvePath(t,s){if(s.startsWith("/"))return this.normalizePath(s);let r=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(r)}getAllPaths(){let t=new Set;for(let s of this.baseFs.getAllPaths())t.add(s);for(let s of this.mounts.keys()){let r=s.split("/").filter(Boolean),n="";for(let o of r)n=`${n}/${o}`,t.add(n);let i=this.mounts.get(s);if(i)for(let o of i.filesystem.getAllPaths())o==="/"?t.add(s):t.add(`${s}${o}`)}return Array.from(t).sort()}async chmod(t,s){let r=this.normalizePath(t),n=this.mounts.get(r);if(n)return n.filesystem.chmod("/",s);let{fs:i,relativePath:o}=this.routePath(t);return i.chmod(o,s)}async symlink(t,s){let{fs:r,relativePath:n}=this.routePath(s);return r.symlink(t,n)}async link(t,s){let r=this.routePath(t),n=this.routePath(s);if(r.fs!==n.fs)throw new Error(`EXDEV: cross-device link not permitted, link '${t}' -> '${s}'`);return r.fs.link(r.relativePath,n.relativePath)}async readlink(t){let{fs:s,relativePath:r}=this.routePath(t);return s.readlink(r)}async realpath(t){let s=this.normalizePath(t);if(this.mounts.get(s))return s;let{fs:n,relativePath:i}=this.routePath(t),o=await n.realpath(i);for(let[a,l]of this.mounts)if(s===a||s.startsWith(`${a}/`))return o==="/"?a:`${a}${o}`;return o}async crossMountCopy(t,s,r){let n=await this.lstat(t);if(n.isFile){let i=await this.readFileBuffer(t);await this.writeFile(s,i),await this.chmod(s,n.mode)}else if(n.isDirectory){if(!r?.recursive)throw new Error(`cp: ${t} is a directory (not copied)`);await this.mkdir(s,{recursive:!0});let i=await this.readdir(t);for(let o of i){let a=t==="/"?`/${o}`:`${t}/${o}`,l=s==="/"?`/${o}`:`${s}/${o}`;await this.crossMountCopy(a,l,r)}}else if(n.isSymbolicLink){let i=await this.readlink(t);await this.symlink(i,s)}}async utimes(t,s,r){let{fs:n,relativePath:i}=this.routePath(t);return n.utimes(i,s,r)}};import*as q from"node:fs";import*as le from"node:path";var ja="/home/user/project",ft=class{root;canonicalRoot;mountPoint;readOnly;maxFileReadSize;allowSymlinks;memory=new Map;deleted=new Set;constructor(t){this.root=le.resolve(t.root);let s=t.mountPoint??ja;if(this.mountPoint=s==="/"?"/":s.replace(/\/+$/,""),!this.mountPoint.startsWith("/"))throw new Error(`Mount point must be an absolute path: ${s}`);this.readOnly=t.readOnly??!1,this.maxFileReadSize=t.maxFileReadSize??10485760,this.allowSymlinks=t.allowSymlinks??!1,Rt(this.root,"OverlayFs"),this.canonicalRoot=q.realpathSync(this.root),this.createMountPointDirs()}assertWritable(t){if(this.readOnly)throw new Error(`EROFS: read-only file system, ${t}`)}createMountPointDirs(){let t=this.mountPoint.split("/").filter(Boolean),s="";for(let r of t)s+=`/${r}`,this.memory.has(s)||this.memory.set(s,{type:"directory",mode:493,mtime:new Date});this.memory.has("/")||this.memory.set("/",{type:"directory",mode:493,mtime:new Date})}getMountPoint(){return this.mountPoint}mkdirSync(t,s){let n=W(t).split("/").filter(Boolean),i="";for(let o of n)i+=`/${o}`,this.memory.has(i)||this.memory.set(i,{type:"directory",mode:493,mtime:new Date})}writeFileSync(t,s){let r=W(t),n=this.getDirname(r);n!=="/"&&this.mkdirSync(n);let i=s instanceof Uint8Array?s:new TextEncoder().encode(s);this.memory.set(r,{type:"file",content:i,mode:420,mtime:new Date})}getDirname(t){let s=t.lastIndexOf("/");return s===0?"/":t.slice(0,s)}getRelativeToMount(t){return this.mountPoint==="/"?t:t===this.mountPoint?"/":t.startsWith(`${this.mountPoint}/`)?t.slice(this.mountPoint.length):null}toRealPath(t){let s=W(t),r=this.getRelativeToMount(s);if(r===null)return null;let n=le.join(this.root,r),i=le.resolve(n);return De(i,this.root)?i:null}dirname(t){let s=W(t);if(s==="/")return"/";let r=s.lastIndexOf("/");return r===0?"/":s.slice(0,r)}resolveRealPath_(t){return t?this.allowSymlinks?Tt(t,this.canonicalRoot):It(t,this.root,this.canonicalRoot):null}resolveRealPathParent_(t){if(!t)return null;let s=le.dirname(t),r=this.resolveRealPath_(s);return r===null?null:le.join(r,le.basename(t))}sanitizeError(t,s,r){let n=t;if(n.path===void 0&&(n.message?.includes("ELOOP")||n.message?.includes("EFBIG")||n.message?.includes("EPERM")))throw t;let i=n.code||"EIO";throw new Error(`${i}: ${r} '${s}'`)}ensureParentDirs(t){let s=this.dirname(t);s!=="/"&&(this.memory.has(s)||(this.ensureParentDirs(s),this.memory.set(s,{type:"directory",mode:493,mtime:new Date})),this.deleted.delete(s))}async existsInOverlay(t){let s=W(t);if(this.deleted.has(s))return!1;if(this.memory.has(s))return!0;let r=this.resolveRealPathParent_(this.toRealPath(s));if(!r)return!1;try{return await q.promises.lstat(r),!0}catch{return!1}}async readFile(t,s){let r=await this.readFileBuffer(t),n=be(s);return tt(r,n)}async readFileBuffer(t,s=new Set){z(t,"open");let r=W(t);if(s.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);if(s.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, open '${t}'`);let n=this.memory.get(r);if(n){if(n.type==="symlink"){let o=this.resolveSymlink(r,n.target);return this.readFileBuffer(o,s)}if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return n.content}let i=this.resolveRealPath_(this.toRealPath(r));if(!i)throw new Error(`ENOENT: no such file or directory, open '${t}'`);try{let o=await q.promises.lstat(i);if(o.isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, open '${t}'`);let c=await q.promises.readlink(i),u=this.realTargetToVirtual(r,c),f=this.resolveSymlink(r,u);return this.readFileBuffer(f,s)}if(o.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);if(this.maxFileReadSize>0&&o.size>this.maxFileReadSize)throw new Error(`EFBIG: file too large, read '${t}' (${o.size} bytes, max ${this.maxFileReadSize})`);let a=this.allowSymlinks?q.constants.O_RDONLY:q.constants.O_RDONLY|q.constants.O_NOFOLLOW,l=await q.promises.open(i,a);try{let c=await l.readFile();return new Uint8Array(c)}finally{await l.close()}}catch(o){let a=o.code;if(a==="ENOENT")throw new Error(`ENOENT: no such file or directory, open '${t}'`);if(a==="ELOOP")throw new Error(`ENOENT: no such file or directory, open '${t}'`);this.sanitizeError(o,t,"open")}}async writeFile(t,s,r){z(t,"write"),this.assertWritable(`write '${t}'`);let n=W(t);this.ensureParentDirs(n);let i=be(r),o=Ie(s,i);this.memory.set(n,{type:"file",content:o,mode:420,mtime:new Date}),this.deleted.delete(n)}async appendFile(t,s,r){z(t,"append"),this.assertWritable(`append '${t}'`);let n=W(t),i=be(r),o=Ie(s,i),a;try{a=await this.readFileBuffer(n)}catch{a=new Uint8Array(0)}let l=new Uint8Array(a.length+o.length);l.set(a),l.set(o,a.length),this.ensureParentDirs(n),this.memory.set(n,{type:"file",content:l,mode:420,mtime:new Date}),this.deleted.delete(n)}async exists(t){return t.includes("\0")?!1:this.existsInOverlay(t)}async stat(t,s=new Set){z(t,"stat");let r=W(t);if(s.has(r))throw new Error(`ELOOP: too many levels of symbolic links, stat '${t}'`);if(s.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let n=this.memory.get(r);if(n){if(n.type==="symlink"){let a=this.resolveSymlink(r,n.target);return this.stat(a,s)}let o=0;return n.type==="file"&&(o=n.content.length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:o,mtime:n.mtime}}let i=this.resolveRealPath_(this.toRealPath(r));if(!i)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);try{let o=await q.promises.lstat(i);if(o.isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let a=await q.promises.readlink(i),l=this.realTargetToVirtual(r,a),c=this.resolveSymlink(r,l);return this.stat(c,s)}return{isFile:o.isFile(),isDirectory:o.isDirectory(),isSymbolicLink:!1,mode:o.mode,size:o.size,mtime:o.mtime}}catch(o){if(o.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, stat '${t}'`);this.sanitizeError(o,t,"stat")}}async lstat(t){z(t,"lstat");let s=W(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);let r=this.memory.get(s);if(r){if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime};let i=0;return r.type==="file"&&(i=r.content.length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:i,mtime:r.mtime}}let n=this.resolveRealPathParent_(this.toRealPath(s));if(!n)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);try{let i=await q.promises.lstat(n);return{isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:i.isSymbolicLink(),mode:i.mode,size:i.size,mtime:i.mtime}}catch(i){if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);this.sanitizeError(i,t,"lstat")}}resolveSymlink(t,s){if(s.startsWith("/"))return W(s);let r=this.dirname(t);return W(r==="/"?`/${s}`:`${r}/${s}`)}realTargetToVirtual(t,s){let r=Nr(s,this.canonicalRoot);if(r.withinRoot){if(!le.isAbsolute(s))return s;let n=r.relativePath;return this.mountPoint==="/"?n:`${this.mountPoint}${n}`}return r.safeName}async mkdir(t,s){z(t,"mkdir"),this.assertWritable(`mkdir '${t}'`);let r=W(t);if(await this.existsInOverlay(r)){if(!s?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${t}'`);return}let i=this.dirname(r);if(i!=="/"&&!await this.existsInOverlay(i))if(s?.recursive)await this.mkdir(i,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.memory.set(r,{type:"directory",mode:493,mtime:new Date}),this.deleted.delete(r)}async readdirCore(t,s){if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let r=new Map,n=new Set,i=s==="/"?"/":`${s}/`;for(let a of this.deleted)if(a.startsWith(i)){let l=a.slice(i.length),c=l.split("/")[0];c&&!l.includes("/",c.length)&&n.add(c)}for(let[a,l]of this.memory)if(a!==s&&a.startsWith(i)){let c=a.slice(i.length),u=c.split("/")[0];u&&!n.has(u)&&!c.includes("/",1)&&r.set(u,{name:u,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}let o=this.resolveRealPath_(this.toRealPath(s));if(o)try{if(!this.allowSymlinks&&(await q.promises.lstat(o)).isSymbolicLink()){if(!this.memory.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);return r}let a=await q.promises.readdir(o,{withFileTypes:!0});for(let l of a)!n.has(l.name)&&!r.has(l.name)&&r.set(l.name,{name:l.name,isFile:l.isFile(),isDirectory:l.isDirectory(),isSymbolicLink:l.isSymbolicLink()})}catch(a){if(a.code==="ENOENT"){if(!this.memory.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`)}else a.code!=="ENOTDIR"&&this.sanitizeError(a,t,"scandir")}return r}async resolveForReaddir(t,s=!1){let r=W(t),n=new Set,i=s,o=this.memory.get(r);for(;o&&o.type==="symlink";){if(n.has(r))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);n.add(r),i=!0,r=this.resolveSymlink(r,o.target),o=this.memory.get(r)}if(o)return{normalized:r,outsideOverlay:!1};if(this.getRelativeToMount(r)===null)return{normalized:r,outsideOverlay:!0};let l=this.resolveRealPath_(this.toRealPath(r));if(!l)return{normalized:r,outsideOverlay:!0};try{if((await q.promises.lstat(l)).isSymbolicLink()){if(!this.allowSymlinks)return{normalized:r,outsideOverlay:!0};let u=await q.promises.readlink(l),f=this.realTargetToVirtual(r,u),d=this.resolveSymlink(r,f);return this.resolveForReaddir(d,!0)}return{normalized:r,outsideOverlay:!1}}catch{return i?{normalized:r,outsideOverlay:!0}:{normalized:r,outsideOverlay:!1}}}async readdir(t){z(t,"scandir");let{normalized:s,outsideOverlay:r}=await this.resolveForReaddir(t);if(r)return[];let n=await this.readdirCore(t,s);return Array.from(n.keys()).sort((i,o)=>i<o?-1:i>o?1:0)}async readdirWithFileTypes(t){z(t,"scandir");let{normalized:s,outsideOverlay:r}=await this.resolveForReaddir(t);if(r)return[];let n=await this.readdirCore(t,s);return Array.from(n.values()).sort((i,o)=>i.name<o.name?-1:i.name>o.name?1:0)}async rm(t,s){z(t,"rm"),this.assertWritable(`rm '${t}'`);let r=W(t);if(!await this.existsInOverlay(r)){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}try{if((await this.stat(r)).isDirectory){let o=await this.readdir(r);if(o.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let a of o){let l=r==="/"?`/${a}`:`${r}/${a}`;await this.rm(l,s)}}}}catch(i){if(i instanceof Error&&(i.message.includes("ENOTEMPTY")||i.message.includes("EISDIR")))throw i}this.deleted.add(r),this.memory.delete(r)}async cp(t,s,r){z(t,"cp"),z(s,"cp"),this.assertWritable(`cp '${s}'`);let n=W(t),i=W(s);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, cp '${t}'`);let a=await this.stat(n);if(a.isFile){let l=await this.readFileBuffer(n);await this.writeFile(i,l)}else if(a.isDirectory){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let l=await this.readdir(n);for(let c of l){let u=n==="/"?`/${c}`:`${n}/${c}`,f=i==="/"?`/${c}`:`${i}/${c}`;await this.cp(u,f,r)}}}async mv(t,s){this.assertWritable(`mv '${s}'`),await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}resolvePath(t,s){if(s.startsWith("/"))return W(s);let r=t==="/"?`/${s}`:`${t}/${s}`;return W(r)}getAllPaths(){let t=new Set(this.memory.keys());for(let s of this.deleted)t.delete(s);return this.scanRealFs("/",t),Array.from(t)}scanRealFs(t,s){if(this.deleted.has(t))return;let r=this.resolveRealPath_(this.toRealPath(t));if(r)try{let n=q.readdirSync(r);for(let i of n){let o=t==="/"?`/${i}`:`${t}/${i}`;if(this.deleted.has(o))continue;s.add(o);let a=le.join(r,i);q.lstatSync(a).isDirectory()&&this.scanRealFs(o,s)}}catch{}}async chmod(t,s){z(t,"chmod"),this.assertWritable(`chmod '${t}'`);let r=W(t);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);let i=this.memory.get(r);if(i){i.mode=s;return}let o=await this.stat(r);if(o.isFile){let a=await this.readFileBuffer(r);this.memory.set(r,{type:"file",content:a,mode:s,mtime:new Date})}else o.isDirectory&&this.memory.set(r,{type:"directory",mode:s,mtime:new Date})}async symlink(t,s){if(!this.allowSymlinks)throw new Error(`EPERM: operation not permitted, symlink '${s}'`);z(s,"symlink"),this.assertWritable(`symlink '${s}'`);let r=W(s);if(await this.existsInOverlay(r))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(r),this.memory.set(r,{type:"symlink",target:t,mode:511,mtime:new Date}),this.deleted.delete(r)}async link(t,s){z(t,"link"),z(s,"link"),this.assertWritable(`link '${s}'`);let r=W(t),n=W(s);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, link '${t}'`);let o=await this.stat(r);if(!o.isFile)throw new Error(`EPERM: operation not permitted, link '${t}'`);if(await this.existsInOverlay(n))throw new Error(`EEXIST: file already exists, link '${s}'`);let l=await this.readFileBuffer(r);this.ensureParentDirs(n),this.memory.set(n,{type:"file",content:l,mode:o.mode,mtime:new Date}),this.deleted.delete(n)}async readlink(t){z(t,"readlink");let s=W(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);let r=this.memory.get(s);if(r){if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return r.target}let n=this.resolveRealPathParent_(this.toRealPath(s));if(!n)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);try{let i=await q.promises.readlink(n);if(!le.isAbsolute(i)){let o=le.resolve(le.dirname(n),i),a;try{a=q.realpathSync(o)}catch{a=o}if(!De(a,this.canonicalRoot))return le.basename(i)}return this.realTargetToVirtual(s,i)}catch(i){if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(i.code==="EINVAL")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);this.sanitizeError(i,t,"readlink")}}async realpath(t){z(t,"realpath");let s=W(t),r=new Set,n=async a=>{let l=a==="/"?[]:a.slice(1).split("/"),c="";for(let u of l){if(c=`${c}/${u}`,r.has(c))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(c))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let f=this.memory.get(c),d=0,p=40;for(;f&&f.type==="symlink"&&d<p;){if(r.add(c),c=this.resolveSymlink(c,f.target),d++,r.has(c))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(c))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);f=this.memory.get(c)}if(d>=p)throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(!f){let y=this.toRealPath(c),h=this.resolveRealPath_(y);if(h)try{if((await q.promises.lstat(h)).isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let b=await q.promises.readlink(h),v=this.realTargetToVirtual(c,b);return r.add(c),c=this.resolveSymlink(c,v),n(c)}}catch(m){if(m.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);this.sanitizeError(m,t,"realpath")}else if(!this.allowSymlinks){let m=this.resolveRealPathParent_(y);if(m)try{if((await q.promises.lstat(m)).isSymbolicLink())throw new Error(`ENOENT: no such file or directory, realpath '${t}'`)}catch(b){if(b.message?.includes("ENOENT")||b.message?.includes("ELOOP"))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);this.sanitizeError(b,t,"realpath")}}}}return c||"/"},i=await n(s);if(!await this.existsInOverlay(i))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);return i}async utimes(t,s,r){z(t,"utimes"),this.assertWritable(`utimes '${t}'`);let n=W(t);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);let o=this.memory.get(n);if(o){o.mtime=r;return}let a=await this.stat(n);if(a.isFile){let l=await this.readFileBuffer(n);this.memory.set(n,{type:"file",content:l,mode:a.mode,mtime:r})}else a.isDirectory&&this.memory.set(n,{type:"directory",mode:a.mode,mtime:r})}};import*as D from"node:fs";import*as U from"node:path";var hs=class{root;canonicalRoot;maxFileReadSize;allowSymlinks;constructor(t){this.root=U.resolve(t.root),this.maxFileReadSize=t.maxFileReadSize??10485760,this.allowSymlinks=t.allowSymlinks??!1,Rt(this.root,"ReadWriteFs"),this.canonicalRoot=D.realpathSync(this.root)}resolveAndValidate(t,s){let r=this.allowSymlinks?Tt(t,this.canonicalRoot):It(t,this.root,this.canonicalRoot);if(r===null)throw new Error(`EACCES: permission denied, '${s}' resolves outside sandbox`);return r}validateParent(t,s){let r=U.dirname(t),n=this.resolveAndValidate(r,s);return U.join(n,U.basename(t))}toRealPath(t){let s=W(t),r=U.join(this.root,s);return U.resolve(r)}async readFile(t,s){let r=await this.readFileBuffer(t),n=be(s);return tt(r,n)}async readFileBuffer(t){z(t,"open");let s=this.toRealPath(t),r=this.resolveAndValidate(s,t);try{let n=this.allowSymlinks?D.constants.O_RDONLY:D.constants.O_RDONLY|D.constants.O_NOFOLLOW,i=await D.promises.open(r,n);try{if(this.maxFileReadSize>0){let a=await i.stat();if(a.size>this.maxFileReadSize)throw new Error(`EFBIG: file too large, read '${t}' (${a.size} bytes, max ${this.maxFileReadSize})`)}let o=await i.readFile();return new Uint8Array(o)}finally{await i.close()}}catch(n){let i=n;if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, open '${t}'`);if(i.code==="EISDIR")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);if(i.code==="ELOOP")throw new Error(`EACCES: permission denied, '${t}' is a symlink`);this.sanitizeError(n,t,"open")}}async writeFile(t,s,r){z(t,"write");let n=this.toRealPath(t),i=this.resolveAndValidate(n,t),o=be(r),a=Ie(s,o),l=U.dirname(i);try{await D.promises.mkdir(l,{recursive:!0}),i=this.resolveAndValidate(n,t);let c=this.allowSymlinks?0:D.constants.O_NOFOLLOW,u=D.constants.O_WRONLY|D.constants.O_CREAT|D.constants.O_TRUNC|c,f=await D.promises.open(i,u,438);try{await f.writeFile(a)}finally{await f.close()}}catch(c){if(c.code==="ELOOP")throw new Error(`EACCES: permission denied, '${t}' is a symlink`);this.sanitizeError(c,t,"write")}}async appendFile(t,s,r){z(t,"append");let n=this.toRealPath(t),i=this.resolveAndValidate(n,t),o=be(r),a=Ie(s,o),l=U.dirname(i);try{await D.promises.mkdir(l,{recursive:!0}),i=this.resolveAndValidate(n,t);let c=this.allowSymlinks?0:D.constants.O_NOFOLLOW,u=D.constants.O_WRONLY|D.constants.O_CREAT|D.constants.O_APPEND|c,f=await D.promises.open(i,u,438);try{await f.writeFile(a)}finally{await f.close()}}catch(c){if(c.code==="ELOOP")throw new Error(`EACCES: permission denied, '${t}' is a symlink`);this.sanitizeError(c,t,"append")}}async exists(t){if(t.includes("\0"))return!1;let s=this.toRealPath(t);try{let r=this.resolveAndValidate(s,t);return await D.promises.access(r),!0}catch{return!1}}async stat(t){z(t,"stat");let s=this.toRealPath(t),r=this.resolveAndValidate(s,t);try{let n=await D.promises.lstat(r);if(!this.allowSymlinks&&n.isSymbolicLink())throw new Error(`EACCES: permission denied, '${t}' is a symlink`);return{isFile:n.isFile(),isDirectory:n.isDirectory(),isSymbolicLink:n.isSymbolicLink(),mode:n.mode,size:n.size,mtime:n.mtime}}catch(n){if(n.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, stat '${t}'`);this.sanitizeError(n,t,"stat")}}async lstat(t){z(t,"lstat");let s=this.toRealPath(t),r=this.validateParent(s,t);try{let n=await D.promises.lstat(r);return{isFile:n.isFile(),isDirectory:n.isDirectory(),isSymbolicLink:n.isSymbolicLink(),mode:n.mode,size:n.size,mtime:n.mtime}}catch(n){if(n.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);this.sanitizeError(n,t,"lstat")}}async mkdir(t,s){z(t,"mkdir");let r=this.toRealPath(t),n=this.resolveAndValidate(r,t);try{await D.promises.mkdir(n,{recursive:s?.recursive})}catch(i){let o=i;if(o.code==="EEXIST")throw new Error(`EEXIST: file already exists, mkdir '${t}'`);if(o.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.sanitizeError(i,t,"mkdir")}}async readdir(t){return(await this.readdirWithFileTypes(t)).map(r=>r.name)}async readdirWithFileTypes(t){z(t,"scandir");let s=this.toRealPath(t),r=this.resolveAndValidate(s,t);try{if(!this.allowSymlinks&&(await D.promises.lstat(r)).isSymbolicLink())throw new Error(`EACCES: permission denied, '${t}' is a symlink`);return(await D.promises.readdir(r,{withFileTypes:!0})).map(i=>({name:i.name,isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:i.isSymbolicLink()})).sort((i,o)=>i.name<o.name?-1:i.name>o.name?1:0)}catch(n){let i=n;if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);if(i.code==="ENOTDIR")throw new Error(`ENOTDIR: not a directory, scandir '${t}'`);this.sanitizeError(n,t,"scandir")}}async rm(t,s){z(t,"rm");let r=this.toRealPath(t),n=this.resolveAndValidate(r,t);try{await D.promises.rm(n,{recursive:s?.recursive??!1,force:s?.force??!1})}catch(i){let o=i;if(o.code==="ENOENT"&&!s?.force)throw new Error(`ENOENT: no such file or directory, rm '${t}'`);if(o.code==="ENOTEMPTY")throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);this.sanitizeError(i,t,"rm")}}async cp(t,s,r){z(t,"cp"),z(s,"cp");let n=this.toRealPath(t),i=this.toRealPath(s),o=this.resolveAndValidate(n,t),a=this.resolveAndValidate(i,s);try{await D.promises.cp(o,a,{recursive:r?.recursive??!1,filter:async l=>{try{if(D.lstatSync(l).isSymbolicLink()){let u=await D.promises.realpath(l).catch(()=>null);return u===null?!1:De(u,this.canonicalRoot)}return!0}catch(c){return c.code==="ENOENT"}}})}catch(l){let c=l;if(c.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, cp '${t}'`);if(c.code==="EISDIR")throw new Error(`EISDIR: is a directory, cp '${t}'`);this.sanitizeError(l,t,"cp")}}async mv(t,s){z(t,"mv"),z(s,"mv");let r=this.toRealPath(t),n=this.toRealPath(s),i=this.validateParent(r,t),o=this.validateParent(n,s);try{if((await D.promises.lstat(i)).isSymbolicLink()){let c=await D.promises.readlink(i),u=U.resolve(U.dirname(o),c),f=await D.promises.realpath(u).catch(()=>u);if(!De(f,this.canonicalRoot))throw new Error(`EACCES: permission denied, mv '${t}' -> '${s}' would create symlink escaping sandbox`)}}catch(l){let c=l;if(c.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, mv '${t}'`);if(c.message?.includes("EACCES")||c.message?.includes("escaping sandbox"))throw l}let a=U.dirname(o);try{await D.promises.mkdir(a,{recursive:!0})}catch(l){this.sanitizeError(l,s,"mv")}try{await D.promises.rename(i,o)}catch(l){let c=l;if(c.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, mv '${t}'`);if(c.code==="EXDEV"){await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0});return}this.sanitizeError(l,t,"mv")}try{if(D.lstatSync(o).isDirectory()&&this.findEscapingSymlinks(o).length>0)throw await D.promises.rename(o,i),new Error(`EACCES: permission denied, mv '${t}' -> '${s}' would create symlinks escaping sandbox`)}catch(l){if(l.message?.includes("EACCES")||l.message?.includes("escaping sandbox"))throw l}}resolvePath(t,s){if(s.startsWith("/"))return W(s);let r=t==="/"?`/${s}`:`${t}/${s}`;return W(r)}getAllPaths(){let t=[];return this.scanDir("/",t),t}sanitizeError(t,s,r){let n=t;if(n.path===void 0&&(n.message?.includes("EACCES")||n.message?.includes("escaping sandbox")||n.message?.includes("EFBIG")))throw t;let i=n.code||"EIO";throw new Error(`${i}: ${r} '${s}'`)}findEscapingSymlinks(t){let s=[];try{let r=D.readdirSync(t);for(let n of r){let i=U.join(t,n);try{let o=D.lstatSync(i);if(o.isSymbolicLink()){let a=D.readlinkSync(i),l=U.resolve(t,a),c;try{c=D.realpathSync(l)}catch{c=l}De(c,this.canonicalRoot)||s.push(i)}else o.isDirectory()&&s.push(...this.findEscapingSymlinks(i))}catch{}}}catch{}return s}scanDir(t,s){let r=this.toRealPath(t),n;try{n=this.resolveAndValidate(r,t)}catch{return}try{let i=D.readdirSync(n);for(let o of i){let a=t==="/"?`/${o}`:`${t}/${o}`;s.push(a);let l=U.join(n,o);D.lstatSync(l).isDirectory()&&this.scanDir(a,s)}}catch{}}async chmod(t,s){z(t,"chmod");let r=this.toRealPath(t),n=this.resolveAndValidate(r,t);try{let i=this.allowSymlinks?D.constants.O_RDONLY:D.constants.O_RDONLY|D.constants.O_NOFOLLOW,o=await D.promises.open(n,i);try{await o.chmod(s)}finally{await o.close()}}catch(i){let o=i;if(o.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);if(o.code==="ELOOP")throw new Error(`EACCES: permission denied, '${t}' is a symlink`);this.sanitizeError(i,t,"chmod")}}async symlink(t,s){if(!this.allowSymlinks)throw new Error(`EPERM: operation not permitted, symlink '${s}'`);z(s,"symlink");let r=this.toRealPath(s),n=this.validateParent(r,s),i=W(s),o=W(U.dirname(i)),a=t.startsWith("/")?W(t):W(o==="/"?`/${t}`:`${o}/${t}`),l=U.join(this.canonicalRoot,a),c=U.dirname(n),u=t.startsWith("/")?l:U.relative(c,l)||".";try{await D.promises.symlink(u,n)}catch(f){if(f.code==="EEXIST")throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.sanitizeError(f,s,"symlink")}}async link(t,s){z(t,"link"),z(s,"link");let r=this.toRealPath(t),n=this.toRealPath(s),i=this.resolveAndValidate(r,t),o=this.resolveAndValidate(n,s);try{await D.promises.link(i,o)}catch(a){let l=a;if(l.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, link '${t}'`);if(l.code==="EEXIST")throw new Error(`EEXIST: file already exists, link '${s}'`);if(l.code==="EPERM")throw new Error(`EPERM: operation not permitted, link '${t}'`);this.sanitizeError(a,t,"link")}}async readlink(t){z(t,"readlink");let s=this.toRealPath(t),r=this.validateParent(s,t);try{let n=await D.promises.readlink(r),i=W(t),o=U.dirname(i),a=U.isAbsolute(n)?n:U.resolve(U.dirname(r),n),l=await D.promises.realpath(a).catch(()=>a);if(De(l,this.canonicalRoot)){let c=l.slice(this.canonicalRoot.length)||"/";return o==="/"?c.startsWith("/")?c.slice(1)||".":c:U.relative(o,c)}return U.basename(n)}catch(n){let i=n;if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(i.code==="EINVAL")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);this.sanitizeError(n,t,"readlink")}}async realpath(t){z(t,"realpath");let s=this.toRealPath(t);try{this.resolveAndValidate(s,t)}catch{throw new Error(`ENOENT: no such file or directory, realpath '${t}'`)}let r;try{r=await D.promises.realpath(s)}catch(n){let i=n;if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);if(i.code==="ELOOP")throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);this.sanitizeError(n,t,"realpath")}if(De(r,this.canonicalRoot))return r.slice(this.canonicalRoot.length)||"/";throw new Error(`ENOENT: no such file or directory, realpath '${t}'`)}async utimes(t,s,r){z(t,"utimes");let n=this.toRealPath(t),i=this.resolveAndValidate(n,t);try{let o=this.allowSymlinks?D.constants.O_RDONLY:D.constants.O_RDONLY|D.constants.O_NOFOLLOW,a=await D.promises.open(i,o);try{await a.utimes(s,r)}finally{await a.close()}}catch(o){let a=o;if(a.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);if(a.code==="ELOOP")throw new Error(`EACCES: permission denied, '${t}' is a symlink`);this.sanitizeError(o,t,"utimes")}}};var dt=class{cmdId;cwd;startedAt;exitCode;bashEnv;cmdLine;env;explicitCwd;signal;timeoutMs;abortController=new AbortController;timeoutId;externalAbortListener;resultPromise;constructor(t,s,r,n,i=!1,o,a){this.cmdId=crypto.randomUUID(),this.cwd=r,this.startedAt=new Date,this.bashEnv=t,this.cmdLine=s,this.env=n,this.explicitCwd=i,this.signal=o,this.timeoutMs=a,this.setupCancellation(),this.resultPromise=this.execute()}setupCancellation(){if(this.signal&&(this.signal.aborted?this.abortController.abort(this.signal.reason):(this.externalAbortListener=()=>{this.abortController.abort(this.signal?.reason)},this.signal.addEventListener("abort",this.externalAbortListener,{once:!0}))),this.timeoutMs!==void 0){let t=Math.max(0,this.timeoutMs);this.timeoutId=Ct(()=>{this.abortController.abort(new Error(`sandbox command timeout after ${t}ms`))},t)}}cleanupCancellation(){this.timeoutId!==void 0&&(_t(this.timeoutId),this.timeoutId=void 0),this.signal&&this.externalAbortListener&&(this.signal.removeEventListener("abort",this.externalAbortListener),this.externalAbortListener=void 0)}async execute(){let t={cwd:this.explicitCwd?this.cwd:void 0,env:this.env,signal:this.abortController.signal};try{let s=await this.bashEnv.exec(this.cmdLine,t);return this.exitCode=s.exitCode,s}finally{this.cleanupCancellation()}}async*logs(){let t=await this.resultPromise;t.stdout&&(yield{type:"stdout",data:t.stdout,timestamp:new Date}),t.stderr&&(yield{type:"stderr",data:t.stderr,timestamp:new Date})}async wait(){return await this.resultPromise,this}async output(){let t=await this.resultPromise;return t.stdout+t.stderr}async stdout(){return(await this.resultPromise).stdout}async stderr(){return(await this.resultPromise).stderr}async kill(){this.abortController.abort(new Error("command killed"))}};var ps=class e{bashEnv;timeoutMs;constructor(t,s){this.bashEnv=t,this.timeoutMs=s}static async create(t){let s=t?.fs;if(t?.overlayRoot){if(t?.fs)throw new Error("Cannot specify both 'fs' and 'overlayRoot' options");s=new ft({root:t.overlayRoot})}let r=new kt({env:t?.env,cwd:t?.cwd,fs:s,maxCallDepth:t?.maxCallDepth,maxCommandCount:t?.maxCommandCount,maxLoopIterations:t?.maxLoopIterations,network:t?.network,defenseInDepth:t?.defenseInDepth});return new e(r,t?.timeoutMs)}async runCommand(t,s,r){let n,i,o,a,l=!1,c,u;if(typeof t=="object"){let h=t,m=[h.cmd,...h.args??[]];n=gs(m),i=h.cwd,o=h.env,a=h.signal,l=h.detached??!1,c=h.stdout,u=h.stderr}else if(Array.isArray(s)){let h=r;n=gs([t,...s]),a=h?.signal}else{n=t;let h=s;i=h?.cwd,o=h?.env}let f=i??this.bashEnv.getCwd(),d=i!==void 0,p=new dt(this.bashEnv,n,f,o,d,a,this.timeoutMs);if(l)return p;let y=await p.wait();if(c){let h=await p.stdout();h&&c.write(h)}if(u){let h=await p.stderr();h&&u.write(h)}return y}async writeFiles(t){let s=this.bashEnv.getCwd();for(let[r,n]of Object.entries(t)){let i;typeof n=="string"?i=n:n.encoding==="base64"?i=Buffer.from(n.content,"base64").toString("utf-8"):i=n.content;let o=this.bashEnv.fs.resolvePath(s,r),a=o.substring(0,o.lastIndexOf("/"))||"/";a!=="/"&&await this.bashEnv.fs.mkdir(a,{recursive:!0}),await this.bashEnv.writeFile(o,i)}}async readFile(t,s){let r=await this.bashEnv.readFile(t);return s==="base64"?Buffer.from(r).toString("base64"):r}async mkDir(t,s){let r=this.bashEnv.fs.resolvePath(this.bashEnv.getCwd(),t);await this.bashEnv.fs.mkdir(r,{recursive:s?.recursive??!1})}async stop(){}async extendTimeout(t){}get domain(){}get bashEnvInstance(){return this.bashEnv}};var ms=class{violations=[];violationsByType=new Map;options;constructor(t={}){this.options={maxViolationsPerType:t.maxViolationsPerType??100,includeStackTraces:t.includeStackTraces??!0,onViolation:t.onViolation??(()=>{}),logToConsole:t.logToConsole??!1}}record(t){let s=this.options.includeStackTraces?t:{...t,stack:void 0};this.violations.unshift(s);let r=this.violationsByType.get(t.type);r||(r=[],this.violationsByType.set(t.type,r)),r.length<this.options.maxViolationsPerType&&r.push(s),this.options.logToConsole&&console.warn(`[SecurityViolation] ${t.type}: ${t.message}`,t.path),this.options.onViolation(s)}getViolations(){return[...this.violations]}getViolationsByType(t){return[...this.violationsByType.get(t)??[]]}getSummary(){let t=[];for(let[s,r]of this.violationsByType){if(r.length===0)continue;let n=new Set,i=Number.POSITIVE_INFINITY,o=0;for(let a of r)n.add(a.path),i=Math.min(i,a.timestamp),o=Math.max(o,a.timestamp);t.push({type:s,count:r.length,firstSeen:i,lastSeen:o,paths:Array.from(n)})}return t.sort((s,r)=>r.count-s.count),t}getTotalCount(){return this.violations.length}hasViolations(){return this.violations.length>0}clear(){this.violations=[],this.violationsByType.clear()}createCallback(){return t=>this.record(t)}};function Oi(){return e=>{console.warn("[DefenseInDepth] Security violation detected:",`
|
|
706
706
|
Type: ${e.type}`,`
|
|
707
707
|
Path: ${e.path}`,`
|
|
708
708
|
Message: ${e.message}`,e.executionId?`
|
|
709
|
-
ExecutionId: ${e.executionId}`:"")}}var
|
|
709
|
+
ExecutionId: ${e.executionId}`:"")}}var Sr=class{plugins=[];use(t){return this.plugins.push(t),this}transform(t){let s=fe(t),r=Object.create(null);for(let n of this.plugins){let i=n.transform({ast:s,metadata:r});s=i.ast,i.metadata&&(r=yt(r,i.metadata))}return{script:At(s),ast:s,metadata:r}}};var Pr=class{name="command-collector";transform(t){let s=new Set;return this.walkScript(t.ast,s),{ast:t.ast,metadata:{commands:[...s].sort()}}}walkScript(t,s){for(let r of t.statements)this.walkStatement(r,s)}walkStatement(t,s){for(let r of t.pipelines)this.walkPipeline(r,s)}walkPipeline(t,s){for(let r of t.commands)this.walkCommand(r,s)}walkCommand(t,s){switch(t.type){case"SimpleCommand":if(t.name){let r=this.extractName(t.name);r&&s.add(r)}t.name&&this.walkWordParts(t.name.parts,s);for(let r of t.args)this.walkWordParts(r.parts,s);for(let r of t.assignments)if(r.value&&this.walkWordParts(r.value.parts,s),r.array)for(let n of r.array)this.walkWordParts(n.parts,s);break;case"If":for(let r of t.clauses){for(let n of r.condition)this.walkStatement(n,s);for(let n of r.body)this.walkStatement(n,s)}if(t.elseBody)for(let r of t.elseBody)this.walkStatement(r,s);break;case"For":if(t.words)for(let r of t.words)this.walkWordParts(r.parts,s);for(let r of t.body)this.walkStatement(r,s);break;case"CStyleFor":for(let r of t.body)this.walkStatement(r,s);break;case"While":case"Until":for(let r of t.condition)this.walkStatement(r,s);for(let r of t.body)this.walkStatement(r,s);break;case"Case":this.walkWordParts(t.word.parts,s);for(let r of t.items)for(let n of r.body)this.walkStatement(n,s);break;case"Subshell":case"Group":for(let r of t.body)this.walkStatement(r,s);break;case"ArithmeticCommand":case"ConditionalCommand":break;case"FunctionDef":this.walkCommand(t.body,s);break}}walkWordParts(t,s){for(let r of t)switch(r.type){case"CommandSubstitution":this.walkScript(r.body,s);break;case"ProcessSubstitution":this.walkScript(r.body,s);break;case"DoubleQuoted":this.walkWordParts(r.parts,s);break;case"ParameterExpansion":r.operation&&this.walkParameterOp(r.operation,s);break}}walkParameterOp(t,s){switch(t.type){case"DefaultValue":case"AssignDefault":case"UseAlternative":this.walkWordParts(t.word.parts,s);break;case"ErrorIfUnset":t.word&&this.walkWordParts(t.word.parts,s);break;case"PatternRemoval":this.walkWordParts(t.pattern.parts,s);break;case"PatternReplacement":this.walkWordParts(t.pattern.parts,s),t.replacement&&this.walkWordParts(t.replacement.parts,s);break;case"CaseModification":t.pattern&&this.walkWordParts(t.pattern.parts,s);break;case"Indirection":t.innerOp&&this.walkParameterOp(t.innerOp,s);break}}extractName(t){return t.parts.length===1&&t.parts[0].type==="Literal"?t.parts[0].value:null}};var Ar=class{name="tee";options;counter=0;constructor(t){this.options=t}transform(t){let s=[],r=this.options.timestamp??new Date;return{ast:this.transformScript(t.ast,s,r),metadata:{teeFiles:s}}}formatTimestamp(t){return t.toISOString().replace(/:/g,"-")}generateStdoutPath(t,s,r){let n=this.formatTimestamp(r),i=String(t).padStart(3,"0");return`${this.options.outputDir}/${n}-${i}-${s}.stdout.txt`}transformScript(t,s,r){return{...t,statements:t.statements.map(n=>this.transformStatement(n,s,r))}}transformStatement(t,s,r){let n=[],i=[];for(let o=0;o<t.pipelines.length;o++){let a=t.pipelines[o];o>0&&i.push(t.operators[o-1]);let l=this.transformPipeline(a,s,r);if(n.push(l.pipeline),l.origCmdNewIndices!==null){let c=l.origCmdNewIndices;i.push(";"),n.push(this.makePipestatusSave(c)),i.push(";"),n.push(this.makePipestatusRestore(c.length,l.negated))}}return{...t,pipelines:n,operators:i}}transformPipeline(t,s,r){if(t.commands.length<=1)return{pipeline:t,origCmdNewIndices:null,negated:!1};let n=[],i=[],o=[],a=!1;for(let l=0;l<t.commands.length;l++){let c=t.commands[l],u=l===t.commands.length-1;if(c.type!=="SimpleCommand"||!c.name||!this.shouldTarget(c)){o.push(n.length),n.push(c),u||i.push(t.pipeStderr?.[l]??!1);continue}let f=this.getCommandName(c.name)??"unknown",d=this.counter++,p=this.generateStdoutPath(d,f,r),y=this.makeTeeCommand(p),h=this.serializeCommand(c);s.push({commandIndex:d,commandName:f,command:h,stdoutFile:p}),o.push(n.length),n.push(c),i.push(t.pipeStderr?.[l]??!1),n.push(y),u||i.push(!1),a=!0}return a?{pipeline:{...t,negated:!1,commands:n,pipeStderr:i.length>0?i:void 0},origCmdNewIndices:o,negated:t.negated}:{pipeline:t,origCmdNewIndices:null,negated:!1}}makePipestatusSave(t){return{type:"Pipeline",commands:[{type:"SimpleCommand",assignments:t.map((s,r)=>({type:"Assignment",name:`__tps${r}`,value:{type:"Word",parts:[{type:"ParameterExpansion",parameter:`PIPESTATUS[${s}]`,operation:null}]},append:!1,array:null})),name:null,args:[],redirections:[]}],negated:!1}}makePipestatusRestore(t,s){let r=[];for(let n=0;n<t;n++)r.push({type:"Subshell",body:[{type:"Statement",pipelines:[{type:"Pipeline",commands:[{type:"SimpleCommand",assignments:[],name:{type:"Word",parts:[{type:"Literal",value:"exit"}]},args:[{type:"Word",parts:[{type:"ParameterExpansion",parameter:`__tps${n}`,operation:null}]}],redirections:[]}],negated:!1}],operators:[],background:!1}],redirections:[]});return{type:"Pipeline",commands:r,negated:s}}shouldTarget(t){if(!this.options.targetCommandPattern)return!0;let s=this.getCommandName(t.name);return s!==null&&this.options.targetCommandPattern.test(s)}getCommandName(t){return t&&t.parts.length===1&&t.parts[0].type==="Literal"?t.parts[0].value:null}serializeCommand(t){let s=[];t.name&&s.push(oe(t.name));for(let r of t.args)s.push(oe(r));return s.join(" ")}makeTeeCommand(t){return{type:"SimpleCommand",assignments:[],name:{type:"Word",parts:[{type:"Literal",value:"tee"}]},args:[{type:"Word",parts:[{type:"Literal",value:t}]}],redirections:[]}}};export{kt as Bash,Sr as BashTransformPipeline,Pr as CommandCollectorPlugin,pe as DefenseInDepthBox,Re as InMemoryFs,ds as MountableFs,He as NetworkAccessDeniedError,ft as OverlayFs,hs as ReadWriteFs,ut as RedirectNotAllowedError,ps as Sandbox,dt as SandboxCommand,Fe as SecurityViolationError,ms as SecurityViolationLogger,Ar as TeePlugin,ct as TooManyRedirectsError,Oi as createConsoleViolationCallback,Fi as defineCommand,Ii as getCommandNames,Ri as getNetworkCommandNames,Li as getPythonCommandNames,fe as parse,At as serialize};
|