just-bash 3.0.1 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/CHANGELOG.md +123 -0
  2. package/README.md +11 -0
  3. package/dist/AGENTS.md +2 -0
  4. package/dist/bin/chunks/{awk2-RLMNTGI7.js → awk2-UFCNQFCV.js} +1 -1
  5. package/dist/bin/{shell/chunks/base64-RZRLGMB3.js → chunks/base64-EGKVQIBC.js} +1 -1
  6. package/dist/bin/{shell/chunks/bash-CLP24TE2.js → chunks/bash-BEG4JB7K.js} +1 -1
  7. package/dist/bin/{shell/chunks/cat-LQH5FSAR.js → chunks/cat-NBL6MU5H.js} +1 -1
  8. package/dist/bin/chunks/{chunk-KFMPGSUT.js → chunk-2ZAK22BG.js} +1 -1
  9. package/dist/bin/chunks/chunk-4BNS566Q.js +4 -0
  10. package/dist/bin/chunks/chunk-4J4UC7OD.js +17 -0
  11. package/dist/bin/{shell/chunks/chunk-IEXQTXU5.js → chunks/chunk-52FZYTIX.js} +4 -4
  12. package/dist/bin/{shell/chunks/chunk-EDTBGO7F.js → chunks/chunk-5KX5YUWT.js} +1 -1
  13. package/dist/bin/chunks/{chunk-XFFUAO3F.js → chunk-6FYCU7QB.js} +1 -1
  14. package/dist/bin/chunks/{chunk-PAYQNSZN.js → chunk-6JKLDBRW.js} +1 -1
  15. package/dist/bin/chunks/{chunk-22HCD466.js → chunk-7HK63L6Y.js} +1 -1
  16. package/dist/bin/chunks/chunk-7NDRU2ZN.js +5 -0
  17. package/dist/bin/{shell/chunks/chunk-IZGLHVBB.js → chunks/chunk-AFAD5U2A.js} +1 -1
  18. package/dist/bin/chunks/{chunk-LNNWMRCB.js → chunk-AZH64XMJ.js} +1 -1
  19. package/dist/bin/chunks/{chunk-6FSBHK6H.js → chunk-C6JOQKE2.js} +1 -1
  20. package/dist/bin/{shell/chunks/chunk-77MLOOQS.js → chunks/chunk-CX5CEEGI.js} +1 -1
  21. package/dist/bin/chunks/{chunk-NXVG64T3.js → chunk-D7YFPDMV.js} +1 -1
  22. package/dist/bin/chunks/chunk-DHIKZU63.js +3 -0
  23. package/dist/bin/chunks/{chunk-UR4CEP4Y.js → chunk-DWECIBLJ.js} +1 -1
  24. package/dist/bin/chunks/{chunk-C7ISPH7Y.js → chunk-FEENTUVZ.js} +1 -1
  25. package/dist/bin/chunks/{chunk-FVRXEJYQ.js → chunk-FJABJBIW.js} +2 -2
  26. package/dist/bin/chunks/{chunk-YOKQNNQO.js → chunk-FYCT4DWY.js} +1 -1
  27. package/dist/bin/chunks/{chunk-J7TUF2VI.js → chunk-G7ZWT7BT.js} +1 -1
  28. package/dist/bin/chunks/{chunk-XJ37N3S5.js → chunk-GTO74SFS.js} +1 -1
  29. package/dist/bin/{shell/chunks/chunk-L24QXM5S.js → chunks/chunk-GXX3QUMM.js} +1 -1
  30. package/dist/bin/chunks/chunk-HMCRB24D.js +15 -0
  31. package/dist/bin/chunks/{chunk-FKVQZWJQ.js → chunk-HWNCK5BB.js} +1 -1
  32. package/dist/bin/chunks/{chunk-V2RP73X4.js → chunk-IX7LKVVH.js} +1 -1
  33. package/dist/bin/{shell/chunks/chunk-JZW7NFK2.js → chunks/chunk-J7XTZ47D.js} +1 -1
  34. package/dist/bin/chunks/{chunk-3BYTCO2H.js → chunk-JDFKEXLG.js} +1 -1
  35. package/dist/bin/{shell/chunks/chunk-HN2DCT7T.js → chunks/chunk-JJC4ENJL.js} +1 -1
  36. package/dist/bin/{shell/chunks/chunk-F3WNDKOC.js → chunks/chunk-JSZBZ2XU.js} +1 -1
  37. package/dist/bin/{shell/chunks/chunk-UO5LOD7U.js → chunks/chunk-KMZUSEWI.js} +1 -1
  38. package/dist/bin/{shell/chunks/chunk-OPMLWMNH.js → chunks/chunk-KWCO3YXP.js} +1 -1
  39. package/dist/bin/{shell/chunks/chunk-LSQTB2QK.js → chunks/chunk-LMA4D2KK.js} +1 -1
  40. package/dist/bin/{shell/chunks/chunk-HL4ZS7TX.js → chunks/chunk-LX2H4DPL.js} +3 -3
  41. package/dist/bin/chunks/{chunk-X4MX6EHF.js → chunk-MP77TJMM.js} +1 -1
  42. package/dist/bin/{shell/chunks/chunk-F3GKANW3.js → chunks/chunk-MTK7VLZG.js} +1 -1
  43. package/dist/bin/chunks/chunk-N3FQJLPZ.js +17 -0
  44. package/dist/bin/{shell/chunks/chunk-2SVX7I5P.js → chunks/chunk-NMMVECGD.js} +1 -1
  45. package/dist/bin/chunks/{chunk-LAHBP3FW.js → chunk-NXYVRP6D.js} +1 -1
  46. package/dist/bin/chunks/{chunk-7UU7KPEM.js → chunk-OVVMB2JI.js} +1 -1
  47. package/dist/bin/chunks/{chunk-YY5PJR7O.js → chunk-OXZSG3ZZ.js} +1 -1
  48. package/dist/bin/{shell/chunks/chunk-CAZ75E7E.js → chunks/chunk-PKE7GKU5.js} +1 -1
  49. package/dist/bin/{shell/chunks/chunk-7AYT3UKI.js → chunks/chunk-PSJORJRS.js} +1 -1
  50. package/dist/bin/chunks/{chunk-7NC4CPHS.js → chunk-R36DS2UF.js} +1 -1
  51. package/dist/bin/chunks/{chunk-2NRAWO6E.js → chunk-RKBWTGBZ.js} +1 -1
  52. package/dist/bin/{shell/chunks/chunk-LC6D27QJ.js → chunks/chunk-RVGYO2OU.js} +1 -1
  53. package/dist/bin/chunks/{chunk-SMSELHIY.js → chunk-SF2OLINE.js} +1 -1
  54. package/dist/bin/{shell/chunks/chunk-M65CQLJE.js → chunks/chunk-TIRU5FOD.js} +1 -1
  55. package/dist/bin/chunks/{chunk-BE4PARL3.js → chunk-TKYWUEON.js} +1 -1
  56. package/dist/bin/chunks/chunk-TYBXHT6W.js +10 -0
  57. package/dist/bin/chunks/chunk-UI7CV277.js +20 -0
  58. package/dist/bin/chunks/{chunk-KRRM5UCC.js → chunk-UNWZQG7U.js} +1 -1
  59. package/dist/bin/{shell/chunks/chunk-4KSZJAQK.js → chunks/chunk-W5OBQVJ2.js} +1 -1
  60. package/dist/bin/chunks/{chunk-JNUX75OX.js → chunk-WHUKZ3K3.js} +1 -1
  61. package/dist/bin/chunks/chunk-Y2IUEWQD.js +11 -0
  62. package/dist/bin/chunks/chunk-Y5OWCEDV.js +64 -0
  63. package/dist/bin/chunks/{chunk-H7JTIXAO.js → chunk-ZZP3RSWL.js} +1 -1
  64. package/dist/bin/chunks/{column-AQB3A3PJ.js → column-QLGOK3XM.js} +1 -1
  65. package/dist/bin/{shell/chunks/comm-Q4VDF6ZO.js → chunks/comm-PLYUTVP3.js} +1 -1
  66. package/dist/bin/chunks/curl-DCSPNPEW.js +27 -0
  67. package/dist/bin/chunks/{cut-ZI2HIAW7.js → cut-JNQTCQY7.js} +1 -1
  68. package/dist/bin/chunks/date-OFYBOAUE.js +3 -0
  69. package/dist/bin/{shell/chunks/diff-YDJ42RKS.js → chunks/diff-LZ4WRLIF.js} +1 -1
  70. package/dist/bin/chunks/{env-NY32PQJM.js → env-FNVYNLGB.js} +1 -1
  71. package/dist/bin/{shell/chunks/expand-YYSO35NS.js → chunks/expand-CB7FG7LQ.js} +1 -1
  72. package/dist/bin/{shell/chunks/expr-7PLWSWZI.js → chunks/expr-6A2XZORA.js} +1 -1
  73. package/dist/bin/chunks/{find-P4DOE7CE.js → find-5OZWMYCV.js} +1 -1
  74. package/dist/bin/chunks/flag-coverage-H6NG6ZQL.js +3 -0
  75. package/dist/bin/{shell/chunks/fold-5MF7QZWQ.js → chunks/fold-7YEITA5L.js} +1 -1
  76. package/dist/bin/chunks/{grep-VAYCFO4O.js → grep-KKBXRB73.js} +1 -1
  77. package/dist/bin/chunks/{gzip-UGBQQKIH.js → gzip-ZJP5VIAQ.js} +1 -1
  78. package/dist/bin/chunks/{head-QNC2ZYDO.js → head-B6GFQHKF.js} +1 -1
  79. package/dist/bin/{shell/chunks/html-to-markdown-QEFY7XQR.js → chunks/html-to-markdown-3HJ7L7NL.js} +1 -1
  80. package/dist/bin/chunks/{join-EJ73DYTK.js → join-WRM6S6CO.js} +1 -1
  81. package/dist/bin/chunks/{jq-GGTKKMEN.js → jq-33GJJXTL.js} +1 -1
  82. package/dist/bin/chunks/{js-exec-BC6NI55L.js → js-exec-F7JAZ4ZQ.js} +1 -1
  83. package/dist/bin/chunks/js-exec-worker.js +214 -17
  84. package/dist/bin/chunks/{md5sum-MCVDIB35.js → md5sum-ZNYCDRQL.js} +1 -1
  85. package/dist/bin/{shell/chunks/nl-KUPLVCTS.js → chunks/nl-6TVYE4ZB.js} +1 -1
  86. package/dist/bin/{shell/chunks/od-YQ5ZUI2H.js → chunks/od-Y3E3QXOL.js} +1 -1
  87. package/dist/bin/{shell/chunks/paste-A5KKPWXX.js → chunks/paste-LYNFXXCM.js} +1 -1
  88. package/dist/bin/chunks/printf-MR3FXCDE.js +3 -0
  89. package/dist/bin/{shell/chunks/python3-BQWDPUBM.js → chunks/python3-R5OFWJIH.js} +1 -1
  90. package/dist/bin/{shell/chunks/rev-PYHOZ4D4.js → chunks/rev-AJECDD4L.js} +1 -1
  91. package/dist/bin/chunks/{rg-BGFMSIVK.js → rg-2YWJS6TE.js} +1 -1
  92. package/dist/bin/chunks/{sed-FWA634SN.js → sed-IGRH7EGG.js} +1 -1
  93. package/dist/bin/chunks/{sha1sum-4KF52U3Y.js → sha1sum-5QZSNFY3.js} +1 -1
  94. package/dist/bin/chunks/{sha256sum-6YEPULPX.js → sha256sum-DI7JAVAU.js} +1 -1
  95. package/dist/bin/{shell/chunks/sleep-QHAPNY3Q.js → chunks/sleep-RPGCUUGX.js} +1 -1
  96. package/dist/bin/{shell/chunks/sort-4C6WOKNK.js → chunks/sort-HQPAFL76.js} +1 -1
  97. package/dist/bin/chunks/{split-TV7NL7LA.js → split-F6FSB5KI.js} +1 -1
  98. package/dist/bin/chunks/{sqlite3-W777NCI4.js → sqlite3-7TRACAE7.js} +1 -1
  99. package/dist/bin/chunks/sqlite3-worker.js +3 -2
  100. package/dist/bin/chunks/{strings-MDD72LR6.js → strings-6PE3YMPO.js} +1 -1
  101. package/dist/bin/chunks/{tac-C2N4NQ6S.js → tac-NERJXVOM.js} +1 -1
  102. package/dist/bin/chunks/{tail-BCB5W6JC.js → tail-24F643A4.js} +1 -1
  103. package/dist/bin/chunks/tar-5HK3VMV2.js +3 -0
  104. package/dist/bin/chunks/{tee-UQHPO4OW.js → tee-5B7P2QRJ.js} +1 -1
  105. package/dist/bin/chunks/{time-ZPY52VT2.js → time-FN6VJGRS.js} +1 -1
  106. package/dist/bin/chunks/{timeout-5AX3ZS3X.js → timeout-ZARIAF3K.js} +1 -1
  107. package/dist/bin/{shell/chunks/tr-G7K6M6HP.js → chunks/tr-QQZYZ3CH.js} +1 -1
  108. package/dist/bin/chunks/{unexpand-QIR4EDPG.js → unexpand-3JWOSSBQ.js} +1 -1
  109. package/dist/bin/chunks/{uniq-I7PVFJR4.js → uniq-Q5UH5NL3.js} +1 -1
  110. package/dist/bin/{shell/chunks/wc-6NGWULAP.js → chunks/wc-4HXNTHY3.js} +1 -1
  111. package/dist/bin/chunks/worker.js +3 -2
  112. package/dist/bin/chunks/{xan-KX4VPXUN.js → xan-TSDTZVY3.js} +1 -1
  113. package/dist/bin/chunks/{xan-view-JXOZLJ7S.js → xan-view-XBMA362V.js} +1 -1
  114. package/dist/bin/chunks/{xargs-UWHPYLY7.js → xargs-VTFN762K.js} +1 -1
  115. package/dist/bin/chunks/{yq-GCDCJBKB.js → yq-KU5YTNAK.js} +1 -1
  116. package/dist/bin/just-bash.js +378 -303
  117. package/dist/bin/shell/chunks/{awk2-RLMNTGI7.js → awk2-UFCNQFCV.js} +1 -1
  118. package/dist/bin/{chunks/base64-RZRLGMB3.js → shell/chunks/base64-EGKVQIBC.js} +1 -1
  119. package/dist/bin/{chunks/bash-CLP24TE2.js → shell/chunks/bash-BEG4JB7K.js} +1 -1
  120. package/dist/bin/{chunks/cat-LQH5FSAR.js → shell/chunks/cat-NBL6MU5H.js} +1 -1
  121. package/dist/bin/shell/chunks/{chunk-KFMPGSUT.js → chunk-2ZAK22BG.js} +1 -1
  122. package/dist/bin/shell/chunks/chunk-4BNS566Q.js +4 -0
  123. package/dist/bin/shell/chunks/chunk-4J4UC7OD.js +17 -0
  124. package/dist/bin/{chunks/chunk-IEXQTXU5.js → shell/chunks/chunk-52FZYTIX.js} +4 -4
  125. package/dist/bin/{chunks/chunk-EDTBGO7F.js → shell/chunks/chunk-5KX5YUWT.js} +1 -1
  126. package/dist/bin/shell/chunks/{chunk-XFFUAO3F.js → chunk-6FYCU7QB.js} +1 -1
  127. package/dist/bin/shell/chunks/{chunk-PAYQNSZN.js → chunk-6JKLDBRW.js} +1 -1
  128. package/dist/bin/shell/chunks/{chunk-22HCD466.js → chunk-7HK63L6Y.js} +1 -1
  129. package/dist/bin/shell/chunks/chunk-7NDRU2ZN.js +5 -0
  130. package/dist/bin/{chunks/chunk-IZGLHVBB.js → shell/chunks/chunk-AFAD5U2A.js} +1 -1
  131. package/dist/bin/shell/chunks/{chunk-LNNWMRCB.js → chunk-AZH64XMJ.js} +1 -1
  132. package/dist/bin/shell/chunks/{chunk-6FSBHK6H.js → chunk-C6JOQKE2.js} +1 -1
  133. package/dist/bin/{chunks/chunk-77MLOOQS.js → shell/chunks/chunk-CX5CEEGI.js} +1 -1
  134. package/dist/bin/shell/chunks/{chunk-NXVG64T3.js → chunk-D7YFPDMV.js} +1 -1
  135. package/dist/bin/shell/chunks/chunk-DHIKZU63.js +3 -0
  136. package/dist/bin/shell/chunks/{chunk-UR4CEP4Y.js → chunk-DWECIBLJ.js} +1 -1
  137. package/dist/bin/shell/chunks/{chunk-C7ISPH7Y.js → chunk-FEENTUVZ.js} +1 -1
  138. package/dist/bin/shell/chunks/{chunk-FVRXEJYQ.js → chunk-FJABJBIW.js} +2 -2
  139. package/dist/bin/shell/chunks/{chunk-YOKQNNQO.js → chunk-FYCT4DWY.js} +1 -1
  140. package/dist/bin/shell/chunks/{chunk-J7TUF2VI.js → chunk-G7ZWT7BT.js} +1 -1
  141. package/dist/bin/shell/chunks/{chunk-XJ37N3S5.js → chunk-GTO74SFS.js} +1 -1
  142. package/dist/bin/{chunks/chunk-L24QXM5S.js → shell/chunks/chunk-GXX3QUMM.js} +1 -1
  143. package/dist/bin/shell/chunks/chunk-HMCRB24D.js +15 -0
  144. package/dist/bin/shell/chunks/{chunk-FKVQZWJQ.js → chunk-HWNCK5BB.js} +1 -1
  145. package/dist/bin/shell/chunks/{chunk-V2RP73X4.js → chunk-IX7LKVVH.js} +1 -1
  146. package/dist/bin/{chunks/chunk-JZW7NFK2.js → shell/chunks/chunk-J7XTZ47D.js} +1 -1
  147. package/dist/bin/shell/chunks/{chunk-3BYTCO2H.js → chunk-JDFKEXLG.js} +1 -1
  148. package/dist/bin/{chunks/chunk-HN2DCT7T.js → shell/chunks/chunk-JJC4ENJL.js} +1 -1
  149. package/dist/bin/{chunks/chunk-F3WNDKOC.js → shell/chunks/chunk-JSZBZ2XU.js} +1 -1
  150. package/dist/bin/{chunks/chunk-UO5LOD7U.js → shell/chunks/chunk-KMZUSEWI.js} +1 -1
  151. package/dist/bin/{chunks/chunk-OPMLWMNH.js → shell/chunks/chunk-KWCO3YXP.js} +1 -1
  152. package/dist/bin/{chunks/chunk-LSQTB2QK.js → shell/chunks/chunk-LMA4D2KK.js} +1 -1
  153. package/dist/bin/{chunks/chunk-HL4ZS7TX.js → shell/chunks/chunk-LX2H4DPL.js} +3 -3
  154. package/dist/bin/shell/chunks/{chunk-X4MX6EHF.js → chunk-MP77TJMM.js} +1 -1
  155. package/dist/bin/{chunks/chunk-F3GKANW3.js → shell/chunks/chunk-MTK7VLZG.js} +1 -1
  156. package/dist/bin/shell/chunks/chunk-N3FQJLPZ.js +17 -0
  157. package/dist/bin/{chunks/chunk-2SVX7I5P.js → shell/chunks/chunk-NMMVECGD.js} +1 -1
  158. package/dist/bin/shell/chunks/{chunk-LAHBP3FW.js → chunk-NXYVRP6D.js} +1 -1
  159. package/dist/bin/shell/chunks/{chunk-7UU7KPEM.js → chunk-OVVMB2JI.js} +1 -1
  160. package/dist/bin/shell/chunks/{chunk-YY5PJR7O.js → chunk-OXZSG3ZZ.js} +1 -1
  161. package/dist/bin/{chunks/chunk-CAZ75E7E.js → shell/chunks/chunk-PKE7GKU5.js} +1 -1
  162. package/dist/bin/{chunks/chunk-7AYT3UKI.js → shell/chunks/chunk-PSJORJRS.js} +1 -1
  163. package/dist/bin/shell/chunks/{chunk-7NC4CPHS.js → chunk-R36DS2UF.js} +1 -1
  164. package/dist/bin/shell/chunks/{chunk-2NRAWO6E.js → chunk-RKBWTGBZ.js} +1 -1
  165. package/dist/bin/{chunks/chunk-LC6D27QJ.js → shell/chunks/chunk-RVGYO2OU.js} +1 -1
  166. package/dist/bin/shell/chunks/{chunk-SMSELHIY.js → chunk-SF2OLINE.js} +1 -1
  167. package/dist/bin/{chunks/chunk-M65CQLJE.js → shell/chunks/chunk-TIRU5FOD.js} +1 -1
  168. package/dist/bin/shell/chunks/{chunk-BE4PARL3.js → chunk-TKYWUEON.js} +1 -1
  169. package/dist/bin/shell/chunks/chunk-TYBXHT6W.js +10 -0
  170. package/dist/bin/shell/chunks/chunk-UI7CV277.js +20 -0
  171. package/dist/bin/shell/chunks/{chunk-KRRM5UCC.js → chunk-UNWZQG7U.js} +1 -1
  172. package/dist/bin/{chunks/chunk-4KSZJAQK.js → shell/chunks/chunk-W5OBQVJ2.js} +1 -1
  173. package/dist/bin/shell/chunks/{chunk-JNUX75OX.js → chunk-WHUKZ3K3.js} +1 -1
  174. package/dist/bin/shell/chunks/chunk-Y2IUEWQD.js +11 -0
  175. package/dist/bin/shell/chunks/chunk-Y5OWCEDV.js +64 -0
  176. package/dist/bin/shell/chunks/{chunk-H7JTIXAO.js → chunk-ZZP3RSWL.js} +1 -1
  177. package/dist/bin/shell/chunks/{column-AQB3A3PJ.js → column-QLGOK3XM.js} +1 -1
  178. package/dist/bin/{chunks/comm-Q4VDF6ZO.js → shell/chunks/comm-PLYUTVP3.js} +1 -1
  179. package/dist/bin/shell/chunks/curl-DCSPNPEW.js +27 -0
  180. package/dist/bin/shell/chunks/{cut-ZI2HIAW7.js → cut-JNQTCQY7.js} +1 -1
  181. package/dist/bin/shell/chunks/date-OFYBOAUE.js +3 -0
  182. package/dist/bin/{chunks/diff-YDJ42RKS.js → shell/chunks/diff-LZ4WRLIF.js} +1 -1
  183. package/dist/bin/shell/chunks/{env-NY32PQJM.js → env-FNVYNLGB.js} +1 -1
  184. package/dist/bin/{chunks/expand-YYSO35NS.js → shell/chunks/expand-CB7FG7LQ.js} +1 -1
  185. package/dist/bin/{chunks/expr-7PLWSWZI.js → shell/chunks/expr-6A2XZORA.js} +1 -1
  186. package/dist/bin/shell/chunks/{find-P4DOE7CE.js → find-5OZWMYCV.js} +1 -1
  187. package/dist/bin/shell/chunks/flag-coverage-H6NG6ZQL.js +3 -0
  188. package/dist/bin/{chunks/fold-5MF7QZWQ.js → shell/chunks/fold-7YEITA5L.js} +1 -1
  189. package/dist/bin/shell/chunks/{grep-VAYCFO4O.js → grep-KKBXRB73.js} +1 -1
  190. package/dist/bin/shell/chunks/{gzip-UGBQQKIH.js → gzip-ZJP5VIAQ.js} +1 -1
  191. package/dist/bin/shell/chunks/{head-QNC2ZYDO.js → head-B6GFQHKF.js} +1 -1
  192. package/dist/bin/{chunks/html-to-markdown-QEFY7XQR.js → shell/chunks/html-to-markdown-3HJ7L7NL.js} +1 -1
  193. package/dist/bin/shell/chunks/{join-EJ73DYTK.js → join-WRM6S6CO.js} +1 -1
  194. package/dist/bin/shell/chunks/{jq-GGTKKMEN.js → jq-33GJJXTL.js} +1 -1
  195. package/dist/bin/shell/chunks/{js-exec-BC6NI55L.js → js-exec-F7JAZ4ZQ.js} +1 -1
  196. package/dist/bin/shell/chunks/{md5sum-MCVDIB35.js → md5sum-ZNYCDRQL.js} +1 -1
  197. package/dist/bin/{chunks/nl-KUPLVCTS.js → shell/chunks/nl-6TVYE4ZB.js} +1 -1
  198. package/dist/bin/{chunks/od-YQ5ZUI2H.js → shell/chunks/od-Y3E3QXOL.js} +1 -1
  199. package/dist/bin/{chunks/paste-A5KKPWXX.js → shell/chunks/paste-LYNFXXCM.js} +1 -1
  200. package/dist/bin/shell/chunks/printf-MR3FXCDE.js +3 -0
  201. package/dist/bin/{chunks/python3-BQWDPUBM.js → shell/chunks/python3-R5OFWJIH.js} +1 -1
  202. package/dist/bin/{chunks/rev-PYHOZ4D4.js → shell/chunks/rev-AJECDD4L.js} +1 -1
  203. package/dist/bin/shell/chunks/{rg-BGFMSIVK.js → rg-2YWJS6TE.js} +1 -1
  204. package/dist/bin/shell/chunks/{sed-FWA634SN.js → sed-IGRH7EGG.js} +1 -1
  205. package/dist/bin/shell/chunks/{sha1sum-4KF52U3Y.js → sha1sum-5QZSNFY3.js} +1 -1
  206. package/dist/bin/shell/chunks/{sha256sum-6YEPULPX.js → sha256sum-DI7JAVAU.js} +1 -1
  207. package/dist/bin/{chunks/sleep-QHAPNY3Q.js → shell/chunks/sleep-RPGCUUGX.js} +1 -1
  208. package/dist/bin/{chunks/sort-4C6WOKNK.js → shell/chunks/sort-HQPAFL76.js} +1 -1
  209. package/dist/bin/shell/chunks/{split-TV7NL7LA.js → split-F6FSB5KI.js} +1 -1
  210. package/dist/bin/shell/chunks/{sqlite3-W777NCI4.js → sqlite3-7TRACAE7.js} +1 -1
  211. package/dist/bin/shell/chunks/{strings-MDD72LR6.js → strings-6PE3YMPO.js} +1 -1
  212. package/dist/bin/shell/chunks/{tac-C2N4NQ6S.js → tac-NERJXVOM.js} +1 -1
  213. package/dist/bin/shell/chunks/{tail-BCB5W6JC.js → tail-24F643A4.js} +1 -1
  214. package/dist/bin/shell/chunks/tar-5HK3VMV2.js +3 -0
  215. package/dist/bin/shell/chunks/{tee-UQHPO4OW.js → tee-5B7P2QRJ.js} +1 -1
  216. package/dist/bin/shell/chunks/{time-ZPY52VT2.js → time-FN6VJGRS.js} +1 -1
  217. package/dist/bin/shell/chunks/{timeout-5AX3ZS3X.js → timeout-ZARIAF3K.js} +1 -1
  218. package/dist/bin/{chunks/tr-G7K6M6HP.js → shell/chunks/tr-QQZYZ3CH.js} +1 -1
  219. package/dist/bin/shell/chunks/{unexpand-QIR4EDPG.js → unexpand-3JWOSSBQ.js} +1 -1
  220. package/dist/bin/shell/chunks/{uniq-I7PVFJR4.js → uniq-Q5UH5NL3.js} +1 -1
  221. package/dist/bin/{chunks/wc-6NGWULAP.js → shell/chunks/wc-4HXNTHY3.js} +1 -1
  222. package/dist/bin/shell/chunks/{xan-KX4VPXUN.js → xan-TSDTZVY3.js} +1 -1
  223. package/dist/bin/shell/chunks/{xan-view-JXOZLJ7S.js → xan-view-XBMA362V.js} +1 -1
  224. package/dist/bin/shell/chunks/{xargs-UWHPYLY7.js → xargs-VTFN762K.js} +1 -1
  225. package/dist/bin/shell/chunks/{yq-GCDCJBKB.js → yq-KU5YTNAK.js} +1 -1
  226. package/dist/bin/shell/shell.js +383 -308
  227. package/dist/bundle/browser.js +665 -659
  228. package/dist/bundle/chunks/{awk2-LA3USKJP.js → awk2-SREAOJRG.js} +1 -1
  229. package/dist/bundle/chunks/{base64-C2AIWVNC.js → base64-WIGL46P3.js} +1 -1
  230. package/dist/bundle/chunks/{bash-YZ33HQZQ.js → bash-F4KHPMTX.js} +1 -1
  231. package/dist/bundle/chunks/{cat-TSFMZVYS.js → cat-LPZ6XNHG.js} +1 -1
  232. package/dist/bundle/chunks/{chunk-ICIEVHY5.js → chunk-55LZFN6S.js} +1 -1
  233. package/dist/bundle/chunks/{chunk-6VAT5Z2D.js → chunk-5MV7Q5QB.js} +1 -1
  234. package/dist/bundle/chunks/{chunk-UP6MSJGD.js → chunk-6L65G6A7.js} +1 -1
  235. package/dist/bundle/chunks/{chunk-GGC5NEPZ.js → chunk-6NYPZ4NX.js} +1 -1
  236. package/dist/bundle/chunks/{chunk-4RUAZWKT.js → chunk-7CSMHFIJ.js} +4 -4
  237. package/dist/bundle/chunks/{chunk-ACSZB4FE.js → chunk-AAGO7IQ5.js} +1 -1
  238. package/dist/bundle/chunks/chunk-AFQAPVZ3.js +16 -0
  239. package/dist/bundle/chunks/{chunk-5H5SCKJM.js → chunk-AX2X3SZS.js} +1 -1
  240. package/dist/bundle/chunks/{chunk-EBAPSGAO.js → chunk-AXMYAPFA.js} +1 -1
  241. package/dist/bundle/chunks/chunk-BU36VZYL.js +4 -0
  242. package/dist/bundle/chunks/{chunk-CBJVD2XA.js → chunk-CJFAMHFC.js} +1 -1
  243. package/dist/bundle/chunks/{chunk-GJC3WVOW.js → chunk-CQV3EITV.js} +1 -1
  244. package/dist/bundle/chunks/{chunk-Q7H5W7YE.js → chunk-DJ7QC6LC.js} +2 -2
  245. package/dist/bundle/chunks/{chunk-S3LEJEPP.js → chunk-DVJY2RAX.js} +1 -1
  246. package/dist/bundle/chunks/{chunk-N6DXJ2JN.js → chunk-EUCNMMRD.js} +1 -1
  247. package/dist/bundle/chunks/{chunk-GTQIUQM6.js → chunk-FLMHFDSN.js} +1 -1
  248. package/dist/bundle/chunks/chunk-GE6OQDB2.js +10 -0
  249. package/dist/bundle/chunks/{chunk-FW54FHZR.js → chunk-GHB6M7KA.js} +1 -1
  250. package/dist/bundle/chunks/{chunk-LNBPBRV4.js → chunk-GRQJA2J7.js} +1 -1
  251. package/dist/bundle/chunks/{chunk-R74UQCKX.js → chunk-H2TS57O5.js} +1 -1
  252. package/dist/bundle/chunks/{chunk-7JHM3L42.js → chunk-H7WISVP3.js} +1 -1
  253. package/dist/bundle/chunks/chunk-HAIOEUEV.js +63 -0
  254. package/dist/bundle/chunks/{chunk-46RN27KI.js → chunk-IZ6KBTV7.js} +1 -1
  255. package/dist/bundle/chunks/{chunk-T4TFLF3R.js → chunk-JTMQLUCH.js} +1 -1
  256. package/dist/bundle/chunks/{chunk-2JIPICV3.js → chunk-K5JMLDHX.js} +1 -1
  257. package/dist/bundle/chunks/{chunk-L64BMZUV.js → chunk-KAPG5ONA.js} +1 -1
  258. package/dist/bundle/chunks/chunk-KSBHIW2H.js +19 -0
  259. package/dist/bundle/chunks/{chunk-XHLMAZX2.js → chunk-KTL5PAHY.js} +1 -1
  260. package/dist/bundle/chunks/{chunk-YCLFEX4T.js → chunk-KTPCYKBB.js} +1 -1
  261. package/dist/bundle/chunks/chunk-LI6PTSPD.js +9 -0
  262. package/dist/bundle/chunks/{chunk-LEKBROJD.js → chunk-LZUPLYFM.js} +1 -1
  263. package/dist/bundle/chunks/{chunk-4N6J7B5P.js → chunk-MFRETFZB.js} +1 -1
  264. package/dist/bundle/chunks/{chunk-OVGANXCG.js → chunk-MIZIUC5M.js} +1 -1
  265. package/dist/bundle/chunks/chunk-MJLETYZI.js +14 -0
  266. package/dist/bundle/chunks/{chunk-VLCHOJWK.js → chunk-MTHXXA6H.js} +1 -1
  267. package/dist/bundle/chunks/{chunk-6LASZU3O.js → chunk-NGPDJCUE.js} +1 -1
  268. package/dist/bundle/chunks/{chunk-ZZKH2ELC.js → chunk-OVH44QKR.js} +1 -1
  269. package/dist/bundle/chunks/chunk-PDUL32DM.js +16 -0
  270. package/dist/bundle/chunks/{chunk-KD3KENL6.js → chunk-PYDWFCTN.js} +1 -1
  271. package/dist/bundle/chunks/{chunk-AQ6FYS2X.js → chunk-QAJKDPNS.js} +1 -1
  272. package/dist/bundle/chunks/{chunk-XCQWV4AU.js → chunk-R4QNMLOB.js} +1 -1
  273. package/dist/bundle/chunks/chunk-RBQG6ZUG.js +3 -0
  274. package/dist/bundle/chunks/{chunk-U73A73IE.js → chunk-RCXNPPJY.js} +1 -1
  275. package/dist/bundle/chunks/{chunk-S443BAN4.js → chunk-S2BIZAWY.js} +1 -1
  276. package/dist/bundle/chunks/{chunk-XRFHFXFP.js → chunk-SY4HAUHP.js} +1 -1
  277. package/dist/bundle/chunks/{chunk-FJK43EBQ.js → chunk-TA74ENH7.js} +1 -1
  278. package/dist/bundle/chunks/{chunk-OC35HPHG.js → chunk-TC2WHAIS.js} +1 -1
  279. package/dist/bundle/chunks/{chunk-TN7HHBQW.js → chunk-VACKIICN.js} +3 -3
  280. package/dist/bundle/chunks/{chunk-GSPYNYZA.js → chunk-VBLMIJON.js} +1 -1
  281. package/dist/bundle/chunks/{chunk-VPADYNBD.js → chunk-WKPK7M56.js} +1 -1
  282. package/dist/bundle/chunks/chunk-XEKXHOPO.js +2 -0
  283. package/dist/bundle/chunks/{chunk-BVKWRAS6.js → chunk-XPK7ZFVA.js} +1 -1
  284. package/dist/bundle/chunks/{chunk-FAXLQUCQ.js → chunk-XZUZRAAC.js} +1 -1
  285. package/dist/bundle/chunks/{chunk-HJBTD7PY.js → chunk-YRNR2VHY.js} +1 -1
  286. package/dist/bundle/chunks/{chunk-KATRCGLX.js → chunk-YWOZZRSK.js} +1 -1
  287. package/dist/bundle/chunks/{chunk-FX7KQCEA.js → chunk-Z3KJQD7F.js} +1 -1
  288. package/dist/bundle/chunks/{column-XT6UFXNQ.js → column-PVOEF65J.js} +1 -1
  289. package/dist/bundle/chunks/{comm-VV2LDX2J.js → comm-5QMYEAJL.js} +1 -1
  290. package/dist/bundle/chunks/curl-PAWGO3EH.js +26 -0
  291. package/dist/bundle/chunks/{cut-OKARJCCV.js → cut-NDMV7SPO.js} +1 -1
  292. package/dist/bundle/chunks/date-XKUEQ4WF.js +2 -0
  293. package/dist/bundle/chunks/{diff-MWJFIG7X.js → diff-TT4M7WM3.js} +1 -1
  294. package/dist/bundle/chunks/{env-36M5BO7M.js → env-DLFRY633.js} +1 -1
  295. package/dist/bundle/chunks/{expand-JSPG6VOP.js → expand-T2TH4TBQ.js} +1 -1
  296. package/dist/bundle/chunks/{expr-5JAACS4X.js → expr-YLACLCSM.js} +1 -1
  297. package/dist/bundle/chunks/find-T5TGGXUU.js +2 -0
  298. package/dist/bundle/chunks/flag-coverage-TRYUZMPS.js +2 -0
  299. package/dist/bundle/chunks/{fold-4TQNYMSW.js → fold-XR2JMFCW.js} +1 -1
  300. package/dist/bundle/chunks/{grep-V3LQVMRQ.js → grep-VUESTEZ7.js} +1 -1
  301. package/dist/bundle/chunks/{gzip-O5ASJAFY.js → gzip-HF3D26QX.js} +1 -1
  302. package/dist/bundle/chunks/{head-442HYESI.js → head-AEMOMQSZ.js} +1 -1
  303. package/dist/bundle/chunks/{html-to-markdown-JW4MSQZO.js → html-to-markdown-LXXMVQ3V.js} +1 -1
  304. package/dist/bundle/chunks/{join-TBRGI3LQ.js → join-YIABB6WR.js} +1 -1
  305. package/dist/bundle/chunks/{jq-4XLYLOS5.js → jq-3FAAQVR6.js} +1 -1
  306. package/dist/bundle/chunks/{js-exec-N5KEZBH7.js → js-exec-SR6IMNWM.js} +1 -1
  307. package/dist/bundle/chunks/js-exec-worker.js +214 -17
  308. package/dist/bundle/chunks/{md5sum-SPU24VSG.js → md5sum-LU7RVIB7.js} +1 -1
  309. package/dist/bundle/chunks/{nl-WSDW7I4O.js → nl-Q2L5XQWZ.js} +1 -1
  310. package/dist/bundle/chunks/{od-WOKFDJTP.js → od-RDSM4TQJ.js} +1 -1
  311. package/dist/bundle/chunks/{paste-7JC6S4DX.js → paste-ABCY7E6C.js} +1 -1
  312. package/dist/bundle/chunks/printf-JPOOWRJC.js +2 -0
  313. package/dist/bundle/chunks/{python3-POMOR4OA.js → python3-JPCH6LLN.js} +1 -1
  314. package/dist/bundle/chunks/{rev-5EHFX4EJ.js → rev-GCV6X22K.js} +1 -1
  315. package/dist/bundle/chunks/rg-N5WLPMSA.js +2 -0
  316. package/dist/bundle/chunks/{sed-S5UIK574.js → sed-DX2SGXMF.js} +1 -1
  317. package/dist/bundle/chunks/{sha1sum-2PTOAFR6.js → sha1sum-O6DM3TPQ.js} +1 -1
  318. package/dist/bundle/chunks/{sha256sum-NS7D3IXX.js → sha256sum-WPVZLZPS.js} +1 -1
  319. package/dist/bundle/chunks/{sleep-X22JJINO.js → sleep-HZ4QEFOK.js} +1 -1
  320. package/dist/bundle/chunks/{sort-SW2YEO5B.js → sort-VW2NIZHW.js} +1 -1
  321. package/dist/bundle/chunks/{split-4KKZZXXE.js → split-NBMH43M2.js} +1 -1
  322. package/dist/bundle/chunks/{sqlite3-CGOEFJAO.js → sqlite3-UE3PJTDQ.js} +1 -1
  323. package/dist/bundle/chunks/sqlite3-worker.js +3 -2
  324. package/dist/bundle/chunks/{strings-6WDHLGMX.js → strings-MCXFXPDL.js} +1 -1
  325. package/dist/bundle/chunks/{tac-2STMMJYW.js → tac-BQ7EDZW2.js} +1 -1
  326. package/dist/bundle/chunks/{tail-R4PCA2C4.js → tail-GJMTLMNE.js} +1 -1
  327. package/dist/bundle/chunks/tar-WIZ3PDF4.js +2 -0
  328. package/dist/bundle/chunks/{tee-YUZ2FKCJ.js → tee-SGANDVNY.js} +1 -1
  329. package/dist/bundle/chunks/{time-D4LNBSWX.js → time-FCZCDIAM.js} +1 -1
  330. package/dist/bundle/chunks/timeout-VDIEAB4R.js +2 -0
  331. package/dist/bundle/chunks/{tr-36LHWFRQ.js → tr-JNNR5JMS.js} +1 -1
  332. package/dist/bundle/chunks/{unexpand-CADSA4VO.js → unexpand-2TKXAENW.js} +1 -1
  333. package/dist/bundle/chunks/{uniq-XSIZR6PB.js → uniq-DMFKT3AB.js} +1 -1
  334. package/dist/bundle/chunks/{wc-LF7NU4LA.js → wc-TZFYWFLA.js} +1 -1
  335. package/dist/bundle/chunks/worker.js +3 -2
  336. package/dist/bundle/chunks/{xan-Y6WF3IRG.js → xan-U6654PZR.js} +1 -1
  337. package/dist/bundle/chunks/xan-view-YATJ4KAA.js +2 -0
  338. package/dist/bundle/chunks/{xargs-MGZPH7AX.js → xargs-VDP7DLOU.js} +1 -1
  339. package/dist/bundle/chunks/yq-ZBXLBSXV.js +2 -0
  340. package/dist/bundle/index.cjs +934 -928
  341. package/dist/bundle/index.js +385 -310
  342. package/dist/commands/curl/types.d.ts +29 -0
  343. package/dist/commands/js-exec/module-shims.d.ts +1 -1
  344. package/dist/commands/sqlite3/worker.js +3 -2
  345. package/dist/commands/tar/tar-options.d.ts +1 -1
  346. package/dist/encoding.d.ts +14 -0
  347. package/dist/parser/parser-substitution.d.ts +14 -0
  348. package/package.json +1 -1
  349. package/dist/bin/chunks/chunk-3UKQXBQ3.js +0 -6
  350. package/dist/bin/chunks/chunk-ALVEEXFD.js +0 -19
  351. package/dist/bin/chunks/chunk-BGX3RW7H.js +0 -10
  352. package/dist/bin/chunks/chunk-D6CPXGKK.js +0 -75
  353. package/dist/bin/chunks/chunk-FOUVACI7.js +0 -16
  354. package/dist/bin/chunks/chunk-Q4UMTSRO.js +0 -15
  355. package/dist/bin/chunks/chunk-UGJM7CKP.js +0 -17
  356. package/dist/bin/chunks/chunk-VBDLSL7Y.js +0 -10
  357. package/dist/bin/chunks/chunk-VZK4FHWJ.js +0 -3
  358. package/dist/bin/chunks/chunk-Y4FPH5DQ.js +0 -64
  359. package/dist/bin/chunks/curl-AXXGQRR2.js +0 -27
  360. package/dist/bin/chunks/date-JEZYSA4F.js +0 -3
  361. package/dist/bin/chunks/expansion-PPP6PD75.js +0 -3
  362. package/dist/bin/chunks/flag-coverage-RFKIBJ6L.js +0 -3
  363. package/dist/bin/chunks/printf-Z5C2UOI5.js +0 -3
  364. package/dist/bin/chunks/tar-DOO744MK.js +0 -3
  365. package/dist/bin/shell/chunks/chunk-3UKQXBQ3.js +0 -6
  366. package/dist/bin/shell/chunks/chunk-ALVEEXFD.js +0 -19
  367. package/dist/bin/shell/chunks/chunk-BGX3RW7H.js +0 -10
  368. package/dist/bin/shell/chunks/chunk-D6CPXGKK.js +0 -75
  369. package/dist/bin/shell/chunks/chunk-FOUVACI7.js +0 -16
  370. package/dist/bin/shell/chunks/chunk-Q4UMTSRO.js +0 -15
  371. package/dist/bin/shell/chunks/chunk-UGJM7CKP.js +0 -17
  372. package/dist/bin/shell/chunks/chunk-VBDLSL7Y.js +0 -10
  373. package/dist/bin/shell/chunks/chunk-VZK4FHWJ.js +0 -3
  374. package/dist/bin/shell/chunks/chunk-Y4FPH5DQ.js +0 -64
  375. package/dist/bin/shell/chunks/curl-AXXGQRR2.js +0 -27
  376. package/dist/bin/shell/chunks/date-JEZYSA4F.js +0 -3
  377. package/dist/bin/shell/chunks/expansion-PPP6PD75.js +0 -3
  378. package/dist/bin/shell/chunks/flag-coverage-RFKIBJ6L.js +0 -3
  379. package/dist/bin/shell/chunks/printf-Z5C2UOI5.js +0 -3
  380. package/dist/bin/shell/chunks/tar-DOO744MK.js +0 -3
  381. package/dist/bundle/chunks/chunk-CHFEPBH4.js +0 -18
  382. package/dist/bundle/chunks/chunk-G5EVRAOO.js +0 -74
  383. package/dist/bundle/chunks/chunk-GIUR5SNU.js +0 -15
  384. package/dist/bundle/chunks/chunk-MZFCCXPZ.js +0 -63
  385. package/dist/bundle/chunks/chunk-NRSASXYY.js +0 -2
  386. package/dist/bundle/chunks/chunk-OGJ5CFPR.js +0 -9
  387. package/dist/bundle/chunks/chunk-SO6R3ZKN.js +0 -16
  388. package/dist/bundle/chunks/chunk-XDGLKIHR.js +0 -9
  389. package/dist/bundle/chunks/chunk-XUIHBHL5.js +0 -5
  390. package/dist/bundle/chunks/chunk-XYXUMFSU.js +0 -14
  391. package/dist/bundle/chunks/curl-LV5Y3AMS.js +0 -26
  392. package/dist/bundle/chunks/date-UUUPW43J.js +0 -2
  393. package/dist/bundle/chunks/expansion-R25BK4W3.js +0 -2
  394. package/dist/bundle/chunks/find-INTH3OLC.js +0 -2
  395. package/dist/bundle/chunks/flag-coverage-XWSYNE72.js +0 -2
  396. package/dist/bundle/chunks/printf-TWGXF445.js +0 -2
  397. package/dist/bundle/chunks/rg-S4FXYXWB.js +0 -2
  398. package/dist/bundle/chunks/tar-STHHZTZ6.js +0 -2
  399. package/dist/bundle/chunks/timeout-YDCRSLPQ.js +0 -2
  400. package/dist/bundle/chunks/xan-view-HDVKHFC2.js +0 -2
  401. package/dist/bundle/chunks/yq-4QJW3EQG.js +0 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,128 @@
