just-bash 2.11.15 → 2.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/dist/Bash.d.ts +11 -0
  2. package/dist/bin/chunks/awk2-ZE5HJBNV.js +2 -0
  3. package/dist/bin/{shell/chunks/bash-WB6O736J.js → chunks/bash-6ZHZ6BX7.js} +1 -1
  4. package/dist/bin/chunks/chunk-253LRF5J.js +11 -0
  5. package/dist/bin/chunks/chunk-2BC3N3L2.js +16 -0
  6. package/dist/bin/chunks/{chunk-D2VMRCQU.js → chunk-35JD7YEM.js} +12 -12
  7. package/dist/bin/chunks/{chunk-XB2MDT3B.js → chunk-3NVWSLHI.js} +1 -1
  8. package/dist/bin/chunks/{chunk-ISOXAKGQ.js → chunk-45MJQ2LX.js} +4 -4
  9. package/dist/bin/chunks/{chunk-JXC25GVQ.js → chunk-47HZU3SY.js} +1 -1
  10. package/dist/bin/chunks/chunk-4OALHZXB.js +2 -0
  11. package/dist/bin/{shell/chunks/chunk-K5IXNHO5.js → chunks/chunk-6KZRLMG3.js} +3 -3
  12. package/dist/bin/chunks/{chunk-AHMZLMTU.js → chunk-6L4K3UGO.js} +1 -1
  13. package/dist/bin/{shell/chunks/chunk-V4CRXAQO.js → chunks/chunk-7SWOLTCR.js} +1 -1
  14. package/dist/bin/chunks/chunk-C7TH4MVZ.js +14 -0
  15. package/dist/bin/{shell/chunks/chunk-BWWPUUC5.js → chunks/chunk-EPIOK4SY.js} +1 -1
  16. package/dist/bin/chunks/chunk-F37UEO7A.js +10 -0
  17. package/dist/bin/chunks/chunk-GO6FXSC4.js +6 -0
  18. package/dist/bin/chunks/{chunk-PDVXLMUU.js → chunk-H7Y3TH22.js} +17 -17
  19. package/dist/bin/chunks/chunk-JWVOLGWZ.js +12 -0
  20. package/dist/bin/chunks/chunk-KTFEQPO7.js +4 -0
  21. package/dist/bin/chunks/chunk-N4EU64Y4.js +9 -0
  22. package/dist/bin/chunks/{chunk-LW7FS3EH.js → chunk-ND23BJUM.js} +1 -1
  23. package/dist/bin/chunks/chunk-QC46PWBQ.js +63 -0
  24. package/dist/bin/{shell/chunks/chunk-XORPAMNK.js → chunks/chunk-RYXW3SZQ.js} +1 -1
  25. package/dist/bin/{shell/chunks/chunk-K7XSYP4L.js → chunks/chunk-VZKEP45B.js} +13 -13
  26. package/dist/bin/chunks/chunk-WIWKAGK6.js +2 -0
  27. package/dist/bin/chunks/env-HOVBNLUR.js +2 -0
  28. package/dist/bin/chunks/{expansion-AMH5BAVV.js → expansion-QVHAYGVZ.js} +1 -1
  29. package/dist/bin/chunks/find-4YAO7JQS.js +2 -0
  30. package/dist/bin/chunks/flag-coverage-F4EAJUHL.js +2 -0
  31. package/dist/bin/chunks/help-4H52JYYC.js +2 -0
  32. package/dist/bin/chunks/{jq-TIHNHMOR.js → jq-CXSPO2J5.js} +1 -1
  33. package/dist/bin/chunks/printf-P3QVL4IO.js +2 -0
  34. package/dist/bin/chunks/python3-XRP5IZRL.js +16 -0
  35. package/dist/bin/chunks/rg-34GE6REQ.js +2 -0
  36. package/dist/bin/chunks/sed-DNLJZZXZ.js +2 -0
  37. package/dist/bin/chunks/sleep-RA6DYTJX.js +2 -0
  38. package/dist/bin/chunks/sqlite3-ZUGDKEIT.js +2 -0
  39. package/dist/bin/chunks/tar-GP2CCB47.js +2 -0
  40. package/dist/bin/chunks/time-E5YULACD.js +2 -0
  41. package/dist/bin/chunks/timeout-TCIINQNA.js +2 -0
  42. package/dist/bin/chunks/worker.js +57 -22
  43. package/dist/bin/chunks/{xan-3IA4WP2G.js → xan-7NIVZ3HP.js} +1 -1
  44. package/dist/bin/{shell/chunks/xargs-YWPEV2QC.js → chunks/xargs-GBL6PZ2K.js} +1 -1
  45. package/dist/bin/chunks/yq-L5ZSGLLO.js +2 -0
  46. package/dist/bin/just-bash.js +286 -286
  47. package/dist/bin/shell/chunks/awk2-ZE5HJBNV.js +2 -0
  48. package/dist/bin/{chunks/bash-WB6O736J.js → shell/chunks/bash-6ZHZ6BX7.js} +1 -1
  49. package/dist/bin/shell/chunks/chunk-253LRF5J.js +11 -0
  50. package/dist/bin/shell/chunks/chunk-2BC3N3L2.js +16 -0
  51. package/dist/bin/shell/chunks/{chunk-D2VMRCQU.js → chunk-35JD7YEM.js} +12 -12
  52. package/dist/bin/shell/chunks/{chunk-XB2MDT3B.js → chunk-3NVWSLHI.js} +1 -1
  53. package/dist/bin/shell/chunks/{chunk-ISOXAKGQ.js → chunk-45MJQ2LX.js} +4 -4
  54. package/dist/bin/shell/chunks/{chunk-JXC25GVQ.js → chunk-47HZU3SY.js} +1 -1
  55. package/dist/bin/shell/chunks/chunk-4OALHZXB.js +2 -0
  56. package/dist/bin/{chunks/chunk-K5IXNHO5.js → shell/chunks/chunk-6KZRLMG3.js} +3 -3
  57. package/dist/bin/shell/chunks/{chunk-AHMZLMTU.js → chunk-6L4K3UGO.js} +1 -1
  58. package/dist/bin/{chunks/chunk-V4CRXAQO.js → shell/chunks/chunk-7SWOLTCR.js} +1 -1
  59. package/dist/bin/shell/chunks/chunk-C7TH4MVZ.js +14 -0
  60. package/dist/bin/{chunks/chunk-BWWPUUC5.js → shell/chunks/chunk-EPIOK4SY.js} +1 -1
  61. package/dist/bin/shell/chunks/chunk-F37UEO7A.js +10 -0
  62. package/dist/bin/shell/chunks/chunk-GO6FXSC4.js +6 -0
  63. package/dist/bin/shell/chunks/{chunk-PDVXLMUU.js → chunk-H7Y3TH22.js} +17 -17
  64. package/dist/bin/shell/chunks/chunk-JWVOLGWZ.js +12 -0
  65. package/dist/bin/shell/chunks/chunk-KTFEQPO7.js +4 -0
  66. package/dist/bin/shell/chunks/chunk-N4EU64Y4.js +9 -0
  67. package/dist/bin/shell/chunks/{chunk-LW7FS3EH.js → chunk-ND23BJUM.js} +1 -1
  68. package/dist/bin/shell/chunks/chunk-QC46PWBQ.js +63 -0
  69. package/dist/bin/{chunks/chunk-XORPAMNK.js → shell/chunks/chunk-RYXW3SZQ.js} +1 -1
  70. package/dist/bin/{chunks/chunk-K7XSYP4L.js → shell/chunks/chunk-VZKEP45B.js} +13 -13
  71. package/dist/bin/shell/chunks/chunk-WIWKAGK6.js +2 -0
  72. package/dist/bin/shell/chunks/env-HOVBNLUR.js +2 -0
  73. package/dist/bin/shell/chunks/{expansion-AMH5BAVV.js → expansion-QVHAYGVZ.js} +1 -1
  74. package/dist/bin/shell/chunks/find-4YAO7JQS.js +2 -0
  75. package/dist/bin/shell/chunks/flag-coverage-F4EAJUHL.js +2 -0
  76. package/dist/bin/shell/chunks/help-4H52JYYC.js +2 -0
  77. package/dist/bin/shell/chunks/{jq-TIHNHMOR.js → jq-CXSPO2J5.js} +1 -1
  78. package/dist/bin/shell/chunks/printf-P3QVL4IO.js +2 -0
  79. package/dist/bin/shell/chunks/python3-XRP5IZRL.js +16 -0
  80. package/dist/bin/shell/chunks/rg-34GE6REQ.js +2 -0
  81. package/dist/bin/shell/chunks/sed-DNLJZZXZ.js +2 -0
  82. package/dist/bin/shell/chunks/sleep-RA6DYTJX.js +2 -0
  83. package/dist/bin/shell/chunks/sqlite3-ZUGDKEIT.js +2 -0
  84. package/dist/bin/shell/chunks/tar-GP2CCB47.js +2 -0
  85. package/dist/bin/shell/chunks/time-E5YULACD.js +2 -0
  86. package/dist/bin/shell/chunks/timeout-TCIINQNA.js +2 -0
  87. package/dist/bin/shell/chunks/{xan-3IA4WP2G.js → xan-7NIVZ3HP.js} +1 -1
  88. package/dist/bin/{chunks/xargs-YWPEV2QC.js → shell/chunks/xargs-GBL6PZ2K.js} +1 -1
  89. package/dist/bin/shell/chunks/yq-L5ZSGLLO.js +2 -0
  90. package/dist/bin/shell/shell.js +288 -288
  91. package/dist/bundle/browser.js +619 -617
  92. package/dist/bundle/chunks/awk2-T6LHPVZE.js +1 -0
  93. package/dist/bundle/chunks/{bash-DYXMG247.js → bash-IJWYRKFO.js} +1 -1
  94. package/dist/bundle/chunks/chunk-2GOYXRRP.js +15 -0
  95. package/dist/bundle/chunks/chunk-3RA5L262.js +8 -0
  96. package/dist/bundle/chunks/{chunk-IBG6HR7V.js → chunk-AOFQVUAD.js} +1 -1
  97. package/dist/bundle/chunks/{chunk-3KWUDRIP.js → chunk-BAAVD5NO.js} +13 -13
  98. package/dist/bundle/chunks/{chunk-HDZ4QEVJ.js → chunk-BNVESM72.js} +17 -17
  99. package/dist/bundle/chunks/{chunk-U5TNQJ3C.js → chunk-C6ZZC5FL.js} +1 -1
  100. package/dist/bundle/chunks/chunk-D6CWQ5DW.js +5 -0
  101. package/dist/bundle/chunks/chunk-DKOIE53N.js +11 -0
  102. package/dist/bundle/chunks/chunk-FPGA7RT4.js +62 -0
  103. package/dist/bundle/chunks/{chunk-PSW6BMXW.js → chunk-GFQRA5P5.js} +3 -3
  104. package/dist/bundle/chunks/{chunk-FJNVFD75.js → chunk-HBB2R24Y.js} +12 -12
  105. package/dist/bundle/chunks/chunk-IPJHKYVM.js +1 -0
  106. package/dist/bundle/chunks/chunk-JOVMV4XV.js +13 -0
  107. package/dist/bundle/chunks/{chunk-FWYCF7NE.js → chunk-KPFCTJEX.js} +1 -1
  108. package/dist/bundle/chunks/chunk-LEOLL6PF.js +1 -0
  109. package/dist/bundle/chunks/{chunk-3JDQKHMS.js → chunk-LN5KAJOV.js} +1 -1
  110. package/dist/bundle/chunks/chunk-R7KYILVY.js +3 -0
  111. package/dist/bundle/chunks/{chunk-M2LI252W.js → chunk-T56QNPHK.js} +1 -1
  112. package/dist/bundle/chunks/chunk-VFBZTF5G.js +9 -0
  113. package/dist/bundle/chunks/{chunk-V4CDPGZH.js → chunk-WCVBECE6.js} +4 -4
  114. package/dist/bundle/chunks/{chunk-OAOCWUTE.js → chunk-XULIVM35.js} +1 -1
  115. package/dist/bundle/chunks/chunk-YCABLDKV.js +10 -0
  116. package/dist/bundle/chunks/{chunk-SXR3EI72.js → chunk-ZSJYNBAF.js} +1 -1
  117. package/dist/bundle/chunks/env-XZY4LKEO.js +1 -0
  118. package/dist/bundle/chunks/{expansion-5HXXJ2SG.js → expansion-NCEBD7KB.js} +1 -1
  119. package/dist/bundle/chunks/find-DQFMWHAC.js +1 -0
  120. package/dist/bundle/chunks/flag-coverage-U322DJFL.js +1 -0
  121. package/dist/bundle/chunks/help-IA5CMGR4.js +1 -0
  122. package/dist/bundle/chunks/{jq-YDGLHC7M.js → jq-MYSLFARY.js} +1 -1
  123. package/dist/bundle/chunks/printf-CX64KX2P.js +1 -0
  124. package/dist/bundle/chunks/python3-E7VF6UYO.js +15 -0
  125. package/dist/bundle/chunks/rg-DMOXE47H.js +1 -0
  126. package/dist/bundle/chunks/sed-3ZCNFRHI.js +1 -0
  127. package/dist/bundle/chunks/sleep-RKLUWJ7F.js +1 -0
  128. package/dist/bundle/chunks/sqlite3-ZGX3YFJB.js +1 -0
  129. package/dist/bundle/chunks/tar-H6XTXOAP.js +1 -0
  130. package/dist/bundle/chunks/time-ZEEYNXNZ.js +1 -0
  131. package/dist/bundle/chunks/timeout-LYYTWG45.js +1 -0
  132. package/dist/bundle/chunks/worker.js +57 -22
  133. package/dist/bundle/chunks/{xan-Y62IEVU4.js → xan-VTO4FP3H.js} +1 -1
  134. package/dist/bundle/chunks/{xargs-OGI2NN6J.js → xargs-2BBAQDTC.js} +1 -1
  135. package/dist/bundle/chunks/yq-JRZFRYSK.js +1 -0
  136. package/dist/bundle/index.cjs +774 -772
  137. package/dist/bundle/index.js +243 -243
  138. package/dist/commands/python3/protocol.d.ts +0 -1
  139. package/dist/commands/python3/python3.d.ts +2 -0
  140. package/dist/commands/sqlite3/sqlite3.d.ts +6 -0
  141. package/dist/commands/tar/archive.d.ts +20 -6
  142. package/dist/interpreter/errors.d.ts +10 -2
  143. package/dist/interpreter/helpers/result.d.ts +1 -1
  144. package/dist/interpreter/interpreter.d.ts +2 -0
  145. package/dist/interpreter/types.d.ts +7 -0
  146. package/dist/limits.d.ts +4 -0
  147. package/dist/network/allow-list.d.ts +5 -0
  148. package/dist/network/types.d.ts +6 -0
  149. package/dist/sandbox/Sandbox.d.ts +6 -0
  150. package/dist/timers.d.ts +15 -0
  151. package/dist/types.d.ts +17 -0
  152. package/dist/vitest-setup.d.ts +1 -0
  153. package/package.json +2 -2
  154. package/dist/bin/chunks/awk2-PWEGD656.js +0 -2
  155. package/dist/bin/chunks/chunk-5UH3Q7QT.js +0 -11
  156. package/dist/bin/chunks/chunk-5UHJVSR5.js +0 -10
  157. package/dist/bin/chunks/chunk-EFX3F2HZ.js +0 -63
  158. package/dist/bin/chunks/chunk-KLMOJKL4.js +0 -16
  159. package/dist/bin/chunks/chunk-N73TVRMN.js +0 -14
  160. package/dist/bin/chunks/chunk-P7UCWJ33.js +0 -12
  161. package/dist/bin/chunks/chunk-RDZMRK5M.js +0 -6
  162. package/dist/bin/chunks/chunk-W2FKF3MM.js +0 -9
  163. package/dist/bin/chunks/env-EVLPSWFF.js +0 -2
  164. package/dist/bin/chunks/find-PHHSZYDL.js +0 -2
  165. package/dist/bin/chunks/flag-coverage-KFNWHFPU.js +0 -2
  166. package/dist/bin/chunks/help-JF5TTAKQ.js +0 -2
  167. package/dist/bin/chunks/printf-4NJFGX3O.js +0 -2
  168. package/dist/bin/chunks/python3-YJ7YGEW7.js +0 -16
  169. package/dist/bin/chunks/rg-EJJ3ILD5.js +0 -2
  170. package/dist/bin/chunks/sed-3DO5EXEU.js +0 -2
  171. package/dist/bin/chunks/sleep-3QRDZXBH.js +0 -2
  172. package/dist/bin/chunks/sqlite3-4SEIR46P.js +0 -2
  173. package/dist/bin/chunks/tar-7B5KH3QG.js +0 -2
  174. package/dist/bin/chunks/time-4C3A4THJ.js +0 -2
  175. package/dist/bin/chunks/timeout-RS7REDYT.js +0 -2
  176. package/dist/bin/chunks/yq-OUNV2BWM.js +0 -2
  177. package/dist/bin/shell/chunks/awk2-PWEGD656.js +0 -2
  178. package/dist/bin/shell/chunks/chunk-5UH3Q7QT.js +0 -11
  179. package/dist/bin/shell/chunks/chunk-5UHJVSR5.js +0 -10
  180. package/dist/bin/shell/chunks/chunk-EFX3F2HZ.js +0 -63
  181. package/dist/bin/shell/chunks/chunk-KLMOJKL4.js +0 -16
  182. package/dist/bin/shell/chunks/chunk-N73TVRMN.js +0 -14
  183. package/dist/bin/shell/chunks/chunk-P7UCWJ33.js +0 -12
  184. package/dist/bin/shell/chunks/chunk-RDZMRK5M.js +0 -6
  185. package/dist/bin/shell/chunks/chunk-W2FKF3MM.js +0 -9
  186. package/dist/bin/shell/chunks/env-EVLPSWFF.js +0 -2
  187. package/dist/bin/shell/chunks/find-PHHSZYDL.js +0 -2
  188. package/dist/bin/shell/chunks/flag-coverage-KFNWHFPU.js +0 -2
  189. package/dist/bin/shell/chunks/help-JF5TTAKQ.js +0 -2
  190. package/dist/bin/shell/chunks/printf-4NJFGX3O.js +0 -2
  191. package/dist/bin/shell/chunks/python3-YJ7YGEW7.js +0 -16
  192. package/dist/bin/shell/chunks/rg-EJJ3ILD5.js +0 -2
  193. package/dist/bin/shell/chunks/sed-3DO5EXEU.js +0 -2
  194. package/dist/bin/shell/chunks/sleep-3QRDZXBH.js +0 -2
  195. package/dist/bin/shell/chunks/sqlite3-4SEIR46P.js +0 -2
  196. package/dist/bin/shell/chunks/tar-7B5KH3QG.js +0 -2
  197. package/dist/bin/shell/chunks/time-4C3A4THJ.js +0 -2
  198. package/dist/bin/shell/chunks/timeout-RS7REDYT.js +0 -2
  199. package/dist/bin/shell/chunks/yq-OUNV2BWM.js +0 -2
  200. package/dist/bundle/chunks/awk2-BDPR2JPZ.js +0 -1
  201. package/dist/bundle/chunks/chunk-73RYQHTW.js +0 -10
  202. package/dist/bundle/chunks/chunk-7WX4V2UH.js +0 -9
  203. package/dist/bundle/chunks/chunk-CSBFBYLD.js +0 -13
  204. package/dist/bundle/chunks/chunk-JP44OYZS.js +0 -5
  205. package/dist/bundle/chunks/chunk-OGDTSM2Q.js +0 -8
  206. package/dist/bundle/chunks/chunk-VZWXH2PZ.js +0 -62
  207. package/dist/bundle/chunks/chunk-XNL7YAHW.js +0 -11
  208. package/dist/bundle/chunks/chunk-ZKLK6C7H.js +0 -15
  209. package/dist/bundle/chunks/env-S547XMN7.js +0 -1
  210. package/dist/bundle/chunks/find-6U6YYAEP.js +0 -1
  211. package/dist/bundle/chunks/flag-coverage-ZCNVOYRY.js +0 -1
  212. package/dist/bundle/chunks/help-T2NGLTSG.js +0 -1
  213. package/dist/bundle/chunks/printf-IO3EBW5H.js +0 -1
  214. package/dist/bundle/chunks/python3-6Y4Z63NZ.js +0 -15
  215. package/dist/bundle/chunks/rg-4YNHHQAE.js +0 -1
  216. package/dist/bundle/chunks/sed-2K6ULZ6P.js +0 -1
  217. package/dist/bundle/chunks/sleep-U2ORRQJB.js +0 -1
  218. package/dist/bundle/chunks/sqlite3-Z2IGWYCE.js +0 -1
  219. package/dist/bundle/chunks/tar-K7K7BL55.js +0 -1
  220. package/dist/bundle/chunks/time-BPT76IHZ.js +0 -1
  221. package/dist/bundle/chunks/timeout-5UJUQXOE.js +0 -1
  222. package/dist/bundle/chunks/yq-CESEW5B3.js +0 -1
