just-bash 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +326 -0
  3. package/dist/Bash.d.ts +90 -0
  4. package/dist/ai/index.d.ts +56 -0
  5. package/dist/ast/types.d.ts +518 -0
  6. package/dist/bin/chunks/alias-74DFXE2E.js +7 -0
  7. package/dist/bin/chunks/awk-S63F6IYK.js +15 -0
  8. package/dist/bin/chunks/base64-NC7HTKLZ.js +5 -0
  9. package/dist/bin/chunks/basename-Y7JDBYHN.js +6 -0
  10. package/dist/bin/chunks/bash-TQGTNXAE.js +7 -0
  11. package/dist/bin/chunks/cat-YZXBF5YF.js +6 -0
  12. package/dist/bin/chunks/chmod-3G4LK462.js +9 -0
  13. package/dist/bin/chunks/chunk-26Q3PZQ6.js +2 -0
  14. package/dist/bin/chunks/chunk-4VDEBYW7.js +2 -0
  15. package/dist/bin/chunks/chunk-5KNEBKYN.js +2 -0
  16. package/dist/bin/chunks/chunk-GTNBSMZR.js +23 -0
  17. package/dist/bin/chunks/chunk-J7BCMQDI.js +16 -0
  18. package/dist/bin/chunks/chunk-J7MJV6WO.js +3 -0
  19. package/dist/bin/chunks/chunk-LV662IGP.js +6 -0
  20. package/dist/bin/chunks/chunk-TA7RUHGQ.js +4 -0
  21. package/dist/bin/chunks/clear-GTCFHSB2.js +2 -0
  22. package/dist/bin/chunks/cp-77UY7PGN.js +8 -0
  23. package/dist/bin/chunks/curl-NE7XEWMN.js +26 -0
  24. package/dist/bin/chunks/cut-UYV3FM7R.js +6 -0
  25. package/dist/bin/chunks/date-7NBRXV2Z.js +5 -0
  26. package/dist/bin/chunks/diff-TG2NXCX2.js +19 -0
  27. package/dist/bin/chunks/dirname-VLHP44TU.js +5 -0
  28. package/dist/bin/chunks/du-4FZ7WF2P.js +8 -0
  29. package/dist/bin/chunks/echo-DEUIS5JO.js +4 -0
  30. package/dist/bin/chunks/env-FVITWNHG.js +9 -0
  31. package/dist/bin/chunks/expr-HA2ZNL6S.js +5 -0
  32. package/dist/bin/chunks/find-4B67H4RP.js +11 -0
  33. package/dist/bin/chunks/grep-OVWU4WCZ.js +15 -0
  34. package/dist/bin/chunks/head-VGXR3WWL.js +2 -0
  35. package/dist/bin/chunks/help-5V3MPCYQ.js +16 -0
  36. package/dist/bin/chunks/history-PRQ4B6N2.js +3 -0
  37. package/dist/bin/chunks/html-to-markdown-L4UWMK4S.js +84 -0
  38. package/dist/bin/chunks/jq-EYSXBSCP.js +14 -0
  39. package/dist/bin/chunks/ln-DB7J2W5X.js +10 -0
  40. package/dist/bin/chunks/ls-C4MPAF3H.js +26 -0
  41. package/dist/bin/chunks/mkdir-LWULWDHP.js +7 -0
  42. package/dist/bin/chunks/mv-TDYCNSIQ.js +7 -0
  43. package/dist/bin/chunks/paste-R36J3G4K.js +8 -0
  44. package/dist/bin/chunks/printf-BOFQVMMK.js +15 -0
  45. package/dist/bin/chunks/pwd-X4MWD4JP.js +3 -0
  46. package/dist/bin/chunks/readlink-DPNOQY67.js +7 -0
  47. package/dist/bin/chunks/rm-W6CCBEMG.js +8 -0
  48. package/dist/bin/chunks/sed-7IS44XON.js +48 -0
  49. package/dist/bin/chunks/seq-DGJILX2Q.js +7 -0
  50. package/dist/bin/chunks/sleep-E4DIYGTT.js +10 -0
  51. package/dist/bin/chunks/sort-UJP353TM.js +15 -0
  52. package/dist/bin/chunks/stat-3PHITCPO.js +9 -0
  53. package/dist/bin/chunks/tail-YSVKBQ77.js +2 -0
  54. package/dist/bin/chunks/tee-UU2VS3OM.js +3 -0
  55. package/dist/bin/chunks/timeout-OZVAGW2H.js +12 -0
  56. package/dist/bin/chunks/touch-XCIAYF5I.js +4 -0
  57. package/dist/bin/chunks/tr-2EEKHHO6.js +20 -0
  58. package/dist/bin/chunks/tree-4247W67O.js +12 -0
  59. package/dist/bin/chunks/true-JCX733LK.js +2 -0
  60. package/dist/bin/chunks/uniq-W4HF6YSB.js +5 -0
  61. package/dist/bin/chunks/wc-CNJ3QDRA.js +6 -0
  62. package/dist/bin/chunks/which-HX2NMOP3.js +3 -0
  63. package/dist/bin/chunks/xargs-YNLVLPOF.js +4 -0
  64. package/dist/bin/just-bash.js +188 -0
  65. package/dist/bin/shell/chunks/alias-74DFXE2E.js +7 -0
  66. package/dist/bin/shell/chunks/awk-S63F6IYK.js +15 -0
  67. package/dist/bin/shell/chunks/base64-NC7HTKLZ.js +5 -0
  68. package/dist/bin/shell/chunks/basename-Y7JDBYHN.js +6 -0
  69. package/dist/bin/shell/chunks/bash-TQGTNXAE.js +7 -0
  70. package/dist/bin/shell/chunks/cat-YZXBF5YF.js +6 -0
  71. package/dist/bin/shell/chunks/chmod-3G4LK462.js +9 -0
  72. package/dist/bin/shell/chunks/chunk-26Q3PZQ6.js +2 -0
  73. package/dist/bin/shell/chunks/chunk-4VDEBYW7.js +2 -0
  74. package/dist/bin/shell/chunks/chunk-5KNEBKYN.js +2 -0
  75. package/dist/bin/shell/chunks/chunk-GTNBSMZR.js +23 -0
  76. package/dist/bin/shell/chunks/chunk-J7BCMQDI.js +16 -0
  77. package/dist/bin/shell/chunks/chunk-J7MJV6WO.js +3 -0
  78. package/dist/bin/shell/chunks/chunk-LV662IGP.js +6 -0
  79. package/dist/bin/shell/chunks/chunk-TA7RUHGQ.js +4 -0
  80. package/dist/bin/shell/chunks/clear-GTCFHSB2.js +2 -0
  81. package/dist/bin/shell/chunks/cp-77UY7PGN.js +8 -0
  82. package/dist/bin/shell/chunks/curl-NE7XEWMN.js +26 -0
  83. package/dist/bin/shell/chunks/cut-UYV3FM7R.js +6 -0
  84. package/dist/bin/shell/chunks/date-7NBRXV2Z.js +5 -0
  85. package/dist/bin/shell/chunks/diff-TG2NXCX2.js +19 -0
  86. package/dist/bin/shell/chunks/dirname-VLHP44TU.js +5 -0
  87. package/dist/bin/shell/chunks/du-4FZ7WF2P.js +8 -0
  88. package/dist/bin/shell/chunks/echo-DEUIS5JO.js +4 -0
  89. package/dist/bin/shell/chunks/env-FVITWNHG.js +9 -0
  90. package/dist/bin/shell/chunks/expr-HA2ZNL6S.js +5 -0
  91. package/dist/bin/shell/chunks/find-4B67H4RP.js +11 -0
  92. package/dist/bin/shell/chunks/grep-OVWU4WCZ.js +15 -0
  93. package/dist/bin/shell/chunks/head-VGXR3WWL.js +2 -0
  94. package/dist/bin/shell/chunks/help-5V3MPCYQ.js +16 -0
  95. package/dist/bin/shell/chunks/history-PRQ4B6N2.js +3 -0
  96. package/dist/bin/shell/chunks/html-to-markdown-L4UWMK4S.js +84 -0
  97. package/dist/bin/shell/chunks/jq-EYSXBSCP.js +14 -0
  98. package/dist/bin/shell/chunks/ln-DB7J2W5X.js +10 -0
  99. package/dist/bin/shell/chunks/ls-C4MPAF3H.js +26 -0
  100. package/dist/bin/shell/chunks/mkdir-LWULWDHP.js +7 -0
  101. package/dist/bin/shell/chunks/mv-TDYCNSIQ.js +7 -0
  102. package/dist/bin/shell/chunks/paste-R36J3G4K.js +8 -0
  103. package/dist/bin/shell/chunks/printf-BOFQVMMK.js +15 -0
  104. package/dist/bin/shell/chunks/pwd-X4MWD4JP.js +3 -0
  105. package/dist/bin/shell/chunks/readlink-DPNOQY67.js +7 -0
  106. package/dist/bin/shell/chunks/rm-W6CCBEMG.js +8 -0
  107. package/dist/bin/shell/chunks/sed-7IS44XON.js +48 -0
  108. package/dist/bin/shell/chunks/seq-DGJILX2Q.js +7 -0
  109. package/dist/bin/shell/chunks/sleep-E4DIYGTT.js +10 -0
  110. package/dist/bin/shell/chunks/sort-UJP353TM.js +15 -0
  111. package/dist/bin/shell/chunks/stat-3PHITCPO.js +9 -0
  112. package/dist/bin/shell/chunks/tail-YSVKBQ77.js +2 -0
  113. package/dist/bin/shell/chunks/tee-UU2VS3OM.js +3 -0
  114. package/dist/bin/shell/chunks/timeout-OZVAGW2H.js +12 -0
  115. package/dist/bin/shell/chunks/touch-XCIAYF5I.js +4 -0
  116. package/dist/bin/shell/chunks/tr-2EEKHHO6.js +20 -0
  117. package/dist/bin/shell/chunks/tree-4247W67O.js +12 -0
  118. package/dist/bin/shell/chunks/true-JCX733LK.js +2 -0
  119. package/dist/bin/shell/chunks/uniq-W4HF6YSB.js +5 -0
  120. package/dist/bin/shell/chunks/wc-CNJ3QDRA.js +6 -0
  121. package/dist/bin/shell/chunks/which-HX2NMOP3.js +3 -0
  122. package/dist/bin/shell/chunks/xargs-YNLVLPOF.js +4 -0
  123. package/dist/bin/shell/shell.js +172 -0
  124. package/dist/bundle/ai/index.js +541 -0
  125. package/dist/bundle/chunks/alias-7ZSTROM7.js +6 -0
  126. package/dist/bundle/chunks/awk-V4C3GTJI.js +14 -0
  127. package/dist/bundle/chunks/base64-WATI5PWI.js +4 -0
  128. package/dist/bundle/chunks/basename-SB5JXIY3.js +5 -0
  129. package/dist/bundle/chunks/bash-T4PXVRYX.js +6 -0
  130. package/dist/bundle/chunks/cat-5KESXK2M.js +5 -0
  131. package/dist/bundle/chunks/chmod-VLKWIL3N.js +8 -0
  132. package/dist/bundle/chunks/chunk-3YNHMZ5M.js +2 -0
  133. package/dist/bundle/chunks/chunk-44UOCSGV.js +1 -0
  134. package/dist/bundle/chunks/chunk-74CEPOFO.js +22 -0
  135. package/dist/bundle/chunks/chunk-JYYFSUWP.js +5 -0
  136. package/dist/bundle/chunks/chunk-UJMN5NLH.js +1 -0
  137. package/dist/bundle/chunks/chunk-W2EKKAIL.js +15 -0
  138. package/dist/bundle/chunks/chunk-ZVV5VXYZ.js +3 -0
  139. package/dist/bundle/chunks/clear-ZBD2DMXN.js +1 -0
  140. package/dist/bundle/chunks/cp-BLHAPLQZ.js +7 -0
  141. package/dist/bundle/chunks/curl-PA2MWGKN.js +25 -0
  142. package/dist/bundle/chunks/cut-7RHEYJ7Y.js +5 -0
  143. package/dist/bundle/chunks/date-YOOSNZVA.js +4 -0
  144. package/dist/bundle/chunks/diff-IVJFQANX.js +6 -0
  145. package/dist/bundle/chunks/dirname-Q5HDZLH2.js +4 -0
  146. package/dist/bundle/chunks/du-I5HYAKTQ.js +7 -0
  147. package/dist/bundle/chunks/echo-W2TA2N7Y.js +3 -0
  148. package/dist/bundle/chunks/env-OORA5GFS.js +8 -0
  149. package/dist/bundle/chunks/expr-A4LJAGVP.js +4 -0
  150. package/dist/bundle/chunks/find-K3NO35MZ.js +10 -0
  151. package/dist/bundle/chunks/grep-3D2INI4S.js +14 -0
  152. package/dist/bundle/chunks/head-7H5R4WKO.js +1 -0
  153. package/dist/bundle/chunks/help-SDCRRU2F.js +15 -0
  154. package/dist/bundle/chunks/history-7Z2STZ6Y.js +2 -0
  155. package/dist/bundle/chunks/html-to-markdown-XMBYO6FD.js +4 -0
  156. package/dist/bundle/chunks/jq-7R2XGLLH.js +13 -0
  157. package/dist/bundle/chunks/ln-UTUVIAFP.js +9 -0
  158. package/dist/bundle/chunks/ls-B7C35UDO.js +23 -0
  159. package/dist/bundle/chunks/mkdir-WYI2LJ6H.js +6 -0
  160. package/dist/bundle/chunks/mv-GN23UIZU.js +6 -0
  161. package/dist/bundle/chunks/paste-L4TYPVSP.js +7 -0
  162. package/dist/bundle/chunks/printf-3ZT5XOIZ.js +14 -0
  163. package/dist/bundle/chunks/pwd-ZVX5RTL4.js +2 -0
  164. package/dist/bundle/chunks/readlink-HHC33N5C.js +6 -0
  165. package/dist/bundle/chunks/rm-5X2XSQQ6.js +7 -0
  166. package/dist/bundle/chunks/sed-UZJSXYQZ.js +47 -0
  167. package/dist/bundle/chunks/seq-TFPZQZPJ.js +6 -0
  168. package/dist/bundle/chunks/sleep-QJBQD6VS.js +9 -0
  169. package/dist/bundle/chunks/sort-LHMQWYH2.js +14 -0
  170. package/dist/bundle/chunks/stat-TM5F5YO4.js +8 -0
  171. package/dist/bundle/chunks/tail-BLGGG2VX.js +1 -0
  172. package/dist/bundle/chunks/tee-VCNOG5VI.js +2 -0
  173. package/dist/bundle/chunks/timeout-THAT7IOO.js +11 -0
  174. package/dist/bundle/chunks/touch-Z5XRYFYY.js +3 -0
  175. package/dist/bundle/chunks/tr-UV4V27RJ.js +19 -0
  176. package/dist/bundle/chunks/tree-75UXQ4XJ.js +11 -0
  177. package/dist/bundle/chunks/true-OD7ZXH3O.js +1 -0
  178. package/dist/bundle/chunks/uniq-IIOQKNTS.js +4 -0
  179. package/dist/bundle/chunks/wc-OXLYBRUE.js +5 -0
  180. package/dist/bundle/chunks/which-ONWH3TNF.js +2 -0
  181. package/dist/bundle/chunks/xargs-E5JPQL24.js +3 -0
  182. package/dist/bundle/index.js +141 -0
  183. package/dist/commands/alias/alias.d.ts +3 -0
  184. package/dist/commands/awk/awk.d.ts +2 -0
  185. package/dist/commands/awk/executor.d.ts +3 -0
  186. package/dist/commands/awk/expressions.d.ts +3 -0
  187. package/dist/commands/awk/functions.d.ts +12 -0
  188. package/dist/commands/awk/parser.d.ts +3 -0
  189. package/dist/commands/awk/types.d.ts +44 -0
  190. package/dist/commands/base64/base64.d.ts +5 -0
  191. package/dist/commands/basename/basename.d.ts +2 -0
  192. package/dist/commands/bash/bash.d.ts +3 -0
  193. package/dist/commands/cat/cat.d.ts +2 -0
  194. package/dist/commands/chmod/chmod.d.ts +2 -0
  195. package/dist/commands/clear/clear.d.ts +2 -0
  196. package/dist/commands/cp/cp.d.ts +2 -0
  197. package/dist/commands/curl/curl.d.ts +8 -0
  198. package/dist/commands/curl/form.d.ts +21 -0
  199. package/dist/commands/curl/help.d.ts +9 -0
  200. package/dist/commands/curl/parse.d.ts +9 -0
  201. package/dist/commands/curl/types.d.ts +31 -0
  202. package/dist/commands/curl/utils.d.ts +20 -0
  203. package/dist/commands/cut/cut.d.ts +2 -0
  204. package/dist/commands/date/date.d.ts +5 -0
  205. package/dist/commands/diff/diff.d.ts +5 -0
  206. package/dist/commands/dirname/dirname.d.ts +2 -0
  207. package/dist/commands/du/du.d.ts +2 -0
  208. package/dist/commands/echo/echo.d.ts +2 -0
  209. package/dist/commands/env/env.d.ts +3 -0
  210. package/dist/commands/expr/expr.d.ts +7 -0
  211. package/dist/commands/find/find.d.ts +2 -0
  212. package/dist/commands/find/matcher.d.ts +3 -0
  213. package/dist/commands/find/parser.d.ts +2 -0
  214. package/dist/commands/find/types.d.ts +70 -0
  215. package/dist/commands/grep/grep.d.ts +4 -0
  216. package/dist/commands/head/head-tail-shared.d.ts +38 -0
  217. package/dist/commands/head/head.d.ts +2 -0
  218. package/dist/commands/help/help.d.ts +2 -0
  219. package/dist/commands/help.d.ts +16 -0
  220. package/dist/commands/history/history.d.ts +2 -0
  221. package/dist/commands/html-to-markdown/html-to-markdown.d.ts +7 -0
  222. package/dist/commands/jq/jq.d.ts +14 -0
  223. package/dist/commands/ln/ln.d.ts +2 -0
  224. package/dist/commands/ls/ls.d.ts +2 -0
  225. package/dist/commands/mkdir/mkdir.d.ts +2 -0
  226. package/dist/commands/mv/mv.d.ts +2 -0
  227. package/dist/commands/paste/paste.d.ts +2 -0
  228. package/dist/commands/printf/printf.d.ts +2 -0
  229. package/dist/commands/pwd/pwd.d.ts +2 -0
  230. package/dist/commands/readlink/readlink.d.ts +2 -0
  231. package/dist/commands/registry.d.ts +33 -0
  232. package/dist/commands/rm/rm.d.ts +2 -0
  233. package/dist/commands/sed/executor.d.ts +7 -0
  234. package/dist/commands/sed/parser.d.ts +5 -0
  235. package/dist/commands/sed/sed.d.ts +2 -0
  236. package/dist/commands/sed/types.d.ts +141 -0
  237. package/dist/commands/seq/seq.d.ts +14 -0
  238. package/dist/commands/sleep/sleep.d.ts +2 -0
  239. package/dist/commands/sort/comparator.d.ts +9 -0
  240. package/dist/commands/sort/parser.d.ts +11 -0
  241. package/dist/commands/sort/sort.d.ts +2 -0
  242. package/dist/commands/sort/types.d.ts +18 -0
  243. package/dist/commands/stat/stat.d.ts +2 -0
  244. package/dist/commands/tail/tail.d.ts +2 -0
  245. package/dist/commands/tee/tee.d.ts +2 -0
  246. package/dist/commands/timeout/timeout.d.ts +2 -0
  247. package/dist/commands/touch/touch.d.ts +2 -0
  248. package/dist/commands/tr/tr.d.ts +2 -0
  249. package/dist/commands/tree/tree.d.ts +2 -0
  250. package/dist/commands/true/true.d.ts +3 -0
  251. package/dist/commands/uniq/uniq.d.ts +2 -0
  252. package/dist/commands/wc/wc.d.ts +2 -0
  253. package/dist/commands/which/which.d.ts +2 -0
  254. package/dist/commands/xargs/xargs.d.ts +2 -0
  255. package/dist/fs-interface.d.ts +186 -0
  256. package/dist/fs.d.ts +39 -0
  257. package/dist/index.d.ts +12 -0
  258. package/dist/interpreter/arithmetic.d.ts +29 -0
  259. package/dist/interpreter/builtins/break.d.ts +6 -0
  260. package/dist/interpreter/builtins/cd.d.ts +6 -0
  261. package/dist/interpreter/builtins/continue.d.ts +6 -0
  262. package/dist/interpreter/builtins/declare.d.ts +29 -0
  263. package/dist/interpreter/builtins/eval.d.ts +9 -0
  264. package/dist/interpreter/builtins/exit.d.ts +5 -0
  265. package/dist/interpreter/builtins/export.d.ts +13 -0
  266. package/dist/interpreter/builtins/index.d.ts +36 -0
  267. package/dist/interpreter/builtins/let.d.ts +18 -0
  268. package/dist/interpreter/builtins/local.d.ts +6 -0
  269. package/dist/interpreter/builtins/read.d.ts +6 -0
  270. package/dist/interpreter/builtins/return.d.ts +6 -0
  271. package/dist/interpreter/builtins/set.d.ts +6 -0
  272. package/dist/interpreter/builtins/shift.d.ts +12 -0
  273. package/dist/interpreter/builtins/source.d.ts +6 -0
  274. package/dist/interpreter/builtins/unset.d.ts +12 -0
  275. package/dist/interpreter/builtins/variable-helpers.d.ts +30 -0
  276. package/dist/interpreter/conditionals.d.ts +17 -0
  277. package/dist/interpreter/control-flow.d.ts +21 -0
  278. package/dist/interpreter/errors.d.ts +107 -0
  279. package/dist/interpreter/expansion/analysis.d.ts +39 -0
  280. package/dist/interpreter/expansion/brace-range.d.ts +20 -0
  281. package/dist/interpreter/expansion/pattern.d.ts +22 -0
  282. package/dist/interpreter/expansion/variable.d.ts +27 -0
  283. package/dist/interpreter/expansion/word-split.d.ts +24 -0
  284. package/dist/interpreter/expansion.d.ts +27 -0
  285. package/dist/interpreter/functions.d.ts +12 -0
  286. package/dist/interpreter/helpers/array.d.ts +23 -0
  287. package/dist/interpreter/helpers/condition.d.ts +22 -0
  288. package/dist/interpreter/helpers/errors.d.ts +8 -0
  289. package/dist/interpreter/helpers/file-tests.d.ts +33 -0
  290. package/dist/interpreter/helpers/ifs.d.ts +43 -0
  291. package/dist/interpreter/helpers/loop.d.ts +24 -0
  292. package/dist/interpreter/helpers/numeric-compare.d.ts +13 -0
  293. package/dist/interpreter/helpers/readonly.d.ts +21 -0
  294. package/dist/interpreter/helpers/regex.d.ts +8 -0
  295. package/dist/interpreter/helpers/result.d.ts +54 -0
  296. package/dist/interpreter/helpers/statements.d.ts +20 -0
  297. package/dist/interpreter/helpers/string-compare.d.ts +22 -0
  298. package/dist/interpreter/helpers/string-tests.d.ts +13 -0
  299. package/dist/interpreter/helpers/variable-tests.d.ts +9 -0
  300. package/dist/interpreter/helpers/word-parts.d.ts +22 -0
  301. package/dist/interpreter/index.d.ts +3 -0
  302. package/dist/interpreter/interpreter.d.ts +61 -0
  303. package/dist/interpreter/redirections.d.ts +14 -0
  304. package/dist/interpreter/types.d.ts +68 -0
  305. package/dist/limits.d.ts +26 -0
  306. package/dist/network/allow-list/shared.d.ts +45 -0
  307. package/dist/network/allow-list.d.ts +51 -0
  308. package/dist/network/fetch.d.ts +25 -0
  309. package/dist/network/index.d.ts +7 -0
  310. package/dist/network/types.d.ts +85 -0
  311. package/dist/overlay-fs/OverlayFs.d.ts +87 -0
  312. package/dist/overlay-fs/index.d.ts +1 -0
  313. package/dist/parser/arithmetic-parser.d.ts +25 -0
  314. package/dist/parser/command-parser.d.ts +10 -0
  315. package/dist/parser/compound-parser.d.ts +14 -0
  316. package/dist/parser/conditional-parser.d.ts +8 -0
  317. package/dist/parser/expansion-parser.d.ts +10 -0
  318. package/dist/parser/lexer.d.ts +135 -0
  319. package/dist/parser/parser.d.ts +92 -0
  320. package/dist/parser/types.d.ts +23 -0
  321. package/dist/parser/word-parser.d.ts +33 -0
  322. package/dist/sandbox/Command.d.ts +28 -0
  323. package/dist/sandbox/Sandbox.d.ts +60 -0
  324. package/dist/sandbox/index.d.ts +2 -0
  325. package/dist/types.d.ts +80 -0
  326. package/dist/utils/args.d.ts +55 -0
  327. package/dist/utils/file-reader.d.ts +64 -0
  328. package/dist/utils/glob.d.ts +25 -0
  329. package/package.json +103 -0
