@jerryan/just-bash 3.6.0 → 3.7.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 (243) hide show
  1. package/CHANGELOG.md +349 -316
  2. package/LICENSE +201 -201
  3. package/README.md +827 -827
  4. package/dist/agent-sandbox.d.ts +5 -0
  5. package/dist/bin/chunks/chmod-G2BCCQGF.js +3 -0
  6. package/dist/bin/chunks/{chunk-B2GCIQI2.js → chunk-2UKTHDUM.js} +1 -1
  7. package/dist/bin/{shell/chunks/chunk-7WBCA2BB.js → chunks/chunk-3DWQCLNP.js} +1 -1
  8. package/dist/bin/chunks/chunk-66UHJFN6.js +11 -0
  9. package/dist/bin/{shell/chunks/chunk-67XYNGRV.js → chunks/chunk-6O4Z6BQT.js} +1 -1
  10. package/dist/bin/chunks/{chunk-QFTZKD5O.js → chunk-6TUILMPB.js} +1 -1
  11. package/dist/bin/chunks/{chunk-M7SIPZZZ.js → chunk-7KMOGI3N.js} +1 -1
  12. package/dist/bin/{shell/chunks/chunk-6ESRNSO7.js → chunks/chunk-ADI36B7X.js} +1 -1
  13. package/dist/bin/chunks/chunk-CN4JKMTR.js +8 -0
  14. package/dist/bin/{shell/chunks/chunk-DZAFUADN.js → chunks/chunk-E26NQEH2.js} +1 -1
  15. package/dist/bin/chunks/chunk-E54Z6VIE.js +12 -0
  16. package/dist/bin/chunks/chunk-F2PYTUMR.js +9 -0
  17. package/dist/bin/chunks/chunk-FO7XJH3J.js +13 -0
  18. package/dist/bin/chunks/chunk-HWK7KFGB.js +3 -0
  19. package/dist/bin/{shell/chunks/chunk-LE2XKKGQ.js → chunks/chunk-HYLF56CC.js} +1 -1
  20. package/dist/bin/chunks/chunk-KNTDFP7X.js +12 -0
  21. package/dist/bin/{shell/chunks/chunk-MF3GVFLC.js → chunks/chunk-L345YZ6R.js} +1 -1
  22. package/dist/bin/chunks/chunk-NBTZL3VS.js +3 -0
  23. package/dist/bin/chunks/chunk-OHFB3M3X.js +3 -0
  24. package/dist/bin/{shell/chunks/chunk-HQ63MFHG.js → chunks/chunk-PEUGMGJJ.js} +1 -1
  25. package/dist/bin/chunks/chunk-QKJAAJ7J.js +3 -0
  26. package/dist/bin/{shell/chunks/chunk-JELR4642.js → chunks/chunk-R76AK3KD.js} +12 -12
  27. package/dist/bin/chunks/{chunk-NLU5LALY.js → chunk-RRECHBUS.js} +1 -1
  28. package/dist/bin/chunks/{chunk-ZMGLTHSU.js → chunk-THFQI5LV.js} +1 -1
  29. package/dist/bin/chunks/{chunk-CL7IYCGG.js → chunk-U7YR5CDD.js} +1 -1
  30. package/dist/bin/chunks/cp-TMDR6USI.js +3 -0
  31. package/dist/bin/chunks/du-UKFUX7KM.js +3 -0
  32. package/dist/bin/chunks/find-W2RZWTOF.js +3 -0
  33. package/dist/bin/chunks/{flag-coverage-C7PB2MO7.js → flag-coverage-QJ5ZQKCF.js} +1 -1
  34. package/dist/bin/{shell/chunks/grep-CVU5V66H.js → chunks/grep-IHDO3L72.js} +1 -1
  35. package/dist/bin/chunks/gzip-WUK63QLL.js +3 -0
  36. package/dist/bin/{shell/chunks/js-exec-DJQLXWCS.js → chunks/js-exec-BE37X4L2.js} +7 -7
  37. package/dist/bin/chunks/js-exec-worker.js +296 -116
  38. package/dist/bin/chunks/ln-XVC53673.js +3 -0
  39. package/dist/bin/chunks/ls-EROTXGTC.js +3 -0
  40. package/dist/bin/chunks/mkdir-YJ3SOVRP.js +3 -0
  41. package/dist/bin/chunks/mv-HDNKXPO6.js +3 -0
  42. package/dist/bin/{shell/chunks/python3-JCJHSX4Z.js → chunks/python3-TJ6DCPIA.js} +1 -1
  43. package/dist/bin/chunks/readlink-ZUIECKQC.js +3 -0
  44. package/dist/bin/chunks/rg-ODJAYIKX.js +3 -0
  45. package/dist/bin/chunks/rm-B4LVIG7A.js +3 -0
  46. package/dist/bin/chunks/rmdir-W5NBOJ7E.js +3 -0
  47. package/dist/bin/{shell/chunks/sleep-DVFE2GSF.js → chunks/sleep-MOJQBZMY.js} +1 -1
  48. package/dist/bin/chunks/split-TVJYLTIJ.js +3 -0
  49. package/dist/bin/chunks/sqlite3-5BGAK7VX.js +3 -0
  50. package/dist/bin/chunks/{timeout-YGFHQJKX.js → timeout-RQOWSWYG.js} +1 -1
  51. package/dist/bin/chunks/worker.js +233 -108
  52. package/dist/bin/just-bash.js +381 -376
  53. package/dist/bin/shell/chunks/chmod-G2BCCQGF.js +3 -0
  54. package/dist/bin/shell/chunks/{chunk-B2GCIQI2.js → chunk-2UKTHDUM.js} +1 -1
  55. package/dist/bin/{chunks/chunk-7WBCA2BB.js → shell/chunks/chunk-3DWQCLNP.js} +1 -1
  56. package/dist/bin/shell/chunks/chunk-66UHJFN6.js +11 -0
  57. package/dist/bin/{chunks/chunk-67XYNGRV.js → shell/chunks/chunk-6O4Z6BQT.js} +1 -1
  58. package/dist/bin/shell/chunks/{chunk-QFTZKD5O.js → chunk-6TUILMPB.js} +1 -1
  59. package/dist/bin/shell/chunks/{chunk-M7SIPZZZ.js → chunk-7KMOGI3N.js} +1 -1
  60. package/dist/bin/{chunks/chunk-6ESRNSO7.js → shell/chunks/chunk-ADI36B7X.js} +1 -1
  61. package/dist/bin/shell/chunks/chunk-CN4JKMTR.js +8 -0
  62. package/dist/bin/{chunks/chunk-DZAFUADN.js → shell/chunks/chunk-E26NQEH2.js} +1 -1
  63. package/dist/bin/shell/chunks/chunk-E54Z6VIE.js +12 -0
  64. package/dist/bin/shell/chunks/chunk-F2PYTUMR.js +9 -0
  65. package/dist/bin/shell/chunks/chunk-FO7XJH3J.js +13 -0
  66. package/dist/bin/shell/chunks/chunk-HWK7KFGB.js +3 -0
  67. package/dist/bin/{chunks/chunk-LE2XKKGQ.js → shell/chunks/chunk-HYLF56CC.js} +1 -1
  68. package/dist/bin/shell/chunks/chunk-KNTDFP7X.js +12 -0
  69. package/dist/bin/{chunks/chunk-MF3GVFLC.js → shell/chunks/chunk-L345YZ6R.js} +1 -1
  70. package/dist/bin/shell/chunks/chunk-NBTZL3VS.js +3 -0
  71. package/dist/bin/shell/chunks/chunk-OHFB3M3X.js +3 -0
  72. package/dist/bin/{chunks/chunk-HQ63MFHG.js → shell/chunks/chunk-PEUGMGJJ.js} +1 -1
  73. package/dist/bin/shell/chunks/chunk-QKJAAJ7J.js +3 -0
  74. package/dist/bin/{chunks/chunk-JELR4642.js → shell/chunks/chunk-R76AK3KD.js} +12 -12
  75. package/dist/bin/shell/chunks/{chunk-NLU5LALY.js → chunk-RRECHBUS.js} +1 -1
  76. package/dist/bin/shell/chunks/{chunk-ZMGLTHSU.js → chunk-THFQI5LV.js} +1 -1
  77. package/dist/bin/shell/chunks/{chunk-CL7IYCGG.js → chunk-U7YR5CDD.js} +1 -1
  78. package/dist/bin/shell/chunks/cp-TMDR6USI.js +3 -0
  79. package/dist/bin/shell/chunks/du-UKFUX7KM.js +3 -0
  80. package/dist/bin/shell/chunks/find-W2RZWTOF.js +3 -0
  81. package/dist/bin/shell/chunks/{flag-coverage-C7PB2MO7.js → flag-coverage-QJ5ZQKCF.js} +1 -1
  82. package/dist/bin/{chunks/grep-CVU5V66H.js → shell/chunks/grep-IHDO3L72.js} +1 -1
  83. package/dist/bin/shell/chunks/gzip-WUK63QLL.js +3 -0
  84. package/dist/bin/{chunks/js-exec-DJQLXWCS.js → shell/chunks/js-exec-BE37X4L2.js} +7 -7
  85. package/dist/bin/shell/chunks/ln-XVC53673.js +3 -0
  86. package/dist/bin/shell/chunks/ls-EROTXGTC.js +3 -0
  87. package/dist/bin/shell/chunks/mkdir-YJ3SOVRP.js +3 -0
  88. package/dist/bin/shell/chunks/mv-HDNKXPO6.js +3 -0
  89. package/dist/bin/{chunks/python3-JCJHSX4Z.js → shell/chunks/python3-TJ6DCPIA.js} +1 -1
  90. package/dist/bin/shell/chunks/readlink-ZUIECKQC.js +3 -0
  91. package/dist/bin/shell/chunks/rg-ODJAYIKX.js +3 -0
  92. package/dist/bin/shell/chunks/rm-B4LVIG7A.js +3 -0
  93. package/dist/bin/shell/chunks/rmdir-W5NBOJ7E.js +3 -0
  94. package/dist/bin/{chunks/sleep-DVFE2GSF.js → shell/chunks/sleep-MOJQBZMY.js} +1 -1
  95. package/dist/bin/shell/chunks/split-TVJYLTIJ.js +3 -0
  96. package/dist/bin/shell/chunks/sqlite3-5BGAK7VX.js +3 -0
  97. package/dist/bin/shell/chunks/{timeout-YGFHQJKX.js → timeout-RQOWSWYG.js} +1 -1
  98. package/dist/bin/shell/shell.js +385 -380
  99. package/dist/bundle/browser.js +643 -638
  100. package/dist/bundle/chunks/chmod-XZNKTJHL.js +2 -0
  101. package/dist/bundle/chunks/{chunk-XVSR5HHH.js → chunk-2T7PBFL4.js} +1 -1
  102. package/dist/bundle/chunks/chunk-3BMWRGU2.js +10 -0
  103. package/dist/bundle/chunks/chunk-3CIDHL5V.js +11 -0
  104. package/dist/bundle/chunks/chunk-4CC3OZPU.js +2 -0
  105. package/dist/bundle/chunks/{chunk-FIMF2TLE.js → chunk-5DMO6LFU.js} +12 -12
  106. package/dist/bundle/chunks/{chunk-N3A4JVFJ.js → chunk-6IA4DXG2.js} +1 -1
  107. package/dist/bundle/chunks/chunk-A257L6QO.js +7 -0
  108. package/dist/bundle/chunks/{chunk-6DDRR56B.js → chunk-ACVD6PQF.js} +1 -1
  109. package/dist/bundle/chunks/chunk-BS6EJR2R.js +11 -0
  110. package/dist/bundle/chunks/chunk-D5FHVW27.js +2 -0
  111. package/dist/bundle/chunks/{chunk-24NLAR7R.js → chunk-E3ABCXE4.js} +1 -1
  112. package/dist/bundle/chunks/{chunk-FSJ6TTCC.js → chunk-HMM3NGUJ.js} +1 -1
  113. package/dist/bundle/chunks/chunk-IYJLVOVE.js +12 -0
  114. package/dist/bundle/chunks/chunk-LRFR25IP.js +8 -0
  115. package/dist/bundle/chunks/{chunk-NBNI7G66.js → chunk-OPYVVD5P.js} +1 -1
  116. package/dist/bundle/chunks/{chunk-F6XU52K3.js → chunk-OR544SGH.js} +1 -1
  117. package/dist/bundle/chunks/{chunk-RPKJJFGZ.js → chunk-PMBXJ3OQ.js} +1 -1
  118. package/dist/bundle/chunks/chunk-PS2RJNZZ.js +2 -0
  119. package/dist/bundle/chunks/{chunk-UC76ZOWM.js → chunk-SBOTR4JQ.js} +1 -1
  120. package/dist/bundle/chunks/chunk-T5ZEIOJ3.js +2 -0
  121. package/dist/bundle/chunks/{chunk-DMWNBCXJ.js → chunk-TLPMB3FO.js} +1 -1
  122. package/dist/bundle/chunks/{chunk-XV2V56NQ.js → chunk-YFFU74KY.js} +1 -1
  123. package/dist/bundle/chunks/{chunk-DAKEIWT3.js → chunk-YNYC232D.js} +1 -1
  124. package/dist/bundle/chunks/{chunk-ZXFELXJH.js → chunk-YUOBBH7P.js} +1 -1
  125. package/dist/bundle/chunks/cp-NWITRTH3.js +2 -0
  126. package/dist/bundle/chunks/du-IFLWEM6M.js +2 -0
  127. package/dist/bundle/chunks/find-EW6OHRPJ.js +2 -0
  128. package/dist/bundle/chunks/{flag-coverage-XTIQGK65.js → flag-coverage-PIF5QRO7.js} +1 -1
  129. package/dist/bundle/chunks/{grep-4AYF3A5J.js → grep-QDFNKAUW.js} +1 -1
  130. package/dist/bundle/chunks/gzip-HBDKZBIP.js +2 -0
  131. package/dist/bundle/chunks/{js-exec-XKF2B7C3.js → js-exec-IREGAOMH.js} +7 -7
  132. package/dist/bundle/chunks/js-exec-worker.js +296 -116
  133. package/dist/bundle/chunks/ln-CEM7GDB5.js +2 -0
  134. package/dist/bundle/chunks/ls-WJ7EIFVM.js +2 -0
  135. package/dist/bundle/chunks/mkdir-Z6MMWH3D.js +2 -0
  136. package/dist/bundle/chunks/mv-E2NFLGRQ.js +2 -0
  137. package/dist/bundle/chunks/{python3-F5S5TYGS.js → python3-W4UMQJAQ.js} +1 -1
  138. package/dist/bundle/chunks/readlink-XCFO7YD2.js +2 -0
  139. package/dist/bundle/chunks/rg-J7XDRV3B.js +2 -0
  140. package/dist/bundle/chunks/rm-IGPLE632.js +2 -0
  141. package/dist/bundle/chunks/rmdir-UMUDM2L2.js +2 -0
  142. package/dist/bundle/chunks/{sleep-PPRBTSVR.js → sleep-25QUPVDK.js} +1 -1
  143. package/dist/bundle/chunks/split-D4HPO4G5.js +2 -0
  144. package/dist/bundle/chunks/sqlite3-3HL2ECCQ.js +2 -0
  145. package/dist/bundle/chunks/{timeout-C6WDYPLV.js → timeout-37GM7IIL.js} +1 -1
  146. package/dist/bundle/chunks/worker.js +233 -108
  147. package/dist/bundle/index.cjs +975 -970
  148. package/dist/bundle/index.js +357 -352
  149. package/dist/commands/js-exec/js-exec.d.ts +4 -0
  150. package/dist/commands/worker-bridge/bridge-handler.d.ts +9 -3
  151. package/dist/commands/worker-bridge/protocol.d.ts +72 -21
  152. package/dist/commands/worker-bridge/sync-backend.d.ts +3 -0
  153. package/dist/fs/fs-error.d.ts +43 -0
  154. package/dist/fs/interface.d.ts +13 -0
  155. package/dist/fs/mountable-fs/mountable-fs.d.ts +20 -0
  156. package/dist/fs/overlay-fs/apply.d.ts +15 -1
  157. package/dist/fs/overlay-fs/index.d.ts +1 -0
  158. package/dist/fs/overlay-fs/overlay-fs.d.ts +31 -0
  159. package/dist/fs/overlay-fs/overlay-tree.d.ts +39 -0
  160. package/dist/fs/path-utils.d.ts +5 -0
  161. package/dist/fs/vfs-template.d.ts +74 -0
  162. package/dist/index.d.cts +3 -1
  163. package/dist/index.d.ts +3 -1
  164. package/dist/interpreter/builtin-dispatch.d.ts +10 -0
  165. package/dist/interpreter/builtin-manifest.d.ts +273 -0
  166. package/dist/interpreter/builtins/help.d.ts +6 -0
  167. package/dist/interpreter/builtins/shopt.d.ts +3 -0
  168. package/dist/interpreter/helpers/shell-constants.d.ts +0 -20
  169. package/dist/timers.d.ts +9 -0
  170. package/package.json +135 -136
  171. package/vendor/cpython-emscripten/python.cjs +2 -2
  172. package/dist/bin/chunks/chmod-WYYTXGVB.js +0 -3
  173. package/dist/bin/chunks/chunk-43E7AR6A.js +0 -3
  174. package/dist/bin/chunks/chunk-6LDOIBU7.js +0 -9
  175. package/dist/bin/chunks/chunk-AI7JUA46.js +0 -13
  176. package/dist/bin/chunks/chunk-GQKQEK5N.js +0 -11
  177. package/dist/bin/chunks/chunk-JQM3DKCH.js +0 -12
  178. package/dist/bin/chunks/chunk-OLEQNRKX.js +0 -8
  179. package/dist/bin/chunks/chunk-PPVF2N6C.js +0 -3
  180. package/dist/bin/chunks/chunk-WEHA3JFD.js +0 -3
  181. package/dist/bin/chunks/chunk-YQEKKZTU.js +0 -12
  182. package/dist/bin/chunks/cp-OMVKM35F.js +0 -3
  183. package/dist/bin/chunks/du-LUFPVLNW.js +0 -3
  184. package/dist/bin/chunks/find-AWH2KOY7.js +0 -3
  185. package/dist/bin/chunks/gzip-FDPA6EKG.js +0 -3
  186. package/dist/bin/chunks/ln-B35EKC2Q.js +0 -3
  187. package/dist/bin/chunks/ls-Q6ZZ6SQ2.js +0 -3
  188. package/dist/bin/chunks/mkdir-74BP5NTG.js +0 -3
  189. package/dist/bin/chunks/mv-76LAHXFR.js +0 -3
  190. package/dist/bin/chunks/readlink-EHXJNW62.js +0 -3
  191. package/dist/bin/chunks/rg-PXNKNIMY.js +0 -3
  192. package/dist/bin/chunks/rm-TF2NJQIA.js +0 -3
  193. package/dist/bin/chunks/rmdir-7ZIVFZJX.js +0 -3
  194. package/dist/bin/chunks/split-ZNNNHKSP.js +0 -3
  195. package/dist/bin/chunks/sqlite3-KP42NNIY.js +0 -3
  196. package/dist/bin/shell/chunks/chmod-WYYTXGVB.js +0 -3
  197. package/dist/bin/shell/chunks/chunk-43E7AR6A.js +0 -3
  198. package/dist/bin/shell/chunks/chunk-6LDOIBU7.js +0 -9
  199. package/dist/bin/shell/chunks/chunk-AI7JUA46.js +0 -13
  200. package/dist/bin/shell/chunks/chunk-GQKQEK5N.js +0 -11
  201. package/dist/bin/shell/chunks/chunk-JQM3DKCH.js +0 -12
  202. package/dist/bin/shell/chunks/chunk-OLEQNRKX.js +0 -8
  203. package/dist/bin/shell/chunks/chunk-PPVF2N6C.js +0 -3
  204. package/dist/bin/shell/chunks/chunk-WEHA3JFD.js +0 -3
  205. package/dist/bin/shell/chunks/chunk-YQEKKZTU.js +0 -12
  206. package/dist/bin/shell/chunks/cp-OMVKM35F.js +0 -3
  207. package/dist/bin/shell/chunks/du-LUFPVLNW.js +0 -3
  208. package/dist/bin/shell/chunks/find-AWH2KOY7.js +0 -3
  209. package/dist/bin/shell/chunks/gzip-FDPA6EKG.js +0 -3
  210. package/dist/bin/shell/chunks/ln-B35EKC2Q.js +0 -3
  211. package/dist/bin/shell/chunks/ls-Q6ZZ6SQ2.js +0 -3
  212. package/dist/bin/shell/chunks/mkdir-74BP5NTG.js +0 -3
  213. package/dist/bin/shell/chunks/mv-76LAHXFR.js +0 -3
  214. package/dist/bin/shell/chunks/readlink-EHXJNW62.js +0 -3
  215. package/dist/bin/shell/chunks/rg-PXNKNIMY.js +0 -3
  216. package/dist/bin/shell/chunks/rm-TF2NJQIA.js +0 -3
  217. package/dist/bin/shell/chunks/rmdir-7ZIVFZJX.js +0 -3
  218. package/dist/bin/shell/chunks/split-ZNNNHKSP.js +0 -3
  219. package/dist/bin/shell/chunks/sqlite3-KP42NNIY.js +0 -3
  220. package/dist/bundle/chunks/chmod-WM2JFFQC.js +0 -2
  221. package/dist/bundle/chunks/chunk-7IJWBG4I.js +0 -2
  222. package/dist/bundle/chunks/chunk-MLIO3BK2.js +0 -7
  223. package/dist/bundle/chunks/chunk-PIRTX3D3.js +0 -8
  224. package/dist/bundle/chunks/chunk-TBVD66LC.js +0 -10
  225. package/dist/bundle/chunks/chunk-W2Z6LYL6.js +0 -11
  226. package/dist/bundle/chunks/chunk-WN54B5NQ.js +0 -12
  227. package/dist/bundle/chunks/chunk-WXPNKIIH.js +0 -2
  228. package/dist/bundle/chunks/chunk-YJKHREBZ.js +0 -11
  229. package/dist/bundle/chunks/chunk-YUSFCOM7.js +0 -2
  230. package/dist/bundle/chunks/cp-2KZIPZJS.js +0 -2
  231. package/dist/bundle/chunks/du-7AZCLKR6.js +0 -2
  232. package/dist/bundle/chunks/find-END3EAHV.js +0 -2
  233. package/dist/bundle/chunks/gzip-RQOBR22H.js +0 -2
  234. package/dist/bundle/chunks/ln-OPY2ZVGQ.js +0 -2
  235. package/dist/bundle/chunks/ls-ZPXGZX63.js +0 -2
  236. package/dist/bundle/chunks/mkdir-WDDKK2P3.js +0 -2
  237. package/dist/bundle/chunks/mv-ZF6UBVRB.js +0 -2
  238. package/dist/bundle/chunks/readlink-U5OM5A3M.js +0 -2
  239. package/dist/bundle/chunks/rg-NAMXBYKS.js +0 -2
  240. package/dist/bundle/chunks/rm-OAZOF7XI.js +0 -2
  241. package/dist/bundle/chunks/rmdir-YJKPQVCK.js +0 -2
  242. package/dist/bundle/chunks/split-JICLAMP6.js +0 -2
  243. package/dist/bundle/chunks/sqlite3-4EZ4GXVD.js +0 -2