@@ -67,7 +67,6 @@ export declare const Flags: {
67
67
  readonly FORCE: 2;
68
68
  readonly MKDIR_RECURSIVE: 1;
69
69
  };
70
- /** Create a new SharedArrayBuffer for the protocol */
71
70
  export declare function createSharedBuffer(): SharedArrayBuffer;
72
71
  /**
73
72
  * Helper class for reading/writing protocol data
@@ -10,5 +10,7 @@
10
10
  * This command is Node.js only (uses worker_threads).
11
11
  */
12
12
  import type { Command } from "../../types.js";
13
+ /** @internal Reset queue state — for tests only */
14
+ export declare function _resetExecutionQueue(): void;
13
15
  export declare const python3Command: Command;
14
16
  export declare const pythonCommand: Command;
@@ -10,7 +10,13 @@
10
10
  * Security: sql.js is fully sandboxed - it cannot access the real filesystem,
11
11
  * making ATTACH DATABASE and VACUUM INTO safe (they only operate on virtual buffers).
12
12
  */
13
+ import { Worker } from "node:worker_threads";
13
14
  import type { Command } from "../../types.js";
15
+ import type { WorkerInput } from "./worker.js";
16
+ /** @internal Exposed for testing only */
17
+ export declare const _internals: {
18
+ createWorker(workerPath: string, input: WorkerInput): Worker;
19
+ };
14
20
  export declare const sqlite3Command: Command;
15
21
  import type { CommandFuzzInfo } from "../fuzz-flags-types.js";
16
22
  export declare const flagsForFuzzing: CommandFuzzInfo;
@@ -84,9 +84,16 @@ export declare function parseBzip2CompressedArchive(data: Uint8Array): Promise<{
84
84
  error?: string;
85
85
  }>;
