just-bash 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/Bash.d.ts +18 -0
  2. package/dist/ai/index.d.ts +6 -1
  3. package/dist/bin/chunks/awk2-6XCE67AX.js +20 -0
  4. package/dist/bin/chunks/awk2-DKAZ7LPG.js +20 -0
  5. package/dist/bin/chunks/awk2-GAJ72X3Z.js +20 -0
  6. package/dist/bin/chunks/awk2-HJAPWU2N.js +18 -0
  7. package/dist/bin/chunks/awk2-LVXC5OAC.js +20 -0
  8. package/dist/bin/chunks/awk2-T6HR4EYO.js +20 -0
  9. package/dist/bin/chunks/awk2-UYU2UYZ2.js +20 -0
  10. package/dist/bin/chunks/awk2-W64AZN7P.js +20 -0
  11. package/dist/bin/chunks/find-7BUNQZX4.js +11 -0
  12. package/dist/bin/chunks/find-YATLECXJ.js +11 -0
  13. package/dist/bin/chunks/grep-PHBFGJCV.js +15 -0
  14. package/dist/bin/chunks/sed-B6FXUN7R.js +80 -0
  15. package/dist/bin/chunks/sed-RHLDIXPL.js +76 -0
  16. package/dist/bin/chunks/sed-SYSATJXR.js +75 -0
  17. package/dist/bin/just-bash.js +102 -102
  18. package/dist/bin/shell/chunks/awk2-6XCE67AX.js +20 -0
  19. package/dist/bin/shell/chunks/awk2-DKAZ7LPG.js +20 -0
  20. package/dist/bin/shell/chunks/awk2-GAJ72X3Z.js +20 -0
  21. package/dist/bin/shell/chunks/awk2-HJAPWU2N.js +18 -0
  22. package/dist/bin/shell/chunks/awk2-LVXC5OAC.js +20 -0
  23. package/dist/bin/shell/chunks/awk2-T6HR4EYO.js +20 -0
  24. package/dist/bin/shell/chunks/awk2-UYU2UYZ2.js +20 -0
  25. package/dist/bin/shell/chunks/awk2-W64AZN7P.js +20 -0
  26. package/dist/bin/shell/chunks/find-7BUNQZX4.js +11 -0
  27. package/dist/bin/shell/chunks/find-YATLECXJ.js +11 -0
  28. package/dist/bin/shell/chunks/grep-PHBFGJCV.js +15 -0
  29. package/dist/bin/shell/chunks/sed-B6FXUN7R.js +80 -0
  30. package/dist/bin/shell/chunks/sed-RHLDIXPL.js +76 -0
  31. package/dist/bin/shell/chunks/sed-SYSATJXR.js +75 -0
  32. package/dist/bin/shell/shell.js +124 -128
  33. package/dist/bundle/ai/index.js +423 -386
  34. package/dist/bundle/chunks/awk2-365HINHI.js +19 -0
  35. package/dist/bundle/chunks/awk2-7YCFY7D2.js +19 -0
  36. package/dist/bundle/chunks/awk2-7YL3P4KU.js +19 -0
  37. package/dist/bundle/chunks/awk2-ETXZHQQ4.js +19 -0
  38. package/dist/bundle/chunks/awk2-FMEL7ESV.js +19 -0
  39. package/dist/bundle/chunks/awk2-LE4QUFGK.js +19 -0
  40. package/dist/bundle/chunks/awk2-MGHA6JPJ.js +17 -0
  41. package/dist/bundle/chunks/awk2-XEAK5PBN.js +19 -0
  42. package/dist/bundle/chunks/find-KP4M5DWC.js +10 -0
  43. package/dist/bundle/chunks/find-WM6ZETA7.js +10 -0
  44. package/dist/bundle/chunks/grep-CZTYKNEE.js +14 -0
  45. package/dist/bundle/chunks/sed-2WWCANZT.js +79 -0
  46. package/dist/bundle/chunks/sed-5LZHAGFR.js +74 -0
  47. package/dist/bundle/chunks/sed-V7XSBPTD.js +75 -0
  48. package/dist/bundle/index.js +8 -8
  49. package/dist/commands/awk/ast.d.ts +201 -0
  50. package/dist/commands/awk/awk2.d.ts +7 -0
  51. package/dist/commands/awk/builtins.d.ts +17 -0
  52. package/dist/commands/awk/interpreter/context.d.ts +53 -0
  53. package/dist/commands/awk/interpreter/expressions.d.ts +17 -0
  54. package/dist/commands/awk/interpreter/fields.d.ts +25 -0
  55. package/dist/commands/awk/interpreter/helpers.d.ts +29 -0
  56. package/dist/commands/awk/interpreter/index.d.ts +8 -0
  57. package/dist/commands/awk/interpreter/interpreter.d.ts +50 -0
  58. package/dist/commands/awk/interpreter/statements.d.ts +11 -0
  59. package/dist/commands/awk/interpreter/types.d.ts +13 -0
  60. package/dist/commands/awk/interpreter/variables.d.ts +35 -0
  61. package/dist/commands/awk/interpreter2.d.ts +90 -0
  62. package/dist/commands/awk/lexer.d.ts +100 -0
  63. package/dist/commands/awk/parser2.d.ts +73 -0
  64. package/dist/commands/find/matcher.d.ts +6 -2
  65. package/dist/commands/find/types.d.ts +13 -0
  66. package/dist/commands/sed/executor.d.ts +1 -1
  67. package/dist/commands/sed/lexer.d.ts +74 -0
  68. package/dist/commands/sed/parser.d.ts +4 -0
  69. package/dist/commands/sed/types.d.ts +66 -2
  70. package/dist/index.d.ts +1 -1
  71. package/package.json +1 -1
@@ -1,69 +1,69 @@
1
1
  #!/usr/bin/env node