@@ -0,0 +1,273 @@
1
+ /**
2
+ * The single source of truth for shell builtins: every name `type` and
3
+ * `command -v` display as a builtin, classified as:
4
+ *
5
+ * - `handler`: executed by dispatchBuiltin (phase "early" handlers run
6
+ * before user-defined functions — special builtins functions cannot
7
+ * override; phase "late" handlers run after).
8
+ * - `registry`: executed as a registry command (echo, printf, ...) —
9
+ * displayed as builtins for bash parity, resolved externally.
10
+ * - `unimplemented`: displayed as builtins (bash implements them) but
11
+ * just-bash has no implementation; at runtime they fall through to
12
+ * external resolution and fail with exit 127. Static analysis
13
+ * (Bash.analyzeCommands) subtracts these structurally.
14
+ *
15
+ * This module is a LEAF: it imports nothing, so every consumer
16
+ * (dispatch, compgen, type, analysis) can import it without cycles.
17
+ * The handler functions live in builtin-dispatch.ts, keyed by a mapped
18
+ * type derived from this manifest — a manifest `handler` entry without
19
+ * a handler function (or vice versa) is a COMPILE ERROR, which makes
20
+ * the old display-set/dispatch dual truth unrepresentable.
21
+ */
22
+ /** Discriminated union: a handler entry MUST carry its dispatch phase —
23
+ * an optional `phase?` would let a phaseless handler compile and fall
24
+ * silently through to external resolution (exit 127). */
25
+ export type BuiltinManifestEntry = {
26
+ kind: "handler";
27
+ phase: "early" | "late";
28
+ /** Bash special case: dispatch EARLY in POSIX mode even though
29
+ * functions may override in normal mode (eval). */
30
+ posixEarly?: boolean;
31
+ } | {
32
+ kind: "registry";
33
+ } | {
34
+ kind: "unimplemented";
35
+ };
36
+ declare const manifest: {
37
+ readonly export: {
38
+ readonly kind: "handler";
39
+ readonly phase: "early";
40
+ };
41
+ readonly unset: {
42
+ readonly kind: "handler";
43
+ readonly phase: "early";
44
+ };
45
+ readonly exit: {
46
+ readonly kind: "handler";
47
+ readonly phase: "early";
48
+ };
49
+ readonly local: {
50
+ readonly kind: "handler";
51
+ readonly phase: "early";
52
+ };
53
+ readonly set: {
54
+ readonly kind: "handler";
55
+ readonly phase: "early";
56
+ };
57
+ readonly break: {
58
+ readonly kind: "handler";
59
+ readonly phase: "early";
60
+ };
61
+ readonly continue: {
62
+ readonly kind: "handler";
63
+ readonly phase: "early";
64
+ };
65
+ readonly return: {
66
+ readonly kind: "handler";
67
+ readonly phase: "early";
68
+ };
69
+ readonly shift: {
70
+ readonly kind: "handler";
71
+ readonly phase: "early";
72
+ };
73
+ readonly getopts: {
74
+ readonly kind: "handler";
75
+ readonly phase: "early";
76
+ };
77
+ readonly compgen: {
78
+ readonly kind: "handler";
79
+ readonly phase: "early";
80
+ };
81
+ readonly complete: {
82
+ readonly kind: "handler";
83
+ readonly phase: "early";
84
+ };
85
+ readonly compopt: {
86
+ readonly kind: "handler";
87
+ readonly phase: "early";
88
+ };
89
+ readonly pushd: {
90
+ readonly kind: "handler";
91
+ readonly phase: "early";
92
+ };
93
+ readonly popd: {
94
+ readonly kind: "handler";
95
+ readonly phase: "early";
96
+ };
97
+ readonly dirs: {
98
+ readonly kind: "handler";
99
+ readonly phase: "early";
100
+ };
101
+ readonly source: {
102
+ readonly kind: "handler";
103
+ readonly phase: "early";
104
+ };
105
+ readonly ".": {
106
+ readonly kind: "handler";
107
+ readonly phase: "early";
108
+ };
109
+ readonly read: {
110
+ readonly kind: "handler";
111
+ readonly phase: "early";
112
+ };
113
+ readonly mapfile: {
114
+ readonly kind: "handler";
115
+ readonly phase: "early";
116
+ };
117
+ readonly readarray: {
118
+ readonly kind: "handler";
119
+ readonly phase: "early";
120
+ };
121
+ readonly declare: {
122
+ readonly kind: "handler";
123
+ readonly phase: "early";
124
+ };
125
+ readonly typeset: {
126
+ readonly kind: "handler";
127
+ readonly phase: "early";
128
+ };
129
+ readonly readonly: {
130
+ readonly kind: "handler";
131
+ readonly phase: "early";
132
+ };
133
+ readonly eval: {
134
+ readonly kind: "handler";
135
+ readonly phase: "late";
136
+ readonly posixEarly: true;
137
+ };
138
+ readonly cd: {
139
+ readonly kind: "handler";
140
+ readonly phase: "late";
141
+ };
142
+ readonly ":": {
143
+ readonly kind: "handler";
144
+ readonly phase: "late";
145
+ };
146
+ readonly true: {
147
+ readonly kind: "handler";
148
+ readonly phase: "late";
149
+ };
150
+ readonly false: {
151
+ readonly kind: "handler";
152
+ readonly phase: "late";
153
+ };
154
+ readonly let: {
155
+ readonly kind: "handler";
156
+ readonly phase: "late";
157
+ };
158
+ readonly command: {
159
+ readonly kind: "handler";
160
+ readonly phase: "late";
161
+ };
162
+ readonly builtin: {
163
+ readonly kind: "handler";
164
+ readonly phase: "late";
165
+ };
166
+ readonly shopt: {
167
+ readonly kind: "handler";
168
+ readonly phase: "late";
169
+ };
170
+ readonly exec: {
171
+ readonly kind: "handler";
172
+ readonly phase: "late";
173
+ };
174
+ readonly wait: {
175
+ readonly kind: "handler";
176
+ readonly phase: "late";
177
+ };
178
+ readonly type: {
179
+ readonly kind: "handler";
180
+ readonly phase: "late";
181
+ };
182
+ readonly hash: {
183
+ readonly kind: "handler";
184
+ readonly phase: "late";
185
+ };
186
+ readonly help: {
187
+ readonly kind: "handler";
188
+ readonly phase: "late";
189
+ };
190
+ readonly "[": {
191
+ readonly kind: "handler";
192
+ readonly phase: "late";
193
+ };
194
+ readonly test: {
195
+ readonly kind: "handler";
196
+ readonly phase: "late";
197
+ };
198
+ readonly echo: {
199
+ readonly kind: "registry";
200
+ };
201
+ readonly printf: {
202
+ readonly kind: "registry";
203
+ };
204
+ readonly pwd: {
205
+ readonly kind: "registry";
206
+ };
207
+ readonly alias: {
208
+ readonly kind: "registry";
209
+ };
210
+ readonly unalias: {
211
+ readonly kind: "registry";
212
+ };
213
+ readonly history: {
214
+ readonly kind: "registry";
215
+ };
216
+ readonly bg: {
217
+ readonly kind: "unimplemented";
218
+ };
219
+ readonly caller: {
220
+ readonly kind: "unimplemented";
221
+ };
222
+ readonly disown: {
223
+ readonly kind: "unimplemented";
224
+ };
225
+ readonly enable: {
226
+ readonly kind: "unimplemented";
227
+ };
228
+ readonly fc: {
229
+ readonly kind: "unimplemented";
230
+ };
231
+ readonly fg: {
232
+ readonly kind: "unimplemented";
233
+ };
234
+ readonly jobs: {
235
+ readonly kind: "unimplemented";
236
+ };
237
+ readonly kill: {
238
+ readonly kind: "unimplemented";
239
+ };
240
+ readonly suspend: {
241
+ readonly kind: "unimplemented";
242
+ };
243
+ readonly times: {
244
+ readonly kind: "unimplemented";
245
+ };
246
+ readonly trap: {
247
+ readonly kind: "unimplemented";
248
+ };
249
+ readonly ulimit: {
250
+ readonly kind: "unimplemented";
251
+ };
252
+ readonly umask: {
253
+ readonly kind: "unimplemented";
254
+ };
255
+ };
256
+ export declare const BUILTIN_MANIFEST: typeof manifest;
257
+ /** Names displayed as shell builtins (type, command -v, coverage). */
258
+ export declare const SHELL_BUILTINS: Set<string>;
259
+ /** Manifest keys whose kind is "handler", as a type (for the dispatch
260
+ * handler map's bidirectional coverage check). */
261
+ export type ManifestHandlerName = {
262
+ [K in keyof typeof BUILTIN_MANIFEST]: (typeof BUILTIN_MANIFEST)[K] extends {
263
+ kind: "handler";
264
+ } ? K : never;
265
+ }[keyof typeof BUILTIN_MANIFEST];
266
+ /** Names with no implementation (analysis subtracts these). */
267
+ export declare const UNIMPLEMENTED_BUILTIN_NAMES: ReadonlySet<string>;
268
+ /** Dispatch order for a handler name (undefined for non-handlers). */
269
+ export declare function builtinPhase(name: string): "early" | "late" | undefined;
270
+ /** True when a handler dispatches early in POSIX mode despite a "late"
271
+ * phase (eval — the only such builtin). */
272
+ export declare function builtinPosixEarly(name: string): boolean;
273
+ export {};
@@ -9,4 +9,10 @@
9
9
  */
