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/shell/shell.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{B as Zs,C as Gs,D as ne,E as Pe,F as K,G as ue,H as st,I as Ks,J as I,K as Xs,L as Ys,M as pe,N as Wt,O as nt,P as V,a as Fs,b as Ms,c as zs,d as et,e as q,f as M,g as de,h as J,i as he,j as be,k as It,l as tt,m as Vs,n as Tt,o as js,p as oe,q as ge,r as Bs,s as Hs,t as xt,u as Rt,v as Ee,w as Us,x as qs,y as fe,z as Lt}from"./chunks/chunk-FSAGDARS.js";import{a as re,b as ie,c as se,d as ae,e as Ls,f as z,g as Ce,h as Ye,i as Qe,j as Ws,k as te,l as ve,m as Je,n as ce}from"./chunks/chunk-K5IXNHO5.js";import"./chunks/chunk-OBH7XN5N.js";import{a as le}from"./chunks/chunk-4VDEBYW7.js";import"./chunks/chunk-KGOUQS5A.js";import*as Cr from"node:fs";import*as Pr from"node:readline";var Oe=[{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__)&&(Oe.push({name:"tar",load:async()=>(await import("./chunks/tar-LFENC54A.js")).tarCommand}),Oe.push({name:"yq",load:async()=>(await import("./chunks/yq-PFV4T2PV.js")).yqCommand}),Oe.push({name:"xan",load:async()=>(await import("./chunks/xan-5HNHTFMB.js")).xanCommand}),Oe.push({name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-THMDBIGF.js")).sqlite3Command}));var Ir=[{name:"curl",load:async()=>(await import("./chunks/curl-TH7YRBSA.js")).curlCommand}],Qs=new Map;function Js(e){return{name:e.name,async execute(t,s){let n=Qs.get(e.name);return n||(n=await e.load(),Qs.set(e.name,n)),n.execute(t,s)}}}function en(e){return(e?Oe.filter(s=>e.includes(s.name)):Oe).map(Js)}function tn(){return Ir.map(Js)}function sn(e){return"load"in e&&typeof e.load=="function"}function nn(e){let t=null;return{name:e.name,async execute(s,n){return t||(t=await e.load()),t.execute(s,n)}}}var Tr=new TextEncoder,xr=new TextDecoder;function De(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)):Tr.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):xr.decode(e)}function $e(e){if(e!=null)return typeof e=="string"?e:e.encoding??void 0}var it=new TextEncoder;function Rr(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))Rr(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 a=$e(n),o=De(s,a);this.data.set(i,{type:"file",content:o,mode:r?.mode??420,mtime:r?.mtime??new Date})}async readFile(t,s){let n=await this.readFileBuffer(t),r=$e(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 a=$e(n),o=De(s,a);if(i?.type==="file"){let l=i.content instanceof Uint8Array?i.content:it.encode(i.content),f=new Uint8Array(l.length+o.length);f.set(l),f.set(o,l.length),this.data.set(r,{type:"file",content:f,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 a=0;a<n.length-1;a++){let o=n[a];r=`${r}/${o}`;let l=this.data.get(r),f=0,c=40;for(;l&&l.type==="symlink"&&f<c;){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),f++}if(f>=c)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 a of n){r=`${r}/${a}`;let o=this.data.get(r),l=0,f=40;for(;o&&o.type==="symlink"&&l<f;){if(i.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);i.add(r),r=this.resolveSymlink(r,o.target),o=this.data.get(r),l++}if(l>=f)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}/`,a=new Map;for(let[o,l]of this.data.entries())if(o!==s&&o.startsWith(i)){let f=o.slice(i.length),c=f.split("/")[0];c&&!f.includes("/",c.length)&&!a.has(c)&&a.set(c,{name:c,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}return Array.from(a.values()).sort((o,l)=>o.name<l.name?-1:o.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 a of i){let o=n==="/"?`/${a}`:`${n}/${a}`;await this.rm(o,s)}}}this.data.delete(n)}async cp(t,s,n){let r=this.normalizePath(t),i=this.normalizePath(s),a=this.data.get(r);if(!a)throw new Error(`ENOENT: no such file or directory, cp '${t}'`);if(a.type==="file")this.ensureParentDirs(i),this.data.set(i,{...a});else if(a.type==="directory"){if(!n?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let o=await this.readdir(r);for(let l of o){let f=r==="/"?`/${l}`:`${r}/${l}`,c=i==="/"?`/${l}`:`${i}/${l}`;await this.cp(f,c,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),a=this.data.get(i);if(!a)throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);a.mtime=n}};function Lr(e){let t=e;return typeof t.mkdirSync=="function"&&typeof t.writeFileSync=="function"}function Wr(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 Fr(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 Mr(e){e.mkdirSync("/proc/self/fd",{recursive:!0}),e.writeFileSync("/proc/version",`${Fs}
|
|
2
|
+
import{B as Zs,C as Gs,D as ne,E as Ne,F as K,G as ue,H as st,I as Ks,J as I,K as Xs,L as Ys,M as pe,N as Wt,O as nt,P as V,a as Fs,b as Ms,c as zs,d as et,e as q,f as M,g as de,h as J,i as he,j as Ee,k as It,l as tt,m as Vs,n as Tt,o as js,p as oe,q as ge,r as Bs,s as Hs,t as xt,u as Rt,v as $e,w as Us,x as qs,y as fe,z as Lt}from"./chunks/chunk-FSAGDARS.js";import{a as re,b as ie,c as se,d as ae,e as Ls,f as z,g as Pe,h as Ye,i as Qe,j as Ws,k as te,l as be,m as Je,n as ce}from"./chunks/chunk-K5IXNHO5.js";import"./chunks/chunk-OBH7XN5N.js";import{a as le}from"./chunks/chunk-4VDEBYW7.js";import"./chunks/chunk-KGOUQS5A.js";import*as Cr from"node:fs";import*as Pr from"node:readline";var Se=[{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__)&&(Se.push({name:"tar",load:async()=>(await import("./chunks/tar-LFENC54A.js")).tarCommand}),Se.push({name:"yq",load:async()=>(await import("./chunks/yq-PFV4T2PV.js")).yqCommand}),Se.push({name:"xan",load:async()=>(await import("./chunks/xan-5HNHTFMB.js")).xanCommand}),Se.push({name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-THMDBIGF.js")).sqlite3Command}),Se.push({name:"python3",load:async()=>(await import("./chunks/python3-JGT65AEB.js")).python3Command}),Se.push({name:"python",load:async()=>(await import("./chunks/python3-JGT65AEB.js")).pythonCommand}));var Ir=[{name:"curl",load:async()=>(await import("./chunks/curl-TH7YRBSA.js")).curlCommand}],Qs=new Map;function Js(e){return{name:e.name,async execute(t,s){let n=Qs.get(e.name);return n||(n=await e.load(),Qs.set(e.name,n)),n.execute(t,s)}}}function en(e){return(e?Se.filter(s=>e.includes(s.name)):Se).map(Js)}function tn(){return Ir.map(Js)}function sn(e){return"load"in e&&typeof e.load=="function"}function nn(e){let t=null;return{name:e.name,async execute(s,n){return t||(t=await e.load()),t.execute(s,n)}}}var Tr=new TextEncoder,xr=new TextDecoder;function De(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)):Tr.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):xr.decode(e)}function Ae(e){if(e!=null)return typeof e=="string"?e:e.encoding??void 0}var it=new TextEncoder;function Rr(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))Rr(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 a=Ae(n),o=De(s,a);this.data.set(i,{type:"file",content:o,mode:r?.mode??420,mtime:r?.mtime??new Date})}async readFile(t,s){let n=await this.readFileBuffer(t),r=Ae(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 a=Ae(n),o=De(s,a);if(i?.type==="file"){let l=i.content instanceof Uint8Array?i.content:it.encode(i.content),f=new Uint8Array(l.length+o.length);f.set(l),f.set(o,l.length),this.data.set(r,{type:"file",content:f,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 a=0;a<n.length-1;a++){let o=n[a];r=`${r}/${o}`;let l=this.data.get(r),f=0,c=40;for(;l&&l.type==="symlink"&&f<c;){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),f++}if(f>=c)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 a of n){r=`${r}/${a}`;let o=this.data.get(r),l=0,f=40;for(;o&&o.type==="symlink"&&l<f;){if(i.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);i.add(r),r=this.resolveSymlink(r,o.target),o=this.data.get(r),l++}if(l>=f)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}/`,a=new Map;for(let[o,l]of this.data.entries())if(o!==s&&o.startsWith(i)){let f=o.slice(i.length),c=f.split("/")[0];c&&!f.includes("/",c.length)&&!a.has(c)&&a.set(c,{name:c,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}return Array.from(a.values()).sort((o,l)=>o.name<l.name?-1:o.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 a of i){let o=n==="/"?`/${a}`:`${n}/${a}`;await this.rm(o,s)}}}this.data.delete(n)}async cp(t,s,n){let r=this.normalizePath(t),i=this.normalizePath(s),a=this.data.get(r);if(!a)throw new Error(`ENOENT: no such file or directory, cp '${t}'`);if(a.type==="file")this.ensureParentDirs(i),this.data.set(i,{...a});else if(a.type==="directory"){if(!n?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let o=await this.readdir(r);for(let l of o){let f=r==="/"?`/${l}`:`${r}/${l}`,c=i==="/"?`/${l}`:`${i}/${l}`;await this.cp(f,c,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),a=this.data.get(i);if(!a)throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);a.mtime=n}};function Lr(e){let t=e;return typeof t.mkdirSync=="function"&&typeof t.writeFileSync=="function"}function Wr(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 Fr(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 Mr(e){e.mkdirSync("/proc/self/fd",{recursive:!0}),e.writeFileSync("/proc/version",`${Fs}
|
|
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",Ms()),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 rn(e,t){Lr(e)&&(Wr(e,t),Fr(e),Mr(e))}var zr=["allexport","errexit","noglob","noclobber","noexec","nounset","pipefail","posix","verbose","xtrace"],Vr=["braceexpand","hashall","interactive-comments"];function Ft(e){let t=[],s=[...Vr.map(n=>({name:n,enabled:!0})),...zr.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 Ie(e){e.state.env.SHELLOPTS=Ft(e.state.options)}var jr=["dotglob","expand_aliases","extglob","failglob","globskipdots","globstar","lastpipe","nocaseglob","nocasematch","nullglob","xpg_echo"];function Mt(e){let t=[];for(let s of jr)e[s]&&t.push(s);return t.join(":")}function zt(e){e.state.env.BASHOPTS=Mt(e.state.shoptOptions)}var Br="BASH_ALIAS_";function an(e){return e.parts.length!==1?!1:e.parts[0].type==="Literal"}function on(e){if(e.parts.length!==1)return null;let t=e.parts[0];return t.type==="Literal"?t.value:null}function ln(e,t){return e.env[`${Br}${t}`]}function Vt(e,t,s){if(!t.name||!an(t.name))return t;let n=on(t.name);if(!n)return t;let r=ln(e,n);if(!r||s.has(n))return t;try{s.add(n);let i=new M,a=r,o=r.endsWith(" ");if(!o)for(let u of t.args){let d=fn(u);a+=` ${d}`}let l;try{l=i.parse(a)}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 cn(t,r);let f=l.statements[0].pipelines[0].commands[0];if(f.type!=="SimpleCommand")return cn(t,r);let c={...f,assignments:[...t.assignments,...f.assignments],redirections:[...f.redirections,...t.redirections],line:t.line};if(o&&t.args.length>0&&(c={...c,args:[...c.args,...t.args]},c.args.length>0)){let u=c.args[0];if(an(u)){let d=on(u);if(d&&ln(e,d)){let h={type:"SimpleCommand",name:u,args:c.args.slice(1),assignments:[],redirections:[]},m=Vt(e,h,s);m!==h&&(c={...c,name:m.name,args:[...m.args]})}}}return c}catch(i){throw s.delete(n),i}}function cn(e,t){let s=t;for(let a of e.args){let o=fn(a);s+=` ${o}`}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 fn(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 un(e,t){let s=t.parts.map(c=>c.type==="Literal"?c.value:"\0").join(""),n=s.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);if(!n||!s.endsWith(")"))return null;let r=n[1],i=[],a=!1,o="",l=!1;for(let c of t.parts)if(c.type==="Literal"){let u=c.value;if(!a){let d=u.indexOf("=(");d!==-1&&(a=!0,u=u.slice(d+2))}if(a){u.endsWith(")")&&(u=u.slice(0,-1));let d=u.split(/(\s+)/);for(let h of d)/^\s+$/.test(h)?(o||l)&&(i.push(o),o="",l=!1):h&&(o+=h)}}else if(a)if(c.type==="BraceExpansion")if(/^\[.+\]=/.test(o))o+=tt({type:"Word",parts:[c]});else{(o||l)&&(i.push(o),o="",l=!1);let d=await pe(e,{type:"Word",parts:[c]});i.push(...d.values)}else{(c.type==="SingleQuoted"||c.type==="DoubleQuoted"||c.type==="Escaped")&&(l=!0);let u=await I(e,{type:"Word",parts:[c]});o+=u}(o||l)&&i.push(o);let f=i.map(c=>/^\[.+\]=/.test(c)?c:c===""?"''":/[\s"'\\$`!*?[\]{}|&;<>()]/.test(c)&&!c.startsWith("'")&&!c.startsWith('"')?`'${c.replace(/'/g,"'\\''")}'`:c);return`${r}=(${f.join(" ")})`}async function dn(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),a=t.parts[s];if(a.type!=="Literal")return null;let o=r?2:1,l=a.value.slice(0,n),f=a.value.slice(n+o),c=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:f!==""?[{type:"Literal",value:f},...c]:c},h=d.parts.length>0?await I(e,d):"";return`${u}${r?"+=":"="}${h}`}var Hr=["tar","yq","xan","sqlite3"];function hn(e){return Hr.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 we(e,t,s="",n=""){throw new te(e,t,s,n)}function jt(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new
|
|
4
|
+
`),e.writeFileSync("/proc/self/status",Ms()),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 rn(e,t){Lr(e)&&(Wr(e,t),Fr(e),Mr(e))}var zr=["allexport","errexit","noglob","noclobber","noexec","nounset","pipefail","posix","verbose","xtrace"],Vr=["braceexpand","hashall","interactive-comments"];function Ft(e){let t=[],s=[...Vr.map(n=>({name:n,enabled:!0})),...zr.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 Ie(e){e.state.env.SHELLOPTS=Ft(e.state.options)}var jr=["dotglob","expand_aliases","extglob","failglob","globskipdots","globstar","lastpipe","nocaseglob","nocasematch","nullglob","xpg_echo"];function Mt(e){let t=[];for(let s of jr)e[s]&&t.push(s);return t.join(":")}function zt(e){e.state.env.BASHOPTS=Mt(e.state.shoptOptions)}var Br="BASH_ALIAS_";function an(e){return e.parts.length!==1?!1:e.parts[0].type==="Literal"}function on(e){if(e.parts.length!==1)return null;let t=e.parts[0];return t.type==="Literal"?t.value:null}function ln(e,t){return e.env[`${Br}${t}`]}function Vt(e,t,s){if(!t.name||!an(t.name))return t;let n=on(t.name);if(!n)return t;let r=ln(e,n);if(!r||s.has(n))return t;try{s.add(n);let i=new M,a=r,o=r.endsWith(" ");if(!o)for(let u of t.args){let d=fn(u);a+=` ${d}`}let l;try{l=i.parse(a)}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 cn(t,r);let f=l.statements[0].pipelines[0].commands[0];if(f.type!=="SimpleCommand")return cn(t,r);let c={...f,assignments:[...t.assignments,...f.assignments],redirections:[...f.redirections,...t.redirections],line:t.line};if(o&&t.args.length>0&&(c={...c,args:[...c.args,...t.args]},c.args.length>0)){let u=c.args[0];if(an(u)){let d=on(u);if(d&&ln(e,d)){let h={type:"SimpleCommand",name:u,args:c.args.slice(1),assignments:[],redirections:[]},m=Vt(e,h,s);m!==h&&(c={...c,name:m.name,args:[...m.args]})}}}return c}catch(i){throw s.delete(n),i}}function cn(e,t){let s=t;for(let a of e.args){let o=fn(a);s+=` ${o}`}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 fn(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 un(e,t){let s=t.parts.map(c=>c.type==="Literal"?c.value:"\0").join(""),n=s.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);if(!n||!s.endsWith(")"))return null;let r=n[1],i=[],a=!1,o="",l=!1;for(let c of t.parts)if(c.type==="Literal"){let u=c.value;if(!a){let d=u.indexOf("=(");d!==-1&&(a=!0,u=u.slice(d+2))}if(a){u.endsWith(")")&&(u=u.slice(0,-1));let d=u.split(/(\s+)/);for(let h of d)/^\s+$/.test(h)?(o||l)&&(i.push(o),o="",l=!1):h&&(o+=h)}}else if(a)if(c.type==="BraceExpansion")if(/^\[.+\]=/.test(o))o+=tt({type:"Word",parts:[c]});else{(o||l)&&(i.push(o),o="",l=!1);let d=await pe(e,{type:"Word",parts:[c]});i.push(...d.values)}else{(c.type==="SingleQuoted"||c.type==="DoubleQuoted"||c.type==="Escaped")&&(l=!0);let u=await I(e,{type:"Word",parts:[c]});o+=u}(o||l)&&i.push(o);let f=i.map(c=>/^\[.+\]=/.test(c)?c:c===""?"''":/[\s"'\\$`!*?[\]{}|&;<>()]/.test(c)&&!c.startsWith("'")&&!c.startsWith('"')?`'${c.replace(/'/g,"'\\''")}'`:c);return`${r}=(${f.join(" ")})`}async function dn(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),a=t.parts[s];if(a.type!=="Literal")return null;let o=r?2:1,l=a.value.slice(0,n),f=a.value.slice(n+o),c=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:f!==""?[{type:"Literal",value:f},...c]:c},h=d.parts.length>0?await I(e,d):"";return`${u}${r?"+=":"="}${h}`}var Hr=["tar","yq","xan","sqlite3","python3","python"];function hn(e){return Hr.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 we(e,t,s="",n=""){throw new te(e,t,s,n)}function jt(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new be;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 re(s)}async function Bt(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 a=t.slice(i);if(a.length===0||a[0]==="~"?s=e.state.env.HOME||"/":a[0]==="-"?(s=e.state.previousDir,n=!0):s=a[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!=="."),f="";for(let u of l)if(u==="..")f=f.split("/").slice(0,-1).join("/")||"/";else{f=f?`${f}/${u}`:`/${u}`;try{if(!(await e.fs.stat(f)).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 c=f||"/";if(r)try{c=await e.fs.realpath(c)}catch{}return e.state.previousDir=e.state.cwd,e.state.cwd=c,e.state.env.PWD=e.state.cwd,e.state.env.OLDPWD=e.state.previousDir,W(n?`${c}
|
|
9
9
|
`:"")}function Ht(e,t){return e.fs.resolvePath(e.state.cwd,t)}var Ur=["-e","-a","-f","-d","-r","-w","-x","-s","-L","-h","-k","-g","-u","-G","-O","-b","-c","-p","-S","-t","-N"];function at(e){return Ur.includes(e)}async function ot(e,t,s){let n=Ht(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 qr=["-nt","-ot","-ef"];function lt(e){return qr.includes(e)}async function ct(e,t,s,n){let r=Ht(e,s),i=Ht(e,n);switch(t){case"-nt":try{let a=await e.fs.stat(r),o=await e.fs.stat(i);return a.mtime>o.mtime}catch{return!1}case"-ot":try{let a=await e.fs.stat(r),o=await e.fs.stat(i);return a.mtime<o.mtime}catch{return!1}case"-ef":try{if(!await e.fs.exists(r)||!await e.fs.exists(i))return!1;let a=e.fs.resolvePath(e.state.cwd,r),o=e.fs.resolvePath(e.state.cwd,i);return a===o}catch{return!1}default:return!1}}var Zr=new Set(["-eq","-ne","-lt","-le","-gt","-ge"]);function ft(e){return Zr.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 o=Te(t,s,r,i);return e==="!="?!o:o}if(r){let o=t.toLowerCase()===s.toLowerCase();return e==="!="?!o:o}let a=t===s;return e==="!="?!a:a}var Gr=new Set(["-z","-n"]);function ht(e){return Gr.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 o=r;return(o.startsWith("'")&&o.endsWith("'")||o.startsWith('"')&&o.endsWith('"'))&&(o=o.slice(1,-1)),o=o.replace(/\$([a-zA-Z_][a-zA-Z0-9_]*)/g,(l,f)=>e.state.env[f]||""),`${n}_${o}`in e.state.env}let a;try{let o=new M,l=q(o,r);a=await V(e,l.expression)}catch{if(/^-?\d+$/.test(r))a=Number.parseInt(r,10);else{let o=e.state.env[r];a=o?Number.parseInt(o,10):0}}if(a<0){let o=J(e,n),l=e.state.currentLine;if(o.length===0)return e.state.expansionStderr=(e.state.expansionStderr||"")+`bash: line ${l}: ${n}: bad array subscript
|
|
10
10
|
`,!1;if(a=Math.max(...o)+1+a,a<0)return e.state.expansionStderr=(e.state.expansionStderr||"")+`bash: line ${l}: ${n}: bad array subscript
|
|
11
|
-
`,!1}return`${n}_${a}`in e.state.env}return t in e.state.env?!0:e.state.associativeArrays?.has(t)?
|
|
11
|
+
`,!1}return`${n}_${a}`in e.state.env}return t in e.state.env?!0:e.state.associativeArrays?.has(t)?Ee(e,t).length>0:J(e,t).length>0}async function _e(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=Gs(i)}else r=await Xs(e,t.right);else ze(t.operator)&&!n?r=await Ys(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 mn(e,s),await mn(e,r));if(lt(t.operator))return ct(e,t.operator,s,r);switch(t.operator){case"=~":try{let i=e.state.shoptOptions.nocasematch,a=Qr(r),o=new RegExp(a,i?"i":""),l=s.match(o);if(he(e,"BASH_REMATCH"),l)for(let f=0;f<l.length;f++)e.state.env[`BASH_REMATCH_${f}`]=l[f]||"";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 at(t.operator)?ot(e,t.operator,s):ht(t.operator)?pt(t.operator,s):t.operator==="-v"?await mt(e,s):t.operator==="-o"?qt(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 _e(e,t.operand);case"CondAnd":return await _e(e,t.left)?await _e(e,t.right):!1;case"CondOr":return await _e(e,t.left)?!0:await _e(e,t.right);case"CondGroup":return await _e(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):at(n)?U(await ot(e,n,r)):ht(n)?U(pt(n,r)):n==="!"?U(!r):n==="-v"?U(await mt(e,r)):n==="-o"?U(qt(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 a=yt(n),o=yt(i);return!a.valid||!o.valid?_("","",2):U(ut(r,a.value,o.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 a=await Ve(e,[r,i]);return _("",a.stderr,a.exitCode===0?1:a.exitCode===1?0:a.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 gn(e,t,0);return s.pos<t.length?S(`test: too many arguments
|
|
14
14
|
`,2):U(s.value)}async function gn(e,t,s){return Kr(e,t,s)}async function Kr(e,t,s){let{value:n,pos:r}=await pn(e,t,s);for(;t[r]==="-o";){let i=await pn(e,t,r+1);n=n||i.value,r=i.pos}return{value:n,pos:r}}async function pn(e,t,s){let{value:n,pos:r}=await Ut(e,t,s);for(;t[r]==="-a";){let i=await Ut(e,t,r+1);n=n&&i.value,r=i.pos}return{value:n,pos:r}}async function Ut(e,t,s){if(t[s]==="!"){let{value:n,pos:r}=await Ut(e,t,s+1);return{value:!n,pos:r}}return Xr(e,t,s)}async function Xr(e,t,s){let n=t[s];if(n==="("){let{value:i,pos:a}=await gn(e,t,s+1);return{value:i,pos:t[a]===")"?a+1:a}}let r=t[s+1];if(ze(r)){let i=n,a=t[s+2]??"";return{value:dt(r,i,a),pos:s+3}}if(ft(r)){let i=yt(n),a=yt(t[s+2]??"0");return!i.valid||!a.valid?{value:!1,pos:s+3}:{value:ut(r,i.value,a.value),pos:s+3}}if(lt(r)){let i=n,a=t[s+2]??"";return{value:await ct(e,r,i,a),pos:s+3}}if(at(n)){let i=t[s+1]??"";return{value:await ot(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:qt(e,i),pos:s+2}}return{value:n!==void 0&&n!=="",pos:s+1}}function Te(e,t,s=!1,n=!1){let r=`^${wn(t,n)}$`,i=s?"is":"s";return new RegExp(r,i).test(e)}function wn(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=vn(e,n+1);if(i!==-1){let a=e.slice(n+2,i),o=bn(a),l=o.map(c=>wn(c,t)),f=l.length>0?l.join("|"):"(?:)";if(r==="@")s+=`(?:${f})`;else if(r==="*")s+=`(?:${f})*`;else if(r==="+")s+=`(?:${f})+`;else if(r==="?")s+=`(?:${f})?`;else if(r==="!")if(i<e.length-1){let u=o.map(h=>En(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(`(?!(?:${f})).{${h}}`),s+=`(?:${m.join("|")})`}}else s+=`(?:(?!(?:${f})).)*?`}else s+=`(?!(?:${f})$).*`;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 vn(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 bn(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 En(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=vn(e,n+1);if(i!==-1){if(r==="@"){let a=e.slice(n+2,i),l=bn(a).map(f=>En(f,t));if(l.every(f=>f!==null)&&l.every(f=>f===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 qt(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 mn(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 yn(t);try{let s=new M,n=q(s,t);return await V(e,n.expression)}catch{return yn(t)}}function Yr(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 yn(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=Yr(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 Qr(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=Jr(e,s);t+=n.converted,s=n.endIndex}else t+=e[s],s++;return t}function Jr(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 a="",o=!1;for(;s<e.length;){let l=e[s];if(l==="]"){o=!0,s++;break}if(l==="["&&s+1<e.length&&e[s+1]===":"){let f=e.indexOf(":]",s+2);if(f!==-1){let c=e.slice(s+2,f);a+=ei(c),s=f+2;continue}}if(l==="["&&s+1<e.length){let f=e[s+1];if(f==="."||f==="="){let c=`${f}]`,u=e.indexOf(c,s+2);if(u!==-1){let d=e.slice(s+2,u);a+=d,s=u+2;continue}}}if(l==="\\"&&s+1<e.length){a+=l+e[s+1],s+=2;continue}a+=l,s++}return o?(r&&(n+="\\]"),i&&(n+="\\["),n+=a,n+="]",{converted:n,endIndex:s}):{converted:"\\[",endIndex:t+1}}function ei(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 me(e){let t=[],s="",n=!1,r=!1,i=!1,a=!1;for(let o of e){if(i){s+=o,i=!1,a=!0;continue}if(o==="\\"){i=!0;continue}if(o==="'"&&!r){n||(a=!0),n=!n;continue}if(o==='"'&&!n){r||(a=!0),r=!r;continue}if((o===" "||o===" "||o===`
|
|
15
|
-
`)&&!n&&!r){a&&(t.push(s),s="",a=!1);continue}s+=o,a=!0}return a&&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 $n(e){let t=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(t)return{name:t[1],isArray:!0,arrayElements:me(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 ti(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 Sn(e,t,s={}){let{name:n,isArray:r,arrayElements:i,value:a,arrayIndex:o}=t,{makeReadonly:l=!1,checkReadonly:f=!0}=s;if(f){let c=K(e,n);if(c)return c}if(r&&i){for(let c=0;c<i.length;c++)e.state.env[`${n}_${c}`]=i[c];e.state.env[`${n}__length`]=String(i.length)}else if(o!==void 0&&a!==void 0){let c=await ti(e,o);e.state.env[`${n}_${c}`]=a;let u=parseInt(e.state.env[`${n}__length`]??"0",10);c>=u&&(e.state.env[`${n}__length`]=String(c+1))}else a!==void 0&&(e.state.env[n]=a);return l&&ne(e,n),null}function
|
|
15
|
+
`)&&!n&&!r){a&&(t.push(s),s="",a=!1);continue}s+=o,a=!0}return a&&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 $n(e){let t=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(t)return{name:t[1],isArray:!0,arrayElements:me(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 ti(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 Sn(e,t,s={}){let{name:n,isArray:r,arrayElements:i,value:a,arrayIndex:o}=t,{makeReadonly:l=!1,checkReadonly:f=!0}=s;if(f){let c=K(e,n);if(c)return c}if(r&&i){for(let c=0;c<i.length;c++)e.state.env[`${n}_${c}`]=i[c];e.state.env[`${n}__length`]=String(i.length)}else if(o!==void 0&&a!==void 0){let c=await ti(e,o);e.state.env[`${n}_${c}`]=a;let u=parseInt(e.state.env[`${n}__length`]??"0",10);c>=u&&(e.state.env[`${n}__length`]=String(c+1))}else a!==void 0&&(e.state.env[n]=a);return l&&ne(e,n),null}function Ce(e,t){e.state.localVarDepth=e.state.localVarDepth||new Map,e.state.localVarDepth.set(t,e.state.callDepth)}function xe(e,t){return e.state.localVarDepth?.get(t)}function wt(e,t){e.state.localVarDepth?.delete(t)}function An(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 _n(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 Zt=new Set([":",".","break","continue","eval","exec","exit","export","readonly","return","set","shift","trap","unset"]);function Cn(e){return Zt.has(e)}var Gt=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 ke(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 si(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),a=r+n+1,o=t.slice(a),l=o.indexOf(":");if(l===-1)return null;let f=Number.parseInt(o.slice(0,l),10);if(Number.isNaN(f)||f<0)return null;let c=o.slice(l+1);return{path:i,position:f,content:c}}async function Pn(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(Wt(e,r.target))return{targets:s,error:`bash: $@: ambiguous redirect
|
|
18
18
|
`};s.set(n,await I(e,r.target))}else{let a=await nt(e,r.target);if("error"in a)return{targets:s,error:a.error};s.set(n,a.target)}}return{targets:s}}function ni(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 a=Number.parseInt(i,10);Number.isNaN(a)||e.state.fileDescriptors.delete(a)}continue}let n=ni(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 a=e.state.fileDescriptors.get(i);a!==void 0&&e.state.fileDescriptors.set(n,a);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 Zs,C as Gs,D as ne,E as Pe,F as K,G as ue,H as st,I as Ks,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:a}=t;for(let f=0;f<s.length;f++){let c=s[f];if(c.target.type==="HereDoc")continue;let u,d=n?.get(f);if(d!==void 0)u=d;else if(c.operator===">&"||c.operator==="<&"){if(Wt(e,c.target)){i+=`bash: $@: ambiguous redirect
|
|
24
24
|
`,a=1,r="";continue}u=await I(e,c.target)}else{let m=await nt(e,c.target);if("error"in m){i+=m.error,a=1,r="";continue}u=m.target}if(!c.fdVariable)switch(c.operator){case">":case">|":{let h=c.fd??1,m=c.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
|
-
`,a=1,r="";break}let p=e.fs.resolvePath(e.state.cwd,u),g=await
|
|
26
|
-
`,a=1;break}if(u==="/dev/null")i="";else{let p=e.fs.resolvePath(e.state.cwd,u),g=await
|
|
27
|
-
`,a=1,r="";break}let m=e.fs.resolvePath(e.state.cwd,u),p=await
|
|
28
|
-
`,a=1;break}let m=e.fs.resolvePath(e.state.cwd,u),p=await
|
|
29
|
-
`,a=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(c.operator===">&"){let p=e.fs.resolvePath(e.state.cwd,u),g=await
|
|
25
|
+
`,a=1,r="";break}let p=e.fs.resolvePath(e.state.cwd,u),g=await ke(e,p,u,{checkNoclobber:!0,isClobber:m});if(g){i+=g,a=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
|
+
`,a=1;break}if(u==="/dev/null")i="";else{let p=e.fs.resolvePath(e.state.cwd,u),g=await ke(e,p,u,{checkNoclobber:!0,isClobber:m});if(g){i+=g,a=1;break}await e.fs.writeFile(p,i,X(i)),i=""}}break}case">>":{let h=c.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
|
+
`,a=1,r="";break}let m=e.fs.resolvePath(e.state.cwd,u),p=await ke(e,m,u,{});if(p){i+=p,a=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
|
+
`,a=1;break}let m=e.fs.resolvePath(e.state.cwd,u),p=await ke(e,m,u,{});if(p){i+=p,a=1;break}await e.fs.appendFile(m,i,X(i)),i=""}break}case">&":case"<&":{let h=c.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
|
+
`,a=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(c.operator===">&"){let p=e.fs.resolvePath(e.state.cwd,u),g=await ke(e,p,u,{checkNoclobber:!0});if(g){i=g,a=1,r="";break}if(c.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=si(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
|
`,a=1,r=""):m>=3&&(i+=`bash: ${m}: Bad file descriptor
|
|
31
31
|
`,a=1,r="")}}break}case"&>":{if(u==="/dev/full"){i=`bash: echo: write error: No space left on device
|
|
32
|
-
`,a=1,r="";break}let h=e.fs.resolvePath(e.state.cwd,u),m=await
|
|
33
|
-
`,a=1,r="";break}let h=e.fs.resolvePath(e.state.cwd,u),m=await
|
|
32
|
+
`,a=1,r="";break}let h=e.fs.resolvePath(e.state.cwd,u),m=await ke(e,h,u,{checkNoclobber:!0});if(m){i=m,a=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
|
+
`,a=1,r="";break}let h=e.fs.resolvePath(e.state.cwd,u),m=await ke(e,h,u,{});if(m){i=m,a=1,r="";break}let p=r+i;await e.fs.appendFile(h,p,X(p)),r="",i="";break}}}let o=e.state.fileDescriptors?.get(1);if(o){if(o==="__dupout__:2")i+=r,r="";else if(o.startsWith("__file__:")){let f=o.slice(9);await e.fs.appendFile(f,r,X(r)),r=""}else if(o.startsWith("__file_append__:")){let f=o.slice(16);await e.fs.appendFile(f,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 f=l.slice(9);await e.fs.appendFile(f,i,X(i)),i=""}else if(l.startsWith("__file_append__:")){let f=l.slice(16);await e.fs.appendFile(f,i,X(i)),i=""}}return _(r,i,a)}function Nn(e,t){if(e.state.options.posix&&Zt.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 ri(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(o=>o.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 Zs,C as Gs,D as ne,E as Pe,F as K,G as ue,H as st,I as Ks,J as I,K a
|
|
|
72
72
|
`,2);r.push(f)}else if(l==="+o"){if(o++,o>=t.length)return S(`compopt: +o: option requires an argument
|
|
73
73
|
`,2);let f=t[o];if(!Dn.includes(f))return S(`compopt: ${f}: invalid option name
|
|
74
74
|
`,2);i.push(f)}else if(l==="--"){a.push(...t.slice(o+1));break}else!l.startsWith("-")&&!l.startsWith("+")&&a.push(l)}if(s){let o=e.state.completionSpecs.get("__default__")??{isDefault:!0},l=new Set(o.options??[]);for(let f of r)l.add(f);for(let f of i)l.delete(f);return o.options=l.size>0?Array.from(l):void 0,e.state.completionSpecs.set("__default__",o),W("")}if(n){let o=e.state.completionSpecs.get("__empty__")??{},l=new Set(o.options??[]);for(let f of r)l.add(f);for(let f of i)l.delete(f);return o.options=l.size>0?Array.from(l):void 0,e.state.completionSpecs.set("__empty__",o),W("")}if(a.length>0){for(let o of a){let l=e.state.completionSpecs.get(o)??{},f=new Set(l.options??[]);for(let c of r)f.add(c);for(let c of i)f.delete(c);l.options=f.size>0?Array.from(f):void 0,e.state.completionSpecs.set(o,l)}return W("")}return S(`compopt: not currently executing completion function
|
|
75
|
-
`,1)}function ts(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new
|
|
75
|
+
`,1)}function ts(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new be;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 ie(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 ss(e){for(let t=0;t<e.length;t++){let s=e.charCodeAt(t);if(s<32||s===127)return!0}return!1}function ns(e){let t="$'";for(let s=0;s<e.length;s++){let 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 ss(e)?ns(e):/^[a-zA-Z0-9_/.:\-@%+,=]*$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function
|
|
77
|
+
`);s=n}throw new ie(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 ss(e){for(let t=0;t<e.length;t++){let s=e.charCodeAt(t);if(s<32||s===127)return!0}return!1}function ns(e){let t="$'";for(let s=0;s<e.length;s++){let 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 ss(e)?ns(e):/^[a-zA-Z0-9_/.:\-@%+,=]*$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function Oe(e){return ss(e)?ns(e):`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function rs(e){return ss(e)?ns(e):`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function In(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 is(e){return e===""?"''":/[\s'\\]/.test(e)?`'${e.replace(/'/g,"'\\''")}'`:e}function Tn(e,t){let s="",n="",r=!1;for(let i of t){let a=In(e,i);if(e.state.associativeArrays?.has(i)){let c=Ee(e,i);if(c.length===0)s+=`declare -A ${i}=()
|
|
78
78
|
`;else{let u=c.map(d=>{let h=e.state.env[`${i}_${d}`]??"",m=is(h);return`['${d}']=${m}`});s+=`declare -A ${i}=(${u.join(" ")})
|
|
79
|
-
`}continue}let l=J(e,i);if(l.length>0){let c=l.map(u=>{let d=e.state.env[`${i}_${u}`]??"";return`[${u}]=${
|
|
79
|
+
`}continue}let l=J(e,i);if(l.length>0){let c=l.map(u=>{let d=e.state.env[`${i}_${u}`]??"";return`[${u}]=${Oe(d)}`});s+=`declare -a ${i}=(${c.join(" ")})
|
|
80
80
|
`;continue}if(e.state.env[`${i}__length`]!==void 0){s+=`declare -a ${i}=()
|
|
81
81
|
`;continue}let f=e.state.env[i];if(f!==void 0)s+=`declare ${a} ${i}=${rs(f)}
|
|
82
82
|
`;else{let c=e.state.declaredVars?.has(i),u=e.state.localVarDepth?.has(i);c||u?s+=`declare ${a} ${i}
|
|
83
83
|
`:(n+=`bash: declare: ${i}: not found
|
|
84
|
-
`,r=!0)}}return _(s,n,r?1:0)}function xn(e,t){let{filterExport:s,filterReadonly:n,filterNameref:r,filterIndexedArray:i,filterAssocArray:a}=t,o=s||n||r||i||a,l="",f=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);f.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)){f.add(h);continue}}f.add(u)}if(e.state.localVarDepth)for(let u of e.state.localVarDepth.keys())f.add(u);if(e.state.associativeArrays)for(let u of e.state.associativeArrays)f.add(u);let c=Array.from(f).sort();for(let u of c){let d=In(e,u),h=e.state.associativeArrays?.has(u),m=J(e,u),p=!h&&(m.length>0||e.state.env[`${u}__length`]!==void 0);if(o&&(a&&!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 xn(e,t){let{filterExport:s,filterReadonly:n,filterNameref:r,filterIndexedArray:i,filterAssocArray:a}=t,o=s||n||r||i||a,l="",f=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);f.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)){f.add(h);continue}}f.add(u)}if(e.state.localVarDepth)for(let u of e.state.localVarDepth.keys())f.add(u);if(e.state.associativeArrays)for(let u of e.state.associativeArrays)f.add(u);let c=Array.from(f).sort();for(let u of c){let d=In(e,u),h=e.state.associativeArrays?.has(u),m=J(e,u),p=!h&&(m.length>0||e.state.env[`${u}__length`]!==void 0);if(o&&(a&&!h||i&&!p||s&&!e.state.exportedVars?.has(u)||n&&!e.state.readonlyVars?.has(u)||r&&!oe(e,u)))continue;if(h){let b=Ee(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=is(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`[${$}]=${Oe(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}=${rs(g)}
|
|
89
|
-
`)}return W(l)}function Rn(e){let t="",s=Array.from(e.state.associativeArrays??[]).sort();for(let n of s){let r=
|
|
89
|
+
`)}return W(l)}function Rn(e){let t="",s=Array.from(e.state.associativeArrays??[]).sort();for(let n of s){let r=Ee(e,n);if(r.length===0)t+=`declare -A ${n}=()
|
|
90
90
|
`;else{let i=r.map(a=>{let o=e.state.env[`${n}_${a}`]??"",l=is(o);return`['${a}']=${l}`});t+=`declare -A ${n}=(${i.join(" ")})
|
|
91
91
|
`}}return W(t)}function Ln(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 a=r.slice(0,-8);e.state.associativeArrays?.has(a)||s.add(a);continue}let i=r.lastIndexOf("_");if(i>0){let a=r.slice(0,i),o=r.slice(i+1);/^\d+$/.test(o)&&(e.state.associativeArrays?.has(a)||s.add(a))}}let n=Array.from(s).sort();for(let r of n){let i=J(e,r);if(i.length===0)t+=`declare -a ${r}=()
|
|
92
|
-
`;else{let a=i.map(o=>{let l=e.state.env[`${r}_${o}`]??"";return`[${o}]=${
|
|
92
|
+
`;else{let a=i.map(o=>{let l=e.state.env[`${r}_${o}`]??"";return`[${o}]=${Oe(l)}`});t+=`declare -a ${r}=(${a.join(" ")})
|
|
93
93
|
`}}return W(t)}function Wn(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 a=r.slice(0,-8);s.add(a);continue}let i=r.lastIndexOf("_");if(i>0){let a=r.slice(0,i),o=r.slice(i+1);if(/^\d+$/.test(o)||e.state.associativeArrays?.has(a)){s.add(a);continue}}s.add(r)}let n=Array.from(s).sort();for(let r of n){if(e.state.associativeArrays?.has(r)||J(e,r).length>0||e.state.env[`${r}__length`]!==void 0)continue;let o=e.state.env[r];o!==void 0&&(t+=`${r}=${$t(o)}
|
|
94
94
|
`)}return W(t)}function as(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 Ei(e,t){return e.state.lowercaseVars?.has(t)??!1}function ls(e,t){e.state.uppercaseVars??=new Set,e.state.uppercaseVars.add(t),e.state.lowercaseVars?.delete(t)}function $i(e,t){return e.state.uppercaseVars?.has(t)??!1}function Le(e,t,s){return Ei(e,t)?s.toLowerCase():$i(e,t)?s.toUpperCase():s}async function Fn(e,t){try{let s=new M,n=q(s,t),r=await V(e,n.expression);return String(r)}catch{return"0"}}function Si(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 a=e.slice(i,n);if(n++,e[n]!=="=")return null;n++;let o=e.slice(n);return{name:s,indexExpr:a,value:o}}async function cs(e,t){let s=!1,n=!1,r=!1,i=!1,a=!1,o=!1,l=!1,f=!1,c=!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")a=!0;else if(x==="-n")o=!0;else if(x==="+n")l=!0;else if(x==="+a")f=!0;else if(x==="+x")c=!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")f=!0;else if(A==="x")c=!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")a=!0;else if(A==="n")o=!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&&Ce(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 Zs,C as Gs,D as ne,E as Pe,F as K,G as ue,H as st,I as Ks,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)),he(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=me(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=me(O);if(R.some(F=>/^\[[^\]]+\]=/.test(F))){let F=0;for(let H of R){let ee=H.match(/^\[([^\]]+)\]=(.*)$/);if(ee){let Q=ee[1],Nr=ee[2],kr=B(e,Nr),Fe;if(/^-?\d+$/.test(Q))Fe=Number.parseInt(Q,10);else try{let Or=new M,Dr=q(Or,Q);Fe=await V(e,Dr.expression)}catch{Fe=0}e.state.env[`${E}_${Fe}`]=kr,F=Fe+1}else{let Q=B(e,H);e.state.env[`${E}_${F}`]=Q,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&&ne(e,E),i&&ue(e,E);continue}if(l){let E=T.includes("=")?T.slice(0,T.indexOf("=")):T;if(Bs(e,E),!T.includes("="))continue}if(c){let E=T.includes("=")?T.slice(0,T.indexOf("=")):T;if(st(e,E),!T.includes("="))continue}let A=Si(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 ee=new M,Q=q(ee,O);F=await V(e,Q.expression)}catch{let ee=parseInt(O,10);F=Number.isNaN(ee)?0:ee}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&&ne(e,E),i&&ue(e,E);continue}let P=T.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(P&&!f){let E=P[1],O=P[2],R=K(e,E);if(R)return R;w(E);let G=me(O);if(e.state.associativeArrays?.has(E)){let F=gt(O);for(let[H,ee]of F){let Q=B(e,ee);e.state.env[`${E}_${H}`]=Q}}else{let F=J(e,E),H=0;if(F.length===0&&e.state.env[E]!==void 0){let Q=e.state.env[E];e.state.env[`${E}_0`]=Q,delete e.state.env[E],H=1}else F.length>0&&(H=Math.max(...F)+1);for(let Q=0;Q<G.length;Q++)e.state.env[`${E}_${H+Q}`]=B(e,G[Q]);let ee=H+G.length;e.state.env[`${E}__length`]=String(ee)}v(E),r&&ne(e,E),i&&ue(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&&as(e,E),d&&os(e,E),h&&ls(e,E);let F=J(e,E).length>0||e.state.associativeArrays?.has(E);if(Be(e,E)){let H=e.state.env[E]??"0",ee=parseInt(H,10)||0,Q=parseInt(await Fn(e,O),10)||0;O=String(ee+Q),e.state.env[E]=O}else if(F){O=Le(e,E,O);let H=`${E}_0`,ee=e.state.env[H]??"";e.state.env[H]=ee+O}else{O=Le(e,E,O);let H=e.state.env[E]??"";e.state.env[E]=H+O}v(E),r&&ne(e,E),i&&ue(e,E),e.state.options.allexport&&!c&&(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),o){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,ge(e,O),R!==""&&Rt(e,R)&&xt(e,O),v(O),r&&ne(e,O),i&&ue(e,O);continue}if(u&&as(e,O),d&&os(e,O),h&&ls(e,O),Be(e,O)&&(R=await Fn(e,R)),R=Le(e,O,R),oe(e,O)){let F
|
|
106
|
+
`,k=1;continue}e.state.env[O]=R,ge(e,O),R!==""&&Rt(e,R)&&xt(e,O),v(O),r&&ne(e,O),i&&ue(e,O);continue}if(u&&as(e,O),d&&os(e,O),h&&ls(e,O),Be(e,O)&&(R=await Fn(e,R)),R=Le(e,O,R),oe(e,O)){let F=$e(e,O);F&&F!==O?e.state.env[F]=R:e.state.env[O]=R}else e.state.env[O]=R;v(O),r&&ne(e,O),i&&ue(e,O),e.state.options.allexport&&!c&&(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),o){ge(e,E);let R=e.state.env[E];R!==void 0&&R!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(R)?Hs(e,E):R&&Rt(e,R)&&xt(e,E),v(E),r&&ne(e,E),i&&ue(e,E);continue}if(u&&as(e,E),d&&os(e,E),h&&ls(e,E),n){if(J(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&&ne(e,E),i&&ue(e,E)}}return _("",C,k)}async function fs(e,t){let s=!1,n=!1,r=!1,i=[];for(let a=0;a<t.length;a++){let o=t[a];if(o==="-a")s=!0;else if(o==="-A")n=!0;else if(o==="-p")r=!0;else if(o==="--"){i.push(...t.slice(a+1));break}else o.startsWith("-")||i.push(o)}if(i.length===0){let a="",o=Array.from(e.state.readonlyVars||[]).sort();for(let l of o){let f=e.state.env[l];if(f!==void 0){let c=f.replace(/\\/g,"\\\\").replace(/"/g,'\\"');a+=`declare -r ${l}="${c}"
|
|
109
109
|
`}}return W(a)}for(let a of i){let o=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(o){let u=o[1],d=o[2],h=K(e,u);if(h)return h;let m=me(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=J(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)}ne(e,u);continue}let l=a.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,ne(e,u);continue}let f=$n(a);if(f.value===void 0&&!f.isArray){ne(e,f.name);continue}let c=await Sn(e,f,{makeReadonly:!0});if(c)return c}return L}function us(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 Ai(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 ds(e,t){let s=us(e),n;for(let o=0;o<t.length;o++){let l=t[o];if(l==="--"){if(o+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 bs(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,a=!1,o=!1,l=[];for(let f of t)if(f==="-n")i=!0;else if(f==="-a")a=!0;else if(f==="-p")o=!0;else if(f.startsWith("-")&&!f.includes("="))for(let c of f.slice(1))c==="n"?i=!0:c==="a"?a=!0:c==="p"&&(o=!0);else l.push(f);if(l.length===0){let f="",c=Array.from(s.keys()).filter(u=>!u.includes("_")||!u.match(/_\d+$/)).filter(u=>!u.includes("__length")).sort();for(let u of c){let d=e.state.env[u];d!==void 0&&(f+=`${u}=${d}
|
|
509
509
|
`)}return _(f,"",0)}for(let f of l){let c,u,d=f.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(d){c=d[1];let b=d[2];if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(c)){n+=`bash: local: \`${f}': not a valid identifier
|
|
510
|
-
`,r=1;continue}if(K(e,c,"bash"),!s.has(c)){s.set(c,e.state.env[c]);let y=`${c}_`;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 $=`${c}_`;for(let y of Object.keys(e.state.env))y.startsWith($)&&!y.includes("__")&&delete e.state.env[y];let N=me(b);for(let y=0;y<N.length;y++)e.state.env[`${c}_${y}`]=N[y];e.state.env[`${c}__length`]=String(N.length),
|
|
510
|
+
`,r=1;continue}if(K(e,c,"bash"),!s.has(c)){s.set(c,e.state.env[c]);let y=`${c}_`;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 $=`${c}_`;for(let y of Object.keys(e.state.env))y.startsWith($)&&!y.includes("__")&&delete e.state.env[y];let N=me(b);for(let y=0;y<N.length;y++)e.state.env[`${c}_${y}`]=N[y];e.state.env[`${c}__length`]=String(N.length),Ce(e,c),i&&ge(e,c);continue}let h=f.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(h){c=h[1];let b=h[2];if(K(e,c,"bash"),!s.has(c)){s.set(c,e.state.env[c]);let v=`${c}_`;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=`${c}__length`;e.state.env[C]!==void 0&&!s.has(C)&&s.set(C,e.state.env[C])}let $=me(b),N=J(e,c),y=0;if(N.length===0&&e.state.env[c]!==void 0){let v=e.state.env[c];e.state.env[`${c}_0`]=v,delete e.state.env[c],y=1}else N.length>0&&(y=Math.max(...N)+1);for(let v=0;v<$.length;v++)e.state.env[`${c}_${y+v}`]=B(e,$[v]);let w=y+$.length;e.state.env[`${c}__length`]=String(w),Ce(e,c),i&&ge(e,c);continue}let m=f.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(m){c=m[1];let b=B(e,m[2]);K(e,c,"bash"),s.has(c)||s.set(c,e.state.env[c]);let $=e.state.env[c]??"";e.state.env[c]=$+b,Ce(e,c),i&&ge(e,c);continue}let p=f.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([^\]]+)\]=(.*)$/s);if(p){c=p[1];let b=p[2],$=B(e,p[3]);if(K(e,c,"bash"),!s.has(c)){s.set(c,e.state.env[c]);let w=`${c}_`;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=`${c}__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[`${c}_${N}`]=$;let y=parseInt(e.state.env[`${c}__length`]??"0",10);N>=y&&(e.state.env[`${c}__length`]=String(N+1)),Ce(e,c),i&&ge(e,c);continue}if(f.includes("=")){let b=f.indexOf("=");c=f.slice(0,b),u=B(e,f.slice(b+1))}else c=f;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(c)){n+=`bash: local: \`${f}': not a valid identifier
|
|
511
511
|
`,r=1;continue}let g=s.has(c);if(u!==void 0){let b=e.state.env[c];if(e.state.tempEnvBindings){let $=e.state.accessedTempEnvVars?.has(c),N=e.state.mutatedTempEnvVars?.has(c);if(!$&&!N)for(let y=e.state.tempEnvBindings.length-1;y>=0;y--){let w=e.state.tempEnvBindings[y];if(w.has(c)){b=w.get(c);break}}}An(e,c,b)}if(!g){let b=e.state.env[c];if(e.state.tempEnvBindings)for(let $=e.state.tempEnvBindings.length-1;$>=0;$--){let N=e.state.tempEnvBindings[$];if(N.has(c)){b=N.get(c);break}}if(s.set(c,b),a){let $=`${c}_`;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=`${c}__length`;e.state.env[N]!==void 0&&!s.has(N)&&s.set(N,e.state.env[N])}}if(a&&u===void 0){let b=`${c}_`;for(let $ of Object.keys(e.state.env))$.startsWith(b)&&!$.includes("__")&&delete e.state.env[$];e.state.env[`${c}__length`]="0"}else if(u!==void 0){if(K(e,c,"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[c]=u,e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(c))}else{let b=e.state.tempEnvBindings?.some($=>$.has(c));!g&&!b&&delete e.state.env[c]}
|
|
512
|
+
`,r=1;continue}e.state.env[c]=u,e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(c))}else{let b=e.state.tempEnvBindings?.some($=>$.has(c));!g&&!b&&delete e.state.env[c]}Ce(e,c),i&&ge(e,c)}return _("",n,r)}function Es(e,t,s){let n=`
|
|
513
513
|
`,r=0,i=0,a=0,o=!1,l="MAPFILE",f=0;for(;f<t.length;){let b=t[f];b==="-d"&&f+1<t.length?(n=t[f+1]===""?"\0":t[f+1]||`
|
|
514
514
|
`,f+=2):b==="-n"&&f+1<t.length?(r=Number.parseInt(t[f+1],10)||0,f+=2):b==="-O"&&f+1<t.length?(i=Number.parseInt(t[f+1],10)||0,f+=2):b==="-s"&&f+1<t.length?(a=Number.parseInt(t[f+1],10)||0,f+=2):b==="-t"?(o=!0,f++):b==="-u"||b==="-C"||b==="-c"?f+=2:(b.startsWith("-")||(l=b),f++)}let c=s;!c&&e.state.groupStdin!==void 0&&(c=e.state.groupStdin);let u=[],d=c,h=0,m=0;for(;d.length>0;){let b=d.indexOf(n);if(b===-1){if(d.length>0){if(m<a)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)),!o&&n!=="\0"&&($+=n),d=d.substring(b+n.length),m<a){m++;continue}if(r>0&&h>=r)break;u.push($),h++}i===0&&he(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 Ni(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),a=r+n+1,o=t.slice(a),l=o.indexOf(":");if(l===-1)return null;let f=Number.parseInt(o.slice(0,l),10);if(Number.isNaN(f)||f<0)return null;let c=o.slice(l+1);return{path:i,position:f,content:c}}function ki(e,t,s){return`__rw__:${e.length}:${e}:${t}:${s}`}function $s(e,t,s,n=-1){let r=!1,i=`
|
|
515
515
|
`,a="",o=-1,l=-1,f=null,c=-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 o=Number.parseInt(O,10),(Number.isNaN(o)||o<0)&&(m=!0,o=0),{nextArgIndex:P+1}}else if(P+1<t.length)return o=Number.parseInt(t[P+1],10),(Number.isNaN(o)||o<0)&&(m=!0,o=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?(f=A.substring(D+1),{nextArgIndex:P+1}):P+1<t.length?(f=t[P+1],{nextArgIndex:P+2}):{nextArgIndex:P+1};if(E==="p")return D+1<A.length?(a=A.substring(D+1),{nextArgIndex:P+1}):P+1<t.length?(a=t[P+1],{nextArgIndex:P+2}):{nextArgIndex:P+1};if(E==="u"){if(D+1<A.length){let O=A.substring(D+1);return c=Number.parseInt(O,10),Number.isNaN(c)||c<0?{nextArgIndex:-2}:{nextArgIndex:P+1}}else if(P+1<t.length)return c=Number.parseInt(t[P+1],10),Number.isNaN(c)||c<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&&f===null&&d.push("REPLY"),u===0){if(f)he(e,f);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;c>=0?e.state.fileDescriptors?g=e.state.fileDescriptors.get(c)||"":g="":!g&&e.state.groupStdin!==void 0&&(g=e.state.groupStdin);let b=i===""?"\0":i,$="",N=0,y=!0,w=A=>{if(c>=0&&e.state.fileDescriptors)e.state.fileDescriptors.set(c,g.substring(A));else if(n>=0&&e.state.fileDescriptors){let P=e.state.fileDescriptors.get(n);if(P?.startsWith("__rw__:")){let D=Ni(P);if(D){let E=D.position+A;e.state.fileDescriptors.set(n,ki(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(o>=0){let A=0,P=0,D=!1;for(;P<g.length&&A<o;){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
|
-
`,Vn={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},jn={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},Bn=["errexit","nounset","pipefail","verbose","xtrace","posix","allexport","noclobber","noglob","noexec","vi","emacs"],Hn=["braceexpand","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","nolog","notify","onecmd","physical","privileged"];function Un(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,Ie(e))}function Oi(e,t){return t+1<e.length&&!e[t+1].startsWith("-")&&!e[t+1].startsWith("+")}function Di(e,t){let s=J(e,t);if(s.length===0)return`${t}=()`;let n=s.map(r=>{let i=e.state.env[`${t}_${r}`]??"";return`[${r}]=${
|
|
536
|
+
`,Vn={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},jn={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},Bn=["errexit","nounset","pipefail","verbose","xtrace","posix","allexport","noclobber","noglob","noexec","vi","emacs"],Hn=["braceexpand","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","nolog","notify","onecmd","physical","privileged"];function Un(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,Ie(e))}function Oi(e,t){return t+1<e.length&&!e[t+1].startsWith("-")&&!e[t+1].startsWith("+")}function Di(e,t){let s=J(e,t);if(s.length===0)return`${t}=()`;let n=s.map(r=>{let i=e.state.env[`${t}_${r}`]??"";return`[${r}]=${Oe(i)}`});return`${t}=(${n.join(" ")})`}function Ii(e){return/^[a-zA-Z0-9_]+$/.test(e)?e:`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function Ti(e,t){let s=Ee(e,t);if(s.length===0)return`${t}=()`;let n=s.map(r=>{let i=e.state.env[`${t}_${r}`]??"";return`[${Ii(r)}]=${Oe(i)}`});return`${t}=(${n.join(" ")} )`}function xi(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 Ri(e){return e.state.associativeArrays??new Set}function _s(e,t){if(t.includes("--help"))return W(_t);if(t.length===0){let n=xi(e),r=Ri(e),i=l=>{for(let f of r){let c=`${f}_`,u=`${f}__length`;if(l!==u&&l.startsWith(c)){if(l.slice(c.length).startsWith("_length"))continue;return!0}}return!1},a=[];for(let[l,f]of Object.entries(e.state.env)){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(l)||n.has(l)||r.has(l))continue;let c=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)_(\d+)$/);if(c&&n.has(c[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])||a.push([l,f])}let o=[];for(let[l,f]of a.sort(([c],[u])=>c<u?-1:c>u?1:0))o.push(`${l}=${$t(f)}`);for(let l of[...n].sort((f,c)=>f<c?-1:f>c?1:0))o.push(Di(e,l));for(let l of[...r].sort((f,c)=>f<c?-1:f>c?1:0))o.push(Ti(e,l));return o.sort((l,f)=>{let c=l.split("=")[0],u=f.split("=")[0];return c<u?-1:c>u?1:0}),W(o.length>0?`${o.join(`
|
|
537
537
|
`)}
|
|
538
538
|
`:"")}let s=0;for(;s<t.length;){let n=t[s];if((n==="-o"||n==="+o")&&Oi(t,s)){let r=t[s+1];if(!(r in jn)){let i=`bash: set: ${r}: invalid option name
|
|
539
539
|
${_t}`;if(e.state.options.posix)throw new ce(1,"",i);return S(i)}Un(e,jn[r],n==="-o"),s+=2;continue}if(n==="-o"){let r=Bn.map(o=>`${o.padEnd(16)}${e.state.options[o]?"on":"off"}`),i=Hn.map(o=>`${o.padEnd(16)}off`),a=[...r,...i].sort();return W(`${a.join(`
|
|
@@ -552,13 +552,13 @@ ${_t}`;if(e.state.options.posix)throw new ce(1,"",r);return S(r)}return As(e,t.s
|
|
|
552
552
|
`,r=1;continue}if($===null)continue;if($<0){let N=fe(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(!qn(i)){n+=`bash: unset: \`${i}': not a valid identifier
|
|
555
|
-
`,r=1;continue}let c=i;if(oe(e,i)){let d
|
|
555
|
+
`,r=1;continue}let c=i;if(oe(e,i)){let d=$e(e,i);d&&d!==i&&(c=d)}if(Ne(e,c)){n+=`bash: unset: ${c}: cannot unset: readonly variable
|
|
556
556
|
`,r=1;continue}let u=xe(e,c);if(u!==void 0&&u!==e.state.callDepth)Gn(e,c);else if(e.state.fullyUnsetLocals?.has(c))delete e.state.env[c];else if(u!==void 0){let d=e.state.accessedTempEnvVars?.has(c),h=e.state.mutatedTempEnvVars?.has(c);if((d||h)&&e.state.localVarStack?.has(c)){let m=vt(e,c);m?m.value===void 0?delete e.state.env[c]:e.state.env[c]=m.value:delete e.state.env[c]}else delete e.state.env[c]}else Ns(e,c)||delete e.state.env[c];e.state.exportedVars?.delete(c);continue}let a=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(a){let f=a[1],c=a[2];if(c==="@"||c==="*"){let p=fe(e,f);for(let[g]of p)delete e.state.env[`${f}_${g}`];delete e.state.env[f];continue}let u=e.state.associativeArrays?.has(f);if(u){let p=await Kn(e,c);delete e.state.env[`${f}_${p}`];continue}let d=Lt(e,f);if(f in e.state.env&&!d&&!u){n+=`bash: unset: ${f}: not an array variable
|
|
557
557
|
`,r=1;continue}let m=await Zn(e,c);if(m===null&&d){n+=`bash: unset: ${c}: not a valid identifier
|
|
558
558
|
`,r=1;continue}if(m===null)continue;if(m<0){let p=fe(e,f),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[`${f}_${N}`];continue}delete e.state.env[`${f}_${m}`];continue}if(!qn(i)){n+=`bash: unset: \`${i}': not a valid identifier
|
|
561
|
-
`,r=1;continue}let o=i;if(oe(e,i)){let f
|
|
561
|
+
`,r=1;continue}let o=i;if(oe(e,i)){let f=$e(e,i);f&&f!==i&&(o=f)}if(Ne(e,o)){n+=`bash: unset: ${o}: cannot unset: readonly variable
|
|
562
562
|
`,r=1;continue}let l=xe(e,o);if(l!==void 0&&l!==e.state.callDepth)Gn(e,o);else if(e.state.fullyUnsetLocals?.has(o))delete e.state.env[o];else if(l!==void 0){let f=e.state.accessedTempEnvVars?.has(o),c=e.state.mutatedTempEnvVars?.has(o);if((f||c)&&e.state.localVarStack?.has(o)){let u=vt(e,o);u?u.value===void 0?delete e.state.env[o]:e.state.env[o]=u.value:delete e.state.env[o]}else delete e.state.env[o]}else Ns(e,o)||delete e.state.env[o];e.state.exportedVars?.delete(o),e.state.functions.delete(i)}return _("",n,r)}var Os=["extglob","dotglob","nullglob","failglob","globstar","globskipdots","nocaseglob","nocasematch","expand_aliases","lastpipe","xpg_echo"],Wi=["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 Os.includes(e)}function Fi(e){return Wi.includes(e)}function Xn(e,t){let s=!1,n=!1,r=!1,i=!1,a=!1,o=[],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":a=!0;break;default:return{exitCode:2,stdout:"",stderr:`shopt: -${m}: invalid option
|
|
563
563
|
`}}}l++}else break}for(;l<t.length;)o.push(t[l]),l++;if(a)return Mi(e,o,s,n,r,i);if(s&&n)return{exitCode:1,stdout:"",stderr:`shopt: cannot set and unset shell options simultaneously
|
|
564
564
|
`};if(o.length===0){if(s||n){let h=[];for(let m of Os){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 f)return t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,f.path)),await o(f.path,s,n);let{cmd:c,path:u}=f;t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,u));let d=n||i.state.groupStdin||"",h=a(),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 c.execute(s,m)}catch(p){return S(`${t}: ${le(p)}
|
|
620
620
|
`)}}async function Ds(e,t){let s=e.state.inCondition;e.state.inCondition=!0;let n="",r="",i=0;try{for(let a of t){let o=await e.executeStatement(a);n+=o.stdout,r+=o.stderr,i=o.exitCode}}finally{e.state.inCondition=s}return{stdout:n,stderr:r,exitCode:i}}function qe(e,t,s,n){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:"break",stdout:t,stderr:s};if(e instanceof ie)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 se||e instanceof ae||e instanceof z||e instanceof te)return e.prependOutput(t,s),{action:"rethrow",stdout:t,stderr:s,error:e};let r=le(e);return{action:"error",stdout:t,stderr:`${s}${r}
|
|
621
|
-
`,exitCode:1}}async function Nt(e,t,s="",n=""){let r=s,i=n,a=0;try{for(let o of t){let l=await e.executeStatement(o);r+=l.stdout,i+=l.stderr,a=l.exitCode}}catch(o){if(Je(o)||o instanceof ae||o instanceof z||o instanceof te||o instanceof
|
|
621
|
+
`,exitCode:1}}async function Nt(e,t,s="",n=""){let r=s,i=n,a=0;try{for(let o of t){let l=await e.executeStatement(o);r+=l.stdout,i+=l.stderr,a=l.exitCode}}catch(o){if(Je(o)||o instanceof ae||o instanceof z||o instanceof te||o instanceof be)throw o.prependOutput(r,i),o;return{stdout:r,stderr:`${i}${le(o)}
|
|
622
622
|
`,exitCode:1}}return{stdout:r,stderr:i,exitCode:a}}async function ar(e,t){let s="",n="";for(let r of t.clauses){let i=await Ds(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 or(e,t){let s=await ye(e,t.redirections);if(s)return s;let n="",r="",i=0,a=0;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t.variable))return S(`bash: \`${t.variable}': not a valid identifier
|
|
623
623
|
`);let o=[];if(t.words===null)o=(e.state.env["@"]||"").split(" ").filter(Boolean);else if(t.words.length===0)o=[];else try{for(let f of t.words){let c=await pe(e,f);o.push(...c.values)}}catch(f){if(f instanceof Qe)return{stdout:"",stderr:f.stderr,exitCode:1};throw f}e.state.loopDepth++;try{for(let f of o){a++,a>e.limits.maxLoopIterations&&we(`for loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r),e.state.env[t.variable]=f;try{for(let c of t.body){let u=await e.executeStatement(c);n+=u.stdout,r+=u.stderr,i=u.exitCode}}catch(c){let u=qe(c,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 lr(e,t){let s=await ye(e,t.redirections);if(s)return s;let n=t.line;n!==void 0&&(e.state.currentLine=n);let r="",i="",a=0,o=0;t.init&&await V(e,t.init.expression),e.state.loopDepth++;try{for(;o++,o>e.limits.maxLoopIterations&&we(`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 f of t.body){let c=await e.executeStatement(f);r+=c.stdout,i+=c.stderr,a=c.exitCode}}catch(f){let c=qe(f,r,i,e.state.loopDepth);if(r=c.stdout,i=c.stderr,c.action==="break")break;if(c.action==="continue"){t.update&&await V(e,t.update.expression);continue}if(c.action==="error"){let u=_(r,i,c.exitCode??1);return j(e,u,t.redirections)}throw c.error}t.update&&await V(e,t.update.expression)}}finally{e.state.loopDepth--}let l=_(r,i,a);return j(e,l,t.redirections)}async function cr(e,t,s=""){let n="",r="",i=0,a=0,o=s;for(let f of t.redirections)if((f.operator==="<<"||f.operator==="<<-")&&f.target.type==="HereDoc"){let c=f.target,u=await I(e,c.content);c.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=f),i}async function wr(e,t){let s={},n="";for(let r of t.assignments){let i=r.name;if(r.array){let c=await Ui(e,t,i,r.array,r.append,s);if(c.error)return{continueToNext:!1,xtraceOutput:n,tempAssignments:s,error:c.error};if(n+=c.xtraceOutput,c.continueToNext)continue}let a=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 c=await Xi(e,t,l[1],l[2],a,r.append,s);if(c.error)return{continueToNext:!1,xtraceOutput:n,tempAssignments:s,error:c.error};if(c.continueToNext)continue}let f=await Qi(e,t,i,a,r.append,s);if(f.error)return{continueToNext:!1,xtraceOutput:n,tempAssignments:s,error:f.error};n+=f.xtraceOutput,f.continueToNext}return{continueToNext:!1,xtraceOutput:n,tempAssignments:s}}async function Ui(e,t,s,n,r,i){let a="";if(/\[.+\]$/.test(s))return{continueToNext:!1,xtraceOutput:"",error:_("",`bash: ${s}: cannot assign list to array member
|
|
641
|
-
`,1)};if(oe(e,s)){let c=Us(e,s);if(c===void 0||c==="")throw new z(1,"","");let u
|
|
642
|
-
`,1)}}if(
|
|
641
|
+
`,1)};if(oe(e,s)){let c=Us(e,s);if(c===void 0||c==="")throw new z(1,"","");let u=$e(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(Ne(e,s)){if(t.name)return a+=`bash: ${s}: readonly variable
|
|
643
643
|
`,{continueToNext:!0,xtraceOutput:a};let c=K(e,s);if(c)return{continueToNext:!1,xtraceOutput:"",error:c}}let o=e.state.associativeArrays?.has(s),l=qi(n),f=()=>{let c=`${s}_`;for(let u of Object.keys(e.state.env))u.startsWith(c)&&!u.includes("__")&&delete e.state.env[u];delete e.state.env[s]};if(o&&l?await Zi(e,t,s,n,r,f,c=>{a+=c}):l?await Gi(e,s,n,r,f):await Ki(e,s,n,r,f),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:a}}function qi(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 Zi(e,t,s,n,r,i,a){let o=[];for(let l of n){let f=It(l);if(f){let{key:c,valueParts:u,append:d}=f,h;u.length>0?h=await I(e,{type:"Word",parts:u}):h="",h=B(e,h),o.push({type:"keyed",key:c,value:h,append:d})}else{let c=await I(e,l);o.push({type:"invalid",expandedValue:c})}}r||i();for(let l of o)if(l.type==="keyed")if(l.append){let f=e.state.env[`${s}_${l.key}`]??"";e.state.env[`${s}_${l.key}`]=f+l.value}else e.state.env[`${s}_${l.key}`]=l.value;else{let f=t.line??e.state.currentLine??1;a(`bash: line ${f}: ${s}: ${l.expandedValue}: must use subscript when assigning associative array
|
|
644
|
-
`)}}async function Gi(e,t,s,n,r){let i=[];for(let o of s){let l=It(o);if(l){let{key:f,valueParts:c,append:u}=l,d;c.length>0?d=await I(e,{type:"Word",parts:c}):d="",d=B(e,d),i.push({type:"keyed",indexExpr:f,value:d,append:u})}else{let f=await pe(e,o);i.push({type:"non-keyed",values:f.values})}}n||r();let a=0;for(let o of i)if(o.type==="keyed"){let l;try{let f=new M,c=q(f,o.indexExpr);l=await V(e,c.expression,!1)}catch{if(/^-?\d+$/.test(o.indexExpr))l=Number.parseInt(o.indexExpr,10);else{let f=e.state.env[o.indexExpr];l=f?Number.parseInt(f,10):0,Number.isNaN(l)&&(l=0)}}if(o.append){let f=e.state.env[`${t}_${l}`]??"";e.state.env[`${t}_${l}`]=f+o.value}else e.state.env[`${t}_${l}`]=o.value;a=l+1}else for(let l of o.values)e.state.env[`${t}_${a++}`]=l}async function Ki(e,t,s,n,r){let i=[];for(let o of s){let l=await pe(e,o);i.push(...l.values)}let a=0;if(n){let o=fe(e,t);if(o.length>0)a=Math.max(...o.map(([f])=>typeof f=="number"?f: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],a=1}}else r();for(let o=0;o<i.length;o++)e.state.env[`${t}_${a+o}`]=i[o];n||(e.state.env[`${t}__length`]=String(i.length))}async function Xi(e,t,s,n,r,i,a){let o=s;if(oe(e,s)){let u
|
|
645
|
-
`,1)};o=u}}if(
|
|
644
|
+
`)}}async function Gi(e,t,s,n,r){let i=[];for(let o of s){let l=It(o);if(l){let{key:f,valueParts:c,append:u}=l,d;c.length>0?d=await I(e,{type:"Word",parts:c}):d="",d=B(e,d),i.push({type:"keyed",indexExpr:f,value:d,append:u})}else{let f=await pe(e,o);i.push({type:"non-keyed",values:f.values})}}n||r();let a=0;for(let o of i)if(o.type==="keyed"){let l;try{let f=new M,c=q(f,o.indexExpr);l=await V(e,c.expression,!1)}catch{if(/^-?\d+$/.test(o.indexExpr))l=Number.parseInt(o.indexExpr,10);else{let f=e.state.env[o.indexExpr];l=f?Number.parseInt(f,10):0,Number.isNaN(l)&&(l=0)}}if(o.append){let f=e.state.env[`${t}_${l}`]??"";e.state.env[`${t}_${l}`]=f+o.value}else e.state.env[`${t}_${l}`]=o.value;a=l+1}else for(let l of o.values)e.state.env[`${t}_${a++}`]=l}async function Ki(e,t,s,n,r){let i=[];for(let o of s){let l=await pe(e,o);i.push(...l.values)}let a=0;if(n){let o=fe(e,t);if(o.length>0)a=Math.max(...o.map(([f])=>typeof f=="number"?f: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],a=1}}else r();for(let o=0;o<i.length;o++)e.state.env[`${t}_${a+o}`]=i[o];n||(e.state.env[`${t}__length`]=String(i.length))}async function Xi(e,t,s,n,r,i,a){let o=s;if(oe(e,s)){let u=$e(e,s);if(u&&u!==s){if(u.includes("["))return{continueToNext:!1,xtraceOutput:"",error:_("",`bash: \`${u}': not a valid identifier
|
|
645
|
+
`,1)};o=u}}if(Ne(e,o)){if(t.name)return{continueToNext:!0,xtraceOutput:""};let u=K(e,o);if(u)return{continueToNext:!1,xtraceOutput:"",error:u}}let l=e.state.associativeArrays?.has(o),f;if(l)f=await vr(e,o,n);else{let u=await Yi(e,o,n);if(u.error)return{continueToNext:!1,xtraceOutput:"",error:u.error};f=`${o}_${u.index}`}let c=i?(e.state.env[f]||"")+r:r;if(t.name)a[f]=e.state.env[f],e.state.env[f]=c;else{let u=xe(e,o);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(f)||d.set(f,e.state.env[f])}e.state.env[f]=c}return{continueToNext:!0,xtraceOutput:""}}async function vr(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),a=new M().parseWordFromString(r,!0,!1);n=await I(e,a)}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 Yi(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,a=q(i,n);r=await V(e,a.expression,!1)}catch(i){if(i instanceof Pe){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 a=e.state.env[s];r=a?Number.parseInt(a,10):0}Number.isNaN(r)&&(r=0)}if(r<0){let i=fe(e,t);if(i.length===0){let o=e.state.currentLine;return{index:0,error:_("",`bash: line ${o}: ${t}[${s}]: bad array subscript
|
|
647
647
|
`,1)}}if(r=Math.max(...i.map(([o])=>typeof o=="number"?o:0))+1+r,r<0){let o=e.state.currentLine;return{index:0,error:_("",`bash: line ${o}: ${t}[${s}]: bad array subscript
|
|
648
648
|
`,1)}}}return{index:r}}async function Qi(e,t,s,n,r,i){let a="",o=s,l=null;if(oe(e,s)){let u=qs(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:""};o=u;let d=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);d&&(l={arrayName:d[1],subscriptExpr:d[2]},o=d[1])}if(
|
|
650
|
-
`,{continueToNext:!0,xtraceOutput:a};let u=K(e,o);if(u)return{continueToNext:!1,xtraceOutput:"",error:u}}let f;if(Be(e,o))try{let u=new M;if(r){let h=`(${e.state.env[o]||"0"}) + (${n})`,m=q(u,h);f=String(await V(e,m.expression))}else{let d=q(u,n);f=String(await V(e,d.expression))}}catch{f="0"}else{let{isArray:u}=await import("./chunks/expansion-BOR3ELLC.js"),d=u(e,o)?`${o}_0`:o;f=r?(e.state.env[d]||"")+n:n}f=Le(e,o,f),a+=await yr(e,o,f);let c=o;if(l)c=await Ji(e,l);else{let{isArray:u}=await import("./chunks/expansion-BOR3ELLC.js");u(e,o)&&(c=`${o}_0`)}return t.name?(i[c]=e.state.env[c],e.state.env[c]=f):(e.state.env[c]=f,e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(o)),e.state.tempEnvBindings?.some(u=>u.has(o))&&(e.state.mutatedTempEnvVars=e.state.mutatedTempEnvVars||new Set,e.state.mutatedTempEnvVars.add(o))),{continueToNext:!1,xtraceOutput:a}}async function Ji(e,t){let{arrayName:s,subscriptExpr:n}=t;if(e.state.associativeArrays?.has(s))return vr(e,s,n);let i;if(/^-?\d+$/.test(n))i=Number.parseInt(n,10);else{try{let a=new M,o=q(a,n);i=await V(e,o.expression,!1)}catch{let a=e.state.env[n];i=a?Number.parseInt(a,10):0}Number.isNaN(i)&&(i=0)}if(i<0){let a=fe(e,s);a.length>0&&(i=Math.max(...a.map(l=>l[0]))+1+i)}return`${s}_${i}`}async function br(e,t,s,n){let r=await ye(e,t.redirections);if(r)return r;let i={...e.state.env},a=e.state.cwd,o={...e.state.options},l=e.state.localScopes,f=e.state.localVarStack,c=e.state.localVarDepth,u=e.state.fullyUnsetLocals;if(e.state.localScopes=l.map(v=>new Map(v)),f){e.state.localVarStack=new Map;for(let[v,C]of f.entries())e.state.localVarStack.set(v,C.map(k=>({...k})))}c&&(e.state.localVarDepth=new Map(c)),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=a,e.state.options=o,e.state.localScopes=l,e.state.localVarStack=f,e.state.localVarDepth=c,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 te)throw v;if(v instanceof
|
|
649
|
+
`,1)};if(u===null)return{continueToNext:!0,xtraceOutput:""};o=u;let d=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);d&&(l={arrayName:d[1],subscriptExpr:d[2]},o=d[1])}if(Ne(e,o)){if(t.name)return a+=`bash: ${o}: readonly variable
|
|
650
|
+
`,{continueToNext:!0,xtraceOutput:a};let u=K(e,o);if(u)return{continueToNext:!1,xtraceOutput:"",error:u}}let f;if(Be(e,o))try{let u=new M;if(r){let h=`(${e.state.env[o]||"0"}) + (${n})`,m=q(u,h);f=String(await V(e,m.expression))}else{let d=q(u,n);f=String(await V(e,d.expression))}}catch{f="0"}else{let{isArray:u}=await import("./chunks/expansion-BOR3ELLC.js"),d=u(e,o)?`${o}_0`:o;f=r?(e.state.env[d]||"")+n:n}f=Le(e,o,f),a+=await yr(e,o,f);let c=o;if(l)c=await Ji(e,l);else{let{isArray:u}=await import("./chunks/expansion-BOR3ELLC.js");u(e,o)&&(c=`${o}_0`)}return t.name?(i[c]=e.state.env[c],e.state.env[c]=f):(e.state.env[c]=f,e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(o)),e.state.tempEnvBindings?.some(u=>u.has(o))&&(e.state.mutatedTempEnvVars=e.state.mutatedTempEnvVars||new Set,e.state.mutatedTempEnvVars.add(o))),{continueToNext:!1,xtraceOutput:a}}async function Ji(e,t){let{arrayName:s,subscriptExpr:n}=t;if(e.state.associativeArrays?.has(s))return vr(e,s,n);let i;if(/^-?\d+$/.test(n))i=Number.parseInt(n,10);else{try{let a=new M,o=q(a,n);i=await V(e,o.expression,!1)}catch{let a=e.state.env[n];i=a?Number.parseInt(a,10):0}Number.isNaN(i)&&(i=0)}if(i<0){let a=fe(e,s);a.length>0&&(i=Math.max(...a.map(l=>l[0]))+1+i)}return`${s}_${i}`}async function br(e,t,s,n){let r=await ye(e,t.redirections);if(r)return r;let i={...e.state.env},a=e.state.cwd,o={...e.state.options},l=e.state.localScopes,f=e.state.localVarStack,c=e.state.localVarDepth,u=e.state.fullyUnsetLocals;if(e.state.localScopes=l.map(v=>new Map(v)),f){e.state.localVarStack=new Map;for(let[v,C]of f.entries())e.state.localVarStack.set(v,C.map(k=>({...k})))}c&&(e.state.localVarDepth=new Map(c)),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=a,e.state.options=o,e.state.localScopes=l,e.state.localVarStack=f,e.state.localVarDepth=c,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 te)throw v;if(v instanceof be){b+=v.stdout,$+=v.stderr;let k=_(b,$,0);return j(e,k,t.redirections)}if(v instanceof re||v instanceof ie){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 se){b+=v.stdout,$+=v.stderr;let k=_(b,$,v.exitCode);return j(e,k,t.redirections)}if(v instanceof ae){let k=_(b+v.stdout,$+v.stderr,v.exitCode);return j(e,k,t.redirections)}let C=_(b,`${$}${le(v)}
|
|
651
651
|
`,1);return j(e,C,t.redirections)}y();let w=_(b,$,N);return j(e,w,t.redirections)}async function Er(e,t,s,n){let r="",i="",a=0,o=await bt(e,t.redirections);if(o)return o;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=f;let c=_(r,i,a);return j(e,c,t.redirections)}async function $r(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 a={...e.state.env},o=e.state.cwd,l={...e.state.options},f=e.state.loopDepth,c=e.state.parentHasLoopContext,u=e.state.lastArg,d=e.state.bashPid,h=e.state.groupStdin,m=e.state.currentSource;e.state.parentHasLoopContext=f>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=a,e.state.cwd=o,e.state.options=l,e.state.loopDepth=f,e.state.parentHasLoopContext=c,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 te)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 a=this.ctx.state.env[i];a!==void 0&&(r[i]=a)}return r}async executeScript(t){let s="",n="",r=0;for(let i of t.statements)try{let a=await this.executeStatement(i);s+=a.stdout,n+=a.stderr,r=a.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r)}catch(a){if(a instanceof z)throw a.prependOutput(s,n),a;if(a instanceof ce)return s+=a.stdout,n+=a.stderr,r=a.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r),{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}};if(a instanceof te)throw a;if(a instanceof ae)return s+=a.stdout,n+=a.stderr,r=a.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r),{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}};if(a instanceof Ls)return s+=a.stdout,n+=a.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(a instanceof Ye)return s+=a.stdout,n+=a.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(a 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 a=this.ctx.state.env[i];a!==void 0&&(r[i]=a)}return r}async executeScript(t){let s="",n="",r=0;for(let i of t.statements)try{let a=await this.executeStatement(i);s+=a.stdout,n+=a.stderr,r=a.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r)}catch(a){if(a instanceof z)throw a.prependOutput(s,n),a;if(a instanceof ce)return s+=a.stdout,n+=a.stderr,r=a.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r),{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}};if(a instanceof te)throw a;if(a instanceof ae)return s+=a.stdout,n+=a.stderr,r=a.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r),{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}};if(a instanceof Ls)return s+=a.stdout,n+=a.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(a instanceof Ye)return s+=a.stdout,n+=a.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(a instanceof Pe){s+=a.stdout,n+=a.stderr,r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r);continue}if(a instanceof Ws){s+=a.stdout,n+=a.stderr,r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r);continue}if(a instanceof re||a instanceof ie){if(this.ctx.state.loopDepth>0)throw a.prependOutput(s,n),a;s+=a.stdout,n+=a.stderr;continue}throw a instanceof se&&a.prependOutput(s,n),a}return{stdout:s,stderr:n,exitCode:r,env:{...this.ctx.state.env}}}async executeUserScript(t,s,n=""){return $r(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&&we(`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,a=!1;for(let f=0;f<t.pipelines.length;f++){let c=t.pipelines[f],u=f>0?t.operators[f-1]:null;if(u==="&&"&&r!==0||u==="||"&&r===0)continue;let d=await this.executePipeline(c);s+=d.stdout,n+=d.stderr,r=d.exitCode,i=f,a=c.negated,this.ctx.state.lastExitCode=r,this.ctx.state.env["?"]=String(r)}let o=i<t.pipelines.length-1,l=this.ctx.state.errexitSafe;if(this.ctx.state.errexitSafe=o||a||l,this.ctx.state.options.errexit&&r!==0&&i===t.pipelines.length-1&&!a&&!this.ctx.state.inCondition&&!l)throw new ae(r,s,n);return _(s,n,r)}async executePipeline(t){return gr(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 ar(this.ctx,t);case"For":return or(this.ctx,t);case"CStyleFor":return lr(this.ctx,t);case"While":return cr(this.ctx,t,s);case"Until":return fr(this.ctx,t);case"Case":return ur(this.ctx,t);case"Subshell":return this.executeSubshell(t,s);case"Group":return this.executeGroup(t,s);case"FunctionDef":return Nn(this.ctx,t);case"ArithmeticCommand":return this.executeArithmeticCommand(t);case"ConditionalCommand":return this.executeConditionalCommand(t);default:return L}}async executeSimpleCommand(t,s){try{return await this.executeSimpleCommandInner(t,s)}catch(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 wr(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 ye(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 a=t.name&&Is(t.name,["local","declare","typeset","export","readonly"]),o=Object.keys(r);if(o.length>0&&!a){this.ctx.state.tempExportedVars=this.ctx.state.tempExportedVars||new Set;for(let y of o)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 f=-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=dr(C);k&&(s=k.content.slice(k.position),f=v)}else C.startsWith("__file__:")||C.startsWith("__file_append__:")||(s=C)}}}let c=await I(this.ctx,t.name),u=[],d=[];if(Is(t.name,["local","declare","typeset","export","readonly"])&&(c==="local"||c==="declare"||c==="typeset"||c==="export"||c==="readonly"))for(let y of t.args){let w=await un(this.ctx,y);if(w)u.push(w),d.push(!0);else{let v=await dn(this.ctx,y);if(v!==null)u.push(v),d.push(!0);else{let C=await pe(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 pe(this.ctx,y);for(let v of w.values)u.push(v),d.push(w.quoted)}if(!c){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,f)}return _("","",this.ctx.state.lastExitCode)}return S(`bash: : command not found
|
|
665
665
|
`,127)}if(c==="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 mr(this.ctx,c,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(c,u,d,s,!1,!1,f)}catch(y){if(y instanceof re||y instanceof ie)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((c==="declare"||c==="local"||c==="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=c;let $=Cn(c)&&c!=="unset"&&c!=="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,a=!1,o=-1){let l={ctx:this.ctx,runCommand:(c,u,d,h,m,p,g)=>this.runCommand(c,u,d,h,m,p,g),buildExportedEnv:()=>this.buildExportedEnv(),executeUserScript:(c,u,d)=>this.executeUserScript(c,u,d)},f=await rr(l,t,s,n,r,i,a,o);return f!==null?f:ir(l,t,s,r,a)}aliasExpansionStack=new Set;expandAlias(t){return Vt(this.ctx.state,t,this.aliasExpansionStack)}async findCommandInPath(t){return Pt(this.ctx,t)}async executeSubshell(t,s=""){return br(this.ctx,t,s,n=>this.executeStatement(n))}async executeGroup(t,s=""){return Er(this.ctx,t,s,n=>this.executeStatement(n))}async executeArithmeticCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await ye(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 ye(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 ye(this.ctx,t.redirections);if(s)return s;try{let n=await _e(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 Pe?1:2,i=S(`bash: conditional expression: ${n.message}
|
|
668
|
+
`,r);return j(this.ctx,i,t.redirections)}}};var ve={maxCallDepth:100,maxCommandCount:1e4,maxLoopIterations:1e4,maxAwkIterations:1e4,maxSedIterations:1e4,maxJqIterations:1e4,maxSqliteTimeoutMs:5e3,maxPythonTimeoutMs:3e4};function Sr(e){return e?{maxCallDepth:e.maxCallDepth??ve.maxCallDepth,maxCommandCount:e.maxCommandCount??ve.maxCommandCount,maxLoopIterations:e.maxLoopIterations??ve.maxLoopIterations,maxAwkIterations:e.maxAwkIterations??ve.maxAwkIterations,maxSedIterations:e.maxSedIterations??ve.maxSedIterations,maxJqIterations:e.maxJqIterations??ve.maxJqIterations,maxSqliteTimeoutMs:e.maxSqliteTimeoutMs??ve.maxSqliteTimeoutMs,maxPythonTimeoutMs:e.maxPythonTimeoutMs??ve.maxPythonTimeoutMs}:{...ve}}function Ar(e){try{let t=new URL(e);return{origin:t.origin,pathname:t.pathname,href:t.href}}catch{return null}}function ea(e){let t=Ar(e);return t?{origin:t.origin,pathPrefix:t.pathname}:null}function ta(e,t){let s=Ar(e);if(!s)return!1;let n=ea(t);return!n||s.origin!==n.origin?!1:n.pathPrefix==="/"||n.pathPrefix===""?!0:s.pathname.startsWith(n.pathPrefix)}function Ts(e,t){return!t||t.length===0?!1:t.some(s=>ta(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 sa=20,na=3e4,ra=["GET","HEAD"],ia=new Set(["GET","HEAD","OPTIONS"]),aa=new Set([301,302,303,307,308]);function xs(e){let t=e.maxRedirects??sa,s=e.timeoutMs??na,n=e.dangerouslyAllowFullInternetAccess?["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"]:e.allowedMethods??ra;function r(o){if(!e.dangerouslyAllowFullInternetAccess&&!Ts(o,e.allowedUrlPrefixes??[]))throw new Ge(o)}function i(o){if(e.dangerouslyAllowFullInternetAccess)return;let l=o.toUpperCase();if(!n.includes(l))throw new kt(l,n)}async function a(o,l={}){let f=l.method?.toUpperCase()??"GET";r(o),i(f);let c=o,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:f,headers:l.headers,signal:m.signal,redirect:"manual"};l.body&&!ia.has(f)&&(g.body=l.body);let b=await fetch(c,g);if(aa.has(b.status)&&d){let $=b.headers.get("location");if(!$)return await _r(b,c);let N=new URL($,c).href;if(!e.dangerouslyAllowFullInternetAccess&&!Ts(N,e.allowedUrlPrefixes??[]))throw new Xe(N);if(u++,u>t)throw new Ke(t);c=N;continue}return await _r(b,c)}finally{clearTimeout(p)}}}return a}async function _r(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=Sr({...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=xs(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=Ft(this.state.options),this.state.env.BASHOPTS=Mt(this.state.shoptOptions),rn(s,this.useDefaultLayout),n!=="/"&&s instanceof Me)try{s.mkdirSync(n,{recursive:!0})}catch{}for(let i of en(t.commands))this.registerCommand(i);if(t.network)for(let i of tn())this.registerCommand(i);if(t.customCommands)for(let i of t.customCommands)sn(i)?this.registerCommand(nn(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 a={...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},o=t;s?.rawScript||(o=oa(t));try{let l=de(o),f={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(f,a).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 ce)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 a={...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},o=t;s?.rawScript||(o=oa(t));try{let l=de(o),f={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(f,a).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 ce)return this.logResult({stdout:l.stdout,stderr:l.stderr,exitCode:l.exitCode,env:{...this.state.env,...s?.env}});if(l instanceof Pe)return this.logResult({stdout:l.stdout,stderr:l.stderr,exitCode:1,env:{...this.state.env,...s?.env}});if(l instanceof te)return this.logResult({stdout:l.stdout,stderr:l.stderr,exitCode:te.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 zs)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 oa(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 a=i.trimStart();s.push(a);let o=/<<(-?)\s*(['"]?)([\w-]+)\2/g;for(let l of a.matchAll(o)){let f=l[1]==="-",c=l[3];n.push({delimiter:c,stripTabs:f})}}return s.join(`
|
|
677
|
-
`)}import*as Z from"node:fs";import*as We from"node:path";var la="/home/user/project",Dt=class{root;mountPoint;readOnly;memory=new Map;deleted=new Set;constructor(t){this.root=We.resolve(t.root);let s=t.mountPoint??la;if(this.mountPoint=s==="/"?"/":s.replace(/\/+$/,""),!this.mountPoint.startsWith("/"))throw new Error(`Mount point must be an absolute path: ${s}`);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 a of r)i+=`/${a}`,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=We.join(this.root,n),i=We.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=$e(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 a=this.resolveSymlink(n,r.target);return this.readFileBuffer(a,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 a=await Z.promises.lstat(i);if(a.isSymbolicLink()){let l=await Z.promises.readlink(i),f=this.resolveSymlink(n,l);return this.readFileBuffer(f,s)}if(a.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);let o=await Z.promises.readFile(i);return new Uint8Array(o)}catch(a){throw a.code==="ENOENT"?new Error(`ENOENT: no such file or directory, open '${t}'`):a}}async writeFile(t,s,n){this.assertWritable(`write '${t}'`);let r=this.normalizePath(t);this.ensureParentDirs(r);let i=$e(n),a=De(s,i);this.memory.set(r,{type:"file",content:a,mode:420,mtime:new Date}),this.deleted.delete(r)}async appendFile(t,s,n){this.assertWritable(`append '${t}'`);let r=this.normalizePath(t),i=$e(n),a=De(s,i),o;try{o=await this.readFileBuffer(r)}catch{o=new Uint8Array(0)}let l=new Uint8Array(o.length+a.length);l.set(o),l.set(a,o.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 o=this.resolveSymlink(n,r.target);return this.stat(o,s)}let a=0;return r.type==="file"&&(a=r.content.length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:a,mtime:r.mtime}}let i=this.toRealPath(n);if(!i)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);try{let a=await Z.promises.stat(i);return{isFile:a.isFile(),isDirectory:a.isDirectory(),isSymbolicLink:!1,mode:a.mode,size:a.size,mtime:a.mtime}}catch(a){throw a.code==="ENOENT"?new Error(`ENOENT: no such file or directory, stat '${t}'`):a}}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 o of this.deleted)if(o.startsWith(i)){let l=o.slice(i.length),f=l.split("/")[0];f&&!l.includes("/",f.length)&&r.add(f)}for(let[o,l]of this.memory)if(o!==s&&o.startsWith(i)){let f=o.slice(i.length),c=f.split("/")[0];c&&!r.has(c)&&!f.includes("/",1)&&n.set(c,{name:c,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}let a=this.toRealPath(s);if(a)try{let o=await Z.promises.readdir(a,{withFileTypes:!0});for(let l of o)!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(o){if(o.code==="ENOENT"){if(!this.memory.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`)}else if(o.code!=="ENOTDIR")throw o}return n}async resolveForReaddir(t,s=!1){let n=this.normalizePath(t),r=new Set,i=s,a=this.memory.get(n);for(;a&&a.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,a.target),a=this.memory.get(n)}if(a)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 c=await Z.promises.readlink(l),u=this.resolveSymlink(n,c);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,a)=>i<a?-1:i>a?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,a)=>i.name<a.name?-1:i.name>a.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 a=await this.readdir(n);if(a.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let o of a){let l=n==="/"?`/${o}`:`${n}/${o}`;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 o=await this.stat(r);if(o.isFile){let l=await this.readFileBuffer(r);await this.writeFile(i,l)}else if(o.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 f of l){let c=r==="/"?`/${f}`:`${r}/${f}`,u=i==="/"?`/${f}`:`${i}/${f}`;await this.cp(c,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 a=t==="/"?`/${i}`:`${t}/${i}`;if(this.deleted.has(a))continue;s.add(a);let o=We.join(n,i);Z.statSync(o).isDirectory()&&this.scanRealFs(a,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 a=await this.stat(n);if(a.isFile){let o=await this.readFileBuffer(n);this.memory.set(n,{type:"file",content:o,mode:s,mtime:new Date})}else a.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 a=await this.stat(n);if(!a.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:a.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 o=>{let l=o==="/"?[]:o.slice(1).split("/"),f="";for(let c of l){if(f=`${f}/${c}`,n.has(f))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(f))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let u=this.memory.get(f),d=0,h=40;for(;u&&u.type==="symlink"&&d<h;){if(n.add(f),f=this.resolveSymlink(f,u.target),d++,n.has(f))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(f))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);u=this.memory.get(f)}if(d>=h)throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(!u){let m=this.toRealPath(f);if(m)try{if((await Z.promises.lstat(m)).isSymbolicLink()){let g=await Z.promises.readlink(m);return n.add(f),f=this.resolveSymlink(f,g),r(f)}}catch(p){throw p.code==="ENOENT"?new Error(`ENOENT: no such file or directory, realpath '${t}'`):p}}}return f||"/"},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 a=this.memory.get(r);if(a){a.mtime=n;return}let o=await this.stat(r);if(o.isFile){let l=await this.readFileBuffer(r);this.memory.set(r,{type:"file",content:l,mode:o.mode,mtime:n})}else o.isDirectory&&this.memory.set(r,{type:"directory",mode:o.mode,mtime:n})}};var Y={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",cyan:"\x1B[36m"},Rs=class{env;rl;running=!0;history=[];isInteractive;constructor(t={}){let s=process.cwd(),n=new Dt({root:s,mountPoint:"/"});this.env=new Ot({fs:n,cwd:t.cwd||"/",env:{HOME:"/",USER:"user",SHELL:"/bin/bash",TERM:"xterm-256color",...t.env},network:t.network!==!1?{dangerouslyAllowFullInternetAccess:!0}:void 0}),this.isInteractive=process.stdin.isTTY===!0,this.rl=Pr.createInterface({input:process.stdin,output:process.stdout,terminal:this.isInteractive}),this.rl.on("SIGINT",()=>{process.stdout.write(`^C
|
|
677
|
+
`)}import*as Z from"node:fs";import*as We from"node:path";var la="/home/user/project",Dt=class{root;mountPoint;readOnly;memory=new Map;deleted=new Set;constructor(t){this.root=We.resolve(t.root);let s=t.mountPoint??la;if(this.mountPoint=s==="/"?"/":s.replace(/\/+$/,""),!this.mountPoint.startsWith("/"))throw new Error(`Mount point must be an absolute path: ${s}`);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 a of r)i+=`/${a}`,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=We.join(this.root,n),i=We.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=Ae(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 a=this.resolveSymlink(n,r.target);return this.readFileBuffer(a,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 a=await Z.promises.lstat(i);if(a.isSymbolicLink()){let l=await Z.promises.readlink(i),f=this.resolveSymlink(n,l);return this.readFileBuffer(f,s)}if(a.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);let o=await Z.promises.readFile(i);return new Uint8Array(o)}catch(a){throw a.code==="ENOENT"?new Error(`ENOENT: no such file or directory, open '${t}'`):a}}async writeFile(t,s,n){this.assertWritable(`write '${t}'`);let r=this.normalizePath(t);this.ensureParentDirs(r);let i=Ae(n),a=De(s,i);this.memory.set(r,{type:"file",content:a,mode:420,mtime:new Date}),this.deleted.delete(r)}async appendFile(t,s,n){this.assertWritable(`append '${t}'`);let r=this.normalizePath(t),i=Ae(n),a=De(s,i),o;try{o=await this.readFileBuffer(r)}catch{o=new Uint8Array(0)}let l=new Uint8Array(o.length+a.length);l.set(o),l.set(a,o.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 o=this.resolveSymlink(n,r.target);return this.stat(o,s)}let a=0;return r.type==="file"&&(a=r.content.length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:a,mtime:r.mtime}}let i=this.toRealPath(n);if(!i)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);try{let a=await Z.promises.stat(i);return{isFile:a.isFile(),isDirectory:a.isDirectory(),isSymbolicLink:!1,mode:a.mode,size:a.size,mtime:a.mtime}}catch(a){throw a.code==="ENOENT"?new Error(`ENOENT: no such file or directory, stat '${t}'`):a}}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 o of this.deleted)if(o.startsWith(i)){let l=o.slice(i.length),f=l.split("/")[0];f&&!l.includes("/",f.length)&&r.add(f)}for(let[o,l]of this.memory)if(o!==s&&o.startsWith(i)){let f=o.slice(i.length),c=f.split("/")[0];c&&!r.has(c)&&!f.includes("/",1)&&n.set(c,{name:c,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}let a=this.toRealPath(s);if(a)try{let o=await Z.promises.readdir(a,{withFileTypes:!0});for(let l of o)!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(o){if(o.code==="ENOENT"){if(!this.memory.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`)}else if(o.code!=="ENOTDIR")throw o}return n}async resolveForReaddir(t,s=!1){let n=this.normalizePath(t),r=new Set,i=s,a=this.memory.get(n);for(;a&&a.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,a.target),a=this.memory.get(n)}if(a)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 c=await Z.promises.readlink(l),u=this.resolveSymlink(n,c);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,a)=>i<a?-1:i>a?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,a)=>i.name<a.name?-1:i.name>a.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 a=await this.readdir(n);if(a.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let o of a){let l=n==="/"?`/${o}`:`${n}/${o}`;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 o=await this.stat(r);if(o.isFile){let l=await this.readFileBuffer(r);await this.writeFile(i,l)}else if(o.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 f of l){let c=r==="/"?`/${f}`:`${r}/${f}`,u=i==="/"?`/${f}`:`${i}/${f}`;await this.cp(c,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 a=t==="/"?`/${i}`:`${t}/${i}`;if(this.deleted.has(a))continue;s.add(a);let o=We.join(n,i);Z.statSync(o).isDirectory()&&this.scanRealFs(a,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 a=await this.stat(n);if(a.isFile){let o=await this.readFileBuffer(n);this.memory.set(n,{type:"file",content:o,mode:s,mtime:new Date})}else a.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 a=await this.stat(n);if(!a.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:a.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 o=>{let l=o==="/"?[]:o.slice(1).split("/"),f="";for(let c of l){if(f=`${f}/${c}`,n.has(f))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(f))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let u=this.memory.get(f),d=0,h=40;for(;u&&u.type==="symlink"&&d<h;){if(n.add(f),f=this.resolveSymlink(f,u.target),d++,n.has(f))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(f))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);u=this.memory.get(f)}if(d>=h)throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(!u){let m=this.toRealPath(f);if(m)try{if((await Z.promises.lstat(m)).isSymbolicLink()){let g=await Z.promises.readlink(m);return n.add(f),f=this.resolveSymlink(f,g),r(f)}}catch(p){throw p.code==="ENOENT"?new Error(`ENOENT: no such file or directory, realpath '${t}'`):p}}}return f||"/"},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 a=this.memory.get(r);if(a){a.mtime=n;return}let o=await this.stat(r);if(o.isFile){let l=await this.readFileBuffer(r);this.memory.set(r,{type:"file",content:l,mode:o.mode,mtime:n})}else o.isDirectory&&this.memory.set(r,{type:"directory",mode:o.mode,mtime:n})}};var Y={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",cyan:"\x1B[36m"},Rs=class{env;rl;running=!0;history=[];isInteractive;constructor(t={}){let s=process.cwd(),n=new Dt({root:s,mountPoint:"/"});this.env=new Ot({fs:n,cwd:t.cwd||"/",env:{HOME:"/",USER:"user",SHELL:"/bin/bash",TERM:"xterm-256color",...t.env},network:t.network!==!1?{dangerouslyAllowFullInternetAccess:!0}:void 0}),this.isInteractive=process.stdin.isTTY===!0,this.rl=Pr.createInterface({input:process.stdin,output:process.stdout,terminal:this.isInteractive}),this.rl.on("SIGINT",()=>{process.stdout.write(`^C
|
|
678
678
|
`),this.prompt()}),process.stdin.isTTY&&this.rl.on("close",()=>{this.running=!1,console.log(`
|
|
679
679
|
Goodbye!`),process.exit(0)})}syncHistory(){let t=this.env.getEnv();t.BASH_HISTORY=JSON.stringify(this.history)}getPrompt(){let t=this.env.getCwd(),s=this.env.getEnv().HOME||"/home/user",n=t;return t===s?n="~":t.startsWith(`${s}/`)&&(n=`~${t.slice(s.length)}`),`${Y.green}${Y.bold}user@virtual${Y.reset}:${Y.blue}${Y.bold}${n}${Y.reset}$ `}async executeCommand(t){let s=t.trim();if(s){if(this.history.push(s),s==="exit"||s.startsWith("exit ")){let n=s.split(/\s+/),r=n[1]?parseInt(n[1],10):0;console.log("exit"),process.exit(r)}this.syncHistory();try{let n=await this.env.exec(s);n.stdout&&process.stdout.write(n.stdout),n.stderr&&process.stderr.write(`${Y.red}${n.stderr}${Y.reset}`)}catch(n){console.error(`${Y.red}Error: ${le(n)}${Y.reset}`)}}}printWelcome(){console.log(`
|
|
680
680
|
${Y.cyan}${Y.bold}\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557
|