@poe-platform/safe-bash 0.1.799 → 0.1.800

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 (847) hide show
  1. package/README.md +32 -17
  2. package/dist/image-ast/index.browser.js +1384 -23
  3. package/dist/image-ast/index.js +1384 -23
  4. package/dist/mp4-ast/types.d.ts +1 -0
  5. package/dist/office-package/zip.d.ts +2 -0
  6. package/dist/office-package/zip.js +1 -1
  7. package/dist/pdf-ast/index.js +1 -1
  8. package/dist/safe-bash/chunks/{chunk-IUTD5FH5.js → chunk-46UISJCK.js} +1 -6
  9. package/dist/safe-bash/chunks/chunk-4SEW2Q6H.js +26 -0
  10. package/dist/safe-bash/chunks/{chunk-AKC46AF6.js → chunk-7YSRXFEG.js} +7 -40
  11. package/dist/safe-bash/chunks/{chunk-KTGR4U57.js → chunk-BHJE5LPZ.js} +1 -2
  12. package/dist/safe-bash/chunks/{chunk-TRVGCN3U.js → chunk-HHW7MGS2.js} +2 -2
  13. package/dist/safe-bash/chunks/{chunk-ZNAFMYIA.js → chunk-I7L3G3NX.js} +1 -1
  14. package/dist/safe-bash/chunks/{chunk-KMH2DF3I.js → chunk-JJSTTIEZ.js} +6 -1
  15. package/dist/safe-bash/chunks/{chunk-6IBTC4YL.js → chunk-JTLSUJ7V.js} +57 -20
  16. package/dist/safe-bash/chunks/chunk-K2VCOJ2B.js +111 -0
  17. package/dist/safe-bash/chunks/chunk-K4YMYFRJ.js +9802 -0
  18. package/dist/safe-bash/chunks/{chunk-SPYL72GN.js → chunk-KW24TAIU.js} +446 -5519
  19. package/dist/safe-bash/chunks/{chunk-ENR3HB2B.js → chunk-NLAW7KDI.js} +0 -1
  20. package/dist/safe-bash/chunks/{chunk-B3DDEDH2.js → chunk-PPYM75Z3.js} +1 -1
  21. package/dist/safe-bash/chunks/{chunk-NX2SQVON.js → chunk-RKKRJ54E.js} +19 -7
  22. package/dist/safe-bash/chunks/{chunk-WUNK5NXJ.js → chunk-RMWLWH7Q.js} +870 -953
  23. package/dist/safe-bash/chunks/{chunk-JSVX4VIA.js → chunk-TFGRKY43.js} +2 -1
  24. package/dist/safe-bash/chunks/{chunk-T5KKDMYB.js → chunk-TYD7EVUJ.js} +6 -0
  25. package/dist/safe-bash/chunks/{csvkit-W2UEKH6P.js → csvkit-QGP3GAOB.js} +1 -1
  26. package/dist/safe-bash/chunks/{ffmpeg-42CGASMV.js → ffmpeg-JTVH26MK.js} +1 -1
  27. package/dist/safe-bash/chunks/{gh-26GYLH6D.js → gh-I7QX7N5C.js} +1 -1
  28. package/dist/safe-bash/chunks/{git-YREKMUVD.js → git-MA7NKYVP.js} +1 -1
  29. package/dist/safe-bash/chunks/{imagemagick-3YIX4XO2.js → imagemagick-Y4NPWX2Q.js} +1 -1
  30. package/dist/safe-bash/chunks/{implementation-E3YMKU3Z.js → implementation-BWDKOVQJ.js} +1 -1
  31. package/dist/safe-bash/chunks/mmdc-44PELHDG.js +118 -0
  32. package/dist/safe-bash/chunks/{pdfimages-UE2UISP2.js → pdfimages-635TRW4Q.js} +1 -1
  33. package/dist/safe-bash/chunks/{pdfinfo-RGARKLI5.js → pdfinfo-FSDAA2KY.js} +3 -11
  34. package/dist/safe-bash/chunks/{pdftk-JY3WVCCC.js → pdftk-GQ5UH3VG.js} +1 -1
  35. package/dist/safe-bash/chunks/{pdftoppm-GPD3BMPY.js → pdftoppm-YTXQCAYT.js} +1 -1
  36. package/dist/safe-bash/chunks/{pdftotext-K7GQ2QJZ.js → pdftotext-CVA2G7FY.js} +1 -1
  37. package/dist/safe-bash/chunks/{qpdf-F4U7WUSU.js → qpdf-HZMIFG4A.js} +1 -1
  38. package/dist/safe-bash/chunks/{sips-RWENS7X5.js → sips-E7UBDP33.js} +1 -1
  39. package/dist/safe-bash/chunks/{soffice-IT6W2C5F.js → soffice-ELASUWUK.js} +1 -1
  40. package/dist/safe-bash/chunks/{wkhtmltopdf-JYNDAHIZ.js → wkhtmltopdf-EPO6YCMG.js} +1 -1
  41. package/dist/safe-bash/command-chunks/chunk-2FGJYFWZ.js +44 -0
  42. package/dist/safe-bash/command-chunks/chunk-2H4JTFIL.js +53 -0
  43. package/dist/safe-bash/command-chunks/{chunk-LLCXZKZ6.js → chunk-2QHG43WJ.js} +2 -2
  44. package/dist/safe-bash/command-chunks/chunk-364TMWBT.js +946 -0
  45. package/dist/safe-bash/command-chunks/{chunk-EIVW3X3N.js → chunk-3DT2YOGW.js} +11 -6
  46. package/dist/safe-bash/command-chunks/chunk-3E2OIS2J.js +7037 -0
  47. package/dist/safe-bash/command-chunks/{chunk-AIRGA2SU.js → chunk-3HXDA5PT.js} +1 -1
  48. package/dist/safe-bash/command-chunks/chunk-3LSOYLNV.js +1091 -0
  49. package/dist/safe-bash/command-chunks/chunk-4B7Y7S6E.js +61 -0
  50. package/dist/safe-bash/command-chunks/{chunk-HRLIAMXC.js → chunk-4C6QI5BQ.js} +3 -2
  51. package/dist/safe-bash/command-chunks/chunk-4ZHMW6F5.js +104 -0
  52. package/dist/safe-bash/command-chunks/{chunk-4ZALPDBV.js → chunk-53P53XFM.js} +2 -2
  53. package/dist/safe-bash/command-chunks/chunk-5LSGEIZY.js +379 -0
  54. package/dist/safe-bash/command-chunks/{chunk-MKQVQMXO.js → chunk-5LU4UCBR.js} +1 -1
  55. package/dist/safe-bash/command-chunks/chunk-5T7CRJHW.js +560 -0
  56. package/dist/safe-bash/command-chunks/chunk-5TBUOBDE.js +346 -0
  57. package/dist/safe-bash/command-chunks/chunk-5XY4DTNG.js +34 -0
  58. package/dist/safe-bash/command-chunks/chunk-5ZMZ573Q.js +140 -0
  59. package/dist/safe-bash/command-chunks/{chunk-OPUJSTHS.js → chunk-67IQF5GC.js} +200 -66
  60. package/dist/safe-bash/command-chunks/chunk-67QKREJK.js +347 -0
  61. package/dist/safe-bash/command-chunks/chunk-6EPHJGGF.js +23 -0
  62. package/dist/safe-bash/command-chunks/chunk-6F4XCVON.js +266 -0
  63. package/dist/safe-bash/command-chunks/{chunk-ESMCX3YV.js → chunk-6HMX4CQS.js} +669 -130
  64. package/dist/safe-bash/command-chunks/chunk-7K6JYKPJ.js +422 -0
  65. package/dist/safe-bash/command-chunks/chunk-7N2LI2KO.js +206 -0
  66. package/dist/safe-bash/command-chunks/chunk-7RGB363W.js +362 -0
  67. package/dist/safe-bash/command-chunks/{pptx-GBPNWNEP-7EQEVXV5.js → chunk-AI5JAXQF.js} +34820 -18029
  68. package/dist/safe-bash/command-chunks/chunk-AMO3THU4.js +105 -0
  69. package/dist/safe-bash/command-chunks/chunk-BAGCY35S.js +231 -0
  70. package/dist/safe-bash/command-chunks/chunk-BAXU7B5Z.js +101 -0
  71. package/dist/safe-bash/command-chunks/{chunk-KMCZ6P4O.js → chunk-BKCNF5U3.js} +68 -7
  72. package/dist/safe-bash/command-chunks/chunk-BNOU5YQS.js +182 -0
  73. package/dist/safe-bash/command-chunks/chunk-C7I25AAL.js +25 -0
  74. package/dist/safe-bash/command-chunks/chunk-CKXV2CLD.js +65 -0
  75. package/dist/safe-bash/command-chunks/chunk-CQ5YGOGB.js +150 -0
  76. package/dist/safe-bash/command-chunks/{chunk-I3K5RYU4.js → chunk-D4OP2BR3.js} +72 -24
  77. package/dist/safe-bash/command-chunks/chunk-DB453IE6.js +122 -0
  78. package/dist/safe-bash/command-chunks/chunk-DOKKNRRM.js +87 -0
  79. package/dist/safe-bash/command-chunks/{chunk-2PX5B7T5.js → chunk-DQAVUDDX.js} +2 -2
  80. package/dist/safe-bash/command-chunks/chunk-DT7BCTWY.js +249 -0
  81. package/dist/safe-bash/command-chunks/chunk-E2LB7FRT.js +42 -0
  82. package/dist/safe-bash/command-chunks/chunk-EK6YNAXT.js +343 -0
  83. package/dist/safe-bash/command-chunks/chunk-EQ4HV54N.js +22 -0
  84. package/dist/safe-bash/command-chunks/chunk-ERYJLO6G.js +293 -0
  85. package/dist/safe-bash/command-chunks/{chunk-4ONEXMD3.js → chunk-EUSPTFAX.js} +1 -1
  86. package/dist/safe-bash/command-chunks/chunk-FKKB5X5V.js +97 -0
  87. package/dist/safe-bash/command-chunks/chunk-FXELCPFX.js +195 -0
  88. package/dist/safe-bash/command-chunks/{chunk-JCNNOMBV.js → chunk-GI4CJED2.js} +3 -2
  89. package/dist/safe-bash/command-chunks/{chunk-CU5RLO62.js → chunk-GLOZX57Y.js} +92 -18
  90. package/dist/safe-bash/command-chunks/chunk-GMIHJYDG.js +331 -0
  91. package/dist/safe-bash/command-chunks/chunk-H622NS6Z.js +11 -0
  92. package/dist/safe-bash/command-chunks/{chunk-UI32HWGS.js → chunk-HMOZ6XVJ.js} +1 -1
  93. package/dist/safe-bash/command-chunks/{chunk-AVSPNLWV.js → chunk-I237SNW5.js} +1 -1
  94. package/dist/safe-bash/command-chunks/{chunk-ZS3QPNUL.js → chunk-IR2BY7EL.js} +21 -6
  95. package/dist/safe-bash/command-chunks/chunk-IYPAQ7PH.js +42 -0
  96. package/dist/safe-bash/command-chunks/chunk-JN7WIP6S.js +94 -0
  97. package/dist/safe-bash/command-chunks/chunk-JNZ3CVAE.js +147 -0
  98. package/dist/safe-bash/command-chunks/{chunk-HLBX5IRS.js → chunk-JQ74HC37.js} +24 -32
  99. package/dist/safe-bash/command-chunks/chunk-KFVV7ZJO.js +216 -0
  100. package/dist/safe-bash/command-chunks/{chunk-G4PNVO6Z.js → chunk-KP7AO66M.js} +1 -1
  101. package/dist/safe-bash/command-chunks/chunk-KWESKQHR.js +25 -0
  102. package/dist/safe-bash/command-chunks/chunk-KYSPGS33.js +41 -0
  103. package/dist/safe-bash/command-chunks/{chunk-C7IHMJEW.js → chunk-KZC5UWFF.js} +2 -2
  104. package/dist/safe-bash/command-chunks/chunk-L6DVEBW3.js +553 -0
  105. package/dist/safe-bash/command-chunks/chunk-LC2MFKT4.js +2489 -0
  106. package/dist/safe-bash/command-chunks/chunk-LE5LZNHE.js +204 -0
  107. package/dist/safe-bash/command-chunks/chunk-MDH5T4OS.js +41 -0
  108. package/dist/safe-bash/command-chunks/chunk-MM6HU6CX.js +20 -0
  109. package/dist/safe-bash/command-chunks/{chunk-MYJAZ3U2.js → chunk-MPL2466A.js} +2 -2
  110. package/dist/safe-bash/command-chunks/{chunk-VZHRZMS7.js → chunk-NAY27PXB.js} +1 -1
  111. package/dist/safe-bash/command-chunks/chunk-NCD7PEWH.js +298 -0
  112. package/dist/safe-bash/command-chunks/chunk-NFGI5IGF.js +266 -0
  113. package/dist/safe-bash/command-chunks/{chunk-KVFCSLKK.js → chunk-NXEQ3ESQ.js} +6 -0
  114. package/dist/safe-bash/command-chunks/{chunk-3VGGYEDH.js → chunk-ORYGZYKW.js} +4 -3
  115. package/dist/safe-bash/command-chunks/{chunk-OLQG7ZCN.js → chunk-PEF7K3UQ.js} +136 -75
  116. package/dist/safe-bash/command-chunks/chunk-PII4YEZW.js +123 -0
  117. package/dist/safe-bash/command-chunks/{chunk-43GSSUAY.js → chunk-PJJUYO3R.js} +5 -5
  118. package/dist/safe-bash/command-chunks/{chunk-ZT4KSS2V.js → chunk-PTT3I223.js} +1 -1
  119. package/dist/safe-bash/command-chunks/chunk-Q3DII3Q7.js +174 -0
  120. package/dist/safe-bash/command-chunks/chunk-Q3EWDEUQ.js +185 -0
  121. package/dist/safe-bash/command-chunks/{chunk-2FUAW6GO.js → chunk-QI7LGHJJ.js} +58 -9
  122. package/dist/safe-bash/command-chunks/{chunk-6BETHLXZ.js → chunk-QJAFJP2G.js} +1 -1
  123. package/dist/safe-bash/command-chunks/chunk-QNIMV57G.js +63 -0
  124. package/dist/safe-bash/command-chunks/{chunk-VVI4Z73I.js → chunk-QP4R6GLA.js} +5 -1
  125. package/dist/safe-bash/command-chunks/{chunk-LPORMIZS.js → chunk-QWIDNAAK.js} +8 -8
  126. package/dist/safe-bash/command-chunks/chunk-RVLO4DYT.js +35 -0
  127. package/dist/safe-bash/command-chunks/{chunk-X2YQLGKS.js → chunk-SAMH7SQE.js} +4 -4
  128. package/dist/safe-bash/command-chunks/chunk-SEM36PG5.js +11 -0
  129. package/dist/safe-bash/command-chunks/chunk-STC3LEWJ.js +634 -0
  130. package/dist/safe-bash/command-chunks/chunk-SVULUDOP.js +331 -0
  131. package/dist/safe-bash/command-chunks/chunk-TEVJJPTC.js +1392 -0
  132. package/dist/safe-bash/command-chunks/{chunk-ZXKW7SJ2.js → chunk-TYCGMRLM.js} +2 -2
  133. package/dist/safe-bash/command-chunks/chunk-UG7SMZFF.js +178 -0
  134. package/dist/safe-bash/command-chunks/{chunk-YZ5SVZFD.js → chunk-UMDIOL3O.js} +3 -3
  135. package/dist/safe-bash/command-chunks/chunk-UXSR5BZH.js +136 -0
  136. package/dist/safe-bash/command-chunks/chunk-V6BEDRMQ.js +112 -0
  137. package/dist/safe-bash/command-chunks/chunk-V6MSPQLA.js +362 -0
  138. package/dist/safe-bash/command-chunks/{chunk-J4PEQWSF.js → chunk-VGG2DL5Q.js} +0 -1
  139. package/dist/safe-bash/command-chunks/{chunk-SG424QWS.js → chunk-VL67NWNS.js} +1 -1
  140. package/dist/safe-bash/command-chunks/chunk-WB5SVIG7.js +1034 -0
  141. package/dist/safe-bash/command-chunks/{src-UJOWAS2S.js → chunk-WD3ERGRY.js} +77 -277
  142. package/dist/safe-bash/command-chunks/{chunk-YFSDDFGV.js → chunk-WH627NJL.js} +446 -53
  143. package/dist/safe-bash/command-chunks/chunk-WNE7FPVR.js +236 -0
  144. package/dist/safe-bash/command-chunks/{chunk-UKS2XJZI.js → chunk-WPYIOKE3.js} +4 -4
  145. package/dist/safe-bash/command-chunks/chunk-XETLEHZP.js +1227 -0
  146. package/dist/safe-bash/command-chunks/chunk-XIIBTGC5.js +580 -0
  147. package/dist/safe-bash/command-chunks/chunk-XJXU3VVH.js +737 -0
  148. package/dist/safe-bash/command-chunks/chunk-Y5INTD6S.js +220 -0
  149. package/dist/safe-bash/command-chunks/{chunk-5ZSM4UFN.js → chunk-YGC6OS5O.js} +3 -56
  150. package/dist/safe-bash/command-chunks/chunk-YJDV76GL.js +262 -0
  151. package/dist/safe-bash/command-chunks/chunk-YOF7R4OY.js +80 -0
  152. package/dist/safe-bash/command-chunks/chunk-Z7RVSD5K.js +594 -0
  153. package/dist/safe-bash/command-chunks/chunk-ZHUWOUWB.js +618 -0
  154. package/dist/safe-bash/command-chunks/{model-store-L35QTZMJ.js → model-store-WPKMRPV4.js} +2 -2
  155. package/dist/safe-bash/command-chunks/pptx-7G52EJ6L-4JACH5FB.js +625 -0
  156. package/dist/safe-bash/command-chunks/python-worker-source-TYOFJMCW.js +4 -0
  157. package/dist/safe-bash/command-chunks/src-ICMQISAA.js +501 -0
  158. package/dist/safe-bash/commands/archive/create.d.ts +1 -17
  159. package/dist/safe-bash/commands/archive/create.js +1 -252
  160. package/dist/safe-bash/commands/archive/extract.d.ts +1 -11
  161. package/dist/safe-bash/commands/archive/extract.js +1 -640
  162. package/dist/safe-bash/commands/archive/format.d.ts +1 -32
  163. package/dist/safe-bash/commands/archive/format.js +1 -225
  164. package/dist/safe-bash/commands/archive/index.d.ts +5 -10
  165. package/dist/safe-bash/commands/archive/index.js +6 -931
  166. package/dist/safe-bash/commands/archive/listing.d.ts +1 -2
  167. package/dist/safe-bash/commands/archive/listing.js +1 -21
  168. package/dist/safe-bash/commands/archive/modes.d.ts +1 -5
  169. package/dist/safe-bash/commands/archive/modes.js +1 -182
  170. package/dist/safe-bash/commands/archive/options.d.ts +1 -53
  171. package/dist/safe-bash/commands/archive/options.js +1 -462
  172. package/dist/safe-bash/commands/archive/stream.d.ts +1 -22
  173. package/dist/safe-bash/commands/archive/stream.js +1 -188
  174. package/dist/safe-bash/commands/archive/transform.d.ts +1 -16
  175. package/dist/safe-bash/commands/archive/transform.js +1 -85
  176. package/dist/safe-bash/commands/archive/unzip/arguments.d.ts +1 -53
  177. package/dist/safe-bash/commands/archive/unzip/arguments.js +1 -322
  178. package/dist/safe-bash/commands/archive/unzip/safety.d.ts +1 -32
  179. package/dist/safe-bash/commands/archive/unzip/safety.js +1 -295
  180. package/dist/safe-bash/commands/archive/unzip.d.ts +1 -3
  181. package/dist/safe-bash/commands/archive/unzip.js +1 -398
  182. package/dist/safe-bash/commands/archive/zip/aes.d.ts +1 -17
  183. package/dist/safe-bash/commands/archive/zip/aes.js +1 -156
  184. package/dist/safe-bash/commands/archive/zip/comments.d.ts +1 -17
  185. package/dist/safe-bash/commands/archive/zip/comments.js +1 -83
  186. package/dist/safe-bash/commands/archive/zip/crc.d.ts +1 -1
  187. package/dist/safe-bash/commands/archive/zip/crc.js +1 -1
  188. package/dist/safe-bash/commands/archive/zip/crypto.d.ts +1 -19
  189. package/dist/safe-bash/commands/archive/zip/crypto.js +1 -118
  190. package/dist/safe-bash/commands/archive/zip/dates.d.ts +1 -4
  191. package/dist/safe-bash/commands/archive/zip/dates.js +1 -66
  192. package/dist/safe-bash/commands/archive/zip/environment.d.ts +1 -2
  193. package/dist/safe-bash/commands/archive/zip/environment.js +1 -62
  194. package/dist/safe-bash/commands/archive/zip/grow.d.ts +1 -3
  195. package/dist/safe-bash/commands/archive/zip/grow.js +1 -2
  196. package/dist/safe-bash/commands/archive/zip/help.d.ts +1 -4
  197. package/dist/safe-bash/commands/archive/zip/help.js +1 -182
  198. package/dist/safe-bash/commands/archive/zip/line-endings.d.ts +1 -2
  199. package/dist/safe-bash/commands/archive/zip/line-endings.js +1 -194
  200. package/dist/safe-bash/commands/archive/zip/log.d.ts +1 -22
  201. package/dist/safe-bash/commands/archive/zip/log.js +1 -159
  202. package/dist/safe-bash/commands/archive/zip/lzma.d.ts +1 -9
  203. package/dist/safe-bash/commands/archive/zip/lzma.js +1 -40
  204. package/dist/safe-bash/commands/archive/zip/move.d.ts +1 -11
  205. package/dist/safe-bash/commands/archive/zip/move.js +1 -59
  206. package/dist/safe-bash/commands/archive/zip/names.d.ts +1 -2
  207. package/dist/safe-bash/commands/archive/zip/names.js +1 -33
  208. package/dist/safe-bash/commands/archive/zip/options.d.ts +1 -13
  209. package/dist/safe-bash/commands/archive/zip/options.js +1 -124
  210. package/dist/safe-bash/commands/archive/zip/repair.d.ts +1 -10
  211. package/dist/safe-bash/commands/archive/zip/repair.js +1 -392
  212. package/dist/safe-bash/commands/archive/zip/safety.d.ts +1 -54
  213. package/dist/safe-bash/commands/archive/zip/safety.js +1 -360
  214. package/dist/safe-bash/commands/archive/zip/sfx.d.ts +1 -4
  215. package/dist/safe-bash/commands/archive/zip/sfx.js +1 -52
  216. package/dist/safe-bash/commands/archive/zip/test-command.d.ts +1 -5
  217. package/dist/safe-bash/commands/archive/zip/test-command.js +1 -101
  218. package/dist/safe-bash/commands/archive/zip/volumes.d.ts +1 -21
  219. package/dist/safe-bash/commands/archive/zip/volumes.js +1 -281
  220. package/dist/safe-bash/commands/archive/zip/zip64.d.ts +1 -30
  221. package/dist/safe-bash/commands/archive/zip/zip64.js +1 -227
  222. package/dist/safe-bash/commands/archive/zip-format.d.ts +1 -68
  223. package/dist/safe-bash/commands/archive/zip-format.js +1 -1075
  224. package/dist/safe-bash/commands/archive/zip.d.ts +1 -3
  225. package/dist/safe-bash/commands/archive/zip.js +1 -1523
  226. package/dist/safe-bash/commands/awk/index.d.ts +2 -0
  227. package/dist/safe-bash/commands/awk/index.js +2 -0
  228. package/dist/safe-bash/commands/bytes/compression/index.js +2 -1
  229. package/dist/safe-bash/commands/curl/index.d.ts +2 -0
  230. package/dist/safe-bash/commands/curl/index.js +2 -0
  231. package/dist/safe-bash/commands/diff/index.d.ts +2 -0
  232. package/dist/safe-bash/commands/diff/index.js +2 -0
  233. package/dist/safe-bash/commands/diff-patch/diff-format.d.ts +1 -10
  234. package/dist/safe-bash/commands/diff-patch/diff-format.js +1 -237
  235. package/dist/safe-bash/commands/diff-patch/diff-options.d.ts +1 -38
  236. package/dist/safe-bash/commands/diff-patch/diff-options.js +1 -261
  237. package/dist/safe-bash/commands/diff-patch/diff-output.d.ts +1 -20
  238. package/dist/safe-bash/commands/diff-patch/diff-output.js +1 -290
  239. package/dist/safe-bash/commands/diff-patch/diff.d.ts +1 -2
  240. package/dist/safe-bash/commands/diff-patch/diff.js +1 -656
  241. package/dist/safe-bash/commands/diff-patch/index.d.ts +4 -5
  242. package/dist/safe-bash/commands/diff-patch/index.js +8 -333
  243. package/dist/safe-bash/commands/diff-patch/patch-envelope.d.ts +1 -2
  244. package/dist/safe-bash/commands/diff-patch/patch-envelope.js +1 -63
  245. package/dist/safe-bash/commands/diff-patch/patch-formats.d.ts +1 -7
  246. package/dist/safe-bash/commands/diff-patch/patch-formats.js +1 -264
  247. package/dist/safe-bash/commands/diff-patch/patch-gnu-paths.d.ts +1 -41
  248. package/dist/safe-bash/commands/diff-patch/patch-gnu-paths.js +1 -263
  249. package/dist/safe-bash/commands/diff-patch/patch-gnu-reject.d.ts +1 -3
  250. package/dist/safe-bash/commands/diff-patch/patch-gnu-reject.js +1 -100
  251. package/dist/safe-bash/commands/diff-patch/patch-path.d.ts +1 -3
  252. package/dist/safe-bash/commands/diff-patch/patch-path.js +1 -91
  253. package/dist/safe-bash/commands/diff-patch/patch-publication.d.ts +1 -13
  254. package/dist/safe-bash/commands/diff-patch/patch-publication.js +1 -107
  255. package/dist/safe-bash/commands/diff-patch/patch.d.ts +1 -2
  256. package/dist/safe-bash/commands/diff-patch/patch.js +1 -653
  257. package/dist/safe-bash/commands/diff-patch/shared.d.ts +1 -53
  258. package/dist/safe-bash/commands/diff-patch/shared.js +1 -267
  259. package/dist/safe-bash/commands/diff-patch/unified.d.ts +1 -52
  260. package/dist/safe-bash/commands/diff-patch/unified.js +1 -385
  261. package/dist/safe-bash/commands/directory-admission.d.ts +1 -3
  262. package/dist/safe-bash/commands/directory-admission.js +1 -26
  263. package/dist/safe-bash/commands/find/index.d.ts +2 -0
  264. package/dist/safe-bash/commands/find/index.js +2 -0
  265. package/dist/safe-bash/commands/find-format.d.ts +1 -20
  266. package/dist/safe-bash/commands/find-format.js +1 -161
  267. package/dist/safe-bash/commands/find.d.ts +2 -18
  268. package/dist/safe-bash/commands/find.js +2 -1236
  269. package/dist/safe-bash/commands/gzip/index.d.ts +2 -0
  270. package/dist/safe-bash/commands/gzip/index.js +2 -0
  271. package/dist/safe-bash/commands/line-endings/index.browser.js +1 -1
  272. package/dist/safe-bash/commands/line-endings/index.d.ts +1 -1
  273. package/dist/safe-bash/commands/line-endings/index.js +1 -262
  274. package/dist/safe-bash/commands/llm/index.browser.js +3 -1
  275. package/dist/safe-bash/commands/mdq/index.browser.js +2 -2
  276. package/dist/safe-bash/commands/metadata/chmod.d.ts +1 -4
  277. package/dist/safe-bash/commands/metadata/chmod.js +2 -63
  278. package/dist/safe-bash/commands/network/aggregate.d.ts +1 -4
  279. package/dist/safe-bash/commands/network/aggregate.js +1 -23
  280. package/dist/safe-bash/commands/network/args.d.ts +1 -68
  281. package/dist/safe-bash/commands/network/args.js +1 -321
  282. package/dist/safe-bash/commands/network/authorizer.d.ts +1 -6
  283. package/dist/safe-bash/commands/network/authorizer.js +1 -33
  284. package/dist/safe-bash/commands/network/body.d.ts +1 -9
  285. package/dist/safe-bash/commands/network/body.js +1 -393
  286. package/dist/safe-bash/commands/network/curl.d.ts +3 -13
  287. package/dist/safe-bash/commands/network/curl.js +6 -693
  288. package/dist/safe-bash/commands/network/deadline.d.ts +1 -2
  289. package/dist/safe-bash/commands/network/deadline.js +1 -14
  290. package/dist/safe-bash/commands/network/decode.d.ts +1 -2
  291. package/dist/safe-bash/commands/network/decode.js +1 -79
  292. package/dist/safe-bash/commands/network/fetch-transport.d.ts +1 -7
  293. package/dist/safe-bash/commands/network/fetch-transport.js +1 -94
  294. package/dist/safe-bash/commands/network/form-content-type.d.ts +1 -5
  295. package/dist/safe-bash/commands/network/form-content-type.js +1 -63
  296. package/dist/safe-bash/commands/network/form-headers.d.ts +1 -2
  297. package/dist/safe-bash/commands/network/form-headers.js +1 -35
  298. package/dist/safe-bash/commands/network/glob.d.ts +1 -7
  299. package/dist/safe-bash/commands/network/glob.js +1 -134
  300. package/dist/safe-bash/commands/network/index.browser.js +2 -10
  301. package/dist/safe-bash/commands/network/input.d.ts +1 -5
  302. package/dist/safe-bash/commands/network/input.js +1 -276
  303. package/dist/safe-bash/commands/network/output.d.ts +1 -6
  304. package/dist/safe-bash/commands/network/output.js +1 -131
  305. package/dist/safe-bash/commands/network/private-address.d.ts +1 -1
  306. package/dist/safe-bash/commands/network/private-address.js +1 -44
  307. package/dist/safe-bash/commands/network/shared.d.ts +1 -14
  308. package/dist/safe-bash/commands/network/shared.js +1 -71
  309. package/dist/safe-bash/commands/network/types.d.ts +1 -37
  310. package/dist/safe-bash/commands/network/types.js +1 -31
  311. package/dist/safe-bash/commands/network/url.d.ts +1 -2
  312. package/dist/safe-bash/commands/network/url.js +1 -30
  313. package/dist/safe-bash/commands/network/wget.d.ts +3 -3
  314. package/dist/safe-bash/commands/network/wget.js +10 -331
  315. package/dist/safe-bash/commands/node/index.browser.js +4 -5
  316. package/dist/safe-bash/commands/node/index.d.ts +3 -3
  317. package/dist/safe-bash/commands/node/index.js +5 -0
  318. package/dist/safe-bash/commands/node/safejs.d.ts +3 -3
  319. package/dist/safe-bash/commands/node/safejs.js +6 -1
  320. package/dist/safe-bash/commands/node/types.d.ts +1 -1
  321. package/dist/safe-bash/commands/node/unconfigured.d.ts +3 -0
  322. package/dist/safe-bash/commands/node/unconfigured.js +10 -0
  323. package/dist/safe-bash/commands/op/index.browser.js +2 -2
  324. package/dist/safe-bash/commands/patch/index.d.ts +2 -0
  325. package/dist/safe-bash/commands/patch/index.js +2 -0
  326. package/dist/safe-bash/commands/pdfinfo/index.js +2 -1
  327. package/dist/safe-bash/commands/predicates.js +3 -4
  328. package/dist/safe-bash/commands/python/index.browser.js +5 -5
  329. package/dist/safe-bash/commands/python/llm-capability.d.ts +1 -0
  330. package/dist/safe-bash/commands/python/llm-capability.js +27 -7
  331. package/dist/safe-bash/commands/python/llm-module.js +11 -0
  332. package/dist/safe-bash/commands/python/manifest.d.ts +1 -0
  333. package/dist/safe-bash/commands/python/manifest.js +9 -5
  334. package/dist/safe-bash/commands/python/provisioning.js +1 -1
  335. package/dist/safe-bash/commands/regex-execution/matching.js +1 -2
  336. package/dist/safe-bash/commands/regex-execution/public.browser.js +5 -5
  337. package/dist/safe-bash/commands/search/index.d.ts +1 -1
  338. package/dist/safe-bash/commands/search/index.js +1 -347
  339. package/dist/safe-bash/commands/search/portable.d.ts +2 -2
  340. package/dist/safe-bash/commands/search/portable.js +3 -2
  341. package/dist/safe-bash/commands/sed/index.d.ts +2 -0
  342. package/dist/safe-bash/commands/sed/index.js +2 -0
  343. package/dist/safe-bash/commands/tar/index.d.ts +2 -0
  344. package/dist/safe-bash/commands/tar/index.js +2 -0
  345. package/dist/safe-bash/commands/text-programs/awk-inspection.d.ts +1 -19
  346. package/dist/safe-bash/commands/text-programs/awk-inspection.js +1 -50
  347. package/dist/safe-bash/commands/text-programs/awk-pipes.d.ts +2 -0
  348. package/dist/safe-bash/commands/text-programs/awk-pipes.js +2 -0
  349. package/dist/safe-bash/commands/text-programs/awk-pretty.d.ts +1 -3
  350. package/dist/safe-bash/commands/text-programs/awk-pretty.js +1 -197
  351. package/dist/safe-bash/commands/text-programs/awk-quote.d.ts +1 -2
  352. package/dist/safe-bash/commands/text-programs/awk-quote.js +1 -15
  353. package/dist/safe-bash/commands/text-programs/awk-reader.d.ts +1 -42
  354. package/dist/safe-bash/commands/text-programs/awk-reader.js +1 -449
  355. package/dist/safe-bash/commands/text-programs/awk-retention.d.ts +1 -13
  356. package/dist/safe-bash/commands/text-programs/awk-retention.js +1 -51
  357. package/dist/safe-bash/commands/text-programs/awk-runtime.d.ts +1 -150
  358. package/dist/safe-bash/commands/text-programs/awk-runtime.js +1 -2627
  359. package/dist/safe-bash/commands/text-programs/awk-syntax.d.ts +1 -142
  360. package/dist/safe-bash/commands/text-programs/awk-syntax.js +1 -509
  361. package/dist/safe-bash/commands/text-programs/awk-values.d.ts +1 -32
  362. package/dist/safe-bash/commands/text-programs/awk-values.js +1 -386
  363. package/dist/safe-bash/commands/text-programs/awk.d.ts +1 -3
  364. package/dist/safe-bash/commands/text-programs/awk.js +1 -361
  365. package/dist/safe-bash/commands/text-programs/inplace.d.ts +1 -16
  366. package/dist/safe-bash/commands/text-programs/inplace.js +1 -155
  367. package/dist/safe-bash/commands/text-programs/sed.d.ts +1 -3
  368. package/dist/safe-bash/commands/text-programs/sed.js +1 -1647
  369. package/dist/safe-bash/commands/unzip/index.d.ts +2 -0
  370. package/dist/safe-bash/commands/unzip/index.js +2 -0
  371. package/dist/safe-bash/commands/wget/index.d.ts +2 -0
  372. package/dist/safe-bash/commands/wget/index.js +2 -0
  373. package/dist/safe-bash/commands/yq/index.browser.js +7 -2
  374. package/dist/safe-bash/commands/yq/index.d.ts +1 -6
  375. package/dist/safe-bash/commands/yq/index.js +1 -36
  376. package/dist/safe-bash/commands/zip/index.d.ts +2 -0
  377. package/dist/safe-bash/commands/zip/index.js +2 -0
  378. package/dist/safe-bash/core.browser.js +1 -1
  379. package/dist/safe-bash/core.d.ts +8 -1
  380. package/dist/safe-bash/core.js +7 -1
  381. package/dist/safe-bash/fs/s3/index.d.ts +2 -2
  382. package/dist/safe-bash/fs/s3/index.js +1 -1
  383. package/dist/safe-bash/full-core.browser.js +254 -223
  384. package/dist/safe-bash/jobs.browser.js +2 -2
  385. package/dist/safe-bash/lazy-mmdc.d.ts +6 -0
  386. package/dist/safe-bash/lazy-mmdc.js +23 -0
  387. package/dist/safe-bash/opt-in/commands/yq/mike.js +6 -13
  388. package/dist/safe-bash/opt-in/commands/yq/native-work.d.ts +1 -0
  389. package/dist/safe-bash/opt-in/commands/yq/native-work.js +17 -0
  390. package/dist/safe-bash/optional-host.browser.js +8 -4
  391. package/dist/safe-bash/optional-host.d.ts +1 -1
  392. package/dist/safe-bash/optional-host.js +1 -1
  393. package/dist/safe-bash/playwright/ability-execution.js +3 -2
  394. package/dist/safe-bash/playwright/adapter.js +1 -1
  395. package/dist/safe-bash/playwright/controller.js +9 -8
  396. package/dist/safe-bash/playwright/modal-capabilities.js +2 -1
  397. package/dist/safe-bash/playwright/native-json-snapshot.js +4 -3
  398. package/dist/safe-bash/playwright/native-snapshot.js +5 -4
  399. package/dist/safe-bash/playwright/open-options.js +3 -3
  400. package/dist/safe-bash/playwright/resource-limit.d.ts +2 -0
  401. package/dist/safe-bash/playwright/resource-limit.js +4 -0
  402. package/dist/safe-bash/playwright/session-configuration.js +8 -3
  403. package/dist/safe-bash/playwright/snapshot.js +8 -7
  404. package/dist/safe-bash/playwright/standard-capabilities.js +5 -4
  405. package/dist/safe-bash/plugins/index.browser.js +14 -16
  406. package/dist/safe-bash/registry-entry.browser.js +14 -16
  407. package/dist/safe-bash/shell/arrays/bindings.d.ts +3 -5
  408. package/dist/safe-bash/shell/arrays/bindings.js +6 -2
  409. package/dist/safe-bash/shell/input.js +16 -14
  410. package/dist/safe-bash/shell/runtime.d.ts +3 -0
  411. package/dist/safe-bash/shell/runtime.js +316 -64
  412. package/dist/safe-bash/shell/types.d.ts +2 -0
  413. package/dist/safe-bash/shell/value-state.js +17 -2
  414. package/dist/safe-bash/shell/worker-limits.js +1 -0
  415. package/dist/safe-bash/shell-entry.browser.js +13 -15
  416. package/dist/safe-bash/trap.browser.d.ts +3 -0
  417. package/dist/safe-bash/trap.browser.js +14 -0
  418. package/dist/safe-bash/worker/host.js +1 -1
  419. package/dist/safe-bash-command-apply-patch/apply.js +2 -2
  420. package/dist/safe-bash-command-apply-patch/index.js +3 -3
  421. package/dist/safe-bash-command-awk/LICENSE +21 -0
  422. package/dist/safe-bash-command-awk/awk-inspection.d.ts +19 -0
  423. package/dist/safe-bash-command-awk/awk-inspection.js +9 -0
  424. package/dist/safe-bash-command-awk/awk-pipes.d.ts +19 -0
  425. package/dist/safe-bash-command-awk/awk-pipes.js +8 -0
  426. package/dist/safe-bash-command-awk/awk-pretty.d.ts +3 -0
  427. package/dist/safe-bash-command-awk/awk-pretty.js +8 -0
  428. package/dist/safe-bash-command-awk/awk-quote.d.ts +2 -0
  429. package/dist/safe-bash-command-awk/awk-quote.js +7 -0
  430. package/dist/safe-bash-command-awk/awk-reader.d.ts +42 -0
  431. package/dist/safe-bash-command-awk/awk-reader.js +9 -0
  432. package/dist/safe-bash-command-awk/awk-retention.d.ts +13 -0
  433. package/dist/safe-bash-command-awk/awk-retention.js +7 -0
  434. package/dist/safe-bash-command-awk/awk-runtime.d.ts +151 -0
  435. package/dist/safe-bash-command-awk/awk-runtime.js +11 -0
  436. package/dist/safe-bash-command-awk/awk-syntax.d.ts +144 -0
  437. package/dist/safe-bash-command-awk/awk-syntax.js +14 -0
  438. package/dist/safe-bash-command-awk/awk-values.d.ts +32 -0
  439. package/dist/safe-bash-command-awk/awk-values.js +35 -0
  440. package/dist/safe-bash-command-awk/awk.d.ts +3 -0
  441. package/dist/safe-bash-command-awk/awk.js +16 -0
  442. package/dist/safe-bash-command-awk/index.d.ts +7 -0
  443. package/dist/safe-bash-command-awk/index.js +36 -0
  444. package/dist/safe-bash-command-bc/index.d.ts +4 -0
  445. package/dist/safe-bash-command-bc/index.js +15 -176
  446. package/dist/safe-bash-command-column/column.js +3 -3
  447. package/dist/safe-bash-command-column/index.js +3 -3
  448. package/dist/safe-bash-command-column/layout.js +2 -2
  449. package/dist/safe-bash-command-csplit/command.js +2 -2
  450. package/dist/safe-bash-command-csplit/index.js +2 -2
  451. package/dist/safe-bash-command-csvkit/contracts.d.ts +1 -0
  452. package/dist/safe-bash-command-csvkit/csvpy-interpreter.d.ts +2 -1
  453. package/dist/safe-bash-command-csvkit/default-csvpy.d.ts +11 -0
  454. package/dist/safe-bash-command-csvkit/errors.js +22 -0
  455. package/dist/safe-bash-command-csvkit/index.d.ts +1 -0
  456. package/dist/safe-bash-command-csvkit/index.js +172 -4
  457. package/dist/safe-bash-command-csvkit/python-worker-browser.d.ts +3 -0
  458. package/dist/safe-bash-command-csvkit/python-worker-browser.js +16 -0
  459. package/dist/safe-bash-command-csvkit/python-worker-contract.d.ts +20 -0
  460. package/dist/safe-bash-command-csvkit/python-worker-node.d.ts +3 -0
  461. package/dist/safe-bash-command-csvkit/python-worker-node.js +9 -0
  462. package/dist/safe-bash-command-csvkit/runtime.d.ts +1 -0
  463. package/dist/safe-bash-command-curl/LICENSE +21 -0
  464. package/dist/safe-bash-command-curl/curl.d.ts +13 -0
  465. package/dist/safe-bash-command-curl/curl.js +9 -0
  466. package/dist/safe-bash-command-curl/index.d.ts +6 -0
  467. package/dist/safe-bash-command-curl/index.js +26 -0
  468. package/dist/safe-bash-command-diff/LICENSE +21 -0
  469. package/dist/safe-bash-command-diff/diff-format.d.ts +10 -0
  470. package/dist/safe-bash-command-diff/diff-format.js +10 -0
  471. package/dist/safe-bash-command-diff/diff-options.d.ts +38 -0
  472. package/dist/safe-bash-command-diff/diff-options.js +7 -0
  473. package/dist/safe-bash-command-diff/diff-output.d.ts +20 -0
  474. package/dist/safe-bash-command-diff/diff-output.js +19 -0
  475. package/dist/safe-bash-command-diff/diff.d.ts +2 -0
  476. package/dist/safe-bash-command-diff/diff.js +10 -0
  477. package/dist/safe-bash-command-diff/index.d.ts +8 -0
  478. package/dist/safe-bash-command-diff/index.js +34 -0
  479. package/dist/safe-bash-command-diff/sync.d.ts +2 -0
  480. package/dist/safe-bash-command-diff/sync.js +9 -0
  481. package/dist/safe-bash-command-diff3/index.js +5 -5
  482. package/dist/safe-bash-command-docx/index.d.ts +4 -4
  483. package/dist/safe-bash-command-docx/index.js +12 -5
  484. package/dist/safe-bash-command-dos2unix/index.d.ts +1 -0
  485. package/dist/safe-bash-command-dos2unix/index.js +225 -1
  486. package/dist/safe-bash-command-dos2unix/sync.d.ts +1 -0
  487. package/dist/safe-bash-command-exiftool/index.js +2 -2
  488. package/dist/safe-bash-command-factor/command.js +2 -2
  489. package/dist/safe-bash-command-factor/index.js +2 -2
  490. package/dist/safe-bash-command-ffmpeg/index.js +86 -94
  491. package/dist/safe-bash-command-file/index.js +3 -3
  492. package/dist/safe-bash-command-find/LICENSE +21 -0
  493. package/dist/safe-bash-command-find/find-format.d.ts +20 -0
  494. package/dist/safe-bash-command-find/find-format.js +9 -0
  495. package/dist/safe-bash-command-find/find.d.ts +18 -0
  496. package/dist/safe-bash-command-find/find.js +10 -0
  497. package/dist/safe-bash-command-find/index.d.ts +13 -0
  498. package/dist/safe-bash-command-find/index.js +45 -0
  499. package/dist/safe-bash-command-fmt/index.js +7 -4
  500. package/dist/safe-bash-command-git/git_rust.wasm +0 -0
  501. package/dist/safe-bash-command-git/index.js +5 -7
  502. package/dist/safe-bash-command-git/wasm.generated.js +1 -1
  503. package/dist/safe-bash-command-gzip/LICENSE +21 -0
  504. package/dist/safe-bash-command-gzip/index.d.ts +11 -0
  505. package/dist/safe-bash-command-gzip/index.js +94 -0
  506. package/dist/safe-bash-command-html-to-markdown/index.js +5 -5
  507. package/dist/safe-bash-command-htmlq/index.js +12 -8
  508. package/dist/safe-bash-command-imagemagick/index.js +22 -30
  509. package/dist/safe-bash-command-jq/index.js +1 -1
  510. package/dist/safe-bash-command-jq/jq.js +1 -1
  511. package/dist/safe-bash-command-llm/command.js +1 -1
  512. package/dist/safe-bash-command-llm/index.d.ts +1 -0
  513. package/dist/safe-bash-command-llm/index.js +16 -14
  514. package/dist/safe-bash-command-llm/openai.js +3 -3
  515. package/dist/safe-bash-command-llm/providers/index.js +3 -3
  516. package/dist/safe-bash-command-llm/providers/openai.js +3 -3
  517. package/dist/safe-bash-command-llm/stored-schema.d.ts +10 -0
  518. package/dist/safe-bash-command-mmdc/index.js +13 -604
  519. package/dist/safe-bash-command-mmdc/settings.d.ts +2 -0
  520. package/dist/safe-bash-command-mmdc/settings.js +7 -0
  521. package/dist/safe-bash-command-pandoc/command.js +4 -3
  522. package/dist/safe-bash-command-pandoc/defaults.d.ts +1 -0
  523. package/dist/safe-bash-command-pandoc/index.js +4 -3
  524. package/dist/safe-bash-command-pandoc/lua-filters.js +1 -1
  525. package/dist/safe-bash-command-pandoc/types.d.ts +3 -1
  526. package/dist/safe-bash-command-patch/LICENSE +21 -0
  527. package/dist/safe-bash-command-patch/index.d.ts +8 -0
  528. package/dist/safe-bash-command-patch/index.js +38 -0
  529. package/dist/safe-bash-command-patch/patch-envelope.d.ts +2 -0
  530. package/dist/safe-bash-command-patch/patch-envelope.js +7 -0
  531. package/dist/safe-bash-command-patch/patch-formats.d.ts +7 -0
  532. package/dist/safe-bash-command-patch/patch-formats.js +9 -0
  533. package/dist/safe-bash-command-patch/patch-gnu-paths.d.ts +41 -0
  534. package/dist/safe-bash-command-patch/patch-gnu-paths.js +26 -0
  535. package/dist/safe-bash-command-patch/patch-gnu-reject.d.ts +3 -0
  536. package/dist/safe-bash-command-patch/patch-gnu-reject.js +7 -0
  537. package/dist/safe-bash-command-patch/patch-path.d.ts +3 -0
  538. package/dist/safe-bash-command-patch/patch-path.js +11 -0
  539. package/dist/safe-bash-command-patch/patch-publication.d.ts +13 -0
  540. package/dist/safe-bash-command-patch/patch-publication.js +7 -0
  541. package/dist/safe-bash-command-patch/patch.d.ts +2 -0
  542. package/dist/safe-bash-command-patch/patch.js +14 -0
  543. package/dist/safe-bash-command-patch/sync.d.ts +2 -0
  544. package/dist/safe-bash-command-patch/sync.js +7 -0
  545. package/dist/safe-bash-command-patch/unified.d.ts +52 -0
  546. package/dist/safe-bash-command-patch/unified.js +16 -0
  547. package/dist/safe-bash-command-pdfimages/index.js +37 -16
  548. package/dist/safe-bash-command-pdfinfo/index.d.ts +0 -23
  549. package/dist/safe-bash-command-pdfinfo/index.js +20 -772
  550. package/dist/safe-bash-command-pdftk/index.js +37 -9
  551. package/dist/safe-bash-command-pdftoppm/index.js +50 -20
  552. package/dist/safe-bash-command-pdftotext/index.js +10 -2
  553. package/dist/safe-bash-command-pptx/index.d.ts +4 -4
  554. package/dist/safe-bash-command-pptx/index.js +11 -5
  555. package/dist/safe-bash-command-pr/command.js +2 -2
  556. package/dist/safe-bash-command-pr/index.js +4 -4
  557. package/dist/safe-bash-command-qpdf/index.js +26 -13
  558. package/dist/safe-bash-command-rg/index.d.ts +1 -0
  559. package/dist/safe-bash-command-rg/index.js +222 -1
  560. package/dist/safe-bash-command-rg/rg-command.js +1 -1
  561. package/dist/safe-bash-command-rg/sync.d.ts +1 -0
  562. package/dist/safe-bash-command-sed/LICENSE +21 -0
  563. package/dist/safe-bash-command-sed/index.d.ts +7 -0
  564. package/dist/safe-bash-command-sed/index.js +28 -0
  565. package/dist/safe-bash-command-sed/inplace.d.ts +16 -0
  566. package/dist/safe-bash-command-sed/inplace.js +9 -0
  567. package/dist/safe-bash-command-sed/sed.d.ts +3 -0
  568. package/dist/safe-bash-command-sed/sed.js +8 -0
  569. package/dist/safe-bash-command-sips/index.js +111 -35
  570. package/dist/safe-bash-command-soffice/index.js +4 -4
  571. package/dist/safe-bash-command-sqlite3/engine.d.ts +1 -2
  572. package/dist/safe-bash-command-sqlite3/index.js +152 -452
  573. package/dist/safe-bash-command-ssconvert/commands.js +1 -1
  574. package/dist/safe-bash-command-ssconvert/formats/ods.js +2 -2
  575. package/dist/safe-bash-command-ssconvert/formats/xlsx.js +3 -3
  576. package/dist/safe-bash-command-ssconvert/index.js +5 -5
  577. package/dist/safe-bash-command-tar/LICENSE +21 -0
  578. package/dist/safe-bash-command-tar/create.d.ts +17 -0
  579. package/dist/safe-bash-command-tar/create.js +14 -0
  580. package/dist/safe-bash-command-tar/extract.d.ts +11 -0
  581. package/dist/safe-bash-command-tar/extract.js +14 -0
  582. package/dist/safe-bash-command-tar/format.d.ts +32 -0
  583. package/dist/safe-bash-command-tar/format.js +19 -0
  584. package/dist/safe-bash-command-tar/index.d.ts +8 -0
  585. package/dist/safe-bash-command-tar/index.js +550 -0
  586. package/dist/safe-bash-command-tar/listing.d.ts +2 -0
  587. package/dist/safe-bash-command-tar/listing.js +7 -0
  588. package/dist/safe-bash-command-tar/modes.d.ts +5 -0
  589. package/dist/safe-bash-command-tar/modes.js +16 -0
  590. package/dist/safe-bash-command-tar/options.d.ts +53 -0
  591. package/dist/safe-bash-command-tar/options.js +10 -0
  592. package/dist/safe-bash-command-tar/stream.d.ts +22 -0
  593. package/dist/safe-bash-command-tar/stream.js +15 -0
  594. package/dist/safe-bash-command-tar/transform.d.ts +16 -0
  595. package/dist/safe-bash-command-tar/transform.js +9 -0
  596. package/dist/safe-bash-command-unzip/LICENSE +21 -0
  597. package/dist/safe-bash-command-unzip/index.d.ts +7 -0
  598. package/dist/safe-bash-command-unzip/index.js +39 -0
  599. package/dist/safe-bash-command-unzip/sync.d.ts +3 -0
  600. package/dist/safe-bash-command-unzip/sync.js +9 -0
  601. package/dist/safe-bash-command-unzip/unzip/safety.d.ts +32 -0
  602. package/dist/safe-bash-command-unzip/unzip/safety.js +7 -0
  603. package/dist/safe-bash-command-unzip/unzip.d.ts +3 -0
  604. package/dist/safe-bash-command-unzip/unzip.js +8 -0
  605. package/dist/safe-bash-command-wget/LICENSE +21 -0
  606. package/dist/safe-bash-command-wget/index.d.ts +6 -0
  607. package/dist/safe-bash-command-wget/index.js +26 -0
  608. package/dist/safe-bash-command-wget/wget.d.ts +3 -0
  609. package/dist/safe-bash-command-wget/wget.js +7 -0
  610. package/dist/safe-bash-command-xan/argv.d.ts +4 -1
  611. package/dist/safe-bash-command-xan/argv.js +1 -1
  612. package/dist/safe-bash-command-xan/commands.js +4 -3
  613. package/dist/safe-bash-command-xan/index.js +15 -14
  614. package/dist/safe-bash-command-xan/io.js +2 -2
  615. package/dist/safe-bash-command-xmllint/index.js +189 -49
  616. package/dist/safe-bash-command-xz/index.js +3 -2
  617. package/dist/safe-bash-command-xz/options.d.ts +9 -1
  618. package/dist/safe-bash-command-xz/options.js +3 -1
  619. package/dist/safe-bash-command-yq/index.d.ts +4 -11
  620. package/dist/safe-bash-command-yq/index.js +3367 -670
  621. package/dist/safe-bash-command-yq/mike.js +6 -13
  622. package/dist/safe-bash-command-yq/native-work.d.ts +1 -0
  623. package/dist/safe-bash-command-yq/native-work.js +17 -0
  624. package/dist/safe-bash-command-yq/query.d.ts +11 -0
  625. package/dist/safe-bash-command-yq/query.js +735 -0
  626. package/dist/safe-bash-command-zip/LICENSE +21 -0
  627. package/dist/safe-bash-command-zip/index.d.ts +7 -0
  628. package/dist/safe-bash-command-zip/index.js +38 -0
  629. package/dist/safe-bash-command-zip/sync.d.ts +3 -0
  630. package/dist/safe-bash-command-zip/sync.js +9 -0
  631. package/dist/safe-bash-command-zip/zip.d.ts +3 -0
  632. package/dist/safe-bash-command-zip/zip.js +7 -0
  633. package/dist/safe-bash-compression-engine/files.js +4 -4
  634. package/dist/safe-bash-compression-engine/index.js +2 -2
  635. package/dist/safe-bash-compression-engine/operand.js +6 -6
  636. package/dist/safe-bash-compression-engine/stream.js +2 -2
  637. package/dist/safe-bash-compression-engine/zstd-decode.js +1 -1
  638. package/dist/safe-bash-contracts/command.js +1 -1
  639. package/dist/safe-bash-contracts/diagnostics.js +4 -4
  640. package/dist/safe-bash-contracts/escaping.js +11 -11
  641. package/dist/safe-bash-contracts/filesystem-descriptor.js +1 -1
  642. package/dist/safe-bash-contracts/filesystem-output.js +8 -8
  643. package/dist/safe-bash-contracts/index.js +34 -34
  644. package/dist/safe-bash-contracts/io.js +2 -2
  645. package/dist/safe-bash-contracts/output.js +3 -3
  646. package/dist/safe-bash-diff-engine/LICENSE +21 -0
  647. package/dist/safe-bash-diff-engine/index.d.ts +1 -0
  648. package/dist/safe-bash-diff-engine/index.js +24 -0
  649. package/dist/safe-bash-diff-engine/shared.d.ts +53 -0
  650. package/dist/safe-bash-diff-engine/shared.js +19 -0
  651. package/dist/safe-bash-io-engine/commands/directory-admission.d.ts +3 -0
  652. package/dist/safe-bash-io-engine/commands/directory-admission.js +34 -0
  653. package/dist/safe-bash-io-engine/commands/mode-change.d.ts +4 -0
  654. package/dist/safe-bash-io-engine/commands/mode-change.js +60 -0
  655. package/dist/safe-bash-io-engine/commands/text-programs/shared.js +20 -31
  656. package/dist/safe-bash-io-engine/shell/pattern.js +7 -12
  657. package/dist/safe-bash-markdown-engine/commonmark-blocks.js +4 -4
  658. package/dist/safe-bash-markdown-engine/commonmark-inlines.js +4 -4
  659. package/dist/safe-bash-markdown-engine/commonmark-syntax.js +2 -2
  660. package/dist/safe-bash-markdown-engine/gfm-syntax.js +3 -3
  661. package/dist/safe-bash-markdown-engine/index.js +7 -7
  662. package/dist/safe-bash-mcp/index.browser.d.ts +6 -0
  663. package/dist/safe-bash-mcp/index.browser.js +1 -0
  664. package/dist/safe-bash-mcp/index.d.ts +12 -0
  665. package/dist/safe-bash-mcp/index.js +1558 -36
  666. package/dist/safe-bash-network-engine/LICENSE +21 -0
  667. package/dist/safe-bash-network-engine/aggregate.d.ts +4 -0
  668. package/dist/safe-bash-network-engine/aggregate.js +37 -0
  669. package/dist/safe-bash-network-engine/args.d.ts +68 -0
  670. package/dist/safe-bash-network-engine/args.js +19 -0
  671. package/dist/safe-bash-network-engine/authorizer.d.ts +6 -0
  672. package/dist/safe-bash-network-engine/authorizer.js +8 -0
  673. package/dist/safe-bash-network-engine/body.d.ts +9 -0
  674. package/dist/safe-bash-network-engine/body.js +374 -0
  675. package/dist/safe-bash-network-engine/deadline.d.ts +2 -0
  676. package/dist/safe-bash-network-engine/deadline.js +7 -0
  677. package/dist/safe-bash-network-engine/decode.d.ts +2 -0
  678. package/dist/safe-bash-network-engine/decode.js +81 -0
  679. package/dist/safe-bash-network-engine/fetch-transport.d.ts +7 -0
  680. package/dist/safe-bash-network-engine/fetch-transport.js +9 -0
  681. package/dist/safe-bash-network-engine/form-content-type.d.ts +5 -0
  682. package/dist/safe-bash-network-engine/form-content-type.js +8 -0
  683. package/dist/safe-bash-network-engine/form-headers.d.ts +2 -0
  684. package/dist/safe-bash-network-engine/form-headers.js +10 -0
  685. package/dist/safe-bash-network-engine/glob.d.ts +7 -0
  686. package/dist/safe-bash-network-engine/glob.js +124 -0
  687. package/dist/safe-bash-network-engine/index.d.ts +3 -0
  688. package/dist/safe-bash-network-engine/index.js +26 -0
  689. package/dist/safe-bash-network-engine/input.d.ts +5 -0
  690. package/dist/safe-bash-network-engine/input.js +255 -0
  691. package/dist/safe-bash-network-engine/output.d.ts +6 -0
  692. package/dist/safe-bash-network-engine/output.js +132 -0
  693. package/dist/safe-bash-network-engine/platform-portable.d.ts +5 -0
  694. package/dist/safe-bash-network-engine/platform-portable.js +19 -0
  695. package/dist/safe-bash-network-engine/private-address.d.ts +1 -0
  696. package/dist/safe-bash-network-engine/private-address.js +7 -0
  697. package/dist/safe-bash-network-engine/shared.d.ts +14 -0
  698. package/dist/safe-bash-network-engine/shared.js +23 -0
  699. package/dist/safe-bash-network-engine/types.d.ts +37 -0
  700. package/dist/safe-bash-network-engine/types.js +11 -0
  701. package/dist/safe-bash-network-engine/url.d.ts +2 -0
  702. package/dist/safe-bash-network-engine/url.js +8 -0
  703. package/dist/safe-bash-query-engine/capture.d.ts +1 -0
  704. package/dist/safe-bash-query-engine/capture.js +9 -7
  705. package/dist/safe-bash-query-engine/dates.d.ts +5 -1
  706. package/dist/safe-bash-query-engine/dates.js +10 -2
  707. package/dist/safe-bash-query-engine/delpaths.js +5 -5
  708. package/dist/safe-bash-query-engine/formats.js +3 -3
  709. package/dist/safe-bash-query-engine/index.js +15 -15
  710. package/dist/safe-bash-query-engine/indices.js +5 -5
  711. package/dist/safe-bash-query-engine/input.d.ts +1 -2
  712. package/dist/safe-bash-query-engine/input.js +2 -4
  713. package/dist/safe-bash-query-engine/interpreter.d.ts +5 -0
  714. package/dist/safe-bash-query-engine/interpreter.js +13 -13
  715. package/dist/safe-bash-query-engine/limits.js +1 -1
  716. package/dist/safe-bash-query-engine/parser.d.ts +8 -1
  717. package/dist/safe-bash-query-engine/parser.js +2 -2
  718. package/dist/safe-bash-query-engine/query-core.js +15 -15
  719. package/dist/safe-bash-query-engine/recurse.js +2 -2
  720. package/dist/safe-bash-query-engine/regex.d.ts +4 -2
  721. package/dist/safe-bash-query-engine/regex.js +10 -5
  722. package/dist/safe-bash-query-engine/split.js +2 -2
  723. package/dist/safe-bash-query-engine/splits.d.ts +1 -1
  724. package/dist/safe-bash-query-engine/splits.js +7 -6
  725. package/dist/safe-bash-query-engine/values.js +4 -4
  726. package/dist/safe-bash-regex-engine/ere/matcher.js +4 -4
  727. package/dist/safe-bash-regex-engine/index.js +2 -2
  728. package/dist/safe-bash-regex-engine/text/regex.d.ts +1 -0
  729. package/dist/safe-bash-regex-engine/text/regex.js +2 -2
  730. package/dist/safe-bash-search-engine/ergonomic-regex.d.ts +12 -2
  731. package/dist/safe-bash-search-engine/ergonomic-regex.js +2 -2
  732. package/dist/safe-bash-search-engine/glob.js +2 -2
  733. package/dist/safe-bash-search-engine/grep.js +2 -2
  734. package/dist/safe-bash-search-engine/matcher.d.ts +6 -2
  735. package/dist/safe-bash-search-engine/matcher.js +30 -8
  736. package/dist/safe-bash-search-engine/options.js +1 -1
  737. package/dist/safe-bash-search-engine/output.d.ts +3 -2
  738. package/dist/safe-bash-search-engine/output.js +111 -30
  739. package/dist/safe-bash-search-engine/shared.d.ts +2 -0
  740. package/dist/safe-bash-search-engine/shared.js +2 -2
  741. package/dist/safe-bash-search-engine/walk.js +11 -10
  742. package/dist/safe-bash-xml-engine/document.d.ts +1 -1
  743. package/dist/safe-bash-xml-engine/document.js +3 -3
  744. package/dist/safe-bash-xml-engine/evaluate.d.ts +1 -0
  745. package/dist/safe-bash-xml-engine/evaluate.js +4 -1
  746. package/dist/safe-bash-xml-engine/index.js +8 -6
  747. package/dist/safe-bash-xml-engine/io.js +1 -1
  748. package/dist/safe-bash-xml-engine/limits.d.ts +2 -0
  749. package/dist/safe-bash-xml-engine/limits.js +1 -1
  750. package/dist/safe-bash-xml-engine/predicate.d.ts +57 -0
  751. package/dist/safe-bash-xml-engine/query.d.ts +3 -15
  752. package/dist/safe-bash-xml-engine/query.js +3 -2
  753. package/dist/safe-bash-zip-engine/LICENSE +21 -0
  754. package/dist/safe-bash-zip-engine/index.d.ts +1 -0
  755. package/dist/safe-bash-zip-engine/index.js +32 -0
  756. package/dist/safe-bash-zip-engine/unzip/arguments.d.ts +53 -0
  757. package/dist/safe-bash-zip-engine/unzip/arguments.js +270 -0
  758. package/dist/safe-bash-zip-engine/zip/aes.d.ts +17 -0
  759. package/dist/safe-bash-zip-engine/zip/aes.js +15 -0
  760. package/dist/safe-bash-zip-engine/zip/comments.d.ts +17 -0
  761. package/dist/safe-bash-zip-engine/zip/comments.js +77 -0
  762. package/dist/safe-bash-zip-engine/zip/crc.d.ts +1 -0
  763. package/dist/safe-bash-zip-engine/zip/crc.js +7 -0
  764. package/dist/safe-bash-zip-engine/zip/crypto.d.ts +19 -0
  765. package/dist/safe-bash-zip-engine/zip/crypto.js +16 -0
  766. package/dist/safe-bash-zip-engine/zip/dates.d.ts +4 -0
  767. package/dist/safe-bash-zip-engine/zip/dates.js +68 -0
  768. package/dist/safe-bash-zip-engine/zip/environment.d.ts +2 -0
  769. package/dist/safe-bash-zip-engine/zip/environment.js +60 -0
  770. package/dist/safe-bash-zip-engine/zip/grow.d.ts +3 -0
  771. package/dist/safe-bash-zip-engine/zip/grow.js +7 -0
  772. package/dist/safe-bash-zip-engine/zip/help.d.ts +4 -0
  773. package/dist/safe-bash-zip-engine/zip/help.js +194 -0
  774. package/dist/safe-bash-zip-engine/zip/line-endings.d.ts +2 -0
  775. package/dist/safe-bash-zip-engine/zip/line-endings.js +165 -0
  776. package/dist/safe-bash-zip-engine/zip/log.d.ts +22 -0
  777. package/dist/safe-bash-zip-engine/zip/log.js +153 -0
  778. package/dist/safe-bash-zip-engine/zip/lzma.d.ts +9 -0
  779. package/dist/safe-bash-zip-engine/zip/lzma.js +7 -0
  780. package/dist/safe-bash-zip-engine/zip/move.d.ts +11 -0
  781. package/dist/safe-bash-zip-engine/zip/move.js +57 -0
  782. package/dist/safe-bash-zip-engine/zip/names.d.ts +2 -0
  783. package/dist/safe-bash-zip-engine/zip/names.js +37 -0
  784. package/dist/safe-bash-zip-engine/zip/options.d.ts +13 -0
  785. package/dist/safe-bash-zip-engine/zip/options.js +23 -0
  786. package/dist/safe-bash-zip-engine/zip/repair.d.ts +10 -0
  787. package/dist/safe-bash-zip-engine/zip/repair.js +348 -0
  788. package/dist/safe-bash-zip-engine/zip/safety.d.ts +54 -0
  789. package/dist/safe-bash-zip-engine/zip/safety.js +19 -0
  790. package/dist/safe-bash-zip-engine/zip/sfx.d.ts +4 -0
  791. package/dist/safe-bash-zip-engine/zip/sfx.js +58 -0
  792. package/dist/safe-bash-zip-engine/zip/test-command.d.ts +5 -0
  793. package/dist/safe-bash-zip-engine/zip/test-command.js +98 -0
  794. package/dist/safe-bash-zip-engine/zip/volumes.d.ts +21 -0
  795. package/dist/safe-bash-zip-engine/zip/volumes.js +255 -0
  796. package/dist/safe-bash-zip-engine/zip/zip64.d.ts +30 -0
  797. package/dist/safe-bash-zip-engine/zip/zip64.js +25 -0
  798. package/dist/safe-bash-zip-engine/zip-format.d.ts +68 -0
  799. package/dist/safe-bash-zip-engine/zip-format.js +27 -0
  800. package/dist/safe-playwright-cloudflare/browser-codegen.generated.d.ts +7 -7
  801. package/dist/safe-playwright-cloudflare/browser-codegen.generated.js +866 -8069
  802. package/dist/safe-playwright-cloudflare/browser-run-code-budget.d.ts +0 -1
  803. package/dist/safe-playwright-cloudflare/browser-run-code-budget.js +0 -2
  804. package/dist/safe-playwright-cloudflare/browser-trace-archive.d.ts +5 -1
  805. package/dist/safe-playwright-cloudflare/browser-trace-archive.js +2 -1
  806. package/dist/safe-playwright-cloudflare/browser-trace-budget.js +2 -2
  807. package/dist/safe-playwright-cloudflare/shell-browser-resource.d.ts +2 -0
  808. package/dist/safe-playwright-cloudflare/shell-browser-resource.js +3 -11
  809. package/dist/safe-playwright-cloudflare/shell-playwright.d.ts +2 -0
  810. package/dist/safe-playwright-cloudflare/shell-playwright.js +1 -1
  811. package/dist/spreadsheet-engine/io/publication.d.ts +1 -0
  812. package/package.json +163 -14
  813. package/dist/safe-bash/chunks/chunk-AZAJJVFX.js +0 -23017
  814. package/dist/safe-bash/chunks/chunk-O4ZUCRGN.js +0 -13
  815. package/dist/safe-bash/chunks/chunk-S264DZO2.js +0 -243
  816. package/dist/safe-bash/chunks/chunk-WVG5SHHQ.js +0 -12
  817. package/dist/safe-bash/chunks/chunk-ZW6K2J7P.js +0 -2652
  818. package/dist/safe-bash/command-chunks/chunk-5MPOQ6V3.js +0 -181
  819. package/dist/safe-bash/command-chunks/chunk-BIXLZ3OG.js +0 -14342
  820. package/dist/safe-bash/command-chunks/chunk-DUYJE2HY.js +0 -14
  821. package/dist/safe-bash/command-chunks/chunk-NETECMOF.js +0 -40
  822. package/dist/safe-bash/command-chunks/chunk-XS3PGJU2.js +0 -343
  823. package/dist/safe-bash/command-chunks/chunk-XTZALMLR.js +0 -488
  824. package/dist/safe-bash/commands/archive/zip/aes-primitives-unavailable.d.ts +0 -2
  825. package/dist/safe-bash/commands/archive/zip/aes-primitives-unavailable.js +0 -3
  826. package/dist/safe-bash/commands/archive/zip/aes-primitives.d.ts +0 -2
  827. package/dist/safe-bash/commands/archive/zip/aes-primitives.js +0 -3
  828. package/dist/safe-bash/commands/xml/document.d.ts +0 -2
  829. package/dist/safe-bash/commands/xml/document.js +0 -2
  830. package/dist/safe-bash/commands/xml/evaluate.d.ts +0 -2
  831. package/dist/safe-bash/commands/xml/evaluate.js +0 -2
  832. package/dist/safe-bash/commands/xml/json.d.ts +0 -2
  833. package/dist/safe-bash/commands/xml/json.js +0 -2
  834. package/dist/safe-bash/commands/xml/limits.d.ts +0 -2
  835. package/dist/safe-bash/commands/xml/limits.js +0 -2
  836. package/dist/safe-bash/commands/xml/query.d.ts +0 -2
  837. package/dist/safe-bash/commands/xml/query.js +0 -2
  838. package/dist/safe-bash/chunks/{chunk-NHOXKQNE.js → chunk-QVSRRNZT.js} +3 -3
  839. package/dist/safe-bash/command-chunks/{chunk-FIUFIDAO.js → chunk-2JRBIDAD.js} +3 -3
  840. package/dist/safe-bash/command-chunks/{chunk-B5BKA5WH.js → chunk-B5TAOCKD.js} +3 -3
  841. package/dist/safe-bash/command-chunks/{chunk-TYVCKQDH.js → chunk-J5SN3PZ3.js} +3 -3
  842. package/dist/safe-bash/command-chunks/{chunk-2ENZ6JGA.js → chunk-KEV7C3KH.js} +3 -3
  843. package/dist/safe-bash/command-chunks/{chunk-S62HELHU.js → chunk-PL6O4K6W.js} +3 -3
  844. package/dist/safe-bash/command-chunks/{chunk-2WRTLCGK.js → chunk-QZF3SINC.js} +4 -4
  845. package/dist/safe-bash/command-chunks/{chunk-X7TM3AKW.js → chunk-U6G67N23.js} +3 -3
  846. package/dist/safe-bash/command-chunks/{chunk-DDLQ5YDB.js → chunk-YHFXOX6U.js} +9 -9
  847. package/dist/safe-bash/command-chunks/{chunk-DQMOM72Z.js → chunk-ZRRBXU3M.js} +4 -4
