@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.
- package/README.md +32 -17
- package/dist/image-ast/index.browser.js +1384 -23
- package/dist/image-ast/index.js +1384 -23
- package/dist/mp4-ast/types.d.ts +1 -0
- package/dist/office-package/zip.d.ts +2 -0
- package/dist/office-package/zip.js +1 -1
- package/dist/pdf-ast/index.js +1 -1
- package/dist/safe-bash/chunks/{chunk-IUTD5FH5.js → chunk-46UISJCK.js} +1 -6
- package/dist/safe-bash/chunks/chunk-4SEW2Q6H.js +26 -0
- package/dist/safe-bash/chunks/{chunk-AKC46AF6.js → chunk-7YSRXFEG.js} +7 -40
- package/dist/safe-bash/chunks/{chunk-KTGR4U57.js → chunk-BHJE5LPZ.js} +1 -2
- package/dist/safe-bash/chunks/{chunk-TRVGCN3U.js → chunk-HHW7MGS2.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-ZNAFMYIA.js → chunk-I7L3G3NX.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-KMH2DF3I.js → chunk-JJSTTIEZ.js} +6 -1
- package/dist/safe-bash/chunks/{chunk-6IBTC4YL.js → chunk-JTLSUJ7V.js} +57 -20
- package/dist/safe-bash/chunks/chunk-K2VCOJ2B.js +111 -0
- package/dist/safe-bash/chunks/chunk-K4YMYFRJ.js +9802 -0
- package/dist/safe-bash/chunks/{chunk-SPYL72GN.js → chunk-KW24TAIU.js} +446 -5519
- package/dist/safe-bash/chunks/{chunk-ENR3HB2B.js → chunk-NLAW7KDI.js} +0 -1
- package/dist/safe-bash/chunks/{chunk-B3DDEDH2.js → chunk-PPYM75Z3.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-NX2SQVON.js → chunk-RKKRJ54E.js} +19 -7
- package/dist/safe-bash/chunks/{chunk-WUNK5NXJ.js → chunk-RMWLWH7Q.js} +870 -953
- package/dist/safe-bash/chunks/{chunk-JSVX4VIA.js → chunk-TFGRKY43.js} +2 -1
- package/dist/safe-bash/chunks/{chunk-T5KKDMYB.js → chunk-TYD7EVUJ.js} +6 -0
- package/dist/safe-bash/chunks/{csvkit-W2UEKH6P.js → csvkit-QGP3GAOB.js} +1 -1
- package/dist/safe-bash/chunks/{ffmpeg-42CGASMV.js → ffmpeg-JTVH26MK.js} +1 -1
- package/dist/safe-bash/chunks/{gh-26GYLH6D.js → gh-I7QX7N5C.js} +1 -1
- package/dist/safe-bash/chunks/{git-YREKMUVD.js → git-MA7NKYVP.js} +1 -1
- package/dist/safe-bash/chunks/{imagemagick-3YIX4XO2.js → imagemagick-Y4NPWX2Q.js} +1 -1
- package/dist/safe-bash/chunks/{implementation-E3YMKU3Z.js → implementation-BWDKOVQJ.js} +1 -1
- package/dist/safe-bash/chunks/mmdc-44PELHDG.js +118 -0
- package/dist/safe-bash/chunks/{pdfimages-UE2UISP2.js → pdfimages-635TRW4Q.js} +1 -1
- package/dist/safe-bash/chunks/{pdfinfo-RGARKLI5.js → pdfinfo-FSDAA2KY.js} +3 -11
- package/dist/safe-bash/chunks/{pdftk-JY3WVCCC.js → pdftk-GQ5UH3VG.js} +1 -1
- package/dist/safe-bash/chunks/{pdftoppm-GPD3BMPY.js → pdftoppm-YTXQCAYT.js} +1 -1
- package/dist/safe-bash/chunks/{pdftotext-K7GQ2QJZ.js → pdftotext-CVA2G7FY.js} +1 -1
- package/dist/safe-bash/chunks/{qpdf-F4U7WUSU.js → qpdf-HZMIFG4A.js} +1 -1
- package/dist/safe-bash/chunks/{sips-RWENS7X5.js → sips-E7UBDP33.js} +1 -1
- package/dist/safe-bash/chunks/{soffice-IT6W2C5F.js → soffice-ELASUWUK.js} +1 -1
- package/dist/safe-bash/chunks/{wkhtmltopdf-JYNDAHIZ.js → wkhtmltopdf-EPO6YCMG.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-2FGJYFWZ.js +44 -0
- package/dist/safe-bash/command-chunks/chunk-2H4JTFIL.js +53 -0
- package/dist/safe-bash/command-chunks/{chunk-LLCXZKZ6.js → chunk-2QHG43WJ.js} +2 -2
- package/dist/safe-bash/command-chunks/chunk-364TMWBT.js +946 -0
- package/dist/safe-bash/command-chunks/{chunk-EIVW3X3N.js → chunk-3DT2YOGW.js} +11 -6
- package/dist/safe-bash/command-chunks/chunk-3E2OIS2J.js +7037 -0
- package/dist/safe-bash/command-chunks/{chunk-AIRGA2SU.js → chunk-3HXDA5PT.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-3LSOYLNV.js +1091 -0
- package/dist/safe-bash/command-chunks/chunk-4B7Y7S6E.js +61 -0
- package/dist/safe-bash/command-chunks/{chunk-HRLIAMXC.js → chunk-4C6QI5BQ.js} +3 -2
- package/dist/safe-bash/command-chunks/chunk-4ZHMW6F5.js +104 -0
- package/dist/safe-bash/command-chunks/{chunk-4ZALPDBV.js → chunk-53P53XFM.js} +2 -2
- package/dist/safe-bash/command-chunks/chunk-5LSGEIZY.js +379 -0
- package/dist/safe-bash/command-chunks/{chunk-MKQVQMXO.js → chunk-5LU4UCBR.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-5T7CRJHW.js +560 -0
- package/dist/safe-bash/command-chunks/chunk-5TBUOBDE.js +346 -0
- package/dist/safe-bash/command-chunks/chunk-5XY4DTNG.js +34 -0
- package/dist/safe-bash/command-chunks/chunk-5ZMZ573Q.js +140 -0
- package/dist/safe-bash/command-chunks/{chunk-OPUJSTHS.js → chunk-67IQF5GC.js} +200 -66
- package/dist/safe-bash/command-chunks/chunk-67QKREJK.js +347 -0
- package/dist/safe-bash/command-chunks/chunk-6EPHJGGF.js +23 -0
- package/dist/safe-bash/command-chunks/chunk-6F4XCVON.js +266 -0
- package/dist/safe-bash/command-chunks/{chunk-ESMCX3YV.js → chunk-6HMX4CQS.js} +669 -130
- package/dist/safe-bash/command-chunks/chunk-7K6JYKPJ.js +422 -0
- package/dist/safe-bash/command-chunks/chunk-7N2LI2KO.js +206 -0
- package/dist/safe-bash/command-chunks/chunk-7RGB363W.js +362 -0
- package/dist/safe-bash/command-chunks/{pptx-GBPNWNEP-7EQEVXV5.js → chunk-AI5JAXQF.js} +34820 -18029
- package/dist/safe-bash/command-chunks/chunk-AMO3THU4.js +105 -0
- package/dist/safe-bash/command-chunks/chunk-BAGCY35S.js +231 -0
- package/dist/safe-bash/command-chunks/chunk-BAXU7B5Z.js +101 -0
- package/dist/safe-bash/command-chunks/{chunk-KMCZ6P4O.js → chunk-BKCNF5U3.js} +68 -7
- package/dist/safe-bash/command-chunks/chunk-BNOU5YQS.js +182 -0
- package/dist/safe-bash/command-chunks/chunk-C7I25AAL.js +25 -0
- package/dist/safe-bash/command-chunks/chunk-CKXV2CLD.js +65 -0
- package/dist/safe-bash/command-chunks/chunk-CQ5YGOGB.js +150 -0
- package/dist/safe-bash/command-chunks/{chunk-I3K5RYU4.js → chunk-D4OP2BR3.js} +72 -24
- package/dist/safe-bash/command-chunks/chunk-DB453IE6.js +122 -0
- package/dist/safe-bash/command-chunks/chunk-DOKKNRRM.js +87 -0
- package/dist/safe-bash/command-chunks/{chunk-2PX5B7T5.js → chunk-DQAVUDDX.js} +2 -2
- package/dist/safe-bash/command-chunks/chunk-DT7BCTWY.js +249 -0
- package/dist/safe-bash/command-chunks/chunk-E2LB7FRT.js +42 -0
- package/dist/safe-bash/command-chunks/chunk-EK6YNAXT.js +343 -0
- package/dist/safe-bash/command-chunks/chunk-EQ4HV54N.js +22 -0
- package/dist/safe-bash/command-chunks/chunk-ERYJLO6G.js +293 -0
- package/dist/safe-bash/command-chunks/{chunk-4ONEXMD3.js → chunk-EUSPTFAX.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-FKKB5X5V.js +97 -0
- package/dist/safe-bash/command-chunks/chunk-FXELCPFX.js +195 -0
- package/dist/safe-bash/command-chunks/{chunk-JCNNOMBV.js → chunk-GI4CJED2.js} +3 -2
- package/dist/safe-bash/command-chunks/{chunk-CU5RLO62.js → chunk-GLOZX57Y.js} +92 -18
- package/dist/safe-bash/command-chunks/chunk-GMIHJYDG.js +331 -0
- package/dist/safe-bash/command-chunks/chunk-H622NS6Z.js +11 -0
- package/dist/safe-bash/command-chunks/{chunk-UI32HWGS.js → chunk-HMOZ6XVJ.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-AVSPNLWV.js → chunk-I237SNW5.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-ZS3QPNUL.js → chunk-IR2BY7EL.js} +21 -6
- package/dist/safe-bash/command-chunks/chunk-IYPAQ7PH.js +42 -0
- package/dist/safe-bash/command-chunks/chunk-JN7WIP6S.js +94 -0
- package/dist/safe-bash/command-chunks/chunk-JNZ3CVAE.js +147 -0
- package/dist/safe-bash/command-chunks/{chunk-HLBX5IRS.js → chunk-JQ74HC37.js} +24 -32
- package/dist/safe-bash/command-chunks/chunk-KFVV7ZJO.js +216 -0
- package/dist/safe-bash/command-chunks/{chunk-G4PNVO6Z.js → chunk-KP7AO66M.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-KWESKQHR.js +25 -0
- package/dist/safe-bash/command-chunks/chunk-KYSPGS33.js +41 -0
- package/dist/safe-bash/command-chunks/{chunk-C7IHMJEW.js → chunk-KZC5UWFF.js} +2 -2
- package/dist/safe-bash/command-chunks/chunk-L6DVEBW3.js +553 -0
- package/dist/safe-bash/command-chunks/chunk-LC2MFKT4.js +2489 -0
- package/dist/safe-bash/command-chunks/chunk-LE5LZNHE.js +204 -0
- package/dist/safe-bash/command-chunks/chunk-MDH5T4OS.js +41 -0
- package/dist/safe-bash/command-chunks/chunk-MM6HU6CX.js +20 -0
- package/dist/safe-bash/command-chunks/{chunk-MYJAZ3U2.js → chunk-MPL2466A.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-VZHRZMS7.js → chunk-NAY27PXB.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-NCD7PEWH.js +298 -0
- package/dist/safe-bash/command-chunks/chunk-NFGI5IGF.js +266 -0
- package/dist/safe-bash/command-chunks/{chunk-KVFCSLKK.js → chunk-NXEQ3ESQ.js} +6 -0
- package/dist/safe-bash/command-chunks/{chunk-3VGGYEDH.js → chunk-ORYGZYKW.js} +4 -3
- package/dist/safe-bash/command-chunks/{chunk-OLQG7ZCN.js → chunk-PEF7K3UQ.js} +136 -75
- package/dist/safe-bash/command-chunks/chunk-PII4YEZW.js +123 -0
- package/dist/safe-bash/command-chunks/{chunk-43GSSUAY.js → chunk-PJJUYO3R.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-ZT4KSS2V.js → chunk-PTT3I223.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-Q3DII3Q7.js +174 -0
- package/dist/safe-bash/command-chunks/chunk-Q3EWDEUQ.js +185 -0
- package/dist/safe-bash/command-chunks/{chunk-2FUAW6GO.js → chunk-QI7LGHJJ.js} +58 -9
- package/dist/safe-bash/command-chunks/{chunk-6BETHLXZ.js → chunk-QJAFJP2G.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-QNIMV57G.js +63 -0
- package/dist/safe-bash/command-chunks/{chunk-VVI4Z73I.js → chunk-QP4R6GLA.js} +5 -1
- package/dist/safe-bash/command-chunks/{chunk-LPORMIZS.js → chunk-QWIDNAAK.js} +8 -8
- package/dist/safe-bash/command-chunks/chunk-RVLO4DYT.js +35 -0
- package/dist/safe-bash/command-chunks/{chunk-X2YQLGKS.js → chunk-SAMH7SQE.js} +4 -4
- package/dist/safe-bash/command-chunks/chunk-SEM36PG5.js +11 -0
- package/dist/safe-bash/command-chunks/chunk-STC3LEWJ.js +634 -0
- package/dist/safe-bash/command-chunks/chunk-SVULUDOP.js +331 -0
- package/dist/safe-bash/command-chunks/chunk-TEVJJPTC.js +1392 -0
- package/dist/safe-bash/command-chunks/{chunk-ZXKW7SJ2.js → chunk-TYCGMRLM.js} +2 -2
- package/dist/safe-bash/command-chunks/chunk-UG7SMZFF.js +178 -0
- package/dist/safe-bash/command-chunks/{chunk-YZ5SVZFD.js → chunk-UMDIOL3O.js} +3 -3
- package/dist/safe-bash/command-chunks/chunk-UXSR5BZH.js +136 -0
- package/dist/safe-bash/command-chunks/chunk-V6BEDRMQ.js +112 -0
- package/dist/safe-bash/command-chunks/chunk-V6MSPQLA.js +362 -0
- package/dist/safe-bash/command-chunks/{chunk-J4PEQWSF.js → chunk-VGG2DL5Q.js} +0 -1
- package/dist/safe-bash/command-chunks/{chunk-SG424QWS.js → chunk-VL67NWNS.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-WB5SVIG7.js +1034 -0
- package/dist/safe-bash/command-chunks/{src-UJOWAS2S.js → chunk-WD3ERGRY.js} +77 -277
- package/dist/safe-bash/command-chunks/{chunk-YFSDDFGV.js → chunk-WH627NJL.js} +446 -53
- package/dist/safe-bash/command-chunks/chunk-WNE7FPVR.js +236 -0
- package/dist/safe-bash/command-chunks/{chunk-UKS2XJZI.js → chunk-WPYIOKE3.js} +4 -4
- package/dist/safe-bash/command-chunks/chunk-XETLEHZP.js +1227 -0
- package/dist/safe-bash/command-chunks/chunk-XIIBTGC5.js +580 -0
- package/dist/safe-bash/command-chunks/chunk-XJXU3VVH.js +737 -0
- package/dist/safe-bash/command-chunks/chunk-Y5INTD6S.js +220 -0
- package/dist/safe-bash/command-chunks/{chunk-5ZSM4UFN.js → chunk-YGC6OS5O.js} +3 -56
- package/dist/safe-bash/command-chunks/chunk-YJDV76GL.js +262 -0
- package/dist/safe-bash/command-chunks/chunk-YOF7R4OY.js +80 -0
- package/dist/safe-bash/command-chunks/chunk-Z7RVSD5K.js +594 -0
- package/dist/safe-bash/command-chunks/chunk-ZHUWOUWB.js +618 -0
- package/dist/safe-bash/command-chunks/{model-store-L35QTZMJ.js → model-store-WPKMRPV4.js} +2 -2
- package/dist/safe-bash/command-chunks/pptx-7G52EJ6L-4JACH5FB.js +625 -0
- package/dist/safe-bash/command-chunks/python-worker-source-TYOFJMCW.js +4 -0
- package/dist/safe-bash/command-chunks/src-ICMQISAA.js +501 -0
- package/dist/safe-bash/commands/archive/create.d.ts +1 -17
- package/dist/safe-bash/commands/archive/create.js +1 -252
- package/dist/safe-bash/commands/archive/extract.d.ts +1 -11
- package/dist/safe-bash/commands/archive/extract.js +1 -640
- package/dist/safe-bash/commands/archive/format.d.ts +1 -32
- package/dist/safe-bash/commands/archive/format.js +1 -225
- package/dist/safe-bash/commands/archive/index.d.ts +5 -10
- package/dist/safe-bash/commands/archive/index.js +6 -931
- package/dist/safe-bash/commands/archive/listing.d.ts +1 -2
- package/dist/safe-bash/commands/archive/listing.js +1 -21
- package/dist/safe-bash/commands/archive/modes.d.ts +1 -5
- package/dist/safe-bash/commands/archive/modes.js +1 -182
- package/dist/safe-bash/commands/archive/options.d.ts +1 -53
- package/dist/safe-bash/commands/archive/options.js +1 -462
- package/dist/safe-bash/commands/archive/stream.d.ts +1 -22
- package/dist/safe-bash/commands/archive/stream.js +1 -188
- package/dist/safe-bash/commands/archive/transform.d.ts +1 -16
- package/dist/safe-bash/commands/archive/transform.js +1 -85
- package/dist/safe-bash/commands/archive/unzip/arguments.d.ts +1 -53
- package/dist/safe-bash/commands/archive/unzip/arguments.js +1 -322
- package/dist/safe-bash/commands/archive/unzip/safety.d.ts +1 -32
- package/dist/safe-bash/commands/archive/unzip/safety.js +1 -295
- package/dist/safe-bash/commands/archive/unzip.d.ts +1 -3
- package/dist/safe-bash/commands/archive/unzip.js +1 -398
- package/dist/safe-bash/commands/archive/zip/aes.d.ts +1 -17
- package/dist/safe-bash/commands/archive/zip/aes.js +1 -156
- package/dist/safe-bash/commands/archive/zip/comments.d.ts +1 -17
- package/dist/safe-bash/commands/archive/zip/comments.js +1 -83
- package/dist/safe-bash/commands/archive/zip/crc.d.ts +1 -1
- package/dist/safe-bash/commands/archive/zip/crc.js +1 -1
- package/dist/safe-bash/commands/archive/zip/crypto.d.ts +1 -19
- package/dist/safe-bash/commands/archive/zip/crypto.js +1 -118
- package/dist/safe-bash/commands/archive/zip/dates.d.ts +1 -4
- package/dist/safe-bash/commands/archive/zip/dates.js +1 -66
- package/dist/safe-bash/commands/archive/zip/environment.d.ts +1 -2
- package/dist/safe-bash/commands/archive/zip/environment.js +1 -62
- package/dist/safe-bash/commands/archive/zip/grow.d.ts +1 -3
- package/dist/safe-bash/commands/archive/zip/grow.js +1 -2
- package/dist/safe-bash/commands/archive/zip/help.d.ts +1 -4
- package/dist/safe-bash/commands/archive/zip/help.js +1 -182
- package/dist/safe-bash/commands/archive/zip/line-endings.d.ts +1 -2
- package/dist/safe-bash/commands/archive/zip/line-endings.js +1 -194
- package/dist/safe-bash/commands/archive/zip/log.d.ts +1 -22
- package/dist/safe-bash/commands/archive/zip/log.js +1 -159
- package/dist/safe-bash/commands/archive/zip/lzma.d.ts +1 -9
- package/dist/safe-bash/commands/archive/zip/lzma.js +1 -40
- package/dist/safe-bash/commands/archive/zip/move.d.ts +1 -11
- package/dist/safe-bash/commands/archive/zip/move.js +1 -59
- package/dist/safe-bash/commands/archive/zip/names.d.ts +1 -2
- package/dist/safe-bash/commands/archive/zip/names.js +1 -33
- package/dist/safe-bash/commands/archive/zip/options.d.ts +1 -13
- package/dist/safe-bash/commands/archive/zip/options.js +1 -124
- package/dist/safe-bash/commands/archive/zip/repair.d.ts +1 -10
- package/dist/safe-bash/commands/archive/zip/repair.js +1 -392
- package/dist/safe-bash/commands/archive/zip/safety.d.ts +1 -54
- package/dist/safe-bash/commands/archive/zip/safety.js +1 -360
- package/dist/safe-bash/commands/archive/zip/sfx.d.ts +1 -4
- package/dist/safe-bash/commands/archive/zip/sfx.js +1 -52
- package/dist/safe-bash/commands/archive/zip/test-command.d.ts +1 -5
- package/dist/safe-bash/commands/archive/zip/test-command.js +1 -101
- package/dist/safe-bash/commands/archive/zip/volumes.d.ts +1 -21
- package/dist/safe-bash/commands/archive/zip/volumes.js +1 -281
- package/dist/safe-bash/commands/archive/zip/zip64.d.ts +1 -30
- package/dist/safe-bash/commands/archive/zip/zip64.js +1 -227
- package/dist/safe-bash/commands/archive/zip-format.d.ts +1 -68
- package/dist/safe-bash/commands/archive/zip-format.js +1 -1075
- package/dist/safe-bash/commands/archive/zip.d.ts +1 -3
- package/dist/safe-bash/commands/archive/zip.js +1 -1523
- package/dist/safe-bash/commands/awk/index.d.ts +2 -0
- package/dist/safe-bash/commands/awk/index.js +2 -0
- package/dist/safe-bash/commands/bytes/compression/index.js +2 -1
- package/dist/safe-bash/commands/curl/index.d.ts +2 -0
- package/dist/safe-bash/commands/curl/index.js +2 -0
- package/dist/safe-bash/commands/diff/index.d.ts +2 -0
- package/dist/safe-bash/commands/diff/index.js +2 -0
- package/dist/safe-bash/commands/diff-patch/diff-format.d.ts +1 -10
- package/dist/safe-bash/commands/diff-patch/diff-format.js +1 -237
- package/dist/safe-bash/commands/diff-patch/diff-options.d.ts +1 -38
- package/dist/safe-bash/commands/diff-patch/diff-options.js +1 -261
- package/dist/safe-bash/commands/diff-patch/diff-output.d.ts +1 -20
- package/dist/safe-bash/commands/diff-patch/diff-output.js +1 -290
- package/dist/safe-bash/commands/diff-patch/diff.d.ts +1 -2
- package/dist/safe-bash/commands/diff-patch/diff.js +1 -656
- package/dist/safe-bash/commands/diff-patch/index.d.ts +4 -5
- package/dist/safe-bash/commands/diff-patch/index.js +8 -333
- package/dist/safe-bash/commands/diff-patch/patch-envelope.d.ts +1 -2
- package/dist/safe-bash/commands/diff-patch/patch-envelope.js +1 -63
- package/dist/safe-bash/commands/diff-patch/patch-formats.d.ts +1 -7
- package/dist/safe-bash/commands/diff-patch/patch-formats.js +1 -264
- package/dist/safe-bash/commands/diff-patch/patch-gnu-paths.d.ts +1 -41
- package/dist/safe-bash/commands/diff-patch/patch-gnu-paths.js +1 -263
- package/dist/safe-bash/commands/diff-patch/patch-gnu-reject.d.ts +1 -3
- package/dist/safe-bash/commands/diff-patch/patch-gnu-reject.js +1 -100
- package/dist/safe-bash/commands/diff-patch/patch-path.d.ts +1 -3
- package/dist/safe-bash/commands/diff-patch/patch-path.js +1 -91
- package/dist/safe-bash/commands/diff-patch/patch-publication.d.ts +1 -13
- package/dist/safe-bash/commands/diff-patch/patch-publication.js +1 -107
- package/dist/safe-bash/commands/diff-patch/patch.d.ts +1 -2
- package/dist/safe-bash/commands/diff-patch/patch.js +1 -653
- package/dist/safe-bash/commands/diff-patch/shared.d.ts +1 -53
- package/dist/safe-bash/commands/diff-patch/shared.js +1 -267
- package/dist/safe-bash/commands/diff-patch/unified.d.ts +1 -52
- package/dist/safe-bash/commands/diff-patch/unified.js +1 -385
- package/dist/safe-bash/commands/directory-admission.d.ts +1 -3
- package/dist/safe-bash/commands/directory-admission.js +1 -26
- package/dist/safe-bash/commands/find/index.d.ts +2 -0
- package/dist/safe-bash/commands/find/index.js +2 -0
- package/dist/safe-bash/commands/find-format.d.ts +1 -20
- package/dist/safe-bash/commands/find-format.js +1 -161
- package/dist/safe-bash/commands/find.d.ts +2 -18
- package/dist/safe-bash/commands/find.js +2 -1236
- package/dist/safe-bash/commands/gzip/index.d.ts +2 -0
- package/dist/safe-bash/commands/gzip/index.js +2 -0
- package/dist/safe-bash/commands/line-endings/index.browser.js +1 -1
- package/dist/safe-bash/commands/line-endings/index.d.ts +1 -1
- package/dist/safe-bash/commands/line-endings/index.js +1 -262
- package/dist/safe-bash/commands/llm/index.browser.js +3 -1
- package/dist/safe-bash/commands/mdq/index.browser.js +2 -2
- package/dist/safe-bash/commands/metadata/chmod.d.ts +1 -4
- package/dist/safe-bash/commands/metadata/chmod.js +2 -63
- package/dist/safe-bash/commands/network/aggregate.d.ts +1 -4
- package/dist/safe-bash/commands/network/aggregate.js +1 -23
- package/dist/safe-bash/commands/network/args.d.ts +1 -68
- package/dist/safe-bash/commands/network/args.js +1 -321
- package/dist/safe-bash/commands/network/authorizer.d.ts +1 -6
- package/dist/safe-bash/commands/network/authorizer.js +1 -33
- package/dist/safe-bash/commands/network/body.d.ts +1 -9
- package/dist/safe-bash/commands/network/body.js +1 -393
- package/dist/safe-bash/commands/network/curl.d.ts +3 -13
- package/dist/safe-bash/commands/network/curl.js +6 -693
- package/dist/safe-bash/commands/network/deadline.d.ts +1 -2
- package/dist/safe-bash/commands/network/deadline.js +1 -14
- package/dist/safe-bash/commands/network/decode.d.ts +1 -2
- package/dist/safe-bash/commands/network/decode.js +1 -79
- package/dist/safe-bash/commands/network/fetch-transport.d.ts +1 -7
- package/dist/safe-bash/commands/network/fetch-transport.js +1 -94
- package/dist/safe-bash/commands/network/form-content-type.d.ts +1 -5
- package/dist/safe-bash/commands/network/form-content-type.js +1 -63
- package/dist/safe-bash/commands/network/form-headers.d.ts +1 -2
- package/dist/safe-bash/commands/network/form-headers.js +1 -35
- package/dist/safe-bash/commands/network/glob.d.ts +1 -7
- package/dist/safe-bash/commands/network/glob.js +1 -134
- package/dist/safe-bash/commands/network/index.browser.js +2 -10
- package/dist/safe-bash/commands/network/input.d.ts +1 -5
- package/dist/safe-bash/commands/network/input.js +1 -276
- package/dist/safe-bash/commands/network/output.d.ts +1 -6
- package/dist/safe-bash/commands/network/output.js +1 -131
- package/dist/safe-bash/commands/network/private-address.d.ts +1 -1
- package/dist/safe-bash/commands/network/private-address.js +1 -44
- package/dist/safe-bash/commands/network/shared.d.ts +1 -14
- package/dist/safe-bash/commands/network/shared.js +1 -71
- package/dist/safe-bash/commands/network/types.d.ts +1 -37
- package/dist/safe-bash/commands/network/types.js +1 -31
- package/dist/safe-bash/commands/network/url.d.ts +1 -2
- package/dist/safe-bash/commands/network/url.js +1 -30
- package/dist/safe-bash/commands/network/wget.d.ts +3 -3
- package/dist/safe-bash/commands/network/wget.js +10 -331
- package/dist/safe-bash/commands/node/index.browser.js +4 -5
- package/dist/safe-bash/commands/node/index.d.ts +3 -3
- package/dist/safe-bash/commands/node/index.js +5 -0
- package/dist/safe-bash/commands/node/safejs.d.ts +3 -3
- package/dist/safe-bash/commands/node/safejs.js +6 -1
- package/dist/safe-bash/commands/node/types.d.ts +1 -1
- package/dist/safe-bash/commands/node/unconfigured.d.ts +3 -0
- package/dist/safe-bash/commands/node/unconfigured.js +10 -0
- package/dist/safe-bash/commands/op/index.browser.js +2 -2
- package/dist/safe-bash/commands/patch/index.d.ts +2 -0
- package/dist/safe-bash/commands/patch/index.js +2 -0
- package/dist/safe-bash/commands/pdfinfo/index.js +2 -1
- package/dist/safe-bash/commands/predicates.js +3 -4
- package/dist/safe-bash/commands/python/index.browser.js +5 -5
- package/dist/safe-bash/commands/python/llm-capability.d.ts +1 -0
- package/dist/safe-bash/commands/python/llm-capability.js +27 -7
- package/dist/safe-bash/commands/python/llm-module.js +11 -0
- package/dist/safe-bash/commands/python/manifest.d.ts +1 -0
- package/dist/safe-bash/commands/python/manifest.js +9 -5
- package/dist/safe-bash/commands/python/provisioning.js +1 -1
- package/dist/safe-bash/commands/regex-execution/matching.js +1 -2
- package/dist/safe-bash/commands/regex-execution/public.browser.js +5 -5
- package/dist/safe-bash/commands/search/index.d.ts +1 -1
- package/dist/safe-bash/commands/search/index.js +1 -347
- package/dist/safe-bash/commands/search/portable.d.ts +2 -2
- package/dist/safe-bash/commands/search/portable.js +3 -2
- package/dist/safe-bash/commands/sed/index.d.ts +2 -0
- package/dist/safe-bash/commands/sed/index.js +2 -0
- package/dist/safe-bash/commands/tar/index.d.ts +2 -0
- package/dist/safe-bash/commands/tar/index.js +2 -0
- package/dist/safe-bash/commands/text-programs/awk-inspection.d.ts +1 -19
- package/dist/safe-bash/commands/text-programs/awk-inspection.js +1 -50
- package/dist/safe-bash/commands/text-programs/awk-pipes.d.ts +2 -0
- package/dist/safe-bash/commands/text-programs/awk-pipes.js +2 -0
- package/dist/safe-bash/commands/text-programs/awk-pretty.d.ts +1 -3
- package/dist/safe-bash/commands/text-programs/awk-pretty.js +1 -197
- package/dist/safe-bash/commands/text-programs/awk-quote.d.ts +1 -2
- package/dist/safe-bash/commands/text-programs/awk-quote.js +1 -15
- package/dist/safe-bash/commands/text-programs/awk-reader.d.ts +1 -42
- package/dist/safe-bash/commands/text-programs/awk-reader.js +1 -449
- package/dist/safe-bash/commands/text-programs/awk-retention.d.ts +1 -13
- package/dist/safe-bash/commands/text-programs/awk-retention.js +1 -51
- package/dist/safe-bash/commands/text-programs/awk-runtime.d.ts +1 -150
- package/dist/safe-bash/commands/text-programs/awk-runtime.js +1 -2627
- package/dist/safe-bash/commands/text-programs/awk-syntax.d.ts +1 -142
- package/dist/safe-bash/commands/text-programs/awk-syntax.js +1 -509
- package/dist/safe-bash/commands/text-programs/awk-values.d.ts +1 -32
- package/dist/safe-bash/commands/text-programs/awk-values.js +1 -386
- package/dist/safe-bash/commands/text-programs/awk.d.ts +1 -3
- package/dist/safe-bash/commands/text-programs/awk.js +1 -361
- package/dist/safe-bash/commands/text-programs/inplace.d.ts +1 -16
- package/dist/safe-bash/commands/text-programs/inplace.js +1 -155
- package/dist/safe-bash/commands/text-programs/sed.d.ts +1 -3
- package/dist/safe-bash/commands/text-programs/sed.js +1 -1647
- package/dist/safe-bash/commands/unzip/index.d.ts +2 -0
- package/dist/safe-bash/commands/unzip/index.js +2 -0
- package/dist/safe-bash/commands/wget/index.d.ts +2 -0
- package/dist/safe-bash/commands/wget/index.js +2 -0
- package/dist/safe-bash/commands/yq/index.browser.js +7 -2
- package/dist/safe-bash/commands/yq/index.d.ts +1 -6
- package/dist/safe-bash/commands/yq/index.js +1 -36
- package/dist/safe-bash/commands/zip/index.d.ts +2 -0
- package/dist/safe-bash/commands/zip/index.js +2 -0
- package/dist/safe-bash/core.browser.js +1 -1
- package/dist/safe-bash/core.d.ts +8 -1
- package/dist/safe-bash/core.js +7 -1
- package/dist/safe-bash/fs/s3/index.d.ts +2 -2
- package/dist/safe-bash/fs/s3/index.js +1 -1
- package/dist/safe-bash/full-core.browser.js +254 -223
- package/dist/safe-bash/jobs.browser.js +2 -2
- package/dist/safe-bash/lazy-mmdc.d.ts +6 -0
- package/dist/safe-bash/lazy-mmdc.js +23 -0
- package/dist/safe-bash/opt-in/commands/yq/mike.js +6 -13
- package/dist/safe-bash/opt-in/commands/yq/native-work.d.ts +1 -0
- package/dist/safe-bash/opt-in/commands/yq/native-work.js +17 -0
- package/dist/safe-bash/optional-host.browser.js +8 -4
- package/dist/safe-bash/optional-host.d.ts +1 -1
- package/dist/safe-bash/optional-host.js +1 -1
- package/dist/safe-bash/playwright/ability-execution.js +3 -2
- package/dist/safe-bash/playwright/adapter.js +1 -1
- package/dist/safe-bash/playwright/controller.js +9 -8
- package/dist/safe-bash/playwright/modal-capabilities.js +2 -1
- package/dist/safe-bash/playwright/native-json-snapshot.js +4 -3
- package/dist/safe-bash/playwright/native-snapshot.js +5 -4
- package/dist/safe-bash/playwright/open-options.js +3 -3
- package/dist/safe-bash/playwright/resource-limit.d.ts +2 -0
- package/dist/safe-bash/playwright/resource-limit.js +4 -0
- package/dist/safe-bash/playwright/session-configuration.js +8 -3
- package/dist/safe-bash/playwright/snapshot.js +8 -7
- package/dist/safe-bash/playwright/standard-capabilities.js +5 -4
- package/dist/safe-bash/plugins/index.browser.js +14 -16
- package/dist/safe-bash/registry-entry.browser.js +14 -16
- package/dist/safe-bash/shell/arrays/bindings.d.ts +3 -5
- package/dist/safe-bash/shell/arrays/bindings.js +6 -2
- package/dist/safe-bash/shell/input.js +16 -14
- package/dist/safe-bash/shell/runtime.d.ts +3 -0
- package/dist/safe-bash/shell/runtime.js +316 -64
- package/dist/safe-bash/shell/types.d.ts +2 -0
- package/dist/safe-bash/shell/value-state.js +17 -2
- package/dist/safe-bash/shell/worker-limits.js +1 -0
- package/dist/safe-bash/shell-entry.browser.js +13 -15
- package/dist/safe-bash/trap.browser.d.ts +3 -0
- package/dist/safe-bash/trap.browser.js +14 -0
- package/dist/safe-bash/worker/host.js +1 -1
- package/dist/safe-bash-command-apply-patch/apply.js +2 -2
- package/dist/safe-bash-command-apply-patch/index.js +3 -3
- package/dist/safe-bash-command-awk/LICENSE +21 -0
- package/dist/safe-bash-command-awk/awk-inspection.d.ts +19 -0
- package/dist/safe-bash-command-awk/awk-inspection.js +9 -0
- package/dist/safe-bash-command-awk/awk-pipes.d.ts +19 -0
- package/dist/safe-bash-command-awk/awk-pipes.js +8 -0
- package/dist/safe-bash-command-awk/awk-pretty.d.ts +3 -0
- package/dist/safe-bash-command-awk/awk-pretty.js +8 -0
- package/dist/safe-bash-command-awk/awk-quote.d.ts +2 -0
- package/dist/safe-bash-command-awk/awk-quote.js +7 -0
- package/dist/safe-bash-command-awk/awk-reader.d.ts +42 -0
- package/dist/safe-bash-command-awk/awk-reader.js +9 -0
- package/dist/safe-bash-command-awk/awk-retention.d.ts +13 -0
- package/dist/safe-bash-command-awk/awk-retention.js +7 -0
- package/dist/safe-bash-command-awk/awk-runtime.d.ts +151 -0
- package/dist/safe-bash-command-awk/awk-runtime.js +11 -0
- package/dist/safe-bash-command-awk/awk-syntax.d.ts +144 -0
- package/dist/safe-bash-command-awk/awk-syntax.js +14 -0
- package/dist/safe-bash-command-awk/awk-values.d.ts +32 -0
- package/dist/safe-bash-command-awk/awk-values.js +35 -0
- package/dist/safe-bash-command-awk/awk.d.ts +3 -0
- package/dist/safe-bash-command-awk/awk.js +16 -0
- package/dist/safe-bash-command-awk/index.d.ts +7 -0
- package/dist/safe-bash-command-awk/index.js +36 -0
- package/dist/safe-bash-command-bc/index.d.ts +4 -0
- package/dist/safe-bash-command-bc/index.js +15 -176
- package/dist/safe-bash-command-column/column.js +3 -3
- package/dist/safe-bash-command-column/index.js +3 -3
- package/dist/safe-bash-command-column/layout.js +2 -2
- package/dist/safe-bash-command-csplit/command.js +2 -2
- package/dist/safe-bash-command-csplit/index.js +2 -2
- package/dist/safe-bash-command-csvkit/contracts.d.ts +1 -0
- package/dist/safe-bash-command-csvkit/csvpy-interpreter.d.ts +2 -1
- package/dist/safe-bash-command-csvkit/default-csvpy.d.ts +11 -0
- package/dist/safe-bash-command-csvkit/errors.js +22 -0
- package/dist/safe-bash-command-csvkit/index.d.ts +1 -0
- package/dist/safe-bash-command-csvkit/index.js +172 -4
- package/dist/safe-bash-command-csvkit/python-worker-browser.d.ts +3 -0
- package/dist/safe-bash-command-csvkit/python-worker-browser.js +16 -0
- package/dist/safe-bash-command-csvkit/python-worker-contract.d.ts +20 -0
- package/dist/safe-bash-command-csvkit/python-worker-node.d.ts +3 -0
- package/dist/safe-bash-command-csvkit/python-worker-node.js +9 -0
- package/dist/safe-bash-command-csvkit/runtime.d.ts +1 -0
- package/dist/safe-bash-command-curl/LICENSE +21 -0
- package/dist/safe-bash-command-curl/curl.d.ts +13 -0
- package/dist/safe-bash-command-curl/curl.js +9 -0
- package/dist/safe-bash-command-curl/index.d.ts +6 -0
- package/dist/safe-bash-command-curl/index.js +26 -0
- package/dist/safe-bash-command-diff/LICENSE +21 -0
- package/dist/safe-bash-command-diff/diff-format.d.ts +10 -0
- package/dist/safe-bash-command-diff/diff-format.js +10 -0
- package/dist/safe-bash-command-diff/diff-options.d.ts +38 -0
- package/dist/safe-bash-command-diff/diff-options.js +7 -0
- package/dist/safe-bash-command-diff/diff-output.d.ts +20 -0
- package/dist/safe-bash-command-diff/diff-output.js +19 -0
- package/dist/safe-bash-command-diff/diff.d.ts +2 -0
- package/dist/safe-bash-command-diff/diff.js +10 -0
- package/dist/safe-bash-command-diff/index.d.ts +8 -0
- package/dist/safe-bash-command-diff/index.js +34 -0
- package/dist/safe-bash-command-diff/sync.d.ts +2 -0
- package/dist/safe-bash-command-diff/sync.js +9 -0
- package/dist/safe-bash-command-diff3/index.js +5 -5
- package/dist/safe-bash-command-docx/index.d.ts +4 -4
- package/dist/safe-bash-command-docx/index.js +12 -5
- package/dist/safe-bash-command-dos2unix/index.d.ts +1 -0
- package/dist/safe-bash-command-dos2unix/index.js +225 -1
- package/dist/safe-bash-command-dos2unix/sync.d.ts +1 -0
- package/dist/safe-bash-command-exiftool/index.js +2 -2
- package/dist/safe-bash-command-factor/command.js +2 -2
- package/dist/safe-bash-command-factor/index.js +2 -2
- package/dist/safe-bash-command-ffmpeg/index.js +86 -94
- package/dist/safe-bash-command-file/index.js +3 -3
- package/dist/safe-bash-command-find/LICENSE +21 -0
- package/dist/safe-bash-command-find/find-format.d.ts +20 -0
- package/dist/safe-bash-command-find/find-format.js +9 -0
- package/dist/safe-bash-command-find/find.d.ts +18 -0
- package/dist/safe-bash-command-find/find.js +10 -0
- package/dist/safe-bash-command-find/index.d.ts +13 -0
- package/dist/safe-bash-command-find/index.js +45 -0
- package/dist/safe-bash-command-fmt/index.js +7 -4
- package/dist/safe-bash-command-git/git_rust.wasm +0 -0
- package/dist/safe-bash-command-git/index.js +5 -7
- package/dist/safe-bash-command-git/wasm.generated.js +1 -1
- package/dist/safe-bash-command-gzip/LICENSE +21 -0
- package/dist/safe-bash-command-gzip/index.d.ts +11 -0
- package/dist/safe-bash-command-gzip/index.js +94 -0
- package/dist/safe-bash-command-html-to-markdown/index.js +5 -5
- package/dist/safe-bash-command-htmlq/index.js +12 -8
- package/dist/safe-bash-command-imagemagick/index.js +22 -30
- package/dist/safe-bash-command-jq/index.js +1 -1
- package/dist/safe-bash-command-jq/jq.js +1 -1
- package/dist/safe-bash-command-llm/command.js +1 -1
- package/dist/safe-bash-command-llm/index.d.ts +1 -0
- package/dist/safe-bash-command-llm/index.js +16 -14
- package/dist/safe-bash-command-llm/openai.js +3 -3
- package/dist/safe-bash-command-llm/providers/index.js +3 -3
- package/dist/safe-bash-command-llm/providers/openai.js +3 -3
- package/dist/safe-bash-command-llm/stored-schema.d.ts +10 -0
- package/dist/safe-bash-command-mmdc/index.js +13 -604
- package/dist/safe-bash-command-mmdc/settings.d.ts +2 -0
- package/dist/safe-bash-command-mmdc/settings.js +7 -0
- package/dist/safe-bash-command-pandoc/command.js +4 -3
- package/dist/safe-bash-command-pandoc/defaults.d.ts +1 -0
- package/dist/safe-bash-command-pandoc/index.js +4 -3
- package/dist/safe-bash-command-pandoc/lua-filters.js +1 -1
- package/dist/safe-bash-command-pandoc/types.d.ts +3 -1
- package/dist/safe-bash-command-patch/LICENSE +21 -0
- package/dist/safe-bash-command-patch/index.d.ts +8 -0
- package/dist/safe-bash-command-patch/index.js +38 -0
- package/dist/safe-bash-command-patch/patch-envelope.d.ts +2 -0
- package/dist/safe-bash-command-patch/patch-envelope.js +7 -0
- package/dist/safe-bash-command-patch/patch-formats.d.ts +7 -0
- package/dist/safe-bash-command-patch/patch-formats.js +9 -0
- package/dist/safe-bash-command-patch/patch-gnu-paths.d.ts +41 -0
- package/dist/safe-bash-command-patch/patch-gnu-paths.js +26 -0
- package/dist/safe-bash-command-patch/patch-gnu-reject.d.ts +3 -0
- package/dist/safe-bash-command-patch/patch-gnu-reject.js +7 -0
- package/dist/safe-bash-command-patch/patch-path.d.ts +3 -0
- package/dist/safe-bash-command-patch/patch-path.js +11 -0
- package/dist/safe-bash-command-patch/patch-publication.d.ts +13 -0
- package/dist/safe-bash-command-patch/patch-publication.js +7 -0
- package/dist/safe-bash-command-patch/patch.d.ts +2 -0
- package/dist/safe-bash-command-patch/patch.js +14 -0
- package/dist/safe-bash-command-patch/sync.d.ts +2 -0
- package/dist/safe-bash-command-patch/sync.js +7 -0
- package/dist/safe-bash-command-patch/unified.d.ts +52 -0
- package/dist/safe-bash-command-patch/unified.js +16 -0
- package/dist/safe-bash-command-pdfimages/index.js +37 -16
- package/dist/safe-bash-command-pdfinfo/index.d.ts +0 -23
- package/dist/safe-bash-command-pdfinfo/index.js +20 -772
- package/dist/safe-bash-command-pdftk/index.js +37 -9
- package/dist/safe-bash-command-pdftoppm/index.js +50 -20
- package/dist/safe-bash-command-pdftotext/index.js +10 -2
- package/dist/safe-bash-command-pptx/index.d.ts +4 -4
- package/dist/safe-bash-command-pptx/index.js +11 -5
- package/dist/safe-bash-command-pr/command.js +2 -2
- package/dist/safe-bash-command-pr/index.js +4 -4
- package/dist/safe-bash-command-qpdf/index.js +26 -13
- package/dist/safe-bash-command-rg/index.d.ts +1 -0
- package/dist/safe-bash-command-rg/index.js +222 -1
- package/dist/safe-bash-command-rg/rg-command.js +1 -1
- package/dist/safe-bash-command-rg/sync.d.ts +1 -0
- package/dist/safe-bash-command-sed/LICENSE +21 -0
- package/dist/safe-bash-command-sed/index.d.ts +7 -0
- package/dist/safe-bash-command-sed/index.js +28 -0
- package/dist/safe-bash-command-sed/inplace.d.ts +16 -0
- package/dist/safe-bash-command-sed/inplace.js +9 -0
- package/dist/safe-bash-command-sed/sed.d.ts +3 -0
- package/dist/safe-bash-command-sed/sed.js +8 -0
- package/dist/safe-bash-command-sips/index.js +111 -35
- package/dist/safe-bash-command-soffice/index.js +4 -4
- package/dist/safe-bash-command-sqlite3/engine.d.ts +1 -2
- package/dist/safe-bash-command-sqlite3/index.js +152 -452
- package/dist/safe-bash-command-ssconvert/commands.js +1 -1
- package/dist/safe-bash-command-ssconvert/formats/ods.js +2 -2
- package/dist/safe-bash-command-ssconvert/formats/xlsx.js +3 -3
- package/dist/safe-bash-command-ssconvert/index.js +5 -5
- package/dist/safe-bash-command-tar/LICENSE +21 -0
- package/dist/safe-bash-command-tar/create.d.ts +17 -0
- package/dist/safe-bash-command-tar/create.js +14 -0
- package/dist/safe-bash-command-tar/extract.d.ts +11 -0
- package/dist/safe-bash-command-tar/extract.js +14 -0
- package/dist/safe-bash-command-tar/format.d.ts +32 -0
- package/dist/safe-bash-command-tar/format.js +19 -0
- package/dist/safe-bash-command-tar/index.d.ts +8 -0
- package/dist/safe-bash-command-tar/index.js +550 -0
- package/dist/safe-bash-command-tar/listing.d.ts +2 -0
- package/dist/safe-bash-command-tar/listing.js +7 -0
- package/dist/safe-bash-command-tar/modes.d.ts +5 -0
- package/dist/safe-bash-command-tar/modes.js +16 -0
- package/dist/safe-bash-command-tar/options.d.ts +53 -0
- package/dist/safe-bash-command-tar/options.js +10 -0
- package/dist/safe-bash-command-tar/stream.d.ts +22 -0
- package/dist/safe-bash-command-tar/stream.js +15 -0
- package/dist/safe-bash-command-tar/transform.d.ts +16 -0
- package/dist/safe-bash-command-tar/transform.js +9 -0
- package/dist/safe-bash-command-unzip/LICENSE +21 -0
- package/dist/safe-bash-command-unzip/index.d.ts +7 -0
- package/dist/safe-bash-command-unzip/index.js +39 -0
- package/dist/safe-bash-command-unzip/sync.d.ts +3 -0
- package/dist/safe-bash-command-unzip/sync.js +9 -0
- package/dist/safe-bash-command-unzip/unzip/safety.d.ts +32 -0
- package/dist/safe-bash-command-unzip/unzip/safety.js +7 -0
- package/dist/safe-bash-command-unzip/unzip.d.ts +3 -0
- package/dist/safe-bash-command-unzip/unzip.js +8 -0
- package/dist/safe-bash-command-wget/LICENSE +21 -0
- package/dist/safe-bash-command-wget/index.d.ts +6 -0
- package/dist/safe-bash-command-wget/index.js +26 -0
- package/dist/safe-bash-command-wget/wget.d.ts +3 -0
- package/dist/safe-bash-command-wget/wget.js +7 -0
- package/dist/safe-bash-command-xan/argv.d.ts +4 -1
- package/dist/safe-bash-command-xan/argv.js +1 -1
- package/dist/safe-bash-command-xan/commands.js +4 -3
- package/dist/safe-bash-command-xan/index.js +15 -14
- package/dist/safe-bash-command-xan/io.js +2 -2
- package/dist/safe-bash-command-xmllint/index.js +189 -49
- package/dist/safe-bash-command-xz/index.js +3 -2
- package/dist/safe-bash-command-xz/options.d.ts +9 -1
- package/dist/safe-bash-command-xz/options.js +3 -1
- package/dist/safe-bash-command-yq/index.d.ts +4 -11
- package/dist/safe-bash-command-yq/index.js +3367 -670
- package/dist/safe-bash-command-yq/mike.js +6 -13
- package/dist/safe-bash-command-yq/native-work.d.ts +1 -0
- package/dist/safe-bash-command-yq/native-work.js +17 -0
- package/dist/safe-bash-command-yq/query.d.ts +11 -0
- package/dist/safe-bash-command-yq/query.js +735 -0
- package/dist/safe-bash-command-zip/LICENSE +21 -0
- package/dist/safe-bash-command-zip/index.d.ts +7 -0
- package/dist/safe-bash-command-zip/index.js +38 -0
- package/dist/safe-bash-command-zip/sync.d.ts +3 -0
- package/dist/safe-bash-command-zip/sync.js +9 -0
- package/dist/safe-bash-command-zip/zip.d.ts +3 -0
- package/dist/safe-bash-command-zip/zip.js +7 -0
- package/dist/safe-bash-compression-engine/files.js +4 -4
- package/dist/safe-bash-compression-engine/index.js +2 -2
- package/dist/safe-bash-compression-engine/operand.js +6 -6
- package/dist/safe-bash-compression-engine/stream.js +2 -2
- package/dist/safe-bash-compression-engine/zstd-decode.js +1 -1
- package/dist/safe-bash-contracts/command.js +1 -1
- package/dist/safe-bash-contracts/diagnostics.js +4 -4
- package/dist/safe-bash-contracts/escaping.js +11 -11
- package/dist/safe-bash-contracts/filesystem-descriptor.js +1 -1
- package/dist/safe-bash-contracts/filesystem-output.js +8 -8
- package/dist/safe-bash-contracts/index.js +34 -34
- package/dist/safe-bash-contracts/io.js +2 -2
- package/dist/safe-bash-contracts/output.js +3 -3
- package/dist/safe-bash-diff-engine/LICENSE +21 -0
- package/dist/safe-bash-diff-engine/index.d.ts +1 -0
- package/dist/safe-bash-diff-engine/index.js +24 -0
- package/dist/safe-bash-diff-engine/shared.d.ts +53 -0
- package/dist/safe-bash-diff-engine/shared.js +19 -0
- package/dist/safe-bash-io-engine/commands/directory-admission.d.ts +3 -0
- package/dist/safe-bash-io-engine/commands/directory-admission.js +34 -0
- package/dist/safe-bash-io-engine/commands/mode-change.d.ts +4 -0
- package/dist/safe-bash-io-engine/commands/mode-change.js +60 -0
- package/dist/safe-bash-io-engine/commands/text-programs/shared.js +20 -31
- package/dist/safe-bash-io-engine/shell/pattern.js +7 -12
- package/dist/safe-bash-markdown-engine/commonmark-blocks.js +4 -4
- package/dist/safe-bash-markdown-engine/commonmark-inlines.js +4 -4
- package/dist/safe-bash-markdown-engine/commonmark-syntax.js +2 -2
- package/dist/safe-bash-markdown-engine/gfm-syntax.js +3 -3
- package/dist/safe-bash-markdown-engine/index.js +7 -7
- package/dist/safe-bash-mcp/index.browser.d.ts +6 -0
- package/dist/safe-bash-mcp/index.browser.js +1 -0
- package/dist/safe-bash-mcp/index.d.ts +12 -0
- package/dist/safe-bash-mcp/index.js +1558 -36
- package/dist/safe-bash-network-engine/LICENSE +21 -0
- package/dist/safe-bash-network-engine/aggregate.d.ts +4 -0
- package/dist/safe-bash-network-engine/aggregate.js +37 -0
- package/dist/safe-bash-network-engine/args.d.ts +68 -0
- package/dist/safe-bash-network-engine/args.js +19 -0
- package/dist/safe-bash-network-engine/authorizer.d.ts +6 -0
- package/dist/safe-bash-network-engine/authorizer.js +8 -0
- package/dist/safe-bash-network-engine/body.d.ts +9 -0
- package/dist/safe-bash-network-engine/body.js +374 -0
- package/dist/safe-bash-network-engine/deadline.d.ts +2 -0
- package/dist/safe-bash-network-engine/deadline.js +7 -0
- package/dist/safe-bash-network-engine/decode.d.ts +2 -0
- package/dist/safe-bash-network-engine/decode.js +81 -0
- package/dist/safe-bash-network-engine/fetch-transport.d.ts +7 -0
- package/dist/safe-bash-network-engine/fetch-transport.js +9 -0
- package/dist/safe-bash-network-engine/form-content-type.d.ts +5 -0
- package/dist/safe-bash-network-engine/form-content-type.js +8 -0
- package/dist/safe-bash-network-engine/form-headers.d.ts +2 -0
- package/dist/safe-bash-network-engine/form-headers.js +10 -0
- package/dist/safe-bash-network-engine/glob.d.ts +7 -0
- package/dist/safe-bash-network-engine/glob.js +124 -0
- package/dist/safe-bash-network-engine/index.d.ts +3 -0
- package/dist/safe-bash-network-engine/index.js +26 -0
- package/dist/safe-bash-network-engine/input.d.ts +5 -0
- package/dist/safe-bash-network-engine/input.js +255 -0
- package/dist/safe-bash-network-engine/output.d.ts +6 -0
- package/dist/safe-bash-network-engine/output.js +132 -0
- package/dist/safe-bash-network-engine/platform-portable.d.ts +5 -0
- package/dist/safe-bash-network-engine/platform-portable.js +19 -0
- package/dist/safe-bash-network-engine/private-address.d.ts +1 -0
- package/dist/safe-bash-network-engine/private-address.js +7 -0
- package/dist/safe-bash-network-engine/shared.d.ts +14 -0
- package/dist/safe-bash-network-engine/shared.js +23 -0
- package/dist/safe-bash-network-engine/types.d.ts +37 -0
- package/dist/safe-bash-network-engine/types.js +11 -0
- package/dist/safe-bash-network-engine/url.d.ts +2 -0
- package/dist/safe-bash-network-engine/url.js +8 -0
- package/dist/safe-bash-query-engine/capture.d.ts +1 -0
- package/dist/safe-bash-query-engine/capture.js +9 -7
- package/dist/safe-bash-query-engine/dates.d.ts +5 -1
- package/dist/safe-bash-query-engine/dates.js +10 -2
- package/dist/safe-bash-query-engine/delpaths.js +5 -5
- package/dist/safe-bash-query-engine/formats.js +3 -3
- package/dist/safe-bash-query-engine/index.js +15 -15
- package/dist/safe-bash-query-engine/indices.js +5 -5
- package/dist/safe-bash-query-engine/input.d.ts +1 -2
- package/dist/safe-bash-query-engine/input.js +2 -4
- package/dist/safe-bash-query-engine/interpreter.d.ts +5 -0
- package/dist/safe-bash-query-engine/interpreter.js +13 -13
- package/dist/safe-bash-query-engine/limits.js +1 -1
- package/dist/safe-bash-query-engine/parser.d.ts +8 -1
- package/dist/safe-bash-query-engine/parser.js +2 -2
- package/dist/safe-bash-query-engine/query-core.js +15 -15
- package/dist/safe-bash-query-engine/recurse.js +2 -2
- package/dist/safe-bash-query-engine/regex.d.ts +4 -2
- package/dist/safe-bash-query-engine/regex.js +10 -5
- package/dist/safe-bash-query-engine/split.js +2 -2
- package/dist/safe-bash-query-engine/splits.d.ts +1 -1
- package/dist/safe-bash-query-engine/splits.js +7 -6
- package/dist/safe-bash-query-engine/values.js +4 -4
- package/dist/safe-bash-regex-engine/ere/matcher.js +4 -4
- package/dist/safe-bash-regex-engine/index.js +2 -2
- package/dist/safe-bash-regex-engine/text/regex.d.ts +1 -0
- package/dist/safe-bash-regex-engine/text/regex.js +2 -2
- package/dist/safe-bash-search-engine/ergonomic-regex.d.ts +12 -2
- package/dist/safe-bash-search-engine/ergonomic-regex.js +2 -2
- package/dist/safe-bash-search-engine/glob.js +2 -2
- package/dist/safe-bash-search-engine/grep.js +2 -2
- package/dist/safe-bash-search-engine/matcher.d.ts +6 -2
- package/dist/safe-bash-search-engine/matcher.js +30 -8
- package/dist/safe-bash-search-engine/options.js +1 -1
- package/dist/safe-bash-search-engine/output.d.ts +3 -2
- package/dist/safe-bash-search-engine/output.js +111 -30
- package/dist/safe-bash-search-engine/shared.d.ts +2 -0
- package/dist/safe-bash-search-engine/shared.js +2 -2
- package/dist/safe-bash-search-engine/walk.js +11 -10
- package/dist/safe-bash-xml-engine/document.d.ts +1 -1
- package/dist/safe-bash-xml-engine/document.js +3 -3
- package/dist/safe-bash-xml-engine/evaluate.d.ts +1 -0
- package/dist/safe-bash-xml-engine/evaluate.js +4 -1
- package/dist/safe-bash-xml-engine/index.js +8 -6
- package/dist/safe-bash-xml-engine/io.js +1 -1
- package/dist/safe-bash-xml-engine/limits.d.ts +2 -0
- package/dist/safe-bash-xml-engine/limits.js +1 -1
- package/dist/safe-bash-xml-engine/predicate.d.ts +57 -0
- package/dist/safe-bash-xml-engine/query.d.ts +3 -15
- package/dist/safe-bash-xml-engine/query.js +3 -2
- package/dist/safe-bash-zip-engine/LICENSE +21 -0
- package/dist/safe-bash-zip-engine/index.d.ts +1 -0
- package/dist/safe-bash-zip-engine/index.js +32 -0
- package/dist/safe-bash-zip-engine/unzip/arguments.d.ts +53 -0
- package/dist/safe-bash-zip-engine/unzip/arguments.js +270 -0
- package/dist/safe-bash-zip-engine/zip/aes.d.ts +17 -0
- package/dist/safe-bash-zip-engine/zip/aes.js +15 -0
- package/dist/safe-bash-zip-engine/zip/comments.d.ts +17 -0
- package/dist/safe-bash-zip-engine/zip/comments.js +77 -0
- package/dist/safe-bash-zip-engine/zip/crc.d.ts +1 -0
- package/dist/safe-bash-zip-engine/zip/crc.js +7 -0
- package/dist/safe-bash-zip-engine/zip/crypto.d.ts +19 -0
- package/dist/safe-bash-zip-engine/zip/crypto.js +16 -0
- package/dist/safe-bash-zip-engine/zip/dates.d.ts +4 -0
- package/dist/safe-bash-zip-engine/zip/dates.js +68 -0
- package/dist/safe-bash-zip-engine/zip/environment.d.ts +2 -0
- package/dist/safe-bash-zip-engine/zip/environment.js +60 -0
- package/dist/safe-bash-zip-engine/zip/grow.d.ts +3 -0
- package/dist/safe-bash-zip-engine/zip/grow.js +7 -0
- package/dist/safe-bash-zip-engine/zip/help.d.ts +4 -0
- package/dist/safe-bash-zip-engine/zip/help.js +194 -0
- package/dist/safe-bash-zip-engine/zip/line-endings.d.ts +2 -0
- package/dist/safe-bash-zip-engine/zip/line-endings.js +165 -0
- package/dist/safe-bash-zip-engine/zip/log.d.ts +22 -0
- package/dist/safe-bash-zip-engine/zip/log.js +153 -0
- package/dist/safe-bash-zip-engine/zip/lzma.d.ts +9 -0
- package/dist/safe-bash-zip-engine/zip/lzma.js +7 -0
- package/dist/safe-bash-zip-engine/zip/move.d.ts +11 -0
- package/dist/safe-bash-zip-engine/zip/move.js +57 -0
- package/dist/safe-bash-zip-engine/zip/names.d.ts +2 -0
- package/dist/safe-bash-zip-engine/zip/names.js +37 -0
- package/dist/safe-bash-zip-engine/zip/options.d.ts +13 -0
- package/dist/safe-bash-zip-engine/zip/options.js +23 -0
- package/dist/safe-bash-zip-engine/zip/repair.d.ts +10 -0
- package/dist/safe-bash-zip-engine/zip/repair.js +348 -0
- package/dist/safe-bash-zip-engine/zip/safety.d.ts +54 -0
- package/dist/safe-bash-zip-engine/zip/safety.js +19 -0
- package/dist/safe-bash-zip-engine/zip/sfx.d.ts +4 -0
- package/dist/safe-bash-zip-engine/zip/sfx.js +58 -0
- package/dist/safe-bash-zip-engine/zip/test-command.d.ts +5 -0
- package/dist/safe-bash-zip-engine/zip/test-command.js +98 -0
- package/dist/safe-bash-zip-engine/zip/volumes.d.ts +21 -0
- package/dist/safe-bash-zip-engine/zip/volumes.js +255 -0
- package/dist/safe-bash-zip-engine/zip/zip64.d.ts +30 -0
- package/dist/safe-bash-zip-engine/zip/zip64.js +25 -0
- package/dist/safe-bash-zip-engine/zip-format.d.ts +68 -0
- package/dist/safe-bash-zip-engine/zip-format.js +27 -0
- package/dist/safe-playwright-cloudflare/browser-codegen.generated.d.ts +7 -7
- package/dist/safe-playwright-cloudflare/browser-codegen.generated.js +866 -8069
- package/dist/safe-playwright-cloudflare/browser-run-code-budget.d.ts +0 -1
- package/dist/safe-playwright-cloudflare/browser-run-code-budget.js +0 -2
- package/dist/safe-playwright-cloudflare/browser-trace-archive.d.ts +5 -1
- package/dist/safe-playwright-cloudflare/browser-trace-archive.js +2 -1
- package/dist/safe-playwright-cloudflare/browser-trace-budget.js +2 -2
- package/dist/safe-playwright-cloudflare/shell-browser-resource.d.ts +2 -0
- package/dist/safe-playwright-cloudflare/shell-browser-resource.js +3 -11
- package/dist/safe-playwright-cloudflare/shell-playwright.d.ts +2 -0
- package/dist/safe-playwright-cloudflare/shell-playwright.js +1 -1
- package/dist/spreadsheet-engine/io/publication.d.ts +1 -0
- package/package.json +163 -14
- package/dist/safe-bash/chunks/chunk-AZAJJVFX.js +0 -23017
- package/dist/safe-bash/chunks/chunk-O4ZUCRGN.js +0 -13
- package/dist/safe-bash/chunks/chunk-S264DZO2.js +0 -243
- package/dist/safe-bash/chunks/chunk-WVG5SHHQ.js +0 -12
- package/dist/safe-bash/chunks/chunk-ZW6K2J7P.js +0 -2652
- package/dist/safe-bash/command-chunks/chunk-5MPOQ6V3.js +0 -181
- package/dist/safe-bash/command-chunks/chunk-BIXLZ3OG.js +0 -14342
- package/dist/safe-bash/command-chunks/chunk-DUYJE2HY.js +0 -14
- package/dist/safe-bash/command-chunks/chunk-NETECMOF.js +0 -40
- package/dist/safe-bash/command-chunks/chunk-XS3PGJU2.js +0 -343
- package/dist/safe-bash/command-chunks/chunk-XTZALMLR.js +0 -488
- package/dist/safe-bash/commands/archive/zip/aes-primitives-unavailable.d.ts +0 -2
- package/dist/safe-bash/commands/archive/zip/aes-primitives-unavailable.js +0 -3
- package/dist/safe-bash/commands/archive/zip/aes-primitives.d.ts +0 -2
- package/dist/safe-bash/commands/archive/zip/aes-primitives.js +0 -3
- package/dist/safe-bash/commands/xml/document.d.ts +0 -2
- package/dist/safe-bash/commands/xml/document.js +0 -2
- package/dist/safe-bash/commands/xml/evaluate.d.ts +0 -2
- package/dist/safe-bash/commands/xml/evaluate.js +0 -2
- package/dist/safe-bash/commands/xml/json.d.ts +0 -2
- package/dist/safe-bash/commands/xml/json.js +0 -2
- package/dist/safe-bash/commands/xml/limits.d.ts +0 -2
- package/dist/safe-bash/commands/xml/limits.js +0 -2
- package/dist/safe-bash/commands/xml/query.d.ts +0 -2
- package/dist/safe-bash/commands/xml/query.js +0 -2
- package/dist/safe-bash/chunks/{chunk-NHOXKQNE.js → chunk-QVSRRNZT.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-FIUFIDAO.js → chunk-2JRBIDAD.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-B5BKA5WH.js → chunk-B5TAOCKD.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-TYVCKQDH.js → chunk-J5SN3PZ3.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-2ENZ6JGA.js → chunk-KEV7C3KH.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-S62HELHU.js → chunk-PL6O4K6W.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-2WRTLCGK.js → chunk-QZF3SINC.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-X7TM3AKW.js → chunk-U6G67N23.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-DDLQ5YDB.js → chunk-YHFXOX6U.js} +9 -9
- 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 :
|
|
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
|
|
58082
|
+
var comparisons2 = /* @__PURE__ */ new WeakMap();
|
|
57956
58083
|
var callbacks = /* @__PURE__ */ new WeakMap();
|
|
57957
58084
|
function registerResourceQuery(filesystem, query, baseComparison, callback) {
|
|
57958
|
-
|
|
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 =
|
|
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
|
|
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
|
|
58385
|
+
return fail3("ENOTDIR");
|
|
58259
58386
|
if ((current.mode >> 6 & 1) !== 1)
|
|
58260
|
-
return
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
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;
|