2
- import{a as z,b as Q,c as U,d as Y,e as K,f as k,g as W,h as he,i as B,j as We}from"./chunks/chunk-LV662IGP.js";import{a as se}from"./chunks/chunk-4VDEBYW7.js";import"./chunks/chunk-5KNEBKYN.js";import{resolve as kn}from"node:path";var cr=[{name:"echo",load:async()=>(await import("./chunks/echo-DEUIS5JO.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-YZXBF5YF.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-BOFQVMMK.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-C4MPAF3H.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-LWULWDHP.js")).mkdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-XCIAYF5I.js")).touchCommand},{name:"rm",load:async()=>(await import("./chunks/rm-W6CCBEMG.js")).rmCommand},{name:"cp",load:async()=>(await import("./chunks/cp-77UY7PGN.js")).cpCommand},{name:"mv",load:async()=>(await import("./chunks/mv-TDYCNSIQ.js")).mvCommand},{name:"ln",load:async()=>(await import("./chunks/ln-DB7J2W5X.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-3G4LK462.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-X4MWD4JP.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-DPNOQY67.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-VGXR3WWL.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-YSVKBQ77.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-CNJ3QDRA.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-3PHITCPO.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-OVWU4WCZ.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-OVWU4WCZ.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-OVWU4WCZ.js")).egrepCommand},{name:"sed",load:async()=>(await import("./chunks/sed-7IS44XON.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk-S63F6IYK.js")).awkCommand},{name:"sort",load:async()=>(await import("./chunks/sort-UJP353TM.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-W4HF6YSB.js")).uniqCommand},{name:"cut",load:async()=>(await import("./chunks/cut-UYV3FM7R.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-R36J3G4K.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-2EEKHHO6.js")).trCommand},{name:"tee",load:async()=>(await import("./chunks/tee-UU2VS3OM.js")).teeCommand},{name:"find",load:async()=>(await import("./chunks/find-4B67H4RP.js")).findCommand},{name:"basename",load:async()=>(await import("./chunks/basename-Y7JDBYHN.js")).basenameCommand},{name:"dirname",load:async()=>(await import("./chunks/dirname-VLHP44TU.js")).dirnameCommand},{name:"tree",load:async()=>(await import("./chunks/tree-4247W67O.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-4FZ7WF2P.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-FVITWNHG.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-FVITWNHG.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-74DFXE2E.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-74DFXE2E.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-PRQ4B6N2.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-YNLVLPOF.js")).xargsCommand},{name:"true",load:async()=>(await import("./chunks/true-JCX733LK.js")).trueCommand},{name:"false",load:async()=>(await import("./chunks/true-JCX733LK.js")).falseCommand},{name:"clear",load:async()=>(await import("./chunks/clear-GTCFHSB2.js")).clearCommand},{name:"bash",load:async()=>(await import("./chunks/bash-TQGTNXAE.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-TQGTNXAE.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-EYSXBSCP.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-NC7HTKLZ.js")).base64Command},{name:"diff",load:async()=>(await import("./chunks/diff-TG2NXCX2.js")).diffCommand},{name:"date",load:async()=>(await import("./chunks/date-7NBRXV2Z.js")).dateCommand},{name:"sleep",load:async()=>(await import("./chunks/sleep-E4DIYGTT.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-OZVAGW2H.js")).timeoutCommand},{name:"seq",load:async()=>(await import("./chunks/seq-DGJILX2Q.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-HA2ZNL6S.js")).exprCommand},{name:"html-to-markdown",load:async()=>(await import("./chunks/html-to-markdown-L4UWMK4S.js")).htmlToMarkdownCommand},{name:"help",load:async()=>(await import("./chunks/help-5V3MPCYQ.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-HX2NMOP3.js")).whichCommand}],Dn=[{name:"curl",load:async()=>(await import("./chunks/curl-NE7XEWMN.js")).curlCommand}],lr=new Map;function fr(t){return{name:t.name,async execute(e,n){let r=lr.get(t.name);return r||(r=await t.load(),lr.set(t.name,r)),r.execute(e,n)}}}function ur(t){return(t?cr.filter(n=>t.includes(n.name)):cr).map(fr)}function hr(){return Dn.map(fr)}function dr(t){return"load"in t&&typeof t.load=="function"}function pr(t){let e=null;return{name:t.name,async execute(n,r){return e||(e=await t.load()),e.execute(n,r)}}}var On=new TextEncoder,_n=new TextDecoder;function we(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 On.encode(t)}}function Fe(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 _n.decode(t)}}function ie(t){if(t!=null)return typeof t=="string"?t:t.encoding??void 0}var Me=new TextEncoder;function Ln(t){return typeof t=="object"&&t!==null&&!(t instanceof Uint8Array)&&"content"in t}var de=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))Ln(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=ie(r),a=we(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=ie(n);return Fe(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:Me.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=ie(r),a=we(n,i);if(o?.type==="file"){let l=o.content instanceof Uint8Array?o.content:Me.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=Me.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=Me.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}`,f=o==="/"?`/${l}`:`${o}/${l}`;await this.cp(c,f,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}};function L(t,e){return{type:"ArithmeticExpression",expression:J(t,e,0).expr}}function J(t,e,n){return Tn(t,e,n)}function Tn(t,e,n){let{expr:r,pos:s}=ze(t,e,n);for(s=D(e,s);e[s]===",";){s++;let{expr:o,pos:i}=ze(t,e,s);r={type:"ArithBinary",operator:",",left:r,right:o},s=D(e,i)}return{expr:r,pos:s}}function ze(t,e,n){let{expr:r,pos:s}=Wn(t,e,n);if(s=D(e,s),e[s]==="?"){s++;let{expr:o,pos:i}=J(t,e,s);if(s=D(e,i),e[s]===":"){s++;let{expr:a,pos:l}=J(t,e,s);return{expr:{type:"ArithTernary",condition:r,consequent:o,alternate:a},pos:l}}}return{expr:r,pos:s}}function Wn(t,e,n){let{expr:r,pos:s}=mr(t,e,n);for(;s=D(e,s),e.slice(s,s+2)==="||";){s+=2;let{expr:o,pos:i}=mr(t,e,s);r={type:"ArithBinary",operator:"||",left:r,right:o},s=i}return{expr:r,pos:s}}function mr(t,e,n){let{expr:r,pos:s}=yr(t,e,n);for(;s=D(e,s),e.slice(s,s+2)==="&&";){s+=2;let{expr:o,pos:i}=yr(t,e,s);r={type:"ArithBinary",operator:"&&",left:r,right:o},s=i}return{expr:r,pos:s}}function yr(t,e,n){let{expr:r,pos:s}=Er(t,e,n);for(;s=D(e,s),e[s]==="|"&&e[s+1]!=="|";){s++;let{expr:o,pos:i}=Er(t,e,s);r={type:"ArithBinary",operator:"|",left:r,right:o},s=i}return{expr:r,pos:s}}function Er(t,e,n){let{expr:r,pos:s}=wr(t,e,n);for(;s=D(e,s),e[s]==="^";){s++;let{expr:o,pos:i}=wr(t,e,s);r={type:"ArithBinary",operator:"^",left:r,right:o},s=i}return{expr:r,pos:s}}function wr(t,e,n){let{expr:r,pos:s}=gr(t,e,n);for(;s=D(e,s),e[s]==="&"&&e[s+1]!=="&";){s++;let{expr:o,pos:i}=gr(t,e,s);r={type:"ArithBinary",operator:"&",left:r,right:o},s=i}return{expr:r,pos:s}}function gr(t,e,n){let{expr:r,pos:s}=Ar(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}=Ar(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}return{expr:r,pos:s}}function Ar(t,e,n){let{expr:r,pos:s}=pt(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}=pt(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}=pt(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}else break;return{expr:r,pos:s}}function pt(t,e,n){let{expr:r,pos:s}=xr(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}=xr(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}return{expr:r,pos:s}}function xr(t,e,n){let{expr:r,pos:s}=Sr(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}=Sr(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}return{expr:r,pos:s}}function Sr(t,e,n){let{expr:r,pos:s}=Be(t,e,n);for(;;)if(s=D(e,s),e[s]==="*"&&e[s+1]!=="*"){s++;let{expr:o,pos:i}=Be(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}=Be(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}else break;return{expr:r,pos:s}}function Be(t,e,n){let{expr:r,pos:s}=mt(t,e,n),o=D(e,s);if(e.slice(o,o+2)==="**"){o+=2;let{expr:i,pos:a}=Be(t,e,o);return{expr:{type:"ArithBinary",operator:"**",left:r,right:i},pos:a}}return{expr:r,pos:s}}function mt(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}=mt(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}=mt(t,e,r);return{expr:{type:"ArithUnary",operator:s,operand:o,prefix:!0},pos:i}}return Mn(t,e,r)}function Fn(t,e){let n=t[e];return n==="$"||n==="`"}function Mn(t,e,n){let{expr:r,pos:s}=br(t,e,n),o=[r];for(;Fn(e,s);){let{expr:i,pos:a}=br(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 br(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}=J(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}=J(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 W(`${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:ge(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 f=e.slice(l+1,c);return{expr:{type:"ArithDynamicBase",baseExpr:a,value:f},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 f=e.slice(l,c);return{expr:{type:"ArithDynamicNumber",prefix:a,suffix:f},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:f}=J(t,e,r);a=c,r=f,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:f,pos:h}=ze(t,e,r);return{expr:{type:"ArithAssignment",operator:c,variable:s,subscript:a,stringKey:i,value:f},pos:h}}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}=ze(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 ge(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]===`
3
- `){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 u;(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"})(u||(u={}));var Ue={if:u.IF,then:u.THEN,else:u.ELSE,elif:u.ELIF,fi:u.FI,for:u.FOR,while:u.WHILE,until:u.UNTIL,do:u.DO,done:u.DONE,case:u.CASE,esac:u.ESAC,in:u.IN,function:u.FUNCTION,select:u.SELECT,time:u.TIME,coproc:u.COPROC};function Cr(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 Bn=[[";",";","&",u.SEMI_SEMI_AND],["<","<","<",u.TLESS],["&",">",">",u.AND_DGREAT]],zn=[["[","[",u.DBRACK_START],["]","]",u.DBRACK_END],["(","(",u.DPAREN_START],[")",")",u.DPAREN_END],["&","&",u.AND_AND],["|","|",u.OR_OR],[";",";",u.DSEMI],[";","&",u.SEMI_AND],["|","&",u.PIPE_AMP],[">",">",u.DGREAT],["<","&",u.LESSAND],[">","&",u.GREATAND],["<",">",u.LESSGREAT],[">","|",u.CLOBBER],["&",">",u.AND_GREAT]],Un={"|":u.PIPE,"&":u.AMP,";":u.SEMICOLON,"(":u.LPAREN,")":u.RPAREN,"<":u.LESS,">":u.GREAT};function jn(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===u.NEWLINE){this.readHeredocContent();continue}let o=this.nextToken();o&&r.push(o)}return r.push({type:u.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]===`
4
- `)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===`
5
- `)return this.pos=n+1,this.line++,this.column=1,{type:u.NEWLINE,value:`
6
- `,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(u.DLESSDASH,"<<-",n,r,s);for(let[c,f,h,d]of Bn)if(o===c&&i===f&&a===h)return this.pos=n+3,this.column=s+3,this.makeToken(d,c+f+h,n,r,s);if(o==="<"&&i==="<")return this.pos=n+2,this.column=s+2,this.registerHeredocFromLookahead(!1),this.makeToken(u.DLESS,"<<",n,r,s);for(let[c,f,h]of zn)if(o===c&&i===f)return this.pos=n+2,this.column=s+2,this.makeToken(h,c+f,n,r,s);let l=Un[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:u.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!==`
7
- `?this.readWord(n,r,s):(this.pos=n+1,this.column=s+1,this.makeToken(u.LBRACE,"{",n,r,s)):o==="}"?this.isWordCharFollowing(n+1)?this.readWord(n,r,s):(this.pos=n+1,this.column=s+1,this.makeToken(u.RBRACE,"}",n,r,s)):o==="!"?i==="="?(this.pos=n+2,this.column=s+2,this.makeToken(u.WORD,"!=",n,r,s)):(this.pos=n+1,this.column=s+1,this.makeToken(u.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]!==`
8
- `;)i++;let a=s.slice(e,i);return this.pos=i,this.column=r+(i-e),{type:u.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 m=s[i];if(m===" "||m===" "||m===`
9
- `||m===";"||m==="&"||m==="|"||m==="("||m===")"||m==="<"||m===">"||m==="'"||m==='"'||m==="\\"||m==="$"||m==="`"||m==="{"||m==="}"||m==="~"||m==="*"||m==="?"||m==="[")break;i++}if(i>a){let m=s[i];if(i>=o||m===" "||m===" "||m===`
10
- `||m===";"||m==="&"||m==="|"||m==="("||m===")"||m==="<"||m===">"){let E=s.slice(a,i);if(this.pos=i,this.column=r+(i-a),Ue[E])return{type:Ue[E],value:E,start:e,end:i,line:n,column:r};let w=E.indexOf("=");return w>0&&Cr(E.slice(0,w))?{type:u.ASSIGNMENT_WORD,value:E,start:e,end:i,line:n,column:r}:/^[0-9]+$/.test(E)?{type:u.NUMBER,value:E,start:e,end:i,line:n,column:r}:/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(E)?{type:u.NAME,value:E,start:e,end:i,line:n,column:r,quoted:!1,singleQuoted:!1}:{type:u.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,f="",h=!1,d=!1,p=!1,y=!1,g=s[i]==='"'||s[i]==="'";for(;i<o;){let m=s[i];if(!p&&!y&&(m===" "||m===" "||m===`
11
- `||m===";"||m==="&"||m==="|"||m==="("||m===")"||m==="<"||m===">"))break;if(m==="$"&&i+1<o&&s[i+1]==="'"&&!p&&!y){for(f+="$'",i+=2,l+=2;i<o&&s[i]!=="'";)s[i]==="\\"&&i+1<o?(f+=s[i]+s[i+1],i+=2,l+=2):(f+=s[i],i++,l++);i<o&&(f+="'",i++,l++);continue}if(m==="$"&&i+1<o&&s[i+1]==='"'&&!p&&!y){i++,l++,y=!0,h=!0,f===""&&(g=!0),i++,l++;continue}if(m==="'"&&!y){p?(p=!1,g||(f+=m)):(p=!0,g?(d=!0,h=!0):f+=m),i++,l++;continue}if(m==='"'&&!p){y?(y=!1,g||(f+=m)):(y=!0,g?h=!0:f+=m),i++,l++;continue}if(m==="\\"&&!p&&i+1<o){let E=s[i+1];if(E===`
2
+ import{a as z,b as Q,c as U,d as Y,e as K,f as k,g as W,h as he,i as B,j as We}from"./chunks/chunk-LV662IGP.js";import{a as ne}from"./chunks/chunk-4VDEBYW7.js";import"./chunks/chunk-5KNEBKYN.js";import{resolve as Is}from"node:path";var cr=[{name:"echo",load:async()=>(await import("./chunks/echo-DEUIS5JO.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-YZXBF5YF.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-BOFQVMMK.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-C4MPAF3H.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-LWULWDHP.js")).mkdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-XCIAYF5I.js")).touchCommand},{name:"rm",load:async()=>(await import("./chunks/rm-W6CCBEMG.js")).rmCommand},{name:"cp",load:async()=>(await import("./chunks/cp-77UY7PGN.js")).cpCommand},{name:"mv",load:async()=>(await import("./chunks/mv-TDYCNSIQ.js")).mvCommand},{name:"ln",load:async()=>(await import("./chunks/ln-DB7J2W5X.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-3G4LK462.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-X4MWD4JP.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-DPNOQY67.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-VGXR3WWL.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-YSVKBQ77.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-CNJ3QDRA.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-3PHITCPO.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-PHBFGJCV.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-PHBFGJCV.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-PHBFGJCV.js")).egrepCommand},{name:"sed",load:async()=>(await import("./chunks/sed-B6FXUN7R.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-UYU2UYZ2.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-UJP353TM.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-W4HF6YSB.js")).uniqCommand},{name:"cut",load:async()=>(await import("./chunks/cut-UYV3FM7R.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-R36J3G4K.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-2EEKHHO6.js")).trCommand},{name:"tee",load:async()=>(await import("./chunks/tee-UU2VS3OM.js")).teeCommand},{name:"find",load:async()=>(await import("./chunks/find-YATLECXJ.js")).findCommand},{name:"basename",load:async()=>(await import("./chunks/basename-Y7JDBYHN.js")).basenameCommand},{name:"dirname",load:async()=>(await import("./chunks/dirname-VLHP44TU.js")).dirnameCommand},{name:"tree",load:async()=>(await import("./chunks/tree-4247W67O.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-4FZ7WF2P.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-FVITWNHG.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-FVITWNHG.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-74DFXE2E.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-74DFXE2E.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-PRQ4B6N2.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-YNLVLPOF.js")).xargsCommand},{name:"true",load:async()=>(await import("./chunks/true-JCX733LK.js")).trueCommand},{name:"false",load:async()=>(await import("./chunks/true-JCX733LK.js")).falseCommand},{name:"clear",load:async()=>(await import("./chunks/clear-GTCFHSB2.js")).clearCommand},{name:"bash",load:async()=>(await import("./chunks/bash-TQGTNXAE.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-TQGTNXAE.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-EYSXBSCP.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-NC7HTKLZ.js")).base64Command},{name:"diff",load:async()=>(await import("./chunks/diff-TG2NXCX2.js")).diffCommand},{name:"date",load:async()=>(await import("./chunks/date-7NBRXV2Z.js")).dateCommand},{name:"sleep",load:async()=>(await import("./chunks/sleep-E4DIYGTT.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-OZVAGW2H.js")).timeoutCommand},{name:"seq",load:async()=>(await import("./chunks/seq-DGJILX2Q.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-HA2ZNL6S.js")).exprCommand},{name:"html-to-markdown",load:async()=>(await import("./chunks/html-to-markdown-L4UWMK4S.js")).htmlToMarkdownCommand},{name:"help",load:async()=>(await import("./chunks/help-5V3MPCYQ.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-HX2NMOP3.js")).whichCommand}],Rs=[{name:"curl",load:async()=>(await import("./chunks/curl-NE7XEWMN.js")).curlCommand}],lr=new Map;function fr(t){return{name:t.name,async execute(e,s){let r=lr.get(t.name);return r||(r=await t.load(),lr.set(t.name,r)),r.execute(e,s)}}}function ur(t){return(t?cr.filter(s=>t.includes(s.name)):cr).map(fr)}function hr(){return Rs.map(fr)}function dr(t){return"load"in t&&typeof t.load=="function"}function pr(t){let e=null;return{name:t.name,async execute(s,r){return e||(e=await t.load()),e.execute(s,r)}}}var Ds=new TextEncoder,Os=new TextDecoder;function we(t,e){if(t instanceof Uint8Array)return t;switch(e){case"base64":return Uint8Array.from(atob(t),s=>s.charCodeAt(0));case"hex":{let s=new Uint8Array(t.length/2);for(let r=0;r<t.length;r+=2)s[r/2]=parseInt(t.slice(r,r+2),16);return s}case"binary":case"latin1":return Uint8Array.from(t,s=>s.charCodeAt(0));default:return Ds.encode(t)}}function Fe(t,e){switch(e){case"base64":return btoa(String.fromCharCode(...t));case"hex":return Array.from(t).map(s=>s.toString(16).padStart(2,"0")).join("");case"binary":case"latin1":return String.fromCharCode(...t);default:return Os.decode(t)}}function ie(t){if(t!=null)return typeof t=="string"?t:t.encoding??void 0}var Me=new TextEncoder;function _s(t){return typeof t=="object"&&t!==null&&!(t instanceof Uint8Array)&&"content"in t}var de=class{data=new Map;constructor(e){if(this.data.set("/",{type:"directory",mode:493,mtime:new Date}),e)for(let[s,r]of Object.entries(e))_s(r)?this.writeFileSync(s,r.content,void 0,{mode:r.mode,mtime:r.mtime}):this.writeFileSync(s,r)}normalizePath(e){if(!e||e==="/")return"/";let s=e.endsWith("/")&&e!=="/"?e.slice(0,-1):e;s.startsWith("/")||(s=`/${s}`);let r=s.split("/").filter(o=>o&&o!=="."),n=[];for(let o of r)o===".."?n.pop():n.push(o);return`/${n.join("/")}`||"/"}dirname(e){let s=this.normalizePath(e);if(s==="/")return"/";let r=s.lastIndexOf("/");return r===0?"/":s.slice(0,r)}ensureParentDirs(e){let s=this.dirname(e);s!=="/"&&(this.data.has(s)||(this.ensureParentDirs(s),this.data.set(s,{type:"directory",mode:493,mtime:new Date})))}writeFileSync(e,s,r,n){let o=this.normalizePath(e);this.ensureParentDirs(o);let i=ie(r),a=we(s,i);this.data.set(o,{type:"file",content:a,mode:n?.mode??420,mtime:n?.mtime??new Date})}async readFile(e,s){let r=await this.readFileBuffer(e),n=ie(s);return Fe(r,n)}async readFileBuffer(e){let s=this.normalizePath(e),r=this.data.get(s),n=s;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(n))throw new Error(`ELOOP: too many levels of symbolic links, open '${e}'`);o.add(n),n=this.resolveSymlink(n,r.target),r=this.data.get(n)}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:Me.encode(r.content)}async writeFile(e,s,r){this.writeFileSync(e,s,r)}async appendFile(e,s,r){let n=this.normalizePath(e),o=this.data.get(n);if(o&&o.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${e}'`);let i=ie(r),a=we(s,i);if(o?.type==="file"){let l=o.content instanceof Uint8Array?o.content:Me.encode(o.content),c=new Uint8Array(l.length+a.length);c.set(l),c.set(a,l.length),this.data.set(n,{type:"file",content:c,mode:o.mode,mtime:new Date})}else this.writeFileSync(e,s,r)}async exists(e){return this.data.has(this.normalizePath(e))}async stat(e){let s=this.normalizePath(e),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);if(r.type==="symlink"){let o=this.resolveSymlink(s,r.target),i=this.data.get(o);if(!i)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);r=i}let n=0;return r.type==="file"&&r.content&&(r.content instanceof Uint8Array?n=r.content.length:n=Me.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:n,mtime:r.mtime||new Date}}async lstat(e){let s=this.normalizePath(e),r=this.data.get(s);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 n=0;return r.type==="file"&&r.content&&(r.content instanceof Uint8Array?n=r.content.length:n=Me.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:n,mtime:r.mtime||new Date}}resolveSymlink(e,s){if(s.startsWith("/"))return this.normalizePath(s);let r=this.dirname(e);return this.normalizePath(r==="/"?`/${s}`:`${r}/${s}`)}async mkdir(e,s){this.mkdirSync(e,s)}mkdirSync(e,s){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(!s?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${e}'`);return}let n=this.dirname(r);if(n!=="/"&&!this.data.has(n))if(s?.recursive)this.mkdirSync(n,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.data.set(r,{type:"directory",mode:493,mtime:new Date})}async readdir(e){let s=this.normalizePath(e),r=this.data.get(s);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 n=s==="/"?"/":`${s}/`,o=[];for(let i of this.data.keys())if(i!==s&&i.startsWith(n)){let l=i.slice(n.length).split("/")[0];l&&!o.includes(l)&&o.push(l)}return o.sort()}async rm(e,s){let r=this.normalizePath(e),n=this.data.get(r);if(!n){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${e}'`)}if(n.type==="directory"){let o=await this.readdir(r);if(o.length>0){if(!s?.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,s)}}}this.data.delete(r)}async cp(e,s,r){let n=this.normalizePath(e),o=this.normalizePath(s),i=this.data.get(n);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(n);for(let l of a){let c=n==="/"?`/${l}`:`${n}/${l}`,f=o==="/"?`/${l}`:`${o}/${l}`;await this.cp(c,f,r)}}}async mv(e,s){await this.cp(e,s,{recursive:!0}),await this.rm(e,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(e,s){if(s.startsWith("/"))return this.normalizePath(s);let r=e==="/"?`/${s}`:`${e}/${s}`;return this.normalizePath(r)}async chmod(e,s){let r=this.normalizePath(e),n=this.data.get(r);if(!n)throw new Error(`ENOENT: no such file or directory, chmod '${e}'`);n.mode=s}async symlink(e,s){let r=this.normalizePath(s);if(this.data.has(r))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(r),this.data.set(r,{type:"symlink",target:e,mode:511,mtime:new Date})}async link(e,s){let r=this.normalizePath(e),n=this.normalizePath(s),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(n))throw new Error(`EEXIST: file already exists, link '${s}'`);this.ensureParentDirs(n),this.data.set(n,{type:"file",content:o.content,mode:o.mode,mtime:o.mtime})}async readlink(e){let s=this.normalizePath(e),r=this.data.get(s);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}};function L(t,e){return{type:"ArithmeticExpression",expression:J(t,e,0).expr}}function J(t,e,s){return Ls(t,e,s)}function Ls(t,e,s){let{expr:r,pos:n}=ze(t,e,s);for(n=D(e,n);e[n]===",";){n++;let{expr:o,pos:i}=ze(t,e,n);r={type:"ArithBinary",operator:",",left:r,right:o},n=D(e,i)}return{expr:r,pos:n}}function ze(t,e,s){let{expr:r,pos:n}=Ts(t,e,s);if(n=D(e,n),e[n]==="?"){n++;let{expr:o,pos:i}=J(t,e,n);if(n=D(e,i),e[n]===":"){n++;let{expr:a,pos:l}=J(t,e,n);return{expr:{type:"ArithTernary",condition:r,consequent:o,alternate:a},pos:l}}}return{expr:r,pos:n}}function Ts(t,e,s){let{expr:r,pos:n}=mr(t,e,s);for(;n=D(e,n),e.slice(n,n+2)==="||";){n+=2;let{expr:o,pos:i}=mr(t,e,n);r={type:"ArithBinary",operator:"||",left:r,right:o},n=i}return{expr:r,pos:n}}function mr(t,e,s){let{expr:r,pos:n}=yr(t,e,s);for(;n=D(e,n),e.slice(n,n+2)==="&&";){n+=2;let{expr:o,pos:i}=yr(t,e,n);r={type:"ArithBinary",operator:"&&",left:r,right:o},n=i}return{expr:r,pos:n}}function yr(t,e,s){let{expr:r,pos:n}=Er(t,e,s);for(;n=D(e,n),e[n]==="|"&&e[n+1]!=="|";){n++;let{expr:o,pos:i}=Er(t,e,n);r={type:"ArithBinary",operator:"|",left:r,right:o},n=i}return{expr:r,pos:n}}function Er(t,e,s){let{expr:r,pos:n}=wr(t,e,s);for(;n=D(e,n),e[n]==="^";){n++;let{expr:o,pos:i}=wr(t,e,n);r={type:"ArithBinary",operator:"^",left:r,right:o},n=i}return{expr:r,pos:n}}function wr(t,e,s){let{expr:r,pos:n}=gr(t,e,s);for(;n=D(e,n),e[n]==="&"&&e[n+1]!=="&";){n++;let{expr:o,pos:i}=gr(t,e,n);r={type:"ArithBinary",operator:"&",left:r,right:o},n=i}return{expr:r,pos:n}}function gr(t,e,s){let{expr:r,pos:n}=Ar(t,e,s);for(;n=D(e,n),e.slice(n,n+2)==="=="||e.slice(n,n+2)==="!=";){let o=e.slice(n,n+2);n+=2;let{expr:i,pos:a}=Ar(t,e,n);r={type:"ArithBinary",operator:o,left:r,right:i},n=a}return{expr:r,pos:n}}function Ar(t,e,s){let{expr:r,pos:n}=pt(t,e,s);for(;;)if(n=D(e,n),e.slice(n,n+2)==="<="||e.slice(n,n+2)===">="){let o=e.slice(n,n+2);n+=2;let{expr:i,pos:a}=pt(t,e,n);r={type:"ArithBinary",operator:o,left:r,right:i},n=a}else if(e[n]==="<"||e[n]===">"){let o=e[n];n++;let{expr:i,pos:a}=pt(t,e,n);r={type:"ArithBinary",operator:o,left:r,right:i},n=a}else break;return{expr:r,pos:n}}function pt(t,e,s){let{expr:r,pos:n}=xr(t,e,s);for(;n=D(e,n),e.slice(n,n+2)==="<<"||e.slice(n,n+2)===">>";){let o=e.slice(n,n+2);n+=2;let{expr:i,pos:a}=xr(t,e,n);r={type:"ArithBinary",operator:o,left:r,right:i},n=a}return{expr:r,pos:n}}function xr(t,e,s){let{expr:r,pos:n}=Sr(t,e,s);for(;n=D(e,n),(e[n]==="+"||e[n]==="-")&&e[n+1]!==e[n];){let o=e[n];n++;let{expr:i,pos:a}=Sr(t,e,n);r={type:"ArithBinary",operator:o,left:r,right:i},n=a}return{expr:r,pos:n}}function Sr(t,e,s){let{expr:r,pos:n}=Be(t,e,s);for(;;)if(n=D(e,n),e[n]==="*"&&e[n+1]!=="*"){n++;let{expr:o,pos:i}=Be(t,e,n);r={type:"ArithBinary",operator:"*",left:r,right:o},n=i}else if(e[n]==="/"||e[n]==="%"){let o=e[n];n++;let{expr:i,pos:a}=Be(t,e,n);r={type:"ArithBinary",operator:o,left:r,right:i},n=a}else break;return{expr:r,pos:n}}function Be(t,e,s){let{expr:r,pos:n}=mt(t,e,s),o=D(e,n);if(e.slice(o,o+2)==="**"){o+=2;let{expr:i,pos:a}=Be(t,e,o);return{expr:{type:"ArithBinary",operator:"**",left:r,right:i},pos:a}}return{expr:r,pos:n}}function mt(t,e,s){let r=D(e,s);if(e.slice(r,r+2)==="++"||e.slice(r,r+2)==="--"){let n=e.slice(r,r+2);r+=2;let{expr:o,pos:i}=mt(t,e,r);return{expr:{type:"ArithUnary",operator:n,operand:o,prefix:!0},pos:i}}if(e[r]==="+"||e[r]==="-"||e[r]==="!"||e[r]==="~"){let n=e[r];r++;let{expr:o,pos:i}=mt(t,e,r);return{expr:{type:"ArithUnary",operator:n,operand:o,prefix:!0},pos:i}}return Fs(t,e,r)}function Ws(t,e){let s=t[e];return s==="$"||s==="`"}function Fs(t,e,s){let{expr:r,pos:n}=br(t,e,s),o=[r];for(;Ws(e,n);){let{expr:i,pos:a}=br(t,e,n);o.push(i),n=a}if(o.length>1&&(r={type:"ArithConcat",parts:o}),n=D(e,n),e.slice(n,n+2)==="++"||e.slice(n,n+2)==="--"){let i=e.slice(n,n+2);return n+=2,{expr:{type:"ArithUnary",operator:i,operand:r,prefix:!1},pos:n}}return{expr:r,pos:n}}function br(t,e,s){let r=D(e,s);if(e.slice(r,r+3)==="$(("){r+=3;let n=1,o=r;for(;r<e.length-1&&n>0;)e[r]==="("&&e[r+1]==="("?(n++,r+=2):e[r]===")"&&e[r+1]===")"?(n--,n>0&&(r+=2)):r++;let i=e.slice(o,r),{expr:a}=J(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 n=1,o=r;for(;r<e.length&&n>0;)e[r]==="("?n++:e[r]===")"&&n--,n>0&&r++;let i=e.slice(o,r);return r++,{expr:{type:"ArithCommandSubst",command:i},pos:r}}if(e[r]==="`"){r++;let n=r;for(;r<e.length&&e[r]!=="`";)r++;let o=e.slice(n,r);return e[r]==="`"&&r++,{expr:{type:"ArithCommandSubst",command:o},pos:r}}if(e[r]==="("){r++;let{expr:n,pos:o}=J(t,e,r);return r=D(e,o),e[r]===")"&&r++,{expr:{type:"ArithGroup",expression:n},pos:r}}if(/[0-9]/.test(e[r])){let n="",o=!1;for(;r<e.length;){let a=e[r];if(o)if(/[0-9a-zA-Z@_]/.test(a))n+=a,r++;else break;else if(a==="#")o=!0,n+=a,r++;else if(/[0-9a-fA-FxX]/.test(a))n+=a,r++;else break}if(e[r]==="."&&/[0-9]/.test(e[r+1]))throw new W(`${n}.${e[r+1]}...: syntax error: invalid arithmetic operator`);if(e[r]==="["){let a=e.slice(r).trim();return{expr:{type:"ArithNumberSubscript",number:n,errorToken:a},pos:e.length}}return{expr:{type:"ArithNumber",value:ge(n)},pos:r}}if(e[r]==="$"&&e[r+1]==="{"){let n=r+2,o=1,i=n;for(;i<e.length&&o>0;)e[i]==="{"?o++:e[i]==="}"&&o--,o>0&&i++;let a=e.slice(n,i),l=i+1;if(e[l]==="#"){let c=l+1;for(;c<e.length&&/[0-9a-zA-Z@_]/.test(e[c]);)c++;let f=e.slice(l+1,c);return{expr:{type:"ArithDynamicBase",baseExpr:a,value:f},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 f=e.slice(l,c);return{expr:{type:"ArithDynamicNumber",prefix:a,suffix:f},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 n="";for(;r<e.length&&/[0-9]/.test(e[r]);)n+=e[r],r++;return{expr:{type:"ArithVariable",name:n},pos:r}}if(e[r]==="$"&&r+1<e.length&&/[a-zA-Z_]/.test(e[r+1])&&r++,/[a-zA-Z_]/.test(e[r])){let n="";for(;r<e.length&&/[a-zA-Z0-9_]/.test(e[r]);)n+=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:f}=J(t,e,r);a=c,r=f,e[r]==="]"&&r++}if(r=D(e,r),e[r]==="["&&a)return{expr:{type:"ArithDoubleSubscript",array:n,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:f,pos:h}=ze(t,e,r);return{expr:{type:"ArithAssignment",operator:c,variable:n,subscript:a,stringKey:i,value:f},pos:h}}return{expr:{type:"ArithArrayElement",array:n,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}=ze(t,e,r);return{expr:{type:"ArithAssignment",operator:i,variable:n,value:a},pos:l}}return{expr:{type:"ArithVariable",name:n},pos:r}}return{expr:{type:"ArithNumber",value:0},pos:r}}function ge(t){if(t.includes("#")){let[e,s]=t.split("#"),r=Number.parseInt(e,10);if(r<2||r>64)return Number.NaN;if(r<=36)return Number.parseInt(s,r);let n=0;for(let o of s){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;n=n*r+i}return n}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]===`
3
+ `){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=[],s=!1){return{type:"Statement",pipelines:t,operators:e,background:s}},pipeline(t,e=!1){return{type:"Pipeline",commands:t,negated:e}},simpleCommand(t,e=[],s=[],r=[]){return{type:"SimpleCommand",name:t,args:e,assignments:s,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,s=!1,r=null){return{type:"Assignment",name:t,value:e,append:s,array:r}},redirection(t,e,s=null){return{type:"Redirection",fd:s,operator:t,target:e}},hereDoc(t,e,s=!1,r=!1){return{type:"HereDoc",delimiter:t,content:e,stripTabs:s,quoted:r}},ifNode(t,e=null,s=[]){return{type:"If",clauses:t,elseBody:e,redirections:s}},forNode(t,e,s,r=[]){return{type:"For",variable:t,words:e,body:s,redirections:r}},whileNode(t,e,s=[]){return{type:"While",condition:t,body:e,redirections:s}},untilNode(t,e,s=[]){return{type:"Until",condition:t,body:e,redirections:s}},caseNode(t,e,s=[]){return{type:"Case",word:t,items:e,redirections:s}},caseItem(t,e,s=";;"){return{type:"CaseItem",patterns:t,body:e,terminator:s}},subshell(t,e=[]){return{type:"Subshell",body:t,redirections:e}},group(t,e=[]){return{type:"Group",body:t,redirections:e}},functionDef(t,e,s=[]){return{type:"FunctionDef",name:t,body:e,redirections:s}},conditionalCommand(t,e=[]){return{type:"ConditionalCommand",expression:t,redirections:e}},arithmeticCommand(t,e=[]){return{type:"ArithmeticCommand",expression:t,redirections:e}}};var u;(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"})(u||(u={}));var Ue={if:u.IF,then:u.THEN,else:u.ELSE,elif:u.ELIF,fi:u.FI,for:u.FOR,while:u.WHILE,until:u.UNTIL,do:u.DO,done:u.DONE,case:u.CASE,esac:u.ESAC,in:u.IN,function:u.FUNCTION,select:u.SELECT,time:u.TIME,coproc:u.COPROC};function Nr(t){let e=t.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);if(!e)return!1;let s=t.slice(e[0].length);if(s===""||s==="+")return!0;if(s[0]==="["){let r=0,n=0;for(;n<s.length;n++)if(s[n]==="[")r++;else if(s[n]==="]"&&(r--,r===0))break;if(r!==0||n>=s.length)return!1;let o=s.slice(n+1);return o===""||o==="+"}return!1}var Ms=[[";",";","&",u.SEMI_SEMI_AND],["<","<","<",u.TLESS],["&",">",">",u.AND_DGREAT]],Bs=[["[","[",u.DBRACK_START],["]","]",u.DBRACK_END],["(","(",u.DPAREN_START],[")",")",u.DPAREN_END],["&","&",u.AND_AND],["|","|",u.OR_OR],[";",";",u.DSEMI],[";","&",u.SEMI_AND],["|","&",u.PIPE_AMP],[">",">",u.DGREAT],["<","&",u.LESSAND],[">","&",u.GREATAND],["<",">",u.LESSGREAT],[">","|",u.CLOBBER],["&",">",u.AND_GREAT]],zs={"|":u.PIPE,"&":u.AMP,";":u.SEMICOLON,"(":u.LPAREN,")":u.RPAREN,"<":u.LESS,">":u.GREAT};function Us(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 s=this.input.length,r=this.tokens,n=this.pendingHeredocs;for(;this.pos<s&&(this.skipWhitespace(),!(this.pos>=s));){if(n.length>0&&r.length>0&&r[r.length-1].type===u.NEWLINE){this.readHeredocContent();continue}let o=this.nextToken();o&&r.push(o)}return r.push({type:u.EOF,value:"",start:this.pos,end:this.pos,line:this.line,column:this.column}),r}skipWhitespace(){let e=this.input,s=e.length,r=this.pos,n=this.column,o=this.line;for(;r<s;){let i=e[r];if(i===" "||i===" ")r++,n++;else if(i==="\\"&&e[r+1]===`
4
+ `)r+=2,o++,n=1;else break}this.pos=r,this.column=n,this.line=o}nextToken(){let e=this.input,s=this.pos,r=this.line,n=this.column,o=e[s],i=e[s+1],a=e[s+2];if(o==="#")return this.readComment(s,r,n);if(o===`
5
+ `)return this.pos=s+1,this.line++,this.column=1,{type:u.NEWLINE,value:`
6
+ `,start:s,end:s+1,line:r,column:n};if(o==="<"&&i==="<"&&a==="-")return this.pos=s+3,this.column=n+3,this.registerHeredocFromLookahead(!0),this.makeToken(u.DLESSDASH,"<<-",s,r,n);for(let[c,f,h,d]of Ms)if(o===c&&i===f&&a===h)return this.pos=s+3,this.column=n+3,this.makeToken(d,c+f+h,s,r,n);if(o==="<"&&i==="<")return this.pos=s+2,this.column=n+2,this.registerHeredocFromLookahead(!1),this.makeToken(u.DLESS,"<<",s,r,n);for(let[c,f,h]of Bs)if(o===c&&i===f)return this.pos=s+2,this.column=n+2,this.makeToken(h,c+f,s,r,n);let l=zs[o];return l?(this.pos=s+1,this.column=n+1,this.makeToken(l,o,s,r,n)):o==="{"?i==="}"?(this.pos=s+2,this.column=n+2,{type:u.WORD,value:"{}",start:s,end:s+2,line:r,column:n,quoted:!1,singleQuoted:!1}):this.scanBraceExpansion(s)!==null?this.readWordWithBraceExpansion(s,r,n):this.scanLiteralBraceWord(s)!==null?this.readWordWithBraceExpansion(s,r,n):i!==void 0&&i!==" "&&i!==" "&&i!==`
7
+ `?this.readWord(s,r,n):(this.pos=s+1,this.column=n+1,this.makeToken(u.LBRACE,"{",s,r,n)):o==="}"?this.isWordCharFollowing(s+1)?this.readWord(s,r,n):(this.pos=s+1,this.column=n+1,this.makeToken(u.RBRACE,"}",s,r,n)):o==="!"?i==="="?(this.pos=s+2,this.column=n+2,this.makeToken(u.WORD,"!=",s,r,n)):(this.pos=s+1,this.column=n+1,this.makeToken(u.BANG,"!",s,r,n)):this.readWord(s,r,n)}makeToken(e,s,r,n,o){return{type:e,value:s,start:r,end:this.pos,line:n,column:o}}readComment(e,s,r){let n=this.input,o=n.length,i=this.pos;for(;i<o&&n[i]!==`
8
+ `;)i++;let a=n.slice(e,i);return this.pos=i,this.column=r+(i-e),{type:u.COMMENT,value:a,start:e,end:i,line:s,column:r}}readWord(e,s,r){let n=this.input,o=n.length,i=this.pos,a=i;for(;i<o;){let m=n[i];if(m===" "||m===" "||m===`
9
+ `||m===";"||m==="&"||m==="|"||m==="("||m===")"||m==="<"||m===">"||m==="'"||m==='"'||m==="\\"||m==="$"||m==="`"||m==="{"||m==="}"||m==="~"||m==="*"||m==="?"||m==="[")break;i++}if(i>a){let m=n[i];if(i>=o||m===" "||m===" "||m===`
10
+ `||m===";"||m==="&"||m==="|"||m==="("||m===")"||m==="<"||m===">"){let E=n.slice(a,i);if(this.pos=i,this.column=r+(i-a),Ue[E])return{type:Ue[E],value:E,start:e,end:i,line:s,column:r};let w=E.indexOf("=");return w>0&&Nr(E.slice(0,w))?{type:u.ASSIGNMENT_WORD,value:E,start:e,end:i,line:s,column:r}:/^[0-9]+$/.test(E)?{type:u.NUMBER,value:E,start:e,end:i,line:s,column:r}:/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(E)?{type:u.NAME,value:E,start:e,end:i,line:s,column:r,quoted:!1,singleQuoted:!1}:{type:u.WORD,value:E,start:e,end:i,line:s,column:r,quoted:!1,singleQuoted:!1}}}i=this.pos;let l=this.column,c=this.line,f="",h=!1,d=!1,p=!1,y=!1,g=n[i]==='"'||n[i]==="'";for(;i<o;){let m=n[i];if(!p&&!y&&(m===" "||m===" "||m===`
11
+ `||m===";"||m==="&"||m==="|"||m==="("||m===")"||m==="<"||m===">"))break;if(m==="$"&&i+1<o&&n[i+1]==="'"&&!p&&!y){for(f+="$'",i+=2,l+=2;i<o&&n[i]!=="'";)n[i]==="\\"&&i+1<o?(f+=n[i]+n[i+1],i+=2,l+=2):(f+=n[i],i++,l++);i<o&&(f+="'",i++,l++);continue}if(m==="$"&&i+1<o&&n[i+1]==='"'&&!p&&!y){i++,l++,y=!0,h=!0,f===""&&(g=!0),i++,l++;continue}if(m==="'"&&!y){p?(p=!1,g||(f+=m)):(p=!0,g?(d=!0,h=!0):f+=m),i++,l++;continue}if(m==='"'&&!p){y?(y=!1,g||(f+=m)):(y=!0,g?h=!0:f+=m),i++,l++;continue}if(m==="\\"&&!p&&i+1<o){let E=n[i+1];if(E===`
12
12
  `){i+=2,c++,l=1;continue}if(y){if(E==='"'||E==="\\"||E==="$"||E==="`"||E===`
13
- `){E==="$"||E==="`"?f+=m+E:f+=E,i+=2,l+=2;continue}}else{E==='"'||E==="'"?f+=m+E:f+=E,i+=2,l+=2;continue}}if(m==="$"&&i+1<o&&s[i+1]==="("){f+=m,i++,l++,f+=s[i],i++,l++;let E=1,w=!1,b=!1,P=0,I=!1,R="",ue=s[i]==="(";for(;E>0&&i<o;){let _=s[i];if(f+=_,w)_==="'"&&(w=!1);else if(b)_==="\\"&&i+1<o?(f+=s[i+1],i++,l++):_==='"'&&(b=!1);else if(_==="'")w=!0,R="";else if(_==='"')b=!0,R="";else if(_==="\\"&&i+1<o)f+=s[i+1],i++,l++,R="";else if(_==="#"&&!ue&&(R===""||/\s/.test(s[i-1]||""))){for(;i+1<o&&s[i+1]!==`
14
- `;)i++,l++,f+=s[i];R=""}else/[a-zA-Z_]/.test(_)?R+=_:(R==="case"?(P++,I=!1):R==="in"&&P>0?I=!0:R==="esac"&&P>0&&(P--,I=!1),R="",_==="("?i>0&&s[i-1]==="$"?E++:I||E++:_===")"?I?I=!1:E--:_===";"&&P>0&&i+1<o&&s[i+1]===";"&&(I=!0));_===`
15
- `&&(c++,l=0,R=""),i++,l++}continue}if(m==="$"&&i+1<o&&s[i+1]==="["){f+=m,i++,l++,f+=s[i],i++,l++;let E=1;for(;E>0&&i<o;){let w=s[i];f+=w,w==="["?E++:w==="]"?E--:w===`
16
- `&&(c++,l=0),i++,l++}continue}if(m==="$"&&i+1<o&&s[i+1]==="{"){f+=m,i++,l++,f+=s[i],i++,l++;let E=1;for(;E>0&&i<o;){let w=s[i];f+=w,w==="{"?E++:w==="}"?E--:w===`
17
- `&&(c++,l=0),i++,l++}continue}if(m==="$"&&i+1<o){let E=s[i+1];if(E==="#"||E==="?"||E==="$"||E==="!"||E==="@"||E==="*"||E==="-"||E>="0"&&E<="9"){f+=m+E,i+=2,l+=2;continue}}if(m==="`"){for(f+=m,i++,l++;i<o&&s[i]!=="`";){let E=s[i];f+=E,E==="\\"&&i+1<o&&(f+=s[i+1],i++,l++),E===`
18
- `&&(c++,l=0),i++,l++}i<o&&(f+=s[i],i++,l++);continue}f+=m,i++,m===`
19
- `?(c++,l=1):l++}if(this.pos=i,this.column=l,this.line=c,f==="")return{type:u.WORD,value:"",start:e,end:i,line:n,column:r,quoted:h,singleQuoted:d};if(!h&&Ue[f])return{type:Ue[f],value:f,start:e,end:i,line:n,column:r};if(!g){let m=f.indexOf("=");if(m>0&&Cr(f.slice(0,m)))return{type:u.ASSIGNMENT_WORD,value:f,start:e,end:i,line:n,column:r,quoted:h,singleQuoted:d}}return/^[0-9]+$/.test(f)?{type:u.NUMBER,value:f,start:e,end:i,line:n,column:r}:jn(f)?{type:u.NAME,value:f,start:e,end:i,line:n,column:r,quoted:h,singleQuoted:d}:{type:u.WORD,value:f,start:e,end:i,line:n,column:r,quoted:h,singleQuoted:d}}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]!==`
13
+ `){E==="$"||E==="`"?f+=m+E:f+=E,i+=2,l+=2;continue}}else{E==='"'||E==="'"?f+=m+E:f+=E,i+=2,l+=2;continue}}if(m==="$"&&i+1<o&&n[i+1]==="("){f+=m,i++,l++,f+=n[i],i++,l++;let E=1,w=!1,b=!1,P=0,I=!1,R="",ue=n[i]==="(";for(;E>0&&i<o;){let _=n[i];if(f+=_,w)_==="'"&&(w=!1);else if(b)_==="\\"&&i+1<o?(f+=n[i+1],i++,l++):_==='"'&&(b=!1);else if(_==="'")w=!0,R="";else if(_==='"')b=!0,R="";else if(_==="\\"&&i+1<o)f+=n[i+1],i++,l++,R="";else if(_==="#"&&!ue&&(R===""||/\s/.test(n[i-1]||""))){for(;i+1<o&&n[i+1]!==`
14
+ `;)i++,l++,f+=n[i];R=""}else/[a-zA-Z_]/.test(_)?R+=_:(R==="case"?(P++,I=!1):R==="in"&&P>0?I=!0:R==="esac"&&P>0&&(P--,I=!1),R="",_==="("?i>0&&n[i-1]==="$"?E++:I||E++:_===")"?I?I=!1:E--:_===";"&&P>0&&i+1<o&&n[i+1]===";"&&(I=!0));_===`
15
+ `&&(c++,l=0,R=""),i++,l++}continue}if(m==="$"&&i+1<o&&n[i+1]==="["){f+=m,i++,l++,f+=n[i],i++,l++;let E=1;for(;E>0&&i<o;){let w=n[i];f+=w,w==="["?E++:w==="]"?E--:w===`
16
+ `&&(c++,l=0),i++,l++}continue}if(m==="$"&&i+1<o&&n[i+1]==="{"){f+=m,i++,l++,f+=n[i],i++,l++;let E=1;for(;E>0&&i<o;){let w=n[i];f+=w,w==="{"?E++:w==="}"?E--:w===`
17
+ `&&(c++,l=0),i++,l++}continue}if(m==="$"&&i+1<o){let E=n[i+1];if(E==="#"||E==="?"||E==="$"||E==="!"||E==="@"||E==="*"||E==="-"||E>="0"&&E<="9"){f+=m+E,i+=2,l+=2;continue}}if(m==="`"){for(f+=m,i++,l++;i<o&&n[i]!=="`";){let E=n[i];f+=E,E==="\\"&&i+1<o&&(f+=n[i+1],i++,l++),E===`
18
+ `&&(c++,l=0),i++,l++}i<o&&(f+=n[i],i++,l++);continue}f+=m,i++,m===`
19
+ `?(c++,l=1):l++}if(this.pos=i,this.column=l,this.line=c,f==="")return{type:u.WORD,value:"",start:e,end:i,line:s,column:r,quoted:h,singleQuoted:d};if(!h&&Ue[f])return{type:Ue[f],value:f,start:e,end:i,line:s,column:r};if(!g){let m=f.indexOf("=");if(m>0&&Nr(f.slice(0,m)))return{type:u.ASSIGNMENT_WORD,value:f,start:e,end:i,line:s,column:r,quoted:h,singleQuoted:d}}return/^[0-9]+$/.test(f)?{type:u.NUMBER,value:f,start:e,end:i,line:s,column:r}:Us(f)?{type:u.NAME,value:f,start:e,end:i,line:s,column:r,quoted:h,singleQuoted:d}:{type:u.WORD,value:f,start:e,end:i,line:s,column:r,quoted:h,singleQuoted:d}}readHeredocContent(){for(;this.pendingHeredocs.length>0;){let e=this.pendingHeredocs.shift();if(!e)break;let s=this.pos,r=this.line,n=this.column,o="";for(;this.pos<this.input.length;){let i=this.pos,a="";for(;this.pos<this.input.length&&this.input[this.pos]!==`
20
20
  `;)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]===`
21
21
  `&&(this.pos++,this.line++,this.column=1);break}o+=a,this.pos<this.input.length&&this.input[this.pos]===`
22
22
  `&&(o+=`
23
- `,this.pos++,this.line++,this.column=1)}this.tokens.push({type:u.HEREDOC_CONTENT,value:o,start:n,end:this.pos,line:r,column:s})}}addPendingHeredoc(e,n,r){this.pendingHeredocs.push({delimiter:e,stripTabs:n,quoted:r})}registerHeredocFromLookahead(e){let n=this.pos,r=this.column;for(;this.pos<this.input.length&&(this.input[this.pos]===" "||this.input[this.pos]===" ");)this.pos++,this.column++;let s="",o=!1,i=this.input[this.pos];if(i==="'"||i==='"'){o=!0;let a=i;for(this.pos++,this.column++;this.pos<this.input.length&&this.input[this.pos]!==a;)s+=this.input[this.pos],this.pos++,this.column++}else for(;this.pos<this.input.length&&!/[\s;<>&|()]/.test(this.input[this.pos]);)s+=this.input[this.pos],this.pos++,this.column++;this.pos=n,this.column=r,s&&this.pendingHeredocs.push({delimiter:s,stripTabs:e,quoted:o})}isWordCharFollowing(e){if(e>=this.input.length)return!1;let n=this.input[e];return!(n===" "||n===" "||n===`
24
- `||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===`
25
- `||c===";"||c==="&"||c==="|"||c==="("||c===")"||c==="<"||c===">")break;if(c==="{"){if(this.scanBraceExpansion(i)!==null){let h=1;for(i++,a++;i<o&&h>0;)s[i]==="{"?h++:s[i]==="}"&&h--,i++,a++;continue}i++,a++;continue}if(c==="}"){i++,a++;continue}if(c==="$"&&i+1<o&&s[i+1]==="("){i++,a++,i++,a++;let f=1;for(;f>0&&i<o;)s[i]==="("?f++:s[i]===")"&&f--,i++,a++;continue}if(c==="$"&&i+1<o&&s[i+1]==="{"){i++,a++,i++,a++;let f=1;for(;f>0&&i<o;)s[i]==="{"?f++:s[i]==="}"&&f--,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:u.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===`
26
- `||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===`
27
- `||i===";"||i==="&"||i==="|")return null;s++}}return null}};var yt=1e6,Et=1e5,$r=1e6,vr=new Set([u.LESS,u.GREAT,u.DLESS,u.DGREAT,u.LESSAND,u.GREATAND,u.LESSGREAT,u.DLESSDASH,u.CLOBBER,u.TLESS,u.AND_GREAT,u.AND_DGREAT]),Pr=new Set([u.LESS,u.GREAT,u.DLESS,u.DGREAT,u.LESSAND,u.GREATAND,u.LESSGREAT,u.DLESSDASH,u.CLOBBER,u.TLESS]),ee=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 kr(t,e,n){let r=n+1;for(;r<e.length&&/[a-zA-Z0-9_-]/.test(e[r]);)r++;return r}function wt(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 pe(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 Rr(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 Dr(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=Gn(e,r);i===-1?(s+=o,r++):(s+=e.slice(r,i+1),r=i+1)}else break}return{pattern:s,endIndex:r}}function Gn(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 Or(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+=`
28
- `,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 gt(t,e){let n=e.trim();return n===""?{type:"ArithmeticExpression",expression:{type:"ArithNumber",value:0}}:L(t,n)}function Ir(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 _r(t,e,n,r){let s=wt(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:Ir(o).map(f=>({type:"Word",word:A.word(r(t,f,!1,!1,!1))}))},endIndex:s+1}:o.includes(",")?{part:{type:"BraceExpansion",items:Ir(o).map(f=>({type:"Word",word:A.word([A.literal(f)])}))},endIndex:s+1}:null}function Lr(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 Tr(t,e){return{[u.LESS]:"<",[u.GREAT]:">",[u.DGREAT]:">>",[u.LESSAND]:"<&",[u.GREATAND]:">&",[u.LESSGREAT]:"<>",[u.CLOBBER]:">|",[u.TLESS]:"<<<",[u.AND_GREAT]:"&>",[u.AND_DGREAT]:"&>>",[u.DLESS]:"<",[u.DLESSDASH]:"<"}[e]||">"}function Ge(t){let e=t.current(),n=e.type;if(n===u.NUMBER){let r=t.peek(1);return e.end!==r.start?!1:Pr.has(r.type)}return vr.has(n)}function Ve(t){let e=null;t.check(u.NUMBER)&&(e=Number.parseInt(t.advance().value,10));let n=t.advance(),r=Tr(t,n.type);if(n.type===u.DLESS||n.type===u.DLESSDASH)return Vn(t,r,e,n.type===u.DLESSDASH);t.isWord()||t.error("Expected redirection target");let s=t.parseWord();return A.redirection(r,s,e)}function Vn(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 Fr(t){let e=[],n=null,r=[],s=[];for(;t.check(u.ASSIGNMENT_WORD);)t.checkIterationLimit(),e.push(Hn(t));for(;Ge(t);)t.checkIterationLimit(),s.push(Ve(t));for(t.isWord()&&(n=t.parseWord());(!t.isStatementEnd()||t.check(u.RBRACE))&&!t.check(u.PIPE,u.PIPE_AMP);)if(t.checkIterationLimit(),Ge(t))s.push(Ve(t));else if(t.check(u.RBRACE)){let o=t.advance();r.push(t.parseWordFromString(o.value,!1,!1))}else if(t.isWord())r.push(t.parseWord());else if(t.check(u.ASSIGNMENT_WORD)){let o=t.advance(),i=o.value,a=i.endsWith("="),l=i.endsWith("=(");if((a||l)&&(l||t.check(u.LPAREN))){let c=l?i.slice(0,-2):i.slice(0,-1);l||t.expect(u.LPAREN);let f=At(t);t.expect(u.RPAREN);let h=f.map(p=>Lr(t,p)),d=`${c}=(${h.join(" ")})`;r.push(t.parseWordFromString(d,!1,!1))}else r.push(t.parseWordFromString(i,o.quoted,o.singleQuoted))}else if(t.check(u.LPAREN))t.error("syntax error near unexpected token `('");else break;return A.simpleCommand(n,r,e,s)}function Hn(t){let e=t.expect(u.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 h=0,d=i+1;for(;i<n.length;i++)if(n[i]==="[")h++;else if(n[i]==="]"&&(h--,h===0))break;h!==0&&t.error(`Invalid assignment: ${n}`),o=n.slice(d,i),i++}let a=n[i]==="+";a&&i++,n[i]!=="="&&t.error(`Invalid assignment: ${n}`),i++;let l=n.slice(i);if(l==="("){let h=At(t);t.expect(u.RPAREN);let d=o!==void 0?`${s}[${o}]`:s;return A.assignment(d,null,a,h)}if(l===""&&t.check(u.LPAREN)){let h=t.current();if(e.end===h.start){t.advance();let d=At(t);t.expect(u.RPAREN);let p=o!==void 0?`${s}[${o}]`:s;return A.assignment(p,null,a,d)}}let c=l?t.parseWordFromString(l,e.quoted,e.singleQuoted,!0):null,f=o!==void 0?`${s}[${o}]`:s;return A.assignment(f,c,a,null)}function At(t){let e=[];for(t.skipNewlines();!t.check(u.RPAREN,u.EOF);)t.checkIterationLimit(),t.isWord()?e.push(t.parseWord()):t.advance(),t.skipNewlines();return e}function xt(t){t.expect(u.IF);let e=[],n=t.parseCompoundList();t.expect(u.THEN);let r=t.parseCompoundList();if(r.length===0){let i=t.check(u.FI)?"fi":t.check(u.ELSE)?"else":t.check(u.ELIF)?"elif":"fi";t.error(`syntax error near unexpected token \`${i}'`)}for(e.push({condition:n,body:r});t.check(u.ELIF);){t.advance();let i=t.parseCompoundList();t.expect(u.THEN);let a=t.parseCompoundList();if(a.length===0){let l=t.check(u.FI)?"fi":t.check(u.ELSE)?"else":t.check(u.ELIF)?"elif":"fi";t.error(`syntax error near unexpected token \`${l}'`)}e.push({condition:i,body:a})}let s=null;t.check(u.ELSE)&&(t.advance(),s=t.parseCompoundList(),s.length===0&&t.error("syntax error near unexpected token `fi'")),t.expect(u.FI);let o=t.parseOptionalRedirections();return A.ifNode(e,s,o)}function St(t){if(t.expect(u.FOR),t.check(u.DPAREN_START))return qn(t);t.isWord()||t.error("Expected variable name in for loop");let n=t.advance().value,r=null;if(t.skipNewlines(),t.check(u.IN))for(t.advance(),r=[];!t.check(u.SEMICOLON,u.NEWLINE,u.DO,u.EOF)&&t.isWord();)r.push(t.parseWord());t.check(u.SEMICOLON)&&t.advance(),t.skipNewlines(),t.expect(u.DO);let s=t.parseCompoundList();t.expect(u.DONE);let o=t.parseOptionalRedirections();return A.forNode(n,r,s,o)}function qn(t){t.expect(u.DPAREN_START);let e=null,n=null,r=null,s=["","",""],o=0,i=0;for(;!t.check(u.DPAREN_END,u.EOF);){let c=t.advance();if(c.type===u.SEMICOLON&&i===0){if(o++,o>2)break}else c.value==="("&&i++,c.value===")"&&i--,s[o]+=c.value}t.expect(u.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(u.SEMICOLON)&&t.advance(),t.skipNewlines(),t.expect(u.DO);let a=t.parseCompoundList();t.expect(u.DONE);let l=t.parseOptionalRedirections();return{type:"CStyleFor",init:e,condition:n,update:r,body:a,redirections:l}}function bt(t){t.expect(u.WHILE);let e=t.parseCompoundList();t.expect(u.DO);let n=t.parseCompoundList();n.length===0&&t.error("syntax error near unexpected token `done'"),t.expect(u.DONE);let r=t.parseOptionalRedirections();return A.whileNode(e,n,r)}function Nt(t){t.expect(u.UNTIL);let e=t.parseCompoundList();t.expect(u.DO);let n=t.parseCompoundList();n.length===0&&t.error("syntax error near unexpected token `done'"),t.expect(u.DONE);let r=t.parseOptionalRedirections();return A.untilNode(e,n,r)}function Ct(t){t.expect(u.CASE),t.isWord()||t.error("Expected word after 'case'");let e=t.parseWord();t.skipNewlines(),t.expect(u.IN),t.skipNewlines();let n=[];for(;!t.check(u.ESAC,u.EOF);){t.checkIterationLimit();let s=t.getPos(),o=Qn(t);if(o&&n.push(o),t.skipNewlines(),t.getPos()===s&&!o)break}t.expect(u.ESAC);let r=t.parseOptionalRedirections();return A.caseNode(e,n,r)}function Qn(t){t.check(u.LPAREN)&&t.advance();let e=[];for(;t.isWord()&&(e.push(t.parseWord()),t.check(u.PIPE));)t.advance();if(e.length===0)return null;t.expect(u.RPAREN),t.skipNewlines();let n=[];for(;!t.check(u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND,u.ESAC,u.EOF);){t.checkIterationLimit(),t.isWord()&&t.peek(1).type===u.RPAREN&&t.error("syntax error near unexpected token `)'"),t.check(u.LPAREN)&&t.peek(1).type===u.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(u.DSEMI)?(t.advance(),r=";;"):t.check(u.SEMI_AND)?(t.advance(),r=";&"):t.check(u.SEMI_SEMI_AND)&&(t.advance(),r=";;&"),A.caseItem(e,n,r)}function $t(t){t.peek(1).type,u.LPAREN,t.expect(u.LPAREN),t.check(u.LPAREN)&&t.advance();let e=t.parseCompoundList();t.expect(u.RPAREN);let n=t.parseOptionalRedirections();return A.subshell(e,n)}function vt(t){t.expect(u.LBRACE);let e=t.parseCompoundList();t.expect(u.RBRACE);let n=t.parseOptionalRedirections();return A.group(e,n)}var Xn=["-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"],Yn=["==","!=","=~","<",">","-eq","-ne","-lt","-le","-gt","-ge","-nt","-ot","-ef"];function It(t){return t.skipNewlines(),Jn(t)}function Jn(t){let e=Mr(t);for(t.skipNewlines();t.check(u.OR_OR);){t.advance(),t.skipNewlines();let n=Mr(t);e={type:"CondOr",left:e,right:n},t.skipNewlines()}return e}function Mr(t){let e=Pt(t);for(t.skipNewlines();t.check(u.AND_AND);){t.advance(),t.skipNewlines();let n=Pt(t);e={type:"CondAnd",left:e,right:n},t.skipNewlines()}return e}function Pt(t){return t.skipNewlines(),t.check(u.BANG)?(t.advance(),t.skipNewlines(),{type:"CondNot",operand:Pt(t)}):es(t)}function es(t){if(t.check(u.LPAREN)){t.advance();let e=It(t);return t.expect(u.RPAREN),{type:"CondGroup",expression:e}}if(t.isWord()){let e=t.current(),n=e.value;if(Xn.includes(n)&&!e.quoted&&(t.advance(),t.check(u.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()&&Yn.includes(t.current().value)){let s=t.advance().value,o=t.parseWord();return{type:"CondBinary",operator:s,left:r,right:o}}if(t.check(u.LESS)){t.advance();let s=t.parseWord();return{type:"CondBinary",operator:"<",left:r,right:s}}if(t.check(u.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 rs(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 ns(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 f=wt(t,e,s,"[","]");a+=e.slice(s,f+1),s=f+1}a===""&&!o&&!i&&e[s]!=="}"&&t.error(`\${${e[s]}}: bad substitution`);let c=null;if(o){let f=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([@*])\]$/);if(f)c={type:"ArrayKeys",array:f[1],star:f[2]==="*"},a="";else if(e[s]==="*"||e[s]==="@"){let h=e[s];s++,c={type:"VarNamePrefix",prefix:a,star:h==="*"},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 f=ss(t,e,s,a,r);c=f.operation,s=f.endIndex}if(s<e.length&&e[s]!=="}"){let f=e[s];if(!/[:\-+=?#%/^,@[]/.test(f)){let h=s;for(;h<e.length&&e[h]!=="}";)h++;let d=e.slice(n,h+1);t.error(`\${${d.slice(2,-1)}}: bad substitution`)}}for(;s<e.length&&e[s]!=="}";)s++;return{part:A.parameterExpansion(a,c),endIndex:s+1}}function ss(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=pe(t,e,o),w=e.slice(o,E),b=oe(t,w,!1,!1,!0,!1,s),P=A.word(b.length>0?b:[A.literal("")]);if(l==="-")return{operation:{type:"DefaultValue",word:P,checkEmpty:!0},endIndex:E};if(l==="=")return{operation:{type:"AssignDefault",word:P,checkEmpty:!0},endIndex:E};if(l==="?")return{operation:{type:"ErrorIfUnset",word:P,checkEmpty:!0},endIndex:E};if(l==="+")return{operation:{type:"UseAlternative",word:P,checkEmpty:!0},endIndex:E}}o++;let c=pe(t,e,o),f=e.slice(o,c),h=-1,d=0,p=0;for(let m=0;m<f.length;m++){let E=f[m];if(E==="("||E==="[")d++;else if(E===")"||E==="]")d--;else if(E==="?"&&d===0)p++;else if(E===":"&&d===0)if(p>0)p--;else{h=m;break}}let y=h>=0?f.slice(0,h):f,g=h>=0?f.slice(h+1):null;return{operation:{type:"Substring",offset:gt(t,y),length:g?gt(t,g):null},endIndex:c}}if("-=?+".includes(i)){o++;let l=pe(t,e,o),c=e.slice(o,l),f=oe(t,c,!1,!1,!0,!1,s),h=A.word(f.length>0?f:[A.literal("")]);if(i==="-")return{operation:{type:"DefaultValue",word:h,checkEmpty:!1},endIndex:l};if(i==="=")return{operation:{type:"AssignDefault",word:h,checkEmpty:!1},endIndex:l};if(i==="?")return{operation:{type:"ErrorIfUnset",word:c?h:null,checkEmpty:!1},endIndex:l};if(i==="+")return{operation:{type:"UseAlternative",word:h,checkEmpty:!1},endIndex:l}}if(i==="#"||i==="%"){let l=a===i,c=i==="#"?"prefix":"suffix";o+=l?2:1;let f=pe(t,e,o),h=e.slice(o,f),d=oe(t,h,!1,!1,!1);return{operation:{type:"PatternRemoval",pattern:A.word(d.length>0?d:[A.literal("")]),side:c,greedy:l},endIndex:f}}if(i==="/"){let l=a==="/";o+=l?2:1;let c=null;e[o]==="#"?(c="start",o++):e[o]==="%"&&(c="end",o++);let f=Rr(t,e,o),h=e.slice(o,f),d=oe(t,h,!1,!1,!1),p=A.word(d.length>0?d:[A.literal("")]),y=null,g=f;if(e[f]==="/"){let m=f+1,E=pe(t,e,m),w=e.slice(m,E),b=oe(t,w,!1,!1,!1);y=A.word(b.length>0?b:[A.literal("")]),g=E}return{operation:{type:"PatternReplacement",pattern:p,replacement:y,all:l,anchor:c},endIndex:g}}if(i==="^"||i===","){let l=a===i,c=i==="^"?"upper":"lower";o+=l?2:1;let f=pe(t,e,o),h=e.slice(o,f),d=h?A.word([A.literal(h)]):null;return{operation:{type:"CaseModification",direction:c,all:l,pattern:d},endIndex:f}}return i==="@"&&/[QPaAEK]/.test(a)?{operation:{type:"Transform",operator:a},endIndex:o+2}:{operation:null,endIndex:o}}function kt(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==="{"?ns(t,e,n,r):/[a-zA-Z_0-9@*#?$!-]/.test(o)?rs(t,e,n):{part:A.literal("$"),endIndex:s}}function is(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}=kt(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 os(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}=kt(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 oe(t,e,n=!1,r=!1,s=!1,o=!1,i=!1){if(r)return[A.singleQuoted(e)];if(n){let h=is(t,e);return[A.doubleQuoted(h)]}let a=[],l=0,c="",f=()=>{c&&(a.push(A.literal(c)),c="")};for(;l<e.length;){let h=e[l];if(h==="\\"&&l+1<e.length){let d=e[l+1];(o?d==="$"||d==="`"||d==="\\"||d===`
23
+ `,this.pos++,this.line++,this.column=1)}this.tokens.push({type:u.HEREDOC_CONTENT,value:o,start:s,end:this.pos,line:r,column:n})}}addPendingHeredoc(e,s,r){this.pendingHeredocs.push({delimiter:e,stripTabs:s,quoted:r})}registerHeredocFromLookahead(e){let s=this.pos,r=this.column;for(;this.pos<this.input.length&&(this.input[this.pos]===" "||this.input[this.pos]===" ");)this.pos++,this.column++;let n="",o=!1,i=this.input[this.pos];if(i==="'"||i==='"'){o=!0;let a=i;for(this.pos++,this.column++;this.pos<this.input.length&&this.input[this.pos]!==a;)n+=this.input[this.pos],this.pos++,this.column++}else for(;this.pos<this.input.length&&!/[\s;<>&|()]/.test(this.input[this.pos]);)n+=this.input[this.pos],this.pos++,this.column++;this.pos=s,this.column=r,n&&this.pendingHeredocs.push({delimiter:n,stripTabs:e,quoted:o})}isWordCharFollowing(e){if(e>=this.input.length)return!1;let s=this.input[e];return!(s===" "||s===" "||s===`
24
+ `||s===";"||s==="&"||s==="|"||s==="("||s===")"||s==="<"||s===">")}readWordWithBraceExpansion(e,s,r){let n=this.input,o=n.length,i=e,a=r;for(;i<o;){let c=n[i];if(c===" "||c===" "||c===`
25
+ `||c===";"||c==="&"||c==="|"||c==="("||c===")"||c==="<"||c===">")break;if(c==="{"){if(this.scanBraceExpansion(i)!==null){let h=1;for(i++,a++;i<o&&h>0;)n[i]==="{"?h++:n[i]==="}"&&h--,i++,a++;continue}i++,a++;continue}if(c==="}"){i++,a++;continue}if(c==="$"&&i+1<o&&n[i+1]==="("){i++,a++,i++,a++;let f=1;for(;f>0&&i<o;)n[i]==="("?f++:n[i]===")"&&f--,i++,a++;continue}if(c==="$"&&i+1<o&&n[i+1]==="{"){i++,a++,i++,a++;let f=1;for(;f>0&&i<o;)n[i]==="{"?f++:n[i]==="}"&&f--,i++,a++;continue}if(c==="`"){for(i++,a++;i<o&&n[i]!=="`";)n[i]==="\\"&&i+1<o?(i+=2,a+=2):(i++,a++);i<o&&(i++,a++);continue}i++,a++}let l=n.slice(e,i);return this.pos=i,this.column=a,{type:u.WORD,value:l,start:e,end:i,line:s,column:r,quoted:!1,singleQuoted:!1}}scanBraceExpansion(e){let s=this.input,r=s.length,n=e+1,o=1,i=!1,a=!1;for(;n<r&&o>0;){let l=s[n];if(l==="{")o++,n++;else if(l==="}")o--,n++;else if(l===","&&o===1)i=!0,n++;else if(l==="."&&n+1<r&&s[n+1]===".")a=!0,n+=2;else{if(l===" "||l===" "||l===`
26
+ `||l===";"||l==="&"||l==="|")return null;n++}}return o===0&&(i||a)?s.slice(e,n):null}scanLiteralBraceWord(e){let s=this.input,r=s.length,n=e+1,o=1;for(;n<r&&o>0;){let i=s[n];if(i==="{")o++,n++;else if(i==="}"){if(o--,o===0)return s.slice(e,n+1);n++}else{if(i===" "||i===" "||i===`
27
+ `||i===";"||i==="&"||i==="|")return null;n++}}return null}};var yt=1e6,Et=1e5,$r=1e6,vr=new Set([u.LESS,u.GREAT,u.DLESS,u.DGREAT,u.LESSAND,u.GREATAND,u.LESSGREAT,u.DLESSDASH,u.CLOBBER,u.TLESS,u.AND_GREAT,u.AND_DGREAT]),Pr=new Set([u.LESS,u.GREAT,u.DLESS,u.DGREAT,u.LESSAND,u.GREATAND,u.LESSGREAT,u.DLESSDASH,u.CLOBBER,u.TLESS]),ee=class extends Error{line;column;token;constructor(e,s,r,n=void 0){super(`Parse error at ${s}:${r}: ${e}`),this.line=s,this.column=r,this.token=n,this.name="ParseException"}};function kr(t,e,s){let r=s+1;for(;r<e.length&&/[a-zA-Z0-9_-]/.test(e[r]);)r++;return r}function wt(t,e,s,r,n){let o=1,i=s+1;for(;i<e.length&&o>0;)e[i]===r?o++:e[i]===n&&o--,o>0&&i++;return o===0?i:-1}function pe(t,e,s){let r=s,n=1;for(;r<e.length&&n>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==="{"?n++:o==="}"&&n--,n>0&&r++}return r}function Rr(t,e,s){let r=s,n=!1;for(;r<e.length;){let o=e[r];if(o==="/"&&n||o==="}")break;if(o==="'"){let i=e.indexOf("'",r+1);if(i!==-1){r=i+1,n=!0;continue}}if(o==='"'){for(r++;r<e.length&&e[r]!=='"';)e[r]==="\\"&&r+1<e.length?r+=2:r++;r<e.length&&r++,n=!0;continue}o==="\\"?(r+=2,n=!0):(r++,n=!0)}return r}function Dr(t,e,s){let r=s,n="";for(;r<e.length;){let o=e[r];if(o==="*"||o==="?")n+=o,r++;else if(o==="["){let i=js(e,r);i===-1?(n+=o,r++):(n+=e.slice(r,i+1),r=i+1)}else break}return{pattern:n,endIndex:r}}function js(t,e){let s=e+1;for(s<t.length&&t[s]==="^"&&s++,s<t.length&&t[s]==="]"&&s++;s<t.length;){let r=t[s];if(r==="\\"&&s+1<t.length){s+=2;continue}if(r==="]")return s;if(r==='"'||r==="$"||r==="`")return-1;if(r==="'"){let n=t.indexOf("'",s+1);if(n!==-1){s=n+1;continue}}if(r==="["&&s+1<t.length&&t[s+1]===":"){let n=t.indexOf(":]",s+2);if(n!==-1){s=n+2;continue}}if(r==="["&&s+1<t.length&&(t[s+1]==="."||t[s+1]==="=")){let o=`${t[s+1]}]`,i=t.indexOf(o,s+2);if(i!==-1){s=i+2;continue}}s++}return-1}function Or(t,e,s){let r="",n=s;for(;n<e.length&&e[n]!=="'";){let o=e[n];if(o==="\\"&&n+1<e.length)switch(e[n+1]){case"n":r+=`
28
+ `,n+=2;break;case"t":r+=" ",n+=2;break;case"r":r+="\r",n+=2;break;case"\\":r+="\\",n+=2;break;case"'":r+="'",n+=2;break;case'"':r+='"',n+=2;break;case"a":r+="\x07",n+=2;break;case"b":r+="\b",n+=2;break;case"e":case"E":r+="\x1B",n+=2;break;case"f":r+="\f",n+=2;break;case"v":r+="\v",n+=2;break;case"x":{let a=e.slice(n+2,n+4),l=parseInt(a,16);Number.isNaN(l)?(r+="\\x",n+=2):(r+=String.fromCharCode(l),n+=4);break}case"u":{let a=e.slice(n+2,n+6),l=parseInt(a,16);Number.isNaN(l)?(r+="\\u",n+=2):(r+=String.fromCharCode(l),n+=6);break}case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":{let a="",l=n+1;for(;l<e.length&&l<n+4&&/[0-7]/.test(e[l]);)a+=e[l],l++;let c=parseInt(a,8);r+=String.fromCharCode(c),n=l;break}default:r+=o,n++}else r+=o,n++}return n<e.length&&e[n]==="'"&&n++,{part:A.literal(r),endIndex:n}}function gt(t,e){let s=e.trim();return s===""?{type:"ArithmeticExpression",expression:{type:"ArithNumber",value:0}}:L(t,s)}function Ir(t){let e=[],s="",r=0;for(let n=0;n<t.length;n++){let o=t[n];o==="{"?(r++,s+=o):o==="}"?(r--,s+=o):o===","&&r===0?(e.push(s),s=""):s+=o}return e.push(s),e}function _r(t,e,s,r){let n=wt(t,e,s,"{","}");if(n===-1)return null;let o=e.slice(s+1,n),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:n+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:n+1}:o.includes(",")&&r?{part:{type:"BraceExpansion",items:Ir(o).map(f=>({type:"Word",word:A.word(r(t,f,!1,!1,!1))}))},endIndex:n+1}:o.includes(",")?{part:{type:"BraceExpansion",items:Ir(o).map(f=>({type:"Word",word:A.word([A.literal(f)])}))},endIndex:n+1}:null}function Lr(t,e){let s="";for(let r of e.parts)switch(r.type){case"Literal":case"SingleQuoted":case"Escaped":s+=r.value;break;case"DoubleQuoted":s+='"';for(let n of r.parts)n.type==="Literal"||n.type==="Escaped"?s+=n.value:n.type==="ParameterExpansion"&&(s+=`\${${n.parameter}}`);s+='"';break;case"ParameterExpansion":s+=`\${${r.parameter}}`;break;case"Glob":s+=r.pattern;break;default:s+=r.type}return s}function Tr(t,e){return{[u.LESS]:"<",[u.GREAT]:">",[u.DGREAT]:">>",[u.LESSAND]:"<&",[u.GREATAND]:">&",[u.LESSGREAT]:"<>",[u.CLOBBER]:">|",[u.TLESS]:"<<<",[u.AND_GREAT]:"&>",[u.AND_DGREAT]:"&>>",[u.DLESS]:"<",[u.DLESSDASH]:"<"}[e]||">"}function Ge(t){let e=t.current(),s=e.type;if(s===u.NUMBER){let r=t.peek(1);return e.end!==r.start?!1:Pr.has(r.type)}return vr.has(s)}function Ve(t){let e=null;t.check(u.NUMBER)&&(e=Number.parseInt(t.advance().value,10));let s=t.advance(),r=Tr(t,s.type);if(s.type===u.DLESS||s.type===u.DLESSDASH)return Gs(t,r,e,s.type===u.DLESSDASH);t.isWord()||t.error("Expected redirection target");let n=t.parseWord();return A.redirection(r,n,e)}function Gs(t,e,s,r){t.isWord()||t.error("Expected here-document delimiter");let n=t.advance(),o=n.value,i=n.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),s);return t.addPendingHeredoc(a,o,r,i),a}function Fr(t){let e=[],s=null,r=[],n=[];for(;t.check(u.ASSIGNMENT_WORD);)t.checkIterationLimit(),e.push(Vs(t));for(;Ge(t);)t.checkIterationLimit(),n.push(Ve(t));for(t.isWord()&&(s=t.parseWord());(!t.isStatementEnd()||t.check(u.RBRACE))&&!t.check(u.PIPE,u.PIPE_AMP);)if(t.checkIterationLimit(),Ge(t))n.push(Ve(t));else if(t.check(u.RBRACE)){let o=t.advance();r.push(t.parseWordFromString(o.value,!1,!1))}else if(t.isWord())r.push(t.parseWord());else if(t.check(u.ASSIGNMENT_WORD)){let o=t.advance(),i=o.value,a=i.endsWith("="),l=i.endsWith("=(");if((a||l)&&(l||t.check(u.LPAREN))){let c=l?i.slice(0,-2):i.slice(0,-1);l||t.expect(u.LPAREN);let f=At(t);t.expect(u.RPAREN);let h=f.map(p=>Lr(t,p)),d=`${c}=(${h.join(" ")})`;r.push(t.parseWordFromString(d,!1,!1))}else r.push(t.parseWordFromString(i,o.quoted,o.singleQuoted))}else if(t.check(u.LPAREN))t.error("syntax error near unexpected token `('");else break;return A.simpleCommand(s,r,e,n)}function Vs(t){let e=t.expect(u.ASSIGNMENT_WORD),s=e.value,r=s.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);r||t.error(`Invalid assignment: ${s}`);let n=r[0],o,i=n.length;if(s[i]==="["){let h=0,d=i+1;for(;i<s.length;i++)if(s[i]==="[")h++;else if(s[i]==="]"&&(h--,h===0))break;h!==0&&t.error(`Invalid assignment: ${s}`),o=s.slice(d,i),i++}let a=s[i]==="+";a&&i++,s[i]!=="="&&t.error(`Invalid assignment: ${s}`),i++;let l=s.slice(i);if(l==="("){let h=At(t);t.expect(u.RPAREN);let d=o!==void 0?`${n}[${o}]`:n;return A.assignment(d,null,a,h)}if(l===""&&t.check(u.LPAREN)){let h=t.current();if(e.end===h.start){t.advance();let d=At(t);t.expect(u.RPAREN);let p=o!==void 0?`${n}[${o}]`:n;return A.assignment(p,null,a,d)}}let c=l?t.parseWordFromString(l,e.quoted,e.singleQuoted,!0):null,f=o!==void 0?`${n}[${o}]`:n;return A.assignment(f,c,a,null)}function At(t){let e=[];for(t.skipNewlines();!t.check(u.RPAREN,u.EOF);)t.checkIterationLimit(),t.isWord()?e.push(t.parseWord()):t.advance(),t.skipNewlines();return e}function xt(t){t.expect(u.IF);let e=[],s=t.parseCompoundList();t.expect(u.THEN);let r=t.parseCompoundList();if(r.length===0){let i=t.check(u.FI)?"fi":t.check(u.ELSE)?"else":t.check(u.ELIF)?"elif":"fi";t.error(`syntax error near unexpected token \`${i}'`)}for(e.push({condition:s,body:r});t.check(u.ELIF);){t.advance();let i=t.parseCompoundList();t.expect(u.THEN);let a=t.parseCompoundList();if(a.length===0){let l=t.check(u.FI)?"fi":t.check(u.ELSE)?"else":t.check(u.ELIF)?"elif":"fi";t.error(`syntax error near unexpected token \`${l}'`)}e.push({condition:i,body:a})}let n=null;t.check(u.ELSE)&&(t.advance(),n=t.parseCompoundList(),n.length===0&&t.error("syntax error near unexpected token `fi'")),t.expect(u.FI);let o=t.parseOptionalRedirections();return A.ifNode(e,n,o)}function St(t){if(t.expect(u.FOR),t.check(u.DPAREN_START))return Zs(t);t.isWord()||t.error("Expected variable name in for loop");let s=t.advance().value,r=null;if(t.skipNewlines(),t.check(u.IN))for(t.advance(),r=[];!t.check(u.SEMICOLON,u.NEWLINE,u.DO,u.EOF)&&t.isWord();)r.push(t.parseWord());t.check(u.SEMICOLON)&&t.advance(),t.skipNewlines(),t.expect(u.DO);let n=t.parseCompoundList();t.expect(u.DONE);let o=t.parseOptionalRedirections();return A.forNode(s,r,n,o)}function Zs(t){t.expect(u.DPAREN_START);let e=null,s=null,r=null,n=["","",""],o=0,i=0;for(;!t.check(u.DPAREN_END,u.EOF);){let c=t.advance();if(c.type===u.SEMICOLON&&i===0){if(o++,o>2)break}else c.value==="("&&i++,c.value===")"&&i--,n[o]+=c.value}t.expect(u.DPAREN_END),n[0].trim()&&(e=L(t,n[0].trim())),n[1].trim()&&(s=L(t,n[1].trim())),n[2].trim()&&(r=L(t,n[2].trim())),t.skipNewlines(),t.check(u.SEMICOLON)&&t.advance(),t.skipNewlines(),t.expect(u.DO);let a=t.parseCompoundList();t.expect(u.DONE);let l=t.parseOptionalRedirections();return{type:"CStyleFor",init:e,condition:s,update:r,body:a,redirections:l}}function bt(t){t.expect(u.WHILE);let e=t.parseCompoundList();t.expect(u.DO);let s=t.parseCompoundList();s.length===0&&t.error("syntax error near unexpected token `done'"),t.expect(u.DONE);let r=t.parseOptionalRedirections();return A.whileNode(e,s,r)}function Ct(t){t.expect(u.UNTIL);let e=t.parseCompoundList();t.expect(u.DO);let s=t.parseCompoundList();s.length===0&&t.error("syntax error near unexpected token `done'"),t.expect(u.DONE);let r=t.parseOptionalRedirections();return A.untilNode(e,s,r)}function Nt(t){t.expect(u.CASE),t.isWord()||t.error("Expected word after 'case'");let e=t.parseWord();t.skipNewlines(),t.expect(u.IN),t.skipNewlines();let s=[];for(;!t.check(u.ESAC,u.EOF);){t.checkIterationLimit();let n=t.getPos(),o=qs(t);if(o&&s.push(o),t.skipNewlines(),t.getPos()===n&&!o)break}t.expect(u.ESAC);let r=t.parseOptionalRedirections();return A.caseNode(e,s,r)}function qs(t){t.check(u.LPAREN)&&t.advance();let e=[];for(;t.isWord()&&(e.push(t.parseWord()),t.check(u.PIPE));)t.advance();if(e.length===0)return null;t.expect(u.RPAREN),t.skipNewlines();let s=[];for(;!t.check(u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND,u.ESAC,u.EOF);){t.checkIterationLimit(),t.isWord()&&t.peek(1).type===u.RPAREN&&t.error("syntax error near unexpected token `)'"),t.check(u.LPAREN)&&t.peek(1).type===u.WORD&&t.error(`syntax error near unexpected token \`${t.peek(1).value}'`);let n=t.getPos(),o=t.parseStatement();if(o&&s.push(o),t.skipSeparators(!1),t.getPos()===n&&!o)break}let r=";;";return t.check(u.DSEMI)?(t.advance(),r=";;"):t.check(u.SEMI_AND)?(t.advance(),r=";&"):t.check(u.SEMI_SEMI_AND)&&(t.advance(),r=";;&"),A.caseItem(e,s,r)}function $t(t){t.peek(1).type,u.LPAREN,t.expect(u.LPAREN),t.check(u.LPAREN)&&t.advance();let e=t.parseCompoundList();t.expect(u.RPAREN);let s=t.parseOptionalRedirections();return A.subshell(e,s)}function vt(t){t.expect(u.LBRACE);let e=t.parseCompoundList();t.expect(u.RBRACE);let s=t.parseOptionalRedirections();return A.group(e,s)}var Ks=["-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"],Xs=["==","!=","=~","<",">","-eq","-ne","-lt","-le","-gt","-ge","-nt","-ot","-ef"];function It(t){return t.skipNewlines(),Ys(t)}function Ys(t){let e=Mr(t);for(t.skipNewlines();t.check(u.OR_OR);){t.advance(),t.skipNewlines();let s=Mr(t);e={type:"CondOr",left:e,right:s},t.skipNewlines()}return e}function Mr(t){let e=Pt(t);for(t.skipNewlines();t.check(u.AND_AND);){t.advance(),t.skipNewlines();let s=Pt(t);e={type:"CondAnd",left:e,right:s},t.skipNewlines()}return e}function Pt(t){return t.skipNewlines(),t.check(u.BANG)?(t.advance(),t.skipNewlines(),{type:"CondNot",operand:Pt(t)}):Js(t)}function Js(t){if(t.check(u.LPAREN)){t.advance();let e=It(t);return t.expect(u.RPAREN),{type:"CondGroup",expression:e}}if(t.isWord()){let e=t.current(),s=e.value;if(Ks.includes(s)&&!e.quoted&&(t.advance(),t.check(u.DBRACK_END)&&t.error(`Expected operand after ${s}`),t.isWord())){let n=t.parseWord();return{type:"CondUnary",operator:s,operand:n}}let r=t.parseWord();if(t.isWord()&&Xs.includes(t.current().value)){let n=t.advance().value,o=t.parseWord();return{type:"CondBinary",operator:n,left:r,right:o}}if(t.check(u.LESS)){t.advance();let n=t.parseWord();return{type:"CondBinary",operator:"<",left:r,right:n}}if(t.check(u.GREAT)){t.advance();let n=t.parseWord();return{type:"CondBinary",operator:">",left:r,right:n}}if(t.isWord()&&t.current().value==="="){t.advance();let n=t.parseWord();return{type:"CondBinary",operator:"==",left:r,right:n}}return{type:"CondWord",word:r}}t.error("Expected conditional expression")}function tn(t,e,s){let r=s+1,n=e[r];if("@*#?$!-0123456789".includes(n))return{part:A.parameterExpansion(n),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 rn(t,e,s,r=!1){let n=s+2,o=!1;e[n]==="!"&&(o=!0,n++);let i=!1;e[n]==="#"&&!/[}:#%/^,]/.test(e[n+1]||"}")&&(i=!0,n++);let a="",l=e[n];if(/[@*#?$!-]/.test(l)&&!/[a-zA-Z0-9_]/.test(e[n+1]||""))a=l,n++;else for(;n<e.length&&/[a-zA-Z0-9_]/.test(e[n]);)a+=e[n],n++;if(e[n]==="["){let f=wt(t,e,n,"[","]");a+=e.slice(n,f+1),n=f+1}a===""&&!o&&!i&&e[n]!=="}"&&t.error(`\${${e[n]}}: bad substitution`);let c=null;if(o){let f=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([@*])\]$/);if(f)c={type:"ArrayKeys",array:f[1],star:f[2]==="*"},a="";else if(e[n]==="*"||e[n]==="@"){let h=e[n];n++,c={type:"VarNamePrefix",prefix:a,star:h==="*"},a=""}else c={type:"Indirection"}}else if(i)if(e[n]===":")for(c={type:"LengthSliceError"};n<e.length&&e[n]!=="}";)n++;else e[n]!=="}"&&/[-+=?]/.test(e[n])?t.error(`\${#${a}${e.slice(n,e.indexOf("}",n))}}: bad substitution`):c={type:"Length"};if(!c&&n<e.length&&e[n]!=="}"){let f=sn(t,e,n,a,r);c=f.operation,n=f.endIndex}if(n<e.length&&e[n]!=="}"){let f=e[n];if(!/[:\-+=?#%/^,@[]/.test(f)){let h=n;for(;h<e.length&&e[h]!=="}";)h++;let d=e.slice(s,h+1);t.error(`\${${d.slice(2,-1)}}: bad substitution`)}}for(;n<e.length&&e[n]!=="}";)n++;return{part:A.parameterExpansion(a,c),endIndex:n+1}}function sn(t,e,s,r,n=!1){let o=s,i=e[o],a=e[o+1]||"";if(i===":"){let l=a;if("-=?+".includes(l)){o+=2;let E=pe(t,e,o),w=e.slice(o,E),b=oe(t,w,!1,!1,!0,!1,n),P=A.word(b.length>0?b:[A.literal("")]);if(l==="-")return{operation:{type:"DefaultValue",word:P,checkEmpty:!0},endIndex:E};if(l==="=")return{operation:{type:"AssignDefault",word:P,checkEmpty:!0},endIndex:E};if(l==="?")return{operation:{type:"ErrorIfUnset",word:P,checkEmpty:!0},endIndex:E};if(l==="+")return{operation:{type:"UseAlternative",word:P,checkEmpty:!0},endIndex:E}}o++;let c=pe(t,e,o),f=e.slice(o,c),h=-1,d=0,p=0;for(let m=0;m<f.length;m++){let E=f[m];if(E==="("||E==="[")d++;else if(E===")"||E==="]")d--;else if(E==="?"&&d===0)p++;else if(E===":"&&d===0)if(p>0)p--;else{h=m;break}}let y=h>=0?f.slice(0,h):f,g=h>=0?f.slice(h+1):null;return{operation:{type:"Substring",offset:gt(t,y),length:g?gt(t,g):null},endIndex:c}}if("-=?+".includes(i)){o++;let l=pe(t,e,o),c=e.slice(o,l),f=oe(t,c,!1,!1,!0,!1,n),h=A.word(f.length>0?f:[A.literal("")]);if(i==="-")return{operation:{type:"DefaultValue",word:h,checkEmpty:!1},endIndex:l};if(i==="=")return{operation:{type:"AssignDefault",word:h,checkEmpty:!1},endIndex:l};if(i==="?")return{operation:{type:"ErrorIfUnset",word:c?h:null,checkEmpty:!1},endIndex:l};if(i==="+")return{operation:{type:"UseAlternative",word:h,checkEmpty:!1},endIndex:l}}if(i==="#"||i==="%"){let l=a===i,c=i==="#"?"prefix":"suffix";o+=l?2:1;let f=pe(t,e,o),h=e.slice(o,f),d=oe(t,h,!1,!1,!1);return{operation:{type:"PatternRemoval",pattern:A.word(d.length>0?d:[A.literal("")]),side:c,greedy:l},endIndex:f}}if(i==="/"){let l=a==="/";o+=l?2:1;let c=null;e[o]==="#"?(c="start",o++):e[o]==="%"&&(c="end",o++);let f=Rr(t,e,o),h=e.slice(o,f),d=oe(t,h,!1,!1,!1),p=A.word(d.length>0?d:[A.literal("")]),y=null,g=f;if(e[f]==="/"){let m=f+1,E=pe(t,e,m),w=e.slice(m,E),b=oe(t,w,!1,!1,!1);y=A.word(b.length>0?b:[A.literal("")]),g=E}return{operation:{type:"PatternReplacement",pattern:p,replacement:y,all:l,anchor:c},endIndex:g}}if(i==="^"||i===","){let l=a===i,c=i==="^"?"upper":"lower";o+=l?2:1;let f=pe(t,e,o),h=e.slice(o,f),d=h?A.word([A.literal(h)]):null;return{operation:{type:"CaseModification",direction:c,all:l,pattern:d},endIndex:f}}return i==="@"&&/[QPaAEK]/.test(a)?{operation:{type:"Transform",operator:a},endIndex:o+2}:{operation:null,endIndex:o}}function kt(t,e,s,r=!1){let n=s+1;if(n>=e.length)return{part:A.literal("$"),endIndex:n};let o=e[n];if(o==="("&&e[n+1]==="(")return t.parseArithmeticExpansion(e,s);if(o==="["){let i=1,a=n+1;for(;a<e.length&&i>0;)e[a]==="["?i++:e[a]==="]"&&i--,i>0&&a++;if(i===0){let l=e.slice(n+1,a),c=L(t,l);return{part:A.arithmeticExpansion(c),endIndex:a+1}}}return o==="("?t.parseCommandSubstitution(e,s):o==="{"?rn(t,e,s,r):/[a-zA-Z_0-9@*#?$!-]/.test(o)?tn(t,e,s):{part:A.literal("$"),endIndex:n}}function nn(t,e){let s=[],r=0,n="",o=()=>{n&&(s.push(A.literal(n)),n="")};for(;r<e.length;){let i=e[r];if(i==="\\"&&r+1<e.length){let a=e[r+1];if(a==="$"||a==="`"){n+=a,r+=2;continue}n+=i,r++;continue}if(i==="$"){o();let{part:a,endIndex:l}=kt(t,e,r,!0);a&&s.push(a),r=l;continue}if(i==="`"){o();let{part:a,endIndex:l}=t.parseBacktickSubstitution(e,r,!0);s.push(a),r=l;continue}n+=i,r++}return o(),s}function on(t,e,s){let r=[],n=s,o="",i=()=>{o&&(r.push(A.literal(o)),o="")};for(;n<e.length&&e[n]!=='"';){let a=e[n];if(a==="\\"&&n+1<e.length){let l=e[n+1];if('"\\$`\n'.includes(l)){o+=l,n+=2;continue}o+=a,n++;continue}if(a==="$"){i();let{part:l,endIndex:c}=kt(t,e,n,!0);l&&r.push(l),n=c;continue}if(a==="`"){i();let{part:l,endIndex:c}=t.parseBacktickSubstitution(e,n,!0);r.push(l),n=c;continue}o+=a,n++}return i(),{part:A.doubleQuoted(r),endIndex:n}}function oe(t,e,s=!1,r=!1,n=!1,o=!1,i=!1){if(r)return[A.singleQuoted(e)];if(s){let h=nn(t,e);return[A.doubleQuoted(h)]}let a=[],l=0,c="",f=()=>{c&&(a.push(A.literal(c)),c="")};for(;l<e.length;){let h=e[l];if(h==="\\"&&l+1<e.length){let d=e[l+1];(o?d==="$"||d==="`"||d==="\\"||d===`
29
29
  `:d==="$"||d==="`"||d==="\\"||d==='"'||d===`
30
- `)?c+=d:c+=`\\${d}`,l+=2;continue}if(h==="'"&&!i){f();let d=e.indexOf("'",l+1);if(d===-1){c+=e.slice(l);break}a.push(A.singleQuoted(e.slice(l+1,d))),l=d+1;continue}if(h==='"'){f();let{part:d,endIndex:p}=os(t,e,l+1);a.push(d),l=p+1;continue}if(h==="$"&&e[l+1]==="'"){f();let{part:d,endIndex:p}=Or(t,e,l+2);a.push(d),l=p;continue}if(h==="$"){f();let{part:d,endIndex:p}=kt(t,e,l);d&&a.push(d),l=p;continue}if(h==="`"){f();let{part:d,endIndex:p}=t.parseBacktickSubstitution(e,l);a.push(d),l=p;continue}if(h==="~"){let d=l>0?e[l-1]:"";if(l===0||d==="="||s&&d===":"){let y=kr(t,e,l),g=e[y];if(g===void 0||g==="/"||g===":"){f();let m=e.slice(l+1,y)||null;a.push({type:"TildeExpansion",user:m}),l=y;continue}}}if(h==="*"||h==="?"||h==="["){f();let{pattern:d,endIndex:p}=Dr(t,e,l);a.push({type:"Glob",pattern:d}),l=p;continue}if(h==="{"&&!s){let d=_r(t,e,l,oe);if(d){f(),a.push(d.part),l=d.endIndex;continue}}c+=h,l++}return f(),a}var F=class t{tokens=[];pos=0;pendingHeredocs=[];parseIterations=0;checkIterationLimit(){if(this.parseIterations++,this.parseIterations>$r)throw new ee("Maximum parse iterations exceeded (possible infinite loop)",this.current().line,this.current().column)}parse(e){if(e.length>yt)throw new ee(`Input too large: ${e.length} bytes exceeds limit of ${yt}`,1,1);let n=new je(e);if(this.tokens=n.tokenize(),this.tokens.length>Et)throw new ee(`Too many tokens: ${this.tokens.length} exceeds limit of ${Et}`,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 ee(n||`Expected ${e}, got ${r.type}`,r.line,r.column,r)}error(e){let n=this.current();throw new ee(e,n.line,n.column,n)}skipNewlines(){for(;this.check(u.NEWLINE,u.COMMENT);)this.check(u.NEWLINE)?(this.advance(),this.processHeredocs()):this.advance()}skipSeparators(e=!0){for(;;){if(this.check(u.NEWLINE)){this.advance(),this.processHeredocs();continue}if(this.check(u.SEMICOLON,u.COMMENT)){this.advance();continue}if(e&&this.check(u.DSEMI,u.SEMI_AND,u.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(u.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(u.EOF,u.NEWLINE,u.SEMICOLON,u.AMP,u.AND_AND,u.OR_OR,u.RPAREN,u.RBRACE,u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)}isCommandStart(){let e=this.current().type;return e===u.WORD||e===u.NAME||e===u.NUMBER||e===u.ASSIGNMENT_WORD||e===u.IF||e===u.FOR||e===u.WHILE||e===u.UNTIL||e===u.CASE||e===u.LPAREN||e===u.LBRACE||e===u.DPAREN_START||e===u.DBRACK_START||e===u.FUNCTION||e===u.BANG||e===u.IN}parseScript(){let e=[],r=0;for(this.skipNewlines();!this.check(u.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(u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)&&this.error(`syntax error near unexpected token \`${this.current().value}'`),this.pos===s&&!this.check(u.EOF)&&this.advance()}return A.script(e)}checkUnexpectedToken(){let e=this.current().type,n=this.current().value;(e===u.DO||e===u.DONE||e===u.THEN||e===u.ELSE||e===u.ELIF||e===u.FI||e===u.ESAC)&&this.error(`syntax error near unexpected token \`${n}'`),(e===u.RBRACE||e===u.RPAREN)&&this.error(`syntax error near unexpected token \`${n}'`),(e===u.DSEMI||e===u.SEMI_AND||e===u.SEMI_SEMI_AND)&&this.error(`syntax error near unexpected token \`${n}'`),e===u.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(u.AND_AND,u.OR_OR);){let o=this.advance();n.push(o.type===u.AND_AND?"&&":"||"),this.skipNewlines();let i=this.parsePipeline();e.push(i)}return this.check(u.AMP)&&(this.advance(),r=!0),A.statement(e,n,r)}parsePipeline(){let e=0;for(;this.check(u.BANG);)this.advance(),e++;let n=e%2===1,r=[],s=this.parseCommand();for(r.push(s);this.check(u.PIPE,u.PIPE_AMP);){let o=this.advance();this.skipNewlines();let i=this.parseCommand();o.type===u.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(u.IF)?xt(this):this.check(u.FOR)?St(this):this.check(u.WHILE)?bt(this):this.check(u.UNTIL)?Nt(this):this.check(u.CASE)?Ct(this):this.check(u.LPAREN)?$t(this):this.check(u.LBRACE)?vt(this):this.check(u.DPAREN_START)?this.parseArithmeticCommand():this.check(u.DBRACK_START)?this.parseConditionalCommand():this.check(u.FUNCTION)?this.parseFunctionDef():this.check(u.NAME,u.WORD)&&this.peek(1).type===u.LPAREN&&this.peek(2).type===u.RPAREN?this.parseFunctionDef():Fr(this)}isWord(){let e=this.current().type;return e===u.WORD||e===u.NAME||e===u.NUMBER||e===u.IF||e===u.FOR||e===u.WHILE||e===u.UNTIL||e===u.CASE||e===u.FUNCTION||e===u.ELSE||e===u.ELIF||e===u.FI||e===u.THEN||e===u.DO||e===u.DONE||e===u.ESAC||e===u.IN||e===u.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=oe(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,f="";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,f=""):y==='"'?(a=!0,f=""):y==="\\"&&o+1<e.length?(o++,f=""):/[a-zA-Z_]/.test(y)?f+=y:(f==="case"?(l++,c=!1):f==="in"&&l>0?c=!0:f==="esac"&&l>0&&(l--,c=!1),f="",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 h=e.slice(r,o),p=new t().parse(h);return{part:A.commandSubstitution(p,!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===`
30
+ `)?c+=d:c+=`\\${d}`,l+=2;continue}if(h==="'"&&!i){f();let d=e.indexOf("'",l+1);if(d===-1){c+=e.slice(l);break}a.push(A.singleQuoted(e.slice(l+1,d))),l=d+1;continue}if(h==='"'){f();let{part:d,endIndex:p}=on(t,e,l+1);a.push(d),l=p+1;continue}if(h==="$"&&e[l+1]==="'"){f();let{part:d,endIndex:p}=Or(t,e,l+2);a.push(d),l=p;continue}if(h==="$"){f();let{part:d,endIndex:p}=kt(t,e,l);d&&a.push(d),l=p;continue}if(h==="`"){f();let{part:d,endIndex:p}=t.parseBacktickSubstitution(e,l);a.push(d),l=p;continue}if(h==="~"){let d=l>0?e[l-1]:"";if(l===0||d==="="||n&&d===":"){let y=kr(t,e,l),g=e[y];if(g===void 0||g==="/"||g===":"){f();let m=e.slice(l+1,y)||null;a.push({type:"TildeExpansion",user:m}),l=y;continue}}}if(h==="*"||h==="?"||h==="["){f();let{pattern:d,endIndex:p}=Dr(t,e,l);a.push({type:"Glob",pattern:d}),l=p;continue}if(h==="{"&&!n){let d=_r(t,e,l,oe);if(d){f(),a.push(d.part),l=d.endIndex;continue}}c+=h,l++}return f(),a}var F=class t{tokens=[];pos=0;pendingHeredocs=[];parseIterations=0;checkIterationLimit(){if(this.parseIterations++,this.parseIterations>$r)throw new ee("Maximum parse iterations exceeded (possible infinite loop)",this.current().line,this.current().column)}parse(e){if(e.length>yt)throw new ee(`Input too large: ${e.length} bytes exceeds limit of ${yt}`,1,1);let s=new je(e);if(this.tokens=s.tokenize(),this.tokens.length>Et)throw new ee(`Too many tokens: ${this.tokens.length} exceeds limit of ${Et}`,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,s,r,n,...o){let i=this.tokens[this.pos]?.type;return i===e||s!==void 0&&i===s||r!==void 0&&i===r||n!==void 0&&i===n?!0:o.length>0?o.includes(i):!1}expect(e,s){if(this.check(e))return this.advance();let r=this.current();throw new ee(s||`Expected ${e}, got ${r.type}`,r.line,r.column,r)}error(e){let s=this.current();throw new ee(e,s.line,s.column,s)}skipNewlines(){for(;this.check(u.NEWLINE,u.COMMENT);)this.check(u.NEWLINE)?(this.advance(),this.processHeredocs()):this.advance()}skipSeparators(e=!0){for(;;){if(this.check(u.NEWLINE)){this.advance(),this.processHeredocs();continue}if(this.check(u.SEMICOLON,u.COMMENT)){this.advance();continue}if(e&&this.check(u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)){this.advance();continue}break}}addPendingHeredoc(e,s,r,n){this.pendingHeredocs.push({redirect:e,delimiter:s,stripTabs:r,quoted:n})}processHeredocs(){for(let e of this.pendingHeredocs)if(this.check(u.HEREDOC_CONTENT)){let s=this.advance(),r;e.quoted?r=A.word([A.literal(s.value)]):r=this.parseWordFromString(s.value,!1,!1,!1,!0),e.redirect.target=A.hereDoc(e.delimiter,r,e.stripTabs,e.quoted)}this.pendingHeredocs=[]}isStatementEnd(){return this.check(u.EOF,u.NEWLINE,u.SEMICOLON,u.AMP,u.AND_AND,u.OR_OR,u.RPAREN,u.RBRACE,u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)}isCommandStart(){let e=this.current().type;return e===u.WORD||e===u.NAME||e===u.NUMBER||e===u.ASSIGNMENT_WORD||e===u.IF||e===u.FOR||e===u.WHILE||e===u.UNTIL||e===u.CASE||e===u.LPAREN||e===u.LBRACE||e===u.DPAREN_START||e===u.DBRACK_START||e===u.FUNCTION||e===u.BANG||e===u.IN}parseScript(){let e=[],r=0;for(this.skipNewlines();!this.check(u.EOF);){r++,r>1e4&&this.error("Parser stuck: too many iterations (>10000)"),this.checkUnexpectedToken();let n=this.pos,o=this.parseStatement();o&&e.push(o),this.skipSeparators(!1),this.check(u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)&&this.error(`syntax error near unexpected token \`${this.current().value}'`),this.pos===n&&!this.check(u.EOF)&&this.advance()}return A.script(e)}checkUnexpectedToken(){let e=this.current().type,s=this.current().value;(e===u.DO||e===u.DONE||e===u.THEN||e===u.ELSE||e===u.ELIF||e===u.FI||e===u.ESAC)&&this.error(`syntax error near unexpected token \`${s}'`),(e===u.RBRACE||e===u.RPAREN)&&this.error(`syntax error near unexpected token \`${s}'`),(e===u.DSEMI||e===u.SEMI_AND||e===u.SEMI_SEMI_AND)&&this.error(`syntax error near unexpected token \`${s}'`),e===u.SEMICOLON&&this.error(`syntax error near unexpected token \`${s}'`)}parseStatement(){if(this.skipNewlines(),!this.isCommandStart())return null;let e=[],s=[],r=!1,n=this.parsePipeline();for(e.push(n);this.check(u.AND_AND,u.OR_OR);){let o=this.advance();s.push(o.type===u.AND_AND?"&&":"||"),this.skipNewlines();let i=this.parsePipeline();e.push(i)}return this.check(u.AMP)&&(this.advance(),r=!0),A.statement(e,s,r)}parsePipeline(){let e=0;for(;this.check(u.BANG);)this.advance(),e++;let s=e%2===1,r=[],n=this.parseCommand();for(r.push(n);this.check(u.PIPE,u.PIPE_AMP);){let o=this.advance();this.skipNewlines();let i=this.parseCommand();o.type===u.PIPE_AMP&&i.type==="SimpleCommand"&&i.redirections.unshift(A.redirection(">&",A.word([A.literal("1")]),2)),r.push(i)}return A.pipeline(r,s)}parseCommand(){return this.check(u.IF)?xt(this):this.check(u.FOR)?St(this):this.check(u.WHILE)?bt(this):this.check(u.UNTIL)?Ct(this):this.check(u.CASE)?Nt(this):this.check(u.LPAREN)?$t(this):this.check(u.LBRACE)?vt(this):this.check(u.DPAREN_START)?this.parseArithmeticCommand():this.check(u.DBRACK_START)?this.parseConditionalCommand():this.check(u.FUNCTION)?this.parseFunctionDef():this.check(u.NAME,u.WORD)&&this.peek(1).type===u.LPAREN&&this.peek(2).type===u.RPAREN?this.parseFunctionDef():Fr(this)}isWord(){let e=this.current().type;return e===u.WORD||e===u.NAME||e===u.NUMBER||e===u.IF||e===u.FOR||e===u.WHILE||e===u.UNTIL||e===u.CASE||e===u.FUNCTION||e===u.ELSE||e===u.ELIF||e===u.FI||e===u.THEN||e===u.DO||e===u.DONE||e===u.ESAC||e===u.IN||e===u.BANG}parseWord(){let e=this.advance();return this.parseWordFromString(e.value,e.quoted,e.singleQuoted)}parseWordFromString(e,s=!1,r=!1,n=!1,o=!1){let i=oe(this,e,s,r,n,o);return A.word(i)}parseCommandSubstitution(e,s){let r=s+2,n=1,o=r,i=!1,a=!1,l=0,c=!1,f="";for(;o<e.length&&n>0;){let y=e[o];i?y==="'"&&(i=!1):a?y==="\\"&&o+1<e.length?o++:y==='"'&&(a=!1):y==="'"?(i=!0,f=""):y==='"'?(a=!0,f=""):y==="\\"&&o+1<e.length?(o++,f=""):/[a-zA-Z_]/.test(y)?f+=y:(f==="case"?(l++,c=!1):f==="in"&&l>0?c=!0:f==="esac"&&l>0&&(l--,c=!1),f="",y==="("?o>0&&e[o-1]==="$"?n++:c||n++:y===")"?c?c=!1:n--:y===";"&&l>0&&o+1<e.length&&e[o+1]===";"&&(c=!0)),n>0&&o++}n>0&&this.error("unexpected EOF while looking for matching `)'");let h=e.slice(r,o),p=new t().parse(h);return{part:A.commandSubstitution(p,!1),endIndex:o+1}}parseBacktickSubstitution(e,s,r=!1){let o=s+1,i="";for(;o<e.length&&e[o]!=="`";)if(e[o]==="\\"){let c=e[o+1];c==="$"||c==="`"||c==="\\"||c===`
31
31
  `||r&&c==='"'?(c!==`
32
- `&&(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(u.DPAREN_START);let e="",n=1,r=0,s=!1,o=!1;for(;n>0&&!this.check(u.EOF);){if(s){if(s=!1,r>0){r--,e+=")";continue}if(this.check(u.RPAREN)){n--,o=!0,this.advance();continue}if(this.check(u.DPAREN_END)){n--,o=!0;continue}e+=")";continue}this.check(u.DPAREN_START)?(n++,e+="((",this.advance()):this.check(u.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(u.LPAREN)?(r++,e+="(",this.advance()):this.check(u.RPAREN)?(r>0&&r--,e+=")",this.advance()):(e+=this.current().value,this.advance())}o||this.expect(u.DPAREN_END);let i=this.parseArithmeticExpression(e.trim()),a=this.parseOptionalRedirections();return A.arithmeticCommand(i,a)}parseConditionalCommand(){this.expect(u.DBRACK_START);let e=It(this);this.expect(u.DBRACK_END);let n=this.parseOptionalRedirections();return A.conditionalCommand(e,n)}parseFunctionDef(){let e;this.check(u.FUNCTION)?(this.advance(),e=this.expect(u.NAME,"Expected function name").value,this.check(u.LPAREN)&&(this.advance(),this.expect(u.RPAREN))):(e=this.advance().value,this.expect(u.LPAREN),this.expect(u.RPAREN)),this.skipNewlines();let n=this.parseCompoundCommandBody(),r=this.parseOptionalRedirections();return A.functionDef(e,n,r)}parseCompoundCommandBody(){if(this.check(u.LBRACE))return vt(this);if(this.check(u.LPAREN))return $t(this);if(this.check(u.IF))return xt(this);if(this.check(u.FOR))return St(this);if(this.check(u.WHILE))return bt(this);if(this.check(u.UNTIL))return Nt(this);if(this.check(u.CASE))return Ct(this);this.error("Expected compound command for function body")}parseCompoundList(){let e=[];for(this.skipNewlines();!this.check(u.EOF,u.FI,u.ELSE,u.ELIF,u.THEN,u.DO,u.DONE,u.ESAC,u.RPAREN,u.RBRACE,u.DSEMI,u.SEMI_AND,u.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(;Ge(this);){this.checkIterationLimit();let n=this.pos;if(e.push(Ve(this)),this.pos===n)break}return e}parseArithmeticExpression(e){return L(this,e)}};function ae(t){return new F().parse(t)}var Ae=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 H(t){switch(t.type){case"ArithCommandSubst":return!0;case"ArithNested":return H(t.expression);case"ArithBinary":return H(t.left)||H(t.right);case"ArithUnary":return H(t.operand);case"ArithTernary":return H(t.condition)||H(t.consequent)||H(t.alternate);case"ArithAssignment":return H(t.value);case"ArithGroup":return H(t.expression);case"ArithArrayElement":return t.index?H(t.index):!1;case"ArithConcat":return t.parts.some(H);default:return!1}}function Rt(t){let e=t.operation;return e?!!("word"in e&&e.word&&te(e.word)||e.type==="PatternReplacement"&&(e.pattern&&te(e.pattern)||e.replacement&&te(e.replacement))||e.type==="PatternRemoval"&&e.pattern&&te(e.pattern)):!1}function He(t){switch(t.type){case"CommandSubstitution":return!0;case"ArithmeticExpansion":return H(t.expression.expression);case"DoubleQuoted":return t.parts.some(He);case"BraceExpansion":return t.items.some(e=>e.type==="Word"&&te(e.word));case"ParameterExpansion":return Rt(t);default:return!1}}function te(t){return t.parts.some(He)}function Dt(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 Br(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),Dt(i)&&(e=!0))}return{hasQuoted:e,hasCommandSub:n,hasArrayVar:r,hasArrayAtExpansion:s,hasParamExpansion:o}}function cs(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=f=>{if(l>0){let h=f<0,d=String(Math.abs(f)).padStart(l,"0");return h?`-${d}`:d}return String(f)};if(t<=e)for(let f=t,h=0;f<=e&&h<1e4;f+=i,h++)a.push(c(f));else for(let f=t,h=0;f>=e&&h<1e4;f-=i,h++)a.push(c(f));return a}function ls(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",f=e>="a"&&e<="z";if(a&&f||l&&c)return null;let h=[];if(s<=o)for(let d=s,p=0;d<=o&&p<1e4;d+=i,p++)h.push(String.fromCharCode(d));else for(let d=s,p=0;d>=o&&p<1e4;d-=i,p++)h.push(String.fromCharCode(d));return h}function ve(t,e,n,r,s){let o=n!==void 0?`..${n}`:"";return typeof t=="number"&&typeof e=="number"?{expanded:cs(t,e,n,r,s),literal:`{${t}..${e}${o}}`}:typeof t=="string"&&typeof e=="string"?{expanded:ls(t,e,n),literal:`{${t}..${e}${o}}`}:{expanded:null,literal:`{${t}..${e}${o}}`}}function j(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=fs(t,r);if(o===-1)n+="\\[",r++;else{let i=t.slice(r+1,o);n+=us(i),r=o+1}}else/[\^$.|+(){}]/.test(s)?(n+=`\\${s}`,r++):(n+=s,r++)}return n}function fs(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 us(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+=ds(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 hs={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 ds(t){return hs[t]??""}function Pe(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 Ot(t,e){let n=`${e}_`;for(let r of Object.keys(t.state.env))r.startsWith(n)&&delete t.state.env[r]}function _t(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 zr(t){return t.startsWith("'")&&t.endsWith("'")||t.startsWith('"')&&t.endsWith('"')?t.slice(1,-1):t}function Ze(t){return t.IFS??`
32
+ `&&(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,s){let r=s+3,n=1,o=0,i=r;for(;i<e.length-1&&n>0;)e[i]==="$"&&e[i+1]==="("?e[i+2]==="("?(n++,i+=3):(o++,i+=2):e[i]==="("&&e[i+1]==="("?(n++,i+=2):e[i]===")"&&e[i+1]===")"?o>0?(o--,i++):(n--,n>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(u.DPAREN_START);let e="",s=1,r=0,n=!1,o=!1;for(;s>0&&!this.check(u.EOF);){if(n){if(n=!1,r>0){r--,e+=")";continue}if(this.check(u.RPAREN)){s--,o=!0,this.advance();continue}if(this.check(u.DPAREN_END)){s--,o=!0;continue}e+=")";continue}this.check(u.DPAREN_START)?(s++,e+="((",this.advance()):this.check(u.DPAREN_END)?r>=2?(r-=2,e+="))",this.advance()):r===1?(r--,e+=")",n=!0,this.advance()):(s--,o=!0,s>0&&(e+="))"),this.advance()):this.check(u.LPAREN)?(r++,e+="(",this.advance()):this.check(u.RPAREN)?(r>0&&r--,e+=")",this.advance()):(e+=this.current().value,this.advance())}o||this.expect(u.DPAREN_END);let i=this.parseArithmeticExpression(e.trim()),a=this.parseOptionalRedirections();return A.arithmeticCommand(i,a)}parseConditionalCommand(){this.expect(u.DBRACK_START);let e=It(this);this.expect(u.DBRACK_END);let s=this.parseOptionalRedirections();return A.conditionalCommand(e,s)}parseFunctionDef(){let e;this.check(u.FUNCTION)?(this.advance(),e=this.expect(u.NAME,"Expected function name").value,this.check(u.LPAREN)&&(this.advance(),this.expect(u.RPAREN))):(e=this.advance().value,this.expect(u.LPAREN),this.expect(u.RPAREN)),this.skipNewlines();let s=this.parseCompoundCommandBody(),r=this.parseOptionalRedirections();return A.functionDef(e,s,r)}parseCompoundCommandBody(){if(this.check(u.LBRACE))return vt(this);if(this.check(u.LPAREN))return $t(this);if(this.check(u.IF))return xt(this);if(this.check(u.FOR))return St(this);if(this.check(u.WHILE))return bt(this);if(this.check(u.UNTIL))return Ct(this);if(this.check(u.CASE))return Nt(this);this.error("Expected compound command for function body")}parseCompoundList(){let e=[];for(this.skipNewlines();!this.check(u.EOF,u.FI,u.ELSE,u.ELIF,u.THEN,u.DO,u.DONE,u.ESAC,u.RPAREN,u.RBRACE,u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)&&this.isCommandStart();){this.checkIterationLimit();let s=this.pos,r=this.parseStatement();if(r&&e.push(r),this.skipSeparators(),this.pos===s&&!r)break}return e}parseOptionalRedirections(){let e=[];for(;Ge(this);){this.checkIterationLimit();let s=this.pos;if(e.push(Ve(this)),this.pos===s)break}return e}parseArithmeticExpression(e){return L(this,e)}};function ae(t){return new F().parse(t)}var Ae=class{fs;cwd;constructor(e,s){this.fs=e,this.cwd=s}isGlobPattern(e){return e.includes("*")||e.includes("?")||/\[.*\]/.test(e)}async expandArgs(e,s){let r=[];for(let n=0;n<e.length;n++){let o=e[n];if((s?.[n]??!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 s=[],r=e.lastIndexOf("/"),n,o;r===-1?(n=this.cwd,o=e):(n=e.slice(0,r)||"/",o=e.slice(r+1));let i=this.fs.resolvePath(this.cwd,n);try{let a=await this.fs.readdir(i);for(let l of a)if(this.matchPattern(l,o)){let c=r===-1?l:`${n}/${l}`;s.push(c)}}catch{}return s.sort()}async expandRecursive(e){let s=[],r=e.indexOf("**"),n=e.slice(0,r).replace(/\/$/,"")||".",i=e.slice(r+2).replace(/^\//,"");return await this.walkDirectory(n,i,s),s.sort()}async walkDirectory(e,s,r){let n=this.fs.resolvePath(this.cwd,e);try{let o=await this.fs.readdir(n);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,s,r):s&&this.matchPattern(i,s)&&r.push(a)}catch{}}}catch{}}matchPattern(e,s){return this.patternToRegex(s).test(e)}patternToRegex(e){let s="^";for(let r=0;r<e.length;r++){let n=e[r];if(n==="*")s+=".*";else if(n==="?")s+=".";else if(n==="["){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+="]",s+=i,r=o}else if(n==="\\"&&r+1<e.length){let o=e[r+1];/[.+^${}()|\\*?[\]]/.test(o)?s+=`\\${o}`:s+=o,r++}else/[.+^${}()|]/.test(n)?s+=`\\${n}`:s+=n}return s+="$",new RegExp(s)}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 H(t){switch(t.type){case"ArithCommandSubst":return!0;case"ArithNested":return H(t.expression);case"ArithBinary":return H(t.left)||H(t.right);case"ArithUnary":return H(t.operand);case"ArithTernary":return H(t.condition)||H(t.consequent)||H(t.alternate);case"ArithAssignment":return H(t.value);case"ArithGroup":return H(t.expression);case"ArithArrayElement":return t.index?H(t.index):!1;case"ArithConcat":return t.parts.some(H);default:return!1}}function Rt(t){let e=t.operation;return e?!!("word"in e&&e.word&&te(e.word)||e.type==="PatternReplacement"&&(e.pattern&&te(e.pattern)||e.replacement&&te(e.replacement))||e.type==="PatternRemoval"&&e.pattern&&te(e.pattern)):!1}function He(t){switch(t.type){case"CommandSubstitution":return!0;case"ArithmeticExpansion":return H(t.expression.expression);case"DoubleQuoted":return t.parts.some(He);case"BraceExpansion":return t.items.some(e=>e.type==="Word"&&te(e.word));case"ParameterExpansion":return Rt(t);default:return!1}}function te(t){return t.parts.some(He)}function Dt(t){if(!t.operation)return!1;let e=t.operation,s;if((e.type==="DefaultValue"||e.type==="AssignDefault"||e.type==="UseAlternative"||e.type==="ErrorIfUnset")&&(s=e.word?.parts),!s)return!1;for(let r of s)if(r.type==="DoubleQuoted"||r.type==="SingleQuoted")return!0;return!1}function Br(t){let e=!1,s=!1,r=!1,n=!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&&(n=!0);i.type==="CommandSubstitution"&&(s=!0),i.type==="ParameterExpansion"&&(o=!0,(i.parameter==="@"||i.parameter==="*")&&(r=!0),Dt(i)&&(e=!0))}return{hasQuoted:e,hasCommandSub:s,hasArrayVar:r,hasArrayAtExpansion:n,hasParamExpansion:o}}function cn(t,e,s,r,n){let o=s??1;o===0&&(o=1);let i=Math.abs(o),a=[],l=0;r?.match(/^-?0\d/)&&(l=Math.max(l,r.replace(/^-/,"").length)),n?.match(/^-?0\d/)&&(l=Math.max(l,n.replace(/^-/,"").length));let c=f=>{if(l>0){let h=f<0,d=String(Math.abs(f)).padStart(l,"0");return h?`-${d}`:d}return String(f)};if(t<=e)for(let f=t,h=0;f<=e&&h<1e4;f+=i,h++)a.push(c(f));else for(let f=t,h=0;f>=e&&h<1e4;f-=i,h++)a.push(c(f));return a}function ln(t,e,s){let r=s??1;r===0&&(r=1);let n=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",f=e>="a"&&e<="z";if(a&&f||l&&c)return null;let h=[];if(n<=o)for(let d=n,p=0;d<=o&&p<1e4;d+=i,p++)h.push(String.fromCharCode(d));else for(let d=n,p=0;d>=o&&p<1e4;d-=i,p++)h.push(String.fromCharCode(d));return h}function ve(t,e,s,r,n){let o=s!==void 0?`..${s}`:"";return typeof t=="number"&&typeof e=="number"?{expanded:cn(t,e,s,r,n),literal:`{${t}..${e}${o}}`}:typeof t=="string"&&typeof e=="string"?{expanded:ln(t,e,s),literal:`{${t}..${e}${o}}`}:{expanded:null,literal:`{${t}..${e}${o}}`}}function j(t,e){let s="",r=0;for(;r<t.length;){let n=t[r];if(n==="\\")if(r+1<t.length){let o=t[r+1];/[\\^$.|+(){}[\]*?]/.test(o)?s+=`\\${o}`:s+=o,r+=2}else s+="\\\\",r++;else if(n==="*")s+=e?".*":".*?",r++;else if(n==="?")s+=".",r++;else if(n==="["){let o=fn(t,r);if(o===-1)s+="\\[",r++;else{let i=t.slice(r+1,o);s+=un(i),r=o+1}}else/[\^$.|+(){}]/.test(n)?(s+=`\\${n}`,r++):(s+=n,r++)}return s}function fn(t,e){let s=e+1;for(s<t.length&&t[s]==="^"&&s++,s<t.length&&t[s]==="]"&&s++;s<t.length;){if(t[s]==="\\"&&s+1<t.length){s+=2;continue}if(t[s]==="]")return s;if(t[s]==="'"){let r=t.indexOf("'",s+1);if(r!==-1){s=r+1;continue}}if(t[s]==="["&&s+1<t.length&&t[s+1]===":"){let r=t.indexOf(":]",s+2);if(r!==-1){s=r+2;continue}}s++}return-1}function un(t){let e="[",s=0;for((t[0]==="^"||t[0]==="!")&&(e+="^",s++);s<t.length;){if(t[s]==="'"){let n=t.indexOf("'",s+1);if(n!==-1){let o=t.slice(s+1,n);for(let i of o)i==="\\"?e+="\\\\":i==="]"?e+="\\]":i==="^"&&e==="["?e+="\\^":e+=i;s=n+1;continue}}if(t[s]==="["&&s+1<t.length&&t[s+1]===":"){let n=t.indexOf(":]",s+2);if(n!==-1){let o=t.slice(s+2,n);e+=dn(o),s=n+2;continue}}let r=t[s];r==="\\"?s+1<t.length?(e+=`\\${t[s+1]}`,s+=2):(e+="\\\\",s++):r==="-"&&s>0&&s<t.length-1?(e+="-",s++):r==="^"&&s===0?(e+="^",s++):(r==="]"&&s===0?e+="\\]":e+=r,s++)}return e+="]",e}var hn={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 dn(t){return hn[t]??""}function Pe(t,e){let s=`${e}_`,r=[];for(let n of Object.keys(t.state.env))if(n.startsWith(s)){let o=n.slice(s.length),i=Number.parseInt(o,10);!Number.isNaN(i)&&String(i)===o&&r.push(i)}return r.sort((n,o)=>n-o)}function Ot(t,e){let s=`${e}_`;for(let r of Object.keys(t.state.env))r.startsWith(s)&&delete t.state.env[r]}function _t(t,e){let s=`${e}_`,r=[];for(let n of Object.keys(t.state.env))if(n.startsWith(s)&&!n.includes("__")){let o=n.slice(s.length);r.push(o)}return r.sort()}function zr(t){return t.startsWith("'")&&t.endsWith("'")||t.startsWith('"')&&t.endsWith('"')?t.slice(1,-1):t}function Ze(t){return t.IFS??`
33
33
  `}function Ur(t){return t.IFS===""}function Ie(t){return t.split("").map(e=>/[\\^$.*+?()[\]{}|-]/.test(e)?`\\${e}`:e===" "?"\\t":e===`
34
- `?"\\n":e).join("")}function ps(t,e){let n=Ie(t);return new RegExp(`[${n}]+`,e)}function ms(t){let e=Ie(t);return new RegExp(`^[${e}]+`)}function ys(t){let e=Ie(t);return new RegExp(`[${e}]+$`)}function ke(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=ps(e,"g"),o=0,i=t.match(ms(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 Gr(t,e){return e===""?t:t.replace(ys(e),"")}function T(t,e){return t.state.associativeArrays?.has(e)?_t(t,e).map(o=>[o,t.state.env[`${e}_${o}`]]):Pe(t,e).map(s=>[s,t.state.env[`${e}_${s}`]])}function Vr(t,e){return t.state.associativeArrays?.has(e)?_t(t,e).length>0:Pe(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(ke(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:""}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[\]$/.test(e))throw new he(`\${${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 h=T(t,i);if(h.length>0)return h.map(([,p])=>p).join(" ");let d=t.state.env[i];return d!==void 0?d:""}if(t.state.associativeArrays?.has(i)){let h=zr(a),d=t.state.env[`${i}_${h}`];if(d===void 0&&n&&t.state.options.nounset)throw new K(`${i}[${a}]`);return d||""}let c;if(/^-?\d+$/.test(a))c=Number.parseInt(a,10);else try{let h=new F,d=L(h,a);c=C(t,d.expression)}catch{let h=t.state.env[a];c=h?Number.parseInt(h,10):0,Number.isNaN(c)&&(c=0)}if(c<0){let h=T(t,i);if(h.length===0)return t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${i}: bad array subscript
34
+ `?"\\n":e).join("")}function pn(t,e){let s=Ie(t);return new RegExp(`[${s}]+`,e)}function mn(t){let e=Ie(t);return new RegExp(`^[${e}]+`)}function yn(t){let e=Ie(t);return new RegExp(`[${e}]+$`)}function ke(t){let e=t.IFS;return e===void 0?" ":e[0]||""}function jr(t,e){if(e==="")return{words:[t],wordStarts:[0]};let s=[],r=[],n=pn(e,"g"),o=0,i=t.match(mn(e));i&&(o=i[0].length),n.lastIndex=o;let a=n.exec(t);for(;a!==null;)a.index>o&&(r.push(o),s.push(t.substring(o,a.index))),o=n.lastIndex,a=n.exec(t);return o<t.length&&(r.push(o),s.push(t.substring(o))),{words:s,wordStarts:r}}function Gr(t,e){return e===""?t:t.replace(yn(e),"")}function T(t,e){return t.state.associativeArrays?.has(e)?_t(t,e).map(o=>[o,t.state.env[`${e}_${o}`]]):Pe(t,e).map(n=>[n,t.state.env[`${e}_${n}`]])}function Vr(t,e){return t.state.associativeArrays?.has(e)?_t(t,e).length>0:Pe(t,e).length>0}function Z(t,e,s=!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(ke(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:""}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[\]$/.test(e))throw new he(`\${${e}}`);let n=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(n){let i=n[1],a=n[2];if(a==="@"||a==="*"){let h=T(t,i);if(h.length>0)return h.map(([,p])=>p).join(" ");let d=t.state.env[i];return d!==void 0?d:""}if(t.state.associativeArrays?.has(i)){let h=zr(a),d=t.state.env[`${i}_${h}`];if(d===void 0&&s&&t.state.options.nounset)throw new K(`${i}[${a}]`);return d||""}let c;if(/^-?\d+$/.test(a))c=Number.parseInt(a,10);else try{let h=new F,d=L(h,a);c=N(t,d.expression)}catch{let h=t.state.env[a];c=h?Number.parseInt(h,10):0,Number.isNaN(c)&&(c=0)}if(c<0){let h=T(t,i);if(h.length===0)return t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${i}: bad array subscript
35
35
  `,"";let p=Math.max(...h.map(([g])=>typeof g=="number"?g:0))+1+c;return p<0?(t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${i}: bad array subscript
36
- `,""):t.state.env[`${i}_${p}`]||""}let f=t.state.env[`${i}_${c}`];if(f===void 0&&n&&t.state.options.nounset)throw new K(`${i}[${c}]`);return f||""}if(/^[1-9][0-9]*$/.test(e)){let i=t.state.env[e];if(i===void 0&&n&&t.state.options.nounset)throw new K(e);return i||""}let o=t.state.env[e];if(o===void 0&&n&&t.state.options.nounset)throw new K(e);return o||""}async function Hr(t,e,n,r,s){let o=[];for(let f of e){let h=f.type==="ParameterExpansion"||f.type==="CommandSubstitution"||f.type==="ArithmeticExpansion";if(f.type==="ParameterExpansion"&&Dt(f)){let d=await s(t,f);o.push({value:d,splittable:!1})}else{let d=await s(t,f);o.push({value:d,splittable:h})}}if(!o.some(f=>f.splittable&&new RegExp(`[${r}]`).test(f.value))){let f=o.map(h=>h.value).join("");return f?[f]:[]}let a=new RegExp(`[${r}]+`),l=[],c="";for(let f=0;f<o.length;f++){let h=o[f];if(!h.splittable)c+=h.value;else{let d=h.value.split(a);for(let p=0;p<d.length;p++)p===0?c+=d[p]:(c!==""&&l.push(c),c=d[p])}}return c!==""&&l.push(c),l}function G(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Zr(t){switch(t.type){case"Literal":return t.value;case"SingleQuoted":return t.value;case"Escaped":return t.value;default:return null}}function qr(t){switch(t.type){case"SingleQuoted":case"Escaped":case"DoubleQuoted":return!0;case"Literal":return t.value==="";default:return!1}}function Lt(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`
37
- `: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 me(t,e,n=!1){return e.map(r=>re(t,r,n)).join("")}async function ye(t,e,n=!1){let r=[];for(let s of e)r.push(await X(t,s));return r.join("")}function Es(t){return qr(t)}function Qr(t){if(t.parts.length===0)return!0;for(let e of t.parts)if(!Es(e))return!1;return!0}function Kr(t){return t.replace(/([*?[\]\\])/g,"\\$1")}function Xr(t,e,n=!1){let r=Zr(e);if(r!==null)return r;switch(e.type){case"ParameterExpansion":return rn(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 re(t,e,n=!1){let r=Xr(t,e,n);if(r!==null)return r;switch(e.type){case"DoubleQuoted":{let s=[];for(let o of e.parts)s.push(re(t,o,!0));return s.join("")}case"ArithmeticExpansion":return String(C(t,e.expression.expression));case"BraceExpansion":{let s=[];for(let o of e.items)if(o.type==="Range"){let i=ve(o.start,o.end,o.step,o.startStr,o.endStr);if(i.expanded)s.push(...i.expanded);else return i.literal}else s.push(qe(t,o.word));return s.join(" ")}default:return""}}function qe(t,e){let n=e.parts,r=n.length;if(r===1)return re(t,n[0]);let s=[];for(let o=0;o<r;o++)s.push(re(t,n[o]));return s.join("")}async function v(t,e){return te(e)?tn(t,e):qe(t,e)}function Qe(t){for(let e of t)if(e.type==="BraceExpansion"||e.type==="DoubleQuoted"&&Qe(e.parts))return!0;return!1}function ws(t){for(let e of t){if(e.type==="BraceExpansion"){for(let n of e.items)if(n.type==="Word"&&te(n.word))return!0}if(He(e))return!0}return!1}var Yr=1e4,xe=1e5;function Jr(t,e,n={count:0}){if(n.count>xe)return[[]];let r=[[]];for(let s of e)if(s.type==="BraceExpansion"){let o=[],i=!1,a="";for(let f of s.items)if(f.type==="Range"){let h=ve(f.start,f.end,f.step,f.startStr,f.endStr);if(h.expanded)for(let d of h.expanded)n.count++,o.push(d);else{i=!0,a=h.literal;break}}else{let h=Jr(t,f.word.parts,n);for(let d of h)n.count++,o.push(d.join(""))}if(i){for(let f of r)n.count++,f.push(a);continue}if(r.length*o.length>Yr||n.count>xe)return r;let c=[];for(let f of r)for(let h of o){if(n.count++,n.count>xe)return c.length>0?c:r;c.push([...f,h])}r=c}else{let o=re(t,s);for(let i of r)n.count++,i.push(o)}return r}function gs(t,e){let n=e.parts;return Qe(n)?Jr(t,n).map(s=>s.join("")):[qe(t,e)]}async function en(t,e,n={count:0}){if(n.count>xe)return[[]];let r=[[]];for(let s of e)if(s.type==="BraceExpansion"){let o=[],i=!1,a="";for(let f of s.items)if(f.type==="Range"){let h=ve(f.start,f.end,f.step,f.startStr,f.endStr);if(h.expanded)for(let d of h.expanded)n.count++,o.push(d);else{i=!0,a=h.literal;break}}else{let h=await en(t,f.word.parts,n);for(let d of h)n.count++,o.push(d.join(""))}if(i){for(let f of r)n.count++,f.push(a);continue}if(r.length*o.length>Yr||n.count>xe)return r;let c=[];for(let f of r)for(let h of o){if(n.count++,n.count>xe)return c.length>0?c:r;c.push([...f,h])}r=c}else{let o=await X(t,s);for(let i of r)n.count++,i.push(o)}return r}async function As(t,e){let n=e.parts;return Qe(n)?(await en(t,n)).map(s=>s.join("")):[await v(t,e)]}async function Re(t,e){let n=e.parts,{hasQuoted:r,hasCommandSub:s,hasArrayVar:o,hasArrayAtExpansion:i,hasParamExpansion:a}=Br(n),c=Qe(n)?ws(n)?await As(t,e):gs(t,e):null;if(c&&c.length>1){let d=[];for(let p of c)if(!r&&/[*?[]/.test(p)){let g=await new Ae(t.fs,t.state.cwd).expand(p);g.length>0?d.push(...g):d.push(p)}else d.push(p);return{values:d,quoted:!1}}if(i&&n.length===1&&n[0].type==="DoubleQuoted"){let d=n[0];if(d.parts.length===1&&d.parts[0].type==="ParameterExpansion"){let y=d.parts[0].parameter.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@]\]$/);if(y){let g=y[1],m=T(t,g);if(m.length>0)return{values:m.map(([,w])=>w),quoted:!0};let E=t.state.env[g];return E!==void 0?{values:[E],quoted:!0}:{values:[],quoted:!0}}}}if(!r&&o&&n.length===1&&n[0].type==="ParameterExpansion"){let d=n[0].parameter;if(d==="@"||d==="*"){let p=Number.parseInt(t.state.env["#"]||"0",10);if(p===0)return{values:[],quoted:!1};let y=[];for(let g=1;g<=p;g++)y.push(t.state.env[String(g)]||"");return{values:y,quoted:!1}}}if(!r&&(s||o||a)&&!Ur(t.state.env)){let d=Ze(t.state.env),p=Ie(d),y=await Hr(t,n,d,p,X),g=[],m=new Ae(t.fs,t.state.cwd);for(let E of y)if(/[*?[]/.test(E)){let w=await m.expand(E);w.length>0?g.push(...w):g.push(E)}else g.push(E);return{values:g,quoted:!1}}let h=te(e)?await tn(t,e):qe(t,e);if(!r&&/[*?[]/.test(h)){let p=await new Ae(t.fs,t.state.cwd).expand(h);if(p.length>0)return{values:p,quoted:!1}}return h===""&&!r?{values:[],quoted:!1}:{values:[h],quoted:r}}async function tn(t,e){let n=e.parts,r=n.length;if(r===1)return X(t,n[0]);let s=[];for(let o=0;o<r;o++)s.push(await X(t,n[o]));return s.join("")}async function X(t,e){if(e.type==="ParameterExpansion"&&Rt(e))return xs(t,e);let n=Xr(t,e);if(n!==null)return n;switch(e.type){case"DoubleQuoted":{let r=[];for(let s of e.parts)r.push(await X(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 B)throw r;if(r instanceof k)return t.state.lastExitCode=r.exitCode,t.state.env["?"]=String(r.exitCode),r.stdout.replace(/\n+$/,"");throw r}case"ArithmeticExpansion":return String(await $(t,e.expression.expression));case"BraceExpansion":{let r=[];for(let s of e.items)if(s.type==="Range"){let o=ve(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 v(t,s.word));return r.join(" ")}default:return""}}function rn(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?me(t,s.word.parts,n):i;case"AssignDefault":{if((a||s.checkEmpty&&l)&&s.word){let f=me(t,s.word.parts,n),h=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(h){let[,d,p]=h,y;if(/^\d+$/.test(p))y=Number.parseInt(p,10);else{try{let m=new F,E=L(m,p);y=C(t,E.expression)}catch{let m=t.state.env[p];y=m?Number.parseInt(m,10):0}Number.isNaN(y)&&(y=0)}t.state.env[`${d}_${y}`]=f;let g=Number.parseInt(t.state.env[`${d}__length`]||"0",10);y>=g&&(t.state.env[`${d}__length`]=String(y+1))}else t.state.env[r]=f;return f}return i}case"ErrorIfUnset":{if(a||s.checkEmpty&&l){let f=s.word?me(t,s.word.parts,n):`${r}: parameter null or not set`;throw new k(1,"",`bash: ${f}
38
- `)}return i}case"UseAlternative":return!(a||s.checkEmpty&&l)&&s.word?me(t,s.word.parts,n):"";case"Length":{let c=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(c){let f=T(t,c[1]);return String(f.length)}if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)&&Vr(t,r)){let f=t.state.env[`${r}_0`]||"";return String(f.length)}return String(i.length)}case"LengthSliceError":throw new he(r);case"Substring":{let c=s.offset?C(t,s.offset.expression):0,f=s.length?C(t,s.length.expression):void 0;if(r==="@"||r==="*"){let y=(t.state.env["@"]||"").split(" ").filter(w=>w),g=t.state.env[0]||"bash",m=c===0?[g,...y]:y,E=c===0?0:c-1;if(E<0||E>=m.length)return"";if(f!==void 0){let w=f<0?m.length+f:E+f;return m.slice(E,Math.max(E,w)).join(" ")}return m.slice(E).join(" ")}let h=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(h){let g=T(t,h[1]).map(([,E])=>E),m=c;if(m<0&&(m=g.length+m,m<0))return"";if(f!==void 0){if(f<0){let E=g.length+f;return g.slice(m,Math.max(m,E)).join(" ")}return g.slice(m,m+f).join(" ")}return g.slice(m).join(" ")}let d=[...i],p=c;if(p<0&&(p=Math.max(0,d.length+p)),f!==void 0){if(f<0){let y=d.length+f;return d.slice(p,Math.max(p,y)).join("")}return d.slice(p,p+f).join("")}return d.slice(p).join("")}case"PatternRemoval":{let c="";if(s.pattern)for(let h of s.pattern.parts)if(h.type==="Glob")c+=j(h.pattern,s.greedy);else if(h.type==="Literal")c+=j(h.value,s.greedy);else if(h.type==="SingleQuoted"||h.type==="Escaped")c+=G(h.value);else if(h.type==="DoubleQuoted"){let d=me(t,h.parts);c+=G(d)}else if(h.type==="ParameterExpansion"){let d=re(t,h);c+=j(d,s.greedy)}else{let d=re(t,h);c+=G(d)}if(s.side==="prefix")return i.replace(new RegExp(`^${c}`),"");let f=new RegExp(`${c}$`);if(s.greedy)return i.replace(f,"");for(let h=i.length;h>=0;h--){let d=i.slice(h);if(f.test(d))return i.slice(0,h)}return i}case"PatternReplacement":{let c="";if(s.pattern)for(let d of s.pattern.parts)if(d.type==="Glob")c+=j(d.pattern,!0);else if(d.type==="Literal")c+=j(d.value,!0);else if(d.type==="SingleQuoted"||d.type==="Escaped")c+=G(d.value);else if(d.type==="DoubleQuoted"){let p=me(t,d.parts);c+=G(p)}else if(d.type==="ParameterExpansion"){let p=re(t,d);c+=j(p,!0)}else{let p=re(t,d);c+=G(p)}let f=s.replacement?me(t,s.replacement.parts):"";if(c==="")return i;s.anchor==="start"?c=`^${c}`:s.anchor==="end"&&(c=`${c}$`);let h=s.all?"g":"";try{let d=new RegExp(c,h);if(s.all){let p="",y=0,g=d.exec(i);for(;g!==null&&!(g[0].length===0&&g.index===i.length);)p+=i.slice(y,g.index)+f,y=g.index+g[0].length,g[0].length===0&&y++,g=d.exec(i);return p+=i.slice(y),p}return i.replace(d,f)}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(([,d])=>Lt(d)).join(" ");switch(s.operator){case"Q":return Lt(i);case"P":return i;case"a":return"";case"A":return`${r}=${Lt(i)}`;case"E":return i.replace(/\\([\\abefnrtv'"?])/g,(f,h)=>{switch(h){case"\\":return"\\";case"a":return"\x07";case"b":return"\b";case"e":return"\x1B";case"f":return"\f";case"n":return`
39
- `;case"r":return"\r";case"t":return" ";case"v":return"\v";case"'":return"'";case'"':return'"';case"?":return"?";default:return h}});case"K":return"";default:return i}}case"Indirection":return Z(t,i);case"ArrayKeys":{let f=T(t,s.array).map(([h])=>String(h));return s.star?f.join(ke(t.state.env)):f.join(" ")}case"VarNamePrefix":{let c=Object.keys(t.state.env).filter(f=>f.startsWith(s.prefix)&&!f.includes("__")).sort();return s.star?c.join(ke(t.state.env)):c.join(" ")}default:return i}}async function xs(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?ye(t,s.word.parts,n):i;case"AssignDefault":{if((a||s.checkEmpty&&l)&&s.word){let f=await ye(t,s.word.parts,n),h=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(h){let[,d,p]=h,y;if(/^\d+$/.test(p))y=Number.parseInt(p,10);else{try{let m=new F,E=L(m,p);y=await $(t,E.expression)}catch{let m=t.state.env[p];y=m?Number.parseInt(m,10):0}Number.isNaN(y)&&(y=0)}t.state.env[`${d}_${y}`]=f;let g=Number.parseInt(t.state.env[`${d}__length`]||"0",10);y>=g&&(t.state.env[`${d}__length`]=String(y+1))}else t.state.env[r]=f;return f}return i}case"ErrorIfUnset":{if(a||s.checkEmpty&&l){let f=s.word?await ye(t,s.word.parts,n):`${r}: parameter null or not set`;throw new k(1,"",`bash: ${f}
40
- `)}return i}case"UseAlternative":return!(a||s.checkEmpty&&l)&&s.word?ye(t,s.word.parts,n):"";case"PatternRemoval":{let c="";if(s.pattern)for(let h of s.pattern.parts)if(h.type==="Glob")c+=j(h.pattern,s.greedy);else if(h.type==="Literal")c+=j(h.value,s.greedy);else if(h.type==="SingleQuoted"||h.type==="Escaped")c+=G(h.value);else if(h.type==="DoubleQuoted"){let d=await ye(t,h.parts);c+=G(d)}else if(h.type==="ParameterExpansion"){let d=await X(t,h);c+=j(d,s.greedy)}else{let d=await X(t,h);c+=G(d)}if(s.side==="prefix")return i.replace(new RegExp(`^${c}`),"");let f=new RegExp(`${c}$`);if(s.greedy)return i.replace(f,"");for(let h=i.length;h>=0;h--){let d=i.slice(h);if(f.test(d))return i.slice(0,h)}return i}case"PatternReplacement":{let c="";if(s.pattern)for(let d of s.pattern.parts)if(d.type==="Glob")c+=j(d.pattern,!0);else if(d.type==="Literal")c+=j(d.value,!0);else if(d.type==="SingleQuoted"||d.type==="Escaped")c+=G(d.value);else if(d.type==="DoubleQuoted"){let p=await ye(t,d.parts);c+=G(p)}else if(d.type==="ParameterExpansion"){let p=await X(t,d);c+=j(p,!0)}else{let p=await X(t,d);c+=G(p)}let f=s.replacement?await ye(t,s.replacement.parts):"";if(c==="")return i;s.anchor==="start"?c=`^${c}`:s.anchor==="end"&&(c=`${c}$`);let h=s.all?"g":"";try{let d=new RegExp(c,h);if(s.all){let p="",y=0,g=d.exec(i);for(;g!==null&&!(g[0].length===0&&g.index===i.length);)p+=i.slice(y,g.index)+f,y=g.index+g[0].length,g[0].length===0&&y++,g=d.exec(i);return p+=i.slice(y),p}return i.replace(d,f)}catch{return i}}default:return rn(t,e,n)}}function Tt(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 W("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 nn(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 Wt(t,e){switch(e){case"-":return-t;case"+":return+t;case"!":return t===0?1:0;case"~":return~t;default:return t}}function Ss(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 Se(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 F,{expr:s,pos:o}=J(r,n,0);if(o<n.length){let i=n.slice(o).trim().split(/\s+/)[0];throw new W(`${n}: syntax error in expression (error token is "${i}")`)}return s.type==="ArithNumber"?s.value:e||0}catch(r){if(r instanceof W)throw r;let s=n.split(/\s+/).slice(1)[0]||n;throw new W(`${n}: syntax error in expression (error token is "${s}")`)}}function Ke(t,e,n=new Set){if(n.has(e))return 0;n.add(e);let r=Ss(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 Ke(t,o,n);try{let i=new F,{expr:a}=J(i,o,0);return q(t,a,n)}catch{return 0}}function q(t,e,n){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new W("value too great for base");return e.value;case"ArithVariable":return Ke(t,e.name,n);case"ArithBinary":{if(e.operator==="||")return q(t,e.left,n)||q(t,e.right,n)?1:0;if(e.operator==="&&")return q(t,e.left,n)&&q(t,e.right,n)?1:0;let r=q(t,e.left,n),s=q(t,e.right,n);return Tt(r,s,e.operator)}case"ArithUnary":{let r=q(t,e.operand,n);return Wt(r,e.operator)}case"ArithTernary":return q(t,e.condition,n)?q(t,e.consequent,n):q(t,e.alternate,n);case"ArithGroup":return q(t,e.expression,n);default:return C(t,e)}}function ce(t,e){if(e.startsWith("#")){let h=e.slice(1),d=t.state.env[h]||"";return String(d.length)}if(e.startsWith("!")){let h=e.slice(1),d=t.state.env[h]||"";return t.state.env[d]||""}let n=[":-",":=",":?",":+","-","=","?","+"],r=-1,s="";for(let h of n){let d=e.indexOf(h);d>0&&(r===-1||d<r)&&(r=d,s=h)}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==="",f=s.startsWith(":");switch(s){case":-":case"-":return l||f&&c?i:a||"";case":=":case"=":return l||f&&c?(t.state.env[o]=i,i):a||"";case":+":case"+":return!(l||f&&c)?i:"";case":?":case"?":{if(l||f&&c)throw new Error(i||`${o}: parameter null or not set`);return a||""}default:return a||""}}function C(t,e){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new W("value too great for base");return e.value;case"ArithVariable":return Ke(t,e.name);case"ArithNested":return C(t,e.expression);case"ArithCommandSubst":return 0;case"ArithBracedExpansion":{let n=ce(t,e.content);return Number.parseInt(n,10)||0}case"ArithDynamicBase":{let n=ce(t,e.baseExpr),r=Number.parseInt(n,10);if(r<2||r>64)return 0;let s=`${r}#${e.value}`;return ge(s)}case"ArithDynamicNumber":{let r=ce(t,e.prefix)+e.suffix;return ge(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=C(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
36
+ `,""):t.state.env[`${i}_${p}`]||""}let f=t.state.env[`${i}_${c}`];if(f===void 0&&s&&t.state.options.nounset)throw new K(`${i}[${c}]`);return f||""}if(/^[1-9][0-9]*$/.test(e)){let i=t.state.env[e];if(i===void 0&&s&&t.state.options.nounset)throw new K(e);return i||""}let o=t.state.env[e];if(o===void 0&&s&&t.state.options.nounset)throw new K(e);return o||""}async function Hr(t,e,s,r,n){let o=[];for(let f of e){let h=f.type==="ParameterExpansion"||f.type==="CommandSubstitution"||f.type==="ArithmeticExpansion";if(f.type==="ParameterExpansion"&&Dt(f)){let d=await n(t,f);o.push({value:d,splittable:!1})}else{let d=await n(t,f);o.push({value:d,splittable:h})}}if(!o.some(f=>f.splittable&&new RegExp(`[${r}]`).test(f.value))){let f=o.map(h=>h.value).join("");return f?[f]:[]}let a=new RegExp(`[${r}]+`),l=[],c="";for(let f=0;f<o.length;f++){let h=o[f];if(!h.splittable)c+=h.value;else{let d=h.value.split(a);for(let p=0;p<d.length;p++)p===0?c+=d[p]:(c!==""&&l.push(c),c=d[p])}}return c!==""&&l.push(c),l}function G(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Zr(t){switch(t.type){case"Literal":return t.value;case"SingleQuoted":return t.value;case"Escaped":return t.value;default:return null}}function qr(t){switch(t.type){case"SingleQuoted":case"Escaped":case"DoubleQuoted":return!0;case"Literal":return t.value==="";default:return!1}}function Lt(t){if(t==="")return"''";if(!/['\\\n\r\t\x00-\x1f\x7f]/.test(t))return`'${t}'`;let e="$'";for(let s of t)switch(s){case"'":e+="\\'";break;case"\\":e+="\\\\";break;case`
37
+ `:e+="\\n";break;case"\r":e+="\\r";break;case" ":e+="\\t";break;default:{let r=s.charCodeAt(0);r<32||r===127?e+=`\\x${r.toString(16).padStart(2,"0")}`:e+=s}}return`${e}'`}function me(t,e,s=!1){return e.map(r=>re(t,r,s)).join("")}async function ye(t,e,s=!1){let r=[];for(let n of e)r.push(await X(t,n));return r.join("")}function En(t){return qr(t)}function Qr(t){if(t.parts.length===0)return!0;for(let e of t.parts)if(!En(e))return!1;return!0}function Kr(t){return t.replace(/([*?[\]\\])/g,"\\$1")}function Xr(t,e,s=!1){let r=Zr(e);if(r!==null)return r;switch(e.type){case"ParameterExpansion":return rs(t,e,s);case"TildeExpansion":return s?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 re(t,e,s=!1){let r=Xr(t,e,s);if(r!==null)return r;switch(e.type){case"DoubleQuoted":{let n=[];for(let o of e.parts)n.push(re(t,o,!0));return n.join("")}case"ArithmeticExpansion":return String(N(t,e.expression.expression));case"BraceExpansion":{let n=[];for(let o of e.items)if(o.type==="Range"){let i=ve(o.start,o.end,o.step,o.startStr,o.endStr);if(i.expanded)n.push(...i.expanded);else return i.literal}else n.push(qe(t,o.word));return n.join(" ")}default:return""}}function qe(t,e){let s=e.parts,r=s.length;if(r===1)return re(t,s[0]);let n=[];for(let o=0;o<r;o++)n.push(re(t,s[o]));return n.join("")}async function v(t,e){return te(e)?ts(t,e):qe(t,e)}function Qe(t){for(let e of t)if(e.type==="BraceExpansion"||e.type==="DoubleQuoted"&&Qe(e.parts))return!0;return!1}function wn(t){for(let e of t){if(e.type==="BraceExpansion"){for(let s of e.items)if(s.type==="Word"&&te(s.word))return!0}if(He(e))return!0}return!1}var Yr=1e4,xe=1e5;function Jr(t,e,s={count:0}){if(s.count>xe)return[[]];let r=[[]];for(let n of e)if(n.type==="BraceExpansion"){let o=[],i=!1,a="";for(let f of n.items)if(f.type==="Range"){let h=ve(f.start,f.end,f.step,f.startStr,f.endStr);if(h.expanded)for(let d of h.expanded)s.count++,o.push(d);else{i=!0,a=h.literal;break}}else{let h=Jr(t,f.word.parts,s);for(let d of h)s.count++,o.push(d.join(""))}if(i){for(let f of r)s.count++,f.push(a);continue}if(r.length*o.length>Yr||s.count>xe)return r;let c=[];for(let f of r)for(let h of o){if(s.count++,s.count>xe)return c.length>0?c:r;c.push([...f,h])}r=c}else{let o=re(t,n);for(let i of r)s.count++,i.push(o)}return r}function gn(t,e){let s=e.parts;return Qe(s)?Jr(t,s).map(n=>n.join("")):[qe(t,e)]}async function es(t,e,s={count:0}){if(s.count>xe)return[[]];let r=[[]];for(let n of e)if(n.type==="BraceExpansion"){let o=[],i=!1,a="";for(let f of n.items)if(f.type==="Range"){let h=ve(f.start,f.end,f.step,f.startStr,f.endStr);if(h.expanded)for(let d of h.expanded)s.count++,o.push(d);else{i=!0,a=h.literal;break}}else{let h=await es(t,f.word.parts,s);for(let d of h)s.count++,o.push(d.join(""))}if(i){for(let f of r)s.count++,f.push(a);continue}if(r.length*o.length>Yr||s.count>xe)return r;let c=[];for(let f of r)for(let h of o){if(s.count++,s.count>xe)return c.length>0?c:r;c.push([...f,h])}r=c}else{let o=await X(t,n);for(let i of r)s.count++,i.push(o)}return r}async function An(t,e){let s=e.parts;return Qe(s)?(await es(t,s)).map(n=>n.join("")):[await v(t,e)]}async function Re(t,e){let s=e.parts,{hasQuoted:r,hasCommandSub:n,hasArrayVar:o,hasArrayAtExpansion:i,hasParamExpansion:a}=Br(s),c=Qe(s)?wn(s)?await An(t,e):gn(t,e):null;if(c&&c.length>1){let d=[];for(let p of c)if(!r&&/[*?[]/.test(p)){let g=await new Ae(t.fs,t.state.cwd).expand(p);g.length>0?d.push(...g):d.push(p)}else d.push(p);return{values:d,quoted:!1}}if(i&&s.length===1&&s[0].type==="DoubleQuoted"){let d=s[0];if(d.parts.length===1&&d.parts[0].type==="ParameterExpansion"){let y=d.parts[0].parameter.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@]\]$/);if(y){let g=y[1],m=T(t,g);if(m.length>0)return{values:m.map(([,w])=>w),quoted:!0};let E=t.state.env[g];return E!==void 0?{values:[E],quoted:!0}:{values:[],quoted:!0}}}}if(!r&&o&&s.length===1&&s[0].type==="ParameterExpansion"){let d=s[0].parameter;if(d==="@"||d==="*"){let p=Number.parseInt(t.state.env["#"]||"0",10);if(p===0)return{values:[],quoted:!1};let y=[];for(let g=1;g<=p;g++)y.push(t.state.env[String(g)]||"");return{values:y,quoted:!1}}}if(!r&&(n||o||a)&&!Ur(t.state.env)){let d=Ze(t.state.env),p=Ie(d),y=await Hr(t,s,d,p,X),g=[],m=new Ae(t.fs,t.state.cwd);for(let E of y)if(/[*?[]/.test(E)){let w=await m.expand(E);w.length>0?g.push(...w):g.push(E)}else g.push(E);return{values:g,quoted:!1}}let h=te(e)?await ts(t,e):qe(t,e);if(!r&&/[*?[]/.test(h)){let p=await new Ae(t.fs,t.state.cwd).expand(h);if(p.length>0)return{values:p,quoted:!1}}return h===""&&!r?{values:[],quoted:!1}:{values:[h],quoted:r}}async function ts(t,e){let s=e.parts,r=s.length;if(r===1)return X(t,s[0]);let n=[];for(let o=0;o<r;o++)n.push(await X(t,s[o]));return n.join("")}async function X(t,e){if(e.type==="ParameterExpansion"&&Rt(e))return xn(t,e);let s=Xr(t,e);if(s!==null)return s;switch(e.type){case"DoubleQuoted":{let r=[];for(let n of e.parts)r.push(await X(t,n));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 B)throw r;if(r instanceof k)return t.state.lastExitCode=r.exitCode,t.state.env["?"]=String(r.exitCode),r.stdout.replace(/\n+$/,"");throw r}case"ArithmeticExpansion":return String(await $(t,e.expression.expression));case"BraceExpansion":{let r=[];for(let n of e.items)if(n.type==="Range"){let o=ve(n.start,n.end,n.step,n.startStr,n.endStr);if(o.expanded)r.push(...o.expanded);else return o.literal}else r.push(await v(t,n.word));return r.join(" ")}default:return""}}function rs(t,e,s=!1){let{parameter:r,operation:n}=e,o=n&&(n.type==="DefaultValue"||n.type==="AssignDefault"||n.type==="UseAlternative"||n.type==="ErrorIfUnset"),i=Z(t,r,!o);if(!n)return i;let a=!(r in t.state.env),l=i==="";switch(n.type){case"DefaultValue":return(a||n.checkEmpty&&l)&&n.word?me(t,n.word.parts,s):i;case"AssignDefault":{if((a||n.checkEmpty&&l)&&n.word){let f=me(t,n.word.parts,s),h=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(h){let[,d,p]=h,y;if(/^\d+$/.test(p))y=Number.parseInt(p,10);else{try{let m=new F,E=L(m,p);y=N(t,E.expression)}catch{let m=t.state.env[p];y=m?Number.parseInt(m,10):0}Number.isNaN(y)&&(y=0)}t.state.env[`${d}_${y}`]=f;let g=Number.parseInt(t.state.env[`${d}__length`]||"0",10);y>=g&&(t.state.env[`${d}__length`]=String(y+1))}else t.state.env[r]=f;return f}return i}case"ErrorIfUnset":{if(a||n.checkEmpty&&l){let f=n.word?me(t,n.word.parts,s):`${r}: parameter null or not set`;throw new k(1,"",`bash: ${f}
38
+ `)}return i}case"UseAlternative":return!(a||n.checkEmpty&&l)&&n.word?me(t,n.word.parts,s):"";case"Length":{let c=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(c){let f=T(t,c[1]);return String(f.length)}if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)&&Vr(t,r)){let f=t.state.env[`${r}_0`]||"";return String(f.length)}return String(i.length)}case"LengthSliceError":throw new he(r);case"Substring":{let c=n.offset?N(t,n.offset.expression):0,f=n.length?N(t,n.length.expression):void 0;if(r==="@"||r==="*"){let y=(t.state.env["@"]||"").split(" ").filter(w=>w),g=t.state.env[0]||"bash",m=c===0?[g,...y]:y,E=c===0?0:c-1;if(E<0||E>=m.length)return"";if(f!==void 0){let w=f<0?m.length+f:E+f;return m.slice(E,Math.max(E,w)).join(" ")}return m.slice(E).join(" ")}let h=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(h){let g=T(t,h[1]).map(([,E])=>E),m=c;if(m<0&&(m=g.length+m,m<0))return"";if(f!==void 0){if(f<0){let E=g.length+f;return g.slice(m,Math.max(m,E)).join(" ")}return g.slice(m,m+f).join(" ")}return g.slice(m).join(" ")}let d=[...i],p=c;if(p<0&&(p=Math.max(0,d.length+p)),f!==void 0){if(f<0){let y=d.length+f;return d.slice(p,Math.max(p,y)).join("")}return d.slice(p,p+f).join("")}return d.slice(p).join("")}case"PatternRemoval":{let c="";if(n.pattern)for(let h of n.pattern.parts)if(h.type==="Glob")c+=j(h.pattern,n.greedy);else if(h.type==="Literal")c+=j(h.value,n.greedy);else if(h.type==="SingleQuoted"||h.type==="Escaped")c+=G(h.value);else if(h.type==="DoubleQuoted"){let d=me(t,h.parts);c+=G(d)}else if(h.type==="ParameterExpansion"){let d=re(t,h);c+=j(d,n.greedy)}else{let d=re(t,h);c+=G(d)}if(n.side==="prefix")return i.replace(new RegExp(`^${c}`),"");let f=new RegExp(`${c}$`);if(n.greedy)return i.replace(f,"");for(let h=i.length;h>=0;h--){let d=i.slice(h);if(f.test(d))return i.slice(0,h)}return i}case"PatternReplacement":{let c="";if(n.pattern)for(let d of n.pattern.parts)if(d.type==="Glob")c+=j(d.pattern,!0);else if(d.type==="Literal")c+=j(d.value,!0);else if(d.type==="SingleQuoted"||d.type==="Escaped")c+=G(d.value);else if(d.type==="DoubleQuoted"){let p=me(t,d.parts);c+=G(p)}else if(d.type==="ParameterExpansion"){let p=re(t,d);c+=j(p,!0)}else{let p=re(t,d);c+=G(p)}let f=n.replacement?me(t,n.replacement.parts):"";if(c==="")return i;n.anchor==="start"?c=`^${c}`:n.anchor==="end"&&(c=`${c}$`);let h=n.all?"g":"";try{let d=new RegExp(c,h);if(n.all){let p="",y=0,g=d.exec(i);for(;g!==null&&!(g[0].length===0&&g.index===i.length);)p+=i.slice(y,g.index)+f,y=g.index+g[0].length,g[0].length===0&&y++,g=d.exec(i);return p+=i.slice(y),p}return i.replace(d,f)}catch{return i}}case"CaseModification":return n.direction==="upper"?n.all?i.toUpperCase():i.charAt(0).toUpperCase()+i.slice(1):n.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&&n.operator==="Q")return T(t,c[1]).map(([,d])=>Lt(d)).join(" ");switch(n.operator){case"Q":return Lt(i);case"P":return i;case"a":return"";case"A":return`${r}=${Lt(i)}`;case"E":return i.replace(/\\([\\abefnrtv'"?])/g,(f,h)=>{switch(h){case"\\":return"\\";case"a":return"\x07";case"b":return"\b";case"e":return"\x1B";case"f":return"\f";case"n":return`
39
+ `;case"r":return"\r";case"t":return" ";case"v":return"\v";case"'":return"'";case'"':return'"';case"?":return"?";default:return h}});case"K":return"";default:return i}}case"Indirection":return Z(t,i);case"ArrayKeys":{let f=T(t,n.array).map(([h])=>String(h));return n.star?f.join(ke(t.state.env)):f.join(" ")}case"VarNamePrefix":{let c=Object.keys(t.state.env).filter(f=>f.startsWith(n.prefix)&&!f.includes("__")).sort();return n.star?c.join(ke(t.state.env)):c.join(" ")}default:return i}}async function xn(t,e,s=!1){let{parameter:r,operation:n}=e,o=n&&(n.type==="DefaultValue"||n.type==="AssignDefault"||n.type==="UseAlternative"||n.type==="ErrorIfUnset"),i=Z(t,r,!o);if(!n)return i;let a=!(r in t.state.env),l=i==="";switch(n.type){case"DefaultValue":return(a||n.checkEmpty&&l)&&n.word?ye(t,n.word.parts,s):i;case"AssignDefault":{if((a||n.checkEmpty&&l)&&n.word){let f=await ye(t,n.word.parts,s),h=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(h){let[,d,p]=h,y;if(/^\d+$/.test(p))y=Number.parseInt(p,10);else{try{let m=new F,E=L(m,p);y=await $(t,E.expression)}catch{let m=t.state.env[p];y=m?Number.parseInt(m,10):0}Number.isNaN(y)&&(y=0)}t.state.env[`${d}_${y}`]=f;let g=Number.parseInt(t.state.env[`${d}__length`]||"0",10);y>=g&&(t.state.env[`${d}__length`]=String(y+1))}else t.state.env[r]=f;return f}return i}case"ErrorIfUnset":{if(a||n.checkEmpty&&l){let f=n.word?await ye(t,n.word.parts,s):`${r}: parameter null or not set`;throw new k(1,"",`bash: ${f}
40
+ `)}return i}case"UseAlternative":return!(a||n.checkEmpty&&l)&&n.word?ye(t,n.word.parts,s):"";case"PatternRemoval":{let c="";if(n.pattern)for(let h of n.pattern.parts)if(h.type==="Glob")c+=j(h.pattern,n.greedy);else if(h.type==="Literal")c+=j(h.value,n.greedy);else if(h.type==="SingleQuoted"||h.type==="Escaped")c+=G(h.value);else if(h.type==="DoubleQuoted"){let d=await ye(t,h.parts);c+=G(d)}else if(h.type==="ParameterExpansion"){let d=await X(t,h);c+=j(d,n.greedy)}else{let d=await X(t,h);c+=G(d)}if(n.side==="prefix")return i.replace(new RegExp(`^${c}`),"");let f=new RegExp(`${c}$`);if(n.greedy)return i.replace(f,"");for(let h=i.length;h>=0;h--){let d=i.slice(h);if(f.test(d))return i.slice(0,h)}return i}case"PatternReplacement":{let c="";if(n.pattern)for(let d of n.pattern.parts)if(d.type==="Glob")c+=j(d.pattern,!0);else if(d.type==="Literal")c+=j(d.value,!0);else if(d.type==="SingleQuoted"||d.type==="Escaped")c+=G(d.value);else if(d.type==="DoubleQuoted"){let p=await ye(t,d.parts);c+=G(p)}else if(d.type==="ParameterExpansion"){let p=await X(t,d);c+=j(p,!0)}else{let p=await X(t,d);c+=G(p)}let f=n.replacement?await ye(t,n.replacement.parts):"";if(c==="")return i;n.anchor==="start"?c=`^${c}`:n.anchor==="end"&&(c=`${c}$`);let h=n.all?"g":"";try{let d=new RegExp(c,h);if(n.all){let p="",y=0,g=d.exec(i);for(;g!==null&&!(g[0].length===0&&g.index===i.length);)p+=i.slice(y,g.index)+f,y=g.index+g[0].length,g[0].length===0&&y++,g=d.exec(i);return p+=i.slice(y),p}return i.replace(d,f)}catch{return i}}default:return rs(t,e,s)}}function Tt(t,e,s){switch(s){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 W("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 ss(t,e,s){switch(s){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 Wt(t,e){switch(e){case"-":return-t;case"+":return+t;case"!":return t===0?1:0;case"~":return~t;default:return t}}function Sn(t,e){let s=t.state.env[e];if(s!==void 0)return s;let r=t.state.env[`${e}_0`];return r!==void 0?r:Z(t,e)}function Se(t){if(!t)return 0;let e=Number.parseInt(t,10);if(!Number.isNaN(e)&&/^-?\d+$/.test(t.trim()))return e;let s=t.trim();if(!s)return 0;try{let r=new F,{expr:n,pos:o}=J(r,s,0);if(o<s.length){let i=s.slice(o).trim().split(/\s+/)[0];throw new W(`${s}: syntax error in expression (error token is "${i}")`)}return n.type==="ArithNumber"?n.value:e||0}catch(r){if(r instanceof W)throw r;let n=s.split(/\s+/).slice(1)[0]||s;throw new W(`${s}: syntax error in expression (error token is "${n}")`)}}function Ke(t,e,s=new Set){if(s.has(e))return 0;s.add(e);let r=Sn(t,e);if(!r)return 0;let n=Number.parseInt(r,10);if(!Number.isNaN(n)&&/^-?\d+$/.test(r.trim()))return n;let o=r.trim();if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(o))return Ke(t,o,s);try{let i=new F,{expr:a}=J(i,o,0);return q(t,a,s)}catch{return 0}}function q(t,e,s){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new W("value too great for base");return e.value;case"ArithVariable":return Ke(t,e.name,s);case"ArithBinary":{if(e.operator==="||")return q(t,e.left,s)||q(t,e.right,s)?1:0;if(e.operator==="&&")return q(t,e.left,s)&&q(t,e.right,s)?1:0;let r=q(t,e.left,s),n=q(t,e.right,s);return Tt(r,n,e.operator)}case"ArithUnary":{let r=q(t,e.operand,s);return Wt(r,e.operator)}case"ArithTernary":return q(t,e.condition,s)?q(t,e.consequent,s):q(t,e.alternate,s);case"ArithGroup":return q(t,e.expression,s);default:return N(t,e)}}function ce(t,e){if(e.startsWith("#")){let h=e.slice(1),d=t.state.env[h]||"";return String(d.length)}if(e.startsWith("!")){let h=e.slice(1),d=t.state.env[h]||"";return t.state.env[d]||""}let s=[":-",":=",":?",":+","-","=","?","+"],r=-1,n="";for(let h of s){let d=e.indexOf(h);d>0&&(r===-1||d<r)&&(r=d,n=h)}if(r===-1)return Z(t,e);let o=e.slice(0,r),i=e.slice(r+n.length),a=t.state.env[o],l=a===void 0,c=a==="",f=n.startsWith(":");switch(n){case":-":case"-":return l||f&&c?i:a||"";case":=":case"=":return l||f&&c?(t.state.env[o]=i,i):a||"";case":+":case"+":return!(l||f&&c)?i:"";case":?":case"?":{if(l||f&&c)throw new Error(i||`${o}: parameter null or not set`);return a||""}default:return a||""}}function N(t,e){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new W("value too great for base");return e.value;case"ArithVariable":return Ke(t,e.name);case"ArithNested":return N(t,e.expression);case"ArithCommandSubst":return 0;case"ArithBracedExpansion":{let s=ce(t,e.content);return Number.parseInt(s,10)||0}case"ArithDynamicBase":{let s=ce(t,e.baseExpr),r=Number.parseInt(s,10);if(r<2||r>64)return 0;let n=`${r}#${e.value}`;return ge(n)}case"ArithDynamicNumber":{let r=ce(t,e.prefix)+e.suffix;return ge(r)}case"ArithArrayElement":{let s=t.state.associativeArrays?.has(e.array),r;if(e.stringKey!==void 0)r=`${e.array}_${e.stringKey}`;else if(s&&e.index?.type==="ArithVariable")r=`${e.array}_${e.index.name}`;else if(e.index){let o=N(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
41
41
  `,0;let c=Math.max(...a.map(([f])=>typeof f=="number"?f:0))+1+o;if(c<0)return t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${e.array}: bad array subscript
42
- `,0;o=c}r=`${e.array}_${o}`;let i=t.state.env[r];if(i!==void 0)return Se(i);if(o===0){let a=t.state.env[e.array];if(a!==void 0)return Se(a)}if(t.state.options.nounset&&!Object.keys(t.state.env).some(l=>l===e.array||l.startsWith(`${e.array}_`)))throw new K(`${e.array}[${o}]`);return 0}else return 0;let s=t.state.env[r];return s!==void 0?Se(s):0}case"ArithDoubleSubscript":throw new W("double subscript","","");case"ArithNumberSubscript":throw new W(`${e.number}${e.errorToken}: syntax error: invalid arithmetic operator (error token is "${e.errorToken}")`);case"ArithBinary":{if(e.operator==="||")return C(t,e.left)||C(t,e.right)?1:0;if(e.operator==="&&")return C(t,e.left)&&C(t,e.right)?1:0;let n=C(t,e.left),r=C(t,e.right);return Tt(n,r,e.operator)}case"ArithUnary":{let n=C(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=C(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 Wt(n,e.operator)}case"ArithTernary":return C(t,e.condition)?C(t,e.consequent):C(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=C(t,e.subscript);r=`${n}_${l}`}else{let l=C(t,e.subscript);if(l<0){let c=T(t,n);c.length>0&&(l=Math.max(...c.map(([h])=>typeof h=="number"?h:0))+1+l)}r=`${n}_${l}`}}let s=Number.parseInt(t.state.env[r]||"0",10)||0,o=C(t,e.value),i=nn(s,o,e.operator);return t.state.env[r]=String(i),i}case"ArithGroup":return C(t,e.expression);case"ArithConcat":{let n="";for(let r of e.parts)n+=sn(t,r);return Number.parseInt(n,10)||0}default:return 0}}function sn(t,e){switch(e.type){case"ArithNumber":return String(e.value);case"ArithVariable":return Z(t,e.name);case"ArithBracedExpansion":return ce(t,e.content);case"ArithCommandSubst":return"0";case"ArithConcat":{let n="";for(let r of e.parts)n+=sn(t,r);return n}default:return String(C(t,e))}}async function $(t,e){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new W("value too great for base");return e.value;case"ArithVariable":return Ke(t,e.name);case"ArithNested":return $(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=ce(t,e.content);return Number.parseInt(n,10)||0}case"ArithDynamicBase":{let n=ce(t,e.baseExpr),r=Number.parseInt(n,10);if(r<2||r>64)return 0;let s=`${r}#${e.value}`;return ge(s)}case"ArithDynamicNumber":{let r=ce(t,e.prefix)+e.suffix;return ge(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 $(t,e.index);r=`${e.array}_${o}`;let i=t.state.env[r];if(i!==void 0)return Se(i);if(o===0){let a=t.state.env[e.array];if(a!==void 0)return Se(a)}if(t.state.options.nounset&&!Object.keys(t.state.env).some(l=>l===e.array||l.startsWith(`${e.array}_`)))throw new K(`${e.array}[${o}]`);return 0}else return 0;let s=t.state.env[r];return s!==void 0?Se(s):0}case"ArithDoubleSubscript":throw new W("double subscript","","");case"ArithNumberSubscript":throw new W(`${e.number}${e.errorToken}: syntax error: invalid arithmetic operator (error token is "${e.errorToken}")`);case"ArithBinary":{if(e.operator==="||")return await $(t,e.left)||await $(t,e.right)?1:0;if(e.operator==="&&")return await $(t,e.left)&&await $(t,e.right)?1:0;let n=await $(t,e.left),r=await $(t,e.right);return Tt(n,r,e.operator)}case"ArithUnary":{let n=await $(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 $(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 Wt(n,e.operator)}case"ArithTernary":return await $(t,e.condition)?await $(t,e.consequent):await $(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 $(t,e.subscript);r=`${n}_${l}`}else{let l=await $(t,e.subscript);if(l<0){let c=T(t,n);c.length>0&&(l=Math.max(...c.map(([h])=>typeof h=="number"?h:0))+1+l)}r=`${n}_${l}`}}let s=Number.parseInt(t.state.env[r]||"0",10)||0,o=await $(t,e.value),i=nn(s,o,e.operator);return t.state.env[r]=String(i),i}case"ArithGroup":return await $(t,e.expression);case"ArithConcat":{let n="";for(let r of e.parts)n+=await on(t,r);return Number.parseInt(n,10)||0}default:return 0}}async function on(t,e){switch(e.type){case"ArithNumber":return String(e.value);case"ArithVariable":return Z(t,e.name);case"ArithBracedExpansion":return ce(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 on(t,r);return n}default:return String(await $(t,e))}}var N=Object.freeze({stdout:"",stderr:"",exitCode:0});function V(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 ne(t,e,n="",r=""){throw new B(t,e,n,r)}function Ft(t,e){if(t.state.loopDepth===0)return N;let n=1;if(e.length>0){let r=Number.parseInt(e[0],10);if(Number.isNaN(r)||r<1)throw new k(128,"",`bash: break: ${e[0]}: numeric argument required
43
- `);n=r}throw new z(n)}async function Mt(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 h=t.state.env.CDPATH;if(h){let d=h.split(":").filter(p=>p);for(let p of d){let y=p.startsWith("/")?`${p}/${n}`:`${t.state.cwd}/${p}/${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(h=>h&&h!=="."),c="";for(let h of l)if(h==="..")c=c.split("/").slice(0,-1).join("/")||"/";else{c=c?`${c}/${h}`:`/${h}`;try{if(!(await t.fs.stat(c)).isDirectory)return S(`bash: cd: ${n}: Not a directory
44
- `)}catch{return S(`bash: cd: ${n}: No such file or directory
42
+ `,0;o=c}r=`${e.array}_${o}`;let i=t.state.env[r];if(i!==void 0)return Se(i);if(o===0){let a=t.state.env[e.array];if(a!==void 0)return Se(a)}if(t.state.options.nounset&&!Object.keys(t.state.env).some(l=>l===e.array||l.startsWith(`${e.array}_`)))throw new K(`${e.array}[${o}]`);return 0}else return 0;let n=t.state.env[r];return n!==void 0?Se(n):0}case"ArithDoubleSubscript":throw new W("double subscript","","");case"ArithNumberSubscript":throw new W(`${e.number}${e.errorToken}: syntax error: invalid arithmetic operator (error token is "${e.errorToken}")`);case"ArithBinary":{if(e.operator==="||")return N(t,e.left)||N(t,e.right)?1:0;if(e.operator==="&&")return N(t,e.left)&&N(t,e.right)?1:0;let s=N(t,e.left),r=N(t,e.right);return Tt(s,r,e.operator)}case"ArithUnary":{let s=N(t,e.operand);if(e.operator==="++"||e.operator==="--"){if(e.operand.type==="ArithVariable"){let r=e.operand.name,n=Number.parseInt(Z(t,r),10)||0,o=e.operator==="++"?n+1:n-1;return t.state.env[r]=String(o),e.prefix?o:n}if(e.operand.type==="ArithArrayElement"){let r=e.operand.array,n=t.state.associativeArrays?.has(r),o;if(e.operand.stringKey!==void 0)o=`${r}_${e.operand.stringKey}`;else if(n&&e.operand.index?.type==="ArithVariable")o=`${r}_${e.operand.index.name}`;else if(e.operand.index){let l=N(t,e.operand.index);o=`${r}_${l}`}else return s;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 s}return Wt(s,e.operator)}case"ArithTernary":return N(t,e.condition)?N(t,e.consequent):N(t,e.alternate);case"ArithAssignment":{let s=e.variable,r=s;if(e.stringKey!==void 0)r=`${s}_${e.stringKey}`;else if(e.subscript){let a=t.state.associativeArrays?.has(s);if(a&&e.subscript.type==="ArithVariable")r=`${s}_${e.subscript.name}`;else if(a){let l=N(t,e.subscript);r=`${s}_${l}`}else{let l=N(t,e.subscript);if(l<0){let c=T(t,s);c.length>0&&(l=Math.max(...c.map(([h])=>typeof h=="number"?h:0))+1+l)}r=`${s}_${l}`}}let n=Number.parseInt(t.state.env[r]||"0",10)||0,o=N(t,e.value),i=ss(n,o,e.operator);return t.state.env[r]=String(i),i}case"ArithGroup":return N(t,e.expression);case"ArithConcat":{let s="";for(let r of e.parts)s+=ns(t,r);return Number.parseInt(s,10)||0}default:return 0}}function ns(t,e){switch(e.type){case"ArithNumber":return String(e.value);case"ArithVariable":return Z(t,e.name);case"ArithBracedExpansion":return ce(t,e.content);case"ArithCommandSubst":return"0";case"ArithConcat":{let s="";for(let r of e.parts)s+=ns(t,r);return s}default:return String(N(t,e))}}async function $(t,e){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new W("value too great for base");return e.value;case"ArithVariable":return Ke(t,e.name);case"ArithNested":return $(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 s=ce(t,e.content);return Number.parseInt(s,10)||0}case"ArithDynamicBase":{let s=ce(t,e.baseExpr),r=Number.parseInt(s,10);if(r<2||r>64)return 0;let n=`${r}#${e.value}`;return ge(n)}case"ArithDynamicNumber":{let r=ce(t,e.prefix)+e.suffix;return ge(r)}case"ArithArrayElement":{let s=t.state.associativeArrays?.has(e.array),r;if(e.stringKey!==void 0)r=`${e.array}_${e.stringKey}`;else if(s&&e.index?.type==="ArithVariable")r=`${e.array}_${e.index.name}`;else if(e.index){let o=await $(t,e.index);r=`${e.array}_${o}`;let i=t.state.env[r];if(i!==void 0)return Se(i);if(o===0){let a=t.state.env[e.array];if(a!==void 0)return Se(a)}if(t.state.options.nounset&&!Object.keys(t.state.env).some(l=>l===e.array||l.startsWith(`${e.array}_`)))throw new K(`${e.array}[${o}]`);return 0}else return 0;let n=t.state.env[r];return n!==void 0?Se(n):0}case"ArithDoubleSubscript":throw new W("double subscript","","");case"ArithNumberSubscript":throw new W(`${e.number}${e.errorToken}: syntax error: invalid arithmetic operator (error token is "${e.errorToken}")`);case"ArithBinary":{if(e.operator==="||")return await $(t,e.left)||await $(t,e.right)?1:0;if(e.operator==="&&")return await $(t,e.left)&&await $(t,e.right)?1:0;let s=await $(t,e.left),r=await $(t,e.right);return Tt(s,r,e.operator)}case"ArithUnary":{let s=await $(t,e.operand);if(e.operator==="++"||e.operator==="--"){if(e.operand.type==="ArithVariable"){let r=e.operand.name,n=Number.parseInt(Z(t,r),10)||0,o=e.operator==="++"?n+1:n-1;return t.state.env[r]=String(o),e.prefix?o:n}if(e.operand.type==="ArithArrayElement"){let r=e.operand.array,n=t.state.associativeArrays?.has(r),o;if(e.operand.stringKey!==void 0)o=`${r}_${e.operand.stringKey}`;else if(n&&e.operand.index?.type==="ArithVariable")o=`${r}_${e.operand.index.name}`;else if(e.operand.index){let l=await $(t,e.operand.index);o=`${r}_${l}`}else return s;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 s}return Wt(s,e.operator)}case"ArithTernary":return await $(t,e.condition)?await $(t,e.consequent):await $(t,e.alternate);case"ArithAssignment":{let s=e.variable,r=s;if(e.stringKey!==void 0)r=`${s}_${e.stringKey}`;else if(e.subscript){let a=t.state.associativeArrays?.has(s);if(a&&e.subscript.type==="ArithVariable")r=`${s}_${e.subscript.name}`;else if(a){let l=await $(t,e.subscript);r=`${s}_${l}`}else{let l=await $(t,e.subscript);if(l<0){let c=T(t,s);c.length>0&&(l=Math.max(...c.map(([h])=>typeof h=="number"?h:0))+1+l)}r=`${s}_${l}`}}let n=Number.parseInt(t.state.env[r]||"0",10)||0,o=await $(t,e.value),i=ss(n,o,e.operator);return t.state.env[r]=String(i),i}case"ArithGroup":return await $(t,e.expression);case"ArithConcat":{let s="";for(let r of e.parts)s+=await is(t,r);return Number.parseInt(s,10)||0}default:return 0}}async function is(t,e){switch(e.type){case"ArithNumber":return String(e.value);case"ArithVariable":return Z(t,e.name);case"ArithBracedExpansion":return ce(t,e.content);case"ArithCommandSubst":return t.execFn?(await t.execFn(e.command)).stdout.trim():"0";case"ArithConcat":{let s="";for(let r of e.parts)s+=await is(t,r);return s}default:return String(await $(t,e))}}var C=Object.freeze({stdout:"",stderr:"",exitCode:0});function V(t=""){return{stdout:t,stderr:"",exitCode:0}}function S(t,e=1){return{stdout:"",stderr:t,exitCode:e}}function x(t,e,s){return{stdout:t,stderr:e,exitCode:s}}function O(t){return{stdout:"",stderr:"",exitCode:t?0:1}}function se(t,e,s="",r=""){throw new B(t,e,s,r)}function Ft(t,e){if(t.state.loopDepth===0)return C;let s=1;if(e.length>0){let r=Number.parseInt(e[0],10);if(Number.isNaN(r)||r<1)throw new k(128,"",`bash: break: ${e[0]}: numeric argument required
43
+ `);s=r}throw new z(s)}async function Mt(t,e){let s,r=!1,n=!1,o=0;for(;o<e.length;)if(e[o]==="--"){o++;break}else if(e[o]==="-L")n=!1,o++;else if(e[o]==="-P")n=!0,o++;else if(e[o].startsWith("-")&&e[o]!=="-")o++;else break;let i=e.slice(o);if(i.length===0||i[0]==="~"?s=t.state.env.HOME||"/":i[0]==="-"?(s=t.state.previousDir,r=!0):s=i[0],!s.startsWith("/")&&!s.startsWith("./")&&!s.startsWith("../")&&s!=="."&&s!==".."){let h=t.state.env.CDPATH;if(h){let d=h.split(":").filter(p=>p);for(let p of d){let y=p.startsWith("/")?`${p}/${s}`:`${t.state.cwd}/${p}/${s}`;try{if((await t.fs.stat(y)).isDirectory){s=y,r=!0;break}}catch{}}}}let l=(s.startsWith("/")?s:`${t.state.cwd}/${s}`).split("/").filter(h=>h&&h!=="."),c="";for(let h of l)if(h==="..")c=c.split("/").slice(0,-1).join("/")||"/";else{c=c?`${c}/${h}`:`/${h}`;try{if(!(await t.fs.stat(c)).isDirectory)return S(`bash: cd: ${s}: Not a directory
44
+ `)}catch{return S(`bash: cd: ${s}: No such file or directory
45
45
  `)}}let f=c||"/";return t.state.previousDir=t.state.cwd,t.state.cwd=f,t.state.env.PWD=t.state.cwd,t.state.env.OLDPWD=t.state.previousDir,V(r?`${f}
46
- `:"")}function Bt(t,e){if(t.state.loopDepth===0)return N;if(e.length>1)throw new z(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
47
- `);n=r}throw new Q(n)}function Ee(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 le(t,e,n="bash"){return bs(t,e)?S(`${n}: ${e}: readonly variable
48
- `):null}function an(t){let e=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(e)return{name:e[1],isArray:!0,arrayElements:zt(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 cn(t,e,n={}){let{name:r,isArray:s,arrayElements:o,value:i}=e,{makeReadonly:a=!1,checkReadonly:l=!0}=n;if(l){let c=le(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&&Ee(t,r),null}function Ut(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 f of c.slice(1))f==="a"?n=!0:f==="A"?r=!0:f==="r"?s=!0:f==="x"?o=!0:f==="p"&&(i=!0);else a.push(c)}if(i&&a.length>0){let l="";for(let c of a){let f=t.state.env[c];if(f!==void 0){let h=f.replace(/\\/g,"\\\\").replace(/"/g,'\\"');l+=`declare -- ${c}="${h}"
46
+ `:"")}function Bt(t,e){if(t.state.loopDepth===0)return C;if(e.length>1)throw new z(1);let s=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
47
+ `);s=r}throw new Q(s)}function Ee(t,e){t.state.readonlyVars=t.state.readonlyVars||new Set,t.state.readonlyVars.add(e)}function bn(t,e){return t.state.readonlyVars?.has(e)??!1}function le(t,e,s="bash"){return bn(t,e)?S(`${s}: ${e}: readonly variable
48
+ `):null}function os(t){let e=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(e)return{name:e[1],isArray:!0,arrayElements:zt(e[2])};if(t.includes("=")){let s=t.indexOf("=");return{name:t.slice(0,s),isArray:!1,value:t.slice(s+1)}}return{name:t,isArray:!1}}function as(t,e,s={}){let{name:r,isArray:n,arrayElements:o,value:i}=e,{makeReadonly:a=!1,checkReadonly:l=!0}=s;if(l){let c=le(t,r);if(c)return c}if(n&&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&&Ee(t,r),null}function Ut(t,e){let s=!1,r=!1,n=!1,o=!1,i=!1,a=[];for(let l=0;l<e.length;l++){let c=e[l];if(c==="-a")s=!0;else if(c==="-A")r=!0;else if(c==="-r")n=!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 f of c.slice(1))f==="a"?s=!0:f==="A"?r=!0:f==="r"?n=!0:f==="x"?o=!0:f==="p"&&(i=!0);else a.push(c)}if(i&&a.length>0){let l="";for(let c of a){let f=t.state.env[c];if(f!==void 0){let h=f.replace(/\\/g,"\\\\").replace(/"/g,'\\"');l+=`declare -- ${c}="${h}"
49
49
  `}}return V(l)}if(a.length===0&&!i){let l="",c=Object.entries(t.state.env).filter(([f])=>!f.startsWith("BASH_")).sort(([f],[h])=>f.localeCompare(h));for(let[f,h]of c){let d=h.replace(/'/g,"'\\''");l+=`declare -- ${f}='${d}'
50
- `}return V(l)}for(let l of a){let c=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(c){let f=c[1],h=c[2];if(r&&(t.state.associativeArrays??=new Set,t.state.associativeArrays.add(f)),r&&h.includes("[")){let d=Ns(h);for(let[p,y]of d)t.state.env[`${f}_${p}`]=y}else{let d=zt(h);for(let p=0;p<d.length;p++)t.state.env[`${f}_${p}`]=d[p];t.state.env[`${f}__length`]=String(d.length)}s&&Ee(t,f);continue}if(l.includes("=")){let f=l.indexOf("="),h=l.slice(0,f),d=l.slice(f+1),p=le(t,h);if(p)return p;t.state.env[h]=d,s&&Ee(t,h)}else{let f=l;r&&(t.state.associativeArrays??=new Set,t.state.associativeArrays.add(f));let h=Object.keys(t.state.env).some(d=>d.startsWith(`${f}_`)&&!d.startsWith(`${f}__length`));!(f in t.state.env)&&!h&&(n||r?t.state.env[`${f}__length`]="0":t.state.env[f]=""),s&&Ee(t,f)}}return N}function zt(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===`
51
- `)&&!r&&!s){n&&(e.push(n),n="");continue}n+=i}return n&&e.push(n),e}function Ns(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 jt(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}"
52
- `)}return V(a)}}else if(i==="--"){s.push(...e.slice(o+1));break}else i.startsWith("-")||s.push(i)}for(let o of s){let i=an(o);if(i.value===void 0&&!i.isArray){Ee(t,i.name);continue}let a=cn(t,i,{makeReadonly:!0});if(a)return a}return N}async function Gt(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
50
+ `}return V(l)}for(let l of a){let c=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(c){let f=c[1],h=c[2];if(r&&(t.state.associativeArrays??=new Set,t.state.associativeArrays.add(f)),r&&h.includes("[")){let d=Cn(h);for(let[p,y]of d)t.state.env[`${f}_${p}`]=y}else{let d=zt(h);for(let p=0;p<d.length;p++)t.state.env[`${f}_${p}`]=d[p];t.state.env[`${f}__length`]=String(d.length)}n&&Ee(t,f);continue}if(l.includes("=")){let f=l.indexOf("="),h=l.slice(0,f),d=l.slice(f+1),p=le(t,h);if(p)return p;t.state.env[h]=d,n&&Ee(t,h)}else{let f=l;r&&(t.state.associativeArrays??=new Set,t.state.associativeArrays.add(f));let h=Object.keys(t.state.env).some(d=>d.startsWith(`${f}_`)&&!d.startsWith(`${f}__length`));!(f in t.state.env)&&!h&&(s||r?t.state.env[`${f}__length`]="0":t.state.env[f]=""),n&&Ee(t,f)}}return C}function zt(t){let e=[],s="",r=!1,n=!1,o=!1;for(let i of t){if(o){s+=i,o=!1;continue}if(i==="\\"){o=!0;continue}if(i==="'"&&!n){r=!r;continue}if(i==='"'&&!r){n=!n;continue}if((i===" "||i===" "||i===`
51
+ `)&&!r&&!n){s&&(e.push(s),s="");continue}s+=i}return s&&e.push(s),e}function Cn(t){let e=[],s=0;for(;s<t.length;){for(;s<t.length&&/\s/.test(t[s]);)s++;if(s>=t.length)break;if(t[s]!=="["){s++;continue}s++;let r="";if(t[s]==="'"||t[s]==='"'){let o=t[s];for(s++;s<t.length&&t[s]!==o;)r+=t[s],s++;t[s]===o&&s++}else for(;s<t.length&&t[s]!=="]"&&t[s]!=="=";)r+=t[s],s++;for(;s<t.length&&t[s]!=="]";)s++;if(t[s]==="]"&&s++,t[s]!=="=")continue;s++;let n="";if(t[s]==="'"||t[s]==='"'){let o=t[s];for(s++;s<t.length&&t[s]!==o;)t[s]==="\\"&&s+1<t.length&&s++,n+=t[s],s++;t[s]===o&&s++}else for(;s<t.length&&!/\s/.test(t[s]);)n+=t[s],s++;e.push([r,n])}return e}function jt(t,e){let s=!1,r=!1,n=[];for(let o=0;o<e.length;o++){let i=e[o];if(i==="-a")s=!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}"
52
+ `)}return V(a)}}else if(i==="--"){n.push(...e.slice(o+1));break}else i.startsWith("-")||n.push(i)}for(let o of n){let i=os(o);if(i.value===void 0&&!i.isArray){Ee(t,i.name);continue}let a=as(t,i,{makeReadonly:!0});if(a)return a}return C}async function Gt(t,e){let s=e;if(s.length>0){let n=s[0];if(n==="--")s=s.slice(1);else if(n.startsWith("-")&&n!=="-"&&n.length>1)return S(`bash: eval: ${n}: invalid option
53
53
  eval: usage: eval [arg ...]
54
- `,2)}if(n.length===0)return N;let r=n.join(" ");if(r.trim()==="")return N;try{let s=ae(r);return t.executeScript(s)}catch(s){if(s instanceof z||s instanceof Q||s instanceof U||s instanceof k)throw s;if(s.name==="ParseException")return S(`bash: eval: ${s.message}
55
- `);throw s}}function Vt(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
56
- `,n=2):n=(o%256+256)%256}throw new k(n,"",r)}function Ht(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 f=c.replace(/'/g,"'\\''");i+=`declare -x ${l}='${f}'
57
- `}return V(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
58
- `,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 Cs(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 Zt(t,e){if(e.length===0)return S(`bash: let: expression expected
59
- `);let n=Cs(e),r=0;for(let s of n)try{let i=ae(`(( ${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 $(t,a.expression.expression))}}catch(o){return S(`bash: let: ${s}: ${o.message}
60
- `)}return x("","",r===0?1:0)}function $s(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 qt(t,e){if(t.state.localScopes.length===0)return S(`bash: local: can only be used in a function
61
- `);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=$s(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
62
- `,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 Qt(t,e,n){let r=!1,s=`
63
- `,o="",i=-1,a=null,l=[],c=0,f=!1;for(;c<e.length;){let w=e[c];w==="-r"?r=!0:w==="-d"&&c+1<e.length?(s=e[c+1],c++):w==="-p"&&c+1<e.length?(o=e[c+1],c++):w==="-n"&&c+1<e.length?(i=Number.parseInt(e[c+1],10),(Number.isNaN(i)||i<0)&&(f=!0,i=0),c++):w==="-a"&&c+1<e.length?(a=e[c+1],c++):w==="-t"?c+1<e.length&&!e[c+1].startsWith("-")&&c++:w==="-s"||w.startsWith("-")||l.push(w),c++}if(f)return x("","",1);l.length===0&&a===null&&l.push("REPLY");let h=n;!h&&t.state.groupStdin!==void 0&&(h=t.state.groupStdin);let d="",p=0,y=!0;if(i>=0){for(let w=0;w<h.length&&w<i;w++){let b=h[w];if(b===s){p=w+1;break}d+=b,p=w+1}t.state.groupStdin!==void 0&&!n&&(t.state.groupStdin=h.substring(p))}else{let w=h;for(p=0;;){let b=w.indexOf(s);if(b!==-1){let P=w.substring(0,b);if(p+=b+s.length,w=w.substring(b+s.length),!r&&P.endsWith("\\")){d+=P.slice(0,-1);continue}d+=P,y=!0;break}else if(w.length>0){d+=w,p+=w.length,y=!1,w="";break}else{if(d.length===0){for(let P of l)t.state.env[P]="";return a&&Ot(t,a),x("","",1)}y=!1;break}}t.state.groupStdin!==void 0&&!n&&(t.state.groupStdin=h.substring(p))}if(s===`
54
+ `,2)}if(s.length===0)return C;let r=s.join(" ");if(r.trim()==="")return C;try{let n=ae(r);return t.executeScript(n)}catch(n){if(n instanceof z||n instanceof Q||n instanceof U||n instanceof k)throw n;if(n.name==="ParseException")return S(`bash: eval: ${n.message}
55
+ `);throw n}}function Vt(t,e){let s,r="";if(e.length===0)s=t.state.lastExitCode;else{let n=e[0],o=Number.parseInt(n,10);n===""||Number.isNaN(o)||!/^-?\d+$/.test(n)?(r=`bash: exit: ${n}: numeric argument required
56
+ `,s=2):s=(o%256+256)%256}throw new k(s,"",r)}function Ht(t,e){let s=!1,r=[];for(let i of e)i==="-n"?s=!0:i==="-p"||i==="--"||r.push(i);if(r.length===0&&!s){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 f=c.replace(/'/g,"'\\''");i+=`declare -x ${l}='${f}'
57
+ `}return V(i)}if(s){for(let i of r){let a=i.split("=")[0];delete t.state.env[a]}return C}let n="",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)){n+=`bash: export: \`${i}': not a valid identifier
58
+ `,o=1;continue}l!==void 0?t.state.env[a]=l:a in t.state.env||(t.state.env[a]="")}return x("",n,o)}function Nn(t){let e=[],s="",r=0;for(let n of t){for(let o of n)o==="("?r++:o===")"&&r--;s?s+=` ${n}`:s=n,r===0&&(e.push(s),s="")}return s&&e.push(s),e}async function Zt(t,e){if(e.length===0)return S(`bash: let: expression expected
59
+ `);let s=Nn(e),r=0;for(let n of s)try{let i=ae(`(( ${n} ))`).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 $(t,a.expression.expression))}}catch(o){return S(`bash: let: ${n}: ${o.message}
60
+ `)}return x("","",r===0?1:0)}function $n(t,e){let s=t.state.env.HOME||"/home/user";return e.split(":").map(o=>o==="~"?s:o==="~root"?"/root":o.startsWith("~/")?s+o.slice(1):o.startsWith("~root/")?`/root${o.slice(5)}`:o).join(":")}function qt(t,e){if(t.state.localScopes.length===0)return S(`bash: local: can only be used in a function
61
+ `);let s=t.state.localScopes[t.state.localScopes.length-1],r="",n=0;for(let o of e){let i,a;if(o.includes("=")){let l=o.indexOf("=");i=o.slice(0,l),a=$n(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
62
+ `,n=1;continue}s.has(i)||s.set(i,t.state.env[i]),a!==void 0&&(t.state.env[i]=a)}return x("",r,n)}function Qt(t,e,s){let r=!1,n=`
63
+ `,o="",i=-1,a=null,l=[],c=0,f=!1;for(;c<e.length;){let w=e[c];w==="-r"?r=!0:w==="-d"&&c+1<e.length?(n=e[c+1],c++):w==="-p"&&c+1<e.length?(o=e[c+1],c++):w==="-n"&&c+1<e.length?(i=Number.parseInt(e[c+1],10),(Number.isNaN(i)||i<0)&&(f=!0,i=0),c++):w==="-a"&&c+1<e.length?(a=e[c+1],c++):w==="-t"?c+1<e.length&&!e[c+1].startsWith("-")&&c++:w==="-s"||w.startsWith("-")||l.push(w),c++}if(f)return x("","",1);l.length===0&&a===null&&l.push("REPLY");let h=s;!h&&t.state.groupStdin!==void 0&&(h=t.state.groupStdin);let d="",p=0,y=!0;if(i>=0){for(let w=0;w<h.length&&w<i;w++){let b=h[w];if(b===n){p=w+1;break}d+=b,p=w+1}t.state.groupStdin!==void 0&&!s&&(t.state.groupStdin=h.substring(p))}else{let w=h;for(p=0;;){let b=w.indexOf(n);if(b!==-1){let P=w.substring(0,b);if(p+=b+n.length,w=w.substring(b+n.length),!r&&P.endsWith("\\")){d+=P.slice(0,-1);continue}d+=P,y=!0;break}else if(w.length>0){d+=w,p+=w.length,y=!1,w="";break}else{if(d.length===0){for(let P of l)t.state.env[P]="";return a&&Ot(t,a),x("","",1)}y=!1;break}}t.state.groupStdin!==void 0&&!s&&(t.state.groupStdin=h.substring(p))}if(n===`
64
64
  `&&d.endsWith(`
65
- `)&&(d=d.slice(0,-1)),r||(d=d.replace(/\\(.)/g,"$1")),l.length===1&&l[0]==="REPLY")return t.state.env.REPLY=d,x("","",y?0:1);let g=Ze(t.state.env),{words:m,wordStarts:E}=jr(d,g);if(a){Ot(t,a);for(let w=0;w<m.length;w++)t.state.env[`${a}_${w}`]=m[w];return x("","",y?0:1)}for(let w=0;w<l.length;w++){let b=l[w];if(w<l.length-1)t.state.env[b]=m[w]??"";else if(w<E.length){let P=Gr(d.substring(E[w]),g);t.state.env[b]=P}else t.state.env[b]=""}return x("","",y?0:1)}function Kt(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
66
- `,2);n=(s%256+256)%256}throw new U(n)}function vs(t){return/^[a-zA-Z0-9_/.:-]*$/.test(t)?t:`'${t.replace(/'/g,"'\\''")}'`}var Xe=`set: usage: set [-eux] [+eux] [-o option] [+o option]
65
+ `)&&(d=d.slice(0,-1)),r||(d=d.replace(/\\(.)/g,"$1")),l.length===1&&l[0]==="REPLY")return t.state.env.REPLY=d,x("","",y?0:1);let g=Ze(t.state.env),{words:m,wordStarts:E}=jr(d,g);if(a){Ot(t,a);for(let w=0;w<m.length;w++)t.state.env[`${a}_${w}`]=m[w];return x("","",y?0:1)}for(let w=0;w<l.length;w++){let b=l[w];if(w<l.length-1)t.state.env[b]=m[w]??"";else if(w<E.length){let P=Gr(d.substring(E[w]),g);t.state.env[b]=P}else t.state.env[b]=""}return x("","",y?0:1)}function Kt(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 s=t.state.lastExitCode;if(e.length>0){let r=e[0],n=Number.parseInt(r,10);if(r===""||Number.isNaN(n)||!/^-?\d+$/.test(r))return S(`bash: return: ${r}: numeric argument required
66
+ `,2);s=(n%256+256)%256}throw new U(s)}function vn(t){return/^[a-zA-Z0-9_/.:-]*$/.test(t)?t:`'${t.replace(/'/g,"'\\''")}'`}var Xe=`set: usage: set [-eux] [+eux] [-o option] [+o option]
67
67
  Options:
68
68
  -e Exit immediately if a command exits with non-zero status
69
69
  +e Disable -e
@@ -79,67 +79,67 @@ Options:
79
79
  +o pipefail Disable pipefail
80
80
  -o xtrace Same as -x
81
81
  +o xtrace Disable xtrace
82
- `,ln={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},fn={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},un=["errexit","nounset","pipefail","verbose","xtrace"],hn=["allexport","braceexpand","emacs","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","noclobber","noexec","noglob","nolog","notify","onecmd","physical","posix","privileged","vi"];function dn(t,e,n){e!==null&&(t.state.options[e]=n)}function Ps(t,e){return e+1<t.length&&!t[e+1].startsWith("-")&&!t[e+1].startsWith("+")}function Yt(t,e){if(e.includes("--help"))return V(Xe);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}=${vs(o)}`).join(`
82
+ `,cs={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},ls={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},fs=["errexit","nounset","pipefail","verbose","xtrace"],us=["allexport","braceexpand","emacs","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","noclobber","noexec","noglob","nolog","notify","onecmd","physical","posix","privileged","vi"];function hs(t,e,s){e!==null&&(t.state.options[e]=s)}function Pn(t,e){return e+1<t.length&&!t[e+1].startsWith("-")&&!t[e+1].startsWith("+")}function Yt(t,e){if(e.includes("--help"))return V(Xe);if(e.length===0){let r=Object.entries(t.state.env).filter(([n])=>/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(n)).sort(([n],[o])=>n.localeCompare(o)).map(([n,o])=>`${n}=${vn(o)}`).join(`
83
83
  `);return V(r?`${r}
84
- `:"")}let n=0;for(;n<e.length;){let r=e[n];if((r==="-o"||r==="+o")&&Ps(e,n)){let s=e[n+1];if(!(s in fn))return S(`bash: set: ${s}: invalid option name
85
- ${Xe}`);dn(t,fn[s],r==="-o"),n+=2;continue}if(r==="-o"){let s=un.map(a=>`${a.padEnd(16)}${t.state.options[a]?"on":"off"}`),o=hn.map(a=>`${a.padEnd(16)}off`),i=[...s,...o].sort();return V(`${i.join(`
84
+ `:"")}let s=0;for(;s<e.length;){let r=e[s];if((r==="-o"||r==="+o")&&Pn(e,s)){let n=e[s+1];if(!(n in ls))return S(`bash: set: ${n}: invalid option name
85
+ ${Xe}`);hs(t,ls[n],r==="-o"),s+=2;continue}if(r==="-o"){let n=fs.map(a=>`${a.padEnd(16)}${t.state.options[a]?"on":"off"}`),o=us.map(a=>`${a.padEnd(16)}off`),i=[...n,...o].sort();return V(`${i.join(`
86
86
  `)}
87
- `)}if(r==="+o"){let s=un.map(a=>`set ${t.state.options[a]?"-o":"+o"} ${a}`),o=hn.map(a=>`set +o ${a}`),i=[...s,...o].sort();return V(`${i.join(`
87
+ `)}if(r==="+o"){let n=fs.map(a=>`set ${t.state.options[a]?"-o":"+o"} ${a}`),o=us.map(a=>`set +o ${a}`),i=[...n,...o].sort();return V(`${i.join(`
88
88
  `)}
89
- `)}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 ln))return S(`bash: set: ${r[0]}${i}: invalid option
90
- ${Xe}`);dn(t,ln[i],s)}n++;continue}if(r==="--")return Xt(t,e.slice(n+1)),N;if(r==="-"){if(t.state.options.xtrace=!1,t.state.options.verbose=!1,n+1<e.length)return Xt(t,e.slice(n+1)),N;n++;continue}if(r==="+"){n++;continue}return r.startsWith("-")||r.startsWith("+")?S(`bash: set: ${r}: invalid option
91
- ${Xe}`):(Xt(t,e.slice(n)),N)}return N}function Xt(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 Jt(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
92
- `);n=i}let r=Number.parseInt(t.state.env["#"]||"0",10);if(n>r)return S(`bash: shift: shift count out of range
93
- `);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 er(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
94
- `,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(f=>f);for(let f of c){let h=t.fs.resolvePath(t.state.cwd,`${f}/${r}`);try{if((await t.fs.stat(h)).isDirectory)continue;o=await t.fs.readFile(h),s=h;break}catch{}}if(o===null){let f=t.fs.resolvePath(t.state.cwd,r);try{o=await t.fs.readFile(f),s=f}catch{}}}if(o===null)return S(`bash: ${r}: No such file or directory
95
- `);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=ae(o),c=await t.executeScript(l);return a(),c}catch(l){if(a(),l instanceof k)throw l;if(l instanceof U)return x(l.stdout,l.stderr,l.exitCode);if(l.name==="ParseException")return S(`bash: ${r}: ${l.message}
96
- `);throw l}}function tr(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 f=T(t,a);for(let[h]of f)delete t.state.env[`${a}_${h}`];delete t.state.env[a];continue}let c;if(/^-?\d+$/.test(l))c=Number.parseInt(l,10);else{let f=t.state.env[l];c=f?Number.parseInt(f,10):0,Number.isNaN(c)&&(c=0)}if(c<0){let f=T(t,a),h=f.length;if(h===0){r+=`bash: unset: [${c}]: bad array subscript
97
- `,s=1;continue}let d=h+c;if(d<0){r+=`bash: unset: [${c}]: bad array subscript
98
- `,s=1;continue}let p=f[d][0];delete t.state.env[`${a}_${p}`];continue}delete t.state.env[`${a}_${c}`];continue}delete t.state.env[o],t.state.functions.delete(o)}return x("",r,s)}function rr(t,e){return t.fs.resolvePath(t.state.cwd,e)}var Is=["-e","-a","-f","-d","-r","-w","-x","-s","-L","-h","-k","-g","-u","-G","-O","-b","-c","-p","-S","-t","-N"];function Ye(t){return Is.includes(t)}async function Je(t,e,n){let r=rr(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 ks=["-nt","-ot","-ef"];function et(t){return ks.includes(t)}async function tt(t,e,n,r){let s=rr(t,n),o=rr(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 Rs=new Set(["-eq","-ne","-lt","-le","-gt","-ge"]);function rt(t){return Rs.has(t)}function nt(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 st(t){return t==="="||t==="=="||t==="!="}function it(t,e,n,r=!1){let s=r?ot(e,n):e===n;return t==="!="?!s:s}var Ds=new Set(["-z","-n"]);function at(t){return Ds.has(t)}function ct(t,e){switch(t){case"-z":return e==="";case"-n":return e!==""}}function lt(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=Pe(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 fe(t,e){switch(e.type){case"CondBinary":{let n=await v(t,e.left),r=await v(t,e.right),s=e.right.parts.length>0&&e.right.parts.every(o=>o.type==="SingleQuoted"||o.type==="DoubleQuoted"||o.type==="Escaped");if(st(e.operator))return it(e.operator,n,r,!s);if(rt(e.operator))return nt(e.operator,mn(t,n),mn(t,r));if(et(e.operator))return tt(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 v(t,e.operand);return Ye(e.operator)?Je(t,e.operator,n):at(e.operator)?ct(e.operator,n):e.operator==="-v"?lt(t,n):e.operator==="-o"?sr(t,n):!1}case"CondNot":return!await fe(t,e.operand);case"CondAnd":return await fe(t,e.left)?await fe(t,e.right):!1;case"CondOr":return await fe(t,e.left)?!0:await fe(t,e.right);case"CondGroup":return await fe(t,e.expression);case"CondWord":return await v(t,e.word)!=="";default:return!1}}async function be(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 ')'
99
- `,2):Ye(r)?O(await Je(t,r,s)):at(r)?O(ct(r,s)):r==="!"?O(!s):r==="-v"?O(lt(t,s)):r==="-o"?O(sr(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
100
- `,2):x("","",1)}if(e.length===3){let r=e[0],s=e[1],o=e[2];if(st(s))return O(it(s,r,o));if(rt(s)){let i=ft(r),a=ft(o);return!i.valid||!a.valid?x("","",2):O(nt(s,i.value,a.value))}if(et(s))return O(await tt(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 be(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 be(t,e.slice(1));return x("",r.stderr,r.exitCode===0?1:r.exitCode===1?0:r.exitCode)}if(e[0]==="("&&e[3]===")")return be(t,[e[1],e[2]])}let n=await En(t,e,0);return n.pos<e.length?S(`test: too many arguments
101
- `,2):O(n.value)}async function En(t,e,n){return Os(t,e,n)}async function Os(t,e,n){let{value:r,pos:s}=await pn(t,e,n);for(;e[s]==="-o";){let o=await pn(t,e,s+1);r=r||o.value,s=o.pos}return{value:r,pos:s}}async function pn(t,e,n){let{value:r,pos:s}=await nr(t,e,n);for(;e[s]==="-a";){let o=await nr(t,e,s+1);r=r&&o.value,s=o.pos}return{value:r,pos:s}}async function nr(t,e,n){if(e[n]==="!"){let{value:r,pos:s}=await nr(t,e,n+1);return{value:!r,pos:s}}return _s(t,e,n)}async function _s(t,e,n){let r=e[n];if(r==="("){let{value:o,pos:i}=await En(t,e,n+1);return{value:o,pos:e[i]===")"?i+1:i}}if(Ye(r)){let o=e[n+1]??"";return{value:await Je(t,r,o),pos:n+2}}if(at(r)){let o=e[n+1]??"";return{value:ct(r,o),pos:n+2}}if(r==="-v"){let o=e[n+1]??"";return{value:lt(t,o),pos:n+2}}if(r==="-o"){let o=e[n+1]??"";return{value:sr(t,o),pos:n+2}}let s=e[n+1];if(st(s)){let o=r,i=e[n+2]??"";return{value:it(s,o,i),pos:n+3}}if(rt(s)){let o=ft(r),i=ft(e[n+2]??"0");return!o.valid||!i.valid?{value:!1,pos:n+3}:{value:nt(s,o.value,i.value),pos:n+3}}if(et(s)){let o=r,i=e[n+2]??"";return{value:await tt(t,s,o,i),pos:n+3}}return{value:r!==void 0&&r!=="",pos:n+1}}function ot(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 sr(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 mn(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 yn(e);try{let n=new F,r=L(n,e);return C(t,r.expression)}catch{return yn(e)}}function Ls(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 yn(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=Ls(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 ft(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 ir(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 De(t,e,n,r){if(t instanceof z)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 Q)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 U||t instanceof Y||t instanceof k||t instanceof B)return t.prependOutput(e,n),{action:"rethrow",stdout:e,stderr:n,error:t};let s=se(t);return{action:"error",stdout:e,stderr:`${n}${s}
102
- `,exitCode:1}}async function ut(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(We(a)||a instanceof Y||a instanceof k||a instanceof B)throw a.prependOutput(s,o),a;return{stdout:s,stderr:`${o}${se(a)}
103
- `,exitCode:1}}return{stdout:s,stderr:o,exitCode:i}}async function wn(t,e){let n="",r="";for(let s of e.clauses){let o=await ir(t,s.condition);if(n+=o.stdout,r+=o.stderr,o.exitCode===0)return ut(t,s.body,n,r)}return e.elseBody?ut(t,e.elseBody,n,r):x(n,r,0)}async function gn(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
104
- `);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 Re(t,a);i.push(...l.values)}t.state.loopDepth++;try{for(let a of i){o++,o>t.limits.maxLoopIterations&&ne(`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=De(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 An(t,e){let n="",r="",s=0,o=0;e.init&&await $(t,e.init.expression),t.state.loopDepth++;try{for(;o++,o>t.limits.maxLoopIterations&&ne(`for loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r),!(e.condition&&await $(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=De(i,n,r,t.state.loopDepth);if(n=a.stdout,r=a.stderr,a.action==="break")break;if(a.action==="continue"){e.update&&await $(t,e.update.expression);continue}if(a.action==="error")return x(n,r,a.exitCode??1);throw a.error}e.update&&await $(t,e.update.expression)}}finally{t.state.loopDepth--}return x(n,r,s)}async function xn(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 f=c.target,h=await v(t,f.content);f.stripTabs&&(h=h.split(`
89
+ `)}if(r.length>1&&(r[0]==="-"||r[0]==="+")&&r[1]!=="-"){let n=r[0]==="-";for(let o=1;o<r.length;o++){let i=r[o];if(!(i in cs))return S(`bash: set: ${r[0]}${i}: invalid option
90
+ ${Xe}`);hs(t,cs[i],n)}s++;continue}if(r==="--")return Xt(t,e.slice(s+1)),C;if(r==="-"){if(t.state.options.xtrace=!1,t.state.options.verbose=!1,s+1<e.length)return Xt(t,e.slice(s+1)),C;s++;continue}if(r==="+"){s++;continue}return r.startsWith("-")||r.startsWith("+")?S(`bash: set: ${r}: invalid option
91
+ ${Xe}`):(Xt(t,e.slice(s)),C)}return C}function Xt(t,e){let s=1;for(;t.state.env[String(s)]!==void 0;)delete t.state.env[String(s)],s++;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 Jt(t,e){let s=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
92
+ `);s=i}let r=Number.parseInt(t.state.env["#"]||"0",10);if(s>r)return S(`bash: shift: shift count out of range
93
+ `);if(s===0)return C;let n=[];for(let i=1;i<=r;i++)n.push(t.state.env[String(i)]||"");let o=n.slice(s);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(" "),C}async function er(t,e){let s=e;if(s.length>0&&s[0]==="--"&&(s=s.slice(1)),s.length===0)return x("",`bash: source: filename argument required
94
+ `,2);let r=s[0],n=null,o=null;if(r.includes("/")){let l=t.fs.resolvePath(t.state.cwd,r);try{o=await t.fs.readFile(l),n=l}catch{}}else{let c=(t.state.env.PATH||"").split(":").filter(f=>f);for(let f of c){let h=t.fs.resolvePath(t.state.cwd,`${f}/${r}`);try{if((await t.fs.stat(h)).isDirectory)continue;o=await t.fs.readFile(h),n=h;break}catch{}}if(o===null){let f=t.fs.resolvePath(t.state.cwd,r);try{o=await t.fs.readFile(f),n=f}catch{}}}if(o===null)return S(`bash: ${r}: No such file or directory
95
+ `);let i={};if(s.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=s.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--,s.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=ae(o),c=await t.executeScript(l);return a(),c}catch(l){if(a(),l instanceof k)throw l;if(l instanceof U)return x(l.stdout,l.stderr,l.exitCode);if(l.name==="ParseException")return S(`bash: ${r}: ${l.message}
96
+ `);throw l}}function tr(t,e){let s="variable",r="",n=0;for(let o of e){if(o==="-v"){s="variable";continue}if(o==="-f"){s="function";continue}if(s==="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 f=T(t,a);for(let[h]of f)delete t.state.env[`${a}_${h}`];delete t.state.env[a];continue}let c;if(/^-?\d+$/.test(l))c=Number.parseInt(l,10);else{let f=t.state.env[l];c=f?Number.parseInt(f,10):0,Number.isNaN(c)&&(c=0)}if(c<0){let f=T(t,a),h=f.length;if(h===0){r+=`bash: unset: [${c}]: bad array subscript
97
+ `,n=1;continue}let d=h+c;if(d<0){r+=`bash: unset: [${c}]: bad array subscript
98
+ `,n=1;continue}let p=f[d][0];delete t.state.env[`${a}_${p}`];continue}delete t.state.env[`${a}_${c}`];continue}delete t.state.env[o],t.state.functions.delete(o)}return x("",r,n)}function rr(t,e){return t.fs.resolvePath(t.state.cwd,e)}var In=["-e","-a","-f","-d","-r","-w","-x","-s","-L","-h","-k","-g","-u","-G","-O","-b","-c","-p","-S","-t","-N"];function Ye(t){return In.includes(t)}async function Je(t,e,s){let r=rr(t,s);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 kn=["-nt","-ot","-ef"];function et(t){return kn.includes(t)}async function tt(t,e,s,r){let n=rr(t,s),o=rr(t,r);switch(e){case"-nt":try{let i=await t.fs.stat(n),a=await t.fs.stat(o);return i.mtime>a.mtime}catch{return!1}case"-ot":try{let i=await t.fs.stat(n),a=await t.fs.stat(o);return i.mtime<a.mtime}catch{return!1}case"-ef":try{if(!await t.fs.exists(n)||!await t.fs.exists(o))return!1;let i=t.fs.resolvePath(t.state.cwd,n),a=t.fs.resolvePath(t.state.cwd,o);return i===a}catch{return!1}default:return!1}}var Rn=new Set(["-eq","-ne","-lt","-le","-gt","-ge"]);function rt(t){return Rn.has(t)}function st(t,e,s){switch(t){case"-eq":return e===s;case"-ne":return e!==s;case"-lt":return e<s;case"-le":return e<=s;case"-gt":return e>s;case"-ge":return e>=s}}function nt(t){return t==="="||t==="=="||t==="!="}function it(t,e,s,r=!1){let n=r?ot(e,s):e===s;return t==="!="?!n:n}var Dn=new Set(["-z","-n"]);function at(t){return Dn.has(t)}function ct(t,e){switch(t){case"-z":return e==="";case"-n":return e!==""}}function lt(t,e){let s=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(s){let r=s[1],n=s[2];n=n.replace(/\$([a-zA-Z_][a-zA-Z0-9_]*)/g,(i,a)=>t.state.env[a]||"");let o;if(/^-?\d+$/.test(n))o=Number.parseInt(n,10);else try{let i=Function(`"use strict"; return (${n})`)();o=typeof i=="number"?Math.floor(i):0}catch{let i=t.state.env[n];o=i?Number.parseInt(i,10):0}if(o<0){let i=Pe(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 fe(t,e){switch(e.type){case"CondBinary":{let s=await v(t,e.left),r=await v(t,e.right),n=e.right.parts.length>0&&e.right.parts.every(o=>o.type==="SingleQuoted"||o.type==="DoubleQuoted"||o.type==="Escaped");if(nt(e.operator))return it(e.operator,s,r,!n);if(rt(e.operator))return st(e.operator,ps(t,s),ps(t,r));if(et(e.operator))return tt(t,e.operator,s,r);switch(e.operator){case"=~":try{let o=new RegExp(r),i=s.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 s<r;case">":return s>r;default:return!1}}case"CondUnary":{let s=await v(t,e.operand);return Ye(e.operator)?Je(t,e.operator,s):at(e.operator)?ct(e.operator,s):e.operator==="-v"?lt(t,s):e.operator==="-o"?nr(t,s):!1}case"CondNot":return!await fe(t,e.operand);case"CondAnd":return await fe(t,e.left)?await fe(t,e.right):!1;case"CondOr":return await fe(t,e.left)?!0:await fe(t,e.right);case"CondGroup":return await fe(t,e.expression);case"CondWord":return await v(t,e.word)!=="";default:return!1}}async function be(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],n=e[1];return r==="("?S(`test: '(' without matching ')'
99
+ `,2):Ye(r)?O(await Je(t,r,n)):at(r)?O(ct(r,n)):r==="!"?O(!n):r==="-v"?O(lt(t,n)):r==="-o"?O(nr(t,n)):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
100
+ `,2):x("","",1)}if(e.length===3){let r=e[0],n=e[1],o=e[2];if(nt(n))return O(it(n,r,o));if(rt(n)){let i=ft(r),a=ft(o);return!i.valid||!a.valid?x("","",2):O(st(n,i.value,a.value))}if(et(n))return O(await tt(t,n,r,o));switch(n){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 be(t,[n,o]);return x("",i.stderr,i.exitCode===0?1:i.exitCode===1?0:i.exitCode)}if(r==="("&&o===")")return O(n!=="")}if(e.length===4){if(e[0]==="!"){let r=await be(t,e.slice(1));return x("",r.stderr,r.exitCode===0?1:r.exitCode===1?0:r.exitCode)}if(e[0]==="("&&e[3]===")")return be(t,[e[1],e[2]])}let s=await ys(t,e,0);return s.pos<e.length?S(`test: too many arguments
101
+ `,2):O(s.value)}async function ys(t,e,s){return On(t,e,s)}async function On(t,e,s){let{value:r,pos:n}=await ds(t,e,s);for(;e[n]==="-o";){let o=await ds(t,e,n+1);r=r||o.value,n=o.pos}return{value:r,pos:n}}async function ds(t,e,s){let{value:r,pos:n}=await sr(t,e,s);for(;e[n]==="-a";){let o=await sr(t,e,n+1);r=r&&o.value,n=o.pos}return{value:r,pos:n}}async function sr(t,e,s){if(e[s]==="!"){let{value:r,pos:n}=await sr(t,e,s+1);return{value:!r,pos:n}}return _n(t,e,s)}async function _n(t,e,s){let r=e[s];if(r==="("){let{value:o,pos:i}=await ys(t,e,s+1);return{value:o,pos:e[i]===")"?i+1:i}}if(Ye(r)){let o=e[s+1]??"";return{value:await Je(t,r,o),pos:s+2}}if(at(r)){let o=e[s+1]??"";return{value:ct(r,o),pos:s+2}}if(r==="-v"){let o=e[s+1]??"";return{value:lt(t,o),pos:s+2}}if(r==="-o"){let o=e[s+1]??"";return{value:nr(t,o),pos:s+2}}let n=e[s+1];if(nt(n)){let o=r,i=e[s+2]??"";return{value:it(n,o,i),pos:s+3}}if(rt(n)){let o=ft(r),i=ft(e[s+2]??"0");return!o.valid||!i.valid?{value:!1,pos:s+3}:{value:st(n,o.value,i.value),pos:s+3}}if(et(n)){let o=r,i=e[s+2]??"";return{value:await tt(t,n,o,i),pos:s+3}}return{value:r!==void 0&&r!=="",pos:s+1}}function ot(t,e){let s="^";for(let r=0;r<e.length;r++){let n=e[r];if(n==="\\")if(r+1<e.length){let o=e[r+1];/[\\^$.|+(){}[\]*?]/.test(o)?s+=`\\${o}`:s+=o,r++}else s+="\\\\";else if(n==="*")s+=".*";else if(n==="?")s+=".";else if(n==="["){let o=e.indexOf("]",r+1);o!==-1?(s+=e.slice(r,o+1),r=o):s+="\\["}else/[\\^$.|+(){}]/.test(n)?s+=`\\${n}`:s+=n}return s+="$",new RegExp(s).test(t)}function nr(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 ps(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 ms(e);try{let s=new F,r=L(s,e);return N(t,r.expression)}catch{return ms(e)}}function Ln(t,e){let s=0;for(let r of t){let n;if(r>="0"&&r<="9")n=r.charCodeAt(0)-48;else if(r>="a"&&r<="z")n=r.charCodeAt(0)-97+10;else if(r>="A"&&r<="Z")n=r.charCodeAt(0)-65+36;else if(r==="@")n=62;else if(r==="_")n=63;else return Number.NaN;if(n>=e)return Number.NaN;s=s*e+n}return s}function ms(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 s,r=t.match(/^(\d+)#([a-zA-Z0-9@_]+)$/);if(r){let n=Number.parseInt(r[1],10);n>=2&&n<=64?s=Ln(r[2],n):s=0}else/^0[xX][0-9a-fA-F]+$/.test(t)?s=Number.parseInt(t,16):/^0[0-7]+$/.test(t)?s=Number.parseInt(t,8):s=Number.parseInt(t,10);return Number.isNaN(s)&&(s=0),e?-s:s}function ft(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 s=Number.parseInt(t,10);return Number.isNaN(s)?{value:0,valid:!1}:{value:e?-s:s,valid:!0}}async function ir(t,e){let s=t.state.inCondition;t.state.inCondition=!0;let r="",n="",o=0;try{for(let i of e){let a=await t.executeStatement(i);r+=a.stdout,n+=a.stderr,o=a.exitCode}}finally{t.state.inCondition=s}return{stdout:r,stderr:n,exitCode:o}}function De(t,e,s,r){if(t instanceof z)return e+=t.stdout,s+=t.stderr,t.levels>1&&r>1?(t.levels--,t.stdout=e,t.stderr=s,{action:"rethrow",stdout:e,stderr:s,error:t}):{action:"break",stdout:e,stderr:s};if(t instanceof Q)return e+=t.stdout,s+=t.stderr,t.levels>1&&r>1?(t.levels--,t.stdout=e,t.stderr=s,{action:"rethrow",stdout:e,stderr:s,error:t}):{action:"continue",stdout:e,stderr:s};if(t instanceof U||t instanceof Y||t instanceof k||t instanceof B)return t.prependOutput(e,s),{action:"rethrow",stdout:e,stderr:s,error:t};let n=ne(t);return{action:"error",stdout:e,stderr:`${s}${n}
102
+ `,exitCode:1}}async function ut(t,e,s="",r=""){let n=s,o=r,i=0;try{for(let a of e){let l=await t.executeStatement(a);n+=l.stdout,o+=l.stderr,i=l.exitCode}}catch(a){if(We(a)||a instanceof Y||a instanceof k||a instanceof B)throw a.prependOutput(n,o),a;return{stdout:n,stderr:`${o}${ne(a)}
103
+ `,exitCode:1}}return{stdout:n,stderr:o,exitCode:i}}async function Es(t,e){let s="",r="";for(let n of e.clauses){let o=await ir(t,n.condition);if(s+=o.stdout,r+=o.stderr,o.exitCode===0)return ut(t,n.body,s,r)}return e.elseBody?ut(t,e.elseBody,s,r):x(s,r,0)}async function ws(t,e){let s="",r="",n=0,o=0;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e.variable))return S(`bash: \`${e.variable}': not a valid identifier
104
+ `);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 Re(t,a);i.push(...l.values)}t.state.loopDepth++;try{for(let a of i){o++,o>t.limits.maxLoopIterations&&se(`for loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",s,r),t.state.env[e.variable]=a;try{for(let l of e.body){let c=await t.executeStatement(l);s+=c.stdout,r+=c.stderr,n=c.exitCode}}catch(l){let c=De(l,s,r,t.state.loopDepth);if(s=c.stdout,r=c.stderr,c.action==="break")break;if(c.action==="continue")continue;if(c.action==="error")return x(s,r,c.exitCode??1);throw c.error}}}finally{t.state.loopDepth--}return x(s,r,n)}async function gs(t,e){let s="",r="",n=0,o=0;e.init&&await $(t,e.init.expression),t.state.loopDepth++;try{for(;o++,o>t.limits.maxLoopIterations&&se(`for loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",s,r),!(e.condition&&await $(t,e.condition.expression)===0);){try{for(let i of e.body){let a=await t.executeStatement(i);s+=a.stdout,r+=a.stderr,n=a.exitCode}}catch(i){let a=De(i,s,r,t.state.loopDepth);if(s=a.stdout,r=a.stderr,a.action==="break")break;if(a.action==="continue"){e.update&&await $(t,e.update.expression);continue}if(a.action==="error")return x(s,r,a.exitCode??1);throw a.error}e.update&&await $(t,e.update.expression)}}finally{t.state.loopDepth--}return x(s,r,n)}async function As(t,e,s=""){let r="",n="",o=0,i=0,a=s;for(let c of e.redirections)if((c.operator==="<<"||c.operator==="<<-")&&c.target.type==="HereDoc"){let f=c.target,h=await v(t,f.content);f.stripTabs&&(h=h.split(`
105
105
  `).map(d=>d.replace(/^\t+/,"")).join(`
106
106
  `)),a=h}else if(c.operator==="<<<"&&c.target.type==="Word")a=`${await v(t,c.target)}
107
107
  `;else if(c.operator==="<"&&c.target.type==="Word")try{let f=await v(t,c.target),h=t.fs.resolvePath(t.state.cwd,f);a=await t.fs.readFile(h)}catch{let f=await v(t,c.target);return S(`bash: ${f}: No such file or directory
108
- `)}let l=t.state.groupStdin;a&&(t.state.groupStdin=a),t.state.loopDepth++;try{for(;;){i++,i>t.limits.maxLoopIterations&&ne(`while loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,s);let c=0,f=!1,h=!1,d=t.state.inCondition;t.state.inCondition=!0;try{for(let p of e.condition){let y=await t.executeStatement(p);r+=y.stdout,s+=y.stderr,c=y.exitCode}}catch(p){if(p instanceof z){if(r+=p.stdout,s+=p.stderr,p.levels>1&&t.state.loopDepth>1)throw p.levels--,p.stdout=r,p.stderr=s,t.state.inCondition=d,p;f=!0}else if(p instanceof Q){if(r+=p.stdout,s+=p.stderr,p.levels>1&&t.state.loopDepth>1)throw p.levels--,p.stdout=r,p.stderr=s,t.state.inCondition=d,p;h=!0}else throw t.state.inCondition=d,p}finally{t.state.inCondition=d}if(f)break;if(!h){if(c!==0)break;try{for(let p of e.body){let y=await t.executeStatement(p);r+=y.stdout,s+=y.stderr,o=y.exitCode}}catch(p){let y=De(p,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 Sn(t,e){let n="",r="",s=0,o=0;t.state.loopDepth++;try{for(;;){o++,o>t.limits.maxLoopIterations&&ne(`until loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r);let i=await ir(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=De(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 bn(t,e){let n="",r="",s=0,o=await v(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 f of l.patterns){let h=await v(t,f);if(Qr(f)&&(h=Kr(h)),ot(o,h)){c=!0;break}}if(c){let f=await ut(t,l.body,n,r);if(n=f.stdout,r=f.stderr,s=f.exitCode,l.terminator===";;")break;l.terminator===";&"?i=!0:i=!1}else i=!1}return x(n,r,s)}function Nn(t,e){return t.state.functions.set(e.name,e),N}async function Cn(t,e,n){t.state.callDepth++,t.state.callDepth>t.limits.maxCallDepth&&(t.state.callDepth--,ne(`${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 U)return x(o.stdout,o.stderr,o.exitCode);throw o}}async function $n(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 v(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
109
- `,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
110
- `,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
111
- `,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
112
- `,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
113
- `,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
114
- `,o=1,r="";break}}catch{}await t.fs.appendFile(l,r+s),r="",s="";break}}}return x(r,s,o)}var Oe=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 k)throw i.prependOutput(n,r),i;if(i instanceof B)throw i;if(i instanceof Y)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 K)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 he)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 z||i instanceof Q){if(this.ctx.state.loopDepth>0)throw i.prependOutput(n,r),i;n+=i.stdout,r+=i.stderr;continue}throw i instanceof U&&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&&ne(`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 f=await this.executePipeline(l);n+=f.stdout,r+=f.stderr,s=f.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 Y(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(f){if(f instanceof he)c={stdout:f.stdout,stderr:f.stderr,exitCode:1};else if(f instanceof k&&e.commands.length>1)c={stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode};else throw f}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 wn(this.ctx,e);case"For":return gn(this.ctx,e);case"CStyleFor":return An(this.ctx,e);case"While":return xn(this.ctx,e,n);case"Until":return Sn(this.ctx,e);case"Case":return bn(this.ctx,e);case"Subshell":return this.executeSubshell(e,n);case"Group":return this.executeGroup(e,n);case"FunctionDef":return Nn(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 W)return S(r.stderr);throw r}}async executeSimpleCommandInner(e,n){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
108
+ `)}let l=t.state.groupStdin;a&&(t.state.groupStdin=a),t.state.loopDepth++;try{for(;;){i++,i>t.limits.maxLoopIterations&&se(`while loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,n);let c=0,f=!1,h=!1,d=t.state.inCondition;t.state.inCondition=!0;try{for(let p of e.condition){let y=await t.executeStatement(p);r+=y.stdout,n+=y.stderr,c=y.exitCode}}catch(p){if(p instanceof z){if(r+=p.stdout,n+=p.stderr,p.levels>1&&t.state.loopDepth>1)throw p.levels--,p.stdout=r,p.stderr=n,t.state.inCondition=d,p;f=!0}else if(p instanceof Q){if(r+=p.stdout,n+=p.stderr,p.levels>1&&t.state.loopDepth>1)throw p.levels--,p.stdout=r,p.stderr=n,t.state.inCondition=d,p;h=!0}else throw t.state.inCondition=d,p}finally{t.state.inCondition=d}if(f)break;if(!h){if(c!==0)break;try{for(let p of e.body){let y=await t.executeStatement(p);r+=y.stdout,n+=y.stderr,o=y.exitCode}}catch(p){let y=De(p,r,n,t.state.loopDepth);if(r=y.stdout,n=y.stderr,y.action==="break")break;if(y.action==="continue")continue;if(y.action==="error")return x(r,n,y.exitCode??1);throw y.error}}}}finally{t.state.loopDepth--,t.state.groupStdin=l}return x(r,n,o)}async function xs(t,e){let s="",r="",n=0,o=0;t.state.loopDepth++;try{for(;;){o++,o>t.limits.maxLoopIterations&&se(`until loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",s,r);let i=await ir(t,e.condition);if(s+=i.stdout,r+=i.stderr,i.exitCode===0)break;try{for(let a of e.body){let l=await t.executeStatement(a);s+=l.stdout,r+=l.stderr,n=l.exitCode}}catch(a){let l=De(a,s,r,t.state.loopDepth);if(s=l.stdout,r=l.stderr,l.action==="break")break;if(l.action==="continue")continue;if(l.action==="error")return x(s,r,l.exitCode??1);throw l.error}}}finally{t.state.loopDepth--}return x(s,r,n)}async function Ss(t,e){let s="",r="",n=0,o=await v(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 f of l.patterns){let h=await v(t,f);if(Qr(f)&&(h=Kr(h)),ot(o,h)){c=!0;break}}if(c){let f=await ut(t,l.body,s,r);if(s=f.stdout,r=f.stderr,n=f.exitCode,l.terminator===";;")break;l.terminator===";&"?i=!0:i=!1}else i=!1}return x(s,r,n)}function bs(t,e){return t.state.functions.set(e.name,e),C}async function Cs(t,e,s){t.state.callDepth++,t.state.callDepth>t.limits.maxCallDepth&&(t.state.callDepth--,se(`${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<s.length;o++)r[String(o+1)]=t.state.env[String(o+1)],t.state.env[String(o+1)]=s[o];r["@"]=t.state.env["@"],r["#"]=t.state.env["#"],t.state.env["@"]=s.join(" "),t.state.env["#"]=String(s.length);let n=()=>{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 n(),o}catch(o){if(n(),o instanceof U)return x(o.stdout,o.stderr,o.exitCode);throw o}}async function Ns(t,e,s){let{stdout:r,stderr:n,exitCode:o}=e;for(let i of s){if(i.target.type==="HereDoc")continue;let a=await v(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){n+=`bash: ${a}: Is a directory
109
+ `,o=1,r="";break}}catch{}await t.fs.writeFile(c,r),r=""}else if(l===2)if(a==="/dev/null")n="";else{let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){n+=`bash: ${a}: Is a directory
110
+ `,o=1;break}}catch{}await t.fs.writeFile(c,n),n=""}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){n+=`bash: ${a}: Is a directory
111
+ `,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){n+=`bash: ${a}: Is a directory
112
+ `,o=1;break}}catch{}await t.fs.appendFile(c,n),n=""}break}case">&":{let l=i.fd??1;a==="2"||a==="&2"?l===1&&(n+=r,r=""):(a==="1"||a==="&1")&&(r+=n,n="");break}case"&>":{let l=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(l)).isDirectory){n=`bash: ${a}: Is a directory
113
+ `,o=1,r="";break}}catch{}await t.fs.writeFile(l,r+n),r="",n="";break}case"&>>":{let l=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(l)).isDirectory){n=`bash: ${a}: Is a directory
114
+ `,o=1,r="";break}}catch{}await t.fs.appendFile(l,r+n),r="",n="";break}}}return x(r,n,o)}var Oe=class{ctx;constructor(e,s){this.ctx={state:s,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 s="",r="",n=0;for(let o of e.statements)try{let i=await this.executeStatement(o);s+=i.stdout,r+=i.stderr,n=i.exitCode,this.ctx.state.lastExitCode=n,this.ctx.state.env["?"]=String(n)}catch(i){if(i instanceof k)throw i.prependOutput(s,r),i;if(i instanceof B)throw i;if(i instanceof Y)return s+=i.stdout,r+=i.stderr,n=i.exitCode,this.ctx.state.lastExitCode=n,this.ctx.state.env["?"]=String(n),{stdout:s,stderr:r,exitCode:n,env:{...this.ctx.state.env}};if(i instanceof K)return s+=i.stdout,r+=i.stderr,n=1,this.ctx.state.lastExitCode=n,this.ctx.state.env["?"]=String(n),{stdout:s,stderr:r,exitCode:n,env:{...this.ctx.state.env}};if(i instanceof he)return s+=i.stdout,r+=i.stderr,n=1,this.ctx.state.lastExitCode=n,this.ctx.state.env["?"]=String(n),{stdout:s,stderr:r,exitCode:n,env:{...this.ctx.state.env}};if(i instanceof z||i instanceof Q){if(this.ctx.state.loopDepth>0)throw i.prependOutput(s,r),i;s+=i.stdout,r+=i.stderr;continue}throw i instanceof U&&i.prependOutput(s,r),i}return{stdout:s,stderr:r,exitCode:n,env:{...this.ctx.state.env}}}async executeStatement(e){this.ctx.state.commandCount++,this.ctx.state.commandCount>this.ctx.limits.maxCommandCount&&se(`too many commands executed (>${this.ctx.limits.maxCommandCount}), increase executionLimits.maxCommandCount`,"commands");let s="",r="",n=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==="&&"&&n!==0||c==="||"&&n===0)continue;let f=await this.executePipeline(l);s+=f.stdout,r+=f.stderr,n=f.exitCode,o=a,i=l.negated,this.ctx.state.lastExitCode=n,this.ctx.state.env["?"]=String(n)}if(this.ctx.state.options.errexit&&n!==0&&o===e.pipelines.length-1&&!i&&!this.ctx.state.inCondition)throw new Y(n,s,r);return x(s,r,n)}async executePipeline(e){let s="",r=C,n=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,s)}catch(f){if(f instanceof he)c={stdout:f.stdout,stderr:f.stderr,exitCode:1};else if(f instanceof k&&e.commands.length>1)c={stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode};else throw f}o.push(c.exitCode),c.exitCode!==0&&(n=c.exitCode),l?r=c:(s=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&&n!==0&&(r={...r,exitCode:n}),e.negated&&(r={...r,exitCode:r.exitCode===0?1:0}),r}async executeCommand(e,s){switch(e.type){case"SimpleCommand":return this.executeSimpleCommand(e,s);case"If":return Es(this.ctx,e);case"For":return ws(this.ctx,e);case"CStyleFor":return gs(this.ctx,e);case"While":return As(this.ctx,e,s);case"Until":return xs(this.ctx,e);case"Case":return Ss(this.ctx,e);case"Subshell":return this.executeSubshell(e,s);case"Group":return this.executeGroup(e,s);case"FunctionDef":return bs(this.ctx,e);case"ArithmeticCommand":return this.executeArithmeticCommand(e);case"ConditionalCommand":return this.executeConditionalCommand(e);default:return C}}async executeSimpleCommand(e,s){try{return await this.executeSimpleCommandInner(e,s)}catch(r){if(r instanceof W)return S(r.stderr);throw r}}async executeSimpleCommandInner(e,s){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
115
115
  `,1);let g=le(this.ctx,c);if(g)return g;let m=[];for(let w of l.array){let b=await Re(this.ctx,w);m.push(...b.values)}let E=0;if(l.append){let w=T(this.ctx,c);w.length>0&&(E=Math.max(...w.map(([P])=>typeof P=="number"?P:0))+1)}else{let w=`${c}_`;for(let b of Object.keys(this.ctx.state.env))b.startsWith(w)&&!b.includes("__")&&delete this.ctx.state.env[b]}for(let w=0;w<m.length;w++)this.ctx.state.env[`${c}_${E+w}`]=m[w];l.append||(this.ctx.state.env[`${c}__length`]=String(m.length));continue}let f=l.value?await v(this.ctx,l.value):"";if(c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[\]$/))return x("",`bash: ${c}: bad array subscript
116
- `,1);let d=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(d){let g=d[1],m=d[2],E=le(this.ctx,g);if(E)return E;let w=this.ctx.state.associativeArrays?.has(g),b;if(w){let I;if(m.startsWith("'")&&m.endsWith("'"))I=m.slice(1,-1);else if(m.startsWith('"')&&m.endsWith('"')){let R=m.slice(1,-1),_=new F().parseWordFromString(R,!0,!1);I=await v(this.ctx,_)}else if(m.includes("$")){let ue=new F().parseWordFromString(m,!1,!1);I=await v(this.ctx,ue)}else I=m;b=`${g}_${I}`}else{let I;if(/^-?\d+$/.test(m))I=Number.parseInt(m,10);else{try{let R=new F,ue=L(R,m);I=C(this.ctx,ue.expression)}catch{let R=this.ctx.state.env[m];I=R?Number.parseInt(R,10):0}Number.isNaN(I)&&(I=0)}if(I<0){let R=T(this.ctx,g);if(R.length===0)return x("",`bash: ${g}[${m}]: bad array subscript
116
+ `,1);let d=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(d){let g=d[1],m=d[2],E=le(this.ctx,g);if(E)return E;let w=this.ctx.state.associativeArrays?.has(g),b;if(w){let I;if(m.startsWith("'")&&m.endsWith("'"))I=m.slice(1,-1);else if(m.startsWith('"')&&m.endsWith('"')){let R=m.slice(1,-1),_=new F().parseWordFromString(R,!0,!1);I=await v(this.ctx,_)}else if(m.includes("$")){let ue=new F().parseWordFromString(m,!1,!1);I=await v(this.ctx,ue)}else I=m;b=`${g}_${I}`}else{let I;if(/^-?\d+$/.test(m))I=Number.parseInt(m,10);else{try{let R=new F,ue=L(R,m);I=N(this.ctx,ue.expression)}catch{let R=this.ctx.state.env[m];I=R?Number.parseInt(R,10):0}Number.isNaN(I)&&(I=0)}if(I<0){let R=T(this.ctx,g);if(R.length===0)return x("",`bash: ${g}[${m}]: bad array subscript
117
117
  `,1);if(I=Math.max(...R.map(([_])=>typeof _=="number"?_:0))+1+I,I<0)return x("",`bash: ${g}[${m}]: bad array subscript
118
118
  `,1)}b=`${g}_${I}`}let P=l.append?(this.ctx.state.env[b]||"")+f:f;e.name?(r[b]=this.ctx.state.env[b],this.ctx.state.env[b]=P):this.ctx.state.env[b]=P;continue}let p=le(this.ctx,c);if(p)return p;let y=l.append?(this.ctx.state.env[c]||"")+f:f;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,f=await v(this.ctx,c.content);c.stripTabs&&(f=f.split(`
119
119
  `).map(h=>h.replace(/^\t+/,"")).join(`
120
- `)),n=f;continue}if(l.operator==="<<<"&&l.target.type==="Word"){n=`${await v(this.ctx,l.target)}
121
- `;continue}if(l.operator==="<"&&l.target.type==="Word")try{let c=await v(this.ctx,l.target),f=this.ctx.fs.resolvePath(this.ctx.state.cwd,c);n=await this.ctx.fs.readFile(f)}catch{let c=await v(this.ctx,l.target);for(let[f,h]of Object.entries(r))h===void 0?delete this.ctx.state.env[f]:this.ctx.state.env[f]=h;return S(`bash: ${c}: No such file or directory
122
- `)}}let s=await v(this.ctx,e.name),o=[],i=[];for(let l of e.args){let c=await Re(this.ctx,l);for(let f of c.values)o.push(f),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
123
- `,127)}let a=await this.runCommand(s,o,i,n);a=await $n(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 Mt(this.ctx,n);if(e==="export")return Ht(this.ctx,n);if(e==="unset")return tr(this.ctx,n);if(e==="exit")return Vt(this.ctx,n);if(e==="local")return qt(this.ctx,n);if(e==="set")return Yt(this.ctx,n);if(e==="break")return Ft(this.ctx,n);if(e==="continue")return Bt(this.ctx,n);if(e==="return")return Kt(this.ctx,n);if(e==="eval")return Gt(this.ctx,n);if(e==="shift")return Jt(this.ctx,n);if(e==="source"||e===".")return er(this.ctx,n);if(e==="read")return Qt(this.ctx,n,s);if(e==="declare"||e==="typeset")return Ut(this.ctx,n);if(e==="readonly")return jt(this.ctx,n);if(!o){let f=this.ctx.state.functions.get(e);if(f)return Cn(this.ctx,f,n)}if(e===":"||e==="true")return N;if(e==="false")return O(!1);if(e==="let")return Zt(this.ctx,n);if(e==="command"){if(n.length===0)return N;let f=n;for(;f.length>0&&f[0].startsWith("-");)f=f.slice(1);if(f.length===0)return N;let[h,...d]=f;return this.runCommand(h,d,[],s,!0)}if(e==="builtin"){if(n.length===0)return N;let[f,...h]=n;return this.runCommand(f,h,[],s)}if(e==="shopt")return N;if(e==="exec"){if(n.length===0)return N;let[f,...h]=n;return this.runCommand(f,h,[],s)}if(e==="wait")return N;if(e==="type")return this.handleType(n);if(e==="[["){let f=n.lastIndexOf("]]");if(f!==-1){let h=n.slice(0,f);return be(this.ctx,h)}return S("bash: [[: missing `]]'\n",2)}if(e==="["||e==="test"){let f=n;if(e==="["){if(n[n.length-1]!=="]")return S("[: missing `]'\n",2);f=n.slice(0,-1)}return be(this.ctx,f)}let i=await this.resolveCommand(e);if(!i)return S(`bash: ${e}: command not found
124
- `,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(f){return S(`${e}: ${se(f)}
125
- `)}}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
126
- `:r.has(a)?s+=`${a} is a shell builtin
127
- `:this.ctx.state.functions.has(a)?s+=`${a} is a function
128
- `:this.ctx.commands.has(a)?s+=`${a} is /bin/${a}
120
+ `)),s=f;continue}if(l.operator==="<<<"&&l.target.type==="Word"){s=`${await v(this.ctx,l.target)}
121
+ `;continue}if(l.operator==="<"&&l.target.type==="Word")try{let c=await v(this.ctx,l.target),f=this.ctx.fs.resolvePath(this.ctx.state.cwd,c);s=await this.ctx.fs.readFile(f)}catch{let c=await v(this.ctx,l.target);for(let[f,h]of Object.entries(r))h===void 0?delete this.ctx.state.env[f]:this.ctx.state.env[f]=h;return S(`bash: ${c}: No such file or directory
122
+ `)}}let n=await v(this.ctx,e.name),o=[],i=[];for(let l of e.args){let c=await Re(this.ctx,l);for(let f of c.values)o.push(f),i.push(c.quoted)}if(!n){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,s)}return x("","",this.ctx.state.lastExitCode)}return S(`bash: : command not found
123
+ `,127)}let a=await this.runCommand(n,o,i,s);a=await Ns(this.ctx,a,e.redirections),this.ctx.state.lastArg=o.length>0?o[o.length-1]:n;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,s,r,n,o=!1){if(e==="cd")return await Mt(this.ctx,s);if(e==="export")return Ht(this.ctx,s);if(e==="unset")return tr(this.ctx,s);if(e==="exit")return Vt(this.ctx,s);if(e==="local")return qt(this.ctx,s);if(e==="set")return Yt(this.ctx,s);if(e==="break")return Ft(this.ctx,s);if(e==="continue")return Bt(this.ctx,s);if(e==="return")return Kt(this.ctx,s);if(e==="eval")return Gt(this.ctx,s);if(e==="shift")return Jt(this.ctx,s);if(e==="source"||e===".")return er(this.ctx,s);if(e==="read")return Qt(this.ctx,s,n);if(e==="declare"||e==="typeset")return Ut(this.ctx,s);if(e==="readonly")return jt(this.ctx,s);if(!o){let f=this.ctx.state.functions.get(e);if(f)return Cs(this.ctx,f,s)}if(e===":"||e==="true")return C;if(e==="false")return O(!1);if(e==="let")return Zt(this.ctx,s);if(e==="command"){if(s.length===0)return C;let f=s;for(;f.length>0&&f[0].startsWith("-");)f=f.slice(1);if(f.length===0)return C;let[h,...d]=f;return this.runCommand(h,d,[],n,!0)}if(e==="builtin"){if(s.length===0)return C;let[f,...h]=s;return this.runCommand(f,h,[],n)}if(e==="shopt")return C;if(e==="exec"){if(s.length===0)return C;let[f,...h]=s;return this.runCommand(f,h,[],n)}if(e==="wait")return C;if(e==="type")return this.handleType(s);if(e==="[["){let f=s.lastIndexOf("]]");if(f!==-1){let h=s.slice(0,f);return be(this.ctx,h)}return S("bash: [[: missing `]]'\n",2)}if(e==="["||e==="test"){let f=s;if(e==="["){if(s[s.length-1]!=="]")return S("[: missing `]'\n",2);f=s.slice(0,-1)}return be(this.ctx,f)}let i=await this.resolveCommand(e);if(!i)return S(`bash: ${e}: command not found
124
+ `,127);let{cmd:a,path:l}=i,c={fs:this.ctx.fs,cwd:this.ctx.state.cwd,env:this.ctx.state.env,stdin:n,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(s,c)}catch(f){return S(`${e}: ${ne(f)}
125
+ `)}}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 s=[],n=(this.ctx.state.env.PATH||"/bin:/usr/bin").split(":");for(let o of n){if(!o)continue;let i=`${o}/${e}`;await this.ctx.fs.exists(i)&&s.push(i)}return s}handleType(e){let s=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"]),n="",o="",i=0;for(let a of e)s.has(a)?n+=`${a} is a shell keyword
126
+ `:r.has(a)?n+=`${a} is a shell builtin
127
+ `:this.ctx.state.functions.has(a)?n+=`${a} is a function
128
+ `:this.ctx.commands.has(a)?n+=`${a} is /bin/${a}
129
129
  `:(o+=`bash: type: ${a}: not found
130
- `,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;this.ctx.state.loopDepth=0;let i=this.ctx.state.groupStdin;n&&(this.ctx.state.groupStdin=n);let a="",l="",c=0;try{for(let f of e.body){let h=await this.executeStatement(f);a+=h.stdout,l+=h.stderr,c=h.exitCode}}catch(f){if(this.ctx.state.env=r,this.ctx.state.cwd=s,this.ctx.state.loopDepth=o,this.ctx.state.groupStdin=i,f instanceof B)throw f;if(f instanceof z||f instanceof Q)return a+=f.stdout,l+=f.stderr,x(a,l,0);if(f instanceof k)return a+=f.stdout,l+=f.stderr,x(a,l,f.exitCode);if(f instanceof U)return a+=f.stdout,l+=f.stderr,x(a,l,f.exitCode);if(f instanceof Y)throw f.stdout=a+f.stdout,f.stderr=l+f.stderr,f;return x(a,`${l}${se(f)}
131
- `,1)}return this.ctx.state.env=r,this.ctx.state.cwd=s,this.ctx.state.loopDepth=o,this.ctx.state.groupStdin=i,x(a,l,c)}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 B)throw a;if(We(a)||a instanceof Y||a instanceof k)throw a.prependOutput(r,s),a;return x(r,`${s}${se(a)}
132
- `,1)}return this.ctx.state.groupStdin=i,x(r,s,o)}async executeArithmeticCommand(e){try{let n=await $(this.ctx,e.expression.expression);return O(n!==0)}catch(n){return S(`bash: arithmetic expression: ${n.message}
133
- `)}}async executeConditionalCommand(e){try{let n=await fe(this.ctx,e.expression);return O(n)}catch(n){return S(`bash: conditional expression: ${n.message}
134
- `,2)}}};var Ne={maxCallDepth:100,maxCommandCount:1e4,maxLoopIterations:1e4,maxAwkIterations:1e4,maxSedIterations:1e4};function vn(t){return t?{maxCallDepth:t.maxCallDepth??Ne.maxCallDepth,maxCommandCount:t.maxCommandCount??Ne.maxCommandCount,maxLoopIterations:t.maxLoopIterations??Ne.maxLoopIterations,maxAwkIterations:t.maxAwkIterations??Ne.maxAwkIterations,maxSedIterations:t.maxSedIterations??Ne.maxSedIterations}:{...Ne}}function Pn(t){try{let e=new URL(t);return{origin:e.origin,pathname:e.pathname,href:e.href}}catch{return null}}function Ts(t){let e=Pn(t);return e?{origin:e.origin,pathPrefix:e.pathname}:null}function Ws(t,e){let n=Pn(t);if(!n)return!1;let r=Ts(e);return!r||n.origin!==r.origin?!1:r.pathPrefix==="/"||r.pathPrefix===""?!0:n.pathname.startsWith(r.pathPrefix)}function or(t,e){return!e||e.length===0?!1:e.some(n=>Ws(t,n))}var _e=class extends Error{constructor(e){super(`Network access denied: URL not in allow-list: ${e}`),this.name="NetworkAccessDeniedError"}},Le=class extends Error{constructor(e){super(`Too many redirects (max: ${e})`),this.name="TooManyRedirectsError"}},Te=class extends Error{constructor(e){super(`Redirect target not in allow-list: ${e}`),this.name="RedirectNotAllowedError"}},ht=class extends Error{constructor(e,n){super(`HTTP method '${e}' not allowed. Allowed methods: ${n.join(", ")}`),this.name="MethodNotAllowedError"}};var Fs=20,Ms=3e4,Bs=["GET","HEAD"],zs=new Set(["GET","HEAD","OPTIONS"]),Us=new Set([301,302,303,307,308]);function ar(t){let e=t.maxRedirects??Fs,n=t.timeoutMs??Ms,r=t.dangerouslyAllowFullInternetAccess?["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"]:t.allowedMethods??Bs;function s(a){if(!t.dangerouslyAllowFullInternetAccess&&!or(a,t.allowedUrlPrefixes??[]))throw new _e(a)}function o(a){if(t.dangerouslyAllowFullInternetAccess)return;let l=a.toUpperCase();if(!r.includes(l))throw new ht(l,r)}async function i(a,l={}){let c=l.method?.toUpperCase()??"GET";s(a),o(c);let f=a,h=0,d=l.followRedirects??!0,p=l.timeoutMs!==void 0?Math.min(l.timeoutMs,n):n;for(;;){let y=new AbortController,g=setTimeout(()=>y.abort(),p);try{let m={method:c,headers:l.headers,signal:y.signal,redirect:"manual"};l.body&&!zs.has(c)&&(m.body=l.body);let E=await fetch(f,m);if(Us.has(E.status)&&d){let w=E.headers.get("location");if(!w)return await In(E,f);let b=new URL(w,f).href;if(!t.dangerouslyAllowFullInternetAccess&&!or(b,t.allowedUrlPrefixes??[]))throw new Te(b);if(h++,h>e)throw new Le(e);f=b;continue}return await In(E,f)}finally{clearTimeout(g)}}}return i}async function In(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 dt=class{fs;commands=new Map;useDefaultLayout=!1;limits;secureFetch;sleepFn;state;constructor(e={}){let n=e.fs??new de(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:`
135
- `,OSTYPE:"linux-gnu",MACHTYPE:"x86_64-pc-linux-gnu",HOSTTYPE:"x86_64",PWD:r,OLDPWD:r,...e.env};if(this.limits=vn({...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=ar(e.network)),this.sleepFn=e.sleep,this.state={env:s,cwd:r,previousDir:"/home/user",functions:new Map,localScopes:[],callDepth:0,sourceDepth:0,commandCount:0,lastExitCode:0,lastArg:"",options:{errexit:!1,pipefail:!1,nounset:!1,xtrace:!1,verbose:!1},inCondition:!1,loopDepth:0},n instanceof de)try{n.mkdirSync("/bin",{recursive:!0}),n.mkdirSync("/usr/bin",{recursive:!0}),this.useDefaultLayout&&(n.mkdirSync("/home/user",{recursive:!0}),n.mkdirSync("/tmp",{recursive:!0}))}catch{}if(r!=="/"&&n instanceof de)try{n.mkdirSync(r,{recursive:!0})}catch{}for(let o of ur(e.commands))this.registerCommand(o);if(e.network)for(let o of hr())this.registerCommand(o);if(e.customCommands)for(let o of e.customCommands)dr(o)?this.registerCommand(pr(o)):this.registerCommand(o)}registerCommand(e){if(this.commands.set(e.name,e),this.fs instanceof de)try{this.fs.writeFileSync(`/bin/${e.name}`,`#!/bin/bash
130
+ `,i=1);return x(n,o,i)}async executeSubshell(e,s=""){let r={...this.ctx.state.env},n=this.ctx.state.cwd,o=this.ctx.state.loopDepth;this.ctx.state.loopDepth=0;let i=this.ctx.state.groupStdin;s&&(this.ctx.state.groupStdin=s);let a="",l="",c=0;try{for(let f of e.body){let h=await this.executeStatement(f);a+=h.stdout,l+=h.stderr,c=h.exitCode}}catch(f){if(this.ctx.state.env=r,this.ctx.state.cwd=n,this.ctx.state.loopDepth=o,this.ctx.state.groupStdin=i,f instanceof B)throw f;if(f instanceof z||f instanceof Q)return a+=f.stdout,l+=f.stderr,x(a,l,0);if(f instanceof k)return a+=f.stdout,l+=f.stderr,x(a,l,f.exitCode);if(f instanceof U)return a+=f.stdout,l+=f.stderr,x(a,l,f.exitCode);if(f instanceof Y)throw f.stdout=a+f.stdout,f.stderr=l+f.stderr,f;return x(a,`${l}${ne(f)}
131
+ `,1)}return this.ctx.state.env=r,this.ctx.state.cwd=n,this.ctx.state.loopDepth=o,this.ctx.state.groupStdin=i,x(a,l,c)}async executeGroup(e,s=""){let r="",n="",o=0,i=this.ctx.state.groupStdin;s&&(this.ctx.state.groupStdin=s);try{for(let a of e.body){let l=await this.executeStatement(a);r+=l.stdout,n+=l.stderr,o=l.exitCode}}catch(a){if(this.ctx.state.groupStdin=i,a instanceof B)throw a;if(We(a)||a instanceof Y||a instanceof k)throw a.prependOutput(r,n),a;return x(r,`${n}${ne(a)}
132
+ `,1)}return this.ctx.state.groupStdin=i,x(r,n,o)}async executeArithmeticCommand(e){try{let s=await $(this.ctx,e.expression.expression);return O(s!==0)}catch(s){return S(`bash: arithmetic expression: ${s.message}
133
+ `)}}async executeConditionalCommand(e){try{let s=await fe(this.ctx,e.expression);return O(s)}catch(s){return S(`bash: conditional expression: ${s.message}
134
+ `,2)}}};var Ce={maxCallDepth:100,maxCommandCount:1e4,maxLoopIterations:1e4,maxAwkIterations:1e4,maxSedIterations:1e4};function $s(t){return t?{maxCallDepth:t.maxCallDepth??Ce.maxCallDepth,maxCommandCount:t.maxCommandCount??Ce.maxCommandCount,maxLoopIterations:t.maxLoopIterations??Ce.maxLoopIterations,maxAwkIterations:t.maxAwkIterations??Ce.maxAwkIterations,maxSedIterations:t.maxSedIterations??Ce.maxSedIterations}:{...Ce}}function vs(t){try{let e=new URL(t);return{origin:e.origin,pathname:e.pathname,href:e.href}}catch{return null}}function Tn(t){let e=vs(t);return e?{origin:e.origin,pathPrefix:e.pathname}:null}function Wn(t,e){let s=vs(t);if(!s)return!1;let r=Tn(e);return!r||s.origin!==r.origin?!1:r.pathPrefix==="/"||r.pathPrefix===""?!0:s.pathname.startsWith(r.pathPrefix)}function or(t,e){return!e||e.length===0?!1:e.some(s=>Wn(t,s))}var _e=class extends Error{constructor(e){super(`Network access denied: URL not in allow-list: ${e}`),this.name="NetworkAccessDeniedError"}},Le=class extends Error{constructor(e){super(`Too many redirects (max: ${e})`),this.name="TooManyRedirectsError"}},Te=class extends Error{constructor(e){super(`Redirect target not in allow-list: ${e}`),this.name="RedirectNotAllowedError"}},ht=class extends Error{constructor(e,s){super(`HTTP method '${e}' not allowed. Allowed methods: ${s.join(", ")}`),this.name="MethodNotAllowedError"}};var Fn=20,Mn=3e4,Bn=["GET","HEAD"],zn=new Set(["GET","HEAD","OPTIONS"]),Un=new Set([301,302,303,307,308]);function ar(t){let e=t.maxRedirects??Fn,s=t.timeoutMs??Mn,r=t.dangerouslyAllowFullInternetAccess?["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"]:t.allowedMethods??Bn;function n(a){if(!t.dangerouslyAllowFullInternetAccess&&!or(a,t.allowedUrlPrefixes??[]))throw new _e(a)}function o(a){if(t.dangerouslyAllowFullInternetAccess)return;let l=a.toUpperCase();if(!r.includes(l))throw new ht(l,r)}async function i(a,l={}){let c=l.method?.toUpperCase()??"GET";n(a),o(c);let f=a,h=0,d=l.followRedirects??!0,p=l.timeoutMs!==void 0?Math.min(l.timeoutMs,s):s;for(;;){let y=new AbortController,g=setTimeout(()=>y.abort(),p);try{let m={method:c,headers:l.headers,signal:y.signal,redirect:"manual"};l.body&&!zn.has(c)&&(m.body=l.body);let E=await fetch(f,m);if(Un.has(E.status)&&d){let w=E.headers.get("location");if(!w)return await Ps(E,f);let b=new URL(w,f).href;if(!t.dangerouslyAllowFullInternetAccess&&!or(b,t.allowedUrlPrefixes??[]))throw new Te(b);if(h++,h>e)throw new Le(e);f=b;continue}return await Ps(E,f)}finally{clearTimeout(g)}}}return i}async function Ps(t,e){let s={};return t.headers.forEach((r,n)=>{s[n.toLowerCase()]=r}),{status:t.status,statusText:t.statusText,headers:s,body:await t.text(),url:e}}var dt=class{fs;commands=new Map;useDefaultLayout=!1;limits;secureFetch;sleepFn;logger;state;constructor(e={}){let s=e.fs??new de(e.files);this.fs=s,this.useDefaultLayout=!e.cwd&&!e.files;let r=e.cwd||(this.useDefaultLayout?"/home/user":"/"),n={HOME:this.useDefaultLayout?"/home/user":"/",PATH:"/bin:/usr/bin",IFS:`
135
+ `,OSTYPE:"linux-gnu",MACHTYPE:"x86_64-pc-linux-gnu",HOSTTYPE:"x86_64",PWD:r,OLDPWD:r,...e.env};if(this.limits=$s({...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=ar(e.network)),this.sleepFn=e.sleep,this.logger=e.logger,this.state={env:n,cwd:r,previousDir:"/home/user",functions:new Map,localScopes:[],callDepth:0,sourceDepth:0,commandCount:0,lastExitCode:0,lastArg:"",options:{errexit:!1,pipefail:!1,nounset:!1,xtrace:!1,verbose:!1},inCondition:!1,loopDepth:0},s instanceof de)try{s.mkdirSync("/bin",{recursive:!0}),s.mkdirSync("/usr/bin",{recursive:!0}),this.useDefaultLayout&&(s.mkdirSync("/home/user",{recursive:!0}),s.mkdirSync("/tmp",{recursive:!0}))}catch{}if(r!=="/"&&s instanceof de)try{s.mkdirSync(r,{recursive:!0})}catch{}for(let o of ur(e.commands))this.registerCommand(o);if(e.network)for(let o of hr())this.registerCommand(o);if(e.customCommands)for(let o of e.customCommands)dr(o)?this.registerCommand(pr(o)):this.registerCommand(o)}registerCommand(e){if(this.commands.set(e.name,e),this.fs instanceof de)try{this.fs.writeFileSync(`/bin/${e.name}`,`#!/bin/bash
136
136
  # Built-in command: ${e.name}
137
- `)}catch{}}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.
138
- `,exitCode:1,env:{...this.state.env,...n?.env}};if(!e.trim())return{stdout:"",stderr:"",exitCode:0,env:{...this.state.env,...n?.env}};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(`
137
+ `)}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,s){if(this.state.callDepth===0&&(this.state.commandCount=0),this.state.commandCount++,this.state.commandCount>this.limits.maxCommandCount)return{stdout:"",stderr:`bash: maximum command count (${this.limits.maxCommandCount}) exceeded (possible infinite loop). Increase with executionLimits.maxCommandCount option.
138
+ `,exitCode:1,env:{...this.state.env,...s?.env}};if(!e.trim())return{stdout:"",stderr:"",exitCode:0,env:{...this.state.env,...s?.env}};this.logger?.info("exec",{command:e});let r=s?.cwd??this.state.cwd,n={...this.state,env:{...this.state.env,...s?.env,...s?.cwd?{PWD:s.cwd}:{}},cwd:r,functions:new Map(this.state.functions),localScopes:[...this.state.localScopes],options:{...this.state.options}},o=e;s?.rawScript||(o=e.split(`
139
139
  `).map(a=>a.trimStart()).join(`
140
- `));try{let i=ae(o),a={fs:this.fs,commands:this.commands,limits:this.limits,exec:this.exec.bind(this),fetch:this.secureFetch,sleep:this.sleepFn};return await new Oe(a,s).executeScript(i)}catch(i){if(i instanceof k)return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode,env:{...this.state.env,...n?.env}};if(i instanceof W)return{stdout:i.stdout,stderr:i.stderr,exitCode:1,env:{...this.state.env,...n?.env}};if(i instanceof B)return{stdout:i.stdout,stderr:i.stderr,exitCode:B.EXIT_CODE,env:{...this.state.env,...n?.env}};if(i.name==="ParseException")return{stdout:"",stderr:`bash: syntax error: ${i.message}
141
- `,exitCode:2,env:{...this.state.env,...n?.env}};if(i instanceof RangeError)return{stdout:"",stderr:`bash: ${i.message}
142
- `,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 M from"node:fs";import*as Ce from"node:path";var js="/home/user/project",$e=class{root;mountPoint;readOnly;memory=new Map;deleted=new Set;constructor(e){this.root=Ce.resolve(e.root);let n=e.mountPoint??js;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,!M.existsSync(this.root))throw new Error(`OverlayFs root does not exist: ${this.root}`);if(!M.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}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=Ce.join(this.root,r),o=Ce.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 M.promises.access(r),!0}catch{return!1}}async readFile(e,n){let r=await this.readFileBuffer(e),s=ie(n);return Fe(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 M.promises.lstat(o);if(i.isSymbolicLink()){let l=await M.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 M.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=ie(r),i=we(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=ie(r),i=we(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 M.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 M.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 M.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 f=s==="/"?`/${c}`:`${s}/${c}`,h=o==="/"?`/${c}`:`${o}/${c}`;await this.cp(f,h,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=M.readdirSync(r);for(let o of s){let i=e==="/"?`/${o}`:`${e}/${o}`;if(this.deleted.has(i))continue;n.add(i);let a=Ce.join(r,o);M.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 M.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}}};function Rn(){console.log(`just-bash - A secure bash environment for AI agents
140
+ `));try{let i=ae(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 Oe(a,n).executeScript(i);return this.logResult(c)}catch(i){if(i instanceof k)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode,env:{...this.state.env,...s?.env}});if(i instanceof W)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:1,env:{...this.state.env,...s?.env}});if(i instanceof B)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:B.EXIT_CODE,env:{...this.state.env,...s?.env}});if(i.name==="ParseException")return this.logResult({stdout:"",stderr:`bash: syntax error: ${i.message}
141
+ `,exitCode:2,env:{...this.state.env,...s?.env}});if(i instanceof RangeError)return this.logResult({stdout:"",stderr:`bash: ${i.message}
142
+ `,exitCode:1,env:{...this.state.env,...s?.env}});throw i}}async readFile(e){return this.fs.readFile(this.fs.resolvePath(this.state.cwd,e))}async writeFile(e,s){return this.fs.writeFile(this.fs.resolvePath(this.state.cwd,e),s)}getCwd(){return this.state.cwd}getEnv(){return{...this.state.env}}};import*as M from"node:fs";import*as Ne from"node:path";var jn="/home/user/project",$e=class{root;mountPoint;readOnly;memory=new Map;deleted=new Set;constructor(e){this.root=Ne.resolve(e.root);let s=e.mountPoint??jn;if(this.mountPoint=s==="/"?"/":s.replace(/\/+$/,""),!this.mountPoint.startsWith("/"))throw new Error(`Mount point must be an absolute path: ${s}`);if(this.readOnly=e.readOnly??!1,!M.existsSync(this.root))throw new Error(`OverlayFs root does not exist: ${this.root}`);if(!M.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),s="";for(let r of e)s+=`/${r}`,this.memory.has(s)||this.memory.set(s,{type:"directory",mode:493,mtime:new Date});this.memory.has("/")||this.memory.set("/",{type:"directory",mode:493,mtime:new Date})}getMountPoint(){return this.mountPoint}normalizePath(e){if(!e||e==="/")return"/";let s=e.endsWith("/")&&e!=="/"?e.slice(0,-1):e;s.startsWith("/")||(s=`/${s}`);let r=s.split("/").filter(o=>o&&o!=="."),n=[];for(let o of r)o===".."?n.pop():n.push(o);return`/${n.join("/")}`||"/"}getRelativeToMount(e){return this.mountPoint==="/"?e:e===this.mountPoint?"/":e.startsWith(`${this.mountPoint}/`)?e.slice(this.mountPoint.length):null}toRealPath(e){let s=this.normalizePath(e),r=this.getRelativeToMount(s);if(r===null)return null;let n=Ne.join(this.root,r),o=Ne.resolve(n);return!o.startsWith(this.root)&&o!==this.root.replace(/\/$/,"")?null:o}dirname(e){let s=this.normalizePath(e);if(s==="/")return"/";let r=s.lastIndexOf("/");return r===0?"/":s.slice(0,r)}ensureParentDirs(e){let s=this.dirname(e);s!=="/"&&(this.memory.has(s)||(this.ensureParentDirs(s),this.memory.set(s,{type:"directory",mode:493,mtime:new Date})),this.deleted.delete(s))}async existsInOverlay(e){let s=this.normalizePath(e);if(this.deleted.has(s))return!1;if(this.memory.has(s))return!0;let r=this.toRealPath(s);if(!r)return!1;try{return await M.promises.access(r),!0}catch{return!1}}async readFile(e,s){let r=await this.readFileBuffer(e),n=ie(s);return Fe(r,n)}async readFileBuffer(e,s=new Set){let r=this.normalizePath(e);if(s.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${e}'`);if(s.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, open '${e}'`);let n=this.memory.get(r);if(n){if(n.type==="symlink"){let i=this.resolveSymlink(r,n.target);return this.readFileBuffer(i,s)}if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);return n.content}let o=this.toRealPath(r);if(!o)throw new Error(`ENOENT: no such file or directory, open '${e}'`);try{let i=await M.promises.lstat(o);if(i.isSymbolicLink()){let l=await M.promises.readlink(o),c=this.resolveSymlink(r,l);return this.readFileBuffer(c,s)}if(i.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);let a=await M.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,s,r){this.assertWritable(`write '${e}'`);let n=this.normalizePath(e);this.ensureParentDirs(n);let o=ie(r),i=we(s,o);this.memory.set(n,{type:"file",content:i,mode:420,mtime:new Date}),this.deleted.delete(n)}async appendFile(e,s,r){this.assertWritable(`append '${e}'`);let n=this.normalizePath(e),o=ie(r),i=we(s,o),a;try{a=await this.readFileBuffer(n)}catch{a=new Uint8Array(0)}let l=new Uint8Array(a.length+i.length);l.set(a),l.set(i,a.length),this.ensureParentDirs(n),this.memory.set(n,{type:"file",content:l,mode:420,mtime:new Date}),this.deleted.delete(n)}async exists(e){return this.existsInOverlay(e)}async stat(e,s=new Set){let r=this.normalizePath(e);if(s.has(r))throw new Error(`ELOOP: too many levels of symbolic links, stat '${e}'`);if(s.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, stat '${e}'`);let n=this.memory.get(r);if(n){if(n.type==="symlink"){let a=this.resolveSymlink(r,n.target);return this.stat(a,s)}let i=0;return n.type==="file"&&(i=n.content.length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:i,mtime:n.mtime}}let o=this.toRealPath(r);if(!o)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);try{let i=await M.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 s=this.normalizePath(e);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);let r=this.memory.get(s);if(r){if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime};let 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 n=this.toRealPath(s);if(!n)throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);try{let o=await M.promises.lstat(n);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,s){if(s.startsWith("/"))return this.normalizePath(s);let r=this.dirname(e);return this.normalizePath(r==="/"?`/${s}`:`${r}/${s}`)}async mkdir(e,s){this.assertWritable(`mkdir '${e}'`);let r=this.normalizePath(e);if(await this.existsInOverlay(r)){if(!s?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${e}'`);return}let o=this.dirname(r);if(o!=="/"&&!await this.existsInOverlay(o))if(s?.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 s=this.normalizePath(e);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${e}'`);let r=new Set,n=new Set,o=s==="/"?"/":`${s}/`;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)&&n.add(c)}for(let a of this.memory.keys())if(a!==s&&a.startsWith(o)){let c=a.slice(o.length).split("/")[0];c&&!n.has(c)&&r.add(c)}let i=this.toRealPath(s);if(i)try{let a=await M.promises.readdir(i);for(let l of a)n.has(l)||r.add(l)}catch(a){if(a.code==="ENOENT"){if(!this.memory.has(s))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,s){this.assertWritable(`rm '${e}'`);let r=this.normalizePath(e);if(!await this.existsInOverlay(r)){if(s?.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(!s?.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,s)}}}}catch{}this.deleted.add(r),this.memory.delete(r)}async cp(e,s,r){this.assertWritable(`cp '${s}'`);let n=this.normalizePath(e),o=this.normalizePath(s);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, cp '${e}'`);let a=await this.stat(n);if(a.isFile){let l=await this.readFileBuffer(n);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(n);for(let c of l){let f=n==="/"?`/${c}`:`${n}/${c}`,h=o==="/"?`/${c}`:`${o}/${c}`;await this.cp(f,h,r)}}}async mv(e,s){this.assertWritable(`mv '${s}'`),await this.cp(e,s,{recursive:!0}),await this.rm(e,{recursive:!0})}resolvePath(e,s){if(s.startsWith("/"))return this.normalizePath(s);let r=e==="/"?`/${s}`:`${e}/${s}`;return this.normalizePath(r)}getAllPaths(){let e=new Set(this.memory.keys());for(let s of this.deleted)e.delete(s);return this.scanRealFs("/",e),Array.from(e)}scanRealFs(e,s){if(this.deleted.has(e))return;let r=this.toRealPath(e);if(r)try{let n=M.readdirSync(r);for(let o of n){let i=e==="/"?`/${o}`:`${e}/${o}`;if(this.deleted.has(i))continue;s.add(i);let a=Ne.join(r,o);M.statSync(a).isDirectory()&&this.scanRealFs(i,s)}}catch{}}async chmod(e,s){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=s;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:s,mtime:new Date})}else i.isDirectory&&this.memory.set(r,{type:"directory",mode:s,mtime:new Date})}async symlink(e,s){this.assertWritable(`symlink '${s}'`);let r=this.normalizePath(s);if(await this.existsInOverlay(r))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(r),this.memory.set(r,{type:"symlink",target:e,mode:511,mtime:new Date}),this.deleted.delete(r)}async link(e,s){this.assertWritable(`link '${s}'`);let r=this.normalizePath(e),n=this.normalizePath(s);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(n))throw new Error(`EEXIST: file already exists, link '${s}'`);let l=await this.readFileBuffer(r);this.ensureParentDirs(n),this.memory.set(n,{type:"file",content:l,mode:i.mode,mtime:new Date}),this.deleted.delete(n)}async readlink(e){let s=this.normalizePath(e);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);let r=this.memory.get(s);if(r){if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${e}'`);return r.target}let n=this.toRealPath(s);if(!n)throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);try{return await M.promises.readlink(n)}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}}};function ks(){console.log(`just-bash - A secure bash environment for AI agents
143
143
 
144
144
  Usage:
145
145
  just-bash [options] [script-file]
@@ -184,5 +184,5 @@ Examples:
184
184
 
185
185
  # Allow write operations (writes stay in memory)
186
186
  just-bash -c 'echo test > /tmp/file.txt && cat /tmp/file.txt' --allow-write
187
- `)}function Gs(){console.log("just-bash 1.0.0")}function Vs(t){let e={root:process.cwd(),cwd:"/",cwdOverridden:!1,errexit:!1,allowWrite:!1,json:!1,help:!1,version:!1},n=0;for(;n<t.length;){let r=t[n];if(r==="-h"||r==="--help")e.help=!0,n++;else if(r==="-v"||r==="--version")e.version=!0,n++;else if(r==="-c")n+1>=t.length&&(console.error("Error: -c requires a script argument"),process.exit(1)),e.script=t[n+1],n+=2;else if(r==="-e"||r==="--errexit")e.errexit=!0,n++;else if(r==="--root")n+1>=t.length&&(console.error("Error: --root requires a path argument"),process.exit(1)),e.root=kn(t[n+1]),n+=2;else if(r==="--cwd")n+1>=t.length&&(console.error("Error: --cwd requires a path argument"),process.exit(1)),e.cwd=t[n+1],e.cwdOverridden=!0,n+=2;else if(r==="--json")e.json=!0,n++;else if(r==="--allow-write")e.allowWrite=!0,n++;else if(r.startsWith("-"))if(r.length>2&&!r.startsWith("--")){let s=r.slice(1);for(let o of s)if(o==="e")e.errexit=!0;else if(o==="h")e.help=!0;else if(o==="v")e.version=!0;else if(o==="c"){n+1>=t.length&&(console.error("Error: -c requires a script argument"),process.exit(1)),e.script=t[n+1],n++;break}else console.error(`Error: Unknown option: -${o}`),process.exit(1);n++}else console.error(`Error: Unknown option: ${r}`),process.exit(1);else!e.scriptFile&&!e.script?e.scriptFile=r:e.scriptFile&&e.root===process.cwd()&&(e.root=kn(r)),n++}return e}async function Hs(){let t=[];for await(let e of process.stdin)t.push(e);return Buffer.concat(t).toString("utf-8")}async function Zs(){let t=process.argv.slice(2),e=Vs(t);e.help&&(Rn(),process.exit(0)),e.version&&(Gs(),process.exit(0));let n;if(e.script)n=e.script;else if(e.scriptFile){let a=new $e({root:e.root}),l=a.getMountPoint();try{let c=e.scriptFile.startsWith("/")?e.scriptFile:`${l}/${e.scriptFile}`;n=await a.readFile(c,"utf-8")}catch(c){console.error(`Error: Cannot read script file: ${e.scriptFile}`),console.error(c instanceof Error?c.message:String(c)),process.exit(1)}}else process.stdin.isTTY?(Rn(),process.exit(1)):n=await Hs();n.trim()||(e.json&&console.log(JSON.stringify({stdout:"",stderr:"",exitCode:0})),process.exit(0));let r=new $e({root:e.root,readOnly:!e.allowWrite}),s=r.getMountPoint(),o=e.cwdOverridden?e.cwd:s,i=new dt({fs:r,cwd:o});e.errexit&&(n=`set -e
188
- ${n}`);try{let a=await i.exec(n);e.json?console.log(JSON.stringify({stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode})):(a.stdout&&process.stdout.write(a.stdout),a.stderr&&process.stderr.write(a.stderr)),process.exit(a.exitCode)}catch(a){e.json?console.log(JSON.stringify({stdout:"",stderr:a instanceof Error?a.message:String(a),exitCode:1})):console.error(a instanceof Error?a.message:String(a)),process.exit(1)}}Zs().catch(t=>{console.error("Fatal error:",t),process.exit(1)});
187
+ `)}function Gn(){console.log("just-bash 1.0.0")}function Vn(t){let e={root:process.cwd(),cwd:"/",cwdOverridden:!1,errexit:!1,allowWrite:!1,json:!1,help:!1,version:!1},s=0;for(;s<t.length;){let r=t[s];if(r==="-h"||r==="--help")e.help=!0,s++;else if(r==="-v"||r==="--version")e.version=!0,s++;else if(r==="-c")s+1>=t.length&&(console.error("Error: -c requires a script argument"),process.exit(1)),e.script=t[s+1],s+=2;else if(r==="-e"||r==="--errexit")e.errexit=!0,s++;else if(r==="--root")s+1>=t.length&&(console.error("Error: --root requires a path argument"),process.exit(1)),e.root=Is(t[s+1]),s+=2;else if(r==="--cwd")s+1>=t.length&&(console.error("Error: --cwd requires a path argument"),process.exit(1)),e.cwd=t[s+1],e.cwdOverridden=!0,s+=2;else if(r==="--json")e.json=!0,s++;else if(r==="--allow-write")e.allowWrite=!0,s++;else if(r.startsWith("-"))if(r.length>2&&!r.startsWith("--")){let n=r.slice(1);for(let o of n)if(o==="e")e.errexit=!0;else if(o==="h")e.help=!0;else if(o==="v")e.version=!0;else if(o==="c"){s+1>=t.length&&(console.error("Error: -c requires a script argument"),process.exit(1)),e.script=t[s+1],s++;break}else console.error(`Error: Unknown option: -${o}`),process.exit(1);s++}else console.error(`Error: Unknown option: ${r}`),process.exit(1);else!e.scriptFile&&!e.script?e.scriptFile=r:e.scriptFile&&e.root===process.cwd()&&(e.root=Is(r)),s++}return e}async function Hn(){let t=[];for await(let e of process.stdin)t.push(e);return Buffer.concat(t).toString("utf-8")}async function Zn(){let t=process.argv.slice(2),e=Vn(t);e.help&&(ks(),process.exit(0)),e.version&&(Gn(),process.exit(0));let s;if(e.script)s=e.script;else if(e.scriptFile){let a=new $e({root:e.root}),l=a.getMountPoint();try{let c=e.scriptFile.startsWith("/")?e.scriptFile:`${l}/${e.scriptFile}`;s=await a.readFile(c,"utf-8")}catch(c){console.error(`Error: Cannot read script file: ${e.scriptFile}`),console.error(c instanceof Error?c.message:String(c)),process.exit(1)}}else process.stdin.isTTY?(ks(),process.exit(1)):s=await Hn();s.trim()||(e.json&&console.log(JSON.stringify({stdout:"",stderr:"",exitCode:0})),process.exit(0));let r=new $e({root:e.root,readOnly:!e.allowWrite}),n=r.getMountPoint(),o=e.cwdOverridden?e.cwd:n,i=new dt({fs:r,cwd:o});e.errexit&&(s=`set -e
188
+ ${s}`);try{let a=await i.exec(s);e.json?console.log(JSON.stringify({stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode})):(a.stdout&&process.stdout.write(a.stdout),a.stderr&&process.stderr.write(a.stderr)),process.exit(a.exitCode)}catch(a){e.json?console.log(JSON.stringify({stdout:"",stderr:a instanceof Error?a.message:String(a),exitCode:1})):console.error(a instanceof Error?a.message:String(a)),process.exit(1)}}Zn().catch(t=>{console.error("Fatal error:",t),process.exit(1)});