10
10
  import type { ExecResult } from "../../types.js";
11
11
  import type { InterpreterContext } from "../types.js";
12
+ /**
13
+ * Builtin help information: [synopsis, description]
14
+ * The synopsis is the short form shown with -s and in the list.
15
+ * The description is the detailed help text.
16
+ */
17
+ export declare const BUILTIN_HELP: Map<string, [string, string]>;
12
18
  export declare function handleHelp(_ctx: InterpreterContext, args: string[]): ExecResult;
@@ -4,4 +4,7 @@
4
4
  */
5
5
  import type { ExecResult } from "../../types.js";
6
6
  import type { InterpreterContext } from "../types.js";
7
+ /** Every option name shopt recognizes (implemented ∪ stub) — the
8
+ * completion universe for `compgen -A shopt` / `complete -A shopt`. */
9
+ export declare const ALL_SHOPT_OPTIONS: readonly string[];
7
10
  export declare function handleShopt(ctx: InterpreterContext, args: string[]): ExecResult;
@@ -19,23 +19,3 @@ export declare function isPosixSpecialBuiltin(name: string): boolean;
19
19
  * Shell keywords (for type, command -v, etc.)
20
20
  */
21
21
  export declare const SHELL_KEYWORDS: Set<string>;
22
- /**
23
- * Shell builtins (for type, command -v, builtin, etc.)
24
- */
25
- export declare const SHELL_BUILTINS: Set<string>;
26
- /**
27
- * Names in the builtin display sets that have NO implementation: dispatch
28
- * has no handler for them, so at runtime they fall through to external
29
- * resolution and fail with "command not found" (exit 127). Real bash
30
- * implements these; just-bash does not (yet).
31
- *
32
- * Membership in POSIX_SPECIAL_BUILTINS / SHELL_BUILTINS is about DISPLAY
33
- * (type, command -v) and POSIX mode behavior — not about resolvability.
34
- * Static analysis (Bash.analyzeCommands) subtracts this set so its
35
- * results match dispatch. Keep this honest: the parity test in
36
- * command-analysis.test.ts runs every display-set name through both
37
- * runtime dispatch and analysis and fails on any divergence — both when
38
- * a name here gets implemented (remove it) and when a new unimplemented
39
- * name joins a display set (add it).
40
- */
41
- export declare const UNIMPLEMENTED_BUILTIN_NAMES: ReadonlySet<string>;
package/dist/timers.d.ts CHANGED
@@ -1,5 +1,14 @@
1
1
  export declare const _setTimeout: typeof globalThis.setTimeout;
