just-bash 2.11.11 → 2.11.13
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/just-bash.js +19 -19
- package/dist/bin/shell/shell.js +78 -78
- package/dist/bundle/index.cjs +510 -510
- package/dist/bundle/index.js +99 -99
- package/package.json +1 -1
package/dist/bin/shell/shell.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{B as Ar,C as _r,D as fe,E as ze,F as Q,G as Se,H as St,I as Cr,J as D,K as Pr,L as kr,M as Ce,N as as,O as At,P as V,a as yr,b as ts,c as gr,d as $t,e as K,f as W,g as $e,h as te,i as _e,j as De,k as ss,l as Et,m as wr,n as rs,o as vr,p as ye,q as Ne,r as br,s as $r,t as ns,u as is,v as Ie,w as Er,x as Sr,y as Ee,z as os}from"./chunks/chunk-ISOXAKGQ.js";import{a as qe,b as j,c as es,d as dr,e as hr,f as pr,g as Y,h as mr}from"./chunks/chunk-4QM2TCNV.js";import{a as xe,b as be}from"./chunks/chunk-4PRVMER6.js";import{a as nt}from"./chunks/chunk-SE4C7FJY.js";import{a as he,b as pe,c as ue,d as me,e as ur,f as z,g as We,h as wt,i as vt,j as fr,k as ie,l as Te,m as bt,n as we}from"./chunks/chunk-K5IXNHO5.js";import"./chunks/chunk-OBH7XN5N.js";import{a as ve}from"./chunks/chunk-4VDEBYW7.js";import{a as gt}from"./chunks/chunk-KGOUQS5A.js";import*as hi from"node:fs";import*as pi from"node:readline";var Ze=[{name:"echo",load:async()=>(await import("./chunks/echo-2MUAOGUE.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-3J7U3HHI.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-TZC5BRAY.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-G2PXHSNX.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-6OKMS3KO.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-5QIBTLJG.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-5TCJXDGY.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-4O2C4V42.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-6VBAPL3Y.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-YNOUXNUY.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-XH7E4E2C.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-FRIPZKKT.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-FRIPZKKT.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-FRIPZKKT.js")).egrepCommand},{name:"rg",load:async()=>(await import("./chunks/rg-3R5G2XL4.js")).rgCommand},{name:"sed",load:async()=>(await import("./chunks/sed-PHQQJ4SI.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-PWEGD656.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-NZSEYCI6.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-FZWFZEN5.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-R3F3Z5DX.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-HDHQDWRG.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-3UVLMQ2K.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-GDDRKGRB.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-NOZ7FFXW.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-K777TRNA.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-66BNA4IN.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-EVLPSWFF.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-EVLPSWFF.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-YWPEV2QC.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-WB6O736J.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-WB6O736J.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-CXQ33VMW.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-YXBFJFHG.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-PICQVS6Q.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-RS7REDYT.js")).timeoutCommand},{name:"time",load:async()=>(await import("./chunks/time-4C3A4THJ.js")).timeCommand},{name:"seq",load:async()=>(await import("./chunks/seq-V7KBLSQ7.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-MLHUWFYI.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-JF5TTAKQ.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-67WZ6OMV.js")).whichCommand},{name:"tac",load:async()=>(await import("./chunks/tac-TZBNTR4K.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-EENEW6WQ.js")).gzipCommand},{name:"gunzip",load:async()=>(await import("./chunks/gzip-EENEW6WQ.js")).gunzipCommand},{name:"zcat",load:async()=>(await import("./chunks/gzip-EENEW6WQ.js")).zcatCommand}];(typeof __BROWSER__>"u"||!__BROWSER__)&&(Ze.push({name:"tar",load:async()=>(await import("./chunks/tar-7B5KH3QG.js")).tarCommand}),Ze.push({name:"yq",load:async()=>(await import("./chunks/yq-WUJ5JNDT.js")).yqCommand}),Ze.push({name:"xan",load:async()=>(await import("./chunks/xan-FMSZPFX4.js")).xanCommand}),Ze.push({name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-4SEIR46P.js")).sqlite3Command}));var ls=[];(typeof __BROWSER__>"u"||!__BROWSER__)&&(ls.push({name:"python3",load:async()=>(await import("./chunks/python3-YJ7YGEW7.js")).python3Command}),ls.push({name:"python",load:async()=>(await import("./chunks/python3-YJ7YGEW7.js")).pythonCommand}));var wi=[{name:"curl",load:async()=>(await import("./chunks/curl-RWQO3SBN.js")).curlCommand}],Nr=new Map;function cs(e){return{name:e.name,async execute(t,s){let r=Nr.get(e.name);if(r||(r=await e.load(),Nr.set(e.name,r)),s.coverage&&(typeof __BROWSER__>"u"||!__BROWSER__)){let{emitFlagCoverage:n}=await import("./chunks/flag-coverage-CVSXSL4T.js");n(s.coverage,e.name,t)}return r.execute(t,s)}}}function Or(e){return(e?Ze.filter(s=>e.includes(s.name)):Ze).map(cs)}function Tr(){return wi.map(cs)}function xr(){return ls.map(cs)}function Dr(e){return"load"in e&&typeof e.load=="function"}function Ir(e){let t=null;return{name:e.name,async execute(s,r){return t||(t=await e.load()),t.execute(s,r)}}}var vi=new TextEncoder,bi=new TextDecoder;function Ge(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 vi.encode(e)}function _t(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 bi.decode(e)}function Re(e){if(e!=null)return typeof e=="string"?e:e.encoding??void 0}var Ke=new TextEncoder;function $i(e){return typeof e=="object"&&e!==null&&!(e instanceof Uint8Array)&&"content"in e}function se(e,t){if(e.includes("\0"))throw new Error(`ENOENT: path contains null byte, ${t} '${e}'`)}var it=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):$i(r)?this.writeFileSync(s,r.content,void 0,{mode:r.mode,mtime:r.mtime}):this.writeFileSync(s,r)}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let r=s.split("/").filter(i=>i&&i!=="."),n=[];for(let i of r)i===".."?n.pop():n.push(i);return`/${n.join("/")}`||"/"}dirname(t){let s=this.normalizePath(t);if(s==="/")return"/";let r=s.lastIndexOf("/");return r===0?"/":s.slice(0,r)}ensureParentDirs(t){let s=this.dirname(t);s!=="/"&&(this.data.has(s)||(this.ensureParentDirs(s),this.data.set(s,{type:"directory",mode:493,mtime:new Date})))}writeFileSync(t,s,r,n){se(t,"write");let i=this.normalizePath(t);this.ensureParentDirs(i);let o=Re(r),a=Ge(s,o);this.data.set(i,{type:"file",content:a,mode:n?.mode??420,mtime:n?.mtime??new Date})}writeFileLazy(t,s,r){se(t,"write");let n=this.normalizePath(t);this.ensureParentDirs(n),this.data.set(n,{type:"file",lazy:s,mode:r?.mode??420,mtime:r?.mtime??new Date})}async materializeLazy(t,s){let r=await s.lazy(),i={type:"file",content:typeof r=="string"?Ke.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=Re(s);return _t(r,n)}async readFileBuffer(t){se(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:Ke.encode(n.content)}return r.content instanceof Uint8Array?r.content:Ke.encode(r.content)}async writeFile(t,s,r){this.writeFileSync(t,s,r)}async appendFile(t,s,r){se(t,"append");let n=this.normalizePath(t),i=this.data.get(n);if(i&&i.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${t}'`);let o=Re(r),a=Ge(s,o);if(i?.type==="file"){let l=i;"lazy"in l&&(l=await this.materializeLazy(n,l));let c="content"in l&&l.content instanceof Uint8Array?l.content:Ke.encode("content"in l?l.content:""),u=new Uint8Array(c.length+a.length);u.set(c),u.set(a,c.length),this.data.set(n,{type:"file",content:u,mode:l.mode,mtime:new Date})}else this.writeFileSync(t,s,r)}async exists(t){if(t.includes("\0"))return!1;try{let s=this.resolvePathWithSymlinks(t);return this.data.has(s)}catch{return!1}}async stat(t){se(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=Ke.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){se(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=Ke.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:n,mtime:r.mtime||new Date}}resolveSymlink(t,s){if(s.startsWith("/"))return this.normalizePath(s);let r=this.dirname(t);return this.normalizePath(r==="/"?`/${s}`:`${r}/${s}`)}resolveIntermediateSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let r=s.slice(1).split("/");if(r.length<=1)return s;let n="",i=new Set;for(let o=0;o<r.length-1;o++){let a=r[o];n=`${n}/${a}`;let l=this.data.get(n),c=0,u=40;for(;l&&l.type==="symlink"&&c<u;){if(i.has(n))throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`);i.add(n),n=this.resolveSymlink(n,l.target),l=this.data.get(n),c++}if(c>=u)throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`)}return`${n}/${r[r.length-1]}`}resolvePathWithSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let r=s.slice(1).split("/"),n="",i=new Set;for(let o of r){n=`${n}/${o}`;let a=this.data.get(n),l=0,c=40;for(;a&&a.type==="symlink"&&l<c;){if(i.has(n))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);i.add(n),n=this.resolveSymlink(n,a.target),a=this.data.get(n),l++}if(l>=c)throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`)}return n}async mkdir(t,s){this.mkdirSync(t,s)}mkdirSync(t,s){se(t,"mkdir");let r=this.normalizePath(t);if(this.data.has(r)){if(this.data.get(r)?.type==="file")throw new Error(`EEXIST: file already exists, mkdir '${t}'`);if(!s?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${t}'`);return}let n=this.dirname(r);if(n!=="/"&&!this.data.has(n))if(s?.recursive)this.mkdirSync(n,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.data.set(r,{type:"directory",mode:493,mtime:new Date})}async readdir(t){return(await this.readdirWithFileTypes(t)).map(r=>r.name)}async readdirWithFileTypes(t){se(t,"scandir");let s=this.normalizePath(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let n=new Set;for(;r&&r.type==="symlink";){if(n.has(s))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);n.add(s),s=this.resolveSymlink(s,r.target),r=this.data.get(s)}if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${t}'`);let i=s==="/"?"/":`${s}/`,o=new Map;for(let[a,l]of this.data.entries())if(a!==s&&a.startsWith(i)){let c=a.slice(i.length),u=c.split("/")[0];u&&!c.includes("/",u.length)&&!o.has(u)&&o.set(u,{name:u,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}return Array.from(o.values()).sort((a,l)=>a.name<l.name?-1:a.name>l.name?1:0)}async rm(t,s){se(t,"rm");let r=this.normalizePath(t),n=this.data.get(r);if(!n){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}if(n.type==="directory"){let i=await this.readdir(r);if(i.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let o of i){let a=r==="/"?`/${o}`:`${r}/${o}`;await this.rm(a,s)}}}this.data.delete(r)}async cp(t,s,r){se(t,"cp"),se(s,"cp");let n=this.normalizePath(t),i=this.normalizePath(s),o=this.data.get(n);if(!o)throw new Error(`ENOENT: no such file or directory, cp '${t}'`);if(o.type==="file")if(this.ensureParentDirs(i),"content"in o){let a=o.content instanceof Uint8Array?new Uint8Array(o.content):o.content;this.data.set(i,{...o,content:a})}else this.data.set(i,{...o});else if(o.type==="symlink")this.ensureParentDirs(i),this.data.set(i,{...o});else if(o.type==="directory"){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let a=await this.readdir(n);for(let l of a){let c=n==="/"?`/${l}`:`${n}/${l}`,u=i==="/"?`/${l}`:`${i}/${l}`;await this.cp(c,u,r)}}}async mv(t,s){await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(t,s){if(s.startsWith("/"))return this.normalizePath(s);let r=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(r)}async chmod(t,s){se(t,"chmod");let r=this.normalizePath(t),n=this.data.get(r);if(!n)throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);n.mode=s}async symlink(t,s){se(s,"symlink");let r=this.normalizePath(s);if(this.data.has(r))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(r),this.data.set(r,{type:"symlink",target:t,mode:511,mtime:new Date})}async link(t,s){se(t,"link"),se(s,"link");let r=this.normalizePath(t),n=this.normalizePath(s),i=this.data.get(r);if(!i)throw new Error(`ENOENT: no such file or directory, link '${t}'`);if(i.type!=="file")throw new Error(`EPERM: operation not permitted, link '${t}'`);if(this.data.has(n))throw new Error(`EEXIST: file already exists, link '${s}'`);let o=i;"lazy"in o&&(o=await this.materializeLazy(r,o)),this.ensureParentDirs(n),this.data.set(n,{type:"file",content:o.content,mode:o.mode,mtime:o.mtime})}async readlink(t){se(t,"readlink");let s=this.normalizePath(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return r.target}async realpath(t){se(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){se(t,"utimes");let n=this.normalizePath(t),i=this.resolvePathWithSymlinks(n),o=this.data.get(i);if(!o)throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);o.mtime=r}};function Ei(e){let t=e;return typeof t.mkdirSync=="function"&&typeof t.writeFileSync=="function"}function Si(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 Ai(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 _i(e,t){e.mkdirSync("/proc/self/fd",{recursive:!0}),e.writeFileSync("/proc/version",`${yr}
|
|
2
|
+
import{B as Ar,C as _r,D as fe,E as ze,F as Q,G as Se,H as St,I as Pr,J as D,K as Cr,L as kr,M as Pe,N as as,O as At,P as V,a as yr,b as ts,c as gr,d as $t,e as K,f as W,g as $e,h as te,i as _e,j as De,k as ss,l as Et,m as wr,n as rs,o as vr,p as ye,q as Ne,r as br,s as $r,t as ns,u as is,v as Ie,w as Er,x as Sr,y as Ee,z as os}from"./chunks/chunk-ISOXAKGQ.js";import{a as qe,b as j,c as es,d as dr,e as hr,f as pr,g as Y,h as mr}from"./chunks/chunk-4QM2TCNV.js";import{a as xe,b as be}from"./chunks/chunk-4PRVMER6.js";import{a as nt}from"./chunks/chunk-SE4C7FJY.js";import{a as he,b as pe,c as ue,d as me,e as ur,f as z,g as We,h as wt,i as vt,j as fr,k as ie,l as Te,m as bt,n as we}from"./chunks/chunk-K5IXNHO5.js";import"./chunks/chunk-OBH7XN5N.js";import{a as ve}from"./chunks/chunk-4VDEBYW7.js";import{a as gt}from"./chunks/chunk-KGOUQS5A.js";import*as hi from"node:fs";import*as pi from"node:readline";var Ze=[{name:"echo",load:async()=>(await import("./chunks/echo-2MUAOGUE.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-3J7U3HHI.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-TZC5BRAY.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-G2PXHSNX.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-6OKMS3KO.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-5QIBTLJG.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-5TCJXDGY.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-4O2C4V42.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-6VBAPL3Y.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-YNOUXNUY.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-XH7E4E2C.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-FRIPZKKT.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-FRIPZKKT.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-FRIPZKKT.js")).egrepCommand},{name:"rg",load:async()=>(await import("./chunks/rg-3R5G2XL4.js")).rgCommand},{name:"sed",load:async()=>(await import("./chunks/sed-PHQQJ4SI.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-PWEGD656.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-NZSEYCI6.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-FZWFZEN5.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-R3F3Z5DX.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-HDHQDWRG.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-3UVLMQ2K.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-GDDRKGRB.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-NOZ7FFXW.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-K777TRNA.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-66BNA4IN.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-EVLPSWFF.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-EVLPSWFF.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-YWPEV2QC.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-WB6O736J.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-WB6O736J.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-CXQ33VMW.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-YXBFJFHG.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-PICQVS6Q.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-RS7REDYT.js")).timeoutCommand},{name:"time",load:async()=>(await import("./chunks/time-4C3A4THJ.js")).timeCommand},{name:"seq",load:async()=>(await import("./chunks/seq-V7KBLSQ7.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-MLHUWFYI.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-JF5TTAKQ.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-67WZ6OMV.js")).whichCommand},{name:"tac",load:async()=>(await import("./chunks/tac-TZBNTR4K.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-EENEW6WQ.js")).gzipCommand},{name:"gunzip",load:async()=>(await import("./chunks/gzip-EENEW6WQ.js")).gunzipCommand},{name:"zcat",load:async()=>(await import("./chunks/gzip-EENEW6WQ.js")).zcatCommand}];(typeof __BROWSER__>"u"||!__BROWSER__)&&(Ze.push({name:"tar",load:async()=>(await import("./chunks/tar-7B5KH3QG.js")).tarCommand}),Ze.push({name:"yq",load:async()=>(await import("./chunks/yq-WUJ5JNDT.js")).yqCommand}),Ze.push({name:"xan",load:async()=>(await import("./chunks/xan-FMSZPFX4.js")).xanCommand}),Ze.push({name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-4SEIR46P.js")).sqlite3Command}));var ls=[];(typeof __BROWSER__>"u"||!__BROWSER__)&&(ls.push({name:"python3",load:async()=>(await import("./chunks/python3-YJ7YGEW7.js")).python3Command}),ls.push({name:"python",load:async()=>(await import("./chunks/python3-YJ7YGEW7.js")).pythonCommand}));var wi=[{name:"curl",load:async()=>(await import("./chunks/curl-RWQO3SBN.js")).curlCommand}],Nr=new Map;function cs(e){return{name:e.name,async execute(t,s){let r=Nr.get(e.name);if(r||(r=await e.load(),Nr.set(e.name,r)),s.coverage&&(typeof __BROWSER__>"u"||!__BROWSER__)){let{emitFlagCoverage:n}=await import("./chunks/flag-coverage-CVSXSL4T.js");n(s.coverage,e.name,t)}return r.execute(t,s)}}}function Or(e){return(e?Ze.filter(s=>e.includes(s.name)):Ze).map(cs)}function Tr(){return wi.map(cs)}function xr(){return ls.map(cs)}function Dr(e){return"load"in e&&typeof e.load=="function"}function Ir(e){let t=null;return{name:e.name,async execute(s,r){return t||(t=await e.load()),t.execute(s,r)}}}var vi=new TextEncoder,bi=new TextDecoder;function Ge(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 vi.encode(e)}function _t(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 bi.decode(e)}function Re(e){if(e!=null)return typeof e=="string"?e:e.encoding??void 0}var Ke=new TextEncoder;function $i(e){return typeof e=="object"&&e!==null&&!(e instanceof Uint8Array)&&"content"in e}function se(e,t){if(e.includes("\0"))throw new Error(`ENOENT: path contains null byte, ${t} '${e}'`)}var it=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):$i(r)?this.writeFileSync(s,r.content,void 0,{mode:r.mode,mtime:r.mtime}):this.writeFileSync(s,r)}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let r=s.split("/").filter(i=>i&&i!=="."),n=[];for(let i of r)i===".."?n.pop():n.push(i);return`/${n.join("/")}`||"/"}dirname(t){let s=this.normalizePath(t);if(s==="/")return"/";let r=s.lastIndexOf("/");return r===0?"/":s.slice(0,r)}ensureParentDirs(t){let s=this.dirname(t);s!=="/"&&(this.data.has(s)||(this.ensureParentDirs(s),this.data.set(s,{type:"directory",mode:493,mtime:new Date})))}writeFileSync(t,s,r,n){se(t,"write");let i=this.normalizePath(t);this.ensureParentDirs(i);let o=Re(r),a=Ge(s,o);this.data.set(i,{type:"file",content:a,mode:n?.mode??420,mtime:n?.mtime??new Date})}writeFileLazy(t,s,r){se(t,"write");let n=this.normalizePath(t);this.ensureParentDirs(n),this.data.set(n,{type:"file",lazy:s,mode:r?.mode??420,mtime:r?.mtime??new Date})}async materializeLazy(t,s){let r=await s.lazy(),i={type:"file",content:typeof r=="string"?Ke.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=Re(s);return _t(r,n)}async readFileBuffer(t){se(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:Ke.encode(n.content)}return r.content instanceof Uint8Array?r.content:Ke.encode(r.content)}async writeFile(t,s,r){this.writeFileSync(t,s,r)}async appendFile(t,s,r){se(t,"append");let n=this.normalizePath(t),i=this.data.get(n);if(i&&i.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${t}'`);let o=Re(r),a=Ge(s,o);if(i?.type==="file"){let l=i;"lazy"in l&&(l=await this.materializeLazy(n,l));let c="content"in l&&l.content instanceof Uint8Array?l.content:Ke.encode("content"in l?l.content:""),u=new Uint8Array(c.length+a.length);u.set(c),u.set(a,c.length),this.data.set(n,{type:"file",content:u,mode:l.mode,mtime:new Date})}else this.writeFileSync(t,s,r)}async exists(t){if(t.includes("\0"))return!1;try{let s=this.resolvePathWithSymlinks(t);return this.data.has(s)}catch{return!1}}async stat(t){se(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=Ke.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){se(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=Ke.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:n,mtime:r.mtime||new Date}}resolveSymlink(t,s){if(s.startsWith("/"))return this.normalizePath(s);let r=this.dirname(t);return this.normalizePath(r==="/"?`/${s}`:`${r}/${s}`)}resolveIntermediateSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let r=s.slice(1).split("/");if(r.length<=1)return s;let n="",i=new Set;for(let o=0;o<r.length-1;o++){let a=r[o];n=`${n}/${a}`;let l=this.data.get(n),c=0,u=40;for(;l&&l.type==="symlink"&&c<u;){if(i.has(n))throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`);i.add(n),n=this.resolveSymlink(n,l.target),l=this.data.get(n),c++}if(c>=u)throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`)}return`${n}/${r[r.length-1]}`}resolvePathWithSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let r=s.slice(1).split("/"),n="",i=new Set;for(let o of r){n=`${n}/${o}`;let a=this.data.get(n),l=0,c=40;for(;a&&a.type==="symlink"&&l<c;){if(i.has(n))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);i.add(n),n=this.resolveSymlink(n,a.target),a=this.data.get(n),l++}if(l>=c)throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`)}return n}async mkdir(t,s){this.mkdirSync(t,s)}mkdirSync(t,s){se(t,"mkdir");let r=this.normalizePath(t);if(this.data.has(r)){if(this.data.get(r)?.type==="file")throw new Error(`EEXIST: file already exists, mkdir '${t}'`);if(!s?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${t}'`);return}let n=this.dirname(r);if(n!=="/"&&!this.data.has(n))if(s?.recursive)this.mkdirSync(n,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.data.set(r,{type:"directory",mode:493,mtime:new Date})}async readdir(t){return(await this.readdirWithFileTypes(t)).map(r=>r.name)}async readdirWithFileTypes(t){se(t,"scandir");let s=this.normalizePath(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let n=new Set;for(;r&&r.type==="symlink";){if(n.has(s))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);n.add(s),s=this.resolveSymlink(s,r.target),r=this.data.get(s)}if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${t}'`);let i=s==="/"?"/":`${s}/`,o=new Map;for(let[a,l]of this.data.entries())if(a!==s&&a.startsWith(i)){let c=a.slice(i.length),u=c.split("/")[0];u&&!c.includes("/",u.length)&&!o.has(u)&&o.set(u,{name:u,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}return Array.from(o.values()).sort((a,l)=>a.name<l.name?-1:a.name>l.name?1:0)}async rm(t,s){se(t,"rm");let r=this.normalizePath(t),n=this.data.get(r);if(!n){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}if(n.type==="directory"){let i=await this.readdir(r);if(i.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let o of i){let a=r==="/"?`/${o}`:`${r}/${o}`;await this.rm(a,s)}}}this.data.delete(r)}async cp(t,s,r){se(t,"cp"),se(s,"cp");let n=this.normalizePath(t),i=this.normalizePath(s),o=this.data.get(n);if(!o)throw new Error(`ENOENT: no such file or directory, cp '${t}'`);if(o.type==="file")if(this.ensureParentDirs(i),"content"in o){let a=o.content instanceof Uint8Array?new Uint8Array(o.content):o.content;this.data.set(i,{...o,content:a})}else this.data.set(i,{...o});else if(o.type==="symlink")this.ensureParentDirs(i),this.data.set(i,{...o});else if(o.type==="directory"){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let a=await this.readdir(n);for(let l of a){let c=n==="/"?`/${l}`:`${n}/${l}`,u=i==="/"?`/${l}`:`${i}/${l}`;await this.cp(c,u,r)}}}async mv(t,s){await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(t,s){if(s.startsWith("/"))return this.normalizePath(s);let r=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(r)}async chmod(t,s){se(t,"chmod");let r=this.normalizePath(t),n=this.data.get(r);if(!n)throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);n.mode=s}async symlink(t,s){se(s,"symlink");let r=this.normalizePath(s);if(this.data.has(r))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(r),this.data.set(r,{type:"symlink",target:t,mode:511,mtime:new Date})}async link(t,s){se(t,"link"),se(s,"link");let r=this.normalizePath(t),n=this.normalizePath(s),i=this.data.get(r);if(!i)throw new Error(`ENOENT: no such file or directory, link '${t}'`);if(i.type!=="file")throw new Error(`EPERM: operation not permitted, link '${t}'`);if(this.data.has(n))throw new Error(`EEXIST: file already exists, link '${s}'`);let o=i;"lazy"in o&&(o=await this.materializeLazy(r,o)),this.ensureParentDirs(n),this.data.set(n,{type:"file",content:o.content,mode:o.mode,mtime:o.mtime})}async readlink(t){se(t,"readlink");let s=this.normalizePath(t),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return r.target}async realpath(t){se(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){se(t,"utimes");let n=this.normalizePath(t),i=this.resolvePathWithSymlinks(n),o=this.data.get(i);if(!o)throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);o.mtime=r}};function Ei(e){let t=e;return typeof t.mkdirSync=="function"&&typeof t.writeFileSync=="function"}function Si(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 Ai(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 _i(e,t){e.mkdirSync("/proc/self/fd",{recursive:!0}),e.writeFileSync("/proc/version",`${yr}
|
|
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",()=>ts(t)):e.writeFileSync("/proc/self/status",ts(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 Rr(e,t,s={pid:1,ppid:0,uid:1e3,gid:1e3}){Ei(e)&&(Si(e,t),Ai(e),_i(e,s))}var
|
|
4
|
+
`),e.writeFileLazy?e.writeFileLazy("/proc/self/status",()=>ts(t)):e.writeFileSync("/proc/self/status",ts(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 Rr(e,t,s={pid:1,ppid:0,uid:1e3,gid:1e3}){Ei(e)&&(Si(e,t),Ai(e),_i(e,s))}var Pi=["allexport","errexit","noglob","noclobber","noexec","nounset","pipefail","posix","verbose","xtrace"],Ci=["braceexpand","hashall","interactive-comments"];function us(e){let t=[],s=[...Ci.map(r=>({name:r,enabled:!0})),...Pi.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 Xe(e){e.state.env.set("SHELLOPTS",us(e.state.options))}var ki=["dotglob","expand_aliases","extglob","failglob","globskipdots","globstar","lastpipe","nocaseglob","nocasematch","nullglob","xpg_echo"];function fs(e){let t=[];for(let s of ki)e[s]&&t.push(s);return t.join(":")}function ds(e){e.state.env.set("BASHOPTS",fs(e.state.shoptOptions))}var Ni="BASH_ALIAS_";function Lr(e){return e.parts.length!==1?!1:e.parts[0].type==="Literal"}function Mr(e){if(e.parts.length!==1)return null;let t=e.parts[0];return t.type==="Literal"?t.value:null}function Fr(e,t){return e.env.get(`${Ni}${t}`)}function hs(e,t,s){if(!t.name||!Lr(t.name))return t;let r=Mr(t.name);if(!r)return t;let n=Fr(e,r);if(!n||s.has(r))return t;try{s.add(r);let i=new W,o=n,a=n.endsWith(" ");if(!a)for(let f of t.args){let d=zr(f);o+=` ${d}`}let l;try{l=i.parse(o)}catch(f){if(f instanceof $t)throw f;return t}if(l.statements.length!==1||l.statements[0].pipelines.length!==1||l.statements[0].pipelines[0].commands.length!==1)return Wr(t,n);let c=l.statements[0].pipelines[0].commands[0];if(c.type!=="SimpleCommand")return Wr(t,n);let u={...c,assignments:[...t.assignments,...c.assignments],redirections:[...c.redirections,...t.redirections],line:t.line};if(a&&t.args.length>0&&(u={...u,args:[...u.args,...t.args]},u.args.length>0)){let f=u.args[0];if(Lr(f)){let d=Mr(f);if(d&&Fr(e,d)){let h={type:"SimpleCommand",name:f,args:u.args.slice(1),assignments:[],redirections:[]},m=hs(e,h,s);m!==h&&(u={...u,name:m.name,args:[...m.args]})}}}return u}catch(i){throw s.delete(r),i}}function Wr(e,t){let s=t;for(let o of e.args){let a=zr(o);s+=` ${a}`}let r=new W,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 zr(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 Vr(e,t){let s=t.parts.map(u=>u.type==="Literal"?u.value:"\0").join(""),r=s.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);if(!r||!s.endsWith(")"))return null;let n=r[1],i=[],o=!1,a="",l=!1;for(let u of t.parts)if(u.type==="Literal"){let f=u.value;if(!o){let d=f.indexOf("=(");d!==-1&&(o=!0,f=f.slice(d+2))}if(o){f.endsWith(")")&&(f=f.slice(0,-1));let d=f.split(/(\s+)/);for(let h of d)/^\s+$/.test(h)?(a||l)&&(i.push(a),a="",l=!1):h&&(a+=h)}}else if(o)if(u.type==="BraceExpansion")if(/^\[.+\]=/.test(a))a+=Et({type:"Word",parts:[u]});else{(a||l)&&(i.push(a),a="",l=!1);let d=await Pe(e,{type:"Word",parts:[u]});i.push(...d.values)}else{(u.type==="SingleQuoted"||u.type==="DoubleQuoted"||u.type==="Escaped")&&(l=!0);let f=await D(e,{type:"Word",parts:[u]});a+=f}(a||l)&&i.push(a);let c=i.map(u=>/^\[.+\]=/.test(u)?u:u===""?"''":/[\s"'\\$`!*?[\]{}|&;<>()]/.test(u)&&!u.startsWith("'")&&!u.startsWith('"')?`'${u.replace(/'/g,"'\\''")}'`:u);return`${n}=(${c.join(" ")})`}async function Br(e,t){let s=-1,r=-1,n=!1;for(let p=0;p<t.parts.length;p++){let g=t.parts[p];if(g.type==="Literal"){let S=g.value.indexOf("+=");if(S!==-1){let A=g.value.slice(0,S);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(A)){s=p,r=S,n=!0;break}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(A)){s=p,r=S,n=!0;break}}let v=g.value.indexOf("=");if(v!==-1&&(v===0||g.value[v-1]!=="+")){let A=g.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),c=o.value.slice(r+a),u=t.parts.slice(s+1),f="";for(let p of i)f+=await D(e,{type:"Word",parts:[p]});f+=l;let d={type:"Word",parts:c!==""?[{type:"Literal",value:c},...u]:u},h=d.parts.length>0?await D(e,d):"";return`${f}${n?"+=":"="}${h}`}var Oi=["tar","yq","xan","sqlite3","python3","python"];function jr(e){return Oi.includes(e)}var L=Object.freeze({stdout:"",stderr:"",exitCode:0});function M(e=""){return{stdout:e,stderr:"",exitCode:0}}function _(e,t=1){return{stdout:"",stderr:e,exitCode:t}}function C(e,t,s){return{stdout:e,stderr:t,exitCode:s}}function G(e){return{stdout:"",stderr:"",exitCode:e?0:1}}function Oe(e,t,s="",r=""){throw new ie(e,t,s,r)}function ps(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new Te;return L}if(t.length>1)throw new z(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 z(128,"",`bash: break: ${t[0]}: numeric argument required
|
|
6
6
|
`);s=r}throw new he(s)}async function ms(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!=="."),c="";for(let f of l)if(f==="..")c=c.split("/").slice(0,-1).join("/")||"/";else{c=c?`${c}/${f}`:`/${f}`;try{if(!(await e.fs.stat(c)).isDirectory)return _(`bash: cd: ${s}: Not a directory
|
|
7
7
|
`)}catch{return _(`bash: cd: ${s}: No such file or directory
|
|
8
8
|
`)}}let u=c||"/";if(n)try{u=await e.fs.realpath(u)}catch{}return e.state.previousDir=e.state.cwd,e.state.cwd=u,e.state.env.set("PWD",e.state.cwd),e.state.env.set("OLDPWD",e.state.previousDir),M(r?`${u}
|
|
9
|
-
`:"")}function ys(e,t){return e.fs.resolvePath(e.state.cwd,t)}var Ti=["-e","-a","-f","-d","-r","-w","-x","-s","-L","-h","-k","-g","-u","-G","-O","-b","-c","-p","-S","-t","-N"];function
|
|
9
|
+
`:"")}function ys(e,t){return e.fs.resolvePath(e.state.cwd,t)}var Ti=["-e","-a","-f","-d","-r","-w","-x","-s","-L","-h","-k","-g","-u","-G","-O","-b","-c","-p","-S","-t","-N"];function Pt(e){return Ti.includes(e)}async function Ct(e,t,s){let r=ys(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 xi=["-nt","-ot","-ef"];function kt(e){return xi.includes(e)}async function Nt(e,t,s,r){let n=ys(e,s),i=ys(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 Di=new Set(["-eq","-ne","-lt","-le","-gt","-ge"]);function Ot(e){return Di.has(e)}function Tt(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 ot(e){return e==="="||e==="=="||e==="!="}function xt(e,t,s,r=!1,n=!1,i=!1){if(r){let a=Ye(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 Ii=new Set(["-z","-n"]);function Dt(e){return Ii.has(e)}function It(e,t){switch(e){case"-z":return t==="";case"-n":return t!==""}}async function Rt(e,t){let s=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(s){let r=s[1],n=s[2];if(e.state.associativeArrays?.has(r)){let a=n;return(a.startsWith("'")&&a.endsWith("'")||a.startsWith('"')&&a.endsWith('"'))&&(a=a.slice(1,-1)),a=a.replace(/\$([a-zA-Z_][a-zA-Z0-9_]*)/g,(l,c)=>e.state.env.get(c)||""),e.state.env.has(`${r}_${a}`)}let o;try{let a=new W,l=K(a,n);o=await V(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)?De(e,t).length>0:te(e,t).length>0}async function Le(e,t){switch(t.type){case"CondBinary":{let s=await D(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 D(e,t.right);n=_r(i)}else n=await
|
|
12
|
-
`,2):
|
|
13
|
-
`,2):
|
|
14
|
-
`,2):G(s.value)}async function Zr(e,t,s){return Ri(e,t,s)}async function Ri(e,t,s){let{value:r,pos:n}=await Hr(e,t,s);for(;t[n]==="-o";){let i=await Hr(e,t,n+1);r=r||i.value,n=i.pos}return{value:r,pos:n}}async function Hr(e,t,s){let{value:r,pos:n}=await gs(e,t,s);for(;t[n]==="-a";){let i=await gs(e,t,n+1);r=r&&i.value,n=i.pos}return{value:r,pos:n}}async function gs(e,t,s){if(t[s]==="!"){let{value:r,pos:n}=await gs(e,t,s+1);return{value:!r,pos:n}}return Li(e,t,s)}async function Li(e,t,s){let r=t[s];if(r==="("){let{value:i,pos:o}=await Zr(e,t,s+1);return{value:i,pos:t[o]===")"?o+1:o}}let n=t[s+1];if(ot(n)){let i=r,o=t[s+2]??"";return{value:xt(n,i,o),pos:s+3}}if(Ot(n)){let i=Lt(r),o=Lt(t[s+2]??"0");return!i.valid||!o.valid?{value:!1,pos:s+3}:{value:Tt(n,i.value,o.value),pos:s+3}}if(kt(n)){let i=r,o=t[s+2]??"";return{value:await Nt(e,n,i,o),pos:s+3}}if(
|
|
15
|
-
`)&&!r&&!n){o&&(t.push(s),s="",o=!1);continue}s+=a,o=!0}return o&&t.push(s),t}function Mt(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 Qr(e){let t=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(t)return{name:t[1],isArray:!0,arrayElements:
|
|
11
|
+
`,!1}return e.state.env.has(`${r}_${o}`)}return e.state.env.has(t)?!0:e.state.associativeArrays?.has(t)?De(e,t).length>0:te(e,t).length>0}async function Le(e,t){switch(t.type){case"CondBinary":{let s=await D(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 D(e,t.right);n=_r(i)}else n=await Cr(e,t.right);else ot(t.operator)&&!r?n=await kr(e,t.right):n=await D(e,t.right);if(ot(t.operator)){let i=e.state.shoptOptions.nocasematch;return xt(t.operator,s,n,!r,i,!0)}if(Ot(t.operator))return Tt(t.operator,await Ur(e,s),await Ur(e,n));if(kt(t.operator))return Nt(e,t.operator,s,n);switch(t.operator){case"=~":try{let i=e.state.shoptOptions.nocasematch,o=Fi(n),l=nt(o,i?"i":"").match(s);if(_e(e,"BASH_REMATCH"),l)for(let c=0;c<l.length;c++)e.state.env.set(`BASH_REMATCH_${c}`,l[c]||"");return l!==null}catch{throw new Error("syntax error in regular expression")}case"<":return s<n;case">":return s>n;default:return!1}}case"CondUnary":{let s=await D(e,t.operand);return Pt(t.operator)?Ct(e,t.operator,s):Dt(t.operator)?It(t.operator,s):t.operator==="-v"?await Rt(e,s):t.operator==="-o"?ws(e,s):!1}case"CondNot":return e.state.shoptOptions.extglob&&t.operand.type==="CondGroup"&&t.operand.expression.type==="CondWord"?`!(${await D(e,t.operand.expression.word)})`!=="":!await Le(e,t.operand);case"CondAnd":return await Le(e,t.left)?await Le(e,t.right):!1;case"CondOr":return await Le(e,t.left)?!0:await Le(e,t.right);case"CondGroup":return await Le(e,t.expression);case"CondWord":return await D(e,t.word)!=="";default:return!1}}async function at(e,t){if(t.length===0)return C("","",1);if(t.length===1)return G(!!t[0]);if(t.length===2){let r=t[0],n=t[1];return r==="("?_(`test: '(' without matching ')'
|
|
12
|
+
`,2):Pt(r)?G(await Ct(e,r,n)):Dt(r)?G(It(r,n)):r==="!"?G(!n):r==="-v"?G(await Rt(e,n)):r==="-o"?G(ws(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):C("","",1)}if(t.length===3){let r=t[0],n=t[1],i=t[2];if(ot(n))return G(xt(n,r,i));if(Ot(n)){let o=Lt(r),a=Lt(i);return!o.valid||!a.valid?C("","",2):G(Tt(n,o.value,a.value))}if(kt(n))return G(await Nt(e,n,r,i));switch(n){case"-a":return G(r!==""&&i!=="");case"-o":return G(r!==""||i!=="");case">":return G(r>i);case"<":return G(r<i)}if(r==="!"){let o=await at(e,[n,i]);return C("",o.stderr,o.exitCode===0?1:o.exitCode===1?0:o.exitCode)}if(r==="("&&i===")")return G(n!=="")}if(t.length===4){if(t[0]==="!"){let r=await at(e,t.slice(1));return C("",r.stderr,r.exitCode===0?1:r.exitCode===1?0:r.exitCode)}if(t[0]==="("&&t[3]===")")return at(e,[t[1],t[2]])}let s=await Zr(e,t,0);return s.pos<t.length?_(`test: too many arguments
|
|
14
|
+
`,2):G(s.value)}async function Zr(e,t,s){return Ri(e,t,s)}async function Ri(e,t,s){let{value:r,pos:n}=await Hr(e,t,s);for(;t[n]==="-o";){let i=await Hr(e,t,n+1);r=r||i.value,n=i.pos}return{value:r,pos:n}}async function Hr(e,t,s){let{value:r,pos:n}=await gs(e,t,s);for(;t[n]==="-a";){let i=await gs(e,t,n+1);r=r&&i.value,n=i.pos}return{value:r,pos:n}}async function gs(e,t,s){if(t[s]==="!"){let{value:r,pos:n}=await gs(e,t,s+1);return{value:!r,pos:n}}return Li(e,t,s)}async function Li(e,t,s){let r=t[s];if(r==="("){let{value:i,pos:o}=await Zr(e,t,s+1);return{value:i,pos:t[o]===")"?o+1:o}}let n=t[s+1];if(ot(n)){let i=r,o=t[s+2]??"";return{value:xt(n,i,o),pos:s+3}}if(Ot(n)){let i=Lt(r),o=Lt(t[s+2]??"0");return!i.valid||!o.valid?{value:!1,pos:s+3}:{value:Tt(n,i.value,o.value),pos:s+3}}if(kt(n)){let i=r,o=t[s+2]??"";return{value:await Nt(e,n,i,o),pos:s+3}}if(Pt(r)){let i=t[s+1]??"";return{value:await Ct(e,r,i),pos:s+2}}if(Dt(r)){let i=t[s+1]??"";return{value:It(r,i),pos:s+2}}if(r==="-v"){let i=t[s+1]??"";return{value:await Rt(e,i),pos:s+2}}if(r==="-o"){let i=t[s+1]??"";return{value:ws(e,i),pos:s+2}}return{value:r!==void 0&&r!=="",pos:s+1}}function Ye(e,t,s=!1,r=!1){let n=`^${Gr(t,r)}$`;return nt(n,s?"is":"s").test(e)}function Gr(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=Kr(e,r+1);if(i!==-1){let o=e.slice(r+2,i),a=Xr(o),l=a.map(u=>Gr(u,t)),c=l.length>0?l.join("|"):"(?:)";if(n==="@")s+=`(?:${c})`;else if(n==="*")s+=`(?:${c})*`;else if(n==="+")s+=`(?:${c})+`;else if(n==="?")s+=`(?:${c})?`;else if(n==="!")if(i<e.length-1){let f=a.map(h=>Yr(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(`(?!(?:${c})).{${h}}`),s+=`(?:${m.join("|")})`}}else s+=`(?:(?!(?:${c})).)*?`}else s+=`(?!(?:${c})$).*`;r=i;continue}}if(n==="\\")if(r+1<e.length){let i=e[r+1];/[\\^$.|+(){}[\]*?]/.test(i)?s+=`\\${i}`:s+=i,r++}else s+="\\\\";else if(n==="*")s+=".*";else if(n==="?")s+=".";else if(n==="["){let i=e.indexOf("]",r+1);i!==-1?(s+=e.slice(r,i+1),r=i):s+="\\["}else/[\\^$.|+(){}]/.test(n)?s+=`\\${n}`:s+=n}return s}function Kr(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 Xr(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 Yr(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=Kr(e,r+1);if(i!==-1){if(n==="@"){let o=e.slice(r+2,i),l=Xr(o).map(c=>Yr(c,t));if(l.every(c=>c!==null)&&l.every(c=>c===l[0])){s+=l[0],r=i+1;continue}return null}return null}}if(n==="*")return null;if(n==="?"){s+=1,r++;continue}if(n==="["){let i=e.indexOf("]",r+1);if(i!==-1){s+=1,r=i+1;continue}s+=1,r++;continue}if(n==="\\"){s+=1,r+=2;continue}s+=1,r++}return s}function ws(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 Ur(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 qr(t);try{let s=new W,r=K(s,t);return await V(e,r.expression)}catch{return qr(t)}}function Mi(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 qr(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=Mi(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 Lt(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 Fi(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=Wi(e,s);t+=r.converted,s=r.endIndex}else t+=e[s],s++;return t}function Wi(e,t){let s=t+1,r="[";s<e.length&&(e[s]==="^"||e[s]==="!")&&(r+="^",s++);let n=!1;s<e.length&&e[s]==="]"&&(n=!0,s++);let i=!1;s<e.length&&e[s]==="["&&s+1<e.length&&e[s+1]!==":"&&(i=!0,s++);let o="",a=!1;for(;s<e.length;){let l=e[s];if(l==="]"){a=!0,s++;break}if(l==="["&&s+1<e.length&&e[s+1]===":"){let c=e.indexOf(":]",s+2);if(c!==-1){let u=e.slice(s+2,c);o+=zi(u),s=c+2;continue}}if(l==="["&&s+1<e.length){let c=e[s+1];if(c==="."||c==="="){let u=`${c}]`,f=e.indexOf(u,s+2);if(f!==-1){let d=e.slice(s+2,f);o+=d,s=f+2;continue}}}if(l==="\\"&&s+1<e.length){o+=l+e[s+1],s+=2;continue}o+=l,s++}return a?(n&&(r+="\\]"),i&&(r+="\\["),r+=o,r+="]",{converted:r,endIndex:s}):{converted:"\\[",endIndex:t+1}}function zi(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 Mt(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 Qr(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 Vi(e,t){try{let s=new W,r=K(s,t);return await V(e,r.expression)}catch{let s=parseInt(t,10);return Number.isNaN(s)?0:s}}async function Jr(e,t,s={}){let{name:r,isArray:n,arrayElements:i,value:o,arrayIndex:a}=t,{makeReadonly:l=!1,checkReadonly:c=!0}=s;if(c){let u=Q(e,r);if(u)return u}if(n&&i){for(let u=0;u<i.length;u++)e.state.env.set(`${r}_${u}`,i[u]);e.state.env.set(`${r}__length`,String(i.length))}else if(a!==void 0&&o!==void 0){let u=await Vi(e,a);e.state.env.set(`${r}_${u}`,o);let f=parseInt(e.state.env.get(`${r}__length`)??"0",10);u>=f&&e.state.env.set(`${r}__length`,String(u+1))}else o!==void 0&&e.state.env.set(r,o);return l&&fe(e,r),null}function Me(e,t){e.state.localVarDepth=e.state.localVarDepth||new Map,e.state.localVarDepth.set(t,e.state.callDepth)}function Qe(e,t){return e.state.localVarDepth?.get(t)}function Ft(e,t){e.state.localVarDepth?.delete(t)}function en(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 Wt(e,t){let s=e.state.localVarStack?.get(t);if(!(!s||s.length===0))return s.pop()}function tn(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 vs=new Set([":",".","break","continue","eval","exec","exit","export","readonly","return","set","shift","trap","unset"]);function sn(e){return vs.has(e)}var bs=new Set(["if","then","else","elif","fi","case","esac","for","select","while","until","do","done","in","function","{","}","time","[[","]]","!"]),Je=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 Ve(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
17
|
`}catch{}return null}function J(e){let s=Math.min(e.length,8192);for(let r=0;r<s;r++)if(e.charCodeAt(r)>255)return"utf8";return"binary"}function Bi(e){if(!e.startsWith("__rw__:"))return null;let t=e.slice(7),s=t.indexOf(":");if(s===-1)return null;let r=Number.parseInt(t.slice(0,s),10);if(Number.isNaN(r)||r<0)return null;let n=s+1,i=t.slice(n,n+r),o=n+r+1,a=t.slice(o),l=a.indexOf(":");if(l===-1)return null;let c=Number.parseInt(a.slice(0,l),10);if(Number.isNaN(c)||c<0)return null;let u=a.slice(l+1);return{path:i,position:c,content:u}}async function rn(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(as(e,n.target))return{targets:s,error:`bash: $@: ambiguous redirect
|
|
18
18
|
`};s.set(r,await D(e,n.target))}else{let o=await At(e,n.target);if("error"in o)return{targets:s,error:o.error};s.set(r,o.target)}}return{targets:s}}function ji(e){e.state.nextFd===void 0&&(e.state.nextFd=10);let t=e.state.nextFd;return e.state.nextFd++,t}async function zt(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 D(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=ji(e);if(e.state.env.set(s.fdVariable,String(r)),s.target.type==="Word"){let n=await D(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&&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"),e.state.fileDescriptors.set(r,`__file__:${i}`)}else if(s.operator==="<<<")e.state.fileDescriptors.set(r,`${n}
|
|
19
|
-
`);else if(s.operator==="<"||s.operator==="<>")try{let i=e.fs.resolvePath(e.state.cwd,n),o=await e.fs.readFile(i);e.state.fileDescriptors.set(r,o)}catch{return
|
|
20
|
-
`,1)}}}return null}async function ke(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 D(e,s.target),n==="-"||!Number.isNaN(Number.parseInt(n,10))||s.fd!=null)continue}else{let a=await At(e,s.target);if("error"in a)return
|
|
21
|
-
`,1);try{let a=await e.fs.stat(i);if(a.isDirectory)return
|
|
22
|
-
`,1);if(e.state.options.noclobber&&!o&&!a.isDirectory&&n!=="/dev/null")return
|
|
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
|
|
24
|
-
`,1)}return null}async function
|
|
19
|
+
`);else if(s.operator==="<"||s.operator==="<>")try{let i=e.fs.resolvePath(e.state.cwd,n),o=await e.fs.readFile(i);e.state.fileDescriptors.set(r,o)}catch{return C("",`bash: ${n}: No such file or directory
|
|
20
|
+
`,1)}}}return null}async function ke(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 D(e,s.target),n==="-"||!Number.isNaN(Number.parseInt(n,10))||s.fd!=null)continue}else{let a=await At(e,s.target);if("error"in a)return C("",a.error,1);n=a.target}let i=e.fs.resolvePath(e.state.cwd,n),o=s.operator===">|";if(i.includes("\0"))return C("",`bash: ${n}: No such file or directory
|
|
21
|
+
`,1);try{let a=await e.fs.stat(i);if(a.isDirectory)return C("",`bash: ${n}: Is a directory
|
|
22
|
+
`,1);if(e.state.options.noclobber&&!o&&!a.isDirectory&&n!=="/dev/null")return C("",`bash: ${n}: cannot overwrite existing file
|
|
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 C("",`bash: /dev/full: No space left on device
|
|
24
|
+
`,1)}return null}async function U(e,t,s,r){let{stdout:n,stderr:i,exitCode:o}=t;for(let c=0;c<s.length;c++){let u=s[c];if(u.target.type==="HereDoc")continue;let f,d=r?.get(c);if(d!==void 0)f=d;else if(u.operator===">&"||u.operator==="<&"){if(as(e,u.target)){i+=`bash: $@: ambiguous redirect
|
|
25
25
|
`,o=1,n="";continue}f=await D(e,u.target)}else{let m=await At(e,u.target);if("error"in m){i+=m.error,o=1,n="";continue}f=m.target}if(!u.fdVariable){if(f.includes("\0")){i+=`bash: ${f.replace(/\0/g,"")}: No such file or directory
|
|
26
26
|
`,o=1,n="";continue}switch(u.operator){case">":case">|":{let h=u.fd??1,m=u.operator===">|";if(h===1){if(f==="/dev/stdout")break;if(f==="/dev/stderr"){i+=n,n="";break}if(f==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
27
27
|
`,o=1,n="";break}let p=e.fs.resolvePath(e.state.cwd,f),g=await Ve(e,p,f,{checkNoclobber:!0,isClobber:m});if(g){i+=g,o=1,n="";break}await e.fs.writeFile(p,n,J(n)),n=""}else if(h===2){if(f==="/dev/stderr")break;if(f==="/dev/stdout"){n+=i,i="";break}if(f==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
@@ -32,11 +32,11 @@ import{B as Ar,C as _r,D as fe,E as ze,F as Q,G as Se,H as St,I as Cr,J as D,K a
|
|
|
32
32
|
`,o=1,n=""):m>=3&&(i+=`bash: ${m}: Bad file descriptor
|
|
33
33
|
`,o=1,n="")}}break}case"&>":{if(f==="/dev/full"){i=`bash: echo: write error: No space left on device
|
|
34
34
|
`,o=1,n="";break}let h=e.fs.resolvePath(e.state.cwd,f),m=await Ve(e,h,f,{checkNoclobber:!0});if(m){i=m,o=1,n="";break}let p=n+i;await e.fs.writeFile(h,p,J(p)),n="",i="";break}case"&>>":{if(f==="/dev/full"){i=`bash: echo: write error: No space left on device
|
|
35
|
-
`,o=1,n="";break}let h=e.fs.resolvePath(e.state.cwd,f),m=await Ve(e,h,f,{});if(m){i=m,o=1,n="";break}let p=n+i;await e.fs.appendFile(h,p,J(p)),n="",i="";break}}}}let a=e.state.fileDescriptors?.get(1);if(a){if(a==="__dupout__:2")i+=n,n="";else if(a.startsWith("__file__:")){let c=a.slice(9);await e.fs.appendFile(c,n,J(n)),n=""}else if(a.startsWith("__file_append__:")){let c=a.slice(16);await e.fs.appendFile(c,n,J(n)),n=""}}let l=e.state.fileDescriptors?.get(2);if(l){if(l==="__dupout__:1")n+=i,i="";else if(l.startsWith("__file__:")){let c=l.slice(9);await e.fs.appendFile(c,i,J(i)),i=""}else if(l.startsWith("__file_append__:")){let c=l.slice(16);await e.fs.appendFile(c,i,J(i)),i=""}}return
|
|
35
|
+
`,o=1,n="";break}let h=e.fs.resolvePath(e.state.cwd,f),m=await Ve(e,h,f,{});if(m){i=m,o=1,n="";break}let p=n+i;await e.fs.appendFile(h,p,J(p)),n="",i="";break}}}}let a=e.state.fileDescriptors?.get(1);if(a){if(a==="__dupout__:2")i+=n,n="";else if(a.startsWith("__file__:")){let c=a.slice(9);await e.fs.appendFile(c,n,J(n)),n=""}else if(a.startsWith("__file_append__:")){let c=a.slice(16);await e.fs.appendFile(c,n,J(n)),n=""}}let l=e.state.fileDescriptors?.get(2);if(l){if(l==="__dupout__:1")n+=i,i="";else if(l.startsWith("__file__:")){let c=l.slice(9);await e.fs.appendFile(c,i,J(i)),i=""}else if(l.startsWith("__file_append__:")){let c=l.slice(16);await e.fs.appendFile(c,i,J(i)),i=""}}return C(n,i,o)}function nn(e,t){if(e.state.options.posix&&vs.has(t.name)){let r=`bash: line ${e.state.currentLine}: \`${t.name}': is a special builtin
|
|
36
36
|
`;throw new z(2,"",r)}let s={...t,sourceFile:t.sourceFile??e.state.currentSource??"main"};return e.state.functions.set(t.name,s),L}async function Hi(e,t){let s="";for(let r of t)if((r.operator==="<<"||r.operator==="<<-")&&r.target.type==="HereDoc"){let n=r.target,i=await D(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 D(e,r.target)}
|
|
39
|
-
`;else if(r.operator==="<"&&r.target.type==="Word"){let n=await D(e,r.target),i=e.fs.resolvePath(e.state.cwd,n);try{s=await e.fs.readFile(i)}catch{}}return s}async function Vt(e,t,s,r="",n){e.state.callDepth++,e.state.callDepth>e.limits.maxCallDepth&&(e.state.callDepth--,Oe(`${t.name}: maximum recursion depth (${e.limits.maxCallDepth}) exceeded, increase executionLimits.maxCallDepth`,"recursion")),e.state.funcNameStack||(e.state.funcNameStack=[]),e.state.callLineStack||(e.state.callLineStack=[]),e.state.sourceStack||(e.state.sourceStack=[]),e.state.funcNameStack.unshift(t.name),e.state.callLineStack.unshift(n??e.state.currentLine),e.state.sourceStack.unshift(t.sourceFile??"main"),e.state.localScopes.push(new Map),e.state.localExportedVars||(e.state.localExportedVars=[]),e.state.localExportedVars.push(new Set);let i=new Map;for(let c=0;c<s.length;c++)i.set(String(c+1),e.state.env.get(String(c+1))),e.state.env.set(String(c+1),s[c]);i.set("@",e.state.env.get("@")),i.set("#",e.state.env.get("#")),e.state.env.set("@",s.join(" ")),e.state.env.set("#",String(s.length));let o=()=>{let c=e.state.localScopes.length-1,u=e.state.localScopes.pop();if(u)for(let[f,d]of u)d===void 0?e.state.env.delete(f):e.state.env.set(f,d);if(tn(e,c),e.state.fullyUnsetLocals)for(let[f,d]of e.state.fullyUnsetLocals.entries())d===c&&e.state.fullyUnsetLocals.delete(f);if(e.state.localExportedVars&&e.state.localExportedVars.length>0){let f=e.state.localExportedVars.pop();if(f)for(let d of f)e.state.exportedVars?.delete(d)}for(let[f,d]of i)d===void 0?e.state.env.delete(f):e.state.env.set(f,d);e.state.funcNameStack?.shift(),e.state.callLineStack?.shift(),e.state.sourceStack?.shift(),e.state.callDepth--},{targets:a,error:l}=await rn(e,t.redirections);if(l)return o(),
|
|
39
|
+
`;else if(r.operator==="<"&&r.target.type==="Word"){let n=await D(e,r.target),i=e.fs.resolvePath(e.state.cwd,n);try{s=await e.fs.readFile(i)}catch{}}return s}async function Vt(e,t,s,r="",n){e.state.callDepth++,e.state.callDepth>e.limits.maxCallDepth&&(e.state.callDepth--,Oe(`${t.name}: maximum recursion depth (${e.limits.maxCallDepth}) exceeded, increase executionLimits.maxCallDepth`,"recursion")),e.state.funcNameStack||(e.state.funcNameStack=[]),e.state.callLineStack||(e.state.callLineStack=[]),e.state.sourceStack||(e.state.sourceStack=[]),e.state.funcNameStack.unshift(t.name),e.state.callLineStack.unshift(n??e.state.currentLine),e.state.sourceStack.unshift(t.sourceFile??"main"),e.state.localScopes.push(new Map),e.state.localExportedVars||(e.state.localExportedVars=[]),e.state.localExportedVars.push(new Set);let i=new Map;for(let c=0;c<s.length;c++)i.set(String(c+1),e.state.env.get(String(c+1))),e.state.env.set(String(c+1),s[c]);i.set("@",e.state.env.get("@")),i.set("#",e.state.env.get("#")),e.state.env.set("@",s.join(" ")),e.state.env.set("#",String(s.length));let o=()=>{let c=e.state.localScopes.length-1,u=e.state.localScopes.pop();if(u)for(let[f,d]of u)d===void 0?e.state.env.delete(f):e.state.env.set(f,d);if(tn(e,c),e.state.fullyUnsetLocals)for(let[f,d]of e.state.fullyUnsetLocals.entries())d===c&&e.state.fullyUnsetLocals.delete(f);if(e.state.localExportedVars&&e.state.localExportedVars.length>0){let f=e.state.localExportedVars.pop();if(f)for(let d of f)e.state.exportedVars?.delete(d)}for(let[f,d]of i)d===void 0?e.state.env.delete(f):e.state.env.set(f,d);e.state.funcNameStack?.shift(),e.state.callLineStack?.shift(),e.state.sourceStack?.shift(),e.state.callDepth--},{targets:a,error:l}=await rn(e,t.redirections);if(l)return o(),C("",l,1);try{let c=await Hi(e,t.redirections),u=r||c,f=await e.executeCommand(t.body,u);return o(),U(e,f,t.redirections,a)}catch(c){if(o(),c instanceof ue){let u=C(c.stdout,c.stderr,c.exitCode);return U(e,u,t.redirections,a)}throw c}}var an=["!","[[","]]","case","do","done","elif","else","esac","fi","for","function","if","in","then","time","until","while","{","}"],Es=[".",":","[","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"],Ui=["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"],qi=Es;async function Ss(e,t){let s=[],r=null,n="",i="",o=null,a=!1,l=!1,c=!1,u=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 y=0;y<t.length;y++){let w=t[y];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(y++,y>=t.length)return _(`compgen: -A: option requires an argument
|
|
40
40
|
`,2);let b=t[y];if(!m.includes(b))return _(`compgen: ${b}: invalid action name
|
|
41
41
|
`,2);s.push(b)}else if(w==="-W"){if(y++,y>=t.length)return _(`compgen: -W: option requires an argument
|
|
42
42
|
`,2);r=t[y]}else if(w==="-P"){if(y++,y>=t.length)return _(`compgen: -P: option requires an argument
|
|
@@ -47,9 +47,9 @@ import{B as Ar,C as _r,D as fe,E as ze,F as Q,G as Se,H as St,I as Cr,J as D,K a
|
|
|
47
47
|
`,2);f=t[y]}else if(w==="-C"){if(y++,y>=t.length)return _(`compgen: -C: option requires an argument
|
|
48
48
|
`,2);d=t[y]}else if(w==="-X"){if(y++,y>=t.length)return _(`compgen: -X: option requires an argument
|
|
49
49
|
`,2);u=t[y]}else if(w==="-G"){if(y++,y>=t.length)return _(`compgen: -G: option requires an argument
|
|
50
|
-
`,2)}else if(w==="--"){h.push(...t.slice(y+1));break}else w.startsWith("-")||h.push(w)}o=h[0]??null;let p=[];if(l){let y=await $s(e,o);p.push(...y)}if(c){let y=await on(e,o);p.push(...y)}for(let y of s)if(y==="variable"){let w=Zi(e,o);p.push(...w)}else if(y==="export"){let w=Gi(e,o);p.push(...w)}else if(y==="function"){let w=Ki(e,o);p.push(...w)}else if(y==="builtin"){let w=Xi(o);p.push(...w)}else if(y==="keyword"){let w=Yi(o);p.push(...w)}else if(y==="alias"){let w=Qi(e,o);p.push(...w)}else if(y==="shopt"){let w=Ji(o);p.push(...w)}else if(y==="helptopic"){let w=eo(o);p.push(...w)}else if(y==="directory"){let w=await $s(e,o);p.push(...w)}else if(y==="file"){let w=await on(e,o);p.push(...w)}else if(y==="user"){let w=to(o);p.push(...w)}else if(y==="command"){let w=await so(e,o);p.push(...w)}if(r!==null)try{let y=await ro(e,r),w=no(e,y);for(let b of w)(o===null||b.startsWith(o))&&p.push(b)}catch{return
|
|
50
|
+
`,2)}else if(w==="--"){h.push(...t.slice(y+1));break}else w.startsWith("-")||h.push(w)}o=h[0]??null;let p=[];if(l){let y=await $s(e,o);p.push(...y)}if(c){let y=await on(e,o);p.push(...y)}for(let y of s)if(y==="variable"){let w=Zi(e,o);p.push(...w)}else if(y==="export"){let w=Gi(e,o);p.push(...w)}else if(y==="function"){let w=Ki(e,o);p.push(...w)}else if(y==="builtin"){let w=Xi(o);p.push(...w)}else if(y==="keyword"){let w=Yi(o);p.push(...w)}else if(y==="alias"){let w=Qi(e,o);p.push(...w)}else if(y==="shopt"){let w=Ji(o);p.push(...w)}else if(y==="helptopic"){let w=eo(o);p.push(...w)}else if(y==="directory"){let w=await $s(e,o);p.push(...w)}else if(y==="file"){let w=await on(e,o);p.push(...w)}else if(y==="user"){let w=to(o);p.push(...w)}else if(y==="command"){let w=await so(e,o);p.push(...w)}if(r!==null)try{let y=await ro(e,r),w=no(e,y);for(let b of w)(o===null||b.startsWith(o))&&p.push(b)}catch{return C("","",1)}if(a){let y=await $s(e,o);for(let w of y)p.includes(w)||p.push(w)}let g="";if(f!==null){let y=e.state.functions.get(f);if(y){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 b=new Map;for(let x of e.state.env.keys())(x==="COMPREPLY"||x.startsWith("COMPREPLY_")||x==="COMPREPLY__length")&&(b.set(x,e.state.env.get(x)),e.state.env.delete(x));let $=["compgen",h[0]??"",""];try{let x=await Vt(e,y,$,"");if(x.exitCode!==0)return et(e,w),et(e,b),C("",x.stderr,1);g=x.stdout;let N=io(e);p.push(...N)}catch{return et(e,w),et(e,b),C("","",1)}et(e,w),et(e,b)}}if(d!==null)try{let y=$e(d),w=await e.executeScript(y);if(w.exitCode!==0)return C("",w.stderr,w.exitCode);if(w.stdout){let b=w.stdout.split(`
|
|
51
51
|
`);for(let $ of b)$.length>0&&p.push($)}}catch(y){if(y.name==="ParseException")return _(`compgen: -C: ${y.message}
|
|
52
|
-
`,2);throw y}let S=p;if(u!==null){let y=u.startsWith("!"),w=y?u.slice(1):u;S=p.filter(b=>{let $=Ye(b,w,!1,!0);return y?$:!$})}if(S.length===0&&o!==null)return
|
|
52
|
+
`,2);throw y}let S=p;if(u!==null){let y=u.startsWith("!"),w=y?u.slice(1):u;S=p.filter(b=>{let $=Ye(b,w,!1,!0);return y?$:!$})}if(S.length===0&&o!==null)return C(g,"",1);let v=S.map(y=>`${n}${y}${i}`).join(`
|
|
53
53
|
`),A=g+(v?`${v}
|
|
54
54
|
`:"");return M(A)}function Zi(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 Gi(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 Ki(e,t){let s=Array.from(e.state.functions.keys());return t!==null&&(s=s.filter(r=>r.startsWith(t))),s.sort()}function Xi(e){let t=[...Es];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}function Yi(e){let t=[...an];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}function Qi(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 Ji(e){let t=[...Ui];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}function eo(e){let t=[...qi];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}async function $s(e,t){let s=[];try{let r=e.state.cwd,n=t??"";if(t){let o=t.lastIndexOf("/");if(o!==-1){let a=t.slice(0,o)||"/";n=t.slice(o+1),a.startsWith("/")?r=a:r=`${e.state.cwd}/${a}`}}let i=await e.fs.readdir(r);for(let o of i){let a=`${r}/${o}`;try{if((await e.fs.stat(a)).isDirectory&&(!n||o.startsWith(n)))if(t?.includes("/")){let c=t.lastIndexOf("/"),u=t.slice(0,c+1);s.push(u+o)}else s.push(o)}catch{}}}catch{}return s.sort()}async function on(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 to(e){return["root","nobody"]}async function so(e,t){let s=new Set;for(let i of Es)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 an)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 ro(e,t){let r=new W().parseWordFromString(t,!1,!1);return await D(e,r)}function no(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 et(e,t){for(let[s,r]of t)r===void 0?e.state.env.delete(s):e.state.env.set(s,r)}function io(e){let t=[];if(e.state.env.get("COMPREPLY__length")!==void 0){let n=Ee(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 oo=["bashdefault","default","dirnames","filenames","noquote","nosort","nospace","plusdirs"];function _s(e,t){e.state.completionSpecs||(e.state.completionSpecs=new Map);let s=!1,r=!1,n=!1,i,o,a,l=[],c=[],u=[];for(let f=0;f<t.length;f++){let d=t[f];if(d==="-p")s=!0;else if(d==="-r")r=!0;else if(d==="-D")n=!0;else if(d==="-W"){if(f++,f>=t.length)return _(`complete: -W: option requires an argument
|
|
@@ -64,26 +64,26 @@ import{B as Ar,C as _r,D as fe,E as ze,F as Q,G as Se,H as St,I as Cr,J as D,K a
|
|
|
64
64
|
`,2)}else if(d==="-X"){if(f++,f>=t.length)return _(`complete: -X: option requires an argument
|
|
65
65
|
`,2)}else if(d==="--"){u.push(...t.slice(f+1));break}else d.startsWith("-")||u.push(d)}if(r){if(u.length===0)return e.state.completionSpecs.clear(),M("");for(let f of u)e.state.completionSpecs.delete(f);return M("")}if(s)return u.length===0?As(e):As(e,u);if(t.length===0||u.length===0&&!i&&!o&&!a&&l.length===0&&c.length===0&&!n)return As(e);if(o&&u.length===0&&!n)return _(`complete: -F: option requires a command name
|
|
66
66
|
`,2);if(n){let f={isDefault:!0};return i!==void 0&&(f.wordlist=i),o!==void 0&&(f.function=o),a!==void 0&&(f.command=a),l.length>0&&(f.options=l),c.length>0&&(f.actions=c),e.state.completionSpecs.set("__default__",f),M("")}for(let f of u){let d=Object.create(null);i!==void 0&&(d.wordlist=i),o!==void 0&&(d.function=o),a!==void 0&&(d.command=a),l.length>0&&(d.options=l),c.length>0&&(d.actions=c),e.state.completionSpecs.set(f,d)}return M("")}function As(e,t){let s=e.state.completionSpecs;if(!s||s.size===0){if(t&&t.length>0){let i="";for(let o of t)i+=`complete: ${o}: no completion specification
|
|
67
|
-
`;return
|
|
67
|
+
`;return C("",i,1)}return M("")}let r=[],n=t||Array.from(s.keys());for(let i of n){if(i==="__default__")continue;let o=s.get(i);if(!o){if(t)return C(r.join(`
|
|
68
68
|
`)+(r.length>0?`
|
|
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?M(""):M(`${r.join(`
|
|
71
71
|
`)}
|
|
72
|
-
`)}var ln=["bashdefault","default","dirnames","filenames","noquote","nosort","nospace","plusdirs"];function
|
|
72
|
+
`)}var ln=["bashdefault","default","dirnames","filenames","noquote","nosort","nospace","plusdirs"];function Ps(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
73
|
`,2);let c=t[a];if(!ln.includes(c))return _(`compopt: ${c}: invalid option name
|
|
74
74
|
`,2);n.push(c)}else if(l==="+o"){if(a++,a>=t.length)return _(`compopt: +o: option requires an argument
|
|
75
75
|
`,2);let c=t[a];if(!ln.includes(c))return _(`compopt: ${c}: invalid option name
|
|
76
76
|
`,2);i.push(c)}else if(l==="--"){o.push(...t.slice(a+1));break}else!l.startsWith("-")&&!l.startsWith("+")&&o.push(l)}if(s){let a=e.state.completionSpecs.get("__default__")??{isDefault:!0},l=new Set(a.options??[]);for(let c of n)l.add(c);for(let c of i)l.delete(c);return a.options=l.size>0?Array.from(l):void 0,e.state.completionSpecs.set("__default__",a),M("")}if(r){let a=e.state.completionSpecs.get("__empty__")??{},l=new Set(a.options??[]);for(let c of n)l.add(c);for(let c of i)l.delete(c);return a.options=l.size>0?Array.from(l):void 0,e.state.completionSpecs.set("__empty__",a),M("")}if(o.length>0){for(let a of o){let l=e.state.completionSpecs.get(a)??{},c=new Set(l.options??[]);for(let u of n)c.add(u);for(let u of i)c.delete(u);l.options=c.size>0?Array.from(c):void 0,e.state.completionSpecs.set(a,l)}return M("")}return _(`compopt: not currently executing completion function
|
|
77
|
-
`,1)}function
|
|
77
|
+
`,1)}function Cs(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new Te;return L}if(t.length>1)throw new z(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 z(1,"",`bash: continue: ${t[0]}: numeric argument required
|
|
79
|
-
`);s=r}throw new pe(s)}function
|
|
79
|
+
`);s=r}throw new pe(s)}function q(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 ks(e){for(let t=0;t<e.length;t++){let s=e.charCodeAt(t);if(s<32||s===127)return!0}return!1}function Ns(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 Bt(e){return ks(e)?Ns(e):/^[a-zA-Z0-9_/.:\-@%+,=]*$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function Be(e){return ks(e)?Ns(e):`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function Os(e){return ks(e)?Ns(e):`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function cn(e,t){let s="";return e.state.integerVars?.has(t)&&(s+="i"),e.state.lowercaseVars?.has(t)&&(s+="l"),ye(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 Ts(e){return e===""?"''":/[\s'\\]/.test(e)?`'${e.replace(/'/g,"'\\''")}'`:e}function un(e,t){let s="",r="",n=!1;for(let i of t){let o=cn(e,i);if(e.state.associativeArrays?.has(i)){let u=De(e,i);if(u.length===0)s+=`declare -A ${i}=()
|
|
80
80
|
`;else{let f=u.map(d=>{let h=e.state.env.get(`${i}_${d}`)??"",m=Ts(h);return`['${d}']=${m}`});s+=`declare -A ${i}=(${f.join(" ")})
|
|
81
81
|
`}continue}let l=te(e,i);if(l.length>0){let u=l.map(f=>{let d=e.state.env.get(`${i}_${f}`)??"";return`[${f}]=${Be(d)}`});s+=`declare -a ${i}=(${u.join(" ")})
|
|
82
82
|
`;continue}if(e.state.env.has(`${i}__length`)){s+=`declare -a ${i}=()
|
|
83
83
|
`;continue}let c=e.state.env.get(i);if(c!==void 0)s+=`declare ${o} ${i}=${Os(c)}
|
|
84
84
|
`;else{let u=e.state.declaredVars?.has(i),f=e.state.localVarDepth?.has(i);u||f?s+=`declare ${o} ${i}
|
|
85
85
|
`:(r+=`bash: declare: ${i}: not found
|
|
86
|
-
`,n=!0)}}return
|
|
86
|
+
`,n=!0)}}return C(s,r,n?1:0)}function fn(e,t){let{filterExport:s,filterReadonly:r,filterNameref:n,filterIndexedArray:i,filterAssocArray:o}=t,a=s||r||n||i||o,l="",c=new Set;for(let f of e.state.env.keys()){if(f.startsWith("BASH_"))continue;if(f.endsWith("__length")){let h=f.slice(0,-8);c.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)){c.add(h);continue}}c.add(f)}if(e.state.localVarDepth)for(let f of e.state.localVarDepth.keys())c.add(f);if(e.state.associativeArrays)for(let f of e.state.associativeArrays)c.add(f);let u=Array.from(c).sort();for(let f of u){let d=cn(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&&!ye(e,f)))continue;if(h){let S=De(e,f);if(S.length===0)l+=`declare -A ${f}=()
|
|
87
87
|
`;else{let v=S.map(A=>{let y=e.state.env.get(`${f}_${A}`)??"",w=Ts(y);return`['${A}']=${w}`});l+=`declare -A ${f}=(${v.join(" ")})
|
|
88
88
|
`}continue}if(m.length>0){let S=m.map(v=>{let A=e.state.env.get(`${f}_${v}`)??"";return`[${v}]=${Be(A)}`});l+=`declare -a ${f}=(${S.join(" ")})
|
|
89
89
|
`;continue}if(e.state.env.has(`${f}__length`)){l+=`declare -a ${f}=()
|
|
@@ -93,22 +93,22 @@ import{B as Ar,C as _r,D as fe,E as ze,F as Q,G as Se,H as St,I as Cr,J as D,K a
|
|
|
93
93
|
`}}return M(t)}function hn(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
94
|
`;else{let o=i.map(a=>{let l=e.state.env.get(`${n}_${a}`)??"";return`[${a}]=${Be(l)}`});t+=`declare -a ${n}=(${o.join(" ")})
|
|
95
95
|
`}}return M(t)}function pn(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}=${Bt(a)}
|
|
96
|
-
`)}return M(t)}function xs(e,t){e.state.integerVars??=new Set,e.state.integerVars.add(t)}function lt(e,t){return e.state.integerVars?.has(t)??!1}function Ds(e,t){e.state.lowercaseVars??=new Set,e.state.lowercaseVars.add(t),e.state.uppercaseVars?.delete(t)}function ao(e,t){return e.state.lowercaseVars?.has(t)??!1}function Is(e,t){e.state.uppercaseVars??=new Set,e.state.uppercaseVars.add(t),e.state.lowercaseVars?.delete(t)}function lo(e,t){return e.state.uppercaseVars?.has(t)??!1}function tt(e,t,s){return ao(e,t)?s.toLowerCase():lo(e,t)?s.toUpperCase():s}async function mn(e,t){try{let s=new W,r=K(s,t),n=await V(e,r.expression);return String(n)}catch{return"0"}}function co(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 Rs(e,t){let s=!1,r=!1,n=!1,i=!1,o=!1,a=!1,l=!1,c=!1,u=!1,f=!1,d=!1,h=!1,m=!1,p=!1,g=!1,S=[];for(let N=0;N<t.length;N++){let I=t[N];if(I==="-a")s=!0;else if(I==="-A")r=!0;else if(I==="-r")n=!0;else if(I==="-x")i=!0;else if(I==="-p")o=!0;else if(I==="-n")a=!0;else if(I==="+n")l=!0;else if(I==="+a")c=!0;else if(I==="+x")u=!0;else if(I==="--"){S.push(...t.slice(N+1));break}else if(I.startsWith("+")){for(let
|
|
97
|
-
`,2)}}}else if(I==="-i")f=!0;else if(I==="-l")d=!0;else if(I==="-u")h=!0;else if(I==="-f")m=!0;else if(I==="-F")p=!0;else if(I==="-g")g=!0;else if(I.startsWith("-"))for(let
|
|
98
|
-
`,2);else S.push(I)}let A=e.state.localScopes.length>0&&!g,y=N=>{if(!A)return;let I=e.state.localScopes[e.state.localScopes.length-1];I.has(N)||I.set(N,e.state.env.get(N))},w=N=>{if(!A)return;let I=e.state.localScopes[e.state.localScopes.length-1];I.has(N)||I.set(N,e.state.env.get(N));let
|
|
99
|
-
`;return M(k)}let N=!0,I="";for(let
|
|
100
|
-
`:N=!1;return
|
|
96
|
+
`)}return M(t)}function xs(e,t){e.state.integerVars??=new Set,e.state.integerVars.add(t)}function lt(e,t){return e.state.integerVars?.has(t)??!1}function Ds(e,t){e.state.lowercaseVars??=new Set,e.state.lowercaseVars.add(t),e.state.uppercaseVars?.delete(t)}function ao(e,t){return e.state.lowercaseVars?.has(t)??!1}function Is(e,t){e.state.uppercaseVars??=new Set,e.state.uppercaseVars.add(t),e.state.lowercaseVars?.delete(t)}function lo(e,t){return e.state.uppercaseVars?.has(t)??!1}function tt(e,t,s){return ao(e,t)?s.toLowerCase():lo(e,t)?s.toUpperCase():s}async function mn(e,t){try{let s=new W,r=K(s,t),n=await V(e,r.expression);return String(n)}catch{return"0"}}function co(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 Rs(e,t){let s=!1,r=!1,n=!1,i=!1,o=!1,a=!1,l=!1,c=!1,u=!1,f=!1,d=!1,h=!1,m=!1,p=!1,g=!1,S=[];for(let N=0;N<t.length;N++){let I=t[N];if(I==="-a")s=!0;else if(I==="-A")r=!0;else if(I==="-r")n=!0;else if(I==="-x")i=!0;else if(I==="-p")o=!0;else if(I==="-n")a=!0;else if(I==="+n")l=!0;else if(I==="+a")c=!0;else if(I==="+x")u=!0;else if(I==="--"){S.push(...t.slice(N+1));break}else if(I.startsWith("+")){for(let P of I.slice(1))if(P==="n")l=!0;else if(P==="a")c=!0;else if(P==="x")u=!0;else if(P!=="r"){if(P!=="i"){if(!(P==="f"||P==="F"))return C("",`bash: typeset: +${P}: invalid option
|
|
97
|
+
`,2)}}}else if(I==="-i")f=!0;else if(I==="-l")d=!0;else if(I==="-u")h=!0;else if(I==="-f")m=!0;else if(I==="-F")p=!0;else if(I==="-g")g=!0;else if(I.startsWith("-"))for(let P of I.slice(1))if(P==="a")s=!0;else if(P==="A")r=!0;else if(P==="r")n=!0;else if(P==="x")i=!0;else if(P==="p")o=!0;else if(P==="n")a=!0;else if(P==="i")f=!0;else if(P==="l")d=!0;else if(P==="u")h=!0;else if(P==="f")m=!0;else if(P==="F")p=!0;else if(P==="g")g=!0;else return C("",`bash: typeset: -${P}: invalid option
|
|
98
|
+
`,2);else S.push(I)}let A=e.state.localScopes.length>0&&!g,y=N=>{if(!A)return;let I=e.state.localScopes[e.state.localScopes.length-1];I.has(N)||I.set(N,e.state.env.get(N))},w=N=>{if(!A)return;let I=e.state.localScopes[e.state.localScopes.length-1];I.has(N)||I.set(N,e.state.env.get(N));let P=`${N}_`;for(let O of e.state.env.keys())O.startsWith(P)&&!O.includes("__")&&(I.has(O)||I.set(O,e.state.env.get(O)));let k=`${N}__length`;e.state.env.has(k)&&!I.has(k)&&I.set(k,e.state.env.get(k))},b=N=>{A&&Me(e,N)};if(p){if(S.length===0){let P=Array.from(e.state.functions.keys()).sort(),k="";for(let O of P)k+=`declare -f ${O}
|
|
99
|
+
`;return M(k)}let N=!0,I="";for(let P of S)e.state.functions.has(P)?I+=`${P}
|
|
100
|
+
`:N=!1;return C(I,"",N?0:1)}if(m){if(S.length===0){let I="",P=Array.from(e.state.functions.keys()).sort();for(let k of P)I+=`${k} ()
|
|
101
101
|
{
|
|
102
102
|
# function body
|
|
103
103
|
}
|
|
104
|
-
`;return M(I)}let N=!0;for(let I of S)e.state.functions.has(I)||(N=!1);return
|
|
104
|
+
`;return M(I)}let N=!0;for(let I of S)e.state.functions.has(I)||(N=!1);return C("","",N?0:1)}if(o&&S.length>0)return un(e,S);if(o&&S.length===0)return fn(e,{filterExport:i,filterReadonly:n,filterNameref:a,filterIndexedArray:s,filterAssocArray:r});if(S.length===0&&r&&!o)return dn(e);if(S.length===0&&s&&!o)return hn(e);if(S.length===0&&!o)return pn(e);let $="",x=0;for(let N of S){let I=N.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(I&&!c){let E=I[1],T=I[2];if(r&&te(e,E).length>0){$+=`bash: declare: ${E}: cannot convert indexed to associative array
|
|
105
105
|
`,x=1;continue}if((s||!r&&!s)&&e.state.associativeArrays?.has(E)){$+=`bash: declare: ${E}: cannot convert associative to indexed array
|
|
106
|
-
`,x=1;continue}if(w(E),r&&(e.state.associativeArrays??=new Set,e.state.associativeArrays.add(E)),_e(e,E),e.state.env.delete(E),e.state.env.delete(`${E}__length`),r&&T.includes("[")){let R=Mt(T);for(let[X,F]of R){let q
|
|
106
|
+
`,x=1;continue}if(w(E),r&&(e.state.associativeArrays??=new Set,e.state.associativeArrays.add(E)),_e(e,E),e.state.env.delete(E),e.state.env.delete(`${E}__length`),r&&T.includes("[")){let R=Mt(T);for(let[X,F]of R){let Z=q(e,F);e.state.env.set(`${E}_${X}`,Z)}}else if(r){let R=Ce(T);for(let X=0;X<R.length;X+=2){let F=R[X],Z=X+1<R.length?q(e,R[X+1]):"";e.state.env.set(`${E}_${F}`,Z)}}else{let R=Ce(T);if(R.some(F=>/^\[[^\]]+\]=/.test(F))){let F=0;for(let Z of R){let ne=Z.match(/^\[([^\]]+)\]=(.*)$/);if(ne){let de=ne[1],Ue=ne[2],mi=q(e,Ue),rt;if(/^-?\d+$/.test(de))rt=Number.parseInt(de,10);else try{let yi=new W,gi=K(yi,de);rt=await V(e,gi.expression)}catch{rt=0}e.state.env.set(`${E}_${rt}`,mi),F=rt+1}else{let de=q(e,Z);e.state.env.set(`${E}_${F}`,de),F++}}}else{for(let F=0;F<R.length;F++)e.state.env.set(`${E}_${F}`,R[F]);e.state.env.set(`${E}__length`,String(R.length))}}b(E),n&&fe(e,E),i&&Se(e,E);continue}if(l){let E=N.includes("=")?N.slice(0,N.indexOf("=")):N;if(br(e,E),!N.includes("="))continue}if(u){let E=N.includes("=")?N.slice(0,N.indexOf("=")):N;if(St(e,E),!N.includes("="))continue}let P=co(N);if(P){let{name:E,indexExpr:T,value:R}=P,X=Q(e,E);if(X)return X;w(E);let F;try{let ne=new W,de=K(ne,T);F=await V(e,de.expression)}catch{let ne=parseInt(T,10);F=Number.isNaN(ne)?0:ne}e.state.env.set(`${E}_${F}`,R);let Z=parseInt(e.state.env.get(`${E}__length`)??"0",10);F>=Z&&e.state.env.set(`${E}__length`,String(F+1)),b(E),n&&fe(e,E),i&&Se(e,E);continue}let k=N.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(k&&!c){let E=k[1],T=k[2],R=Q(e,E);if(R)return R;w(E);let X=Ce(T);if(e.state.associativeArrays?.has(E)){let F=Mt(T);for(let[Z,ne]of F){let de=q(e,ne);e.state.env.set(`${E}_${Z}`,de)}}else{let F=te(e,E),Z=0,ne=e.state.env.get(E);F.length===0&&ne!==void 0?(e.state.env.set(`${E}_0`,ne),e.state.env.delete(E),Z=1):F.length>0&&(Z=Math.max(...F)+1);for(let Ue=0;Ue<X.length;Ue++)e.state.env.set(`${E}_${Z+Ue}`,q(e,X[Ue]));let de=Z+X.length;e.state.env.set(`${E}__length`,String(de))}b(E),n&&fe(e,E),i&&Se(e,E);continue}let O=N.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(O){let E=O[1],T=q(e,O[2]),R=Q(e,E);if(R)return R;y(E),f&&xs(e,E),d&&Ds(e,E),h&&Is(e,E);let F=te(e,E).length>0||e.state.associativeArrays?.has(E);if(lt(e,E)){let Z=e.state.env.get(E)??"0",ne=parseInt(Z,10)||0,de=parseInt(await mn(e,T),10)||0;T=String(ne+de),e.state.env.set(E,T)}else if(F){T=tt(e,E,T);let Z=`${E}_0`,ne=e.state.env.get(Z)??"";e.state.env.set(Z,ne+T)}else{T=tt(e,E,T);let Z=e.state.env.get(E)??"";e.state.env.set(E,Z+T)}b(E),n&&fe(e,E),i&&Se(e,E),e.state.options.allexport&&!u&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(E));continue}if(N.includes("=")){let E=N.indexOf("="),T=N.slice(0,E),R=N.slice(E+1);if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(T)){$+=`bash: typeset: \`${T}': not a valid identifier
|
|
107
107
|
`,x=1;continue}let X=Q(e,T);if(X)return X;if(y(T),a){if(R!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(R)){$+=`bash: declare: \`${R}': invalid variable name for name reference
|
|
108
108
|
`,x=1;continue}e.state.env.set(T,R),Ne(e,T),R!==""&&is(e,R)&&ns(e,T),b(T),n&&fe(e,T),i&&Se(e,T);continue}if(f&&xs(e,T),d&&Ds(e,T),h&&Is(e,T),lt(e,T)&&(R=await mn(e,R)),R=tt(e,T,R),ye(e,T)){let F=Ie(e,T);F&&F!==T?e.state.env.set(F,R):e.state.env.set(T,R)}else e.state.env.set(T,R);b(T),n&&fe(e,T),i&&Se(e,T),e.state.options.allexport&&!u&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(T))}else{let E=N;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(E)){$+=`bash: typeset: \`${E}': not a valid identifier
|
|
109
109
|
`,x=1;continue}if(s||r?w(E):y(E),a){Ne(e,E);let R=e.state.env.get(E);R!==void 0&&R!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(R)?$r(e,E):R&&is(e,R)&&ns(e,E),b(E),n&&fe(e,E),i&&Se(e,E);continue}if(f&&xs(e,E),d&&Ds(e,E),h&&Is(e,E),r){if(te(e,E).length>0){$+=`bash: declare: ${E}: cannot convert indexed to associative array
|
|
110
|
-
`,x=1;continue}e.state.associativeArrays??=new Set,e.state.associativeArrays.add(E)}let T=Array.from(e.state.env.keys()).some(R=>R.startsWith(`${E}_`)&&!R.startsWith(`${E}__length`));!e.state.env.has(E)&&!T&&(s||r?e.state.env.set(`${E}__length`,"0"):(e.state.declaredVars??=new Set,e.state.declaredVars.add(E))),b(E),n&&fe(e,E),i&&Se(e,E)}}return
|
|
111
|
-
`}}return M(o)}for(let o of i){let a=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(a){let f=a[1],d=a[2],h=Q(e,f);if(h)return h;let m=
|
|
110
|
+
`,x=1;continue}e.state.associativeArrays??=new Set,e.state.associativeArrays.add(E)}let T=Array.from(e.state.env.keys()).some(R=>R.startsWith(`${E}_`)&&!R.startsWith(`${E}__length`));!e.state.env.has(E)&&!T&&(s||r?e.state.env.set(`${E}__length`,"0"):(e.state.declaredVars??=new Set,e.state.declaredVars.add(E))),b(E),n&&fe(e,E),i&&Se(e,E)}}return C("",$,x)}async function Ls(e,t){let s=!1,r=!1,n=!1,i=[];for(let o=0;o<t.length;o++){let a=t[o];if(a==="-a")s=!0;else if(a==="-A")r=!0;else if(a==="-p")n=!0;else if(a==="--"){i.push(...t.slice(o+1));break}else a.startsWith("-")||i.push(a)}if(i.length===0){let o="",a=Array.from(e.state.readonlyVars||[]).sort();for(let l of a){let c=e.state.env.get(l);if(c!==void 0){let u=c.replace(/\\/g,"\\\\").replace(/"/g,'\\"');o+=`declare -r ${l}="${u}"
|
|
111
|
+
`}}return M(o)}for(let o of i){let a=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(a){let f=a[1],d=a[2],h=Q(e,f);if(h)return h;let m=Ce(d);if(e.state.associativeArrays?.has(f)){let p=Mt(d);for(let[g,S]of p){let v=q(e,S);e.state.env.set(`${f}_${g}`,v)}}else{let p=te(e,f),g=0,S=e.state.env.get(f);p.length===0&&S!==void 0?(e.state.env.set(`${f}_0`,S),e.state.env.delete(f),g=1):p.length>0&&(g=Math.max(...p)+1);for(let A=0;A<m.length;A++)e.state.env.set(`${f}_${g+A}`,q(e,m[A]));let v=g+m.length;e.state.env.set(`${f}__length`,String(v))}fe(e,f);continue}let l=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(l){let f=l[1],d=q(e,l[2]),h=Q(e,f);if(h)return h;let m=e.state.env.get(f)??"";e.state.env.set(f,m+d),fe(e,f);continue}let c=Qr(o);if(c.value===void 0&&!c.isArray){fe(e,c.name);continue}let u=await Jr(e,c,{makeReadonly:!0});if(u)return u}return L}function Ms(e){return e.state.directoryStack??=[],e.state.directoryStack}function ct(e,t){return t&&e===t?"~":t&&e.startsWith(`${t}/`)?`~${e.slice(t.length)}`:e}function uo(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 Fs(e,t){let s=Ms(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
|
|
@@ -132,8 +132,8 @@ eval: usage: eval [arg ...]
|
|
|
132
132
|
`,2)}if(r.length===0)return L;let n=r.join(" ");if(n.trim()==="")return L;let i=e.state.groupStdin,o=s??e.state.groupStdin;o!==void 0&&(e.state.groupStdin=o);try{let a=$e(n);return await e.executeScript(a)}catch(a){if(a instanceof he||a instanceof pe||a instanceof ue||a instanceof z)throw a;if(a.name==="ParseException")return _(`bash: eval: ${a.message}
|
|
133
133
|
`);throw a}finally{e.state.groupStdin=i}}function Vs(e,t){let s,r="";if(t.length===0)s=e.state.lastExitCode;else{let n=t[0],i=Number.parseInt(n,10);n===""||Number.isNaN(i)||!/^-?\d+$/.test(n)?(r=`bash: exit: ${n}: numeric argument required
|
|
134
134
|
`,s=2):s=(i%256+256)%256}throw new z(s,"",r)}function Bs(e,t){let s=!1,r=[];for(let o of t)o==="-n"?s=!0:o==="-p"||o==="--"||r.push(o);if(r.length===0&&!s){let o="",a=e.state.exportedVars??new Set,l=Array.from(a).sort();for(let c of l){let u=e.state.env.get(c);if(u!==void 0){let f=u.replace(/\\/g,"\\\\").replace(/"/g,'\\"');o+=`declare -x ${c}="${f}"
|
|
135
|
-
`}}return M(o)}if(s){for(let o of r){let a,l;if(o.includes("=")){let c=o.indexOf("=");a=o.slice(0,c),l=
|
|
136
|
-
`,i=1;continue}if(l!==void 0)if(c){let f=e.state.env.get(a)??"";e.state.env.set(a,f+l)}else e.state.env.set(a,l);else e.state.env.has(a)||e.state.env.set(a,"");Se(e,a)}return
|
|
135
|
+
`}}return M(o)}if(s){for(let o of r){let a,l;if(o.includes("=")){let c=o.indexOf("=");a=o.slice(0,c),l=q(e,o.slice(c+1)),e.state.env.set(a,l)}else a=o;St(e,a)}return L}let n="",i=0;for(let o of r){let a,l,c=!1,u=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(u)a=u[1],l=q(e,u[2]),c=!0;else if(o.includes("=")){let f=o.indexOf("=");a=o.slice(0,f),l=q(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
|
+
`,i=1;continue}if(l!==void 0)if(c){let f=e.state.env.get(a)??"";e.state.env.set(a,f+l)}else e.state.env.set(a,l);else e.state.env.has(a)||e.state.env.set(a,"");Se(e,a)}return C("",n,i)}function Ht(e,t){if(t.length<2)return _(`bash: getopts: usage: getopts optstring name [arg ...]
|
|
137
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 g=1;g<=p;g++)a.push(e.state.env.get(String(g))||"")}let l=Number.parseInt(e.state.env.get("OPTIND")||"1",10);l<1&&(l=1);let c=Number.parseInt(e.state.env.get("__GETOPTS_CHARINDEX")||"0",10);if(e.state.env.set("OPTARG",""),l>a.length)return n||e.state.env.set(r,"?"),e.state.env.set("OPTIND",String(a.length+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"),{exitCode:n?2:1,stdout:"",stderr:""};let u=a[l-1];if(!u||u==="-"||!u.startsWith("-"))return n||e.state.env.set(r,"?"),{exitCode:n?2:1,stdout:"",stderr:""};if(u==="--")return e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"),n||e.state.env.set(r,"?"),{exitCode:n?2:1,stdout:"",stderr:""};let f=c===0?1:c,d=u[f];if(!d)return e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"),Ht(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<u.length?(e.state.env.set("__GETOPTS_CHARINDEX",String(f+1)),e.state.env.set("OPTIND",String(l))):(e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0")),{exitCode:n?2:0,stdout:"",stderr:p}}if(h+1<o.length&&o[h+1]===":")if(f+1<u.length)e.state.env.set("OPTARG",u.slice(f+1)),e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0");else{if(l>=a.length){let p="";return i?(e.state.env.set("OPTARG",d),n||e.state.env.set(r,":")):(p=`bash: option requires an argument -- ${d}
|
|
139
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<u.length?(e.state.env.set("__GETOPTS_CHARINDEX",String(f+1)),e.state.env.set("OPTIND",String(l))):(e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"));return n||e.state.env.set(r,d),{exitCode:n?2:0,stdout:"",stderr:""}}async function js(e,t){e.state.hashTable||(e.state.hashTable=new Map);let s=!1,r=!1,n=!1,i=!1,o=!1,a="",l=[],c=0;for(;c<t.length;){let m=t[c];if(m==="--"){c++,l.push(...t.slice(c));break}if(m==="-r")s=!0,c++;else if(m==="-d")r=!0,c++;else if(m==="-l")n=!0,c++;else if(m==="-t")o=!0,c++;else if(m==="-p"){if(i=!0,c++,c>=t.length)return _(`bash: hash: -p: option requires an argument
|
|
@@ -506,22 +506,22 @@ ${h}
|
|
|
506
506
|
`)}
|
|
507
507
|
`)}function po(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 Us(e,t){if(t.length===0)return _(`bash: let: expression expected
|
|
508
508
|
`);let s=po(t),r=0;for(let n of s)try{let o=$e(`(( ${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 V(e,a.expression.expression))}}catch(i){return _(`bash: let: ${n}: ${i.message}
|
|
509
|
-
`)}return
|
|
509
|
+
`)}return C("","",r===0?1:0)}async function qs(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 c of t)if(c==="-n")i=!0;else if(c==="-a")o=!0;else if(c==="-p")a=!0;else if(c.startsWith("-")&&!c.includes("="))for(let u of c.slice(1))u==="n"?i=!0:u==="a"?o=!0:u==="p"&&(a=!0);else l.push(c);if(l.length===0){let c="",u=Array.from(s.keys()).filter(f=>!f.includes("_")||!f.match(/_\d+$/)).filter(f=>!f.includes("__length")).sort();for(let f of u){let d=e.state.env.get(f);d!==void 0&&(c+=`${f}=${d}
|
|
511
|
-
`)}return
|
|
512
|
-
`,n=1;continue}if(Q(e,u,"bash"),!s.has(u)){s.set(u,e.state.env.get(u));let y=`${u}_`;for(let w of e.state.env.keys())w.startsWith(y)&&!w.includes("__")&&(s.has(w)||s.set(w,e.state.env.get(w)))}let v=`${u}_`;for(let y of e.state.env.keys())y.startsWith(v)&&!y.includes("__")&&e.state.env.delete(y);let A=
|
|
511
|
+
`)}return C(c,"",0)}for(let c of l){let u,f,d=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(d){u=d[1];let S=d[2];if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(u)){r+=`bash: local: \`${c}': not a valid identifier
|
|
512
|
+
`,n=1;continue}if(Q(e,u,"bash"),!s.has(u)){s.set(u,e.state.env.get(u));let y=`${u}_`;for(let w of e.state.env.keys())w.startsWith(y)&&!w.includes("__")&&(s.has(w)||s.set(w,e.state.env.get(w)))}let v=`${u}_`;for(let y of e.state.env.keys())y.startsWith(v)&&!y.includes("__")&&e.state.env.delete(y);let A=Ce(S);for(let y=0;y<A.length;y++)e.state.env.set(`${u}_${y}`,A[y]);e.state.env.set(`${u}__length`,String(A.length)),Me(e,u),i&&Ne(e,u);continue}let h=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(h){u=h[1];let S=h[2];if(Q(e,u,"bash"),!s.has(u)){s.set(u,e.state.env.get(u));let $=`${u}_`;for(let N of e.state.env.keys())N.startsWith($)&&!N.includes("__")&&(s.has(N)||s.set(N,e.state.env.get(N)));let x=`${u}__length`;e.state.env.has(x)&&!s.has(x)&&s.set(x,e.state.env.get(x))}let v=Ce(S),A=te(e,u),y=0,w=e.state.env.get(u);A.length===0&&w!==void 0?(e.state.env.set(`${u}_0`,w),e.state.env.delete(u),y=1):A.length>0&&(y=Math.max(...A)+1);for(let $=0;$<v.length;$++)e.state.env.set(`${u}_${y+$}`,q(e,v[$]));let b=y+v.length;e.state.env.set(`${u}__length`,String(b)),Me(e,u),i&&Ne(e,u);continue}let m=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(m){u=m[1];let S=q(e,m[2]);Q(e,u,"bash"),s.has(u)||s.set(u,e.state.env.get(u));let v=e.state.env.get(u)??"";e.state.env.set(u,v+S),Me(e,u),i&&Ne(e,u);continue}let p=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([^\]]+)\]=(.*)$/s);if(p){u=p[1];let S=p[2],v=q(e,p[3]);if(Q(e,u,"bash"),!s.has(u)){s.set(u,e.state.env.get(u));let w=`${u}_`;for(let $ of e.state.env.keys())$.startsWith(w)&&!$.includes("__")&&(s.has($)||s.set($,e.state.env.get($)));let b=`${u}__length`;e.state.env.has(b)&&!s.has(b)&&s.set(b,e.state.env.get(b))}let A;try{let w=new W,b=K(w,S);A=await V(e,b.expression)}catch{let w=parseInt(S,10);A=Number.isNaN(w)?0:w}e.state.env.set(`${u}_${A}`,v);let y=parseInt(e.state.env.get(`${u}__length`)??"0",10);A>=y&&e.state.env.set(`${u}__length`,String(A+1)),Me(e,u),i&&Ne(e,u);continue}if(c.includes("=")){let S=c.indexOf("=");u=c.slice(0,S),f=q(e,c.slice(S+1))}else u=c;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(u)){r+=`bash: local: \`${c}': not a valid identifier
|
|
513
513
|
`,n=1;continue}let g=s.has(u);if(f!==void 0){let S=e.state.env.get(u);if(e.state.tempEnvBindings){let v=e.state.accessedTempEnvVars?.has(u),A=e.state.mutatedTempEnvVars?.has(u);if(!v&&!A)for(let y=e.state.tempEnvBindings.length-1;y>=0;y--){let w=e.state.tempEnvBindings[y];if(w.has(u)){S=w.get(u);break}}}en(e,u,S)}if(!g){let S=e.state.env.get(u);if(e.state.tempEnvBindings)for(let v=e.state.tempEnvBindings.length-1;v>=0;v--){let A=e.state.tempEnvBindings[v];if(A.has(u)){S=A.get(u);break}}if(s.set(u,S),o){let v=`${u}_`;for(let y of e.state.env.keys())y.startsWith(v)&&!y.includes("__")&&(s.has(y)||s.set(y,e.state.env.get(y)));let A=`${u}__length`;e.state.env.has(A)&&!s.has(A)&&s.set(A,e.state.env.get(A))}}if(o&&f===void 0){let S=`${u}_`;for(let v of e.state.env.keys())v.startsWith(S)&&!v.includes("__")&&e.state.env.delete(v);e.state.env.set(`${u}__length`,"0")}else if(f!==void 0){if(Q(e,u,"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(u,f),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(u))}else{let S=e.state.tempEnvBindings?.some(v=>v.has(u));!g&&!S&&e.state.env.delete(u)}Me(e,u),i&&Ne(e,u)}return
|
|
514
|
+
`,n=1;continue}e.state.env.set(u,f),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(u))}else{let S=e.state.tempEnvBindings?.some(v=>v.has(u));!g&&!S&&e.state.env.delete(u)}Me(e,u),i&&Ne(e,u)}return C("",r,n)}function Zs(e,t,s){let r=`
|
|
515
515
|
`,n=0,i=0,o=0,a=!1,l="MAPFILE",c=0;for(;c<t.length;){let v=t[c];v==="-d"&&c+1<t.length?(r=t[c+1]===""?"\0":t[c+1]||`
|
|
516
|
-
`,c+=2):v==="-n"&&c+1<t.length?(n=Number.parseInt(t[c+1],10)||0,c+=2):v==="-O"&&c+1<t.length?(i=Number.parseInt(t[c+1],10)||0,c+=2):v==="-s"&&c+1<t.length?(o=Number.parseInt(t[c+1],10)||0,c+=2):v==="-t"?(a=!0,c++):v==="-u"||v==="-C"||v==="-c"?c+=2:(v.startsWith("-")||(l=v),c++)}let u=s;!u&&e.state.groupStdin!==void 0&&(u=e.state.groupStdin);let f=[],d=u,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
|
|
517
|
-
`,1);let w=d,b=w.indexOf("\0");b!==-1&&(w=w.substring(0,b)),f.push(w),h++}}break}let A=d.substring(0,v),y=A.indexOf("\0");if(y!==-1&&(A=A.substring(0,y)),!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
|
|
518
|
-
`,1);f.push(A),h++}i===0&&_e(e,l);for(let v=0;v<f.length;v++)e.state.env.set(`${l}_${i+v}`,f[v]);let g=parseInt(e.state.env.get(`${l}__length`)||"0",10),S=i+f.length;return e.state.env.set(`${l}__length`,String(Math.max(g,S))),e.state.groupStdin!==void 0&&!s&&(e.state.groupStdin=""),
|
|
519
|
-
`,o="",a=-1,l=-1,c=null,u=-1,f=-1,d=[],h=0,m=!1,p=(
|
|
520
|
-
`){k+=2,A=k;continue}if(T===S){k+=2,
|
|
521
|
-
`){
|
|
516
|
+
`,c+=2):v==="-n"&&c+1<t.length?(n=Number.parseInt(t[c+1],10)||0,c+=2):v==="-O"&&c+1<t.length?(i=Number.parseInt(t[c+1],10)||0,c+=2):v==="-s"&&c+1<t.length?(o=Number.parseInt(t[c+1],10)||0,c+=2):v==="-t"?(a=!0,c++):v==="-u"||v==="-C"||v==="-c"?c+=2:(v.startsWith("-")||(l=v),c++)}let u=s;!u&&e.state.groupStdin!==void 0&&(u=e.state.groupStdin);let f=[],d=u,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 C("",`mapfile: array element limit exceeded (${p})
|
|
517
|
+
`,1);let w=d,b=w.indexOf("\0");b!==-1&&(w=w.substring(0,b)),f.push(w),h++}}break}let A=d.substring(0,v),y=A.indexOf("\0");if(y!==-1&&(A=A.substring(0,y)),!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 C("",`mapfile: array element limit exceeded (${p})
|
|
518
|
+
`,1);f.push(A),h++}i===0&&_e(e,l);for(let v=0;v<f.length;v++)e.state.env.set(`${l}_${i+v}`,f[v]);let g=parseInt(e.state.env.get(`${l}__length`)||"0",10),S=i+f.length;return e.state.env.set(`${l}__length`,String(Math.max(g,S))),e.state.groupStdin!==void 0&&!s&&(e.state.groupStdin=""),C("","",0)}function mo(e){if(!e.startsWith("__rw__:"))return null;let t=e.slice(7),s=t.indexOf(":");if(s===-1)return null;let r=Number.parseInt(t.slice(0,s),10);if(Number.isNaN(r)||r<0)return null;let n=s+1,i=t.slice(n,n+r),o=n+r+1,a=t.slice(o),l=a.indexOf(":");if(l===-1)return null;let c=Number.parseInt(a.slice(0,l),10);if(Number.isNaN(c)||c<0)return null;let u=a.slice(l+1);return{path:i,position:c,content:u}}function yo(e,t,s){return`__rw__:${e.length}:${e}:${t}:${s}`}function Gs(e,t,s,r=-1){let n=!1,i=`
|
|
519
|
+
`,o="",a=-1,l=-1,c=null,u=-1,f=-1,d=[],h=0,m=!1,p=(P,k)=>{let O=1;for(;O<P.length;){let E=P[O];if(E==="r")n=!0,O++;else if(E==="s")O++;else{if(E==="d")return O+1<P.length?(i=P.substring(O+1),{nextArgIndex:k+1}):k+1<t.length?(i=t[k+1],{nextArgIndex:k+2}):{nextArgIndex:k+1};if(E==="n"){if(O+1<P.length){let T=P.substring(O+1);return a=Number.parseInt(T,10),(Number.isNaN(a)||a<0)&&(m=!0,a=0),{nextArgIndex:k+1}}else if(k+1<t.length)return a=Number.parseInt(t[k+1],10),(Number.isNaN(a)||a<0)&&(m=!0,a=0),{nextArgIndex:k+2};return{nextArgIndex:k+1}}else if(E==="N"){if(O+1<P.length){let T=P.substring(O+1);return l=Number.parseInt(T,10),(Number.isNaN(l)||l<0)&&(m=!0,l=0),{nextArgIndex:k+1}}else if(k+1<t.length)return l=Number.parseInt(t[k+1],10),(Number.isNaN(l)||l<0)&&(m=!0,l=0),{nextArgIndex:k+2};return{nextArgIndex:k+1}}else{if(E==="a")return O+1<P.length?(c=P.substring(O+1),{nextArgIndex:k+1}):k+1<t.length?(c=t[k+1],{nextArgIndex:k+2}):{nextArgIndex:k+1};if(E==="p")return O+1<P.length?(o=P.substring(O+1),{nextArgIndex:k+1}):k+1<t.length?(o=t[k+1],{nextArgIndex:k+2}):{nextArgIndex:k+1};if(E==="u"){if(O+1<P.length){let T=P.substring(O+1);return u=Number.parseInt(T,10),Number.isNaN(u)||u<0?{nextArgIndex:-2}:{nextArgIndex:k+1}}else if(k+1<t.length)return u=Number.parseInt(t[k+1],10),Number.isNaN(u)||u<0?{nextArgIndex:-2}:{nextArgIndex:k+2};return{nextArgIndex:k+1}}else if(E==="t"){if(O+1<P.length){let T=P.substring(O+1);return f=Number.parseFloat(T),Number.isNaN(f)&&(f=0),{nextArgIndex:k+1}}else if(k+1<t.length)return f=Number.parseFloat(t[k+1]),Number.isNaN(f)&&(f=0),{nextArgIndex:k+2};return{nextArgIndex:k+1}}else if(E==="e"||E==="i"||E==="P"){if(E==="i"&&k+1<t.length)return{nextArgIndex:k+2};O++}else O++}}}return{nextArgIndex:k+1}};for(;h<t.length;){let P=t[h];if(P.startsWith("-")&&P.length>1&&P!=="--"){let k=p(P,h);if(k.nextArgIndex===-1)return{stdout:"",stderr:"",exitCode:2};if(k.nextArgIndex===-2)return{stdout:"",stderr:"",exitCode:1};h=k.nextArgIndex}else if(P==="--")for(h++;h<t.length;)d.push(t[h]),h++;else d.push(P),h++}if(m)return C("","",1);if(d.length===0&&c===null&&d.push("REPLY"),f===0){if(c)_e(e,c);else{for(let P of d)e.state.env.set(P,"");d.length===0&&e.state.env.set("REPLY","")}return C("","",0)}if(f<0&&f!==-1)return C("","",1);let g=s;u>=0?e.state.fileDescriptors?g=e.state.fileDescriptors.get(u)||"":g="":!g&&e.state.groupStdin!==void 0&&(g=e.state.groupStdin);let S=i===""?"\0":i,v="",A=0,y=!0,w=P=>{if(u>=0&&e.state.fileDescriptors)e.state.fileDescriptors.set(u,g.substring(P));else if(r>=0&&e.state.fileDescriptors){let k=e.state.fileDescriptors.get(r);if(k?.startsWith("__rw__:")){let O=mo(k);if(O){let E=O.position+P;e.state.fileDescriptors.set(r,yo(O.path,E,O.content))}}}else e.state.groupStdin!==void 0&&!s&&(e.state.groupStdin=g.substring(P))};if(l>=0){let P=Math.min(l,g.length);v=g.substring(0,P),A=P,y=P>=l,w(A);let k=d[0]||"REPLY";e.state.env.set(k,v);for(let O=1;O<d.length;O++)e.state.env.set(d[O],"");return C("","",y?0:1)}else if(a>=0){let P=0,k=0,O=!1;for(;k<g.length&&P<a;){let E=g[k];if(E===S){A=k+1,O=!0;break}if(!n&&E==="\\"&&k+1<g.length){let T=g[k+1];if(T===S&&S===`
|
|
520
|
+
`){k+=2,A=k;continue}if(T===S){k+=2,P++,v+=T,A=k;continue}v+=T,k+=2,P++,A=k}else v+=E,k++,P++,A=k}y=P>=a||O,w(A)}else{A=0;let P=0;for(;P<g.length;){let k=g[P];if(k===S){A=P+S.length,y=!0;break}if(!n&&k==="\\"&&P+1<g.length){let O=g[P+1];if(O===`
|
|
521
|
+
`){P+=2;continue}if(O===S){v+=O,P+=2;continue}v+=k,v+=O,P+=2;continue}v+=k,P++}if(P>=g.length&&(y=!1,A=P,v.length===0&&g.length===0)){for(let k of d)e.state.env.set(k,"");return c&&_e(e,c),C("","",1)}w(A)}S===`
|
|
522
522
|
`&&v.endsWith(`
|
|
523
|
-
`)&&(v=v.slice(0,-1));let b=
|
|
524
|
-
`,1);_e(e,c);for(let O=0;O<
|
|
523
|
+
`)&&(v=v.slice(0,-1));let b=P=>n?P:P.replace(/\\(.)/g,"$1");if(d.length===1&&d[0]==="REPLY")return e.state.env.set("REPLY",b(v)),C("","",y?0:1);let $=wr(e.state.env);if(c){let{words:P}=rs(v,$,void 0,n),k=e.limits?.maxArrayElements??1e5;if(P.length>k)return C("",`read: array element limit exceeded (${k})
|
|
524
|
+
`,1);_e(e,c);for(let O=0;O<P.length;O++)e.state.env.set(`${c}_${O}`,b(P[O]));return C("","",y?0:1)}let x=d.length,{words:N,wordStarts:I}=rs(v,$,x,n);for(let P=0;P<d.length;P++){let k=d[P];if(P<d.length-1)e.state.env.set(k,b(N[P]??""));else if(P<I.length){let O=v.substring(I[P]);O=vr(O,$,n),O=b(O),e.state.env.set(k,O)}else e.state.env.set(k,"")}return C("","",y?0:1)}function Ks(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 ue(s)}var Ut=`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
|
|
@@ -549,23 +549,23 @@ ${Ut}`;if(e.state.options.posix)throw new we(1,"",i);return _(i)}En(e,vn.get(n)?
|
|
|
549
549
|
${Ut}`;if(e.state.options.posix)throw new we(1,"",a);return _(a)}En(e,wn.get(o)??null,n)}s++;continue}if(r==="--")return Xs(e,t.slice(s+1)),L;if(r==="-"){if(e.state.options.xtrace=!1,e.state.options.verbose=!1,Xe(e),s+1<t.length)return Xs(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
|
${Ut}`;if(e.state.options.posix)throw new we(1,"",n);return _(n)}return Xs(e,t.slice(s)),L}return L}function Xs(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 Qs(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
|
-
`;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 Js(e,t){let s=t;if(s.length>0&&s[0]==="--"&&(s=s.slice(1)),s.length===0)return
|
|
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 Js(e,t){let s=t;if(s.length>0&&s[0]==="--"&&(s=s.slice(1)),s.length===0)return C("",`bash: source: filename argument required
|
|
553
553
|
`,2);let r=s[0],n=null,i=null;if(r.includes("/")){let c=e.fs.resolvePath(e.state.cwd,r);try{i=await e.fs.readFile(c),n=c}catch{}}else{let u=(e.state.env.get("PATH")||"").split(":").filter(f=>f);for(let f of u){let d=e.fs.resolvePath(e.state.cwd,`${f}/${r}`);try{if((await e.fs.stat(d)).isDirectory)continue;i=await e.fs.readFile(d),n=d;break}catch{}}if(i===null){let f=e.fs.resolvePath(e.state.cwd,r);try{i=await e.fs.readFile(f),n=f}catch{}}}if(i===null)return _(`bash: ${r}: No such file or directory
|
|
554
|
-
`);let o=new Map;if(s.length>1){for(let u=1;u<=9;u++)o.set(String(u),e.state.env.get(String(u)));o.set("#",e.state.env.get("#")),o.set("@",e.state.env.get("@"));let c=s.slice(1);e.state.env.set("#",String(c.length)),e.state.env.set("@",c.join(" "));for(let u=0;u<c.length&&u<9;u++)e.state.env.set(String(u+1),c[u]);for(let u=c.length+1;u<=9;u++)e.state.env.delete(String(u))}let a=e.state.currentSource,l=()=>{if(e.state.sourceDepth--,e.state.currentSource=a,s.length>1)for(let[c,u]of o)u===void 0?e.state.env.delete(c):e.state.env.set(c,u)};e.state.sourceDepth++,e.state.currentSource=r;try{let c=$e(i),u=await e.executeScript(c);return l(),u}catch(c){if(l(),c instanceof z)throw c;if(c instanceof ue)return
|
|
555
|
-
`);throw c}}function Sn(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function So(e){return e.startsWith("'")&&e.endsWith("'")||e.startsWith('"')&&e.endsWith('"')}async function An(e,t){if(So(t))return null;try{let s=new W,r=K(s,t);return await V(e,r.expression)}catch{let s=parseInt(t,10);return Number.isNaN(s)?0:s}}function _n(e,t){if(e.state.localVarStack?.has(t)){let r=Wt(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)Ft(e,t),e.state.localVarStack?.delete(t),e.state.fullyUnsetLocals=e.state.fullyUnsetLocals||new Map,e.state.fullyUnsetLocals.set(t,r.scopeIndex),er(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),Ft(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||Ft(e,t),!0}}return!1}function er(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
|
|
554
|
+
`);let o=new Map;if(s.length>1){for(let u=1;u<=9;u++)o.set(String(u),e.state.env.get(String(u)));o.set("#",e.state.env.get("#")),o.set("@",e.state.env.get("@"));let c=s.slice(1);e.state.env.set("#",String(c.length)),e.state.env.set("@",c.join(" "));for(let u=0;u<c.length&&u<9;u++)e.state.env.set(String(u+1),c[u]);for(let u=c.length+1;u<=9;u++)e.state.env.delete(String(u))}let a=e.state.currentSource,l=()=>{if(e.state.sourceDepth--,e.state.currentSource=a,s.length>1)for(let[c,u]of o)u===void 0?e.state.env.delete(c):e.state.env.set(c,u)};e.state.sourceDepth++,e.state.currentSource=r;try{let c=$e(i),u=await e.executeScript(c);return l(),u}catch(c){if(l(),c instanceof z)throw c;if(c instanceof ue)return C(c.stdout,c.stderr,c.exitCode);if(c.name==="ParseException")return _(`bash: ${r}: ${c.message}
|
|
555
|
+
`);throw c}}function Sn(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function So(e){return e.startsWith("'")&&e.endsWith("'")||e.startsWith('"')&&e.endsWith('"')}async function An(e,t){if(So(t))return null;try{let s=new W,r=K(s,t);return await V(e,r.expression)}catch{let s=parseInt(t,10);return Number.isNaN(s)?0:s}}function _n(e,t){if(e.state.localVarStack?.has(t)){let r=Wt(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)Ft(e,t),e.state.localVarStack?.delete(t),e.state.fullyUnsetLocals=e.state.fullyUnsetLocals||new Map,e.state.fullyUnsetLocals.set(t,r.scopeIndex),er(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),Ft(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||Ft(e,t),!0}}return!1}function er(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 Pn(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 W().parseWordFromString(s,!0,!1);return D(e,n)}if(t.includes("$")){let r=new W().parseWordFromString(t,!1,!1);return D(e,r)}return t}async function tr(e,t){let s="both",r="",n=0;for(let i of t){if(i==="-v"){s="variable";continue}if(i==="-f"){s="function";continue}if(s==="function"){e.state.functions.delete(i);continue}if(s==="variable"){let c=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(c){let d=c[1],h=c[2];if(h==="@"||h==="*"){let A=Ee(e,d);for(let[y]of A)e.state.env.delete(`${d}_${y}`);e.state.env.delete(d);continue}let m=e.state.associativeArrays?.has(d);if(m){let A=await Pn(e,h);e.state.env.delete(`${d}_${A}`);continue}let p=os(e,d),g=e.state.declaredVars?.has(d);if((e.state.env.has(d)||g)&&!p&&!m){r+=`bash: unset: ${d}: not an array variable
|
|
556
556
|
`,n=1;continue}let v=await An(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=Ee(e,d),y=A.length,w=e.state.currentLine;if(y===0){r+=`bash: line ${w}: unset: [${v}]: bad array subscript
|
|
558
558
|
`,n=1;continue}let b=y+v;if(b<0){r+=`bash: line ${w}: unset: [${v}]: bad array subscript
|
|
559
559
|
`,n=1;continue}let $=A[b][0];e.state.env.delete(`${d}_${$}`);continue}e.state.env.delete(`${d}_${v}`);continue}if(!Sn(i)){r+=`bash: unset: \`${i}': not a valid identifier
|
|
560
560
|
`,n=1;continue}let u=i;if(ye(e,i)){let d=Ie(e,i);d&&d!==i&&(u=d)}if(ze(e,u)){r+=`bash: unset: ${u}: cannot unset: readonly variable
|
|
561
|
-
`,n=1;continue}let f=Qe(e,u);if(f!==void 0&&f!==e.state.callDepth)_n(e,u);else if(e.state.fullyUnsetLocals?.has(u))e.state.env.delete(u);else if(f!==void 0){let d=e.state.accessedTempEnvVars?.has(u),h=e.state.mutatedTempEnvVars?.has(u);if((d||h)&&e.state.localVarStack?.has(u)){let m=Wt(e,u);m?m.value===void 0?e.state.env.delete(u):e.state.env.set(u,m.value):e.state.env.delete(u)}else e.state.env.delete(u)}else er(e,u)||e.state.env.delete(u);e.state.exportedVars?.delete(u);continue}let o=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(o){let c=o[1],u=o[2];if(u==="@"||u==="*"){let p=Ee(e,c);for(let[g]of p)e.state.env.delete(`${c}_${g}`);e.state.env.delete(c);continue}let f=e.state.associativeArrays?.has(c);if(f){let p=await
|
|
561
|
+
`,n=1;continue}let f=Qe(e,u);if(f!==void 0&&f!==e.state.callDepth)_n(e,u);else if(e.state.fullyUnsetLocals?.has(u))e.state.env.delete(u);else if(f!==void 0){let d=e.state.accessedTempEnvVars?.has(u),h=e.state.mutatedTempEnvVars?.has(u);if((d||h)&&e.state.localVarStack?.has(u)){let m=Wt(e,u);m?m.value===void 0?e.state.env.delete(u):e.state.env.set(u,m.value):e.state.env.delete(u)}else e.state.env.delete(u)}else er(e,u)||e.state.env.delete(u);e.state.exportedVars?.delete(u);continue}let o=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(o){let c=o[1],u=o[2];if(u==="@"||u==="*"){let p=Ee(e,c);for(let[g]of p)e.state.env.delete(`${c}_${g}`);e.state.env.delete(c);continue}let f=e.state.associativeArrays?.has(c);if(f){let p=await Pn(e,u);e.state.env.delete(`${c}_${p}`);continue}let d=os(e,c);if(e.state.env.has(c)&&!d&&!f){r+=`bash: unset: ${c}: not an array variable
|
|
562
562
|
`,n=1;continue}let m=await An(e,u);if(m===null&&d){r+=`bash: unset: ${u}: not a valid identifier
|
|
563
563
|
`,n=1;continue}if(m===null)continue;if(m<0){let p=Ee(e,c),g=p.length,S=e.state.currentLine;if(g===0){r+=`bash: line ${S}: unset: [${m}]: bad array subscript
|
|
564
564
|
`,n=1;continue}let v=g+m;if(v<0){r+=`bash: line ${S}: unset: [${m}]: bad array subscript
|
|
565
565
|
`,n=1;continue}let A=p[v][0];e.state.env.delete(`${c}_${A}`);continue}e.state.env.delete(`${c}_${m}`);continue}if(!Sn(i)){r+=`bash: unset: \`${i}': not a valid identifier
|
|
566
566
|
`,n=1;continue}let a=i;if(ye(e,i)){let c=Ie(e,i);c&&c!==i&&(a=c)}if(ze(e,a)){r+=`bash: unset: ${a}: cannot unset: readonly variable
|
|
567
|
-
`,n=1;continue}let l=Qe(e,a);if(l!==void 0&&l!==e.state.callDepth)_n(e,a);else if(e.state.fullyUnsetLocals?.has(a))e.state.env.delete(a);else if(l!==void 0){let c=e.state.accessedTempEnvVars?.has(a),u=e.state.mutatedTempEnvVars?.has(a);if((c||u)&&e.state.localVarStack?.has(a)){let f=Wt(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 er(e,a)||e.state.env.delete(a);e.state.exportedVars?.delete(a),e.state.functions.delete(i)}return
|
|
568
|
-
`}}}l++}else break}for(;l<t.length;)a.push(t[l]),l++;if(o)return
|
|
567
|
+
`,n=1;continue}let l=Qe(e,a);if(l!==void 0&&l!==e.state.callDepth)_n(e,a);else if(e.state.fullyUnsetLocals?.has(a))e.state.env.delete(a);else if(l!==void 0){let c=e.state.accessedTempEnvVars?.has(a),u=e.state.mutatedTempEnvVars?.has(a);if((c||u)&&e.state.localVarStack?.has(a)){let f=Wt(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 er(e,a)||e.state.env.delete(a);e.state.exportedVars?.delete(a),e.state.functions.delete(i)}return C("",r,n)}var sr=["extglob","dotglob","nullglob","failglob","globstar","globskipdots","nocaseglob","nocasematch","expand_aliases","lastpipe","xpg_echo"],Ao=["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 qt(e){return sr.includes(e)}function _o(e){return Ao.includes(e)}function Cn(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
|
+
`}}}l++}else break}for(;l<t.length;)a.push(t[l]),l++;if(o)return Po(e,a,s,r,n,i);if(s&&r)return{exitCode:1,stdout:"",stderr:`shopt: cannot set and unset shell options simultaneously
|
|
569
569
|
`};if(a.length===0){if(s||r){let h=[];for(let m of sr){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
571
|
`:"",stderr:""}}let d=[];for(let h of sr){let m=e.state.shoptOptions[h];d.push(n?`shopt ${m?"-s":"-u"} ${h}`:`${h} ${m?"on":"off"}`)}return{exitCode:0,stdout:`${d.join(`
|
|
@@ -573,7 +573,7 @@ ${Ut}`;if(e.state.options.posix)throw new we(1,"",n);return _(n)}return Xs(e,t.s
|
|
|
573
573
|
`,stderr:""}}let c=!1,u="",f=[];for(let d of a){if(!qt(d)&&!_o(d)){u+=`shopt: ${d}: invalid shell option name
|
|
574
574
|
`,c=!0;continue}if(s)qt(d)&&(e.state.shoptOptions[d]=!0,ds(e));else if(r)qt(d)&&(e.state.shoptOptions[d]=!1,ds(e));else if(qt(d)){let h=e.state.shoptOptions[d];i?h||(c=!0):n?(f.push(`shopt ${h?"-s":"-u"} ${d}`),h||(c=!0)):(f.push(`${d} ${h?"on":"off"}`),h||(c=!0))}else i?c=!0:n?(f.push(`shopt -u ${d}`),c=!0):(f.push(`${d} off`),c=!0)}return{exitCode:c?1:0,stdout:f.length>0?`${f.join(`
|
|
575
575
|
`)}
|
|
576
|
-
`:"",stderr:u}}function
|
|
576
|
+
`:"",stderr:u}}function Po(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),g=m||!p?!1:e.state.options[p];s&&!g||r&&g||d.push(n?`set ${g?"-o":"+o"} ${h}`:`${h} ${g?"on":"off"}`)}return{exitCode:0,stdout:d.length>0?`${d.join(`
|
|
577
577
|
`)}
|
|
578
578
|
`:"",stderr:""}}let c=!1,u="",f=[];for(let d of t){let h=o.has(d),m=a.includes(d);if(!h&&!m){u+=`shopt: ${d}: invalid option name
|
|
579
579
|
`,c=!0;continue}if(m){s||r||(i?c=!0:n?(f.push(`set +o ${d}`),c=!0):(f.push(`${d} off`),c=!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,Xe(e);else if(r)e.state.options[p]=!1,Xe(e);else{let g=e.state.options[p];i?g||(c=!0):n?(f.push(`set ${g?"-o":"+o"} ${d}`),g||(c=!0)):(f.push(`${d} ${g?"on":"off"}`),g||(c=!0))}}return{exitCode:c?1:0,stdout:f.length>0?`${f.join(`
|
|
@@ -597,12 +597,12 @@ ${Ut}`;if(e.state.options.posix)throw new we(1,"",n);return _(n)}return Xs(e,t.s
|
|
|
597
597
|
`:n?u+=`file
|
|
598
598
|
`:u+=`${p} is ${b}
|
|
599
599
|
`,h=!0,g=!0)}if(!g&&(m=!0,!n&&!i)){let b=!0;if(p.includes("/")){let $=e.fs.resolvePath(e.state.cwd,p);await e.fs.exists($)&&(b=!1)}b&&(f+=`bash: type: ${p}: not found
|
|
600
|
-
`)}}}return i?d=m&&!h?1:0:d=m?1:0,
|
|
600
|
+
`)}}}return i?d=m&&!h?1:0:d=m?1:0,C(u,f,d)}function Nn(e,t){let s;return t.body.type==="Group"?s=t.body.body.map(n=>ut(n)).join("; "):s=ut(t.body),`${e} is a function
|
|
601
601
|
${e} ()
|
|
602
602
|
{
|
|
603
603
|
${s}
|
|
604
604
|
}
|
|
605
|
-
`}function ut(e){if(Array.isArray(e))return e.map(t=>ut(t)).join("; ");if(e.type==="Statement"){let t=[];for(let s=0;s<e.pipelines.length;s++){let r=e.pipelines[s];t.push(
|
|
605
|
+
`}function ut(e){if(Array.isArray(e))return e.map(t=>ut(t)).join("; ");if(e.type==="Statement"){let t=[];for(let s=0;s<e.pipelines.length;s++){let r=e.pipelines[s];t.push(Co(r)),e.operators[s]&&t.push(e.operators[s])}return t.join(" ")}if(e.type==="SimpleCommand"){let t=e,s=[];t.name&&s.push(On(t.name));for(let r of t.args)s.push(On(r));return s.join(" ")}return e.type==="Group"?`{ ${e.body.map(r=>ut(r)).join("; ")}; }`:"..."}function Co(e){let t=e.commands.map(s=>ut(s));return(e.negated?"! ":"")+t.join(" | ")}function On(e){let t="";for(let s of e.parts)s.type==="Literal"?t+=s.value:s.type==="DoubleQuoted"?t+=`"${s.parts.map(r=>Tn(r)).join("")}"`:s.type==="SingleQuoted"?t+=`'${s.value}'`:t+=Tn(s);return t}function Tn(e){let t=e;return t.type==="Literal"?t.value??"":t.type==="Variable"?`$${t.name}`:""}async function Dn(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(bs.has(a))r?n+=`${a} is a shell keyword
|
|
608
608
|
`:n+=`${a}
|
|
@@ -616,7 +616,7 @@ ${e} ()
|
|
|
616
616
|
`),o=1)}else if(e.commands.has(a)){let u=(e.state.env.get("PATH")??"/usr/bin:/bin").split(":"),f=null;for(let d of u){if(!d)continue;let 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
|
|
619
|
+
`),o=1}return C(n,i,o)}async function In(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 Rn(e,t,s,r,n,i,o,a){let{ctx:l,runCommand:c}=e;if(l.coverage&&Je.has(t)&&l.coverage.hit(`bash:builtin:${t}`),t==="export")return Bs(l,s);if(t==="unset")return tr(l,s);if(t==="exit")return Vs(l,s);if(t==="local")return qs(l,s);if(t==="set")return Ys(l,s);if(t==="break")return ps(l,s);if(t==="continue")return Cs(l,s);if(t==="return")return Ks(l,s);if(t==="eval"&&l.state.options.posix)return jt(l,s,n);if(t==="shift")return Qs(l,s);if(t==="getopts")return Ht(l,s);if(t==="compgen")return Ss(l,s);if(t==="complete")return _s(l,s);if(t==="compopt")return Ps(l,s);if(t==="pushd")return await Fs(l,s);if(t==="popd")return Ws(l,s);if(t==="dirs")return zs(l,s);if(t==="source"||t===".")return Js(l,s);if(t==="read")return Gs(l,s,n,a);if(t==="mapfile"||t==="readarray")return Zs(l,s,n);if(t==="declare"||t==="typeset")return Rs(l,s);if(t==="readonly")return Ls(l,s);if(!i){let u=l.state.functions.get(t);if(u)return Vt(l,u,s,n)}if(t==="eval")return jt(l,s,n);if(t==="cd")return await ms(l,s);if(t===":"||t==="true")return L;if(t==="false")return G(!1);if(t==="let")return Us(l,s);if(t==="command")return ko(e,s,n);if(t==="builtin")return No(e,s,n);if(t==="shopt")return Cn(l,s);if(t==="exec"){if(s.length===0)return L;let[u,...f]=s;return c(u,f,[],n,!1,!1,-1)}if(t==="wait")return L;if(t==="type")return await xn(l,s,u=>In(l,u),u=>Zt(l,u));if(t==="hash")return js(l,s);if(t==="help")return Hs(l,s);if(t==="["||t==="test"){let u=s;if(t==="["){if(s[s.length-1]!=="]")return _("[: missing `]'\n",2);u=s.slice(0,-1)}return at(l,u)}return null}async function ko(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 Dn(r,l,a,o);let[c,...u]=l;return n(c,u,[],s,!0,i,-1)}async function No(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(!Je.has(i))return _(`bash: builtin: ${i}: not a shell builtin
|
|
620
620
|
`);let[,...o]=n;return r(i,o,[],s,!0,!1,-1)}async function Ln(e,t,s,r,n){let{ctx:i,buildExportedEnv:o,executeUserScript:a}=e,c=await kn(i,t,n?"/usr/bin:/bin":void 0);if(!c)return jr(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 c)return c.error==="permission_denied"?_(`bash: ${t}: Permission denied
|
|
@@ -624,12 +624,12 @@ ${e} ()
|
|
|
624
624
|
`,127);if("script"in c)return t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,c.path)),await a(c.path,s,r);let{cmd:u,path:f}=c;t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,f));let d=r||i.state.groupStdin||"",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};try{return await u.execute(s,m)}catch(p){if(p instanceof ie)throw p;return _(`${t}: ${qe(ve(p))}
|
|
625
625
|
`)}}async function rr(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 ft(e,t,s,r){if(e instanceof he)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 pe)return t+=e.stdout,s+=e.stderr,e.levels>1&&r>1?(e.levels--,e.stdout=t,e.stderr=s,{action:"rethrow",stdout:t,stderr:s,error:e}):{action:"continue",stdout:t,stderr:s};if(e instanceof ue||e instanceof me||e instanceof z||e instanceof ie)return e.prependOutput(t,s),{action:"rethrow",stdout:t,stderr:s,error:e};let n=ve(e);return{action:"error",stdout:t,stderr:`${s}${n}
|
|
626
626
|
`,exitCode:1}}async function Gt(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(bt(a)||a instanceof me||a instanceof z||a instanceof ie||a instanceof Te)throw a.prependOutput(n,i),a;return{stdout:n,stderr:`${i}${ve(a)}
|
|
627
|
-
`,exitCode:1}}return{stdout:n,stderr:i,exitCode:o}}async function Mn(e,t){let s="",r="";for(let n of t.clauses){let i=await rr(e,n.condition);if(s+=i.stdout,r+=i.stderr,i.exitCode===0)return Gt(e,n.body,s,r)}return t.elseBody?Gt(e,t.elseBody,s,r):
|
|
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 c of t.words){let u=await
|
|
627
|
+
`,exitCode:1}}return{stdout:n,stderr:i,exitCode:o}}async function Mn(e,t){let s="",r="";for(let n of t.clauses){let i=await rr(e,n.condition);if(s+=i.stdout,r+=i.stderr,i.exitCode===0)return Gt(e,n.body,s,r)}return t.elseBody?Gt(e,t.elseBody,s,r):C(s,r,0)}async function Fn(e,t){let s=await ke(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 c of t.words){let u=await Pe(e,c);a.push(...u.values)}}catch(c){if(c instanceof vt)return{stdout:"",stderr:c.stderr,exitCode:1};throw c}e.state.loopDepth++;try{for(let c of a){o++,o>e.limits.maxLoopIterations&&Oe(`for loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,n),e.state.env.set(t.variable,c);try{for(let u of t.body){let f=await e.executeStatement(u);r+=f.stdout,n+=f.stderr,i=f.exitCode}}catch(u){let f=ft(u,r,n,e.state.loopDepth);if(r=f.stdout,n=f.stderr,f.action==="break")break;if(f.action==="continue")continue;if(f.action==="error"){let d=C(r,n,f.exitCode??1);return U(e,d,t.redirections)}throw f.error}}}finally{e.state.loopDepth--}let l=C(r,n,i);return U(e,l,t.redirections)}async function Wn(e,t){let s=await ke(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 V(e,t.init.expression),e.state.loopDepth++;try{for(;a++,a>e.limits.maxLoopIterations&&Oe(`for loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,i),!(t.condition&&(r!==void 0&&(e.state.currentLine=r),await V(e,t.condition.expression)===0));){try{for(let c of t.body){let u=await e.executeStatement(c);n+=u.stdout,i+=u.stderr,o=u.exitCode}}catch(c){let u=ft(c,n,i,e.state.loopDepth);if(n=u.stdout,i=u.stderr,u.action==="break")break;if(u.action==="continue"){t.update&&await V(e,t.update.expression);continue}if(u.action==="error"){let f=C(n,i,u.exitCode??1);return U(e,f,t.redirections)}throw u.error}t.update&&await V(e,t.update.expression)}}finally{e.state.loopDepth--}let l=C(n,i,o);return U(e,l,t.redirections)}async function zn(e,t,s=""){let r="",n="",i=0,o=0,a=s;for(let c of t.redirections)if((c.operator==="<<"||c.operator==="<<-")&&c.target.type==="HereDoc"){let u=c.target,f=await D(e,u.content);u.stripTabs&&(f=f.split(`
|
|
629
629
|
`).map(d=>d.replace(/^\t+/,"")).join(`
|
|
630
630
|
`)),a=f}else if(c.operator==="<<<"&&c.target.type==="Word")a=`${await D(e,c.target)}
|
|
631
631
|
`;else if(c.operator==="<"&&c.target.type==="Word")try{let u=await D(e,c.target),f=e.fs.resolvePath(e.state.cwd,u);a=await e.fs.readFile(f)}catch{let u=await D(e,c.target);return _(`bash: ${u}: 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&&Oe(`while loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,n);let c=0,u=!1,f=!1,d=e.state.inCondition;e.state.inCondition=!0;try{for(let h of t.condition){let m=await e.executeStatement(h);r+=m.stdout,n+=m.stderr,c=m.exitCode}}catch(h){if(h instanceof he){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;u=!0}else if(h instanceof pe){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(u)break;if(!f){if(c!==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=ft(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
|
|
632
|
+
`)}let l=e.state.groupStdin;a&&(e.state.groupStdin=a),e.state.loopDepth++;try{for(;;){o++,o>e.limits.maxLoopIterations&&Oe(`while loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,n);let c=0,u=!1,f=!1,d=e.state.inCondition;e.state.inCondition=!0;try{for(let h of t.condition){let m=await e.executeStatement(h);r+=m.stdout,n+=m.stderr,c=m.exitCode}}catch(h){if(h instanceof he){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;u=!0}else if(h instanceof pe){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(u)break;if(!f){if(c!==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=ft(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 C(r,n,m.exitCode??1);throw m.error}}}}finally{e.state.loopDepth--,e.state.groupStdin=l}return C(r,n,i)}async function Vn(e,t){let s="",r="",n=0,i=0;e.state.loopDepth++;try{for(;;){i++,i>e.limits.maxLoopIterations&&Oe(`until loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",s,r);let o=await rr(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=ft(a,s,r,e.state.loopDepth);if(s=l.stdout,r=l.stderr,l.action==="break")break;if(l.action==="continue")continue;if(l.action==="error")return C(s,r,l.exitCode??1);throw l.error}}}finally{e.state.loopDepth--}return C(s,r,n)}async function Bn(e,t){let s=await ke(e,t.redirections);if(s)return s;let r="",n="",i=0,o=await D(e,t.word),a=!1;for(let c=0;c<t.items.length;c++){let u=t.items[c],f=a;if(!a)for(let d of u.patterns){let h=await D(e,d);Pr(d)&&(h=Ar(h));let m=e.state.shoptOptions.nocasematch,p=e.state.shoptOptions.extglob;if(Ye(o,h,m,p)){f=!0;break}}if(f){let d=await Gt(e,u.body,r,n);if(r=d.stdout,n=d.stderr,i=d.exitCode,u.terminator===";;")break;u.terminator===";&"?a=!0:a=!1}else a=!1}let l=C(r,n,i);return U(e,l,t.redirections)}function nr(e,t){if(e.parts.length!==1)return!1;let s=e.parts[0];return s.type!=="Literal"?!1:t.includes(s.value)}function jn(e){if(!e.startsWith("__rw__:"))return null;let t=e.slice(7),s=t.indexOf(":");if(s===-1)return null;let r=Number.parseInt(t.slice(0,s),10);if(Number.isNaN(r)||r<0)return null;let n=s+1,i=t.slice(n,n+r),o=n+r+1,a=t.slice(o),l=a.indexOf(":");if(l===-1)return null;let c=Number.parseInt(a.slice(0,l),10);if(Number.isNaN(c)||c<0)return null;let u=a.slice(l+1);return{path:i,position:c,content:u}}var Hn="+ ";async function Un(e){let t=e.state.env.get("PS4");if(t===void 0)return Hn;if(t==="")return"";try{let r=new W().parseWordFromString(t,!1,!1);return await D(e,r)}catch{return e.state.expansionStderr=`${e.state.expansionStderr||""}bash: ${t}: bad substitution
|
|
633
633
|
`,t||Hn}}function Oo(e){return e.map(t=>To(t)).join(" ")}function To(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 c of e){let u=c.charCodeAt(0);c===`
|
|
635
635
|
`?l+="\\n":c===" "?l+="\\t":c==="\\"?l+="\\\\":c==="'"?l+="'":c==='"'?l+='"':u<32||u===127?u<256?l+=`\\x${u.toString(16).padStart(2,"0")}`:l+=`\\u${u.toString(16).padStart(4,"0")}`:l+=c}return`$'${l}'`}return o?`"${e.replace(/([\\$`"])/g,"\\$1")}"`:`'${e}'`}async function qn(e,t,s){if(!e.state.options.xtrace)return"";let r=await Un(e),n=[t,...s],i=Oo(n);return`${r}${i}
|
|
@@ -641,36 +641,36 @@ sys 0.00
|
|
|
641
641
|
real ${`${m}m${p.toFixed(3)}s`}
|
|
642
642
|
user 0m0.000s
|
|
643
643
|
sys 0m0.000s
|
|
644
|
-
`,i={...i,stderr:i.stderr+g}}return c&&!e.state.shoptOptions.lastpipe&&(e.state.lastArg=u),i}async function Kn(e,t){let s=new Map,r="";for(let n of t.assignments){let i=n.name;if(n.array){let u=await xo(e,t,i,n.array,n.append,s);if(u.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:u.error};if(r+=u.xtraceOutput,u.continueToNext)continue}let o=n.value?await D(e,n.value):"";if(i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[\]$/))return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:
|
|
645
|
-
`,1)};let l=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(l){let u=await Mo(e,t,l[1],l[2],o,n.append,s);if(u.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:u.error};if(u.continueToNext)continue}let c=await Wo(e,t,i,o,n.append,s);if(c.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:c.error};r+=c.xtraceOutput,c.continueToNext}return{continueToNext:!1,xtraceOutput:r,tempAssignments:s}}async function xo(e,t,s,r,n,i){let o="";if(/\[.+\]$/.test(s))return{continueToNext:!1,xtraceOutput:"",error:
|
|
646
|
-
`,1)};if(ye(e,s)){let u=Er(e,s);if(u===void 0||u==="")throw new z(1,"","");let f=Ie(e,s);if(f&&/^[a-zA-Z_][a-zA-Z0-9_]*\[@\]$/.test(f))return{continueToNext:!1,xtraceOutput:"",error:
|
|
644
|
+
`,i={...i,stderr:i.stderr+g}}return c&&!e.state.shoptOptions.lastpipe&&(e.state.lastArg=u),i}async function Kn(e,t){let s=new Map,r="";for(let n of t.assignments){let i=n.name;if(n.array){let u=await xo(e,t,i,n.array,n.append,s);if(u.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:u.error};if(r+=u.xtraceOutput,u.continueToNext)continue}let o=n.value?await D(e,n.value):"";if(i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[\]$/))return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:C("",`bash: ${i}: bad array subscript
|
|
645
|
+
`,1)};let l=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(l){let u=await Mo(e,t,l[1],l[2],o,n.append,s);if(u.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:u.error};if(u.continueToNext)continue}let c=await Wo(e,t,i,o,n.append,s);if(c.error)return{continueToNext:!1,xtraceOutput:r,tempAssignments:s,error:c.error};r+=c.xtraceOutput,c.continueToNext}return{continueToNext:!1,xtraceOutput:r,tempAssignments:s}}async function xo(e,t,s,r,n,i){let o="";if(/\[.+\]$/.test(s))return{continueToNext:!1,xtraceOutput:"",error:C("",`bash: ${s}: cannot assign list to array member
|
|
646
|
+
`,1)};if(ye(e,s)){let u=Er(e,s);if(u===void 0||u==="")throw new z(1,"","");let f=Ie(e,s);if(f&&/^[a-zA-Z_][a-zA-Z0-9_]*\[@\]$/.test(f))return{continueToNext:!1,xtraceOutput:"",error:C("",`bash: ${s}: cannot assign list to array member
|
|
647
647
|
`,1)}}if(ze(e,s)){if(t.name)return o+=`bash: ${s}: readonly variable
|
|
648
|
-
`,{continueToNext:!0,xtraceOutput:o};let u=Q(e,s);if(u)return{continueToNext:!1,xtraceOutput:"",error:u}}let a=e.state.associativeArrays?.has(s),l=Do(r),c=()=>{let u=`${s}_`;for(let f of e.state.env.keys())f.startsWith(u)&&!f.includes("__")&&e.state.env.delete(f);e.state.env.delete(s)};if(a&&l?await Io(e,t,s,r,n,c,u=>{o+=u}):l?await Ro(e,s,r,n,c):await Lo(e,s,r,n,c),t.name){i.set(s,e.state.env.get(s));let f=`(${r.map(d=>Et(d)).join(" ")})`;e.state.env.set(s,f)}return{continueToNext:!0,xtraceOutput:o}}function Do(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 Io(e,t,s,r,n,i,o){let a=[];for(let l of r){let c=ss(l);if(c){let{key:u,valueParts:f,append:d}=c,h;f.length>0?h=await D(e,{type:"Word",parts:f}):h="",h=
|
|
649
|
-
`)}}async function Ro(e,t,s,r,n){let i=[];for(let a of s){let l=ss(a);if(l){let{key:c,valueParts:u,append:f}=l,d;u.length>0?d=await D(e,{type:"Word",parts:u}):d="",d=
|
|
648
|
+
`,{continueToNext:!0,xtraceOutput:o};let u=Q(e,s);if(u)return{continueToNext:!1,xtraceOutput:"",error:u}}let a=e.state.associativeArrays?.has(s),l=Do(r),c=()=>{let u=`${s}_`;for(let f of e.state.env.keys())f.startsWith(u)&&!f.includes("__")&&e.state.env.delete(f);e.state.env.delete(s)};if(a&&l?await Io(e,t,s,r,n,c,u=>{o+=u}):l?await Ro(e,s,r,n,c):await Lo(e,s,r,n,c),t.name){i.set(s,e.state.env.get(s));let f=`(${r.map(d=>Et(d)).join(" ")})`;e.state.env.set(s,f)}return{continueToNext:!0,xtraceOutput:o}}function Do(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 Io(e,t,s,r,n,i,o){let a=[];for(let l of r){let c=ss(l);if(c){let{key:u,valueParts:f,append:d}=c,h;f.length>0?h=await D(e,{type:"Word",parts:f}):h="",h=q(e,h),a.push({type:"keyed",key:u,value:h,append:d})}else{let u=await D(e,l);a.push({type:"invalid",expandedValue:u})}}n||i();for(let l of a)if(l.type==="keyed")if(l.append){let c=e.state.env.get(`${s}_${l.key}`)??"";e.state.env.set(`${s}_${l.key}`,c+l.value)}else e.state.env.set(`${s}_${l.key}`,l.value);else{let c=t.line??e.state.currentLine??1;o(`bash: line ${c}: ${s}: ${l.expandedValue}: must use subscript when assigning associative array
|
|
649
|
+
`)}}async function Ro(e,t,s,r,n){let i=[];for(let a of s){let l=ss(a);if(l){let{key:c,valueParts:u,append:f}=l,d;u.length>0?d=await D(e,{type:"Word",parts:u}):d="",d=q(e,d),i.push({type:"keyed",indexExpr:c,value:d,append:f})}else{let c=await Pe(e,a);i.push({type:"non-keyed",values:c.values})}}r||n();let o=0;for(let a of i)if(a.type==="keyed"){let l;try{let c=new W,u=K(c,a.indexExpr);l=await V(e,u.expression,!1)}catch{if(/^-?\d+$/.test(a.indexExpr))l=Number.parseInt(a.indexExpr,10);else{let c=e.state.env.get(a.indexExpr);l=c?Number.parseInt(c,10):0,Number.isNaN(l)&&(l=0)}}if(a.append){let c=e.state.env.get(`${t}_${l}`)??"";e.state.env.set(`${t}_${l}`,c+a.value)}else e.state.env.set(`${t}_${l}`,a.value);o=l+1}else for(let l of a.values)e.state.env.set(`${t}_${o++}`,l)}async function Lo(e,t,s,r,n){let i=[];for(let a of s){let l=await Pe(e,a);i.push(...l.values)}let o=0;if(r){let a=Ee(e,t);if(a.length>0)o=Math.max(...a.map(([c])=>typeof c=="number"?c:0))+1;else{let l=e.state.env.get(t);l!==void 0&&(e.state.env.set(`${t}_0`,l),e.state.env.delete(t),o=1)}}else n();for(let a=0;a<i.length;a++)e.state.env.set(`${t}_${o+a}`,i[a]);r||e.state.env.set(`${t}__length`,String(i.length))}async function Mo(e,t,s,r,n,i,o){let a=s;if(ye(e,s)){let f=Ie(e,s);if(f&&f!==s){if(f.includes("["))return{continueToNext:!1,xtraceOutput:"",error:C("",`bash: \`${f}': not a valid identifier
|
|
650
650
|
`,1)};a=f}}if(ze(e,a)){if(t.name)return{continueToNext:!0,xtraceOutput:""};let f=Q(e,a);if(f)return{continueToNext:!1,xtraceOutput:"",error:f}}let l=e.state.associativeArrays?.has(a),c;if(l)c=await Xn(e,a,r);else{let f=await Fo(e,a,r);if(f.error)return{continueToNext:!1,xtraceOutput:"",error:f.error};c=`${a}_${f.index}`}let u=i?(e.state.env.get(c)||"")+n:n;if(t.name)o.set(c,e.state.env.get(c)),e.state.env.set(c,u);else{let f=Qe(e,a);if(f!==void 0&&f===e.state.callDepth&&e.state.localScopes.length>0){let d=e.state.localScopes[e.state.localScopes.length-1];d.has(c)||d.set(c,e.state.env.get(c))}e.state.env.set(c,u)}return{continueToNext:!0,xtraceOutput:""}}async function Xn(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 W().parseWordFromString(n,!0,!1);r=await D(e,o)}else if(s.includes("$")){let i=new W().parseWordFromString(s,!1,!1);r=await D(e,i)}else r=s;return`${t}_${r}`}async function Fo(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 W,o=K(i,r);n=await V(e,o.expression,!1)}catch(i){if(i instanceof We){let l=`bash: line ${e.state.currentLine}: ${s}: ${i.message}
|
|
651
|
-
`;if(i.fatal)throw new z(1,"",l);return{index:0,error:
|
|
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:
|
|
653
|
-
`,1)}}}return{index:n}}async function Wo(e,t,s,r,n,i){let o="",a=s,l=null;if(ye(e,s)){let f=Sr(e,s,r);if(f===void 0)return{continueToNext:!1,xtraceOutput:"",error:
|
|
651
|
+
`;if(i.fatal)throw new z(1,"",l);return{index:0,error:C("",l,1)}}let o=e.state.env.get(s);n=o?Number.parseInt(o,10):0}Number.isNaN(n)&&(n=0)}if(n<0){let i=Ee(e,t);if(i.length===0){let a=e.state.currentLine;return{index:0,error:C("",`bash: line ${a}: ${t}[${s}]: bad array subscript
|
|
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:C("",`bash: line ${a}: ${t}[${s}]: bad array subscript
|
|
653
|
+
`,1)}}}return{index:n}}async function Wo(e,t,s,r,n,i){let o="",a=s,l=null;if(ye(e,s)){let f=Sr(e,s,r);if(f===void 0)return{continueToNext:!1,xtraceOutput:"",error:C("",`bash: ${s}: circular name reference
|
|
654
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(ze(e,a)){if(t.name)return o+=`bash: ${a}: readonly variable
|
|
655
|
-
`,{continueToNext:!0,xtraceOutput:o};let f=Q(e,a);if(f)return{continueToNext:!1,xtraceOutput:"",error:f}}let c;if(lt(e,a))try{let f=new W;if(n){let h=`(${e.state.env.get(a)||"0"}) + (${r})`,m=K(f,h);c=String(await V(e,m.expression))}else{let d=K(f,r);c=String(await V(e,d.expression))}}catch{c="0"}else{let{isArray:f}=await import("./chunks/expansion-AMH5BAVV.js"),d=f(e,a)?`${a}_0`:a;c=n?(e.state.env.get(d)||"")+r:r}c=tt(e,a,c),o+=await Zn(e,a,c);let u=a;if(l)u=await zo(e,l);else{let{isArray:f}=await import("./chunks/expansion-AMH5BAVV.js");f(e,a)&&(u=`${a}_0`)}return t.name?(i.set(u,e.state.env.get(u)),e.state.env.set(u,c)):(e.state.env.set(u,c),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(a)),e.state.tempEnvBindings?.some(f=>f.has(a))&&(e.state.mutatedTempEnvVars=e.state.mutatedTempEnvVars||new Set,e.state.mutatedTempEnvVars.add(a))),{continueToNext:!1,xtraceOutput:o}}async function zo(e,t){let{arrayName:s,subscriptExpr:r}=t;if(e.state.associativeArrays?.has(s))return Xn(e,s,r);let i;if(/^-?\d+$/.test(r))i=Number.parseInt(r,10);else{try{let o=new W,a=K(o,r);i=await V(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=Ee(e,s);o.length>0&&(i=Math.max(...o.map(l=>l[0]))+1+i)}return`${s}_${i}`}async function Yn(e,t,s,r){let n=await ke(e,t.redirections);if(n)return n;let i=new Map(e.state.env),o=e.state.cwd,a={...e.state.options},l=new Map(e.state.functions),c=e.state.localScopes,u=e.state.localVarStack,f=e.state.localVarDepth,d=e.state.fullyUnsetLocals;if(e.state.localScopes=c.map($=>new Map($)),u){e.state.localVarStack=new Map;for(let[$,x]of u.entries())e.state.localVarStack.set($,x.map(N=>({...N})))}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,g=e.state.bashPid;e.state.bashPid=e.state.nextVirtualPid++;let S=e.state.groupStdin;s&&(e.state.groupStdin=s);let v="",A="",y=0,w=()=>{e.state.env=i,e.state.cwd=o,e.state.options=a,e.state.functions=l,e.state.localScopes=c,e.state.localVarStack=u,e.state.localVarDepth=f,e.state.fullyUnsetLocals=d,e.state.loopDepth=h,e.state.parentHasLoopContext=m,e.state.groupStdin=S,e.state.bashPid=g,e.state.lastArg=p};try{for(let $ of t.body){let x=await r($);v+=x.stdout,A+=x.stderr,y=x.exitCode}}catch($){if(w(),$ instanceof ie)throw $;if($ instanceof Te){v+=$.stdout,A+=$.stderr;let N=
|
|
656
|
-
`,1);return
|
|
655
|
+
`,{continueToNext:!0,xtraceOutput:o};let f=Q(e,a);if(f)return{continueToNext:!1,xtraceOutput:"",error:f}}let c;if(lt(e,a))try{let f=new W;if(n){let h=`(${e.state.env.get(a)||"0"}) + (${r})`,m=K(f,h);c=String(await V(e,m.expression))}else{let d=K(f,r);c=String(await V(e,d.expression))}}catch{c="0"}else{let{isArray:f}=await import("./chunks/expansion-AMH5BAVV.js"),d=f(e,a)?`${a}_0`:a;c=n?(e.state.env.get(d)||"")+r:r}c=tt(e,a,c),o+=await Zn(e,a,c);let u=a;if(l)u=await zo(e,l);else{let{isArray:f}=await import("./chunks/expansion-AMH5BAVV.js");f(e,a)&&(u=`${a}_0`)}return t.name?(i.set(u,e.state.env.get(u)),e.state.env.set(u,c)):(e.state.env.set(u,c),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(a)),e.state.tempEnvBindings?.some(f=>f.has(a))&&(e.state.mutatedTempEnvVars=e.state.mutatedTempEnvVars||new Set,e.state.mutatedTempEnvVars.add(a))),{continueToNext:!1,xtraceOutput:o}}async function zo(e,t){let{arrayName:s,subscriptExpr:r}=t;if(e.state.associativeArrays?.has(s))return Xn(e,s,r);let i;if(/^-?\d+$/.test(r))i=Number.parseInt(r,10);else{try{let o=new W,a=K(o,r);i=await V(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=Ee(e,s);o.length>0&&(i=Math.max(...o.map(l=>l[0]))+1+i)}return`${s}_${i}`}async function Yn(e,t,s,r){let n=await ke(e,t.redirections);if(n)return n;let i=new Map(e.state.env),o=e.state.cwd,a={...e.state.options},l=new Map(e.state.functions),c=e.state.localScopes,u=e.state.localVarStack,f=e.state.localVarDepth,d=e.state.fullyUnsetLocals;if(e.state.localScopes=c.map($=>new Map($)),u){e.state.localVarStack=new Map;for(let[$,x]of u.entries())e.state.localVarStack.set($,x.map(N=>({...N})))}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,g=e.state.bashPid;e.state.bashPid=e.state.nextVirtualPid++;let S=e.state.groupStdin;s&&(e.state.groupStdin=s);let v="",A="",y=0,w=()=>{e.state.env=i,e.state.cwd=o,e.state.options=a,e.state.functions=l,e.state.localScopes=c,e.state.localVarStack=u,e.state.localVarDepth=f,e.state.fullyUnsetLocals=d,e.state.loopDepth=h,e.state.parentHasLoopContext=m,e.state.groupStdin=S,e.state.bashPid=g,e.state.lastArg=p};try{for(let $ of t.body){let x=await r($);v+=x.stdout,A+=x.stderr,y=x.exitCode}}catch($){if(w(),$ instanceof ie)throw $;if($ instanceof Te){v+=$.stdout,A+=$.stderr;let N=C(v,A,0);return U(e,N,t.redirections)}if($ instanceof he||$ instanceof pe){v+=$.stdout,A+=$.stderr;let N=C(v,A,0);return U(e,N,t.redirections)}if($ instanceof z){v+=$.stdout,A+=$.stderr;let N=C(v,A,$.exitCode);return U(e,N,t.redirections)}if($ instanceof ue){v+=$.stdout,A+=$.stderr;let N=C(v,A,$.exitCode);return U(e,N,t.redirections)}if($ instanceof me){let N=C(v+$.stdout,A+$.stderr,$.exitCode);return U(e,N,t.redirections)}let x=C(v,`${A}${ve($)}
|
|
656
|
+
`,1);return U(e,x,t.redirections)}w();let b=C(v,A,y);return U(e,b,t.redirections)}async function Qn(e,t,s,r){let n="",i="",o=0,a=await zt(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 D(e,d.content);d.stripTabs&&(h=h.split(`
|
|
657
657
|
`).map(p=>p.replace(/^\t+/,"")).join(`
|
|
658
658
|
`));let m=f.fd??0;m!==0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(m,h)):l=h}else if(f.operator==="<<<"&&f.target.type==="Word")l=`${await D(e,f.target)}
|
|
659
|
-
`;else if(f.operator==="<"&&f.target.type==="Word")try{let d=await D(e,f.target),h=e.fs.resolvePath(e.state.cwd,d);l=await e.fs.readFile(h)}catch{let d=await D(e,f.target);return
|
|
660
|
-
`,1)}let c=e.state.groupStdin;l&&(e.state.groupStdin=l);try{for(let f of t.body){let d=await r(f);n+=d.stdout,i+=d.stderr,o=d.exitCode}}catch(f){if(e.state.groupStdin=c,f instanceof ie)throw f;if(bt(f)||f instanceof me||f instanceof z)throw f.prependOutput(n,i),f;return
|
|
661
|
-
`,1)}e.state.groupStdin=c;let u=
|
|
659
|
+
`;else if(f.operator==="<"&&f.target.type==="Word")try{let d=await D(e,f.target),h=e.fs.resolvePath(e.state.cwd,d);l=await e.fs.readFile(h)}catch{let d=await D(e,f.target);return C("",`bash: ${d}: No such file or directory
|
|
660
|
+
`,1)}let c=e.state.groupStdin;l&&(e.state.groupStdin=l);try{for(let f of t.body){let d=await r(f);n+=d.stdout,i+=d.stderr,o=d.exitCode}}catch(f){if(e.state.groupStdin=c,f instanceof ie)throw f;if(bt(f)||f instanceof me||f instanceof z)throw f.prependOutput(n,i),f;return C(n,`${i}${ve(f)}
|
|
661
|
+
`,1)}e.state.groupStdin=c;let u=C(n,i,o);return U(e,u,t.redirections)}async function Jn(e,t,s,r,n){let i;try{i=await e.fs.readFile(t)}catch{return _(`bash: ${t}: No such file or directory
|
|
662
662
|
`,127)}if(i.startsWith("#!")){let g=i.indexOf(`
|
|
663
663
|
`);g!==-1&&(i=i.slice(g+1))}let o=new Map(e.state.env),a=e.state.cwd,l={...e.state.options},c=e.state.loopDepth,u=e.state.parentHasLoopContext,f=e.state.lastArg,d=e.state.bashPid,h=e.state.groupStdin,m=e.state.currentSource;e.state.parentHasLoopContext=c>0,e.state.loopDepth=0,e.state.bashPid=e.state.nextVirtualPid++,r&&(e.state.groupStdin=r),e.state.currentSource=t,e.state.env.set("0",t),e.state.env.set("#",String(s.length)),e.state.env.set("@",s.join(" ")),e.state.env.set("*",s.join(" "));for(let g=0;g<s.length&&g<9;g++)e.state.env.set(String(g+1),s[g]);for(let g=s.length+1;g<=9;g++)e.state.env.delete(String(g));let p=()=>{e.state.env=o,e.state.cwd=a,e.state.options=l,e.state.loopDepth=c,e.state.parentHasLoopContext=u,e.state.lastArg=f,e.state.bashPid=d,e.state.groupStdin=h,e.state.currentSource=m};try{let S=new W().parse(i),v=await n(S);return p(),v}catch(g){if(p(),g instanceof z||g instanceof ie)throw g;if(g.name==="ParseException")return _(`bash: ${t}: ${g.message}
|
|
664
664
|
`);throw g}}var dt=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}}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){let s="",r="",n=0;for(let i of t.statements)try{let o=await this.executeStatement(i);s+=o.stdout,r+=o.stderr,n=o.exitCode,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n))}catch(o){if(o instanceof z)throw o.prependOutput(s,r),o;if(o instanceof we)return s+=o.stdout,r+=o.stderr,n=o.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(o instanceof ie)throw o;if(o instanceof me)return s+=o.stdout,r+=o.stderr,n=o.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(o instanceof ur)return s+=o.stdout,r+=o.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(o instanceof wt)return s+=o.stdout,r+=o.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(o instanceof We){s+=o.stdout,r+=o.stderr,n=1,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n));continue}if(o instanceof fr){s+=o.stdout,r+=o.stderr,n=1,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n));continue}if(o instanceof he||o instanceof pe){if(this.ctx.state.loopDepth>0)throw o.prependOutput(s,r),o;s+=o.stdout,r+=o.stderr;continue}throw o instanceof ue&&o.prependOutput(s,r),o}return{stdout:s,stderr:r,exitCode:n,env:xe(this.ctx.state.env)}}async executeUserScript(t,s,r=""){return Jn(this.ctx,t,s,r,n=>this.executeScript(n))}async executeStatement(t){if(this.ctx.state.commandCount++,this.ctx.state.commandCount>this.ctx.limits.maxCommandCount&&Oe(`too many commands executed (>${this.ctx.limits.maxCommandCount}), increase executionLimits.maxCommandCount`,"commands"),t.deferredError)throw new $t(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 c=0;c<t.pipelines.length;c++){let u=t.pipelines[c],f=c>0?t.operators[c-1]:null;if(f==="&&"&&n!==0||f==="||"&&n===0)continue;let d=await this.executePipeline(u);s+=d.stdout,r+=d.stderr,n=d.exitCode,i=c,o=u.negated,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n))}let a=i<t.pipelines.length-1,l=this.ctx.state.errexitSafe;if(this.ctx.state.errexitSafe=a||o||l,this.ctx.state.options.errexit&&n!==0&&i===t.pipelines.length-1&&!o&&!this.ctx.state.inCondition&&!l)throw new me(n,s,r);return
|
|
665
|
+
`);let n=0,i=-1,o=!1;for(let c=0;c<t.pipelines.length;c++){let u=t.pipelines[c],f=c>0?t.operators[c-1]:null;if(f==="&&"&&n!==0||f==="||"&&n===0)continue;let d=await this.executePipeline(u);s+=d.stdout,r+=d.stderr,n=d.exitCode,i=c,o=u.negated,this.ctx.state.lastExitCode=n,this.ctx.state.env.set("?",String(n))}let a=i<t.pipelines.length-1,l=this.ctx.state.errexitSafe;if(this.ctx.state.errexitSafe=a||o||l,this.ctx.state.options.errexit&&n!==0&&i===t.pipelines.length-1&&!o&&!this.ctx.state.inCondition&&!l)throw new me(n,s,r);return C(s,r,n)}async executePipeline(t){return Gn(this.ctx,t,(s,r)=>this.executeCommand(s,r))}async executeCommand(t,s){switch(this.ctx.coverage?.hit(`bash:cmd:${t.type}`),t.type){case"SimpleCommand":return this.executeSimpleCommand(t,s);case"If":return Mn(this.ctx,t);case"For":return Fn(this.ctx,t);case"CStyleFor":return Wn(this.ctx,t);case"While":return zn(this.ctx,t,s);case"Until":return Vn(this.ctx,t);case"Case":return Bn(this.ctx,t);case"Subshell":return this.executeSubshell(t,s);case"Group":return this.executeGroup(t,s);case"FunctionDef":return nn(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 vt)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 y=t,w=100;for(;w>0;){let b=this.expandAlias(y);if(b===y)break;y=b,w--}this.aliasExpansionStack.clear(),y!==t&&(t=y)}this.ctx.state.expansionStderr="";let r=await Kn(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 ke(this.ctx,t.redirections);if(w)return w;let b=C("",i,0);return U(this.ctx,b,t.redirections)}this.ctx.state.lastArg="";let y=(this.ctx.state.expansionStderr||"")+i;return this.ctx.state.expansionStderr="",C("",y,this.ctx.state.lastExitCode)}let o=t.name&&nr(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 y of a)this.ctx.state.tempExportedVars.add(y)}let l=await zt(this.ctx,t.redirections);if(l){for(let[y,w]of n)w===void 0?this.ctx.state.env.delete(y):this.ctx.state.env.set(y,w);return l}let c=-1;for(let y of t.redirections){if((y.operator==="<<"||y.operator==="<<-")&&y.target.type==="HereDoc"){let w=y.target,b=await D(this.ctx,w.content);w.stripTabs&&(b=b.split(`
|
|
666
666
|
`).map(x=>x.replace(/^\t+/,"")).join(`
|
|
667
667
|
`));let $=y.fd??0;$!==0?(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),this.ctx.state.fileDescriptors.set($,b)):s=b;continue}if(y.operator==="<<<"&&y.target.type==="Word"){s=`${await D(this.ctx,y.target)}
|
|
668
668
|
`;continue}if(y.operator==="<"&&y.target.type==="Word")try{let w=await D(this.ctx,y.target),b=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);s=await this.ctx.fs.readFile(b)}catch{let w=await D(this.ctx,y.target);for(let[b,$]of n)$===void 0?this.ctx.state.env.delete(b):this.ctx.state.env.set(b,$);return _(`bash: ${w}: No such file or directory
|
|
669
|
-
`)}if(y.operator==="<&"&&y.target.type==="Word"){let w=await D(this.ctx,y.target),b=Number.parseInt(w,10);if(!Number.isNaN(b)&&this.ctx.state.fileDescriptors){let $=this.ctx.state.fileDescriptors.get(b);if($!==void 0)if($.startsWith("__rw__:")){let x=jn($);x&&(s=x.content.slice(x.position),c=b)}else $.startsWith("__file__:")||$.startsWith("__file_append__:")||(s=$)}}}let u=await D(this.ctx,t.name),f=[],d=[];if(nr(t.name,["local","declare","typeset","export","readonly"])&&(u==="local"||u==="declare"||u==="typeset"||u==="export"||u==="readonly"))for(let y of t.args){let w=await Vr(this.ctx,y);if(w)f.push(w),d.push(!0);else{let b=await Br(this.ctx,y);if(b!==null)f.push(b),d.push(!0);else{let $=await
|
|
669
|
+
`)}if(y.operator==="<&"&&y.target.type==="Word"){let w=await D(this.ctx,y.target),b=Number.parseInt(w,10);if(!Number.isNaN(b)&&this.ctx.state.fileDescriptors){let $=this.ctx.state.fileDescriptors.get(b);if($!==void 0)if($.startsWith("__rw__:")){let x=jn($);x&&(s=x.content.slice(x.position),c=b)}else $.startsWith("__file__:")||$.startsWith("__file_append__:")||(s=$)}}}let u=await D(this.ctx,t.name),f=[],d=[];if(nr(t.name,["local","declare","typeset","export","readonly"])&&(u==="local"||u==="declare"||u==="typeset"||u==="export"||u==="readonly"))for(let y of t.args){let w=await Vr(this.ctx,y);if(w)f.push(w),d.push(!0);else{let b=await Br(this.ctx,y);if(b!==null)f.push(b),d.push(!0);else{let $=await Pe(this.ctx,y);for(let x of $.values)f.push(x),d.push($.quoted)}}}else for(let y of t.args){let w=await Pe(this.ctx,y);for(let b of w.values)f.push(b),d.push(w.quoted)}if(!u){if(t.name.parts.every(w=>w.type==="CommandSubstitution"||w.type==="ParameterExpansion"||w.type==="ArithmeticExpansion")){if(f.length>0){let w=f.shift();return d.shift(),await this.runCommand(w,f,d,s,!1,!1,c)}return C("","",this.ctx.state.lastExitCode)}return _(`bash: : command not found
|
|
670
670
|
`,127)}if(u==="exec"&&(f.length===0||f[0]==="--")){for(let y of t.redirections){if(y.target.type==="HereDoc"||y.fdVariable)continue;let w=await D(this.ctx,y.target),b=y.fd??(y.operator==="<"||y.operator==="<>"?0:1);switch(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),y.operator){case">":case">|":{let $=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);await this.ctx.fs.writeFile($,"","utf8"),this.ctx.state.fileDescriptors.set(b,`__file__:${$}`);break}case">>":{let $=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);this.ctx.state.fileDescriptors.set(b,`__file_append__:${$}`);break}case"<":{let $=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);try{let x=await this.ctx.fs.readFile($);this.ctx.state.fileDescriptors.set(b,x)}catch{return _(`bash: ${w}: No such file or directory
|
|
671
|
-
`)}break}case"<>":{let $=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);try{let x=await this.ctx.fs.readFile($);this.ctx.state.fileDescriptors.set(b,`__rw__:${$.length}:${$}:0:${x}`)}catch{await this.ctx.fs.writeFile($,"","utf8"),this.ctx.state.fileDescriptors.set(b,`__rw__:${$.length}:${$}:0:`)}break}case">&":{if(w==="-")this.ctx.state.fileDescriptors.delete(b);else if(w.endsWith("-")){let $=w.slice(0,-1),x=Number.parseInt($,10);if(!Number.isNaN(x)){let N=this.ctx.state.fileDescriptors.get(x);N!==void 0?this.ctx.state.fileDescriptors.set(b,N):this.ctx.state.fileDescriptors.set(b,`__dupout__:${x}`),this.ctx.state.fileDescriptors.delete(x)}}else{let $=Number.parseInt(w,10);Number.isNaN($)||this.ctx.state.fileDescriptors.set(b,`__dupout__:${$}`)}break}case"<&":{if(w==="-")this.ctx.state.fileDescriptors.delete(b);else if(w.endsWith("-")){let $=w.slice(0,-1),x=Number.parseInt($,10);if(!Number.isNaN(x)){let N=this.ctx.state.fileDescriptors.get(x);N!==void 0?this.ctx.state.fileDescriptors.set(b,N):this.ctx.state.fileDescriptors.set(b,`__dupin__:${x}`),this.ctx.state.fileDescriptors.delete(x)}}else{let $=Number.parseInt(w,10);Number.isNaN($)||this.ctx.state.fileDescriptors.set(b,`__dupin__:${$}`)}break}}}for(let[y,w]of n)w===void 0?this.ctx.state.env.delete(y):this.ctx.state.env.set(y,w);if(this.ctx.state.tempExportedVars)for(let y of n.keys())this.ctx.state.tempExportedVars.delete(y);return L}let m=await qn(this.ctx,u,f);n.size>0&&(this.ctx.state.tempEnvBindings=this.ctx.state.tempEnvBindings||[],this.ctx.state.tempEnvBindings.push(new Map(n)));let p,g=null;try{p=await this.runCommand(u,f,d,s,!1,!1,c)}catch(y){if(y instanceof he||y instanceof pe)g=y,p=L;else throw y}let S=i+m;if(S&&(p={...p,stderr:S+p.stderr}),p=await
|
|
672
|
-
`);return
|
|
673
|
-
`,n);return
|
|
671
|
+
`)}break}case"<>":{let $=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);try{let x=await this.ctx.fs.readFile($);this.ctx.state.fileDescriptors.set(b,`__rw__:${$.length}:${$}:0:${x}`)}catch{await this.ctx.fs.writeFile($,"","utf8"),this.ctx.state.fileDescriptors.set(b,`__rw__:${$.length}:${$}:0:`)}break}case">&":{if(w==="-")this.ctx.state.fileDescriptors.delete(b);else if(w.endsWith("-")){let $=w.slice(0,-1),x=Number.parseInt($,10);if(!Number.isNaN(x)){let N=this.ctx.state.fileDescriptors.get(x);N!==void 0?this.ctx.state.fileDescriptors.set(b,N):this.ctx.state.fileDescriptors.set(b,`__dupout__:${x}`),this.ctx.state.fileDescriptors.delete(x)}}else{let $=Number.parseInt(w,10);Number.isNaN($)||this.ctx.state.fileDescriptors.set(b,`__dupout__:${$}`)}break}case"<&":{if(w==="-")this.ctx.state.fileDescriptors.delete(b);else if(w.endsWith("-")){let $=w.slice(0,-1),x=Number.parseInt($,10);if(!Number.isNaN(x)){let N=this.ctx.state.fileDescriptors.get(x);N!==void 0?this.ctx.state.fileDescriptors.set(b,N):this.ctx.state.fileDescriptors.set(b,`__dupin__:${x}`),this.ctx.state.fileDescriptors.delete(x)}}else{let $=Number.parseInt(w,10);Number.isNaN($)||this.ctx.state.fileDescriptors.set(b,`__dupin__:${$}`)}break}}}for(let[y,w]of n)w===void 0?this.ctx.state.env.delete(y):this.ctx.state.env.set(y,w);if(this.ctx.state.tempExportedVars)for(let y of n.keys())this.ctx.state.tempExportedVars.delete(y);return L}let m=await qn(this.ctx,u,f);n.size>0&&(this.ctx.state.tempEnvBindings=this.ctx.state.tempEnvBindings||[],this.ctx.state.tempEnvBindings.push(new Map(n)));let p,g=null;try{p=await this.runCommand(u,f,d,s,!1,!1,c)}catch(y){if(y instanceof he||y instanceof pe)g=y,p=L;else throw y}let S=i+m;if(S&&(p={...p,stderr:S+p.stderr}),p=await U(this.ctx,p,t.redirections),g)throw g;if(f.length>0){let y=f[f.length-1];if((u==="declare"||u==="local"||u==="typeset")&&/^[a-zA-Z_][a-zA-Z0-9_]*=\(/.test(y)){let w=y.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);w&&(y=w[1])}this.ctx.state.lastArg=y}else this.ctx.state.lastArg=u;let v=sn(u)&&u!=="unset"&&u!=="eval";if(!this.ctx.state.options.posix||!v)for(let[y,w]of n)this.ctx.state.fullyUnsetLocals?.has(y)||(w===void 0?this.ctx.state.env.delete(y):this.ctx.state.env.set(y,w));if(this.ctx.state.tempExportedVars)for(let y of n.keys())this.ctx.state.tempExportedVars.delete(y);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:(u,f,d,h,m,p,g)=>this.runCommand(u,f,d,h,m,p,g),buildExportedEnv:()=>this.buildExportedEnv(),executeUserScript:(u,f,d)=>this.executeUserScript(u,f,d)},c=await Rn(l,t,s,r,n,i,o,a);return c!==null?c:Ln(l,t,s,n,o)}aliasExpansionStack=new Set;expandAlias(t){return hs(this.ctx.state,t,this.aliasExpansionStack)}async findCommandInPath(t){return Zt(this.ctx,t)}async executeSubshell(t,s=""){return Yn(this.ctx,t,s,r=>this.executeStatement(r))}async executeGroup(t,s=""){return Qn(this.ctx,t,s,r=>this.executeStatement(r))}async executeArithmeticCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await ke(this.ctx,t.redirections);if(s)return s;try{let r=await V(this.ctx,t.expression.expression),n=G(r!==0);return this.ctx.state.expansionStderr&&(n={...n,stderr:this.ctx.state.expansionStderr+n.stderr},this.ctx.state.expansionStderr=""),U(this.ctx,n,t.redirections)}catch(r){let n=_(`bash: arithmetic expression: ${r.message}
|
|
672
|
+
`);return U(this.ctx,n,t.redirections)}}async executeConditionalCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await ke(this.ctx,t.redirections);if(s)return s;try{let r=await Le(this.ctx,t.expression),n=G(r);return this.ctx.state.expansionStderr&&(n={...n,stderr:this.ctx.state.expansionStderr+n.stderr},this.ctx.state.expansionStderr=""),U(this.ctx,n,t.redirections)}catch(r){let n=r instanceof We?1:2,i=_(`bash: conditional expression: ${r.message}
|
|
673
|
+
`,n);return U(this.ctx,i,t.redirections)}}};var le={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};function ei(e){return e?{maxCallDepth:e.maxCallDepth??le.maxCallDepth,maxCommandCount:e.maxCommandCount??le.maxCommandCount,maxLoopIterations:e.maxLoopIterations??le.maxLoopIterations,maxAwkIterations:e.maxAwkIterations??le.maxAwkIterations,maxSedIterations:e.maxSedIterations??le.maxSedIterations,maxJqIterations:e.maxJqIterations??le.maxJqIterations,maxSqliteTimeoutMs:e.maxSqliteTimeoutMs??le.maxSqliteTimeoutMs,maxPythonTimeoutMs:e.maxPythonTimeoutMs??le.maxPythonTimeoutMs,maxGlobOperations:e.maxGlobOperations??le.maxGlobOperations,maxStringLength:e.maxStringLength??le.maxStringLength,maxArrayElements:e.maxArrayElements??le.maxArrayElements,maxHeredocSize:e.maxHeredocSize??le.maxHeredocSize,maxSubstitutionDepth:e.maxSubstitutionDepth??le.maxSubstitutionDepth,maxBraceExpansionResults:e.maxBraceExpansionResults??le.maxBraceExpansionResults}:{...le}}function ti(e){try{let t=new URL(e);return{origin:t.origin,pathname:t.pathname,href:t.href}}catch{return null}}function Vo(e){let t=ti(e);return t?{origin:t.origin,pathPrefix:t.pathname}:null}function Bo(e,t){let s=ti(e);if(!s)return!1;let r=Vo(t);return!r||s.origin!==r.origin?!1:r.pathPrefix==="/"||r.pathPrefix===""?!0:s.pathname.startsWith(r.pathPrefix)}function ir(e,t){return!t||t.length===0?!1:t.some(s=>Bo(e,s))}var ht=class extends Error{constructor(t){super(`Network access denied: URL not in allow-list: ${t}`),this.name="NetworkAccessDeniedError"}},pt=class extends Error{constructor(t){super(`Too many redirects (max: ${t})`),this.name="TooManyRedirectsError"}},mt=class extends Error{constructor(t){super(`Redirect target not in allow-list: ${t}`),this.name="RedirectNotAllowedError"}},Kt=class extends Error{constructor(t,s){super(`HTTP method '${t}' not allowed. Allowed methods: ${s.join(", ")}`),this.name="MethodNotAllowedError"}},yt=class extends Error{constructor(t){super(`Response body too large (max: ${t} bytes)`),this.name="ResponseTooLargeError"}};var jo=20,Ho=3e4,Uo=10485760,qo=["GET","HEAD"],Zo=new Set(["GET","HEAD","OPTIONS"]),Go=new Set([301,302,303,307,308]);function or(e){let t=e.maxRedirects??jo,s=e.timeoutMs??Ho,r=e.maxResponseSize??Uo,n=e.dangerouslyAllowFullInternetAccess?["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"]:e.allowedMethods??qo;function i(l){if(!e.dangerouslyAllowFullInternetAccess&&!ir(l,e.allowedUrlPrefixes??[]))throw new ht(l)}function o(l){if(e.dangerouslyAllowFullInternetAccess)return;let c=l.toUpperCase();if(!n.includes(c))throw new Kt(c,n)}async function a(l,c={}){let u=c.method?.toUpperCase()??"GET";i(l),o(u);let f=l,d=0,h=c.followRedirects??!0,m=c.timeoutMs!==void 0?Math.min(c.timeoutMs,s):s;for(;;){let p=new AbortController,g=setTimeout(()=>p.abort(),m);try{let S={method:u,headers:c.headers,signal:p.signal,redirect:"manual"};c.body&&!Zo.has(u)&&(S.body=c.body);let v=await fetch(f,S);if(Go.has(v.status)&&h){let A=v.headers.get("location");if(!A)return await si(v,f,r);let y=new URL(A,f).href;if(!e.dangerouslyAllowFullInternetAccess&&!ir(y,e.allowedUrlPrefixes??[]))throw new mt(y);if(d++,d>t)throw new pt(t);f=y;continue}return await si(v,f,r)}finally{clearTimeout(g)}}}return a}async function si(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 yt(s)}}let n;if(s>0&&e.body){let i=e.body.getReader(),o=new TextDecoder,a=[],l=0;for(;;){let{done:c,value:u}=await i.read();if(c)break;if(l+=u.byteLength,l>s)throw i.cancel(),new yt(s);a.push(o.decode(u,{stream:!0}))}a.push(o.decode()),n=a.join("")}else n=await e.text();return{status:e.status,statusText:e.statusText,headers:r,body:n,url:t}}function ri(){let e=[{prop:"Function",target:globalThis,violationType:"function_constructor",strategy:"throw",reason:"Function constructor allows arbitrary code execution"},{prop:"eval",target:globalThis,violationType:"eval",strategy:"throw",reason:"eval() allows arbitrary code execution"},{prop:"setTimeout",target:globalThis,violationType:"setTimeout",strategy:"throw",reason:"setTimeout with string argument allows code execution"},{prop:"setInterval",target:globalThis,violationType:"setInterval",strategy:"throw",reason:"setInterval with string argument allows code execution"},{prop:"setImmediate",target:globalThis,violationType:"setImmediate",strategy:"throw",reason:"setImmediate could be used to escape sandbox context"},{prop:"env",target:process,violationType:"process_env",strategy:"throw",reason:"process.env could leak sensitive environment variables"},{prop:"binding",target:process,violationType:"process_binding",strategy:"throw",reason:"process.binding provides access to native Node.js modules"},{prop:"_linkedBinding",target:process,violationType:"process_binding",strategy:"throw",reason:"process._linkedBinding provides access to native Node.js modules"},{prop:"dlopen",target:process,violationType:"process_dlopen",strategy:"throw",reason:"process.dlopen allows loading native addons"},{prop:"getBuiltinModule",target:process,violationType:"process_get_builtin_module",strategy:"throw",reason:"process.getBuiltinModule allows loading native Node.js modules (fs, child_process, vm)"},{prop:"exit",target:process,violationType:"process_exit",strategy:"throw",reason:"process.exit could terminate the interpreter"},{prop:"abort",target:process,violationType:"process_exit",strategy:"throw",reason:"process.abort could crash the interpreter"},{prop:"kill",target:process,violationType:"process_kill",strategy:"throw",reason:"process.kill could signal other processes"},{prop:"setuid",target:process,violationType:"process_setuid",strategy:"throw",reason:"process.setuid could escalate privileges"},{prop:"setgid",target:process,violationType:"process_setuid",strategy:"throw",reason:"process.setgid could escalate privileges"},{prop:"umask",target:process,violationType:"process_umask",strategy:"throw",reason:"process.umask could modify file creation permissions"},{prop:"argv",target:process,violationType:"process_argv",strategy:"throw",reason:"process.argv may contain secrets in CLI arguments"},{prop:"chdir",target:process,violationType:"process_chdir",strategy:"throw",reason:"process.chdir could confuse the interpreter's CWD tracking"},{prop:"send",target:process,violationType:"process_send",strategy:"throw",reason:"process.send could communicate with parent process in IPC contexts"},{prop:"channel",target:process,violationType:"process_channel",strategy:"throw",reason:"process.channel could access IPC channel to parent process"},{prop:"cpuUsage",target:process,violationType:"process_timing",strategy:"throw",reason:"process.cpuUsage could enable timing side-channel attacks"},{prop:"memoryUsage",target:process,violationType:"process_timing",strategy:"throw",reason:"process.memoryUsage could enable timing side-channel attacks"},{prop:"hrtime",target:process,violationType:"process_timing",strategy:"throw",reason:"process.hrtime could enable timing side-channel attacks"},{prop:"WeakRef",target:globalThis,violationType:"weak_ref",strategy:"throw",reason:"WeakRef could be used to leak references outside sandbox"},{prop:"FinalizationRegistry",target:globalThis,violationType:"finalization_registry",strategy:"throw",reason:"FinalizationRegistry could be used to leak references outside sandbox"},{prop:"Reflect",target:globalThis,violationType:"reflect",strategy:"freeze",reason:"Reflect provides introspection capabilities"},{prop:"Proxy",target:globalThis,violationType:"proxy",strategy:"throw",reason:"Proxy allows intercepting and modifying object behavior"},{prop:"WebAssembly",target:globalThis,violationType:"webassembly",strategy:"throw",reason:"WebAssembly allows executing arbitrary compiled code"},{prop:"SharedArrayBuffer",target:globalThis,violationType:"shared_array_buffer",strategy:"throw",reason:"SharedArrayBuffer could enable side-channel communication or timing attacks"},{prop:"Atomics",target:globalThis,violationType:"atomics",strategy:"throw",reason:"Atomics could enable side-channel communication or timing attacks"}];try{let t=Object.getPrototypeOf(async()=>{}).constructor;t&&t!==Function&&e.push({prop:"constructor",target:Object.getPrototypeOf(async()=>{}),violationType:"async_function_constructor",strategy:"throw",reason:"AsyncFunction constructor allows arbitrary async code execution"})}catch{}try{let t=Object.getPrototypeOf(function*(){}).constructor;t&&t!==Function&&e.push({prop:"constructor",target:Object.getPrototypeOf(function*(){}),violationType:"generator_function_constructor",strategy:"throw",reason:"GeneratorFunction constructor allows arbitrary generator code execution"})}catch{}try{let t=Object.getPrototypeOf(async function*(){}).constructor;t&&t!==Function&&t!==Object.getPrototypeOf(async()=>{}).constructor&&e.push({prop:"constructor",target:Object.getPrototypeOf(async function*(){}),violationType:"async_generator_function_constructor",strategy:"throw",reason:"AsyncGeneratorFunction constructor allows arbitrary async generator code execution"})}catch{}return e.filter(t=>{try{return t.target[t.prop]!==void 0}catch{return!1}})}import{AsyncLocalStorage as Ko}from"node:async_hooks";var st=typeof __BROWSER__<"u"&&__BROWSER__;function ni(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}var lr=null;st||(lr=Ko);var Xo=`
|
|
674
674
|
|
|
675
675
|
This is a defense-in-depth measure and indicates a bug in just-bash. Please report this at security@vercel.com`,re=class extends Error{violation;constructor(t,s){super(t+Xo),this.violation=s,this.name="SecurityViolationError"}},ae=!st&&lr?new lr:null,Yo=1e3,ar={enabled:!0,auditMode:!1};function Qo(e){return e===void 0?{...ar,enabled:!1}:typeof e=="boolean"?{...ar,enabled:e}:{...ar,...e}}var Xt=class e{static instance=null;config;refCount=0;originalDescriptors=[];violations=[];activationTime=0;totalActiveTimeMs=0;constructor(t){this.config=t}static getInstance(t){return e.instance||(e.instance=new e(Qo(t))),e.instance}static resetInstance(){e.instance&&(e.instance.forceDeactivate(),e.instance=null)}static isInSandboxedContext(){return ae?ae?.getStore()?.sandboxActive===!0:!1}static getCurrentExecutionId(){if(ae)return ae?.getStore()?.executionId}isEnabled(){return this.config.enabled===!0&&ae!==null&&!st}updateConfig(t){this.config={...this.config,...t}}activate(){if(st||!this.config.enabled){let s=ni();return{run:r=>r(),deactivate:()=>{},executionId:s}}this.refCount++,this.refCount===1&&(this.applyPatches(),this.activationTime=Date.now());let t=ni();return{run:s=>ae.run({sandboxActive:!0,executionId:t},s),deactivate:()=>{this.refCount--,this.refCount===0&&(this.restorePatches(),this.totalActiveTimeMs+=Date.now()-this.activationTime),this.refCount<0&&(this.refCount=0)},executionId:t}}forceDeactivate(){this.refCount>0&&(this.restorePatches(),this.totalActiveTimeMs+=Date.now()-this.activationTime),this.refCount=0}isActive(){return this.refCount>0}getStats(){return{violationsBlocked:this.violations.length,violations:[...this.violations],activeTimeMs:this.totalActiveTimeMs+(this.refCount>0?Date.now()-this.activationTime:0),refCount:this.refCount}}clearViolations(){this.violations=[]}getPathForTarget(t,s){return t===globalThis?`globalThis.${s}`:t===process?`process.${s}`:t===Error?`Error.${s}`:t===Function.prototype?`Function.prototype.${s}`:t===Object.prototype?`Object.prototype.${s}`:`<object>.${s}`}shouldBlock(){return st||this.config.auditMode||!ae?!1:ae?.getStore()?.sandboxActive===!0}recordViolation(t,s,r){let n={timestamp:Date.now(),type:t,message:r,path:s,stack:new Error().stack,executionId:ae?.getStore()?.executionId};if(this.violations.length<Yo&&this.violations.push(n),this.config.onViolation)try{this.config.onViolation(n)}catch(i){console.debug("[DefenseInDepthBox] onViolation callback threw:",i instanceof Error?i.message:i)}return n}createBlockingProxy(t,s,r){let n=this;return new Proxy(t,{apply(i,o,a){if(n.shouldBlock()){let l=`${s} is blocked during script execution`,c=n.recordViolation(r,s,l);throw new re(l,c)}return n.config.auditMode&&ae?.getStore()?.sandboxActive===!0&&n.recordViolation(r,s,`${s} called (audit mode)`),Reflect.apply(i,o,a)},construct(i,o,a){if(n.shouldBlock()){let l=`${s} constructor is blocked during script execution`,c=n.recordViolation(r,s,l);throw new re(l,c)}return n.config.auditMode&&ae?.getStore()?.sandboxActive===!0&&n.recordViolation(r,s,`${s} constructor called (audit mode)`),Reflect.construct(i,o,a)}})}createBlockingObjectProxy(t,s,r){let n=this;return new Proxy(t,{get(i,o,a){if(n.shouldBlock()){let l=`${s}.${String(o)}`,c=`${l} is blocked during script execution`,u=n.recordViolation(r,l,c);throw new re(c,u)}if(n.config.auditMode&&ae?.getStore()?.sandboxActive===!0){let l=`${s}.${String(o)}`;n.recordViolation(r,l,`${l} accessed (audit mode)`)}return Reflect.get(i,o,a)},set(i,o,a,l){if(n.shouldBlock()){let c=`${s}.${String(o)}`,u=`${c} modification is blocked during script execution`,f=n.recordViolation(r,c,u);throw new re(u,f)}return Reflect.set(i,o,a,l)},ownKeys(i){if(n.shouldBlock()){let o=`${s} enumeration is blocked during script execution`,a=n.recordViolation(r,s,o);throw new re(o,a)}return Reflect.ownKeys(i)},getOwnPropertyDescriptor(i,o){if(n.shouldBlock()){let a=`${s}.${String(o)}`,l=`${a} descriptor access is blocked during script execution`,c=n.recordViolation(r,a,l);throw new re(l,c)}return Reflect.getOwnPropertyDescriptor(i,o)},has(i,o){if(n.shouldBlock()){let a=`${s}.${String(o)}`,l=`${a} existence check is blocked during script execution`,c=n.recordViolation(r,a,l);throw new re(l,c)}return Reflect.has(i,o)}})}applyPatches(){let t=ri(),s=new Set(["process_send","process_channel"]);for(let r of t)s.has(r.violationType)||this.applyPatch(r);this.protectConstructorChain(),this.protectErrorPrepareStackTrace(),this.protectModuleLoad(),this.protectProcessMainModule(),this.protectProcessExecPath()}protectConstructorChain(){this.patchPrototypeConstructor(Function.prototype,"Function.prototype.constructor","function_constructor");try{let t=Object.getPrototypeOf(async()=>{}).constructor;t&&t!==Function&&this.patchPrototypeConstructor(t.prototype,"AsyncFunction.prototype.constructor","async_function_constructor")}catch(t){console.debug("[DefenseInDepthBox] Could not patch AsyncFunction.prototype.constructor:",t instanceof Error?t.message:t)}try{let t=Object.getPrototypeOf(function*(){}).constructor;t&&t!==Function&&this.patchPrototypeConstructor(t.prototype,"GeneratorFunction.prototype.constructor","generator_function_constructor")}catch(t){console.debug("[DefenseInDepthBox] Could not patch GeneratorFunction.prototype.constructor:",t instanceof Error?t.message:t)}try{let t=Object.getPrototypeOf(async function*(){}).constructor,s=Object.getPrototypeOf(async()=>{}).constructor;t&&t!==Function&&t!==s&&this.patchPrototypeConstructor(t.prototype,"AsyncGeneratorFunction.prototype.constructor","async_generator_function_constructor")}catch(t){console.debug("[DefenseInDepthBox] Could not patch AsyncGeneratorFunction.prototype.constructor:",t instanceof Error?t.message:t)}}protectErrorPrepareStackTrace(){let t=this;try{let s=Object.getOwnPropertyDescriptor(Error,"prepareStackTrace");this.originalDescriptors.push({target:Error,prop:"prepareStackTrace",descriptor:s});let r=s?.value;Object.defineProperty(Error,"prepareStackTrace",{get(){return r},set(n){if(t.shouldBlock()){let i="Error.prepareStackTrace modification is blocked during script execution",o=t.recordViolation("error_prepare_stack_trace","Error.prepareStackTrace",i);throw new re(i,o)}t.config.auditMode&&ae?.getStore()?.sandboxActive===!0&&t.recordViolation("error_prepare_stack_trace","Error.prepareStackTrace","Error.prepareStackTrace set (audit mode)"),r=n},configurable:!0})}catch(s){console.debug("[DefenseInDepthBox] Could not protect Error.prepareStackTrace:",s instanceof Error?s.message:s)}}patchPrototypeConstructor(t,s,r){let n=this;try{let i=Object.getOwnPropertyDescriptor(t,"constructor");this.originalDescriptors.push({target:t,prop:"constructor",descriptor:i});let o=i?.value;Object.defineProperty(t,"constructor",{get(){if(n.shouldBlock()){let a=`${s} access is blocked during script execution`,l=n.recordViolation(r,s,a);throw new re(a,l)}return n.config.auditMode&&ae?.getStore()?.sandboxActive===!0&&n.recordViolation(r,s,`${s} accessed (audit mode)`),o},set(a){if(n.shouldBlock()){let l=`${s} modification is blocked during script execution`,c=n.recordViolation(r,s,l);throw new re(l,c)}Object.defineProperty(this,"constructor",{value:a,writable:!0,configurable:!0})},configurable:!0})}catch(i){console.debug(`[DefenseInDepthBox] Could not patch ${s}:`,i instanceof Error?i.message:i)}}protectProcessMainModule(){if(typeof process>"u")return;let t=this;try{let s=Object.getOwnPropertyDescriptor(process,"mainModule");this.originalDescriptors.push({target:process,prop:"mainModule",descriptor:s});let r=s?.value;r!==void 0&&Object.defineProperty(process,"mainModule",{get(){if(t.shouldBlock()){let n="process.mainModule access is blocked during script execution",i=t.recordViolation("process_main_module","process.mainModule",n);throw new re(n,i)}return t.config.auditMode&&ae?.getStore()?.sandboxActive===!0&&t.recordViolation("process_main_module","process.mainModule","process.mainModule accessed (audit mode)"),r},set(n){if(t.shouldBlock()){let i="process.mainModule modification is blocked during script execution",o=t.recordViolation("process_main_module","process.mainModule",i);throw new re(i,o)}Object.defineProperty(process,"mainModule",{value:n,writable:!0,configurable:!0})},configurable:!0})}catch(s){console.debug("[DefenseInDepthBox] Could not protect process.mainModule:",s instanceof Error?s.message:s)}}protectProcessExecPath(){if(typeof process>"u")return;let t=this;try{let s=Object.getOwnPropertyDescriptor(process,"execPath");this.originalDescriptors.push({target:process,prop:"execPath",descriptor:s});let r=s?.value??process.execPath;Object.defineProperty(process,"execPath",{get(){if(t.shouldBlock()){let n="process.execPath access is blocked during script execution",i=t.recordViolation("process_exec_path","process.execPath",n);throw new re(n,i)}return t.config.auditMode&&ae?.getStore()?.sandboxActive===!0&&t.recordViolation("process_exec_path","process.execPath","process.execPath accessed (audit mode)"),r},set(n){if(t.shouldBlock()){let i="process.execPath modification is blocked during script execution",o=t.recordViolation("process_exec_path","process.execPath",i);throw new re(i,o)}Object.defineProperty(process,"execPath",{value:n,writable:!0,configurable:!0})},configurable:!0})}catch(s){console.debug("[DefenseInDepthBox] Could not protect process.execPath:",s instanceof Error?s.message:s)}}protectModuleLoad(){if(!st)try{let t=null;if(typeof process<"u"){let o=process.mainModule;o&&typeof o=="object"&&(t=o.constructor)}if(!t&&typeof gt<"u"&&typeof gt.main<"u"&&(t=gt.main.constructor),!t||typeof t._load!="function")return;let s=t._load,r=Object.getOwnPropertyDescriptor(t,"_load");this.originalDescriptors.push({target:t,prop:"_load",descriptor:r});let i=this.createBlockingProxy(s,"Module._load","module_load");Object.defineProperty(t,"_load",{value:i,writable:!0,configurable:!0})}catch(t){console.debug("[DefenseInDepthBox] Could not protect Module._load:",t instanceof Error?t.message:t)}}applyPatch(t){let{target:s,prop:r,violationType:n,strategy:i}=t;try{let o=s[r];if(o===void 0)return;let a=Object.getOwnPropertyDescriptor(s,r);if(this.originalDescriptors.push({target:s,prop:r,descriptor:a}),i==="freeze")typeof o=="object"&&o!==null&&Object.freeze(o);else{let l=this.getPathForTarget(s,r),c=typeof o=="function"?this.createBlockingProxy(o,l,n):this.createBlockingObjectProxy(o,l,n);Object.defineProperty(s,r,{value:c,writable:!0,configurable:!0})}}catch(o){let a=this.getPathForTarget(s,r);console.debug(`[DefenseInDepthBox] Could not patch ${a}:`,o instanceof Error?o.message:o)}}restorePatches(){for(let t=this.originalDescriptors.length-1;t>=0;t--){let{target:s,prop:r,descriptor:n}=this.originalDescriptors[t];try{n?Object.defineProperty(s,r,n):delete s[r]}catch(i){let o=this.getPathForTarget(s,r);console.debug(`[DefenseInDepthBox] Could not restore ${o}:`,i instanceof Error?i.message:i)}}this.originalDescriptors=[]}};function ii(e){return He(e)}function He(e){return e.statements.map(oi).join(`
|
|
676
676
|
`)}function oi(e){let t=[];for(let r=0;r<e.pipelines.length;r++)t.push(Jo(e.pipelines[r])),r<e.operators.length&&t.push(e.operators[r]);let s=t.join(" ");return e.background&&(s+=" &"),s}function Jo(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(ai(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 ai(e){switch(e.type){case"SimpleCommand":return ea(e);case"If":return ca(e);case"For":return ua(e);case"CStyleFor":return fa(e);case"While":return da(e);case"Until":return ha(e);case"Case":return pa(e);case"Subshell":return ya(e);case"Group":return ga(e);case"ArithmeticCommand":return wa(e);case"ConditionalCommand":return va(e);case"FunctionDef":return ba(e);default:{let t=e;throw new Error(`Unsupported command type: ${t.type}`)}}}function ea(e){let t=[];for(let s of e.assignments)t.push(ta(s));e.name&&t.push(ce(e.name));for(let s of e.args)t.push(ce(s));for(let s of e.redirections)t.push(ui(s));return t.join(" ")}function ta(e){let t=e.append?"+=":"=";if(e.array){let s=e.array.map(ce).join(" ");return`${e.name}${t}(${s})`}return e.value?`${e.name}${t}${ce(e.value)}`:`${e.name}${t}`}function ce(e){return e.parts.map(t=>Yt(t,!1)).join("")}function Fe(e){return e.parts.map(t=>Yt(t,!0)).join("")}function Yt(e,t){switch(e.type){case"Literal":return t?ra(e.value):sa(e.value);case"SingleQuoted":return`'${e.value}'`;case"DoubleQuoted":return`"${e.parts.map(s=>Yt(s,!0)).join("")}"`;case"Escaped":return`\\${e.value}`;case"ParameterExpansion":return li(e);case"CommandSubstitution":return e.legacy?`\`${He(e.body)}\``:`$(${He(e.body)})`;case"ArithmeticExpansion":return`$((${B(e.expression.expression)}))`;case"ProcessSubstitution":return e.direction==="input"?`<(${He(e.body)})`:`>(${He(e.body)})`;case"BraceExpansion":return aa(e);case"TildeExpansion":return e.user!==null?`~${e.user}`:"~";case"Glob":return e.pattern;default:{let s=e;throw new Error(`Unsupported word part type: ${s.type}`)}}}function sa(e){return e.replace(/[\s\\'"`!|&;()<>{}[\]*?~#]/g,"\\$&")}function ra(e){return e.replace(/[$`"\\]/g,"\\$&")}function na(e,t){return e.parts.map(s=>ia(s,t)).join("")}function ia(e,t){switch(e.type){case"Literal":return t?e.value:e.value.replace(/[$`]/g,"\\$&");case"Escaped":return`\\${e.value}`;case"ParameterExpansion":return li(e);case"CommandSubstitution":return e.legacy?`\`${He(e.body)}\``:`$(${He(e.body)})`;case"ArithmeticExpansion":return`$((${B(e.expression.expression)}))`;default:return Yt(e,!1)}}function li(e){return e.operation?`\${${ci(e.parameter,e.operation)}}`:oa(e.parameter)?`\${${e.parameter}}`:`$${e.parameter}`}function oa(e){return!(/^[?#@*$!\-0-9]$/.test(e)||/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))}function ci(e,t){switch(t.type){case"Length":return`#${e}`;case"LengthSliceError":return`#${e}:`;case"BadSubstitution":return t.text;case"DefaultValue":return`${e}${t.checkEmpty?":":""}-${Fe(t.word)}`;case"AssignDefault":return`${e}${t.checkEmpty?":":""}=${Fe(t.word)}`;case"ErrorIfUnset":return`${e}${t.checkEmpty?":":""}?${t.word?Fe(t.word):""}`;case"UseAlternative":return`${e}${t.checkEmpty?":":""}+${Fe(t.word)}`;case"Substring":{let s=B(t.offset.expression);return t.length?`${e}:${s}:${B(t.length.expression)}`:`${e}:${s}`}case"PatternRemoval":{let s=t.side==="prefix"?"#":"%",r=t.greedy?`${s}${s}`:s;return`${e}${r}${Fe(t.pattern)}`}case"PatternReplacement":{let s="/";t.all?s="//":t.anchor==="start"?s="/#":t.anchor==="end"&&(s="/%");let r=t.replacement?`/${Fe(t.replacement)}`:"";return`${e}${s}${Fe(t.pattern)}${r}`}case"CaseModification":{let s=t.direction==="upper"?"^":",",r=t.all?`${s}${s}`:s,n=t.pattern?Fe(t.pattern):"";return`${e}${r}${n}`}case"Transform":return`${e}@${t.operator}`;case"Indirection":return t.innerOp?`!${ci(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 aa(e){return`{${e.items.map(la).join(",")}}`}function la(e){if(e.type==="Word")return ce(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 ui(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=na(s.content,s.quoted);return`${t}${e.operator}${r}
|
|
@@ -703,7 +703,7 @@ ${e.terminator}`}function ya(e){return`(${ge(e.body)})${Ae(e.redirections)}`}fun
|
|
|
703
703
|
`,exitCode:2,env:be(this.state.env,s?.env)});if(f instanceof RangeError)return this.logResult({stdout:"",stderr:`bash: ${qe(f.message)}
|
|
704
704
|
`,exitCode:1,env:be(this.state.env,s?.env)});throw f}finally{u?.deactivate()}}async readFile(t){return this.fs.readFile(this.fs.resolvePath(this.state.cwd,t))}async writeFile(t,s){return this.fs.writeFile(this.fs.resolvePath(this.state.cwd,t),s)}getCwd(){return this.state.cwd}getEnv(){return xe(this.state.env)}registerTransformPlugin(t){this.transformPlugins.push(t)}transform(t){let s=fi(t),r=$e(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={...n,...o.metadata})}return{script:ii(r),ast:r,metadata:n}}};function fi(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 c=l[1]==="-",u=l[3];r.push({delimiter:u,stripTabs:c})}}return s.join(`
|
|
706
|
-
`)}var $a=new TextDecoder("utf-8",{fatal:!0});function di(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 $a.decode(s)}catch{return e}}import*as Z from"node:fs";import*as oe from"node:path";var Ea="/home/user/project",Jt=class{root;canonicalRoot;mountPoint;readOnly;maxFileReadSize;allowSymlinks;memory=new Map;deleted=new Set;constructor(t){this.root=oe.resolve(t.root);let s=t.mountPoint??Ea;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,pr(this.root,"OverlayFs"),this.canonicalRoot=Z.realpathSync(this.root),this.createMountPointDirs()}assertWritable(t){if(this.readOnly)throw new Error(`EROFS: read-only file system, ${t}`)}createMountPointDirs(){let t=this.mountPoint.split("/").filter(Boolean),s="";for(let r of t)s+=`/${r}`,this.memory.has(s)||this.memory.set(s,{type:"directory",mode:493,mtime:new Date});this.memory.has("/")||this.memory.set("/",{type:"directory",mode:493,mtime:new Date})}getMountPoint(){return this.mountPoint}mkdirSync(t,s){let n=j(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=j(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=j(t),r=this.getRelativeToMount(s);if(r===null)return null;let n=oe.join(this.root,r),i=oe.resolve(n);return es(i,this.root)?i:null}dirname(t){let s=j(t);if(s==="/")return"/";let r=s.lastIndexOf("/");return r===0?"/":s.slice(0,r)}resolveRealPath_(t){return t?this.allowSymlinks?dr(t,this.canonicalRoot):hr(t,this.root,this.canonicalRoot):null}resolveRealPathParent_(t){if(!t)return null;let s=oe.dirname(t),r=this.resolveRealPath_(s);return r===null?null:oe.join(r,oe.basename(t))}sanitizeError(t,s,r){let n=t;if(n.path===void 0&&(n.message?.includes("ELOOP")||n.message?.includes("EFBIG")||n.message?.includes("EPERM")))throw t;let i=n.code||"EIO";throw new Error(`${i}: ${r} '${s}'`)}ensureParentDirs(t){let s=this.dirname(t);s!=="/"&&(this.memory.has(s)||(this.ensureParentDirs(s),this.memory.set(s,{type:"directory",mode:493,mtime:new Date})),this.deleted.delete(s))}async existsInOverlay(t){let s=j(t);if(this.deleted.has(s))return!1;if(this.memory.has(s))return!0;let r=this.resolveRealPathParent_(this.toRealPath(s));if(!r)return!1;try{return await Z.promises.lstat(r),!0}catch{return!1}}async readFile(t,s){let r=await this.readFileBuffer(t),n=Re(s);return _t(r,n)}async readFileBuffer(t,s=new Set){Y(t,"open");let r=j(t);if(s.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);if(s.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, open '${t}'`);let n=this.memory.get(r);if(n){if(n.type==="symlink"){let o=this.resolveSymlink(r,n.target);return this.readFileBuffer(o,s)}if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return n.content}let i=this.resolveRealPath_(this.toRealPath(r));if(!i)throw new Error(`ENOENT: no such file or directory, open '${t}'`);try{let o=await Z.promises.lstat(i);if(o.isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, open '${t}'`);let l=await Z.promises.readlink(i),c=this.realTargetToVirtual(r,l),u=this.resolveSymlink(r,c);return this.readFileBuffer(u,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=await Z.promises.readFile(i);return new Uint8Array(a)}catch(o){if(o.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, open '${t}'`);this.sanitizeError(o,t,"open")}}async writeFile(t,s,r){Y(t,"write"),this.assertWritable(`write '${t}'`);let n=j(t);this.ensureParentDirs(n);let i=Re(r),o=Ge(s,i);this.memory.set(n,{type:"file",content:o,mode:420,mtime:new Date}),this.deleted.delete(n)}async appendFile(t,s,r){Y(t,"append"),this.assertWritable(`append '${t}'`);let n=j(t),i=Re(r),o=Ge(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){Y(t,"stat");let r=j(t);if(s.has(r))throw new Error(`ELOOP: too many levels of symbolic links, stat '${t}'`);if(s.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let n=this.memory.get(r);if(n){if(n.type==="symlink"){let a=this.resolveSymlink(r,n.target);return this.stat(a,s)}let o=0;return n.type==="file"&&(o=n.content.length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:o,mtime:n.mtime}}let i=this.resolveRealPath_(this.toRealPath(r));if(!i)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);try{let o=await Z.promises.lstat(i);if(o.isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let a=await Z.promises.readlink(i),l=this.realTargetToVirtual(r,a),c=this.resolveSymlink(r,l);return this.stat(c,s)}return{isFile:o.isFile(),isDirectory:o.isDirectory(),isSymbolicLink:!1,mode:o.mode,size:o.size,mtime:o.mtime}}catch(o){if(o.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, stat '${t}'`);this.sanitizeError(o,t,"stat")}}async lstat(t){Y(t,"lstat");let s=j(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);let r=this.memory.get(s);if(r){if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime};let i=0;return r.type==="file"&&(i=r.content.length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:i,mtime:r.mtime}}let n=this.resolveRealPathParent_(this.toRealPath(s));if(!n)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);try{let i=await Z.promises.lstat(n);return{isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:i.isSymbolicLink(),mode:i.mode,size:i.size,mtime:i.mtime}}catch(i){if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);this.sanitizeError(i,t,"lstat")}}resolveSymlink(t,s){if(s.startsWith("/"))return j(s);let r=this.dirname(t);return j(r==="/"?`/${s}`:`${r}/${s}`)}realTargetToVirtual(t,s){let r=mr(s,this.canonicalRoot);if(r.withinRoot){if(!oe.isAbsolute(s))return s;let n=r.relativePath;return this.mountPoint==="/"?n:`${this.mountPoint}${n}`}return r.safeName}async mkdir(t,s){Y(t,"mkdir"),this.assertWritable(`mkdir '${t}'`);let r=j(t);if(await this.existsInOverlay(r)){if(!s?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${t}'`);return}let i=this.dirname(r);if(i!=="/"&&!await this.existsInOverlay(i))if(s?.recursive)await this.mkdir(i,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.memory.set(r,{type:"directory",mode:493,mtime:new Date}),this.deleted.delete(r)}async readdirCore(t,s){if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let r=new Map,n=new Set,i=s==="/"?"/":`${s}/`;for(let a of this.deleted)if(a.startsWith(i)){let l=a.slice(i.length),c=l.split("/")[0];c&&!l.includes("/",c.length)&&n.add(c)}for(let[a,l]of this.memory)if(a!==s&&a.startsWith(i)){let c=a.slice(i.length),u=c.split("/")[0];u&&!n.has(u)&&!c.includes("/",1)&&r.set(u,{name:u,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}let o=this.resolveRealPath_(this.toRealPath(s));if(o)try{let a=await Z.promises.readdir(o,{withFileTypes:!0});for(let l of a)!n.has(l.name)&&!r.has(l.name)&&r.set(l.name,{name:l.name,isFile:l.isFile(),isDirectory:l.isDirectory(),isSymbolicLink:l.isSymbolicLink()})}catch(a){if(a.code==="ENOENT"){if(!this.memory.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`)}else a.code!=="ENOTDIR"&&this.sanitizeError(a,t,"scandir")}return r}async resolveForReaddir(t,s=!1){let r=j(t),n=new Set,i=s,o=this.memory.get(r);for(;o&&o.type==="symlink";){if(n.has(r))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);n.add(r),i=!0,r=this.resolveSymlink(r,o.target),o=this.memory.get(r)}if(o)return{normalized:r,outsideOverlay:!1};if(this.getRelativeToMount(r)===null)return{normalized:r,outsideOverlay:!0};let l=this.resolveRealPath_(this.toRealPath(r));if(!l)return{normalized:r,outsideOverlay:!0};try{if((await Z.promises.lstat(l)).isSymbolicLink()){if(!this.allowSymlinks)return{normalized:r,outsideOverlay:!0};let u=await Z.promises.readlink(l),f=this.realTargetToVirtual(r,u),d=this.resolveSymlink(r,f);return this.resolveForReaddir(d,!0)}return{normalized:r,outsideOverlay:!1}}catch{return i?{normalized:r,outsideOverlay:!0}:{normalized:r,outsideOverlay:!1}}}async readdir(t){Y(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){Y(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){Y(t,"rm"),this.assertWritable(`rm '${t}'`);let r=j(t);if(!await this.existsInOverlay(r)){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}try{if((await this.stat(r)).isDirectory){let o=await this.readdir(r);if(o.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let a of o){let l=r==="/"?`/${a}`:`${r}/${a}`;await this.rm(l,s)}}}}catch(i){if(i instanceof Error&&(i.message.includes("ENOTEMPTY")||i.message.includes("EISDIR")))throw i}this.deleted.add(r),this.memory.delete(r)}async cp(t,s,r){Y(t,"cp"),Y(s,"cp"),this.assertWritable(`cp '${s}'`);let n=j(t),i=j(s);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, cp '${t}'`);let a=await this.stat(n);if(a.isFile){let l=await this.readFileBuffer(n);await this.writeFile(i,l)}else if(a.isDirectory){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let l=await this.readdir(n);for(let c of l){let u=n==="/"?`/${c}`:`${n}/${c}`,f=i==="/"?`/${c}`:`${i}/${c}`;await this.cp(u,f,r)}}}async mv(t,s){this.assertWritable(`mv '${s}'`),await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}resolvePath(t,s){if(s.startsWith("/"))return j(s);let r=t==="/"?`/${s}`:`${t}/${s}`;return j(r)}getAllPaths(){let t=new Set(this.memory.keys());for(let s of this.deleted)t.delete(s);return this.scanRealFs("/",t),Array.from(t)}scanRealFs(t,s){if(this.deleted.has(t))return;let r=this.resolveRealPath_(this.toRealPath(t));if(r)try{let n=Z.readdirSync(r);for(let i of n){let o=t==="/"?`/${i}`:`${t}/${i}`;if(this.deleted.has(o))continue;s.add(o);let a=oe.join(r,i);Z.lstatSync(a).isDirectory()&&this.scanRealFs(o,s)}}catch{}}async chmod(t,s){Y(t,"chmod"),this.assertWritable(`chmod '${t}'`);let r=j(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}'`);Y(s,"symlink"),this.assertWritable(`symlink '${s}'`);let r=j(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){Y(t,"link"),Y(s,"link"),this.assertWritable(`link '${s}'`);let r=j(t),n=j(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){Y(t,"readlink");let s=j(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);let r=this.memory.get(s);if(r){if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return r.target}let n=this.resolveRealPathParent_(this.toRealPath(s));if(!n)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);try{let i=await Z.promises.readlink(n);if(!oe.isAbsolute(i)){let o=oe.resolve(oe.dirname(n),i),a;try{a=Z.realpathSync(o)}catch{a=o}if(!es(a,this.canonicalRoot))return oe.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){Y(t,"realpath");let s=j(t),r=new Set,n=async a=>{let l=a==="/"?[]:a.slice(1).split("/"),c="";for(let u of l){if(c=`${c}/${u}`,r.has(c))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(c))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let f=this.memory.get(c),d=0,h=40;for(;f&&f.type==="symlink"&&d<h;){if(r.add(c),c=this.resolveSymlink(c,f.target),d++,r.has(c))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(c))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);f=this.memory.get(c)}if(d>=h)throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(!f){let m=this.toRealPath(c),p=this.resolveRealPath_(m);if(p)try{if((await Z.promises.lstat(p)).isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let S=await Z.promises.readlink(p),v=this.realTargetToVirtual(c,S);return r.add(c),c=this.resolveSymlink(c,v),n(c)}}catch(g){if(g.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);this.sanitizeError(g,t,"realpath")}else if(!this.allowSymlinks){let g=this.resolveRealPathParent_(m);if(g)try{if((await Z.promises.lstat(g)).isSymbolicLink())throw new Error(`ENOENT: no such file or directory, realpath '${t}'`)}catch(S){if(S.message?.includes("ENOENT")||S.message?.includes("ELOOP"))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);this.sanitizeError(S,t,"realpath")}}}}return c||"/"},i=await n(s);if(!await this.existsInOverlay(i))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);return i}async utimes(t,s,r){Y(t,"utimes"),this.assertWritable(`utimes '${t}'`);let n=j(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})}};var ee={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",cyan:"\x1B[36m"},cr=class{env;rl;running=!0;history=[];isInteractive;constructor(t={}){let s=process.cwd(),r=new Jt({root:s,mountPoint:"/"});this.env=new Qt({fs:r,cwd:t.cwd||"/",env:{HOME:"/",USER:"user",SHELL:"/bin/bash",TERM:"xterm-256color",...t.env},network:t.network===!0?{dangerouslyAllowFullInternetAccess:!0}:void 0}),this.isInteractive=process.stdin.isTTY===!0,this.rl=pi.createInterface({input:process.stdin,output:process.stdout,terminal:this.isInteractive}),this.rl.on("SIGINT",()=>{process.stdout.write(`^C
|
|
706
|
+
`)}var $a=new TextDecoder("utf-8",{fatal:!0});function di(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 $a.decode(s)}catch{return e}}import*as H from"node:fs";import*as oe from"node:path";var Ea="/home/user/project",Jt=class{root;canonicalRoot;mountPoint;readOnly;maxFileReadSize;allowSymlinks;memory=new Map;deleted=new Set;constructor(t){this.root=oe.resolve(t.root);let s=t.mountPoint??Ea;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,pr(this.root,"OverlayFs"),this.canonicalRoot=H.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=j(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=j(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=j(t),r=this.getRelativeToMount(s);if(r===null)return null;let n=oe.join(this.root,r),i=oe.resolve(n);return es(i,this.root)?i:null}dirname(t){let s=j(t);if(s==="/")return"/";let r=s.lastIndexOf("/");return r===0?"/":s.slice(0,r)}resolveRealPath_(t){return t?this.allowSymlinks?dr(t,this.canonicalRoot):hr(t,this.root,this.canonicalRoot):null}resolveRealPathParent_(t){if(!t)return null;let s=oe.dirname(t),r=this.resolveRealPath_(s);return r===null?null:oe.join(r,oe.basename(t))}sanitizeError(t,s,r){let n=t;if(n.path===void 0&&(n.message?.includes("ELOOP")||n.message?.includes("EFBIG")||n.message?.includes("EPERM")))throw t;let i=n.code||"EIO";throw new Error(`${i}: ${r} '${s}'`)}ensureParentDirs(t){let s=this.dirname(t);s!=="/"&&(this.memory.has(s)||(this.ensureParentDirs(s),this.memory.set(s,{type:"directory",mode:493,mtime:new Date})),this.deleted.delete(s))}async existsInOverlay(t){let s=j(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 H.promises.lstat(r),!0}catch{return!1}}async readFile(t,s){let r=await this.readFileBuffer(t),n=Re(s);return _t(r,n)}async readFileBuffer(t,s=new Set){Y(t,"open");let r=j(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 H.promises.lstat(i);if(o.isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, open '${t}'`);let c=await H.promises.readlink(i),u=this.realTargetToVirtual(r,c),f=this.resolveSymlink(r,u);return this.readFileBuffer(f,s)}if(o.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);if(this.maxFileReadSize>0&&o.size>this.maxFileReadSize)throw new Error(`EFBIG: file too large, read '${t}' (${o.size} bytes, max ${this.maxFileReadSize})`);let a=this.allowSymlinks?H.constants.O_RDONLY:H.constants.O_RDONLY|H.constants.O_NOFOLLOW,l=await H.promises.open(i,a);try{let c=await l.readFile();return new Uint8Array(c)}finally{await l.close()}}catch(o){let a=o.code;if(a==="ENOENT")throw new Error(`ENOENT: no such file or directory, open '${t}'`);if(a==="ELOOP")throw new Error(`ENOENT: no such file or directory, open '${t}'`);this.sanitizeError(o,t,"open")}}async writeFile(t,s,r){Y(t,"write"),this.assertWritable(`write '${t}'`);let n=j(t);this.ensureParentDirs(n);let i=Re(r),o=Ge(s,i);this.memory.set(n,{type:"file",content:o,mode:420,mtime:new Date}),this.deleted.delete(n)}async appendFile(t,s,r){Y(t,"append"),this.assertWritable(`append '${t}'`);let n=j(t),i=Re(r),o=Ge(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){Y(t,"stat");let r=j(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 H.promises.lstat(i);if(o.isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let a=await H.promises.readlink(i),l=this.realTargetToVirtual(r,a),c=this.resolveSymlink(r,l);return this.stat(c,s)}return{isFile:o.isFile(),isDirectory:o.isDirectory(),isSymbolicLink:!1,mode:o.mode,size:o.size,mtime:o.mtime}}catch(o){if(o.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, stat '${t}'`);this.sanitizeError(o,t,"stat")}}async lstat(t){Y(t,"lstat");let s=j(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 H.promises.lstat(n);return{isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:i.isSymbolicLink(),mode:i.mode,size:i.size,mtime:i.mtime}}catch(i){if(i.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);this.sanitizeError(i,t,"lstat")}}resolveSymlink(t,s){if(s.startsWith("/"))return j(s);let r=this.dirname(t);return j(r==="/"?`/${s}`:`${r}/${s}`)}realTargetToVirtual(t,s){let r=mr(s,this.canonicalRoot);if(r.withinRoot){if(!oe.isAbsolute(s))return s;let n=r.relativePath;return this.mountPoint==="/"?n:`${this.mountPoint}${n}`}return r.safeName}async mkdir(t,s){Y(t,"mkdir"),this.assertWritable(`mkdir '${t}'`);let r=j(t);if(await this.existsInOverlay(r)){if(!s?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${t}'`);return}let i=this.dirname(r);if(i!=="/"&&!await this.existsInOverlay(i))if(s?.recursive)await this.mkdir(i,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.memory.set(r,{type:"directory",mode:493,mtime:new Date}),this.deleted.delete(r)}async readdirCore(t,s){if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let r=new Map,n=new Set,i=s==="/"?"/":`${s}/`;for(let a of this.deleted)if(a.startsWith(i)){let l=a.slice(i.length),c=l.split("/")[0];c&&!l.includes("/",c.length)&&n.add(c)}for(let[a,l]of this.memory)if(a!==s&&a.startsWith(i)){let c=a.slice(i.length),u=c.split("/")[0];u&&!n.has(u)&&!c.includes("/",1)&&r.set(u,{name:u,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}let o=this.resolveRealPath_(this.toRealPath(s));if(o)try{if(!this.allowSymlinks&&(await H.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 H.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=j(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 H.promises.lstat(l)).isSymbolicLink()){if(!this.allowSymlinks)return{normalized:r,outsideOverlay:!0};let u=await H.promises.readlink(l),f=this.realTargetToVirtual(r,u),d=this.resolveSymlink(r,f);return this.resolveForReaddir(d,!0)}return{normalized:r,outsideOverlay:!1}}catch{return i?{normalized:r,outsideOverlay:!0}:{normalized:r,outsideOverlay:!1}}}async readdir(t){Y(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){Y(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){Y(t,"rm"),this.assertWritable(`rm '${t}'`);let r=j(t);if(!await this.existsInOverlay(r)){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}try{if((await this.stat(r)).isDirectory){let o=await this.readdir(r);if(o.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let a of o){let l=r==="/"?`/${a}`:`${r}/${a}`;await this.rm(l,s)}}}}catch(i){if(i instanceof Error&&(i.message.includes("ENOTEMPTY")||i.message.includes("EISDIR")))throw i}this.deleted.add(r),this.memory.delete(r)}async cp(t,s,r){Y(t,"cp"),Y(s,"cp"),this.assertWritable(`cp '${s}'`);let n=j(t),i=j(s);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, cp '${t}'`);let a=await this.stat(n);if(a.isFile){let l=await this.readFileBuffer(n);await this.writeFile(i,l)}else if(a.isDirectory){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let l=await this.readdir(n);for(let c of l){let u=n==="/"?`/${c}`:`${n}/${c}`,f=i==="/"?`/${c}`:`${i}/${c}`;await this.cp(u,f,r)}}}async mv(t,s){this.assertWritable(`mv '${s}'`),await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}resolvePath(t,s){if(s.startsWith("/"))return j(s);let r=t==="/"?`/${s}`:`${t}/${s}`;return j(r)}getAllPaths(){let t=new Set(this.memory.keys());for(let s of this.deleted)t.delete(s);return this.scanRealFs("/",t),Array.from(t)}scanRealFs(t,s){if(this.deleted.has(t))return;let r=this.resolveRealPath_(this.toRealPath(t));if(r)try{let n=H.readdirSync(r);for(let i of n){let o=t==="/"?`/${i}`:`${t}/${i}`;if(this.deleted.has(o))continue;s.add(o);let a=oe.join(r,i);H.lstatSync(a).isDirectory()&&this.scanRealFs(o,s)}}catch{}}async chmod(t,s){Y(t,"chmod"),this.assertWritable(`chmod '${t}'`);let r=j(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}'`);Y(s,"symlink"),this.assertWritable(`symlink '${s}'`);let r=j(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){Y(t,"link"),Y(s,"link"),this.assertWritable(`link '${s}'`);let r=j(t),n=j(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){Y(t,"readlink");let s=j(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 H.promises.readlink(n);if(!oe.isAbsolute(i)){let o=oe.resolve(oe.dirname(n),i),a;try{a=H.realpathSync(o)}catch{a=o}if(!es(a,this.canonicalRoot))return oe.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){Y(t,"realpath");let s=j(t),r=new Set,n=async a=>{let l=a==="/"?[]:a.slice(1).split("/"),c="";for(let u of l){if(c=`${c}/${u}`,r.has(c))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(c))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let f=this.memory.get(c),d=0,h=40;for(;f&&f.type==="symlink"&&d<h;){if(r.add(c),c=this.resolveSymlink(c,f.target),d++,r.has(c))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(c))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);f=this.memory.get(c)}if(d>=h)throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(!f){let m=this.toRealPath(c),p=this.resolveRealPath_(m);if(p)try{if((await H.promises.lstat(p)).isSymbolicLink()){if(!this.allowSymlinks)throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let S=await H.promises.readlink(p),v=this.realTargetToVirtual(c,S);return r.add(c),c=this.resolveSymlink(c,v),n(c)}}catch(g){if(g.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);this.sanitizeError(g,t,"realpath")}else if(!this.allowSymlinks){let g=this.resolveRealPathParent_(m);if(g)try{if((await H.promises.lstat(g)).isSymbolicLink())throw new Error(`ENOENT: no such file or directory, realpath '${t}'`)}catch(S){if(S.message?.includes("ENOENT")||S.message?.includes("ELOOP"))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);this.sanitizeError(S,t,"realpath")}}}}return c||"/"},i=await n(s);if(!await this.existsInOverlay(i))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);return i}async utimes(t,s,r){Y(t,"utimes"),this.assertWritable(`utimes '${t}'`);let n=j(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})}};var ee={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",cyan:"\x1B[36m"},cr=class{env;rl;running=!0;history=[];isInteractive;constructor(t={}){let s=process.cwd(),r=new Jt({root:s,mountPoint:"/"});this.env=new Qt({fs:r,cwd:t.cwd||"/",env:{HOME:"/",USER:"user",SHELL:"/bin/bash",TERM:"xterm-256color",...t.env},network:t.network===!0?{dangerouslyAllowFullInternetAccess:!0}:void 0}),this.isInteractive=process.stdin.isTTY===!0,this.rl=pi.createInterface({input:process.stdin,output:process.stdout,terminal:this.isInteractive}),this.rl.on("SIGINT",()=>{process.stdout.write(`^C
|
|
707
707
|
`),this.prompt()}),process.stdin.isTTY&&this.rl.on("close",()=>{this.running=!1,console.log(`
|
|
708
708
|
Goodbye!`),process.exit(0)})}syncHistory(){let t=this.env.getEnv();t.BASH_HISTORY=JSON.stringify(this.history)}getPrompt(){let t=this.env.getCwd(),s=this.env.getEnv().HOME||"/home/user",r=t;return t===s?r="~":t.startsWith(`${s}/`)&&(r=`~${t.slice(s.length)}`),`${ee.green}${ee.bold}user@virtual${ee.reset}:${ee.blue}${ee.bold}${r}${ee.reset}$ `}async executeCommand(t){let s=t.trim();if(s){if(this.history.push(s),s==="exit"||s.startsWith("exit ")){let r=s.split(/\s+/),n=r[1]?parseInt(r[1],10):0;console.log("exit"),process.exit(n)}this.syncHistory();try{let r=await this.env.exec(s);r.stdout&&process.stdout.write(r.stdout),r.stderr&&process.stderr.write(`${ee.red}${r.stderr}${ee.reset}`)}catch(r){console.error(`${ee.red}Error: ${ve(r)}${ee.reset}`)}}}printWelcome(){console.log(`
|
|
709
709
|
${ee.cyan}${ee.bold}\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557
|