86
86
  /**
87
- * Parse an xz-compressed tar archive
88
- */
89
- export declare function parseXzCompressedArchive(data: Uint8Array): Promise<{
87
+ * Parse an xz-compressed tar archive.
88
+ *
89
+ * @param data - Raw archive bytes
90
+ * @param options - Options controlling decompression behavior
91
+ * @param options.allowNativeCodecs - When false (default), rejects xz decompression
92
+ * to avoid passing untrusted bytes to native addons (node-liblzma).
93
+ */
94
+ export declare function parseXzCompressedArchive(data: Uint8Array, options?: {
95
+ allowNativeCodecs?: boolean;
96
+ }): Promise<{
90
97
  entries: ParsedEntry[];
91
98
  error?: string;
92
99
  }>;
@@ -99,9 +106,16 @@ export declare function isZstdCompressed(data: Uint8Array): boolean;
99
106
  */
100
107
  export declare function createZstdCompressedArchive(entries: TarCreateEntry[]): Promise<Uint8Array>;
101
108
  /**
102
- * Parse a zstd-compressed tar archive
103
- */
104
- export declare function parseZstdCompressedArchive(data: Uint8Array): Promise<{
109
+ * Parse a zstd-compressed tar archive.
110
+ *
111
+ * @param data - Raw archive bytes
112
+ * @param options - Options controlling decompression behavior
113
+ * @param options.allowNativeCodecs - When false (default), rejects zstd decompression
114
+ * to avoid passing untrusted bytes to native addons (@mongodb-js/zstd).
115
+ */
116
+ export declare function parseZstdCompressedArchive(data: Uint8Array, options?: {
117
+ allowNativeCodecs?: boolean;
118
+ }): Promise<{
105
119
  entries: ParsedEntry[];
106
120
  error?: string;
107
121
  }>;
@@ -115,10 +115,18 @@ export declare class BraceExpansionError extends ControlFlowError {
115
115
  * Exit code 126 indicates a limit was exceeded.
116
116
  */
117
117
  export declare class ExecutionLimitError extends ControlFlowError {
118
- readonly limitType: "recursion" | "commands" | "iterations" | "string_length" | "glob_operations" | "substitution_depth";
118
+ readonly limitType: "recursion" | "commands" | "iterations" | "string_length" | "glob_operations" | "substitution_depth" | "output_size" | "file_descriptors";
119
119
  readonly name = "ExecutionLimitError";
120
120
  static readonly EXIT_CODE = 126;
121
- constructor(message: string, limitType: "recursion" | "commands" | "iterations" | "string_length" | "glob_operations" | "substitution_depth", stdout?: string, stderr?: string);
121
+ constructor(message: string, limitType: "recursion" | "commands" | "iterations" | "string_length" | "glob_operations" | "substitution_depth" | "output_size" | "file_descriptors", stdout?: string, stderr?: string);
122
+ }
123
+ /**
124
+ * Error thrown when execution is aborted via an AbortSignal.
125
+ * Used by the `timeout` command to stop timed-out commands at statement boundaries.
126
+ */
127
+ export declare class ExecutionAbortedError extends ControlFlowError {
128
+ readonly name = "ExecutionAbortedError";
129
+ constructor(stdout?: string, stderr?: string);
122
130
  }
123
131
  /**
124
132
  * Error thrown when break/continue is called in a subshell that was
@@ -51,4 +51,4 @@ export declare function testResult(passed: boolean): ExecResult;
51
51
  * @param stderr - Accumulated stderr to include
52
52
  * @throws ExecutionLimitError always
53
53
  */
54
- export declare function throwExecutionLimit(message: string, limitType: "recursion" | "iterations" | "commands", stdout?: string, stderr?: string): never;
54
+ export declare function throwExecutionLimit(message: string, limitType: "recursion" | "iterations" | "commands" | "string_length" | "glob_operations" | "substitution_depth" | "output_size" | "file_descriptors", stdout?: string, stderr?: string): never;
@@ -23,6 +23,8 @@ export interface InterpreterOptions {
23
23
  exec: (script: string, options?: {
24
24
  env?: Record<string, string>;
25
25
  cwd?: string;
26
+ replaceEnv?: boolean;
27
+ signal?: AbortSignal;
26
28
  }) => Promise<ExecResult>;
27
29
  /** Optional secure fetch function for network-enabled commands */
28
30
  fetch?: SecureFetch;
@@ -297,6 +297,11 @@ export interface InterpreterState extends VariableAttributeState, LocalScopingSt
297
297
  * inside $(...) or backticks.
298
298
  */
299
299
  suppressVerbose?: boolean;
300
+ /**
301
+ * Abort signal for cooperative cancellation.
302
+ * Checked at statement boundaries; when aborted, execution stops.
303
+ */
304
+ signal?: AbortSignal;
300
305
  }
301
306
  export interface InterpreterContext {
302
307
  state: InterpreterState;
@@ -307,6 +312,8 @@ export interface InterpreterContext {
307
312
  execFn: (script: string, options?: {
308
313
  env?: Record<string, string>;
309
314
  cwd?: string;
315
+ replaceEnv?: boolean;
316
+ signal?: AbortSignal;
310
317
  }) => Promise<ExecResult>;
311
318
  executeScript: (node: ScriptNode) => Promise<ExecResult>;
312
319
  executeStatement: (node: StatementNode) => Promise<ExecResult>;
package/dist/limits.d.ts CHANGED
@@ -37,6 +37,10 @@ export interface ExecutionLimits {
37
37
  maxSubstitutionDepth?: number;
38
38
  /** Maximum brace expansion results (default: 10000) */
39
39
  maxBraceExpansionResults?: number;
40
+ /** Maximum total output size (stdout + stderr) in bytes (default: 10MB = 10485760) */
41
+ maxOutputSize?: number;
42
+ /** Maximum number of open file descriptors (default: 1024) */
43
+ maxFileDescriptors?: number;
40
44
  }
41
45
  /**
42
46
  * Resolve execution limits by merging user-provided limits with defaults.
@@ -43,6 +43,11 @@ export declare function matchesAllowListEntry(url: string, allowedEntry: string)
43
43
  * @returns true if the URL is allowed
44
44
  */
45
45
  export declare function isUrlAllowed(url: string, allowedUrlPrefixes: string[]): boolean;
46
+ /**
47
+ * Check if a hostname is a private/loopback IP address.
48
+ * Only checks the string format — does not perform DNS resolution.
49
+ */
50
+ export declare function isPrivateIp(hostname: string): boolean;
46
51
  /**
47
52
  * Validates an allow-list configuration.
48
53
  * Each entry must be a full origin (scheme + host), optionally followed by a path prefix.
@@ -53,6 +53,12 @@ export interface NetworkConfig {
53
53
  * Responses larger than this will be rejected with ResponseTooLargeError.
54
54
  */
55
55
  maxResponseSize?: number;
56
+ /**
57
+ * Reject URLs with private/loopback IP addresses as hostnames.
58
+ * This is a URL-string-level check only (no DNS resolution).
59
+ * Useful for mitigating SSRF attacks. Default: false (opt-in).
60
+ */
61
+ denyPrivateRanges?: boolean;
56
62
  }
57
63
  /**
58
64
  * Result of a network fetch operation
@@ -2,6 +2,7 @@ import type { Writable } from "node:stream";
2
2
  import { Bash } from "../Bash.js";
3
3
  import type { IFileSystem } from "../fs/interface.js";
4
4
  import type { NetworkConfig } from "../network/index.js";
5
+ import type { DefenseInDepthConfig } from "../security/types.js";
5
6
  import type { CommandFinished } from "./Command.js";
6
7
  import { Command } from "./Command.js";
7
8
  export interface SandboxOptions {
@@ -27,6 +28,11 @@ export interface SandboxOptions {
27
28
  * Network access is disabled by default - you must explicitly configure allowed URLs.
28
29
  */
29
30
  network?: NetworkConfig;
31
+ /**
32
+ * Defense-in-depth configuration. Defaults to true (enabled).
33
+ * Monkey-patches dangerous JavaScript globals during bash execution.
34
+ */
35
+ defenseInDepth?: DefenseInDepthConfig | boolean;
30
36
  }
31
37
  export interface RunCommandParams {
32
38
  cmd: string;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Pre-captured global references.
3
+ *
4
+ * Defense-in-depth replaces dangerous globals with blocking proxies during
5
+ * bash execution. These pre-captured references are taken at module load
6
+ * time (before defense patches are applied) so that just-bash's own
7
+ * infrastructure can use them safely.
8
+ *
9
+ * IMPORTANT: This module must be imported eagerly (at Bash construction time),
10
+ * not lazily during exec(), to ensure the capture happens before patching.
11
+ */
12
+ export declare const _setTimeout: typeof globalThis.setTimeout;
13
+ export declare const _clearTimeout: typeof globalThis.clearTimeout;
14
+ export declare const _SharedArrayBuffer: typeof globalThis.SharedArrayBuffer;
15
+ export declare const _Atomics: typeof globalThis.Atomics;
package/dist/types.d.ts CHANGED
@@ -24,6 +24,11 @@ export interface BashExecResult extends ExecResult {
24
24
  export interface CommandExecOptions {
25
25
  /** Environment variables to merge into the exec state */
26
26
  env?: Record<string, string>;
27
+ /**
28
+ * Replace the execution environment instead of merging with parent env.
29
+ * Useful for implementing `env -i` semantics safely without shell prefixes.
30
+ */
31
+ replaceEnv?: boolean;
27
32
  /**
28
33
  * Working directory for the exec.
29
34
  * Required to prevent bugs where subcommands run in the wrong directory.
@@ -35,6 +40,12 @@ export interface CommandExecOptions {
35
40
  * Optional - if not provided, stdin will be empty.
36
41
  */
37
42
  stdin?: string;
43
+ /**
44
+ * Abort signal for cooperative cancellation.
45
+ * When aborted, the interpreter stops executing at the next statement boundary.
46
+ * Used by `timeout` to ensure timed-out commands don't continue running.
47
+ */
48
+ signal?: AbortSignal;
38
49
  }
39
50
  /**
40
51
  * Context provided to commands during execution.
@@ -140,6 +151,12 @@ export interface CommandContext {
140
151
  * When provided, commands emit coverage hits for analysis.
141
152
  */
142
153
  coverage?: FeatureCoverageWriter;
154
+ /**
155
+ * Abort signal from the current execution context.
156
+ * Commands that spawn sub-executions (bash -c, xargs, etc.)
157
+ * should forward this signal so cooperative cancellation propagates.
158
+ */
159
+ signal?: AbortSignal;
143
160
  }
144
161
  export interface Command {
145
162
  name: string;
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "just-bash",
3
- "version": "2.11.15",
3
+ "version": "2.12.1",
4
4
  "description": "A simulated bash environment with virtual filesystem",
5
5
  "repository": {
6
6
  "type": "git",
@@ -113,7 +113,7 @@
113
113
  "test:run": "vitest run --exclude src/security/fuzzing/ --exclude src/commands/python3/ --exclude src/agent-examples/python-scripting.test.ts",
114
114
  "test:dist": "vitest run src/cli/just-bash.bundle.test.ts",
115
115
  "test:unit": "vitest run --config vitest.unit.config.ts",
116
- "test:python": "vitest run src/commands/python3/ src/agent-examples/python-scripting.test.ts",
116
+ "test:python": "vitest run --config vitest.python.config.ts",
117
117
  "test:comparison": "vitest run --config vitest.comparison.config.ts",
118
118
  "test:comparison:record": "RECORD_FIXTURES=1 vitest run --config vitest.comparison.config.ts",
119
119
  "test:coverage": "vitest run --coverage",
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{a,b}from"./chunk-K7XSYP4L.js";import"./chunk-4PRVMER6.js";import"./chunk-SE4C7FJY.js";import"./chunk-K5IXNHO5.js";import"./chunk-GTNBSMZR.js";import"./chunk-KGOUQS5A.js";export{a as awkCommand2,b as flagsForFuzzing};
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env node
2
- import{a as Z}from"./chunk-GIFF636B.js";import{a as te}from"./chunk-SE4C7FJY.js";import{a as le,b as oe,c as ce}from"./chunk-D5WP4CKS.js";import{a as ae,b as ie}from"./chunk-GTNBSMZR.js";function N(e,t){switch(e.type){case"name":{let n=e.pattern,r=n.match(/^\*(\.[a-zA-Z0-9]+)$/);if(r){let s=r[1],o=t.name;if(e.ignoreCase){if(!o.toLowerCase().endsWith(s.toLowerCase()))return{matches:!1,pruned:!1,printed:!1}}else if(!o.endsWith(s))return{matches:!1,pruned:!1,printed:!1};return{matches:!0,pruned:!1,printed:!1}}return{matches:Z(t.name,n,e.ignoreCase),pruned:!1,printed:!1}}case"path":{let n=e.pattern,r=t.relativePath,s=n.split("/");for(let i=0;i<s.length-1;i++){let a=s[i];if(a&&a!=="."&&a!==".."&&!a.includes("*")&&!a.includes("?")&&!a.includes("[")){let c=`/${a}/`;if(e.ignoreCase){if(!r.toLowerCase().includes(c.toLowerCase()))return{matches:!1,pruned:!1,printed:!1}}else if(!r.includes(c))return{matches:!1,pruned:!1,printed:!1}}}let o=n.match(/\*(\.[a-zA-Z0-9]+)$/);if(o){let i=o[1];if(e.ignoreCase){if(!r.toLowerCase().endsWith(i.toLowerCase()))return{matches:!1,pruned:!1,printed:!1}}else if(!r.endsWith(i))return{matches:!1,pruned:!1,printed:!1}}return{matches:Z(r,n,e.ignoreCase),pruned:!1,printed:!1}}case"regex":try{let n=e.ignoreCase?"i":"";return{matches:te(e.pattern,n).test(t.relativePath),pruned:!1,printed:!1}}catch{return{matches:!1,pruned:!1,printed:!1}}case"type":return e.fileType==="f"?{matches:t.isFile,pruned:!1,printed:!1}:e.fileType==="d"?{matches:t.isDirectory,pruned:!1,printed:!1}:{matches:!1,pruned:!1,printed:!1};case"empty":return{matches:t.isEmpty,pruned:!1,printed:!1};case"mtime":{let r=(Date.now()-t.mtime)/(1e3*60*60*24),s;return e.comparison==="more"?s=r>e.days:e.comparison==="less"?s=r<e.days:s=Math.floor(r)===e.days,{matches:s,pruned:!1,printed:!1}}case"newer":{let n=t.newerRefTimes.get(e.refPath);return n===void 0?{matches:!1,pruned:!1,printed:!1}:{matches:t.mtime>n,pruned:!1,printed:!1}}case"size":{let n=e.value;switch(e.unit){case"c":n=e.value;break;case"k":n=e.value*1024;break;case"M":n=e.value*1024*1024;break;case"G":n=e.value*1024*1024*1024;break;case"b":n=e.value*512;break}let r;return e.comparison==="more"?r=t.size>n:e.comparison==="less"?r=t.size<n:e.unit==="b"?r=Math.ceil(t.size/512)===e.value:r=t.size===n,{matches:r,pruned:!1,printed:!1}}case"perm":{let n=t.mode&511,r=e.mode&511,s;return e.matchType==="exact"?s=n===r:e.matchType==="all"?s=(n&r)===r:s=(n&r)!==0,{matches:s,pruned:!1,printed:!1}}case"prune":return{matches:!0,pruned:!0,printed:!1};case"print":return{matches:!0,pruned:!1,printed:!0};case"not":{let n=N(e.expr,t);return{matches:!n.matches,pruned:n.pruned,printed:!1}}case"and":{let n=N(e.left,t);if(!n.matches)return{matches:!1,pruned:n.pruned,printed:!1};let r=N(e.right,t);return{matches:r.matches,pruned:n.pruned||r.pruned,printed:n.printed||r.printed}}case"or":{let n=N(e.left,t);if(n.matches)return n;let r=N(e.right,t);return{matches:r.matches,pruned:n.pruned||r.pruned,printed:r.printed}}}}function Y(e){if(!e)return!1;switch(e.type){case"name":case"path":case"regex":case"type":case"prune":case"print":return!1;case"empty":case"mtime":case"newer":case"size":case"perm":return!0;case"not":return Y(e.expr);case"and":case"or":return Y(e.left)||Y(e.right)}}function _(e){if(!e)return!1;switch(e.type){case"empty":return!0;case"not":return _(e.expr);case"and":case"or":return _(e.left)||_(e.right);default:return!1}}function pe(e){let t={terminalDirName:null,requiredExtension:null};if(!e)return t;let n=be(e);if(ve(e)&&n.length===1){let o=n[0].split("/").filter(i=>i.length>0);if(o.length>=2)for(let i=o.length-2;i>=0;i--){let a=o[i];if(!a.includes("*")&&!a.includes("?")&&!a.includes("[")&&a!=="."&&a!==".."){let c=o[i+1];if(c&&(c.includes("*")||c.includes("?"))){t.terminalDirName=a;let l=c.match(/^\*(\.[a-zA-Z0-9]+)$/);l&&(t.requiredExtension=l[1])}break}}}return t}function be(e){let t=[],n=r=>{r.type==="path"?t.push(r.pattern):r.type==="not"?n(r.expr):(r.type==="and"||r.type==="or")&&(n(r.left),n(r.right))};return n(e),t}function ve(e){let t=n=>n.type==="type"&&n.fileType==="f"?!0:n.type==="not"?t(n.expr):n.type==="and"||n.type==="or"?t(n.left)||t(n.right):!1;return t(e)}function fe(e){let t=[],n=r=>{r&&(r.type==="newer"?t.push(r.refPath):r.type==="not"?n(r.expr):(r.type==="and"||r.type==="or")&&(n(r.left),n(r.right)))};return n(e),t}function V(e){if(!e)return!0;switch(e.type){case"name":case"path":case"regex":case"type":case"prune":case"print":return!0;case"empty":case"mtime":case"newer":case"size":case"perm":return!1;case"not":return V(e.expr);case"and":case"or":return V(e.left)&&V(e.right)}}function H(e,t,n,r,s){switch(e.type){case"name":{let o=e.pattern,i=o.match(/^\*(\.[a-zA-Z0-9]+)$/);if(i){let a=i[1];if(e.ignoreCase){if(!t.toLowerCase().endsWith(a.toLowerCase()))return{matches:!1,pruned:!1,printed:!1}}else if(!t.endsWith(a))return{matches:!1,pruned:!1,printed:!1};return{matches:!0,pruned:!1,printed:!1}}return{matches:Z(t,o,e.ignoreCase),pruned:!1,printed:!1}}case"path":{let o=e.pattern,i=o.split("/");for(let c=0;c<i.length-1;c++){let l=i[c];if(l&&l!=="."&&l!==".."&&!l.includes("*")&&!l.includes("?")&&!l.includes("[")){let d=`/${l}/`;if(e.ignoreCase){if(!n.toLowerCase().includes(d.toLowerCase()))return{matches:!1,pruned:!1,printed:!1}}else if(!n.includes(d))return{matches:!1,pruned:!1,printed:!1}}}let a=o.match(/\*(\.[a-zA-Z0-9]+)$/);if(a){let c=a[1];if(e.ignoreCase){if(!n.toLowerCase().endsWith(c.toLowerCase()))return{matches:!1,pruned:!1,printed:!1}}else if(!n.endsWith(c))return{matches:!1,pruned:!1,printed:!1}}return{matches:Z(n,o,e.ignoreCase),pruned:!1,printed:!1}}case"regex":try{let o=e.ignoreCase?"i":"";return{matches:te(e.pattern,o).test(n),pruned:!1,printed:!1}}catch{return{matches:!1,pruned:!1,printed:!1}}case"type":return e.fileType==="f"?{matches:r,pruned:!1,printed:!1}:e.fileType==="d"?{matches:s,pruned:!1,printed:!1}:{matches:!1,pruned:!1,printed:!1};case"prune":return{matches:!0,pruned:!0,printed:!1};case"print":return{matches:!0,pruned:!1,printed:!0};case"not":{let o=H(e.expr,t,n,r,s);return{matches:!o.matches,pruned:o.pruned,printed:!1}}case"and":{let o=H(e.left,t,n,r,s);if(!o.matches)return{matches:!1,pruned:o.pruned,printed:!1};let i=H(e.right,t,n,r,s);return{matches:i.matches,pruned:o.pruned||i.pruned,printed:o.printed||i.printed}}case"or":{let o=H(e.left,t,n,r,s);if(o.matches)return o;let i=H(e.right,t,n,r,s);return{matches:i.matches,pruned:o.pruned||i.pruned,printed:i.printed}}default:return{matches:!1,pruned:!1,printed:!1}}}function J(e){if(!e)return!1;switch(e.type){case"prune":return!0;case"not":return J(e.expr);case"and":case"or":return J(e.left)||J(e.right);default:return!1}}function z(e){switch(e.type){case"name":case"path":case"regex":case"type":case"prune":case"print":return!0;case"empty":case"mtime":case"newer":case"size":case"perm":return!1;case"not":return z(e.expr);case"and":case"or":return z(e.left)&&z(e.right)}}function ue(e,t){if(!e||!t.isDirectory)return{shouldPrune:!1};if(!z(e))return ne(e,t);let n={name:t.name,relativePath:t.relativePath,isFile:t.isFile,isDirectory:t.isDirectory,isEmpty:!1,mtime:0,size:0,mode:0,newerRefTimes:new Map};return{shouldPrune:N(e,n).pruned}}function ne(e,t){switch(e.type){case"or":{if(z(e.left)){let n={name:t.name,relativePath:t.relativePath,isFile:t.isFile,isDirectory:t.isDirectory,isEmpty:!1,mtime:0,size:0,mode:0,newerRefTimes:new Map};if(N(e.left,n).pruned)return{shouldPrune:!0}}return ne(e.right,t)}case"and":{if(z(e.left)&&z(e.right)){let n={name:t.name,relativePath:t.relativePath,isFile:t.isFile,isDirectory:t.isDirectory,isEmpty:!1,mtime:0,size:0,mode:0,newerRefTimes:new Map};return{shouldPrune:N(e,n).pruned}}if(z(e.left)){let n={name:t.name,relativePath:t.relativePath,isFile:t.isFile,isDirectory:t.isDirectory,isEmpty:!1,mtime:0,size:0,mode:0,newerRefTimes:new Map};return N(e.left,n).matches?ne(e.right,t):{shouldPrune:!1}}return{shouldPrune:!1}}case"not":return{shouldPrune:!1};default:return{shouldPrune:!1}}}function he(e,t){let n=[],r=[],s=t;for(;s<e.length;){let i=e[s];if(i==="("||i==="\\("){n.push({type:"lparen"}),s++;continue}if(i===")"||i==="\\)"){n.push({type:"rparen"}),s++;continue}if(i==="-name"&&s+1<e.length)n.push({type:"expr",expr:{type:"name",pattern:e[++s]}});else if(i==="-iname"&&s+1<e.length)n.push({type:"expr",expr:{type:"name",pattern:e[++s],ignoreCase:!0}});else if(i==="-path"&&s+1<e.length)n.push({type:"expr",expr:{type:"path",pattern:e[++s]}});else if(i==="-ipath"&&s+1<e.length)n.push({type:"expr",expr:{type:"path",pattern:e[++s],ignoreCase:!0}});else if(i==="-regex"&&s+1<e.length)n.push({type:"expr",expr:{type:"regex",pattern:e[++s]}});else if(i==="-iregex"&&s+1<e.length)n.push({type:"expr",expr:{type:"regex",pattern:e[++s],ignoreCase:!0}});else if(i==="-type"&&s+1<e.length){let a=e[++s];if(a==="f"||a==="d")n.push({type:"expr",expr:{type:"type",fileType:a}});else return{expr:null,pathIndex:s,error:`find: Unknown argument to -type: ${a}
3
- `,actions:[]}}else if(i==="-empty")n.push({type:"expr",expr:{type:"empty"}});else if(i==="-mtime"&&s+1<e.length){let a=e[++s],c="exact",l=a;a.startsWith("+")?(c="more",l=a.slice(1)):a.startsWith("-")&&(c="less",l=a.slice(1));let d=parseInt(l,10);Number.isNaN(d)||n.push({type:"expr",expr:{type:"mtime",days:d,comparison:c}})}else if(i==="-newer"&&s+1<e.length){let a=e[++s];n.push({type:"expr",expr:{type:"newer",refPath:a}})}else if(i==="-size"&&s+1<e.length){let a=e[++s],c="exact",l=a;a.startsWith("+")?(c="more",l=a.slice(1)):a.startsWith("-")&&(c="less",l=a.slice(1));let d=l.match(/^(\d+)([ckMGb])?$/);if(d){let B=parseInt(d[1],10),I=d[2]||"b";n.push({type:"expr",expr:{type:"size",value:B,unit:I,comparison:c}})}}else if(i==="-perm"&&s+1<e.length){let a=e[++s],c="exact",l=a;a.startsWith("-")?(c="all",l=a.slice(1)):a.startsWith("/")&&(c="any",l=a.slice(1));let d=parseInt(l,8);Number.isNaN(d)||n.push({type:"expr",expr:{type:"perm",mode:d,matchType:c}})}else if(i==="-prune")n.push({type:"expr",expr:{type:"prune"}});else if(i==="-not"||i==="!")n.push({type:"not"});else if(i==="-o"||i==="-or")n.push({type:"op",op:"or"});else if(i==="-a"||i==="-and")n.push({type:"op",op:"and"});else if(i==="-maxdepth"||i==="-mindepth")s++;else if(i!=="-depth")if(i==="-exec"){let a=[];for(s++;s<e.length&&e[s]!==";"&&e[s]!=="+";)a.push(e[s]),s++;if(s>=e.length)return{expr:null,pathIndex:s,error:"find: missing argument to `-exec'\n",actions:[]};let c=e[s]==="+";r.push({type:"exec",command:a,batchMode:c})}else if(i==="-print")n.push({type:"expr",expr:{type:"print"}}),r.push({type:"print"});else if(i==="-print0")r.push({type:"print0"});else if(i==="-printf"&&s+1<e.length){let a=e[++s];r.push({type:"printf",format:a})}else if(i==="-delete")r.push({type:"delete"});else{if(i.startsWith("-"))return{expr:null,pathIndex:s,error:`find: unknown predicate '${i}'
4
- `,actions:[]};if(n.length===0){s++;continue}break}s++}if(n.length===0)return{expr:null,pathIndex:s,actions:r};let o=Ee(n);return o.error?{expr:null,pathIndex:s,error:o.error,actions:r}:{expr:o.expr,pathIndex:s,actions:r}}function Ee(e){let t=0;function n(){let a=r();if(!a)return null;for(;t<e.length;){let c=e[t];if(c.type==="op"&&c.op==="or"){t++;let l=r();if(!l)return a;a={type:"or",left:a,right:l}}else break}return a}function r(){let a=s();if(!a)return null;for(;t<e.length;){let c=e[t];if(c.type==="op"&&c.op==="and"){t++;let l=s();if(!l)return a;a={type:"and",left:a,right:l}}else if(c.type==="expr"||c.type==="not"||c.type==="lparen"){let l=s();if(!l)return a;a={type:"and",left:a,right:l}}else break}return a}function s(){if(t<e.length&&e[t].type==="not"){t++;let a=s();return a?{type:"not",expr:a}:null}return o()}function o(){if(t>=e.length)return null;let a=e[t];if(a.type==="lparen"){t++;let c=n();return t<e.length&&e[t].type==="rparen"&&t++,c}return a.type==="expr"?(t++,a.expr):(a.type==="rparen",null)}return{expr:n()}}var de=500;function Me(){return{readdirCalls:0,readdirTime:0,statCalls:0,statTime:0,evalCalls:0,evalTime:0,nodeCount:0,batchCount:0,batchTime:0,earlyPrunes:0}}function xe(e,t,n){e({category:"find",name:"summary",durationMs:n,details:{readdirCalls:t.readdirCalls,readdirTimeMs:t.readdirTime,statCalls:t.statCalls,statTimeMs:t.statTime,evalCalls:t.evalCalls,evalTimeMs:t.evalTime,nodeCount:t.nodeCount,batchCount:t.batchCount,batchTimeMs:t.batchTime,earlyPrunes:t.earlyPrunes,otherTimeMs:n-t.readdirTime-t.statTime-t.evalTime-t.batchTime}})}var Fe={name:"find",summary:"search for files in a directory hierarchy",usage:"find [path...] [expression]",options:["-name PATTERN file name matches shell pattern PATTERN","-iname PATTERN like -name but case insensitive","-path PATTERN file path matches shell pattern PATTERN","-ipath PATTERN like -path but case insensitive","-regex PATTERN file path matches regular expression PATTERN","-iregex PATTERN like -regex but case insensitive","-type TYPE file is of type: f (regular file), d (directory)","-empty file is empty or directory is empty","-mtime N file's data was modified N*24 hours ago","-newer FILE file was modified more recently than FILE","-size N[ckMGb] file uses N units of space (c=bytes, k=KB, M=MB, G=GB, b=512B blocks)","-perm MODE file's permission bits are exactly MODE (octal)","-perm -MODE all permission bits MODE are set","-perm /MODE any permission bits MODE are set","-maxdepth LEVELS descend at most LEVELS directories","-mindepth LEVELS do not apply tests at levels less than LEVELS","-depth process directory contents before directory itself","-prune do not descend into this directory","-not, ! negate the following expression","-a, -and logical AND (default)","-o, -or logical OR","-exec CMD {} ; execute CMD on each file ({} is replaced by filename)","-exec CMD {} + execute CMD with multiple files at once","-print print the full file name (default action)","-print0 print the full file name followed by a null character","-printf FORMAT print FORMAT with directives: %f %h %p %P %s %d %m %M %t","-delete delete found files/directories"," --help display this help and exit"]},Ie=new Set(["-name","-iname","-path","-ipath","-regex","-iregex","-type","-maxdepth","-mindepth","-mtime","-newer","-size","-perm"]),je={name:"find",async execute(e,t){if(ie(e))return ae(Fe);let n=[],r=null,s=null,o=!1,i=!1;for(let p=0;p<e.length;p++){let f=e[p];if(f==="-maxdepth"&&p+1<e.length)i=!0,r=parseInt(e[++p],10);else if(f==="-mindepth"&&p+1<e.length)i=!0,s=parseInt(e[++p],10);else if(f==="-depth")i=!0,o=!0;else if(f==="-exec")for(i=!0,p++;p<e.length&&e[p]!==";"&&e[p]!=="+";)p++;else!f.startsWith("-")&&f!==";"&&f!=="+"&&f!=="("&&f!==")"&&f!=="\\("&&f!=="\\)"&&f!=="!"?i||n.push(f):Ie.has(f)?(i=!0,p++):(f.startsWith("-")||f==="("||f==="\\("||f==="!")&&(i=!0)}n.length===0&&n.push(".");let{expr:a,error:c,actions:l}=he(e,0);if(c)return{stdout:"",stderr:c,exitCode:1};let d=l.some(p=>p.type==="print"),B=l.length===0,I=[],me=l.some(p=>p.type==="printf"),se=[],q="",G=0,ye=fe(a),U=new Map;for(let p of ye){let f=t.fs.resolvePath(t.cwd,p);try{let h=await t.fs.stat(f);U.set(p,h.mtime?.getTime()??Date.now())}catch{}}let ge=l.some(p=>{if(p.type!=="printf")return!1;let f=p.format.replace(/%%/g,"");return/%[-+]?[0-9]*\.?[0-9]*(s|m|M|t|T)/.test(f)}),we=Y(a)||ge,De=_(a),K=pe(a),re=J(a),Te=V(a),Ce=typeof t.fs.readdirWithFileTypes=="function";for(let p of n){let W=function(u){let R=s===null||u.depth>=s,P=!1;if(R&&a!==null){let S=Date.now(),y;if(Te)y=H(a,u.name,u.relativePath,u.isFile,u.isDirectory);else{let m={name:u.name,relativePath:u.relativePath,isFile:u.isFile,isDirectory:u.isDirectory,isEmpty:u.isEmpty,mtime:u.stat?.mtime?.getTime()??Date.now(),size:u.stat?.size??0,mode:u.stat?.mode??420,newerRefTimes:U};y=N(a,m)}R=y.matches,P=d?y.printed:R,h.evalCalls++,h.evalTime+=Date.now()-S}else R&&(P=!0);return P?{print:!0,printfData:me?{path:u.relativePath,name:u.name,size:u.stat?.size??0,mtime:u.stat?.mtime?.getTime()??Date.now(),mode:u.stat?.mode??420,isDirectory:u.isDirectory,depth:u.depth,startingPoint:p}:null}:{print:!1,printfData:null}};var We=W;p.length>1&&p.endsWith("/")&&(p=p.slice(0,-1));let f=t.fs.resolvePath(t.cwd,p);try{await t.fs.stat(f)}catch{q+=`find: ${p}: No such file or directory
5
- `,G=1;continue}let h=Me(),$=Date.now();async function b(u){let{path:v,depth:R,typeInfo:P}=u;if(h.nodeCount++,R>(r??256))return null;let E,S,y;if(P&&!we)E=P.isFile,S=P.isDirectory;else{try{let L=Date.now();y=await t.fs.stat(v),h.statCalls++,h.statTime+=Date.now()-L}catch{return null}if(!y)return null;E=y.isFile,S=y.isDirectory}let m;v===f?m=p.split("/").pop()||p:m=v.split("/").pop()||"";let g=v===f?p:p==="."?`./${v.slice(f==="/"?f.length:f.length+1)}`:p+v.slice(f.length),T=[],C=null,w=null,D=!1;S&&re&&!o&&(D=ue(a,{name:m,relativePath:g,isFile:E,isDirectory:S}).shouldPrune,D&&h.earlyPrunes++);let x=R>=(r??256),F=K.terminalDirName!==null&&m===K.terminalDirName,j=!x&&!F&&!D;if(S&&((j||De||F)&&!D)){let L=Date.now();if(Ce&&t.fs.readdirWithFileTypes){if(C=await t.fs.readdirWithFileTypes(v),w=C.map(M=>M.name),h.readdirCalls++,h.readdirTime+=Date.now()-L,j)T=C.map((M,k)=>({path:v==="/"?`/${M.name}`:`${v}/${M.name}`,depth:R+1,typeInfo:{isFile:M.isFile,isDirectory:M.isDirectory},resultIndex:k}));else if(F){let M=K.requiredExtension;T=C.filter(k=>k.isFile&&(!M||k.name.endsWith(M))).map((k,Se)=>({path:v==="/"?`/${k.name}`:`${v}/${k.name}`,depth:R+1,typeInfo:{isFile:k.isFile,isDirectory:k.isDirectory},resultIndex:Se}))}}else w=await t.fs.readdir(v),h.readdirCalls++,h.readdirTime+=Date.now()-L,j&&(T=w.map((M,k)=>({path:v==="/"?`/${M}`:`${v}/${M}`,depth:R+1,resultIndex:k})))}let Q=E?(y?.size??0)===0:w!==null&&w.length===0,O=D;if(!o&&a!==null&&!D&&re){let L=Date.now(),M={name:m,relativePath:g,isFile:E,isDirectory:S,isEmpty:Q,mtime:y?.mtime?.getTime()??Date.now(),size:y?.size??0,mode:y?.mode??420,newerRefTimes:U};O=N(a,M).pruned,h.evalCalls++,h.evalTime+=Date.now()-L}return{relativePath:g,name:m,isFile:E,isDirectory:S,isEmpty:Q,stat:y,depth:R,children:O?[]:T,pruned:O}}async function Pe(){let u={paths:[],printfData:[]};if(o){let y=function(m){let g={paths:[],printfData:[]},T=P[m];if(!T)return g;for(let D of T.childIndices){let x=y(D);g.paths.push(...x.paths),g.printfData.push(...x.printfData)}let{print:C,printfData:w}=W(T.node);return C&&(g.paths.push(T.node.relativePath),w&&g.printfData.push(w)),g};var v=y;let P=[],E=[{item:{path:f,depth:0,resultIndex:0},parentIndex:-1,childOrderInParent:0}],S=new Map;for(;E.length>0;){let m=Date.now(),g=E.splice(0,de),T=await Promise.all(g.map(C=>b(C.item)));h.batchCount++,h.batchTime+=Date.now()-m;for(let C=0;C<g.length;C++){let w=T[C],D=g[C];if(!w)continue;let x=P.length;if(D.parentIndex>=0){let F=S.get(D.parentIndex)||[];F.push(x),S.set(D.parentIndex,F)}P.push({node:w,parentIndex:D.parentIndex,childIndices:[]});for(let F=0;F<w.children.length;F++)E.push({item:w.children[F],parentIndex:x,childOrderInParent:F})}}for(let[m,g]of S)m>=0&&m<P.length&&(P[m].childIndices=g);if(P.length>0){let m=y(0);u.paths.push(...m.paths),u.printfData.push(...m.printfData)}}else{let m=function(g){let T=P.get(g);T&&(u.paths.push(T.path),T.printfData&&u.printfData.push(T.printfData));let C=y.get(g);if(C)for(let w of C)m(w)};var R=m;let P=new Map,E=0,S=[{item:{path:f,depth:0,resultIndex:0},orderIndex:E++}],y=new Map;for(;S.length>0;){let g=Date.now(),T=S.splice(0,de),C=await Promise.all(T.map(async({item:w,orderIndex:D})=>{let x=await b(w);return x?{node:x,orderIndex:D}:null}));h.batchCount++,h.batchTime+=Date.now()-g;for(let w of C){if(!w)continue;let{node:D,orderIndex:x}=w,{print:F,printfData:j}=W(D);if(F&&P.set(x,{path:D.relativePath,printfData:j}),D.children.length>0){let ee=[];for(let Q of D.children){let O=E++;ee.push(O),S.push({item:Q,orderIndex:O})}y.set(x,ee)}}}m(0)}return u}let X=await Pe();if(I.push(...X.paths),se.push(...X.printfData),t.trace){let u=Date.now()-$;xe(t.trace,h,u),t.trace({category:"find",name:"searchPath",durationMs:u,details:{path:p,resultsFound:X.paths.length}})}}let A="";if(l.length>0)for(let p of l)switch(p.type){case"print":A+=I.length>0?`${I.join(`
6
- `)}
7
- `:"";break;case"print0":A+=I.length>0?`${I.join("\0")}\0`:"";break;case"delete":{let f=[...I].sort((h,$)=>$.length-h.length);for(let h of f){let $=t.fs.resolvePath(t.cwd,h);try{await t.fs.rm($,{recursive:!1})}catch(b){let W=b instanceof Error?b.message:String(b);q+=`find: cannot delete '${h}': ${W}
8
- `,G=1}}break}case"printf":for(let f of se)A+=$e(p.format,f);break;case"exec":if(!t.exec)return{stdout:"",stderr:`find: -exec not supported in this context
9
- `,exitCode:1};if(p.batchMode){let f=[];for(let b of p.command)b==="{}"?f.push(...I):f.push(b);let h=f.map(b=>`"${b}"`).join(" "),$=await t.exec(h,{cwd:t.cwd});A+=$.stdout,q+=$.stderr,$.exitCode!==0&&(G=$.exitCode)}else for(let f of I){let $=p.command.map(W=>W==="{}"?f:W).map(W=>`"${W}"`).join(" "),b=await t.exec($,{cwd:t.cwd});A+=b.stdout,q+=b.stderr,b.exitCode!==0&&(G=b.exitCode)}break}else B&&(A=I.length>0?`${I.join(`
10
- `)}
11
- `:"");return{stdout:A,stderr:q,exitCode:G}}};function $e(e,t){let n=ce(e),r="",s=0;for(;s<n.length;)if(n[s]==="%"&&s+1<n.length){if(s++,n[s]==="%"){r+="%",s++;continue}let[o,i,a]=oe(n,s);if(s+=a,s>=n.length){r+="%";break}let c=n[s],l;switch(c){case"f":l=t.name,s++;break;case"h":{let d=t.path.lastIndexOf("/");l=d>0?t.path.slice(0,d):".",s++;break}case"p":l=t.path,s++;break;case"P":{let d=t.startingPoint;t.path===d?l="":t.path.startsWith(`${d}/`)?l=t.path.slice(d.length+1):d==="."&&t.path.startsWith("./")?l=t.path.slice(2):l=t.path,s++;break}case"s":l=String(t.size),s++;break;case"d":l=String(t.depth),s++;break;case"m":l=(t.mode&511).toString(8),s++;break;case"M":l=Re(t.mode,t.isDirectory),s++;break;case"t":{let d=new Date(t.mtime);l=ke(d),s++;break}case"T":{if(s+1<n.length){let d=n[s+1],B=new Date(t.mtime);l=Ne(B,d),s+=2}else l="%T",s++;break}default:r+=`%${o!==0||i!==-1?`${o}.${i}`:""}${c}`,s++;continue}r+=le(l,o,i)}else r+=n[s],s++;return r}function Re(e,t){let n=e&511,r=t?"d":"-";return r+=n&256?"r":"-",r+=n&128?"w":"-",r+=n&64?"x":"-",r+=n&32?"r":"-",r+=n&16?"w":"-",r+=n&8?"x":"-",r+=n&4?"r":"-",r+=n&2?"w":"-",r+=n&1?"x":"-",r}function ke(e){let t=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],n=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],r=t[e.getDay()],s=n[e.getMonth()],o=String(e.getDate()).padStart(2," "),i=String(e.getHours()).padStart(2,"0"),a=String(e.getMinutes()).padStart(2,"0"),c=String(e.getSeconds()).padStart(2,"0"),l=e.getFullYear();return`${r} ${s} ${o} ${i}:${a}:${c} ${l}`}function Ne(e,t){switch(t){case"@":return String(e.getTime()/1e3);case"Y":return String(e.getFullYear());case"m":return String(e.getMonth()+1).padStart(2,"0");case"d":return String(e.getDate()).padStart(2,"0");case"H":return String(e.getHours()).padStart(2,"0");case"M":return String(e.getMinutes()).padStart(2,"0");case"S":return String(e.getSeconds()).padStart(2,"0");case"T":return`${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}:${String(e.getSeconds()).padStart(2,"0")}`;case"F":return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`;default:return`%T${t}`}}var Ze={name:"find",flags:[{flag:"-name",type:"value",valueHint:"pattern"},{flag:"-iname",type:"value",valueHint:"pattern"},{flag:"-type",type:"value",valueHint:"string"},{flag:"-maxdepth",type:"value",valueHint:"number"},{flag:"-mindepth",type:"value",valueHint:"number"},{flag:"-empty",type:"boolean"},{flag:"-print",type:"boolean"},{flag:"-print0",type:"boolean"}],needsFiles:!0};export{je as a,Ze as b};
@@ -1,10 +0,0 @@
1
- #!/usr/bin/env node
2
- import{a,b as o}from"./chunk-GTNBSMZR.js";var l={name:"sleep",summary:"delay for a specified amount of time",usage:"sleep NUMBER[SUFFIX]",description:`Pause for NUMBER seconds. SUFFIX may be:
3
- s - seconds (default)
4
- m - minutes
5
- h - hours
6
- d - days
7
-
8
- NUMBER may be a decimal number.`,options:[" --help display this help and exit"]},i=36e5;function u(t){let s=t.match(/^(\d+\.?\d*)(s|m|h|d)?$/);if(!s)return null;let e=parseFloat(s[1]);switch(s[2]||"s"){case"s":return e*1e3;case"m":return e*60*1e3;case"h":return e*60*60*1e3;case"d":return e*24*60*60*1e3;default:return null}}var m={name:"sleep",async execute(t,s){if(o(t))return a(l);if(t.length===0)return{stdout:"",stderr:`sleep: missing operand
9
- `,exitCode:1};let e=0;for(let n of t){let r=u(n);if(r===null)return{stdout:"",stderr:`sleep: invalid time interval '${n}'
10
- `,exitCode:1};e+=r}return e>i&&(e=i),s.sleep?await s.sleep(e):await new Promise(n=>setTimeout(n,e)),{stdout:"",stderr:"",exitCode:0}}},p={name:"sleep",flags:[],needsArgs:!0};export{m as a,p as b};
@@ -1,63 +0,0 @@
1
- #!/usr/bin/env node
2
- import{a as x}from"./chunk-SE4C7FJY.js";import{a as ne,b as ie,c as K}from"./chunk-GTNBSMZR.js";import Te from"compressjs";var H="file",oe="link",ce="symlink",M="directory",be={file:"0",link:"1",symlink:"2","character-device":"3","block-device":"4",directory:"5",fifo:"6","pax-header":"x","pax-global-header":"g","gnu-long-name":"L","gnu-long-link-name":"K"},Me={0:H,1:oe,2:ce,3:"character-device",4:"block-device",5:M,6:"fifo",x:"pax-header",g:"pax-global-header",L:"gnu-long-name",K:"gnu-long-link-name"},$e=new Uint8Array(512),b=new Uint8Array(0),U=new TextEncoder,le=new TextDecoder;function T(e,t,i,r){r&&U.encodeInto(r,e.subarray(t,t+i))}function F(e,t,i,r){if(r===void 0)return;let n=r.toString(8).padStart(i-1,"0");U.encodeInto(n,e.subarray(t,t+i-1))}function A(e,t,i){let r=e.indexOf(0,t),n=r===-1||r>t+i?t+i:r;return le.decode(e.subarray(t,n))}function W(e,t,i){let r=0,n=t+i;for(let s=t;s<n;s++){let o=e[s];if(o===0)break;o!==32&&(r=r*8+(o-48))}return r}function k(e,t,i){if(e[t]&128){let r=0;r=e[t]&127;for(let n=1;n<i;n++)r=r*256+e[t+n];if(!Number.isSafeInteger(r))throw new Error("TAR number too large");return r}return W(e,t,i)}var z=e=>e.type===M||e.type===ce||e.type===oe;async function ue(e){if(e==null)return b;if(e instanceof Uint8Array)return e;if(typeof e=="string")return U.encode(e);if(e instanceof ArrayBuffer)return new Uint8Array(e);if(e instanceof Blob)return new Uint8Array(await e.arrayBuffer());throw new TypeError("Unsupported content type for entry body.")}function fe(e,t){let{strip:i,filter:r,map:n}=t;if(!i&&!r&&!n)return e;let s={...e};if(i&&i>0){let a=s.name.split("/").filter(Boolean);if(i>=a.length)return null;let c=a.slice(i).join("/");if(s.name=s.type===M&&!c.endsWith("/")?`${c}/`:c,s.linkname?.startsWith("/")){let l=s.linkname.split("/").filter(Boolean);s.linkname=i>=l.length?"/":`/${l.slice(i).join("/")}`}}if(r?.(s)===!1)return null;let o=n?n(s):s;return o&&(!o.name||!o.name.trim()||o.name==="."||o.name==="/")?null:o}var G=32,Ze=48;function Be(e){let t=W(e,148,8),i=0;for(let r=0;r<e.length;r++)r>=148&&r<156?i+=G:i+=e[r];return t===i}function De(e){e.fill(G,148,156);let t=0;for(let i of e)t+=i;for(let i=153;i>=148;i--)e[i]=(t&7)+Ze,t>>=3;e[154]=0,e[155]=G}function Ne(e){let t={};e.name.length>100&&de(e.name)===null&&(t.path=e.name),e.linkname&&e.linkname.length>100&&(t.linkpath=e.linkname),e.uname&&e.uname.length>32&&(t.uname=e.uname),e.gname&&e.gname.length>32&&(t.gname=e.gname),e.uid!=null&&e.uid>2097151&&(t.uid=String(e.uid)),e.gid!=null&&e.gid>2097151&&(t.gid=String(e.gid)),e.size!=null&&e.size>8589934591&&(t.size=String(e.size)),e.pax&&Object.assign(t,e.pax);let i=Object.entries(t);if(i.length===0)return null;let r=U.encode(i.map(([n,s])=>{let o=`${n}=${s}
3
- `,a=U.encode(o).length+1,c=a+String(a).length;return c=a+String(c).length,`${c} ${o}`}).join(""));return{paxHeader:me({name:le.decode(U.encode(`PaxHeader/${e.name}`).slice(0,100)),size:r.length,type:"pax-header",mode:420,mtime:e.mtime,uname:e.uname,gname:e.gname,uid:e.uid,gid:e.gid}),paxBody:r}}function de(e){if(e.length<=100)return null;let t=e.length-100-1,i=e.lastIndexOf("/",155);return i>0&&i>=t?{prefix:e.slice(0,i),name:e.slice(i+1)}:null}function me(e){let t=new Uint8Array(512),i=z(e)?0:e.size??0,r=e.name,n="";if(!e.pax?.path){let s=de(r);s&&(r=s.name,n=s.prefix)}return T(t,0,100,r),F(t,100,8,e.mode??(e.type===M?493:420)),F(t,108,8,e.uid??0),F(t,116,8,e.gid??0),F(t,124,12,i),F(t,136,12,Math.floor((e.mtime?.getTime()??Date.now())/1e3)),T(t,156,1,be[e.type??H]),T(t,157,100,e.linkname),T(t,257,6,"ustar\0"),T(t,263,2,"00"),T(t,265,32,e.uname),T(t,297,32,e.gname),T(t,345,155,n),De(t),t}function Le(e,t){if(t&&!Be(e))throw new Error("Invalid tar header checksum.");let i=A(e,156,1),r={name:A(e,0,100),mode:W(e,100,8),uid:k(e,108,8),gid:k(e,116,8),size:k(e,124,12),mtime:new Date(k(e,136,12)*1e3),type:Me[i]||H,linkname:A(e,157,100)},n=A(e,257,6);return n.trim()==="ustar"&&(r.uname=A(e,265,32),r.gname=A(e,297,32)),n==="ustar"&&(r.prefix=A(e,345,155)),r}var Ke={path:["name",e=>e],linkpath:["linkname",e=>e],size:["size",e=>parseInt(e,10)],mtime:["mtime",parseFloat],uid:["uid",e=>parseInt(e,10)],gid:["gid",e=>parseInt(e,10)],uname:["uname",e=>e],gname:["gname",e=>e]};function Pe(e){let t=new TextDecoder("utf-8"),i={},r={},n=0;for(;n<e.length;){let s=e.indexOf(32,n);if(s===-1)break;let o=parseInt(t.decode(e.subarray(n,s)),10);if(Number.isNaN(o)||o===0)break;let a=n+o,[c,l]=t.decode(e.subarray(s+1,a-1)).split("=",2);if(c&&l!==void 0){r[c]=l;let d=Ke[c];if(d){let[u,g]=d,p=g(l);(typeof p=="string"||!Number.isNaN(p))&&(i[u]=p)}}n=a}return Object.keys(r).length>0&&(i.pax=r),i}function se(e,t){t.name!==void 0&&(e.name=t.name),t.linkname!==void 0&&(e.linkname=t.linkname),t.size!==void 0&&(e.size=t.size),t.mtime!==void 0&&(e.mtime=new Date(t.mtime*1e3)),t.uid!==void 0&&(e.uid=t.uid),t.gid!==void 0&&(e.gid=t.gid),t.uname!==void 0&&(e.uname=t.uname),t.gname!==void 0&&(e.gname=t.gname),t.pax&&(e.pax=Object.assign({},e.pax??{},t.pax))}function Ge(e){switch(e){case"pax-global-header":case"pax-header":return Pe;case"gnu-long-name":return t=>({name:A(t,0,t.length)});case"gnu-long-link-name":return t=>({linkname:A(t,0,t.length)});default:return}}function He(e){let t=me(e),i=Ne(e);if(!i)return[t];let r=-i.paxBody.length&511,n=r>0?[$e.subarray(0,r)]:[];return[i.paxHeader,i.paxBody,...n,t]}var We=new Uint8Array(512*2);function pe(e,t,i){let r=null,n=0,s=!1;return{add(o){if(s){let a=new Error("No new tar entries after finalize.");throw t(a),a}if(r!==null){let a=new Error("Previous entry must be completed before adding a new one");throw t(a),a}try{let a=z(o)?0:o.size??0,c=He({...o,size:a});for(let l of c)e(l);r={...o,size:a},n=0}catch(a){t(a)}},write(o){if(!r){let c=new Error("No active tar entry.");throw t(c),c}if(s){let c=new Error("Cannot write data after finalize.");throw t(c),c}let a=n+o.length;if(a>r.size){let c=new Error(`"${r.name}" exceeds given size of ${r.size} bytes.`);throw t(c),c}try{n=a,e(o)}catch(c){t(c)}},endEntry(){if(!r){let o=new Error("No active entry to end.");throw t(o),o}if(s){let o=new Error("Cannot end entry after finalize.");throw t(o),o}try{if(n!==r.size){let a=new Error(`Size mismatch for "${r.name}".`);throw t(a),a}let o=-r.size&511;o>0&&e(new Uint8Array(o)),r=null,n=0}catch(o){throw t(o),o}},finalize(){if(s){let o=new Error("Archive has already been finalized");throw t(o),o}if(r!==null){let o=new Error("Cannot finalize while an entry is still active");throw t(o),o}try{e(We),s=!0,i&&i()}catch(o){t(o)}}}}var R=256;function Xe(){let e=new Array(R),t=e.length-1,i=0,r=0,n=0,s=a=>{let c=e[i];a===c.length?(e[i]=b,i=i+1&t):e[i]=c.subarray(a),n-=a,n===0&&e.length>R&&(e=new Array(R),t=R-1,i=0,r=0)};function o(a,c){if(c){let p=0,f=Math.min(a,n);for(;f>0;){let h=e[i],m=Math.min(f,h.length),S=m===h.length?h:h.subarray(0,m);if(s(m),f-=m,p+=m,!c(S))break}return p}if(n<a)return null;if(a===0)return b;let l=e[i];if(l.length>=a){let p=l.length===a?l:l.subarray(0,a);return s(a),p}let d=new Uint8Array(a),u=0,g=a;for(;g>0;){let p=e[i],f=Math.min(g,p.length);d.set(f===p.length?p:p.subarray(0,f),u),u+=f,g-=f,s(f)}return d}return{push:a=>{if(a.length===0)return;let c=r+1&t;if(c===i){let l=e.length,d=l*2,u=new Array(d),g=r-i+l&l-1;if(i<r)for(let p=0;p<g;p++)u[p]=e[i+p];else if(g>0){let p=l-i;for(let f=0;f<p;f++)u[f]=e[i+f];for(let f=0;f<r;f++)u[p+f]=e[f]}e=u,t=d-1,i=0,r=g,c=r+1&t}e[r]=a,r=c,n+=a.length},available:()=>n,peek:a=>{if(n<a)return null;if(a===0)return b;let c=e[i];if(c.length>=a)return c.length===a?c:c.subarray(0,a);let l=new Uint8Array(a),d=0,u=i;for(;d<a;){let g=e[u],p=Math.min(a-d,g.length);p===g.length?l.set(g,d):l.set(g.subarray(0,p),d),d+=p,u=u+1&t}return l},discard:a=>{if(a>n)throw new Error("Too many bytes consumed");if(a===0)return;let c=a;for(;c>0;){let l=e[i],d=Math.min(c,l.length);s(d),c-=d}},pull:o}}var P=0,v=1,O=new Error("Tar archive is truncated.");function he(e={}){let t=e.strict??!1,{available:i,peek:r,push:n,discard:s,pull:o}=Xe(),a=P,c=!1,l=!1,d=!1,u=null,g={},p={},f={isEntryActive:()=>a===v,isBodyComplete:()=>!u||u.remaining===0,write(h){if(c)throw new Error("Archive already ended.");n(h)},end(){c=!0},readHeader(){if(a!==P)throw new Error("Cannot read header while an entry is active");if(!l)for(;!l;){if(i()<512){if(c){if(i()>0&&t)throw O;l=!0;return}return null}let h=r(512);if(ae(h)){if(i()<512*2){if(c){if(t)throw O;l=!0;return}return null}if(ae(r(512*2).subarray(512))){s(512*2),l=!0,d=!0;return}if(t)throw new Error("Invalid tar header.");s(512);continue}let m;try{m=Le(h,t)}catch(w){if(t)throw w;s(512);continue}let S=Ge(m.type);if(S){let w=m.size+511&-512;if(i()<512+w){if(c&&t)throw O;return null}s(512);let I=S(o(w).subarray(0,m.size)),Oe=m.type==="pax-global-header"?g:p;for(let re in I)Oe[re]=I[re];continue}s(512);let E=m;return m.prefix&&(E.name=`${m.prefix}/${E.name}`),se(E,g),se(E,p),p={},u={header:E,remaining:E.size,padding:-E.size&511},a=v,E}},streamBody(h){if(a!==v||!u||u.remaining===0)return 0;let m=Math.min(u.remaining,i());if(m===0)return 0;let S=o(m,h);return u.remaining-=S,S},skipPadding(){if(a!==v||!u)return!0;if(u.remaining>0)throw new Error("Body not fully consumed");return i()<u.padding?!1:(s(u.padding),u=null,a=P,!0)},skipEntry(){if(a!==v||!u)return!0;let h=Math.min(u.remaining,i());return h>0&&(s(h),u.remaining-=h),u.remaining>0?!1:f.skipPadding()},validateEOF(){if(t){if(!d)throw O;if(i()>0&&o(i()).some(h=>h!==0))throw new Error("Invalid EOF.")}}};return f}function ae(e){if(e.byteOffset%8===0){let t=new BigUint64Array(e.buffer,e.byteOffset,e.length/8);for(let i=0;i<t.length;i++)if(t[i]!==0n)return!1;return!0}for(let t=0;t<e.length;t++)if(e[t]!==0)return!1;return!0}function Se(){return new CompressionStream("gzip")}function Ee(){return new DecompressionStream("gzip")}function je(){let e,t;return{readable:new ReadableStream({start(i){e=i,t=pe(i.enqueue.bind(i),i.error.bind(i),i.close.bind(i))}}),controller:{add(i){let r=z(i),n={...i};return r&&(n.size=0),t.add(n),r&&t.endEntry(),new WritableStream({write(s){t.write(s)},close(){r||t.endEntry()},abort(s){e.error(s)}})},finalize(){t.finalize()},error(i){e.error(i)}}}}async function we(e){let t=[],i=e.getReader(),r=0;try{for(;;){let{done:o,value:a}=await i.read();if(o)break;t.push(a),r+=a.length}let n=new Uint8Array(r),s=0;for(let o of t)n.set(o,s),s+=o.length;return n}finally{i.releaseLock()}}var ge=e=>e.pipeTo(new WritableStream);function qe(e={}){let t=he(e),i=null,r=!1,n=s=>{if(!r){r=!0;try{for(;;)if(t.isEntryActive()){if(i){if(t.streamBody(o=>(i.enqueue(o),!0))===0&&!t.isBodyComplete())break}else if(!t.skipEntry())break;if(t.isBodyComplete()){try{i?.close()}catch{}if(i=null,!t.skipPadding())break}}else{let o=t.readHeader();if(o==null)break;s.enqueue({header:o,body:new ReadableStream({start(a){o.size===0?a.close():i=a},pull:()=>n(s),cancel(){i=null,n(s)}})})}}catch(o){try{i?.error(o)}catch{}throw i=null,o}finally{r=!1}}};return new TransformStream({transform(s,o){try{t.write(s),n(o)}catch(a){try{i?.error(a)}catch{}throw a}},flush(s){try{if(t.end(),n(s),t.validateEOF(),t.isEntryActive()&&!t.isBodyComplete())try{i?.close()}catch{}}catch(o){try{i?.error(o)}catch{}throw o}}},void 0,{highWaterMark:1})}async function ye(e){let{readable:t,controller:i}=je();return await(async()=>{for(let r of e){let n=i.add(r.header),s="body"in r?r.body:r.data;if(!s){await n.close();continue}if(s instanceof ReadableStream)await s.pipeTo(n);else if(s instanceof Blob)await s.stream().pipeTo(n);else try{let o=await ue(s);if(o.length>0){let a=n.getWriter();await a.write(o),await a.close()}else await n.close()}catch{throw new TypeError(`Unsupported content type for entry "${r.header.name}".`)}}})().then(()=>i.finalize()).catch(r=>i.error(r)),new Uint8Array(await we(t))}async function Ae(e,t={}){let i=e instanceof ReadableStream?e:new ReadableStream({start(s){s.enqueue(e instanceof Uint8Array?e:new Uint8Array(e)),s.close()}}),r=[],n=i.pipeThrough(qe(t));for await(let s of n){let o;try{o=fe(s.header,t)}catch(a){throw await s.body.cancel(),a}if(o===null){await ge(s.body);continue}z(o)?(await ge(s.body),r.push({header:o})):r.push({header:o,data:await we(s.body)})}return r}var $=null,Z=null;async function Ce(){if($)return $;if(Z)throw Z;try{return $=await import("node-liblzma"),$}catch{throw Z=new Error("xz compression requires node-liblzma which failed to load. Install liblzma-dev (apt) or xz (brew) and reinstall dependencies."),Z}}var B=null,D=null;async function xe(){if(B)return B;if(D)throw D;try{return B=await import("@mongodb-js/zstd"),B}catch{throw D=new Error("zstd compression requires @mongodb-js/zstd which is not installed. Install it with: npm install @mongodb-js/zstd"),D}}var y=100*1024*1024,_e=1e4;function Ye(e){let t="file";e.isDirectory?t="directory":e.isSymlink&&(t="symlink");let i=e.name;e.isDirectory&&!i.endsWith("/")&&(i+="/");let r;e.content!==void 0&&(typeof e.content=="string"?r=new TextEncoder().encode(e.content):r=e.content);let n=e.isDirectory||e.isSymlink?0:r?.length??0;return{header:{name:i,mode:e.mode??(e.isDirectory?493:420),uid:e.uid??0,gid:e.gid??0,size:n,mtime:e.mtime??new Date,type:t,linkname:e.linkTarget??"",uname:"user",gname:"user"},body:r}}async function C(e){let t=e.map(Ye);return ye(t)}async function Ue(e){let t=await C(e),n=new ReadableStream({start(l){l.enqueue(t),l.close()}}).pipeThrough(Se()).getReader(),s=[];for(;;){let{done:l,value:d}=await n.read();if(l)break;s.push(d)}let o=s.reduce((l,d)=>l+d.length,0),a=new Uint8Array(o),c=0;for(let l of s)a.set(l,c),c+=l.length;return a}async function _(e){if(e.length>y)return{entries:[],error:`Archive too large (max ${y} bytes)`};try{let t=await Ae(e),i=[];for(let r of t){if(i.length>=_e)return{entries:i,error:`Too many entries (max ${_e})`};let n="file";switch(r.header.type){case"directory":n="directory";break;case"symlink":n="symlink";break;case"link":n="hardlink";break;case"file":n="file";break;default:n="other"}i.push({name:r.header.name,mode:r.header.mode??420,uid:r.header.uid??0,gid:r.header.gid??0,size:r.header.size,mtime:r.header.mtime??new Date,type:n,linkTarget:r.header.linkname||void 0,content:r.data??new Uint8Array(0)})}return{entries:i}}catch(t){let i=t instanceof Error?t.message:"Unknown error";return{entries:[],error:i}}}async function X(e){if(e.length>y)return{entries:[],error:`Archive too large (max ${y} bytes)`};try{let r=new ReadableStream({start(c){c.enqueue(e),c.close()}}).pipeThrough(Ee()).getReader(),n=[];for(;;){let{done:c,value:l}=await r.read();if(c)break;n.push(l)}let s=n.reduce((c,l)=>c+l.length,0),o=new Uint8Array(s),a=0;for(let c of n)o.set(c,a),a+=c.length;return _(o)}catch(t){let i=t instanceof Error?t.message:"Unknown error";return{entries:[],error:`Decompression failed: ${i}`}}}function j(e){return e.length>=2&&e[0]===31&&e[1]===139}function q(e){return e.length>=3&&e[0]===66&&e[1]===90&&e[2]===104}function Y(e){return e.length>=6&&e[0]===253&&e[1]===55&&e[2]===122&&e[3]===88&&e[4]===90&&e[5]===0}async function Ve(e){let i=Te.Bzip2.decompressFile(Array.from(e));return new Uint8Array(i)}async function Je(e){let t=Te.Bzip2,i=[];return t.compressFile(Array.from(e),i,9),new Uint8Array(i)}async function Qe(e){let i=(await Ce()).unxzSync(Buffer.from(e));return new Uint8Array(i)}async function et(e){let i=(await Ce()).xzSync(Buffer.from(e));return new Uint8Array(i)}async function Ie(e){let t=await C(e);return Je(t)}async function Fe(e){let t=await C(e);return et(t)}async function V(e){if(e.length>y)return{entries:[],error:`Archive too large (max ${y} bytes)`};try{let t=await Ve(e);return _(t)}catch(t){let i=t instanceof Error?t.message:"Unknown error";return{entries:[],error:i}}}async function J(e){if(e.length>y)return{entries:[],error:`Archive too large (max ${y} bytes)`};try{let t=await Qe(e);return _(t)}catch(t){let i=t instanceof Error?t.message:"Unknown error";return{entries:[],error:i}}}function Q(e){return e.length>=4&&e[0]===40&&e[1]===181&&e[2]===47&&e[3]===253}async function tt(e){let i=await(await xe()).compress(Buffer.from(e),3);return new Uint8Array(i)}async function rt(e){let i=await(await xe()).decompress(Buffer.from(e));return new Uint8Array(i)}async function ve(e){let t=await C(e);return tt(t)}async function ee(e){if(e.length>y)return{entries:[],error:`Archive too large (max ${y} bytes)`};try{let t=await rt(e);return _(t)}catch(t){let i=t instanceof Error?t.message:"Unknown error";return{entries:[],error:i}}}function ze(e){let t={create:!1,append:!1,update:!1,extract:!1,list:!1,file:"",autoCompress:!1,gzip:!1,bzip2:!1,xz:!1,zstd:!1,verbose:!1,toStdout:!1,keepOldFiles:!1,touch:!1,directory:"",preserve:!1,strip:0,exclude:[],filesFrom:"",excludeFrom:"",wildcards:!1},i=[],r=0;for(;r<e.length;){let n=e[r];if(n.startsWith("-")&&!n.startsWith("--")&&n.length>2){if(/^-\d+$/.test(n)){i.push(n),r++;continue}for(let s=1;s<n.length;s++){let o=n[s];switch(o){case"c":t.create=!0;break;case"r":t.append=!0;break;case"u":t.update=!0;break;case"x":t.extract=!0;break;case"t":t.list=!0;break;case"a":t.autoCompress=!0;break;case"z":t.gzip=!0;break;case"j":t.bzip2=!0;break;case"J":t.xz=!0;break;case"v":t.verbose=!0;break;case"O":t.toStdout=!0;break;case"k":t.keepOldFiles=!0;break;case"m":t.touch=!0;break;case"p":t.preserve=!0;break;case"f":if(s<n.length-1)t.file=n.substring(s+1),s=n.length;else{if(r++,r>=e.length)return{ok:!1,error:{stdout:"",stderr:`tar: option requires an argument -- 'f'
4
- `,exitCode:2}};t.file=e[r]}break;case"C":if(s<n.length-1)t.directory=n.substring(s+1),s=n.length;else{if(r++,r>=e.length)return{ok:!1,error:{stdout:"",stderr:`tar: option requires an argument -- 'C'
5
- `,exitCode:2}};t.directory=e[r]}break;case"T":if(s<n.length-1)t.filesFrom=n.substring(s+1),s=n.length;else{if(r++,r>=e.length)return{ok:!1,error:{stdout:"",stderr:`tar: option requires an argument -- 'T'
6
- `,exitCode:2}};t.filesFrom=e[r]}break;case"X":if(s<n.length-1)t.excludeFrom=n.substring(s+1),s=n.length;else{if(r++,r>=e.length)return{ok:!1,error:{stdout:"",stderr:`tar: option requires an argument -- 'X'
7
- `,exitCode:2}};t.excludeFrom=e[r]}break;default:return{ok:!1,error:K("tar",`-${o}`)}}}r++;continue}if(n==="-c"||n==="--create")t.create=!0;else if(n==="-r"||n==="--append")t.append=!0;else if(n==="-u"||n==="--update")t.update=!0;else if(n==="-x"||n==="--extract"||n==="--get")t.extract=!0;else if(n==="-t"||n==="--list")t.list=!0;else if(n==="-a"||n==="--auto-compress")t.autoCompress=!0;else if(n==="-z"||n==="--gzip"||n==="--gunzip")t.gzip=!0;else if(n==="-j"||n==="--bzip2")t.bzip2=!0;else if(n==="-J"||n==="--xz")t.xz=!0;else if(n==="--zstd")t.zstd=!0;else if(n==="-v"||n==="--verbose")t.verbose=!0;else if(n==="-O"||n==="--to-stdout")t.toStdout=!0;else if(n==="-k"||n==="--keep-old-files")t.keepOldFiles=!0;else if(n==="-m"||n==="--touch")t.touch=!0;else if(n==="--wildcards")t.wildcards=!0;else if(n==="-p"||n==="--preserve"||n==="--preserve-permissions")t.preserve=!0;else if(n==="-f"||n==="--file"){if(r++,r>=e.length)return{ok:!1,error:{stdout:"",stderr:`tar: option requires an argument -- 'f'
8
- `,exitCode:2}};t.file=e[r]}else if(n.startsWith("--file="))t.file=n.substring(7);else if(n==="-C"||n==="--directory"){if(r++,r>=e.length)return{ok:!1,error:{stdout:"",stderr:`tar: option requires an argument -- 'C'
9
- `,exitCode:2}};t.directory=e[r]}else if(n.startsWith("--directory="))t.directory=n.substring(12);else if(n.startsWith("--strip-components=")||n.startsWith("--strip=")){let s=n.includes("--strip-components=")?n.substring(19):n.substring(8),o=parseInt(s,10);if(Number.isNaN(o)||o<0)return{ok:!1,error:{stdout:"",stderr:`tar: invalid number for --strip: '${s}'
10
- `,exitCode:2}};t.strip=o}else if(n.startsWith("--exclude="))t.exclude.push(n.substring(10));else if(n==="--exclude"){if(r++,r>=e.length)return{ok:!1,error:{stdout:"",stderr:`tar: option '--exclude' requires an argument
11
- `,exitCode:2}};t.exclude.push(e[r])}else if(n==="-T"||n==="--files-from"){if(r++,r>=e.length)return{ok:!1,error:{stdout:"",stderr:`tar: option requires an argument -- 'T'
12
- `,exitCode:2}};t.filesFrom=e[r]}else if(n.startsWith("--files-from="))t.filesFrom=n.substring(13);else if(n==="-X"||n==="--exclude-from"){if(r++,r>=e.length)return{ok:!1,error:{stdout:"",stderr:`tar: option requires an argument -- 'X'
13
- `,exitCode:2}};t.excludeFrom=e[r]}else if(n.startsWith("--exclude-from="))t.excludeFrom=n.substring(15);else if(n==="--"){i.push(...e.slice(r+1));break}else{if(n.startsWith("-"))return{ok:!1,error:K("tar",n)};i.push(n)}r++}return{ok:!0,options:t,files:i}}var ke=100,nt={name:"tar",summary:"manipulate tape archives",usage:"tar [options] [file...]",description:["Create, extract, or list contents of tar archives.","","One of -c, -r, -u, -x, or -t is required to specify the operation."],options:["-c, --create create a new archive","-r, --append append files to the end of an archive","-u, --update only append files newer than copy in archive","-x, --extract extract files from an archive","-t, --list list contents of an archive","-f, --file=ARCHIVE use archive file ARCHIVE","-a, --auto-compress use archive suffix to determine compression","-z, --gzip filter archive through gzip","-j, --bzip2 filter archive through bzip2","-J, --xz filter archive through xz","--zstd filter archive through zstd","-v, --verbose verbosely list files processed","-O, --to-stdout extract files to standard output","-k, --keep-old-files don't replace existing files when extracting","-m, --touch don't extract file modified time","-C, --directory=DIR change to directory DIR before performing operations","-p, --preserve preserve permissions","-T, --files-from=FILE read files to extract/create from FILE","-X, --exclude-from=FILE read exclude patterns from FILE","--strip=N strip N leading path components on extraction","--exclude=PATTERN exclude files matching PATTERN","--wildcards use wildcards for pattern matching"," --help display this help and exit"],examples:["tar -cvf archive.tar file1 file2 Create archive from files","tar -czvf archive.tar.gz dir/ Create gzip-compressed archive","tar -cjvf archive.tar.bz2 dir/ Create bzip2-compressed archive","tar -rf archive.tar newfile.txt Append file to archive","tar -uf archive.tar dir/ Update archive with newer files","tar -xvf archive.tar Extract archive","tar -xvf archive.tar -C /tmp Extract to /tmp","tar -tvf archive.tar List archive contents","tar -xzf archive.tar.gz Extract gzip archive","tar -xf archive.tar file1.txt Extract specific file","tar -xOf archive.tar file.txt Extract file to stdout","tar -xf archive.tar --wildcards '*.txt' Extract matching files"]};function te(e,t){let i=e.includes("/")?e.substring(e.lastIndexOf("/")+1):e;for(let r of t){let n=r.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/<<<GLOBSTAR>>>/g,".*").replace(/\?/g,".");if(x(`^${n}$`).test(e)||x(`^${n}/`).test(e)||!r.includes("/")&&x(`^${n}$`).test(i))return!0}return!1}function N(e,t){let i=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/<<<GLOBSTAR>>>/g,".*").replace(/\?/g,"."),r=e.includes("/")?e.substring(e.lastIndexOf("/")+1):e;return x(`^${i}$`).test(e)||x(`^${i}$`).test(r)}function Re(e,t){if(t<=0)return e;let i=e.split("/").filter(r=>r!=="");return i.length<=t?"":i.slice(t).join("/")}function it(e,t){let i=t?"d":"-",r=[e&256?"r":"-",e&128?"w":"-",e&64?"x":"-",e&32?"r":"-",e&16?"w":"-",e&8?"x":"-",e&4?"r":"-",e&2?"w":"-",e&1?"x":"-"].join("");return i+r}function st(e){let i=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][e.getMonth()],r=e.getDate().toString().padStart(2," "),n=e.getHours().toString().padStart(2,"0"),s=e.getMinutes().toString().padStart(2,"0");return`${i} ${r} ${n}:${s}`}async function L(e,t,i,r){let n=[],s=[],o=e.fs.resolvePath(t,i);try{let a=await e.fs.stat(o);if(te(i,r))return{entries:n,errors:s};if(a.isDirectory){n.push({name:i,isDirectory:!0,mode:a.mode,mtime:a.mtime});let c=await e.fs.readdir(o);for(let l=0;l<c.length;l+=ke){let d=c.slice(l,l+ke),u=await Promise.all(d.map(g=>L(e,t,i?`${i}/${g}`:g,r)));for(let g of u)n.push(...g.entries),s.push(...g.errors)}}else if(a.isFile){let c=await e.fs.readFileBuffer(o);n.push({name:i,content:c,mode:a.mode,mtime:a.mtime})}else if(a.isSymbolicLink){let c=await e.fs.readlink(o);n.push({name:i,isSymlink:!0,linkTarget:c,mode:a.mode,mtime:a.mtime})}}catch(a){let c=a instanceof Error?a.message:"unknown error";s.push(`tar: ${i}: ${c}`)}return{entries:n,errors:s}}async function at(e,t,i){if(i.length===0)return{stdout:"",stderr:`tar: Cowardly refusing to create an empty archive
14
- `,exitCode:2};let r=t.directory?e.fs.resolvePath(e.cwd,t.directory):e.cwd,n=[],s=[],o="";for(let d of i){let{entries:u,errors:g}=await L(e,r,d,t.exclude);if(n.push(...u),s.push(...g),t.verbose)for(let p of u)o+=`${p.name}${p.isDirectory?"/":""}
15
- `}if(n.length===0&&s.length>0)return{stdout:"",stderr:`${s.join(`
16
- `)}
17
- `,exitCode:2};let a;try{t.gzip?a=await Ue(n):t.bzip2?a=await Ie(n):t.xz?a=await Fe(n):t.zstd?a=await ve(n):a=await C(n)}catch(d){return{stdout:"",stderr:`tar: error creating archive: ${d instanceof Error?d.message:"unknown error"}
18
- `,exitCode:2}}let c="";if(t.file&&t.file!=="-"){let d=e.fs.resolvePath(e.cwd,t.file);try{await e.fs.writeFile(d,a)}catch(u){let g=u instanceof Error?u.message:"unknown error";return{stdout:"",stderr:`tar: ${t.file}: ${g}
19
- `,exitCode:2}}}else c=String.fromCharCode(...a);let l=o;return s.length>0&&(l+=`${s.join(`
20
- `)}
21
- `),{stdout:c,stderr:l,exitCode:s.length>0?2:0}}async function ot(e,t,i){if(!t.file||t.file==="-")return{stdout:"",stderr:`tar: Cannot append to stdin/stdout
22
- `,exitCode:2};if(i.length===0)return{stdout:"",stderr:`tar: Cowardly refusing to append nothing to archive
23
- `,exitCode:2};let r=e.fs.resolvePath(e.cwd,t.file),n;try{n=await e.fs.readFileBuffer(r)}catch{return{stdout:"",stderr:`tar: ${t.file}: Cannot open: No such file or directory
24
- `,exitCode:2}}let s=await _(n);if(s.error)return{stdout:"",stderr:`tar: ${s.error}
25
- `,exitCode:2};let o=s.entries.map(f=>({name:f.name,content:f.content,mode:f.mode,mtime:f.mtime,isDirectory:f.type==="directory",isSymlink:f.type==="symlink",linkTarget:f.linkTarget,uid:f.uid,gid:f.gid})),a=t.directory?e.fs.resolvePath(e.cwd,t.directory):e.cwd,c=[],l=[],d="";for(let f of i){let{entries:h,errors:m}=await L(e,a,f,t.exclude);if(c.push(...h),l.push(...m),t.verbose)for(let S of h)d+=`${S.name}${S.isDirectory?"/":""}
26
- `}let u=[...o,...c],g;try{g=await C(u)}catch(f){return{stdout:"",stderr:`tar: error creating archive: ${f instanceof Error?f.message:"unknown error"}
27
- `,exitCode:2}}try{await e.fs.writeFile(r,g)}catch(f){let h=f instanceof Error?f.message:"unknown error";return{stdout:"",stderr:`tar: ${t.file}: ${h}
28
- `,exitCode:2}}let p=d;return l.length>0&&(p+=`${l.join(`
29
- `)}
30
- `),{stdout:"",stderr:p,exitCode:l.length>0?2:0}}async function ct(e,t,i){if(!t.file||t.file==="-")return{stdout:"",stderr:`tar: Cannot update stdin/stdout
31
- `,exitCode:2};if(i.length===0)return{stdout:"",stderr:`tar: Cowardly refusing to update with nothing
32
- `,exitCode:2};let r=e.fs.resolvePath(e.cwd,t.file),n;try{n=await e.fs.readFileBuffer(r)}catch{return{stdout:"",stderr:`tar: ${t.file}: Cannot open: No such file or directory
33
- `,exitCode:2}}let s=await _(n);if(s.error)return{stdout:"",stderr:`tar: ${s.error}
34
- `,exitCode:2};let o=new Map;for(let m of s.entries)o.set(m.name,m.mtime);let a=t.directory?e.fs.resolvePath(e.cwd,t.directory):e.cwd,c=[],l=[],d="";for(let m of i){let{entries:S,errors:E}=await L(e,a,m,t.exclude);l.push(...E);for(let w of S){let I=o.get(w.name);(!I||w.mtime&&w.mtime.getTime()>I.getTime())&&(c.push(w),t.verbose&&(d+=`${w.name}${w.isDirectory?"/":""}
35
- `))}}if(c.length===0){let m="";return l.length>0&&(m=`${l.join(`
36
- `)}
37
- `),{stdout:"",stderr:m,exitCode:l.length>0?2:0}}let u=new Set(c.map(m=>m.name)),p=[...s.entries.filter(m=>!u.has(m.name)).map(m=>({name:m.name,content:m.content,mode:m.mode,mtime:m.mtime,isDirectory:m.type==="directory",isSymlink:m.type==="symlink",linkTarget:m.linkTarget,uid:m.uid,gid:m.gid})),...c],f;try{f=await C(p)}catch(m){return{stdout:"",stderr:`tar: error creating archive: ${m instanceof Error?m.message:"unknown error"}
38
- `,exitCode:2}}try{await e.fs.writeFile(r,f)}catch(m){let S=m instanceof Error?m.message:"unknown error";return{stdout:"",stderr:`tar: ${t.file}: ${S}
39
- `,exitCode:2}}let h=d;return l.length>0&&(h+=`${l.join(`
40
- `)}
41
- `),{stdout:"",stderr:h,exitCode:l.length>0?2:0}}async function lt(e,t,i){let r;if(t.file&&t.file!=="-"){let f=e.fs.resolvePath(e.cwd,t.file);try{r=await e.fs.readFileBuffer(f)}catch{return{stdout:"",stderr:`tar: ${t.file}: Cannot open: No such file or directory
42
- `,exitCode:2}}}else r=Uint8Array.from(e.stdin,f=>f.charCodeAt(0));let n,s=t.gzip||j(r),o=t.bzip2||q(r),a=t.xz||Y(r),c=t.zstd||Q(r);if(s?n=await X(r):o?n=await V(r):a?n=await J(r):c?n=await ee(r):n=await _(r),n.error)return{stdout:"",stderr:`tar: ${n.error}
43
- `,exitCode:2};let l=t.directory?e.fs.resolvePath(e.cwd,t.directory):e.cwd,d="",u="",g=[];if(t.directory&&!t.toStdout)try{await e.fs.mkdir(l,{recursive:!0})}catch{}for(let f of n.entries){let h=Re(f.name,t.strip);if(!h)continue;let m=h.endsWith("/")?h.slice(0,-1):h;if(i.length>0){let E;if(t.wildcards?E=i.some(w=>N(h,w)||N(m,w)||h.startsWith(`${w}/`)):E=i.some(w=>h===w||h.startsWith(`${w}/`)||m===w),!E)continue}if(te(h,t.exclude))continue;let S=e.fs.resolvePath(l,h);try{if(f.type==="directory"){if(t.toStdout)continue;await e.fs.mkdir(S,{recursive:!0}),t.verbose&&(d+=`${h}
44
- `)}else if(f.type==="file"){if(t.toStdout){u+=new TextDecoder().decode(f.content),t.verbose&&(d+=`${h}
45
- `);continue}if(t.keepOldFiles)try{await e.fs.stat(S),t.verbose&&(d+=`${h}: not overwritten, file exists
46
- `);continue}catch{}let E=S.substring(0,S.lastIndexOf("/"));if(E)try{await e.fs.mkdir(E,{recursive:!0})}catch{}if(await e.fs.writeFile(S,f.content),t.preserve&&f.mode)try{await e.fs.chmod(S,f.mode)}catch{}t.verbose&&(d+=`${h}
47
- `)}else if(f.type==="symlink"&&f.linkTarget){if(t.toStdout)continue;if(t.keepOldFiles)try{await e.fs.stat(S),t.verbose&&(d+=`${h}: not overwritten, file exists
48
- `);continue}catch{}let E=S.substring(0,S.lastIndexOf("/"));if(E)try{await e.fs.mkdir(E,{recursive:!0})}catch{}try{await e.fs.symlink(f.linkTarget,S)}catch{}t.verbose&&(d+=`${h}
49
- `)}}catch(E){let w=E instanceof Error?E.message:"unknown error";g.push(`tar: ${h}: ${w}`)}}let p=d;return g.length>0&&(p+=`${g.join(`
50
- `)}
51
- `),{stdout:u,stderr:p,exitCode:g.length>0?2:0}}async function ut(e,t,i){let r;if(t.file&&t.file!=="-"){let d=e.fs.resolvePath(e.cwd,t.file);try{r=await e.fs.readFileBuffer(d)}catch{return{stdout:"",stderr:`tar: ${t.file}: Cannot open: No such file or directory
52
- `,exitCode:2}}}else r=Uint8Array.from(e.stdin,d=>d.charCodeAt(0));let n,s=t.gzip||j(r),o=t.bzip2||q(r),a=t.xz||Y(r),c=t.zstd||Q(r);if(s?n=await X(r):o?n=await V(r):a?n=await J(r):c?n=await ee(r):n=await _(r),n.error)return{stdout:"",stderr:`tar: ${n.error}
53
- `,exitCode:2};let l="";for(let d of n.entries){let u=Re(d.name,t.strip);if(!u)continue;let g=u.endsWith("/")?u.slice(0,-1):u;if(i.length>0){let p;if(t.wildcards?p=i.some(f=>N(u,f)||N(g,f)||u.startsWith(`${f}/`)):p=i.some(f=>u===f||u.startsWith(`${f}/`)||g===f),!p)continue}if(!te(u,t.exclude))if(t.verbose){let p=d.type==="directory",f=it(d.mode,p),h=`${d.uid}/${d.gid}`,m=d.size.toString().padStart(8," "),S=st(d.mtime),E=`${f} ${h.padEnd(10)} ${m} ${S} ${u}`;d.type==="symlink"&&d.linkTarget&&(E+=` -> ${d.linkTarget}`),l+=`${E}
54
- `}else l+=`${u}
55
- `}return{stdout:l,stderr:"",exitCode:0}}var Tt={name:"tar",async execute(e,t){if(ie(e))return ne(nt);let i=ze(e);if(!i.ok)return i.error;let{options:r,files:n}=i,s=[r.create,r.append,r.update,r.extract,r.list].filter(Boolean).length;if(s===0)return{stdout:"",stderr:`tar: You must specify one of -c, -r, -u, -x, or -t
56
- `,exitCode:2};if(s>1)return{stdout:"",stderr:`tar: You may not specify more than one of -c, -r, -u, -x, or -t
57
- `,exitCode:2};if(r.autoCompress&&r.file&&r.create){let c=r.file.toLowerCase();c.endsWith(".tar.gz")||c.endsWith(".tgz")?r.gzip=!0:c.endsWith(".tar.bz2")||c.endsWith(".tbz2")?r.bzip2=!0:c.endsWith(".tar.xz")||c.endsWith(".txz")?r.xz=!0:(c.endsWith(".tar.zst")||c.endsWith(".tzst"))&&(r.zstd=!0)}let o=[r.gzip,r.bzip2,r.xz,r.zstd].filter(Boolean).length;if(o>1)return{stdout:"",stderr:`tar: You may not specify more than one compression option
58
- `,exitCode:2};if((r.append||r.update)&&o>0)return{stdout:"",stderr:`tar: Cannot append/update compressed archives - decompress first
59
- `,exitCode:2};let a=n;if(r.filesFrom){let c=t.fs.resolvePath(t.cwd,r.filesFrom);try{let d=(await t.fs.readFile(c)).split(`
60
- `).map(u=>u.trim()).filter(u=>u.length>0&&!u.startsWith("#"));a=[...n,...d]}catch{return{stdout:"",stderr:`tar: ${r.filesFrom}: Cannot open: No such file or directory
61
- `,exitCode:2}}}if(r.excludeFrom){let c=t.fs.resolvePath(t.cwd,r.excludeFrom);try{let d=(await t.fs.readFile(c)).split(`
62
- `).map(u=>u.trim()).filter(u=>u.length>0&&!u.startsWith("#"));r.exclude.push(...d)}catch{return{stdout:"",stderr:`tar: ${r.excludeFrom}: Cannot open: No such file or directory
63
- `,exitCode:2}}}return r.create?at(t,r,a):r.append?ot(t,r,a):r.update?ct(t,r,a):r.extract?lt(t,r,a):ut(t,r,a)}},Ct={name:"tar",flags:[{flag:"-c",type:"boolean"},{flag:"-x",type:"boolean"},{flag:"-t",type:"boolean"},{flag:"-f",type:"value",valueHint:"path"},{flag:"-z",type:"boolean"},{flag:"-j",type:"boolean"},{flag:"-v",type:"boolean"},{flag:"-C",type:"value",valueHint:"path"},{flag:"--strip-components",type:"value",valueHint:"number"},{flag:"--exclude",type:"value",valueHint:"pattern"}],needsArgs:!0};export{Tt as a,Ct as b};
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env node
2
- var c=new Map([["File operations",["ls","cat","head","tail","wc","touch","mkdir","rm","cp","mv","ln","chmod","stat","readlink"]],["Text processing",["grep","sed","awk","sort","uniq","cut","tr","tee","diff"]],["Search",["find"]],["Navigation & paths",["pwd","basename","dirname","tree","du"]],["Environment & shell",["echo","printf","env","printenv","export","alias","unalias","history","clear","true","false","bash","sh"]],["Data processing",["xargs","jq","base64","date"]],["Network",["curl","html-to-markdown"]]]);function l(n){let e=[],t=new Set(n);e.push(`Available commands:
3
- `);let s=[];for(let[a,r]of c){let o=r.filter(i=>t.has(i));if(o.length>0){e.push(` ${a}:`),e.push(` ${o.join(", ")}
4
- `);for(let i of o)t.delete(i)}}for(let a of t)s.push(a);return s.length>0&&(e.push(" Other:"),e.push(` ${s.sort().join(", ")}
5
- `)),e.push("Use '<command> --help' for details on a specific command."),`${e.join(`
6
- `)}
7
- `}var d={name:"help",async execute(n,e){if(n.includes("--help")||n.includes("-h"))return{stdout:`help - display available commands
8
-
9
- Usage: help [command]
10
-
11
- Options:
12
- -h, --help Show this help message
13
-
14
- If a command name is provided, shows help for that command.
15
- Otherwise, lists all available commands.
16
- `,stderr:"",exitCode:0};if(n.length>0&&e.exec){let s=n[0];return e.exec(`${s} --help`,{cwd:e.cwd})}let t=e.getRegisteredCommands?.()??[];return{stdout:l(t),stderr:"",exitCode:0}}},m={name:"help",flags:[]};export{d as a,m as b};
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env node
2
- import{a as c}from"./chunk-4PRVMER6.js";var C={name:"time",async execute(i,r){let a="%e %M",o=null,d=!1,m=!1,t=0;for(;t<i.length;){let e=i[t];if(e==="-f"||e==="--format"){if(t++,t>=i.length)return{stdout:"",stderr:`time: missing argument to '-f'
3
- `,exitCode:1};a=i[t],t++}else if(e==="-o"||e==="--output"){if(t++,t>=i.length)return{stdout:"",stderr:`time: missing argument to '-o'
4
- `,exitCode:1};o=i[t],t++}else if(e==="-a"||e==="--append")d=!0,t++;else if(e==="-v"||e==="--verbose")a=`Command being timed: %C
5
- Elapsed (wall clock) time: %e seconds
6
- Maximum resident set size (kbytes): %M`,t++;else if(e==="-p"||e==="--portability")m=!0,t++;else if(e==="--"){t++;break}else if(e.startsWith("-"))t++;else break}let f=i.slice(t);if(f.length===0)return{stdout:"",stderr:"",exitCode:0};let p=performance.now(),u=f.join(" "),s;try{if(!r.exec)return{stdout:"",stderr:`time: exec not available
7
- `,exitCode:1};s=await r.exec(u,{env:c(r.env),cwd:r.cwd})}catch(e){s={stdout:"",stderr:`time: ${e.message}
8
- `,exitCode:127}}let l=(performance.now()-p)/1e3,n;if(m?n=`real ${l.toFixed(2)}
9
- user 0.00
10
- sys 0.00
11
- `:(n=a.replace(/%e/g,l.toFixed(2)).replace(/%E/g,w(l)).replace(/%M/g,"0").replace(/%S/g,"0.00").replace(/%U/g,"0.00").replace(/%P/g,"0%").replace(/%C/g,u),n.endsWith(`
12
- `)||(n+=`
13
- `)),o)try{let e=r.fs.resolvePath(r.cwd,o);if(d&&await r.fs.exists(e)){let g=await r.fs.readFile(e);await r.fs.writeFile(e,g+n)}else await r.fs.writeFile(e,n)}catch(e){return{stdout:s.stdout,stderr:s.stderr+`time: cannot write to '${o}': ${e.message}
14
- `,exitCode:s.exitCode}}else s={...s,stderr:s.stderr+n};return s}};function w(i){let r=Math.floor(i/3600),a=Math.floor(i%3600/60),o=i%60;return r>0?`${r}:${a.toString().padStart(2,"0")}:${o.toFixed(2).padStart(5,"0")}`:`${a}:${o.toFixed(2).padStart(5,"0")}`}var F={name:"time",flags:[{flag:"-p",type:"boolean"}],needsArgs:!0};export{C as a,F as b};
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env node
2
- import{a as f,b as c,c as a}from"./chunk-GTNBSMZR.js";var x={name:"timeout",summary:"run a command with a time limit",usage:"timeout [OPTION] DURATION COMMAND [ARG]...",description:`Start COMMAND, and kill it if still running after DURATION.
3
-
4
- DURATION is a number with optional suffix:
5
- s - seconds (default)
6
- m - minutes
7
- h - hours
8
- d - days`,options:["-k, --kill-after=DURATION send KILL signal after DURATION if still running","-s, --signal=SIGNAL specify signal to send (default: TERM)"," --preserve-status exit with same status as COMMAND, even on timeout"," --foreground run command in foreground"," --help display this help and exit"]};function A(r){let i=r.match(/^(\d+\.?\d*)(s|m|h|d)?$/);if(!i)return null;let n=parseFloat(i[1]);switch(i[2]||"s"){case"s":return n*1e3;case"m":return n*60*1e3;case"h":return n*60*60*1e3;case"d":return n*24*60*60*1e3;default:return null}}var v={name:"timeout",async execute(r,i){if(c(r))return f(x);let n=!1,s=0;for(let e=0;e<r.length;e++){let t=r[e];if(t==="--preserve-status")n=!0,s=e+1;else if(t==="--foreground")s=e+1;else if(t==="-k"||t==="--kill-after")e++,s=e+1;else if(t.startsWith("--kill-after="))s=e+1;else if(t==="-s"||t==="--signal")e++,s=e+1;else if(t.startsWith("--signal="))s=e+1;else{if(t.startsWith("--")&&t!=="--")return a("timeout",t);if(t.startsWith("-")&&t.length>1&&t!=="--")if(t.startsWith("-k"))s=e+1;else if(t.startsWith("-s"))s=e+1;else return a("timeout",t);else{s=e;break}}}let o=r.slice(s);if(o.length===0)return{stdout:"",stderr:`timeout: missing operand
9
- `,exitCode:1};let u=o[0],l=A(u);if(l===null)return{stdout:"",stderr:`timeout: invalid time interval '${u}'
10
- `,exitCode:1};let m=o.slice(1);if(m.length===0)return{stdout:"",stderr:`timeout: missing operand
11
- `,exitCode:1};if(!i.exec)return{stdout:"",stderr:`timeout: exec not available
12
- `,exitCode:1};let g=m.map(e=>e.includes(" ")||e.includes(" ")?`'${e.replace(/'/g,"'\\''")}'`:e).join(" "),p=new Promise(e=>{setTimeout(()=>e({timedOut:!0}),l)}),h=i.exec(g,{cwd:i.cwd}).then(e=>({timedOut:!1,result:e})),d=await Promise.race([p,h]);return d.timedOut?{stdout:"",stderr:"",exitCode:124}:d.result}},k={name:"timeout",flags:[{flag:"-k",type:"value",valueHint:"string"},{flag:"-s",type:"value",valueHint:"string"},{flag:"--preserve-status",type:"boolean"},{flag:"--foreground",type:"boolean"}],needsArgs:!0,minArgs:2};export{v as a,k as b};
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env node
2
- import{c as u}from"./chunk-4PRVMER6.js";import{a as l,b as h}from"./chunk-GTNBSMZR.js";var d={name:"bash",summary:"execute shell commands or scripts",usage:"bash [OPTIONS] [SCRIPT_FILE] [ARGUMENTS...]",options:["-c COMMAND execute COMMAND string"," --help display this help and exit"],notes:["Without -c, reads and executes commands from SCRIPT_FILE.","Arguments are passed as $1, $2, etc. to the script.",'$0 is set to the script name (or "bash" with -c).']},y={name:"bash",async execute(t,e){if(h(t))return l(d);if(t[0]==="-c"&&t.length>=2){let r=t[1],s=t[2]||"bash",c=t.slice(3);return i(r,s,c,e)}if(t.length===0)return e.stdin?.trim()?i(e.stdin,"bash",[],e):{stdout:"",stderr:"",exitCode:0};let n=t[0],o=t.slice(1);try{let r=e.fs.resolvePath(e.cwd,n),s=await e.fs.readFile(r);return i(s,n,o,e)}catch{return{stdout:"",stderr:`bash: ${n}: No such file or directory
3
- `,exitCode:127}}}},C={name:"sh",async execute(t,e){if(h(t))return l({...d,name:"sh",summary:"execute shell commands or scripts (POSIX shell)"});if(t[0]==="-c"&&t.length>=2){let r=t[1],s=t[2]||"sh",c=t.slice(3);return i(r,s,c,e)}if(t.length===0)return e.stdin?.trim()?i(e.stdin,"sh",[],e):{stdout:"",stderr:"",exitCode:0};let n=t[0],o=t.slice(1);try{let r=e.fs.resolvePath(e.cwd,n),s=await e.fs.readFile(r);return i(s,n,o,e)}catch{return{stdout:"",stderr:`sh: ${n}: No such file or directory
4
- `,exitCode:127}}}};async function i(t,e,n,o){if(!o.exec)return{stdout:"",stderr:`bash: internal error: exec function not available
5
- `,exitCode:1};let r=u(o.exportedEnv||{},{0:e,"#":String(n.length),"@":n.join(" "),"*":n.join(" ")});n.forEach((a,m)=>{r[String(m+1)]=a});let s=t;if(s.startsWith("#!")){let a=s.indexOf(`
6
- `);a!==-1&&(s=s.slice(a+1))}return await o.exec(s,{env:r,cwd:o.cwd,stdin:o.stdin})}var b={name:"bash",flags:[{flag:"-c",type:"value",valueHint:"string"}],stdinType:"text"},P={name:"sh",flags:[{flag:"-c",type:"value",valueHint:"string"}],stdinType:"text"};export{y as a,C as b,b as c,P as d};
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env node
2
- import{a as m,b as f,c as p}from"./chunk-GTNBSMZR.js";var $={name:"env",summary:"run a program in a modified environment",usage:"env [OPTION]... [NAME=VALUE]... [COMMAND [ARG]...]",options:["-i, --ignore-environment start with an empty environment","-u NAME, --unset=NAME remove NAME from the environment"," --help display this help and exit"]},C={name:"env",async execute(o,l){if(f(o))return m($);let c=!1,i=[],a=new Map,t=-1;for(let n=0;n<o.length;n++){let e=o[n];if(e==="-i"||e==="--ignore-environment")c=!0;else if(e==="-u"&&n+1<o.length)i.push(o[++n]);else if(e.startsWith("-u"))i.push(e.slice(2));else if(e.startsWith("--unset="))i.push(e.slice(8));else{if(e.startsWith("--")&&e!=="--")return p("env",e);if(e.startsWith("-")&&e!=="-"){for(let r of e.slice(1))if(r!=="i"&&r!=="u")return p("env",`-${r}`);e.includes("i")&&(c=!0)}else if(e.includes("=")&&t===-1){let r=e.indexOf("="),y=e.slice(0,r),A=e.slice(r+1);a.set(y,A)}else{t=n;break}}}let s;if(c)s=new Map(a);else{s=new Map(l.env);for(let n of i)s.delete(n);for(let[n,e]of a)s.set(n,e)}if(t===-1){let n=[];for(let[e,r]of s)n.push(`${e}=${r}`);return{stdout:n.join(`
3
- `)+(n.length>0?`
4
- `:""),stderr:"",exitCode:0}}if(!l.exec)return{stdout:"",stderr:`env: command execution not supported in this context
5
- `,exitCode:1};let u=o.slice(t),h=u[0],g=u.slice(1).map(n=>/[\s"'\\$`!*?[\]{}|&;<>()]/.test(n)?`'${n.replace(/'/g,"'\\''")}'`:n),d=["command",h,...g].join(" "),v=Object.entries(a).map(([n,e])=>`${n}="${e}"`).join(" "),x=v?`${v} ${d}`:d;return l.exec(x,{cwd:l.cwd})}},w={name:"printenv",summary:"print all or part of environment",usage:"printenv [OPTION]... [VARIABLE]...",options:[" --help display this help and exit"]},E={name:"printenv",async execute(o,l){if(f(o))return m(w);let c=o.filter(t=>!t.startsWith("-"));if(c.length===0){let t=[];for(let[s,u]of l.env)t.push(`${s}=${u}`);return{stdout:t.join(`
6
- `)+(t.length>0?`
7
- `:""),stderr:"",exitCode:0}}let i=[],a=0;for(let t of c){let s=l.env.get(t);s!==void 0?i.push(s):a=1}return{stdout:i.join(`
8
- `)+(i.length>0?`
9
- `:""),stderr:"",exitCode:a}}},O={name:"env",flags:[{flag:"-i",type:"boolean"},{flag:"-u",type:"value",valueHint:"string"}]},j={name:"printenv",flags:[]};export{C as a,E as b,O as c,j as d};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{a,b,c,d}from"./chunk-W2FKF3MM.js";import"./chunk-GTNBSMZR.js";import"./chunk-KGOUQS5A.js";export{a as envCommand,c as flagsForFuzzing,b as printenvCommand,d as printenvFlagsForFuzzing};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{a,b}from"./chunk-5UH3Q7QT.js";import"./chunk-GIFF636B.js";import"./chunk-SE4C7FJY.js";import"./chunk-D5WP4CKS.js";import"./chunk-GTNBSMZR.js";import"./chunk-KGOUQS5A.js";export{a as findCommand,b as flagsForFuzzing};