just-bash 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/dist/ast/types.d.ts +2 -0
  2. package/dist/bin/just-bash.js +124 -116
  3. package/dist/bin/shell/shell.js +107 -99
  4. package/dist/bundle/ai/index.js +394 -386
  5. package/dist/bundle/index.js +120 -112
  6. package/dist/interpreter/types.d.ts +6 -0
  7. package/dist/shell-metadata.d.ts +28 -0
  8. package/package.json +1 -1
  9. package/dist/bin/chunks/alias-74DFXE2E.js +0 -7
  10. package/dist/bin/chunks/awk-S63F6IYK.js +0 -15
  11. package/dist/bin/chunks/awk2-4DKPX43H.js +0 -20
  12. package/dist/bin/chunks/awk2-6XCE67AX.js +0 -20
  13. package/dist/bin/chunks/awk2-DKAZ7LPG.js +0 -20
  14. package/dist/bin/chunks/awk2-GAJ72X3Z.js +0 -20
  15. package/dist/bin/chunks/awk2-HJAPWU2N.js +0 -18
  16. package/dist/bin/chunks/awk2-LVXC5OAC.js +0 -20
  17. package/dist/bin/chunks/awk2-T6HR4EYO.js +0 -20
  18. package/dist/bin/chunks/awk2-UYU2UYZ2.js +0 -20
  19. package/dist/bin/chunks/awk2-W64AZN7P.js +0 -20
  20. package/dist/bin/chunks/base64-KNBBHA5Y.js +0 -5
  21. package/dist/bin/chunks/base64-NC7HTKLZ.js +0 -5
  22. package/dist/bin/chunks/basename-Y7JDBYHN.js +0 -6
  23. package/dist/bin/chunks/bash-5IWSVGHN.js +0 -7
  24. package/dist/bin/chunks/bash-TQGTNXAE.js +0 -7
  25. package/dist/bin/chunks/cat-YZXBF5YF.js +0 -6
  26. package/dist/bin/chunks/chmod-3G4LK462.js +0 -9
  27. package/dist/bin/chunks/chunk-5KNEBKYN.js +0 -2
  28. package/dist/bin/chunks/chunk-6QUZ7QML.js +0 -3
  29. package/dist/bin/chunks/chunk-7Q4WQLOS.js +0 -9
  30. package/dist/bin/chunks/chunk-LV662IGP.js +0 -6
  31. package/dist/bin/chunks/clear-GTCFHSB2.js +0 -2
  32. package/dist/bin/chunks/cp-77UY7PGN.js +0 -8
  33. package/dist/bin/chunks/curl-NE7XEWMN.js +0 -26
  34. package/dist/bin/chunks/cut-UYV3FM7R.js +0 -6
  35. package/dist/bin/chunks/date-7NBRXV2Z.js +0 -5
  36. package/dist/bin/chunks/diff-TG2NXCX2.js +0 -19
  37. package/dist/bin/chunks/dirname-VLHP44TU.js +0 -5
  38. package/dist/bin/chunks/du-4FZ7WF2P.js +0 -8
  39. package/dist/bin/chunks/echo-DEUIS5JO.js +0 -4
  40. package/dist/bin/chunks/env-AKGX6HSG.js +0 -9
  41. package/dist/bin/chunks/env-FVITWNHG.js +0 -9
  42. package/dist/bin/chunks/expr-HA2ZNL6S.js +0 -5
  43. package/dist/bin/chunks/file-Q4UOC4J2.js +0 -23
  44. package/dist/bin/chunks/find-4B67H4RP.js +0 -11
  45. package/dist/bin/chunks/find-7BUNQZX4.js +0 -11
  46. package/dist/bin/chunks/find-AMA6ABN5.js +0 -11
  47. package/dist/bin/chunks/find-HW2TUO6B.js +0 -11
  48. package/dist/bin/chunks/find-JADNFF7V.js +0 -11
  49. package/dist/bin/chunks/find-NCI6KGUI.js +0 -11
  50. package/dist/bin/chunks/find-QEYP42JQ.js +0 -11
  51. package/dist/bin/chunks/find-WJV3FM6L.js +0 -11
  52. package/dist/bin/chunks/find-YATLECXJ.js +0 -11
  53. package/dist/bin/chunks/grep-OVWU4WCZ.js +0 -15
  54. package/dist/bin/chunks/grep-PHBFGJCV.js +0 -15
  55. package/dist/bin/chunks/head-VGXR3WWL.js +0 -2
  56. package/dist/bin/chunks/help-5V3MPCYQ.js +0 -16
  57. package/dist/bin/chunks/help-YQGNAT2T.js +0 -16
  58. package/dist/bin/chunks/history-PRQ4B6N2.js +0 -3
  59. package/dist/bin/chunks/html-to-markdown-L4UWMK4S.js +0 -84
  60. package/dist/bin/chunks/jq-EYSXBSCP.js +0 -14
  61. package/dist/bin/chunks/ln-DB7J2W5X.js +0 -10
  62. package/dist/bin/chunks/ls-C4MPAF3H.js +0 -26
  63. package/dist/bin/chunks/md5sum-KZ4MRIXM.js +0 -2
  64. package/dist/bin/chunks/mkdir-LWULWDHP.js +0 -7
  65. package/dist/bin/chunks/mv-TDYCNSIQ.js +0 -7
  66. package/dist/bin/chunks/paste-R36J3G4K.js +0 -8
  67. package/dist/bin/chunks/printf-ASOYDPIK.js +0 -14
  68. package/dist/bin/chunks/printf-BOFQVMMK.js +0 -15
  69. package/dist/bin/chunks/printf-WM4X6IZ6.js +0 -14
  70. package/dist/bin/chunks/pwd-X4MWD4JP.js +0 -3
  71. package/dist/bin/chunks/readlink-DPNOQY67.js +0 -7
  72. package/dist/bin/chunks/rm-W6CCBEMG.js +0 -8
  73. package/dist/bin/chunks/sed-7IS44XON.js +0 -48
  74. package/dist/bin/chunks/sed-B6FXUN7R.js +0 -80
  75. package/dist/bin/chunks/sed-LTCVBSRV.js +0 -80
  76. package/dist/bin/chunks/sed-RHLDIXPL.js +0 -76
  77. package/dist/bin/chunks/sed-SYSATJXR.js +0 -75
  78. package/dist/bin/chunks/seq-DGJILX2Q.js +0 -7
  79. package/dist/bin/chunks/sha1sum-XLRE72T4.js +0 -2
  80. package/dist/bin/chunks/sha256sum-BBKWFA43.js +0 -2
  81. package/dist/bin/chunks/sleep-E4DIYGTT.js +0 -10
  82. package/dist/bin/chunks/sort-NCQNGVCX.js +0 -16
  83. package/dist/bin/chunks/sort-UJP353TM.js +0 -15
  84. package/dist/bin/chunks/sort-WGKQ3WYR.js +0 -15
  85. package/dist/bin/chunks/stat-3PHITCPO.js +0 -9
  86. package/dist/bin/chunks/tail-YSVKBQ77.js +0 -2
  87. package/dist/bin/chunks/tee-UU2VS3OM.js +0 -3
  88. package/dist/bin/chunks/timeout-OZVAGW2H.js +0 -12
  89. package/dist/bin/chunks/timeout-RP2AJGMV.js +0 -12
  90. package/dist/bin/chunks/touch-XCIAYF5I.js +0 -4
  91. package/dist/bin/chunks/tr-2EEKHHO6.js +0 -20
  92. package/dist/bin/chunks/tree-4247W67O.js +0 -12
  93. package/dist/bin/chunks/true-JCX733LK.js +0 -2
  94. package/dist/bin/chunks/uniq-W4HF6YSB.js +0 -5
  95. package/dist/bin/chunks/wc-CNJ3QDRA.js +0 -6
  96. package/dist/bin/chunks/which-HX2NMOP3.js +0 -3
  97. package/dist/bin/chunks/xargs-DKUAYNEK.js +0 -4
  98. package/dist/bin/chunks/xargs-XAZFX5J3.js +0 -4
  99. package/dist/bin/chunks/xargs-YNLVLPOF.js +0 -4
  100. package/dist/bin/shell/chunks/alias-74DFXE2E.js +0 -7
  101. package/dist/bin/shell/chunks/awk-S63F6IYK.js +0 -15
  102. package/dist/bin/shell/chunks/awk2-4DKPX43H.js +0 -20
  103. package/dist/bin/shell/chunks/awk2-6XCE67AX.js +0 -20
  104. package/dist/bin/shell/chunks/awk2-DKAZ7LPG.js +0 -20
  105. package/dist/bin/shell/chunks/awk2-GAJ72X3Z.js +0 -20
  106. package/dist/bin/shell/chunks/awk2-HJAPWU2N.js +0 -18
  107. package/dist/bin/shell/chunks/awk2-LVXC5OAC.js +0 -20
  108. package/dist/bin/shell/chunks/awk2-T6HR4EYO.js +0 -20
  109. package/dist/bin/shell/chunks/awk2-UYU2UYZ2.js +0 -20
  110. package/dist/bin/shell/chunks/awk2-W64AZN7P.js +0 -20
  111. package/dist/bin/shell/chunks/base64-KNBBHA5Y.js +0 -5
  112. package/dist/bin/shell/chunks/base64-NC7HTKLZ.js +0 -5
  113. package/dist/bin/shell/chunks/basename-Y7JDBYHN.js +0 -6
  114. package/dist/bin/shell/chunks/bash-5IWSVGHN.js +0 -7
  115. package/dist/bin/shell/chunks/bash-TQGTNXAE.js +0 -7
  116. package/dist/bin/shell/chunks/cat-YZXBF5YF.js +0 -6
  117. package/dist/bin/shell/chunks/chmod-3G4LK462.js +0 -9
  118. package/dist/bin/shell/chunks/chunk-5KNEBKYN.js +0 -2
  119. package/dist/bin/shell/chunks/chunk-6QUZ7QML.js +0 -3
  120. package/dist/bin/shell/chunks/chunk-7Q4WQLOS.js +0 -9
  121. package/dist/bin/shell/chunks/chunk-LV662IGP.js +0 -6
  122. package/dist/bin/shell/chunks/clear-GTCFHSB2.js +0 -2
  123. package/dist/bin/shell/chunks/cp-77UY7PGN.js +0 -8
  124. package/dist/bin/shell/chunks/curl-NE7XEWMN.js +0 -26
  125. package/dist/bin/shell/chunks/cut-UYV3FM7R.js +0 -6
  126. package/dist/bin/shell/chunks/date-7NBRXV2Z.js +0 -5
  127. package/dist/bin/shell/chunks/diff-TG2NXCX2.js +0 -19
  128. package/dist/bin/shell/chunks/dirname-VLHP44TU.js +0 -5
  129. package/dist/bin/shell/chunks/du-4FZ7WF2P.js +0 -8
  130. package/dist/bin/shell/chunks/echo-DEUIS5JO.js +0 -4
  131. package/dist/bin/shell/chunks/env-AKGX6HSG.js +0 -9
  132. package/dist/bin/shell/chunks/env-FVITWNHG.js +0 -9
  133. package/dist/bin/shell/chunks/expr-HA2ZNL6S.js +0 -5
  134. package/dist/bin/shell/chunks/file-Q4UOC4J2.js +0 -23
  135. package/dist/bin/shell/chunks/find-4B67H4RP.js +0 -11
  136. package/dist/bin/shell/chunks/find-7BUNQZX4.js +0 -11
  137. package/dist/bin/shell/chunks/find-AMA6ABN5.js +0 -11
  138. package/dist/bin/shell/chunks/find-HW2TUO6B.js +0 -11
  139. package/dist/bin/shell/chunks/find-JADNFF7V.js +0 -11
  140. package/dist/bin/shell/chunks/find-NCI6KGUI.js +0 -11
  141. package/dist/bin/shell/chunks/find-QEYP42JQ.js +0 -11
  142. package/dist/bin/shell/chunks/find-WJV3FM6L.js +0 -11
  143. package/dist/bin/shell/chunks/find-YATLECXJ.js +0 -11
  144. package/dist/bin/shell/chunks/grep-OVWU4WCZ.js +0 -15
  145. package/dist/bin/shell/chunks/grep-PHBFGJCV.js +0 -15
  146. package/dist/bin/shell/chunks/head-VGXR3WWL.js +0 -2
  147. package/dist/bin/shell/chunks/help-5V3MPCYQ.js +0 -16
  148. package/dist/bin/shell/chunks/help-YQGNAT2T.js +0 -16
  149. package/dist/bin/shell/chunks/history-PRQ4B6N2.js +0 -3
  150. package/dist/bin/shell/chunks/html-to-markdown-L4UWMK4S.js +0 -84
  151. package/dist/bin/shell/chunks/jq-EYSXBSCP.js +0 -14
  152. package/dist/bin/shell/chunks/ln-DB7J2W5X.js +0 -10
  153. package/dist/bin/shell/chunks/ls-C4MPAF3H.js +0 -26
  154. package/dist/bin/shell/chunks/md5sum-KZ4MRIXM.js +0 -2
  155. package/dist/bin/shell/chunks/mkdir-LWULWDHP.js +0 -7
  156. package/dist/bin/shell/chunks/mv-TDYCNSIQ.js +0 -7
  157. package/dist/bin/shell/chunks/paste-R36J3G4K.js +0 -8
  158. package/dist/bin/shell/chunks/printf-ASOYDPIK.js +0 -14
  159. package/dist/bin/shell/chunks/printf-BOFQVMMK.js +0 -15
  160. package/dist/bin/shell/chunks/printf-WM4X6IZ6.js +0 -14
  161. package/dist/bin/shell/chunks/pwd-X4MWD4JP.js +0 -3
  162. package/dist/bin/shell/chunks/readlink-DPNOQY67.js +0 -7
  163. package/dist/bin/shell/chunks/rm-W6CCBEMG.js +0 -8
  164. package/dist/bin/shell/chunks/sed-7IS44XON.js +0 -48
  165. package/dist/bin/shell/chunks/sed-B6FXUN7R.js +0 -80
  166. package/dist/bin/shell/chunks/sed-LTCVBSRV.js +0 -80
  167. package/dist/bin/shell/chunks/sed-RHLDIXPL.js +0 -76
  168. package/dist/bin/shell/chunks/sed-SYSATJXR.js +0 -75
  169. package/dist/bin/shell/chunks/seq-DGJILX2Q.js +0 -7
  170. package/dist/bin/shell/chunks/sha1sum-XLRE72T4.js +0 -2
  171. package/dist/bin/shell/chunks/sha256sum-BBKWFA43.js +0 -2
  172. package/dist/bin/shell/chunks/sleep-E4DIYGTT.js +0 -10
  173. package/dist/bin/shell/chunks/sort-NCQNGVCX.js +0 -16
  174. package/dist/bin/shell/chunks/sort-UJP353TM.js +0 -15
  175. package/dist/bin/shell/chunks/sort-WGKQ3WYR.js +0 -15
  176. package/dist/bin/shell/chunks/stat-3PHITCPO.js +0 -9
  177. package/dist/bin/shell/chunks/tail-YSVKBQ77.js +0 -2
  178. package/dist/bin/shell/chunks/tee-UU2VS3OM.js +0 -3
  179. package/dist/bin/shell/chunks/timeout-OZVAGW2H.js +0 -12
  180. package/dist/bin/shell/chunks/timeout-RP2AJGMV.js +0 -12
  181. package/dist/bin/shell/chunks/touch-XCIAYF5I.js +0 -4
  182. package/dist/bin/shell/chunks/tr-2EEKHHO6.js +0 -20
  183. package/dist/bin/shell/chunks/tree-4247W67O.js +0 -12
  184. package/dist/bin/shell/chunks/true-JCX733LK.js +0 -2
  185. package/dist/bin/shell/chunks/uniq-W4HF6YSB.js +0 -5
  186. package/dist/bin/shell/chunks/wc-CNJ3QDRA.js +0 -6
  187. package/dist/bin/shell/chunks/which-HX2NMOP3.js +0 -3
  188. package/dist/bin/shell/chunks/xargs-DKUAYNEK.js +0 -4
  189. package/dist/bin/shell/chunks/xargs-XAZFX5J3.js +0 -4
  190. package/dist/bin/shell/chunks/xargs-YNLVLPOF.js +0 -4
  191. package/dist/bundle/chunks/alias-7ZSTROM7.js +0 -6
  192. package/dist/bundle/chunks/awk-V4C3GTJI.js +0 -14
  193. package/dist/bundle/chunks/awk2-365HINHI.js +0 -19
  194. package/dist/bundle/chunks/awk2-4YCQ6UCB.js +0 -19
  195. package/dist/bundle/chunks/awk2-7YCFY7D2.js +0 -19
  196. package/dist/bundle/chunks/awk2-7YL3P4KU.js +0 -19
  197. package/dist/bundle/chunks/awk2-ETXZHQQ4.js +0 -19
  198. package/dist/bundle/chunks/awk2-FMEL7ESV.js +0 -19
  199. package/dist/bundle/chunks/awk2-LE4QUFGK.js +0 -19
  200. package/dist/bundle/chunks/awk2-MGHA6JPJ.js +0 -17
  201. package/dist/bundle/chunks/awk2-XEAK5PBN.js +0 -19
  202. package/dist/bundle/chunks/base64-JN6XXTIG.js +0 -4
  203. package/dist/bundle/chunks/base64-WATI5PWI.js +0 -4
  204. package/dist/bundle/chunks/basename-SB5JXIY3.js +0 -5
  205. package/dist/bundle/chunks/bash-5WG5RD6L.js +0 -6
  206. package/dist/bundle/chunks/bash-T4PXVRYX.js +0 -6
  207. package/dist/bundle/chunks/cat-5KESXK2M.js +0 -5
  208. package/dist/bundle/chunks/chmod-VLKWIL3N.js +0 -8
  209. package/dist/bundle/chunks/chunk-4HEWHW5W.js +0 -8
  210. package/dist/bundle/chunks/chunk-JYYFSUWP.js +0 -5
  211. package/dist/bundle/chunks/chunk-TDJNT32M.js +0 -2
  212. package/dist/bundle/chunks/clear-ZBD2DMXN.js +0 -1
  213. package/dist/bundle/chunks/cp-BLHAPLQZ.js +0 -7
  214. package/dist/bundle/chunks/curl-PA2MWGKN.js +0 -25
  215. package/dist/bundle/chunks/cut-7RHEYJ7Y.js +0 -5
  216. package/dist/bundle/chunks/date-YOOSNZVA.js +0 -4
  217. package/dist/bundle/chunks/diff-IVJFQANX.js +0 -6
  218. package/dist/bundle/chunks/dirname-Q5HDZLH2.js +0 -4
  219. package/dist/bundle/chunks/du-I5HYAKTQ.js +0 -7
  220. package/dist/bundle/chunks/echo-W2TA2N7Y.js +0 -3
  221. package/dist/bundle/chunks/env-2F2VHNYS.js +0 -8
  222. package/dist/bundle/chunks/env-OORA5GFS.js +0 -8
  223. package/dist/bundle/chunks/expr-A4LJAGVP.js +0 -4
  224. package/dist/bundle/chunks/file-JMDIXLHY.js +0 -22
  225. package/dist/bundle/chunks/find-3O5V74IR.js +0 -10
  226. package/dist/bundle/chunks/find-4QUN2ATO.js +0 -10
  227. package/dist/bundle/chunks/find-522XP4ZY.js +0 -10
  228. package/dist/bundle/chunks/find-5UN24ZV7.js +0 -10
  229. package/dist/bundle/chunks/find-JXG2HF6L.js +0 -10
  230. package/dist/bundle/chunks/find-K3NO35MZ.js +0 -10
  231. package/dist/bundle/chunks/find-K7D4PKHS.js +0 -10
  232. package/dist/bundle/chunks/find-KP4M5DWC.js +0 -10
  233. package/dist/bundle/chunks/find-WM6ZETA7.js +0 -10
  234. package/dist/bundle/chunks/grep-3D2INI4S.js +0 -14
  235. package/dist/bundle/chunks/grep-CZTYKNEE.js +0 -14
  236. package/dist/bundle/chunks/head-7H5R4WKO.js +0 -1
  237. package/dist/bundle/chunks/help-SDCRRU2F.js +0 -15
  238. package/dist/bundle/chunks/help-XHGUXTV3.js +0 -15
  239. package/dist/bundle/chunks/history-7Z2STZ6Y.js +0 -2
  240. package/dist/bundle/chunks/html-to-markdown-XMBYO6FD.js +0 -4
  241. package/dist/bundle/chunks/jq-7R2XGLLH.js +0 -13
  242. package/dist/bundle/chunks/ln-UTUVIAFP.js +0 -9
  243. package/dist/bundle/chunks/ls-B7C35UDO.js +0 -23
  244. package/dist/bundle/chunks/md5sum-3BXZVFKC.js +0 -1
  245. package/dist/bundle/chunks/mkdir-WYI2LJ6H.js +0 -6
  246. package/dist/bundle/chunks/mv-GN23UIZU.js +0 -6
  247. package/dist/bundle/chunks/paste-L4TYPVSP.js +0 -7
  248. package/dist/bundle/chunks/printf-3ZT5XOIZ.js +0 -14
  249. package/dist/bundle/chunks/printf-G2SBUNW3.js +0 -13
  250. package/dist/bundle/chunks/printf-O2UW73XK.js +0 -13
  251. package/dist/bundle/chunks/pwd-ZVX5RTL4.js +0 -2
  252. package/dist/bundle/chunks/readlink-HHC33N5C.js +0 -6
  253. package/dist/bundle/chunks/rm-5X2XSQQ6.js +0 -7
  254. package/dist/bundle/chunks/sed-2WWCANZT.js +0 -79
  255. package/dist/bundle/chunks/sed-5LZHAGFR.js +0 -74
  256. package/dist/bundle/chunks/sed-IGVS3UIY.js +0 -79
  257. package/dist/bundle/chunks/sed-UZJSXYQZ.js +0 -47
  258. package/dist/bundle/chunks/sed-V7XSBPTD.js +0 -75
  259. package/dist/bundle/chunks/seq-TFPZQZPJ.js +0 -6
  260. package/dist/bundle/chunks/sha1sum-MSBXCB4N.js +0 -1
  261. package/dist/bundle/chunks/sha256sum-YMKJMSTW.js +0 -1
  262. package/dist/bundle/chunks/sleep-QJBQD6VS.js +0 -9
  263. package/dist/bundle/chunks/sort-LHMQWYH2.js +0 -14
  264. package/dist/bundle/chunks/sort-R3YWDMTV.js +0 -14
  265. package/dist/bundle/chunks/sort-TEXV7CUR.js +0 -15
  266. package/dist/bundle/chunks/stat-TM5F5YO4.js +0 -8
  267. package/dist/bundle/chunks/tail-BLGGG2VX.js +0 -1
  268. package/dist/bundle/chunks/tee-VCNOG5VI.js +0 -2
  269. package/dist/bundle/chunks/timeout-THAT7IOO.js +0 -11
  270. package/dist/bundle/chunks/timeout-VG2N46UR.js +0 -11
  271. package/dist/bundle/chunks/touch-Z5XRYFYY.js +0 -3
  272. package/dist/bundle/chunks/tr-UV4V27RJ.js +0 -19
  273. package/dist/bundle/chunks/tree-75UXQ4XJ.js +0 -11
  274. package/dist/bundle/chunks/true-OD7ZXH3O.js +0 -1
  275. package/dist/bundle/chunks/uniq-IIOQKNTS.js +0 -4
  276. package/dist/bundle/chunks/wc-OXLYBRUE.js +0 -5
  277. package/dist/bundle/chunks/which-ONWH3TNF.js +0 -2
  278. package/dist/bundle/chunks/xargs-752VENJT.js +0 -3
  279. package/dist/bundle/chunks/xargs-7KV5F66T.js +0 -3
  280. package/dist/bundle/chunks/xargs-E5JPQL24.js +0 -3
  281. package/dist/commands/awk/awk.d.ts +0 -2
  282. package/dist/commands/awk/executor.d.ts +0 -3
  283. package/dist/commands/awk/expressions.d.ts +0 -3
  284. package/dist/commands/awk/functions.d.ts +0 -12
  285. package/dist/commands/awk/interpreter2.d.ts +0 -90
  286. package/dist/commands/awk/parser.d.ts +0 -3
  287. package/dist/commands/awk/types.d.ts +0 -44
  288. package/dist/fs-interface.d.ts +0 -186
  289. package/dist/fs.d.ts +0 -39
  290. package/dist/overlay-fs/OverlayFs.d.ts +0 -87
  291. package/dist/overlay-fs/index.d.ts +0 -1
@@ -1,68 +1,76 @@
1
- import{a as U,b as X,c as V,d as te,e as Y,f as k,g as F,h as Ee,i as z,j as fe,k as Ve}from"./chunks/chunk-CG2HXOFG.js";import{a as le}from"./chunks/chunk-44UOCSGV.js";import"./chunks/chunk-2RUN43TJ.js";var At=[{name:"echo",load:async()=>(await import("./chunks/echo-WUKBESC7.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-47EP4IAV.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-HBP44PXI.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-JGYJQA2Y.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-HA2FJX4O.js")).mkdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-FOE745V2.js")).touchCommand},{name:"rm",load:async()=>(await import("./chunks/rm-NF3FNLAY.js")).rmCommand},{name:"cp",load:async()=>(await import("./chunks/cp-37OVLNLD.js")).cpCommand},{name:"mv",load:async()=>(await import("./chunks/mv-7I62SB3I.js")).mvCommand},{name:"ln",load:async()=>(await import("./chunks/ln-XFYHBIFL.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-XJXFAD4M.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-CEF235GL.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-MQIMKDSA.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-6PAUYCDP.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-QXKYHAML.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-GV5WUREX.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-FVFLDQGP.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-ZJVDG3FA.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-ZJVDG3FA.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-ZJVDG3FA.js")).egrepCommand},{name:"sed",load:async()=>(await import("./chunks/sed-H2RWPMTM.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-QWBT4IFJ.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-XODGFZC4.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-7PFWPNWK.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-KSJ4BBRQ.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-FIZRELKC.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-QBGVCQFT.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-LMLGE4IE.js")).trCommand},{name:"tee",load:async()=>(await import("./chunks/tee-W5HCCBPO.js")).teeCommand},{name:"find",load:async()=>(await import("./chunks/find-R6LJIRBI.js")).findCommand},{name:"basename",load:async()=>(await import("./chunks/basename-5UVU5RXR.js")).basenameCommand},{name:"dirname",load:async()=>(await import("./chunks/dirname-U2KVUSQY.js")).dirnameCommand},{name:"tree",load:async()=>(await import("./chunks/tree-WBUGLVP5.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-KRAFOIQK.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-MSPSPGCD.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-MSPSPGCD.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-JFIUWFGE.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-JFIUWFGE.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-SG6VRATI.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-NQBNFMCT.js")).xargsCommand},{name:"true",load:async()=>(await import("./chunks/true-6LGCG4EY.js")).trueCommand},{name:"false",load:async()=>(await import("./chunks/true-6LGCG4EY.js")).falseCommand},{name:"clear",load:async()=>(await import("./chunks/clear-XD3TJRVQ.js")).clearCommand},{name:"bash",load:async()=>(await import("./chunks/bash-BASUPKHJ.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-BASUPKHJ.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-ABWUP4LV.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-TUA2XORD.js")).base64Command},{name:"diff",load:async()=>(await import("./chunks/diff-GLRVCAKJ.js")).diffCommand},{name:"date",load:async()=>(await import("./chunks/date-NN5C354M.js")).dateCommand},{name:"sleep",load:async()=>(await import("./chunks/sleep-AFN3PHJW.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-XAA3N7CF.js")).timeoutCommand},{name:"seq",load:async()=>(await import("./chunks/seq-VKYIUOPJ.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-HYOCSWK6.js")).exprCommand},{name:"md5sum",load:async()=>(await import("./chunks/md5sum-PIH6F3O3.js")).md5sumCommand},{name:"sha1sum",load:async()=>(await import("./chunks/sha1sum-HVHNZSEC.js")).sha1sumCommand},{name:"sha256sum",load:async()=>(await import("./chunks/sha256sum-REOOJORK.js")).sha256sumCommand},{name:"file",load:async()=>(await import("./chunks/file-LQXX6P4Y.js")).fileCommand},{name:"html-to-markdown",load:async()=>(await import("./chunks/html-to-markdown-ZSZ34PAN.js")).htmlToMarkdownCommand},{name:"help",load:async()=>(await import("./chunks/help-5E6PYJWQ.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-KHFYPBWW.js")).whichCommand}],yr=[{name:"curl",load:async()=>(await import("./chunks/curl-C43O5WQS.js")).curlCommand}],pr=new Map;function Er(t){return{name:t.name,async execute(e,s){let r=pr.get(t.name);return r||(r=await t.load(),pr.set(t.name,r)),r.execute(e,s)}}}function Ts(){return At.map(t=>t.name)}function Ws(){return yr.map(t=>t.name)}function wr(t){return(t?At.filter(s=>t.includes(s.name)):At).map(Er)}function gr(){return yr.map(Er)}function Ar(t){return"load"in t&&typeof t.load=="function"}function Fs(t,e){return{name:t,execute:e}}function xr(t){let e=null;return{name:t.name,async execute(s,r){return e||(e=await t.load()),e.execute(s,r)}}}var Ms=new TextEncoder,Bs=new TextDecoder;function re(t,e){if(t instanceof Uint8Array)return t;switch(e){case"base64":return Uint8Array.from(atob(t),s=>s.charCodeAt(0));case"hex":{let s=new Uint8Array(t.length/2);for(let r=0;r<t.length;r+=2)s[r/2]=parseInt(t.slice(r,r+2),16);return s}case"binary":case"latin1":return Uint8Array.from(t,s=>s.charCodeAt(0));default:return Ms.encode(t)}}function Se(t,e){switch(e){case"base64":return btoa(String.fromCharCode(...t));case"hex":return Array.from(t).map(s=>s.toString(16).padStart(2,"0")).join("");case"binary":case"latin1":return String.fromCharCode(...t);default:return Bs.decode(t)}}function Z(t){if(t!=null)return typeof t=="string"?t:t.encoding??void 0}var Ge=new TextEncoder;function zs(t){return typeof t=="object"&&t!==null&&!(t instanceof Uint8Array)&&"content"in t}var se=class{data=new Map;constructor(e){if(this.data.set("/",{type:"directory",mode:493,mtime:new Date}),e)for(let[s,r]of Object.entries(e))zs(r)?this.writeFileSync(s,r.content,void 0,{mode:r.mode,mtime:r.mtime}):this.writeFileSync(s,r)}normalizePath(e){if(!e||e==="/")return"/";let s=e.endsWith("/")&&e!=="/"?e.slice(0,-1):e;s.startsWith("/")||(s=`/${s}`);let r=s.split("/").filter(o=>o&&o!=="."),n=[];for(let o of r)o===".."?n.pop():n.push(o);return`/${n.join("/")}`||"/"}dirname(e){let s=this.normalizePath(e);if(s==="/")return"/";let r=s.lastIndexOf("/");return r===0?"/":s.slice(0,r)}ensureParentDirs(e){let s=this.dirname(e);s!=="/"&&(this.data.has(s)||(this.ensureParentDirs(s),this.data.set(s,{type:"directory",mode:493,mtime:new Date})))}writeFileSync(e,s,r,n){let o=this.normalizePath(e);this.ensureParentDirs(o);let i=Z(r),a=re(s,i);this.data.set(o,{type:"file",content:a,mode:n?.mode??420,mtime:n?.mtime??new Date})}async readFile(e,s){let r=await this.readFileBuffer(e),n=Z(s);return Se(r,n)}async readFileBuffer(e){let s=this.normalizePath(e),r=this.data.get(s),n=s;if(!r)throw new Error(`ENOENT: no such file or directory, open '${e}'`);let o=new Set;for(;r&&r.type==="symlink";){if(o.has(n))throw new Error(`ELOOP: too many levels of symbolic links, open '${e}'`);o.add(n),n=this.resolveSymlink(n,r.target),r=this.data.get(n)}if(!r)throw new Error(`ENOENT: no such file or directory, open '${e}'`);if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);return r.content instanceof Uint8Array?r.content:Ge.encode(r.content)}async writeFile(e,s,r){this.writeFileSync(e,s,r)}async appendFile(e,s,r){let n=this.normalizePath(e),o=this.data.get(n);if(o&&o.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${e}'`);let i=Z(r),a=re(s,i);if(o?.type==="file"){let l=o.content instanceof Uint8Array?o.content:Ge.encode(o.content),c=new Uint8Array(l.length+a.length);c.set(l),c.set(a,l.length),this.data.set(n,{type:"file",content:c,mode:o.mode,mtime:new Date})}else this.writeFileSync(e,s,r)}async exists(e){return this.data.has(this.normalizePath(e))}async stat(e){let s=this.normalizePath(e),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);if(r.type==="symlink"){let o=this.resolveSymlink(s,r.target),i=this.data.get(o);if(!i)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);r=i}let n=0;return r.type==="file"&&r.content&&(r.content instanceof Uint8Array?n=r.content.length:n=Ge.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:n,mtime:r.mtime||new Date}}async lstat(e){let s=this.normalizePath(e),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime||new Date};let n=0;return r.type==="file"&&r.content&&(r.content instanceof Uint8Array?n=r.content.length:n=Ge.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:n,mtime:r.mtime||new Date}}resolveSymlink(e,s){if(s.startsWith("/"))return this.normalizePath(s);let r=this.dirname(e);return this.normalizePath(r==="/"?`/${s}`:`${r}/${s}`)}async mkdir(e,s){this.mkdirSync(e,s)}mkdirSync(e,s){let r=this.normalizePath(e);if(this.data.has(r)){if(this.data.get(r)?.type==="file")throw new Error(`EEXIST: file already exists, mkdir '${e}'`);if(!s?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${e}'`);return}let n=this.dirname(r);if(n!=="/"&&!this.data.has(n))if(s?.recursive)this.mkdirSync(n,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.data.set(r,{type:"directory",mode:493,mtime:new Date})}async readdir(e){let s=this.normalizePath(e),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${e}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${e}'`);let n=s==="/"?"/":`${s}/`,o=[];for(let i of this.data.keys())if(i!==s&&i.startsWith(n)){let l=i.slice(n.length).split("/")[0];l&&!o.includes(l)&&o.push(l)}return o.sort()}async rm(e,s){let r=this.normalizePath(e),n=this.data.get(r);if(!n){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${e}'`)}if(n.type==="directory"){let o=await this.readdir(r);if(o.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${e}'`);for(let i of o){let a=r==="/"?`/${i}`:`${r}/${i}`;await this.rm(a,s)}}}this.data.delete(r)}async cp(e,s,r){let n=this.normalizePath(e),o=this.normalizePath(s),i=this.data.get(n);if(!i)throw new Error(`ENOENT: no such file or directory, cp '${e}'`);if(i.type==="file")this.ensureParentDirs(o),this.data.set(o,{...i});else if(i.type==="directory"){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${e}'`);await this.mkdir(o,{recursive:!0});let a=await this.readdir(n);for(let l of a){let c=n==="/"?`/${l}`:`${n}/${l}`,f=o==="/"?`/${l}`:`${o}/${l}`;await this.cp(c,f,r)}}}async mv(e,s){await this.cp(e,s,{recursive:!0}),await this.rm(e,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(e,s){if(s.startsWith("/"))return this.normalizePath(s);let r=e==="/"?`/${s}`:`${e}/${s}`;return this.normalizePath(r)}async chmod(e,s){let r=this.normalizePath(e),n=this.data.get(r);if(!n)throw new Error(`ENOENT: no such file or directory, chmod '${e}'`);n.mode=s}async symlink(e,s){let r=this.normalizePath(s);if(this.data.has(r))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(r),this.data.set(r,{type:"symlink",target:e,mode:511,mtime:new Date})}async link(e,s){let r=this.normalizePath(e),n=this.normalizePath(s),o=this.data.get(r);if(!o)throw new Error(`ENOENT: no such file or directory, link '${e}'`);if(o.type!=="file")throw new Error(`EPERM: operation not permitted, link '${e}'`);if(this.data.has(n))throw new Error(`EEXIST: file already exists, link '${s}'`);this.ensureParentDirs(n),this.data.set(n,{type:"file",content:o.content,mode:o.mode,mtime:o.mtime})}async readlink(e){let s=this.normalizePath(e),r=this.data.get(s);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${e}'`);return r.target}};function T(t,e){return{type:"ArithmeticExpression",expression:ne(t,e,0).expr}}function ne(t,e,s){return Us(t,e,s)}function Us(t,e,s){let{expr:r,pos:n}=je(t,e,s);for(n=O(e,n);e[n]===",";){n++;let{expr:o,pos:i}=je(t,e,n);r={type:"ArithBinary",operator:",",left:r,right:o},n=O(e,i)}return{expr:r,pos:n}}function je(t,e,s){let{expr:r,pos:n}=Vs(t,e,s);if(n=O(e,n),e[n]==="?"){n++;let{expr:o,pos:i}=ne(t,e,n);if(n=O(e,i),e[n]===":"){n++;let{expr:a,pos:l}=ne(t,e,n);return{expr:{type:"ArithTernary",condition:r,consequent:o,alternate:a},pos:l}}}return{expr:r,pos:n}}function Vs(t,e,s){let{expr:r,pos:n}=Sr(t,e,s);for(;n=O(e,n),e.slice(n,n+2)==="||";){n+=2;let{expr:o,pos:i}=Sr(t,e,n);r={type:"ArithBinary",operator:"||",left:r,right:o},n=i}return{expr:r,pos:n}}function Sr(t,e,s){let{expr:r,pos:n}=br(t,e,s);for(;n=O(e,n),e.slice(n,n+2)==="&&";){n+=2;let{expr:o,pos:i}=br(t,e,n);r={type:"ArithBinary",operator:"&&",left:r,right:o},n=i}return{expr:r,pos:n}}function br(t,e,s){let{expr:r,pos:n}=Nr(t,e,s);for(;n=O(e,n),e[n]==="|"&&e[n+1]!=="|";){n++;let{expr:o,pos:i}=Nr(t,e,n);r={type:"ArithBinary",operator:"|",left:r,right:o},n=i}return{expr:r,pos:n}}function Nr(t,e,s){let{expr:r,pos:n}=Cr(t,e,s);for(;n=O(e,n),e[n]==="^";){n++;let{expr:o,pos:i}=Cr(t,e,n);r={type:"ArithBinary",operator:"^",left:r,right:o},n=i}return{expr:r,pos:n}}function Cr(t,e,s){let{expr:r,pos:n}=$r(t,e,s);for(;n=O(e,n),e[n]==="&"&&e[n+1]!=="&";){n++;let{expr:o,pos:i}=$r(t,e,n);r={type:"ArithBinary",operator:"&",left:r,right:o},n=i}return{expr:r,pos:n}}function $r(t,e,s){let{expr:r,pos:n}=Pr(t,e,s);for(;n=O(e,n),e.slice(n,n+2)==="=="||e.slice(n,n+2)==="!=";){let o=e.slice(n,n+2);n+=2;let{expr:i,pos:a}=Pr(t,e,n);r={type:"ArithBinary",operator:o,left:r,right:i},n=a}return{expr:r,pos:n}}function Pr(t,e,s){let{expr:r,pos:n}=xt(t,e,s);for(;;)if(n=O(e,n),e.slice(n,n+2)==="<="||e.slice(n,n+2)===">="){let o=e.slice(n,n+2);n+=2;let{expr:i,pos:a}=xt(t,e,n);r={type:"ArithBinary",operator:o,left:r,right:i},n=a}else if(e[n]==="<"||e[n]===">"){let o=e[n];n++;let{expr:i,pos:a}=xt(t,e,n);r={type:"ArithBinary",operator:o,left:r,right:i},n=a}else break;return{expr:r,pos:n}}function xt(t,e,s){let{expr:r,pos:n}=vr(t,e,s);for(;n=O(e,n),e.slice(n,n+2)==="<<"||e.slice(n,n+2)===">>";){let o=e.slice(n,n+2);n+=2;let{expr:i,pos:a}=vr(t,e,n);r={type:"ArithBinary",operator:o,left:r,right:i},n=a}return{expr:r,pos:n}}function vr(t,e,s){let{expr:r,pos:n}=Ir(t,e,s);for(;n=O(e,n),(e[n]==="+"||e[n]==="-")&&e[n+1]!==e[n];){let o=e[n];n++;let{expr:i,pos:a}=Ir(t,e,n);r={type:"ArithBinary",operator:o,left:r,right:i},n=a}return{expr:r,pos:n}}function Ir(t,e,s){let{expr:r,pos:n}=He(t,e,s);for(;;)if(n=O(e,n),e[n]==="*"&&e[n+1]!=="*"){n++;let{expr:o,pos:i}=He(t,e,n);r={type:"ArithBinary",operator:"*",left:r,right:o},n=i}else if(e[n]==="/"||e[n]==="%"){let o=e[n];n++;let{expr:i,pos:a}=He(t,e,n);r={type:"ArithBinary",operator:o,left:r,right:i},n=a}else break;return{expr:r,pos:n}}function He(t,e,s){let{expr:r,pos:n}=St(t,e,s),o=O(e,n);if(e.slice(o,o+2)==="**"){o+=2;let{expr:i,pos:a}=He(t,e,o);return{expr:{type:"ArithBinary",operator:"**",left:r,right:i},pos:a}}return{expr:r,pos:n}}function St(t,e,s){let r=O(e,s);if(e.slice(r,r+2)==="++"||e.slice(r,r+2)==="--"){let n=e.slice(r,r+2);r+=2;let{expr:o,pos:i}=St(t,e,r);return{expr:{type:"ArithUnary",operator:n,operand:o,prefix:!0},pos:i}}if(e[r]==="+"||e[r]==="-"||e[r]==="!"||e[r]==="~"){let n=e[r];r++;let{expr:o,pos:i}=St(t,e,r);return{expr:{type:"ArithUnary",operator:n,operand:o,prefix:!0},pos:i}}return Hs(t,e,r)}function Gs(t,e){let s=t[e];return s==="$"||s==="`"}function Hs(t,e,s){let{expr:r,pos:n}=Rr(t,e,s),o=[r];for(;Gs(e,n);){let{expr:i,pos:a}=Rr(t,e,n);o.push(i),n=a}if(o.length>1&&(r={type:"ArithConcat",parts:o}),n=O(e,n),e.slice(n,n+2)==="++"||e.slice(n,n+2)==="--"){let i=e.slice(n,n+2);return n+=2,{expr:{type:"ArithUnary",operator:i,operand:r,prefix:!1},pos:n}}return{expr:r,pos:n}}function Rr(t,e,s){let r=O(e,s);if(e.slice(r,r+3)==="$(("){r+=3;let n=1,o=r;for(;r<e.length-1&&n>0;)e[r]==="("&&e[r+1]==="("?(n++,r+=2):e[r]===")"&&e[r+1]===")"?(n--,n>0&&(r+=2)):r++;let i=e.slice(o,r),{expr:a}=ne(t,i,0);return r+=2,{expr:{type:"ArithNested",expression:a},pos:r}}if(e.slice(r,r+2)==="$("&&e[r+2]!=="("){r+=2;let n=1,o=r;for(;r<e.length&&n>0;)e[r]==="("?n++:e[r]===")"&&n--,n>0&&r++;let i=e.slice(o,r);return r++,{expr:{type:"ArithCommandSubst",command:i},pos:r}}if(e[r]==="`"){r++;let n=r;for(;r<e.length&&e[r]!=="`";)r++;let o=e.slice(n,r);return e[r]==="`"&&r++,{expr:{type:"ArithCommandSubst",command:o},pos:r}}if(e[r]==="("){r++;let{expr:n,pos:o}=ne(t,e,r);return r=O(e,o),e[r]===")"&&r++,{expr:{type:"ArithGroup",expression:n},pos:r}}if(/[0-9]/.test(e[r])){let n="",o=!1;for(;r<e.length;){let a=e[r];if(o)if(/[0-9a-zA-Z@_]/.test(a))n+=a,r++;else break;else if(a==="#")o=!0,n+=a,r++;else if(/[0-9a-fA-FxX]/.test(a))n+=a,r++;else break}if(e[r]==="."&&/[0-9]/.test(e[r+1]))throw new F(`${n}.${e[r+1]}...: syntax error: invalid arithmetic operator`);if(e[r]==="["){let a=e.slice(r).trim();return{expr:{type:"ArithNumberSubscript",number:n,errorToken:a},pos:e.length}}return{expr:{type:"ArithNumber",value:be(n)},pos:r}}if(e[r]==="$"&&e[r+1]==="{"){let n=r+2,o=1,i=n;for(;i<e.length&&o>0;)e[i]==="{"?o++:e[i]==="}"&&o--,o>0&&i++;let a=e.slice(n,i),l=i+1;if(e[l]==="#"){let c=l+1;for(;c<e.length&&/[0-9a-zA-Z@_]/.test(e[c]);)c++;let f=e.slice(l+1,c);return{expr:{type:"ArithDynamicBase",baseExpr:a,value:f},pos:c}}if(/[0-9]/.test(e[l])||e[l]==="x"||e[l]==="X"){let c=l;if(e[l]==="x"||e[l]==="X")for(c++;c<e.length&&/[0-9a-fA-F]/.test(e[c]);)c++;else for(;c<e.length&&/[0-9]/.test(e[c]);)c++;let f=e.slice(l,c);return{expr:{type:"ArithDynamicNumber",prefix:a,suffix:f},pos:c}}return r=l,{expr:{type:"ArithBracedExpansion",content:a},pos:r}}if(e[r]==="$"&&r+1<e.length&&/[0-9]/.test(e[r+1])){r++;let n="";for(;r<e.length&&/[0-9]/.test(e[r]);)n+=e[r],r++;return{expr:{type:"ArithVariable",name:n},pos:r}}if(e[r]==="$"&&r+1<e.length&&/[a-zA-Z_]/.test(e[r+1])&&r++,/[a-zA-Z_]/.test(e[r])){let n="";for(;r<e.length&&/[a-zA-Z0-9_]/.test(e[r]);)n+=e[r],r++;if(e[r]==="["){r++;let i;if(e[r]==="'"||e[r]==='"'){let c=e[r];for(r++,i="";r<e.length&&e[r]!==c;)i+=e[r],r++;e[r]===c&&r++,r=O(e,r),e[r]==="]"&&r++}let a;if(i===void 0){let{expr:c,pos:f}=ne(t,e,r);a=c,r=f,e[r]==="]"&&r++}if(r=O(e,r),e[r]==="["&&a)return{expr:{type:"ArithDoubleSubscript",array:n,index:a},pos:r};let l=["=","+=","-=","*=","/=","%=","<<=",">>=","&=","|=","^="];for(let c of l)if(e.slice(r,r+c.length)===c&&e.slice(r,r+c.length+1)!=="=="){r+=c.length;let{expr:f,pos:h}=je(t,e,r);return{expr:{type:"ArithAssignment",operator:c,variable:n,subscript:a,stringKey:i,value:f},pos:h}}return{expr:{type:"ArithArrayElement",array:n,index:a,stringKey:i},pos:r}}r=O(e,r);let o=["=","+=","-=","*=","/=","%=","<<=",">>=","&=","|=","^="];for(let i of o)if(e.slice(r,r+i.length)===i&&e.slice(r,r+i.length+1)!=="=="){r+=i.length;let{expr:a,pos:l}=je(t,e,r);return{expr:{type:"ArithAssignment",operator:i,variable:n,value:a},pos:l}}return{expr:{type:"ArithVariable",name:n},pos:r}}return{expr:{type:"ArithNumber",value:0},pos:r}}function be(t){if(t.includes("#")){let[e,s]=t.split("#"),r=Number.parseInt(e,10);if(r<2||r>64)return Number.NaN;if(r<=36)return Number.parseInt(s,r);let n=0;for(let o of s){let i;if(o>="0"&&o<="9")i=o.charCodeAt(0)-48;else if(o>="a"&&o<="z")i=o.charCodeAt(0)-97+10;else if(o>="A"&&o<="Z")i=o.charCodeAt(0)-65+36;else if(o==="@")i=62;else if(o==="_")i=63;else return Number.NaN;if(i>=r)return Number.NaN;n=n*r+i}return n}return t.startsWith("0x")||t.startsWith("0X")?Number.parseInt(t.slice(2),16):t.startsWith("0")&&t.length>1&&/^[0-9]+$/.test(t)?/[89]/.test(t)?Number.NaN:Number.parseInt(t,8):Number.parseInt(t,10)}function O(t,e){for(;e<t.length;){if(t[e]==="\\"&&t[e+1]===`
2
- `){e+=2;continue}if(/\s/.test(t[e])){e++;continue}break}return e}var A={script(t){return{type:"Script",statements:t}},statement(t,e=[],s=!1){return{type:"Statement",pipelines:t,operators:e,background:s}},pipeline(t,e=!1){return{type:"Pipeline",commands:t,negated:e}},simpleCommand(t,e=[],s=[],r=[]){return{type:"SimpleCommand",name:t,args:e,assignments:s,redirections:r}},word(t){return{type:"Word",parts:t}},literal(t){return{type:"Literal",value:t}},singleQuoted(t){return{type:"SingleQuoted",value:t}},doubleQuoted(t){return{type:"DoubleQuoted",parts:t}},escaped(t){return{type:"Escaped",value:t}},parameterExpansion(t,e=null){return{type:"ParameterExpansion",parameter:t,operation:e}},commandSubstitution(t,e=!1){return{type:"CommandSubstitution",body:t,legacy:e}},arithmeticExpansion(t){return{type:"ArithmeticExpansion",expression:t}},assignment(t,e,s=!1,r=null){return{type:"Assignment",name:t,value:e,append:s,array:r}},redirection(t,e,s=null){return{type:"Redirection",fd:s,operator:t,target:e}},hereDoc(t,e,s=!1,r=!1){return{type:"HereDoc",delimiter:t,content:e,stripTabs:s,quoted:r}},ifNode(t,e=null,s=[]){return{type:"If",clauses:t,elseBody:e,redirections:s}},forNode(t,e,s,r=[]){return{type:"For",variable:t,words:e,body:s,redirections:r}},whileNode(t,e,s=[]){return{type:"While",condition:t,body:e,redirections:s}},untilNode(t,e,s=[]){return{type:"Until",condition:t,body:e,redirections:s}},caseNode(t,e,s=[]){return{type:"Case",word:t,items:e,redirections:s}},caseItem(t,e,s=";;"){return{type:"CaseItem",patterns:t,body:e,terminator:s}},subshell(t,e=[]){return{type:"Subshell",body:t,redirections:e}},group(t,e=[]){return{type:"Group",body:t,redirections:e}},functionDef(t,e,s=[]){return{type:"FunctionDef",name:t,body:e,redirections:s}},conditionalCommand(t,e=[]){return{type:"ConditionalCommand",expression:t,redirections:e}},arithmeticCommand(t,e=[]){return{type:"ArithmeticCommand",expression:t,redirections:e}}};var u;(function(t){t.EOF="EOF",t.NEWLINE="NEWLINE",t.SEMICOLON="SEMICOLON",t.AMP="AMP",t.PIPE="PIPE",t.PIPE_AMP="PIPE_AMP",t.AND_AND="AND_AND",t.OR_OR="OR_OR",t.BANG="BANG",t.LESS="LESS",t.GREAT="GREAT",t.DLESS="DLESS",t.DGREAT="DGREAT",t.LESSAND="LESSAND",t.GREATAND="GREATAND",t.LESSGREAT="LESSGREAT",t.DLESSDASH="DLESSDASH",t.CLOBBER="CLOBBER",t.TLESS="TLESS",t.AND_GREAT="AND_GREAT",t.AND_DGREAT="AND_DGREAT",t.LPAREN="LPAREN",t.RPAREN="RPAREN",t.LBRACE="LBRACE",t.RBRACE="RBRACE",t.DSEMI="DSEMI",t.SEMI_AND="SEMI_AND",t.SEMI_SEMI_AND="SEMI_SEMI_AND",t.DBRACK_START="DBRACK_START",t.DBRACK_END="DBRACK_END",t.DPAREN_START="DPAREN_START",t.DPAREN_END="DPAREN_END",t.IF="IF",t.THEN="THEN",t.ELSE="ELSE",t.ELIF="ELIF",t.FI="FI",t.FOR="FOR",t.WHILE="WHILE",t.UNTIL="UNTIL",t.DO="DO",t.DONE="DONE",t.CASE="CASE",t.ESAC="ESAC",t.IN="IN",t.FUNCTION="FUNCTION",t.SELECT="SELECT",t.TIME="TIME",t.COPROC="COPROC",t.WORD="WORD",t.NAME="NAME",t.NUMBER="NUMBER",t.ASSIGNMENT_WORD="ASSIGNMENT_WORD",t.COMMENT="COMMENT",t.HEREDOC_CONTENT="HEREDOC_CONTENT"})(u||(u={}));var Ze={if:u.IF,then:u.THEN,else:u.ELSE,elif:u.ELIF,fi:u.FI,for:u.FOR,while:u.WHILE,until:u.UNTIL,do:u.DO,done:u.DONE,case:u.CASE,esac:u.ESAC,in:u.IN,function:u.FUNCTION,select:u.SELECT,time:u.TIME,coproc:u.COPROC};function Dr(t){let e=t.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);if(!e)return!1;let s=t.slice(e[0].length);if(s===""||s==="+")return!0;if(s[0]==="["){let r=0,n=0;for(;n<s.length;n++)if(s[n]==="[")r++;else if(s[n]==="]"&&(r--,r===0))break;if(r!==0||n>=s.length)return!1;let o=s.slice(n+1);return o===""||o==="+"}return!1}var js=[[";",";","&",u.SEMI_SEMI_AND],["<","<","<",u.TLESS],["&",">",">",u.AND_DGREAT]],Zs=[["[","[",u.DBRACK_START],["]","]",u.DBRACK_END],["(","(",u.DPAREN_START],[")",")",u.DPAREN_END],["&","&",u.AND_AND],["|","|",u.OR_OR],[";",";",u.DSEMI],[";","&",u.SEMI_AND],["|","&",u.PIPE_AMP],[">",">",u.DGREAT],["<","&",u.LESSAND],[">","&",u.GREATAND],["<",">",u.LESSGREAT],[">","|",u.CLOBBER],["&",">",u.AND_GREAT]],qs={"|":u.PIPE,"&":u.AMP,";":u.SEMICOLON,"(":u.LPAREN,")":u.RPAREN,"<":u.LESS,">":u.GREAT};function Qs(t){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)}var qe=class{input;pos=0;line=1;column=1;tokens=[];pendingHeredocs=[];constructor(e){this.input=e}tokenize(){let s=this.input.length,r=this.tokens,n=this.pendingHeredocs;for(;this.pos<s&&(this.skipWhitespace(),!(this.pos>=s));){if(n.length>0&&r.length>0&&r[r.length-1].type===u.NEWLINE){this.readHeredocContent();continue}let o=this.nextToken();o&&r.push(o)}return r.push({type:u.EOF,value:"",start:this.pos,end:this.pos,line:this.line,column:this.column}),r}skipWhitespace(){let e=this.input,s=e.length,r=this.pos,n=this.column,o=this.line;for(;r<s;){let i=e[r];if(i===" "||i===" ")r++,n++;else if(i==="\\"&&e[r+1]===`
3
- `)r+=2,o++,n=1;else break}this.pos=r,this.column=n,this.line=o}nextToken(){let e=this.input,s=this.pos,r=this.line,n=this.column,o=e[s],i=e[s+1],a=e[s+2];if(o==="#")return this.readComment(s,r,n);if(o===`
4
- `)return this.pos=s+1,this.line++,this.column=1,{type:u.NEWLINE,value:`
5
- `,start:s,end:s+1,line:r,column:n};if(o==="<"&&i==="<"&&a==="-")return this.pos=s+3,this.column=n+3,this.registerHeredocFromLookahead(!0),this.makeToken(u.DLESSDASH,"<<-",s,r,n);for(let[c,f,h,d]of js)if(o===c&&i===f&&a===h)return this.pos=s+3,this.column=n+3,this.makeToken(d,c+f+h,s,r,n);if(o==="<"&&i==="<")return this.pos=s+2,this.column=n+2,this.registerHeredocFromLookahead(!1),this.makeToken(u.DLESS,"<<",s,r,n);for(let[c,f,h]of Zs)if(o===c&&i===f)return this.pos=s+2,this.column=n+2,this.makeToken(h,c+f,s,r,n);let l=qs[o];return l?(this.pos=s+1,this.column=n+1,this.makeToken(l,o,s,r,n)):o==="{"?i==="}"?(this.pos=s+2,this.column=n+2,{type:u.WORD,value:"{}",start:s,end:s+2,line:r,column:n,quoted:!1,singleQuoted:!1}):this.scanBraceExpansion(s)!==null?this.readWordWithBraceExpansion(s,r,n):this.scanLiteralBraceWord(s)!==null?this.readWordWithBraceExpansion(s,r,n):i!==void 0&&i!==" "&&i!==" "&&i!==`
6
- `?this.readWord(s,r,n):(this.pos=s+1,this.column=n+1,this.makeToken(u.LBRACE,"{",s,r,n)):o==="}"?this.isWordCharFollowing(s+1)?this.readWord(s,r,n):(this.pos=s+1,this.column=n+1,this.makeToken(u.RBRACE,"}",s,r,n)):o==="!"?i==="="?(this.pos=s+2,this.column=n+2,this.makeToken(u.WORD,"!=",s,r,n)):(this.pos=s+1,this.column=n+1,this.makeToken(u.BANG,"!",s,r,n)):this.readWord(s,r,n)}makeToken(e,s,r,n,o){return{type:e,value:s,start:r,end:this.pos,line:n,column:o}}readComment(e,s,r){let n=this.input,o=n.length,i=this.pos;for(;i<o&&n[i]!==`
7
- `;)i++;let a=n.slice(e,i);return this.pos=i,this.column=r+(i-e),{type:u.COMMENT,value:a,start:e,end:i,line:s,column:r}}readWord(e,s,r){let n=this.input,o=n.length,i=this.pos,a=i;for(;i<o;){let p=n[i];if(p===" "||p===" "||p===`
8
- `||p===";"||p==="&"||p==="|"||p==="("||p===")"||p==="<"||p===">"||p==="'"||p==='"'||p==="\\"||p==="$"||p==="`"||p==="{"||p==="}"||p==="~"||p==="*"||p==="?"||p==="[")break;i++}if(i>a){let p=n[i];if(i>=o||p===" "||p===" "||p===`
9
- `||p===";"||p==="&"||p==="|"||p==="("||p===")"||p==="<"||p===">"){let E=n.slice(a,i);if(this.pos=i,this.column=r+(i-a),Ze[E])return{type:Ze[E],value:E,start:e,end:i,line:s,column:r};let w=E.indexOf("=");return w>0&&Dr(E.slice(0,w))?{type:u.ASSIGNMENT_WORD,value:E,start:e,end:i,line:s,column:r}:/^[0-9]+$/.test(E)?{type:u.NUMBER,value:E,start:e,end:i,line:s,column:r}:/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(E)?{type:u.NAME,value:E,start:e,end:i,line:s,column:r,quoted:!1,singleQuoted:!1}:{type:u.WORD,value:E,start:e,end:i,line:s,column:r,quoted:!1,singleQuoted:!1}}}i=this.pos;let l=this.column,c=this.line,f="",h=!1,d=!1,m=!1,y=!1,g=n[i]==='"'||n[i]==="'";for(;i<o;){let p=n[i];if(!m&&!y&&(p===" "||p===" "||p===`
10
- `||p===";"||p==="&"||p==="|"||p==="("||p===")"||p==="<"||p===">"))break;if(p==="$"&&i+1<o&&n[i+1]==="'"&&!m&&!y){for(f+="$'",i+=2,l+=2;i<o&&n[i]!=="'";)n[i]==="\\"&&i+1<o?(f+=n[i]+n[i+1],i+=2,l+=2):(f+=n[i],i++,l++);i<o&&(f+="'",i++,l++);continue}if(p==="$"&&i+1<o&&n[i+1]==='"'&&!m&&!y){i++,l++,y=!0,h=!0,f===""&&(g=!0),i++,l++;continue}if(p==="'"&&!y){m?(m=!1,g||(f+=p)):(m=!0,g?(d=!0,h=!0):f+=p),i++,l++;continue}if(p==='"'&&!m){y?(y=!1,g||(f+=p)):(y=!0,g?h=!0:f+=p),i++,l++;continue}if(p==="\\"&&!m&&i+1<o){let E=n[i+1];if(E===`
11
- `){i+=2,c++,l=1;continue}if(y){if(E==='"'||E==="\\"||E==="$"||E==="`"||E===`
12
- `){E==="$"||E==="`"?f+=p+E:f+=E,i+=2,l+=2;continue}}else{E==='"'||E==="'"?f+=p+E:f+=E,i+=2,l+=2;continue}}if(p==="$"&&i+1<o&&n[i+1]==="("){f+=p,i++,l++,f+=n[i],i++,l++;let E=1,w=!1,b=!1,I=0,R=!1,D="",ye=n[i]==="(";for(;E>0&&i<o;){let L=n[i];if(f+=L,w)L==="'"&&(w=!1);else if(b)L==="\\"&&i+1<o?(f+=n[i+1],i++,l++):L==='"'&&(b=!1);else if(L==="'")w=!0,D="";else if(L==='"')b=!0,D="";else if(L==="\\"&&i+1<o)f+=n[i+1],i++,l++,D="";else if(L==="#"&&!ye&&(D===""||/\s/.test(n[i-1]||""))){for(;i+1<o&&n[i+1]!==`
13
- `;)i++,l++,f+=n[i];D=""}else/[a-zA-Z_]/.test(L)?D+=L:(D==="case"?(I++,R=!1):D==="in"&&I>0?R=!0:D==="esac"&&I>0&&(I--,R=!1),D="",L==="("?i>0&&n[i-1]==="$"?E++:R||E++:L===")"?R?R=!1:E--:L===";"&&I>0&&i+1<o&&n[i+1]===";"&&(R=!0));L===`
14
- `&&(c++,l=0,D=""),i++,l++}continue}if(p==="$"&&i+1<o&&n[i+1]==="["){f+=p,i++,l++,f+=n[i],i++,l++;let E=1;for(;E>0&&i<o;){let w=n[i];f+=w,w==="["?E++:w==="]"?E--:w===`
15
- `&&(c++,l=0),i++,l++}continue}if(p==="$"&&i+1<o&&n[i+1]==="{"){f+=p,i++,l++,f+=n[i],i++,l++;let E=1;for(;E>0&&i<o;){let w=n[i];f+=w,w==="{"?E++:w==="}"?E--:w===`
16
- `&&(c++,l=0),i++,l++}continue}if(p==="$"&&i+1<o){let E=n[i+1];if(E==="#"||E==="?"||E==="$"||E==="!"||E==="@"||E==="*"||E==="-"||E>="0"&&E<="9"){f+=p+E,i+=2,l+=2;continue}}if(p==="`"){for(f+=p,i++,l++;i<o&&n[i]!=="`";){let E=n[i];f+=E,E==="\\"&&i+1<o&&(f+=n[i+1],i++,l++),E===`
17
- `&&(c++,l=0),i++,l++}i<o&&(f+=n[i],i++,l++);continue}f+=p,i++,p===`
18
- `?(c++,l=1):l++}if(this.pos=i,this.column=l,this.line=c,f==="")return{type:u.WORD,value:"",start:e,end:i,line:s,column:r,quoted:h,singleQuoted:d};if(!h&&Ze[f])return{type:Ze[f],value:f,start:e,end:i,line:s,column:r};if(!g){let p=f.indexOf("=");if(p>0&&Dr(f.slice(0,p)))return{type:u.ASSIGNMENT_WORD,value:f,start:e,end:i,line:s,column:r,quoted:h,singleQuoted:d}}return/^[0-9]+$/.test(f)?{type:u.NUMBER,value:f,start:e,end:i,line:s,column:r}:Qs(f)?{type:u.NAME,value:f,start:e,end:i,line:s,column:r,quoted:h,singleQuoted:d}:{type:u.WORD,value:f,start:e,end:i,line:s,column:r,quoted:h,singleQuoted:d}}readHeredocContent(){for(;this.pendingHeredocs.length>0;){let e=this.pendingHeredocs.shift();if(!e)break;let s=this.pos,r=this.line,n=this.column,o="";for(;this.pos<this.input.length;){let i=this.pos,a="";for(;this.pos<this.input.length&&this.input[this.pos]!==`
1
+ import{a as U,b as Y,c as V,d as te,e as J,f as k,g as W,h as ye,i as z,j as le,k as Ge}from"./chunks/chunk-CG2HXOFG.js";import{a as ce}from"./chunks/chunk-44UOCSGV.js";import"./chunks/chunk-2RUN43TJ.js";var xt=[{name:"echo",load:async()=>(await import("./chunks/echo-WUKBESC7.js")).echoCommand},{name:"cat",load:async()=>(await import("./chunks/cat-47EP4IAV.js")).catCommand},{name:"printf",load:async()=>(await import("./chunks/printf-HBP44PXI.js")).printfCommand},{name:"ls",load:async()=>(await import("./chunks/ls-JGYJQA2Y.js")).lsCommand},{name:"mkdir",load:async()=>(await import("./chunks/mkdir-HA2FJX4O.js")).mkdirCommand},{name:"touch",load:async()=>(await import("./chunks/touch-FOE745V2.js")).touchCommand},{name:"rm",load:async()=>(await import("./chunks/rm-NF3FNLAY.js")).rmCommand},{name:"cp",load:async()=>(await import("./chunks/cp-37OVLNLD.js")).cpCommand},{name:"mv",load:async()=>(await import("./chunks/mv-7I62SB3I.js")).mvCommand},{name:"ln",load:async()=>(await import("./chunks/ln-XFYHBIFL.js")).lnCommand},{name:"chmod",load:async()=>(await import("./chunks/chmod-XJXFAD4M.js")).chmodCommand},{name:"pwd",load:async()=>(await import("./chunks/pwd-CEF235GL.js")).pwdCommand},{name:"readlink",load:async()=>(await import("./chunks/readlink-MQIMKDSA.js")).readlinkCommand},{name:"head",load:async()=>(await import("./chunks/head-6PAUYCDP.js")).headCommand},{name:"tail",load:async()=>(await import("./chunks/tail-QXKYHAML.js")).tailCommand},{name:"wc",load:async()=>(await import("./chunks/wc-GV5WUREX.js")).wcCommand},{name:"stat",load:async()=>(await import("./chunks/stat-FVFLDQGP.js")).statCommand},{name:"grep",load:async()=>(await import("./chunks/grep-ZJVDG3FA.js")).grepCommand},{name:"fgrep",load:async()=>(await import("./chunks/grep-ZJVDG3FA.js")).fgrepCommand},{name:"egrep",load:async()=>(await import("./chunks/grep-ZJVDG3FA.js")).egrepCommand},{name:"sed",load:async()=>(await import("./chunks/sed-H2RWPMTM.js")).sedCommand},{name:"awk",load:async()=>(await import("./chunks/awk2-QWBT4IFJ.js")).awkCommand2},{name:"sort",load:async()=>(await import("./chunks/sort-XODGFZC4.js")).sortCommand},{name:"uniq",load:async()=>(await import("./chunks/uniq-7PFWPNWK.js")).uniqCommand},{name:"comm",load:async()=>(await import("./chunks/comm-KSJ4BBRQ.js")).commCommand},{name:"cut",load:async()=>(await import("./chunks/cut-FIZRELKC.js")).cutCommand},{name:"paste",load:async()=>(await import("./chunks/paste-QBGVCQFT.js")).pasteCommand},{name:"tr",load:async()=>(await import("./chunks/tr-LMLGE4IE.js")).trCommand},{name:"tee",load:async()=>(await import("./chunks/tee-W5HCCBPO.js")).teeCommand},{name:"find",load:async()=>(await import("./chunks/find-R6LJIRBI.js")).findCommand},{name:"basename",load:async()=>(await import("./chunks/basename-5UVU5RXR.js")).basenameCommand},{name:"dirname",load:async()=>(await import("./chunks/dirname-U2KVUSQY.js")).dirnameCommand},{name:"tree",load:async()=>(await import("./chunks/tree-WBUGLVP5.js")).treeCommand},{name:"du",load:async()=>(await import("./chunks/du-KRAFOIQK.js")).duCommand},{name:"env",load:async()=>(await import("./chunks/env-MSPSPGCD.js")).envCommand},{name:"printenv",load:async()=>(await import("./chunks/env-MSPSPGCD.js")).printenvCommand},{name:"alias",load:async()=>(await import("./chunks/alias-JFIUWFGE.js")).aliasCommand},{name:"unalias",load:async()=>(await import("./chunks/alias-JFIUWFGE.js")).unaliasCommand},{name:"history",load:async()=>(await import("./chunks/history-SG6VRATI.js")).historyCommand},{name:"xargs",load:async()=>(await import("./chunks/xargs-NQBNFMCT.js")).xargsCommand},{name:"true",load:async()=>(await import("./chunks/true-6LGCG4EY.js")).trueCommand},{name:"false",load:async()=>(await import("./chunks/true-6LGCG4EY.js")).falseCommand},{name:"clear",load:async()=>(await import("./chunks/clear-XD3TJRVQ.js")).clearCommand},{name:"bash",load:async()=>(await import("./chunks/bash-BASUPKHJ.js")).bashCommand},{name:"sh",load:async()=>(await import("./chunks/bash-BASUPKHJ.js")).shCommand},{name:"jq",load:async()=>(await import("./chunks/jq-ABWUP4LV.js")).jqCommand},{name:"base64",load:async()=>(await import("./chunks/base64-TUA2XORD.js")).base64Command},{name:"diff",load:async()=>(await import("./chunks/diff-GLRVCAKJ.js")).diffCommand},{name:"date",load:async()=>(await import("./chunks/date-NN5C354M.js")).dateCommand},{name:"sleep",load:async()=>(await import("./chunks/sleep-AFN3PHJW.js")).sleepCommand},{name:"timeout",load:async()=>(await import("./chunks/timeout-XAA3N7CF.js")).timeoutCommand},{name:"seq",load:async()=>(await import("./chunks/seq-VKYIUOPJ.js")).seqCommand},{name:"expr",load:async()=>(await import("./chunks/expr-HYOCSWK6.js")).exprCommand},{name:"md5sum",load:async()=>(await import("./chunks/md5sum-PIH6F3O3.js")).md5sumCommand},{name:"sha1sum",load:async()=>(await import("./chunks/sha1sum-HVHNZSEC.js")).sha1sumCommand},{name:"sha256sum",load:async()=>(await import("./chunks/sha256sum-REOOJORK.js")).sha256sumCommand},{name:"file",load:async()=>(await import("./chunks/file-LQXX6P4Y.js")).fileCommand},{name:"html-to-markdown",load:async()=>(await import("./chunks/html-to-markdown-ZSZ34PAN.js")).htmlToMarkdownCommand},{name:"help",load:async()=>(await import("./chunks/help-5E6PYJWQ.js")).helpCommand},{name:"which",load:async()=>(await import("./chunks/which-KHFYPBWW.js")).whichCommand}],Er=[{name:"curl",load:async()=>(await import("./chunks/curl-C43O5WQS.js")).curlCommand}],yr=new Map;function wr(t){return{name:t.name,async execute(e,n){let r=yr.get(t.name);return r||(r=await t.load(),yr.set(t.name,r)),r.execute(e,n)}}}function Un(){return xt.map(t=>t.name)}function Vn(){return Er.map(t=>t.name)}function gr(t){return(t?xt.filter(n=>t.includes(n.name)):xt).map(wr)}function Ar(){return Er.map(wr)}function xr(t){return"load"in t&&typeof t.load=="function"}function Gn(t,e){return{name:t,execute:e}}function Sr(t){let e=null;return{name:t.name,async execute(n,r){return e||(e=await t.load()),e.execute(n,r)}}}var Hn=new TextEncoder,jn=new TextDecoder;function re(t,e){if(t instanceof Uint8Array)return t;switch(e){case"base64":return Uint8Array.from(atob(t),n=>n.charCodeAt(0));case"hex":{let n=new Uint8Array(t.length/2);for(let r=0;r<t.length;r+=2)n[r/2]=parseInt(t.slice(r,r+2),16);return n}case"binary":case"latin1":return Uint8Array.from(t,n=>n.charCodeAt(0));default:return Hn.encode(t)}}function Se(t,e){switch(e){case"base64":return btoa(String.fromCharCode(...t));case"hex":return Array.from(t).map(n=>n.toString(16).padStart(2,"0")).join("");case"binary":case"latin1":return String.fromCharCode(...t);default:return jn.decode(t)}}function Z(t){if(t!=null)return typeof t=="string"?t:t.encoding??void 0}var He=new TextEncoder;function Zn(t){return typeof t=="object"&&t!==null&&!(t instanceof Uint8Array)&&"content"in t}var Ee=class{data=new Map;constructor(e){if(this.data.set("/",{type:"directory",mode:493,mtime:new Date}),e)for(let[n,r]of Object.entries(e))Zn(r)?this.writeFileSync(n,r.content,void 0,{mode:r.mode,mtime:r.mtime}):this.writeFileSync(n,r)}normalizePath(e){if(!e||e==="/")return"/";let n=e.endsWith("/")&&e!=="/"?e.slice(0,-1):e;n.startsWith("/")||(n=`/${n}`);let r=n.split("/").filter(o=>o&&o!=="."),s=[];for(let o of r)o===".."?s.pop():s.push(o);return`/${s.join("/")}`||"/"}dirname(e){let n=this.normalizePath(e);if(n==="/")return"/";let r=n.lastIndexOf("/");return r===0?"/":n.slice(0,r)}ensureParentDirs(e){let n=this.dirname(e);n!=="/"&&(this.data.has(n)||(this.ensureParentDirs(n),this.data.set(n,{type:"directory",mode:493,mtime:new Date})))}writeFileSync(e,n,r,s){let o=this.normalizePath(e);this.ensureParentDirs(o);let i=Z(r),a=re(n,i);this.data.set(o,{type:"file",content:a,mode:s?.mode??420,mtime:s?.mtime??new Date})}async readFile(e,n){let r=await this.readFileBuffer(e),s=Z(n);return Se(r,s)}async readFileBuffer(e){let n=this.normalizePath(e),r=this.data.get(n),s=n;if(!r)throw new Error(`ENOENT: no such file or directory, open '${e}'`);let o=new Set;for(;r&&r.type==="symlink";){if(o.has(s))throw new Error(`ELOOP: too many levels of symbolic links, open '${e}'`);o.add(s),s=this.resolveSymlink(s,r.target),r=this.data.get(s)}if(!r)throw new Error(`ENOENT: no such file or directory, open '${e}'`);if(r.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);return r.content instanceof Uint8Array?r.content:He.encode(r.content)}async writeFile(e,n,r){this.writeFileSync(e,n,r)}async appendFile(e,n,r){let s=this.normalizePath(e),o=this.data.get(s);if(o&&o.type==="directory")throw new Error(`EISDIR: illegal operation on a directory, write '${e}'`);let i=Z(r),a=re(n,i);if(o?.type==="file"){let l=o.content instanceof Uint8Array?o.content:He.encode(o.content),c=new Uint8Array(l.length+a.length);c.set(l),c.set(a,l.length),this.data.set(s,{type:"file",content:c,mode:o.mode,mtime:new Date})}else this.writeFileSync(e,n,r)}async exists(e){return this.data.has(this.normalizePath(e))}async stat(e){let n=this.normalizePath(e),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);if(r.type==="symlink"){let o=this.resolveSymlink(n,r.target),i=this.data.get(o);if(!i)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);r=i}let s=0;return r.type==="file"&&r.content&&(r.content instanceof Uint8Array?s=r.content.length:s=He.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:s,mtime:r.mtime||new Date}}async lstat(e){let n=this.normalizePath(e),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime||new Date};let s=0;return r.type==="file"&&r.content&&(r.content instanceof Uint8Array?s=r.content.length:s=He.encode(r.content).length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:s,mtime:r.mtime||new Date}}resolveSymlink(e,n){if(n.startsWith("/"))return this.normalizePath(n);let r=this.dirname(e);return this.normalizePath(r==="/"?`/${n}`:`${r}/${n}`)}async mkdir(e,n){this.mkdirSync(e,n)}mkdirSync(e,n){let r=this.normalizePath(e);if(this.data.has(r)){if(this.data.get(r)?.type==="file")throw new Error(`EEXIST: file already exists, mkdir '${e}'`);if(!n?.recursive)throw new Error(`EEXIST: directory already exists, mkdir '${e}'`);return}let s=this.dirname(r);if(s!=="/"&&!this.data.has(s))if(n?.recursive)this.mkdirSync(s,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.data.set(r,{type:"directory",mode:493,mtime:new Date})}async readdir(e){let n=this.normalizePath(e),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, scandir '${e}'`);if(r.type!=="directory")throw new Error(`ENOTDIR: not a directory, scandir '${e}'`);let s=n==="/"?"/":`${n}/`,o=[];for(let i of this.data.keys())if(i!==n&&i.startsWith(s)){let l=i.slice(s.length).split("/")[0];l&&!o.includes(l)&&o.push(l)}return o.sort()}async rm(e,n){let r=this.normalizePath(e),s=this.data.get(r);if(!s){if(n?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${e}'`)}if(s.type==="directory"){let o=await this.readdir(r);if(o.length>0){if(!n?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${e}'`);for(let i of o){let a=r==="/"?`/${i}`:`${r}/${i}`;await this.rm(a,n)}}}this.data.delete(r)}async cp(e,n,r){let s=this.normalizePath(e),o=this.normalizePath(n),i=this.data.get(s);if(!i)throw new Error(`ENOENT: no such file or directory, cp '${e}'`);if(i.type==="file")this.ensureParentDirs(o),this.data.set(o,{...i});else if(i.type==="directory"){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${e}'`);await this.mkdir(o,{recursive:!0});let a=await this.readdir(s);for(let l of a){let c=s==="/"?`/${l}`:`${s}/${l}`,f=o==="/"?`/${l}`:`${o}/${l}`;await this.cp(c,f,r)}}}async mv(e,n){await this.cp(e,n,{recursive:!0}),await this.rm(e,{recursive:!0})}getAllPaths(){return Array.from(this.data.keys())}resolvePath(e,n){if(n.startsWith("/"))return this.normalizePath(n);let r=e==="/"?`/${n}`:`${e}/${n}`;return this.normalizePath(r)}async chmod(e,n){let r=this.normalizePath(e),s=this.data.get(r);if(!s)throw new Error(`ENOENT: no such file or directory, chmod '${e}'`);s.mode=n}async symlink(e,n){let r=this.normalizePath(n);if(this.data.has(r))throw new Error(`EEXIST: file already exists, symlink '${n}'`);this.ensureParentDirs(r),this.data.set(r,{type:"symlink",target:e,mode:511,mtime:new Date})}async link(e,n){let r=this.normalizePath(e),s=this.normalizePath(n),o=this.data.get(r);if(!o)throw new Error(`ENOENT: no such file or directory, link '${e}'`);if(o.type!=="file")throw new Error(`EPERM: operation not permitted, link '${e}'`);if(this.data.has(s))throw new Error(`EEXIST: file already exists, link '${n}'`);this.ensureParentDirs(s),this.data.set(s,{type:"file",content:o.content,mode:o.mode,mtime:o.mtime})}async readlink(e){let n=this.normalizePath(e),r=this.data.get(n);if(!r)throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${e}'`);return r.target}};var br="5.1.0(1)-release",Nr="Linux version 5.15.0-generic (just-bash) #1 SMP PREEMPT";function Te(){return{pid:process.pid,ppid:process.ppid,uid:process.getuid?.()??1e3,gid:process.getgid?.()??1e3}}function Cr(){let{pid:t,ppid:e,uid:n,gid:r}=Te();return`Name: bash
2
+ State: R (running)
3
+ Pid: ${t}
4
+ PPid: ${e}
5
+ Uid: ${n} ${n} ${n} ${n}
6
+ Gid: ${r} ${r} ${r} ${r}
7
+ `}function qn(t){let e=t;return typeof e.mkdirSync=="function"&&typeof e.writeFileSync=="function"}function Qn(t,e){t.mkdirSync("/bin",{recursive:!0}),t.mkdirSync("/usr/bin",{recursive:!0}),e&&(t.mkdirSync("/home/user",{recursive:!0}),t.mkdirSync("/tmp",{recursive:!0}))}function Kn(t){t.mkdirSync("/dev",{recursive:!0}),t.writeFileSync("/dev/null",""),t.writeFileSync("/dev/zero",new Uint8Array(0)),t.writeFileSync("/dev/stdin",""),t.writeFileSync("/dev/stdout",""),t.writeFileSync("/dev/stderr","")}function Xn(t){t.mkdirSync("/proc/self/fd",{recursive:!0}),t.writeFileSync("/proc/version",`${Nr}
8
+ `),t.writeFileSync("/proc/self/exe","/bin/bash"),t.writeFileSync("/proc/self/cmdline","bash\0"),t.writeFileSync("/proc/self/comm",`bash
9
+ `),t.writeFileSync("/proc/self/status",Cr()),t.writeFileSync("/proc/self/fd/0","/dev/stdin"),t.writeFileSync("/proc/self/fd/1","/dev/stdout"),t.writeFileSync("/proc/self/fd/2","/dev/stderr")}function $r(t,e){qn(t)&&(Qn(t,e),Kn(t),Xn(t))}function T(t,e){return{type:"ArithmeticExpression",expression:ne(t,e,0).expr}}function ne(t,e,n){return Yn(t,e,n)}function Yn(t,e,n){let{expr:r,pos:s}=Ze(t,e,n);for(s=O(e,s);e[s]===",";){s++;let{expr:o,pos:i}=Ze(t,e,s);r={type:"ArithBinary",operator:",",left:r,right:o},s=O(e,i)}return{expr:r,pos:s}}function Ze(t,e,n){let{expr:r,pos:s}=Jn(t,e,n);if(s=O(e,s),e[s]==="?"){s++;let{expr:o,pos:i}=ne(t,e,s);if(s=O(e,i),e[s]===":"){s++;let{expr:a,pos:l}=ne(t,e,s);return{expr:{type:"ArithTernary",condition:r,consequent:o,alternate:a},pos:l}}}return{expr:r,pos:s}}function Jn(t,e,n){let{expr:r,pos:s}=Pr(t,e,n);for(;s=O(e,s),e.slice(s,s+2)==="||";){s+=2;let{expr:o,pos:i}=Pr(t,e,s);r={type:"ArithBinary",operator:"||",left:r,right:o},s=i}return{expr:r,pos:s}}function Pr(t,e,n){let{expr:r,pos:s}=vr(t,e,n);for(;s=O(e,s),e.slice(s,s+2)==="&&";){s+=2;let{expr:o,pos:i}=vr(t,e,s);r={type:"ArithBinary",operator:"&&",left:r,right:o},s=i}return{expr:r,pos:s}}function vr(t,e,n){let{expr:r,pos:s}=Ir(t,e,n);for(;s=O(e,s),e[s]==="|"&&e[s+1]!=="|";){s++;let{expr:o,pos:i}=Ir(t,e,s);r={type:"ArithBinary",operator:"|",left:r,right:o},s=i}return{expr:r,pos:s}}function Ir(t,e,n){let{expr:r,pos:s}=Rr(t,e,n);for(;s=O(e,s),e[s]==="^";){s++;let{expr:o,pos:i}=Rr(t,e,s);r={type:"ArithBinary",operator:"^",left:r,right:o},s=i}return{expr:r,pos:s}}function Rr(t,e,n){let{expr:r,pos:s}=kr(t,e,n);for(;s=O(e,s),e[s]==="&"&&e[s+1]!=="&";){s++;let{expr:o,pos:i}=kr(t,e,s);r={type:"ArithBinary",operator:"&",left:r,right:o},s=i}return{expr:r,pos:s}}function kr(t,e,n){let{expr:r,pos:s}=Dr(t,e,n);for(;s=O(e,s),e.slice(s,s+2)==="=="||e.slice(s,s+2)==="!=";){let o=e.slice(s,s+2);s+=2;let{expr:i,pos:a}=Dr(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}return{expr:r,pos:s}}function Dr(t,e,n){let{expr:r,pos:s}=St(t,e,n);for(;;)if(s=O(e,s),e.slice(s,s+2)==="<="||e.slice(s,s+2)===">="){let o=e.slice(s,s+2);s+=2;let{expr:i,pos:a}=St(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}else if(e[s]==="<"||e[s]===">"){let o=e[s];s++;let{expr:i,pos:a}=St(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}else break;return{expr:r,pos:s}}function St(t,e,n){let{expr:r,pos:s}=Or(t,e,n);for(;s=O(e,s),e.slice(s,s+2)==="<<"||e.slice(s,s+2)===">>";){let o=e.slice(s,s+2);s+=2;let{expr:i,pos:a}=Or(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}return{expr:r,pos:s}}function Or(t,e,n){let{expr:r,pos:s}=_r(t,e,n);for(;s=O(e,s),(e[s]==="+"||e[s]==="-")&&e[s+1]!==e[s];){let o=e[s];s++;let{expr:i,pos:a}=_r(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}return{expr:r,pos:s}}function _r(t,e,n){let{expr:r,pos:s}=je(t,e,n);for(;;)if(s=O(e,s),e[s]==="*"&&e[s+1]!=="*"){s++;let{expr:o,pos:i}=je(t,e,s);r={type:"ArithBinary",operator:"*",left:r,right:o},s=i}else if(e[s]==="/"||e[s]==="%"){let o=e[s];s++;let{expr:i,pos:a}=je(t,e,s);r={type:"ArithBinary",operator:o,left:r,right:i},s=a}else break;return{expr:r,pos:s}}function je(t,e,n){let{expr:r,pos:s}=bt(t,e,n),o=O(e,s);if(e.slice(o,o+2)==="**"){o+=2;let{expr:i,pos:a}=je(t,e,o);return{expr:{type:"ArithBinary",operator:"**",left:r,right:i},pos:a}}return{expr:r,pos:s}}function bt(t,e,n){let r=O(e,n);if(e.slice(r,r+2)==="++"||e.slice(r,r+2)==="--"){let s=e.slice(r,r+2);r+=2;let{expr:o,pos:i}=bt(t,e,r);return{expr:{type:"ArithUnary",operator:s,operand:o,prefix:!0},pos:i}}if(e[r]==="+"||e[r]==="-"||e[r]==="!"||e[r]==="~"){let s=e[r];r++;let{expr:o,pos:i}=bt(t,e,r);return{expr:{type:"ArithUnary",operator:s,operand:o,prefix:!0},pos:i}}return ts(t,e,r)}function es(t,e){let n=t[e];return n==="$"||n==="`"}function ts(t,e,n){let{expr:r,pos:s}=Lr(t,e,n),o=[r];for(;es(e,s);){let{expr:i,pos:a}=Lr(t,e,s);o.push(i),s=a}if(o.length>1&&(r={type:"ArithConcat",parts:o}),s=O(e,s),e.slice(s,s+2)==="++"||e.slice(s,s+2)==="--"){let i=e.slice(s,s+2);return s+=2,{expr:{type:"ArithUnary",operator:i,operand:r,prefix:!1},pos:s}}return{expr:r,pos:s}}function Lr(t,e,n){let r=O(e,n);if(e.slice(r,r+3)==="$(("){r+=3;let s=1,o=r;for(;r<e.length-1&&s>0;)e[r]==="("&&e[r+1]==="("?(s++,r+=2):e[r]===")"&&e[r+1]===")"?(s--,s>0&&(r+=2)):r++;let i=e.slice(o,r),{expr:a}=ne(t,i,0);return r+=2,{expr:{type:"ArithNested",expression:a},pos:r}}if(e.slice(r,r+2)==="$("&&e[r+2]!=="("){r+=2;let s=1,o=r;for(;r<e.length&&s>0;)e[r]==="("?s++:e[r]===")"&&s--,s>0&&r++;let i=e.slice(o,r);return r++,{expr:{type:"ArithCommandSubst",command:i},pos:r}}if(e[r]==="`"){r++;let s=r;for(;r<e.length&&e[r]!=="`";)r++;let o=e.slice(s,r);return e[r]==="`"&&r++,{expr:{type:"ArithCommandSubst",command:o},pos:r}}if(e[r]==="("){r++;let{expr:s,pos:o}=ne(t,e,r);return r=O(e,o),e[r]===")"&&r++,{expr:{type:"ArithGroup",expression:s},pos:r}}if(/[0-9]/.test(e[r])){let s="",o=!1;for(;r<e.length;){let a=e[r];if(o)if(/[0-9a-zA-Z@_]/.test(a))s+=a,r++;else break;else if(a==="#")o=!0,s+=a,r++;else if(/[0-9a-fA-FxX]/.test(a))s+=a,r++;else break}if(e[r]==="."&&/[0-9]/.test(e[r+1]))throw new W(`${s}.${e[r+1]}...: syntax error: invalid arithmetic operator`);if(e[r]==="["){let a=e.slice(r).trim();return{expr:{type:"ArithNumberSubscript",number:s,errorToken:a},pos:e.length}}return{expr:{type:"ArithNumber",value:be(s)},pos:r}}if(e[r]==="$"&&e[r+1]==="{"){let s=r+2,o=1,i=s;for(;i<e.length&&o>0;)e[i]==="{"?o++:e[i]==="}"&&o--,o>0&&i++;let a=e.slice(s,i),l=i+1;if(e[l]==="#"){let c=l+1;for(;c<e.length&&/[0-9a-zA-Z@_]/.test(e[c]);)c++;let f=e.slice(l+1,c);return{expr:{type:"ArithDynamicBase",baseExpr:a,value:f},pos:c}}if(/[0-9]/.test(e[l])||e[l]==="x"||e[l]==="X"){let c=l;if(e[l]==="x"||e[l]==="X")for(c++;c<e.length&&/[0-9a-fA-F]/.test(e[c]);)c++;else for(;c<e.length&&/[0-9]/.test(e[c]);)c++;let f=e.slice(l,c);return{expr:{type:"ArithDynamicNumber",prefix:a,suffix:f},pos:c}}return r=l,{expr:{type:"ArithBracedExpansion",content:a},pos:r}}if(e[r]==="$"&&r+1<e.length&&/[0-9]/.test(e[r+1])){r++;let s="";for(;r<e.length&&/[0-9]/.test(e[r]);)s+=e[r],r++;return{expr:{type:"ArithVariable",name:s},pos:r}}if(e[r]==="$"&&r+1<e.length&&/[a-zA-Z_]/.test(e[r+1])&&r++,/[a-zA-Z_]/.test(e[r])){let s="";for(;r<e.length&&/[a-zA-Z0-9_]/.test(e[r]);)s+=e[r],r++;if(e[r]==="["){r++;let i;if(e[r]==="'"||e[r]==='"'){let c=e[r];for(r++,i="";r<e.length&&e[r]!==c;)i+=e[r],r++;e[r]===c&&r++,r=O(e,r),e[r]==="]"&&r++}let a;if(i===void 0){let{expr:c,pos:f}=ne(t,e,r);a=c,r=f,e[r]==="]"&&r++}if(r=O(e,r),e[r]==="["&&a)return{expr:{type:"ArithDoubleSubscript",array:s,index:a},pos:r};let l=["=","+=","-=","*=","/=","%=","<<=",">>=","&=","|=","^="];for(let c of l)if(e.slice(r,r+c.length)===c&&e.slice(r,r+c.length+1)!=="=="){r+=c.length;let{expr:f,pos:d}=Ze(t,e,r);return{expr:{type:"ArithAssignment",operator:c,variable:s,subscript:a,stringKey:i,value:f},pos:d}}return{expr:{type:"ArithArrayElement",array:s,index:a,stringKey:i},pos:r}}r=O(e,r);let o=["=","+=","-=","*=","/=","%=","<<=",">>=","&=","|=","^="];for(let i of o)if(e.slice(r,r+i.length)===i&&e.slice(r,r+i.length+1)!=="=="){r+=i.length;let{expr:a,pos:l}=Ze(t,e,r);return{expr:{type:"ArithAssignment",operator:i,variable:s,value:a},pos:l}}return{expr:{type:"ArithVariable",name:s},pos:r}}return{expr:{type:"ArithNumber",value:0},pos:r}}function be(t){if(t.includes("#")){let[e,n]=t.split("#"),r=Number.parseInt(e,10);if(r<2||r>64)return Number.NaN;if(r<=36)return Number.parseInt(n,r);let s=0;for(let o of n){let i;if(o>="0"&&o<="9")i=o.charCodeAt(0)-48;else if(o>="a"&&o<="z")i=o.charCodeAt(0)-97+10;else if(o>="A"&&o<="Z")i=o.charCodeAt(0)-65+36;else if(o==="@")i=62;else if(o==="_")i=63;else return Number.NaN;if(i>=r)return Number.NaN;s=s*r+i}return s}return t.startsWith("0x")||t.startsWith("0X")?Number.parseInt(t.slice(2),16):t.startsWith("0")&&t.length>1&&/^[0-9]+$/.test(t)?/[89]/.test(t)?Number.NaN:Number.parseInt(t,8):Number.parseInt(t,10)}function O(t,e){for(;e<t.length;){if(t[e]==="\\"&&t[e+1]===`
10
+ `){e+=2;continue}if(/\s/.test(t[e])){e++;continue}break}return e}var A={script(t){return{type:"Script",statements:t}},statement(t,e=[],n=!1){return{type:"Statement",pipelines:t,operators:e,background:n}},pipeline(t,e=!1){return{type:"Pipeline",commands:t,negated:e}},simpleCommand(t,e=[],n=[],r=[]){return{type:"SimpleCommand",name:t,args:e,assignments:n,redirections:r}},word(t){return{type:"Word",parts:t}},literal(t){return{type:"Literal",value:t}},singleQuoted(t){return{type:"SingleQuoted",value:t}},doubleQuoted(t){return{type:"DoubleQuoted",parts:t}},escaped(t){return{type:"Escaped",value:t}},parameterExpansion(t,e=null){return{type:"ParameterExpansion",parameter:t,operation:e}},commandSubstitution(t,e=!1){return{type:"CommandSubstitution",body:t,legacy:e}},arithmeticExpansion(t){return{type:"ArithmeticExpansion",expression:t}},assignment(t,e,n=!1,r=null){return{type:"Assignment",name:t,value:e,append:n,array:r}},redirection(t,e,n=null){return{type:"Redirection",fd:n,operator:t,target:e}},hereDoc(t,e,n=!1,r=!1){return{type:"HereDoc",delimiter:t,content:e,stripTabs:n,quoted:r}},ifNode(t,e=null,n=[]){return{type:"If",clauses:t,elseBody:e,redirections:n}},forNode(t,e,n,r=[]){return{type:"For",variable:t,words:e,body:n,redirections:r}},whileNode(t,e,n=[]){return{type:"While",condition:t,body:e,redirections:n}},untilNode(t,e,n=[]){return{type:"Until",condition:t,body:e,redirections:n}},caseNode(t,e,n=[]){return{type:"Case",word:t,items:e,redirections:n}},caseItem(t,e,n=";;"){return{type:"CaseItem",patterns:t,body:e,terminator:n}},subshell(t,e=[]){return{type:"Subshell",body:t,redirections:e}},group(t,e=[]){return{type:"Group",body:t,redirections:e}},functionDef(t,e,n=[]){return{type:"FunctionDef",name:t,body:e,redirections:n}},conditionalCommand(t,e=[]){return{type:"ConditionalCommand",expression:t,redirections:e}},arithmeticCommand(t,e=[]){return{type:"ArithmeticCommand",expression:t,redirections:e}}};var u;(function(t){t.EOF="EOF",t.NEWLINE="NEWLINE",t.SEMICOLON="SEMICOLON",t.AMP="AMP",t.PIPE="PIPE",t.PIPE_AMP="PIPE_AMP",t.AND_AND="AND_AND",t.OR_OR="OR_OR",t.BANG="BANG",t.LESS="LESS",t.GREAT="GREAT",t.DLESS="DLESS",t.DGREAT="DGREAT",t.LESSAND="LESSAND",t.GREATAND="GREATAND",t.LESSGREAT="LESSGREAT",t.DLESSDASH="DLESSDASH",t.CLOBBER="CLOBBER",t.TLESS="TLESS",t.AND_GREAT="AND_GREAT",t.AND_DGREAT="AND_DGREAT",t.LPAREN="LPAREN",t.RPAREN="RPAREN",t.LBRACE="LBRACE",t.RBRACE="RBRACE",t.DSEMI="DSEMI",t.SEMI_AND="SEMI_AND",t.SEMI_SEMI_AND="SEMI_SEMI_AND",t.DBRACK_START="DBRACK_START",t.DBRACK_END="DBRACK_END",t.DPAREN_START="DPAREN_START",t.DPAREN_END="DPAREN_END",t.IF="IF",t.THEN="THEN",t.ELSE="ELSE",t.ELIF="ELIF",t.FI="FI",t.FOR="FOR",t.WHILE="WHILE",t.UNTIL="UNTIL",t.DO="DO",t.DONE="DONE",t.CASE="CASE",t.ESAC="ESAC",t.IN="IN",t.FUNCTION="FUNCTION",t.SELECT="SELECT",t.TIME="TIME",t.COPROC="COPROC",t.WORD="WORD",t.NAME="NAME",t.NUMBER="NUMBER",t.ASSIGNMENT_WORD="ASSIGNMENT_WORD",t.COMMENT="COMMENT",t.HEREDOC_CONTENT="HEREDOC_CONTENT"})(u||(u={}));var qe={if:u.IF,then:u.THEN,else:u.ELSE,elif:u.ELIF,fi:u.FI,for:u.FOR,while:u.WHILE,until:u.UNTIL,do:u.DO,done:u.DONE,case:u.CASE,esac:u.ESAC,in:u.IN,function:u.FUNCTION,select:u.SELECT,time:u.TIME,coproc:u.COPROC};function Fr(t){let e=t.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);if(!e)return!1;let n=t.slice(e[0].length);if(n===""||n==="+")return!0;if(n[0]==="["){let r=0,s=0;for(;s<n.length;s++)if(n[s]==="[")r++;else if(n[s]==="]"&&(r--,r===0))break;if(r!==0||s>=n.length)return!1;let o=n.slice(s+1);return o===""||o==="+"}return!1}var rs=[[";",";","&",u.SEMI_SEMI_AND],["<","<","<",u.TLESS],["&",">",">",u.AND_DGREAT]],ns=[["[","[",u.DBRACK_START],["]","]",u.DBRACK_END],["(","(",u.DPAREN_START],[")",")",u.DPAREN_END],["&","&",u.AND_AND],["|","|",u.OR_OR],[";",";",u.DSEMI],[";","&",u.SEMI_AND],["|","&",u.PIPE_AMP],[">",">",u.DGREAT],["<","&",u.LESSAND],[">","&",u.GREATAND],["<",">",u.LESSGREAT],[">","|",u.CLOBBER],["&",">",u.AND_GREAT]],ss={"|":u.PIPE,"&":u.AMP,";":u.SEMICOLON,"(":u.LPAREN,")":u.RPAREN,"<":u.LESS,">":u.GREAT};function is(t){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)}var Qe=class{input;pos=0;line=1;column=1;tokens=[];pendingHeredocs=[];constructor(e){this.input=e}tokenize(){let n=this.input.length,r=this.tokens,s=this.pendingHeredocs;for(;this.pos<n&&(this.skipWhitespace(),!(this.pos>=n));){if(s.length>0&&r.length>0&&r[r.length-1].type===u.NEWLINE){this.readHeredocContent();continue}let o=this.nextToken();o&&r.push(o)}return r.push({type:u.EOF,value:"",start:this.pos,end:this.pos,line:this.line,column:this.column}),r}skipWhitespace(){let e=this.input,n=e.length,r=this.pos,s=this.column,o=this.line;for(;r<n;){let i=e[r];if(i===" "||i===" ")r++,s++;else if(i==="\\"&&e[r+1]===`
11
+ `)r+=2,o++,s=1;else break}this.pos=r,this.column=s,this.line=o}nextToken(){let e=this.input,n=this.pos,r=this.line,s=this.column,o=e[n],i=e[n+1],a=e[n+2];if(o==="#")return this.readComment(n,r,s);if(o===`
12
+ `)return this.pos=n+1,this.line++,this.column=1,{type:u.NEWLINE,value:`
13
+ `,start:n,end:n+1,line:r,column:s};if(o==="<"&&i==="<"&&a==="-")return this.pos=n+3,this.column=s+3,this.registerHeredocFromLookahead(!0),this.makeToken(u.DLESSDASH,"<<-",n,r,s);for(let[c,f,d,h]of rs)if(o===c&&i===f&&a===d)return this.pos=n+3,this.column=s+3,this.makeToken(h,c+f+d,n,r,s);if(o==="<"&&i==="<")return this.pos=n+2,this.column=s+2,this.registerHeredocFromLookahead(!1),this.makeToken(u.DLESS,"<<",n,r,s);for(let[c,f,d]of ns)if(o===c&&i===f)return this.pos=n+2,this.column=s+2,this.makeToken(d,c+f,n,r,s);let l=ss[o];return l?(this.pos=n+1,this.column=s+1,this.makeToken(l,o,n,r,s)):o==="{"?i==="}"?(this.pos=n+2,this.column=s+2,{type:u.WORD,value:"{}",start:n,end:n+2,line:r,column:s,quoted:!1,singleQuoted:!1}):this.scanBraceExpansion(n)!==null?this.readWordWithBraceExpansion(n,r,s):this.scanLiteralBraceWord(n)!==null?this.readWordWithBraceExpansion(n,r,s):i!==void 0&&i!==" "&&i!==" "&&i!==`
14
+ `?this.readWord(n,r,s):(this.pos=n+1,this.column=s+1,this.makeToken(u.LBRACE,"{",n,r,s)):o==="}"?this.isWordCharFollowing(n+1)?this.readWord(n,r,s):(this.pos=n+1,this.column=s+1,this.makeToken(u.RBRACE,"}",n,r,s)):o==="!"?i==="="?(this.pos=n+2,this.column=s+2,this.makeToken(u.WORD,"!=",n,r,s)):(this.pos=n+1,this.column=s+1,this.makeToken(u.BANG,"!",n,r,s)):this.readWord(n,r,s)}makeToken(e,n,r,s,o){return{type:e,value:n,start:r,end:this.pos,line:s,column:o}}readComment(e,n,r){let s=this.input,o=s.length,i=this.pos;for(;i<o&&s[i]!==`
15
+ `;)i++;let a=s.slice(e,i);return this.pos=i,this.column=r+(i-e),{type:u.COMMENT,value:a,start:e,end:i,line:n,column:r}}readWord(e,n,r){let s=this.input,o=s.length,i=this.pos,a=i;for(;i<o;){let p=s[i];if(p===" "||p===" "||p===`
16
+ `||p===";"||p==="&"||p==="|"||p==="("||p===")"||p==="<"||p===">"||p==="'"||p==='"'||p==="\\"||p==="$"||p==="`"||p==="{"||p==="}"||p==="~"||p==="*"||p==="?"||p==="[")break;i++}if(i>a){let p=s[i];if(i>=o||p===" "||p===" "||p===`
17
+ `||p===";"||p==="&"||p==="|"||p==="("||p===")"||p==="<"||p===">"){let y=s.slice(a,i);if(this.pos=i,this.column=r+(i-a),qe[y])return{type:qe[y],value:y,start:e,end:i,line:n,column:r};let w=y.indexOf("=");return w>0&&Fr(y.slice(0,w))?{type:u.ASSIGNMENT_WORD,value:y,start:e,end:i,line:n,column:r}:/^[0-9]+$/.test(y)?{type:u.NUMBER,value:y,start:e,end:i,line:n,column:r}:/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(y)?{type:u.NAME,value:y,start:e,end:i,line:n,column:r,quoted:!1,singleQuoted:!1}:{type:u.WORD,value:y,start:e,end:i,line:n,column:r,quoted:!1,singleQuoted:!1}}}i=this.pos;let l=this.column,c=this.line,f="",d=!1,h=!1,m=!1,E=!1,g=s[i]==='"'||s[i]==="'";for(;i<o;){let p=s[i];if(!m&&!E&&(p===" "||p===" "||p===`
18
+ `||p===";"||p==="&"||p==="|"||p==="("||p===")"||p==="<"||p===">"))break;if(p==="$"&&i+1<o&&s[i+1]==="'"&&!m&&!E){for(f+="$'",i+=2,l+=2;i<o&&s[i]!=="'";)s[i]==="\\"&&i+1<o?(f+=s[i]+s[i+1],i+=2,l+=2):(f+=s[i],i++,l++);i<o&&(f+="'",i++,l++);continue}if(p==="$"&&i+1<o&&s[i+1]==='"'&&!m&&!E){i++,l++,E=!0,d=!0,f===""&&(g=!0),i++,l++;continue}if(p==="'"&&!E){m?(m=!1,g||(f+=p)):(m=!0,g?(h=!0,d=!0):f+=p),i++,l++;continue}if(p==='"'&&!m){E?(E=!1,g||(f+=p)):(E=!0,g?d=!0:f+=p),i++,l++;continue}if(p==="\\"&&!m&&i+1<o){let y=s[i+1];if(y===`
19
+ `){i+=2,c++,l=1;continue}if(E){if(y==='"'||y==="\\"||y==="$"||y==="`"||y===`
20
+ `){y==="$"||y==="`"?f+=p+y:f+=y,i+=2,l+=2;continue}}else{y==='"'||y==="'"?f+=p+y:f+=y,i+=2,l+=2;continue}}if(p==="$"&&i+1<o&&s[i+1]==="("){f+=p,i++,l++,f+=s[i],i++,l++;let y=1,w=!1,b=!1,N=0,R=!1,D="",pe=s[i]==="(";for(;y>0&&i<o;){let L=s[i];if(f+=L,w)L==="'"&&(w=!1);else if(b)L==="\\"&&i+1<o?(f+=s[i+1],i++,l++):L==='"'&&(b=!1);else if(L==="'")w=!0,D="";else if(L==='"')b=!0,D="";else if(L==="\\"&&i+1<o)f+=s[i+1],i++,l++,D="";else if(L==="#"&&!pe&&(D===""||/\s/.test(s[i-1]||""))){for(;i+1<o&&s[i+1]!==`
21
+ `;)i++,l++,f+=s[i];D=""}else/[a-zA-Z_]/.test(L)?D+=L:(D==="case"?(N++,R=!1):D==="in"&&N>0?R=!0:D==="esac"&&N>0&&(N--,R=!1),D="",L==="("?i>0&&s[i-1]==="$"?y++:R||y++:L===")"?R?R=!1:y--:L===";"&&N>0&&i+1<o&&s[i+1]===";"&&(R=!0));L===`
22
+ `&&(c++,l=0,D=""),i++,l++}continue}if(p==="$"&&i+1<o&&s[i+1]==="["){f+=p,i++,l++,f+=s[i],i++,l++;let y=1;for(;y>0&&i<o;){let w=s[i];f+=w,w==="["?y++:w==="]"?y--:w===`
23
+ `&&(c++,l=0),i++,l++}continue}if(p==="$"&&i+1<o&&s[i+1]==="{"){f+=p,i++,l++,f+=s[i],i++,l++;let y=1;for(;y>0&&i<o;){let w=s[i];f+=w,w==="{"?y++:w==="}"?y--:w===`
24
+ `&&(c++,l=0),i++,l++}continue}if(p==="$"&&i+1<o){let y=s[i+1];if(y==="#"||y==="?"||y==="$"||y==="!"||y==="@"||y==="*"||y==="-"||y>="0"&&y<="9"){f+=p+y,i+=2,l+=2;continue}}if(p==="`"){for(f+=p,i++,l++;i<o&&s[i]!=="`";){let y=s[i];f+=y,y==="\\"&&i+1<o&&(f+=s[i+1],i++,l++),y===`
25
+ `&&(c++,l=0),i++,l++}i<o&&(f+=s[i],i++,l++);continue}f+=p,i++,p===`
26
+ `?(c++,l=1):l++}if(this.pos=i,this.column=l,this.line=c,f==="")return{type:u.WORD,value:"",start:e,end:i,line:n,column:r,quoted:d,singleQuoted:h};if(!d&&qe[f])return{type:qe[f],value:f,start:e,end:i,line:n,column:r};if(!g){let p=f.indexOf("=");if(p>0&&Fr(f.slice(0,p)))return{type:u.ASSIGNMENT_WORD,value:f,start:e,end:i,line:n,column:r,quoted:d,singleQuoted:h}}return/^[0-9]+$/.test(f)?{type:u.NUMBER,value:f,start:e,end:i,line:n,column:r}:is(f)?{type:u.NAME,value:f,start:e,end:i,line:n,column:r,quoted:d,singleQuoted:h}:{type:u.WORD,value:f,start:e,end:i,line:n,column:r,quoted:d,singleQuoted:h}}readHeredocContent(){for(;this.pendingHeredocs.length>0;){let e=this.pendingHeredocs.shift();if(!e)break;let n=this.pos,r=this.line,s=this.column,o="";for(;this.pos<this.input.length;){let i=this.pos,a="";for(;this.pos<this.input.length&&this.input[this.pos]!==`
19
27
  `;)a+=this.input[this.pos],this.pos++,this.column++;if((e.stripTabs?a.replace(/^\t+/,""):a)===e.delimiter){this.pos<this.input.length&&this.input[this.pos]===`
20
28
  `&&(this.pos++,this.line++,this.column=1);break}o+=a,this.pos<this.input.length&&this.input[this.pos]===`
21
29
  `&&(o+=`
22
- `,this.pos++,this.line++,this.column=1)}this.tokens.push({type:u.HEREDOC_CONTENT,value:o,start:s,end:this.pos,line:r,column:n})}}addPendingHeredoc(e,s,r){this.pendingHeredocs.push({delimiter:e,stripTabs:s,quoted:r})}registerHeredocFromLookahead(e){let s=this.pos,r=this.column;for(;this.pos<this.input.length&&(this.input[this.pos]===" "||this.input[this.pos]===" ");)this.pos++,this.column++;let n="",o=!1,i=this.input[this.pos];if(i==="'"||i==='"'){o=!0;let a=i;for(this.pos++,this.column++;this.pos<this.input.length&&this.input[this.pos]!==a;)n+=this.input[this.pos],this.pos++,this.column++}else for(;this.pos<this.input.length&&!/[\s;<>&|()]/.test(this.input[this.pos]);)n+=this.input[this.pos],this.pos++,this.column++;this.pos=s,this.column=r,n&&this.pendingHeredocs.push({delimiter:n,stripTabs:e,quoted:o})}isWordCharFollowing(e){if(e>=this.input.length)return!1;let s=this.input[e];return!(s===" "||s===" "||s===`
23
- `||s===";"||s==="&"||s==="|"||s==="("||s===")"||s==="<"||s===">")}readWordWithBraceExpansion(e,s,r){let n=this.input,o=n.length,i=e,a=r;for(;i<o;){let c=n[i];if(c===" "||c===" "||c===`
24
- `||c===";"||c==="&"||c==="|"||c==="("||c===")"||c==="<"||c===">")break;if(c==="{"){if(this.scanBraceExpansion(i)!==null){let h=1;for(i++,a++;i<o&&h>0;)n[i]==="{"?h++:n[i]==="}"&&h--,i++,a++;continue}i++,a++;continue}if(c==="}"){i++,a++;continue}if(c==="$"&&i+1<o&&n[i+1]==="("){i++,a++,i++,a++;let f=1;for(;f>0&&i<o;)n[i]==="("?f++:n[i]===")"&&f--,i++,a++;continue}if(c==="$"&&i+1<o&&n[i+1]==="{"){i++,a++,i++,a++;let f=1;for(;f>0&&i<o;)n[i]==="{"?f++:n[i]==="}"&&f--,i++,a++;continue}if(c==="`"){for(i++,a++;i<o&&n[i]!=="`";)n[i]==="\\"&&i+1<o?(i+=2,a+=2):(i++,a++);i<o&&(i++,a++);continue}i++,a++}let l=n.slice(e,i);return this.pos=i,this.column=a,{type:u.WORD,value:l,start:e,end:i,line:s,column:r,quoted:!1,singleQuoted:!1}}scanBraceExpansion(e){let s=this.input,r=s.length,n=e+1,o=1,i=!1,a=!1;for(;n<r&&o>0;){let l=s[n];if(l==="{")o++,n++;else if(l==="}")o--,n++;else if(l===","&&o===1)i=!0,n++;else if(l==="."&&n+1<r&&s[n+1]===".")a=!0,n+=2;else{if(l===" "||l===" "||l===`
25
- `||l===";"||l==="&"||l==="|")return null;n++}}return o===0&&(i||a)?s.slice(e,n):null}scanLiteralBraceWord(e){let s=this.input,r=s.length,n=e+1,o=1;for(;n<r&&o>0;){let i=s[n];if(i==="{")o++,n++;else if(i==="}"){if(o--,o===0)return s.slice(e,n+1);n++}else{if(i===" "||i===" "||i===`
26
- `||i===";"||i==="&"||i==="|")return null;n++}}return null}};var bt=1e6,Nt=1e5,Or=1e6,_r=new Set([u.LESS,u.GREAT,u.DLESS,u.DGREAT,u.LESSAND,u.GREATAND,u.LESSGREAT,u.DLESSDASH,u.CLOBBER,u.TLESS,u.AND_GREAT,u.AND_DGREAT]),Lr=new Set([u.LESS,u.GREAT,u.DLESS,u.DGREAT,u.LESSAND,u.GREATAND,u.LESSGREAT,u.DLESSDASH,u.CLOBBER,u.TLESS]),ie=class extends Error{line;column;token;constructor(e,s,r,n=void 0){super(`Parse error at ${s}:${r}: ${e}`),this.line=s,this.column=r,this.token=n,this.name="ParseException"}};function Wr(t,e,s){let r=s+1;for(;r<e.length&&/[a-zA-Z0-9_-]/.test(e[r]);)r++;return r}function Ct(t,e,s,r,n){let o=1,i=s+1;for(;i<e.length&&o>0;)e[i]===r?o++:e[i]===n&&o--,o>0&&i++;return o===0?i:-1}function we(t,e,s){let r=s,n=1;for(;r<e.length&&n>0;){let o=e[r];if(o==="\\"&&r+1<e.length){r+=2;continue}if(o==="'"){let i=e.indexOf("'",r+1);if(i!==-1){r=i+1;continue}}if(o==='"'){for(r++;r<e.length&&e[r]!=='"';)e[r]==="\\"&&r+1<e.length?r+=2:r++;r<e.length&&r++;continue}o==="{"?n++:o==="}"&&n--,n>0&&r++}return r}function Fr(t,e,s){let r=s,n=!1;for(;r<e.length;){let o=e[r];if(o==="/"&&n||o==="}")break;if(o==="'"){let i=e.indexOf("'",r+1);if(i!==-1){r=i+1,n=!0;continue}}if(o==='"'){for(r++;r<e.length&&e[r]!=='"';)e[r]==="\\"&&r+1<e.length?r+=2:r++;r<e.length&&r++,n=!0;continue}o==="\\"?(r+=2,n=!0):(r++,n=!0)}return r}function Mr(t,e,s){let r=s,n="";for(;r<e.length;){let o=e[r];if(o==="*"||o==="?")n+=o,r++;else if(o==="["){let i=Ks(e,r);i===-1?(n+=o,r++):(n+=e.slice(r,i+1),r=i+1)}else break}return{pattern:n,endIndex:r}}function Ks(t,e){let s=e+1;for(s<t.length&&t[s]==="^"&&s++,s<t.length&&t[s]==="]"&&s++;s<t.length;){let r=t[s];if(r==="\\"&&s+1<t.length){s+=2;continue}if(r==="]")return s;if(r==='"'||r==="$"||r==="`")return-1;if(r==="'"){let n=t.indexOf("'",s+1);if(n!==-1){s=n+1;continue}}if(r==="["&&s+1<t.length&&t[s+1]===":"){let n=t.indexOf(":]",s+2);if(n!==-1){s=n+2;continue}}if(r==="["&&s+1<t.length&&(t[s+1]==="."||t[s+1]==="=")){let o=`${t[s+1]}]`,i=t.indexOf(o,s+2);if(i!==-1){s=i+2;continue}}s++}return-1}function Br(t,e,s){let r="",n=s;for(;n<e.length&&e[n]!=="'";){let o=e[n];if(o==="\\"&&n+1<e.length)switch(e[n+1]){case"n":r+=`
27
- `,n+=2;break;case"t":r+=" ",n+=2;break;case"r":r+="\r",n+=2;break;case"\\":r+="\\",n+=2;break;case"'":r+="'",n+=2;break;case'"':r+='"',n+=2;break;case"a":r+="\x07",n+=2;break;case"b":r+="\b",n+=2;break;case"e":case"E":r+="\x1B",n+=2;break;case"f":r+="\f",n+=2;break;case"v":r+="\v",n+=2;break;case"x":{let a=e.slice(n+2,n+4),l=parseInt(a,16);Number.isNaN(l)?(r+="\\x",n+=2):(r+=String.fromCharCode(l),n+=4);break}case"u":{let a=e.slice(n+2,n+6),l=parseInt(a,16);Number.isNaN(l)?(r+="\\u",n+=2):(r+=String.fromCharCode(l),n+=6);break}case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":{let a="",l=n+1;for(;l<e.length&&l<n+4&&/[0-7]/.test(e[l]);)a+=e[l],l++;let c=parseInt(a,8);r+=String.fromCharCode(c),n=l;break}default:r+=o,n++}else r+=o,n++}return n<e.length&&e[n]==="'"&&n++,{part:A.literal(r),endIndex:n}}function $t(t,e){let s=e.trim();return s===""?{type:"ArithmeticExpression",expression:{type:"ArithNumber",value:0}}:T(t,s)}function Tr(t){let e=[],s="",r=0;for(let n=0;n<t.length;n++){let o=t[n];o==="{"?(r++,s+=o):o==="}"?(r--,s+=o):o===","&&r===0?(e.push(s),s=""):s+=o}return e.push(s),e}function zr(t,e,s,r){let n=Ct(t,e,s,"{","}");if(n===-1)return null;let o=e.slice(s+1,n),i=o.match(/^(-?\d+)\.\.(-?\d+)(?:\.\.(-?\d+))?$/);if(i)return{part:{type:"BraceExpansion",items:[{type:"Range",start:Number.parseInt(i[1],10),end:Number.parseInt(i[2],10),step:i[3]?Number.parseInt(i[3],10):void 0,startStr:i[1],endStr:i[2]}]},endIndex:n+1};let a=o.match(/^([a-zA-Z])\.\.([a-zA-Z])(?:\.\.(-?\d+))?$/);return a?{part:{type:"BraceExpansion",items:[{type:"Range",start:a[1],end:a[2],step:a[3]?Number.parseInt(a[3],10):void 0}]},endIndex:n+1}:o.includes(",")&&r?{part:{type:"BraceExpansion",items:Tr(o).map(f=>({type:"Word",word:A.word(r(t,f,!1,!1,!1))}))},endIndex:n+1}:o.includes(",")?{part:{type:"BraceExpansion",items:Tr(o).map(f=>({type:"Word",word:A.word([A.literal(f)])}))},endIndex:n+1}:null}function Ur(t,e){let s="";for(let r of e.parts)switch(r.type){case"Literal":case"SingleQuoted":case"Escaped":s+=r.value;break;case"DoubleQuoted":s+='"';for(let n of r.parts)n.type==="Literal"||n.type==="Escaped"?s+=n.value:n.type==="ParameterExpansion"&&(s+=`\${${n.parameter}}`);s+='"';break;case"ParameterExpansion":s+=`\${${r.parameter}}`;break;case"Glob":s+=r.pattern;break;default:s+=r.type}return s}function Vr(t,e){return{[u.LESS]:"<",[u.GREAT]:">",[u.DGREAT]:">>",[u.LESSAND]:"<&",[u.GREATAND]:">&",[u.LESSGREAT]:"<>",[u.CLOBBER]:">|",[u.TLESS]:"<<<",[u.AND_GREAT]:"&>",[u.AND_DGREAT]:"&>>",[u.DLESS]:"<",[u.DLESSDASH]:"<"}[e]||">"}function Qe(t){let e=t.current(),s=e.type;if(s===u.NUMBER){let r=t.peek(1);return e.end!==r.start?!1:Lr.has(r.type)}return _r.has(s)}function Ke(t){let e=null;t.check(u.NUMBER)&&(e=Number.parseInt(t.advance().value,10));let s=t.advance(),r=Vr(t,s.type);if(s.type===u.DLESS||s.type===u.DLESSDASH)return Xs(t,r,e,s.type===u.DLESSDASH);t.isWord()||t.error("Expected redirection target");let n=t.parseWord();return A.redirection(r,n,e)}function Xs(t,e,s,r){t.isWord()||t.error("Expected here-document delimiter");let n=t.advance(),o=n.value,i=n.quoted||!1;(o.startsWith("'")&&o.endsWith("'")||o.startsWith('"')&&o.endsWith('"'))&&(o=o.slice(1,-1));let a=A.redirection(r?"<<-":"<<",A.hereDoc(o,A.word([]),r,i),s);return t.addPendingHeredoc(a,o,r,i),a}function Hr(t){let e=[],s=null,r=[],n=[];for(;t.check(u.ASSIGNMENT_WORD);)t.checkIterationLimit(),e.push(Ys(t));for(;Qe(t);)t.checkIterationLimit(),n.push(Ke(t));for(t.isWord()&&(s=t.parseWord());(!t.isStatementEnd()||t.check(u.RBRACE))&&!t.check(u.PIPE,u.PIPE_AMP);)if(t.checkIterationLimit(),Qe(t))n.push(Ke(t));else if(t.check(u.RBRACE)){let o=t.advance();r.push(t.parseWordFromString(o.value,!1,!1))}else if(t.isWord())r.push(t.parseWord());else if(t.check(u.ASSIGNMENT_WORD)){let o=t.advance(),i=o.value,a=i.endsWith("="),l=i.endsWith("=(");if((a||l)&&(l||t.check(u.LPAREN))){let c=l?i.slice(0,-2):i.slice(0,-1);l||t.expect(u.LPAREN);let f=Pt(t);t.expect(u.RPAREN);let h=f.map(m=>Ur(t,m)),d=`${c}=(${h.join(" ")})`;r.push(t.parseWordFromString(d,!1,!1))}else r.push(t.parseWordFromString(i,o.quoted,o.singleQuoted))}else if(t.check(u.LPAREN))t.error("syntax error near unexpected token `('");else break;return A.simpleCommand(s,r,e,n)}function Ys(t){let e=t.expect(u.ASSIGNMENT_WORD),s=e.value,r=s.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);r||t.error(`Invalid assignment: ${s}`);let n=r[0],o,i=n.length;if(s[i]==="["){let h=0,d=i+1;for(;i<s.length;i++)if(s[i]==="[")h++;else if(s[i]==="]"&&(h--,h===0))break;h!==0&&t.error(`Invalid assignment: ${s}`),o=s.slice(d,i),i++}let a=s[i]==="+";a&&i++,s[i]!=="="&&t.error(`Invalid assignment: ${s}`),i++;let l=s.slice(i);if(l==="("){let h=Pt(t);t.expect(u.RPAREN);let d=o!==void 0?`${n}[${o}]`:n;return A.assignment(d,null,a,h)}if(l===""&&t.check(u.LPAREN)){let h=t.current();if(e.end===h.start){t.advance();let d=Pt(t);t.expect(u.RPAREN);let m=o!==void 0?`${n}[${o}]`:n;return A.assignment(m,null,a,d)}}let c=l?t.parseWordFromString(l,e.quoted,e.singleQuoted,!0):null,f=o!==void 0?`${n}[${o}]`:n;return A.assignment(f,c,a,null)}function Pt(t){let e=[];for(t.skipNewlines();!t.check(u.RPAREN,u.EOF);)t.checkIterationLimit(),t.isWord()?e.push(t.parseWord()):t.advance(),t.skipNewlines();return e}function vt(t){t.expect(u.IF);let e=[],s=t.parseCompoundList();t.expect(u.THEN);let r=t.parseCompoundList();if(r.length===0){let i=t.check(u.FI)?"fi":t.check(u.ELSE)?"else":t.check(u.ELIF)?"elif":"fi";t.error(`syntax error near unexpected token \`${i}'`)}for(e.push({condition:s,body:r});t.check(u.ELIF);){t.advance();let i=t.parseCompoundList();t.expect(u.THEN);let a=t.parseCompoundList();if(a.length===0){let l=t.check(u.FI)?"fi":t.check(u.ELSE)?"else":t.check(u.ELIF)?"elif":"fi";t.error(`syntax error near unexpected token \`${l}'`)}e.push({condition:i,body:a})}let n=null;t.check(u.ELSE)&&(t.advance(),n=t.parseCompoundList(),n.length===0&&t.error("syntax error near unexpected token `fi'")),t.expect(u.FI);let o=t.parseOptionalRedirections();return A.ifNode(e,n,o)}function It(t){if(t.expect(u.FOR),t.check(u.DPAREN_START))return en(t);t.isWord()||t.error("Expected variable name in for loop");let s=t.advance().value,r=null;if(t.skipNewlines(),t.check(u.IN))for(t.advance(),r=[];!t.check(u.SEMICOLON,u.NEWLINE,u.DO,u.EOF)&&t.isWord();)r.push(t.parseWord());t.check(u.SEMICOLON)&&t.advance(),t.skipNewlines(),t.expect(u.DO);let n=t.parseCompoundList();t.expect(u.DONE);let o=t.parseOptionalRedirections();return A.forNode(s,r,n,o)}function en(t){t.expect(u.DPAREN_START);let e=null,s=null,r=null,n=["","",""],o=0,i=0;for(;!t.check(u.DPAREN_END,u.EOF);){let c=t.advance();if(c.type===u.SEMICOLON&&i===0){if(o++,o>2)break}else c.value==="("&&i++,c.value===")"&&i--,n[o]+=c.value}t.expect(u.DPAREN_END),n[0].trim()&&(e=T(t,n[0].trim())),n[1].trim()&&(s=T(t,n[1].trim())),n[2].trim()&&(r=T(t,n[2].trim())),t.skipNewlines(),t.check(u.SEMICOLON)&&t.advance(),t.skipNewlines(),t.expect(u.DO);let a=t.parseCompoundList();t.expect(u.DONE);let l=t.parseOptionalRedirections();return{type:"CStyleFor",init:e,condition:s,update:r,body:a,redirections:l}}function Rt(t){t.expect(u.WHILE);let e=t.parseCompoundList();t.expect(u.DO);let s=t.parseCompoundList();s.length===0&&t.error("syntax error near unexpected token `done'"),t.expect(u.DONE);let r=t.parseOptionalRedirections();return A.whileNode(e,s,r)}function kt(t){t.expect(u.UNTIL);let e=t.parseCompoundList();t.expect(u.DO);let s=t.parseCompoundList();s.length===0&&t.error("syntax error near unexpected token `done'"),t.expect(u.DONE);let r=t.parseOptionalRedirections();return A.untilNode(e,s,r)}function Dt(t){t.expect(u.CASE),t.isWord()||t.error("Expected word after 'case'");let e=t.parseWord();t.skipNewlines(),t.expect(u.IN),t.skipNewlines();let s=[];for(;!t.check(u.ESAC,u.EOF);){t.checkIterationLimit();let n=t.getPos(),o=tn(t);if(o&&s.push(o),t.skipNewlines(),t.getPos()===n&&!o)break}t.expect(u.ESAC);let r=t.parseOptionalRedirections();return A.caseNode(e,s,r)}function tn(t){t.check(u.LPAREN)&&t.advance();let e=[];for(;t.isWord()&&(e.push(t.parseWord()),t.check(u.PIPE));)t.advance();if(e.length===0)return null;t.expect(u.RPAREN),t.skipNewlines();let s=[];for(;!t.check(u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND,u.ESAC,u.EOF);){t.checkIterationLimit(),t.isWord()&&t.peek(1).type===u.RPAREN&&t.error("syntax error near unexpected token `)'"),t.check(u.LPAREN)&&t.peek(1).type===u.WORD&&t.error(`syntax error near unexpected token \`${t.peek(1).value}'`);let n=t.getPos(),o=t.parseStatement();if(o&&s.push(o),t.skipSeparators(!1),t.getPos()===n&&!o)break}let r=";;";return t.check(u.DSEMI)?(t.advance(),r=";;"):t.check(u.SEMI_AND)?(t.advance(),r=";&"):t.check(u.SEMI_SEMI_AND)&&(t.advance(),r=";;&"),A.caseItem(e,s,r)}function Ot(t){t.peek(1).type,u.LPAREN,t.expect(u.LPAREN),t.check(u.LPAREN)&&t.advance();let e=t.parseCompoundList();t.expect(u.RPAREN);let s=t.parseOptionalRedirections();return A.subshell(e,s)}function _t(t){t.expect(u.LBRACE);let e=t.parseCompoundList();t.expect(u.RBRACE);let s=t.parseOptionalRedirections();return A.group(e,s)}var sn=["-a","-b","-c","-d","-e","-f","-g","-h","-k","-p","-r","-s","-t","-u","-w","-x","-G","-L","-N","-O","-S","-z","-n","-o","-v","-R"],nn=["==","!=","=~","<",">","-eq","-ne","-lt","-le","-gt","-ge","-nt","-ot","-ef"];function Tt(t){return t.skipNewlines(),on(t)}function on(t){let e=jr(t);for(t.skipNewlines();t.check(u.OR_OR);){t.advance(),t.skipNewlines();let s=jr(t);e={type:"CondOr",left:e,right:s},t.skipNewlines()}return e}function jr(t){let e=Lt(t);for(t.skipNewlines();t.check(u.AND_AND);){t.advance(),t.skipNewlines();let s=Lt(t);e={type:"CondAnd",left:e,right:s},t.skipNewlines()}return e}function Lt(t){return t.skipNewlines(),t.check(u.BANG)?(t.advance(),t.skipNewlines(),{type:"CondNot",operand:Lt(t)}):an(t)}function an(t){if(t.check(u.LPAREN)){t.advance();let e=Tt(t);return t.expect(u.RPAREN),{type:"CondGroup",expression:e}}if(t.isWord()){let e=t.current(),s=e.value;if(sn.includes(s)&&!e.quoted&&(t.advance(),t.check(u.DBRACK_END)&&t.error(`Expected operand after ${s}`),t.isWord())){let n=t.parseWord();return{type:"CondUnary",operator:s,operand:n}}let r=t.parseWord();if(t.isWord()&&nn.includes(t.current().value)){let n=t.advance().value,o=t.parseWord();return{type:"CondBinary",operator:n,left:r,right:o}}if(t.check(u.LESS)){t.advance();let n=t.parseWord();return{type:"CondBinary",operator:"<",left:r,right:n}}if(t.check(u.GREAT)){t.advance();let n=t.parseWord();return{type:"CondBinary",operator:">",left:r,right:n}}if(t.isWord()&&t.current().value==="="){t.advance();let n=t.parseWord();return{type:"CondBinary",operator:"==",left:r,right:n}}return{type:"CondWord",word:r}}t.error("Expected conditional expression")}function ln(t,e,s){let r=s+1,n=e[r];if("@*#?$!-0123456789".includes(n))return{part:A.parameterExpansion(n),endIndex:r+1};let o="";for(;r<e.length&&/[a-zA-Z0-9_]/.test(e[r]);)o+=e[r],r++;return{part:A.parameterExpansion(o),endIndex:r}}function fn(t,e,s,r=!1){let n=s+2,o=!1;e[n]==="!"&&(o=!0,n++);let i=!1;e[n]==="#"&&!/[}:#%/^,]/.test(e[n+1]||"}")&&(i=!0,n++);let a="",l=e[n];if(/[@*#?$!-]/.test(l)&&!/[a-zA-Z0-9_]/.test(e[n+1]||""))a=l,n++;else for(;n<e.length&&/[a-zA-Z0-9_]/.test(e[n]);)a+=e[n],n++;if(e[n]==="["){let f=Ct(t,e,n,"[","]");a+=e.slice(n,f+1),n=f+1}a===""&&!o&&!i&&e[n]!=="}"&&t.error(`\${${e[n]}}: bad substitution`);let c=null;if(o){let f=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([@*])\]$/);if(f)c={type:"ArrayKeys",array:f[1],star:f[2]==="*"},a="";else if(e[n]==="*"||e[n]==="@"){let h=e[n];n++,c={type:"VarNamePrefix",prefix:a,star:h==="*"},a=""}else c={type:"Indirection"}}else if(i)if(e[n]===":")for(c={type:"LengthSliceError"};n<e.length&&e[n]!=="}";)n++;else e[n]!=="}"&&/[-+=?]/.test(e[n])?t.error(`\${#${a}${e.slice(n,e.indexOf("}",n))}}: bad substitution`):c={type:"Length"};if(!c&&n<e.length&&e[n]!=="}"){let f=un(t,e,n,a,r);c=f.operation,n=f.endIndex}if(n<e.length&&e[n]!=="}"){let f=e[n];if(!/[:\-+=?#%/^,@[]/.test(f)){let h=n;for(;h<e.length&&e[h]!=="}";)h++;let d=e.slice(s,h+1);t.error(`\${${d.slice(2,-1)}}: bad substitution`)}}for(;n<e.length&&e[n]!=="}";)n++;return{part:A.parameterExpansion(a,c),endIndex:n+1}}function un(t,e,s,r,n=!1){let o=s,i=e[o],a=e[o+1]||"";if(i===":"){let l=a;if("-=?+".includes(l)){o+=2;let E=we(t,e,o),w=e.slice(o,E),b=ue(t,w,!1,!1,!0,!1,n),I=A.word(b.length>0?b:[A.literal("")]);if(l==="-")return{operation:{type:"DefaultValue",word:I,checkEmpty:!0},endIndex:E};if(l==="=")return{operation:{type:"AssignDefault",word:I,checkEmpty:!0},endIndex:E};if(l==="?")return{operation:{type:"ErrorIfUnset",word:I,checkEmpty:!0},endIndex:E};if(l==="+")return{operation:{type:"UseAlternative",word:I,checkEmpty:!0},endIndex:E}}o++;let c=we(t,e,o),f=e.slice(o,c),h=-1,d=0,m=0;for(let p=0;p<f.length;p++){let E=f[p];if(E==="("||E==="[")d++;else if(E===")"||E==="]")d--;else if(E==="?"&&d===0)m++;else if(E===":"&&d===0)if(m>0)m--;else{h=p;break}}let y=h>=0?f.slice(0,h):f,g=h>=0?f.slice(h+1):null;return{operation:{type:"Substring",offset:$t(t,y),length:g?$t(t,g):null},endIndex:c}}if("-=?+".includes(i)){o++;let l=we(t,e,o),c=e.slice(o,l),f=ue(t,c,!1,!1,!0,!1,n),h=A.word(f.length>0?f:[A.literal("")]);if(i==="-")return{operation:{type:"DefaultValue",word:h,checkEmpty:!1},endIndex:l};if(i==="=")return{operation:{type:"AssignDefault",word:h,checkEmpty:!1},endIndex:l};if(i==="?")return{operation:{type:"ErrorIfUnset",word:c?h:null,checkEmpty:!1},endIndex:l};if(i==="+")return{operation:{type:"UseAlternative",word:h,checkEmpty:!1},endIndex:l}}if(i==="#"||i==="%"){let l=a===i,c=i==="#"?"prefix":"suffix";o+=l?2:1;let f=we(t,e,o),h=e.slice(o,f),d=ue(t,h,!1,!1,!1);return{operation:{type:"PatternRemoval",pattern:A.word(d.length>0?d:[A.literal("")]),side:c,greedy:l},endIndex:f}}if(i==="/"){let l=a==="/";o+=l?2:1;let c=null;e[o]==="#"?(c="start",o++):e[o]==="%"&&(c="end",o++);let f=Fr(t,e,o),h=e.slice(o,f),d=ue(t,h,!1,!1,!1),m=A.word(d.length>0?d:[A.literal("")]),y=null,g=f;if(e[f]==="/"){let p=f+1,E=we(t,e,p),w=e.slice(p,E),b=ue(t,w,!1,!1,!1);y=A.word(b.length>0?b:[A.literal("")]),g=E}return{operation:{type:"PatternReplacement",pattern:m,replacement:y,all:l,anchor:c},endIndex:g}}if(i==="^"||i===","){let l=a===i,c=i==="^"?"upper":"lower";o+=l?2:1;let f=we(t,e,o),h=e.slice(o,f),d=h?A.word([A.literal(h)]):null;return{operation:{type:"CaseModification",direction:c,all:l,pattern:d},endIndex:f}}return i==="@"&&/[QPaAEK]/.test(a)?{operation:{type:"Transform",operator:a},endIndex:o+2}:{operation:null,endIndex:o}}function Wt(t,e,s,r=!1){let n=s+1;if(n>=e.length)return{part:A.literal("$"),endIndex:n};let o=e[n];if(o==="("&&e[n+1]==="(")return t.parseArithmeticExpansion(e,s);if(o==="["){let i=1,a=n+1;for(;a<e.length&&i>0;)e[a]==="["?i++:e[a]==="]"&&i--,i>0&&a++;if(i===0){let l=e.slice(n+1,a),c=T(t,l);return{part:A.arithmeticExpansion(c),endIndex:a+1}}}return o==="("?t.parseCommandSubstitution(e,s):o==="{"?fn(t,e,s,r):/[a-zA-Z_0-9@*#?$!-]/.test(o)?ln(t,e,s):{part:A.literal("$"),endIndex:n}}function hn(t,e){let s=[],r=0,n="",o=()=>{n&&(s.push(A.literal(n)),n="")};for(;r<e.length;){let i=e[r];if(i==="\\"&&r+1<e.length){let a=e[r+1];if(a==="$"||a==="`"){n+=a,r+=2;continue}n+=i,r++;continue}if(i==="$"){o();let{part:a,endIndex:l}=Wt(t,e,r,!0);a&&s.push(a),r=l;continue}if(i==="`"){o();let{part:a,endIndex:l}=t.parseBacktickSubstitution(e,r,!0);s.push(a),r=l;continue}n+=i,r++}return o(),s}function dn(t,e,s){let r=[],n=s,o="",i=()=>{o&&(r.push(A.literal(o)),o="")};for(;n<e.length&&e[n]!=='"';){let a=e[n];if(a==="\\"&&n+1<e.length){let l=e[n+1];if('"\\$`\n'.includes(l)){o+=l,n+=2;continue}o+=a,n++;continue}if(a==="$"){i();let{part:l,endIndex:c}=Wt(t,e,n,!0);l&&r.push(l),n=c;continue}if(a==="`"){i();let{part:l,endIndex:c}=t.parseBacktickSubstitution(e,n,!0);r.push(l),n=c;continue}o+=a,n++}return i(),{part:A.doubleQuoted(r),endIndex:n}}function ue(t,e,s=!1,r=!1,n=!1,o=!1,i=!1){if(r)return[A.singleQuoted(e)];if(s){let h=hn(t,e);return[A.doubleQuoted(h)]}let a=[],l=0,c="",f=()=>{c&&(a.push(A.literal(c)),c="")};for(;l<e.length;){let h=e[l];if(h==="\\"&&l+1<e.length){let d=e[l+1];(o?d==="$"||d==="`"||d==="\\"||d===`
28
- `:d==="$"||d==="`"||d==="\\"||d==='"'||d===`
29
- `)?c+=d:c+=`\\${d}`,l+=2;continue}if(h==="'"&&!i){f();let d=e.indexOf("'",l+1);if(d===-1){c+=e.slice(l);break}a.push(A.singleQuoted(e.slice(l+1,d))),l=d+1;continue}if(h==='"'){f();let{part:d,endIndex:m}=dn(t,e,l+1);a.push(d),l=m+1;continue}if(h==="$"&&e[l+1]==="'"){f();let{part:d,endIndex:m}=Br(t,e,l+2);a.push(d),l=m;continue}if(h==="$"){f();let{part:d,endIndex:m}=Wt(t,e,l);d&&a.push(d),l=m;continue}if(h==="`"){f();let{part:d,endIndex:m}=t.parseBacktickSubstitution(e,l);a.push(d),l=m;continue}if(h==="~"){let d=l>0?e[l-1]:"";if(l===0||d==="="||n&&d===":"){let y=Wr(t,e,l),g=e[y];if(g===void 0||g==="/"||g===":"){f();let p=e.slice(l+1,y)||null;a.push({type:"TildeExpansion",user:p}),l=y;continue}}}if(h==="*"||h==="?"||h==="["){f();let{pattern:d,endIndex:m}=Mr(t,e,l);a.push({type:"Glob",pattern:d}),l=m;continue}if(h==="{"&&!n){let d=zr(t,e,l,ue);if(d){f(),a.push(d.part),l=d.endIndex;continue}}c+=h,l++}return f(),a}var M=class t{tokens=[];pos=0;pendingHeredocs=[];parseIterations=0;checkIterationLimit(){if(this.parseIterations++,this.parseIterations>Or)throw new ie("Maximum parse iterations exceeded (possible infinite loop)",this.current().line,this.current().column)}parse(e){if(e.length>bt)throw new ie(`Input too large: ${e.length} bytes exceeds limit of ${bt}`,1,1);let s=new qe(e);if(this.tokens=s.tokenize(),this.tokens.length>Nt)throw new ie(`Too many tokens: ${this.tokens.length} exceeds limit of ${Nt}`,1,1);return this.pos=0,this.pendingHeredocs=[],this.parseIterations=0,this.parseScript()}parseTokens(e){return this.tokens=e,this.pos=0,this.pendingHeredocs=[],this.parseScript()}current(){return this.tokens[this.pos]||this.tokens[this.tokens.length-1]}peek(e=0){return this.tokens[this.pos+e]||this.tokens[this.tokens.length-1]}advance(){let e=this.current();return this.pos<this.tokens.length-1&&this.pos++,e}getPos(){return this.pos}check(e,s,r,n,...o){let i=this.tokens[this.pos]?.type;return i===e||s!==void 0&&i===s||r!==void 0&&i===r||n!==void 0&&i===n?!0:o.length>0?o.includes(i):!1}expect(e,s){if(this.check(e))return this.advance();let r=this.current();throw new ie(s||`Expected ${e}, got ${r.type}`,r.line,r.column,r)}error(e){let s=this.current();throw new ie(e,s.line,s.column,s)}skipNewlines(){for(;this.check(u.NEWLINE,u.COMMENT);)this.check(u.NEWLINE)?(this.advance(),this.processHeredocs()):this.advance()}skipSeparators(e=!0){for(;;){if(this.check(u.NEWLINE)){this.advance(),this.processHeredocs();continue}if(this.check(u.SEMICOLON,u.COMMENT)){this.advance();continue}if(e&&this.check(u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)){this.advance();continue}break}}addPendingHeredoc(e,s,r,n){this.pendingHeredocs.push({redirect:e,delimiter:s,stripTabs:r,quoted:n})}processHeredocs(){for(let e of this.pendingHeredocs)if(this.check(u.HEREDOC_CONTENT)){let s=this.advance(),r;e.quoted?r=A.word([A.literal(s.value)]):r=this.parseWordFromString(s.value,!1,!1,!1,!0),e.redirect.target=A.hereDoc(e.delimiter,r,e.stripTabs,e.quoted)}this.pendingHeredocs=[]}isStatementEnd(){return this.check(u.EOF,u.NEWLINE,u.SEMICOLON,u.AMP,u.AND_AND,u.OR_OR,u.RPAREN,u.RBRACE,u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)}isCommandStart(){let e=this.current().type;return e===u.WORD||e===u.NAME||e===u.NUMBER||e===u.ASSIGNMENT_WORD||e===u.IF||e===u.FOR||e===u.WHILE||e===u.UNTIL||e===u.CASE||e===u.LPAREN||e===u.LBRACE||e===u.DPAREN_START||e===u.DBRACK_START||e===u.FUNCTION||e===u.BANG||e===u.IN}parseScript(){let e=[],r=0;for(this.skipNewlines();!this.check(u.EOF);){r++,r>1e4&&this.error("Parser stuck: too many iterations (>10000)"),this.checkUnexpectedToken();let n=this.pos,o=this.parseStatement();o&&e.push(o),this.skipSeparators(!1),this.check(u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)&&this.error(`syntax error near unexpected token \`${this.current().value}'`),this.pos===n&&!this.check(u.EOF)&&this.advance()}return A.script(e)}checkUnexpectedToken(){let e=this.current().type,s=this.current().value;(e===u.DO||e===u.DONE||e===u.THEN||e===u.ELSE||e===u.ELIF||e===u.FI||e===u.ESAC)&&this.error(`syntax error near unexpected token \`${s}'`),(e===u.RBRACE||e===u.RPAREN)&&this.error(`syntax error near unexpected token \`${s}'`),(e===u.DSEMI||e===u.SEMI_AND||e===u.SEMI_SEMI_AND)&&this.error(`syntax error near unexpected token \`${s}'`),e===u.SEMICOLON&&this.error(`syntax error near unexpected token \`${s}'`)}parseStatement(){if(this.skipNewlines(),!this.isCommandStart())return null;let e=[],s=[],r=!1,n=this.parsePipeline();for(e.push(n);this.check(u.AND_AND,u.OR_OR);){let o=this.advance();s.push(o.type===u.AND_AND?"&&":"||"),this.skipNewlines();let i=this.parsePipeline();e.push(i)}return this.check(u.AMP)&&(this.advance(),r=!0),A.statement(e,s,r)}parsePipeline(){let e=0;for(;this.check(u.BANG);)this.advance(),e++;let s=e%2===1,r=[],n=this.parseCommand();for(r.push(n);this.check(u.PIPE,u.PIPE_AMP);){let o=this.advance();this.skipNewlines();let i=this.parseCommand();o.type===u.PIPE_AMP&&i.type==="SimpleCommand"&&i.redirections.unshift(A.redirection(">&",A.word([A.literal("1")]),2)),r.push(i)}return A.pipeline(r,s)}parseCommand(){return this.check(u.IF)?vt(this):this.check(u.FOR)?It(this):this.check(u.WHILE)?Rt(this):this.check(u.UNTIL)?kt(this):this.check(u.CASE)?Dt(this):this.check(u.LPAREN)?Ot(this):this.check(u.LBRACE)?_t(this):this.check(u.DPAREN_START)?this.parseArithmeticCommand():this.check(u.DBRACK_START)?this.parseConditionalCommand():this.check(u.FUNCTION)?this.parseFunctionDef():this.check(u.NAME,u.WORD)&&this.peek(1).type===u.LPAREN&&this.peek(2).type===u.RPAREN?this.parseFunctionDef():Hr(this)}isWord(){let e=this.current().type;return e===u.WORD||e===u.NAME||e===u.NUMBER||e===u.IF||e===u.FOR||e===u.WHILE||e===u.UNTIL||e===u.CASE||e===u.FUNCTION||e===u.ELSE||e===u.ELIF||e===u.FI||e===u.THEN||e===u.DO||e===u.DONE||e===u.ESAC||e===u.IN||e===u.BANG}parseWord(){let e=this.advance();return this.parseWordFromString(e.value,e.quoted,e.singleQuoted)}parseWordFromString(e,s=!1,r=!1,n=!1,o=!1){let i=ue(this,e,s,r,n,o);return A.word(i)}parseCommandSubstitution(e,s){let r=s+2,n=1,o=r,i=!1,a=!1,l=0,c=!1,f="";for(;o<e.length&&n>0;){let y=e[o];i?y==="'"&&(i=!1):a?y==="\\"&&o+1<e.length?o++:y==='"'&&(a=!1):y==="'"?(i=!0,f=""):y==='"'?(a=!0,f=""):y==="\\"&&o+1<e.length?(o++,f=""):/[a-zA-Z_]/.test(y)?f+=y:(f==="case"?(l++,c=!1):f==="in"&&l>0?c=!0:f==="esac"&&l>0&&(l--,c=!1),f="",y==="("?o>0&&e[o-1]==="$"?n++:c||n++:y===")"?c?c=!1:n--:y===";"&&l>0&&o+1<e.length&&e[o+1]===";"&&(c=!0)),n>0&&o++}n>0&&this.error("unexpected EOF while looking for matching `)'");let h=e.slice(r,o),m=new t().parse(h);return{part:A.commandSubstitution(m,!1),endIndex:o+1}}parseBacktickSubstitution(e,s,r=!1){let o=s+1,i="";for(;o<e.length&&e[o]!=="`";)if(e[o]==="\\"){let c=e[o+1];c==="$"||c==="`"||c==="\\"||c===`
30
+ `,this.pos++,this.line++,this.column=1)}this.tokens.push({type:u.HEREDOC_CONTENT,value:o,start:n,end:this.pos,line:r,column:s})}}addPendingHeredoc(e,n,r){this.pendingHeredocs.push({delimiter:e,stripTabs:n,quoted:r})}registerHeredocFromLookahead(e){let n=this.pos,r=this.column;for(;this.pos<this.input.length&&(this.input[this.pos]===" "||this.input[this.pos]===" ");)this.pos++,this.column++;let s="",o=!1,i=this.input[this.pos];if(i==="'"||i==='"'){o=!0;let a=i;for(this.pos++,this.column++;this.pos<this.input.length&&this.input[this.pos]!==a;)s+=this.input[this.pos],this.pos++,this.column++}else for(;this.pos<this.input.length&&!/[\s;<>&|()]/.test(this.input[this.pos]);)s+=this.input[this.pos],this.pos++,this.column++;this.pos=n,this.column=r,s&&this.pendingHeredocs.push({delimiter:s,stripTabs:e,quoted:o})}isWordCharFollowing(e){if(e>=this.input.length)return!1;let n=this.input[e];return!(n===" "||n===" "||n===`
31
+ `||n===";"||n==="&"||n==="|"||n==="("||n===")"||n==="<"||n===">")}readWordWithBraceExpansion(e,n,r){let s=this.input,o=s.length,i=e,a=r;for(;i<o;){let c=s[i];if(c===" "||c===" "||c===`
32
+ `||c===";"||c==="&"||c==="|"||c==="("||c===")"||c==="<"||c===">")break;if(c==="{"){if(this.scanBraceExpansion(i)!==null){let d=1;for(i++,a++;i<o&&d>0;)s[i]==="{"?d++:s[i]==="}"&&d--,i++,a++;continue}i++,a++;continue}if(c==="}"){i++,a++;continue}if(c==="$"&&i+1<o&&s[i+1]==="("){i++,a++,i++,a++;let f=1;for(;f>0&&i<o;)s[i]==="("?f++:s[i]===")"&&f--,i++,a++;continue}if(c==="$"&&i+1<o&&s[i+1]==="{"){i++,a++,i++,a++;let f=1;for(;f>0&&i<o;)s[i]==="{"?f++:s[i]==="}"&&f--,i++,a++;continue}if(c==="`"){for(i++,a++;i<o&&s[i]!=="`";)s[i]==="\\"&&i+1<o?(i+=2,a+=2):(i++,a++);i<o&&(i++,a++);continue}i++,a++}let l=s.slice(e,i);return this.pos=i,this.column=a,{type:u.WORD,value:l,start:e,end:i,line:n,column:r,quoted:!1,singleQuoted:!1}}scanBraceExpansion(e){let n=this.input,r=n.length,s=e+1,o=1,i=!1,a=!1;for(;s<r&&o>0;){let l=n[s];if(l==="{")o++,s++;else if(l==="}")o--,s++;else if(l===","&&o===1)i=!0,s++;else if(l==="."&&s+1<r&&n[s+1]===".")a=!0,s+=2;else{if(l===" "||l===" "||l===`
33
+ `||l===";"||l==="&"||l==="|")return null;s++}}return o===0&&(i||a)?n.slice(e,s):null}scanLiteralBraceWord(e){let n=this.input,r=n.length,s=e+1,o=1;for(;s<r&&o>0;){let i=n[s];if(i==="{")o++,s++;else if(i==="}"){if(o--,o===0)return n.slice(e,s+1);s++}else{if(i===" "||i===" "||i===`
34
+ `||i===";"||i==="&"||i==="|")return null;s++}}return null}};var Nt=1e6,Ct=1e5,Wr=1e6,Mr=new Set([u.LESS,u.GREAT,u.DLESS,u.DGREAT,u.LESSAND,u.GREATAND,u.LESSGREAT,u.DLESSDASH,u.CLOBBER,u.TLESS,u.AND_GREAT,u.AND_DGREAT]),Br=new Set([u.LESS,u.GREAT,u.DLESS,u.DGREAT,u.LESSAND,u.GREATAND,u.LESSGREAT,u.DLESSDASH,u.CLOBBER,u.TLESS]),se=class extends Error{line;column;token;constructor(e,n,r,s=void 0){super(`Parse error at ${n}:${r}: ${e}`),this.line=n,this.column=r,this.token=s,this.name="ParseException"}};function Ur(t,e,n){let r=n+1;for(;r<e.length&&/[a-zA-Z0-9_-]/.test(e[r]);)r++;return r}function $t(t,e,n,r,s){let o=1,i=n+1;for(;i<e.length&&o>0;)e[i]===r?o++:e[i]===s&&o--,o>0&&i++;return o===0?i:-1}function we(t,e,n){let r=n,s=1;for(;r<e.length&&s>0;){let o=e[r];if(o==="\\"&&r+1<e.length){r+=2;continue}if(o==="'"){let i=e.indexOf("'",r+1);if(i!==-1){r=i+1;continue}}if(o==='"'){for(r++;r<e.length&&e[r]!=='"';)e[r]==="\\"&&r+1<e.length?r+=2:r++;r<e.length&&r++;continue}o==="{"?s++:o==="}"&&s--,s>0&&r++}return r}function Vr(t,e,n){let r=n,s=!1;for(;r<e.length;){let o=e[r];if(o==="/"&&s||o==="}")break;if(o==="'"){let i=e.indexOf("'",r+1);if(i!==-1){r=i+1,s=!0;continue}}if(o==='"'){for(r++;r<e.length&&e[r]!=='"';)e[r]==="\\"&&r+1<e.length?r+=2:r++;r<e.length&&r++,s=!0;continue}o==="\\"?(r+=2,s=!0):(r++,s=!0)}return r}function Gr(t,e,n){let r=n,s="";for(;r<e.length;){let o=e[r];if(o==="*"||o==="?")s+=o,r++;else if(o==="["){let i=os(e,r);i===-1?(s+=o,r++):(s+=e.slice(r,i+1),r=i+1)}else break}return{pattern:s,endIndex:r}}function os(t,e){let n=e+1;for(n<t.length&&t[n]==="^"&&n++,n<t.length&&t[n]==="]"&&n++;n<t.length;){let r=t[n];if(r==="\\"&&n+1<t.length){n+=2;continue}if(r==="]")return n;if(r==='"'||r==="$"||r==="`")return-1;if(r==="'"){let s=t.indexOf("'",n+1);if(s!==-1){n=s+1;continue}}if(r==="["&&n+1<t.length&&t[n+1]===":"){let s=t.indexOf(":]",n+2);if(s!==-1){n=s+2;continue}}if(r==="["&&n+1<t.length&&(t[n+1]==="."||t[n+1]==="=")){let o=`${t[n+1]}]`,i=t.indexOf(o,n+2);if(i!==-1){n=i+2;continue}}n++}return-1}function Hr(t,e,n){let r="",s=n;for(;s<e.length&&e[s]!=="'";){let o=e[s];if(o==="\\"&&s+1<e.length)switch(e[s+1]){case"n":r+=`
35
+ `,s+=2;break;case"t":r+=" ",s+=2;break;case"r":r+="\r",s+=2;break;case"\\":r+="\\",s+=2;break;case"'":r+="'",s+=2;break;case'"':r+='"',s+=2;break;case"a":r+="\x07",s+=2;break;case"b":r+="\b",s+=2;break;case"e":case"E":r+="\x1B",s+=2;break;case"f":r+="\f",s+=2;break;case"v":r+="\v",s+=2;break;case"x":{let a=e.slice(s+2,s+4),l=parseInt(a,16);Number.isNaN(l)?(r+="\\x",s+=2):(r+=String.fromCharCode(l),s+=4);break}case"u":{let a=e.slice(s+2,s+6),l=parseInt(a,16);Number.isNaN(l)?(r+="\\u",s+=2):(r+=String.fromCharCode(l),s+=6);break}case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":{let a="",l=s+1;for(;l<e.length&&l<s+4&&/[0-7]/.test(e[l]);)a+=e[l],l++;let c=parseInt(a,8);r+=String.fromCharCode(c),s=l;break}default:r+=o,s++}else r+=o,s++}return s<e.length&&e[s]==="'"&&s++,{part:A.literal(r),endIndex:s}}function Pt(t,e){let n=e.trim();return n===""?{type:"ArithmeticExpression",expression:{type:"ArithNumber",value:0}}:T(t,n)}function zr(t){let e=[],n="",r=0;for(let s=0;s<t.length;s++){let o=t[s];o==="{"?(r++,n+=o):o==="}"?(r--,n+=o):o===","&&r===0?(e.push(n),n=""):n+=o}return e.push(n),e}function jr(t,e,n,r){let s=$t(t,e,n,"{","}");if(s===-1)return null;let o=e.slice(n+1,s),i=o.match(/^(-?\d+)\.\.(-?\d+)(?:\.\.(-?\d+))?$/);if(i)return{part:{type:"BraceExpansion",items:[{type:"Range",start:Number.parseInt(i[1],10),end:Number.parseInt(i[2],10),step:i[3]?Number.parseInt(i[3],10):void 0,startStr:i[1],endStr:i[2]}]},endIndex:s+1};let a=o.match(/^([a-zA-Z])\.\.([a-zA-Z])(?:\.\.(-?\d+))?$/);return a?{part:{type:"BraceExpansion",items:[{type:"Range",start:a[1],end:a[2],step:a[3]?Number.parseInt(a[3],10):void 0}]},endIndex:s+1}:o.includes(",")&&r?{part:{type:"BraceExpansion",items:zr(o).map(f=>({type:"Word",word:A.word(r(t,f,!1,!1,!1))}))},endIndex:s+1}:o.includes(",")?{part:{type:"BraceExpansion",items:zr(o).map(f=>({type:"Word",word:A.word([A.literal(f)])}))},endIndex:s+1}:null}function Zr(t,e){let n="";for(let r of e.parts)switch(r.type){case"Literal":case"SingleQuoted":case"Escaped":n+=r.value;break;case"DoubleQuoted":n+='"';for(let s of r.parts)s.type==="Literal"||s.type==="Escaped"?n+=s.value:s.type==="ParameterExpansion"&&(n+=`\${${s.parameter}}`);n+='"';break;case"ParameterExpansion":n+=`\${${r.parameter}}`;break;case"Glob":n+=r.pattern;break;default:n+=r.type}return n}function qr(t,e){return{[u.LESS]:"<",[u.GREAT]:">",[u.DGREAT]:">>",[u.LESSAND]:"<&",[u.GREATAND]:">&",[u.LESSGREAT]:"<>",[u.CLOBBER]:">|",[u.TLESS]:"<<<",[u.AND_GREAT]:"&>",[u.AND_DGREAT]:"&>>",[u.DLESS]:"<",[u.DLESSDASH]:"<"}[e]||">"}function Ke(t){let e=t.current(),n=e.type;if(n===u.NUMBER){let r=t.peek(1);return e.end!==r.start?!1:Br.has(r.type)}return Mr.has(n)}function Xe(t){let e=null;t.check(u.NUMBER)&&(e=Number.parseInt(t.advance().value,10));let n=t.advance(),r=qr(t,n.type);if(n.type===u.DLESS||n.type===u.DLESSDASH)return as(t,r,e,n.type===u.DLESSDASH);t.isWord()||t.error("Expected redirection target");let s=t.parseWord();return A.redirection(r,s,e)}function as(t,e,n,r){t.isWord()||t.error("Expected here-document delimiter");let s=t.advance(),o=s.value,i=s.quoted||!1;(o.startsWith("'")&&o.endsWith("'")||o.startsWith('"')&&o.endsWith('"'))&&(o=o.slice(1,-1));let a=A.redirection(r?"<<-":"<<",A.hereDoc(o,A.word([]),r,i),n);return t.addPendingHeredoc(a,o,r,i),a}function Kr(t){let e=t.current().line,n=[],r=null,s=[],o=[];for(;t.check(u.ASSIGNMENT_WORD);)t.checkIterationLimit(),n.push(cs(t));for(;Ke(t);)t.checkIterationLimit(),o.push(Xe(t));for(t.isWord()&&(r=t.parseWord());(!t.isStatementEnd()||t.check(u.RBRACE))&&!t.check(u.PIPE,u.PIPE_AMP);)if(t.checkIterationLimit(),Ke(t))o.push(Xe(t));else if(t.check(u.RBRACE)){let a=t.advance();s.push(t.parseWordFromString(a.value,!1,!1))}else if(t.isWord())s.push(t.parseWord());else if(t.check(u.ASSIGNMENT_WORD)){let a=t.advance(),l=a.value,c=l.endsWith("="),f=l.endsWith("=(");if((c||f)&&(f||t.check(u.LPAREN))){let d=f?l.slice(0,-2):l.slice(0,-1);f||t.expect(u.LPAREN);let h=vt(t);t.expect(u.RPAREN);let m=h.map(g=>Zr(t,g)),E=`${d}=(${m.join(" ")})`;s.push(t.parseWordFromString(E,!1,!1))}else s.push(t.parseWordFromString(l,a.quoted,a.singleQuoted))}else if(t.check(u.LPAREN))t.error("syntax error near unexpected token `('");else break;let i=A.simpleCommand(r,s,n,o);return i.line=e,i}function cs(t){let e=t.expect(u.ASSIGNMENT_WORD),n=e.value,r=n.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);r||t.error(`Invalid assignment: ${n}`);let s=r[0],o,i=s.length;if(n[i]==="["){let d=0,h=i+1;for(;i<n.length;i++)if(n[i]==="[")d++;else if(n[i]==="]"&&(d--,d===0))break;d!==0&&t.error(`Invalid assignment: ${n}`),o=n.slice(h,i),i++}let a=n[i]==="+";a&&i++,n[i]!=="="&&t.error(`Invalid assignment: ${n}`),i++;let l=n.slice(i);if(l==="("){let d=vt(t);t.expect(u.RPAREN);let h=o!==void 0?`${s}[${o}]`:s;return A.assignment(h,null,a,d)}if(l===""&&t.check(u.LPAREN)){let d=t.current();if(e.end===d.start){t.advance();let h=vt(t);t.expect(u.RPAREN);let m=o!==void 0?`${s}[${o}]`:s;return A.assignment(m,null,a,h)}}let c=l?t.parseWordFromString(l,e.quoted,e.singleQuoted,!0):null,f=o!==void 0?`${s}[${o}]`:s;return A.assignment(f,c,a,null)}function vt(t){let e=[];for(t.skipNewlines();!t.check(u.RPAREN,u.EOF);)t.checkIterationLimit(),t.isWord()?e.push(t.parseWord()):t.advance(),t.skipNewlines();return e}function It(t){t.expect(u.IF);let e=[],n=t.parseCompoundList();t.expect(u.THEN);let r=t.parseCompoundList();if(r.length===0){let i=t.check(u.FI)?"fi":t.check(u.ELSE)?"else":t.check(u.ELIF)?"elif":"fi";t.error(`syntax error near unexpected token \`${i}'`)}for(e.push({condition:n,body:r});t.check(u.ELIF);){t.advance();let i=t.parseCompoundList();t.expect(u.THEN);let a=t.parseCompoundList();if(a.length===0){let l=t.check(u.FI)?"fi":t.check(u.ELSE)?"else":t.check(u.ELIF)?"elif":"fi";t.error(`syntax error near unexpected token \`${l}'`)}e.push({condition:i,body:a})}let s=null;t.check(u.ELSE)&&(t.advance(),s=t.parseCompoundList(),s.length===0&&t.error("syntax error near unexpected token `fi'")),t.expect(u.FI);let o=t.parseOptionalRedirections();return A.ifNode(e,s,o)}function Rt(t){if(t.expect(u.FOR),t.check(u.DPAREN_START))return fs(t);t.isWord()||t.error("Expected variable name in for loop");let n=t.advance().value,r=null;if(t.skipNewlines(),t.check(u.IN))for(t.advance(),r=[];!t.check(u.SEMICOLON,u.NEWLINE,u.DO,u.EOF)&&t.isWord();)r.push(t.parseWord());t.check(u.SEMICOLON)&&t.advance(),t.skipNewlines(),t.expect(u.DO);let s=t.parseCompoundList();t.expect(u.DONE);let o=t.parseOptionalRedirections();return A.forNode(n,r,s,o)}function fs(t){t.expect(u.DPAREN_START);let e=null,n=null,r=null,s=["","",""],o=0,i=0;for(;!t.check(u.DPAREN_END,u.EOF);){let c=t.advance();if(c.type===u.SEMICOLON&&i===0){if(o++,o>2)break}else c.value==="("&&i++,c.value===")"&&i--,s[o]+=c.value}t.expect(u.DPAREN_END),s[0].trim()&&(e=T(t,s[0].trim())),s[1].trim()&&(n=T(t,s[1].trim())),s[2].trim()&&(r=T(t,s[2].trim())),t.skipNewlines(),t.check(u.SEMICOLON)&&t.advance(),t.skipNewlines(),t.expect(u.DO);let a=t.parseCompoundList();t.expect(u.DONE);let l=t.parseOptionalRedirections();return{type:"CStyleFor",init:e,condition:n,update:r,body:a,redirections:l}}function kt(t){t.expect(u.WHILE);let e=t.parseCompoundList();t.expect(u.DO);let n=t.parseCompoundList();n.length===0&&t.error("syntax error near unexpected token `done'"),t.expect(u.DONE);let r=t.parseOptionalRedirections();return A.whileNode(e,n,r)}function Dt(t){t.expect(u.UNTIL);let e=t.parseCompoundList();t.expect(u.DO);let n=t.parseCompoundList();n.length===0&&t.error("syntax error near unexpected token `done'"),t.expect(u.DONE);let r=t.parseOptionalRedirections();return A.untilNode(e,n,r)}function Ot(t){t.expect(u.CASE),t.isWord()||t.error("Expected word after 'case'");let e=t.parseWord();t.skipNewlines(),t.expect(u.IN),t.skipNewlines();let n=[];for(;!t.check(u.ESAC,u.EOF);){t.checkIterationLimit();let s=t.getPos(),o=us(t);if(o&&n.push(o),t.skipNewlines(),t.getPos()===s&&!o)break}t.expect(u.ESAC);let r=t.parseOptionalRedirections();return A.caseNode(e,n,r)}function us(t){t.check(u.LPAREN)&&t.advance();let e=[];for(;t.isWord()&&(e.push(t.parseWord()),t.check(u.PIPE));)t.advance();if(e.length===0)return null;t.expect(u.RPAREN),t.skipNewlines();let n=[];for(;!t.check(u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND,u.ESAC,u.EOF);){t.checkIterationLimit(),t.isWord()&&t.peek(1).type===u.RPAREN&&t.error("syntax error near unexpected token `)'"),t.check(u.LPAREN)&&t.peek(1).type===u.WORD&&t.error(`syntax error near unexpected token \`${t.peek(1).value}'`);let s=t.getPos(),o=t.parseStatement();if(o&&n.push(o),t.skipSeparators(!1),t.getPos()===s&&!o)break}let r=";;";return t.check(u.DSEMI)?(t.advance(),r=";;"):t.check(u.SEMI_AND)?(t.advance(),r=";&"):t.check(u.SEMI_SEMI_AND)&&(t.advance(),r=";;&"),A.caseItem(e,n,r)}function _t(t){t.peek(1).type,u.LPAREN,t.expect(u.LPAREN),t.check(u.LPAREN)&&t.advance();let e=t.parseCompoundList();t.expect(u.RPAREN);let n=t.parseOptionalRedirections();return A.subshell(e,n)}function Lt(t){t.expect(u.LBRACE);let e=t.parseCompoundList();t.expect(u.RBRACE);let n=t.parseOptionalRedirections();return A.group(e,n)}var hs=["-a","-b","-c","-d","-e","-f","-g","-h","-k","-p","-r","-s","-t","-u","-w","-x","-G","-L","-N","-O","-S","-z","-n","-o","-v","-R"],ms=["==","!=","=~","<",">","-eq","-ne","-lt","-le","-gt","-ge","-nt","-ot","-ef"];function Ft(t){return t.skipNewlines(),ps(t)}function ps(t){let e=Xr(t);for(t.skipNewlines();t.check(u.OR_OR);){t.advance(),t.skipNewlines();let n=Xr(t);e={type:"CondOr",left:e,right:n},t.skipNewlines()}return e}function Xr(t){let e=Tt(t);for(t.skipNewlines();t.check(u.AND_AND);){t.advance(),t.skipNewlines();let n=Tt(t);e={type:"CondAnd",left:e,right:n},t.skipNewlines()}return e}function Tt(t){return t.skipNewlines(),t.check(u.BANG)?(t.advance(),t.skipNewlines(),{type:"CondNot",operand:Tt(t)}):ys(t)}function ys(t){if(t.check(u.LPAREN)){t.advance();let e=Ft(t);return t.expect(u.RPAREN),{type:"CondGroup",expression:e}}if(t.isWord()){let e=t.current(),n=e.value;if(hs.includes(n)&&!e.quoted&&(t.advance(),t.check(u.DBRACK_END)&&t.error(`Expected operand after ${n}`),t.isWord())){let s=t.parseWord();return{type:"CondUnary",operator:n,operand:s}}let r=t.parseWord();if(t.isWord()&&ms.includes(t.current().value)){let s=t.advance().value,o=t.parseWord();return{type:"CondBinary",operator:s,left:r,right:o}}if(t.check(u.LESS)){t.advance();let s=t.parseWord();return{type:"CondBinary",operator:"<",left:r,right:s}}if(t.check(u.GREAT)){t.advance();let s=t.parseWord();return{type:"CondBinary",operator:">",left:r,right:s}}if(t.isWord()&&t.current().value==="="){t.advance();let s=t.parseWord();return{type:"CondBinary",operator:"==",left:r,right:s}}return{type:"CondWord",word:r}}t.error("Expected conditional expression")}function ws(t,e,n){let r=n+1,s=e[r];if("@*#?$!-0123456789".includes(s))return{part:A.parameterExpansion(s),endIndex:r+1};let o="";for(;r<e.length&&/[a-zA-Z0-9_]/.test(e[r]);)o+=e[r],r++;return{part:A.parameterExpansion(o),endIndex:r}}function gs(t,e,n,r=!1){let s=n+2,o=!1;e[s]==="!"&&(o=!0,s++);let i=!1;e[s]==="#"&&!/[}:#%/^,]/.test(e[s+1]||"}")&&(i=!0,s++);let a="",l=e[s];if(/[@*#?$!-]/.test(l)&&!/[a-zA-Z0-9_]/.test(e[s+1]||""))a=l,s++;else for(;s<e.length&&/[a-zA-Z0-9_]/.test(e[s]);)a+=e[s],s++;if(e[s]==="["){let f=$t(t,e,s,"[","]");a+=e.slice(s,f+1),s=f+1}a===""&&!o&&!i&&e[s]!=="}"&&t.error(`\${${e[s]}}: bad substitution`);let c=null;if(o){let f=a.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([@*])\]$/);if(f)c={type:"ArrayKeys",array:f[1],star:f[2]==="*"},a="";else if(e[s]==="*"||e[s]==="@"){let d=e[s];s++,c={type:"VarNamePrefix",prefix:a,star:d==="*"},a=""}else c={type:"Indirection"}}else if(i)if(e[s]===":")for(c={type:"LengthSliceError"};s<e.length&&e[s]!=="}";)s++;else e[s]!=="}"&&/[-+=?]/.test(e[s])?t.error(`\${#${a}${e.slice(s,e.indexOf("}",s))}}: bad substitution`):c={type:"Length"};if(!c&&s<e.length&&e[s]!=="}"){let f=As(t,e,s,a,r);c=f.operation,s=f.endIndex}if(s<e.length&&e[s]!=="}"){let f=e[s];if(!/[:\-+=?#%/^,@[]/.test(f)){let d=s;for(;d<e.length&&e[d]!=="}";)d++;let h=e.slice(n,d+1);t.error(`\${${h.slice(2,-1)}}: bad substitution`)}}for(;s<e.length&&e[s]!=="}";)s++;return{part:A.parameterExpansion(a,c),endIndex:s+1}}function As(t,e,n,r,s=!1){let o=n,i=e[o],a=e[o+1]||"";if(i===":"){let l=a;if("-=?+".includes(l)){o+=2;let y=we(t,e,o),w=e.slice(o,y),b=fe(t,w,!1,!1,!0,!1,s),N=A.word(b.length>0?b:[A.literal("")]);if(l==="-")return{operation:{type:"DefaultValue",word:N,checkEmpty:!0},endIndex:y};if(l==="=")return{operation:{type:"AssignDefault",word:N,checkEmpty:!0},endIndex:y};if(l==="?")return{operation:{type:"ErrorIfUnset",word:N,checkEmpty:!0},endIndex:y};if(l==="+")return{operation:{type:"UseAlternative",word:N,checkEmpty:!0},endIndex:y}}o++;let c=we(t,e,o),f=e.slice(o,c),d=-1,h=0,m=0;for(let p=0;p<f.length;p++){let y=f[p];if(y==="("||y==="[")h++;else if(y===")"||y==="]")h--;else if(y==="?"&&h===0)m++;else if(y===":"&&h===0)if(m>0)m--;else{d=p;break}}let E=d>=0?f.slice(0,d):f,g=d>=0?f.slice(d+1):null;return{operation:{type:"Substring",offset:Pt(t,E),length:g?Pt(t,g):null},endIndex:c}}if("-=?+".includes(i)){o++;let l=we(t,e,o),c=e.slice(o,l),f=fe(t,c,!1,!1,!0,!1,s),d=A.word(f.length>0?f:[A.literal("")]);if(i==="-")return{operation:{type:"DefaultValue",word:d,checkEmpty:!1},endIndex:l};if(i==="=")return{operation:{type:"AssignDefault",word:d,checkEmpty:!1},endIndex:l};if(i==="?")return{operation:{type:"ErrorIfUnset",word:c?d:null,checkEmpty:!1},endIndex:l};if(i==="+")return{operation:{type:"UseAlternative",word:d,checkEmpty:!1},endIndex:l}}if(i==="#"||i==="%"){let l=a===i,c=i==="#"?"prefix":"suffix";o+=l?2:1;let f=we(t,e,o),d=e.slice(o,f),h=fe(t,d,!1,!1,!1);return{operation:{type:"PatternRemoval",pattern:A.word(h.length>0?h:[A.literal("")]),side:c,greedy:l},endIndex:f}}if(i==="/"){let l=a==="/";o+=l?2:1;let c=null;e[o]==="#"?(c="start",o++):e[o]==="%"&&(c="end",o++);let f=Vr(t,e,o),d=e.slice(o,f),h=fe(t,d,!1,!1,!1),m=A.word(h.length>0?h:[A.literal("")]),E=null,g=f;if(e[f]==="/"){let p=f+1,y=we(t,e,p),w=e.slice(p,y),b=fe(t,w,!1,!1,!1);E=A.word(b.length>0?b:[A.literal("")]),g=y}return{operation:{type:"PatternReplacement",pattern:m,replacement:E,all:l,anchor:c},endIndex:g}}if(i==="^"||i===","){let l=a===i,c=i==="^"?"upper":"lower";o+=l?2:1;let f=we(t,e,o),d=e.slice(o,f),h=d?A.word([A.literal(d)]):null;return{operation:{type:"CaseModification",direction:c,all:l,pattern:h},endIndex:f}}return i==="@"&&/[QPaAEK]/.test(a)?{operation:{type:"Transform",operator:a},endIndex:o+2}:{operation:null,endIndex:o}}function Wt(t,e,n,r=!1){let s=n+1;if(s>=e.length)return{part:A.literal("$"),endIndex:s};let o=e[s];if(o==="("&&e[s+1]==="(")return t.parseArithmeticExpansion(e,n);if(o==="["){let i=1,a=s+1;for(;a<e.length&&i>0;)e[a]==="["?i++:e[a]==="]"&&i--,i>0&&a++;if(i===0){let l=e.slice(s+1,a),c=T(t,l);return{part:A.arithmeticExpansion(c),endIndex:a+1}}}return o==="("?t.parseCommandSubstitution(e,n):o==="{"?gs(t,e,n,r):/[a-zA-Z_0-9@*#?$!-]/.test(o)?ws(t,e,n):{part:A.literal("$"),endIndex:s}}function xs(t,e){let n=[],r=0,s="",o=()=>{s&&(n.push(A.literal(s)),s="")};for(;r<e.length;){let i=e[r];if(i==="\\"&&r+1<e.length){let a=e[r+1];if(a==="$"||a==="`"){s+=a,r+=2;continue}s+=i,r++;continue}if(i==="$"){o();let{part:a,endIndex:l}=Wt(t,e,r,!0);a&&n.push(a),r=l;continue}if(i==="`"){o();let{part:a,endIndex:l}=t.parseBacktickSubstitution(e,r,!0);n.push(a),r=l;continue}s+=i,r++}return o(),n}function Ss(t,e,n){let r=[],s=n,o="",i=()=>{o&&(r.push(A.literal(o)),o="")};for(;s<e.length&&e[s]!=='"';){let a=e[s];if(a==="\\"&&s+1<e.length){let l=e[s+1];if('"\\$`\n'.includes(l)){o+=l,s+=2;continue}o+=a,s++;continue}if(a==="$"){i();let{part:l,endIndex:c}=Wt(t,e,s,!0);l&&r.push(l),s=c;continue}if(a==="`"){i();let{part:l,endIndex:c}=t.parseBacktickSubstitution(e,s,!0);r.push(l),s=c;continue}o+=a,s++}return i(),{part:A.doubleQuoted(r),endIndex:s}}function fe(t,e,n=!1,r=!1,s=!1,o=!1,i=!1){if(r)return[A.singleQuoted(e)];if(n){let d=xs(t,e);return[A.doubleQuoted(d)]}let a=[],l=0,c="",f=()=>{c&&(a.push(A.literal(c)),c="")};for(;l<e.length;){let d=e[l];if(d==="\\"&&l+1<e.length){let h=e[l+1];(o?h==="$"||h==="`"||h==="\\"||h===`
36
+ `:h==="$"||h==="`"||h==="\\"||h==='"'||h===`
37
+ `)?c+=h:c+=`\\${h}`,l+=2;continue}if(d==="'"&&!i){f();let h=e.indexOf("'",l+1);if(h===-1){c+=e.slice(l);break}a.push(A.singleQuoted(e.slice(l+1,h))),l=h+1;continue}if(d==='"'){f();let{part:h,endIndex:m}=Ss(t,e,l+1);a.push(h),l=m+1;continue}if(d==="$"&&e[l+1]==="'"){f();let{part:h,endIndex:m}=Hr(t,e,l+2);a.push(h),l=m;continue}if(d==="$"){f();let{part:h,endIndex:m}=Wt(t,e,l);h&&a.push(h),l=m;continue}if(d==="`"){f();let{part:h,endIndex:m}=t.parseBacktickSubstitution(e,l);a.push(h),l=m;continue}if(d==="~"){let h=l>0?e[l-1]:"";if(l===0||h==="="||s&&h===":"){let E=Ur(t,e,l),g=e[E];if(g===void 0||g==="/"||g===":"){f();let p=e.slice(l+1,E)||null;a.push({type:"TildeExpansion",user:p}),l=E;continue}}}if(d==="*"||d==="?"||d==="["){f();let{pattern:h,endIndex:m}=Gr(t,e,l);a.push({type:"Glob",pattern:h}),l=m;continue}if(d==="{"&&!s){let h=jr(t,e,l,fe);if(h){f(),a.push(h.part),l=h.endIndex;continue}}c+=d,l++}return f(),a}var M=class t{tokens=[];pos=0;pendingHeredocs=[];parseIterations=0;checkIterationLimit(){if(this.parseIterations++,this.parseIterations>Wr)throw new se("Maximum parse iterations exceeded (possible infinite loop)",this.current().line,this.current().column)}parse(e){if(e.length>Nt)throw new se(`Input too large: ${e.length} bytes exceeds limit of ${Nt}`,1,1);let n=new Qe(e);if(this.tokens=n.tokenize(),this.tokens.length>Ct)throw new se(`Too many tokens: ${this.tokens.length} exceeds limit of ${Ct}`,1,1);return this.pos=0,this.pendingHeredocs=[],this.parseIterations=0,this.parseScript()}parseTokens(e){return this.tokens=e,this.pos=0,this.pendingHeredocs=[],this.parseScript()}current(){return this.tokens[this.pos]||this.tokens[this.tokens.length-1]}peek(e=0){return this.tokens[this.pos+e]||this.tokens[this.tokens.length-1]}advance(){let e=this.current();return this.pos<this.tokens.length-1&&this.pos++,e}getPos(){return this.pos}check(e,n,r,s,...o){let i=this.tokens[this.pos]?.type;return i===e||n!==void 0&&i===n||r!==void 0&&i===r||s!==void 0&&i===s?!0:o.length>0?o.includes(i):!1}expect(e,n){if(this.check(e))return this.advance();let r=this.current();throw new se(n||`Expected ${e}, got ${r.type}`,r.line,r.column,r)}error(e){let n=this.current();throw new se(e,n.line,n.column,n)}skipNewlines(){for(;this.check(u.NEWLINE,u.COMMENT);)this.check(u.NEWLINE)?(this.advance(),this.processHeredocs()):this.advance()}skipSeparators(e=!0){for(;;){if(this.check(u.NEWLINE)){this.advance(),this.processHeredocs();continue}if(this.check(u.SEMICOLON,u.COMMENT)){this.advance();continue}if(e&&this.check(u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)){this.advance();continue}break}}addPendingHeredoc(e,n,r,s){this.pendingHeredocs.push({redirect:e,delimiter:n,stripTabs:r,quoted:s})}processHeredocs(){for(let e of this.pendingHeredocs)if(this.check(u.HEREDOC_CONTENT)){let n=this.advance(),r;e.quoted?r=A.word([A.literal(n.value)]):r=this.parseWordFromString(n.value,!1,!1,!1,!0),e.redirect.target=A.hereDoc(e.delimiter,r,e.stripTabs,e.quoted)}this.pendingHeredocs=[]}isStatementEnd(){return this.check(u.EOF,u.NEWLINE,u.SEMICOLON,u.AMP,u.AND_AND,u.OR_OR,u.RPAREN,u.RBRACE,u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)}isCommandStart(){let e=this.current().type;return e===u.WORD||e===u.NAME||e===u.NUMBER||e===u.ASSIGNMENT_WORD||e===u.IF||e===u.FOR||e===u.WHILE||e===u.UNTIL||e===u.CASE||e===u.LPAREN||e===u.LBRACE||e===u.DPAREN_START||e===u.DBRACK_START||e===u.FUNCTION||e===u.BANG||e===u.IN}parseScript(){let e=[],r=0;for(this.skipNewlines();!this.check(u.EOF);){r++,r>1e4&&this.error("Parser stuck: too many iterations (>10000)"),this.checkUnexpectedToken();let s=this.pos,o=this.parseStatement();o&&e.push(o),this.skipSeparators(!1),this.check(u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)&&this.error(`syntax error near unexpected token \`${this.current().value}'`),this.pos===s&&!this.check(u.EOF)&&this.advance()}return A.script(e)}checkUnexpectedToken(){let e=this.current().type,n=this.current().value;(e===u.DO||e===u.DONE||e===u.THEN||e===u.ELSE||e===u.ELIF||e===u.FI||e===u.ESAC)&&this.error(`syntax error near unexpected token \`${n}'`),(e===u.RBRACE||e===u.RPAREN)&&this.error(`syntax error near unexpected token \`${n}'`),(e===u.DSEMI||e===u.SEMI_AND||e===u.SEMI_SEMI_AND)&&this.error(`syntax error near unexpected token \`${n}'`),e===u.SEMICOLON&&this.error(`syntax error near unexpected token \`${n}'`)}parseStatement(){if(this.skipNewlines(),!this.isCommandStart())return null;let e=[],n=[],r=!1,s=this.parsePipeline();for(e.push(s);this.check(u.AND_AND,u.OR_OR);){let o=this.advance();n.push(o.type===u.AND_AND?"&&":"||"),this.skipNewlines();let i=this.parsePipeline();e.push(i)}return this.check(u.AMP)&&(this.advance(),r=!0),A.statement(e,n,r)}parsePipeline(){let e=0;for(;this.check(u.BANG);)this.advance(),e++;let n=e%2===1,r=[],s=this.parseCommand();for(r.push(s);this.check(u.PIPE,u.PIPE_AMP);){let o=this.advance();this.skipNewlines();let i=this.parseCommand();o.type===u.PIPE_AMP&&i.type==="SimpleCommand"&&i.redirections.unshift(A.redirection(">&",A.word([A.literal("1")]),2)),r.push(i)}return A.pipeline(r,n)}parseCommand(){return this.check(u.IF)?It(this):this.check(u.FOR)?Rt(this):this.check(u.WHILE)?kt(this):this.check(u.UNTIL)?Dt(this):this.check(u.CASE)?Ot(this):this.check(u.LPAREN)?_t(this):this.check(u.LBRACE)?Lt(this):this.check(u.DPAREN_START)?this.parseArithmeticCommand():this.check(u.DBRACK_START)?this.parseConditionalCommand():this.check(u.FUNCTION)?this.parseFunctionDef():this.check(u.NAME,u.WORD)&&this.peek(1).type===u.LPAREN&&this.peek(2).type===u.RPAREN?this.parseFunctionDef():Kr(this)}isWord(){let e=this.current().type;return e===u.WORD||e===u.NAME||e===u.NUMBER||e===u.IF||e===u.FOR||e===u.WHILE||e===u.UNTIL||e===u.CASE||e===u.FUNCTION||e===u.ELSE||e===u.ELIF||e===u.FI||e===u.THEN||e===u.DO||e===u.DONE||e===u.ESAC||e===u.IN||e===u.BANG}parseWord(){let e=this.advance();return this.parseWordFromString(e.value,e.quoted,e.singleQuoted)}parseWordFromString(e,n=!1,r=!1,s=!1,o=!1){let i=fe(this,e,n,r,s,o);return A.word(i)}parseCommandSubstitution(e,n){let r=n+2,s=1,o=r,i=!1,a=!1,l=0,c=!1,f="";for(;o<e.length&&s>0;){let E=e[o];i?E==="'"&&(i=!1):a?E==="\\"&&o+1<e.length?o++:E==='"'&&(a=!1):E==="'"?(i=!0,f=""):E==='"'?(a=!0,f=""):E==="\\"&&o+1<e.length?(o++,f=""):/[a-zA-Z_]/.test(E)?f+=E:(f==="case"?(l++,c=!1):f==="in"&&l>0?c=!0:f==="esac"&&l>0&&(l--,c=!1),f="",E==="("?o>0&&e[o-1]==="$"?s++:c||s++:E===")"?c?c=!1:s--:E===";"&&l>0&&o+1<e.length&&e[o+1]===";"&&(c=!0)),s>0&&o++}s>0&&this.error("unexpected EOF while looking for matching `)'");let d=e.slice(r,o),m=new t().parse(d);return{part:A.commandSubstitution(m,!1),endIndex:o+1}}parseBacktickSubstitution(e,n,r=!1){let o=n+1,i="";for(;o<e.length&&e[o]!=="`";)if(e[o]==="\\"){let c=e[o+1];c==="$"||c==="`"||c==="\\"||c===`
30
38
  `||r&&c==='"'?(c!==`
31
- `&&(i+=c),o+=2):(i+=e[o],o++)}else i+=e[o],o++;o>=e.length&&this.error("unexpected EOF while looking for matching ``'");let l=new t().parse(i);return{part:A.commandSubstitution(l,!0),endIndex:o+1}}parseArithmeticExpansion(e,s){let r=s+3,n=1,o=0,i=r;for(;i<e.length-1&&n>0;)e[i]==="$"&&e[i+1]==="("?e[i+2]==="("?(n++,i+=3):(o++,i+=2):e[i]==="("&&e[i+1]==="("?(n++,i+=2):e[i]===")"&&e[i+1]===")"?o>0?(o--,i++):(n--,n>0&&(i+=2)):e[i]==="("?(o++,i++):(e[i]===")"&&o>0&&o--,i++);let a=e.slice(r,i),l=this.parseArithmeticExpression(a);return{part:A.arithmeticExpansion(l),endIndex:i+2}}parseArithmeticCommand(){this.expect(u.DPAREN_START);let e="",s=1,r=0,n=!1,o=!1;for(;s>0&&!this.check(u.EOF);){if(n){if(n=!1,r>0){r--,e+=")";continue}if(this.check(u.RPAREN)){s--,o=!0,this.advance();continue}if(this.check(u.DPAREN_END)){s--,o=!0;continue}e+=")";continue}this.check(u.DPAREN_START)?(s++,e+="((",this.advance()):this.check(u.DPAREN_END)?r>=2?(r-=2,e+="))",this.advance()):r===1?(r--,e+=")",n=!0,this.advance()):(s--,o=!0,s>0&&(e+="))"),this.advance()):this.check(u.LPAREN)?(r++,e+="(",this.advance()):this.check(u.RPAREN)?(r>0&&r--,e+=")",this.advance()):(e+=this.current().value,this.advance())}o||this.expect(u.DPAREN_END);let i=this.parseArithmeticExpression(e.trim()),a=this.parseOptionalRedirections();return A.arithmeticCommand(i,a)}parseConditionalCommand(){this.expect(u.DBRACK_START);let e=Tt(this);this.expect(u.DBRACK_END);let s=this.parseOptionalRedirections();return A.conditionalCommand(e,s)}parseFunctionDef(){let e;this.check(u.FUNCTION)?(this.advance(),e=this.expect(u.NAME,"Expected function name").value,this.check(u.LPAREN)&&(this.advance(),this.expect(u.RPAREN))):(e=this.advance().value,this.expect(u.LPAREN),this.expect(u.RPAREN)),this.skipNewlines();let s=this.parseCompoundCommandBody(),r=this.parseOptionalRedirections();return A.functionDef(e,s,r)}parseCompoundCommandBody(){if(this.check(u.LBRACE))return _t(this);if(this.check(u.LPAREN))return Ot(this);if(this.check(u.IF))return vt(this);if(this.check(u.FOR))return It(this);if(this.check(u.WHILE))return Rt(this);if(this.check(u.UNTIL))return kt(this);if(this.check(u.CASE))return Dt(this);this.error("Expected compound command for function body")}parseCompoundList(){let e=[];for(this.skipNewlines();!this.check(u.EOF,u.FI,u.ELSE,u.ELIF,u.THEN,u.DO,u.DONE,u.ESAC,u.RPAREN,u.RBRACE,u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)&&this.isCommandStart();){this.checkIterationLimit();let s=this.pos,r=this.parseStatement();if(r&&e.push(r),this.skipSeparators(),this.pos===s&&!r)break}return e}parseOptionalRedirections(){let e=[];for(;Qe(this);){this.checkIterationLimit();let s=this.pos;if(e.push(Ke(this)),this.pos===s)break}return e}parseArithmeticExpression(e){return T(this,e)}};function he(t){return new M().parse(t)}var Ne=class{fs;cwd;constructor(e,s){this.fs=e,this.cwd=s}isGlobPattern(e){return e.includes("*")||e.includes("?")||/\[.*\]/.test(e)}async expandArgs(e,s){let r=[];for(let n=0;n<e.length;n++){let o=e[n];if((s?.[n]??!1)||!this.isGlobPattern(o))r.push(o);else{let a=await this.expand(o);a.length>0?r.push(...a):r.push(o)}}return r}async expand(e){return e.includes("**")?this.expandRecursive(e):this.expandSimple(e)}async expandSimple(e){let s=[],r=e.lastIndexOf("/"),n,o;r===-1?(n=this.cwd,o=e):(n=e.slice(0,r)||"/",o=e.slice(r+1));let i=this.fs.resolvePath(this.cwd,n);try{let a=await this.fs.readdir(i);for(let l of a)if(this.matchPattern(l,o)){let c=r===-1?l:`${n}/${l}`;s.push(c)}}catch{}return s.sort()}async expandRecursive(e){let s=[],r=e.indexOf("**"),n=e.slice(0,r).replace(/\/$/,"")||".",i=e.slice(r+2).replace(/^\//,"");return await this.walkDirectory(n,i,s),s.sort()}async walkDirectory(e,s,r){let n=this.fs.resolvePath(this.cwd,e);try{let o=await this.fs.readdir(n);for(let i of o){let a=e==="."?i:`${e}/${i}`,l=this.fs.resolvePath(this.cwd,a);try{(await this.fs.stat(l)).isDirectory?await this.walkDirectory(a,s,r):s&&this.matchPattern(i,s)&&r.push(a)}catch{}}}catch{}}matchPattern(e,s){return this.patternToRegex(s).test(e)}patternToRegex(e){let s="^";for(let r=0;r<e.length;r++){let n=e[r];if(n==="*")s+=".*";else if(n==="?")s+=".";else if(n==="["){let o=r+1,i="[";for(o<e.length&&(e[o]==="^"||e[o]==="!")&&(i+="^",o++),o<e.length&&e[o]==="]"&&(i+="\\]",o++);o<e.length&&e[o]!=="]";){if(e[o]==="["&&o+1<e.length&&e[o+1]===":"){let a=e.indexOf(":]",o+2);if(a!==-1){let l=e.slice(o+2,a),c=this.posixClassToRegex(l);i+=c,o=a+2;continue}}if(e[o]==="\\"&&o+1<e.length){i+=`\\${e[o+1]}`,o+=2;continue}e[o]==="-"?i+="\\-":i+=e[o],o++}i+="]",s+=i,r=o}else if(n==="\\"&&r+1<e.length){let o=e[r+1];/[.+^${}()|\\*?[\]]/.test(o)?s+=`\\${o}`:s+=o,r++}else/[.+^${}()|]/.test(n)?s+=`\\${n}`:s+=n}return s+="$",new RegExp(s)}posixClassToRegex(e){return{alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"!-~",lower:"a-z",print:" -~",punct:"!-/:-@\\[-`{-~",space:" \\t\\n\\r\\f\\v",upper:"A-Z",word:"a-zA-Z0-9_",xdigit:"0-9a-fA-F"}[e]||""}};function q(t){switch(t.type){case"ArithCommandSubst":return!0;case"ArithNested":return q(t.expression);case"ArithBinary":return q(t.left)||q(t.right);case"ArithUnary":return q(t.operand);case"ArithTernary":return q(t.condition)||q(t.consequent)||q(t.alternate);case"ArithAssignment":return q(t.value);case"ArithGroup":return q(t.expression);case"ArithArrayElement":return t.index?q(t.index):!1;case"ArithConcat":return t.parts.some(q);default:return!1}}function Ft(t){let e=t.operation;return e?!!("word"in e&&e.word&&oe(e.word)||e.type==="PatternReplacement"&&(e.pattern&&oe(e.pattern)||e.replacement&&oe(e.replacement))||e.type==="PatternRemoval"&&e.pattern&&oe(e.pattern)):!1}function Xe(t){switch(t.type){case"CommandSubstitution":return!0;case"ArithmeticExpansion":return q(t.expression.expression);case"DoubleQuoted":return t.parts.some(Xe);case"BraceExpansion":return t.items.some(e=>e.type==="Word"&&oe(e.word));case"ParameterExpansion":return Ft(t);default:return!1}}function oe(t){return t.parts.some(Xe)}function Mt(t){if(!t.operation)return!1;let e=t.operation,s;if((e.type==="DefaultValue"||e.type==="AssignDefault"||e.type==="UseAlternative"||e.type==="ErrorIfUnset")&&(s=e.word?.parts),!s)return!1;for(let r of s)if(r.type==="DoubleQuoted"||r.type==="SingleQuoted")return!0;return!1}function Zr(t){let e=!1,s=!1,r=!1,n=!1,o=!1;for(let i of t){if((i.type==="SingleQuoted"||i.type==="DoubleQuoted")&&(e=!0,i.type==="DoubleQuoted"))for(let a of i.parts)a.type==="ParameterExpansion"&&a.parameter.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/)&&!a.operation&&(n=!0);i.type==="CommandSubstitution"&&(s=!0),i.type==="ParameterExpansion"&&(o=!0,(i.parameter==="@"||i.parameter==="*")&&(r=!0),Mt(i)&&(e=!0))}return{hasQuoted:e,hasCommandSub:s,hasArrayVar:r,hasArrayAtExpansion:n,hasParamExpansion:o}}function pn(t,e,s,r,n){let o=s??1;o===0&&(o=1);let i=Math.abs(o),a=[],l=0;r?.match(/^-?0\d/)&&(l=Math.max(l,r.replace(/^-/,"").length)),n?.match(/^-?0\d/)&&(l=Math.max(l,n.replace(/^-/,"").length));let c=f=>{if(l>0){let h=f<0,d=String(Math.abs(f)).padStart(l,"0");return h?`-${d}`:d}return String(f)};if(t<=e)for(let f=t,h=0;f<=e&&h<1e4;f+=i,h++)a.push(c(f));else for(let f=t,h=0;f>=e&&h<1e4;f-=i,h++)a.push(c(f));return a}function yn(t,e,s){let r=s??1;r===0&&(r=1);let n=t.charCodeAt(0),o=e.charCodeAt(0),i=Math.abs(r),a=t>="A"&&t<="Z",l=t>="a"&&t<="z",c=e>="A"&&e<="Z",f=e>="a"&&e<="z";if(a&&f||l&&c)return null;let h=[];if(n<=o)for(let d=n,m=0;d<=o&&m<1e4;d+=i,m++)h.push(String.fromCharCode(d));else for(let d=n,m=0;d>=o&&m<1e4;d-=i,m++)h.push(String.fromCharCode(d));return h}function Le(t,e,s,r,n){let o=s!==void 0?`..${s}`:"";return typeof t=="number"&&typeof e=="number"?{expanded:pn(t,e,s,r,n),literal:`{${t}..${e}${o}}`}:typeof t=="string"&&typeof e=="string"?{expanded:yn(t,e,s),literal:`{${t}..${e}${o}}`}:{expanded:null,literal:`{${t}..${e}${o}}`}}function G(t,e){let s="",r=0;for(;r<t.length;){let n=t[r];if(n==="\\")if(r+1<t.length){let o=t[r+1];/[\\^$.|+(){}[\]*?]/.test(o)?s+=`\\${o}`:s+=o,r+=2}else s+="\\\\",r++;else if(n==="*")s+=e?".*":".*?",r++;else if(n==="?")s+=".",r++;else if(n==="["){let o=En(t,r);if(o===-1)s+="\\[",r++;else{let i=t.slice(r+1,o);s+=wn(i),r=o+1}}else/[\^$.|+(){}]/.test(n)?(s+=`\\${n}`,r++):(s+=n,r++)}return s}function En(t,e){let s=e+1;for(s<t.length&&t[s]==="^"&&s++,s<t.length&&t[s]==="]"&&s++;s<t.length;){if(t[s]==="\\"&&s+1<t.length){s+=2;continue}if(t[s]==="]")return s;if(t[s]==="'"){let r=t.indexOf("'",s+1);if(r!==-1){s=r+1;continue}}if(t[s]==="["&&s+1<t.length&&t[s+1]===":"){let r=t.indexOf(":]",s+2);if(r!==-1){s=r+2;continue}}s++}return-1}function wn(t){let e="[",s=0;for((t[0]==="^"||t[0]==="!")&&(e+="^",s++);s<t.length;){if(t[s]==="'"){let n=t.indexOf("'",s+1);if(n!==-1){let o=t.slice(s+1,n);for(let i of o)i==="\\"?e+="\\\\":i==="]"?e+="\\]":i==="^"&&e==="["?e+="\\^":e+=i;s=n+1;continue}}if(t[s]==="["&&s+1<t.length&&t[s+1]===":"){let n=t.indexOf(":]",s+2);if(n!==-1){let o=t.slice(s+2,n);e+=An(o),s=n+2;continue}}let r=t[s];r==="\\"?s+1<t.length?(e+=`\\${t[s+1]}`,s+=2):(e+="\\\\",s++):r==="-"&&s>0&&s<t.length-1?(e+="-",s++):r==="^"&&s===0?(e+="^",s++):(r==="]"&&s===0?e+="\\]":e+=r,s++)}return e+="]",e}var gn={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"!-~",lower:"a-z",print:" -~",punct:"!-/:-@\\[-`{-~",space:" \\t\\n\\r\\f\\v",upper:"A-Z",word:"a-zA-Z0-9_",xdigit:"0-9A-Fa-f"};function An(t){return gn[t]??""}function Te(t,e){let s=`${e}_`,r=[];for(let n of Object.keys(t.state.env))if(n.startsWith(s)){let o=n.slice(s.length),i=Number.parseInt(o,10);!Number.isNaN(i)&&String(i)===o&&r.push(i)}return r.sort((n,o)=>n-o)}function Bt(t,e){let s=`${e}_`;for(let r of Object.keys(t.state.env))r.startsWith(s)&&delete t.state.env[r]}function zt(t,e){let s=`${e}_`,r=[];for(let n of Object.keys(t.state.env))if(n.startsWith(s)&&!n.includes("__")){let o=n.slice(s.length);r.push(o)}return r.sort()}function qr(t){return t.startsWith("'")&&t.endsWith("'")||t.startsWith('"')&&t.endsWith('"')?t.slice(1,-1):t}function Ye(t){return t.IFS??`
32
- `}function Qr(t){return t.IFS===""}function We(t){return t.split("").map(e=>/[\\^$.*+?()[\]{}|-]/.test(e)?`\\${e}`:e===" "?"\\t":e===`
33
- `?"\\n":e).join("")}function xn(t,e){let s=We(t);return new RegExp(`[${s}]+`,e)}function Sn(t){let e=We(t);return new RegExp(`^[${e}]+`)}function bn(t){let e=We(t);return new RegExp(`[${e}]+$`)}function Fe(t){let e=t.IFS;return e===void 0?" ":e[0]||""}function Kr(t,e){if(e==="")return{words:[t],wordStarts:[0]};let s=[],r=[],n=xn(e,"g"),o=0,i=t.match(Sn(e));i&&(o=i[0].length),n.lastIndex=o;let a=n.exec(t);for(;a!==null;)a.index>o&&(r.push(o),s.push(t.substring(o,a.index))),o=n.lastIndex,a=n.exec(t);return o<t.length&&(r.push(o),s.push(t.substring(o))),{words:s,wordStarts:r}}function Xr(t,e){return e===""?t:t.replace(bn(e),"")}function W(t,e){return t.state.associativeArrays?.has(e)?zt(t,e).map(o=>[o,t.state.env[`${e}_${o}`]]):Te(t,e).map(n=>[n,t.state.env[`${e}_${n}`]])}function Yr(t,e){return t.state.associativeArrays?.has(e)?zt(t,e).length>0:Te(t,e).length>0}function Q(t,e,s=!0,r=!1){switch(e){case"?":return String(t.state.lastExitCode);case"$":return String(process.pid);case"#":return t.state.env["#"]||"0";case"@":return t.state.env["@"]||"";case"_":return t.state.lastArg;case"-":{let i="";return t.state.options.errexit&&(i+="e"),t.state.options.nounset&&(i+="u"),t.state.options.verbose&&(i+="v"),t.state.options.xtrace&&(i+="x"),t.state.options.pipefail&&(i+="p"),i}case"*":{let i=Number.parseInt(t.state.env["#"]||"0",10);if(i===0)return"";let a=[];for(let l=1;l<=i;l++)a.push(t.state.env[String(l)]||"");return a.join(Fe(t.state.env))}case"0":return t.state.env[0]||"bash";case"PWD":return t.state.env.PWD!==void 0?t.state.env.PWD:"";case"OLDPWD":return t.state.env.OLDPWD!==void 0?t.state.env.OLDPWD:""}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[\]$/.test(e))throw new Ee(`\${${e}}`);let n=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(n){let i=n[1],a=n[2];if(a==="@"||a==="*"){let h=W(t,i);if(h.length>0)return h.map(([,m])=>m).join(" ");let d=t.state.env[i];return d!==void 0?d:""}if(t.state.associativeArrays?.has(i)){let h=qr(a),d=t.state.env[`${i}_${h}`];if(d===void 0&&s&&t.state.options.nounset)throw new Y(`${i}[${a}]`);return d||""}let c;if(/^-?\d+$/.test(a))c=Number.parseInt(a,10);else try{let h=new M,d=T(h,a);c=C(t,d.expression)}catch{let h=t.state.env[a];c=h?Number.parseInt(h,10):0,Number.isNaN(c)&&(c=0)}if(c<0){let h=W(t,i);if(h.length===0)return t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${i}: bad array subscript
34
- `,"";let m=Math.max(...h.map(([g])=>typeof g=="number"?g:0))+1+c;return m<0?(t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${i}: bad array subscript
35
- `,""):t.state.env[`${i}_${m}`]||""}let f=t.state.env[`${i}_${c}`];if(f===void 0&&s&&t.state.options.nounset)throw new Y(`${i}[${c}]`);return f||""}if(/^[1-9][0-9]*$/.test(e)){let i=t.state.env[e];if(i===void 0&&s&&t.state.options.nounset)throw new Y(e);return i||""}let o=t.state.env[e];if(o===void 0&&s&&t.state.options.nounset)throw new Y(e);return o||""}async function Jr(t,e,s,r,n){let o=[];for(let f of e){let h=f.type==="ParameterExpansion"||f.type==="CommandSubstitution"||f.type==="ArithmeticExpansion";if(f.type==="ParameterExpansion"&&Mt(f)){let d=await n(t,f);o.push({value:d,splittable:!1})}else{let d=await n(t,f);o.push({value:d,splittable:h})}}if(!o.some(f=>f.splittable&&new RegExp(`[${r}]`).test(f.value))){let f=o.map(h=>h.value).join("");return f?[f]:[]}let a=new RegExp(`[${r}]+`),l=[],c="";for(let f=0;f<o.length;f++){let h=o[f];if(!h.splittable)c+=h.value;else{let d=h.value.split(a);for(let m=0;m<d.length;m++)m===0?c+=d[m]:(c!==""&&l.push(c),c=d[m])}}return c!==""&&l.push(c),l}function H(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function es(t){switch(t.type){case"Literal":return t.value;case"SingleQuoted":return t.value;case"Escaped":return t.value;default:return null}}function ts(t){switch(t.type){case"SingleQuoted":case"Escaped":case"DoubleQuoted":return!0;case"Literal":return t.value==="";default:return!1}}function Ut(t){if(t==="")return"''";if(!/['\\\n\r\t\x00-\x1f\x7f]/.test(t))return`'${t}'`;let e="$'";for(let s of t)switch(s){case"'":e+="\\'";break;case"\\":e+="\\\\";break;case`
36
- `:e+="\\n";break;case"\r":e+="\\r";break;case" ":e+="\\t";break;default:{let r=s.charCodeAt(0);r<32||r===127?e+=`\\x${r.toString(16).padStart(2,"0")}`:e+=s}}return`${e}'`}function ge(t,e,s=!1){return e.map(r=>ae(t,r,s)).join("")}async function Ae(t,e,s=!1){let r=[];for(let n of e)r.push(await J(t,n));return r.join("")}function Nn(t){return ts(t)}function rs(t){if(t.parts.length===0)return!0;for(let e of t.parts)if(!Nn(e))return!1;return!0}function ss(t){return t.replace(/([*?[\]\\])/g,"\\$1")}function ns(t,e,s=!1){let r=es(e);if(r!==null)return r;switch(e.type){case"ParameterExpansion":return ls(t,e,s);case"TildeExpansion":return s?e.user===null?"~":`~${e.user}`:e.user===null?t.state.env.HOME||"/home/user":e.user==="root"?"/root":`~${e.user}`;case"Glob":return e.pattern;default:return null}}function ae(t,e,s=!1){let r=ns(t,e,s);if(r!==null)return r;switch(e.type){case"DoubleQuoted":{let n=[];for(let o of e.parts)n.push(ae(t,o,!0));return n.join("")}case"ArithmeticExpansion":return String(C(t,e.expression.expression));case"BraceExpansion":{let n=[];for(let o of e.items)if(o.type==="Range"){let i=Le(o.start,o.end,o.step,o.startStr,o.endStr);if(i.expanded)n.push(...i.expanded);else return i.literal}else n.push(Je(t,o.word));return n.join(" ")}default:return""}}function Je(t,e){let s=e.parts,r=s.length;if(r===1)return ae(t,s[0]);let n=[];for(let o=0;o<r;o++)n.push(ae(t,s[o]));return n.join("")}async function v(t,e){return oe(e)?cs(t,e):Je(t,e)}function et(t){for(let e of t)if(e.type==="BraceExpansion"||e.type==="DoubleQuoted"&&et(e.parts))return!0;return!1}function Cn(t){for(let e of t){if(e.type==="BraceExpansion"){for(let s of e.items)if(s.type==="Word"&&oe(s.word))return!0}if(Xe(e))return!0}return!1}var is=1e4,Ce=1e5;function os(t,e,s={count:0}){if(s.count>Ce)return[[]];let r=[[]];for(let n of e)if(n.type==="BraceExpansion"){let o=[],i=!1,a="";for(let f of n.items)if(f.type==="Range"){let h=Le(f.start,f.end,f.step,f.startStr,f.endStr);if(h.expanded)for(let d of h.expanded)s.count++,o.push(d);else{i=!0,a=h.literal;break}}else{let h=os(t,f.word.parts,s);for(let d of h)s.count++,o.push(d.join(""))}if(i){for(let f of r)s.count++,f.push(a);continue}if(r.length*o.length>is||s.count>Ce)return r;let c=[];for(let f of r)for(let h of o){if(s.count++,s.count>Ce)return c.length>0?c:r;c.push([...f,h])}r=c}else{let o=ae(t,n);for(let i of r)s.count++,i.push(o)}return r}function $n(t,e){let s=e.parts;return et(s)?os(t,s).map(n=>n.join("")):[Je(t,e)]}async function as(t,e,s={count:0}){if(s.count>Ce)return[[]];let r=[[]];for(let n of e)if(n.type==="BraceExpansion"){let o=[],i=!1,a="";for(let f of n.items)if(f.type==="Range"){let h=Le(f.start,f.end,f.step,f.startStr,f.endStr);if(h.expanded)for(let d of h.expanded)s.count++,o.push(d);else{i=!0,a=h.literal;break}}else{let h=await as(t,f.word.parts,s);for(let d of h)s.count++,o.push(d.join(""))}if(i){for(let f of r)s.count++,f.push(a);continue}if(r.length*o.length>is||s.count>Ce)return r;let c=[];for(let f of r)for(let h of o){if(s.count++,s.count>Ce)return c.length>0?c:r;c.push([...f,h])}r=c}else{let o=await J(t,n);for(let i of r)s.count++,i.push(o)}return r}async function Pn(t,e){let s=e.parts;return et(s)?(await as(t,s)).map(n=>n.join("")):[await v(t,e)]}async function Me(t,e){let s=e.parts,{hasQuoted:r,hasCommandSub:n,hasArrayVar:o,hasArrayAtExpansion:i,hasParamExpansion:a}=Zr(s),c=et(s)?Cn(s)?await Pn(t,e):$n(t,e):null;if(c&&c.length>1){let d=[];for(let m of c)if(!r&&/[*?[]/.test(m)){let g=await new Ne(t.fs,t.state.cwd).expand(m);g.length>0?d.push(...g):d.push(m)}else d.push(m);return{values:d,quoted:!1}}if(i&&s.length===1&&s[0].type==="DoubleQuoted"){let d=s[0];if(d.parts.length===1&&d.parts[0].type==="ParameterExpansion"){let y=d.parts[0].parameter.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@]\]$/);if(y){let g=y[1],p=W(t,g);if(p.length>0)return{values:p.map(([,w])=>w),quoted:!0};let E=t.state.env[g];return E!==void 0?{values:[E],quoted:!0}:{values:[],quoted:!0}}}}if(!r&&o&&s.length===1&&s[0].type==="ParameterExpansion"){let d=s[0].parameter;if(d==="@"||d==="*"){let m=Number.parseInt(t.state.env["#"]||"0",10);if(m===0)return{values:[],quoted:!1};let y=[];for(let g=1;g<=m;g++)y.push(t.state.env[String(g)]||"");return{values:y,quoted:!1}}}if(!r&&(n||o||a)&&!Qr(t.state.env)){let d=Ye(t.state.env),m=We(d),y=await Jr(t,s,d,m,J),g=[],p=new Ne(t.fs,t.state.cwd);for(let E of y)if(/[*?[]/.test(E)){let w=await p.expand(E);w.length>0?g.push(...w):g.push(E)}else g.push(E);return{values:g,quoted:!1}}let h=oe(e)?await cs(t,e):Je(t,e);if(!r&&/[*?[]/.test(h)){let m=await new Ne(t.fs,t.state.cwd).expand(h);if(m.length>0)return{values:m,quoted:!1}}return h===""&&!r?{values:[],quoted:!1}:{values:[h],quoted:r}}async function cs(t,e){let s=e.parts,r=s.length;if(r===1)return J(t,s[0]);let n=[];for(let o=0;o<r;o++)n.push(await J(t,s[o]));return n.join("")}async function J(t,e){if(e.type==="ParameterExpansion"&&Ft(e))return vn(t,e);let s=ns(t,e);if(s!==null)return s;switch(e.type){case"DoubleQuoted":{let r=[];for(let n of e.parts)r.push(await J(t,n));return r.join("")}case"CommandSubstitution":try{let r=await t.executeScript(e.body);return t.state.lastExitCode=r.exitCode,t.state.env["?"]=String(r.exitCode),r.stdout.replace(/\n+$/,"")}catch(r){if(r instanceof z)throw r;if(r instanceof k)return t.state.lastExitCode=r.exitCode,t.state.env["?"]=String(r.exitCode),r.stdout.replace(/\n+$/,"");throw r}case"ArithmeticExpansion":return String(await $(t,e.expression.expression));case"BraceExpansion":{let r=[];for(let n of e.items)if(n.type==="Range"){let o=Le(n.start,n.end,n.step,n.startStr,n.endStr);if(o.expanded)r.push(...o.expanded);else return o.literal}else r.push(await v(t,n.word));return r.join(" ")}default:return""}}function ls(t,e,s=!1){let{parameter:r,operation:n}=e,o=n&&(n.type==="DefaultValue"||n.type==="AssignDefault"||n.type==="UseAlternative"||n.type==="ErrorIfUnset"),i=Q(t,r,!o);if(!n)return i;let a=!(r in t.state.env),l=i==="";switch(n.type){case"DefaultValue":return(a||n.checkEmpty&&l)&&n.word?ge(t,n.word.parts,s):i;case"AssignDefault":{if((a||n.checkEmpty&&l)&&n.word){let f=ge(t,n.word.parts,s),h=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(h){let[,d,m]=h,y;if(/^\d+$/.test(m))y=Number.parseInt(m,10);else{try{let p=new M,E=T(p,m);y=C(t,E.expression)}catch{let p=t.state.env[m];y=p?Number.parseInt(p,10):0}Number.isNaN(y)&&(y=0)}t.state.env[`${d}_${y}`]=f;let g=Number.parseInt(t.state.env[`${d}__length`]||"0",10);y>=g&&(t.state.env[`${d}__length`]=String(y+1))}else t.state.env[r]=f;return f}return i}case"ErrorIfUnset":{if(a||n.checkEmpty&&l){let f=n.word?ge(t,n.word.parts,s):`${r}: parameter null or not set`;throw new k(1,"",`bash: ${f}
37
- `)}return i}case"UseAlternative":return!(a||n.checkEmpty&&l)&&n.word?ge(t,n.word.parts,s):"";case"Length":{let c=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(c){let f=W(t,c[1]);return String(f.length)}if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)&&Yr(t,r)){let f=t.state.env[`${r}_0`]||"";return String(f.length)}return String(i.length)}case"LengthSliceError":throw new Ee(r);case"Substring":{let c=n.offset?C(t,n.offset.expression):0,f=n.length?C(t,n.length.expression):void 0;if(r==="@"||r==="*"){let y=(t.state.env["@"]||"").split(" ").filter(w=>w),g=t.state.env[0]||"bash",p=c===0?[g,...y]:y,E=c===0?0:c-1;if(E<0||E>=p.length)return"";if(f!==void 0){let w=f<0?p.length+f:E+f;return p.slice(E,Math.max(E,w)).join(" ")}return p.slice(E).join(" ")}let h=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(h){let g=W(t,h[1]).map(([,E])=>E),p=c;if(p<0&&(p=g.length+p,p<0))return"";if(f!==void 0){if(f<0){let E=g.length+f;return g.slice(p,Math.max(p,E)).join(" ")}return g.slice(p,p+f).join(" ")}return g.slice(p).join(" ")}let d=[...i],m=c;if(m<0&&(m=Math.max(0,d.length+m)),f!==void 0){if(f<0){let y=d.length+f;return d.slice(m,Math.max(m,y)).join("")}return d.slice(m,m+f).join("")}return d.slice(m).join("")}case"PatternRemoval":{let c="";if(n.pattern)for(let h of n.pattern.parts)if(h.type==="Glob")c+=G(h.pattern,n.greedy);else if(h.type==="Literal")c+=G(h.value,n.greedy);else if(h.type==="SingleQuoted"||h.type==="Escaped")c+=H(h.value);else if(h.type==="DoubleQuoted"){let d=ge(t,h.parts);c+=H(d)}else if(h.type==="ParameterExpansion"){let d=ae(t,h);c+=G(d,n.greedy)}else{let d=ae(t,h);c+=H(d)}if(n.side==="prefix")return i.replace(new RegExp(`^${c}`),"");let f=new RegExp(`${c}$`);if(n.greedy)return i.replace(f,"");for(let h=i.length;h>=0;h--){let d=i.slice(h);if(f.test(d))return i.slice(0,h)}return i}case"PatternReplacement":{let c="";if(n.pattern)for(let d of n.pattern.parts)if(d.type==="Glob")c+=G(d.pattern,!0);else if(d.type==="Literal")c+=G(d.value,!0);else if(d.type==="SingleQuoted"||d.type==="Escaped")c+=H(d.value);else if(d.type==="DoubleQuoted"){let m=ge(t,d.parts);c+=H(m)}else if(d.type==="ParameterExpansion"){let m=ae(t,d);c+=G(m,!0)}else{let m=ae(t,d);c+=H(m)}let f=n.replacement?ge(t,n.replacement.parts):"";if(c==="")return i;n.anchor==="start"?c=`^${c}`:n.anchor==="end"&&(c=`${c}$`);let h=n.all?"g":"";try{let d=new RegExp(c,h);if(n.all){let m="",y=0,g=d.exec(i);for(;g!==null&&!(g[0].length===0&&g.index===i.length);)m+=i.slice(y,g.index)+f,y=g.index+g[0].length,g[0].length===0&&y++,g=d.exec(i);return m+=i.slice(y),m}return i.replace(d,f)}catch{return i}}case"CaseModification":return n.direction==="upper"?n.all?i.toUpperCase():i.charAt(0).toUpperCase()+i.slice(1):n.all?i.toLowerCase():i.charAt(0).toLowerCase()+i.slice(1);case"Transform":{let c=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(c&&n.operator==="Q")return W(t,c[1]).map(([,d])=>Ut(d)).join(" ");switch(n.operator){case"Q":return Ut(i);case"P":return i;case"a":return"";case"A":return`${r}=${Ut(i)}`;case"E":return i.replace(/\\([\\abefnrtv'"?])/g,(f,h)=>{switch(h){case"\\":return"\\";case"a":return"\x07";case"b":return"\b";case"e":return"\x1B";case"f":return"\f";case"n":return`
38
- `;case"r":return"\r";case"t":return" ";case"v":return"\v";case"'":return"'";case'"':return'"';case"?":return"?";default:return h}});case"K":return"";default:return i}}case"Indirection":return Q(t,i);case"ArrayKeys":{let f=W(t,n.array).map(([h])=>String(h));return n.star?f.join(Fe(t.state.env)):f.join(" ")}case"VarNamePrefix":{let c=Object.keys(t.state.env).filter(f=>f.startsWith(n.prefix)&&!f.includes("__")).sort();return n.star?c.join(Fe(t.state.env)):c.join(" ")}default:return i}}async function vn(t,e,s=!1){let{parameter:r,operation:n}=e,o=n&&(n.type==="DefaultValue"||n.type==="AssignDefault"||n.type==="UseAlternative"||n.type==="ErrorIfUnset"),i=Q(t,r,!o);if(!n)return i;let a=!(r in t.state.env),l=i==="";switch(n.type){case"DefaultValue":return(a||n.checkEmpty&&l)&&n.word?Ae(t,n.word.parts,s):i;case"AssignDefault":{if((a||n.checkEmpty&&l)&&n.word){let f=await Ae(t,n.word.parts,s),h=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(h){let[,d,m]=h,y;if(/^\d+$/.test(m))y=Number.parseInt(m,10);else{try{let p=new M,E=T(p,m);y=await $(t,E.expression)}catch{let p=t.state.env[m];y=p?Number.parseInt(p,10):0}Number.isNaN(y)&&(y=0)}t.state.env[`${d}_${y}`]=f;let g=Number.parseInt(t.state.env[`${d}__length`]||"0",10);y>=g&&(t.state.env[`${d}__length`]=String(y+1))}else t.state.env[r]=f;return f}return i}case"ErrorIfUnset":{if(a||n.checkEmpty&&l){let f=n.word?await Ae(t,n.word.parts,s):`${r}: parameter null or not set`;throw new k(1,"",`bash: ${f}
39
- `)}return i}case"UseAlternative":return!(a||n.checkEmpty&&l)&&n.word?Ae(t,n.word.parts,s):"";case"PatternRemoval":{let c="";if(n.pattern)for(let h of n.pattern.parts)if(h.type==="Glob")c+=G(h.pattern,n.greedy);else if(h.type==="Literal")c+=G(h.value,n.greedy);else if(h.type==="SingleQuoted"||h.type==="Escaped")c+=H(h.value);else if(h.type==="DoubleQuoted"){let d=await Ae(t,h.parts);c+=H(d)}else if(h.type==="ParameterExpansion"){let d=await J(t,h);c+=G(d,n.greedy)}else{let d=await J(t,h);c+=H(d)}if(n.side==="prefix")return i.replace(new RegExp(`^${c}`),"");let f=new RegExp(`${c}$`);if(n.greedy)return i.replace(f,"");for(let h=i.length;h>=0;h--){let d=i.slice(h);if(f.test(d))return i.slice(0,h)}return i}case"PatternReplacement":{let c="";if(n.pattern)for(let d of n.pattern.parts)if(d.type==="Glob")c+=G(d.pattern,!0);else if(d.type==="Literal")c+=G(d.value,!0);else if(d.type==="SingleQuoted"||d.type==="Escaped")c+=H(d.value);else if(d.type==="DoubleQuoted"){let m=await Ae(t,d.parts);c+=H(m)}else if(d.type==="ParameterExpansion"){let m=await J(t,d);c+=G(m,!0)}else{let m=await J(t,d);c+=H(m)}let f=n.replacement?await Ae(t,n.replacement.parts):"";if(c==="")return i;n.anchor==="start"?c=`^${c}`:n.anchor==="end"&&(c=`${c}$`);let h=n.all?"g":"";try{let d=new RegExp(c,h);if(n.all){let m="",y=0,g=d.exec(i);for(;g!==null&&!(g[0].length===0&&g.index===i.length);)m+=i.slice(y,g.index)+f,y=g.index+g[0].length,g[0].length===0&&y++,g=d.exec(i);return m+=i.slice(y),m}return i.replace(d,f)}catch{return i}}default:return ls(t,e,s)}}function Vt(t,e,s){switch(s){case"+":return t+e;case"-":return t-e;case"*":return t*e;case"/":return e!==0?Math.trunc(t/e):0;case"%":return e!==0?t%e:0;case"**":if(e<0)throw new F("exponent less than 0");return t**e;case"<<":return t<<e;case">>":return t>>e;case"<":return t<e?1:0;case"<=":return t<=e?1:0;case">":return t>e?1:0;case">=":return t>=e?1:0;case"==":return t===e?1:0;case"!=":return t!==e?1:0;case"&":return t&e;case"|":return t|e;case"^":return t^e;case",":return e;default:return 0}}function fs(t,e,s){switch(s){case"=":return e;case"+=":return t+e;case"-=":return t-e;case"*=":return t*e;case"/=":return e!==0?Math.trunc(t/e):0;case"%=":return e!==0?t%e:0;case"<<=":return t<<e;case">>=":return t>>e;case"&=":return t&e;case"|=":return t|e;case"^=":return t^e;default:return e}}function Gt(t,e){switch(e){case"-":return-t;case"+":return+t;case"!":return t===0?1:0;case"~":return~t;default:return t}}function In(t,e){let s=t.state.env[e];if(s!==void 0)return s;let r=t.state.env[`${e}_0`];return r!==void 0?r:Q(t,e)}function $e(t){if(!t)return 0;let e=Number.parseInt(t,10);if(!Number.isNaN(e)&&/^-?\d+$/.test(t.trim()))return e;let s=t.trim();if(!s)return 0;try{let r=new M,{expr:n,pos:o}=ne(r,s,0);if(o<s.length){let i=s.slice(o).trim().split(/\s+/)[0];throw new F(`${s}: syntax error in expression (error token is "${i}")`)}return n.type==="ArithNumber"?n.value:e||0}catch(r){if(r instanceof F)throw r;let n=s.split(/\s+/).slice(1)[0]||s;throw new F(`${s}: syntax error in expression (error token is "${n}")`)}}function tt(t,e,s=new Set){if(s.has(e))return 0;s.add(e);let r=In(t,e);if(!r)return 0;let n=Number.parseInt(r,10);if(!Number.isNaN(n)&&/^-?\d+$/.test(r.trim()))return n;let o=r.trim();if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(o))return tt(t,o,s);try{let i=new M,{expr:a}=ne(i,o,0);return K(t,a,s)}catch{return 0}}function K(t,e,s){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new F("value too great for base");return e.value;case"ArithVariable":return tt(t,e.name,s);case"ArithBinary":{if(e.operator==="||")return K(t,e.left,s)||K(t,e.right,s)?1:0;if(e.operator==="&&")return K(t,e.left,s)&&K(t,e.right,s)?1:0;let r=K(t,e.left,s),n=K(t,e.right,s);return Vt(r,n,e.operator)}case"ArithUnary":{let r=K(t,e.operand,s);return Gt(r,e.operator)}case"ArithTernary":return K(t,e.condition,s)?K(t,e.consequent,s):K(t,e.alternate,s);case"ArithGroup":return K(t,e.expression,s);default:return C(t,e)}}function de(t,e){if(e.startsWith("#")){let h=e.slice(1),d=t.state.env[h]||"";return String(d.length)}if(e.startsWith("!")){let h=e.slice(1),d=t.state.env[h]||"";return t.state.env[d]||""}let s=[":-",":=",":?",":+","-","=","?","+"],r=-1,n="";for(let h of s){let d=e.indexOf(h);d>0&&(r===-1||d<r)&&(r=d,n=h)}if(r===-1)return Q(t,e);let o=e.slice(0,r),i=e.slice(r+n.length),a=t.state.env[o],l=a===void 0,c=a==="",f=n.startsWith(":");switch(n){case":-":case"-":return l||f&&c?i:a||"";case":=":case"=":return l||f&&c?(t.state.env[o]=i,i):a||"";case":+":case"+":return!(l||f&&c)?i:"";case":?":case"?":{if(l||f&&c)throw new Error(i||`${o}: parameter null or not set`);return a||""}default:return a||""}}function C(t,e){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new F("value too great for base");return e.value;case"ArithVariable":return tt(t,e.name);case"ArithNested":return C(t,e.expression);case"ArithCommandSubst":return 0;case"ArithBracedExpansion":{let s=de(t,e.content);return Number.parseInt(s,10)||0}case"ArithDynamicBase":{let s=de(t,e.baseExpr),r=Number.parseInt(s,10);if(r<2||r>64)return 0;let n=`${r}#${e.value}`;return be(n)}case"ArithDynamicNumber":{let r=de(t,e.prefix)+e.suffix;return be(r)}case"ArithArrayElement":{let s=t.state.associativeArrays?.has(e.array),r;if(e.stringKey!==void 0)r=`${e.array}_${e.stringKey}`;else if(s&&e.index?.type==="ArithVariable")r=`${e.array}_${e.index.name}`;else if(e.index){let o=C(t,e.index);if(o<0){let a=W(t,e.array);if(a.length===0)return t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${e.array}: bad array subscript
39
+ `&&(i+=c),o+=2):(i+=e[o],o++)}else i+=e[o],o++;o>=e.length&&this.error("unexpected EOF while looking for matching ``'");let l=new t().parse(i);return{part:A.commandSubstitution(l,!0),endIndex:o+1}}parseArithmeticExpansion(e,n){let r=n+3,s=1,o=0,i=r;for(;i<e.length-1&&s>0;)e[i]==="$"&&e[i+1]==="("?e[i+2]==="("?(s++,i+=3):(o++,i+=2):e[i]==="("&&e[i+1]==="("?(s++,i+=2):e[i]===")"&&e[i+1]===")"?o>0?(o--,i++):(s--,s>0&&(i+=2)):e[i]==="("?(o++,i++):(e[i]===")"&&o>0&&o--,i++);let a=e.slice(r,i),l=this.parseArithmeticExpression(a);return{part:A.arithmeticExpansion(l),endIndex:i+2}}parseArithmeticCommand(){this.expect(u.DPAREN_START);let e="",n=1,r=0,s=!1,o=!1;for(;n>0&&!this.check(u.EOF);){if(s){if(s=!1,r>0){r--,e+=")";continue}if(this.check(u.RPAREN)){n--,o=!0,this.advance();continue}if(this.check(u.DPAREN_END)){n--,o=!0;continue}e+=")";continue}this.check(u.DPAREN_START)?(n++,e+="((",this.advance()):this.check(u.DPAREN_END)?r>=2?(r-=2,e+="))",this.advance()):r===1?(r--,e+=")",s=!0,this.advance()):(n--,o=!0,n>0&&(e+="))"),this.advance()):this.check(u.LPAREN)?(r++,e+="(",this.advance()):this.check(u.RPAREN)?(r>0&&r--,e+=")",this.advance()):(e+=this.current().value,this.advance())}o||this.expect(u.DPAREN_END);let i=this.parseArithmeticExpression(e.trim()),a=this.parseOptionalRedirections();return A.arithmeticCommand(i,a)}parseConditionalCommand(){this.expect(u.DBRACK_START);let e=Ft(this);this.expect(u.DBRACK_END);let n=this.parseOptionalRedirections();return A.conditionalCommand(e,n)}parseFunctionDef(){let e;this.check(u.FUNCTION)?(this.advance(),e=this.expect(u.NAME,"Expected function name").value,this.check(u.LPAREN)&&(this.advance(),this.expect(u.RPAREN))):(e=this.advance().value,this.expect(u.LPAREN),this.expect(u.RPAREN)),this.skipNewlines();let n=this.parseCompoundCommandBody(),r=this.parseOptionalRedirections();return A.functionDef(e,n,r)}parseCompoundCommandBody(){if(this.check(u.LBRACE))return Lt(this);if(this.check(u.LPAREN))return _t(this);if(this.check(u.IF))return It(this);if(this.check(u.FOR))return Rt(this);if(this.check(u.WHILE))return kt(this);if(this.check(u.UNTIL))return Dt(this);if(this.check(u.CASE))return Ot(this);this.error("Expected compound command for function body")}parseCompoundList(){let e=[];for(this.skipNewlines();!this.check(u.EOF,u.FI,u.ELSE,u.ELIF,u.THEN,u.DO,u.DONE,u.ESAC,u.RPAREN,u.RBRACE,u.DSEMI,u.SEMI_AND,u.SEMI_SEMI_AND)&&this.isCommandStart();){this.checkIterationLimit();let n=this.pos,r=this.parseStatement();if(r&&e.push(r),this.skipSeparators(),this.pos===n&&!r)break}return e}parseOptionalRedirections(){let e=[];for(;Ke(this);){this.checkIterationLimit();let n=this.pos;if(e.push(Xe(this)),this.pos===n)break}return e}parseArithmeticExpression(e){return T(this,e)}};function ue(t){return new M().parse(t)}var Ne=class{fs;cwd;constructor(e,n){this.fs=e,this.cwd=n}isGlobPattern(e){return e.includes("*")||e.includes("?")||/\[.*\]/.test(e)}async expandArgs(e,n){let r=[];for(let s=0;s<e.length;s++){let o=e[s];if((n?.[s]??!1)||!this.isGlobPattern(o))r.push(o);else{let a=await this.expand(o);a.length>0?r.push(...a):r.push(o)}}return r}async expand(e){return e.includes("**")?this.expandRecursive(e):this.expandSimple(e)}async expandSimple(e){let n=[],r=e.lastIndexOf("/"),s,o;r===-1?(s=this.cwd,o=e):(s=e.slice(0,r)||"/",o=e.slice(r+1));let i=this.fs.resolvePath(this.cwd,s);try{let a=await this.fs.readdir(i);for(let l of a)if(this.matchPattern(l,o)){let c=r===-1?l:`${s}/${l}`;n.push(c)}}catch{}return n.sort()}async expandRecursive(e){let n=[],r=e.indexOf("**"),s=e.slice(0,r).replace(/\/$/,"")||".",i=e.slice(r+2).replace(/^\//,"");return await this.walkDirectory(s,i,n),n.sort()}async walkDirectory(e,n,r){let s=this.fs.resolvePath(this.cwd,e);try{let o=await this.fs.readdir(s);for(let i of o){let a=e==="."?i:`${e}/${i}`,l=this.fs.resolvePath(this.cwd,a);try{(await this.fs.stat(l)).isDirectory?await this.walkDirectory(a,n,r):n&&this.matchPattern(i,n)&&r.push(a)}catch{}}}catch{}}matchPattern(e,n){return this.patternToRegex(n).test(e)}patternToRegex(e){let n="^";for(let r=0;r<e.length;r++){let s=e[r];if(s==="*")n+=".*";else if(s==="?")n+=".";else if(s==="["){let o=r+1,i="[";for(o<e.length&&(e[o]==="^"||e[o]==="!")&&(i+="^",o++),o<e.length&&e[o]==="]"&&(i+="\\]",o++);o<e.length&&e[o]!=="]";){if(e[o]==="["&&o+1<e.length&&e[o+1]===":"){let a=e.indexOf(":]",o+2);if(a!==-1){let l=e.slice(o+2,a),c=this.posixClassToRegex(l);i+=c,o=a+2;continue}}if(e[o]==="\\"&&o+1<e.length){i+=`\\${e[o+1]}`,o+=2;continue}e[o]==="-"?i+="\\-":i+=e[o],o++}i+="]",n+=i,r=o}else if(s==="\\"&&r+1<e.length){let o=e[r+1];/[.+^${}()|\\*?[\]]/.test(o)?n+=`\\${o}`:n+=o,r++}else/[.+^${}()|]/.test(s)?n+=`\\${s}`:n+=s}return n+="$",new RegExp(n)}posixClassToRegex(e){return{alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"!-~",lower:"a-z",print:" -~",punct:"!-/:-@\\[-`{-~",space:" \\t\\n\\r\\f\\v",upper:"A-Z",word:"a-zA-Z0-9_",xdigit:"0-9a-fA-F"}[e]||""}};function q(t){switch(t.type){case"ArithCommandSubst":return!0;case"ArithNested":return q(t.expression);case"ArithBinary":return q(t.left)||q(t.right);case"ArithUnary":return q(t.operand);case"ArithTernary":return q(t.condition)||q(t.consequent)||q(t.alternate);case"ArithAssignment":return q(t.value);case"ArithGroup":return q(t.expression);case"ArithArrayElement":return t.index?q(t.index):!1;case"ArithConcat":return t.parts.some(q);default:return!1}}function Mt(t){let e=t.operation;return e?!!("word"in e&&e.word&&ie(e.word)||e.type==="PatternReplacement"&&(e.pattern&&ie(e.pattern)||e.replacement&&ie(e.replacement))||e.type==="PatternRemoval"&&e.pattern&&ie(e.pattern)):!1}function Ye(t){switch(t.type){case"CommandSubstitution":return!0;case"ArithmeticExpansion":return q(t.expression.expression);case"DoubleQuoted":return t.parts.some(Ye);case"BraceExpansion":return t.items.some(e=>e.type==="Word"&&ie(e.word));case"ParameterExpansion":return Mt(t);default:return!1}}function ie(t){return t.parts.some(Ye)}function Bt(t){if(!t.operation)return!1;let e=t.operation,n;if((e.type==="DefaultValue"||e.type==="AssignDefault"||e.type==="UseAlternative"||e.type==="ErrorIfUnset")&&(n=e.word?.parts),!n)return!1;for(let r of n)if(r.type==="DoubleQuoted"||r.type==="SingleQuoted")return!0;return!1}function Yr(t){let e=!1,n=!1,r=!1,s=!1,o=!1;for(let i of t){if((i.type==="SingleQuoted"||i.type==="DoubleQuoted")&&(e=!0,i.type==="DoubleQuoted"))for(let a of i.parts)a.type==="ParameterExpansion"&&a.parameter.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/)&&!a.operation&&(s=!0);i.type==="CommandSubstitution"&&(n=!0),i.type==="ParameterExpansion"&&(o=!0,(i.parameter==="@"||i.parameter==="*")&&(r=!0),Bt(i)&&(e=!0))}return{hasQuoted:e,hasCommandSub:n,hasArrayVar:r,hasArrayAtExpansion:s,hasParamExpansion:o}}function Ns(t,e,n,r,s){let o=n??1;o===0&&(o=1);let i=Math.abs(o),a=[],l=0;r?.match(/^-?0\d/)&&(l=Math.max(l,r.replace(/^-/,"").length)),s?.match(/^-?0\d/)&&(l=Math.max(l,s.replace(/^-/,"").length));let c=f=>{if(l>0){let d=f<0,h=String(Math.abs(f)).padStart(l,"0");return d?`-${h}`:h}return String(f)};if(t<=e)for(let f=t,d=0;f<=e&&d<1e4;f+=i,d++)a.push(c(f));else for(let f=t,d=0;f>=e&&d<1e4;f-=i,d++)a.push(c(f));return a}function Cs(t,e,n){let r=n??1;r===0&&(r=1);let s=t.charCodeAt(0),o=e.charCodeAt(0),i=Math.abs(r),a=t>="A"&&t<="Z",l=t>="a"&&t<="z",c=e>="A"&&e<="Z",f=e>="a"&&e<="z";if(a&&f||l&&c)return null;let d=[];if(s<=o)for(let h=s,m=0;h<=o&&m<1e4;h+=i,m++)d.push(String.fromCharCode(h));else for(let h=s,m=0;h>=o&&m<1e4;h-=i,m++)d.push(String.fromCharCode(h));return d}function Fe(t,e,n,r,s){let o=n!==void 0?`..${n}`:"";return typeof t=="number"&&typeof e=="number"?{expanded:Ns(t,e,n,r,s),literal:`{${t}..${e}${o}}`}:typeof t=="string"&&typeof e=="string"?{expanded:Cs(t,e,n),literal:`{${t}..${e}${o}}`}:{expanded:null,literal:`{${t}..${e}${o}}`}}function G(t,e){let n="",r=0;for(;r<t.length;){let s=t[r];if(s==="\\")if(r+1<t.length){let o=t[r+1];/[\\^$.|+(){}[\]*?]/.test(o)?n+=`\\${o}`:n+=o,r+=2}else n+="\\\\",r++;else if(s==="*")n+=e?".*":".*?",r++;else if(s==="?")n+=".",r++;else if(s==="["){let o=$s(t,r);if(o===-1)n+="\\[",r++;else{let i=t.slice(r+1,o);n+=Ps(i),r=o+1}}else/[\^$.|+(){}]/.test(s)?(n+=`\\${s}`,r++):(n+=s,r++)}return n}function $s(t,e){let n=e+1;for(n<t.length&&t[n]==="^"&&n++,n<t.length&&t[n]==="]"&&n++;n<t.length;){if(t[n]==="\\"&&n+1<t.length){n+=2;continue}if(t[n]==="]")return n;if(t[n]==="'"){let r=t.indexOf("'",n+1);if(r!==-1){n=r+1;continue}}if(t[n]==="["&&n+1<t.length&&t[n+1]===":"){let r=t.indexOf(":]",n+2);if(r!==-1){n=r+2;continue}}n++}return-1}function Ps(t){let e="[",n=0;for((t[0]==="^"||t[0]==="!")&&(e+="^",n++);n<t.length;){if(t[n]==="'"){let s=t.indexOf("'",n+1);if(s!==-1){let o=t.slice(n+1,s);for(let i of o)i==="\\"?e+="\\\\":i==="]"?e+="\\]":i==="^"&&e==="["?e+="\\^":e+=i;n=s+1;continue}}if(t[n]==="["&&n+1<t.length&&t[n+1]===":"){let s=t.indexOf(":]",n+2);if(s!==-1){let o=t.slice(n+2,s);e+=Is(o),n=s+2;continue}}let r=t[n];r==="\\"?n+1<t.length?(e+=`\\${t[n+1]}`,n+=2):(e+="\\\\",n++):r==="-"&&n>0&&n<t.length-1?(e+="-",n++):r==="^"&&n===0?(e+="^",n++):(r==="]"&&n===0?e+="\\]":e+=r,n++)}return e+="]",e}var vs={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"!-~",lower:"a-z",print:" -~",punct:"!-/:-@\\[-`{-~",space:" \\t\\n\\r\\f\\v",upper:"A-Z",word:"a-zA-Z0-9_",xdigit:"0-9A-Fa-f"};function Is(t){return vs[t]??""}function We(t,e){let n=`${e}_`,r=[];for(let s of Object.keys(t.state.env))if(s.startsWith(n)){let o=s.slice(n.length),i=Number.parseInt(o,10);!Number.isNaN(i)&&String(i)===o&&r.push(i)}return r.sort((s,o)=>s-o)}function zt(t,e){let n=`${e}_`;for(let r of Object.keys(t.state.env))r.startsWith(n)&&delete t.state.env[r]}function Ut(t,e){let n=`${e}_`,r=[];for(let s of Object.keys(t.state.env))if(s.startsWith(n)&&!s.includes("__")){let o=s.slice(n.length);r.push(o)}return r.sort()}function Jr(t){return t.startsWith("'")&&t.endsWith("'")||t.startsWith('"')&&t.endsWith('"')?t.slice(1,-1):t}function Je(t){return t.IFS??`
40
+ `}function en(t){return t.IFS===""}function Me(t){return t.split("").map(e=>/[\\^$.*+?()[\]{}|-]/.test(e)?`\\${e}`:e===" "?"\\t":e===`
41
+ `?"\\n":e).join("")}function Rs(t,e){let n=Me(t);return new RegExp(`[${n}]+`,e)}function ks(t){let e=Me(t);return new RegExp(`^[${e}]+`)}function Ds(t){let e=Me(t);return new RegExp(`[${e}]+$`)}function Ce(t){let e=t.IFS;return e===void 0?" ":e[0]||""}function tn(t,e){if(e==="")return{words:[t],wordStarts:[0]};let n=[],r=[],s=Rs(e,"g"),o=0,i=t.match(ks(e));i&&(o=i[0].length),s.lastIndex=o;let a=s.exec(t);for(;a!==null;)a.index>o&&(r.push(o),n.push(t.substring(o,a.index))),o=s.lastIndex,a=s.exec(t);return o<t.length&&(r.push(o),n.push(t.substring(o))),{words:n,wordStarts:r}}function rn(t,e){return e===""?t:t.replace(Ds(e),"")}function F(t,e){return t.state.associativeArrays?.has(e)?Ut(t,e).map(o=>[o,t.state.env[`${e}_${o}`]]):We(t,e).map(s=>[s,t.state.env[`${e}_${s}`]])}function nn(t,e){return t.state.associativeArrays?.has(e)?Ut(t,e).length>0:We(t,e).length>0}function Q(t,e,n=!0,r=!1){switch(e){case"?":return String(t.state.lastExitCode);case"$":return String(process.pid);case"#":return t.state.env["#"]||"0";case"@":return t.state.env["@"]||"";case"_":return t.state.lastArg;case"-":{let i="";return t.state.options.errexit&&(i+="e"),t.state.options.nounset&&(i+="u"),t.state.options.verbose&&(i+="v"),t.state.options.xtrace&&(i+="x"),t.state.options.pipefail&&(i+="p"),i}case"*":{let i=Number.parseInt(t.state.env["#"]||"0",10);if(i===0)return"";let a=[];for(let l=1;l<=i;l++)a.push(t.state.env[String(l)]||"");return a.join(Ce(t.state.env))}case"0":return t.state.env[0]||"bash";case"PWD":return t.state.env.PWD!==void 0?t.state.env.PWD:"";case"OLDPWD":return t.state.env.OLDPWD!==void 0?t.state.env.OLDPWD:"";case"PPID":{let{ppid:i}=Te();return String(i)}case"UID":{let{uid:i}=Te();return String(i)}case"EUID":return String(process.geteuid?.()??Te().uid);case"RANDOM":return String(Math.floor(Math.random()*32768));case"SECONDS":return String(Math.floor((Date.now()-t.state.startTime)/1e3));case"BASH_VERSION":return br;case"!":return String(t.state.lastBackgroundPid);case"LINENO":return String(t.state.currentLine)}if(/^[a-zA-Z_][a-zA-Z0-9_]*\[\]$/.test(e))throw new ye(`\${${e}}`);let s=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(s){let i=s[1],a=s[2];if(a==="@"||a==="*"){let d=F(t,i);if(d.length>0)return d.map(([,m])=>m).join(" ");let h=t.state.env[i];return h!==void 0?h:""}if(t.state.associativeArrays?.has(i)){let d=Jr(a),h=t.state.env[`${i}_${d}`];if(h===void 0&&n&&t.state.options.nounset)throw new J(`${i}[${a}]`);return h||""}let c;if(/^-?\d+$/.test(a))c=Number.parseInt(a,10);else try{let d=new M,h=T(d,a);c=$(t,h.expression)}catch{let d=t.state.env[a];c=d?Number.parseInt(d,10):0,Number.isNaN(c)&&(c=0)}if(c<0){let d=F(t,i);if(d.length===0)return t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${i}: bad array subscript
42
+ `,"";let m=Math.max(...d.map(([g])=>typeof g=="number"?g:0))+1+c;return m<0?(t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${i}: bad array subscript
43
+ `,""):t.state.env[`${i}_${m}`]||""}let f=t.state.env[`${i}_${c}`];if(f===void 0&&n&&t.state.options.nounset)throw new J(`${i}[${c}]`);return f||""}if(/^[1-9][0-9]*$/.test(e)){let i=t.state.env[e];if(i===void 0&&n&&t.state.options.nounset)throw new J(e);return i||""}let o=t.state.env[e];if(o===void 0&&n&&t.state.options.nounset)throw new J(e);return o||""}async function sn(t,e,n,r,s){let o=[];for(let f of e){let d=f.type==="ParameterExpansion"||f.type==="CommandSubstitution"||f.type==="ArithmeticExpansion";if(f.type==="ParameterExpansion"&&Bt(f)){let h=await s(t,f);o.push({value:h,splittable:!1})}else{let h=await s(t,f);o.push({value:h,splittable:d})}}if(!o.some(f=>f.splittable&&new RegExp(`[${r}]`).test(f.value))){let f=o.map(d=>d.value).join("");return f?[f]:[]}let a=new RegExp(`[${r}]+`),l=[],c="";for(let f=0;f<o.length;f++){let d=o[f];if(!d.splittable)c+=d.value;else{let h=d.value.split(a);for(let m=0;m<h.length;m++)m===0?c+=h[m]:(c!==""&&l.push(c),c=h[m])}}return c!==""&&l.push(c),l}function H(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function on(t){switch(t.type){case"Literal":return t.value;case"SingleQuoted":return t.value;case"Escaped":return t.value;default:return null}}function an(t){switch(t.type){case"SingleQuoted":case"Escaped":case"DoubleQuoted":return!0;case"Literal":return t.value==="";default:return!1}}function Vt(t){if(t==="")return"''";if(!/['\\\n\r\t\x00-\x1f\x7f]/.test(t))return`'${t}'`;let e="$'";for(let n of t)switch(n){case"'":e+="\\'";break;case"\\":e+="\\\\";break;case`
44
+ `:e+="\\n";break;case"\r":e+="\\r";break;case" ":e+="\\t";break;default:{let r=n.charCodeAt(0);r<32||r===127?e+=`\\x${r.toString(16).padStart(2,"0")}`:e+=n}}return`${e}'`}function ge(t,e,n=!1){return e.map(r=>oe(t,r,n)).join("")}async function Ae(t,e,n=!1){let r=[];for(let s of e)r.push(await K(t,s));return r.join("")}function Os(t){return an(t)}function cn(t){if(t.parts.length===0)return!0;for(let e of t.parts)if(!Os(e))return!1;return!0}function ln(t){return t.replace(/([*?[\]\\])/g,"\\$1")}function fn(t,e,n=!1){let r=on(e);if(r!==null)return r;switch(e.type){case"ParameterExpansion":return pn(t,e,n);case"TildeExpansion":return n?e.user===null?"~":`~${e.user}`:e.user===null?t.state.env.HOME||"/home/user":e.user==="root"?"/root":`~${e.user}`;case"Glob":return e.pattern;default:return null}}function oe(t,e,n=!1){let r=fn(t,e,n);if(r!==null)return r;switch(e.type){case"DoubleQuoted":{let s=[];for(let o of e.parts)s.push(oe(t,o,!0));return s.join("")}case"ArithmeticExpansion":return String($(t,e.expression.expression));case"BraceExpansion":{let s=[];for(let o of e.items)if(o.type==="Range"){let i=Fe(o.start,o.end,o.step,o.startStr,o.endStr);if(i.expanded)s.push(...i.expanded);else return i.literal}else s.push(et(t,o.word));return s.join(" ")}default:return""}}function et(t,e){let n=e.parts,r=n.length;if(r===1)return oe(t,n[0]);let s=[];for(let o=0;o<r;o++)s.push(oe(t,n[o]));return s.join("")}async function I(t,e){return ie(e)?mn(t,e):et(t,e)}function tt(t){for(let e of t)if(e.type==="BraceExpansion"||e.type==="DoubleQuoted"&&tt(e.parts))return!0;return!1}function _s(t){for(let e of t){if(e.type==="BraceExpansion"){for(let n of e.items)if(n.type==="Word"&&ie(n.word))return!0}if(Ye(e))return!0}return!1}var un=1e4,$e=1e5;function dn(t,e,n={count:0}){if(n.count>$e)return[[]];let r=[[]];for(let s of e)if(s.type==="BraceExpansion"){let o=[],i=!1,a="";for(let f of s.items)if(f.type==="Range"){let d=Fe(f.start,f.end,f.step,f.startStr,f.endStr);if(d.expanded)for(let h of d.expanded)n.count++,o.push(h);else{i=!0,a=d.literal;break}}else{let d=dn(t,f.word.parts,n);for(let h of d)n.count++,o.push(h.join(""))}if(i){for(let f of r)n.count++,f.push(a);continue}if(r.length*o.length>un||n.count>$e)return r;let c=[];for(let f of r)for(let d of o){if(n.count++,n.count>$e)return c.length>0?c:r;c.push([...f,d])}r=c}else{let o=oe(t,s);for(let i of r)n.count++,i.push(o)}return r}function Ls(t,e){let n=e.parts;return tt(n)?dn(t,n).map(s=>s.join("")):[et(t,e)]}async function hn(t,e,n={count:0}){if(n.count>$e)return[[]];let r=[[]];for(let s of e)if(s.type==="BraceExpansion"){let o=[],i=!1,a="";for(let f of s.items)if(f.type==="Range"){let d=Fe(f.start,f.end,f.step,f.startStr,f.endStr);if(d.expanded)for(let h of d.expanded)n.count++,o.push(h);else{i=!0,a=d.literal;break}}else{let d=await hn(t,f.word.parts,n);for(let h of d)n.count++,o.push(h.join(""))}if(i){for(let f of r)n.count++,f.push(a);continue}if(r.length*o.length>un||n.count>$e)return r;let c=[];for(let f of r)for(let d of o){if(n.count++,n.count>$e)return c.length>0?c:r;c.push([...f,d])}r=c}else{let o=await K(t,s);for(let i of r)n.count++,i.push(o)}return r}async function Ts(t,e){let n=e.parts;return tt(n)?(await hn(t,n)).map(s=>s.join("")):[await I(t,e)]}async function Be(t,e){let n=e.parts,{hasQuoted:r,hasCommandSub:s,hasArrayVar:o,hasArrayAtExpansion:i,hasParamExpansion:a}=Yr(n),c=tt(n)?_s(n)?await Ts(t,e):Ls(t,e):null;if(c&&c.length>1){let h=[];for(let m of c)if(!r&&/[*?[]/.test(m)){let g=await new Ne(t.fs,t.state.cwd).expand(m);g.length>0?h.push(...g):h.push(m)}else h.push(m);return{values:h,quoted:!1}}if(i&&n.length===1&&n[0].type==="DoubleQuoted"){let h=n[0];if(h.parts.length===1&&h.parts[0].type==="ParameterExpansion"){let E=h.parts[0].parameter.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@]\]$/);if(E){let g=E[1],p=F(t,g);if(p.length>0)return{values:p.map(([,w])=>w),quoted:!0};let y=t.state.env[g];return y!==void 0?{values:[y],quoted:!0}:{values:[],quoted:!0}}}}if(n.length===1&&n[0].type==="DoubleQuoted"){let h=n[0],m=-1,E=!1;for(let g=0;g<h.parts.length;g++){let p=h.parts[g];if(p.type==="ParameterExpansion"&&(p.parameter==="@"||p.parameter==="*")){m=g,E=p.parameter==="*";break}}if(m!==-1){let g=h.parts[m];g.type==="ParameterExpansion"&&g.operation&&(m=-1)}if(m!==-1){let g=Number.parseInt(t.state.env["#"]||"0",10),p="";for(let N=0;N<m;N++)p+=await K(t,h.parts[N]);let y="";for(let N=m+1;N<h.parts.length;N++)y+=await K(t,h.parts[N]);if(g===0){if(E)return{values:[p+y],quoted:!0};let N=p+y;return{values:N?[N]:[],quoted:!0}}let w=[];for(let N=1;N<=g;N++)w.push(t.state.env[String(N)]||"");if(E){let N=Ce(t.state.env);return{values:[p+w.join(N)+y],quoted:!0}}return w.length===1?{values:[p+w[0]+y],quoted:!0}:{values:[p+w[0],...w.slice(1,-1),w[w.length-1]+y],quoted:!0}}}if((s||o||a)&&!en(t.state.env)){let h=Je(t.state.env),m=Me(h),E=await sn(t,n,h,m,K),g=[],p=new Ne(t.fs,t.state.cwd);for(let y of E)if(/[*?[]/.test(y)){let w=await p.expand(y);w.length>0?g.push(...w):g.push(y)}else g.push(y);return{values:g,quoted:!1}}let d=ie(e)?await mn(t,e):et(t,e);if(!r&&/[*?[]/.test(d)){let m=await new Ne(t.fs,t.state.cwd).expand(d);if(m.length>0)return{values:m,quoted:!1}}return d===""&&!r?{values:[],quoted:!1}:{values:[d],quoted:r}}async function mn(t,e){let n=e.parts,r=n.length;if(r===1)return K(t,n[0]);let s=[];for(let o=0;o<r;o++)s.push(await K(t,n[o]));return s.join("")}async function K(t,e){if(e.type==="ParameterExpansion"&&Mt(e))return Fs(t,e);let n=fn(t,e);if(n!==null)return n;switch(e.type){case"DoubleQuoted":{let r=[];for(let s of e.parts)r.push(await K(t,s));return r.join("")}case"CommandSubstitution":try{let r=await t.executeScript(e.body);return t.state.lastExitCode=r.exitCode,t.state.env["?"]=String(r.exitCode),r.stdout.replace(/\n+$/,"")}catch(r){if(r instanceof z)throw r;if(r instanceof k)return t.state.lastExitCode=r.exitCode,t.state.env["?"]=String(r.exitCode),r.stdout.replace(/\n+$/,"");throw r}case"ArithmeticExpansion":return String(await P(t,e.expression.expression));case"BraceExpansion":{let r=[];for(let s of e.items)if(s.type==="Range"){let o=Fe(s.start,s.end,s.step,s.startStr,s.endStr);if(o.expanded)r.push(...o.expanded);else return o.literal}else r.push(await I(t,s.word));return r.join(" ")}default:return""}}function pn(t,e,n=!1){let{parameter:r,operation:s}=e,o=s&&(s.type==="DefaultValue"||s.type==="AssignDefault"||s.type==="UseAlternative"||s.type==="ErrorIfUnset"),i=Q(t,r,!o);if(!s)return i;let a=!(r in t.state.env),l=i==="";switch(s.type){case"DefaultValue":return(a||s.checkEmpty&&l)&&s.word?ge(t,s.word.parts,n):i;case"AssignDefault":{if((a||s.checkEmpty&&l)&&s.word){let f=ge(t,s.word.parts,n),d=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(d){let[,h,m]=d,E;if(/^\d+$/.test(m))E=Number.parseInt(m,10);else{try{let p=new M,y=T(p,m);E=$(t,y.expression)}catch{let p=t.state.env[m];E=p?Number.parseInt(p,10):0}Number.isNaN(E)&&(E=0)}t.state.env[`${h}_${E}`]=f;let g=Number.parseInt(t.state.env[`${h}__length`]||"0",10);E>=g&&(t.state.env[`${h}__length`]=String(E+1))}else t.state.env[r]=f;return f}return i}case"ErrorIfUnset":{if(a||s.checkEmpty&&l){let f=s.word?ge(t,s.word.parts,n):`${r}: parameter null or not set`;throw new k(1,"",`bash: ${f}
45
+ `)}return i}case"UseAlternative":return!(a||s.checkEmpty&&l)&&s.word?ge(t,s.word.parts,n):"";case"Length":{let c=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(c){let f=F(t,c[1]);return String(f.length)}if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)&&nn(t,r)){let f=t.state.env[`${r}_0`]||"";return String(f.length)}return String(i.length)}case"LengthSliceError":throw new ye(r);case"Substring":{let c=s.offset?$(t,s.offset.expression):0,f=s.length?$(t,s.length.expression):void 0;if(r==="@"||r==="*"){let E=(t.state.env["@"]||"").split(" ").filter(w=>w),g=t.state.env[0]||"bash",p=c===0?[g,...E]:E,y=c===0?0:c-1;if(y<0||y>=p.length)return"";if(f!==void 0){let w=f<0?p.length+f:y+f;return p.slice(y,Math.max(y,w)).join(" ")}return p.slice(y).join(" ")}let d=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(d){let g=F(t,d[1]).map(([,y])=>y),p=c;if(p<0&&(p=g.length+p,p<0))return"";if(f!==void 0){if(f<0){let y=g.length+f;return g.slice(p,Math.max(p,y)).join(" ")}return g.slice(p,p+f).join(" ")}return g.slice(p).join(" ")}let h=[...i],m=c;if(m<0&&(m=Math.max(0,h.length+m)),f!==void 0){if(f<0){let E=h.length+f;return h.slice(m,Math.max(m,E)).join("")}return h.slice(m,m+f).join("")}return h.slice(m).join("")}case"PatternRemoval":{let c="";if(s.pattern)for(let d of s.pattern.parts)if(d.type==="Glob")c+=G(d.pattern,s.greedy);else if(d.type==="Literal")c+=G(d.value,s.greedy);else if(d.type==="SingleQuoted"||d.type==="Escaped")c+=H(d.value);else if(d.type==="DoubleQuoted"){let h=ge(t,d.parts);c+=H(h)}else if(d.type==="ParameterExpansion"){let h=oe(t,d);c+=G(h,s.greedy)}else{let h=oe(t,d);c+=H(h)}if(s.side==="prefix")return i.replace(new RegExp(`^${c}`),"");let f=new RegExp(`${c}$`);if(s.greedy)return i.replace(f,"");for(let d=i.length;d>=0;d--){let h=i.slice(d);if(f.test(h))return i.slice(0,d)}return i}case"PatternReplacement":{let c="";if(s.pattern)for(let h of s.pattern.parts)if(h.type==="Glob")c+=G(h.pattern,!0);else if(h.type==="Literal")c+=G(h.value,!0);else if(h.type==="SingleQuoted"||h.type==="Escaped")c+=H(h.value);else if(h.type==="DoubleQuoted"){let m=ge(t,h.parts);c+=H(m)}else if(h.type==="ParameterExpansion"){let m=oe(t,h);c+=G(m,!0)}else{let m=oe(t,h);c+=H(m)}let f=s.replacement?ge(t,s.replacement.parts):"";if(c==="")return i;s.anchor==="start"?c=`^${c}`:s.anchor==="end"&&(c=`${c}$`);let d=s.all?"g":"";try{let h=new RegExp(c,d);if(s.all){let m="",E=0,g=h.exec(i);for(;g!==null&&!(g[0].length===0&&g.index===i.length);)m+=i.slice(E,g.index)+f,E=g.index+g[0].length,g[0].length===0&&E++,g=h.exec(i);return m+=i.slice(E),m}return i.replace(h,f)}catch{return i}}case"CaseModification":return s.direction==="upper"?s.all?i.toUpperCase():i.charAt(0).toUpperCase()+i.slice(1):s.all?i.toLowerCase():i.charAt(0).toLowerCase()+i.slice(1);case"Transform":{let c=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[[@*]\]$/);if(c&&s.operator==="Q")return F(t,c[1]).map(([,h])=>Vt(h)).join(" ");switch(s.operator){case"Q":return Vt(i);case"P":return i;case"a":return"";case"A":return`${r}=${Vt(i)}`;case"E":return i.replace(/\\([\\abefnrtv'"?])/g,(f,d)=>{switch(d){case"\\":return"\\";case"a":return"\x07";case"b":return"\b";case"e":return"\x1B";case"f":return"\f";case"n":return`
46
+ `;case"r":return"\r";case"t":return" ";case"v":return"\v";case"'":return"'";case'"':return'"';case"?":return"?";default:return d}});case"K":return"";default:return i}}case"Indirection":return Q(t,i);case"ArrayKeys":{let f=F(t,s.array).map(([d])=>String(d));return s.star?f.join(Ce(t.state.env)):f.join(" ")}case"VarNamePrefix":{let c=Object.keys(t.state.env).filter(f=>f.startsWith(s.prefix)&&!f.includes("__")).sort();return s.star?c.join(Ce(t.state.env)):c.join(" ")}default:return i}}async function Fs(t,e,n=!1){let{parameter:r,operation:s}=e,o=s&&(s.type==="DefaultValue"||s.type==="AssignDefault"||s.type==="UseAlternative"||s.type==="ErrorIfUnset"),i=Q(t,r,!o);if(!s)return i;let a=!(r in t.state.env),l=i==="";switch(s.type){case"DefaultValue":return(a||s.checkEmpty&&l)&&s.word?Ae(t,s.word.parts,n):i;case"AssignDefault":{if((a||s.checkEmpty&&l)&&s.word){let f=await Ae(t,s.word.parts,n),d=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(d){let[,h,m]=d,E;if(/^\d+$/.test(m))E=Number.parseInt(m,10);else{try{let p=new M,y=T(p,m);E=await P(t,y.expression)}catch{let p=t.state.env[m];E=p?Number.parseInt(p,10):0}Number.isNaN(E)&&(E=0)}t.state.env[`${h}_${E}`]=f;let g=Number.parseInt(t.state.env[`${h}__length`]||"0",10);E>=g&&(t.state.env[`${h}__length`]=String(E+1))}else t.state.env[r]=f;return f}return i}case"ErrorIfUnset":{if(a||s.checkEmpty&&l){let f=s.word?await Ae(t,s.word.parts,n):`${r}: parameter null or not set`;throw new k(1,"",`bash: ${f}
47
+ `)}return i}case"UseAlternative":return!(a||s.checkEmpty&&l)&&s.word?Ae(t,s.word.parts,n):"";case"PatternRemoval":{let c="";if(s.pattern)for(let d of s.pattern.parts)if(d.type==="Glob")c+=G(d.pattern,s.greedy);else if(d.type==="Literal")c+=G(d.value,s.greedy);else if(d.type==="SingleQuoted"||d.type==="Escaped")c+=H(d.value);else if(d.type==="DoubleQuoted"){let h=await Ae(t,d.parts);c+=H(h)}else if(d.type==="ParameterExpansion"){let h=await K(t,d);c+=G(h,s.greedy)}else{let h=await K(t,d);c+=H(h)}if(s.side==="prefix")return i.replace(new RegExp(`^${c}`),"");let f=new RegExp(`${c}$`);if(s.greedy)return i.replace(f,"");for(let d=i.length;d>=0;d--){let h=i.slice(d);if(f.test(h))return i.slice(0,d)}return i}case"PatternReplacement":{let c="";if(s.pattern)for(let h of s.pattern.parts)if(h.type==="Glob")c+=G(h.pattern,!0);else if(h.type==="Literal")c+=G(h.value,!0);else if(h.type==="SingleQuoted"||h.type==="Escaped")c+=H(h.value);else if(h.type==="DoubleQuoted"){let m=await Ae(t,h.parts);c+=H(m)}else if(h.type==="ParameterExpansion"){let m=await K(t,h);c+=G(m,!0)}else{let m=await K(t,h);c+=H(m)}let f=s.replacement?await Ae(t,s.replacement.parts):"";if(c==="")return i;s.anchor==="start"?c=`^${c}`:s.anchor==="end"&&(c=`${c}$`);let d=s.all?"g":"";try{let h=new RegExp(c,d);if(s.all){let m="",E=0,g=h.exec(i);for(;g!==null&&!(g[0].length===0&&g.index===i.length);)m+=i.slice(E,g.index)+f,E=g.index+g[0].length,g[0].length===0&&E++,g=h.exec(i);return m+=i.slice(E),m}return i.replace(h,f)}catch{return i}}default:return pn(t,e,n)}}function Gt(t,e,n){switch(n){case"+":return t+e;case"-":return t-e;case"*":return t*e;case"/":return e!==0?Math.trunc(t/e):0;case"%":return e!==0?t%e:0;case"**":if(e<0)throw new W("exponent less than 0");return t**e;case"<<":return t<<e;case">>":return t>>e;case"<":return t<e?1:0;case"<=":return t<=e?1:0;case">":return t>e?1:0;case">=":return t>=e?1:0;case"==":return t===e?1:0;case"!=":return t!==e?1:0;case"&":return t&e;case"|":return t|e;case"^":return t^e;case",":return e;default:return 0}}function yn(t,e,n){switch(n){case"=":return e;case"+=":return t+e;case"-=":return t-e;case"*=":return t*e;case"/=":return e!==0?Math.trunc(t/e):0;case"%=":return e!==0?t%e:0;case"<<=":return t<<e;case">>=":return t>>e;case"&=":return t&e;case"|=":return t|e;case"^=":return t^e;default:return e}}function Ht(t,e){switch(e){case"-":return-t;case"+":return+t;case"!":return t===0?1:0;case"~":return~t;default:return t}}function Ws(t,e){let n=t.state.env[e];if(n!==void 0)return n;let r=t.state.env[`${e}_0`];return r!==void 0?r:Q(t,e)}function Pe(t){if(!t)return 0;let e=Number.parseInt(t,10);if(!Number.isNaN(e)&&/^-?\d+$/.test(t.trim()))return e;let n=t.trim();if(!n)return 0;try{let r=new M,{expr:s,pos:o}=ne(r,n,0);if(o<n.length){let i=n.slice(o).trim().split(/\s+/)[0];throw new W(`${n}: syntax error in expression (error token is "${i}")`)}return s.type==="ArithNumber"?s.value:e||0}catch(r){if(r instanceof W)throw r;let s=n.split(/\s+/).slice(1)[0]||n;throw new W(`${n}: syntax error in expression (error token is "${s}")`)}}function rt(t,e,n=new Set){if(n.has(e))return 0;n.add(e);let r=Ws(t,e);if(!r)return 0;let s=Number.parseInt(r,10);if(!Number.isNaN(s)&&/^-?\d+$/.test(r.trim()))return s;let o=r.trim();if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(o))return rt(t,o,n);try{let i=new M,{expr:a}=ne(i,o,0);return X(t,a,n)}catch{return 0}}function X(t,e,n){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new W("value too great for base");return e.value;case"ArithVariable":return rt(t,e.name,n);case"ArithBinary":{if(e.operator==="||")return X(t,e.left,n)||X(t,e.right,n)?1:0;if(e.operator==="&&")return X(t,e.left,n)&&X(t,e.right,n)?1:0;let r=X(t,e.left,n),s=X(t,e.right,n);return Gt(r,s,e.operator)}case"ArithUnary":{let r=X(t,e.operand,n);return Ht(r,e.operator)}case"ArithTernary":return X(t,e.condition,n)?X(t,e.consequent,n):X(t,e.alternate,n);case"ArithGroup":return X(t,e.expression,n);default:return $(t,e)}}function de(t,e){if(e.startsWith("#")){let d=e.slice(1),h=t.state.env[d]||"";return String(h.length)}if(e.startsWith("!")){let d=e.slice(1),h=t.state.env[d]||"";return t.state.env[h]||""}let n=[":-",":=",":?",":+","-","=","?","+"],r=-1,s="";for(let d of n){let h=e.indexOf(d);h>0&&(r===-1||h<r)&&(r=h,s=d)}if(r===-1)return Q(t,e);let o=e.slice(0,r),i=e.slice(r+s.length),a=t.state.env[o],l=a===void 0,c=a==="",f=s.startsWith(":");switch(s){case":-":case"-":return l||f&&c?i:a||"";case":=":case"=":return l||f&&c?(t.state.env[o]=i,i):a||"";case":+":case"+":return!(l||f&&c)?i:"";case":?":case"?":{if(l||f&&c)throw new Error(i||`${o}: parameter null or not set`);return a||""}default:return a||""}}function $(t,e){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new W("value too great for base");return e.value;case"ArithVariable":return rt(t,e.name);case"ArithNested":return $(t,e.expression);case"ArithCommandSubst":return 0;case"ArithBracedExpansion":{let n=de(t,e.content);return Number.parseInt(n,10)||0}case"ArithDynamicBase":{let n=de(t,e.baseExpr),r=Number.parseInt(n,10);if(r<2||r>64)return 0;let s=`${r}#${e.value}`;return be(s)}case"ArithDynamicNumber":{let r=de(t,e.prefix)+e.suffix;return be(r)}case"ArithArrayElement":{let n=t.state.associativeArrays?.has(e.array),r;if(e.stringKey!==void 0)r=`${e.array}_${e.stringKey}`;else if(n&&e.index?.type==="ArithVariable")r=`${e.array}_${e.index.name}`;else if(e.index){let o=$(t,e.index);if(o<0){let a=F(t,e.array);if(a.length===0)return t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${e.array}: bad array subscript
40
48
  `,0;let c=Math.max(...a.map(([f])=>typeof f=="number"?f:0))+1+o;if(c<0)return t.state.expansionStderr=(t.state.expansionStderr||"")+`bash: ${e.array}: bad array subscript
41
- `,0;o=c}r=`${e.array}_${o}`;let i=t.state.env[r];if(i!==void 0)return $e(i);if(o===0){let a=t.state.env[e.array];if(a!==void 0)return $e(a)}if(t.state.options.nounset&&!Object.keys(t.state.env).some(l=>l===e.array||l.startsWith(`${e.array}_`)))throw new Y(`${e.array}[${o}]`);return 0}else return 0;let n=t.state.env[r];return n!==void 0?$e(n):0}case"ArithDoubleSubscript":throw new F("double subscript","","");case"ArithNumberSubscript":throw new F(`${e.number}${e.errorToken}: syntax error: invalid arithmetic operator (error token is "${e.errorToken}")`);case"ArithBinary":{if(e.operator==="||")return C(t,e.left)||C(t,e.right)?1:0;if(e.operator==="&&")return C(t,e.left)&&C(t,e.right)?1:0;let s=C(t,e.left),r=C(t,e.right);return Vt(s,r,e.operator)}case"ArithUnary":{let s=C(t,e.operand);if(e.operator==="++"||e.operator==="--"){if(e.operand.type==="ArithVariable"){let r=e.operand.name,n=Number.parseInt(Q(t,r),10)||0,o=e.operator==="++"?n+1:n-1;return t.state.env[r]=String(o),e.prefix?o:n}if(e.operand.type==="ArithArrayElement"){let r=e.operand.array,n=t.state.associativeArrays?.has(r),o;if(e.operand.stringKey!==void 0)o=`${r}_${e.operand.stringKey}`;else if(n&&e.operand.index?.type==="ArithVariable")o=`${r}_${e.operand.index.name}`;else if(e.operand.index){let l=C(t,e.operand.index);o=`${r}_${l}`}else return s;let i=Number.parseInt(t.state.env[o]||"0",10)||0,a=e.operator==="++"?i+1:i-1;return t.state.env[o]=String(a),e.prefix?a:i}return s}return Gt(s,e.operator)}case"ArithTernary":return C(t,e.condition)?C(t,e.consequent):C(t,e.alternate);case"ArithAssignment":{let s=e.variable,r=s;if(e.stringKey!==void 0)r=`${s}_${e.stringKey}`;else if(e.subscript){let a=t.state.associativeArrays?.has(s);if(a&&e.subscript.type==="ArithVariable")r=`${s}_${e.subscript.name}`;else if(a){let l=C(t,e.subscript);r=`${s}_${l}`}else{let l=C(t,e.subscript);if(l<0){let c=W(t,s);c.length>0&&(l=Math.max(...c.map(([h])=>typeof h=="number"?h:0))+1+l)}r=`${s}_${l}`}}let n=Number.parseInt(t.state.env[r]||"0",10)||0,o=C(t,e.value),i=fs(n,o,e.operator);return t.state.env[r]=String(i),i}case"ArithGroup":return C(t,e.expression);case"ArithConcat":{let s="";for(let r of e.parts)s+=us(t,r);return Number.parseInt(s,10)||0}default:return 0}}function us(t,e){switch(e.type){case"ArithNumber":return String(e.value);case"ArithVariable":return Q(t,e.name);case"ArithBracedExpansion":return de(t,e.content);case"ArithCommandSubst":return"0";case"ArithConcat":{let s="";for(let r of e.parts)s+=us(t,r);return s}default:return String(C(t,e))}}async function $(t,e){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new F("value too great for base");return e.value;case"ArithVariable":return tt(t,e.name);case"ArithNested":return $(t,e.expression);case"ArithCommandSubst":{if(t.execFn){let r=(await t.execFn(e.command)).stdout.trim();return Number.parseInt(r,10)||0}return 0}case"ArithBracedExpansion":{let s=de(t,e.content);return Number.parseInt(s,10)||0}case"ArithDynamicBase":{let s=de(t,e.baseExpr),r=Number.parseInt(s,10);if(r<2||r>64)return 0;let n=`${r}#${e.value}`;return be(n)}case"ArithDynamicNumber":{let r=de(t,e.prefix)+e.suffix;return be(r)}case"ArithArrayElement":{let s=t.state.associativeArrays?.has(e.array),r;if(e.stringKey!==void 0)r=`${e.array}_${e.stringKey}`;else if(s&&e.index?.type==="ArithVariable")r=`${e.array}_${e.index.name}`;else if(e.index){let o=await $(t,e.index);r=`${e.array}_${o}`;let i=t.state.env[r];if(i!==void 0)return $e(i);if(o===0){let a=t.state.env[e.array];if(a!==void 0)return $e(a)}if(t.state.options.nounset&&!Object.keys(t.state.env).some(l=>l===e.array||l.startsWith(`${e.array}_`)))throw new Y(`${e.array}[${o}]`);return 0}else return 0;let n=t.state.env[r];return n!==void 0?$e(n):0}case"ArithDoubleSubscript":throw new F("double subscript","","");case"ArithNumberSubscript":throw new F(`${e.number}${e.errorToken}: syntax error: invalid arithmetic operator (error token is "${e.errorToken}")`);case"ArithBinary":{if(e.operator==="||")return await $(t,e.left)||await $(t,e.right)?1:0;if(e.operator==="&&")return await $(t,e.left)&&await $(t,e.right)?1:0;let s=await $(t,e.left),r=await $(t,e.right);return Vt(s,r,e.operator)}case"ArithUnary":{let s=await $(t,e.operand);if(e.operator==="++"||e.operator==="--"){if(e.operand.type==="ArithVariable"){let r=e.operand.name,n=Number.parseInt(Q(t,r),10)||0,o=e.operator==="++"?n+1:n-1;return t.state.env[r]=String(o),e.prefix?o:n}if(e.operand.type==="ArithArrayElement"){let r=e.operand.array,n=t.state.associativeArrays?.has(r),o;if(e.operand.stringKey!==void 0)o=`${r}_${e.operand.stringKey}`;else if(n&&e.operand.index?.type==="ArithVariable")o=`${r}_${e.operand.index.name}`;else if(e.operand.index){let l=await $(t,e.operand.index);o=`${r}_${l}`}else return s;let i=Number.parseInt(t.state.env[o]||"0",10)||0,a=e.operator==="++"?i+1:i-1;return t.state.env[o]=String(a),e.prefix?a:i}return s}return Gt(s,e.operator)}case"ArithTernary":return await $(t,e.condition)?await $(t,e.consequent):await $(t,e.alternate);case"ArithAssignment":{let s=e.variable,r=s;if(e.stringKey!==void 0)r=`${s}_${e.stringKey}`;else if(e.subscript){let a=t.state.associativeArrays?.has(s);if(a&&e.subscript.type==="ArithVariable")r=`${s}_${e.subscript.name}`;else if(a){let l=await $(t,e.subscript);r=`${s}_${l}`}else{let l=await $(t,e.subscript);if(l<0){let c=W(t,s);c.length>0&&(l=Math.max(...c.map(([h])=>typeof h=="number"?h:0))+1+l)}r=`${s}_${l}`}}let n=Number.parseInt(t.state.env[r]||"0",10)||0,o=await $(t,e.value),i=fs(n,o,e.operator);return t.state.env[r]=String(i),i}case"ArithGroup":return await $(t,e.expression);case"ArithConcat":{let s="";for(let r of e.parts)s+=await hs(t,r);return Number.parseInt(s,10)||0}default:return 0}}async function hs(t,e){switch(e.type){case"ArithNumber":return String(e.value);case"ArithVariable":return Q(t,e.name);case"ArithBracedExpansion":return de(t,e.content);case"ArithCommandSubst":return t.execFn?(await t.execFn(e.command)).stdout.trim():"0";case"ArithConcat":{let s="";for(let r of e.parts)s+=await hs(t,r);return s}default:return String(await $(t,e))}}var N=Object.freeze({stdout:"",stderr:"",exitCode:0});function j(t=""){return{stdout:t,stderr:"",exitCode:0}}function S(t,e=1){return{stdout:"",stderr:t,exitCode:e}}function x(t,e,s){return{stdout:t,stderr:e,exitCode:s}}function _(t){return{stdout:"",stderr:"",exitCode:t?0:1}}function ce(t,e,s="",r=""){throw new z(t,e,s,r)}function Ht(t,e){if(t.state.loopDepth===0){if(t.state.parentHasLoopContext)throw new fe;return N}let s=1;if(e.length>0){let r=Number.parseInt(e[0],10);if(Number.isNaN(r)||r<1)throw new k(128,"",`bash: break: ${e[0]}: numeric argument required
42
- `);s=r}throw new U(s)}async function jt(t,e){let s,r=!1,n=!1,o=0;for(;o<e.length;)if(e[o]==="--"){o++;break}else if(e[o]==="-L")n=!1,o++;else if(e[o]==="-P")n=!0,o++;else if(e[o].startsWith("-")&&e[o]!=="-")o++;else break;let i=e.slice(o);if(i.length===0||i[0]==="~"?s=t.state.env.HOME||"/":i[0]==="-"?(s=t.state.previousDir,r=!0):s=i[0],!s.startsWith("/")&&!s.startsWith("./")&&!s.startsWith("../")&&s!=="."&&s!==".."){let h=t.state.env.CDPATH;if(h){let d=h.split(":").filter(m=>m);for(let m of d){let y=m.startsWith("/")?`${m}/${s}`:`${t.state.cwd}/${m}/${s}`;try{if((await t.fs.stat(y)).isDirectory){s=y,r=!0;break}}catch{}}}}let l=(s.startsWith("/")?s:`${t.state.cwd}/${s}`).split("/").filter(h=>h&&h!=="."),c="";for(let h of l)if(h==="..")c=c.split("/").slice(0,-1).join("/")||"/";else{c=c?`${c}/${h}`:`/${h}`;try{if(!(await t.fs.stat(c)).isDirectory)return S(`bash: cd: ${s}: Not a directory
43
- `)}catch{return S(`bash: cd: ${s}: No such file or directory
49
+ `,0;o=c}r=`${e.array}_${o}`;let i=t.state.env[r];if(i!==void 0)return Pe(i);if(o===0){let a=t.state.env[e.array];if(a!==void 0)return Pe(a)}if(t.state.options.nounset&&!Object.keys(t.state.env).some(l=>l===e.array||l.startsWith(`${e.array}_`)))throw new J(`${e.array}[${o}]`);return 0}else return 0;let s=t.state.env[r];return s!==void 0?Pe(s):0}case"ArithDoubleSubscript":throw new W("double subscript","","");case"ArithNumberSubscript":throw new W(`${e.number}${e.errorToken}: syntax error: invalid arithmetic operator (error token is "${e.errorToken}")`);case"ArithBinary":{if(e.operator==="||")return $(t,e.left)||$(t,e.right)?1:0;if(e.operator==="&&")return $(t,e.left)&&$(t,e.right)?1:0;let n=$(t,e.left),r=$(t,e.right);return Gt(n,r,e.operator)}case"ArithUnary":{let n=$(t,e.operand);if(e.operator==="++"||e.operator==="--"){if(e.operand.type==="ArithVariable"){let r=e.operand.name,s=Number.parseInt(Q(t,r),10)||0,o=e.operator==="++"?s+1:s-1;return t.state.env[r]=String(o),e.prefix?o:s}if(e.operand.type==="ArithArrayElement"){let r=e.operand.array,s=t.state.associativeArrays?.has(r),o;if(e.operand.stringKey!==void 0)o=`${r}_${e.operand.stringKey}`;else if(s&&e.operand.index?.type==="ArithVariable")o=`${r}_${e.operand.index.name}`;else if(e.operand.index){let l=$(t,e.operand.index);o=`${r}_${l}`}else return n;let i=Number.parseInt(t.state.env[o]||"0",10)||0,a=e.operator==="++"?i+1:i-1;return t.state.env[o]=String(a),e.prefix?a:i}return n}return Ht(n,e.operator)}case"ArithTernary":return $(t,e.condition)?$(t,e.consequent):$(t,e.alternate);case"ArithAssignment":{let n=e.variable,r=n;if(e.stringKey!==void 0)r=`${n}_${e.stringKey}`;else if(e.subscript){let a=t.state.associativeArrays?.has(n);if(a&&e.subscript.type==="ArithVariable")r=`${n}_${e.subscript.name}`;else if(a){let l=$(t,e.subscript);r=`${n}_${l}`}else{let l=$(t,e.subscript);if(l<0){let c=F(t,n);c.length>0&&(l=Math.max(...c.map(([d])=>typeof d=="number"?d:0))+1+l)}r=`${n}_${l}`}}let s=Number.parseInt(t.state.env[r]||"0",10)||0,o=$(t,e.value),i=yn(s,o,e.operator);return t.state.env[r]=String(i),i}case"ArithGroup":return $(t,e.expression);case"ArithConcat":{let n="";for(let r of e.parts)n+=En(t,r);return Number.parseInt(n,10)||0}default:return 0}}function En(t,e){switch(e.type){case"ArithNumber":return String(e.value);case"ArithVariable":return Q(t,e.name);case"ArithBracedExpansion":return de(t,e.content);case"ArithCommandSubst":return"0";case"ArithConcat":{let n="";for(let r of e.parts)n+=En(t,r);return n}default:return String($(t,e))}}async function P(t,e){switch(e.type){case"ArithNumber":if(Number.isNaN(e.value))throw new W("value too great for base");return e.value;case"ArithVariable":return rt(t,e.name);case"ArithNested":return P(t,e.expression);case"ArithCommandSubst":{if(t.execFn){let r=(await t.execFn(e.command)).stdout.trim();return Number.parseInt(r,10)||0}return 0}case"ArithBracedExpansion":{let n=de(t,e.content);return Number.parseInt(n,10)||0}case"ArithDynamicBase":{let n=de(t,e.baseExpr),r=Number.parseInt(n,10);if(r<2||r>64)return 0;let s=`${r}#${e.value}`;return be(s)}case"ArithDynamicNumber":{let r=de(t,e.prefix)+e.suffix;return be(r)}case"ArithArrayElement":{let n=t.state.associativeArrays?.has(e.array),r;if(e.stringKey!==void 0)r=`${e.array}_${e.stringKey}`;else if(n&&e.index?.type==="ArithVariable")r=`${e.array}_${e.index.name}`;else if(e.index){let o=await P(t,e.index);r=`${e.array}_${o}`;let i=t.state.env[r];if(i!==void 0)return Pe(i);if(o===0){let a=t.state.env[e.array];if(a!==void 0)return Pe(a)}if(t.state.options.nounset&&!Object.keys(t.state.env).some(l=>l===e.array||l.startsWith(`${e.array}_`)))throw new J(`${e.array}[${o}]`);return 0}else return 0;let s=t.state.env[r];return s!==void 0?Pe(s):0}case"ArithDoubleSubscript":throw new W("double subscript","","");case"ArithNumberSubscript":throw new W(`${e.number}${e.errorToken}: syntax error: invalid arithmetic operator (error token is "${e.errorToken}")`);case"ArithBinary":{if(e.operator==="||")return await P(t,e.left)||await P(t,e.right)?1:0;if(e.operator==="&&")return await P(t,e.left)&&await P(t,e.right)?1:0;let n=await P(t,e.left),r=await P(t,e.right);return Gt(n,r,e.operator)}case"ArithUnary":{let n=await P(t,e.operand);if(e.operator==="++"||e.operator==="--"){if(e.operand.type==="ArithVariable"){let r=e.operand.name,s=Number.parseInt(Q(t,r),10)||0,o=e.operator==="++"?s+1:s-1;return t.state.env[r]=String(o),e.prefix?o:s}if(e.operand.type==="ArithArrayElement"){let r=e.operand.array,s=t.state.associativeArrays?.has(r),o;if(e.operand.stringKey!==void 0)o=`${r}_${e.operand.stringKey}`;else if(s&&e.operand.index?.type==="ArithVariable")o=`${r}_${e.operand.index.name}`;else if(e.operand.index){let l=await P(t,e.operand.index);o=`${r}_${l}`}else return n;let i=Number.parseInt(t.state.env[o]||"0",10)||0,a=e.operator==="++"?i+1:i-1;return t.state.env[o]=String(a),e.prefix?a:i}return n}return Ht(n,e.operator)}case"ArithTernary":return await P(t,e.condition)?await P(t,e.consequent):await P(t,e.alternate);case"ArithAssignment":{let n=e.variable,r=n;if(e.stringKey!==void 0)r=`${n}_${e.stringKey}`;else if(e.subscript){let a=t.state.associativeArrays?.has(n);if(a&&e.subscript.type==="ArithVariable")r=`${n}_${e.subscript.name}`;else if(a){let l=await P(t,e.subscript);r=`${n}_${l}`}else{let l=await P(t,e.subscript);if(l<0){let c=F(t,n);c.length>0&&(l=Math.max(...c.map(([d])=>typeof d=="number"?d:0))+1+l)}r=`${n}_${l}`}}let s=Number.parseInt(t.state.env[r]||"0",10)||0,o=await P(t,e.value),i=yn(s,o,e.operator);return t.state.env[r]=String(i),i}case"ArithGroup":return await P(t,e.expression);case"ArithConcat":{let n="";for(let r of e.parts)n+=await wn(t,r);return Number.parseInt(n,10)||0}default:return 0}}async function wn(t,e){switch(e.type){case"ArithNumber":return String(e.value);case"ArithVariable":return Q(t,e.name);case"ArithBracedExpansion":return de(t,e.content);case"ArithCommandSubst":return t.execFn?(await t.execFn(e.command)).stdout.trim():"0";case"ArithConcat":{let n="";for(let r of e.parts)n+=await wn(t,r);return n}default:return String(await P(t,e))}}var C=Object.freeze({stdout:"",stderr:"",exitCode:0});function j(t=""){return{stdout:t,stderr:"",exitCode:0}}function S(t,e=1){return{stdout:"",stderr:t,exitCode:e}}function x(t,e,n){return{stdout:t,stderr:e,exitCode:n}}function _(t){return{stdout:"",stderr:"",exitCode:t?0:1}}function ae(t,e,n="",r=""){throw new z(t,e,n,r)}function jt(t,e){if(t.state.loopDepth===0){if(t.state.parentHasLoopContext)throw new le;return C}let n=1;if(e.length>0){let r=Number.parseInt(e[0],10);if(Number.isNaN(r)||r<1)throw new k(128,"",`bash: break: ${e[0]}: numeric argument required
50
+ `);n=r}throw new U(n)}async function Zt(t,e){let n,r=!1,s=!1,o=0;for(;o<e.length;)if(e[o]==="--"){o++;break}else if(e[o]==="-L")s=!1,o++;else if(e[o]==="-P")s=!0,o++;else if(e[o].startsWith("-")&&e[o]!=="-")o++;else break;let i=e.slice(o);if(i.length===0||i[0]==="~"?n=t.state.env.HOME||"/":i[0]==="-"?(n=t.state.previousDir,r=!0):n=i[0],!n.startsWith("/")&&!n.startsWith("./")&&!n.startsWith("../")&&n!=="."&&n!==".."){let d=t.state.env.CDPATH;if(d){let h=d.split(":").filter(m=>m);for(let m of h){let E=m.startsWith("/")?`${m}/${n}`:`${t.state.cwd}/${m}/${n}`;try{if((await t.fs.stat(E)).isDirectory){n=E,r=!0;break}}catch{}}}}let l=(n.startsWith("/")?n:`${t.state.cwd}/${n}`).split("/").filter(d=>d&&d!=="."),c="";for(let d of l)if(d==="..")c=c.split("/").slice(0,-1).join("/")||"/";else{c=c?`${c}/${d}`:`/${d}`;try{if(!(await t.fs.stat(c)).isDirectory)return S(`bash: cd: ${n}: Not a directory
51
+ `)}catch{return S(`bash: cd: ${n}: No such file or directory
44
52
  `)}}let f=c||"/";return t.state.previousDir=t.state.cwd,t.state.cwd=f,t.state.env.PWD=t.state.cwd,t.state.env.OLDPWD=t.state.previousDir,j(r?`${f}
45
- `:"")}function Zt(t,e){if(t.state.loopDepth===0){if(t.state.parentHasLoopContext)throw new fe;return N}if(e.length>1)throw new U(1);let s=1;if(e.length>0){let r=Number.parseInt(e[0],10);if(Number.isNaN(r)||r<1)return S(`bash: continue: ${e[0]}: numeric argument required
46
- `);s=r}throw new X(s)}function xe(t,e){t.state.readonlyVars=t.state.readonlyVars||new Set,t.state.readonlyVars.add(e)}function Rn(t,e){return t.state.readonlyVars?.has(e)??!1}function me(t,e,s="bash"){return Rn(t,e)?S(`${s}: ${e}: readonly variable
47
- `):null}function ds(t){let e=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(e)return{name:e[1],isArray:!0,arrayElements:qt(e[2])};if(t.includes("=")){let s=t.indexOf("=");return{name:t.slice(0,s),isArray:!1,value:t.slice(s+1)}}return{name:t,isArray:!1}}function ms(t,e,s={}){let{name:r,isArray:n,arrayElements:o,value:i}=e,{makeReadonly:a=!1,checkReadonly:l=!0}=s;if(l){let c=me(t,r);if(c)return c}if(n&&o){for(let c=0;c<o.length;c++)t.state.env[`${r}_${c}`]=o[c];t.state.env[`${r}__length`]=String(o.length)}else i!==void 0&&(t.state.env[r]=i);return a&&xe(t,r),null}function Qt(t,e){let s=!1,r=!1,n=!1,o=!1,i=!1,a=[];for(let l=0;l<e.length;l++){let c=e[l];if(c==="-a")s=!0;else if(c==="-A")r=!0;else if(c==="-r")n=!0;else if(c==="-x")o=!0;else if(c==="-p")i=!0;else if(c==="--"){a.push(...e.slice(l+1));break}else if(c.startsWith("-"))for(let f of c.slice(1))f==="a"?s=!0:f==="A"?r=!0:f==="r"?n=!0:f==="x"?o=!0:f==="p"&&(i=!0);else a.push(c)}if(i&&a.length>0){let l="";for(let c of a){let f=t.state.env[c];if(f!==void 0){let h=f.replace(/\\/g,"\\\\").replace(/"/g,'\\"');l+=`declare -- ${c}="${h}"
48
- `}}return j(l)}if(a.length===0&&!i){let l="",c=Object.entries(t.state.env).filter(([f])=>!f.startsWith("BASH_")).sort(([f],[h])=>f.localeCompare(h));for(let[f,h]of c){let d=h.replace(/'/g,"'\\''");l+=`declare -- ${f}='${d}'
49
- `}return j(l)}for(let l of a){let c=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(c){let f=c[1],h=c[2];if(r&&(t.state.associativeArrays??=new Set,t.state.associativeArrays.add(f)),r&&h.includes("[")){let d=kn(h);for(let[m,y]of d)t.state.env[`${f}_${m}`]=y}else{let d=qt(h);for(let m=0;m<d.length;m++)t.state.env[`${f}_${m}`]=d[m];t.state.env[`${f}__length`]=String(d.length)}n&&xe(t,f);continue}if(l.includes("=")){let f=l.indexOf("="),h=l.slice(0,f),d=l.slice(f+1),m=me(t,h);if(m)return m;t.state.env[h]=d,n&&xe(t,h)}else{let f=l;r&&(t.state.associativeArrays??=new Set,t.state.associativeArrays.add(f));let h=Object.keys(t.state.env).some(d=>d.startsWith(`${f}_`)&&!d.startsWith(`${f}__length`));!(f in t.state.env)&&!h&&(s||r?t.state.env[`${f}__length`]="0":t.state.env[f]=""),n&&xe(t,f)}}return N}function qt(t){let e=[],s="",r=!1,n=!1,o=!1;for(let i of t){if(o){s+=i,o=!1;continue}if(i==="\\"){o=!0;continue}if(i==="'"&&!n){r=!r;continue}if(i==='"'&&!r){n=!n;continue}if((i===" "||i===" "||i===`
50
- `)&&!r&&!n){s&&(e.push(s),s="");continue}s+=i}return s&&e.push(s),e}function kn(t){let e=[],s=0;for(;s<t.length;){for(;s<t.length&&/\s/.test(t[s]);)s++;if(s>=t.length)break;if(t[s]!=="["){s++;continue}s++;let r="";if(t[s]==="'"||t[s]==='"'){let o=t[s];for(s++;s<t.length&&t[s]!==o;)r+=t[s],s++;t[s]===o&&s++}else for(;s<t.length&&t[s]!=="]"&&t[s]!=="=";)r+=t[s],s++;for(;s<t.length&&t[s]!=="]";)s++;if(t[s]==="]"&&s++,t[s]!=="=")continue;s++;let n="";if(t[s]==="'"||t[s]==='"'){let o=t[s];for(s++;s<t.length&&t[s]!==o;)t[s]==="\\"&&s+1<t.length&&s++,n+=t[s],s++;t[s]===o&&s++}else for(;s<t.length&&!/\s/.test(t[s]);)n+=t[s],s++;e.push([r,n])}return e}function Kt(t,e){let s=!1,r=!1,n=[];for(let o=0;o<e.length;o++){let i=e[o];if(i==="-a")s=!0;else if(i==="-A")r=!0;else if(i==="-p"){if(e.length===1){let a="";for(let l of t.state.readonlyVars||[]){let c=t.state.env[l];c!==void 0&&(a+=`declare -r ${l}="${c}"
51
- `)}return j(a)}}else if(i==="--"){n.push(...e.slice(o+1));break}else i.startsWith("-")||n.push(i)}for(let o of n){let i=ds(o);if(i.value===void 0&&!i.isArray){xe(t,i.name);continue}let a=ms(t,i,{makeReadonly:!0});if(a)return a}return N}async function Xt(t,e){let s=e;if(s.length>0){let n=s[0];if(n==="--")s=s.slice(1);else if(n.startsWith("-")&&n!=="-"&&n.length>1)return S(`bash: eval: ${n}: invalid option
53
+ `:"")}function qt(t,e){if(t.state.loopDepth===0){if(t.state.parentHasLoopContext)throw new le;return C}if(e.length>1)throw new U(1);let n=1;if(e.length>0){let r=Number.parseInt(e[0],10);if(Number.isNaN(r)||r<1)return S(`bash: continue: ${e[0]}: numeric argument required
54
+ `);n=r}throw new Y(n)}function xe(t,e){t.state.readonlyVars=t.state.readonlyVars||new Set,t.state.readonlyVars.add(e)}function Ms(t,e){return t.state.readonlyVars?.has(e)??!1}function he(t,e,n="bash"){return Ms(t,e)?S(`${n}: ${e}: readonly variable
55
+ `):null}function gn(t){let e=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(e)return{name:e[1],isArray:!0,arrayElements:Qt(e[2])};if(t.includes("=")){let n=t.indexOf("=");return{name:t.slice(0,n),isArray:!1,value:t.slice(n+1)}}return{name:t,isArray:!1}}function An(t,e,n={}){let{name:r,isArray:s,arrayElements:o,value:i}=e,{makeReadonly:a=!1,checkReadonly:l=!0}=n;if(l){let c=he(t,r);if(c)return c}if(s&&o){for(let c=0;c<o.length;c++)t.state.env[`${r}_${c}`]=o[c];t.state.env[`${r}__length`]=String(o.length)}else i!==void 0&&(t.state.env[r]=i);return a&&xe(t,r),null}function Kt(t,e){let n=!1,r=!1,s=!1,o=!1,i=!1,a=[];for(let l=0;l<e.length;l++){let c=e[l];if(c==="-a")n=!0;else if(c==="-A")r=!0;else if(c==="-r")s=!0;else if(c==="-x")o=!0;else if(c==="-p")i=!0;else if(c==="--"){a.push(...e.slice(l+1));break}else if(c.startsWith("-"))for(let f of c.slice(1))f==="a"?n=!0:f==="A"?r=!0:f==="r"?s=!0:f==="x"?o=!0:f==="p"&&(i=!0);else a.push(c)}if(i&&a.length>0){let l="";for(let c of a){let f=t.state.env[c];if(f!==void 0){let d=f.replace(/\\/g,"\\\\").replace(/"/g,'\\"');l+=`declare -- ${c}="${d}"
56
+ `}}return j(l)}if(a.length===0&&!i){let l="",c=Object.entries(t.state.env).filter(([f])=>!f.startsWith("BASH_")).sort(([f],[d])=>f.localeCompare(d));for(let[f,d]of c){let h=d.replace(/'/g,"'\\''");l+=`declare -- ${f}='${h}'
57
+ `}return j(l)}for(let l of a){let c=l.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=\((.*)\)$/s);if(c){let f=c[1],d=c[2];if(r&&(t.state.associativeArrays??=new Set,t.state.associativeArrays.add(f)),r&&d.includes("[")){let h=Bs(d);for(let[m,E]of h)t.state.env[`${f}_${m}`]=E}else{let h=Qt(d);for(let m=0;m<h.length;m++)t.state.env[`${f}_${m}`]=h[m];t.state.env[`${f}__length`]=String(h.length)}s&&xe(t,f);continue}if(l.includes("=")){let f=l.indexOf("="),d=l.slice(0,f),h=l.slice(f+1),m=he(t,d);if(m)return m;t.state.env[d]=h,s&&xe(t,d)}else{let f=l;r&&(t.state.associativeArrays??=new Set,t.state.associativeArrays.add(f));let d=Object.keys(t.state.env).some(h=>h.startsWith(`${f}_`)&&!h.startsWith(`${f}__length`));!(f in t.state.env)&&!d&&(n||r?t.state.env[`${f}__length`]="0":t.state.env[f]=""),s&&xe(t,f)}}return C}function Qt(t){let e=[],n="",r=!1,s=!1,o=!1;for(let i of t){if(o){n+=i,o=!1;continue}if(i==="\\"){o=!0;continue}if(i==="'"&&!s){r=!r;continue}if(i==='"'&&!r){s=!s;continue}if((i===" "||i===" "||i===`
58
+ `)&&!r&&!s){n&&(e.push(n),n="");continue}n+=i}return n&&e.push(n),e}function Bs(t){let e=[],n=0;for(;n<t.length;){for(;n<t.length&&/\s/.test(t[n]);)n++;if(n>=t.length)break;if(t[n]!=="["){n++;continue}n++;let r="";if(t[n]==="'"||t[n]==='"'){let o=t[n];for(n++;n<t.length&&t[n]!==o;)r+=t[n],n++;t[n]===o&&n++}else for(;n<t.length&&t[n]!=="]"&&t[n]!=="=";)r+=t[n],n++;for(;n<t.length&&t[n]!=="]";)n++;if(t[n]==="]"&&n++,t[n]!=="=")continue;n++;let s="";if(t[n]==="'"||t[n]==='"'){let o=t[n];for(n++;n<t.length&&t[n]!==o;)t[n]==="\\"&&n+1<t.length&&n++,s+=t[n],n++;t[n]===o&&n++}else for(;n<t.length&&!/\s/.test(t[n]);)s+=t[n],n++;e.push([r,s])}return e}function Xt(t,e){let n=!1,r=!1,s=[];for(let o=0;o<e.length;o++){let i=e[o];if(i==="-a")n=!0;else if(i==="-A")r=!0;else if(i==="-p"){if(e.length===1){let a="";for(let l of t.state.readonlyVars||[]){let c=t.state.env[l];c!==void 0&&(a+=`declare -r ${l}="${c}"
59
+ `)}return j(a)}}else if(i==="--"){s.push(...e.slice(o+1));break}else i.startsWith("-")||s.push(i)}for(let o of s){let i=gn(o);if(i.value===void 0&&!i.isArray){xe(t,i.name);continue}let a=An(t,i,{makeReadonly:!0});if(a)return a}return C}async function Yt(t,e){let n=e;if(n.length>0){let s=n[0];if(s==="--")n=n.slice(1);else if(s.startsWith("-")&&s!=="-"&&s.length>1)return S(`bash: eval: ${s}: invalid option
52
60
  eval: usage: eval [arg ...]
53
- `,2)}if(s.length===0)return N;let r=s.join(" ");if(r.trim()==="")return N;try{let n=he(r);return t.executeScript(n)}catch(n){if(n instanceof U||n instanceof X||n instanceof V||n instanceof k)throw n;if(n.name==="ParseException")return S(`bash: eval: ${n.message}
54
- `);throw n}}function Yt(t,e){let s,r="";if(e.length===0)s=t.state.lastExitCode;else{let n=e[0],o=Number.parseInt(n,10);n===""||Number.isNaN(o)||!/^-?\d+$/.test(n)?(r=`bash: exit: ${n}: numeric argument required
55
- `,s=2):s=(o%256+256)%256}throw new k(s,"",r)}function Jt(t,e){let s=!1,r=[];for(let i of e)i==="-n"?s=!0:i==="-p"||i==="--"||r.push(i);if(r.length===0&&!s){let i="",a=Object.entries(t.state.env).filter(([l])=>!l.startsWith("BASH_ALIAS_")).sort(([l],[c])=>l.localeCompare(c));for(let[l,c]of a){let f=c.replace(/'/g,"'\\''");i+=`declare -x ${l}='${f}'
56
- `}return j(i)}if(s){for(let i of r){let a=i.split("=")[0];delete t.state.env[a]}return N}let n="",o=0;for(let i of r){let a,l;if(i.includes("=")){let c=i.indexOf("=");a=i.slice(0,c),l=i.slice(c+1)}else a=i;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(a)){n+=`bash: export: \`${i}': not a valid identifier
57
- `,o=1;continue}l!==void 0?t.state.env[a]=l:a in t.state.env||(t.state.env[a]="")}return x("",n,o)}function Dn(t){let e=[],s="",r=0;for(let n of t){for(let o of n)o==="("?r++:o===")"&&r--;s?s+=` ${n}`:s=n,r===0&&(e.push(s),s="")}return s&&e.push(s),e}async function er(t,e){if(e.length===0)return S(`bash: let: expression expected
58
- `);let s=Dn(e),r=0;for(let n of s)try{let i=he(`(( ${n} ))`).statements[0];if(i&&i.pipelines.length>0&&i.pipelines[0].commands.length>0){let a=i.pipelines[0].commands[0];a.type==="ArithmeticCommand"&&(r=await $(t,a.expression.expression))}}catch(o){return S(`bash: let: ${n}: ${o.message}
59
- `)}return x("","",r===0?1:0)}function On(t,e){let s=t.state.env.HOME||"/home/user";return e.split(":").map(o=>o==="~"?s:o==="~root"?"/root":o.startsWith("~/")?s+o.slice(1):o.startsWith("~root/")?`/root${o.slice(5)}`:o).join(":")}function tr(t,e){if(t.state.localScopes.length===0)return S(`bash: local: can only be used in a function
60
- `);let s=t.state.localScopes[t.state.localScopes.length-1],r="",n=0;for(let o of e){let i,a;if(o.includes("=")){let l=o.indexOf("=");i=o.slice(0,l),a=On(t,o.slice(l+1))}else i=o;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(i)){r+=`bash: local: \`${o}': not a valid identifier
61
- `,n=1;continue}s.has(i)||s.set(i,t.state.env[i]),a!==void 0&&(t.state.env[i]=a)}return x("",r,n)}function rr(t,e,s){let r=!1,n=`
62
- `,o="",i=-1,a=null,l=[],c=0,f=!1;for(;c<e.length;){let w=e[c];w==="-r"?r=!0:w==="-d"&&c+1<e.length?(n=e[c+1],c++):w==="-p"&&c+1<e.length?(o=e[c+1],c++):w==="-n"&&c+1<e.length?(i=Number.parseInt(e[c+1],10),(Number.isNaN(i)||i<0)&&(f=!0,i=0),c++):w==="-a"&&c+1<e.length?(a=e[c+1],c++):w==="-t"?c+1<e.length&&!e[c+1].startsWith("-")&&c++:w==="-s"||w.startsWith("-")||l.push(w),c++}if(f)return x("","",1);l.length===0&&a===null&&l.push("REPLY");let h=s;!h&&t.state.groupStdin!==void 0&&(h=t.state.groupStdin);let d="",m=0,y=!0;if(i>=0){for(let w=0;w<h.length&&w<i;w++){let b=h[w];if(b===n){m=w+1;break}d+=b,m=w+1}t.state.groupStdin!==void 0&&!s&&(t.state.groupStdin=h.substring(m))}else{let w=h;for(m=0;;){let b=w.indexOf(n);if(b!==-1){let I=w.substring(0,b);if(m+=b+n.length,w=w.substring(b+n.length),!r&&I.endsWith("\\")){d+=I.slice(0,-1);continue}d+=I,y=!0;break}else if(w.length>0){d+=w,m+=w.length,y=!1,w="";break}else{if(d.length===0){for(let I of l)t.state.env[I]="";return a&&Bt(t,a),x("","",1)}y=!1;break}}t.state.groupStdin!==void 0&&!s&&(t.state.groupStdin=h.substring(m))}if(n===`
63
- `&&d.endsWith(`
64
- `)&&(d=d.slice(0,-1)),r||(d=d.replace(/\\(.)/g,"$1")),l.length===1&&l[0]==="REPLY")return t.state.env.REPLY=d,x("","",y?0:1);let g=Ye(t.state.env),{words:p,wordStarts:E}=Kr(d,g);if(a){Bt(t,a);for(let w=0;w<p.length;w++)t.state.env[`${a}_${w}`]=p[w];return x("","",y?0:1)}for(let w=0;w<l.length;w++){let b=l[w];if(w<l.length-1)t.state.env[b]=p[w]??"";else if(w<E.length){let I=Xr(d.substring(E[w]),g);t.state.env[b]=I}else t.state.env[b]=""}return x("","",y?0:1)}function sr(t,e){if(t.state.callDepth===0&&t.state.sourceDepth===0)return S("bash: return: can only `return' from a function or sourced script\n");let s=t.state.lastExitCode;if(e.length>0){let r=e[0],n=Number.parseInt(r,10);if(r===""||Number.isNaN(n)||!/^-?\d+$/.test(r))return S(`bash: return: ${r}: numeric argument required
65
- `,2);s=(n%256+256)%256}throw new V(s)}function _n(t){return/^[a-zA-Z0-9_/.:-]*$/.test(t)?t:`'${t.replace(/'/g,"'\\''")}'`}var rt=`set: usage: set [-eux] [+eux] [-o option] [+o option]
61
+ `,2)}if(n.length===0)return C;let r=n.join(" ");if(r.trim()==="")return C;try{let s=ue(r);return t.executeScript(s)}catch(s){if(s instanceof U||s instanceof Y||s instanceof V||s instanceof k)throw s;if(s.name==="ParseException")return S(`bash: eval: ${s.message}
62
+ `);throw s}}function Jt(t,e){let n,r="";if(e.length===0)n=t.state.lastExitCode;else{let s=e[0],o=Number.parseInt(s,10);s===""||Number.isNaN(o)||!/^-?\d+$/.test(s)?(r=`bash: exit: ${s}: numeric argument required
63
+ `,n=2):n=(o%256+256)%256}throw new k(n,"",r)}function er(t,e){let n=!1,r=[];for(let i of e)i==="-n"?n=!0:i==="-p"||i==="--"||r.push(i);if(r.length===0&&!n){let i="",a=Object.entries(t.state.env).filter(([l])=>!l.startsWith("BASH_ALIAS_")).sort(([l],[c])=>l.localeCompare(c));for(let[l,c]of a){let f=c.replace(/'/g,"'\\''");i+=`declare -x ${l}='${f}'
64
+ `}return j(i)}if(n){for(let i of r){let a=i.split("=")[0];delete t.state.env[a]}return C}let s="",o=0;for(let i of r){let a,l;if(i.includes("=")){let c=i.indexOf("=");a=i.slice(0,c),l=i.slice(c+1)}else a=i;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(a)){s+=`bash: export: \`${i}': not a valid identifier
65
+ `,o=1;continue}l!==void 0?t.state.env[a]=l:a in t.state.env||(t.state.env[a]="")}return x("",s,o)}function zs(t){let e=[],n="",r=0;for(let s of t){for(let o of s)o==="("?r++:o===")"&&r--;n?n+=` ${s}`:n=s,r===0&&(e.push(n),n="")}return n&&e.push(n),e}async function tr(t,e){if(e.length===0)return S(`bash: let: expression expected
66
+ `);let n=zs(e),r=0;for(let s of n)try{let i=ue(`(( ${s} ))`).statements[0];if(i&&i.pipelines.length>0&&i.pipelines[0].commands.length>0){let a=i.pipelines[0].commands[0];a.type==="ArithmeticCommand"&&(r=await P(t,a.expression.expression))}}catch(o){return S(`bash: let: ${s}: ${o.message}
67
+ `)}return x("","",r===0?1:0)}function Us(t,e){let n=t.state.env.HOME||"/home/user";return e.split(":").map(o=>o==="~"?n:o==="~root"?"/root":o.startsWith("~/")?n+o.slice(1):o.startsWith("~root/")?`/root${o.slice(5)}`:o).join(":")}function rr(t,e){if(t.state.localScopes.length===0)return S(`bash: local: can only be used in a function
68
+ `);let n=t.state.localScopes[t.state.localScopes.length-1],r="",s=0;for(let o of e){let i,a;if(o.includes("=")){let l=o.indexOf("=");i=o.slice(0,l),a=Us(t,o.slice(l+1))}else i=o;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(i)){r+=`bash: local: \`${o}': not a valid identifier
69
+ `,s=1;continue}n.has(i)||n.set(i,t.state.env[i]),a!==void 0&&(t.state.env[i]=a)}return x("",r,s)}function nr(t,e,n){let r=!1,s=`
70
+ `,o="",i=-1,a=null,l=[],c=0,f=!1;for(;c<e.length;){let w=e[c];w==="-r"?r=!0:w==="-d"&&c+1<e.length?(s=e[c+1],c++):w==="-p"&&c+1<e.length?(o=e[c+1],c++):w==="-n"&&c+1<e.length?(i=Number.parseInt(e[c+1],10),(Number.isNaN(i)||i<0)&&(f=!0,i=0),c++):w==="-a"&&c+1<e.length?(a=e[c+1],c++):w==="-t"?c+1<e.length&&!e[c+1].startsWith("-")&&c++:w==="-s"||w.startsWith("-")||l.push(w),c++}if(f)return x("","",1);l.length===0&&a===null&&l.push("REPLY");let d=n;!d&&t.state.groupStdin!==void 0&&(d=t.state.groupStdin);let h="",m=0,E=!0;if(i>=0){for(let w=0;w<d.length&&w<i;w++){let b=d[w];if(b===s){m=w+1;break}h+=b,m=w+1}t.state.groupStdin!==void 0&&!n&&(t.state.groupStdin=d.substring(m))}else{let w=d;for(m=0;;){let b=w.indexOf(s);if(b!==-1){let N=w.substring(0,b);if(m+=b+s.length,w=w.substring(b+s.length),!r&&N.endsWith("\\")){h+=N.slice(0,-1);continue}h+=N,E=!0;break}else if(w.length>0){h+=w,m+=w.length,E=!1,w="";break}else{if(h.length===0){for(let N of l)t.state.env[N]="";return a&&zt(t,a),x("","",1)}E=!1;break}}t.state.groupStdin!==void 0&&!n&&(t.state.groupStdin=d.substring(m))}if(s===`
71
+ `&&h.endsWith(`
72
+ `)&&(h=h.slice(0,-1)),r||(h=h.replace(/\\(.)/g,"$1")),l.length===1&&l[0]==="REPLY")return t.state.env.REPLY=h,x("","",E?0:1);let g=Je(t.state.env),{words:p,wordStarts:y}=tn(h,g);if(a){zt(t,a);for(let w=0;w<p.length;w++)t.state.env[`${a}_${w}`]=p[w];return x("","",E?0:1)}for(let w=0;w<l.length;w++){let b=l[w];if(w<l.length-1)t.state.env[b]=p[w]??"";else if(w<y.length){let N=rn(h.substring(y[w]),g);t.state.env[b]=N}else t.state.env[b]=""}return x("","",E?0:1)}function sr(t,e){if(t.state.callDepth===0&&t.state.sourceDepth===0)return S("bash: return: can only `return' from a function or sourced script\n");let n=t.state.lastExitCode;if(e.length>0){let r=e[0],s=Number.parseInt(r,10);if(r===""||Number.isNaN(s)||!/^-?\d+$/.test(r))return S(`bash: return: ${r}: numeric argument required
73
+ `,2);n=(s%256+256)%256}throw new V(n)}function Vs(t){return/^[a-zA-Z0-9_/.:-]*$/.test(t)?t:`'${t.replace(/'/g,"'\\''")}'`}var nt=`set: usage: set [-eux] [+eux] [-o option] [+o option]
66
74
  Options:
67
75
  -e Exit immediately if a command exits with non-zero status
68
76
  +e Disable -e
@@ -78,64 +86,64 @@ Options:
78
86
  +o pipefail Disable pipefail
79
87
  -o xtrace Same as -x
80
88
  +o xtrace Disable xtrace
81
- `,ps={e:"errexit",u:"nounset",x:"xtrace",v:"verbose",f:null,h:null,C:null,n:null,a:null,b:null,m:null,B:null,H:null,P:null,T:null,E:null,p:null},ys={errexit:"errexit",pipefail:"pipefail",nounset:"nounset",xtrace:"xtrace",verbose:"verbose",noclobber:null,noglob:null,noexec:null,allexport:null,notify:null,monitor:null,braceexpand:null,histexpand:null,physical:null,functrace:null,errtrace:null,privileged:null,hashall:null,posix:null,vi:null,emacs:null,ignoreeof:null,"interactive-comments":null,keyword:null,onecmd:null},Es=["errexit","nounset","pipefail","verbose","xtrace"],ws=["allexport","braceexpand","emacs","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","noclobber","noexec","noglob","nolog","notify","onecmd","physical","posix","privileged","vi"];function gs(t,e,s){e!==null&&(t.state.options[e]=s)}function Ln(t,e){return e+1<t.length&&!t[e+1].startsWith("-")&&!t[e+1].startsWith("+")}function ir(t,e){if(e.includes("--help"))return j(rt);if(e.length===0){let r=Object.entries(t.state.env).filter(([n])=>/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(n)).sort(([n],[o])=>n.localeCompare(o)).map(([n,o])=>`${n}=${_n(o)}`).join(`
89
+ `,xn={e:"errexit",u:"nounset",x:"xtrace",v:"verbose",f:null,h:null,C:null,n:null,a:null,b:null,m:null,B:null,H:null,P:null,T:null,E:null,p:null},Sn={errexit:"errexit",pipefail:"pipefail",nounset:"nounset",xtrace:"xtrace",verbose:"verbose",noclobber:null,noglob:null,noexec:null,allexport:null,notify:null,monitor:null,braceexpand:null,histexpand:null,physical:null,functrace:null,errtrace:null,privileged:null,hashall:null,posix:null,vi:null,emacs:null,ignoreeof:null,"interactive-comments":null,keyword:null,onecmd:null},bn=["errexit","nounset","pipefail","verbose","xtrace"],Nn=["allexport","braceexpand","emacs","errtrace","functrace","hashall","histexpand","history","ignoreeof","interactive-comments","keyword","monitor","noclobber","noexec","noglob","nolog","notify","onecmd","physical","posix","privileged","vi"];function Cn(t,e,n){e!==null&&(t.state.options[e]=n)}function Gs(t,e){return e+1<t.length&&!t[e+1].startsWith("-")&&!t[e+1].startsWith("+")}function or(t,e){if(e.includes("--help"))return j(nt);if(e.length===0){let r=Object.entries(t.state.env).filter(([s])=>/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(s)).sort(([s],[o])=>s.localeCompare(o)).map(([s,o])=>`${s}=${Vs(o)}`).join(`
82
90
  `);return j(r?`${r}
83
- `:"")}let s=0;for(;s<e.length;){let r=e[s];if((r==="-o"||r==="+o")&&Ln(e,s)){let n=e[s+1];if(!(n in ys))return S(`bash: set: ${n}: invalid option name
84
- ${rt}`);gs(t,ys[n],r==="-o"),s+=2;continue}if(r==="-o"){let n=Es.map(a=>`${a.padEnd(16)}${t.state.options[a]?"on":"off"}`),o=ws.map(a=>`${a.padEnd(16)}off`),i=[...n,...o].sort();return j(`${i.join(`
91
+ `:"")}let n=0;for(;n<e.length;){let r=e[n];if((r==="-o"||r==="+o")&&Gs(e,n)){let s=e[n+1];if(!(s in Sn))return S(`bash: set: ${s}: invalid option name
92
+ ${nt}`);Cn(t,Sn[s],r==="-o"),n+=2;continue}if(r==="-o"){let s=bn.map(a=>`${a.padEnd(16)}${t.state.options[a]?"on":"off"}`),o=Nn.map(a=>`${a.padEnd(16)}off`),i=[...s,...o].sort();return j(`${i.join(`
85
93
  `)}
86
- `)}if(r==="+o"){let n=Es.map(a=>`set ${t.state.options[a]?"-o":"+o"} ${a}`),o=ws.map(a=>`set +o ${a}`),i=[...n,...o].sort();return j(`${i.join(`
94
+ `)}if(r==="+o"){let s=bn.map(a=>`set ${t.state.options[a]?"-o":"+o"} ${a}`),o=Nn.map(a=>`set +o ${a}`),i=[...s,...o].sort();return j(`${i.join(`
87
95
  `)}
88
- `)}if(r.length>1&&(r[0]==="-"||r[0]==="+")&&r[1]!=="-"){let n=r[0]==="-";for(let o=1;o<r.length;o++){let i=r[o];if(!(i in ps))return S(`bash: set: ${r[0]}${i}: invalid option
89
- ${rt}`);gs(t,ps[i],n)}s++;continue}if(r==="--")return nr(t,e.slice(s+1)),N;if(r==="-"){if(t.state.options.xtrace=!1,t.state.options.verbose=!1,s+1<e.length)return nr(t,e.slice(s+1)),N;s++;continue}if(r==="+"){s++;continue}return r.startsWith("-")||r.startsWith("+")?S(`bash: set: ${r}: invalid option
90
- ${rt}`):(nr(t,e.slice(s)),N)}return N}function nr(t,e){let s=1;for(;t.state.env[String(s)]!==void 0;)delete t.state.env[String(s)],s++;for(let r=0;r<e.length;r++)t.state.env[String(r+1)]=e[r];t.state.env["#"]=String(e.length),t.state.env["@"]=e.join(" "),t.state.env["*"]=e.join(" ")}function or(t,e){let s=1;if(e.length>0){let i=Number.parseInt(e[0],10);if(Number.isNaN(i)||i<0)return S(`bash: shift: ${e[0]}: numeric argument required
91
- `);s=i}let r=Number.parseInt(t.state.env["#"]||"0",10);if(s>r)return S(`bash: shift: shift count out of range
92
- `);if(s===0)return N;let n=[];for(let i=1;i<=r;i++)n.push(t.state.env[String(i)]||"");let o=n.slice(s);for(let i=1;i<=r;i++)delete t.state.env[String(i)];for(let i=0;i<o.length;i++)t.state.env[String(i+1)]=o[i];return t.state.env["#"]=String(o.length),t.state.env["@"]=o.join(" "),N}async function ar(t,e){let s=e;if(s.length>0&&s[0]==="--"&&(s=s.slice(1)),s.length===0)return x("",`bash: source: filename argument required
93
- `,2);let r=s[0],n=null,o=null;if(r.includes("/")){let l=t.fs.resolvePath(t.state.cwd,r);try{o=await t.fs.readFile(l),n=l}catch{}}else{let c=(t.state.env.PATH||"").split(":").filter(f=>f);for(let f of c){let h=t.fs.resolvePath(t.state.cwd,`${f}/${r}`);try{if((await t.fs.stat(h)).isDirectory)continue;o=await t.fs.readFile(h),n=h;break}catch{}}if(o===null){let f=t.fs.resolvePath(t.state.cwd,r);try{o=await t.fs.readFile(f),n=f}catch{}}}if(o===null)return S(`bash: ${r}: No such file or directory
94
- `);let i={};if(s.length>1){for(let c=1;c<=9;c++)i[String(c)]=t.state.env[String(c)];i["#"]=t.state.env["#"],i["@"]=t.state.env["@"];let l=s.slice(1);t.state.env["#"]=String(l.length),t.state.env["@"]=l.join(" ");for(let c=0;c<l.length&&c<9;c++)t.state.env[String(c+1)]=l[c];for(let c=l.length+1;c<=9;c++)delete t.state.env[String(c)]}let a=()=>{if(t.state.sourceDepth--,s.length>1)for(let[l,c]of Object.entries(i))c===void 0?delete t.state.env[l]:t.state.env[l]=c};t.state.sourceDepth++;try{let l=he(o),c=await t.executeScript(l);return a(),c}catch(l){if(a(),l instanceof k)throw l;if(l instanceof V)return x(l.stdout,l.stderr,l.exitCode);if(l.name==="ParseException")return S(`bash: ${r}: ${l.message}
95
- `);throw l}}function cr(t,e){let s="variable",r="",n=0;for(let o of e){if(o==="-v"){s="variable";continue}if(o==="-f"){s="function";continue}if(s==="function"){t.state.functions.delete(o);continue}let i=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(i){let a=i[1],l=i[2];if(l==="@"||l==="*"){let f=W(t,a);for(let[h]of f)delete t.state.env[`${a}_${h}`];delete t.state.env[a];continue}let c;if(/^-?\d+$/.test(l))c=Number.parseInt(l,10);else{let f=t.state.env[l];c=f?Number.parseInt(f,10):0,Number.isNaN(c)&&(c=0)}if(c<0){let f=W(t,a),h=f.length;if(h===0){r+=`bash: unset: [${c}]: bad array subscript
96
- `,n=1;continue}let d=h+c;if(d<0){r+=`bash: unset: [${c}]: bad array subscript
97
- `,n=1;continue}let m=f[d][0];delete t.state.env[`${a}_${m}`];continue}delete t.state.env[`${a}_${c}`];continue}delete t.state.env[o],t.state.functions.delete(o)}return x("",r,n)}function lr(t,e){return t.fs.resolvePath(t.state.cwd,e)}var Tn=["-e","-a","-f","-d","-r","-w","-x","-s","-L","-h","-k","-g","-u","-G","-O","-b","-c","-p","-S","-t","-N"];function st(t){return Tn.includes(t)}async function nt(t,e,s){let r=lr(t,s);switch(e){case"-e":case"-a":return t.fs.exists(r);case"-f":return await t.fs.exists(r)?(await t.fs.stat(r)).isFile:!1;case"-d":return await t.fs.exists(r)?(await t.fs.stat(r)).isDirectory:!1;case"-r":case"-w":case"-x":return t.fs.exists(r);case"-s":return await t.fs.exists(r)?(await t.fs.stat(r)).size>0:!1;case"-L":case"-h":try{return(await t.fs.lstat(r)).isSymbolicLink}catch{return!1}case"-k":return await t.fs.exists(r)?((await t.fs.stat(r)).mode&512)!==0:!1;case"-g":return await t.fs.exists(r)?((await t.fs.stat(r)).mode&1024)!==0:!1;case"-u":return await t.fs.exists(r)?((await t.fs.stat(r)).mode&2048)!==0:!1;case"-G":case"-O":return t.fs.exists(r);case"-b":return!1;case"-c":return["/dev/null","/dev/zero","/dev/random","/dev/urandom","/dev/tty","/dev/stdin","/dev/stdout","/dev/stderr"].some(o=>r===o||r.endsWith(o));case"-p":return!1;case"-S":return!1;case"-t":return!1;case"-N":return t.fs.exists(r);default:return!1}}var Wn=["-nt","-ot","-ef"];function it(t){return Wn.includes(t)}async function ot(t,e,s,r){let n=lr(t,s),o=lr(t,r);switch(e){case"-nt":try{let i=await t.fs.stat(n),a=await t.fs.stat(o);return i.mtime>a.mtime}catch{return!1}case"-ot":try{let i=await t.fs.stat(n),a=await t.fs.stat(o);return i.mtime<a.mtime}catch{return!1}case"-ef":try{if(!await t.fs.exists(n)||!await t.fs.exists(o))return!1;let i=t.fs.resolvePath(t.state.cwd,n),a=t.fs.resolvePath(t.state.cwd,o);return i===a}catch{return!1}default:return!1}}var Fn=new Set(["-eq","-ne","-lt","-le","-gt","-ge"]);function at(t){return Fn.has(t)}function ct(t,e,s){switch(t){case"-eq":return e===s;case"-ne":return e!==s;case"-lt":return e<s;case"-le":return e<=s;case"-gt":return e>s;case"-ge":return e>=s}}function lt(t){return t==="="||t==="=="||t==="!="}function ft(t,e,s,r=!1){let n=r?ut(e,s):e===s;return t==="!="?!n:n}var Mn=new Set(["-z","-n"]);function ht(t){return Mn.has(t)}function dt(t,e){switch(t){case"-z":return e==="";case"-n":return e!==""}}function mt(t,e){let s=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(s){let r=s[1],n=s[2];n=n.replace(/\$([a-zA-Z_][a-zA-Z0-9_]*)/g,(i,a)=>t.state.env[a]||"");let o;if(/^-?\d+$/.test(n))o=Number.parseInt(n,10);else try{let i=Function(`"use strict"; return (${n})`)();o=typeof i=="number"?Math.floor(i):0}catch{let i=t.state.env[n];o=i?Number.parseInt(i,10):0}if(o<0){let i=Te(t,r);if(i.length===0||(o=Math.max(...i)+1+o,o<0))return!1}return`${r}_${o}`in t.state.env}return e in t.state.env}async function pe(t,e){switch(e.type){case"CondBinary":{let s=await v(t,e.left),r=await v(t,e.right),n=e.right.parts.length>0&&e.right.parts.every(o=>o.type==="SingleQuoted"||o.type==="DoubleQuoted"||o.type==="Escaped");if(lt(e.operator))return ft(e.operator,s,r,!n);if(at(e.operator))return ct(e.operator,xs(t,s),xs(t,r));if(it(e.operator))return ot(t,e.operator,s,r);switch(e.operator){case"=~":try{let o=new RegExp(r),i=s.match(o);if(i){t.state.env.BASH_REMATCH=i[0];for(let a=1;a<i.length;a++)t.state.env[`BASH_REMATCH_${a}`]=i[a]||""}return i!==null}catch{throw new Error("syntax error in regular expression")}case"<":return s<r;case">":return s>r;default:return!1}}case"CondUnary":{let s=await v(t,e.operand);return st(e.operator)?nt(t,e.operator,s):ht(e.operator)?dt(e.operator,s):e.operator==="-v"?mt(t,s):e.operator==="-o"?ur(t,s):!1}case"CondNot":return!await pe(t,e.operand);case"CondAnd":return await pe(t,e.left)?await pe(t,e.right):!1;case"CondOr":return await pe(t,e.left)?!0:await pe(t,e.right);case"CondGroup":return await pe(t,e.expression);case"CondWord":return await v(t,e.word)!=="";default:return!1}}async function Pe(t,e){if(e.length===0)return x("","",1);if(e.length===1)return _(!!e[0]);if(e.length===2){let r=e[0],n=e[1];return r==="("?S(`test: '(' without matching ')'
98
- `,2):st(r)?_(await nt(t,r,n)):ht(r)?_(dt(r,n)):r==="!"?_(!n):r==="-v"?_(mt(t,n)):r==="-o"?_(ur(t,n)):r==="="||r==="=="||r==="!="||r==="<"||r===">"||r==="-eq"||r==="-ne"||r==="-lt"||r==="-le"||r==="-gt"||r==="-ge"||r==="-nt"||r==="-ot"||r==="-ef"?S(`test: ${r}: unary operator expected
99
- `,2):x("","",1)}if(e.length===3){let r=e[0],n=e[1],o=e[2];if(lt(n))return _(ft(n,r,o));if(at(n)){let i=pt(r),a=pt(o);return!i.valid||!a.valid?x("","",2):_(ct(n,i.value,a.value))}if(it(n))return _(await ot(t,n,r,o));switch(n){case"-a":return _(r!==""&&o!=="");case"-o":return _(r!==""||o!=="");case">":return _(r>o);case"<":return _(r<o)}if(r==="!"){let i=await Pe(t,[n,o]);return x("",i.stderr,i.exitCode===0?1:i.exitCode===1?0:i.exitCode)}if(r==="("&&o===")")return _(n!=="")}if(e.length===4){if(e[0]==="!"){let r=await Pe(t,e.slice(1));return x("",r.stderr,r.exitCode===0?1:r.exitCode===1?0:r.exitCode)}if(e[0]==="("&&e[3]===")")return Pe(t,[e[1],e[2]])}let s=await bs(t,e,0);return s.pos<e.length?S(`test: too many arguments
100
- `,2):_(s.value)}async function bs(t,e,s){return Bn(t,e,s)}async function Bn(t,e,s){let{value:r,pos:n}=await As(t,e,s);for(;e[n]==="-o";){let o=await As(t,e,n+1);r=r||o.value,n=o.pos}return{value:r,pos:n}}async function As(t,e,s){let{value:r,pos:n}=await fr(t,e,s);for(;e[n]==="-a";){let o=await fr(t,e,n+1);r=r&&o.value,n=o.pos}return{value:r,pos:n}}async function fr(t,e,s){if(e[s]==="!"){let{value:r,pos:n}=await fr(t,e,s+1);return{value:!r,pos:n}}return zn(t,e,s)}async function zn(t,e,s){let r=e[s];if(r==="("){let{value:o,pos:i}=await bs(t,e,s+1);return{value:o,pos:e[i]===")"?i+1:i}}if(st(r)){let o=e[s+1]??"";return{value:await nt(t,r,o),pos:s+2}}if(ht(r)){let o=e[s+1]??"";return{value:dt(r,o),pos:s+2}}if(r==="-v"){let o=e[s+1]??"";return{value:mt(t,o),pos:s+2}}if(r==="-o"){let o=e[s+1]??"";return{value:ur(t,o),pos:s+2}}let n=e[s+1];if(lt(n)){let o=r,i=e[s+2]??"";return{value:ft(n,o,i),pos:s+3}}if(at(n)){let o=pt(r),i=pt(e[s+2]??"0");return!o.valid||!i.valid?{value:!1,pos:s+3}:{value:ct(n,o.value,i.value),pos:s+3}}if(it(n)){let o=r,i=e[s+2]??"";return{value:await ot(t,n,o,i),pos:s+3}}return{value:r!==void 0&&r!=="",pos:s+1}}function ut(t,e){let s="^";for(let r=0;r<e.length;r++){let n=e[r];if(n==="\\")if(r+1<e.length){let o=e[r+1];/[\\^$.|+(){}[\]*?]/.test(o)?s+=`\\${o}`:s+=o,r++}else s+="\\\\";else if(n==="*")s+=".*";else if(n==="?")s+=".";else if(n==="["){let o=e.indexOf("]",r+1);o!==-1?(s+=e.slice(r,o+1),r=o):s+="\\["}else/[\\^$.|+(){}]/.test(n)?s+=`\\${n}`:s+=n}return s+="$",new RegExp(s).test(t)}function ur(t,e){let r={errexit:()=>t.state.options.errexit===!0,nounset:()=>t.state.options.nounset===!0,pipefail:()=>t.state.options.pipefail===!0,xtrace:()=>t.state.options.xtrace===!0,e:()=>t.state.options.errexit===!0,u:()=>t.state.options.nounset===!0,x:()=>t.state.options.xtrace===!0}[e];return r?r():!1}function xs(t,e){if(e=e.trim(),e==="")return 0;if(/^[+-]?(\d+#[a-zA-Z0-9@_]+|0[xX][0-9a-fA-F]+|0[0-7]+|\d+)$/.test(e))return Ss(e);try{let s=new M,r=T(s,e);return C(t,r.expression)}catch{return Ss(e)}}function Un(t,e){let s=0;for(let r of t){let n;if(r>="0"&&r<="9")n=r.charCodeAt(0)-48;else if(r>="a"&&r<="z")n=r.charCodeAt(0)-97+10;else if(r>="A"&&r<="Z")n=r.charCodeAt(0)-65+36;else if(r==="@")n=62;else if(r==="_")n=63;else return Number.NaN;if(n>=e)return Number.NaN;s=s*e+n}return s}function Ss(t){if(t=t.trim(),t==="")return 0;let e=!1;t.startsWith("-")?(e=!0,t=t.slice(1)):t.startsWith("+")&&(t=t.slice(1));let s,r=t.match(/^(\d+)#([a-zA-Z0-9@_]+)$/);if(r){let n=Number.parseInt(r[1],10);n>=2&&n<=64?s=Un(r[2],n):s=0}else/^0[xX][0-9a-fA-F]+$/.test(t)?s=Number.parseInt(t,16):/^0[0-7]+$/.test(t)?s=Number.parseInt(t,8):s=Number.parseInt(t,10);return Number.isNaN(s)&&(s=0),e?-s:s}function pt(t){if(t=t.trim(),t==="")return{value:0,valid:!0};let e=!1;if(t.startsWith("-")?(e=!0,t=t.slice(1)):t.startsWith("+")&&(t=t.slice(1)),!/^\d+$/.test(t))return{value:0,valid:!1};let s=Number.parseInt(t,10);return Number.isNaN(s)?{value:0,valid:!1}:{value:e?-s:s,valid:!0}}async function hr(t,e){let s=t.state.inCondition;t.state.inCondition=!0;let r="",n="",o=0;try{for(let i of e){let a=await t.executeStatement(i);r+=a.stdout,n+=a.stderr,o=a.exitCode}}finally{t.state.inCondition=s}return{stdout:r,stderr:n,exitCode:o}}function Be(t,e,s,r){if(t instanceof U)return e+=t.stdout,s+=t.stderr,t.levels>1&&r>1?(t.levels--,t.stdout=e,t.stderr=s,{action:"rethrow",stdout:e,stderr:s,error:t}):{action:"break",stdout:e,stderr:s};if(t instanceof X)return e+=t.stdout,s+=t.stderr,t.levels>1&&r>1?(t.levels--,t.stdout=e,t.stderr=s,{action:"rethrow",stdout:e,stderr:s,error:t}):{action:"continue",stdout:e,stderr:s};if(t instanceof V||t instanceof te||t instanceof k||t instanceof z)return t.prependOutput(e,s),{action:"rethrow",stdout:e,stderr:s,error:t};let n=le(t);return{action:"error",stdout:e,stderr:`${s}${n}
101
- `,exitCode:1}}async function yt(t,e,s="",r=""){let n=s,o=r,i=0;try{for(let a of e){let l=await t.executeStatement(a);n+=l.stdout,o+=l.stderr,i=l.exitCode}}catch(a){if(Ve(a)||a instanceof te||a instanceof k||a instanceof z||a instanceof fe)throw a.prependOutput(n,o),a;return{stdout:n,stderr:`${o}${le(a)}
102
- `,exitCode:1}}return{stdout:n,stderr:o,exitCode:i}}async function Ns(t,e){let s="",r="";for(let n of e.clauses){let o=await hr(t,n.condition);if(s+=o.stdout,r+=o.stderr,o.exitCode===0)return yt(t,n.body,s,r)}return e.elseBody?yt(t,e.elseBody,s,r):x(s,r,0)}async function Cs(t,e){let s="",r="",n=0,o=0;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e.variable))return S(`bash: \`${e.variable}': not a valid identifier
103
- `);let i=[];if(e.words===null)i=(t.state.env["@"]||"").split(" ").filter(Boolean);else if(e.words.length===0)i=[];else for(let a of e.words){let l=await Me(t,a);i.push(...l.values)}t.state.loopDepth++;try{for(let a of i){o++,o>t.limits.maxLoopIterations&&ce(`for loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",s,r),t.state.env[e.variable]=a;try{for(let l of e.body){let c=await t.executeStatement(l);s+=c.stdout,r+=c.stderr,n=c.exitCode}}catch(l){let c=Be(l,s,r,t.state.loopDepth);if(s=c.stdout,r=c.stderr,c.action==="break")break;if(c.action==="continue")continue;if(c.action==="error")return x(s,r,c.exitCode??1);throw c.error}}}finally{t.state.loopDepth--}return x(s,r,n)}async function $s(t,e){let s="",r="",n=0,o=0;e.init&&await $(t,e.init.expression),t.state.loopDepth++;try{for(;o++,o>t.limits.maxLoopIterations&&ce(`for loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",s,r),!(e.condition&&await $(t,e.condition.expression)===0);){try{for(let i of e.body){let a=await t.executeStatement(i);s+=a.stdout,r+=a.stderr,n=a.exitCode}}catch(i){let a=Be(i,s,r,t.state.loopDepth);if(s=a.stdout,r=a.stderr,a.action==="break")break;if(a.action==="continue"){e.update&&await $(t,e.update.expression);continue}if(a.action==="error")return x(s,r,a.exitCode??1);throw a.error}e.update&&await $(t,e.update.expression)}}finally{t.state.loopDepth--}return x(s,r,n)}async function Ps(t,e,s=""){let r="",n="",o=0,i=0,a=s;for(let c of e.redirections)if((c.operator==="<<"||c.operator==="<<-")&&c.target.type==="HereDoc"){let f=c.target,h=await v(t,f.content);f.stripTabs&&(h=h.split(`
104
- `).map(d=>d.replace(/^\t+/,"")).join(`
105
- `)),a=h}else if(c.operator==="<<<"&&c.target.type==="Word")a=`${await v(t,c.target)}
106
- `;else if(c.operator==="<"&&c.target.type==="Word")try{let f=await v(t,c.target),h=t.fs.resolvePath(t.state.cwd,f);a=await t.fs.readFile(h)}catch{let f=await v(t,c.target);return S(`bash: ${f}: No such file or directory
107
- `)}let l=t.state.groupStdin;a&&(t.state.groupStdin=a),t.state.loopDepth++;try{for(;;){i++,i>t.limits.maxLoopIterations&&ce(`while loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,n);let c=0,f=!1,h=!1,d=t.state.inCondition;t.state.inCondition=!0;try{for(let m of e.condition){let y=await t.executeStatement(m);r+=y.stdout,n+=y.stderr,c=y.exitCode}}catch(m){if(m instanceof U){if(r+=m.stdout,n+=m.stderr,m.levels>1&&t.state.loopDepth>1)throw m.levels--,m.stdout=r,m.stderr=n,t.state.inCondition=d,m;f=!0}else if(m instanceof X){if(r+=m.stdout,n+=m.stderr,m.levels>1&&t.state.loopDepth>1)throw m.levels--,m.stdout=r,m.stderr=n,t.state.inCondition=d,m;h=!0}else throw t.state.inCondition=d,m}finally{t.state.inCondition=d}if(f)break;if(!h){if(c!==0)break;try{for(let m of e.body){let y=await t.executeStatement(m);r+=y.stdout,n+=y.stderr,o=y.exitCode}}catch(m){let y=Be(m,r,n,t.state.loopDepth);if(r=y.stdout,n=y.stderr,y.action==="break")break;if(y.action==="continue")continue;if(y.action==="error")return x(r,n,y.exitCode??1);throw y.error}}}}finally{t.state.loopDepth--,t.state.groupStdin=l}return x(r,n,o)}async function vs(t,e){let s="",r="",n=0,o=0;t.state.loopDepth++;try{for(;;){o++,o>t.limits.maxLoopIterations&&ce(`until loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",s,r);let i=await hr(t,e.condition);if(s+=i.stdout,r+=i.stderr,i.exitCode===0)break;try{for(let a of e.body){let l=await t.executeStatement(a);s+=l.stdout,r+=l.stderr,n=l.exitCode}}catch(a){let l=Be(a,s,r,t.state.loopDepth);if(s=l.stdout,r=l.stderr,l.action==="break")break;if(l.action==="continue")continue;if(l.action==="error")return x(s,r,l.exitCode??1);throw l.error}}}finally{t.state.loopDepth--}return x(s,r,n)}async function Is(t,e){let s="",r="",n=0,o=await v(t,e.word),i=!1;for(let a=0;a<e.items.length;a++){let l=e.items[a],c=i;if(!i)for(let f of l.patterns){let h=await v(t,f);if(rs(f)&&(h=ss(h)),ut(o,h)){c=!0;break}}if(c){let f=await yt(t,l.body,s,r);if(s=f.stdout,r=f.stderr,n=f.exitCode,l.terminator===";;")break;l.terminator===";&"?i=!0:i=!1}else i=!1}return x(s,r,n)}function Rs(t,e){return t.state.functions.set(e.name,e),N}async function ks(t,e,s){t.state.callDepth++,t.state.callDepth>t.limits.maxCallDepth&&(t.state.callDepth--,ce(`${e.name}: maximum recursion depth (${t.limits.maxCallDepth}) exceeded, increase executionLimits.maxCallDepth`,"recursion")),t.state.localScopes.push(new Map);let r={};for(let o=0;o<s.length;o++)r[String(o+1)]=t.state.env[String(o+1)],t.state.env[String(o+1)]=s[o];r["@"]=t.state.env["@"],r["#"]=t.state.env["#"],t.state.env["@"]=s.join(" "),t.state.env["#"]=String(s.length);let n=()=>{let o=t.state.localScopes.pop();if(o)for(let[i,a]of o)a===void 0?delete t.state.env[i]:t.state.env[i]=a;for(let[i,a]of Object.entries(r))a===void 0?delete t.state.env[i]:t.state.env[i]=a;t.state.callDepth--};try{let o=await t.executeCommand(e.body,"");return n(),o}catch(o){if(n(),o instanceof V)return x(o.stdout,o.stderr,o.exitCode);throw o}}async function Ds(t,e,s){let{stdout:r,stderr:n,exitCode:o}=e;for(let i of s){if(i.target.type==="HereDoc")continue;let a=await v(t,i.target);switch(i.operator){case">":{let l=i.fd??1;if(l===1){let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){n+=`bash: ${a}: Is a directory
108
- `,o=1,r="";break}}catch{}await t.fs.writeFile(c,r),r=""}else if(l===2)if(a==="/dev/null")n="";else{let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){n+=`bash: ${a}: Is a directory
109
- `,o=1;break}}catch{}await t.fs.writeFile(c,n),n=""}break}case">>":{let l=i.fd??1;if(l===1){let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){n+=`bash: ${a}: Is a directory
110
- `,o=1,r="";break}}catch{}await t.fs.appendFile(c,r),r=""}else if(l===2){let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){n+=`bash: ${a}: Is a directory
111
- `,o=1;break}}catch{}await t.fs.appendFile(c,n),n=""}break}case">&":{let l=i.fd??1;a==="2"||a==="&2"?l===1&&(n+=r,r=""):(a==="1"||a==="&1")&&(r+=n,n="");break}case"&>":{let l=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(l)).isDirectory){n=`bash: ${a}: Is a directory
112
- `,o=1,r="";break}}catch{}await t.fs.writeFile(l,r+n),r="",n="";break}case"&>>":{let l=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(l)).isDirectory){n=`bash: ${a}: Is a directory
113
- `,o=1,r="";break}}catch{}await t.fs.appendFile(l,r+n),r="",n="";break}}}return x(r,n,o)}var ze=class{ctx;constructor(e,s){this.ctx={state:s,fs:e.fs,commands:e.commands,limits:e.limits,execFn:e.exec,executeScript:this.executeScript.bind(this),executeStatement:this.executeStatement.bind(this),executeCommand:this.executeCommand.bind(this),fetch:e.fetch,sleep:e.sleep}}async executeScript(e){let s="",r="",n=0;for(let o of e.statements)try{let i=await this.executeStatement(o);s+=i.stdout,r+=i.stderr,n=i.exitCode,this.ctx.state.lastExitCode=n,this.ctx.state.env["?"]=String(n)}catch(i){if(i instanceof k)throw i.prependOutput(s,r),i;if(i instanceof z)throw i;if(i instanceof te)return s+=i.stdout,r+=i.stderr,n=i.exitCode,this.ctx.state.lastExitCode=n,this.ctx.state.env["?"]=String(n),{stdout:s,stderr:r,exitCode:n,env:{...this.ctx.state.env}};if(i instanceof Y)return s+=i.stdout,r+=i.stderr,n=1,this.ctx.state.lastExitCode=n,this.ctx.state.env["?"]=String(n),{stdout:s,stderr:r,exitCode:n,env:{...this.ctx.state.env}};if(i instanceof Ee)return s+=i.stdout,r+=i.stderr,n=1,this.ctx.state.lastExitCode=n,this.ctx.state.env["?"]=String(n),{stdout:s,stderr:r,exitCode:n,env:{...this.ctx.state.env}};if(i instanceof U||i instanceof X){if(this.ctx.state.loopDepth>0)throw i.prependOutput(s,r),i;s+=i.stdout,r+=i.stderr;continue}throw i instanceof V&&i.prependOutput(s,r),i}return{stdout:s,stderr:r,exitCode:n,env:{...this.ctx.state.env}}}async executeStatement(e){this.ctx.state.commandCount++,this.ctx.state.commandCount>this.ctx.limits.maxCommandCount&&ce(`too many commands executed (>${this.ctx.limits.maxCommandCount}), increase executionLimits.maxCommandCount`,"commands");let s="",r="",n=0,o=-1,i=!1;for(let a=0;a<e.pipelines.length;a++){let l=e.pipelines[a],c=a>0?e.operators[a-1]:null;if(c==="&&"&&n!==0||c==="||"&&n===0)continue;let f=await this.executePipeline(l);s+=f.stdout,r+=f.stderr,n=f.exitCode,o=a,i=l.negated,this.ctx.state.lastExitCode=n,this.ctx.state.env["?"]=String(n)}if(this.ctx.state.options.errexit&&n!==0&&o===e.pipelines.length-1&&!i&&!this.ctx.state.inCondition)throw new te(n,s,r);return x(s,r,n)}async executePipeline(e){let s="",r=N,n=0,o=[];for(let i=0;i<e.commands.length;i++){let a=e.commands[i],l=i===e.commands.length-1,c;try{c=await this.executeCommand(a,s)}catch(f){if(f instanceof Ee)c={stdout:f.stdout,stderr:f.stderr,exitCode:1};else if(f instanceof k&&e.commands.length>1)c={stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode};else throw f}o.push(c.exitCode),c.exitCode!==0&&(n=c.exitCode),l?r=c:(s=c.stdout,r={stdout:"",stderr:c.stderr,exitCode:c.exitCode})}for(let i of Object.keys(this.ctx.state.env))i.startsWith("PIPESTATUS_")&&delete this.ctx.state.env[i];for(let i=0;i<o.length;i++)this.ctx.state.env[`PIPESTATUS_${i}`]=String(o[i]);return this.ctx.state.env.PIPESTATUS__length=String(o.length),this.ctx.state.options.pipefail&&n!==0&&(r={...r,exitCode:n}),e.negated&&(r={...r,exitCode:r.exitCode===0?1:0}),r}async executeCommand(e,s){switch(e.type){case"SimpleCommand":return this.executeSimpleCommand(e,s);case"If":return Ns(this.ctx,e);case"For":return Cs(this.ctx,e);case"CStyleFor":return $s(this.ctx,e);case"While":return Ps(this.ctx,e,s);case"Until":return vs(this.ctx,e);case"Case":return Is(this.ctx,e);case"Subshell":return this.executeSubshell(e,s);case"Group":return this.executeGroup(e,s);case"FunctionDef":return Rs(this.ctx,e);case"ArithmeticCommand":return this.executeArithmeticCommand(e);case"ConditionalCommand":return this.executeConditionalCommand(e);default:return N}}async executeSimpleCommand(e,s){try{return await this.executeSimpleCommandInner(e,s)}catch(r){if(r instanceof F)return S(r.stderr);throw r}}async executeSimpleCommandInner(e,s){this.ctx.state.expansionStderr="";let r={};for(let l of e.assignments){let c=l.name;if(l.array){if(/\[.+\]$/.test(c))return x("",`bash: ${c}: cannot assign list to array member
114
- `,1);let g=me(this.ctx,c);if(g)return g;let p=[];for(let w of l.array){let b=await Me(this.ctx,w);p.push(...b.values)}let E=0;if(l.append){let w=W(this.ctx,c);w.length>0&&(E=Math.max(...w.map(([I])=>typeof I=="number"?I:0))+1)}else{let w=`${c}_`;for(let b of Object.keys(this.ctx.state.env))b.startsWith(w)&&!b.includes("__")&&delete this.ctx.state.env[b]}for(let w=0;w<p.length;w++)this.ctx.state.env[`${c}_${E+w}`]=p[w];l.append||(this.ctx.state.env[`${c}__length`]=String(p.length));continue}let f=l.value?await v(this.ctx,l.value):"";if(c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[\]$/))return x("",`bash: ${c}: bad array subscript
115
- `,1);let d=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(d){let g=d[1],p=d[2],E=me(this.ctx,g);if(E)return E;let w=this.ctx.state.associativeArrays?.has(g),b;if(w){let R;if(p.startsWith("'")&&p.endsWith("'"))R=p.slice(1,-1);else if(p.startsWith('"')&&p.endsWith('"')){let D=p.slice(1,-1),L=new M().parseWordFromString(D,!0,!1);R=await v(this.ctx,L)}else if(p.includes("$")){let ye=new M().parseWordFromString(p,!1,!1);R=await v(this.ctx,ye)}else R=p;b=`${g}_${R}`}else{let R;if(/^-?\d+$/.test(p))R=Number.parseInt(p,10);else{try{let D=new M,ye=T(D,p);R=C(this.ctx,ye.expression)}catch{let D=this.ctx.state.env[p];R=D?Number.parseInt(D,10):0}Number.isNaN(R)&&(R=0)}if(R<0){let D=W(this.ctx,g);if(D.length===0)return x("",`bash: ${g}[${p}]: bad array subscript
116
- `,1);if(R=Math.max(...D.map(([L])=>typeof L=="number"?L:0))+1+R,R<0)return x("",`bash: ${g}[${p}]: bad array subscript
117
- `,1)}b=`${g}_${R}`}let I=l.append?(this.ctx.state.env[b]||"")+f:f;e.name?(r[b]=this.ctx.state.env[b],this.ctx.state.env[b]=I):this.ctx.state.env[b]=I;continue}let m=me(this.ctx,c);if(m)return m;let y=l.append?(this.ctx.state.env[c]||"")+f:f;e.name?(r[c]=this.ctx.state.env[c],this.ctx.state.env[c]=y):this.ctx.state.env[c]=y}if(!e.name)return x("","",this.ctx.state.lastExitCode);for(let l of e.redirections){if((l.operator==="<<"||l.operator==="<<-")&&l.target.type==="HereDoc"){let c=l.target,f=await v(this.ctx,c.content);c.stripTabs&&(f=f.split(`
96
+ `)}if(r.length>1&&(r[0]==="-"||r[0]==="+")&&r[1]!=="-"){let s=r[0]==="-";for(let o=1;o<r.length;o++){let i=r[o];if(!(i in xn))return S(`bash: set: ${r[0]}${i}: invalid option
97
+ ${nt}`);Cn(t,xn[i],s)}n++;continue}if(r==="--")return ir(t,e.slice(n+1)),C;if(r==="-"){if(t.state.options.xtrace=!1,t.state.options.verbose=!1,n+1<e.length)return ir(t,e.slice(n+1)),C;n++;continue}if(r==="+"){n++;continue}return r.startsWith("-")||r.startsWith("+")?S(`bash: set: ${r}: invalid option
98
+ ${nt}`):(ir(t,e.slice(n)),C)}return C}function ir(t,e){let n=1;for(;t.state.env[String(n)]!==void 0;)delete t.state.env[String(n)],n++;for(let r=0;r<e.length;r++)t.state.env[String(r+1)]=e[r];t.state.env["#"]=String(e.length),t.state.env["@"]=e.join(" "),t.state.env["*"]=e.join(" ")}function ar(t,e){let n=1;if(e.length>0){let i=Number.parseInt(e[0],10);if(Number.isNaN(i)||i<0)return S(`bash: shift: ${e[0]}: numeric argument required
99
+ `);n=i}let r=Number.parseInt(t.state.env["#"]||"0",10);if(n>r)return S(`bash: shift: shift count out of range
100
+ `);if(n===0)return C;let s=[];for(let i=1;i<=r;i++)s.push(t.state.env[String(i)]||"");let o=s.slice(n);for(let i=1;i<=r;i++)delete t.state.env[String(i)];for(let i=0;i<o.length;i++)t.state.env[String(i+1)]=o[i];return t.state.env["#"]=String(o.length),t.state.env["@"]=o.join(" "),C}async function cr(t,e){let n=e;if(n.length>0&&n[0]==="--"&&(n=n.slice(1)),n.length===0)return x("",`bash: source: filename argument required
101
+ `,2);let r=n[0],s=null,o=null;if(r.includes("/")){let l=t.fs.resolvePath(t.state.cwd,r);try{o=await t.fs.readFile(l),s=l}catch{}}else{let c=(t.state.env.PATH||"").split(":").filter(f=>f);for(let f of c){let d=t.fs.resolvePath(t.state.cwd,`${f}/${r}`);try{if((await t.fs.stat(d)).isDirectory)continue;o=await t.fs.readFile(d),s=d;break}catch{}}if(o===null){let f=t.fs.resolvePath(t.state.cwd,r);try{o=await t.fs.readFile(f),s=f}catch{}}}if(o===null)return S(`bash: ${r}: No such file or directory
102
+ `);let i={};if(n.length>1){for(let c=1;c<=9;c++)i[String(c)]=t.state.env[String(c)];i["#"]=t.state.env["#"],i["@"]=t.state.env["@"];let l=n.slice(1);t.state.env["#"]=String(l.length),t.state.env["@"]=l.join(" ");for(let c=0;c<l.length&&c<9;c++)t.state.env[String(c+1)]=l[c];for(let c=l.length+1;c<=9;c++)delete t.state.env[String(c)]}let a=()=>{if(t.state.sourceDepth--,n.length>1)for(let[l,c]of Object.entries(i))c===void 0?delete t.state.env[l]:t.state.env[l]=c};t.state.sourceDepth++;try{let l=ue(o),c=await t.executeScript(l);return a(),c}catch(l){if(a(),l instanceof k)throw l;if(l instanceof V)return x(l.stdout,l.stderr,l.exitCode);if(l.name==="ParseException")return S(`bash: ${r}: ${l.message}
103
+ `);throw l}}function lr(t,e){let n="variable",r="",s=0;for(let o of e){if(o==="-v"){n="variable";continue}if(o==="-f"){n="function";continue}if(n==="function"){t.state.functions.delete(o);continue}let i=o.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(i){let a=i[1],l=i[2];if(l==="@"||l==="*"){let f=F(t,a);for(let[d]of f)delete t.state.env[`${a}_${d}`];delete t.state.env[a];continue}let c;if(/^-?\d+$/.test(l))c=Number.parseInt(l,10);else{let f=t.state.env[l];c=f?Number.parseInt(f,10):0,Number.isNaN(c)&&(c=0)}if(c<0){let f=F(t,a),d=f.length;if(d===0){r+=`bash: unset: [${c}]: bad array subscript
104
+ `,s=1;continue}let h=d+c;if(h<0){r+=`bash: unset: [${c}]: bad array subscript
105
+ `,s=1;continue}let m=f[h][0];delete t.state.env[`${a}_${m}`];continue}delete t.state.env[`${a}_${c}`];continue}delete t.state.env[o],t.state.functions.delete(o)}return x("",r,s)}function fr(t,e){return t.fs.resolvePath(t.state.cwd,e)}var Hs=["-e","-a","-f","-d","-r","-w","-x","-s","-L","-h","-k","-g","-u","-G","-O","-b","-c","-p","-S","-t","-N"];function st(t){return Hs.includes(t)}async function it(t,e,n){let r=fr(t,n);switch(e){case"-e":case"-a":return t.fs.exists(r);case"-f":return await t.fs.exists(r)?(await t.fs.stat(r)).isFile:!1;case"-d":return await t.fs.exists(r)?(await t.fs.stat(r)).isDirectory:!1;case"-r":case"-w":case"-x":return t.fs.exists(r);case"-s":return await t.fs.exists(r)?(await t.fs.stat(r)).size>0:!1;case"-L":case"-h":try{return(await t.fs.lstat(r)).isSymbolicLink}catch{return!1}case"-k":return await t.fs.exists(r)?((await t.fs.stat(r)).mode&512)!==0:!1;case"-g":return await t.fs.exists(r)?((await t.fs.stat(r)).mode&1024)!==0:!1;case"-u":return await t.fs.exists(r)?((await t.fs.stat(r)).mode&2048)!==0:!1;case"-G":case"-O":return t.fs.exists(r);case"-b":return!1;case"-c":return["/dev/null","/dev/zero","/dev/random","/dev/urandom","/dev/tty","/dev/stdin","/dev/stdout","/dev/stderr"].some(o=>r===o||r.endsWith(o));case"-p":return!1;case"-S":return!1;case"-t":return!1;case"-N":return t.fs.exists(r);default:return!1}}var js=["-nt","-ot","-ef"];function ot(t){return js.includes(t)}async function at(t,e,n,r){let s=fr(t,n),o=fr(t,r);switch(e){case"-nt":try{let i=await t.fs.stat(s),a=await t.fs.stat(o);return i.mtime>a.mtime}catch{return!1}case"-ot":try{let i=await t.fs.stat(s),a=await t.fs.stat(o);return i.mtime<a.mtime}catch{return!1}case"-ef":try{if(!await t.fs.exists(s)||!await t.fs.exists(o))return!1;let i=t.fs.resolvePath(t.state.cwd,s),a=t.fs.resolvePath(t.state.cwd,o);return i===a}catch{return!1}default:return!1}}var Zs=new Set(["-eq","-ne","-lt","-le","-gt","-ge"]);function ct(t){return Zs.has(t)}function lt(t,e,n){switch(t){case"-eq":return e===n;case"-ne":return e!==n;case"-lt":return e<n;case"-le":return e<=n;case"-gt":return e>n;case"-ge":return e>=n}}function ft(t){return t==="="||t==="=="||t==="!="}function ut(t,e,n,r=!1){let s=r?dt(e,n):e===n;return t==="!="?!s:s}var qs=new Set(["-z","-n"]);function ht(t){return qs.has(t)}function mt(t,e){switch(t){case"-z":return e==="";case"-n":return e!==""}}function pt(t,e){let n=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(n){let r=n[1],s=n[2];s=s.replace(/\$([a-zA-Z_][a-zA-Z0-9_]*)/g,(i,a)=>t.state.env[a]||"");let o;if(/^-?\d+$/.test(s))o=Number.parseInt(s,10);else try{let i=Function(`"use strict"; return (${s})`)();o=typeof i=="number"?Math.floor(i):0}catch{let i=t.state.env[s];o=i?Number.parseInt(i,10):0}if(o<0){let i=We(t,r);if(i.length===0||(o=Math.max(...i)+1+o,o<0))return!1}return`${r}_${o}`in t.state.env}return e in t.state.env}async function me(t,e){switch(e.type){case"CondBinary":{let n=await I(t,e.left),r=await I(t,e.right),s=e.right.parts.length>0&&e.right.parts.every(o=>o.type==="SingleQuoted"||o.type==="DoubleQuoted"||o.type==="Escaped");if(ft(e.operator))return ut(e.operator,n,r,!s);if(ct(e.operator))return lt(e.operator,Pn(t,n),Pn(t,r));if(ot(e.operator))return at(t,e.operator,n,r);switch(e.operator){case"=~":try{let o=new RegExp(r),i=n.match(o);if(i){t.state.env.BASH_REMATCH=i[0];for(let a=1;a<i.length;a++)t.state.env[`BASH_REMATCH_${a}`]=i[a]||""}return i!==null}catch{throw new Error("syntax error in regular expression")}case"<":return n<r;case">":return n>r;default:return!1}}case"CondUnary":{let n=await I(t,e.operand);return st(e.operator)?it(t,e.operator,n):ht(e.operator)?mt(e.operator,n):e.operator==="-v"?pt(t,n):e.operator==="-o"?dr(t,n):!1}case"CondNot":return!await me(t,e.operand);case"CondAnd":return await me(t,e.left)?await me(t,e.right):!1;case"CondOr":return await me(t,e.left)?!0:await me(t,e.right);case"CondGroup":return await me(t,e.expression);case"CondWord":return await I(t,e.word)!=="";default:return!1}}async function ve(t,e){if(e.length===0)return x("","",1);if(e.length===1)return _(!!e[0]);if(e.length===2){let r=e[0],s=e[1];return r==="("?S(`test: '(' without matching ')'
106
+ `,2):st(r)?_(await it(t,r,s)):ht(r)?_(mt(r,s)):r==="!"?_(!s):r==="-v"?_(pt(t,s)):r==="-o"?_(dr(t,s)):r==="="||r==="=="||r==="!="||r==="<"||r===">"||r==="-eq"||r==="-ne"||r==="-lt"||r==="-le"||r==="-gt"||r==="-ge"||r==="-nt"||r==="-ot"||r==="-ef"?S(`test: ${r}: unary operator expected
107
+ `,2):x("","",1)}if(e.length===3){let r=e[0],s=e[1],o=e[2];if(ft(s))return _(ut(s,r,o));if(ct(s)){let i=yt(r),a=yt(o);return!i.valid||!a.valid?x("","",2):_(lt(s,i.value,a.value))}if(ot(s))return _(await at(t,s,r,o));switch(s){case"-a":return _(r!==""&&o!=="");case"-o":return _(r!==""||o!=="");case">":return _(r>o);case"<":return _(r<o)}if(r==="!"){let i=await ve(t,[s,o]);return x("",i.stderr,i.exitCode===0?1:i.exitCode===1?0:i.exitCode)}if(r==="("&&o===")")return _(s!=="")}if(e.length===4){if(e[0]==="!"){let r=await ve(t,e.slice(1));return x("",r.stderr,r.exitCode===0?1:r.exitCode===1?0:r.exitCode)}if(e[0]==="("&&e[3]===")")return ve(t,[e[1],e[2]])}let n=await In(t,e,0);return n.pos<e.length?S(`test: too many arguments
108
+ `,2):_(n.value)}async function In(t,e,n){return Qs(t,e,n)}async function Qs(t,e,n){let{value:r,pos:s}=await $n(t,e,n);for(;e[s]==="-o";){let o=await $n(t,e,s+1);r=r||o.value,s=o.pos}return{value:r,pos:s}}async function $n(t,e,n){let{value:r,pos:s}=await ur(t,e,n);for(;e[s]==="-a";){let o=await ur(t,e,s+1);r=r&&o.value,s=o.pos}return{value:r,pos:s}}async function ur(t,e,n){if(e[n]==="!"){let{value:r,pos:s}=await ur(t,e,n+1);return{value:!r,pos:s}}return Ks(t,e,n)}async function Ks(t,e,n){let r=e[n];if(r==="("){let{value:o,pos:i}=await In(t,e,n+1);return{value:o,pos:e[i]===")"?i+1:i}}if(st(r)){let o=e[n+1]??"";return{value:await it(t,r,o),pos:n+2}}if(ht(r)){let o=e[n+1]??"";return{value:mt(r,o),pos:n+2}}if(r==="-v"){let o=e[n+1]??"";return{value:pt(t,o),pos:n+2}}if(r==="-o"){let o=e[n+1]??"";return{value:dr(t,o),pos:n+2}}let s=e[n+1];if(ft(s)){let o=r,i=e[n+2]??"";return{value:ut(s,o,i),pos:n+3}}if(ct(s)){let o=yt(r),i=yt(e[n+2]??"0");return!o.valid||!i.valid?{value:!1,pos:n+3}:{value:lt(s,o.value,i.value),pos:n+3}}if(ot(s)){let o=r,i=e[n+2]??"";return{value:await at(t,s,o,i),pos:n+3}}return{value:r!==void 0&&r!=="",pos:n+1}}function dt(t,e){let n="^";for(let r=0;r<e.length;r++){let s=e[r];if(s==="\\")if(r+1<e.length){let o=e[r+1];/[\\^$.|+(){}[\]*?]/.test(o)?n+=`\\${o}`:n+=o,r++}else n+="\\\\";else if(s==="*")n+=".*";else if(s==="?")n+=".";else if(s==="["){let o=e.indexOf("]",r+1);o!==-1?(n+=e.slice(r,o+1),r=o):n+="\\["}else/[\\^$.|+(){}]/.test(s)?n+=`\\${s}`:n+=s}return n+="$",new RegExp(n).test(t)}function dr(t,e){let r={errexit:()=>t.state.options.errexit===!0,nounset:()=>t.state.options.nounset===!0,pipefail:()=>t.state.options.pipefail===!0,xtrace:()=>t.state.options.xtrace===!0,e:()=>t.state.options.errexit===!0,u:()=>t.state.options.nounset===!0,x:()=>t.state.options.xtrace===!0}[e];return r?r():!1}function Pn(t,e){if(e=e.trim(),e==="")return 0;if(/^[+-]?(\d+#[a-zA-Z0-9@_]+|0[xX][0-9a-fA-F]+|0[0-7]+|\d+)$/.test(e))return vn(e);try{let n=new M,r=T(n,e);return $(t,r.expression)}catch{return vn(e)}}function Xs(t,e){let n=0;for(let r of t){let s;if(r>="0"&&r<="9")s=r.charCodeAt(0)-48;else if(r>="a"&&r<="z")s=r.charCodeAt(0)-97+10;else if(r>="A"&&r<="Z")s=r.charCodeAt(0)-65+36;else if(r==="@")s=62;else if(r==="_")s=63;else return Number.NaN;if(s>=e)return Number.NaN;n=n*e+s}return n}function vn(t){if(t=t.trim(),t==="")return 0;let e=!1;t.startsWith("-")?(e=!0,t=t.slice(1)):t.startsWith("+")&&(t=t.slice(1));let n,r=t.match(/^(\d+)#([a-zA-Z0-9@_]+)$/);if(r){let s=Number.parseInt(r[1],10);s>=2&&s<=64?n=Xs(r[2],s):n=0}else/^0[xX][0-9a-fA-F]+$/.test(t)?n=Number.parseInt(t,16):/^0[0-7]+$/.test(t)?n=Number.parseInt(t,8):n=Number.parseInt(t,10);return Number.isNaN(n)&&(n=0),e?-n:n}function yt(t){if(t=t.trim(),t==="")return{value:0,valid:!0};let e=!1;if(t.startsWith("-")?(e=!0,t=t.slice(1)):t.startsWith("+")&&(t=t.slice(1)),!/^\d+$/.test(t))return{value:0,valid:!1};let n=Number.parseInt(t,10);return Number.isNaN(n)?{value:0,valid:!1}:{value:e?-n:n,valid:!0}}async function hr(t,e){let n=t.state.inCondition;t.state.inCondition=!0;let r="",s="",o=0;try{for(let i of e){let a=await t.executeStatement(i);r+=a.stdout,s+=a.stderr,o=a.exitCode}}finally{t.state.inCondition=n}return{stdout:r,stderr:s,exitCode:o}}function ze(t,e,n,r){if(t instanceof U)return e+=t.stdout,n+=t.stderr,t.levels>1&&r>1?(t.levels--,t.stdout=e,t.stderr=n,{action:"rethrow",stdout:e,stderr:n,error:t}):{action:"break",stdout:e,stderr:n};if(t instanceof Y)return e+=t.stdout,n+=t.stderr,t.levels>1&&r>1?(t.levels--,t.stdout=e,t.stderr=n,{action:"rethrow",stdout:e,stderr:n,error:t}):{action:"continue",stdout:e,stderr:n};if(t instanceof V||t instanceof te||t instanceof k||t instanceof z)return t.prependOutput(e,n),{action:"rethrow",stdout:e,stderr:n,error:t};let s=ce(t);return{action:"error",stdout:e,stderr:`${n}${s}
109
+ `,exitCode:1}}async function Et(t,e,n="",r=""){let s=n,o=r,i=0;try{for(let a of e){let l=await t.executeStatement(a);s+=l.stdout,o+=l.stderr,i=l.exitCode}}catch(a){if(Ge(a)||a instanceof te||a instanceof k||a instanceof z||a instanceof le)throw a.prependOutput(s,o),a;return{stdout:s,stderr:`${o}${ce(a)}
110
+ `,exitCode:1}}return{stdout:s,stderr:o,exitCode:i}}async function Rn(t,e){let n="",r="";for(let s of e.clauses){let o=await hr(t,s.condition);if(n+=o.stdout,r+=o.stderr,o.exitCode===0)return Et(t,s.body,n,r)}return e.elseBody?Et(t,e.elseBody,n,r):x(n,r,0)}async function kn(t,e){let n="",r="",s=0,o=0;if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e.variable))return S(`bash: \`${e.variable}': not a valid identifier
111
+ `);let i=[];if(e.words===null)i=(t.state.env["@"]||"").split(" ").filter(Boolean);else if(e.words.length===0)i=[];else for(let a of e.words){let l=await Be(t,a);i.push(...l.values)}t.state.loopDepth++;try{for(let a of i){o++,o>t.limits.maxLoopIterations&&ae(`for loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r),t.state.env[e.variable]=a;try{for(let l of e.body){let c=await t.executeStatement(l);n+=c.stdout,r+=c.stderr,s=c.exitCode}}catch(l){let c=ze(l,n,r,t.state.loopDepth);if(n=c.stdout,r=c.stderr,c.action==="break")break;if(c.action==="continue")continue;if(c.action==="error")return x(n,r,c.exitCode??1);throw c.error}}}finally{t.state.loopDepth--}return x(n,r,s)}async function Dn(t,e){let n="",r="",s=0,o=0;e.init&&await P(t,e.init.expression),t.state.loopDepth++;try{for(;o++,o>t.limits.maxLoopIterations&&ae(`for loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r),!(e.condition&&await P(t,e.condition.expression)===0);){try{for(let i of e.body){let a=await t.executeStatement(i);n+=a.stdout,r+=a.stderr,s=a.exitCode}}catch(i){let a=ze(i,n,r,t.state.loopDepth);if(n=a.stdout,r=a.stderr,a.action==="break")break;if(a.action==="continue"){e.update&&await P(t,e.update.expression);continue}if(a.action==="error")return x(n,r,a.exitCode??1);throw a.error}e.update&&await P(t,e.update.expression)}}finally{t.state.loopDepth--}return x(n,r,s)}async function On(t,e,n=""){let r="",s="",o=0,i=0,a=n;for(let c of e.redirections)if((c.operator==="<<"||c.operator==="<<-")&&c.target.type==="HereDoc"){let f=c.target,d=await I(t,f.content);f.stripTabs&&(d=d.split(`
118
112
  `).map(h=>h.replace(/^\t+/,"")).join(`
119
- `)),s=f;continue}if(l.operator==="<<<"&&l.target.type==="Word"){s=`${await v(this.ctx,l.target)}
120
- `;continue}if(l.operator==="<"&&l.target.type==="Word")try{let c=await v(this.ctx,l.target),f=this.ctx.fs.resolvePath(this.ctx.state.cwd,c);s=await this.ctx.fs.readFile(f)}catch{let c=await v(this.ctx,l.target);for(let[f,h]of Object.entries(r))h===void 0?delete this.ctx.state.env[f]:this.ctx.state.env[f]=h;return S(`bash: ${c}: No such file or directory
121
- `)}}let n=await v(this.ctx,e.name),o=[],i=[];for(let l of e.args){let c=await Me(this.ctx,l);for(let f of c.values)o.push(f),i.push(c.quoted)}if(!n){if(e.name.parts.every(c=>c.type==="CommandSubstitution"||c.type==="ParameterExpansion"||c.type==="ArithmeticExpansion")){if(o.length>0){let c=o.shift();return i.shift(),await this.runCommand(c,o,i,s)}return x("","",this.ctx.state.lastExitCode)}return S(`bash: : command not found
122
- `,127)}let a=await this.runCommand(n,o,i,s);a=await Ds(this.ctx,a,e.redirections),this.ctx.state.lastArg=o.length>0?o[o.length-1]:n;for(let[l,c]of Object.entries(r))c===void 0?delete this.ctx.state.env[l]:this.ctx.state.env[l]=c;return this.ctx.state.expansionStderr&&(a={...a,stderr:this.ctx.state.expansionStderr+a.stderr},this.ctx.state.expansionStderr=""),a}async runCommand(e,s,r,n,o=!1){if(e==="cd")return await jt(this.ctx,s);if(e==="export")return Jt(this.ctx,s);if(e==="unset")return cr(this.ctx,s);if(e==="exit")return Yt(this.ctx,s);if(e==="local")return tr(this.ctx,s);if(e==="set")return ir(this.ctx,s);if(e==="break")return Ht(this.ctx,s);if(e==="continue")return Zt(this.ctx,s);if(e==="return")return sr(this.ctx,s);if(e==="eval")return Xt(this.ctx,s);if(e==="shift")return or(this.ctx,s);if(e==="source"||e===".")return ar(this.ctx,s);if(e==="read")return rr(this.ctx,s,n);if(e==="declare"||e==="typeset")return Qt(this.ctx,s);if(e==="readonly")return Kt(this.ctx,s);if(!o){let f=this.ctx.state.functions.get(e);if(f)return ks(this.ctx,f,s)}if(e===":"||e==="true")return N;if(e==="false")return _(!1);if(e==="let")return er(this.ctx,s);if(e==="command"){if(s.length===0)return N;let f=s;for(;f.length>0&&f[0].startsWith("-");)f=f.slice(1);if(f.length===0)return N;let[h,...d]=f;return this.runCommand(h,d,[],n,!0)}if(e==="builtin"){if(s.length===0)return N;let[f,...h]=s;return this.runCommand(f,h,[],n)}if(e==="shopt")return N;if(e==="exec"){if(s.length===0)return N;let[f,...h]=s;return this.runCommand(f,h,[],n)}if(e==="wait")return N;if(e==="type")return this.handleType(s);if(e==="[["){let f=s.lastIndexOf("]]");if(f!==-1){let h=s.slice(0,f);return Pe(this.ctx,h)}return S("bash: [[: missing `]]'\n",2)}if(e==="["||e==="test"){let f=s;if(e==="["){if(s[s.length-1]!=="]")return S("[: missing `]'\n",2);f=s.slice(0,-1)}return Pe(this.ctx,f)}let i=await this.resolveCommand(e);if(!i)return S(`bash: ${e}: command not found
123
- `,127);let{cmd:a,path:l}=i,c={fs:this.ctx.fs,cwd:this.ctx.state.cwd,env:this.ctx.state.env,stdin:n,limits:this.ctx.limits,exec:this.ctx.execFn,fetch:this.ctx.fetch,getRegisteredCommands:()=>Array.from(this.ctx.commands.keys()),sleep:this.ctx.sleep};try{return await a.execute(s,c)}catch(f){return S(`${e}: ${le(f)}
124
- `)}}async resolveCommand(e){if(e.includes("/")){let o=this.ctx.fs.resolvePath(this.ctx.state.cwd,e);if(!await this.ctx.fs.exists(o))return null;let i=o.split("/").pop()||e,a=this.ctx.commands.get(i);return a?{cmd:a,path:o}:null}let r=(this.ctx.state.env.PATH||"/bin:/usr/bin").split(":");for(let o of r){if(!o)continue;let i=`${o}/${e}`;if(await this.ctx.fs.exists(i)){let a=this.ctx.commands.get(e);if(a)return{cmd:a,path:i}}}if(!await this.ctx.fs.exists("/bin")){let o=this.ctx.commands.get(e);if(o)return{cmd:o,path:`/bin/${e}`}}return null}async findCommandInPath(e){let s=[],n=(this.ctx.state.env.PATH||"/bin:/usr/bin").split(":");for(let o of n){if(!o)continue;let i=`${o}/${e}`;await this.ctx.fs.exists(i)&&s.push(i)}return s}handleType(e){let s=new Set(["if","then","else","elif","fi","case","esac","for","select","while","until","do","done","in","function","{","}","time","[[","]]","!"]),r=new Set(["cd","export","unset","exit","local","set","break","continue","return","eval","shift","source",".","read","declare","typeset","readonly",":","true","false","let","command","builtin","shopt","exec","wait","type","[","test"]),n="",o="",i=0;for(let a of e)s.has(a)?n+=`${a} is a shell keyword
125
- `:r.has(a)?n+=`${a} is a shell builtin
126
- `:this.ctx.state.functions.has(a)?n+=`${a} is a function
127
- `:this.ctx.commands.has(a)?n+=`${a} is /bin/${a}
113
+ `)),a=d}else if(c.operator==="<<<"&&c.target.type==="Word")a=`${await I(t,c.target)}
114
+ `;else if(c.operator==="<"&&c.target.type==="Word")try{let f=await I(t,c.target),d=t.fs.resolvePath(t.state.cwd,f);a=await t.fs.readFile(d)}catch{let f=await I(t,c.target);return S(`bash: ${f}: No such file or directory
115
+ `)}let l=t.state.groupStdin;a&&(t.state.groupStdin=a),t.state.loopDepth++;try{for(;;){i++,i>t.limits.maxLoopIterations&&ae(`while loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",r,s);let c=0,f=!1,d=!1,h=t.state.inCondition;t.state.inCondition=!0;try{for(let m of e.condition){let E=await t.executeStatement(m);r+=E.stdout,s+=E.stderr,c=E.exitCode}}catch(m){if(m instanceof U){if(r+=m.stdout,s+=m.stderr,m.levels>1&&t.state.loopDepth>1)throw m.levels--,m.stdout=r,m.stderr=s,t.state.inCondition=h,m;f=!0}else if(m instanceof Y){if(r+=m.stdout,s+=m.stderr,m.levels>1&&t.state.loopDepth>1)throw m.levels--,m.stdout=r,m.stderr=s,t.state.inCondition=h,m;d=!0}else throw t.state.inCondition=h,m}finally{t.state.inCondition=h}if(f)break;if(!d){if(c!==0)break;try{for(let m of e.body){let E=await t.executeStatement(m);r+=E.stdout,s+=E.stderr,o=E.exitCode}}catch(m){let E=ze(m,r,s,t.state.loopDepth);if(r=E.stdout,s=E.stderr,E.action==="break")break;if(E.action==="continue")continue;if(E.action==="error")return x(r,s,E.exitCode??1);throw E.error}}}}finally{t.state.loopDepth--,t.state.groupStdin=l}return x(r,s,o)}async function _n(t,e){let n="",r="",s=0,o=0;t.state.loopDepth++;try{for(;;){o++,o>t.limits.maxLoopIterations&&ae(`until loop: too many iterations (${t.limits.maxLoopIterations}), increase executionLimits.maxLoopIterations`,"iterations",n,r);let i=await hr(t,e.condition);if(n+=i.stdout,r+=i.stderr,i.exitCode===0)break;try{for(let a of e.body){let l=await t.executeStatement(a);n+=l.stdout,r+=l.stderr,s=l.exitCode}}catch(a){let l=ze(a,n,r,t.state.loopDepth);if(n=l.stdout,r=l.stderr,l.action==="break")break;if(l.action==="continue")continue;if(l.action==="error")return x(n,r,l.exitCode??1);throw l.error}}}finally{t.state.loopDepth--}return x(n,r,s)}async function Ln(t,e){let n="",r="",s=0,o=await I(t,e.word),i=!1;for(let a=0;a<e.items.length;a++){let l=e.items[a],c=i;if(!i)for(let f of l.patterns){let d=await I(t,f);if(cn(f)&&(d=ln(d)),dt(o,d)){c=!0;break}}if(c){let f=await Et(t,l.body,n,r);if(n=f.stdout,r=f.stderr,s=f.exitCode,l.terminator===";;")break;l.terminator===";&"?i=!0:i=!1}else i=!1}return x(n,r,s)}function Tn(t,e){return t.state.functions.set(e.name,e),C}async function Fn(t,e,n){t.state.callDepth++,t.state.callDepth>t.limits.maxCallDepth&&(t.state.callDepth--,ae(`${e.name}: maximum recursion depth (${t.limits.maxCallDepth}) exceeded, increase executionLimits.maxCallDepth`,"recursion")),t.state.localScopes.push(new Map);let r={};for(let o=0;o<n.length;o++)r[String(o+1)]=t.state.env[String(o+1)],t.state.env[String(o+1)]=n[o];r["@"]=t.state.env["@"],r["#"]=t.state.env["#"],t.state.env["@"]=n.join(" "),t.state.env["#"]=String(n.length);let s=()=>{let o=t.state.localScopes.pop();if(o)for(let[i,a]of o)a===void 0?delete t.state.env[i]:t.state.env[i]=a;for(let[i,a]of Object.entries(r))a===void 0?delete t.state.env[i]:t.state.env[i]=a;t.state.callDepth--};try{let o=await t.executeCommand(e.body,"");return s(),o}catch(o){if(s(),o instanceof V)return x(o.stdout,o.stderr,o.exitCode);throw o}}async function Wn(t,e,n){let{stdout:r,stderr:s,exitCode:o}=e;for(let i of n){if(i.target.type==="HereDoc")continue;let a=await I(t,i.target);switch(i.operator){case">":{let l=i.fd??1;if(l===1){let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){s+=`bash: ${a}: Is a directory
116
+ `,o=1,r="";break}}catch{}await t.fs.writeFile(c,r),r=""}else if(l===2)if(a==="/dev/null")s="";else{let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){s+=`bash: ${a}: Is a directory
117
+ `,o=1;break}}catch{}await t.fs.writeFile(c,s),s=""}break}case">>":{let l=i.fd??1;if(l===1){let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){s+=`bash: ${a}: Is a directory
118
+ `,o=1,r="";break}}catch{}await t.fs.appendFile(c,r),r=""}else if(l===2){let c=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(c)).isDirectory){s+=`bash: ${a}: Is a directory
119
+ `,o=1;break}}catch{}await t.fs.appendFile(c,s),s=""}break}case">&":{let l=i.fd??1;a==="2"||a==="&2"?l===1&&(s+=r,r=""):(a==="1"||a==="&1")&&(r+=s,s="");break}case"&>":{let l=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(l)).isDirectory){s=`bash: ${a}: Is a directory
120
+ `,o=1,r="";break}}catch{}await t.fs.writeFile(l,r+s),r="",s="";break}case"&>>":{let l=t.fs.resolvePath(t.state.cwd,a);try{if((await t.fs.stat(l)).isDirectory){s=`bash: ${a}: Is a directory
121
+ `,o=1,r="";break}}catch{}await t.fs.appendFile(l,r+s),r="",s="";break}}}return x(r,s,o)}var Ue=class{ctx;constructor(e,n){this.ctx={state:n,fs:e.fs,commands:e.commands,limits:e.limits,execFn:e.exec,executeScript:this.executeScript.bind(this),executeStatement:this.executeStatement.bind(this),executeCommand:this.executeCommand.bind(this),fetch:e.fetch,sleep:e.sleep}}async executeScript(e){let n="",r="",s=0;for(let o of e.statements)try{let i=await this.executeStatement(o);n+=i.stdout,r+=i.stderr,s=i.exitCode,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s)}catch(i){if(i instanceof k)throw i.prependOutput(n,r),i;if(i instanceof z)throw i;if(i instanceof te)return n+=i.stdout,r+=i.stderr,s=i.exitCode,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s),{stdout:n,stderr:r,exitCode:s,env:{...this.ctx.state.env}};if(i instanceof J)return n+=i.stdout,r+=i.stderr,s=1,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s),{stdout:n,stderr:r,exitCode:s,env:{...this.ctx.state.env}};if(i instanceof ye)return n+=i.stdout,r+=i.stderr,s=1,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s),{stdout:n,stderr:r,exitCode:s,env:{...this.ctx.state.env}};if(i instanceof U||i instanceof Y){if(this.ctx.state.loopDepth>0)throw i.prependOutput(n,r),i;n+=i.stdout,r+=i.stderr;continue}throw i instanceof V&&i.prependOutput(n,r),i}return{stdout:n,stderr:r,exitCode:s,env:{...this.ctx.state.env}}}async executeStatement(e){this.ctx.state.commandCount++,this.ctx.state.commandCount>this.ctx.limits.maxCommandCount&&ae(`too many commands executed (>${this.ctx.limits.maxCommandCount}), increase executionLimits.maxCommandCount`,"commands");let n="",r="",s=0,o=-1,i=!1;for(let a=0;a<e.pipelines.length;a++){let l=e.pipelines[a],c=a>0?e.operators[a-1]:null;if(c==="&&"&&s!==0||c==="||"&&s===0)continue;let f=await this.executePipeline(l);n+=f.stdout,r+=f.stderr,s=f.exitCode,o=a,i=l.negated,this.ctx.state.lastExitCode=s,this.ctx.state.env["?"]=String(s)}if(this.ctx.state.options.errexit&&s!==0&&o===e.pipelines.length-1&&!i&&!this.ctx.state.inCondition)throw new te(s,n,r);return x(n,r,s)}async executePipeline(e){let n="",r=C,s=0,o=[];for(let i=0;i<e.commands.length;i++){let a=e.commands[i],l=i===e.commands.length-1,c;try{c=await this.executeCommand(a,n)}catch(f){if(f instanceof ye)c={stdout:f.stdout,stderr:f.stderr,exitCode:1};else if(f instanceof k&&e.commands.length>1)c={stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode};else throw f}o.push(c.exitCode),c.exitCode!==0&&(s=c.exitCode),l?r=c:(n=c.stdout,r={stdout:"",stderr:c.stderr,exitCode:c.exitCode})}for(let i of Object.keys(this.ctx.state.env))i.startsWith("PIPESTATUS_")&&delete this.ctx.state.env[i];for(let i=0;i<o.length;i++)this.ctx.state.env[`PIPESTATUS_${i}`]=String(o[i]);return this.ctx.state.env.PIPESTATUS__length=String(o.length),this.ctx.state.options.pipefail&&s!==0&&(r={...r,exitCode:s}),e.negated&&(r={...r,exitCode:r.exitCode===0?1:0}),r}async executeCommand(e,n){switch(e.type){case"SimpleCommand":return this.executeSimpleCommand(e,n);case"If":return Rn(this.ctx,e);case"For":return kn(this.ctx,e);case"CStyleFor":return Dn(this.ctx,e);case"While":return On(this.ctx,e,n);case"Until":return _n(this.ctx,e);case"Case":return Ln(this.ctx,e);case"Subshell":return this.executeSubshell(e,n);case"Group":return this.executeGroup(e,n);case"FunctionDef":return Tn(this.ctx,e);case"ArithmeticCommand":return this.executeArithmeticCommand(e);case"ConditionalCommand":return this.executeConditionalCommand(e);default:return C}}async executeSimpleCommand(e,n){try{return await this.executeSimpleCommandInner(e,n)}catch(r){if(r instanceof W)return S(r.stderr);throw r}}async executeSimpleCommandInner(e,n){e.line!==void 0&&(this.ctx.state.currentLine=e.line),this.ctx.state.expansionStderr="";let r={};for(let l of e.assignments){let c=l.name;if(l.array){if(/\[.+\]$/.test(c))return x("",`bash: ${c}: cannot assign list to array member
122
+ `,1);let g=he(this.ctx,c);if(g)return g;let p=[];for(let w of l.array){let b=await Be(this.ctx,w);p.push(...b.values)}let y=0;if(l.append){let w=F(this.ctx,c);w.length>0&&(y=Math.max(...w.map(([N])=>typeof N=="number"?N:0))+1)}else{let w=`${c}_`;for(let b of Object.keys(this.ctx.state.env))b.startsWith(w)&&!b.includes("__")&&delete this.ctx.state.env[b]}for(let w=0;w<p.length;w++)this.ctx.state.env[`${c}_${y+w}`]=p[w];l.append||(this.ctx.state.env[`${c}__length`]=String(p.length));continue}let f=l.value?await I(this.ctx,l.value):"";if(c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[\]$/))return x("",`bash: ${c}: bad array subscript
123
+ `,1);let h=c.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[(.+)\]$/);if(h){let g=h[1],p=h[2],y=he(this.ctx,g);if(y)return y;let w=this.ctx.state.associativeArrays?.has(g),b;if(w){let R;if(p.startsWith("'")&&p.endsWith("'"))R=p.slice(1,-1);else if(p.startsWith('"')&&p.endsWith('"')){let D=p.slice(1,-1),L=new M().parseWordFromString(D,!0,!1);R=await I(this.ctx,L)}else if(p.includes("$")){let pe=new M().parseWordFromString(p,!1,!1);R=await I(this.ctx,pe)}else R=p;b=`${g}_${R}`}else{let R;if(/^-?\d+$/.test(p))R=Number.parseInt(p,10);else{try{let D=new M,pe=T(D,p);R=$(this.ctx,pe.expression)}catch{let D=this.ctx.state.env[p];R=D?Number.parseInt(D,10):0}Number.isNaN(R)&&(R=0)}if(R<0){let D=F(this.ctx,g);if(D.length===0)return x("",`bash: ${g}[${p}]: bad array subscript
124
+ `,1);if(R=Math.max(...D.map(([L])=>typeof L=="number"?L:0))+1+R,R<0)return x("",`bash: ${g}[${p}]: bad array subscript
125
+ `,1)}b=`${g}_${R}`}let N=l.append?(this.ctx.state.env[b]||"")+f:f;e.name?(r[b]=this.ctx.state.env[b],this.ctx.state.env[b]=N):this.ctx.state.env[b]=N;continue}let m=he(this.ctx,c);if(m)return m;let E=l.append?(this.ctx.state.env[c]||"")+f:f;e.name?(r[c]=this.ctx.state.env[c],this.ctx.state.env[c]=E):this.ctx.state.env[c]=E}if(!e.name)return x("","",this.ctx.state.lastExitCode);for(let l of e.redirections){if((l.operator==="<<"||l.operator==="<<-")&&l.target.type==="HereDoc"){let c=l.target,f=await I(this.ctx,c.content);c.stripTabs&&(f=f.split(`
126
+ `).map(d=>d.replace(/^\t+/,"")).join(`
127
+ `)),n=f;continue}if(l.operator==="<<<"&&l.target.type==="Word"){n=`${await I(this.ctx,l.target)}
128
+ `;continue}if(l.operator==="<"&&l.target.type==="Word")try{let c=await I(this.ctx,l.target),f=this.ctx.fs.resolvePath(this.ctx.state.cwd,c);n=await this.ctx.fs.readFile(f)}catch{let c=await I(this.ctx,l.target);for(let[f,d]of Object.entries(r))d===void 0?delete this.ctx.state.env[f]:this.ctx.state.env[f]=d;return S(`bash: ${c}: No such file or directory
129
+ `)}}let s=await I(this.ctx,e.name),o=[],i=[];for(let l of e.args){let c=await Be(this.ctx,l);for(let f of c.values)o.push(f),i.push(c.quoted)}if(!s){if(e.name.parts.every(c=>c.type==="CommandSubstitution"||c.type==="ParameterExpansion"||c.type==="ArithmeticExpansion")){if(o.length>0){let c=o.shift();return i.shift(),await this.runCommand(c,o,i,n)}return x("","",this.ctx.state.lastExitCode)}return S(`bash: : command not found
130
+ `,127)}let a=await this.runCommand(s,o,i,n);a=await Wn(this.ctx,a,e.redirections),this.ctx.state.lastArg=o.length>0?o[o.length-1]:s;for(let[l,c]of Object.entries(r))c===void 0?delete this.ctx.state.env[l]:this.ctx.state.env[l]=c;return this.ctx.state.expansionStderr&&(a={...a,stderr:this.ctx.state.expansionStderr+a.stderr},this.ctx.state.expansionStderr=""),a}async runCommand(e,n,r,s,o=!1){if(e==="cd")return await Zt(this.ctx,n);if(e==="export")return er(this.ctx,n);if(e==="unset")return lr(this.ctx,n);if(e==="exit")return Jt(this.ctx,n);if(e==="local")return rr(this.ctx,n);if(e==="set")return or(this.ctx,n);if(e==="break")return jt(this.ctx,n);if(e==="continue")return qt(this.ctx,n);if(e==="return")return sr(this.ctx,n);if(e==="eval")return Yt(this.ctx,n);if(e==="shift")return ar(this.ctx,n);if(e==="source"||e===".")return cr(this.ctx,n);if(e==="read")return nr(this.ctx,n,s);if(e==="declare"||e==="typeset")return Kt(this.ctx,n);if(e==="readonly")return Xt(this.ctx,n);if(!o){let f=this.ctx.state.functions.get(e);if(f)return Fn(this.ctx,f,n)}if(e===":"||e==="true")return C;if(e==="false")return _(!1);if(e==="let")return tr(this.ctx,n);if(e==="command"){if(n.length===0)return C;let f=n;for(;f.length>0&&f[0].startsWith("-");)f=f.slice(1);if(f.length===0)return C;let[d,...h]=f;return this.runCommand(d,h,[],s,!0)}if(e==="builtin"){if(n.length===0)return C;let[f,...d]=n;return this.runCommand(f,d,[],s)}if(e==="shopt")return C;if(e==="exec"){if(n.length===0)return C;let[f,...d]=n;return this.runCommand(f,d,[],s)}if(e==="wait")return C;if(e==="type")return this.handleType(n);if(e==="[["){let f=n.lastIndexOf("]]");if(f!==-1){let d=n.slice(0,f);return ve(this.ctx,d)}return S("bash: [[: missing `]]'\n",2)}if(e==="["||e==="test"){let f=n;if(e==="["){if(n[n.length-1]!=="]")return S("[: missing `]'\n",2);f=n.slice(0,-1)}return ve(this.ctx,f)}let i=await this.resolveCommand(e);if(!i)return S(`bash: ${e}: command not found
131
+ `,127);let{cmd:a,path:l}=i,c={fs:this.ctx.fs,cwd:this.ctx.state.cwd,env:this.ctx.state.env,stdin:s,limits:this.ctx.limits,exec:this.ctx.execFn,fetch:this.ctx.fetch,getRegisteredCommands:()=>Array.from(this.ctx.commands.keys()),sleep:this.ctx.sleep};try{return await a.execute(n,c)}catch(f){return S(`${e}: ${ce(f)}
132
+ `)}}async resolveCommand(e){if(e.includes("/")){let o=this.ctx.fs.resolvePath(this.ctx.state.cwd,e);if(!await this.ctx.fs.exists(o))return null;let i=o.split("/").pop()||e,a=this.ctx.commands.get(i);return a?{cmd:a,path:o}:null}let r=(this.ctx.state.env.PATH||"/bin:/usr/bin").split(":");for(let o of r){if(!o)continue;let i=`${o}/${e}`;if(await this.ctx.fs.exists(i)){let a=this.ctx.commands.get(e);if(a)return{cmd:a,path:i}}}if(!await this.ctx.fs.exists("/bin")){let o=this.ctx.commands.get(e);if(o)return{cmd:o,path:`/bin/${e}`}}return null}async findCommandInPath(e){let n=[],s=(this.ctx.state.env.PATH||"/bin:/usr/bin").split(":");for(let o of s){if(!o)continue;let i=`${o}/${e}`;await this.ctx.fs.exists(i)&&n.push(i)}return n}handleType(e){let n=new Set(["if","then","else","elif","fi","case","esac","for","select","while","until","do","done","in","function","{","}","time","[[","]]","!"]),r=new Set(["cd","export","unset","exit","local","set","break","continue","return","eval","shift","source",".","read","declare","typeset","readonly",":","true","false","let","command","builtin","shopt","exec","wait","type","[","test"]),s="",o="",i=0;for(let a of e)n.has(a)?s+=`${a} is a shell keyword
133
+ `:r.has(a)?s+=`${a} is a shell builtin
134
+ `:this.ctx.state.functions.has(a)?s+=`${a} is a function
135
+ `:this.ctx.commands.has(a)?s+=`${a} is /bin/${a}
128
136
  `:(o+=`bash: type: ${a}: not found
129
- `,i=1);return x(n,o,i)}async executeSubshell(e,s=""){let r={...this.ctx.state.env},n=this.ctx.state.cwd,o=this.ctx.state.loopDepth,i=this.ctx.state.parentHasLoopContext;this.ctx.state.parentHasLoopContext=o>0,this.ctx.state.loopDepth=0;let a=this.ctx.state.groupStdin;s&&(this.ctx.state.groupStdin=s);let l="",c="",f=0;try{for(let h of e.body){let d=await this.executeStatement(h);l+=d.stdout,c+=d.stderr,f=d.exitCode}}catch(h){if(this.ctx.state.env=r,this.ctx.state.cwd=n,this.ctx.state.loopDepth=o,this.ctx.state.parentHasLoopContext=i,this.ctx.state.groupStdin=a,h instanceof z)throw h;if(h instanceof fe)return l+=h.stdout,c+=h.stderr,x(l,c,0);if(h instanceof U||h instanceof X)return l+=h.stdout,c+=h.stderr,x(l,c,0);if(h instanceof k)return l+=h.stdout,c+=h.stderr,x(l,c,h.exitCode);if(h instanceof V)return l+=h.stdout,c+=h.stderr,x(l,c,h.exitCode);if(h instanceof te)throw h.stdout=l+h.stdout,h.stderr=c+h.stderr,h;return x(l,`${c}${le(h)}
130
- `,1)}return this.ctx.state.env=r,this.ctx.state.cwd=n,this.ctx.state.loopDepth=o,this.ctx.state.parentHasLoopContext=i,this.ctx.state.groupStdin=a,x(l,c,f)}async executeGroup(e,s=""){let r="",n="",o=0,i=this.ctx.state.groupStdin;s&&(this.ctx.state.groupStdin=s);try{for(let a of e.body){let l=await this.executeStatement(a);r+=l.stdout,n+=l.stderr,o=l.exitCode}}catch(a){if(this.ctx.state.groupStdin=i,a instanceof z)throw a;if(Ve(a)||a instanceof te||a instanceof k)throw a.prependOutput(r,n),a;return x(r,`${n}${le(a)}
131
- `,1)}return this.ctx.state.groupStdin=i,x(r,n,o)}async executeArithmeticCommand(e){try{let s=await $(this.ctx,e.expression.expression);return _(s!==0)}catch(s){return S(`bash: arithmetic expression: ${s.message}
132
- `)}}async executeConditionalCommand(e){try{let s=await pe(this.ctx,e.expression);return _(s)}catch(s){return S(`bash: conditional expression: ${s.message}
133
- `,2)}}};var ve={maxCallDepth:100,maxCommandCount:1e4,maxLoopIterations:1e4,maxAwkIterations:1e4,maxSedIterations:1e4};function Os(t){return t?{maxCallDepth:t.maxCallDepth??ve.maxCallDepth,maxCommandCount:t.maxCommandCount??ve.maxCommandCount,maxLoopIterations:t.maxLoopIterations??ve.maxLoopIterations,maxAwkIterations:t.maxAwkIterations??ve.maxAwkIterations,maxSedIterations:t.maxSedIterations??ve.maxSedIterations}:{...ve}}function _s(t){try{let e=new URL(t);return{origin:e.origin,pathname:e.pathname,href:e.href}}catch{return null}}function Vn(t){let e=_s(t);return e?{origin:e.origin,pathPrefix:e.pathname}:null}function Gn(t,e){let s=_s(t);if(!s)return!1;let r=Vn(e);return!r||s.origin!==r.origin?!1:r.pathPrefix==="/"||r.pathPrefix===""?!0:s.pathname.startsWith(r.pathPrefix)}function dr(t,e){return!e||e.length===0?!1:e.some(s=>Gn(t,s))}var Ie=class extends Error{constructor(e){super(`Network access denied: URL not in allow-list: ${e}`),this.name="NetworkAccessDeniedError"}},Re=class extends Error{constructor(e){super(`Too many redirects (max: ${e})`),this.name="TooManyRedirectsError"}},ke=class extends Error{constructor(e){super(`Redirect target not in allow-list: ${e}`),this.name="RedirectNotAllowedError"}},Et=class extends Error{constructor(e,s){super(`HTTP method '${e}' not allowed. Allowed methods: ${s.join(", ")}`),this.name="MethodNotAllowedError"}};var Hn=20,jn=3e4,Zn=["GET","HEAD"],qn=new Set(["GET","HEAD","OPTIONS"]),Qn=new Set([301,302,303,307,308]);function mr(t){let e=t.maxRedirects??Hn,s=t.timeoutMs??jn,r=t.dangerouslyAllowFullInternetAccess?["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"]:t.allowedMethods??Zn;function n(a){if(!t.dangerouslyAllowFullInternetAccess&&!dr(a,t.allowedUrlPrefixes??[]))throw new Ie(a)}function o(a){if(t.dangerouslyAllowFullInternetAccess)return;let l=a.toUpperCase();if(!r.includes(l))throw new Et(l,r)}async function i(a,l={}){let c=l.method?.toUpperCase()??"GET";n(a),o(c);let f=a,h=0,d=l.followRedirects??!0,m=l.timeoutMs!==void 0?Math.min(l.timeoutMs,s):s;for(;;){let y=new AbortController,g=setTimeout(()=>y.abort(),m);try{let p={method:c,headers:l.headers,signal:y.signal,redirect:"manual"};l.body&&!qn.has(c)&&(p.body=l.body);let E=await fetch(f,p);if(Qn.has(E.status)&&d){let w=E.headers.get("location");if(!w)return await Ls(E,f);let b=new URL(w,f).href;if(!t.dangerouslyAllowFullInternetAccess&&!dr(b,t.allowedUrlPrefixes??[]))throw new ke(b);if(h++,h>e)throw new Re(e);f=b;continue}return await Ls(E,f)}finally{clearTimeout(g)}}}return i}async function Ls(t,e){let s={};return t.headers.forEach((r,n)=>{s[n.toLowerCase()]=r}),{status:t.status,statusText:t.statusText,headers:s,body:await t.text(),url:e}}var Ue=class{fs;commands=new Map;useDefaultLayout=!1;limits;secureFetch;sleepFn;logger;state;constructor(e={}){let s=e.fs??new se(e.files);this.fs=s,this.useDefaultLayout=!e.cwd&&!e.files;let r=e.cwd||(this.useDefaultLayout?"/home/user":"/"),n={HOME:this.useDefaultLayout?"/home/user":"/",PATH:"/bin:/usr/bin",IFS:`
134
- `,OSTYPE:"linux-gnu",MACHTYPE:"x86_64-pc-linux-gnu",HOSTTYPE:"x86_64",PWD:r,OLDPWD:r,...e.env};if(this.limits=Os({...e.executionLimits,...e.maxCallDepth!==void 0&&{maxCallDepth:e.maxCallDepth},...e.maxCommandCount!==void 0&&{maxCommandCount:e.maxCommandCount},...e.maxLoopIterations!==void 0&&{maxLoopIterations:e.maxLoopIterations}}),e.network&&(this.secureFetch=mr(e.network)),this.sleepFn=e.sleep,this.logger=e.logger,this.state={env:n,cwd:r,previousDir:"/home/user",functions:new Map,localScopes:[],callDepth:0,sourceDepth:0,commandCount:0,lastExitCode:0,lastArg:"",options:{errexit:!1,pipefail:!1,nounset:!1,xtrace:!1,verbose:!1},inCondition:!1,loopDepth:0},s instanceof se)try{s.mkdirSync("/bin",{recursive:!0}),s.mkdirSync("/usr/bin",{recursive:!0}),this.useDefaultLayout&&(s.mkdirSync("/home/user",{recursive:!0}),s.mkdirSync("/tmp",{recursive:!0}))}catch{}if(r!=="/"&&s instanceof se)try{s.mkdirSync(r,{recursive:!0})}catch{}for(let o of wr(e.commands))this.registerCommand(o);if(e.network)for(let o of gr())this.registerCommand(o);if(e.customCommands)for(let o of e.customCommands)Ar(o)?this.registerCommand(xr(o)):this.registerCommand(o)}registerCommand(e){if(this.commands.set(e.name,e),this.fs instanceof se)try{this.fs.writeFileSync(`/bin/${e.name}`,`#!/bin/bash
137
+ `,i=1);return x(s,o,i)}async executeSubshell(e,n=""){let r={...this.ctx.state.env},s=this.ctx.state.cwd,o=this.ctx.state.loopDepth,i=this.ctx.state.parentHasLoopContext;this.ctx.state.parentHasLoopContext=o>0,this.ctx.state.loopDepth=0;let a=this.ctx.state.groupStdin;n&&(this.ctx.state.groupStdin=n);let l="",c="",f=0;try{for(let d of e.body){let h=await this.executeStatement(d);l+=h.stdout,c+=h.stderr,f=h.exitCode}}catch(d){if(this.ctx.state.env=r,this.ctx.state.cwd=s,this.ctx.state.loopDepth=o,this.ctx.state.parentHasLoopContext=i,this.ctx.state.groupStdin=a,d instanceof z)throw d;if(d instanceof le)return l+=d.stdout,c+=d.stderr,x(l,c,0);if(d instanceof U||d instanceof Y)return l+=d.stdout,c+=d.stderr,x(l,c,0);if(d instanceof k)return l+=d.stdout,c+=d.stderr,x(l,c,d.exitCode);if(d instanceof V)return l+=d.stdout,c+=d.stderr,x(l,c,d.exitCode);if(d instanceof te)throw d.stdout=l+d.stdout,d.stderr=c+d.stderr,d;return x(l,`${c}${ce(d)}
138
+ `,1)}return this.ctx.state.env=r,this.ctx.state.cwd=s,this.ctx.state.loopDepth=o,this.ctx.state.parentHasLoopContext=i,this.ctx.state.groupStdin=a,x(l,c,f)}async executeGroup(e,n=""){let r="",s="",o=0,i=this.ctx.state.groupStdin;n&&(this.ctx.state.groupStdin=n);try{for(let a of e.body){let l=await this.executeStatement(a);r+=l.stdout,s+=l.stderr,o=l.exitCode}}catch(a){if(this.ctx.state.groupStdin=i,a instanceof z)throw a;if(Ge(a)||a instanceof te||a instanceof k)throw a.prependOutput(r,s),a;return x(r,`${s}${ce(a)}
139
+ `,1)}return this.ctx.state.groupStdin=i,x(r,s,o)}async executeArithmeticCommand(e){try{let n=await P(this.ctx,e.expression.expression);return _(n!==0)}catch(n){return S(`bash: arithmetic expression: ${n.message}
140
+ `)}}async executeConditionalCommand(e){try{let n=await me(this.ctx,e.expression);return _(n)}catch(n){return S(`bash: conditional expression: ${n.message}
141
+ `,2)}}};var Ie={maxCallDepth:100,maxCommandCount:1e4,maxLoopIterations:1e4,maxAwkIterations:1e4,maxSedIterations:1e4};function Mn(t){return t?{maxCallDepth:t.maxCallDepth??Ie.maxCallDepth,maxCommandCount:t.maxCommandCount??Ie.maxCommandCount,maxLoopIterations:t.maxLoopIterations??Ie.maxLoopIterations,maxAwkIterations:t.maxAwkIterations??Ie.maxAwkIterations,maxSedIterations:t.maxSedIterations??Ie.maxSedIterations}:{...Ie}}function Bn(t){try{let e=new URL(t);return{origin:e.origin,pathname:e.pathname,href:e.href}}catch{return null}}function Ys(t){let e=Bn(t);return e?{origin:e.origin,pathPrefix:e.pathname}:null}function Js(t,e){let n=Bn(t);if(!n)return!1;let r=Ys(e);return!r||n.origin!==r.origin?!1:r.pathPrefix==="/"||r.pathPrefix===""?!0:n.pathname.startsWith(r.pathPrefix)}function mr(t,e){return!e||e.length===0?!1:e.some(n=>Js(t,n))}var Re=class extends Error{constructor(e){super(`Network access denied: URL not in allow-list: ${e}`),this.name="NetworkAccessDeniedError"}},ke=class extends Error{constructor(e){super(`Too many redirects (max: ${e})`),this.name="TooManyRedirectsError"}},De=class extends Error{constructor(e){super(`Redirect target not in allow-list: ${e}`),this.name="RedirectNotAllowedError"}},wt=class extends Error{constructor(e,n){super(`HTTP method '${e}' not allowed. Allowed methods: ${n.join(", ")}`),this.name="MethodNotAllowedError"}};var ei=20,ti=3e4,ri=["GET","HEAD"],ni=new Set(["GET","HEAD","OPTIONS"]),si=new Set([301,302,303,307,308]);function pr(t){let e=t.maxRedirects??ei,n=t.timeoutMs??ti,r=t.dangerouslyAllowFullInternetAccess?["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"]:t.allowedMethods??ri;function s(a){if(!t.dangerouslyAllowFullInternetAccess&&!mr(a,t.allowedUrlPrefixes??[]))throw new Re(a)}function o(a){if(t.dangerouslyAllowFullInternetAccess)return;let l=a.toUpperCase();if(!r.includes(l))throw new wt(l,r)}async function i(a,l={}){let c=l.method?.toUpperCase()??"GET";s(a),o(c);let f=a,d=0,h=l.followRedirects??!0,m=l.timeoutMs!==void 0?Math.min(l.timeoutMs,n):n;for(;;){let E=new AbortController,g=setTimeout(()=>E.abort(),m);try{let p={method:c,headers:l.headers,signal:E.signal,redirect:"manual"};l.body&&!ni.has(c)&&(p.body=l.body);let y=await fetch(f,p);if(si.has(y.status)&&h){let w=y.headers.get("location");if(!w)return await zn(y,f);let b=new URL(w,f).href;if(!t.dangerouslyAllowFullInternetAccess&&!mr(b,t.allowedUrlPrefixes??[]))throw new De(b);if(d++,d>e)throw new ke(e);f=b;continue}return await zn(y,f)}finally{clearTimeout(g)}}}return i}async function zn(t,e){let n={};return t.headers.forEach((r,s)=>{n[s.toLowerCase()]=r}),{status:t.status,statusText:t.statusText,headers:n,body:await t.text(),url:e}}var Ve=class{fs;commands=new Map;useDefaultLayout=!1;limits;secureFetch;sleepFn;logger;state;constructor(e={}){let n=e.fs??new Ee(e.files);this.fs=n,this.useDefaultLayout=!e.cwd&&!e.files;let r=e.cwd||(this.useDefaultLayout?"/home/user":"/"),s={HOME:this.useDefaultLayout?"/home/user":"/",PATH:"/bin:/usr/bin",IFS:`
142
+ `,OSTYPE:"linux-gnu",MACHTYPE:"x86_64-pc-linux-gnu",HOSTTYPE:"x86_64",PWD:r,OLDPWD:r,...e.env};if(this.limits=Mn({...e.executionLimits,...e.maxCallDepth!==void 0&&{maxCallDepth:e.maxCallDepth},...e.maxCommandCount!==void 0&&{maxCommandCount:e.maxCommandCount},...e.maxLoopIterations!==void 0&&{maxLoopIterations:e.maxLoopIterations}}),e.network&&(this.secureFetch=pr(e.network)),this.sleepFn=e.sleep,this.logger=e.logger,this.state={env:s,cwd:r,previousDir:"/home/user",functions:new Map,localScopes:[],callDepth:0,sourceDepth:0,commandCount:0,lastExitCode:0,lastArg:"",startTime:Date.now(),lastBackgroundPid:0,currentLine:1,options:{errexit:!1,pipefail:!1,nounset:!1,xtrace:!1,verbose:!1},inCondition:!1,loopDepth:0},$r(n,this.useDefaultLayout),r!=="/"&&n instanceof Ee)try{n.mkdirSync(r,{recursive:!0})}catch{}for(let o of gr(e.commands))this.registerCommand(o);if(e.network)for(let o of Ar())this.registerCommand(o);if(e.customCommands)for(let o of e.customCommands)xr(o)?this.registerCommand(Sr(o)):this.registerCommand(o)}registerCommand(e){this.commands.set(e.name,e);let n=this.fs;if(typeof n.writeFileSync=="function")try{n.writeFileSync(`/bin/${e.name}`,`#!/bin/bash
135
143
  # Built-in command: ${e.name}
136
- `)}catch{}}logResult(e){return this.logger&&(e.stdout&&this.logger.debug("stdout",{output:e.stdout}),e.stderr&&this.logger.info("stderr",{output:e.stderr}),this.logger.info("exit",{exitCode:e.exitCode})),e}async exec(e,s){if(this.state.callDepth===0&&(this.state.commandCount=0),this.state.commandCount++,this.state.commandCount>this.limits.maxCommandCount)return{stdout:"",stderr:`bash: maximum command count (${this.limits.maxCommandCount}) exceeded (possible infinite loop). Increase with executionLimits.maxCommandCount option.
137
- `,exitCode:1,env:{...this.state.env,...s?.env}};if(!e.trim())return{stdout:"",stderr:"",exitCode:0,env:{...this.state.env,...s?.env}};this.logger?.info("exec",{command:e});let r=s?.cwd??this.state.cwd,n={...this.state,env:{...this.state.env,...s?.env,...s?.cwd?{PWD:s.cwd}:{}},cwd:r,functions:new Map(this.state.functions),localScopes:[...this.state.localScopes],options:{...this.state.options}},o=e;s?.rawScript||(o=e.split(`
144
+ `)}catch{}}logResult(e){return this.logger&&(e.stdout&&this.logger.debug("stdout",{output:e.stdout}),e.stderr&&this.logger.info("stderr",{output:e.stderr}),this.logger.info("exit",{exitCode:e.exitCode})),e}async exec(e,n){if(this.state.callDepth===0&&(this.state.commandCount=0),this.state.commandCount++,this.state.commandCount>this.limits.maxCommandCount)return{stdout:"",stderr:`bash: maximum command count (${this.limits.maxCommandCount}) exceeded (possible infinite loop). Increase with executionLimits.maxCommandCount option.
145
+ `,exitCode:1,env:{...this.state.env,...n?.env}};if(!e.trim())return{stdout:"",stderr:"",exitCode:0,env:{...this.state.env,...n?.env}};this.logger?.info("exec",{command:e});let r=n?.cwd??this.state.cwd,s={...this.state,env:{...this.state.env,...n?.env,...n?.cwd?{PWD:n.cwd}:{}},cwd:r,functions:new Map(this.state.functions),localScopes:[...this.state.localScopes],options:{...this.state.options}},o=e;n?.rawScript||(o=e.split(`
138
146
  `).map(a=>a.trimStart()).join(`
139
- `));try{let i=he(o),a={fs:this.fs,commands:this.commands,limits:this.limits,exec:this.exec.bind(this),fetch:this.secureFetch,sleep:this.sleepFn},c=await new ze(a,n).executeScript(i);return this.logResult(c)}catch(i){if(i instanceof k)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode,env:{...this.state.env,...s?.env}});if(i instanceof F)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:1,env:{...this.state.env,...s?.env}});if(i instanceof z)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:z.EXIT_CODE,env:{...this.state.env,...s?.env}});if(i.name==="ParseException")return this.logResult({stdout:"",stderr:`bash: syntax error: ${i.message}
140
- `,exitCode:2,env:{...this.state.env,...s?.env}});if(i instanceof RangeError)return this.logResult({stdout:"",stderr:`bash: ${i.message}
141
- `,exitCode:1,env:{...this.state.env,...s?.env}});throw i}}async readFile(e){return this.fs.readFile(this.fs.resolvePath(this.state.cwd,e))}async writeFile(e,s){return this.fs.writeFile(this.fs.resolvePath(this.state.cwd,e),s)}getCwd(){return this.state.cwd}getEnv(){return{...this.state.env}}};import*as B from"node:fs";import*as De from"node:path";var Kn="/home/user/project",Oe=class{root;mountPoint;readOnly;memory=new Map;deleted=new Set;constructor(e){this.root=De.resolve(e.root);let s=e.mountPoint??Kn;if(this.mountPoint=s==="/"?"/":s.replace(/\/+$/,""),!this.mountPoint.startsWith("/"))throw new Error(`Mount point must be an absolute path: ${s}`);if(this.readOnly=e.readOnly??!1,!B.existsSync(this.root))throw new Error(`OverlayFs root does not exist: ${this.root}`);if(!B.statSync(this.root).isDirectory())throw new Error(`OverlayFs root is not a directory: ${this.root}`);this.createMountPointDirs()}assertWritable(e){if(this.readOnly)throw new Error(`EROFS: read-only file system, ${e}`)}createMountPointDirs(){let e=this.mountPoint.split("/").filter(Boolean),s="";for(let r of e)s+=`/${r}`,this.memory.has(s)||this.memory.set(s,{type:"directory",mode:493,mtime:new Date});this.memory.has("/")||this.memory.set("/",{type:"directory",mode:493,mtime:new Date})}getMountPoint(){return this.mountPoint}normalizePath(e){if(!e||e==="/")return"/";let s=e.endsWith("/")&&e!=="/"?e.slice(0,-1):e;s.startsWith("/")||(s=`/${s}`);let r=s.split("/").filter(o=>o&&o!=="."),n=[];for(let o of r)o===".."?n.pop():n.push(o);return`/${n.join("/")}`||"/"}getRelativeToMount(e){return this.mountPoint==="/"?e:e===this.mountPoint?"/":e.startsWith(`${this.mountPoint}/`)?e.slice(this.mountPoint.length):null}toRealPath(e){let s=this.normalizePath(e),r=this.getRelativeToMount(s);if(r===null)return null;let n=De.join(this.root,r),o=De.resolve(n);return!o.startsWith(this.root)&&o!==this.root.replace(/\/$/,"")?null:o}dirname(e){let s=this.normalizePath(e);if(s==="/")return"/";let r=s.lastIndexOf("/");return r===0?"/":s.slice(0,r)}ensureParentDirs(e){let s=this.dirname(e);s!=="/"&&(this.memory.has(s)||(this.ensureParentDirs(s),this.memory.set(s,{type:"directory",mode:493,mtime:new Date})),this.deleted.delete(s))}async existsInOverlay(e){let s=this.normalizePath(e);if(this.deleted.has(s))return!1;if(this.memory.has(s))return!0;let r=this.toRealPath(s);if(!r)return!1;try{return await B.promises.access(r),!0}catch{return!1}}async readFile(e,s){let r=await this.readFileBuffer(e),n=Z(s);return Se(r,n)}async readFileBuffer(e,s=new Set){let r=this.normalizePath(e);if(s.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${e}'`);if(s.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, open '${e}'`);let n=this.memory.get(r);if(n){if(n.type==="symlink"){let i=this.resolveSymlink(r,n.target);return this.readFileBuffer(i,s)}if(n.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);return n.content}let o=this.toRealPath(r);if(!o)throw new Error(`ENOENT: no such file or directory, open '${e}'`);try{let i=await B.promises.lstat(o);if(i.isSymbolicLink()){let l=await B.promises.readlink(o),c=this.resolveSymlink(r,l);return this.readFileBuffer(c,s)}if(i.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);let a=await B.promises.readFile(o);return new Uint8Array(a)}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, open '${e}'`):i}}async writeFile(e,s,r){this.assertWritable(`write '${e}'`);let n=this.normalizePath(e);this.ensureParentDirs(n);let o=Z(r),i=re(s,o);this.memory.set(n,{type:"file",content:i,mode:420,mtime:new Date}),this.deleted.delete(n)}async appendFile(e,s,r){this.assertWritable(`append '${e}'`);let n=this.normalizePath(e),o=Z(r),i=re(s,o),a;try{a=await this.readFileBuffer(n)}catch{a=new Uint8Array(0)}let l=new Uint8Array(a.length+i.length);l.set(a),l.set(i,a.length),this.ensureParentDirs(n),this.memory.set(n,{type:"file",content:l,mode:420,mtime:new Date}),this.deleted.delete(n)}async exists(e){return this.existsInOverlay(e)}async stat(e,s=new Set){let r=this.normalizePath(e);if(s.has(r))throw new Error(`ELOOP: too many levels of symbolic links, stat '${e}'`);if(s.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, stat '${e}'`);let n=this.memory.get(r);if(n){if(n.type==="symlink"){let a=this.resolveSymlink(r,n.target);return this.stat(a,s)}let i=0;return n.type==="file"&&(i=n.content.length),{isFile:n.type==="file",isDirectory:n.type==="directory",isSymbolicLink:!1,mode:n.mode,size:i,mtime:n.mtime}}let o=this.toRealPath(r);if(!o)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);try{let i=await B.promises.stat(o);return{isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:!1,mode:i.mode,size:i.size,mtime:i.mtime}}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, stat '${e}'`):i}}async lstat(e){let s=this.normalizePath(e);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);let r=this.memory.get(s);if(r){if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime};let o=0;return r.type==="file"&&(o=r.content.length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:o,mtime:r.mtime}}let n=this.toRealPath(s);if(!n)throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);try{let o=await B.promises.lstat(n);return{isFile:o.isFile(),isDirectory:o.isDirectory(),isSymbolicLink:o.isSymbolicLink(),mode:o.mode,size:o.size,mtime:o.mtime}}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, lstat '${e}'`):o}}resolveSymlink(e,s){if(s.startsWith("/"))return this.normalizePath(s);let r=this.dirname(e);return this.normalizePath(r==="/"?`/${s}`:`${r}/${s}`)}async mkdir(e,s){this.assertWritable(`mkdir '${e}'`);let r=this.normalizePath(e);if(await this.existsInOverlay(r)){if(!s?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${e}'`);return}let o=this.dirname(r);if(o!=="/"&&!await this.existsInOverlay(o))if(s?.recursive)await this.mkdir(o,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.memory.set(r,{type:"directory",mode:493,mtime:new Date}),this.deleted.delete(r)}async readdir(e){let s=this.normalizePath(e);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${e}'`);let r=new Set,n=new Set,o=s==="/"?"/":`${s}/`;for(let a of this.deleted)if(a.startsWith(o)){let l=a.slice(o.length),c=l.split("/")[0];c&&!l.includes("/",c.length)&&n.add(c)}for(let a of this.memory.keys())if(a!==s&&a.startsWith(o)){let c=a.slice(o.length).split("/")[0];c&&!n.has(c)&&r.add(c)}let i=this.toRealPath(s);if(i)try{let a=await B.promises.readdir(i);for(let l of a)n.has(l)||r.add(l)}catch(a){if(a.code==="ENOENT"){if(!this.memory.has(s))throw new Error(`ENOENT: no such file or directory, scandir '${e}'`)}else if(a.code!=="ENOTDIR")throw a}return Array.from(r).sort()}async rm(e,s){this.assertWritable(`rm '${e}'`);let r=this.normalizePath(e);if(!await this.existsInOverlay(r)){if(s?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${e}'`)}try{if((await this.stat(r)).isDirectory){let i=await this.readdir(r);if(i.length>0){if(!s?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${e}'`);for(let a of i){let l=r==="/"?`/${a}`:`${r}/${a}`;await this.rm(l,s)}}}}catch{}this.deleted.add(r),this.memory.delete(r)}async cp(e,s,r){this.assertWritable(`cp '${s}'`);let n=this.normalizePath(e),o=this.normalizePath(s);if(!await this.existsInOverlay(n))throw new Error(`ENOENT: no such file or directory, cp '${e}'`);let a=await this.stat(n);if(a.isFile){let l=await this.readFileBuffer(n);await this.writeFile(o,l)}else if(a.isDirectory){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${e}'`);await this.mkdir(o,{recursive:!0});let l=await this.readdir(n);for(let c of l){let f=n==="/"?`/${c}`:`${n}/${c}`,h=o==="/"?`/${c}`:`${o}/${c}`;await this.cp(f,h,r)}}}async mv(e,s){this.assertWritable(`mv '${s}'`),await this.cp(e,s,{recursive:!0}),await this.rm(e,{recursive:!0})}resolvePath(e,s){if(s.startsWith("/"))return this.normalizePath(s);let r=e==="/"?`/${s}`:`${e}/${s}`;return this.normalizePath(r)}getAllPaths(){let e=new Set(this.memory.keys());for(let s of this.deleted)e.delete(s);return this.scanRealFs("/",e),Array.from(e)}scanRealFs(e,s){if(this.deleted.has(e))return;let r=this.toRealPath(e);if(r)try{let n=B.readdirSync(r);for(let o of n){let i=e==="/"?`/${o}`:`${e}/${o}`;if(this.deleted.has(i))continue;s.add(i);let a=De.join(r,o);B.statSync(a).isDirectory()&&this.scanRealFs(i,s)}}catch{}}async chmod(e,s){this.assertWritable(`chmod '${e}'`);let r=this.normalizePath(e);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, chmod '${e}'`);let o=this.memory.get(r);if(o){o.mode=s;return}let i=await this.stat(r);if(i.isFile){let a=await this.readFileBuffer(r);this.memory.set(r,{type:"file",content:a,mode:s,mtime:new Date})}else i.isDirectory&&this.memory.set(r,{type:"directory",mode:s,mtime:new Date})}async symlink(e,s){this.assertWritable(`symlink '${s}'`);let r=this.normalizePath(s);if(await this.existsInOverlay(r))throw new Error(`EEXIST: file already exists, symlink '${s}'`);this.ensureParentDirs(r),this.memory.set(r,{type:"symlink",target:e,mode:511,mtime:new Date}),this.deleted.delete(r)}async link(e,s){this.assertWritable(`link '${s}'`);let r=this.normalizePath(e),n=this.normalizePath(s);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, link '${e}'`);let i=await this.stat(r);if(!i.isFile)throw new Error(`EPERM: operation not permitted, link '${e}'`);if(await this.existsInOverlay(n))throw new Error(`EEXIST: file already exists, link '${s}'`);let l=await this.readFileBuffer(r);this.ensureParentDirs(n),this.memory.set(n,{type:"file",content:l,mode:i.mode,mtime:new Date}),this.deleted.delete(n)}async readlink(e){let s=this.normalizePath(e);if(this.deleted.has(s))throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);let r=this.memory.get(s);if(r){if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${e}'`);return r.target}let n=this.toRealPath(s);if(!n)throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);try{return await B.promises.readlink(n)}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, readlink '${e}'`):o.code==="EINVAL"?new Error(`EINVAL: invalid argument, readlink '${e}'`):o}}};import*as P from"node:fs";import*as ee from"node:path";var wt=class{root;constructor(e){if(this.root=ee.resolve(e.root),!P.existsSync(this.root))throw new Error(`ReadWriteFs root does not exist: ${this.root}`);if(!P.statSync(this.root).isDirectory())throw new Error(`ReadWriteFs root is not a directory: ${this.root}`)}toRealPath(e){let s=this.normalizePath(e),r=ee.join(this.root,s);return ee.resolve(r)}normalizePath(e){if(!e||e==="/")return"/";let s=e.endsWith("/")&&e!=="/"?e.slice(0,-1):e;s.startsWith("/")||(s=`/${s}`);let r=s.split("/").filter(o=>o&&o!=="."),n=[];for(let o of r)o===".."?n.pop():n.push(o);return`/${n.join("/")}`||"/"}async readFile(e,s){let r=await this.readFileBuffer(e),n=Z(s);return Se(r,n)}async readFileBuffer(e){let s=this.toRealPath(e);try{let r=await P.promises.readFile(s);return new Uint8Array(r)}catch(r){let n=r;throw n.code==="ENOENT"?new Error(`ENOENT: no such file or directory, open '${e}'`):n.code==="EISDIR"?new Error(`EISDIR: illegal operation on a directory, read '${e}'`):r}}async writeFile(e,s,r){let n=this.toRealPath(e),o=Z(r),i=re(s,o),a=ee.dirname(n);await P.promises.mkdir(a,{recursive:!0}),await P.promises.writeFile(n,i)}async appendFile(e,s,r){let n=this.toRealPath(e),o=Z(r),i=re(s,o),a=ee.dirname(n);await P.promises.mkdir(a,{recursive:!0}),await P.promises.appendFile(n,i)}async exists(e){let s=this.toRealPath(e);try{return await P.promises.access(s),!0}catch{return!1}}async stat(e){let s=this.toRealPath(e);try{let r=await P.promises.stat(s);return{isFile:r.isFile(),isDirectory:r.isDirectory(),isSymbolicLink:!1,mode:r.mode,size:r.size,mtime:r.mtime}}catch(r){throw r.code==="ENOENT"?new Error(`ENOENT: no such file or directory, stat '${e}'`):r}}async lstat(e){let s=this.toRealPath(e);try{let r=await P.promises.lstat(s);return{isFile:r.isFile(),isDirectory:r.isDirectory(),isSymbolicLink:r.isSymbolicLink(),mode:r.mode,size:r.size,mtime:r.mtime}}catch(r){throw r.code==="ENOENT"?new Error(`ENOENT: no such file or directory, lstat '${e}'`):r}}async mkdir(e,s){let r=this.toRealPath(e);try{await P.promises.mkdir(r,{recursive:s?.recursive})}catch(n){let o=n;throw o.code==="EEXIST"?new Error(`EEXIST: file already exists, mkdir '${e}'`):o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, mkdir '${e}'`):n}}async readdir(e){let s=this.toRealPath(e);try{return(await P.promises.readdir(s)).sort()}catch(r){let n=r;throw n.code==="ENOENT"?new Error(`ENOENT: no such file or directory, scandir '${e}'`):n.code==="ENOTDIR"?new Error(`ENOTDIR: not a directory, scandir '${e}'`):r}}async rm(e,s){let r=this.toRealPath(e);try{await P.promises.rm(r,{recursive:s?.recursive??!1,force:s?.force??!1})}catch(n){let o=n;throw o.code==="ENOENT"&&!s?.force?new Error(`ENOENT: no such file or directory, rm '${e}'`):o.code==="ENOTEMPTY"?new Error(`ENOTEMPTY: directory not empty, rm '${e}'`):n}}async cp(e,s,r){let n=this.toRealPath(e),o=this.toRealPath(s);try{await P.promises.cp(n,o,{recursive:r?.recursive??!1})}catch(i){let a=i;throw a.code==="ENOENT"?new Error(`ENOENT: no such file or directory, cp '${e}'`):a.code==="EISDIR"?new Error(`EISDIR: is a directory, cp '${e}'`):i}}async mv(e,s){let r=this.toRealPath(e),n=this.toRealPath(s),o=ee.dirname(n);await P.promises.mkdir(o,{recursive:!0});try{await P.promises.rename(r,n)}catch(i){let a=i;if(a.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, mv '${e}'`);if(a.code==="EXDEV"){await this.cp(e,s,{recursive:!0}),await this.rm(e,{recursive:!0});return}throw i}}resolvePath(e,s){if(s.startsWith("/"))return this.normalizePath(s);let r=e==="/"?`/${s}`:`${e}/${s}`;return this.normalizePath(r)}getAllPaths(){let e=[];return this.scanDir("/",e),e}scanDir(e,s){let r=this.toRealPath(e);try{let n=P.readdirSync(r);for(let o of n){let i=e==="/"?`/${o}`:`${e}/${o}`;s.push(i);let a=ee.join(r,o);P.statSync(a).isDirectory()&&this.scanDir(i,s)}}catch{}}async chmod(e,s){let r=this.toRealPath(e);try{await P.promises.chmod(r,s)}catch(n){throw n.code==="ENOENT"?new Error(`ENOENT: no such file or directory, chmod '${e}'`):n}}async symlink(e,s){let r=this.toRealPath(s);try{await P.promises.symlink(e,r)}catch(n){throw n.code==="EEXIST"?new Error(`EEXIST: file already exists, symlink '${s}'`):n}}async link(e,s){let r=this.toRealPath(e),n=this.toRealPath(s);try{await P.promises.link(r,n)}catch(o){let i=o;throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, link '${e}'`):i.code==="EEXIST"?new Error(`EEXIST: file already exists, link '${s}'`):i.code==="EPERM"?new Error(`EPERM: operation not permitted, link '${e}'`):o}}async readlink(e){let s=this.toRealPath(e);try{return await P.promises.readlink(s)}catch(r){let n=r;throw n.code==="ENOENT"?new Error(`ENOENT: no such file or directory, readlink '${e}'`):n.code==="EINVAL"?new Error(`EINVAL: invalid argument, readlink '${e}'`):r}}};var _e=class{cmdId;cwd;startedAt;exitCode;bashEnv;cmdLine;env;explicitCwd;resultPromise;constructor(e,s,r,n,o=!1){this.cmdId=crypto.randomUUID(),this.cwd=r,this.startedAt=new Date,this.bashEnv=e,this.cmdLine=s,this.env=n,this.explicitCwd=o,this.resultPromise=this.execute()}async execute(){let e=this.env||this.explicitCwd?{cwd:this.explicitCwd?this.cwd:void 0,env:this.env}:void 0,s=await this.bashEnv.exec(this.cmdLine,e);return this.exitCode=s.exitCode,s}async*logs(){let e=await this.resultPromise;e.stdout&&(yield{type:"stdout",data:e.stdout,timestamp:new Date}),e.stderr&&(yield{type:"stderr",data:e.stderr,timestamp:new Date})}async wait(){return await this.resultPromise,this}async output(){let e=await this.resultPromise;return e.stdout+e.stderr}async stdout(){return(await this.resultPromise).stdout}async stderr(){return(await this.resultPromise).stderr}async kill(){}};var gt=class t{bashEnv;constructor(e){this.bashEnv=e}static async create(e){let s=e?.fs;if(e?.overlayRoot){if(e?.fs)throw new Error("Cannot specify both 'fs' and 'overlayRoot' options");s=new Oe({root:e.overlayRoot})}let r=new Ue({env:e?.env,cwd:e?.cwd,fs:s,maxCallDepth:e?.maxCallDepth,maxCommandCount:e?.maxCommandCount,maxLoopIterations:e?.maxLoopIterations,network:e?.network});return new t(r)}async runCommand(e,s){let r=s?.cwd??this.bashEnv.getCwd(),n=s?.cwd!==void 0;return new _e(this.bashEnv,e,r,s?.env,n)}async writeFiles(e){for(let[s,r]of Object.entries(e)){let n;typeof r=="string"?n=r:r.encoding==="base64"?n=Buffer.from(r.content,"base64").toString("utf-8"):n=r.content;let o=s.substring(0,s.lastIndexOf("/"))||"/";o!=="/"&&await this.bashEnv.exec(`mkdir -p ${o}`),await this.bashEnv.writeFile(s,n)}}async readFile(e,s){let r=await this.bashEnv.readFile(e);return s==="base64"?Buffer.from(r).toString("base64"):r}async mkDir(e,s){let r=s?.recursive?"-p":"";await this.bashEnv.exec(`mkdir ${r} ${e}`)}async stop(){}async extendTimeout(e){}get domain(){}get bashEnvInstance(){return this.bashEnv}};export{Ue as Bash,se as InMemoryFs,Ie as NetworkAccessDeniedError,Oe as OverlayFs,wt as ReadWriteFs,ke as RedirectNotAllowedError,gt as Sandbox,_e as SandboxCommand,Re as TooManyRedirectsError,Fs as defineCommand,Ts as getCommandNames,Ws as getNetworkCommandNames};
147
+ `));try{let i=ue(o),a={fs:this.fs,commands:this.commands,limits:this.limits,exec:this.exec.bind(this),fetch:this.secureFetch,sleep:this.sleepFn},c=await new Ue(a,s).executeScript(i);return this.logResult(c)}catch(i){if(i instanceof k)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode,env:{...this.state.env,...n?.env}});if(i instanceof W)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:1,env:{...this.state.env,...n?.env}});if(i instanceof z)return this.logResult({stdout:i.stdout,stderr:i.stderr,exitCode:z.EXIT_CODE,env:{...this.state.env,...n?.env}});if(i.name==="ParseException")return this.logResult({stdout:"",stderr:`bash: syntax error: ${i.message}
148
+ `,exitCode:2,env:{...this.state.env,...n?.env}});if(i instanceof RangeError)return this.logResult({stdout:"",stderr:`bash: ${i.message}
149
+ `,exitCode:1,env:{...this.state.env,...n?.env}});throw i}}async readFile(e){return this.fs.readFile(this.fs.resolvePath(this.state.cwd,e))}async writeFile(e,n){return this.fs.writeFile(this.fs.resolvePath(this.state.cwd,e),n)}getCwd(){return this.state.cwd}getEnv(){return{...this.state.env}}};import*as B from"node:fs";import*as Oe from"node:path";var ii="/home/user/project",_e=class{root;mountPoint;readOnly;memory=new Map;deleted=new Set;constructor(e){this.root=Oe.resolve(e.root);let n=e.mountPoint??ii;if(this.mountPoint=n==="/"?"/":n.replace(/\/+$/,""),!this.mountPoint.startsWith("/"))throw new Error(`Mount point must be an absolute path: ${n}`);if(this.readOnly=e.readOnly??!1,!B.existsSync(this.root))throw new Error(`OverlayFs root does not exist: ${this.root}`);if(!B.statSync(this.root).isDirectory())throw new Error(`OverlayFs root is not a directory: ${this.root}`);this.createMountPointDirs()}assertWritable(e){if(this.readOnly)throw new Error(`EROFS: read-only file system, ${e}`)}createMountPointDirs(){let e=this.mountPoint.split("/").filter(Boolean),n="";for(let r of e)n+=`/${r}`,this.memory.has(n)||this.memory.set(n,{type:"directory",mode:493,mtime:new Date});this.memory.has("/")||this.memory.set("/",{type:"directory",mode:493,mtime:new Date})}getMountPoint(){return this.mountPoint}mkdirSync(e,n){let s=this.normalizePath(e).split("/").filter(Boolean),o="";for(let i of s)o+=`/${i}`,this.memory.has(o)||this.memory.set(o,{type:"directory",mode:493,mtime:new Date})}writeFileSync(e,n){let r=this.normalizePath(e),s=this.getDirname(r);s!=="/"&&this.mkdirSync(s);let o=n instanceof Uint8Array?n:new TextEncoder().encode(n);this.memory.set(r,{type:"file",content:o,mode:420,mtime:new Date})}getDirname(e){let n=e.lastIndexOf("/");return n===0?"/":e.slice(0,n)}normalizePath(e){if(!e||e==="/")return"/";let n=e.endsWith("/")&&e!=="/"?e.slice(0,-1):e;n.startsWith("/")||(n=`/${n}`);let r=n.split("/").filter(o=>o&&o!=="."),s=[];for(let o of r)o===".."?s.pop():s.push(o);return`/${s.join("/")}`||"/"}getRelativeToMount(e){return this.mountPoint==="/"?e:e===this.mountPoint?"/":e.startsWith(`${this.mountPoint}/`)?e.slice(this.mountPoint.length):null}toRealPath(e){let n=this.normalizePath(e),r=this.getRelativeToMount(n);if(r===null)return null;let s=Oe.join(this.root,r),o=Oe.resolve(s);return!o.startsWith(this.root)&&o!==this.root.replace(/\/$/,"")?null:o}dirname(e){let n=this.normalizePath(e);if(n==="/")return"/";let r=n.lastIndexOf("/");return r===0?"/":n.slice(0,r)}ensureParentDirs(e){let n=this.dirname(e);n!=="/"&&(this.memory.has(n)||(this.ensureParentDirs(n),this.memory.set(n,{type:"directory",mode:493,mtime:new Date})),this.deleted.delete(n))}async existsInOverlay(e){let n=this.normalizePath(e);if(this.deleted.has(n))return!1;if(this.memory.has(n))return!0;let r=this.toRealPath(n);if(!r)return!1;try{return await B.promises.access(r),!0}catch{return!1}}async readFile(e,n){let r=await this.readFileBuffer(e),s=Z(n);return Se(r,s)}async readFileBuffer(e,n=new Set){let r=this.normalizePath(e);if(n.has(r))throw new Error(`ELOOP: too many levels of symbolic links, open '${e}'`);if(n.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, open '${e}'`);let s=this.memory.get(r);if(s){if(s.type==="symlink"){let i=this.resolveSymlink(r,s.target);return this.readFileBuffer(i,n)}if(s.type!=="file")throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);return s.content}let o=this.toRealPath(r);if(!o)throw new Error(`ENOENT: no such file or directory, open '${e}'`);try{let i=await B.promises.lstat(o);if(i.isSymbolicLink()){let l=await B.promises.readlink(o),c=this.resolveSymlink(r,l);return this.readFileBuffer(c,n)}if(i.isDirectory())throw new Error(`EISDIR: illegal operation on a directory, read '${e}'`);let a=await B.promises.readFile(o);return new Uint8Array(a)}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, open '${e}'`):i}}async writeFile(e,n,r){this.assertWritable(`write '${e}'`);let s=this.normalizePath(e);this.ensureParentDirs(s);let o=Z(r),i=re(n,o);this.memory.set(s,{type:"file",content:i,mode:420,mtime:new Date}),this.deleted.delete(s)}async appendFile(e,n,r){this.assertWritable(`append '${e}'`);let s=this.normalizePath(e),o=Z(r),i=re(n,o),a;try{a=await this.readFileBuffer(s)}catch{a=new Uint8Array(0)}let l=new Uint8Array(a.length+i.length);l.set(a),l.set(i,a.length),this.ensureParentDirs(s),this.memory.set(s,{type:"file",content:l,mode:420,mtime:new Date}),this.deleted.delete(s)}async exists(e){return this.existsInOverlay(e)}async stat(e,n=new Set){let r=this.normalizePath(e);if(n.has(r))throw new Error(`ELOOP: too many levels of symbolic links, stat '${e}'`);if(n.add(r),this.deleted.has(r))throw new Error(`ENOENT: no such file or directory, stat '${e}'`);let s=this.memory.get(r);if(s){if(s.type==="symlink"){let a=this.resolveSymlink(r,s.target);return this.stat(a,n)}let i=0;return s.type==="file"&&(i=s.content.length),{isFile:s.type==="file",isDirectory:s.type==="directory",isSymbolicLink:!1,mode:s.mode,size:i,mtime:s.mtime}}let o=this.toRealPath(r);if(!o)throw new Error(`ENOENT: no such file or directory, stat '${e}'`);try{let i=await B.promises.stat(o);return{isFile:i.isFile(),isDirectory:i.isDirectory(),isSymbolicLink:!1,mode:i.mode,size:i.size,mtime:i.mtime}}catch(i){throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, stat '${e}'`):i}}async lstat(e){let n=this.normalizePath(e);if(this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);let r=this.memory.get(n);if(r){if(r.type==="symlink")return{isFile:!1,isDirectory:!1,isSymbolicLink:!0,mode:r.mode,size:r.target.length,mtime:r.mtime};let o=0;return r.type==="file"&&(o=r.content.length),{isFile:r.type==="file",isDirectory:r.type==="directory",isSymbolicLink:!1,mode:r.mode,size:o,mtime:r.mtime}}let s=this.toRealPath(n);if(!s)throw new Error(`ENOENT: no such file or directory, lstat '${e}'`);try{let o=await B.promises.lstat(s);return{isFile:o.isFile(),isDirectory:o.isDirectory(),isSymbolicLink:o.isSymbolicLink(),mode:o.mode,size:o.size,mtime:o.mtime}}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, lstat '${e}'`):o}}resolveSymlink(e,n){if(n.startsWith("/"))return this.normalizePath(n);let r=this.dirname(e);return this.normalizePath(r==="/"?`/${n}`:`${r}/${n}`)}async mkdir(e,n){this.assertWritable(`mkdir '${e}'`);let r=this.normalizePath(e);if(await this.existsInOverlay(r)){if(!n?.recursive)throw new Error(`EEXIST: file already exists, mkdir '${e}'`);return}let o=this.dirname(r);if(o!=="/"&&!await this.existsInOverlay(o))if(n?.recursive)await this.mkdir(o,{recursive:!0});else throw new Error(`ENOENT: no such file or directory, mkdir '${e}'`);this.memory.set(r,{type:"directory",mode:493,mtime:new Date}),this.deleted.delete(r)}async readdir(e){let n=this.normalizePath(e);if(this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, scandir '${e}'`);let r=new Set,s=new Set,o=n==="/"?"/":`${n}/`;for(let a of this.deleted)if(a.startsWith(o)){let l=a.slice(o.length),c=l.split("/")[0];c&&!l.includes("/",c.length)&&s.add(c)}for(let a of this.memory.keys())if(a!==n&&a.startsWith(o)){let c=a.slice(o.length).split("/")[0];c&&!s.has(c)&&r.add(c)}let i=this.toRealPath(n);if(i)try{let a=await B.promises.readdir(i);for(let l of a)s.has(l)||r.add(l)}catch(a){if(a.code==="ENOENT"){if(!this.memory.has(n))throw new Error(`ENOENT: no such file or directory, scandir '${e}'`)}else if(a.code!=="ENOTDIR")throw a}return Array.from(r).sort()}async rm(e,n){this.assertWritable(`rm '${e}'`);let r=this.normalizePath(e);if(!await this.existsInOverlay(r)){if(n?.force)return;throw new Error(`ENOENT: no such file or directory, rm '${e}'`)}try{if((await this.stat(r)).isDirectory){let i=await this.readdir(r);if(i.length>0){if(!n?.recursive)throw new Error(`ENOTEMPTY: directory not empty, rm '${e}'`);for(let a of i){let l=r==="/"?`/${a}`:`${r}/${a}`;await this.rm(l,n)}}}}catch{}this.deleted.add(r),this.memory.delete(r)}async cp(e,n,r){this.assertWritable(`cp '${n}'`);let s=this.normalizePath(e),o=this.normalizePath(n);if(!await this.existsInOverlay(s))throw new Error(`ENOENT: no such file or directory, cp '${e}'`);let a=await this.stat(s);if(a.isFile){let l=await this.readFileBuffer(s);await this.writeFile(o,l)}else if(a.isDirectory){if(!r?.recursive)throw new Error(`EISDIR: is a directory, cp '${e}'`);await this.mkdir(o,{recursive:!0});let l=await this.readdir(s);for(let c of l){let f=s==="/"?`/${c}`:`${s}/${c}`,d=o==="/"?`/${c}`:`${o}/${c}`;await this.cp(f,d,r)}}}async mv(e,n){this.assertWritable(`mv '${n}'`),await this.cp(e,n,{recursive:!0}),await this.rm(e,{recursive:!0})}resolvePath(e,n){if(n.startsWith("/"))return this.normalizePath(n);let r=e==="/"?`/${n}`:`${e}/${n}`;return this.normalizePath(r)}getAllPaths(){let e=new Set(this.memory.keys());for(let n of this.deleted)e.delete(n);return this.scanRealFs("/",e),Array.from(e)}scanRealFs(e,n){if(this.deleted.has(e))return;let r=this.toRealPath(e);if(r)try{let s=B.readdirSync(r);for(let o of s){let i=e==="/"?`/${o}`:`${e}/${o}`;if(this.deleted.has(i))continue;n.add(i);let a=Oe.join(r,o);B.statSync(a).isDirectory()&&this.scanRealFs(i,n)}}catch{}}async chmod(e,n){this.assertWritable(`chmod '${e}'`);let r=this.normalizePath(e);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, chmod '${e}'`);let o=this.memory.get(r);if(o){o.mode=n;return}let i=await this.stat(r);if(i.isFile){let a=await this.readFileBuffer(r);this.memory.set(r,{type:"file",content:a,mode:n,mtime:new Date})}else i.isDirectory&&this.memory.set(r,{type:"directory",mode:n,mtime:new Date})}async symlink(e,n){this.assertWritable(`symlink '${n}'`);let r=this.normalizePath(n);if(await this.existsInOverlay(r))throw new Error(`EEXIST: file already exists, symlink '${n}'`);this.ensureParentDirs(r),this.memory.set(r,{type:"symlink",target:e,mode:511,mtime:new Date}),this.deleted.delete(r)}async link(e,n){this.assertWritable(`link '${n}'`);let r=this.normalizePath(e),s=this.normalizePath(n);if(!await this.existsInOverlay(r))throw new Error(`ENOENT: no such file or directory, link '${e}'`);let i=await this.stat(r);if(!i.isFile)throw new Error(`EPERM: operation not permitted, link '${e}'`);if(await this.existsInOverlay(s))throw new Error(`EEXIST: file already exists, link '${n}'`);let l=await this.readFileBuffer(r);this.ensureParentDirs(s),this.memory.set(s,{type:"file",content:l,mode:i.mode,mtime:new Date}),this.deleted.delete(s)}async readlink(e){let n=this.normalizePath(e);if(this.deleted.has(n))throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);let r=this.memory.get(n);if(r){if(r.type!=="symlink")throw new Error(`EINVAL: invalid argument, readlink '${e}'`);return r.target}let s=this.toRealPath(n);if(!s)throw new Error(`ENOENT: no such file or directory, readlink '${e}'`);try{return await B.promises.readlink(s)}catch(o){throw o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, readlink '${e}'`):o.code==="EINVAL"?new Error(`EINVAL: invalid argument, readlink '${e}'`):o}}};import*as v from"node:fs";import*as ee from"node:path";var gt=class{root;constructor(e){if(this.root=ee.resolve(e.root),!v.existsSync(this.root))throw new Error(`ReadWriteFs root does not exist: ${this.root}`);if(!v.statSync(this.root).isDirectory())throw new Error(`ReadWriteFs root is not a directory: ${this.root}`)}toRealPath(e){let n=this.normalizePath(e),r=ee.join(this.root,n);return ee.resolve(r)}normalizePath(e){if(!e||e==="/")return"/";let n=e.endsWith("/")&&e!=="/"?e.slice(0,-1):e;n.startsWith("/")||(n=`/${n}`);let r=n.split("/").filter(o=>o&&o!=="."),s=[];for(let o of r)o===".."?s.pop():s.push(o);return`/${s.join("/")}`||"/"}async readFile(e,n){let r=await this.readFileBuffer(e),s=Z(n);return Se(r,s)}async readFileBuffer(e){let n=this.toRealPath(e);try{let r=await v.promises.readFile(n);return new Uint8Array(r)}catch(r){let s=r;throw s.code==="ENOENT"?new Error(`ENOENT: no such file or directory, open '${e}'`):s.code==="EISDIR"?new Error(`EISDIR: illegal operation on a directory, read '${e}'`):r}}async writeFile(e,n,r){let s=this.toRealPath(e),o=Z(r),i=re(n,o),a=ee.dirname(s);await v.promises.mkdir(a,{recursive:!0}),await v.promises.writeFile(s,i)}async appendFile(e,n,r){let s=this.toRealPath(e),o=Z(r),i=re(n,o),a=ee.dirname(s);await v.promises.mkdir(a,{recursive:!0}),await v.promises.appendFile(s,i)}async exists(e){let n=this.toRealPath(e);try{return await v.promises.access(n),!0}catch{return!1}}async stat(e){let n=this.toRealPath(e);try{let r=await v.promises.stat(n);return{isFile:r.isFile(),isDirectory:r.isDirectory(),isSymbolicLink:!1,mode:r.mode,size:r.size,mtime:r.mtime}}catch(r){throw r.code==="ENOENT"?new Error(`ENOENT: no such file or directory, stat '${e}'`):r}}async lstat(e){let n=this.toRealPath(e);try{let r=await v.promises.lstat(n);return{isFile:r.isFile(),isDirectory:r.isDirectory(),isSymbolicLink:r.isSymbolicLink(),mode:r.mode,size:r.size,mtime:r.mtime}}catch(r){throw r.code==="ENOENT"?new Error(`ENOENT: no such file or directory, lstat '${e}'`):r}}async mkdir(e,n){let r=this.toRealPath(e);try{await v.promises.mkdir(r,{recursive:n?.recursive})}catch(s){let o=s;throw o.code==="EEXIST"?new Error(`EEXIST: file already exists, mkdir '${e}'`):o.code==="ENOENT"?new Error(`ENOENT: no such file or directory, mkdir '${e}'`):s}}async readdir(e){let n=this.toRealPath(e);try{return(await v.promises.readdir(n)).sort()}catch(r){let s=r;throw s.code==="ENOENT"?new Error(`ENOENT: no such file or directory, scandir '${e}'`):s.code==="ENOTDIR"?new Error(`ENOTDIR: not a directory, scandir '${e}'`):r}}async rm(e,n){let r=this.toRealPath(e);try{await v.promises.rm(r,{recursive:n?.recursive??!1,force:n?.force??!1})}catch(s){let o=s;throw o.code==="ENOENT"&&!n?.force?new Error(`ENOENT: no such file or directory, rm '${e}'`):o.code==="ENOTEMPTY"?new Error(`ENOTEMPTY: directory not empty, rm '${e}'`):s}}async cp(e,n,r){let s=this.toRealPath(e),o=this.toRealPath(n);try{await v.promises.cp(s,o,{recursive:r?.recursive??!1})}catch(i){let a=i;throw a.code==="ENOENT"?new Error(`ENOENT: no such file or directory, cp '${e}'`):a.code==="EISDIR"?new Error(`EISDIR: is a directory, cp '${e}'`):i}}async mv(e,n){let r=this.toRealPath(e),s=this.toRealPath(n),o=ee.dirname(s);await v.promises.mkdir(o,{recursive:!0});try{await v.promises.rename(r,s)}catch(i){let a=i;if(a.code==="ENOENT")throw new Error(`ENOENT: no such file or directory, mv '${e}'`);if(a.code==="EXDEV"){await this.cp(e,n,{recursive:!0}),await this.rm(e,{recursive:!0});return}throw i}}resolvePath(e,n){if(n.startsWith("/"))return this.normalizePath(n);let r=e==="/"?`/${n}`:`${e}/${n}`;return this.normalizePath(r)}getAllPaths(){let e=[];return this.scanDir("/",e),e}scanDir(e,n){let r=this.toRealPath(e);try{let s=v.readdirSync(r);for(let o of s){let i=e==="/"?`/${o}`:`${e}/${o}`;n.push(i);let a=ee.join(r,o);v.statSync(a).isDirectory()&&this.scanDir(i,n)}}catch{}}async chmod(e,n){let r=this.toRealPath(e);try{await v.promises.chmod(r,n)}catch(s){throw s.code==="ENOENT"?new Error(`ENOENT: no such file or directory, chmod '${e}'`):s}}async symlink(e,n){let r=this.toRealPath(n);try{await v.promises.symlink(e,r)}catch(s){throw s.code==="EEXIST"?new Error(`EEXIST: file already exists, symlink '${n}'`):s}}async link(e,n){let r=this.toRealPath(e),s=this.toRealPath(n);try{await v.promises.link(r,s)}catch(o){let i=o;throw i.code==="ENOENT"?new Error(`ENOENT: no such file or directory, link '${e}'`):i.code==="EEXIST"?new Error(`EEXIST: file already exists, link '${n}'`):i.code==="EPERM"?new Error(`EPERM: operation not permitted, link '${e}'`):o}}async readlink(e){let n=this.toRealPath(e);try{return await v.promises.readlink(n)}catch(r){let s=r;throw s.code==="ENOENT"?new Error(`ENOENT: no such file or directory, readlink '${e}'`):s.code==="EINVAL"?new Error(`EINVAL: invalid argument, readlink '${e}'`):r}}};var Le=class{cmdId;cwd;startedAt;exitCode;bashEnv;cmdLine;env;explicitCwd;resultPromise;constructor(e,n,r,s,o=!1){this.cmdId=crypto.randomUUID(),this.cwd=r,this.startedAt=new Date,this.bashEnv=e,this.cmdLine=n,this.env=s,this.explicitCwd=o,this.resultPromise=this.execute()}async execute(){let e=this.env||this.explicitCwd?{cwd:this.explicitCwd?this.cwd:void 0,env:this.env}:void 0,n=await this.bashEnv.exec(this.cmdLine,e);return this.exitCode=n.exitCode,n}async*logs(){let e=await this.resultPromise;e.stdout&&(yield{type:"stdout",data:e.stdout,timestamp:new Date}),e.stderr&&(yield{type:"stderr",data:e.stderr,timestamp:new Date})}async wait(){return await this.resultPromise,this}async output(){let e=await this.resultPromise;return e.stdout+e.stderr}async stdout(){return(await this.resultPromise).stdout}async stderr(){return(await this.resultPromise).stderr}async kill(){}};var At=class t{bashEnv;constructor(e){this.bashEnv=e}static async create(e){let n=e?.fs;if(e?.overlayRoot){if(e?.fs)throw new Error("Cannot specify both 'fs' and 'overlayRoot' options");n=new _e({root:e.overlayRoot})}let r=new Ve({env:e?.env,cwd:e?.cwd,fs:n,maxCallDepth:e?.maxCallDepth,maxCommandCount:e?.maxCommandCount,maxLoopIterations:e?.maxLoopIterations,network:e?.network});return new t(r)}async runCommand(e,n){let r=n?.cwd??this.bashEnv.getCwd(),s=n?.cwd!==void 0;return new Le(this.bashEnv,e,r,n?.env,s)}async writeFiles(e){for(let[n,r]of Object.entries(e)){let s;typeof r=="string"?s=r:r.encoding==="base64"?s=Buffer.from(r.content,"base64").toString("utf-8"):s=r.content;let o=n.substring(0,n.lastIndexOf("/"))||"/";o!=="/"&&await this.bashEnv.exec(`mkdir -p ${o}`),await this.bashEnv.writeFile(n,s)}}async readFile(e,n){let r=await this.bashEnv.readFile(e);return n==="base64"?Buffer.from(r).toString("base64"):r}async mkDir(e,n){let r=n?.recursive?"-p":"";await this.bashEnv.exec(`mkdir ${r} ${e}`)}async stop(){}async extendTimeout(e){}get domain(){}get bashEnvInstance(){return this.bashEnv}};export{Ve as Bash,Ee as InMemoryFs,Re as NetworkAccessDeniedError,_e as OverlayFs,gt as ReadWriteFs,De as RedirectNotAllowedError,At as Sandbox,Le as SandboxCommand,ke as TooManyRedirectsError,Gn as defineCommand,Un as getCommandNames,Vn as getNetworkCommandNames};