@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,357 +0,0 @@
|
|
|
1
|
-
import { createFileServer } from './files.js';
|
|
2
|
-
import { inspectOutputTree, retrieveOutputs } from './output-retrieval.js';
|
|
3
|
-
import { UploadError } from './upload-protocol.js';
|
|
4
|
-
// Reversible byte spelling for the shared projector. It is never a host path.
|
|
5
|
-
function spelling(bytes) {
|
|
6
|
-
for (const byte of bytes)
|
|
7
|
-
if (!Number.isInteger(byte) || byte < 1 || byte > 255)
|
|
8
|
-
throw new TypeError('Invalid output byte path');
|
|
9
|
-
return bytes.map(byte => String.fromCharCode(byte)).join('');
|
|
10
|
-
}
|
|
11
|
-
function bytePath(path) { return Array.from(path, char => char.charCodeAt(0)); }
|
|
12
|
-
/** Invocation-local effect authority, populated by actual settled native IO,
|
|
13
|
-
* never by directory enumeration or guessed output operands. Retains must be
|
|
14
|
-
* independently owned; closing native descriptors must not invalidate retrieval.
|
|
15
|
-
* A retain preserves identity, not an immutable content snapshot. */
|
|
16
|
-
export function createEffectStore(options) {
|
|
17
|
-
options = { ...options };
|
|
18
|
-
if (!Number.isSafeInteger(options.maxEffects) || options.maxEffects < 1)
|
|
19
|
-
throw new TypeError('Invalid effect bound');
|
|
20
|
-
const effects = [];
|
|
21
|
-
const produced = new Set();
|
|
22
|
-
const resources = new Map();
|
|
23
|
-
const retrievalFailures = new Map();
|
|
24
|
-
const handles = new Map();
|
|
25
|
-
const scope = { tenantId: crypto.randomUUID(), sessionId: crypto.randomUUID(), epoch: crypto.randomUUID(), invocationId: crypto.randomUUID() };
|
|
26
|
-
let native = { state: 'running' };
|
|
27
|
-
let closed = false;
|
|
28
|
-
let retiring;
|
|
29
|
-
let started = false;
|
|
30
|
-
const lifetime = new AbortController();
|
|
31
|
-
const replayIdentity = Object.freeze({});
|
|
32
|
-
let reservations = 0;
|
|
33
|
-
const files = createFileServer({ maxHandles: options.maxEffects, maxFrameBytes: options.maxFrameBytes, async open(_scope, input) {
|
|
34
|
-
const resource = resources.get(input.path);
|
|
35
|
-
if (!resource)
|
|
36
|
-
throw new Error('Unknown effect object');
|
|
37
|
-
return resource;
|
|
38
|
-
} });
|
|
39
|
-
function check() { if (closed)
|
|
40
|
-
throw new Error('Effect retention closed'); }
|
|
41
|
-
function handle(object) {
|
|
42
|
-
check();
|
|
43
|
-
// Retention alone also covers write-capable opens of untouched inputs.
|
|
44
|
-
// Only settled invocation effects grant output retrieval membership.
|
|
45
|
-
if (!produced.has(object))
|
|
46
|
-
throw new Error('Not an invocation output');
|
|
47
|
-
if (!resources.has(object))
|
|
48
|
-
throw new Error('Output retrieval unavailable');
|
|
49
|
-
let value = handles.get(object);
|
|
50
|
-
if (!value) {
|
|
51
|
-
value = files.open(scope, { namespaceId: 'effects', path: object }, new AbortController().signal);
|
|
52
|
-
handles.set(object, value);
|
|
53
|
-
}
|
|
54
|
-
return value;
|
|
55
|
-
}
|
|
56
|
-
function inspect() {
|
|
57
|
-
check();
|
|
58
|
-
// A write-capable open can retain a prior file without ever changing it.
|
|
59
|
-
// Only actual settled effects establish output membership.
|
|
60
|
-
const outputs = [...produced].filter(object => resources.has(object) || retrievalFailures.has(object));
|
|
61
|
-
return structuredClone({ effects, native, outputs, ...(retrievalFailures.size ? { retrievalFailures: [...retrievalFailures].map(([object, error]) => ({ object, error })) } : {}) });
|
|
62
|
-
}
|
|
63
|
-
function outputManifest(snapshot) {
|
|
64
|
-
return {
|
|
65
|
-
jobId: scope.invocationId, outputs: snapshot.outputs.filter(object => resources.has(object)), effectBarrier: String(snapshot.effects.length), outputComplete: snapshot.native.state !== 'running',
|
|
66
|
-
effects: snapshot.effects.flatMap(effect => {
|
|
67
|
-
if (effect.operation === 'rename') {
|
|
68
|
-
if (effect.moved === false)
|
|
69
|
-
return [];
|
|
70
|
-
}
|
|
71
|
-
return [{ operationId: String(effect.sequence), sequence: String(effect.sequence), operation: effect.operation, state: effect.operation === 'rename' && effect.moved !== true ? 'unknown' : 'applied', namespaceId: 'effects',
|
|
72
|
-
...(effect.count === undefined ? {} : { acknowledgedBytes: String(effect.count) }),
|
|
73
|
-
...(effect.path ? { path: spelling(effect.path) } : {}), ...(effect.destination ? { destination: spelling(effect.destination) } : {}), ...(effect.object ? { identityId: effect.object } : {}) }];
|
|
74
|
-
}),
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
inspect,
|
|
79
|
-
inspectTree(logicalRoot) {
|
|
80
|
-
const snapshot = inspect();
|
|
81
|
-
const tree = inspectOutputTree(outputManifest(snapshot), spelling(logicalRoot));
|
|
82
|
-
return { manifest: snapshot,
|
|
83
|
-
files: tree.files.map(file => ({ path: bytePath(file.path), relativePath: bytePath(file.relativePath), object: file.identityId })),
|
|
84
|
-
directories: tree.directories.map(directory => ({ path: bytePath(directory.path), relativePath: bytePath(directory.relativePath) })),
|
|
85
|
-
retainedIdentities: tree.retainedIdentities, detachedIdentities: tree.detachedIdentities, unlocatedIdentities: tree.unlocatedIdentities,
|
|
86
|
-
unavailablePaths: tree.unavailablePaths.map(file => ({ path: bytePath(file.path), relativePath: bytePath(file.relativePath) })),
|
|
87
|
-
unresolvedEffects: tree.unresolvedEffects,
|
|
88
|
-
};
|
|
89
|
-
},
|
|
90
|
-
assertCapacity() { check(); if (effects.length + reservations >= options.maxEffects)
|
|
91
|
-
throw new Error('Effect receipt capacity'); },
|
|
92
|
-
/** Reserve a receipt before awaiting a canonical mutation. Release on every
|
|
93
|
-
* outcome; a failed operation does not consume a settled-effect slot. */
|
|
94
|
-
reserve(bytes = 0) {
|
|
95
|
-
check();
|
|
96
|
-
if (effects.length + reservations >= options.maxEffects)
|
|
97
|
-
throw new Error('Effect receipt capacity');
|
|
98
|
-
if (!Number.isSafeInteger(bytes) || bytes < 0 || bytes > options.maxFrameBytes)
|
|
99
|
-
throw new TypeError('Effect receipt byte limit');
|
|
100
|
-
reservations++;
|
|
101
|
-
let released = false;
|
|
102
|
-
return () => { if (!released) {
|
|
103
|
-
released = true;
|
|
104
|
-
reservations--;
|
|
105
|
-
} };
|
|
106
|
-
},
|
|
107
|
-
record(effect) {
|
|
108
|
-
check();
|
|
109
|
-
if (effects.length >= options.maxEffects)
|
|
110
|
-
throw new Error('Effect receipt capacity');
|
|
111
|
-
// Observe structural receipts once and own their byte arrays before
|
|
112
|
-
// validation. Re-reading accessors could retain different bytes from
|
|
113
|
-
// those admitted, or change output membership after settlement.
|
|
114
|
-
effect = structuredClone(effect);
|
|
115
|
-
for (const path of [effect.path, effect.destination, effect.target])
|
|
116
|
-
if (path && (!path.length || path.includes(0) || path.some(n => !Number.isInteger(n) || n < 0 || n > 255)))
|
|
117
|
-
throw new TypeError('Invalid effect path');
|
|
118
|
-
if (effect.operation === 'write' || effect.operation === 'append' || effect.bytes !== undefined || effect.count !== undefined) {
|
|
119
|
-
if (!Array.isArray(effect.bytes) || effect.bytes.length > options.maxFrameBytes
|
|
120
|
-
|| !Number.isSafeInteger(effect.count) || effect.count !== effect.bytes.length)
|
|
121
|
-
throw new TypeError('Invalid settled effect bytes');
|
|
122
|
-
for (const byte of effect.bytes)
|
|
123
|
-
if (!Number.isInteger(byte) || byte < 0 || byte > 255)
|
|
124
|
-
throw new TypeError('Invalid settled effect bytes');
|
|
125
|
-
}
|
|
126
|
-
effects.push({ ...effect, sequence: effects.length });
|
|
127
|
-
if (effect.object && effect.operation !== 'open'
|
|
128
|
-
&& !(effect.operation === 'rename' && effect.moved === false)
|
|
129
|
-
&& !((effect.operation === 'write' || effect.operation === 'append') && effect.count === 0))
|
|
130
|
-
produced.add(effect.object);
|
|
131
|
-
},
|
|
132
|
-
retain(object, resource) {
|
|
133
|
-
check();
|
|
134
|
-
if (!object || resources.has(object) || resources.size >= options.maxEffects)
|
|
135
|
-
throw new Error('Effect retain conflict or capacity');
|
|
136
|
-
// Retrieval opens lazily. Pin the admitted capability now so mutation of
|
|
137
|
-
// its public method table cannot redirect reads or replace owned cleanup.
|
|
138
|
-
// Bound receivers still observe live canonical contents, not snapshots.
|
|
139
|
-
resources.set(object, Object.freeze({
|
|
140
|
-
identity: resource.identity, freshness: resource.freshness?.bind(resource),
|
|
141
|
-
stat: resource.stat.bind(resource), read: resource.read.bind(resource),
|
|
142
|
-
close: resource.close.bind(resource),
|
|
143
|
-
}));
|
|
144
|
-
},
|
|
145
|
-
failRetrieval(object, error) { check(); retrievalFailures.set(object, error instanceof Error ? error.message : String(error)); },
|
|
146
|
-
settle(result) {
|
|
147
|
-
check();
|
|
148
|
-
if (result.state === 'running' && started)
|
|
149
|
-
throw new Error('Effect invocation already started');
|
|
150
|
-
if (native.state !== 'running')
|
|
151
|
-
throw new Error('Native settlement already recorded');
|
|
152
|
-
started = true;
|
|
153
|
-
native = structuredClone(result);
|
|
154
|
-
},
|
|
155
|
-
/** Obtain a host-qualified content version for direct range-download resume.
|
|
156
|
-
* Preserve this capability across interruption; a retain alone cannot prove
|
|
157
|
-
* that an acknowledged prefix still belongs to the current content. */
|
|
158
|
-
async freshness(object, signal) {
|
|
159
|
-
return files.freshness(scope, await handle(object), signal);
|
|
160
|
-
},
|
|
161
|
-
async stat(object, signal, freshness) { return files.stat(scope, await handle(object), signal, freshness); },
|
|
162
|
-
/** Optional freshness must originate from this store and this retained file.
|
|
163
|
-
* Guarded reads fail when the content changes, including after interruption. */
|
|
164
|
-
download(object, start, end, signal = new AbortController().signal, freshness) {
|
|
165
|
-
check();
|
|
166
|
-
if (typeof start !== 'bigint' || typeof end !== 'bigint' || start < 0n || end < start || end > 9223372036854775807n)
|
|
167
|
-
throw new UploadError(416, 'Unrepresentable file range');
|
|
168
|
-
signal.throwIfAborted();
|
|
169
|
-
let reader;
|
|
170
|
-
let position = start;
|
|
171
|
-
const abort = new AbortController();
|
|
172
|
-
const combined = AbortSignal.any([signal, abort.signal, lifetime.signal]);
|
|
173
|
-
let finished = false;
|
|
174
|
-
let pulling = false;
|
|
175
|
-
let target;
|
|
176
|
-
const release = () => { reader?.releaseLock(); reader = undefined; };
|
|
177
|
-
const finish = () => { finished = true; combined.removeEventListener('abort', cancelled); };
|
|
178
|
-
const cancelled = () => {
|
|
179
|
-
if (finished)
|
|
180
|
-
return;
|
|
181
|
-
finish();
|
|
182
|
-
target.error(combined.reason);
|
|
183
|
-
if (!pulling)
|
|
184
|
-
release();
|
|
185
|
-
};
|
|
186
|
-
return new ReadableStream({
|
|
187
|
-
start(controller) {
|
|
188
|
-
target = controller;
|
|
189
|
-
combined.addEventListener('abort', cancelled, { once: true });
|
|
190
|
-
if (combined.aborted)
|
|
191
|
-
cancelled();
|
|
192
|
-
},
|
|
193
|
-
async pull(controller) {
|
|
194
|
-
if (finished)
|
|
195
|
-
return;
|
|
196
|
-
pulling = true;
|
|
197
|
-
try {
|
|
198
|
-
combined.throwIfAborted();
|
|
199
|
-
reader ??= files.stream(scope, await handle(object), start, end, combined, freshness).getReader();
|
|
200
|
-
const part = await reader.read();
|
|
201
|
-
if (part.done) {
|
|
202
|
-
reader.releaseLock();
|
|
203
|
-
reader = undefined;
|
|
204
|
-
if (position !== end)
|
|
205
|
-
throw new Error('Output range interrupted');
|
|
206
|
-
finish();
|
|
207
|
-
controller.close();
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
position += BigInt(part.value.length);
|
|
211
|
-
controller.enqueue(part.value);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
catch (error) {
|
|
215
|
-
if (!finished) {
|
|
216
|
-
finish();
|
|
217
|
-
controller.error(error);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
finally {
|
|
221
|
-
pulling = false;
|
|
222
|
-
if (finished)
|
|
223
|
-
release();
|
|
224
|
-
}
|
|
225
|
-
},
|
|
226
|
-
async cancel(reason) { finish(); const cancellation = reader?.cancel(reason); abort.abort(reason); await cancellation; if (!pulling)
|
|
227
|
-
release(); },
|
|
228
|
-
}, { highWaterMark: 0 });
|
|
229
|
-
},
|
|
230
|
-
/** Replay ordered settled receipts. Preserve the returned cursor for bound
|
|
231
|
-
* resume. Legacy numeric offsets leave prefix ownership to the caller. */
|
|
232
|
-
async reconstruct(destination, progress = 0, signal) {
|
|
233
|
-
check();
|
|
234
|
-
const cursor = typeof progress === 'number' ? { nextSequence: progress } : progress;
|
|
235
|
-
let nextSequence = cursor.nextSequence;
|
|
236
|
-
signal = signal ? AbortSignal.any([signal, lifetime.signal]) : lifetime.signal;
|
|
237
|
-
const snapshot = inspect();
|
|
238
|
-
try {
|
|
239
|
-
if (!Number.isSafeInteger(nextSequence) || nextSequence < 0 || nextSequence > snapshot.effects.length)
|
|
240
|
-
throw new TypeError('Invalid effect cursor');
|
|
241
|
-
const identity = destination.identity ?? destination;
|
|
242
|
-
if ((typeof identity !== 'object' || identity === null) && typeof identity !== 'symbol')
|
|
243
|
-
throw new TypeError('Invalid effect destination identity');
|
|
244
|
-
if (typeof progress !== 'number' && (cursor.invocation !== undefined || nextSequence > 0)
|
|
245
|
-
&& cursor.invocation !== replayIdentity)
|
|
246
|
-
throw new Error('Effect resume cursor belongs to another invocation or has no invocation binding');
|
|
247
|
-
if (typeof progress !== 'number' && (cursor.destination !== undefined || nextSequence > 0)
|
|
248
|
-
&& cursor.destination !== identity)
|
|
249
|
-
throw new Error('Effect resume cursor belongs to another destination or has no destination binding');
|
|
250
|
-
const apply = destination.apply.bind(destination);
|
|
251
|
-
cursor.invocation = replayIdentity;
|
|
252
|
-
cursor.destination = identity;
|
|
253
|
-
for (; nextSequence < snapshot.effects.length; cursor.nextSequence = ++nextSequence) {
|
|
254
|
-
check();
|
|
255
|
-
signal?.throwIfAborted();
|
|
256
|
-
const effect = snapshot.effects[nextSequence];
|
|
257
|
-
if (effect.operation === 'open')
|
|
258
|
-
continue;
|
|
259
|
-
if (effect.operation === 'rename') {
|
|
260
|
-
if (effect.moved === false)
|
|
261
|
-
continue;
|
|
262
|
-
if (effect.moved !== true)
|
|
263
|
-
throw new Error('Canonical rename outcome unavailable');
|
|
264
|
-
}
|
|
265
|
-
await apply(structuredClone(effect), signal);
|
|
266
|
-
}
|
|
267
|
-
signal.throwIfAborted();
|
|
268
|
-
return { manifest: snapshot, native: snapshot.native, transfer: { state: 'complete', nextSequence, cursor } };
|
|
269
|
-
}
|
|
270
|
-
catch (error) {
|
|
271
|
-
return { manifest: snapshot, native: snapshot.native, transfer: { state: 'failed', nextSequence, cursor, error } };
|
|
272
|
-
}
|
|
273
|
-
},
|
|
274
|
-
/** Copy the surviving invocation-produced tree, even after native failure.
|
|
275
|
-
* This does not replay mutations onto the live canonical execution tree.
|
|
276
|
-
* Retained content remains live; resume requires unchanged source content. */
|
|
277
|
-
async retrieve(logicalRoot, destination, cursor = { completed: new Set(), offsets: new Map() }, signal) {
|
|
278
|
-
const snapshot = inspect();
|
|
279
|
-
signal = signal ? AbortSignal.any([signal, lifetime.signal]) : lifetime.signal;
|
|
280
|
-
try {
|
|
281
|
-
// Admit destination authority before retained IO can await host work.
|
|
282
|
-
// Method replacement must not redirect an acknowledged transfer suffix.
|
|
283
|
-
const mkdir = destination.mkdir.bind(destination);
|
|
284
|
-
const open = destination.open.bind(destination);
|
|
285
|
-
const identity = destination.identity ?? destination;
|
|
286
|
-
const manifest = outputManifest(snapshot);
|
|
287
|
-
const guards = new Map();
|
|
288
|
-
const result = await retrieveOutputs(manifest, spelling(logicalRoot), {
|
|
289
|
-
async freshness(object, signal) {
|
|
290
|
-
const guard = await files.freshness(scope, await handle(object), signal);
|
|
291
|
-
if (guard)
|
|
292
|
-
guards.set(object, guard);
|
|
293
|
-
return guard;
|
|
294
|
-
},
|
|
295
|
-
async metadata(object, signal) { return files.stat(scope, await handle(object), signal, guards.get(object)); },
|
|
296
|
-
async range(object, start, signal = new AbortController().signal) {
|
|
297
|
-
const id = await handle(object);
|
|
298
|
-
const guard = guards.get(object);
|
|
299
|
-
const metadata = await files.stat(scope, id, signal, guard);
|
|
300
|
-
return files.stream(scope, id, start, BigInt(metadata.size), signal, guard);
|
|
301
|
-
},
|
|
302
|
-
}, {
|
|
303
|
-
identity,
|
|
304
|
-
mkdir(path, signal) { check(); return mkdir(Uint8Array.from(path, char => char.charCodeAt(0)), signal); },
|
|
305
|
-
async open(path, metadata, signal) {
|
|
306
|
-
check();
|
|
307
|
-
const file = await open(Uint8Array.from(path, char => char.charCodeAt(0)), metadata, signal);
|
|
308
|
-
// Own the acquired destination before fallible method admission.
|
|
309
|
-
// Getters can fail or replace its public cleanup method; retire the
|
|
310
|
-
// acquired capability without touching settled canonical effects.
|
|
311
|
-
const close = file.close.bind(file);
|
|
312
|
-
try {
|
|
313
|
-
const write = file.write.bind(file);
|
|
314
|
-
const truncate = file.truncate.bind(file);
|
|
315
|
-
return {
|
|
316
|
-
write(position, bytes, signal) { check(); return write(position, bytes, signal); },
|
|
317
|
-
truncate(size, signal) { check(); return truncate(size, signal); },
|
|
318
|
-
close,
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
catch (error) {
|
|
322
|
-
try {
|
|
323
|
-
await close();
|
|
324
|
-
}
|
|
325
|
-
catch (cleanup) {
|
|
326
|
-
throw new AggregateError([error, cleanup], 'Output destination admission cleanup failed', { cause: error });
|
|
327
|
-
}
|
|
328
|
-
throw error;
|
|
329
|
-
}
|
|
330
|
-
},
|
|
331
|
-
}, cursor, signal, { maxFrameBytes: options.maxFrameBytes });
|
|
332
|
-
return { manifest: snapshot, native: snapshot.native, transfer: result.transfer };
|
|
333
|
-
}
|
|
334
|
-
catch (error) {
|
|
335
|
-
return { manifest: snapshot, native: snapshot.native, transfer: { state: 'failed', error, cursor } };
|
|
336
|
-
}
|
|
337
|
-
},
|
|
338
|
-
close() {
|
|
339
|
-
if (retiring)
|
|
340
|
-
return retiring;
|
|
341
|
-
closed = true;
|
|
342
|
-
// Canonical cancellation listeners may synchronously reenter close.
|
|
343
|
-
// Publish their shared drain before notifying any retained consumer.
|
|
344
|
-
retiring = Promise.resolve().then(async () => {
|
|
345
|
-
await Promise.allSettled([...handles.values()]);
|
|
346
|
-
const results = await Promise.allSettled([files.disposeAll(), ...[...resources].filter(([object]) => !handles.has(object)).map(([, resource]) => Promise.resolve().then(() => resource.close()))]);
|
|
347
|
-
resources.clear();
|
|
348
|
-
handles.clear();
|
|
349
|
-
const failures = results.filter(result => result.status === 'rejected');
|
|
350
|
-
if (failures.length)
|
|
351
|
-
throw new AggregateError(failures.map(result => result.reason), 'Effect retain cleanup failed');
|
|
352
|
-
});
|
|
353
|
-
lifetime.abort(new Error('Effect retention closed'));
|
|
354
|
-
return retiring;
|
|
355
|
-
},
|
|
356
|
-
};
|
|
357
|
-
}
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
export class EndpointCapabilityGap extends Error {
|
|
2
|
-
constructor() { super('No admitted endpoint transport matches the native request and context'); this.name = 'EndpointCapabilityGap'; }
|
|
3
|
-
}
|
|
4
|
-
function sameContext(a, b) {
|
|
5
|
-
return ['network', 'dns', 'proxy', 'bind', 'tls', 'certificates'].every(key => typeof a[key] === 'string' && a[key].length > 0 && a[key] === b[key]);
|
|
6
|
-
}
|
|
7
|
-
function ownOptions(options) {
|
|
8
|
-
if (!Array.isArray(options))
|
|
9
|
-
throw new EndpointCapabilityGap();
|
|
10
|
-
// Native options are indexed, ordered entries. An array's custom iterator
|
|
11
|
-
// must neither replace their bytes nor silently omit unqualified options.
|
|
12
|
-
return Array.from({ length: options.length }, (_, index) => {
|
|
13
|
-
if (!Object.hasOwn(options, index))
|
|
14
|
-
throw new EndpointCapabilityGap();
|
|
15
|
-
const option = options[index];
|
|
16
|
-
if (option === null || typeof option !== 'object')
|
|
17
|
-
throw new EndpointCapabilityGap();
|
|
18
|
-
const { name, value } = option;
|
|
19
|
-
if (!(name instanceof Uint8Array) || !(value instanceof Uint8Array))
|
|
20
|
-
throw new EndpointCapabilityGap();
|
|
21
|
-
return { name: new Uint8Array(name), value: new Uint8Array(value) };
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
/** Creating access is inert. Call open only from the actual native socket stage,
|
|
25
|
-
* including each redirect/reload/key/seek/retry open; never for discovery hints.
|
|
26
|
-
* Native owns HTTP semantics and retry policy. Provider failures propagate once. */
|
|
27
|
-
export function createEndpointAccess(config) {
|
|
28
|
-
// Admission belongs to this access instance. Caller mutations must not widen
|
|
29
|
-
// qualification, change endpoint context, or authorize another relay later.
|
|
30
|
-
const sandbox = { ...config.sandbox };
|
|
31
|
-
// Missing context cannot decide whether localhost denotes the sandbox or the
|
|
32
|
-
// caller. Define every context component before selecting either route.
|
|
33
|
-
if (!sameContext(sandbox, sandbox))
|
|
34
|
-
throw new EndpointCapabilityGap();
|
|
35
|
-
const declaredRelays = config.admittedRelays;
|
|
36
|
-
if (declaredRelays !== undefined && !Array.isArray(declaredRelays)) {
|
|
37
|
-
throw new TypeError('Relay admission must be an array of nonempty provider identities');
|
|
38
|
-
}
|
|
39
|
-
const relayIdentities = Array.from({ length: declaredRelays?.length ?? 0 }, (_, index) => declaredRelays && Object.hasOwn(declaredRelays, index) ? declaredRelays[index] : undefined);
|
|
40
|
-
if (relayIdentities.some(id => typeof id !== 'string' || !id.length)) {
|
|
41
|
-
throw new TypeError('Relay admission must be an array of nonempty provider identities');
|
|
42
|
-
}
|
|
43
|
-
const admittedRelays = new Set(relayIdentities);
|
|
44
|
-
const identities = new Set();
|
|
45
|
-
const declaredProviders = config.providers;
|
|
46
|
-
if (!Array.isArray(declaredProviders))
|
|
47
|
-
throw new EndpointCapabilityGap();
|
|
48
|
-
const providers = Array.from({ length: declaredProviders.length }, (_, index) => {
|
|
49
|
-
if (!Object.hasOwn(declaredProviders, index))
|
|
50
|
-
throw new EndpointCapabilityGap();
|
|
51
|
-
const provider = declaredProviders[index];
|
|
52
|
-
const id = provider.id;
|
|
53
|
-
if (typeof id !== 'string' || !id.length || identities.has(id)) {
|
|
54
|
-
throw new TypeError('Endpoint provider identities must be nonempty and unique');
|
|
55
|
-
}
|
|
56
|
-
identities.add(id);
|
|
57
|
-
const capabilities = provider.capabilities;
|
|
58
|
-
if (!Array.isArray(capabilities))
|
|
59
|
-
throw new EndpointCapabilityGap();
|
|
60
|
-
return {
|
|
61
|
-
id,
|
|
62
|
-
open: provider.open.bind(provider),
|
|
63
|
-
capabilities: Array.from({ length: capabilities.length }, (_, index) => {
|
|
64
|
-
if (!Object.hasOwn(capabilities, index))
|
|
65
|
-
throw new EndpointCapabilityGap();
|
|
66
|
-
const capability = capabilities[index];
|
|
67
|
-
// Capture accessor-backed receipt fields once, then own those exact
|
|
68
|
-
// fields. A second read must not substitute a different qualification.
|
|
69
|
-
const owned = { ...capability };
|
|
70
|
-
const transports = owned.transports;
|
|
71
|
-
if (!Array.isArray(transports))
|
|
72
|
-
throw new EndpointCapabilityGap();
|
|
73
|
-
return {
|
|
74
|
-
...owned,
|
|
75
|
-
context: { ...owned.context },
|
|
76
|
-
transports: Array.from({ length: transports.length }, (_, index) => {
|
|
77
|
-
if (!Object.hasOwn(transports, index))
|
|
78
|
-
throw new EndpointCapabilityGap();
|
|
79
|
-
const transport = transports[index];
|
|
80
|
-
const owned = { ...transport };
|
|
81
|
-
if (owned.stage !== undefined && (typeof owned.stage !== 'string' || !owned.stage.length)) {
|
|
82
|
-
throw new EndpointCapabilityGap();
|
|
83
|
-
}
|
|
84
|
-
if (owned.endpoint !== undefined && !(owned.endpoint instanceof Uint8Array)) {
|
|
85
|
-
throw new EndpointCapabilityGap();
|
|
86
|
-
}
|
|
87
|
-
const endpoint = owned.endpoint === undefined ? undefined : new Uint8Array(owned.endpoint);
|
|
88
|
-
if (endpoint !== undefined && !endpoint.length)
|
|
89
|
-
throw new EndpointCapabilityGap();
|
|
90
|
-
return { ...owned,
|
|
91
|
-
endpoint,
|
|
92
|
-
options: owned.options === undefined ? undefined : ownOptions(owned.options) };
|
|
93
|
-
}),
|
|
94
|
-
// Iterability alone is not receipt admission: strings would otherwise
|
|
95
|
-
// become nonempty character receipts and falsely qualify a transport.
|
|
96
|
-
evidence: Array.isArray(owned.evidence) ? Array.from({ length: owned.evidence.length }, (_, index) => Object.hasOwn(owned.evidence, index) ? owned.evidence[index] : undefined) : [],
|
|
97
|
-
};
|
|
98
|
-
}),
|
|
99
|
-
};
|
|
100
|
-
});
|
|
101
|
-
const pending = new Set();
|
|
102
|
-
const leases = new Set();
|
|
103
|
-
const shutdown = new AbortController();
|
|
104
|
-
let closing;
|
|
105
|
-
async function acquire(request) {
|
|
106
|
-
if (closing)
|
|
107
|
-
throw new Error('Endpoint access is retiring');
|
|
108
|
-
// Qualify and dispatch the same owned request. Accessors or later caller
|
|
109
|
-
// mutation cannot substitute an unqualified protocol/build/context.
|
|
110
|
-
request = { ...request };
|
|
111
|
-
if (!(request.endpoint instanceof Uint8Array)
|
|
112
|
-
|| !Array.isArray(request.options))
|
|
113
|
-
throw new EndpointCapabilityGap();
|
|
114
|
-
const endpoint = new Uint8Array(request.endpoint);
|
|
115
|
-
if (!endpoint.length)
|
|
116
|
-
throw new EndpointCapabilityGap();
|
|
117
|
-
const options = ownOptions(request.options);
|
|
118
|
-
request = {
|
|
119
|
-
...request, context: { ...request.context }, endpoint,
|
|
120
|
-
options,
|
|
121
|
-
};
|
|
122
|
-
if (typeof request.stage !== 'string' || !request.stage.length
|
|
123
|
-
|| typeof request.protocol !== 'string' || !request.protocol.length
|
|
124
|
-
|| !['stream', 'datagram'].includes(request.semantics)
|
|
125
|
-
|| !['connect', 'bind', 'listen', 'multicast'].includes(request.operation))
|
|
126
|
-
throw new EndpointCapabilityGap();
|
|
127
|
-
const signal = request.signal ? AbortSignal.any([request.signal, shutdown.signal]) : shutdown.signal;
|
|
128
|
-
request = { ...request, signal };
|
|
129
|
-
signal.throwIfAborted();
|
|
130
|
-
const route = sameContext(request.context, sandbox) ? 'direct' : 'relay';
|
|
131
|
-
for (const provider of providers) {
|
|
132
|
-
if (route === 'relay' && !admittedRelays.has(provider.id))
|
|
133
|
-
continue;
|
|
134
|
-
const capability = provider.capabilities.find(c => c.route === route
|
|
135
|
-
&& typeof request.buildDigest === 'string' && request.buildDigest.length > 0
|
|
136
|
-
&& c.buildDigest === request.buildDigest
|
|
137
|
-
&& c.evidence.length > 0 && c.evidence.every(e => typeof e === 'string' && e.length > 0)
|
|
138
|
-
&& sameContext(c.context, request.context)
|
|
139
|
-
&& c.transports.some(t => t.protocol === request.protocol
|
|
140
|
-
&& t.semantics === request.semantics && t.operation === request.operation
|
|
141
|
-
&& (t.stage === undefined || t.stage === request.stage)
|
|
142
|
-
&& (t.endpoint === undefined || (t.endpoint.length === request.endpoint.length
|
|
143
|
-
&& t.endpoint.every((byte, offset) => byte === request.endpoint[offset])))
|
|
144
|
-
&& (t.options?.length ?? 0) === request.options.length
|
|
145
|
-
&& request.options.every((option, index) => {
|
|
146
|
-
const qualified = t.options?.[index];
|
|
147
|
-
return qualified !== undefined
|
|
148
|
-
&& option.name.length === qualified.name.length
|
|
149
|
-
&& option.value.length === qualified.value.length
|
|
150
|
-
&& option.name.every((byte, offset) => byte === qualified.name[offset])
|
|
151
|
-
&& option.value.every((byte, offset) => byte === qualified.value[offset]);
|
|
152
|
-
})));
|
|
153
|
-
if (!capability)
|
|
154
|
-
continue;
|
|
155
|
-
const nativeLease = await provider.open({ route, request });
|
|
156
|
-
const retire = nativeLease?.close;
|
|
157
|
-
if (typeof retire !== 'function')
|
|
158
|
-
throw new TypeError('Endpoint provider must return a retireable transport lease');
|
|
159
|
-
let retirement;
|
|
160
|
-
const lease = {
|
|
161
|
-
close() {
|
|
162
|
-
signal?.removeEventListener('abort', cancel);
|
|
163
|
-
if (!retirement) {
|
|
164
|
-
retirement = Promise.resolve().then(() => retire.call(nativeLease));
|
|
165
|
-
// Successful retirement releases ownership. Failed retirement is
|
|
166
|
-
// retained so invocation cleanup cannot report false completion.
|
|
167
|
-
void retirement.then(() => leases.delete(lease), () => { });
|
|
168
|
-
}
|
|
169
|
-
return retirement;
|
|
170
|
-
},
|
|
171
|
-
};
|
|
172
|
-
// Abort listeners cannot return an awaitable cleanup result. Observe it
|
|
173
|
-
// here; explicit close still returns the original retirement outcome.
|
|
174
|
-
const cancel = () => { void lease.close().catch(() => { }); };
|
|
175
|
-
leases.add(lease);
|
|
176
|
-
signal?.addEventListener('abort', cancel, { once: true });
|
|
177
|
-
if (signal?.aborted) {
|
|
178
|
-
const cleanup = await Promise.allSettled([Promise.resolve().then(() => lease.close())]);
|
|
179
|
-
if (cleanup[0].status === 'rejected')
|
|
180
|
-
throw new AggregateError([signal.reason, cleanup[0].reason], 'Endpoint cancellation cleanup failed');
|
|
181
|
-
signal.throwIfAborted();
|
|
182
|
-
}
|
|
183
|
-
if (closing) {
|
|
184
|
-
await lease.close();
|
|
185
|
-
throw new Error('Endpoint access is retiring');
|
|
186
|
-
}
|
|
187
|
-
return lease;
|
|
188
|
-
}
|
|
189
|
-
throw new EndpointCapabilityGap();
|
|
190
|
-
}
|
|
191
|
-
return {
|
|
192
|
-
open(request) {
|
|
193
|
-
if (closing)
|
|
194
|
-
return Promise.reject(new Error('Endpoint access is retiring'));
|
|
195
|
-
// Register acquisition before provider code can reenter retirement.
|
|
196
|
-
let resolve;
|
|
197
|
-
let reject;
|
|
198
|
-
const work = new Promise((settled, failed) => { resolve = settled; reject = failed; });
|
|
199
|
-
pending.add(work);
|
|
200
|
-
void work.then(() => pending.delete(work), () => pending.delete(work));
|
|
201
|
-
void acquire(request).then(resolve, reject);
|
|
202
|
-
return work;
|
|
203
|
-
},
|
|
204
|
-
close() {
|
|
205
|
-
closing ??= Promise.resolve().then(async () => {
|
|
206
|
-
// Established listeners/streams can release pending acquisition work.
|
|
207
|
-
// Start their retirement while draining acquisitions, not afterwards.
|
|
208
|
-
await Promise.allSettled([...pending, ...[...leases].map(lease => lease.close())]);
|
|
209
|
-
// Late acquisitions retire themselves. Retained leases here include
|
|
210
|
-
// every failed retirement; close returns the original outcome once.
|
|
211
|
-
const results = await Promise.allSettled([...leases].map(lease => lease.close()));
|
|
212
|
-
const failures = results.filter((result) => result.status === 'rejected');
|
|
213
|
-
if (failures.length)
|
|
214
|
-
throw new AggregateError(failures.map(result => result.reason), 'Endpoint access retirement failed');
|
|
215
|
-
});
|
|
216
|
-
// Publish retirement before notifying providers: cancellation listeners
|
|
217
|
-
// can synchronously reenter close. Pending DNS/connect/listen work must
|
|
218
|
-
// settle on this signal even when the caller supplied no cancellation.
|
|
219
|
-
shutdown.abort(new Error('Endpoint access is retiring'));
|
|
220
|
-
void closing.catch(() => { });
|
|
221
|
-
return closing;
|
|
222
|
-
},
|
|
223
|
-
};
|
|
224
|
-
}
|