1
1
  # just-bash
2
2
 
3
+ ## 3.0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [#277](https://github.com/vercel-labs/just-bash/pull/277) [`aec5643`](https://github.com/vercel-labs/just-bash/commit/aec56431d7d9b6fcb141bbfe25d26f4931f54f80) Thanks [@mutewinter](https://github.com/mutewinter)! - interpreter: avoid lazy import in variable assignment path that trips defense-in-depth (fixes [#273](https://github.com/vercel-labs/just-bash/issues/273))
8
+
9
+ Any non-`export` variable assignment (bare `SECRET=s`, prefixed `SECRET=s cmd`,
10
+ or before a custom command) failed with a defense-in-depth security violation
11
+ (`dynamic import of Node.js builtin 'node:module' is blocked during script
12
+ execution`), while plain commands and `export`-ed assignments passed.
13
+
14
+ `processScalarAssignment()` resolved `isArray` via `await import("./expansion.js")`
15
+ in two spots. In the bundled `dist`, that dynamic `import()` marks `expansion.js`
16
+ as a lazily-linked chunk whose `createRequire` banner imports `node:module`; the
17
+ defense layer's ESM `resolve` hook blocks that builtin import when the sandbox is
18
+ active and untrusted, so it blocked just-bash's own chunk load. The file already
19
+ statically imports from `./expansion.js`, so `isArray` is now pulled from that
20
+ static import and the two lazy imports are removed — no lazy `node:module`-bearing
21
+ chunk is linked at runtime. No public API change.
22
+
23
+ - [#276](https://github.com/vercel-labs/just-bash/pull/276) [`1ec5eec`](https://github.com/vercel-labs/just-bash/commit/1ec5eec0aefd099d23ac9f056df1e6612c81d49b) Thanks [@mutewinter](https://github.com/mutewinter)! - interpreter: preserve leading whitespace in multi-line quoted strings (fixes [#259](https://github.com/vercel-labs/just-bash/issues/259))
24
+
25
+ `exec()` runs each script through `normalizeScript()`, which `trimStart()`s
26
+ leading indentation from lines so indented template-literal scripts parse. It
27
+ was applied line-by-line and stripped the leading whitespace inside multi-line
28
+ single- and double-quoted strings too. The visible symptom was `python3 -c
29
+ '...'` (and `node -e`, `awk`, etc.) with an indented body failing with
30
+ `IndentationError`, while the same code via heredoc or pipe worked.
31
+
32
+ `normalizeScript()` is now quote-aware (mirroring the earlier heredoc-aware
33
+ fix): it only strips indentation from lines that begin outside any quote, and
34
+ preserves lines that begin inside an unterminated single- or double-quoted
35
+ string verbatim. This also un-skips four sed spec tests whose indented stdin
36
+ was previously being corrupted.
37
+
38
+ - [#286](https://github.com/vercel-labs/just-bash/pull/286) [`cb2b583`](https://github.com/vercel-labs/just-bash/commit/cb2b583b3f46e6bb4e6982c4bfe19903ec811a87) Thanks [@privatenumber](https://github.com/privatenumber)! - interpreter: deliver redirected output to each fd's final target (fixes `cmd > file 2>&1` leaking stderr to stdout)
39
+
40
+ `applyRedirections()` processed a command's redirection list sequentially over
41
+ the result's stdout/stderr strings, moving content at each step. The
42
+ duplication operators (`2>&1`, `1>&2`) merged into the live stream regardless
43
+ of where the source fd pointed, so the canonical `cmd > file 2>&1` wrote
44
+ stdout to the file but leaked stderr onto the caller's stdout — including
45
+ "command not found" errors and custom-command stderr. Any wrapper protocol
46
+ that parses the enclosing script's stdout (e.g. a runner emitting a JSON
47
+ payload after `eval "$CMD" > "$OUT" 2>&1`) saw the leaked stderr corrupt its
48
+ stream. Ordering variants were wrong in other ways: `cmd 2>&1 > file` put
49
+ stderr in the file instead of on stdout, and `cmd > a > b` wrote content to
50
+ `a` instead of `b`.
51
+
52
+ The pass now mirrors how bash sets up fds before running the command: each
53
+ output redirection only opens/truncates its target and re-points the fd's
54
+ sink (file, /dev/null, or a snapshot of the caller-visible stream), and
55
+ duplication operators copy the source fd's current sink. Stream content is
56
+ delivered once, after the whole list is processed, to each fd's final sink.
57
+ This makes `cmd > file 2>&1` send stderr to the file, `cmd 2>&1 > file` keep
58
+ stderr on the caller's stdout, `cmd > all 2>&1 2> err` let the later `2> err`
59
+ reclaim stderr, and `cmd > a > b` truncate `a` while writing content to `b`.
60
+ The `/dev/null`-as-regular-VFS-file behavior for stdout redirects is
61
+ preserved.
62
+
63
+ ## 3.0.2
64
+
65
+ ### Patch Changes
66
+
67
+ - [#272](https://github.com/vercel-labs/just-bash/pull/272) [`150a915`](https://github.com/vercel-labs/just-bash/commit/150a915a1d45a2cc7f2b6aec3268f27116c34916) Thanks [@trieloff](https://github.com/trieloff)! - interpreter: fix UTF-8 mojibake when a script interleaves text-output and byte-output statements
68
+
69
+ A single `exec()` can interleave text-shaped statements (sed, awk, echo — `ö`
70
+ as `U+00F6`) with byte-shaped ones (grep | head, cat — `ö` as bytes
71
+ `0xC3 0xB6`). `executeScript` / `executeStatement` concatenated each result's
72
+ raw stdout, so the lone high byte from the text half made the combined stream
73
+ invalid UTF-8, the output-boundary decoder bailed, and the byte half came back
74
+ as Latin-1 mojibake (`Köpenicker` for `Köpenicker`). The same path backs
75
+ command substitution, so `echo "你好: $(cat /file)"` was affected too.
76
+
77
+ The fix decodes each statement/pipeline result to text via its explicit
78
+ `stdoutKind` (`decodedTextFromResult`) before concatenating — no guessing from
79
+ string contents, so text whose code units merely look like UTF-8 (`ö`) is
80
+ preserved. `tac` (stdin path) and `curl` (response body) now declare
81
+ `stdoutKind: "bytes"` on the results that forward raw bytes, so the decode is
82
+ driven per output rather than by inspecting characters.
83
+
84
+ - [#256](https://github.com/vercel-labs/just-bash/pull/256) [`75d8dfd`](https://github.com/vercel-labs/just-bash/commit/75d8dfd3a322786250e3b0f81b1500c87610acb7) Thanks [@Hazzng](https://github.com/Hazzng)! - js-exec: fix Buffer shim correctness — ascii encode now uses & 0xff (not & 0x7f), consolidate latin1/ascii into shared \_rawEncode, fix Buffer.from(ArrayBuffer, offset, length), throw on invalid byteLength input, clamp negative toString start, throw RangeError for out-of-range write offset
85
+
86
+ - [#239](https://github.com/vercel-labs/just-bash/pull/239) [`1369b77`](https://github.com/vercel-labs/just-bash/commit/1369b772fe887694c09ce834d1b0b21aa6420b59) Thanks [@trieloff](https://github.com/trieloff)! - curl: interpret `@file` for `-d`/`--data`, `--data-binary`, and `--data-urlencode`
87
+
88
+ Real curl reads file contents when these flags are passed `@filename`:
89
+
90
+ - `-d @file` / `--data @file` — read file contents, strip CR/LF.
91
+ - `--data-binary @file` — read file contents verbatim (newlines preserved).
92
+ - `--data-urlencode @file` — read file, URL-encode the contents.
93
+ - `--data-urlencode name@file` — prefix the URL-encoded contents with `name=`.
94
+
95
+ just-bash's curl previously passed `@filename` through verbatim as the HTTP body. Posting JSON or any non-trivial payload via `curl --data-binary @payload.json https://…` sent the literal string `@payload.json` instead of the file. The new behavior matches upstream curl; `--data-raw` keeps the documented "no `@` interpretation" semantics.
96
+
97
+ - [#262](https://github.com/vercel-labs/just-bash/pull/262) [`4ece258`](https://github.com/vercel-labs/just-bash/commit/4ece2580d8cb707e6c6b7fa22897ea3fdd21739a) Thanks [@chernetsov](https://github.com/chernetsov)! - parser: don't treat quotes inside a heredoc body as shell quotes when finding the end of a command substitution
98
+
99
+ A command substitution whose body contained a heredoc with an unbalanced quote in its body — most commonly an apostrophe in literal prose, e.g. `June's` — failed to parse with `bash: syntax error: ... unexpected EOF while looking for matching ')'`:
100
+
101
+ ```bash
102
+ OUT=$(cat <<'SCRIPT'
103
+ June's moon
104
+ SCRIPT
105
+ )
106
+ ```
107
+
108
+ Both the lexer's `$(...)` word scanner and the substitution boundary scanner walked into the heredoc body and applied shell quote tracking to it. The `'` in `June's` opened a single-quoted string that never closed, so the closing `)` was swallowed and the scan ran to EOF. In bash a heredoc body is literal text and must be skipped wholesale when locating the substitution boundary.
109
+
110
+ Both scanners are now heredoc-aware: when scanning a `$(...)` they recognize `<<` / `<<-` operators (but not the `<<<` here-string), capture the possibly-quoted delimiter, and skip the heredoc body lines literally — without quote or paren tracking — up to the terminator. Multiple heredocs on one line and tab-stripping (`<<-`) are handled. This fixes the common pattern of capturing the output of a connector/CLI invocation that is fed a heredoc script containing apostrophes, backticks, or parentheses.
111
+
112
+ The heredoc scan also tracks arithmetic `((...))` nesting so a `<<` left-shift inside `$((...))` (or a nested arithmetic expansion) is not mistaken for a heredoc opener — previously a multi-line arithmetic expansion containing a shift, e.g. `$((\n1 << 2\n))`, had its closing `))` swallowed by spurious body-skipping.
113
+
114
+ - [#248](https://github.com/vercel-labs/just-bash/pull/248) [`d64009a`](https://github.com/vercel-labs/just-bash/commit/d64009aef6bc1556e7c84b22ed455863275ea953) Thanks [@Hazzng](https://github.com/Hazzng)! - perf(grep): up to 14.5× speedup via preFilter extensions and matcher reuse.
115
+
116
+ Anchored alternation patterns like `^def \|^async def` now extract literal needles (stripping outer `^`/`$`), enabling the `String.indexOf` fast-path. Files with no matching needle are rejected before `split("\n")`, skipping RE2 entirely. `acquireMatcher()` extended to `match()`, `replace()`, `search()`, and `matchAll()` to reduce GC pressure across awk/sed hot-paths.
117
+
118
+ - [#261](https://github.com/vercel-labs/just-bash/pull/261) [`c9904de`](https://github.com/vercel-labs/just-bash/commit/c9904dea24ad2aa847749ee6289239c2a2c651fc) Thanks [@chernetsov](https://github.com/chernetsov)! - set: support a bundled `-o`/`+o` long option inside a short-flag cluster (e.g. `set -euo pipefail`)
119
+
120
+ The `set` builtin previously rejected `set -euo pipefail` with `bash: set: -o: invalid option`, because it parsed each character after the `-` as an independent short flag and has no `o` short flag. `-o` was only honored as its own token (`set -eu -o pipefail`).
121
+
122
+ This is the canonical "bash strict mode" idiom and is extremely common in generated scripts, so the whole script would abort on its first line.
123
+
124
+ `set` now matches bash: an `o` inside a cluster consumes the _next word_ as its long-option name, and the remaining characters keep being parsed as short flags. So `set -euo pipefail` is equivalent to `set -e -u -o pipefail`, `set -oe pipefail` enables both `pipefail` and `errexit`, trailing words become positional parameters, and `+`-clusters (`set +euo pipefail`) disable the options. An invalid bundled name (`set -euo bogus`) still reports `invalid option name`, and an `o` with no following argument falls back to the standalone `-o`/`+o` listing.
125
+
3
126
  ## 3.0.1
4
127
 
5
128
  ### Patch Changes
package/README.md CHANGED
@@ -141,6 +141,17 @@ await env.exec("while true; do sleep 1; done", { signal: controller.signal });
141
141
  await env.exec("cat <<EOF\n indented\nEOF", { rawScript: true });
142
142
  ```
143
143
 
144
+ ### Timezone
145
+
146
+ `date` defaults to UTC (`%Z=UTC`, `%z=+0000`) regardless of the host clock, so the sandbox does not leak the host timezone. To opt into a specific zone, pass `TZ` as an initial env var:
147
+
148
+ ```typescript
149
+ const bash = new Bash({ env: { TZ: "America/New_York" } });
150
+ await bash.exec("date"); // Mon Jun 1 09:30:00 EDT 2026
151
+ ```
152
+
153
+ `-u` always forces UTC; an unset or invalid `$TZ` falls back to UTC. Setting `TZ` exposes that timezone to scripts running in the sandbox, so only pass a value you are comfortable revealing — forwarding the host's real `$TZ` (e.g. `process.env.TZ`) reintroduces the disclosure that the UTC default exists to prevent.
154
+
144
155
  `exec()` options:
145
156
 
146
157
  | Option | Type | Description |
package/dist/AGENTS.md CHANGED
@@ -64,6 +64,8 @@ const result = await bash.exec("cat input.txt | grep pattern");
64
64
 
65
65
  5. **ReadWriteFs root separation**: If you use `ReadWriteFs`, point it at a workspace directory, not at the installed `just-bash` package or other trusted runtime code.
66
66
 
67
+ 6. **UTC by default**: `date` always shows UTC (`%Z=UTC`, `%z=+0000`) unless the host opts in by passing `TZ` as an env var (e.g. `new Bash({ env: { TZ: "America/New_York" } })`). `-u` always forces UTC; an invalid `$TZ` falls back to UTC.
68
+
67
69
  ## Available Commands
68
70
 
69
71
  **Text processing**: `awk`, `cat`, `column`, `comm`, `cut`, `egrep`, `expand`, `fgrep`, `fold`, `grep`, `head`, `join`, `nl`, `paste`, `rev`, `rg`, `sed`, `sort`, `strings`, `tac`, `tail`, `tr`, `unexpand`, `uniq`, `wc`, `xargs`
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import{createRequire} from"node:module";const require=createRequire(import.meta.url);
3
- import{a,b}from"./chunk-NXVG64T3.js";import"./chunk-MROECM42.js";import"./chunk-LNNWMRCB.js";import"./chunk-HL4ZS7TX.js";import"./chunk-IEXQTXU5.js";import"./chunk-VZK4FHWJ.js";import"./chunk-47WZ2U6M.js";import"./chunk-MUFNRCMY.js";import"./chunk-LNVSXNT7.js";export{a as awkCommand2,b as flagsForFuzzing};
3
+ import{a,b}from"./chunk-D7YFPDMV.js";import"./chunk-MROECM42.js";import"./chunk-AZH64XMJ.js";import"./chunk-LX2H4DPL.js";import"./chunk-52FZYTIX.js";import"./chunk-DHIKZU63.js";import"./chunk-47WZ2U6M.js";import"./chunk-MUFNRCMY.js";import"./chunk-LNVSXNT7.js";export{a as awkCommand2,b as flagsForFuzzing};
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import{createRequire} from"node:module";const require=createRequire(import.meta.url);
3
- import{a,b}from"./chunk-6WJQNLR2.js";import"./chunk-VZK4FHWJ.js";import"./chunk-NE4R2FVV.js";import"./chunk-MUFNRCMY.js";import"./chunk-LNVSXNT7.js";export{a as base64Command,b as flagsForFuzzing};
3
+ import{a,b}from"./chunk-6WJQNLR2.js";import"./chunk-DHIKZU63.js";import"./chunk-NE4R2FVV.js";import"./chunk-MUFNRCMY.js";import"./chunk-LNVSXNT7.js";export{a as base64Command,b as flagsForFuzzing};
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import{createRequire} from"node:module";const require=createRequire(import.meta.url);
3
- import{a,b,c,d}from"./chunk-7UU7KPEM.js";import"./chunk-MROECM42.js";import"./chunk-VZK4FHWJ.js";import"./chunk-MUFNRCMY.js";import"./chunk-LNVSXNT7.js";export{a as bashCommand,c as flagsForFuzzing,b as shCommand,d as shFlagsForFuzzing};
3
+ import{a,b,c,d}from"./chunk-OVVMB2JI.js";import"./chunk-MROECM42.js";import"./chunk-DHIKZU63.js";import"./chunk-MUFNRCMY.js";import"./chunk-LNVSXNT7.js";export{a as bashCommand,c as flagsForFuzzing,b as shCommand,d as shFlagsForFuzzing};
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import{createRequire} from"node:module";const require=createRequire(import.meta.url);
3
- import{a,b}from"./chunk-XJ37N3S5.js";import"./chunk-H7JTIXAO.js";import"./chunk-VZK4FHWJ.js";import"./chunk-7JZKVC3F.js";import"./chunk-NE4R2FVV.js";import"./chunk-MUFNRCMY.js";import"./chunk-LNVSXNT7.js";export{a as catCommand,b as flagsForFuzzing};
3
+ import{a,b}from"./chunk-GTO74SFS.js";import"./chunk-ZZP3RSWL.js";import"./chunk-DHIKZU63.js";import"./chunk-7JZKVC3F.js";import"./chunk-NE4R2FVV.js";import"./chunk-MUFNRCMY.js";import"./chunk-LNVSXNT7.js";export{a as catCommand,b as flagsForFuzzing};
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import{createRequire} from"node:module";const require=createRequire(import.meta.url);
3
- import{a as y}from"./chunk-VZK4FHWJ.js";import{a as C}from"./chunk-NE4R2FVV.js";import{a as F,b as x}from"./chunk-MUFNRCMY.js";var H={name:"column",summary:"columnate lists",usage:"column [OPTION]... [FILE]...",description:"Format input into multiple columns. By default, fills rows first. Use -t to create a table based on whitespace-delimited input.",options:["-t Create a table (determine columns from input)","-s SEP Input field delimiter (default: whitespace)","-o SEP Output field delimiter (default: two spaces)","-c WIDTH Output width for fill mode (default: 80)","-n Don't merge multiple adjacent delimiters"],examples:["ls | column # Fill columns with ls output","cat data | column -t # Format as table","column -t -s ',' file # Format CSV as table","column -c 40 file # Fill 40-char wide columns"]},I={table:{short:"t",long:"table",type:"boolean"},separator:{short:"s",type:"string"},outputSep:{short:"o",type:"string"},width:{short:"c",type:"number",default:80},noMerge:{short:"n",type:"boolean"}};function v(t,e,o){return e?o?t.split(e):t.split(e).filter(n=>n.length>0):o?t.split(/[ \t]/):t.split(/[ \t]+/).filter(n=>n.length>0)}function T(t){let e=[];for(let o of t)for(let n=0;n<o.length;n++){let l=o[n].length;(e[n]===void 0||l>e[n])&&(e[n]=l)}return e}function W(t,e){if(t.length===0)return"";let o=T(t),n=[];for(let l of t){let c=[];for(let s=0;s<l.length;s++)s===l.length-1?c.push(l[s]):c.push(l[s].padEnd(o[s]));n.push(c.join(e))}return n.join(`
3
+ import{a as y}from"./chunk-DHIKZU63.js";import{a as C}from"./chunk-NE4R2FVV.js";import{a as F,b as x}from"./chunk-MUFNRCMY.js";var H={name:"column",summary:"columnate lists",usage:"column [OPTION]... [FILE]...",description:"Format input into multiple columns. By default, fills rows first. Use -t to create a table based on whitespace-delimited input.",options:["-t Create a table (determine columns from input)","-s SEP Input field delimiter (default: whitespace)","-o SEP Output field delimiter (default: two spaces)","-c WIDTH Output width for fill mode (default: 80)","-n Don't merge multiple adjacent delimiters"],examples:["ls | column # Fill columns with ls output","cat data | column -t # Format as table","column -t -s ',' file # Format CSV as table","column -c 40 file # Fill 40-char wide columns"]},I={table:{short:"t",long:"table",type:"boolean"},separator:{short:"s",type:"string"},outputSep:{short:"o",type:"string"},width:{short:"c",type:"number",default:80},noMerge:{short:"n",type:"boolean"}};function v(t,e,o){return e?o?t.split(e):t.split(e).filter(n=>n.length>0):o?t.split(/[ \t]/):t.split(/[ \t]+/).filter(n=>n.length>0)}function T(t){let e=[];for(let o of t)for(let n=0;n<o.length;n++){let l=o[n].length;(e[n]===void 0||l>e[n])&&(e[n]=l)}return e}function W(t,e){if(t.length===0)return"";let o=T(t),n=[];for(let l of t){let c=[];for(let s=0;s<l.length;s++)s===l.length-1?c.push(l[s]):c.push(l[s].padEnd(o[s]));n.push(c.join(e))}return n.join(`
4
4
  `)}function j(t,e,o){if(t.length===0)return"";let n=Math.max(...t.map(a=>a.length)),l=o.length,c=n+l,s=Math.max(1,Math.floor((e+l)/c)),p=Math.ceil(t.length/s),d=[];for(let a=0;a<p;a++){let i=[];for(let r=0;r<s;r++){let m=r*p+a;m<t.length&&(r===s-1||(r+1)*p+a>=t.length?i.push(t[m]):i.push(t[m].padEnd(n)))}d.push(i.join(o))}return d.join(`
5
5
  `)}var S={name:"column",execute:async(t,e)=>{if(x(t))return F(H);let o=C("column",t,I);if(!o.ok)return o.error;let{table:n,separator:l,outputSep:c,width:s,noMerge:p}=o.result.flags,d=o.result.positional,a=c??" ",i;if(d.length===0)i=y(e.stdin)??"";else{let u=[];for(let f of d)if(f==="-")u.push(y(e.stdin)??"");else{let w=e.fs.resolvePath(e.cwd,f),b=await e.fs.readFile(w);if(b===null)return{exitCode:1,stdout:"",stderr:`column: ${f}: No such file or directory
6
6
  `};u.push(b)}i=u.join("")}if(i===""||i.trim()==="")return{exitCode:0,stdout:"",stderr:""};let r=i.split(`
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import{createRequire} from"node:module";const require=createRequire(import.meta.url);
3
+ function M(r,o,a){let e=new Date(o*1e3),t="",n=0;for(;n<r.length;)if(r[n]==="%"&&n+1<r.length){let u=r[n+1],i=S(e,u,a);i!==null?(t+=i,n+=2):(t+=r[n],n++)}else t+=r[n],n++;return t}function f(r,o){let a={year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",weekday:"short",hour12:!1,timeZone:o};try{let t=new Intl.DateTimeFormat("en-US",a).formatToParts(r),n=c=>t.find(m=>m.type===c)?.value??"",u=new Map([["Sun",0],["Mon",1],["Tue",2],["Wed",3],["Thu",4],["Fri",5],["Sat",6]]),i=n("weekday"),s=(c,m)=>{let y=Number.parseInt(c,10);return Number.isNaN(y)?m:y};return{year:s(n("year"),r.getFullYear()),month:s(n("month"),r.getMonth()+1),day:s(n("day"),r.getDate()),hour:s(n("hour"),r.getHours())%24,minute:s(n("minute"),r.getMinutes()),second:s(n("second"),r.getSeconds()),weekday:u.get(i)??r.getDay()}}catch{return{year:r.getFullYear(),month:r.getMonth()+1,day:r.getDate(),hour:r.getHours(),minute:r.getMinutes(),second:r.getSeconds(),weekday:r.getDay()}}}function S(r,o,a){let e=f(r,a),t=(s,c=2)=>String(s).padStart(c,"0"),n=g(e.year,e.month,e.day),u=d(e.year,e.month,e.day,e.weekday,0),i=d(e.year,e.month,e.day,e.weekday,1);switch(o){case"a":return["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][e.weekday];case"A":return["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][e.weekday];case"b":case"h":return["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][e.month-1];case"B":return["January","February","March","April","May","June","July","August","September","October","November","December"][e.month-1];case"c":return`${["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][e.weekday]} ${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][e.month-1]} ${String(e.day).padStart(2," ")} ${t(e.hour)}:${t(e.minute)}:${t(e.second)} ${e.year}`;case"C":return t(Math.floor(e.year/100));case"d":return t(e.day);case"D":return`${t(e.month)}/${t(e.day)}/${t(e.year%100)}`;case"e":return String(e.day).padStart(2," ");case"F":return`${e.year}-${t(e.month)}-${t(e.day)}`;case"g":return t(h(e.year,e.month,e.day)%100);case"G":return String(h(e.year,e.month,e.day));case"H":return t(e.hour);case"I":return t(e.hour%12||12);case"j":return String(n).padStart(3,"0");case"k":return String(e.hour).padStart(2," ");case"l":return String(e.hour%12||12).padStart(2," ");case"m":return t(e.month);case"M":return t(e.minute);case"n":return`
4
+ `;case"N":return"000000000";case"p":return e.hour<12?"AM":"PM";case"P":return e.hour<12?"am":"pm";case"r":return`${t(e.hour%12||12)}:${t(e.minute)}:${t(e.second)} ${e.hour<12?"AM":"PM"}`;case"R":return`${t(e.hour)}:${t(e.minute)}`;case"s":return String(Math.floor(r.getTime()/1e3));case"S":return t(e.second);case"t":return" ";case"T":return`${t(e.hour)}:${t(e.minute)}:${t(e.second)}`;case"u":return String(e.weekday===0?7:e.weekday);case"U":return t(u);case"V":return t($(e.year,e.month,e.day));case"w":return String(e.weekday);case"W":return t(i);case"x":return`${t(e.month)}/${t(e.day)}/${t(e.year%100)}`;case"X":return`${t(e.hour)}:${t(e.minute)}:${t(e.second)}`;case"y":return t(e.year%100);case"Y":return String(e.year);case"z":return l(r,a);case"Z":return p(r,a);case"%":return"%";default:return null}}function l(r,o){if(!o){let u=-r.getTimezoneOffset(),i=u>=0?"+":"-",s=Math.floor(Math.abs(u)/60),c=Math.abs(u)%60;return`${i}${String(s).padStart(2,"0")}${String(c).padStart(2,"0")}`}try{let s=new Intl.DateTimeFormat("en-US",{timeZone:o,timeZoneName:"longOffset"}).formatToParts(r).find(c=>c.type==="timeZoneName");if(s){let c=s.value.match(/GMT([+-])(\d{2}):(\d{2})/);if(c)return`${c[1]}${c[2]}${c[3]}`;if(s.value==="GMT"||s.value==="UTC")return"+0000"}}catch{}let a=-r.getTimezoneOffset(),e=a>=0?"+":"-",t=Math.floor(Math.abs(a)/60),n=Math.abs(a)%60;return`${e}${String(t).padStart(2,"0")}${String(n).padStart(2,"0")}`}function p(r,o){try{return new Intl.DateTimeFormat("en-US",{timeZone:o,timeZoneName:"short"}).formatToParts(r).find(n=>n.type==="timeZoneName")?.value??"UTC"}catch{return"UTC"}}function g(r,o,a){let e=[31,28,31,30,31,30,31,31,30,31,30,31];(r%4===0&&r%100!==0||r%400===0)&&(e[1]=29);let n=a;for(let u=0;u<o-1;u++)n+=e[u];return n}function d(r,o,a,e,t){let n=g(r,o,a),u=new Date(r,0,1).getDay(),i=1+(7+t-u)%7,s=n-i;return s<0?0:Math.floor(s/7)+1}function $(r,o,a){let e=new Date(r,o-1,a,12,0,0);e.setDate(e.getDate()+3-(e.getDay()+6)%7);let t=new Date(e.getFullYear(),0,4);t.setDate(t.getDate()+3-(t.getDay()+6)%7);let n=e.getTime()-t.getTime();return 1+Math.round(n/(10080*60*1e3))}function h(r,o,a){let e=new Date(r,o-1,a,12,0,0);return e.setDate(e.getDate()+3-(e.getDay()+6)%7),e.getFullYear()}export{M as a};
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import{createRequire} from"node:module";const require=createRequire(import.meta.url);
3
+ import{a as w,b as V}from"./chunk-LMA4D2KK.js";import{d as E}from"./chunk-MLUOPG3W.js";import{a as T,b as M}from"./chunk-AZH64XMJ.js";import{a as F}from"./chunk-LX2H4DPL.js";import{a as R}from"./chunk-ZZP3RSWL.js";import{a as J}from"./chunk-DHIKZU63.js";import{k as O}from"./chunk-47WZ2U6M.js";import{a as N}from"./chunk-PBOVSFTJ.js";import{a as A,b as L,c as I}from"./chunk-MUFNRCMY.js";function W(t){switch(t){case"\b":return"\\b";case"\f":return"\\f";case`
4
+ `:return"\\n";case"\r":return"\\r";case" ":return"\\t";default:return`\\u${t.charCodeAt(0).toString(16).padStart(4,"0")}`}}function _(t){let n="",s=!1,i=!1;for(let a=0;a<t.length;a++){let r=t[a];if(i){n+=r,i=!1;continue}if(r==="\\"){n+=r,i=!0;continue}if(r==='"'){n+=r,s=!s;continue}if(s&&r.charCodeAt(0)<=31){n+=W(r);continue}n+=r}return n}function k(t,n,s){return JSON.parse(_(t.slice(n,s)))}function B(t){let n=[],s=0,i=t.length;for(;s<i;){for(;s<i&&/\s/.test(t[s]);)s++;if(s>=i)break;let a=s,r=t[s];if(r==="{"||r==="["){let f=r,c=r==="{"?"}":"]",p=1,m=!1,d=!1;for(s++;s<i&&p>0;){let j=t[s];d?d=!1:j==="\\"?d=!0:j==='"'?m=!m:m||(j===f?p++:j===c&&p--),s++}if(p!==0)throw new Error(`Unexpected end of JSON input at position ${s} (unclosed ${f})`);n.push(E(k(t,a,s)))}else if(r==='"'){let f=!1;for(s++;s<i;){let c=t[s];if(f)f=!1;else if(c==="\\")f=!0;else if(c==='"'){s++;break}s++}n.push(E(k(t,a,s)))}else if(r==="-"||r>="0"&&r<="9"){for(;s<i&&/[\d.eE+-]/.test(t[s]);)s++;n.push(E(k(t,a,s)))}else if(t.slice(s,s+4)==="true")n.push(!0),s+=4;else if(t.slice(s,s+5)==="false")n.push(!1),s+=5;else if(t.slice(s,s+4)==="null")n.push(null),s+=4;else{let f=t.slice(s,s+10);throw new Error(`Invalid JSON at position ${a}: unexpected '${f.split(/\s/)[0]}'`)}}return n}var X={name:"jq",summary:"command-line JSON processor",usage:"jq [OPTIONS] FILTER [FILE...]",options:["-R, --raw-input read each line as string instead of JSON","-r, --raw-output output strings without quotes","-c, --compact-output compact instead of pretty-printed output","-e, --exit-status set exit status based on output","-s, --slurp read entire input into array","-n, --null-input don't read any input","-j, --join-output don't print newlines after each output","-a, --ascii force ASCII output","-S, --sort-keys sort object keys","-C, --color colorize output (ignored)","-M, --monochrome monochrome output (ignored)"," --tab use tabs for indentation"," --help display this help and exit"]};function C(t,n,s,i,a,r=0){if(t===null||t===void 0)return"null";if(typeof t=="boolean")return String(t);if(typeof t=="number")return Number.isFinite(t)?String(t):"null";if(typeof t=="string")return s?t:JSON.stringify(t);let f=a?" ":" ";if(Array.isArray(t))return t.length===0?"[]":n?`[${t.map(p=>C(p,!0,!1,i,a)).join(",")}]`:`[
5
+ ${t.map(p=>f.repeat(r+1)+C(p,!1,!1,i,a,r+1)).join(`,
6
+ `)}
7
+ ${f.repeat(r)}]`;if(typeof t=="object"){let c=Object.keys(t);return i&&(c=c.sort()),c.length===0?"{}":n?`{${c.map(m=>`${JSON.stringify(m)}:${C(t[m],!0,!1,i,a)}`).join(",")}}`:`{
8
+ ${c.map(m=>{let d=C(t[m],!1,!1,i,a,r+1);return`${f.repeat(r+1)}${JSON.stringify(m)}: ${d}`}).join(`,
9
+ `)}
10
+ ${f.repeat(r)}}`}return String(t)}var re={name:"jq",async execute(t,n){T(n.requireDefenseContext,"jq","execution entry");let s=(o,e)=>M(n.requireDefenseContext,"jq",o,e);if(L(t))return A(X);let i=!1,a=!1,r=!1,f=!1,c=!1,p=!1,m=!1,d=!1,j=!1,D=".",z=!1,x=[];for(let o=0;o<t.length;o++){let e=t[o];if(e==="-R"||e==="--raw-input")a=!0;else if(e==="-r"||e==="--raw-output")i=!0;else if(e==="-c"||e==="--compact-output")r=!0;else if(e==="-e"||e==="--exit-status")f=!0;else if(e==="-s"||e==="--slurp")c=!0;else if(e==="-n"||e==="--null-input")p=!0;else if(e==="-j"||e==="--join-output")m=!0;else if(!(e==="-a"||e==="--ascii")){if(e==="-S"||e==="--sort-keys")d=!0;else if(!(e==="-C"||e==="--color")){if(!(e==="-M"||e==="--monochrome"))if(e==="--tab")j=!0;else if(e==="-")x.push("-");else{if(e.startsWith("--"))return I("jq",e);if(e.startsWith("-")){for(let l of e.slice(1))if(l==="R")a=!0;else if(l==="r")i=!0;else if(l==="c")r=!0;else if(l==="e")f=!0;else if(l==="s")c=!0;else if(l==="n")p=!0;else if(l==="j")m=!0;else if(l!=="a"){if(l==="S")d=!0;else if(l!=="C"){if(l!=="M")return I("jq",`-${l}`)}}}else z?x.push(e):(D=e,z=!0)}}}}let S=[];if(!p)if(x.length===0||x.length===1&&x[0]==="-")S.push({source:"stdin",content:J(n.stdin)});else{let o=await s("file read",()=>R(n,x,{cmdName:"jq",stopOnError:!0}));if(o.exitCode!==0)return{stdout:"",stderr:o.stderr,exitCode:2};S=o.files.map(e=>({source:e.filename||"stdin",content:J(e.content)}))}try{let o=V(D),e=[],l={limits:n.limits?{maxIterations:n.limits.maxJqIterations}:void 0,env:n.env,coverage:n.coverage,requireDefenseContext:n.requireDefenseContext};if(p)e=w(null,o,l);else if(a&&c){let u=S.map(({content:g})=>g).join("");e=w(u,o,l)}else if(a){let u="";for(let{content:g}of S){let h=u+g,y=0,q=h.indexOf(`
11
+ `,y);for(;q!==-1;)e.push(...w(h.slice(y,q),o,l)),y=q+1,q=h.indexOf(`
12
+ `,y);u=h.slice(y)}u!==""&&e.push(...w(u,o,l))}else if(c){let u=[];for(let{content:g}of S){let h=g.trim();h&&u.push(...B(h))}e=w(u,o,l)}else for(let{content:u}of S){let g=u.trim();if(!g)continue;let h=B(g);for(let y of h)e.push(...w(y,o,l))}let H=e.map(u=>C(u,r,i,d,j)),P=m?"":`
13
+ `,b=H.join(P),$=n.limits?.maxStringLength;if($!==void 0&&$>0&&b.length>$)throw new O(`jq: output size limit exceeded (${$} bytes)`,"string_length");let U=f&&(e.length===0||e.every(u=>u==null||u===!1))?1:0;return{stdout:b?m?b:`${b}
14
+ `:"",stderr:"",exitCode:U}}catch(o){if(o instanceof F)throw o;if(o instanceof O)return{stdout:"",stderr:`jq: ${N(o.message)}
15
+ `,exitCode:O.EXIT_CODE};let e=N(o.message);return e.includes("Unknown function")?{stdout:"",stderr:`jq: error: ${e}
16
+ `,exitCode:3}:{stdout:"",stderr:`jq: parse error: ${e}
17
+ `,exitCode:5}}}},oe={name:"jq",flags:[{flag:"-R",type:"boolean"},{flag:"-r",type:"boolean"},{flag:"-c",type:"boolean"},{flag:"-e",type:"boolean"},{flag:"-s",type:"boolean"},{flag:"-n",type:"boolean"},{flag:"-j",type:"boolean"},{flag:"-S",type:"boolean"},{flag:"--tab",type:"boolean"}],stdinType:"json",needsArgs:!0};export{re as a,oe as b};