just-bash 2.8.1 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Bash.d.ts +29 -0
- package/dist/bin/chunks/chunk-2ODUA7YH.js +74 -0
- package/dist/bin/chunks/{expansion-D4M4UY4T.js → expansion-QOAPT4NU.js} +1 -1
- package/dist/bin/just-bash.js +269 -263
- package/dist/bin/shell/chunks/chunk-2ODUA7YH.js +74 -0
- package/dist/bin/shell/chunks/{expansion-D4M4UY4T.js → expansion-QOAPT4NU.js} +1 -1
- package/dist/bin/shell/shell.js +270 -264
- package/dist/bundle/browser.js +787 -781
- package/dist/bundle/chunks/chunk-2AON5K3E.js +73 -0
- package/dist/bundle/chunks/{expansion-6T6M7TZI.js → expansion-7IMG6HKQ.js} +1 -1
- package/dist/bundle/index.js +282 -272
- package/dist/index.d.ts +2 -0
- package/dist/interpreter/errors.d.ts +2 -2
- package/dist/interpreter/types.d.ts +2 -0
- package/dist/limits.d.ts +10 -0
- package/dist/types.d.ts +5 -0
- package/package.json +1 -1
- package/dist/bin/chunks/chunk-CQZVMYQ3.js +0 -74
- package/dist/bin/shell/chunks/chunk-CQZVMYQ3.js +0 -74
- package/dist/bundle/chunks/chunk-ZRCBN2U4.js +0 -73
package/dist/bin/shell/shell.js
CHANGED
|
@@ -1,156 +1,156 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{B as Js,C as en,D as se,E as ke,F as K,G as ue,H as at,I as tn,J as T,K as sn,L as nn,M as me,N as Vt,O as ot,P as V,a as js,b as Us,c as qs,d as rt,e as q,f as F,g as he,h as Q,i as pe,j as Se,k as Lt,l as it,m as Zs,n as Wt,o as Gs,p as oe,q as we,r as Ks,s as Xs,t as Mt,u as Ft,v as Ae,w as Ys,x as Qs,y as fe,z as zt}from"./chunks/chunk-CQZVMYQ3.js";import{a as $e,b as de}from"./chunks/chunk-4PRVMER6.js";import{a as re,b as ie,c as te,d as ae,e as Bs,f as z,g as Ne,h as tt,i as st,j as Hs,k as ee,l as Ee,m as nt,n as ce}from"./chunks/chunk-K5IXNHO5.js";import{a as Be}from"./chunks/chunk-SE4C7FJY.js";import"./chunks/chunk-OBH7XN5N.js";import{a as le}from"./chunks/chunk-4VDEBYW7.js";import"./chunks/chunk-KGOUQS5A.js";import*as Ir from"node:fs";import*as Tr from"node:readline";var Te=[{name:"echo",load:async()=>(await import("./chunks/echo-7I42V66Q.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-HNXE2ES2.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-4W7NDLLV.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-5LN47VHU.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-XMSNS6S5.js")).mkdirCommand},{name:"rmdir",load:async()=>(await import("./chunks/rmdir-OEMA5ZTD.js")).rmdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-IBPHJBM3.js")).touchCommand},{name:"rm",load:async()=>(await import("./chunks/rm-S7ASVG34.js")).rmCommand},{name:"cp",load:async()=>(await import("./chunks/cp-VFXCUKXO.js")).cpCommand},{name:"mv",load:async()=>(await import("./chunks/mv-P4KHB27X.js")).mvCommand},{name:"ln",load:async()=>(await import("./chunks/ln-EFFNQ3RY.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-TYLTHXFR.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-L26WH2K4.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-VL3R4LAM.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-TJHLLIMR.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-YAUIERGN.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-CZ2TD6T6.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-ZZVPXHLF.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-BD56656Z.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-BD56656Z.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-BD56656Z.js")).egrepCommand},{name:"rg",load:async()=>(await import("./chunks/rg-IZR5557M.js")).rgCommand},{name:"sed",load:async()=>(await import("./chunks/sed-E4QAUCYQ.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-OKD2P6CM.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-QF3YLXRW.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-NNXAFO6D.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-CPIFQTKY.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-IHF6BEOO.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-UCH462KK.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-IAUNBQKH.js")).trCommand},{name:"rev",load:async()=>(await import("./chunks/rev-VP42N2JN.js")).rev},{name:"nl",load:async()=>(await import("./chunks/nl-DSM3NUGM.js")).nl},{name:"fold",load:async()=>(await import("./chunks/fold-452R4I2C.js")).fold},{name:"expand",load:async()=>(await import("./chunks/expand-77K5HH2M.js")).expand},{name:"unexpand",load:async()=>(await import("./chunks/unexpand-BFVYAPOU.js")).unexpand},{name:"strings",load:async()=>(await import("./chunks/strings-ZEKN6D4Q.js")).strings},{name:"split",load:async()=>(await import("./chunks/split-7UP7EATZ.js")).split},{name:"column",load:async()=>(await import("./chunks/column-HQ4AK5DM.js")).column},{name:"join",load:async()=>(await import("./chunks/join-3IXMEGNA.js")).join},{name:"tee",load:async()=>(await import("./chunks/tee-XSKPK43X.js")).teeCommand},{name:"find",load:async()=>(await import("./chunks/find-KHOYETRP.js")).findCommand},{name:"basename",load:async()=>(await import("./chunks/basename-SO5MVUEX.js")).basenameCommand},{name:"dirname",load:async()=>(await import("./chunks/dirname-EES7TR26.js")).dirnameCommand},{name:"tree",load:async()=>(await import("./chunks/tree-WC3AXFHC.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-PECPOFQT.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-W6IMQ43Y.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-W6IMQ43Y.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-MGDOL4KG.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-MGDOL4KG.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-56DL6SXU.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-IWT2HHEA.js")).xargsCommand},{name:"true",load:async()=>(await import("./chunks/true-OVATH2SQ.js")).trueCommand},{name:"false",load:async()=>(await import("./chunks/true-OVATH2SQ.js")).falseCommand},{name:"clear",load:async()=>(await import("./chunks/clear-CI7A5IXQ.js")).clearCommand},{name:"bash",load:async()=>(await import("./chunks/bash-OAUBNRSG.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-OAUBNRSG.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-TJPN2INT.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-43KPK6TL.js")).base64Command},{name:"diff",load:async()=>(await import("./chunks/diff-ZGXLP3DN.js")).diffCommand},{name:"date",load:async()=>(await import("./chunks/date-IQLPMFYI.js")).dateCommand},{name:"sleep",load:async()=>(await import("./chunks/sleep-O5BOTJGJ.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-JED4EKFH.js")).timeoutCommand},{name:"time",load:async()=>(await import("./chunks/time-F4NVQOJH.js")).timeCommand},{name:"seq",load:async()=>(await import("./chunks/seq-AVK43XM2.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-433HIVAI.js")).exprCommand},{name:"md5sum",load:async()=>(await import("./chunks/md5sum-VHPDBIVV.js")).md5sumCommand},{name:"sha1sum",load:async()=>(await import("./chunks/sha1sum-4SVNPPXZ.js")).sha1sumCommand},{name:"sha256sum",load:async()=>(await import("./chunks/sha256sum-BM3AFTIE.js")).sha256sumCommand},{name:"file",load:async()=>(await import("./chunks/file-MWSA2WYI.js")).fileCommand},{name:"html-to-markdown",load:async()=>(await import("./chunks/html-to-markdown-EPEXKI4B.js")).htmlToMarkdownCommand},{name:"help",load:async()=>(await import("./chunks/help-L43ENI4H.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-5QEJAXNR.js")).whichCommand},{name:"tac",load:async()=>(await import("./chunks/tac-KNRFDAY7.js")).tac},{name:"hostname",load:async()=>(await import("./chunks/hostname-WXDKRL2Z.js")).hostname},{name:"whoami",load:async()=>(await import("./chunks/whoami-JVLUNKSG.js")).whoami},{name:"od",load:async()=>(await import("./chunks/od-KRKGC2U3.js")).od},{name:"gzip",load:async()=>(await import("./chunks/gzip-5ILPB46W.js")).gzipCommand},{name:"gunzip",load:async()=>(await import("./chunks/gzip-5ILPB46W.js")).gunzipCommand},{name:"zcat",load:async()=>(await import("./chunks/gzip-5ILPB46W.js")).zcatCommand}];(typeof __BROWSER__>"u"||!__BROWSER__)&&(Te.push({name:"tar",load:async()=>(await import("./chunks/tar-CLEBMI4R.js")).tarCommand}),Te.push({name:"yq",load:async()=>(await import("./chunks/yq-WS7WDP36.js")).yqCommand}),Te.push({name:"xan",load:async()=>(await import("./chunks/xan-OR7RSXSZ.js")).xanCommand}),Te.push({name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-THMDBIGF.js")).sqlite3Command}));var Bt=[];(typeof __BROWSER__>"u"||!__BROWSER__)&&(Bt.push({name:"python3",load:async()=>(await import("./chunks/python3-ZWX5SFJ3.js")).python3Command}),Bt.push({name:"python",load:async()=>(await import("./chunks/python3-ZWX5SFJ3.js")).pythonCommand}));var Wr=[{name:"curl",load:async()=>(await import("./chunks/curl-7IUASLUJ.js")).curlCommand}],rn=new Map;function Ht(e){return{name:e.name,async execute(t,s){let n=rn.get(e.name);return n||(n=await e.load(),rn.set(e.name,n)),n.execute(t,s)}}}function an(e){return(e?Te.filter(s=>e.includes(s.name)):Te).map(Ht)}function on(){return Wr.map(Ht)}function ln(){return Bt.map(Ht)}function cn(e){return"load"in e&&typeof e.load=="function"}function fn(e){let t=null;return{name:e.name,async execute(s,n){return t||(t=await e.load()),t.execute(s,n)}}}var Mr=new TextEncoder,Fr=new TextDecoder;function xe(e,t){if(e instanceof Uint8Array)return e;if(t==="base64")return Uint8Array.from(atob(e),s=>s.charCodeAt(0));if(t==="hex"){let s=new Uint8Array(e.length/2);for(let n=0;n<e.length;n+=2)s[n/2]=parseInt(e.slice(n,n+2),16);return s}return t==="binary"||t==="latin1"?Uint8Array.from(e,s=>s.charCodeAt(0)):Mr.encode(e)}function lt(e,t){return t==="base64"?btoa(String.fromCharCode(...e)):t==="hex"?Array.from(e).map(s=>s.toString(16).padStart(2,"0")).join(""):t==="binary"||t==="latin1"?String.fromCharCode(...e):Fr.decode(e)}function _e(e){if(e!=null)return typeof e=="string"?e:e.encoding??void 0}var ct=new TextEncoder;function zr(e){return typeof e=="object"&&e!==null&&!(e instanceof Uint8Array)&&"content"in e}var He=class{data=new Map;constructor(t){if(this.data.set("/",{type:"directory",mode:493,mtime:new Date}),t)for(let[s,n]of Object.entries(t))zr(n)?this.writeFileSync(s,n.content,void 0,{mode:n.mode,mtime:n.mtime}):this.writeFileSync(s,n)}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let n=s.split("/").filter(i=>i&&i!=="."),r=[];for(let i of n)i===".."?r.pop():r.push(i);return`/${r.join("/")}`||"/"}dirname(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.lastIndexOf("/");return n===0?"/":s.slice(0,n)}ensureParentDirs(t){let s=this.dirname(t);s!=="/"&&(this.data.has(s)||(this.ensureParentDirs(s),this.data.set(s,{type:"directory",mode:493,mtime:new Date})))}writeFileSync(t,s,n,r){let i=this.normalizePath(t);this.ensureParentDirs(i);let a=_e(n),o=xe(s,a);this.data.set(i,{type:"file",content:o,mode:r?.mode??420,mtime:r?.mtime??new Date})}async readFile(t,s){let n=await this.readFileBuffer(t),r=_e(s);return lt(n,r)}async readFileBuffer(t){let s=this.resolvePathWithSymlinks(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, open '${t}'`);if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return n.content instanceof Uint8Array?n.content:ct.encode(n.content)}async writeFile(t,s,n){this.writeFileSync(t,s,n)}async appendFile(t,s,n){let r=this.normalizePath(t),i=this.data.get(r);if(i&&i.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${t}'`);let a=_e(n),o=xe(s,a);if(i?.type==="file"){let f=i.content instanceof Uint8Array?i.content:ct.encode(i.content),l=new Uint8Array(f.length+o.length);l.set(f),l.set(o,f.length),this.data.set(r,{type:"file",content:l,mode:i.mode,mtime:new Date})}else this.writeFileSync(t,s,n)}async exists(t){try{let s=this.resolvePathWithSymlinks(t);return this.data.has(s)}catch{return!1}}async stat(t){let s=this.resolvePathWithSymlinks(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let r=0;return n.type==="file"&&n.content&&(n.content instanceof Uint8Array?r=n.content.length:r=ct.encode(n.content).length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:r,mtime:n.mtime||new Date}}async lstat(t){let s=this.resolveIntermediateSymlinks(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);if(n.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:n.mode,size:n.target.length,mtime:n.mtime||new Date};let r=0;return n.type==="file"&&n.content&&(n.content instanceof Uint8Array?r=n.content.length:r=ct.encode(n.content).length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:r,mtime:n.mtime||new Date}}resolveSymlink(t,s){if(s.startsWith("/"))return this.normalizePath(s);let n=this.dirname(t);return this.normalizePath(n==="/"?`/${s}`:`${n}/${s}`)}resolveIntermediateSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.slice(1).split("/");if(n.length<=1)return s;let r="",i=new Set;for(let a=0;a<n.length-1;a++){let o=n[a];r=`${r}/${o}`;let f=this.data.get(r),l=0,c=40;for(;f&&f.type==="symlink"&&l<c;){if(i.has(r))throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`);i.add(r),r=this.resolveSymlink(r,f.target),f=this.data.get(r),l++}if(l>=c)throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`)}return`${r}/${n[n.length-1]}`}resolvePathWithSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.slice(1).split("/"),r="",i=new Set;for(let a of n){r=`${r}/${a}`;let o=this.data.get(r),f=0,l=40;for(;o&&o.type==="symlink"&&f<l;){if(i.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);i.add(r),r=this.resolveSymlink(r,o.target),o=this.data.get(r),f++}if(f>=l)throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`)}return r}async mkdir(t,s){this.mkdirSync(t,s)}mkdirSync(t,s){let n=this.normalizePath(t);if(this.data.has(n)){if(this.data.get(n)?.type==="file")throw new Error(`EEXIST: file already exists, mkdir '${t}'`);if(!s?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${t}'`);return}let r=this.dirname(n);if(r!=="/"&&!this.data.has(r))if(s?.recursive)this.mkdirSync(r,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.data.set(n,{type:"directory",mode:493,mtime:new Date})}async readdir(t){return(await this.readdirWithFileTypes(t)).map(n=>n.name)}async readdirWithFileTypes(t){let s=this.normalizePath(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let r=new Set;for(;n&&n.type==="symlink";){if(r.has(s))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);r.add(s),s=this.resolveSymlink(s,n.target),n=this.data.get(s)}if(!n)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);if(n.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${t}'`);let i=s==="/"?"/":`${s}/`,a=new Map;for(let[o,f]of this.data.entries())if(o!==s&&o.startsWith(i)){let l=o.slice(i.length),c=l.split("/")[0];c&&!l.includes("/",c.length)&&!a.has(c)&&a.set(c,{name:c,isFile:f.type==="file",isDirectory:f.type==="directory",isSymbolicLink:f.type==="symlink"})}return Array.from(a.values()).sort((o,f)=>o.name<f.name?-1:o.name>f.name?1:0)}async rm(t,s){let n=this.normalizePath(t),r=this.data.get(n);if(!r){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}if(r.type==="directory"){let i=await this.readdir(n);if(i.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let a of i){let o=n==="/"?`/${a}`:`${n}/${a}`;await this.rm(o,s)}}}this.data.delete(n)}async cp(t,s,n){let r=this.normalizePath(t),i=this.normalizePath(s),a=this.data.get(r);if(!a)throw new Error(`ENOENT: no such file or directory, cp '${t}'`);if(a.type==="file")this.ensureParentDirs(i),this.data.set(i,{...a});else if(a.type==="directory"){if(!n?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let o=await this.readdir(r);for(let f of o){let l=r==="/"?`/${f}`:`${r}/${f}`,c=i==="/"?`/${f}`:`${i}/${f}`;await this.cp(l,c,n)}}}async mv(t,s){await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(t,s){if(s.startsWith("/"))return this.normalizePath(s);let n=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(n)}async chmod(t,s){let n=this.normalizePath(t),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);r.mode=s}async symlink(t,s){let n=this.normalizePath(s);if(this.data.has(n))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(n),this.data.set(n,{type:"symlink",target:t,mode:511,mtime:new Date})}async link(t,s){let n=this.normalizePath(t),r=this.normalizePath(s),i=this.data.get(n);if(!i)throw new Error(`ENOENT: no such file or directory, link '${t}'`);if(i.type!=="file")throw new Error(`EPERM: operation not permitted, link '${t}'`);if(this.data.has(r))throw new Error(`EEXIST: file already exists, link '${s}'`);this.ensureParentDirs(r),this.data.set(r,{type:"file",content:i.content,mode:i.mode,mtime:i.mtime})}async readlink(t){let s=this.normalizePath(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(n.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return n.target}async realpath(t){let s=this.resolvePathWithSymlinks(t);if(!this.data.has(s))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);return s}async utimes(t,s,n){let r=this.normalizePath(t),i=this.resolvePathWithSymlinks(r),a=this.data.get(i);if(!a)throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);a.mtime=n}};function Vr(e){let t=e;return typeof t.mkdirSync=="function"&&typeof t.writeFileSync=="function"}function Br(e,t){e.mkdirSync("/bin",{recursive:!0}),e.mkdirSync("/usr/bin",{recursive:!0}),t&&(e.mkdirSync("/home/user",{recursive:!0}),e.mkdirSync("/tmp",{recursive:!0}))}function Hr(e){e.mkdirSync("/dev",{recursive:!0}),e.writeFileSync("/dev/null",""),e.writeFileSync("/dev/zero",new Uint8Array(0)),e.writeFileSync("/dev/stdin",""),e.writeFileSync("/dev/stdout",""),e.writeFileSync("/dev/stderr","")}function jr(e){e.mkdirSync("/proc/self/fd",{recursive:!0}),e.writeFileSync("/proc/version",`${js}
|
|
2
|
+
import{B as an,C as ln,D as re,E as xe,F as K,G as ge,H as ut,I as cn,J as x,K as un,L as fn,M as be,N as qt,O as ft,P as z,a as Ys,b as Qs,c as Js,d as lt,e as q,f as W,g as we,h as Q,i as ve,j as Pe,k as zt,l as ct,m as en,n as Bt,o as tn,p as de,q as Se,r as sn,s as nn,t as jt,u as Ht,v as ke,w as rn,x as on,y as ye,z as Ut}from"./chunks/chunk-2ODUA7YH.js";import{a as Ce,b as me}from"./chunks/chunk-4PRVMER6.js";import{a as le,b as ce,c as ne,d as fe,e as Ks,f as V,g as Te,h as it,i as ot,j as Xs,k as se,l as _e,m as at,n as pe}from"./chunks/chunk-K5IXNHO5.js";import{a as qe}from"./chunks/chunk-SE4C7FJY.js";import"./chunks/chunk-OBH7XN5N.js";import{a as he}from"./chunks/chunk-4VDEBYW7.js";import"./chunks/chunk-KGOUQS5A.js";import*as zr from"node:fs";import*as Br from"node:readline";var Fe=[{name:"echo",load:async()=>(await import("./chunks/echo-7I42V66Q.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-HNXE2ES2.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-4W7NDLLV.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-5LN47VHU.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-XMSNS6S5.js")).mkdirCommand},{name:"rmdir",load:async()=>(await import("./chunks/rmdir-OEMA5ZTD.js")).rmdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-IBPHJBM3.js")).touchCommand},{name:"rm",load:async()=>(await import("./chunks/rm-S7ASVG34.js")).rmCommand},{name:"cp",load:async()=>(await import("./chunks/cp-VFXCUKXO.js")).cpCommand},{name:"mv",load:async()=>(await import("./chunks/mv-P4KHB27X.js")).mvCommand},{name:"ln",load:async()=>(await import("./chunks/ln-EFFNQ3RY.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-TYLTHXFR.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-L26WH2K4.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-VL3R4LAM.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-TJHLLIMR.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-YAUIERGN.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-CZ2TD6T6.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-ZZVPXHLF.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-BD56656Z.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-BD56656Z.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-BD56656Z.js")).egrepCommand},{name:"rg",load:async()=>(await import("./chunks/rg-IZR5557M.js")).rgCommand},{name:"sed",load:async()=>(await import("./chunks/sed-E4QAUCYQ.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-OKD2P6CM.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-QF3YLXRW.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-NNXAFO6D.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-CPIFQTKY.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-IHF6BEOO.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-UCH462KK.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-IAUNBQKH.js")).trCommand},{name:"rev",load:async()=>(await import("./chunks/rev-VP42N2JN.js")).rev},{name:"nl",load:async()=>(await import("./chunks/nl-DSM3NUGM.js")).nl},{name:"fold",load:async()=>(await import("./chunks/fold-452R4I2C.js")).fold},{name:"expand",load:async()=>(await import("./chunks/expand-77K5HH2M.js")).expand},{name:"unexpand",load:async()=>(await import("./chunks/unexpand-BFVYAPOU.js")).unexpand},{name:"strings",load:async()=>(await import("./chunks/strings-ZEKN6D4Q.js")).strings},{name:"split",load:async()=>(await import("./chunks/split-7UP7EATZ.js")).split},{name:"column",load:async()=>(await import("./chunks/column-HQ4AK5DM.js")).column},{name:"join",load:async()=>(await import("./chunks/join-3IXMEGNA.js")).join},{name:"tee",load:async()=>(await import("./chunks/tee-XSKPK43X.js")).teeCommand},{name:"find",load:async()=>(await import("./chunks/find-KHOYETRP.js")).findCommand},{name:"basename",load:async()=>(await import("./chunks/basename-SO5MVUEX.js")).basenameCommand},{name:"dirname",load:async()=>(await import("./chunks/dirname-EES7TR26.js")).dirnameCommand},{name:"tree",load:async()=>(await import("./chunks/tree-WC3AXFHC.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-PECPOFQT.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-W6IMQ43Y.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-W6IMQ43Y.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-MGDOL4KG.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-MGDOL4KG.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-56DL6SXU.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-IWT2HHEA.js")).xargsCommand},{name:"true",load:async()=>(await import("./chunks/true-OVATH2SQ.js")).trueCommand},{name:"false",load:async()=>(await import("./chunks/true-OVATH2SQ.js")).falseCommand},{name:"clear",load:async()=>(await import("./chunks/clear-CI7A5IXQ.js")).clearCommand},{name:"bash",load:async()=>(await import("./chunks/bash-OAUBNRSG.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-OAUBNRSG.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-TJPN2INT.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-43KPK6TL.js")).base64Command},{name:"diff",load:async()=>(await import("./chunks/diff-ZGXLP3DN.js")).diffCommand},{name:"date",load:async()=>(await import("./chunks/date-IQLPMFYI.js")).dateCommand},{name:"sleep",load:async()=>(await import("./chunks/sleep-O5BOTJGJ.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-JED4EKFH.js")).timeoutCommand},{name:"time",load:async()=>(await import("./chunks/time-F4NVQOJH.js")).timeCommand},{name:"seq",load:async()=>(await import("./chunks/seq-AVK43XM2.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-433HIVAI.js")).exprCommand},{name:"md5sum",load:async()=>(await import("./chunks/md5sum-VHPDBIVV.js")).md5sumCommand},{name:"sha1sum",load:async()=>(await import("./chunks/sha1sum-4SVNPPXZ.js")).sha1sumCommand},{name:"sha256sum",load:async()=>(await import("./chunks/sha256sum-BM3AFTIE.js")).sha256sumCommand},{name:"file",load:async()=>(await import("./chunks/file-MWSA2WYI.js")).fileCommand},{name:"html-to-markdown",load:async()=>(await import("./chunks/html-to-markdown-EPEXKI4B.js")).htmlToMarkdownCommand},{name:"help",load:async()=>(await import("./chunks/help-L43ENI4H.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-5QEJAXNR.js")).whichCommand},{name:"tac",load:async()=>(await import("./chunks/tac-KNRFDAY7.js")).tac},{name:"hostname",load:async()=>(await import("./chunks/hostname-WXDKRL2Z.js")).hostname},{name:"whoami",load:async()=>(await import("./chunks/whoami-JVLUNKSG.js")).whoami},{name:"od",load:async()=>(await import("./chunks/od-KRKGC2U3.js")).od},{name:"gzip",load:async()=>(await import("./chunks/gzip-5ILPB46W.js")).gzipCommand},{name:"gunzip",load:async()=>(await import("./chunks/gzip-5ILPB46W.js")).gunzipCommand},{name:"zcat",load:async()=>(await import("./chunks/gzip-5ILPB46W.js")).zcatCommand}];(typeof __BROWSER__>"u"||!__BROWSER__)&&(Fe.push({name:"tar",load:async()=>(await import("./chunks/tar-CLEBMI4R.js")).tarCommand}),Fe.push({name:"yq",load:async()=>(await import("./chunks/yq-WS7WDP36.js")).yqCommand}),Fe.push({name:"xan",load:async()=>(await import("./chunks/xan-OR7RSXSZ.js")).xanCommand}),Fe.push({name:"sqlite3",load:async()=>(await import("./chunks/sqlite3-THMDBIGF.js")).sqlite3Command}));var Zt=[];(typeof __BROWSER__>"u"||!__BROWSER__)&&(Zt.push({name:"python3",load:async()=>(await import("./chunks/python3-ZWX5SFJ3.js")).python3Command}),Zt.push({name:"python",load:async()=>(await import("./chunks/python3-ZWX5SFJ3.js")).pythonCommand}));var qr=[{name:"curl",load:async()=>(await import("./chunks/curl-7IUASLUJ.js")).curlCommand}],dn=new Map;function Gt(e){return{name:e.name,async execute(t,s){let n=dn.get(e.name);return n||(n=await e.load(),dn.set(e.name,n)),n.execute(t,s)}}}function hn(e){return(e?Fe.filter(s=>e.includes(s.name)):Fe).map(Gt)}function pn(){return qr.map(Gt)}function mn(){return Zt.map(Gt)}function yn(e){return"load"in e&&typeof e.load=="function"}function gn(e){let t=null;return{name:e.name,async execute(s,n){return t||(t=await e.load()),t.execute(s,n)}}}var Zr=new TextEncoder,Gr=new TextDecoder;function Me(e,t){if(e instanceof Uint8Array)return e;if(t==="base64")return Uint8Array.from(atob(e),s=>s.charCodeAt(0));if(t==="hex"){let s=new Uint8Array(e.length/2);for(let n=0;n<e.length;n+=2)s[n/2]=parseInt(e.slice(n,n+2),16);return s}return t==="binary"||t==="latin1"?Uint8Array.from(e,s=>s.charCodeAt(0)):Zr.encode(e)}function dt(e,t){return t==="base64"?btoa(String.fromCharCode(...e)):t==="hex"?Array.from(e).map(s=>s.toString(16).padStart(2,"0")).join(""):t==="binary"||t==="latin1"?String.fromCharCode(...e):Gr.decode(e)}function Ne(e){if(e!=null)return typeof e=="string"?e:e.encoding??void 0}var ht=new TextEncoder;function Kr(e){return typeof e=="object"&&e!==null&&!(e instanceof Uint8Array)&&"content"in e}function te(e,t){if(e.includes("\0"))throw new Error(`ENOENT: path contains null byte, ${t} '${e}'`)}var Ze=class{data=new Map;constructor(t){if(this.data.set("/",{type:"directory",mode:493,mtime:new Date}),t)for(let[s,n]of Object.entries(t))Kr(n)?this.writeFileSync(s,n.content,void 0,{mode:n.mode,mtime:n.mtime}):this.writeFileSync(s,n)}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let n=s.split("/").filter(i=>i&&i!=="."),r=[];for(let i of n)i===".."?r.pop():r.push(i);return`/${r.join("/")}`||"/"}dirname(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.lastIndexOf("/");return n===0?"/":s.slice(0,n)}ensureParentDirs(t){let s=this.dirname(t);s!=="/"&&(this.data.has(s)||(this.ensureParentDirs(s),this.data.set(s,{type:"directory",mode:493,mtime:new Date})))}writeFileSync(t,s,n,r){te(t,"write");let i=this.normalizePath(t);this.ensureParentDirs(i);let o=Ne(n),a=Me(s,o);this.data.set(i,{type:"file",content:a,mode:r?.mode??420,mtime:r?.mtime??new Date})}async readFile(t,s){let n=await this.readFileBuffer(t),r=Ne(s);return dt(n,r)}async readFileBuffer(t){te(t,"open");let s=this.resolvePathWithSymlinks(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, open '${t}'`);if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return n.content instanceof Uint8Array?n.content:ht.encode(n.content)}async writeFile(t,s,n){this.writeFileSync(t,s,n)}async appendFile(t,s,n){te(t,"append");let r=this.normalizePath(t),i=this.data.get(r);if(i&&i.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${t}'`);let o=Ne(n),a=Me(s,o);if(i?.type==="file"){let l=i.content instanceof Uint8Array?i.content:ht.encode(i.content),c=new Uint8Array(l.length+a.length);c.set(l),c.set(a,l.length),this.data.set(r,{type:"file",content:c,mode:i.mode,mtime:new Date})}else this.writeFileSync(t,s,n)}async exists(t){if(t.includes("\0"))return!1;try{let s=this.resolvePathWithSymlinks(t);return this.data.has(s)}catch{return!1}}async stat(t){te(t,"stat");let s=this.resolvePathWithSymlinks(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let r=0;return n.type==="file"&&n.content&&(n.content instanceof Uint8Array?r=n.content.length:r=ht.encode(n.content).length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:r,mtime:n.mtime||new Date}}async lstat(t){te(t,"lstat");let s=this.resolveIntermediateSymlinks(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);if(n.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:n.mode,size:n.target.length,mtime:n.mtime||new Date};let r=0;return n.type==="file"&&n.content&&(n.content instanceof Uint8Array?r=n.content.length:r=ht.encode(n.content).length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:r,mtime:n.mtime||new Date}}resolveSymlink(t,s){if(s.startsWith("/"))return this.normalizePath(s);let n=this.dirname(t);return this.normalizePath(n==="/"?`/${s}`:`${n}/${s}`)}resolveIntermediateSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.slice(1).split("/");if(n.length<=1)return s;let r="",i=new Set;for(let o=0;o<n.length-1;o++){let a=n[o];r=`${r}/${a}`;let l=this.data.get(r),c=0,u=40;for(;l&&l.type==="symlink"&&c<u;){if(i.has(r))throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`);i.add(r),r=this.resolveSymlink(r,l.target),l=this.data.get(r),c++}if(c>=u)throw new Error(`ELOOP: too many levels of symbolic links, lstat '${t}'`)}return`${r}/${n[n.length-1]}`}resolvePathWithSymlinks(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.slice(1).split("/"),r="",i=new Set;for(let o of n){r=`${r}/${o}`;let a=this.data.get(r),l=0,c=40;for(;a&&a.type==="symlink"&&l<c;){if(i.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);i.add(r),r=this.resolveSymlink(r,a.target),a=this.data.get(r),l++}if(l>=c)throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`)}return r}async mkdir(t,s){this.mkdirSync(t,s)}mkdirSync(t,s){te(t,"mkdir");let n=this.normalizePath(t);if(this.data.has(n)){if(this.data.get(n)?.type==="file")throw new Error(`EEXIST: file already exists, mkdir '${t}'`);if(!s?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${t}'`);return}let r=this.dirname(n);if(r!=="/"&&!this.data.has(r))if(s?.recursive)this.mkdirSync(r,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.data.set(n,{type:"directory",mode:493,mtime:new Date})}async readdir(t){return(await this.readdirWithFileTypes(t)).map(n=>n.name)}async readdirWithFileTypes(t){te(t,"scandir");let s=this.normalizePath(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let r=new Set;for(;n&&n.type==="symlink";){if(r.has(s))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);r.add(s),s=this.resolveSymlink(s,n.target),n=this.data.get(s)}if(!n)throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);if(n.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${t}'`);let i=s==="/"?"/":`${s}/`,o=new Map;for(let[a,l]of this.data.entries())if(a!==s&&a.startsWith(i)){let c=a.slice(i.length),u=c.split("/")[0];u&&!c.includes("/",u.length)&&!o.has(u)&&o.set(u,{name:u,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}return Array.from(o.values()).sort((a,l)=>a.name<l.name?-1:a.name>l.name?1:0)}async rm(t,s){te(t,"rm");let n=this.normalizePath(t),r=this.data.get(n);if(!r){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}if(r.type==="directory"){let i=await this.readdir(n);if(i.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let o of i){let a=n==="/"?`/${o}`:`${n}/${o}`;await this.rm(a,s)}}}this.data.delete(n)}async cp(t,s,n){te(t,"cp"),te(s,"cp");let r=this.normalizePath(t),i=this.normalizePath(s),o=this.data.get(r);if(!o)throw new Error(`ENOENT: no such file or directory, cp '${t}'`);if(o.type==="file")this.ensureParentDirs(i),this.data.set(i,{...o});else if(o.type==="directory"){if(!n?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let a=await this.readdir(r);for(let l of a){let c=r==="/"?`/${l}`:`${r}/${l}`,u=i==="/"?`/${l}`:`${i}/${l}`;await this.cp(c,u,n)}}}async mv(t,s){await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(t,s){if(s.startsWith("/"))return this.normalizePath(s);let n=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(n)}async chmod(t,s){te(t,"chmod");let n=this.normalizePath(t),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);r.mode=s}async symlink(t,s){te(s,"symlink");let n=this.normalizePath(s);if(this.data.has(n))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(n),this.data.set(n,{type:"symlink",target:t,mode:511,mtime:new Date})}async link(t,s){te(t,"link"),te(s,"link");let n=this.normalizePath(t),r=this.normalizePath(s),i=this.data.get(n);if(!i)throw new Error(`ENOENT: no such file or directory, link '${t}'`);if(i.type!=="file")throw new Error(`EPERM: operation not permitted, link '${t}'`);if(this.data.has(r))throw new Error(`EEXIST: file already exists, link '${s}'`);this.ensureParentDirs(r),this.data.set(r,{type:"file",content:i.content,mode:i.mode,mtime:i.mtime})}async readlink(t){te(t,"readlink");let s=this.normalizePath(t),n=this.data.get(s);if(!n)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);if(n.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return n.target}async realpath(t){te(t,"realpath");let s=this.resolvePathWithSymlinks(t);if(!this.data.has(s))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);return s}async utimes(t,s,n){te(t,"utimes");let r=this.normalizePath(t),i=this.resolvePathWithSymlinks(r),o=this.data.get(i);if(!o)throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);o.mtime=n}};function Xr(e){let t=e;return typeof t.mkdirSync=="function"&&typeof t.writeFileSync=="function"}function Yr(e,t){e.mkdirSync("/bin",{recursive:!0}),e.mkdirSync("/usr/bin",{recursive:!0}),t&&(e.mkdirSync("/home/user",{recursive:!0}),e.mkdirSync("/tmp",{recursive:!0}))}function Qr(e){e.mkdirSync("/dev",{recursive:!0}),e.writeFileSync("/dev/null",""),e.writeFileSync("/dev/zero",new Uint8Array(0)),e.writeFileSync("/dev/stdin",""),e.writeFileSync("/dev/stdout",""),e.writeFileSync("/dev/stderr","")}function Jr(e){e.mkdirSync("/proc/self/fd",{recursive:!0}),e.writeFileSync("/proc/version",`${Ys}
|
|
3
3
|
`),e.writeFileSync("/proc/self/exe","/bin/bash"),e.writeFileSync("/proc/self/cmdline","bash\0"),e.writeFileSync("/proc/self/comm",`bash
|
|
4
|
-
`),e.writeFileSync("/proc/self/status",
|
|
5
|
-
`);let s=1;if(t.length>0){let n=Number.parseInt(t[0],10);if(Number.isNaN(n)||n<1)throw new
|
|
6
|
-
`);s=n}throw new
|
|
4
|
+
`),e.writeFileSync("/proc/self/status",Qs()),e.writeFileSync("/proc/self/fd/0","/dev/stdin"),e.writeFileSync("/proc/self/fd/1","/dev/stdout"),e.writeFileSync("/proc/self/fd/2","/dev/stderr")}function wn(e,t){Xr(e)&&(Yr(e,t),Qr(e),Jr(e))}var ei=["allexport","errexit","noglob","noclobber","noexec","nounset","pipefail","posix","verbose","xtrace"],ti=["braceexpand","hashall","interactive-comments"];function Kt(e){let t=[],s=[...ti.map(n=>({name:n,enabled:!0})),...ei.map(n=>({name:n,enabled:e[n]}))].sort((n,r)=>n.name.localeCompare(r.name));for(let n of s)n.enabled&&t.push(n.name);return t.join(":")}function We(e){e.state.env.set("SHELLOPTS",Kt(e.state.options))}var si=["dotglob","expand_aliases","extglob","failglob","globskipdots","globstar","lastpipe","nocaseglob","nocasematch","nullglob","xpg_echo"];function Xt(e){let t=[];for(let s of si)e[s]&&t.push(s);return t.join(":")}function Yt(e){e.state.env.set("BASHOPTS",Xt(e.state.shoptOptions))}var ni="BASH_ALIAS_";function vn(e){return e.parts.length!==1?!1:e.parts[0].type==="Literal"}function bn(e){if(e.parts.length!==1)return null;let t=e.parts[0];return t.type==="Literal"?t.value:null}function En(e,t){return e.env.get(`${ni}${t}`)}function Qt(e,t,s){if(!t.name||!vn(t.name))return t;let n=bn(t.name);if(!n)return t;let r=En(e,n);if(!r||s.has(n))return t;try{s.add(n);let i=new W,o=r,a=r.endsWith(" ");if(!a)for(let f of t.args){let d=Sn(f);o+=` ${d}`}let l;try{l=i.parse(o)}catch(f){if(f instanceof lt)throw f;return t}if(l.statements.length!==1||l.statements[0].pipelines.length!==1||l.statements[0].pipelines[0].commands.length!==1)return $n(t,r);let c=l.statements[0].pipelines[0].commands[0];if(c.type!=="SimpleCommand")return $n(t,r);let u={...c,assignments:[...t.assignments,...c.assignments],redirections:[...c.redirections,...t.redirections],line:t.line};if(a&&t.args.length>0&&(u={...u,args:[...u.args,...t.args]},u.args.length>0)){let f=u.args[0];if(vn(f)){let d=bn(f);if(d&&En(e,d)){let h={type:"SimpleCommand",name:f,args:u.args.slice(1),assignments:[],redirections:[]},m=Qt(e,h,s);m!==h&&(u={...u,name:m.name,args:[...m.args]})}}}return u}catch(i){throw s.delete(n),i}}function $n(e,t){let s=t;for(let o of e.args){let a=Sn(o);s+=` ${a}`}let n=new W,r=n.parseWordFromString("eval",!1,!1),i=n.parseWordFromString(`'${s.replace(/'/g,"'\\''")}'`,!1,!1);return{type:"SimpleCommand",name:r,args:[i],assignments:e.assignments,redirections:e.redirections,line:e.line}}function Sn(e){let t="";for(let s of e.parts)switch(s.type){case"Literal":t+=s.value.replace(/([\s"'$`\\*?[\]{}()<>|&;#!])/g,"\\$1");break;case"SingleQuoted":t+=`'${s.value}'`;break;case"DoubleQuoted":t+=`"${s.parts.map(n=>n.type==="Literal"?n.value:`$${n.type}`).join("")}"`;break;case"ParameterExpansion":t+=`\${${s.parameter}}`;break;case"CommandSubstitution":t+="$(...)";break;case"ArithmeticExpansion":t+=`$((${s.expression}))`;break;case"Glob":t+=s.pattern;break;default:break}return t}async function An(e,t){let s=t.parts.map(u=>u.type==="Literal"?u.value:"\0").join(""),n=s.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);if(!n||!s.endsWith(")"))return null;let r=n[1],i=[],o=!1,a="",l=!1;for(let u of t.parts)if(u.type==="Literal"){let f=u.value;if(!o){let d=f.indexOf("=(");d!==-1&&(o=!0,f=f.slice(d+2))}if(o){f.endsWith(")")&&(f=f.slice(0,-1));let d=f.split(/(\s+)/);for(let h of d)/^\s+$/.test(h)?(a||l)&&(i.push(a),a="",l=!1):h&&(a+=h)}}else if(o)if(u.type==="BraceExpansion")if(/^\[.+\]=/.test(a))a+=ct({type:"Word",parts:[u]});else{(a||l)&&(i.push(a),a="",l=!1);let d=await be(e,{type:"Word",parts:[u]});i.push(...d.values)}else{(u.type==="SingleQuoted"||u.type==="DoubleQuoted"||u.type==="Escaped")&&(l=!0);let f=await x(e,{type:"Word",parts:[u]});a+=f}(a||l)&&i.push(a);let c=i.map(u=>/^\[.+\]=/.test(u)?u:u===""?"''":/[\s"'\\$`!*?[\]{}|&;<>()]/.test(u)&&!u.startsWith("'")&&!u.startsWith('"')?`'${u.replace(/'/g,"'\\''")}'`:u);return`${r}=(${c.join(" ")})`}async function _n(e,t){let s=-1,n=-1,r=!1;for(let p=0;p<t.parts.length;p++){let g=t.parts[p];if(g.type==="Literal"){let b=g.value.indexOf("+=");if(b!==-1){let k=g.value.slice(0,b);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(k)){s=p,n=b,r=!0;break}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(k)){s=p,n=b,r=!0;break}}let E=g.value.indexOf("=");if(E!==-1&&(E===0||g.value[E-1]!=="+")){let k=g.value.slice(0,E);if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(k)||/^[a-zA-Z_][a-zA-Z0-9_]*\[[^\]]+\]$/.test(k)){s=p,n=E;break}}}}if(s===-1)return null;let i=t.parts.slice(0,s),o=t.parts[s];if(o.type!=="Literal")return null;let a=r?2:1,l=o.value.slice(0,n),c=o.value.slice(n+a),u=t.parts.slice(s+1),f="";for(let p of i)f+=await x(e,{type:"Word",parts:[p]});f+=l;let d={type:"Word",parts:c!==""?[{type:"Literal",value:c},...u]:u},h=d.parts.length>0?await x(e,d):"";return`${f}${r?"+=":"="}${h}`}var ri=["tar","yq","xan","sqlite3","python3","python"];function Cn(e){return ri.includes(e)}var L=Object.freeze({stdout:"",stderr:"",exitCode:0});function F(e=""){return{stdout:e,stderr:"",exitCode:0}}function S(e,t=1){return{stdout:"",stderr:e,exitCode:t}}function _(e,t,s){return{stdout:e,stderr:t,exitCode:s}}function U(e){return{stdout:"",stderr:"",exitCode:e?0:1}}function Ae(e,t,s="",n=""){throw new se(e,t,s,n)}function Jt(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new _e;return L}if(t.length>1)throw new V(1,"",`bash: break: too many arguments
|
|
5
|
+
`);let s=1;if(t.length>0){let n=Number.parseInt(t[0],10);if(Number.isNaN(n)||n<1)throw new V(128,"",`bash: break: ${t[0]}: numeric argument required
|
|
6
|
+
`);s=n}throw new le(s)}async function es(e,t){let s,n=!1,r=!1,i=0;for(;i<t.length;)if(t[i]==="--"){i++;break}else if(t[i]==="-L")r=!1,i++;else if(t[i]==="-P")r=!0,i++;else if(t[i].startsWith("-")&&t[i]!=="-")i++;else break;let o=t.slice(i);if(o.length===0||o[0]==="~"?s=e.state.env.get("HOME")||"/":o[0]==="-"?(s=e.state.previousDir,n=!0):s=o[0],!s.startsWith("/")&&!s.startsWith("./")&&!s.startsWith("../")&&s!=="."&&s!==".."){let f=e.state.env.get("CDPATH");if(f){let d=f.split(":").filter(h=>h);for(let h of d){let m=h.startsWith("/")?`${h}/${s}`:`${e.state.cwd}/${h}/${s}`;try{if((await e.fs.stat(m)).isDirectory){s=m,n=!0;break}}catch{}}}}let l=(s.startsWith("/")?s:`${e.state.cwd}/${s}`).split("/").filter(f=>f&&f!=="."),c="";for(let f of l)if(f==="..")c=c.split("/").slice(0,-1).join("/")||"/";else{c=c?`${c}/${f}`:`/${f}`;try{if(!(await e.fs.stat(c)).isDirectory)return S(`bash: cd: ${s}: Not a directory
|
|
7
7
|
`)}catch{return S(`bash: cd: ${s}: No such file or directory
|
|
8
|
-
`)}}let c
|
|
9
|
-
`:"")}function
|
|
10
|
-
`,!1;if(
|
|
11
|
-
`,!1}return e.state.env.has(`${n}_${
|
|
12
|
-
`,2):
|
|
13
|
-
`,2):_("","",1)}if(t.length===3){let n=t[0],r=t[1],i=t[2];if(
|
|
14
|
-
`,2):U(s.value)}async function
|
|
15
|
-
`)&&!n&&!r){
|
|
8
|
+
`)}}let u=c||"/";if(r)try{u=await e.fs.realpath(u)}catch{}return e.state.previousDir=e.state.cwd,e.state.cwd=u,e.state.env.set("PWD",e.state.cwd),e.state.env.set("OLDPWD",e.state.previousDir),F(n?`${u}
|
|
9
|
+
`:"")}function ts(e,t){return e.fs.resolvePath(e.state.cwd,t)}var ii=["-e","-a","-f","-d","-r","-w","-x","-s","-L","-h","-k","-g","-u","-G","-O","-b","-c","-p","-S","-t","-N"];function pt(e){return ii.includes(e)}async function mt(e,t,s){let n=ts(e,s);switch(t){case"-e":case"-a":return e.fs.exists(n);case"-f":return await e.fs.exists(n)?(await e.fs.stat(n)).isFile:!1;case"-d":return await e.fs.exists(n)?(await e.fs.stat(n)).isDirectory:!1;case"-r":return await e.fs.exists(n)?((await e.fs.stat(n)).mode&256)!==0:!1;case"-w":return await e.fs.exists(n)?((await e.fs.stat(n)).mode&128)!==0:!1;case"-x":return await e.fs.exists(n)?((await e.fs.stat(n)).mode&64)!==0:!1;case"-s":return await e.fs.exists(n)?(await e.fs.stat(n)).size>0:!1;case"-L":case"-h":try{return(await e.fs.lstat(n)).isSymbolicLink}catch{return!1}case"-k":return await e.fs.exists(n)?((await e.fs.stat(n)).mode&512)!==0:!1;case"-g":return await e.fs.exists(n)?((await e.fs.stat(n)).mode&1024)!==0:!1;case"-u":return await e.fs.exists(n)?((await e.fs.stat(n)).mode&2048)!==0:!1;case"-G":case"-O":return e.fs.exists(n);case"-b":return!1;case"-c":return["/dev/null","/dev/zero","/dev/random","/dev/urandom","/dev/tty","/dev/stdin","/dev/stdout","/dev/stderr"].some(i=>n===i||n.endsWith(i));case"-p":return!1;case"-S":return!1;case"-t":return!1;case"-N":return e.fs.exists(n);default:return!1}}var oi=["-nt","-ot","-ef"];function yt(e){return oi.includes(e)}async function gt(e,t,s,n){let r=ts(e,s),i=ts(e,n);switch(t){case"-nt":try{let o=await e.fs.stat(r),a=await e.fs.stat(i);return o.mtime>a.mtime}catch{return!1}case"-ot":try{let o=await e.fs.stat(r),a=await e.fs.stat(i);return o.mtime<a.mtime}catch{return!1}case"-ef":try{if(!await e.fs.exists(r)||!await e.fs.exists(i))return!1;let o=e.fs.resolvePath(e.state.cwd,r),a=e.fs.resolvePath(e.state.cwd,i);return o===a}catch{return!1}default:return!1}}var ai=new Set(["-eq","-ne","-lt","-le","-gt","-ge"]);function wt(e){return ai.has(e)}function vt(e,t,s){switch(e){case"-eq":return t===s;case"-ne":return t!==s;case"-lt":return t<s;case"-le":return t<=s;case"-gt":return t>s;case"-ge":return t>=s}}function Ge(e){return e==="="||e==="=="||e==="!="}function bt(e,t,s,n=!1,r=!1,i=!1){if(n){let a=Ve(t,s,r,i);return e==="!="?!a:a}if(r){let a=t.toLowerCase()===s.toLowerCase();return e==="!="?!a:a}let o=t===s;return e==="!="?!o:o}var li=new Set(["-z","-n"]);function Et(e){return li.has(e)}function $t(e,t){switch(e){case"-z":return t==="";case"-n":return t!==""}}async function St(e,t){let s=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(s){let n=s[1],r=s[2];if(e.state.associativeArrays?.has(n)){let a=r;return(a.startsWith("'")&&a.endsWith("'")||a.startsWith('"')&&a.endsWith('"'))&&(a=a.slice(1,-1)),a=a.replace(/\$([a-zA-Z_][a-zA-Z0-9_]*)/g,(l,c)=>e.state.env.get(c)||""),e.state.env.has(`${n}_${a}`)}let o;try{let a=new W,l=q(a,r);o=await z(e,l.expression)}catch{if(/^-?\d+$/.test(r))o=Number.parseInt(r,10);else{let a=e.state.env.get(r);o=a?Number.parseInt(a,10):0}}if(o<0){let a=Q(e,n),l=e.state.currentLine;if(a.length===0)return e.state.expansionStderr=(e.state.expansionStderr||"")+`bash: line ${l}: ${n}: bad array subscript
|
|
10
|
+
`,!1;if(o=Math.max(...a)+1+o,o<0)return e.state.expansionStderr=(e.state.expansionStderr||"")+`bash: line ${l}: ${n}: bad array subscript
|
|
11
|
+
`,!1}return e.state.env.has(`${n}_${o}`)}return e.state.env.has(t)?!0:e.state.associativeArrays?.has(t)?Pe(e,t).length>0:Q(e,t).length>0}async function Oe(e,t){switch(t.type){case"CondBinary":{let s=await x(e,t.left),n=t.right.parts.length>0&&t.right.parts.every(i=>i.type==="SingleQuoted"||i.type==="DoubleQuoted"||i.type==="Escaped"&&t.operator!=="=~"),r;if(t.operator==="=~")if(n){let i=await x(e,t.right);r=ln(i)}else r=await un(e,t.right);else Ge(t.operator)&&!n?r=await fn(e,t.right):r=await x(e,t.right);if(Ge(t.operator)){let i=e.state.shoptOptions.nocasematch;return bt(t.operator,s,r,!n,i,!0)}if(wt(t.operator))return vt(t.operator,await kn(e,s),await kn(e,r));if(yt(t.operator))return gt(e,t.operator,s,r);switch(t.operator){case"=~":try{let i=e.state.shoptOptions.nocasematch,o=di(r),l=qe(o,i?"i":"").match(s);if(ve(e,"BASH_REMATCH"),l)for(let c=0;c<l.length;c++)e.state.env.set(`BASH_REMATCH_${c}`,l[c]||"");return l!==null}catch{throw new Error("syntax error in regular expression")}case"<":return s<r;case">":return s>r;default:return!1}}case"CondUnary":{let s=await x(e,t.operand);return pt(t.operator)?mt(e,t.operator,s):Et(t.operator)?$t(t.operator,s):t.operator==="-v"?await St(e,s):t.operator==="-o"?ns(e,s):!1}case"CondNot":return e.state.shoptOptions.extglob&&t.operand.type==="CondGroup"&&t.operand.expression.type==="CondWord"?`!(${await x(e,t.operand.expression.word)})`!=="":!await Oe(e,t.operand);case"CondAnd":return await Oe(e,t.left)?await Oe(e,t.right):!1;case"CondOr":return await Oe(e,t.left)?!0:await Oe(e,t.right);case"CondGroup":return await Oe(e,t.expression);case"CondWord":return await x(e,t.word)!=="";default:return!1}}async function Ke(e,t){if(t.length===0)return _("","",1);if(t.length===1)return U(!!t[0]);if(t.length===2){let n=t[0],r=t[1];return n==="("?S(`test: '(' without matching ')'
|
|
12
|
+
`,2):pt(n)?U(await mt(e,n,r)):Et(n)?U($t(n,r)):n==="!"?U(!r):n==="-v"?U(await St(e,r)):n==="-o"?U(ns(e,r)):n==="="||n==="=="||n==="!="||n==="<"||n===">"||n==="-eq"||n==="-ne"||n==="-lt"||n==="-le"||n==="-gt"||n==="-ge"||n==="-nt"||n==="-ot"||n==="-ef"?S(`test: ${n}: unary operator expected
|
|
13
|
+
`,2):_("","",1)}if(t.length===3){let n=t[0],r=t[1],i=t[2];if(Ge(r))return U(bt(r,n,i));if(wt(r)){let o=At(n),a=At(i);return!o.valid||!a.valid?_("","",2):U(vt(r,o.value,a.value))}if(yt(r))return U(await gt(e,r,n,i));switch(r){case"-a":return U(n!==""&&i!=="");case"-o":return U(n!==""||i!=="");case">":return U(n>i);case"<":return U(n<i)}if(n==="!"){let o=await Ke(e,[r,i]);return _("",o.stderr,o.exitCode===0?1:o.exitCode===1?0:o.exitCode)}if(n==="("&&i===")")return U(r!=="")}if(t.length===4){if(t[0]==="!"){let n=await Ke(e,t.slice(1));return _("",n.stderr,n.exitCode===0?1:n.exitCode===1?0:n.exitCode)}if(t[0]==="("&&t[3]===")")return Ke(e,[t[1],t[2]])}let s=await On(e,t,0);return s.pos<t.length?S(`test: too many arguments
|
|
14
|
+
`,2):U(s.value)}async function On(e,t,s){return ci(e,t,s)}async function ci(e,t,s){let{value:n,pos:r}=await Pn(e,t,s);for(;t[r]==="-o";){let i=await Pn(e,t,r+1);n=n||i.value,r=i.pos}return{value:n,pos:r}}async function Pn(e,t,s){let{value:n,pos:r}=await ss(e,t,s);for(;t[r]==="-a";){let i=await ss(e,t,r+1);n=n&&i.value,r=i.pos}return{value:n,pos:r}}async function ss(e,t,s){if(t[s]==="!"){let{value:n,pos:r}=await ss(e,t,s+1);return{value:!n,pos:r}}return ui(e,t,s)}async function ui(e,t,s){let n=t[s];if(n==="("){let{value:i,pos:o}=await On(e,t,s+1);return{value:i,pos:t[o]===")"?o+1:o}}let r=t[s+1];if(Ge(r)){let i=n,o=t[s+2]??"";return{value:bt(r,i,o),pos:s+3}}if(wt(r)){let i=At(n),o=At(t[s+2]??"0");return!i.valid||!o.valid?{value:!1,pos:s+3}:{value:vt(r,i.value,o.value),pos:s+3}}if(yt(r)){let i=n,o=t[s+2]??"";return{value:await gt(e,r,i,o),pos:s+3}}if(pt(n)){let i=t[s+1]??"";return{value:await mt(e,n,i),pos:s+2}}if(Et(n)){let i=t[s+1]??"";return{value:$t(n,i),pos:s+2}}if(n==="-v"){let i=t[s+1]??"";return{value:await St(e,i),pos:s+2}}if(n==="-o"){let i=t[s+1]??"";return{value:ns(e,i),pos:s+2}}return{value:n!==void 0&&n!=="",pos:s+1}}function Ve(e,t,s=!1,n=!1){let r=`^${Dn(t,n)}$`;return qe(r,s?"is":"s").test(e)}function Dn(e,t){let s="";for(let n=0;n<e.length;n++){let r=e[n];if(t&&(r==="@"||r==="*"||r==="+"||r==="?"||r==="!")&&n+1<e.length&&e[n+1]==="("){let i=Tn(e,n+1);if(i!==-1){let o=e.slice(n+2,i),a=xn(o),l=a.map(u=>Dn(u,t)),c=l.length>0?l.join("|"):"(?:)";if(r==="@")s+=`(?:${c})`;else if(r==="*")s+=`(?:${c})*`;else if(r==="+")s+=`(?:${c})+`;else if(r==="?")s+=`(?:${c})?`;else if(r==="!")if(i<e.length-1){let f=a.map(h=>In(h,t));if(f.every(h=>h!==null)&&f.every(h=>h===f[0])&&f[0]!==null){let h=f[0];if(h===0)s+="(?:.+)";else{let m=[];h>0&&m.push(`.{0,${h-1}}`),m.push(`.{${h+1},}`),m.push(`(?!(?:${c})).{${h}}`),s+=`(?:${m.join("|")})`}}else s+=`(?:(?!(?:${c})).)*?`}else s+=`(?!(?:${c})$).*`;n=i;continue}}if(r==="\\")if(n+1<e.length){let i=e[n+1];/[\\^$.|+(){}[\]*?]/.test(i)?s+=`\\${i}`:s+=i,n++}else s+="\\\\";else if(r==="*")s+=".*";else if(r==="?")s+=".";else if(r==="["){let i=e.indexOf("]",n+1);i!==-1?(s+=e.slice(n,i+1),n=i):s+="\\["}else/[\\^$.|+(){}]/.test(r)?s+=`\\${r}`:s+=r}return s}function Tn(e,t){let s=1,n=t+1;for(;n<e.length&&s>0;){let r=e[n];if(r==="\\"){n+=2;continue}if(r==="(")s++;else if(r===")"&&(s--,s===0))return n;n++}return-1}function xn(e){let t=[],s="",n=0,r=0;for(;r<e.length;){let i=e[r];if(i==="\\"){s+=i,r+1<e.length?(s+=e[r+1],r+=2):r++;continue}i==="("?(n++,s+=i):i===")"?(n--,s+=i):i==="|"&&n===0?(t.push(s),s=""):s+=i,r++}return t.push(s),t}function In(e,t){let s=0,n=0;for(;n<e.length;){let r=e[n];if(t&&(r==="@"||r==="*"||r==="+"||r==="?"||r==="!")&&n+1<e.length&&e[n+1]==="("){let i=Tn(e,n+1);if(i!==-1){if(r==="@"){let o=e.slice(n+2,i),l=xn(o).map(c=>In(c,t));if(l.every(c=>c!==null)&&l.every(c=>c===l[0])){s+=l[0],n=i+1;continue}return null}return null}}if(r==="*")return null;if(r==="?"){s+=1,n++;continue}if(r==="["){let i=e.indexOf("]",n+1);if(i!==-1){s+=1,n=i+1;continue}s+=1,n++;continue}if(r==="\\"){s+=1,n+=2;continue}s+=1,n++}return s}function ns(e,t){let n=new Map([["errexit",()=>e.state.options.errexit===!0],["nounset",()=>e.state.options.nounset===!0],["pipefail",()=>e.state.options.pipefail===!0],["xtrace",()=>e.state.options.xtrace===!0],["e",()=>e.state.options.errexit===!0],["u",()=>e.state.options.nounset===!0],["x",()=>e.state.options.xtrace===!0]]).get(t);return n?n():!1}async function kn(e,t){if(t=t.trim(),t==="")return 0;if(/^[+-]?(\d+#[a-zA-Z0-9@_]+|0[xX][0-9a-fA-F]+|0[0-7]+|\d+)$/.test(t))return Nn(t);try{let s=new W,n=q(s,t);return await z(e,n.expression)}catch{return Nn(t)}}function fi(e,t){let s=0;for(let n of e){let r;if(n>="0"&&n<="9")r=n.charCodeAt(0)-48;else if(n>="a"&&n<="z")r=n.charCodeAt(0)-97+10;else if(n>="A"&&n<="Z")r=n.charCodeAt(0)-65+36;else if(n==="@")r=62;else if(n==="_")r=63;else return Number.NaN;if(r>=t)return Number.NaN;s=s*t+r}return s}function Nn(e){if(e=e.trim(),e==="")return 0;let t=!1;e.startsWith("-")?(t=!0,e=e.slice(1)):e.startsWith("+")&&(e=e.slice(1));let s,n=e.match(/^(\d+)#([a-zA-Z0-9@_]+)$/);if(n){let r=Number.parseInt(n[1],10);r>=2&&r<=64?s=fi(n[2],r):s=0}else/^0[xX][0-9a-fA-F]+$/.test(e)?s=Number.parseInt(e,16):/^0[0-7]+$/.test(e)?s=Number.parseInt(e,8):s=Number.parseInt(e,10);return Number.isNaN(s)&&(s=0),t?-s:s}function At(e){if(e=e.trim(),e==="")return{value:0,valid:!0};let t=!1;if(e.startsWith("-")?(t=!0,e=e.slice(1)):e.startsWith("+")&&(e=e.slice(1)),!/^\d+$/.test(e))return{value:0,valid:!1};let s=Number.parseInt(e,10);return Number.isNaN(s)?{value:0,valid:!1}:{value:t?-s:s,valid:!0}}function di(e){let t="",s=0;for(;s<e.length;)if(e[s]==="\\"&&s+1<e.length)t+=e[s]+e[s+1],s+=2;else if(e[s]==="["){let n=hi(e,s);t+=n.converted,s=n.endIndex}else t+=e[s],s++;return t}function hi(e,t){let s=t+1,n="[";s<e.length&&(e[s]==="^"||e[s]==="!")&&(n+="^",s++);let r=!1;s<e.length&&e[s]==="]"&&(r=!0,s++);let i=!1;s<e.length&&e[s]==="["&&s+1<e.length&&e[s+1]!==":"&&(i=!0,s++);let o="",a=!1;for(;s<e.length;){let l=e[s];if(l==="]"){a=!0,s++;break}if(l==="["&&s+1<e.length&&e[s+1]===":"){let c=e.indexOf(":]",s+2);if(c!==-1){let u=e.slice(s+2,c);o+=pi(u),s=c+2;continue}}if(l==="["&&s+1<e.length){let c=e[s+1];if(c==="."||c==="="){let u=`${c}]`,f=e.indexOf(u,s+2);if(f!==-1){let d=e.slice(s+2,f);o+=d,s=f+2;continue}}}if(l==="\\"&&s+1<e.length){o+=l+e[s+1],s+=2;continue}o+=l,s++}return a?(r&&(n+="\\]"),i&&(n+="\\["),n+=o,n+="]",{converted:n,endIndex:s}):{converted:"\\[",endIndex:t+1}}function pi(e){return new Map([["alnum","a-zA-Z0-9"],["alpha","a-zA-Z"],["ascii","\\x00-\\x7F"],["blank"," \\t"],["cntrl","\\x00-\\x1F\\x7F"],["digit","0-9"],["graph","!-~"],["lower","a-z"],["print"," -~"],["punct","!-/:-@\\[-`{-~"],["space"," \\t\\n\\r\\f\\v"],["upper","A-Z"],["word","a-zA-Z0-9_"],["xdigit","0-9A-Fa-f"]]).get(e)??""}function Ee(e){let t=[],s="",n=!1,r=!1,i=!1,o=!1;for(let a of e){if(i){s+=a,i=!1,o=!0;continue}if(a==="\\"){i=!0;continue}if(a==="'"&&!r){n||(o=!0),n=!n;continue}if(a==='"'&&!n){r||(o=!0),r=!r;continue}if((a===" "||a===" "||a===`
|
|
15
|
+
`)&&!n&&!r){o&&(t.push(s),s="",o=!1);continue}s+=a,o=!0}return o&&t.push(s),t}function _t(e){let t=[],s=0;for(;s<e.length;){for(;s<e.length&&/\s/.test(e[s]);)s++;if(s>=e.length)break;if(e[s]!=="["){s++;continue}s++;let n="";if(e[s]==="'"||e[s]==='"'){let i=e[s];for(s++;s<e.length&&e[s]!==i;)n+=e[s],s++;e[s]===i&&s++}else for(;s<e.length&&e[s]!=="]"&&e[s]!=="=";)n+=e[s],s++;for(;s<e.length&&e[s]!=="]";)s++;if(e[s]==="]"&&s++,e[s]!=="=")continue;s++;let r="";if(e[s]==="'"||e[s]==='"'){let i=e[s];for(s++;s<e.length&&e[s]!==i;)e[s]==="\\"&&s+1<e.length&&s++,r+=e[s],s++;e[s]===i&&s++}else for(;s<e.length&&!/\s/.test(e[s]);)r+=e[s],s++;t.push([n,r])}return t}function Rn(e){let t=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(t)return{name:t[1],isArray:!0,arrayElements:Ee(t[2])};let s=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([^\]]+)\]=(.*)$/s);if(s)return{name:s[1],isArray:!1,arrayIndex:s[2],value:s[3]};if(e.includes("=")){let n=e.indexOf("=");return{name:e.slice(0,n),isArray:!1,value:e.slice(n+1)}}return{name:e,isArray:!1}}async function mi(e,t){try{let s=new W,n=q(s,t);return await z(e,n.expression)}catch{let s=parseInt(t,10);return Number.isNaN(s)?0:s}}async function Ln(e,t,s={}){let{name:n,isArray:r,arrayElements:i,value:o,arrayIndex:a}=t,{makeReadonly:l=!1,checkReadonly:c=!0}=s;if(c){let u=K(e,n);if(u)return u}if(r&&i){for(let u=0;u<i.length;u++)e.state.env.set(`${n}_${u}`,i[u]);e.state.env.set(`${n}__length`,String(i.length))}else if(a!==void 0&&o!==void 0){let u=await mi(e,a);e.state.env.set(`${n}_${u}`,o);let f=parseInt(e.state.env.get(`${n}__length`)??"0",10);u>=f&&e.state.env.set(`${n}__length`,String(u+1))}else o!==void 0&&e.state.env.set(n,o);return l&&re(e,n),null}function De(e,t){e.state.localVarDepth=e.state.localVarDepth||new Map,e.state.localVarDepth.set(t,e.state.callDepth)}function ze(e,t){return e.state.localVarDepth?.get(t)}function Ct(e,t){e.state.localVarDepth?.delete(t)}function Fn(e,t,s){e.state.localVarStack=e.state.localVarStack||new Map;let n=e.state.localVarStack.get(t)||[];n.push({value:s,scopeIndex:e.state.localScopes.length-1}),e.state.localVarStack.set(t,n)}function Pt(e,t){let s=e.state.localVarStack?.get(t);if(!(!s||s.length===0))return s.pop()}function Mn(e,t){if(e.state.localVarStack)for(let[s,n]of e.state.localVarStack.entries()){for(;n.length>0&&n[n.length-1].scopeIndex===t;)n.pop();n.length===0&&e.state.localVarStack.delete(s)}}var rs=new Set([":",".","break","continue","eval","exec","exit","export","readonly","return","set","shift","trap","unset"]);function Wn(e){return rs.has(e)}var is=new Set(["if","then","else","elif","fi","case","esac","for","select","while","until","do","done","in","function","{","}","time","[[","]]","!"]),Xe=new Set([":","true","false","cd","export","unset","exit","local","set","break","continue","return","eval","shift","getopts","compgen","complete","compopt","pushd","popd","dirs","source",".","read","mapfile","readarray","declare","typeset","readonly","let","command","shopt","exec","test","[","echo","printf","pwd","alias","unalias","type","hash","ulimit","umask","trap","times","wait","kill","jobs","fg","bg","disown","suspend","fc","history","help","enable","builtin","caller"]);async function Ie(e,t,s,n){try{if((await e.fs.stat(t)).isDirectory)return`bash: ${s}: Is a directory
|
|
16
16
|
`;if(n.checkNoclobber&&e.state.options.noclobber&&!n.isClobber&&s!=="/dev/null")return`bash: ${s}: cannot overwrite existing file
|
|
17
|
-
`}catch{}return null}function X(e){for(let t=0;t<e.length;t++)if(e.charCodeAt(t)>255)return"utf8";return"binary"}function
|
|
18
|
-
`};s.set(n,await
|
|
19
|
-
`);else if(s.operator==="<"||s.operator==="<>")try{let i=e.fs.resolvePath(e.state.cwd,r),
|
|
20
|
-
`,1)}}}return null}async function
|
|
21
|
-
`,1);if(e.state.options.noclobber&&!a
|
|
17
|
+
`}catch{}return null}function X(e){for(let t=0;t<e.length;t++)if(e.charCodeAt(t)>255)return"utf8";return"binary"}function yi(e){if(!e.startsWith("__rw__:"))return null;let t=e.slice(7),s=t.indexOf(":");if(s===-1)return null;let n=Number.parseInt(t.slice(0,s),10);if(Number.isNaN(n)||n<0)return null;let r=s+1,i=t.slice(r,r+n),o=r+n+1,a=t.slice(o),l=a.indexOf(":");if(l===-1)return null;let c=Number.parseInt(a.slice(0,l),10);if(Number.isNaN(c)||c<0)return null;let u=a.slice(l+1);return{path:i,position:c,content:u}}async function Vn(e,t){let s=new Map;for(let n=0;n<t.length;n++){let r=t[n];if(r.target.type==="HereDoc")continue;if(r.operator===">&"||r.operator==="<&"){if(qt(e,r.target))return{targets:s,error:`bash: $@: ambiguous redirect
|
|
18
|
+
`};s.set(n,await x(e,r.target))}else{let o=await ft(e,r.target);if("error"in o)return{targets:s,error:o.error};s.set(n,o.target)}}return{targets:s}}function gi(e){e.state.nextFd===void 0&&(e.state.nextFd=10);let t=e.state.nextFd;return e.state.nextFd++,t}async function kt(e,t){for(let s of t){if(!s.fdVariable)continue;if(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),(s.operator===">&"||s.operator==="<&")&&s.target.type==="Word"&&await x(e,s.target)==="-"){let i=e.state.env.get(s.fdVariable);if(i!==void 0){let o=Number.parseInt(i,10);Number.isNaN(o)||e.state.fileDescriptors.delete(o)}continue}let n=gi(e);if(e.state.env.set(s.fdVariable,String(n)),s.target.type==="Word"){let r=await x(e,s.target);if(s.operator===">&"||s.operator==="<&"){let i=Number.parseInt(r,10);if(!Number.isNaN(i)){let o=e.state.fileDescriptors.get(i);o!==void 0&&e.state.fileDescriptors.set(n,o);continue}}if(s.operator===">"||s.operator===">>"||s.operator===">|"||s.operator==="&>"||s.operator==="&>>"){let i=e.fs.resolvePath(e.state.cwd,r);(s.operator===">"||s.operator===">|"||s.operator==="&>")&&await e.fs.writeFile(i,"","binary"),e.state.fileDescriptors.set(n,`__file__:${i}`)}else if(s.operator==="<<<")e.state.fileDescriptors.set(n,`${r}
|
|
19
|
+
`);else if(s.operator==="<"||s.operator==="<>")try{let i=e.fs.resolvePath(e.state.cwd,r),o=await e.fs.readFile(i);e.state.fileDescriptors.set(n,o)}catch{return _("",`bash: ${r}: No such file or directory
|
|
20
|
+
`,1)}}}return null}async function $e(e,t){for(let s of t){if(s.target.type==="HereDoc")continue;let n=s.operator===">&";if(s.operator!==">"&&s.operator!==">|"&&s.operator!=="&>"&&!n)continue;let r;if(n){if(r=await x(e,s.target),r==="-"||!Number.isNaN(Number.parseInt(r,10))||s.fd!=null)continue}else{let a=await ft(e,s.target);if("error"in a)return _("",a.error,1);r=a.target}let i=e.fs.resolvePath(e.state.cwd,r),o=s.operator===">|";try{let a=await e.fs.stat(i);if(a.isDirectory)return _("",`bash: ${r}: Is a directory
|
|
21
|
+
`,1);if(e.state.options.noclobber&&!o&&!a.isDirectory&&r!=="/dev/null")return _("",`bash: ${r}: cannot overwrite existing file
|
|
22
22
|
`,1)}catch{}if(r!=="/dev/null"&&r!=="/dev/stdout"&&r!=="/dev/stderr"&&r!=="/dev/full"&&await e.fs.writeFile(i,"","binary"),r==="/dev/full")return _("",`bash: /dev/full: No space left on device
|
|
23
|
-
`,1)}return null}async function B(e,t,s,n){let{stdout:r,stderr:i,exitCode:
|
|
24
|
-
`,
|
|
25
|
-
`,
|
|
26
|
-
`,
|
|
27
|
-
`,
|
|
28
|
-
`,
|
|
29
|
-
`,
|
|
30
|
-
`,
|
|
31
|
-
`,
|
|
32
|
-
`,
|
|
33
|
-
`,
|
|
34
|
-
`;throw new
|
|
35
|
-
`).map(
|
|
36
|
-
`)),(n.fd??0)===0&&(s=i)}else if(n.operator==="<<<"&&n.target.type==="Word")s=`${await
|
|
37
|
-
`;else if(n.operator==="<"&&n.target.type==="Word"){let r=await
|
|
38
|
-
`,2);let
|
|
39
|
-
`,2);s.push(
|
|
23
|
+
`,1)}return null}async function B(e,t,s,n){let{stdout:r,stderr:i,exitCode:o}=t;for(let c=0;c<s.length;c++){let u=s[c];if(u.target.type==="HereDoc")continue;let f,d=n?.get(c);if(d!==void 0)f=d;else if(u.operator===">&"||u.operator==="<&"){if(qt(e,u.target)){i+=`bash: $@: ambiguous redirect
|
|
24
|
+
`,o=1,r="";continue}f=await x(e,u.target)}else{let m=await ft(e,u.target);if("error"in m){i+=m.error,o=1,r="";continue}f=m.target}if(!u.fdVariable)switch(u.operator){case">":case">|":{let h=u.fd??1,m=u.operator===">|";if(h===1){if(f==="/dev/stdout")break;if(f==="/dev/stderr"){i+=r,r="";break}if(f==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
25
|
+
`,o=1,r="";break}let p=e.fs.resolvePath(e.state.cwd,f),g=await Ie(e,p,f,{checkNoclobber:!0,isClobber:m});if(g){i+=g,o=1,r="";break}await e.fs.writeFile(p,r,X(r)),r=""}else if(h===2){if(f==="/dev/stderr")break;if(f==="/dev/stdout"){r+=i,i="";break}if(f==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
26
|
+
`,o=1;break}if(f==="/dev/null")i="";else{let p=e.fs.resolvePath(e.state.cwd,f),g=await Ie(e,p,f,{checkNoclobber:!0,isClobber:m});if(g){i+=g,o=1;break}await e.fs.writeFile(p,i,X(i)),i=""}}break}case">>":{let h=u.fd??1;if(h===1){if(f==="/dev/stdout")break;if(f==="/dev/stderr"){i+=r,r="";break}if(f==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
27
|
+
`,o=1,r="";break}let m=e.fs.resolvePath(e.state.cwd,f),p=await Ie(e,m,f,{});if(p){i+=p,o=1,r="";break}await e.fs.appendFile(m,r,X(r)),r=""}else if(h===2){if(f==="/dev/stderr")break;if(f==="/dev/stdout"){r+=i,i="";break}if(f==="/dev/full"){i+=`bash: echo: write error: No space left on device
|
|
28
|
+
`,o=1;break}let m=e.fs.resolvePath(e.state.cwd,f),p=await Ie(e,m,f,{});if(p){i+=p,o=1;break}await e.fs.appendFile(m,i,X(i)),i=""}break}case">&":case"<&":{let h=u.fd??1;if(f==="-")break;if(f.endsWith("-")){let m=f.slice(0,-1),p=Number.parseInt(m,10);if(!Number.isNaN(p)){let g=e.state.fileDescriptors?.get(p);g!==void 0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(h,g),p>=3&&e.state.fileDescriptors?.delete(p)):p===1||p===2?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(h,`__dupout__:${p}`)):p===0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(h,`__dupin__:${p}`)):p>=3&&(i+=`bash: ${p}: Bad file descriptor
|
|
29
|
+
`,o=1)}break}if(f==="2"||f==="&2")h===1&&(i+=r,r="");else if(f==="1"||f==="&1")r+=i,i="";else{let m=Number.parseInt(f,10);if(Number.isNaN(m)){if(u.operator===">&"){let p=e.fs.resolvePath(e.state.cwd,f),g=await Ie(e,p,f,{checkNoclobber:!0});if(g){i=g,o=1,r="";break}if(u.fd==null){let b=r+i;await e.fs.writeFile(p,b,X(b)),r="",i=""}else h===1?(await e.fs.writeFile(p,r,X(r)),r=""):h===2&&(await e.fs.writeFile(p,i,X(i)),i="")}}else{let p=e.state.fileDescriptors?.get(m);if(p?.startsWith("__file__:")){let g=p.slice(9);h===1?(await e.fs.appendFile(g,r,X(r)),r=""):h===2&&(await e.fs.appendFile(g,i,X(i)),i="")}else if(p?.startsWith("__rw__:")){let g=yi(p);g&&(h===1?(await e.fs.appendFile(g.path,r,X(r)),r=""):h===2&&(await e.fs.appendFile(g.path,i,X(i)),i=""))}else if(p?.startsWith("__dupout__:")){let g=Number.parseInt(p.slice(11),10);if(g!==1)if(g===2)h===1&&(i+=r,r="");else{let b=e.state.fileDescriptors?.get(g);if(b?.startsWith("__file__:")){let E=b.slice(9);h===1?(await e.fs.appendFile(E,r,X(r)),r=""):h===2&&(await e.fs.appendFile(E,i,X(i)),i="")}}}else p?.startsWith("__dupin__:")?(i+=`bash: ${m}: Bad file descriptor
|
|
30
|
+
`,o=1,r=""):m>=3&&(i+=`bash: ${m}: Bad file descriptor
|
|
31
|
+
`,o=1,r="")}}break}case"&>":{if(f==="/dev/full"){i=`bash: echo: write error: No space left on device
|
|
32
|
+
`,o=1,r="";break}let h=e.fs.resolvePath(e.state.cwd,f),m=await Ie(e,h,f,{checkNoclobber:!0});if(m){i=m,o=1,r="";break}let p=r+i;await e.fs.writeFile(h,p,X(p)),r="",i="";break}case"&>>":{if(f==="/dev/full"){i=`bash: echo: write error: No space left on device
|
|
33
|
+
`,o=1,r="";break}let h=e.fs.resolvePath(e.state.cwd,f),m=await Ie(e,h,f,{});if(m){i=m,o=1,r="";break}let p=r+i;await e.fs.appendFile(h,p,X(p)),r="",i="";break}}}let a=e.state.fileDescriptors?.get(1);if(a){if(a==="__dupout__:2")i+=r,r="";else if(a.startsWith("__file__:")){let c=a.slice(9);await e.fs.appendFile(c,r,X(r)),r=""}else if(a.startsWith("__file_append__:")){let c=a.slice(16);await e.fs.appendFile(c,r,X(r)),r=""}}let l=e.state.fileDescriptors?.get(2);if(l){if(l==="__dupout__:1")r+=i,i="";else if(l.startsWith("__file__:")){let c=l.slice(9);await e.fs.appendFile(c,i,X(i)),i=""}else if(l.startsWith("__file_append__:")){let c=l.slice(16);await e.fs.appendFile(c,i,X(i)),i=""}}return _(r,i,o)}function zn(e,t){if(e.state.options.posix&&rs.has(t.name)){let n=`bash: line ${e.state.currentLine}: \`${t.name}': is a special builtin
|
|
34
|
+
`;throw new V(2,"",n)}let s={...t,sourceFile:t.sourceFile??e.state.currentSource??"main"};return e.state.functions.set(t.name,s),L}async function wi(e,t){let s="";for(let n of t)if((n.operator==="<<"||n.operator==="<<-")&&n.target.type==="HereDoc"){let r=n.target,i=await x(e,r.content);r.stripTabs&&(i=i.split(`
|
|
35
|
+
`).map(a=>a.replace(/^\t+/,"")).join(`
|
|
36
|
+
`)),(n.fd??0)===0&&(s=i)}else if(n.operator==="<<<"&&n.target.type==="Word")s=`${await x(e,n.target)}
|
|
37
|
+
`;else if(n.operator==="<"&&n.target.type==="Word"){let r=await x(e,n.target),i=e.fs.resolvePath(e.state.cwd,r);try{s=await e.fs.readFile(i)}catch{}}return s}async function Nt(e,t,s,n="",r){e.state.callDepth++,e.state.callDepth>e.limits.maxCallDepth&&(e.state.callDepth--,Ae(`${t.name}: maximum recursion depth (${e.limits.maxCallDepth}) exceeded, increase executionLimits.maxCallDepth`,"recursion")),e.state.funcNameStack||(e.state.funcNameStack=[]),e.state.callLineStack||(e.state.callLineStack=[]),e.state.sourceStack||(e.state.sourceStack=[]),e.state.funcNameStack.unshift(t.name),e.state.callLineStack.unshift(r??e.state.currentLine),e.state.sourceStack.unshift(t.sourceFile??"main"),e.state.localScopes.push(new Map),e.state.localExportedVars||(e.state.localExportedVars=[]),e.state.localExportedVars.push(new Set);let i=new Map;for(let c=0;c<s.length;c++)i.set(String(c+1),e.state.env.get(String(c+1))),e.state.env.set(String(c+1),s[c]);i.set("@",e.state.env.get("@")),i.set("#",e.state.env.get("#")),e.state.env.set("@",s.join(" ")),e.state.env.set("#",String(s.length));let o=()=>{let c=e.state.localScopes.length-1,u=e.state.localScopes.pop();if(u)for(let[f,d]of u)d===void 0?e.state.env.delete(f):e.state.env.set(f,d);if(Mn(e,c),e.state.fullyUnsetLocals)for(let[f,d]of e.state.fullyUnsetLocals.entries())d===c&&e.state.fullyUnsetLocals.delete(f);if(e.state.localExportedVars&&e.state.localExportedVars.length>0){let f=e.state.localExportedVars.pop();if(f)for(let d of f)e.state.exportedVars?.delete(d)}for(let[f,d]of i)d===void 0?e.state.env.delete(f):e.state.env.set(f,d);e.state.funcNameStack?.shift(),e.state.callLineStack?.shift(),e.state.sourceStack?.shift(),e.state.callDepth--},{targets:a,error:l}=await Vn(e,t.redirections);if(l)return o(),_("",l,1);try{let c=await wi(e,t.redirections),u=n||c,f=await e.executeCommand(t.body,u);return o(),B(e,f,t.redirections,a)}catch(c){if(o(),c instanceof ne){let u=_(c.stdout,c.stderr,c.exitCode);return B(e,u,t.redirections,a)}throw c}}var jn=["!","[[","]]","case","do","done","elif","else","esac","fi","for","function","if","in","then","time","until","while","{","}"],as=[".",":","[","alias","bg","bind","break","builtin","caller","cd","command","compgen","complete","compopt","continue","declare","dirs","disown","echo","enable","eval","exec","exit","export","false","fc","fg","getopts","hash","help","history","jobs","kill","let","local","logout","mapfile","popd","printf","pushd","pwd","read","readarray","readonly","return","set","shift","shopt","source","suspend","test","times","trap","true","type","typeset","ulimit","umask","unalias","unset","wait"],vi=["autocd","assoc_expand_once","cdable_vars","cdspell","checkhash","checkjobs","checkwinsize","cmdhist","compat31","compat32","compat40","compat41","compat42","compat43","compat44","complete_fullquote","direxpand","dirspell","dotglob","execfail","expand_aliases","extdebug","extglob","extquote","failglob","force_fignore","globasciiranges","globstar","gnu_errfmt","histappend","histreedit","histverify","hostcomplete","huponexit","inherit_errexit","interactive_comments","lastpipe","lithist","localvar_inherit","localvar_unset","login_shell","mailwarn","no_empty_cmd_completion","nocaseglob","nocasematch","nullglob","progcomp","progcomp_alias","promptvars","restricted_shell","shift_verbose","sourcepath","xpg_echo"],bi=as;async function ls(e,t){let s=[],n=null,r="",i="",o=null,a=!1,l=!1,c=!1,u=null,f=null,d=null,h=[],m=["alias","arrayvar","binding","builtin","command","directory","disabled","enabled","export","file","function","group","helptopic","hostname","job","keyword","running","service","setopt","shopt","signal","stopped","user","variable"];for(let y=0;y<t.length;y++){let w=t[y];if(w==="-v")s.push("variable");else if(w==="-e")s.push("export");else if(w==="-f")s.push("file");else if(w==="-d")s.push("directory");else if(w==="-k")s.push("keyword");else if(w==="-A"){if(y++,y>=t.length)return S(`compgen: -A: option requires an argument
|
|
38
|
+
`,2);let v=t[y];if(!m.includes(v))return S(`compgen: ${v}: invalid action name
|
|
39
|
+
`,2);s.push(v)}else if(w==="-W"){if(y++,y>=t.length)return S(`compgen: -W: option requires an argument
|
|
40
40
|
`,2);n=t[y]}else if(w==="-P"){if(y++,y>=t.length)return S(`compgen: -P: option requires an argument
|
|
41
41
|
`,2);r=t[y]}else if(w==="-S"){if(y++,y>=t.length)return S(`compgen: -S: option requires an argument
|
|
42
42
|
`,2);i=t[y]}else if(w==="-o"){if(y++,y>=t.length)return S(`compgen: -o: option requires an argument
|
|
43
|
-
`,2);let
|
|
43
|
+
`,2);let v=t[y];if(v==="plusdirs")a=!0;else if(v==="dirnames")l=!0;else if(v==="default")c=!0;else if(!(v==="filenames"||v==="nospace"||v==="bashdefault"||v==="noquote"))return S(`compgen: ${v}: invalid option name
|
|
44
44
|
`,2)}else if(w==="-F"){if(y++,y>=t.length)return S(`compgen: -F: option requires an argument
|
|
45
|
-
`,2);
|
|
45
|
+
`,2);f=t[y]}else if(w==="-C"){if(y++,y>=t.length)return S(`compgen: -C: option requires an argument
|
|
46
46
|
`,2);d=t[y]}else if(w==="-X"){if(y++,y>=t.length)return S(`compgen: -X: option requires an argument
|
|
47
|
-
`,2);
|
|
48
|
-
`,2)}else if(w==="--"){h.push(...t.slice(y+1));break}else w.startsWith("-")||h.push(w)}
|
|
49
|
-
`);for(let C of
|
|
50
|
-
`,2);throw y}let
|
|
51
|
-
`),
|
|
52
|
-
`:"");return
|
|
53
|
-
`;if(s.length===0)return[t];let n=new Set(s.split("")),r=[],i="",
|
|
54
|
-
`,2);i=t[
|
|
55
|
-
`,2);
|
|
56
|
-
`,2);let h=t[
|
|
57
|
-
`,2);
|
|
58
|
-
`,2);
|
|
59
|
-
`,2);
|
|
60
|
-
`,2)}else if(d==="-P"){if(
|
|
61
|
-
`,2)}else if(d==="-S"){if(
|
|
62
|
-
`,2)}else if(d==="-X"){if(
|
|
63
|
-
`,2)}else if(d==="--"){
|
|
64
|
-
`,2);if(r){let
|
|
65
|
-
`;return _("",i,1)}return
|
|
47
|
+
`,2);u=t[y]}else if(w==="-G"){if(y++,y>=t.length)return S(`compgen: -G: option requires an argument
|
|
48
|
+
`,2)}else if(w==="--"){h.push(...t.slice(y+1));break}else w.startsWith("-")||h.push(w)}o=h[0]??null;let p=[];if(l){let y=await os(e,o);p.push(...y)}if(c){let y=await Bn(e,o);p.push(...y)}for(let y of s)if(y==="variable"){let w=Ei(e,o);p.push(...w)}else if(y==="export"){let w=$i(e,o);p.push(...w)}else if(y==="function"){let w=Si(e,o);p.push(...w)}else if(y==="builtin"){let w=Ai(o);p.push(...w)}else if(y==="keyword"){let w=_i(o);p.push(...w)}else if(y==="alias"){let w=Ci(e,o);p.push(...w)}else if(y==="shopt"){let w=Pi(o);p.push(...w)}else if(y==="helptopic"){let w=ki(o);p.push(...w)}else if(y==="directory"){let w=await os(e,o);p.push(...w)}else if(y==="file"){let w=await Bn(e,o);p.push(...w)}else if(y==="user"){let w=Ni(o);p.push(...w)}else if(y==="command"){let w=await Oi(e,o);p.push(...w)}if(n!==null)try{let y=await Di(e,n),w=Ti(e,y);for(let v of w)(o===null||v.startsWith(o))&&p.push(v)}catch{return _("","",1)}if(a){let y=await os(e,o);for(let w of y)p.includes(w)||p.push(w)}let g="";if(f!==null){let y=e.state.functions.get(f);if(y){let w=new Map;w.set("COMP_WORDS__length",e.state.env.get("COMP_WORDS__length")),e.state.env.set("COMP_WORDS__length","0"),w.set("COMP_CWORD",e.state.env.get("COMP_CWORD")),e.state.env.set("COMP_CWORD","-1"),w.set("COMP_LINE",e.state.env.get("COMP_LINE")),e.state.env.set("COMP_LINE",""),w.set("COMP_POINT",e.state.env.get("COMP_POINT")),e.state.env.set("COMP_POINT","0");let v=new Map;for(let D of e.state.env.keys())(D==="COMPREPLY"||D.startsWith("COMPREPLY_")||D==="COMPREPLY__length")&&(v.set(D,e.state.env.get(D)),e.state.env.delete(D));let C=["compgen",h[0]??"",""];try{let D=await Nt(e,y,C,"");if(D.exitCode!==0)return Be(e,w),Be(e,v),_("",D.stderr,1);g=D.stdout;let T=xi(e);p.push(...T)}catch{return Be(e,w),Be(e,v),_("","",1)}Be(e,w),Be(e,v)}}if(d!==null)try{let y=we(d),w=await e.executeScript(y);if(w.exitCode!==0)return _("",w.stderr,w.exitCode);if(w.stdout){let v=w.stdout.split(`
|
|
49
|
+
`);for(let C of v)C.length>0&&p.push(C)}}catch(y){if(y.name==="ParseException")return S(`compgen: -C: ${y.message}
|
|
50
|
+
`,2);throw y}let b=p;if(u!==null){let y=u.startsWith("!"),w=y?u.slice(1):u;b=p.filter(v=>{let C=Ve(v,w,!1,!0);return y?C:!C})}if(b.length===0&&o!==null)return _(g,"",1);let E=b.map(y=>`${r}${y}${i}`).join(`
|
|
51
|
+
`),k=g+(E?`${E}
|
|
52
|
+
`:"");return F(k)}function Ei(e,t){let s=new Set;for(let r of e.state.env.keys()){if(r.includes("_")&&/^[a-zA-Z_][a-zA-Z0-9_]*_\d+$/.test(r)||r.endsWith("__length"))continue;let i=r.split("_")[0];/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)?s.add(r):i&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(i)&&e.state.env.has(`${i}__length`)&&s.add(i)}let n=Array.from(s);return t!==null&&(n=n.filter(r=>r.startsWith(t))),n.sort()}function $i(e,t){let s=e.state.exportedVars??new Set,n=Array.from(s);return t!==null&&(n=n.filter(r=>r.startsWith(t))),n=n.filter(r=>r.includes("_")&&/^[a-zA-Z_][a-zA-Z0-9_]*_\d+$/.test(r)||r.endsWith("__length")?!1:e.state.env.has(r)),n.sort()}function Si(e,t){let s=Array.from(e.state.functions.keys());return t!==null&&(s=s.filter(n=>n.startsWith(t))),s.sort()}function Ai(e){let t=[...as];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}function _i(e){let t=[...jn];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}function Ci(e,t){let s=[];for(let r of e.state.env.keys())if(r.startsWith("BASH_ALIAS_")){let i=r.slice(11);s.push(i)}let n=s;return t!==null&&(n=n.filter(r=>r.startsWith(t))),n.sort()}function Pi(e){let t=[...vi];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}function ki(e){let t=[...bi];return e!==null&&(t=t.filter(s=>s.startsWith(e))),t.sort()}async function os(e,t){let s=[];try{let n=e.state.cwd,r=t??"";if(t){let o=t.lastIndexOf("/");if(o!==-1){let a=t.slice(0,o)||"/";r=t.slice(o+1),a.startsWith("/")?n=a:n=`${e.state.cwd}/${a}`}}let i=await e.fs.readdir(n);for(let o of i){let a=`${n}/${o}`;try{if((await e.fs.stat(a)).isDirectory&&(!r||o.startsWith(r)))if(t?.includes("/")){let c=t.lastIndexOf("/"),u=t.slice(0,c+1);s.push(u+o)}else s.push(o)}catch{}}}catch{}return s.sort()}async function Bn(e,t){let s=[];try{let n=e.state.cwd,r=t??"";if(t){let o=t.lastIndexOf("/");if(o!==-1){let a=t.slice(0,o)||"/";r=t.slice(o+1),a.startsWith("/")?n=a:n=`${e.state.cwd}/${a}`}}let i=await e.fs.readdir(n);for(let o of i)if(!r||o.startsWith(r))if(t?.includes("/")){let a=t.lastIndexOf("/"),l=t.slice(0,a+1);s.push(l+o)}else s.push(o)}catch{}return s.sort()}function Ni(e){return["root","nobody"]}async function Oi(e,t){let s=new Set;for(let i of as)s.add(i);for(let i of e.state.functions.keys())s.add(i);for(let i of e.state.env.keys())i.startsWith("BASH_ALIAS_")&&s.add(i.slice(11));for(let i of jn)s.add(i);let n=e.state.env.get("PATH")??"/usr/bin:/bin";for(let i of n.split(":"))if(i)try{let o=await e.fs.readdir(i);for(let a of o)s.add(a)}catch{}let r=Array.from(s);return t!==null&&(r=r.filter(i=>i.startsWith(t))),r.sort()}async function Di(e,t){let n=new W().parseWordFromString(t,!1,!1);return await x(e,n)}function Ti(e,t){let s=e.state.env.get("IFS")??`
|
|
53
|
+
`;if(s.length===0)return[t];let n=new Set(s.split("")),r=[],i="",o=0;for(;o<t.length;){let a=t[o];if(a==="\\"&&o+1<t.length){let l=t[o+1];i+=l,o+=2}else n.has(a)?(i.length>0&&(r.push(i),i=""),o++):(i+=a,o++)}return i.length>0&&r.push(i),r}function Be(e,t){for(let[s,n]of t)n===void 0?e.state.env.delete(s):e.state.env.set(s,n)}function xi(e){let t=[];if(e.state.env.get("COMPREPLY__length")!==void 0){let r=ye(e,"COMPREPLY");for(let[,i]of r)t.push(i)}else{let r=e.state.env.get("COMPREPLY");r!==void 0&&t.push(r)}return t}var Ii=["bashdefault","default","dirnames","filenames","noquote","nosort","nospace","plusdirs"];function us(e,t){e.state.completionSpecs||(e.state.completionSpecs=new Map);let s=!1,n=!1,r=!1,i,o,a,l=[],c=[],u=[];for(let f=0;f<t.length;f++){let d=t[f];if(d==="-p")s=!0;else if(d==="-r")n=!0;else if(d==="-D")r=!0;else if(d==="-W"){if(f++,f>=t.length)return S(`complete: -W: option requires an argument
|
|
54
|
+
`,2);i=t[f]}else if(d==="-F"){if(f++,f>=t.length)return S(`complete: -F: option requires an argument
|
|
55
|
+
`,2);o=t[f]}else if(d==="-o"){if(f++,f>=t.length)return S(`complete: -o: option requires an argument
|
|
56
|
+
`,2);let h=t[f];if(!Ii.includes(h))return S(`complete: ${h}: invalid option name
|
|
57
|
+
`,2);l.push(h)}else if(d==="-A"){if(f++,f>=t.length)return S(`complete: -A: option requires an argument
|
|
58
|
+
`,2);c.push(t[f])}else if(d==="-C"){if(f++,f>=t.length)return S(`complete: -C: option requires an argument
|
|
59
|
+
`,2);a=t[f]}else if(d==="-G"){if(f++,f>=t.length)return S(`complete: -G: option requires an argument
|
|
60
|
+
`,2)}else if(d==="-P"){if(f++,f>=t.length)return S(`complete: -P: option requires an argument
|
|
61
|
+
`,2)}else if(d==="-S"){if(f++,f>=t.length)return S(`complete: -S: option requires an argument
|
|
62
|
+
`,2)}else if(d==="-X"){if(f++,f>=t.length)return S(`complete: -X: option requires an argument
|
|
63
|
+
`,2)}else if(d==="--"){u.push(...t.slice(f+1));break}else d.startsWith("-")||u.push(d)}if(n){if(u.length===0)return e.state.completionSpecs.clear(),F("");for(let f of u)e.state.completionSpecs.delete(f);return F("")}if(s)return u.length===0?cs(e):cs(e,u);if(t.length===0||u.length===0&&!i&&!o&&!a&&l.length===0&&c.length===0&&!r)return cs(e);if(o&&u.length===0&&!r)return S(`complete: -F: option requires a command name
|
|
64
|
+
`,2);if(r){let f={isDefault:!0};return i!==void 0&&(f.wordlist=i),o!==void 0&&(f.function=o),a!==void 0&&(f.command=a),l.length>0&&(f.options=l),c.length>0&&(f.actions=c),e.state.completionSpecs.set("__default__",f),F("")}for(let f of u){let d={};i!==void 0&&(d.wordlist=i),o!==void 0&&(d.function=o),a!==void 0&&(d.command=a),l.length>0&&(d.options=l),c.length>0&&(d.actions=c),e.state.completionSpecs.set(f,d)}return F("")}function cs(e,t){let s=e.state.completionSpecs;if(!s||s.size===0){if(t&&t.length>0){let i="";for(let o of t)i+=`complete: ${o}: no completion specification
|
|
65
|
+
`;return _("",i,1)}return F("")}let n=[],r=t||Array.from(s.keys());for(let i of r){if(i==="__default__")continue;let o=s.get(i);if(!o){if(t)return _(n.join(`
|
|
66
66
|
`)+(n.length>0?`
|
|
67
67
|
`:""),`complete: ${i}: no completion specification
|
|
68
|
-
`,1);continue}let
|
|
68
|
+
`,1);continue}let a="complete";if(o.options)for(let l of o.options)a+=` -o ${l}`;if(o.actions)for(let l of o.actions)a+=` -A ${l}`;o.wordlist!==void 0&&(o.wordlist.includes(" ")||o.wordlist.includes("'")?a+=` -W '${o.wordlist}'`:a+=` -W ${o.wordlist}`),o.function!==void 0&&(a+=` -F ${o.function}`),o.isDefault&&(a+=" -D"),a+=` ${i}`,n.push(a)}return n.length===0?F(""):F(`${n.join(`
|
|
69
69
|
`)}
|
|
70
|
-
`)}var
|
|
71
|
-
`,2);let
|
|
72
|
-
`,2);r.push(
|
|
73
|
-
`,2);let
|
|
74
|
-
`,2);i.push(
|
|
75
|
-
`,1)}function
|
|
76
|
-
`);let s=1;if(t.length>0){let n=Number.parseInt(t[0],10);if(Number.isNaN(n)||n<1)throw new
|
|
77
|
-
`);s=n}throw new
|
|
78
|
-
`;else{let u
|
|
79
|
-
`}continue}let
|
|
70
|
+
`)}var Hn=["bashdefault","default","dirnames","filenames","noquote","nosort","nospace","plusdirs"];function fs(e,t){e.state.completionSpecs||(e.state.completionSpecs=new Map);let s=!1,n=!1,r=[],i=[],o=[];for(let a=0;a<t.length;a++){let l=t[a];if(l==="-D")s=!0;else if(l==="-E")n=!0;else if(l==="-o"){if(a++,a>=t.length)return S(`compopt: -o: option requires an argument
|
|
71
|
+
`,2);let c=t[a];if(!Hn.includes(c))return S(`compopt: ${c}: invalid option name
|
|
72
|
+
`,2);r.push(c)}else if(l==="+o"){if(a++,a>=t.length)return S(`compopt: +o: option requires an argument
|
|
73
|
+
`,2);let c=t[a];if(!Hn.includes(c))return S(`compopt: ${c}: invalid option name
|
|
74
|
+
`,2);i.push(c)}else if(l==="--"){o.push(...t.slice(a+1));break}else!l.startsWith("-")&&!l.startsWith("+")&&o.push(l)}if(s){let a=e.state.completionSpecs.get("__default__")??{isDefault:!0},l=new Set(a.options??[]);for(let c of r)l.add(c);for(let c of i)l.delete(c);return a.options=l.size>0?Array.from(l):void 0,e.state.completionSpecs.set("__default__",a),F("")}if(n){let a=e.state.completionSpecs.get("__empty__")??{},l=new Set(a.options??[]);for(let c of r)l.add(c);for(let c of i)l.delete(c);return a.options=l.size>0?Array.from(l):void 0,e.state.completionSpecs.set("__empty__",a),F("")}if(o.length>0){for(let a of o){let l=e.state.completionSpecs.get(a)??{},c=new Set(l.options??[]);for(let u of r)c.add(u);for(let u of i)c.delete(u);l.options=c.size>0?Array.from(c):void 0,e.state.completionSpecs.set(a,l)}return F("")}return S(`compopt: not currently executing completion function
|
|
75
|
+
`,1)}function ds(e,t){if(e.state.loopDepth===0){if(e.state.parentHasLoopContext)throw new _e;return L}if(t.length>1)throw new V(1,"",`bash: continue: too many arguments
|
|
76
|
+
`);let s=1;if(t.length>0){let n=Number.parseInt(t[0],10);if(Number.isNaN(n)||n<1)throw new V(1,"",`bash: continue: ${t[0]}: numeric argument required
|
|
77
|
+
`);s=n}throw new ce(s)}function j(e,t){let s=e.state.env.get("HOME")||"/home/user";return t.split(":").map(i=>i==="~"?s:i==="~root"?"/root":i.startsWith("~/")?s+i.slice(1):i.startsWith("~root/")?`/root${i.slice(5)}`:i).join(":")}function hs(e){for(let t=0;t<e.length;t++){let s=e.charCodeAt(t);if(s<32||s===127)return!0}return!1}function ps(e){let t="$'";for(let s=0;s<e.length;s++){let n=e[s],r=e.charCodeAt(s);r===7?t+="\\a":r===8?t+="\\b":r===9?t+="\\t":r===10?t+="\\n":r===11?t+="\\v":r===12?t+="\\f":r===13?t+="\\r":r===27?t+="\\e":r===39?t+="\\'":r===92?t+="\\\\":r<32||r===127?t+=`\\${r.toString(8).padStart(3,"0")}`:t+=n}return t+="'",t}function Ot(e){return hs(e)?ps(e):/^[a-zA-Z0-9_/.:\-@%+,=]*$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function Re(e){return hs(e)?ps(e):`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function ms(e){return hs(e)?ps(e):`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function Un(e,t){let s="";return e.state.integerVars?.has(t)&&(s+="i"),e.state.lowercaseVars?.has(t)&&(s+="l"),de(e,t)&&(s+="n"),e.state.readonlyVars?.has(t)&&(s+="r"),e.state.uppercaseVars?.has(t)&&(s+="u"),e.state.exportedVars?.has(t)&&(s+="x"),s===""?"--":`-${s}`}function ys(e){return e===""?"''":/[\s'\\]/.test(e)?`'${e.replace(/'/g,"'\\''")}'`:e}function qn(e,t){let s="",n="",r=!1;for(let i of t){let o=Un(e,i);if(e.state.associativeArrays?.has(i)){let u=Pe(e,i);if(u.length===0)s+=`declare -A ${i}=()
|
|
78
|
+
`;else{let f=u.map(d=>{let h=e.state.env.get(`${i}_${d}`)??"",m=ys(h);return`['${d}']=${m}`});s+=`declare -A ${i}=(${f.join(" ")})
|
|
79
|
+
`}continue}let l=Q(e,i);if(l.length>0){let u=l.map(f=>{let d=e.state.env.get(`${i}_${f}`)??"";return`[${f}]=${Re(d)}`});s+=`declare -a ${i}=(${u.join(" ")})
|
|
80
80
|
`;continue}if(e.state.env.has(`${i}__length`)){s+=`declare -a ${i}=()
|
|
81
|
-
`;continue}let
|
|
82
|
-
`;else{let
|
|
81
|
+
`;continue}let c=e.state.env.get(i);if(c!==void 0)s+=`declare ${o} ${i}=${ms(c)}
|
|
82
|
+
`;else{let u=e.state.declaredVars?.has(i),f=e.state.localVarDepth?.has(i);u||f?s+=`declare ${o} ${i}
|
|
83
83
|
`:(n+=`bash: declare: ${i}: not found
|
|
84
|
-
`,r=!0)}}return _(s,n,r?1:0)}function
|
|
85
|
-
`;else{let
|
|
86
|
-
`}continue}if(m.length>0){let
|
|
87
|
-
`;continue}if(e.state.env.has(`${
|
|
88
|
-
`;continue}let g=e.state.env.get(
|
|
89
|
-
`)}return
|
|
90
|
-
`;else{let i=r.map(
|
|
91
|
-
`}}return
|
|
92
|
-
`;else{let
|
|
93
|
-
`}}return
|
|
94
|
-
`)}return
|
|
95
|
-
`,2)}}}else if(
|
|
96
|
-
`,2);else
|
|
97
|
-
`;return
|
|
98
|
-
`:
|
|
84
|
+
`,r=!0)}}return _(s,n,r?1:0)}function Zn(e,t){let{filterExport:s,filterReadonly:n,filterNameref:r,filterIndexedArray:i,filterAssocArray:o}=t,a=s||n||r||i||o,l="",c=new Set;for(let f of e.state.env.keys()){if(f.startsWith("BASH_"))continue;if(f.endsWith("__length")){let h=f.slice(0,-8);c.add(h);continue}let d=f.lastIndexOf("_");if(d>0){let h=f.slice(0,d),m=f.slice(d+1);if(/^\d+$/.test(m)||e.state.associativeArrays?.has(h)){c.add(h);continue}}c.add(f)}if(e.state.localVarDepth)for(let f of e.state.localVarDepth.keys())c.add(f);if(e.state.associativeArrays)for(let f of e.state.associativeArrays)c.add(f);let u=Array.from(c).sort();for(let f of u){let d=Un(e,f),h=e.state.associativeArrays?.has(f),m=Q(e,f),p=!h&&(m.length>0||e.state.env.has(`${f}__length`));if(a&&(o&&!h||i&&!p||s&&!e.state.exportedVars?.has(f)||n&&!e.state.readonlyVars?.has(f)||r&&!de(e,f)))continue;if(h){let b=Pe(e,f);if(b.length===0)l+=`declare -A ${f}=()
|
|
85
|
+
`;else{let E=b.map(k=>{let y=e.state.env.get(`${f}_${k}`)??"",w=ys(y);return`['${k}']=${w}`});l+=`declare -A ${f}=(${E.join(" ")})
|
|
86
|
+
`}continue}if(m.length>0){let b=m.map(E=>{let k=e.state.env.get(`${f}_${E}`)??"";return`[${E}]=${Re(k)}`});l+=`declare -a ${f}=(${b.join(" ")})
|
|
87
|
+
`;continue}if(e.state.env.has(`${f}__length`)){l+=`declare -a ${f}=()
|
|
88
|
+
`;continue}let g=e.state.env.get(f);g!==void 0&&(l+=`declare ${d} ${f}=${ms(g)}
|
|
89
|
+
`)}return F(l)}function Gn(e){let t="",s=Array.from(e.state.associativeArrays??[]).sort();for(let n of s){let r=Pe(e,n);if(r.length===0)t+=`declare -A ${n}=()
|
|
90
|
+
`;else{let i=r.map(o=>{let a=e.state.env.get(`${n}_${o}`)??"",l=ys(a);return`['${o}']=${l}`});t+=`declare -A ${n}=(${i.join(" ")})
|
|
91
|
+
`}}return F(t)}function Kn(e){let t="",s=new Set;for(let r of e.state.env.keys()){if(r.startsWith("BASH_"))continue;if(r.endsWith("__length")){let o=r.slice(0,-8);e.state.associativeArrays?.has(o)||s.add(o);continue}let i=r.lastIndexOf("_");if(i>0){let o=r.slice(0,i),a=r.slice(i+1);/^\d+$/.test(a)&&(e.state.associativeArrays?.has(o)||s.add(o))}}let n=Array.from(s).sort();for(let r of n){let i=Q(e,r);if(i.length===0)t+=`declare -a ${r}=()
|
|
92
|
+
`;else{let o=i.map(a=>{let l=e.state.env.get(`${r}_${a}`)??"";return`[${a}]=${Re(l)}`});t+=`declare -a ${r}=(${o.join(" ")})
|
|
93
|
+
`}}return F(t)}function Xn(e){let t="",s=new Set;for(let r of e.state.env.keys()){if(r.startsWith("BASH_"))continue;if(r.endsWith("__length")){let o=r.slice(0,-8);s.add(o);continue}let i=r.lastIndexOf("_");if(i>0){let o=r.slice(0,i),a=r.slice(i+1);if(/^\d+$/.test(a)||e.state.associativeArrays?.has(o)){s.add(o);continue}}s.add(r)}let n=Array.from(s).sort();for(let r of n){if(e.state.associativeArrays?.has(r)||Q(e,r).length>0||e.state.env.has(`${r}__length`))continue;let a=e.state.env.get(r);a!==void 0&&(t+=`${r}=${Ot(a)}
|
|
94
|
+
`)}return F(t)}function gs(e,t){e.state.integerVars??=new Set,e.state.integerVars.add(t)}function Ye(e,t){return e.state.integerVars?.has(t)??!1}function ws(e,t){e.state.lowercaseVars??=new Set,e.state.lowercaseVars.add(t),e.state.uppercaseVars?.delete(t)}function Ri(e,t){return e.state.lowercaseVars?.has(t)??!1}function vs(e,t){e.state.uppercaseVars??=new Set,e.state.uppercaseVars.add(t),e.state.lowercaseVars?.delete(t)}function Li(e,t){return e.state.uppercaseVars?.has(t)??!1}function je(e,t,s){return Ri(e,t)?s.toLowerCase():Li(e,t)?s.toUpperCase():s}async function Yn(e,t){try{let s=new W,n=q(s,t),r=await z(e,n.expression);return String(r)}catch{return"0"}}function Fi(e){let t=e.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);if(!t)return null;let s=t[0],n=s.length;if(e[n]!=="[")return null;let r=0,i=n+1;for(;n<e.length;n++)if(e[n]==="[")r++;else if(e[n]==="]"&&(r--,r===0))break;if(r!==0)return null;let o=e.slice(i,n);if(n++,e[n]!=="=")return null;n++;let a=e.slice(n);return{name:s,indexExpr:o,value:a}}async function bs(e,t){let s=!1,n=!1,r=!1,i=!1,o=!1,a=!1,l=!1,c=!1,u=!1,f=!1,d=!1,h=!1,m=!1,p=!1,g=!1,b=[];for(let T=0;T<t.length;T++){let I=t[T];if(I==="-a")s=!0;else if(I==="-A")n=!0;else if(I==="-r")r=!0;else if(I==="-x")i=!0;else if(I==="-p")o=!0;else if(I==="-n")a=!0;else if(I==="+n")l=!0;else if(I==="+a")c=!0;else if(I==="+x")u=!0;else if(I==="--"){b.push(...t.slice(T+1));break}else if(I.startsWith("+")){for(let A of I.slice(1))if(A==="n")l=!0;else if(A==="a")c=!0;else if(A==="x")u=!0;else if(A!=="r"){if(A!=="i"){if(!(A==="f"||A==="F"))return _("",`bash: typeset: +${A}: invalid option
|
|
95
|
+
`,2)}}}else if(I==="-i")f=!0;else if(I==="-l")d=!0;else if(I==="-u")h=!0;else if(I==="-f")m=!0;else if(I==="-F")p=!0;else if(I==="-g")g=!0;else if(I.startsWith("-"))for(let A of I.slice(1))if(A==="a")s=!0;else if(A==="A")n=!0;else if(A==="r")r=!0;else if(A==="x")i=!0;else if(A==="p")o=!0;else if(A==="n")a=!0;else if(A==="i")f=!0;else if(A==="l")d=!0;else if(A==="u")h=!0;else if(A==="f")m=!0;else if(A==="F")p=!0;else if(A==="g")g=!0;else return _("",`bash: typeset: -${A}: invalid option
|
|
96
|
+
`,2);else b.push(I)}let k=e.state.localScopes.length>0&&!g,y=T=>{if(!k)return;let I=e.state.localScopes[e.state.localScopes.length-1];I.has(T)||I.set(T,e.state.env.get(T))},w=T=>{if(!k)return;let I=e.state.localScopes[e.state.localScopes.length-1];I.has(T)||I.set(T,e.state.env.get(T));let A=`${T}_`;for(let N of e.state.env.keys())N.startsWith(A)&&!N.includes("__")&&(I.has(N)||I.set(N,e.state.env.get(N)));let P=`${T}__length`;e.state.env.has(P)&&!I.has(P)&&I.set(P,e.state.env.get(P))},v=T=>{k&&De(e,T)};if(p){if(b.length===0){let A=Array.from(e.state.functions.keys()).sort(),P="";for(let N of A)P+=`declare -f ${N}
|
|
97
|
+
`;return F(P)}let T=!0,I="";for(let A of b)e.state.functions.has(A)?I+=`${A}
|
|
98
|
+
`:T=!1;return _(I,"",T?0:1)}if(m){if(b.length===0){let I="",A=Array.from(e.state.functions.keys()).sort();for(let P of A)I+=`${P} ()
|
|
99
99
|
{
|
|
100
100
|
# function body
|
|
101
101
|
}
|
|
102
|
-
`;return
|
|
103
|
-
`,
|
|
104
|
-
`,
|
|
105
|
-
`,
|
|
106
|
-
`,
|
|
107
|
-
`,
|
|
108
|
-
`,
|
|
109
|
-
`}}return
|
|
110
|
-
`,2);n=t[
|
|
102
|
+
`;return F(I)}let T=!0;for(let I of b)e.state.functions.has(I)||(T=!1);return _("","",T?0:1)}if(o&&b.length>0)return qn(e,b);if(o&&b.length===0)return Zn(e,{filterExport:i,filterReadonly:r,filterNameref:a,filterIndexedArray:s,filterAssocArray:n});if(b.length===0&&n&&!o)return Gn(e);if(b.length===0&&s&&!o)return Kn(e);if(b.length===0&&!o)return Xn(e);let C="",D=0;for(let T of b){let I=T.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(I&&!c){let $=I[1],O=I[2];if(n&&Q(e,$).length>0){C+=`bash: declare: ${$}: cannot convert indexed to associative array
|
|
103
|
+
`,D=1;continue}if((s||!n&&!s)&&e.state.associativeArrays?.has($)){C+=`bash: declare: ${$}: cannot convert associative to indexed array
|
|
104
|
+
`,D=1;continue}if(w($),n&&(e.state.associativeArrays??=new Set,e.state.associativeArrays.add($)),ve(e,$),e.state.env.delete($),e.state.env.delete(`${$}__length`),n&&O.includes("[")){let R=_t(O);for(let[G,M]of R){let H=j(e,M);e.state.env.set(`${$}_${G}`,H)}}else if(n){let R=Ee(O);for(let G=0;G<R.length;G+=2){let M=R[G],H=G+1<R.length?j(e,R[G+1]):"";e.state.env.set(`${$}_${M}`,H)}}else{let R=Ee(O);if(R.some(M=>/^\[[^\]]+\]=/.test(M))){let M=0;for(let H of R){let ee=H.match(/^\[([^\]]+)\]=(.*)$/);if(ee){let ae=ee[1],Le=ee[2],jr=j(e,Le),Ue;if(/^-?\d+$/.test(ae))Ue=Number.parseInt(ae,10);else try{let Hr=new W,Ur=q(Hr,ae);Ue=await z(e,Ur.expression)}catch{Ue=0}e.state.env.set(`${$}_${Ue}`,jr),M=Ue+1}else{let ae=j(e,H);e.state.env.set(`${$}_${M}`,ae),M++}}}else{for(let M=0;M<R.length;M++)e.state.env.set(`${$}_${M}`,R[M]);e.state.env.set(`${$}__length`,String(R.length))}}v($),r&&re(e,$),i&&ge(e,$);continue}if(l){let $=T.includes("=")?T.slice(0,T.indexOf("=")):T;if(sn(e,$),!T.includes("="))continue}if(u){let $=T.includes("=")?T.slice(0,T.indexOf("=")):T;if(ut(e,$),!T.includes("="))continue}let A=Fi(T);if(A){let{name:$,indexExpr:O,value:R}=A,G=K(e,$);if(G)return G;w($);let M;try{let ee=new W,ae=q(ee,O);M=await z(e,ae.expression)}catch{let ee=parseInt(O,10);M=Number.isNaN(ee)?0:ee}e.state.env.set(`${$}_${M}`,R);let H=parseInt(e.state.env.get(`${$}__length`)??"0",10);M>=H&&e.state.env.set(`${$}__length`,String(M+1)),v($),r&&re(e,$),i&&ge(e,$);continue}let P=T.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(P&&!c){let $=P[1],O=P[2],R=K(e,$);if(R)return R;w($);let G=Ee(O);if(e.state.associativeArrays?.has($)){let M=_t(O);for(let[H,ee]of M){let ae=j(e,ee);e.state.env.set(`${$}_${H}`,ae)}}else{let M=Q(e,$),H=0,ee=e.state.env.get($);M.length===0&&ee!==void 0?(e.state.env.set(`${$}_0`,ee),e.state.env.delete($),H=1):M.length>0&&(H=Math.max(...M)+1);for(let Le=0;Le<G.length;Le++)e.state.env.set(`${$}_${H+Le}`,j(e,G[Le]));let ae=H+G.length;e.state.env.set(`${$}__length`,String(ae))}v($),r&&re(e,$),i&&ge(e,$);continue}let N=T.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(N){let $=N[1],O=j(e,N[2]),R=K(e,$);if(R)return R;y($),f&&gs(e,$),d&&ws(e,$),h&&vs(e,$);let M=Q(e,$).length>0||e.state.associativeArrays?.has($);if(Ye(e,$)){let H=e.state.env.get($)??"0",ee=parseInt(H,10)||0,ae=parseInt(await Yn(e,O),10)||0;O=String(ee+ae),e.state.env.set($,O)}else if(M){O=je(e,$,O);let H=`${$}_0`,ee=e.state.env.get(H)??"";e.state.env.set(H,ee+O)}else{O=je(e,$,O);let H=e.state.env.get($)??"";e.state.env.set($,H+O)}v($),r&&re(e,$),i&&ge(e,$),e.state.options.allexport&&!u&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add($));continue}if(T.includes("=")){let $=T.indexOf("="),O=T.slice(0,$),R=T.slice($+1);if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(O)){C+=`bash: typeset: \`${O}': not a valid identifier
|
|
105
|
+
`,D=1;continue}let G=K(e,O);if(G)return G;if(y(O),a){if(R!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(R)){C+=`bash: declare: \`${R}': invalid variable name for name reference
|
|
106
|
+
`,D=1;continue}e.state.env.set(O,R),Se(e,O),R!==""&&Ht(e,R)&&jt(e,O),v(O),r&&re(e,O),i&&ge(e,O);continue}if(f&&gs(e,O),d&&ws(e,O),h&&vs(e,O),Ye(e,O)&&(R=await Yn(e,R)),R=je(e,O,R),de(e,O)){let M=ke(e,O);M&&M!==O?e.state.env.set(M,R):e.state.env.set(O,R)}else e.state.env.set(O,R);v(O),r&&re(e,O),i&&ge(e,O),e.state.options.allexport&&!u&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(O))}else{let $=T;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test($)){C+=`bash: typeset: \`${$}': not a valid identifier
|
|
107
|
+
`,D=1;continue}if(s||n?w($):y($),a){Se(e,$);let R=e.state.env.get($);R!==void 0&&R!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(R)?nn(e,$):R&&Ht(e,R)&&jt(e,$),v($),r&&re(e,$),i&&ge(e,$);continue}if(f&&gs(e,$),d&&ws(e,$),h&&vs(e,$),n){if(Q(e,$).length>0){C+=`bash: declare: ${$}: cannot convert indexed to associative array
|
|
108
|
+
`,D=1;continue}e.state.associativeArrays??=new Set,e.state.associativeArrays.add($)}let O=Array.from(e.state.env.keys()).some(R=>R.startsWith(`${$}_`)&&!R.startsWith(`${$}__length`));!e.state.env.has($)&&!O&&(s||n?e.state.env.set(`${$}__length`,"0"):(e.state.declaredVars??=new Set,e.state.declaredVars.add($))),v($),r&&re(e,$),i&&ge(e,$)}}return _("",C,D)}async function Es(e,t){let s=!1,n=!1,r=!1,i=[];for(let o=0;o<t.length;o++){let a=t[o];if(a==="-a")s=!0;else if(a==="-A")n=!0;else if(a==="-p")r=!0;else if(a==="--"){i.push(...t.slice(o+1));break}else a.startsWith("-")||i.push(a)}if(i.length===0){let o="",a=Array.from(e.state.readonlyVars||[]).sort();for(let l of a){let c=e.state.env.get(l);if(c!==void 0){let u=c.replace(/\\/g,"\\\\").replace(/"/g,'\\"');o+=`declare -r ${l}="${u}"
|
|
109
|
+
`}}return F(o)}for(let o of i){let a=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(a){let f=a[1],d=a[2],h=K(e,f);if(h)return h;let m=Ee(d);if(e.state.associativeArrays?.has(f)){let p=_t(d);for(let[g,b]of p){let E=j(e,b);e.state.env.set(`${f}_${g}`,E)}}else{let p=Q(e,f),g=0,b=e.state.env.get(f);p.length===0&&b!==void 0?(e.state.env.set(`${f}_0`,b),e.state.env.delete(f),g=1):p.length>0&&(g=Math.max(...p)+1);for(let k=0;k<m.length;k++)e.state.env.set(`${f}_${g+k}`,j(e,m[k]));let E=g+m.length;e.state.env.set(`${f}__length`,String(E))}re(e,f);continue}let l=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(l){let f=l[1],d=j(e,l[2]),h=K(e,f);if(h)return h;let m=e.state.env.get(f)??"";e.state.env.set(f,m+d),re(e,f);continue}let c=Rn(o);if(c.value===void 0&&!c.isArray){re(e,c.name);continue}let u=await Ln(e,c,{makeReadonly:!0});if(u)return u}return L}function $s(e){return e.state.directoryStack??=[],e.state.directoryStack}function Qe(e,t){return t&&e===t?"~":t&&e.startsWith(`${t}/`)?`~${e.slice(t.length)}`:e}function Mi(e){let t=e.split("/").filter(n=>n&&n!=="."),s=[];for(let n of t)n===".."?s.pop():s.push(n);return`/${s.join("/")}`}async function Ss(e,t){let s=$s(e),n;for(let a=0;a<t.length;a++){let l=t[a];if(l==="--"){if(a+1<t.length){if(n!==void 0)return S(`bash: pushd: too many arguments
|
|
110
|
+
`,2);n=t[a+1],a++}}else{if(l.startsWith("-")&&l!=="-")return S(`bash: pushd: ${l}: invalid option
|
|
111
111
|
`,2);if(n!==void 0)return S(`bash: pushd: too many arguments
|
|
112
|
-
`,2);n=
|
|
113
|
-
`,1);let
|
|
112
|
+
`,2);n=l}}if(n===void 0){if(s.length<2)return S(`bash: pushd: no other directory
|
|
113
|
+
`,1);let a=s[0];s[0]=s[1],s[1]=a,n=s[0]}let r;if(n.startsWith("/"))r=n;else if(n===".."){let a=e.state.cwd.split("/").filter(l=>l);a.pop(),r=`/${a.join("/")}`}else n==="."?r=e.state.cwd:n.startsWith("~")?r=(e.state.env.get("HOME")||"/")+n.slice(1):r=`${e.state.cwd}/${n}`;r=Mi(r);try{if(!(await e.fs.stat(r)).isDirectory)return S(`bash: pushd: ${n}: Not a directory
|
|
114
114
|
`,1)}catch{return S(`bash: pushd: ${n}: No such file or directory
|
|
115
|
-
`,1)}s.unshift(e.state.cwd),e.state.previousDir=e.state.cwd,e.state.cwd=r,e.state.env.set("PWD",r),e.state.env.set("OLDPWD",e.state.previousDir);let i=e.state.env.get("HOME")||"",
|
|
116
|
-
`;return
|
|
115
|
+
`,1)}s.unshift(e.state.cwd),e.state.previousDir=e.state.cwd,e.state.cwd=r,e.state.env.set("PWD",r),e.state.env.set("OLDPWD",e.state.previousDir);let i=e.state.env.get("HOME")||"",o=`${[r,...s].map(a=>Qe(a,i)).join(" ")}
|
|
116
|
+
`;return F(o)}function As(e,t){let s=$s(e);for(let o of t)if(o!=="--")return o.startsWith("-")&&o!=="-"?S(`bash: popd: ${o}: invalid option
|
|
117
117
|
`,2):S(`bash: popd: too many arguments
|
|
118
118
|
`,2);if(s.length===0)return S(`bash: popd: directory stack empty
|
|
119
119
|
`,1);let n=s.shift();if(!n)return S(`bash: popd: directory stack empty
|
|
120
|
-
`,1);e.state.previousDir=e.state.cwd,e.state.cwd=n,e.state.env.set("PWD",n),e.state.env.set("OLDPWD",e.state.previousDir);let r=e.state.env.get("HOME")||"",i=`${[n,...s].map(
|
|
121
|
-
`;return
|
|
120
|
+
`,1);e.state.previousDir=e.state.cwd,e.state.cwd=n,e.state.env.set("PWD",n),e.state.env.set("OLDPWD",e.state.previousDir);let r=e.state.env.get("HOME")||"",i=`${[n,...s].map(o=>Qe(o,r)).join(" ")}
|
|
121
|
+
`;return F(i)}function _s(e,t){let s=$s(e),n=!1,r=!1,i=!1,o=!1;for(let u of t)if(u!=="--")if(u.startsWith("-"))for(let f of u.slice(1))if(f==="c")n=!0;else if(f==="l")r=!0;else if(f==="p")i=!0;else if(f==="v")i=!0,o=!0;else return S(`bash: dirs: -${f}: invalid option
|
|
122
122
|
`,2);else return S(`bash: dirs: too many arguments
|
|
123
|
-
`,1);if(n)return e.state.directoryStack=[],L;let
|
|
124
|
-
`),
|
|
125
|
-
`):i?
|
|
123
|
+
`,1);if(n)return e.state.directoryStack=[],L;let a=[e.state.cwd,...s],l=e.state.env.get("HOME")||"",c;return o?(c=a.map((u,f)=>{let d=r?u:Qe(u,l);return` ${f} ${d}`}).join(`
|
|
124
|
+
`),c+=`
|
|
125
|
+
`):i?c=a.map(u=>r?u:Qe(u,l)).join(`
|
|
126
126
|
`)+`
|
|
127
|
-
`:
|
|
128
|
-
`,
|
|
127
|
+
`:c=a.map(u=>r?u:Qe(u,l)).join(" ")+`
|
|
128
|
+
`,F(c)}async function Dt(e,t,s){let n=t;if(n.length>0){let a=n[0];if(a==="--")n=n.slice(1);else if(a.startsWith("-")&&a!=="-"&&a.length>1)return S(`bash: eval: ${a}: invalid option
|
|
129
129
|
eval: usage: eval [arg ...]
|
|
130
|
-
`,2)}if(n.length===0)return L;let r=n.join(" ");if(r.trim()==="")return L;let i=e.state.groupStdin,
|
|
131
|
-
`);throw
|
|
132
|
-
`,s=2):s=(i%256+256)%256}throw new
|
|
133
|
-
`}}return
|
|
134
|
-
`,i=1;continue}if(
|
|
135
|
-
`);let s=t[0],n=t[1],r=!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(n),i=s.startsWith(":"),
|
|
136
|
-
`,r||e.state.env.set(n,"?"),
|
|
137
|
-
`,r||e.state.env.set(n,"?")),e.state.env.set("OPTIND",String(
|
|
138
|
-
`,1);
|
|
130
|
+
`,2)}if(n.length===0)return L;let r=n.join(" ");if(r.trim()==="")return L;let i=e.state.groupStdin,o=s??e.state.groupStdin;o!==void 0&&(e.state.groupStdin=o);try{let a=we(r);return await e.executeScript(a)}catch(a){if(a instanceof le||a instanceof ce||a instanceof ne||a instanceof V)throw a;if(a.name==="ParseException")return S(`bash: eval: ${a.message}
|
|
131
|
+
`);throw a}finally{e.state.groupStdin=i}}function Cs(e,t){let s,n="";if(t.length===0)s=e.state.lastExitCode;else{let r=t[0],i=Number.parseInt(r,10);r===""||Number.isNaN(i)||!/^-?\d+$/.test(r)?(n=`bash: exit: ${r}: numeric argument required
|
|
132
|
+
`,s=2):s=(i%256+256)%256}throw new V(s,"",n)}function Ps(e,t){let s=!1,n=[];for(let o of t)o==="-n"?s=!0:o==="-p"||o==="--"||n.push(o);if(n.length===0&&!s){let o="",a=e.state.exportedVars??new Set,l=Array.from(a).sort();for(let c of l){let u=e.state.env.get(c);if(u!==void 0){let f=u.replace(/\\/g,"\\\\").replace(/"/g,'\\"');o+=`declare -x ${c}="${f}"
|
|
133
|
+
`}}return F(o)}if(s){for(let o of n){let a,l;if(o.includes("=")){let c=o.indexOf("=");a=o.slice(0,c),l=j(e,o.slice(c+1)),e.state.env.set(a,l)}else a=o;ut(e,a)}return L}let r="",i=0;for(let o of n){let a,l,c=!1,u=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(u)a=u[1],l=j(e,u[2]),c=!0;else if(o.includes("=")){let f=o.indexOf("=");a=o.slice(0,f),l=j(e,o.slice(f+1))}else a=o;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(a)){r+=`bash: export: \`${o}': not a valid identifier
|
|
134
|
+
`,i=1;continue}if(l!==void 0)if(c){let f=e.state.env.get(a)??"";e.state.env.set(a,f+l)}else e.state.env.set(a,l);else e.state.env.has(a)||e.state.env.set(a,"");ge(e,a)}return _("",r,i)}function Tt(e,t){if(t.length<2)return S(`bash: getopts: usage: getopts optstring name [arg ...]
|
|
135
|
+
`);let s=t[0],n=t[1],r=!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(n),i=s.startsWith(":"),o=i?s.slice(1):s,a;if(t.length>2)a=t.slice(2);else{let p=Number.parseInt(e.state.env.get("#")||"0",10);a=[];for(let g=1;g<=p;g++)a.push(e.state.env.get(String(g))||"")}let l=Number.parseInt(e.state.env.get("OPTIND")||"1",10);l<1&&(l=1);let c=Number.parseInt(e.state.env.get("__GETOPTS_CHARINDEX")||"0",10);if(e.state.env.set("OPTARG",""),l>a.length)return r||e.state.env.set(n,"?"),e.state.env.set("OPTIND",String(a.length+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"),{exitCode:r?2:1,stdout:"",stderr:""};let u=a[l-1];if(!u||u==="-"||!u.startsWith("-"))return r||e.state.env.set(n,"?"),{exitCode:r?2:1,stdout:"",stderr:""};if(u==="--")return e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"),r||e.state.env.set(n,"?"),{exitCode:r?2:1,stdout:"",stderr:""};let f=c===0?1:c,d=u[f];if(!d)return e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"),Tt(e,t);let h=o.indexOf(d);if(h===-1){let p="";return i?e.state.env.set("OPTARG",d):p=`bash: illegal option -- ${d}
|
|
136
|
+
`,r||e.state.env.set(n,"?"),f+1<u.length?(e.state.env.set("__GETOPTS_CHARINDEX",String(f+1)),e.state.env.set("OPTIND",String(l))):(e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0")),{exitCode:r?2:0,stdout:"",stderr:p}}if(h+1<o.length&&o[h+1]===":")if(f+1<u.length)e.state.env.set("OPTARG",u.slice(f+1)),e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0");else{if(l>=a.length){let p="";return i?(e.state.env.set("OPTARG",d),r||e.state.env.set(n,":")):(p=`bash: option requires an argument -- ${d}
|
|
137
|
+
`,r||e.state.env.set(n,"?")),e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"),{exitCode:r?2:0,stdout:"",stderr:p}}e.state.env.set("OPTARG",a[l]),e.state.env.set("OPTIND",String(l+2)),e.state.env.set("__GETOPTS_CHARINDEX","0")}else f+1<u.length?(e.state.env.set("__GETOPTS_CHARINDEX",String(f+1)),e.state.env.set("OPTIND",String(l))):(e.state.env.set("OPTIND",String(l+1)),e.state.env.set("__GETOPTS_CHARINDEX","0"));return r||e.state.env.set(n,d),{exitCode:r?2:0,stdout:"",stderr:""}}async function ks(e,t){e.state.hashTable||(e.state.hashTable=new Map);let s=!1,n=!1,r=!1,i=!1,o=!1,a="",l=[],c=0;for(;c<t.length;){let m=t[c];if(m==="--"){c++,l.push(...t.slice(c));break}if(m==="-r")s=!0,c++;else if(m==="-d")n=!0,c++;else if(m==="-l")r=!0,c++;else if(m==="-t")o=!0,c++;else if(m==="-p"){if(i=!0,c++,c>=t.length)return S(`bash: hash: -p: option requires an argument
|
|
138
|
+
`,1);a=t[c],c++}else if(m.startsWith("-")&&m.length>1){for(let p of m.slice(1))if(p==="r")s=!0;else if(p==="d")n=!0;else if(p==="l")r=!0;else if(p==="t")o=!0;else return p==="p"?S(`bash: hash: -p: option requires an argument
|
|
139
139
|
`,1):S(`bash: hash: -${p}: invalid option
|
|
140
|
-
`,1);
|
|
141
|
-
`,1);let m=!1,p="";for(let g of
|
|
142
|
-
`,m=!0);return m?S(p,1):L}if(
|
|
143
|
-
`,1);let m="",p=!1,g="";for(let
|
|
144
|
-
`:m+=`${
|
|
145
|
-
`:(g+=`bash: hash: ${
|
|
146
|
-
`,p=!0)}return p?{exitCode:1,stdout:m,stderr:g}:
|
|
147
|
-
`,1);let m=
|
|
140
|
+
`,1);c++}else l.push(m),c++}if(s)return e.state.hashTable.clear(),L;if(n){if(l.length===0)return S(`bash: hash: -d: option requires an argument
|
|
141
|
+
`,1);let m=!1,p="";for(let g of l)e.state.hashTable.has(g)?e.state.hashTable.delete(g):(p+=`bash: hash: ${g}: not found
|
|
142
|
+
`,m=!0);return m?S(p,1):L}if(o){if(l.length===0)return S(`bash: hash: -t: option requires an argument
|
|
143
|
+
`,1);let m="",p=!1,g="";for(let b of l){let E=e.state.hashTable.get(b);E?l.length>1?m+=`${b} ${E}
|
|
144
|
+
`:m+=`${E}
|
|
145
|
+
`:(g+=`bash: hash: ${b}: not found
|
|
146
|
+
`,p=!0)}return p?{exitCode:1,stdout:m,stderr:g}:F(m)}if(i){if(l.length===0)return S(`bash: hash: usage: hash [-lr] [-p pathname] [-dt] [name ...]
|
|
147
|
+
`,1);let m=l[0];return e.state.hashTable.set(m,a),L}if(l.length===0){if(e.state.hashTable.size===0)return F(`hash: hash table empty
|
|
148
148
|
`);let m="";if(r)for(let[p,g]of e.state.hashTable)m+=`builtin hash -p ${g} ${p}
|
|
149
149
|
`;else{m=`hits command
|
|
150
150
|
`;for(let[,p]of e.state.hashTable)m+=` 1 ${p}
|
|
151
|
-
`}return
|
|
152
|
-
`,
|
|
153
|
-
`,
|
|
151
|
+
`}return F(m)}let u=!1,f="",h=(e.state.env.get("PATH")||"/usr/bin:/bin").split(":");for(let m of l){if(m.includes("/")){f+=`bash: hash: ${m}: cannot use / in name
|
|
152
|
+
`,u=!0;continue}let p=!1;for(let g of h){if(!g)continue;let b=`${g}/${m}`;if(await e.fs.exists(b)){e.state.hashTable.set(m,b),p=!0;break}}p||(f+=`bash: hash: ${m}: not found
|
|
153
|
+
`,u=!0)}return u?S(f,1):L}var Qn=new Map([[":",[": [arguments]",`Null command.
|
|
154
154
|
No effect; the command does nothing.
|
|
155
155
|
Exit Status:
|
|
156
156
|
Always succeeds.`]],[".",[". filename [arguments]",`Execute commands from a file in the current shell.
|
|
@@ -495,29 +495,32 @@ eval: usage: eval [arg ...]
|
|
|
495
495
|
job specification, and reports its termination status.
|
|
496
496
|
Exit Status:
|
|
497
497
|
Returns the status of the last ID; fails if ID is invalid or an invalid
|
|
498
|
-
option is given.`]]]),
|
|
499
|
-
`,2)}r++}else n.push(
|
|
500
|
-
`,
|
|
501
|
-
`:i+=`${
|
|
498
|
+
option is given.`]]]),Jn=[...Qn.keys()].sort();function Ns(e,t){let s=!1,n=[],r=0;for(;r<t.length;){let l=t[r];if(l==="--"){for(r++;r<t.length;)n.push(t[r]),r++;break}if(l.startsWith("-")&&l.length>1){for(let c=1;c<l.length;c++){let u=l[c];if(u==="s")s=!0;else return S(`bash: help: -${u}: invalid option
|
|
499
|
+
`,2)}r++}else n.push(l),r++}if(n.length===0)return Vi();let i="",o=!1,a="";for(let l of n){let c=Wi(l);if(c.length===0){a+=`bash: help: no help topics match \`${l}'. Try \`help help' or \`man -k ${l}' or \`info ${l}'.
|
|
500
|
+
`,o=!0;continue}for(let u of c){let f=Qn.get(u);if(!f)continue;let[d,h]=f;s?i+=`${u}: ${d}
|
|
501
|
+
`:i+=`${u}: ${d}
|
|
502
502
|
${h}
|
|
503
|
-
`}}return{exitCode:
|
|
503
|
+
`}}return{exitCode:o?1:0,stdout:i,stderr:a}}function Wi(e){let t=e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,"."),s=qe(`^${t}$`);return Jn.filter(n=>s.test(n))}function Vi(){let e=[];e.push("just-bash shell builtins"),e.push("These shell commands are defined internally. Type `help' to see this list."),e.push("Type `help name' to find out more about the function `name'."),e.push("");let t=36,s=Jn.slice(),n=Math.ceil(s.length/2);for(let r=0;r<n;r++){let i=s[r]||"",o=s[r+n]||"",a=i.padEnd(t);e.push(o?`${a}${o}`:i)}return F(`${e.join(`
|
|
504
504
|
`)}
|
|
505
|
-
`)}function
|
|
506
|
-
`);let s=
|
|
507
|
-
`)}return _("","",n===0?1:0)}async function
|
|
508
|
-
`);let s=e.state.localScopes[e.state.localScopes.length-1],n="",r=0,i=!1,
|
|
509
|
-
`)}return _(
|
|
510
|
-
`,r=1;continue}if(K(e,
|
|
511
|
-
`,r=1;continue}let g=s.has(
|
|
512
|
-
`,r=1;continue}e.state.env.set(
|
|
513
|
-
`,r=0,i=0,
|
|
514
|
-
`,
|
|
515
|
-
`,
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
`)
|
|
520
|
-
|
|
505
|
+
`)}function zi(e){let t=[],s="",n=0;for(let r of e){for(let i of r)i==="("?n++:i===")"&&n--;s?s+=` ${r}`:s=r,n===0&&(t.push(s),s="")}return s&&t.push(s),t}async function Os(e,t){if(t.length===0)return S(`bash: let: expression expected
|
|
506
|
+
`);let s=zi(t),n=0;for(let r of s)try{let o=we(`(( ${r} ))`).statements[0];if(o&&o.pipelines.length>0&&o.pipelines[0].commands.length>0){let a=o.pipelines[0].commands[0];a.type==="ArithmeticCommand"&&(n=await z(e,a.expression.expression))}}catch(i){return S(`bash: let: ${r}: ${i.message}
|
|
507
|
+
`)}return _("","",n===0?1:0)}async function Ds(e,t){if(e.state.localScopes.length===0)return S(`bash: local: can only be used in a function
|
|
508
|
+
`);let s=e.state.localScopes[e.state.localScopes.length-1],n="",r=0,i=!1,o=!1,a=!1,l=[];for(let c of t)if(c==="-n")i=!0;else if(c==="-a")o=!0;else if(c==="-p")a=!0;else if(c.startsWith("-")&&!c.includes("="))for(let u of c.slice(1))u==="n"?i=!0:u==="a"?o=!0:u==="p"&&(a=!0);else l.push(c);if(l.length===0){let c="",u=Array.from(s.keys()).filter(f=>!f.includes("_")||!f.match(/_\d+$/)).filter(f=>!f.includes("__length")).sort();for(let f of u){let d=e.state.env.get(f);d!==void 0&&(c+=`${f}=${d}
|
|
509
|
+
`)}return _(c,"",0)}for(let c of l){let u,f,d=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(d){u=d[1];let b=d[2];if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(u)){n+=`bash: local: \`${c}': not a valid identifier
|
|
510
|
+
`,r=1;continue}if(K(e,u,"bash"),!s.has(u)){s.set(u,e.state.env.get(u));let y=`${u}_`;for(let w of e.state.env.keys())w.startsWith(y)&&!w.includes("__")&&(s.has(w)||s.set(w,e.state.env.get(w)))}let E=`${u}_`;for(let y of e.state.env.keys())y.startsWith(E)&&!y.includes("__")&&e.state.env.delete(y);let k=Ee(b);for(let y=0;y<k.length;y++)e.state.env.set(`${u}_${y}`,k[y]);e.state.env.set(`${u}__length`,String(k.length)),De(e,u),i&&Se(e,u);continue}let h=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=\((.*)\)$/s);if(h){u=h[1];let b=h[2];if(K(e,u,"bash"),!s.has(u)){s.set(u,e.state.env.get(u));let C=`${u}_`;for(let T of e.state.env.keys())T.startsWith(C)&&!T.includes("__")&&(s.has(T)||s.set(T,e.state.env.get(T)));let D=`${u}__length`;e.state.env.has(D)&&!s.has(D)&&s.set(D,e.state.env.get(D))}let E=Ee(b),k=Q(e,u),y=0,w=e.state.env.get(u);k.length===0&&w!==void 0?(e.state.env.set(`${u}_0`,w),e.state.env.delete(u),y=1):k.length>0&&(y=Math.max(...k)+1);for(let C=0;C<E.length;C++)e.state.env.set(`${u}_${y+C}`,j(e,E[C]));let v=y+E.length;e.state.env.set(`${u}__length`,String(v)),De(e,u),i&&Se(e,u);continue}let m=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\+=(.*)$/);if(m){u=m[1];let b=j(e,m[2]);K(e,u,"bash"),s.has(u)||s.set(u,e.state.env.get(u));let E=e.state.env.get(u)??"";e.state.env.set(u,E+b),De(e,u),i&&Se(e,u);continue}let p=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([^\]]+)\]=(.*)$/s);if(p){u=p[1];let b=p[2],E=j(e,p[3]);if(K(e,u,"bash"),!s.has(u)){s.set(u,e.state.env.get(u));let w=`${u}_`;for(let C of e.state.env.keys())C.startsWith(w)&&!C.includes("__")&&(s.has(C)||s.set(C,e.state.env.get(C)));let v=`${u}__length`;e.state.env.has(v)&&!s.has(v)&&s.set(v,e.state.env.get(v))}let k;try{let w=new W,v=q(w,b);k=await z(e,v.expression)}catch{let w=parseInt(b,10);k=Number.isNaN(w)?0:w}e.state.env.set(`${u}_${k}`,E);let y=parseInt(e.state.env.get(`${u}__length`)??"0",10);k>=y&&e.state.env.set(`${u}__length`,String(k+1)),De(e,u),i&&Se(e,u);continue}if(c.includes("=")){let b=c.indexOf("=");u=c.slice(0,b),f=j(e,c.slice(b+1))}else u=c;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(u)){n+=`bash: local: \`${c}': not a valid identifier
|
|
511
|
+
`,r=1;continue}let g=s.has(u);if(f!==void 0){let b=e.state.env.get(u);if(e.state.tempEnvBindings){let E=e.state.accessedTempEnvVars?.has(u),k=e.state.mutatedTempEnvVars?.has(u);if(!E&&!k)for(let y=e.state.tempEnvBindings.length-1;y>=0;y--){let w=e.state.tempEnvBindings[y];if(w.has(u)){b=w.get(u);break}}}Fn(e,u,b)}if(!g){let b=e.state.env.get(u);if(e.state.tempEnvBindings)for(let E=e.state.tempEnvBindings.length-1;E>=0;E--){let k=e.state.tempEnvBindings[E];if(k.has(u)){b=k.get(u);break}}if(s.set(u,b),o){let E=`${u}_`;for(let y of e.state.env.keys())y.startsWith(E)&&!y.includes("__")&&(s.has(y)||s.set(y,e.state.env.get(y)));let k=`${u}__length`;e.state.env.has(k)&&!s.has(k)&&s.set(k,e.state.env.get(k))}}if(o&&f===void 0){let b=`${u}_`;for(let E of e.state.env.keys())E.startsWith(b)&&!E.includes("__")&&e.state.env.delete(E);e.state.env.set(`${u}__length`,"0")}else if(f!==void 0){if(K(e,u,"bash"),i&&f!==""&&!/^[a-zA-Z_][a-zA-Z0-9_]*(\[.+\])?$/.test(f)){n+=`bash: local: \`${f}': invalid variable name for name reference
|
|
512
|
+
`,r=1;continue}e.state.env.set(u,f),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(u))}else{let b=e.state.tempEnvBindings?.some(E=>E.has(u));!g&&!b&&e.state.env.delete(u)}De(e,u),i&&Se(e,u)}return _("",n,r)}function Ts(e,t,s){let n=`
|
|
513
|
+
`,r=0,i=0,o=0,a=!1,l="MAPFILE",c=0;for(;c<t.length;){let E=t[c];E==="-d"&&c+1<t.length?(n=t[c+1]===""?"\0":t[c+1]||`
|
|
514
|
+
`,c+=2):E==="-n"&&c+1<t.length?(r=Number.parseInt(t[c+1],10)||0,c+=2):E==="-O"&&c+1<t.length?(i=Number.parseInt(t[c+1],10)||0,c+=2):E==="-s"&&c+1<t.length?(o=Number.parseInt(t[c+1],10)||0,c+=2):E==="-t"?(a=!0,c++):E==="-u"||E==="-C"||E==="-c"?c+=2:(E.startsWith("-")||(l=E),c++)}let u=s;!u&&e.state.groupStdin!==void 0&&(u=e.state.groupStdin);let f=[],d=u,h=0,m=0,p=e.limits?.maxArrayElements??1e5;for(;d.length>0;){let E=d.indexOf(n);if(E===-1){if(d.length>0){if(m<o)m++;else if(r===0||h<r){if(i+h>=p)return _("",`mapfile: array element limit exceeded (${p})
|
|
515
|
+
`,1);let w=d,v=w.indexOf("\0");v!==-1&&(w=w.substring(0,v)),f.push(w),h++}}break}let k=d.substring(0,E),y=k.indexOf("\0");if(y!==-1&&(k=k.substring(0,y)),!a&&n!=="\0"&&(k+=n),d=d.substring(E+n.length),m<o){m++;continue}if(r>0&&h>=r)break;if(i+h>=p)return _("",`mapfile: array element limit exceeded (${p})
|
|
516
|
+
`,1);f.push(k),h++}i===0&&ve(e,l);for(let E=0;E<f.length;E++)e.state.env.set(`${l}_${i+E}`,f[E]);let g=parseInt(e.state.env.get(`${l}__length`)||"0",10),b=i+f.length;return e.state.env.set(`${l}__length`,String(Math.max(g,b))),e.state.groupStdin!==void 0&&!s&&(e.state.groupStdin=""),_("","",0)}function Bi(e){if(!e.startsWith("__rw__:"))return null;let t=e.slice(7),s=t.indexOf(":");if(s===-1)return null;let n=Number.parseInt(t.slice(0,s),10);if(Number.isNaN(n)||n<0)return null;let r=s+1,i=t.slice(r,r+n),o=r+n+1,a=t.slice(o),l=a.indexOf(":");if(l===-1)return null;let c=Number.parseInt(a.slice(0,l),10);if(Number.isNaN(c)||c<0)return null;let u=a.slice(l+1);return{path:i,position:c,content:u}}function ji(e,t,s){return`__rw__:${e.length}:${e}:${t}:${s}`}function xs(e,t,s,n=-1){let r=!1,i=`
|
|
517
|
+
`,o="",a=-1,l=-1,c=null,u=-1,f=-1,d=[],h=0,m=!1,p=(A,P)=>{let N=1;for(;N<A.length;){let $=A[N];if($==="r")r=!0,N++;else if($==="s")N++;else{if($==="d")return N+1<A.length?(i=A.substring(N+1),{nextArgIndex:P+1}):P+1<t.length?(i=t[P+1],{nextArgIndex:P+2}):{nextArgIndex:P+1};if($==="n"){if(N+1<A.length){let O=A.substring(N+1);return a=Number.parseInt(O,10),(Number.isNaN(a)||a<0)&&(m=!0,a=0),{nextArgIndex:P+1}}else if(P+1<t.length)return a=Number.parseInt(t[P+1],10),(Number.isNaN(a)||a<0)&&(m=!0,a=0),{nextArgIndex:P+2};return{nextArgIndex:P+1}}else if($==="N"){if(N+1<A.length){let O=A.substring(N+1);return l=Number.parseInt(O,10),(Number.isNaN(l)||l<0)&&(m=!0,l=0),{nextArgIndex:P+1}}else if(P+1<t.length)return l=Number.parseInt(t[P+1],10),(Number.isNaN(l)||l<0)&&(m=!0,l=0),{nextArgIndex:P+2};return{nextArgIndex:P+1}}else{if($==="a")return N+1<A.length?(c=A.substring(N+1),{nextArgIndex:P+1}):P+1<t.length?(c=t[P+1],{nextArgIndex:P+2}):{nextArgIndex:P+1};if($==="p")return N+1<A.length?(o=A.substring(N+1),{nextArgIndex:P+1}):P+1<t.length?(o=t[P+1],{nextArgIndex:P+2}):{nextArgIndex:P+1};if($==="u"){if(N+1<A.length){let O=A.substring(N+1);return u=Number.parseInt(O,10),Number.isNaN(u)||u<0?{nextArgIndex:-2}:{nextArgIndex:P+1}}else if(P+1<t.length)return u=Number.parseInt(t[P+1],10),Number.isNaN(u)||u<0?{nextArgIndex:-2}:{nextArgIndex:P+2};return{nextArgIndex:P+1}}else if($==="t"){if(N+1<A.length){let O=A.substring(N+1);return f=Number.parseFloat(O),Number.isNaN(f)&&(f=0),{nextArgIndex:P+1}}else if(P+1<t.length)return f=Number.parseFloat(t[P+1]),Number.isNaN(f)&&(f=0),{nextArgIndex:P+2};return{nextArgIndex:P+1}}else if($==="e"||$==="i"||$==="P"){if($==="i"&&P+1<t.length)return{nextArgIndex:P+2};N++}else N++}}}return{nextArgIndex:P+1}};for(;h<t.length;){let A=t[h];if(A.startsWith("-")&&A.length>1&&A!=="--"){let P=p(A,h);if(P.nextArgIndex===-1)return{stdout:"",stderr:"",exitCode:2};if(P.nextArgIndex===-2)return{stdout:"",stderr:"",exitCode:1};h=P.nextArgIndex}else if(A==="--")for(h++;h<t.length;)d.push(t[h]),h++;else d.push(A),h++}if(m)return _("","",1);if(d.length===0&&c===null&&d.push("REPLY"),f===0){if(c)ve(e,c);else{for(let A of d)e.state.env.set(A,"");d.length===0&&e.state.env.set("REPLY","")}return _("","",0)}if(f<0&&f!==-1)return _("","",1);let g=s;u>=0?e.state.fileDescriptors?g=e.state.fileDescriptors.get(u)||"":g="":!g&&e.state.groupStdin!==void 0&&(g=e.state.groupStdin);let b=i===""?"\0":i,E="",k=0,y=!0,w=A=>{if(u>=0&&e.state.fileDescriptors)e.state.fileDescriptors.set(u,g.substring(A));else if(n>=0&&e.state.fileDescriptors){let P=e.state.fileDescriptors.get(n);if(P?.startsWith("__rw__:")){let N=Bi(P);if(N){let $=N.position+A;e.state.fileDescriptors.set(n,ji(N.path,$,N.content))}}}else e.state.groupStdin!==void 0&&!s&&(e.state.groupStdin=g.substring(A))};if(l>=0){let A=Math.min(l,g.length);E=g.substring(0,A),k=A,y=A>=l,w(k);let P=d[0]||"REPLY";e.state.env.set(P,E);for(let N=1;N<d.length;N++)e.state.env.set(d[N],"");return _("","",y?0:1)}else if(a>=0){let A=0,P=0,N=!1;for(;P<g.length&&A<a;){let $=g[P];if($===b){k=P+1,N=!0;break}if(!r&&$==="\\"&&P+1<g.length){let O=g[P+1];if(O===b&&b===`
|
|
518
|
+
`){P+=2,k=P;continue}if(O===b){P+=2,A++,E+=O,k=P;continue}E+=O,P+=2,A++,k=P}else E+=$,P++,A++,k=P}y=A>=a||N,w(k)}else{k=0;let A=0;for(;A<g.length;){let P=g[A];if(P===b){k=A+b.length,y=!0;break}if(!r&&P==="\\"&&A+1<g.length){let N=g[A+1];if(N===`
|
|
519
|
+
`){A+=2;continue}if(N===b){E+=N,A+=2;continue}E+=P,E+=N,A+=2;continue}E+=P,A++}if(A>=g.length&&(y=!1,k=A,E.length===0&&g.length===0)){for(let P of d)e.state.env.set(P,"");return c&&ve(e,c),_("","",1)}w(k)}b===`
|
|
520
|
+
`&&E.endsWith(`
|
|
521
|
+
`)&&(E=E.slice(0,-1));let v=A=>r?A:A.replace(/\\(.)/g,"$1");if(d.length===1&&d[0]==="REPLY")return e.state.env.set("REPLY",v(E)),_("","",y?0:1);let C=en(e.state.env);if(c){let{words:A}=Bt(E,C,void 0,r),P=e.limits?.maxArrayElements??1e5;if(A.length>P)return _("",`read: array element limit exceeded (${P})
|
|
522
|
+
`,1);ve(e,c);for(let N=0;N<A.length;N++)e.state.env.set(`${c}_${N}`,v(A[N]));return _("","",y?0:1)}let D=d.length,{words:T,wordStarts:I}=Bt(E,C,D,r);for(let A=0;A<d.length;A++){let P=d[A];if(A<d.length-1)e.state.env.set(P,v(T[A]??""));else if(A<I.length){let N=E.substring(I[A]);N=tn(N,C,r),N=v(N),e.state.env.set(P,N)}else e.state.env.set(P,"")}return _("","",y?0:1)}function Is(e,t){if(e.state.callDepth===0&&e.state.sourceDepth===0)return S("bash: return: can only `return' from a function or sourced script\n");let s=e.state.lastExitCode;if(t.length>0){let n=t[0],r=Number.parseInt(n,10);if(n===""||Number.isNaN(r)||!/^-?\d+$/.test(n))return S(`bash: return: ${n}: numeric argument required
|
|
523
|
+
`,2);s=(r%256+256)%256}throw new ne(s)}var xt=`set: usage: set [-eux] [+eux] [-o option] [+o option]
|
|
521
524
|
Options:
|
|
522
525
|
-e Exit immediately if a command exits with non-zero status
|
|
523
526
|
+e Disable -e
|
|
@@ -533,150 +536,153 @@ Options:
|
|
|
533
536
|
+o pipefail Disable pipefail
|
|
534
537
|
-o xtrace Same as -x
|
|
535
538
|
+o xtrace Disable xtrace
|
|
536
|
-
`,
|
|
539
|
+
`,er=new Map([["e","errexit"],["u","nounset"],["x","xtrace"],["v","verbose"],["f","noglob"],["C","noclobber"],["a","allexport"],["n","noexec"],["h",null],["b",null],["m",null],["B",null],["H",null],["P",null],["T",null],["E",null],["p",null]]),tr=new Map([["errexit","errexit"],["pipefail","pipefail"],["nounset","nounset"],["xtrace","xtrace"],["verbose","verbose"],["noclobber","noclobber"],["noglob","noglob"],["allexport","allexport"],["noexec","noexec"],["posix","posix"],["vi","vi"],["emacs","emacs"],["notify",null],["monitor",null],["braceexpand",null],["histexpand",null],["physical",null],["functrace",null],["errtrace",null],["privileged",null],["hashall",null],["ignoreeof",null],["interactive-comments",null],["keyword",null],["onecmd",null]]),sr=["errexit","nounset","pipefail","verbose","xtrace","posix","allexport","noclobber","noglob","noexec","vi","emacs"],nr=["braceexpand","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","nolog","notify","onecmd","physical","privileged"];function rr(e,t,s){t!==null&&(s&&(t==="vi"?e.state.options.emacs=!1:t==="emacs"&&(e.state.options.vi=!1)),e.state.options[t]=s,We(e))}function Hi(e,t){return t+1<e.length&&!e[t+1].startsWith("-")&&!e[t+1].startsWith("+")}function Ui(e,t){let s=Q(e,t);if(s.length===0)return`${t}=()`;let n=s.map(r=>{let i=e.state.env.get(`${t}_${r}`)??"";return`[${r}]=${Re(i)}`});return`${t}=(${n.join(" ")})`}function qi(e){return/^[a-zA-Z0-9_]+$/.test(e)?e:`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function Zi(e,t){let s=Pe(e,t);if(s.length===0)return`${t}=()`;let n=s.map(r=>{let i=e.state.env.get(`${t}_${r}`)??"";return`[${qi(r)}]=${Re(i)}`});return`${t}=(${n.join(" ")} )`}function Gi(e){let t=new Set,s=e.state.associativeArrays??new Set;for(let n of e.state.env.keys()){let r=n.match(/^([a-zA-Z_][a-zA-Z0-9_]*)_(\d+)$/);if(r){let i=r[1];s.has(i)||t.add(i)}}return t}function Ki(e){return e.state.associativeArrays??new Set}function Ls(e,t){if(t.includes("--help"))return F(xt);if(t.length===0){let n=Gi(e),r=Ki(e),i=l=>{for(let c of r){let u=`${c}_`,f=`${c}__length`;if(l!==f&&l.startsWith(u)){if(l.slice(u.length).startsWith("_length"))continue;return!0}}return!1},o=[];for(let[l,c]of e.state.env){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(l)||n.has(l)||r.has(l))continue;let u=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)_(\d+)$/);if(u&&n.has(u[1]))continue;let f=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)__length$/);f&&n.has(f[1])||i(l)||f&&r.has(f[1])||o.push([l,c])}let a=[];for(let[l,c]of o.sort(([u],[f])=>u<f?-1:u>f?1:0))a.push(`${l}=${Ot(c)}`);for(let l of[...n].sort((c,u)=>c<u?-1:c>u?1:0))a.push(Ui(e,l));for(let l of[...r].sort((c,u)=>c<u?-1:c>u?1:0))a.push(Zi(e,l));return a.sort((l,c)=>{let u=l.split("=")[0],f=c.split("=")[0];return u<f?-1:u>f?1:0}),F(a.length>0?`${a.join(`
|
|
537
540
|
`)}
|
|
538
|
-
`:"")}let s=0;for(;s<t.length;){let n=t[s];if((n==="-o"||n==="+o")&&
|
|
539
|
-
${
|
|
541
|
+
`:"")}let s=0;for(;s<t.length;){let n=t[s];if((n==="-o"||n==="+o")&&Hi(t,s)){let r=t[s+1];if(!tr.has(r)){let i=`bash: set: ${r}: invalid option name
|
|
542
|
+
${xt}`;if(e.state.options.posix)throw new pe(1,"",i);return S(i)}rr(e,tr.get(r)??null,n==="-o"),s+=2;continue}if(n==="-o"){let r=sr.map(a=>`${a.padEnd(16)}${e.state.options[a]?"on":"off"}`),i=nr.map(a=>`${a.padEnd(16)}off`),o=[...r,...i].sort();return F(`${o.join(`
|
|
540
543
|
`)}
|
|
541
|
-
`)}if(n==="+o"){let r=
|
|
544
|
+
`)}if(n==="+o"){let r=sr.map(a=>`set ${e.state.options[a]?"-o":"+o"} ${a}`),i=nr.map(a=>`set +o ${a}`),o=[...r,...i].sort();return F(`${o.join(`
|
|
542
545
|
`)}
|
|
543
|
-
`)}if(n.length>1&&(n[0]==="-"||n[0]==="+")&&n[1]!=="-"){let r=n[0]==="-";for(let i=1;i<n.length;i++){let
|
|
544
|
-
${
|
|
545
|
-
${
|
|
546
|
-
`;if(e.state.options.posix)throw new
|
|
547
|
-
`;if(e.state.options.posix)throw new
|
|
548
|
-
`,2);let n=s[0],r=null,i=null;if(n.includes("/")){let
|
|
549
|
-
`);let
|
|
550
|
-
`);throw
|
|
551
|
-
`,r=1;continue}let
|
|
552
|
-
`,r=1;continue}if(
|
|
553
|
-
`,r=1;continue}let
|
|
554
|
-
`,r=1;continue}let C=
|
|
555
|
-
`,r=1;continue}let
|
|
556
|
-
`,r=1;continue}let
|
|
557
|
-
`,r=1;continue}let m=await
|
|
558
|
-
`,r=1;continue}if(m===null)continue;if(m<0){let p=
|
|
559
|
-
`,r=1;continue}let
|
|
560
|
-
`,r=1;continue}let
|
|
561
|
-
`,r=1;continue}let
|
|
562
|
-
`,r=1;continue}let
|
|
563
|
-
`}}}
|
|
564
|
-
`};if(
|
|
546
|
+
`)}if(n.length>1&&(n[0]==="-"||n[0]==="+")&&n[1]!=="-"){let r=n[0]==="-";for(let i=1;i<n.length;i++){let o=n[i];if(!er.has(o)){let a=`bash: set: ${n[0]}${o}: invalid option
|
|
547
|
+
${xt}`;if(e.state.options.posix)throw new pe(1,"",a);return S(a)}rr(e,er.get(o)??null,r)}s++;continue}if(n==="--")return Rs(e,t.slice(s+1)),L;if(n==="-"){if(e.state.options.xtrace=!1,e.state.options.verbose=!1,We(e),s+1<t.length)return Rs(e,t.slice(s+1)),L;s++;continue}if(n==="+"){s++;continue}if(n.startsWith("-")||n.startsWith("+")){let r=`bash: set: ${n}: invalid option
|
|
548
|
+
${xt}`;if(e.state.options.posix)throw new pe(1,"",r);return S(r)}return Rs(e,t.slice(s)),L}return L}function Rs(e,t){let s=1;for(;e.state.env.has(String(s));)e.state.env.delete(String(s)),s++;for(let n=0;n<t.length;n++)e.state.env.set(String(n+1),t[n]);e.state.env.set("#",String(t.length)),e.state.env.set("@",t.join(" ")),e.state.env.set("*",t.join(" "))}function Fs(e,t){let s=1;if(t.length>0){let o=Number.parseInt(t[0],10);if(Number.isNaN(o)||o<0){let a=`bash: shift: ${t[0]}: numeric argument required
|
|
549
|
+
`;if(e.state.options.posix)throw new pe(1,"",a);return S(a)}s=o}let n=Number.parseInt(e.state.env.get("#")||"0",10);if(s>n){let o=`bash: shift: shift count out of range
|
|
550
|
+
`;if(e.state.options.posix)throw new pe(1,"",o);return S(o)}if(s===0)return L;let r=[];for(let o=1;o<=n;o++)r.push(e.state.env.get(String(o))||"");let i=r.slice(s);for(let o=1;o<=n;o++)e.state.env.delete(String(o));for(let o=0;o<i.length;o++)e.state.env.set(String(o+1),i[o]);return e.state.env.set("#",String(i.length)),e.state.env.set("@",i.join(" ")),L}async function Ms(e,t){let s=t;if(s.length>0&&s[0]==="--"&&(s=s.slice(1)),s.length===0)return _("",`bash: source: filename argument required
|
|
551
|
+
`,2);let n=s[0],r=null,i=null;if(n.includes("/")){let c=e.fs.resolvePath(e.state.cwd,n);try{i=await e.fs.readFile(c),r=c}catch{}}else{let u=(e.state.env.get("PATH")||"").split(":").filter(f=>f);for(let f of u){let d=e.fs.resolvePath(e.state.cwd,`${f}/${n}`);try{if((await e.fs.stat(d)).isDirectory)continue;i=await e.fs.readFile(d),r=d;break}catch{}}if(i===null){let f=e.fs.resolvePath(e.state.cwd,n);try{i=await e.fs.readFile(f),r=f}catch{}}}if(i===null)return S(`bash: ${n}: No such file or directory
|
|
552
|
+
`);let o=new Map;if(s.length>1){for(let u=1;u<=9;u++)o.set(String(u),e.state.env.get(String(u)));o.set("#",e.state.env.get("#")),o.set("@",e.state.env.get("@"));let c=s.slice(1);e.state.env.set("#",String(c.length)),e.state.env.set("@",c.join(" "));for(let u=0;u<c.length&&u<9;u++)e.state.env.set(String(u+1),c[u]);for(let u=c.length+1;u<=9;u++)e.state.env.delete(String(u))}let a=e.state.currentSource,l=()=>{if(e.state.sourceDepth--,e.state.currentSource=a,s.length>1)for(let[c,u]of o)u===void 0?e.state.env.delete(c):e.state.env.set(c,u)};e.state.sourceDepth++,e.state.currentSource=n;try{let c=we(i),u=await e.executeScript(c);return l(),u}catch(c){if(l(),c instanceof V)throw c;if(c instanceof ne)return _(c.stdout,c.stderr,c.exitCode);if(c.name==="ParseException")return S(`bash: ${n}: ${c.message}
|
|
553
|
+
`);throw c}}function ir(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function Xi(e){return e.startsWith("'")&&e.endsWith("'")||e.startsWith('"')&&e.endsWith('"')}async function or(e,t){if(Xi(t))return null;try{let s=new W,n=q(s,t);return await z(e,n.expression)}catch{let s=parseInt(t,10);return Number.isNaN(s)?0:s}}function ar(e,t){if(e.state.localVarStack?.has(t)){let n=Pt(e,t);if(n){n.value===void 0?e.state.env.delete(t):e.state.env.set(t,n.value);let r=e.state.localVarStack?.get(t);if(!r||r.length===0)Ct(e,t),e.state.localVarStack?.delete(t),e.state.fullyUnsetLocals=e.state.fullyUnsetLocals||new Map,e.state.fullyUnsetLocals.set(t,n.scopeIndex),Ws(e,t);else{let i=r[r.length-1];e.state.localVarDepth=e.state.localVarDepth||new Map,e.state.localVarDepth.set(t,i.scopeIndex+1)}return!0}return e.state.env.delete(t),Ct(e,t),e.state.localVarStack?.delete(t),e.state.fullyUnsetLocals=e.state.fullyUnsetLocals||new Map,e.state.fullyUnsetLocals.set(t,0),!0}for(let n=e.state.localScopes.length-1;n>=0;n--){let r=e.state.localScopes[n];if(r.has(t)){let i=r.get(t);i===void 0?e.state.env.delete(t):e.state.env.set(t,i),r.delete(t);let o=!1;for(let a=n-1;a>=0;a--)if(e.state.localScopes[a].has(t)){e.state.localVarDepth&&e.state.localVarDepth.set(t,a+1),o=!0;break}return o||Ct(e,t),!0}}return!1}function Ws(e,t){if(!e.state.tempEnvBindings||e.state.tempEnvBindings.length===0)return!1;for(let s=e.state.tempEnvBindings.length-1;s>=0;s--){let n=e.state.tempEnvBindings[s];if(n.has(t)){let r=n.get(t);return r===void 0?e.state.env.delete(t):e.state.env.set(t,r),n.delete(t),!0}}return!1}async function lr(e,t){if(t.startsWith("'")&&t.endsWith("'"))return t.slice(1,-1);if(t.startsWith('"')&&t.endsWith('"')){let s=t.slice(1,-1),r=new W().parseWordFromString(s,!0,!1);return x(e,r)}if(t.includes("$")){let n=new W().parseWordFromString(t,!1,!1);return x(e,n)}return t}async function Vs(e,t){let s="both",n="",r=0;for(let i of t){if(i==="-v"){s="variable";continue}if(i==="-f"){s="function";continue}if(s==="function"){e.state.functions.delete(i);continue}if(s==="variable"){let c=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(c){let d=c[1],h=c[2];if(h==="@"||h==="*"){let k=ye(e,d);for(let[y]of k)e.state.env.delete(`${d}_${y}`);e.state.env.delete(d);continue}let m=e.state.associativeArrays?.has(d);if(m){let k=await lr(e,h);e.state.env.delete(`${d}_${k}`);continue}let p=Ut(e,d),g=e.state.declaredVars?.has(d);if((e.state.env.has(d)||g)&&!p&&!m){n+=`bash: unset: ${d}: not an array variable
|
|
554
|
+
`,r=1;continue}let E=await or(e,h);if(E===null&&p){n+=`bash: unset: ${h}: not a valid identifier
|
|
555
|
+
`,r=1;continue}if(E===null)continue;if(E<0){let k=ye(e,d),y=k.length,w=e.state.currentLine;if(y===0){n+=`bash: line ${w}: unset: [${E}]: bad array subscript
|
|
556
|
+
`,r=1;continue}let v=y+E;if(v<0){n+=`bash: line ${w}: unset: [${E}]: bad array subscript
|
|
557
|
+
`,r=1;continue}let C=k[v][0];e.state.env.delete(`${d}_${C}`);continue}e.state.env.delete(`${d}_${E}`);continue}if(!ir(i)){n+=`bash: unset: \`${i}': not a valid identifier
|
|
558
|
+
`,r=1;continue}let u=i;if(de(e,i)){let d=ke(e,i);d&&d!==i&&(u=d)}if(xe(e,u)){n+=`bash: unset: ${u}: cannot unset: readonly variable
|
|
559
|
+
`,r=1;continue}let f=ze(e,u);if(f!==void 0&&f!==e.state.callDepth)ar(e,u);else if(e.state.fullyUnsetLocals?.has(u))e.state.env.delete(u);else if(f!==void 0){let d=e.state.accessedTempEnvVars?.has(u),h=e.state.mutatedTempEnvVars?.has(u);if((d||h)&&e.state.localVarStack?.has(u)){let m=Pt(e,u);m?m.value===void 0?e.state.env.delete(u):e.state.env.set(u,m.value):e.state.env.delete(u)}else e.state.env.delete(u)}else Ws(e,u)||e.state.env.delete(u);e.state.exportedVars?.delete(u);continue}let o=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(o){let c=o[1],u=o[2];if(u==="@"||u==="*"){let p=ye(e,c);for(let[g]of p)e.state.env.delete(`${c}_${g}`);e.state.env.delete(c);continue}let f=e.state.associativeArrays?.has(c);if(f){let p=await lr(e,u);e.state.env.delete(`${c}_${p}`);continue}let d=Ut(e,c);if(e.state.env.has(c)&&!d&&!f){n+=`bash: unset: ${c}: not an array variable
|
|
560
|
+
`,r=1;continue}let m=await or(e,u);if(m===null&&d){n+=`bash: unset: ${u}: not a valid identifier
|
|
561
|
+
`,r=1;continue}if(m===null)continue;if(m<0){let p=ye(e,c),g=p.length,b=e.state.currentLine;if(g===0){n+=`bash: line ${b}: unset: [${m}]: bad array subscript
|
|
562
|
+
`,r=1;continue}let E=g+m;if(E<0){n+=`bash: line ${b}: unset: [${m}]: bad array subscript
|
|
563
|
+
`,r=1;continue}let k=p[E][0];e.state.env.delete(`${c}_${k}`);continue}e.state.env.delete(`${c}_${m}`);continue}if(!ir(i)){n+=`bash: unset: \`${i}': not a valid identifier
|
|
564
|
+
`,r=1;continue}let a=i;if(de(e,i)){let c=ke(e,i);c&&c!==i&&(a=c)}if(xe(e,a)){n+=`bash: unset: ${a}: cannot unset: readonly variable
|
|
565
|
+
`,r=1;continue}let l=ze(e,a);if(l!==void 0&&l!==e.state.callDepth)ar(e,a);else if(e.state.fullyUnsetLocals?.has(a))e.state.env.delete(a);else if(l!==void 0){let c=e.state.accessedTempEnvVars?.has(a),u=e.state.mutatedTempEnvVars?.has(a);if((c||u)&&e.state.localVarStack?.has(a)){let f=Pt(e,a);f?f.value===void 0?e.state.env.delete(a):e.state.env.set(a,f.value):e.state.env.delete(a)}else e.state.env.delete(a)}else Ws(e,a)||e.state.env.delete(a);e.state.exportedVars?.delete(a),e.state.functions.delete(i)}return _("",n,r)}var zs=["extglob","dotglob","nullglob","failglob","globstar","globskipdots","nocaseglob","nocasematch","expand_aliases","lastpipe","xpg_echo"],Yi=["autocd","cdable_vars","cdspell","checkhash","checkjobs","checkwinsize","cmdhist","compat31","compat32","compat40","compat41","compat42","compat43","compat44","complete_fullquote","direxpand","dirspell","execfail","extdebug","extquote","force_fignore","globasciiranges","gnu_errfmt","histappend","histreedit","histverify","hostcomplete","huponexit","inherit_errexit","interactive_comments","lithist","localvar_inherit","localvar_unset","login_shell","mailwarn","no_empty_cmd_completion","progcomp","progcomp_alias","promptvars","restricted_shell","shift_verbose","sourcepath"];function It(e){return zs.includes(e)}function Qi(e){return Yi.includes(e)}function cr(e,t){let s=!1,n=!1,r=!1,i=!1,o=!1,a=[],l=0;for(;l<t.length;){let d=t[l];if(d==="--"){l++;break}if(d.startsWith("-")&&d.length>1){for(let h=1;h<d.length;h++){let m=d[h];switch(m){case"s":s=!0;break;case"u":n=!0;break;case"p":r=!0;break;case"q":i=!0;break;case"o":o=!0;break;default:return{exitCode:2,stdout:"",stderr:`shopt: -${m}: invalid option
|
|
566
|
+
`}}}l++}else break}for(;l<t.length;)a.push(t[l]),l++;if(o)return Ji(e,a,s,n,r,i);if(s&&n)return{exitCode:1,stdout:"",stderr:`shopt: cannot set and unset shell options simultaneously
|
|
567
|
+
`};if(a.length===0){if(s||n){let h=[];for(let m of zs){let p=e.state.shoptOptions[m];s&&p?h.push(r?`shopt -s ${m}`:`${m} on`):n&&!p&&h.push(r?`shopt -u ${m}`:`${m} off`)}return{exitCode:0,stdout:h.length>0?`${h.join(`
|
|
565
568
|
`)}
|
|
566
|
-
`:"",stderr:""}}let d=[];for(let h of
|
|
569
|
+
`:"",stderr:""}}let d=[];for(let h of zs){let m=e.state.shoptOptions[h];d.push(r?`shopt ${m?"-s":"-u"} ${h}`:`${h} ${m?"on":"off"}`)}return{exitCode:0,stdout:`${d.join(`
|
|
567
570
|
`)}
|
|
568
|
-
`,stderr:""}}let
|
|
569
|
-
`,
|
|
571
|
+
`,stderr:""}}let c=!1,u="",f=[];for(let d of a){if(!It(d)&&!Qi(d)){u+=`shopt: ${d}: invalid shell option name
|
|
572
|
+
`,c=!0;continue}if(s)It(d)&&(e.state.shoptOptions[d]=!0,Yt(e));else if(n)It(d)&&(e.state.shoptOptions[d]=!1,Yt(e));else if(It(d)){let h=e.state.shoptOptions[d];i?h||(c=!0):r?(f.push(`shopt ${h?"-s":"-u"} ${d}`),h||(c=!0)):(f.push(`${d} ${h?"on":"off"}`),h||(c=!0))}else i?c=!0:r?(f.push(`shopt -u ${d}`),c=!0):(f.push(`${d} off`),c=!0)}return{exitCode:c?1:0,stdout:f.length>0?`${f.join(`
|
|
570
573
|
`)}
|
|
571
|
-
`:"",stderr:
|
|
574
|
+
`:"",stderr:u}}function Ji(e,t,s,n,r,i){let o=new Map([["errexit","errexit"],["pipefail","pipefail"],["nounset","nounset"],["xtrace","xtrace"],["verbose","verbose"],["posix","posix"],["allexport","allexport"],["noclobber","noclobber"],["noglob","noglob"],["noexec","noexec"],["vi","vi"],["emacs","emacs"]]),a=["braceexpand","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","nolog","notify","onecmd","physical","privileged"],l=[...o.keys(),...a].sort();if(t.length===0){let d=[];for(let h of l){let m=a.includes(h),p=o.get(h),g=m||!p?!1:e.state.options[p];s&&!g||n&&g||d.push(r?`set ${g?"-o":"+o"} ${h}`:`${h} ${g?"on":"off"}`)}return{exitCode:0,stdout:d.length>0?`${d.join(`
|
|
572
575
|
`)}
|
|
573
|
-
`:"",stderr:""}}let
|
|
574
|
-
`,
|
|
576
|
+
`:"",stderr:""}}let c=!1,u="",f=[];for(let d of t){let h=o.has(d),m=a.includes(d);if(!h&&!m){u+=`shopt: ${d}: invalid option name
|
|
577
|
+
`,c=!0;continue}if(m){s||n||(i?c=!0:r?(f.push(`set +o ${d}`),c=!0):(f.push(`${d} off`),c=!0));continue}let p=o.get(d);if(p)if(s)p==="vi"?e.state.options.emacs=!1:p==="emacs"&&(e.state.options.vi=!1),e.state.options[p]=!0,We(e);else if(n)e.state.options[p]=!1,We(e);else{let g=e.state.options[p];i?g||(c=!0):r?(f.push(`set ${g?"-o":"+o"} ${d}`),g||(c=!0)):(f.push(`${d} ${g?"on":"off"}`),g||(c=!0))}}return{exitCode:c?1:0,stdout:f.length>0?`${f.join(`
|
|
575
578
|
`)}
|
|
576
|
-
`:"",stderr:
|
|
577
|
-
`;h=!0,g=!0}}else{let
|
|
578
|
-
`,h=!0,g=!0)}g||(m=!0);continue}let
|
|
579
|
-
`;else{let
|
|
580
|
-
`;
|
|
581
|
-
`:
|
|
582
|
-
`),g=!0,!
|
|
583
|
-
`:
|
|
584
|
-
`),g=!0,!
|
|
585
|
-
`;else{let
|
|
586
|
-
`;
|
|
587
|
-
`:
|
|
588
|
-
`),g=!0,!
|
|
589
|
-
`:r?
|
|
590
|
-
`:
|
|
591
|
-
`,h=!0,g=!0}else if(!g){let
|
|
592
|
-
`:r?
|
|
593
|
-
`:
|
|
594
|
-
`,h=!0,g=!0)}if(!g&&(m=!0,!r&&!i)){let
|
|
595
|
-
`)}}}return i?d=m&&!h?1:0:d=m?1:0,_(
|
|
579
|
+
`:"",stderr:u}}async function ur(e,t,s){if(t.includes("/")){let o=e.fs.resolvePath(e.state.cwd,t);if(!await e.fs.exists(o))return{error:"not_found",path:o};let a=o.split("/").pop()||t,l=e.commands.get(a);try{let c=await e.fs.stat(o);return c.isDirectory?{error:"permission_denied",path:o}:l?{cmd:l,path:o}:(c.mode&73)!==0?{script:!0,path:o}:{error:"permission_denied",path:o}}catch{return{error:"not_found",path:o}}}if(!s&&e.state.hashTable){let o=e.state.hashTable.get(t);if(o)if(await e.fs.exists(o)){let a=e.commands.get(t);if(a)return{cmd:a,path:o};try{let l=await e.fs.stat(o);if(!l.isDirectory&&(l.mode&73)!==0)return{script:!0,path:o}}catch{}}else e.state.hashTable.delete(t)}let r=(s??e.state.env.get("PATH")??"/usr/bin:/bin").split(":");for(let o of r){if(!o)continue;let l=`${o.startsWith("/")?o:e.fs.resolvePath(e.state.cwd,o)}/${t}`;if(await e.fs.exists(l))try{let c=await e.fs.stat(l);if(c.isDirectory)continue;let u=(c.mode&73)!==0,f=e.commands.get(t),d=o==="/bin"||o==="/usr/bin";if(f&&d)return{cmd:f,path:l};if(u){if(f&&!d)return{script:!0,path:l};if(!f)return{script:!0,path:l}}}catch{}}if(!await e.fs.exists("/usr/bin")){let o=e.commands.get(t);if(o)return{cmd:o,path:`/usr/bin/${t}`}}return null}async function Rt(e,t){let s=[];if(t.includes("/")){let i=e.fs.resolvePath(e.state.cwd,t);if(await e.fs.exists(i))try{let o=await e.fs.stat(i);o.isDirectory||(o.mode&73)!==0&&s.push(t)}catch{}return s}let r=(e.state.env.get("PATH")||"/usr/bin:/bin").split(":");for(let i of r){if(!i)continue;let a=`${i.startsWith("/")?i:e.fs.resolvePath(e.state.cwd,i)}/${t}`;if(await e.fs.exists(a)){try{if((await e.fs.stat(a)).isDirectory)continue}catch{continue}s.push(i.startsWith("/")?a:`${i}/${t}`)}}return s}async function pr(e,t,s,n){let r=!1,i=!1,o=!1,a=!1,l=!1,c=[];for(let p of t)if(p.startsWith("-")&&p.length>1)for(let g of p.slice(1))g==="t"?r=!0:g==="p"?i=!0:g==="P"?o=!0:g==="a"?a=!0:g==="f"&&(l=!0);else c.push(p);let u="",f="",d=0,h=!1,m=!1;for(let p of c){let g=!1;if(o){if(a){let v=await n(p);if(v.length>0){for(let C of v)u+=`${C}
|
|
580
|
+
`;h=!0,g=!0}}else{let v=await s(p);v&&(u+=`${v}
|
|
581
|
+
`,h=!0,g=!0)}g||(m=!0);continue}let b=!l&&e.state.functions.has(p);if(a&&b){if(!i)if(r)u+=`function
|
|
582
|
+
`;else{let v=e.state.functions.get(p),C=v?fr(p,v):`${p} is a function
|
|
583
|
+
`;u+=C}g=!0}let E=e.state.env.get(`BASH_ALIAS_${p}`);if(E!==void 0&&(a||!g)&&(i||(r?u+=`alias
|
|
584
|
+
`:u+=`${p} is aliased to \`${E}'
|
|
585
|
+
`),g=!0,!a)||is.has(p)&&(a||!g)&&(i||(r?u+=`keyword
|
|
586
|
+
`:u+=`${p} is a shell keyword
|
|
587
|
+
`),g=!0,!a))continue;if(!a&&b&&!g){if(!i)if(r)u+=`function
|
|
588
|
+
`;else{let v=e.state.functions.get(p),C=v?fr(p,v):`${p} is a function
|
|
589
|
+
`;u+=C}g=!0;continue}if(!(Xe.has(p)&&(a||!g)&&(i||(r?u+=`builtin
|
|
590
|
+
`:u+=`${p} is a shell builtin
|
|
591
|
+
`),g=!0,!a))){if(a){let v=await n(p);for(let C of v)i?u+=`${C}
|
|
592
|
+
`:r?u+=`file
|
|
593
|
+
`:u+=`${p} is ${C}
|
|
594
|
+
`,h=!0,g=!0}else if(!g){let v=await s(p);v&&(i?u+=`${v}
|
|
595
|
+
`:r?u+=`file
|
|
596
|
+
`:u+=`${p} is ${v}
|
|
597
|
+
`,h=!0,g=!0)}if(!g&&(m=!0,!r&&!i)){let v=!0;if(p.includes("/")){let C=e.fs.resolvePath(e.state.cwd,p);await e.fs.exists(C)&&(v=!1)}v&&(f+=`bash: type: ${p}: not found
|
|
598
|
+
`)}}}return i?d=m&&!h?1:0:d=m?1:0,_(u,f,d)}function fr(e,t){let s;return t.body.type==="Group"?s=t.body.body.map(r=>Je(r)).join("; "):s=Je(t.body),`${e} is a function
|
|
596
599
|
${e} ()
|
|
597
600
|
{
|
|
598
601
|
${s}
|
|
599
602
|
}
|
|
600
|
-
`}function
|
|
601
|
-
`:r+=`alias ${
|
|
602
|
-
`;else if(
|
|
603
|
-
`:r+=`${
|
|
604
|
-
`;else if(
|
|
605
|
-
`:r+=`${
|
|
606
|
-
`;else if(e.state.functions.has(
|
|
607
|
-
`:r+=`${
|
|
608
|
-
`;else if(
|
|
609
|
-
`:r+=`${
|
|
610
|
-
`,
|
|
611
|
-
`),
|
|
612
|
-
`:r+=`${
|
|
613
|
-
`}else n&&(i+=`${
|
|
614
|
-
`),
|
|
615
|
-
`);let[,...
|
|
603
|
+
`}function Je(e){if(Array.isArray(e))return e.map(t=>Je(t)).join("; ");if(e.type==="Statement"){let t=[];for(let s=0;s<e.pipelines.length;s++){let n=e.pipelines[s];t.push(eo(n)),e.operators[s]&&t.push(e.operators[s])}return t.join(" ")}if(e.type==="SimpleCommand"){let t=e,s=[];t.name&&s.push(dr(t.name));for(let n of t.args)s.push(dr(n));return s.join(" ")}return e.type==="Group"?`{ ${e.body.map(n=>Je(n)).join("; ")}; }`:"..."}function eo(e){let t=e.commands.map(s=>Je(s));return(e.negated?"! ":"")+t.join(" | ")}function dr(e){let t="";for(let s of e.parts)s.type==="Literal"?t+=s.value:s.type==="DoubleQuoted"?t+=`"${s.parts.map(n=>hr(n)).join("")}"`:s.type==="SingleQuoted"?t+=`'${s.value}'`:t+=hr(s);return t}function hr(e){let t=e;return t.type==="Literal"?t.value??"":t.type==="Variable"?`$${t.name}`:""}async function mr(e,t,s,n){let r="",i="",o=0;for(let a of t){if(!a){o=1;continue}let l=e.state.env.get(`BASH_ALIAS_${a}`);if(l!==void 0)n?r+=`${a} is an alias for "${l}"
|
|
604
|
+
`:r+=`alias ${a}='${l}'
|
|
605
|
+
`;else if(is.has(a))n?r+=`${a} is a shell keyword
|
|
606
|
+
`:r+=`${a}
|
|
607
|
+
`;else if(Xe.has(a))n?r+=`${a} is a shell builtin
|
|
608
|
+
`:r+=`${a}
|
|
609
|
+
`;else if(e.state.functions.has(a))n?r+=`${a} is a function
|
|
610
|
+
`:r+=`${a}
|
|
611
|
+
`;else if(a.includes("/")){let c=e.fs.resolvePath(e.state.cwd,a),u=!1;if(await e.fs.exists(c))try{let f=await e.fs.stat(c);f.isDirectory||(f.mode&73)!==0&&(n?r+=`${a} is ${a}
|
|
612
|
+
`:r+=`${a}
|
|
613
|
+
`,u=!0)}catch{}u||(n&&(i+=`${a}: not found
|
|
614
|
+
`),o=1)}else if(e.commands.has(a)){let u=(e.state.env.get("PATH")??"/usr/bin:/bin").split(":"),f=null;for(let d of u){if(!d)continue;let h=`${d}/${a}`;try{let m=await e.fs.stat(h);if(!m.isDirectory&&(m.mode&73)!==0){f=h;break}}catch{}}f||(f=`/usr/bin/${a}`),n?r+=`${a} is ${f}
|
|
615
|
+
`:r+=`${f}
|
|
616
|
+
`}else n&&(i+=`${a}: not found
|
|
617
|
+
`),o=1}return _(r,i,o)}async function yr(e,t){if(t.includes("/")){let r=e.fs.resolvePath(e.state.cwd,t);if(await e.fs.exists(r)){try{let i=await e.fs.stat(r);if(i.isDirectory||!((i.mode&73)!==0))return null}catch{return null}return t}return null}let n=(e.state.env.get("PATH")??"/usr/bin:/bin").split(":");for(let r of n){if(!r)continue;let o=`${r.startsWith("/")?r:e.fs.resolvePath(e.state.cwd,r)}/${t}`;if(await e.fs.exists(o)){try{if((await e.fs.stat(o)).isDirectory)continue}catch{continue}return`${r}/${t}`}}if(e.commands.has(t)){for(let r of n)if(r==="/usr/bin"||r==="/bin")return`${r}/${t}`;return`/usr/bin/${t}`}return null}async function gr(e,t,s,n,r,i,o,a){let{ctx:l,runCommand:c}=e;if(t==="export")return Ps(l,s);if(t==="unset")return Vs(l,s);if(t==="exit")return Cs(l,s);if(t==="local")return Ds(l,s);if(t==="set")return Ls(l,s);if(t==="break")return Jt(l,s);if(t==="continue")return ds(l,s);if(t==="return")return Is(l,s);if(t==="eval"&&l.state.options.posix)return Dt(l,s,r);if(t==="shift")return Fs(l,s);if(t==="getopts")return Tt(l,s);if(t==="compgen")return ls(l,s);if(t==="complete")return us(l,s);if(t==="compopt")return fs(l,s);if(t==="pushd")return await Ss(l,s);if(t==="popd")return As(l,s);if(t==="dirs")return _s(l,s);if(t==="source"||t===".")return Ms(l,s);if(t==="read")return xs(l,s,r,a);if(t==="mapfile"||t==="readarray")return Ts(l,s,r);if(t==="declare"||t==="typeset")return bs(l,s);if(t==="readonly")return Es(l,s);if(!i){let u=l.state.functions.get(t);if(u)return Nt(l,u,s,r)}if(t==="eval")return Dt(l,s,r);if(t==="cd")return await es(l,s);if(t===":"||t==="true")return L;if(t==="false")return U(!1);if(t==="let")return Os(l,s);if(t==="command")return to(e,s,r);if(t==="builtin")return so(e,s,r);if(t==="shopt")return cr(l,s);if(t==="exec"){if(s.length===0)return L;let[u,...f]=s;return c(u,f,[],r,!1,!1,-1)}if(t==="wait")return L;if(t==="type")return await pr(l,s,u=>yr(l,u),u=>Rt(l,u));if(t==="hash")return ks(l,s);if(t==="help")return Ns(l,s);if(t==="["||t==="test"){let u=s;if(t==="["){if(s[s.length-1]!=="]")return S("[: missing `]'\n",2);u=s.slice(0,-1)}return Ke(l,u)}return null}async function to(e,t,s){let{ctx:n,runCommand:r}=e;if(t.length===0)return L;let i=!1,o=!1,a=!1,l=t;for(;l.length>0&&l[0].startsWith("-");){let f=l[0];if(f==="--"){l=l.slice(1);break}for(let d of f.slice(1))d==="p"?i=!0:d==="V"?o=!0:d==="v"&&(a=!0);l=l.slice(1)}if(l.length===0)return L;if(a||o)return await mr(n,l,a,o);let[c,...u]=l;return r(c,u,[],s,!0,i,-1)}async function so(e,t,s){let{runCommand:n}=e;if(t.length===0)return L;let r=t;if(r[0]==="--"&&(r=r.slice(1),r.length===0))return L;let i=r[0];if(!Xe.has(i))return S(`bash: builtin: ${i}: not a shell builtin
|
|
618
|
+
`);let[,...o]=r;return n(i,o,[],s,!0,!1,-1)}async function wr(e,t,s,n,r){let{ctx:i,buildExportedEnv:o,executeUserScript:a}=e,c=await ur(i,t,r?"/usr/bin:/bin":void 0);if(!c)return Cn(t)?S(`bash: ${t}: command not available in browser environments. Exclude '${t}' from your commands or use the Node.js bundle.
|
|
616
619
|
`,127):S(`bash: ${t}: command not found
|
|
617
|
-
`,127);if("error"in
|
|
620
|
+
`,127);if("error"in c)return c.error==="permission_denied"?S(`bash: ${t}: Permission denied
|
|
618
621
|
`,126):S(`bash: ${t}: No such file or directory
|
|
619
|
-
`,127);if("script"in
|
|
620
|
-
`)}}async function
|
|
621
|
-
`,exitCode:1}}async function
|
|
622
|
-
`,exitCode:1}}return{stdout:r,stderr:i,exitCode:
|
|
623
|
-
`);let
|
|
622
|
+
`,127);if("script"in c)return t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,c.path)),await a(c.path,s,n);let{cmd:u,path:f}=c;t.includes("/")||(i.state.hashTable||(i.state.hashTable=new Map),i.state.hashTable.set(t,f));let d=n||i.state.groupStdin||"",h=o(),m={fs:i.fs,cwd:i.state.cwd,env:i.state.env,exportedEnv:h,stdin:d,limits:i.limits,exec:i.execFn,fetch:i.fetch,getRegisteredCommands:()=>Array.from(i.commands.keys()),sleep:i.sleep,trace:i.trace,fileDescriptors:i.state.fileDescriptors,xpgEcho:i.state.shoptOptions.xpg_echo};try{return await u.execute(s,m)}catch(p){return S(`${t}: ${he(p)}
|
|
623
|
+
`)}}async function Bs(e,t){let s=e.state.inCondition;e.state.inCondition=!0;let n="",r="",i=0;try{for(let o of t){let a=await e.executeStatement(o);n+=a.stdout,r+=a.stderr,i=a.exitCode}}finally{e.state.inCondition=s}return{stdout:n,stderr:r,exitCode:i}}function et(e,t,s,n){if(e instanceof le)return t+=e.stdout,s+=e.stderr,e.levels>1&&n>1?(e.levels--,e.stdout=t,e.stderr=s,{action:"rethrow",stdout:t,stderr:s,error:e}):{action:"break",stdout:t,stderr:s};if(e instanceof ce)return t+=e.stdout,s+=e.stderr,e.levels>1&&n>1?(e.levels--,e.stdout=t,e.stderr=s,{action:"rethrow",stdout:t,stderr:s,error:e}):{action:"continue",stdout:t,stderr:s};if(e instanceof ne||e instanceof fe||e instanceof V||e instanceof se)return e.prependOutput(t,s),{action:"rethrow",stdout:t,stderr:s,error:e};let r=he(e);return{action:"error",stdout:t,stderr:`${s}${r}
|
|
624
|
+
`,exitCode:1}}async function Lt(e,t,s="",n=""){let r=s,i=n,o=0;try{for(let a of t){let l=await e.executeStatement(a);r+=l.stdout,i+=l.stderr,o=l.exitCode}}catch(a){if(at(a)||a instanceof fe||a instanceof V||a instanceof se||a instanceof _e)throw a.prependOutput(r,i),a;return{stdout:r,stderr:`${i}${he(a)}
|
|
625
|
+
`,exitCode:1}}return{stdout:r,stderr:i,exitCode:o}}async function vr(e,t){let s="",n="";for(let r of t.clauses){let i=await Bs(e,r.condition);if(s+=i.stdout,n+=i.stderr,i.exitCode===0)return Lt(e,r.body,s,n)}return t.elseBody?Lt(e,t.elseBody,s,n):_(s,n,0)}async function br(e,t){let s=await $e(e,t.redirections);if(s)return s;let n="",r="",i=0,o=0;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t.variable))return S(`bash: \`${t.variable}': not a valid identifier
|
|
626
|
+
`);let a=[];if(t.words===null)a=(e.state.env.get("@")||"").split(" ").filter(Boolean);else if(t.words.length===0)a=[];else try{for(let c of t.words){let u=await be(e,c);a.push(...u.values)}}catch(c){if(c instanceof ot)return{stdout:"",stderr:c.stderr,exitCode:1};throw c}e.state.loopDepth++;try{for(let c of a){o++,o>e.limits.maxLoopIterations&&Ae(`for loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r),e.state.env.set(t.variable,c);try{for(let u of t.body){let f=await e.executeStatement(u);n+=f.stdout,r+=f.stderr,i=f.exitCode}}catch(u){let f=et(u,n,r,e.state.loopDepth);if(n=f.stdout,r=f.stderr,f.action==="break")break;if(f.action==="continue")continue;if(f.action==="error"){let d=_(n,r,f.exitCode??1);return B(e,d,t.redirections)}throw f.error}}}finally{e.state.loopDepth--}let l=_(n,r,i);return B(e,l,t.redirections)}async function Er(e,t){let s=await $e(e,t.redirections);if(s)return s;let n=t.line;n!==void 0&&(e.state.currentLine=n);let r="",i="",o=0,a=0;t.init&&await z(e,t.init.expression),e.state.loopDepth++;try{for(;a++,a>e.limits.maxLoopIterations&&Ae(`for loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,i),!(t.condition&&(n!==void 0&&(e.state.currentLine=n),await z(e,t.condition.expression)===0));){try{for(let c of t.body){let u=await e.executeStatement(c);r+=u.stdout,i+=u.stderr,o=u.exitCode}}catch(c){let u=et(c,r,i,e.state.loopDepth);if(r=u.stdout,i=u.stderr,u.action==="break")break;if(u.action==="continue"){t.update&&await z(e,t.update.expression);continue}if(u.action==="error"){let f=_(r,i,u.exitCode??1);return B(e,f,t.redirections)}throw u.error}t.update&&await z(e,t.update.expression)}}finally{e.state.loopDepth--}let l=_(r,i,o);return B(e,l,t.redirections)}async function $r(e,t,s=""){let n="",r="",i=0,o=0,a=s;for(let c of t.redirections)if((c.operator==="<<"||c.operator==="<<-")&&c.target.type==="HereDoc"){let u=c.target,f=await x(e,u.content);u.stripTabs&&(f=f.split(`
|
|
624
627
|
`).map(d=>d.replace(/^\t+/,"")).join(`
|
|
625
|
-
`)),
|
|
626
|
-
`;else if(
|
|
627
|
-
`)}let
|
|
628
|
-
`,t||
|
|
629
|
-
`),r=e.includes(" "),i=e.includes("\\"),
|
|
630
|
-
`?
|
|
631
|
-
`}async function
|
|
632
|
-
`:""}async function
|
|
628
|
+
`)),a=f}else if(c.operator==="<<<"&&c.target.type==="Word")a=`${await x(e,c.target)}
|
|
629
|
+
`;else if(c.operator==="<"&&c.target.type==="Word")try{let u=await x(e,c.target),f=e.fs.resolvePath(e.state.cwd,u);a=await e.fs.readFile(f)}catch{let u=await x(e,c.target);return S(`bash: ${u}: No such file or directory
|
|
630
|
+
`)}let l=e.state.groupStdin;a&&(e.state.groupStdin=a),e.state.loopDepth++;try{for(;;){o++,o>e.limits.maxLoopIterations&&Ae(`while loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r);let c=0,u=!1,f=!1,d=e.state.inCondition;e.state.inCondition=!0;try{for(let h of t.condition){let m=await e.executeStatement(h);n+=m.stdout,r+=m.stderr,c=m.exitCode}}catch(h){if(h instanceof le){if(n+=h.stdout,r+=h.stderr,h.levels>1&&e.state.loopDepth>1)throw h.levels--,h.stdout=n,h.stderr=r,e.state.inCondition=d,h;u=!0}else if(h instanceof ce){if(n+=h.stdout,r+=h.stderr,h.levels>1&&e.state.loopDepth>1)throw h.levels--,h.stdout=n,h.stderr=r,e.state.inCondition=d,h;f=!0}else throw e.state.inCondition=d,h}finally{e.state.inCondition=d}if(u)break;if(!f){if(c!==0)break;try{for(let h of t.body){let m=await e.executeStatement(h);n+=m.stdout,r+=m.stderr,i=m.exitCode}}catch(h){let m=et(h,n,r,e.state.loopDepth);if(n=m.stdout,r=m.stderr,m.action==="break")break;if(m.action==="continue")continue;if(m.action==="error")return _(n,r,m.exitCode??1);throw m.error}}}}finally{e.state.loopDepth--,e.state.groupStdin=l}return _(n,r,i)}async function Sr(e,t){let s="",n="",r=0,i=0;e.state.loopDepth++;try{for(;;){i++,i>e.limits.maxLoopIterations&&Ae(`until loop: too many iterations (${e.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",s,n);let o=await Bs(e,t.condition);if(s+=o.stdout,n+=o.stderr,o.exitCode===0)break;try{for(let a of t.body){let l=await e.executeStatement(a);s+=l.stdout,n+=l.stderr,r=l.exitCode}}catch(a){let l=et(a,s,n,e.state.loopDepth);if(s=l.stdout,n=l.stderr,l.action==="break")break;if(l.action==="continue")continue;if(l.action==="error")return _(s,n,l.exitCode??1);throw l.error}}}finally{e.state.loopDepth--}return _(s,n,r)}async function Ar(e,t){let s=await $e(e,t.redirections);if(s)return s;let n="",r="",i=0,o=await x(e,t.word),a=!1;for(let c=0;c<t.items.length;c++){let u=t.items[c],f=a;if(!a)for(let d of u.patterns){let h=await x(e,d);cn(d)&&(h=an(h));let m=e.state.shoptOptions.nocasematch,p=e.state.shoptOptions.extglob;if(Ve(o,h,m,p)){f=!0;break}}if(f){let d=await Lt(e,u.body,n,r);if(n=d.stdout,r=d.stderr,i=d.exitCode,u.terminator===";;")break;u.terminator===";&"?a=!0:a=!1}else a=!1}let l=_(n,r,i);return B(e,l,t.redirections)}function js(e,t){if(e.parts.length!==1)return!1;let s=e.parts[0];return s.type!=="Literal"?!1:t.includes(s.value)}function _r(e){if(!e.startsWith("__rw__:"))return null;let t=e.slice(7),s=t.indexOf(":");if(s===-1)return null;let n=Number.parseInt(t.slice(0,s),10);if(Number.isNaN(n)||n<0)return null;let r=s+1,i=t.slice(r,r+n),o=r+n+1,a=t.slice(o),l=a.indexOf(":");if(l===-1)return null;let c=Number.parseInt(a.slice(0,l),10);if(Number.isNaN(c)||c<0)return null;let u=a.slice(l+1);return{path:i,position:c,content:u}}var Cr="+ ";async function Pr(e){let t=e.state.env.get("PS4");if(t===void 0)return Cr;if(t==="")return"";try{let n=new W().parseWordFromString(t,!1,!1);return await x(e,n)}catch{return e.state.expansionStderr=`${e.state.expansionStderr||""}bash: ${t}: bad substitution
|
|
631
|
+
`,t||Cr}}function no(e){return e.map(t=>ro(t)).join(" ")}function ro(e){if(e==="")return"''";if(!/[\s'"\\$`!*?[\]{}|&;<>()~#\n\t]/.test(e))return e;let s=/[\x00-\x1f\x7f]/.test(e),n=e.includes(`
|
|
632
|
+
`),r=e.includes(" "),i=e.includes("\\"),o=e.includes("'");if(s||n||r||i){let l="";for(let c of e){let u=c.charCodeAt(0);c===`
|
|
633
|
+
`?l+="\\n":c===" "?l+="\\t":c==="\\"?l+="\\\\":c==="'"?l+="'":c==='"'?l+='"':u<32||u===127?u<256?l+=`\\x${u.toString(16).padStart(2,"0")}`:l+=`\\u${u.toString(16).padStart(4,"0")}`:l+=c}return`$'${l}'`}return o?`"${e.replace(/([\\$`"])/g,"\\$1")}"`:`'${e}'`}async function kr(e,t,s){if(!e.state.options.xtrace)return"";let n=await Pr(e),r=[t,...s],i=no(r);return`${n}${i}
|
|
634
|
+
`}async function Nr(e,t,s){return e.state.options.xtrace?`${await Pr(e)}${t}=${s}
|
|
635
|
+
`:""}async function Or(e,t,s){let n=t.timed?performance.now():0,r="",i=L,o=0,a=[],l=t.commands.length>1,c=e.state.lastArg;for(let f=0;f<t.commands.length;f++){let d=t.commands[f],h=f===t.commands.length-1;l&&(e.state.lastArg="");let p=l&&(!h||!e.state.shoptOptions.lastpipe)?new Map(e.state.env):null,g;try{g=await s(d,r)}catch(b){if(b instanceof it)g={stdout:b.stdout,stderr:b.stderr,exitCode:1};else if(b instanceof V&&t.commands.length>1)g={stdout:b.stdout,stderr:b.stderr,exitCode:b.exitCode};else if(b instanceof fe&&t.commands.length>1)g={stdout:b.stdout,stderr:b.stderr,exitCode:b.exitCode};else throw p&&(e.state.env=p),b}p&&(e.state.env=p),a.push(g.exitCode),g.exitCode!==0&&(o=g.exitCode),h?i=g:t.pipeStderr?.[f]??!1?(r=g.stderr+g.stdout,i={stdout:"",stderr:"",exitCode:g.exitCode}):(r=g.stdout,i={stdout:"",stderr:g.stderr,exitCode:g.exitCode})}if(t.commands.length>1||t.commands.length===1&&t.commands[0].type==="SimpleCommand"){for(let f of e.state.env.keys())f.startsWith("PIPESTATUS_")&&e.state.env.delete(f);for(let f=0;f<a.length;f++)e.state.env.set(`PIPESTATUS_${f}`,String(a[f]));e.state.env.set("PIPESTATUS__length",String(a.length))}if(e.state.options.pipefail&&o!==0&&(i={...i,exitCode:o}),t.negated&&(i={...i,exitCode:i.exitCode===0?1:0}),t.timed){let d=(performance.now()-n)/1e3,h=Math.floor(d/60),m=d%60,p;t.timePosix?p=`real ${d.toFixed(2)}
|
|
633
636
|
user 0.00
|
|
634
637
|
sys 0.00
|
|
635
638
|
`:p=`
|
|
636
639
|
real ${`${h}m${m.toFixed(3)}s`}
|
|
637
640
|
user 0m0.000s
|
|
638
641
|
sys 0m0.000s
|
|
639
|
-
`,i={...i,stderr:i.stderr+p}}return
|
|
640
|
-
`,1)};let
|
|
641
|
-
`,1)};if(
|
|
642
|
-
`,1)}}if(
|
|
643
|
-
`,{continueToNext:!0,xtraceOutput:
|
|
644
|
-
`)}}async function
|
|
645
|
-
`,1)};
|
|
646
|
-
`;if(i.fatal)throw new
|
|
647
|
-
`,1)}}if(r=Math.max(...i.map(([
|
|
648
|
-
`,1)}}}return{index:r}}async function
|
|
649
|
-
`,1)};if(
|
|
650
|
-
`,{continueToNext:!0,xtraceOutput:
|
|
651
|
-
`,1);return B(e,C,t.redirections)}y();let w=_(
|
|
642
|
+
`,i={...i,stderr:i.stderr+p}}return l&&!e.state.shoptOptions.lastpipe&&(e.state.lastArg=c),i}async function Dr(e,t){let s=new Map,n="";for(let r of t.assignments){let i=r.name;if(r.array){let u=await io(e,t,i,r.array,r.append,s);if(u.error)return{continueToNext:!1,xtraceOutput:n,tempAssignments:s,error:u.error};if(n+=u.xtraceOutput,u.continueToNext)continue}let o=r.value?await x(e,r.value):"";if(i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[\]$/))return{continueToNext:!1,xtraceOutput:n,tempAssignments:s,error:_("",`bash: ${i}: bad array subscript
|
|
643
|
+
`,1)};let l=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(l){let u=await uo(e,t,l[1],l[2],o,r.append,s);if(u.error)return{continueToNext:!1,xtraceOutput:n,tempAssignments:s,error:u.error};if(u.continueToNext)continue}let c=await ho(e,t,i,o,r.append,s);if(c.error)return{continueToNext:!1,xtraceOutput:n,tempAssignments:s,error:c.error};n+=c.xtraceOutput,c.continueToNext}return{continueToNext:!1,xtraceOutput:n,tempAssignments:s}}async function io(e,t,s,n,r,i){let o="";if(/\[.+\]$/.test(s))return{continueToNext:!1,xtraceOutput:"",error:_("",`bash: ${s}: cannot assign list to array member
|
|
644
|
+
`,1)};if(de(e,s)){let u=rn(e,s);if(u===void 0||u==="")throw new V(1,"","");let f=ke(e,s);if(f&&/^[a-zA-Z_][a-zA-Z0-9_]*\[@\]$/.test(f))return{continueToNext:!1,xtraceOutput:"",error:_("",`bash: ${s}: cannot assign list to array member
|
|
645
|
+
`,1)}}if(xe(e,s)){if(t.name)return o+=`bash: ${s}: readonly variable
|
|
646
|
+
`,{continueToNext:!0,xtraceOutput:o};let u=K(e,s);if(u)return{continueToNext:!1,xtraceOutput:"",error:u}}let a=e.state.associativeArrays?.has(s),l=oo(n),c=()=>{let u=`${s}_`;for(let f of e.state.env.keys())f.startsWith(u)&&!f.includes("__")&&e.state.env.delete(f);e.state.env.delete(s)};if(a&&l?await ao(e,t,s,n,r,c,u=>{o+=u}):l?await lo(e,s,n,r,c):await co(e,s,n,r,c),t.name){i.set(s,e.state.env.get(s));let f=`(${n.map(d=>ct(d)).join(" ")})`;e.state.env.set(s,f)}return{continueToNext:!0,xtraceOutput:o}}function oo(e){return e.some(t=>{if(t.parts.length>=2){let s=t.parts[0],n=t.parts[1];if(s.type!=="Glob"||!s.pattern.startsWith("["))return!1;if(s.pattern==="["&&(n.type==="DoubleQuoted"||n.type==="SingleQuoted")){if(t.parts.length<3)return!1;let r=t.parts[2];return r.type!=="Literal"?!1:r.value.startsWith("]=")||r.value.startsWith("]+=")}return n.type!=="Literal"?!1:n.value.startsWith("]")?n.value.startsWith("]=")||n.value.startsWith("]+="):s.pattern.endsWith("]")?n.value.startsWith("=")||n.value.startsWith("+="):!1}return!1})}async function ao(e,t,s,n,r,i,o){let a=[];for(let l of n){let c=zt(l);if(c){let{key:u,valueParts:f,append:d}=c,h;f.length>0?h=await x(e,{type:"Word",parts:f}):h="",h=j(e,h),a.push({type:"keyed",key:u,value:h,append:d})}else{let u=await x(e,l);a.push({type:"invalid",expandedValue:u})}}r||i();for(let l of a)if(l.type==="keyed")if(l.append){let c=e.state.env.get(`${s}_${l.key}`)??"";e.state.env.set(`${s}_${l.key}`,c+l.value)}else e.state.env.set(`${s}_${l.key}`,l.value);else{let c=t.line??e.state.currentLine??1;o(`bash: line ${c}: ${s}: ${l.expandedValue}: must use subscript when assigning associative array
|
|
647
|
+
`)}}async function lo(e,t,s,n,r){let i=[];for(let a of s){let l=zt(a);if(l){let{key:c,valueParts:u,append:f}=l,d;u.length>0?d=await x(e,{type:"Word",parts:u}):d="",d=j(e,d),i.push({type:"keyed",indexExpr:c,value:d,append:f})}else{let c=await be(e,a);i.push({type:"non-keyed",values:c.values})}}n||r();let o=0;for(let a of i)if(a.type==="keyed"){let l;try{let c=new W,u=q(c,a.indexExpr);l=await z(e,u.expression,!1)}catch{if(/^-?\d+$/.test(a.indexExpr))l=Number.parseInt(a.indexExpr,10);else{let c=e.state.env.get(a.indexExpr);l=c?Number.parseInt(c,10):0,Number.isNaN(l)&&(l=0)}}if(a.append){let c=e.state.env.get(`${t}_${l}`)??"";e.state.env.set(`${t}_${l}`,c+a.value)}else e.state.env.set(`${t}_${l}`,a.value);o=l+1}else for(let l of a.values)e.state.env.set(`${t}_${o++}`,l)}async function co(e,t,s,n,r){let i=[];for(let a of s){let l=await be(e,a);i.push(...l.values)}let o=0;if(n){let a=ye(e,t);if(a.length>0)o=Math.max(...a.map(([c])=>typeof c=="number"?c:0))+1;else{let l=e.state.env.get(t);l!==void 0&&(e.state.env.set(`${t}_0`,l),e.state.env.delete(t),o=1)}}else r();for(let a=0;a<i.length;a++)e.state.env.set(`${t}_${o+a}`,i[a]);n||e.state.env.set(`${t}__length`,String(i.length))}async function uo(e,t,s,n,r,i,o){let a=s;if(de(e,s)){let f=ke(e,s);if(f&&f!==s){if(f.includes("["))return{continueToNext:!1,xtraceOutput:"",error:_("",`bash: \`${f}': not a valid identifier
|
|
648
|
+
`,1)};a=f}}if(xe(e,a)){if(t.name)return{continueToNext:!0,xtraceOutput:""};let f=K(e,a);if(f)return{continueToNext:!1,xtraceOutput:"",error:f}}let l=e.state.associativeArrays?.has(a),c;if(l)c=await Tr(e,a,n);else{let f=await fo(e,a,n);if(f.error)return{continueToNext:!1,xtraceOutput:"",error:f.error};c=`${a}_${f.index}`}let u=i?(e.state.env.get(c)||"")+r:r;if(t.name)o.set(c,e.state.env.get(c)),e.state.env.set(c,u);else{let f=ze(e,a);if(f!==void 0&&f===e.state.callDepth&&e.state.localScopes.length>0){let d=e.state.localScopes[e.state.localScopes.length-1];d.has(c)||d.set(c,e.state.env.get(c))}e.state.env.set(c,u)}return{continueToNext:!0,xtraceOutput:""}}async function Tr(e,t,s){let n;if(s.startsWith("'")&&s.endsWith("'"))n=s.slice(1,-1);else if(s.startsWith('"')&&s.endsWith('"')){let r=s.slice(1,-1),o=new W().parseWordFromString(r,!0,!1);n=await x(e,o)}else if(s.includes("$")){let i=new W().parseWordFromString(s,!1,!1);n=await x(e,i)}else n=s;return`${t}_${n}`}async function fo(e,t,s){let n=s;s.startsWith('"')&&s.endsWith('"')&&s.length>=2&&(n=s.slice(1,-1));let r;if(/^-?\d+$/.test(n))r=Number.parseInt(n,10);else{try{let i=new W,o=q(i,n);r=await z(e,o.expression,!1)}catch(i){if(i instanceof Te){let l=`bash: line ${e.state.currentLine}: ${s}: ${i.message}
|
|
649
|
+
`;if(i.fatal)throw new V(1,"",l);return{index:0,error:_("",l,1)}}let o=e.state.env.get(s);r=o?Number.parseInt(o,10):0}Number.isNaN(r)&&(r=0)}if(r<0){let i=ye(e,t);if(i.length===0){let a=e.state.currentLine;return{index:0,error:_("",`bash: line ${a}: ${t}[${s}]: bad array subscript
|
|
650
|
+
`,1)}}if(r=Math.max(...i.map(([a])=>typeof a=="number"?a:0))+1+r,r<0){let a=e.state.currentLine;return{index:0,error:_("",`bash: line ${a}: ${t}[${s}]: bad array subscript
|
|
651
|
+
`,1)}}}return{index:r}}async function ho(e,t,s,n,r,i){let o="",a=s,l=null;if(de(e,s)){let f=on(e,s,n);if(f===void 0)return{continueToNext:!1,xtraceOutput:"",error:_("",`bash: ${s}: circular name reference
|
|
652
|
+
`,1)};if(f===null)return{continueToNext:!0,xtraceOutput:""};a=f;let d=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);d&&(l={arrayName:d[1],subscriptExpr:d[2]},a=d[1])}if(xe(e,a)){if(t.name)return o+=`bash: ${a}: readonly variable
|
|
653
|
+
`,{continueToNext:!0,xtraceOutput:o};let f=K(e,a);if(f)return{continueToNext:!1,xtraceOutput:"",error:f}}let c;if(Ye(e,a))try{let f=new W;if(r){let h=`(${e.state.env.get(a)||"0"}) + (${n})`,m=q(f,h);c=String(await z(e,m.expression))}else{let d=q(f,n);c=String(await z(e,d.expression))}}catch{c="0"}else{let{isArray:f}=await import("./chunks/expansion-QOAPT4NU.js"),d=f(e,a)?`${a}_0`:a;c=r?(e.state.env.get(d)||"")+n:n}c=je(e,a,c),o+=await Nr(e,a,c);let u=a;if(l)u=await po(e,l);else{let{isArray:f}=await import("./chunks/expansion-QOAPT4NU.js");f(e,a)&&(u=`${a}_0`)}return t.name?(i.set(u,e.state.env.get(u)),e.state.env.set(u,c)):(e.state.env.set(u,c),e.state.options.allexport&&(e.state.exportedVars=e.state.exportedVars||new Set,e.state.exportedVars.add(a)),e.state.tempEnvBindings?.some(f=>f.has(a))&&(e.state.mutatedTempEnvVars=e.state.mutatedTempEnvVars||new Set,e.state.mutatedTempEnvVars.add(a))),{continueToNext:!1,xtraceOutput:o}}async function po(e,t){let{arrayName:s,subscriptExpr:n}=t;if(e.state.associativeArrays?.has(s))return Tr(e,s,n);let i;if(/^-?\d+$/.test(n))i=Number.parseInt(n,10);else{try{let o=new W,a=q(o,n);i=await z(e,a.expression,!1)}catch{let o=e.state.env.get(n);i=o?Number.parseInt(o,10):0}Number.isNaN(i)&&(i=0)}if(i<0){let o=ye(e,s);o.length>0&&(i=Math.max(...o.map(l=>l[0]))+1+i)}return`${s}_${i}`}async function xr(e,t,s,n){let r=await $e(e,t.redirections);if(r)return r;let i=new Map(e.state.env),o=e.state.cwd,a={...e.state.options},l=e.state.localScopes,c=e.state.localVarStack,u=e.state.localVarDepth,f=e.state.fullyUnsetLocals;if(e.state.localScopes=l.map(v=>new Map(v)),c){e.state.localVarStack=new Map;for(let[v,C]of c.entries())e.state.localVarStack.set(v,C.map(D=>({...D})))}u&&(e.state.localVarDepth=new Map(u)),f&&(e.state.fullyUnsetLocals=new Map(f));let d=e.state.loopDepth,h=e.state.parentHasLoopContext;e.state.parentHasLoopContext=d>0,e.state.loopDepth=0;let m=e.state.lastArg,p=e.state.bashPid;e.state.bashPid=e.state.nextVirtualPid++;let g=e.state.groupStdin;s&&(e.state.groupStdin=s);let b="",E="",k=0,y=()=>{e.state.env=i,e.state.cwd=o,e.state.options=a,e.state.localScopes=l,e.state.localVarStack=c,e.state.localVarDepth=u,e.state.fullyUnsetLocals=f,e.state.loopDepth=d,e.state.parentHasLoopContext=h,e.state.groupStdin=g,e.state.bashPid=p,e.state.lastArg=m};try{for(let v of t.body){let C=await n(v);b+=C.stdout,E+=C.stderr,k=C.exitCode}}catch(v){if(y(),v instanceof se)throw v;if(v instanceof _e){b+=v.stdout,E+=v.stderr;let D=_(b,E,0);return B(e,D,t.redirections)}if(v instanceof le||v instanceof ce){b+=v.stdout,E+=v.stderr;let D=_(b,E,0);return B(e,D,t.redirections)}if(v instanceof V){b+=v.stdout,E+=v.stderr;let D=_(b,E,v.exitCode);return B(e,D,t.redirections)}if(v instanceof ne){b+=v.stdout,E+=v.stderr;let D=_(b,E,v.exitCode);return B(e,D,t.redirections)}if(v instanceof fe){let D=_(b+v.stdout,E+v.stderr,v.exitCode);return B(e,D,t.redirections)}let C=_(b,`${E}${he(v)}
|
|
654
|
+
`,1);return B(e,C,t.redirections)}y();let w=_(b,E,k);return B(e,w,t.redirections)}async function Ir(e,t,s,n){let r="",i="",o=0,a=await kt(e,t.redirections);if(a)return a;let l=s;for(let f of t.redirections)if((f.operator==="<<"||f.operator==="<<-")&&f.target.type==="HereDoc"){let d=f.target,h=await x(e,d.content);d.stripTabs&&(h=h.split(`
|
|
652
655
|
`).map(p=>p.replace(/^\t+/,"")).join(`
|
|
653
|
-
`));let m=
|
|
654
|
-
`;else if(
|
|
655
|
-
`,1)}let
|
|
656
|
-
`,1)}e.state.groupStdin=
|
|
656
|
+
`));let m=f.fd??0;m!==0?(e.state.fileDescriptors||(e.state.fileDescriptors=new Map),e.state.fileDescriptors.set(m,h)):l=h}else if(f.operator==="<<<"&&f.target.type==="Word")l=`${await x(e,f.target)}
|
|
657
|
+
`;else if(f.operator==="<"&&f.target.type==="Word")try{let d=await x(e,f.target),h=e.fs.resolvePath(e.state.cwd,d);l=await e.fs.readFile(h)}catch{let d=await x(e,f.target);return _("",`bash: ${d}: No such file or directory
|
|
658
|
+
`,1)}let c=e.state.groupStdin;l&&(e.state.groupStdin=l);try{for(let f of t.body){let d=await n(f);r+=d.stdout,i+=d.stderr,o=d.exitCode}}catch(f){if(e.state.groupStdin=c,f instanceof se)throw f;if(at(f)||f instanceof fe||f instanceof V)throw f.prependOutput(r,i),f;return _(r,`${i}${he(f)}
|
|
659
|
+
`,1)}e.state.groupStdin=c;let u=_(r,i,o);return B(e,u,t.redirections)}async function Rr(e,t,s,n,r){let i;try{i=await e.fs.readFile(t)}catch{return S(`bash: ${t}: No such file or directory
|
|
657
660
|
`,127)}if(i.startsWith("#!")){let g=i.indexOf(`
|
|
658
|
-
`);g!==-1&&(i=i.slice(g+1))}let
|
|
659
|
-
`);throw g}}var
|
|
660
|
-
`);let r=0,i=-1,
|
|
661
|
-
`).map(
|
|
662
|
-
`));let C=y.fd??0;C!==0?(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),this.ctx.state.fileDescriptors.set(C,
|
|
663
|
-
`;continue}if(y.operator==="<"&&y.target.type==="Word")try{let w=await
|
|
664
|
-
`)}if(y.operator==="<&"&&y.target.type==="Word"){let w=await
|
|
665
|
-
`,127)}if(
|
|
666
|
-
`)}break}case"<>":{let C=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);try{let
|
|
667
|
-
`);return B(this.ctx,r,t.redirections)}}async executeConditionalCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await
|
|
668
|
-
`,r);return B(this.ctx,i,t.redirections)}}};var
|
|
669
|
-
|
|
661
|
+
`);g!==-1&&(i=i.slice(g+1))}let o=new Map(e.state.env),a=e.state.cwd,l={...e.state.options},c=e.state.loopDepth,u=e.state.parentHasLoopContext,f=e.state.lastArg,d=e.state.bashPid,h=e.state.groupStdin,m=e.state.currentSource;e.state.parentHasLoopContext=c>0,e.state.loopDepth=0,e.state.bashPid=e.state.nextVirtualPid++,n&&(e.state.groupStdin=n),e.state.currentSource=t,e.state.env.set("0",t),e.state.env.set("#",String(s.length)),e.state.env.set("@",s.join(" ")),e.state.env.set("*",s.join(" "));for(let g=0;g<s.length&&g<9;g++)e.state.env.set(String(g+1),s[g]);for(let g=s.length+1;g<=9;g++)e.state.env.delete(String(g));let p=()=>{e.state.env=o,e.state.cwd=a,e.state.options=l,e.state.loopDepth=c,e.state.parentHasLoopContext=u,e.state.lastArg=f,e.state.bashPid=d,e.state.groupStdin=h,e.state.currentSource=m};try{let b=new W().parse(i),E=await r(b);return p(),E}catch(g){if(p(),g instanceof V||g instanceof se)throw g;if(g.name==="ParseException")return S(`bash: ${t}: ${g.message}
|
|
662
|
+
`);throw g}}var tt=class{ctx;constructor(t,s){this.ctx={state:s,fs:t.fs,commands:t.commands,limits:t.limits,execFn:t.exec,executeScript:this.executeScript.bind(this),executeStatement:this.executeStatement.bind(this),executeCommand:this.executeCommand.bind(this),fetch:t.fetch,sleep:t.sleep,trace:t.trace}}buildExportedEnv(){let t=this.ctx.state.exportedVars,s=this.ctx.state.tempExportedVars,n=new Set;if(t)for(let i of t)n.add(i);if(s)for(let i of s)n.add(i);if(n.size===0)return Object.create(null);let r=Object.create(null);for(let i of n){let o=this.ctx.state.env.get(i);o!==void 0&&(r[i]=o)}return r}async executeScript(t){let s="",n="",r=0;for(let i of t.statements)try{let o=await this.executeStatement(i);s+=o.stdout,n+=o.stderr,r=o.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env.set("?",String(r))}catch(o){if(o instanceof V)throw o.prependOutput(s,n),o;if(o instanceof pe)return s+=o.stdout,n+=o.stderr,r=o.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env.set("?",String(r)),{stdout:s,stderr:n,exitCode:r,env:Ce(this.ctx.state.env)};if(o instanceof se)throw o;if(o instanceof fe)return s+=o.stdout,n+=o.stderr,r=o.exitCode,this.ctx.state.lastExitCode=r,this.ctx.state.env.set("?",String(r)),{stdout:s,stderr:n,exitCode:r,env:Ce(this.ctx.state.env)};if(o instanceof Ks)return s+=o.stdout,n+=o.stderr,r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env.set("?",String(r)),{stdout:s,stderr:n,exitCode:r,env:Ce(this.ctx.state.env)};if(o instanceof it)return s+=o.stdout,n+=o.stderr,r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env.set("?",String(r)),{stdout:s,stderr:n,exitCode:r,env:Ce(this.ctx.state.env)};if(o instanceof Te){s+=o.stdout,n+=o.stderr,r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env.set("?",String(r));continue}if(o instanceof Xs){s+=o.stdout,n+=o.stderr,r=1,this.ctx.state.lastExitCode=r,this.ctx.state.env.set("?",String(r));continue}if(o instanceof le||o instanceof ce){if(this.ctx.state.loopDepth>0)throw o.prependOutput(s,n),o;s+=o.stdout,n+=o.stderr;continue}throw o instanceof ne&&o.prependOutput(s,n),o}return{stdout:s,stderr:n,exitCode:r,env:Ce(this.ctx.state.env)}}async executeUserScript(t,s,n=""){return Rr(this.ctx,t,s,n,r=>this.executeScript(r))}async executeStatement(t){if(this.ctx.state.commandCount++,this.ctx.state.commandCount>this.ctx.limits.maxCommandCount&&Ae(`too many commands executed (>${this.ctx.limits.maxCommandCount}), increase executionLimits.maxCommandCount`,"commands"),t.deferredError)throw new lt(t.deferredError.message,t.line??1,1);if(this.ctx.state.options.noexec)return L;this.ctx.state.errexitSafe=!1;let s="",n="";this.ctx.state.options.verbose&&!this.ctx.state.suppressVerbose&&t.sourceText&&(n+=`${t.sourceText}
|
|
663
|
+
`);let r=0,i=-1,o=!1;for(let c=0;c<t.pipelines.length;c++){let u=t.pipelines[c],f=c>0?t.operators[c-1]:null;if(f==="&&"&&r!==0||f==="||"&&r===0)continue;let d=await this.executePipeline(u);s+=d.stdout,n+=d.stderr,r=d.exitCode,i=c,o=u.negated,this.ctx.state.lastExitCode=r,this.ctx.state.env.set("?",String(r))}let a=i<t.pipelines.length-1,l=this.ctx.state.errexitSafe;if(this.ctx.state.errexitSafe=a||o||l,this.ctx.state.options.errexit&&r!==0&&i===t.pipelines.length-1&&!o&&!this.ctx.state.inCondition&&!l)throw new fe(r,s,n);return _(s,n,r)}async executePipeline(t){return Or(this.ctx,t,(s,n)=>this.executeCommand(s,n))}async executeCommand(t,s){switch(t.type){case"SimpleCommand":return this.executeSimpleCommand(t,s);case"If":return vr(this.ctx,t);case"For":return br(this.ctx,t);case"CStyleFor":return Er(this.ctx,t);case"While":return $r(this.ctx,t,s);case"Until":return Sr(this.ctx,t);case"Case":return Ar(this.ctx,t);case"Subshell":return this.executeSubshell(t,s);case"Group":return this.executeGroup(t,s);case"FunctionDef":return zn(this.ctx,t);case"ArithmeticCommand":return this.executeArithmeticCommand(t);case"ConditionalCommand":return this.executeConditionalCommand(t);default:return L}}async executeSimpleCommand(t,s){try{return await this.executeSimpleCommandInner(t,s)}catch(n){if(n instanceof ot)return S(n.stderr);throw n}}async executeSimpleCommandInner(t,s){if(t.line!==void 0&&(this.ctx.state.currentLine=t.line),this.ctx.state.shoptOptions.expand_aliases&&t.name){let y=t,w=100;for(;w>0;){let v=this.expandAlias(y);if(v===y)break;y=v,w--}this.aliasExpansionStack.clear(),y!==t&&(t=y)}this.ctx.state.expansionStderr="";let n=await Dr(this.ctx,t);if(n.error)return n.error;let r=n.tempAssignments,i=n.xtraceOutput;if(!t.name){if(t.redirections.length>0){let w=await $e(this.ctx,t.redirections);if(w)return w;let v=_("",i,0);return B(this.ctx,v,t.redirections)}this.ctx.state.lastArg="";let y=(this.ctx.state.expansionStderr||"")+i;return this.ctx.state.expansionStderr="",_("",y,this.ctx.state.lastExitCode)}let o=t.name&&js(t.name,["local","declare","typeset","export","readonly"]),a=Array.from(r.keys());if(a.length>0&&!o){this.ctx.state.tempExportedVars=this.ctx.state.tempExportedVars||new Set;for(let y of a)this.ctx.state.tempExportedVars.add(y)}let l=await kt(this.ctx,t.redirections);if(l){for(let[y,w]of r)w===void 0?this.ctx.state.env.delete(y):this.ctx.state.env.set(y,w);return l}let c=-1;for(let y of t.redirections){if((y.operator==="<<"||y.operator==="<<-")&&y.target.type==="HereDoc"){let w=y.target,v=await x(this.ctx,w.content);w.stripTabs&&(v=v.split(`
|
|
664
|
+
`).map(D=>D.replace(/^\t+/,"")).join(`
|
|
665
|
+
`));let C=y.fd??0;C!==0?(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),this.ctx.state.fileDescriptors.set(C,v)):s=v;continue}if(y.operator==="<<<"&&y.target.type==="Word"){s=`${await x(this.ctx,y.target)}
|
|
666
|
+
`;continue}if(y.operator==="<"&&y.target.type==="Word")try{let w=await x(this.ctx,y.target),v=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);s=await this.ctx.fs.readFile(v)}catch{let w=await x(this.ctx,y.target);for(let[v,C]of r)C===void 0?this.ctx.state.env.delete(v):this.ctx.state.env.set(v,C);return S(`bash: ${w}: No such file or directory
|
|
667
|
+
`)}if(y.operator==="<&"&&y.target.type==="Word"){let w=await x(this.ctx,y.target),v=Number.parseInt(w,10);if(!Number.isNaN(v)&&this.ctx.state.fileDescriptors){let C=this.ctx.state.fileDescriptors.get(v);if(C!==void 0)if(C.startsWith("__rw__:")){let D=_r(C);D&&(s=D.content.slice(D.position),c=v)}else C.startsWith("__file__:")||C.startsWith("__file_append__:")||(s=C)}}}let u=await x(this.ctx,t.name),f=[],d=[];if(js(t.name,["local","declare","typeset","export","readonly"])&&(u==="local"||u==="declare"||u==="typeset"||u==="export"||u==="readonly"))for(let y of t.args){let w=await An(this.ctx,y);if(w)f.push(w),d.push(!0);else{let v=await _n(this.ctx,y);if(v!==null)f.push(v),d.push(!0);else{let C=await be(this.ctx,y);for(let D of C.values)f.push(D),d.push(C.quoted)}}}else for(let y of t.args){let w=await be(this.ctx,y);for(let v of w.values)f.push(v),d.push(w.quoted)}if(!u){if(t.name.parts.every(w=>w.type==="CommandSubstitution"||w.type==="ParameterExpansion"||w.type==="ArithmeticExpansion")){if(f.length>0){let w=f.shift();return d.shift(),await this.runCommand(w,f,d,s,!1,!1,c)}return _("","",this.ctx.state.lastExitCode)}return S(`bash: : command not found
|
|
668
|
+
`,127)}if(u==="exec"&&(f.length===0||f[0]==="--")){for(let y of t.redirections){if(y.target.type==="HereDoc"||y.fdVariable)continue;let w=await x(this.ctx,y.target),v=y.fd??(y.operator==="<"||y.operator==="<>"?0:1);switch(this.ctx.state.fileDescriptors||(this.ctx.state.fileDescriptors=new Map),y.operator){case">":case">|":{let C=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);await this.ctx.fs.writeFile(C,"","utf8"),this.ctx.state.fileDescriptors.set(v,`__file__:${C}`);break}case">>":{let C=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);this.ctx.state.fileDescriptors.set(v,`__file_append__:${C}`);break}case"<":{let C=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);try{let D=await this.ctx.fs.readFile(C);this.ctx.state.fileDescriptors.set(v,D)}catch{return S(`bash: ${w}: No such file or directory
|
|
669
|
+
`)}break}case"<>":{let C=this.ctx.fs.resolvePath(this.ctx.state.cwd,w);try{let D=await this.ctx.fs.readFile(C);this.ctx.state.fileDescriptors.set(v,`__rw__:${C.length}:${C}:0:${D}`)}catch{await this.ctx.fs.writeFile(C,"","utf8"),this.ctx.state.fileDescriptors.set(v,`__rw__:${C.length}:${C}:0:`)}break}case">&":{if(w==="-")this.ctx.state.fileDescriptors.delete(v);else if(w.endsWith("-")){let C=w.slice(0,-1),D=Number.parseInt(C,10);if(!Number.isNaN(D)){let T=this.ctx.state.fileDescriptors.get(D);T!==void 0?this.ctx.state.fileDescriptors.set(v,T):this.ctx.state.fileDescriptors.set(v,`__dupout__:${D}`),this.ctx.state.fileDescriptors.delete(D)}}else{let C=Number.parseInt(w,10);Number.isNaN(C)||this.ctx.state.fileDescriptors.set(v,`__dupout__:${C}`)}break}case"<&":{if(w==="-")this.ctx.state.fileDescriptors.delete(v);else if(w.endsWith("-")){let C=w.slice(0,-1),D=Number.parseInt(C,10);if(!Number.isNaN(D)){let T=this.ctx.state.fileDescriptors.get(D);T!==void 0?this.ctx.state.fileDescriptors.set(v,T):this.ctx.state.fileDescriptors.set(v,`__dupin__:${D}`),this.ctx.state.fileDescriptors.delete(D)}}else{let C=Number.parseInt(w,10);Number.isNaN(C)||this.ctx.state.fileDescriptors.set(v,`__dupin__:${C}`)}break}}}for(let[y,w]of r)w===void 0?this.ctx.state.env.delete(y):this.ctx.state.env.set(y,w);if(this.ctx.state.tempExportedVars)for(let y of r.keys())this.ctx.state.tempExportedVars.delete(y);return L}let m=await kr(this.ctx,u,f);r.size>0&&(this.ctx.state.tempEnvBindings=this.ctx.state.tempEnvBindings||[],this.ctx.state.tempEnvBindings.push(new Map(r)));let p,g=null;try{p=await this.runCommand(u,f,d,s,!1,!1,c)}catch(y){if(y instanceof le||y instanceof ce)g=y,p=L;else throw y}let b=i+m;if(b&&(p={...p,stderr:b+p.stderr}),p=await B(this.ctx,p,t.redirections),g)throw g;if(f.length>0){let y=f[f.length-1];if((u==="declare"||u==="local"||u==="typeset")&&/^[a-zA-Z_][a-zA-Z0-9_]*=\(/.test(y)){let w=y.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\(/);w&&(y=w[1])}this.ctx.state.lastArg=y}else this.ctx.state.lastArg=u;let E=Wn(u)&&u!=="unset"&&u!=="eval";if(!this.ctx.state.options.posix||!E)for(let[y,w]of r)this.ctx.state.fullyUnsetLocals?.has(y)||(w===void 0?this.ctx.state.env.delete(y):this.ctx.state.env.set(y,w));if(this.ctx.state.tempExportedVars)for(let y of r.keys())this.ctx.state.tempExportedVars.delete(y);return r.size>0&&this.ctx.state.tempEnvBindings&&this.ctx.state.tempEnvBindings.pop(),this.ctx.state.expansionStderr&&(p={...p,stderr:this.ctx.state.expansionStderr+p.stderr},this.ctx.state.expansionStderr=""),p}async runCommand(t,s,n,r,i=!1,o=!1,a=-1){let l={ctx:this.ctx,runCommand:(u,f,d,h,m,p,g)=>this.runCommand(u,f,d,h,m,p,g),buildExportedEnv:()=>this.buildExportedEnv(),executeUserScript:(u,f,d)=>this.executeUserScript(u,f,d)},c=await gr(l,t,s,n,r,i,o,a);return c!==null?c:wr(l,t,s,r,o)}aliasExpansionStack=new Set;expandAlias(t){return Qt(this.ctx.state,t,this.aliasExpansionStack)}async findCommandInPath(t){return Rt(this.ctx,t)}async executeSubshell(t,s=""){return xr(this.ctx,t,s,n=>this.executeStatement(n))}async executeGroup(t,s=""){return Ir(this.ctx,t,s,n=>this.executeStatement(n))}async executeArithmeticCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await $e(this.ctx,t.redirections);if(s)return s;try{let n=await z(this.ctx,t.expression.expression),r=U(n!==0);return this.ctx.state.expansionStderr&&(r={...r,stderr:this.ctx.state.expansionStderr+r.stderr},this.ctx.state.expansionStderr=""),B(this.ctx,r,t.redirections)}catch(n){let r=S(`bash: arithmetic expression: ${n.message}
|
|
670
|
+
`);return B(this.ctx,r,t.redirections)}}async executeConditionalCommand(t){t.line!==void 0&&(this.ctx.state.currentLine=t.line);let s=await $e(this.ctx,t.redirections);if(s)return s;try{let n=await Oe(this.ctx,t.expression),r=U(n);return this.ctx.state.expansionStderr&&(r={...r,stderr:this.ctx.state.expansionStderr+r.stderr},this.ctx.state.expansionStderr=""),B(this.ctx,r,t.redirections)}catch(n){let r=n instanceof Te?1:2,i=S(`bash: conditional expression: ${n.message}
|
|
671
|
+
`,r);return B(this.ctx,i,t.redirections)}}};var ie={maxCallDepth:100,maxCommandCount:1e4,maxLoopIterations:1e4,maxAwkIterations:1e4,maxSedIterations:1e4,maxJqIterations:1e4,maxSqliteTimeoutMs:5e3,maxPythonTimeoutMs:3e4,maxGlobOperations:1e5,maxStringLength:10485760,maxArrayElements:1e5,maxHeredocSize:10485760,maxSubstitutionDepth:50};function Lr(e){return e?{maxCallDepth:e.maxCallDepth??ie.maxCallDepth,maxCommandCount:e.maxCommandCount??ie.maxCommandCount,maxLoopIterations:e.maxLoopIterations??ie.maxLoopIterations,maxAwkIterations:e.maxAwkIterations??ie.maxAwkIterations,maxSedIterations:e.maxSedIterations??ie.maxSedIterations,maxJqIterations:e.maxJqIterations??ie.maxJqIterations,maxSqliteTimeoutMs:e.maxSqliteTimeoutMs??ie.maxSqliteTimeoutMs,maxPythonTimeoutMs:e.maxPythonTimeoutMs??ie.maxPythonTimeoutMs,maxGlobOperations:e.maxGlobOperations??ie.maxGlobOperations,maxStringLength:e.maxStringLength??ie.maxStringLength,maxArrayElements:e.maxArrayElements??ie.maxArrayElements,maxHeredocSize:e.maxHeredocSize??ie.maxHeredocSize,maxSubstitutionDepth:e.maxSubstitutionDepth??ie.maxSubstitutionDepth}:{...ie}}function Fr(e){try{let t=new URL(e);return{origin:t.origin,pathname:t.pathname,href:t.href}}catch{return null}}function mo(e){let t=Fr(e);return t?{origin:t.origin,pathPrefix:t.pathname}:null}function yo(e,t){let s=Fr(e);if(!s)return!1;let n=mo(t);return!n||s.origin!==n.origin?!1:n.pathPrefix==="/"||n.pathPrefix===""?!0:s.pathname.startsWith(n.pathPrefix)}function Hs(e,t){return!t||t.length===0?!1:t.some(s=>yo(e,s))}var st=class extends Error{constructor(t){super(`Network access denied: URL not in allow-list: ${t}`),this.name="NetworkAccessDeniedError"}},nt=class extends Error{constructor(t){super(`Too many redirects (max: ${t})`),this.name="TooManyRedirectsError"}},rt=class extends Error{constructor(t){super(`Redirect target not in allow-list: ${t}`),this.name="RedirectNotAllowedError"}},Ft=class extends Error{constructor(t,s){super(`HTTP method '${t}' not allowed. Allowed methods: ${s.join(", ")}`),this.name="MethodNotAllowedError"}};var go=20,wo=3e4,vo=["GET","HEAD"],bo=new Set(["GET","HEAD","OPTIONS"]),Eo=new Set([301,302,303,307,308]);function Us(e){let t=e.maxRedirects??go,s=e.timeoutMs??wo,n=e.dangerouslyAllowFullInternetAccess?["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"]:e.allowedMethods??vo;function r(a){if(!e.dangerouslyAllowFullInternetAccess&&!Hs(a,e.allowedUrlPrefixes??[]))throw new st(a)}function i(a){if(e.dangerouslyAllowFullInternetAccess)return;let l=a.toUpperCase();if(!n.includes(l))throw new Ft(l,n)}async function o(a,l={}){let c=l.method?.toUpperCase()??"GET";r(a),i(c);let u=a,f=0,d=l.followRedirects??!0,h=l.timeoutMs!==void 0?Math.min(l.timeoutMs,s):s;for(;;){let m=new AbortController,p=setTimeout(()=>m.abort(),h);try{let g={method:c,headers:l.headers,signal:m.signal,redirect:"manual"};l.body&&!bo.has(c)&&(g.body=l.body);let b=await fetch(u,g);if(Eo.has(b.status)&&d){let E=b.headers.get("location");if(!E)return await Mr(b,u);let k=new URL(E,u).href;if(!e.dangerouslyAllowFullInternetAccess&&!Hs(k,e.allowedUrlPrefixes??[]))throw new rt(k);if(f++,f>t)throw new nt(t);u=k;continue}return await Mr(b,u)}finally{clearTimeout(p)}}}return o}async function Mr(e,t){let s=Object.create(null);return e.headers.forEach((n,r)=>{s[r.toLowerCase()]=n}),{status:e.status,statusText:e.statusText,headers:s,body:await e.text(),url:t}}import{AsyncLocalStorage as $o}from"node:async_hooks";import{randomUUID as Vr}from"node:crypto";function Wr(){let e=[{prop:"Function",target:globalThis,violationType:"function_constructor",strategy:"throw",reason:"Function constructor allows arbitrary code execution"},{prop:"eval",target:globalThis,violationType:"eval",strategy:"throw",reason:"eval() allows arbitrary code execution"},{prop:"setTimeout",target:globalThis,violationType:"setTimeout",strategy:"throw",reason:"setTimeout with string argument allows code execution"},{prop:"setInterval",target:globalThis,violationType:"setInterval",strategy:"throw",reason:"setInterval with string argument allows code execution"},{prop:"setImmediate",target:globalThis,violationType:"setImmediate",strategy:"throw",reason:"setImmediate could be used to escape sandbox context"},{prop:"env",target:process,violationType:"process_env",strategy:"throw",reason:"process.env could leak sensitive environment variables"},{prop:"binding",target:process,violationType:"process_binding",strategy:"throw",reason:"process.binding provides access to native Node.js modules"},{prop:"_linkedBinding",target:process,violationType:"process_binding",strategy:"throw",reason:"process._linkedBinding provides access to native Node.js modules"},{prop:"dlopen",target:process,violationType:"process_dlopen",strategy:"throw",reason:"process.dlopen allows loading native addons"},{prop:"WeakRef",target:globalThis,violationType:"weak_ref",strategy:"throw",reason:"WeakRef could be used to leak references outside sandbox"},{prop:"FinalizationRegistry",target:globalThis,violationType:"finalization_registry",strategy:"throw",reason:"FinalizationRegistry could be used to leak references outside sandbox"},{prop:"Reflect",target:globalThis,violationType:"reflect",strategy:"freeze",reason:"Reflect provides introspection capabilities"},{prop:"Proxy",target:globalThis,violationType:"proxy",strategy:"throw",reason:"Proxy allows intercepting and modifying object behavior"},{prop:"WebAssembly",target:globalThis,violationType:"webassembly",strategy:"throw",reason:"WebAssembly allows executing arbitrary compiled code"}];try{let t=Object.getPrototypeOf(async()=>{}).constructor;t&&t!==Function&&e.push({prop:"constructor",target:Object.getPrototypeOf(async()=>{}),violationType:"async_function_constructor",strategy:"throw",reason:"AsyncFunction constructor allows arbitrary async code execution"})}catch{}try{let t=Object.getPrototypeOf(function*(){}).constructor;t&&t!==Function&&e.push({prop:"constructor",target:Object.getPrototypeOf(function*(){}),violationType:"generator_function_constructor",strategy:"throw",reason:"GeneratorFunction constructor allows arbitrary generator code execution"})}catch{}try{let t=Object.getPrototypeOf(async function*(){}).constructor;t&&t!==Function&&t!==Object.getPrototypeOf(async()=>{}).constructor&&e.push({prop:"constructor",target:Object.getPrototypeOf(async function*(){}),violationType:"async_generator_function_constructor",strategy:"throw",reason:"AsyncGeneratorFunction constructor allows arbitrary async generator code execution"})}catch{}return e.filter(t=>{try{return t.target[t.prop]!==void 0}catch{return!1}})}var Zs=typeof __BROWSER__<"u"&&__BROWSER__,So=`
|
|
672
|
+
|
|
673
|
+
This is a defense-in-depth measure and indicates a bug in just-bash. Please report this at security@vercel.com`,oe=class extends Error{violation;constructor(t,s){super(t+So),this.violation=s,this.name="SecurityViolationError"}},ue=Zs?null:new $o,Ao=1e3,qs={enabled:!0,auditMode:!1};function _o(e){return e===void 0?{...qs,enabled:!1}:typeof e=="boolean"?{...qs,enabled:e}:{...qs,...e}}var Mt=class e{static instance=null;config;refCount=0;originalDescriptors=[];violations=[];activationTime=0;totalActiveTimeMs=0;constructor(t){this.config=t}static getInstance(t){return e.instance||(e.instance=new e(_o(t))),e.instance}static resetInstance(){e.instance&&(e.instance.forceDeactivate(),e.instance=null)}static isInSandboxedContext(){return ue?ue?.getStore()?.sandboxActive===!0:!1}static getCurrentExecutionId(){if(ue)return ue?.getStore()?.executionId}updateConfig(t){this.config={...this.config,...t}}activate(){if(Zs||!this.config.enabled){let s=Vr();return{run:n=>n(),deactivate:()=>{},executionId:s}}this.refCount++,this.refCount===1&&(this.applyPatches(),this.activationTime=Date.now());let t=Vr();return{run:s=>ue.run({sandboxActive:!0,executionId:t},s),deactivate:()=>{this.refCount--,this.refCount===0&&(this.restorePatches(),this.totalActiveTimeMs+=Date.now()-this.activationTime),this.refCount<0&&(this.refCount=0)},executionId:t}}forceDeactivate(){this.refCount>0&&(this.restorePatches(),this.totalActiveTimeMs+=Date.now()-this.activationTime),this.refCount=0}isActive(){return this.refCount>0}getStats(){return{violationsBlocked:this.violations.length,violations:[...this.violations],activeTimeMs:this.totalActiveTimeMs+(this.refCount>0?Date.now()-this.activationTime:0),refCount:this.refCount}}clearViolations(){this.violations=[]}getPathForTarget(t,s){return t===globalThis?`globalThis.${s}`:t===process?`process.${s}`:t===Error?`Error.${s}`:t===Function.prototype?`Function.prototype.${s}`:t===Object.prototype?`Object.prototype.${s}`:`<object>.${s}`}shouldBlock(){return Zs||this.config.auditMode||!ue?!1:ue?.getStore()?.sandboxActive===!0}recordViolation(t,s,n){let r={timestamp:Date.now(),type:t,message:n,path:s,stack:new Error().stack,executionId:ue?.getStore()?.executionId};if(this.violations.length<Ao&&this.violations.push(r),this.config.onViolation)try{this.config.onViolation(r)}catch(i){console.debug("[DefenseInDepthBox] onViolation callback threw:",i instanceof Error?i.message:i)}return r}createBlockingProxy(t,s,n){let r=this;return new Proxy(t,{apply(i,o,a){if(r.shouldBlock()){let l=`${s} is blocked during script execution`,c=r.recordViolation(n,s,l);throw new oe(l,c)}return r.config.auditMode&&ue?.getStore()?.sandboxActive===!0&&r.recordViolation(n,s,`${s} called (audit mode)`),Reflect.apply(i,o,a)},construct(i,o,a){if(r.shouldBlock()){let l=`${s} constructor is blocked during script execution`,c=r.recordViolation(n,s,l);throw new oe(l,c)}return r.config.auditMode&&ue?.getStore()?.sandboxActive===!0&&r.recordViolation(n,s,`${s} constructor called (audit mode)`),Reflect.construct(i,o,a)}})}createBlockingObjectProxy(t,s,n){let r=this;return new Proxy(t,{get(i,o,a){if(r.shouldBlock()){let l=`${s}.${String(o)}`,c=`${l} is blocked during script execution`,u=r.recordViolation(n,l,c);throw new oe(c,u)}if(r.config.auditMode&&ue?.getStore()?.sandboxActive===!0){let l=`${s}.${String(o)}`;r.recordViolation(n,l,`${l} accessed (audit mode)`)}return Reflect.get(i,o,a)},set(i,o,a,l){if(r.shouldBlock()){let c=`${s}.${String(o)}`,u=`${c} modification is blocked during script execution`,f=r.recordViolation(n,c,u);throw new oe(u,f)}return Reflect.set(i,o,a,l)},ownKeys(i){if(r.shouldBlock()){let o=`${s} enumeration is blocked during script execution`,a=r.recordViolation(n,s,o);throw new oe(o,a)}return Reflect.ownKeys(i)},getOwnPropertyDescriptor(i,o){if(r.shouldBlock()){let a=`${s}.${String(o)}`,l=`${a} descriptor access is blocked during script execution`,c=r.recordViolation(n,a,l);throw new oe(l,c)}return Reflect.getOwnPropertyDescriptor(i,o)},has(i,o){if(r.shouldBlock()){let a=`${s}.${String(o)}`,l=`${a} existence check is blocked during script execution`,c=r.recordViolation(n,a,l);throw new oe(l,c)}return Reflect.has(i,o)}})}applyPatches(){let t=Wr();for(let s of t)this.applyPatch(s);this.protectConstructorChain(),this.protectErrorPrepareStackTrace()}protectConstructorChain(){this.patchPrototypeConstructor(Function.prototype,"Function.prototype.constructor","function_constructor");try{let t=Object.getPrototypeOf(async()=>{}).constructor;t&&t!==Function&&this.patchPrototypeConstructor(t.prototype,"AsyncFunction.prototype.constructor","async_function_constructor")}catch(t){console.debug("[DefenseInDepthBox] Could not patch AsyncFunction.prototype.constructor:",t instanceof Error?t.message:t)}try{let t=Object.getPrototypeOf(function*(){}).constructor;t&&t!==Function&&this.patchPrototypeConstructor(t.prototype,"GeneratorFunction.prototype.constructor","generator_function_constructor")}catch(t){console.debug("[DefenseInDepthBox] Could not patch GeneratorFunction.prototype.constructor:",t instanceof Error?t.message:t)}try{let t=Object.getPrototypeOf(async function*(){}).constructor,s=Object.getPrototypeOf(async()=>{}).constructor;t&&t!==Function&&t!==s&&this.patchPrototypeConstructor(t.prototype,"AsyncGeneratorFunction.prototype.constructor","async_generator_function_constructor")}catch(t){console.debug("[DefenseInDepthBox] Could not patch AsyncGeneratorFunction.prototype.constructor:",t instanceof Error?t.message:t)}}protectErrorPrepareStackTrace(){let t=this;try{let s=Object.getOwnPropertyDescriptor(Error,"prepareStackTrace");this.originalDescriptors.push({target:Error,prop:"prepareStackTrace",descriptor:s});let n=s?.value;Object.defineProperty(Error,"prepareStackTrace",{get(){return n},set(r){if(t.shouldBlock()){let i="Error.prepareStackTrace modification is blocked during script execution",o=t.recordViolation("error_prepare_stack_trace","Error.prepareStackTrace",i);throw new oe(i,o)}t.config.auditMode&&ue?.getStore()?.sandboxActive===!0&&t.recordViolation("error_prepare_stack_trace","Error.prepareStackTrace","Error.prepareStackTrace set (audit mode)"),n=r},configurable:!0})}catch(s){console.debug("[DefenseInDepthBox] Could not protect Error.prepareStackTrace:",s instanceof Error?s.message:s)}}patchPrototypeConstructor(t,s,n){let r=this;try{let i=Object.getOwnPropertyDescriptor(t,"constructor");this.originalDescriptors.push({target:t,prop:"constructor",descriptor:i});let o=i?.value;Object.defineProperty(t,"constructor",{get(){if(r.shouldBlock()){let a=`${s} access is blocked during script execution`,l=r.recordViolation(n,s,a);throw new oe(a,l)}return r.config.auditMode&&ue?.getStore()?.sandboxActive===!0&&r.recordViolation(n,s,`${s} accessed (audit mode)`),o},set(a){if(r.shouldBlock()){let l=`${s} modification is blocked during script execution`,c=r.recordViolation(n,s,l);throw new oe(l,c)}Object.defineProperty(this,"constructor",{value:a,writable:!0,configurable:!0})},configurable:!0})}catch(i){console.debug(`[DefenseInDepthBox] Could not patch ${s}:`,i instanceof Error?i.message:i)}}applyPatch(t){let{target:s,prop:n,violationType:r,strategy:i}=t;try{let o=s[n];if(o===void 0)return;let a=Object.getOwnPropertyDescriptor(s,n);if(this.originalDescriptors.push({target:s,prop:n,descriptor:a}),i==="freeze")typeof o=="object"&&o!==null&&Object.freeze(o);else{let l=this.getPathForTarget(s,n),c=typeof o=="function"?this.createBlockingProxy(o,l,r):this.createBlockingObjectProxy(o,l,r);Object.defineProperty(s,n,{value:c,writable:!0,configurable:!0})}}catch(o){let a=this.getPathForTarget(s,n);console.debug(`[DefenseInDepthBox] Could not patch ${a}:`,o instanceof Error?o.message:o)}}restorePatches(){for(let t=this.originalDescriptors.length-1;t>=0;t--){let{target:s,prop:n,descriptor:r}=this.originalDescriptors[t];try{r?Object.defineProperty(s,n,r):delete s[n]}catch(i){let o=this.getPathForTarget(s,n);console.debug(`[DefenseInDepthBox] Could not restore ${o}:`,i instanceof Error?i.message:i)}}this.originalDescriptors=[]}};var Wt=class{fs;commands=new Map;useDefaultLayout=!1;limits;secureFetch;sleepFn;traceFn;logger;defenseInDepthConfig;state;constructor(t={}){let s=t.fs??new Ze(t.files);this.fs=s,this.useDefaultLayout=!t.cwd&&!t.files;let n=t.cwd||(this.useDefaultLayout?"/home/user":"/"),r=new Map([["HOME",this.useDefaultLayout?"/home/user":"/"],["PATH","/usr/bin:/bin"],["IFS",`
|
|
674
|
+
`],["OSTYPE","linux-gnu"],["MACHTYPE","x86_64-pc-linux-gnu"],["HOSTTYPE","x86_64"],["HOSTNAME","localhost"],["PWD",n],["OLDPWD",n],["OPTIND","1"],...Object.entries(t.env??{})]);if(this.limits=Lr({...t.executionLimits,...t.maxCallDepth!==void 0&&{maxCallDepth:t.maxCallDepth},...t.maxCommandCount!==void 0&&{maxCommandCount:t.maxCommandCount},...t.maxLoopIterations!==void 0&&{maxLoopIterations:t.maxLoopIterations}}),t.network&&(this.secureFetch=Us(t.network)),this.sleepFn=t.sleep,this.traceFn=t.trace,this.logger=t.logger,this.defenseInDepthConfig=t.defenseInDepth,this.state={env:r,cwd:n,previousDir:"/home/user",functions:new Map,localScopes:[],callDepth:0,sourceDepth:0,commandCount:0,lastExitCode:0,lastArg:"",startTime:Date.now(),lastBackgroundPid:0,bashPid:process.pid,nextVirtualPid:process.pid+1,currentLine:1,options:{errexit:!1,pipefail:!1,nounset:!1,xtrace:!1,verbose:!1,posix:!1,allexport:!1,noclobber:!1,noglob:!1,noexec:!1,vi:!1,emacs:!1},shoptOptions:{extglob:!1,dotglob:!1,nullglob:!1,failglob:!1,globstar:!1,globskipdots:!0,nocaseglob:!1,nocasematch:!1,expand_aliases:!1,lastpipe:!1,xpg_echo:!1},inCondition:!1,loopDepth:0,exportedVars:new Set(["HOME","PATH","PWD","OLDPWD",...Object.keys(t.env||{})]),readonlyVars:new Set(["SHELLOPTS","BASHOPTS"]),hashTable:new Map},this.state.env.set("SHELLOPTS",Kt(this.state.options)),this.state.env.set("BASHOPTS",Xt(this.state.shoptOptions)),wn(s,this.useDefaultLayout),n!=="/"&&s instanceof Ze)try{s.mkdirSync(n,{recursive:!0})}catch{}for(let i of hn(t.commands))this.registerCommand(i);if(t.network)for(let i of pn())this.registerCommand(i);if(t.python)for(let i of mn())this.registerCommand(i);if(t.customCommands)for(let i of t.customCommands)yn(i)?this.registerCommand(gn(i)):this.registerCommand(i)}registerCommand(t){this.commands.set(t.name,t);let s=this.fs;if(typeof s.writeFileSync=="function"){let n=`#!/bin/bash
|
|
670
675
|
# Built-in command: ${t.name}
|
|
671
676
|
`;try{s.writeFileSync(`/bin/${t.name}`,n)}catch{}try{s.writeFileSync(`/usr/bin/${t.name}`,n)}catch{}}}logResult(t){return this.logger&&(t.stdout&&this.logger.debug("stdout",{output:t.stdout}),t.stderr&&this.logger.info("stderr",{output:t.stderr}),this.logger.info("exit",{exitCode:t.exitCode})),t}async exec(t,s){if(this.state.callDepth===0&&(this.state.commandCount=0),this.state.commandCount++,this.state.commandCount>this.limits.maxCommandCount)return{stdout:"",stderr:`bash: maximum command count (${this.limits.maxCommandCount}) exceeded (possible infinite loop). Increase with executionLimits.maxCommandCount option.
|
|
672
|
-
`,exitCode:1,env:
|
|
673
|
-
`,exitCode:
|
|
674
|
-
`,exitCode:2,env:
|
|
675
|
-
`,exitCode:
|
|
676
|
-
|
|
677
|
-
`)}import*as Z from"node:fs";import*as ze from"node:path";var ha="/home/user/project",Rt=class{root;mountPoint;readOnly;memory=new Map;deleted=new Set;constructor(t){this.root=ze.resolve(t.root);let s=t.mountPoint??ha;if(this.mountPoint=s==="/"?"/":s.replace(/\/+$/,""),!this.mountPoint.startsWith("/"))throw new Error(`Mount point must be an absolute path: ${s}`);if(this.readOnly=t.readOnly??!1,!Z.existsSync(this.root))throw new Error(`OverlayFs root does not exist: ${this.root}`);if(!Z.statSync(this.root).isDirectory())throw new Error(`OverlayFs root is not a directory: ${this.root}`);this.createMountPointDirs()}assertWritable(t){if(this.readOnly)throw new Error(`EROFS: read-only file system, ${t}`)}createMountPointDirs(){let t=this.mountPoint.split("/").filter(Boolean),s="";for(let n of t)s+=`/${n}`,this.memory.has(s)||this.memory.set(s,{type:"directory",mode:493,mtime:new Date});this.memory.has("/")||this.memory.set("/",{type:"directory",mode:493,mtime:new Date})}getMountPoint(){return this.mountPoint}mkdirSync(t,s){let r=this.normalizePath(t).split("/").filter(Boolean),i="";for(let a of r)i+=`/${a}`,this.memory.has(i)||this.memory.set(i,{type:"directory",mode:493,mtime:new Date})}writeFileSync(t,s){let n=this.normalizePath(t),r=this.getDirname(n);r!=="/"&&this.mkdirSync(r);let i=s instanceof Uint8Array?s:new TextEncoder().encode(s);this.memory.set(n,{type:"file",content:i,mode:420,mtime:new Date})}getDirname(t){let s=t.lastIndexOf("/");return s===0?"/":t.slice(0,s)}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let n=s.split("/").filter(i=>i&&i!=="."),r=[];for(let i of n)i===".."?r.pop():r.push(i);return`/${r.join("/")}`||"/"}getRelativeToMount(t){return this.mountPoint==="/"?t:t===this.mountPoint?"/":t.startsWith(`${this.mountPoint}/`)?t.slice(this.mountPoint.length):null}toRealPath(t){let s=this.normalizePath(t),n=this.getRelativeToMount(s);if(n===null)return null;let r=ze.join(this.root,n),i=ze.resolve(r);return!i.startsWith(this.root)&&i!==this.root.replace(/\/$/,"")?null:i}dirname(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.lastIndexOf("/");return n===0?"/":s.slice(0,n)}ensureParentDirs(t){let s=this.dirname(t);s!=="/"&&(this.memory.has(s)||(this.ensureParentDirs(s),this.memory.set(s,{type:"directory",mode:493,mtime:new Date})),this.deleted.delete(s))}async existsInOverlay(t){let s=this.normalizePath(t);if(this.deleted.has(s))return!1;if(this.memory.has(s))return!0;let n=this.toRealPath(s);if(!n)return!1;try{return await Z.promises.access(n),!0}catch{return!1}}async readFile(t,s){let n=await this.readFileBuffer(t),r=_e(s);return lt(n,r)}async readFileBuffer(t,s=new Set){let n=this.normalizePath(t);if(s.has(n))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);if(s.add(n),this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, open '${t}'`);let r=this.memory.get(n);if(r){if(r.type==="symlink"){let a=this.resolveSymlink(n,r.target);return this.readFileBuffer(a,s)}if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return r.content}let i=this.toRealPath(n);if(!i)throw new Error(`ENOENT: no such file or directory, open '${t}'`);try{let a=await Z.promises.lstat(i);if(a.isSymbolicLink()){let f=await Z.promises.readlink(i),l=this.resolveSymlink(n,f);return this.readFileBuffer(l,s)}if(a.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);let o=await Z.promises.readFile(i);return new Uint8Array(o)}catch(a){throw a.code==="ENOENT"?new Error(`ENOENT: no such file or directory, open '${t}'`):a}}async writeFile(t,s,n){this.assertWritable(`write '${t}'`);let r=this.normalizePath(t);this.ensureParentDirs(r);let i=_e(n),a=xe(s,i);this.memory.set(r,{type:"file",content:a,mode:420,mtime:new Date}),this.deleted.delete(r)}async appendFile(t,s,n){this.assertWritable(`append '${t}'`);let r=this.normalizePath(t),i=_e(n),a=xe(s,i),o;try{o=await this.readFileBuffer(r)}catch{o=new Uint8Array(0)}let f=new Uint8Array(o.length+a.length);f.set(o),f.set(a,o.length),this.ensureParentDirs(r),this.memory.set(r,{type:"file",content:f,mode:420,mtime:new Date}),this.deleted.delete(r)}async exists(t){return this.existsInOverlay(t)}async stat(t,s=new Set){let n=this.normalizePath(t);if(s.has(n))throw new Error(`ELOOP: too many levels of symbolic links, stat '${t}'`);if(s.add(n),this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let r=this.memory.get(n);if(r){if(r.type==="symlink"){let o=this.resolveSymlink(n,r.target);return this.stat(o,s)}let a=0;return r.type==="file"&&(a=r.content.length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:a,mtime:r.mtime}}let i=this.toRealPath(n);if(!i)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);try{let a=await Z.promises.stat(i);return{isFile:a.isFile(),isDirectory:a.isDirectory(),isSymbolicLink:!1,mode:a.mode,size:a.size,mtime:a.mtime}}catch(a){throw a.code==="ENOENT"?new Error(`ENOENT: no such file or directory, stat '${t}'`):a}}async lstat(t){let s=this.normalizePath(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);let n=this.memory.get(s);if(n){if(n.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:n.mode,size:n.target.length,mtime:n.mtime};let i=0;return n.type==="file"&&(i=n.content.length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:i,mtime:n.mtime}}let r=this.toRealPath(s);if(!r)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);try{let i=await Z.promises.lstat(r);return{isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:i.isSymbolicLink(),mode:i.mode,size:i.size,mtime:i.mtime}}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, lstat '${t}'`):i}}resolveSymlink(t,s){if(s.startsWith("/"))return this.normalizePath(s);let n=this.dirname(t);return this.normalizePath(n==="/"?`/${s}`:`${n}/${s}`)}async mkdir(t,s){this.assertWritable(`mkdir '${t}'`);let n=this.normalizePath(t);if(await this.existsInOverlay(n)){if(!s?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${t}'`);return}let i=this.dirname(n);if(i!=="/"&&!await this.existsInOverlay(i))if(s?.recursive)await this.mkdir(i,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.memory.set(n,{type:"directory",mode:493,mtime:new Date}),this.deleted.delete(n)}async readdirCore(t,s){if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let n=new Map,r=new Set,i=s==="/"?"/":`${s}/`;for(let o of this.deleted)if(o.startsWith(i)){let f=o.slice(i.length),l=f.split("/")[0];l&&!f.includes("/",l.length)&&r.add(l)}for(let[o,f]of this.memory)if(o!==s&&o.startsWith(i)){let l=o.slice(i.length),c=l.split("/")[0];c&&!r.has(c)&&!l.includes("/",1)&&n.set(c,{name:c,isFile:f.type==="file",isDirectory:f.type==="directory",isSymbolicLink:f.type==="symlink"})}let a=this.toRealPath(s);if(a)try{let o=await Z.promises.readdir(a,{withFileTypes:!0});for(let f of o)!r.has(f.name)&&!n.has(f.name)&&n.set(f.name,{name:f.name,isFile:f.isFile(),isDirectory:f.isDirectory(),isSymbolicLink:f.isSymbolicLink()})}catch(o){if(o.code==="ENOENT"){if(!this.memory.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`)}else if(o.code!=="ENOTDIR")throw o}return n}async resolveForReaddir(t,s=!1){let n=this.normalizePath(t),r=new Set,i=s,a=this.memory.get(n);for(;a&&a.type==="symlink";){if(r.has(n))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);r.add(n),i=!0,n=this.resolveSymlink(n,a.target),a=this.memory.get(n)}if(a)return{normalized:n,outsideOverlay:!1};if(this.getRelativeToMount(n)===null)return{normalized:n,outsideOverlay:!0};let f=this.toRealPath(n);if(!f)return{normalized:n,outsideOverlay:!0};try{if((await Z.promises.lstat(f)).isSymbolicLink()){let c=await Z.promises.readlink(f),u=this.resolveSymlink(n,c);return this.resolveForReaddir(u,!0)}return{normalized:n,outsideOverlay:!1}}catch{return i?{normalized:n,outsideOverlay:!0}:{normalized:n,outsideOverlay:!1}}}async readdir(t){let{normalized:s,outsideOverlay:n}=await this.resolveForReaddir(t);if(n)return[];let r=await this.readdirCore(t,s);return Array.from(r.keys()).sort((i,a)=>i<a?-1:i>a?1:0)}async readdirWithFileTypes(t){let{normalized:s,outsideOverlay:n}=await this.resolveForReaddir(t);if(n)return[];let r=await this.readdirCore(t,s);return Array.from(r.values()).sort((i,a)=>i.name<a.name?-1:i.name>a.name?1:0)}async rm(t,s){this.assertWritable(`rm '${t}'`);let n=this.normalizePath(t);if(!await this.existsInOverlay(n)){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}try{if((await this.stat(n)).isDirectory){let a=await this.readdir(n);if(a.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let o of a){let f=n==="/"?`/${o}`:`${n}/${o}`;await this.rm(f,s)}}}}catch{}this.deleted.add(n),this.memory.delete(n)}async cp(t,s,n){this.assertWritable(`cp '${s}'`);let r=this.normalizePath(t),i=this.normalizePath(s);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, cp '${t}'`);let o=await this.stat(r);if(o.isFile){let f=await this.readFileBuffer(r);await this.writeFile(i,f)}else if(o.isDirectory){if(!n?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let f=await this.readdir(r);for(let l of f){let c=r==="/"?`/${l}`:`${r}/${l}`,u=i==="/"?`/${l}`:`${i}/${l}`;await this.cp(c,u,n)}}}async mv(t,s){this.assertWritable(`mv '${s}'`),await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}resolvePath(t,s){if(s.startsWith("/"))return this.normalizePath(s);let n=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(n)}getAllPaths(){let t=new Set(this.memory.keys());for(let s of this.deleted)t.delete(s);return this.scanRealFs("/",t),Array.from(t)}scanRealFs(t,s){if(this.deleted.has(t))return;let n=this.toRealPath(t);if(n)try{let r=Z.readdirSync(n);for(let i of r){let a=t==="/"?`/${i}`:`${t}/${i}`;if(this.deleted.has(a))continue;s.add(a);let o=ze.join(n,i);Z.statSync(o).isDirectory()&&this.scanRealFs(a,s)}}catch{}}async chmod(t,s){this.assertWritable(`chmod '${t}'`);let n=this.normalizePath(t);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);let i=this.memory.get(n);if(i){i.mode=s;return}let a=await this.stat(n);if(a.isFile){let o=await this.readFileBuffer(n);this.memory.set(n,{type:"file",content:o,mode:s,mtime:new Date})}else a.isDirectory&&this.memory.set(n,{type:"directory",mode:s,mtime:new Date})}async symlink(t,s){this.assertWritable(`symlink '${s}'`);let n=this.normalizePath(s);if(await this.existsInOverlay(n))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(n),this.memory.set(n,{type:"symlink",target:t,mode:511,mtime:new Date}),this.deleted.delete(n)}async link(t,s){this.assertWritable(`link '${s}'`);let n=this.normalizePath(t),r=this.normalizePath(s);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, link '${t}'`);let a=await this.stat(n);if(!a.isFile)throw new Error(`EPERM: operation not permitted, link '${t}'`);if(await this.existsInOverlay(r))throw new Error(`EEXIST: file already exists, link '${s}'`);let f=await this.readFileBuffer(n);this.ensureParentDirs(r),this.memory.set(r,{type:"file",content:f,mode:a.mode,mtime:new Date}),this.deleted.delete(r)}async readlink(t){let s=this.normalizePath(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);let n=this.memory.get(s);if(n){if(n.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return n.target}let r=this.toRealPath(s);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);try{return await Z.promises.readlink(r)}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, readlink '${t}'`):i.code==="EINVAL"?new Error(`EINVAL: invalid argument, readlink '${t}'`):i}}async realpath(t){let s=this.normalizePath(t),n=new Set,r=async o=>{let f=o==="/"?[]:o.slice(1).split("/"),l="";for(let c of f){if(l=`${l}/${c}`,n.has(l))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(l))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let u=this.memory.get(l),d=0,h=40;for(;u&&u.type==="symlink"&&d<h;){if(n.add(l),l=this.resolveSymlink(l,u.target),d++,n.has(l))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(l))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);u=this.memory.get(l)}if(d>=h)throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(!u){let m=this.toRealPath(l);if(m)try{if((await Z.promises.lstat(m)).isSymbolicLink()){let g=await Z.promises.readlink(m);return n.add(l),l=this.resolveSymlink(l,g),r(l)}}catch(p){throw p.code==="ENOENT"?new Error(`ENOENT: no such file or directory, realpath '${t}'`):p}}}return l||"/"},i=await r(s);if(!await this.existsInOverlay(i))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);return i}async utimes(t,s,n){this.assertWritable(`utimes '${t}'`);let r=this.normalizePath(t);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);let a=this.memory.get(r);if(a){a.mtime=n;return}let o=await this.stat(r);if(o.isFile){let f=await this.readFileBuffer(r);this.memory.set(r,{type:"file",content:f,mode:o.mode,mtime:n})}else o.isDirectory&&this.memory.set(r,{type:"directory",mode:o.mode,mtime:n})}};var Y={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",cyan:"\x1B[36m"},Vs=class{env;rl;running=!0;history=[];isInteractive;constructor(t={}){let s=process.cwd(),n=new Rt({root:s,mountPoint:"/"});this.env=new xt({fs:n,cwd:t.cwd||"/",env:{HOME:"/",USER:"user",SHELL:"/bin/bash",TERM:"xterm-256color",...t.env},network:t.network!==!1?{dangerouslyAllowFullInternetAccess:!0}:void 0}),this.isInteractive=process.stdin.isTTY===!0,this.rl=Tr.createInterface({input:process.stdin,output:process.stdout,terminal:this.isInteractive}),this.rl.on("SIGINT",()=>{process.stdout.write(`^C
|
|
677
|
+
`,exitCode:1,env:me(this.state.env,s?.env)};if(!t.trim())return{stdout:"",stderr:"",exitCode:0,env:me(this.state.env,s?.env)};this.logger?.info("exec",{command:t});let n=s?.cwd??this.state.cwd,r,i=n;if(s?.cwd)if(s.env&&"PWD"in s.env)r=s.env.PWD;else if(s?.env&&!("PWD"in s.env))try{r=await this.fs.realpath(n),i=r}catch{r=n}else r=n;let o=new Map(this.state.env);if(s?.env)for(let[f,d]of Object.entries(s.env))o.set(f,d);r!==void 0&&o.set("PWD",r);let a={...this.state,env:o,cwd:i,functions:new Map(this.state.functions),localScopes:[...this.state.localScopes],options:{...this.state.options},hashTable:this.state.hashTable},l=t;s?.rawScript||(l=Co(t));let u=(this.defenseInDepthConfig?Mt.getInstance(this.defenseInDepthConfig):null)?.activate();try{let f=async()=>{let d=we(l),h={fs:this.fs,commands:this.commands,limits:this.limits,exec:this.exec.bind(this),fetch:this.secureFetch,sleep:this.sleepFn,trace:this.traceFn},p=await new tt(h,a).executeScript(d);return this.logResult(p)};return u?await u.run(f):await f()}catch(f){if(f instanceof V)return this.logResult({stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode,env:me(this.state.env,s?.env)});if(f instanceof pe)return this.logResult({stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode,env:me(this.state.env,s?.env)});if(f instanceof Te)return this.logResult({stdout:f.stdout,stderr:f.stderr,exitCode:1,env:me(this.state.env,s?.env)});if(f instanceof se)return this.logResult({stdout:f.stdout,stderr:f.stderr,exitCode:se.EXIT_CODE,env:me(this.state.env,s?.env)});if(f instanceof oe)return this.logResult({stdout:"",stderr:`bash: security violation: ${f.message}
|
|
678
|
+
`,exitCode:1,env:me(this.state.env,s?.env)});if(f.name==="ParseException")return this.logResult({stdout:"",stderr:`bash: syntax error: ${f.message}
|
|
679
|
+
`,exitCode:2,env:me(this.state.env,s?.env)});if(f instanceof Js)return this.logResult({stdout:"",stderr:`bash: ${f.message}
|
|
680
|
+
`,exitCode:2,env:me(this.state.env,s?.env)});if(f instanceof RangeError)return this.logResult({stdout:"",stderr:`bash: ${f.message}
|
|
681
|
+
`,exitCode:1,env:me(this.state.env,s?.env)});throw f}finally{u?.deactivate()}}async readFile(t){return this.fs.readFile(this.fs.resolvePath(this.state.cwd,t))}async writeFile(t,s){return this.fs.writeFile(this.fs.resolvePath(this.state.cwd,t),s)}getCwd(){return this.state.cwd}getEnv(){return Ce(this.state.env)}};function Co(e){let t=e.split(`
|
|
682
|
+
`),s=[],n=[];for(let r=0;r<t.length;r++){let i=t[r];if(n.length>0){let l=n[n.length-1];if((l.stripTabs?i.replace(/^\t+/,""):i)===l.delimiter){s.push(i.trimStart()),n.pop();continue}s.push(i);continue}let o=i.trimStart();s.push(o);let a=/<<(-?)\s*(['"]?)([\w-]+)\2/g;for(let l of o.matchAll(a)){let c=l[1]==="-",u=l[3];n.push({delimiter:u,stripTabs:c})}}return s.join(`
|
|
683
|
+
`)}import*as Z from"node:fs";import*as He from"node:path";var Po="/home/user/project";function J(e,t){if(e.includes("\0"))throw new Error(`ENOENT: path contains null byte, ${t} '${e}'`)}var Vt=class{root;mountPoint;readOnly;memory=new Map;deleted=new Set;constructor(t){this.root=He.resolve(t.root);let s=t.mountPoint??Po;if(this.mountPoint=s==="/"?"/":s.replace(/\/+$/,""),!this.mountPoint.startsWith("/"))throw new Error(`Mount point must be an absolute path: ${s}`);if(this.readOnly=t.readOnly??!1,!Z.existsSync(this.root))throw new Error(`OverlayFs root does not exist: ${this.root}`);if(!Z.statSync(this.root).isDirectory())throw new Error(`OverlayFs root is not a directory: ${this.root}`);this.createMountPointDirs()}assertWritable(t){if(this.readOnly)throw new Error(`EROFS: read-only file system, ${t}`)}createMountPointDirs(){let t=this.mountPoint.split("/").filter(Boolean),s="";for(let n of t)s+=`/${n}`,this.memory.has(s)||this.memory.set(s,{type:"directory",mode:493,mtime:new Date});this.memory.has("/")||this.memory.set("/",{type:"directory",mode:493,mtime:new Date})}getMountPoint(){return this.mountPoint}mkdirSync(t,s){let r=this.normalizePath(t).split("/").filter(Boolean),i="";for(let o of r)i+=`/${o}`,this.memory.has(i)||this.memory.set(i,{type:"directory",mode:493,mtime:new Date})}writeFileSync(t,s){let n=this.normalizePath(t),r=this.getDirname(n);r!=="/"&&this.mkdirSync(r);let i=s instanceof Uint8Array?s:new TextEncoder().encode(s);this.memory.set(n,{type:"file",content:i,mode:420,mtime:new Date})}getDirname(t){let s=t.lastIndexOf("/");return s===0?"/":t.slice(0,s)}normalizePath(t){if(!t||t==="/")return"/";let s=t.endsWith("/")&&t!=="/"?t.slice(0,-1):t;s.startsWith("/")||(s=`/${s}`);let n=s.split("/").filter(i=>i&&i!=="."),r=[];for(let i of n)i===".."?r.pop():r.push(i);return`/${r.join("/")}`||"/"}getRelativeToMount(t){return this.mountPoint==="/"?t:t===this.mountPoint?"/":t.startsWith(`${this.mountPoint}/`)?t.slice(this.mountPoint.length):null}toRealPath(t){let s=this.normalizePath(t),n=this.getRelativeToMount(s);if(n===null)return null;let r=He.join(this.root,n),i=He.resolve(r);return!i.startsWith(this.root)&&i!==this.root.replace(/\/$/,"")?null:i}dirname(t){let s=this.normalizePath(t);if(s==="/")return"/";let n=s.lastIndexOf("/");return n===0?"/":s.slice(0,n)}ensureParentDirs(t){let s=this.dirname(t);s!=="/"&&(this.memory.has(s)||(this.ensureParentDirs(s),this.memory.set(s,{type:"directory",mode:493,mtime:new Date})),this.deleted.delete(s))}async existsInOverlay(t){let s=this.normalizePath(t);if(this.deleted.has(s))return!1;if(this.memory.has(s))return!0;let n=this.toRealPath(s);if(!n)return!1;try{return await Z.promises.access(n),!0}catch{return!1}}async readFile(t,s){let n=await this.readFileBuffer(t),r=Ne(s);return dt(n,r)}async readFileBuffer(t,s=new Set){J(t,"open");let n=this.normalizePath(t);if(s.has(n))throw new Error(`ELOOP: too many levels of symbolic links, open '${t}'`);if(s.add(n),this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, open '${t}'`);let r=this.memory.get(n);if(r){if(r.type==="symlink"){let o=this.resolveSymlink(n,r.target);return this.readFileBuffer(o,s)}if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);return r.content}let i=this.toRealPath(n);if(!i)throw new Error(`ENOENT: no such file or directory, open '${t}'`);try{let o=await Z.promises.lstat(i);if(o.isSymbolicLink()){let l=await Z.promises.readlink(i),c=this.resolveSymlink(n,l);return this.readFileBuffer(c,s)}if(o.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${t}'`);let a=await Z.promises.readFile(i);return new Uint8Array(a)}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, open '${t}'`):o}}async writeFile(t,s,n){J(t,"write"),this.assertWritable(`write '${t}'`);let r=this.normalizePath(t);this.ensureParentDirs(r);let i=Ne(n),o=Me(s,i);this.memory.set(r,{type:"file",content:o,mode:420,mtime:new Date}),this.deleted.delete(r)}async appendFile(t,s,n){J(t,"append"),this.assertWritable(`append '${t}'`);let r=this.normalizePath(t),i=Ne(n),o=Me(s,i),a;try{a=await this.readFileBuffer(r)}catch{a=new Uint8Array(0)}let l=new Uint8Array(a.length+o.length);l.set(a),l.set(o,a.length),this.ensureParentDirs(r),this.memory.set(r,{type:"file",content:l,mode:420,mtime:new Date}),this.deleted.delete(r)}async exists(t){return t.includes("\0")?!1:this.existsInOverlay(t)}async stat(t,s=new Set){J(t,"stat");let n=this.normalizePath(t);if(s.has(n))throw new Error(`ELOOP: too many levels of symbolic links, stat '${t}'`);if(s.add(n),this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, stat '${t}'`);let r=this.memory.get(n);if(r){if(r.type==="symlink"){let a=this.resolveSymlink(n,r.target);return this.stat(a,s)}let o=0;return r.type==="file"&&(o=r.content.length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:o,mtime:r.mtime}}let i=this.toRealPath(n);if(!i)throw new Error(`ENOENT: no such file or directory, stat '${t}'`);try{let o=await Z.promises.stat(i);return{isFile:o.isFile(),isDirectory:o.isDirectory(),isSymbolicLink:!1,mode:o.mode,size:o.size,mtime:o.mtime}}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, stat '${t}'`):o}}async lstat(t){J(t,"lstat");let s=this.normalizePath(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);let n=this.memory.get(s);if(n){if(n.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:n.mode,size:n.target.length,mtime:n.mtime};let i=0;return n.type==="file"&&(i=n.content.length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:i,mtime:n.mtime}}let r=this.toRealPath(s);if(!r)throw new Error(`ENOENT: no such file or directory, lstat '${t}'`);try{let i=await Z.promises.lstat(r);return{isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:i.isSymbolicLink(),mode:i.mode,size:i.size,mtime:i.mtime}}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, lstat '${t}'`):i}}resolveSymlink(t,s){if(s.startsWith("/"))return this.normalizePath(s);let n=this.dirname(t);return this.normalizePath(n==="/"?`/${s}`:`${n}/${s}`)}async mkdir(t,s){J(t,"mkdir"),this.assertWritable(`mkdir '${t}'`);let n=this.normalizePath(t);if(await this.existsInOverlay(n)){if(!s?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${t}'`);return}let i=this.dirname(n);if(i!=="/"&&!await this.existsInOverlay(i))if(s?.recursive)await this.mkdir(i,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${t}'`);this.memory.set(n,{type:"directory",mode:493,mtime:new Date}),this.deleted.delete(n)}async readdirCore(t,s){if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`);let n=new Map,r=new Set,i=s==="/"?"/":`${s}/`;for(let a of this.deleted)if(a.startsWith(i)){let l=a.slice(i.length),c=l.split("/")[0];c&&!l.includes("/",c.length)&&r.add(c)}for(let[a,l]of this.memory)if(a!==s&&a.startsWith(i)){let c=a.slice(i.length),u=c.split("/")[0];u&&!r.has(u)&&!c.includes("/",1)&&n.set(u,{name:u,isFile:l.type==="file",isDirectory:l.type==="directory",isSymbolicLink:l.type==="symlink"})}let o=this.toRealPath(s);if(o)try{let a=await Z.promises.readdir(o,{withFileTypes:!0});for(let l of a)!r.has(l.name)&&!n.has(l.name)&&n.set(l.name,{name:l.name,isFile:l.isFile(),isDirectory:l.isDirectory(),isSymbolicLink:l.isSymbolicLink()})}catch(a){if(a.code==="ENOENT"){if(!this.memory.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${t}'`)}else if(a.code!=="ENOTDIR")throw a}return n}async resolveForReaddir(t,s=!1){let n=this.normalizePath(t),r=new Set,i=s,o=this.memory.get(n);for(;o&&o.type==="symlink";){if(r.has(n))throw new Error(`ELOOP: too many levels of symbolic links, scandir '${t}'`);r.add(n),i=!0,n=this.resolveSymlink(n,o.target),o=this.memory.get(n)}if(o)return{normalized:n,outsideOverlay:!1};if(this.getRelativeToMount(n)===null)return{normalized:n,outsideOverlay:!0};let l=this.toRealPath(n);if(!l)return{normalized:n,outsideOverlay:!0};try{if((await Z.promises.lstat(l)).isSymbolicLink()){let u=await Z.promises.readlink(l),f=this.resolveSymlink(n,u);return this.resolveForReaddir(f,!0)}return{normalized:n,outsideOverlay:!1}}catch{return i?{normalized:n,outsideOverlay:!0}:{normalized:n,outsideOverlay:!1}}}async readdir(t){J(t,"scandir");let{normalized:s,outsideOverlay:n}=await this.resolveForReaddir(t);if(n)return[];let r=await this.readdirCore(t,s);return Array.from(r.keys()).sort((i,o)=>i<o?-1:i>o?1:0)}async readdirWithFileTypes(t){J(t,"scandir");let{normalized:s,outsideOverlay:n}=await this.resolveForReaddir(t);if(n)return[];let r=await this.readdirCore(t,s);return Array.from(r.values()).sort((i,o)=>i.name<o.name?-1:i.name>o.name?1:0)}async rm(t,s){J(t,"rm"),this.assertWritable(`rm '${t}'`);let n=this.normalizePath(t);if(!await this.existsInOverlay(n)){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${t}'`)}try{if((await this.stat(n)).isDirectory){let o=await this.readdir(n);if(o.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${t}'`);for(let a of o){let l=n==="/"?`/${a}`:`${n}/${a}`;await this.rm(l,s)}}}}catch{}this.deleted.add(n),this.memory.delete(n)}async cp(t,s,n){J(t,"cp"),J(s,"cp"),this.assertWritable(`cp '${s}'`);let r=this.normalizePath(t),i=this.normalizePath(s);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, cp '${t}'`);let a=await this.stat(r);if(a.isFile){let l=await this.readFileBuffer(r);await this.writeFile(i,l)}else if(a.isDirectory){if(!n?.recursive)throw new Error(`EISDIR: is a directory, cp '${t}'`);await this.mkdir(i,{recursive:!0});let l=await this.readdir(r);for(let c of l){let u=r==="/"?`/${c}`:`${r}/${c}`,f=i==="/"?`/${c}`:`${i}/${c}`;await this.cp(u,f,n)}}}async mv(t,s){this.assertWritable(`mv '${s}'`),await this.cp(t,s,{recursive:!0}),await this.rm(t,{recursive:!0})}resolvePath(t,s){if(s.startsWith("/"))return this.normalizePath(s);let n=t==="/"?`/${s}`:`${t}/${s}`;return this.normalizePath(n)}getAllPaths(){let t=new Set(this.memory.keys());for(let s of this.deleted)t.delete(s);return this.scanRealFs("/",t),Array.from(t)}scanRealFs(t,s){if(this.deleted.has(t))return;let n=this.toRealPath(t);if(n)try{let r=Z.readdirSync(n);for(let i of r){let o=t==="/"?`/${i}`:`${t}/${i}`;if(this.deleted.has(o))continue;s.add(o);let a=He.join(n,i);Z.statSync(a).isDirectory()&&this.scanRealFs(o,s)}}catch{}}async chmod(t,s){J(t,"chmod"),this.assertWritable(`chmod '${t}'`);let n=this.normalizePath(t);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, chmod '${t}'`);let i=this.memory.get(n);if(i){i.mode=s;return}let o=await this.stat(n);if(o.isFile){let a=await this.readFileBuffer(n);this.memory.set(n,{type:"file",content:a,mode:s,mtime:new Date})}else o.isDirectory&&this.memory.set(n,{type:"directory",mode:s,mtime:new Date})}async symlink(t,s){J(s,"symlink"),this.assertWritable(`symlink '${s}'`);let n=this.normalizePath(s);if(await this.existsInOverlay(n))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(n),this.memory.set(n,{type:"symlink",target:t,mode:511,mtime:new Date}),this.deleted.delete(n)}async link(t,s){J(t,"link"),J(s,"link"),this.assertWritable(`link '${s}'`);let n=this.normalizePath(t),r=this.normalizePath(s);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, link '${t}'`);let o=await this.stat(n);if(!o.isFile)throw new Error(`EPERM: operation not permitted, link '${t}'`);if(await this.existsInOverlay(r))throw new Error(`EEXIST: file already exists, link '${s}'`);let l=await this.readFileBuffer(n);this.ensureParentDirs(r),this.memory.set(r,{type:"file",content:l,mode:o.mode,mtime:new Date}),this.deleted.delete(r)}async readlink(t){J(t,"readlink");let s=this.normalizePath(t);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);let n=this.memory.get(s);if(n){if(n.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${t}'`);return n.target}let r=this.toRealPath(s);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${t}'`);try{return await Z.promises.readlink(r)}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, readlink '${t}'`):i.code==="EINVAL"?new Error(`EINVAL: invalid argument, readlink '${t}'`):i}}async realpath(t){J(t,"realpath");let s=this.normalizePath(t),n=new Set,r=async a=>{let l=a==="/"?[]:a.slice(1).split("/"),c="";for(let u of l){if(c=`${c}/${u}`,n.has(c))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(c))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);let f=this.memory.get(c),d=0,h=40;for(;f&&f.type==="symlink"&&d<h;){if(n.add(c),c=this.resolveSymlink(c,f.target),d++,n.has(c))throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(this.deleted.has(c))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);f=this.memory.get(c)}if(d>=h)throw new Error(`ELOOP: too many levels of symbolic links, realpath '${t}'`);if(!f){let m=this.toRealPath(c);if(m)try{if((await Z.promises.lstat(m)).isSymbolicLink()){let g=await Z.promises.readlink(m);return n.add(c),c=this.resolveSymlink(c,g),r(c)}}catch(p){throw p.code==="ENOENT"?new Error(`ENOENT: no such file or directory, realpath '${t}'`):p}}}return c||"/"},i=await r(s);if(!await this.existsInOverlay(i))throw new Error(`ENOENT: no such file or directory, realpath '${t}'`);return i}async utimes(t,s,n){J(t,"utimes"),this.assertWritable(`utimes '${t}'`);let r=this.normalizePath(t);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, utimes '${t}'`);let o=this.memory.get(r);if(o){o.mtime=n;return}let a=await this.stat(r);if(a.isFile){let l=await this.readFileBuffer(r);this.memory.set(r,{type:"file",content:l,mode:a.mode,mtime:n})}else a.isDirectory&&this.memory.set(r,{type:"directory",mode:a.mode,mtime:n})}};var Y={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",cyan:"\x1B[36m"},Gs=class{env;rl;running=!0;history=[];isInteractive;constructor(t={}){let s=process.cwd(),n=new Vt({root:s,mountPoint:"/"});this.env=new Wt({fs:n,cwd:t.cwd||"/",env:{HOME:"/",USER:"user",SHELL:"/bin/bash",TERM:"xterm-256color",...t.env},network:t.network!==!1?{dangerouslyAllowFullInternetAccess:!0}:void 0}),this.isInteractive=process.stdin.isTTY===!0,this.rl=Br.createInterface({input:process.stdin,output:process.stdout,terminal:this.isInteractive}),this.rl.on("SIGINT",()=>{process.stdout.write(`^C
|
|
678
684
|
`),this.prompt()}),process.stdin.isTTY&&this.rl.on("close",()=>{this.running=!1,console.log(`
|
|
679
|
-
Goodbye!`),process.exit(0)})}syncHistory(){let t=this.env.getEnv();t.BASH_HISTORY=JSON.stringify(this.history)}getPrompt(){let t=this.env.getCwd(),s=this.env.getEnv().HOME||"/home/user",n=t;return t===s?n="~":t.startsWith(`${s}/`)&&(n=`~${t.slice(s.length)}`),`${Y.green}${Y.bold}user@virtual${Y.reset}:${Y.blue}${Y.bold}${n}${Y.reset}$ `}async executeCommand(t){let s=t.trim();if(s){if(this.history.push(s),s==="exit"||s.startsWith("exit ")){let n=s.split(/\s+/),r=n[1]?parseInt(n[1],10):0;console.log("exit"),process.exit(r)}this.syncHistory();try{let n=await this.env.exec(s);n.stdout&&process.stdout.write(n.stdout),n.stderr&&process.stderr.write(`${Y.red}${n.stderr}${Y.reset}`)}catch(n){console.error(`${Y.red}Error: ${
|
|
685
|
+
Goodbye!`),process.exit(0)})}syncHistory(){let t=this.env.getEnv();t.BASH_HISTORY=JSON.stringify(this.history)}getPrompt(){let t=this.env.getCwd(),s=this.env.getEnv().HOME||"/home/user",n=t;return t===s?n="~":t.startsWith(`${s}/`)&&(n=`~${t.slice(s.length)}`),`${Y.green}${Y.bold}user@virtual${Y.reset}:${Y.blue}${Y.bold}${n}${Y.reset}$ `}async executeCommand(t){let s=t.trim();if(s){if(this.history.push(s),s==="exit"||s.startsWith("exit ")){let n=s.split(/\s+/),r=n[1]?parseInt(n[1],10):0;console.log("exit"),process.exit(r)}this.syncHistory();try{let n=await this.env.exec(s);n.stdout&&process.stdout.write(n.stdout),n.stderr&&process.stderr.write(`${Y.red}${n.stderr}${Y.reset}`)}catch(n){console.error(`${Y.red}Error: ${he(n)}${Y.reset}`)}}}printWelcome(){console.log(`
|
|
680
686
|
${Y.cyan}${Y.bold}\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557
|
|
681
687
|
\u2551 Virtual Shell v1.0 \u2551
|
|
682
688
|
\u2551 A simulated bash environment in TypeScript \u2551
|
|
@@ -686,7 +692,7 @@ ${Y.dim}Exploring: ${process.cwd()}${Y.reset}
|
|
|
686
692
|
|
|
687
693
|
Type ${Y.green}help${Y.reset} for available commands, ${Y.green}exit${Y.reset} to quit.
|
|
688
694
|
Reads from real filesystem, writes stay in memory (OverlayFs).
|
|
689
|
-
`)}prompt(){this.rl.question(this.getPrompt(),async t=>{this.running&&(await this.executeCommand(t),this.prompt())})}async run(){if(this.isInteractive)this.printWelcome(),this.prompt();else{let t=[];this.rl.on("line",s=>{t.push(s)}),await new Promise(s=>{this.rl.on("close",s)});for(let s of t)await this.executeCommand(s)}}};function
|
|
695
|
+
`)}prompt(){this.rl.question(this.getPrompt(),async t=>{this.running&&(await this.executeCommand(t),this.prompt())})}async run(){if(this.isInteractive)this.printWelcome(),this.prompt();else{let t=[];this.rl.on("line",s=>{t.push(s)}),await new Promise(s=>{this.rl.on("close",s)});for(let s of t)await this.executeCommand(s)}}};function ko(){let e=process.argv.slice(2),t={network:!0};for(let s=0;s<e.length;s++)if(e[s]==="--cwd"&&e[s+1])t.cwd=e[++s];else if(e[s]==="--files"&&e[s+1]){let n=e[++s];try{let r=zr.readFileSync(n,"utf-8");t.files=JSON.parse(r)}catch(r){console.error(`Error reading files from ${n}:`,r),process.exit(1)}}else e[s]==="--no-network"?t.network=!1:(e[s]==="--help"||e[s]==="-h")&&(console.log(`
|
|
690
696
|
Usage: pnpm shell [options]
|
|
691
697
|
|
|
692
698
|
Interactive shell using OverlayFs - reads from the current directory,
|
|
@@ -700,4 +706,4 @@ Options:
|
|
|
700
706
|
Example:
|
|
701
707
|
pnpm shell
|
|
702
708
|
pnpm shell --no-network
|
|
703
|
-
`),process.exit(0));return t}var
|
|
709
|
+
`),process.exit(0));return t}var No=ko(),Oo=new Gs(No);Oo.run();
|