@poe-platform/safe-bash 0.1.802 → 0.1.804
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 +60 -33
- package/dist/image-ast/ast.d.ts +1 -0
- package/dist/image-ast/browser/ast.d.ts +1 -0
- package/dist/image-ast/browser/codecs/jpeg.d.ts +2 -2
- package/dist/image-ast/codecs/jpeg.d.ts +2 -2
- package/dist/image-ast/index.browser.js +692 -8355
- package/dist/image-ast/index.js +692 -8355
- package/dist/mp4-ast/codecs.d.ts +7 -2
- package/dist/safe-bash/chunks/{chunk-CHYGPFVM.js → chunk-22SX3F2R.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-FBUCWVTE.js → chunk-2IVBJTBD.js} +1 -1
- package/dist/safe-bash/chunks/chunk-2POETUMB.js +190 -0
- package/dist/safe-bash/chunks/{chunk-XVOSKJE2.js → chunk-47D7WBJK.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-VKNVHEX3.js → chunk-4ESI236Y.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-74GHTNJA.js → chunk-4KTMKD5W.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-55YJASTN.js → chunk-4T53AERN.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-DQP3VHSB.js → chunk-5XIFJVOO.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-NZQXYWA3.js → chunk-62BOHHJT.js} +1 -2
- package/dist/safe-bash/chunks/{chunk-HZAMGT5I.js → chunk-67WIFM3N.js} +17 -6
- package/dist/safe-bash/chunks/{chunk-4D4N7IU2.js → chunk-6LNFRPW5.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-6O77NL2S.js → chunk-6SMICPI3.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-4BSJLKNM.js → chunk-7O76UFQD.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-44ALJ4QG.js → chunk-AW5KIT6V.js} +3549 -84
- package/dist/safe-bash/chunks/{chunk-RSTHLAF3.js → chunk-B2Z73HTZ.js} +52 -28
- package/dist/safe-bash/chunks/chunk-B3ZMOJVM.js +319 -0
- package/dist/safe-bash/chunks/{chunk-7ZBU7KYV.js → chunk-CFAWS3O4.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-I5HZ4FGE.js → chunk-CL2FCTTO.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-KDNSPLII.js → chunk-CTXNARJH.js} +2 -1
- package/dist/safe-bash/chunks/{chunk-TFIBK2GI.js → chunk-D5Q7NFWI.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-OQRVVGR6.js → chunk-DSOOVZ6Q.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-VTH3MLDU.js → chunk-DUTAG6ZD.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-XAQMU6OY.js → chunk-EE5YGFIZ.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-FZE4HW6G.js → chunk-EJOYT2ME.js} +1 -1
- package/dist/safe-bash/chunks/chunk-FAAIR6EJ.js +887 -0
- package/dist/safe-bash/chunks/{chunk-OV6IHKO6.js → chunk-FOB2FZR4.js} +2 -2
- package/dist/safe-bash/chunks/chunk-G6V4RRSQ.js +14 -0
- package/dist/safe-bash/chunks/{chunk-UTBUUFDM.js → chunk-GGQAGQXQ.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-K6VCD7IY.js → chunk-HIIYIJ5G.js} +2 -4
- package/dist/safe-bash/chunks/chunk-IOHH2GTI.js +56 -0
- package/dist/safe-bash/chunks/{chunk-CTVWDACF.js → chunk-IQW34XQT.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-HZ7BWKQ3.js → chunk-IS572AAT.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-AUSNDQTJ.js → chunk-JPSUHHOA.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-ZVD5IS4V.js → chunk-KBZ4UB2O.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-AM5ESLPH.js → chunk-KU5CVWKA.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-NQCM3TYR.js → chunk-LPOVNKNB.js} +225 -176
- package/dist/safe-bash/chunks/{chunk-46Z5E5EV.js → chunk-MBOC3LZ4.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-6PAVEFT3.js → chunk-N4BQFD3P.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-CS4MNM6I.js → chunk-NGKCVNWS.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-7R5BDCG7.js → chunk-OHML2BEU.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-C5OWC2TL.js → chunk-OQ3AGYCZ.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-B7TAL7S5.js → chunk-PTAEWLSE.js} +0 -2
- package/dist/safe-bash/chunks/{chunk-LVOBFF4D.js → chunk-Q4FNLOTI.js} +1 -1
- package/dist/safe-bash/chunks/chunk-Q5XO3NAS.js +1036 -0
- package/dist/safe-bash/chunks/{chunk-GEG3BWGE.js → chunk-RHFRJIWQ.js} +1 -1
- package/dist/safe-bash/chunks/chunk-RUR6J33T.js +11 -0
- package/dist/safe-bash/chunks/{chunk-WDLGKIHD.js → chunk-S4RFUUXO.js} +841 -26
- package/dist/safe-bash/chunks/{chunk-RRR7AQ24.js → chunk-SD2ISU5L.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-3NDIFSNM.js → chunk-SUJ3NTMH.js} +3 -3
- package/dist/safe-bash/chunks/{chunk-R3NAKOED.js → chunk-SZRUU5HS.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-PH63PLPZ.js → chunk-TC3F4UFF.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-3R3AANOR.js → chunk-TCKYOLUE.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-D3ANYGMC.js → chunk-UV4X32QU.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-E7OYNDGL.js → chunk-V7QT2RWC.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-SHEMU2Z7.js → chunk-W2IYOVHK.js} +839 -1211
- package/dist/safe-bash/chunks/{chunk-3HQU4OJO.js → chunk-XNGVOSGI.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-J42RIHHJ.js → chunk-XQWCQSRN.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-BJA5XNP6.js → chunk-Y7FW6GLT.js} +6 -6
- package/dist/safe-bash/chunks/{chunk-QGUV42T5.js → chunk-YL3GBUG4.js} +1 -1
- package/dist/safe-bash/chunks/chunk-YOXUCJER.js +389 -0
- package/dist/safe-bash/chunks/{chunk-HBCN24ZA.js → chunk-Z2AAYYJN.js} +2 -2
- package/dist/safe-bash/chunks/chunk-ZKYKJCZZ.js +30 -0
- package/dist/safe-bash/chunks/core-IE3AFIDX.js +85806 -0
- package/dist/safe-bash/chunks/{ffmpeg-WTC3TEFI.js → ffmpeg-YANDK6HU.js} +2 -2
- package/dist/safe-bash/chunks/{gh-6WU6PXL4.js → gh-4MBJ2S5V.js} +2 -2
- package/dist/safe-bash/chunks/{git-EFZIGJW4.js → git-2QONJNRQ.js} +2 -2
- package/dist/safe-bash/chunks/{imagemagick-EIEYGWPF.js → imagemagick-JLEHGYSN.js} +2 -2
- package/dist/safe-bash/chunks/{mmdc-ROQJT5HQ.js → mmdc-6LD7A6ND.js} +2 -2
- package/dist/safe-bash/chunks/{pdfimages-DW7LWXFI.js → pdfimages-RSHL7LOP.js} +2 -2
- package/dist/safe-bash/chunks/{pdfinfo-TIP6XLUQ.js → pdfinfo-L3SGWPNG.js} +2 -2
- package/dist/safe-bash/chunks/{pdftk-DMG22ITZ.js → pdftk-LFBJNU5A.js} +2 -2
- package/dist/safe-bash/chunks/{pdftoppm-WNDYR72T.js → pdftoppm-NXXFUIHG.js} +2 -2
- package/dist/safe-bash/chunks/{pdftotext-5IPZ4NI7.js → pdftotext-4IHNWT6F.js} +2 -2
- package/dist/safe-bash/chunks/{qpdf-TTX2DIUA.js → qpdf-ZEIREV63.js} +2 -2
- package/dist/safe-bash/chunks/read-builtin-A4QKAT45.js +9 -0
- package/dist/safe-bash/chunks/{sips-XYS46JPJ.js → sips-D5YBG2V3.js} +2 -2
- package/dist/safe-bash/chunks/{soffice-TU73E5KL.js → soffice-RAJU3JUT.js} +2 -2
- package/dist/safe-bash/chunks/source-files-3XWRRHFA.js +7 -0
- package/dist/safe-bash/chunks/{wkhtmltopdf-FSZ2CHGE.js → wkhtmltopdf-7UE4FORZ.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-7KWZXKY6.js → chunk-26RTBV2I.js} +1 -0
- package/dist/safe-bash/command-chunks/{chunk-AQJ2ROJO.js → chunk-2WYNMZR2.js} +10 -8
- package/dist/safe-bash/command-chunks/{chunk-BDSMROQZ.js → chunk-36GFRF2N.js} +2 -1
- package/dist/safe-bash/command-chunks/{chunk-GC5TJZOF.js → chunk-3VIA2IA7.js} +114 -31
- package/dist/safe-bash/command-chunks/{chunk-NKFYQSES.js → chunk-4CTI3ZTX.js} +1 -0
- package/dist/safe-bash/command-chunks/{chunk-WH627NJL.js → chunk-4MYP2FX4.js} +2 -1
- package/dist/safe-bash/command-chunks/chunk-4R5ADJM5.js +178 -0
- package/dist/safe-bash/command-chunks/{chunk-P2N33UMN.js → chunk-5MIKM54M.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-DB453IE6.js → chunk-6FZQUOSJ.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-WPYIOKE3.js → chunk-6GKYHPJG.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-7K6JYKPJ.js → chunk-6M2ELGEN.js} +17 -15
- package/dist/safe-bash/command-chunks/{chunk-PXEIT2O4.js → chunk-6UR7V3ET.js} +8 -1
- package/dist/safe-bash/command-chunks/{chunk-6KJ3LPI2.js → chunk-6XBS5B46.js} +26 -3
- package/dist/safe-bash/command-chunks/{chunk-5PWJG2UK.js → chunk-6YXLZX7L.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-EK6YNAXT.js → chunk-753YOR54.js} +31 -5
- package/dist/safe-bash/command-chunks/{chunk-RMWQAAO5.js → chunk-7IR4NRNE.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-FZTK4MFI.js → chunk-7NM73SVK.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-NXEQ3ESQ.js → chunk-7QD5YY4F.js} +6 -11
- package/dist/safe-bash/command-chunks/{chunk-EMPU65ZK.js → chunk-A5LBSJGH.js} +1 -0
- package/dist/safe-bash/command-chunks/chunk-A7MU7762.js +200 -0
- package/dist/safe-bash/command-chunks/{chunk-ORYGZYKW.js → chunk-ARZMP2L2.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-OQKC5ZU2.js → chunk-BAKFZ477.js} +62 -20
- package/dist/safe-bash/command-chunks/{chunk-QRRYN2KO.js → chunk-BC7BK6R6.js} +0 -2424
- package/dist/safe-bash/command-chunks/{chunk-F4TEEZTL.js → chunk-BOEOJS2Q.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-XS72HTMA.js → chunk-BWGGLYEB.js} +5 -22
- package/dist/safe-bash/command-chunks/{chunk-PMBFZXTK.js → chunk-C5ZZKP7V.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-LHIOAFWW.js → chunk-C7SEB6WU.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-XPT2UGBF.js → chunk-CHJKFRT7.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-TIOCQVUQ.js → chunk-CON26Q2O.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-E55UKBIE.js → chunk-DBAT3IK2.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-Z45N42QC.js → chunk-DPAYAVMS.js} +15 -1
- package/dist/safe-bash/command-chunks/chunk-DS3NXVUM.js +368 -0
- package/dist/safe-bash/command-chunks/{chunk-5ZMZ573Q.js → chunk-DSJ3VRL3.js} +16 -4
- package/dist/safe-bash/command-chunks/{chunk-K2GDEMEU.js → chunk-EFRCFWVR.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-DZCY63VJ.js → chunk-EV6HIJ5H.js} +6 -5
- package/dist/safe-bash/command-chunks/{chunk-JDYXY44P.js → chunk-FJURV46Y.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-TZZ4WUKH.js → chunk-FZAWGKSE.js} +6 -4
- package/dist/safe-bash/command-chunks/{chunk-YHFXOX6U.js → chunk-GOCFQ6XV.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-YOFC45RK.js → chunk-HH5O7DJI.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-3HHCU5YU.js → chunk-HK7F5SDC.js} +13 -0
- package/dist/safe-bash/command-chunks/{chunk-JNZ3CVAE.js → chunk-HQBXIZC7.js} +8 -3
- package/dist/safe-bash/command-chunks/{chunk-2JRBIDAD.js → chunk-I63DBZXZ.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-WNE7FPVR.js → chunk-I64TLTIW.js} +24 -16
- package/dist/safe-bash/command-chunks/{chunk-QKFSRZGQ.js → chunk-ICANWOXH.js} +7 -31
- package/dist/safe-bash/command-chunks/{chunk-SQRQW3CT.js → chunk-IJ6LGLXM.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-5E4WAO4O.js → chunk-JD5QNRNO.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-KJIMDLBB.js → chunk-JNANXVJV.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-TGSNCQSR.js → chunk-JT4RYCA6.js} +1771 -1663
- package/dist/safe-bash/command-chunks/{chunk-II77KPZN.js → chunk-JWW6FYBN.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-ZYXH3B66.js → chunk-LCJWKTCJ.js} +250 -203
- package/dist/safe-bash/command-chunks/{chunk-I237SNW5.js → chunk-LFJJQQND.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-LU4HBPP2.js +97 -0
- package/dist/safe-bash/command-chunks/{chunk-XJXU3VVH.js → chunk-LWOE65OE.js} +20 -5
- package/dist/safe-bash/command-chunks/{chunk-GMIHJYDG.js → chunk-M32HFSX7.js} +22 -6
- package/dist/safe-bash/command-chunks/{chunk-YG4EPFWC.js → chunk-M3NINRDU.js} +2880 -172
- package/dist/safe-bash/command-chunks/chunk-MQREDAL6.js +164 -0
- package/dist/safe-bash/command-chunks/{chunk-LWS62ISU.js → chunk-N6DIASO2.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-NGL7YK7O.js +188 -0
- package/dist/safe-bash/command-chunks/{chunk-PEF7K3UQ.js → chunk-NJYHWKIL.js} +40 -10
- package/dist/safe-bash/command-chunks/{chunk-VXSLJH7G.js → chunk-OJQRSCBP.js} +27 -7
- package/dist/safe-bash/command-chunks/{chunk-OQU6UT6X.js → chunk-OV3XREFN.js} +11 -0
- package/dist/safe-bash/command-chunks/{chunk-MIXBO6U7.js → chunk-PTZLF456.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-ALDC4XP4.js → chunk-QILLRNES.js} +34 -10
- package/dist/safe-bash/command-chunks/{chunk-L22T3H7L.js → chunk-QR25JLKO.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-7U7EXOXX.js → chunk-R7C4MGZ5.js} +17 -223
- package/dist/safe-bash/command-chunks/{chunk-LCF3OB7P.js → chunk-RBME3JEH.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-2KG2QLJE.js → chunk-RFWGYT7G.js} +3 -0
- package/dist/safe-bash/command-chunks/{chunk-5TBUOBDE.js → chunk-RZMVRT26.js} +27 -13
- package/dist/safe-bash/command-chunks/chunk-TFR6B3WB.js +44 -0
- package/dist/safe-bash/command-chunks/chunk-TOH3OF3O.js +179 -0
- package/dist/safe-bash/command-chunks/{chunk-VGG2DL5Q.js → chunk-TRR4MYWF.js} +4 -0
- package/dist/safe-bash/command-chunks/chunk-TT4DAFBT.js +13621 -0
- package/dist/safe-bash/command-chunks/{chunk-LWSBAWLT.js → chunk-TXI64OAG.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-TZRI7BJZ.js +496 -0
- package/dist/safe-bash/command-chunks/{chunk-QOKBZFFD.js → chunk-U3MMODA5.js} +2 -7
- package/dist/safe-bash/command-chunks/{chunk-ZYHTWNAE.js → chunk-UAW423ZL.js} +11 -11
- package/dist/safe-bash/command-chunks/{chunk-C5YYCQHW.js → chunk-UXEEUGOV.js} +222 -12
- package/dist/safe-bash/command-chunks/{chunk-GY3BWK7K.js → chunk-VOZPMJRX.js} +87 -80
- package/dist/safe-bash/command-chunks/{chunk-MQFIPHIQ.js → chunk-WPANOB4A.js} +38 -35
- package/dist/safe-bash/command-chunks/{chunk-Y2WBSJG6.js → chunk-X4QZQI5Q.js} +65 -64
- package/dist/safe-bash/command-chunks/{chunk-FPVUD6TH.js → chunk-XGI57GCN.js} +10 -8
- package/dist/safe-bash/command-chunks/{chunk-5UBXNSFZ.js → chunk-XUCU7QQT.js} +1281 -1278
- package/dist/safe-bash/command-chunks/chunk-Y22VXJBD.js +296 -0
- package/dist/safe-bash/command-chunks/{chunk-WVHONVZ4.js → chunk-YMFUUPDX.js} +5 -3
- package/dist/safe-bash/command-chunks/{chunk-IR2BY7EL.js → chunk-YYGIBXFZ.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-MSFXC3OC.js → chunk-Z4FO6OHE.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-6GWJUQAV.js → chunk-Z5ZZVDUD.js} +181 -133
- package/dist/safe-bash/command-chunks/{chunk-W5DNF4JH.js → chunk-ZHN3QDCI.js} +1 -1
- package/dist/safe-bash/commands/alias/index.d.ts +2 -0
- package/dist/safe-bash/commands/alias/index.js +2 -0
- package/dist/safe-bash/commands/apply-patch/index.browser.js +2 -3
- package/dist/safe-bash/commands/apply-patch/index.d.ts +0 -1
- package/dist/safe-bash/commands/apply-patch/index.js +0 -1
- package/dist/safe-bash/commands/archive/index.browser.js +2 -3
- package/dist/safe-bash/commands/archive/index.d.ts +0 -1
- package/dist/safe-bash/commands/archive/index.js +0 -1
- package/dist/safe-bash/commands/bytes/compression/index.js +54 -51
- package/dist/safe-bash/commands/bytes/index.js +2 -1
- package/dist/safe-bash/commands/chmod/index.browser.js +14 -0
- package/dist/safe-bash/commands/chmod/index.d.ts +2 -0
- package/dist/safe-bash/commands/chmod/index.js +2 -0
- package/dist/safe-bash/commands/column/index.browser.js +2 -3
- package/dist/safe-bash/commands/column/index.d.ts +0 -1
- package/dist/safe-bash/commands/column/index.js +0 -1
- package/dist/safe-bash/commands/copy-source.js +1 -0
- package/dist/safe-bash/commands/csplit/index.browser.js +2 -2
- package/dist/safe-bash/commands/csvkit/index.browser.js +72 -0
- package/dist/safe-bash/commands/csvkit/index.d.ts +0 -5
- package/dist/safe-bash/commands/csvkit/index.js +0 -50
- package/dist/safe-bash/commands/docx/index.browser.js +5 -7
- package/dist/safe-bash/commands/du/index.browser.js +2 -3
- package/dist/safe-bash/commands/du/index.d.ts +0 -1
- package/dist/safe-bash/commands/du/index.js +0 -1
- package/dist/safe-bash/commands/expr/index.browser.js +2 -3
- package/dist/safe-bash/commands/expr/index.d.ts +0 -1
- package/dist/safe-bash/commands/expr/index.js +0 -1
- package/dist/safe-bash/commands/factor/index.browser.js +2 -2
- package/dist/safe-bash/commands/file/index.browser.js +2 -3
- package/dist/safe-bash/commands/file/index.d.ts +0 -1
- package/dist/safe-bash/commands/file/index.js +0 -1
- package/dist/safe-bash/commands/filesystem.js +1 -1
- package/dist/safe-bash/commands/getopt/index.browser.js +2 -2
- package/dist/safe-bash/commands/grep-aliases/index.browser.js +3 -3
- package/dist/safe-bash/commands/hexdump/index.browser.js +2 -2
- package/dist/safe-bash/commands/html-to-markdown/index.browser.js +2 -3
- package/dist/safe-bash/commands/html-to-markdown/index.d.ts +0 -1
- package/dist/safe-bash/commands/html-to-markdown/index.js +0 -1
- package/dist/safe-bash/commands/htmlq/index.d.ts +1 -5
- package/dist/safe-bash/commands/htmlq/index.js +1 -143
- package/dist/safe-bash/commands/iconv/index.browser.js +2 -2
- package/dist/safe-bash/commands/line-endings/index.browser.js +2 -2
- package/dist/safe-bash/commands/llm/index.browser.js +2 -2
- package/dist/safe-bash/commands/llm/providers/index.browser.js +1 -1
- package/dist/safe-bash/commands/mdq/index.browser.js +3 -3
- package/dist/safe-bash/commands/media/index.browser.js +4 -16314
- package/dist/safe-bash/commands/media/index.d.ts +1 -5
- package/dist/safe-bash/commands/media/index.js +1 -3
- package/dist/safe-bash/commands/media/plugin.d.ts +1 -18
- package/dist/safe-bash/commands/media/plugin.js +1 -90
- package/dist/safe-bash/commands/media/remote.d.ts +1 -63
- package/dist/safe-bash/commands/media/remote.js +1 -405
- package/dist/safe-bash/commands/media/settings.d.ts +1 -4
- package/dist/safe-bash/commands/media/settings.js +1 -26
- package/dist/safe-bash/commands/metadata/chmod.d.ts +1 -7
- package/dist/safe-bash/commands/metadata/chmod.js +1 -204
- package/dist/safe-bash/commands/metadata/index.browser.js +3 -8
- package/dist/safe-bash/commands/metadata/index.d.ts +0 -1
- package/dist/safe-bash/commands/metadata/index.js +2 -2
- package/dist/safe-bash/commands/metadata/internal.d.ts +1 -30
- package/dist/safe-bash/commands/metadata/internal.js +1 -76
- package/dist/safe-bash/commands/metadata/mktemp.d.ts +1 -3
- package/dist/safe-bash/commands/metadata/mktemp.js +1 -202
- package/dist/safe-bash/commands/metadata/stat.d.ts +1 -7
- package/dist/safe-bash/commands/metadata/stat.js +1 -530
- package/dist/safe-bash/commands/mktemp/index.browser.js +13 -0
- package/dist/safe-bash/commands/mktemp/index.d.ts +2 -0
- package/dist/safe-bash/commands/mktemp/index.js +2 -0
- package/dist/safe-bash/commands/network/curl.js +1 -3
- package/dist/safe-bash/commands/network/index.browser.js +3 -4
- package/dist/safe-bash/commands/network/public.d.ts +0 -1
- package/dist/safe-bash/commands/network/public.js +0 -1
- package/dist/safe-bash/commands/network/transport.js +2 -1
- package/dist/safe-bash/commands/network/wget.js +1 -3
- package/dist/safe-bash/commands/node/browser.d.ts +0 -1
- package/dist/safe-bash/commands/node/browser.js +0 -1
- package/dist/safe-bash/commands/node/default-runtime.d.ts +3 -0
- package/dist/safe-bash/commands/node/default-runtime.js +15 -0
- package/dist/safe-bash/commands/node/index.browser.js +7 -8
- package/dist/safe-bash/commands/node/index.js +3 -3
- package/dist/safe-bash/commands/node/path.js +1 -1
- package/dist/safe-bash/commands/node/preload.d.ts +1 -1
- package/dist/safe-bash/commands/node/preload.js +4 -1
- package/dist/safe-bash/commands/node/quickjs.d.ts +2 -0
- package/dist/safe-bash/commands/node/quickjs.js +2 -0
- package/dist/safe-bash/commands/node/safejs.js +26 -12
- package/dist/safe-bash/commands/op/index.browser.js +2 -3
- package/dist/safe-bash/commands/op/index.d.ts +0 -11
- package/dist/safe-bash/commands/op/index.js +0 -84
- package/dist/safe-bash/commands/pandoc/index.browser.js +44 -0
- package/dist/safe-bash/commands/pandoc/index.d.ts +0 -1
- package/dist/safe-bash/commands/pandoc/index.js +0 -1
- package/dist/safe-bash/commands/portable-random.d.ts +1 -1
- package/dist/safe-bash/commands/portable-random.js +1 -12
- package/dist/safe-bash/commands/pr/index.browser.js +2 -2
- package/dist/safe-bash/commands/python/docker-runner.js +4 -3
- package/dist/safe-bash/commands/python/docker.d.ts +1 -0
- package/dist/safe-bash/commands/python/docker.js +5 -2
- package/dist/safe-bash/commands/python/index.browser.js +17 -13
- package/dist/safe-bash/commands/python/index.d.ts +2 -1
- package/dist/safe-bash/commands/python/index.js +10 -8
- package/dist/safe-bash/commands/python/llm-capability.js +65 -2
- package/dist/safe-bash/commands/python/llm-dependencies.d.ts +27 -0
- package/dist/safe-bash/commands/python/llm-dependencies.js +66 -0
- package/dist/safe-bash/commands/python/llm-module.js +6 -4
- package/dist/safe-bash/commands/python/llm-reference-module.d.ts +3 -0
- package/dist/safe-bash/commands/python/llm-reference-module.js +690 -0
- package/dist/safe-bash/commands/python/worker.browser.js +2 -3
- package/dist/safe-bash/commands/python/worker.d.ts +0 -1
- package/dist/safe-bash/commands/python/worker.js +0 -1
- package/dist/safe-bash/commands/regex-execution/ere/transport/wire-engine.d.ts +1 -1
- package/dist/safe-bash/commands/regex-execution/ere/transport/wire-engine.js +3 -3
- package/dist/safe-bash/commands/regex-execution/public.browser.js +7 -7
- package/dist/safe-bash/commands/safejs/options.js +5 -1
- package/dist/safe-bash/commands/safejs/runtime.d.ts +1 -0
- package/dist/safe-bash/commands/safejs/runtime.js +1 -1
- package/dist/safe-bash/commands/split/index.browser.js +2 -3
- package/dist/safe-bash/commands/split/index.d.ts +0 -1
- package/dist/safe-bash/commands/split/index.js +0 -1
- package/dist/safe-bash/commands/ssconvert/index.browser.js +98 -0
- package/dist/safe-bash/commands/stat/index.browser.js +13 -0
- package/dist/safe-bash/commands/stat/index.d.ts +2 -0
- package/dist/safe-bash/commands/stat/index.js +2 -0
- package/dist/safe-bash/commands/stream-format/index.browser.js +3 -4
- package/dist/safe-bash/commands/stream-format/index.d.ts +0 -1
- package/dist/safe-bash/commands/stream-format/index.js +0 -1
- package/dist/safe-bash/commands/stream-inspection/index.browser.js +3 -4
- package/dist/safe-bash/commands/stream-inspection/index.d.ts +0 -1
- package/dist/safe-bash/commands/stream-inspection/index.js +0 -1
- package/dist/safe-bash/commands/streams.js +2 -1
- package/dist/safe-bash/commands/table-text/index.browser.js +3 -4
- package/dist/safe-bash/commands/table-text/index.d.ts +0 -1
- package/dist/safe-bash/commands/table-text/index.js +0 -1
- package/dist/safe-bash/commands/text.js +74 -34
- package/dist/safe-bash/commands/time-env/index.browser.js +3 -4
- package/dist/safe-bash/commands/time-env/index.d.ts +0 -1
- package/dist/safe-bash/commands/time-env/index.js +0 -1
- package/dist/safe-bash/commands/tree/index.browser.js +2 -3
- package/dist/safe-bash/commands/tree/index.d.ts +0 -1
- package/dist/safe-bash/commands/tree/index.js +0 -1
- package/dist/safe-bash/commands/tsort/index.browser.js +2 -2
- package/dist/safe-bash/commands/unalias/index.d.ts +2 -0
- package/dist/safe-bash/commands/unalias/index.js +2 -0
- package/dist/safe-bash/commands/xml/index.browser.js +2 -2
- package/dist/safe-bash/commands/yq/index.browser.js +2 -2
- package/dist/safe-bash/core.browser.js +2 -2
- package/dist/safe-bash/core.d.ts +7 -1
- package/dist/safe-bash/core.js +7 -1
- package/dist/safe-bash/execution-runtime.js +2 -1
- package/dist/safe-bash/fs/s3/http/index.d.ts +2 -2
- package/dist/safe-bash/fs/s3/http/index.js +1 -1
- package/dist/safe-bash/full-core.browser.js +254 -916
- package/dist/safe-bash/internal/op/types.d.ts +1 -0
- package/dist/safe-bash/jobs.browser.js +5 -5
- package/dist/safe-bash/lazy-optional.d.ts +3 -3
- package/dist/safe-bash/lazy-optional.js +1 -1
- package/dist/safe-bash/opt-in/commands/cmp/index.js +7 -6
- package/dist/safe-bash/opt-in/commands/dd/index.js +1 -1
- package/dist/safe-bash/opt-in/commands/dd/io.js +51 -5
- package/dist/safe-bash/opt-in/commands/truncate/index.js +2 -2
- package/dist/safe-bash/opt-in/commands/yq/native-work.js +3 -0
- package/dist/safe-bash/opt-in/optional/commands/shuf/input.js +2 -1
- package/dist/safe-bash/opt-in/optional/commands/shuf/shuf.js +4 -2
- package/dist/safe-bash/opt-in/optional.d.ts +1 -1
- package/dist/safe-bash/opt-in/optional.js +1 -1
- package/dist/safe-bash/opt-in/shell/extensions/read/index.js +2 -344
- package/dist/safe-bash/optional-host.browser.js +19 -14
- package/dist/safe-bash/optional-host.d.ts +1 -0
- package/dist/safe-bash/optional-host.js +1 -0
- package/dist/safe-bash/playwright/controller.js +41 -3
- package/dist/safe-bash/playwright/native-storage-targets.js +4 -2
- package/dist/safe-bash/plugins/base.d.ts +1 -1
- package/dist/safe-bash/plugins/base.js +3 -3
- package/dist/safe-bash/plugins/composition.d.ts +5 -2
- package/dist/safe-bash/plugins/composition.js +10 -7
- package/dist/safe-bash/plugins/index.browser.js +44 -41
- package/dist/safe-bash/plugins/index.js +3 -2
- package/dist/safe-bash/plugins/portable-commands.d.ts +3 -0
- package/dist/safe-bash/plugins/portable-commands.js +31 -0
- package/dist/safe-bash/registry-entry.browser.js +41 -42
- package/dist/safe-bash/search.browser.js +32 -33
- package/dist/safe-bash/shell/arithmetic.js +19 -6
- package/dist/safe-bash/shell/arrays/state.js +1 -1
- package/dist/safe-bash/shell/arrays/syntax.js +4 -3
- package/dist/safe-bash/shell/index.d.ts +0 -1
- package/dist/safe-bash/shell/index.js +0 -1
- package/dist/safe-bash/shell/parser.d.ts +2 -2
- package/dist/safe-bash/shell/parser.js +268 -64
- package/dist/safe-bash/shell/read-builtin.d.ts +3 -0
- package/dist/safe-bash/shell/read-builtin.js +344 -0
- package/dist/safe-bash/shell/runtime.d.ts +24 -4
- package/dist/safe-bash/shell/runtime.js +392 -414
- package/dist/safe-bash/shell/session-state.js +25 -0
- package/dist/safe-bash/shell/shell.js +76 -154
- package/dist/safe-bash/shell/tilde-expansion.d.ts +1 -1
- package/dist/safe-bash/shell/tilde-expansion.js +2 -2
- package/dist/safe-bash/shell/types.d.ts +7 -0
- package/dist/safe-bash/shell/value-state.js +1 -1
- package/dist/safe-bash/shell/worker-limits.js +1 -0
- package/dist/safe-bash/shell-entry.browser.js +32 -33
- package/dist/safe-bash/trap.browser.js +4 -4
- package/dist/safe-bash/worker/host.js +1 -1
- package/dist/safe-bash/yq-browser/index.js +1 -1
- package/dist/safe-bash-calendar-engine/time-env/calendar.d.ts +1 -1
- package/dist/safe-bash-calendar-engine/time-env/calendar.js +1 -1
- package/dist/safe-bash-calendar-engine/time-env/format.js +1 -1
- package/dist/safe-bash-command-alias/index.d.ts +13 -0
- package/dist/safe-bash-command-alias/index.js +88 -0
- package/dist/safe-bash-command-apply-patch/apply.js +3 -3
- package/dist/safe-bash-command-apply-patch/index.js +3 -3
- package/dist/safe-bash-command-apply-patch/matcher.js +1 -1
- package/dist/safe-bash-command-apply-patch/parser.js +1 -1
- package/dist/safe-bash-command-awk/awk-pipes.js +2 -2
- package/dist/safe-bash-command-awk/awk-reader.js +1 -1
- package/dist/safe-bash-command-awk/awk-runtime.js +3 -3
- package/dist/safe-bash-command-awk/awk.js +5 -5
- package/dist/safe-bash-command-awk/index.js +5 -5
- package/dist/safe-bash-command-bc/index.js +218 -65
- package/dist/safe-bash-command-bzip2/index.js +4 -3
- package/dist/safe-bash-command-chmod/LICENSE +21 -0
- package/dist/safe-bash-command-chmod/command.d.ts +7 -0
- package/dist/safe-bash-command-chmod/command.js +11 -0
- package/dist/safe-bash-command-chmod/index.d.ts +6 -0
- package/dist/safe-bash-command-chmod/index.js +27 -0
- package/dist/safe-bash-command-cmp/index.js +7 -6
- 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-csvkit/index.d.ts +1 -0
- package/dist/safe-bash-command-csvkit/index.js +1505 -7
- package/dist/safe-bash-command-csvkit/sync-support.js +2 -7
- package/dist/safe-bash-command-curl/curl.js +1 -1
- package/dist/safe-bash-command-curl/index.js +1 -1
- package/dist/safe-bash-command-date/date.js +1 -1
- package/dist/safe-bash-command-date/index.js +1 -1
- package/dist/safe-bash-command-dd/index.js +1 -1
- package/dist/safe-bash-command-dd/io.js +51 -5
- package/dist/safe-bash-command-diff/diff.js +1 -1
- package/dist/safe-bash-command-diff/index.js +1 -1
- package/dist/safe-bash-command-diff3/index.js +10 -13
- package/dist/safe-bash-command-exiftool/index.js +283 -55
- package/dist/safe-bash-command-exiftool/registry.d.ts +4 -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-fd/arguments.d.ts +2 -0
- package/dist/safe-bash-command-fd/index.js +42 -12
- package/dist/safe-bash-command-ffmpeg/index.js +356 -66
- package/dist/safe-bash-command-find/find-format.d.ts +3 -0
- package/dist/safe-bash-command-find/find-format.js +1 -1
- package/dist/safe-bash-command-find/find.js +2 -2
- package/dist/safe-bash-command-find/index.js +2 -2
- package/dist/safe-bash-command-fmt/index.js +10 -6
- package/dist/safe-bash-command-fold/engine.d.ts +1 -1
- package/dist/safe-bash-command-fold/family.js +2 -2
- package/dist/safe-bash-command-fold/index.js +1 -1
- package/dist/safe-bash-command-gzip/index.js +45 -42
- package/dist/safe-bash-command-hexdump/command.js +2 -2
- package/dist/safe-bash-command-hexdump/index.js +2 -2
- package/dist/safe-bash-command-html-to-markdown/entities.js +1 -1
- package/dist/safe-bash-command-html-to-markdown/index.js +4 -4
- package/dist/safe-bash-command-html-to-markdown/input.js +3 -3
- package/dist/safe-bash-command-html-to-markdown/parser.js +2 -2
- package/dist/safe-bash-command-html-to-markdown/render.js +3 -3
- package/dist/safe-bash-command-htmlq/contracts.d.ts +5 -2
- package/dist/safe-bash-command-htmlq/index.d.ts +2 -1
- package/dist/safe-bash-command-htmlq/index.js +175 -49
- package/dist/safe-bash-command-htmlq/sync.d.ts +1 -0
- package/dist/safe-bash-command-imagemagick/index.js +59 -7
- package/dist/safe-bash-command-install/arguments.d.ts +27 -0
- package/dist/safe-bash-command-install/arguments.js +224 -0
- package/dist/safe-bash-command-install/index.d.ts +7 -0
- package/dist/safe-bash-command-install/index.js +942 -0
- package/dist/safe-bash-command-install/mode.d.ts +6 -0
- package/dist/safe-bash-command-install/mode.js +71 -0
- package/dist/safe-bash-command-install/options.d.ts +40 -0
- package/dist/safe-bash-command-install/options.js +27 -0
- 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-less/index.js +42 -57
- package/dist/safe-bash-command-llm/command.js +1 -1
- package/dist/safe-bash-command-llm/elevenlabs.js +2 -2
- package/dist/safe-bash-command-llm/index.js +4 -4
- package/dist/safe-bash-command-llm/openai.js +2 -2
- package/dist/safe-bash-command-llm/providers/elevenlabs.js +2 -2
- package/dist/safe-bash-command-llm/providers/index.js +3 -3
- package/dist/safe-bash-command-llm/providers/openai.js +2 -2
- package/dist/safe-bash-command-llm/providers/shared.js +1 -1
- package/dist/{safe-bash-mcp → safe-bash-command-mcp}/index.browser.d.ts +463 -46
- package/dist/safe-bash-command-mcp/index.browser.js +19308 -0
- package/dist/{safe-bash-mcp → safe-bash-command-mcp}/index.d.ts +15 -6
- package/dist/{safe-bash-mcp → safe-bash-command-mcp}/index.js +2835 -2783
- package/dist/safe-bash-command-media/LICENSE +21 -0
- package/dist/safe-bash-command-media/index.d.ts +6 -0
- package/dist/safe-bash-command-media/index.js +30 -0
- package/dist/safe-bash-command-media/plugin.d.ts +18 -0
- package/dist/safe-bash-command-media/plugin.js +11 -0
- package/dist/safe-bash-command-media/remote.d.ts +63 -0
- package/dist/safe-bash-command-media/remote.js +11 -0
- package/dist/safe-bash-command-media/settings.d.ts +4 -0
- package/dist/safe-bash-command-media/settings.js +41 -0
- package/dist/safe-bash-command-mktemp/LICENSE +21 -0
- package/dist/safe-bash-command-mktemp/command.d.ts +3 -0
- package/dist/safe-bash-command-mktemp/command.js +9 -0
- package/dist/safe-bash-command-mktemp/index.d.ts +6 -0
- package/dist/safe-bash-command-mktemp/index.js +25 -0
- package/dist/safe-bash-command-mmdc/arguments.d.ts +1 -0
- package/dist/safe-bash-command-mmdc/command.d.ts +2 -0
- package/dist/safe-bash-command-mmdc/contracts.d.ts +8 -1
- package/dist/safe-bash-command-mmdc/index.js +359 -7
- package/dist/safe-bash-command-nl/index.js +1 -1
- package/dist/safe-bash-command-nl/nl.js +1 -1
- package/dist/safe-bash-command-node/LICENSE +21 -0
- package/dist/safe-bash-command-node/index.d.ts +17 -0
- package/dist/safe-bash-command-node/index.js +328 -0
- package/dist/safe-bash-command-numfmt/index.js +1 -0
- package/dist/safe-bash-command-od/index.js +16 -8
- package/dist/safe-bash-command-op/index.js +62 -36
- package/dist/safe-bash-command-op/types.d.ts +1 -0
- package/dist/safe-bash-command-pandoc/command.js +3 -3
- package/dist/safe-bash-command-pandoc/index.d.ts +1 -0
- package/dist/safe-bash-command-pandoc/index.js +5 -3
- package/dist/safe-bash-command-pandoc/sync.d.ts +1 -0
- package/dist/safe-bash-command-patch/index.js +4 -4
- package/dist/safe-bash-command-patch/patch.js +4 -4
- package/dist/safe-bash-command-pdfimages/index.js +1 -1
- package/dist/safe-bash-command-pdfinfo/index.js +30 -5
- package/dist/safe-bash-command-pdftk/index.js +21 -23
- package/dist/safe-bash-command-pdftoppm/index.js +17 -4
- package/dist/safe-bash-command-pdftotext/index.js +11 -14
- package/dist/safe-bash-command-qpdf/index.d.ts +1 -0
- package/dist/safe-bash-command-qpdf/index.js +9 -6
- package/dist/safe-bash-command-rg/index.js +1 -1
- package/dist/safe-bash-command-rg/rg-command.js +1 -1
- package/dist/safe-bash-command-sed/index.js +1 -1
- package/dist/safe-bash-command-sed/sed.js +1 -1
- package/dist/safe-bash-command-shuf/input.d.ts +2 -2
- package/dist/safe-bash-command-shuf/input.js +2 -1
- package/dist/safe-bash-command-shuf/shuf.js +4 -2
- package/dist/safe-bash-command-sips/index.js +15 -7
- package/dist/safe-bash-command-soffice/index.js +97 -12
- package/dist/safe-bash-command-sponge/index.js +13 -3
- package/dist/safe-bash-command-sqlite3/engine.d.ts +1 -0
- package/dist/safe-bash-command-sqlite3/index.js +510 -70
- package/dist/safe-bash-command-ssconvert/formats/xlsx.js +2 -2
- package/dist/safe-bash-command-ssconvert/index.js +44 -22
- package/dist/safe-bash-command-stat/LICENSE +21 -0
- package/dist/safe-bash-command-stat/command.d.ts +7 -0
- package/dist/safe-bash-command-stat/command.js +9 -0
- package/dist/safe-bash-command-stat/index.d.ts +6 -0
- package/dist/safe-bash-command-stat/index.js +25 -0
- package/dist/safe-bash-command-tar/create.d.ts +1 -0
- package/dist/safe-bash-command-tar/create.js +2 -2
- package/dist/safe-bash-command-tar/extract.js +2 -2
- package/dist/safe-bash-command-tar/index.js +4 -4
- package/dist/safe-bash-command-tar/modes.js +4 -4
- package/dist/safe-bash-command-tar/options.js +1 -1
- package/dist/safe-bash-command-truncate/index.js +2 -2
- package/dist/safe-bash-command-tsort/command.js +2 -2
- package/dist/safe-bash-command-tsort/index.js +2 -2
- package/dist/safe-bash-command-unalias/index.d.ts +12 -0
- package/dist/safe-bash-command-unalias/index.js +67 -0
- package/dist/safe-bash-command-unrtf/index.js +37 -5
- package/dist/safe-bash-command-xan/argv.d.ts +1 -1
- package/dist/safe-bash-command-xan/argv.js +2 -2
- package/dist/safe-bash-command-xan/budget.d.ts +0 -1
- package/dist/safe-bash-command-xan/budget.js +1 -1
- package/dist/safe-bash-command-xan/commands.js +6 -6
- package/dist/safe-bash-command-xan/csv.js +2 -2
- package/dist/safe-bash-command-xan/index.js +8 -9
- package/dist/safe-bash-command-xan/io.js +4 -4
- package/dist/safe-bash-command-xan/options.js +1 -1
- package/dist/safe-bash-command-xan/selector.js +2 -2
- package/dist/safe-bash-command-xmllint/index.js +45 -23
- package/dist/safe-bash-command-xxd/index.js +47 -12
- package/dist/safe-bash-command-xz/command.d.ts +1 -1
- package/dist/safe-bash-command-xz/index.js +3 -2
- package/dist/safe-bash-command-yq/accounting.js +1 -1
- package/dist/safe-bash-command-yq/index.js +4 -2
- package/dist/safe-bash-command-yq/native-work.js +3 -0
- package/dist/safe-bash-command-yq/parser.js +2 -2
- package/dist/safe-bash-command-yq/query.js +8 -5
- package/dist/safe-bash-command-yq/toml.js +2 -2
- package/dist/safe-bash-command-zip/index.js +3 -3
- package/dist/safe-bash-compression-engine/bounded-codec.js +3 -3
- package/dist/safe-bash-compression-engine/codec-loader.js +2 -2
- package/dist/safe-bash-compression-engine/files.js +6 -6
- package/dist/safe-bash-compression-engine/index.js +5 -5
- package/dist/safe-bash-compression-engine/operand.js +6 -6
- package/dist/safe-bash-compression-engine/options.js +1 -1
- package/dist/safe-bash-compression-engine/stream.js +5 -5
- package/dist/safe-bash-compression-engine/zstd-decode.js +4 -4
- package/dist/safe-bash-contracts/command.js +3 -3
- package/dist/safe-bash-contracts/default-executor.js +2 -2
- package/dist/safe-bash-contracts/diagnostics.js +3 -3
- package/dist/safe-bash-contracts/escaping.js +6 -6
- package/dist/safe-bash-contracts/filesystem-descriptor.js +3 -3
- package/dist/safe-bash-contracts/filesystem-output.js +5 -5
- package/dist/safe-bash-contracts/http.d.ts +7 -0
- package/dist/safe-bash-contracts/index.js +8 -8
- package/dist/safe-bash-contracts/io.d.ts +2 -0
- package/dist/safe-bash-contracts/io.js +2 -2
- package/dist/safe-bash-contracts/output.js +3 -3
- package/dist/safe-bash-contracts/runtime-control.d.ts +2 -2
- package/dist/safe-bash-contracts/runtime-control.js +4 -2
- package/dist/safe-bash-contracts/signals.d.ts +2 -0
- package/dist/safe-bash-contracts/signals.js +3 -1
- package/dist/safe-bash-contracts/yield.js +1 -1
- package/dist/safe-bash-csv-engine/index.d.ts +2 -1
- package/dist/safe-bash-csv-engine/index.js +21 -15
- package/dist/safe-bash-io-engine/commands/search/requirements.js +2 -2
- package/dist/safe-bash-io-engine/commands/text-programs/shared.js +6 -6
- package/dist/safe-bash-io-engine/internal.js +1 -1
- package/dist/safe-bash-io-engine/shell/pattern.js +38 -18
- package/dist/safe-bash-line-ending-engine/convert.js +9 -204
- package/dist/safe-bash-line-ending-engine/encoding.js +9 -42
- package/dist/safe-bash-line-ending-engine/index.js +48 -0
- package/dist/safe-bash-line-ending-engine/info.js +9 -90
- package/dist/safe-bash-line-ending-engine/internal.js +15 -160
- package/dist/safe-bash-line-ending-engine/io.js +12 -289
- package/dist/safe-bash-line-ending-engine/stage.js +10 -160
- package/dist/safe-bash-markdown-engine/index.js +3 -3
- package/dist/safe-bash-metadata-engine/LICENSE +21 -0
- package/dist/safe-bash-metadata-engine/index.d.ts +30 -0
- package/dist/safe-bash-metadata-engine/index.js +82 -0
- package/dist/safe-bash-metadata-engine/random.d.ts +1 -0
- package/dist/safe-bash-metadata-engine/random.js +21 -0
- package/dist/safe-bash-network-engine/args.d.ts +6 -0
- package/dist/safe-bash-network-engine/args.js +4 -2
- package/dist/safe-bash-network-engine/body.js +1 -1
- package/dist/safe-bash-network-engine/fetch-transport.js +3 -1
- package/dist/safe-bash-network-engine/index.js +3 -1
- package/dist/safe-bash-network-engine/input.js +2 -2
- package/dist/safe-bash-network-engine/platform-portable.js +3 -1
- package/dist/safe-bash-query-engine/dates.d.ts +1 -1
- package/dist/safe-bash-query-engine/dates.js +1 -1
- package/dist/safe-bash-query-engine/index.js +6 -6
- package/dist/safe-bash-query-engine/interpreter.js +4 -4
- package/dist/safe-bash-query-engine/parser.js +1 -1
- package/dist/safe-bash-query-engine/query-core.js +6 -6
- package/dist/safe-bash-regex-engine/execution/bounded-provider.js +10 -0
- package/dist/safe-bash-regex-engine/index.js +1 -1
- package/dist/safe-bash-regex-engine/text/regex.d.ts +1 -1
- package/dist/safe-bash-regex-engine/text/regex.js +1 -1
- package/dist/safe-bash-search-engine/ergonomic-regex.d.ts +1 -0
- 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 +17 -10
- package/dist/safe-bash-search-engine/matcher.d.ts +2 -2
- package/dist/safe-bash-search-engine/matcher.js +13 -9
- package/dist/safe-bash-search-engine/options.d.ts +2 -0
- package/dist/safe-bash-search-engine/options.js +1 -1
- package/dist/safe-bash-search-engine/output.js +1 -1
- package/dist/safe-bash-search-engine/shared.js +2 -2
- package/dist/safe-bash-search-engine/walk.js +15 -3
- package/dist/safe-bash-text-stream-engine/stream-format/shared.d.ts +1 -1
- package/dist/safe-bash-text-stream-engine/stream-format/shared.js +2 -1
- package/dist/safe-bash-xml-engine/document.js +3 -3
- package/dist/safe-bash-xml-engine/evaluate.js +2 -2
- package/dist/safe-bash-xml-engine/index.js +4 -4
- package/dist/safe-bash-xml-engine/io.js +7 -2
- package/dist/safe-bash-xml-engine/limits.d.ts +0 -2
- package/dist/safe-bash-xml-engine/limits.js +1 -1
- package/dist/safe-bash-xml-engine/query.js +3 -3
- package/dist/safe-bash-zip-engine/index.js +3 -3
- package/dist/safe-bash-zip-engine/zip/repair.js +3 -3
- package/dist/safe-bash-zip-engine/zip/safety.js +1 -1
- package/dist/safe-bash-zip-engine/zip/sfx.js +3 -3
- package/dist/safe-bash-zip-engine/zip/volumes.js +1 -1
- package/dist/safe-bash-zip-engine/zip-format.js +3 -3
- package/dist/safe-playwright-cloudflare/browser-snapshot-json.js +2 -2
- package/dist/safe-playwright-cloudflare/browser-snapshot-references.js +1 -1
- package/dist/safe-playwright-cloudflare/browser-socket-closure.js +18 -3
- package/dist/safe-playwright-cloudflare/shell-browser-resource.js +1 -1
- package/dist/xlsx-ast/xlsx.js +6 -5
- package/package.json +112 -98
- package/dist/media-cli/bytes.d.ts +0 -8
- package/dist/media-cli/bytes.js +0 -40
- package/dist/media-cli/concat.d.ts +0 -30
- package/dist/media-cli/concat.js +0 -197
- package/dist/media-cli/content.js +0 -66
- package/dist/media-cli/dependency-grammars.d.ts +0 -12
- package/dist/media-cli/dependency-grammars.js +0 -557
- package/dist/media-cli/discover.js +0 -286
- package/dist/media-cli/engine.js +0 -190
- package/dist/media-cli/filename-expression.js +0 -147
- package/dist/media-cli/filesystem.js +0 -35
- package/dist/media-cli/frontend-contract.js +0 -8
- package/dist/media-cli/frontend-issues.d.ts +0 -6
- package/dist/media-cli/frontend-issues.js +0 -9
- package/dist/media-cli/imagemagick-operand.d.ts +0 -42
- package/dist/media-cli/imagemagick-operand.js +0 -229
- package/dist/media-cli/imagemagick-references.d.ts +0 -7
- package/dist/media-cli/imagemagick-references.js +0 -42
- package/dist/media-cli/imagemagick.generated.js +0 -3254
- package/dist/media-cli/imagemagick.js +0 -615
- package/dist/media-cli/index.js +0 -12
- package/dist/media-cli/mvg.d.ts +0 -10
- package/dist/media-cli/mvg.js +0 -102
- package/dist/media-cli/network.js +0 -78
- package/dist/media-cli/options.generated.js +0 -3312
- package/dist/media-cli/preset.d.ts +0 -11
- package/dist/media-cli/preset.js +0 -57
- package/dist/media-cli/resolution-path.d.ts +0 -23
- package/dist/media-cli/resolution-path.js +0 -217
- package/dist/media-cli/resolver.js +0 -494
- package/dist/media-cli/resources.d.ts +0 -16
- package/dist/media-cli/resources.js +0 -187
- package/dist/media-cli/shim.js +0 -52
- package/dist/media-cli/tee.d.ts +0 -6
- package/dist/media-cli/tee.js +0 -38
- package/dist/office-package/zip-sync.js +0 -111
- package/dist/remote-execution/binary.js +0 -178
- package/dist/remote-execution/callback-result.js +0 -26
- package/dist/remote-execution/canonical-capabilities.d.ts +0 -5
- package/dist/remote-execution/canonical-capabilities.js +0 -45
- package/dist/remote-execution/canonical-metadata.d.ts +0 -4
- package/dist/remote-execution/canonical-metadata.js +0 -32
- package/dist/remote-execution/client.js +0 -824
- package/dist/remote-execution/deployment.js +0 -131
- package/dist/remote-execution/descriptors.js +0 -267
- package/dist/remote-execution/effects.js +0 -357
- package/dist/remote-execution/endpoint.js +0 -224
- package/dist/remote-execution/files.js +0 -291
- package/dist/remote-execution/hosting-operation.js +0 -26
- package/dist/remote-execution/hosting-request.d.ts +0 -4
- package/dist/remote-execution/hosting-request.js +0 -12
- package/dist/remote-execution/hosting-stream.d.ts +0 -8
- package/dist/remote-execution/hosting-stream.js +0 -64
- package/dist/remote-execution/index.js +0 -18
- package/dist/remote-execution/invocation-admission.d.ts +0 -3
- package/dist/remote-execution/invocation-admission.js +0 -17
- package/dist/remote-execution/job-binding.js +0 -1269
- package/dist/remote-execution/materializations.js +0 -284
- package/dist/remote-execution/modal-driver.js +0 -90
- package/dist/remote-execution/native-result.d.ts +0 -3
- package/dist/remote-execution/native-result.js +0 -16
- package/dist/remote-execution/output-freshness.d.ts +0 -4
- package/dist/remote-execution/output-freshness.js +0 -19
- package/dist/remote-execution/output-retrieval.js +0 -474
- package/dist/remote-execution/process-http.js +0 -607
- package/dist/remote-execution/process.js +0 -577
- package/dist/remote-execution/protocol.js +0 -208
- package/dist/remote-execution/relay.js +0 -91
- package/dist/remote-execution/rest-driver.js +0 -93
- package/dist/remote-execution/upload-descriptor.js +0 -201
- package/dist/remote-execution/upload-protocol.js +0 -62
- package/dist/remote-execution/uploads.js +0 -324
- package/dist/remote-execution/wire-json.d.ts +0 -4
- package/dist/remote-execution/wire-json.js +0 -44
- package/dist/remote-execution/wire-validation.js +0 -131
- package/dist/remote-execution/wire.generated.js +0 -4224
- package/dist/safe-bash/chunks/chunk-GETUOD5D.js +0 -161
- package/dist/safe-bash/chunks/chunk-IWDICZVK.js +0 -20
- package/dist/safe-bash/chunks/chunk-MHMMRCYC.js +0 -3464
- package/dist/safe-bash/chunks/chunk-UE5KZDEK.js +0 -77
- package/dist/safe-bash/chunks/chunk-VSAJ4OTM.js +0 -962
- package/dist/safe-bash/chunks/csvkit-TACDU7FC.js +0 -1618
- package/dist/safe-bash/chunks/implementation-MLFHUQ5M.js +0 -133
- package/dist/safe-bash/commands/csvkit/sync.js +0 -1639
- package/dist/safe-bash/commands/node/unconfigured.d.ts +0 -3
- package/dist/safe-bash/commands/node/unconfigured.js +0 -10
- package/dist/safe-bash/commands/pandoc/implementation.d.ts +0 -8
- package/dist/safe-bash/commands/pandoc/implementation.js +0 -94
- package/dist/safe-bash-mcp/index.browser.js +0 -9157
- package/dist/safe-bash/command-chunks/{chunk-ZRRBXU3M.js → chunk-GIN5GUDP.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-LAOM65EE.js → chunk-IEO4XVN6.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-364TMWBT.js → chunk-MWREVL44.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-464RVBGB.js → chunk-Q5TDKFHK.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-AJR3AQYA.js → chunk-UKX3LZHR.js} +0 -0
- package/dist/safe-bash/command-chunks/{chunk-XIIBTGC5.js → chunk-XPXEQKRW.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-FDBUV4HJ.js → chunk-Y4HGTG3E.js} +3 -3
- /package/dist/{safe-bash/commands/csvkit → safe-bash-command-csvkit}/sync.d.ts +0 -0
|
@@ -1,962 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
byteLength
|
|
3
|
-
} from "./chunk-D3ANYGMC.js";
|
|
4
|
-
import {
|
|
5
|
-
FsError
|
|
6
|
-
} from "./chunk-VTH3MLDU.js";
|
|
7
|
-
import {
|
|
8
|
-
validatePath,
|
|
9
|
-
yieldTurn
|
|
10
|
-
} from "./chunk-NZQXYWA3.js";
|
|
11
|
-
import {
|
|
12
|
-
writeBytes
|
|
13
|
-
} from "./chunk-74GHTNJA.js";
|
|
14
|
-
import {
|
|
15
|
-
UsageError,
|
|
16
|
-
codeOf,
|
|
17
|
-
diagnostic,
|
|
18
|
-
options,
|
|
19
|
-
pathOf,
|
|
20
|
-
registerDefaultExecutors,
|
|
21
|
-
requireOperands,
|
|
22
|
-
syncCommandEvaluators,
|
|
23
|
-
value
|
|
24
|
-
} from "./chunk-E7OYNDGL.js";
|
|
25
|
-
import {
|
|
26
|
-
init_platform
|
|
27
|
-
} from "./chunk-B7TAL7S5.js";
|
|
28
|
-
|
|
29
|
-
// packages/safe-bash/src/commands/metadata/index.ts
|
|
30
|
-
init_platform();
|
|
31
|
-
|
|
32
|
-
// packages/safe-bash/src/commands/metadata/chmod.ts
|
|
33
|
-
init_platform();
|
|
34
|
-
import { modeChange } from "../../safe-bash-io-engine/commands/mode-change.js";
|
|
35
|
-
import { modeChange as modeChange2 } from "../../safe-bash-io-engine/commands/mode-change.js";
|
|
36
|
-
import { bindConditionalMutation } from "@poe-platform/safe-fs/core";
|
|
37
|
-
|
|
38
|
-
// packages/safe-bash/src/fs/creation-mask.ts
|
|
39
|
-
init_platform();
|
|
40
|
-
import { abortManagedController, addAbortSignalWaiter, builtInDirectContextExecutors, chargeRuntimeFileSystemOperation, combineManagedSignals, createManagedControlController, creationUmask, getRuntimeBackingFileSystem, interruptible, isManagedAbortSignal, isManagedControlSignal, isSyncResolved, notifyAbortSignalWaiters, registerManagedAbortSignal, registerRuntimeBackingFileSystem, removeAbortSignalWaiter, syncCommandEvaluators as syncCommandEvaluators2, toNativeAbortSignal } from "../../safe-bash-contracts/runtime-control.js";
|
|
41
|
-
|
|
42
|
-
// packages/safe-bash/src/commands/gnu-information.ts
|
|
43
|
-
init_platform();
|
|
44
|
-
import { gnuInformation, gnuInformationSync } from "../../safe-bash-io-engine/gnu-information.js";
|
|
45
|
-
|
|
46
|
-
// packages/safe-bash/src/commands/metadata/internal.ts
|
|
47
|
-
init_platform();
|
|
48
|
-
function settings(options2 = {}) {
|
|
49
|
-
const limits = { maxEntries: Infinity, maxDepth: Infinity, maxOutputBytes: Infinity, maxArgumentBytes: Infinity, maxAttempts: Infinity, maxArguments: Infinity, ...options2.limits };
|
|
50
|
-
for (const [key, value2] of Object.entries(limits)) {
|
|
51
|
-
if (value2 !== Infinity && (!Number.isSafeInteger(value2) || value2 < (key === "maxDepth" ? 0 : 1))) throw new RangeError(`Invalid metadata limit: ${key}`);
|
|
52
|
-
}
|
|
53
|
-
const umask = options2.umask ?? 18;
|
|
54
|
-
if (!Number.isInteger(umask) || umask < 0 || umask > 511) throw new RangeError("Invalid metadata umask");
|
|
55
|
-
return { limits, umask };
|
|
56
|
-
}
|
|
57
|
-
var MetadataBudget = class {
|
|
58
|
-
constructor(context, limits) {
|
|
59
|
-
this.context = context;
|
|
60
|
-
this.limits = limits;
|
|
61
|
-
if (context.args.reduce((size, argument) => size + byteLength(argument), 0) > limits.maxArgumentBytes) throw new FsError("EFBIG", { message: "metadata argument limit exceeded" });
|
|
62
|
-
}
|
|
63
|
-
context;
|
|
64
|
-
limits;
|
|
65
|
-
entries = 0;
|
|
66
|
-
outputBytes = 0;
|
|
67
|
-
get remainingEntries() {
|
|
68
|
-
return this.limits.maxEntries - this.entries;
|
|
69
|
-
}
|
|
70
|
-
async step(depth = 0) {
|
|
71
|
-
this.context.signal.throwIfAborted();
|
|
72
|
-
if (++this.entries > this.limits.maxEntries || depth > this.limits.maxDepth) throw new FsError("EFBIG", { message: "metadata traversal limit exceeded" });
|
|
73
|
-
if (this.entries % 128 === 0) await yieldTurn();
|
|
74
|
-
this.context.signal.throwIfAborted();
|
|
75
|
-
}
|
|
76
|
-
async output(text) {
|
|
77
|
-
const bytes = typeof text === "string" ? new TextEncoder().encode(text) : text;
|
|
78
|
-
if (bytes.byteLength > this.limits.maxOutputBytes - this.outputBytes) throw new FsError("EFBIG", { message: "metadata output limit exceeded" });
|
|
79
|
-
this.outputBytes += bytes.byteLength;
|
|
80
|
-
await writeBytes(this.context.stdout, bytes, this.context.signal);
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
function metadataCommand(name, handler) {
|
|
84
|
-
return { name, async execute(context) {
|
|
85
|
-
context.signal.throwIfAborted();
|
|
86
|
-
try {
|
|
87
|
-
const infoPromise = gnuInformation(name, context);
|
|
88
|
-
if (infoPromise) {
|
|
89
|
-
const info = await infoPromise;
|
|
90
|
-
if (info) return info;
|
|
91
|
-
}
|
|
92
|
-
return await handler(context);
|
|
93
|
-
} catch (error) {
|
|
94
|
-
context.signal.throwIfAborted();
|
|
95
|
-
await diagnostic(context, error);
|
|
96
|
-
return { exitCode: 1 };
|
|
97
|
-
}
|
|
98
|
-
} };
|
|
99
|
-
}
|
|
100
|
-
function permissionString(mode, type) {
|
|
101
|
-
let text = type === "directory" ? "d" : type === "symlink" ? "l" : type === "character" ? "c" : "-";
|
|
102
|
-
for (const [read, write, execute, special, lower, upper] of [
|
|
103
|
-
[256, 128, 64, 2048, "s", "S"],
|
|
104
|
-
[32, 16, 8, 1024, "s", "S"],
|
|
105
|
-
[4, 2, 1, 512, "t", "T"]
|
|
106
|
-
]) {
|
|
107
|
-
text += mode & read ? "r" : "-";
|
|
108
|
-
text += mode & write ? "w" : "-";
|
|
109
|
-
text += mode & special ? mode & execute ? lower : upper : mode & execute ? "x" : "-";
|
|
110
|
-
}
|
|
111
|
-
return text;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// packages/safe-bash/src/commands/metadata/chmod.ts
|
|
115
|
-
function createChmodCommand(configuration = {}) {
|
|
116
|
-
const configured = settings(configuration);
|
|
117
|
-
const configuredUmask = configuration.umask === void 0 ? void 0 : configured.umask;
|
|
118
|
-
return metadataCommand("chmod", async (context) => {
|
|
119
|
-
const budget = new MetadataBudget(context, configured.limits);
|
|
120
|
-
const modeOptions = [];
|
|
121
|
-
let ended = false, referenceValue = false;
|
|
122
|
-
const args = context.args.flatMap((argument) => {
|
|
123
|
-
if (referenceValue) {
|
|
124
|
-
referenceValue = false;
|
|
125
|
-
return [argument];
|
|
126
|
-
}
|
|
127
|
-
if (argument === "--") ended = true;
|
|
128
|
-
if (ended) return [argument];
|
|
129
|
-
if (argument === "--reference") referenceValue = true;
|
|
130
|
-
if (argument.startsWith("-") && argument.length > 1 && "rwxXstugo01234567".includes(argument[1])) {
|
|
131
|
-
modeOptions.push(argument);
|
|
132
|
-
return [];
|
|
133
|
-
}
|
|
134
|
-
return [argument];
|
|
135
|
-
});
|
|
136
|
-
const parsed = options(args, "Rvcf", { recursive: "R", verbose: "v", changes: "c", silent: "f", quiet: "f", reference: "reference:" });
|
|
137
|
-
const reference = value(parsed, "reference");
|
|
138
|
-
if (reference !== void 0 && modeOptions.length) throw new UsageError("cannot combine mode and --reference options");
|
|
139
|
-
requireOperands(parsed.operands, reference === void 0 && !modeOptions.length ? 2 : 1);
|
|
140
|
-
const mode = modeOptions.length ? modeOptions.join(",") : reference === void 0 ? parsed.operands.shift() : void 0;
|
|
141
|
-
const mask = configuredUmask ?? Reflect.get(context.fs, creationUmask);
|
|
142
|
-
const activeUmask = typeof mask === "number" ? mask : configured.umask;
|
|
143
|
-
const change = mode === void 0 ? void 0 : modeChange(mode, activeUmask);
|
|
144
|
-
const paths = parsed.operands;
|
|
145
|
-
if (context.fs.capabilities.readOnly) throw new FsError("EROFS", { syscall: "chmod" });
|
|
146
|
-
if (!context.fs.chmod || context.fs.capabilities.permissions === false) throw new FsError("ENOTSUP", { syscall: "chmod" });
|
|
147
|
-
const referenceMode = reference === void 0 ? void 0 : (await context.fs.stat(pathOf(context, reference), { signal: context.signal })).mode & 4095;
|
|
148
|
-
let exitCode = 0;
|
|
149
|
-
const visit = async (path, display, depth, top) => {
|
|
150
|
-
await budget.step(depth);
|
|
151
|
-
const link = await context.fs.lstat(path, { signal: context.signal });
|
|
152
|
-
if (link.type === "symlink" && !top) return;
|
|
153
|
-
const target = link.type === "symlink" ? await context.fs.realpath(path, { signal: context.signal }) : path;
|
|
154
|
-
const stat = link.type === "symlink" ? await context.fs.stat(target, { signal: context.signal }) : link;
|
|
155
|
-
const mode2 = referenceMode ?? change(stat);
|
|
156
|
-
if (parsed.flags.has("R") && stat.type === "directory" && await context.fs.realpath(target, { signal: context.signal }) === "/") throw new FsError("EBUSY", { syscall: "chmod", path, message: "refusing recursive mode changes at virtual root" });
|
|
157
|
-
const canonicalTarget = await context.fs.realpath(target, { signal: context.signal });
|
|
158
|
-
const apply = async () => {
|
|
159
|
-
context.signal.throwIfAborted();
|
|
160
|
-
const currentCanonical = await context.fs.realpath(target, { signal: context.signal });
|
|
161
|
-
if (currentCanonical !== canonicalTarget) throw new FsError("EIO", { syscall: "chmod", path, message: "path changed during permission update" });
|
|
162
|
-
const fresh = await context.fs.lstat(canonicalTarget, { signal: context.signal });
|
|
163
|
-
if (fresh.type === "symlink" || fresh.type !== stat.type || stat.ino !== void 0 && fresh.ino !== stat.ino || stat.dev !== void 0 && fresh.dev !== stat.dev) throw new FsError("EIO", { syscall: "chmod", path, message: "path changed during permission update" });
|
|
164
|
-
const capabilities = await context.fs.capabilitiesFor?.(canonicalTarget, { signal: context.signal, conditionalChmod: true }) ?? context.fs.capabilities;
|
|
165
|
-
context.signal.throwIfAborted();
|
|
166
|
-
if (capabilities.conditionalChmod !== true) throw new FsError("ENOTSUP", { syscall: "chmod", path, message: "conditional permission updates are not supported" });
|
|
167
|
-
const parentPath = canonicalTarget.slice(0, canonicalTarget.lastIndexOf("/")) || "/";
|
|
168
|
-
const ancestorPaths = ["/"];
|
|
169
|
-
if (parentPath !== "/") {
|
|
170
|
-
let prefix = "";
|
|
171
|
-
for (const part of parentPath.split("/").filter(Boolean)) {
|
|
172
|
-
prefix += `/${part}`;
|
|
173
|
-
ancestorPaths.push(prefix);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
const ancestors = await Promise.all(ancestorPaths.map(async (entryPath) => ({
|
|
177
|
-
path: entryPath,
|
|
178
|
-
stat: await context.fs.lstat(entryPath, { signal: context.signal })
|
|
179
|
-
})));
|
|
180
|
-
const parentStat = ancestors.at(-1).stat;
|
|
181
|
-
const mutation = { signal: context.signal, parent: parentStat, expected: fresh, ancestors };
|
|
182
|
-
await bindConditionalMutation(
|
|
183
|
-
fresh.identityScope,
|
|
184
|
-
{ path: canonicalTarget, parent: parentStat, expected: fresh, ancestors },
|
|
185
|
-
() => context.fs.chmod(canonicalTarget, mode2, mutation)
|
|
186
|
-
);
|
|
187
|
-
if (parsed.flags.has("v") || parsed.flags.has("c") && mode2 !== (stat.mode & 4095)) {
|
|
188
|
-
await budget.output(`mode of '${display}' ${mode2 === (stat.mode & 4095) ? "retained as" : "changed from " + (stat.mode & 4095).toString(8).padStart(4, "0") + " (" + permissionString(stat.mode, stat.type).slice(1) + ") to"} ${mode2.toString(8).padStart(4, "0")} (${permissionString(mode2, stat.type).slice(1)})
|
|
189
|
-
`);
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
const deferred = stat.type === "directory" && parsed.flags.has("R") && (stat.mode & 511 & ~mode2) !== 0;
|
|
193
|
-
if (!deferred) await apply();
|
|
194
|
-
if (stat.type === "directory" && parsed.flags.has("R")) {
|
|
195
|
-
const entries = await context.fs.readdir(target, {
|
|
196
|
-
signal: context.signal,
|
|
197
|
-
...Number.isFinite(budget.remainingEntries) ? { maxEntries: budget.remainingEntries } : {}
|
|
198
|
-
});
|
|
199
|
-
if (entries.length > budget.remainingEntries) throw new FsError("EFBIG", { message: "metadata traversal limit exceeded" });
|
|
200
|
-
for (const entry of entries) {
|
|
201
|
-
if (!entry.name || entry.name === "." || entry.name === ".." || entry.name.includes("/") || entry.name.includes("\0")) throw new FsError("EIO", { message: "invalid directory entry" });
|
|
202
|
-
try {
|
|
203
|
-
await visit(`${target.replace(/\/$/u, "")}/${entry.name}`, `${display.replace(/\/$/u, "")}/${entry.name}`, depth + 1, false);
|
|
204
|
-
} catch (error) {
|
|
205
|
-
context.signal.throwIfAborted();
|
|
206
|
-
if (codeOf(error) === "EFBIG") throw error;
|
|
207
|
-
exitCode = 1;
|
|
208
|
-
if (!parsed.flags.has("f")) await diagnostic(context, error);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
if (deferred) await apply();
|
|
213
|
-
};
|
|
214
|
-
for (const operand of paths) {
|
|
215
|
-
try {
|
|
216
|
-
await visit(pathOf(context, operand), operand, 0, true);
|
|
217
|
-
} catch (error) {
|
|
218
|
-
context.signal.throwIfAborted();
|
|
219
|
-
if (codeOf(error) === "EFBIG") throw error;
|
|
220
|
-
exitCode = 1;
|
|
221
|
-
if (!parsed.flags.has("f")) await diagnostic(context, error);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
return { exitCode };
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
function evalSyncChmod(opArgs, umask, chmodNodeSync) {
|
|
228
|
-
const gnuInfo = gnuInformationSync("chmod", opArgs);
|
|
229
|
-
if (gnuInfo !== void 0) return gnuInfo;
|
|
230
|
-
if (!chmodNodeSync) return void 0;
|
|
231
|
-
try {
|
|
232
|
-
const modeOptions = [];
|
|
233
|
-
let ended = false;
|
|
234
|
-
let referenceValue = false;
|
|
235
|
-
const args = [];
|
|
236
|
-
for (const argument of opArgs) {
|
|
237
|
-
if (referenceValue) {
|
|
238
|
-
referenceValue = false;
|
|
239
|
-
args.push(argument);
|
|
240
|
-
continue;
|
|
241
|
-
}
|
|
242
|
-
if (argument === "--") {
|
|
243
|
-
ended = true;
|
|
244
|
-
args.push(argument);
|
|
245
|
-
continue;
|
|
246
|
-
}
|
|
247
|
-
if (!ended && argument === "--reference") {
|
|
248
|
-
referenceValue = true;
|
|
249
|
-
args.push(argument);
|
|
250
|
-
continue;
|
|
251
|
-
}
|
|
252
|
-
if (!ended && argument.startsWith("-") && argument.length > 1 && "rwxXstugo01234567".includes(argument[1])) {
|
|
253
|
-
modeOptions.push(argument);
|
|
254
|
-
continue;
|
|
255
|
-
}
|
|
256
|
-
args.push(argument);
|
|
257
|
-
}
|
|
258
|
-
const parsed = options(args, "vcf", { verbose: "v", changes: "c", silent: "f", quiet: "f", reference: "reference:" });
|
|
259
|
-
const reference = value(parsed, "reference");
|
|
260
|
-
if (reference !== void 0 && modeOptions.length) return void 0;
|
|
261
|
-
const minOps = reference !== void 0 || modeOptions.length ? 1 : 2;
|
|
262
|
-
if (parsed.operands.length < minOps) return void 0;
|
|
263
|
-
let referenceMode;
|
|
264
|
-
if (reference !== void 0) {
|
|
265
|
-
if (!chmodNodeSync(reference, (stat) => {
|
|
266
|
-
referenceMode = stat.mode & 4095;
|
|
267
|
-
return stat.mode;
|
|
268
|
-
}) || referenceMode === void 0) {
|
|
269
|
-
return void 0;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
const mode = modeOptions.length ? modeOptions.join(",") : reference === void 0 ? parsed.operands.shift() : void 0;
|
|
273
|
-
const change = mode === void 0 ? void 0 : modeChange(mode, umask);
|
|
274
|
-
let out = "";
|
|
275
|
-
for (const op of parsed.operands) {
|
|
276
|
-
let line = "";
|
|
277
|
-
const ok = chmodNodeSync(op, (stat) => {
|
|
278
|
-
const oldMode = stat.mode & 4095;
|
|
279
|
-
const nextMode = (referenceMode ?? change(stat)) & 4095;
|
|
280
|
-
if (parsed.flags.has("v") || parsed.flags.has("c") && nextMode !== oldMode) {
|
|
281
|
-
line = `mode of '${op}' ${nextMode === oldMode ? "retained as" : "changed from " + oldMode.toString(8).padStart(4, "0") + " (" + permissionString(oldMode, stat.type).slice(1) + ") to"} ${nextMode.toString(8).padStart(4, "0")} (${permissionString(nextMode, stat.type).slice(1)})
|
|
282
|
-
`;
|
|
283
|
-
}
|
|
284
|
-
return nextMode;
|
|
285
|
-
});
|
|
286
|
-
if (!ok) return void 0;
|
|
287
|
-
out += line;
|
|
288
|
-
}
|
|
289
|
-
return out;
|
|
290
|
-
} catch {
|
|
291
|
-
return void 0;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
syncCommandEvaluators.evalSyncChmod = evalSyncChmod;
|
|
295
|
-
|
|
296
|
-
// packages/safe-bash/src/commands/metadata/stat.ts
|
|
297
|
-
init_platform();
|
|
298
|
-
var syncStatEncoder = new TextEncoder();
|
|
299
|
-
function concatBytes(chunks) {
|
|
300
|
-
if (chunks.length === 0) return new Uint8Array(0);
|
|
301
|
-
if (chunks.length === 1) return chunks[0];
|
|
302
|
-
let total = 0;
|
|
303
|
-
for (let i = 0; i < chunks.length; i++) total += chunks[i].byteLength;
|
|
304
|
-
const out = new Uint8Array(total);
|
|
305
|
-
let offset = 0;
|
|
306
|
-
for (let i = 0; i < chunks.length; i++) {
|
|
307
|
-
const c = chunks[i];
|
|
308
|
-
out.set(c, offset);
|
|
309
|
-
offset += c.byteLength;
|
|
310
|
-
}
|
|
311
|
-
return out;
|
|
312
|
-
}
|
|
313
|
-
function allocSpaces(length) {
|
|
314
|
-
const out = new Uint8Array(length);
|
|
315
|
-
out.fill(32);
|
|
316
|
-
return out;
|
|
317
|
-
}
|
|
318
|
-
function parse(args) {
|
|
319
|
-
let follow = false;
|
|
320
|
-
let filesystem = false;
|
|
321
|
-
let terse = false;
|
|
322
|
-
let format;
|
|
323
|
-
let printf = false;
|
|
324
|
-
let literal = false;
|
|
325
|
-
const paths = [];
|
|
326
|
-
for (let index = 0; index < args.length; index++) {
|
|
327
|
-
const argument = args[index];
|
|
328
|
-
if (literal || argument === "-" || !argument.startsWith("-")) paths.push(argument);
|
|
329
|
-
else if (argument === "--") literal = true;
|
|
330
|
-
else if (argument === "--dereference") follow = true;
|
|
331
|
-
else if (argument === "--cached=default" || argument === "--cached=never" || argument === "--cached=always") continue;
|
|
332
|
-
else if (argument === "--file-system") filesystem = true;
|
|
333
|
-
else if (argument === "--terse") terse = true;
|
|
334
|
-
else if (argument === "--format" || argument.startsWith("--format=") || argument === "--printf" || argument.startsWith("--printf=")) {
|
|
335
|
-
printf = argument.startsWith("--printf");
|
|
336
|
-
format = argument.includes("=") ? argument.slice(argument.indexOf("=") + 1) : args[++index];
|
|
337
|
-
if (format === void 0) throw new UsageError(`missing format for '${argument}'`);
|
|
338
|
-
} else if (!argument.startsWith("--")) {
|
|
339
|
-
for (let offset = 1; offset < argument.length; offset++) {
|
|
340
|
-
if (argument[offset] === "L") follow = true;
|
|
341
|
-
else if (argument[offset] === "f") filesystem = true;
|
|
342
|
-
else if (argument[offset] === "t") terse = true;
|
|
343
|
-
else if (argument[offset] === "c") {
|
|
344
|
-
format = argument.slice(offset + 1) || args[++index];
|
|
345
|
-
if (format === void 0) throw new UsageError("missing format for '-c'");
|
|
346
|
-
printf = false;
|
|
347
|
-
break;
|
|
348
|
-
} else throw new UsageError(`unrecognized option '${argument}'`);
|
|
349
|
-
}
|
|
350
|
-
} else throw new UsageError(`unrecognized option '${argument}'`);
|
|
351
|
-
}
|
|
352
|
-
requireOperands(paths);
|
|
353
|
-
return { follow, filesystem, terse, format, printf, paths };
|
|
354
|
-
}
|
|
355
|
-
function quoted(text, style) {
|
|
356
|
-
if (style === "literal") return text;
|
|
357
|
-
if (style && !["shell-escape-always", "shell-always"].includes(style)) throw new FsError("ENOTSUP", { message: `unsupported QUOTING_STYLE: ${style}` });
|
|
358
|
-
if (style !== "shell-always" && /[\x00-\x1f\x7f]/u.test(text)) {
|
|
359
|
-
return "$'" + text.replace(/[\\'\x00-\x1f\x7f]/gu, (character) => {
|
|
360
|
-
if (character === "\\" || character === "'") return `\\${character}`;
|
|
361
|
-
if (character === "\n") return "\\n";
|
|
362
|
-
if (character === "\r") return "\\r";
|
|
363
|
-
if (character === " ") return "\\t";
|
|
364
|
-
return `\\${character.charCodeAt(0).toString(8).padStart(3, "0")}`;
|
|
365
|
-
}) + "'";
|
|
366
|
-
}
|
|
367
|
-
return `'${text.replace(/'/gu, "'\\''")}'`;
|
|
368
|
-
}
|
|
369
|
-
function available(value2, field) {
|
|
370
|
-
if (value2 === void 0) throw new FsError("ENOTSUP", { syscall: "stat", message: `filesystem does not expose ${field}` });
|
|
371
|
-
if (!Number.isFinite(value2)) throw new FsError("EIO", { syscall: "stat", message: `invalid ${field}` });
|
|
372
|
-
return value2;
|
|
373
|
-
}
|
|
374
|
-
function timestamp(milliseconds) {
|
|
375
|
-
const value2 = available(milliseconds, "timestamp");
|
|
376
|
-
if (Math.abs(value2) > 864e13) throw new FsError("EIO", { message: "invalid filesystem timestamp" });
|
|
377
|
-
const [coefficient = "0", exponent = "0"] = Math.abs(value2).toString().split("e");
|
|
378
|
-
const [integer = "0", fraction = ""] = coefficient.split(".");
|
|
379
|
-
const digits = BigInt(integer + fraction);
|
|
380
|
-
const power = Number(exponent) - fraction.length + 6;
|
|
381
|
-
const divisor = power < 0 ? 10n ** BigInt(-power) : 1n;
|
|
382
|
-
const magnitude = power < 0 ? (digits + divisor / 2n) / divisor : digits * 10n ** BigInt(power);
|
|
383
|
-
const nanoseconds = value2 < 0 ? -magnitude : magnitude;
|
|
384
|
-
const remainder = (nanoseconds % 1000000000n + 1000000000n) % 1000000000n;
|
|
385
|
-
const seconds = (nanoseconds - remainder) / 1000000000n;
|
|
386
|
-
const date = new Date(Number(seconds * 1000n));
|
|
387
|
-
if (Number.isNaN(date.getTime())) throw new FsError("EIO", { message: "invalid filesystem timestamp" });
|
|
388
|
-
return `${date.toISOString().replace("T", " ").replace(/\.\d{3}Z$/u, `.${remainder.toString().padStart(9, "0")}`)} +0000`;
|
|
389
|
-
}
|
|
390
|
-
function epoch(milliseconds, precision) {
|
|
391
|
-
const value2 = available(milliseconds, "timestamp");
|
|
392
|
-
const [coefficient = "0", exponent = "0"] = Math.abs(value2).toString().split("e");
|
|
393
|
-
const [integer = "0", decimal = ""] = coefficient.split(".");
|
|
394
|
-
const digits = BigInt(integer + decimal);
|
|
395
|
-
const places = Math.min(precision, 9);
|
|
396
|
-
const scale = 10n ** BigInt(places);
|
|
397
|
-
const power = Number(exponent) - decimal.length - 3 + places;
|
|
398
|
-
const absolute = power < 0 ? digits / 10n ** BigInt(-power) : digits * 10n ** BigInt(power);
|
|
399
|
-
const fraction = absolute % scale;
|
|
400
|
-
const seconds = value2 < 0 && fraction === 0n ? -Math.floor(value2 / 1e3) : absolute / scale;
|
|
401
|
-
const suffix = precision ? "." + fraction.toString().padStart(places, "0") + "0".repeat(precision - places) : "";
|
|
402
|
-
return `${value2 < 0 ? "-" : ""}${seconds}${suffix}`;
|
|
403
|
-
}
|
|
404
|
-
function directive(format, start) {
|
|
405
|
-
let index = start + 1;
|
|
406
|
-
const flagsStart = index;
|
|
407
|
-
while (index < format.length && "-+ #0".includes(format[index])) index++;
|
|
408
|
-
const flags = format.slice(flagsStart, index);
|
|
409
|
-
const widthStart = index;
|
|
410
|
-
while (index < format.length && format[index] >= "0" && format[index] <= "9") index++;
|
|
411
|
-
const width = format.slice(widthStart, index);
|
|
412
|
-
let precision;
|
|
413
|
-
if (format[index] === ".") {
|
|
414
|
-
const precisionStart = ++index;
|
|
415
|
-
while (index < format.length && format[index] >= "0" && format[index] <= "9") index++;
|
|
416
|
-
precision = format.slice(precisionStart, index);
|
|
417
|
-
}
|
|
418
|
-
const code = format[index];
|
|
419
|
-
if (code === void 0) throw new UsageError("invalid stat format directive");
|
|
420
|
-
const codePoint = code.charCodeAt(0);
|
|
421
|
-
if (code !== "%" && !(codePoint >= 65 && codePoint <= 90) && !(codePoint >= 97 && codePoint <= 122)) {
|
|
422
|
-
throw new UsageError("invalid stat format directive");
|
|
423
|
-
}
|
|
424
|
-
return { code, flags, length: index + 1 - start, precision, width };
|
|
425
|
-
}
|
|
426
|
-
function formatField(text, code, flags, width, precision, numeric, epoch2) {
|
|
427
|
-
if (numeric) {
|
|
428
|
-
const nonzero = !/^0+$/u.test(text);
|
|
429
|
-
if (!epoch2 && precision !== void 0) text = precision === 0 && !nonzero ? "" : text.padStart(precision, "0");
|
|
430
|
-
if (flags.includes("#")) text = code === "a" ? text.startsWith("0") ? text : `0${text}` : (code === "f" || code === "D") && nonzero ? `0x${text}` : text;
|
|
431
|
-
if (epoch2 && !text.startsWith("-") && (flags.includes("+") || flags.includes(" "))) text = `${flags.includes("+") ? "+" : " "}${text}`;
|
|
432
|
-
}
|
|
433
|
-
if (epoch2 && precision) {
|
|
434
|
-
const decimal = text.indexOf(".");
|
|
435
|
-
const integerWidth = width > precision + 2 && !flags.includes("-") ? width - precision - 1 : 0;
|
|
436
|
-
const integer = formatField(text.slice(0, decimal), code, flags, integerWidth, void 0, true, false);
|
|
437
|
-
const trailingWidth = integer.length < width && 1 < width - integer.length ? Math.abs(width - integer.length - 1 - precision) : 0;
|
|
438
|
-
return concatBytes([integer, syncStatEncoder.encode(text.slice(decimal)), allocSpaces(trailingWidth)]);
|
|
439
|
-
}
|
|
440
|
-
const encoded = syncStatEncoder.encode(text);
|
|
441
|
-
const bytes = !numeric && precision !== void 0 ? encoded.subarray(0, precision) : encoded;
|
|
442
|
-
const padding = Math.max(0, width - bytes.length);
|
|
443
|
-
if (flags.includes("-")) return concatBytes([bytes, allocSpaces(padding)]);
|
|
444
|
-
if (numeric && flags.includes("0") && (epoch2 || precision === void 0) && padding) {
|
|
445
|
-
const prefix = /^[+ -]|^0x/u.exec(text)?.[0] ?? "";
|
|
446
|
-
return syncStatEncoder.encode(prefix + "0".repeat(padding) + text.slice(prefix.length));
|
|
447
|
-
}
|
|
448
|
-
return concatBytes([allocSpaces(padding), bytes]);
|
|
449
|
-
}
|
|
450
|
-
async function render(context, path, name, stat, format, escapes, limit, filesystem, terse) {
|
|
451
|
-
const chunks = [];
|
|
452
|
-
let bytes = 0;
|
|
453
|
-
const append = (text) => {
|
|
454
|
-
const chunk = typeof text === "string" ? new TextEncoder().encode(text) : text;
|
|
455
|
-
bytes += chunk.byteLength;
|
|
456
|
-
if (bytes > limit) throw new FsError("EFBIG", { message: "stat format output limit exceeded" });
|
|
457
|
-
chunks.push(chunk);
|
|
458
|
-
};
|
|
459
|
-
for (let index = 0; index < format.length; ) {
|
|
460
|
-
context.signal.throwIfAborted();
|
|
461
|
-
if (escapes && format[index] === "\\") {
|
|
462
|
-
const named = { a: "\x07", b: "\b", e: "\x1B", f: "\f", n: "\n", r: "\r", t: " ", v: "\v", "\\": "\\", '"': '"' };
|
|
463
|
-
const code2 = format[index + 1] ?? "";
|
|
464
|
-
if (Object.hasOwn(named, code2)) {
|
|
465
|
-
append(named[code2]);
|
|
466
|
-
index += 2;
|
|
467
|
-
continue;
|
|
468
|
-
}
|
|
469
|
-
const radix = code2 === "x" ? 16 : 8;
|
|
470
|
-
const start = index + (radix === 16 ? 2 : 1);
|
|
471
|
-
const end = Math.min(format.length, start + (radix === 16 ? 2 : 3));
|
|
472
|
-
let offset = start;
|
|
473
|
-
let value2 = 0;
|
|
474
|
-
while (offset < end) {
|
|
475
|
-
const digit = "0123456789abcdef".indexOf(format[offset].toLowerCase());
|
|
476
|
-
if (digit < 0 || digit >= radix) break;
|
|
477
|
-
value2 = value2 * radix + digit;
|
|
478
|
-
offset++;
|
|
479
|
-
}
|
|
480
|
-
if (offset === start) {
|
|
481
|
-
append(format[index++]);
|
|
482
|
-
continue;
|
|
483
|
-
}
|
|
484
|
-
append(Uint8Array.of(value2));
|
|
485
|
-
index = offset;
|
|
486
|
-
continue;
|
|
487
|
-
}
|
|
488
|
-
if (format[index] !== "%") {
|
|
489
|
-
const point = String.fromCodePoint(format.codePointAt(index));
|
|
490
|
-
append(point);
|
|
491
|
-
index += point.length;
|
|
492
|
-
continue;
|
|
493
|
-
}
|
|
494
|
-
const parsed = directive(format, index);
|
|
495
|
-
index += parsed.length;
|
|
496
|
-
const { code, flags } = parsed;
|
|
497
|
-
const width = Number(parsed.width || 0);
|
|
498
|
-
if (!Number.isSafeInteger(width) || width > limit) throw new FsError("EFBIG", { message: "stat format width limit exceeded" });
|
|
499
|
-
const epochCode = !filesystem && ["X", "Y", "Z", "W"].includes(code);
|
|
500
|
-
const precision = parsed.precision === void 0 ? void 0 : Number(parsed.precision || (epochCode ? 9 : 0));
|
|
501
|
-
if (precision !== void 0 && (!Number.isSafeInteger(precision) || precision > limit)) throw new FsError("EFBIG", { message: "stat format precision limit exceeded" });
|
|
502
|
-
if (code === "%" && parsed.length !== 2) throw new UsageError("invalid stat format directive");
|
|
503
|
-
if (filesystem) {
|
|
504
|
-
let text2;
|
|
505
|
-
if (code === "n") text2 = name;
|
|
506
|
-
else if (code === "%") text2 = "%";
|
|
507
|
-
else if (code === "T") {
|
|
508
|
-
if (stat.filesystemType === void 0) throw new FsError("ENOTSUP", { syscall: "stat", message: "filesystem does not expose its type" });
|
|
509
|
-
if (typeof stat.filesystemType !== "string" || stat.filesystemType.length === 0) throw new FsError("EIO", { syscall: "stat", message: "invalid filesystem type" });
|
|
510
|
-
text2 = stat.filesystemType;
|
|
511
|
-
} else throw new FsError("ENOTSUP", { message: `unsupported filesystem stat format: %${code}` });
|
|
512
|
-
append(formatField(text2, code, flags, width, precision, false, false));
|
|
513
|
-
continue;
|
|
514
|
-
}
|
|
515
|
-
let text;
|
|
516
|
-
let linkText;
|
|
517
|
-
let numeric = false;
|
|
518
|
-
if (["a", "A", "f"].includes(code)) available(stat.mode, "mode");
|
|
519
|
-
const times = { X: stat.atimeMs, Y: stat.mtimeMs, Z: stat.ctimeMs, W: stat.birthtimeMs };
|
|
520
|
-
if (Object.hasOwn(times, code)) {
|
|
521
|
-
text = terse && times[code] === void 0 ? "?" : epoch(available(times[code], code), precision ?? 0);
|
|
522
|
-
numeric = text !== "?";
|
|
523
|
-
} else if (code === "n") text = name;
|
|
524
|
-
else if (code === "N") {
|
|
525
|
-
text = quoted(name, context.env.QUOTING_STYLE);
|
|
526
|
-
if (stat.type === "symlink") {
|
|
527
|
-
if (!context.fs.readlink) throw new FsError("ENOTSUP", { syscall: "readlink", path });
|
|
528
|
-
linkText = quoted(await context.fs.readlink(path, { signal: context.signal }), context.env.QUOTING_STYLE);
|
|
529
|
-
}
|
|
530
|
-
} else if (code === "%") text = "%";
|
|
531
|
-
else if (code === "A") text = permissionString(stat.mode, stat.type);
|
|
532
|
-
else if (code === "U") text = available(stat.uid, "u") === 0 ? "root" : String(stat.uid);
|
|
533
|
-
else if (code === "G") text = available(stat.gid, "g") === 0 ? "root" : String(stat.gid);
|
|
534
|
-
else if (code === "m") text = "/";
|
|
535
|
-
else if (code === "F") text = stat.type === "directory" ? "directory" : stat.type === "symlink" ? "symbolic link" : stat.type === "character" ? "character special file" : stat.size === 0 ? "regular empty file" : "regular file";
|
|
536
|
-
else if (["x", "y", "z", "w"].includes(code)) {
|
|
537
|
-
const value2 = times[code.toUpperCase()];
|
|
538
|
-
text = code === "w" && value2 === void 0 ? "-" : timestamp(available(value2, code));
|
|
539
|
-
} else {
|
|
540
|
-
const fields = {
|
|
541
|
-
s: stat.size,
|
|
542
|
-
a: stat.mode & 4095,
|
|
543
|
-
f: stat.mode,
|
|
544
|
-
i: stat.ino,
|
|
545
|
-
h: stat.nlink,
|
|
546
|
-
u: stat.uid,
|
|
547
|
-
g: stat.gid,
|
|
548
|
-
d: stat.dev,
|
|
549
|
-
D: stat.dev,
|
|
550
|
-
B: 512,
|
|
551
|
-
b: stat.allocatedBytes === void 0 ? void 0 : Math.ceil(stat.allocatedBytes / 512),
|
|
552
|
-
o: stat.ioBlockSize,
|
|
553
|
-
t: stat.rdevMajor,
|
|
554
|
-
T: stat.rdevMinor
|
|
555
|
-
};
|
|
556
|
-
if (!Object.hasOwn(fields, code)) throw new FsError("ENOTSUP", { message: `unsupported stat format: %${code}` });
|
|
557
|
-
const value2 = fields[code];
|
|
558
|
-
text = terse && value2 === void 0 ? "?" : available(value2, code).toString(code === "a" ? 8 : ["f", "D", "t", "T"].includes(code) ? 16 : 10);
|
|
559
|
-
numeric = text !== "?";
|
|
560
|
-
}
|
|
561
|
-
append(formatField(text, code, flags, width, precision, numeric, epochCode));
|
|
562
|
-
if (linkText !== void 0) {
|
|
563
|
-
append(" -> ");
|
|
564
|
-
append(formatField(linkText, code, flags, width, precision, false, false));
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
return concatBytes(chunks);
|
|
568
|
-
}
|
|
569
|
-
function createStatCommand(configuration = {}) {
|
|
570
|
-
const configured = settings(configuration);
|
|
571
|
-
return metadataCommand("stat", async (context) => {
|
|
572
|
-
const budget = new MetadataBudget(context, configured.limits);
|
|
573
|
-
const parsed = parse(context.args);
|
|
574
|
-
let exitCode = 0;
|
|
575
|
-
for (const name of parsed.paths) {
|
|
576
|
-
await budget.step();
|
|
577
|
-
try {
|
|
578
|
-
const path = pathOf(context, name);
|
|
579
|
-
const stat = await context.fs[parsed.follow || parsed.filesystem ? "stat" : "lstat"](path, { signal: context.signal });
|
|
580
|
-
const terse = parsed.terse && parsed.format === void 0;
|
|
581
|
-
if (terse && parsed.filesystem) throw new FsError("ENOTSUP", { message: "filesystem terse stat is unsupported" });
|
|
582
|
-
const format = parsed.format ?? (parsed.filesystem ? " File: %n\n Type: %T" : terse ? "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o" : " File: %N\n Size: %s Type: %F\n Mode: %a (%A)\nAccess: %x\nModify: %y\nChange: %z\n Birth: %w");
|
|
583
|
-
const text = await render(context, path, name, stat, format, parsed.printf, configured.limits.maxOutputBytes, parsed.filesystem, terse);
|
|
584
|
-
await budget.output(parsed.printf ? text : concatBytes([text, Uint8Array.of(10)]));
|
|
585
|
-
} catch (error) {
|
|
586
|
-
context.signal.throwIfAborted();
|
|
587
|
-
if (codeOf(error) === "EFBIG") throw error;
|
|
588
|
-
await diagnostic(context, error);
|
|
589
|
-
exitCode = 1;
|
|
590
|
-
}
|
|
591
|
-
}
|
|
592
|
-
return { exitCode };
|
|
593
|
-
});
|
|
594
|
-
}
|
|
595
|
-
var syncStatDecoder = new TextDecoder("utf-8", { fatal: false });
|
|
596
|
-
function renderSync(path, name, stat, format, escapes, limit, filesystem, terse, quotingStyle) {
|
|
597
|
-
const chunks = [];
|
|
598
|
-
let bytes = 0;
|
|
599
|
-
const append = (text) => {
|
|
600
|
-
const chunk = typeof text === "string" ? new TextEncoder().encode(text) : text;
|
|
601
|
-
bytes += chunk.byteLength;
|
|
602
|
-
if (bytes > limit) throw new FsError("EFBIG", { message: "stat format output limit exceeded" });
|
|
603
|
-
chunks.push(chunk);
|
|
604
|
-
};
|
|
605
|
-
for (let index = 0; index < format.length; ) {
|
|
606
|
-
if (escapes && format[index] === "\\") {
|
|
607
|
-
const named = { a: "\x07", b: "\b", e: "\x1B", f: "\f", n: "\n", r: "\r", t: " ", v: "\v", "\\": "\\", '"': '"' };
|
|
608
|
-
const code2 = format[index + 1] ?? "";
|
|
609
|
-
if (Object.hasOwn(named, code2)) {
|
|
610
|
-
append(named[code2]);
|
|
611
|
-
index += 2;
|
|
612
|
-
continue;
|
|
613
|
-
}
|
|
614
|
-
const radix = code2 === "x" ? 16 : 8;
|
|
615
|
-
const start = index + (radix === 16 ? 2 : 1);
|
|
616
|
-
const end = Math.min(format.length, start + (radix === 16 ? 2 : 3));
|
|
617
|
-
let offset = start;
|
|
618
|
-
let value2 = 0;
|
|
619
|
-
while (offset < end) {
|
|
620
|
-
const digit = "0123456789abcdef".indexOf(format[offset].toLowerCase());
|
|
621
|
-
if (digit < 0 || digit >= radix) break;
|
|
622
|
-
value2 = value2 * radix + digit;
|
|
623
|
-
offset++;
|
|
624
|
-
}
|
|
625
|
-
if (offset === start) {
|
|
626
|
-
append(format[index++]);
|
|
627
|
-
continue;
|
|
628
|
-
}
|
|
629
|
-
append(Uint8Array.of(value2));
|
|
630
|
-
index = offset;
|
|
631
|
-
continue;
|
|
632
|
-
}
|
|
633
|
-
if (format[index] !== "%") {
|
|
634
|
-
const point = String.fromCodePoint(format.codePointAt(index));
|
|
635
|
-
append(point);
|
|
636
|
-
index += point.length;
|
|
637
|
-
continue;
|
|
638
|
-
}
|
|
639
|
-
const parsed = directive(format, index);
|
|
640
|
-
index += parsed.length;
|
|
641
|
-
const { code, flags } = parsed;
|
|
642
|
-
const width = Number(parsed.width || 0);
|
|
643
|
-
if (!Number.isSafeInteger(width) || width > limit) throw new FsError("EFBIG", { message: "stat format width limit exceeded" });
|
|
644
|
-
const epochCode = !filesystem && ["X", "Y", "Z", "W"].includes(code);
|
|
645
|
-
const precision = parsed.precision === void 0 ? void 0 : Number(parsed.precision || (epochCode ? 9 : 0));
|
|
646
|
-
if (precision !== void 0 && (!Number.isSafeInteger(precision) || precision > limit)) throw new FsError("EFBIG", { message: "stat format precision limit exceeded" });
|
|
647
|
-
if (code === "%" && parsed.length !== 2) throw new UsageError("invalid stat format directive");
|
|
648
|
-
if (filesystem) {
|
|
649
|
-
let text2;
|
|
650
|
-
if (code === "n") text2 = name;
|
|
651
|
-
else if (code === "%") text2 = "%";
|
|
652
|
-
else if (code === "T") {
|
|
653
|
-
if (stat.filesystemType === void 0) throw new FsError("ENOTSUP", { syscall: "stat", message: "filesystem does not expose its type" });
|
|
654
|
-
if (typeof stat.filesystemType !== "string" || stat.filesystemType.length === 0) throw new FsError("EIO", { syscall: "stat", message: "invalid filesystem type" });
|
|
655
|
-
text2 = stat.filesystemType;
|
|
656
|
-
} else throw new FsError("ENOTSUP", { message: `unsupported filesystem stat format: %${code}` });
|
|
657
|
-
append(formatField(text2, code, flags, width, precision, false, false));
|
|
658
|
-
continue;
|
|
659
|
-
}
|
|
660
|
-
let text;
|
|
661
|
-
let linkText;
|
|
662
|
-
let numeric = false;
|
|
663
|
-
if (["a", "A", "f"].includes(code)) available(stat.mode, "mode");
|
|
664
|
-
const times = { X: stat.atimeMs, Y: stat.mtimeMs, Z: stat.ctimeMs, W: stat.birthtimeMs };
|
|
665
|
-
if (Object.hasOwn(times, code)) {
|
|
666
|
-
text = terse && times[code] === void 0 ? "?" : epoch(available(times[code], code), precision ?? 0);
|
|
667
|
-
numeric = text !== "?";
|
|
668
|
-
} else if (code === "n") text = name;
|
|
669
|
-
else if (code === "N") {
|
|
670
|
-
text = quoted(name, quotingStyle);
|
|
671
|
-
if (stat.type === "symlink") {
|
|
672
|
-
if (stat.target === void 0) throw new FsError("ENOTSUP", { syscall: "readlink", path });
|
|
673
|
-
linkText = quoted(stat.target, quotingStyle);
|
|
674
|
-
}
|
|
675
|
-
} else if (code === "%") text = "%";
|
|
676
|
-
else if (code === "A") text = permissionString(stat.mode, stat.type);
|
|
677
|
-
else if (code === "U") text = available(stat.uid, "u") === 0 ? "root" : String(stat.uid);
|
|
678
|
-
else if (code === "G") text = available(stat.gid, "g") === 0 ? "root" : String(stat.gid);
|
|
679
|
-
else if (code === "m") text = "/";
|
|
680
|
-
else if (code === "F") text = stat.type === "directory" ? "directory" : stat.type === "symlink" ? "symbolic link" : stat.type === "character" ? "character special file" : stat.size === 0 ? "regular empty file" : "regular file";
|
|
681
|
-
else if (["x", "y", "z", "w"].includes(code)) {
|
|
682
|
-
const value2 = times[code.toUpperCase()];
|
|
683
|
-
text = code === "w" && value2 === void 0 ? "-" : timestamp(available(value2, code));
|
|
684
|
-
} else {
|
|
685
|
-
const fields = {
|
|
686
|
-
s: stat.size,
|
|
687
|
-
a: stat.mode & 4095,
|
|
688
|
-
f: stat.mode,
|
|
689
|
-
i: stat.ino,
|
|
690
|
-
h: stat.nlink,
|
|
691
|
-
u: stat.uid,
|
|
692
|
-
g: stat.gid,
|
|
693
|
-
d: stat.dev,
|
|
694
|
-
D: stat.dev,
|
|
695
|
-
B: 512,
|
|
696
|
-
b: stat.allocatedBytes === void 0 ? void 0 : Math.ceil(stat.allocatedBytes / 512),
|
|
697
|
-
o: stat.ioBlockSize,
|
|
698
|
-
t: stat.rdevMajor,
|
|
699
|
-
T: stat.rdevMinor
|
|
700
|
-
};
|
|
701
|
-
if (!Object.hasOwn(fields, code)) throw new FsError("ENOTSUP", { message: `unsupported stat format: %${code}` });
|
|
702
|
-
const value2 = fields[code];
|
|
703
|
-
text = terse && value2 === void 0 ? "?" : available(value2, code).toString(code === "a" ? 8 : ["f", "D", "t", "T"].includes(code) ? 16 : 10);
|
|
704
|
-
numeric = text !== "?";
|
|
705
|
-
}
|
|
706
|
-
append(formatField(text, code, flags, width, precision, numeric, epochCode));
|
|
707
|
-
if (linkText !== void 0) {
|
|
708
|
-
append(" -> ");
|
|
709
|
-
append(formatField(linkText, code, flags, width, precision, false, false));
|
|
710
|
-
}
|
|
711
|
-
}
|
|
712
|
-
return concatBytes(chunks);
|
|
713
|
-
}
|
|
714
|
-
function resolveSyncStatPath(cwd, target) {
|
|
715
|
-
const raw = target.startsWith("/") ? target : cwd.endsWith("/") ? cwd + target : `${cwd}/${target}`;
|
|
716
|
-
const parts = raw.split("/");
|
|
717
|
-
const stack = [];
|
|
718
|
-
for (const part of parts) {
|
|
719
|
-
if (!part || part === ".") continue;
|
|
720
|
-
if (part === "..") stack.pop();
|
|
721
|
-
else stack.push(part);
|
|
722
|
-
}
|
|
723
|
-
return "/" + stack.join("/");
|
|
724
|
-
}
|
|
725
|
-
function evalSyncStat(args, cwd, quotingStyle, inspectStat) {
|
|
726
|
-
let parsed;
|
|
727
|
-
try {
|
|
728
|
-
parsed = parse(args);
|
|
729
|
-
} catch {
|
|
730
|
-
return void 0;
|
|
731
|
-
}
|
|
732
|
-
const outChunks = [];
|
|
733
|
-
for (const name of parsed.paths) {
|
|
734
|
-
if (!name) return void 0;
|
|
735
|
-
const abs = resolveSyncStatPath(cwd, name);
|
|
736
|
-
const stat = inspectStat(abs, parsed.follow || parsed.filesystem);
|
|
737
|
-
if (!stat) return void 0;
|
|
738
|
-
const terse = parsed.terse && parsed.format === void 0;
|
|
739
|
-
if (terse && parsed.filesystem) return void 0;
|
|
740
|
-
const format = parsed.format ?? (parsed.filesystem ? " File: %n\n Type: %T" : terse ? "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o" : " File: %N\n Size: %s Type: %F\n Mode: %a (%A)\nAccess: %x\nModify: %y\nChange: %z\n Birth: %w");
|
|
741
|
-
try {
|
|
742
|
-
const rendered = renderSync(abs, name, stat, format, parsed.printf, 262144, parsed.filesystem, terse, quotingStyle);
|
|
743
|
-
outChunks.push(parsed.printf ? rendered : concatBytes([rendered, Uint8Array.of(10)]));
|
|
744
|
-
} catch {
|
|
745
|
-
return void 0;
|
|
746
|
-
}
|
|
747
|
-
}
|
|
748
|
-
return syncStatDecoder.decode(concatBytes(outChunks));
|
|
749
|
-
}
|
|
750
|
-
|
|
751
|
-
// packages/safe-bash/src/commands/metadata/mktemp.ts
|
|
752
|
-
init_platform();
|
|
753
|
-
|
|
754
|
-
// packages/safe-bash/src/commands/portable-random.ts
|
|
755
|
-
init_platform();
|
|
756
|
-
function randomInteger(maximum) {
|
|
757
|
-
const range = 4294967296;
|
|
758
|
-
if (!Number.isSafeInteger(maximum) || maximum < 1 || maximum > range) {
|
|
759
|
-
throw new RangeError("Random integer maximum must be an integer from 1 to 2^32");
|
|
760
|
-
}
|
|
761
|
-
const limit = Math.floor(range / maximum) * maximum;
|
|
762
|
-
const sample = new Uint32Array(1);
|
|
763
|
-
do {
|
|
764
|
-
globalThis.crypto.getRandomValues(sample);
|
|
765
|
-
} while (sample[0] >= limit);
|
|
766
|
-
return sample[0] % maximum;
|
|
767
|
-
}
|
|
768
|
-
|
|
769
|
-
// packages/safe-bash/src/commands/metadata/mktemp.ts
|
|
770
|
-
var mktempEncoder = new TextEncoder();
|
|
771
|
-
function parse2(args) {
|
|
772
|
-
let directory = false;
|
|
773
|
-
let dryRun = false;
|
|
774
|
-
let quiet = false;
|
|
775
|
-
let useTmpdir = false;
|
|
776
|
-
let deprecatedTmpdir = false;
|
|
777
|
-
let tmpdir;
|
|
778
|
-
let suffix;
|
|
779
|
-
let literal = false;
|
|
780
|
-
const operands = [];
|
|
781
|
-
for (let index = 0; index < args.length; index++) {
|
|
782
|
-
const argument = args[index];
|
|
783
|
-
if (literal || argument === "-" || !argument.startsWith("-")) operands.push(argument);
|
|
784
|
-
else if (argument === "--") literal = true;
|
|
785
|
-
else if (argument === "--directory") directory = true;
|
|
786
|
-
else if (argument === "--dry-run") dryRun = true;
|
|
787
|
-
else if (argument === "--quiet") quiet = true;
|
|
788
|
-
else if (argument === "--tmpdir" || argument.startsWith("--tmpdir=")) {
|
|
789
|
-
useTmpdir = true;
|
|
790
|
-
tmpdir = argument.includes("=") ? argument.slice(argument.indexOf("=") + 1) : "";
|
|
791
|
-
} else if (argument === "--suffix" || argument.startsWith("--suffix=")) {
|
|
792
|
-
suffix = argument.includes("=") ? argument.slice(argument.indexOf("=") + 1) : args[++index];
|
|
793
|
-
if (suffix === void 0) throw new UsageError("--suffix requires an argument");
|
|
794
|
-
} else if (!argument.startsWith("--")) {
|
|
795
|
-
for (let offset = 1; offset < argument.length; offset++) {
|
|
796
|
-
const option = argument[offset];
|
|
797
|
-
if (option === "d") directory = true;
|
|
798
|
-
else if (option === "u") dryRun = true;
|
|
799
|
-
else if (option === "q") quiet = true;
|
|
800
|
-
else if (option === "t") {
|
|
801
|
-
useTmpdir = true;
|
|
802
|
-
deprecatedTmpdir = true;
|
|
803
|
-
} else if (option === "p") {
|
|
804
|
-
tmpdir = argument.slice(offset + 1) || args[++index];
|
|
805
|
-
if (tmpdir === void 0) throw new UsageError("-p requires an argument");
|
|
806
|
-
useTmpdir = true;
|
|
807
|
-
break;
|
|
808
|
-
} else throw new UsageError(`unrecognized option '${argument}'`);
|
|
809
|
-
}
|
|
810
|
-
} else throw new UsageError(`unrecognized option '${argument}'`);
|
|
811
|
-
}
|
|
812
|
-
if (operands.length > 1) throw new UsageError("too many templates");
|
|
813
|
-
const template = operands[0] ?? "tmp.XXXXXXXXXX";
|
|
814
|
-
if (operands.length === 0) useTmpdir = true;
|
|
815
|
-
validatePath(template);
|
|
816
|
-
if (deprecatedTmpdir && template.includes("/")) throw new UsageError("template contains directory separator");
|
|
817
|
-
validatePath(suffix ?? "");
|
|
818
|
-
if (suffix?.includes("/") || suffix !== void 0 && !template.endsWith("X")) throw new UsageError("suffix requires a template ending in X and cannot contain '/'");
|
|
819
|
-
const name = template.slice(template.lastIndexOf("/") + 1);
|
|
820
|
-
if (name.length + (suffix?.length ?? 0) > 255 || mktempEncoder.encode(name).byteLength + mktempEncoder.encode(suffix ?? "").byteLength > 255) throw new FsError("ENAMETOOLONG", { path: template });
|
|
821
|
-
const end = name.lastIndexOf("X") + 1;
|
|
822
|
-
let start = end;
|
|
823
|
-
while (start > 0 && name[start - 1] === "X") start--;
|
|
824
|
-
if (end - start < 3) throw new UsageError("template must contain at least three consecutive X characters in its last component");
|
|
825
|
-
if (useTmpdir && template.startsWith("/")) throw new UsageError("template must be relative with --tmpdir/-p");
|
|
826
|
-
const tail = suffix ?? name.slice(end);
|
|
827
|
-
return { directory, dryRun, quiet, useTmpdir, deprecatedTmpdir, tmpdir, template, prefix: template.slice(0, template.length - name.length + start), count: end - start, tail };
|
|
828
|
-
}
|
|
829
|
-
var alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
830
|
-
function sampleTemplateChars(count) {
|
|
831
|
-
let out = "";
|
|
832
|
-
for (let index = 0; index < count; index++) out += alphabet[randomInteger(alphabet.length)];
|
|
833
|
-
return out;
|
|
834
|
-
}
|
|
835
|
-
function evalSyncMktemp(opArgs, env, statTypeSync, writeFileSync, mkdirSync) {
|
|
836
|
-
const gnuInfo = gnuInformationSync("mktemp", opArgs);
|
|
837
|
-
if (gnuInfo !== void 0) return gnuInfo;
|
|
838
|
-
try {
|
|
839
|
-
const parsed = parse2(opArgs);
|
|
840
|
-
const parent = parsed.deprecatedTmpdir && env.TMPDIR || parsed.tmpdir || env.TMPDIR || "/tmp";
|
|
841
|
-
validatePath(parent);
|
|
842
|
-
if (!statTypeSync) return void 0;
|
|
843
|
-
if (parsed.useTmpdir && !parsed.dryRun && statTypeSync(parent || ".") !== "directory") return void 0;
|
|
844
|
-
for (let attempt = 0; attempt < 32; attempt++) {
|
|
845
|
-
const random = sampleTemplateChars(parsed.count);
|
|
846
|
-
const generated = `${parsed.prefix}${random}${parsed.tail}`;
|
|
847
|
-
const display = parsed.useTmpdir ? `${parent.replace(/\/+$/u, "")}/${generated}` : generated;
|
|
848
|
-
const st = statTypeSync(display);
|
|
849
|
-
if (st !== "missing") continue;
|
|
850
|
-
if (!parsed.dryRun) {
|
|
851
|
-
if (parsed.directory) {
|
|
852
|
-
if (!mkdirSync || !mkdirSync(display)) return void 0;
|
|
853
|
-
} else {
|
|
854
|
-
if (!writeFileSync || !writeFileSync(display, new Uint8Array(0))) return void 0;
|
|
855
|
-
}
|
|
856
|
-
}
|
|
857
|
-
return `${display}
|
|
858
|
-
`;
|
|
859
|
-
}
|
|
860
|
-
return void 0;
|
|
861
|
-
} catch {
|
|
862
|
-
return void 0;
|
|
863
|
-
}
|
|
864
|
-
}
|
|
865
|
-
syncCommandEvaluators.evalSyncMktemp = evalSyncMktemp;
|
|
866
|
-
function createMktempCommand(configuration = {}) {
|
|
867
|
-
const configured = settings(configuration);
|
|
868
|
-
const configuredUmask = configuration.umask === void 0 ? void 0 : configured.umask;
|
|
869
|
-
return metadataCommand("mktemp", async (context) => {
|
|
870
|
-
const budget = new MetadataBudget(context, configured.limits);
|
|
871
|
-
const parsed = parse2(context.args);
|
|
872
|
-
const parent = parsed.deprecatedTmpdir && context.env.TMPDIR || parsed.tmpdir || context.env.TMPDIR || "/tmp";
|
|
873
|
-
validatePath(parent);
|
|
874
|
-
try {
|
|
875
|
-
if (!parsed.dryRun) {
|
|
876
|
-
if (context.fs.capabilities.readOnly) throw new FsError("EROFS", { syscall: "mktemp" });
|
|
877
|
-
}
|
|
878
|
-
for (let attempt = 0; attempt < configured.limits.maxAttempts; attempt++) {
|
|
879
|
-
await budget.step();
|
|
880
|
-
const random = sampleTemplateChars(parsed.count);
|
|
881
|
-
const generated = `${parsed.prefix}${random}${parsed.tail}`;
|
|
882
|
-
const display = parsed.useTmpdir ? `${parent.replace(/\/+$/u, "")}/${generated}` : generated;
|
|
883
|
-
const path = pathOf(context, display);
|
|
884
|
-
if (mktempEncoder.encode(display).byteLength + 1 > configured.limits.maxOutputBytes) throw new FsError("EFBIG", { message: "temporary pathname output exceeds limit" });
|
|
885
|
-
if (parsed.dryRun) {
|
|
886
|
-
try {
|
|
887
|
-
await context.fs.lstat(path, { signal: context.signal });
|
|
888
|
-
continue;
|
|
889
|
-
} catch (error) {
|
|
890
|
-
context.signal.throwIfAborted();
|
|
891
|
-
if (codeOf(error) !== "ENOENT") throw error;
|
|
892
|
-
}
|
|
893
|
-
} else {
|
|
894
|
-
const capabilities = await context.fs.capabilitiesFor?.(path, { signal: context.signal }) ?? context.fs.capabilities;
|
|
895
|
-
if (capabilities.readOnly === true) throw new FsError("EROFS", { syscall: "mktemp" });
|
|
896
|
-
if (capabilities.permissions !== true) throw new FsError("ENOTSUP", { syscall: "mktemp", message: "private temporary creation requires declared permission support" });
|
|
897
|
-
try {
|
|
898
|
-
const mask = configuredUmask ?? Reflect.get(context.fs, creationUmask);
|
|
899
|
-
const activeUmask = typeof mask === "number" ? mask : configured.umask;
|
|
900
|
-
const mode = (parsed.directory ? 448 : 384) & ~activeUmask;
|
|
901
|
-
if (parsed.directory) await context.fs.mkdir(path, { mode, recursive: false, signal: context.signal });
|
|
902
|
-
else await context.fs.writeFile(path, new Uint8Array(), { mode, flag: "wx", signal: context.signal });
|
|
903
|
-
} catch (error) {
|
|
904
|
-
context.signal.throwIfAborted();
|
|
905
|
-
if (codeOf(error) !== "EEXIST") throw error;
|
|
906
|
-
continue;
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
await budget.output(`${display}
|
|
910
|
-
`);
|
|
911
|
-
return { exitCode: 0 };
|
|
912
|
-
}
|
|
913
|
-
throw new FsError("EEXIST", { syscall: "mktemp", message: "temporary name collision limit exceeded" });
|
|
914
|
-
} catch (error) {
|
|
915
|
-
context.signal.throwIfAborted();
|
|
916
|
-
if (!parsed.quiet) await diagnostic(context, error);
|
|
917
|
-
return { exitCode: 1 };
|
|
918
|
-
}
|
|
919
|
-
});
|
|
920
|
-
}
|
|
921
|
-
|
|
922
|
-
// packages/safe-bash/src/commands/truncate.ts
|
|
923
|
-
init_platform();
|
|
924
|
-
import {} from "../../safe-bash-command-truncate/index.js";
|
|
925
|
-
import { createTruncateCommand, createTruncateCommands, truncateCommand, truncateCommands, evalSyncTruncate } from "../../safe-bash-command-truncate/index.js";
|
|
926
|
-
|
|
927
|
-
// packages/safe-bash/src/commands/metadata/index.ts
|
|
928
|
-
import { evalSyncTruncate as evalSyncTruncate2 } from "../../safe-bash-command-truncate/index.js";
|
|
929
|
-
function createMetadataCommands(options2 = {}) {
|
|
930
|
-
settings(options2);
|
|
931
|
-
return registerDefaultExecutors([createChmodCommand(options2), createStatCommand(options2), createMktempCommand(options2), truncateCommand(options2)], options2);
|
|
932
|
-
}
|
|
933
|
-
function metadataCommands(options2 = {}) {
|
|
934
|
-
const commands = createMetadataCommands(options2);
|
|
935
|
-
return { name: "metadata-commands", setup(host) {
|
|
936
|
-
if (!options2.replace) {
|
|
937
|
-
for (const command of commands) if (host.commands.has(command.name)) throw new Error(`Command already registered: ${command.name}`);
|
|
938
|
-
}
|
|
939
|
-
for (const command of commands) host.commands.register(command, { replace: options2.replace ?? false });
|
|
940
|
-
} };
|
|
941
|
-
}
|
|
942
|
-
|
|
943
|
-
export {
|
|
944
|
-
abortManagedController,
|
|
945
|
-
addAbortSignalWaiter,
|
|
946
|
-
combineManagedSignals,
|
|
947
|
-
createManagedControlController,
|
|
948
|
-
creationUmask,
|
|
949
|
-
getRuntimeBackingFileSystem,
|
|
950
|
-
interruptible,
|
|
951
|
-
isManagedAbortSignal,
|
|
952
|
-
isSyncResolved,
|
|
953
|
-
registerManagedAbortSignal,
|
|
954
|
-
removeAbortSignalWaiter,
|
|
955
|
-
gnuInformationSync,
|
|
956
|
-
modeChange2 as modeChange,
|
|
957
|
-
evalSyncStat,
|
|
958
|
-
evalSyncMktemp,
|
|
959
|
-
createMetadataCommands,
|
|
960
|
-
metadataCommands,
|
|
961
|
-
evalSyncTruncate2 as evalSyncTruncate
|
|
962
|
-
};
|