just-bash 2.6.0 → 2.7.0
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/README.md +1 -1
- package/dist/AGENTS.md +1 -1
- package/dist/bin/chunks/python3-JGT65AEB.js +14 -0
- package/dist/bin/chunks/worker.js +1038 -0
- package/dist/bin/just-bash.js +37 -37
- package/dist/bin/shell/chunks/python3-JGT65AEB.js +14 -0
- package/dist/bin/shell/shell.js +37 -37
- package/dist/bundle/browser.js +27 -27
- package/dist/bundle/chunks/python3-3OP7EKER.js +13 -0
- package/dist/bundle/chunks/worker.js +1038 -0
- package/dist/bundle/index.js +31 -31
- package/dist/commands/python3/fs-bridge-handler.d.ts +50 -0
- package/dist/commands/python3/protocol.d.ts +138 -0
- package/dist/commands/python3/python3.d.ts +11 -0
- package/dist/commands/python3/sync-fs-backend.d.ts +59 -0
- package/dist/commands/python3/worker.d.ts +16 -0
- package/dist/commands/registry.d.ts +1 -1
- package/dist/limits.d.ts +2 -0
- package/package.json +7 -5
package/dist/bin/just-bash.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{B as Us,C as qs,D as se,E as Ce,F as K,G as ce,H as st,I as Zs,J as I,K as Gs,L as Ks,M as de,N as Lt,O as nt,P as V,a as Ls,b as Ws,c as Fs,d as et,e as q,f as M,g as fe,h as Q,i as ue,j as ve,k as Dt,l as tt,m as Ms,n as It,o as zs,p as oe,q as ye,r as Vs,s as js,t as Tt,u as xt,v as be,w as Bs,x as Hs,y as le,z as Rt}from"./chunks/chunk-FSAGDARS.js";import{a as ne,b as re,c as te,d as ie,e as xs,f as z,g as _e,h as Ye,i as Qe,j as Rs,k as ee,l as we,m as Je,n as ae}from"./chunks/chunk-K5IXNHO5.js";import"./chunks/chunk-OBH7XN5N.js";import{a as me}from"./chunks/chunk-4VDEBYW7.js";import"./chunks/chunk-KGOUQS5A.js";import{resolve as Ar}from"node:path";var ke=[{name:"echo",load:async()=>(await import("./chunks/echo-7I42V66Q.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-AJXZOSPN.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-YPXD4CRE.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-BEHQBUMC.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-XJABRAUN.js")).mkdirCommand},{name:"rmdir",load:async()=>(await import("./chunks/rmdir-GOODLY5W.js")).rmdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-IBPHJBM3.js")).touchCommand},{name:"rm",load:async()=>(await import("./chunks/rm-2PKAWTSQ.js")).rmCommand},{name:"cp",load:async()=>(await import("./chunks/cp-XXWRVG2D.js")).cpCommand},{name:"mv",load:async()=>(await import("./chunks/mv-3ATZ2ABL.js")).mvCommand},{name:"ln",load:async()=>(await import("./chunks/ln-EFFNQ3RY.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-TYLTHXFR.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-L26WH2K4.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-VL3R4LAM.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-TJHLLIMR.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-YAUIERGN.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-SAOHEZYP.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-UEQ7KMY5.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-VX7MJMVN.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-VX7MJMVN.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-VX7MJMVN.js")).egrepCommand},{name:"rg",load:async()=>(await import("./chunks/rg-RSDLLECO.js")).rgCommand},{name:"sed",load:async()=>(await import("./chunks/sed-JPDTWF4W.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-GFEJOWML.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-KUHOCH5S.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-IXHB2FVS.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-CPIFQTKY.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-IHF6BEOO.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-FT6WBQZG.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-MBLEXZBI.js")).trCommand},{name:"rev",load:async()=>(await import("./chunks/rev-VP42N2JN.js")).rev},{name:"nl",load:async()=>(await import("./chunks/nl-DSM3NUGM.js")).nl},{name:"fold",load:async()=>(await import("./chunks/fold-452R4I2C.js")).fold},{name:"expand",load:async()=>(await import("./chunks/expand-77K5HH2M.js")).expand},{name:"unexpand",load:async()=>(await import("./chunks/unexpand-BFVYAPOU.js")).unexpand},{name:"strings",load:async()=>(await import("./chunks/strings-ZEKN6D4Q.js")).strings},{name:"split",load:async()=>(await import("./chunks/split-JJFZRWRC.js")).split},{name:"column",load:async()=>(await import("./chunks/column-TSFEMTG6.js")).column},{name:"join",load:async()=>(await import("./chunks/join-3IXMEGNA.js")).join},{name:"tee",load:async()=>(await import("./chunks/tee-ZFIT2GTM.js")).teeCommand},{name:"find",load:async()=>(await import("./chunks/find-PHDZK64M.js")).findCommand},{name:"basename",load:async()=>(await import("./chunks/basename-SO5MVUEX.js")).basenameCommand},{name:"dirname",load:async()=>(await import("./chunks/dirname-EES7TR26.js")).dirnameCommand},{name:"tree",load:async()=>(await import("./chunks/tree-DQBEJH47.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-XQPYLN3H.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-7A4MH7BJ.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-7A4MH7BJ.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-EGIS5LUE.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-EGIS5LUE.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-G5C2J2OY.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-IWT2HHEA.js")).xargsCommand},{name:"true",load:async()=>(await import("./chunks/true-OVATH2SQ.js")).trueCommand},{name:"false",load:async()=>(await import("./chunks/true-OVATH2SQ.js")).falseCommand},{name:"clear",load:async()=>(await import("./chunks/clear-CI7A5IXQ.js")).clearCommand},{name:"bash",load:async()=>(await import("./chunks/bash-PGDTHIM2.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-PGDTHIM2.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-RGZHJNXC.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-O7TCK5TL.js")).base64Command},{name:"diff",load:async()=>(await import("./chunks/diff-GI3QVUGD.js")).diffCommand},{name:"date",load:async()=>(await import("./chunks/date-IQLPMFYI.js")).dateCommand},{name:"sleep",load:async()=>(await import("./chunks/sleep-O5BOTJGJ.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-JED4EKFH.js")).timeoutCommand},{name:"time",load:async()=>(await import("./chunks/time-37F5EBPK.js")).timeCommand},{name:"seq",load:async()=>(await import("./chunks/seq-AVK43XM2.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-RMGXYNQJ.js")).exprCommand},{name:"md5sum",load:async()=>(await import("./chunks/md5sum-2VAAFCTS.js")).md5sumCommand},{name:"sha1sum",load:async()=>(await import("./chunks/sha1sum-67P4ME4N.js")).sha1sumCommand},{name:"sha256sum",load:async()=>(await import("./chunks/sha256sum-MV3WQ4QF.js")).sha256sumCommand},{name:"file",load:async()=>(await import("./chunks/file-6PCTL3MH.js")).fileCommand},{name:"html-to-markdown",load:async()=>(await import("./chunks/html-to-markdown-EPEXKI4B.js")).htmlToMarkdownCommand},{name:"help",load:async()=>(await import("./chunks/help-7C5JICNL.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-FCDFBOMN.js")).whichCommand},{name:"tac",load:async()=>(await import("./chunks/tac-KNRFDAY7.js")).tac},{name:"hostname",load:async()=>(await import("./chunks/hostname-WXDKRL2Z.js")).hostname},{name:"whoami",load:async()=>(await import("./chunks/whoami-JVLUNKSG.js")).whoami},{name:"od",load:async()=>(await import("./chunks/od-KRKGC2U3.js")).od},{name:"gzip",load:async()=>(await import("./chunks/gzip-YXK3WZQL.js")).gzipCommand},{name:"gunzip",load:async()=>(await import("./chunks/gzip-YXK3WZQL.js")).gunzipCommand},{name:"zcat",load:async()=>(await import("./chunks/gzip-YXK3WZQL.js")).zcatCommand}];(typeof __BROWSER__>"u"||!__BROWSER__)&&(ke.push({name:"tar",load:async()=>(await import("./chunks/tar-LFENC54A.js")).tarCommand}),ke.push({name:"yq",load:async()=>(await import("./chunks/yq-PFV4T2PV.js")).yqCommand}),ke.push({name:"xan",load:async()=>(await import("./chunks/xan-5HNHTFMB.js")).xanCommand}),ke.push({name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-THMDBIGF.js")).sqlite3Command}));var Or=[{name:"curl",load:async()=>(await import("./chunks/curl-TH7YRBSA.js")).curlCommand}],Xs=new Map;function Ys(e){return{name:e.name,async execute(t,s){let n=Xs.get(e.name);return n||(n=await e.load(),Xs.set(e.name,n)),n.execute(t,s)}}}function Qs(e){return(e?ke.filter(s=>e.includes(s.name)):ke).map(Ys)}function Js(){return Or.map(Ys)}function en(e){return"load"in e&&typeof e.load=="function"}function tn(e){let t=null;return{name:e.name,async execute(s,n){return t||(t=await e.load()),t.execute(s,n)}}}var Dr=new TextEncoder,Ir=new TextDecoder;function Oe(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 n=0;n<e.length;n+=2)s[n/2]=parseInt(e.slice(n,n+2),16);return s}return t==="binary"||t==="latin1"?Uint8Array.from(e,s=>s.charCodeAt(0)):Dr.encode(e)}function rt(e,t){return t==="base64"?btoa(String.fromCharCode(...e)):t==="hex"?Array.from(e).map(s=>s.toString(16).padStart(2,"0")).join(""):t==="binary"||t==="latin1"?String.fromCharCode(...e):Ir.decode(e)}function Ee(e){if(e!=null)return typeof e=="string"?e:e.encoding??void 0}var it=new TextEncoder;function Tr(e){return typeof e=="object"&&e!==null&&!(e instanceof Uint8Array)&&"content"in e}var Me=class{data=new Map;constructor(t){if(this.data.set("/",{type:"directory",mode:493,mtime:new Date}),t)for(let[s,n]of Object.entries(t))Tr(n)?this.writeFileSync(s,n.content,void 0,{mode:n.mode,mtime:n.mtime}):this.writeFileSync(s,n)}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let n=s.split("/").filter(i=>i&&i!=="."),r=[];for(let i of n)i===".."?r.pop():r.push(i);return`/${r.join("/")}`||"/"}dirname(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.lastIndexOf("/");return n===0?"/":s.slice(0,n)}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,n,r){let i=this.normalizePath(t);this.ensureParentDirs(i);let o=Ee(n),a=Oe(s,o);this.data.set(i,{type:"file",content:a,mode:r?.mode??420,mtime:r?.mtime??new Date})}async readFile(t,s){let n=await this.readFileBuffer(t),r=Ee(s);return rt(n,r)}async readFileBuffer(t){let s=this.resolvePathWithSymlinks(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, open '${t}'`);if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return n.content instanceof Uint8Array?n.content:it.encode(n.content)}async writeFile(t,s,n){this.writeFileSync(t,s,n)}async appendFile(t,s,n){let r=this.normalizePath(t),i=this.data.get(r);if(i&&i.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${t}'`);let o=Ee(n),a=Oe(s,o);if(i?.type==="file"){let l=i.content instanceof Uint8Array?i.content:it.encode(i.content),c=new Uint8Array(l.length+a.length);c.set(l),c.set(a,l.length),this.data.set(r,{type:"file",content:c,mode:i.mode,mtime:new Date})}else this.writeFileSync(t,s,n)}async exists(t){try{let s=this.resolvePathWithSymlinks(t);return this.data.has(s)}catch{return!1}}async stat(t){let s=this.resolvePathWithSymlinks(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let r=0;return n.type==="file"&&n.content&&(n.content instanceof Uint8Array?r=n.content.length:r=it.encode(n.content).length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:r,mtime:n.mtime||new Date}}async lstat(t){let s=this.resolveIntermediateSymlinks(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);if(n.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:n.mode,size:n.target.length,mtime:n.mtime||new Date};let r=0;return n.type==="file"&&n.content&&(n.content instanceof Uint8Array?r=n.content.length:r=it.encode(n.content).length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:r,mtime:n.mtime||new Date}}resolveSymlink(t,s){if(s.startsWith("/"))return this.normalizePath(s);let n=this.dirname(t);return this.normalizePath(n==="/"?`/${s}`:`${n}/${s}`)}resolveIntermediateSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.slice(1).split("/");if(n.length<=1)return s;let r="",i=new Set;for(let o=0;o<n.length-1;o++){let a=n[o];r=`${r}/${a}`;let l=this.data.get(r),c=0,f=40;for(;l&&l.type==="symlink"&&c<f;){if(i.has(r))throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`);i.add(r),r=this.resolveSymlink(r,l.target),l=this.data.get(r),c++}if(c>=f)throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`)}return`${r}/${n[n.length-1]}`}resolvePathWithSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.slice(1).split("/"),r="",i=new Set;for(let o of n){r=`${r}/${o}`;let a=this.data.get(r),l=0,c=40;for(;a&&a.type==="symlink"&&l<c;){if(i.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);i.add(r),r=this.resolveSymlink(r,a.target),a=this.data.get(r),l++}if(l>=c)throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`)}return r}async mkdir(t,s){this.mkdirSync(t,s)}mkdirSync(t,s){let n=this.normalizePath(t);if(this.data.has(n)){if(this.data.get(n)?.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 r=this.dirname(n);if(r!=="/"&&!this.data.has(r))if(s?.recursive)this.mkdirSync(r,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.data.set(n,{type:"directory",mode:493,mtime:new Date})}async readdir(t){return(await this.readdirWithFileTypes(t)).map(n=>n.name)}async readdirWithFileTypes(t){let s=this.normalizePath(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let r=new Set;for(;n&&n.type==="symlink";){if(r.has(s))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);r.add(s),s=this.resolveSymlink(s,n.target),n=this.data.get(s)}if(!n)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);if(n.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),f=c.split("/")[0];f&&!c.includes("/",f.length)&&!o.has(f)&&o.set(f,{name:f,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){let n=this.normalizePath(t),r=this.data.get(n);if(!r){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}if(r.type==="directory"){let i=await this.readdir(n);if(i.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let o of i){let a=n==="/"?`/${o}`:`${n}/${o}`;await this.rm(a,s)}}}this.data.delete(n)}async cp(t,s,n){let r=this.normalizePath(t),i=this.normalizePath(s),o=this.data.get(r);if(!o)throw new Error(`ENOENT: no such file or directory, cp '${t}'`);if(o.type==="file")this.ensureParentDirs(i),this.data.set(i,{...o});else if(o.type==="directory"){if(!n?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let a=await this.readdir(r);for(let l of a){let c=r==="/"?`/${l}`:`${r}/${l}`,f=i==="/"?`/${l}`:`${i}/${l}`;await this.cp(c,f,n)}}}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 n=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(n)}async chmod(t,s){let n=this.normalizePath(t),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);r.mode=s}async symlink(t,s){let n=this.normalizePath(s);if(this.data.has(n))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(n),this.data.set(n,{type:"symlink",target:t,mode:511,mtime:new Date})}async link(t,s){let n=this.normalizePath(t),r=this.normalizePath(s),i=this.data.get(n);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(r))throw new Error(`EEXIST: file already exists, link '${s}'`);this.ensureParentDirs(r),this.data.set(r,{type:"file",content:i.content,mode:i.mode,mtime:i.mtime})}async readlink(t){let s=this.normalizePath(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(n.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return n.target}async realpath(t){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,n){let r=this.normalizePath(t),i=this.resolvePathWithSymlinks(r),o=this.data.get(i);if(!o)throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);o.mtime=n}};function xr(e){let t=e;return typeof t.mkdirSync=="function"&&typeof t.writeFileSync=="function"}function Rr(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 Lr(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 Wr(e){e.mkdirSync("/proc/self/fd",{recursive:!0}),e.writeFileSync("/proc/version",`${Ls}
|
|
2
|
+
import{B as Us,C as qs,D as se,E as Pe,F as K,G as ce,H as st,I as Zs,J as I,K as Gs,L as Ks,M as de,N as Lt,O as nt,P as V,a as Ls,b as Ws,c as Fs,d as et,e as q,f as M,g as fe,h as Q,i as ue,j as be,k as Dt,l as tt,m as Ms,n as It,o as zs,p as oe,q as ye,r as Vs,s as js,t as Tt,u as xt,v as Ee,w as Bs,x as Hs,y as le,z as Rt}from"./chunks/chunk-FSAGDARS.js";import{a as ne,b as re,c as te,d as ie,e as xs,f as z,g as Ce,h as Ye,i as Qe,j as Rs,k as ee,l as ve,m as Je,n as ae}from"./chunks/chunk-K5IXNHO5.js";import"./chunks/chunk-OBH7XN5N.js";import{a as me}from"./chunks/chunk-4VDEBYW7.js";import"./chunks/chunk-KGOUQS5A.js";import{resolve as Ar}from"node:path";var $e=[{name:"echo",load:async()=>(await import("./chunks/echo-7I42V66Q.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-AJXZOSPN.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-YPXD4CRE.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-BEHQBUMC.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-XJABRAUN.js")).mkdirCommand},{name:"rmdir",load:async()=>(await import("./chunks/rmdir-GOODLY5W.js")).rmdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-IBPHJBM3.js")).touchCommand},{name:"rm",load:async()=>(await import("./chunks/rm-2PKAWTSQ.js")).rmCommand},{name:"cp",load:async()=>(await import("./chunks/cp-XXWRVG2D.js")).cpCommand},{name:"mv",load:async()=>(await import("./chunks/mv-3ATZ2ABL.js")).mvCommand},{name:"ln",load:async()=>(await import("./chunks/ln-EFFNQ3RY.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-TYLTHXFR.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-L26WH2K4.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-VL3R4LAM.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-TJHLLIMR.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-YAUIERGN.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-SAOHEZYP.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-UEQ7KMY5.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-VX7MJMVN.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-VX7MJMVN.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-VX7MJMVN.js")).egrepCommand},{name:"rg",load:async()=>(await import("./chunks/rg-RSDLLECO.js")).rgCommand},{name:"sed",load:async()=>(await import("./chunks/sed-JPDTWF4W.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-GFEJOWML.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-KUHOCH5S.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-IXHB2FVS.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-CPIFQTKY.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-IHF6BEOO.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-FT6WBQZG.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-MBLEXZBI.js")).trCommand},{name:"rev",load:async()=>(await import("./chunks/rev-VP42N2JN.js")).rev},{name:"nl",load:async()=>(await import("./chunks/nl-DSM3NUGM.js")).nl},{name:"fold",load:async()=>(await import("./chunks/fold-452R4I2C.js")).fold},{name:"expand",load:async()=>(await import("./chunks/expand-77K5HH2M.js")).expand},{name:"unexpand",load:async()=>(await import("./chunks/unexpand-BFVYAPOU.js")).unexpand},{name:"strings",load:async()=>(await import("./chunks/strings-ZEKN6D4Q.js")).strings},{name:"split",load:async()=>(await import("./chunks/split-JJFZRWRC.js")).split},{name:"column",load:async()=>(await import("./chunks/column-TSFEMTG6.js")).column},{name:"join",load:async()=>(await import("./chunks/join-3IXMEGNA.js")).join},{name:"tee",load:async()=>(await import("./chunks/tee-ZFIT2GTM.js")).teeCommand},{name:"find",load:async()=>(await import("./chunks/find-PHDZK64M.js")).findCommand},{name:"basename",load:async()=>(await import("./chunks/basename-SO5MVUEX.js")).basenameCommand},{name:"dirname",load:async()=>(await import("./chunks/dirname-EES7TR26.js")).dirnameCommand},{name:"tree",load:async()=>(await import("./chunks/tree-DQBEJH47.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-XQPYLN3H.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-7A4MH7BJ.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-7A4MH7BJ.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-EGIS5LUE.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-EGIS5LUE.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-G5C2J2OY.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-IWT2HHEA.js")).xargsCommand},{name:"true",load:async()=>(await import("./chunks/true-OVATH2SQ.js")).trueCommand},{name:"false",load:async()=>(await import("./chunks/true-OVATH2SQ.js")).falseCommand},{name:"clear",load:async()=>(await import("./chunks/clear-CI7A5IXQ.js")).clearCommand},{name:"bash",load:async()=>(await import("./chunks/bash-PGDTHIM2.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-PGDTHIM2.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-RGZHJNXC.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-O7TCK5TL.js")).base64Command},{name:"diff",load:async()=>(await import("./chunks/diff-GI3QVUGD.js")).diffCommand},{name:"date",load:async()=>(await import("./chunks/date-IQLPMFYI.js")).dateCommand},{name:"sleep",load:async()=>(await import("./chunks/sleep-O5BOTJGJ.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-JED4EKFH.js")).timeoutCommand},{name:"time",load:async()=>(await import("./chunks/time-37F5EBPK.js")).timeCommand},{name:"seq",load:async()=>(await import("./chunks/seq-AVK43XM2.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-RMGXYNQJ.js")).exprCommand},{name:"md5sum",load:async()=>(await import("./chunks/md5sum-2VAAFCTS.js")).md5sumCommand},{name:"sha1sum",load:async()=>(await import("./chunks/sha1sum-67P4ME4N.js")).sha1sumCommand},{name:"sha256sum",load:async()=>(await import("./chunks/sha256sum-MV3WQ4QF.js")).sha256sumCommand},{name:"file",load:async()=>(await import("./chunks/file-6PCTL3MH.js")).fileCommand},{name:"html-to-markdown",load:async()=>(await import("./chunks/html-to-markdown-EPEXKI4B.js")).htmlToMarkdownCommand},{name:"help",load:async()=>(await import("./chunks/help-7C5JICNL.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-FCDFBOMN.js")).whichCommand},{name:"tac",load:async()=>(await import("./chunks/tac-KNRFDAY7.js")).tac},{name:"hostname",load:async()=>(await import("./chunks/hostname-WXDKRL2Z.js")).hostname},{name:"whoami",load:async()=>(await import("./chunks/whoami-JVLUNKSG.js")).whoami},{name:"od",load:async()=>(await import("./chunks/od-KRKGC2U3.js")).od},{name:"gzip",load:async()=>(await import("./chunks/gzip-YXK3WZQL.js")).gzipCommand},{name:"gunzip",load:async()=>(await import("./chunks/gzip-YXK3WZQL.js")).gunzipCommand},{name:"zcat",load:async()=>(await import("./chunks/gzip-YXK3WZQL.js")).zcatCommand}];(typeof __BROWSER__>"u"||!__BROWSER__)&&($e.push({name:"tar",load:async()=>(await import("./chunks/tar-LFENC54A.js")).tarCommand}),$e.push({name:"yq",load:async()=>(await import("./chunks/yq-PFV4T2PV.js")).yqCommand}),$e.push({name:"xan",load:async()=>(await import("./chunks/xan-5HNHTFMB.js")).xanCommand}),$e.push({name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-THMDBIGF.js")).sqlite3Command}),$e.push({name:"python3",load:async()=>(await import("./chunks/python3-JGT65AEB.js")).python3Command}),$e.push({name:"python",load:async()=>(await import("./chunks/python3-JGT65AEB.js")).pythonCommand}));var Or=[{name:"curl",load:async()=>(await import("./chunks/curl-TH7YRBSA.js")).curlCommand}],Xs=new Map;function Ys(e){return{name:e.name,async execute(t,s){let n=Xs.get(e.name);return n||(n=await e.load(),Xs.set(e.name,n)),n.execute(t,s)}}}function Qs(e){return(e?$e.filter(s=>e.includes(s.name)):$e).map(Ys)}function Js(){return Or.map(Ys)}function en(e){return"load"in e&&typeof e.load=="function"}function tn(e){let t=null;return{name:e.name,async execute(s,n){return t||(t=await e.load()),t.execute(s,n)}}}var Dr=new TextEncoder,Ir=new TextDecoder;function Oe(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 n=0;n<e.length;n+=2)s[n/2]=parseInt(e.slice(n,n+2),16);return s}return t==="binary"||t==="latin1"?Uint8Array.from(e,s=>s.charCodeAt(0)):Dr.encode(e)}function rt(e,t){return t==="base64"?btoa(String.fromCharCode(...e)):t==="hex"?Array.from(e).map(s=>s.toString(16).padStart(2,"0")).join(""):t==="binary"||t==="latin1"?String.fromCharCode(...e):Ir.decode(e)}function Se(e){if(e!=null)return typeof e=="string"?e:e.encoding??void 0}var it=new TextEncoder;function Tr(e){return typeof e=="object"&&e!==null&&!(e instanceof Uint8Array)&&"content"in e}var Me=class{data=new Map;constructor(t){if(this.data.set("/",{type:"directory",mode:493,mtime:new Date}),t)for(let[s,n]of Object.entries(t))Tr(n)?this.writeFileSync(s,n.content,void 0,{mode:n.mode,mtime:n.mtime}):this.writeFileSync(s,n)}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let n=s.split("/").filter(i=>i&&i!=="."),r=[];for(let i of n)i===".."?r.pop():r.push(i);return`/${r.join("/")}`||"/"}dirname(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.lastIndexOf("/");return n===0?"/":s.slice(0,n)}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,n,r){let i=this.normalizePath(t);this.ensureParentDirs(i);let o=Se(n),a=Oe(s,o);this.data.set(i,{type:"file",content:a,mode:r?.mode??420,mtime:r?.mtime??new Date})}async readFile(t,s){let n=await this.readFileBuffer(t),r=Se(s);return rt(n,r)}async readFileBuffer(t){let s=this.resolvePathWithSymlinks(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, open '${t}'`);if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return n.content instanceof Uint8Array?n.content:it.encode(n.content)}async writeFile(t,s,n){this.writeFileSync(t,s,n)}async appendFile(t,s,n){let r=this.normalizePath(t),i=this.data.get(r);if(i&&i.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${t}'`);let o=Se(n),a=Oe(s,o);if(i?.type==="file"){let l=i.content instanceof Uint8Array?i.content:it.encode(i.content),c=new Uint8Array(l.length+a.length);c.set(l),c.set(a,l.length),this.data.set(r,{type:"file",content:c,mode:i.mode,mtime:new Date})}else this.writeFileSync(t,s,n)}async exists(t){try{let s=this.resolvePathWithSymlinks(t);return this.data.has(s)}catch{return!1}}async stat(t){let s=this.resolvePathWithSymlinks(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let r=0;return n.type==="file"&&n.content&&(n.content instanceof Uint8Array?r=n.content.length:r=it.encode(n.content).length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:r,mtime:n.mtime||new Date}}async lstat(t){let s=this.resolveIntermediateSymlinks(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);if(n.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:n.mode,size:n.target.length,mtime:n.mtime||new Date};let r=0;return n.type==="file"&&n.content&&(n.content instanceof Uint8Array?r=n.content.length:r=it.encode(n.content).length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:r,mtime:n.mtime||new Date}}resolveSymlink(t,s){if(s.startsWith("/"))return this.normalizePath(s);let n=this.dirname(t);return this.normalizePath(n==="/"?`/${s}`:`${n}/${s}`)}resolveIntermediateSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.slice(1).split("/");if(n.length<=1)return s;let r="",i=new Set;for(let o=0;o<n.length-1;o++){let a=n[o];r=`${r}/${a}`;let l=this.data.get(r),c=0,f=40;for(;l&&l.type==="symlink"&&c<f;){if(i.has(r))throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`);i.add(r),r=this.resolveSymlink(r,l.target),l=this.data.get(r),c++}if(c>=f)throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`)}return`${r}/${n[n.length-1]}`}resolvePathWithSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.slice(1).split("/"),r="",i=new Set;for(let o of n){r=`${r}/${o}`;let a=this.data.get(r),l=0,c=40;for(;a&&a.type==="symlink"&&l<c;){if(i.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);i.add(r),r=this.resolveSymlink(r,a.target),a=this.data.get(r),l++}if(l>=c)throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`)}return r}async mkdir(t,s){this.mkdirSync(t,s)}mkdirSync(t,s){let n=this.normalizePath(t);if(this.data.has(n)){if(this.data.get(n)?.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 r=this.dirname(n);if(r!=="/"&&!this.data.has(r))if(s?.recursive)this.mkdirSync(r,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.data.set(n,{type:"directory",mode:493,mtime:new Date})}async readdir(t){return(await this.readdirWithFileTypes(t)).map(n=>n.name)}async readdirWithFileTypes(t){let s=this.normalizePath(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let r=new Set;for(;n&&n.type==="symlink";){if(r.has(s))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);r.add(s),s=this.resolveSymlink(s,n.target),n=this.data.get(s)}if(!n)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);if(n.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),f=c.split("/")[0];f&&!c.includes("/",f.length)&&!o.has(f)&&o.set(f,{name:f,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){let n=this.normalizePath(t),r=this.data.get(n);if(!r){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}if(r.type==="directory"){let i=await this.readdir(n);if(i.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let o of i){let a=n==="/"?`/${o}`:`${n}/${o}`;await this.rm(a,s)}}}this.data.delete(n)}async cp(t,s,n){let r=this.normalizePath(t),i=this.normalizePath(s),o=this.data.get(r);if(!o)throw new Error(`ENOENT: no such file or directory, cp '${t}'`);if(o.type==="file")this.ensureParentDirs(i),this.data.set(i,{...o});else if(o.type==="directory"){if(!n?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let a=await this.readdir(r);for(let l of a){let c=r==="/"?`/${l}`:`${r}/${l}`,f=i==="/"?`/${l}`:`${i}/${l}`;await this.cp(c,f,n)}}}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 n=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(n)}async chmod(t,s){let n=this.normalizePath(t),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);r.mode=s}async symlink(t,s){let n=this.normalizePath(s);if(this.data.has(n))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(n),this.data.set(n,{type:"symlink",target:t,mode:511,mtime:new Date})}async link(t,s){let n=this.normalizePath(t),r=this.normalizePath(s),i=this.data.get(n);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(r))throw new Error(`EEXIST: file already exists, link '${s}'`);this.ensureParentDirs(r),this.data.set(r,{type:"file",content:i.content,mode:i.mode,mtime:i.mtime})}async readlink(t){let s=this.normalizePath(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(n.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return n.target}async realpath(t){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,n){let r=this.normalizePath(t),i=this.resolvePathWithSymlinks(r),o=this.data.get(i);if(!o)throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);o.mtime=n}};function xr(e){let t=e;return typeof t.mkdirSync=="function"&&typeof t.writeFileSync=="function"}function Rr(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 Lr(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 Wr(e){e.mkdirSync("/proc/self/fd",{recursive:!0}),e.writeFileSync("/proc/version",`${Ls}
|
|
3
3
|
`),e.writeFileSync("/proc/self/exe","/bin/bash"),e.writeFileSync("/proc/self/cmdline","bash\0"),e.writeFileSync("/proc/self/comm",`bash
|
|
4
|
-
`),e.writeFileSync("/proc/self/status",Ws()),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 sn(e,t){xr(e)&&(Rr(e,t),Lr(e),Wr(e))}var Fr=["allexport","errexit","noglob","noclobber","noexec","nounset","pipefail","posix","verbose","xtrace"],Mr=["braceexpand","hashall","interactive-comments"];function Wt(e){let t=[],s=[...Mr.map(n=>({name:n,enabled:!0})),...Fr.map(n=>({name:n,enabled:e[n]}))].sort((n,r)=>n.name.localeCompare(r.name));for(let n of s)n.enabled&&t.push(n.name);return t.join(":")}function De(e){e.state.env.SHELLOPTS=Wt(e.state.options)}var zr=["dotglob","expand_aliases","extglob","failglob","globskipdots","globstar","lastpipe","nocaseglob","nocasematch","nullglob","xpg_echo"];function Ft(e){let t=[];for(let s of zr)e[s]&&t.push(s);return t.join(":")}function Mt(e){e.state.env.BASHOPTS=Ft(e.state.shoptOptions)}var Vr="BASH_ALIAS_";function nn(e){return e.parts.length!==1?!1:e.parts[0].type==="Literal"}function rn(e){if(e.parts.length!==1)return null;let t=e.parts[0];return t.type==="Literal"?t.value:null}function on(e,t){return e.env[`${Vr}${t}`]}function zt(e,t,s){if(!t.name||!nn(t.name))return t;let n=rn(t.name);if(!n)return t;let r=on(e,n);if(!r||s.has(n))return t;try{s.add(n);let i=new M,o=r,a=r.endsWith(" ");if(!a)for(let u of t.args){let d=ln(u);o+=` ${d}`}let l;try{l=i.parse(o)}catch(u){if(u instanceof et)throw u;return t}if(l.statements.length!==1||l.statements[0].pipelines.length!==1||l.statements[0].pipelines[0].commands.length!==1)return an(t,r);let c=l.statements[0].pipelines[0].commands[0];if(c.type!=="SimpleCommand")return an(t,r);let f={...c,assignments:[...t.assignments,...c.assignments],redirections:[...c.redirections,...t.redirections],line:t.line};if(a&&t.args.length>0&&(f={...f,args:[...f.args,...t.args]},f.args.length>0)){let u=f.args[0];if(nn(u)){let d=rn(u);if(d&&on(e,d)){let h={type:"SimpleCommand",name:u,args:f.args.slice(1),assignments:[],redirections:[]},m=zt(e,h,s);m!==h&&(f={...f,name:m.name,args:[...m.args]})}}}return f}catch(i){throw s.delete(n),i}}function an(e,t){let s=t;for(let o of e.args){let a=ln(o);s+=` ${a}`}let n=new M,r=n.parseWordFromString("eval",!1,!1),i=n.parseWordFromString(`'${s.replace(/'/g,"'\\''")}'`,!1,!1);return{type:"SimpleCommand",name:r,args:[i],assignments:e.assignments,redirections:e.redirections,line:e.line}}function ln(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(n=>n.type==="Literal"?n.value:`$${n.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 cn(e,t){let s=t.parts.map(f=>f.type==="Literal"?f.value:"\0").join(""),n=s.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);if(!n||!s.endsWith(")"))return null;let r=n[1],i=[],o=!1,a="",l=!1;for(let f of t.parts)if(f.type==="Literal"){let u=f.value;if(!o){let d=u.indexOf("=(");d!==-1&&(o=!0,u=u.slice(d+2))}if(o){u.endsWith(")")&&(u=u.slice(0,-1));let d=u.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(f.type==="BraceExpansion")if(/^\[.+\]=/.test(a))a+=tt({type:"Word",parts:[f]});else{(a||l)&&(i.push(a),a="",l=!1);let d=await de(e,{type:"Word",parts:[f]});i.push(...d.values)}else{(f.type==="SingleQuoted"||f.type==="DoubleQuoted"||f.type==="Escaped")&&(l=!0);let u=await I(e,{type:"Word",parts:[f]});a+=u}(a||l)&&i.push(a);let c=i.map(f=>/^\[.+\]=/.test(f)?f:f===""?"''":/[\s"'\\$`!*?[\]{}|&;<>()]/.test(f)&&!f.startsWith("'")&&!f.startsWith('"')?`'${f.replace(/'/g,"'\\''")}'`:f);return`${r}=(${c.join(" ")})`}async function fn(e,t){let s=-1,n=-1,r=!1;for(let p=0;p<t.parts.length;p++){let g=t.parts[p];if(g.type==="Literal"){let b=g.value.indexOf("+=");if(b!==-1){let N=g.value.slice(0,b);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(N)){s=p,n=b,r=!0;break}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(N)){s=p,n=b,r=!0;break}}let $=g.value.indexOf("=");if($!==-1&&($===0||g.value[$-1]!=="+")){let N=g.value.slice(0,$);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(N)||/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(N)){s=p,n=$;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=r?2:1,l=o.value.slice(0,n),c=o.value.slice(n+a),f=t.parts.slice(s+1),u="";for(let p of i)u+=await I(e,{type:"Word",parts:[p]});u+=l;let d={type:"Word",parts:c!==""?[{type:"Literal",value:c},...f]:f},h=d.parts.length>0?await I(e,d):"";return`${u}${r?"+=":"="}${h}`}var jr=["tar","yq","xan","sqlite3"];function un(e){return jr.includes(e)}var L=Object.freeze({stdout:"",stderr:"",exitCode:0});function W(e=""){return{stdout:e,stderr:"",exitCode:0}}function S(e,t=1){return{stdout:"",stderr:e,exitCode:t}}function _(e,t,s){return{stdout:e,stderr:t,exitCode:s}}function U(e){return{stdout:"",stderr:"",exitCode:e?0:1}}function ge(e,t,s="",n=""){throw new ee(e,t,s,n)}function Vt(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new
|
|
4
|
+
`),e.writeFileSync("/proc/self/status",Ws()),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 sn(e,t){xr(e)&&(Rr(e,t),Lr(e),Wr(e))}var Fr=["allexport","errexit","noglob","noclobber","noexec","nounset","pipefail","posix","verbose","xtrace"],Mr=["braceexpand","hashall","interactive-comments"];function Wt(e){let t=[],s=[...Mr.map(n=>({name:n,enabled:!0})),...Fr.map(n=>({name:n,enabled:e[n]}))].sort((n,r)=>n.name.localeCompare(r.name));for(let n of s)n.enabled&&t.push(n.name);return t.join(":")}function De(e){e.state.env.SHELLOPTS=Wt(e.state.options)}var zr=["dotglob","expand_aliases","extglob","failglob","globskipdots","globstar","lastpipe","nocaseglob","nocasematch","nullglob","xpg_echo"];function Ft(e){let t=[];for(let s of zr)e[s]&&t.push(s);return t.join(":")}function Mt(e){e.state.env.BASHOPTS=Ft(e.state.shoptOptions)}var Vr="BASH_ALIAS_";function nn(e){return e.parts.length!==1?!1:e.parts[0].type==="Literal"}function rn(e){if(e.parts.length!==1)return null;let t=e.parts[0];return t.type==="Literal"?t.value:null}function on(e,t){return e.env[`${Vr}${t}`]}function zt(e,t,s){if(!t.name||!nn(t.name))return t;let n=rn(t.name);if(!n)return t;let r=on(e,n);if(!r||s.has(n))return t;try{s.add(n);let i=new M,o=r,a=r.endsWith(" ");if(!a)for(let u of t.args){let d=ln(u);o+=` ${d}`}let l;try{l=i.parse(o)}catch(u){if(u instanceof et)throw u;return t}if(l.statements.length!==1||l.statements[0].pipelines.length!==1||l.statements[0].pipelines[0].commands.length!==1)return an(t,r);let c=l.statements[0].pipelines[0].commands[0];if(c.type!=="SimpleCommand")return an(t,r);let f={...c,assignments:[...t.assignments,...c.assignments],redirections:[...c.redirections,...t.redirections],line:t.line};if(a&&t.args.length>0&&(f={...f,args:[...f.args,...t.args]},f.args.length>0)){let u=f.args[0];if(nn(u)){let d=rn(u);if(d&&on(e,d)){let h={type:"SimpleCommand",name:u,args:f.args.slice(1),assignments:[],redirections:[]},m=zt(e,h,s);m!==h&&(f={...f,name:m.name,args:[...m.args]})}}}return f}catch(i){throw s.delete(n),i}}function an(e,t){let s=t;for(let o of e.args){let a=ln(o);s+=` ${a}`}let n=new M,r=n.parseWordFromString("eval",!1,!1),i=n.parseWordFromString(`'${s.replace(/'/g,"'\\''")}'`,!1,!1);return{type:"SimpleCommand",name:r,args:[i],assignments:e.assignments,redirections:e.redirections,line:e.line}}function ln(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(n=>n.type==="Literal"?n.value:`$${n.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 cn(e,t){let s=t.parts.map(f=>f.type==="Literal"?f.value:"\0").join(""),n=s.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);if(!n||!s.endsWith(")"))return null;let r=n[1],i=[],o=!1,a="",l=!1;for(let f of t.parts)if(f.type==="Literal"){let u=f.value;if(!o){let d=u.indexOf("=(");d!==-1&&(o=!0,u=u.slice(d+2))}if(o){u.endsWith(")")&&(u=u.slice(0,-1));let d=u.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(f.type==="BraceExpansion")if(/^\[.+\]=/.test(a))a+=tt({type:"Word",parts:[f]});else{(a||l)&&(i.push(a),a="",l=!1);let d=await de(e,{type:"Word",parts:[f]});i.push(...d.values)}else{(f.type==="SingleQuoted"||f.type==="DoubleQuoted"||f.type==="Escaped")&&(l=!0);let u=await I(e,{type:"Word",parts:[f]});a+=u}(a||l)&&i.push(a);let c=i.map(f=>/^\[.+\]=/.test(f)?f:f===""?"''":/[\s"'\\$`!*?[\]{}|&;<>()]/.test(f)&&!f.startsWith("'")&&!f.startsWith('"')?`'${f.replace(/'/g,"'\\''")}'`:f);return`${r}=(${c.join(" ")})`}async function fn(e,t){let s=-1,n=-1,r=!1;for(let p=0;p<t.parts.length;p++){let g=t.parts[p];if(g.type==="Literal"){let b=g.value.indexOf("+=");if(b!==-1){let N=g.value.slice(0,b);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(N)){s=p,n=b,r=!0;break}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(N)){s=p,n=b,r=!0;break}}let $=g.value.indexOf("=");if($!==-1&&($===0||g.value[$-1]!=="+")){let N=g.value.slice(0,$);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(N)||/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(N)){s=p,n=$;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=r?2:1,l=o.value.slice(0,n),c=o.value.slice(n+a),f=t.parts.slice(s+1),u="";for(let p of i)u+=await I(e,{type:"Word",parts:[p]});u+=l;let d={type:"Word",parts:c!==""?[{type:"Literal",value:c},...f]:f},h=d.parts.length>0?await I(e,d):"";return`${u}${r?"+=":"="}${h}`}var jr=["tar","yq","xan","sqlite3","python3","python"];function un(e){return jr.includes(e)}var L=Object.freeze({stdout:"",stderr:"",exitCode:0});function W(e=""){return{stdout:e,stderr:"",exitCode:0}}function S(e,t=1){return{stdout:"",stderr:e,exitCode:t}}function _(e,t,s){return{stdout:e,stderr:t,exitCode:s}}function U(e){return{stdout:"",stderr:"",exitCode:e?0:1}}function ge(e,t,s="",n=""){throw new ee(e,t,s,n)}function Vt(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new ve;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 n=Number.parseInt(t[0],10);if(Number.isNaN(n)||n<1)throw new z(128,"",`bash: break: ${t[0]}: numeric argument required
|
|
6
6
|
`);s=n}throw new ne(s)}async function jt(e,t){let s,n=!1,r=!1,i=0;for(;i<t.length;)if(t[i]==="--"){i++;break}else if(t[i]==="-L")r=!1,i++;else if(t[i]==="-P")r=!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.HOME||"/":o[0]==="-"?(s=e.state.previousDir,n=!0):s=o[0],!s.startsWith("/")&&!s.startsWith("./")&&!s.startsWith("../")&&s!=="."&&s!==".."){let u=e.state.env.CDPATH;if(u){let d=u.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,n=!0;break}}catch{}}}}let l=(s.startsWith("/")?s:`${e.state.cwd}/${s}`).split("/").filter(u=>u&&u!=="."),c="";for(let u of l)if(u==="..")c=c.split("/").slice(0,-1).join("/")||"/";else{c=c?`${c}/${u}`:`/${u}`;try{if(!(await e.fs.stat(c)).isDirectory)return S(`bash: cd: ${s}: Not a directory
|
|
7
7
|
`)}catch{return S(`bash: cd: ${s}: No such file or directory
|
|
8
8
|
`)}}let f=c||"/";if(r)try{f=await e.fs.realpath(f)}catch{}return e.state.previousDir=e.state.cwd,e.state.cwd=f,e.state.env.PWD=e.state.cwd,e.state.env.OLDPWD=e.state.previousDir,W(n?`${f}
|
|
9
9
|
`:"")}function Bt(e,t){return e.fs.resolvePath(e.state.cwd,t)}var Br=["-e","-a","-f","-d","-r","-w","-x","-s","-L","-h","-k","-g","-u","-G","-O","-b","-c","-p","-S","-t","-N"];function ot(e){return Br.includes(e)}async function at(e,t,s){let n=Bt(e,s);switch(t){case"-e":case"-a":return e.fs.exists(n);case"-f":return await e.fs.exists(n)?(await e.fs.stat(n)).isFile:!1;case"-d":return await e.fs.exists(n)?(await e.fs.stat(n)).isDirectory:!1;case"-r":return await e.fs.exists(n)?((await e.fs.stat(n)).mode&256)!==0:!1;case"-w":return await e.fs.exists(n)?((await e.fs.stat(n)).mode&128)!==0:!1;case"-x":return await e.fs.exists(n)?((await e.fs.stat(n)).mode&64)!==0:!1;case"-s":return await e.fs.exists(n)?(await e.fs.stat(n)).size>0:!1;case"-L":case"-h":try{return(await e.fs.lstat(n)).isSymbolicLink}catch{return!1}case"-k":return await e.fs.exists(n)?((await e.fs.stat(n)).mode&512)!==0:!1;case"-g":return await e.fs.exists(n)?((await e.fs.stat(n)).mode&1024)!==0:!1;case"-u":return await e.fs.exists(n)?((await e.fs.stat(n)).mode&2048)!==0:!1;case"-G":case"-O":return e.fs.exists(n);case"-b":return!1;case"-c":return["/dev/null","/dev/zero","/dev/random","/dev/urandom","/dev/tty","/dev/stdin","/dev/stdout","/dev/stderr"].some(i=>n===i||n.endsWith(i));case"-p":return!1;case"-S":return!1;case"-t":return!1;case"-N":return e.fs.exists(n);default:return!1}}var Hr=["-nt","-ot","-ef"];function lt(e){return Hr.includes(e)}async function ct(e,t,s,n){let r=Bt(e,s),i=Bt(e,n);switch(t){case"-nt":try{let o=await e.fs.stat(r),a=await e.fs.stat(i);return o.mtime>a.mtime}catch{return!1}case"-ot":try{let o=await e.fs.stat(r),a=await e.fs.stat(i);return o.mtime<a.mtime}catch{return!1}case"-ef":try{if(!await e.fs.exists(r)||!await e.fs.exists(i))return!1;let o=e.fs.resolvePath(e.state.cwd,r),a=e.fs.resolvePath(e.state.cwd,i);return o===a}catch{return!1}default:return!1}}var Ur=new Set(["-eq","-ne","-lt","-le","-gt","-ge"]);function ft(e){return Ur.has(e)}function ut(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 ze(e){return e==="="||e==="=="||e==="!="}function dt(e,t,s,n=!1,r=!1,i=!1){if(n){let a=Ie(t,s,r,i);return e==="!="?!a:a}if(r){let a=t.toLowerCase()===s.toLowerCase();return e==="!="?!a:a}let o=t===s;return e==="!="?!o:o}var qr=new Set(["-z","-n"]);function ht(e){return qr.has(e)}function pt(e,t){switch(e){case"-z":return t==="";case"-n":return t!==""}}async function mt(e,t){let s=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(s){let n=s[1],r=s[2];if(e.state.associativeArrays?.has(n)){let a=r;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[c]||""),`${n}_${a}`in e.state.env}let o;try{let a=new M,l=q(a,r);o=await V(e,l.expression)}catch{if(/^-?\d+$/.test(r))o=Number.parseInt(r,10);else{let a=e.state.env[r];o=a?Number.parseInt(a,10):0}}if(o<0){let a=Q(e,n),l=e.state.currentLine;if(a.length===0)return e.state.expansionStderr=(e.state.expansionStderr||"")+`bash: line ${l}: ${n}: 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}: ${n}: bad array subscript
|
|
11
|
-
`,!1}return`${n}_${o}`in e.state.env}return t in e.state.env?!0:e.state.associativeArrays?.has(t)?
|
|
11
|
+
`,!1}return`${n}_${o}`in e.state.env}return t in e.state.env?!0:e.state.associativeArrays?.has(t)?be(e,t).length>0:Q(e,t).length>0}async function Ae(e,t){switch(t.type){case"CondBinary":{let s=await I(e,t.left),n=t.right.parts.length>0&&t.right.parts.every(i=>i.type==="SingleQuoted"||i.type==="DoubleQuoted"||i.type==="Escaped"&&t.operator!=="=~"),r;if(t.operator==="=~")if(n){let i=await I(e,t.right);r=qs(i)}else r=await Gs(e,t.right);else ze(t.operator)&&!n?r=await Ks(e,t.right):r=await I(e,t.right);if(ze(t.operator)){let i=e.state.shoptOptions.nocasematch;return dt(t.operator,s,r,!n,i,!0)}if(ft(t.operator))return ut(t.operator,await hn(e,s),await hn(e,r));if(lt(t.operator))return ct(e,t.operator,s,r);switch(t.operator){case"=~":try{let i=e.state.shoptOptions.nocasematch,o=Xr(r),a=new RegExp(o,i?"i":""),l=s.match(a);if(ue(e,"BASH_REMATCH"),l)for(let c=0;c<l.length;c++)e.state.env[`BASH_REMATCH_${c}`]=l[c]||"";return l!==null}catch{throw new Error("syntax error in regular expression")}case"<":return s<r;case">":return s>r;default:return!1}}case"CondUnary":{let s=await I(e,t.operand);return ot(t.operator)?at(e,t.operator,s):ht(t.operator)?pt(t.operator,s):t.operator==="-v"?await mt(e,s):t.operator==="-o"?Ut(e,s):!1}case"CondNot":return e.state.shoptOptions.extglob&&t.operand.type==="CondGroup"&&t.operand.expression.type==="CondWord"?`!(${await I(e,t.operand.expression.word)})`!=="":!await Ae(e,t.operand);case"CondAnd":return await Ae(e,t.left)?await Ae(e,t.right):!1;case"CondOr":return await Ae(e,t.left)?!0:await Ae(e,t.right);case"CondGroup":return await Ae(e,t.expression);case"CondWord":return await I(e,t.word)!=="";default:return!1}}async function Ve(e,t){if(t.length===0)return _("","",1);if(t.length===1)return U(!!t[0]);if(t.length===2){let n=t[0],r=t[1];return n==="("?S(`test: '(' without matching ')'
|
|
12
12
|
`,2):ot(n)?U(await at(e,n,r)):ht(n)?U(pt(n,r)):n==="!"?U(!r):n==="-v"?U(await mt(e,r)):n==="-o"?U(Ut(e,r)):n==="="||n==="=="||n==="!="||n==="<"||n===">"||n==="-eq"||n==="-ne"||n==="-lt"||n==="-le"||n==="-gt"||n==="-ge"||n==="-nt"||n==="-ot"||n==="-ef"?S(`test: ${n}: unary operator expected
|
|
13
13
|
`,2):_("","",1)}if(t.length===3){let n=t[0],r=t[1],i=t[2];if(ze(r))return U(dt(r,n,i));if(ft(r)){let o=yt(n),a=yt(i);return!o.valid||!a.valid?_("","",2):U(ut(r,o.value,a.value))}if(lt(r))return U(await ct(e,r,n,i));switch(r){case"-a":return U(n!==""&&i!=="");case"-o":return U(n!==""||i!=="");case">":return U(n>i);case"<":return U(n<i)}if(n==="!"){let o=await Ve(e,[r,i]);return _("",o.stderr,o.exitCode===0?1:o.exitCode===1?0:o.exitCode)}if(n==="("&&i===")")return U(r!=="")}if(t.length===4){if(t[0]==="!"){let n=await Ve(e,t.slice(1));return _("",n.stderr,n.exitCode===0?1:n.exitCode===1?0:n.exitCode)}if(t[0]==="("&&t[3]===")")return Ve(e,[t[1],t[2]])}let s=await mn(e,t,0);return s.pos<t.length?S(`test: too many arguments
|
|
14
14
|
`,2):U(s.value)}async function mn(e,t,s){return Zr(e,t,s)}async function Zr(e,t,s){let{value:n,pos:r}=await dn(e,t,s);for(;t[r]==="-o";){let i=await dn(e,t,r+1);n=n||i.value,r=i.pos}return{value:n,pos:r}}async function dn(e,t,s){let{value:n,pos:r}=await Ht(e,t,s);for(;t[r]==="-a";){let i=await Ht(e,t,r+1);n=n&&i.value,r=i.pos}return{value:n,pos:r}}async function Ht(e,t,s){if(t[s]==="!"){let{value:n,pos:r}=await Ht(e,t,s+1);return{value:!n,pos:r}}return Gr(e,t,s)}async function Gr(e,t,s){let n=t[s];if(n==="("){let{value:i,pos:o}=await mn(e,t,s+1);return{value:i,pos:t[o]===")"?o+1:o}}let r=t[s+1];if(ze(r)){let i=n,o=t[s+2]??"";return{value:dt(r,i,o),pos:s+3}}if(ft(r)){let i=yt(n),o=yt(t[s+2]??"0");return!i.valid||!o.valid?{value:!1,pos:s+3}:{value:ut(r,i.value,o.value),pos:s+3}}if(lt(r)){let i=n,o=t[s+2]??"";return{value:await ct(e,r,i,o),pos:s+3}}if(ot(n)){let i=t[s+1]??"";return{value:await at(e,n,i),pos:s+2}}if(ht(n)){let i=t[s+1]??"";return{value:pt(n,i),pos:s+2}}if(n==="-v"){let i=t[s+1]??"";return{value:await mt(e,i),pos:s+2}}if(n==="-o"){let i=t[s+1]??"";return{value:Ut(e,i),pos:s+2}}return{value:n!==void 0&&n!=="",pos:s+1}}function Ie(e,t,s=!1,n=!1){let r=`^${yn(t,n)}$`,i=s?"is":"s";return new RegExp(r,i).test(e)}function yn(e,t){let s="";for(let n=0;n<e.length;n++){let r=e[n];if(t&&(r==="@"||r==="*"||r==="+"||r==="?"||r==="!")&&n+1<e.length&&e[n+1]==="("){let i=gn(e,n+1);if(i!==-1){let o=e.slice(n+2,i),a=wn(o),l=a.map(f=>yn(f,t)),c=l.length>0?l.join("|"):"(?:)";if(r==="@")s+=`(?:${c})`;else if(r==="*")s+=`(?:${c})*`;else if(r==="+")s+=`(?:${c})+`;else if(r==="?")s+=`(?:${c})?`;else if(r==="!")if(i<e.length-1){let u=a.map(h=>vn(h,t));if(u.every(h=>h!==null)&&u.every(h=>h===u[0])&&u[0]!==null){let h=u[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})$).*`;n=i;continue}}if(r==="\\")if(n+1<e.length){let i=e[n+1];/[\\^$.|+(){}[\]*?]/.test(i)?s+=`\\${i}`:s+=i,n++}else s+="\\\\";else if(r==="*")s+=".*";else if(r==="?")s+=".";else if(r==="["){let i=e.indexOf("]",n+1);i!==-1?(s+=e.slice(n,i+1),n=i):s+="\\["}else/[\\^$.|+(){}]/.test(r)?s+=`\\${r}`:s+=r}return s}function gn(e,t){let s=1,n=t+1;for(;n<e.length&&s>0;){let r=e[n];if(r==="\\"){n+=2;continue}if(r==="(")s++;else if(r===")"&&(s--,s===0))return n;n++}return-1}function wn(e){let t=[],s="",n=0,r=0;for(;r<e.length;){let i=e[r];if(i==="\\"){s+=i,r+1<e.length?(s+=e[r+1],r+=2):r++;continue}i==="("?(n++,s+=i):i===")"?(n--,s+=i):i==="|"&&n===0?(t.push(s),s=""):s+=i,r++}return t.push(s),t}function vn(e,t){let s=0,n=0;for(;n<e.length;){let r=e[n];if(t&&(r==="@"||r==="*"||r==="+"||r==="?"||r==="!")&&n+1<e.length&&e[n+1]==="("){let i=gn(e,n+1);if(i!==-1){if(r==="@"){let o=e.slice(n+2,i),l=wn(o).map(c=>vn(c,t));if(l.every(c=>c!==null)&&l.every(c=>c===l[0])){s+=l[0],n=i+1;continue}return null}return null}}if(r==="*")return null;if(r==="?"){s+=1,n++;continue}if(r==="["){let i=e.indexOf("]",n+1);if(i!==-1){s+=1,n=i+1;continue}s+=1,n++;continue}if(r==="\\"){s+=1,n+=2;continue}s+=1,n++}return s}function Ut(e,t){let n={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}[t];return n?n():!1}async function hn(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 pn(t);try{let s=new M,n=q(s,t);return await V(e,n.expression)}catch{return pn(t)}}function Kr(e,t){let s=0;for(let n of e){let r;if(n>="0"&&n<="9")r=n.charCodeAt(0)-48;else if(n>="a"&&n<="z")r=n.charCodeAt(0)-97+10;else if(n>="A"&&n<="Z")r=n.charCodeAt(0)-65+36;else if(n==="@")r=62;else if(n==="_")r=63;else return Number.NaN;if(r>=t)return Number.NaN;s=s*t+r}return s}function pn(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,n=e.match(/^(\d+)#([a-zA-Z0-9@_]+)$/);if(n){let r=Number.parseInt(n[1],10);r>=2&&r<=64?s=Kr(n[2],r):s=0}else/^0[xX][0-9a-fA-F]+$/.test(e)?s=Number.parseInt(e,16):/^0[0-7]+$/.test(e)?s=Number.parseInt(e,8):s=Number.parseInt(e,10);return Number.isNaN(s)&&(s=0),t?-s:s}function yt(e){if(e=e.trim(),e==="")return{value:0,valid:!0};let t=!1;if(e.startsWith("-")?(t=!0,e=e.slice(1)):e.startsWith("+")&&(e=e.slice(1)),!/^\d+$/.test(e))return{value:0,valid:!1};let s=Number.parseInt(e,10);return Number.isNaN(s)?{value:0,valid:!1}:{value:t?-s:s,valid:!0}}function Xr(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 n=Yr(e,s);t+=n.converted,s=n.endIndex}else t+=e[s],s++;return t}function Yr(e,t){let s=t+1,n="[";s<e.length&&(e[s]==="^"||e[s]==="!")&&(n+="^",s++);let r=!1;s<e.length&&e[s]==="]"&&(r=!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 f=e.slice(s+2,c);o+=Qr(f),s=c+2;continue}}if(l==="["&&s+1<e.length){let c=e[s+1];if(c==="."||c==="="){let f=`${c}]`,u=e.indexOf(f,s+2);if(u!==-1){let d=e.slice(s+2,u);o+=d,s=u+2;continue}}}if(l==="\\"&&s+1<e.length){o+=l+e[s+1],s+=2;continue}o+=l,s++}return a?(r&&(n+="\\]"),i&&(n+="\\["),n+=o,n+="]",{converted:n,endIndex:s}):{converted:"\\[",endIndex:t+1}}function Qr(e){return{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"}[e]??""}function he(e){let t=[],s="",n=!1,r=!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==="'"&&!r){n||(o=!0),n=!n;continue}if(a==='"'&&!n){r||(o=!0),r=!r;continue}if((a===" "||a===" "||a===`
|
|
15
|
-
`)&&!n&&!r){o&&(t.push(s),s="",o=!1);continue}s+=a,o=!0}return o&&t.push(s),t}function gt(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 n="";if(e[s]==="'"||e[s]==='"'){let i=e[s];for(s++;s<e.length&&e[s]!==i;)n+=e[s],s++;e[s]===i&&s++}else for(;s<e.length&&e[s]!=="]"&&e[s]!=="=";)n+=e[s],s++;for(;s<e.length&&e[s]!=="]";)s++;if(e[s]==="]"&&s++,e[s]!=="=")continue;s++;let r="";if(e[s]==="'"||e[s]==='"'){let i=e[s];for(s++;s<e.length&&e[s]!==i;)e[s]==="\\"&&s+1<e.length&&s++,r+=e[s],s++;e[s]===i&&s++}else for(;s<e.length&&!/\s/.test(e[s]);)r+=e[s],s++;t.push([n,r])}return t}function bn(e){let t=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(t)return{name:t[1],isArray:!0,arrayElements:he(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 n=e.indexOf("=");return{name:e.slice(0,n),isArray:!1,value:e.slice(n+1)}}return{name:e,isArray:!1}}async function Jr(e,t){try{let s=new M,n=q(s,t);return await V(e,n.expression)}catch{let s=parseInt(t,10);return Number.isNaN(s)?0:s}}async function En(e,t,s={}){let{name:n,isArray:r,arrayElements:i,value:o,arrayIndex:a}=t,{makeReadonly:l=!1,checkReadonly:c=!0}=s;if(c){let f=K(e,n);if(f)return f}if(r&&i){for(let f=0;f<i.length;f++)e.state.env[`${n}_${f}`]=i[f];e.state.env[`${n}__length`]=String(i.length)}else if(a!==void 0&&o!==void 0){let f=await Jr(e,a);e.state.env[`${n}_${f}`]=o;let u=parseInt(e.state.env[`${n}__length`]??"0",10);f>=u&&(e.state.env[`${n}__length`]=String(f+1))}else o!==void 0&&(e.state.env[n]=o);return l&&se(e,n),null}function
|
|
15
|
+
`)&&!n&&!r){o&&(t.push(s),s="",o=!1);continue}s+=a,o=!0}return o&&t.push(s),t}function gt(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 n="";if(e[s]==="'"||e[s]==='"'){let i=e[s];for(s++;s<e.length&&e[s]!==i;)n+=e[s],s++;e[s]===i&&s++}else for(;s<e.length&&e[s]!=="]"&&e[s]!=="=";)n+=e[s],s++;for(;s<e.length&&e[s]!=="]";)s++;if(e[s]==="]"&&s++,e[s]!=="=")continue;s++;let r="";if(e[s]==="'"||e[s]==='"'){let i=e[s];for(s++;s<e.length&&e[s]!==i;)e[s]==="\\"&&s+1<e.length&&s++,r+=e[s],s++;e[s]===i&&s++}else for(;s<e.length&&!/\s/.test(e[s]);)r+=e[s],s++;t.push([n,r])}return t}function bn(e){let t=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(t)return{name:t[1],isArray:!0,arrayElements:he(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 n=e.indexOf("=");return{name:e.slice(0,n),isArray:!1,value:e.slice(n+1)}}return{name:e,isArray:!1}}async function Jr(e,t){try{let s=new M,n=q(s,t);return await V(e,n.expression)}catch{let s=parseInt(t,10);return Number.isNaN(s)?0:s}}async function En(e,t,s={}){let{name:n,isArray:r,arrayElements:i,value:o,arrayIndex:a}=t,{makeReadonly:l=!1,checkReadonly:c=!0}=s;if(c){let f=K(e,n);if(f)return f}if(r&&i){for(let f=0;f<i.length;f++)e.state.env[`${n}_${f}`]=i[f];e.state.env[`${n}__length`]=String(i.length)}else if(a!==void 0&&o!==void 0){let f=await Jr(e,a);e.state.env[`${n}_${f}`]=o;let u=parseInt(e.state.env[`${n}__length`]??"0",10);f>=u&&(e.state.env[`${n}__length`]=String(f+1))}else o!==void 0&&(e.state.env[n]=o);return l&&se(e,n),null}function _e(e,t){e.state.localVarDepth=e.state.localVarDepth||new Map,e.state.localVarDepth.set(t,e.state.callDepth)}function Te(e,t){return e.state.localVarDepth?.get(t)}function wt(e,t){e.state.localVarDepth?.delete(t)}function $n(e,t,s){e.state.localVarStack=e.state.localVarStack||new Map;let n=e.state.localVarStack.get(t)||[];n.push({value:s,scopeIndex:e.state.localScopes.length-1}),e.state.localVarStack.set(t,n)}function vt(e,t){let s=e.state.localVarStack?.get(t);if(!(!s||s.length===0))return s.pop()}function Sn(e,t){if(e.state.localVarStack)for(let[s,n]of e.state.localVarStack.entries()){for(;n.length>0&&n[n.length-1].scopeIndex===t;)n.pop();n.length===0&&e.state.localVarStack.delete(s)}}var qt=new Set([":",".","break","continue","eval","exec","exit","export","readonly","return","set","shift","trap","unset"]);function An(e){return qt.has(e)}var Zt=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 Ne(e,t,s,n){try{if((await e.fs.stat(t)).isDirectory)return`bash: ${s}: Is a directory
|
|
16
16
|
`;if(n.checkNoclobber&&e.state.options.noclobber&&!n.isClobber&&s!=="/dev/null")return`bash: ${s}: cannot overwrite existing file
|
|
17
17
|
`}catch{}return null}function X(e){for(let t=0;t<e.length;t++)if(e.charCodeAt(t)>255)return"utf8";return"binary"}function ei(e){if(!e.startsWith("__rw__:"))return null;let t=e.slice(7),s=t.indexOf(":");if(s===-1)return null;let n=Number.parseInt(t.slice(0,s),10);if(Number.isNaN(n)||n<0)return null;let r=s+1,i=t.slice(r,r+n),o=r+n+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 f=a.slice(l+1);return{path:i,position:c,content:f}}async function _n(e,t){let s=new Map;for(let n=0;n<t.length;n++){let r=t[n];if(r.target.type==="HereDoc")continue;if(r.operator===">&"||r.operator==="<&"){if(Lt(e,r.target))return{targets:s,error:`bash: $@: ambiguous redirect
|
|
18
18
|
`};s.set(n,await I(e,r.target))}else{let o=await nt(e,r.target);if("error"in o)return{targets:s,error:o.error};s.set(n,o.target)}}return{targets:s}}function ti(e){e.state.nextFd===void 0&&(e.state.nextFd=10);let t=e.state.nextFd;return e.state.nextFd++,t}async function bt(e,t){for(let s of t){if(!s.fdVariable)continue;if(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),(s.operator===">&"||s.operator==="<&")&&s.target.type==="Word"&&await I(e,s.target)==="-"){let i=e.state.env[s.fdVariable];if(i!==void 0){let o=Number.parseInt(i,10);Number.isNaN(o)||e.state.fileDescriptors.delete(o)}continue}let n=ti(e);if(e.state.env[s.fdVariable]=String(n),s.target.type==="Word"){let r=await I(e,s.target);if(s.operator===">&"||s.operator==="<&"){let i=Number.parseInt(r,10);if(!Number.isNaN(i)){let o=e.state.fileDescriptors.get(i);o!==void 0&&e.state.fileDescriptors.set(n,o);continue}}if(s.operator===">"||s.operator===">>"||s.operator===">|"||s.operator==="&>"||s.operator==="&>>"){let i=e.fs.resolvePath(e.state.cwd,r);(s.operator===">"||s.operator===">|"||s.operator==="&>")&&await e.fs.writeFile(i,"","binary"),e.state.fileDescriptors.set(n,`__file__:${i}`)}else if(s.operator==="<<<")e.state.fileDescriptors.set(n,`${r}
|
|
@@ -22,15 +22,15 @@ import{B as Us,C as qs,D as se,E as Ce,F as K,G as ce,H as st,I as Zs,J as I,K a
|
|
|
22
22
|
`,1)}catch{}if(r!=="/dev/null"&&r!=="/dev/stdout"&&r!=="/dev/stderr"&&r!=="/dev/full"&&await e.fs.writeFile(i,"","binary"),r==="/dev/full")return _("",`bash: /dev/full: No space left on device
|
|
23
23
|
`,1)}return null}async function j(e,t,s,n){let{stdout:r,stderr:i,exitCode:o}=t;for(let c=0;c<s.length;c++){let f=s[c];if(f.target.type==="HereDoc")continue;let u,d=n?.get(c);if(d!==void 0)u=d;else if(f.operator===">&"||f.operator==="<&"){if(Lt(e,f.target)){i+=`bash: $@: ambiguous redirect
|
|
24
24
|
`,o=1,r="";continue}u=await I(e,f.target)}else{let m=await nt(e,f.target);if("error"in m){i+=m.error,o=1,r="";continue}u=m.target}if(!f.fdVariable)switch(f.operator){case">":case">|":{let h=f.fd??1,m=f.operator===">|";if(h===1){if(u==="/dev/stdout")break;if(u==="/dev/stderr"){i+=r,r="";break}if(u==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
25
|
-
`,o=1,r="";break}let p=e.fs.resolvePath(e.state.cwd,u),g=await
|
|
26
|
-
`,o=1;break}if(u==="/dev/null")i="";else{let p=e.fs.resolvePath(e.state.cwd,u),g=await
|
|
27
|
-
`,o=1,r="";break}let m=e.fs.resolvePath(e.state.cwd,u),p=await
|
|
28
|
-
`,o=1;break}let m=e.fs.resolvePath(e.state.cwd,u),p=await
|
|
29
|
-
`,o=1)}break}if(u==="2"||u==="&2")h===1&&(i+=r,r="");else if(u==="1"||u==="&1")r+=i,i="";else{let m=Number.parseInt(u,10);if(Number.isNaN(m)){if(f.operator===">&"){let p=e.fs.resolvePath(e.state.cwd,u),g=await
|
|
25
|
+
`,o=1,r="";break}let p=e.fs.resolvePath(e.state.cwd,u),g=await Ne(e,p,u,{checkNoclobber:!0,isClobber:m});if(g){i+=g,o=1,r="";break}await e.fs.writeFile(p,r,X(r)),r=""}else if(h===2){if(u==="/dev/stderr")break;if(u==="/dev/stdout"){r+=i,i="";break}if(u==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
26
|
+
`,o=1;break}if(u==="/dev/null")i="";else{let p=e.fs.resolvePath(e.state.cwd,u),g=await Ne(e,p,u,{checkNoclobber:!0,isClobber:m});if(g){i+=g,o=1;break}await e.fs.writeFile(p,i,X(i)),i=""}}break}case">>":{let h=f.fd??1;if(h===1){if(u==="/dev/stdout")break;if(u==="/dev/stderr"){i+=r,r="";break}if(u==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
27
|
+
`,o=1,r="";break}let m=e.fs.resolvePath(e.state.cwd,u),p=await Ne(e,m,u,{});if(p){i+=p,o=1,r="";break}await e.fs.appendFile(m,r,X(r)),r=""}else if(h===2){if(u==="/dev/stderr")break;if(u==="/dev/stdout"){r+=i,i="";break}if(u==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
28
|
+
`,o=1;break}let m=e.fs.resolvePath(e.state.cwd,u),p=await Ne(e,m,u,{});if(p){i+=p,o=1;break}await e.fs.appendFile(m,i,X(i)),i=""}break}case">&":case"<&":{let h=f.fd??1;if(u==="-")break;if(u.endsWith("-")){let m=u.slice(0,-1),p=Number.parseInt(m,10);if(!Number.isNaN(p)){let g=e.state.fileDescriptors?.get(p);g!==void 0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(h,g),p>=3&&e.state.fileDescriptors?.delete(p)):p===1||p===2?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(h,`__dupout__:${p}`)):p===0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(h,`__dupin__:${p}`)):p>=3&&(i+=`bash: ${p}: Bad file descriptor
|
|
29
|
+
`,o=1)}break}if(u==="2"||u==="&2")h===1&&(i+=r,r="");else if(u==="1"||u==="&1")r+=i,i="";else{let m=Number.parseInt(u,10);if(Number.isNaN(m)){if(f.operator===">&"){let p=e.fs.resolvePath(e.state.cwd,u),g=await Ne(e,p,u,{checkNoclobber:!0});if(g){i=g,o=1,r="";break}if(f.fd==null){let b=r+i;await e.fs.writeFile(p,b,X(b)),r="",i=""}else h===1?(await e.fs.writeFile(p,r,X(r)),r=""):h===2&&(await e.fs.writeFile(p,i,X(i)),i="")}}else{let p=e.state.fileDescriptors?.get(m);if(p?.startsWith("__file__:")){let g=p.slice(9);h===1?(await e.fs.appendFile(g,r,X(r)),r=""):h===2&&(await e.fs.appendFile(g,i,X(i)),i="")}else if(p?.startsWith("__rw__:")){let g=ei(p);g&&(h===1?(await e.fs.appendFile(g.path,r,X(r)),r=""):h===2&&(await e.fs.appendFile(g.path,i,X(i)),i=""))}else if(p?.startsWith("__dupout__:")){let g=Number.parseInt(p.slice(11),10);if(g!==1)if(g===2)h===1&&(i+=r,r="");else{let b=e.state.fileDescriptors?.get(g);if(b?.startsWith("__file__:")){let $=b.slice(9);h===1?(await e.fs.appendFile($,r,X(r)),r=""):h===2&&(await e.fs.appendFile($,i,X(i)),i="")}}}else p?.startsWith("__dupin__:")?(i+=`bash: ${m}: Bad file descriptor
|
|
30
30
|
`,o=1,r=""):m>=3&&(i+=`bash: ${m}: Bad file descriptor
|
|
31
31
|
`,o=1,r="")}}break}case"&>":{if(u==="/dev/full"){i=`bash: echo: write error: No space left on device
|
|
32
|
-
`,o=1,r="";break}let h=e.fs.resolvePath(e.state.cwd,u),m=await
|
|
33
|
-
`,o=1,r="";break}let h=e.fs.resolvePath(e.state.cwd,u),m=await
|
|
32
|
+
`,o=1,r="";break}let h=e.fs.resolvePath(e.state.cwd,u),m=await Ne(e,h,u,{checkNoclobber:!0});if(m){i=m,o=1,r="";break}let p=r+i;await e.fs.writeFile(h,p,X(p)),r="",i="";break}case"&>>":{if(u==="/dev/full"){i=`bash: echo: write error: No space left on device
|
|
33
|
+
`,o=1,r="";break}let h=e.fs.resolvePath(e.state.cwd,u),m=await Ne(e,h,u,{});if(m){i=m,o=1,r="";break}let p=r+i;await e.fs.appendFile(h,p,X(p)),r="",i="";break}}}let a=e.state.fileDescriptors?.get(1);if(a){if(a==="__dupout__:2")i+=r,r="";else if(a.startsWith("__file__:")){let c=a.slice(9);await e.fs.appendFile(c,r,X(r)),r=""}else if(a.startsWith("__file_append__:")){let c=a.slice(16);await e.fs.appendFile(c,r,X(r)),r=""}}let l=e.state.fileDescriptors?.get(2);if(l){if(l==="__dupout__:1")r+=i,i="";else if(l.startsWith("__file__:")){let c=l.slice(9);await e.fs.appendFile(c,i,X(i)),i=""}else if(l.startsWith("__file_append__:")){let c=l.slice(16);await e.fs.appendFile(c,i,X(i)),i=""}}return _(r,i,o)}function Cn(e,t){if(e.state.options.posix&&qt.has(t.name)){let n=`bash: line ${e.state.currentLine}: \`${t.name}': is a special builtin
|
|
34
34
|
`;throw new z(2,"",n)}let s={...t,sourceFile:t.sourceFile??e.state.currentSource??"main"};return e.state.functions.set(t.name,s),L}async function si(e,t){let s="";for(let n of t)if((n.operator==="<<"||n.operator==="<<-")&&n.target.type==="HereDoc"){let r=n.target,i=await I(e,r.content);r.stripTabs&&(i=i.split(`
|
|
35
35
|
`).map(a=>a.replace(/^\t+/,"")).join(`
|
|
36
36
|
`)),(n.fd??0)===0&&(s=i)}else if(n.operator==="<<<"&&n.target.type==="Word")s=`${await I(e,n.target)}
|
|
@@ -72,28 +72,28 @@ import{B as Us,C as qs,D as se,E as Ce,F as K,G as ce,H as st,I as Zs,J as I,K a
|
|
|
72
72
|
`,2);r.push(c)}else if(l==="+o"){if(a++,a>=t.length)return S(`compopt: +o: option requires an argument
|
|
73
73
|
`,2);let c=t[a];if(!kn.includes(c))return S(`compopt: ${c}: invalid option name
|
|
74
74
|
`,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 r)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),W("")}if(n){let a=e.state.completionSpecs.get("__empty__")??{},l=new Set(a.options??[]);for(let c of r)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),W("")}if(o.length>0){for(let a of o){let l=e.state.completionSpecs.get(a)??{},c=new Set(l.options??[]);for(let f of r)c.add(f);for(let f of i)c.delete(f);l.options=c.size>0?Array.from(c):void 0,e.state.completionSpecs.set(a,l)}return W("")}return S(`compopt: not currently executing completion function
|
|
75
|
-
`,1)}function es(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new
|
|
75
|
+
`,1)}function es(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new ve;return L}if(t.length>1)throw new z(1,"",`bash: continue: too many arguments
|
|
76
76
|
`);let s=1;if(t.length>0){let n=Number.parseInt(t[0],10);if(Number.isNaN(n)||n<1)throw new z(1,"",`bash: continue: ${t[0]}: numeric argument required
|
|
77
|
-
`);s=n}throw new re(s)}function B(e,t){let s=e.state.env.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 ts(e){for(let t=0;t<e.length;t++){let s=e.charCodeAt(t);if(s<32||s===127)return!0}return!1}function ss(e){let t="$'";for(let s=0;s<e.length;s++){let n=e[s],r=e.charCodeAt(s);r===7?t+="\\a":r===8?t+="\\b":r===9?t+="\\t":r===10?t+="\\n":r===11?t+="\\v":r===12?t+="\\f":r===13?t+="\\r":r===27?t+="\\e":r===39?t+="\\'":r===92?t+="\\\\":r<32||r===127?t+=`\\${r.toString(8).padStart(3,"0")}`:t+=n}return t+="'",t}function $t(e){return ts(e)?ss(e):/^[a-zA-Z0-9_/.:\-@%+,=]*$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function
|
|
77
|
+
`);s=n}throw new re(s)}function B(e,t){let s=e.state.env.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 ts(e){for(let t=0;t<e.length;t++){let s=e.charCodeAt(t);if(s<32||s===127)return!0}return!1}function ss(e){let t="$'";for(let s=0;s<e.length;s++){let n=e[s],r=e.charCodeAt(s);r===7?t+="\\a":r===8?t+="\\b":r===9?t+="\\t":r===10?t+="\\n":r===11?t+="\\v":r===12?t+="\\f":r===13?t+="\\r":r===27?t+="\\e":r===39?t+="\\'":r===92?t+="\\\\":r<32||r===127?t+=`\\${r.toString(8).padStart(3,"0")}`:t+=n}return t+="'",t}function $t(e){return ts(e)?ss(e):/^[a-zA-Z0-9_/.:\-@%+,=]*$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function ke(e){return ts(e)?ss(e):`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function ns(e){return ts(e)?ss(e):`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function On(e,t){let s="";return e.state.integerVars?.has(t)&&(s+="i"),e.state.lowercaseVars?.has(t)&&(s+="l"),oe(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 rs(e){return e===""?"''":/[\s'\\]/.test(e)?`'${e.replace(/'/g,"'\\''")}'`:e}function Dn(e,t){let s="",n="",r=!1;for(let i of t){let o=On(e,i);if(e.state.associativeArrays?.has(i)){let f=be(e,i);if(f.length===0)s+=`declare -A ${i}=()
|
|
78
78
|
`;else{let u=f.map(d=>{let h=e.state.env[`${i}_${d}`]??"",m=rs(h);return`['${d}']=${m}`});s+=`declare -A ${i}=(${u.join(" ")})
|
|
79
|
-
`}continue}let l=Q(e,i);if(l.length>0){let f=l.map(u=>{let d=e.state.env[`${i}_${u}`]??"";return`[${u}]=${
|
|
79
|
+
`}continue}let l=Q(e,i);if(l.length>0){let f=l.map(u=>{let d=e.state.env[`${i}_${u}`]??"";return`[${u}]=${ke(d)}`});s+=`declare -a ${i}=(${f.join(" ")})
|
|
80
80
|
`;continue}if(e.state.env[`${i}__length`]!==void 0){s+=`declare -a ${i}=()
|
|
81
81
|
`;continue}let c=e.state.env[i];if(c!==void 0)s+=`declare ${o} ${i}=${ns(c)}
|
|
82
82
|
`;else{let f=e.state.declaredVars?.has(i),u=e.state.localVarDepth?.has(i);f||u?s+=`declare ${o} ${i}
|
|
83
83
|
`:(n+=`bash: declare: ${i}: not found
|
|
84
|
-
`,r=!0)}}return _(s,n,r?1:0)}function In(e,t){let{filterExport:s,filterReadonly:n,filterNameref:r,filterIndexedArray:i,filterAssocArray:o}=t,a=s||n||r||i||o,l="",c=new Set;for(let u of Object.keys(e.state.env)){if(u.startsWith("BASH_"))continue;if(u.endsWith("__length")){let h=u.slice(0,-8);c.add(h);continue}let d=u.lastIndexOf("_");if(d>0){let h=u.slice(0,d),m=u.slice(d+1);if(/^\d+$/.test(m)||e.state.associativeArrays?.has(h)){c.add(h);continue}}c.add(u)}if(e.state.localVarDepth)for(let u of e.state.localVarDepth.keys())c.add(u);if(e.state.associativeArrays)for(let u of e.state.associativeArrays)c.add(u);let f=Array.from(c).sort();for(let u of f){let d=On(e,u),h=e.state.associativeArrays?.has(u),m=Q(e,u),p=!h&&(m.length>0||e.state.env[`${u}__length`]!==void 0);if(a&&(o&&!h||i&&!p||s&&!e.state.exportedVars?.has(u)||n&&!e.state.readonlyVars?.has(u)||r&&!oe(e,u)))continue;if(h){let b=
|
|
84
|
+
`,r=!0)}}return _(s,n,r?1:0)}function In(e,t){let{filterExport:s,filterReadonly:n,filterNameref:r,filterIndexedArray:i,filterAssocArray:o}=t,a=s||n||r||i||o,l="",c=new Set;for(let u of Object.keys(e.state.env)){if(u.startsWith("BASH_"))continue;if(u.endsWith("__length")){let h=u.slice(0,-8);c.add(h);continue}let d=u.lastIndexOf("_");if(d>0){let h=u.slice(0,d),m=u.slice(d+1);if(/^\d+$/.test(m)||e.state.associativeArrays?.has(h)){c.add(h);continue}}c.add(u)}if(e.state.localVarDepth)for(let u of e.state.localVarDepth.keys())c.add(u);if(e.state.associativeArrays)for(let u of e.state.associativeArrays)c.add(u);let f=Array.from(c).sort();for(let u of f){let d=On(e,u),h=e.state.associativeArrays?.has(u),m=Q(e,u),p=!h&&(m.length>0||e.state.env[`${u}__length`]!==void 0);if(a&&(o&&!h||i&&!p||s&&!e.state.exportedVars?.has(u)||n&&!e.state.readonlyVars?.has(u)||r&&!oe(e,u)))continue;if(h){let b=be(e,u);if(b.length===0)l+=`declare -A ${u}=()
|
|
85
85
|
`;else{let $=b.map(N=>{let y=e.state.env[`${u}_${N}`]??"",w=rs(y);return`['${N}']=${w}`});l+=`declare -A ${u}=(${$.join(" ")})
|
|
86
|
-
`}continue}if(m.length>0){let b=m.map($=>{let N=e.state.env[`${u}_${$}`]??"";return`[${$}]=${
|
|
86
|
+
`}continue}if(m.length>0){let b=m.map($=>{let N=e.state.env[`${u}_${$}`]??"";return`[${$}]=${ke(N)}`});l+=`declare -a ${u}=(${b.join(" ")})
|
|
87
87
|
`;continue}if(e.state.env[`${u}__length`]!==void 0){l+=`declare -a ${u}=()
|
|
88
88
|
`;continue}let g=e.state.env[u];g!==void 0&&(l+=`declare ${d} ${u}=${ns(g)}
|
|
89
|
-
`)}return W(l)}function Tn(e){let t="",s=Array.from(e.state.associativeArrays??[]).sort();for(let n of s){let r=
|
|
89
|
+
`)}return W(l)}function Tn(e){let t="",s=Array.from(e.state.associativeArrays??[]).sort();for(let n of s){let r=be(e,n);if(r.length===0)t+=`declare -A ${n}=()
|
|
90
90
|
`;else{let i=r.map(o=>{let a=e.state.env[`${n}_${o}`]??"",l=rs(a);return`['${o}']=${l}`});t+=`declare -A ${n}=(${i.join(" ")})
|
|
91
91
|
`}}return W(t)}function xn(e){let t="",s=new Set;for(let r of Object.keys(e.state.env)){if(r.startsWith("BASH_"))continue;if(r.endsWith("__length")){let o=r.slice(0,-8);e.state.associativeArrays?.has(o)||s.add(o);continue}let i=r.lastIndexOf("_");if(i>0){let o=r.slice(0,i),a=r.slice(i+1);/^\d+$/.test(a)&&(e.state.associativeArrays?.has(o)||s.add(o))}}let n=Array.from(s).sort();for(let r of n){let i=Q(e,r);if(i.length===0)t+=`declare -a ${r}=()
|
|
92
|
-
`;else{let o=i.map(a=>{let l=e.state.env[`${r}_${a}`]??"";return`[${a}]=${
|
|
92
|
+
`;else{let o=i.map(a=>{let l=e.state.env[`${r}_${a}`]??"";return`[${a}]=${ke(l)}`});t+=`declare -a ${r}=(${o.join(" ")})
|
|
93
93
|
`}}return W(t)}function Rn(e){let t="",s=new Set;for(let r of Object.keys(e.state.env)){if(r.startsWith("BASH_"))continue;if(r.endsWith("__length")){let o=r.slice(0,-8);s.add(o);continue}let i=r.lastIndexOf("_");if(i>0){let o=r.slice(0,i),a=r.slice(i+1);if(/^\d+$/.test(a)||e.state.associativeArrays?.has(o)){s.add(o);continue}}s.add(r)}let n=Array.from(s).sort();for(let r of n){if(e.state.associativeArrays?.has(r)||Q(e,r).length>0||e.state.env[`${r}__length`]!==void 0)continue;let a=e.state.env[r];a!==void 0&&(t+=`${r}=${$t(a)}
|
|
94
94
|
`)}return W(t)}function is(e,t){e.state.integerVars??=new Set,e.state.integerVars.add(t)}function Be(e,t){return e.state.integerVars?.has(t)??!1}function os(e,t){e.state.lowercaseVars??=new Set,e.state.lowercaseVars.add(t),e.state.uppercaseVars?.delete(t)}function vi(e,t){return e.state.lowercaseVars?.has(t)??!1}function as(e,t){e.state.uppercaseVars??=new Set,e.state.uppercaseVars.add(t),e.state.lowercaseVars?.delete(t)}function bi(e,t){return e.state.uppercaseVars?.has(t)??!1}function Re(e,t,s){return vi(e,t)?s.toLowerCase():bi(e,t)?s.toUpperCase():s}async function Ln(e,t){try{let s=new M,n=q(s,t),r=await V(e,n.expression);return String(r)}catch{return"0"}}function Ei(e){let t=e.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);if(!t)return null;let s=t[0],n=s.length;if(e[n]!=="[")return null;let r=0,i=n+1;for(;n<e.length;n++)if(e[n]==="[")r++;else if(e[n]==="]"&&(r--,r===0))break;if(r!==0)return null;let o=e.slice(i,n);if(n++,e[n]!=="=")return null;n++;let a=e.slice(n);return{name:s,indexExpr:o,value:a}}async function ls(e,t){let s=!1,n=!1,r=!1,i=!1,o=!1,a=!1,l=!1,c=!1,f=!1,u=!1,d=!1,h=!1,m=!1,p=!1,g=!1,b=[];for(let T=0;T<t.length;T++){let x=t[T];if(x==="-a")s=!0;else if(x==="-A")n=!0;else if(x==="-r")r=!0;else if(x==="-x")i=!0;else if(x==="-p")o=!0;else if(x==="-n")a=!0;else if(x==="+n")l=!0;else if(x==="+a")c=!0;else if(x==="+x")f=!0;else if(x==="--"){b.push(...t.slice(T+1));break}else if(x.startsWith("+")){for(let A of x.slice(1))if(A==="n")l=!0;else if(A==="a")c=!0;else if(A==="x")f=!0;else if(A!=="r"){if(A!=="i"){if(!(A==="f"||A==="F"))return _("",`bash: typeset: +${A}: invalid option
|
|
95
95
|
`,2)}}}else if(x==="-i")u=!0;else if(x==="-l")d=!0;else if(x==="-u")h=!0;else if(x==="-f")m=!0;else if(x==="-F")p=!0;else if(x==="-g")g=!0;else if(x.startsWith("-"))for(let A of x.slice(1))if(A==="a")s=!0;else if(A==="A")n=!0;else if(A==="r")r=!0;else if(A==="x")i=!0;else if(A==="p")o=!0;else if(A==="n")a=!0;else if(A==="i")u=!0;else if(A==="l")d=!0;else if(A==="u")h=!0;else if(A==="f")m=!0;else if(A==="F")p=!0;else if(A==="g")g=!0;else return _("",`bash: typeset: -${A}: invalid option
|
|
96
|
-
`,2);else b.push(x)}let N=e.state.localScopes.length>0&&!g,y=T=>{if(!N)return;let x=e.state.localScopes[e.state.localScopes.length-1];x.has(T)||x.set(T,e.state.env[T])},w=T=>{if(!N)return;let x=e.state.localScopes[e.state.localScopes.length-1];x.has(T)||x.set(T,e.state.env[T]);let A=`${T}_`;for(let D of Object.keys(e.state.env))D.startsWith(A)&&!D.includes("__")&&(x.has(D)||x.set(D,e.state.env[D]));let P=`${T}__length`;e.state.env[P]!==void 0&&!x.has(P)&&x.set(P,e.state.env[P])},v=T=>{N&&
|
|
96
|
+
`,2);else b.push(x)}let N=e.state.localScopes.length>0&&!g,y=T=>{if(!N)return;let x=e.state.localScopes[e.state.localScopes.length-1];x.has(T)||x.set(T,e.state.env[T])},w=T=>{if(!N)return;let x=e.state.localScopes[e.state.localScopes.length-1];x.has(T)||x.set(T,e.state.env[T]);let A=`${T}_`;for(let D of Object.keys(e.state.env))D.startsWith(A)&&!D.includes("__")&&(x.has(D)||x.set(D,e.state.env[D]));let P=`${T}__length`;e.state.env[P]!==void 0&&!x.has(P)&&x.set(P,e.state.env[P])},v=T=>{N&&_e(e,T)};if(p){if(b.length===0){let A=Array.from(e.state.functions.keys()).sort(),P="";for(let D of A)P+=`declare -f ${D}
|
|
97
97
|
`;return W(P)}let T=!0,x="";for(let A of b)e.state.functions.has(A)?x+=`${A}
|
|
98
98
|
`:T=!1;return _(x,"",T?0:1)}if(m){if(b.length===0){let x="",A=Array.from(e.state.functions.keys()).sort();for(let P of A)x+=`${P} ()
|
|
99
99
|
{
|
|
@@ -103,7 +103,7 @@ import{B as Us,C as qs,D as se,E as Ce,F as K,G as ce,H as st,I as Zs,J as I,K a
|
|
|
103
103
|
`,k=1;continue}if((s||!n&&!s)&&e.state.associativeArrays?.has(E)){C+=`bash: declare: ${E}: cannot convert associative to indexed array
|
|
104
104
|
`,k=1;continue}if(w(E),n&&(e.state.associativeArrays??=new Set,e.state.associativeArrays.add(E)),ue(e,E),delete e.state.env[E],delete e.state.env[`${E}__length`],n&&O.includes("[")){let R=gt(O);for(let[G,F]of R){let H=B(e,F);e.state.env[`${E}_${G}`]=H}}else if(n){let R=he(O);for(let G=0;G<R.length;G+=2){let F=R[G],H=G+1<R.length?B(e,R[G+1]):"";e.state.env[`${E}_${F}`]=H}}else{let R=he(O);if(R.some(F=>/^\[[^\]]+\]=/.test(F))){let F=0;for(let H of R){let J=H.match(/^\[([^\]]+)\]=(.*)$/);if(J){let Y=J[1],Cr=J[2],Pr=B(e,Cr),Fe;if(/^-?\d+$/.test(Y))Fe=Number.parseInt(Y,10);else try{let Nr=new M,kr=q(Nr,Y);Fe=await V(e,kr.expression)}catch{Fe=0}e.state.env[`${E}_${Fe}`]=Pr,F=Fe+1}else{let Y=B(e,H);e.state.env[`${E}_${F}`]=Y,F++}}}else{for(let F=0;F<R.length;F++)e.state.env[`${E}_${F}`]=R[F];e.state.env[`${E}__length`]=String(R.length)}}v(E),r&&se(e,E),i&&ce(e,E);continue}if(l){let E=T.includes("=")?T.slice(0,T.indexOf("=")):T;if(Vs(e,E),!T.includes("="))continue}if(f){let E=T.includes("=")?T.slice(0,T.indexOf("=")):T;if(st(e,E),!T.includes("="))continue}let A=Ei(T);if(A){let{name:E,indexExpr:O,value:R}=A,G=K(e,E);if(G)return G;w(E);let F;try{let J=new M,Y=q(J,O);F=await V(e,Y.expression)}catch{let J=parseInt(O,10);F=Number.isNaN(J)?0:J}e.state.env[`${E}_${F}`]=R;let H=parseInt(e.state.env[`${E}__length`]??"0",10);F>=H&&(e.state.env[`${E}__length`]=String(F+1)),v(E),r&&se(e,E),i&&ce(e,E);continue}let P=T.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(P&&!c){let E=P[1],O=P[2],R=K(e,E);if(R)return R;w(E);let G=he(O);if(e.state.associativeArrays?.has(E)){let F=gt(O);for(let[H,J]of F){let Y=B(e,J);e.state.env[`${E}_${H}`]=Y}}else{let F=Q(e,E),H=0;if(F.length===0&&e.state.env[E]!==void 0){let Y=e.state.env[E];e.state.env[`${E}_0`]=Y,delete e.state.env[E],H=1}else F.length>0&&(H=Math.max(...F)+1);for(let Y=0;Y<G.length;Y++)e.state.env[`${E}_${H+Y}`]=B(e,G[Y]);let J=H+G.length;e.state.env[`${E}__length`]=String(J)}v(E),r&&se(e,E),i&&ce(e,E);continue}let D=T.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(D){let E=D[1],O=B(e,D[2]),R=K(e,E);if(R)return R;y(E),u&&is(e,E),d&&os(e,E),h&&as(e,E);let F=Q(e,E).length>0||e.state.associativeArrays?.has(E);if(Be(e,E)){let H=e.state.env[E]??"0",J=parseInt(H,10)||0,Y=parseInt(await Ln(e,O),10)||0;O=String(J+Y),e.state.env[E]=O}else if(F){O=Re(e,E,O);let H=`${E}_0`,J=e.state.env[H]??"";e.state.env[H]=J+O}else{O=Re(e,E,O);let H=e.state.env[E]??"";e.state.env[E]=H+O}v(E),r&&se(e,E),i&&ce(e,E),e.state.options.allexport&&!f&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(E));continue}if(T.includes("=")){let E=T.indexOf("="),O=T.slice(0,E),R=T.slice(E+1);if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(O)){C+=`bash: typeset: \`${O}': not a valid identifier
|
|
105
105
|
`,k=1;continue}let G=K(e,O);if(G)return G;if(y(O),a){if(R!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(R)){C+=`bash: declare: \`${R}': invalid variable name for name reference
|
|
106
|
-
`,k=1;continue}e.state.env[O]=R,ye(e,O),R!==""&&xt(e,R)&&Tt(e,O),v(O),r&&se(e,O),i&&ce(e,O);continue}if(u&&is(e,O),d&&os(e,O),h&&as(e,O),Be(e,O)&&(R=await Ln(e,R)),R=Re(e,O,R),oe(e,O)){let F=
|
|
106
|
+
`,k=1;continue}e.state.env[O]=R,ye(e,O),R!==""&&xt(e,R)&&Tt(e,O),v(O),r&&se(e,O),i&&ce(e,O);continue}if(u&&is(e,O),d&&os(e,O),h&&as(e,O),Be(e,O)&&(R=await Ln(e,R)),R=Re(e,O,R),oe(e,O)){let F=Ee(e,O);F&&F!==O?e.state.env[F]=R:e.state.env[O]=R}else e.state.env[O]=R;v(O),r&&se(e,O),i&&ce(e,O),e.state.options.allexport&&!f&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(O))}else{let E=T;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(E)){C+=`bash: typeset: \`${E}': not a valid identifier
|
|
107
107
|
`,k=1;continue}if(s||n?w(E):y(E),a){ye(e,E);let R=e.state.env[E];R!==void 0&&R!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(R)?js(e,E):R&&xt(e,R)&&Tt(e,E),v(E),r&&se(e,E),i&&ce(e,E);continue}if(u&&is(e,E),d&&os(e,E),h&&as(e,E),n){if(Q(e,E).length>0){C+=`bash: declare: ${E}: cannot convert indexed to associative array
|
|
108
108
|
`,k=1;continue}e.state.associativeArrays??=new Set,e.state.associativeArrays.add(E)}let O=Object.keys(e.state.env).some(R=>R.startsWith(`${E}_`)&&!R.startsWith(`${E}__length`));!(E in e.state.env)&&!O&&(s||n?e.state.env[`${E}__length`]="0":(e.state.declaredVars??=new Set,e.state.declaredVars.add(E))),v(E),r&&se(e,E),i&&ce(e,E)}}return _("",C,k)}async function cs(e,t){let s=!1,n=!1,r=!1,i=[];for(let o=0;o<t.length;o++){let a=t[o];if(a==="-a")s=!0;else if(a==="-A")n=!0;else if(a==="-p")r=!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[l];if(c!==void 0){let f=c.replace(/\\/g,"\\\\").replace(/"/g,'\\"');o+=`declare -r ${l}="${f}"
|
|
109
109
|
`}}return W(o)}for(let o of i){let a=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(a){let u=a[1],d=a[2],h=K(e,u);if(h)return h;let m=he(d);if(e.state.associativeArrays?.has(u)){let p=gt(d);for(let[g,b]of p){let $=B(e,b);e.state.env[`${u}_${g}`]=$}}else{let p=Q(e,u),g=0;if(p.length===0&&e.state.env[u]!==void 0){let $=e.state.env[u];e.state.env[`${u}_0`]=$,delete e.state.env[u],g=1}else p.length>0&&(g=Math.max(...p)+1);for(let $=0;$<m.length;$++)e.state.env[`${u}_${g+$}`]=B(e,m[$]);let b=g+m.length;e.state.env[`${u}__length`]=String(b)}se(e,u);continue}let l=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(l){let u=l[1],d=B(e,l[2]),h=K(e,u);if(h)return h;let m=e.state.env[u]??"";e.state.env[u]=m+d,se(e,u);continue}let c=bn(o);if(c.value===void 0&&!c.isArray){se(e,c.name);continue}let f=await En(e,c,{makeReadonly:!0});if(f)return f}return L}function fs(e){return e.state.directoryStack??=[],e.state.directoryStack}function He(e,t){return t&&e===t?"~":t&&e.startsWith(`${t}/`)?`~${e.slice(t.length)}`:e}function $i(e){let t=e.split("/").filter(n=>n&&n!=="."),s=[];for(let n of t)n===".."?s.pop():s.push(n);return`/${s.join("/")}`}async function us(e,t){let s=fs(e),n;for(let a=0;a<t.length;a++){let l=t[a];if(l==="--"){if(a+1<t.length){if(n!==void 0)return S(`bash: pushd: too many arguments
|
|
@@ -507,9 +507,9 @@ ${d}
|
|
|
507
507
|
`)}return _("","",n===0?1:0)}async function vs(e,t){if(e.state.localScopes.length===0)return S(`bash: local: can only be used in a function
|
|
508
508
|
`);let s=e.state.localScopes[e.state.localScopes.length-1],n="",r=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 f of c.slice(1))f==="n"?i=!0:f==="a"?o=!0:f==="p"&&(a=!0);else l.push(c);if(l.length===0){let c="",f=Array.from(s.keys()).filter(u=>!u.includes("_")||!u.match(/_\d+$/)).filter(u=>!u.includes("__length")).sort();for(let u of f){let d=e.state.env[u];d!==void 0&&(c+=`${u}=${d}
|
|
509
509
|
`)}return _(c,"",0)}for(let c of l){let f,u,d=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(d){f=d[1];let b=d[2];if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(f)){n+=`bash: local: \`${c}': not a valid identifier
|
|
510
|
-
`,r=1;continue}if(K(e,f,"bash"),!s.has(f)){s.set(f,e.state.env[f]);let y=`${f}_`;for(let w of Object.keys(e.state.env))w.startsWith(y)&&!w.includes("__")&&(s.has(w)||s.set(w,e.state.env[w]))}let $=`${f}_`;for(let y of Object.keys(e.state.env))y.startsWith($)&&!y.includes("__")&&delete e.state.env[y];let N=he(b);for(let y=0;y<N.length;y++)e.state.env[`${f}_${y}`]=N[y];e.state.env[`${f}__length`]=String(N.length),
|
|
510
|
+
`,r=1;continue}if(K(e,f,"bash"),!s.has(f)){s.set(f,e.state.env[f]);let y=`${f}_`;for(let w of Object.keys(e.state.env))w.startsWith(y)&&!w.includes("__")&&(s.has(w)||s.set(w,e.state.env[w]))}let $=`${f}_`;for(let y of Object.keys(e.state.env))y.startsWith($)&&!y.includes("__")&&delete e.state.env[y];let N=he(b);for(let y=0;y<N.length;y++)e.state.env[`${f}_${y}`]=N[y];e.state.env[`${f}__length`]=String(N.length),_e(e,f),i&&ye(e,f);continue}let h=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(h){f=h[1];let b=h[2];if(K(e,f,"bash"),!s.has(f)){s.set(f,e.state.env[f]);let v=`${f}_`;for(let k of Object.keys(e.state.env))k.startsWith(v)&&!k.includes("__")&&(s.has(k)||s.set(k,e.state.env[k]));let C=`${f}__length`;e.state.env[C]!==void 0&&!s.has(C)&&s.set(C,e.state.env[C])}let $=he(b),N=Q(e,f),y=0;if(N.length===0&&e.state.env[f]!==void 0){let v=e.state.env[f];e.state.env[`${f}_0`]=v,delete e.state.env[f],y=1}else N.length>0&&(y=Math.max(...N)+1);for(let v=0;v<$.length;v++)e.state.env[`${f}_${y+v}`]=B(e,$[v]);let w=y+$.length;e.state.env[`${f}__length`]=String(w),_e(e,f),i&&ye(e,f);continue}let m=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(m){f=m[1];let b=B(e,m[2]);K(e,f,"bash"),s.has(f)||s.set(f,e.state.env[f]);let $=e.state.env[f]??"";e.state.env[f]=$+b,_e(e,f),i&&ye(e,f);continue}let p=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([^\]]+)\]=(.*)$/s);if(p){f=p[1];let b=p[2],$=B(e,p[3]);if(K(e,f,"bash"),!s.has(f)){s.set(f,e.state.env[f]);let w=`${f}_`;for(let C of Object.keys(e.state.env))C.startsWith(w)&&!C.includes("__")&&(s.has(C)||s.set(C,e.state.env[C]));let v=`${f}__length`;e.state.env[v]!==void 0&&!s.has(v)&&s.set(v,e.state.env[v])}let N;try{let w=new M,v=q(w,b);N=await V(e,v.expression)}catch{let w=parseInt(b,10);N=Number.isNaN(w)?0:w}e.state.env[`${f}_${N}`]=$;let y=parseInt(e.state.env[`${f}__length`]??"0",10);N>=y&&(e.state.env[`${f}__length`]=String(N+1)),_e(e,f),i&&ye(e,f);continue}if(c.includes("=")){let b=c.indexOf("=");f=c.slice(0,b),u=B(e,c.slice(b+1))}else f=c;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(f)){n+=`bash: local: \`${c}': not a valid identifier
|
|
511
511
|
`,r=1;continue}let g=s.has(f);if(u!==void 0){let b=e.state.env[f];if(e.state.tempEnvBindings){let $=e.state.accessedTempEnvVars?.has(f),N=e.state.mutatedTempEnvVars?.has(f);if(!$&&!N)for(let y=e.state.tempEnvBindings.length-1;y>=0;y--){let w=e.state.tempEnvBindings[y];if(w.has(f)){b=w.get(f);break}}}$n(e,f,b)}if(!g){let b=e.state.env[f];if(e.state.tempEnvBindings)for(let $=e.state.tempEnvBindings.length-1;$>=0;$--){let N=e.state.tempEnvBindings[$];if(N.has(f)){b=N.get(f);break}}if(s.set(f,b),o){let $=`${f}_`;for(let y of Object.keys(e.state.env))y.startsWith($)&&!y.includes("__")&&(s.has(y)||s.set(y,e.state.env[y]));let N=`${f}__length`;e.state.env[N]!==void 0&&!s.has(N)&&s.set(N,e.state.env[N])}}if(o&&u===void 0){let b=`${f}_`;for(let $ of Object.keys(e.state.env))$.startsWith(b)&&!$.includes("__")&&delete e.state.env[$];e.state.env[`${f}__length`]="0"}else if(u!==void 0){if(K(e,f,"bash"),i&&u!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(u)){n+=`bash: local: \`${u}': invalid variable name for name reference
|
|
512
|
-
`,r=1;continue}e.state.env[f]=u,e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(f))}else{let b=e.state.tempEnvBindings?.some($=>$.has(f));!g&&!b&&delete e.state.env[f]}
|
|
512
|
+
`,r=1;continue}e.state.env[f]=u,e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(f))}else{let b=e.state.tempEnvBindings?.some($=>$.has(f));!g&&!b&&delete e.state.env[f]}_e(e,f),i&&ye(e,f)}return _("",n,r)}function bs(e,t,s){let n=`
|
|
513
513
|
`,r=0,i=0,o=0,a=!1,l="MAPFILE",c=0;for(;c<t.length;){let b=t[c];b==="-d"&&c+1<t.length?(n=t[c+1]===""?"\0":t[c+1]||`
|
|
514
514
|
`,c+=2):b==="-n"&&c+1<t.length?(r=Number.parseInt(t[c+1],10)||0,c+=2):b==="-O"&&c+1<t.length?(i=Number.parseInt(t[c+1],10)||0,c+=2):b==="-s"&&c+1<t.length?(o=Number.parseInt(t[c+1],10)||0,c+=2):b==="-t"?(a=!0,c++):b==="-u"||b==="-C"||b==="-c"?c+=2:(b.startsWith("-")||(l=b),c++)}let f=s;!f&&e.state.groupStdin!==void 0&&(f=e.state.groupStdin);let u=[],d=f,h=0,m=0;for(;d.length>0;){let b=d.indexOf(n);if(b===-1){if(d.length>0){if(m<o)m++;else if(r===0||h<r){let y=d,w=y.indexOf("\0");w!==-1&&(y=y.substring(0,w)),u.push(y),h++}}break}let $=d.substring(0,b),N=$.indexOf("\0");if(N!==-1&&($=$.substring(0,N)),!a&&n!=="\0"&&($+=n),d=d.substring(b+n.length),m<o){m++;continue}if(r>0&&h>=r)break;u.push($),h++}i===0&&ue(e,l);for(let b=0;b<u.length;b++)e.state.env[`${l}_${i+b}`]=u[b];let p=parseInt(e.state.env[`${l}__length`]||"0",10),g=i+u.length;return e.state.env[`${l}__length`]=String(Math.max(p,g)),e.state.groupStdin!==void 0&&!s&&(e.state.groupStdin=""),_("","",0)}function Ci(e){if(!e.startsWith("__rw__:"))return null;let t=e.slice(7),s=t.indexOf(":");if(s===-1)return null;let n=Number.parseInt(t.slice(0,s),10);if(Number.isNaN(n)||n<0)return null;let r=s+1,i=t.slice(r,r+n),o=r+n+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 f=a.slice(l+1);return{path:i,position:c,content:f}}function Pi(e,t,s){return`__rw__:${e.length}:${e}:${t}:${s}`}function Es(e,t,s,n=-1){let r=!1,i=`
|
|
515
515
|
`,o="",a=-1,l=-1,c=null,f=-1,u=-1,d=[],h=0,m=!1,p=(A,P)=>{let D=1;for(;D<A.length;){let E=A[D];if(E==="r")r=!0,D++;else if(E==="s")D++;else{if(E==="d")return D+1<A.length?(i=A.substring(D+1),{nextArgIndex:P+1}):P+1<t.length?(i=t[P+1],{nextArgIndex:P+2}):{nextArgIndex:P+1};if(E==="n"){if(D+1<A.length){let O=A.substring(D+1);return a=Number.parseInt(O,10),(Number.isNaN(a)||a<0)&&(m=!0,a=0),{nextArgIndex:P+1}}else if(P+1<t.length)return a=Number.parseInt(t[P+1],10),(Number.isNaN(a)||a<0)&&(m=!0,a=0),{nextArgIndex:P+2};return{nextArgIndex:P+1}}else if(E==="N"){if(D+1<A.length){let O=A.substring(D+1);return l=Number.parseInt(O,10),(Number.isNaN(l)||l<0)&&(m=!0,l=0),{nextArgIndex:P+1}}else if(P+1<t.length)return l=Number.parseInt(t[P+1],10),(Number.isNaN(l)||l<0)&&(m=!0,l=0),{nextArgIndex:P+2};return{nextArgIndex:P+1}}else{if(E==="a")return D+1<A.length?(c=A.substring(D+1),{nextArgIndex:P+1}):P+1<t.length?(c=t[P+1],{nextArgIndex:P+2}):{nextArgIndex:P+1};if(E==="p")return D+1<A.length?(o=A.substring(D+1),{nextArgIndex:P+1}):P+1<t.length?(o=t[P+1],{nextArgIndex:P+2}):{nextArgIndex:P+1};if(E==="u"){if(D+1<A.length){let O=A.substring(D+1);return f=Number.parseInt(O,10),Number.isNaN(f)||f<0?{nextArgIndex:-2}:{nextArgIndex:P+1}}else if(P+1<t.length)return f=Number.parseInt(t[P+1],10),Number.isNaN(f)||f<0?{nextArgIndex:-2}:{nextArgIndex:P+2};return{nextArgIndex:P+1}}else if(E==="t"){if(D+1<A.length){let O=A.substring(D+1);return u=Number.parseFloat(O),Number.isNaN(u)&&(u=0),{nextArgIndex:P+1}}else if(P+1<t.length)return u=Number.parseFloat(t[P+1]),Number.isNaN(u)&&(u=0),{nextArgIndex:P+2};return{nextArgIndex:P+1}}else if(E==="e"||E==="i"||E==="P"){if(E==="i"&&P+1<t.length)return{nextArgIndex:P+2};D++}else D++}}}return{nextArgIndex:P+1}};for(;h<t.length;){let A=t[h];if(A.startsWith("-")&&A.length>1&&A!=="--"){let P=p(A,h);if(P.nextArgIndex===-1)return{stdout:"",stderr:"",exitCode:2};if(P.nextArgIndex===-2)return{stdout:"",stderr:"",exitCode:1};h=P.nextArgIndex}else if(A==="--")for(h++;h<t.length;)d.push(t[h]),h++;else d.push(A),h++}if(m)return _("","",1);if(d.length===0&&c===null&&d.push("REPLY"),u===0){if(c)ue(e,c);else{for(let A of d)e.state.env[A]="";d.length===0&&(e.state.env.REPLY="")}return _("","",0)}if(u<0&&u!==-1)return _("","",1);let g=s;f>=0?e.state.fileDescriptors?g=e.state.fileDescriptors.get(f)||"":g="":!g&&e.state.groupStdin!==void 0&&(g=e.state.groupStdin);let b=i===""?"\0":i,$="",N=0,y=!0,w=A=>{if(f>=0&&e.state.fileDescriptors)e.state.fileDescriptors.set(f,g.substring(A));else if(n>=0&&e.state.fileDescriptors){let P=e.state.fileDescriptors.get(n);if(P?.startsWith("__rw__:")){let D=Ci(P);if(D){let E=D.position+A;e.state.fileDescriptors.set(n,Pi(D.path,E,D.content))}}}else e.state.groupStdin!==void 0&&!s&&(e.state.groupStdin=g.substring(A))};if(l>=0){let A=Math.min(l,g.length);$=g.substring(0,A),N=A,y=A>=l,w(N);let P=d[0]||"REPLY";e.state.env[P]=$;for(let D=1;D<d.length;D++)e.state.env[d[D]]="";return _("","",y?0:1)}else if(a>=0){let A=0,P=0,D=!1;for(;P<g.length&&A<a;){let E=g[P];if(E===b){N=P+1,D=!0;break}if(!r&&E==="\\"&&P+1<g.length){let O=g[P+1];if(O===b&&b===`
|
|
@@ -533,7 +533,7 @@ Options:
|
|
|
533
533
|
+o pipefail Disable pipefail
|
|
534
534
|
-o xtrace Same as -x
|
|
535
535
|
+o xtrace Disable xtrace
|
|
536
|
-
`,Mn={e:"errexit",u:"nounset",x:"xtrace",v:"verbose",f:"noglob",C:"noclobber",a:"allexport",n:"noexec",h:null,b:null,m:null,B:null,H:null,P:null,T:null,E:null,p:null},zn={errexit:"errexit",pipefail:"pipefail",nounset:"nounset",xtrace:"xtrace",verbose:"verbose",noclobber:"noclobber",noglob:"noglob",allexport:"allexport",noexec:"noexec",posix:"posix",vi:"vi",emacs:"emacs",notify:null,monitor:null,braceexpand:null,histexpand:null,physical:null,functrace:null,errtrace:null,privileged:null,hashall:null,ignoreeof:null,"interactive-comments":null,keyword:null,onecmd:null},Vn=["errexit","nounset","pipefail","verbose","xtrace","posix","allexport","noclobber","noglob","noexec","vi","emacs"],jn=["braceexpand","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","nolog","notify","onecmd","physical","privileged"];function Bn(e,t,s){t!==null&&(s&&(t==="vi"?e.state.options.emacs=!1:t==="emacs"&&(e.state.options.vi=!1)),e.state.options[t]=s,De(e))}function Ni(e,t){return t+1<e.length&&!e[t+1].startsWith("-")&&!e[t+1].startsWith("+")}function ki(e,t){let s=Q(e,t);if(s.length===0)return`${t}=()`;let n=s.map(r=>{let i=e.state.env[`${t}_${r}`]??"";return`[${r}]=${
|
|
536
|
+
`,Mn={e:"errexit",u:"nounset",x:"xtrace",v:"verbose",f:"noglob",C:"noclobber",a:"allexport",n:"noexec",h:null,b:null,m:null,B:null,H:null,P:null,T:null,E:null,p:null},zn={errexit:"errexit",pipefail:"pipefail",nounset:"nounset",xtrace:"xtrace",verbose:"verbose",noclobber:"noclobber",noglob:"noglob",allexport:"allexport",noexec:"noexec",posix:"posix",vi:"vi",emacs:"emacs",notify:null,monitor:null,braceexpand:null,histexpand:null,physical:null,functrace:null,errtrace:null,privileged:null,hashall:null,ignoreeof:null,"interactive-comments":null,keyword:null,onecmd:null},Vn=["errexit","nounset","pipefail","verbose","xtrace","posix","allexport","noclobber","noglob","noexec","vi","emacs"],jn=["braceexpand","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","nolog","notify","onecmd","physical","privileged"];function Bn(e,t,s){t!==null&&(s&&(t==="vi"?e.state.options.emacs=!1:t==="emacs"&&(e.state.options.vi=!1)),e.state.options[t]=s,De(e))}function Ni(e,t){return t+1<e.length&&!e[t+1].startsWith("-")&&!e[t+1].startsWith("+")}function ki(e,t){let s=Q(e,t);if(s.length===0)return`${t}=()`;let n=s.map(r=>{let i=e.state.env[`${t}_${r}`]??"";return`[${r}]=${ke(i)}`});return`${t}=(${n.join(" ")})`}function Oi(e){return/^[a-zA-Z0-9_]+$/.test(e)?e:`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function Di(e,t){let s=be(e,t);if(s.length===0)return`${t}=()`;let n=s.map(r=>{let i=e.state.env[`${t}_${r}`]??"";return`[${Oi(r)}]=${ke(i)}`});return`${t}=(${n.join(" ")} )`}function Ii(e){let t=new Set,s=e.state.associativeArrays??new Set;for(let n of Object.keys(e.state.env)){let r=n.match(/^([a-zA-Z_][a-zA-Z0-9_]*)_(\d+)$/);if(r){let i=r[1];s.has(i)||t.add(i)}}return t}function Ti(e){return e.state.associativeArrays??new Set}function As(e,t){if(t.includes("--help"))return W(_t);if(t.length===0){let n=Ii(e),r=Ti(e),i=l=>{for(let c of r){let f=`${c}_`,u=`${c}__length`;if(l!==u&&l.startsWith(f)){if(l.slice(f.length).startsWith("_length"))continue;return!0}}return!1},o=[];for(let[l,c]of Object.entries(e.state.env)){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(l)||n.has(l)||r.has(l))continue;let f=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)_(\d+)$/);if(f&&n.has(f[1]))continue;let u=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)__length$/);u&&n.has(u[1])||i(l)||u&&r.has(u[1])||o.push([l,c])}let a=[];for(let[l,c]of o.sort(([f],[u])=>f<u?-1:f>u?1:0))a.push(`${l}=${$t(c)}`);for(let l of[...n].sort((c,f)=>c<f?-1:c>f?1:0))a.push(ki(e,l));for(let l of[...r].sort((c,f)=>c<f?-1:c>f?1:0))a.push(Di(e,l));return a.sort((l,c)=>{let f=l.split("=")[0],u=c.split("=")[0];return f<u?-1:f>u?1:0}),W(a.length>0?`${a.join(`
|
|
537
537
|
`)}
|
|
538
538
|
`:"")}let s=0;for(;s<t.length;){let n=t[s];if((n==="-o"||n==="+o")&&Ni(t,s)){let r=t[s+1];if(!(r in zn)){let i=`bash: set: ${r}: invalid option name
|
|
539
539
|
${_t}`;if(e.state.options.posix)throw new ae(1,"",i);return S(i)}Bn(e,zn[r],n==="-o"),s+=2;continue}if(n==="-o"){let r=Vn.map(a=>`${a.padEnd(16)}${e.state.options[a]?"on":"off"}`),i=jn.map(a=>`${a.padEnd(16)}off`),o=[...r,...i].sort();return W(`${o.join(`
|
|
@@ -552,13 +552,13 @@ ${_t}`;if(e.state.options.posix)throw new ae(1,"",r);return S(r)}return Ss(e,t.s
|
|
|
552
552
|
`,r=1;continue}if($===null)continue;if($<0){let N=le(e,d),y=N.length,w=e.state.currentLine;if(y===0){n+=`bash: line ${w}: unset: [${$}]: bad array subscript
|
|
553
553
|
`,r=1;continue}let v=y+$;if(v<0){n+=`bash: line ${w}: unset: [${$}]: bad array subscript
|
|
554
554
|
`,r=1;continue}let C=N[v][0];delete e.state.env[`${d}_${C}`];continue}delete e.state.env[`${d}_${$}`];continue}if(!Hn(i)){n+=`bash: unset: \`${i}': not a valid identifier
|
|
555
|
-
`,r=1;continue}let f=i;if(oe(e,i)){let d=
|
|
555
|
+
`,r=1;continue}let f=i;if(oe(e,i)){let d=Ee(e,i);d&&d!==i&&(f=d)}if(Pe(e,f)){n+=`bash: unset: ${f}: cannot unset: readonly variable
|
|
556
556
|
`,r=1;continue}let u=Te(e,f);if(u!==void 0&&u!==e.state.callDepth)qn(e,f);else if(e.state.fullyUnsetLocals?.has(f))delete e.state.env[f];else if(u!==void 0){let d=e.state.accessedTempEnvVars?.has(f),h=e.state.mutatedTempEnvVars?.has(f);if((d||h)&&e.state.localVarStack?.has(f)){let m=vt(e,f);m?m.value===void 0?delete e.state.env[f]:e.state.env[f]=m.value:delete e.state.env[f]}else delete e.state.env[f]}else Ps(e,f)||delete e.state.env[f];e.state.exportedVars?.delete(f);continue}let o=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(o){let c=o[1],f=o[2];if(f==="@"||f==="*"){let p=le(e,c);for(let[g]of p)delete e.state.env[`${c}_${g}`];delete e.state.env[c];continue}let u=e.state.associativeArrays?.has(c);if(u){let p=await Zn(e,f);delete e.state.env[`${c}_${p}`];continue}let d=Rt(e,c);if(c in e.state.env&&!d&&!u){n+=`bash: unset: ${c}: not an array variable
|
|
557
557
|
`,r=1;continue}let m=await Un(e,f);if(m===null&&d){n+=`bash: unset: ${f}: not a valid identifier
|
|
558
558
|
`,r=1;continue}if(m===null)continue;if(m<0){let p=le(e,c),g=p.length,b=e.state.currentLine;if(g===0){n+=`bash: line ${b}: unset: [${m}]: bad array subscript
|
|
559
559
|
`,r=1;continue}let $=g+m;if($<0){n+=`bash: line ${b}: unset: [${m}]: bad array subscript
|
|
560
560
|
`,r=1;continue}let N=p[$][0];delete e.state.env[`${c}_${N}`];continue}delete e.state.env[`${c}_${m}`];continue}if(!Hn(i)){n+=`bash: unset: \`${i}': not a valid identifier
|
|
561
|
-
`,r=1;continue}let a=i;if(oe(e,i)){let c=
|
|
561
|
+
`,r=1;continue}let a=i;if(oe(e,i)){let c=Ee(e,i);c&&c!==i&&(a=c)}if(Pe(e,a)){n+=`bash: unset: ${a}: cannot unset: readonly variable
|
|
562
562
|
`,r=1;continue}let l=Te(e,a);if(l!==void 0&&l!==e.state.callDepth)qn(e,a);else if(e.state.fullyUnsetLocals?.has(a))delete e.state.env[a];else if(l!==void 0){let c=e.state.accessedTempEnvVars?.has(a),f=e.state.mutatedTempEnvVars?.has(a);if((c||f)&&e.state.localVarStack?.has(a)){let u=vt(e,a);u?u.value===void 0?delete e.state.env[a]:e.state.env[a]=u.value:delete e.state.env[a]}else delete e.state.env[a]}else Ps(e,a)||delete e.state.env[a];e.state.exportedVars?.delete(a),e.state.functions.delete(i)}return _("",n,r)}var ks=["extglob","dotglob","nullglob","failglob","globstar","globskipdots","nocaseglob","nocasematch","expand_aliases","lastpipe","xpg_echo"],Ri=["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 Ct(e){return ks.includes(e)}function Li(e){return Ri.includes(e)}function Gn(e,t){let s=!1,n=!1,r=!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":n=!0;break;case"p":r=!0;break;case"q":i=!0;break;case"o":o=!0;break;default:return{exitCode:2,stdout:"",stderr:`shopt: -${m}: invalid option
|
|
563
563
|
`}}}l++}else break}for(;l<t.length;)a.push(t[l]),l++;if(o)return Wi(e,a,s,n,r,i);if(s&&n)return{exitCode:1,stdout:"",stderr:`shopt: cannot set and unset shell options simultaneously
|
|
564
564
|
`};if(a.length===0){if(s||n){let h=[];for(let m of ks){let p=e.state.shoptOptions[m];s&&p?h.push(r?`shopt -s ${m}`:`${m} on`):n&&!p&&h.push(r?`shopt -u ${m}`:`${m} off`)}return{exitCode:0,stdout:h.length>0?`${h.join(`
|
|
@@ -618,7 +618,7 @@ ${e} ()
|
|
|
618
618
|
`,126):S(`bash: ${t}: No such file or directory
|
|
619
619
|
`,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,n);let{cmd:f,path:u}=c;t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,u));let d=n||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};try{return await f.execute(s,m)}catch(p){return S(`${t}: ${me(p)}
|
|
620
620
|
`)}}async function Os(e,t){let s=e.state.inCondition;e.state.inCondition=!0;let n="",r="",i=0;try{for(let o of t){let a=await e.executeStatement(o);n+=a.stdout,r+=a.stderr,i=a.exitCode}}finally{e.state.inCondition=s}return{stdout:n,stderr:r,exitCode:i}}function qe(e,t,s,n){if(e instanceof ne)return t+=e.stdout,s+=e.stderr,e.levels>1&&n>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 re)return t+=e.stdout,s+=e.stderr,e.levels>1&&n>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 te||e instanceof ie||e instanceof z||e instanceof ee)return e.prependOutput(t,s),{action:"rethrow",stdout:t,stderr:s,error:e};let r=me(e);return{action:"error",stdout:t,stderr:`${s}${r}
|
|
621
|
-
`,exitCode:1}}async function Nt(e,t,s="",n=""){let r=s,i=n,o=0;try{for(let a of t){let l=await e.executeStatement(a);r+=l.stdout,i+=l.stderr,o=l.exitCode}}catch(a){if(Je(a)||a instanceof ie||a instanceof z||a instanceof ee||a instanceof
|
|
621
|
+
`,exitCode:1}}async function Nt(e,t,s="",n=""){let r=s,i=n,o=0;try{for(let a of t){let l=await e.executeStatement(a);r+=l.stdout,i+=l.stderr,o=l.exitCode}}catch(a){if(Je(a)||a instanceof ie||a instanceof z||a instanceof ee||a instanceof ve)throw a.prependOutput(r,i),a;return{stdout:r,stderr:`${i}${me(a)}
|
|
622
622
|
`,exitCode:1}}return{stdout:r,stderr:i,exitCode:o}}async function rr(e,t){let s="",n="";for(let r of t.clauses){let i=await Os(e,r.condition);if(s+=i.stdout,n+=i.stderr,i.exitCode===0)return Nt(e,r.body,s,n)}return t.elseBody?Nt(e,t.elseBody,s,n):_(s,n,0)}async function ir(e,t){let s=await pe(e,t.redirections);if(s)return s;let n="",r="",i=0,o=0;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t.variable))return S(`bash: \`${t.variable}': not a valid identifier
|
|
623
623
|
`);let a=[];if(t.words===null)a=(e.state.env["@"]||"").split(" ").filter(Boolean);else if(t.words.length===0)a=[];else try{for(let c of t.words){let f=await de(e,c);a.push(...f.values)}}catch(c){if(c instanceof Qe)return{stdout:"",stderr:c.stderr,exitCode:1};throw c}e.state.loopDepth++;try{for(let c of a){o++,o>e.limits.maxLoopIterations&&ge(`for loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r),e.state.env[t.variable]=c;try{for(let f of t.body){let u=await e.executeStatement(f);n+=u.stdout,r+=u.stderr,i=u.exitCode}}catch(f){let u=qe(f,n,r,e.state.loopDepth);if(n=u.stdout,r=u.stderr,u.action==="break")break;if(u.action==="continue")continue;if(u.action==="error"){let d=_(n,r,u.exitCode??1);return j(e,d,t.redirections)}throw u.error}}}finally{e.state.loopDepth--}let l=_(n,r,i);return j(e,l,t.redirections)}async function or(e,t){let s=await pe(e,t.redirections);if(s)return s;let n=t.line;n!==void 0&&(e.state.currentLine=n);let r="",i="",o=0,a=0;t.init&&await V(e,t.init.expression),e.state.loopDepth++;try{for(;a++,a>e.limits.maxLoopIterations&&ge(`for loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,i),!(t.condition&&(n!==void 0&&(e.state.currentLine=n),await V(e,t.condition.expression)===0));){try{for(let c of t.body){let f=await e.executeStatement(c);r+=f.stdout,i+=f.stderr,o=f.exitCode}}catch(c){let f=qe(c,r,i,e.state.loopDepth);if(r=f.stdout,i=f.stderr,f.action==="break")break;if(f.action==="continue"){t.update&&await V(e,t.update.expression);continue}if(f.action==="error"){let u=_(r,i,f.exitCode??1);return j(e,u,t.redirections)}throw f.error}t.update&&await V(e,t.update.expression)}}finally{e.state.loopDepth--}let l=_(r,i,o);return j(e,l,t.redirections)}async function ar(e,t,s=""){let n="",r="",i=0,o=0,a=s;for(let c of t.redirections)if((c.operator==="<<"||c.operator==="<<-")&&c.target.type==="HereDoc"){let f=c.target,u=await I(e,f.content);f.stripTabs&&(u=u.split(`
|
|
624
624
|
`).map(d=>d.replace(/^\t+/,"")).join(`
|
|
@@ -638,16 +638,16 @@ user 0m0.000s
|
|
|
638
638
|
sys 0m0.000s
|
|
639
639
|
`,i={...i,stderr:i.stderr+p}}return l&&!e.state.shoptOptions.lastpipe&&(e.state.lastArg=c),i}async function yr(e,t){let s={},n="";for(let r of t.assignments){let i=r.name;if(r.array){let f=await Bi(e,t,i,r.array,r.append,s);if(f.error)return{continueToNext:!1,xtraceOutput:n,tempAssignments:s,error:f.error};if(n+=f.xtraceOutput,f.continueToNext)continue}let o=r.value?await I(e,r.value):"";if(i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[\]$/))return{continueToNext:!1,xtraceOutput:n,tempAssignments:s,error:_("",`bash: ${i}: bad array subscript
|
|
640
640
|
`,1)};let l=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(l){let f=await Gi(e,t,l[1],l[2],o,r.append,s);if(f.error)return{continueToNext:!1,xtraceOutput:n,tempAssignments:s,error:f.error};if(f.continueToNext)continue}let c=await Xi(e,t,i,o,r.append,s);if(c.error)return{continueToNext:!1,xtraceOutput:n,tempAssignments:s,error:c.error};n+=c.xtraceOutput,c.continueToNext}return{continueToNext:!1,xtraceOutput:n,tempAssignments:s}}async function Bi(e,t,s,n,r,i){let o="";if(/\[.+\]$/.test(s))return{continueToNext:!1,xtraceOutput:"",error:_("",`bash: ${s}: cannot assign list to array member
|
|
641
|
-
`,1)};if(oe(e,s)){let f=Bs(e,s);if(f===void 0||f==="")throw new z(1,"","");let u=
|
|
642
|
-
`,1)}}if(
|
|
641
|
+
`,1)};if(oe(e,s)){let f=Bs(e,s);if(f===void 0||f==="")throw new z(1,"","");let u=Ee(e,s);if(u&&/^[a-zA-Z_][a-zA-Z0-9_]*\[@\]$/.test(u))return{continueToNext:!1,xtraceOutput:"",error:_("",`bash: ${s}: cannot assign list to array member
|
|
642
|
+
`,1)}}if(Pe(e,s)){if(t.name)return o+=`bash: ${s}: readonly variable
|
|
643
643
|
`,{continueToNext:!0,xtraceOutput:o};let f=K(e,s);if(f)return{continueToNext:!1,xtraceOutput:"",error:f}}let a=e.state.associativeArrays?.has(s),l=Hi(n),c=()=>{let f=`${s}_`;for(let u of Object.keys(e.state.env))u.startsWith(f)&&!u.includes("__")&&delete e.state.env[u];delete e.state.env[s]};if(a&&l?await Ui(e,t,s,n,r,c,f=>{o+=f}):l?await qi(e,s,n,r,c):await Zi(e,s,n,r,c),t.name){i[s]=e.state.env[s];let u=`(${n.map(d=>tt(d)).join(" ")})`;e.state.env[s]=u}return{continueToNext:!0,xtraceOutput:o}}function Hi(e){return e.some(t=>{if(t.parts.length>=2){let s=t.parts[0],n=t.parts[1];if(s.type!=="Glob"||!s.pattern.startsWith("["))return!1;if(s.pattern==="["&&(n.type==="DoubleQuoted"||n.type==="SingleQuoted")){if(t.parts.length<3)return!1;let r=t.parts[2];return r.type!=="Literal"?!1:r.value.startsWith("]=")||r.value.startsWith("]+=")}return n.type!=="Literal"?!1:n.value.startsWith("]")?n.value.startsWith("]=")||n.value.startsWith("]+="):s.pattern.endsWith("]")?n.value.startsWith("=")||n.value.startsWith("+="):!1}return!1})}async function Ui(e,t,s,n,r,i,o){let a=[];for(let l of n){let c=Dt(l);if(c){let{key:f,valueParts:u,append:d}=c,h;u.length>0?h=await I(e,{type:"Word",parts:u}):h="",h=B(e,h),a.push({type:"keyed",key:f,value:h,append:d})}else{let f=await I(e,l);a.push({type:"invalid",expandedValue:f})}}r||i();for(let l of a)if(l.type==="keyed")if(l.append){let c=e.state.env[`${s}_${l.key}`]??"";e.state.env[`${s}_${l.key}`]=c+l.value}else e.state.env[`${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
|
|
644
|
-
`)}}async function qi(e,t,s,n,r){let i=[];for(let a of s){let l=Dt(a);if(l){let{key:c,valueParts:f,append:u}=l,d;f.length>0?d=await I(e,{type:"Word",parts:f}):d="",d=B(e,d),i.push({type:"keyed",indexExpr:c,value:d,append:u})}else{let c=await de(e,a);i.push({type:"non-keyed",values:c.values})}}n||r();let o=0;for(let a of i)if(a.type==="keyed"){let l;try{let c=new M,f=q(c,a.indexExpr);l=await V(e,f.expression,!1)}catch{if(/^-?\d+$/.test(a.indexExpr))l=Number.parseInt(a.indexExpr,10);else{let c=e.state.env[a.indexExpr];l=c?Number.parseInt(c,10):0,Number.isNaN(l)&&(l=0)}}if(a.append){let c=e.state.env[`${t}_${l}`]??"";e.state.env[`${t}_${l}`]=c+a.value}else e.state.env[`${t}_${l}`]=a.value;o=l+1}else for(let l of a.values)e.state.env[`${t}_${o++}`]=l}async function Zi(e,t,s,n,r){let i=[];for(let a of s){let l=await de(e,a);i.push(...l.values)}let o=0;if(n){let a=le(e,t);if(a.length>0)o=Math.max(...a.map(([c])=>typeof c=="number"?c:0))+1;else if(e.state.env[t]!==void 0){let l=e.state.env[t];e.state.env[`${t}_0`]=l,delete e.state.env[t],o=1}}else r();for(let a=0;a<i.length;a++)e.state.env[`${t}_${o+a}`]=i[a];n||(e.state.env[`${t}__length`]=String(i.length))}async function Gi(e,t,s,n,r,i,o){let a=s;if(oe(e,s)){let u=
|
|
645
|
-
`,1)};a=u}}if(
|
|
644
|
+
`)}}async function qi(e,t,s,n,r){let i=[];for(let a of s){let l=Dt(a);if(l){let{key:c,valueParts:f,append:u}=l,d;f.length>0?d=await I(e,{type:"Word",parts:f}):d="",d=B(e,d),i.push({type:"keyed",indexExpr:c,value:d,append:u})}else{let c=await de(e,a);i.push({type:"non-keyed",values:c.values})}}n||r();let o=0;for(let a of i)if(a.type==="keyed"){let l;try{let c=new M,f=q(c,a.indexExpr);l=await V(e,f.expression,!1)}catch{if(/^-?\d+$/.test(a.indexExpr))l=Number.parseInt(a.indexExpr,10);else{let c=e.state.env[a.indexExpr];l=c?Number.parseInt(c,10):0,Number.isNaN(l)&&(l=0)}}if(a.append){let c=e.state.env[`${t}_${l}`]??"";e.state.env[`${t}_${l}`]=c+a.value}else e.state.env[`${t}_${l}`]=a.value;o=l+1}else for(let l of a.values)e.state.env[`${t}_${o++}`]=l}async function Zi(e,t,s,n,r){let i=[];for(let a of s){let l=await de(e,a);i.push(...l.values)}let o=0;if(n){let a=le(e,t);if(a.length>0)o=Math.max(...a.map(([c])=>typeof c=="number"?c:0))+1;else if(e.state.env[t]!==void 0){let l=e.state.env[t];e.state.env[`${t}_0`]=l,delete e.state.env[t],o=1}}else r();for(let a=0;a<i.length;a++)e.state.env[`${t}_${o+a}`]=i[a];n||(e.state.env[`${t}__length`]=String(i.length))}async function Gi(e,t,s,n,r,i,o){let a=s;if(oe(e,s)){let u=Ee(e,s);if(u&&u!==s){if(u.includes("["))return{continueToNext:!1,xtraceOutput:"",error:_("",`bash: \`${u}': not a valid identifier
|
|
645
|
+
`,1)};a=u}}if(Pe(e,a)){if(t.name)return{continueToNext:!0,xtraceOutput:""};let u=K(e,a);if(u)return{continueToNext:!1,xtraceOutput:"",error:u}}let l=e.state.associativeArrays?.has(a),c;if(l)c=await gr(e,a,n);else{let u=await Ki(e,a,n);if(u.error)return{continueToNext:!1,xtraceOutput:"",error:u.error};c=`${a}_${u.index}`}let f=i?(e.state.env[c]||"")+r:r;if(t.name)o[c]=e.state.env[c],e.state.env[c]=f;else{let u=Te(e,a);if(u!==void 0&&u===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[c])}e.state.env[c]=f}return{continueToNext:!0,xtraceOutput:""}}async function gr(e,t,s){let n;if(s.startsWith("'")&&s.endsWith("'"))n=s.slice(1,-1);else if(s.startsWith('"')&&s.endsWith('"')){let r=s.slice(1,-1),o=new M().parseWordFromString(r,!0,!1);n=await I(e,o)}else if(s.includes("$")){let i=new M().parseWordFromString(s,!1,!1);n=await I(e,i)}else n=s;return`${t}_${n}`}async function Ki(e,t,s){let n=s;s.startsWith('"')&&s.endsWith('"')&&s.length>=2&&(n=s.slice(1,-1));let r;if(/^-?\d+$/.test(n))r=Number.parseInt(n,10);else{try{let i=new M,o=q(i,n);r=await V(e,o.expression,!1)}catch(i){if(i instanceof Ce){let l=`bash: line ${e.state.currentLine}: ${s}: ${i.message}
|
|
646
646
|
`;if(i.fatal)throw new z(1,"",l);return{index:0,error:_("",l,1)}}let o=e.state.env[s];r=o?Number.parseInt(o,10):0}Number.isNaN(r)&&(r=0)}if(r<0){let i=le(e,t);if(i.length===0){let a=e.state.currentLine;return{index:0,error:_("",`bash: line ${a}: ${t}[${s}]: bad array subscript
|
|
647
647
|
`,1)}}if(r=Math.max(...i.map(([a])=>typeof a=="number"?a:0))+1+r,r<0){let a=e.state.currentLine;return{index:0,error:_("",`bash: line ${a}: ${t}[${s}]: bad array subscript
|
|
648
648
|
`,1)}}}return{index:r}}async function Xi(e,t,s,n,r,i){let o="",a=s,l=null;if(oe(e,s)){let u=Hs(e,s,n);if(u===void 0)return{continueToNext:!1,xtraceOutput:"",error:_("",`bash: ${s}: circular name reference
|
|
649
|
-
`,1)};if(u===null)return{continueToNext:!0,xtraceOutput:""};a=u;let d=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);d&&(l={arrayName:d[1],subscriptExpr:d[2]},a=d[1])}if(
|
|
650
|
-
`,{continueToNext:!0,xtraceOutput:o};let u=K(e,a);if(u)return{continueToNext:!1,xtraceOutput:"",error:u}}let c;if(Be(e,a))try{let u=new M;if(r){let h=`(${e.state.env[a]||"0"}) + (${n})`,m=q(u,h);c=String(await V(e,m.expression))}else{let d=q(u,n);c=String(await V(e,d.expression))}}catch{c="0"}else{let{isArray:u}=await import("./chunks/expansion-BOR3ELLC.js"),d=u(e,a)?`${a}_0`:a;c=r?(e.state.env[d]||"")+n:n}c=Re(e,a,c),o+=await pr(e,a,c);let f=a;if(l)f=await Yi(e,l);else{let{isArray:u}=await import("./chunks/expansion-BOR3ELLC.js");u(e,a)&&(f=`${a}_0`)}return t.name?(i[f]=e.state.env[f],e.state.env[f]=c):(e.state.env[f]=c,e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(a)),e.state.tempEnvBindings?.some(u=>u.has(a))&&(e.state.mutatedTempEnvVars=e.state.mutatedTempEnvVars||new Set,e.state.mutatedTempEnvVars.add(a))),{continueToNext:!1,xtraceOutput:o}}async function Yi(e,t){let{arrayName:s,subscriptExpr:n}=t;if(e.state.associativeArrays?.has(s))return gr(e,s,n);let i;if(/^-?\d+$/.test(n))i=Number.parseInt(n,10);else{try{let o=new M,a=q(o,n);i=await V(e,a.expression,!1)}catch{let o=e.state.env[n];i=o?Number.parseInt(o,10):0}Number.isNaN(i)&&(i=0)}if(i<0){let o=le(e,s);o.length>0&&(i=Math.max(...o.map(l=>l[0]))+1+i)}return`${s}_${i}`}async function wr(e,t,s,n){let r=await pe(e,t.redirections);if(r)return r;let i={...e.state.env},o=e.state.cwd,a={...e.state.options},l=e.state.localScopes,c=e.state.localVarStack,f=e.state.localVarDepth,u=e.state.fullyUnsetLocals;if(e.state.localScopes=l.map(v=>new Map(v)),c){e.state.localVarStack=new Map;for(let[v,C]of c.entries())e.state.localVarStack.set(v,C.map(k=>({...k})))}f&&(e.state.localVarDepth=new Map(f)),u&&(e.state.fullyUnsetLocals=new Map(u));let d=e.state.loopDepth,h=e.state.parentHasLoopContext;e.state.parentHasLoopContext=d>0,e.state.loopDepth=0;let m=e.state.lastArg,p=e.state.bashPid;e.state.bashPid=e.state.nextVirtualPid++;let g=e.state.groupStdin;s&&(e.state.groupStdin=s);let b="",$="",N=0,y=()=>{e.state.env=i,e.state.cwd=o,e.state.options=a,e.state.localScopes=l,e.state.localVarStack=c,e.state.localVarDepth=f,e.state.fullyUnsetLocals=u,e.state.loopDepth=d,e.state.parentHasLoopContext=h,e.state.groupStdin=g,e.state.bashPid=p,e.state.lastArg=m};try{for(let v of t.body){let C=await n(v);b+=C.stdout,$+=C.stderr,N=C.exitCode}}catch(v){if(y(),v instanceof ee)throw v;if(v instanceof
|
|
649
|
+
`,1)};if(u===null)return{continueToNext:!0,xtraceOutput:""};a=u;let d=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);d&&(l={arrayName:d[1],subscriptExpr:d[2]},a=d[1])}if(Pe(e,a)){if(t.name)return o+=`bash: ${a}: readonly variable
|
|
650
|
+
`,{continueToNext:!0,xtraceOutput:o};let u=K(e,a);if(u)return{continueToNext:!1,xtraceOutput:"",error:u}}let c;if(Be(e,a))try{let u=new M;if(r){let h=`(${e.state.env[a]||"0"}) + (${n})`,m=q(u,h);c=String(await V(e,m.expression))}else{let d=q(u,n);c=String(await V(e,d.expression))}}catch{c="0"}else{let{isArray:u}=await import("./chunks/expansion-BOR3ELLC.js"),d=u(e,a)?`${a}_0`:a;c=r?(e.state.env[d]||"")+n:n}c=Re(e,a,c),o+=await pr(e,a,c);let f=a;if(l)f=await Yi(e,l);else{let{isArray:u}=await import("./chunks/expansion-BOR3ELLC.js");u(e,a)&&(f=`${a}_0`)}return t.name?(i[f]=e.state.env[f],e.state.env[f]=c):(e.state.env[f]=c,e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(a)),e.state.tempEnvBindings?.some(u=>u.has(a))&&(e.state.mutatedTempEnvVars=e.state.mutatedTempEnvVars||new Set,e.state.mutatedTempEnvVars.add(a))),{continueToNext:!1,xtraceOutput:o}}async function Yi(e,t){let{arrayName:s,subscriptExpr:n}=t;if(e.state.associativeArrays?.has(s))return gr(e,s,n);let i;if(/^-?\d+$/.test(n))i=Number.parseInt(n,10);else{try{let o=new M,a=q(o,n);i=await V(e,a.expression,!1)}catch{let o=e.state.env[n];i=o?Number.parseInt(o,10):0}Number.isNaN(i)&&(i=0)}if(i<0){let o=le(e,s);o.length>0&&(i=Math.max(...o.map(l=>l[0]))+1+i)}return`${s}_${i}`}async function wr(e,t,s,n){let r=await pe(e,t.redirections);if(r)return r;let i={...e.state.env},o=e.state.cwd,a={...e.state.options},l=e.state.localScopes,c=e.state.localVarStack,f=e.state.localVarDepth,u=e.state.fullyUnsetLocals;if(e.state.localScopes=l.map(v=>new Map(v)),c){e.state.localVarStack=new Map;for(let[v,C]of c.entries())e.state.localVarStack.set(v,C.map(k=>({...k})))}f&&(e.state.localVarDepth=new Map(f)),u&&(e.state.fullyUnsetLocals=new Map(u));let d=e.state.loopDepth,h=e.state.parentHasLoopContext;e.state.parentHasLoopContext=d>0,e.state.loopDepth=0;let m=e.state.lastArg,p=e.state.bashPid;e.state.bashPid=e.state.nextVirtualPid++;let g=e.state.groupStdin;s&&(e.state.groupStdin=s);let b="",$="",N=0,y=()=>{e.state.env=i,e.state.cwd=o,e.state.options=a,e.state.localScopes=l,e.state.localVarStack=c,e.state.localVarDepth=f,e.state.fullyUnsetLocals=u,e.state.loopDepth=d,e.state.parentHasLoopContext=h,e.state.groupStdin=g,e.state.bashPid=p,e.state.lastArg=m};try{for(let v of t.body){let C=await n(v);b+=C.stdout,$+=C.stderr,N=C.exitCode}}catch(v){if(y(),v instanceof ee)throw v;if(v instanceof ve){b+=v.stdout,$+=v.stderr;let k=_(b,$,0);return j(e,k,t.redirections)}if(v instanceof ne||v instanceof re){b+=v.stdout,$+=v.stderr;let k=_(b,$,0);return j(e,k,t.redirections)}if(v instanceof z){b+=v.stdout,$+=v.stderr;let k=_(b,$,v.exitCode);return j(e,k,t.redirections)}if(v instanceof te){b+=v.stdout,$+=v.stderr;let k=_(b,$,v.exitCode);return j(e,k,t.redirections)}if(v instanceof ie){let k=_(b+v.stdout,$+v.stderr,v.exitCode);return j(e,k,t.redirections)}let C=_(b,`${$}${me(v)}
|
|
651
651
|
`,1);return j(e,C,t.redirections)}y();let w=_(b,$,N);return j(e,w,t.redirections)}async function vr(e,t,s,n){let r="",i="",o=0,a=await bt(e,t.redirections);if(a)return a;let l=s;for(let u of t.redirections)if((u.operator==="<<"||u.operator==="<<-")&&u.target.type==="HereDoc"){let d=u.target,h=await I(e,d.content);d.stripTabs&&(h=h.split(`
|
|
652
652
|
`).map(p=>p.replace(/^\t+/,"")).join(`
|
|
653
653
|
`));let m=u.fd??0;m!==0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(m,h)):l=h}else if(u.operator==="<<<"&&u.target.type==="Word")l=`${await I(e,u.target)}
|
|
@@ -656,7 +656,7 @@ sys 0m0.000s
|
|
|
656
656
|
`,1)}e.state.groupStdin=c;let f=_(r,i,o);return j(e,f,t.redirections)}async function br(e,t,s,n,r){let i;try{i=await e.fs.readFile(t)}catch{return S(`bash: ${t}: No such file or directory
|
|
657
657
|
`,127)}if(i.startsWith("#!")){let g=i.indexOf(`
|
|
658
658
|
`);g!==-1&&(i=i.slice(g+1))}let o={...e.state.env},a=e.state.cwd,l={...e.state.options},c=e.state.loopDepth,f=e.state.parentHasLoopContext,u=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++,n&&(e.state.groupStdin=n),e.state.currentSource=t,e.state.env[0]=t,e.state.env["#"]=String(s.length),e.state.env["@"]=s.join(" "),e.state.env["*"]=s.join(" ");for(let g=0;g<s.length&&g<9;g++)e.state.env[String(g+1)]=s[g];for(let g=s.length+1;g<=9;g++)delete e.state.env[String(g)];let p=()=>{e.state.env=o,e.state.cwd=a,e.state.options=l,e.state.loopDepth=c,e.state.parentHasLoopContext=f,e.state.lastArg=u,e.state.bashPid=d,e.state.groupStdin=h,e.state.currentSource=m};try{let b=new M().parse(i),$=await r(b);return p(),$}catch(g){if(p(),g instanceof z||g instanceof ee)throw g;if(g.name==="ParseException")return S(`bash: ${t}: ${g.message}
|
|
659
|
-
`);throw g}}var Ze=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}}buildExportedEnv(){let t=this.ctx.state.exportedVars,s=this.ctx.state.tempExportedVars,n=new Set;if(t)for(let i of t)n.add(i);if(s)for(let i of s)n.add(i);if(n.size===0)return{};let r={};for(let i of n){let o=this.ctx.state.env[i];o!==void 0&&(r[i]=o)}return r}async executeScript(t){let s="",n="",r=0;for(let i of t.statements)try{let o=await this.executeStatement(i);s+=o.stdout,n+=o.stderr,r=o.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r)}catch(o){if(o instanceof z)throw o.prependOutput(s,n),o;if(o instanceof ae)return s+=o.stdout,n+=o.stderr,r=o.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r),{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}};if(o instanceof ee)throw o;if(o instanceof ie)return s+=o.stdout,n+=o.stderr,r=o.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r),{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}};if(o instanceof xs)return s+=o.stdout,n+=o.stderr,r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r),{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}};if(o instanceof Ye)return s+=o.stdout,n+=o.stderr,r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r),{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}};if(o instanceof
|
|
659
|
+
`);throw g}}var Ze=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}}buildExportedEnv(){let t=this.ctx.state.exportedVars,s=this.ctx.state.tempExportedVars,n=new Set;if(t)for(let i of t)n.add(i);if(s)for(let i of s)n.add(i);if(n.size===0)return{};let r={};for(let i of n){let o=this.ctx.state.env[i];o!==void 0&&(r[i]=o)}return r}async executeScript(t){let s="",n="",r=0;for(let i of t.statements)try{let o=await this.executeStatement(i);s+=o.stdout,n+=o.stderr,r=o.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r)}catch(o){if(o instanceof z)throw o.prependOutput(s,n),o;if(o instanceof ae)return s+=o.stdout,n+=o.stderr,r=o.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r),{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}};if(o instanceof ee)throw o;if(o instanceof ie)return s+=o.stdout,n+=o.stderr,r=o.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r),{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}};if(o instanceof xs)return s+=o.stdout,n+=o.stderr,r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r),{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}};if(o instanceof Ye)return s+=o.stdout,n+=o.stderr,r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r),{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}};if(o instanceof Ce){s+=o.stdout,n+=o.stderr,r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r);continue}if(o instanceof Rs){s+=o.stdout,n+=o.stderr,r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r);continue}if(o instanceof ne||o instanceof re){if(this.ctx.state.loopDepth>0)throw o.prependOutput(s,n),o;s+=o.stdout,n+=o.stderr;continue}throw o instanceof te&&o.prependOutput(s,n),o}return{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}}}async executeUserScript(t,s,n=""){return br(this.ctx,t,s,n,r=>this.executeScript(r))}async executeStatement(t){if(this.ctx.state.commandCount++,this.ctx.state.commandCount>this.ctx.limits.maxCommandCount&&ge(`too many commands executed (>${this.ctx.limits.maxCommandCount}), increase executionLimits.maxCommandCount`,"commands"),t.deferredError)throw new et(t.deferredError.message,t.line??1,1);if(this.ctx.state.options.noexec)return L;this.ctx.state.errexitSafe=!1;let s="",n="";this.ctx.state.options.verbose&&!this.ctx.state.suppressVerbose&&t.sourceText&&(n+=`${t.sourceText}
|
|
660
660
|
`);let r=0,i=-1,o=!1;for(let c=0;c<t.pipelines.length;c++){let f=t.pipelines[c],u=c>0?t.operators[c-1]:null;if(u==="&&"&&r!==0||u==="||"&&r===0)continue;let d=await this.executePipeline(f);s+=d.stdout,n+=d.stderr,r=d.exitCode,i=c,o=f.negated,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r)}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&&r!==0&&i===t.pipelines.length-1&&!o&&!this.ctx.state.inCondition&&!l)throw new ie(r,s,n);return _(s,n,r)}async executePipeline(t){return mr(this.ctx,t,(s,n)=>this.executeCommand(s,n))}async executeCommand(t,s){switch(t.type){case"SimpleCommand":return this.executeSimpleCommand(t,s);case"If":return rr(this.ctx,t);case"For":return ir(this.ctx,t);case"CStyleFor":return or(this.ctx,t);case"While":return ar(this.ctx,t,s);case"Until":return lr(this.ctx,t);case"Case":return cr(this.ctx,t);case"Subshell":return this.executeSubshell(t,s);case"Group":return this.executeGroup(t,s);case"FunctionDef":return Cn(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(n){if(n instanceof Qe)return S(n.stderr);throw n}}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 v=this.expandAlias(y);if(v===y)break;y=v,w--}this.aliasExpansionStack.clear(),y!==t&&(t=y)}this.ctx.state.expansionStderr="";let n=await yr(this.ctx,t);if(n.error)return n.error;let r=n.tempAssignments,i=n.xtraceOutput;if(!t.name){if(t.redirections.length>0){let w=await pe(this.ctx,t.redirections);if(w)return w;let v=_("",i,0);return j(this.ctx,v,t.redirections)}this.ctx.state.lastArg="";let y=(this.ctx.state.expansionStderr||"")+i;return this.ctx.state.expansionStderr="",_("",y,this.ctx.state.lastExitCode)}let o=t.name&&Ds(t.name,["local","declare","typeset","export","readonly"]),a=Object.keys(r);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 bt(this.ctx,t.redirections);if(l){for(let[y,w]of Object.entries(r))w===void 0?delete this.ctx.state.env[y]:this.ctx.state.env[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,v=await I(this.ctx,w.content);w.stripTabs&&(v=v.split(`
|
|
661
661
|
`).map(k=>k.replace(/^\t+/,"")).join(`
|
|
662
662
|
`));let C=y.fd??0;C!==0?(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),this.ctx.state.fileDescriptors.set(C,v)):s=v;continue}if(y.operator==="<<<"&&y.target.type==="Word"){s=`${await I(this.ctx,y.target)}
|
|
@@ -664,17 +664,17 @@ sys 0m0.000s
|
|
|
664
664
|
`)}if(y.operator==="<&"&&y.target.type==="Word"){let w=await I(this.ctx,y.target),v=Number.parseInt(w,10);if(!Number.isNaN(v)&&this.ctx.state.fileDescriptors){let C=this.ctx.state.fileDescriptors.get(v);if(C!==void 0)if(C.startsWith("__rw__:")){let k=fr(C);k&&(s=k.content.slice(k.position),c=v)}else C.startsWith("__file__:")||C.startsWith("__file_append__:")||(s=C)}}}let f=await I(this.ctx,t.name),u=[],d=[];if(Ds(t.name,["local","declare","typeset","export","readonly"])&&(f==="local"||f==="declare"||f==="typeset"||f==="export"||f==="readonly"))for(let y of t.args){let w=await cn(this.ctx,y);if(w)u.push(w),d.push(!0);else{let v=await fn(this.ctx,y);if(v!==null)u.push(v),d.push(!0);else{let C=await de(this.ctx,y);for(let k of C.values)u.push(k),d.push(C.quoted)}}}else for(let y of t.args){let w=await de(this.ctx,y);for(let v of w.values)u.push(v),d.push(w.quoted)}if(!f){if(t.name.parts.every(w=>w.type==="CommandSubstitution"||w.type==="ParameterExpansion"||w.type==="ArithmeticExpansion")){if(u.length>0){let w=u.shift();return d.shift(),await this.runCommand(w,u,d,s,!1,!1,c)}return _("","",this.ctx.state.lastExitCode)}return S(`bash: : command not found
|
|
665
665
|
`,127)}if(f==="exec"&&(u.length===0||u[0]==="--")){for(let y of t.redirections){if(y.target.type==="HereDoc"||y.fdVariable)continue;let w=await I(this.ctx,y.target),v=y.fd??(y.operator==="<"||y.operator==="<>"?0:1);switch(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),y.operator){case">":case">|":{let C=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);await this.ctx.fs.writeFile(C,"","utf8"),this.ctx.state.fileDescriptors.set(v,`__file__:${C}`);break}case">>":{let C=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);this.ctx.state.fileDescriptors.set(v,`__file_append__:${C}`);break}case"<":{let C=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);try{let k=await this.ctx.fs.readFile(C);this.ctx.state.fileDescriptors.set(v,k)}catch{return S(`bash: ${w}: No such file or directory
|
|
666
666
|
`)}break}case"<>":{let C=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);try{let k=await this.ctx.fs.readFile(C);this.ctx.state.fileDescriptors.set(v,`__rw__:${C.length}:${C}:0:${k}`)}catch{await this.ctx.fs.writeFile(C,"","utf8"),this.ctx.state.fileDescriptors.set(v,`__rw__:${C.length}:${C}:0:`)}break}case">&":{if(w==="-")this.ctx.state.fileDescriptors.delete(v);else if(w.endsWith("-")){let C=w.slice(0,-1),k=Number.parseInt(C,10);if(!Number.isNaN(k)){let T=this.ctx.state.fileDescriptors.get(k);T!==void 0?this.ctx.state.fileDescriptors.set(v,T):this.ctx.state.fileDescriptors.set(v,`__dupout__:${k}`),this.ctx.state.fileDescriptors.delete(k)}}else{let C=Number.parseInt(w,10);Number.isNaN(C)||this.ctx.state.fileDescriptors.set(v,`__dupout__:${C}`)}break}case"<&":{if(w==="-")this.ctx.state.fileDescriptors.delete(v);else if(w.endsWith("-")){let C=w.slice(0,-1),k=Number.parseInt(C,10);if(!Number.isNaN(k)){let T=this.ctx.state.fileDescriptors.get(k);T!==void 0?this.ctx.state.fileDescriptors.set(v,T):this.ctx.state.fileDescriptors.set(v,`__dupin__:${k}`),this.ctx.state.fileDescriptors.delete(k)}}else{let C=Number.parseInt(w,10);Number.isNaN(C)||this.ctx.state.fileDescriptors.set(v,`__dupin__:${C}`)}break}}}for(let[y,w]of Object.entries(r))w===void 0?delete this.ctx.state.env[y]:this.ctx.state.env[y]=w;if(this.ctx.state.tempExportedVars)for(let y of Object.keys(r))this.ctx.state.tempExportedVars.delete(y);return L}let m=await hr(this.ctx,f,u);Object.keys(r).length>0&&(this.ctx.state.tempEnvBindings=this.ctx.state.tempEnvBindings||[],this.ctx.state.tempEnvBindings.push(new Map(Object.entries(r))));let p,g=null;try{p=await this.runCommand(f,u,d,s,!1,!1,c)}catch(y){if(y instanceof ne||y instanceof re)g=y,p=L;else throw y}let b=i+m;if(b&&(p={...p,stderr:b+p.stderr}),p=await j(this.ctx,p,t.redirections),g)throw g;if(u.length>0){let y=u[u.length-1];if((f==="declare"||f==="local"||f==="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=f;let $=An(f)&&f!=="unset"&&f!=="eval";if(!this.ctx.state.options.posix||!$)for(let[y,w]of Object.entries(r))this.ctx.state.fullyUnsetLocals?.has(y)||(w===void 0?delete this.ctx.state.env[y]:this.ctx.state.env[y]=w);if(this.ctx.state.tempExportedVars)for(let y of Object.keys(r))this.ctx.state.tempExportedVars.delete(y);return Object.keys(r).length>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,n,r,i=!1,o=!1,a=-1){let l={ctx:this.ctx,runCommand:(f,u,d,h,m,p,g)=>this.runCommand(f,u,d,h,m,p,g),buildExportedEnv:()=>this.buildExportedEnv(),executeUserScript:(f,u,d)=>this.executeUserScript(f,u,d)},c=await sr(l,t,s,n,r,i,o,a);return c!==null?c:nr(l,t,s,r,o)}aliasExpansionStack=new Set;expandAlias(t){return zt(this.ctx.state,t,this.aliasExpansionStack)}async findCommandInPath(t){return Pt(this.ctx,t)}async executeSubshell(t,s=""){return wr(this.ctx,t,s,n=>this.executeStatement(n))}async executeGroup(t,s=""){return vr(this.ctx,t,s,n=>this.executeStatement(n))}async executeArithmeticCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await pe(this.ctx,t.redirections);if(s)return s;try{let n=await V(this.ctx,t.expression.expression),r=U(n!==0);return this.ctx.state.expansionStderr&&(r={...r,stderr:this.ctx.state.expansionStderr+r.stderr},this.ctx.state.expansionStderr=""),j(this.ctx,r,t.redirections)}catch(n){let r=S(`bash: arithmetic expression: ${n.message}
|
|
667
|
-
`);return j(this.ctx,r,t.redirections)}}async executeConditionalCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await pe(this.ctx,t.redirections);if(s)return s;try{let n=await
|
|
668
|
-
`,r);return j(this.ctx,i,t.redirections)}}};var
|
|
667
|
+
`);return j(this.ctx,r,t.redirections)}}async executeConditionalCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await pe(this.ctx,t.redirections);if(s)return s;try{let n=await Ae(this.ctx,t.expression),r=U(n);return this.ctx.state.expansionStderr&&(r={...r,stderr:this.ctx.state.expansionStderr+r.stderr},this.ctx.state.expansionStderr=""),j(this.ctx,r,t.redirections)}catch(n){let r=n instanceof Ce?1:2,i=S(`bash: conditional expression: ${n.message}
|
|
668
|
+
`,r);return j(this.ctx,i,t.redirections)}}};var we={maxCallDepth:100,maxCommandCount:1e4,maxLoopIterations:1e4,maxAwkIterations:1e4,maxSedIterations:1e4,maxJqIterations:1e4,maxSqliteTimeoutMs:5e3,maxPythonTimeoutMs:3e4};function Er(e){return e?{maxCallDepth:e.maxCallDepth??we.maxCallDepth,maxCommandCount:e.maxCommandCount??we.maxCommandCount,maxLoopIterations:e.maxLoopIterations??we.maxLoopIterations,maxAwkIterations:e.maxAwkIterations??we.maxAwkIterations,maxSedIterations:e.maxSedIterations??we.maxSedIterations,maxJqIterations:e.maxJqIterations??we.maxJqIterations,maxSqliteTimeoutMs:e.maxSqliteTimeoutMs??we.maxSqliteTimeoutMs,maxPythonTimeoutMs:e.maxPythonTimeoutMs??we.maxPythonTimeoutMs}:{...we}}function $r(e){try{let t=new URL(e);return{origin:t.origin,pathname:t.pathname,href:t.href}}catch{return null}}function Qi(e){let t=$r(e);return t?{origin:t.origin,pathPrefix:t.pathname}:null}function Ji(e,t){let s=$r(e);if(!s)return!1;let n=Qi(t);return!n||s.origin!==n.origin?!1:n.pathPrefix==="/"||n.pathPrefix===""?!0:s.pathname.startsWith(n.pathPrefix)}function Is(e,t){return!t||t.length===0?!1:t.some(s=>Ji(e,s))}var Ge=class extends Error{constructor(t){super(`Network access denied: URL not in allow-list: ${t}`),this.name="NetworkAccessDeniedError"}},Ke=class extends Error{constructor(t){super(`Too many redirects (max: ${t})`),this.name="TooManyRedirectsError"}},Xe=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"}};var eo=20,to=3e4,so=["GET","HEAD"],no=new Set(["GET","HEAD","OPTIONS"]),ro=new Set([301,302,303,307,308]);function Ts(e){let t=e.maxRedirects??eo,s=e.timeoutMs??to,n=e.dangerouslyAllowFullInternetAccess?["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"]:e.allowedMethods??so;function r(a){if(!e.dangerouslyAllowFullInternetAccess&&!Is(a,e.allowedUrlPrefixes??[]))throw new Ge(a)}function i(a){if(e.dangerouslyAllowFullInternetAccess)return;let l=a.toUpperCase();if(!n.includes(l))throw new kt(l,n)}async function o(a,l={}){let c=l.method?.toUpperCase()??"GET";r(a),i(c);let f=a,u=0,d=l.followRedirects??!0,h=l.timeoutMs!==void 0?Math.min(l.timeoutMs,s):s;for(;;){let m=new AbortController,p=setTimeout(()=>m.abort(),h);try{let g={method:c,headers:l.headers,signal:m.signal,redirect:"manual"};l.body&&!no.has(c)&&(g.body=l.body);let b=await fetch(f,g);if(ro.has(b.status)&&d){let $=b.headers.get("location");if(!$)return await Sr(b,f);let N=new URL($,f).href;if(!e.dangerouslyAllowFullInternetAccess&&!Is(N,e.allowedUrlPrefixes??[]))throw new Xe(N);if(u++,u>t)throw new Ke(t);f=N;continue}return await Sr(b,f)}finally{clearTimeout(p)}}}return o}async function Sr(e,t){let s={};return e.headers.forEach((n,r)=>{s[r.toLowerCase()]=n}),{status:e.status,statusText:e.statusText,headers:s,body:await e.text(),url:t}}var Ot=class{fs;commands=new Map;useDefaultLayout=!1;limits;secureFetch;sleepFn;traceFn;logger;state;constructor(t={}){let s=t.fs??new Me(t.files);this.fs=s,this.useDefaultLayout=!t.cwd&&!t.files;let n=t.cwd||(this.useDefaultLayout?"/home/user":"/"),r={HOME:this.useDefaultLayout?"/home/user":"/",PATH:"/usr/bin:/bin",IFS:`
|
|
669
669
|
`,OSTYPE:"linux-gnu",MACHTYPE:"x86_64-pc-linux-gnu",HOSTTYPE:"x86_64",HOSTNAME:"localhost",PWD:n,OLDPWD:n,OPTIND:"1",...t.env};if(this.limits=Er({...t.executionLimits,...t.maxCallDepth!==void 0&&{maxCallDepth:t.maxCallDepth},...t.maxCommandCount!==void 0&&{maxCommandCount:t.maxCommandCount},...t.maxLoopIterations!==void 0&&{maxLoopIterations:t.maxLoopIterations}}),t.network&&(this.secureFetch=Ts(t.network)),this.sleepFn=t.sleep,this.traceFn=t.trace,this.logger=t.logger,this.state={env:r,cwd:n,previousDir:"/home/user",functions:new Map,localScopes:[],callDepth:0,sourceDepth:0,commandCount:0,lastExitCode:0,lastArg:"",startTime:Date.now(),lastBackgroundPid:0,bashPid:process.pid,nextVirtualPid:process.pid+1,currentLine:1,options:{errexit:!1,pipefail:!1,nounset:!1,xtrace:!1,verbose:!1,posix:!1,allexport:!1,noclobber:!1,noglob:!1,noexec:!1,vi:!1,emacs:!1},shoptOptions:{extglob:!1,dotglob:!1,nullglob:!1,failglob:!1,globstar:!1,globskipdots:!0,nocaseglob:!1,nocasematch:!1,expand_aliases:!1,lastpipe:!1,xpg_echo:!1},inCondition:!1,loopDepth:0,exportedVars:new Set(["HOME","PATH","PWD","OLDPWD",...Object.keys(t.env||{})]),readonlyVars:new Set(["SHELLOPTS","BASHOPTS"]),hashTable:new Map},this.state.env.SHELLOPTS=Wt(this.state.options),this.state.env.BASHOPTS=Ft(this.state.shoptOptions),sn(s,this.useDefaultLayout),n!=="/"&&s instanceof Me)try{s.mkdirSync(n,{recursive:!0})}catch{}for(let i of Qs(t.commands))this.registerCommand(i);if(t.network)for(let i of Js())this.registerCommand(i);if(t.customCommands)for(let i of t.customCommands)en(i)?this.registerCommand(tn(i)):this.registerCommand(i)}registerCommand(t){this.commands.set(t.name,t);let s=this.fs;if(typeof s.writeFileSync=="function"){let n=`#!/bin/bash
|
|
670
670
|
# Built-in command: ${t.name}
|
|
671
671
|
`;try{s.writeFileSync(`/bin/${t.name}`,n)}catch{}try{s.writeFileSync(`/usr/bin/${t.name}`,n)}catch{}}}logResult(t){return this.logger&&(t.stdout&&this.logger.debug("stdout",{output:t.stdout}),t.stderr&&this.logger.info("stderr",{output:t.stderr}),this.logger.info("exit",{exitCode:t.exitCode})),t}async exec(t,s){if(this.state.callDepth===0&&(this.state.commandCount=0),this.state.commandCount++,this.state.commandCount>this.limits.maxCommandCount)return{stdout:"",stderr:`bash: maximum command count (${this.limits.maxCommandCount}) exceeded (possible infinite loop). Increase with executionLimits.maxCommandCount option.
|
|
672
|
-
`,exitCode:1,env:{...this.state.env,...s?.env}};if(!t.trim())return{stdout:"",stderr:"",exitCode:0,env:{...this.state.env,...s?.env}};this.logger?.info("exec",{command:t});let n=s?.cwd??this.state.cwd,r,i=n;if(s?.cwd)if(s.env&&"PWD"in s.env)r=s.env.PWD;else if(s?.env&&!("PWD"in s.env))try{r=await this.fs.realpath(n),i=r}catch{r=n}else r=n;let o={...this.state,env:{...this.state.env,...s?.env,...r!==void 0?{PWD:r}:{}},cwd:i,functions:new Map(this.state.functions),localScopes:[...this.state.localScopes],options:{...this.state.options},hashTable:this.state.hashTable},a=t;s?.rawScript||(a=io(t));try{let l=fe(a),c={fs:this.fs,commands:this.commands,limits:this.limits,exec:this.exec.bind(this),fetch:this.secureFetch,sleep:this.sleepFn,trace:this.traceFn},u=await new Ze(c,o).executeScript(l);return this.logResult(u)}catch(l){if(l instanceof z)return this.logResult({stdout:l.stdout,stderr:l.stderr,exitCode:l.exitCode,env:{...this.state.env,...s?.env}});if(l instanceof ae)return this.logResult({stdout:l.stdout,stderr:l.stderr,exitCode:l.exitCode,env:{...this.state.env,...s?.env}});if(l instanceof
|
|
672
|
+
`,exitCode:1,env:{...this.state.env,...s?.env}};if(!t.trim())return{stdout:"",stderr:"",exitCode:0,env:{...this.state.env,...s?.env}};this.logger?.info("exec",{command:t});let n=s?.cwd??this.state.cwd,r,i=n;if(s?.cwd)if(s.env&&"PWD"in s.env)r=s.env.PWD;else if(s?.env&&!("PWD"in s.env))try{r=await this.fs.realpath(n),i=r}catch{r=n}else r=n;let o={...this.state,env:{...this.state.env,...s?.env,...r!==void 0?{PWD:r}:{}},cwd:i,functions:new Map(this.state.functions),localScopes:[...this.state.localScopes],options:{...this.state.options},hashTable:this.state.hashTable},a=t;s?.rawScript||(a=io(t));try{let l=fe(a),c={fs:this.fs,commands:this.commands,limits:this.limits,exec:this.exec.bind(this),fetch:this.secureFetch,sleep:this.sleepFn,trace:this.traceFn},u=await new Ze(c,o).executeScript(l);return this.logResult(u)}catch(l){if(l instanceof z)return this.logResult({stdout:l.stdout,stderr:l.stderr,exitCode:l.exitCode,env:{...this.state.env,...s?.env}});if(l instanceof ae)return this.logResult({stdout:l.stdout,stderr:l.stderr,exitCode:l.exitCode,env:{...this.state.env,...s?.env}});if(l instanceof Ce)return this.logResult({stdout:l.stdout,stderr:l.stderr,exitCode:1,env:{...this.state.env,...s?.env}});if(l instanceof ee)return this.logResult({stdout:l.stdout,stderr:l.stderr,exitCode:ee.EXIT_CODE,env:{...this.state.env,...s?.env}});if(l.name==="ParseException")return this.logResult({stdout:"",stderr:`bash: syntax error: ${l.message}
|
|
673
673
|
`,exitCode:2,env:{...this.state.env,...s?.env}});if(l instanceof Fs)return this.logResult({stdout:"",stderr:`bash: ${l.message}
|
|
674
674
|
`,exitCode:2,env:{...this.state.env,...s?.env}});if(l instanceof RangeError)return this.logResult({stdout:"",stderr:`bash: ${l.message}
|
|
675
675
|
`,exitCode:1,env:{...this.state.env,...s?.env}});throw l}}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{...this.state.env}}};function io(e){let t=e.split(`
|
|
676
676
|
`),s=[],n=[];for(let r=0;r<t.length;r++){let i=t[r];if(n.length>0){let l=n[n.length-1];if((l.stripTabs?i.replace(/^\t+/,""):i)===l.delimiter){s.push(i.trimStart()),n.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]==="-",f=l[3];n.push({delimiter:f,stripTabs:c})}}return s.join(`
|
|
677
|
-
`)}import*as Z from"node:fs";import*as Le from"node:path";var oo="/home/user/project",We=class{root;mountPoint;readOnly;memory=new Map;deleted=new Set;constructor(t){this.root=Le.resolve(t.root);let s=t.mountPoint??oo;if(this.mountPoint=s==="/"?"/":s.replace(/\/+$/,""),!this.mountPoint.startsWith("/"))throw new Error(`Mount point must be an absolute path: ${s}`);if(this.readOnly=t.readOnly??!1,!Z.existsSync(this.root))throw new Error(`OverlayFs root does not exist: ${this.root}`);if(!Z.statSync(this.root).isDirectory())throw new Error(`OverlayFs root is not a directory: ${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 n of t)s+=`/${n}`,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 r=this.normalizePath(t).split("/").filter(Boolean),i="";for(let o of r)i+=`/${o}`,this.memory.has(i)||this.memory.set(i,{type:"directory",mode:493,mtime:new Date})}writeFileSync(t,s){let n=this.normalizePath(t),r=this.getDirname(n);r!=="/"&&this.mkdirSync(r);let i=s instanceof Uint8Array?s:new TextEncoder().encode(s);this.memory.set(n,{type:"file",content:i,mode:420,mtime:new Date})}getDirname(t){let s=t.lastIndexOf("/");return s===0?"/":t.slice(0,s)}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let n=s.split("/").filter(i=>i&&i!=="."),r=[];for(let i of n)i===".."?r.pop():r.push(i);return`/${r.join("/")}`||"/"}getRelativeToMount(t){return this.mountPoint==="/"?t:t===this.mountPoint?"/":t.startsWith(`${this.mountPoint}/`)?t.slice(this.mountPoint.length):null}toRealPath(t){let s=this.normalizePath(t),n=this.getRelativeToMount(s);if(n===null)return null;let r=Le.join(this.root,n),i=Le.resolve(r);return!i.startsWith(this.root)&&i!==this.root.replace(/\/$/,"")?null:i}dirname(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.lastIndexOf("/");return n===0?"/":s.slice(0,n)}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=this.normalizePath(t);if(this.deleted.has(s))return!1;if(this.memory.has(s))return!0;let n=this.toRealPath(s);if(!n)return!1;try{return await Z.promises.access(n),!0}catch{return!1}}async readFile(t,s){let n=await this.readFileBuffer(t),r=Ee(s);return rt(n,r)}async readFileBuffer(t,s=new Set){let n=this.normalizePath(t);if(s.has(n))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);if(s.add(n),this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, open '${t}'`);let r=this.memory.get(n);if(r){if(r.type==="symlink"){let o=this.resolveSymlink(n,r.target);return this.readFileBuffer(o,s)}if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return r.content}let i=this.toRealPath(n);if(!i)throw new Error(`ENOENT: no such file or directory, open '${t}'`);try{let o=await Z.promises.lstat(i);if(o.isSymbolicLink()){let l=await Z.promises.readlink(i),c=this.resolveSymlink(n,l);return this.readFileBuffer(c,s)}if(o.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);let a=await Z.promises.readFile(i);return new Uint8Array(a)}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, open '${t}'`):o}}async writeFile(t,s,n){this.assertWritable(`write '${t}'`);let r=this.normalizePath(t);this.ensureParentDirs(r);let i=Ee(n),o=Oe(s,i);this.memory.set(r,{type:"file",content:o,mode:420,mtime:new Date}),this.deleted.delete(r)}async appendFile(t,s,n){this.assertWritable(`append '${t}'`);let r=this.normalizePath(t),i=Ee(n),o=Oe(s,i),a;try{a=await this.readFileBuffer(r)}catch{a=new Uint8Array(0)}let l=new Uint8Array(a.length+o.length);l.set(a),l.set(o,a.length),this.ensureParentDirs(r),this.memory.set(r,{type:"file",content:l,mode:420,mtime:new Date}),this.deleted.delete(r)}async exists(t){return this.existsInOverlay(t)}async stat(t,s=new Set){let n=this.normalizePath(t);if(s.has(n))throw new Error(`ELOOP: too many levels of symbolic links, stat '${t}'`);if(s.add(n),this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let r=this.memory.get(n);if(r){if(r.type==="symlink"){let a=this.resolveSymlink(n,r.target);return this.stat(a,s)}let o=0;return r.type==="file"&&(o=r.content.length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:o,mtime:r.mtime}}let i=this.toRealPath(n);if(!i)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);try{let o=await Z.promises.stat(i);return{isFile:o.isFile(),isDirectory:o.isDirectory(),isSymbolicLink:!1,mode:o.mode,size:o.size,mtime:o.mtime}}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, stat '${t}'`):o}}async lstat(t){let s=this.normalizePath(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);let n=this.memory.get(s);if(n){if(n.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:n.mode,size:n.target.length,mtime:n.mtime};let i=0;return n.type==="file"&&(i=n.content.length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:i,mtime:n.mtime}}let r=this.toRealPath(s);if(!r)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);try{let i=await Z.promises.lstat(r);return{isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:i.isSymbolicLink(),mode:i.mode,size:i.size,mtime:i.mtime}}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, lstat '${t}'`):i}}resolveSymlink(t,s){if(s.startsWith("/"))return this.normalizePath(s);let n=this.dirname(t);return this.normalizePath(n==="/"?`/${s}`:`${n}/${s}`)}async mkdir(t,s){this.assertWritable(`mkdir '${t}'`);let n=this.normalizePath(t);if(await this.existsInOverlay(n)){if(!s?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${t}'`);return}let i=this.dirname(n);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(n,{type:"directory",mode:493,mtime:new Date}),this.deleted.delete(n)}async readdirCore(t,s){if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let n=new Map,r=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)&&r.add(c)}for(let[a,l]of this.memory)if(a!==s&&a.startsWith(i)){let c=a.slice(i.length),f=c.split("/")[0];f&&!r.has(f)&&!c.includes("/",1)&&n.set(f,{name:f,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}let o=this.toRealPath(s);if(o)try{let a=await Z.promises.readdir(o,{withFileTypes:!0});for(let l of a)!r.has(l.name)&&!n.has(l.name)&&n.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 if(a.code!=="ENOTDIR")throw a}return n}async resolveForReaddir(t,s=!1){let n=this.normalizePath(t),r=new Set,i=s,o=this.memory.get(n);for(;o&&o.type==="symlink";){if(r.has(n))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);r.add(n),i=!0,n=this.resolveSymlink(n,o.target),o=this.memory.get(n)}if(o)return{normalized:n,outsideOverlay:!1};if(this.getRelativeToMount(n)===null)return{normalized:n,outsideOverlay:!0};let l=this.toRealPath(n);if(!l)return{normalized:n,outsideOverlay:!0};try{if((await Z.promises.lstat(l)).isSymbolicLink()){let f=await Z.promises.readlink(l),u=this.resolveSymlink(n,f);return this.resolveForReaddir(u,!0)}return{normalized:n,outsideOverlay:!1}}catch{return i?{normalized:n,outsideOverlay:!0}:{normalized:n,outsideOverlay:!1}}}async readdir(t){let{normalized:s,outsideOverlay:n}=await this.resolveForReaddir(t);if(n)return[];let r=await this.readdirCore(t,s);return Array.from(r.keys()).sort((i,o)=>i<o?-1:i>o?1:0)}async readdirWithFileTypes(t){let{normalized:s,outsideOverlay:n}=await this.resolveForReaddir(t);if(n)return[];let r=await this.readdirCore(t,s);return Array.from(r.values()).sort((i,o)=>i.name<o.name?-1:i.name>o.name?1:0)}async rm(t,s){this.assertWritable(`rm '${t}'`);let n=this.normalizePath(t);if(!await this.existsInOverlay(n)){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}try{if((await this.stat(n)).isDirectory){let o=await this.readdir(n);if(o.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let a of o){let l=n==="/"?`/${a}`:`${n}/${a}`;await this.rm(l,s)}}}}catch{}this.deleted.add(n),this.memory.delete(n)}async cp(t,s,n){this.assertWritable(`cp '${s}'`);let r=this.normalizePath(t),i=this.normalizePath(s);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, cp '${t}'`);let a=await this.stat(r);if(a.isFile){let l=await this.readFileBuffer(r);await this.writeFile(i,l)}else if(a.isDirectory){if(!n?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let l=await this.readdir(r);for(let c of l){let f=r==="/"?`/${c}`:`${r}/${c}`,u=i==="/"?`/${c}`:`${i}/${c}`;await this.cp(f,u,n)}}}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 this.normalizePath(s);let n=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(n)}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 n=this.toRealPath(t);if(n)try{let r=Z.readdirSync(n);for(let i of r){let o=t==="/"?`/${i}`:`${t}/${i}`;if(this.deleted.has(o))continue;s.add(o);let a=Le.join(n,i);Z.statSync(a).isDirectory()&&this.scanRealFs(o,s)}}catch{}}async chmod(t,s){this.assertWritable(`chmod '${t}'`);let n=this.normalizePath(t);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);let i=this.memory.get(n);if(i){i.mode=s;return}let o=await this.stat(n);if(o.isFile){let a=await this.readFileBuffer(n);this.memory.set(n,{type:"file",content:a,mode:s,mtime:new Date})}else o.isDirectory&&this.memory.set(n,{type:"directory",mode:s,mtime:new Date})}async symlink(t,s){this.assertWritable(`symlink '${s}'`);let n=this.normalizePath(s);if(await this.existsInOverlay(n))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(n),this.memory.set(n,{type:"symlink",target:t,mode:511,mtime:new Date}),this.deleted.delete(n)}async link(t,s){this.assertWritable(`link '${s}'`);let n=this.normalizePath(t),r=this.normalizePath(s);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, link '${t}'`);let o=await this.stat(n);if(!o.isFile)throw new Error(`EPERM: operation not permitted, link '${t}'`);if(await this.existsInOverlay(r))throw new Error(`EEXIST: file already exists, link '${s}'`);let l=await this.readFileBuffer(n);this.ensureParentDirs(r),this.memory.set(r,{type:"file",content:l,mode:o.mode,mtime:new Date}),this.deleted.delete(r)}async readlink(t){let s=this.normalizePath(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);let n=this.memory.get(s);if(n){if(n.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return n.target}let r=this.toRealPath(s);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);try{return await Z.promises.readlink(r)}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, readlink '${t}'`):i.code==="EINVAL"?new Error(`EINVAL: invalid argument, readlink '${t}'`):i}}async realpath(t){let s=this.normalizePath(t),n=new Set,r=async a=>{let l=a==="/"?[]:a.slice(1).split("/"),c="";for(let f of l){if(c=`${c}/${f}`,n.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 u=this.memory.get(c),d=0,h=40;for(;u&&u.type==="symlink"&&d<h;){if(n.add(c),c=this.resolveSymlink(c,u.target),d++,n.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}'`);u=this.memory.get(c)}if(d>=h)throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(!u){let m=this.toRealPath(c);if(m)try{if((await Z.promises.lstat(m)).isSymbolicLink()){let g=await Z.promises.readlink(m);return n.add(c),c=this.resolveSymlink(c,g),r(c)}}catch(p){throw p.code==="ENOENT"?new Error(`ENOENT: no such file or directory, realpath '${t}'`):p}}}return c||"/"},i=await r(s);if(!await this.existsInOverlay(i))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);return i}async utimes(t,s,n){this.assertWritable(`utimes '${t}'`);let r=this.normalizePath(t);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);let o=this.memory.get(r);if(o){o.mtime=n;return}let a=await this.stat(r);if(a.isFile){let l=await this.readFileBuffer(r);this.memory.set(r,{type:"file",content:l,mode:a.mode,mtime:n})}else a.isDirectory&&this.memory.set(r,{type:"directory",mode:a.mode,mtime:n})}};function _r(){console.log(`just-bash - A secure bash environment for AI agents
|
|
677
|
+
`)}import*as Z from"node:fs";import*as Le from"node:path";var oo="/home/user/project",We=class{root;mountPoint;readOnly;memory=new Map;deleted=new Set;constructor(t){this.root=Le.resolve(t.root);let s=t.mountPoint??oo;if(this.mountPoint=s==="/"?"/":s.replace(/\/+$/,""),!this.mountPoint.startsWith("/"))throw new Error(`Mount point must be an absolute path: ${s}`);if(this.readOnly=t.readOnly??!1,!Z.existsSync(this.root))throw new Error(`OverlayFs root does not exist: ${this.root}`);if(!Z.statSync(this.root).isDirectory())throw new Error(`OverlayFs root is not a directory: ${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 n of t)s+=`/${n}`,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 r=this.normalizePath(t).split("/").filter(Boolean),i="";for(let o of r)i+=`/${o}`,this.memory.has(i)||this.memory.set(i,{type:"directory",mode:493,mtime:new Date})}writeFileSync(t,s){let n=this.normalizePath(t),r=this.getDirname(n);r!=="/"&&this.mkdirSync(r);let i=s instanceof Uint8Array?s:new TextEncoder().encode(s);this.memory.set(n,{type:"file",content:i,mode:420,mtime:new Date})}getDirname(t){let s=t.lastIndexOf("/");return s===0?"/":t.slice(0,s)}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let n=s.split("/").filter(i=>i&&i!=="."),r=[];for(let i of n)i===".."?r.pop():r.push(i);return`/${r.join("/")}`||"/"}getRelativeToMount(t){return this.mountPoint==="/"?t:t===this.mountPoint?"/":t.startsWith(`${this.mountPoint}/`)?t.slice(this.mountPoint.length):null}toRealPath(t){let s=this.normalizePath(t),n=this.getRelativeToMount(s);if(n===null)return null;let r=Le.join(this.root,n),i=Le.resolve(r);return!i.startsWith(this.root)&&i!==this.root.replace(/\/$/,"")?null:i}dirname(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.lastIndexOf("/");return n===0?"/":s.slice(0,n)}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=this.normalizePath(t);if(this.deleted.has(s))return!1;if(this.memory.has(s))return!0;let n=this.toRealPath(s);if(!n)return!1;try{return await Z.promises.access(n),!0}catch{return!1}}async readFile(t,s){let n=await this.readFileBuffer(t),r=Se(s);return rt(n,r)}async readFileBuffer(t,s=new Set){let n=this.normalizePath(t);if(s.has(n))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);if(s.add(n),this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, open '${t}'`);let r=this.memory.get(n);if(r){if(r.type==="symlink"){let o=this.resolveSymlink(n,r.target);return this.readFileBuffer(o,s)}if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return r.content}let i=this.toRealPath(n);if(!i)throw new Error(`ENOENT: no such file or directory, open '${t}'`);try{let o=await Z.promises.lstat(i);if(o.isSymbolicLink()){let l=await Z.promises.readlink(i),c=this.resolveSymlink(n,l);return this.readFileBuffer(c,s)}if(o.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);let a=await Z.promises.readFile(i);return new Uint8Array(a)}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, open '${t}'`):o}}async writeFile(t,s,n){this.assertWritable(`write '${t}'`);let r=this.normalizePath(t);this.ensureParentDirs(r);let i=Se(n),o=Oe(s,i);this.memory.set(r,{type:"file",content:o,mode:420,mtime:new Date}),this.deleted.delete(r)}async appendFile(t,s,n){this.assertWritable(`append '${t}'`);let r=this.normalizePath(t),i=Se(n),o=Oe(s,i),a;try{a=await this.readFileBuffer(r)}catch{a=new Uint8Array(0)}let l=new Uint8Array(a.length+o.length);l.set(a),l.set(o,a.length),this.ensureParentDirs(r),this.memory.set(r,{type:"file",content:l,mode:420,mtime:new Date}),this.deleted.delete(r)}async exists(t){return this.existsInOverlay(t)}async stat(t,s=new Set){let n=this.normalizePath(t);if(s.has(n))throw new Error(`ELOOP: too many levels of symbolic links, stat '${t}'`);if(s.add(n),this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let r=this.memory.get(n);if(r){if(r.type==="symlink"){let a=this.resolveSymlink(n,r.target);return this.stat(a,s)}let o=0;return r.type==="file"&&(o=r.content.length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:o,mtime:r.mtime}}let i=this.toRealPath(n);if(!i)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);try{let o=await Z.promises.stat(i);return{isFile:o.isFile(),isDirectory:o.isDirectory(),isSymbolicLink:!1,mode:o.mode,size:o.size,mtime:o.mtime}}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, stat '${t}'`):o}}async lstat(t){let s=this.normalizePath(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);let n=this.memory.get(s);if(n){if(n.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:n.mode,size:n.target.length,mtime:n.mtime};let i=0;return n.type==="file"&&(i=n.content.length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:i,mtime:n.mtime}}let r=this.toRealPath(s);if(!r)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);try{let i=await Z.promises.lstat(r);return{isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:i.isSymbolicLink(),mode:i.mode,size:i.size,mtime:i.mtime}}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, lstat '${t}'`):i}}resolveSymlink(t,s){if(s.startsWith("/"))return this.normalizePath(s);let n=this.dirname(t);return this.normalizePath(n==="/"?`/${s}`:`${n}/${s}`)}async mkdir(t,s){this.assertWritable(`mkdir '${t}'`);let n=this.normalizePath(t);if(await this.existsInOverlay(n)){if(!s?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${t}'`);return}let i=this.dirname(n);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(n,{type:"directory",mode:493,mtime:new Date}),this.deleted.delete(n)}async readdirCore(t,s){if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let n=new Map,r=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)&&r.add(c)}for(let[a,l]of this.memory)if(a!==s&&a.startsWith(i)){let c=a.slice(i.length),f=c.split("/")[0];f&&!r.has(f)&&!c.includes("/",1)&&n.set(f,{name:f,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}let o=this.toRealPath(s);if(o)try{let a=await Z.promises.readdir(o,{withFileTypes:!0});for(let l of a)!r.has(l.name)&&!n.has(l.name)&&n.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 if(a.code!=="ENOTDIR")throw a}return n}async resolveForReaddir(t,s=!1){let n=this.normalizePath(t),r=new Set,i=s,o=this.memory.get(n);for(;o&&o.type==="symlink";){if(r.has(n))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);r.add(n),i=!0,n=this.resolveSymlink(n,o.target),o=this.memory.get(n)}if(o)return{normalized:n,outsideOverlay:!1};if(this.getRelativeToMount(n)===null)return{normalized:n,outsideOverlay:!0};let l=this.toRealPath(n);if(!l)return{normalized:n,outsideOverlay:!0};try{if((await Z.promises.lstat(l)).isSymbolicLink()){let f=await Z.promises.readlink(l),u=this.resolveSymlink(n,f);return this.resolveForReaddir(u,!0)}return{normalized:n,outsideOverlay:!1}}catch{return i?{normalized:n,outsideOverlay:!0}:{normalized:n,outsideOverlay:!1}}}async readdir(t){let{normalized:s,outsideOverlay:n}=await this.resolveForReaddir(t);if(n)return[];let r=await this.readdirCore(t,s);return Array.from(r.keys()).sort((i,o)=>i<o?-1:i>o?1:0)}async readdirWithFileTypes(t){let{normalized:s,outsideOverlay:n}=await this.resolveForReaddir(t);if(n)return[];let r=await this.readdirCore(t,s);return Array.from(r.values()).sort((i,o)=>i.name<o.name?-1:i.name>o.name?1:0)}async rm(t,s){this.assertWritable(`rm '${t}'`);let n=this.normalizePath(t);if(!await this.existsInOverlay(n)){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}try{if((await this.stat(n)).isDirectory){let o=await this.readdir(n);if(o.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let a of o){let l=n==="/"?`/${a}`:`${n}/${a}`;await this.rm(l,s)}}}}catch{}this.deleted.add(n),this.memory.delete(n)}async cp(t,s,n){this.assertWritable(`cp '${s}'`);let r=this.normalizePath(t),i=this.normalizePath(s);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, cp '${t}'`);let a=await this.stat(r);if(a.isFile){let l=await this.readFileBuffer(r);await this.writeFile(i,l)}else if(a.isDirectory){if(!n?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let l=await this.readdir(r);for(let c of l){let f=r==="/"?`/${c}`:`${r}/${c}`,u=i==="/"?`/${c}`:`${i}/${c}`;await this.cp(f,u,n)}}}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 this.normalizePath(s);let n=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(n)}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 n=this.toRealPath(t);if(n)try{let r=Z.readdirSync(n);for(let i of r){let o=t==="/"?`/${i}`:`${t}/${i}`;if(this.deleted.has(o))continue;s.add(o);let a=Le.join(n,i);Z.statSync(a).isDirectory()&&this.scanRealFs(o,s)}}catch{}}async chmod(t,s){this.assertWritable(`chmod '${t}'`);let n=this.normalizePath(t);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);let i=this.memory.get(n);if(i){i.mode=s;return}let o=await this.stat(n);if(o.isFile){let a=await this.readFileBuffer(n);this.memory.set(n,{type:"file",content:a,mode:s,mtime:new Date})}else o.isDirectory&&this.memory.set(n,{type:"directory",mode:s,mtime:new Date})}async symlink(t,s){this.assertWritable(`symlink '${s}'`);let n=this.normalizePath(s);if(await this.existsInOverlay(n))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(n),this.memory.set(n,{type:"symlink",target:t,mode:511,mtime:new Date}),this.deleted.delete(n)}async link(t,s){this.assertWritable(`link '${s}'`);let n=this.normalizePath(t),r=this.normalizePath(s);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, link '${t}'`);let o=await this.stat(n);if(!o.isFile)throw new Error(`EPERM: operation not permitted, link '${t}'`);if(await this.existsInOverlay(r))throw new Error(`EEXIST: file already exists, link '${s}'`);let l=await this.readFileBuffer(n);this.ensureParentDirs(r),this.memory.set(r,{type:"file",content:l,mode:o.mode,mtime:new Date}),this.deleted.delete(r)}async readlink(t){let s=this.normalizePath(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);let n=this.memory.get(s);if(n){if(n.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return n.target}let r=this.toRealPath(s);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);try{return await Z.promises.readlink(r)}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, readlink '${t}'`):i.code==="EINVAL"?new Error(`EINVAL: invalid argument, readlink '${t}'`):i}}async realpath(t){let s=this.normalizePath(t),n=new Set,r=async a=>{let l=a==="/"?[]:a.slice(1).split("/"),c="";for(let f of l){if(c=`${c}/${f}`,n.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 u=this.memory.get(c),d=0,h=40;for(;u&&u.type==="symlink"&&d<h;){if(n.add(c),c=this.resolveSymlink(c,u.target),d++,n.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}'`);u=this.memory.get(c)}if(d>=h)throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(!u){let m=this.toRealPath(c);if(m)try{if((await Z.promises.lstat(m)).isSymbolicLink()){let g=await Z.promises.readlink(m);return n.add(c),c=this.resolveSymlink(c,g),r(c)}}catch(p){throw p.code==="ENOENT"?new Error(`ENOENT: no such file or directory, realpath '${t}'`):p}}}return c||"/"},i=await r(s);if(!await this.existsInOverlay(i))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);return i}async utimes(t,s,n){this.assertWritable(`utimes '${t}'`);let r=this.normalizePath(t);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);let o=this.memory.get(r);if(o){o.mtime=n;return}let a=await this.stat(r);if(a.isFile){let l=await this.readFileBuffer(r);this.memory.set(r,{type:"file",content:l,mode:a.mode,mtime:n})}else a.isDirectory&&this.memory.set(r,{type:"directory",mode:a.mode,mtime:n})}};function _r(){console.log(`just-bash - A secure bash environment for AI agents
|
|
678
678
|
|
|
679
679
|
Usage:
|
|
680
680
|
just-bash [options] [script-file]
|