@@ -34253,7 +34253,7 @@ var CCITT_BLACK_CODES = /* @__PURE__ */ new Map([
34253
34253
  ]);
34254
34254
  function decodeCcittFax(bytes, parms) {
34255
34255
  const columns = Math.max(1, parms?.Columns ?? 1728);
34256
- const maxRows = parms?.Rows && parms.Rows > 0 ? parms.Rows : 2048;
34256
+ const maxRows = parms?.Rows && parms.Rows > 0 ? parms.Rows : Infinity;
34257
34257
  const k = parms?.K ?? 0;
34258
34258
  const blackIs1 = parms?.BlackIs1 ?? false;
34259
34259
  const byteAlign = parms?.EncodedByteAlign ?? false;
@@ -57036,6 +57036,21 @@ var Duplex = class extends EventEmitter {
57036
57036
  }
57037
57037
  };
57038
57038
 
57039
+ // ../safe-fs/dist/platform/transport-budget.js
57040
+ var hasRegisteredS3FileSystem = false;
57041
+ function enableS3TransportBudget() {
57042
+ hasRegisteredS3FileSystem = true;
57043
+ }
57044
+ var budgetKey = /* @__PURE__ */ Symbol("scoped-transport-budget");
57045
+ function chargeTransportOptions(options) {
57046
+ for (const frame of options?.[budgetKey] ?? []) {
57047
+ if (frame.credit > 0)
57048
+ frame.credit--;
57049
+ else
57050
+ frame.admit(options);
57051
+ }
57052
+ }
57053
+
57039
57054
  // ../safe-fs/dist/platform/browser.js