2
2
  export declare const _clearTimeout: typeof globalThis.clearTimeout;
3
+ /**
4
+ * Native setTimeout WITHOUT execution-context binding. `_setTimeout`
5
+ * binds callbacks to the scheduling execution's defense context, which
6
+ * DefenseInDepthBox suppresses once that execution deactivates — correct
7
+ * for intra-execution timers (sleep, fetch deadlines), fatal for host
8
+ * infrastructure callbacks that must fire AFTER the execution ends
9
+ * (e.g. idle teardown of a shared worker). Use this for the latter.
10
+ */
11
+ export declare const _setTimeoutUnbound: typeof globalThis.setTimeout;
3
12
  export interface FiniteTimeoutHandle {
4
13
  cleared: boolean;
5
14
  remainingMs: number;
package/package.json CHANGED
@@ -1,136 +1,135 @@
1
- {
2
- "name": "@jerryan/just-bash",
3
- "version": "3.6.0",
4
- "description": "A simulated bash environment with virtual filesystem",
5
- "repository": {
6
- "type": "git",
7
- "url": "git+https://github.com/JerryAZR/just-bash.git"
8
- },
9
- "homepage": "https://github.com/JerryAZR/just-bash#readme",
10
- "bugs": {
11
- "url": "https://github.com/JerryAZR/just-bash/issues"
12
- },
13
- "type": "module",
14
- "engines": {
15
- "node": ">=20.19"
16
- },
17
- "main": "dist/bundle/index.js",
18
- "types": "dist/index.d.ts",
19
- "exports": {
20
- ".": {
21
- "browser": "./dist/bundle/browser.js",
22
- "require": {
23
- "types": "./dist/index.d.cts",
24
- "default": "./dist/bundle/index.cjs"
25
- },
26
- "import": {
27
- "types": "./dist/index.d.ts",
28
- "default": "./dist/bundle/index.js"
29
- }
30
- },
31
- "./browser": {
32
- "types": "./dist/browser.d.ts",
33
- "import": "./dist/bundle/browser.js"
34
- }
35
- },
36
- "files": [
37
- "dist/bundle/",
38
- "dist/bin/",
39
- "dist/*.d.ts",
40
- "dist/*.d.cts",
41
- "dist/ast/*.d.ts",
42
- "dist/commands/**/*.d.ts",
43
- "dist/commands/sqlite3/worker.js",
44
- "dist/fs/**/*.d.ts",
45
- "dist/interpreter/**/*.d.ts",
46
- "dist/network/**/*.d.ts",
47
- "dist/parser/*.d.ts",
48
- "dist/sandbox/*.d.ts",
49
- "dist/security/*.d.ts",
50
- "dist/transform/**/*.d.ts",
51
- "dist/utils/*.d.ts",
52
- "vendor/cpython-emscripten/",
53
- "README.md",
54
- "CHANGELOG.md",
55
- "dist/AGENTS.md"
56
- ],
57
- "bin": {
58
- "just-bash": "./dist/bin/just-bash.js",
59
- "just-bash-shell": "./dist/bin/shell/shell.js"
60
- },
61
- "publishConfig": {
62
- "access": "public",
63
- "registry": "https://registry.npmjs.org/"
64
- },
65
- "scripts": {
66
- "build": "rm -rf dist && tsc && pnpm build:lib && pnpm build:lib:cjs && pnpm build:browser && pnpm build:cli && pnpm build:shell && pnpm build:worker && pnpm build:clean && cp dist/index.d.ts dist/index.d.cts && sed '1,/^-->/d' AGENTS.npm.md > dist/AGENTS.md",
67
- "build:clean": "find dist -name '*.test.js' -delete && find dist -name '*.test.d.ts' -delete",
68
- "build:worker": "esbuild src/commands/python3/worker.ts --bundle --platform=node --format=esm --outfile=src/commands/python3/worker.js --external:../../../vendor/cpython-emscripten/* && cp src/commands/python3/worker.js dist/commands/python3/worker.js && mkdir -p dist/bin/chunks && cp src/commands/python3/worker.js dist/bin/chunks/worker.js && mkdir -p dist/bundle/chunks && cp src/commands/python3/worker.js dist/bundle/chunks/worker.js && esbuild src/commands/js-exec/js-exec-worker.ts --bundle --platform=node --format=esm --outfile=src/commands/js-exec/js-exec-worker.js --external:quickjs-emscripten && cp src/commands/js-exec/js-exec-worker.js dist/commands/js-exec/js-exec-worker.js && cp src/commands/js-exec/js-exec-worker.js dist/bin/chunks/js-exec-worker.js && cp src/commands/js-exec/js-exec-worker.js dist/bundle/chunks/js-exec-worker.js && esbuild src/commands/sqlite3/worker.ts --bundle --platform=node --format=esm --outfile=src/commands/sqlite3/worker.js --external:sql.js && mkdir -p dist/commands/sqlite3 && cp src/commands/sqlite3/worker.js dist/commands/sqlite3/worker.js && cp src/commands/sqlite3/worker.js dist/bin/chunks/sqlite3-worker.js && cp src/commands/sqlite3/worker.js dist/bundle/chunks/sqlite3-worker.js",
69
- "build:lib": "esbuild dist/index.js --bundle --splitting --platform=node --format=esm --minify --outdir=dist/bundle --chunk-names=chunks/[name]-[hash] --banner:js='import{createRequire} from\"node:module\";const require=createRequire(import.meta.url);' --external:diff --external:sprintf-js --external:turndown --external:sql.js --external:quickjs-emscripten --external:@mongodb-js/zstd --external:node-liblzma --external:seek-bzip --external:guarded-fetch",
70
- "build:lib:cjs": "esbuild dist/index.js --bundle --platform=node --format=cjs --minify --outfile=dist/bundle/index.cjs --external:diff --external:sprintf-js --external:turndown --external:sql.js --external:quickjs-emscripten --external:@mongodb-js/zstd --external:node-liblzma --external:seek-bzip --external:guarded-fetch",
71
- "build:browser": "esbuild dist/browser.js --bundle --platform=browser --format=esm --minify --outfile=dist/bundle/browser.js --external:diff --external:sprintf-js --external:turndown --external:undici --external:guarded-fetch --external:node:zlib --external:@mongodb-js/zstd --external:node-liblzma --external:seek-bzip --define:__BROWSER__=true --alias:node:async_hooks=./src/shims/browser-unsupported.js --alias:node:dns=./src/shims/browser-unsupported.js --alias:node:module=./src/shims/browser-unsupported.js",
72
- "build:cli": "esbuild dist/cli/just-bash.js --bundle --splitting --platform=node --format=esm --minify --outdir=dist/bin --entry-names=[name] --chunk-names=chunks/[name]-[hash] --banner:js='#!/usr/bin/env node\nimport{createRequire} from\"node:module\";const require=createRequire(import.meta.url);' --external:sql.js --external:quickjs-emscripten --external:@mongodb-js/zstd --external:node-liblzma --external:seek-bzip",
73
- "build:shell": "esbuild dist/cli/shell.js --bundle --splitting --platform=node --format=esm --minify --outdir=dist/bin/shell --entry-names=[name] --chunk-names=chunks/[name]-[hash] --banner:js='#!/usr/bin/env node\nimport{createRequire} from\"node:module\";const require=createRequire(import.meta.url);' --external:sql.js --external:quickjs-emscripten --external:@mongodb-js/zstd --external:node-liblzma --external:seek-bzip",
74
- "prepublishOnly": "pnpm test:dist",
75
- "validate": "pnpm lint && pnpm knip && pnpm typecheck && pnpm build && pnpm check:worker-sync && pnpm test:run && pnpm test:wasm && pnpm test:dist",
76
- "typecheck": "tsc --noEmit",
77
- "lint": "pnpm lint:banned",
78
- "check:worker-sync": "node scripts/check-worker-sync.js",
79
- "lint:banned": "node scripts/check-banned-patterns.js",
80
- "lint:fix": "pnpm --workspace-root lint:fix",
81
- "knip": "knip",
82
- "test": "vitest",
83
- "test:run": "vitest run --exclude src/security/fuzzing/ --exclude src/commands/python3/ --exclude src/commands/sqlite3/ --exclude src/commands/js-exec/ --exclude src/agent-examples/python-scripting.test.ts",
84
- "test:dist": "vitest run src/cli/just-bash.bundle.test.ts src/package-contents.test.ts",
85
- "test:unit": "vitest run --config vitest.unit.config.ts",
86
- "test:wasm": "vitest run --config vitest.wasm.config.ts",
87
- "test:comparison": "vitest run --config vitest.comparison.config.ts",
88
- "test:comparison:record": "RECORD_FIXTURES=1 vitest run --config vitest.comparison.config.ts",
89
- "test:coverage": "vitest run --coverage",
90
- "test:coverage:unit": "vitest run --config vitest.unit.config.ts --coverage",
91
- "test:fuzz": "vitest run src/security/fuzzing/",
92
- "test:fuzz:long": "FUZZ_RUNS=10000 vitest run src/security/fuzzing/",
93
- "shell": "tsx src/cli/shell.ts",
94
- "dev:exec": "tsx src/cli/exec.ts"
95
- },
96
- "keywords": [],
97
- "author": "Malte and Claude",
98
- "license": "Apache-2.0",
99
- "devDependencies": {
100
- "@types/ini": "^4.1.1",
101
- "@types/node": "^25.9.5",
102
- "@types/papaparse": "^5.5.2",
103
- "@types/sprintf-js": "^1.1.4",
104
- "@types/sql.js": "^1.4.11",
105
- "@types/turndown": "^5.0.6",
106
- "@vitest/coverage-v8": "^4.1.10",
107
- "esbuild": "^0.27.7",
108
- "fast-check": "^3.23.2",
109
- "knip": "^5.88.1",
110
- "tsx": "^4.23.12",
111
- "typescript": "^5.9.3",
112
- "vitest": "^4.1.10"
113
- },
114
- "dependencies": {
115
- "diff": "^8.0.4",
116
- "fast-xml-parser": "^5.10.1",
117
- "file-type": "^21.3.4",
118
- "guarded-fetch": "0.1.3",
119
- "ini": "^6.0.0",
120
- "modern-tar": "^0.7.7",
121
- "papaparse": "^5.6.0",
122
- "quickjs-emscripten": "^0.32.0",
123
- "re2js": "^1.3.3",
124
- "seek-bzip": "^2.0.0",
125
- "smol-toml": "^1.8.0",
126
- "sprintf-js": "^1.1.3",
127
- "sql.js": "^1.14.1",
128
- "turndown": "^7.2.4",
129
- "undici": "^7.29.0",
130
- "yaml": "^2.9.0"
131
- },
132
- "optionalDependencies": {
133
- "@mongodb-js/zstd": "^7.0.0",
134
- "node-liblzma": "^2.2.0"
135
- }
136
- }
1
+ {
2
+ "name": "@jerryan/just-bash",
3
+ "version": "3.7.0",
4
+ "description": "A simulated bash environment with virtual filesystem",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/JerryAZR/just-bash.git"
8
+ },
9
+ "homepage": "https://github.com/JerryAZR/just-bash#readme",
10
+ "bugs": {
11
+ "url": "https://github.com/JerryAZR/just-bash/issues"
12
+ },
13
+ "type": "module",
14
+ "engines": {
15
+ "node": ">=20.19"
16
+ },
17
+ "main": "dist/bundle/index.js",
18
+ "types": "dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "browser": "./dist/bundle/browser.js",
22
+ "require": {
23
+ "types": "./dist/index.d.cts",
24
+ "default": "./dist/bundle/index.cjs"
25
+ },
26
+ "import": {
27
+ "types": "./dist/index.d.ts",
28
+ "default": "./dist/bundle/index.js"
29
+ }
30
+ },
31
+ "./browser": {
32
+ "types": "./dist/browser.d.ts",
33
+ "import": "./dist/bundle/browser.js"
34
+ }
35
+ },
36
+ "files": [
37
+ "dist/bundle/",
38
+ "dist/bin/",
39
+ "dist/*.d.ts",
40
+ "dist/*.d.cts",
41
+ "dist/ast/*.d.ts",
42
+ "dist/commands/**/*.d.ts",
43
+ "dist/commands/sqlite3/worker.js",
44
+ "dist/fs/**/*.d.ts",
45
+ "dist/interpreter/**/*.d.ts",
46
+ "dist/network/**/*.d.ts",
47
+ "dist/parser/*.d.ts",
48
+ "dist/sandbox/*.d.ts",
49
+ "dist/security/*.d.ts",
50
+ "dist/transform/**/*.d.ts",
51
+ "dist/utils/*.d.ts",
52
+ "vendor/cpython-emscripten/",
53
+ "README.md",
54
+ "CHANGELOG.md",
55
+ "dist/AGENTS.md"
56
+ ],
57
+ "bin": {
58
+ "just-bash": "./dist/bin/just-bash.js",
59
+ "just-bash-shell": "./dist/bin/shell/shell.js"
60
+ },
61
+ "publishConfig": {
62
+ "access": "public",
63
+ "registry": "https://registry.npmjs.org/"
64
+ },
65
+ "keywords": [],
66
+ "author": "Malte and Claude",
67
+ "license": "Apache-2.0",
68
+ "devDependencies": {
69
+ "@types/ini": "^4.1.1",
70
+ "@types/node": "^25.9.5",
71
+ "@types/papaparse": "^5.5.2",
72
+ "@types/sprintf-js": "^1.1.4",
73
+ "@types/sql.js": "^1.4.11",
74
+ "@types/turndown": "^5.0.6",
75
+ "@vitest/coverage-v8": "^4.1.10",
76
+ "esbuild": "^0.27.7",
77
+ "fast-check": "^3.23.2",
78
+ "knip": "^5.88.1",
79
+ "tsx": "^4.23.12",
80
+ "typescript": "^5.9.3",
81
+ "vitest": "^4.1.10"
82
+ },
83
+ "dependencies": {
84
+ "diff": "^8.0.4",
85
+ "fast-xml-parser": "^5.10.1",
86
+ "file-type": "^21.3.4",
87
+ "guarded-fetch": "0.1.3",
88
+ "ini": "^6.0.0",
89
+ "modern-tar": "^0.7.7",
90
+ "papaparse": "^5.6.0",
91
+ "quickjs-emscripten": "^0.32.0",
92
+ "re2js": "^1.3.3",
93
+ "seek-bzip": "^2.0.0",
94
+ "smol-toml": "^1.8.0",
95
+ "sprintf-js": "^1.1.3",
96
+ "sql.js": "^1.14.1",
97
+ "turndown": "^7.2.4",
98
+ "undici": "^7.29.0",
99
+ "yaml": "^2.9.0"
100
+ },
101
+ "optionalDependencies": {
102
+ "@mongodb-js/zstd": "^7.0.0",
103
+ "node-liblzma": "^2.2.0"
104
+ },
105
+ "scripts": {
106
+ "build": "rm -rf dist && tsc && pnpm build:lib && pnpm build:lib:cjs && pnpm build:browser && pnpm build:cli && pnpm build:shell && pnpm build:worker && pnpm build:clean && cp dist/index.d.ts dist/index.d.cts && sed '1,/^-->/d' AGENTS.npm.md > dist/AGENTS.md",
107
+ "build:clean": "find dist -name '*.test.js' -delete && find dist -name '*.test.d.ts' -delete",
108
+ "build:worker": "esbuild src/commands/python3/worker.ts --bundle --platform=node --format=esm --outfile=src/commands/python3/worker.js --external:../../../vendor/cpython-emscripten/* && cp src/commands/python3/worker.js dist/commands/python3/worker.js && mkdir -p dist/bin/chunks && cp src/commands/python3/worker.js dist/bin/chunks/worker.js && mkdir -p dist/bundle/chunks && cp src/commands/python3/worker.js dist/bundle/chunks/worker.js && esbuild src/commands/js-exec/js-exec-worker.ts --bundle --platform=node --format=esm --outfile=src/commands/js-exec/js-exec-worker.js --external:quickjs-emscripten && cp src/commands/js-exec/js-exec-worker.js dist/commands/js-exec/js-exec-worker.js && cp src/commands/js-exec/js-exec-worker.js dist/bin/chunks/js-exec-worker.js && cp src/commands/js-exec/js-exec-worker.js dist/bundle/chunks/js-exec-worker.js && esbuild src/commands/sqlite3/worker.ts --bundle --platform=node --format=esm --outfile=src/commands/sqlite3/worker.js --external:sql.js && mkdir -p dist/commands/sqlite3 && cp src/commands/sqlite3/worker.js dist/commands/sqlite3/worker.js && cp src/commands/sqlite3/worker.js dist/bin/chunks/sqlite3-worker.js && cp src/commands/sqlite3/worker.js dist/bundle/chunks/sqlite3-worker.js",
109
+ "build:lib": "esbuild dist/index.js --bundle --splitting --platform=node --format=esm --minify --outdir=dist/bundle --chunk-names=chunks/[name]-[hash] --banner:js='import{createRequire} from\"node:module\";const require=createRequire(import.meta.url);' --external:diff --external:sprintf-js --external:turndown --external:sql.js --external:quickjs-emscripten --external:@mongodb-js/zstd --external:node-liblzma --external:seek-bzip --external:guarded-fetch",
110
+ "build:lib:cjs": "esbuild dist/index.js --bundle --platform=node --format=cjs --minify --outfile=dist/bundle/index.cjs --external:diff --external:sprintf-js --external:turndown --external:sql.js --external:quickjs-emscripten --external:@mongodb-js/zstd --external:node-liblzma --external:seek-bzip --external:guarded-fetch",
111
+ "build:browser": "esbuild dist/browser.js --bundle --platform=browser --format=esm --minify --outfile=dist/bundle/browser.js --external:diff --external:sprintf-js --external:turndown --external:undici --external:guarded-fetch --external:node:zlib --external:@mongodb-js/zstd --external:node-liblzma --external:seek-bzip --define:__BROWSER__=true --alias:node:async_hooks=./src/shims/browser-unsupported.js --alias:node:dns=./src/shims/browser-unsupported.js --alias:node:module=./src/shims/browser-unsupported.js",
112
+ "build:cli": "esbuild dist/cli/just-bash.js --bundle --splitting --platform=node --format=esm --minify --outdir=dist/bin --entry-names=[name] --chunk-names=chunks/[name]-[hash] --banner:js='#!/usr/bin/env node\nimport{createRequire} from\"node:module\";const require=createRequire(import.meta.url);' --external:sql.js --external:quickjs-emscripten --external:@mongodb-js/zstd --external:node-liblzma --external:seek-bzip",
113
+ "build:shell": "esbuild dist/cli/shell.js --bundle --splitting --platform=node --format=esm --minify --outdir=dist/bin/shell --entry-names=[name] --chunk-names=chunks/[name]-[hash] --banner:js='#!/usr/bin/env node\nimport{createRequire} from\"node:module\";const require=createRequire(import.meta.url);' --external:sql.js --external:quickjs-emscripten --external:@mongodb-js/zstd --external:node-liblzma --external:seek-bzip",
114
+ "validate": "pnpm lint && pnpm knip && pnpm typecheck && pnpm build && pnpm check:worker-sync && pnpm test:run && pnpm test:wasm && pnpm test:dist",
115
+ "typecheck": "tsc --noEmit",
116
+ "lint": "pnpm lint:banned",
117
+ "check:worker-sync": "node scripts/check-worker-sync.js",
118
+ "lint:banned": "node scripts/check-banned-patterns.js",
119
+ "lint:fix": "pnpm --workspace-root lint:fix",
120
+ "knip": "knip",
121
+ "test": "vitest",
122
+ "test:run": "vitest run --exclude src/security/fuzzing/ --exclude src/commands/python3/ --exclude src/commands/sqlite3/ --exclude src/commands/js-exec/ --exclude src/agent-examples/python-scripting.test.ts",
123
+ "test:dist": "vitest run src/cli/just-bash.bundle.test.ts src/package-contents.test.ts",
124
+ "test:unit": "vitest run --config vitest.unit.config.ts",
125
+ "test:wasm": "vitest run --config vitest.wasm.config.ts",
126
+ "test:comparison": "vitest run --config vitest.comparison.config.ts",
127
+ "test:comparison:record": "RECORD_FIXTURES=1 vitest run --config vitest.comparison.config.ts",
128
+ "test:coverage": "vitest run --coverage",
129
+ "test:coverage:unit": "vitest run --config vitest.unit.config.ts --coverage",
130
+ "test:fuzz": "vitest run src/security/fuzzing/",
131
+ "test:fuzz:long": "FUZZ_RUNS=10000 vitest run src/security/fuzzing/",
132
+ "shell": "tsx src/cli/shell.ts",
133
+ "dev:exec": "tsx src/cli/exec.ts"
134
+ }
135
+ }