just-bash 2.3.1 → 2.3.3

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.
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
- import{a as U,b as X,c as G,d as ee,e as J,f as R,g as F,h as pe,i as z,j as oe,k as Be}from"./chunks/chunk-NWWB2XRE.js";import{a as Y}from"./chunks/chunk-4VDEBYW7.js";import"./chunks/chunk-KGOUQS5A.js";import*as zn from"node:fs";import*as Un from"node:readline";var ze=[{name:"echo",load:async()=>(await import("./chunks/echo-WSKTON6U.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-7TVSOZLU.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-HWUQKYUM.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-FSSC77F4.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-XJABRAUN.js")).mkdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-TSNAXMZ2.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-3DIKREF7.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-53KG2MCJ.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-VL3R4LAM.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-DYK37Z24.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-BES27CZT.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-OFU3HUEZ.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-UEQ7KMY5.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-L5HBHEEQ.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-L5HBHEEQ.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-L5HBHEEQ.js")).egrepCommand},{name:"sed",load:async()=>(await import("./chunks/sed-5LQMJYRJ.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-D2US2LMM.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-J5ARYV56.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-7JNZWE5D.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-CPIFQTKY.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-VCKWLT2T.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-P6UQXFKX.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-ESVATRDW.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-ZONJJZUK.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-YLLSNZZN.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-YLLSNZZN.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-PCMLRCRW.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-PCMLRCRW.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-G5C2J2OY.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-WIJC4RTG.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-UT3MT5UU.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-UT3MT5UU.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-MTQKMJJI.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-RJX7MYGG.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:"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-VGXAOUBA.js")).md5sumCommand},{name:"sha1sum",load:async()=>(await import("./chunks/sha1sum-BIUH233Z.js")).sha1sumCommand},{name:"sha256sum",load:async()=>(await import("./chunks/sha256sum-SUIK2MT2.js")).sha256sumCommand},{name:"file",load:async()=>(await import("./chunks/file-XMPFXMUJ.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-73KOOLC6.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:"od",load:async()=>(await import("./chunks/od-SLM7SRWU.js")).od},{name:"gzip",load:async()=>(await import("./chunks/gzip-MNCJB6OR.js")).gzipCommand},{name:"gunzip",load:async()=>(await import("./chunks/gzip-MNCJB6OR.js")).gunzipCommand},{name:"zcat",load:async()=>(await import("./chunks/gzip-MNCJB6OR.js")).zcatCommand}];(typeof __BROWSER__>"u"||!__BROWSER__)&&(ze.push({name:"yq",load:async()=>(await import("./chunks/yq-MF2SNFGL.js")).yqCommand}),ze.push({name:"xan",load:async()=>(await import("./chunks/xan-ASGSTJP4.js")).xanCommand}));var Gn=[{name:"curl",load:async()=>(await import("./chunks/curl-LCMREE7R.js")).curlCommand}],Hn=typeof __BROWSER__>"u"||!__BROWSER__?[{name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-6WCINK3O.js")).sqlite3Command}]:[],pr=new Map;function gt(t){return{name:t.name,async execute(e,n){let r=pr.get(t.name);return r||(r=await t.load(),pr.set(t.name,r)),r.execute(e,n)}}}function yr(t){return(t?ze.filter(n=>t.includes(n.name)):ze).map(gt)}function Er(){return Gn.map(gt)}function wr(){return Hn.map(gt)}function gr(t){return"load"in t&&typeof t.load=="function"}function Ar(t){let e=null;return{name:t.name,async execute(n,r){return e||(e=await t.load()),e.execute(n,r)}}}var Vn=new TextEncoder,qn=new TextDecoder;function Ae(t,e){if(t instanceof Uint8Array)return t;switch(e){case"base64":return Uint8Array.from(atob(t),n=>n.charCodeAt(0));case"hex":{let n=new Uint8Array(t.length/2);for(let r=0;r<t.length;r+=2)n[r/2]=parseInt(t.slice(r,r+2),16);return n}case"binary":case"latin1":return Uint8Array.from(t,n=>n.charCodeAt(0));default:return Vn.encode(t)}}function Ue(t,e){switch(e){case"base64":return btoa(String.fromCharCode(...t));case"hex":return Array.from(t).map(n=>n.toString(16).padStart(2,"0")).join("");case"binary":case"latin1":return String.fromCharCode(...t);default:return qn.decode(t)}}function ae(t){if(t!=null)return typeof t=="string"?t:t.encoding??void 0}var Ge=new TextEncoder;function jn(t){return typeof t=="object"&&t!==null&&!(t instanceof Uint8Array)&&"content"in t}var Pe=class{data=new Map;constructor(e){if(this.data.set("/",{type:"directory",mode:493,mtime:new Date}),e)for(let[n,r]of Object.entries(e))jn(r)?this.writeFileSync(n,r.content,void 0,{mode:r.mode,mtime:r.mtime}):this.writeFileSync(n,r)}normalizePath(e){if(!e||e==="/")return"/";let n=e.endsWith("/")&&e!=="/"?e.slice(0,-1):e;n.startsWith("/")||(n=`/${n}`);let r=n.split("/").filter(o=>o&&o!=="."),s=[];for(let o of r)o===".."?s.pop():s.push(o);return`/${s.join("/")}`||"/"}dirname(e){let n=this.normalizePath(e);if(n==="/")return"/";let r=n.lastIndexOf("/");return r===0?"/":n.slice(0,r)}ensureParentDirs(e){let n=this.dirname(e);n!=="/"&&(this.data.has(n)||(this.ensureParentDirs(n),this.data.set(n,{type:"directory",mode:493,mtime:new Date})))}writeFileSync(e,n,r,s){let o=this.normalizePath(e);this.ensureParentDirs(o);let i=ae(r),a=Ae(n,i);this.data.set(o,{type:"file",content:a,mode:s?.mode??420,mtime:s?.mtime??new Date})}async readFile(e,n){let r=await this.readFileBuffer(e),s=ae(n);return Ue(r,s)}async readFileBuffer(e){let n=this.normalizePath(e),r=this.data.get(n),s=n;if(!r)throw new Error(`ENOENT: no such file or directory, open '${e}'`);let o=new Set;for(;r&&r.type==="symlink";){if(o.has(s))throw new Error(`ELOOP: too many levels of symbolic links, open '${e}'`);o.add(s),s=this.resolveSymlink(s,r.target),r=this.data.get(s)}if(!r)throw new Error(`ENOENT: no such file or directory, open '${e}'`);if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);return r.content instanceof Uint8Array?r.content:Ge.encode(r.content)}async writeFile(e,n,r){this.writeFileSync(e,n,r)}async appendFile(e,n,r){let s=this.normalizePath(e),o=this.data.get(s);if(o&&o.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${e}'`);let i=ae(r),a=Ae(n,i);if(o?.type==="file"){let l=o.content instanceof Uint8Array?o.content:Ge.encode(o.content),c=new Uint8Array(l.length+a.length);c.set(l),c.set(a,l.length),this.data.set(s,{type:"file",content:c,mode:o.mode,mtime:new Date})}else this.writeFileSync(e,n,r)}async exists(e){return this.data.has(this.normalizePath(e))}async stat(e){let n=this.normalizePath(e),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);if(r.type==="symlink"){let o=this.resolveSymlink(n,r.target),i=this.data.get(o);if(!i)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);r=i}let s=0;return r.type==="file"&&r.content&&(r.content instanceof Uint8Array?s=r.content.length:s=Ge.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:s,mtime:r.mtime||new Date}}async lstat(e){let n=this.normalizePath(e),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime||new Date};let s=0;return r.type==="file"&&r.content&&(r.content instanceof Uint8Array?s=r.content.length:s=Ge.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:s,mtime:r.mtime||new Date}}resolveSymlink(e,n){if(n.startsWith("/"))return this.normalizePath(n);let r=this.dirname(e);return this.normalizePath(r==="/"?`/${n}`:`${r}/${n}`)}async mkdir(e,n){this.mkdirSync(e,n)}mkdirSync(e,n){let r=this.normalizePath(e);if(this.data.has(r)){if(this.data.get(r)?.type==="file")throw new Error(`EEXIST: file already exists, mkdir '${e}'`);if(!n?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${e}'`);return}let s=this.dirname(r);if(s!=="/"&&!this.data.has(s))if(n?.recursive)this.mkdirSync(s,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.data.set(r,{type:"directory",mode:493,mtime:new Date})}async readdir(e){let n=this.normalizePath(e),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${e}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${e}'`);let s=n==="/"?"/":`${n}/`,o=[];for(let i of this.data.keys())if(i!==n&&i.startsWith(s)){let l=i.slice(s.length).split("/")[0];l&&!o.includes(l)&&o.push(l)}return o.sort()}async rm(e,n){let r=this.normalizePath(e),s=this.data.get(r);if(!s){if(n?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${e}'`)}if(s.type==="directory"){let o=await this.readdir(r);if(o.length>0){if(!n?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${e}'`);for(let i of o){let a=r==="/"?`/${i}`:`${r}/${i}`;await this.rm(a,n)}}}this.data.delete(r)}async cp(e,n,r){let s=this.normalizePath(e),o=this.normalizePath(n),i=this.data.get(s);if(!i)throw new Error(`ENOENT: no such file or directory, cp '${e}'`);if(i.type==="file")this.ensureParentDirs(o),this.data.set(o,{...i});else if(i.type==="directory"){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${e}'`);await this.mkdir(o,{recursive:!0});let a=await this.readdir(s);for(let l of a){let c=s==="/"?`/${l}`:`${s}/${l}`,u=o==="/"?`/${l}`:`${o}/${l}`;await this.cp(c,u,r)}}}async mv(e,n){await this.cp(e,n,{recursive:!0}),await this.rm(e,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(e,n){if(n.startsWith("/"))return this.normalizePath(n);let r=e==="/"?`/${n}`:`${e}/${n}`;return this.normalizePath(r)}async chmod(e,n){let r=this.normalizePath(e),s=this.data.get(r);if(!s)throw new Error(`ENOENT: no such file or directory, chmod '${e}'`);s.mode=n}async symlink(e,n){let r=this.normalizePath(n);if(this.data.has(r))throw new Error(`EEXIST: file already exists, symlink '${n}'`);this.ensureParentDirs(r),this.data.set(r,{type:"symlink",target:e,mode:511,mtime:new Date})}async link(e,n){let r=this.normalizePath(e),s=this.normalizePath(n),o=this.data.get(r);if(!o)throw new Error(`ENOENT: no such file or directory, link '${e}'`);if(o.type!=="file")throw new Error(`EPERM: operation not permitted, link '${e}'`);if(this.data.has(s))throw new Error(`EEXIST: file already exists, link '${n}'`);this.ensureParentDirs(s),this.data.set(s,{type:"file",content:o.content,mode:o.mode,mtime:o.mtime})}async readlink(e){let n=this.normalizePath(e),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${e}'`);return r.target}};var xr="5.1.0(1)-release",Sr="Linux version 5.15.0-generic (just-bash) #1 SMP PREEMPT";function Ie(){return{pid:process.pid,ppid:process.ppid,uid:process.getuid?.()??1e3,gid:process.getgid?.()??1e3}}function br(){let{pid:t,ppid:e,uid:n,gid:r}=Ie();return`Name: bash
2
+ import{a as U,b as X,c as G,d as ee,e as J,f as R,g as F,h as pe,i as z,j as oe,k as ze}from"./chunks/chunk-NWWB2XRE.js";import{a as Y}from"./chunks/chunk-4VDEBYW7.js";import"./chunks/chunk-KGOUQS5A.js";import*as Bn from"node:fs";import*as zn from"node:readline";var Pe=[{name:"echo",load:async()=>(await import("./chunks/echo-WSKTON6U.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-7TVSOZLU.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-HWUQKYUM.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-FSSC77F4.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-XJABRAUN.js")).mkdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-TSNAXMZ2.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-3DIKREF7.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-53KG2MCJ.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-VL3R4LAM.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-DYK37Z24.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-BES27CZT.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-OFU3HUEZ.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-UEQ7KMY5.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-L5HBHEEQ.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-L5HBHEEQ.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-L5HBHEEQ.js")).egrepCommand},{name:"sed",load:async()=>(await import("./chunks/sed-5LQMJYRJ.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-D2US2LMM.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-J5ARYV56.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-7JNZWE5D.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-CPIFQTKY.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-VCKWLT2T.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-P6UQXFKX.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-ESVATRDW.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-ZONJJZUK.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-YLLSNZZN.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-YLLSNZZN.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-PCMLRCRW.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-PCMLRCRW.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-G5C2J2OY.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-WIJC4RTG.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-UT3MT5UU.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-UT3MT5UU.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-MTQKMJJI.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-RJX7MYGG.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:"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-VGXAOUBA.js")).md5sumCommand},{name:"sha1sum",load:async()=>(await import("./chunks/sha1sum-BIUH233Z.js")).sha1sumCommand},{name:"sha256sum",load:async()=>(await import("./chunks/sha256sum-SUIK2MT2.js")).sha256sumCommand},{name:"file",load:async()=>(await import("./chunks/file-XMPFXMUJ.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-73KOOLC6.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:"od",load:async()=>(await import("./chunks/od-SLM7SRWU.js")).od},{name:"gzip",load:async()=>(await import("./chunks/gzip-MNCJB6OR.js")).gzipCommand},{name:"gunzip",load:async()=>(await import("./chunks/gzip-MNCJB6OR.js")).gunzipCommand},{name:"zcat",load:async()=>(await import("./chunks/gzip-MNCJB6OR.js")).zcatCommand}];(typeof __BROWSER__>"u"||!__BROWSER__)&&(Pe.push({name:"yq",load:async()=>(await import("./chunks/yq-MF2SNFGL.js")).yqCommand}),Pe.push({name:"xan",load:async()=>(await import("./chunks/xan-ASGSTJP4.js")).xanCommand}),Pe.push({name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-PZRKN3TT.js")).sqlite3Command}));var Un=[{name:"curl",load:async()=>(await import("./chunks/curl-LCMREE7R.js")).curlCommand}],mr=new Map;function pr(t){return{name:t.name,async execute(e,n){let r=mr.get(t.name);return r||(r=await t.load(),mr.set(t.name,r)),r.execute(e,n)}}}function yr(t){return(t?Pe.filter(n=>t.includes(n.name)):Pe).map(pr)}function Er(){return Un.map(pr)}function wr(t){return"load"in t&&typeof t.load=="function"}function gr(t){let e=null;return{name:t.name,async execute(n,r){return e||(e=await t.load()),e.execute(n,r)}}}var Gn=new TextEncoder,Hn=new TextDecoder;function Ae(t,e){if(t instanceof Uint8Array)return t;switch(e){case"base64":return Uint8Array.from(atob(t),n=>n.charCodeAt(0));case"hex":{let n=new Uint8Array(t.length/2);for(let r=0;r<t.length;r+=2)n[r/2]=parseInt(t.slice(r,r+2),16);return n}case"binary":case"latin1":return Uint8Array.from(t,n=>n.charCodeAt(0));default:return Gn.encode(t)}}function Ue(t,e){switch(e){case"base64":return btoa(String.fromCharCode(...t));case"hex":return Array.from(t).map(n=>n.toString(16).padStart(2,"0")).join("");case"binary":case"latin1":return String.fromCharCode(...t);default:return Hn.decode(t)}}function ae(t){if(t!=null)return typeof t=="string"?t:t.encoding??void 0}var Ge=new TextEncoder;function Vn(t){return typeof t=="object"&&t!==null&&!(t instanceof Uint8Array)&&"content"in t}var Ie=class{data=new Map;constructor(e){if(this.data.set("/",{type:"directory",mode:493,mtime:new Date}),e)for(let[n,r]of Object.entries(e))Vn(r)?this.writeFileSync(n,r.content,void 0,{mode:r.mode,mtime:r.mtime}):this.writeFileSync(n,r)}normalizePath(e){if(!e||e==="/")return"/";let n=e.endsWith("/")&&e!=="/"?e.slice(0,-1):e;n.startsWith("/")||(n=`/${n}`);let r=n.split("/").filter(o=>o&&o!=="."),s=[];for(let o of r)o===".."?s.pop():s.push(o);return`/${s.join("/")}`||"/"}dirname(e){let n=this.normalizePath(e);if(n==="/")return"/";let r=n.lastIndexOf("/");return r===0?"/":n.slice(0,r)}ensureParentDirs(e){let n=this.dirname(e);n!=="/"&&(this.data.has(n)||(this.ensureParentDirs(n),this.data.set(n,{type:"directory",mode:493,mtime:new Date})))}writeFileSync(e,n,r,s){let o=this.normalizePath(e);this.ensureParentDirs(o);let i=ae(r),a=Ae(n,i);this.data.set(o,{type:"file",content:a,mode:s?.mode??420,mtime:s?.mtime??new Date})}async readFile(e,n){let r=await this.readFileBuffer(e),s=ae(n);return Ue(r,s)}async readFileBuffer(e){let n=this.normalizePath(e),r=this.data.get(n),s=n;if(!r)throw new Error(`ENOENT: no such file or directory, open '${e}'`);let o=new Set;for(;r&&r.type==="symlink";){if(o.has(s))throw new Error(`ELOOP: too many levels of symbolic links, open '${e}'`);o.add(s),s=this.resolveSymlink(s,r.target),r=this.data.get(s)}if(!r)throw new Error(`ENOENT: no such file or directory, open '${e}'`);if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);return r.content instanceof Uint8Array?r.content:Ge.encode(r.content)}async writeFile(e,n,r){this.writeFileSync(e,n,r)}async appendFile(e,n,r){let s=this.normalizePath(e),o=this.data.get(s);if(o&&o.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${e}'`);let i=ae(r),a=Ae(n,i);if(o?.type==="file"){let l=o.content instanceof Uint8Array?o.content:Ge.encode(o.content),c=new Uint8Array(l.length+a.length);c.set(l),c.set(a,l.length),this.data.set(s,{type:"file",content:c,mode:o.mode,mtime:new Date})}else this.writeFileSync(e,n,r)}async exists(e){return this.data.has(this.normalizePath(e))}async stat(e){let n=this.normalizePath(e),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);if(r.type==="symlink"){let o=this.resolveSymlink(n,r.target),i=this.data.get(o);if(!i)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);r=i}let s=0;return r.type==="file"&&r.content&&(r.content instanceof Uint8Array?s=r.content.length:s=Ge.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:s,mtime:r.mtime||new Date}}async lstat(e){let n=this.normalizePath(e),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime||new Date};let s=0;return r.type==="file"&&r.content&&(r.content instanceof Uint8Array?s=r.content.length:s=Ge.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:s,mtime:r.mtime||new Date}}resolveSymlink(e,n){if(n.startsWith("/"))return this.normalizePath(n);let r=this.dirname(e);return this.normalizePath(r==="/"?`/${n}`:`${r}/${n}`)}async mkdir(e,n){this.mkdirSync(e,n)}mkdirSync(e,n){let r=this.normalizePath(e);if(this.data.has(r)){if(this.data.get(r)?.type==="file")throw new Error(`EEXIST: file already exists, mkdir '${e}'`);if(!n?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${e}'`);return}let s=this.dirname(r);if(s!=="/"&&!this.data.has(s))if(n?.recursive)this.mkdirSync(s,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.data.set(r,{type:"directory",mode:493,mtime:new Date})}async readdir(e){let n=this.normalizePath(e),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${e}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${e}'`);let s=n==="/"?"/":`${n}/`,o=[];for(let i of this.data.keys())if(i!==n&&i.startsWith(s)){let l=i.slice(s.length).split("/")[0];l&&!o.includes(l)&&o.push(l)}return o.sort()}async rm(e,n){let r=this.normalizePath(e),s=this.data.get(r);if(!s){if(n?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${e}'`)}if(s.type==="directory"){let o=await this.readdir(r);if(o.length>0){if(!n?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${e}'`);for(let i of o){let a=r==="/"?`/${i}`:`${r}/${i}`;await this.rm(a,n)}}}this.data.delete(r)}async cp(e,n,r){let s=this.normalizePath(e),o=this.normalizePath(n),i=this.data.get(s);if(!i)throw new Error(`ENOENT: no such file or directory, cp '${e}'`);if(i.type==="file")this.ensureParentDirs(o),this.data.set(o,{...i});else if(i.type==="directory"){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${e}'`);await this.mkdir(o,{recursive:!0});let a=await this.readdir(s);for(let l of a){let c=s==="/"?`/${l}`:`${s}/${l}`,u=o==="/"?`/${l}`:`${o}/${l}`;await this.cp(c,u,r)}}}async mv(e,n){await this.cp(e,n,{recursive:!0}),await this.rm(e,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(e,n){if(n.startsWith("/"))return this.normalizePath(n);let r=e==="/"?`/${n}`:`${e}/${n}`;return this.normalizePath(r)}async chmod(e,n){let r=this.normalizePath(e),s=this.data.get(r);if(!s)throw new Error(`ENOENT: no such file or directory, chmod '${e}'`);s.mode=n}async symlink(e,n){let r=this.normalizePath(n);if(this.data.has(r))throw new Error(`EEXIST: file already exists, symlink '${n}'`);this.ensureParentDirs(r),this.data.set(r,{type:"symlink",target:e,mode:511,mtime:new Date})}async link(e,n){let r=this.normalizePath(e),s=this.normalizePath(n),o=this.data.get(r);if(!o)throw new Error(`ENOENT: no such file or directory, link '${e}'`);if(o.type!=="file")throw new Error(`EPERM: operation not permitted, link '${e}'`);if(this.data.has(s))throw new Error(`EEXIST: file already exists, link '${n}'`);this.ensureParentDirs(s),this.data.set(s,{type:"file",content:o.content,mode:o.mode,mtime:o.mtime})}async readlink(e){let n=this.normalizePath(e),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${e}'`);return r.target}};var Ar="5.1.0(1)-release",xr="Linux version 5.15.0-generic (just-bash) #1 SMP PREEMPT";function Re(){return{pid:process.pid,ppid:process.ppid,uid:process.getuid?.()??1e3,gid:process.getgid?.()??1e3}}function Sr(){let{pid:t,ppid:e,uid:n,gid:r}=Re();return`Name: bash
3
3
  State: R (running)
4
4
  Pid: ${t}
5
5
  PPid: ${e}
6
6
  Uid: ${n} ${n} ${n} ${n}
7
7
  Gid: ${r} ${r} ${r} ${r}
8
- `}function Zn(t){let e=t;return typeof e.mkdirSync=="function"&&typeof e.writeFileSync=="function"}function Qn(t,e){t.mkdirSync("/bin",{recursive:!0}),t.mkdirSync("/usr/bin",{recursive:!0}),e&&(t.mkdirSync("/home/user",{recursive:!0}),t.mkdirSync("/tmp",{recursive:!0}))}function Kn(t){t.mkdirSync("/dev",{recursive:!0}),t.writeFileSync("/dev/null",""),t.writeFileSync("/dev/zero",new Uint8Array(0)),t.writeFileSync("/dev/stdin",""),t.writeFileSync("/dev/stdout",""),t.writeFileSync("/dev/stderr","")}function Xn(t){t.mkdirSync("/proc/self/fd",{recursive:!0}),t.writeFileSync("/proc/version",`${Sr}
8
+ `}function jn(t){let e=t;return typeof e.mkdirSync=="function"&&typeof e.writeFileSync=="function"}function qn(t,e){t.mkdirSync("/bin",{recursive:!0}),t.mkdirSync("/usr/bin",{recursive:!0}),e&&(t.mkdirSync("/home/user",{recursive:!0}),t.mkdirSync("/tmp",{recursive:!0}))}function Zn(t){t.mkdirSync("/dev",{recursive:!0}),t.writeFileSync("/dev/null",""),t.writeFileSync("/dev/zero",new Uint8Array(0)),t.writeFileSync("/dev/stdin",""),t.writeFileSync("/dev/stdout",""),t.writeFileSync("/dev/stderr","")}function Qn(t){t.mkdirSync("/proc/self/fd",{recursive:!0}),t.writeFileSync("/proc/version",`${xr}
9
9
  `),t.writeFileSync("/proc/self/exe","/bin/bash"),t.writeFileSync("/proc/self/cmdline","bash\0"),t.writeFileSync("/proc/self/comm",`bash
10
- `),t.writeFileSync("/proc/self/status",br()),t.writeFileSync("/proc/self/fd/0","/dev/stdin"),t.writeFileSync("/proc/self/fd/1","/dev/stdout"),t.writeFileSync("/proc/self/fd/2","/dev/stderr")}function Cr(t,e){Zn(t)&&(Qn(t,e),Kn(t),Xn(t))}var Yn=["yq","xan"];function Nr(t){return Yn.includes(t)}function L(t,e){return{type:"ArithmeticExpression",expression:te(t,e,0).expr}}function te(t,e,n){return Jn(t,e,n)}function Jn(t,e,n){let{expr:r,pos:s}=Ve(t,e,n);for(s=D(e,s);e[s]===",";){s++;let{expr:o,pos:i}=Ve(t,e,s);r={type:"ArithBinary",operator:",",left:r,right:o},s=D(e,i)}return{expr:r,pos:s}}function Ve(t,e,n){let{expr:r,pos:s}=es(t,e,n);if(s=D(e,s),e[s]==="?"){s++;let{expr:o,pos:i}=te(t,e,s);if(s=D(e,i),e[s]===":"){s++;let{expr:a,pos:l}=te(t,e,s);return{expr:{type:"ArithTernary",condition:r,consequent:o,alternate:a},pos:l}}}return{expr:r,pos:s}}function es(t,e,n){let{expr:r,pos:s}=$r(t,e,n);for(;s=D(e,s),e.slice(s,s+2)==="||";){s+=2;let{expr:o,pos:i}=$r(t,e,s);r={type:"ArithBinary",operator:"||",left:r,right:o},s=i}return{expr:r,pos:s}}function $r(t,e,n){let{expr:r,pos:s}=vr(t,e,n);for(;s=D(e,s),e.slice(s,s+2)==="&&";){s+=2;let{expr:o,pos:i}=vr(t,e,s);r={type:"ArithBinary",operator:"&&",left:r,right:o},s=i}return{expr:r,pos:s}}function vr(t,e,n){let{expr:r,pos:s}=Pr(t,e,n);for(;s=D(e,s),e[s]==="|"&&e[s+1]!=="|";){s++;let{expr:o,pos:i}=Pr(t,e,s);r={type:"ArithBinary",operator:"|",left:r,right:o},s=i}return{expr:r,pos:s}}function Pr(t,e,n){let{expr:r,pos:s}=Ir(t,e,n);for(;s=D(e,s),e[s]==="^";){s++;let{expr:o,pos:i}=Ir(t,e,s);r={type:"ArithBinary",operator:"^",left:r,right:o},s=i}return{expr:r,pos:s}}function Ir(t,e,n){let{expr:r,pos:s}=Rr(t,e,n);for(;s=D(e,s),e[s]==="&"&&e[s+1]!=="&";){s++;let{expr:o,pos:i}=Rr(t,e,s);r={type:"ArithBinary",operator:"&",left:r,right:o},s=i}return{expr:r,pos:s}}function Rr(t,e,n){let{expr:r,pos:s}=kr(t,e,n);for(;s=D(e,s),e.slice(s,s+2)==="=="||e.slice(s,s+2)==="!=";){let o=e.slice(s,s+2);s+=2;let{expr:i,pos:a}=kr(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}return{expr:r,pos:s}}function kr(t,e,n){let{expr:r,pos:s}=At(t,e,n);for(;;)if(s=D(e,s),e.slice(s,s+2)==="<="||e.slice(s,s+2)===">="){let o=e.slice(s,s+2);s+=2;let{expr:i,pos:a}=At(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}else if(e[s]==="<"||e[s]===">"){let o=e[s];s++;let{expr:i,pos:a}=At(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}else break;return{expr:r,pos:s}}function At(t,e,n){let{expr:r,pos:s}=Dr(t,e,n);for(;s=D(e,s),e.slice(s,s+2)==="<<"||e.slice(s,s+2)===">>";){let o=e.slice(s,s+2);s+=2;let{expr:i,pos:a}=Dr(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}return{expr:r,pos:s}}function Dr(t,e,n){let{expr:r,pos:s}=Or(t,e,n);for(;s=D(e,s),(e[s]==="+"||e[s]==="-")&&e[s+1]!==e[s];){let o=e[s];s++;let{expr:i,pos:a}=Or(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}return{expr:r,pos:s}}function Or(t,e,n){let{expr:r,pos:s}=He(t,e,n);for(;;)if(s=D(e,s),e[s]==="*"&&e[s+1]!=="*"){s++;let{expr:o,pos:i}=He(t,e,s);r={type:"ArithBinary",operator:"*",left:r,right:o},s=i}else if(e[s]==="/"||e[s]==="%"){let o=e[s];s++;let{expr:i,pos:a}=He(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}else break;return{expr:r,pos:s}}function He(t,e,n){let{expr:r,pos:s}=xt(t,e,n),o=D(e,s);if(e.slice(o,o+2)==="**"){o+=2;let{expr:i,pos:a}=He(t,e,o);return{expr:{type:"ArithBinary",operator:"**",left:r,right:i},pos:a}}return{expr:r,pos:s}}function xt(t,e,n){let r=D(e,n);if(e.slice(r,r+2)==="++"||e.slice(r,r+2)==="--"){let s=e.slice(r,r+2);r+=2;let{expr:o,pos:i}=xt(t,e,r);return{expr:{type:"ArithUnary",operator:s,operand:o,prefix:!0},pos:i}}if(e[r]==="+"||e[r]==="-"||e[r]==="!"||e[r]==="~"){let s=e[r];r++;let{expr:o,pos:i}=xt(t,e,r);return{expr:{type:"ArithUnary",operator:s,operand:o,prefix:!0},pos:i}}return rs(t,e,r)}function ts(t,e){let n=t[e];return n==="$"||n==="`"}function rs(t,e,n){let{expr:r,pos:s}=_r(t,e,n),o=[r];for(;ts(e,s);){let{expr:i,pos:a}=_r(t,e,s);o.push(i),s=a}if(o.length>1&&(r={type:"ArithConcat",parts:o}),s=D(e,s),e.slice(s,s+2)==="++"||e.slice(s,s+2)==="--"){let i=e.slice(s,s+2);return s+=2,{expr:{type:"ArithUnary",operator:i,operand:r,prefix:!1},pos:s}}return{expr:r,pos:s}}function _r(t,e,n){let r=D(e,n);if(e.slice(r,r+3)==="$(("){r+=3;let s=1,o=r;for(;r<e.length-1&&s>0;)e[r]==="("&&e[r+1]==="("?(s++,r+=2):e[r]===")"&&e[r+1]===")"?(s--,s>0&&(r+=2)):r++;let i=e.slice(o,r),{expr:a}=te(t,i,0);return r+=2,{expr:{type:"ArithNested",expression:a},pos:r}}if(e.slice(r,r+2)==="$("&&e[r+2]!=="("){r+=2;let s=1,o=r;for(;r<e.length&&s>0;)e[r]==="("?s++:e[r]===")"&&s--,s>0&&r++;let i=e.slice(o,r);return r++,{expr:{type:"ArithCommandSubst",command:i},pos:r}}if(e[r]==="`"){r++;let s=r;for(;r<e.length&&e[r]!=="`";)r++;let o=e.slice(s,r);return e[r]==="`"&&r++,{expr:{type:"ArithCommandSubst",command:o},pos:r}}if(e[r]==="("){r++;let{expr:s,pos:o}=te(t,e,r);return r=D(e,o),e[r]===")"&&r++,{expr:{type:"ArithGroup",expression:s},pos:r}}if(/[0-9]/.test(e[r])){let s="",o=!1;for(;r<e.length;){let a=e[r];if(o)if(/[0-9a-zA-Z@_]/.test(a))s+=a,r++;else break;else if(a==="#")o=!0,s+=a,r++;else if(/[0-9a-fA-FxX]/.test(a))s+=a,r++;else break}if(e[r]==="."&&/[0-9]/.test(e[r+1]))throw new F(`${s}.${e[r+1]}...: syntax error: invalid arithmetic operator`);if(e[r]==="["){let a=e.slice(r).trim();return{expr:{type:"ArithNumberSubscript",number:s,errorToken:a},pos:e.length}}return{expr:{type:"ArithNumber",value:xe(s)},pos:r}}if(e[r]==="$"&&e[r+1]==="{"){let s=r+2,o=1,i=s;for(;i<e.length&&o>0;)e[i]==="{"?o++:e[i]==="}"&&o--,o>0&&i++;let a=e.slice(s,i),l=i+1;if(e[l]==="#"){let c=l+1;for(;c<e.length&&/[0-9a-zA-Z@_]/.test(e[c]);)c++;let u=e.slice(l+1,c);return{expr:{type:"ArithDynamicBase",baseExpr:a,value:u},pos:c}}if(/[0-9]/.test(e[l])||e[l]==="x"||e[l]==="X"){let c=l;if(e[l]==="x"||e[l]==="X")for(c++;c<e.length&&/[0-9a-fA-F]/.test(e[c]);)c++;else for(;c<e.length&&/[0-9]/.test(e[c]);)c++;let u=e.slice(l,c);return{expr:{type:"ArithDynamicNumber",prefix:a,suffix:u},pos:c}}return r=l,{expr:{type:"ArithBracedExpansion",content:a},pos:r}}if(e[r]==="$"&&r+1<e.length&&/[0-9]/.test(e[r+1])){r++;let s="";for(;r<e.length&&/[0-9]/.test(e[r]);)s+=e[r],r++;return{expr:{type:"ArithVariable",name:s},pos:r}}if(e[r]==="$"&&r+1<e.length&&/[a-zA-Z_]/.test(e[r+1])&&r++,/[a-zA-Z_]/.test(e[r])){let s="";for(;r<e.length&&/[a-zA-Z0-9_]/.test(e[r]);)s+=e[r],r++;if(e[r]==="["){r++;let i;if(e[r]==="'"||e[r]==='"'){let c=e[r];for(r++,i="";r<e.length&&e[r]!==c;)i+=e[r],r++;e[r]===c&&r++,r=D(e,r),e[r]==="]"&&r++}let a;if(i===void 0){let{expr:c,pos:u}=te(t,e,r);a=c,r=u,e[r]==="]"&&r++}if(r=D(e,r),e[r]==="["&&a)return{expr:{type:"ArithDoubleSubscript",array:s,index:a},pos:r};let l=["=","+=","-=","*=","/=","%=","<<=",">>=","&=","|=","^="];for(let c of l)if(e.slice(r,r+c.length)===c&&e.slice(r,r+c.length+1)!=="=="){r+=c.length;let{expr:u,pos:d}=Ve(t,e,r);return{expr:{type:"ArithAssignment",operator:c,variable:s,subscript:a,stringKey:i,value:u},pos:d}}return{expr:{type:"ArithArrayElement",array:s,index:a,stringKey:i},pos:r}}r=D(e,r);let o=["=","+=","-=","*=","/=","%=","<<=",">>=","&=","|=","^="];for(let i of o)if(e.slice(r,r+i.length)===i&&e.slice(r,r+i.length+1)!=="=="){r+=i.length;let{expr:a,pos:l}=Ve(t,e,r);return{expr:{type:"ArithAssignment",operator:i,variable:s,value:a},pos:l}}return{expr:{type:"ArithVariable",name:s},pos:r}}return{expr:{type:"ArithNumber",value:0},pos:r}}function xe(t){if(t.includes("#")){let[e,n]=t.split("#"),r=Number.parseInt(e,10);if(r<2||r>64)return Number.NaN;if(r<=36)return Number.parseInt(n,r);let s=0;for(let o of n){let i;if(o>="0"&&o<="9")i=o.charCodeAt(0)-48;else if(o>="a"&&o<="z")i=o.charCodeAt(0)-97+10;else if(o>="A"&&o<="Z")i=o.charCodeAt(0)-65+36;else if(o==="@")i=62;else if(o==="_")i=63;else return Number.NaN;if(i>=r)return Number.NaN;s=s*r+i}return s}return t.startsWith("0x")||t.startsWith("0X")?Number.parseInt(t.slice(2),16):t.startsWith("0")&&t.length>1&&/^[0-9]+$/.test(t)?/[89]/.test(t)?Number.NaN:Number.parseInt(t,8):Number.parseInt(t,10)}function D(t,e){for(;e<t.length;){if(t[e]==="\\"&&t[e+1]===`
11
- `){e+=2;continue}if(/\s/.test(t[e])){e++;continue}break}return e}var A={script(t){return{type:"Script",statements:t}},statement(t,e=[],n=!1){return{type:"Statement",pipelines:t,operators:e,background:n}},pipeline(t,e=!1){return{type:"Pipeline",commands:t,negated:e}},simpleCommand(t,e=[],n=[],r=[]){return{type:"SimpleCommand",name:t,args:e,assignments:n,redirections:r}},word(t){return{type:"Word",parts:t}},literal(t){return{type:"Literal",value:t}},singleQuoted(t){return{type:"SingleQuoted",value:t}},doubleQuoted(t){return{type:"DoubleQuoted",parts:t}},escaped(t){return{type:"Escaped",value:t}},parameterExpansion(t,e=null){return{type:"ParameterExpansion",parameter:t,operation:e}},commandSubstitution(t,e=!1){return{type:"CommandSubstitution",body:t,legacy:e}},arithmeticExpansion(t){return{type:"ArithmeticExpansion",expression:t}},assignment(t,e,n=!1,r=null){return{type:"Assignment",name:t,value:e,append:n,array:r}},redirection(t,e,n=null){return{type:"Redirection",fd:n,operator:t,target:e}},hereDoc(t,e,n=!1,r=!1){return{type:"HereDoc",delimiter:t,content:e,stripTabs:n,quoted:r}},ifNode(t,e=null,n=[]){return{type:"If",clauses:t,elseBody:e,redirections:n}},forNode(t,e,n,r=[]){return{type:"For",variable:t,words:e,body:n,redirections:r}},whileNode(t,e,n=[]){return{type:"While",condition:t,body:e,redirections:n}},untilNode(t,e,n=[]){return{type:"Until",condition:t,body:e,redirections:n}},caseNode(t,e,n=[]){return{type:"Case",word:t,items:e,redirections:n}},caseItem(t,e,n=";;"){return{type:"CaseItem",patterns:t,body:e,terminator:n}},subshell(t,e=[]){return{type:"Subshell",body:t,redirections:e}},group(t,e=[]){return{type:"Group",body:t,redirections:e}},functionDef(t,e,n=[]){return{type:"FunctionDef",name:t,body:e,redirections:n}},conditionalCommand(t,e=[]){return{type:"ConditionalCommand",expression:t,redirections:e}},arithmeticCommand(t,e=[]){return{type:"ArithmeticCommand",expression:t,redirections:e}}};var f;(function(t){t.EOF="EOF",t.NEWLINE="NEWLINE",t.SEMICOLON="SEMICOLON",t.AMP="AMP",t.PIPE="PIPE",t.PIPE_AMP="PIPE_AMP",t.AND_AND="AND_AND",t.OR_OR="OR_OR",t.BANG="BANG",t.LESS="LESS",t.GREAT="GREAT",t.DLESS="DLESS",t.DGREAT="DGREAT",t.LESSAND="LESSAND",t.GREATAND="GREATAND",t.LESSGREAT="LESSGREAT",t.DLESSDASH="DLESSDASH",t.CLOBBER="CLOBBER",t.TLESS="TLESS",t.AND_GREAT="AND_GREAT",t.AND_DGREAT="AND_DGREAT",t.LPAREN="LPAREN",t.RPAREN="RPAREN",t.LBRACE="LBRACE",t.RBRACE="RBRACE",t.DSEMI="DSEMI",t.SEMI_AND="SEMI_AND",t.SEMI_SEMI_AND="SEMI_SEMI_AND",t.DBRACK_START="DBRACK_START",t.DBRACK_END="DBRACK_END",t.DPAREN_START="DPAREN_START",t.DPAREN_END="DPAREN_END",t.IF="IF",t.THEN="THEN",t.ELSE="ELSE",t.ELIF="ELIF",t.FI="FI",t.FOR="FOR",t.WHILE="WHILE",t.UNTIL="UNTIL",t.DO="DO",t.DONE="DONE",t.CASE="CASE",t.ESAC="ESAC",t.IN="IN",t.FUNCTION="FUNCTION",t.SELECT="SELECT",t.TIME="TIME",t.COPROC="COPROC",t.WORD="WORD",t.NAME="NAME",t.NUMBER="NUMBER",t.ASSIGNMENT_WORD="ASSIGNMENT_WORD",t.COMMENT="COMMENT",t.HEREDOC_CONTENT="HEREDOC_CONTENT"})(f||(f={}));var qe={if:f.IF,then:f.THEN,else:f.ELSE,elif:f.ELIF,fi:f.FI,for:f.FOR,while:f.WHILE,until:f.UNTIL,do:f.DO,done:f.DONE,case:f.CASE,esac:f.ESAC,in:f.IN,function:f.FUNCTION,select:f.SELECT,time:f.TIME,coproc:f.COPROC};function Tr(t){let e=t.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);if(!e)return!1;let n=t.slice(e[0].length);if(n===""||n==="+")return!0;if(n[0]==="["){let r=0,s=0;for(;s<n.length;s++)if(n[s]==="[")r++;else if(n[s]==="]"&&(r--,r===0))break;if(r!==0||s>=n.length)return!1;let o=n.slice(s+1);return o===""||o==="+"}return!1}var ns=[[";",";","&",f.SEMI_SEMI_AND],["<","<","<",f.TLESS],["&",">",">",f.AND_DGREAT]],ss=[["[","[",f.DBRACK_START],["]","]",f.DBRACK_END],["(","(",f.DPAREN_START],[")",")",f.DPAREN_END],["&","&",f.AND_AND],["|","|",f.OR_OR],[";",";",f.DSEMI],[";","&",f.SEMI_AND],["|","&",f.PIPE_AMP],[">",">",f.DGREAT],["<","&",f.LESSAND],[">","&",f.GREATAND],["<",">",f.LESSGREAT],[">","|",f.CLOBBER],["&",">",f.AND_GREAT]],is={"|":f.PIPE,"&":f.AMP,";":f.SEMICOLON,"(":f.LPAREN,")":f.RPAREN,"<":f.LESS,">":f.GREAT};function os(t){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)}var je=class{input;pos=0;line=1;column=1;tokens=[];pendingHeredocs=[];constructor(e){this.input=e}tokenize(){let n=this.input.length,r=this.tokens,s=this.pendingHeredocs;for(;this.pos<n&&(this.skipWhitespace(),!(this.pos>=n));){if(s.length>0&&r.length>0&&r[r.length-1].type===f.NEWLINE){this.readHeredocContent();continue}let o=this.nextToken();o&&r.push(o)}return r.push({type:f.EOF,value:"",start:this.pos,end:this.pos,line:this.line,column:this.column}),r}skipWhitespace(){let e=this.input,n=e.length,r=this.pos,s=this.column,o=this.line;for(;r<n;){let i=e[r];if(i===" "||i===" ")r++,s++;else if(i==="\\"&&e[r+1]===`
10
+ `),t.writeFileSync("/proc/self/status",Sr()),t.writeFileSync("/proc/self/fd/0","/dev/stdin"),t.writeFileSync("/proc/self/fd/1","/dev/stdout"),t.writeFileSync("/proc/self/fd/2","/dev/stderr")}function br(t,e){jn(t)&&(qn(t,e),Zn(t),Qn(t))}var Kn=["yq","xan","sqlite3"];function Cr(t){return Kn.includes(t)}function L(t,e){return{type:"ArithmeticExpression",expression:te(t,e,0).expr}}function te(t,e,n){return Xn(t,e,n)}function Xn(t,e,n){let{expr:r,pos:s}=Ve(t,e,n);for(s=D(e,s);e[s]===",";){s++;let{expr:o,pos:i}=Ve(t,e,s);r={type:"ArithBinary",operator:",",left:r,right:o},s=D(e,i)}return{expr:r,pos:s}}function Ve(t,e,n){let{expr:r,pos:s}=Yn(t,e,n);if(s=D(e,s),e[s]==="?"){s++;let{expr:o,pos:i}=te(t,e,s);if(s=D(e,i),e[s]===":"){s++;let{expr:a,pos:l}=te(t,e,s);return{expr:{type:"ArithTernary",condition:r,consequent:o,alternate:a},pos:l}}}return{expr:r,pos:s}}function Yn(t,e,n){let{expr:r,pos:s}=Nr(t,e,n);for(;s=D(e,s),e.slice(s,s+2)==="||";){s+=2;let{expr:o,pos:i}=Nr(t,e,s);r={type:"ArithBinary",operator:"||",left:r,right:o},s=i}return{expr:r,pos:s}}function Nr(t,e,n){let{expr:r,pos:s}=$r(t,e,n);for(;s=D(e,s),e.slice(s,s+2)==="&&";){s+=2;let{expr:o,pos:i}=$r(t,e,s);r={type:"ArithBinary",operator:"&&",left:r,right:o},s=i}return{expr:r,pos:s}}function $r(t,e,n){let{expr:r,pos:s}=vr(t,e,n);for(;s=D(e,s),e[s]==="|"&&e[s+1]!=="|";){s++;let{expr:o,pos:i}=vr(t,e,s);r={type:"ArithBinary",operator:"|",left:r,right:o},s=i}return{expr:r,pos:s}}function vr(t,e,n){let{expr:r,pos:s}=Pr(t,e,n);for(;s=D(e,s),e[s]==="^";){s++;let{expr:o,pos:i}=Pr(t,e,s);r={type:"ArithBinary",operator:"^",left:r,right:o},s=i}return{expr:r,pos:s}}function Pr(t,e,n){let{expr:r,pos:s}=Ir(t,e,n);for(;s=D(e,s),e[s]==="&"&&e[s+1]!=="&";){s++;let{expr:o,pos:i}=Ir(t,e,s);r={type:"ArithBinary",operator:"&",left:r,right:o},s=i}return{expr:r,pos:s}}function Ir(t,e,n){let{expr:r,pos:s}=Rr(t,e,n);for(;s=D(e,s),e.slice(s,s+2)==="=="||e.slice(s,s+2)==="!=";){let o=e.slice(s,s+2);s+=2;let{expr:i,pos:a}=Rr(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}return{expr:r,pos:s}}function Rr(t,e,n){let{expr:r,pos:s}=gt(t,e,n);for(;;)if(s=D(e,s),e.slice(s,s+2)==="<="||e.slice(s,s+2)===">="){let o=e.slice(s,s+2);s+=2;let{expr:i,pos:a}=gt(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}else if(e[s]==="<"||e[s]===">"){let o=e[s];s++;let{expr:i,pos:a}=gt(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}else break;return{expr:r,pos:s}}function gt(t,e,n){let{expr:r,pos:s}=kr(t,e,n);for(;s=D(e,s),e.slice(s,s+2)==="<<"||e.slice(s,s+2)===">>";){let o=e.slice(s,s+2);s+=2;let{expr:i,pos:a}=kr(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}return{expr:r,pos:s}}function kr(t,e,n){let{expr:r,pos:s}=Dr(t,e,n);for(;s=D(e,s),(e[s]==="+"||e[s]==="-")&&e[s+1]!==e[s];){let o=e[s];s++;let{expr:i,pos:a}=Dr(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}return{expr:r,pos:s}}function Dr(t,e,n){let{expr:r,pos:s}=He(t,e,n);for(;;)if(s=D(e,s),e[s]==="*"&&e[s+1]!=="*"){s++;let{expr:o,pos:i}=He(t,e,s);r={type:"ArithBinary",operator:"*",left:r,right:o},s=i}else if(e[s]==="/"||e[s]==="%"){let o=e[s];s++;let{expr:i,pos:a}=He(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}else break;return{expr:r,pos:s}}function He(t,e,n){let{expr:r,pos:s}=At(t,e,n),o=D(e,s);if(e.slice(o,o+2)==="**"){o+=2;let{expr:i,pos:a}=He(t,e,o);return{expr:{type:"ArithBinary",operator:"**",left:r,right:i},pos:a}}return{expr:r,pos:s}}function At(t,e,n){let r=D(e,n);if(e.slice(r,r+2)==="++"||e.slice(r,r+2)==="--"){let s=e.slice(r,r+2);r+=2;let{expr:o,pos:i}=At(t,e,r);return{expr:{type:"ArithUnary",operator:s,operand:o,prefix:!0},pos:i}}if(e[r]==="+"||e[r]==="-"||e[r]==="!"||e[r]==="~"){let s=e[r];r++;let{expr:o,pos:i}=At(t,e,r);return{expr:{type:"ArithUnary",operator:s,operand:o,prefix:!0},pos:i}}return es(t,e,r)}function Jn(t,e){let n=t[e];return n==="$"||n==="`"}function es(t,e,n){let{expr:r,pos:s}=Or(t,e,n),o=[r];for(;Jn(e,s);){let{expr:i,pos:a}=Or(t,e,s);o.push(i),s=a}if(o.length>1&&(r={type:"ArithConcat",parts:o}),s=D(e,s),e.slice(s,s+2)==="++"||e.slice(s,s+2)==="--"){let i=e.slice(s,s+2);return s+=2,{expr:{type:"ArithUnary",operator:i,operand:r,prefix:!1},pos:s}}return{expr:r,pos:s}}function Or(t,e,n){let r=D(e,n);if(e.slice(r,r+3)==="$(("){r+=3;let s=1,o=r;for(;r<e.length-1&&s>0;)e[r]==="("&&e[r+1]==="("?(s++,r+=2):e[r]===")"&&e[r+1]===")"?(s--,s>0&&(r+=2)):r++;let i=e.slice(o,r),{expr:a}=te(t,i,0);return r+=2,{expr:{type:"ArithNested",expression:a},pos:r}}if(e.slice(r,r+2)==="$("&&e[r+2]!=="("){r+=2;let s=1,o=r;for(;r<e.length&&s>0;)e[r]==="("?s++:e[r]===")"&&s--,s>0&&r++;let i=e.slice(o,r);return r++,{expr:{type:"ArithCommandSubst",command:i},pos:r}}if(e[r]==="`"){r++;let s=r;for(;r<e.length&&e[r]!=="`";)r++;let o=e.slice(s,r);return e[r]==="`"&&r++,{expr:{type:"ArithCommandSubst",command:o},pos:r}}if(e[r]==="("){r++;let{expr:s,pos:o}=te(t,e,r);return r=D(e,o),e[r]===")"&&r++,{expr:{type:"ArithGroup",expression:s},pos:r}}if(/[0-9]/.test(e[r])){let s="",o=!1;for(;r<e.length;){let a=e[r];if(o)if(/[0-9a-zA-Z@_]/.test(a))s+=a,r++;else break;else if(a==="#")o=!0,s+=a,r++;else if(/[0-9a-fA-FxX]/.test(a))s+=a,r++;else break}if(e[r]==="."&&/[0-9]/.test(e[r+1]))throw new F(`${s}.${e[r+1]}...: syntax error: invalid arithmetic operator`);if(e[r]==="["){let a=e.slice(r).trim();return{expr:{type:"ArithNumberSubscript",number:s,errorToken:a},pos:e.length}}return{expr:{type:"ArithNumber",value:xe(s)},pos:r}}if(e[r]==="$"&&e[r+1]==="{"){let s=r+2,o=1,i=s;for(;i<e.length&&o>0;)e[i]==="{"?o++:e[i]==="}"&&o--,o>0&&i++;let a=e.slice(s,i),l=i+1;if(e[l]==="#"){let c=l+1;for(;c<e.length&&/[0-9a-zA-Z@_]/.test(e[c]);)c++;let u=e.slice(l+1,c);return{expr:{type:"ArithDynamicBase",baseExpr:a,value:u},pos:c}}if(/[0-9]/.test(e[l])||e[l]==="x"||e[l]==="X"){let c=l;if(e[l]==="x"||e[l]==="X")for(c++;c<e.length&&/[0-9a-fA-F]/.test(e[c]);)c++;else for(;c<e.length&&/[0-9]/.test(e[c]);)c++;let u=e.slice(l,c);return{expr:{type:"ArithDynamicNumber",prefix:a,suffix:u},pos:c}}return r=l,{expr:{type:"ArithBracedExpansion",content:a},pos:r}}if(e[r]==="$"&&r+1<e.length&&/[0-9]/.test(e[r+1])){r++;let s="";for(;r<e.length&&/[0-9]/.test(e[r]);)s+=e[r],r++;return{expr:{type:"ArithVariable",name:s},pos:r}}if(e[r]==="$"&&r+1<e.length&&/[a-zA-Z_]/.test(e[r+1])&&r++,/[a-zA-Z_]/.test(e[r])){let s="";for(;r<e.length&&/[a-zA-Z0-9_]/.test(e[r]);)s+=e[r],r++;if(e[r]==="["){r++;let i;if(e[r]==="'"||e[r]==='"'){let c=e[r];for(r++,i="";r<e.length&&e[r]!==c;)i+=e[r],r++;e[r]===c&&r++,r=D(e,r),e[r]==="]"&&r++}let a;if(i===void 0){let{expr:c,pos:u}=te(t,e,r);a=c,r=u,e[r]==="]"&&r++}if(r=D(e,r),e[r]==="["&&a)return{expr:{type:"ArithDoubleSubscript",array:s,index:a},pos:r};let l=["=","+=","-=","*=","/=","%=","<<=",">>=","&=","|=","^="];for(let c of l)if(e.slice(r,r+c.length)===c&&e.slice(r,r+c.length+1)!=="=="){r+=c.length;let{expr:u,pos:d}=Ve(t,e,r);return{expr:{type:"ArithAssignment",operator:c,variable:s,subscript:a,stringKey:i,value:u},pos:d}}return{expr:{type:"ArithArrayElement",array:s,index:a,stringKey:i},pos:r}}r=D(e,r);let o=["=","+=","-=","*=","/=","%=","<<=",">>=","&=","|=","^="];for(let i of o)if(e.slice(r,r+i.length)===i&&e.slice(r,r+i.length+1)!=="=="){r+=i.length;let{expr:a,pos:l}=Ve(t,e,r);return{expr:{type:"ArithAssignment",operator:i,variable:s,value:a},pos:l}}return{expr:{type:"ArithVariable",name:s},pos:r}}return{expr:{type:"ArithNumber",value:0},pos:r}}function xe(t){if(t.includes("#")){let[e,n]=t.split("#"),r=Number.parseInt(e,10);if(r<2||r>64)return Number.NaN;if(r<=36)return Number.parseInt(n,r);let s=0;for(let o of n){let i;if(o>="0"&&o<="9")i=o.charCodeAt(0)-48;else if(o>="a"&&o<="z")i=o.charCodeAt(0)-97+10;else if(o>="A"&&o<="Z")i=o.charCodeAt(0)-65+36;else if(o==="@")i=62;else if(o==="_")i=63;else return Number.NaN;if(i>=r)return Number.NaN;s=s*r+i}return s}return t.startsWith("0x")||t.startsWith("0X")?Number.parseInt(t.slice(2),16):t.startsWith("0")&&t.length>1&&/^[0-9]+$/.test(t)?/[89]/.test(t)?Number.NaN:Number.parseInt(t,8):Number.parseInt(t,10)}function D(t,e){for(;e<t.length;){if(t[e]==="\\"&&t[e+1]===`
11
+ `){e+=2;continue}if(/\s/.test(t[e])){e++;continue}break}return e}var A={script(t){return{type:"Script",statements:t}},statement(t,e=[],n=!1){return{type:"Statement",pipelines:t,operators:e,background:n}},pipeline(t,e=!1){return{type:"Pipeline",commands:t,negated:e}},simpleCommand(t,e=[],n=[],r=[]){return{type:"SimpleCommand",name:t,args:e,assignments:n,redirections:r}},word(t){return{type:"Word",parts:t}},literal(t){return{type:"Literal",value:t}},singleQuoted(t){return{type:"SingleQuoted",value:t}},doubleQuoted(t){return{type:"DoubleQuoted",parts:t}},escaped(t){return{type:"Escaped",value:t}},parameterExpansion(t,e=null){return{type:"ParameterExpansion",parameter:t,operation:e}},commandSubstitution(t,e=!1){return{type:"CommandSubstitution",body:t,legacy:e}},arithmeticExpansion(t){return{type:"ArithmeticExpansion",expression:t}},assignment(t,e,n=!1,r=null){return{type:"Assignment",name:t,value:e,append:n,array:r}},redirection(t,e,n=null){return{type:"Redirection",fd:n,operator:t,target:e}},hereDoc(t,e,n=!1,r=!1){return{type:"HereDoc",delimiter:t,content:e,stripTabs:n,quoted:r}},ifNode(t,e=null,n=[]){return{type:"If",clauses:t,elseBody:e,redirections:n}},forNode(t,e,n,r=[]){return{type:"For",variable:t,words:e,body:n,redirections:r}},whileNode(t,e,n=[]){return{type:"While",condition:t,body:e,redirections:n}},untilNode(t,e,n=[]){return{type:"Until",condition:t,body:e,redirections:n}},caseNode(t,e,n=[]){return{type:"Case",word:t,items:e,redirections:n}},caseItem(t,e,n=";;"){return{type:"CaseItem",patterns:t,body:e,terminator:n}},subshell(t,e=[]){return{type:"Subshell",body:t,redirections:e}},group(t,e=[]){return{type:"Group",body:t,redirections:e}},functionDef(t,e,n=[]){return{type:"FunctionDef",name:t,body:e,redirections:n}},conditionalCommand(t,e=[]){return{type:"ConditionalCommand",expression:t,redirections:e}},arithmeticCommand(t,e=[]){return{type:"ArithmeticCommand",expression:t,redirections:e}}};var f;(function(t){t.EOF="EOF",t.NEWLINE="NEWLINE",t.SEMICOLON="SEMICOLON",t.AMP="AMP",t.PIPE="PIPE",t.PIPE_AMP="PIPE_AMP",t.AND_AND="AND_AND",t.OR_OR="OR_OR",t.BANG="BANG",t.LESS="LESS",t.GREAT="GREAT",t.DLESS="DLESS",t.DGREAT="DGREAT",t.LESSAND="LESSAND",t.GREATAND="GREATAND",t.LESSGREAT="LESSGREAT",t.DLESSDASH="DLESSDASH",t.CLOBBER="CLOBBER",t.TLESS="TLESS",t.AND_GREAT="AND_GREAT",t.AND_DGREAT="AND_DGREAT",t.LPAREN="LPAREN",t.RPAREN="RPAREN",t.LBRACE="LBRACE",t.RBRACE="RBRACE",t.DSEMI="DSEMI",t.SEMI_AND="SEMI_AND",t.SEMI_SEMI_AND="SEMI_SEMI_AND",t.DBRACK_START="DBRACK_START",t.DBRACK_END="DBRACK_END",t.DPAREN_START="DPAREN_START",t.DPAREN_END="DPAREN_END",t.IF="IF",t.THEN="THEN",t.ELSE="ELSE",t.ELIF="ELIF",t.FI="FI",t.FOR="FOR",t.WHILE="WHILE",t.UNTIL="UNTIL",t.DO="DO",t.DONE="DONE",t.CASE="CASE",t.ESAC="ESAC",t.IN="IN",t.FUNCTION="FUNCTION",t.SELECT="SELECT",t.TIME="TIME",t.COPROC="COPROC",t.WORD="WORD",t.NAME="NAME",t.NUMBER="NUMBER",t.ASSIGNMENT_WORD="ASSIGNMENT_WORD",t.COMMENT="COMMENT",t.HEREDOC_CONTENT="HEREDOC_CONTENT"})(f||(f={}));var je={if:f.IF,then:f.THEN,else:f.ELSE,elif:f.ELIF,fi:f.FI,for:f.FOR,while:f.WHILE,until:f.UNTIL,do:f.DO,done:f.DONE,case:f.CASE,esac:f.ESAC,in:f.IN,function:f.FUNCTION,select:f.SELECT,time:f.TIME,coproc:f.COPROC};function Lr(t){let e=t.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);if(!e)return!1;let n=t.slice(e[0].length);if(n===""||n==="+")return!0;if(n[0]==="["){let r=0,s=0;for(;s<n.length;s++)if(n[s]==="[")r++;else if(n[s]==="]"&&(r--,r===0))break;if(r!==0||s>=n.length)return!1;let o=n.slice(s+1);return o===""||o==="+"}return!1}var ts=[[";",";","&",f.SEMI_SEMI_AND],["<","<","<",f.TLESS],["&",">",">",f.AND_DGREAT]],rs=[["[","[",f.DBRACK_START],["]","]",f.DBRACK_END],["(","(",f.DPAREN_START],[")",")",f.DPAREN_END],["&","&",f.AND_AND],["|","|",f.OR_OR],[";",";",f.DSEMI],[";","&",f.SEMI_AND],["|","&",f.PIPE_AMP],[">",">",f.DGREAT],["<","&",f.LESSAND],[">","&",f.GREATAND],["<",">",f.LESSGREAT],[">","|",f.CLOBBER],["&",">",f.AND_GREAT]],ns={"|":f.PIPE,"&":f.AMP,";":f.SEMICOLON,"(":f.LPAREN,")":f.RPAREN,"<":f.LESS,">":f.GREAT};function ss(t){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)}var qe=class{input;pos=0;line=1;column=1;tokens=[];pendingHeredocs=[];constructor(e){this.input=e}tokenize(){let n=this.input.length,r=this.tokens,s=this.pendingHeredocs;for(;this.pos<n&&(this.skipWhitespace(),!(this.pos>=n));){if(s.length>0&&r.length>0&&r[r.length-1].type===f.NEWLINE){this.readHeredocContent();continue}let o=this.nextToken();o&&r.push(o)}return r.push({type:f.EOF,value:"",start:this.pos,end:this.pos,line:this.line,column:this.column}),r}skipWhitespace(){let e=this.input,n=e.length,r=this.pos,s=this.column,o=this.line;for(;r<n;){let i=e[r];if(i===" "||i===" ")r++,s++;else if(i==="\\"&&e[r+1]===`
12
12
  `)r+=2,o++,s=1;else break}this.pos=r,this.column=s,this.line=o}nextToken(){let e=this.input,n=this.pos,r=this.line,s=this.column,o=e[n],i=e[n+1],a=e[n+2];if(o==="#")return this.readComment(n,r,s);if(o===`
13
13
  `)return this.pos=n+1,this.line++,this.column=1,{type:f.NEWLINE,value:`
14
- `,start:n,end:n+1,line:r,column:s};if(o==="<"&&i==="<"&&a==="-")return this.pos=n+3,this.column=s+3,this.registerHeredocFromLookahead(!0),this.makeToken(f.DLESSDASH,"<<-",n,r,s);for(let[c,u,d,h]of ns)if(o===c&&i===u&&a===d)return this.pos=n+3,this.column=s+3,this.makeToken(h,c+u+d,n,r,s);if(o==="<"&&i==="<")return this.pos=n+2,this.column=s+2,this.registerHeredocFromLookahead(!1),this.makeToken(f.DLESS,"<<",n,r,s);for(let[c,u,d]of ss)if(o===c&&i===u)return this.pos=n+2,this.column=s+2,this.makeToken(d,c+u,n,r,s);let l=is[o];return l?(this.pos=n+1,this.column=s+1,this.makeToken(l,o,n,r,s)):o==="{"?i==="}"?(this.pos=n+2,this.column=s+2,{type:f.WORD,value:"{}",start:n,end:n+2,line:r,column:s,quoted:!1,singleQuoted:!1}):this.scanBraceExpansion(n)!==null?this.readWordWithBraceExpansion(n,r,s):this.scanLiteralBraceWord(n)!==null?this.readWordWithBraceExpansion(n,r,s):i!==void 0&&i!==" "&&i!==" "&&i!==`
14
+ `,start:n,end:n+1,line:r,column:s};if(o==="<"&&i==="<"&&a==="-")return this.pos=n+3,this.column=s+3,this.registerHeredocFromLookahead(!0),this.makeToken(f.DLESSDASH,"<<-",n,r,s);for(let[c,u,d,h]of ts)if(o===c&&i===u&&a===d)return this.pos=n+3,this.column=s+3,this.makeToken(h,c+u+d,n,r,s);if(o==="<"&&i==="<")return this.pos=n+2,this.column=s+2,this.registerHeredocFromLookahead(!1),this.makeToken(f.DLESS,"<<",n,r,s);for(let[c,u,d]of rs)if(o===c&&i===u)return this.pos=n+2,this.column=s+2,this.makeToken(d,c+u,n,r,s);let l=ns[o];return l?(this.pos=n+1,this.column=s+1,this.makeToken(l,o,n,r,s)):o==="{"?i==="}"?(this.pos=n+2,this.column=s+2,{type:f.WORD,value:"{}",start:n,end:n+2,line:r,column:s,quoted:!1,singleQuoted:!1}):this.scanBraceExpansion(n)!==null?this.readWordWithBraceExpansion(n,r,s):this.scanLiteralBraceWord(n)!==null?this.readWordWithBraceExpansion(n,r,s):i!==void 0&&i!==" "&&i!==" "&&i!==`
15
15
  `?this.readWord(n,r,s):(this.pos=n+1,this.column=s+1,this.makeToken(f.LBRACE,"{",n,r,s)):o==="}"?this.isWordCharFollowing(n+1)?this.readWord(n,r,s):(this.pos=n+1,this.column=s+1,this.makeToken(f.RBRACE,"}",n,r,s)):o==="!"?i==="="?(this.pos=n+2,this.column=s+2,this.makeToken(f.WORD,"!=",n,r,s)):(this.pos=n+1,this.column=s+1,this.makeToken(f.BANG,"!",n,r,s)):this.readWord(n,r,s)}makeToken(e,n,r,s,o){return{type:e,value:n,start:r,end:this.pos,line:s,column:o}}readComment(e,n,r){let s=this.input,o=s.length,i=this.pos;for(;i<o&&s[i]!==`
16
16
  `;)i++;let a=s.slice(e,i);return this.pos=i,this.column=r+(i-e),{type:f.COMMENT,value:a,start:e,end:i,line:n,column:r}}readWord(e,n,r){let s=this.input,o=s.length,i=this.pos,a=i;for(;i<o;){let p=s[i];if(p===" "||p===" "||p===`
17
17
  `||p===";"||p==="&"||p==="|"||p==="("||p===")"||p==="<"||p===">"||p==="'"||p==='"'||p==="\\"||p==="$"||p==="`"||p==="{"||p==="}"||p==="~"||p==="*"||p==="?"||p==="[")break;i++}if(i>a){let p=s[i];if(i>=o||p===" "||p===" "||p===`
18
- `||p===";"||p==="&"||p==="|"||p==="("||p===")"||p==="<"||p===">"){let E=s.slice(a,i);if(this.pos=i,this.column=r+(i-a),qe[E])return{type:qe[E],value:E,start:e,end:i,line:n,column:r};let g=E.indexOf("=");return g>0&&Tr(E.slice(0,g))?{type:f.ASSIGNMENT_WORD,value:E,start:e,end:i,line:n,column:r}:/^[0-9]+$/.test(E)?{type:f.NUMBER,value:E,start:e,end:i,line:n,column:r}:/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(E)?{type:f.NAME,value:E,start:e,end:i,line:n,column:r,quoted:!1,singleQuoted:!1}:{type:f.WORD,value:E,start:e,end:i,line:n,column:r,quoted:!1,singleQuoted:!1}}}i=this.pos;let l=this.column,c=this.line,u="",d=!1,h=!1,m=!1,y=!1,w=s[i]==='"'||s[i]==="'";for(;i<o;){let p=s[i];if(!m&&!y&&(p===" "||p===" "||p===`
18
+ `||p===";"||p==="&"||p==="|"||p==="("||p===")"||p==="<"||p===">"){let E=s.slice(a,i);if(this.pos=i,this.column=r+(i-a),je[E])return{type:je[E],value:E,start:e,end:i,line:n,column:r};let g=E.indexOf("=");return g>0&&Lr(E.slice(0,g))?{type:f.ASSIGNMENT_WORD,value:E,start:e,end:i,line:n,column:r}:/^[0-9]+$/.test(E)?{type:f.NUMBER,value:E,start:e,end:i,line:n,column:r}:/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(E)?{type:f.NAME,value:E,start:e,end:i,line:n,column:r,quoted:!1,singleQuoted:!1}:{type:f.WORD,value:E,start:e,end:i,line:n,column:r,quoted:!1,singleQuoted:!1}}}i=this.pos;let l=this.column,c=this.line,u="",d=!1,h=!1,m=!1,y=!1,w=s[i]==='"'||s[i]==="'";for(;i<o;){let p=s[i];if(!m&&!y&&(p===" "||p===" "||p===`
19
19
  `||p===";"||p==="&"||p==="|"||p==="("||p===")"||p==="<"||p===">"))break;if(p==="$"&&i+1<o&&s[i+1]==="'"&&!m&&!y){for(u+="$'",i+=2,l+=2;i<o&&s[i]!=="'";)s[i]==="\\"&&i+1<o?(u+=s[i]+s[i+1],i+=2,l+=2):(u+=s[i],i++,l++);i<o&&(u+="'",i++,l++);continue}if(p==="$"&&i+1<o&&s[i+1]==='"'&&!m&&!y){i++,l++,y=!0,d=!0,u===""&&(w=!0),i++,l++;continue}if(p==="'"&&!y){m?(m=!1,w||(u+=p)):(m=!0,w?(h=!0,d=!0):u+=p),i++,l++;continue}if(p==='"'&&!m){y?(y=!1,w||(u+=p)):(y=!0,w?d=!0:u+=p),i++,l++;continue}if(p==="\\"&&!m&&i+1<o){let E=s[i+1];if(E===`
20
20
  `){i+=2,c++,l=1;continue}if(y){if(E==='"'||E==="\\"||E==="$"||E==="`"||E===`
21
21
  `){E==="$"||E==="`"?u+=p+E:u+=E,i+=2,l+=2;continue}}else{E==='"'||E==="'"?u+=p+E:u+=E,i+=2,l+=2;continue}}if(p==="$"&&i+1<o&&s[i+1]==="("){u+=p,i++,l++,u+=s[i],i++,l++;let E=1,g=!1,b=!1,C=0,I=!1,k="",me=s[i]==="(";for(;E>0&&i<o;){let _=s[i];if(u+=_,g)_==="'"&&(g=!1);else if(b)_==="\\"&&i+1<o?(u+=s[i+1],i++,l++):_==='"'&&(b=!1);else if(_==="'")g=!0,k="";else if(_==='"')b=!0,k="";else if(_==="\\"&&i+1<o)u+=s[i+1],i++,l++,k="";else if(_==="#"&&!me&&(k===""||/\s/.test(s[i-1]||""))){for(;i+1<o&&s[i+1]!==`
@@ -24,7 +24,7 @@ Gid: ${r} ${r} ${r} ${r}
24
24
  `&&(c++,l=0),i++,l++}continue}if(p==="$"&&i+1<o&&s[i+1]==="{"){u+=p,i++,l++,u+=s[i],i++,l++;let E=1;for(;E>0&&i<o;){let g=s[i];u+=g,g==="{"?E++:g==="}"?E--:g===`
25
25
  `&&(c++,l=0),i++,l++}continue}if(p==="$"&&i+1<o){let E=s[i+1];if(E==="#"||E==="?"||E==="$"||E==="!"||E==="@"||E==="*"||E==="-"||E>="0"&&E<="9"){u+=p+E,i+=2,l+=2;continue}}if(p==="`"){for(u+=p,i++,l++;i<o&&s[i]!=="`";){let E=s[i];u+=E,E==="\\"&&i+1<o&&(u+=s[i+1],i++,l++),E===`
26
26
  `&&(c++,l=0),i++,l++}i<o&&(u+=s[i],i++,l++);continue}u+=p,i++,p===`
27
- `?(c++,l=1):l++}if(this.pos=i,this.column=l,this.line=c,u==="")return{type:f.WORD,value:"",start:e,end:i,line:n,column:r,quoted:d,singleQuoted:h};if(!d&&qe[u])return{type:qe[u],value:u,start:e,end:i,line:n,column:r};if(!w){let p=u.indexOf("=");if(p>0&&Tr(u.slice(0,p)))return{type:f.ASSIGNMENT_WORD,value:u,start:e,end:i,line:n,column:r,quoted:d,singleQuoted:h}}return/^[0-9]+$/.test(u)?{type:f.NUMBER,value:u,start:e,end:i,line:n,column:r}:os(u)?{type:f.NAME,value:u,start:e,end:i,line:n,column:r,quoted:d,singleQuoted:h}:{type:f.WORD,value:u,start:e,end:i,line:n,column:r,quoted:d,singleQuoted:h}}readHeredocContent(){for(;this.pendingHeredocs.length>0;){let e=this.pendingHeredocs.shift();if(!e)break;let n=this.pos,r=this.line,s=this.column,o="";for(;this.pos<this.input.length;){let i=this.pos,a="";for(;this.pos<this.input.length&&this.input[this.pos]!==`
27
+ `?(c++,l=1):l++}if(this.pos=i,this.column=l,this.line=c,u==="")return{type:f.WORD,value:"",start:e,end:i,line:n,column:r,quoted:d,singleQuoted:h};if(!d&&je[u])return{type:je[u],value:u,start:e,end:i,line:n,column:r};if(!w){let p=u.indexOf("=");if(p>0&&Lr(u.slice(0,p)))return{type:f.ASSIGNMENT_WORD,value:u,start:e,end:i,line:n,column:r,quoted:d,singleQuoted:h}}return/^[0-9]+$/.test(u)?{type:f.NUMBER,value:u,start:e,end:i,line:n,column:r}:ss(u)?{type:f.NAME,value:u,start:e,end:i,line:n,column:r,quoted:d,singleQuoted:h}:{type:f.WORD,value:u,start:e,end:i,line:n,column:r,quoted:d,singleQuoted:h}}readHeredocContent(){for(;this.pendingHeredocs.length>0;){let e=this.pendingHeredocs.shift();if(!e)break;let n=this.pos,r=this.line,s=this.column,o="";for(;this.pos<this.input.length;){let i=this.pos,a="";for(;this.pos<this.input.length&&this.input[this.pos]!==`
28
28
  `;)a+=this.input[this.pos],this.pos++,this.column++;if((e.stripTabs?a.replace(/^\t+/,""):a)===e.delimiter){this.pos<this.input.length&&this.input[this.pos]===`
29
29
  `&&(this.pos++,this.line++,this.column=1);break}o+=a,this.pos<this.input.length&&this.input[this.pos]===`
30
30
  `&&(o+=`
@@ -32,48 +32,48 @@ Gid: ${r} ${r} ${r} ${r}
32
32
  `||n===";"||n==="&"||n==="|"||n==="("||n===")"||n==="<"||n===">")}readWordWithBraceExpansion(e,n,r){let s=this.input,o=s.length,i=e,a=r;for(;i<o;){let c=s[i];if(c===" "||c===" "||c===`
33
33
  `||c===";"||c==="&"||c==="|"||c==="("||c===")"||c==="<"||c===">")break;if(c==="{"){if(this.scanBraceExpansion(i)!==null){let d=1;for(i++,a++;i<o&&d>0;)s[i]==="{"?d++:s[i]==="}"&&d--,i++,a++;continue}i++,a++;continue}if(c==="}"){i++,a++;continue}if(c==="$"&&i+1<o&&s[i+1]==="("){i++,a++,i++,a++;let u=1;for(;u>0&&i<o;)s[i]==="("?u++:s[i]===")"&&u--,i++,a++;continue}if(c==="$"&&i+1<o&&s[i+1]==="{"){i++,a++,i++,a++;let u=1;for(;u>0&&i<o;)s[i]==="{"?u++:s[i]==="}"&&u--,i++,a++;continue}if(c==="`"){for(i++,a++;i<o&&s[i]!=="`";)s[i]==="\\"&&i+1<o?(i+=2,a+=2):(i++,a++);i<o&&(i++,a++);continue}i++,a++}let l=s.slice(e,i);return this.pos=i,this.column=a,{type:f.WORD,value:l,start:e,end:i,line:n,column:r,quoted:!1,singleQuoted:!1}}scanBraceExpansion(e){let n=this.input,r=n.length,s=e+1,o=1,i=!1,a=!1;for(;s<r&&o>0;){let l=n[s];if(l==="{")o++,s++;else if(l==="}")o--,s++;else if(l===","&&o===1)i=!0,s++;else if(l==="."&&s+1<r&&n[s+1]===".")a=!0,s+=2;else{if(l===" "||l===" "||l===`
34
34
  `||l===";"||l==="&"||l==="|")return null;s++}}return o===0&&(i||a)?n.slice(e,s):null}scanLiteralBraceWord(e){let n=this.input,r=n.length,s=e+1,o=1;for(;s<r&&o>0;){let i=n[s];if(i==="{")o++,s++;else if(i==="}"){if(o--,o===0)return n.slice(e,s+1);s++}else{if(i===" "||i===" "||i===`
35
- `||i===";"||i==="&"||i==="|")return null;s++}}return null}};var St=1e6,bt=1e5,Wr=1e6,Fr=new Set([f.LESS,f.GREAT,f.DLESS,f.DGREAT,f.LESSAND,f.GREATAND,f.LESSGREAT,f.DLESSDASH,f.CLOBBER,f.TLESS,f.AND_GREAT,f.AND_DGREAT]),Mr=new Set([f.LESS,f.GREAT,f.DLESS,f.DGREAT,f.LESSAND,f.GREATAND,f.LESSGREAT,f.DLESSDASH,f.CLOBBER,f.TLESS]),re=class extends Error{line;column;token;constructor(e,n,r,s=void 0){super(`Parse error at ${n}:${r}: ${e}`),this.line=n,this.column=r,this.token=s,this.name="ParseException"}};function zr(t,e,n){let r=n+1;for(;r<e.length&&/[a-zA-Z0-9_-]/.test(e[r]);)r++;return r}function Ct(t,e,n,r,s){let o=1,i=n+1;for(;i<e.length&&o>0;)e[i]===r?o++:e[i]===s&&o--,o>0&&i++;return o===0?i:-1}function ye(t,e,n){let r=n,s=1;for(;r<e.length&&s>0;){let o=e[r];if(o==="\\"&&r+1<e.length){r+=2;continue}if(o==="'"){let i=e.indexOf("'",r+1);if(i!==-1){r=i+1;continue}}if(o==='"'){for(r++;r<e.length&&e[r]!=='"';)e[r]==="\\"&&r+1<e.length?r+=2:r++;r<e.length&&r++;continue}o==="{"?s++:o==="}"&&s--,s>0&&r++}return r}function Ur(t,e,n){let r=n,s=!1;for(;r<e.length;){let o=e[r];if(o==="/"&&s||o==="}")break;if(o==="'"){let i=e.indexOf("'",r+1);if(i!==-1){r=i+1,s=!0;continue}}if(o==='"'){for(r++;r<e.length&&e[r]!=='"';)e[r]==="\\"&&r+1<e.length?r+=2:r++;r<e.length&&r++,s=!0;continue}o==="\\"?(r+=2,s=!0):(r++,s=!0)}return r}function Gr(t,e,n){let r=n,s="";for(;r<e.length;){let o=e[r];if(o==="*"||o==="?")s+=o,r++;else if(o==="["){let i=as(e,r);i===-1?(s+=o,r++):(s+=e.slice(r,i+1),r=i+1)}else break}return{pattern:s,endIndex:r}}function as(t,e){let n=e+1;for(n<t.length&&t[n]==="^"&&n++,n<t.length&&t[n]==="]"&&n++;n<t.length;){let r=t[n];if(r==="\\"&&n+1<t.length){n+=2;continue}if(r==="]")return n;if(r==='"'||r==="$"||r==="`")return-1;if(r==="'"){let s=t.indexOf("'",n+1);if(s!==-1){n=s+1;continue}}if(r==="["&&n+1<t.length&&t[n+1]===":"){let s=t.indexOf(":]",n+2);if(s!==-1){n=s+2;continue}}if(r==="["&&n+1<t.length&&(t[n+1]==="."||t[n+1]==="=")){let o=`${t[n+1]}]`,i=t.indexOf(o,n+2);if(i!==-1){n=i+2;continue}}n++}return-1}function Hr(t,e,n){let r="",s=n;for(;s<e.length&&e[s]!=="'";){let o=e[s];if(o==="\\"&&s+1<e.length)switch(e[s+1]){case"n":r+=`
36
- `,s+=2;break;case"t":r+=" ",s+=2;break;case"r":r+="\r",s+=2;break;case"\\":r+="\\",s+=2;break;case"'":r+="'",s+=2;break;case'"':r+='"',s+=2;break;case"a":r+="\x07",s+=2;break;case"b":r+="\b",s+=2;break;case"e":case"E":r+="\x1B",s+=2;break;case"f":r+="\f",s+=2;break;case"v":r+="\v",s+=2;break;case"x":{let a=e.slice(s+2,s+4),l=parseInt(a,16);Number.isNaN(l)?(r+="\\x",s+=2):(r+=String.fromCharCode(l),s+=4);break}case"u":{let a=e.slice(s+2,s+6),l=parseInt(a,16);Number.isNaN(l)?(r+="\\u",s+=2):(r+=String.fromCharCode(l),s+=6);break}case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":{let a="",l=s+1;for(;l<e.length&&l<s+4&&/[0-7]/.test(e[l]);)a+=e[l],l++;let c=parseInt(a,8);r+=String.fromCharCode(c),s=l;break}default:r+=o,s++}else r+=o,s++}return s<e.length&&e[s]==="'"&&s++,{part:A.literal(r),endIndex:s}}function Nt(t,e){let n=e.trim();return n===""?{type:"ArithmeticExpression",expression:{type:"ArithNumber",value:0}}:L(t,n)}function Br(t){let e=[],n="",r=0;for(let s=0;s<t.length;s++){let o=t[s];o==="{"?(r++,n+=o):o==="}"?(r--,n+=o):o===","&&r===0?(e.push(n),n=""):n+=o}return e.push(n),e}function Vr(t,e,n,r){let s=Ct(t,e,n,"{","}");if(s===-1)return null;let o=e.slice(n+1,s),i=o.match(/^(-?\d+)\.\.(-?\d+)(?:\.\.(-?\d+))?$/);if(i)return{part:{type:"BraceExpansion",items:[{type:"Range",start:Number.parseInt(i[1],10),end:Number.parseInt(i[2],10),step:i[3]?Number.parseInt(i[3],10):void 0,startStr:i[1],endStr:i[2]}]},endIndex:s+1};let a=o.match(/^([a-zA-Z])\.\.([a-zA-Z])(?:\.\.(-?\d+))?$/);return a?{part:{type:"BraceExpansion",items:[{type:"Range",start:a[1],end:a[2],step:a[3]?Number.parseInt(a[3],10):void 0}]},endIndex:s+1}:o.includes(",")&&r?{part:{type:"BraceExpansion",items:Br(o).map(u=>({type:"Word",word:A.word(r(t,u,!1,!1,!1))}))},endIndex:s+1}:o.includes(",")?{part:{type:"BraceExpansion",items:Br(o).map(u=>({type:"Word",word:A.word([A.literal(u)])}))},endIndex:s+1}:null}function qr(t,e){let n="";for(let r of e.parts)switch(r.type){case"Literal":case"SingleQuoted":case"Escaped":n+=r.value;break;case"DoubleQuoted":n+='"';for(let s of r.parts)s.type==="Literal"||s.type==="Escaped"?n+=s.value:s.type==="ParameterExpansion"&&(n+=`\${${s.parameter}}`);n+='"';break;case"ParameterExpansion":n+=`\${${r.parameter}}`;break;case"Glob":n+=r.pattern;break;default:n+=r.type}return n}function jr(t,e){return{[f.LESS]:"<",[f.GREAT]:">",[f.DGREAT]:">>",[f.LESSAND]:"<&",[f.GREATAND]:">&",[f.LESSGREAT]:"<>",[f.CLOBBER]:">|",[f.TLESS]:"<<<",[f.AND_GREAT]:"&>",[f.AND_DGREAT]:"&>>",[f.DLESS]:"<",[f.DLESSDASH]:"<"}[e]||">"}function Ze(t){let e=t.current(),n=e.type;if(n===f.NUMBER){let r=t.peek(1);return e.end!==r.start?!1:Mr.has(r.type)}return Fr.has(n)}function Qe(t){let e=null;t.check(f.NUMBER)&&(e=Number.parseInt(t.advance().value,10));let n=t.advance(),r=jr(t,n.type);if(n.type===f.DLESS||n.type===f.DLESSDASH)return cs(t,r,e,n.type===f.DLESSDASH);t.isWord()||t.error("Expected redirection target");let s=t.parseWord();return A.redirection(r,s,e)}function cs(t,e,n,r){t.isWord()||t.error("Expected here-document delimiter");let s=t.advance(),o=s.value,i=s.quoted||!1;(o.startsWith("'")&&o.endsWith("'")||o.startsWith('"')&&o.endsWith('"'))&&(o=o.slice(1,-1));let a=A.redirection(r?"<<-":"<<",A.hereDoc(o,A.word([]),r,i),n);return t.addPendingHeredoc(a,o,r,i),a}function Qr(t){let e=t.current().line,n=[],r=null,s=[],o=[];for(;t.check(f.ASSIGNMENT_WORD);)t.checkIterationLimit(),n.push(ls(t));for(;Ze(t);)t.checkIterationLimit(),o.push(Qe(t));for(t.isWord()&&(r=t.parseWord());(!t.isStatementEnd()||t.check(f.RBRACE))&&!t.check(f.PIPE,f.PIPE_AMP);)if(t.checkIterationLimit(),Ze(t))o.push(Qe(t));else if(t.check(f.RBRACE)){let a=t.advance();s.push(t.parseWordFromString(a.value,!1,!1))}else if(t.isWord())s.push(t.parseWord());else if(t.check(f.ASSIGNMENT_WORD)){let a=t.advance(),l=a.value,c=l.endsWith("="),u=l.endsWith("=(");if((c||u)&&(u||t.check(f.LPAREN))){let d=u?l.slice(0,-2):l.slice(0,-1);u||t.expect(f.LPAREN);let h=$t(t);t.expect(f.RPAREN);let m=h.map(w=>qr(t,w)),y=`${d}=(${m.join(" ")})`;s.push(t.parseWordFromString(y,!1,!1))}else s.push(t.parseWordFromString(l,a.quoted,a.singleQuoted))}else if(t.check(f.LPAREN))t.error("syntax error near unexpected token `('");else break;let i=A.simpleCommand(r,s,n,o);return i.line=e,i}function ls(t){let e=t.expect(f.ASSIGNMENT_WORD),n=e.value,r=n.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);r||t.error(`Invalid assignment: ${n}`);let s=r[0],o,i=s.length;if(n[i]==="["){let d=0,h=i+1;for(;i<n.length;i++)if(n[i]==="[")d++;else if(n[i]==="]"&&(d--,d===0))break;d!==0&&t.error(`Invalid assignment: ${n}`),o=n.slice(h,i),i++}let a=n[i]==="+";a&&i++,n[i]!=="="&&t.error(`Invalid assignment: ${n}`),i++;let l=n.slice(i);if(l==="("){let d=$t(t);t.expect(f.RPAREN);let h=o!==void 0?`${s}[${o}]`:s;return A.assignment(h,null,a,d)}if(l===""&&t.check(f.LPAREN)){let d=t.current();if(e.end===d.start){t.advance();let h=$t(t);t.expect(f.RPAREN);let m=o!==void 0?`${s}[${o}]`:s;return A.assignment(m,null,a,h)}}let c=l?t.parseWordFromString(l,e.quoted,e.singleQuoted,!0):null,u=o!==void 0?`${s}[${o}]`:s;return A.assignment(u,c,a,null)}function $t(t){let e=[];for(t.skipNewlines();!t.check(f.RPAREN,f.EOF);)t.checkIterationLimit(),t.isWord()?e.push(t.parseWord()):t.advance(),t.skipNewlines();return e}function vt(t){t.expect(f.IF);let e=[],n=t.parseCompoundList();t.expect(f.THEN);let r=t.parseCompoundList();if(r.length===0){let i=t.check(f.FI)?"fi":t.check(f.ELSE)?"else":t.check(f.ELIF)?"elif":"fi";t.error(`syntax error near unexpected token \`${i}'`)}for(e.push({condition:n,body:r});t.check(f.ELIF);){t.advance();let i=t.parseCompoundList();t.expect(f.THEN);let a=t.parseCompoundList();if(a.length===0){let l=t.check(f.FI)?"fi":t.check(f.ELSE)?"else":t.check(f.ELIF)?"elif":"fi";t.error(`syntax error near unexpected token \`${l}'`)}e.push({condition:i,body:a})}let s=null;t.check(f.ELSE)&&(t.advance(),s=t.parseCompoundList(),s.length===0&&t.error("syntax error near unexpected token `fi'")),t.expect(f.FI);let o=t.parseOptionalRedirections();return A.ifNode(e,s,o)}function Pt(t){if(t.expect(f.FOR),t.check(f.DPAREN_START))return fs(t);t.isWord()||t.error("Expected variable name in for loop");let n=t.advance().value,r=null;if(t.skipNewlines(),t.check(f.IN))for(t.advance(),r=[];!t.check(f.SEMICOLON,f.NEWLINE,f.DO,f.EOF)&&t.isWord();)r.push(t.parseWord());t.check(f.SEMICOLON)&&t.advance(),t.skipNewlines(),t.expect(f.DO);let s=t.parseCompoundList();t.expect(f.DONE);let o=t.parseOptionalRedirections();return A.forNode(n,r,s,o)}function fs(t){t.expect(f.DPAREN_START);let e=null,n=null,r=null,s=["","",""],o=0,i=0;for(;!t.check(f.DPAREN_END,f.EOF);){let c=t.advance();if(c.type===f.SEMICOLON&&i===0){if(o++,o>2)break}else c.value==="("&&i++,c.value===")"&&i--,s[o]+=c.value}t.expect(f.DPAREN_END),s[0].trim()&&(e=L(t,s[0].trim())),s[1].trim()&&(n=L(t,s[1].trim())),s[2].trim()&&(r=L(t,s[2].trim())),t.skipNewlines(),t.check(f.SEMICOLON)&&t.advance(),t.skipNewlines(),t.expect(f.DO);let a=t.parseCompoundList();t.expect(f.DONE);let l=t.parseOptionalRedirections();return{type:"CStyleFor",init:e,condition:n,update:r,body:a,redirections:l}}function It(t){t.expect(f.WHILE);let e=t.parseCompoundList();t.expect(f.DO);let n=t.parseCompoundList();n.length===0&&t.error("syntax error near unexpected token `done'"),t.expect(f.DONE);let r=t.parseOptionalRedirections();return A.whileNode(e,n,r)}function Rt(t){t.expect(f.UNTIL);let e=t.parseCompoundList();t.expect(f.DO);let n=t.parseCompoundList();n.length===0&&t.error("syntax error near unexpected token `done'"),t.expect(f.DONE);let r=t.parseOptionalRedirections();return A.untilNode(e,n,r)}function kt(t){t.expect(f.CASE),t.isWord()||t.error("Expected word after 'case'");let e=t.parseWord();t.skipNewlines(),t.expect(f.IN),t.skipNewlines();let n=[];for(;!t.check(f.ESAC,f.EOF);){t.checkIterationLimit();let s=t.getPos(),o=ds(t);if(o&&n.push(o),t.skipNewlines(),t.getPos()===s&&!o)break}t.expect(f.ESAC);let r=t.parseOptionalRedirections();return A.caseNode(e,n,r)}function ds(t){t.check(f.LPAREN)&&t.advance();let e=[];for(;t.isWord()&&(e.push(t.parseWord()),t.check(f.PIPE));)t.advance();if(e.length===0)return null;t.expect(f.RPAREN),t.skipNewlines();let n=[];for(;!t.check(f.DSEMI,f.SEMI_AND,f.SEMI_SEMI_AND,f.ESAC,f.EOF);){t.checkIterationLimit(),t.isWord()&&t.peek(1).type===f.RPAREN&&t.error("syntax error near unexpected token `)'"),t.check(f.LPAREN)&&t.peek(1).type===f.WORD&&t.error(`syntax error near unexpected token \`${t.peek(1).value}'`);let s=t.getPos(),o=t.parseStatement();if(o&&n.push(o),t.skipSeparators(!1),t.getPos()===s&&!o)break}let r=";;";return t.check(f.DSEMI)?(t.advance(),r=";;"):t.check(f.SEMI_AND)?(t.advance(),r=";&"):t.check(f.SEMI_SEMI_AND)&&(t.advance(),r=";;&"),A.caseItem(e,n,r)}function Dt(t){t.peek(1).type,f.LPAREN,t.expect(f.LPAREN),t.check(f.LPAREN)&&t.advance();let e=t.parseCompoundList();t.expect(f.RPAREN);let n=t.parseOptionalRedirections();return A.subshell(e,n)}function Ot(t){t.expect(f.LBRACE);let e=t.parseCompoundList();t.expect(f.RBRACE);let n=t.parseOptionalRedirections();return A.group(e,n)}var ms=["-a","-b","-c","-d","-e","-f","-g","-h","-k","-p","-r","-s","-t","-u","-w","-x","-G","-L","-N","-O","-S","-z","-n","-o","-v","-R"],ps=["==","!=","=~","<",">","-eq","-ne","-lt","-le","-gt","-ge","-nt","-ot","-ef"];function Lt(t){return t.skipNewlines(),ys(t)}function ys(t){let e=Kr(t);for(t.skipNewlines();t.check(f.OR_OR);){t.advance(),t.skipNewlines();let n=Kr(t);e={type:"CondOr",left:e,right:n},t.skipNewlines()}return e}function Kr(t){let e=_t(t);for(t.skipNewlines();t.check(f.AND_AND);){t.advance(),t.skipNewlines();let n=_t(t);e={type:"CondAnd",left:e,right:n},t.skipNewlines()}return e}function _t(t){return t.skipNewlines(),t.check(f.BANG)?(t.advance(),t.skipNewlines(),{type:"CondNot",operand:_t(t)}):Es(t)}function Es(t){if(t.check(f.LPAREN)){t.advance();let e=Lt(t);return t.expect(f.RPAREN),{type:"CondGroup",expression:e}}if(t.isWord()){let e=t.current(),n=e.value;if(ms.includes(n)&&!e.quoted&&(t.advance(),t.check(f.DBRACK_END)&&t.error(`Expected operand after ${n}`),t.isWord())){let s=t.parseWord();return{type:"CondUnary",operator:n,operand:s}}let r=t.parseWord();if(t.isWord()&&ps.includes(t.current().value)){let s=t.advance().value,o=t.parseWord();return{type:"CondBinary",operator:s,left:r,right:o}}if(t.check(f.LESS)){t.advance();let s=t.parseWord();return{type:"CondBinary",operator:"<",left:r,right:s}}if(t.check(f.GREAT)){t.advance();let s=t.parseWord();return{type:"CondBinary",operator:">",left:r,right:s}}if(t.isWord()&&t.current().value==="="){t.advance();let s=t.parseWord();return{type:"CondBinary",operator:"==",left:r,right:s}}return{type:"CondWord",word:r}}t.error("Expected conditional expression")}function gs(t,e,n){let r=n+1,s=e[r];if("@*#?$!-0123456789".includes(s))return{part:A.parameterExpansion(s),endIndex:r+1};let o="";for(;r<e.length&&/[a-zA-Z0-9_]/.test(e[r]);)o+=e[r],r++;return{part:A.parameterExpansion(o),endIndex:r}}function As(t,e,n,r=!1){let s=n+2,o=!1;e[s]==="!"&&(o=!0,s++);let i=!1;e[s]==="#"&&!/[}:#%/^,]/.test(e[s+1]||"}")&&(i=!0,s++);let a="",l=e[s];if(/[@*#?$!-]/.test(l)&&!/[a-zA-Z0-9_]/.test(e[s+1]||""))a=l,s++;else for(;s<e.length&&/[a-zA-Z0-9_]/.test(e[s]);)a+=e[s],s++;if(e[s]==="["){let u=Ct(t,e,s,"[","]");a+=e.slice(s,u+1),s=u+1}a===""&&!o&&!i&&e[s]!=="}"&&t.error(`\${${e[s]}}: bad substitution`);let c=null;if(o){let u=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([@*])\]$/);if(u)c={type:"ArrayKeys",array:u[1],star:u[2]==="*"},a="";else if(e[s]==="*"||e[s]==="@"){let d=e[s];s++,c={type:"VarNamePrefix",prefix:a,star:d==="*"},a=""}else c={type:"Indirection"}}else if(i)if(e[s]===":")for(c={type:"LengthSliceError"};s<e.length&&e[s]!=="}";)s++;else e[s]!=="}"&&/[-+=?]/.test(e[s])?t.error(`\${#${a}${e.slice(s,e.indexOf("}",s))}}: bad substitution`):c={type:"Length"};if(!c&&s<e.length&&e[s]!=="}"){let u=xs(t,e,s,a,r);c=u.operation,s=u.endIndex}if(s<e.length&&e[s]!=="}"){let u=e[s];if(!/[:\-+=?#%/^,@[]/.test(u)){let d=s;for(;d<e.length&&e[d]!=="}";)d++;let h=e.slice(n,d+1);t.error(`\${${h.slice(2,-1)}}: bad substitution`)}}for(;s<e.length&&e[s]!=="}";)s++;return{part:A.parameterExpansion(a,c),endIndex:s+1}}function xs(t,e,n,r,s=!1){let o=n,i=e[o],a=e[o+1]||"";if(i===":"){let l=a;if("-=?+".includes(l)){o+=2;let E=ye(t,e,o),g=e.slice(o,E),b=ce(t,g,!1,!1,!0,!1,s),C=A.word(b.length>0?b:[A.literal("")]);if(l==="-")return{operation:{type:"DefaultValue",word:C,checkEmpty:!0},endIndex:E};if(l==="=")return{operation:{type:"AssignDefault",word:C,checkEmpty:!0},endIndex:E};if(l==="?")return{operation:{type:"ErrorIfUnset",word:C,checkEmpty:!0},endIndex:E};if(l==="+")return{operation:{type:"UseAlternative",word:C,checkEmpty:!0},endIndex:E}}o++;let c=ye(t,e,o),u=e.slice(o,c),d=-1,h=0,m=0;for(let p=0;p<u.length;p++){let E=u[p];if(E==="("||E==="[")h++;else if(E===")"||E==="]")h--;else if(E==="?"&&h===0)m++;else if(E===":"&&h===0)if(m>0)m--;else{d=p;break}}let y=d>=0?u.slice(0,d):u,w=d>=0?u.slice(d+1):null;return{operation:{type:"Substring",offset:Nt(t,y),length:w?Nt(t,w):null},endIndex:c}}if("-=?+".includes(i)){o++;let l=ye(t,e,o),c=e.slice(o,l),u=ce(t,c,!1,!1,!0,!1,s),d=A.word(u.length>0?u:[A.literal("")]);if(i==="-")return{operation:{type:"DefaultValue",word:d,checkEmpty:!1},endIndex:l};if(i==="=")return{operation:{type:"AssignDefault",word:d,checkEmpty:!1},endIndex:l};if(i==="?")return{operation:{type:"ErrorIfUnset",word:c?d:null,checkEmpty:!1},endIndex:l};if(i==="+")return{operation:{type:"UseAlternative",word:d,checkEmpty:!1},endIndex:l}}if(i==="#"||i==="%"){let l=a===i,c=i==="#"?"prefix":"suffix";o+=l?2:1;let u=ye(t,e,o),d=e.slice(o,u),h=ce(t,d,!1,!1,!1);return{operation:{type:"PatternRemoval",pattern:A.word(h.length>0?h:[A.literal("")]),side:c,greedy:l},endIndex:u}}if(i==="/"){let l=a==="/";o+=l?2:1;let c=null;e[o]==="#"?(c="start",o++):e[o]==="%"&&(c="end",o++);let u=Ur(t,e,o),d=e.slice(o,u),h=ce(t,d,!1,!1,!1),m=A.word(h.length>0?h:[A.literal("")]),y=null,w=u;if(e[u]==="/"){let p=u+1,E=ye(t,e,p),g=e.slice(p,E),b=ce(t,g,!1,!1,!1);y=A.word(b.length>0?b:[A.literal("")]),w=E}return{operation:{type:"PatternReplacement",pattern:m,replacement:y,all:l,anchor:c},endIndex:w}}if(i==="^"||i===","){let l=a===i,c=i==="^"?"upper":"lower";o+=l?2:1;let u=ye(t,e,o),d=e.slice(o,u),h=d?A.word([A.literal(d)]):null;return{operation:{type:"CaseModification",direction:c,all:l,pattern:h},endIndex:u}}return i==="@"&&/[QPaAEK]/.test(a)?{operation:{type:"Transform",operator:a},endIndex:o+2}:{operation:null,endIndex:o}}function Tt(t,e,n,r=!1){let s=n+1;if(s>=e.length)return{part:A.literal("$"),endIndex:s};let o=e[s];if(o==="("&&e[s+1]==="(")return t.parseArithmeticExpansion(e,n);if(o==="["){let i=1,a=s+1;for(;a<e.length&&i>0;)e[a]==="["?i++:e[a]==="]"&&i--,i>0&&a++;if(i===0){let l=e.slice(s+1,a),c=L(t,l);return{part:A.arithmeticExpansion(c),endIndex:a+1}}}return o==="("?t.parseCommandSubstitution(e,n):o==="{"?As(t,e,n,r):/[a-zA-Z_0-9@*#?$!-]/.test(o)?gs(t,e,n):{part:A.literal("$"),endIndex:s}}function Ss(t,e){let n=[],r=0,s="",o=()=>{s&&(n.push(A.literal(s)),s="")};for(;r<e.length;){let i=e[r];if(i==="\\"&&r+1<e.length){let a=e[r+1];if(a==="$"||a==="`"){s+=a,r+=2;continue}s+=i,r++;continue}if(i==="$"){o();let{part:a,endIndex:l}=Tt(t,e,r,!0);a&&n.push(a),r=l;continue}if(i==="`"){o();let{part:a,endIndex:l}=t.parseBacktickSubstitution(e,r,!0);n.push(a),r=l;continue}s+=i,r++}return o(),n}function bs(t,e,n){let r=[],s=n,o="",i=()=>{o&&(r.push(A.literal(o)),o="")};for(;s<e.length&&e[s]!=='"';){let a=e[s];if(a==="\\"&&s+1<e.length){let l=e[s+1];if('"\\$`\n'.includes(l)){o+=l,s+=2;continue}o+=a,s++;continue}if(a==="$"){i();let{part:l,endIndex:c}=Tt(t,e,s,!0);l&&r.push(l),s=c;continue}if(a==="`"){i();let{part:l,endIndex:c}=t.parseBacktickSubstitution(e,s,!0);r.push(l),s=c;continue}o+=a,s++}return i(),{part:A.doubleQuoted(r),endIndex:s}}function ce(t,e,n=!1,r=!1,s=!1,o=!1,i=!1){if(r)return[A.singleQuoted(e)];if(n){let d=Ss(t,e);return[A.doubleQuoted(d)]}let a=[],l=0,c="",u=()=>{c&&(a.push(A.literal(c)),c="")};for(;l<e.length;){let d=e[l];if(d==="\\"&&l+1<e.length){let h=e[l+1];(o?h==="$"||h==="`"||h==="\\"||h===`
35
+ `||i===";"||i==="&"||i==="|")return null;s++}}return null}};var xt=1e6,St=1e5,Tr=1e6,Wr=new Set([f.LESS,f.GREAT,f.DLESS,f.DGREAT,f.LESSAND,f.GREATAND,f.LESSGREAT,f.DLESSDASH,f.CLOBBER,f.TLESS,f.AND_GREAT,f.AND_DGREAT]),Fr=new Set([f.LESS,f.GREAT,f.DLESS,f.DGREAT,f.LESSAND,f.GREATAND,f.LESSGREAT,f.DLESSDASH,f.CLOBBER,f.TLESS]),re=class extends Error{line;column;token;constructor(e,n,r,s=void 0){super(`Parse error at ${n}:${r}: ${e}`),this.line=n,this.column=r,this.token=s,this.name="ParseException"}};function Br(t,e,n){let r=n+1;for(;r<e.length&&/[a-zA-Z0-9_-]/.test(e[r]);)r++;return r}function bt(t,e,n,r,s){let o=1,i=n+1;for(;i<e.length&&o>0;)e[i]===r?o++:e[i]===s&&o--,o>0&&i++;return o===0?i:-1}function ye(t,e,n){let r=n,s=1;for(;r<e.length&&s>0;){let o=e[r];if(o==="\\"&&r+1<e.length){r+=2;continue}if(o==="'"){let i=e.indexOf("'",r+1);if(i!==-1){r=i+1;continue}}if(o==='"'){for(r++;r<e.length&&e[r]!=='"';)e[r]==="\\"&&r+1<e.length?r+=2:r++;r<e.length&&r++;continue}o==="{"?s++:o==="}"&&s--,s>0&&r++}return r}function zr(t,e,n){let r=n,s=!1;for(;r<e.length;){let o=e[r];if(o==="/"&&s||o==="}")break;if(o==="'"){let i=e.indexOf("'",r+1);if(i!==-1){r=i+1,s=!0;continue}}if(o==='"'){for(r++;r<e.length&&e[r]!=='"';)e[r]==="\\"&&r+1<e.length?r+=2:r++;r<e.length&&r++,s=!0;continue}o==="\\"?(r+=2,s=!0):(r++,s=!0)}return r}function Ur(t,e,n){let r=n,s="";for(;r<e.length;){let o=e[r];if(o==="*"||o==="?")s+=o,r++;else if(o==="["){let i=is(e,r);i===-1?(s+=o,r++):(s+=e.slice(r,i+1),r=i+1)}else break}return{pattern:s,endIndex:r}}function is(t,e){let n=e+1;for(n<t.length&&t[n]==="^"&&n++,n<t.length&&t[n]==="]"&&n++;n<t.length;){let r=t[n];if(r==="\\"&&n+1<t.length){n+=2;continue}if(r==="]")return n;if(r==='"'||r==="$"||r==="`")return-1;if(r==="'"){let s=t.indexOf("'",n+1);if(s!==-1){n=s+1;continue}}if(r==="["&&n+1<t.length&&t[n+1]===":"){let s=t.indexOf(":]",n+2);if(s!==-1){n=s+2;continue}}if(r==="["&&n+1<t.length&&(t[n+1]==="."||t[n+1]==="=")){let o=`${t[n+1]}]`,i=t.indexOf(o,n+2);if(i!==-1){n=i+2;continue}}n++}return-1}function Gr(t,e,n){let r="",s=n;for(;s<e.length&&e[s]!=="'";){let o=e[s];if(o==="\\"&&s+1<e.length)switch(e[s+1]){case"n":r+=`
36
+ `,s+=2;break;case"t":r+=" ",s+=2;break;case"r":r+="\r",s+=2;break;case"\\":r+="\\",s+=2;break;case"'":r+="'",s+=2;break;case'"':r+='"',s+=2;break;case"a":r+="\x07",s+=2;break;case"b":r+="\b",s+=2;break;case"e":case"E":r+="\x1B",s+=2;break;case"f":r+="\f",s+=2;break;case"v":r+="\v",s+=2;break;case"x":{let a=e.slice(s+2,s+4),l=parseInt(a,16);Number.isNaN(l)?(r+="\\x",s+=2):(r+=String.fromCharCode(l),s+=4);break}case"u":{let a=e.slice(s+2,s+6),l=parseInt(a,16);Number.isNaN(l)?(r+="\\u",s+=2):(r+=String.fromCharCode(l),s+=6);break}case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":{let a="",l=s+1;for(;l<e.length&&l<s+4&&/[0-7]/.test(e[l]);)a+=e[l],l++;let c=parseInt(a,8);r+=String.fromCharCode(c),s=l;break}default:r+=o,s++}else r+=o,s++}return s<e.length&&e[s]==="'"&&s++,{part:A.literal(r),endIndex:s}}function Ct(t,e){let n=e.trim();return n===""?{type:"ArithmeticExpression",expression:{type:"ArithNumber",value:0}}:L(t,n)}function Mr(t){let e=[],n="",r=0;for(let s=0;s<t.length;s++){let o=t[s];o==="{"?(r++,n+=o):o==="}"?(r--,n+=o):o===","&&r===0?(e.push(n),n=""):n+=o}return e.push(n),e}function Hr(t,e,n,r){let s=bt(t,e,n,"{","}");if(s===-1)return null;let o=e.slice(n+1,s),i=o.match(/^(-?\d+)\.\.(-?\d+)(?:\.\.(-?\d+))?$/);if(i)return{part:{type:"BraceExpansion",items:[{type:"Range",start:Number.parseInt(i[1],10),end:Number.parseInt(i[2],10),step:i[3]?Number.parseInt(i[3],10):void 0,startStr:i[1],endStr:i[2]}]},endIndex:s+1};let a=o.match(/^([a-zA-Z])\.\.([a-zA-Z])(?:\.\.(-?\d+))?$/);return a?{part:{type:"BraceExpansion",items:[{type:"Range",start:a[1],end:a[2],step:a[3]?Number.parseInt(a[3],10):void 0}]},endIndex:s+1}:o.includes(",")&&r?{part:{type:"BraceExpansion",items:Mr(o).map(u=>({type:"Word",word:A.word(r(t,u,!1,!1,!1))}))},endIndex:s+1}:o.includes(",")?{part:{type:"BraceExpansion",items:Mr(o).map(u=>({type:"Word",word:A.word([A.literal(u)])}))},endIndex:s+1}:null}function Vr(t,e){let n="";for(let r of e.parts)switch(r.type){case"Literal":case"SingleQuoted":case"Escaped":n+=r.value;break;case"DoubleQuoted":n+='"';for(let s of r.parts)s.type==="Literal"||s.type==="Escaped"?n+=s.value:s.type==="ParameterExpansion"&&(n+=`\${${s.parameter}}`);n+='"';break;case"ParameterExpansion":n+=`\${${r.parameter}}`;break;case"Glob":n+=r.pattern;break;default:n+=r.type}return n}function jr(t,e){return{[f.LESS]:"<",[f.GREAT]:">",[f.DGREAT]:">>",[f.LESSAND]:"<&",[f.GREATAND]:">&",[f.LESSGREAT]:"<>",[f.CLOBBER]:">|",[f.TLESS]:"<<<",[f.AND_GREAT]:"&>",[f.AND_DGREAT]:"&>>",[f.DLESS]:"<",[f.DLESSDASH]:"<"}[e]||">"}function Ze(t){let e=t.current(),n=e.type;if(n===f.NUMBER){let r=t.peek(1);return e.end!==r.start?!1:Fr.has(r.type)}return Wr.has(n)}function Qe(t){let e=null;t.check(f.NUMBER)&&(e=Number.parseInt(t.advance().value,10));let n=t.advance(),r=jr(t,n.type);if(n.type===f.DLESS||n.type===f.DLESSDASH)return os(t,r,e,n.type===f.DLESSDASH);t.isWord()||t.error("Expected redirection target");let s=t.parseWord();return A.redirection(r,s,e)}function os(t,e,n,r){t.isWord()||t.error("Expected here-document delimiter");let s=t.advance(),o=s.value,i=s.quoted||!1;(o.startsWith("'")&&o.endsWith("'")||o.startsWith('"')&&o.endsWith('"'))&&(o=o.slice(1,-1));let a=A.redirection(r?"<<-":"<<",A.hereDoc(o,A.word([]),r,i),n);return t.addPendingHeredoc(a,o,r,i),a}function Zr(t){let e=t.current().line,n=[],r=null,s=[],o=[];for(;t.check(f.ASSIGNMENT_WORD);)t.checkIterationLimit(),n.push(as(t));for(;Ze(t);)t.checkIterationLimit(),o.push(Qe(t));for(t.isWord()&&(r=t.parseWord());(!t.isStatementEnd()||t.check(f.RBRACE))&&!t.check(f.PIPE,f.PIPE_AMP);)if(t.checkIterationLimit(),Ze(t))o.push(Qe(t));else if(t.check(f.RBRACE)){let a=t.advance();s.push(t.parseWordFromString(a.value,!1,!1))}else if(t.isWord())s.push(t.parseWord());else if(t.check(f.ASSIGNMENT_WORD)){let a=t.advance(),l=a.value,c=l.endsWith("="),u=l.endsWith("=(");if((c||u)&&(u||t.check(f.LPAREN))){let d=u?l.slice(0,-2):l.slice(0,-1);u||t.expect(f.LPAREN);let h=Nt(t);t.expect(f.RPAREN);let m=h.map(w=>Vr(t,w)),y=`${d}=(${m.join(" ")})`;s.push(t.parseWordFromString(y,!1,!1))}else s.push(t.parseWordFromString(l,a.quoted,a.singleQuoted))}else if(t.check(f.LPAREN))t.error("syntax error near unexpected token `('");else break;let i=A.simpleCommand(r,s,n,o);return i.line=e,i}function as(t){let e=t.expect(f.ASSIGNMENT_WORD),n=e.value,r=n.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);r||t.error(`Invalid assignment: ${n}`);let s=r[0],o,i=s.length;if(n[i]==="["){let d=0,h=i+1;for(;i<n.length;i++)if(n[i]==="[")d++;else if(n[i]==="]"&&(d--,d===0))break;d!==0&&t.error(`Invalid assignment: ${n}`),o=n.slice(h,i),i++}let a=n[i]==="+";a&&i++,n[i]!=="="&&t.error(`Invalid assignment: ${n}`),i++;let l=n.slice(i);if(l==="("){let d=Nt(t);t.expect(f.RPAREN);let h=o!==void 0?`${s}[${o}]`:s;return A.assignment(h,null,a,d)}if(l===""&&t.check(f.LPAREN)){let d=t.current();if(e.end===d.start){t.advance();let h=Nt(t);t.expect(f.RPAREN);let m=o!==void 0?`${s}[${o}]`:s;return A.assignment(m,null,a,h)}}let c=l?t.parseWordFromString(l,e.quoted,e.singleQuoted,!0):null,u=o!==void 0?`${s}[${o}]`:s;return A.assignment(u,c,a,null)}function Nt(t){let e=[];for(t.skipNewlines();!t.check(f.RPAREN,f.EOF);)t.checkIterationLimit(),t.isWord()?e.push(t.parseWord()):t.advance(),t.skipNewlines();return e}function $t(t){t.expect(f.IF);let e=[],n=t.parseCompoundList();t.expect(f.THEN);let r=t.parseCompoundList();if(r.length===0){let i=t.check(f.FI)?"fi":t.check(f.ELSE)?"else":t.check(f.ELIF)?"elif":"fi";t.error(`syntax error near unexpected token \`${i}'`)}for(e.push({condition:n,body:r});t.check(f.ELIF);){t.advance();let i=t.parseCompoundList();t.expect(f.THEN);let a=t.parseCompoundList();if(a.length===0){let l=t.check(f.FI)?"fi":t.check(f.ELSE)?"else":t.check(f.ELIF)?"elif":"fi";t.error(`syntax error near unexpected token \`${l}'`)}e.push({condition:i,body:a})}let s=null;t.check(f.ELSE)&&(t.advance(),s=t.parseCompoundList(),s.length===0&&t.error("syntax error near unexpected token `fi'")),t.expect(f.FI);let o=t.parseOptionalRedirections();return A.ifNode(e,s,o)}function vt(t){if(t.expect(f.FOR),t.check(f.DPAREN_START))return ls(t);t.isWord()||t.error("Expected variable name in for loop");let n=t.advance().value,r=null;if(t.skipNewlines(),t.check(f.IN))for(t.advance(),r=[];!t.check(f.SEMICOLON,f.NEWLINE,f.DO,f.EOF)&&t.isWord();)r.push(t.parseWord());t.check(f.SEMICOLON)&&t.advance(),t.skipNewlines(),t.expect(f.DO);let s=t.parseCompoundList();t.expect(f.DONE);let o=t.parseOptionalRedirections();return A.forNode(n,r,s,o)}function ls(t){t.expect(f.DPAREN_START);let e=null,n=null,r=null,s=["","",""],o=0,i=0;for(;!t.check(f.DPAREN_END,f.EOF);){let c=t.advance();if(c.type===f.SEMICOLON&&i===0){if(o++,o>2)break}else c.value==="("&&i++,c.value===")"&&i--,s[o]+=c.value}t.expect(f.DPAREN_END),s[0].trim()&&(e=L(t,s[0].trim())),s[1].trim()&&(n=L(t,s[1].trim())),s[2].trim()&&(r=L(t,s[2].trim())),t.skipNewlines(),t.check(f.SEMICOLON)&&t.advance(),t.skipNewlines(),t.expect(f.DO);let a=t.parseCompoundList();t.expect(f.DONE);let l=t.parseOptionalRedirections();return{type:"CStyleFor",init:e,condition:n,update:r,body:a,redirections:l}}function Pt(t){t.expect(f.WHILE);let e=t.parseCompoundList();t.expect(f.DO);let n=t.parseCompoundList();n.length===0&&t.error("syntax error near unexpected token `done'"),t.expect(f.DONE);let r=t.parseOptionalRedirections();return A.whileNode(e,n,r)}function It(t){t.expect(f.UNTIL);let e=t.parseCompoundList();t.expect(f.DO);let n=t.parseCompoundList();n.length===0&&t.error("syntax error near unexpected token `done'"),t.expect(f.DONE);let r=t.parseOptionalRedirections();return A.untilNode(e,n,r)}function Rt(t){t.expect(f.CASE),t.isWord()||t.error("Expected word after 'case'");let e=t.parseWord();t.skipNewlines(),t.expect(f.IN),t.skipNewlines();let n=[];for(;!t.check(f.ESAC,f.EOF);){t.checkIterationLimit();let s=t.getPos(),o=us(t);if(o&&n.push(o),t.skipNewlines(),t.getPos()===s&&!o)break}t.expect(f.ESAC);let r=t.parseOptionalRedirections();return A.caseNode(e,n,r)}function us(t){t.check(f.LPAREN)&&t.advance();let e=[];for(;t.isWord()&&(e.push(t.parseWord()),t.check(f.PIPE));)t.advance();if(e.length===0)return null;t.expect(f.RPAREN),t.skipNewlines();let n=[];for(;!t.check(f.DSEMI,f.SEMI_AND,f.SEMI_SEMI_AND,f.ESAC,f.EOF);){t.checkIterationLimit(),t.isWord()&&t.peek(1).type===f.RPAREN&&t.error("syntax error near unexpected token `)'"),t.check(f.LPAREN)&&t.peek(1).type===f.WORD&&t.error(`syntax error near unexpected token \`${t.peek(1).value}'`);let s=t.getPos(),o=t.parseStatement();if(o&&n.push(o),t.skipSeparators(!1),t.getPos()===s&&!o)break}let r=";;";return t.check(f.DSEMI)?(t.advance(),r=";;"):t.check(f.SEMI_AND)?(t.advance(),r=";&"):t.check(f.SEMI_SEMI_AND)&&(t.advance(),r=";;&"),A.caseItem(e,n,r)}function kt(t){t.peek(1).type,f.LPAREN,t.expect(f.LPAREN),t.check(f.LPAREN)&&t.advance();let e=t.parseCompoundList();t.expect(f.RPAREN);let n=t.parseOptionalRedirections();return A.subshell(e,n)}function Dt(t){t.expect(f.LBRACE);let e=t.parseCompoundList();t.expect(f.RBRACE);let n=t.parseOptionalRedirections();return A.group(e,n)}var ds=["-a","-b","-c","-d","-e","-f","-g","-h","-k","-p","-r","-s","-t","-u","-w","-x","-G","-L","-N","-O","-S","-z","-n","-o","-v","-R"],hs=["==","!=","=~","<",">","-eq","-ne","-lt","-le","-gt","-ge","-nt","-ot","-ef"];function _t(t){return t.skipNewlines(),ms(t)}function ms(t){let e=Qr(t);for(t.skipNewlines();t.check(f.OR_OR);){t.advance(),t.skipNewlines();let n=Qr(t);e={type:"CondOr",left:e,right:n},t.skipNewlines()}return e}function Qr(t){let e=Ot(t);for(t.skipNewlines();t.check(f.AND_AND);){t.advance(),t.skipNewlines();let n=Ot(t);e={type:"CondAnd",left:e,right:n},t.skipNewlines()}return e}function Ot(t){return t.skipNewlines(),t.check(f.BANG)?(t.advance(),t.skipNewlines(),{type:"CondNot",operand:Ot(t)}):ps(t)}function ps(t){if(t.check(f.LPAREN)){t.advance();let e=_t(t);return t.expect(f.RPAREN),{type:"CondGroup",expression:e}}if(t.isWord()){let e=t.current(),n=e.value;if(ds.includes(n)&&!e.quoted&&(t.advance(),t.check(f.DBRACK_END)&&t.error(`Expected operand after ${n}`),t.isWord())){let s=t.parseWord();return{type:"CondUnary",operator:n,operand:s}}let r=t.parseWord();if(t.isWord()&&hs.includes(t.current().value)){let s=t.advance().value,o=t.parseWord();return{type:"CondBinary",operator:s,left:r,right:o}}if(t.check(f.LESS)){t.advance();let s=t.parseWord();return{type:"CondBinary",operator:"<",left:r,right:s}}if(t.check(f.GREAT)){t.advance();let s=t.parseWord();return{type:"CondBinary",operator:">",left:r,right:s}}if(t.isWord()&&t.current().value==="="){t.advance();let s=t.parseWord();return{type:"CondBinary",operator:"==",left:r,right:s}}return{type:"CondWord",word:r}}t.error("Expected conditional expression")}function Es(t,e,n){let r=n+1,s=e[r];if("@*#?$!-0123456789".includes(s))return{part:A.parameterExpansion(s),endIndex:r+1};let o="";for(;r<e.length&&/[a-zA-Z0-9_]/.test(e[r]);)o+=e[r],r++;return{part:A.parameterExpansion(o),endIndex:r}}function ws(t,e,n,r=!1){let s=n+2,o=!1;e[s]==="!"&&(o=!0,s++);let i=!1;e[s]==="#"&&!/[}:#%/^,]/.test(e[s+1]||"}")&&(i=!0,s++);let a="",l=e[s];if(/[@*#?$!-]/.test(l)&&!/[a-zA-Z0-9_]/.test(e[s+1]||""))a=l,s++;else for(;s<e.length&&/[a-zA-Z0-9_]/.test(e[s]);)a+=e[s],s++;if(e[s]==="["){let u=bt(t,e,s,"[","]");a+=e.slice(s,u+1),s=u+1}a===""&&!o&&!i&&e[s]!=="}"&&t.error(`\${${e[s]}}: bad substitution`);let c=null;if(o){let u=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([@*])\]$/);if(u)c={type:"ArrayKeys",array:u[1],star:u[2]==="*"},a="";else if(e[s]==="*"||e[s]==="@"){let d=e[s];s++,c={type:"VarNamePrefix",prefix:a,star:d==="*"},a=""}else c={type:"Indirection"}}else if(i)if(e[s]===":")for(c={type:"LengthSliceError"};s<e.length&&e[s]!=="}";)s++;else e[s]!=="}"&&/[-+=?]/.test(e[s])?t.error(`\${#${a}${e.slice(s,e.indexOf("}",s))}}: bad substitution`):c={type:"Length"};if(!c&&s<e.length&&e[s]!=="}"){let u=gs(t,e,s,a,r);c=u.operation,s=u.endIndex}if(s<e.length&&e[s]!=="}"){let u=e[s];if(!/[:\-+=?#%/^,@[]/.test(u)){let d=s;for(;d<e.length&&e[d]!=="}";)d++;let h=e.slice(n,d+1);t.error(`\${${h.slice(2,-1)}}: bad substitution`)}}for(;s<e.length&&e[s]!=="}";)s++;return{part:A.parameterExpansion(a,c),endIndex:s+1}}function gs(t,e,n,r,s=!1){let o=n,i=e[o],a=e[o+1]||"";if(i===":"){let l=a;if("-=?+".includes(l)){o+=2;let E=ye(t,e,o),g=e.slice(o,E),b=ce(t,g,!1,!1,!0,!1,s),C=A.word(b.length>0?b:[A.literal("")]);if(l==="-")return{operation:{type:"DefaultValue",word:C,checkEmpty:!0},endIndex:E};if(l==="=")return{operation:{type:"AssignDefault",word:C,checkEmpty:!0},endIndex:E};if(l==="?")return{operation:{type:"ErrorIfUnset",word:C,checkEmpty:!0},endIndex:E};if(l==="+")return{operation:{type:"UseAlternative",word:C,checkEmpty:!0},endIndex:E}}o++;let c=ye(t,e,o),u=e.slice(o,c),d=-1,h=0,m=0;for(let p=0;p<u.length;p++){let E=u[p];if(E==="("||E==="[")h++;else if(E===")"||E==="]")h--;else if(E==="?"&&h===0)m++;else if(E===":"&&h===0)if(m>0)m--;else{d=p;break}}let y=d>=0?u.slice(0,d):u,w=d>=0?u.slice(d+1):null;return{operation:{type:"Substring",offset:Ct(t,y),length:w?Ct(t,w):null},endIndex:c}}if("-=?+".includes(i)){o++;let l=ye(t,e,o),c=e.slice(o,l),u=ce(t,c,!1,!1,!0,!1,s),d=A.word(u.length>0?u:[A.literal("")]);if(i==="-")return{operation:{type:"DefaultValue",word:d,checkEmpty:!1},endIndex:l};if(i==="=")return{operation:{type:"AssignDefault",word:d,checkEmpty:!1},endIndex:l};if(i==="?")return{operation:{type:"ErrorIfUnset",word:c?d:null,checkEmpty:!1},endIndex:l};if(i==="+")return{operation:{type:"UseAlternative",word:d,checkEmpty:!1},endIndex:l}}if(i==="#"||i==="%"){let l=a===i,c=i==="#"?"prefix":"suffix";o+=l?2:1;let u=ye(t,e,o),d=e.slice(o,u),h=ce(t,d,!1,!1,!1);return{operation:{type:"PatternRemoval",pattern:A.word(h.length>0?h:[A.literal("")]),side:c,greedy:l},endIndex:u}}if(i==="/"){let l=a==="/";o+=l?2:1;let c=null;e[o]==="#"?(c="start",o++):e[o]==="%"&&(c="end",o++);let u=zr(t,e,o),d=e.slice(o,u),h=ce(t,d,!1,!1,!1),m=A.word(h.length>0?h:[A.literal("")]),y=null,w=u;if(e[u]==="/"){let p=u+1,E=ye(t,e,p),g=e.slice(p,E),b=ce(t,g,!1,!1,!1);y=A.word(b.length>0?b:[A.literal("")]),w=E}return{operation:{type:"PatternReplacement",pattern:m,replacement:y,all:l,anchor:c},endIndex:w}}if(i==="^"||i===","){let l=a===i,c=i==="^"?"upper":"lower";o+=l?2:1;let u=ye(t,e,o),d=e.slice(o,u),h=d?A.word([A.literal(d)]):null;return{operation:{type:"CaseModification",direction:c,all:l,pattern:h},endIndex:u}}return i==="@"&&/[QPaAEK]/.test(a)?{operation:{type:"Transform",operator:a},endIndex:o+2}:{operation:null,endIndex:o}}function Lt(t,e,n,r=!1){let s=n+1;if(s>=e.length)return{part:A.literal("$"),endIndex:s};let o=e[s];if(o==="("&&e[s+1]==="(")return t.parseArithmeticExpansion(e,n);if(o==="["){let i=1,a=s+1;for(;a<e.length&&i>0;)e[a]==="["?i++:e[a]==="]"&&i--,i>0&&a++;if(i===0){let l=e.slice(s+1,a),c=L(t,l);return{part:A.arithmeticExpansion(c),endIndex:a+1}}}return o==="("?t.parseCommandSubstitution(e,n):o==="{"?ws(t,e,n,r):/[a-zA-Z_0-9@*#?$!-]/.test(o)?Es(t,e,n):{part:A.literal("$"),endIndex:s}}function As(t,e){let n=[],r=0,s="",o=()=>{s&&(n.push(A.literal(s)),s="")};for(;r<e.length;){let i=e[r];if(i==="\\"&&r+1<e.length){let a=e[r+1];if(a==="$"||a==="`"){s+=a,r+=2;continue}s+=i,r++;continue}if(i==="$"){o();let{part:a,endIndex:l}=Lt(t,e,r,!0);a&&n.push(a),r=l;continue}if(i==="`"){o();let{part:a,endIndex:l}=t.parseBacktickSubstitution(e,r,!0);n.push(a),r=l;continue}s+=i,r++}return o(),n}function xs(t,e,n){let r=[],s=n,o="",i=()=>{o&&(r.push(A.literal(o)),o="")};for(;s<e.length&&e[s]!=='"';){let a=e[s];if(a==="\\"&&s+1<e.length){let l=e[s+1];if('"\\$`\n'.includes(l)){o+=l,s+=2;continue}o+=a,s++;continue}if(a==="$"){i();let{part:l,endIndex:c}=Lt(t,e,s,!0);l&&r.push(l),s=c;continue}if(a==="`"){i();let{part:l,endIndex:c}=t.parseBacktickSubstitution(e,s,!0);r.push(l),s=c;continue}o+=a,s++}return i(),{part:A.doubleQuoted(r),endIndex:s}}function ce(t,e,n=!1,r=!1,s=!1,o=!1,i=!1){if(r)return[A.singleQuoted(e)];if(n){let d=As(t,e);return[A.doubleQuoted(d)]}let a=[],l=0,c="",u=()=>{c&&(a.push(A.literal(c)),c="")};for(;l<e.length;){let d=e[l];if(d==="\\"&&l+1<e.length){let h=e[l+1];(o?h==="$"||h==="`"||h==="\\"||h===`
37
37
  `:h==="$"||h==="`"||h==="\\"||h==='"'||h===`
38
- `)?c+=h:c+=`\\${h}`,l+=2;continue}if(d==="'"&&!i&&!o){u();let h=e.indexOf("'",l+1);if(h===-1){c+=e.slice(l);break}a.push(A.singleQuoted(e.slice(l+1,h))),l=h+1;continue}if(d==='"'&&!o){u();let{part:h,endIndex:m}=bs(t,e,l+1);a.push(h),l=m+1;continue}if(d==="$"&&e[l+1]==="'"){u();let{part:h,endIndex:m}=Hr(t,e,l+2);a.push(h),l=m;continue}if(d==="$"){u();let{part:h,endIndex:m}=Tt(t,e,l);h&&a.push(h),l=m;continue}if(d==="`"){u();let{part:h,endIndex:m}=t.parseBacktickSubstitution(e,l);a.push(h),l=m;continue}if(d==="~"){let h=l>0?e[l-1]:"";if(l===0||h==="="||s&&h===":"){let y=zr(t,e,l),w=e[y];if(w===void 0||w==="/"||w===":"){u();let p=e.slice(l+1,y)||null;a.push({type:"TildeExpansion",user:p}),l=y;continue}}}if(d==="*"||d==="?"||d==="["){u();let{pattern:h,endIndex:m}=Gr(t,e,l);a.push({type:"Glob",pattern:h}),l=m;continue}if(d==="{"&&!s){let h=Vr(t,e,l,ce);if(h){u(),a.push(h.part),l=h.endIndex;continue}}c+=d,l++}return u(),a}var M=class t{tokens=[];pos=0;pendingHeredocs=[];parseIterations=0;checkIterationLimit(){if(this.parseIterations++,this.parseIterations>Wr)throw new re("Maximum parse iterations exceeded (possible infinite loop)",this.current().line,this.current().column)}parse(e){if(e.length>St)throw new re(`Input too large: ${e.length} bytes exceeds limit of ${St}`,1,1);let n=new je(e);if(this.tokens=n.tokenize(),this.tokens.length>bt)throw new re(`Too many tokens: ${this.tokens.length} exceeds limit of ${bt}`,1,1);return this.pos=0,this.pendingHeredocs=[],this.parseIterations=0,this.parseScript()}parseTokens(e){return this.tokens=e,this.pos=0,this.pendingHeredocs=[],this.parseScript()}current(){return this.tokens[this.pos]||this.tokens[this.tokens.length-1]}peek(e=0){return this.tokens[this.pos+e]||this.tokens[this.tokens.length-1]}advance(){let e=this.current();return this.pos<this.tokens.length-1&&this.pos++,e}getPos(){return this.pos}check(e,n,r,s,...o){let i=this.tokens[this.pos]?.type;return i===e||n!==void 0&&i===n||r!==void 0&&i===r||s!==void 0&&i===s?!0:o.length>0?o.includes(i):!1}expect(e,n){if(this.check(e))return this.advance();let r=this.current();throw new re(n||`Expected ${e}, got ${r.type}`,r.line,r.column,r)}error(e){let n=this.current();throw new re(e,n.line,n.column,n)}skipNewlines(){for(;this.check(f.NEWLINE,f.COMMENT);)this.check(f.NEWLINE)?(this.advance(),this.processHeredocs()):this.advance()}skipSeparators(e=!0){for(;;){if(this.check(f.NEWLINE)){this.advance(),this.processHeredocs();continue}if(this.check(f.SEMICOLON,f.COMMENT)){this.advance();continue}if(e&&this.check(f.DSEMI,f.SEMI_AND,f.SEMI_SEMI_AND)){this.advance();continue}break}}addPendingHeredoc(e,n,r,s){this.pendingHeredocs.push({redirect:e,delimiter:n,stripTabs:r,quoted:s})}processHeredocs(){for(let e of this.pendingHeredocs)if(this.check(f.HEREDOC_CONTENT)){let n=this.advance(),r;e.quoted?r=A.word([A.literal(n.value)]):r=this.parseWordFromString(n.value,!1,!1,!1,!0),e.redirect.target=A.hereDoc(e.delimiter,r,e.stripTabs,e.quoted)}this.pendingHeredocs=[]}isStatementEnd(){return this.check(f.EOF,f.NEWLINE,f.SEMICOLON,f.AMP,f.AND_AND,f.OR_OR,f.RPAREN,f.RBRACE,f.DSEMI,f.SEMI_AND,f.SEMI_SEMI_AND)}isCommandStart(){let e=this.current().type;return e===f.WORD||e===f.NAME||e===f.NUMBER||e===f.ASSIGNMENT_WORD||e===f.IF||e===f.FOR||e===f.WHILE||e===f.UNTIL||e===f.CASE||e===f.LPAREN||e===f.LBRACE||e===f.DPAREN_START||e===f.DBRACK_START||e===f.FUNCTION||e===f.BANG||e===f.IN||e===f.LESS||e===f.GREAT||e===f.DLESS||e===f.DGREAT||e===f.LESSAND||e===f.GREATAND||e===f.LESSGREAT||e===f.DLESSDASH||e===f.CLOBBER||e===f.TLESS||e===f.AND_GREAT||e===f.AND_DGREAT}parseScript(){let e=[],r=0;for(this.skipNewlines();!this.check(f.EOF);){r++,r>1e4&&this.error("Parser stuck: too many iterations (>10000)"),this.checkUnexpectedToken();let s=this.pos,o=this.parseStatement();o&&e.push(o),this.skipSeparators(!1),this.check(f.DSEMI,f.SEMI_AND,f.SEMI_SEMI_AND)&&this.error(`syntax error near unexpected token \`${this.current().value}'`),this.pos===s&&!this.check(f.EOF)&&this.advance()}return A.script(e)}checkUnexpectedToken(){let e=this.current().type,n=this.current().value;(e===f.DO||e===f.DONE||e===f.THEN||e===f.ELSE||e===f.ELIF||e===f.FI||e===f.ESAC)&&this.error(`syntax error near unexpected token \`${n}'`),(e===f.RBRACE||e===f.RPAREN)&&this.error(`syntax error near unexpected token \`${n}'`),(e===f.DSEMI||e===f.SEMI_AND||e===f.SEMI_SEMI_AND)&&this.error(`syntax error near unexpected token \`${n}'`),e===f.SEMICOLON&&this.error(`syntax error near unexpected token \`${n}'`)}parseStatement(){if(this.skipNewlines(),!this.isCommandStart())return null;let e=[],n=[],r=!1,s=this.parsePipeline();for(e.push(s);this.check(f.AND_AND,f.OR_OR);){let o=this.advance();n.push(o.type===f.AND_AND?"&&":"||"),this.skipNewlines();let i=this.parsePipeline();e.push(i)}return this.check(f.AMP)&&(this.advance(),r=!0),A.statement(e,n,r)}parsePipeline(){let e=0;for(;this.check(f.BANG);)this.advance(),e++;let n=e%2===1,r=[],s=this.parseCommand();for(r.push(s);this.check(f.PIPE,f.PIPE_AMP);){let o=this.advance();this.skipNewlines();let i=this.parseCommand();o.type===f.PIPE_AMP&&i.type==="SimpleCommand"&&i.redirections.unshift(A.redirection(">&",A.word([A.literal("1")]),2)),r.push(i)}return A.pipeline(r,n)}parseCommand(){return this.check(f.IF)?vt(this):this.check(f.FOR)?Pt(this):this.check(f.WHILE)?It(this):this.check(f.UNTIL)?Rt(this):this.check(f.CASE)?kt(this):this.check(f.LPAREN)?Dt(this):this.check(f.LBRACE)?Ot(this):this.check(f.DPAREN_START)?this.parseArithmeticCommand():this.check(f.DBRACK_START)?this.parseConditionalCommand():this.check(f.FUNCTION)?this.parseFunctionDef():this.check(f.NAME,f.WORD)&&this.peek(1).type===f.LPAREN&&this.peek(2).type===f.RPAREN?this.parseFunctionDef():Qr(this)}isWord(){let e=this.current().type;return e===f.WORD||e===f.NAME||e===f.NUMBER||e===f.IF||e===f.FOR||e===f.WHILE||e===f.UNTIL||e===f.CASE||e===f.FUNCTION||e===f.ELSE||e===f.ELIF||e===f.FI||e===f.THEN||e===f.DO||e===f.DONE||e===f.ESAC||e===f.IN||e===f.SELECT||e===f.TIME||e===f.COPROC||e===f.BANG}parseWord(){let e=this.advance();return this.parseWordFromString(e.value,e.quoted,e.singleQuoted)}parseWordFromString(e,n=!1,r=!1,s=!1,o=!1){let i=ce(this,e,n,r,s,o);return A.word(i)}parseCommandSubstitution(e,n){let r=n+2,s=1,o=r,i=!1,a=!1,l=0,c=!1,u="";for(;o<e.length&&s>0;){let y=e[o];i?y==="'"&&(i=!1):a?y==="\\"&&o+1<e.length?o++:y==='"'&&(a=!1):y==="'"?(i=!0,u=""):y==='"'?(a=!0,u=""):y==="\\"&&o+1<e.length?(o++,u=""):/[a-zA-Z_]/.test(y)?u+=y:(u==="case"?(l++,c=!1):u==="in"&&l>0?c=!0:u==="esac"&&l>0&&(l--,c=!1),u="",y==="("?o>0&&e[o-1]==="$"?s++:c||s++:y===")"?c?c=!1:s--:y===";"&&l>0&&o+1<e.length&&e[o+1]===";"&&(c=!0)),s>0&&o++}s>0&&this.error("unexpected EOF while looking for matching `)'");let d=e.slice(r,o),m=new t().parse(d);return{part:A.commandSubstitution(m,!1),endIndex:o+1}}parseBacktickSubstitution(e,n,r=!1){let o=n+1,i="";for(;o<e.length&&e[o]!=="`";)if(e[o]==="\\"){let c=e[o+1];c==="$"||c==="`"||c==="\\"||c===`
38
+ `)?c+=h:c+=`\\${h}`,l+=2;continue}if(d==="'"&&!i&&!o){u();let h=e.indexOf("'",l+1);if(h===-1){c+=e.slice(l);break}a.push(A.singleQuoted(e.slice(l+1,h))),l=h+1;continue}if(d==='"'&&!o){u();let{part:h,endIndex:m}=xs(t,e,l+1);a.push(h),l=m+1;continue}if(d==="$"&&e[l+1]==="'"){u();let{part:h,endIndex:m}=Gr(t,e,l+2);a.push(h),l=m;continue}if(d==="$"){u();let{part:h,endIndex:m}=Lt(t,e,l);h&&a.push(h),l=m;continue}if(d==="`"){u();let{part:h,endIndex:m}=t.parseBacktickSubstitution(e,l);a.push(h),l=m;continue}if(d==="~"){let h=l>0?e[l-1]:"";if(l===0||h==="="||s&&h===":"){let y=Br(t,e,l),w=e[y];if(w===void 0||w==="/"||w===":"){u();let p=e.slice(l+1,y)||null;a.push({type:"TildeExpansion",user:p}),l=y;continue}}}if(d==="*"||d==="?"||d==="["){u();let{pattern:h,endIndex:m}=Ur(t,e,l);a.push({type:"Glob",pattern:h}),l=m;continue}if(d==="{"&&!s){let h=Hr(t,e,l,ce);if(h){u(),a.push(h.part),l=h.endIndex;continue}}c+=d,l++}return u(),a}var M=class t{tokens=[];pos=0;pendingHeredocs=[];parseIterations=0;checkIterationLimit(){if(this.parseIterations++,this.parseIterations>Tr)throw new re("Maximum parse iterations exceeded (possible infinite loop)",this.current().line,this.current().column)}parse(e){if(e.length>xt)throw new re(`Input too large: ${e.length} bytes exceeds limit of ${xt}`,1,1);let n=new qe(e);if(this.tokens=n.tokenize(),this.tokens.length>St)throw new re(`Too many tokens: ${this.tokens.length} exceeds limit of ${St}`,1,1);return this.pos=0,this.pendingHeredocs=[],this.parseIterations=0,this.parseScript()}parseTokens(e){return this.tokens=e,this.pos=0,this.pendingHeredocs=[],this.parseScript()}current(){return this.tokens[this.pos]||this.tokens[this.tokens.length-1]}peek(e=0){return this.tokens[this.pos+e]||this.tokens[this.tokens.length-1]}advance(){let e=this.current();return this.pos<this.tokens.length-1&&this.pos++,e}getPos(){return this.pos}check(e,n,r,s,...o){let i=this.tokens[this.pos]?.type;return i===e||n!==void 0&&i===n||r!==void 0&&i===r||s!==void 0&&i===s?!0:o.length>0?o.includes(i):!1}expect(e,n){if(this.check(e))return this.advance();let r=this.current();throw new re(n||`Expected ${e}, got ${r.type}`,r.line,r.column,r)}error(e){let n=this.current();throw new re(e,n.line,n.column,n)}skipNewlines(){for(;this.check(f.NEWLINE,f.COMMENT);)this.check(f.NEWLINE)?(this.advance(),this.processHeredocs()):this.advance()}skipSeparators(e=!0){for(;;){if(this.check(f.NEWLINE)){this.advance(),this.processHeredocs();continue}if(this.check(f.SEMICOLON,f.COMMENT)){this.advance();continue}if(e&&this.check(f.DSEMI,f.SEMI_AND,f.SEMI_SEMI_AND)){this.advance();continue}break}}addPendingHeredoc(e,n,r,s){this.pendingHeredocs.push({redirect:e,delimiter:n,stripTabs:r,quoted:s})}processHeredocs(){for(let e of this.pendingHeredocs)if(this.check(f.HEREDOC_CONTENT)){let n=this.advance(),r;e.quoted?r=A.word([A.literal(n.value)]):r=this.parseWordFromString(n.value,!1,!1,!1,!0),e.redirect.target=A.hereDoc(e.delimiter,r,e.stripTabs,e.quoted)}this.pendingHeredocs=[]}isStatementEnd(){return this.check(f.EOF,f.NEWLINE,f.SEMICOLON,f.AMP,f.AND_AND,f.OR_OR,f.RPAREN,f.RBRACE,f.DSEMI,f.SEMI_AND,f.SEMI_SEMI_AND)}isCommandStart(){let e=this.current().type;return e===f.WORD||e===f.NAME||e===f.NUMBER||e===f.ASSIGNMENT_WORD||e===f.IF||e===f.FOR||e===f.WHILE||e===f.UNTIL||e===f.CASE||e===f.LPAREN||e===f.LBRACE||e===f.DPAREN_START||e===f.DBRACK_START||e===f.FUNCTION||e===f.BANG||e===f.IN||e===f.LESS||e===f.GREAT||e===f.DLESS||e===f.DGREAT||e===f.LESSAND||e===f.GREATAND||e===f.LESSGREAT||e===f.DLESSDASH||e===f.CLOBBER||e===f.TLESS||e===f.AND_GREAT||e===f.AND_DGREAT}parseScript(){let e=[],r=0;for(this.skipNewlines();!this.check(f.EOF);){r++,r>1e4&&this.error("Parser stuck: too many iterations (>10000)"),this.checkUnexpectedToken();let s=this.pos,o=this.parseStatement();o&&e.push(o),this.skipSeparators(!1),this.check(f.DSEMI,f.SEMI_AND,f.SEMI_SEMI_AND)&&this.error(`syntax error near unexpected token \`${this.current().value}'`),this.pos===s&&!this.check(f.EOF)&&this.advance()}return A.script(e)}checkUnexpectedToken(){let e=this.current().type,n=this.current().value;(e===f.DO||e===f.DONE||e===f.THEN||e===f.ELSE||e===f.ELIF||e===f.FI||e===f.ESAC)&&this.error(`syntax error near unexpected token \`${n}'`),(e===f.RBRACE||e===f.RPAREN)&&this.error(`syntax error near unexpected token \`${n}'`),(e===f.DSEMI||e===f.SEMI_AND||e===f.SEMI_SEMI_AND)&&this.error(`syntax error near unexpected token \`${n}'`),e===f.SEMICOLON&&this.error(`syntax error near unexpected token \`${n}'`)}parseStatement(){if(this.skipNewlines(),!this.isCommandStart())return null;let e=[],n=[],r=!1,s=this.parsePipeline();for(e.push(s);this.check(f.AND_AND,f.OR_OR);){let o=this.advance();n.push(o.type===f.AND_AND?"&&":"||"),this.skipNewlines();let i=this.parsePipeline();e.push(i)}return this.check(f.AMP)&&(this.advance(),r=!0),A.statement(e,n,r)}parsePipeline(){let e=0;for(;this.check(f.BANG);)this.advance(),e++;let n=e%2===1,r=[],s=this.parseCommand();for(r.push(s);this.check(f.PIPE,f.PIPE_AMP);){let o=this.advance();this.skipNewlines();let i=this.parseCommand();o.type===f.PIPE_AMP&&i.type==="SimpleCommand"&&i.redirections.unshift(A.redirection(">&",A.word([A.literal("1")]),2)),r.push(i)}return A.pipeline(r,n)}parseCommand(){return this.check(f.IF)?$t(this):this.check(f.FOR)?vt(this):this.check(f.WHILE)?Pt(this):this.check(f.UNTIL)?It(this):this.check(f.CASE)?Rt(this):this.check(f.LPAREN)?kt(this):this.check(f.LBRACE)?Dt(this):this.check(f.DPAREN_START)?this.parseArithmeticCommand():this.check(f.DBRACK_START)?this.parseConditionalCommand():this.check(f.FUNCTION)?this.parseFunctionDef():this.check(f.NAME,f.WORD)&&this.peek(1).type===f.LPAREN&&this.peek(2).type===f.RPAREN?this.parseFunctionDef():Zr(this)}isWord(){let e=this.current().type;return e===f.WORD||e===f.NAME||e===f.NUMBER||e===f.IF||e===f.FOR||e===f.WHILE||e===f.UNTIL||e===f.CASE||e===f.FUNCTION||e===f.ELSE||e===f.ELIF||e===f.FI||e===f.THEN||e===f.DO||e===f.DONE||e===f.ESAC||e===f.IN||e===f.SELECT||e===f.TIME||e===f.COPROC||e===f.BANG}parseWord(){let e=this.advance();return this.parseWordFromString(e.value,e.quoted,e.singleQuoted)}parseWordFromString(e,n=!1,r=!1,s=!1,o=!1){let i=ce(this,e,n,r,s,o);return A.word(i)}parseCommandSubstitution(e,n){let r=n+2,s=1,o=r,i=!1,a=!1,l=0,c=!1,u="";for(;o<e.length&&s>0;){let y=e[o];i?y==="'"&&(i=!1):a?y==="\\"&&o+1<e.length?o++:y==='"'&&(a=!1):y==="'"?(i=!0,u=""):y==='"'?(a=!0,u=""):y==="\\"&&o+1<e.length?(o++,u=""):/[a-zA-Z_]/.test(y)?u+=y:(u==="case"?(l++,c=!1):u==="in"&&l>0?c=!0:u==="esac"&&l>0&&(l--,c=!1),u="",y==="("?o>0&&e[o-1]==="$"?s++:c||s++:y===")"?c?c=!1:s--:y===";"&&l>0&&o+1<e.length&&e[o+1]===";"&&(c=!0)),s>0&&o++}s>0&&this.error("unexpected EOF while looking for matching `)'");let d=e.slice(r,o),m=new t().parse(d);return{part:A.commandSubstitution(m,!1),endIndex:o+1}}parseBacktickSubstitution(e,n,r=!1){let o=n+1,i="";for(;o<e.length&&e[o]!=="`";)if(e[o]==="\\"){let c=e[o+1];c==="$"||c==="`"||c==="\\"||c===`
39
39
  `||r&&c==='"'?(c!==`
40
- `&&(i+=c),o+=2):(i+=e[o],o++)}else i+=e[o],o++;o>=e.length&&this.error("unexpected EOF while looking for matching ``'");let l=new t().parse(i);return{part:A.commandSubstitution(l,!0),endIndex:o+1}}parseArithmeticExpansion(e,n){let r=n+3,s=1,o=0,i=r;for(;i<e.length-1&&s>0;)e[i]==="$"&&e[i+1]==="("?e[i+2]==="("?(s++,i+=3):(o++,i+=2):e[i]==="("&&e[i+1]==="("?(s++,i+=2):e[i]===")"&&e[i+1]===")"?o>0?(o--,i++):(s--,s>0&&(i+=2)):e[i]==="("?(o++,i++):(e[i]===")"&&o>0&&o--,i++);let a=e.slice(r,i),l=this.parseArithmeticExpression(a);return{part:A.arithmeticExpansion(l),endIndex:i+2}}parseArithmeticCommand(){this.expect(f.DPAREN_START);let e="",n=1,r=0,s=!1,o=!1;for(;n>0&&!this.check(f.EOF);){if(s){if(s=!1,r>0){r--,e+=")";continue}if(this.check(f.RPAREN)){n--,o=!0,this.advance();continue}if(this.check(f.DPAREN_END)){n--,o=!0;continue}e+=")";continue}this.check(f.DPAREN_START)?(n++,e+="((",this.advance()):this.check(f.DPAREN_END)?r>=2?(r-=2,e+="))",this.advance()):r===1?(r--,e+=")",s=!0,this.advance()):(n--,o=!0,n>0&&(e+="))"),this.advance()):this.check(f.LPAREN)?(r++,e+="(",this.advance()):this.check(f.RPAREN)?(r>0&&r--,e+=")",this.advance()):(e+=this.current().value,this.advance())}o||this.expect(f.DPAREN_END);let i=this.parseArithmeticExpression(e.trim()),a=this.parseOptionalRedirections();return A.arithmeticCommand(i,a)}parseConditionalCommand(){this.expect(f.DBRACK_START);let e=Lt(this);this.expect(f.DBRACK_END);let n=this.parseOptionalRedirections();return A.conditionalCommand(e,n)}parseFunctionDef(){let e;this.check(f.FUNCTION)?(this.advance(),e=this.expect(f.NAME,"Expected function name").value,this.check(f.LPAREN)&&(this.advance(),this.expect(f.RPAREN))):(e=this.advance().value,this.expect(f.LPAREN),this.expect(f.RPAREN)),this.skipNewlines();let n=this.parseCompoundCommandBody(),r=this.parseOptionalRedirections();return A.functionDef(e,n,r)}parseCompoundCommandBody(){if(this.check(f.LBRACE))return Ot(this);if(this.check(f.LPAREN))return Dt(this);if(this.check(f.IF))return vt(this);if(this.check(f.FOR))return Pt(this);if(this.check(f.WHILE))return It(this);if(this.check(f.UNTIL))return Rt(this);if(this.check(f.CASE))return kt(this);this.error("Expected compound command for function body")}parseCompoundList(){let e=[];for(this.skipNewlines();!this.check(f.EOF,f.FI,f.ELSE,f.ELIF,f.THEN,f.DO,f.DONE,f.ESAC,f.RPAREN,f.RBRACE,f.DSEMI,f.SEMI_AND,f.SEMI_SEMI_AND)&&this.isCommandStart();){this.checkIterationLimit();let n=this.pos,r=this.parseStatement();if(r&&e.push(r),this.skipSeparators(),this.pos===n&&!r)break}return e}parseOptionalRedirections(){let e=[];for(;Ze(this);){this.checkIterationLimit();let n=this.pos;if(e.push(Qe(this)),this.pos===n)break}return e}parseArithmeticExpression(e){return L(this,e)}};function le(t){return new M().parse(t)}var Se=class{fs;cwd;constructor(e,n){this.fs=e,this.cwd=n}isGlobPattern(e){return e.includes("*")||e.includes("?")||/\[.*\]/.test(e)}async expandArgs(e,n){let r=[];for(let s=0;s<e.length;s++){let o=e[s];if((n?.[s]??!1)||!this.isGlobPattern(o))r.push(o);else{let a=await this.expand(o);a.length>0?r.push(...a):r.push(o)}}return r}async expand(e){return e.includes("**")?this.expandRecursive(e):this.expandSimple(e)}async expandSimple(e){let n=[],r=e.lastIndexOf("/"),s,o;r===-1?(s=this.cwd,o=e):(s=e.slice(0,r)||"/",o=e.slice(r+1));let i=this.fs.resolvePath(this.cwd,s);try{let a=await this.fs.readdir(i);for(let l of a)if(this.matchPattern(l,o)){let c=r===-1?l:`${s}/${l}`;n.push(c)}}catch{}return n.sort()}async expandRecursive(e){let n=[],r=e.indexOf("**"),s=e.slice(0,r).replace(/\/$/,"")||".",i=e.slice(r+2).replace(/^\//,"");return await this.walkDirectory(s,i,n),n.sort()}async walkDirectory(e,n,r){let s=this.fs.resolvePath(this.cwd,e);try{let o=await this.fs.readdir(s);for(let i of o){let a=e==="."?i:`${e}/${i}`,l=this.fs.resolvePath(this.cwd,a);try{(await this.fs.stat(l)).isDirectory?await this.walkDirectory(a,n,r):n&&this.matchPattern(i,n)&&r.push(a)}catch{}}}catch{}}matchPattern(e,n){return this.patternToRegex(n).test(e)}patternToRegex(e){let n="^";for(let r=0;r<e.length;r++){let s=e[r];if(s==="*")n+=".*";else if(s==="?")n+=".";else if(s==="["){let o=r+1,i="[";for(o<e.length&&(e[o]==="^"||e[o]==="!")&&(i+="^",o++),o<e.length&&e[o]==="]"&&(i+="\\]",o++);o<e.length&&e[o]!=="]";){if(e[o]==="["&&o+1<e.length&&e[o+1]===":"){let a=e.indexOf(":]",o+2);if(a!==-1){let l=e.slice(o+2,a),c=this.posixClassToRegex(l);i+=c,o=a+2;continue}}if(e[o]==="\\"&&o+1<e.length){i+=`\\${e[o+1]}`,o+=2;continue}e[o]==="-"?i+="\\-":i+=e[o],o++}i+="]",n+=i,r=o}else if(s==="\\"&&r+1<e.length){let o=e[r+1];/[.+^${}()|\\*?[\]]/.test(o)?n+=`\\${o}`:n+=o,r++}else/[.+^${}()|]/.test(s)?n+=`\\${s}`:n+=s}return n+="$",new RegExp(n)}posixClassToRegex(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 j(t){switch(t.type){case"ArithCommandSubst":return!0;case"ArithNested":return j(t.expression);case"ArithBinary":return j(t.left)||j(t.right);case"ArithUnary":return j(t.operand);case"ArithTernary":return j(t.condition)||j(t.consequent)||j(t.alternate);case"ArithAssignment":return j(t.value);case"ArithGroup":return j(t.expression);case"ArithArrayElement":return t.index?j(t.index):!1;case"ArithConcat":return t.parts.some(j);default:return!1}}function Wt(t){let e=t.operation;return e?!!("word"in e&&e.word&&ne(e.word)||e.type==="PatternReplacement"&&(e.pattern&&ne(e.pattern)||e.replacement&&ne(e.replacement))||e.type==="PatternRemoval"&&e.pattern&&ne(e.pattern)):!1}function Ke(t){switch(t.type){case"CommandSubstitution":return!0;case"ArithmeticExpansion":return j(t.expression.expression);case"DoubleQuoted":return t.parts.some(Ke);case"BraceExpansion":return t.items.some(e=>e.type==="Word"&&ne(e.word));case"ParameterExpansion":return Wt(t);default:return!1}}function ne(t){return t.parts.some(Ke)}function Ft(t){if(!t.operation)return!1;let e=t.operation,n;if((e.type==="DefaultValue"||e.type==="AssignDefault"||e.type==="UseAlternative"||e.type==="ErrorIfUnset")&&(n=e.word?.parts),!n)return!1;for(let r of n)if(r.type==="DoubleQuoted"||r.type==="SingleQuoted")return!0;return!1}function Xr(t){let e=!1,n=!1,r=!1,s=!1,o=!1;for(let i of t){if((i.type==="SingleQuoted"||i.type==="DoubleQuoted")&&(e=!0,i.type==="DoubleQuoted"))for(let a of i.parts)a.type==="ParameterExpansion"&&a.parameter.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/)&&!a.operation&&(s=!0);i.type==="CommandSubstitution"&&(n=!0),i.type==="ParameterExpansion"&&(o=!0,(i.parameter==="@"||i.parameter==="*")&&(r=!0),Ft(i)&&(e=!0))}return{hasQuoted:e,hasCommandSub:n,hasArrayVar:r,hasArrayAtExpansion:s,hasParamExpansion:o}}function Ns(t,e,n,r,s){let o=n??1;o===0&&(o=1);let i=Math.abs(o),a=[],l=0;r?.match(/^-?0\d/)&&(l=Math.max(l,r.replace(/^-/,"").length)),s?.match(/^-?0\d/)&&(l=Math.max(l,s.replace(/^-/,"").length));let c=u=>{if(l>0){let d=u<0,h=String(Math.abs(u)).padStart(l,"0");return d?`-${h}`:h}return String(u)};if(t<=e)for(let u=t,d=0;u<=e&&d<1e4;u+=i,d++)a.push(c(u));else for(let u=t,d=0;u>=e&&d<1e4;u-=i,d++)a.push(c(u));return a}function $s(t,e,n){let r=n??1;r===0&&(r=1);let s=t.charCodeAt(0),o=e.charCodeAt(0),i=Math.abs(r),a=t>="A"&&t<="Z",l=t>="a"&&t<="z",c=e>="A"&&e<="Z",u=e>="a"&&e<="z";if(a&&u||l&&c)return null;let d=[];if(s<=o)for(let h=s,m=0;h<=o&&m<1e4;h+=i,m++)d.push(String.fromCharCode(h));else for(let h=s,m=0;h>=o&&m<1e4;h-=i,m++)d.push(String.fromCharCode(h));return d}function Re(t,e,n,r,s){let o=n!==void 0?`..${n}`:"";return typeof t=="number"&&typeof e=="number"?{expanded:Ns(t,e,n,r,s),literal:`{${t}..${e}${o}}`}:typeof t=="string"&&typeof e=="string"?{expanded:$s(t,e,n),literal:`{${t}..${e}${o}}`}:{expanded:null,literal:`{${t}..${e}${o}}`}}function H(t,e){let n="",r=0;for(;r<t.length;){let s=t[r];if(s==="\\")if(r+1<t.length){let o=t[r+1];/[\\^$.|+(){}[\]*?]/.test(o)?n+=`\\${o}`:n+=o,r+=2}else n+="\\\\",r++;else if(s==="*")n+=e?".*":".*?",r++;else if(s==="?")n+=".",r++;else if(s==="["){let o=vs(t,r);if(o===-1)n+="\\[",r++;else{let i=t.slice(r+1,o);n+=Ps(i),r=o+1}}else/[\^$.|+(){}]/.test(s)?(n+=`\\${s}`,r++):(n+=s,r++)}return n}function vs(t,e){let n=e+1;for(n<t.length&&t[n]==="^"&&n++,n<t.length&&t[n]==="]"&&n++;n<t.length;){if(t[n]==="\\"&&n+1<t.length){n+=2;continue}if(t[n]==="]")return n;if(t[n]==="'"){let r=t.indexOf("'",n+1);if(r!==-1){n=r+1;continue}}if(t[n]==="["&&n+1<t.length&&t[n+1]===":"){let r=t.indexOf(":]",n+2);if(r!==-1){n=r+2;continue}}n++}return-1}function Ps(t){let e="[",n=0;for((t[0]==="^"||t[0]==="!")&&(e+="^",n++);n<t.length;){if(t[n]==="'"){let s=t.indexOf("'",n+1);if(s!==-1){let o=t.slice(n+1,s);for(let i of o)i==="\\"?e+="\\\\":i==="]"?e+="\\]":i==="^"&&e==="["?e+="\\^":e+=i;n=s+1;continue}}if(t[n]==="["&&n+1<t.length&&t[n+1]===":"){let s=t.indexOf(":]",n+2);if(s!==-1){let o=t.slice(n+2,s);e+=Rs(o),n=s+2;continue}}let r=t[n];r==="\\"?n+1<t.length?(e+=`\\${t[n+1]}`,n+=2):(e+="\\\\",n++):r==="-"&&n>0&&n<t.length-1?(e+="-",n++):r==="^"&&n===0?(e+="^",n++):(r==="]"&&n===0?e+="\\]":e+=r,n++)}return e+="]",e}var Is={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"};function Rs(t){return Is[t]??""}function ke(t,e){let n=`${e}_`,r=[];for(let s of Object.keys(t.state.env))if(s.startsWith(n)){let o=s.slice(n.length),i=Number.parseInt(o,10);!Number.isNaN(i)&&String(i)===o&&r.push(i)}return r.sort((s,o)=>s-o)}function De(t,e){let n=`${e}_`;for(let r of Object.keys(t.state.env))r.startsWith(n)&&delete t.state.env[r]}function Mt(t,e){let n=`${e}_`,r=[];for(let s of Object.keys(t.state.env))if(s.startsWith(n)&&!s.includes("__")){let o=s.slice(n.length);r.push(o)}return r.sort()}function Yr(t){return t.startsWith("'")&&t.endsWith("'")||t.startsWith('"')&&t.endsWith('"')?t.slice(1,-1):t}function Xe(t){return t.IFS??`
41
- `}function Jr(t){return t.IFS===""}function Oe(t){return t.split("").map(e=>/[\\^$.*+?()[\]{}|-]/.test(e)?`\\${e}`:e===" "?"\\t":e===`
42
- `?"\\n":e).join("")}function ks(t,e){let n=Oe(t);return new RegExp(`[${n}]+`,e)}function Ds(t){let e=Oe(t);return new RegExp(`^[${e}]+`)}function Os(t){let e=Oe(t);return new RegExp(`[${e}]+$`)}function be(t){let e=t.IFS;return e===void 0?" ":e[0]||""}function en(t,e){if(e==="")return{words:[t],wordStarts:[0]};let n=[],r=[],s=ks(e,"g"),o=0,i=t.match(Ds(e));i&&(o=i[0].length),s.lastIndex=o;let a=s.exec(t);for(;a!==null;)a.index>o&&(r.push(o),n.push(t.substring(o,a.index))),o=s.lastIndex,a=s.exec(t);return o<t.length&&(r.push(o),n.push(t.substring(o))),{words:n,wordStarts:r}}function tn(t,e){return e===""?t:t.replace(Os(e),"")}function T(t,e){return t.state.associativeArrays?.has(e)?Mt(t,e).map(o=>[o,t.state.env[`${e}_${o}`]]):ke(t,e).map(s=>[s,t.state.env[`${e}_${s}`]])}function rn(t,e){return t.state.associativeArrays?.has(e)?Mt(t,e).length>0:ke(t,e).length>0}function Z(t,e,n=!0,r=!1){switch(e){case"?":return String(t.state.lastExitCode);case"$":return String(process.pid);case"#":return t.state.env["#"]||"0";case"@":return t.state.env["@"]||"";case"_":return t.state.lastArg;case"-":{let i="";return t.state.options.errexit&&(i+="e"),t.state.options.nounset&&(i+="u"),t.state.options.verbose&&(i+="v"),t.state.options.xtrace&&(i+="x"),t.state.options.pipefail&&(i+="p"),i}case"*":{let i=Number.parseInt(t.state.env["#"]||"0",10);if(i===0)return"";let a=[];for(let l=1;l<=i;l++)a.push(t.state.env[String(l)]||"");return a.join(be(t.state.env))}case"0":return t.state.env[0]||"bash";case"PWD":return t.state.env.PWD!==void 0?t.state.env.PWD:"";case"OLDPWD":return t.state.env.OLDPWD!==void 0?t.state.env.OLDPWD:"";case"PPID":{let{ppid:i}=Ie();return String(i)}case"UID":{let{uid:i}=Ie();return String(i)}case"EUID":return String(process.geteuid?.()??Ie().uid);case"RANDOM":return String(Math.floor(Math.random()*32768));case"SECONDS":return String(Math.floor((Date.now()-t.state.startTime)/1e3));case"BASH_VERSION":return xr;case"!":return String(t.state.lastBackgroundPid);case"LINENO":return String(t.state.currentLine)}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[\]$/.test(e))throw new pe(`\${${e}}`);let s=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(s){let i=s[1],a=s[2];if(a==="@"||a==="*"){let d=T(t,i);if(d.length>0)return d.map(([,m])=>m).join(" ");let h=t.state.env[i];return h!==void 0?h:""}if(t.state.associativeArrays?.has(i)){let d=Yr(a),h=t.state.env[`${i}_${d}`];if(h===void 0&&n&&t.state.options.nounset)throw new J(`${i}[${a}]`);return h||""}let c;if(/^-?\d+$/.test(a))c=Number.parseInt(a,10);else try{let d=new M,h=L(d,a);c=$(t,h.expression)}catch{let d=t.state.env[a];c=d?Number.parseInt(d,10):0,Number.isNaN(c)&&(c=0)}if(c<0){let d=T(t,i);if(d.length===0)return t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${i}: bad array subscript
40
+ `&&(i+=c),o+=2):(i+=e[o],o++)}else i+=e[o],o++;o>=e.length&&this.error("unexpected EOF while looking for matching ``'");let l=new t().parse(i);return{part:A.commandSubstitution(l,!0),endIndex:o+1}}parseArithmeticExpansion(e,n){let r=n+3,s=1,o=0,i=r;for(;i<e.length-1&&s>0;)e[i]==="$"&&e[i+1]==="("?e[i+2]==="("?(s++,i+=3):(o++,i+=2):e[i]==="("&&e[i+1]==="("?(s++,i+=2):e[i]===")"&&e[i+1]===")"?o>0?(o--,i++):(s--,s>0&&(i+=2)):e[i]==="("?(o++,i++):(e[i]===")"&&o>0&&o--,i++);let a=e.slice(r,i),l=this.parseArithmeticExpression(a);return{part:A.arithmeticExpansion(l),endIndex:i+2}}parseArithmeticCommand(){this.expect(f.DPAREN_START);let e="",n=1,r=0,s=!1,o=!1;for(;n>0&&!this.check(f.EOF);){if(s){if(s=!1,r>0){r--,e+=")";continue}if(this.check(f.RPAREN)){n--,o=!0,this.advance();continue}if(this.check(f.DPAREN_END)){n--,o=!0;continue}e+=")";continue}this.check(f.DPAREN_START)?(n++,e+="((",this.advance()):this.check(f.DPAREN_END)?r>=2?(r-=2,e+="))",this.advance()):r===1?(r--,e+=")",s=!0,this.advance()):(n--,o=!0,n>0&&(e+="))"),this.advance()):this.check(f.LPAREN)?(r++,e+="(",this.advance()):this.check(f.RPAREN)?(r>0&&r--,e+=")",this.advance()):(e+=this.current().value,this.advance())}o||this.expect(f.DPAREN_END);let i=this.parseArithmeticExpression(e.trim()),a=this.parseOptionalRedirections();return A.arithmeticCommand(i,a)}parseConditionalCommand(){this.expect(f.DBRACK_START);let e=_t(this);this.expect(f.DBRACK_END);let n=this.parseOptionalRedirections();return A.conditionalCommand(e,n)}parseFunctionDef(){let e;this.check(f.FUNCTION)?(this.advance(),e=this.expect(f.NAME,"Expected function name").value,this.check(f.LPAREN)&&(this.advance(),this.expect(f.RPAREN))):(e=this.advance().value,this.expect(f.LPAREN),this.expect(f.RPAREN)),this.skipNewlines();let n=this.parseCompoundCommandBody(),r=this.parseOptionalRedirections();return A.functionDef(e,n,r)}parseCompoundCommandBody(){if(this.check(f.LBRACE))return Dt(this);if(this.check(f.LPAREN))return kt(this);if(this.check(f.IF))return $t(this);if(this.check(f.FOR))return vt(this);if(this.check(f.WHILE))return Pt(this);if(this.check(f.UNTIL))return It(this);if(this.check(f.CASE))return Rt(this);this.error("Expected compound command for function body")}parseCompoundList(){let e=[];for(this.skipNewlines();!this.check(f.EOF,f.FI,f.ELSE,f.ELIF,f.THEN,f.DO,f.DONE,f.ESAC,f.RPAREN,f.RBRACE,f.DSEMI,f.SEMI_AND,f.SEMI_SEMI_AND)&&this.isCommandStart();){this.checkIterationLimit();let n=this.pos,r=this.parseStatement();if(r&&e.push(r),this.skipSeparators(),this.pos===n&&!r)break}return e}parseOptionalRedirections(){let e=[];for(;Ze(this);){this.checkIterationLimit();let n=this.pos;if(e.push(Qe(this)),this.pos===n)break}return e}parseArithmeticExpression(e){return L(this,e)}};function le(t){return new M().parse(t)}var Se=class{fs;cwd;constructor(e,n){this.fs=e,this.cwd=n}isGlobPattern(e){return e.includes("*")||e.includes("?")||/\[.*\]/.test(e)}async expandArgs(e,n){let r=[];for(let s=0;s<e.length;s++){let o=e[s];if((n?.[s]??!1)||!this.isGlobPattern(o))r.push(o);else{let a=await this.expand(o);a.length>0?r.push(...a):r.push(o)}}return r}async expand(e){return e.includes("**")?this.expandRecursive(e):this.expandSimple(e)}async expandSimple(e){let n=[],r=e.lastIndexOf("/"),s,o;r===-1?(s=this.cwd,o=e):(s=e.slice(0,r)||"/",o=e.slice(r+1));let i=this.fs.resolvePath(this.cwd,s);try{let a=await this.fs.readdir(i);for(let l of a)if(this.matchPattern(l,o)){let c=r===-1?l:`${s}/${l}`;n.push(c)}}catch{}return n.sort()}async expandRecursive(e){let n=[],r=e.indexOf("**"),s=e.slice(0,r).replace(/\/$/,"")||".",i=e.slice(r+2).replace(/^\//,"");return await this.walkDirectory(s,i,n),n.sort()}async walkDirectory(e,n,r){let s=this.fs.resolvePath(this.cwd,e);try{let o=await this.fs.readdir(s);for(let i of o){let a=e==="."?i:`${e}/${i}`,l=this.fs.resolvePath(this.cwd,a);try{(await this.fs.stat(l)).isDirectory?await this.walkDirectory(a,n,r):n&&this.matchPattern(i,n)&&r.push(a)}catch{}}}catch{}}matchPattern(e,n){return this.patternToRegex(n).test(e)}patternToRegex(e){let n="^";for(let r=0;r<e.length;r++){let s=e[r];if(s==="*")n+=".*";else if(s==="?")n+=".";else if(s==="["){let o=r+1,i="[";for(o<e.length&&(e[o]==="^"||e[o]==="!")&&(i+="^",o++),o<e.length&&e[o]==="]"&&(i+="\\]",o++);o<e.length&&e[o]!=="]";){if(e[o]==="["&&o+1<e.length&&e[o+1]===":"){let a=e.indexOf(":]",o+2);if(a!==-1){let l=e.slice(o+2,a),c=this.posixClassToRegex(l);i+=c,o=a+2;continue}}if(e[o]==="\\"&&o+1<e.length){i+=`\\${e[o+1]}`,o+=2;continue}e[o]==="-"?i+="\\-":i+=e[o],o++}i+="]",n+=i,r=o}else if(s==="\\"&&r+1<e.length){let o=e[r+1];/[.+^${}()|\\*?[\]]/.test(o)?n+=`\\${o}`:n+=o,r++}else/[.+^${}()|]/.test(s)?n+=`\\${s}`:n+=s}return n+="$",new RegExp(n)}posixClassToRegex(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 q(t){switch(t.type){case"ArithCommandSubst":return!0;case"ArithNested":return q(t.expression);case"ArithBinary":return q(t.left)||q(t.right);case"ArithUnary":return q(t.operand);case"ArithTernary":return q(t.condition)||q(t.consequent)||q(t.alternate);case"ArithAssignment":return q(t.value);case"ArithGroup":return q(t.expression);case"ArithArrayElement":return t.index?q(t.index):!1;case"ArithConcat":return t.parts.some(q);default:return!1}}function Tt(t){let e=t.operation;return e?!!("word"in e&&e.word&&ne(e.word)||e.type==="PatternReplacement"&&(e.pattern&&ne(e.pattern)||e.replacement&&ne(e.replacement))||e.type==="PatternRemoval"&&e.pattern&&ne(e.pattern)):!1}function Ke(t){switch(t.type){case"CommandSubstitution":return!0;case"ArithmeticExpansion":return q(t.expression.expression);case"DoubleQuoted":return t.parts.some(Ke);case"BraceExpansion":return t.items.some(e=>e.type==="Word"&&ne(e.word));case"ParameterExpansion":return Tt(t);default:return!1}}function ne(t){return t.parts.some(Ke)}function Wt(t){if(!t.operation)return!1;let e=t.operation,n;if((e.type==="DefaultValue"||e.type==="AssignDefault"||e.type==="UseAlternative"||e.type==="ErrorIfUnset")&&(n=e.word?.parts),!n)return!1;for(let r of n)if(r.type==="DoubleQuoted"||r.type==="SingleQuoted")return!0;return!1}function Kr(t){let e=!1,n=!1,r=!1,s=!1,o=!1;for(let i of t){if((i.type==="SingleQuoted"||i.type==="DoubleQuoted")&&(e=!0,i.type==="DoubleQuoted"))for(let a of i.parts)a.type==="ParameterExpansion"&&a.parameter.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/)&&!a.operation&&(s=!0);i.type==="CommandSubstitution"&&(n=!0),i.type==="ParameterExpansion"&&(o=!0,(i.parameter==="@"||i.parameter==="*")&&(r=!0),Wt(i)&&(e=!0))}return{hasQuoted:e,hasCommandSub:n,hasArrayVar:r,hasArrayAtExpansion:s,hasParamExpansion:o}}function bs(t,e,n,r,s){let o=n??1;o===0&&(o=1);let i=Math.abs(o),a=[],l=0;r?.match(/^-?0\d/)&&(l=Math.max(l,r.replace(/^-/,"").length)),s?.match(/^-?0\d/)&&(l=Math.max(l,s.replace(/^-/,"").length));let c=u=>{if(l>0){let d=u<0,h=String(Math.abs(u)).padStart(l,"0");return d?`-${h}`:h}return String(u)};if(t<=e)for(let u=t,d=0;u<=e&&d<1e4;u+=i,d++)a.push(c(u));else for(let u=t,d=0;u>=e&&d<1e4;u-=i,d++)a.push(c(u));return a}function Cs(t,e,n){let r=n??1;r===0&&(r=1);let s=t.charCodeAt(0),o=e.charCodeAt(0),i=Math.abs(r),a=t>="A"&&t<="Z",l=t>="a"&&t<="z",c=e>="A"&&e<="Z",u=e>="a"&&e<="z";if(a&&u||l&&c)return null;let d=[];if(s<=o)for(let h=s,m=0;h<=o&&m<1e4;h+=i,m++)d.push(String.fromCharCode(h));else for(let h=s,m=0;h>=o&&m<1e4;h-=i,m++)d.push(String.fromCharCode(h));return d}function ke(t,e,n,r,s){let o=n!==void 0?`..${n}`:"";return typeof t=="number"&&typeof e=="number"?{expanded:bs(t,e,n,r,s),literal:`{${t}..${e}${o}}`}:typeof t=="string"&&typeof e=="string"?{expanded:Cs(t,e,n),literal:`{${t}..${e}${o}}`}:{expanded:null,literal:`{${t}..${e}${o}}`}}function H(t,e){let n="",r=0;for(;r<t.length;){let s=t[r];if(s==="\\")if(r+1<t.length){let o=t[r+1];/[\\^$.|+(){}[\]*?]/.test(o)?n+=`\\${o}`:n+=o,r+=2}else n+="\\\\",r++;else if(s==="*")n+=e?".*":".*?",r++;else if(s==="?")n+=".",r++;else if(s==="["){let o=Ns(t,r);if(o===-1)n+="\\[",r++;else{let i=t.slice(r+1,o);n+=$s(i),r=o+1}}else/[\^$.|+(){}]/.test(s)?(n+=`\\${s}`,r++):(n+=s,r++)}return n}function Ns(t,e){let n=e+1;for(n<t.length&&t[n]==="^"&&n++,n<t.length&&t[n]==="]"&&n++;n<t.length;){if(t[n]==="\\"&&n+1<t.length){n+=2;continue}if(t[n]==="]")return n;if(t[n]==="'"){let r=t.indexOf("'",n+1);if(r!==-1){n=r+1;continue}}if(t[n]==="["&&n+1<t.length&&t[n+1]===":"){let r=t.indexOf(":]",n+2);if(r!==-1){n=r+2;continue}}n++}return-1}function $s(t){let e="[",n=0;for((t[0]==="^"||t[0]==="!")&&(e+="^",n++);n<t.length;){if(t[n]==="'"){let s=t.indexOf("'",n+1);if(s!==-1){let o=t.slice(n+1,s);for(let i of o)i==="\\"?e+="\\\\":i==="]"?e+="\\]":i==="^"&&e==="["?e+="\\^":e+=i;n=s+1;continue}}if(t[n]==="["&&n+1<t.length&&t[n+1]===":"){let s=t.indexOf(":]",n+2);if(s!==-1){let o=t.slice(n+2,s);e+=Ps(o),n=s+2;continue}}let r=t[n];r==="\\"?n+1<t.length?(e+=`\\${t[n+1]}`,n+=2):(e+="\\\\",n++):r==="-"&&n>0&&n<t.length-1?(e+="-",n++):r==="^"&&n===0?(e+="^",n++):(r==="]"&&n===0?e+="\\]":e+=r,n++)}return e+="]",e}var vs={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"};function Ps(t){return vs[t]??""}function De(t,e){let n=`${e}_`,r=[];for(let s of Object.keys(t.state.env))if(s.startsWith(n)){let o=s.slice(n.length),i=Number.parseInt(o,10);!Number.isNaN(i)&&String(i)===o&&r.push(i)}return r.sort((s,o)=>s-o)}function Oe(t,e){let n=`${e}_`;for(let r of Object.keys(t.state.env))r.startsWith(n)&&delete t.state.env[r]}function Ft(t,e){let n=`${e}_`,r=[];for(let s of Object.keys(t.state.env))if(s.startsWith(n)&&!s.includes("__")){let o=s.slice(n.length);r.push(o)}return r.sort()}function Xr(t){return t.startsWith("'")&&t.endsWith("'")||t.startsWith('"')&&t.endsWith('"')?t.slice(1,-1):t}function Xe(t){return t.IFS??`
41
+ `}function Yr(t){return t.IFS===""}function _e(t){return t.split("").map(e=>/[\\^$.*+?()[\]{}|-]/.test(e)?`\\${e}`:e===" "?"\\t":e===`
42
+ `?"\\n":e).join("")}function Is(t,e){let n=_e(t);return new RegExp(`[${n}]+`,e)}function Rs(t){let e=_e(t);return new RegExp(`^[${e}]+`)}function ks(t){let e=_e(t);return new RegExp(`[${e}]+$`)}function be(t){let e=t.IFS;return e===void 0?" ":e[0]||""}function Jr(t,e){if(e==="")return{words:[t],wordStarts:[0]};let n=[],r=[],s=Is(e,"g"),o=0,i=t.match(Rs(e));i&&(o=i[0].length),s.lastIndex=o;let a=s.exec(t);for(;a!==null;)a.index>o&&(r.push(o),n.push(t.substring(o,a.index))),o=s.lastIndex,a=s.exec(t);return o<t.length&&(r.push(o),n.push(t.substring(o))),{words:n,wordStarts:r}}function en(t,e){return e===""?t:t.replace(ks(e),"")}function T(t,e){return t.state.associativeArrays?.has(e)?Ft(t,e).map(o=>[o,t.state.env[`${e}_${o}`]]):De(t,e).map(s=>[s,t.state.env[`${e}_${s}`]])}function tn(t,e){return t.state.associativeArrays?.has(e)?Ft(t,e).length>0:De(t,e).length>0}function Z(t,e,n=!0,r=!1){switch(e){case"?":return String(t.state.lastExitCode);case"$":return String(process.pid);case"#":return t.state.env["#"]||"0";case"@":return t.state.env["@"]||"";case"_":return t.state.lastArg;case"-":{let i="";return t.state.options.errexit&&(i+="e"),t.state.options.nounset&&(i+="u"),t.state.options.verbose&&(i+="v"),t.state.options.xtrace&&(i+="x"),t.state.options.pipefail&&(i+="p"),i}case"*":{let i=Number.parseInt(t.state.env["#"]||"0",10);if(i===0)return"";let a=[];for(let l=1;l<=i;l++)a.push(t.state.env[String(l)]||"");return a.join(be(t.state.env))}case"0":return t.state.env[0]||"bash";case"PWD":return t.state.env.PWD!==void 0?t.state.env.PWD:"";case"OLDPWD":return t.state.env.OLDPWD!==void 0?t.state.env.OLDPWD:"";case"PPID":{let{ppid:i}=Re();return String(i)}case"UID":{let{uid:i}=Re();return String(i)}case"EUID":return String(process.geteuid?.()??Re().uid);case"RANDOM":return String(Math.floor(Math.random()*32768));case"SECONDS":return String(Math.floor((Date.now()-t.state.startTime)/1e3));case"BASH_VERSION":return Ar;case"!":return String(t.state.lastBackgroundPid);case"LINENO":return String(t.state.currentLine)}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[\]$/.test(e))throw new pe(`\${${e}}`);let s=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(s){let i=s[1],a=s[2];if(a==="@"||a==="*"){let d=T(t,i);if(d.length>0)return d.map(([,m])=>m).join(" ");let h=t.state.env[i];return h!==void 0?h:""}if(t.state.associativeArrays?.has(i)){let d=Xr(a),h=t.state.env[`${i}_${d}`];if(h===void 0&&n&&t.state.options.nounset)throw new J(`${i}[${a}]`);return h||""}let c;if(/^-?\d+$/.test(a))c=Number.parseInt(a,10);else try{let d=new M,h=L(d,a);c=$(t,h.expression)}catch{let d=t.state.env[a];c=d?Number.parseInt(d,10):0,Number.isNaN(c)&&(c=0)}if(c<0){let d=T(t,i);if(d.length===0)return t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${i}: bad array subscript
43
43
  `,"";let m=Math.max(...d.map(([w])=>typeof w=="number"?w:0))+1+c;return m<0?(t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${i}: bad array subscript
44
- `,""):t.state.env[`${i}_${m}`]||""}let u=t.state.env[`${i}_${c}`];if(u===void 0&&n&&t.state.options.nounset)throw new J(`${i}[${c}]`);return u||""}if(/^[1-9][0-9]*$/.test(e)){let i=t.state.env[e];if(i===void 0&&n&&t.state.options.nounset)throw new J(e);return i||""}let o=t.state.env[e];if(o===void 0&&n&&t.state.options.nounset)throw new J(e);return o||""}async function nn(t,e,n,r,s){let o=[];for(let u of e){let d=u.type==="ParameterExpansion"||u.type==="CommandSubstitution"||u.type==="ArithmeticExpansion";if(u.type==="ParameterExpansion"&&Ft(u)){let h=await s(t,u);o.push({value:h,splittable:!1})}else{let h=await s(t,u);o.push({value:h,splittable:d})}}if(!o.some(u=>u.splittable&&new RegExp(`[${r}]`).test(u.value))){let u=o.map(d=>d.value).join("");return u?[u]:[]}let a=new RegExp(`[${r}]+`),l=[],c="";for(let u=0;u<o.length;u++){let d=o[u];if(!d.splittable)c+=d.value;else{let h=d.value.split(a);for(let m=0;m<h.length;m++)m===0?c+=h[m]:(c!==""&&l.push(c),c=h[m])}}return c!==""&&l.push(c),l}function V(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function sn(t){switch(t.type){case"Literal":return t.value;case"SingleQuoted":return t.value;case"Escaped":return t.value;default:return null}}function on(t){switch(t.type){case"SingleQuoted":case"Escaped":case"DoubleQuoted":return!0;case"Literal":return t.value==="";default:return!1}}function Bt(t){if(t==="")return"''";if(!/['\\\n\r\t\x00-\x1f\x7f]/.test(t))return`'${t}'`;let e="$'";for(let n of t)switch(n){case"'":e+="\\'";break;case"\\":e+="\\\\";break;case`
45
- `:e+="\\n";break;case"\r":e+="\\r";break;case" ":e+="\\t";break;default:{let r=n.charCodeAt(0);r<32||r===127?e+=`\\x${r.toString(16).padStart(2,"0")}`:e+=n}}return`${e}'`}function Ee(t,e,n=!1){return e.map(r=>se(t,r,n)).join("")}async function we(t,e,n=!1){let r=[];for(let s of e)r.push(await Q(t,s));return r.join("")}function _s(t){return on(t)}function an(t){if(t.parts.length===0)return!0;for(let e of t.parts)if(!_s(e))return!1;return!0}function cn(t){return t.replace(/([*?[\]\\])/g,"\\$1")}function ln(t,e,n=!1){let r=sn(e);if(r!==null)return r;switch(e.type){case"ParameterExpansion":return mn(t,e,n);case"TildeExpansion":return n?e.user===null?"~":`~${e.user}`:e.user===null?t.state.env.HOME||"/home/user":e.user==="root"?"/root":`~${e.user}`;case"Glob":return e.pattern;default:return null}}function se(t,e,n=!1){let r=ln(t,e,n);if(r!==null)return r;switch(e.type){case"DoubleQuoted":{let s=[];for(let o of e.parts)s.push(se(t,o,!0));return s.join("")}case"ArithmeticExpansion":return String($(t,e.expression.expression));case"BraceExpansion":{let s=[];for(let o of e.items)if(o.type==="Range"){let i=Re(o.start,o.end,o.step,o.startStr,o.endStr);if(i.expanded)s.push(...i.expanded);else return i.literal}else s.push(Ye(t,o.word));return s.join(" ")}default:return""}}function Ye(t,e){let n=e.parts,r=n.length;if(r===1)return se(t,n[0]);let s=[];for(let o=0;o<r;o++)s.push(se(t,n[o]));return s.join("")}async function P(t,e){return ne(e)?hn(t,e):Ye(t,e)}function Je(t){for(let e of t)if(e.type==="BraceExpansion"||e.type==="DoubleQuoted"&&Je(e.parts))return!0;return!1}function Ls(t){for(let e of t){if(e.type==="BraceExpansion"){for(let n of e.items)if(n.type==="Word"&&ne(n.word))return!0}if(Ke(e))return!0}return!1}var un=1e4,Ce=1e5;function fn(t,e,n={count:0}){if(n.count>Ce)return[[]];let r=[[]];for(let s of e)if(s.type==="BraceExpansion"){let o=[],i=!1,a="";for(let u of s.items)if(u.type==="Range"){let d=Re(u.start,u.end,u.step,u.startStr,u.endStr);if(d.expanded)for(let h of d.expanded)n.count++,o.push(h);else{i=!0,a=d.literal;break}}else{let d=fn(t,u.word.parts,n);for(let h of d)n.count++,o.push(h.join(""))}if(i){for(let u of r)n.count++,u.push(a);continue}if(r.length*o.length>un||n.count>Ce)return r;let c=[];for(let u of r)for(let d of o){if(n.count++,n.count>Ce)return c.length>0?c:r;c.push([...u,d])}r=c}else{let o=se(t,s);for(let i of r)n.count++,i.push(o)}return r}function Ts(t,e){let n=e.parts;return Je(n)?fn(t,n).map(s=>s.join("")):[Ye(t,e)]}async function dn(t,e,n={count:0}){if(n.count>Ce)return[[]];let r=[[]];for(let s of e)if(s.type==="BraceExpansion"){let o=[],i=!1,a="";for(let u of s.items)if(u.type==="Range"){let d=Re(u.start,u.end,u.step,u.startStr,u.endStr);if(d.expanded)for(let h of d.expanded)n.count++,o.push(h);else{i=!0,a=d.literal;break}}else{let d=await dn(t,u.word.parts,n);for(let h of d)n.count++,o.push(h.join(""))}if(i){for(let u of r)n.count++,u.push(a);continue}if(r.length*o.length>un||n.count>Ce)return r;let c=[];for(let u of r)for(let d of o){if(n.count++,n.count>Ce)return c.length>0?c:r;c.push([...u,d])}r=c}else{let o=await Q(t,s);for(let i of r)n.count++,i.push(o)}return r}async function Ws(t,e){let n=e.parts;return Je(n)?(await dn(t,n)).map(s=>s.join("")):[await P(t,e)]}async function _e(t,e){let n=e.parts,{hasQuoted:r,hasCommandSub:s,hasArrayVar:o,hasArrayAtExpansion:i,hasParamExpansion:a}=Xr(n),c=Je(n)?Ls(n)?await Ws(t,e):Ts(t,e):null;if(c&&c.length>1){let h=[];for(let m of c)if(!r&&/[*?[]/.test(m)){let w=await new Se(t.fs,t.state.cwd).expand(m);w.length>0?h.push(...w):h.push(m)}else h.push(m);return{values:h,quoted:!1}}if(i&&n.length===1&&n[0].type==="DoubleQuoted"){let h=n[0];if(h.parts.length===1&&h.parts[0].type==="ParameterExpansion"){let y=h.parts[0].parameter.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@]\]$/);if(y){let w=y[1],p=T(t,w);if(p.length>0)return{values:p.map(([,g])=>g),quoted:!0};let E=t.state.env[w];return E!==void 0?{values:[E],quoted:!0}:{values:[],quoted:!0}}}}if(n.length===1&&n[0].type==="DoubleQuoted"){let h=n[0],m=-1,y=!1;for(let w=0;w<h.parts.length;w++){let p=h.parts[w];if(p.type==="ParameterExpansion"&&(p.parameter==="@"||p.parameter==="*")){m=w,y=p.parameter==="*";break}}if(m!==-1){let w=h.parts[m];w.type==="ParameterExpansion"&&w.operation&&(m=-1)}if(m!==-1){let w=Number.parseInt(t.state.env["#"]||"0",10),p="";for(let C=0;C<m;C++)p+=await Q(t,h.parts[C]);let E="";for(let C=m+1;C<h.parts.length;C++)E+=await Q(t,h.parts[C]);if(w===0){if(y)return{values:[p+E],quoted:!0};let C=p+E;return{values:C?[C]:[],quoted:!0}}let g=[];for(let C=1;C<=w;C++)g.push(t.state.env[String(C)]||"");if(y){let C=be(t.state.env);return{values:[p+g.join(C)+E],quoted:!0}}return g.length===1?{values:[p+g[0]+E],quoted:!0}:{values:[p+g[0],...g.slice(1,-1),g[g.length-1]+E],quoted:!0}}}if((s||o||a)&&!Jr(t.state.env)){let h=Xe(t.state.env),m=Oe(h),y=await nn(t,n,h,m,Q),w=[],p=new Se(t.fs,t.state.cwd);for(let E of y)if(/[*?[]/.test(E)){let g=await p.expand(E);g.length>0?w.push(...g):w.push(E)}else w.push(E);return{values:w,quoted:!1}}let d=ne(e)?await hn(t,e):Ye(t,e);if(!r&&/[*?[]/.test(d)){let m=await new Se(t.fs,t.state.cwd).expand(d);if(m.length>0)return{values:m,quoted:!1}}return d===""&&!r?{values:[],quoted:!1}:{values:[d],quoted:r}}async function hn(t,e){let n=e.parts,r=n.length;if(r===1)return Q(t,n[0]);let s=[];for(let o=0;o<r;o++)s.push(await Q(t,n[o]));return s.join("")}async function Q(t,e){if(e.type==="ParameterExpansion"&&Wt(e))return Fs(t,e);let n=ln(t,e);if(n!==null)return n;switch(e.type){case"DoubleQuoted":{let r=[];for(let s of e.parts)r.push(await Q(t,s));return r.join("")}case"CommandSubstitution":try{let r=await t.executeScript(e.body);return t.state.lastExitCode=r.exitCode,t.state.env["?"]=String(r.exitCode),r.stdout.replace(/\n+$/,"")}catch(r){if(r instanceof z)throw r;if(r instanceof R)return t.state.lastExitCode=r.exitCode,t.state.env["?"]=String(r.exitCode),r.stdout.replace(/\n+$/,"");throw r}case"ArithmeticExpansion":return String(await v(t,e.expression.expression));case"BraceExpansion":{let r=[];for(let s of e.items)if(s.type==="Range"){let o=Re(s.start,s.end,s.step,s.startStr,s.endStr);if(o.expanded)r.push(...o.expanded);else return o.literal}else r.push(await P(t,s.word));return r.join(" ")}default:return""}}function mn(t,e,n=!1){let{parameter:r,operation:s}=e,o=s&&(s.type==="DefaultValue"||s.type==="AssignDefault"||s.type==="UseAlternative"||s.type==="ErrorIfUnset"),i=Z(t,r,!o);if(!s)return i;let a=!(r in t.state.env),l=i==="";switch(s.type){case"DefaultValue":return(a||s.checkEmpty&&l)&&s.word?Ee(t,s.word.parts,n):i;case"AssignDefault":{if((a||s.checkEmpty&&l)&&s.word){let u=Ee(t,s.word.parts,n),d=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(d){let[,h,m]=d,y;if(/^\d+$/.test(m))y=Number.parseInt(m,10);else{try{let p=new M,E=L(p,m);y=$(t,E.expression)}catch{let p=t.state.env[m];y=p?Number.parseInt(p,10):0}Number.isNaN(y)&&(y=0)}t.state.env[`${h}_${y}`]=u;let w=Number.parseInt(t.state.env[`${h}__length`]||"0",10);y>=w&&(t.state.env[`${h}__length`]=String(y+1))}else t.state.env[r]=u;return u}return i}case"ErrorIfUnset":{if(a||s.checkEmpty&&l){let u=s.word?Ee(t,s.word.parts,n):`${r}: parameter null or not set`;throw new R(1,"",`bash: ${u}
46
- `)}return i}case"UseAlternative":return!(a||s.checkEmpty&&l)&&s.word?Ee(t,s.word.parts,n):"";case"Length":{let c=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(c){let u=T(t,c[1]);return String(u.length)}if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)&&rn(t,r)){let u=t.state.env[`${r}_0`]||"";return String(u.length)}return String(i.length)}case"LengthSliceError":throw new pe(r);case"Substring":{let c=s.offset?$(t,s.offset.expression):0,u=s.length?$(t,s.length.expression):void 0;if(r==="@"||r==="*"){let y=(t.state.env["@"]||"").split(" ").filter(g=>g),w=t.state.env[0]||"bash",p=c===0?[w,...y]:y,E=c===0?0:c-1;if(E<0||E>=p.length)return"";if(u!==void 0){let g=u<0?p.length+u:E+u;return p.slice(E,Math.max(E,g)).join(" ")}return p.slice(E).join(" ")}let d=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(d){let w=T(t,d[1]).map(([,E])=>E),p=c;if(p<0&&(p=w.length+p,p<0))return"";if(u!==void 0){if(u<0){let E=w.length+u;return w.slice(p,Math.max(p,E)).join(" ")}return w.slice(p,p+u).join(" ")}return w.slice(p).join(" ")}let h=[...i],m=c;if(m<0&&(m=Math.max(0,h.length+m)),u!==void 0){if(u<0){let y=h.length+u;return h.slice(m,Math.max(m,y)).join("")}return h.slice(m,m+u).join("")}return h.slice(m).join("")}case"PatternRemoval":{let c="";if(s.pattern)for(let d of s.pattern.parts)if(d.type==="Glob")c+=H(d.pattern,s.greedy);else if(d.type==="Literal")c+=H(d.value,s.greedy);else if(d.type==="SingleQuoted"||d.type==="Escaped")c+=V(d.value);else if(d.type==="DoubleQuoted"){let h=Ee(t,d.parts);c+=V(h)}else if(d.type==="ParameterExpansion"){let h=se(t,d);c+=H(h,s.greedy)}else{let h=se(t,d);c+=V(h)}if(s.side==="prefix")return i.replace(new RegExp(`^${c}`),"");let u=new RegExp(`${c}$`);if(s.greedy)return i.replace(u,"");for(let d=i.length;d>=0;d--){let h=i.slice(d);if(u.test(h))return i.slice(0,d)}return i}case"PatternReplacement":{let c="";if(s.pattern)for(let h of s.pattern.parts)if(h.type==="Glob")c+=H(h.pattern,!0);else if(h.type==="Literal")c+=H(h.value,!0);else if(h.type==="SingleQuoted"||h.type==="Escaped")c+=V(h.value);else if(h.type==="DoubleQuoted"){let m=Ee(t,h.parts);c+=V(m)}else if(h.type==="ParameterExpansion"){let m=se(t,h);c+=H(m,!0)}else{let m=se(t,h);c+=V(m)}let u=s.replacement?Ee(t,s.replacement.parts):"";if(c==="")return i;s.anchor==="start"?c=`^${c}`:s.anchor==="end"&&(c=`${c}$`);let d=s.all?"g":"";try{let h=new RegExp(c,d);if(s.all){let m="",y=0,w=h.exec(i);for(;w!==null&&!(w[0].length===0&&w.index===i.length);)m+=i.slice(y,w.index)+u,y=w.index+w[0].length,w[0].length===0&&y++,w=h.exec(i);return m+=i.slice(y),m}return i.replace(h,u)}catch{return i}}case"CaseModification":return s.direction==="upper"?s.all?i.toUpperCase():i.charAt(0).toUpperCase()+i.slice(1):s.all?i.toLowerCase():i.charAt(0).toLowerCase()+i.slice(1);case"Transform":{let c=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(c&&s.operator==="Q")return T(t,c[1]).map(([,h])=>Bt(h)).join(" ");switch(s.operator){case"Q":return Bt(i);case"P":return i;case"a":return"";case"A":return`${r}=${Bt(i)}`;case"E":return i.replace(/\\([\\abefnrtv'"?])/g,(u,d)=>{switch(d){case"\\":return"\\";case"a":return"\x07";case"b":return"\b";case"e":return"\x1B";case"f":return"\f";case"n":return`
47
- `;case"r":return"\r";case"t":return" ";case"v":return"\v";case"'":return"'";case'"':return'"';case"?":return"?";default:return d}});case"K":return"";default:return i}}case"Indirection":return Z(t,i);case"ArrayKeys":{let u=T(t,s.array).map(([d])=>String(d));return s.star?u.join(be(t.state.env)):u.join(" ")}case"VarNamePrefix":{let c=Object.keys(t.state.env).filter(u=>u.startsWith(s.prefix)&&!u.includes("__")).sort();return s.star?c.join(be(t.state.env)):c.join(" ")}default:return i}}async function Fs(t,e,n=!1){let{parameter:r,operation:s}=e,o=s&&(s.type==="DefaultValue"||s.type==="AssignDefault"||s.type==="UseAlternative"||s.type==="ErrorIfUnset"),i=Z(t,r,!o);if(!s)return i;let a=!(r in t.state.env),l=i==="";switch(s.type){case"DefaultValue":return(a||s.checkEmpty&&l)&&s.word?we(t,s.word.parts,n):i;case"AssignDefault":{if((a||s.checkEmpty&&l)&&s.word){let u=await we(t,s.word.parts,n),d=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(d){let[,h,m]=d,y;if(/^\d+$/.test(m))y=Number.parseInt(m,10);else{try{let p=new M,E=L(p,m);y=await v(t,E.expression)}catch{let p=t.state.env[m];y=p?Number.parseInt(p,10):0}Number.isNaN(y)&&(y=0)}t.state.env[`${h}_${y}`]=u;let w=Number.parseInt(t.state.env[`${h}__length`]||"0",10);y>=w&&(t.state.env[`${h}__length`]=String(y+1))}else t.state.env[r]=u;return u}return i}case"ErrorIfUnset":{if(a||s.checkEmpty&&l){let u=s.word?await we(t,s.word.parts,n):`${r}: parameter null or not set`;throw new R(1,"",`bash: ${u}
48
- `)}return i}case"UseAlternative":return!(a||s.checkEmpty&&l)&&s.word?we(t,s.word.parts,n):"";case"PatternRemoval":{let c="";if(s.pattern)for(let d of s.pattern.parts)if(d.type==="Glob")c+=H(d.pattern,s.greedy);else if(d.type==="Literal")c+=H(d.value,s.greedy);else if(d.type==="SingleQuoted"||d.type==="Escaped")c+=V(d.value);else if(d.type==="DoubleQuoted"){let h=await we(t,d.parts);c+=V(h)}else if(d.type==="ParameterExpansion"){let h=await Q(t,d);c+=H(h,s.greedy)}else{let h=await Q(t,d);c+=V(h)}if(s.side==="prefix")return i.replace(new RegExp(`^${c}`),"");let u=new RegExp(`${c}$`);if(s.greedy)return i.replace(u,"");for(let d=i.length;d>=0;d--){let h=i.slice(d);if(u.test(h))return i.slice(0,d)}return i}case"PatternReplacement":{let c="";if(s.pattern)for(let h of s.pattern.parts)if(h.type==="Glob")c+=H(h.pattern,!0);else if(h.type==="Literal")c+=H(h.value,!0);else if(h.type==="SingleQuoted"||h.type==="Escaped")c+=V(h.value);else if(h.type==="DoubleQuoted"){let m=await we(t,h.parts);c+=V(m)}else if(h.type==="ParameterExpansion"){let m=await Q(t,h);c+=H(m,!0)}else{let m=await Q(t,h);c+=V(m)}let u=s.replacement?await we(t,s.replacement.parts):"";if(c==="")return i;s.anchor==="start"?c=`^${c}`:s.anchor==="end"&&(c=`${c}$`);let d=s.all?"g":"";try{let h=new RegExp(c,d);if(s.all){let m="",y=0,w=h.exec(i);for(;w!==null&&!(w[0].length===0&&w.index===i.length);)m+=i.slice(y,w.index)+u,y=w.index+w[0].length,w[0].length===0&&y++,w=h.exec(i);return m+=i.slice(y),m}return i.replace(h,u)}catch{return i}}default:return mn(t,e,n)}}function zt(t,e,n){switch(n){case"+":return t+e;case"-":return t-e;case"*":return t*e;case"/":return e!==0?Math.trunc(t/e):0;case"%":return e!==0?t%e:0;case"**":if(e<0)throw new F("exponent less than 0");return t**e;case"<<":return t<<e;case">>":return t>>e;case"<":return t<e?1:0;case"<=":return t<=e?1:0;case">":return t>e?1:0;case">=":return t>=e?1:0;case"==":return t===e?1:0;case"!=":return t!==e?1:0;case"&":return t&e;case"|":return t|e;case"^":return t^e;case",":return e;default:return 0}}function pn(t,e,n){switch(n){case"=":return e;case"+=":return t+e;case"-=":return t-e;case"*=":return t*e;case"/=":return e!==0?Math.trunc(t/e):0;case"%=":return e!==0?t%e:0;case"<<=":return t<<e;case">>=":return t>>e;case"&=":return t&e;case"|=":return t|e;case"^=":return t^e;default:return e}}function Ut(t,e){switch(e){case"-":return-t;case"+":return+t;case"!":return t===0?1:0;case"~":return~t;default:return t}}function Ms(t,e){let n=t.state.env[e];if(n!==void 0)return n;let r=t.state.env[`${e}_0`];return r!==void 0?r:Z(t,e)}function Ne(t){if(!t)return 0;let e=Number.parseInt(t,10);if(!Number.isNaN(e)&&/^-?\d+$/.test(t.trim()))return e;let n=t.trim();if(!n)return 0;try{let r=new M,{expr:s,pos:o}=te(r,n,0);if(o<n.length){let i=n.slice(o).trim().split(/\s+/)[0];throw new F(`${n}: syntax error in expression (error token is "${i}")`)}return s.type==="ArithNumber"?s.value:e||0}catch(r){if(r instanceof F)throw r;let s=n.split(/\s+/).slice(1)[0]||n;throw new F(`${n}: syntax error in expression (error token is "${s}")`)}}function et(t,e,n=new Set){if(n.has(e))return 0;n.add(e);let r=Ms(t,e);if(!r)return 0;let s=Number.parseInt(r,10);if(!Number.isNaN(s)&&/^-?\d+$/.test(r.trim()))return s;let o=r.trim();if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(o))return et(t,o,n);try{let i=new M,{expr:a}=te(i,o,0);return K(t,a,n)}catch{return 0}}function K(t,e,n){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new F("value too great for base");return e.value;case"ArithVariable":return et(t,e.name,n);case"ArithBinary":{if(e.operator==="||")return K(t,e.left,n)||K(t,e.right,n)?1:0;if(e.operator==="&&")return K(t,e.left,n)&&K(t,e.right,n)?1:0;let r=K(t,e.left,n),s=K(t,e.right,n);return zt(r,s,e.operator)}case"ArithUnary":{let r=K(t,e.operand,n);return Ut(r,e.operator)}case"ArithTernary":return K(t,e.condition,n)?K(t,e.consequent,n):K(t,e.alternate,n);case"ArithGroup":return K(t,e.expression,n);default:return $(t,e)}}function ue(t,e){if(e.startsWith("#")){let d=e.slice(1),h=t.state.env[d]||"";return String(h.length)}if(e.startsWith("!")){let d=e.slice(1),h=t.state.env[d]||"";return t.state.env[h]||""}let n=[":-",":=",":?",":+","-","=","?","+"],r=-1,s="";for(let d of n){let h=e.indexOf(d);h>0&&(r===-1||h<r)&&(r=h,s=d)}if(r===-1)return Z(t,e);let o=e.slice(0,r),i=e.slice(r+s.length),a=t.state.env[o],l=a===void 0,c=a==="",u=s.startsWith(":");switch(s){case":-":case"-":return l||u&&c?i:a||"";case":=":case"=":return l||u&&c?(t.state.env[o]=i,i):a||"";case":+":case"+":return!(l||u&&c)?i:"";case":?":case"?":{if(l||u&&c)throw new Error(i||`${o}: parameter null or not set`);return a||""}default:return a||""}}function $(t,e){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new F("value too great for base");return e.value;case"ArithVariable":return et(t,e.name);case"ArithNested":return $(t,e.expression);case"ArithCommandSubst":return 0;case"ArithBracedExpansion":{let n=ue(t,e.content);return Number.parseInt(n,10)||0}case"ArithDynamicBase":{let n=ue(t,e.baseExpr),r=Number.parseInt(n,10);if(r<2||r>64)return 0;let s=`${r}#${e.value}`;return xe(s)}case"ArithDynamicNumber":{let r=ue(t,e.prefix)+e.suffix;return xe(r)}case"ArithArrayElement":{let n=t.state.associativeArrays?.has(e.array),r;if(e.stringKey!==void 0)r=`${e.array}_${e.stringKey}`;else if(n&&e.index?.type==="ArithVariable")r=`${e.array}_${e.index.name}`;else if(e.index){let o=$(t,e.index);if(o<0){let a=T(t,e.array);if(a.length===0)return t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${e.array}: bad array subscript
44
+ `,""):t.state.env[`${i}_${m}`]||""}let u=t.state.env[`${i}_${c}`];if(u===void 0&&n&&t.state.options.nounset)throw new J(`${i}[${c}]`);return u||""}if(/^[1-9][0-9]*$/.test(e)){let i=t.state.env[e];if(i===void 0&&n&&t.state.options.nounset)throw new J(e);return i||""}let o=t.state.env[e];if(o===void 0&&n&&t.state.options.nounset)throw new J(e);return o||""}async function rn(t,e,n,r,s){let o=[];for(let u of e){let d=u.type==="ParameterExpansion"||u.type==="CommandSubstitution"||u.type==="ArithmeticExpansion";if(u.type==="ParameterExpansion"&&Wt(u)){let h=await s(t,u);o.push({value:h,splittable:!1})}else{let h=await s(t,u);o.push({value:h,splittable:d})}}if(!o.some(u=>u.splittable&&new RegExp(`[${r}]`).test(u.value))){let u=o.map(d=>d.value).join("");return u?[u]:[]}let a=new RegExp(`[${r}]+`),l=[],c="";for(let u=0;u<o.length;u++){let d=o[u];if(!d.splittable)c+=d.value;else{let h=d.value.split(a);for(let m=0;m<h.length;m++)m===0?c+=h[m]:(c!==""&&l.push(c),c=h[m])}}return c!==""&&l.push(c),l}function V(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function nn(t){switch(t.type){case"Literal":return t.value;case"SingleQuoted":return t.value;case"Escaped":return t.value;default:return null}}function sn(t){switch(t.type){case"SingleQuoted":case"Escaped":case"DoubleQuoted":return!0;case"Literal":return t.value==="";default:return!1}}function Mt(t){if(t==="")return"''";if(!/['\\\n\r\t\x00-\x1f\x7f]/.test(t))return`'${t}'`;let e="$'";for(let n of t)switch(n){case"'":e+="\\'";break;case"\\":e+="\\\\";break;case`
45
+ `:e+="\\n";break;case"\r":e+="\\r";break;case" ":e+="\\t";break;default:{let r=n.charCodeAt(0);r<32||r===127?e+=`\\x${r.toString(16).padStart(2,"0")}`:e+=n}}return`${e}'`}function Ee(t,e,n=!1){return e.map(r=>se(t,r,n)).join("")}async function we(t,e,n=!1){let r=[];for(let s of e)r.push(await Q(t,s));return r.join("")}function Ds(t){return sn(t)}function on(t){if(t.parts.length===0)return!0;for(let e of t.parts)if(!Ds(e))return!1;return!0}function an(t){return t.replace(/([*?[\]\\])/g,"\\$1")}function cn(t,e,n=!1){let r=nn(e);if(r!==null)return r;switch(e.type){case"ParameterExpansion":return hn(t,e,n);case"TildeExpansion":return n?e.user===null?"~":`~${e.user}`:e.user===null?t.state.env.HOME||"/home/user":e.user==="root"?"/root":`~${e.user}`;case"Glob":return e.pattern;default:return null}}function se(t,e,n=!1){let r=cn(t,e,n);if(r!==null)return r;switch(e.type){case"DoubleQuoted":{let s=[];for(let o of e.parts)s.push(se(t,o,!0));return s.join("")}case"ArithmeticExpansion":return String($(t,e.expression.expression));case"BraceExpansion":{let s=[];for(let o of e.items)if(o.type==="Range"){let i=ke(o.start,o.end,o.step,o.startStr,o.endStr);if(i.expanded)s.push(...i.expanded);else return i.literal}else s.push(Ye(t,o.word));return s.join(" ")}default:return""}}function Ye(t,e){let n=e.parts,r=n.length;if(r===1)return se(t,n[0]);let s=[];for(let o=0;o<r;o++)s.push(se(t,n[o]));return s.join("")}async function P(t,e){return ne(e)?dn(t,e):Ye(t,e)}function Je(t){for(let e of t)if(e.type==="BraceExpansion"||e.type==="DoubleQuoted"&&Je(e.parts))return!0;return!1}function Os(t){for(let e of t){if(e.type==="BraceExpansion"){for(let n of e.items)if(n.type==="Word"&&ne(n.word))return!0}if(Ke(e))return!0}return!1}var ln=1e4,Ce=1e5;function un(t,e,n={count:0}){if(n.count>Ce)return[[]];let r=[[]];for(let s of e)if(s.type==="BraceExpansion"){let o=[],i=!1,a="";for(let u of s.items)if(u.type==="Range"){let d=ke(u.start,u.end,u.step,u.startStr,u.endStr);if(d.expanded)for(let h of d.expanded)n.count++,o.push(h);else{i=!0,a=d.literal;break}}else{let d=un(t,u.word.parts,n);for(let h of d)n.count++,o.push(h.join(""))}if(i){for(let u of r)n.count++,u.push(a);continue}if(r.length*o.length>ln||n.count>Ce)return r;let c=[];for(let u of r)for(let d of o){if(n.count++,n.count>Ce)return c.length>0?c:r;c.push([...u,d])}r=c}else{let o=se(t,s);for(let i of r)n.count++,i.push(o)}return r}function _s(t,e){let n=e.parts;return Je(n)?un(t,n).map(s=>s.join("")):[Ye(t,e)]}async function fn(t,e,n={count:0}){if(n.count>Ce)return[[]];let r=[[]];for(let s of e)if(s.type==="BraceExpansion"){let o=[],i=!1,a="";for(let u of s.items)if(u.type==="Range"){let d=ke(u.start,u.end,u.step,u.startStr,u.endStr);if(d.expanded)for(let h of d.expanded)n.count++,o.push(h);else{i=!0,a=d.literal;break}}else{let d=await fn(t,u.word.parts,n);for(let h of d)n.count++,o.push(h.join(""))}if(i){for(let u of r)n.count++,u.push(a);continue}if(r.length*o.length>ln||n.count>Ce)return r;let c=[];for(let u of r)for(let d of o){if(n.count++,n.count>Ce)return c.length>0?c:r;c.push([...u,d])}r=c}else{let o=await Q(t,s);for(let i of r)n.count++,i.push(o)}return r}async function Ls(t,e){let n=e.parts;return Je(n)?(await fn(t,n)).map(s=>s.join("")):[await P(t,e)]}async function Le(t,e){let n=e.parts,{hasQuoted:r,hasCommandSub:s,hasArrayVar:o,hasArrayAtExpansion:i,hasParamExpansion:a}=Kr(n),c=Je(n)?Os(n)?await Ls(t,e):_s(t,e):null;if(c&&c.length>1){let h=[];for(let m of c)if(!r&&/[*?[]/.test(m)){let w=await new Se(t.fs,t.state.cwd).expand(m);w.length>0?h.push(...w):h.push(m)}else h.push(m);return{values:h,quoted:!1}}if(i&&n.length===1&&n[0].type==="DoubleQuoted"){let h=n[0];if(h.parts.length===1&&h.parts[0].type==="ParameterExpansion"){let y=h.parts[0].parameter.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@]\]$/);if(y){let w=y[1],p=T(t,w);if(p.length>0)return{values:p.map(([,g])=>g),quoted:!0};let E=t.state.env[w];return E!==void 0?{values:[E],quoted:!0}:{values:[],quoted:!0}}}}if(n.length===1&&n[0].type==="DoubleQuoted"){let h=n[0],m=-1,y=!1;for(let w=0;w<h.parts.length;w++){let p=h.parts[w];if(p.type==="ParameterExpansion"&&(p.parameter==="@"||p.parameter==="*")){m=w,y=p.parameter==="*";break}}if(m!==-1){let w=h.parts[m];w.type==="ParameterExpansion"&&w.operation&&(m=-1)}if(m!==-1){let w=Number.parseInt(t.state.env["#"]||"0",10),p="";for(let C=0;C<m;C++)p+=await Q(t,h.parts[C]);let E="";for(let C=m+1;C<h.parts.length;C++)E+=await Q(t,h.parts[C]);if(w===0){if(y)return{values:[p+E],quoted:!0};let C=p+E;return{values:C?[C]:[],quoted:!0}}let g=[];for(let C=1;C<=w;C++)g.push(t.state.env[String(C)]||"");if(y){let C=be(t.state.env);return{values:[p+g.join(C)+E],quoted:!0}}return g.length===1?{values:[p+g[0]+E],quoted:!0}:{values:[p+g[0],...g.slice(1,-1),g[g.length-1]+E],quoted:!0}}}if((s||o||a)&&!Yr(t.state.env)){let h=Xe(t.state.env),m=_e(h),y=await rn(t,n,h,m,Q),w=[],p=new Se(t.fs,t.state.cwd);for(let E of y)if(/[*?[]/.test(E)){let g=await p.expand(E);g.length>0?w.push(...g):w.push(E)}else w.push(E);return{values:w,quoted:!1}}let d=ne(e)?await dn(t,e):Ye(t,e);if(!r&&/[*?[]/.test(d)){let m=await new Se(t.fs,t.state.cwd).expand(d);if(m.length>0)return{values:m,quoted:!1}}return d===""&&!r?{values:[],quoted:!1}:{values:[d],quoted:r}}async function dn(t,e){let n=e.parts,r=n.length;if(r===1)return Q(t,n[0]);let s=[];for(let o=0;o<r;o++)s.push(await Q(t,n[o]));return s.join("")}async function Q(t,e){if(e.type==="ParameterExpansion"&&Tt(e))return Ts(t,e);let n=cn(t,e);if(n!==null)return n;switch(e.type){case"DoubleQuoted":{let r=[];for(let s of e.parts)r.push(await Q(t,s));return r.join("")}case"CommandSubstitution":try{let r=await t.executeScript(e.body);return t.state.lastExitCode=r.exitCode,t.state.env["?"]=String(r.exitCode),r.stdout.replace(/\n+$/,"")}catch(r){if(r instanceof z)throw r;if(r instanceof R)return t.state.lastExitCode=r.exitCode,t.state.env["?"]=String(r.exitCode),r.stdout.replace(/\n+$/,"");throw r}case"ArithmeticExpansion":return String(await v(t,e.expression.expression));case"BraceExpansion":{let r=[];for(let s of e.items)if(s.type==="Range"){let o=ke(s.start,s.end,s.step,s.startStr,s.endStr);if(o.expanded)r.push(...o.expanded);else return o.literal}else r.push(await P(t,s.word));return r.join(" ")}default:return""}}function hn(t,e,n=!1){let{parameter:r,operation:s}=e,o=s&&(s.type==="DefaultValue"||s.type==="AssignDefault"||s.type==="UseAlternative"||s.type==="ErrorIfUnset"),i=Z(t,r,!o);if(!s)return i;let a=!(r in t.state.env),l=i==="";switch(s.type){case"DefaultValue":return(a||s.checkEmpty&&l)&&s.word?Ee(t,s.word.parts,n):i;case"AssignDefault":{if((a||s.checkEmpty&&l)&&s.word){let u=Ee(t,s.word.parts,n),d=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(d){let[,h,m]=d,y;if(/^\d+$/.test(m))y=Number.parseInt(m,10);else{try{let p=new M,E=L(p,m);y=$(t,E.expression)}catch{let p=t.state.env[m];y=p?Number.parseInt(p,10):0}Number.isNaN(y)&&(y=0)}t.state.env[`${h}_${y}`]=u;let w=Number.parseInt(t.state.env[`${h}__length`]||"0",10);y>=w&&(t.state.env[`${h}__length`]=String(y+1))}else t.state.env[r]=u;return u}return i}case"ErrorIfUnset":{if(a||s.checkEmpty&&l){let u=s.word?Ee(t,s.word.parts,n):`${r}: parameter null or not set`;throw new R(1,"",`bash: ${u}
46
+ `)}return i}case"UseAlternative":return!(a||s.checkEmpty&&l)&&s.word?Ee(t,s.word.parts,n):"";case"Length":{let c=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(c){let u=T(t,c[1]);return String(u.length)}if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)&&tn(t,r)){let u=t.state.env[`${r}_0`]||"";return String(u.length)}return String(i.length)}case"LengthSliceError":throw new pe(r);case"Substring":{let c=s.offset?$(t,s.offset.expression):0,u=s.length?$(t,s.length.expression):void 0;if(r==="@"||r==="*"){let y=(t.state.env["@"]||"").split(" ").filter(g=>g),w=t.state.env[0]||"bash",p=c===0?[w,...y]:y,E=c===0?0:c-1;if(E<0||E>=p.length)return"";if(u!==void 0){let g=u<0?p.length+u:E+u;return p.slice(E,Math.max(E,g)).join(" ")}return p.slice(E).join(" ")}let d=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(d){let w=T(t,d[1]).map(([,E])=>E),p=c;if(p<0&&(p=w.length+p,p<0))return"";if(u!==void 0){if(u<0){let E=w.length+u;return w.slice(p,Math.max(p,E)).join(" ")}return w.slice(p,p+u).join(" ")}return w.slice(p).join(" ")}let h=[...i],m=c;if(m<0&&(m=Math.max(0,h.length+m)),u!==void 0){if(u<0){let y=h.length+u;return h.slice(m,Math.max(m,y)).join("")}return h.slice(m,m+u).join("")}return h.slice(m).join("")}case"PatternRemoval":{let c="";if(s.pattern)for(let d of s.pattern.parts)if(d.type==="Glob")c+=H(d.pattern,s.greedy);else if(d.type==="Literal")c+=H(d.value,s.greedy);else if(d.type==="SingleQuoted"||d.type==="Escaped")c+=V(d.value);else if(d.type==="DoubleQuoted"){let h=Ee(t,d.parts);c+=V(h)}else if(d.type==="ParameterExpansion"){let h=se(t,d);c+=H(h,s.greedy)}else{let h=se(t,d);c+=V(h)}if(s.side==="prefix")return i.replace(new RegExp(`^${c}`),"");let u=new RegExp(`${c}$`);if(s.greedy)return i.replace(u,"");for(let d=i.length;d>=0;d--){let h=i.slice(d);if(u.test(h))return i.slice(0,d)}return i}case"PatternReplacement":{let c="";if(s.pattern)for(let h of s.pattern.parts)if(h.type==="Glob")c+=H(h.pattern,!0);else if(h.type==="Literal")c+=H(h.value,!0);else if(h.type==="SingleQuoted"||h.type==="Escaped")c+=V(h.value);else if(h.type==="DoubleQuoted"){let m=Ee(t,h.parts);c+=V(m)}else if(h.type==="ParameterExpansion"){let m=se(t,h);c+=H(m,!0)}else{let m=se(t,h);c+=V(m)}let u=s.replacement?Ee(t,s.replacement.parts):"";if(c==="")return i;s.anchor==="start"?c=`^${c}`:s.anchor==="end"&&(c=`${c}$`);let d=s.all?"g":"";try{let h=new RegExp(c,d);if(s.all){let m="",y=0,w=h.exec(i);for(;w!==null&&!(w[0].length===0&&w.index===i.length);)m+=i.slice(y,w.index)+u,y=w.index+w[0].length,w[0].length===0&&y++,w=h.exec(i);return m+=i.slice(y),m}return i.replace(h,u)}catch{return i}}case"CaseModification":return s.direction==="upper"?s.all?i.toUpperCase():i.charAt(0).toUpperCase()+i.slice(1):s.all?i.toLowerCase():i.charAt(0).toLowerCase()+i.slice(1);case"Transform":{let c=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(c&&s.operator==="Q")return T(t,c[1]).map(([,h])=>Mt(h)).join(" ");switch(s.operator){case"Q":return Mt(i);case"P":return i;case"a":return"";case"A":return`${r}=${Mt(i)}`;case"E":return i.replace(/\\([\\abefnrtv'"?])/g,(u,d)=>{switch(d){case"\\":return"\\";case"a":return"\x07";case"b":return"\b";case"e":return"\x1B";case"f":return"\f";case"n":return`
47
+ `;case"r":return"\r";case"t":return" ";case"v":return"\v";case"'":return"'";case'"':return'"';case"?":return"?";default:return d}});case"K":return"";default:return i}}case"Indirection":return Z(t,i);case"ArrayKeys":{let u=T(t,s.array).map(([d])=>String(d));return s.star?u.join(be(t.state.env)):u.join(" ")}case"VarNamePrefix":{let c=Object.keys(t.state.env).filter(u=>u.startsWith(s.prefix)&&!u.includes("__")).sort();return s.star?c.join(be(t.state.env)):c.join(" ")}default:return i}}async function Ts(t,e,n=!1){let{parameter:r,operation:s}=e,o=s&&(s.type==="DefaultValue"||s.type==="AssignDefault"||s.type==="UseAlternative"||s.type==="ErrorIfUnset"),i=Z(t,r,!o);if(!s)return i;let a=!(r in t.state.env),l=i==="";switch(s.type){case"DefaultValue":return(a||s.checkEmpty&&l)&&s.word?we(t,s.word.parts,n):i;case"AssignDefault":{if((a||s.checkEmpty&&l)&&s.word){let u=await we(t,s.word.parts,n),d=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(d){let[,h,m]=d,y;if(/^\d+$/.test(m))y=Number.parseInt(m,10);else{try{let p=new M,E=L(p,m);y=await v(t,E.expression)}catch{let p=t.state.env[m];y=p?Number.parseInt(p,10):0}Number.isNaN(y)&&(y=0)}t.state.env[`${h}_${y}`]=u;let w=Number.parseInt(t.state.env[`${h}__length`]||"0",10);y>=w&&(t.state.env[`${h}__length`]=String(y+1))}else t.state.env[r]=u;return u}return i}case"ErrorIfUnset":{if(a||s.checkEmpty&&l){let u=s.word?await we(t,s.word.parts,n):`${r}: parameter null or not set`;throw new R(1,"",`bash: ${u}
48
+ `)}return i}case"UseAlternative":return!(a||s.checkEmpty&&l)&&s.word?we(t,s.word.parts,n):"";case"PatternRemoval":{let c="";if(s.pattern)for(let d of s.pattern.parts)if(d.type==="Glob")c+=H(d.pattern,s.greedy);else if(d.type==="Literal")c+=H(d.value,s.greedy);else if(d.type==="SingleQuoted"||d.type==="Escaped")c+=V(d.value);else if(d.type==="DoubleQuoted"){let h=await we(t,d.parts);c+=V(h)}else if(d.type==="ParameterExpansion"){let h=await Q(t,d);c+=H(h,s.greedy)}else{let h=await Q(t,d);c+=V(h)}if(s.side==="prefix")return i.replace(new RegExp(`^${c}`),"");let u=new RegExp(`${c}$`);if(s.greedy)return i.replace(u,"");for(let d=i.length;d>=0;d--){let h=i.slice(d);if(u.test(h))return i.slice(0,d)}return i}case"PatternReplacement":{let c="";if(s.pattern)for(let h of s.pattern.parts)if(h.type==="Glob")c+=H(h.pattern,!0);else if(h.type==="Literal")c+=H(h.value,!0);else if(h.type==="SingleQuoted"||h.type==="Escaped")c+=V(h.value);else if(h.type==="DoubleQuoted"){let m=await we(t,h.parts);c+=V(m)}else if(h.type==="ParameterExpansion"){let m=await Q(t,h);c+=H(m,!0)}else{let m=await Q(t,h);c+=V(m)}let u=s.replacement?await we(t,s.replacement.parts):"";if(c==="")return i;s.anchor==="start"?c=`^${c}`:s.anchor==="end"&&(c=`${c}$`);let d=s.all?"g":"";try{let h=new RegExp(c,d);if(s.all){let m="",y=0,w=h.exec(i);for(;w!==null&&!(w[0].length===0&&w.index===i.length);)m+=i.slice(y,w.index)+u,y=w.index+w[0].length,w[0].length===0&&y++,w=h.exec(i);return m+=i.slice(y),m}return i.replace(h,u)}catch{return i}}default:return hn(t,e,n)}}function Bt(t,e,n){switch(n){case"+":return t+e;case"-":return t-e;case"*":return t*e;case"/":return e!==0?Math.trunc(t/e):0;case"%":return e!==0?t%e:0;case"**":if(e<0)throw new F("exponent less than 0");return t**e;case"<<":return t<<e;case">>":return t>>e;case"<":return t<e?1:0;case"<=":return t<=e?1:0;case">":return t>e?1:0;case">=":return t>=e?1:0;case"==":return t===e?1:0;case"!=":return t!==e?1:0;case"&":return t&e;case"|":return t|e;case"^":return t^e;case",":return e;default:return 0}}function mn(t,e,n){switch(n){case"=":return e;case"+=":return t+e;case"-=":return t-e;case"*=":return t*e;case"/=":return e!==0?Math.trunc(t/e):0;case"%=":return e!==0?t%e:0;case"<<=":return t<<e;case">>=":return t>>e;case"&=":return t&e;case"|=":return t|e;case"^=":return t^e;default:return e}}function zt(t,e){switch(e){case"-":return-t;case"+":return+t;case"!":return t===0?1:0;case"~":return~t;default:return t}}function Ws(t,e){let n=t.state.env[e];if(n!==void 0)return n;let r=t.state.env[`${e}_0`];return r!==void 0?r:Z(t,e)}function Ne(t){if(!t)return 0;let e=Number.parseInt(t,10);if(!Number.isNaN(e)&&/^-?\d+$/.test(t.trim()))return e;let n=t.trim();if(!n)return 0;try{let r=new M,{expr:s,pos:o}=te(r,n,0);if(o<n.length){let i=n.slice(o).trim().split(/\s+/)[0];throw new F(`${n}: syntax error in expression (error token is "${i}")`)}return s.type==="ArithNumber"?s.value:e||0}catch(r){if(r instanceof F)throw r;let s=n.split(/\s+/).slice(1)[0]||n;throw new F(`${n}: syntax error in expression (error token is "${s}")`)}}function et(t,e,n=new Set){if(n.has(e))return 0;n.add(e);let r=Ws(t,e);if(!r)return 0;let s=Number.parseInt(r,10);if(!Number.isNaN(s)&&/^-?\d+$/.test(r.trim()))return s;let o=r.trim();if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(o))return et(t,o,n);try{let i=new M,{expr:a}=te(i,o,0);return K(t,a,n)}catch{return 0}}function K(t,e,n){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new F("value too great for base");return e.value;case"ArithVariable":return et(t,e.name,n);case"ArithBinary":{if(e.operator==="||")return K(t,e.left,n)||K(t,e.right,n)?1:0;if(e.operator==="&&")return K(t,e.left,n)&&K(t,e.right,n)?1:0;let r=K(t,e.left,n),s=K(t,e.right,n);return Bt(r,s,e.operator)}case"ArithUnary":{let r=K(t,e.operand,n);return zt(r,e.operator)}case"ArithTernary":return K(t,e.condition,n)?K(t,e.consequent,n):K(t,e.alternate,n);case"ArithGroup":return K(t,e.expression,n);default:return $(t,e)}}function ue(t,e){if(e.startsWith("#")){let d=e.slice(1),h=t.state.env[d]||"";return String(h.length)}if(e.startsWith("!")){let d=e.slice(1),h=t.state.env[d]||"";return t.state.env[h]||""}let n=[":-",":=",":?",":+","-","=","?","+"],r=-1,s="";for(let d of n){let h=e.indexOf(d);h>0&&(r===-1||h<r)&&(r=h,s=d)}if(r===-1)return Z(t,e);let o=e.slice(0,r),i=e.slice(r+s.length),a=t.state.env[o],l=a===void 0,c=a==="",u=s.startsWith(":");switch(s){case":-":case"-":return l||u&&c?i:a||"";case":=":case"=":return l||u&&c?(t.state.env[o]=i,i):a||"";case":+":case"+":return!(l||u&&c)?i:"";case":?":case"?":{if(l||u&&c)throw new Error(i||`${o}: parameter null or not set`);return a||""}default:return a||""}}function $(t,e){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new F("value too great for base");return e.value;case"ArithVariable":return et(t,e.name);case"ArithNested":return $(t,e.expression);case"ArithCommandSubst":return 0;case"ArithBracedExpansion":{let n=ue(t,e.content);return Number.parseInt(n,10)||0}case"ArithDynamicBase":{let n=ue(t,e.baseExpr),r=Number.parseInt(n,10);if(r<2||r>64)return 0;let s=`${r}#${e.value}`;return xe(s)}case"ArithDynamicNumber":{let r=ue(t,e.prefix)+e.suffix;return xe(r)}case"ArithArrayElement":{let n=t.state.associativeArrays?.has(e.array),r;if(e.stringKey!==void 0)r=`${e.array}_${e.stringKey}`;else if(n&&e.index?.type==="ArithVariable")r=`${e.array}_${e.index.name}`;else if(e.index){let o=$(t,e.index);if(o<0){let a=T(t,e.array);if(a.length===0)return t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${e.array}: bad array subscript
49
49
  `,0;let c=Math.max(...a.map(([u])=>typeof u=="number"?u:0))+1+o;if(c<0)return t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${e.array}: bad array subscript
50
- `,0;o=c}r=`${e.array}_${o}`;let i=t.state.env[r];if(i!==void 0)return Ne(i);if(o===0){let a=t.state.env[e.array];if(a!==void 0)return Ne(a)}if(t.state.options.nounset&&!Object.keys(t.state.env).some(l=>l===e.array||l.startsWith(`${e.array}_`)))throw new J(`${e.array}[${o}]`);return 0}else return 0;let s=t.state.env[r];return s!==void 0?Ne(s):0}case"ArithDoubleSubscript":throw new F("double subscript","","");case"ArithNumberSubscript":throw new F(`${e.number}${e.errorToken}: syntax error: invalid arithmetic operator (error token is "${e.errorToken}")`);case"ArithBinary":{if(e.operator==="||")return $(t,e.left)||$(t,e.right)?1:0;if(e.operator==="&&")return $(t,e.left)&&$(t,e.right)?1:0;let n=$(t,e.left),r=$(t,e.right);return zt(n,r,e.operator)}case"ArithUnary":{let n=$(t,e.operand);if(e.operator==="++"||e.operator==="--"){if(e.operand.type==="ArithVariable"){let r=e.operand.name,s=Number.parseInt(Z(t,r),10)||0,o=e.operator==="++"?s+1:s-1;return t.state.env[r]=String(o),e.prefix?o:s}if(e.operand.type==="ArithArrayElement"){let r=e.operand.array,s=t.state.associativeArrays?.has(r),o;if(e.operand.stringKey!==void 0)o=`${r}_${e.operand.stringKey}`;else if(s&&e.operand.index?.type==="ArithVariable")o=`${r}_${e.operand.index.name}`;else if(e.operand.index){let l=$(t,e.operand.index);o=`${r}_${l}`}else return n;let i=Number.parseInt(t.state.env[o]||"0",10)||0,a=e.operator==="++"?i+1:i-1;return t.state.env[o]=String(a),e.prefix?a:i}return n}return Ut(n,e.operator)}case"ArithTernary":return $(t,e.condition)?$(t,e.consequent):$(t,e.alternate);case"ArithAssignment":{let n=e.variable,r=n;if(e.stringKey!==void 0)r=`${n}_${e.stringKey}`;else if(e.subscript){let a=t.state.associativeArrays?.has(n);if(a&&e.subscript.type==="ArithVariable")r=`${n}_${e.subscript.name}`;else if(a){let l=$(t,e.subscript);r=`${n}_${l}`}else{let l=$(t,e.subscript);if(l<0){let c=T(t,n);c.length>0&&(l=Math.max(...c.map(([d])=>typeof d=="number"?d:0))+1+l)}r=`${n}_${l}`}}let s=Number.parseInt(t.state.env[r]||"0",10)||0,o=$(t,e.value),i=pn(s,o,e.operator);return t.state.env[r]=String(i),i}case"ArithGroup":return $(t,e.expression);case"ArithConcat":{let n="";for(let r of e.parts)n+=yn(t,r);return Number.parseInt(n,10)||0}default:return 0}}function yn(t,e){switch(e.type){case"ArithNumber":return String(e.value);case"ArithVariable":return Z(t,e.name);case"ArithBracedExpansion":return ue(t,e.content);case"ArithCommandSubst":return"0";case"ArithConcat":{let n="";for(let r of e.parts)n+=yn(t,r);return n}default:return String($(t,e))}}async function v(t,e){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new F("value too great for base");return e.value;case"ArithVariable":return et(t,e.name);case"ArithNested":return v(t,e.expression);case"ArithCommandSubst":{if(t.execFn){let r=(await t.execFn(e.command)).stdout.trim();return Number.parseInt(r,10)||0}return 0}case"ArithBracedExpansion":{let n=ue(t,e.content);return Number.parseInt(n,10)||0}case"ArithDynamicBase":{let n=ue(t,e.baseExpr),r=Number.parseInt(n,10);if(r<2||r>64)return 0;let s=`${r}#${e.value}`;return xe(s)}case"ArithDynamicNumber":{let r=ue(t,e.prefix)+e.suffix;return xe(r)}case"ArithArrayElement":{let n=t.state.associativeArrays?.has(e.array),r;if(e.stringKey!==void 0)r=`${e.array}_${e.stringKey}`;else if(n&&e.index?.type==="ArithVariable")r=`${e.array}_${e.index.name}`;else if(e.index){let o=await v(t,e.index);r=`${e.array}_${o}`;let i=t.state.env[r];if(i!==void 0)return Ne(i);if(o===0){let a=t.state.env[e.array];if(a!==void 0)return Ne(a)}if(t.state.options.nounset&&!Object.keys(t.state.env).some(l=>l===e.array||l.startsWith(`${e.array}_`)))throw new J(`${e.array}[${o}]`);return 0}else return 0;let s=t.state.env[r];return s!==void 0?Ne(s):0}case"ArithDoubleSubscript":throw new F("double subscript","","");case"ArithNumberSubscript":throw new F(`${e.number}${e.errorToken}: syntax error: invalid arithmetic operator (error token is "${e.errorToken}")`);case"ArithBinary":{if(e.operator==="||")return await v(t,e.left)||await v(t,e.right)?1:0;if(e.operator==="&&")return await v(t,e.left)&&await v(t,e.right)?1:0;let n=await v(t,e.left),r=await v(t,e.right);return zt(n,r,e.operator)}case"ArithUnary":{let n=await v(t,e.operand);if(e.operator==="++"||e.operator==="--"){if(e.operand.type==="ArithVariable"){let r=e.operand.name,s=Number.parseInt(Z(t,r),10)||0,o=e.operator==="++"?s+1:s-1;return t.state.env[r]=String(o),e.prefix?o:s}if(e.operand.type==="ArithArrayElement"){let r=e.operand.array,s=t.state.associativeArrays?.has(r),o;if(e.operand.stringKey!==void 0)o=`${r}_${e.operand.stringKey}`;else if(s&&e.operand.index?.type==="ArithVariable")o=`${r}_${e.operand.index.name}`;else if(e.operand.index){let l=await v(t,e.operand.index);o=`${r}_${l}`}else return n;let i=Number.parseInt(t.state.env[o]||"0",10)||0,a=e.operator==="++"?i+1:i-1;return t.state.env[o]=String(a),e.prefix?a:i}return n}return Ut(n,e.operator)}case"ArithTernary":return await v(t,e.condition)?await v(t,e.consequent):await v(t,e.alternate);case"ArithAssignment":{let n=e.variable,r=n;if(e.stringKey!==void 0)r=`${n}_${e.stringKey}`;else if(e.subscript){let a=t.state.associativeArrays?.has(n);if(a&&e.subscript.type==="ArithVariable")r=`${n}_${e.subscript.name}`;else if(a){let l=await v(t,e.subscript);r=`${n}_${l}`}else{let l=await v(t,e.subscript);if(l<0){let c=T(t,n);c.length>0&&(l=Math.max(...c.map(([d])=>typeof d=="number"?d:0))+1+l)}r=`${n}_${l}`}}let s=Number.parseInt(t.state.env[r]||"0",10)||0,o=await v(t,e.value),i=pn(s,o,e.operator);return t.state.env[r]=String(i),i}case"ArithGroup":return await v(t,e.expression);case"ArithConcat":{let n="";for(let r of e.parts)n+=await En(t,r);return Number.parseInt(n,10)||0}default:return 0}}async function En(t,e){switch(e.type){case"ArithNumber":return String(e.value);case"ArithVariable":return Z(t,e.name);case"ArithBracedExpansion":return ue(t,e.content);case"ArithCommandSubst":return t.execFn?(await t.execFn(e.command)).stdout.trim():"0";case"ArithConcat":{let n="";for(let r of e.parts)n+=await En(t,r);return n}default:return String(await v(t,e))}}var N=Object.freeze({stdout:"",stderr:"",exitCode:0});function q(t=""){return{stdout:t,stderr:"",exitCode:0}}function S(t,e=1){return{stdout:"",stderr:t,exitCode:e}}function x(t,e,n){return{stdout:t,stderr:e,exitCode:n}}function O(t){return{stdout:"",stderr:"",exitCode:t?0:1}}function ie(t,e,n="",r=""){throw new z(t,e,n,r)}function Gt(t,e){if(t.state.loopDepth===0){if(t.state.parentHasLoopContext)throw new oe;return N}let n=1;if(e.length>0){let r=Number.parseInt(e[0],10);if(Number.isNaN(r)||r<1)throw new R(128,"",`bash: break: ${e[0]}: numeric argument required
51
- `);n=r}throw new U(n)}async function Ht(t,e){let n,r=!1,s=!1,o=0;for(;o<e.length;)if(e[o]==="--"){o++;break}else if(e[o]==="-L")s=!1,o++;else if(e[o]==="-P")s=!0,o++;else if(e[o].startsWith("-")&&e[o]!=="-")o++;else break;let i=e.slice(o);if(i.length===0||i[0]==="~"?n=t.state.env.HOME||"/":i[0]==="-"?(n=t.state.previousDir,r=!0):n=i[0],!n.startsWith("/")&&!n.startsWith("./")&&!n.startsWith("../")&&n!=="."&&n!==".."){let d=t.state.env.CDPATH;if(d){let h=d.split(":").filter(m=>m);for(let m of h){let y=m.startsWith("/")?`${m}/${n}`:`${t.state.cwd}/${m}/${n}`;try{if((await t.fs.stat(y)).isDirectory){n=y,r=!0;break}}catch{}}}}let l=(n.startsWith("/")?n:`${t.state.cwd}/${n}`).split("/").filter(d=>d&&d!=="."),c="";for(let d of l)if(d==="..")c=c.split("/").slice(0,-1).join("/")||"/";else{c=c?`${c}/${d}`:`/${d}`;try{if(!(await t.fs.stat(c)).isDirectory)return S(`bash: cd: ${n}: Not a directory
50
+ `,0;o=c}r=`${e.array}_${o}`;let i=t.state.env[r];if(i!==void 0)return Ne(i);if(o===0){let a=t.state.env[e.array];if(a!==void 0)return Ne(a)}if(t.state.options.nounset&&!Object.keys(t.state.env).some(l=>l===e.array||l.startsWith(`${e.array}_`)))throw new J(`${e.array}[${o}]`);return 0}else return 0;let s=t.state.env[r];return s!==void 0?Ne(s):0}case"ArithDoubleSubscript":throw new F("double subscript","","");case"ArithNumberSubscript":throw new F(`${e.number}${e.errorToken}: syntax error: invalid arithmetic operator (error token is "${e.errorToken}")`);case"ArithBinary":{if(e.operator==="||")return $(t,e.left)||$(t,e.right)?1:0;if(e.operator==="&&")return $(t,e.left)&&$(t,e.right)?1:0;let n=$(t,e.left),r=$(t,e.right);return Bt(n,r,e.operator)}case"ArithUnary":{let n=$(t,e.operand);if(e.operator==="++"||e.operator==="--"){if(e.operand.type==="ArithVariable"){let r=e.operand.name,s=Number.parseInt(Z(t,r),10)||0,o=e.operator==="++"?s+1:s-1;return t.state.env[r]=String(o),e.prefix?o:s}if(e.operand.type==="ArithArrayElement"){let r=e.operand.array,s=t.state.associativeArrays?.has(r),o;if(e.operand.stringKey!==void 0)o=`${r}_${e.operand.stringKey}`;else if(s&&e.operand.index?.type==="ArithVariable")o=`${r}_${e.operand.index.name}`;else if(e.operand.index){let l=$(t,e.operand.index);o=`${r}_${l}`}else return n;let i=Number.parseInt(t.state.env[o]||"0",10)||0,a=e.operator==="++"?i+1:i-1;return t.state.env[o]=String(a),e.prefix?a:i}return n}return zt(n,e.operator)}case"ArithTernary":return $(t,e.condition)?$(t,e.consequent):$(t,e.alternate);case"ArithAssignment":{let n=e.variable,r=n;if(e.stringKey!==void 0)r=`${n}_${e.stringKey}`;else if(e.subscript){let a=t.state.associativeArrays?.has(n);if(a&&e.subscript.type==="ArithVariable")r=`${n}_${e.subscript.name}`;else if(a){let l=$(t,e.subscript);r=`${n}_${l}`}else{let l=$(t,e.subscript);if(l<0){let c=T(t,n);c.length>0&&(l=Math.max(...c.map(([d])=>typeof d=="number"?d:0))+1+l)}r=`${n}_${l}`}}let s=Number.parseInt(t.state.env[r]||"0",10)||0,o=$(t,e.value),i=mn(s,o,e.operator);return t.state.env[r]=String(i),i}case"ArithGroup":return $(t,e.expression);case"ArithConcat":{let n="";for(let r of e.parts)n+=pn(t,r);return Number.parseInt(n,10)||0}default:return 0}}function pn(t,e){switch(e.type){case"ArithNumber":return String(e.value);case"ArithVariable":return Z(t,e.name);case"ArithBracedExpansion":return ue(t,e.content);case"ArithCommandSubst":return"0";case"ArithConcat":{let n="";for(let r of e.parts)n+=pn(t,r);return n}default:return String($(t,e))}}async function v(t,e){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new F("value too great for base");return e.value;case"ArithVariable":return et(t,e.name);case"ArithNested":return v(t,e.expression);case"ArithCommandSubst":{if(t.execFn){let r=(await t.execFn(e.command)).stdout.trim();return Number.parseInt(r,10)||0}return 0}case"ArithBracedExpansion":{let n=ue(t,e.content);return Number.parseInt(n,10)||0}case"ArithDynamicBase":{let n=ue(t,e.baseExpr),r=Number.parseInt(n,10);if(r<2||r>64)return 0;let s=`${r}#${e.value}`;return xe(s)}case"ArithDynamicNumber":{let r=ue(t,e.prefix)+e.suffix;return xe(r)}case"ArithArrayElement":{let n=t.state.associativeArrays?.has(e.array),r;if(e.stringKey!==void 0)r=`${e.array}_${e.stringKey}`;else if(n&&e.index?.type==="ArithVariable")r=`${e.array}_${e.index.name}`;else if(e.index){let o=await v(t,e.index);r=`${e.array}_${o}`;let i=t.state.env[r];if(i!==void 0)return Ne(i);if(o===0){let a=t.state.env[e.array];if(a!==void 0)return Ne(a)}if(t.state.options.nounset&&!Object.keys(t.state.env).some(l=>l===e.array||l.startsWith(`${e.array}_`)))throw new J(`${e.array}[${o}]`);return 0}else return 0;let s=t.state.env[r];return s!==void 0?Ne(s):0}case"ArithDoubleSubscript":throw new F("double subscript","","");case"ArithNumberSubscript":throw new F(`${e.number}${e.errorToken}: syntax error: invalid arithmetic operator (error token is "${e.errorToken}")`);case"ArithBinary":{if(e.operator==="||")return await v(t,e.left)||await v(t,e.right)?1:0;if(e.operator==="&&")return await v(t,e.left)&&await v(t,e.right)?1:0;let n=await v(t,e.left),r=await v(t,e.right);return Bt(n,r,e.operator)}case"ArithUnary":{let n=await v(t,e.operand);if(e.operator==="++"||e.operator==="--"){if(e.operand.type==="ArithVariable"){let r=e.operand.name,s=Number.parseInt(Z(t,r),10)||0,o=e.operator==="++"?s+1:s-1;return t.state.env[r]=String(o),e.prefix?o:s}if(e.operand.type==="ArithArrayElement"){let r=e.operand.array,s=t.state.associativeArrays?.has(r),o;if(e.operand.stringKey!==void 0)o=`${r}_${e.operand.stringKey}`;else if(s&&e.operand.index?.type==="ArithVariable")o=`${r}_${e.operand.index.name}`;else if(e.operand.index){let l=await v(t,e.operand.index);o=`${r}_${l}`}else return n;let i=Number.parseInt(t.state.env[o]||"0",10)||0,a=e.operator==="++"?i+1:i-1;return t.state.env[o]=String(a),e.prefix?a:i}return n}return zt(n,e.operator)}case"ArithTernary":return await v(t,e.condition)?await v(t,e.consequent):await v(t,e.alternate);case"ArithAssignment":{let n=e.variable,r=n;if(e.stringKey!==void 0)r=`${n}_${e.stringKey}`;else if(e.subscript){let a=t.state.associativeArrays?.has(n);if(a&&e.subscript.type==="ArithVariable")r=`${n}_${e.subscript.name}`;else if(a){let l=await v(t,e.subscript);r=`${n}_${l}`}else{let l=await v(t,e.subscript);if(l<0){let c=T(t,n);c.length>0&&(l=Math.max(...c.map(([d])=>typeof d=="number"?d:0))+1+l)}r=`${n}_${l}`}}let s=Number.parseInt(t.state.env[r]||"0",10)||0,o=await v(t,e.value),i=mn(s,o,e.operator);return t.state.env[r]=String(i),i}case"ArithGroup":return await v(t,e.expression);case"ArithConcat":{let n="";for(let r of e.parts)n+=await yn(t,r);return Number.parseInt(n,10)||0}default:return 0}}async function yn(t,e){switch(e.type){case"ArithNumber":return String(e.value);case"ArithVariable":return Z(t,e.name);case"ArithBracedExpansion":return ue(t,e.content);case"ArithCommandSubst":return t.execFn?(await t.execFn(e.command)).stdout.trim():"0";case"ArithConcat":{let n="";for(let r of e.parts)n+=await yn(t,r);return n}default:return String(await v(t,e))}}var N=Object.freeze({stdout:"",stderr:"",exitCode:0});function j(t=""){return{stdout:t,stderr:"",exitCode:0}}function S(t,e=1){return{stdout:"",stderr:t,exitCode:e}}function x(t,e,n){return{stdout:t,stderr:e,exitCode:n}}function O(t){return{stdout:"",stderr:"",exitCode:t?0:1}}function ie(t,e,n="",r=""){throw new z(t,e,n,r)}function Ut(t,e){if(t.state.loopDepth===0){if(t.state.parentHasLoopContext)throw new oe;return N}let n=1;if(e.length>0){let r=Number.parseInt(e[0],10);if(Number.isNaN(r)||r<1)throw new R(128,"",`bash: break: ${e[0]}: numeric argument required
51
+ `);n=r}throw new U(n)}async function Gt(t,e){let n,r=!1,s=!1,o=0;for(;o<e.length;)if(e[o]==="--"){o++;break}else if(e[o]==="-L")s=!1,o++;else if(e[o]==="-P")s=!0,o++;else if(e[o].startsWith("-")&&e[o]!=="-")o++;else break;let i=e.slice(o);if(i.length===0||i[0]==="~"?n=t.state.env.HOME||"/":i[0]==="-"?(n=t.state.previousDir,r=!0):n=i[0],!n.startsWith("/")&&!n.startsWith("./")&&!n.startsWith("../")&&n!=="."&&n!==".."){let d=t.state.env.CDPATH;if(d){let h=d.split(":").filter(m=>m);for(let m of h){let y=m.startsWith("/")?`${m}/${n}`:`${t.state.cwd}/${m}/${n}`;try{if((await t.fs.stat(y)).isDirectory){n=y,r=!0;break}}catch{}}}}let l=(n.startsWith("/")?n:`${t.state.cwd}/${n}`).split("/").filter(d=>d&&d!=="."),c="";for(let d of l)if(d==="..")c=c.split("/").slice(0,-1).join("/")||"/";else{c=c?`${c}/${d}`:`/${d}`;try{if(!(await t.fs.stat(c)).isDirectory)return S(`bash: cd: ${n}: Not a directory
52
52
  `)}catch{return S(`bash: cd: ${n}: No such file or directory
53
- `)}}let u=c||"/";return t.state.previousDir=t.state.cwd,t.state.cwd=u,t.state.env.PWD=t.state.cwd,t.state.env.OLDPWD=t.state.previousDir,q(r?`${u}
54
- `:"")}function Vt(t,e){if(t.state.loopDepth===0){if(t.state.parentHasLoopContext)throw new oe;return N}if(e.length>1)throw new U(1);let n=1;if(e.length>0){let r=Number.parseInt(e[0],10);if(Number.isNaN(r)||r<1)return S(`bash: continue: ${e[0]}: numeric argument required
55
- `);n=r}throw new X(n)}function ge(t,e){t.state.readonlyVars=t.state.readonlyVars||new Set,t.state.readonlyVars.add(e)}function Bs(t,e){return t.state.readonlyVars?.has(e)??!1}function fe(t,e,n="bash"){return Bs(t,e)?S(`${n}: ${e}: readonly variable
56
- `):null}function wn(t){let e=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(e)return{name:e[1],isArray:!0,arrayElements:qt(e[2])};if(t.includes("=")){let n=t.indexOf("=");return{name:t.slice(0,n),isArray:!1,value:t.slice(n+1)}}return{name:t,isArray:!1}}function gn(t,e,n={}){let{name:r,isArray:s,arrayElements:o,value:i}=e,{makeReadonly:a=!1,checkReadonly:l=!0}=n;if(l){let c=fe(t,r);if(c)return c}if(s&&o){for(let c=0;c<o.length;c++)t.state.env[`${r}_${c}`]=o[c];t.state.env[`${r}__length`]=String(o.length)}else i!==void 0&&(t.state.env[r]=i);return a&&ge(t,r),null}function jt(t,e){let n=!1,r=!1,s=!1,o=!1,i=!1,a=[];for(let l=0;l<e.length;l++){let c=e[l];if(c==="-a")n=!0;else if(c==="-A")r=!0;else if(c==="-r")s=!0;else if(c==="-x")o=!0;else if(c==="-p")i=!0;else if(c==="--"){a.push(...e.slice(l+1));break}else if(c.startsWith("-"))for(let u of c.slice(1))u==="a"?n=!0:u==="A"?r=!0:u==="r"?s=!0:u==="x"?o=!0:u==="p"&&(i=!0);else a.push(c)}if(i&&a.length>0){let l="";for(let c of a){let u=t.state.env[c];if(u!==void 0){let d=u.replace(/\\/g,"\\\\").replace(/"/g,'\\"');l+=`declare -- ${c}="${d}"
57
- `}}return q(l)}if(a.length===0&&!i){let l="",c=Object.entries(t.state.env).filter(([u])=>!u.startsWith("BASH_")).sort(([u],[d])=>u.localeCompare(d));for(let[u,d]of c){let h=d.replace(/'/g,"'\\''");l+=`declare -- ${u}='${h}'
58
- `}return q(l)}for(let l of a){let c=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(c){let u=c[1],d=c[2];if(r&&(t.state.associativeArrays??=new Set,t.state.associativeArrays.add(u)),r&&d.includes("[")){let h=zs(d);for(let[m,y]of h)t.state.env[`${u}_${m}`]=y}else{let h=qt(d);for(let m=0;m<h.length;m++)t.state.env[`${u}_${m}`]=h[m];t.state.env[`${u}__length`]=String(h.length)}s&&ge(t,u);continue}if(l.includes("=")){let u=l.indexOf("="),d=l.slice(0,u),h=l.slice(u+1),m=fe(t,d);if(m)return m;t.state.env[d]=h,s&&ge(t,d)}else{let u=l;r&&(t.state.associativeArrays??=new Set,t.state.associativeArrays.add(u));let d=Object.keys(t.state.env).some(h=>h.startsWith(`${u}_`)&&!h.startsWith(`${u}__length`));!(u in t.state.env)&&!d&&(n||r?t.state.env[`${u}__length`]="0":t.state.env[u]=""),s&&ge(t,u)}}return N}function qt(t){let e=[],n="",r=!1,s=!1,o=!1;for(let i of t){if(o){n+=i,o=!1;continue}if(i==="\\"){o=!0;continue}if(i==="'"&&!s){r=!r;continue}if(i==='"'&&!r){s=!s;continue}if((i===" "||i===" "||i===`
59
- `)&&!r&&!s){n&&(e.push(n),n="");continue}n+=i}return n&&e.push(n),e}function zs(t){let e=[],n=0;for(;n<t.length;){for(;n<t.length&&/\s/.test(t[n]);)n++;if(n>=t.length)break;if(t[n]!=="["){n++;continue}n++;let r="";if(t[n]==="'"||t[n]==='"'){let o=t[n];for(n++;n<t.length&&t[n]!==o;)r+=t[n],n++;t[n]===o&&n++}else for(;n<t.length&&t[n]!=="]"&&t[n]!=="=";)r+=t[n],n++;for(;n<t.length&&t[n]!=="]";)n++;if(t[n]==="]"&&n++,t[n]!=="=")continue;n++;let s="";if(t[n]==="'"||t[n]==='"'){let o=t[n];for(n++;n<t.length&&t[n]!==o;)t[n]==="\\"&&n+1<t.length&&n++,s+=t[n],n++;t[n]===o&&n++}else for(;n<t.length&&!/\s/.test(t[n]);)s+=t[n],n++;e.push([r,s])}return e}function Zt(t,e){let n=!1,r=!1,s=[];for(let o=0;o<e.length;o++){let i=e[o];if(i==="-a")n=!0;else if(i==="-A")r=!0;else if(i==="-p"){if(e.length===1){let a="";for(let l of t.state.readonlyVars||[]){let c=t.state.env[l];c!==void 0&&(a+=`declare -r ${l}="${c}"
60
- `)}return q(a)}}else if(i==="--"){s.push(...e.slice(o+1));break}else i.startsWith("-")||s.push(i)}for(let o of s){let i=wn(o);if(i.value===void 0&&!i.isArray){ge(t,i.name);continue}let a=gn(t,i,{makeReadonly:!0});if(a)return a}return N}async function Qt(t,e){let n=e;if(n.length>0){let s=n[0];if(s==="--")n=n.slice(1);else if(s.startsWith("-")&&s!=="-"&&s.length>1)return S(`bash: eval: ${s}: invalid option
53
+ `)}}let u=c||"/";return t.state.previousDir=t.state.cwd,t.state.cwd=u,t.state.env.PWD=t.state.cwd,t.state.env.OLDPWD=t.state.previousDir,j(r?`${u}
54
+ `:"")}function Ht(t,e){if(t.state.loopDepth===0){if(t.state.parentHasLoopContext)throw new oe;return N}if(e.length>1)throw new U(1);let n=1;if(e.length>0){let r=Number.parseInt(e[0],10);if(Number.isNaN(r)||r<1)return S(`bash: continue: ${e[0]}: numeric argument required
55
+ `);n=r}throw new X(n)}function ge(t,e){t.state.readonlyVars=t.state.readonlyVars||new Set,t.state.readonlyVars.add(e)}function Fs(t,e){return t.state.readonlyVars?.has(e)??!1}function fe(t,e,n="bash"){return Fs(t,e)?S(`${n}: ${e}: readonly variable
56
+ `):null}function En(t){let e=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(e)return{name:e[1],isArray:!0,arrayElements:Vt(e[2])};if(t.includes("=")){let n=t.indexOf("=");return{name:t.slice(0,n),isArray:!1,value:t.slice(n+1)}}return{name:t,isArray:!1}}function wn(t,e,n={}){let{name:r,isArray:s,arrayElements:o,value:i}=e,{makeReadonly:a=!1,checkReadonly:l=!0}=n;if(l){let c=fe(t,r);if(c)return c}if(s&&o){for(let c=0;c<o.length;c++)t.state.env[`${r}_${c}`]=o[c];t.state.env[`${r}__length`]=String(o.length)}else i!==void 0&&(t.state.env[r]=i);return a&&ge(t,r),null}function jt(t,e){let n=!1,r=!1,s=!1,o=!1,i=!1,a=[];for(let l=0;l<e.length;l++){let c=e[l];if(c==="-a")n=!0;else if(c==="-A")r=!0;else if(c==="-r")s=!0;else if(c==="-x")o=!0;else if(c==="-p")i=!0;else if(c==="--"){a.push(...e.slice(l+1));break}else if(c.startsWith("-"))for(let u of c.slice(1))u==="a"?n=!0:u==="A"?r=!0:u==="r"?s=!0:u==="x"?o=!0:u==="p"&&(i=!0);else a.push(c)}if(i&&a.length>0){let l="";for(let c of a){let u=t.state.env[c];if(u!==void 0){let d=u.replace(/\\/g,"\\\\").replace(/"/g,'\\"');l+=`declare -- ${c}="${d}"
57
+ `}}return j(l)}if(a.length===0&&!i){let l="",c=Object.entries(t.state.env).filter(([u])=>!u.startsWith("BASH_")).sort(([u],[d])=>u.localeCompare(d));for(let[u,d]of c){let h=d.replace(/'/g,"'\\''");l+=`declare -- ${u}='${h}'
58
+ `}return j(l)}for(let l of a){let c=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(c){let u=c[1],d=c[2];if(r&&(t.state.associativeArrays??=new Set,t.state.associativeArrays.add(u)),r&&d.includes("[")){let h=Ms(d);for(let[m,y]of h)t.state.env[`${u}_${m}`]=y}else{let h=Vt(d);for(let m=0;m<h.length;m++)t.state.env[`${u}_${m}`]=h[m];t.state.env[`${u}__length`]=String(h.length)}s&&ge(t,u);continue}if(l.includes("=")){let u=l.indexOf("="),d=l.slice(0,u),h=l.slice(u+1),m=fe(t,d);if(m)return m;t.state.env[d]=h,s&&ge(t,d)}else{let u=l;r&&(t.state.associativeArrays??=new Set,t.state.associativeArrays.add(u));let d=Object.keys(t.state.env).some(h=>h.startsWith(`${u}_`)&&!h.startsWith(`${u}__length`));!(u in t.state.env)&&!d&&(n||r?t.state.env[`${u}__length`]="0":t.state.env[u]=""),s&&ge(t,u)}}return N}function Vt(t){let e=[],n="",r=!1,s=!1,o=!1;for(let i of t){if(o){n+=i,o=!1;continue}if(i==="\\"){o=!0;continue}if(i==="'"&&!s){r=!r;continue}if(i==='"'&&!r){s=!s;continue}if((i===" "||i===" "||i===`
59
+ `)&&!r&&!s){n&&(e.push(n),n="");continue}n+=i}return n&&e.push(n),e}function Ms(t){let e=[],n=0;for(;n<t.length;){for(;n<t.length&&/\s/.test(t[n]);)n++;if(n>=t.length)break;if(t[n]!=="["){n++;continue}n++;let r="";if(t[n]==="'"||t[n]==='"'){let o=t[n];for(n++;n<t.length&&t[n]!==o;)r+=t[n],n++;t[n]===o&&n++}else for(;n<t.length&&t[n]!=="]"&&t[n]!=="=";)r+=t[n],n++;for(;n<t.length&&t[n]!=="]";)n++;if(t[n]==="]"&&n++,t[n]!=="=")continue;n++;let s="";if(t[n]==="'"||t[n]==='"'){let o=t[n];for(n++;n<t.length&&t[n]!==o;)t[n]==="\\"&&n+1<t.length&&n++,s+=t[n],n++;t[n]===o&&n++}else for(;n<t.length&&!/\s/.test(t[n]);)s+=t[n],n++;e.push([r,s])}return e}function qt(t,e){let n=!1,r=!1,s=[];for(let o=0;o<e.length;o++){let i=e[o];if(i==="-a")n=!0;else if(i==="-A")r=!0;else if(i==="-p"){if(e.length===1){let a="";for(let l of t.state.readonlyVars||[]){let c=t.state.env[l];c!==void 0&&(a+=`declare -r ${l}="${c}"
60
+ `)}return j(a)}}else if(i==="--"){s.push(...e.slice(o+1));break}else i.startsWith("-")||s.push(i)}for(let o of s){let i=En(o);if(i.value===void 0&&!i.isArray){ge(t,i.name);continue}let a=wn(t,i,{makeReadonly:!0});if(a)return a}return N}async function Zt(t,e){let n=e;if(n.length>0){let s=n[0];if(s==="--")n=n.slice(1);else if(s.startsWith("-")&&s!=="-"&&s.length>1)return S(`bash: eval: ${s}: invalid option
61
61
  eval: usage: eval [arg ...]
62
62
  `,2)}if(n.length===0)return N;let r=n.join(" ");if(r.trim()==="")return N;try{let s=le(r);return t.executeScript(s)}catch(s){if(s instanceof U||s instanceof X||s instanceof G||s instanceof R)throw s;if(s.name==="ParseException")return S(`bash: eval: ${s.message}
63
- `);throw s}}function Kt(t,e){let n,r="";if(e.length===0)n=t.state.lastExitCode;else{let s=e[0],o=Number.parseInt(s,10);s===""||Number.isNaN(o)||!/^-?\d+$/.test(s)?(r=`bash: exit: ${s}: numeric argument required
64
- `,n=2):n=(o%256+256)%256}throw new R(n,"",r)}function Xt(t,e){let n=!1,r=[];for(let i of e)i==="-n"?n=!0:i==="-p"||i==="--"||r.push(i);if(r.length===0&&!n){let i="",a=Object.entries(t.state.env).filter(([l])=>!l.startsWith("BASH_ALIAS_")).sort(([l],[c])=>l.localeCompare(c));for(let[l,c]of a){let u=c.replace(/'/g,"'\\''");i+=`declare -x ${l}='${u}'
65
- `}return q(i)}if(n){for(let i of r){let a=i.split("=")[0];delete t.state.env[a]}return N}let s="",o=0;for(let i of r){let a,l;if(i.includes("=")){let c=i.indexOf("=");a=i.slice(0,c),l=i.slice(c+1)}else a=i;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(a)){s+=`bash: export: \`${i}': not a valid identifier
66
- `,o=1;continue}l!==void 0?t.state.env[a]=l:a in t.state.env||(t.state.env[a]="")}return x("",s,o)}function Us(t){let e=[],n="",r=0;for(let s of t){for(let o of s)o==="("?r++:o===")"&&r--;n?n+=` ${s}`:n=s,r===0&&(e.push(n),n="")}return n&&e.push(n),e}async function Yt(t,e){if(e.length===0)return S(`bash: let: expression expected
67
- `);let n=Us(e),r=0;for(let s of n)try{let i=le(`(( ${s} ))`).statements[0];if(i&&i.pipelines.length>0&&i.pipelines[0].commands.length>0){let a=i.pipelines[0].commands[0];a.type==="ArithmeticCommand"&&(r=await v(t,a.expression.expression))}}catch(o){return S(`bash: let: ${s}: ${o.message}
68
- `)}return x("","",r===0?1:0)}function Gs(t,e){let n=t.state.env.HOME||"/home/user";return e.split(":").map(o=>o==="~"?n:o==="~root"?"/root":o.startsWith("~/")?n+o.slice(1):o.startsWith("~root/")?`/root${o.slice(5)}`:o).join(":")}function Jt(t,e){if(t.state.localScopes.length===0)return S(`bash: local: can only be used in a function
69
- `);let n=t.state.localScopes[t.state.localScopes.length-1],r="",s=0;for(let o of e){let i,a;if(o.includes("=")){let l=o.indexOf("=");i=o.slice(0,l),a=Gs(t,o.slice(l+1))}else i=o;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(i)){r+=`bash: local: \`${o}': not a valid identifier
70
- `,s=1;continue}n.has(i)||n.set(i,t.state.env[i]),a!==void 0&&(t.state.env[i]=a)}return x("",r,s)}function er(t,e,n){let r=`
63
+ `);throw s}}function Qt(t,e){let n,r="";if(e.length===0)n=t.state.lastExitCode;else{let s=e[0],o=Number.parseInt(s,10);s===""||Number.isNaN(o)||!/^-?\d+$/.test(s)?(r=`bash: exit: ${s}: numeric argument required
64
+ `,n=2):n=(o%256+256)%256}throw new R(n,"",r)}function Kt(t,e){let n=!1,r=[];for(let i of e)i==="-n"?n=!0:i==="-p"||i==="--"||r.push(i);if(r.length===0&&!n){let i="",a=Object.entries(t.state.env).filter(([l])=>!l.startsWith("BASH_ALIAS_")).sort(([l],[c])=>l.localeCompare(c));for(let[l,c]of a){let u=c.replace(/'/g,"'\\''");i+=`declare -x ${l}='${u}'
65
+ `}return j(i)}if(n){for(let i of r){let a=i.split("=")[0];delete t.state.env[a]}return N}let s="",o=0;for(let i of r){let a,l;if(i.includes("=")){let c=i.indexOf("=");a=i.slice(0,c),l=i.slice(c+1)}else a=i;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(a)){s+=`bash: export: \`${i}': not a valid identifier
66
+ `,o=1;continue}l!==void 0?t.state.env[a]=l:a in t.state.env||(t.state.env[a]="")}return x("",s,o)}function Bs(t){let e=[],n="",r=0;for(let s of t){for(let o of s)o==="("?r++:o===")"&&r--;n?n+=` ${s}`:n=s,r===0&&(e.push(n),n="")}return n&&e.push(n),e}async function Xt(t,e){if(e.length===0)return S(`bash: let: expression expected
67
+ `);let n=Bs(e),r=0;for(let s of n)try{let i=le(`(( ${s} ))`).statements[0];if(i&&i.pipelines.length>0&&i.pipelines[0].commands.length>0){let a=i.pipelines[0].commands[0];a.type==="ArithmeticCommand"&&(r=await v(t,a.expression.expression))}}catch(o){return S(`bash: let: ${s}: ${o.message}
68
+ `)}return x("","",r===0?1:0)}function zs(t,e){let n=t.state.env.HOME||"/home/user";return e.split(":").map(o=>o==="~"?n:o==="~root"?"/root":o.startsWith("~/")?n+o.slice(1):o.startsWith("~root/")?`/root${o.slice(5)}`:o).join(":")}function Yt(t,e){if(t.state.localScopes.length===0)return S(`bash: local: can only be used in a function
69
+ `);let n=t.state.localScopes[t.state.localScopes.length-1],r="",s=0;for(let o of e){let i,a;if(o.includes("=")){let l=o.indexOf("=");i=o.slice(0,l),a=zs(t,o.slice(l+1))}else i=o;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(i)){r+=`bash: local: \`${o}': not a valid identifier
70
+ `,s=1;continue}n.has(i)||n.set(i,t.state.env[i]),a!==void 0&&(t.state.env[i]=a)}return x("",r,s)}function Jt(t,e,n){let r=`
71
71
  `,s=0,o=0,i=0,a=!1,l="MAPFILE",c=0;for(;c<e.length;){let w=e[c];w==="-d"&&c+1<e.length?(r=e[c+1]||`
72
- `,c+=2):w==="-n"&&c+1<e.length?(s=Number.parseInt(e[c+1],10)||0,c+=2):w==="-O"&&c+1<e.length?(o=Number.parseInt(e[c+1],10)||0,c+=2):w==="-s"&&c+1<e.length?(i=Number.parseInt(e[c+1],10)||0,c+=2):w==="-t"?(a=!0,c++):w==="-u"||w==="-C"||w==="-c"?c+=2:(w.startsWith("-")||(l=w),c++)}let u=n;!u&&t.state.groupStdin!==void 0&&(u=t.state.groupStdin);let d=[],h=u,m=0,y=0;for(;h.length>0;){let w=h.indexOf(r);if(w===-1){h.length>0&&(y<i?y++:(s===0||m<s)&&(d.push(h),m++));break}let p=h.substring(0,w);if(a||(p+=r),h=h.substring(w+r.length),y<i){y++;continue}if(s>0&&m>=s)break;d.push(p),m++}De(t,l);for(let w=0;w<d.length;w++)t.state.env[`${l}_${o+w}`]=d[w];return d.length>0&&(t.state.env[`${l}__length`]=String(o+d.length)),t.state.groupStdin!==void 0&&!n&&(t.state.groupStdin=""),x("","",0)}function tr(t,e,n){let r=!1,s=`
73
- `,o="",i=-1,a=null,l=[],c=0,u=!1;for(;c<e.length;){let g=e[c];g==="-r"?r=!0:g==="-d"&&c+1<e.length?(s=e[c+1],c++):g==="-p"&&c+1<e.length?(o=e[c+1],c++):g==="-n"&&c+1<e.length?(i=Number.parseInt(e[c+1],10),(Number.isNaN(i)||i<0)&&(u=!0,i=0),c++):g==="-a"&&c+1<e.length?(a=e[c+1],c++):g==="-t"?c+1<e.length&&!e[c+1].startsWith("-")&&c++:g==="-s"||g.startsWith("-")||l.push(g),c++}if(u)return x("","",1);l.length===0&&a===null&&l.push("REPLY");let d=n;!d&&t.state.groupStdin!==void 0&&(d=t.state.groupStdin);let h="",m=0,y=!0;if(i>=0){for(let g=0;g<d.length&&g<i;g++){let b=d[g];if(b===s){m=g+1;break}h+=b,m=g+1}t.state.groupStdin!==void 0&&!n&&(t.state.groupStdin=d.substring(m))}else{let g=d;for(m=0;;){let b=g.indexOf(s);if(b!==-1){let C=g.substring(0,b);if(m+=b+s.length,g=g.substring(b+s.length),!r&&C.endsWith("\\")){h+=C.slice(0,-1);continue}h+=C,y=!0;break}else if(g.length>0){h+=g,m+=g.length,y=!1,g="";break}else{if(h.length===0){for(let C of l)t.state.env[C]="";return a&&De(t,a),x("","",1)}y=!1;break}}t.state.groupStdin!==void 0&&!n&&(t.state.groupStdin=d.substring(m))}if(s===`
72
+ `,c+=2):w==="-n"&&c+1<e.length?(s=Number.parseInt(e[c+1],10)||0,c+=2):w==="-O"&&c+1<e.length?(o=Number.parseInt(e[c+1],10)||0,c+=2):w==="-s"&&c+1<e.length?(i=Number.parseInt(e[c+1],10)||0,c+=2):w==="-t"?(a=!0,c++):w==="-u"||w==="-C"||w==="-c"?c+=2:(w.startsWith("-")||(l=w),c++)}let u=n;!u&&t.state.groupStdin!==void 0&&(u=t.state.groupStdin);let d=[],h=u,m=0,y=0;for(;h.length>0;){let w=h.indexOf(r);if(w===-1){h.length>0&&(y<i?y++:(s===0||m<s)&&(d.push(h),m++));break}let p=h.substring(0,w);if(a||(p+=r),h=h.substring(w+r.length),y<i){y++;continue}if(s>0&&m>=s)break;d.push(p),m++}Oe(t,l);for(let w=0;w<d.length;w++)t.state.env[`${l}_${o+w}`]=d[w];return d.length>0&&(t.state.env[`${l}__length`]=String(o+d.length)),t.state.groupStdin!==void 0&&!n&&(t.state.groupStdin=""),x("","",0)}function er(t,e,n){let r=!1,s=`
73
+ `,o="",i=-1,a=null,l=[],c=0,u=!1;for(;c<e.length;){let g=e[c];g==="-r"?r=!0:g==="-d"&&c+1<e.length?(s=e[c+1],c++):g==="-p"&&c+1<e.length?(o=e[c+1],c++):g==="-n"&&c+1<e.length?(i=Number.parseInt(e[c+1],10),(Number.isNaN(i)||i<0)&&(u=!0,i=0),c++):g==="-a"&&c+1<e.length?(a=e[c+1],c++):g==="-t"?c+1<e.length&&!e[c+1].startsWith("-")&&c++:g==="-s"||g.startsWith("-")||l.push(g),c++}if(u)return x("","",1);l.length===0&&a===null&&l.push("REPLY");let d=n;!d&&t.state.groupStdin!==void 0&&(d=t.state.groupStdin);let h="",m=0,y=!0;if(i>=0){for(let g=0;g<d.length&&g<i;g++){let b=d[g];if(b===s){m=g+1;break}h+=b,m=g+1}t.state.groupStdin!==void 0&&!n&&(t.state.groupStdin=d.substring(m))}else{let g=d;for(m=0;;){let b=g.indexOf(s);if(b!==-1){let C=g.substring(0,b);if(m+=b+s.length,g=g.substring(b+s.length),!r&&C.endsWith("\\")){h+=C.slice(0,-1);continue}h+=C,y=!0;break}else if(g.length>0){h+=g,m+=g.length,y=!1,g="";break}else{if(h.length===0){for(let C of l)t.state.env[C]="";return a&&Oe(t,a),x("","",1)}y=!1;break}}t.state.groupStdin!==void 0&&!n&&(t.state.groupStdin=d.substring(m))}if(s===`
74
74
  `&&h.endsWith(`
75
- `)&&(h=h.slice(0,-1)),r||(h=h.replace(/\\(.)/g,"$1")),l.length===1&&l[0]==="REPLY")return t.state.env.REPLY=h,x("","",y?0:1);let w=Xe(t.state.env),{words:p,wordStarts:E}=en(h,w);if(a){De(t,a);for(let g=0;g<p.length;g++)t.state.env[`${a}_${g}`]=p[g];return x("","",y?0:1)}for(let g=0;g<l.length;g++){let b=l[g];if(g<l.length-1)t.state.env[b]=p[g]??"";else if(g<E.length){let C=tn(h.substring(E[g]),w);t.state.env[b]=C}else t.state.env[b]=""}return x("","",y?0:1)}function rr(t,e){if(t.state.callDepth===0&&t.state.sourceDepth===0)return S("bash: return: can only `return' from a function or sourced script\n");let n=t.state.lastExitCode;if(e.length>0){let r=e[0],s=Number.parseInt(r,10);if(r===""||Number.isNaN(s)||!/^-?\d+$/.test(r))return S(`bash: return: ${r}: numeric argument required
76
- `,2);n=(s%256+256)%256}throw new G(n)}function Hs(t){return/^[a-zA-Z0-9_/.:-]*$/.test(t)?t:`'${t.replace(/'/g,"'\\''")}'`}var tt=`set: usage: set [-eux] [+eux] [-o option] [+o option]
75
+ `)&&(h=h.slice(0,-1)),r||(h=h.replace(/\\(.)/g,"$1")),l.length===1&&l[0]==="REPLY")return t.state.env.REPLY=h,x("","",y?0:1);let w=Xe(t.state.env),{words:p,wordStarts:E}=Jr(h,w);if(a){Oe(t,a);for(let g=0;g<p.length;g++)t.state.env[`${a}_${g}`]=p[g];return x("","",y?0:1)}for(let g=0;g<l.length;g++){let b=l[g];if(g<l.length-1)t.state.env[b]=p[g]??"";else if(g<E.length){let C=en(h.substring(E[g]),w);t.state.env[b]=C}else t.state.env[b]=""}return x("","",y?0:1)}function tr(t,e){if(t.state.callDepth===0&&t.state.sourceDepth===0)return S("bash: return: can only `return' from a function or sourced script\n");let n=t.state.lastExitCode;if(e.length>0){let r=e[0],s=Number.parseInt(r,10);if(r===""||Number.isNaN(s)||!/^-?\d+$/.test(r))return S(`bash: return: ${r}: numeric argument required
76
+ `,2);n=(s%256+256)%256}throw new G(n)}function Us(t){return/^[a-zA-Z0-9_/.:-]*$/.test(t)?t:`'${t.replace(/'/g,"'\\''")}'`}var tt=`set: usage: set [-eux] [+eux] [-o option] [+o option]
77
77
  Options:
78
78
  -e Exit immediately if a command exits with non-zero status
79
79
  +e Disable -e
@@ -89,48 +89,48 @@ Options:
89
89
  +o pipefail Disable pipefail
90
90
  -o xtrace Same as -x
91
91
  +o xtrace Disable xtrace
92
- `,An={e:"errexit",u:"nounset",x:"xtrace",v:"verbose",f:null,h:null,C:null,n:null,a:null,b:null,m:null,B:null,H:null,P:null,T:null,E:null,p:null},xn={errexit:"errexit",pipefail:"pipefail",nounset:"nounset",xtrace:"xtrace",verbose:"verbose",noclobber:null,noglob:null,noexec:null,allexport:null,notify:null,monitor:null,braceexpand:null,histexpand:null,physical:null,functrace:null,errtrace:null,privileged:null,hashall:null,posix:null,vi:null,emacs:null,ignoreeof:null,"interactive-comments":null,keyword:null,onecmd:null},Sn=["errexit","nounset","pipefail","verbose","xtrace"],bn=["allexport","braceexpand","emacs","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","noclobber","noexec","noglob","nolog","notify","onecmd","physical","posix","privileged","vi"];function Cn(t,e,n){e!==null&&(t.state.options[e]=n)}function Vs(t,e){return e+1<t.length&&!t[e+1].startsWith("-")&&!t[e+1].startsWith("+")}function sr(t,e){if(e.includes("--help"))return q(tt);if(e.length===0){let r=Object.entries(t.state.env).filter(([s])=>/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(s)).sort(([s],[o])=>s.localeCompare(o)).map(([s,o])=>`${s}=${Hs(o)}`).join(`
93
- `);return q(r?`${r}
94
- `:"")}let n=0;for(;n<e.length;){let r=e[n];if((r==="-o"||r==="+o")&&Vs(e,n)){let s=e[n+1];if(!(s in xn))return S(`bash: set: ${s}: invalid option name
95
- ${tt}`);Cn(t,xn[s],r==="-o"),n+=2;continue}if(r==="-o"){let s=Sn.map(a=>`${a.padEnd(16)}${t.state.options[a]?"on":"off"}`),o=bn.map(a=>`${a.padEnd(16)}off`),i=[...s,...o].sort();return q(`${i.join(`
92
+ `,gn={e:"errexit",u:"nounset",x:"xtrace",v:"verbose",f:null,h:null,C:null,n:null,a:null,b:null,m:null,B:null,H:null,P:null,T:null,E:null,p:null},An={errexit:"errexit",pipefail:"pipefail",nounset:"nounset",xtrace:"xtrace",verbose:"verbose",noclobber:null,noglob:null,noexec:null,allexport:null,notify:null,monitor:null,braceexpand:null,histexpand:null,physical:null,functrace:null,errtrace:null,privileged:null,hashall:null,posix:null,vi:null,emacs:null,ignoreeof:null,"interactive-comments":null,keyword:null,onecmd:null},xn=["errexit","nounset","pipefail","verbose","xtrace"],Sn=["allexport","braceexpand","emacs","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","noclobber","noexec","noglob","nolog","notify","onecmd","physical","posix","privileged","vi"];function bn(t,e,n){e!==null&&(t.state.options[e]=n)}function Gs(t,e){return e+1<t.length&&!t[e+1].startsWith("-")&&!t[e+1].startsWith("+")}function nr(t,e){if(e.includes("--help"))return j(tt);if(e.length===0){let r=Object.entries(t.state.env).filter(([s])=>/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(s)).sort(([s],[o])=>s.localeCompare(o)).map(([s,o])=>`${s}=${Us(o)}`).join(`
93
+ `);return j(r?`${r}
94
+ `:"")}let n=0;for(;n<e.length;){let r=e[n];if((r==="-o"||r==="+o")&&Gs(e,n)){let s=e[n+1];if(!(s in An))return S(`bash: set: ${s}: invalid option name
95
+ ${tt}`);bn(t,An[s],r==="-o"),n+=2;continue}if(r==="-o"){let s=xn.map(a=>`${a.padEnd(16)}${t.state.options[a]?"on":"off"}`),o=Sn.map(a=>`${a.padEnd(16)}off`),i=[...s,...o].sort();return j(`${i.join(`
96
96
  `)}
97
- `)}if(r==="+o"){let s=Sn.map(a=>`set ${t.state.options[a]?"-o":"+o"} ${a}`),o=bn.map(a=>`set +o ${a}`),i=[...s,...o].sort();return q(`${i.join(`
97
+ `)}if(r==="+o"){let s=xn.map(a=>`set ${t.state.options[a]?"-o":"+o"} ${a}`),o=Sn.map(a=>`set +o ${a}`),i=[...s,...o].sort();return j(`${i.join(`
98
98
  `)}
99
- `)}if(r.length>1&&(r[0]==="-"||r[0]==="+")&&r[1]!=="-"){let s=r[0]==="-";for(let o=1;o<r.length;o++){let i=r[o];if(!(i in An))return S(`bash: set: ${r[0]}${i}: invalid option
100
- ${tt}`);Cn(t,An[i],s)}n++;continue}if(r==="--")return nr(t,e.slice(n+1)),N;if(r==="-"){if(t.state.options.xtrace=!1,t.state.options.verbose=!1,n+1<e.length)return nr(t,e.slice(n+1)),N;n++;continue}if(r==="+"){n++;continue}return r.startsWith("-")||r.startsWith("+")?S(`bash: set: ${r}: invalid option
101
- ${tt}`):(nr(t,e.slice(n)),N)}return N}function nr(t,e){let n=1;for(;t.state.env[String(n)]!==void 0;)delete t.state.env[String(n)],n++;for(let r=0;r<e.length;r++)t.state.env[String(r+1)]=e[r];t.state.env["#"]=String(e.length),t.state.env["@"]=e.join(" "),t.state.env["*"]=e.join(" ")}function ir(t,e){let n=1;if(e.length>0){let i=Number.parseInt(e[0],10);if(Number.isNaN(i)||i<0)return S(`bash: shift: ${e[0]}: numeric argument required
99
+ `)}if(r.length>1&&(r[0]==="-"||r[0]==="+")&&r[1]!=="-"){let s=r[0]==="-";for(let o=1;o<r.length;o++){let i=r[o];if(!(i in gn))return S(`bash: set: ${r[0]}${i}: invalid option
100
+ ${tt}`);bn(t,gn[i],s)}n++;continue}if(r==="--")return rr(t,e.slice(n+1)),N;if(r==="-"){if(t.state.options.xtrace=!1,t.state.options.verbose=!1,n+1<e.length)return rr(t,e.slice(n+1)),N;n++;continue}if(r==="+"){n++;continue}return r.startsWith("-")||r.startsWith("+")?S(`bash: set: ${r}: invalid option
101
+ ${tt}`):(rr(t,e.slice(n)),N)}return N}function rr(t,e){let n=1;for(;t.state.env[String(n)]!==void 0;)delete t.state.env[String(n)],n++;for(let r=0;r<e.length;r++)t.state.env[String(r+1)]=e[r];t.state.env["#"]=String(e.length),t.state.env["@"]=e.join(" "),t.state.env["*"]=e.join(" ")}function sr(t,e){let n=1;if(e.length>0){let i=Number.parseInt(e[0],10);if(Number.isNaN(i)||i<0)return S(`bash: shift: ${e[0]}: numeric argument required
102
102
  `);n=i}let r=Number.parseInt(t.state.env["#"]||"0",10);if(n>r)return S(`bash: shift: shift count out of range
103
- `);if(n===0)return N;let s=[];for(let i=1;i<=r;i++)s.push(t.state.env[String(i)]||"");let o=s.slice(n);for(let i=1;i<=r;i++)delete t.state.env[String(i)];for(let i=0;i<o.length;i++)t.state.env[String(i+1)]=o[i];return t.state.env["#"]=String(o.length),t.state.env["@"]=o.join(" "),N}async function or(t,e){let n=e;if(n.length>0&&n[0]==="--"&&(n=n.slice(1)),n.length===0)return x("",`bash: source: filename argument required
103
+ `);if(n===0)return N;let s=[];for(let i=1;i<=r;i++)s.push(t.state.env[String(i)]||"");let o=s.slice(n);for(let i=1;i<=r;i++)delete t.state.env[String(i)];for(let i=0;i<o.length;i++)t.state.env[String(i+1)]=o[i];return t.state.env["#"]=String(o.length),t.state.env["@"]=o.join(" "),N}async function ir(t,e){let n=e;if(n.length>0&&n[0]==="--"&&(n=n.slice(1)),n.length===0)return x("",`bash: source: filename argument required
104
104
  `,2);let r=n[0],s=null,o=null;if(r.includes("/")){let l=t.fs.resolvePath(t.state.cwd,r);try{o=await t.fs.readFile(l),s=l}catch{}}else{let c=(t.state.env.PATH||"").split(":").filter(u=>u);for(let u of c){let d=t.fs.resolvePath(t.state.cwd,`${u}/${r}`);try{if((await t.fs.stat(d)).isDirectory)continue;o=await t.fs.readFile(d),s=d;break}catch{}}if(o===null){let u=t.fs.resolvePath(t.state.cwd,r);try{o=await t.fs.readFile(u),s=u}catch{}}}if(o===null)return S(`bash: ${r}: No such file or directory
105
105
  `);let i={};if(n.length>1){for(let c=1;c<=9;c++)i[String(c)]=t.state.env[String(c)];i["#"]=t.state.env["#"],i["@"]=t.state.env["@"];let l=n.slice(1);t.state.env["#"]=String(l.length),t.state.env["@"]=l.join(" ");for(let c=0;c<l.length&&c<9;c++)t.state.env[String(c+1)]=l[c];for(let c=l.length+1;c<=9;c++)delete t.state.env[String(c)]}let a=()=>{if(t.state.sourceDepth--,n.length>1)for(let[l,c]of Object.entries(i))c===void 0?delete t.state.env[l]:t.state.env[l]=c};t.state.sourceDepth++;try{let l=le(o),c=await t.executeScript(l);return a(),c}catch(l){if(a(),l instanceof R)throw l;if(l instanceof G)return x(l.stdout,l.stderr,l.exitCode);if(l.name==="ParseException")return S(`bash: ${r}: ${l.message}
106
- `);throw l}}function ar(t,e){let n="variable",r="",s=0;for(let o of e){if(o==="-v"){n="variable";continue}if(o==="-f"){n="function";continue}if(n==="function"){t.state.functions.delete(o);continue}let i=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(i){let a=i[1],l=i[2];if(l==="@"||l==="*"){let u=T(t,a);for(let[d]of u)delete t.state.env[`${a}_${d}`];delete t.state.env[a];continue}let c;if(/^-?\d+$/.test(l))c=Number.parseInt(l,10);else{let u=t.state.env[l];c=u?Number.parseInt(u,10):0,Number.isNaN(c)&&(c=0)}if(c<0){let u=T(t,a),d=u.length;if(d===0){r+=`bash: unset: [${c}]: bad array subscript
106
+ `);throw l}}function or(t,e){let n="variable",r="",s=0;for(let o of e){if(o==="-v"){n="variable";continue}if(o==="-f"){n="function";continue}if(n==="function"){t.state.functions.delete(o);continue}let i=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(i){let a=i[1],l=i[2];if(l==="@"||l==="*"){let u=T(t,a);for(let[d]of u)delete t.state.env[`${a}_${d}`];delete t.state.env[a];continue}let c;if(/^-?\d+$/.test(l))c=Number.parseInt(l,10);else{let u=t.state.env[l];c=u?Number.parseInt(u,10):0,Number.isNaN(c)&&(c=0)}if(c<0){let u=T(t,a),d=u.length;if(d===0){r+=`bash: unset: [${c}]: bad array subscript
107
107
  `,s=1;continue}let h=d+c;if(h<0){r+=`bash: unset: [${c}]: bad array subscript
108
- `,s=1;continue}let m=u[h][0];delete t.state.env[`${a}_${m}`];continue}delete t.state.env[`${a}_${c}`];continue}delete t.state.env[o],t.state.functions.delete(o)}return x("",r,s)}function cr(t,e){return t.fs.resolvePath(t.state.cwd,e)}var qs=["-e","-a","-f","-d","-r","-w","-x","-s","-L","-h","-k","-g","-u","-G","-O","-b","-c","-p","-S","-t","-N"];function rt(t){return qs.includes(t)}async function nt(t,e,n){let r=cr(t,n);switch(e){case"-e":case"-a":return t.fs.exists(r);case"-f":return await t.fs.exists(r)?(await t.fs.stat(r)).isFile:!1;case"-d":return await t.fs.exists(r)?(await t.fs.stat(r)).isDirectory:!1;case"-r":case"-w":case"-x":return t.fs.exists(r);case"-s":return await t.fs.exists(r)?(await t.fs.stat(r)).size>0:!1;case"-L":case"-h":try{return(await t.fs.lstat(r)).isSymbolicLink}catch{return!1}case"-k":return await t.fs.exists(r)?((await t.fs.stat(r)).mode&512)!==0:!1;case"-g":return await t.fs.exists(r)?((await t.fs.stat(r)).mode&1024)!==0:!1;case"-u":return await t.fs.exists(r)?((await t.fs.stat(r)).mode&2048)!==0:!1;case"-G":case"-O":return t.fs.exists(r);case"-b":return!1;case"-c":return["/dev/null","/dev/zero","/dev/random","/dev/urandom","/dev/tty","/dev/stdin","/dev/stdout","/dev/stderr"].some(o=>r===o||r.endsWith(o));case"-p":return!1;case"-S":return!1;case"-t":return!1;case"-N":return t.fs.exists(r);default:return!1}}var js=["-nt","-ot","-ef"];function st(t){return js.includes(t)}async function it(t,e,n,r){let s=cr(t,n),o=cr(t,r);switch(e){case"-nt":try{let i=await t.fs.stat(s),a=await t.fs.stat(o);return i.mtime>a.mtime}catch{return!1}case"-ot":try{let i=await t.fs.stat(s),a=await t.fs.stat(o);return i.mtime<a.mtime}catch{return!1}case"-ef":try{if(!await t.fs.exists(s)||!await t.fs.exists(o))return!1;let i=t.fs.resolvePath(t.state.cwd,s),a=t.fs.resolvePath(t.state.cwd,o);return i===a}catch{return!1}default:return!1}}var Zs=new Set(["-eq","-ne","-lt","-le","-gt","-ge"]);function ot(t){return Zs.has(t)}function at(t,e,n){switch(t){case"-eq":return e===n;case"-ne":return e!==n;case"-lt":return e<n;case"-le":return e<=n;case"-gt":return e>n;case"-ge":return e>=n}}function ct(t){return t==="="||t==="=="||t==="!="}function lt(t,e,n,r=!1){let s=r?ut(e,n):e===n;return t==="!="?!s:s}var Qs=new Set(["-z","-n"]);function ft(t){return Qs.has(t)}function dt(t,e){switch(t){case"-z":return e==="";case"-n":return e!==""}}function ht(t,e){let n=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(n){let r=n[1],s=n[2];s=s.replace(/\$([a-zA-Z_][a-zA-Z0-9_]*)/g,(i,a)=>t.state.env[a]||"");let o;if(/^-?\d+$/.test(s))o=Number.parseInt(s,10);else try{let i=Function(`"use strict"; return (${s})`)();o=typeof i=="number"?Math.floor(i):0}catch{let i=t.state.env[s];o=i?Number.parseInt(i,10):0}if(o<0){let i=ke(t,r);if(i.length===0||(o=Math.max(...i)+1+o,o<0))return!1}return`${r}_${o}`in t.state.env}return e in t.state.env}async function de(t,e){switch(e.type){case"CondBinary":{let n=await P(t,e.left),r=await P(t,e.right),s=e.right.parts.length>0&&e.right.parts.every(o=>o.type==="SingleQuoted"||o.type==="DoubleQuoted"||o.type==="Escaped");if(ct(e.operator))return lt(e.operator,n,r,!s);if(ot(e.operator))return at(e.operator,$n(t,n),$n(t,r));if(st(e.operator))return it(t,e.operator,n,r);switch(e.operator){case"=~":try{let o=new RegExp(r),i=n.match(o);if(i){t.state.env.BASH_REMATCH=i[0];for(let a=1;a<i.length;a++)t.state.env[`BASH_REMATCH_${a}`]=i[a]||""}return i!==null}catch{throw new Error("syntax error in regular expression")}case"<":return n<r;case">":return n>r;default:return!1}}case"CondUnary":{let n=await P(t,e.operand);return rt(e.operator)?nt(t,e.operator,n):ft(e.operator)?dt(e.operator,n):e.operator==="-v"?ht(t,n):e.operator==="-o"?ur(t,n):!1}case"CondNot":return!await de(t,e.operand);case"CondAnd":return await de(t,e.left)?await de(t,e.right):!1;case"CondOr":return await de(t,e.left)?!0:await de(t,e.right);case"CondGroup":return await de(t,e.expression);case"CondWord":return await P(t,e.word)!=="";default:return!1}}async function $e(t,e){if(e.length===0)return x("","",1);if(e.length===1)return O(!!e[0]);if(e.length===2){let r=e[0],s=e[1];return r==="("?S(`test: '(' without matching ')'
109
- `,2):rt(r)?O(await nt(t,r,s)):ft(r)?O(dt(r,s)):r==="!"?O(!s):r==="-v"?O(ht(t,s)):r==="-o"?O(ur(t,s)):r==="="||r==="=="||r==="!="||r==="<"||r===">"||r==="-eq"||r==="-ne"||r==="-lt"||r==="-le"||r==="-gt"||r==="-ge"||r==="-nt"||r==="-ot"||r==="-ef"?S(`test: ${r}: unary operator expected
110
- `,2):x("","",1)}if(e.length===3){let r=e[0],s=e[1],o=e[2];if(ct(s))return O(lt(s,r,o));if(ot(s)){let i=mt(r),a=mt(o);return!i.valid||!a.valid?x("","",2):O(at(s,i.value,a.value))}if(st(s))return O(await it(t,s,r,o));switch(s){case"-a":return O(r!==""&&o!=="");case"-o":return O(r!==""||o!=="");case">":return O(r>o);case"<":return O(r<o)}if(r==="!"){let i=await $e(t,[s,o]);return x("",i.stderr,i.exitCode===0?1:i.exitCode===1?0:i.exitCode)}if(r==="("&&o===")")return O(s!=="")}if(e.length===4){if(e[0]==="!"){let r=await $e(t,e.slice(1));return x("",r.stderr,r.exitCode===0?1:r.exitCode===1?0:r.exitCode)}if(e[0]==="("&&e[3]===")")return $e(t,[e[1],e[2]])}let n=await Pn(t,e,0);return n.pos<e.length?S(`test: too many arguments
111
- `,2):O(n.value)}async function Pn(t,e,n){return Ks(t,e,n)}async function Ks(t,e,n){let{value:r,pos:s}=await Nn(t,e,n);for(;e[s]==="-o";){let o=await Nn(t,e,s+1);r=r||o.value,s=o.pos}return{value:r,pos:s}}async function Nn(t,e,n){let{value:r,pos:s}=await lr(t,e,n);for(;e[s]==="-a";){let o=await lr(t,e,s+1);r=r&&o.value,s=o.pos}return{value:r,pos:s}}async function lr(t,e,n){if(e[n]==="!"){let{value:r,pos:s}=await lr(t,e,n+1);return{value:!r,pos:s}}return Xs(t,e,n)}async function Xs(t,e,n){let r=e[n];if(r==="("){let{value:o,pos:i}=await Pn(t,e,n+1);return{value:o,pos:e[i]===")"?i+1:i}}if(rt(r)){let o=e[n+1]??"";return{value:await nt(t,r,o),pos:n+2}}if(ft(r)){let o=e[n+1]??"";return{value:dt(r,o),pos:n+2}}if(r==="-v"){let o=e[n+1]??"";return{value:ht(t,o),pos:n+2}}if(r==="-o"){let o=e[n+1]??"";return{value:ur(t,o),pos:n+2}}let s=e[n+1];if(ct(s)){let o=r,i=e[n+2]??"";return{value:lt(s,o,i),pos:n+3}}if(ot(s)){let o=mt(r),i=mt(e[n+2]??"0");return!o.valid||!i.valid?{value:!1,pos:n+3}:{value:at(s,o.value,i.value),pos:n+3}}if(st(s)){let o=r,i=e[n+2]??"";return{value:await it(t,s,o,i),pos:n+3}}return{value:r!==void 0&&r!=="",pos:n+1}}function ut(t,e){let n="^";for(let r=0;r<e.length;r++){let s=e[r];if(s==="\\")if(r+1<e.length){let o=e[r+1];/[\\^$.|+(){}[\]*?]/.test(o)?n+=`\\${o}`:n+=o,r++}else n+="\\\\";else if(s==="*")n+=".*";else if(s==="?")n+=".";else if(s==="["){let o=e.indexOf("]",r+1);o!==-1?(n+=e.slice(r,o+1),r=o):n+="\\["}else/[\\^$.|+(){}]/.test(s)?n+=`\\${s}`:n+=s}return n+="$",new RegExp(n).test(t)}function ur(t,e){let r={errexit:()=>t.state.options.errexit===!0,nounset:()=>t.state.options.nounset===!0,pipefail:()=>t.state.options.pipefail===!0,xtrace:()=>t.state.options.xtrace===!0,e:()=>t.state.options.errexit===!0,u:()=>t.state.options.nounset===!0,x:()=>t.state.options.xtrace===!0}[e];return r?r():!1}function $n(t,e){if(e=e.trim(),e==="")return 0;if(/^[+-]?(\d+#[a-zA-Z0-9@_]+|0[xX][0-9a-fA-F]+|0[0-7]+|\d+)$/.test(e))return vn(e);try{let n=new M,r=L(n,e);return $(t,r.expression)}catch{return vn(e)}}function Ys(t,e){let n=0;for(let r of t){let s;if(r>="0"&&r<="9")s=r.charCodeAt(0)-48;else if(r>="a"&&r<="z")s=r.charCodeAt(0)-97+10;else if(r>="A"&&r<="Z")s=r.charCodeAt(0)-65+36;else if(r==="@")s=62;else if(r==="_")s=63;else return Number.NaN;if(s>=e)return Number.NaN;n=n*e+s}return n}function vn(t){if(t=t.trim(),t==="")return 0;let e=!1;t.startsWith("-")?(e=!0,t=t.slice(1)):t.startsWith("+")&&(t=t.slice(1));let n,r=t.match(/^(\d+)#([a-zA-Z0-9@_]+)$/);if(r){let s=Number.parseInt(r[1],10);s>=2&&s<=64?n=Ys(r[2],s):n=0}else/^0[xX][0-9a-fA-F]+$/.test(t)?n=Number.parseInt(t,16):/^0[0-7]+$/.test(t)?n=Number.parseInt(t,8):n=Number.parseInt(t,10);return Number.isNaN(n)&&(n=0),e?-n:n}function mt(t){if(t=t.trim(),t==="")return{value:0,valid:!0};let e=!1;if(t.startsWith("-")?(e=!0,t=t.slice(1)):t.startsWith("+")&&(t=t.slice(1)),!/^\d+$/.test(t))return{value:0,valid:!1};let n=Number.parseInt(t,10);return Number.isNaN(n)?{value:0,valid:!1}:{value:e?-n:n,valid:!0}}async function fr(t,e){let n=t.state.inCondition;t.state.inCondition=!0;let r="",s="",o=0;try{for(let i of e){let a=await t.executeStatement(i);r+=a.stdout,s+=a.stderr,o=a.exitCode}}finally{t.state.inCondition=n}return{stdout:r,stderr:s,exitCode:o}}function Le(t,e,n,r){if(t instanceof U)return e+=t.stdout,n+=t.stderr,t.levels>1&&r>1?(t.levels--,t.stdout=e,t.stderr=n,{action:"rethrow",stdout:e,stderr:n,error:t}):{action:"break",stdout:e,stderr:n};if(t instanceof X)return e+=t.stdout,n+=t.stderr,t.levels>1&&r>1?(t.levels--,t.stdout=e,t.stderr=n,{action:"rethrow",stdout:e,stderr:n,error:t}):{action:"continue",stdout:e,stderr:n};if(t instanceof G||t instanceof ee||t instanceof R||t instanceof z)return t.prependOutput(e,n),{action:"rethrow",stdout:e,stderr:n,error:t};let s=Y(t);return{action:"error",stdout:e,stderr:`${n}${s}
112
- `,exitCode:1}}async function pt(t,e,n="",r=""){let s=n,o=r,i=0;try{for(let a of e){let l=await t.executeStatement(a);s+=l.stdout,o+=l.stderr,i=l.exitCode}}catch(a){if(Be(a)||a instanceof ee||a instanceof R||a instanceof z||a instanceof oe)throw a.prependOutput(s,o),a;return{stdout:s,stderr:`${o}${Y(a)}
113
- `,exitCode:1}}return{stdout:s,stderr:o,exitCode:i}}async function In(t,e){let n="",r="";for(let s of e.clauses){let o=await fr(t,s.condition);if(n+=o.stdout,r+=o.stderr,o.exitCode===0)return pt(t,s.body,n,r)}return e.elseBody?pt(t,e.elseBody,n,r):x(n,r,0)}async function Rn(t,e){let n="",r="",s=0,o=0;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e.variable))return S(`bash: \`${e.variable}': not a valid identifier
114
- `);let i=[];if(e.words===null)i=(t.state.env["@"]||"").split(" ").filter(Boolean);else if(e.words.length===0)i=[];else for(let a of e.words){let l=await _e(t,a);i.push(...l.values)}t.state.loopDepth++;try{for(let a of i){o++,o>t.limits.maxLoopIterations&&ie(`for loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r),t.state.env[e.variable]=a;try{for(let l of e.body){let c=await t.executeStatement(l);n+=c.stdout,r+=c.stderr,s=c.exitCode}}catch(l){let c=Le(l,n,r,t.state.loopDepth);if(n=c.stdout,r=c.stderr,c.action==="break")break;if(c.action==="continue")continue;if(c.action==="error")return x(n,r,c.exitCode??1);throw c.error}}}finally{t.state.loopDepth--}return x(n,r,s)}async function kn(t,e){let n="",r="",s=0,o=0;e.init&&await v(t,e.init.expression),t.state.loopDepth++;try{for(;o++,o>t.limits.maxLoopIterations&&ie(`for loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r),!(e.condition&&await v(t,e.condition.expression)===0);){try{for(let i of e.body){let a=await t.executeStatement(i);n+=a.stdout,r+=a.stderr,s=a.exitCode}}catch(i){let a=Le(i,n,r,t.state.loopDepth);if(n=a.stdout,r=a.stderr,a.action==="break")break;if(a.action==="continue"){e.update&&await v(t,e.update.expression);continue}if(a.action==="error")return x(n,r,a.exitCode??1);throw a.error}e.update&&await v(t,e.update.expression)}}finally{t.state.loopDepth--}return x(n,r,s)}async function Dn(t,e,n=""){let r="",s="",o=0,i=0,a=n;for(let c of e.redirections)if((c.operator==="<<"||c.operator==="<<-")&&c.target.type==="HereDoc"){let u=c.target,d=await P(t,u.content);u.stripTabs&&(d=d.split(`
108
+ `,s=1;continue}let m=u[h][0];delete t.state.env[`${a}_${m}`];continue}delete t.state.env[`${a}_${c}`];continue}delete t.state.env[o],t.state.functions.delete(o)}return x("",r,s)}function ar(t,e){return t.fs.resolvePath(t.state.cwd,e)}var Hs=["-e","-a","-f","-d","-r","-w","-x","-s","-L","-h","-k","-g","-u","-G","-O","-b","-c","-p","-S","-t","-N"];function rt(t){return Hs.includes(t)}async function nt(t,e,n){let r=ar(t,n);switch(e){case"-e":case"-a":return t.fs.exists(r);case"-f":return await t.fs.exists(r)?(await t.fs.stat(r)).isFile:!1;case"-d":return await t.fs.exists(r)?(await t.fs.stat(r)).isDirectory:!1;case"-r":case"-w":case"-x":return t.fs.exists(r);case"-s":return await t.fs.exists(r)?(await t.fs.stat(r)).size>0:!1;case"-L":case"-h":try{return(await t.fs.lstat(r)).isSymbolicLink}catch{return!1}case"-k":return await t.fs.exists(r)?((await t.fs.stat(r)).mode&512)!==0:!1;case"-g":return await t.fs.exists(r)?((await t.fs.stat(r)).mode&1024)!==0:!1;case"-u":return await t.fs.exists(r)?((await t.fs.stat(r)).mode&2048)!==0:!1;case"-G":case"-O":return t.fs.exists(r);case"-b":return!1;case"-c":return["/dev/null","/dev/zero","/dev/random","/dev/urandom","/dev/tty","/dev/stdin","/dev/stdout","/dev/stderr"].some(o=>r===o||r.endsWith(o));case"-p":return!1;case"-S":return!1;case"-t":return!1;case"-N":return t.fs.exists(r);default:return!1}}var Vs=["-nt","-ot","-ef"];function st(t){return Vs.includes(t)}async function it(t,e,n,r){let s=ar(t,n),o=ar(t,r);switch(e){case"-nt":try{let i=await t.fs.stat(s),a=await t.fs.stat(o);return i.mtime>a.mtime}catch{return!1}case"-ot":try{let i=await t.fs.stat(s),a=await t.fs.stat(o);return i.mtime<a.mtime}catch{return!1}case"-ef":try{if(!await t.fs.exists(s)||!await t.fs.exists(o))return!1;let i=t.fs.resolvePath(t.state.cwd,s),a=t.fs.resolvePath(t.state.cwd,o);return i===a}catch{return!1}default:return!1}}var js=new Set(["-eq","-ne","-lt","-le","-gt","-ge"]);function ot(t){return js.has(t)}function at(t,e,n){switch(t){case"-eq":return e===n;case"-ne":return e!==n;case"-lt":return e<n;case"-le":return e<=n;case"-gt":return e>n;case"-ge":return e>=n}}function ct(t){return t==="="||t==="=="||t==="!="}function lt(t,e,n,r=!1){let s=r?ut(e,n):e===n;return t==="!="?!s:s}var qs=new Set(["-z","-n"]);function ft(t){return qs.has(t)}function dt(t,e){switch(t){case"-z":return e==="";case"-n":return e!==""}}function ht(t,e){let n=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(n){let r=n[1],s=n[2];s=s.replace(/\$([a-zA-Z_][a-zA-Z0-9_]*)/g,(i,a)=>t.state.env[a]||"");let o;if(/^-?\d+$/.test(s))o=Number.parseInt(s,10);else try{let i=Function(`"use strict"; return (${s})`)();o=typeof i=="number"?Math.floor(i):0}catch{let i=t.state.env[s];o=i?Number.parseInt(i,10):0}if(o<0){let i=De(t,r);if(i.length===0||(o=Math.max(...i)+1+o,o<0))return!1}return`${r}_${o}`in t.state.env}return e in t.state.env}async function de(t,e){switch(e.type){case"CondBinary":{let n=await P(t,e.left),r=await P(t,e.right),s=e.right.parts.length>0&&e.right.parts.every(o=>o.type==="SingleQuoted"||o.type==="DoubleQuoted"||o.type==="Escaped");if(ct(e.operator))return lt(e.operator,n,r,!s);if(ot(e.operator))return at(e.operator,Nn(t,n),Nn(t,r));if(st(e.operator))return it(t,e.operator,n,r);switch(e.operator){case"=~":try{let o=new RegExp(r),i=n.match(o);if(i){t.state.env.BASH_REMATCH=i[0];for(let a=1;a<i.length;a++)t.state.env[`BASH_REMATCH_${a}`]=i[a]||""}return i!==null}catch{throw new Error("syntax error in regular expression")}case"<":return n<r;case">":return n>r;default:return!1}}case"CondUnary":{let n=await P(t,e.operand);return rt(e.operator)?nt(t,e.operator,n):ft(e.operator)?dt(e.operator,n):e.operator==="-v"?ht(t,n):e.operator==="-o"?lr(t,n):!1}case"CondNot":return!await de(t,e.operand);case"CondAnd":return await de(t,e.left)?await de(t,e.right):!1;case"CondOr":return await de(t,e.left)?!0:await de(t,e.right);case"CondGroup":return await de(t,e.expression);case"CondWord":return await P(t,e.word)!=="";default:return!1}}async function $e(t,e){if(e.length===0)return x("","",1);if(e.length===1)return O(!!e[0]);if(e.length===2){let r=e[0],s=e[1];return r==="("?S(`test: '(' without matching ')'
109
+ `,2):rt(r)?O(await nt(t,r,s)):ft(r)?O(dt(r,s)):r==="!"?O(!s):r==="-v"?O(ht(t,s)):r==="-o"?O(lr(t,s)):r==="="||r==="=="||r==="!="||r==="<"||r===">"||r==="-eq"||r==="-ne"||r==="-lt"||r==="-le"||r==="-gt"||r==="-ge"||r==="-nt"||r==="-ot"||r==="-ef"?S(`test: ${r}: unary operator expected
110
+ `,2):x("","",1)}if(e.length===3){let r=e[0],s=e[1],o=e[2];if(ct(s))return O(lt(s,r,o));if(ot(s)){let i=mt(r),a=mt(o);return!i.valid||!a.valid?x("","",2):O(at(s,i.value,a.value))}if(st(s))return O(await it(t,s,r,o));switch(s){case"-a":return O(r!==""&&o!=="");case"-o":return O(r!==""||o!=="");case">":return O(r>o);case"<":return O(r<o)}if(r==="!"){let i=await $e(t,[s,o]);return x("",i.stderr,i.exitCode===0?1:i.exitCode===1?0:i.exitCode)}if(r==="("&&o===")")return O(s!=="")}if(e.length===4){if(e[0]==="!"){let r=await $e(t,e.slice(1));return x("",r.stderr,r.exitCode===0?1:r.exitCode===1?0:r.exitCode)}if(e[0]==="("&&e[3]===")")return $e(t,[e[1],e[2]])}let n=await vn(t,e,0);return n.pos<e.length?S(`test: too many arguments
111
+ `,2):O(n.value)}async function vn(t,e,n){return Zs(t,e,n)}async function Zs(t,e,n){let{value:r,pos:s}=await Cn(t,e,n);for(;e[s]==="-o";){let o=await Cn(t,e,s+1);r=r||o.value,s=o.pos}return{value:r,pos:s}}async function Cn(t,e,n){let{value:r,pos:s}=await cr(t,e,n);for(;e[s]==="-a";){let o=await cr(t,e,s+1);r=r&&o.value,s=o.pos}return{value:r,pos:s}}async function cr(t,e,n){if(e[n]==="!"){let{value:r,pos:s}=await cr(t,e,n+1);return{value:!r,pos:s}}return Qs(t,e,n)}async function Qs(t,e,n){let r=e[n];if(r==="("){let{value:o,pos:i}=await vn(t,e,n+1);return{value:o,pos:e[i]===")"?i+1:i}}if(rt(r)){let o=e[n+1]??"";return{value:await nt(t,r,o),pos:n+2}}if(ft(r)){let o=e[n+1]??"";return{value:dt(r,o),pos:n+2}}if(r==="-v"){let o=e[n+1]??"";return{value:ht(t,o),pos:n+2}}if(r==="-o"){let o=e[n+1]??"";return{value:lr(t,o),pos:n+2}}let s=e[n+1];if(ct(s)){let o=r,i=e[n+2]??"";return{value:lt(s,o,i),pos:n+3}}if(ot(s)){let o=mt(r),i=mt(e[n+2]??"0");return!o.valid||!i.valid?{value:!1,pos:n+3}:{value:at(s,o.value,i.value),pos:n+3}}if(st(s)){let o=r,i=e[n+2]??"";return{value:await it(t,s,o,i),pos:n+3}}return{value:r!==void 0&&r!=="",pos:n+1}}function ut(t,e){let n="^";for(let r=0;r<e.length;r++){let s=e[r];if(s==="\\")if(r+1<e.length){let o=e[r+1];/[\\^$.|+(){}[\]*?]/.test(o)?n+=`\\${o}`:n+=o,r++}else n+="\\\\";else if(s==="*")n+=".*";else if(s==="?")n+=".";else if(s==="["){let o=e.indexOf("]",r+1);o!==-1?(n+=e.slice(r,o+1),r=o):n+="\\["}else/[\\^$.|+(){}]/.test(s)?n+=`\\${s}`:n+=s}return n+="$",new RegExp(n).test(t)}function lr(t,e){let r={errexit:()=>t.state.options.errexit===!0,nounset:()=>t.state.options.nounset===!0,pipefail:()=>t.state.options.pipefail===!0,xtrace:()=>t.state.options.xtrace===!0,e:()=>t.state.options.errexit===!0,u:()=>t.state.options.nounset===!0,x:()=>t.state.options.xtrace===!0}[e];return r?r():!1}function Nn(t,e){if(e=e.trim(),e==="")return 0;if(/^[+-]?(\d+#[a-zA-Z0-9@_]+|0[xX][0-9a-fA-F]+|0[0-7]+|\d+)$/.test(e))return $n(e);try{let n=new M,r=L(n,e);return $(t,r.expression)}catch{return $n(e)}}function Ks(t,e){let n=0;for(let r of t){let s;if(r>="0"&&r<="9")s=r.charCodeAt(0)-48;else if(r>="a"&&r<="z")s=r.charCodeAt(0)-97+10;else if(r>="A"&&r<="Z")s=r.charCodeAt(0)-65+36;else if(r==="@")s=62;else if(r==="_")s=63;else return Number.NaN;if(s>=e)return Number.NaN;n=n*e+s}return n}function $n(t){if(t=t.trim(),t==="")return 0;let e=!1;t.startsWith("-")?(e=!0,t=t.slice(1)):t.startsWith("+")&&(t=t.slice(1));let n,r=t.match(/^(\d+)#([a-zA-Z0-9@_]+)$/);if(r){let s=Number.parseInt(r[1],10);s>=2&&s<=64?n=Ks(r[2],s):n=0}else/^0[xX][0-9a-fA-F]+$/.test(t)?n=Number.parseInt(t,16):/^0[0-7]+$/.test(t)?n=Number.parseInt(t,8):n=Number.parseInt(t,10);return Number.isNaN(n)&&(n=0),e?-n:n}function mt(t){if(t=t.trim(),t==="")return{value:0,valid:!0};let e=!1;if(t.startsWith("-")?(e=!0,t=t.slice(1)):t.startsWith("+")&&(t=t.slice(1)),!/^\d+$/.test(t))return{value:0,valid:!1};let n=Number.parseInt(t,10);return Number.isNaN(n)?{value:0,valid:!1}:{value:e?-n:n,valid:!0}}async function ur(t,e){let n=t.state.inCondition;t.state.inCondition=!0;let r="",s="",o=0;try{for(let i of e){let a=await t.executeStatement(i);r+=a.stdout,s+=a.stderr,o=a.exitCode}}finally{t.state.inCondition=n}return{stdout:r,stderr:s,exitCode:o}}function Te(t,e,n,r){if(t instanceof U)return e+=t.stdout,n+=t.stderr,t.levels>1&&r>1?(t.levels--,t.stdout=e,t.stderr=n,{action:"rethrow",stdout:e,stderr:n,error:t}):{action:"break",stdout:e,stderr:n};if(t instanceof X)return e+=t.stdout,n+=t.stderr,t.levels>1&&r>1?(t.levels--,t.stdout=e,t.stderr=n,{action:"rethrow",stdout:e,stderr:n,error:t}):{action:"continue",stdout:e,stderr:n};if(t instanceof G||t instanceof ee||t instanceof R||t instanceof z)return t.prependOutput(e,n),{action:"rethrow",stdout:e,stderr:n,error:t};let s=Y(t);return{action:"error",stdout:e,stderr:`${n}${s}
112
+ `,exitCode:1}}async function pt(t,e,n="",r=""){let s=n,o=r,i=0;try{for(let a of e){let l=await t.executeStatement(a);s+=l.stdout,o+=l.stderr,i=l.exitCode}}catch(a){if(ze(a)||a instanceof ee||a instanceof R||a instanceof z||a instanceof oe)throw a.prependOutput(s,o),a;return{stdout:s,stderr:`${o}${Y(a)}
113
+ `,exitCode:1}}return{stdout:s,stderr:o,exitCode:i}}async function Pn(t,e){let n="",r="";for(let s of e.clauses){let o=await ur(t,s.condition);if(n+=o.stdout,r+=o.stderr,o.exitCode===0)return pt(t,s.body,n,r)}return e.elseBody?pt(t,e.elseBody,n,r):x(n,r,0)}async function In(t,e){let n="",r="",s=0,o=0;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e.variable))return S(`bash: \`${e.variable}': not a valid identifier
114
+ `);let i=[];if(e.words===null)i=(t.state.env["@"]||"").split(" ").filter(Boolean);else if(e.words.length===0)i=[];else for(let a of e.words){let l=await Le(t,a);i.push(...l.values)}t.state.loopDepth++;try{for(let a of i){o++,o>t.limits.maxLoopIterations&&ie(`for loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r),t.state.env[e.variable]=a;try{for(let l of e.body){let c=await t.executeStatement(l);n+=c.stdout,r+=c.stderr,s=c.exitCode}}catch(l){let c=Te(l,n,r,t.state.loopDepth);if(n=c.stdout,r=c.stderr,c.action==="break")break;if(c.action==="continue")continue;if(c.action==="error")return x(n,r,c.exitCode??1);throw c.error}}}finally{t.state.loopDepth--}return x(n,r,s)}async function Rn(t,e){let n="",r="",s=0,o=0;e.init&&await v(t,e.init.expression),t.state.loopDepth++;try{for(;o++,o>t.limits.maxLoopIterations&&ie(`for loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r),!(e.condition&&await v(t,e.condition.expression)===0);){try{for(let i of e.body){let a=await t.executeStatement(i);n+=a.stdout,r+=a.stderr,s=a.exitCode}}catch(i){let a=Te(i,n,r,t.state.loopDepth);if(n=a.stdout,r=a.stderr,a.action==="break")break;if(a.action==="continue"){e.update&&await v(t,e.update.expression);continue}if(a.action==="error")return x(n,r,a.exitCode??1);throw a.error}e.update&&await v(t,e.update.expression)}}finally{t.state.loopDepth--}return x(n,r,s)}async function kn(t,e,n=""){let r="",s="",o=0,i=0,a=n;for(let c of e.redirections)if((c.operator==="<<"||c.operator==="<<-")&&c.target.type==="HereDoc"){let u=c.target,d=await P(t,u.content);u.stripTabs&&(d=d.split(`
115
115
  `).map(h=>h.replace(/^\t+/,"")).join(`
116
116
  `)),a=d}else if(c.operator==="<<<"&&c.target.type==="Word")a=`${await P(t,c.target)}
117
117
  `;else if(c.operator==="<"&&c.target.type==="Word")try{let u=await P(t,c.target),d=t.fs.resolvePath(t.state.cwd,u);a=await t.fs.readFile(d)}catch{let u=await P(t,c.target);return S(`bash: ${u}: No such file or directory
118
- `)}let l=t.state.groupStdin;a&&(t.state.groupStdin=a),t.state.loopDepth++;try{for(;;){i++,i>t.limits.maxLoopIterations&&ie(`while loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,s);let c=0,u=!1,d=!1,h=t.state.inCondition;t.state.inCondition=!0;try{for(let m of e.condition){let y=await t.executeStatement(m);r+=y.stdout,s+=y.stderr,c=y.exitCode}}catch(m){if(m instanceof U){if(r+=m.stdout,s+=m.stderr,m.levels>1&&t.state.loopDepth>1)throw m.levels--,m.stdout=r,m.stderr=s,t.state.inCondition=h,m;u=!0}else if(m instanceof X){if(r+=m.stdout,s+=m.stderr,m.levels>1&&t.state.loopDepth>1)throw m.levels--,m.stdout=r,m.stderr=s,t.state.inCondition=h,m;d=!0}else throw t.state.inCondition=h,m}finally{t.state.inCondition=h}if(u)break;if(!d){if(c!==0)break;try{for(let m of e.body){let y=await t.executeStatement(m);r+=y.stdout,s+=y.stderr,o=y.exitCode}}catch(m){let y=Le(m,r,s,t.state.loopDepth);if(r=y.stdout,s=y.stderr,y.action==="break")break;if(y.action==="continue")continue;if(y.action==="error")return x(r,s,y.exitCode??1);throw y.error}}}}finally{t.state.loopDepth--,t.state.groupStdin=l}return x(r,s,o)}async function On(t,e){let n="",r="",s=0,o=0;t.state.loopDepth++;try{for(;;){o++,o>t.limits.maxLoopIterations&&ie(`until loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r);let i=await fr(t,e.condition);if(n+=i.stdout,r+=i.stderr,i.exitCode===0)break;try{for(let a of e.body){let l=await t.executeStatement(a);n+=l.stdout,r+=l.stderr,s=l.exitCode}}catch(a){let l=Le(a,n,r,t.state.loopDepth);if(n=l.stdout,r=l.stderr,l.action==="break")break;if(l.action==="continue")continue;if(l.action==="error")return x(n,r,l.exitCode??1);throw l.error}}}finally{t.state.loopDepth--}return x(n,r,s)}async function _n(t,e){let n="",r="",s=0,o=await P(t,e.word),i=!1;for(let a=0;a<e.items.length;a++){let l=e.items[a],c=i;if(!i)for(let u of l.patterns){let d=await P(t,u);if(an(u)&&(d=cn(d)),ut(o,d)){c=!0;break}}if(c){let u=await pt(t,l.body,n,r);if(n=u.stdout,r=u.stderr,s=u.exitCode,l.terminator===";;")break;l.terminator===";&"?i=!0:i=!1}else i=!1}return x(n,r,s)}function Ln(t,e){return t.state.functions.set(e.name,e),N}async function Tn(t,e,n){t.state.callDepth++,t.state.callDepth>t.limits.maxCallDepth&&(t.state.callDepth--,ie(`${e.name}: maximum recursion depth (${t.limits.maxCallDepth}) exceeded, increase executionLimits.maxCallDepth`,"recursion")),t.state.localScopes.push(new Map);let r={};for(let o=0;o<n.length;o++)r[String(o+1)]=t.state.env[String(o+1)],t.state.env[String(o+1)]=n[o];r["@"]=t.state.env["@"],r["#"]=t.state.env["#"],t.state.env["@"]=n.join(" "),t.state.env["#"]=String(n.length);let s=()=>{let o=t.state.localScopes.pop();if(o)for(let[i,a]of o)a===void 0?delete t.state.env[i]:t.state.env[i]=a;for(let[i,a]of Object.entries(r))a===void 0?delete t.state.env[i]:t.state.env[i]=a;t.state.callDepth--};try{let o=await t.executeCommand(e.body,"");return s(),o}catch(o){if(s(),o instanceof G)return x(o.stdout,o.stderr,o.exitCode);throw o}}async function Wn(t,e,n){let{stdout:r,stderr:s,exitCode:o}=e;for(let i of n){if(i.target.type==="HereDoc")continue;let a=await P(t,i.target);switch(i.operator){case">":{let l=i.fd??1;if(l===1){let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){s+=`bash: ${a}: Is a directory
118
+ `)}let l=t.state.groupStdin;a&&(t.state.groupStdin=a),t.state.loopDepth++;try{for(;;){i++,i>t.limits.maxLoopIterations&&ie(`while loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,s);let c=0,u=!1,d=!1,h=t.state.inCondition;t.state.inCondition=!0;try{for(let m of e.condition){let y=await t.executeStatement(m);r+=y.stdout,s+=y.stderr,c=y.exitCode}}catch(m){if(m instanceof U){if(r+=m.stdout,s+=m.stderr,m.levels>1&&t.state.loopDepth>1)throw m.levels--,m.stdout=r,m.stderr=s,t.state.inCondition=h,m;u=!0}else if(m instanceof X){if(r+=m.stdout,s+=m.stderr,m.levels>1&&t.state.loopDepth>1)throw m.levels--,m.stdout=r,m.stderr=s,t.state.inCondition=h,m;d=!0}else throw t.state.inCondition=h,m}finally{t.state.inCondition=h}if(u)break;if(!d){if(c!==0)break;try{for(let m of e.body){let y=await t.executeStatement(m);r+=y.stdout,s+=y.stderr,o=y.exitCode}}catch(m){let y=Te(m,r,s,t.state.loopDepth);if(r=y.stdout,s=y.stderr,y.action==="break")break;if(y.action==="continue")continue;if(y.action==="error")return x(r,s,y.exitCode??1);throw y.error}}}}finally{t.state.loopDepth--,t.state.groupStdin=l}return x(r,s,o)}async function Dn(t,e){let n="",r="",s=0,o=0;t.state.loopDepth++;try{for(;;){o++,o>t.limits.maxLoopIterations&&ie(`until loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r);let i=await ur(t,e.condition);if(n+=i.stdout,r+=i.stderr,i.exitCode===0)break;try{for(let a of e.body){let l=await t.executeStatement(a);n+=l.stdout,r+=l.stderr,s=l.exitCode}}catch(a){let l=Te(a,n,r,t.state.loopDepth);if(n=l.stdout,r=l.stderr,l.action==="break")break;if(l.action==="continue")continue;if(l.action==="error")return x(n,r,l.exitCode??1);throw l.error}}}finally{t.state.loopDepth--}return x(n,r,s)}async function On(t,e){let n="",r="",s=0,o=await P(t,e.word),i=!1;for(let a=0;a<e.items.length;a++){let l=e.items[a],c=i;if(!i)for(let u of l.patterns){let d=await P(t,u);if(on(u)&&(d=an(d)),ut(o,d)){c=!0;break}}if(c){let u=await pt(t,l.body,n,r);if(n=u.stdout,r=u.stderr,s=u.exitCode,l.terminator===";;")break;l.terminator===";&"?i=!0:i=!1}else i=!1}return x(n,r,s)}function _n(t,e){return t.state.functions.set(e.name,e),N}async function Ln(t,e,n){t.state.callDepth++,t.state.callDepth>t.limits.maxCallDepth&&(t.state.callDepth--,ie(`${e.name}: maximum recursion depth (${t.limits.maxCallDepth}) exceeded, increase executionLimits.maxCallDepth`,"recursion")),t.state.localScopes.push(new Map);let r={};for(let o=0;o<n.length;o++)r[String(o+1)]=t.state.env[String(o+1)],t.state.env[String(o+1)]=n[o];r["@"]=t.state.env["@"],r["#"]=t.state.env["#"],t.state.env["@"]=n.join(" "),t.state.env["#"]=String(n.length);let s=()=>{let o=t.state.localScopes.pop();if(o)for(let[i,a]of o)a===void 0?delete t.state.env[i]:t.state.env[i]=a;for(let[i,a]of Object.entries(r))a===void 0?delete t.state.env[i]:t.state.env[i]=a;t.state.callDepth--};try{let o=await t.executeCommand(e.body,"");return s(),o}catch(o){if(s(),o instanceof G)return x(o.stdout,o.stderr,o.exitCode);throw o}}async function Tn(t,e,n){let{stdout:r,stderr:s,exitCode:o}=e;for(let i of n){if(i.target.type==="HereDoc")continue;let a=await P(t,i.target);switch(i.operator){case">":{let l=i.fd??1;if(l===1){let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){s+=`bash: ${a}: Is a directory
119
119
  `,o=1,r="";break}}catch{}await t.fs.writeFile(c,r),r=""}else if(l===2)if(a==="/dev/null")s="";else{let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){s+=`bash: ${a}: Is a directory
120
120
  `,o=1;break}}catch{}await t.fs.writeFile(c,s),s=""}break}case">>":{let l=i.fd??1;if(l===1){let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){s+=`bash: ${a}: Is a directory
121
121
  `,o=1,r="";break}}catch{}await t.fs.appendFile(c,r),r=""}else if(l===2){let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){s+=`bash: ${a}: Is a directory
122
122
  `,o=1;break}}catch{}await t.fs.appendFile(c,s),s=""}break}case">&":{let l=i.fd??1;a==="2"||a==="&2"?l===1&&(s+=r,r=""):(a==="1"||a==="&1")&&(r+=s,s="");break}case"&>":{let l=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(l)).isDirectory){s=`bash: ${a}: Is a directory
123
123
  `,o=1,r="";break}}catch{}await t.fs.writeFile(l,r+s),r="",s="";break}case"&>>":{let l=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(l)).isDirectory){s=`bash: ${a}: Is a directory
124
- `,o=1,r="";break}}catch{}await t.fs.appendFile(l,r+s),r="",s="";break}}}return x(r,s,o)}var Te=class{ctx;constructor(e,n){this.ctx={state:n,fs:e.fs,commands:e.commands,limits:e.limits,execFn:e.exec,executeScript:this.executeScript.bind(this),executeStatement:this.executeStatement.bind(this),executeCommand:this.executeCommand.bind(this),fetch:e.fetch,sleep:e.sleep}}async executeScript(e){let n="",r="",s=0;for(let o of e.statements)try{let i=await this.executeStatement(o);n+=i.stdout,r+=i.stderr,s=i.exitCode,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s)}catch(i){if(i instanceof R)throw i.prependOutput(n,r),i;if(i instanceof z)throw i;if(i instanceof ee)return n+=i.stdout,r+=i.stderr,s=i.exitCode,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s),{stdout:n,stderr:r,exitCode:s,env:{...this.ctx.state.env}};if(i instanceof J)return n+=i.stdout,r+=i.stderr,s=1,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s),{stdout:n,stderr:r,exitCode:s,env:{...this.ctx.state.env}};if(i instanceof pe)return n+=i.stdout,r+=i.stderr,s=1,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s),{stdout:n,stderr:r,exitCode:s,env:{...this.ctx.state.env}};if(i instanceof U||i instanceof X){if(this.ctx.state.loopDepth>0)throw i.prependOutput(n,r),i;n+=i.stdout,r+=i.stderr;continue}throw i instanceof G&&i.prependOutput(n,r),i}return{stdout:n,stderr:r,exitCode:s,env:{...this.ctx.state.env}}}async executeStatement(e){this.ctx.state.commandCount++,this.ctx.state.commandCount>this.ctx.limits.maxCommandCount&&ie(`too many commands executed (>${this.ctx.limits.maxCommandCount}), increase executionLimits.maxCommandCount`,"commands");let n="",r="",s=0,o=-1,i=!1;for(let a=0;a<e.pipelines.length;a++){let l=e.pipelines[a],c=a>0?e.operators[a-1]:null;if(c==="&&"&&s!==0||c==="||"&&s===0)continue;let u=await this.executePipeline(l);n+=u.stdout,r+=u.stderr,s=u.exitCode,o=a,i=l.negated,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s)}if(this.ctx.state.options.errexit&&s!==0&&o===e.pipelines.length-1&&!i&&!this.ctx.state.inCondition)throw new ee(s,n,r);return x(n,r,s)}async executePipeline(e){let n="",r=N,s=0,o=[];for(let i=0;i<e.commands.length;i++){let a=e.commands[i],l=i===e.commands.length-1,c;try{c=await this.executeCommand(a,n)}catch(u){if(u instanceof pe)c={stdout:u.stdout,stderr:u.stderr,exitCode:1};else if(u instanceof R&&e.commands.length>1)c={stdout:u.stdout,stderr:u.stderr,exitCode:u.exitCode};else throw u}o.push(c.exitCode),c.exitCode!==0&&(s=c.exitCode),l?r=c:(n=c.stdout,r={stdout:"",stderr:c.stderr,exitCode:c.exitCode})}for(let i of Object.keys(this.ctx.state.env))i.startsWith("PIPESTATUS_")&&delete this.ctx.state.env[i];for(let i=0;i<o.length;i++)this.ctx.state.env[`PIPESTATUS_${i}`]=String(o[i]);return this.ctx.state.env.PIPESTATUS__length=String(o.length),this.ctx.state.options.pipefail&&s!==0&&(r={...r,exitCode:s}),e.negated&&(r={...r,exitCode:r.exitCode===0?1:0}),r}async executeCommand(e,n){switch(e.type){case"SimpleCommand":return this.executeSimpleCommand(e,n);case"If":return In(this.ctx,e);case"For":return Rn(this.ctx,e);case"CStyleFor":return kn(this.ctx,e);case"While":return Dn(this.ctx,e,n);case"Until":return On(this.ctx,e);case"Case":return _n(this.ctx,e);case"Subshell":return this.executeSubshell(e,n);case"Group":return this.executeGroup(e,n);case"FunctionDef":return Ln(this.ctx,e);case"ArithmeticCommand":return this.executeArithmeticCommand(e);case"ConditionalCommand":return this.executeConditionalCommand(e);default:return N}}async executeSimpleCommand(e,n){try{return await this.executeSimpleCommandInner(e,n)}catch(r){if(r instanceof F)return S(r.stderr);throw r}}async executeSimpleCommandInner(e,n){e.line!==void 0&&(this.ctx.state.currentLine=e.line),this.ctx.state.expansionStderr="";let r={};for(let l of e.assignments){let c=l.name;if(l.array){if(/\[.+\]$/.test(c))return x("",`bash: ${c}: cannot assign list to array member
125
- `,1);let w=fe(this.ctx,c);if(w)return w;let p=[];for(let g of l.array){let b=await _e(this.ctx,g);p.push(...b.values)}let E=0;if(l.append){let g=T(this.ctx,c);g.length>0&&(E=Math.max(...g.map(([C])=>typeof C=="number"?C:0))+1)}else{let g=`${c}_`;for(let b of Object.keys(this.ctx.state.env))b.startsWith(g)&&!b.includes("__")&&delete this.ctx.state.env[b]}for(let g=0;g<p.length;g++)this.ctx.state.env[`${c}_${E+g}`]=p[g];l.append||(this.ctx.state.env[`${c}__length`]=String(p.length));continue}let u=l.value?await P(this.ctx,l.value):"";if(c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[\]$/))return x("",`bash: ${c}: bad array subscript
124
+ `,o=1,r="";break}}catch{}await t.fs.appendFile(l,r+s),r="",s="";break}}}return x(r,s,o)}var We=class{ctx;constructor(e,n){this.ctx={state:n,fs:e.fs,commands:e.commands,limits:e.limits,execFn:e.exec,executeScript:this.executeScript.bind(this),executeStatement:this.executeStatement.bind(this),executeCommand:this.executeCommand.bind(this),fetch:e.fetch,sleep:e.sleep}}async executeScript(e){let n="",r="",s=0;for(let o of e.statements)try{let i=await this.executeStatement(o);n+=i.stdout,r+=i.stderr,s=i.exitCode,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s)}catch(i){if(i instanceof R)throw i.prependOutput(n,r),i;if(i instanceof z)throw i;if(i instanceof ee)return n+=i.stdout,r+=i.stderr,s=i.exitCode,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s),{stdout:n,stderr:r,exitCode:s,env:{...this.ctx.state.env}};if(i instanceof J)return n+=i.stdout,r+=i.stderr,s=1,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s),{stdout:n,stderr:r,exitCode:s,env:{...this.ctx.state.env}};if(i instanceof pe)return n+=i.stdout,r+=i.stderr,s=1,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s),{stdout:n,stderr:r,exitCode:s,env:{...this.ctx.state.env}};if(i instanceof U||i instanceof X){if(this.ctx.state.loopDepth>0)throw i.prependOutput(n,r),i;n+=i.stdout,r+=i.stderr;continue}throw i instanceof G&&i.prependOutput(n,r),i}return{stdout:n,stderr:r,exitCode:s,env:{...this.ctx.state.env}}}async executeStatement(e){this.ctx.state.commandCount++,this.ctx.state.commandCount>this.ctx.limits.maxCommandCount&&ie(`too many commands executed (>${this.ctx.limits.maxCommandCount}), increase executionLimits.maxCommandCount`,"commands");let n="",r="",s=0,o=-1,i=!1;for(let a=0;a<e.pipelines.length;a++){let l=e.pipelines[a],c=a>0?e.operators[a-1]:null;if(c==="&&"&&s!==0||c==="||"&&s===0)continue;let u=await this.executePipeline(l);n+=u.stdout,r+=u.stderr,s=u.exitCode,o=a,i=l.negated,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s)}if(this.ctx.state.options.errexit&&s!==0&&o===e.pipelines.length-1&&!i&&!this.ctx.state.inCondition)throw new ee(s,n,r);return x(n,r,s)}async executePipeline(e){let n="",r=N,s=0,o=[];for(let i=0;i<e.commands.length;i++){let a=e.commands[i],l=i===e.commands.length-1,c;try{c=await this.executeCommand(a,n)}catch(u){if(u instanceof pe)c={stdout:u.stdout,stderr:u.stderr,exitCode:1};else if(u instanceof R&&e.commands.length>1)c={stdout:u.stdout,stderr:u.stderr,exitCode:u.exitCode};else throw u}o.push(c.exitCode),c.exitCode!==0&&(s=c.exitCode),l?r=c:(n=c.stdout,r={stdout:"",stderr:c.stderr,exitCode:c.exitCode})}for(let i of Object.keys(this.ctx.state.env))i.startsWith("PIPESTATUS_")&&delete this.ctx.state.env[i];for(let i=0;i<o.length;i++)this.ctx.state.env[`PIPESTATUS_${i}`]=String(o[i]);return this.ctx.state.env.PIPESTATUS__length=String(o.length),this.ctx.state.options.pipefail&&s!==0&&(r={...r,exitCode:s}),e.negated&&(r={...r,exitCode:r.exitCode===0?1:0}),r}async executeCommand(e,n){switch(e.type){case"SimpleCommand":return this.executeSimpleCommand(e,n);case"If":return Pn(this.ctx,e);case"For":return In(this.ctx,e);case"CStyleFor":return Rn(this.ctx,e);case"While":return kn(this.ctx,e,n);case"Until":return Dn(this.ctx,e);case"Case":return On(this.ctx,e);case"Subshell":return this.executeSubshell(e,n);case"Group":return this.executeGroup(e,n);case"FunctionDef":return _n(this.ctx,e);case"ArithmeticCommand":return this.executeArithmeticCommand(e);case"ConditionalCommand":return this.executeConditionalCommand(e);default:return N}}async executeSimpleCommand(e,n){try{return await this.executeSimpleCommandInner(e,n)}catch(r){if(r instanceof F)return S(r.stderr);throw r}}async executeSimpleCommandInner(e,n){e.line!==void 0&&(this.ctx.state.currentLine=e.line),this.ctx.state.expansionStderr="";let r={};for(let l of e.assignments){let c=l.name;if(l.array){if(/\[.+\]$/.test(c))return x("",`bash: ${c}: cannot assign list to array member
125
+ `,1);let w=fe(this.ctx,c);if(w)return w;let p=[];for(let g of l.array){let b=await Le(this.ctx,g);p.push(...b.values)}let E=0;if(l.append){let g=T(this.ctx,c);g.length>0&&(E=Math.max(...g.map(([C])=>typeof C=="number"?C:0))+1)}else{let g=`${c}_`;for(let b of Object.keys(this.ctx.state.env))b.startsWith(g)&&!b.includes("__")&&delete this.ctx.state.env[b]}for(let g=0;g<p.length;g++)this.ctx.state.env[`${c}_${E+g}`]=p[g];l.append||(this.ctx.state.env[`${c}__length`]=String(p.length));continue}let u=l.value?await P(this.ctx,l.value):"";if(c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[\]$/))return x("",`bash: ${c}: bad array subscript
126
126
  `,1);let h=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(h){let w=h[1],p=h[2],E=fe(this.ctx,w);if(E)return E;let g=this.ctx.state.associativeArrays?.has(w),b;if(g){let I;if(p.startsWith("'")&&p.endsWith("'"))I=p.slice(1,-1);else if(p.startsWith('"')&&p.endsWith('"')){let k=p.slice(1,-1),_=new M().parseWordFromString(k,!0,!1);I=await P(this.ctx,_)}else if(p.includes("$")){let me=new M().parseWordFromString(p,!1,!1);I=await P(this.ctx,me)}else I=p;b=`${w}_${I}`}else{let I;if(/^-?\d+$/.test(p))I=Number.parseInt(p,10);else{try{let k=new M,me=L(k,p);I=$(this.ctx,me.expression)}catch{let k=this.ctx.state.env[p];I=k?Number.parseInt(k,10):0}Number.isNaN(I)&&(I=0)}if(I<0){let k=T(this.ctx,w);if(k.length===0)return x("",`bash: ${w}[${p}]: bad array subscript
127
127
  `,1);if(I=Math.max(...k.map(([_])=>typeof _=="number"?_:0))+1+I,I<0)return x("",`bash: ${w}[${p}]: bad array subscript
128
128
  `,1)}b=`${w}_${I}`}let C=l.append?(this.ctx.state.env[b]||"")+u:u;e.name?(r[b]=this.ctx.state.env[b],this.ctx.state.env[b]=C):this.ctx.state.env[b]=C;continue}let m=fe(this.ctx,c);if(m)return m;let y=l.append?(this.ctx.state.env[c]||"")+u:u;e.name?(r[c]=this.ctx.state.env[c],this.ctx.state.env[c]=y):this.ctx.state.env[c]=y}if(!e.name)return x("","",this.ctx.state.lastExitCode);for(let l of e.redirections){if((l.operator==="<<"||l.operator==="<<-")&&l.target.type==="HereDoc"){let c=l.target,u=await P(this.ctx,c.content);c.stripTabs&&(u=u.split(`
129
129
  `).map(d=>d.replace(/^\t+/,"")).join(`
130
130
  `)),n=u;continue}if(l.operator==="<<<"&&l.target.type==="Word"){n=`${await P(this.ctx,l.target)}
131
131
  `;continue}if(l.operator==="<"&&l.target.type==="Word")try{let c=await P(this.ctx,l.target),u=this.ctx.fs.resolvePath(this.ctx.state.cwd,c);n=await this.ctx.fs.readFile(u)}catch{let c=await P(this.ctx,l.target);for(let[u,d]of Object.entries(r))d===void 0?delete this.ctx.state.env[u]:this.ctx.state.env[u]=d;return S(`bash: ${c}: No such file or directory
132
- `)}}let s=await P(this.ctx,e.name),o=[],i=[];for(let l of e.args){let c=await _e(this.ctx,l);for(let u of c.values)o.push(u),i.push(c.quoted)}if(!s){if(e.name.parts.every(c=>c.type==="CommandSubstitution"||c.type==="ParameterExpansion"||c.type==="ArithmeticExpansion")){if(o.length>0){let c=o.shift();return i.shift(),await this.runCommand(c,o,i,n)}return x("","",this.ctx.state.lastExitCode)}return S(`bash: : command not found
133
- `,127)}let a=await this.runCommand(s,o,i,n);a=await Wn(this.ctx,a,e.redirections),this.ctx.state.lastArg=o.length>0?o[o.length-1]:s;for(let[l,c]of Object.entries(r))c===void 0?delete this.ctx.state.env[l]:this.ctx.state.env[l]=c;return this.ctx.state.expansionStderr&&(a={...a,stderr:this.ctx.state.expansionStderr+a.stderr},this.ctx.state.expansionStderr=""),a}async runCommand(e,n,r,s,o=!1){if(e==="cd")return await Ht(this.ctx,n);if(e==="export")return Xt(this.ctx,n);if(e==="unset")return ar(this.ctx,n);if(e==="exit")return Kt(this.ctx,n);if(e==="local")return Jt(this.ctx,n);if(e==="set")return sr(this.ctx,n);if(e==="break")return Gt(this.ctx,n);if(e==="continue")return Vt(this.ctx,n);if(e==="return")return rr(this.ctx,n);if(e==="eval")return Qt(this.ctx,n);if(e==="shift")return ir(this.ctx,n);if(e==="source"||e===".")return or(this.ctx,n);if(e==="read")return tr(this.ctx,n,s);if(e==="mapfile"||e==="readarray")return er(this.ctx,n,s);if(e==="declare"||e==="typeset")return jt(this.ctx,n);if(e==="readonly")return Zt(this.ctx,n);if(!o){let u=this.ctx.state.functions.get(e);if(u)return Tn(this.ctx,u,n)}if(e===":"||e==="true")return N;if(e==="false")return O(!1);if(e==="let")return Yt(this.ctx,n);if(e==="command"){if(n.length===0)return N;let u=n;for(;u.length>0&&u[0].startsWith("-");)u=u.slice(1);if(u.length===0)return N;let[d,...h]=u;return this.runCommand(d,h,[],s,!0)}if(e==="builtin"){if(n.length===0)return N;let[u,...d]=n;return this.runCommand(u,d,[],s)}if(e==="shopt")return N;if(e==="exec"){if(n.length===0)return N;let[u,...d]=n;return this.runCommand(u,d,[],s)}if(e==="wait")return N;if(e==="type")return this.handleType(n);if(e==="[["){let u=n.lastIndexOf("]]");if(u!==-1){let d=n.slice(0,u);return $e(this.ctx,d)}return S("bash: [[: missing `]]'\n",2)}if(e==="["||e==="test"){let u=n;if(e==="["){if(n[n.length-1]!=="]")return S("[: missing `]'\n",2);u=n.slice(0,-1)}return $e(this.ctx,u)}let i=await this.resolveCommand(e);if(!i)return Nr(e)?S(`bash: ${e}: command not available in browser environments. Exclude '${e}' from your commands or use the Node.js bundle.
132
+ `)}}let s=await P(this.ctx,e.name),o=[],i=[];for(let l of e.args){let c=await Le(this.ctx,l);for(let u of c.values)o.push(u),i.push(c.quoted)}if(!s){if(e.name.parts.every(c=>c.type==="CommandSubstitution"||c.type==="ParameterExpansion"||c.type==="ArithmeticExpansion")){if(o.length>0){let c=o.shift();return i.shift(),await this.runCommand(c,o,i,n)}return x("","",this.ctx.state.lastExitCode)}return S(`bash: : command not found
133
+ `,127)}let a=await this.runCommand(s,o,i,n);a=await Tn(this.ctx,a,e.redirections),this.ctx.state.lastArg=o.length>0?o[o.length-1]:s;for(let[l,c]of Object.entries(r))c===void 0?delete this.ctx.state.env[l]:this.ctx.state.env[l]=c;return this.ctx.state.expansionStderr&&(a={...a,stderr:this.ctx.state.expansionStderr+a.stderr},this.ctx.state.expansionStderr=""),a}async runCommand(e,n,r,s,o=!1){if(e==="cd")return await Gt(this.ctx,n);if(e==="export")return Kt(this.ctx,n);if(e==="unset")return or(this.ctx,n);if(e==="exit")return Qt(this.ctx,n);if(e==="local")return Yt(this.ctx,n);if(e==="set")return nr(this.ctx,n);if(e==="break")return Ut(this.ctx,n);if(e==="continue")return Ht(this.ctx,n);if(e==="return")return tr(this.ctx,n);if(e==="eval")return Zt(this.ctx,n);if(e==="shift")return sr(this.ctx,n);if(e==="source"||e===".")return ir(this.ctx,n);if(e==="read")return er(this.ctx,n,s);if(e==="mapfile"||e==="readarray")return Jt(this.ctx,n,s);if(e==="declare"||e==="typeset")return jt(this.ctx,n);if(e==="readonly")return qt(this.ctx,n);if(!o){let u=this.ctx.state.functions.get(e);if(u)return Ln(this.ctx,u,n)}if(e===":"||e==="true")return N;if(e==="false")return O(!1);if(e==="let")return Xt(this.ctx,n);if(e==="command"){if(n.length===0)return N;let u=n;for(;u.length>0&&u[0].startsWith("-");)u=u.slice(1);if(u.length===0)return N;let[d,...h]=u;return this.runCommand(d,h,[],s,!0)}if(e==="builtin"){if(n.length===0)return N;let[u,...d]=n;return this.runCommand(u,d,[],s)}if(e==="shopt")return N;if(e==="exec"){if(n.length===0)return N;let[u,...d]=n;return this.runCommand(u,d,[],s)}if(e==="wait")return N;if(e==="type")return this.handleType(n);if(e==="[["){let u=n.lastIndexOf("]]");if(u!==-1){let d=n.slice(0,u);return $e(this.ctx,d)}return S("bash: [[: missing `]]'\n",2)}if(e==="["||e==="test"){let u=n;if(e==="["){if(n[n.length-1]!=="]")return S("[: missing `]'\n",2);u=n.slice(0,-1)}return $e(this.ctx,u)}let i=await this.resolveCommand(e);if(!i)return Cr(e)?S(`bash: ${e}: command not available in browser environments. Exclude '${e}' from your commands or use the Node.js bundle.
134
134
  `,127):S(`bash: ${e}: command not found
135
135
  `,127);let{cmd:a,path:l}=i,c={fs:this.ctx.fs,cwd:this.ctx.state.cwd,env:this.ctx.state.env,stdin:s,limits:this.ctx.limits,exec:this.ctx.execFn,fetch:this.ctx.fetch,getRegisteredCommands:()=>Array.from(this.ctx.commands.keys()),sleep:this.ctx.sleep};try{return await a.execute(n,c)}catch(u){return S(`${e}: ${Y(u)}
136
136
  `)}}async resolveCommand(e){if(e.includes("/")){let o=this.ctx.fs.resolvePath(this.ctx.state.cwd,e);if(!await this.ctx.fs.exists(o))return null;let i=o.split("/").pop()||e,a=this.ctx.commands.get(i);return a?{cmd:a,path:o}:null}let r=(this.ctx.state.env.PATH||"/bin:/usr/bin").split(":");for(let o of r){if(!o)continue;let i=`${o}/${e}`;if(await this.ctx.fs.exists(i)){let a=this.ctx.commands.get(e);if(a)return{cmd:a,path:i}}}if(!await this.ctx.fs.exists("/bin")){let o=this.ctx.commands.get(e);if(o)return{cmd:o,path:`/bin/${e}`}}return null}async findCommandInPath(e){let n=[],s=(this.ctx.state.env.PATH||"/bin:/usr/bin").split(":");for(let o of s){if(!o)continue;let i=`${o}/${e}`;await this.ctx.fs.exists(i)&&n.push(i)}return n}handleType(e){let n=new Set(["if","then","else","elif","fi","case","esac","for","select","while","until","do","done","in","function","{","}","time","[[","]]","!"]),r=new Set(["cd","export","unset","exit","local","set","break","continue","return","eval","shift","source",".","read","declare","typeset","readonly",":","true","false","let","command","builtin","shopt","exec","wait","type","[","test"]),s="",o="",i=0;for(let a of e)n.has(a)?s+=`${a} is a shell keyword
@@ -139,18 +139,18 @@ ${tt}`):(nr(t,e.slice(n)),N)}return N}function nr(t,e){let n=1;for(;t.state.env[
139
139
  `:this.ctx.commands.has(a)?s+=`${a} is /bin/${a}
140
140
  `:(o+=`bash: type: ${a}: not found
141
141
  `,i=1);return x(s,o,i)}async executeSubshell(e,n=""){let r={...this.ctx.state.env},s=this.ctx.state.cwd,o=this.ctx.state.loopDepth,i=this.ctx.state.parentHasLoopContext;this.ctx.state.parentHasLoopContext=o>0,this.ctx.state.loopDepth=0;let a=this.ctx.state.groupStdin;n&&(this.ctx.state.groupStdin=n);let l="",c="",u=0;try{for(let d of e.body){let h=await this.executeStatement(d);l+=h.stdout,c+=h.stderr,u=h.exitCode}}catch(d){if(this.ctx.state.env=r,this.ctx.state.cwd=s,this.ctx.state.loopDepth=o,this.ctx.state.parentHasLoopContext=i,this.ctx.state.groupStdin=a,d instanceof z)throw d;if(d instanceof oe)return l+=d.stdout,c+=d.stderr,x(l,c,0);if(d instanceof U||d instanceof X)return l+=d.stdout,c+=d.stderr,x(l,c,0);if(d instanceof R)return l+=d.stdout,c+=d.stderr,x(l,c,d.exitCode);if(d instanceof G)return l+=d.stdout,c+=d.stderr,x(l,c,d.exitCode);if(d instanceof ee)throw d.stdout=l+d.stdout,d.stderr=c+d.stderr,d;return x(l,`${c}${Y(d)}
142
- `,1)}return this.ctx.state.env=r,this.ctx.state.cwd=s,this.ctx.state.loopDepth=o,this.ctx.state.parentHasLoopContext=i,this.ctx.state.groupStdin=a,x(l,c,u)}async executeGroup(e,n=""){let r="",s="",o=0,i=this.ctx.state.groupStdin;n&&(this.ctx.state.groupStdin=n);try{for(let a of e.body){let l=await this.executeStatement(a);r+=l.stdout,s+=l.stderr,o=l.exitCode}}catch(a){if(this.ctx.state.groupStdin=i,a instanceof z)throw a;if(Be(a)||a instanceof ee||a instanceof R)throw a.prependOutput(r,s),a;return x(r,`${s}${Y(a)}
142
+ `,1)}return this.ctx.state.env=r,this.ctx.state.cwd=s,this.ctx.state.loopDepth=o,this.ctx.state.parentHasLoopContext=i,this.ctx.state.groupStdin=a,x(l,c,u)}async executeGroup(e,n=""){let r="",s="",o=0,i=this.ctx.state.groupStdin;n&&(this.ctx.state.groupStdin=n);try{for(let a of e.body){let l=await this.executeStatement(a);r+=l.stdout,s+=l.stderr,o=l.exitCode}}catch(a){if(this.ctx.state.groupStdin=i,a instanceof z)throw a;if(ze(a)||a instanceof ee||a instanceof R)throw a.prependOutput(r,s),a;return x(r,`${s}${Y(a)}
143
143
  `,1)}return this.ctx.state.groupStdin=i,x(r,s,o)}async executeArithmeticCommand(e){try{let n=await v(this.ctx,e.expression.expression);return O(n!==0)}catch(n){return S(`bash: arithmetic expression: ${n.message}
144
144
  `)}}async executeConditionalCommand(e){try{let n=await de(this.ctx,e.expression);return O(n)}catch(n){return S(`bash: conditional expression: ${n.message}
145
- `,2)}}};var he={maxCallDepth:100,maxCommandCount:1e4,maxLoopIterations:1e4,maxAwkIterations:1e4,maxSedIterations:1e4,maxJqIterations:1e4,maxSqliteTimeoutMs:5e3};function Fn(t){return t?{maxCallDepth:t.maxCallDepth??he.maxCallDepth,maxCommandCount:t.maxCommandCount??he.maxCommandCount,maxLoopIterations:t.maxLoopIterations??he.maxLoopIterations,maxAwkIterations:t.maxAwkIterations??he.maxAwkIterations,maxSedIterations:t.maxSedIterations??he.maxSedIterations,maxJqIterations:t.maxJqIterations??he.maxJqIterations,maxSqliteTimeoutMs:t.maxSqliteTimeoutMs??he.maxSqliteTimeoutMs}:{...he}}function Mn(t){try{let e=new URL(t);return{origin:e.origin,pathname:e.pathname,href:e.href}}catch{return null}}function Js(t){let e=Mn(t);return e?{origin:e.origin,pathPrefix:e.pathname}:null}function ei(t,e){let n=Mn(t);if(!n)return!1;let r=Js(e);return!r||n.origin!==r.origin?!1:r.pathPrefix==="/"||r.pathPrefix===""?!0:n.pathname.startsWith(r.pathPrefix)}function dr(t,e){return!e||e.length===0?!1:e.some(n=>ei(t,n))}var We=class extends Error{constructor(e){super(`Network access denied: URL not in allow-list: ${e}`),this.name="NetworkAccessDeniedError"}},Fe=class extends Error{constructor(e){super(`Too many redirects (max: ${e})`),this.name="TooManyRedirectsError"}},Me=class extends Error{constructor(e){super(`Redirect target not in allow-list: ${e}`),this.name="RedirectNotAllowedError"}},yt=class extends Error{constructor(e,n){super(`HTTP method '${e}' not allowed. Allowed methods: ${n.join(", ")}`),this.name="MethodNotAllowedError"}};var ti=20,ri=3e4,ni=["GET","HEAD"],si=new Set(["GET","HEAD","OPTIONS"]),ii=new Set([301,302,303,307,308]);function hr(t){let e=t.maxRedirects??ti,n=t.timeoutMs??ri,r=t.dangerouslyAllowFullInternetAccess?["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"]:t.allowedMethods??ni;function s(a){if(!t.dangerouslyAllowFullInternetAccess&&!dr(a,t.allowedUrlPrefixes??[]))throw new We(a)}function o(a){if(t.dangerouslyAllowFullInternetAccess)return;let l=a.toUpperCase();if(!r.includes(l))throw new yt(l,r)}async function i(a,l={}){let c=l.method?.toUpperCase()??"GET";s(a),o(c);let u=a,d=0,h=l.followRedirects??!0,m=l.timeoutMs!==void 0?Math.min(l.timeoutMs,n):n;for(;;){let y=new AbortController,w=setTimeout(()=>y.abort(),m);try{let p={method:c,headers:l.headers,signal:y.signal,redirect:"manual"};l.body&&!si.has(c)&&(p.body=l.body);let E=await fetch(u,p);if(ii.has(E.status)&&h){let g=E.headers.get("location");if(!g)return await Bn(E,u);let b=new URL(g,u).href;if(!t.dangerouslyAllowFullInternetAccess&&!dr(b,t.allowedUrlPrefixes??[]))throw new Me(b);if(d++,d>e)throw new Fe(e);u=b;continue}return await Bn(E,u)}finally{clearTimeout(w)}}}return i}async function Bn(t,e){let n={};return t.headers.forEach((r,s)=>{n[s.toLowerCase()]=r}),{status:t.status,statusText:t.statusText,headers:n,body:await t.text(),url:e}}var Et=class{fs;commands=new Map;useDefaultLayout=!1;limits;secureFetch;sleepFn;logger;state;constructor(e={}){let n=e.fs??new Pe(e.files);this.fs=n,this.useDefaultLayout=!e.cwd&&!e.files;let r=e.cwd||(this.useDefaultLayout?"/home/user":"/"),s={HOME:this.useDefaultLayout?"/home/user":"/",PATH:"/bin:/usr/bin",IFS:`
146
- `,OSTYPE:"linux-gnu",MACHTYPE:"x86_64-pc-linux-gnu",HOSTTYPE:"x86_64",PWD:r,OLDPWD:r,...e.env};if(this.limits=Fn({...e.executionLimits,...e.maxCallDepth!==void 0&&{maxCallDepth:e.maxCallDepth},...e.maxCommandCount!==void 0&&{maxCommandCount:e.maxCommandCount},...e.maxLoopIterations!==void 0&&{maxLoopIterations:e.maxLoopIterations}}),e.network&&(this.secureFetch=hr(e.network)),this.sleepFn=e.sleep,this.logger=e.logger,this.state={env:s,cwd:r,previousDir:"/home/user",functions:new Map,localScopes:[],callDepth:0,sourceDepth:0,commandCount:0,lastExitCode:0,lastArg:"",startTime:Date.now(),lastBackgroundPid:0,currentLine:1,options:{errexit:!1,pipefail:!1,nounset:!1,xtrace:!1,verbose:!1},inCondition:!1,loopDepth:0},Cr(n,this.useDefaultLayout),r!=="/"&&n instanceof Pe)try{n.mkdirSync(r,{recursive:!0})}catch{}for(let o of yr(e.commands))this.registerCommand(o);if(e.network)for(let o of Er())this.registerCommand(o);if(e.sqlite)for(let o of wr())this.registerCommand(o);if(e.customCommands)for(let o of e.customCommands)gr(o)?this.registerCommand(Ar(o)):this.registerCommand(o)}registerCommand(e){this.commands.set(e.name,e);let n=this.fs;if(typeof n.writeFileSync=="function")try{n.writeFileSync(`/bin/${e.name}`,`#!/bin/bash
145
+ `,2)}}};var he={maxCallDepth:100,maxCommandCount:1e4,maxLoopIterations:1e4,maxAwkIterations:1e4,maxSedIterations:1e4,maxJqIterations:1e4,maxSqliteTimeoutMs:5e3};function Wn(t){return t?{maxCallDepth:t.maxCallDepth??he.maxCallDepth,maxCommandCount:t.maxCommandCount??he.maxCommandCount,maxLoopIterations:t.maxLoopIterations??he.maxLoopIterations,maxAwkIterations:t.maxAwkIterations??he.maxAwkIterations,maxSedIterations:t.maxSedIterations??he.maxSedIterations,maxJqIterations:t.maxJqIterations??he.maxJqIterations,maxSqliteTimeoutMs:t.maxSqliteTimeoutMs??he.maxSqliteTimeoutMs}:{...he}}function Fn(t){try{let e=new URL(t);return{origin:e.origin,pathname:e.pathname,href:e.href}}catch{return null}}function Xs(t){let e=Fn(t);return e?{origin:e.origin,pathPrefix:e.pathname}:null}function Ys(t,e){let n=Fn(t);if(!n)return!1;let r=Xs(e);return!r||n.origin!==r.origin?!1:r.pathPrefix==="/"||r.pathPrefix===""?!0:n.pathname.startsWith(r.pathPrefix)}function fr(t,e){return!e||e.length===0?!1:e.some(n=>Ys(t,n))}var Fe=class extends Error{constructor(e){super(`Network access denied: URL not in allow-list: ${e}`),this.name="NetworkAccessDeniedError"}},Me=class extends Error{constructor(e){super(`Too many redirects (max: ${e})`),this.name="TooManyRedirectsError"}},Be=class extends Error{constructor(e){super(`Redirect target not in allow-list: ${e}`),this.name="RedirectNotAllowedError"}},yt=class extends Error{constructor(e,n){super(`HTTP method '${e}' not allowed. Allowed methods: ${n.join(", ")}`),this.name="MethodNotAllowedError"}};var Js=20,ei=3e4,ti=["GET","HEAD"],ri=new Set(["GET","HEAD","OPTIONS"]),ni=new Set([301,302,303,307,308]);function dr(t){let e=t.maxRedirects??Js,n=t.timeoutMs??ei,r=t.dangerouslyAllowFullInternetAccess?["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"]:t.allowedMethods??ti;function s(a){if(!t.dangerouslyAllowFullInternetAccess&&!fr(a,t.allowedUrlPrefixes??[]))throw new Fe(a)}function o(a){if(t.dangerouslyAllowFullInternetAccess)return;let l=a.toUpperCase();if(!r.includes(l))throw new yt(l,r)}async function i(a,l={}){let c=l.method?.toUpperCase()??"GET";s(a),o(c);let u=a,d=0,h=l.followRedirects??!0,m=l.timeoutMs!==void 0?Math.min(l.timeoutMs,n):n;for(;;){let y=new AbortController,w=setTimeout(()=>y.abort(),m);try{let p={method:c,headers:l.headers,signal:y.signal,redirect:"manual"};l.body&&!ri.has(c)&&(p.body=l.body);let E=await fetch(u,p);if(ni.has(E.status)&&h){let g=E.headers.get("location");if(!g)return await Mn(E,u);let b=new URL(g,u).href;if(!t.dangerouslyAllowFullInternetAccess&&!fr(b,t.allowedUrlPrefixes??[]))throw new Be(b);if(d++,d>e)throw new Me(e);u=b;continue}return await Mn(E,u)}finally{clearTimeout(w)}}}return i}async function Mn(t,e){let n={};return t.headers.forEach((r,s)=>{n[s.toLowerCase()]=r}),{status:t.status,statusText:t.statusText,headers:n,body:await t.text(),url:e}}var Et=class{fs;commands=new Map;useDefaultLayout=!1;limits;secureFetch;sleepFn;logger;state;constructor(e={}){let n=e.fs??new Ie(e.files);this.fs=n,this.useDefaultLayout=!e.cwd&&!e.files;let r=e.cwd||(this.useDefaultLayout?"/home/user":"/"),s={HOME:this.useDefaultLayout?"/home/user":"/",PATH:"/bin:/usr/bin",IFS:`
146
+ `,OSTYPE:"linux-gnu",MACHTYPE:"x86_64-pc-linux-gnu",HOSTTYPE:"x86_64",PWD:r,OLDPWD:r,...e.env};if(this.limits=Wn({...e.executionLimits,...e.maxCallDepth!==void 0&&{maxCallDepth:e.maxCallDepth},...e.maxCommandCount!==void 0&&{maxCommandCount:e.maxCommandCount},...e.maxLoopIterations!==void 0&&{maxLoopIterations:e.maxLoopIterations}}),e.network&&(this.secureFetch=dr(e.network)),this.sleepFn=e.sleep,this.logger=e.logger,this.state={env:s,cwd:r,previousDir:"/home/user",functions:new Map,localScopes:[],callDepth:0,sourceDepth:0,commandCount:0,lastExitCode:0,lastArg:"",startTime:Date.now(),lastBackgroundPid:0,currentLine:1,options:{errexit:!1,pipefail:!1,nounset:!1,xtrace:!1,verbose:!1},inCondition:!1,loopDepth:0},br(n,this.useDefaultLayout),r!=="/"&&n instanceof Ie)try{n.mkdirSync(r,{recursive:!0})}catch{}for(let o of yr(e.commands))this.registerCommand(o);if(e.network)for(let o of Er())this.registerCommand(o);if(e.customCommands)for(let o of e.customCommands)wr(o)?this.registerCommand(gr(o)):this.registerCommand(o)}registerCommand(e){this.commands.set(e.name,e);let n=this.fs;if(typeof n.writeFileSync=="function")try{n.writeFileSync(`/bin/${e.name}`,`#!/bin/bash
147
147
  # Built-in command: ${e.name}
148
148
  `)}catch{}}logResult(e){return this.logger&&(e.stdout&&this.logger.debug("stdout",{output:e.stdout}),e.stderr&&this.logger.info("stderr",{output:e.stderr}),this.logger.info("exit",{exitCode:e.exitCode})),e}async exec(e,n){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.
149
149
  `,exitCode:1,env:{...this.state.env,...n?.env}};if(!e.trim())return{stdout:"",stderr:"",exitCode:0,env:{...this.state.env,...n?.env}};this.logger?.info("exec",{command:e});let r=n?.cwd??this.state.cwd,s={...this.state,env:{...this.state.env,...n?.env,...n?.cwd?{PWD:n.cwd}:{}},cwd:r,functions:new Map(this.state.functions),localScopes:[...this.state.localScopes],options:{...this.state.options}},o=e;n?.rawScript||(o=e.split(`
150
150
  `).map(a=>a.trimStart()).join(`
151
- `));try{let i=le(o),a={fs:this.fs,commands:this.commands,limits:this.limits,exec:this.exec.bind(this),fetch:this.secureFetch,sleep:this.sleepFn},c=await new Te(a,s).executeScript(i);return this.logResult(c)}catch(i){if(i instanceof R)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode,env:{...this.state.env,...n?.env}});if(i instanceof F)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:1,env:{...this.state.env,...n?.env}});if(i instanceof z)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:z.EXIT_CODE,env:{...this.state.env,...n?.env}});if(i.name==="ParseException")return this.logResult({stdout:"",stderr:`bash: syntax error: ${i.message}
151
+ `));try{let i=le(o),a={fs:this.fs,commands:this.commands,limits:this.limits,exec:this.exec.bind(this),fetch:this.secureFetch,sleep:this.sleepFn},c=await new We(a,s).executeScript(i);return this.logResult(c)}catch(i){if(i instanceof R)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode,env:{...this.state.env,...n?.env}});if(i instanceof F)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:1,env:{...this.state.env,...n?.env}});if(i instanceof z)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:z.EXIT_CODE,env:{...this.state.env,...n?.env}});if(i.name==="ParseException")return this.logResult({stdout:"",stderr:`bash: syntax error: ${i.message}
152
152
  `,exitCode:2,env:{...this.state.env,...n?.env}});if(i instanceof RangeError)return this.logResult({stdout:"",stderr:`bash: ${i.message}
153
- `,exitCode:1,env:{...this.state.env,...n?.env}});throw i}}async readFile(e){return this.fs.readFile(this.fs.resolvePath(this.state.cwd,e))}async writeFile(e,n){return this.fs.writeFile(this.fs.resolvePath(this.state.cwd,e),n)}getCwd(){return this.state.cwd}getEnv(){return{...this.state.env}}};import*as B from"node:fs";import*as ve from"node:path";var oi="/home/user/project",wt=class{root;mountPoint;readOnly;memory=new Map;deleted=new Set;constructor(e){this.root=ve.resolve(e.root);let n=e.mountPoint??oi;if(this.mountPoint=n==="/"?"/":n.replace(/\/+$/,""),!this.mountPoint.startsWith("/"))throw new Error(`Mount point must be an absolute path: ${n}`);if(this.readOnly=e.readOnly??!1,!B.existsSync(this.root))throw new Error(`OverlayFs root does not exist: ${this.root}`);if(!B.statSync(this.root).isDirectory())throw new Error(`OverlayFs root is not a directory: ${this.root}`);this.createMountPointDirs()}assertWritable(e){if(this.readOnly)throw new Error(`EROFS: read-only file system, ${e}`)}createMountPointDirs(){let e=this.mountPoint.split("/").filter(Boolean),n="";for(let r of e)n+=`/${r}`,this.memory.has(n)||this.memory.set(n,{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(e,n){let s=this.normalizePath(e).split("/").filter(Boolean),o="";for(let i of s)o+=`/${i}`,this.memory.has(o)||this.memory.set(o,{type:"directory",mode:493,mtime:new Date})}writeFileSync(e,n){let r=this.normalizePath(e),s=this.getDirname(r);s!=="/"&&this.mkdirSync(s);let o=n instanceof Uint8Array?n:new TextEncoder().encode(n);this.memory.set(r,{type:"file",content:o,mode:420,mtime:new Date})}getDirname(e){let n=e.lastIndexOf("/");return n===0?"/":e.slice(0,n)}normalizePath(e){if(!e||e==="/")return"/";let n=e.endsWith("/")&&e!=="/"?e.slice(0,-1):e;n.startsWith("/")||(n=`/${n}`);let r=n.split("/").filter(o=>o&&o!=="."),s=[];for(let o of r)o===".."?s.pop():s.push(o);return`/${s.join("/")}`||"/"}getRelativeToMount(e){return this.mountPoint==="/"?e:e===this.mountPoint?"/":e.startsWith(`${this.mountPoint}/`)?e.slice(this.mountPoint.length):null}toRealPath(e){let n=this.normalizePath(e),r=this.getRelativeToMount(n);if(r===null)return null;let s=ve.join(this.root,r),o=ve.resolve(s);return!o.startsWith(this.root)&&o!==this.root.replace(/\/$/,"")?null:o}dirname(e){let n=this.normalizePath(e);if(n==="/")return"/";let r=n.lastIndexOf("/");return r===0?"/":n.slice(0,r)}ensureParentDirs(e){let n=this.dirname(e);n!=="/"&&(this.memory.has(n)||(this.ensureParentDirs(n),this.memory.set(n,{type:"directory",mode:493,mtime:new Date})),this.deleted.delete(n))}async existsInOverlay(e){let n=this.normalizePath(e);if(this.deleted.has(n))return!1;if(this.memory.has(n))return!0;let r=this.toRealPath(n);if(!r)return!1;try{return await B.promises.access(r),!0}catch{return!1}}async readFile(e,n){let r=await this.readFileBuffer(e),s=ae(n);return Ue(r,s)}async readFileBuffer(e,n=new Set){let r=this.normalizePath(e);if(n.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${e}'`);if(n.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, open '${e}'`);let s=this.memory.get(r);if(s){if(s.type==="symlink"){let i=this.resolveSymlink(r,s.target);return this.readFileBuffer(i,n)}if(s.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);return s.content}let o=this.toRealPath(r);if(!o)throw new Error(`ENOENT: no such file or directory, open '${e}'`);try{let i=await B.promises.lstat(o);if(i.isSymbolicLink()){let l=await B.promises.readlink(o),c=this.resolveSymlink(r,l);return this.readFileBuffer(c,n)}if(i.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);let a=await B.promises.readFile(o);return new Uint8Array(a)}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, open '${e}'`):i}}async writeFile(e,n,r){this.assertWritable(`write '${e}'`);let s=this.normalizePath(e);this.ensureParentDirs(s);let o=ae(r),i=Ae(n,o);this.memory.set(s,{type:"file",content:i,mode:420,mtime:new Date}),this.deleted.delete(s)}async appendFile(e,n,r){this.assertWritable(`append '${e}'`);let s=this.normalizePath(e),o=ae(r),i=Ae(n,o),a;try{a=await this.readFileBuffer(s)}catch{a=new Uint8Array(0)}let l=new Uint8Array(a.length+i.length);l.set(a),l.set(i,a.length),this.ensureParentDirs(s),this.memory.set(s,{type:"file",content:l,mode:420,mtime:new Date}),this.deleted.delete(s)}async exists(e){return this.existsInOverlay(e)}async stat(e,n=new Set){let r=this.normalizePath(e);if(n.has(r))throw new Error(`ELOOP: too many levels of symbolic links, stat '${e}'`);if(n.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, stat '${e}'`);let s=this.memory.get(r);if(s){if(s.type==="symlink"){let a=this.resolveSymlink(r,s.target);return this.stat(a,n)}let i=0;return s.type==="file"&&(i=s.content.length),{isFile:s.type==="file",isDirectory:s.type==="directory",isSymbolicLink:!1,mode:s.mode,size:i,mtime:s.mtime}}let o=this.toRealPath(r);if(!o)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);try{let i=await B.promises.stat(o);return{isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:!1,mode:i.mode,size:i.size,mtime:i.mtime}}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, stat '${e}'`):i}}async lstat(e){let n=this.normalizePath(e);if(this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);let r=this.memory.get(n);if(r){if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime};let o=0;return r.type==="file"&&(o=r.content.length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:o,mtime:r.mtime}}let s=this.toRealPath(n);if(!s)throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);try{let o=await B.promises.lstat(s);return{isFile:o.isFile(),isDirectory:o.isDirectory(),isSymbolicLink:o.isSymbolicLink(),mode:o.mode,size:o.size,mtime:o.mtime}}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, lstat '${e}'`):o}}resolveSymlink(e,n){if(n.startsWith("/"))return this.normalizePath(n);let r=this.dirname(e);return this.normalizePath(r==="/"?`/${n}`:`${r}/${n}`)}async mkdir(e,n){this.assertWritable(`mkdir '${e}'`);let r=this.normalizePath(e);if(await this.existsInOverlay(r)){if(!n?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${e}'`);return}let o=this.dirname(r);if(o!=="/"&&!await this.existsInOverlay(o))if(n?.recursive)await this.mkdir(o,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.memory.set(r,{type:"directory",mode:493,mtime:new Date}),this.deleted.delete(r)}async readdir(e){let n=this.normalizePath(e);if(this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, scandir '${e}'`);let r=new Set,s=new Set,o=n==="/"?"/":`${n}/`;for(let a of this.deleted)if(a.startsWith(o)){let l=a.slice(o.length),c=l.split("/")[0];c&&!l.includes("/",c.length)&&s.add(c)}for(let a of this.memory.keys())if(a!==n&&a.startsWith(o)){let c=a.slice(o.length).split("/")[0];c&&!s.has(c)&&r.add(c)}let i=this.toRealPath(n);if(i)try{let a=await B.promises.readdir(i);for(let l of a)s.has(l)||r.add(l)}catch(a){if(a.code==="ENOENT"){if(!this.memory.has(n))throw new Error(`ENOENT: no such file or directory, scandir '${e}'`)}else if(a.code!=="ENOTDIR")throw a}return Array.from(r).sort()}async rm(e,n){this.assertWritable(`rm '${e}'`);let r=this.normalizePath(e);if(!await this.existsInOverlay(r)){if(n?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${e}'`)}try{if((await this.stat(r)).isDirectory){let i=await this.readdir(r);if(i.length>0){if(!n?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${e}'`);for(let a of i){let l=r==="/"?`/${a}`:`${r}/${a}`;await this.rm(l,n)}}}}catch{}this.deleted.add(r),this.memory.delete(r)}async cp(e,n,r){this.assertWritable(`cp '${n}'`);let s=this.normalizePath(e),o=this.normalizePath(n);if(!await this.existsInOverlay(s))throw new Error(`ENOENT: no such file or directory, cp '${e}'`);let a=await this.stat(s);if(a.isFile){let l=await this.readFileBuffer(s);await this.writeFile(o,l)}else if(a.isDirectory){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${e}'`);await this.mkdir(o,{recursive:!0});let l=await this.readdir(s);for(let c of l){let u=s==="/"?`/${c}`:`${s}/${c}`,d=o==="/"?`/${c}`:`${o}/${c}`;await this.cp(u,d,r)}}}async mv(e,n){this.assertWritable(`mv '${n}'`),await this.cp(e,n,{recursive:!0}),await this.rm(e,{recursive:!0})}resolvePath(e,n){if(n.startsWith("/"))return this.normalizePath(n);let r=e==="/"?`/${n}`:`${e}/${n}`;return this.normalizePath(r)}getAllPaths(){let e=new Set(this.memory.keys());for(let n of this.deleted)e.delete(n);return this.scanRealFs("/",e),Array.from(e)}scanRealFs(e,n){if(this.deleted.has(e))return;let r=this.toRealPath(e);if(r)try{let s=B.readdirSync(r);for(let o of s){let i=e==="/"?`/${o}`:`${e}/${o}`;if(this.deleted.has(i))continue;n.add(i);let a=ve.join(r,o);B.statSync(a).isDirectory()&&this.scanRealFs(i,n)}}catch{}}async chmod(e,n){this.assertWritable(`chmod '${e}'`);let r=this.normalizePath(e);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, chmod '${e}'`);let o=this.memory.get(r);if(o){o.mode=n;return}let i=await this.stat(r);if(i.isFile){let a=await this.readFileBuffer(r);this.memory.set(r,{type:"file",content:a,mode:n,mtime:new Date})}else i.isDirectory&&this.memory.set(r,{type:"directory",mode:n,mtime:new Date})}async symlink(e,n){this.assertWritable(`symlink '${n}'`);let r=this.normalizePath(n);if(await this.existsInOverlay(r))throw new Error(`EEXIST: file already exists, symlink '${n}'`);this.ensureParentDirs(r),this.memory.set(r,{type:"symlink",target:e,mode:511,mtime:new Date}),this.deleted.delete(r)}async link(e,n){this.assertWritable(`link '${n}'`);let r=this.normalizePath(e),s=this.normalizePath(n);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, link '${e}'`);let i=await this.stat(r);if(!i.isFile)throw new Error(`EPERM: operation not permitted, link '${e}'`);if(await this.existsInOverlay(s))throw new Error(`EEXIST: file already exists, link '${n}'`);let l=await this.readFileBuffer(r);this.ensureParentDirs(s),this.memory.set(s,{type:"file",content:l,mode:i.mode,mtime:new Date}),this.deleted.delete(s)}async readlink(e){let n=this.normalizePath(e);if(this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);let r=this.memory.get(n);if(r){if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${e}'`);return r.target}let s=this.toRealPath(n);if(!s)throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);try{return await B.promises.readlink(s)}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, readlink '${e}'`):o.code==="EINVAL"?new Error(`EINVAL: invalid argument, readlink '${e}'`):o}}};var W={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",cyan:"\x1B[36m"},mr=class{env;rl;running=!0;history=[];isInteractive;constructor(e={}){let n=process.cwd(),r=new wt({root:n,mountPoint:"/"});this.env=new Et({fs:r,cwd:e.cwd||"/",env:{HOME:"/",USER:"user",SHELL:"/bin/bash",TERM:"xterm-256color",...e.env},network:e.network!==!1?{dangerouslyAllowFullInternetAccess:!0}:void 0}),this.isInteractive=process.stdin.isTTY===!0,this.rl=Un.createInterface({input:process.stdin,output:process.stdout,terminal:this.isInteractive}),this.rl.on("SIGINT",()=>{process.stdout.write(`^C
153
+ `,exitCode:1,env:{...this.state.env,...n?.env}});throw i}}async readFile(e){return this.fs.readFile(this.fs.resolvePath(this.state.cwd,e))}async writeFile(e,n){return this.fs.writeFile(this.fs.resolvePath(this.state.cwd,e),n)}getCwd(){return this.state.cwd}getEnv(){return{...this.state.env}}};import*as B from"node:fs";import*as ve from"node:path";var si="/home/user/project",wt=class{root;mountPoint;readOnly;memory=new Map;deleted=new Set;constructor(e){this.root=ve.resolve(e.root);let n=e.mountPoint??si;if(this.mountPoint=n==="/"?"/":n.replace(/\/+$/,""),!this.mountPoint.startsWith("/"))throw new Error(`Mount point must be an absolute path: ${n}`);if(this.readOnly=e.readOnly??!1,!B.existsSync(this.root))throw new Error(`OverlayFs root does not exist: ${this.root}`);if(!B.statSync(this.root).isDirectory())throw new Error(`OverlayFs root is not a directory: ${this.root}`);this.createMountPointDirs()}assertWritable(e){if(this.readOnly)throw new Error(`EROFS: read-only file system, ${e}`)}createMountPointDirs(){let e=this.mountPoint.split("/").filter(Boolean),n="";for(let r of e)n+=`/${r}`,this.memory.has(n)||this.memory.set(n,{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(e,n){let s=this.normalizePath(e).split("/").filter(Boolean),o="";for(let i of s)o+=`/${i}`,this.memory.has(o)||this.memory.set(o,{type:"directory",mode:493,mtime:new Date})}writeFileSync(e,n){let r=this.normalizePath(e),s=this.getDirname(r);s!=="/"&&this.mkdirSync(s);let o=n instanceof Uint8Array?n:new TextEncoder().encode(n);this.memory.set(r,{type:"file",content:o,mode:420,mtime:new Date})}getDirname(e){let n=e.lastIndexOf("/");return n===0?"/":e.slice(0,n)}normalizePath(e){if(!e||e==="/")return"/";let n=e.endsWith("/")&&e!=="/"?e.slice(0,-1):e;n.startsWith("/")||(n=`/${n}`);let r=n.split("/").filter(o=>o&&o!=="."),s=[];for(let o of r)o===".."?s.pop():s.push(o);return`/${s.join("/")}`||"/"}getRelativeToMount(e){return this.mountPoint==="/"?e:e===this.mountPoint?"/":e.startsWith(`${this.mountPoint}/`)?e.slice(this.mountPoint.length):null}toRealPath(e){let n=this.normalizePath(e),r=this.getRelativeToMount(n);if(r===null)return null;let s=ve.join(this.root,r),o=ve.resolve(s);return!o.startsWith(this.root)&&o!==this.root.replace(/\/$/,"")?null:o}dirname(e){let n=this.normalizePath(e);if(n==="/")return"/";let r=n.lastIndexOf("/");return r===0?"/":n.slice(0,r)}ensureParentDirs(e){let n=this.dirname(e);n!=="/"&&(this.memory.has(n)||(this.ensureParentDirs(n),this.memory.set(n,{type:"directory",mode:493,mtime:new Date})),this.deleted.delete(n))}async existsInOverlay(e){let n=this.normalizePath(e);if(this.deleted.has(n))return!1;if(this.memory.has(n))return!0;let r=this.toRealPath(n);if(!r)return!1;try{return await B.promises.access(r),!0}catch{return!1}}async readFile(e,n){let r=await this.readFileBuffer(e),s=ae(n);return Ue(r,s)}async readFileBuffer(e,n=new Set){let r=this.normalizePath(e);if(n.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${e}'`);if(n.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, open '${e}'`);let s=this.memory.get(r);if(s){if(s.type==="symlink"){let i=this.resolveSymlink(r,s.target);return this.readFileBuffer(i,n)}if(s.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);return s.content}let o=this.toRealPath(r);if(!o)throw new Error(`ENOENT: no such file or directory, open '${e}'`);try{let i=await B.promises.lstat(o);if(i.isSymbolicLink()){let l=await B.promises.readlink(o),c=this.resolveSymlink(r,l);return this.readFileBuffer(c,n)}if(i.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);let a=await B.promises.readFile(o);return new Uint8Array(a)}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, open '${e}'`):i}}async writeFile(e,n,r){this.assertWritable(`write '${e}'`);let s=this.normalizePath(e);this.ensureParentDirs(s);let o=ae(r),i=Ae(n,o);this.memory.set(s,{type:"file",content:i,mode:420,mtime:new Date}),this.deleted.delete(s)}async appendFile(e,n,r){this.assertWritable(`append '${e}'`);let s=this.normalizePath(e),o=ae(r),i=Ae(n,o),a;try{a=await this.readFileBuffer(s)}catch{a=new Uint8Array(0)}let l=new Uint8Array(a.length+i.length);l.set(a),l.set(i,a.length),this.ensureParentDirs(s),this.memory.set(s,{type:"file",content:l,mode:420,mtime:new Date}),this.deleted.delete(s)}async exists(e){return this.existsInOverlay(e)}async stat(e,n=new Set){let r=this.normalizePath(e);if(n.has(r))throw new Error(`ELOOP: too many levels of symbolic links, stat '${e}'`);if(n.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, stat '${e}'`);let s=this.memory.get(r);if(s){if(s.type==="symlink"){let a=this.resolveSymlink(r,s.target);return this.stat(a,n)}let i=0;return s.type==="file"&&(i=s.content.length),{isFile:s.type==="file",isDirectory:s.type==="directory",isSymbolicLink:!1,mode:s.mode,size:i,mtime:s.mtime}}let o=this.toRealPath(r);if(!o)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);try{let i=await B.promises.stat(o);return{isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:!1,mode:i.mode,size:i.size,mtime:i.mtime}}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, stat '${e}'`):i}}async lstat(e){let n=this.normalizePath(e);if(this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);let r=this.memory.get(n);if(r){if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime};let o=0;return r.type==="file"&&(o=r.content.length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:o,mtime:r.mtime}}let s=this.toRealPath(n);if(!s)throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);try{let o=await B.promises.lstat(s);return{isFile:o.isFile(),isDirectory:o.isDirectory(),isSymbolicLink:o.isSymbolicLink(),mode:o.mode,size:o.size,mtime:o.mtime}}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, lstat '${e}'`):o}}resolveSymlink(e,n){if(n.startsWith("/"))return this.normalizePath(n);let r=this.dirname(e);return this.normalizePath(r==="/"?`/${n}`:`${r}/${n}`)}async mkdir(e,n){this.assertWritable(`mkdir '${e}'`);let r=this.normalizePath(e);if(await this.existsInOverlay(r)){if(!n?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${e}'`);return}let o=this.dirname(r);if(o!=="/"&&!await this.existsInOverlay(o))if(n?.recursive)await this.mkdir(o,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.memory.set(r,{type:"directory",mode:493,mtime:new Date}),this.deleted.delete(r)}async readdir(e){let n=this.normalizePath(e);if(this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, scandir '${e}'`);let r=new Set,s=new Set,o=n==="/"?"/":`${n}/`;for(let a of this.deleted)if(a.startsWith(o)){let l=a.slice(o.length),c=l.split("/")[0];c&&!l.includes("/",c.length)&&s.add(c)}for(let a of this.memory.keys())if(a!==n&&a.startsWith(o)){let c=a.slice(o.length).split("/")[0];c&&!s.has(c)&&r.add(c)}let i=this.toRealPath(n);if(i)try{let a=await B.promises.readdir(i);for(let l of a)s.has(l)||r.add(l)}catch(a){if(a.code==="ENOENT"){if(!this.memory.has(n))throw new Error(`ENOENT: no such file or directory, scandir '${e}'`)}else if(a.code!=="ENOTDIR")throw a}return Array.from(r).sort()}async rm(e,n){this.assertWritable(`rm '${e}'`);let r=this.normalizePath(e);if(!await this.existsInOverlay(r)){if(n?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${e}'`)}try{if((await this.stat(r)).isDirectory){let i=await this.readdir(r);if(i.length>0){if(!n?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${e}'`);for(let a of i){let l=r==="/"?`/${a}`:`${r}/${a}`;await this.rm(l,n)}}}}catch{}this.deleted.add(r),this.memory.delete(r)}async cp(e,n,r){this.assertWritable(`cp '${n}'`);let s=this.normalizePath(e),o=this.normalizePath(n);if(!await this.existsInOverlay(s))throw new Error(`ENOENT: no such file or directory, cp '${e}'`);let a=await this.stat(s);if(a.isFile){let l=await this.readFileBuffer(s);await this.writeFile(o,l)}else if(a.isDirectory){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${e}'`);await this.mkdir(o,{recursive:!0});let l=await this.readdir(s);for(let c of l){let u=s==="/"?`/${c}`:`${s}/${c}`,d=o==="/"?`/${c}`:`${o}/${c}`;await this.cp(u,d,r)}}}async mv(e,n){this.assertWritable(`mv '${n}'`),await this.cp(e,n,{recursive:!0}),await this.rm(e,{recursive:!0})}resolvePath(e,n){if(n.startsWith("/"))return this.normalizePath(n);let r=e==="/"?`/${n}`:`${e}/${n}`;return this.normalizePath(r)}getAllPaths(){let e=new Set(this.memory.keys());for(let n of this.deleted)e.delete(n);return this.scanRealFs("/",e),Array.from(e)}scanRealFs(e,n){if(this.deleted.has(e))return;let r=this.toRealPath(e);if(r)try{let s=B.readdirSync(r);for(let o of s){let i=e==="/"?`/${o}`:`${e}/${o}`;if(this.deleted.has(i))continue;n.add(i);let a=ve.join(r,o);B.statSync(a).isDirectory()&&this.scanRealFs(i,n)}}catch{}}async chmod(e,n){this.assertWritable(`chmod '${e}'`);let r=this.normalizePath(e);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, chmod '${e}'`);let o=this.memory.get(r);if(o){o.mode=n;return}let i=await this.stat(r);if(i.isFile){let a=await this.readFileBuffer(r);this.memory.set(r,{type:"file",content:a,mode:n,mtime:new Date})}else i.isDirectory&&this.memory.set(r,{type:"directory",mode:n,mtime:new Date})}async symlink(e,n){this.assertWritable(`symlink '${n}'`);let r=this.normalizePath(n);if(await this.existsInOverlay(r))throw new Error(`EEXIST: file already exists, symlink '${n}'`);this.ensureParentDirs(r),this.memory.set(r,{type:"symlink",target:e,mode:511,mtime:new Date}),this.deleted.delete(r)}async link(e,n){this.assertWritable(`link '${n}'`);let r=this.normalizePath(e),s=this.normalizePath(n);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, link '${e}'`);let i=await this.stat(r);if(!i.isFile)throw new Error(`EPERM: operation not permitted, link '${e}'`);if(await this.existsInOverlay(s))throw new Error(`EEXIST: file already exists, link '${n}'`);let l=await this.readFileBuffer(r);this.ensureParentDirs(s),this.memory.set(s,{type:"file",content:l,mode:i.mode,mtime:new Date}),this.deleted.delete(s)}async readlink(e){let n=this.normalizePath(e);if(this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);let r=this.memory.get(n);if(r){if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${e}'`);return r.target}let s=this.toRealPath(n);if(!s)throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);try{return await B.promises.readlink(s)}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, readlink '${e}'`):o.code==="EINVAL"?new Error(`EINVAL: invalid argument, readlink '${e}'`):o}}};var W={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",cyan:"\x1B[36m"},hr=class{env;rl;running=!0;history=[];isInteractive;constructor(e={}){let n=process.cwd(),r=new wt({root:n,mountPoint:"/"});this.env=new Et({fs:r,cwd:e.cwd||"/",env:{HOME:"/",USER:"user",SHELL:"/bin/bash",TERM:"xterm-256color",...e.env},network:e.network!==!1?{dangerouslyAllowFullInternetAccess:!0}:void 0}),this.isInteractive=process.stdin.isTTY===!0,this.rl=zn.createInterface({input:process.stdin,output:process.stdout,terminal:this.isInteractive}),this.rl.on("SIGINT",()=>{process.stdout.write(`^C
154
154
  `),this.prompt()}),process.stdin.isTTY&&this.rl.on("close",()=>{this.running=!1,console.log(`
155
155
  Goodbye!`),process.exit(0)})}syncHistory(){let e=this.env.getEnv();e.BASH_HISTORY=JSON.stringify(this.history)}getPrompt(){let e=this.env.getCwd(),n=this.env.getEnv().HOME||"/home/user",r=e;return e===n?r="~":e.startsWith(`${n}/`)&&(r=`~${e.slice(n.length)}`),`${W.green}${W.bold}user@virtual${W.reset}:${W.blue}${W.bold}${r}${W.reset}$ `}async executeCommand(e){let n=e.trim();if(n){if(this.history.push(n),n==="exit"||n.startsWith("exit ")){let r=n.split(/\s+/),s=r[1]?parseInt(r[1],10):0;console.log("exit"),process.exit(s)}this.syncHistory();try{let r=await this.env.exec(n);r.stdout&&process.stdout.write(r.stdout),r.stderr&&process.stderr.write(`${W.red}${r.stderr}${W.reset}`)}catch(r){console.error(`${W.red}Error: ${Y(r)}${W.reset}`)}}}printWelcome(){console.log(`
156
156
  ${W.cyan}${W.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
@@ -162,7 +162,7 @@ ${W.dim}Exploring: ${process.cwd()}${W.reset}
162
162
 
163
163
  Type ${W.green}help${W.reset} for available commands, ${W.green}exit${W.reset} to quit.
164
164
  Reads from real filesystem, writes stay in memory (OverlayFs).
165
- `)}prompt(){this.rl.question(this.getPrompt(),async e=>{this.running&&(await this.executeCommand(e),this.prompt())})}async run(){if(this.isInteractive)this.printWelcome(),this.prompt();else{let e=[];this.rl.on("line",n=>{e.push(n)}),await new Promise(n=>{this.rl.on("close",n)});for(let n of e)await this.executeCommand(n)}}};function ai(){let t=process.argv.slice(2),e={network:!0};for(let n=0;n<t.length;n++)if(t[n]==="--cwd"&&t[n+1])e.cwd=t[++n];else if(t[n]==="--files"&&t[n+1]){let r=t[++n];try{let s=zn.readFileSync(r,"utf-8");e.files=JSON.parse(s)}catch(s){console.error(`Error reading files from ${r}:`,s),process.exit(1)}}else t[n]==="--no-network"?e.network=!1:(t[n]==="--help"||t[n]==="-h")&&(console.log(`
165
+ `)}prompt(){this.rl.question(this.getPrompt(),async e=>{this.running&&(await this.executeCommand(e),this.prompt())})}async run(){if(this.isInteractive)this.printWelcome(),this.prompt();else{let e=[];this.rl.on("line",n=>{e.push(n)}),await new Promise(n=>{this.rl.on("close",n)});for(let n of e)await this.executeCommand(n)}}};function ii(){let t=process.argv.slice(2),e={network:!0};for(let n=0;n<t.length;n++)if(t[n]==="--cwd"&&t[n+1])e.cwd=t[++n];else if(t[n]==="--files"&&t[n+1]){let r=t[++n];try{let s=Bn.readFileSync(r,"utf-8");e.files=JSON.parse(s)}catch(s){console.error(`Error reading files from ${r}:`,s),process.exit(1)}}else t[n]==="--no-network"?e.network=!1:(t[n]==="--help"||t[n]==="-h")&&(console.log(`
166
166
  Usage: pnpm shell [options]
167
167
 
168
168
  Interactive shell using OverlayFs - reads from the current directory,
@@ -176,4 +176,4 @@ Options:
176
176
  Example:
177
177
  pnpm shell
178
178
  pnpm shell --no-network
179
- `),process.exit(0));return e}var ci=ai(),li=new mr(ci);li.run();
179
+ `),process.exit(0));return e}var oi=ii(),ai=new hr(oi);ai.run();