@@ -0,0 +1,518 @@
1
+ /**
2
+ * Abstract Syntax Tree (AST) Types for Bash
3
+ *
4
+ * This module defines the complete AST structure for bash scripts.
5
+ * The design follows the actual bash grammar while being TypeScript-idiomatic.
6
+ *
7
+ * Architecture:
8
+ * Input → Lexer → Parser → AST → Expander → Interpreter → Output
9
+ *
10
+ * Each node type corresponds to a bash construct and can be visited
11
+ * by the tree-walking interpreter.
12
+ */
13
+ /** Base interface for all AST nodes */
14
+ export interface ASTNode {
15
+ type: string;
16
+ }
17
+ /** Position information for error reporting */
18
+ export interface Position {
19
+ line: number;
20
+ column: number;
21
+ offset: number;
22
+ }
23
+ /** Span in source code */
24
+ export interface Span {
25
+ start: Position;
26
+ end: Position;
27
+ }
28
+ /** Root node: a complete script */
29
+ export interface ScriptNode extends ASTNode {
30
+ type: "Script";
31
+ statements: StatementNode[];
32
+ }
33
+ /** A statement is a list of pipelines connected by && or || */
34
+ export interface StatementNode extends ASTNode {
35
+ type: "Statement";
36
+ pipelines: PipelineNode[];
37
+ /** Operators between pipelines: "&&" | "||" | ";" */
38
+ operators: ("&&" | "||" | ";")[];
39
+ /** Run in background? */
40
+ background: boolean;
41
+ }
42
+ /** A pipeline: cmd1 | cmd2 | cmd3 */
43
+ export interface PipelineNode extends ASTNode {
44
+ type: "Pipeline";
45
+ commands: CommandNode[];
46
+ /** Negate exit status with ! */
47
+ negated: boolean;
48
+ }
49
+ /** Union of all command types */
50
+ export type CommandNode = SimpleCommandNode | CompoundCommandNode | FunctionDefNode;
51
+ /** Simple command: name args... with optional redirections */
52
+ export interface SimpleCommandNode extends ASTNode {
53
+ type: "SimpleCommand";
54
+ /** Variable assignments before command: VAR=value cmd */
55
+ assignments: AssignmentNode[];
56
+ /** Command name (may be empty for assignment-only) */
57
+ name: WordNode | null;
58
+ /** Command arguments */
59
+ args: WordNode[];
60
+ /** I/O redirections */
61
+ redirections: RedirectionNode[];
62
+ }
63
+ /** Compound commands: control structures */
64
+ export type CompoundCommandNode = IfNode | ForNode | CStyleForNode | WhileNode | UntilNode | CaseNode | SubshellNode | GroupNode | ArithmeticCommandNode | ConditionalCommandNode;
65
+ /** if statement */
66
+ export interface IfNode extends ASTNode {
67
+ type: "If";
68
+ clauses: IfClause[];
69
+ elseBody: StatementNode[] | null;
70
+ redirections: RedirectionNode[];
71
+ }
72
+ export interface IfClause {
73
+ condition: StatementNode[];
74
+ body: StatementNode[];
75
+ }
76
+ /** for loop: for VAR in WORDS; do ...; done */
77
+ export interface ForNode extends ASTNode {
78
+ type: "For";
79
+ variable: string;
80
+ /** Words to iterate over (null = "$@") */
81
+ words: WordNode[] | null;
82
+ body: StatementNode[];
83
+ redirections: RedirectionNode[];
84
+ }
85
+ /** C-style for loop: for ((init; cond; step)); do ...; done */
86
+ export interface CStyleForNode extends ASTNode {
87
+ type: "CStyleFor";
88
+ init: ArithmeticExpressionNode | null;
89
+ condition: ArithmeticExpressionNode | null;
90
+ update: ArithmeticExpressionNode | null;
91
+ body: StatementNode[];
92
+ redirections: RedirectionNode[];
93
+ }
94
+ /** while loop */
95
+ export interface WhileNode extends ASTNode {
96
+ type: "While";
97
+ condition: StatementNode[];
98
+ body: StatementNode[];
99
+ redirections: RedirectionNode[];
100
+ }
101
+ /** until loop */
102
+ export interface UntilNode extends ASTNode {
103
+ type: "Until";
104
+ condition: StatementNode[];
105
+ body: StatementNode[];
106
+ redirections: RedirectionNode[];
107
+ }
108
+ /** case statement */
109
+ export interface CaseNode extends ASTNode {
110
+ type: "Case";
111
+ word: WordNode;
112
+ items: CaseItemNode[];
113
+ redirections: RedirectionNode[];
114
+ }
115
+ export interface CaseItemNode extends ASTNode {
116
+ type: "CaseItem";
117
+ patterns: WordNode[];
118
+ body: StatementNode[];
119
+ /** Terminator: ";;" | ";&" | ";;&" */
120
+ terminator: ";;" | ";&" | ";;&";
121
+ }
122
+ /** Subshell: ( ... ) */
123
+ export interface SubshellNode extends ASTNode {
124
+ type: "Subshell";
125
+ body: StatementNode[];
126
+ redirections: RedirectionNode[];
127
+ }
128
+ /** Command group: { ...; } */
129
+ export interface GroupNode extends ASTNode {
130
+ type: "Group";
131
+ body: StatementNode[];
132
+ redirections: RedirectionNode[];
133
+ }
134
+ /** Arithmetic command: (( expr )) */
135
+ export interface ArithmeticCommandNode extends ASTNode {
136
+ type: "ArithmeticCommand";
137
+ expression: ArithmeticExpressionNode;
138
+ redirections: RedirectionNode[];
139
+ }
140
+ /** Conditional command: [[ expr ]] */
141
+ export interface ConditionalCommandNode extends ASTNode {
142
+ type: "ConditionalCommand";
143
+ expression: ConditionalExpressionNode;
144
+ redirections: RedirectionNode[];
145
+ }
146
+ /** Function definition */
147
+ export interface FunctionDefNode extends ASTNode {
148
+ type: "FunctionDef";
149
+ name: string;
150
+ body: CompoundCommandNode;
151
+ redirections: RedirectionNode[];
152
+ }
153
+ /** Variable assignment: VAR=value or VAR+=value */
154
+ export interface AssignmentNode extends ASTNode {
155
+ type: "Assignment";
156
+ name: string;
157
+ value: WordNode | null;
158
+ /** Append mode: VAR+=value */
159
+ append: boolean;
160
+ /** Array assignment: VAR=(a b c) */
161
+ array: WordNode[] | null;
162
+ }
163
+ /** I/O redirection */
164
+ export interface RedirectionNode extends ASTNode {
165
+ type: "Redirection";
166
+ /** File descriptor (default depends on operator) */
167
+ fd: number | null;
168
+ operator: RedirectionOperator;
169
+ target: WordNode | HereDocNode;
170
+ }
171
+ export type RedirectionOperator = "<" | ">" | ">>" | ">&" | "<&" | "<>" | ">|" | "&>" | "&>>" | "<<<" | "<<" | "<<-";
172
+ /** Here document */
173
+ export interface HereDocNode extends ASTNode {
174
+ type: "HereDoc";
175
+ delimiter: string;
176
+ content: WordNode;
177
+ /** Strip leading tabs (<<- vs <<) */
178
+ stripTabs: boolean;
179
+ /** Quoted delimiter means no expansion */
180
+ quoted: boolean;
181
+ }
182
+ /**
183
+ * A Word is a sequence of parts that form a single shell word.
184
+ * After expansion, it may produce zero, one, or multiple strings.
185
+ */
186
+ export interface WordNode extends ASTNode {
187
+ type: "Word";
188
+ parts: WordPart[];
189
+ }
190
+ /** Parts that can make up a word */
191
+ export type WordPart = LiteralPart | SingleQuotedPart | DoubleQuotedPart | EscapedPart | ParameterExpansionPart | CommandSubstitutionPart | ArithmeticExpansionPart | ProcessSubstitutionPart | BraceExpansionPart | TildeExpansionPart | GlobPart;
192
+ /** Literal text (no special meaning) */
193
+ export interface LiteralPart extends ASTNode {
194
+ type: "Literal";
195
+ value: string;
196
+ }
197
+ /** Single-quoted string: 'literal' */
198
+ export interface SingleQuotedPart extends ASTNode {
199
+ type: "SingleQuoted";
200
+ value: string;
201
+ }
202
+ /** Double-quoted string: "with $expansion" */
203
+ export interface DoubleQuotedPart extends ASTNode {
204
+ type: "DoubleQuoted";
205
+ parts: WordPart[];
206
+ }
207
+ /** Escaped character: \x */
208
+ export interface EscapedPart extends ASTNode {
209
+ type: "Escaped";
210
+ value: string;
211
+ }
212
+ /** Parameter/variable expansion: $VAR or ${VAR...} */
213
+ export interface ParameterExpansionPart extends ASTNode {
214
+ type: "ParameterExpansion";
215
+ parameter: string;
216
+ /** Expansion operation */
217
+ operation: ParameterOperation | null;
218
+ }
219
+ export type ParameterOperation = DefaultValueOp | AssignDefaultOp | ErrorIfUnsetOp | UseAlternativeOp | LengthOp | LengthSliceErrorOp | SubstringOp | PatternRemovalOp | PatternReplacementOp | CaseModificationOp | TransformOp | IndirectionOp | ArrayKeysOp | VarNamePrefixOp;
220
+ /** ${#VAR:...} - invalid syntax, length cannot have substring */
221
+ export interface LengthSliceErrorOp {
222
+ type: "LengthSliceError";
223
+ }
224
+ /** ${VAR:-default} or ${VAR-default} */
225
+ export interface DefaultValueOp {
226
+ type: "DefaultValue";
227
+ word: WordNode;
228
+ checkEmpty: boolean;
229
+ }
230
+ /** ${VAR:=default} or ${VAR=default} */
231
+ export interface AssignDefaultOp {
232
+ type: "AssignDefault";
233
+ word: WordNode;
234
+ checkEmpty: boolean;
235
+ }
236
+ /** ${VAR:?error} or ${VAR?error} */
237
+ export interface ErrorIfUnsetOp {
238
+ type: "ErrorIfUnset";
239
+ word: WordNode | null;
240
+ checkEmpty: boolean;
241
+ }
242
+ /** ${VAR:+alternative} or ${VAR+alternative} */
243
+ export interface UseAlternativeOp {
244
+ type: "UseAlternative";
245
+ word: WordNode;
246
+ checkEmpty: boolean;
247
+ }
248
+ /** ${#VAR} */
249
+ export interface LengthOp {
250
+ type: "Length";
251
+ }
252
+ /** ${VAR:offset} or ${VAR:offset:length} */
253
+ export interface SubstringOp {
254
+ type: "Substring";
255
+ offset: ArithmeticExpressionNode;
256
+ length: ArithmeticExpressionNode | null;
257
+ }
258
+ /** ${VAR#pattern}, ${VAR##pattern}, ${VAR%pattern}, ${VAR%%pattern} */
259
+ export interface PatternRemovalOp {
260
+ type: "PatternRemoval";
261
+ pattern: WordNode;
262
+ /** "prefix" = # or ##, "suffix" = % or %% */
263
+ side: "prefix" | "suffix";
264
+ /** Greedy (## or %%) vs non-greedy (# or %) */
265
+ greedy: boolean;
266
+ }
267
+ /** ${VAR/pattern/replacement} or ${VAR//pattern/replacement} */
268
+ export interface PatternReplacementOp {
269
+ type: "PatternReplacement";
270
+ pattern: WordNode;
271
+ replacement: WordNode | null;
272
+ /** Replace all occurrences */
273
+ all: boolean;
274
+ /** Match at start (#) or end (%) only */
275
+ anchor: "start" | "end" | null;
276
+ }
277
+ /** ${VAR^}, ${VAR^^}, ${VAR,}, ${VAR,,} */
278
+ export interface CaseModificationOp {
279
+ type: "CaseModification";
280
+ /** "upper" = ^ or ^^, "lower" = , or ,, */
281
+ direction: "upper" | "lower";
282
+ /** Apply to all characters */
283
+ all: boolean;
284
+ pattern: WordNode | null;
285
+ }
286
+ /** ${var@Q}, ${var@P}, etc. - parameter transformation */
287
+ export interface TransformOp {
288
+ type: "Transform";
289
+ /** Q=quote, P=prompt, a=attributes, A=assignment, E=escape, K=keys */
290
+ operator: "Q" | "P" | "a" | "A" | "E" | "K";
291
+ }
292
+ /** ${!VAR} - indirect expansion */
293
+ export interface IndirectionOp {
294
+ type: "Indirection";
295
+ }
296
+ /** ${!arr[@]} or ${!arr[*]} - array keys/indices */
297
+ export interface ArrayKeysOp {
298
+ type: "ArrayKeys";
299
+ /** The array name (without subscript) */
300
+ array: string;
301
+ /** true if [*] was used instead of [@] */
302
+ star: boolean;
303
+ }
304
+ /** ${!prefix*} or ${!prefix@} - list variable names with prefix */
305
+ export interface VarNamePrefixOp {
306
+ type: "VarNamePrefix";
307
+ /** The prefix to match */
308
+ prefix: string;
309
+ /** true if * was used instead of @ */
310
+ star: boolean;
311
+ }
312
+ /** Command substitution: $(cmd) or `cmd` */
313
+ export interface CommandSubstitutionPart extends ASTNode {
314
+ type: "CommandSubstitution";
315
+ body: ScriptNode;
316
+ /** Legacy backtick syntax */
317
+ legacy: boolean;
318
+ }
319
+ /** Arithmetic expansion: $((expr)) */
320
+ export interface ArithmeticExpansionPart extends ASTNode {
321
+ type: "ArithmeticExpansion";
322
+ expression: ArithmeticExpressionNode;
323
+ }
324
+ /** Arithmetic expression (for $((...)) and ((...))) */
325
+ export interface ArithmeticExpressionNode extends ASTNode {
326
+ type: "ArithmeticExpression";
327
+ expression: ArithExpr;
328
+ }
329
+ export type ArithExpr = ArithNumberNode | ArithVariableNode | ArithBinaryNode | ArithUnaryNode | ArithTernaryNode | ArithAssignmentNode | ArithGroupNode | ArithNestedNode | ArithCommandSubstNode | ArithBracedExpansionNode | ArithArrayElementNode | ArithDynamicBaseNode | ArithDynamicNumberNode | ArithConcatNode | ArithDoubleSubscriptNode | ArithNumberSubscriptNode;
330
+ export interface ArithBracedExpansionNode extends ASTNode {
331
+ type: "ArithBracedExpansion";
332
+ content: string;
333
+ }
334
+ /** Dynamic base constant: ${base}#value where base is expanded at runtime */
335
+ export interface ArithDynamicBaseNode extends ASTNode {
336
+ type: "ArithDynamicBase";
337
+ baseExpr: string;
338
+ value: string;
339
+ }
340
+ /** Dynamic number prefix: ${zero}11 or ${zero}xAB for dynamic octal/hex */
341
+ export interface ArithDynamicNumberNode extends ASTNode {
342
+ type: "ArithDynamicNumber";
343
+ prefix: string;
344
+ suffix: string;
345
+ }
346
+ /** Concatenation of multiple parts forming a single numeric value */
347
+ export interface ArithConcatNode extends ASTNode {
348
+ type: "ArithConcat";
349
+ parts: ArithExpr[];
350
+ }
351
+ export interface ArithArrayElementNode extends ASTNode {
352
+ type: "ArithArrayElement";
353
+ array: string;
354
+ /** The index expression (for numeric indices) */
355
+ index?: ArithExpr;
356
+ /** For associative arrays: literal string key (e.g., 'key' or "key") */
357
+ stringKey?: string;
358
+ }
359
+ /** Invalid double subscript node (e.g., a[1][1]) - evaluated to error at runtime */
360
+ export interface ArithDoubleSubscriptNode extends ASTNode {
361
+ type: "ArithDoubleSubscript";
362
+ array: string;
363
+ index: ArithExpr;
364
+ }
365
+ /** Invalid number subscript node (e.g., 1[2]) - evaluated to error at runtime */
366
+ export interface ArithNumberSubscriptNode extends ASTNode {
367
+ type: "ArithNumberSubscript";
368
+ number: string;
369
+ errorToken: string;
370
+ }
371
+ export interface ArithNumberNode extends ASTNode {
372
+ type: "ArithNumber";
373
+ value: number;
374
+ }
375
+ export interface ArithVariableNode extends ASTNode {
376
+ type: "ArithVariable";
377
+ name: string;
378
+ }
379
+ export interface ArithBinaryNode extends ASTNode {
380
+ type: "ArithBinary";
381
+ operator: "+" | "-" | "*" | "/" | "%" | "**" | "<<" | ">>" | "<" | "<=" | ">" | ">=" | "==" | "!=" | "&" | "|" | "^" | "&&" | "||" | ",";
382
+ left: ArithExpr;
383
+ right: ArithExpr;
384
+ }
385
+ export interface ArithUnaryNode extends ASTNode {
386
+ type: "ArithUnary";
387
+ operator: "-" | "+" | "!" | "~" | "++" | "--";
388
+ operand: ArithExpr;
389
+ /** Prefix vs postfix for ++ and -- */
390
+ prefix: boolean;
391
+ }
392
+ export interface ArithTernaryNode extends ASTNode {
393
+ type: "ArithTernary";
394
+ condition: ArithExpr;
395
+ consequent: ArithExpr;
396
+ alternate: ArithExpr;
397
+ }
398
+ export type ArithAssignmentOperator = "=" | "+=" | "-=" | "*=" | "/=" | "%=" | "<<=" | ">>=" | "&=" | "|=" | "^=";
399
+ export interface ArithAssignmentNode extends ASTNode {
400
+ type: "ArithAssignment";
401
+ operator: ArithAssignmentOperator;
402
+ variable: string;
403
+ /** For array element assignment: the subscript expression */
404
+ subscript?: ArithExpr;
405
+ /** For associative arrays: literal string key (e.g., 'key' or "key") */
406
+ stringKey?: string;
407
+ value: ArithExpr;
408
+ }
409
+ export interface ArithGroupNode extends ASTNode {
410
+ type: "ArithGroup";
411
+ expression: ArithExpr;
412
+ }
413
+ /** Nested arithmetic expansion within arithmetic context: $((expr)) */
414
+ export interface ArithNestedNode extends ASTNode {
415
+ type: "ArithNested";
416
+ expression: ArithExpr;
417
+ }
418
+ /** Command substitution within arithmetic context: $(cmd) or `cmd` */
419
+ export interface ArithCommandSubstNode extends ASTNode {
420
+ type: "ArithCommandSubst";
421
+ command: string;
422
+ }
423
+ /** Process substitution: <(cmd) or >(cmd) */
424
+ export interface ProcessSubstitutionPart extends ASTNode {
425
+ type: "ProcessSubstitution";
426
+ body: ScriptNode;
427
+ direction: "input" | "output";
428
+ }
429
+ /** Brace expansion: {a,b,c} or {1..10} */
430
+ export interface BraceExpansionPart extends ASTNode {
431
+ type: "BraceExpansion";
432
+ items: BraceItem[];
433
+ }
434
+ export type BraceItem = {
435
+ type: "Word";
436
+ word: WordNode;
437
+ } | {
438
+ type: "Range";
439
+ start: string | number;
440
+ end: string | number;
441
+ step?: number;
442
+ startStr?: string;
443
+ endStr?: string;
444
+ };
445
+ /** Tilde expansion: ~ or ~user */
446
+ export interface TildeExpansionPart extends ASTNode {
447
+ type: "TildeExpansion";
448
+ user: string | null;
449
+ }
450
+ /** Glob pattern part (expanded during pathname expansion) */
451
+ export interface GlobPart extends ASTNode {
452
+ type: "Glob";
453
+ pattern: string;
454
+ }
455
+ export type ConditionalExpressionNode = CondBinaryNode | CondUnaryNode | CondNotNode | CondAndNode | CondOrNode | CondGroupNode | CondWordNode;
456
+ export type CondBinaryOperator = "=" | "==" | "!=" | "=~" | "<" | ">" | "-eq" | "-ne" | "-lt" | "-le" | "-gt" | "-ge" | "-nt" | "-ot" | "-ef";
457
+ export interface CondBinaryNode extends ASTNode {
458
+ type: "CondBinary";
459
+ operator: CondBinaryOperator;
460
+ left: WordNode;
461
+ right: WordNode;
462
+ }
463
+ export type CondUnaryOperator = "-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";
464
+ export interface CondUnaryNode extends ASTNode {
465
+ type: "CondUnary";
466
+ operator: CondUnaryOperator;
467
+ operand: WordNode;
468
+ }
469
+ export interface CondNotNode extends ASTNode {
470
+ type: "CondNot";
471
+ operand: ConditionalExpressionNode;
472
+ }
473
+ export interface CondAndNode extends ASTNode {
474
+ type: "CondAnd";
475
+ left: ConditionalExpressionNode;
476
+ right: ConditionalExpressionNode;
477
+ }
478
+ export interface CondOrNode extends ASTNode {
479
+ type: "CondOr";
480
+ left: ConditionalExpressionNode;
481
+ right: ConditionalExpressionNode;
482
+ }
483
+ export interface CondGroupNode extends ASTNode {
484
+ type: "CondGroup";
485
+ expression: ConditionalExpressionNode;
486
+ }
487
+ export interface CondWordNode extends ASTNode {
488
+ type: "CondWord";
489
+ word: WordNode;
490
+ }
491
+ export declare const AST: {
492
+ script(statements: StatementNode[]): ScriptNode;
493
+ statement(pipelines: PipelineNode[], operators?: ("&&" | "||" | ";")[], background?: boolean): StatementNode;
494
+ pipeline(commands: CommandNode[], negated?: boolean): PipelineNode;
495
+ simpleCommand(name: WordNode | null, args?: WordNode[], assignments?: AssignmentNode[], redirections?: RedirectionNode[]): SimpleCommandNode;
496
+ word(parts: WordPart[]): WordNode;
497
+ literal(value: string): LiteralPart;
498
+ singleQuoted(value: string): SingleQuotedPart;
499
+ doubleQuoted(parts: WordPart[]): DoubleQuotedPart;
500
+ escaped(value: string): EscapedPart;
501
+ parameterExpansion(parameter: string, operation?: ParameterOperation | null): ParameterExpansionPart;
502
+ commandSubstitution(body: ScriptNode, legacy?: boolean): CommandSubstitutionPart;
503
+ arithmeticExpansion(expression: ArithmeticExpressionNode): ArithmeticExpansionPart;
504
+ assignment(name: string, value: WordNode | null, append?: boolean, array?: WordNode[] | null): AssignmentNode;
505
+ redirection(operator: RedirectionOperator, target: WordNode | HereDocNode, fd?: number | null): RedirectionNode;
506
+ hereDoc(delimiter: string, content: WordNode, stripTabs?: boolean, quoted?: boolean): HereDocNode;
507
+ ifNode(clauses: IfClause[], elseBody?: StatementNode[] | null, redirections?: RedirectionNode[]): IfNode;
508
+ forNode(variable: string, words: WordNode[] | null, body: StatementNode[], redirections?: RedirectionNode[]): ForNode;
509
+ whileNode(condition: StatementNode[], body: StatementNode[], redirections?: RedirectionNode[]): WhileNode;
510
+ untilNode(condition: StatementNode[], body: StatementNode[], redirections?: RedirectionNode[]): UntilNode;
511
+ caseNode(word: WordNode, items: CaseItemNode[], redirections?: RedirectionNode[]): CaseNode;
512
+ caseItem(patterns: WordNode[], body: StatementNode[], terminator?: ";;" | ";&" | ";;&"): CaseItemNode;
513
+ subshell(body: StatementNode[], redirections?: RedirectionNode[]): SubshellNode;
514
+ group(body: StatementNode[], redirections?: RedirectionNode[]): GroupNode;
515
+ functionDef(name: string, body: CompoundCommandNode, redirections?: RedirectionNode[]): FunctionDefNode;
516
+ conditionalCommand(expression: ConditionalExpressionNode, redirections?: RedirectionNode[]): ConditionalCommandNode;
517
+ arithmeticCommand(expression: ArithmeticExpressionNode, redirections?: RedirectionNode[]): ArithmeticCommandNode;
518
+ };
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import{a as l,b as r}from"./chunk-GTNBSMZR.js";import"./chunk-5KNEBKYN.js";var d={name:"alias",summary:"define or display aliases",usage:"alias [name[=value] ...]",options:[" --help display this help and exit"]},o="BASH_ALIAS_",f={name:"alias",async execute(i,n){if(r(i))return l(d);if(i.length===0){let e="";for(let[a,t]of Object.entries(n.env))if(a.startsWith(o)){let s=a.slice(o.length);e+=`alias ${s}='${t}'
3
+ `}return{stdout:e,stderr:"",exitCode:0}}for(let e of i){let a=e.indexOf("=");if(a===-1){let t=o+e;return n.env[t]?{stdout:`alias ${e}='${n.env[t]}'
4
+ `,stderr:"",exitCode:0}:{stdout:"",stderr:`alias: ${e}: not found
5
+ `,exitCode:1}}else{let t=e.slice(0,a),s=e.slice(a+1);(s.startsWith("'")&&s.endsWith("'")||s.startsWith('"')&&s.endsWith('"'))&&(s=s.slice(1,-1)),n.env[o+t]=s}}return{stdout:"",stderr:"",exitCode:0}}},m={name:"unalias",async execute(i,n){if(r(i))return l({name:"unalias",summary:"remove alias definitions",usage:"unalias name [name ...]",options:["-a remove all aliases"," --help display this help and exit"]});if(i.length===0)return{stdout:"",stderr:`unalias: usage: unalias [-a] name [name ...]
6
+ `,exitCode:1};if(i[0]==="-a"){for(let t of Object.keys(n.env))t.startsWith(o)&&delete n.env[t];return{stdout:"",stderr:"",exitCode:0}}let e=!1,a="";for(let t of i){let s=o+t;n.env[s]?delete n.env[s]:(a+=`unalias: ${t}: not found
7
+ `,e=!0)}return{stdout:"",stderr:a,exitCode:e?1:0}}};export{f as aliasCommand,m as unaliasCommand};
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ import{i as I}from"./chunk-LV662IGP.js";import{a as W,b as A,c as R}from"./chunk-GTNBSMZR.js";import"./chunk-5KNEBKYN.js";function C(t,e,r){if(t.length<2)return e.RSTART=0,e.RLENGTH=-1,0;let i=String(r(t[0],e)),o=t[1].trim();o.startsWith("/")&&o.endsWith("/")&&(o=o.slice(1,-1));try{let n=new RegExp(o).exec(i);if(n)return e.RSTART=n.index+1,e.RLENGTH=n[0].length,e.RSTART}catch{}return e.RSTART=0,e.RLENGTH=-1,0}function O(t,e,r){if(t.length<3)return"";let i=String(r(t[0],e)),o=String(r(t[1],e)),f=String(r(t[2],e)),n=t.length>=4?String(r(t[3],e)):e.line;i.startsWith("/")&&i.endsWith("/")&&(i=i.slice(1,-1));try{let a=f.toLowerCase()==="g",s=a?0:parseInt(f,10)||1;if(a){let l=new RegExp(i,"g");return n.replace(l,(u,...d)=>T(o,u,d.slice(0,-2)))}else{let l=0,u=new RegExp(i,"g");return n.replace(u,(d,...c)=>(l++,l===s?T(o,d,c.slice(0,-2)):d))}}catch{return n}}function T(t,e,r){let i="",o=0;for(;o<t.length;)if(t[o]==="\\"&&o+1<t.length){let f=t[o+1];if(f==="&")i+="&",o+=2;else if(f==="0")i+=e,o+=2;else if(f>="1"&&f<="9"){let n=parseInt(f,10)-1;i+=r[n]||"",o+=2}else f==="n"?(i+=`
3
+ `,o+=2):f==="t"?(i+=" ",o+=2):(i+=f,o+=2)}else t[o]==="&"?(i+=e,o++):(i+=t[o],o++);return i}function B(t,e,r){return t.length===0?e.line.length:String(r(t[0],e)).length}function L(t,e,r){if(t.length<2)return"";let i=String(r(t[0],e)),o=Number(r(t[1],e))-1;if(t.length>=3){let f=Number(r(t[2],e));return i.substr(Math.max(0,o),f)}return i.substr(Math.max(0,o))}function G(t,e,r){if(t.length<2)return 0;let i=String(r(t[0],e)),o=String(r(t[1],e)),f=i.indexOf(o);return f===-1?0:f+1}function _(t,e,r){if(t.length<2)return 0;let i=String(r(t[0],e)),o=t[1].trim(),f=t.length>=3?String(r(t[2],e)):e.FS,n=i.split(f===" "?/\s+/:f);e.arrays[o]||(e.arrays[o]={}),e.arrays[o]={};for(let a=0;a<n.length;a++)e.arrays[o][String(a+1)]=n[a];return n.length}function P(t,e,r){if(t.length<2)return 0;let i=String(r(t[0],e)),o=String(r(t[1],e)),f=t.length>=3?t[2].trim():"$0",n;if(f==="$0")n=e.line;else if(f.startsWith("$")){let u=parseInt(f.slice(1),10)-1;n=e.fields[u]||""}else n=String(e.vars[f]??"");let a=new RegExp(i),s=n.replace(a,o),l=s!==n?1:0;if(f==="$0")e.line=s;else if(f.startsWith("$")){let u=parseInt(f.slice(1),10)-1;e.fields[u]=s}else e.vars[f]=s;return l}function V(t,e,r){if(t.length<2)return 0;let i=String(r(t[0],e)),o=String(r(t[1],e)),f=t.length>=3?t[2].trim():"$0",n;if(f==="$0")n=e.line;else if(f.startsWith("$")){let d=parseInt(f.slice(1),10)-1;n=e.fields[d]||""}else n=String(e.vars[f]??"");let a=new RegExp(i,"g"),s=n.match(a),l=s?s.length:0,u=n.replace(a,o);if(f==="$0")e.line=u;else if(f.startsWith("$")){let d=parseInt(f.slice(1),10)-1;e.fields[d]=u}else e.vars[f]=u;return l}function D(t,e,r){return t.length===0?"":String(r(t[0],e)).toLowerCase()}function H(t,e,r){return t.length===0?"":String(r(t[0],e)).toUpperCase()}function q(t,e,r){if(t.length===0)return"";let i=String(r(t[0],e)),o=t.slice(1),f=0,n="",a=0;for(;a<i.length;)if(i[a]==="%"&&a+1<i.length){let s=a+1;for(;s<i.length&&/[-+ #0]/.test(i[s]);)s++;for(;s<i.length&&/\d/.test(i[s]);)s++;if(i[s]===".")for(s++;s<i.length&&/\d/.test(i[s]);)s++;let l=i[s];if(l==="s"||l==="d"||l==="i"||l==="f"){let u=o[f]?r(o[f],e):"";n+=String(u),f++,a=s+1}else l==="%"?(n+="%",a=s+1):n+=i[a++]}else if(i[a]==="\\"&&a+1<i.length){let s=i[a+1];s==="n"?n+=`
4
+ `:s==="t"?n+=" ":s==="r"?n+="\r":n+=s,a+=2}else n+=i[a++];return n}function h(t,e){if(t=t.trim(),t.startsWith('"')&&t.endsWith('"'))return ee(t.slice(1,-1));let r=t.match(/^(\w+)\s*\((.*)\)$/);if(r){let s=r[1],l=r[2],u=x(l);switch(s){case"length":return B(u,e,h);case"substr":return L(u,e,h);case"index":return G(u,e,h);case"split":return _(u,e,h);case"sub":return P(u,e,h);case"gsub":return V(u,e,h);case"match":return C(u,e,h);case"gensub":return O(u,e,h);case"tolower":return D(u,e,h);case"toupper":return H(u,e,h);case"sprintf":return q(u,e,h);case"int":return Math.floor(Number(h(u[0]||"0",e)));case"sqrt":return Math.sqrt(Number(h(u[0]||"0",e)));case"sin":return Math.sin(Number(h(u[0]||"0",e)));case"cos":return Math.cos(Number(h(u[0]||"0",e)));case"log":return Math.log(Number(h(u[0]||"0",e)));case"exp":return Math.exp(Number(h(u[0]||"0",e)));case"atan2":{let d=Number(h(u[0]||"0",e)),c=Number(h(u[1]||"0",e));return Math.atan2(d,c)}case"rand":return e.random?e.random():Math.random();case"srand":{let d=u.length>0?Number(h(u[0],e)):Date.now();return e.vars._srand_seed=d,d}case"systime":case"mktime":case"strftime":throw new Error(`function '${s}()' is not implemented`);case"system":throw new Error("system() is not supported - shell execution not allowed in sandboxed environment");case"close":throw new Error("close() is not supported - file operations not allowed");case"fflush":throw new Error("fflush() is not supported - file operations not allowed");case"nextfile":throw new Error("nextfile is not supported - use 'next' instead")}if(e.functions?.[s])return ne(s,u,e)}let i=t.match(/^(\w+)\[(.+)\]$/);if(i){let s=i[1],l=i[2],u=String(h(l,e));return e.arrays[s]?e.arrays[s][u]??"":""}if(t.startsWith("$")){if(t.startsWith("$(")){let l=t.slice(2,-1),u=Number(h(l,e));return u===0?e.line:e.fields[u-1]||""}let s=t.match(/^\$(\d+)$/);if(s){let l=parseInt(s[1],10);return l===0?e.line:e.fields[l-1]||""}}if(t==="NR")return e.NR;if(t==="NF")return e.NF;if(t==="FNR")return e.FNR;if(t==="FS")return e.FS;if(t==="OFS")return e.OFS;if(t==="FILENAME")return e.FILENAME;if(t==="RSTART")return e.RSTART;if(t==="RLENGTH")return e.RLENGTH;if(e.vars[t]!==void 0)return e.vars[t];let o=t.match(/^(.+?)\s*\?\s*(.+?)\s*:\s*(.+)$/);if(o){let s=k(o[1].trim(),e);return h(s?o[2].trim():o[3].trim(),e)}let f=t.match(/^(.+?)\s*(\^|\*\*)\s*(.+)$/);if(f){let s=Number(h(f[1],e)),l=Number(h(f[3],e));return s**l}let n=t.match(/^(.+?)\s+([+\-*/%])\s+(.+)$/);if(n){let s=Number(h(n[1],e)),l=Number(h(n[3],e));switch(n[2]){case"+":return s+l;case"-":return s-l;case"*":return s*l;case"/":return l!==0?s/l:0;case"%":return s%l}}let a=t.match(/^([a-zA-Z_]\w*|\$\d+|\d+(?:\.\d+)?)\s*([+\-*/%])\s*(.+)$/);if(a){let s=Number(h(a[1],e)),l=Number(h(a[3],e));switch(a[2]){case"+":return s+l;case"-":return s-l;case"*":return s*l;case"/":return l!==0?s/l:0;case"%":return s%l}}return t.includes("$")||t.includes('"')?te(t,e):/^-?\d+(\.\d+)?$/.test(t)?parseFloat(t):/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)?"":t}function x(t){let e=[],r="",i=0,o=!1;for(let f=0;f<t.length;f++){let n=t[f];n==='"'&&t[f-1]!=="\\"?(o=!o,r+=n):!o&&n==="("?(i++,r+=n):!o&&n===")"?(i--,r+=n):!o&&n===","&&i===0?(e.push(r.trim()),r=""):r+=n}return r.trim()&&e.push(r.trim()),e}function ee(t){return t.replace(/\\n/g,`
5
+ `).replace(/\\t/g," ").replace(/\\r/g,"\r").replace(/\\\\/g,"\\")}function te(t,e){let r="",i=0;for(;i<t.length;){for(;i<t.length&&/\s/.test(t[i]);)i++;if(i>=t.length)break;if(t[i]==='"'){let o="";for(i++;i<t.length&&t[i]!=='"';)if(t[i]==="\\"&&i+1<t.length){let f=t[i+1];f==="n"?o+=`
6
+ `:f==="t"?o+=" ":f==="r"?o+="\r":o+=f,i+=2}else o+=t[i++];i++,r+=o}else if(t[i]==="$"){i++;let o="";for(;i<t.length&&/\d/.test(t[i]);)o+=t[i++];let f=parseInt(o,10);r+=f===0?e.line:e.fields[f-1]||""}else{let o="";for(;i<t.length&&!/[\s$"]/.test(t[i]);)o+=t[i++];o==="NR"?r+=e.NR:o==="NF"?r+=e.NF:e.vars[o]!==void 0?r+=e.vars[o]:r+=o}}return r}function k(t,e){if(t=t.trim(),t.includes("&&"))return U(t,"&&").every(l=>k(l,e));if(t.includes("||"))return U(t,"||").some(l=>k(l,e));if(t.startsWith("!"))return!k(t.slice(1).trim(),e);if(t.startsWith("(")&&t.endsWith(")"))return k(t.slice(1,-1),e);if(t.startsWith("/")&&t.endsWith("/"))return new RegExp(t.slice(1,-1)).test(e.line);let r=t.match(/^(.+)\s+in\s+(\w+)$/);if(r){let s=String(h(r[1].trim(),e)),l=r[2];return!!(e.arrays[l]&&e.arrays[l][s]!==void 0)}let i=t.match(/^NR\s*(==|!=|>|<|>=|<=)\s*(\d+)$/);if(i){let s=i[1],l=parseInt(i[2],10);return j(e.NR,s,l)}let o=t.match(/^\$(\d+)\s*~\s*\/([^/]+)\/$/);if(o){let s=parseInt(o[1],10),l=o[2],u=s===0?e.line:e.fields[s-1]||"";return new RegExp(l).test(u)}let f=t.match(/^\$(\d+)\s*!~\s*\/([^/]+)\/$/);if(f){let s=parseInt(f[1],10),l=f[2],u=s===0?e.line:e.fields[s-1]||"";return!new RegExp(l).test(u)}let n=t.match(/^(.+?)\s*(==|!=|>=|<=|>|<)\s*(.+)$/);if(n){let s=n[1].trim(),l=n[2],u=n[3].trim(),d=h(s,e),c=h(u,e);return j(d,l,c)}let a=h(t,e);return typeof a=="number"?a!==0:typeof a=="string"?a!=="":!!a}function U(t,e){let r=[],i="",o=0,f=!1;for(let n=0;n<t.length;n++){if(t[n]==='"'&&t[n-1]!=="\\"&&(f=!f),!f){if(t[n]==="(")o++;else if(t[n]===")")o--;else if(o===0&&t.slice(n,n+e.length)===e){r.push(i.trim()),i="",n+=e.length-1;continue}}i+=t[n]}return i.trim()&&r.push(i.trim()),r}function j(t,e,r){let i=typeof t=="number"?t:parseFloat(String(t)),o=typeof r=="number"?r:parseFloat(String(r));if(!Number.isNaN(i)&&!Number.isNaN(o))switch(e){case"==":return i===o;case"!=":return i!==o;case">":return i>o;case"<":return i<o;case">=":return i>=o;case"<=":return i<=o}else{let n=String(t),a=String(r);switch(e){case"==":return n===a;case"!=":return n!==a;case">":return n>a;case"<":return n<a;case">=":return n>=a;case"<=":return n<=a}}return!1}var X=100;function ne(t,e,r){let i=r.functions[t];if(!i)throw new Error(`awk: undefined function '${t}'`);let o="__func_depth__",f=r.vars[o]||0;if(f>=X)throw new Error(`awk: function '${t}' exceeded maximum recursion depth (${X})`);r.vars[o]=f+1;let n={};for(let s of i.params)n[s]=r.vars[s];for(let s=0;s<i.params.length;s++)s<e.length?r.vars[i.params[s]]=h(e[s],r):r.vars[i.params[s]]="";let a="";try{let s=i.body.match(/return\s+(.+)/);s&&(a=h(s[1].trim(),r))}finally{for(let s of i.params){let l=n[s];l!==void 0?r.vars[s]=l:delete r.vars[s]}r.vars[o]=f}return a}function z(t){let e={begin:null,main:[],end:null,functions:{}},r=t.trim(),i=/function\s+(\w+)\s*\(([^)]*)\)\s*\{/g;for(let n=i.exec(r);n!==null;n=i.exec(r)){let a=n[1],s=n[2],l=n.index,u=n.index+n[0].length-1,d=y(r,u);if(d!==-1){let c=s.split(",").map(g=>g.trim()).filter(g=>g.length>0),m=r.slice(u+1,d).trim();e.functions[a]={params:c,body:m},r=r.slice(0,l)+r.slice(d+1),r=r.trim(),i.lastIndex=0}}let o=r.match(/\bBEGIN\s*\{/);if(o&&o.index!==void 0){let n=o.index,a=r.slice(n+5).trim();if(a.startsWith("{")){let s=y(a,0);s!==-1&&(e.begin=a.slice(1,s).trim(),r=r.slice(0,n)+a.slice(s+1),r=r.trim())}}let f=r.match(/\bEND\s*\{/);if(f&&f.index!==void 0){let n=f.index,a=r.slice(n+3).trim();if(a.startsWith("{")){let s=y(a,0);s!==-1&&(e.end=a.slice(1,s).trim(),r=r.slice(0,n).trim())}}for(;r&&(r=r.trim(),!!r);){let n=!1;if(r.startsWith("{")){let a=y(r,0);a!==-1&&(e.main.push({pattern:null,action:r.slice(1,a).trim()}),r=r.slice(a+1).trim(),n=!0)}if(!n){let a=r.match(/^\/([^/]*)\/\s*,\s*\/([^/]*)\/\s*\{/);if(a){let s=r.indexOf("{"),l=y(r,s);l!==-1&&(e.main.push({pattern:null,range:{start:a[1],end:a[2]},action:r.slice(s+1,l).trim()}),r=r.slice(l+1).trim(),n=!0)}}if(!n){let a=r.match(/^\/([^/]*)\/\s*\{/);if(a){let s=r.indexOf("{"),l=y(r,s);l!==-1&&(e.main.push({pattern:a[1],action:r.slice(s+1,l).trim()}),r=r.slice(l+1).trim(),n=!0)}}if(!n){let a=r.match(/^\/([^/]*)\/\s*,\s*\/([^/]*)\//);a&&(e.main.push({pattern:null,range:{start:a[1],end:a[2]},action:"print"}),r=r.slice(a[0].length).trim(),n=!0)}if(!n){let a=r.match(/^\/([^/]*)\//);a&&(e.main.push({pattern:a[1],action:"print"}),r=r.slice(a[0].length).trim(),n=!0)}if(!n&&r.includes("{")){let a=r.indexOf("{"),s=y(r,a);s!==-1&&(e.main.push({pattern:r.slice(0,a).trim()||null,action:r.slice(a+1,s).trim()}),r=r.slice(s+1).trim(),n=!0)}n||(r.startsWith("print")||r.startsWith("printf")?(e.main.push({pattern:null,action:r}),r=""):(e.main.push({pattern:r,action:"print"}),r=""))}return e.main.length===0&&!e.begin&&!e.end&&e.main.push({pattern:null,action:"print"}),e}function y(t,e){if(t[e]!=="{")return-1;let r=1,i=!1,o="";for(let f=e+1;f<t.length;f++){let n=t[f],a=t[f-1];if(i)n===o&&a!=="\\"&&(i=!1);else if(n==='"'||n==="'")i=!0,o=n;else if(n==="{")r++;else if(n==="}"&&(r--,r===0))return f}return-1}var F=1e4;function v(t,e){let r="",i=re(t);for(let o of i)if(r+=M(o,e),e.shouldNext||e.shouldExit||e.loopBreak||e.loopContinue)break;return r}function re(t){let e=[],r="",i=0,o=0,f=!1;for(let n=0;n<t.length;n++){let a=t[n];if(a==='"'&&t[n-1]!=="\\"&&(f=!f),!f){if(a==="{")i++;else if(a==="}")i--;else if(a==="(")o++;else if(a===")")o--;else if((a===";"||a===`
7
+ `)&&i===0&&o===0){r.trim()&&e.push(r.trim()),r="";continue}}r+=a}return r.trim()&&e.push(r.trim()),e}function M(t,e){if(t=t.trim(),!t)return"";if(t.startsWith("if"))return ie(t,e);if(t.startsWith("while"))return se(t,e);if(t.startsWith("do"))return ae(t,e);if(t.startsWith("for"))return oe(t,e);if(t==="print"||t==="print $0")return`${e.line}
8
+ `;if(t.startsWith("print ")){let n=t.slice(6).trim();return`${le(n,e)}
9
+ `}if(t.startsWith("printf ")){let n=t.slice(7).trim();return fe(n,e)}if(t==="next")return e.shouldNext=!0,"";if(t==="exit"||t.startsWith("exit ")){if(e.shouldExit=!0,t.startsWith("exit ")){let n=t.slice(5).trim();e.exitCode=Number(h(n,e))||0}else e.exitCode=0;return""}if(t==="break")return e.loopBreak=!0,"";if(t==="continue")return e.loopContinue=!0,"";if(t==="getline"||t.startsWith("getline "))return ue(t,e);let r=t.match(/^delete\s+(\w+)\[(.+)\]$/);if(r){let n=r[1],a=r[2],s=String(h(a,e));return e.arrays[n]&&delete e.arrays[n][s],""}let i=t.match(/^(\w+)\[(.+)\]\s*=\s*(.+)$/);if(i){let n=i[1],a=i[2],s=i[3];e.arrays[n]||(e.arrays[n]={});let l=String(h(a,e)),u=h(s,e);return e.arrays[n][l]=u,""}if(t.match(/^(\w+)\+\+$/)){let n=t.slice(0,-2),a=Number(e.vars[n])||0;return e.vars[n]=a+1,""}if(t.match(/^(\w+)--$/)){let n=t.slice(0,-2),a=Number(e.vars[n])||0;return e.vars[n]=a-1,""}if(t.match(/^\+\+(\w+)$/)){let n=t.slice(2),a=Number(e.vars[n])||0;return e.vars[n]=a+1,""}if(t.match(/^--(\w+)$/)){let n=t.slice(2),a=Number(e.vars[n])||0;return e.vars[n]=a-1,""}let o=t.match(/^(\w+)\[(.+)\]\+\+$/);if(o){let n=o[1],a=o[2];e.arrays[n]||(e.arrays[n]={});let s=String(h(a,e)),l=Number(e.arrays[n][s])||0;return e.arrays[n][s]=l+1,""}if(t.includes("+=")){let n=t.indexOf("+="),a=t.slice(0,n).trim(),s=t.slice(n+2).trim(),l=Number(h(s,e))||0,u=a.match(/^(\w+)\[(.+)\]$/);if(u){let d=u[1],c=u[2];e.arrays[d]||(e.arrays[d]={});let m=String(h(c,e)),g=Number(e.arrays[d][m])||0;e.arrays[d][m]=g+l}else{let d=Number(e.vars[a])||0;e.vars[a]=d+l}return""}if(t.includes("-=")){let n=t.indexOf("-="),a=t.slice(0,n).trim(),s=t.slice(n+2).trim(),l=Number(e.vars[a])||0,u=Number(h(s,e))||0;return e.vars[a]=l-u,""}if(t.includes("*=")){let n=t.indexOf("*="),a=t.slice(0,n).trim(),s=t.slice(n+2).trim(),l=Number(e.vars[a])||0,u=Number(h(s,e))||0;return e.vars[a]=l*u,""}if(t.includes("/=")){let n=t.indexOf("/="),a=t.slice(0,n).trim(),s=t.slice(n+2).trim(),l=Number(e.vars[a])||0,u=Number(h(s,e))||0;return e.vars[a]=u!==0?l/u:0,""}if(t.includes("=")&&!t.includes("==")&&!t.includes("!=")&&!t.includes(">=")&&!t.includes("<=")){let n=t.indexOf("="),a=t.slice(0,n).trim(),s=t.slice(n+1).trim();return e.vars[a]=h(s,e),""}return t.match(/^(\w+)\s*\((.+)\)$/)&&h(t,e),""}function ie(t,e){let r=t.indexOf("(");if(r===-1)return"";let i=1,o=r+1;for(;o<t.length&&i>0;)t[o]==="("?i++:t[o]===")"&&i--,o++;o--;let f=t.slice(r+1,o).trim(),n=t.slice(o+1).trim(),a,s=null,l;if(n.startsWith("{")){let u=y(n,0);a=n.slice(1,u).trim(),l=n.slice(u+1).trim()}else{let u=n.indexOf(";");if(u!==-1)a=n.slice(0,u).trim(),l=n.slice(u+1).trim();else{let d=n.indexOf(" else ");d!==-1?(a=n.slice(0,d).trim(),l=n.slice(d+1).trim()):(a=n,l="")}}if(l.startsWith("else")){let u=l.slice(4).trim();if(u.startsWith("{")){let d=y(u,0);s=u.slice(1,d).trim()}else if(u.startsWith("if"))s=u;else{let d=u.indexOf(";");s=d!==-1?u.slice(0,d).trim():u}}return k(f,e)?v(a,e):s?v(s,e):""}function se(t,e){let r=t.indexOf("(");if(r===-1)return"";let i=1,o=r+1;for(;o<t.length&&i>0;)t[o]==="("?i++:t[o]===")"&&i--,o++;o--;let f=t.slice(r+1,o).trim(),n=t.slice(o+1).trim(),a;if(n.startsWith("{")){let d=y(n,0);a=n.slice(1,d).trim()}else a=n;let s="",l=0,u=e.maxIterations??F;for(;k(f,e);){if(l++,l>u)throw new I(`awk: while loop exceeded maximum iterations (${u})`,"iterations",s);if(e.loopContinue=!1,s+=v(a,e),e.loopBreak){e.loopBreak=!1;break}if(e.shouldExit||e.shouldNext)break}return s}function ae(t,e){if(!t.match(/^do\s*\{/))return"";let i=t.indexOf("{"),o=y(t,i);if(o===-1)return"";let f=t.slice(i+1,o).trim(),a=t.slice(o+1).trim().match(/^while\s*\((.+)\)\s*;?$/);if(!a)return"";let s=a[1].trim(),l="",u=0,d=e.maxIterations??F;do{if(u++,u>d)throw new I(`awk: do-while loop exceeded maximum iterations (${d})`,"iterations",l);if(e.loopContinue=!1,l+=v(f,e),e.loopBreak){e.loopBreak=!1;break}if(e.shouldExit||e.shouldNext)break}while(k(s,e));return l}function oe(t,e){let r=t.indexOf("(");if(r===-1)return"";let i=1,o=r+1;for(;o<t.length&&i>0;)t[o]==="("?i++:t[o]===")"&&i--,o++;o--;let f=t.slice(r+1,o).trim(),n=t.slice(o+1).trim(),a;if(n.startsWith("{")){let p=y(n,0);a=n.slice(1,p).trim()}else a=n;let s=f.match(/^(\w+)\s+in\s+(\w+)$/);if(s){let p=s[1],w=s[2],b="";if(e.arrays[w])for(let S of Object.keys(e.arrays[w])){if(e.vars[p]=S,e.loopContinue=!1,b+=v(a,e),e.loopBreak){e.loopBreak=!1;break}if(e.shouldExit||e.shouldNext)break}return b}let l=f.split(";").map(p=>p.trim());if(l.length!==3)return"";let[u,d,c]=l;u&&M(u,e);let m="",g=0,N=e.maxIterations??F;for(;!d||k(d,e);){if(g++,g>N)throw new I(`awk: for loop exceeded maximum iterations (${N})`,"iterations",m);if(e.loopContinue=!1,m+=v(a,e),e.loopBreak){e.loopBreak=!1;break}if(e.shouldExit||e.shouldNext)break;c&&M(c,e)}return m}function le(t,e){let r=[],i=Z(t);for(let o of i)r.push(String(h(o.trim(),e)));return r.join(e.OFS)}function Z(t){let e=[],r="",i=!1,o=0;for(let f=0;f<t.length;f++){let n=t[f];n==='"'&&t[f-1]!=="\\"?(i=!i,r+=n):n==="("&&!i?(o++,r+=n):n===")"&&!i?(o--,r+=n):n===","&&!i&&o===0?(e.push(r),r=""):r+=n}return r&&e.push(r),e}function fe(t,e){let r=t.match(/^"([^"]*)"(.*)$/);if(!r)return"";let i=r[1],o=r[2].trim(),f=o?Z(o.replace(/^,\s*/,"")):[],n=0,a="",s=0;for(;s<i.length;)if(i[s]==="%"&&s+1<i.length){let l=s+1,u="",d="";for(;l<i.length&&/[-+ #0]/.test(i[l]);)l++;for(;l<i.length&&/\d/.test(i[l]);)u+=i[l++];if(i[l]===".")for(l++;l<i.length&&/\d/.test(i[l]);)d+=i[l++];let c=i[l];if(c==="s"){let m=f[n]?String(h(f[n],e)):"";u&&(m=m.padStart(parseInt(u,10))),a+=m,n++,s=l+1}else if(c==="d"||c==="i"){let m=f[n]?Math.floor(Number(h(f[n],e))):0,g=String(m);u&&(g=g.padStart(parseInt(u,10))),a+=g,n++,s=l+1}else if(c==="f"){let m=f[n]?Number(h(f[n],e)):0,g=d?parseInt(d,10):6,N=m.toFixed(g);u&&(N=N.padStart(parseInt(u,10))),a+=N,n++,s=l+1}else if(c==="x"||c==="X"){let m=f[n]?Math.floor(Number(h(f[n],e))):0,g=Math.abs(m).toString(16);c==="X"&&(g=g.toUpperCase()),u&&(g=g.padStart(parseInt(u,10),"0")),a+=m<0?`-${g}`:g,n++,s=l+1}else if(c==="o"){let m=f[n]?Math.floor(Number(h(f[n],e))):0,g=Math.abs(m).toString(8);u&&(g=g.padStart(parseInt(u,10),"0")),a+=m<0?`-${g}`:g,n++,s=l+1}else if(c==="c"){let m=f[n]?h(f[n],e):"";typeof m=="number"?a+=String.fromCharCode(m):a+=String(m).charAt(0)||"",n++,s=l+1}else if(c==="e"||c==="E"){let m=f[n]?Number(h(f[n],e)):0,g=d?parseInt(d,10):6,N=m.toExponential(g);c==="E"&&(N=N.toUpperCase()),u&&(N=N.padStart(parseInt(u,10))),a+=N,n++,s=l+1}else if(c==="g"||c==="G"){let m=f[n]?Number(h(f[n],e)):0,g=d?parseInt(d,10):6,N=Math.floor(Math.log10(Math.abs(m))),p;m===0?p="0":N<-4||N>=g?(p=m.toExponential(g-1),c==="G"&&(p=p.toUpperCase())):p=m.toPrecision(g),p=p.replace(/\.?0+$/,"").replace(/\.?0+e/,"e"),u&&(p=p.padStart(parseInt(u,10))),a+=p,n++,s=l+1}else c==="%"?(a+="%",s=l+1):a+=i[s++]}else if(i[s]==="\\"&&s+1<i.length){let l=i[s+1];l==="n"?a+=`
10
+ `:l==="t"?a+=" ":l==="r"?a+="\r":a+=l,s+=2}else a+=i[s++];return a}function ue(t,e){if(!e.lines||e.lineIndex===void 0)return"";let r=e.lineIndex+1;if(r>=e.lines.length)return"";let i=e.lines[r];if(t==="getline")e.line=i,e.fields=e.fieldSep?i.split(e.fieldSep):i.split(/\s+/),e.NF=e.fields.length,e.NR++,e.lineIndex=r;else{let o=t.slice(8).trim();o&&!o.startsWith("<")&&(e.vars[o]=i,e.NR++,e.lineIndex=r)}return""}function K(t,e){if(t===null)return!0;if(t.startsWith("/")&&t.endsWith("/"))return new RegExp(t.slice(1,-1)).test(e.line);if(/^(NR|NF|\$\d+)\s*(==|!=|>|<|>=|<=|~)/.test(t)||/\s*(==|!=|>|<|>=|<=)\s*/.test(t))return k(t,e);try{return new RegExp(t).test(e.line)}catch{return k(t,e)}}var ce={name:"awk",summary:"pattern scanning and text processing language",usage:"awk [OPTIONS] 'PROGRAM' [FILE...]",options:["-F FS use FS as field separator","-v VAR=VAL assign VAL to variable VAR"," --help display this help and exit"]},ve={name:"awk",async execute(t,e){if(A(t))return W(ce);let r=/\s+/,i=" ",o={},f=0;for(let p=0;p<t.length;p++){let w=t[p];if(w==="-F"&&p+1<t.length)i=Q(t[++p]),r=J(i),f=p+1;else if(w.startsWith("-F"))i=Q(w.slice(2)),r=J(i),f=p+1;else if(w==="-v"&&p+1<t.length){let b=t[++p],S=b.indexOf("=");if(S>0){let $=b.slice(0,S),E=b.slice(S+1);o[$]=E}f=p+1}else{if(w.startsWith("--"))return R("awk",w);if(w.startsWith("-")&&w.length>1){let b=w[1];if(b!=="F"&&b!=="v")return R("awk",`-${b}`);f=p+1}else if(!w.startsWith("-")){f=p;break}}}if(f>=t.length)return{stdout:"",stderr:`awk: missing program
11
+ `,exitCode:1};let n=t[f],a=t.slice(f+1),{begin:s,main:l,end:u,functions:d}=z(n),c={FS:i,OFS:" ",NR:0,NF:0,FNR:0,FILENAME:"",RSTART:0,RLENGTH:-1,fields:[],line:"",vars:o,arrays:{},functions:d||{},fieldSep:r,maxIterations:e.limits?.maxAwkIterations},m="";if(s&&(m+=v(s,c),c.shouldExit))return{stdout:m,stderr:"",exitCode:c.exitCode||0};let g=[];if(a.length>0)for(let p of a)try{let w=e.fs.resolvePath(e.cwd,p),S=(await e.fs.readFile(w)).split(`
12
+ `);S.length>0&&S[S.length-1]===""&&S.pop(),g.push({filename:p,lines:S})}catch{return{stdout:"",stderr:`awk: ${p}: No such file or directory
13
+ `,exitCode:1}}else{let p=e.stdin.split(`
14
+ `);p.length>0&&p[p.length-1]===""&&p.pop(),g.push({filename:"",lines:p})}let N=l.map(()=>!1);for(let p of g){for(c.FILENAME=p.filename,c.FNR=0,c.lines=p.lines,c.lineIndex=-1;c.lineIndex<p.lines.length-1;){c.lineIndex++;let w=p.lines[c.lineIndex];c.NR++,c.FNR++,c.line=w,c.fields=w.split(r),c.NF=c.fields.length,c.shouldNext=!1;for(let b=0;b<l.length&&!(c.shouldExit||c.shouldNext);b++){let S=l[b];if(S.range){let $=new RegExp(S.range.start),E=new RegExp(S.range.end);N[b]?(m+=v(S.action,c),E.test(w)&&(N[b]=!1)):$.test(w)&&(N[b]=!0,m+=v(S.action,c),E.test(w)&&(N[b]=!1))}else K(S.pattern,c)&&(m+=v(S.action,c))}if(c.shouldExit)break}if(c.shouldExit)break}return u&&!c.shouldExit&&(m+=v(u,c)),{stdout:m,stderr:"",exitCode:c.exitCode||0}}};function Q(t){return t.replace(/\\t/g," ").replace(/\\n/g,`
15
+ `).replace(/\\r/g,"\r").replace(/\\\\/g,"\\")}function J(t){if(t===" ")return/\s+/;if(/[[\](){}.*+?^$|\\]/.test(t))try{return new RegExp(t)}catch{return new RegExp(Y(t))}return new RegExp(Y(t))}function Y(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}export{ve as awkCommand};
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import{b as p}from"./chunk-J7MJV6WO.js";import{a as l}from"./chunk-TA7RUHGQ.js";import{a as c,b as i}from"./chunk-GTNBSMZR.js";import"./chunk-5KNEBKYN.js";var b={name:"base64",summary:"base64 encode/decode data and print to standard output",usage:"base64 [OPTION]... [FILE]",options:["-d, --decode decode data","-w, --wrap=COLS wrap encoded lines after COLS character (default 76, 0 to disable)"," --help display this help and exit"]},g={decode:{short:"d",long:"decode",type:"boolean"},wrap:{short:"w",long:"wrap",type:"number",default:76}},x={name:"base64",async execute(d,u){if(i(d))return c(b);let e=l("base64",d,g);if(!e.ok)return e.error;let f=e.result.flags.decode,s=e.result.flags.wrap,m=e.result.positional,a=await p(u,m,{cmdName:"base64"});if(!a.ok)return a.error;let n=a.content;try{if(f){let r=n.replace(/\s/g,"");return{stdout:Buffer.from(r,"base64").toString("utf-8"),stderr:"",exitCode:0}}let t=Buffer.from(n).toString("base64");if(s>0){let r=[];for(let o=0;o<t.length;o+=s)r.push(t.slice(o,o+s));t=r.join(`
3
+ `)+(t.length>0?`
4
+ `:"")}return{stdout:t,stderr:"",exitCode:0}}catch{return{stdout:"",stderr:`base64: invalid input
5
+ `,exitCode:1}}}};export{x as base64Command};
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import{a as r,b as m}from"./chunk-GTNBSMZR.js";import"./chunk-5KNEBKYN.js";var p={name:"basename",summary:"strip directory and suffix from filenames",usage:`basename NAME [SUFFIX]
3
+ basename OPTION... NAME...`,options:["-a, --multiple support multiple arguments","-s, --suffix=SUFFIX remove a trailing SUFFIX"," --help display this help and exit"]},c={name:"basename",async execute(n,u){if(m(n))return r(p);let i=!1,s="",a=[];for(let t=0;t<n.length;t++){let e=n[t];e==="-a"||e==="--multiple"?i=!0:e==="-s"&&t+1<n.length?(s=n[++t],i=!0):e.startsWith("--suffix=")?(s=e.slice(9),i=!0):e.startsWith("-")||a.push(e)}if(a.length===0)return{stdout:"",stderr:`basename: missing operand
4
+ `,exitCode:1};!i&&a.length>=2&&(s=a.pop()??"");let o=[];for(let t of a){let e=t.replace(/\/+$/,""),l=e.split("/").pop()||e;s&&l.endsWith(s)&&(l=l.slice(0,-s.length)),o.push(l)}return{stdout:`${o.join(`
5
+ `)}
6
+ `,stderr:"",exitCode:0}}};export{c as basenameCommand};
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import{a as l,b as u}from"./chunk-GTNBSMZR.js";import"./chunk-5KNEBKYN.js";var m={name:"bash",summary:"execute shell commands or scripts",usage:"bash [OPTIONS] [SCRIPT_FILE] [ARGUMENTS...]",options:["-c COMMAND execute COMMAND string"," --help display this help and exit"],notes:["Without -c, reads and executes commands from SCRIPT_FILE.","Arguments are passed as $1, $2, etc. to the script.",'$0 is set to the script name (or "bash" with -c).']},b={name:"bash",async execute(t,e){if(u(t))return l(m);if(t[0]==="-c"&&t.length>=2){let o=t[1],s=t[2]||"bash",i=t.slice(3);return h(o,s,i,e)}if(t.length===0)return{stdout:"",stderr:"",exitCode:0};let n=t[0],r=t.slice(1);try{let o=e.fs.resolvePath(e.cwd,n),s=await e.fs.readFile(o);return h(s,n,r,e)}catch{return{stdout:"",stderr:`bash: ${n}: No such file or directory
3
+ `,exitCode:127}}}},x={name:"sh",async execute(t,e){if(u(t))return l({...m,name:"sh",summary:"execute shell commands or scripts (POSIX shell)"});if(t[0]==="-c"&&t.length>=2){let o=t[1],s=t[2]||"sh",i=t.slice(3);return h(o,s,i,e)}if(t.length===0)return{stdout:"",stderr:"",exitCode:0};let n=t[0],r=t.slice(1);try{let o=e.fs.resolvePath(e.cwd,n),s=await e.fs.readFile(o);return h(s,n,r,e)}catch{return{stdout:"",stderr:`sh: ${n}: No such file or directory
4
+ `,exitCode:127}}}};async function h(t,e,n,r){if(!r.exec)return{stdout:"",stderr:`bash: internal error: exec function not available
5
+ `,exitCode:1};let o={0:e,"#":String(n.length),"@":n.join(" "),"*":n.join(" ")};n.forEach((c,a)=>{o[String(a+1)]=c});let s=t;if(s.startsWith("#!")){let c=s.indexOf(`
6
+ `);c!==-1&&(s=s.slice(c+1))}let i=s.split(`
7
+ `),d=[];for(let c of i){let a=c.trim();a&&!a.startsWith("#")&&d.push(a)}let f=d.join("; ");return await r.exec(f,{env:o})}export{b as bashCommand,x as shCommand};
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import{a as p}from"./chunk-J7MJV6WO.js";import{a as d}from"./chunk-TA7RUHGQ.js";import{a as c,b as m}from"./chunk-GTNBSMZR.js";import"./chunk-5KNEBKYN.js";var f={name:"cat",summary:"concatenate files and print on the standard output",usage:"cat [OPTION]... [FILE]...",options:["-n, --number number all output lines"," --help display this help and exit"]},b={number:{short:"n",long:"number",type:"boolean"}},w={name:"cat",async execute(t,r){if(m(t))return c(f);let e=d("cat",t,b);if(!e.ok)return e.error;let s=e.result.flags.number,o=e.result.positional,a=await p(r,o,{cmdName:"cat",allowStdinMarker:!0,stopOnError:!1}),n="",i=1;for(let{content:l}of a.files)if(s){let u=h(l,i);n+=u.content,i=u.nextLineNumber}else n+=l;return{stdout:n,stderr:a.stderr,exitCode:a.exitCode}}};function h(t,r){let e=t.split(`
3
+ `),s=t.endsWith(`
4
+ `),o=s?e.slice(0,-1):e;return{content:o.map((n,i)=>`${String(r+i).padStart(6," ")} ${n}`).join(`
5
+ `)+(s?`
6
+ `:""),nextLineNumber:r+o.length}}export{w as catCommand};
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import{a as h,b as m}from"./chunk-GTNBSMZR.js";import"./chunk-5KNEBKYN.js";var v={name:"chmod",summary:"change file mode bits",usage:"chmod [OPTIONS] MODE FILE...",options:["-R change files recursively","-v output a diagnostic for every file processed"," --help display this help and exit"]},C={name:"chmod",async execute(o,s){if(m(o))return h(v);if(o.length<2)return{stdout:"",stderr:`chmod: missing operand
3
+ `,exitCode:1};let r=!1,n=!1,e=0;for(;e<o.length&&o[e].startsWith("-");){let t=o[e];if(t==="-R"||t==="--recursive")r=!0,e++;else if(t==="-v"||t==="--verbose")n=!0,e++;else if(t==="--"){e++;break}else{if(/^[+-]?[rwxugo]+/.test(t)||/^\d+$/.test(t))break;if(/^-[Rv]+$/.test(t)){t.includes("R")&&(r=!0),t.includes("v")&&(n=!0),e++;continue}return{stdout:"",stderr:`chmod: invalid option -- '${t.slice(1)}'
4
+ `,exitCode:1}}}if(o.length-e<2)return{stdout:"",stderr:`chmod: missing operand
5
+ `,exitCode:1};let a=o[e],f=o.slice(e+1),i;try{i=$(a)}catch{return{stdout:"",stderr:`chmod: invalid mode: '${a}'
6
+ `,exitCode:1}}let c="",d="",l=!1;for(let t of f){let u=s.fs.resolvePath(s.cwd,t);try{if(await s.fs.chmod(u,i),n&&(c+=`mode of '${t}' changed to ${i.toString(8).padStart(4,"0")}
7
+ `),r&&(await s.fs.stat(u)).isDirectory){let w=await p(s,u,i,n);c+=w}}catch{d+=`chmod: cannot access '${t}': No such file or directory
8
+ `,l=!0}}return{stdout:c,stderr:d,exitCode:l?1:0}}};async function p(o,s,r,n){let e="",a=await o.fs.readdir(s);for(let f of a){let i=s==="/"?`/${f}`:`${s}/${f}`;await o.fs.chmod(i,r),n&&(e+=`mode of '${i}' changed to ${r.toString(8).padStart(4,"0")}
9
+ `),(await o.fs.stat(i)).isDirectory&&(e+=await p(o,i,r,n))}return e}function $(o){if(/^[0-7]+$/.test(o))return parseInt(o,8);let s=420,r=o.split(",");for(let n of r){let e=n.match(/^([ugoa]*)([+\-=])([rwxXst]*)$/);if(!e)throw new Error(`Invalid mode: ${o}`);let a=e[1]||"a",f=e[2],i=e[3];(a==="a"||a==="")&&(a="ugo");let c=0;i.includes("r")&&(c|=4),i.includes("w")&&(c|=2),(i.includes("x")||i.includes("X"))&&(c|=1);for(let d of a){let l=0;d==="u"?l=6:d==="g"?l=3:d==="o"&&(l=0);let t=c<<l;f==="+"?s|=t:f==="-"?s&=~t:f==="="&&(s&=~(7<<l),s|=t)}}return s}export{C as chmodCommand};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ var c=new Map;function f(l,o,t){let s=typeof t=="boolean"?{ignoreCase:t}:t??{},e=o;s.stripQuotes&&(e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"))&&(e=e.slice(1,-1));let i=s.ignoreCase?`i:${e}`:e,n=c.get(i);return n||(n=g(e,s.ignoreCase),c.set(i,n)),n.test(l)}function g(l,o){let t="^";for(let s=0;s<l.length;s++){let e=l[s];if(e==="*")t+=".*";else if(e==="?")t+=".";else if(e==="["){let i=s+1;for(;i<l.length&&l[i]!=="]";)i++;t+=l.slice(s,i+1),s=i}else e==="."||e==="+"||e==="^"||e==="$"||e==="{"||e==="}"||e==="("||e===")"||e==="|"||e==="\\"?t+=`\\${e}`:t+=e}return t+="$",new RegExp(t,o?"i":"")}export{f as a};