@poe-platform/safe-bash 0.1.803 → 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 +56 -31
- 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 -8364
- package/dist/image-ast/index.js +692 -8364
- 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-5OHX7C2V.js → chunk-62BOHHJT.js} +1 -1
- 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-PNBBUWSM.js → chunk-AW5KIT6V.js} +3488 -39
- package/dist/safe-bash/chunks/{chunk-JMMEIDPF.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-2LSAMQER.js → chunk-CTXNARJH.js} +1 -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-VBTDHOWC.js → chunk-IOHH2GTI.js} +4 -3
- 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-RYFQ3LZG.js → chunk-LPOVNKNB.js} +173 -153
- 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-EEEWOYEG.js → chunk-S4RFUUXO.js} +839 -24
- 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-B7PIL77G.js → chunk-W2IYOVHK.js} +804 -1195
- 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-A7XEHALN.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-ZDN7MJE6.js → chunk-4R5ADJM5.js} +11 -1
- 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-PICVQ6B5.js → chunk-6GKYHPJG.js} +1 -1
- 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-4FEVBOL5.js → chunk-ARZMP2L2.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-NKIELG7Y.js → chunk-BAKFZ477.js} +40 -19
- package/dist/safe-bash/command-chunks/{chunk-QRRYN2KO.js → chunk-BC7BK6R6.js} +0 -2424
- package/dist/safe-bash/command-chunks/{chunk-CQHP3I66.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-QVOS4YXL.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-V4K2JDYU.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-GFC2NTDG.js → chunk-ICANWOXH.js} +5 -29
- package/dist/safe-bash/command-chunks/{chunk-SQRQW3CT.js → chunk-IJ6LGLXM.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-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-EARHPPPJ.js → chunk-NJYHWKIL.js} +39 -9
- package/dist/safe-bash/command-chunks/{chunk-6JSIFWYT.js → chunk-OJQRSCBP.js} +1 -1
- 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-NASVPT6F.js → chunk-R7C4MGZ5.js} +17 -224
- 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-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-GIRNFXP3.js → chunk-TZRI7BJZ.js} +45 -15
- 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-ILX2NOLF.js → chunk-WPANOB4A.js} +20 -20
- package/dist/safe-bash/command-chunks/{chunk-Y2WBSJG6.js → chunk-X4QZQI5Q.js} +65 -64
- package/dist/safe-bash/command-chunks/{chunk-HDCNKOIX.js → chunk-XGI57GCN.js} +1 -1
- 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-WWIBP2ET.js → chunk-Z5ZZVDUD.js} +143 -22
- package/dist/safe-bash/command-chunks/{chunk-LOICUCHG.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/index.js +2 -1
- package/dist/safe-bash/commands/chmod/index.browser.js +1 -1
- 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/index.browser.js +3 -4
- 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/mktemp/index.browser.js +1 -1
- 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/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 +1 -1
- 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 +28 -24
- 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 +283 -945
- 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 +2 -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 +23 -18
- 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 +21 -4
- package/dist/safe-bash/shell/runtime.js +373 -412
- 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 +5 -0
- package/dist/safe-bash/shell/value-state.js +1 -1
- package/dist/safe-bash/shell-entry.browser.js +32 -33
- package/dist/safe-bash/trap.browser.js +4 -4
- 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 +206 -60
- 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 +278 -50
- 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 +1 -4
- 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-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 +56 -6
- 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 +37 -61
- 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 +2804 -2771
- 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/command.js +1 -1
- package/dist/safe-bash-command-mktemp/index.js +1 -1
- 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 +10 -6
- package/dist/safe-bash-command-op/index.js +39 -32
- 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 +2 -2
- package/dist/safe-bash-command-soffice/index.js +97 -12
- package/dist/safe-bash-command-sponge/index.js +4 -1
- 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/command.js +1 -1
- package/dist/safe-bash-command-stat/index.js +1 -1
- 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 +26 -4
- 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 +41 -10
- package/dist/safe-bash-command-yq/accounting.js +1 -1
- package/dist/safe-bash-command-yq/index.js +3 -2
- package/dist/safe-bash-command-yq/native-work.js +2 -0
- package/dist/safe-bash-command-yq/parser.js +2 -2
- package/dist/safe-bash-command-yq/query.js +5 -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 +2 -2
- package/dist/safe-bash-compression-engine/codec-loader.js +1 -1
- package/dist/safe-bash-compression-engine/files.js +5 -5
- package/dist/safe-bash-compression-engine/index.js +4 -4
- package/dist/safe-bash-compression-engine/operand.js +5 -5
- package/dist/safe-bash-compression-engine/stream.js +4 -4
- package/dist/safe-bash-compression-engine/zstd-decode.js +3 -3
- 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.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-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 +1 -1
- package/dist/safe-bash-search-engine/grep.js +16 -9
- package/dist/safe-bash-search-engine/matcher.d.ts +2 -2
- package/dist/safe-bash-search-engine/matcher.js +12 -8
- package/dist/safe-bash-search-engine/shared.js +1 -1
- package/dist/safe-bash-search-engine/walk.js +13 -1
- 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-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 +86 -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-GDYNCWRV.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/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 -9167
- 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-BXCXRYVU.js → chunk-JNANXVJV.js} +0 -0
- 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
|
@@ -80,6 +80,13 @@ export class HereDocumentSyntaxError extends Error {
|
|
|
80
80
|
this.diagnostic = diagnostic;
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
+
function isSelfDelimitingCompound(command) {
|
|
84
|
+
if (!command || command.redirects.length > 0)
|
|
85
|
+
return false;
|
|
86
|
+
if (command.kind === "function")
|
|
87
|
+
return isSelfDelimitingCompound(command.body);
|
|
88
|
+
return command.kind !== "simple" && command.kind !== "arithmetic" && command.kind !== "conditional";
|
|
89
|
+
}
|
|
83
90
|
const scriptSeparators = new WeakMap();
|
|
84
91
|
const functionLayouts = new WeakMap();
|
|
85
92
|
export function functionReprintedLines(script) {
|
|
@@ -286,6 +293,7 @@ class Lexer {
|
|
|
286
293
|
sourceValues;
|
|
287
294
|
byteSource;
|
|
288
295
|
syntax;
|
|
296
|
+
aliases;
|
|
289
297
|
position = 0;
|
|
290
298
|
operandDepth = 0;
|
|
291
299
|
printedNewlineReduction = 0;
|
|
@@ -295,7 +303,7 @@ class Lexer {
|
|
|
295
303
|
conditionalPattern;
|
|
296
304
|
braceReplay;
|
|
297
305
|
documents = [];
|
|
298
|
-
constructor(budget, source, depth, warnings = [], lineOffset = 0, byteLocale = false, documentLine, partial = false, lineIndex = new SourceLineIndex(source, budget), sourceOffset = 0, ordinaryBacktick = false, sourceValues, byteSource = false, syntax = defaultSyntax) {
|
|
306
|
+
constructor(budget, source, depth, warnings = [], lineOffset = 0, byteLocale = false, documentLine, partial = false, lineIndex = new SourceLineIndex(source, budget), sourceOffset = 0, ordinaryBacktick = false, sourceValues, byteSource = false, syntax = defaultSyntax, aliases) {
|
|
299
307
|
this.budget = budget;
|
|
300
308
|
this.source = source;
|
|
301
309
|
this.depth = depth;
|
|
@@ -310,6 +318,7 @@ class Lexer {
|
|
|
310
318
|
this.sourceValues = sourceValues;
|
|
311
319
|
this.byteSource = byteSource;
|
|
312
320
|
this.syntax = syntax;
|
|
321
|
+
this.aliases = aliases;
|
|
313
322
|
if (depth > this.budget.maxSyntaxDepth)
|
|
314
323
|
throw new ShellSyntaxError(`Syntax nesting exceeds ${this.budget.maxSyntaxDepth}`, 0);
|
|
315
324
|
}
|
|
@@ -594,7 +603,7 @@ class Lexer {
|
|
|
594
603
|
}
|
|
595
604
|
this.error("Unterminated delimiter expansion syntax");
|
|
596
605
|
}
|
|
597
|
-
word(terminator, enclosingQuoted = false, literal = false, arithmetic = false, arithmeticExpansion = false) {
|
|
606
|
+
word(terminator, enclosingQuoted = false, literal = false, arithmetic = false, arithmeticExpansion = false, assignmentSubscriptEnd = -1) {
|
|
598
607
|
this.budget.admit();
|
|
599
608
|
const offset = this.position;
|
|
600
609
|
const reduction = this.printedNewlineReduction;
|
|
@@ -693,7 +702,7 @@ class Lexer {
|
|
|
693
702
|
else if (terminator.includes(current) && (!arithmetic || current !== ":" || parentheses === 0 && conditionals === 0))
|
|
694
703
|
break;
|
|
695
704
|
}
|
|
696
|
-
else if (!this.braceReplay) {
|
|
705
|
+
else if (!this.braceReplay && this.position > assignmentSubscriptEnd) {
|
|
697
706
|
if (!enclosingQuoted && !literal && current === "(" && (patternParentheses > 0 || (this.position > offset
|
|
698
707
|
&& "?*+@!".includes(this.source[this.position - 1] ?? " ")
|
|
699
708
|
&& (this.position - 1 === offset || this.source[this.position - 2] !== "\\")
|
|
@@ -722,7 +731,7 @@ class Lexer {
|
|
|
722
731
|
let script;
|
|
723
732
|
try {
|
|
724
733
|
this.budget.admit();
|
|
725
|
-
nested = new Parser(this.budget, this.source.slice(start), this.depth + this.operandDepth + 1, this.warnings, this.lineAt(start) - 1, undefined, this.byteLocale, false, this.lineIndex, this.sourceOffset + start, false, this.sourceValues, this.byteSource, this.syntax);
|
|
734
|
+
nested = new Parser(this.budget, this.source.slice(start), this.depth + this.operandDepth + 1, this.warnings, this.lineAt(start) - 1, undefined, this.byteLocale, false, this.lineIndex, this.sourceOffset + start, false, this.sourceValues, this.byteSource, this.syntax, this.aliases);
|
|
726
735
|
script = nested.script(new Set([")"]));
|
|
727
736
|
}
|
|
728
737
|
catch (error) {
|
|
@@ -747,7 +756,7 @@ class Lexer {
|
|
|
747
756
|
parts.push({ kind: "process-substitution", direction, script, line, sourceLine: script.line ?? line, quoted: true });
|
|
748
757
|
continue;
|
|
749
758
|
}
|
|
750
|
-
if (current === "$" && this.source[this.position + 1] === "'" && !enclosingQuoted
|
|
759
|
+
if (current === "$" && this.source[this.position + 1] === "'" && !enclosingQuoted) {
|
|
751
760
|
plain = false;
|
|
752
761
|
this.unprintedWords++;
|
|
753
762
|
const start = this.position;
|
|
@@ -779,8 +788,10 @@ class Lexer {
|
|
|
779
788
|
text(this.source.slice(this.position + 1, end), true, false, this.position, Math.min(end + 1, this.source.length));
|
|
780
789
|
this.position = Math.min(end + 1, this.source.length);
|
|
781
790
|
}
|
|
782
|
-
else if (current === '"') {
|
|
791
|
+
else if (current === '"' || current === "$" && this.source[this.position + 1] === '"' && !enclosingQuoted) {
|
|
783
792
|
plain = false;
|
|
793
|
+
if (current === "$")
|
|
794
|
+
this.position++;
|
|
784
795
|
const quoteLine = this.lineAt(this.position);
|
|
785
796
|
this.position++;
|
|
786
797
|
text("", true, true, this.position - 1, this.position);
|
|
@@ -853,8 +864,6 @@ class Lexer {
|
|
|
853
864
|
else if (current === "$" || current === "`") {
|
|
854
865
|
plain = false;
|
|
855
866
|
if (literal) {
|
|
856
|
-
if (current === "$" && ["'", '"'].includes(this.source[this.position + 1] ?? ""))
|
|
857
|
-
this.error("Unsupported shell quoting in here-document delimiter");
|
|
858
867
|
text(this.literalExpansion(), current === "`");
|
|
859
868
|
}
|
|
860
869
|
else
|
|
@@ -999,6 +1008,51 @@ class Lexer {
|
|
|
999
1008
|
}
|
|
1000
1009
|
this.error("Unterminated ANSI-C quote", { quote: "'", line: quoteLine });
|
|
1001
1010
|
}
|
|
1011
|
+
readExpansionName() {
|
|
1012
|
+
while (this.source.startsWith("\\\n", this.position))
|
|
1013
|
+
this.position += 2;
|
|
1014
|
+
const first = this.source[this.position];
|
|
1015
|
+
if (first && /^[?@*#-]$/u.test(first)) {
|
|
1016
|
+
this.position++;
|
|
1017
|
+
return first;
|
|
1018
|
+
}
|
|
1019
|
+
if (first && /^[0-9]$/u.test(first)) {
|
|
1020
|
+
let name = "";
|
|
1021
|
+
while (this.position < this.source.length) {
|
|
1022
|
+
if (this.source.startsWith("\\\n", this.position)) {
|
|
1023
|
+
this.position += 2;
|
|
1024
|
+
continue;
|
|
1025
|
+
}
|
|
1026
|
+
const ch = this.source[this.position];
|
|
1027
|
+
if (!ch || !/^[0-9]$/u.test(ch))
|
|
1028
|
+
break;
|
|
1029
|
+
name += ch;
|
|
1030
|
+
this.position++;
|
|
1031
|
+
}
|
|
1032
|
+
return name;
|
|
1033
|
+
}
|
|
1034
|
+
if (first && /^[a-zA-Z_]$/u.test(first)) {
|
|
1035
|
+
let name = "";
|
|
1036
|
+
while (this.position < this.source.length) {
|
|
1037
|
+
if (this.source.startsWith("\\\n", this.position)) {
|
|
1038
|
+
this.position += 2;
|
|
1039
|
+
continue;
|
|
1040
|
+
}
|
|
1041
|
+
const ch = this.source[this.position];
|
|
1042
|
+
if (!ch || !/^[a-zA-Z_0-9]$/u.test(ch))
|
|
1043
|
+
break;
|
|
1044
|
+
name += ch;
|
|
1045
|
+
this.position++;
|
|
1046
|
+
}
|
|
1047
|
+
return name;
|
|
1048
|
+
}
|
|
1049
|
+
return undefined;
|
|
1050
|
+
}
|
|
1051
|
+
peekAfterContinuation(offset = this.position) {
|
|
1052
|
+
while (this.source.startsWith("\\\n", offset))
|
|
1053
|
+
offset += 2;
|
|
1054
|
+
return offset;
|
|
1055
|
+
}
|
|
1002
1056
|
expansion(parts, quoted) {
|
|
1003
1057
|
this.budget.admit();
|
|
1004
1058
|
const spellingStart = this.position;
|
|
@@ -1012,8 +1066,9 @@ class Lexer {
|
|
|
1012
1066
|
this.position++;
|
|
1013
1067
|
let source = "";
|
|
1014
1068
|
const sourceValues = this.sourceValues ? new Map() : undefined;
|
|
1069
|
+
const backtickEscapable = quoted && this.documentLine === undefined ? /[$`\\"]/u : /[$`\\]/u;
|
|
1015
1070
|
while (this.position < this.source.length && this.source[this.position] !== "`") {
|
|
1016
|
-
if (this.source[this.position] === "\\" &&
|
|
1071
|
+
if (this.source[this.position] === "\\" && backtickEscapable.test(this.source[this.position + 1] ?? ""))
|
|
1017
1072
|
this.position++;
|
|
1018
1073
|
const opaque = this.sourceValues?.get(this.sourceOffset + this.position);
|
|
1019
1074
|
if (opaque !== undefined) {
|
|
@@ -1026,7 +1081,7 @@ class Lexer {
|
|
|
1026
1081
|
this.error("Unterminated command substitution");
|
|
1027
1082
|
this.position++;
|
|
1028
1083
|
try {
|
|
1029
|
-
parts.push({ kind: "substitution", form: "backtick", script: parseSource(source, this.depth + this.operandDepth + 1, this.warnings, line - 1, this.byteLocale, this.budget, this.documentLine === undefined, sourceValues, this.byteSource, this.syntax), line, quoted });
|
|
1084
|
+
parts.push({ kind: "substitution", form: "backtick", script: parseSource(source, this.depth + this.operandDepth + 1, this.warnings, line - 1, this.byteLocale, this.budget, this.documentLine === undefined, sourceValues, this.byteSource, this.syntax, this.aliases), line, quoted });
|
|
1030
1085
|
}
|
|
1031
1086
|
catch (error) {
|
|
1032
1087
|
if (this.documentLine === undefined || !(error instanceof ShellSyntaxError) || /nesting|exceeds/u.test(error.reason))
|
|
@@ -1041,15 +1096,19 @@ class Lexer {
|
|
|
1041
1096
|
return;
|
|
1042
1097
|
}
|
|
1043
1098
|
this.position++;
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1099
|
+
while (this.source.startsWith("\\\n", this.position))
|
|
1100
|
+
this.position += 2;
|
|
1101
|
+
const firstParen = this.source[this.position] === "(" ? this.position : -1;
|
|
1102
|
+
const secondParen = firstParen !== -1 ? this.peekAfterContinuation(firstParen + 1) : -1;
|
|
1103
|
+
const arithmeticEndPos = secondParen !== -1 && this.source[secondParen] === "("
|
|
1104
|
+
? arithmeticEnd(this.source, secondParen + 1, true, this.budget.maxSyntaxDepth) : -1;
|
|
1105
|
+
if (arithmeticEndPos !== -1) {
|
|
1106
|
+
const start = secondParen + 1;
|
|
1107
|
+
const end = arithmeticEndPos;
|
|
1050
1108
|
const source = this.source.slice(start, end);
|
|
1051
1109
|
parts.push({ kind: "arithmetic", expression: prepareArithmetic(source, this.budget), source, line, quoted });
|
|
1052
|
-
|
|
1110
|
+
const afterFirstClose = this.peekAfterContinuation(end + 1);
|
|
1111
|
+
this.position = afterFirstClose + 1;
|
|
1053
1112
|
}
|
|
1054
1113
|
else if (this.source[this.position] === "(") {
|
|
1055
1114
|
const start = this.position + 1;
|
|
@@ -1057,7 +1116,7 @@ class Lexer {
|
|
|
1057
1116
|
let script;
|
|
1058
1117
|
try {
|
|
1059
1118
|
this.budget.admit();
|
|
1060
|
-
nested = new Parser(this.budget, this.source.slice(start), this.depth + this.operandDepth + 1, this.warnings, this.lineAt(start) - 1, undefined, this.byteLocale, false, this.lineIndex, this.sourceOffset + start, false, this.sourceValues, this.byteSource, this.syntax);
|
|
1119
|
+
nested = new Parser(this.budget, this.source.slice(start), this.depth + this.operandDepth + 1, this.warnings, this.lineAt(start) - 1, undefined, this.byteLocale, false, this.lineIndex, this.sourceOffset + start, false, this.sourceValues, this.byteSource, this.syntax, this.aliases);
|
|
1061
1120
|
script = nested.script(new Set([")"]));
|
|
1062
1121
|
}
|
|
1063
1122
|
catch (error) {
|
|
@@ -1082,28 +1141,34 @@ class Lexer {
|
|
|
1082
1141
|
parts.push({ kind: "substitution", form: "dollar-parenthesis", script, line, sourceLine: script.line ?? line, quoted });
|
|
1083
1142
|
}
|
|
1084
1143
|
else if (this.source[this.position] === "{") {
|
|
1085
|
-
this.position
|
|
1144
|
+
this.position = this.peekAfterContinuation(this.position + 1);
|
|
1086
1145
|
const parameterStart = this.position - 2;
|
|
1087
|
-
const
|
|
1146
|
+
const afterBang = this.peekAfterContinuation(this.position + 1);
|
|
1147
|
+
const listing = this.source[this.position] === "!" && /[a-zA-Z_0-9]/u.test(this.source[afterBang] ?? "");
|
|
1088
1148
|
if (listing)
|
|
1089
|
-
this.position
|
|
1090
|
-
const
|
|
1091
|
-
|
|
1092
|
-
|| this.
|
|
1149
|
+
this.position = afterBang;
|
|
1150
|
+
const afterHash = this.peekAfterContinuation(this.position + 1);
|
|
1151
|
+
const length = !listing && this.source[this.position] === "#" && (/[a-zA-Z_0-9]/u.test(this.source[afterHash] ?? "")
|
|
1152
|
+
|| ["@", "*"].includes(this.source[afterHash] ?? "") && this.source[this.peekAfterContinuation(afterHash + 1)] === "}"
|
|
1153
|
+
|| this.syntax.specialParameters.some(parameter => parameter.name === this.source[afterHash]));
|
|
1093
1154
|
if (length)
|
|
1094
|
-
this.position
|
|
1155
|
+
this.position = afterHash;
|
|
1095
1156
|
const specialParameter = this.syntax.specialParameters.find(parameter => parameter.name === this.source[this.position]);
|
|
1096
|
-
|
|
1157
|
+
if (specialParameter)
|
|
1158
|
+
this.position += specialParameter.name.length;
|
|
1159
|
+
const dollarBang = !specialParameter && "$!".includes(this.source[this.position] ?? " ") ? this.source[this.position++] : undefined;
|
|
1160
|
+
const name = specialParameter?.name ?? dollarBang ?? this.readExpansionName();
|
|
1097
1161
|
if (!name)
|
|
1098
1162
|
this.error("Unsupported parameter expansion");
|
|
1099
|
-
this.position
|
|
1163
|
+
this.position = this.peekAfterContinuation(this.position);
|
|
1100
1164
|
let prefixNames;
|
|
1101
1165
|
let indirect = false;
|
|
1102
1166
|
if (listing && this.source[this.position] !== "[") {
|
|
1103
1167
|
const separator = this.source[this.position];
|
|
1104
|
-
|
|
1168
|
+
const afterSep = this.peekAfterContinuation(this.position + 1);
|
|
1169
|
+
if ((separator === "*" || separator === "@") && this.source[afterSep] === "}") {
|
|
1105
1170
|
prefixNames = separator;
|
|
1106
|
-
this.position
|
|
1171
|
+
this.position = afterSep;
|
|
1107
1172
|
}
|
|
1108
1173
|
else
|
|
1109
1174
|
indirect = true;
|
|
@@ -1118,7 +1183,7 @@ class Lexer {
|
|
|
1118
1183
|
if (this.source[end] !== "]")
|
|
1119
1184
|
this.error("Unterminated indexed-array subscript");
|
|
1120
1185
|
selector = arraySelector(this.source.slice(start, end), start, this.budget, keyWord);
|
|
1121
|
-
this.position = end + 1;
|
|
1186
|
+
this.position = this.peekAfterContinuation(end + 1);
|
|
1122
1187
|
if (listing && selector.kind === "members" && this.source[this.position] !== "}" && this.source[this.position] !== "@")
|
|
1123
1188
|
this.error("Unsupported array-key operator");
|
|
1124
1189
|
}
|
|
@@ -1130,15 +1195,38 @@ class Lexer {
|
|
|
1130
1195
|
}
|
|
1131
1196
|
let transform;
|
|
1132
1197
|
if (this.source[this.position] === "@") {
|
|
1133
|
-
const
|
|
1134
|
-
|
|
1198
|
+
const opPos = this.peekAfterContinuation(this.position + 1);
|
|
1199
|
+
const operation = this.source[opPos];
|
|
1200
|
+
const closePos = this.peekAfterContinuation(opPos + 1);
|
|
1201
|
+
if (length || prefixNames || !["Q", "E", "a", "A", "K", "k", "P", "u", "U", "L"].includes(operation ?? "") || this.source[closePos] !== "}")
|
|
1135
1202
|
this.error("Unsupported parameter transform");
|
|
1136
1203
|
transform = operation;
|
|
1137
|
-
this.position
|
|
1204
|
+
this.position = closePos;
|
|
1205
|
+
}
|
|
1206
|
+
const firstOpChar = this.source[this.position];
|
|
1207
|
+
const secondOpPos = this.peekAfterContinuation(this.position + 1);
|
|
1208
|
+
const secondOpChar = this.source[secondOpPos];
|
|
1209
|
+
const caseOperator = firstOpChar === "^" || firstOpChar === "," ? firstOpChar.repeat(secondOpChar === firstOpChar ? 2 : 1) : undefined;
|
|
1210
|
+
let operator = caseOperator;
|
|
1211
|
+
let operatorEnd = caseOperator ? (caseOperator.length === 2 ? secondOpPos + 1 : this.position + 1) : this.position;
|
|
1212
|
+
if (!operator) {
|
|
1213
|
+
if (firstOpChar === ":" && secondOpChar && "-=+?".includes(secondOpChar)) {
|
|
1214
|
+
operator = `:${secondOpChar}`;
|
|
1215
|
+
operatorEnd = secondOpPos + 1;
|
|
1216
|
+
}
|
|
1217
|
+
else if ((firstOpChar === "#" || firstOpChar === "%") && secondOpChar === firstOpChar) {
|
|
1218
|
+
operator = `${firstOpChar}${secondOpChar}`;
|
|
1219
|
+
operatorEnd = secondOpPos + 1;
|
|
1220
|
+
}
|
|
1221
|
+
else if (firstOpChar === "/" && secondOpChar && "/#%".includes(secondOpChar)) {
|
|
1222
|
+
operator = `/${secondOpChar}`;
|
|
1223
|
+
operatorEnd = secondOpPos + 1;
|
|
1224
|
+
}
|
|
1225
|
+
else if (firstOpChar && "-=+?#%/".includes(firstOpChar)) {
|
|
1226
|
+
operator = firstOpChar;
|
|
1227
|
+
operatorEnd = this.position + 1;
|
|
1228
|
+
}
|
|
1138
1229
|
}
|
|
1139
|
-
const caseCharacter = this.source[this.position];
|
|
1140
|
-
const caseOperator = caseCharacter === "^" || caseCharacter === "," ? caseCharacter.repeat(this.source[this.position + 1] === caseCharacter ? 2 : 1) : undefined;
|
|
1141
|
-
const operator = caseOperator ?? /^(?::[-=+?]|##|%%|\/\/|\/[#%]?|[-=+?#%])/u.exec(this.source.slice(this.position))?.[0];
|
|
1142
1230
|
let alternate;
|
|
1143
1231
|
let replacement;
|
|
1144
1232
|
let substring;
|
|
@@ -1150,7 +1238,7 @@ class Lexer {
|
|
|
1150
1238
|
if (operator) {
|
|
1151
1239
|
if (length)
|
|
1152
1240
|
this.error("Invalid length expansion");
|
|
1153
|
-
this.position
|
|
1241
|
+
this.position = operatorEnd;
|
|
1154
1242
|
alternate = this.word(operator.startsWith("/") ? "/}" : "}", quoted && !caseOperator && !["#", "##", "%", "%%"].includes(operator) && !operator.startsWith("/"));
|
|
1155
1243
|
if (operator.startsWith("/") && this.source[this.position] === "/") {
|
|
1156
1244
|
this.position++;
|
|
@@ -1160,7 +1248,7 @@ class Lexer {
|
|
|
1160
1248
|
else {
|
|
1161
1249
|
if (length || (name !== "@" && name !== "*" && !/^(?:[a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)$/u.test(name)))
|
|
1162
1250
|
this.error("Unsupported non-scalar substring expansion");
|
|
1163
|
-
this.position
|
|
1251
|
+
this.position = secondOpPos;
|
|
1164
1252
|
const offset = this.word(":}", true, false, true);
|
|
1165
1253
|
let substringLength;
|
|
1166
1254
|
if (this.source[this.position] === ":") {
|
|
@@ -1175,6 +1263,7 @@ class Lexer {
|
|
|
1175
1263
|
this.operandDepth--;
|
|
1176
1264
|
}
|
|
1177
1265
|
}
|
|
1266
|
+
this.position = this.peekAfterContinuation(this.position);
|
|
1178
1267
|
if (this.source[this.position] !== "}") {
|
|
1179
1268
|
let end = this.position;
|
|
1180
1269
|
if (this.ordinaryBacktick && !selector && !operator && !substring && /^[a-zA-Z_]/u.test(name)
|
|
@@ -1199,9 +1288,11 @@ class Lexer {
|
|
|
1199
1288
|
}
|
|
1200
1289
|
else {
|
|
1201
1290
|
const specialParameter = this.syntax.specialParameters.find(parameter => parameter.name === this.source[this.position]);
|
|
1202
|
-
|
|
1291
|
+
if (specialParameter)
|
|
1292
|
+
this.position += specialParameter.name.length;
|
|
1293
|
+
const dollarBang = !specialParameter && "$!".includes(this.source[this.position] ?? " ") ? this.source[this.position++] : undefined;
|
|
1294
|
+
const name = specialParameter?.name ?? dollarBang ?? (this.source[this.position] && /^[0-9]$/u.test(this.source[this.position]) ? this.source[this.position++] : this.readExpansionName());
|
|
1203
1295
|
if (name) {
|
|
1204
|
-
this.position += name.length;
|
|
1205
1296
|
parts.push({ kind: "variable", name, quoted, line, ...(specialParameter ? { specialParameter } : {}) });
|
|
1206
1297
|
}
|
|
1207
1298
|
else
|
|
@@ -1215,18 +1306,24 @@ class Lexer {
|
|
|
1215
1306
|
}
|
|
1216
1307
|
class Parser {
|
|
1217
1308
|
budget;
|
|
1309
|
+
aliases;
|
|
1218
1310
|
lexer;
|
|
1311
|
+
aliasFrames = [];
|
|
1312
|
+
aliasNextWords = new WeakSet();
|
|
1313
|
+
tokenAliases = new WeakMap();
|
|
1314
|
+
tokenLexers = new WeakMap();
|
|
1219
1315
|
current;
|
|
1220
1316
|
lookahead;
|
|
1221
1317
|
nesting = 0;
|
|
1222
1318
|
openCommands = [];
|
|
1223
1319
|
completedInput;
|
|
1224
|
-
constructor(budget, source, depth, warnings = [], lineOffset = 0, position, byteLocale = false, partial = false, lineIndex = new SourceLineIndex(source, budget), sourceOffset = 0, ordinaryBacktick = false, sourceValues, byteSource = false, syntax = defaultSyntax) {
|
|
1320
|
+
constructor(budget, source, depth, warnings = [], lineOffset = 0, position, byteLocale = false, partial = false, lineIndex = new SourceLineIndex(source, budget), sourceOffset = 0, ordinaryBacktick = false, sourceValues, byteSource = false, syntax = defaultSyntax, aliases) {
|
|
1225
1321
|
this.budget = budget;
|
|
1322
|
+
this.aliases = aliases;
|
|
1226
1323
|
if (position === undefined && depth === 0 && source.includes("\0"))
|
|
1227
1324
|
throw new ShellSyntaxError("NUL bytes are not valid shell source", source.indexOf("\0"));
|
|
1228
1325
|
budget.admit();
|
|
1229
|
-
this.lexer = new Lexer(budget, source, depth, warnings, lineOffset, byteLocale, undefined, partial, lineIndex, sourceOffset, ordinaryBacktick, sourceValues, byteSource, syntax);
|
|
1326
|
+
this.lexer = new Lexer(budget, source, depth, warnings, lineOffset, byteLocale, undefined, partial, lineIndex, sourceOffset, ordinaryBacktick, sourceValues, byteSource, syntax, aliases);
|
|
1230
1327
|
this.lexer.position = position ?? 0;
|
|
1231
1328
|
this.current = this.lexer.next();
|
|
1232
1329
|
}
|
|
@@ -1238,12 +1335,79 @@ class Parser {
|
|
|
1238
1335
|
}
|
|
1239
1336
|
advance() {
|
|
1240
1337
|
const previous = this.current;
|
|
1241
|
-
this.current = this.lookahead ?? this.
|
|
1338
|
+
this.current = this.lookahead ?? this.nextToken();
|
|
1339
|
+
this.lexer = this.tokenLexers.get(this.current) ?? this.lexer;
|
|
1242
1340
|
this.lookahead = undefined;
|
|
1243
1341
|
return previous;
|
|
1244
1342
|
}
|
|
1245
1343
|
peek() {
|
|
1246
|
-
|
|
1344
|
+
if (!this.lookahead) {
|
|
1345
|
+
const lexer = this.lexer;
|
|
1346
|
+
this.lookahead = this.nextToken();
|
|
1347
|
+
this.lexer = lexer;
|
|
1348
|
+
}
|
|
1349
|
+
return this.lookahead;
|
|
1350
|
+
}
|
|
1351
|
+
nextToken() {
|
|
1352
|
+
let token = this.lexer.next();
|
|
1353
|
+
if (!this.aliases?.size)
|
|
1354
|
+
return token;
|
|
1355
|
+
this.tokenLexers.set(token, this.lexer);
|
|
1356
|
+
this.tokenAliases.set(token, this.aliasFrames.map(frame => frame.name));
|
|
1357
|
+
let trailing = false;
|
|
1358
|
+
while (token.kind === "end" && this.aliasFrames.length) {
|
|
1359
|
+
const frame = this.aliasFrames.pop();
|
|
1360
|
+
this.lexer = frame.lexer;
|
|
1361
|
+
trailing ||= frame.trailing;
|
|
1362
|
+
token = frame.next;
|
|
1363
|
+
}
|
|
1364
|
+
if (trailing)
|
|
1365
|
+
this.aliasNextWords.add(token);
|
|
1366
|
+
return token;
|
|
1367
|
+
}
|
|
1368
|
+
expandAlias() {
|
|
1369
|
+
while (this.current.kind === "word") {
|
|
1370
|
+
const name = this.current.word?.plain;
|
|
1371
|
+
if (name === undefined || this.current.word.parts.some(part => part.quoted) || this.tokenAliases.get(this.current)?.includes(name))
|
|
1372
|
+
return;
|
|
1373
|
+
const value = this.aliases?.get(name);
|
|
1374
|
+
if (value === undefined)
|
|
1375
|
+
return;
|
|
1376
|
+
this.budget.admit(value.length + 1);
|
|
1377
|
+
const lexer = this.lexer;
|
|
1378
|
+
const line = lexer.lineAt(this.current.offset);
|
|
1379
|
+
const next = this.lookahead ?? lexer.next();
|
|
1380
|
+
this.tokenLexers.set(next, this.tokenLexers.get(next) ?? lexer);
|
|
1381
|
+
this.lookahead = undefined;
|
|
1382
|
+
this.aliasFrames.push({ lexer, next, name, trailing: value.endsWith(" ") || value.endsWith("\t") });
|
|
1383
|
+
this.lexer = new Lexer(this.budget, value, lexer.depth, lexer.warnings, line - 1, lexer.byteLocale, undefined, false, undefined, 0, false, undefined, lexer.byteSource, lexer.syntax, this.aliases);
|
|
1384
|
+
this.current = this.nextToken();
|
|
1385
|
+
}
|
|
1386
|
+
}
|
|
1387
|
+
assignmentWord(compound = false) {
|
|
1388
|
+
const word = this.current.word;
|
|
1389
|
+
const bracket = word.spelling?.indexOf("[") ?? -1;
|
|
1390
|
+
const prefix = word.spelling?.slice(0, bracket);
|
|
1391
|
+
if (bracket >= 0 && (compound && bracket === 0 || prefix && scalarAssignmentName({ offset: word.offset,
|
|
1392
|
+
parts: [{ kind: "text", quoted: false, value: prefix + "=" }] }) === prefix)) {
|
|
1393
|
+
const scanner = new Lexer(this.budget, this.lexer.source, this.lexer.depth, [], this.lexer.lineOffset, this.lexer.byteLocale, undefined, false, this.lexer.lineIndex, this.lexer.sourceOffset, this.lexer.ordinaryBacktick, this.lexer.sourceValues, this.lexer.byteSource, this.lexer.syntax);
|
|
1394
|
+
scanner.position = word.offset + bracket + 1;
|
|
1395
|
+
scanner.word("]");
|
|
1396
|
+
const end = scanner.position;
|
|
1397
|
+
if (end >= this.current.end && this.lexer.source[end] === "]"
|
|
1398
|
+
&& (this.lexer.source[end + 1] === "=" || this.lexer.source.slice(end + 1, end + 3) === "+=")) {
|
|
1399
|
+
// Only assignment positions may keep whitespace inside a subscript.
|
|
1400
|
+
// Ordinary argv words such as `echo a[x y]=z` retain their boundaries.
|
|
1401
|
+
this.lexer.position = word.offset;
|
|
1402
|
+
const parsed = this.lexer.word(undefined, false, false, false, false, end);
|
|
1403
|
+
this.budget.admit();
|
|
1404
|
+
const complete = { ...parsed, spelling: this.lexer.source.slice(word.offset, this.lexer.position) };
|
|
1405
|
+
this.lookahead = undefined;
|
|
1406
|
+
this.current = this.lexer.next();
|
|
1407
|
+
return complete;
|
|
1408
|
+
}
|
|
1409
|
+
}
|
|
1410
|
+
return this.advance().word;
|
|
1247
1411
|
}
|
|
1248
1412
|
is(value) { return this.current.value === value; }
|
|
1249
1413
|
isEnd() { return this.current.kind === "end"; }
|
|
@@ -1263,6 +1427,9 @@ class Parser {
|
|
|
1263
1427
|
if (captureInputUnits)
|
|
1264
1428
|
this.completedInput = { lists, count: 0, line };
|
|
1265
1429
|
while (this.current.kind !== "end" && !stops.has(this.current.value)) {
|
|
1430
|
+
this.expandAlias();
|
|
1431
|
+
if (this.isEnd() || stops.has(this.current.value))
|
|
1432
|
+
break;
|
|
1266
1433
|
this.budget.admit();
|
|
1267
1434
|
const pipelines = [this.pipeline()];
|
|
1268
1435
|
const operators = [];
|
|
@@ -1276,17 +1443,17 @@ class Parser {
|
|
|
1276
1443
|
separators.push(this.is("\n"));
|
|
1277
1444
|
if (captureInputUnits && this.is("\n"))
|
|
1278
1445
|
this.completedInput.count = lists.length;
|
|
1279
|
-
if (inputUnit && this.is("\n"))
|
|
1446
|
+
if (inputUnit && !this.aliasFrames.length && this.is("\n"))
|
|
1280
1447
|
break;
|
|
1281
1448
|
if (terminator || this.is(";") || this.is("\n")) {
|
|
1282
1449
|
this.advance();
|
|
1283
1450
|
if (captureInputUnits && this.is("\n"))
|
|
1284
1451
|
this.completedInput.count = lists.length;
|
|
1285
|
-
if (inputUnit && this.is("\n"))
|
|
1452
|
+
if (inputUnit && !this.aliasFrames.length && this.is("\n"))
|
|
1286
1453
|
break;
|
|
1287
1454
|
this.newlines();
|
|
1288
1455
|
}
|
|
1289
|
-
else if (!this.isEnd() && !this.is(")") && !(stops.has(this.current.value) && [";;", ";&", ";;&"].includes(this.current.value)))
|
|
1456
|
+
else if (!this.isEnd() && !this.is(")") && !(stops.has(this.current.value) && ([";;", ";&", ";;&"].includes(this.current.value) || isSelfDelimitingCompound(pipelines.at(-1)?.commands.at(-1)))))
|
|
1290
1457
|
this.error("Expected command separator");
|
|
1291
1458
|
}
|
|
1292
1459
|
const printed = printedSimpleLines(lists, separators, this.budget);
|
|
@@ -1314,6 +1481,7 @@ class Parser {
|
|
|
1314
1481
|
return { commands, negate };
|
|
1315
1482
|
}
|
|
1316
1483
|
command() {
|
|
1484
|
+
this.expandAlias();
|
|
1317
1485
|
if (++this.nesting + this.lexer.depth > this.lexer.budget.maxSyntaxDepth)
|
|
1318
1486
|
this.error(`Syntax nesting exceeds ${this.lexer.budget.maxSyntaxDepth}`);
|
|
1319
1487
|
this.budget.admit();
|
|
@@ -1331,8 +1499,9 @@ class Parser {
|
|
|
1331
1499
|
}
|
|
1332
1500
|
commandInner() {
|
|
1333
1501
|
this.budget.admit();
|
|
1334
|
-
const
|
|
1335
|
-
|
|
1502
|
+
const arithmeticSecondOpen = this.is("(") ? this.lexer.peekAfterContinuation(this.current.offset + 1) : -1;
|
|
1503
|
+
const arithmeticCommandEnd = arithmeticSecondOpen !== -1 && this.lexer.source[arithmeticSecondOpen] === "("
|
|
1504
|
+
? arithmeticEnd(this.lexer.source, arithmeticSecondOpen + 1, true, this.lexer.budget.maxSyntaxDepth) : -1;
|
|
1336
1505
|
let command;
|
|
1337
1506
|
if (this.is("[[")) {
|
|
1338
1507
|
const start = this.current.end;
|
|
@@ -1409,11 +1578,11 @@ class Parser {
|
|
|
1409
1578
|
command = { kind: "conditional", expression, source, redirects: [] };
|
|
1410
1579
|
}
|
|
1411
1580
|
else if (arithmeticCommandEnd !== -1) {
|
|
1412
|
-
const start =
|
|
1581
|
+
const start = arithmeticSecondOpen + 1;
|
|
1413
1582
|
const end = arithmeticCommandEnd;
|
|
1414
1583
|
const source = this.lexer.source.slice(start, end);
|
|
1415
1584
|
command = { kind: "arithmetic", expression: prepareArithmetic(source, this.budget), source, redirects: [] };
|
|
1416
|
-
this.lexer.position = end +
|
|
1585
|
+
this.lexer.position = this.lexer.peekAfterContinuation(end + 1) + 1;
|
|
1417
1586
|
this.lookahead = undefined;
|
|
1418
1587
|
this.current = this.lexer.next();
|
|
1419
1588
|
}
|
|
@@ -1493,24 +1662,54 @@ class Parser {
|
|
|
1493
1662
|
this.expect("done", true);
|
|
1494
1663
|
command = { kind, condition, body, redirects: [] };
|
|
1495
1664
|
}
|
|
1496
|
-
else if (this.is("for") && this.peek().value === "(" && this.lexer.source.
|
|
1665
|
+
else if (this.is("for") && this.peek().value === "(" && this.lexer.source[this.lexer.peekAfterContinuation(this.peek().offset + 1)] === "(") {
|
|
1497
1666
|
this.advance();
|
|
1498
|
-
const start = this.current.offset +
|
|
1667
|
+
const start = this.lexer.peekAfterContinuation(this.current.offset + 1) + 1;
|
|
1499
1668
|
let partStart = start;
|
|
1500
1669
|
let depth = 0;
|
|
1501
1670
|
let end = start;
|
|
1671
|
+
let quote = "";
|
|
1672
|
+
let ansiQuote = false;
|
|
1673
|
+
const quotedSubstitutions = [];
|
|
1502
1674
|
this.budget.admit(4);
|
|
1503
1675
|
const sources = [];
|
|
1504
1676
|
for (; end < this.lexer.source.length; end++) {
|
|
1505
1677
|
this.budget.admit();
|
|
1506
1678
|
const character = this.lexer.source[end];
|
|
1679
|
+
if (character === "\\" && (quote !== "'" || ansiQuote)) {
|
|
1680
|
+
end++;
|
|
1681
|
+
continue;
|
|
1682
|
+
}
|
|
1683
|
+
if (quote === '"' && character === "$" && this.lexer.source[end + 1] === "(") {
|
|
1684
|
+
if (quotedSubstitutions.length >= 64)
|
|
1685
|
+
this.error("Syntax nesting exceeds 64");
|
|
1686
|
+
quotedSubstitutions.push(depth);
|
|
1687
|
+
depth++;
|
|
1688
|
+
end++;
|
|
1689
|
+
quote = "";
|
|
1690
|
+
continue;
|
|
1691
|
+
}
|
|
1692
|
+
if (quote) {
|
|
1693
|
+
if (character === quote)
|
|
1694
|
+
quote = "";
|
|
1695
|
+
continue;
|
|
1696
|
+
}
|
|
1697
|
+
if (character === "'" || character === '"' || character === "`") {
|
|
1698
|
+
quote = character;
|
|
1699
|
+
ansiQuote = character === "'" && this.lexer.source[end - 1] === "$";
|
|
1700
|
+
continue;
|
|
1701
|
+
}
|
|
1507
1702
|
if (character === "(")
|
|
1508
1703
|
depth++;
|
|
1509
1704
|
else if (character === ")") {
|
|
1510
|
-
if (!depth && this.lexer.source[end + 1] === ")")
|
|
1705
|
+
if (!depth && this.lexer.source[this.lexer.peekAfterContinuation(end + 1)] === ")")
|
|
1511
1706
|
break;
|
|
1512
1707
|
if (--depth < 0)
|
|
1513
1708
|
this.error("Unterminated arithmetic for", true);
|
|
1709
|
+
if (quotedSubstitutions.at(-1) === depth) {
|
|
1710
|
+
quotedSubstitutions.pop();
|
|
1711
|
+
quote = '"';
|
|
1712
|
+
}
|
|
1514
1713
|
}
|
|
1515
1714
|
else if (character === ";" && !depth) {
|
|
1516
1715
|
if (sources.length === 2)
|
|
@@ -1519,13 +1718,13 @@ class Parser {
|
|
|
1519
1718
|
partStart = end + 1;
|
|
1520
1719
|
}
|
|
1521
1720
|
}
|
|
1522
|
-
if (end === this.lexer.source.length)
|
|
1721
|
+
if (quote || end === this.lexer.source.length)
|
|
1523
1722
|
this.error("Unterminated arithmetic for", true);
|
|
1524
1723
|
if (sources.length !== 2)
|
|
1525
1724
|
this.error("Arithmetic for requires three expressions");
|
|
1526
1725
|
sources.push(this.lexer.source.slice(partStart, end));
|
|
1527
1726
|
const expressions = sources.map(source => source.trim() ? prepareArithmetic(source, this.budget) : undefined);
|
|
1528
|
-
this.lexer.position = end +
|
|
1727
|
+
this.lexer.position = this.lexer.peekAfterContinuation(end + 1) + 1;
|
|
1529
1728
|
this.lookahead = undefined;
|
|
1530
1729
|
this.current = this.lexer.next();
|
|
1531
1730
|
if (this.is(";"))
|
|
@@ -1597,6 +1796,10 @@ class Parser {
|
|
|
1597
1796
|
};
|
|
1598
1797
|
let line;
|
|
1599
1798
|
while (true) {
|
|
1799
|
+
if (this.aliasNextWords.has(this.current) || words.every(previous => getArrayAssignment(previous) || scalarAssignmentName(previous))) {
|
|
1800
|
+
this.aliasNextWords.delete(this.current);
|
|
1801
|
+
this.expandAlias();
|
|
1802
|
+
}
|
|
1600
1803
|
const wordLine = this.lexer.lineAt(Math.max(this.current.offset, this.current.end - 1));
|
|
1601
1804
|
const redirect = this.redirect();
|
|
1602
1805
|
if (redirect) {
|
|
@@ -1605,14 +1808,15 @@ class Parser {
|
|
|
1605
1808
|
}
|
|
1606
1809
|
else if (this.current.kind === "word") {
|
|
1607
1810
|
line ??= wordLine;
|
|
1608
|
-
let word =
|
|
1811
|
+
let word = words.every(previous => getArrayAssignment(previous) || scalarAssignmentName(previous)) || indexedDeclaration()
|
|
1812
|
+
? this.assignmentWord() : this.advance().word;
|
|
1609
1813
|
const head = compoundHead(word, this.budget);
|
|
1610
1814
|
if (head && this.is("(")) {
|
|
1611
1815
|
this.advance();
|
|
1612
1816
|
const entries = [];
|
|
1613
1817
|
this.newlines();
|
|
1614
1818
|
while (this.current.kind === "word") {
|
|
1615
|
-
const original = this.
|
|
1819
|
+
const original = this.assignmentWord(true);
|
|
1616
1820
|
const entry = compoundEntry(original, this.budget, source => parseArraySubscript(source, this.budget, this.lexer.byteLocale, this.lexer.depth, this.lexer.byteSource, this.lexer.syntax), (source, start) => { const lexer = new Lexer(this.budget, source, this.lexer.depth, [], 0, this.lexer.byteLocale, undefined, false, undefined, 0, false, undefined, this.lexer.byteSource, this.lexer.syntax); lexer.position = start; lexer.word("]"); return lexer.source[lexer.position] === "]" ? lexer.position : -1; });
|
|
1617
1821
|
if (entry.index) {
|
|
1618
1822
|
this.budget.admit();
|
|
@@ -1740,7 +1944,7 @@ export function hereDocumentWords(document, line, byteLocale, warnings, budgetOr
|
|
|
1740
1944
|
}
|
|
1741
1945
|
})();
|
|
1742
1946
|
}
|
|
1743
|
-
export function parseShellUnit(source, position = 0, byteLocale = false, budgetOrByteSource = new ParseBudget(), lineIndexOrSyntax, sourceValues, byteSource = false, syntax) {
|
|
1947
|
+
export function parseShellUnit(source, position = 0, byteLocale = false, budgetOrByteSource = new ParseBudget(), lineIndexOrSyntax, sourceValues, byteSource = false, syntax, aliases) {
|
|
1744
1948
|
const budget = budgetOrByteSource instanceof ParseBudget ? budgetOrByteSource : new ParseBudget();
|
|
1745
1949
|
const lineIndex = lineIndexOrSyntax instanceof SourceLineIndex ? lineIndexOrSyntax : new SourceLineIndex(source, budget);
|
|
1746
1950
|
const captured = captureShellSyntax(syntax === undefined ? (lineIndexOrSyntax instanceof SourceLineIndex ? undefined : lineIndexOrSyntax) : syntax);
|
|
@@ -1749,7 +1953,7 @@ export function parseShellUnit(source, position = 0, byteLocale = false, budgetO
|
|
|
1749
1953
|
budget.admit();
|
|
1750
1954
|
if (lineIndex.source !== source || lineIndex.budget !== budget)
|
|
1751
1955
|
throw new TypeError("Source line index belongs to a different source or parse budget");
|
|
1752
|
-
const parser = new Parser(budget, source, 0, warnings, 0, position, byteLocale, false, lineIndex, 0, false, sourceValues, raw, captured);
|
|
1956
|
+
const parser = new Parser(budget, source, 0, warnings, 0, position, byteLocale, false, lineIndex, 0, false, sourceValues, raw, captured, aliases);
|
|
1753
1957
|
const script = parser.script(new Set(), true);
|
|
1754
1958
|
const next = parser.current.end;
|
|
1755
1959
|
const nul = source.indexOf("\0", position);
|
|
@@ -1758,7 +1962,7 @@ export function parseShellUnit(source, position = 0, byteLocale = false, budgetO
|
|
|
1758
1962
|
budget.admit(2);
|
|
1759
1963
|
return { script: { ...script, ...(warnings.length ? { warnings } : {}) }, next };
|
|
1760
1964
|
}
|
|
1761
|
-
export function parseShellInputUnit(source, byteLocale = false, budgetOrSyntax = new ParseBudget(), suppliedLineIndex, syntax) {
|
|
1965
|
+
export function parseShellInputUnit(source, byteLocale = false, budgetOrSyntax = new ParseBudget(), suppliedLineIndex, syntax, aliases) {
|
|
1762
1966
|
const budget = budgetOrSyntax instanceof ParseBudget ? budgetOrSyntax : new ParseBudget();
|
|
1763
1967
|
const lineIndex = suppliedLineIndex ?? new SourceLineIndex(source, budget);
|
|
1764
1968
|
const captured = captureShellSyntax(syntax === undefined ? (budgetOrSyntax instanceof ParseBudget ? undefined : budgetOrSyntax) : syntax);
|
|
@@ -1767,7 +1971,7 @@ export function parseShellInputUnit(source, byteLocale = false, budgetOrSyntax =
|
|
|
1767
1971
|
budget.admit();
|
|
1768
1972
|
if (lineIndex.source !== source || lineIndex.budget !== budget)
|
|
1769
1973
|
throw new TypeError("Source line index belongs to a different source or parse budget");
|
|
1770
|
-
const parser = new Parser(budget, source, 0, warnings, 0, 0, byteLocale, true, lineIndex, 0, false, undefined, false, captured);
|
|
1974
|
+
const parser = new Parser(budget, source, 0, warnings, 0, 0, byteLocale, true, lineIndex, 0, false, undefined, false, captured, aliases);
|
|
1771
1975
|
const script = parser.script(new Set(), true);
|
|
1772
1976
|
budget.admit(2);
|
|
1773
1977
|
return { script: { ...script, ...(warnings.length ? { warnings } : {}) }, next: parser.current.end };
|
|
@@ -1780,10 +1984,10 @@ export function parseShellInputUnit(source, byteLocale = false, budgetOrSyntax =
|
|
|
1780
1984
|
throw error;
|
|
1781
1985
|
}
|
|
1782
1986
|
}
|
|
1783
|
-
function parseSource(source, depth, warnings, lineOffset, byteLocale, budget, ordinaryBacktick = false, sourceValues, byteSource = false, syntax = defaultSyntax) {
|
|
1987
|
+
function parseSource(source, depth, warnings, lineOffset, byteLocale, budget, ordinaryBacktick = false, sourceValues, byteSource = false, syntax = defaultSyntax, aliases) {
|
|
1784
1988
|
budget.admit();
|
|
1785
1989
|
const warningCount = warnings.length;
|
|
1786
|
-
const parser = new Parser(budget, source, depth, warnings, lineOffset, undefined, byteLocale, false, undefined, 0, ordinaryBacktick, sourceValues, byteSource, syntax);
|
|
1990
|
+
const parser = new Parser(budget, source, depth, warnings, lineOffset, undefined, byteLocale, false, undefined, 0, ordinaryBacktick, sourceValues, byteSource, syntax, aliases);
|
|
1787
1991
|
try {
|
|
1788
1992
|
const script = parser.script(new Set(), false, ordinaryBacktick);
|
|
1789
1993
|
if (parser.current.kind !== "end")
|