just-bash 2.12.7 → 2.12.8
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-EB5SCHVW.js → awk2-J2PNSA7C.js} +1 -1
- package/dist/bin/{shell/chunks/chunk-BBRVF6XE.js → chunks/chunk-2V53PP6G.js} +1 -1
- package/dist/bin/chunks/{chunk-ROMKUVHI.js → chunk-AXWFPG37.js} +1 -1
- package/dist/bin/chunks/{chunk-VCKKRS7V.js → chunk-CZFRRDQC.js} +1 -1
- package/dist/bin/{shell/chunks/chunk-5MUD3WB2.js → chunks/chunk-MO4RPBN2.js} +1 -1
- package/dist/bin/{shell/chunks/chunk-JX6YLHDX.js → chunks/chunk-OOJCYVYF.js} +1 -1
- package/dist/bin/{shell/chunks/chunk-OLN6BSO3.js → chunks/chunk-REGSV3X5.js} +1 -1
- package/dist/bin/chunks/{chunk-ZNPXCE5B.js → chunk-UG4GMDQL.js} +1 -1
- package/dist/bin/{shell/chunks/chunk-DHFZMFUW.js → chunks/chunk-UPUMZYZE.js} +1 -1
- package/dist/bin/chunks/{chunk-IRCLOW32.js → chunk-VVFGRIJZ.js} +1 -1
- package/dist/bin/chunks/{chunk-QTII62YM.js → chunk-WS6P4H4S.js} +1 -1
- package/dist/bin/chunks/{chunk-PIBXJ3VX.js → chunk-YAEF6X2N.js} +1 -1
- package/dist/bin/chunks/{chunk-NTKUVXEL.js → chunk-YU6OGPZR.js} +2 -2
- package/dist/bin/{shell/chunks/chunk-PLKGKTIS.js → chunks/chunk-ZYQQ6B7B.js} +1 -1
- package/dist/bin/chunks/{flag-coverage-7GOZYXJT.js → flag-coverage-CFWN3JJN.js} +1 -1
- package/dist/bin/{shell/chunks/jq-P457LMHU.js → chunks/jq-JFXEKNLN.js} +1 -1
- package/dist/bin/chunks/{python3-45TMCI4M.js → python3-KI2FQWSN.js} +1 -1
- package/dist/bin/{shell/chunks/sed-UV2LTNVK.js → chunks/sed-3C6IBX5L.js} +1 -1
- package/dist/bin/chunks/sleep-ND6FZRZ4.js +2 -0
- package/dist/bin/{shell/chunks/sqlite3-B3P3OMPI.js → chunks/sqlite3-TZEE4O7U.js} +1 -1
- package/dist/bin/chunks/tar-TOWX2TDU.js +2 -0
- package/dist/bin/chunks/timeout-JJWIFL7W.js +2 -0
- package/dist/bin/chunks/worker.js +81 -0
- package/dist/bin/chunks/{xan-FZB7FHX3.js → xan-M6MLWZCU.js} +1 -1
- package/dist/bin/chunks/yq-YWUQUXJJ.js +2 -0
- package/dist/bin/just-bash.js +166 -166
- package/dist/bin/shell/chunks/{awk2-EB5SCHVW.js → awk2-J2PNSA7C.js} +1 -1
- package/dist/bin/{chunks/chunk-BBRVF6XE.js → shell/chunks/chunk-2V53PP6G.js} +1 -1
- package/dist/bin/shell/chunks/{chunk-ROMKUVHI.js → chunk-AXWFPG37.js} +1 -1
- package/dist/bin/shell/chunks/{chunk-VCKKRS7V.js → chunk-CZFRRDQC.js} +1 -1
- package/dist/bin/{chunks/chunk-5MUD3WB2.js → shell/chunks/chunk-MO4RPBN2.js} +1 -1
- package/dist/bin/{chunks/chunk-JX6YLHDX.js → shell/chunks/chunk-OOJCYVYF.js} +1 -1
- package/dist/bin/{chunks/chunk-OLN6BSO3.js → shell/chunks/chunk-REGSV3X5.js} +1 -1
- package/dist/bin/shell/chunks/{chunk-ZNPXCE5B.js → chunk-UG4GMDQL.js} +1 -1
- package/dist/bin/{chunks/chunk-DHFZMFUW.js → shell/chunks/chunk-UPUMZYZE.js} +1 -1
- package/dist/bin/shell/chunks/{chunk-IRCLOW32.js → chunk-VVFGRIJZ.js} +1 -1
- package/dist/bin/shell/chunks/{chunk-QTII62YM.js → chunk-WS6P4H4S.js} +1 -1
- package/dist/bin/shell/chunks/{chunk-PIBXJ3VX.js → chunk-YAEF6X2N.js} +1 -1
- package/dist/bin/shell/chunks/{chunk-NTKUVXEL.js → chunk-YU6OGPZR.js} +2 -2
- package/dist/bin/{chunks/chunk-PLKGKTIS.js → shell/chunks/chunk-ZYQQ6B7B.js} +1 -1
- package/dist/bin/shell/chunks/{flag-coverage-7GOZYXJT.js → flag-coverage-CFWN3JJN.js} +1 -1
- package/dist/bin/{chunks/jq-P457LMHU.js → shell/chunks/jq-JFXEKNLN.js} +1 -1
- package/dist/bin/shell/chunks/{python3-IV3DBMHM.js → python3-E5X6WBBU.js} +1 -1
- package/dist/bin/{chunks/sed-UV2LTNVK.js → shell/chunks/sed-3C6IBX5L.js} +1 -1
- package/dist/bin/shell/chunks/sleep-ND6FZRZ4.js +2 -0
- package/dist/bin/{chunks/sqlite3-B3P3OMPI.js → shell/chunks/sqlite3-TZEE4O7U.js} +1 -1
- package/dist/bin/shell/chunks/tar-TOWX2TDU.js +2 -0
- package/dist/bin/shell/chunks/timeout-JJWIFL7W.js +2 -0
- package/dist/bin/shell/chunks/{xan-FZB7FHX3.js → xan-M6MLWZCU.js} +1 -1
- package/dist/bin/shell/chunks/yq-YWUQUXJJ.js +2 -0
- package/dist/bin/shell/shell.js +166 -166
- package/dist/bundle/browser.js +425 -425
- package/dist/bundle/chunks/{awk2-VPBKDCSO.js → awk2-FUVZGMX2.js} +1 -1
- package/dist/bundle/chunks/{chunk-X36DXRVC.js → chunk-24IMIIXA.js} +1 -1
- package/dist/bundle/chunks/{chunk-72EQZSVH.js → chunk-5QMZ5MUS.js} +2 -2
- package/dist/bundle/chunks/{chunk-7YDOWJ75.js → chunk-A5O5YHGN.js} +1 -1
- package/dist/bundle/chunks/{chunk-U5FWK6IA.js → chunk-AKVMAONP.js} +1 -1
- package/dist/bundle/chunks/{chunk-KZ7BI7TV.js → chunk-D4QDMGEB.js} +1 -1
- package/dist/bundle/chunks/{chunk-X3CVFNQZ.js → chunk-GOV5EKKI.js} +1 -1
- package/dist/bundle/chunks/{chunk-AUD37QB3.js → chunk-IUWCBQII.js} +1 -1
- package/dist/bundle/chunks/{chunk-VSWTMNI3.js → chunk-JDMQDJYE.js} +1 -1
- package/dist/bundle/chunks/{chunk-C7ZTXK5C.js → chunk-JKLUDNMU.js} +1 -1
- package/dist/bundle/chunks/{chunk-VBF2GWEM.js → chunk-V3IEYMEA.js} +1 -1
- package/dist/bundle/chunks/{chunk-6HBBXB3L.js → chunk-WECLUBEQ.js} +1 -1
- package/dist/bundle/chunks/{chunk-4YPFHVJJ.js → chunk-ZLJ5TCLC.js} +1 -1
- package/dist/bundle/chunks/{chunk-BED5HSP2.js → chunk-ZXL7TQLN.js} +1 -1
- package/dist/bundle/chunks/{flag-coverage-NT32EG6Q.js → flag-coverage-VML3BMJT.js} +1 -1
- package/dist/bundle/chunks/{jq-NLRWI2Q6.js → jq-SSCW4AAA.js} +1 -1
- package/dist/bundle/chunks/{python3-G2ZUJAQL.js → python3-2OHR6PZU.js} +1 -1
- package/dist/bundle/chunks/{sed-2BILOGNL.js → sed-DISNI47D.js} +1 -1
- package/dist/bundle/chunks/sleep-VZFPZFWA.js +1 -0
- package/dist/bundle/chunks/{sqlite3-VEDNWJL6.js → sqlite3-7F22DOIP.js} +1 -1
- package/dist/bundle/chunks/tar-232RCEFK.js +1 -0
- package/dist/bundle/chunks/timeout-QCU4INQT.js +1 -0
- package/dist/bundle/chunks/worker.js +81 -0
- package/dist/bundle/chunks/{xan-KSDYKKEK.js → xan-K7XYDHFV.js} +1 -1
- package/dist/bundle/chunks/yq-WTK3HUOR.js +1 -0
- package/dist/bundle/index.cjs +604 -604
- package/dist/bundle/index.js +228 -228
- package/dist/network/allow-list/shared.d.ts +8 -0
- package/dist/network/types.d.ts +15 -1
- package/package.json +1 -1
- package/dist/bin/chunks/sleep-3WHM7JMW.js +0 -2
- package/dist/bin/chunks/tar-SO3XDDIW.js +0 -2
- package/dist/bin/chunks/timeout-BYB3L2JA.js +0 -2
- package/dist/bin/chunks/yq-H7D2U3HS.js +0 -2
- package/dist/bin/shell/chunks/sleep-3WHM7JMW.js +0 -2
- package/dist/bin/shell/chunks/tar-SO3XDDIW.js +0 -2
- package/dist/bin/shell/chunks/timeout-BYB3L2JA.js +0 -2
- package/dist/bin/shell/chunks/yq-H7D2U3HS.js +0 -2
- package/dist/bundle/chunks/sleep-IUBP5GMH.js +0 -1
- package/dist/bundle/chunks/tar-LKO7DKAK.js +0 -1
- package/dist/bundle/chunks/timeout-TL4Q5YKZ.js +0 -1
- package/dist/bundle/chunks/yq-HIQ4WMDY.js +0 -1
package/dist/bin/just-bash.js
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{B as Rr,C as Lr,D as le,E as Ve,F as ee,G as $e,H as Ot,I as Fr,J as I,K as Mr,L as Wr,M as Ae,N as ys,O as Dt,P as j,a as Pr,b as us,c as Nr,d as Nt,e as Q,f as V,g as ve,h as te,i as Se,j as xe,k as fs,l as kt,m as kr,n as ds,o as Or,p as me,q as ke,r as Dr,s as Tr,t as hs,u as ps,v as Re,w as Ir,x as xr,y as be,z as ms}from"./chunks/chunk-O5B6WWQQ.js";import{a as M,b as W,c as Ke,d as Ct,e as Pt,f as Xe,g as cs,h as Er,i as Sr,j as Ar,k as _r,l as Cr}from"./chunks/chunk-MY5PY2PL.js";import{c as ls}from"./chunks/chunk-QZNF3Y3J.js";import{a as gr,b as wr}from"./chunks/chunk-JX6YLHDX.js";import{a as Ie,b as pe,c as os}from"./chunks/chunk-4PRVMER6.js";import{a as ut,b as $r}from"./chunks/chunk-5MUD3WB2.js";import{a as Ge,b as ge}from"./chunks/chunk-NTKUVXEL.js";import{a as ct}from"./chunks/chunk-SE4C7FJY.js";import{a as ue,b as fe,c as oe,d as de,e as vr,f as B,g as ze,h as Et,i as St,j as br,k as Y,l as At,m as Te,n as _t,o as we}from"./chunks/chunk-6KZRLMG3.js";import"./chunks/chunk-OBH7XN5N.js";import{a as he}from"./chunks/chunk-SYG3IW7P.js";import{a as Ne}from"./chunks/chunk-4VDEBYW7.js";import"./chunks/chunk-KGOUQS5A.js";import{resolve as Ci}from"node:path";var Ye=[{name:"echo",load:async()=>(await import("./chunks/echo-2MUAOGUE.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-XZIJZXKP.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-P3QVL4IO.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-G2PXHSNX.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-CH7JGW4N.js")).mkdirCommand},{name:"rmdir",load:async()=>(await import("./chunks/rmdir-5KLM4EA6.js")).rmdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-DWKSZGOQ.js")).touchCommand},{name:"rm",load:async()=>(await import("./chunks/rm-GWYJO4W7.js")).rmCommand},{name:"cp",load:async()=>(await import("./chunks/cp-XH2ZB7WT.js")).cpCommand},{name:"mv",load:async()=>(await import("./chunks/mv-OY7X62QC.js")).mvCommand},{name:"ln",load:async()=>(await import("./chunks/ln-VAOSD4HK.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-N5CQATDW.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-6VBAPL3Y.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-BD5VFOC5.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-YMNRW3F3.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-V537TDFR.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-ZIV3TFVG.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-XS2LXYS2.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-OZJTRD4D.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-OZJTRD4D.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-OZJTRD4D.js")).egrepCommand},{name:"rg",load:async()=>(await import("./chunks/rg-34GE6REQ.js")).rgCommand},{name:"sed",load:async()=>(await import("./chunks/sed-UV2LTNVK.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-EB5SCHVW.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-7GENYU2I.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-TMSAIZM3.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-R3F3Z5DX.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-5EY2XPXX.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-3UVLMQ2K.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-LZF57GYP.js")).trCommand},{name:"rev",load:async()=>(await import("./chunks/rev-UHEPS2UL.js")).rev},{name:"nl",load:async()=>(await import("./chunks/nl-XH3L75DR.js")).nl},{name:"fold",load:async()=>(await import("./chunks/fold-XSVNTAWH.js")).fold},{name:"expand",load:async()=>(await import("./chunks/expand-26XPP5KB.js")).expand},{name:"unexpand",load:async()=>(await import("./chunks/unexpand-OYZ7KOYR.js")).unexpand},{name:"strings",load:async()=>(await import("./chunks/strings-XXKZCWY5.js")).strings},{name:"split",load:async()=>(await import("./chunks/split-YWV64TJH.js")).split},{name:"column",load:async()=>(await import("./chunks/column-XGV32UPN.js")).column},{name:"join",load:async()=>(await import("./chunks/join-Y4Q5WVVE.js")).join},{name:"tee",load:async()=>(await import("./chunks/tee-HK2SYCAR.js")).teeCommand},{name:"find",load:async()=>(await import("./chunks/find-MTLF23HX.js")).findCommand},{name:"basename",load:async()=>(await import("./chunks/basename-KBUKWB2E.js")).basenameCommand},{name:"dirname",load:async()=>(await import("./chunks/dirname-5FAOMLBL.js")).dirnameCommand},{name:"tree",load:async()=>(await import("./chunks/tree-HEKABARE.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-LDAPXSGF.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-HOVBNLUR.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-HOVBNLUR.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-3GODYSFD.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-3GODYSFD.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-UUKG55YW.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-GBL6PZ2K.js")).xargsCommand},{name:"true",load:async()=>(await import("./chunks/true-DP5UZP52.js")).trueCommand},{name:"false",load:async()=>(await import("./chunks/true-DP5UZP52.js")).falseCommand},{name:"clear",load:async()=>(await import("./chunks/clear-KRGKPFOI.js")).clearCommand},{name:"bash",load:async()=>(await import("./chunks/bash-6ZHZ6BX7.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-6ZHZ6BX7.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-P457LMHU.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-43M2R3GA.js")).base64Command},{name:"diff",load:async()=>(await import("./chunks/diff-LE7GMFZD.js")).diffCommand},{name:"date",load:async()=>(await import("./chunks/date-WUPBL2TL.js")).dateCommand},{name:"sleep",load:async()=>(await import("./chunks/sleep-3WHM7JMW.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-BYB3L2JA.js")).timeoutCommand},{name:"time",load:async()=>(await import("./chunks/time-GZSHCM77.js")).timeCommand},{name:"seq",load:async()=>(await import("./chunks/seq-V7KBLSQ7.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-VEFRBJT4.js")).exprCommand},{name:"md5sum",load:async()=>(await import("./chunks/md5sum-NCLXV2S3.js")).md5sumCommand},{name:"sha1sum",load:async()=>(await import("./chunks/sha1sum-BHNJ5ALF.js")).sha1sumCommand},{name:"sha256sum",load:async()=>(await import("./chunks/sha256sum-HJJ3NJ5L.js")).sha256sumCommand},{name:"file",load:async()=>(await import("./chunks/file-D5YKS5NV.js")).fileCommand},{name:"html-to-markdown",load:async()=>(await import("./chunks/html-to-markdown-WVZA3MCP.js")).htmlToMarkdownCommand},{name:"help",load:async()=>(await import("./chunks/help-4H52JYYC.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-5PO4LAOG.js")).whichCommand},{name:"tac",load:async()=>(await import("./chunks/tac-T42SKDDI.js")).tac},{name:"hostname",load:async()=>(await import("./chunks/hostname-WY6RKE32.js")).hostname},{name:"whoami",load:async()=>(await import("./chunks/whoami-E7PN2UWC.js")).whoami},{name:"od",load:async()=>(await import("./chunks/od-52FBC34W.js")).od},{name:"gzip",load:async()=>(await import("./chunks/gzip-LHOO65AN.js")).gzipCommand},{name:"gunzip",load:async()=>(await import("./chunks/gzip-LHOO65AN.js")).gunzipCommand},{name:"zcat",load:async()=>(await import("./chunks/gzip-LHOO65AN.js")).zcatCommand}];(typeof __BROWSER__>"u"||!__BROWSER__)&&(Ye.push({name:"tar",load:async()=>(await import("./chunks/tar-SO3XDDIW.js")).tarCommand}),Ye.push({name:"yq",load:async()=>(await import("./chunks/yq-H7D2U3HS.js")).yqCommand}),Ye.push({name:"xan",load:async()=>(await import("./chunks/xan-FZB7FHX3.js")).xanCommand}),Ye.push({name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-B3P3OMPI.js")).sqlite3Command}));var gs=[];(typeof __BROWSER__>"u"||!__BROWSER__)&&(gs.push({name:"python3",load:async()=>(await import("./chunks/python3-45TMCI4M.js")).python3Command}),gs.push({name:"python",load:async()=>(await import("./chunks/python3-45TMCI4M.js")).pythonCommand}));var Di=[{name:"curl",load:async()=>(await import("./chunks/curl-3GMIPMCI.js")).curlCommand}],zr=new Map;function ws(e){return{name:e.name,async execute(t,s){let r=zr.get(e.name);if(r||(r=await ge.runTrustedAsync(()=>e.load()),zr.set(e.name,r)),s.coverage&&(typeof __BROWSER__>"u"||!__BROWSER__)){let{emitFlagCoverage:n}=await import("./chunks/flag-coverage-7GOZYXJT.js");n(s.coverage,e.name,t)}return r.execute(t,s)}}}function Vr(e){return(e?Ye.filter(s=>e.includes(s.name)):Ye).map(ws)}function Br(){return Di.map(ws)}function jr(){return gs.map(ws)}function Hr(e){return"load"in e&&typeof e.load=="function"}function Ur(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 Qe(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 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 Ii.decode(e)}function Le(e){if(e!=null)return typeof e=="string"?e:e.encoding??void 0}var Je=new TextEncoder;function xi(e){return typeof e=="object"&&e!==null&&!(e instanceof Uint8Array)&&"content"in e}var ft=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):xi(r)?this.writeFileSync(s,r.content,void 0,{mode:r.mode,mtime:r.mtime}):this.writeFileSync(s,r)}ensureParentDirs(t){let s=Ke(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){W(t,"write");let i=M(t);this.ensureParentDirs(i);let o=Le(r),a=Qe(s,o);this.data.set(i,{type:"file",content:a,mode:n?.mode??420,mtime:n?.mtime??new Date})}writeFileLazy(t,s,r){W(t,"write");let n=M(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"?Je.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=Le(s);return Tt(r,n)}async readFileBuffer(t){W(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:Je.encode(n.content)}return r.content instanceof Uint8Array?r.content:Je.encode(r.content)}async writeFile(t,s,r){this.writeFileSync(t,s,r)}async appendFile(t,s,r){W(t,"append");let n=M(t),i=this.data.get(n);if(i&&i.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${t}'`);let o=Le(r),a=Qe(s,o);if(i?.type==="file"){let l=i;"lazy"in l&&(l=await this.materializeLazy(n,l));let u="content"in l&&l.content instanceof Uint8Array?l.content:Je.encode("content"in l?l.content:""),c=new Uint8Array(u.length+a.length);c.set(u),c.set(a,u.length),this.data.set(n,{type:"file",content:c,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){W(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=Je.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){W(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=Je.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:n,mtime:r.mtime||new Date}}resolveIntermediateSymlinks(t){let s=M(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),u=0,c=40;for(;l&&l.type==="symlink"&&u<c;){if(i.has(n))throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`);i.add(n),n=Xe(n,l.target),l=this.data.get(n),u++}if(u>=c)throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`)}return`${n}/${r[r.length-1]}`}resolvePathWithSymlinks(t){let s=M(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,u=40;for(;a&&a.type==="symlink"&&l<u;){if(i.has(n))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);i.add(n),n=Xe(n,a.target),a=this.data.get(n),l++}if(l>=u)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){W(t,"mkdir");let r=M(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=Ke(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){W(t,"scandir");let s=M(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=Xe(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 u=a.slice(i.length),c=u.split("/")[0];c&&!u.includes("/",c.length)&&!o.has(c)&&o.set(c,{name:c,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){W(t,"rm");let r=M(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=Pt(r,o);await this.rm(a,s)}}}this.data.delete(r)}async cp(t,s,r){W(t,"cp"),W(s,"cp");let n=M(t),i=M(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 u=Pt(n,l),c=Pt(i,l);await this.cp(u,c,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){return Ct(t,s)}async chmod(t,s){W(t,"chmod");let r=M(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){W(s,"symlink");let r=M(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){W(t,"link"),W(s,"link");let r=M(t),n=M(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){W(t,"readlink");let s=M(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){W(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){W(t,"utimes");let n=M(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 Ri(e){let t=e;return typeof t.mkdirSync=="function"&&typeof t.writeFileSync=="function"}function Li(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 Fi(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 Mi(e,t){e.mkdirSync("/proc/self/fd",{recursive:!0}),e.writeFileSync("/proc/version",`${Pr}
|
|
2
|
+
import{B as Lr,C as Fr,D as le,E as Be,F as ee,G as $e,H as Ot,I as Mr,J as I,K as Wr,L as zr,M as Ae,N as ys,O as Dt,P as j,a as Nr,b as us,c as kr,d as Nt,e as Q,f as V,g as ve,h as te,i as Se,j as Re,k as fs,l as kt,m as Or,n as ds,o as Dr,p as me,q as Oe,r as Tr,s as Ir,t as hs,u as ps,v as Le,w as xr,x as Rr,y as be,z as ms}from"./chunks/chunk-O5B6WWQQ.js";import{a as M,b as W,c as Ke,d as Ct,e as Pt,f as Xe,g as cs,h as Sr,i as Ar,j as _r,k as Cr,l as Pr}from"./chunks/chunk-MY5PY2PL.js";import{c as ls}from"./chunks/chunk-QZNF3Y3J.js";import{a as wr,b as vr}from"./chunks/chunk-OOJCYVYF.js";import{a as xe,b as pe,c as os}from"./chunks/chunk-4PRVMER6.js";import{a as ut,b as Er}from"./chunks/chunk-MO4RPBN2.js";import{a as Ge,b as ge}from"./chunks/chunk-YU6OGPZR.js";import{a as ct}from"./chunks/chunk-SE4C7FJY.js";import{a as ue,b as fe,c as oe,d as de,e as br,f as B,g as Ve,h as Et,i as St,j as $r,k as Y,l as At,m as Ie,n as _t,o as we}from"./chunks/chunk-6KZRLMG3.js";import"./chunks/chunk-OBH7XN5N.js";import{a as he}from"./chunks/chunk-SYG3IW7P.js";import{a as ke}from"./chunks/chunk-4VDEBYW7.js";import"./chunks/chunk-KGOUQS5A.js";import{resolve as Ci}from"node:path";var Ye=[{name:"echo",load:async()=>(await import("./chunks/echo-2MUAOGUE.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-XZIJZXKP.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-P3QVL4IO.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-G2PXHSNX.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-CH7JGW4N.js")).mkdirCommand},{name:"rmdir",load:async()=>(await import("./chunks/rmdir-5KLM4EA6.js")).rmdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-DWKSZGOQ.js")).touchCommand},{name:"rm",load:async()=>(await import("./chunks/rm-GWYJO4W7.js")).rmCommand},{name:"cp",load:async()=>(await import("./chunks/cp-XH2ZB7WT.js")).cpCommand},{name:"mv",load:async()=>(await import("./chunks/mv-OY7X62QC.js")).mvCommand},{name:"ln",load:async()=>(await import("./chunks/ln-VAOSD4HK.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-N5CQATDW.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-6VBAPL3Y.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-BD5VFOC5.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-YMNRW3F3.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-V537TDFR.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-ZIV3TFVG.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-XS2LXYS2.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-OZJTRD4D.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-OZJTRD4D.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-OZJTRD4D.js")).egrepCommand},{name:"rg",load:async()=>(await import("./chunks/rg-34GE6REQ.js")).rgCommand},{name:"sed",load:async()=>(await import("./chunks/sed-3C6IBX5L.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-J2PNSA7C.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-7GENYU2I.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-TMSAIZM3.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-R3F3Z5DX.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-5EY2XPXX.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-3UVLMQ2K.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-LZF57GYP.js")).trCommand},{name:"rev",load:async()=>(await import("./chunks/rev-UHEPS2UL.js")).rev},{name:"nl",load:async()=>(await import("./chunks/nl-XH3L75DR.js")).nl},{name:"fold",load:async()=>(await import("./chunks/fold-XSVNTAWH.js")).fold},{name:"expand",load:async()=>(await import("./chunks/expand-26XPP5KB.js")).expand},{name:"unexpand",load:async()=>(await import("./chunks/unexpand-OYZ7KOYR.js")).unexpand},{name:"strings",load:async()=>(await import("./chunks/strings-XXKZCWY5.js")).strings},{name:"split",load:async()=>(await import("./chunks/split-YWV64TJH.js")).split},{name:"column",load:async()=>(await import("./chunks/column-XGV32UPN.js")).column},{name:"join",load:async()=>(await import("./chunks/join-Y4Q5WVVE.js")).join},{name:"tee",load:async()=>(await import("./chunks/tee-HK2SYCAR.js")).teeCommand},{name:"find",load:async()=>(await import("./chunks/find-MTLF23HX.js")).findCommand},{name:"basename",load:async()=>(await import("./chunks/basename-KBUKWB2E.js")).basenameCommand},{name:"dirname",load:async()=>(await import("./chunks/dirname-5FAOMLBL.js")).dirnameCommand},{name:"tree",load:async()=>(await import("./chunks/tree-HEKABARE.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-LDAPXSGF.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-HOVBNLUR.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-HOVBNLUR.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-3GODYSFD.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-3GODYSFD.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-UUKG55YW.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-GBL6PZ2K.js")).xargsCommand},{name:"true",load:async()=>(await import("./chunks/true-DP5UZP52.js")).trueCommand},{name:"false",load:async()=>(await import("./chunks/true-DP5UZP52.js")).falseCommand},{name:"clear",load:async()=>(await import("./chunks/clear-KRGKPFOI.js")).clearCommand},{name:"bash",load:async()=>(await import("./chunks/bash-6ZHZ6BX7.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-6ZHZ6BX7.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-JFXEKNLN.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-43M2R3GA.js")).base64Command},{name:"diff",load:async()=>(await import("./chunks/diff-LE7GMFZD.js")).diffCommand},{name:"date",load:async()=>(await import("./chunks/date-WUPBL2TL.js")).dateCommand},{name:"sleep",load:async()=>(await import("./chunks/sleep-ND6FZRZ4.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-JJWIFL7W.js")).timeoutCommand},{name:"time",load:async()=>(await import("./chunks/time-GZSHCM77.js")).timeCommand},{name:"seq",load:async()=>(await import("./chunks/seq-V7KBLSQ7.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-VEFRBJT4.js")).exprCommand},{name:"md5sum",load:async()=>(await import("./chunks/md5sum-NCLXV2S3.js")).md5sumCommand},{name:"sha1sum",load:async()=>(await import("./chunks/sha1sum-BHNJ5ALF.js")).sha1sumCommand},{name:"sha256sum",load:async()=>(await import("./chunks/sha256sum-HJJ3NJ5L.js")).sha256sumCommand},{name:"file",load:async()=>(await import("./chunks/file-D5YKS5NV.js")).fileCommand},{name:"html-to-markdown",load:async()=>(await import("./chunks/html-to-markdown-WVZA3MCP.js")).htmlToMarkdownCommand},{name:"help",load:async()=>(await import("./chunks/help-4H52JYYC.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-5PO4LAOG.js")).whichCommand},{name:"tac",load:async()=>(await import("./chunks/tac-T42SKDDI.js")).tac},{name:"hostname",load:async()=>(await import("./chunks/hostname-WY6RKE32.js")).hostname},{name:"whoami",load:async()=>(await import("./chunks/whoami-E7PN2UWC.js")).whoami},{name:"od",load:async()=>(await import("./chunks/od-52FBC34W.js")).od},{name:"gzip",load:async()=>(await import("./chunks/gzip-LHOO65AN.js")).gzipCommand},{name:"gunzip",load:async()=>(await import("./chunks/gzip-LHOO65AN.js")).gunzipCommand},{name:"zcat",load:async()=>(await import("./chunks/gzip-LHOO65AN.js")).zcatCommand}];(typeof __BROWSER__>"u"||!__BROWSER__)&&(Ye.push({name:"tar",load:async()=>(await import("./chunks/tar-TOWX2TDU.js")).tarCommand}),Ye.push({name:"yq",load:async()=>(await import("./chunks/yq-YWUQUXJJ.js")).yqCommand}),Ye.push({name:"xan",load:async()=>(await import("./chunks/xan-M6MLWZCU.js")).xanCommand}),Ye.push({name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-TZEE4O7U.js")).sqlite3Command}));var gs=[];(typeof __BROWSER__>"u"||!__BROWSER__)&&(gs.push({name:"python3",load:async()=>(await import("./chunks/python3-KI2FQWSN.js")).python3Command}),gs.push({name:"python",load:async()=>(await import("./chunks/python3-KI2FQWSN.js")).pythonCommand}));var Di=[{name:"curl",load:async()=>(await import("./chunks/curl-3GMIPMCI.js")).curlCommand}],Vr=new Map;function ws(e){return{name:e.name,async execute(t,s){let r=Vr.get(e.name);if(r||(r=await ge.runTrustedAsync(()=>e.load()),Vr.set(e.name,r)),s.coverage&&(typeof __BROWSER__>"u"||!__BROWSER__)){let{emitFlagCoverage:n}=await import("./chunks/flag-coverage-CFWN3JJN.js");n(s.coverage,e.name,t)}return r.execute(t,s)}}}function Br(e){return(e?Ye.filter(s=>e.includes(s.name)):Ye).map(ws)}function jr(){return Di.map(ws)}function Hr(){return gs.map(ws)}function Ur(e){return"load"in e&&typeof e.load=="function"}function Zr(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 Qe(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 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 Ii.decode(e)}function Fe(e){if(e!=null)return typeof e=="string"?e:e.encoding??void 0}var Je=new TextEncoder;function xi(e){return typeof e=="object"&&e!==null&&!(e instanceof Uint8Array)&&"content"in e}var ft=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):xi(r)?this.writeFileSync(s,r.content,void 0,{mode:r.mode,mtime:r.mtime}):this.writeFileSync(s,r)}ensureParentDirs(t){let s=Ke(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){W(t,"write");let i=M(t);this.ensureParentDirs(i);let o=Fe(r),a=Qe(s,o);this.data.set(i,{type:"file",content:a,mode:n?.mode??420,mtime:n?.mtime??new Date})}writeFileLazy(t,s,r){W(t,"write");let n=M(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"?Je.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=Fe(s);return Tt(r,n)}async readFileBuffer(t){W(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:Je.encode(n.content)}return r.content instanceof Uint8Array?r.content:Je.encode(r.content)}async writeFile(t,s,r){this.writeFileSync(t,s,r)}async appendFile(t,s,r){W(t,"append");let n=M(t),i=this.data.get(n);if(i&&i.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${t}'`);let o=Fe(r),a=Qe(s,o);if(i?.type==="file"){let l=i;"lazy"in l&&(l=await this.materializeLazy(n,l));let u="content"in l&&l.content instanceof Uint8Array?l.content:Je.encode("content"in l?l.content:""),c=new Uint8Array(u.length+a.length);c.set(u),c.set(a,u.length),this.data.set(n,{type:"file",content:c,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){W(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=Je.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){W(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=Je.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:n,mtime:r.mtime||new Date}}resolveIntermediateSymlinks(t){let s=M(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),u=0,c=40;for(;l&&l.type==="symlink"&&u<c;){if(i.has(n))throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`);i.add(n),n=Xe(n,l.target),l=this.data.get(n),u++}if(u>=c)throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`)}return`${n}/${r[r.length-1]}`}resolvePathWithSymlinks(t){let s=M(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,u=40;for(;a&&a.type==="symlink"&&l<u;){if(i.has(n))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);i.add(n),n=Xe(n,a.target),a=this.data.get(n),l++}if(l>=u)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){W(t,"mkdir");let r=M(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=Ke(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){W(t,"scandir");let s=M(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=Xe(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 u=a.slice(i.length),c=u.split("/")[0];c&&!u.includes("/",c.length)&&!o.has(c)&&o.set(c,{name:c,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){W(t,"rm");let r=M(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=Pt(r,o);await this.rm(a,s)}}}this.data.delete(r)}async cp(t,s,r){W(t,"cp"),W(s,"cp");let n=M(t),i=M(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 u=Pt(n,l),c=Pt(i,l);await this.cp(u,c,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){return Ct(t,s)}async chmod(t,s){W(t,"chmod");let r=M(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){W(s,"symlink");let r=M(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){W(t,"link"),W(s,"link");let r=M(t),n=M(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){W(t,"readlink");let s=M(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){W(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){W(t,"utimes");let n=M(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 Ri(e){let t=e;return typeof t.mkdirSync=="function"&&typeof t.writeFileSync=="function"}function Li(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 Fi(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 Mi(e,t){e.mkdirSync("/proc/self/fd",{recursive:!0}),e.writeFileSync("/proc/version",`${Nr}
|
|
3
3
|
`),e.writeFileSync("/proc/self/exe","/bin/bash"),e.writeFileSync("/proc/self/cmdline","bash\0"),e.writeFileSync("/proc/self/comm",`bash
|
|
4
|
-
`),e.writeFileLazy?e.writeFileLazy("/proc/self/status",()=>us(t)):e.writeFileSync("/proc/self/status",us(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
|
|
4
|
+
`),e.writeFileLazy?e.writeFileLazy("/proc/self/status",()=>us(t)):e.writeFileSync("/proc/self/status",us(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 qr(e,t,s={pid:1,ppid:0,uid:1e3,gid:1e3}){Ri(e)&&(Li(e,t),Fi(e),Mi(e,s))}var Wi=["allexport","errexit","noglob","noclobber","noexec","nounset","pipefail","posix","verbose","xtrace"],zi=["braceexpand","hashall","interactive-comments"];function bs(e){let t=[],s=[...zi.map(r=>({name:r,enabled:!0})),...Wi.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 tt(e){e.state.env.set("SHELLOPTS",bs(e.state.options))}var Vi=["dotglob","expand_aliases","extglob","failglob","globskipdots","globstar","lastpipe","nocaseglob","nocasematch","nullglob","xpg_echo"];function $s(e){let t=[];for(let s of Vi)e[s]&&t.push(s);return t.join(":")}function Es(e){e.state.env.set("BASHOPTS",$s(e.state.shoptOptions))}var Bi="BASH_ALIAS_";function Gr(e){return e.parts.length!==1?!1:e.parts[0].type==="Literal"}function Kr(e){if(e.parts.length!==1)return null;let t=e.parts[0];return t.type==="Literal"?t.value:null}function Xr(e,t){return e.env.get(`${Bi}${t}`)}function Ss(e,t,s){if(!t.name||!Gr(t.name))return t;let r=Kr(t.name);if(!r)return t;let n=Xr(e,r);if(!n||s.has(r))return t;try{s.add(r);let i=new V,o=n,a=n.endsWith(" ");if(!a)for(let f of t.args){let d=Qr(f);o+=` ${d}`}let l;try{l=i.parse(o)}catch(f){if(f instanceof Nt)throw f;return t}if(l.statements.length!==1||l.statements[0].pipelines.length!==1||l.statements[0].pipelines[0].commands.length!==1)return Yr(t,n);let u=l.statements[0].pipelines[0].commands[0];if(u.type!=="SimpleCommand")return Yr(t,n);let c={...u,assignments:[...t.assignments,...u.assignments],redirections:[...u.redirections,...t.redirections],line:t.line};if(a&&t.args.length>0&&(c={...c,args:[...c.args,...t.args]},c.args.length>0)){let f=c.args[0];if(Gr(f)){let d=Kr(f);if(d&&Xr(e,d)){let h={type:"SimpleCommand",name:f,args:c.args.slice(1),assignments:[],redirections:[]},m=Ss(e,h,s);m!==h&&(c={...c,name:m.name,args:[...m.args]})}}}return c}catch(i){throw s.delete(r),i}}function Yr(e,t){let s=t;for(let o of e.args){let a=Qr(o);s+=` ${a}`}let r=new V,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 Qr(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 Jr(e,t){let s=t.parts.map(c=>c.type==="Literal"?c.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 c of t.parts)if(c.type==="Literal"){let f=c.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 h of d)/^\s+$/.test(h)?(a||l)&&(i.push(a),a="",l=!1):h&&(a+=h)}}else if(o)if(c.type==="BraceExpansion")if(/^\[.+\]=/.test(a))a+=kt({type:"Word",parts:[c]});else{(a||l)&&(i.push(a),a="",l=!1);let d=await Ae(e,{type:"Word",parts:[c]});i.push(...d.values)}else{(c.type==="SingleQuoted"||c.type==="DoubleQuoted"||c.type==="Escaped")&&(l=!0);let f=await I(e,{type:"Word",parts:[c]});a+=f}(a||l)&&i.push(a);let u=i.map(c=>/^\[.+\]=/.test(c)?c:c===""?"''":/[\s"'\\$`!*?[\]{}|&;<>()]/.test(c)&&!c.startsWith("'")&&!c.startsWith('"')?`'${c.replace(/'/g,"'\\''")}'`:c);return`${n}=(${u.join(" ")})`}async function en(e,t){let s=-1,r=-1,n=!1;for(let p=0;p<t.parts.length;p++){let y=t.parts[p];if(y.type==="Literal"){let b=y.value.indexOf("+=");if(b!==-1){let A=y.value.slice(0,b);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(A)){s=p,r=b,n=!0;break}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(A)){s=p,r=b,n=!0;break}}let v=y.value.indexOf("=");if(v!==-1&&(v===0||y.value[v-1]!=="+")){let A=y.value.slice(0,v);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(A)||/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(A)){s=p,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),u=o.value.slice(r+a),c=t.parts.slice(s+1),f="";for(let p of i)f+=await I(e,{type:"Word",parts:[p]});f+=l;let d={type:"Word",parts:u!==""?[{type:"Literal",value:u},...c]:c},h=d.parts.length>0?await I(e,d):"";return`${f}${n?"+=":"="}${h}`}var ji=["tar","yq","xan","sqlite3","python3","python"];function tn(e){return ji.includes(e)}var L=Object.freeze({stdout:"",stderr:"",exitCode:0});function F(e=""){return{stdout:e,stderr:"",exitCode:0}}function _(e,t=1){return{stdout:"",stderr:e,exitCode:t}}function P(e,t,s){return{stdout:e,stderr:t,exitCode:s}}function X(e){return{stdout:"",stderr:"",exitCode:e?0:1}}function _e(e,t,s="",r=""){throw new Y(e,t,s,r)}function ie(e){let t=e.state.fileDescriptors;if(t&&t.size>=e.limits.maxFileDescriptors)throw new Y(`too many open file descriptors (max ${e.limits.maxFileDescriptors})`,"file_descriptors")}function As(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new Ie;return L}if(t.length>1)throw new B(1,"",`bash: break: too many arguments
|
|
5
5
|
`);let s=1;if(t.length>0){let r=Number.parseInt(t[0],10);if(Number.isNaN(r)||r<1)throw new B(128,"",`bash: break: ${t[0]}: numeric argument required
|
|
6
|
-
`);s=r}throw new ue(s)}async function _s(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(h=>h);for(let h of d){let
|
|
6
|
+
`);s=r}throw new ue(s)}async function _s(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(h=>h);for(let h of d){let m=h.startsWith("/")?`${h}/${s}`:`${e.state.cwd}/${h}/${s}`;try{if((await e.fs.stat(m)).isDirectory){s=m,r=!0;break}}catch{}}}}let l=(s.startsWith("/")?s:`${e.state.cwd}/${s}`).split("/").filter(f=>f&&f!=="."),u="";for(let f of l)if(f==="..")u=u.split("/").slice(0,-1).join("/")||"/";else{u=u?`${u}/${f}`:`/${f}`;try{if(!(await e.fs.stat(u)).isDirectory)return _(`bash: cd: ${s}: Not a directory
|
|
7
7
|
`)}catch{return _(`bash: cd: ${s}: No such file or directory
|
|
8
8
|
`)}}let c=u||"/";if(n)try{c=await e.fs.realpath(c)}catch{}return e.state.previousDir=e.state.cwd,e.state.cwd=c,e.state.env.set("PWD",e.state.cwd),e.state.env.set("OLDPWD",e.state.previousDir),F(r?`${c}
|
|
9
9
|
`:"")}function Cs(e,t){return e.fs.resolvePath(e.state.cwd,t)}var Hi=["-e","-a","-f","-d","-r","-w","-x","-s","-L","-h","-k","-g","-u","-G","-O","-b","-c","-p","-S","-t","-N"];function xt(e){return Hi.includes(e)}async function Rt(e,t,s){let r=Cs(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 Ui=["-nt","-ot","-ef"];function Lt(e){return Ui.includes(e)}async function Ft(e,t,s,r){let n=Cs(e,s),i=Cs(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 Zi=new Set(["-eq","-ne","-lt","-le","-gt","-ge"]);function Mt(e){return Zi.has(e)}function Wt(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 dt(e){return e==="="||e==="=="||e==="!="}function zt(e,t,s,r=!1,n=!1,i=!1){if(r){let a=st(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 qi=new Set(["-z","-n"]);function Vt(e){return qi.has(e)}function Bt(e,t){switch(e){case"-z":return t==="";case"-n":return t!==""}}async function jt(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,u)=>e.state.env.get(u)||""),e.state.env.has(`${r}_${a}`)}let o;try{let a=new V,l=Q(a,n);o=await j(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=te(e,r),l=e.state.currentLine;if(a.length===0)return e.state.expansionStderr=(e.state.expansionStderr||"")+`bash: line ${l}: ${r}: bad array subscript
|
|
10
10
|
`,!1;if(o=Math.max(...a)+1+o,o<0)return e.state.expansionStderr=(e.state.expansionStderr||"")+`bash: line ${l}: ${r}: bad array subscript
|
|
11
|
-
`,!1}return e.state.env.has(`${r}_${o}`)}return e.state.env.has(t)?!0:e.state.associativeArrays?.has(t)?
|
|
11
|
+
`,!1}return e.state.env.has(`${r}_${o}`)}return e.state.env.has(t)?!0:e.state.associativeArrays?.has(t)?Re(e,t).length>0:te(e,t).length>0}async function Me(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=Fr(i)}else n=await Wr(e,t.right);else dt(t.operator)&&!r?n=await zr(e,t.right):n=await I(e,t.right);if(dt(t.operator)){let i=e.state.shoptOptions.nocasematch;return zt(t.operator,s,n,!r,i,!0)}if(Mt(t.operator))return Wt(t.operator,await rn(e,s),await rn(e,n));if(Lt(t.operator))return Ft(e,t.operator,s,n);switch(t.operator){case"=~":try{let i=e.state.shoptOptions.nocasematch,o=Yi(n),l=ct(o,i?"i":"").match(s);if(Se(e,"BASH_REMATCH"),l)for(let u=0;u<l.length;u++)e.state.env.set(`BASH_REMATCH_${u}`,l[u]||"");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 xt(t.operator)?Rt(e,t.operator,s):Vt(t.operator)?Bt(t.operator,s):t.operator==="-v"?await jt(e,s):t.operator==="-o"?Ns(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 Me(e,t.operand);case"CondAnd":return await Me(e,t.left)?await Me(e,t.right):!1;case"CondOr":return await Me(e,t.left)?!0:await Me(e,t.right);case"CondGroup":return await Me(e,t.expression);case"CondWord":return await I(e,t.word)!=="";default:return!1}}async function ht(e,t){if(t.length===0)return P("","",1);if(t.length===1)return X(!!t[0]);if(t.length===2){let r=t[0],n=t[1];return r==="("?_(`test: '(' without matching ')'
|
|
12
12
|
`,2):xt(r)?X(await Rt(e,r,n)):Vt(r)?X(Bt(r,n)):r==="!"?X(!n):r==="-v"?X(await jt(e,n)):r==="-o"?X(Ns(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"?_(`test: ${r}: unary operator expected
|
|
13
|
-
`,2):P("","",1)}if(t.length===3){let r=t[0],n=t[1],i=t[2];if(dt(n))return X(zt(n,r,i));if(Mt(n)){let o=Ht(r),a=Ht(i);return!o.valid||!a.valid?P("","",2):X(Wt(n,o.value,a.value))}if(Lt(n))return X(await Ft(e,n,r,i));switch(n){case"-a":return X(r!==""&&i!=="");case"-o":return X(r!==""||i!=="");case">":return X(r>i);case"<":return X(r<i)}if(r==="!"){let o=await ht(e,[n,i]);return P("",o.stderr,o.exitCode===0?1:o.exitCode===1?0:o.exitCode)}if(r==="("&&i===")")return X(n!=="")}if(t.length===4){if(t[0]==="!"){let r=await ht(e,t.slice(1));return P("",r.stderr,r.exitCode===0?1:r.exitCode===1?0:r.exitCode)}if(t[0]==="("&&t[3]===")")return ht(e,[t[1],t[2]])}let s=await
|
|
14
|
-
`,2):X(s.value)}async function
|
|
15
|
-
`)&&!r&&!n){o&&(t.push(s),s="",o=!1);continue}s+=a,o=!0}return o&&t.push(s),t}function Ut(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
|
|
13
|
+
`,2):P("","",1)}if(t.length===3){let r=t[0],n=t[1],i=t[2];if(dt(n))return X(zt(n,r,i));if(Mt(n)){let o=Ht(r),a=Ht(i);return!o.valid||!a.valid?P("","",2):X(Wt(n,o.value,a.value))}if(Lt(n))return X(await Ft(e,n,r,i));switch(n){case"-a":return X(r!==""&&i!=="");case"-o":return X(r!==""||i!=="");case">":return X(r>i);case"<":return X(r<i)}if(r==="!"){let o=await ht(e,[n,i]);return P("",o.stderr,o.exitCode===0?1:o.exitCode===1?0:o.exitCode)}if(r==="("&&i===")")return X(n!=="")}if(t.length===4){if(t[0]==="!"){let r=await ht(e,t.slice(1));return P("",r.stderr,r.exitCode===0?1:r.exitCode===1?0:r.exitCode)}if(t[0]==="("&&t[3]===")")return ht(e,[t[1],t[2]])}let s=await an(e,t,0);return s.pos<t.length?_(`test: too many arguments
|
|
14
|
+
`,2):X(s.value)}async function an(e,t,s){return Gi(e,t,s)}async function Gi(e,t,s){let{value:r,pos:n}=await sn(e,t,s);for(;t[n]==="-o";){let i=await sn(e,t,n+1);r=r||i.value,n=i.pos}return{value:r,pos:n}}async function sn(e,t,s){let{value:r,pos:n}=await Ps(e,t,s);for(;t[n]==="-a";){let i=await Ps(e,t,n+1);r=r&&i.value,n=i.pos}return{value:r,pos:n}}async function Ps(e,t,s){if(t[s]==="!"){let{value:r,pos:n}=await Ps(e,t,s+1);return{value:!r,pos:n}}return Ki(e,t,s)}async function Ki(e,t,s){let r=t[s];if(r==="("){let{value:i,pos:o}=await an(e,t,s+1);return{value:i,pos:t[o]===")"?o+1:o}}let n=t[s+1];if(dt(n)){let i=r,o=t[s+2]??"";return{value:zt(n,i,o),pos:s+3}}if(Mt(n)){let i=Ht(r),o=Ht(t[s+2]??"0");return!i.valid||!o.valid?{value:!1,pos:s+3}:{value:Wt(n,i.value,o.value),pos:s+3}}if(Lt(n)){let i=r,o=t[s+2]??"";return{value:await Ft(e,n,i,o),pos:s+3}}if(xt(r)){let i=t[s+1]??"";return{value:await Rt(e,r,i),pos:s+2}}if(Vt(r)){let i=t[s+1]??"";return{value:Bt(r,i),pos:s+2}}if(r==="-v"){let i=t[s+1]??"";return{value:await jt(e,i),pos:s+2}}if(r==="-o"){let i=t[s+1]??"";return{value:Ns(e,i),pos:s+2}}return{value:r!==void 0&&r!=="",pos:s+1}}function st(e,t,s=!1,r=!1){let n=`^${on(t,r)}$`;return ct(n,s?"is":"s").test(e)}function on(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=ln(e,r+1);if(i!==-1){let o=e.slice(r+2,i),a=cn(o),l=a.map(c=>on(c,t)),u=l.length>0?l.join("|"):"(?:)";if(n==="@")s+=`(?:${u})`;else if(n==="*")s+=`(?:${u})*`;else if(n==="+")s+=`(?:${u})+`;else if(n==="?")s+=`(?:${u})?`;else if(n==="!")if(i<e.length-1){let f=a.map(h=>un(h,t));if(f.every(h=>h!==null)&&f.every(h=>h===f[0])&&f[0]!==null){let h=f[0];if(h===0)s+="(?:.+)";else{let m=[];h>0&&m.push(`.{0,${h-1}}`),m.push(`.{${h+1},}`),m.push(`(?!(?:${u})).{${h}}`),s+=`(?:${m.join("|")})`}}else s+=`(?:(?!(?:${u})).)*?`}else s+=`(?!(?:${u})$).*`;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 ln(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 cn(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 un(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=ln(e,r+1);if(i!==-1){if(n==="@"){let o=e.slice(r+2,i),l=cn(o).map(u=>un(u,t));if(l.every(u=>u!==null)&&l.every(u=>u===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 Ns(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 rn(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 nn(t);try{let s=new V,r=Q(s,t);return await j(e,r.expression)}catch{return nn(t)}}function Xi(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 nn(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=Xi(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 Ht(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 Yi(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=Qi(e,s);t+=r.converted,s=r.endIndex}else t+=e[s],s++;return t}function Qi(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 u=e.indexOf(":]",s+2);if(u!==-1){let c=e.slice(s+2,u);o+=Ji(c),s=u+2;continue}}if(l==="["&&s+1<e.length){let u=e[s+1];if(u==="."||u==="="){let c=`${u}]`,f=e.indexOf(c,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 Ji(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 Ce(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===`
|
|
15
|
+
`)&&!r&&!n){o&&(t.push(s),s="",o=!1);continue}s+=a,o=!0}return o&&t.push(s),t}function Ut(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 fn(e){let t=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(t)return{name:t[1],isArray:!0,arrayElements:Ce(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 ea(e,t){try{let s=new V,r=Q(s,t);return await j(e,r.expression)}catch{let s=parseInt(t,10);return Number.isNaN(s)?0:s}}async function dn(e,t,s={}){let{name:r,isArray:n,arrayElements:i,value:o,arrayIndex:a}=t,{makeReadonly:l=!1,checkReadonly:u=!0}=s;if(u){let c=ee(e,r);if(c)return c}if(n&&i){for(let c=0;c<i.length;c++)e.state.env.set(`${r}_${c}`,i[c]);e.state.env.set(`${r}__length`,String(i.length))}else if(a!==void 0&&o!==void 0){let c=await ea(e,a);e.state.env.set(`${r}_${c}`,o);let f=parseInt(e.state.env.get(`${r}__length`)??"0",10);c>=f&&e.state.env.set(`${r}__length`,String(c+1))}else o!==void 0&&e.state.env.set(r,o);return l&&le(e,r),null}function We(e,t){e.state.localVarDepth=e.state.localVarDepth||new Map,e.state.localVarDepth.set(t,e.state.callDepth)}function rt(e,t){return e.state.localVarDepth?.get(t)}function Zt(e,t){e.state.localVarDepth?.delete(t)}function hn(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 qt(e,t){let s=e.state.localVarStack?.get(t);if(!(!s||s.length===0))return s.pop()}function pn(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 ks=new Set([":",".","break","continue","eval","exec","exit","export","readonly","return","set","shift","trap","unset"]);function mn(e){return ks.has(e)}var Os=new Set(["if","then","else","elif","fi","case","esac","for","select","while","until","do","done","in","function","{","}","time","[[","]]","!"]),nt=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 je(e,t,s,r){try{if((await e.fs.stat(t)).isDirectory)return`bash: ${s}: Is a directory
|
|
16
16
|
`;if(r.checkNoclobber&&e.state.options.noclobber&&!r.isClobber&&s!=="/dev/null")return`bash: ${s}: cannot overwrite existing file
|
|
17
|
-
`}catch{}return null}function
|
|
17
|
+
`}catch{}return null}function Te(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 ta(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 u=Number.parseInt(a.slice(0,l),10);if(Number.isNaN(u)||u<0)return null;let c=a.slice(l+1);return{path:i,position:u,content:c}}async function yn(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(ys(e,n.target))return{targets:s,error:`bash: $@: ambiguous redirect
|
|
18
18
|
`};s.set(r,await I(e,n.target))}else{let o=await Dt(e,n.target);if("error"in o)return{targets:s,error:o.error};s.set(r,o.target)}}return{targets:s}}function sa(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 Gt(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=sa(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&&(ie(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"),ie(e),e.state.fileDescriptors.set(r,`__file__:${i}`)}else if(s.operator==="<<<")ie(e),e.state.fileDescriptors.set(r,`${n}
|
|
19
19
|
`);else if(s.operator==="<"||s.operator==="<>")try{let i=e.fs.resolvePath(e.state.cwd,n),o=await e.fs.readFile(i);ie(e),e.state.fileDescriptors.set(r,o)}catch{return P("",`bash: ${n}: No such file or directory
|
|
20
20
|
`,1)}}}return null}async function Pe(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 Dt(e,s.target);if("error"in a)return P("",a.error,1);n=a.target}let i=e.fs.resolvePath(e.state.cwd,n),o=s.operator===">|";if(i.includes("\0"))return P("",`bash: ${n}: No such file or directory
|
|
21
21
|
`,1);try{let a=await e.fs.stat(i);if(a.isDirectory)return P("",`bash: ${n}: Is a directory
|
|
22
22
|
`,1);if(e.state.options.noclobber&&!o&&!a.isDirectory&&n!=="/dev/null")return P("",`bash: ${n}: cannot overwrite existing file
|
|
23
23
|
`,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 P("",`bash: /dev/full: No space left on device
|
|
24
|
-
`,1)}return null}async function Z(e,t,s,r){let{stdout:n,stderr:i,exitCode:o}=t,a=t.stdoutEncoding==="binary"?()=>"binary":c=>
|
|
24
|
+
`,1)}return null}async function Z(e,t,s,r){let{stdout:n,stderr:i,exitCode:o}=t,a=t.stdoutEncoding==="binary"?()=>"binary":c=>Te(c);for(let c=0;c<s.length;c++){let f=s[c];if(f.target.type==="HereDoc")continue;let d,h=r?.get(c);if(h!==void 0)d=h;else if(f.operator===">&"||f.operator==="<&"){if(ys(e,f.target)){i+=`bash: $@: ambiguous redirect
|
|
25
25
|
`,o=1,n="";continue}d=await I(e,f.target)}else{let p=await Dt(e,f.target);if("error"in p){i+=p.error,o=1,n="";continue}d=p.target}if(!f.fdVariable){if(d.includes("\0")){i+=`bash: ${d.replace(/\0/g,"")}: No such file or directory
|
|
26
|
-
`,o=1,n="";continue}switch(f.operator){case">":case">|":{let
|
|
27
|
-
`,o=1,n="";break}let
|
|
28
|
-
`,o=1;break}if(d==="/dev/null")i="";else{let
|
|
29
|
-
`,o=1,n="";break}let p=e.fs.resolvePath(e.state.cwd,d),
|
|
30
|
-
`,o=1;break}let p=e.fs.resolvePath(e.state.cwd,d),
|
|
31
|
-
`,o=1)}break}if(d==="2"||d==="&2")
|
|
26
|
+
`,o=1,n="";continue}switch(f.operator){case">":case">|":{let m=f.fd??1,p=f.operator===">|";if(m===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
|
|
27
|
+
`,o=1,n="";break}let y=e.fs.resolvePath(e.state.cwd,d),b=await je(e,y,d,{checkNoclobber:!0,isClobber:p});if(b){i+=b,o=1,n="";break}await e.fs.writeFile(y,n,a(n)),n=""}else if(m===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
|
|
28
|
+
`,o=1;break}if(d==="/dev/null")i="";else{let y=e.fs.resolvePath(e.state.cwd,d),b=await je(e,y,d,{checkNoclobber:!0,isClobber:p});if(b){i+=b,o=1;break}await e.fs.writeFile(y,i,Te(i)),i=""}}break}case">>":{let m=f.fd??1;if(m===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
|
|
29
|
+
`,o=1,n="";break}let p=e.fs.resolvePath(e.state.cwd,d),y=await je(e,p,d,{});if(y){i+=y,o=1,n="";break}await e.fs.appendFile(p,n,a(n)),n=""}else if(m===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
|
|
30
|
+
`,o=1;break}let p=e.fs.resolvePath(e.state.cwd,d),y=await je(e,p,d,{});if(y){i+=y,o=1;break}await e.fs.appendFile(p,i,Te(i)),i=""}break}case">&":case"<&":{let m=f.fd??1;if(d==="-")break;if(d.endsWith("-")){let p=d.slice(0,-1),y=Number.parseInt(p,10);if(!Number.isNaN(y)){let b=e.state.fileDescriptors?.get(y);b!==void 0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(m,b),y>=3&&e.state.fileDescriptors?.delete(y)):y===1||y===2?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(m,`__dupout__:${y}`)):y===0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(m,`__dupin__:${y}`)):y>=3&&(i+=`bash: ${y}: Bad file descriptor
|
|
31
|
+
`,o=1)}break}if(d==="2"||d==="&2")m===1&&(i+=n,n="");else if(d==="1"||d==="&1")n+=i,i="";else{let p=Number.parseInt(d,10);if(Number.isNaN(p)){if(f.operator===">&"){let y=e.fs.resolvePath(e.state.cwd,d),b=await je(e,y,d,{checkNoclobber:!0});if(b){i=b,o=1,n="";break}if(f.fd==null){let v=n+i;await e.fs.writeFile(y,v,a(v)),n="",i=""}else m===1?(await e.fs.writeFile(y,n,a(n)),n=""):m===2&&(await e.fs.writeFile(y,i,Te(i)),i="")}}else{let y=e.state.fileDescriptors?.get(p);if(y?.startsWith("__file__:")){let b=y.slice(9);m===1?(await e.fs.appendFile(b,n,a(n)),n=""):m===2&&(await e.fs.appendFile(b,i,Te(i)),i="")}else if(y?.startsWith("__rw__:")){let b=ta(y);b&&(m===1?(await e.fs.appendFile(b.path,n,a(n)),n=""):m===2&&(await e.fs.appendFile(b.path,i,Te(i)),i=""))}else if(y?.startsWith("__dupout__:")){let b=Number.parseInt(y.slice(11),10);if(b!==1)if(b===2)m===1&&(i+=n,n="");else{let v=e.state.fileDescriptors?.get(b);if(v?.startsWith("__file__:")){let A=v.slice(9);m===1?(await e.fs.appendFile(A,n,a(n)),n=""):m===2&&(await e.fs.appendFile(A,i,Te(i)),i="")}}}else y?.startsWith("__dupin__:")?(i+=`bash: ${p}: Bad file descriptor
|
|
32
32
|
`,o=1,n=""):p>=3&&(i+=`bash: ${p}: Bad file descriptor
|
|
33
33
|
`,o=1,n="")}}break}case"&>":{if(d==="/dev/full"){i=`bash: echo: write error: No space left on device
|
|
34
|
-
`,o=1,n="";break}let
|
|
35
|
-
`,o=1,n="";break}let
|
|
34
|
+
`,o=1,n="";break}let m=e.fs.resolvePath(e.state.cwd,d),p=await je(e,m,d,{checkNoclobber:!0});if(p){i=p,o=1,n="";break}let y=n+i;await e.fs.writeFile(m,y,a(y)),n="",i="";break}case"&>>":{if(d==="/dev/full"){i=`bash: echo: write error: No space left on device
|
|
35
|
+
`,o=1,n="";break}let m=e.fs.resolvePath(e.state.cwd,d),p=await je(e,m,d,{});if(p){i=p,o=1,n="";break}let y=n+i;await e.fs.appendFile(m,y,a(y)),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 c=l.slice(9);await e.fs.appendFile(c,n,a(n)),n=""}else if(l.startsWith("__file_append__:")){let c=l.slice(16);await e.fs.appendFile(c,n,a(n)),n=""}}let u=e.state.fileDescriptors?.get(2);if(u){if(u==="__dupout__:1")n+=i,i="";else if(u.startsWith("__file__:")){let c=u.slice(9);await e.fs.appendFile(c,i,Te(i)),i=""}else if(u.startsWith("__file_append__:")){let c=u.slice(16);await e.fs.appendFile(c,i,Te(i)),i=""}}return P(n,i,o)}function gn(e,t){if(e.state.options.posix&&ks.has(t.name)){let r=`bash: line ${e.state.currentLine}: \`${t.name}': is a special builtin
|
|
36
36
|
`;throw new B(2,"",r)}let s={...t,sourceFile:t.sourceFile??e.state.currentSource??"main"};return e.state.functions.set(t.name,s),L}async function ra(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(`
|
|
37
37
|
`).map(a=>a.replace(/^\t+/,"")).join(`
|
|
38
38
|
`)),(r.fd??0)===0&&(s=i)}else if(r.operator==="<<<"&&r.target.type==="Word")s=`${await I(e,r.target)}
|
|
39
|
-
`;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 Kt(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 u=0;u<s.length;u++)i.set(String(u+1),e.state.env.get(String(u+1))),e.state.env.set(String(u+1),s[u]);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 u=e.state.localScopes.length-1,c=e.state.localScopes.pop();if(c)for(let[f,d]of c)d===void 0?e.state.env.delete(f):e.state.env.set(f,d);if(
|
|
40
|
-
`,2);let $=t[g];if(!
|
|
39
|
+
`;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 Kt(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 u=0;u<s.length;u++)i.set(String(u+1),e.state.env.get(String(u+1))),e.state.env.set(String(u+1),s[u]);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 u=e.state.localScopes.length-1,c=e.state.localScopes.pop();if(c)for(let[f,d]of c)d===void 0?e.state.env.delete(f):e.state.env.set(f,d);if(pn(e,u),e.state.fullyUnsetLocals)for(let[f,d]of e.state.fullyUnsetLocals.entries())d===u&&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 yn(e,t.redirections);if(l)return o(),P("",l,1);try{let u=await ra(e,t.redirections),c=r||u,f=await e.executeCommand(t.body,c);return o(),Z(e,f,t.redirections,a)}catch(u){if(o(),u instanceof oe){let c=P(u.stdout,u.stderr,u.exitCode);return Z(e,c,t.redirections,a)}throw u}}var vn=["!","[[","]]","case","do","done","elif","else","esac","fi","for","function","if","in","then","time","until","while","{","}"],Ts=[".",":","[","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"],na=["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"],ia=Ts;async function Is(e,t){let s=[],r=null,n="",i="",o=null,a=!1,l=!1,u=!1,c=null,f=null,d=null,h=[],m=["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 _(`compgen: -A: option requires an argument
|
|
40
|
+
`,2);let $=t[g];if(!m.includes($))return _(`compgen: ${$}: invalid action name
|
|
41
41
|
`,2);s.push($)}else if(w==="-W"){if(g++,g>=t.length)return _(`compgen: -W: option requires an argument
|
|
42
42
|
`,2);r=t[g]}else if(w==="-P"){if(g++,g>=t.length)return _(`compgen: -P: option requires an argument
|
|
43
43
|
`,2);n=t[g]}else if(w==="-S"){if(g++,g>=t.length)return _(`compgen: -S: option requires an argument
|
|
@@ -47,11 +47,11 @@ import{B as Rr,C as Lr,D as le,E as Ve,F as ee,G as $e,H as Ot,I as Fr,J as I,K
|
|
|
47
47
|
`,2);f=t[g]}else if(w==="-C"){if(g++,g>=t.length)return _(`compgen: -C: option requires an argument
|
|
48
48
|
`,2);d=t[g]}else if(w==="-X"){if(g++,g>=t.length)return _(`compgen: -X: option requires an argument
|
|
49
49
|
`,2);c=t[g]}else if(w==="-G"){if(g++,g>=t.length)return _(`compgen: -G: option requires an argument
|
|
50
|
-
`,2)}else if(w==="--"){h.push(...t.slice(g+1));break}else w.startsWith("-")||h.push(w)}o=h[0]??null;let p=[];if(l){let g=await Ds(e,o);p.push(...g)}if(u){let g=await
|
|
50
|
+
`,2)}else if(w==="--"){h.push(...t.slice(g+1));break}else w.startsWith("-")||h.push(w)}o=h[0]??null;let p=[];if(l){let g=await Ds(e,o);p.push(...g)}if(u){let g=await wn(e,o);p.push(...g)}for(let g of s)if(g==="variable"){let w=aa(e,o);p.push(...w)}else if(g==="export"){let w=oa(e,o);p.push(...w)}else if(g==="function"){let w=la(e,o);p.push(...w)}else if(g==="builtin"){let w=ca(o);p.push(...w)}else if(g==="keyword"){let w=ua(o);p.push(...w)}else if(g==="alias"){let w=fa(e,o);p.push(...w)}else if(g==="shopt"){let w=da(o);p.push(...w)}else if(g==="helptopic"){let w=ha(o);p.push(...w)}else if(g==="directory"){let w=await Ds(e,o);p.push(...w)}else if(g==="file"){let w=await wn(e,o);p.push(...w)}else if(g==="user"){let w=pa(o);p.push(...w)}else if(g==="command"){let w=await ma(e,o);p.push(...w)}if(r!==null)try{let g=await ya(e,r),w=ga(e,g);for(let $ of w)(o===null||$.startsWith(o))&&p.push($)}catch{return P("","",1)}if(a){let g=await Ds(e,o);for(let w of g)p.includes(w)||p.push(w)}let y="";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 $=new Map;for(let T of e.state.env.keys())(T==="COMPREPLY"||T.startsWith("COMPREPLY_")||T==="COMPREPLY__length")&&($.set(T,e.state.env.get(T)),e.state.env.delete(T));let E=["compgen",h[0]??"",""];try{let T=await Kt(e,g,E,"");if(T.exitCode!==0)return it(e,w),it(e,$),P("",T.stderr,1);y=T.stdout;let k=wa(e);p.push(...k)}catch{return it(e,w),it(e,$),P("","",1)}it(e,w),it(e,$)}}if(d!==null)try{let g=ve(d),w=await e.executeScript(g);if(w.exitCode!==0)return P("",w.stderr,w.exitCode);if(w.stdout){let $=w.stdout.split(`
|
|
51
51
|
`);for(let E of $)E.length>0&&p.push(E)}}catch(g){if(g.name==="ParseException")return _(`compgen: -C: ${g.message}
|
|
52
|
-
`,2);throw g}let b=p;if(c!==null){let g=c.startsWith("!"),w=g?c.slice(1):c;b=p.filter($=>{let E=st($,w,!1,!0);return g?E:!E})}if(b.length===0&&o!==null)return P(
|
|
53
|
-
`),A=
|
|
54
|
-
`:"");return F(A)}function aa(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 oa(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 la(e,t){let s=Array.from(e.state.functions.keys());return t!==null&&(s=s.filter(r=>r.startsWith(t))),s.sort()}function ca(e){let t=[...Ts];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}function ua(e){let t=[...
|
|
52
|
+
`,2);throw g}let b=p;if(c!==null){let g=c.startsWith("!"),w=g?c.slice(1):c;b=p.filter($=>{let E=st($,w,!1,!0);return g?E:!E})}if(b.length===0&&o!==null)return P(y,"",1);let v=b.map(g=>`${n}${g}${i}`).join(`
|
|
53
|
+
`),A=y+(v?`${v}
|
|
54
|
+
`:"");return F(A)}function aa(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 oa(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 la(e,t){let s=Array.from(e.state.functions.keys());return t!==null&&(s=s.filter(r=>r.startsWith(t))),s.sort()}function ca(e){let t=[...Ts];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}function ua(e){let t=[...vn];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}function fa(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 da(e){let t=[...na];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}function ha(e){let t=[...ia];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}async function Ds(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 u=t.lastIndexOf("/"),c=t.slice(0,u+1);s.push(c+o)}else s.push(o)}catch{}}}catch{}return s.sort()}async function wn(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 pa(e){return["root","nobody"]}async function ma(e,t){let s=new Set;for(let i of Ts)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 vn)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 ya(e,t){let r=new V().parseWordFromString(t,!1,!1);return await I(e,r)}function ga(e,t){let s=e.state.env.get("IFS")??`
|
|
55
55
|
`;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 it(e,t){for(let[s,r]of t)r===void 0?e.state.env.delete(s):e.state.env.set(s,r)}function wa(e){let t=[];if(e.state.env.get("COMPREPLY__length")!==void 0){let n=be(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 va=["bashdefault","default","dirnames","filenames","noquote","nosort","nospace","plusdirs"];function Rs(e,t){e.state.completionSpecs||(e.state.completionSpecs=new Map);let s=!1,r=!1,n=!1,i,o,a,l=[],u=[],c=[];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 _(`complete: -W: option requires an argument
|
|
56
56
|
`,2);i=t[f]}else if(d==="-F"){if(f++,f>=t.length)return _(`complete: -F: option requires an argument
|
|
57
57
|
`,2);o=t[f]}else if(d==="-o"){if(f++,f>=t.length)return _(`complete: -o: option requires an argument
|
|
@@ -69,46 +69,46 @@ import{B as Rr,C as Lr,D as le,E as Ve,F as ee,G as $e,H as Ot,I as Fr,J as I,K
|
|
|
69
69
|
`:""),`complete: ${i}: no completion specification
|
|
70
70
|
`,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?F(""):F(`${r.join(`
|
|
71
71
|
`)}
|
|
72
|
-
`)}var
|
|
73
|
-
`,2);let u=t[a];if(!
|
|
72
|
+
`)}var bn=["bashdefault","default","dirnames","filenames","noquote","nosort","nospace","plusdirs"];function Ls(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 _(`compopt: -o: option requires an argument
|
|
73
|
+
`,2);let u=t[a];if(!bn.includes(u))return _(`compopt: ${u}: invalid option name
|
|
74
74
|
`,2);n.push(u)}else if(l==="+o"){if(a++,a>=t.length)return _(`compopt: +o: option requires an argument
|
|
75
|
-
`,2);let u=t[a];if(!
|
|
75
|
+
`,2);let u=t[a];if(!bn.includes(u))return _(`compopt: ${u}: invalid option name
|
|
76
76
|
`,2);i.push(u)}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 u of n)l.add(u);for(let u of i)l.delete(u);return a.options=l.size>0?Array.from(l):void 0,e.state.completionSpecs.set("__default__",a),F("")}if(r){let a=e.state.completionSpecs.get("__empty__")??{},l=new Set(a.options??[]);for(let u of n)l.add(u);for(let u of i)l.delete(u);return a.options=l.size>0?Array.from(l):void 0,e.state.completionSpecs.set("__empty__",a),F("")}if(o.length>0){for(let a of o){let l=e.state.completionSpecs.get(a)??{},u=new Set(l.options??[]);for(let c of n)u.add(c);for(let c of i)u.delete(c);l.options=u.size>0?Array.from(u):void 0,e.state.completionSpecs.set(a,l)}return F("")}return _(`compopt: not currently executing completion function
|
|
77
|
-
`,1)}function Fs(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new
|
|
77
|
+
`,1)}function Fs(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new Ie;return L}if(t.length>1)throw new B(1,"",`bash: continue: too many arguments
|
|
78
78
|
`);let s=1;if(t.length>0){let r=Number.parseInt(t[0],10);if(Number.isNaN(r)||r<1)throw new B(1,"",`bash: continue: ${t[0]}: numeric argument required
|
|
79
|
-
`);s=r}throw new fe(s)}function G(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 Ms(e){for(let t=0;t<e.length;t++){let s=e.charCodeAt(t);if(s<32||s===127)return!0}return!1}function Ws(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 Xt(e){return Ms(e)?Ws(e):/^[a-zA-Z0-9_/.:\-@%+,=]*$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function
|
|
80
|
-
`;else{let f=c.map(d=>{let h=e.state.env.get(`${i}_${d}`)??"",
|
|
81
|
-
`}continue}let l=te(e,i);if(l.length>0){let c=l.map(f=>{let d=e.state.env.get(`${i}_${f}`)??"";return`[${f}]=${
|
|
79
|
+
`);s=r}throw new fe(s)}function G(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 Ms(e){for(let t=0;t<e.length;t++){let s=e.charCodeAt(t);if(s<32||s===127)return!0}return!1}function Ws(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 Xt(e){return Ms(e)?Ws(e):/^[a-zA-Z0-9_/.:\-@%+,=]*$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function He(e){return Ms(e)?Ws(e):`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function zs(e){return Ms(e)?Ws(e):`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function $n(e,t){let s="";return e.state.integerVars?.has(t)&&(s+="i"),e.state.lowercaseVars?.has(t)&&(s+="l"),me(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 Vs(e){return e===""?"''":/[\s'\\]/.test(e)?`'${e.replace(/'/g,"'\\''")}'`:e}function En(e,t){let s="",r="",n=!1;for(let i of t){let o=$n(e,i);if(e.state.associativeArrays?.has(i)){let c=Re(e,i);if(c.length===0)s+=`declare -A ${i}=()
|
|
80
|
+
`;else{let f=c.map(d=>{let h=e.state.env.get(`${i}_${d}`)??"",m=Vs(h);return`['${d}']=${m}`});s+=`declare -A ${i}=(${f.join(" ")})
|
|
81
|
+
`}continue}let l=te(e,i);if(l.length>0){let c=l.map(f=>{let d=e.state.env.get(`${i}_${f}`)??"";return`[${f}]=${He(d)}`});s+=`declare -a ${i}=(${c.join(" ")})
|
|
82
82
|
`;continue}if(e.state.env.has(`${i}__length`)){s+=`declare -a ${i}=()
|
|
83
83
|
`;continue}let u=e.state.env.get(i);if(u!==void 0)s+=`declare ${o} ${i}=${zs(u)}
|
|
84
84
|
`;else{let c=e.state.declaredVars?.has(i),f=e.state.localVarDepth?.has(i);c||f?s+=`declare ${o} ${i}
|
|
85
85
|
`:(r+=`bash: declare: ${i}: not found
|
|
86
|
-
`,n=!0)}}return P(s,r,n?1:0)}function
|
|
86
|
+
`,n=!0)}}return P(s,r,n?1:0)}function Sn(e,t){let{filterExport:s,filterReadonly:r,filterNameref:n,filterIndexedArray:i,filterAssocArray:o}=t,a=s||r||n||i||o,l="",u=new Set;for(let f of e.state.env.keys()){if(f.startsWith("BASH_"))continue;if(f.endsWith("__length")){let h=f.slice(0,-8);u.add(h);continue}let d=f.lastIndexOf("_");if(d>0){let h=f.slice(0,d),m=f.slice(d+1);if(/^\d+$/.test(m)||e.state.associativeArrays?.has(h)){u.add(h);continue}}u.add(f)}if(e.state.localVarDepth)for(let f of e.state.localVarDepth.keys())u.add(f);if(e.state.associativeArrays)for(let f of e.state.associativeArrays)u.add(f);let c=Array.from(u).sort();for(let f of c){let d=$n(e,f),h=e.state.associativeArrays?.has(f),m=te(e,f),p=!h&&(m.length>0||e.state.env.has(`${f}__length`));if(a&&(o&&!h||i&&!p||s&&!e.state.exportedVars?.has(f)||r&&!e.state.readonlyVars?.has(f)||n&&!me(e,f)))continue;if(h){let b=Re(e,f);if(b.length===0)l+=`declare -A ${f}=()
|
|
87
87
|
`;else{let v=b.map(A=>{let g=e.state.env.get(`${f}_${A}`)??"",w=Vs(g);return`['${A}']=${w}`});l+=`declare -A ${f}=(${v.join(" ")})
|
|
88
|
-
`}continue}if(
|
|
88
|
+
`}continue}if(m.length>0){let b=m.map(v=>{let A=e.state.env.get(`${f}_${v}`)??"";return`[${v}]=${He(A)}`});l+=`declare -a ${f}=(${b.join(" ")})
|
|
89
89
|
`;continue}if(e.state.env.has(`${f}__length`)){l+=`declare -a ${f}=()
|
|
90
|
-
`;continue}let
|
|
91
|
-
`)}return F(l)}function
|
|
90
|
+
`;continue}let y=e.state.env.get(f);y!==void 0&&(l+=`declare ${d} ${f}=${zs(y)}
|
|
91
|
+
`)}return F(l)}function An(e){let t="",s=Array.from(e.state.associativeArrays??[]).sort();for(let r of s){let n=Re(e,r);if(n.length===0)t+=`declare -A ${r}=()
|
|
92
92
|
`;else{let i=n.map(o=>{let a=e.state.env.get(`${r}_${o}`)??"",l=Vs(a);return`['${o}']=${l}`});t+=`declare -A ${r}=(${i.join(" ")})
|
|
93
|
-
`}}return F(t)}function
|
|
94
|
-
`;else{let o=i.map(a=>{let l=e.state.env.get(`${n}_${a}`)??"";return`[${a}]=${
|
|
95
|
-
`}}return F(t)}function
|
|
96
|
-
`)}return F(t)}function Bs(e,t){e.state.integerVars??=new Set,e.state.integerVars.add(t)}function pt(e,t){return e.state.integerVars?.has(t)??!1}function js(e,t){e.state.lowercaseVars??=new Set,e.state.lowercaseVars.add(t),e.state.uppercaseVars?.delete(t)}function ba(e,t){return e.state.lowercaseVars?.has(t)??!1}function Hs(e,t){e.state.uppercaseVars??=new Set,e.state.uppercaseVars.add(t),e.state.lowercaseVars?.delete(t)}function $a(e,t){return e.state.uppercaseVars?.has(t)??!1}function at(e,t,s){return ba(e,t)?s.toLowerCase():$a(e,t)?s.toUpperCase():s}async function
|
|
97
|
-
`,2)}}}else if(x==="-i")f=!0;else if(x==="-l")d=!0;else if(x==="-u")h=!0;else if(x==="-f")
|
|
98
|
-
`,2);else b.push(x)}let A=e.state.localScopes.length>0&&!
|
|
93
|
+
`}}return F(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=te(e,n);if(i.length===0)t+=`declare -a ${n}=()
|
|
94
|
+
`;else{let o=i.map(a=>{let l=e.state.env.get(`${n}_${a}`)??"";return`[${a}]=${He(l)}`});t+=`declare -a ${n}=(${o.join(" ")})
|
|
95
|
+
`}}return F(t)}function Cn(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)||te(e,n).length>0||e.state.env.has(`${n}__length`))continue;let a=e.state.env.get(n);a!==void 0&&(t+=`${n}=${Xt(a)}
|
|
96
|
+
`)}return F(t)}function Bs(e,t){e.state.integerVars??=new Set,e.state.integerVars.add(t)}function pt(e,t){return e.state.integerVars?.has(t)??!1}function js(e,t){e.state.lowercaseVars??=new Set,e.state.lowercaseVars.add(t),e.state.uppercaseVars?.delete(t)}function ba(e,t){return e.state.lowercaseVars?.has(t)??!1}function Hs(e,t){e.state.uppercaseVars??=new Set,e.state.uppercaseVars.add(t),e.state.lowercaseVars?.delete(t)}function $a(e,t){return e.state.uppercaseVars?.has(t)??!1}function at(e,t,s){return ba(e,t)?s.toLowerCase():$a(e,t)?s.toUpperCase():s}async function Pn(e,t){try{let s=new V,r=Q(s,t),n=await j(e,r.expression);return String(n)}catch{return"0"}}function Ea(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 Us(e,t){let s=!1,r=!1,n=!1,i=!1,o=!1,a=!1,l=!1,u=!1,c=!1,f=!1,d=!1,h=!1,m=!1,p=!1,y=!1,b=[];for(let k=0;k<t.length;k++){let x=t[k];if(x==="-a")s=!0;else if(x==="-A")r=!0;else if(x==="-r")n=!0;else if(x==="-x")i=!0;else if(x==="-p")o=!0;else if(x==="-n")a=!0;else if(x==="+n")l=!0;else if(x==="+a")u=!0;else if(x==="+x")c=!0;else if(x==="--"){b.push(...t.slice(k+1));break}else if(x.startsWith("+")){for(let C of x.slice(1))if(C==="n")l=!0;else if(C==="a")u=!0;else if(C==="x")c=!0;else if(C!=="r"){if(C!=="i"){if(!(C==="f"||C==="F"))return P("",`bash: typeset: +${C}: invalid option
|
|
97
|
+
`,2)}}}else if(x==="-i")f=!0;else if(x==="-l")d=!0;else if(x==="-u")h=!0;else if(x==="-f")m=!0;else if(x==="-F")p=!0;else if(x==="-g")y=!0;else if(x.startsWith("-"))for(let C of x.slice(1))if(C==="a")s=!0;else if(C==="A")r=!0;else if(C==="r")n=!0;else if(C==="x")i=!0;else if(C==="p")o=!0;else if(C==="n")a=!0;else if(C==="i")f=!0;else if(C==="l")d=!0;else if(C==="u")h=!0;else if(C==="f")m=!0;else if(C==="F")p=!0;else if(C==="g")y=!0;else return P("",`bash: typeset: -${C}: invalid option
|
|
98
|
+
`,2);else b.push(x)}let A=e.state.localScopes.length>0&&!y,g=k=>{if(!A)return;let x=e.state.localScopes[e.state.localScopes.length-1];x.has(k)||x.set(k,e.state.env.get(k))},w=k=>{if(!A)return;let x=e.state.localScopes[e.state.localScopes.length-1];x.has(k)||x.set(k,e.state.env.get(k));let C=`${k}_`;for(let O of e.state.env.keys())O.startsWith(C)&&!O.includes("__")&&(x.has(O)||x.set(O,e.state.env.get(O)));let N=`${k}__length`;e.state.env.has(N)&&!x.has(N)&&x.set(N,e.state.env.get(N))},$=k=>{A&&We(e,k)};if(p){if(b.length===0){let C=Array.from(e.state.functions.keys()).sort(),N="";for(let O of C)N+=`declare -f ${O}
|
|
99
99
|
`;return F(N)}let k=!0,x="";for(let C of b)e.state.functions.has(C)?x+=`${C}
|
|
100
|
-
`:k=!1;return P(x,"",k?0:1)}if(
|
|
100
|
+
`:k=!1;return P(x,"",k?0:1)}if(m){if(b.length===0){let x="",C=Array.from(e.state.functions.keys()).sort();for(let N of C)x+=`${N} ()
|
|
101
101
|
{
|
|
102
102
|
# function body
|
|
103
103
|
}
|
|
104
|
-
`;return F(x)}let k=!0;for(let x of b)e.state.functions.has(x)||(k=!1);return P("","",k?0:1)}if(o&&b.length>0)return
|
|
104
|
+
`;return F(x)}let k=!0;for(let x of b)e.state.functions.has(x)||(k=!1);return P("","",k?0:1)}if(o&&b.length>0)return En(e,b);if(o&&b.length===0)return Sn(e,{filterExport:i,filterReadonly:n,filterNameref:a,filterIndexedArray:s,filterAssocArray:r});if(b.length===0&&r&&!o)return An(e);if(b.length===0&&s&&!o)return _n(e);if(b.length===0&&!o)return Cn(e);let E="",T=0;for(let k of b){let x=k.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(x&&!u){let S=x[1],D=x[2];if(r&&te(e,S).length>0){E+=`bash: declare: ${S}: cannot convert indexed to associative array
|
|
105
105
|
`,T=1;continue}if((s||!r&&!s)&&e.state.associativeArrays?.has(S)){E+=`bash: declare: ${S}: cannot convert associative to indexed array
|
|
106
|
-
`,T=1;continue}if(w(S),r&&(e.state.associativeArrays??=new Set,e.state.associativeArrays.add(S)),Se(e,S),e.state.env.delete(S),e.state.env.delete(`${S}__length`),r&&D.includes("[")){let R=Ut(D);for(let[J,z]of R){let K=G(e,z);e.state.env.set(`${S}_${J}`,K)}}else if(r){let R=Ce(D);for(let J=0;J<R.length;J+=2){let z=R[J],K=J+1<R.length?G(e,R[J+1]):"";e.state.env.set(`${S}_${z}`,K)}}else{let R=Ce(D);if(R.some(z=>/^\[[^\]]+\]=/.test(z))){let z=0;for(let K of R){let re=K.match(/^\[([^\]]+)\]=(.*)$/);if(re){let ce=re[1],qe=re[2],Ni=G(e,qe),lt;if(/^-?\d+$/.test(ce))lt=Number.parseInt(ce,10);else try{let ki=new V,Oi=Q(ki,ce);lt=await j(e,Oi.expression)}catch{lt=0}e.state.env.set(`${S}_${lt}`,Ni),z=lt+1}else{let ce=G(e,K);e.state.env.set(`${S}_${z}`,ce),z++}}}else{for(let z=0;z<R.length;z++)e.state.env.set(`${S}_${z}`,R[z]);e.state.env.set(`${S}__length`,String(R.length))}}$(S),n&&le(e,S),i&&$e(e,S);continue}if(l){let S=k.includes("=")?k.slice(0,k.indexOf("=")):k;if(
|
|
106
|
+
`,T=1;continue}if(w(S),r&&(e.state.associativeArrays??=new Set,e.state.associativeArrays.add(S)),Se(e,S),e.state.env.delete(S),e.state.env.delete(`${S}__length`),r&&D.includes("[")){let R=Ut(D);for(let[J,z]of R){let K=G(e,z);e.state.env.set(`${S}_${J}`,K)}}else if(r){let R=Ce(D);for(let J=0;J<R.length;J+=2){let z=R[J],K=J+1<R.length?G(e,R[J+1]):"";e.state.env.set(`${S}_${z}`,K)}}else{let R=Ce(D);if(R.some(z=>/^\[[^\]]+\]=/.test(z))){let z=0;for(let K of R){let re=K.match(/^\[([^\]]+)\]=(.*)$/);if(re){let ce=re[1],qe=re[2],Ni=G(e,qe),lt;if(/^-?\d+$/.test(ce))lt=Number.parseInt(ce,10);else try{let ki=new V,Oi=Q(ki,ce);lt=await j(e,Oi.expression)}catch{lt=0}e.state.env.set(`${S}_${lt}`,Ni),z=lt+1}else{let ce=G(e,K);e.state.env.set(`${S}_${z}`,ce),z++}}}else{for(let z=0;z<R.length;z++)e.state.env.set(`${S}_${z}`,R[z]);e.state.env.set(`${S}__length`,String(R.length))}}$(S),n&&le(e,S),i&&$e(e,S);continue}if(l){let S=k.includes("=")?k.slice(0,k.indexOf("=")):k;if(Tr(e,S),!k.includes("="))continue}if(c){let S=k.includes("=")?k.slice(0,k.indexOf("=")):k;if(Ot(e,S),!k.includes("="))continue}let C=Ea(k);if(C){let{name:S,indexExpr:D,value:R}=C,J=ee(e,S);if(J)return J;w(S);let z;try{let re=new V,ce=Q(re,D);z=await j(e,ce.expression)}catch{let re=parseInt(D,10);z=Number.isNaN(re)?0:re}e.state.env.set(`${S}_${z}`,R);let K=parseInt(e.state.env.get(`${S}__length`)??"0",10);z>=K&&e.state.env.set(`${S}__length`,String(z+1)),$(S),n&&le(e,S),i&&$e(e,S);continue}let N=k.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(N&&!u){let S=N[1],D=N[2],R=ee(e,S);if(R)return R;w(S);let J=Ce(D);if(e.state.associativeArrays?.has(S)){let z=Ut(D);for(let[K,re]of z){let ce=G(e,re);e.state.env.set(`${S}_${K}`,ce)}}else{let z=te(e,S),K=0,re=e.state.env.get(S);z.length===0&&re!==void 0?(e.state.env.set(`${S}_0`,re),e.state.env.delete(S),K=1):z.length>0&&(K=Math.max(...z)+1);for(let qe=0;qe<J.length;qe++)e.state.env.set(`${S}_${K+qe}`,G(e,J[qe]));let ce=K+J.length;e.state.env.set(`${S}__length`,String(ce))}$(S),n&&le(e,S),i&&$e(e,S);continue}let O=k.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(O){let S=O[1],D=G(e,O[2]),R=ee(e,S);if(R)return R;g(S),f&&Bs(e,S),d&&js(e,S),h&&Hs(e,S);let z=te(e,S).length>0||e.state.associativeArrays?.has(S);if(pt(e,S)){let K=e.state.env.get(S)??"0",re=parseInt(K,10)||0,ce=parseInt(await Pn(e,D),10)||0;D=String(re+ce),e.state.env.set(S,D)}else if(z){D=at(e,S,D);let K=`${S}_0`,re=e.state.env.get(K)??"";e.state.env.set(K,re+D)}else{D=at(e,S,D);let K=e.state.env.get(S)??"";e.state.env.set(S,K+D)}$(S),n&&le(e,S),i&&$e(e,S),e.state.options.allexport&&!c&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(S));continue}if(k.includes("=")){let S=k.indexOf("="),D=k.slice(0,S),R=k.slice(S+1);if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(D)){E+=`bash: typeset: \`${D}': not a valid identifier
|
|
107
107
|
`,T=1;continue}let J=ee(e,D);if(J)return J;if(g(D),a){if(R!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(R)){E+=`bash: declare: \`${R}': invalid variable name for name reference
|
|
108
|
-
`,T=1;continue}e.state.env.set(D,R),
|
|
109
|
-
`,T=1;continue}if(s||r?w(S):g(S),a){
|
|
108
|
+
`,T=1;continue}e.state.env.set(D,R),Oe(e,D),R!==""&&ps(e,R)&&hs(e,D),$(D),n&&le(e,D),i&&$e(e,D);continue}if(f&&Bs(e,D),d&&js(e,D),h&&Hs(e,D),pt(e,D)&&(R=await Pn(e,R)),R=at(e,D,R),me(e,D)){let z=Le(e,D);z&&z!==D?e.state.env.set(z,R):e.state.env.set(D,R)}else e.state.env.set(D,R);$(D),n&&le(e,D),i&&$e(e,D),e.state.options.allexport&&!c&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(D))}else{let S=k;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(S)){E+=`bash: typeset: \`${S}': not a valid identifier
|
|
109
|
+
`,T=1;continue}if(s||r?w(S):g(S),a){Oe(e,S);let R=e.state.env.get(S);R!==void 0&&R!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(R)?Ir(e,S):R&&ps(e,R)&&hs(e,S),$(S),n&&le(e,S),i&&$e(e,S);continue}if(f&&Bs(e,S),d&&js(e,S),h&&Hs(e,S),r){if(te(e,S).length>0){E+=`bash: declare: ${S}: cannot convert indexed to associative array
|
|
110
110
|
`,T=1;continue}e.state.associativeArrays??=new Set,e.state.associativeArrays.add(S)}let D=Array.from(e.state.env.keys()).some(R=>R.startsWith(`${S}_`)&&!R.startsWith(`${S}__length`));!e.state.env.has(S)&&!D&&(s||r?e.state.env.set(`${S}__length`,"0"):(e.state.declaredVars??=new Set,e.state.declaredVars.add(S))),$(S),n&&le(e,S),i&&$e(e,S)}}return P("",E,T)}async function Zs(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 u=e.state.env.get(l);if(u!==void 0){let c=u.replace(/\\/g,"\\\\").replace(/"/g,'\\"');o+=`declare -r ${l}="${c}"
|
|
111
|
-
`}}return F(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],h=ee(e,f);if(h)return h;let
|
|
111
|
+
`}}return F(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],h=ee(e,f);if(h)return h;let m=Ce(d);if(e.state.associativeArrays?.has(f)){let p=Ut(d);for(let[y,b]of p){let v=G(e,b);e.state.env.set(`${f}_${y}`,v)}}else{let p=te(e,f),y=0,b=e.state.env.get(f);p.length===0&&b!==void 0?(e.state.env.set(`${f}_0`,b),e.state.env.delete(f),y=1):p.length>0&&(y=Math.max(...p)+1);for(let A=0;A<m.length;A++)e.state.env.set(`${f}_${y+A}`,G(e,m[A]));let v=y+m.length;e.state.env.set(`${f}__length`,String(v))}le(e,f);continue}let l=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(l){let f=l[1],d=G(e,l[2]),h=ee(e,f);if(h)return h;let m=e.state.env.get(f)??"";e.state.env.set(f,m+d),le(e,f);continue}let u=fn(o);if(u.value===void 0&&!u.isArray){le(e,u.name);continue}let c=await dn(e,u,{makeReadonly:!0});if(c)return c}return L}function qs(e){return e.state.directoryStack??=[],e.state.directoryStack}function mt(e,t){return t&&e===t?"~":t&&e.startsWith(`${t}/`)?`~${e.slice(t.length)}`:e}function Sa(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 Gs(e,t){let s=qs(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 _(`bash: pushd: too many arguments
|
|
112
112
|
`,2);r=t[a+1],a++}}else{if(l.startsWith("-")&&l!=="-")return _(`bash: pushd: ${l}: invalid option
|
|
113
113
|
`,2);if(r!==void 0)return _(`bash: pushd: too many arguments
|
|
114
114
|
`,2);r=l}}if(r===void 0){if(s.length<2)return _(`bash: pushd: no other directory
|
|
@@ -134,25 +134,25 @@ eval: usage: eval [arg ...]
|
|
|
134
134
|
`,s=2):s=(i%256+256)%256}throw new B(s,"",r)}function Qs(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 u of l){let c=e.state.env.get(u);if(c!==void 0){let f=c.replace(/\\/g,"\\\\").replace(/"/g,'\\"');o+=`declare -x ${u}="${f}"
|
|
135
135
|
`}}return F(o)}if(s){for(let o of r){let a,l;if(o.includes("=")){let u=o.indexOf("=");a=o.slice(0,u),l=G(e,o.slice(u+1)),e.state.env.set(a,l)}else a=o;Ot(e,a)}return L}let n="",i=0;for(let o of r){let a,l,u=!1,c=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(c)a=c[1],l=G(e,c[2]),u=!0;else if(o.includes("=")){let f=o.indexOf("=");a=o.slice(0,f),l=G(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
|
|
136
136
|
`,i=1;continue}if(l!==void 0)if(u){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,"");$e(e,a)}return P("",n,i)}function Qt(e,t){if(t.length<2)return _(`bash: getopts: usage: getopts optstring name [arg ...]
|
|
137
|
-
`);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 p=Number.parseInt(e.state.env.get("#")||"0",10);a=[];for(let
|
|
137
|
+
`);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 p=Number.parseInt(e.state.env.get("#")||"0",10);a=[];for(let y=1;y<=p;y++)a.push(e.state.env.get(String(y))||"")}let l=Number.parseInt(e.state.env.get("OPTIND")||"1",10);l<1&&(l=1);let u=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 c=a[l-1];if(!c||c==="-"||!c.startsWith("-"))return n||e.state.env.set(r,"?"),{exitCode:n?2:1,stdout:"",stderr:""};if(c==="--")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=u===0?1:u,d=c[f];if(!d)return e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"),Qt(e,t);let h=o.indexOf(d);if(h===-1){let p="";return i?e.state.env.set("OPTARG",d):p=`bash: illegal option -- ${d}
|
|
138
138
|
`,n||e.state.env.set(r,"?"),f+1<c.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:p}}if(h+1<o.length&&o[h+1]===":")if(f+1<c.length)e.state.env.set("OPTARG",c.slice(f+1)),e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0");else{if(l>=a.length){let p="";return i?(e.state.env.set("OPTARG",d),n||e.state.env.set(r,":")):(p=`bash: option requires an argument -- ${d}
|
|
139
|
-
`,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:p}}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<c.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 Js(e,t){e.state.hashTable||(e.state.hashTable=new Map);let s=!1,r=!1,n=!1,i=!1,o=!1,a="",l=[],u=0;for(;u<t.length;){let
|
|
140
|
-
`,1);a=t[u],u++}else if(
|
|
139
|
+
`,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:p}}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<c.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 Js(e,t){e.state.hashTable||(e.state.hashTable=new Map);let s=!1,r=!1,n=!1,i=!1,o=!1,a="",l=[],u=0;for(;u<t.length;){let m=t[u];if(m==="--"){u++,l.push(...t.slice(u));break}if(m==="-r")s=!0,u++;else if(m==="-d")r=!0,u++;else if(m==="-l")n=!0,u++;else if(m==="-t")o=!0,u++;else if(m==="-p"){if(i=!0,u++,u>=t.length)return _(`bash: hash: -p: option requires an argument
|
|
140
|
+
`,1);a=t[u],u++}else if(m.startsWith("-")&&m.length>1){for(let p of m.slice(1))if(p==="r")s=!0;else if(p==="d")r=!0;else if(p==="l")n=!0;else if(p==="t")o=!0;else return p==="p"?_(`bash: hash: -p: option requires an argument
|
|
141
141
|
`,1):_(`bash: hash: -${p}: invalid option
|
|
142
|
-
`,1);u++}else l.push(
|
|
143
|
-
`,1);let
|
|
144
|
-
`,
|
|
145
|
-
`,1);let
|
|
146
|
-
`:
|
|
147
|
-
`:(
|
|
148
|
-
`,p=!0)}return p?{exitCode:1,stdout:
|
|
149
|
-
`,1);let
|
|
150
|
-
`);let
|
|
151
|
-
`;else{
|
|
152
|
-
`;for(let[,p]of e.state.hashTable)
|
|
153
|
-
`}return F(
|
|
154
|
-
`,c=!0;continue}let p=!1;for(let
|
|
155
|
-
`,c=!0)}return c?_(f,1):L}var
|
|
142
|
+
`,1);u++}else l.push(m),u++}if(s)return e.state.hashTable.clear(),L;if(r){if(l.length===0)return _(`bash: hash: -d: option requires an argument
|
|
143
|
+
`,1);let m=!1,p="";for(let y of l)e.state.hashTable.has(y)?e.state.hashTable.delete(y):(p+=`bash: hash: ${y}: not found
|
|
144
|
+
`,m=!0);return m?_(p,1):L}if(o){if(l.length===0)return _(`bash: hash: -t: option requires an argument
|
|
145
|
+
`,1);let m="",p=!1,y="";for(let b of l){let v=e.state.hashTable.get(b);v?l.length>1?m+=`${b} ${v}
|
|
146
|
+
`:m+=`${v}
|
|
147
|
+
`:(y+=`bash: hash: ${b}: not found
|
|
148
|
+
`,p=!0)}return p?{exitCode:1,stdout:m,stderr:y}:F(m)}if(i){if(l.length===0)return _(`bash: hash: usage: hash [-lr] [-p pathname] [-dt] [name ...]
|
|
149
|
+
`,1);let m=l[0];return e.state.hashTable.set(m,a),L}if(l.length===0){if(e.state.hashTable.size===0)return F(`hash: hash table empty
|
|
150
|
+
`);let m="";if(n)for(let[p,y]of e.state.hashTable)m+=`builtin hash -p ${y} ${p}
|
|
151
|
+
`;else{m=`hits command
|
|
152
|
+
`;for(let[,p]of e.state.hashTable)m+=` 1 ${p}
|
|
153
|
+
`}return F(m)}let c=!1,f="",h=(e.state.env.get("PATH")||"/usr/bin:/bin").split(":");for(let m of l){if(m.includes("/")){f+=`bash: hash: ${m}: cannot use / in name
|
|
154
|
+
`,c=!0;continue}let p=!1;for(let y of h){if(!y)continue;let b=`${y}/${m}`;if(await e.fs.exists(b)){e.state.hashTable.set(m,b),p=!0;break}}p||(f+=`bash: hash: ${m}: not found
|
|
155
|
+
`,c=!0)}return c?_(f,1):L}var Nn=new Map([[":",[": [arguments]",`Null command.
|
|
156
156
|
No effect; the command does nothing.
|
|
157
157
|
Exit Status:
|
|
158
158
|
Always succeeds.`]],[".",[". filename [arguments]",`Execute commands from a file in the current shell.
|
|
@@ -497,31 +497,31 @@ eval: usage: eval [arg ...]
|
|
|
497
497
|
job specification, and reports its termination status.
|
|
498
498
|
Exit Status:
|
|
499
499
|
Returns the status of the last ID; fails if ID is invalid or an invalid
|
|
500
|
-
option is given.`]]]),
|
|
500
|
+
option is given.`]]]),kn=[...Nn.keys()].sort();function er(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 u=1;u<l.length;u++){let c=l[u];if(c==="s")s=!0;else return _(`bash: help: -${c}: invalid option
|
|
501
501
|
`,2)}n++}else r.push(l),n++}if(r.length===0)return _a();let i="",o=!1,a="";for(let l of r){let u=Aa(l);if(u.length===0){a+=`bash: help: no help topics match \`${l}'. Try \`help help' or \`man -k ${l}' or \`info ${l}'.
|
|
502
|
-
`,o=!0;continue}for(let c of u){let f=
|
|
502
|
+
`,o=!0;continue}for(let c of u){let f=Nn.get(c);if(!f)continue;let[d,h]=f;s?i+=`${c}: ${d}
|
|
503
503
|
`:i+=`${c}: ${d}
|
|
504
504
|
${h}
|
|
505
|
-
`}}return{exitCode:o?1:0,stdout:i,stderr:a}}function Aa(e){let t=e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,"."),s=ct(`^${t}$`);return
|
|
505
|
+
`}}return{exitCode:o?1:0,stdout:i,stderr:a}}function Aa(e){let t=e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,"."),s=ct(`^${t}$`);return kn.filter(r=>s.test(r))}function _a(){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=kn.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 F(`${e.join(`
|
|
506
506
|
`)}
|
|
507
507
|
`)}function Ca(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 tr(e,t){if(t.length===0)return _(`bash: let: expression expected
|
|
508
508
|
`);let s=Ca(t),r=0;for(let n of s)try{let o=ve(`(( ${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 j(e,a.expression.expression))}}catch(i){return _(`bash: let: ${n}: ${i.message}
|
|
509
509
|
`)}return P("","",r===0?1:0)}async function sr(e,t){if(e.state.localScopes.length===0)return _(`bash: local: can only be used in a function
|
|
510
510
|
`);let s=e.state.localScopes[e.state.localScopes.length-1],r="",n=0,i=!1,o=!1,a=!1,l=[];for(let u of t)if(u==="-n")i=!0;else if(u==="-a")o=!0;else if(u==="-p")a=!0;else if(u.startsWith("-")&&!u.includes("="))for(let c of u.slice(1))c==="n"?i=!0:c==="a"?o=!0:c==="p"&&(a=!0);else l.push(u);if(l.length===0){let u="",c=Array.from(s.keys()).filter(f=>!f.includes("_")||!f.match(/_\d+$/)).filter(f=>!f.includes("__length")).sort();for(let f of c){let d=e.state.env.get(f);d!==void 0&&(u+=`${f}=${d}
|
|
511
511
|
`)}return P(u,"",0)}for(let u of l){let c,f,d=u.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(d){c=d[1];let b=d[2];if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(c)){r+=`bash: local: \`${u}': not a valid identifier
|
|
512
|
-
`,n=1;continue}if(ee(e,c,"bash"),!s.has(c)){s.set(c,e.state.env.get(c));let g=`${c}_`;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=`${c}_`;for(let g of e.state.env.keys())g.startsWith(v)&&!g.includes("__")&&e.state.env.delete(g);let A=Ce(b);for(let g=0;g<A.length;g++)e.state.env.set(`${c}_${g}`,A[g]);e.state.env.set(`${c}__length`,String(A.length)),
|
|
513
|
-
`,n=1;continue}let
|
|
514
|
-
`,n=1;continue}e.state.env.set(c,f),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(c))}else{let b=e.state.tempEnvBindings?.some(v=>v.has(c));!
|
|
512
|
+
`,n=1;continue}if(ee(e,c,"bash"),!s.has(c)){s.set(c,e.state.env.get(c));let g=`${c}_`;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=`${c}_`;for(let g of e.state.env.keys())g.startsWith(v)&&!g.includes("__")&&e.state.env.delete(g);let A=Ce(b);for(let g=0;g<A.length;g++)e.state.env.set(`${c}_${g}`,A[g]);e.state.env.set(`${c}__length`,String(A.length)),We(e,c),i&&Oe(e,c);continue}let h=u.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(h){c=h[1];let b=h[2];if(ee(e,c,"bash"),!s.has(c)){s.set(c,e.state.env.get(c));let E=`${c}_`;for(let k of e.state.env.keys())k.startsWith(E)&&!k.includes("__")&&(s.has(k)||s.set(k,e.state.env.get(k)));let T=`${c}__length`;e.state.env.has(T)&&!s.has(T)&&s.set(T,e.state.env.get(T))}let v=Ce(b),A=te(e,c),g=0,w=e.state.env.get(c);A.length===0&&w!==void 0?(e.state.env.set(`${c}_0`,w),e.state.env.delete(c),g=1):A.length>0&&(g=Math.max(...A)+1);for(let E=0;E<v.length;E++)e.state.env.set(`${c}_${g+E}`,G(e,v[E]));let $=g+v.length;e.state.env.set(`${c}__length`,String($)),We(e,c),i&&Oe(e,c);continue}let m=u.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(m){c=m[1];let b=G(e,m[2]);ee(e,c,"bash"),s.has(c)||s.set(c,e.state.env.get(c));let v=e.state.env.get(c)??"";e.state.env.set(c,v+b),We(e,c),i&&Oe(e,c);continue}let p=u.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([^\]]+)\]=(.*)$/s);if(p){c=p[1];let b=p[2],v=G(e,p[3]);if(ee(e,c,"bash"),!s.has(c)){s.set(c,e.state.env.get(c));let w=`${c}_`;for(let E of e.state.env.keys())E.startsWith(w)&&!E.includes("__")&&(s.has(E)||s.set(E,e.state.env.get(E)));let $=`${c}__length`;e.state.env.has($)&&!s.has($)&&s.set($,e.state.env.get($))}let A;try{let w=new V,$=Q(w,b);A=await j(e,$.expression)}catch{let w=parseInt(b,10);A=Number.isNaN(w)?0:w}e.state.env.set(`${c}_${A}`,v);let g=parseInt(e.state.env.get(`${c}__length`)??"0",10);A>=g&&e.state.env.set(`${c}__length`,String(A+1)),We(e,c),i&&Oe(e,c);continue}if(u.includes("=")){let b=u.indexOf("=");c=u.slice(0,b),f=G(e,u.slice(b+1))}else c=u;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(c)){r+=`bash: local: \`${u}': not a valid identifier
|
|
513
|
+
`,n=1;continue}let y=s.has(c);if(f!==void 0){let b=e.state.env.get(c);if(e.state.tempEnvBindings){let v=e.state.accessedTempEnvVars?.has(c),A=e.state.mutatedTempEnvVars?.has(c);if(!v&&!A)for(let g=e.state.tempEnvBindings.length-1;g>=0;g--){let w=e.state.tempEnvBindings[g];if(w.has(c)){b=w.get(c);break}}}hn(e,c,b)}if(!y){let b=e.state.env.get(c);if(e.state.tempEnvBindings)for(let v=e.state.tempEnvBindings.length-1;v>=0;v--){let A=e.state.tempEnvBindings[v];if(A.has(c)){b=A.get(c);break}}if(s.set(c,b),o){let v=`${c}_`;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 A=`${c}__length`;e.state.env.has(A)&&!s.has(A)&&s.set(A,e.state.env.get(A))}}if(o&&f===void 0){let b=`${c}_`;for(let v of e.state.env.keys())v.startsWith(b)&&!v.includes("__")&&e.state.env.delete(v);e.state.env.set(`${c}__length`,"0")}else if(f!==void 0){if(ee(e,c,"bash"),i&&f!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(f)){r+=`bash: local: \`${f}': invalid variable name for name reference
|
|
514
|
+
`,n=1;continue}e.state.env.set(c,f),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(c))}else{let b=e.state.tempEnvBindings?.some(v=>v.has(c));!y&&!b&&e.state.env.delete(c)}We(e,c),i&&Oe(e,c)}return P("",r,n)}function rr(e,t,s){let r=`
|
|
515
515
|
`,n=0,i=0,o=0,a=!1,l="MAPFILE",u=0;for(;u<t.length;){let v=t[u];v==="-d"&&u+1<t.length?(r=t[u+1]===""?"\0":t[u+1]||`
|
|
516
|
-
`,u+=2):v==="-n"&&u+1<t.length?(n=Number.parseInt(t[u+1],10)||0,u+=2):v==="-O"&&u+1<t.length?(i=Number.parseInt(t[u+1],10)||0,u+=2):v==="-s"&&u+1<t.length?(o=Number.parseInt(t[u+1],10)||0,u+=2):v==="-t"?(a=!0,u++):v==="-u"||v==="-C"||v==="-c"?u+=2:(v.startsWith("-")||(l=v),u++)}let c=s;!c&&e.state.groupStdin!==void 0&&(c=e.state.groupStdin);let f=[],d=c,h=0,
|
|
517
|
-
`,1);let w=d,$=w.indexOf("\0");$!==-1&&(w=w.substring(0,$)),f.push(w),h++}}break}let A=d.substring(0,v),g=A.indexOf("\0");if(g!==-1&&(A=A.substring(0,g)),!a&&r!=="\0"&&(A+=r),d=d.substring(v+r.length),
|
|
518
|
-
`,1);f.push(A),h++}i===0&&Se(e,l);for(let v=0;v<f.length;v++)e.state.env.set(`${l}_${i+v}`,f[v]);let
|
|
519
|
-
`,o="",a=-1,l=-1,u=null,c=-1,f=-1,d=[],h=0,
|
|
520
|
-
`){N+=2,A=N;continue}if(D===b){N+=2,C++,v+=D,A=N;continue}v+=D,N+=2,C++,A=N}else v+=S,N++,C++,A=N}g=C>=a||O,w(A)}else{A=0;let C=0;for(;C<
|
|
521
|
-
`){C+=2;continue}if(O===b){v+=O,C+=2;continue}v+=N,v+=O,C+=2;continue}v+=N,C++}if(C>=
|
|
516
|
+
`,u+=2):v==="-n"&&u+1<t.length?(n=Number.parseInt(t[u+1],10)||0,u+=2):v==="-O"&&u+1<t.length?(i=Number.parseInt(t[u+1],10)||0,u+=2):v==="-s"&&u+1<t.length?(o=Number.parseInt(t[u+1],10)||0,u+=2):v==="-t"?(a=!0,u++):v==="-u"||v==="-C"||v==="-c"?u+=2:(v.startsWith("-")||(l=v),u++)}let c=s;!c&&e.state.groupStdin!==void 0&&(c=e.state.groupStdin);let f=[],d=c,h=0,m=0,p=e.limits?.maxArrayElements??1e5;for(;d.length>0;){let v=d.indexOf(r);if(v===-1){if(d.length>0){if(m<o)m++;else if(n===0||h<n){if(i+h>=p)return P("",`mapfile: array element limit exceeded (${p})
|
|
517
|
+
`,1);let w=d,$=w.indexOf("\0");$!==-1&&(w=w.substring(0,$)),f.push(w),h++}}break}let A=d.substring(0,v),g=A.indexOf("\0");if(g!==-1&&(A=A.substring(0,g)),!a&&r!=="\0"&&(A+=r),d=d.substring(v+r.length),m<o){m++;continue}if(n>0&&h>=n)break;if(i+h>=p)return P("",`mapfile: array element limit exceeded (${p})
|
|
518
|
+
`,1);f.push(A),h++}i===0&&Se(e,l);for(let v=0;v<f.length;v++)e.state.env.set(`${l}_${i+v}`,f[v]);let y=parseInt(e.state.env.get(`${l}__length`)||"0",10),b=i+f.length;return e.state.env.set(`${l}__length`,String(Math.max(y,b))),e.state.groupStdin!==void 0&&!s&&(e.state.groupStdin=""),P("","",0)}function Pa(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 u=Number.parseInt(a.slice(0,l),10);if(Number.isNaN(u)||u<0)return null;let c=a.slice(l+1);return{path:i,position:u,content:c}}function Na(e,t,s){return`__rw__:${e.length}:${e}:${t}:${s}`}function nr(e,t,s,r=-1){let n=!1,i=`
|
|
519
|
+
`,o="",a=-1,l=-1,u=null,c=-1,f=-1,d=[],h=0,m=!1,p=(C,N)=>{let O=1;for(;O<C.length;){let S=C[O];if(S==="r")n=!0,O++;else if(S==="s")O++;else{if(S==="d")return O+1<C.length?(i=C.substring(O+1),{nextArgIndex:N+1}):N+1<t.length?(i=t[N+1],{nextArgIndex:N+2}):{nextArgIndex:N+1};if(S==="n"){if(O+1<C.length){let D=C.substring(O+1);return a=Number.parseInt(D,10),(Number.isNaN(a)||a<0)&&(m=!0,a=0),{nextArgIndex:N+1}}else if(N+1<t.length)return a=Number.parseInt(t[N+1],10),(Number.isNaN(a)||a<0)&&(m=!0,a=0),{nextArgIndex:N+2};return{nextArgIndex:N+1}}else if(S==="N"){if(O+1<C.length){let D=C.substring(O+1);return l=Number.parseInt(D,10),(Number.isNaN(l)||l<0)&&(m=!0,l=0),{nextArgIndex:N+1}}else if(N+1<t.length)return l=Number.parseInt(t[N+1],10),(Number.isNaN(l)||l<0)&&(m=!0,l=0),{nextArgIndex:N+2};return{nextArgIndex:N+1}}else{if(S==="a")return O+1<C.length?(u=C.substring(O+1),{nextArgIndex:N+1}):N+1<t.length?(u=t[N+1],{nextArgIndex:N+2}):{nextArgIndex:N+1};if(S==="p")return O+1<C.length?(o=C.substring(O+1),{nextArgIndex:N+1}):N+1<t.length?(o=t[N+1],{nextArgIndex:N+2}):{nextArgIndex:N+1};if(S==="u"){if(O+1<C.length){let D=C.substring(O+1);return c=Number.parseInt(D,10),Number.isNaN(c)||c<0?{nextArgIndex:-2}:{nextArgIndex:N+1}}else if(N+1<t.length)return c=Number.parseInt(t[N+1],10),Number.isNaN(c)||c<0?{nextArgIndex:-2}:{nextArgIndex:N+2};return{nextArgIndex:N+1}}else if(S==="t"){if(O+1<C.length){let D=C.substring(O+1);return f=Number.parseFloat(D),Number.isNaN(f)&&(f=0),{nextArgIndex:N+1}}else if(N+1<t.length)return f=Number.parseFloat(t[N+1]),Number.isNaN(f)&&(f=0),{nextArgIndex:N+2};return{nextArgIndex:N+1}}else if(S==="e"||S==="i"||S==="P"){if(S==="i"&&N+1<t.length)return{nextArgIndex:N+2};O++}else O++}}}return{nextArgIndex:N+1}};for(;h<t.length;){let C=t[h];if(C.startsWith("-")&&C.length>1&&C!=="--"){let N=p(C,h);if(N.nextArgIndex===-1)return{stdout:"",stderr:"",exitCode:2};if(N.nextArgIndex===-2)return{stdout:"",stderr:"",exitCode:1};h=N.nextArgIndex}else if(C==="--")for(h++;h<t.length;)d.push(t[h]),h++;else d.push(C),h++}if(m)return P("","",1);if(d.length===0&&u===null&&d.push("REPLY"),f===0){if(u)Se(e,u);else{for(let C of d)e.state.env.set(C,"");d.length===0&&e.state.env.set("REPLY","")}return P("","",0)}if(f<0&&f!==-1)return P("","",1);let y=s;c>=0?e.state.fileDescriptors?y=e.state.fileDescriptors.get(c)||"":y="":!y&&e.state.groupStdin!==void 0&&(y=e.state.groupStdin);let b=i===""?"\0":i,v="",A=0,g=!0,w=C=>{if(c>=0&&e.state.fileDescriptors)e.state.fileDescriptors.set(c,y.substring(C));else if(r>=0&&e.state.fileDescriptors){let N=e.state.fileDescriptors.get(r);if(N?.startsWith("__rw__:")){let O=Pa(N);if(O){let S=O.position+C;e.state.fileDescriptors.set(r,Na(O.path,S,O.content))}}}else e.state.groupStdin!==void 0&&!s&&(e.state.groupStdin=y.substring(C))};if(l>=0){let C=Math.min(l,y.length);v=y.substring(0,C),A=C,g=C>=l,w(A);let N=d[0]||"REPLY";e.state.env.set(N,v);for(let O=1;O<d.length;O++)e.state.env.set(d[O],"");return P("","",g?0:1)}else if(a>=0){let C=0,N=0,O=!1;for(;N<y.length&&C<a;){let S=y[N];if(S===b){A=N+1,O=!0;break}if(!n&&S==="\\"&&N+1<y.length){let D=y[N+1];if(D===b&&b===`
|
|
520
|
+
`){N+=2,A=N;continue}if(D===b){N+=2,C++,v+=D,A=N;continue}v+=D,N+=2,C++,A=N}else v+=S,N++,C++,A=N}g=C>=a||O,w(A)}else{A=0;let C=0;for(;C<y.length;){let N=y[C];if(N===b){A=C+b.length,g=!0;break}if(!n&&N==="\\"&&C+1<y.length){let O=y[C+1];if(O===`
|
|
521
|
+
`){C+=2;continue}if(O===b){v+=O,C+=2;continue}v+=N,v+=O,C+=2;continue}v+=N,C++}if(C>=y.length&&(g=!1,A=C,v.length===0&&y.length===0)){for(let N of d)e.state.env.set(N,"");return u&&Se(e,u),P("","",1)}w(A)}b===`
|
|
522
522
|
`&&v.endsWith(`
|
|
523
|
-
`)&&(v=v.slice(0,-1));let $=C=>n?C:C.replace(/\\(.)/g,"$1");if(d.length===1&&d[0]==="REPLY")return e.state.env.set("REPLY",$(v)),P("","",g?0:1);let E=
|
|
524
|
-
`,1);Se(e,u);for(let O=0;O<C.length;O++)e.state.env.set(`${u}_${O}`,$(C[O]));return P("","",g?0:1)}let T=d.length,{words:k,wordStarts:x}=ds(v,E,T,n);for(let C=0;C<d.length;C++){let N=d[C];if(C<d.length-1)e.state.env.set(N,$(k[C]??""));else if(C<x.length){let O=v.substring(x[C]);O=
|
|
523
|
+
`)&&(v=v.slice(0,-1));let $=C=>n?C:C.replace(/\\(.)/g,"$1");if(d.length===1&&d[0]==="REPLY")return e.state.env.set("REPLY",$(v)),P("","",g?0:1);let E=Or(e.state.env);if(u){let{words:C}=ds(v,E,void 0,n),N=e.limits?.maxArrayElements??1e5;if(C.length>N)return P("",`read: array element limit exceeded (${N})
|
|
524
|
+
`,1);Se(e,u);for(let O=0;O<C.length;O++)e.state.env.set(`${u}_${O}`,$(C[O]));return P("","",g?0:1)}let T=d.length,{words:k,wordStarts:x}=ds(v,E,T,n);for(let C=0;C<d.length;C++){let N=d[C];if(C<d.length-1)e.state.env.set(N,$(k[C]??""));else if(C<x.length){let O=v.substring(x[C]);O=Dr(O,E,n),O=$(O),e.state.env.set(N,O)}else e.state.env.set(N,"")}return P("","",g?0:1)}function ir(e,t){if(e.state.callDepth===0&&e.state.sourceDepth===0)return _("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 _(`bash: return: ${r}: numeric argument required
|
|
525
525
|
`,2);s=(n%256+256)%256}throw new oe(s)}var Jt=`set: usage: set [-eux] [+eux] [-o option] [+o option]
|
|
526
526
|
Options:
|
|
527
527
|
-e Exit immediately if a command exits with non-zero status
|
|
@@ -538,71 +538,71 @@ Options:
|
|
|
538
538
|
+o pipefail Disable pipefail
|
|
539
539
|
-o xtrace Same as -x
|
|
540
540
|
+o xtrace Disable xtrace
|
|
541
|
-
`,
|
|
541
|
+
`,On=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]]),Dn=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]]),Tn=["errexit","nounset","pipefail","verbose","xtrace","posix","allexport","noclobber","noglob","noexec","vi","emacs"],In=["braceexpand","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","nolog","notify","onecmd","physical","privileged"];function xn(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,tt(e))}function ka(e,t){return t+1<e.length&&!e[t+1].startsWith("-")&&!e[t+1].startsWith("+")}function Oa(e,t){let s=te(e,t);if(s.length===0)return`${t}=()`;let r=s.map(n=>{let i=e.state.env.get(`${t}_${n}`)??"";return`[${n}]=${He(i)}`});return`${t}=(${r.join(" ")})`}function Da(e){return/^[a-zA-Z0-9_]+$/.test(e)?e:`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function Ta(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`[${Da(n)}]=${He(i)}`});return`${t}=(${r.join(" ")} )`}function Ia(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 xa(e){return e.state.associativeArrays??new Set}function or(e,t){if(t.includes("--help"))return F(Jt);if(t.length===0){let r=Ia(e),n=xa(e),i=l=>{for(let u of n){let c=`${u}_`,f=`${u}__length`;if(l!==f&&l.startsWith(c)){if(l.slice(c.length).startsWith("_length"))continue;return!0}}return!1},o=[];for(let[l,u]of e.state.env){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(l)||r.has(l)||n.has(l))continue;let c=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)_(\d+)$/);if(c&&r.has(c[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,u])}let a=[];for(let[l,u]of o.sort(([c],[f])=>c<f?-1:c>f?1:0))a.push(`${l}=${Xt(u)}`);for(let l of[...r].sort((u,c)=>u<c?-1:u>c?1:0))a.push(Oa(e,l));for(let l of[...n].sort((u,c)=>u<c?-1:u>c?1:0))a.push(Ta(e,l));return a.sort((l,u)=>{let c=l.split("=")[0],f=u.split("=")[0];return c<f?-1:c>f?1:0}),F(a.length>0?`${a.join(`
|
|
542
542
|
`)}
|
|
543
|
-
`:"")}let s=0;for(;s<t.length;){let r=t[s];if((r==="-o"||r==="+o")&&ka(t,s)){let n=t[s+1];if(!
|
|
544
|
-
${Jt}`;if(e.state.options.posix)throw new we(1,"",i);return _(i)}
|
|
543
|
+
`:"")}let s=0;for(;s<t.length;){let r=t[s];if((r==="-o"||r==="+o")&&ka(t,s)){let n=t[s+1];if(!Dn.has(n)){let i=`bash: set: ${n}: invalid option name
|
|
544
|
+
${Jt}`;if(e.state.options.posix)throw new we(1,"",i);return _(i)}xn(e,Dn.get(n)??null,r==="-o"),s+=2;continue}if(r==="-o"){let n=Tn.map(a=>`${a.padEnd(16)}${e.state.options[a]?"on":"off"}`),i=In.map(a=>`${a.padEnd(16)}off`),o=[...n,...i].sort();return F(`${o.join(`
|
|
545
545
|
`)}
|
|
546
|
-
`)}if(r==="+o"){let n=
|
|
546
|
+
`)}if(r==="+o"){let n=Tn.map(a=>`set ${e.state.options[a]?"-o":"+o"} ${a}`),i=In.map(a=>`set +o ${a}`),o=[...n,...i].sort();return F(`${o.join(`
|
|
547
547
|
`)}
|
|
548
|
-
`)}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(!
|
|
549
|
-
${Jt}`;if(e.state.options.posix)throw new we(1,"",a);return _(a)}
|
|
548
|
+
`)}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(!On.has(o)){let a=`bash: set: ${r[0]}${o}: invalid option
|
|
549
|
+
${Jt}`;if(e.state.options.posix)throw new we(1,"",a);return _(a)}xn(e,On.get(o)??null,n)}s++;continue}if(r==="--")return ar(e,t.slice(s+1)),L;if(r==="-"){if(e.state.options.xtrace=!1,e.state.options.verbose=!1,tt(e),s+1<t.length)return ar(e,t.slice(s+1)),L;s++;continue}if(r==="+"){s++;continue}if(r.startsWith("-")||r.startsWith("+")){let n=`bash: set: ${r}: invalid option
|
|
550
550
|
${Jt}`;if(e.state.options.posix)throw new we(1,"",n);return _(n)}return ar(e,t.slice(s)),L}return L}function ar(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 lr(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
|
|
551
551
|
`;if(e.state.options.posix)throw new we(1,"",a);return _(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
|
|
552
552
|
`;if(e.state.options.posix)throw new we(1,"",o);return _(o)}if(s===0)return L;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(" ")),L}async function cr(e,t){let s=t;if(s.length>0&&s[0]==="--"&&(s=s.slice(1)),s.length===0)return P("",`bash: source: filename argument required
|
|
553
553
|
`,2);let r=s[0],n=null,i=null;if(r.includes("/")){let u=e.fs.resolvePath(e.state.cwd,r);try{i=await e.fs.readFile(u),n=u}catch{}}else{let c=(e.state.env.get("PATH")||"").split(":").filter(f=>f);for(let f of c){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 _(`bash: ${r}: No such file or directory
|
|
554
554
|
`);let o=new Map;if(s.length>1){for(let c=1;c<=9;c++)o.set(String(c),e.state.env.get(String(c)));o.set("#",e.state.env.get("#")),o.set("@",e.state.env.get("@"));let u=s.slice(1);e.state.env.set("#",String(u.length)),e.state.env.set("@",u.join(" "));for(let c=0;c<u.length&&c<9;c++)e.state.env.set(String(c+1),u[c]);for(let c=u.length+1;c<=9;c++)e.state.env.delete(String(c))}let a=e.state.currentSource,l=()=>{if(e.state.sourceDepth--,e.state.currentSource=a,s.length>1)for(let[u,c]of o)c===void 0?e.state.env.delete(u):e.state.env.set(u,c)};if(e.state.sourceDepth++,e.state.sourceDepth>e.limits.maxSourceDepth)throw e.state.sourceDepth--,new Y(`source: maximum nesting depth (${e.limits.maxSourceDepth}) exceeded, increase executionLimits.maxSourceDepth`,"recursion");e.state.currentSource=r;try{let u=ve(i),c=await e.executeScript(u);return l(),c}catch(u){if(l(),u instanceof B)throw u;if(u instanceof oe)return P(u.stdout,u.stderr,u.exitCode);if(u.name==="ParseException")return _(`bash: ${r}: ${u.message}
|
|
555
|
-
`);throw u}}function
|
|
556
|
-
`,n=1;continue}let v=await
|
|
555
|
+
`);throw u}}function Rn(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function Ra(e){return e.startsWith("'")&&e.endsWith("'")||e.startsWith('"')&&e.endsWith('"')}async function Ln(e,t){if(Ra(t))return null;try{let s=new V,r=Q(s,t);return await j(e,r.expression)}catch{let s=parseInt(t,10);return Number.isNaN(s)?0:s}}function Fn(e,t){if(e.state.localVarStack?.has(t)){let r=qt(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)Zt(e,t),e.state.localVarStack?.delete(t),e.state.fullyUnsetLocals=e.state.fullyUnsetLocals||new Map,e.state.fullyUnsetLocals.set(t,r.scopeIndex),ur(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),Zt(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||Zt(e,t),!0}}return!1}function ur(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 Mn(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 V().parseWordFromString(s,!0,!1);return I(e,n)}if(t.includes("$")){let r=new V().parseWordFromString(t,!1,!1);return I(e,r)}return t}async function fr(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 u=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(u){let d=u[1],h=u[2];if(h==="@"||h==="*"){let A=be(e,d);for(let[g]of A)e.state.env.delete(`${d}_${g}`);e.state.env.delete(d);continue}let m=e.state.associativeArrays?.has(d);if(m){let A=await Mn(e,h);e.state.env.delete(`${d}_${A}`);continue}let p=ms(e,d),y=e.state.declaredVars?.has(d);if((e.state.env.has(d)||y)&&!p&&!m){r+=`bash: unset: ${d}: not an array variable
|
|
556
|
+
`,n=1;continue}let v=await Ln(e,h);if(v===null&&p){r+=`bash: unset: ${h}: not a valid identifier
|
|
557
557
|
`,n=1;continue}if(v===null)continue;if(v<0){let A=be(e,d),g=A.length,w=e.state.currentLine;if(g===0){r+=`bash: line ${w}: unset: [${v}]: bad array subscript
|
|
558
558
|
`,n=1;continue}let $=g+v;if($<0){r+=`bash: line ${w}: unset: [${v}]: bad array subscript
|
|
559
|
-
`,n=1;continue}let E=A[$][0];e.state.env.delete(`${d}_${E}`);continue}e.state.env.delete(`${d}_${v}`);continue}if(!
|
|
560
|
-
`,n=1;continue}let c=i;if(me(e,i)){let d=
|
|
561
|
-
`,n=1;continue}let f=rt(e,c);if(f!==void 0&&f!==e.state.callDepth)
|
|
562
|
-
`,n=1;continue}let
|
|
563
|
-
`,n=1;continue}if(
|
|
564
|
-
`,n=1;continue}let v=m
|
|
565
|
-
`,n=1;continue}let A=p[v][0];e.state.env.delete(`${u}_${A}`);continue}e.state.env.delete(`${u}_${
|
|
566
|
-
`,n=1;continue}let a=i;if(me(e,i)){let u=
|
|
567
|
-
`,n=1;continue}let l=rt(e,a);if(l!==void 0&&l!==e.state.callDepth)
|
|
559
|
+
`,n=1;continue}let E=A[$][0];e.state.env.delete(`${d}_${E}`);continue}e.state.env.delete(`${d}_${v}`);continue}if(!Rn(i)){r+=`bash: unset: \`${i}': not a valid identifier
|
|
560
|
+
`,n=1;continue}let c=i;if(me(e,i)){let d=Le(e,i);d&&d!==i&&(c=d)}if(Be(e,c)){r+=`bash: unset: ${c}: cannot unset: readonly variable
|
|
561
|
+
`,n=1;continue}let f=rt(e,c);if(f!==void 0&&f!==e.state.callDepth)Fn(e,c);else if(e.state.fullyUnsetLocals?.has(c))e.state.env.delete(c);else if(f!==void 0){let d=e.state.accessedTempEnvVars?.has(c),h=e.state.mutatedTempEnvVars?.has(c);if((d||h)&&e.state.localVarStack?.has(c)){let m=qt(e,c);m?m.value===void 0?e.state.env.delete(c):e.state.env.set(c,m.value):e.state.env.delete(c)}else e.state.env.delete(c)}else ur(e,c)||e.state.env.delete(c);e.state.exportedVars?.delete(c);continue}let o=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(o){let u=o[1],c=o[2];if(c==="@"||c==="*"){let p=be(e,u);for(let[y]of p)e.state.env.delete(`${u}_${y}`);e.state.env.delete(u);continue}let f=e.state.associativeArrays?.has(u);if(f){let p=await Mn(e,c);e.state.env.delete(`${u}_${p}`);continue}let d=ms(e,u);if(e.state.env.has(u)&&!d&&!f){r+=`bash: unset: ${u}: not an array variable
|
|
562
|
+
`,n=1;continue}let m=await Ln(e,c);if(m===null&&d){r+=`bash: unset: ${c}: not a valid identifier
|
|
563
|
+
`,n=1;continue}if(m===null)continue;if(m<0){let p=be(e,u),y=p.length,b=e.state.currentLine;if(y===0){r+=`bash: line ${b}: unset: [${m}]: bad array subscript
|
|
564
|
+
`,n=1;continue}let v=y+m;if(v<0){r+=`bash: line ${b}: unset: [${m}]: bad array subscript
|
|
565
|
+
`,n=1;continue}let A=p[v][0];e.state.env.delete(`${u}_${A}`);continue}e.state.env.delete(`${u}_${m}`);continue}if(!Rn(i)){r+=`bash: unset: \`${i}': not a valid identifier
|
|
566
|
+
`,n=1;continue}let a=i;if(me(e,i)){let u=Le(e,i);u&&u!==i&&(a=u)}if(Be(e,a)){r+=`bash: unset: ${a}: cannot unset: readonly variable
|
|
567
|
+
`,n=1;continue}let l=rt(e,a);if(l!==void 0&&l!==e.state.callDepth)Fn(e,a);else if(e.state.fullyUnsetLocals?.has(a))e.state.env.delete(a);else if(l!==void 0){let u=e.state.accessedTempEnvVars?.has(a),c=e.state.mutatedTempEnvVars?.has(a);if((u||c)&&e.state.localVarStack?.has(a)){let f=qt(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 ur(e,a)||e.state.env.delete(a);e.state.exportedVars?.delete(a),e.state.functions.delete(i)}return P("",r,n)}var dr=["extglob","dotglob","nullglob","failglob","globstar","globskipdots","nocaseglob","nocasematch","expand_aliases","lastpipe","xpg_echo"],La=["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 es(e){return dr.includes(e)}function Fa(e){return La.includes(e)}function Wn(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 h=1;h<d.length;h++){let m=d[h];switch(m){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: -${m}: invalid option
|
|
568
568
|
`}}}l++}else break}for(;l<t.length;)a.push(t[l]),l++;if(o)return Ma(e,a,s,r,n,i);if(s&&r)return{exitCode:1,stdout:"",stderr:`shopt: cannot set and unset shell options simultaneously
|
|
569
|
-
`};if(a.length===0){if(s||r){let h=[];for(let
|
|
569
|
+
`};if(a.length===0){if(s||r){let h=[];for(let m of dr){let p=e.state.shoptOptions[m];s&&p?h.push(n?`shopt -s ${m}`:`${m} on`):r&&!p&&h.push(n?`shopt -u ${m}`:`${m} off`)}return{exitCode:0,stdout:h.length>0?`${h.join(`
|
|
570
570
|
`)}
|
|
571
|
-
`:"",stderr:""}}let d=[];for(let h of dr){let
|
|
571
|
+
`:"",stderr:""}}let d=[];for(let h of dr){let m=e.state.shoptOptions[h];d.push(n?`shopt ${m?"-s":"-u"} ${h}`:`${h} ${m?"on":"off"}`)}return{exitCode:0,stdout:`${d.join(`
|
|
572
572
|
`)}
|
|
573
573
|
`,stderr:""}}let u=!1,c="",f=[];for(let d of a){if(!es(d)&&!Fa(d)){c+=`shopt: ${d}: invalid shell option name
|
|
574
574
|
`,u=!0;continue}if(s)es(d)&&(e.state.shoptOptions[d]=!0,Es(e));else if(r)es(d)&&(e.state.shoptOptions[d]=!1,Es(e));else if(es(d)){let h=e.state.shoptOptions[d];i?h||(u=!0):n?(f.push(`shopt ${h?"-s":"-u"} ${d}`),h||(u=!0)):(f.push(`${d} ${h?"on":"off"}`),h||(u=!0))}else i?u=!0:n?(f.push(`shopt -u ${d}`),u=!0):(f.push(`${d} off`),u=!0)}return{exitCode:u?1:0,stdout:f.length>0?`${f.join(`
|
|
575
575
|
`)}
|
|
576
|
-
`:"",stderr:c}}function Ma(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 h of l){let
|
|
576
|
+
`:"",stderr:c}}function Ma(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 h of l){let m=a.includes(h),p=o.get(h),y=m||!p?!1:e.state.options[p];s&&!y||r&&y||d.push(n?`set ${y?"-o":"+o"} ${h}`:`${h} ${y?"on":"off"}`)}return{exitCode:0,stdout:d.length>0?`${d.join(`
|
|
577
577
|
`)}
|
|
578
|
-
`:"",stderr:""}}let u=!1,c="",f=[];for(let d of t){let h=o.has(d),
|
|
579
|
-
`,u=!0;continue}if(
|
|
578
|
+
`:"",stderr:""}}let u=!1,c="",f=[];for(let d of t){let h=o.has(d),m=a.includes(d);if(!h&&!m){c+=`shopt: ${d}: invalid option name
|
|
579
|
+
`,u=!0;continue}if(m){s||r||(i?u=!0:n?(f.push(`set +o ${d}`),u=!0):(f.push(`${d} off`),u=!0));continue}let p=o.get(d);if(p)if(s)p==="vi"?e.state.options.emacs=!1:p==="emacs"&&(e.state.options.vi=!1),e.state.options[p]=!0,tt(e);else if(r)e.state.options[p]=!1,tt(e);else{let y=e.state.options[p];i?y||(u=!0):n?(f.push(`set ${y?"-o":"+o"} ${d}`),y||(u=!0)):(f.push(`${d} ${y?"on":"off"}`),y||(u=!0))}}return{exitCode:u?1:0,stdout:f.length>0?`${f.join(`
|
|
580
580
|
`)}
|
|
581
|
-
`:"",stderr:c}}async function
|
|
582
|
-
`;h=!0,
|
|
583
|
-
`,h=!0,
|
|
584
|
-
`;else{let $=e.state.functions.get(p),E=$?
|
|
585
|
-
`;c+=E}
|
|
581
|
+
`:"",stderr:c}}async function zn(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 u=await e.fs.stat(o);return u.isDirectory?{error:"permission_denied",path:o}:l?{cmd:l,path:o}:(u.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 u=await e.fs.stat(l);if(u.isDirectory)continue;let c=(u.mode&73)!==0,f=e.commands.get(t),d=o==="/bin"||o==="/usr/bin";if(f&&d)return{cmd:f,path:l};if(c){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 ts(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 Wa(e){return e!==null&&typeof e=="object"&&"then"in e&&typeof e.then=="function"}function q(e,t,s,r){return((...n)=>{ut(t,s,`${r} call`);let i=e(...n);return Wa(i)?i.then(o=>(ut(t,s,`${r} post-await`),o),o=>{throw ut(t,s,`${r} post-await`),o}):(ut(t,s,`${r} return`),i)})}function za(e,t,s){let r={readFile:q(e.readFile.bind(e),t,s,"fs.readFile"),readFileBuffer:q(e.readFileBuffer.bind(e),t,s,"fs.readFileBuffer"),writeFile:q(e.writeFile.bind(e),t,s,"fs.writeFile"),appendFile:q(e.appendFile.bind(e),t,s,"fs.appendFile"),exists:q(e.exists.bind(e),t,s,"fs.exists"),stat:q(e.stat.bind(e),t,s,"fs.stat"),mkdir:q(e.mkdir.bind(e),t,s,"fs.mkdir"),readdir:q(e.readdir.bind(e),t,s,"fs.readdir"),rm:q(e.rm.bind(e),t,s,"fs.rm"),cp:q(e.cp.bind(e),t,s,"fs.cp"),mv:q(e.mv.bind(e),t,s,"fs.mv"),resolvePath:q(e.resolvePath.bind(e),t,s,"fs.resolvePath"),getAllPaths:q(e.getAllPaths.bind(e),t,s,"fs.getAllPaths"),chmod:q(e.chmod.bind(e),t,s,"fs.chmod"),symlink:q(e.symlink.bind(e),t,s,"fs.symlink"),link:q(e.link.bind(e),t,s,"fs.link"),readlink:q(e.readlink.bind(e),t,s,"fs.readlink"),lstat:q(e.lstat.bind(e),t,s,"fs.lstat"),realpath:q(e.realpath.bind(e),t,s,"fs.realpath"),utimes:q(e.utimes.bind(e),t,s,"fs.utimes")};return e.readdirWithFileTypes&&(r.readdirWithFileTypes=q(e.readdirWithFileTypes.bind(e),t,s,"fs.readdirWithFileTypes")),r}function Vn(e,t){if(!e.requireDefenseContext)return e;let s=`command:${t}`,r={...e,fs:za(e.fs,e.requireDefenseContext,s)};return e.exec&&(r.exec=q(e.exec,e.requireDefenseContext,s,"exec")),e.fetch&&(r.fetch=q(e.fetch,e.requireDefenseContext,s,"fetch")),e.sleep&&(r.sleep=q(e.sleep,e.requireDefenseContext,s,"sleep")),e.getRegisteredCommands&&(r.getRegisteredCommands=q(e.getRegisteredCommands,e.requireDefenseContext,s,"getRegisteredCommands")),r}async function Un(e,t,s,r){let n=!1,i=!1,o=!1,a=!1,l=!1,u=[];for(let p of t)if(p.startsWith("-")&&p.length>1)for(let y of p.slice(1))y==="t"?n=!0:y==="p"?i=!0:y==="P"?o=!0:y==="a"?a=!0:y==="f"&&(l=!0);else u.push(p);let c="",f="",d=0,h=!1,m=!1;for(let p of u){let y=!1;if(o){if(a){let $=await r(p);if($.length>0){for(let E of $)c+=`${E}
|
|
582
|
+
`;h=!0,y=!0}}else{let $=await s(p);$&&(c+=`${$}
|
|
583
|
+
`,h=!0,y=!0)}y||(m=!0);continue}let b=!l&&e.state.functions.has(p);if(a&&b){if(!i)if(n)c+=`function
|
|
584
|
+
`;else{let $=e.state.functions.get(p),E=$?Bn(p,$):`${p} is a function
|
|
585
|
+
`;c+=E}y=!0}let v=e.state.env.get(`BASH_ALIAS_${p}`);if(v!==void 0&&(a||!y)&&(i||(n?c+=`alias
|
|
586
586
|
`:c+=`${p} is aliased to \`${v}'
|
|
587
|
-
`),
|
|
587
|
+
`),y=!0,!a)||Os.has(p)&&(a||!y)&&(i||(n?c+=`keyword
|
|
588
588
|
`:c+=`${p} is a shell keyword
|
|
589
|
-
`),
|
|
590
|
-
`;else{let $=e.state.functions.get(p),E=$?
|
|
591
|
-
`;c+=E}
|
|
589
|
+
`),y=!0,!a))continue;if(!a&&b&&!y){if(!i)if(n)c+=`function
|
|
590
|
+
`;else{let $=e.state.functions.get(p),E=$?Bn(p,$):`${p} is a function
|
|
591
|
+
`;c+=E}y=!0;continue}if(!(nt.has(p)&&(a||!y)&&(i||(n?c+=`builtin
|
|
592
592
|
`:c+=`${p} is a shell builtin
|
|
593
|
-
`),
|
|
593
|
+
`),y=!0,!a))){if(a){let $=await r(p);for(let E of $)i?c+=`${E}
|
|
594
594
|
`:n?c+=`file
|
|
595
595
|
`:c+=`${p} is ${E}
|
|
596
|
-
`,h=!0,
|
|
596
|
+
`,h=!0,y=!0}else if(!y){let $=await s(p);$&&(i?c+=`${$}
|
|
597
597
|
`:n?c+=`file
|
|
598
598
|
`:c+=`${p} is ${$}
|
|
599
|
-
`,h=!0,
|
|
600
|
-
`)}}}return i?d=
|
|
599
|
+
`,h=!0,y=!0)}if(!y&&(m=!0,!n&&!i)){let $=!0;if(p.includes("/")){let E=e.fs.resolvePath(e.state.cwd,p);await e.fs.exists(E)&&($=!1)}$&&(f+=`bash: type: ${p}: not found
|
|
600
|
+
`)}}}return i?d=m&&!h?1:0:d=m?1:0,P(c,f,d)}function Bn(e,t){let s;return t.body.type==="Group"?s=t.body.body.map(n=>yt(n)).join("; "):s=yt(t.body),`${e} is a function
|
|
601
601
|
${e} ()
|
|
602
602
|
{
|
|
603
603
|
${s}
|
|
604
604
|
}
|
|
605
|
-
`}function yt(e){if(Array.isArray(e))return e.map(t=>yt(t)).join("; ");if(e.type==="Statement"){let t=[];for(let s=0;s<e.pipelines.length;s++){let r=e.pipelines[s];t.push(Va(r)),e.operators[s]&&t.push(e.operators[s])}return t.join(" ")}if(e.type==="SimpleCommand"){let t=e,s=[];t.name&&s.push(
|
|
605
|
+
`}function yt(e){if(Array.isArray(e))return e.map(t=>yt(t)).join("; ");if(e.type==="Statement"){let t=[];for(let s=0;s<e.pipelines.length;s++){let r=e.pipelines[s];t.push(Va(r)),e.operators[s]&&t.push(e.operators[s])}return t.join(" ")}if(e.type==="SimpleCommand"){let t=e,s=[];t.name&&s.push(jn(t.name));for(let r of t.args)s.push(jn(r));return s.join(" ")}return e.type==="Group"?`{ ${e.body.map(r=>yt(r)).join("; ")}; }`:"..."}function Va(e){let t=e.commands.map(s=>yt(s));return(e.negated?"! ":"")+t.join(" | ")}function jn(e){let t="";for(let s of e.parts)s.type==="Literal"?t+=s.value:s.type==="DoubleQuoted"?t+=`"${s.parts.map(r=>Hn(r)).join("")}"`:s.type==="SingleQuoted"?t+=`'${s.value}'`:t+=Hn(s);return t}function Hn(e){let t=e;return t.type==="Literal"?t.value??"":t.type==="Variable"?`$${t.name}`:""}async function Zn(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}"
|
|
606
606
|
`:n+=`alias ${a}='${l}'
|
|
607
607
|
`;else if(Os.has(a))r?n+=`${a} is a shell keyword
|
|
608
608
|
`:n+=`${a}
|
|
@@ -613,97 +613,97 @@ ${e} ()
|
|
|
613
613
|
`;else if(a.includes("/")){let u=e.fs.resolvePath(e.state.cwd,a),c=!1;if(await e.fs.exists(u))try{let f=await e.fs.stat(u);f.isDirectory||(f.mode&73)!==0&&(r?n+=`${a} is ${a}
|
|
614
614
|
`:n+=`${a}
|
|
615
615
|
`,c=!0)}catch{}c||(r&&(i+=`${a}: not found
|
|
616
|
-
`),o=1)}else if(e.commands.has(a)){let c=(e.state.env.get("PATH")??"/usr/bin:/bin").split(":"),f=null;for(let d of c){if(!d)continue;let h=`${d}/${a}`;try{let
|
|
616
|
+
`),o=1)}else if(e.commands.has(a)){let c=(e.state.env.get("PATH")??"/usr/bin:/bin").split(":"),f=null;for(let d of c){if(!d)continue;let h=`${d}/${a}`;try{let m=await e.fs.stat(h);if(!m.isDirectory&&(m.mode&73)!==0){f=h;break}}catch{}}f||(f=`/usr/bin/${a}`),r?n+=`${a} is ${f}
|
|
617
617
|
`:n+=`${f}
|
|
618
618
|
`}else r&&(i+=`${a}: not found
|
|
619
|
-
`),o=1}return P(n,i,o)}async function
|
|
620
|
-
`);let[,...o]=n;return r(i,o,[],s,!0,!1,-1)}async function
|
|
619
|
+
`),o=1}return P(n,i,o)}async function qn(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 Gn(e,t,s,r,n,i,o,a){let{ctx:l,runCommand:u}=e;if(l.coverage&&nt.has(t)&&l.coverage.hit(`bash:builtin:${t}`),t==="export")return Qs(l,s);if(t==="unset")return fr(l,s);if(t==="exit")return Ys(l,s);if(t==="local")return sr(l,s);if(t==="set")return or(l,s);if(t==="break")return As(l,s);if(t==="continue")return Fs(l,s);if(t==="return")return ir(l,s);if(t==="eval"&&l.state.options.posix)return Yt(l,s,n);if(t==="shift")return lr(l,s);if(t==="getopts")return Qt(l,s);if(t==="compgen")return Is(l,s);if(t==="complete")return Rs(l,s);if(t==="compopt")return Ls(l,s);if(t==="pushd")return await Gs(l,s);if(t==="popd")return Ks(l,s);if(t==="dirs")return Xs(l,s);if(t==="source"||t===".")return cr(l,s);if(t==="read")return nr(l,s,n,a);if(t==="mapfile"||t==="readarray")return rr(l,s,n);if(t==="declare"||t==="typeset")return Us(l,s);if(t==="readonly")return Zs(l,s);if(!i){let c=l.state.functions.get(t);if(c)return Kt(l,c,s,n)}if(t==="eval")return Yt(l,s,n);if(t==="cd")return await _s(l,s);if(t===":"||t==="true")return L;if(t==="false")return X(!1);if(t==="let")return tr(l,s);if(t==="command")return Ba(e,s,n);if(t==="builtin")return ja(e,s,n);if(t==="shopt")return Wn(l,s);if(t==="exec"){if(s.length===0)return L;let[c,...f]=s;return u(c,f,[],n,!1,!1,-1)}if(t==="wait")return L;if(t==="type")return await Un(l,s,c=>qn(l,c),c=>ts(l,c));if(t==="hash")return Js(l,s);if(t==="help")return er(l,s);if(t==="["||t==="test"){let c=s;if(t==="["){if(s[s.length-1]!=="]")return _("[: missing `]'\n",2);c=s.slice(0,-1)}return ht(l,c)}return null}async function Ba(e,t,s){let{ctx:r,runCommand:n}=e;if(t.length===0)return L;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 L;if(a||o)return await Zn(r,l,a,o);let[u,...c]=l;return n(u,c,[],s,!0,i,-1)}async function ja(e,t,s){let{runCommand:r}=e;if(t.length===0)return L;let n=t;if(n[0]==="--"&&(n=n.slice(1),n.length===0))return L;let i=n[0];if(!nt.has(i))return _(`bash: builtin: ${i}: not a shell builtin
|
|
620
|
+
`);let[,...o]=n;return r(i,o,[],s,!0,!1,-1)}async function Kn(e,t,s,r,n){let{ctx:i,buildExportedEnv:o,executeUserScript:a}=e,u=await zn(i,t,n?"/usr/bin:/bin":void 0);if(!u)return tn(t)?_(`bash: ${t}: command not available in browser environments. Exclude '${t}' from your commands or use the Node.js bundle.
|
|
621
621
|
`,127):_(`bash: ${t}: command not found
|
|
622
622
|
`,127);if("error"in u)return u.error==="permission_denied"?_(`bash: ${t}: Permission denied
|
|
623
623
|
`,126):_(`bash: ${t}: No such file or directory
|
|
624
|
-
`,127);if("script"in u)return t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,u.path)),await a(u.path,s,r);let{cmd:c,path:f}=u;t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,f));let d=r||i.state.groupStdin||"",h=o(),
|
|
625
|
-
`)}}async function hr(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 gt(e,t,s,r){if(e instanceof ue)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 fe)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 oe||e instanceof de||e instanceof B||e instanceof Y)return e.prependOutput(t,s),{action:"rethrow",stdout:t,stderr:s,error:e};let n=
|
|
626
|
-
`,exitCode:1}}async function ss(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(_t(a)||a instanceof de||a instanceof B||a instanceof Y||a instanceof
|
|
627
|
-
`,exitCode:1}}return{stdout:n,stderr:i,exitCode:o}}async function
|
|
628
|
-
`);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 u of t.words){let c=await Ae(e,u);a.push(...c.values)}}catch(u){if(u instanceof St)return{stdout:"",stderr:u.stderr,exitCode:1};throw u}e.state.loopDepth++;try{for(let u 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,u);try{for(let c of t.body){let f=await e.executeStatement(c);r+=f.stdout,n+=f.stderr,i=f.exitCode}}catch(c){let f=gt(c,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=P(r,n,f.exitCode??1);return Z(e,d,t.redirections)}throw f.error}}}finally{e.state.loopDepth--}let l=P(r,n,i);return Z(e,l,t.redirections)}async function
|
|
624
|
+
`,127);if("script"in u)return t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,u.path)),await a(u.path,s,r);let{cmd:c,path:f}=u;t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,f));let d=r||i.state.groupStdin||"",h=o(),m={fs:i.fs,cwd:i.state.cwd,env:i.state.env,exportedEnv:h,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},p=Vn(m,t);try{let y=()=>Er(i.requireDefenseContext,"command",`${t} execution`,()=>c.execute(s,p));return c.trusted?await ge.runTrustedAsync(()=>y()):await y()}catch(y){if(y instanceof Y||y instanceof Ge)throw y;return _(`${t}: ${he(ke(y))}
|
|
625
|
+
`)}}async function hr(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 gt(e,t,s,r){if(e instanceof ue)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 fe)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 oe||e instanceof de||e instanceof B||e instanceof Y)return e.prependOutput(t,s),{action:"rethrow",stdout:t,stderr:s,error:e};let n=ke(e);return{action:"error",stdout:t,stderr:`${s}${n}
|
|
626
|
+
`,exitCode:1}}async function ss(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(_t(a)||a instanceof de||a instanceof B||a instanceof Y||a instanceof Ie)throw a.prependOutput(n,i),a;return{stdout:n,stderr:`${i}${ke(a)}
|
|
627
|
+
`,exitCode:1}}return{stdout:n,stderr:i,exitCode:o}}async function Xn(e,t){let s="",r="";for(let n of t.clauses){let i=await hr(e,n.condition);if(s+=i.stdout,r+=i.stderr,i.exitCode===0)return ss(e,n.body,s,r)}return t.elseBody?ss(e,t.elseBody,s,r):P(s,r,0)}async function Yn(e,t){let s=await Pe(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 _(`bash: \`${t.variable}': not a valid identifier
|
|
628
|
+
`);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 u of t.words){let c=await Ae(e,u);a.push(...c.values)}}catch(u){if(u instanceof St)return{stdout:"",stderr:u.stderr,exitCode:1};throw u}e.state.loopDepth++;try{for(let u 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,u);try{for(let c of t.body){let f=await e.executeStatement(c);r+=f.stdout,n+=f.stderr,i=f.exitCode}}catch(c){let f=gt(c,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=P(r,n,f.exitCode??1);return Z(e,d,t.redirections)}throw f.error}}}finally{e.state.loopDepth--}let l=P(r,n,i);return Z(e,l,t.redirections)}async function Qn(e,t){let s=await Pe(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 j(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 j(e,t.condition.expression)===0));){try{for(let u of t.body){let c=await e.executeStatement(u);n+=c.stdout,i+=c.stderr,o=c.exitCode}}catch(u){let c=gt(u,n,i,e.state.loopDepth);if(n=c.stdout,i=c.stderr,c.action==="break")break;if(c.action==="continue"){t.update&&await j(e,t.update.expression);continue}if(c.action==="error"){let f=P(n,i,c.exitCode??1);return Z(e,f,t.redirections)}throw c.error}t.update&&await j(e,t.update.expression)}}finally{e.state.loopDepth--}let l=P(n,i,o);return Z(e,l,t.redirections)}async function Jn(e,t,s=""){let r="",n="",i=0,o=0,a=s;for(let u of t.redirections)if((u.operator==="<<"||u.operator==="<<-")&&u.target.type==="HereDoc"){let c=u.target,f=await I(e,c.content);c.stripTabs&&(f=f.split(`
|
|
629
629
|
`).map(d=>d.replace(/^\t+/,"")).join(`
|
|
630
630
|
`)),a=f}else if(u.operator==="<<<"&&u.target.type==="Word")a=`${await I(e,u.target)}
|
|
631
631
|
`;else if(u.operator==="<"&&u.target.type==="Word")try{let c=await I(e,u.target),f=e.fs.resolvePath(e.state.cwd,c);a=await e.fs.readFile(f)}catch{let c=await I(e,u.target);return _(`bash: ${c}: No such file or directory
|
|
632
|
-
`)}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 u=0,c=!1,f=!1,d=e.state.inCondition;e.state.inCondition=!0;try{for(let h of t.condition){let
|
|
633
|
-
`,t||
|
|
632
|
+
`)}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 u=0,c=!1,f=!1,d=e.state.inCondition;e.state.inCondition=!0;try{for(let h of t.condition){let m=await e.executeStatement(h);r+=m.stdout,n+=m.stderr,u=m.exitCode}}catch(h){if(h instanceof ue){if(r+=h.stdout,n+=h.stderr,h.levels>1&&e.state.loopDepth>1)throw h.levels--,h.stdout=r,h.stderr=n,e.state.inCondition=d,h;c=!0}else if(h instanceof fe){if(r+=h.stdout,n+=h.stderr,h.levels>1&&e.state.loopDepth>1)throw h.levels--,h.stdout=r,h.stderr=n,e.state.inCondition=d,h;f=!0}else throw e.state.inCondition=d,h}finally{e.state.inCondition=d}if(c)break;if(!f){if(u!==0)break;try{for(let h of t.body){let m=await e.executeStatement(h);r+=m.stdout,n+=m.stderr,i=m.exitCode}}catch(h){let m=gt(h,r,n,e.state.loopDepth);if(r=m.stdout,n=m.stderr,m.action==="break")break;if(m.action==="continue")continue;if(m.action==="error")return P(r,n,m.exitCode??1);throw m.error}}}}finally{e.state.loopDepth--,e.state.groupStdin=l}return P(r,n,i)}async function ei(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 hr(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=gt(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 P(s,r,l.exitCode??1);throw l.error}}}finally{e.state.loopDepth--}return P(s,r,n)}async function ti(e,t){let s=await Pe(e,t.redirections);if(s)return s;let r="",n="",i=0,o=await I(e,t.word),a=!1;for(let u=0;u<t.items.length;u++){let c=t.items[u],f=a;if(!a)for(let d of c.patterns){let h=await I(e,d);Mr(d)&&(h=Lr(h));let m=e.state.shoptOptions.nocasematch,p=e.state.shoptOptions.extglob;if(st(o,h,m,p)){f=!0;break}}if(f){let d=await ss(e,c.body,r,n);if(r=d.stdout,n=d.stderr,i=d.exitCode,c.terminator===";;")break;c.terminator===";&"?a=!0:a=!1}else a=!1}let l=P(r,n,i);return Z(e,l,t.redirections)}function pr(e,t){if(e.parts.length!==1)return!1;let s=e.parts[0];return s.type!=="Literal"?!1:t.includes(s.value)}function si(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 u=Number.parseInt(a.slice(0,l),10);if(Number.isNaN(u)||u<0)return null;let c=a.slice(l+1);return{path:i,position:u,content:c}}var ri="+ ";async function ni(e){let t=e.state.env.get("PS4");if(t===void 0)return ri;if(t==="")return"";try{let r=new V().parseWordFromString(t,!1,!1);return await I(e,r)}catch{return e.state.expansionStderr=`${e.state.expansionStderr||""}bash: ${t}: bad substitution
|
|
633
|
+
`,t||ri}}function Ha(e){return e.map(t=>Ua(t)).join(" ")}function Ua(e){if(e==="")return"''";if(!/[\s'"\\$`!*?[\]{}|&;<>()~#\n\t]/.test(e))return e;let s=/[\x00-\x1f\x7f]/.test(e),r=e.includes(`
|
|
634
634
|
`),n=e.includes(" "),i=e.includes("\\"),o=e.includes("'");if(s||r||n||i){let l="";for(let u of e){let c=u.charCodeAt(0);u===`
|
|
635
|
-
`?l+="\\n":u===" "?l+="\\t":u==="\\"?l+="\\\\":u==="'"?l+="'":u==='"'?l+='"':c<32||c===127?c<256?l+=`\\x${c.toString(16).padStart(2,"0")}`:l+=`\\u${c.toString(16).padStart(4,"0")}`:l+=u}return`$'${l}'`}return o?`"${e.replace(/([\\$`"])/g,"\\$1")}"`:`'${e}'`}async function
|
|
636
|
-
`}async function
|
|
637
|
-
`:""}async function
|
|
635
|
+
`?l+="\\n":u===" "?l+="\\t":u==="\\"?l+="\\\\":u==="'"?l+="'":u==='"'?l+='"':c<32||c===127?c<256?l+=`\\x${c.toString(16).padStart(2,"0")}`:l+=`\\u${c.toString(16).padStart(4,"0")}`:l+=u}return`$'${l}'`}return o?`"${e.replace(/([\\$`"])/g,"\\$1")}"`:`'${e}'`}async function ii(e,t,s){if(!e.state.options.xtrace)return"";let r=await ni(e),n=[t,...s],i=Ha(n);return`${r}${i}
|
|
636
|
+
`}async function ai(e,t,s){return e.state.options.xtrace?`${await ni(e)}${t}=${s}
|
|
637
|
+
`:""}async function oi(e,t,s){let r=t.timed?ls():0,n="",i=L,o=0,a=[],l="",u=t.commands.length>1,c=e.state.lastArg;for(let d=0;d<t.commands.length;d++){let h=t.commands[d],m=d===t.commands.length-1,p=d===0;u&&(e.state.lastArg="",p||(e.state.groupStdin=void 0));let b=u&&(!m||!e.state.shoptOptions.lastpipe)?new Map(e.state.env):null,v;try{v=await s(h,n)}catch(A){if(A instanceof Et)v={stdout:A.stdout,stderr:A.stderr,exitCode:1};else if(A instanceof B&&t.commands.length>1)v={stdout:A.stdout,stderr:A.stderr,exitCode:A.exitCode};else if(A instanceof de&&t.commands.length>1)v={stdout:A.stdout,stderr:A.stderr,exitCode:A.exitCode};else throw b&&(e.state.env=b),A}b&&(e.state.env=b),a.push(v.exitCode),v.exitCode!==0&&(o=v.exitCode),m?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 h=(ls()-r)/1e3,m=Math.floor(h/60),p=h%60,y;t.timePosix?y=`real ${h.toFixed(2)}
|
|
638
638
|
user 0.00
|
|
639
639
|
sys 0.00
|
|
640
|
-
`:
|
|
641
|
-
real ${`${
|
|
640
|
+
`:y=`
|
|
641
|
+
real ${`${m}m${p.toFixed(3)}s`}
|
|
642
642
|
user 0m0.000s
|
|
643
643
|
sys 0m0.000s
|
|
644
|
-
`,i={...i,stderr:i.stderr+
|
|
644
|
+
`,i={...i,stderr:i.stderr+y}}return u&&!e.state.shoptOptions.lastpipe&&(e.state.lastArg=c),i}async function li(e,t){let s=new Map,r="";for(let n of t.assignments){let i=n.name;if(n.array){let c=await Za(e,t,i,n.array,n.append,s);if(c.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:c.error};if(r+=c.xtraceOutput,c.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:P("",`bash: ${i}: bad array subscript
|
|
645
645
|
`,1)};let l=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(l){let c=await Ya(e,t,l[1],l[2],o,n.append,s);if(c.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:c.error};if(c.continueToNext)continue}let u=await Ja(e,t,i,o,n.append,s);if(u.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:u.error};r+=u.xtraceOutput,u.continueToNext}return{continueToNext:!1,xtraceOutput:r,tempAssignments:s}}async function Za(e,t,s,r,n,i){let o="";if(/\[.+\]$/.test(s))return{continueToNext:!1,xtraceOutput:"",error:P("",`bash: ${s}: cannot assign list to array member
|
|
646
|
-
`,1)};if(me(e,s)){let c=
|
|
647
|
-
`,1)}}if(
|
|
646
|
+
`,1)};if(me(e,s)){let c=xr(e,s);if(c===void 0||c==="")throw new B(1,"","");let f=Le(e,s);if(f&&/^[a-zA-Z_][a-zA-Z0-9_]*\[@\]$/.test(f))return{continueToNext:!1,xtraceOutput:"",error:P("",`bash: ${s}: cannot assign list to array member
|
|
647
|
+
`,1)}}if(Be(e,s)){if(t.name)return o+=`bash: ${s}: readonly variable
|
|
648
648
|
`,{continueToNext:!0,xtraceOutput:o};let c=ee(e,s);if(c)return{continueToNext:!1,xtraceOutput:"",error:c}}let a=e.state.associativeArrays?.has(s),l=qa(r),u=()=>{let c=`${s}_`;for(let f of e.state.env.keys())f.startsWith(c)&&!f.includes("__")&&e.state.env.delete(f);e.state.env.delete(s)};if(a&&l?await Ga(e,t,s,r,n,u,c=>{o+=c}):l?await Ka(e,s,r,n,u):await Xa(e,s,r,n,u),t.name){i.set(s,e.state.env.get(s));let f=`(${r.map(d=>kt(d)).join(" ")})`;e.state.env.set(s,f)}return{continueToNext:!0,xtraceOutput:o}}function qa(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 Ga(e,t,s,r,n,i,o){let a=[];for(let l of r){let u=fs(l);if(u){let{key:c,valueParts:f,append:d}=u,h;f.length>0?h=await I(e,{type:"Word",parts:f}):h="",h=G(e,h),a.push({type:"keyed",key:c,value:h,append:d})}else{let c=await I(e,l);a.push({type:"invalid",expandedValue:c})}}n||i();for(let l of a)if(l.type==="keyed")if(l.append){let u=e.state.env.get(`${s}_${l.key}`)??"";e.state.env.set(`${s}_${l.key}`,u+l.value)}else e.state.env.set(`${s}_${l.key}`,l.value);else{let u=t.line??e.state.currentLine??1;o(`bash: line ${u}: ${s}: ${l.expandedValue}: must use subscript when assigning associative array
|
|
649
|
-
`)}}async function Ka(e,t,s,r,n){let i=[];for(let a of s){let l=fs(a);if(l){let{key:u,valueParts:c,append:f}=l,d;c.length>0?d=await I(e,{type:"Word",parts:c}):d="",d=G(e,d),i.push({type:"keyed",indexExpr:u,value:d,append:f})}else{let u=await Ae(e,a);i.push({type:"non-keyed",values:u.values})}}r||n();let o=0;for(let a of i)if(a.type==="keyed"){let l;try{let u=new V,c=Q(u,a.indexExpr);l=await j(e,c.expression,!1)}catch{if(/^-?\d+$/.test(a.indexExpr))l=Number.parseInt(a.indexExpr,10);else{let u=e.state.env.get(a.indexExpr);l=u?Number.parseInt(u,10):0,Number.isNaN(l)&&(l=0)}}if(a.append){let u=e.state.env.get(`${t}_${l}`)??"";e.state.env.set(`${t}_${l}`,u+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 Xa(e,t,s,r,n){let i=[];for(let a of s){let l=await Ae(e,a);i.push(...l.values)}let o=0;if(r){let a=be(e,t);if(a.length>0)o=Math.max(...a.map(([u])=>typeof u=="number"?u: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 Ya(e,t,s,r,n,i,o){let a=s;if(me(e,s)){let f=
|
|
650
|
-
`,1)};a=f}}if(
|
|
649
|
+
`)}}async function Ka(e,t,s,r,n){let i=[];for(let a of s){let l=fs(a);if(l){let{key:u,valueParts:c,append:f}=l,d;c.length>0?d=await I(e,{type:"Word",parts:c}):d="",d=G(e,d),i.push({type:"keyed",indexExpr:u,value:d,append:f})}else{let u=await Ae(e,a);i.push({type:"non-keyed",values:u.values})}}r||n();let o=0;for(let a of i)if(a.type==="keyed"){let l;try{let u=new V,c=Q(u,a.indexExpr);l=await j(e,c.expression,!1)}catch{if(/^-?\d+$/.test(a.indexExpr))l=Number.parseInt(a.indexExpr,10);else{let u=e.state.env.get(a.indexExpr);l=u?Number.parseInt(u,10):0,Number.isNaN(l)&&(l=0)}}if(a.append){let u=e.state.env.get(`${t}_${l}`)??"";e.state.env.set(`${t}_${l}`,u+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 Xa(e,t,s,r,n){let i=[];for(let a of s){let l=await Ae(e,a);i.push(...l.values)}let o=0;if(r){let a=be(e,t);if(a.length>0)o=Math.max(...a.map(([u])=>typeof u=="number"?u: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 Ya(e,t,s,r,n,i,o){let a=s;if(me(e,s)){let f=Le(e,s);if(f&&f!==s){if(f.includes("["))return{continueToNext:!1,xtraceOutput:"",error:P("",`bash: \`${f}': not a valid identifier
|
|
650
|
+
`,1)};a=f}}if(Be(e,a)){if(t.name)return{continueToNext:!0,xtraceOutput:""};let f=ee(e,a);if(f)return{continueToNext:!1,xtraceOutput:"",error:f}}let l=e.state.associativeArrays?.has(a),u;if(l)u=await ci(e,a,r);else{let f=await Qa(e,a,r);if(f.error)return{continueToNext:!1,xtraceOutput:"",error:f.error};u=`${a}_${f.index}`}let c=i?(e.state.env.get(u)||"")+n:n;if(t.name)o.set(u,e.state.env.get(u)),e.state.env.set(u,c);else{let f=rt(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(u)||d.set(u,e.state.env.get(u))}e.state.env.set(u,c)}return{continueToNext:!0,xtraceOutput:""}}async function ci(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 V().parseWordFromString(n,!0,!1);r=await I(e,o)}else if(s.includes("$")){let i=new V().parseWordFromString(s,!1,!1);r=await I(e,i)}else r=s;return`${t}_${r}`}async function Qa(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 V,o=Q(i,r);n=await j(e,o.expression,!1)}catch(i){if(i instanceof Ve){let l=`bash: line ${e.state.currentLine}: ${s}: ${i.message}
|
|
651
651
|
`;if(i.fatal)throw new B(1,"",l);return{index:0,error:P("",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=be(e,t);if(i.length===0){let a=e.state.currentLine;return{index:0,error:P("",`bash: line ${a}: ${t}[${s}]: bad array subscript
|
|
652
652
|
`,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:P("",`bash: line ${a}: ${t}[${s}]: bad array subscript
|
|
653
|
-
`,1)}}}return{index:n}}async function Ja(e,t,s,r,n,i){let o="",a=s,l=null;if(me(e,s)){let f=
|
|
654
|
-
`,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(
|
|
655
|
-
`,{continueToNext:!0,xtraceOutput:o};let f=ee(e,a);if(f)return{continueToNext:!1,xtraceOutput:"",error:f}}let u;if(pt(e,a))try{let f=new V;if(n){let h=`(${e.state.env.get(a)||"0"}) + (${r})`,
|
|
656
|
-
`,1);return Z(e,T,t.redirections)}w();let $=P(v,A,g);return Z(e,$,t.redirections)}async function
|
|
653
|
+
`,1)}}}return{index:n}}async function Ja(e,t,s,r,n,i){let o="",a=s,l=null;if(me(e,s)){let f=Rr(e,s,r);if(f===void 0)return{continueToNext:!1,xtraceOutput:"",error:P("",`bash: ${s}: circular name reference
|
|
654
|
+
`,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(Be(e,a)){if(t.name)return o+=`bash: ${a}: readonly variable
|
|
655
|
+
`,{continueToNext:!0,xtraceOutput:o};let f=ee(e,a);if(f)return{continueToNext:!1,xtraceOutput:"",error:f}}let u;if(pt(e,a))try{let f=new V;if(n){let h=`(${e.state.env.get(a)||"0"}) + (${r})`,m=Q(f,h);u=String(await j(e,m.expression))}else{let d=Q(f,r);u=String(await j(e,d.expression))}}catch{u="0"}else{let{isArray:f}=await import("./chunks/expansion-JBCP2CHQ.js"),d=f(e,a)?`${a}_0`:a;u=n?(e.state.env.get(d)||"")+r:r}u=at(e,a,u),o+=await ai(e,a,u);let c=a;if(l)c=await eo(e,l);else{let{isArray:f}=await import("./chunks/expansion-JBCP2CHQ.js");f(e,a)&&(c=`${a}_0`)}return t.name?(i.set(c,e.state.env.get(c)),e.state.env.set(c,u)):(e.state.env.set(c,u),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 eo(e,t){let{arrayName:s,subscriptExpr:r}=t;if(e.state.associativeArrays?.has(s))return ci(e,s,r);let i;if(/^-?\d+$/.test(r))i=Number.parseInt(r,10);else{try{let o=new V,a=Q(o,r);i=await j(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=be(e,s);o.length>0&&(i=Math.max(...o.map(l=>l[0]))+1+i)}return`${s}_${i}`}async function ui(e,t,s,r){let n=await Pe(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),u=e.state.localScopes,c=e.state.localVarStack,f=e.state.localVarDepth,d=e.state.fullyUnsetLocals;if(e.state.localScopes=u.map(E=>new Map(E)),c){e.state.localVarStack=new Map;for(let[E,T]of c.entries())e.state.localVarStack.set(E,T.map(k=>({...k})))}f&&(e.state.localVarDepth=new Map(f)),d&&(e.state.fullyUnsetLocals=new Map(d));let h=e.state.loopDepth,m=e.state.parentHasLoopContext;e.state.parentHasLoopContext=h>0,e.state.loopDepth=0;let p=e.state.lastArg,y=e.state.bashPid;e.state.bashPid=e.state.nextVirtualPid++;let b=e.state.groupStdin;s&&(e.state.groupStdin=s);let v="",A="",g=0,w=()=>{e.state.env=i,e.state.cwd=o,e.state.options=a,e.state.functions=l,e.state.localScopes=u,e.state.localVarStack=c,e.state.localVarDepth=f,e.state.fullyUnsetLocals=d,e.state.loopDepth=h,e.state.parentHasLoopContext=m,e.state.groupStdin=b,e.state.bashPid=y,e.state.lastArg=p};try{for(let E of t.body){let T=await r(E);v+=T.stdout,A+=T.stderr,g=T.exitCode}}catch(E){if(w(),E instanceof Y)throw E;if(E instanceof Ie){v+=E.stdout,A+=E.stderr;let k=P(v,A,0);return Z(e,k,t.redirections)}if(E instanceof ue||E instanceof fe){v+=E.stdout,A+=E.stderr;let k=P(v,A,0);return Z(e,k,t.redirections)}if(E instanceof B){v+=E.stdout,A+=E.stderr;let k=P(v,A,E.exitCode);return Z(e,k,t.redirections)}if(E instanceof oe){v+=E.stdout,A+=E.stderr;let k=P(v,A,E.exitCode);return Z(e,k,t.redirections)}if(E instanceof de){let k=P(v+E.stdout,A+E.stderr,E.exitCode);return Z(e,k,t.redirections)}let T=P(v,`${A}${ke(E)}
|
|
656
|
+
`,1);return Z(e,T,t.redirections)}w();let $=P(v,A,g);return Z(e,$,t.redirections)}async function fi(e,t,s,r){let n="",i="",o=0,a=await Gt(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,h=await I(e,d.content);d.stripTabs&&(h=h.split(`
|
|
657
657
|
`).map(p=>p.replace(/^\t+/,"")).join(`
|
|
658
|
-
`));let
|
|
658
|
+
`));let m=f.fd??0;m!==0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),ie(e),e.state.fileDescriptors.set(m,h)):l=h}else if(f.operator==="<<<"&&f.target.type==="Word")l=`${await I(e,f.target)}
|
|
659
659
|
`;else if(f.operator==="<"&&f.target.type==="Word")try{let d=await I(e,f.target),h=e.fs.resolvePath(e.state.cwd,d);l=await e.fs.readFile(h)}catch{let d=await I(e,f.target);return P("",`bash: ${d}: No such file or directory
|
|
660
|
-
`,1)}let u=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=u,f instanceof Y)throw f;if(_t(f)||f instanceof de||f instanceof B)throw f.prependOutput(n,i),f;return P(n,`${i}${
|
|
661
|
-
`,1)}e.state.groupStdin=u;let c=P(n,i,o);return Z(e,c,t.redirections)}async function
|
|
662
|
-
`,127)}if(i.startsWith("#!")){let
|
|
663
|
-
`);
|
|
664
|
-
`);throw
|
|
665
|
-
`);let n=0,i=-1,o=!1;for(let u=0;u<t.pipelines.length;u++){let c=t.pipelines[u],f=u>0?t.operators[u-1]:null;if(f==="&&"&&n!==0||f==="||"&&n===0)continue;let d=await this.executePipeline(c);s+=d.stdout,r+=d.stderr,n=d.exitCode,i=u,o=c.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 de(n,s,r);return P(s,r,n)}async executePipeline(t){return
|
|
660
|
+
`,1)}let u=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=u,f instanceof Y)throw f;if(_t(f)||f instanceof de||f instanceof B)throw f.prependOutput(n,i),f;return P(n,`${i}${ke(f)}
|
|
661
|
+
`,1)}e.state.groupStdin=u;let c=P(n,i,o);return Z(e,c,t.redirections)}async function di(e,t,s,r,n){let i;try{i=await e.fs.readFile(t)}catch{return _(`bash: ${t}: No such file or directory
|
|
662
|
+
`,127)}if(i.startsWith("#!")){let y=i.indexOf(`
|
|
663
|
+
`);y!==-1&&(i=i.slice(y+1))}let o=new Map(e.state.env),a=e.state.cwd,l={...e.state.options},u=e.state.loopDepth,c=e.state.parentHasLoopContext,f=e.state.lastArg,d=e.state.bashPid,h=e.state.groupStdin,m=e.state.currentSource;e.state.parentHasLoopContext=u>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 y=0;y<s.length&&y<9;y++)e.state.env.set(String(y+1),s[y]);for(let y=s.length+1;y<=9;y++)e.state.env.delete(String(y));let p=()=>{e.state.env=o,e.state.cwd=a,e.state.options=l,e.state.loopDepth=u,e.state.parentHasLoopContext=c,e.state.lastArg=f,e.state.bashPid=d,e.state.groupStdin=h,e.state.currentSource=m};try{let b=new V().parse(i),v=await n(b);return p(),v}catch(y){if(p(),y instanceof B||y instanceof Y)throw y;if(y.name==="ParseException")return _(`bash: ${t}: ${y.message}
|
|
664
|
+
`);throw y}}var wt=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||ge.isInSandboxedContext())return;let s=`interpreter ${t} attempted outside defense context`;throw new Ge(s,{timestamp:Date.now(),type:"missing_defense_context",message:s,path:"DefenseInDepthBox.context",stack:new Error().stack,executionId:ge.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 B)throw l.prependOutput(s,r),l;if(l instanceof we)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:xe(this.ctx.state.env)};if(l instanceof Y)throw l;if(l instanceof de)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:xe(this.ctx.state.env)};if(l instanceof br)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:xe(this.ctx.state.env)};if(l instanceof Et)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:xe(this.ctx.state.env)};if(l instanceof Ve){o(l.stdout,l.stderr),n=1,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n));continue}if(l instanceof $r){o(l.stdout,l.stderr),n=1,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n));continue}if(l instanceof ue||l instanceof fe){if(this.ctx.state.loopDepth>0)throw l.prependOutput(s,r),l;o(l.stdout,l.stderr);continue}throw l instanceof oe&&l.prependOutput(s,r),l}return{stdout:s,stderr:r,exitCode:n,env:xe(this.ctx.state.env)}}async executeUserScript(t,s,r=""){return di(this.ctx,t,s,r,n=>this.executeScript(n))}async executeStatement(t){if(this.assertDefenseContext("statement"),this.ctx.state.signal?.aborted)throw new At;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 Nt(t.deferredError.message,t.line??1,1);if(this.ctx.state.options.noexec)return L;this.ctx.state.errexitSafe=!1;let s="",r="";this.ctx.state.options.verbose&&!this.ctx.state.suppressVerbose&&t.sourceText&&(r+=`${t.sourceText}
|
|
665
|
+
`);let n=0,i=-1,o=!1;for(let u=0;u<t.pipelines.length;u++){let c=t.pipelines[u],f=u>0?t.operators[u-1]:null;if(f==="&&"&&n!==0||f==="||"&&n===0)continue;let d=await this.executePipeline(c);s+=d.stdout,r+=d.stderr,n=d.exitCode,i=u,o=c.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 de(n,s,r);return P(s,r,n)}async executePipeline(t){return oi(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 Xn(this.ctx,t);case"For":return Yn(this.ctx,t);case"CStyleFor":return Qn(this.ctx,t);case"While":return Jn(this.ctx,t,s);case"Until":return ei(this.ctx,t);case"Case":return ti(this.ctx,t);case"Subshell":return this.executeSubshell(t,s);case"Group":return this.executeGroup(t,s);case"FunctionDef":return gn(this.ctx,t);case"ArithmeticCommand":return this.executeArithmeticCommand(t);case"ConditionalCommand":return this.executeConditionalCommand(t);default:return L}}async executeSimpleCommand(t,s){try{return await this.executeSimpleCommandInner(t,s)}catch(r){if(r instanceof St)return _(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 $=this.expandAlias(g);if($===g)break;g=$,w--}this.aliasExpansionStack.clear(),g!==t&&(t=g)}this.ctx.state.expansionStderr="";let r=await li(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 Pe(this.ctx,t.redirections);if(w)return w;let $=P("",i,0);return Z(this.ctx,$,t.redirections)}this.ctx.state.lastArg="";let g=(this.ctx.state.expansionStderr||"")+i;return this.ctx.state.expansionStderr="",P("",g,this.ctx.state.lastExitCode)}let o=t.name&&pr(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 Gt(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 u=-1;for(let g of t.redirections){if((g.operator==="<<"||g.operator==="<<-")&&g.target.type==="HereDoc"){let w=g.target,$=await I(this.ctx,w.content);w.stripTabs&&($=$.split(`
|
|
666
666
|
`).map(T=>T.replace(/^\t+/,"")).join(`
|
|
667
667
|
`));let E=g.fd??0;E!==0?(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),ie(this.ctx),this.ctx.state.fileDescriptors.set(E,$)):s=$;continue}if(g.operator==="<<<"&&g.target.type==="Word"){s=`${await I(this.ctx,g.target)}
|
|
668
668
|
`;continue}if(g.operator==="<"&&g.target.type==="Word")try{let w=await I(this.ctx,g.target),$=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);s=await this.ctx.fs.readFile($)}catch{let w=await I(this.ctx,g.target);for(let[$,E]of n)E===void 0?this.ctx.state.env.delete($):this.ctx.state.env.set($,E);return _(`bash: ${w}: No such file or directory
|
|
669
|
-
`)}if(g.operator==="<&"&&g.target.type==="Word"){let w=await I(this.ctx,g.target),$=Number.parseInt(w,10);if(!Number.isNaN($)&&this.ctx.state.fileDescriptors){let E=this.ctx.state.fileDescriptors.get($);if(E!==void 0)if(E.startsWith("__rw__:")){let T=
|
|
669
|
+
`)}if(g.operator==="<&"&&g.target.type==="Word"){let w=await I(this.ctx,g.target),$=Number.parseInt(w,10);if(!Number.isNaN($)&&this.ctx.state.fileDescriptors){let E=this.ctx.state.fileDescriptors.get($);if(E!==void 0)if(E.startsWith("__rw__:")){let T=si(E);T&&(s=T.content.slice(T.position),u=$)}else E.startsWith("__file__:")||E.startsWith("__file_append__:")||(s=E)}}}let c=await I(this.ctx,t.name),f=[],d=[];if(pr(t.name,["local","declare","typeset","export","readonly"])&&(c==="local"||c==="declare"||c==="typeset"||c==="export"||c==="readonly"))for(let g of t.args){let w=await Jr(this.ctx,g);if(w)f.push(w),d.push(!0);else{let $=await en(this.ctx,g);if($!==null)f.push($),d.push(!0);else{let E=await Ae(this.ctx,g);for(let T of E.values)f.push(T),d.push(E.quoted)}}}else for(let g of t.args){let w=await Ae(this.ctx,g);for(let $ of w.values)f.push($),d.push(w.quoted)}if(!c){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,u)}return P("","",this.ctx.state.lastExitCode)}return _(`bash: : command not found
|
|
670
670
|
`,127)}if(c==="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),$=g.fd??(g.operator==="<"||g.operator==="<>"?0:1);switch(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),g.operator){case">":case">|":{let E=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);await this.ctx.fs.writeFile(E,"","utf8"),ie(this.ctx),this.ctx.state.fileDescriptors.set($,`__file__:${E}`);break}case">>":{let E=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);ie(this.ctx),this.ctx.state.fileDescriptors.set($,`__file_append__:${E}`);break}case"<":{let E=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);try{let T=await this.ctx.fs.readFile(E);ie(this.ctx),this.ctx.state.fileDescriptors.set($,T)}catch{return _(`bash: ${w}: No such file or directory
|
|
671
|
-
`)}break}case"<>":{let E=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);try{let T=await this.ctx.fs.readFile(E);ie(this.ctx),this.ctx.state.fileDescriptors.set($,`__rw__:${E.length}:${E}:0:${T}`)}catch{await this.ctx.fs.writeFile(E,"","utf8"),ie(this.ctx),this.ctx.state.fileDescriptors.set($,`__rw__:${E.length}:${E}:0:`)}break}case">&":{if(w==="-")this.ctx.state.fileDescriptors.delete($);else if(w.endsWith("-")){let E=w.slice(0,-1),T=Number.parseInt(E,10);if(!Number.isNaN(T)){let k=this.ctx.state.fileDescriptors.get(T);k!==void 0?this.ctx.state.fileDescriptors.set($,k):this.ctx.state.fileDescriptors.set($,`__dupout__:${T}`),this.ctx.state.fileDescriptors.delete(T)}}else{let E=Number.parseInt(w,10);Number.isNaN(E)||(ie(this.ctx),this.ctx.state.fileDescriptors.set($,`__dupout__:${E}`))}break}case"<&":{if(w==="-")this.ctx.state.fileDescriptors.delete($);else if(w.endsWith("-")){let E=w.slice(0,-1),T=Number.parseInt(E,10);if(!Number.isNaN(T)){let k=this.ctx.state.fileDescriptors.get(T);k!==void 0?this.ctx.state.fileDescriptors.set($,k):this.ctx.state.fileDescriptors.set($,`__dupin__:${T}`),this.ctx.state.fileDescriptors.delete(T)}}else{let E=Number.parseInt(w,10);Number.isNaN(E)||(ie(this.ctx),this.ctx.state.fileDescriptors.set($,`__dupin__:${E}`))}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 L}let
|
|
672
|
-
`);return Z(this.ctx,n,t.redirections)}}async executeConditionalCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await Pe(this.ctx,t.redirections);if(s)return s;try{let r=await
|
|
673
|
-
`,n);return Z(this.ctx,i,t.redirections)}}};var se={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
|
|
674
|
-
${
|
|
675
|
-
`)}`)}let t=e.maxRedirects??
|
|
676
|
-
`)}function vi(e){let t=[];for(let r=0;r<e.pipelines.length;r++)t.push(
|
|
671
|
+
`)}break}case"<>":{let E=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);try{let T=await this.ctx.fs.readFile(E);ie(this.ctx),this.ctx.state.fileDescriptors.set($,`__rw__:${E.length}:${E}:0:${T}`)}catch{await this.ctx.fs.writeFile(E,"","utf8"),ie(this.ctx),this.ctx.state.fileDescriptors.set($,`__rw__:${E.length}:${E}:0:`)}break}case">&":{if(w==="-")this.ctx.state.fileDescriptors.delete($);else if(w.endsWith("-")){let E=w.slice(0,-1),T=Number.parseInt(E,10);if(!Number.isNaN(T)){let k=this.ctx.state.fileDescriptors.get(T);k!==void 0?this.ctx.state.fileDescriptors.set($,k):this.ctx.state.fileDescriptors.set($,`__dupout__:${T}`),this.ctx.state.fileDescriptors.delete(T)}}else{let E=Number.parseInt(w,10);Number.isNaN(E)||(ie(this.ctx),this.ctx.state.fileDescriptors.set($,`__dupout__:${E}`))}break}case"<&":{if(w==="-")this.ctx.state.fileDescriptors.delete($);else if(w.endsWith("-")){let E=w.slice(0,-1),T=Number.parseInt(E,10);if(!Number.isNaN(T)){let k=this.ctx.state.fileDescriptors.get(T);k!==void 0?this.ctx.state.fileDescriptors.set($,k):this.ctx.state.fileDescriptors.set($,`__dupin__:${T}`),this.ctx.state.fileDescriptors.delete(T)}}else{let E=Number.parseInt(w,10);Number.isNaN(E)||(ie(this.ctx),this.ctx.state.fileDescriptors.set($,`__dupin__:${E}`))}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 L}let m=await ii(this.ctx,c,f);n.size>0&&(this.ctx.state.tempEnvBindings=this.ctx.state.tempEnvBindings||[],this.ctx.state.tempEnvBindings.push(new Map(n)));let p,y=null;try{p=await this.runCommand(c,f,d,s,!1,!1,u)}catch(g){if(g instanceof ue||g instanceof fe)y=g,p=L;else throw g}let b=i+m;if(b&&(p={...p,stderr:b+p.stderr}),p=await Z(this.ctx,p,t.redirections),y)throw y;if(f.length>0){let g=f[f.length-1];if((c==="declare"||c==="local"||c==="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=c;let v=mn(c)&&c!=="unset"&&c!=="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&&(p={...p,stderr:this.ctx.state.expansionStderr+p.stderr},this.ctx.state.expansionStderr=""),p}async runCommand(t,s,r,n,i=!1,o=!1,a=-1){let l={ctx:this.ctx,runCommand:(c,f,d,h,m,p,y)=>this.runCommand(c,f,d,h,m,p,y),buildExportedEnv:()=>this.buildExportedEnv(),executeUserScript:(c,f,d)=>this.executeUserScript(c,f,d)},u=await Gn(l,t,s,r,n,i,o,a);return u!==null?u:Kn(l,t,s,n,o)}aliasExpansionStack=new Set;expandAlias(t){return Ss(this.ctx.state,t,this.aliasExpansionStack)}async findCommandInPath(t){return ts(this.ctx,t)}async executeSubshell(t,s=""){return ui(this.ctx,t,s,r=>this.executeStatement(r))}async executeGroup(t,s=""){return fi(this.ctx,t,s,r=>this.executeStatement(r))}async executeArithmeticCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await Pe(this.ctx,t.redirections);if(s)return s;try{let r=await j(this.ctx,t.expression.expression),n=X(r!==0);return this.ctx.state.expansionStderr&&(n={...n,stderr:this.ctx.state.expansionStderr+n.stderr},this.ctx.state.expansionStderr=""),Z(this.ctx,n,t.redirections)}catch(r){let n=_(`bash: arithmetic expression: ${r.message}
|
|
672
|
+
`);return Z(this.ctx,n,t.redirections)}}async executeConditionalCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await Pe(this.ctx,t.redirections);if(s)return s;try{let r=await Me(this.ctx,t.expression),n=X(r);return this.ctx.state.expansionStderr&&(n={...n,stderr:this.ctx.state.expansionStderr+n.stderr},this.ctx.state.expansionStderr=""),Z(this.ctx,n,t.redirections)}catch(r){let n=r instanceof Ve?1:2,i=_(`bash: conditional expression: ${r.message}
|
|
673
|
+
`,n);return Z(this.ctx,i,t.redirections)}}};var se={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 hi(e){return e?{maxCallDepth:e.maxCallDepth??se.maxCallDepth,maxCommandCount:e.maxCommandCount??se.maxCommandCount,maxLoopIterations:e.maxLoopIterations??se.maxLoopIterations,maxAwkIterations:e.maxAwkIterations??se.maxAwkIterations,maxSedIterations:e.maxSedIterations??se.maxSedIterations,maxJqIterations:e.maxJqIterations??se.maxJqIterations,maxSqliteTimeoutMs:e.maxSqliteTimeoutMs??se.maxSqliteTimeoutMs,maxPythonTimeoutMs:e.maxPythonTimeoutMs??se.maxPythonTimeoutMs,maxGlobOperations:e.maxGlobOperations??se.maxGlobOperations,maxStringLength:e.maxStringLength??se.maxStringLength,maxArrayElements:e.maxArrayElements??se.maxArrayElements,maxHeredocSize:e.maxHeredocSize??se.maxHeredocSize,maxSubstitutionDepth:e.maxSubstitutionDepth??se.maxSubstitutionDepth,maxBraceExpansionResults:e.maxBraceExpansionResults??se.maxBraceExpansionResults,maxOutputSize:e.maxOutputSize??se.maxOutputSize,maxFileDescriptors:e.maxFileDescriptors??se.maxFileDescriptors,maxSourceDepth:e.maxSourceDepth??se.maxSourceDepth}:{...se}}import{lookup as oo}from"node:dns";function mr(e){try{let t=new URL(e);return{origin:t.origin,pathname:t.pathname,href:t.href}}catch{return null}}function to(e){let t=mr(e);return t?{origin:t.origin,pathPrefix:t.pathname}:null}function so(e,t){let s=mr(e);if(!s)return!1;let r=to(t);return!r||s.origin!==r.origin?!1:r.pathPrefix==="/"||r.pathPrefix===""?!0:s.pathname.startsWith(r.pathPrefix)}function pi(e,t){return!t||t.length===0?!1:t.some(s=>so(e,s))}function yr(e){let t=ro(e);if(t==="localhost"||t.endsWith(".localhost"))return!0;let s=mi(t);if(s)return rs(s);let r=io(t);return r?ao(r):!1}function ro(e){let t=e.trim().toLowerCase();return t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t}function no(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 mi(e){let t=e.split(".");if(t.length===0||t.length>4)return null;let s=t.map(l=>no(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,u]=r;return l>255||u>16777215?null:[l,u>>>16&255,u>>>8&255,u&255]}if(t.length===3){let[l,u,c]=r;return l>255||u>255||c>65535?null:[l,u,c>>>8&255,c&255]}let[n,i,o,a]=r;return n>255||i>255||o>255||a>255?null:[n,i,o,a]}function io(e){let t=e,s=null;if(t.includes(".")){let p=t.lastIndexOf(":");if(p<0)return null;let y=t.slice(p+1),b=mi(y);if(!b)return null;s=b,t=t.slice(0,p)}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=p=>/^[0-9a-f]{1,4}$/i.test(p)?Number.parseInt(p,16):null,u=o.map(l),c=a.map(l);if(u.some(p=>p===null)||c.some(p=>p===null))return null;let f=s?2:0,d=u.length+c.length+f,h=0;if(r===1){if(h=8-d,h<0)return null}else if(d!==8)return null;let m=[...u,...new Array(h).fill(0),...c];return s&&(m.push(s[0]<<8|s[1]),m.push(s[2]<<8|s[3])),m.length===8?m:null}function rs(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||t===100&&s>=64&&s<=127||t===198&&(s===18||s===19)||t===192&&s===0&&e[2]===0||t===192&&s===0&&e[2]===2||t===198&&s===51&&e[2]===100||t===203&&s===0&&e[2]===113||t>=240}function ao(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 rs(n)}if(e[0]===8193&&e[1]===3512)return!0;if(e[0]===100&&e[1]===65435&&e[2]===0&&e[3]===0&&e[4]===0&&e[5]===0){let n=[e[6]>>>8&255,e[6]&255,e[7]>>>8&255,e[7]&255];return rs(n)}if(e[0]===100&&e[1]===65435&&e[2]===1)return!0;if(e[0]===8194){let n=[e[1]>>>8&255,e[1]&255,e[2]>>>8&255,e[2]&255];return rs(n)}return!1}function yi(e){let t=[];for(let s of e){if(!mr(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 Ne=class extends Error{constructor(t,s){let r=s??"URL not in allow-list";super(`Network access denied: ${r}: ${t}`),this.name="NetworkAccessDeniedError"}},vt=class extends Error{constructor(t){super(`Too many redirects (max: ${t})`),this.name="TooManyRedirectsError"}},bt=class extends Error{constructor(t){super(`Redirect target not in allow-list: ${t}`),this.name="RedirectNotAllowedError"}},ns=class extends Error{constructor(t,s){super(`HTTP method '${t}' not allowed. Allowed methods: ${s.join(", ")}`),this.name="MethodNotAllowedError"}},$t=class extends Error{constructor(t){super(`Response body too large (max: ${t} bytes)`),this.name="ResponseTooLargeError"}};function lo(e){return new Promise((t,s)=>{oo(e,{all:!0},(r,n)=>{r?s(r):t(n)})})}var co=20,uo=3e4,fo=10485760,ho=["GET","HEAD"],po=new Set(["GET","HEAD","OPTIONS"]),mo=new Set([301,302,303,307,308]);function gr(e){if(!e.dangerouslyAllowFullInternetAccess){let c=yi(e.allowedUrlPrefixes??[]);if(c.length>0)throw new Error(`Invalid network allow-list:
|
|
674
|
+
${c.join(`
|
|
675
|
+
`)}`)}let t=e.maxRedirects??co,s=e.timeoutMs??uo,r=e.maxResponseSize??fo,n=e.dangerouslyAllowFullInternetAccess?["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"]:e.allowedMethods??ho,i=e.denyPrivateRanges??(typeof process<"u"&&process.env?.NODE_ENV==="production"),o=e._dnsResolve??lo;async function a(c){if(i)try{let f=new URL(c);if(yr(f.hostname))throw new Ne(c,"private/loopback IP address blocked");let d=f.hostname;if(/[a-zA-Z]/.test(d))try{let m=await o(d);for(let{address:p}of m)if(yr(p))throw new Ne(c,"hostname resolves to private/loopback IP address")}catch(m){if(m instanceof Ne)throw m;let p=m?.code;if(!(p==="ENOTFOUND"||p==="ENODATA"))throw new Ne(c,"DNS resolution failed for private IP check")}}catch(f){if(f instanceof Ne)throw f}if(!e.dangerouslyAllowFullInternetAccess&&!pi(c,e.allowedUrlPrefixes??[]))throw new Ne(c)}function l(c){if(e.dangerouslyAllowFullInternetAccess)return;let f=c.toUpperCase();if(!n.includes(f))throw new ns(f,n)}async function u(c,f={}){let d=f.method?.toUpperCase()??"GET";await a(c),l(d);let h=c,m=0,p=f.followRedirects??!0,y=f.timeoutMs!==void 0?Math.min(f.timeoutMs,s):s;for(;;){let b=new AbortController,v=wr(()=>b.abort(),y);try{let A={method:d,headers:f.headers,signal:b.signal,redirect:"manual"};f.body&&!po.has(d)&&(A.body=f.body);let g=await ge.runTrustedAsync(()=>fetch(h,A));if(mo.has(g.status)&&p){let w=g.headers.get("location");if(!w)return await gi(g,h,r);let $=new URL(w,h).href;try{await a($)}catch{throw new bt($)}if(m++,m>t)throw new vt(t);h=$;continue}return await gi(g,h,r)}finally{vr(v)}}}return u}async function gi(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 $t(s)}}let n;if(s>0&&e.body){let i=e.body.getReader(),o=new TextDecoder,a=[],l=0;for(;;){let{done:u,value:c}=await i.read();if(u)break;if(l+=c.byteLength,l>s)throw i.cancel(),new $t(s);a.push(o.decode(c,{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 wi(e){return Ze(e)}function Ze(e){return e.statements.map(vi).join(`
|
|
676
|
+
`)}function vi(e){let t=[];for(let r=0;r<e.pipelines.length;r++)t.push(yo(e.pipelines[r])),r<e.operators.length&&t.push(e.operators[r]);let s=t.join(" ");return e.background&&(s+=" &"),s}function yo(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(bi(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 bi(e){switch(e.type){case"SimpleCommand":return go(e);case"If":return Co(e);case"For":return Po(e);case"CStyleFor":return No(e);case"While":return ko(e);case"Until":return Oo(e);case"Case":return Do(e);case"Subshell":return Io(e);case"Group":return xo(e);case"ArithmeticCommand":return Ro(e);case"ConditionalCommand":return Lo(e);case"FunctionDef":return Fo(e);default:{let t=e;throw new Error(`Unsupported command type: ${t.type}`)}}}function go(e){let t=[];for(let s of e.assignments)t.push(wo(s));e.name&&t.push(ae(e.name));for(let s of e.args)t.push(ae(s));for(let s of e.redirections)t.push(Si(s));return t.join(" ")}function wo(e){let t=e.append?"+=":"=";if(e.array){let s=e.array.map(ae).join(" ");return`${e.name}${t}(${s})`}return e.value?`${e.name}${t}${ae(e.value)}`:`${e.name}${t}`}function ae(e){return e.parts.map(t=>is(t,!1)).join("")}function ze(e){return e.parts.map(t=>is(t,!0)).join("")}function is(e,t){switch(e.type){case"Literal":return t?bo(e.value):vo(e.value);case"SingleQuoted":return`'${e.value}'`;case"DoubleQuoted":return`"${e.parts.map(s=>is(s,!0)).join("")}"`;case"Escaped":return`\\${e.value}`;case"ParameterExpansion":return $i(e);case"CommandSubstitution":return e.legacy?`\`${Ze(e.body)}\``:`$(${Ze(e.body)})`;case"ArithmeticExpansion":return`$((${H(e.expression.expression)}))`;case"ProcessSubstitution":return e.direction==="input"?`<(${Ze(e.body)})`:`>(${Ze(e.body)})`;case"BraceExpansion":return Ao(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 vo(e){return e.replace(/[\s\\'"`!|&;()<>{}[\]*?~#]/g,"\\$&")}function bo(e){return e.replace(/[$`"\\]/g,"\\$&")}function $o(e,t){return e.parts.map(s=>Eo(s,t)).join("")}function Eo(e,t){switch(e.type){case"Literal":return t?e.value:e.value.replace(/[$`]/g,"\\$&");case"Escaped":return`\\${e.value}`;case"ParameterExpansion":return $i(e);case"CommandSubstitution":return e.legacy?`\`${Ze(e.body)}\``:`$(${Ze(e.body)})`;case"ArithmeticExpansion":return`$((${H(e.expression.expression)}))`;default:return is(e,!1)}}function $i(e){return e.operation?`\${${Ei(e.parameter,e.operation)}}`:So(e.parameter)?`\${${e.parameter}}`:`$${e.parameter}`}function So(e){return!(/^[?#@*$!\-0-9]$/.test(e)||/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))}function Ei(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=H(t.offset.expression);return t.length?`${e}:${s}:${H(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?`!${Ei(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 Ao(e){return`{${e.items.map(_o).join(",")}}`}function _o(e){if(e.type==="Word")return ae(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 Si(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=$o(s.content,s.quoted);return`${t}${e.operator}${r}
|
|
677
677
|
${n}${s.delimiter}`}return e.operator==="<<<"?`${t}<<< ${ae(e.target)}`:e.operator==="&>"||e.operator==="&>>"?`${e.operator} ${ae(e.target)}`:`${t}${e.operator} ${ae(e.target)}`}function Ee(e){return e.length===0?"":` ${e.map(Si).join(" ")}`}function ye(e){return e.map(vi).join(`
|
|
678
|
-
`)}function
|
|
678
|
+
`)}function Co(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} ${ye(r.condition)}; then
|
|
679
679
|
${ye(r.body)}`)}return e.elseBody&&t.push(`else
|
|
680
680
|
${ye(e.elseBody)}`),`${t.join(`
|
|
681
681
|
`)}
|
|
682
|
-
fi${Ee(e.redirections)}`}function
|
|
682
|
+
fi${Ee(e.redirections)}`}function Po(e){let t;if(e.words===null)t=`for ${e.variable}`;else{let s=e.words.map(ae).join(" ");t=`for ${e.variable} in ${s}`}return`${t}; do
|
|
683
683
|
${ye(e.body)}
|
|
684
|
-
done${Ee(e.redirections)}`}function
|
|
684
|
+
done${Ee(e.redirections)}`}function No(e){let t=e.init?H(e.init.expression):"",s=e.condition?H(e.condition.expression):"",r=e.update?H(e.update.expression):"";return`for ((${t}; ${s}; ${r})); do
|
|
685
685
|
${ye(e.body)}
|
|
686
|
-
done${Ee(e.redirections)}`}function
|
|
686
|
+
done${Ee(e.redirections)}`}function ko(e){return`while ${ye(e.condition)}; do
|
|
687
687
|
${ye(e.body)}
|
|
688
|
-
done${Ee(e.redirections)}`}function
|
|
688
|
+
done${Ee(e.redirections)}`}function Oo(e){return`until ${ye(e.condition)}; do
|
|
689
689
|
${ye(e.body)}
|
|
690
|
-
done${Ee(e.redirections)}`}function
|
|
690
|
+
done${Ee(e.redirections)}`}function Do(e){let t=e.items.map(To).join(`
|
|
691
691
|
`);return`case ${ae(e.word)} in
|
|
692
692
|
${t}
|
|
693
|
-
esac${Ee(e.redirections)}`}function
|
|
693
|
+
esac${Ee(e.redirections)}`}function To(e){let t=e.patterns.map(ae).join(" | "),s=ye(e.body);return s?`${t})
|
|
694
694
|
${s}
|
|
695
695
|
${e.terminator}`:`${t})
|
|
696
|
-
${e.terminator}`}function
|
|
697
|
-
`],["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=
|
|
696
|
+
${e.terminator}`}function Io(e){return`(${ye(e.body)})${Ee(e.redirections)}`}function xo(e){return`{ ${ye(e.body)}; }${Ee(e.redirections)}`}function Ro(e){return`((${H(e.expression.expression)}))${Ee(e.redirections)}`}function Lo(e){return`[[ ${Ue(e.expression)} ]]${Ee(e.redirections)}`}function Fo(e){let t=bi(e.body);return`${e.name}() ${t}${Ee(e.redirections)}`}function H(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`${H(e.left)} ${e.operator} ${H(e.right)}`;case"ArithUnary":return e.prefix?`${e.operator}${H(e.operand)}`:`${H(e.operand)}${e.operator}`;case"ArithTernary":return`${H(e.condition)} ? ${H(e.consequent)} : ${H(e.alternate)}`;case"ArithAssignment":return`${e.subscript?`${e.variable}[${H(e.subscript)}]`:e.stringKey!==void 0?`${e.variable}[${e.stringKey}]`:e.variable} ${e.operator} ${H(e.value)}`;case"ArithDynamicAssignment":return`${e.subscript?`${H(e.target)}[${H(e.subscript)}]`:H(e.target)} ${e.operator} ${H(e.value)}`;case"ArithDynamicElement":return`${H(e.nameExpr)}[${H(e.subscript)}]`;case"ArithGroup":return`(${H(e.expression)})`;case"ArithNested":return`$((${H(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}[${H(e.index)}]`:e.array;case"ArithDynamicBase":return`\${${e.baseExpr}}#${e.value}`;case"ArithDynamicNumber":return`\${${e.prefix}}${e.suffix}`;case"ArithConcat":return e.parts.map(H).join("");case"ArithDoubleSubscript":return`${e.array}[${H(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 Ue(e){switch(e.type){case"CondBinary":return`${ae(e.left)} ${e.operator} ${ae(e.right)}`;case"CondUnary":return`${e.operator} ${ae(e.operand)}`;case"CondNot":return`! ${Ue(e.operand)}`;case"CondAnd":return`${Ue(e.left)} && ${Ue(e.right)}`;case"CondOr":return`${Ue(e.left)} || ${Ue(e.right)}`;case"CondGroup":return`( ${Ue(e.expression)} )`;case"CondWord":return ae(e.word);default:{let t=e;throw new Error(`Unsupported conditional expression type: ${t.type}`)}}}var as=class{fs;commands=new Map;useDefaultLayout=!1;limits;secureFetch;sleepFn;traceFn;logger;defenseInDepthConfig;coverageWriter;transformPlugins=[];state;constructor(t={}){let s=t.fs??new ft(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",`
|
|
697
|
+
`],["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=hi({...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=gr(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",bs(this.state.options)),this.state.env.set("BASHOPTS",$s(this.state.shoptOptions)),qr(s,this.useDefaultLayout,{pid:this.state.virtualPid,ppid:this.state.virtualPpid,uid:this.state.virtualUid,gid:this.state.virtualGid}),r!=="/"&&s instanceof ft)try{s.mkdirSync(r,{recursive:!0})}catch{}for(let i of Br(t.commands))this.registerCommand(i);if(t.fetch||t.network)for(let i of jr())this.registerCommand(i);if(t.python)for(let i of Hr())this.registerCommand(i);if(t.customCommands)for(let i of t.customCommands)Ur(i)?this.registerCommand(Zr(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
|
|
698
698
|
# Built-in command: ${t.name}
|
|
699
699
|
`;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=_i(t.stdout),t.stderr=_i(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.
|
|
700
|
-
`,exitCode:1,env:pe(this.state.env,s?.env)};if(!t.trim())return{stdout:"",stderr:"",exitCode:0,env:pe(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=Ai(t));let u=this.defenseInDepthConfig?ge.getInstance(this.defenseInDepthConfig):null,c=u?.activate();try{let f=async()=>{let d=ve(l,{maxHeredocSize:this.limits.maxHeredocSize}),h;if(this.transformPlugins.length>0){let v=Object.create(null);for(let A of this.transformPlugins){let g=A.transform({ast:d,metadata:v});d=g.ast,g.metadata&&(v=os(v,g.metadata))}h=v}let
|
|
700
|
+
`,exitCode:1,env:pe(this.state.env,s?.env)};if(!t.trim())return{stdout:"",stderr:"",exitCode:0,env:pe(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=Ai(t));let u=this.defenseInDepthConfig?ge.getInstance(this.defenseInDepthConfig):null,c=u?.activate();try{let f=async()=>{let d=ve(l,{maxHeredocSize:this.limits.maxHeredocSize}),h;if(this.transformPlugins.length>0){let v=Object.create(null);for(let A of this.transformPlugins){let g=A.transform({ast:d,metadata:v});d=g.ast,g.metadata&&(v=os(v,g.metadata))}h=v}let m={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:u?.isEnabled()===!0},b=await new wt(m,a).executeScript(d);return h&&(b.metadata=h),this.logResult(b)};return c?await c.run(f):await f()}catch(f){if(f instanceof B)return this.logResult({stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode,env:pe(this.state.env,s?.env)});if(f instanceof we)return this.logResult({stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode,env:pe(this.state.env,s?.env)});if(f instanceof Ve)return this.logResult({stdout:f.stdout,stderr:f.stderr,exitCode:1,env:pe(this.state.env,s?.env)});if(f instanceof At)return this.logResult({stdout:f.stdout,stderr:f.stderr,exitCode:124,env:pe(this.state.env,s?.env)});if(f instanceof Y)return this.logResult({stdout:f.stdout,stderr:he(f.stderr),exitCode:Y.EXIT_CODE,env:pe(this.state.env,s?.env)});if(f instanceof Ge)return this.logResult({stdout:"",stderr:`bash: security violation: ${he(f.message)}
|
|
701
701
|
`,exitCode:1,env:pe(this.state.env,s?.env)});if(f.name==="ParseException")return this.logResult({stdout:"",stderr:`bash: syntax error: ${he(f.message)}
|
|
702
|
-
`,exitCode:2,env:pe(this.state.env,s?.env)});if(f instanceof
|
|
702
|
+
`,exitCode:2,env:pe(this.state.env,s?.env)});if(f instanceof kr)return this.logResult({stdout:"",stderr:`bash: ${he(f.message)}
|
|
703
703
|
`,exitCode:2,env:pe(this.state.env,s?.env)});if(f instanceof RangeError)return this.logResult({stdout:"",stderr:`bash: ${he(f.message)}
|
|
704
|
-
`,exitCode:1,env:pe(this.state.env,s?.env)});throw f}finally{c?.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
|
|
704
|
+
`,exitCode:1,env:pe(this.state.env,s?.env)});throw f}finally{c?.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 xe(this.state.env)}registerTransformPlugin(t){this.transformPlugins.push(t)}transform(t){let s=Ai(t),r=ve(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=os(n,o.metadata))}return{script:wi(r),ast:r,metadata:n}}};function Ai(e){let t=e.split(`
|
|
705
705
|
`),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 u=l[1]==="-",c=l[3];r.push({delimiter:c,stripTabs:u})}}return s.join(`
|
|
706
|
-
`)}var Lo=new TextDecoder("utf-8",{fatal:!0});function _i(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 Lo.decode(s)}catch{return e}}import*as U from"node:fs";import*as ne from"node:path";var Fo=["ELOOP","EFBIG","EPERM"],Mo="/home/user/project",ot=class{root;canonicalRoot;mountPoint;readOnly;maxFileReadSize;allowSymlinks;memory=new Map;deleted=new Set;constructor(t){this.root=ne.resolve(t.root);let s=t.mountPoint??Mo;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,Ar(this.root,"OverlayFs"),this.canonicalRoot=U.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=M(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=M(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=M(t),r=this.getRelativeToMount(s);if(r===null)return null;let n=ne.join(this.root,r),i=ne.resolve(n);return cs(i,this.root)?i:null}resolveRealPath_(t){return t?this.allowSymlinks?Er(t,this.canonicalRoot):Sr(t,this.root,this.canonicalRoot):null}resolveRealPathParent_(t){if(!t)return null;let s=ne.dirname(t),r=this.resolveRealPath_(s);return r===null?null:ne.join(r,ne.basename(t))}sanitizeError(t,s,r){Cr(t,s,r,Fo)}ensureParentDirs(t){let s=Ke(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=M(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 U.promises.lstat(r),!0}catch{return!1}}async readFile(t,s){let r=await this.readFileBuffer(t),n=Le(s);return Tt(r,n)}async readFileBuffer(t,s=new Set){W(t,"open");let r=M(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 U.promises.lstat(i);if(o.isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, open '${t}'`);let u=await U.promises.readlink(i),c=this.realTargetToVirtual(r,u),f=this.resolveSymlink(r,c);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?U.constants.O_RDONLY:U.constants.O_RDONLY|U.constants.O_NOFOLLOW,l=await U.promises.open(i,a);try{let u=await l.readFile();return new Uint8Array(u)}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){W(t,"write"),this.assertWritable(`write '${t}'`);let n=M(t);this.ensureParentDirs(n);let i=Le(r),o=Qe(s,i);this.memory.set(n,{type:"file",content:o,mode:420,mtime:new Date}),this.deleted.delete(n)}async appendFile(t,s,r){W(t,"append"),this.assertWritable(`append '${t}'`);let n=M(t),i=Le(r),o=Qe(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){W(t,"stat");let r=M(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 U.promises.lstat(i);if(o.isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let a=await U.promises.readlink(i),l=this.realTargetToVirtual(r,a),u=this.resolveSymlink(r,l);return this.stat(u,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){W(t,"lstat");let s=M(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 U.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){return Xe(t,s)}realTargetToVirtual(t,s){let r=_r(s,this.canonicalRoot);if(r.withinRoot){if(!ne.isAbsolute(s))return s;let n=r.relativePath;return this.mountPoint==="/"?n:`${this.mountPoint}${n}`}return r.safeName}async mkdir(t,s){W(t,"mkdir"),this.assertWritable(`mkdir '${t}'`);let r=M(t);if(await this.existsInOverlay(r)){if(!s?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${t}'`);return}let i=Ke(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),u=l.split("/")[0];u&&!l.includes("/",u.length)&&n.add(u)}for(let[a,l]of this.memory)if(a!==s&&a.startsWith(i)){let u=a.slice(i.length),c=u.split("/")[0];c&&!n.has(c)&&!u.includes("/",1)&&r.set(c,{name:c,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 U.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 U.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=M(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 U.promises.lstat(l)).isSymbolicLink()){if(!this.allowSymlinks)return{normalized:r,outsideOverlay:!0};let c=await U.promises.readlink(l),f=this.realTargetToVirtual(r,c),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){W(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){W(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){W(t,"rm"),this.assertWritable(`rm '${t}'`);let r=M(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.memory.delete(r),this.existsOnRealFs(r)&&this.deleted.add(r)}existsOnRealFs(t){let s=this.toRealPath(t),r=this.resolveRealPathParent_(s);if(!r)return!1;try{return U.lstatSync(r),!0}catch{return!1}}async cp(t,s,r){W(t,"cp"),W(s,"cp"),this.assertWritable(`cp '${s}'`);let n=M(t),i=M(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 u of l){let c=n==="/"?`/${u}`:`${n}/${u}`,f=i==="/"?`/${u}`:`${i}/${u}`;await this.cp(c,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){return Ct(t,s)}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=U.readdirSync(r);for(let i of n){let o=t==="/"?`/${i}`:`${t}/${i}`;if(this.deleted.has(o))continue;s.add(o);let a=ne.join(r,i);U.lstatSync(a).isDirectory()&&this.scanRealFs(o,s)}}catch{}}async chmod(t,s){W(t,"chmod"),this.assertWritable(`chmod '${t}'`);let r=M(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}'`);W(s,"symlink"),this.assertWritable(`symlink '${s}'`);let r=M(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){W(t,"link"),W(s,"link"),this.assertWritable(`link '${s}'`);let r=M(t),n=M(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){W(t,"readlink");let s=M(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 U.promises.readlink(n);if(!ne.isAbsolute(i)){let o=ne.resolve(ne.dirname(n),i),a;try{a=U.realpathSync(o)}catch{a=o}if(!cs(a,this.canonicalRoot))return ne.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){W(t,"realpath");let s=M(t),r=new Set,n=async a=>{let l=a==="/"?[]:a.slice(1).split("/"),u="";for(let c of l){if(u=`${u}/${c}`,r.has(u))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(u))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let f=this.memory.get(u),d=0,h=40;for(;f&&f.type==="symlink"&&d<h;){if(r.add(u),u=this.resolveSymlink(u,f.target),d++,r.has(u))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(u))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);f=this.memory.get(u)}if(d>=h)throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(!f){let y=this.toRealPath(u),p=this.resolveRealPath_(y);if(p)try{if((await U.promises.lstat(p)).isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let b=await U.promises.readlink(p),v=this.realTargetToVirtual(u,b);return r.add(u),u=this.resolveSymlink(u,v),n(u)}}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 U.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 u||"/"},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){W(t,"utimes"),this.assertWritable(`utimes '${t}'`);let n=M(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})}};function Pi(){console.log(`just-bash - A secure bash environment for AI agents
|
|
706
|
+
`)}var Mo=new TextDecoder("utf-8",{fatal:!0});function _i(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 Mo.decode(s)}catch{return e}}import*as U from"node:fs";import*as ne from"node:path";var Wo=["ELOOP","EFBIG","EPERM"],zo="/home/user/project",ot=class{root;canonicalRoot;mountPoint;readOnly;maxFileReadSize;allowSymlinks;memory=new Map;deleted=new Set;constructor(t){this.root=ne.resolve(t.root);let s=t.mountPoint??zo;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,_r(this.root,"OverlayFs"),this.canonicalRoot=U.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=M(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=M(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=M(t),r=this.getRelativeToMount(s);if(r===null)return null;let n=ne.join(this.root,r),i=ne.resolve(n);return cs(i,this.root)?i:null}resolveRealPath_(t){return t?this.allowSymlinks?Sr(t,this.canonicalRoot):Ar(t,this.root,this.canonicalRoot):null}resolveRealPathParent_(t){if(!t)return null;let s=ne.dirname(t),r=this.resolveRealPath_(s);return r===null?null:ne.join(r,ne.basename(t))}sanitizeError(t,s,r){Pr(t,s,r,Wo)}ensureParentDirs(t){let s=Ke(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=M(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 U.promises.lstat(r),!0}catch{return!1}}async readFile(t,s){let r=await this.readFileBuffer(t),n=Fe(s);return Tt(r,n)}async readFileBuffer(t,s=new Set){W(t,"open");let r=M(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 U.promises.lstat(i);if(o.isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, open '${t}'`);let u=await U.promises.readlink(i),c=this.realTargetToVirtual(r,u),f=this.resolveSymlink(r,c);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?U.constants.O_RDONLY:U.constants.O_RDONLY|U.constants.O_NOFOLLOW,l=await U.promises.open(i,a);try{let u=await l.readFile();return new Uint8Array(u)}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){W(t,"write"),this.assertWritable(`write '${t}'`);let n=M(t);this.ensureParentDirs(n);let i=Fe(r),o=Qe(s,i);this.memory.set(n,{type:"file",content:o,mode:420,mtime:new Date}),this.deleted.delete(n)}async appendFile(t,s,r){W(t,"append"),this.assertWritable(`append '${t}'`);let n=M(t),i=Fe(r),o=Qe(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){W(t,"stat");let r=M(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 U.promises.lstat(i);if(o.isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let a=await U.promises.readlink(i),l=this.realTargetToVirtual(r,a),u=this.resolveSymlink(r,l);return this.stat(u,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){W(t,"lstat");let s=M(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 U.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){return Xe(t,s)}realTargetToVirtual(t,s){let r=Cr(s,this.canonicalRoot);if(r.withinRoot){if(!ne.isAbsolute(s))return s;let n=r.relativePath;return this.mountPoint==="/"?n:`${this.mountPoint}${n}`}return r.safeName}async mkdir(t,s){W(t,"mkdir"),this.assertWritable(`mkdir '${t}'`);let r=M(t);if(await this.existsInOverlay(r)){if(!s?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${t}'`);return}let i=Ke(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),u=l.split("/")[0];u&&!l.includes("/",u.length)&&n.add(u)}for(let[a,l]of this.memory)if(a!==s&&a.startsWith(i)){let u=a.slice(i.length),c=u.split("/")[0];c&&!n.has(c)&&!u.includes("/",1)&&r.set(c,{name:c,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 U.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 U.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=M(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 U.promises.lstat(l)).isSymbolicLink()){if(!this.allowSymlinks)return{normalized:r,outsideOverlay:!0};let c=await U.promises.readlink(l),f=this.realTargetToVirtual(r,c),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){W(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){W(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){W(t,"rm"),this.assertWritable(`rm '${t}'`);let r=M(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.memory.delete(r),this.existsOnRealFs(r)&&this.deleted.add(r)}existsOnRealFs(t){let s=this.toRealPath(t),r=this.resolveRealPathParent_(s);if(!r)return!1;try{return U.lstatSync(r),!0}catch{return!1}}async cp(t,s,r){W(t,"cp"),W(s,"cp"),this.assertWritable(`cp '${s}'`);let n=M(t),i=M(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 u of l){let c=n==="/"?`/${u}`:`${n}/${u}`,f=i==="/"?`/${u}`:`${i}/${u}`;await this.cp(c,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){return Ct(t,s)}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=U.readdirSync(r);for(let i of n){let o=t==="/"?`/${i}`:`${t}/${i}`;if(this.deleted.has(o))continue;s.add(o);let a=ne.join(r,i);U.lstatSync(a).isDirectory()&&this.scanRealFs(o,s)}}catch{}}async chmod(t,s){W(t,"chmod"),this.assertWritable(`chmod '${t}'`);let r=M(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}'`);W(s,"symlink"),this.assertWritable(`symlink '${s}'`);let r=M(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){W(t,"link"),W(s,"link"),this.assertWritable(`link '${s}'`);let r=M(t),n=M(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){W(t,"readlink");let s=M(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 U.promises.readlink(n);if(!ne.isAbsolute(i)){let o=ne.resolve(ne.dirname(n),i),a;try{a=U.realpathSync(o)}catch{a=o}if(!cs(a,this.canonicalRoot))return ne.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){W(t,"realpath");let s=M(t),r=new Set,n=async a=>{let l=a==="/"?[]:a.slice(1).split("/"),u="";for(let c of l){if(u=`${u}/${c}`,r.has(u))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(u))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let f=this.memory.get(u),d=0,h=40;for(;f&&f.type==="symlink"&&d<h;){if(r.add(u),u=this.resolveSymlink(u,f.target),d++,r.has(u))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(u))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);f=this.memory.get(u)}if(d>=h)throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(!f){let m=this.toRealPath(u),p=this.resolveRealPath_(m);if(p)try{if((await U.promises.lstat(p)).isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let b=await U.promises.readlink(p),v=this.realTargetToVirtual(u,b);return r.add(u),u=this.resolveSymlink(u,v),n(u)}}catch(y){if(y.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);this.sanitizeError(y,t,"realpath")}else if(!this.allowSymlinks){let y=this.resolveRealPathParent_(m);if(y)try{if((await U.promises.lstat(y)).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 u||"/"},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){W(t,"utimes"),this.assertWritable(`utimes '${t}'`);let n=M(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})}};function Pi(){console.log(`just-bash - A secure bash environment for AI agents
|
|
707
707
|
|
|
708
708
|
Usage:
|
|
709
709
|
just-bash [options] [script-file]
|
|
@@ -749,5 +749,5 @@ Examples:
|
|
|
749
749
|
|
|
750
750
|
# Allow write operations (writes stay in memory)
|
|
751
751
|
just-bash -c 'echo test > /tmp/file.txt && cat /tmp/file.txt' --allow-write
|
|
752
|
-
`)}function
|
|
753
|
-
${s}`);try{let a=await o.exec(s);t.json?console.log(JSON.stringify({stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode})):(a.stdout&&process.stdout.write(a.stdout),a.stderr&&process.stderr.write(a.stderr)),process.exit(a.exitCode)}catch(a){let l=he(a instanceof Error?a.message:String(a));t.json?console.log(JSON.stringify({stdout:"",stderr:l,exitCode:1})):console.error(l),process.exit(1)}}
|
|
752
|
+
`)}function Vo(){console.log("just-bash 1.0.0")}function Bo(e){let t={root:process.cwd(),cwd:"/",cwdOverridden:!1,errexit:!1,allowWrite:!1,python:!1,json:!1,help:!1,version:!1},s=0;for(;s<e.length;){let r=e[s];if(r==="-h"||r==="--help")t.help=!0,s++;else if(r==="-v"||r==="--version")t.version=!0,s++;else if(r==="-c")s+1>=e.length&&(console.error("Error: -c requires a script argument"),process.exit(1)),t.script=e[s+1],s+=2;else if(r==="-e"||r==="--errexit")t.errexit=!0,s++;else if(r==="--root")s+1>=e.length&&(console.error("Error: --root requires a path argument"),process.exit(1)),t.root=Ci(e[s+1]),s+=2;else if(r==="--cwd")s+1>=e.length&&(console.error("Error: --cwd requires a path argument"),process.exit(1)),t.cwd=e[s+1],t.cwdOverridden=!0,s+=2;else if(r==="--json")t.json=!0,s++;else if(r==="--allow-write")t.allowWrite=!0,s++;else if(r==="--python")t.python=!0,s++;else if(r.startsWith("-"))if(r.length>2&&!r.startsWith("--")){let n=r.slice(1);for(let i of n)if(i==="e")t.errexit=!0;else if(i==="h")t.help=!0;else if(i==="v")t.version=!0;else if(i==="c"){s+1>=e.length&&(console.error("Error: -c requires a script argument"),process.exit(1)),t.script=e[s+1],s++;break}else console.error(`Error: Unknown option: -${i}`),process.exit(1);s++}else console.error(`Error: Unknown option: ${r}`),process.exit(1);else!t.scriptFile&&!t.script?t.scriptFile=r:t.scriptFile&&t.root===process.cwd()&&(t.root=Ci(r)),s++}return t}function jo(e){if(!e||e==="/")return"/";let t=e.endsWith("/")&&e!=="/"?e.slice(0,-1):e;t.startsWith("/")||(t=`/${t}`);let s=t.split("/").filter(n=>n&&n!=="."),r=[];for(let n of s)n===".."?r.pop():r.push(n);return`/${r.join("/")}`||"/"}async function Ho(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}async function Uo(){let e=process.argv.slice(2),t=Bo(e);t.help&&(Pi(),process.exit(0)),t.version&&(Vo(),process.exit(0));let s;if(t.script)s=t.script;else if(t.scriptFile){let a=new ot({root:t.root}),l=a.getMountPoint();try{let u=t.scriptFile.startsWith("/")?t.scriptFile:`${l}/${t.scriptFile}`;s=await a.readFile(u,"utf-8")}catch(u){console.error(`Error: Cannot read script file: ${t.scriptFile}`),console.error(he(u instanceof Error?u.message:String(u))),process.exit(1)}}else process.stdin.isTTY?(Pi(),process.exit(1)):s=await Ho();s.trim()||(t.json&&console.log(JSON.stringify({stdout:"",stderr:"",exitCode:0})),process.exit(0));let r=new ot({root:t.root,readOnly:!t.allowWrite}),n=r.getMountPoint(),i=t.cwdOverridden?jo(t.cwd):n,o=new as({fs:r,cwd:i,python:t.python});t.errexit&&(s=`set -e
|
|
753
|
+
${s}`);try{let a=await o.exec(s);t.json?console.log(JSON.stringify({stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode})):(a.stdout&&process.stdout.write(a.stdout),a.stderr&&process.stderr.write(a.stderr)),process.exit(a.exitCode)}catch(a){let l=he(a instanceof Error?a.message:String(a));t.json?console.log(JSON.stringify({stdout:"",stderr:l,exitCode:1})):console.error(l),process.exit(1)}}Uo().catch(e=>{console.error("Fatal error:",he(e instanceof Error?e.message:String(e))),process.exit(1)});
|