57040
57055
  var platform = Object.freeze({
57041
57056
  nativeFileSystem: Object.freeze({ open: false, permissions: false, timestamps: false, conditionalChmod: false, trustedOwnedStaging: false, atomicRename: false }),
@@ -57076,6 +57091,10 @@ var comparisonContext = Object.freeze({
57076
57091
  }
57077
57092
  }
57078
57093
  });
57094
+ function chargeScopedTransportCall(options) {
57095
+ options?.signal?.throwIfAborted();
57096
+ chargeTransportOptions(options);
57097
+ }
57079
57098
 
57080
57099
  // ../safe-fs/dist/contracts/errors.js
57081
57100
  var descriptions = {
@@ -57187,6 +57206,48 @@ var EMPTY_BYTE_SOURCE = Object.freeze({
57187
57206
  });
57188
57207
  var noop = () => {
57189
57208
  };
57209
+ async function collectBytes(source, options) {
57210
+ if (options.maxBytes !== void 0 && options.maxBytes !== Infinity && (!Number.isSafeInteger(options.maxBytes) || options.maxBytes < 0)) {
57211
+ throw new RangeError("maxBytes must be a nonnegative safe integer");
57212
+ }
57213
+ if (options.maxMemoryBytes !== void 0 && options.maxMemoryBytes !== Infinity && (!Number.isSafeInteger(options.maxMemoryBytes) || options.maxMemoryBytes < 0)) {
57214
+ throw new RangeError("maxMemoryBytes must be a nonnegative safe integer or Infinity");
57215
+ }
57216
+ const memoryLimit = options.maxMemoryBytes ?? Infinity;
57217
+ let reserved = 0;
57218
+ let inputBytes = 0;
57219
+ let buffer = new Uint8Array(0);
57220
+ let size = 0;
57221
+ function reserve(bytes) {
57222
+ if (bytes > memoryLimit - reserved) {
57223
+ throw new FsError("EFBIG", { syscall: "collectBytes", message: "collection exceeds memory budget" });
57224
+ }
57225
+ reserved += bytes;
57226
+ }
57227
+ options.signal?.throwIfAborted();
57228
+ for await (const chunk of readBytes(source, options.signal)) {
57229
+ reserved -= inputBytes;
57230
+ inputBytes = 0;
57231
+ if (chunk.byteLength > (options.maxBytes ?? Infinity) - size) {
57232
+ throw new FsError("EFBIG", { syscall: "collectBytes", message: "output exceeds maxBytes" });
57233
+ }
57234
+ reserve(chunk.buffer.byteLength);
57235
+ inputBytes = chunk.buffer.byteLength;
57236
+ const nextSize = size + chunk.byteLength;
57237
+ if (nextSize > buffer.byteLength) {
57238
+ const capacity = Math.min(options.maxBytes ?? Infinity, Math.max(nextSize, buffer.byteLength * 2));
57239
+ reserve(capacity);
57240
+ const replacement = new Uint8Array(capacity);
57241
+ replacement.set(buffer.subarray(0, size));
57242
+ reserved -= buffer.byteLength;
57243
+ buffer = replacement;
57244
+ }
57245
+ buffer.set(chunk, size);
57246
+ size = nextSize;
57247
+ }
57248
+ options.signal?.throwIfAborted();
57249
+ return buffer.subarray(0, size);
57250
+ }
57190
57251
  async function abortable(operation, signal) {
57191
57252
  signal?.throwIfAborted();
57192
57253
  if (!signal)
@@ -57931,10 +57992,76 @@ async function compareEntries(filesystem, path, peer, peerPath, options = {}) {
57931
57992
  }
57932
57993
 
57933
57994
  // ../safe-fs/dist/fs/s3/registry.js
57995
+ var observedStats = /* @__PURE__ */ new WeakMap();
57934
57996
  var entries = /* @__PURE__ */ new WeakMap();
57997
+ var comparisons = /* @__PURE__ */ new WeakMap();
57998
+ var configuredComparisons = /* @__PURE__ */ new WeakMap();
57999
+ function recordS3Observation(filesystem, path, stat, entry) {
58000
+ observedStats.set(stat, { filesystem, path, entry });
58001
+ }
58002
+ function registerS3EntryOwner(filesystem, normalize2, intact, baseComparison, comparison) {
58003
+ enableS3TransportBudget();
58004
+ comparisons.set(filesystem, baseComparison);
58005
+ if (comparison)
58006
+ configuredComparisons.set(filesystem, comparison);
58007
+ entries.set(filesystem, (view) => {
58008
+ if (!intact())
58009
+ return void 0;
58010
+ const observation = observedStats.get(view.stat);
58011
+ return observation?.filesystem === filesystem && observation.path === normalize2(view.path) ? observation.entry : void 0;
58012
+ });
58013
+ }
57935
58014
  function getOwnedS3Entry(view) {
57936
58015
  return entries.get(view.filesystem)?.(view);
57937
58016
  }
58017
+ async function compareOwnedS3Entries(own, peer, options) {
58018
+ options.signal?.throwIfAborted();
58019
+ let explicit = false;
58020
+ let answer = "unknown";
58021
+ const visited = /* @__PURE__ */ new Set();
58022
+ for (const [left2, right2] of [[own, peer], [peer, own]]) {
58023
+ const baseComparison = comparisons.get(left2.filesystem);
58024
+ if (!baseComparison || visited.has(left2.filesystem))
58025
+ continue;
58026
+ visited.add(left2.filesystem);
58027
+ const current = left2.filesystem.compareEntry;
58028
+ const comparison = current === baseComparison ? configuredComparisons.get(left2.filesystem) : current;
58029
+ if (current === baseComparison && comparison === void 0)
58030
+ continue;
58031
+ explicit = true;
58032
+ if (comparison === void 0)
58033
+ continue;
58034
+ options.signal?.throwIfAborted();
58035
+ if (typeof comparison !== "function") {
58036
+ throw new FsError("EIO", { path: own.path, dest: peer.path, message: "invalid explicit S3 comparison method" });
58037
+ }
58038
+ assertCallbackAuthorityAllowed();
58039
+ const result = await comparison.call(left2.filesystem, left2.path, right2.filesystem, right2.path, options);
58040
+ options.signal?.throwIfAborted();
58041
+ if (result !== "same" && result !== "distinct" && result !== "unknown") {
58042
+ throw new FsError("EIO", { path: own.path, dest: peer.path, message: "invalid explicit S3 comparison" });
58043
+ }
58044
+ if (result === "unknown")
58045
+ continue;
58046
+ if (answer !== "unknown" && answer !== result) {
58047
+ throw new FsError("EIO", { path: own.path, dest: peer.path, message: "conflicting explicit S3 comparisons" });
58048
+ }
58049
+ answer = result;
58050
+ }
58051
+ const left = getOwnedS3Entry(own);
58052
+ options.signal?.throwIfAborted();
58053
+ const right = getOwnedS3Entry(peer);
58054
+ options.signal?.throwIfAborted();
58055
+ const same = left && right && left.storage === right.storage && left.key === right.key;
58056
+ if (same && answer === "distinct") {
58057
+ throw new FsError("EIO", { path: own.path, dest: peer.path, message: "explicit S3 comparison contradicts a known alias" });
58058
+ }
58059
+ if (same)
58060
+ return "same";
58061
+ if (explicit)
58062
+ return answer;
58063
+ return left && right ? "distinct" : "unknown";
58064
+ }
57938
58065
 
57939
58066
  // ../safe-fs/dist/fs/webdav/resource-id.js
57940
58067
  var responses = /* @__PURE__ */ new WeakMap();
@@ -57952,10 +58079,10 @@ function ownedResponseIdentifier(response, path) {
57952
58079
  return responses.get(response)?.get(path)?.identifier;
57953
58080
  }
57954
58081
  var queries = /* @__PURE__ */ new WeakMap();
57955
- var comparisons = /* @__PURE__ */ new WeakMap();
58082
+ var comparisons2 = /* @__PURE__ */ new WeakMap();
57956
58083
  var callbacks = /* @__PURE__ */ new WeakMap();
57957
58084
  function registerResourceQuery(filesystem, query, baseComparison, callback) {
57958
- comparisons.set(filesystem, baseComparison);
58085
+ comparisons2.set(filesystem, baseComparison);
57959
58086
  if (callback)
57960
58087
  callbacks.set(filesystem, callback);
57961
58088
  queries.set(filesystem, async (path, options) => {
@@ -57983,7 +58110,7 @@ var compareWebDavResources = async (own, peer, options) => {
57983
58110
  let answer = "unknown";
57984
58111
  const visited = /* @__PURE__ */ new Set();
57985
58112
  for (const [left, right] of [[own, peer], [peer, own]]) {
57986
- const baseComparison = comparisons.get(left.filesystem);
58113
+ const baseComparison = comparisons2.get(left.filesystem);
57987
58114
  if (!baseComparison)
57988
58115
  continue;
57989
58116
  const method = left.filesystem.compareEntry;
@@ -58225,7 +58352,7 @@ function components(path, signal) {
58225
58352
  return result;
58226
58353
  }
58227
58354
  function resolveMissingTarget(root, path, signal) {
58228
- const fail2 = (code, failedPath = path) => {
58355
+ const fail3 = (code, failedPath = path) => {
58229
58356
  throw new FsError(code, { syscall: "realpath", path: failedPath });
58230
58357
  };
58231
58358
  const origin = components(path, signal);
@@ -58255,9 +58382,9 @@ function resolveMissingTarget(root, path, signal) {
58255
58382
  }
58256
58383
  const current = position.node;
58257
58384
  if (current.type !== "directory")
58258
- return fail2("ENOTDIR");
58385
+ return fail3("ENOTDIR");
58259
58386
  if ((current.mode >> 6 & 1) !== 1)
58260
- return fail2("EACCES");
58387
+ return fail3("EACCES");
58261
58388
  const name = component.name;
58262
58389
  if (name === ".") {
58263
58390
  first = false;
@@ -58269,7 +58396,7 @@ function resolveMissingTarget(root, path, signal) {
58269
58396
  continue;
58270
58397
  }
58271
58398
  if (exceedsComponentByteLimit(name))
58272
- return fail2("ENAMETOOLONG");
58399
+ return fail3("ENAMETOOLONG");
58273
58400
  const node = current.entries.get(name);
58274
58401
  if (!node) {
58275
58402
  found = false;
@@ -58280,7 +58407,7 @@ function resolveMissingTarget(root, path, signal) {
58280
58407
  first = false;
58281
58408
  if (node.type === "symlink") {
58282
58409
  if (++links > 40)
58283
- return fail2("ELOOP");
58410
+ return fail3("ELOOP");
58284
58411
  const names2 = components(node.target, signal);
58285
58412
  if (node.target.endsWith("/"))
58286
58413
  names2.push({ name: ".", start: node.target.length });
@@ -58302,7 +58429,7 @@ function resolveMissingTarget(root, path, signal) {
58302
58429
  for (let count = origin.length; count > missing; count--) {
58303
58430
  signal?.throwIfAborted();
58304
58431
  if (count === missing + 1 && path[end - 1] !== "/")
58305
- return fail2("ENOENT", path.slice(0, end));
58432
+ return fail3("ENOENT", path.slice(0, end));
58306
58433
  const last = origin[count - 1];
58307
58434
  if (!last)
58308
58435
  break;
@@ -62221,7 +62348,7 @@ function qualifiedNameSync(name, cache) {
62221
62348
  }
62222
62349
  return parts;
62223
62350
  }
62224
- function* entities(text) {
62351
+ function* entities(text, recover) {
62225
62352
  let result = "";
62226
62353
  let offset = 0;
62227
62354
  while (offset < text.length) {
@@ -62230,8 +62357,12 @@ function* entities(text) {
62230
62357
  return result + text.slice(offset);
62231
62358
  result += text.slice(offset, start);
62232
62359
  const end = yield* find(text, ";", start + 1);
62233
- if (end < 0)
62234
- invalid("unterminated entity");
62360
+ if (end < 0) {
62361
+ if (!recover)
62362
+ invalid("unterminated entity");
62363
+ recover("unterminated entity");
62364
+ return result + text.slice(start + 1);
62365
+ }
62235
62366
  const entity = text.slice(start + 1, end);
62236
62367
  const predefined = { amp: "&", lt: "<", gt: ">", quot: '"', apos: "'" };
62237
62368
  if (Object.hasOwn(predefined, entity))
@@ -62239,8 +62370,13 @@ function* entities(text) {
62239
62370
  else {
62240
62371
  const hexadecimal = entity.startsWith("#x");
62241
62372
  const digits = entity.slice(hexadecimal ? 2 : 1);
62242
- if (!entity.startsWith("#") || !digits.length)
62243
- invalid("undeclared entity");
62373
+ if (!entity.startsWith("#") || !digits.length) {
62374
+ if (!recover)
62375
+ invalid("undeclared entity");
62376
+ recover("undeclared entity");
62377
+ offset = end + 1;
62378
+ continue;
62379
+ }
62244
62380
  let point = 0;
62245
62381
  for (let index = 0; index < digits.length; index++) {
62246
62382
  const code = digits.charCodeAt(index);
@@ -62439,7 +62575,7 @@ function* parseXmlSteps(input, limits = {}) {
62439
62575
  }
62440
62576
  if (text.indexOf("]]>") >= 0)
62441
62577
  invalid("CDATA terminator in text");
62442
- const resolved = stack.length ? text.indexOf("&") < 0 ? (pendingWork += text.length, text) : yield* entities(text) : text;
62578
+ const resolved = stack.length ? text.indexOf("&") < 0 ? (pendingWork += text.length, text) : yield* entities(text, limits.recover) : text;
62443
62579
  while (pendingWork >= 512) {
62444
62580
  yield 512;
62445
62581
  pendingWork -= 512;
@@ -62547,8 +62683,11 @@ function* parseXmlSteps(input, limits = {}) {
62547
62683
  yield 512;
62548
62684
  pendingWork -= 512;
62549
62685
  }
62550
- if (source[offset++] !== ">" || stack.pop()?.name !== name)
62551
- invalid("mismatched closing tag");
62686
+ if (source[offset++] !== ">" || stack.pop()?.name !== name) {
62687
+ if (!limits.recover)
62688
+ invalid("mismatched closing tag");
62689
+ limits.recover("mismatched closing tag");
62690
+ }
62552
62691
  } else {
62553
62692
  offset++;
62554
62693
  const repeated = previousEmpty && source.startsWith(previousEmpty.suffix, offset) ? previousEmpty : void 0;
@@ -62572,7 +62711,7 @@ function* parseXmlSteps(input, limits = {}) {
62572
62711
  pendingWork -= 512;
62573
62712
  }
62574
62713
  const ch3 = source.charCodeAt(offset);
62575
- if (ch3 === 47 || ch3 === 62)
62714
+ if (ch3 === 47 || ch3 === 62 || limits.recover && offset === source.length)
62576
62715
  break;
62577
62716
  if (ws === 0)
62578
62717
  invalid("attributes require whitespace");
@@ -62613,7 +62752,7 @@ function* parseXmlSteps(input, limits = {}) {
62613
62752
  if (raw.indexOf("<") >= 0)
62614
62753
  invalid("less-than in attribute");
62615
62754
  const normalized = /[\t\n\r]/.test(raw) ? raw.replace(/[\t\n\r]/g, " ") : raw;
62616
- const value = normalized.indexOf("&") < 0 ? (pendingWork += normalized.length, normalized) : yield* entities(normalized);
62755
+ const value = normalized.indexOf("&") < 0 ? (pendingWork += normalized.length, normalized) : yield* entities(normalized, limits.recover);
62617
62756
  while (pendingWork >= 512) {
62618
62757
  yield 512;
62619
62758
  pendingWork -= 512;
@@ -62703,8 +62842,11 @@ function* parseXmlSteps(input, limits = {}) {
62703
62842
  const empty = source[offset] === "/";
62704
62843
  if (empty)
62705
62844
  offset++;
62706
- if (source[offset++] !== ">")
62707
- invalid("unterminated start tag");
62845
+ if (source[offset++] !== ">") {
62846
+ if (!limits.recover)
62847
+ invalid("unterminated start tag");
62848
+ limits.recover("unterminated start tag");
62849
+ }
62708
62850
  if (empty && !attributes && name.length <= 512 && source.slice(offset - name.length - 3, offset) === `<${name}/>`)
62709
62851
  previousEmpty = { suffix: name + "/>", name, prefix, localName };
62710
62852
  if (!empty)
@@ -62715,8 +62857,13 @@ function* parseXmlSteps(input, limits = {}) {
62715
62857
  yield pendingWork;
62716
62858
  pendingWork = 0;
62717
62859
  }
62718
- if (stack.length || !root)
62860
+ if (!root)
62719
62861
  invalid("incomplete document");
62862
+ if (stack.length) {
62863
+ if (!limits.recover)
62864
+ invalid("incomplete document");
62865
+ limits.recover("incomplete document");
62866
+ }
62720
62867
  return root;
62721
62868
  }
62722
62869
 
@@ -64201,6 +64348,1220 @@ var WebDavFileSystem = class {
64201
64348
  };
64202
64349
  var originalWebDavComparison = WebDavFileSystem.prototype.compareEntry;
64203
64350
 
64351
+ // ../safe-fs/dist/fs/s3/key-order.js
64352
+ function compareKeys(left, right) {
64353
+ const encoder = new TextEncoder();
64354
+ const a = encoder.encode(left), b = encoder.encode(right);
64355
+ for (let index = 0; index < Math.min(a.length, b.length); index++) {
64356
+ const difference = a[index] - b[index];
64357
+ if (difference)
64358
+ return difference;
64359
+ }
64360
+ return a.length - b.length;
64361
+ }
64362
+
64363
+ // ../safe-fs/dist/fs/s3/authority.js
64364
+ var queryKey = /* @__PURE__ */ Symbol("s3-head-query");
64365
+ var queries2 = /* @__PURE__ */ new WeakMap();
64366
+ var providerHeads = /* @__PURE__ */ new WeakMap();
64367
+ var acceptedHeads = /* @__PURE__ */ new WeakMap();
64368
+ async function queryS3Head(input, action) {
64369
+ const token = Object.freeze({});
64370
+ const query = Object.freeze({ ...input });
64371
+ const forwarded = { ...query, [queryKey]: token };
64372
+ queries2.set(token, query);
64373
+ try {
64374
+ const output = await action(forwarded);
64375
+ acceptedHeads.delete(output);
64376
+ const proof = providerHeads.get(output);
64377
+ if (proof?.query === query)
64378
+ acceptedHeads.set(output, proof.entry);
64379
+ return output;
64380
+ } finally {
64381
+ queries2.delete(token);
64382
+ }
64383
+ }
64384
+ function recordS3Stat(filesystem, path, stat, metadata) {
64385
+ if (!metadata)
64386
+ return;
64387
+ const entry = acceptedHeads.get(metadata);
64388
+ acceptedHeads.delete(metadata);
64389
+ if (entry)
64390
+ recordS3Observation(filesystem, path, stat, entry);
64391
+ }
64392
+
64393
+ // ../safe-fs/dist/fs/s3/transport.js
64394
+ function encodeCopySource(bucket, key) {
64395
+ return [bucket, ...key.split("/")].map((part) => encodeURIComponent(part).replace(/[!'()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`)).join("/");
64396
+ }
64397
+
64398
+ // ../safe-fs/dist/fs/s3/filesystem.js
64399
+ var S3RenameError = class extends FsError {
64400
+ phase;
64401
+ copiedKeys;
64402
+ deletedKeys;
64403
+ constructor(source, destination, phase, copied, deleted, cause) {
64404
+ super(cause.code, {
64405
+ syscall: "rename",
64406
+ path: source,
64407
+ dest: destination,
64408
+ cause,
64409
+ message: `non-atomic S3 rename failed during ${phase}; destination copies or partial source deletions may remain`
64410
+ });
64411
+ this.name = "S3RenameError";
64412
+ this.phase = phase;
64413
+ this.copiedKeys = Object.freeze([...copied]);
64414
+ this.deletedKeys = Object.freeze([...deleted]);
64415
+ }
64416
+ };
64417
+ function serviceCode(error) {
64418
+ if (typeof error !== "object" || error === null)
64419
+ return void 0;
64420
+ const record2 = error;
64421
+ const value = record2.Code ?? record2.code ?? record2.name;
64422
+ return typeof value === "string" ? value : void 0;
64423
+ }
64424
+ function translate(error, syscall, path, precondition = "EAGAIN") {
64425
+ if (error instanceof FsError)
64426
+ return error;
64427
+ const status = error?.$metadata?.httpStatusCode;
64428
+ const name = serviceCode(error);
64429
+ let code = "EIO";
64430
+ if (name === "AbortError" || status === 499)
64431
+ code = "ECANCELED";
64432
+ else if (name === "NoSuchKey" || name === "NotFound" || name === "NoSuchBucket" || status === 404)
64433
+ code = "ENOENT";
64434
+ else if (["AccessDenied", "InvalidAccessKeyId", "SignatureDoesNotMatch", "ExpiredToken"].includes(name ?? "") || status === 401 || status === 403)
64435
+ code = "EACCES";
64436
+ else if (name === "PreconditionFailed" || status === 412)
64437
+ code = precondition;
64438
+ else if (name === "ConditionalRequestConflict" || name === "SlowDown" || status === 409 || status === 429 || status === 503)
64439
+ code = "EAGAIN";
64440
+ else if (name === "NotImplemented" || status === 501)
64441
+ code = "ENOTSUP";
64442
+ else if (name === "EntityTooLarge")
64443
+ code = "EFBIG";
64444
+ else if (name === "InvalidArgument" || name === "InvalidRequest" || status === 400)
64445
+ code = "EINVAL";
64446
+ else if (name === "TimeoutError" || name === "RequestTimeout" || status === 408)
64447
+ code = "ETIMEDOUT";
64448
+ return new FsError(code, { syscall, path, cause: error });
64449
+ }
64450
+ function fail2(code, syscall, path, message) {
64451
+ throw new FsError(code, { syscall, path, ...message === void 0 ? {} : { message } });
64452
+ }
64453
+ function validateLimit(value, name, minimum, maximum = Number.MAX_SAFE_INTEGER) {
64454
+ if ((value !== Infinity || maximum !== Infinity) && (!Number.isSafeInteger(value) || value < minimum || value > maximum)) {
64455
+ throw new FsError("EINVAL", { message: `${name} must be an integer from ${minimum} to ${maximum}` });
64456
+ }
64457
+ return value;
64458
+ }
64459
+ function utf8ByteLength3(value) {
64460
+ let bytes = 0;
64461
+ for (let i = 0; i < value.length; i++) {
64462
+ const code = value.charCodeAt(i);
64463
+ if (code < 128)
64464
+ bytes += 1;
64465
+ else if (code < 2048)
64466
+ bytes += 2;
64467
+ else if (code >= 55296 && code <= 56319 && i + 1 < value.length && value.charCodeAt(i + 1) >= 56320 && value.charCodeAt(i + 1) <= 57343) {
64468
+ bytes += 4;
64469
+ i++;
64470
+ } else
64471
+ bytes += 3;
64472
+ }
64473
+ return bytes;
64474
+ }
64475
+ function isWellFormed(value) {
64476
+ return !/[\uD800-\uDFFF]/u.test(value);
64477
+ }
64478
+ var S3FileSystem = class {
64479
+ async open(path, options) {
64480
+ options.signal?.throwIfAborted();
64481
+ throw new FsError("ENOTSUP", { syscall: "open", path });
64482
+ }
64483
+ capabilities;
64484
+ readStream;
64485
+ writeStream;
64486
+ transport;
64487
+ bucket;
64488
+ prefix;
64489
+ allowRename;
64490
+ pageSize;
64491
+ maxReadBytes;
64492
+ maxStreamBytes;
64493
+ maxListEntries;
64494
+ maxRequests;
64495
+ requests = 0;
64496
+ removalLimits;
64497
+ removalBudgets = /* @__PURE__ */ new WeakMap();
64498
+ constructor(options) {
64499
+ if (!options?.transport || ["headObject", "getObject", "putObject", "deleteObject", "copyObject", "listObjectsV2"].some((method) => typeof options.transport[method] !== "function")) {
64500
+ throw new FsError("EINVAL", { message: "an explicit six-operation S3 transport is required; no default credentials or network client are created" });
64501
+ }
64502
+ if (options.compareEntry !== void 0 && typeof options.compareEntry !== "function") {
64503
+ throw new FsError("EINVAL", { message: "compareEntry must be a filesystem comparison callback" });
64504
+ }
64505
+ if (typeof options.bucket !== "string" || !options.bucket || /[/:\0]/.test(options.bucket)) {
64506
+ throw new FsError("EINVAL", { message: "bucket must be a nonempty bucket name, not a URL or ARN" });
64507
+ }
64508
+ const prefix = options.prefix ?? "";
64509
+ if (typeof prefix !== "string" || prefix.includes("\0") || !isWellFormed(prefix) || prefix !== "" && prefix.replace(/\/$/, "").split("/").some((part) => !part || part === "." || part === "..")) {
64510
+ throw new FsError("EINVAL", { message: "prefix must be a canonical relative object-key prefix" });
64511
+ }
64512
+ this.prefix = prefix === "" || prefix.endsWith("/") ? prefix : `${prefix}/`;
64513
+ if (utf8ByteLength3(this.prefix) > 1024)
64514
+ throw new FsError("ENAMETOOLONG", { message: "S3 prefix exceeds 1024 UTF-8 bytes" });
64515
+ this.transport = options.transport;
64516
+ this.bucket = options.bucket;
64517
+ this.allowRename = options.allowNonAtomicRename ?? true;
64518
+ this.pageSize = validateLimit(options.pageSize ?? 1e3, "pageSize", 1, 1e3);
64519
+ this.maxReadBytes = options.maxReadBytes === void 0 ? Infinity : validateLimit(options.maxReadBytes, "maxReadBytes", 0, Infinity);
64520
+ this.maxStreamBytes = options.maxStreamBytes === void 0 ? Infinity : validateLimit(options.maxStreamBytes, "maxStreamBytes", 0, Infinity);
64521
+ this.maxListEntries = options.maxListEntries === void 0 ? Infinity : validateLimit(options.maxListEntries, "maxListEntries", 1, Infinity);
64522
+ this.maxRequests = options.maxRequests === void 0 ? Infinity : validateLimit(options.maxRequests, "maxRequests", 1, Infinity);
64523
+ this.removalLimits = {
64524
+ maxRequests: validateLimit(options.removalLimits?.maxRequests ?? Infinity, "removalLimits.maxRequests", 1, Infinity),
64525
+ maxListEntries: validateLimit(options.removalLimits?.maxListEntries ?? Infinity, "removalLimits.maxListEntries", 1, Infinity),
64526
+ maxDeleteObjects: validateLimit(options.removalLimits?.maxDeleteObjects ?? Infinity, "removalLimits.maxDeleteObjects", 1, Infinity)
64527
+ };
64528
+ this.capabilities = Object.freeze({
64529
+ open: false,
64530
+ read: true,
64531
+ stat: true,
64532
+ readdir: true,
64533
+ realpath: true,
64534
+ access: true,
64535
+ write: true,
64536
+ explicitDirectories: true,
64537
+ implicitDirectories: true,
64538
+ mkdir: true,
64539
+ recursiveMkdir: true,
64540
+ remove: true,
64541
+ removeDirectory: true,
64542
+ recursiveRemove: true,
64543
+ copy: true,
64544
+ readlink: false,
64545
+ exclusiveCopy: options.transport.capabilities?.conditionalCopy === true,
64546
+ append: options.transport.capabilities?.conditionalPut === true,
64547
+ exclusiveCreate: options.transport.capabilities?.conditionalPut === true,
64548
+ truncate: options.transport.capabilities?.conditionalPut === true,
64549
+ atomicRenameNoReplace: false,
64550
+ rename: this.allowRename && options.transport.capabilities?.conditionalDelete === true && (options.transport.capabilities?.conditionalCopy === true || options.transport.capabilities?.conditionalPut === true),
64551
+ streamingAppend: options.transport.capabilities?.streamingWrite === true && options.transport.capabilities?.conditionalPut === true && typeof options.transport.putObjectStream === "function",
64552
+ randomAccessWrite: false,
64553
+ readOnly: options.readOnly ?? false,
64554
+ symlinks: false,
64555
+ hardlinks: false,
64556
+ permissions: false,
64557
+ timestamps: options.transport.capabilities?.conditionalCopy === true || options.transport.capabilities?.conditionalPut === true,
64558
+ atomicRename: false,
64559
+ snapshotRmdir: true,
64560
+ streamingRead: options.transport.capabilities?.streamingRead === true && typeof options.transport.getObjectStream === "function",
64561
+ streamingWrite: options.transport.capabilities?.streamingWrite === true && typeof options.transport.putObjectStream === "function"
64562
+ });
64563
+ if (this.capabilities.streamingRead)
64564
+ this.readStream = this.streamRead.bind(this);
64565
+ if (this.capabilities.streamingWrite)
64566
+ this.writeStream = this.streamWrite.bind(this);
64567
+ const transport = this.transport;
64568
+ const bucket = this.bucket;
64569
+ const registeredPrefix = this.prefix;
64570
+ registerS3EntryOwner(this, (path) => this.path(path), () => this.transport === transport && this.bucket === bucket && this.prefix === registeredPrefix, s3Comparison, options.compareEntry);
64571
+ registerEntryAuthority(this, compareOwnedS3Entries);
64572
+ }
64573
+ async compareEntry(path, peer, peerPath, options = {}) {
64574
+ return compareEntries(this, path, peer, peerPath, options);
64575
+ }
64576
+ path(input) {
64577
+ if (typeof input !== "string" || input.includes("\0") || !isWellFormed(input))
64578
+ fail2("EINVAL", "resolve", input, "invalid path string");
64579
+ const components2 = [];
64580
+ for (const part of input.split("/")) {
64581
+ if (!part || part === ".")
64582
+ continue;
64583
+ if (part === "..") {
64584
+ if (components2.length === 0)
64585
+ fail2("EACCES", "resolve", input, "path attempts to escape the configured prefix");
64586
+ components2.pop();
64587
+ } else
64588
+ components2.push(part);
64589
+ }
64590
+ const path = `/${components2.join("/")}`;
64591
+ if (utf8ByteLength3(this.key(path)) > 1024)
64592
+ fail2("ENAMETOOLONG", "resolve", input);
64593
+ return path;
64594
+ }
64595
+ key(path) {
64596
+ return this.prefix + path.slice(1);
64597
+ }
64598
+ directoryKey(path) {
64599
+ const key = path === "/" ? this.prefix : `${this.key(path)}/`;
64600
+ if (utf8ByteLength3(key) > 1024)
64601
+ fail2("ENAMETOOLONG", "resolve", path);
64602
+ return key;
64603
+ }
64604
+ checkAbort(options, syscall, path) {
64605
+ if (options.signal?.aborted)
64606
+ fail2("ECANCELED", syscall, path);
64607
+ }
64608
+ requestOptions(options) {
64609
+ return options.signal === void 0 ? {} : { abortSignal: options.signal };
64610
+ }
64611
+ async call(syscall, path, options, action, precondition) {
64612
+ this.checkAbort(options, syscall, path);
64613
+ chargeScopedTransportCall(options);
64614
+ this.checkAbort(options, syscall, path);
64615
+ const budget = this.removalBudgets.get(options);
64616
+ if (budget && ++budget.requests > this.removalLimits.maxRequests) {
64617
+ fail2("EFBIG", "rm", path, "S3 removal request budget exceeded");
64618
+ }
64619
+ if (this.requests >= this.maxRequests) {
64620
+ fail2("EFBIG", syscall, path, "S3 transport request budget exceeded");
64621
+ }
64622
+ this.requests++;
64623
+ let onAbort;
64624
+ try {
64625
+ const pending = action();
64626
+ const result = options.signal ? await new Promise((resolve, reject) => {
64627
+ const signal = options.signal;
64628
+ onAbort = () => reject(new FsError("ECANCELED", { syscall, path, cause: signal.reason }));
64629
+ signal.addEventListener("abort", onAbort, { once: true });
64630
+ if (signal.aborted)
64631
+ onAbort();
64632
+ pending.then((value) => {
64633
+ if (signal.aborted && typeof value === "object" && value !== null && "Body" in value)
64634
+ this.dispose(value.Body);
64635
+ resolve(value);
64636
+ }, reject);
64637
+ }) : await pending;
64638
+ this.checkAbort(options, syscall, path);
64639
+ return result;
64640
+ } catch (error) {
64641
+ if (options.signal?.aborted)
64642
+ fail2("ECANCELED", syscall, path);
64643
+ throw translate(error, syscall, path, precondition);
64644
+ } finally {
64645
+ if (onAbort)
64646
+ options.signal?.removeEventListener("abort", onAbort);
64647
+ }
64648
+ }
64649
+ writable(path, mode) {
64650
+ if (this.capabilities.readOnly)
64651
+ fail2("EROFS", "write", path);
64652
+ if (mode !== void 0)
64653
+ validateLimit(mode, "mode", 0, 4095);
64654
+ }
64655
+ unsupported(operation, path) {
64656
+ return fail2("ENOTSUP", operation, path, `S3 does not support ${operation} with the configured transport`);
64657
+ }
64658
+ async head(key, path, options) {
64659
+ try {
64660
+ const input = { Bucket: this.bucket, Key: key };
64661
+ return await this.call("headObject", path, options, () => queryS3Head(input, (query) => this.transport.headObject(query, this.requestOptions(options))));
64662
+ } catch (error) {
64663
+ if (isFsError(error, "ENOENT") && serviceCode(error.cause) !== "NoSuchBucket")
64664
+ return void 0;
64665
+ throw error;
64666
+ }
64667
+ }
64668
+ makeStat(type, metadata) {
64669
+ const size = type === "directory" ? 0 : metadata?.ContentLength;
64670
+ if (size === void 0 || !Number.isSafeInteger(size) || size < 0)
64671
+ fail2("EIO", "stat", "", "transport omitted a valid object ContentLength");
64672
+ const modified = metadata?.LastModified?.getTime() ?? 0;
64673
+ if (!Number.isFinite(modified))
64674
+ fail2("EIO", "stat", "", "transport returned an invalid LastModified");
64675
+ const timestamp = (key, fallback) => {
64676
+ const value = metadata?.Metadata?.[key];
64677
+ if (value === void 0)
64678
+ return fallback;
64679
+ const parsed = Number(value);
64680
+ if (!value || !Number.isFinite(parsed))
64681
+ fail2("EIO", "stat", "", "invalid virtual timestamp metadata");
64682
+ return parsed;
64683
+ };
64684
+ const storedMode = metadata?.Metadata?.["virtual-bash-mode"];
64685
+ const mode = storedMode === void 0 ? type === "directory" ? 493 : 420 : Number(storedMode);
64686
+ if (!Number.isSafeInteger(mode) || mode < 0 || mode > 4095 || storedMode === "")
64687
+ fail2("EIO", "stat", "", "invalid virtual mode metadata");
64688
+ return {
64689
+ type,
64690
+ size,
64691
+ mode: (type === "directory" ? 16384 : 32768) | mode,
64692
+ mtimeMs: timestamp("virtual-bash-mtime", modified),
64693
+ atimeMs: timestamp("virtual-bash-atime", 0),
64694
+ ctimeMs: modified
64695
+ };
64696
+ }
64697
+ async page(prefix, path, options, delimiter, token, maxKeys = this.pageSize) {
64698
+ const budget = this.removalBudgets.get(options);
64699
+ if (budget)
64700
+ maxKeys = Math.min(maxKeys, this.removalLimits.maxListEntries - budget.entries + 1);
64701
+ const result = await this.call("listObjectsV2", path, options, () => this.transport.listObjectsV2({
64702
+ Bucket: this.bucket,
64703
+ Prefix: prefix,
64704
+ MaxKeys: maxKeys,
64705
+ ...delimiter === void 0 ? {} : { Delimiter: delimiter },
64706
+ ...token === void 0 ? {} : { ContinuationToken: token }
64707
+ }, this.requestOptions(options)));
64708
+ if (budget) {
64709
+ budget.entries += (result.Contents?.length ?? 0) + (result.CommonPrefixes?.length ?? 0);
64710
+ if (budget.entries > this.removalLimits.maxListEntries)
64711
+ fail2("EFBIG", "rm", path, "S3 removal listing budget exceeded");
64712
+ }
64713
+ for (const item of result.Contents ?? []) {
64714
+ if (typeof item.Key !== "string" || !item.Key.startsWith(prefix))
64715
+ fail2("EIO", "listObjectsV2", path, "transport returned an object outside the requested prefix");
64716
+ this.validateObject(item, path);
64717
+ }
64718
+ for (const item of result.CommonPrefixes ?? []) {
64719
+ if (delimiter === void 0 || typeof item.Prefix !== "string" || !item.Prefix.startsWith(prefix) || !item.Prefix.endsWith("/") || item.Prefix === prefix)
64720
+ fail2("EIO", "listObjectsV2", path, "invalid common prefix");
64721
+ this.validateKey(item.Prefix, path);
64722
+ }
64723
+ if (result.IsTruncated !== void 0 && typeof result.IsTruncated !== "boolean")
64724
+ fail2("EIO", "listObjectsV2", path, "invalid IsTruncated flag");
64725
+ return result;
64726
+ }
64727
+ validateKey(key, path) {
64728
+ if (!key.startsWith(this.prefix))
64729
+ fail2("EIO", "listObjectsV2", path, "key escapes the configured prefix");
64730
+ const relative = key.slice(this.prefix.length).replace(/\/$/, "");
64731
+ if (!isWellFormed(key) || key.includes("\0") || utf8ByteLength3(key) > 1024 || relative !== "" && relative.split("/").some((part) => !part || part === "." || part === "..")) {
64732
+ fail2("ENOTSUP", "listObjectsV2", path, "object key cannot be represented as a canonical filesystem path");
64733
+ }
64734
+ }
64735
+ validateObject(object, path) {
64736
+ const key = object.Key;
64737
+ this.validateKey(key, path);
64738
+ if (object.Size === void 0 || !Number.isSafeInteger(object.Size) || object.Size < 0)
64739
+ fail2("EIO", "listObjectsV2", path, "invalid object size");
64740
+ if (key.endsWith("/") && object.Size !== 0)
64741
+ fail2("ENOTSUP", "listObjectsV2", path, "nonempty slash-suffixed objects cannot be treated as directories");
64742
+ }
64743
+ async *pages(prefix, path, options, delimiter, maxKeys = this.pageSize) {
64744
+ const tokens = /* @__PURE__ */ new Set();
64745
+ let token;
64746
+ let entries2 = 0;
64747
+ do {
64748
+ const page = await this.page(prefix, path, options, delimiter, token, maxKeys);
64749
+ entries2 += (page.Contents?.length ?? 0) + (page.CommonPrefixes?.length ?? 0);
64750
+ if (entries2 > this.maxListEntries || tokens.size >= this.maxListEntries)
64751
+ fail2("EFBIG", "listObjectsV2", path, "listing exceeds maxListEntries");
64752
+ yield page;
64753
+ if (!page.IsTruncated)
64754
+ return;
64755
+ token = page.NextContinuationToken;
64756
+ if (typeof token !== "string" || !token || tokens.has(token))
64757
+ fail2("EIO", "listObjectsV2", path, "missing or repeated continuation token");
64758
+ tokens.add(token);
64759
+ } while (true);
64760
+ }
64761
+ async inspect(path, options) {
64762
+ if (path === "/") {
64763
+ const listing = await this.page(this.prefix, path, options, void 0, void 0, 1);
64764
+ const marker2 = this.prefix && listing.Contents?.some((object) => object.Key === this.prefix) ? await this.head(this.prefix, path, options) : void 0;
64765
+ if (marker2 && marker2.ContentLength !== 0)
64766
+ this.unsupported("nonempty directory markers", path);
64767
+ return { stat: this.makeStat("directory", marker2), ...marker2 ? { metadata: marker2 } : {} };
64768
+ }
64769
+ const file = await this.head(this.key(path), path, options);
64770
+ if (utf8ByteLength3(this.key(path)) === 1024) {
64771
+ return file ? { stat: this.makeStat("file", file), metadata: file } : void 0;
64772
+ }
64773
+ const directoryKey = this.directoryKey(path);
64774
+ let directory = false;
64775
+ let hasMarker = false;
64776
+ for await (const children of this.pages(directoryKey, path, options, void 0, 1)) {
64777
+ if ((children.Contents?.length ?? 0) > 0) {
64778
+ directory = true;
64779
+ hasMarker = children.Contents.some((object) => object.Key === directoryKey);
64780
+ break;
64781
+ }
64782
+ }
64783
+ const marker = hasMarker ? await this.head(directoryKey, path, options) : void 0;
64784
+ if (marker && marker.ContentLength !== 0)
64785
+ this.unsupported("nonempty directory markers", path);
64786
+ if (file && directory)
64787
+ this.unsupported("file/prefix collisions", path);
64788
+ if (file)
64789
+ return { stat: this.makeStat("file", file), metadata: file };
64790
+ if (directory)
64791
+ return { stat: this.makeStat("directory", marker), ...marker ? { metadata: marker } : {} };
64792
+ return void 0;
64793
+ }
64794
+ async lookup(path, options) {
64795
+ const ancestors = [];
64796
+ for (let parent = posixPath.dirname(path); path !== "/"; parent = posixPath.dirname(parent)) {
64797
+ ancestors.unshift(parent);
64798
+ if (parent === "/")
64799
+ break;
64800
+ }
64801
+ for (const parent of ancestors) {
64802
+ if (parent === "/" && this.prefix === "")
64803
+ continue;
64804
+ const ancestor = await this.inspect(parent, options);
64805
+ if (!ancestor)
64806
+ fail2("ENOENT", "stat", parent);
64807
+ if (ancestor.stat.type !== "directory")
64808
+ fail2("ENOTDIR", "stat", parent);
64809
+ }
64810
+ return this.inspect(path, options);
64811
+ }
64812
+ requireDirectorySuffix(input, info3) {
64813
+ if (input.endsWith("/") && info3?.stat.type === "file")
64814
+ fail2("ENOTDIR", "stat", input);
64815
+ }
64816
+ async stat(input, options = {}) {
64817
+ const path = this.path(input);
64818
+ const info3 = await this.lookup(path, options);
64819
+ this.requireDirectorySuffix(input, info3);
64820
+ if (!info3)
64821
+ fail2("ENOENT", "stat", input);
64822
+ recordS3Stat(this, path, info3.stat, info3.metadata);
64823
+ return info3.stat;
64824
+ }
64825
+ async lstat(path, options = {}) {
64826
+ return this.stat(path, options);
64827
+ }
64828
+ async body(output, path, options) {
64829
+ const limit = Math.min(this.maxReadBytes, options.maxBytes === void 0 ? this.maxReadBytes : validateLimit(options.maxBytes, "maxBytes", 0, Infinity));
64830
+ let iterator;
64831
+ return this.call("readFile", path, options, async () => {
64832
+ if (output.Body && Symbol.asyncIterator in output.Body)
64833
+ iterator = output.Body[Symbol.asyncIterator]();
64834
+ if (output.ContentLength !== void 0 && output.ContentLength > limit)
64835
+ fail2("EFBIG", "readFile", path);
64836
+ const body = output.Body;
64837
+ if (!body)
64838
+ fail2("EIO", "readFile", path, "transport omitted the response body");
64839
+ let bytes;
64840
+ if (body instanceof Uint8Array) {
64841
+ if (body.byteLength > limit)
64842
+ fail2("EFBIG", "readFile", path);
64843
+ bytes = new Uint8Array(body);
64844
+ } else if (Symbol.asyncIterator in body) {
64845
+ bytes = await collectBytes({ [Symbol.asyncIterator]: () => iterator }, { ...limit === Infinity ? {} : { maxBytes: limit }, ...options.signal ? { signal: options.signal } : {} });
64846
+ } else if ("transformToByteArray" in body) {
64847
+ const converted = await body.transformToByteArray();
64848
+ if (!(converted instanceof Uint8Array))
64849
+ fail2("EIO", "readFile", path, "transport body is not binary");
64850
+ if (converted.byteLength > limit)
64851
+ fail2("EFBIG", "readFile", path);
64852
+ bytes = new Uint8Array(converted);
64853
+ } else
64854
+ fail2("EIO", "readFile", path, "unsupported response body");
64855
+ this.checkAbort(options, "readFile", path);
64856
+ if (output.ContentLength !== void 0 && output.ContentLength !== bytes.byteLength)
64857
+ fail2("EIO", "readFile", path, "response body length does not match ContentLength");
64858
+ return bytes;
64859
+ }).catch((error) => {
64860
+ this.dispose(iterator);
64861
+ if (output.Body !== iterator)
64862
+ this.dispose(output.Body, iterator === void 0);
64863
+ throw error;
64864
+ });
64865
+ }
64866
+ async get(path, options) {
64867
+ return this.call("getObject", path, options, () => this.transport.getObject({ Bucket: this.bucket, Key: this.key(path) }, this.requestOptions(options)));
64868
+ }
64869
+ async readFile(input, options = {}) {
64870
+ const path = this.path(input);
64871
+ if (options.maxBytes !== void 0)
64872
+ validateLimit(options.maxBytes, "maxBytes", 0, Infinity);
64873
+ const info3 = await this.stat(input, options);
64874
+ if (info3.type === "directory")
64875
+ fail2("EISDIR", "readFile", path);
64876
+ if (info3.size > Math.min(this.maxReadBytes, options.maxBytes ?? this.maxReadBytes))
64877
+ fail2("EFBIG", "readFile", path);
64878
+ const output = this.capabilities.streamingRead ? await this.call("getObject", path, options, () => this.transport.getObjectStream({ Bucket: this.bucket, Key: this.key(path) }, this.requestOptions(options))) : await this.get(path, options);
64879
+ return this.body(output, path, options);
64880
+ }
64881
+ etag(metadata, path) {
64882
+ if (!metadata?.ETag)
64883
+ this.unsupported("conditional mutation without an ETag", path);
64884
+ return metadata.ETag;
64885
+ }
64886
+ async writeFile(input, data, options = {}) {
64887
+ const path = this.path(input);
64888
+ this.writable(path, options.mode);
64889
+ if (!(data instanceof Uint8Array))
64890
+ fail2("EINVAL", "writeFile", path, "data must be Uint8Array");
64891
+ const bytes = new Uint8Array(data);
64892
+ if (bytes.byteLength > 5e9)
64893
+ fail2("EFBIG", "writeFile", path, "multipart upload is not supported");
64894
+ const flag = options.flag ?? "w";
64895
+ if (!["w", "wx", "a", "ax"].includes(flag))
64896
+ fail2("EINVAL", "writeFile", path, "invalid write flag");
64897
+ if (flag !== "w" && !this.transport.capabilities?.conditionalPut)
64898
+ this.unsupported("conditional writes", path);
64899
+ const info3 = await this.lookup(path, options);
64900
+ this.requireDirectorySuffix(input, info3);
64901
+ if (info3?.stat.type === "directory")
64902
+ fail2("EISDIR", "writeFile", path);
64903
+ if (input.endsWith("/"))
64904
+ fail2("EISDIR", "writeFile", input);
64905
+ const exclusive = flag === "wx" || flag === "ax";
64906
+ if (exclusive && info3)
64907
+ fail2("EEXIST", "writeFile", path);
64908
+ let body = bytes;
64909
+ let match;
64910
+ let metadata = this.writeMetadata(info3?.metadata, options.mode);
64911
+ if (flag === "a" && info3) {
64912
+ const current = await this.get(path, options);
64913
+ const previous = await this.body(current, path, options);
64914
+ match = this.etag(current, path);
64915
+ metadata = { ...current.Metadata };
64916
+ delete metadata["virtual-bash-mtime"];
64917
+ if (previous.length + bytes.length > this.maxReadBytes)
64918
+ fail2("EFBIG", "appendFile", path);
64919
+ body = new Uint8Array(previous.length + bytes.length);
64920
+ body.set(previous);
64921
+ body.set(bytes, previous.length);
64922
+ }
64923
+ await this.call("putObject", path, options, () => this.transport.putObject({
64924
+ Bucket: this.bucket,
64925
+ Key: this.key(path),
64926
+ Body: body,
64927
+ ...match === void 0 ? {} : { IfMatch: match },
64928
+ ...exclusive || flag === "a" && !info3 ? { IfNoneMatch: "*" } : {},
64929
+ ...metadata === void 0 ? {} : { Metadata: metadata }
64930
+ }, this.requestOptions(options)), exclusive ? "EEXIST" : "EAGAIN");
64931
+ }
64932
+ writeMetadata(previous, mode) {
64933
+ const metadata = { ...previous?.Metadata };
64934
+ delete metadata["virtual-bash-mtime"];
64935
+ if (previous === void 0 && mode !== void 0)
64936
+ metadata["virtual-bash-mode"] = String(mode);
64937
+ return Object.keys(metadata).length === 0 ? void 0 : metadata;
64938
+ }
64939
+ async appendFile(path, data, options = {}) {
64940
+ return this.writeFile(path, data, { ...options, flag: "a" });
64941
+ }
64942
+ async mkdir(input, options = {}) {
64943
+ const path = this.path(input);
64944
+ this.writable(path, options.mode);
64945
+ if (options.recursive && path !== "/") {
64946
+ await this.mkdir(posixPath.dirname(path), { ...options, recursive: true });
64947
+ }
64948
+ const info3 = await this.lookup(path, options);
64949
+ if (info3) {
64950
+ if (options.recursive && info3.stat.type === "directory")
64951
+ return;
64952
+ fail2("EEXIST", "mkdir", path);
64953
+ }
64954
+ await this.call("putObject", path, options, () => this.transport.putObject({
64955
+ Bucket: this.bucket,
64956
+ Key: this.directoryKey(path),
64957
+ Body: new Uint8Array(),
64958
+ ...options.mode === void 0 ? {} : { Metadata: { "virtual-bash-mode": String(options.mode) } },
64959
+ ...this.transport.capabilities?.conditionalPut ? { IfNoneMatch: "*" } : {}
64960
+ }, this.requestOptions(options)), "EEXIST");
64961
+ }
64962
+ async readdir(input, options = {}) {
64963
+ let limit;
64964
+ if (options.maxEntries !== void 0) {
64965
+ this.checkAbort(options, "readdir", input);
64966
+ limit = directoryEntryLimit(options, input);
64967
+ }
64968
+ const path = this.path(input);
64969
+ if ((await this.stat(input, options)).type !== "directory")
64970
+ fail2("ENOTDIR", "readdir", path);
64971
+ const prefix = this.directoryKey(path);
64972
+ const entries2 = /* @__PURE__ */ new Map();
64973
+ const add = (name, type) => {
64974
+ this.checkAbort(options, "readdir", path);
64975
+ if (!name || name.includes("/"))
64976
+ fail2("EIO", "readdir", path, "invalid direct child in delimited listing");
64977
+ const existing = entries2.get(name);
64978
+ if (existing && existing.type !== type)
64979
+ this.unsupported("file/prefix collisions", path);
64980
+ if (!existing)
64981
+ admitDirectoryEntries(entries2.size + 1, limit, path);
64982
+ entries2.set(name, { name, type });
64983
+ };
64984
+ const maxKeys = limit === void 0 ? this.pageSize : Math.min(this.pageSize, limit + 1);
64985
+ for await (const page of this.pages(prefix, path, options, "/", maxKeys)) {
64986
+ for (const item of page.Contents ?? []) {
64987
+ if (item.Key === prefix)
64988
+ continue;
64989
+ add(item.Key.slice(prefix.length), "file");
64990
+ }
64991
+ for (const item of page.CommonPrefixes ?? [])
64992
+ add(item.Prefix.slice(prefix.length, -1), "directory");
64993
+ }
64994
+ return [...entries2.values()].sort((left, right) => compareKeys(left.name, right.name));
64995
+ }
64996
+ async tree(path, options) {
64997
+ const objects = /* @__PURE__ */ new Map();
64998
+ for await (const page of this.pages(this.directoryKey(path), path, options)) {
64999
+ for (const item of page.Contents ?? [])
65000
+ objects.set(item.Key, item);
65001
+ }
65002
+ for (const key of objects.keys()) {
65003
+ const withoutSlash = key.replace(/\/$/, "");
65004
+ if (key.endsWith("/") && objects.has(withoutSlash))
65005
+ this.unsupported("file/prefix collisions", path);
65006
+ let parent = posixPath.dirname(withoutSlash);
65007
+ while (parent !== "." && parent !== "/") {
65008
+ if (objects.has(parent))
65009
+ this.unsupported("file/prefix collisions", path);
65010
+ parent = posixPath.dirname(parent);
65011
+ }
65012
+ }
65013
+ return [...objects.values()];
65014
+ }
65015
+ async rmdir(input, options = {}) {
65016
+ try {
65017
+ const path = this.path(input);
65018
+ this.checkAbort(options, "rmdir", input);
65019
+ this.writable(path);
65020
+ if (path === "/")
65021
+ fail2("EBUSY", "rmdir", input, "cannot remove the mounted root");
65022
+ const info3 = await this.lookup(path, options);
65023
+ this.checkAbort(options, "rmdir", input);
65024
+ if (!info3)
65025
+ fail2("ENOENT", "rmdir", input);
65026
+ if (info3.stat.type !== "directory")
65027
+ fail2("ENOTDIR", "rmdir", input);
65028
+ const prefix = this.directoryKey(path);
65029
+ let markerObserved = false;
65030
+ for await (const page of this.pages(prefix, path, options, "/", Math.max(2, this.pageSize))) {
65031
+ this.checkAbort(options, "rmdir", input);
65032
+ if (page.Contents?.some((item) => item.Key !== prefix) || page.CommonPrefixes?.length) {
65033
+ fail2("ENOTEMPTY", "rmdir", input);
65034
+ }
65035
+ if (page.IsTruncated === void 0)
65036
+ fail2("EIO", "rmdir", input, "listing did not confirm completeness");
65037
+ if (page.Contents?.some((item) => item.Key === prefix))
65038
+ markerObserved = true;
65039
+ }
65040
+ this.checkAbort(options, "rmdir", input);
65041
+ if (!info3.metadata)
65042
+ fail2("ENOTSUP", "rmdir", input, "snapshot removal requires an explicit directory marker");
65043
+ if (!markerObserved)
65044
+ fail2("ENOENT", "rmdir", input, "directory marker disappeared during inspection");
65045
+ await this.call("deleteObject", path, options, () => this.transport.deleteObject({ Bucket: this.bucket, Key: prefix }, this.requestOptions(options)));
65046
+ } catch (error) {
65047
+ if (isFsError(error) && (error.syscall !== "rmdir" || error.path !== input)) {
65048
+ throw new FsError(error.code, { syscall: "rmdir", path: input, cause: error });
65049
+ }
65050
+ throw error;
65051
+ }
65052
+ }
65053
+ async rm(input, options = {}) {
65054
+ options = { ...options };
65055
+ const budget = { requests: 0, entries: 0 };
65056
+ this.removalBudgets.set(options, budget);
65057
+ const path = this.path(input);
65058
+ this.writable(path);
65059
+ if (path === "/")
65060
+ fail2("EBUSY", "rm", path, "cannot remove the mounted root");
65061
+ let info3;
65062
+ try {
65063
+ info3 = await this.lookup(path, options);
65064
+ } catch (error) {
65065
+ if (options.force && isFsError(error, "ENOENT") && serviceCode(error.cause) !== "NoSuchBucket")
65066
+ return;
65067
+ throw error;
65068
+ }
65069
+ this.requireDirectorySuffix(input, info3);
65070
+ if (!info3) {
65071
+ if (options.force)
65072
+ return;
65073
+ fail2("ENOENT", "rm", path);
65074
+ }
65075
+ let objects;
65076
+ if (info3.stat.type === "directory" && !options.recursive) {
65077
+ const prefix = this.directoryKey(path);
65078
+ objects = [];
65079
+ for await (const page of this.pages(prefix, path, options, void 0, 2)) {
65080
+ if (page.Contents?.some((item) => item.Key !== prefix))
65081
+ fail2("ENOTEMPTY", "rm", path);
65082
+ if (page.Contents?.length)
65083
+ objects = [{ Key: prefix }];
65084
+ }
65085
+ } else {
65086
+ objects = info3.stat.type === "directory" ? await this.tree(path, options) : [{ Key: this.key(path) }];
65087
+ }
65088
+ if (objects.length > this.removalLimits.maxDeleteObjects || budget.requests + objects.length > this.removalLimits.maxRequests) {
65089
+ fail2("EFBIG", "rm", path, "S3 removal delete or request budget exceeded; use bounded batches");
65090
+ }
65091
+ for (const item of objects) {
65092
+ await this.call("deleteObject", path, options, () => this.transport.deleteObject({ Bucket: this.bucket, Key: item.Key }, this.requestOptions(options)));
65093
+ }
65094
+ }
65095
+ async copy(sourceKey, destinationKey, source, metadata, options, destination) {
65096
+ if (metadata.ContentLength === void 0 || metadata.ContentLength > 5e9)
65097
+ this.unsupported("multipart copy", source);
65098
+ const etag = this.etag(metadata, source);
65099
+ const result = await this.call("copyObject", source, options, () => this.transport.copyObject({
65100
+ Bucket: this.bucket,
65101
+ Key: destinationKey,
65102
+ CopySource: encodeCopySource(this.bucket, sourceKey),
65103
+ CopySourceIfMatch: etag,
65104
+ MetadataDirective: "COPY",
65105
+ ...options.exclusive ? { IfNoneMatch: "*" } : {},
65106
+ ...destination === void 0 ? {} : destination === null ? { IfNoneMatch: "*" } : { IfMatch: this.etag(destination, source) }
65107
+ }, this.requestOptions(options)));
65108
+ if (!result.CopyObjectResult?.ETag)
65109
+ fail2("EIO", "copyObject", source, "transport did not confirm a completed CopyObject result");
65110
+ }
65111
+ async copyFile(sourceInput, destinationInput, options = {}) {
65112
+ const source = this.path(sourceInput);
65113
+ const destination = this.path(destinationInput);
65114
+ this.writable(destination);
65115
+ if (options.exclusive && !this.transport.capabilities?.conditionalCopy)
65116
+ this.unsupported("exclusive server-side copy", destination);
65117
+ const origin = await this.lookup(source, options);
65118
+ this.requireDirectorySuffix(sourceInput, origin);
65119
+ if (!origin)
65120
+ fail2("ENOENT", "copyFile", source);
65121
+ if (origin.stat.type === "directory")
65122
+ fail2("EISDIR", "copyFile", source);
65123
+ const target = await this.lookup(destination, options);
65124
+ this.requireDirectorySuffix(destinationInput, target);
65125
+ if (target?.stat.type === "directory" || destinationInput.endsWith("/"))
65126
+ fail2("EISDIR", "copyFile", destination);
65127
+ if (target && options.exclusive)
65128
+ fail2("EEXIST", "copyFile", destination);
65129
+ if (source === destination)
65130
+ return;
65131
+ try {
65132
+ await this.copy(this.key(source), this.key(destination), source, origin.metadata, options);
65133
+ } catch (error) {
65134
+ if (!options.exclusive || !isFsError(error, "EAGAIN"))
65135
+ throw error;
65136
+ const status = error.cause?.$metadata?.httpStatusCode;
65137
+ if (serviceCode(error.cause) !== "PreconditionFailed" && status !== 412)
65138
+ throw error;
65139
+ let destinationExists = false;
65140
+ try {
65141
+ const currentSource = await this.head(this.key(source), source, options);
65142
+ if (currentSource?.ETag === origin.metadata?.ETag) {
65143
+ destinationExists = await this.head(this.key(destination), destination, options) !== void 0;
65144
+ }
65145
+ } catch (diagnosticError) {
65146
+ if (isFsError(diagnosticError, "ECANCELED"))
65147
+ throw diagnosticError;
65148
+ }
65149
+ if (destinationExists) {
65150
+ throw new FsError("EEXIST", { syscall: "copyFile", path: source, dest: destination, cause: error });
65151
+ }
65152
+ throw error;
65153
+ }
65154
+ }
65155
+ async rename(sourceInput, destinationInput, options = {}) {
65156
+ if (options.noReplace) {
65157
+ options.signal?.throwIfAborted();
65158
+ this.unsupported("atomic no-replace rename", sourceInput);
65159
+ }
65160
+ const source = this.path(sourceInput);
65161
+ const destination = this.path(destinationInput);
65162
+ this.writable(destination);
65163
+ if (!this.allowRename)
65164
+ this.unsupported("atomic rename; explicitly enable allowNonAtomicRename for copy/delete semantics", source);
65165
+ if (!this.transport.capabilities?.conditionalDelete)
65166
+ this.unsupported("rename without conditional delete", source);
65167
+ const conditionalCopy = this.transport.capabilities?.conditionalCopy === true;
65168
+ if (!conditionalCopy && this.transport.capabilities?.conditionalPut !== true) {
65169
+ this.unsupported("rename requires conditional destination copy or conditional PUT, plus conditional delete", source);
65170
+ }
65171
+ const streamFallback = this.capabilities.streamingRead && this.capabilities.streamingWrite;
65172
+ if (source === "/" || destination === "/")
65173
+ fail2("EBUSY", "rename", source);
65174
+ const origin = await this.lookup(source, options);
65175
+ this.requireDirectorySuffix(sourceInput, origin);
65176
+ if (!origin)
65177
+ fail2("ENOENT", "rename", source);
65178
+ if (source === destination) {
65179
+ this.requireDirectorySuffix(destinationInput, origin);
65180
+ return;
65181
+ }
65182
+ if (destination.startsWith(`${source}/`))
65183
+ fail2("EINVAL", "rename", destination, "cannot move a path into itself");
65184
+ const target = await this.lookup(destination, options);
65185
+ this.requireDirectorySuffix(destinationInput, target);
65186
+ if (destinationInput.endsWith("/") && origin.stat.type !== "directory")
65187
+ fail2("ENOTDIR", "rename", destination);
65188
+ if (target && target.stat.type !== origin.stat.type)
65189
+ fail2(target.stat.type === "directory" ? "EISDIR" : "ENOTDIR", "rename", destination);
65190
+ if (target?.stat.type === "directory" && (await this.readdir(destination, options)).length > 0)
65191
+ fail2("ENOTEMPTY", "rename", destination);
65192
+ if (target?.metadata)
65193
+ this.etag(target.metadata, destination);
65194
+ const objects = origin.stat.type === "directory" ? await this.tree(source, options) : [{
65195
+ Key: this.key(source),
65196
+ Size: origin.stat.size,
65197
+ ETag: origin.metadata?.ETag
65198
+ }];
65199
+ for (const object of objects) {
65200
+ this.etag({ ETag: object.ETag }, source);
65201
+ if (object.Size === void 0 || object.Size > 5e9)
65202
+ this.unsupported("multipart copy", source);
65203
+ if (!conditionalCopy && object.Size > (streamFallback ? this.maxStreamBytes : this.maxReadBytes)) {
65204
+ fail2("EFBIG", "rename", source, "conditional PUT fallback exceeds its configured transfer or buffered read limit");
65205
+ }
65206
+ if (utf8ByteLength3(this.key(destination) + object.Key.slice(this.key(source).length)) > 1024)
65207
+ fail2("ENAMETOOLONG", "rename", destination);
65208
+ }
65209
+ const copied = [];
65210
+ const deleted = [];
65211
+ let phase = "copy";
65212
+ try {
65213
+ for (const object of objects) {
65214
+ const destinationKey = this.key(destination) + object.Key.slice(this.key(source).length);
65215
+ const destinationMetadata = origin.stat.type === "file" || object.Key === this.directoryKey(source) ? target?.metadata ?? null : null;
65216
+ const metadata = { ContentLength: object.Size, ETag: object.ETag };
65217
+ if (conditionalCopy)
65218
+ await this.copy(object.Key, destinationKey, source, metadata, options, destinationMetadata);
65219
+ else
65220
+ await this.copyWithPut(object.Key, destinationKey, source, metadata, destinationMetadata, options, streamFallback);
65221
+ copied.push(destinationKey);
65222
+ }
65223
+ phase = "delete";
65224
+ for (const object of objects) {
65225
+ await this.call("deleteObject", source, options, () => this.transport.deleteObject({
65226
+ Bucket: this.bucket,
65227
+ Key: object.Key,
65228
+ IfMatch: object.ETag
65229
+ }, this.requestOptions(options)));
65230
+ deleted.push(object.Key);
65231
+ }
65232
+ } catch (error) {
65233
+ throw new S3RenameError(source, destination, phase, copied, deleted, translate(error, "rename", source));
65234
+ }
65235
+ }
65236
+ async copyWithPut(sourceKey, destinationKey, source, expected, destination, options, streaming) {
65237
+ const etag = this.etag(expected, source);
65238
+ const condition = destination === null ? { IfNoneMatch: "*" } : { IfMatch: this.etag(destination, destinationKey) };
65239
+ const controller = new AbortController();
65240
+ const signalScope = options.signal ? composeAbortSignals([options.signal, controller.signal]) : void 0;
65241
+ const signal = signalScope?.signal ?? controller.signal;
65242
+ const operationOptions = { signal };
65243
+ let output;
65244
+ let upload;
65245
+ let reading = false;
65246
+ try {
65247
+ output = await this.call("getObject", source, operationOptions, () => streaming ? this.transport.getObjectStream({ Bucket: this.bucket, Key: sourceKey, IfMatch: etag }, { abortSignal: signal }) : this.transport.getObject({ Bucket: this.bucket, Key: sourceKey }, { abortSignal: signal }));
65248
+ if (this.etag(output, source) !== etag)
65249
+ fail2("EAGAIN", "rename", source, "source changed before conditional PUT copy");
65250
+ if (output.ContentLength !== void 0 && output.ContentLength !== expected.ContentLength) {
65251
+ fail2("EIO", "rename", source, "source response length differs from the enumerated object");
65252
+ }
65253
+ const input = {
65254
+ Bucket: this.bucket,
65255
+ Key: destinationKey,
65256
+ ...condition,
65257
+ ...output.Metadata === void 0 ? {} : { Metadata: { ...output.Metadata } }
65258
+ };
65259
+ if (!streaming) {
65260
+ const body2 = await this.body(output, source, operationOptions);
65261
+ if (body2.length !== expected.ContentLength)
65262
+ fail2("EIO", "rename", source, "source body length differs from the enumerated object");
65263
+ await this.call("putObject", source, operationOptions, () => this.transport.putObject({ ...input, Body: body2 }, { abortSignal: signal }));
65264
+ return;
65265
+ }
65266
+ const body = output.Body;
65267
+ if (!body || !(Symbol.asyncIterator in body))
65268
+ fail2("EIO", "rename", source, "streaming transport did not return an async binary body");
65269
+ let finished = false;
65270
+ upload = (async function* () {
65271
+ let count = 0;
65272
+ reading = true;
65273
+ for await (const chunk of readBytes(body, signal)) {
65274
+ if (chunk.length > expected.ContentLength - count)
65275
+ fail2("EIO", "rename", source, "source body exceeds its enumerated length");
65276
+ count += chunk.length;
65277
+ for (let offset = 0; offset < chunk.length; offset += 64 * 1024) {
65278
+ signal.throwIfAborted();
65279
+ yield new Uint8Array(chunk.subarray(offset, offset + 64 * 1024));
65280
+ }
65281
+ }
65282
+ if (count !== expected.ContentLength)
65283
+ fail2("EIO", "rename", source, "incomplete source body");
65284
+ finished = true;
65285
+ })();
65286
+ await this.call("putObject", source, operationOptions, () => this.transport.putObjectStream({ ...input, Body: upload }, { abortSignal: signal }));
65287
+ if (!finished)
65288
+ fail2("EIO", "rename", source, "transport completed without consuming the conditional copy body");
65289
+ } finally {
65290
+ controller.abort();
65291
+ signalScope?.dispose();
65292
+ this.dispose(upload);
65293
+ this.dispose(output?.Body, !reading);
65294
+ }
65295
+ }
65296
+ async realpath(input, options = {}) {
65297
+ await this.stat(input, options);
65298
+ return this.path(input);
65299
+ }
65300
+ async access(path, mode = 0, options = {}) {
65301
+ if (!Number.isInteger(mode) || mode < 0 || mode > 7)
65302
+ fail2("EINVAL", "access", path);
65303
+ const info3 = await this.stat(path, options);
65304
+ if ((mode & 2) !== 0 && this.capabilities.readOnly)
65305
+ fail2("EROFS", "access", path);
65306
+ if ((mode & 1) !== 0 && info3.type !== "directory")
65307
+ fail2("EACCES", "access", path);
65308
+ }
65309
+ async readlink(path) {
65310
+ return this.unsupported("readlink", path);
65311
+ }
65312
+ async symlink(_target, path) {
65313
+ this.unsupported("symlink", path);
65314
+ }
65315
+ async link(_existingPath, path) {
65316
+ this.unsupported("link", path);
65317
+ }
65318
+ async chmod(path, _mode) {
65319
+ this.unsupported("chmod", path);
65320
+ }
65321
+ async utimes(input, atimeMs, mtimeMs, options = {}) {
65322
+ const path = this.path(input);
65323
+ this.writable(path);
65324
+ if (!Number.isFinite(atimeMs) || !Number.isFinite(mtimeMs))
65325
+ fail2("EINVAL", "utimes", path);
65326
+ const info3 = await this.lookup(path, options);
65327
+ this.requireDirectorySuffix(input, info3);
65328
+ if (!info3)
65329
+ fail2("ENOENT", "utimes", path);
65330
+ if (!this.capabilities.timestamps)
65331
+ this.unsupported("conditional metadata mutation", path);
65332
+ const key = info3.stat.type === "directory" ? this.directoryKey(path) : this.key(path);
65333
+ if (!key)
65334
+ this.unsupported("timestamps on an unprefixed bucket root", path);
65335
+ const metadata = {
65336
+ ...info3.metadata?.Metadata,
65337
+ "virtual-bash-atime": String(atimeMs),
65338
+ "virtual-bash-mtime": String(mtimeMs)
65339
+ };
65340
+ if (!info3.metadata) {
65341
+ if (!this.transport.capabilities?.conditionalPut)
65342
+ this.unsupported("conditional directory marker creation", path);
65343
+ await this.call("utimes", path, options, () => this.transport.putObject({
65344
+ Bucket: this.bucket,
65345
+ Key: key,
65346
+ Body: new Uint8Array(),
65347
+ Metadata: metadata,
65348
+ IfNoneMatch: "*"
65349
+ }, this.requestOptions(options)));
65350
+ return;
65351
+ }
65352
+ if (!this.transport.capabilities?.conditionalCopy) {
65353
+ const current = await this.call("getObject", path, options, () => this.transport.getObject({
65354
+ Bucket: this.bucket,
65355
+ Key: key
65356
+ }, this.requestOptions(options)));
65357
+ const body = await this.body(current, path, options);
65358
+ await this.call("utimes", path, options, () => this.transport.putObject({
65359
+ Bucket: this.bucket,
65360
+ Key: key,
65361
+ Body: body,
65362
+ IfMatch: this.etag(current, path),
65363
+ Metadata: { ...current.Metadata, "virtual-bash-atime": String(atimeMs), "virtual-bash-mtime": String(mtimeMs) }
65364
+ }, this.requestOptions(options)));
65365
+ return;
65366
+ }
65367
+ if (info3.stat.size > 5e9)
65368
+ this.unsupported("multipart metadata copy", path);
65369
+ const etag = this.etag(info3.metadata, path);
65370
+ const result = await this.call("utimes", path, options, () => this.transport.copyObject({
65371
+ Bucket: this.bucket,
65372
+ Key: key,
65373
+ CopySource: encodeCopySource(this.bucket, key),
65374
+ CopySourceIfMatch: etag,
65375
+ IfMatch: etag,
65376
+ MetadataDirective: "REPLACE",
65377
+ Metadata: metadata
65378
+ }, this.requestOptions(options)));
65379
+ if (!result.CopyObjectResult?.ETag)
65380
+ fail2("EIO", "utimes", path, "transport did not confirm a completed metadata copy");
65381
+ }
65382
+ async truncate(input, length = 0, options = {}) {
65383
+ const path = this.path(input);
65384
+ this.writable(path);
65385
+ validateLimit(length, "length", 0);
65386
+ const info3 = await this.lookup(path, options);
65387
+ this.requireDirectorySuffix(input, info3);
65388
+ if (!info3)
65389
+ fail2("ENOENT", "truncate", path);
65390
+ if (info3.stat.type === "directory")
65391
+ fail2("EISDIR", "truncate", path);
65392
+ if (!this.transport.capabilities?.conditionalPut)
65393
+ this.unsupported("conditional truncate", path);
65394
+ if (length > this.maxReadBytes)
65395
+ fail2("EFBIG", "truncate", path);
65396
+ let current = info3.metadata;
65397
+ const body = new Uint8Array(length);
65398
+ if (length !== 0 && info3.stat.size !== 0) {
65399
+ if (this.readStream) {
65400
+ const previous = await this.call("truncate", path, options, () => collectBytes(this.readStream(input, { ...options, endExclusive: Math.min(length, info3.stat.size) }), { ...options, maxBytes: length }));
65401
+ body.set(previous);
65402
+ } else {
65403
+ const output = await this.get(path, options);
65404
+ const previous = await this.body(output, path, options);
65405
+ current = output;
65406
+ body.set(previous.subarray(0, length));
65407
+ }
65408
+ }
65409
+ const metadata = { ...current.Metadata };
65410
+ delete metadata["virtual-bash-mtime"];
65411
+ await this.call("truncate", path, options, () => this.transport.putObject({
65412
+ Bucket: this.bucket,
65413
+ Key: this.key(path),
65414
+ Body: body,
65415
+ IfMatch: this.etag(current, path),
65416
+ Metadata: metadata
65417
+ }, this.requestOptions(options)));
65418
+ }
65419
+ async *streamRead(input, options = {}) {
65420
+ const path = this.path(input);
65421
+ const start = validateLimit(options.start ?? 0, "start", 0);
65422
+ const end = options.endExclusive === void 0 ? void 0 : validateLimit(options.endExclusive, "endExclusive", start);
65423
+ const chunkSize2 = validateLimit(options.chunkSize ?? 64 * 1024, "chunkSize", 1);
65424
+ const info3 = await this.lookup(path, options);
65425
+ this.requireDirectorySuffix(input, info3);
65426
+ if (!info3)
65427
+ fail2("ENOENT", "readStream", path);
65428
+ if (info3.stat.type === "directory")
65429
+ fail2("EISDIR", "readStream", path);
65430
+ const stop = Math.min(end ?? info3.stat.size, info3.stat.size);
65431
+ const expected = Math.max(0, stop - start);
65432
+ if (expected > this.maxStreamBytes)
65433
+ fail2("EFBIG", "readStream", path);
65434
+ if (expected === 0 && info3.stat.size !== 0)
65435
+ return;
65436
+ let count = 0;
65437
+ let finished = false;
65438
+ const controller = new AbortController();
65439
+ const signalScope = options.signal ? composeAbortSignals([options.signal, controller.signal]) : void 0;
65440
+ const signal = signalScope?.signal ?? controller.signal;
65441
+ let output;
65442
+ let iterator;
65443
+ try {
65444
+ output = await this.call("getObject", path, options, () => this.transport.getObjectStream({
65445
+ Bucket: this.bucket,
65446
+ Key: this.key(path),
65447
+ IfMatch: this.etag(info3.metadata, path),
65448
+ ...expected === 0 || start === 0 && stop === info3.stat.size ? {} : { Range: `bytes=${start}-${stop - 1}` }
65449
+ }, { abortSignal: signal }));
65450
+ if (output.ETag !== void 0 && output.ETag !== info3.metadata?.ETag)
65451
+ fail2("EIO", "readStream", path, "response ETag differs from requested snapshot");
65452
+ if (output.ContentLength !== void 0 && output.ContentLength !== expected)
65453
+ fail2("EIO", "readStream", path, "response length differs from requested snapshot");
65454
+ iterator = readBytes(output.Body, signal)[Symbol.asyncIterator]();
65455
+ while (true) {
65456
+ const result = await iterator.next();
65457
+ if (result.done)
65458
+ break;
65459
+ const chunk = result.value;
65460
+ if (chunk.length > expected - count)
65461
+ fail2("EIO", "readStream", path, "response exceeds requested length");
65462
+ count += chunk.length;
65463
+ for (let offset = 0; offset < chunk.length; offset += chunkSize2) {
65464
+ this.checkAbort(options, "readStream", path);
65465
+ yield new Uint8Array(chunk.subarray(offset, offset + chunkSize2));
65466
+ }
65467
+ }
65468
+ if (count !== expected)
65469
+ fail2("EIO", "readStream", path, "incomplete response body");
65470
+ finished = true;
65471
+ } catch (error) {
65472
+ this.checkAbort(options, "readStream", path);
65473
+ throw translate(error, "readStream", path);
65474
+ } finally {
65475
+ controller.abort();
65476
+ signalScope?.dispose();
65477
+ if (!finished && output) {
65478
+ this.dispose(iterator);
65479
+ this.dispose(output.Body, iterator === void 0);
65480
+ }
65481
+ }
65482
+ }
65483
+ dispose(body, returnIterator = true) {
65484
+ const disposable = body;
65485
+ try {
65486
+ const result = typeof disposable?.destroy === "function" ? disposable.destroy() : typeof disposable?.cancel === "function" ? disposable.cancel() : returnIterator ? disposable?.return?.() : void 0;
65487
+ void Promise.resolve(result).catch(() => {
65488
+ });
65489
+ } catch (ignoredError) {
65490
+ void ignoredError;
65491
+ }
65492
+ }
65493
+ async streamWrite(input, source, options = {}) {
65494
+ const path = this.path(input);
65495
+ this.writable(path, options.mode);
65496
+ const flag = options.flag ?? "w";
65497
+ if (!["w", "wx", "a", "ax"].includes(flag))
65498
+ fail2("EINVAL", "writeStream", path);
65499
+ if (flag !== "w" && !this.transport.capabilities?.conditionalPut)
65500
+ this.unsupported("conditional writes", path);
65501
+ const info3 = await this.lookup(path, options);
65502
+ this.requireDirectorySuffix(input, info3);
65503
+ if (info3?.stat.type === "directory" || input.endsWith("/"))
65504
+ fail2("EISDIR", "writeStream", path);
65505
+ const exclusive = flag === "wx" || flag === "ax";
65506
+ if (exclusive && info3)
65507
+ fail2("EEXIST", "writeStream", path);
65508
+ if (flag === "a") {
65509
+ const current = info3 ? await this.get(path, options) : void 0;
65510
+ const previous = current ? await this.body(current, path, options) : new Uint8Array();
65511
+ const limit = Math.min(this.maxReadBytes, this.maxStreamBytes);
65512
+ if (previous.length > limit)
65513
+ fail2("EFBIG", "writeStream", path);
65514
+ const bytes = await this.call("writeStream", path, options, () => collectBytes(source, { ...limit === Infinity ? {} : { maxBytes: limit - previous.length }, ...options }));
65515
+ const body2 = new Uint8Array(previous.length + bytes.length);
65516
+ body2.set(previous);
65517
+ body2.set(bytes, previous.length);
65518
+ const metadata = this.writeMetadata(current, options.mode);
65519
+ await this.call("putObject", path, options, () => this.transport.putObject({
65520
+ Bucket: this.bucket,
65521
+ Key: this.key(path),
65522
+ Body: body2,
65523
+ ...current ? { IfMatch: this.etag(current, path) } : { IfNoneMatch: "*" },
65524
+ ...metadata ? { Metadata: metadata } : {}
65525
+ }, this.requestOptions(options)));
65526
+ return;
65527
+ }
65528
+ const controller = new AbortController();
65529
+ const signalScope = options.signal ? composeAbortSignals([options.signal, controller.signal]) : void 0;
65530
+ const signal = signalScope?.signal ?? controller.signal;
65531
+ let finished = false;
65532
+ const body = (async function* () {
65533
+ let total = 0;
65534
+ for await (const chunk of readBytes(source, signal)) {
65535
+ if (chunk.length > this.maxStreamBytes - total)
65536
+ fail2("EFBIG", "writeStream", path);
65537
+ total += chunk.length;
65538
+ for (let offset = 0; offset < chunk.length; offset += 64 * 1024) {
65539
+ this.checkAbort({ signal }, "writeStream", path);
65540
+ yield new Uint8Array(chunk.subarray(offset, offset + 64 * 1024));
65541
+ }
65542
+ }
65543
+ finished = true;
65544
+ }).call(this);
65545
+ try {
65546
+ const metadata = this.writeMetadata(info3?.metadata, options.mode);
65547
+ await this.call("putObject", path, options, () => this.transport.putObjectStream({
65548
+ Bucket: this.bucket,
65549
+ Key: this.key(path),
65550
+ Body: body,
65551
+ ...exclusive ? { IfNoneMatch: "*" } : {},
65552
+ ...metadata === void 0 ? {} : { Metadata: metadata }
65553
+ }, { abortSignal: signal }), exclusive ? "EEXIST" : "EAGAIN");
65554
+ if (!finished)
65555
+ fail2("EIO", "writeStream", path, "transport completed without consuming the request body");
65556
+ } finally {
65557
+ controller.abort();
65558
+ signalScope?.dispose();
65559
+ this.dispose(body);
65560
+ }
65561
+ }
65562
+ };
65563
+ var s3Comparison = S3FileSystem.prototype.compareEntry;
65564
+
64204
65565
  // src/sharp.ts
64205
65566
  function inferTypedArrayDepth(input) {
64206
65567
  if (!input || !ArrayBuffer.isView(input)) return void 0;