@struktoai/mirage-node 0.0.1 → 0.0.2
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 +63 -129
- package/dist/aliyun-TMZRUYCG.js +10 -0
- package/dist/backblaze-OHW57DLK.js +10 -0
- package/dist/box-UXTCAFOZ.js +8 -0
- package/dist/ceph-TNN4I2FT.js +10 -0
- package/dist/chunk-2CC5VW7K.js +52 -0
- package/dist/chunk-2CC5VW7K.js.map +1 -0
- package/dist/chunk-3IJSIVKT.js +57 -0
- package/dist/chunk-3IJSIVKT.js.map +1 -0
- package/dist/chunk-3T3RMDNX.js +57 -0
- package/dist/chunk-3T3RMDNX.js.map +1 -0
- package/dist/chunk-54NTYJEO.js +13 -0
- package/dist/chunk-54NTYJEO.js.map +1 -0
- package/dist/{chunk-DCJQ2PIX.js → chunk-5DLOHQJ2.js} +5 -8
- package/dist/chunk-5DLOHQJ2.js.map +1 -0
- package/dist/chunk-5HCVKTP3.js +2086 -0
- package/dist/chunk-5HCVKTP3.js.map +1 -0
- package/dist/{chunk-5E6BULAK.js → chunk-5YOCVEUB.js} +5 -8
- package/dist/chunk-5YOCVEUB.js.map +1 -0
- package/dist/{chunk-6M2NL363.js → chunk-A4Z6DZ22.js} +6 -8
- package/dist/chunk-A4Z6DZ22.js.map +1 -0
- package/dist/{chunk-NOZZFJEB.js → chunk-A7X4L4JM.js} +5 -8
- package/dist/chunk-A7X4L4JM.js.map +1 -0
- package/dist/{chunk-GCB4JUF7.js → chunk-ABTEGAFB.js} +5 -8
- package/dist/chunk-ABTEGAFB.js.map +1 -0
- package/dist/chunk-AJICZLHT.js +57 -0
- package/dist/chunk-AJICZLHT.js.map +1 -0
- package/dist/{chunk-H74QYTN7.js → chunk-B2ZOKNN4.js} +14 -3
- package/dist/chunk-B2ZOKNN4.js.map +1 -0
- package/dist/{chunk-ICSS5ETT.js → chunk-B6SXRCBO.js} +8 -18
- package/dist/chunk-B6SXRCBO.js.map +1 -0
- package/dist/{chunk-HEQL3LPK.js → chunk-BYTU2YC3.js} +8 -18
- package/dist/chunk-BYTU2YC3.js.map +1 -0
- package/dist/{chunk-V5OLWE7F.js → chunk-C6NHEDHY.js} +5 -8
- package/dist/chunk-C6NHEDHY.js.map +1 -0
- package/dist/chunk-C6NHFMIP.js +57 -0
- package/dist/chunk-C6NHFMIP.js.map +1 -0
- package/dist/chunk-CASCUFK2.js +87 -0
- package/dist/chunk-CASCUFK2.js.map +1 -0
- package/dist/chunk-DNBAMB5J.js +18 -0
- package/dist/chunk-DNBAMB5J.js.map +1 -0
- package/dist/chunk-DP2PP5V2.js +26 -0
- package/dist/chunk-DP2PP5V2.js.map +1 -0
- package/dist/{chunk-OYJXYJTE.js → chunk-DTAY7LPC.js} +303 -866
- package/dist/chunk-DTAY7LPC.js.map +1 -0
- package/dist/chunk-DYXEITK3.js +52 -0
- package/dist/chunk-DYXEITK3.js.map +1 -0
- package/dist/chunk-E2ISWXLB.js +7 -0
- package/dist/chunk-E2ISWXLB.js.map +1 -0
- package/dist/{chunk-XDEEOTVK.js → chunk-E7RW3SBV.js} +5 -8
- package/dist/chunk-E7RW3SBV.js.map +1 -0
- package/dist/chunk-EGB7V74Z.js +76 -0
- package/dist/chunk-EGB7V74Z.js.map +1 -0
- package/dist/{chunk-LBBM3LKK.js → chunk-ERELJ7BS.js} +5 -8
- package/dist/chunk-ERELJ7BS.js.map +1 -0
- package/dist/chunk-FXFDBF3P.js +57 -0
- package/dist/chunk-FXFDBF3P.js.map +1 -0
- package/dist/chunk-G5BZE7UA.js +50 -0
- package/dist/chunk-G5BZE7UA.js.map +1 -0
- package/dist/chunk-H3BST2LI.js +26 -0
- package/dist/chunk-H3BST2LI.js.map +1 -0
- package/dist/chunk-H3I2KZIY.js +25 -0
- package/dist/chunk-H3I2KZIY.js.map +1 -0
- package/dist/{chunk-UWMOTOXA.js → chunk-HEHERHQ5.js} +8 -15
- package/dist/chunk-HEHERHQ5.js.map +1 -0
- package/dist/chunk-HQ4KWN76.js +57 -0
- package/dist/chunk-HQ4KWN76.js.map +1 -0
- package/dist/{chunk-MY3NUJJD.js → chunk-IQVNVTOP.js} +8 -18
- package/dist/chunk-IQVNVTOP.js.map +1 -0
- package/dist/chunk-JALIYI6M.js +55 -0
- package/dist/chunk-JALIYI6M.js.map +1 -0
- package/dist/chunk-JZQHKDSY.js +216 -0
- package/dist/chunk-JZQHKDSY.js.map +1 -0
- package/dist/chunk-JZT4QGIP.js +24 -0
- package/dist/chunk-JZT4QGIP.js.map +1 -0
- package/dist/chunk-KTNDT45N.js +57 -0
- package/dist/chunk-KTNDT45N.js.map +1 -0
- package/dist/chunk-L6JPBJAS.js +57 -0
- package/dist/chunk-L6JPBJAS.js.map +1 -0
- package/dist/{chunk-6VKNSO6U.js → chunk-LAJJPLEV.js} +17 -11
- package/dist/chunk-LAJJPLEV.js.map +1 -0
- package/dist/chunk-LW25LMIH.js +26 -0
- package/dist/chunk-LW25LMIH.js.map +1 -0
- package/dist/{chunk-WSDQ2MRG.js → chunk-LYDMMNL2.js} +5 -8
- package/dist/chunk-LYDMMNL2.js.map +1 -0
- package/dist/{chunk-G7O6DAWU.js → chunk-MHCMHKM6.js} +15 -9
- package/dist/chunk-MHCMHKM6.js.map +1 -0
- package/dist/chunk-N72CAZEH.js +1990 -0
- package/dist/chunk-N72CAZEH.js.map +1 -0
- package/dist/{chunk-XQUQSNCA.js → chunk-NHS7WLEQ.js} +4 -5
- package/dist/chunk-NHS7WLEQ.js.map +1 -0
- package/dist/chunk-NJMGCT63.js +54 -0
- package/dist/chunk-NJMGCT63.js.map +1 -0
- package/dist/chunk-O7ODGJYL.js +57 -0
- package/dist/chunk-O7ODGJYL.js.map +1 -0
- package/dist/chunk-OHROA3FQ.js +54 -0
- package/dist/chunk-OHROA3FQ.js.map +1 -0
- package/dist/chunk-OPYQ5KIO.js +52 -0
- package/dist/chunk-OPYQ5KIO.js.map +1 -0
- package/dist/chunk-OYV2DN66.js +50 -0
- package/dist/chunk-OYV2DN66.js.map +1 -0
- package/dist/chunk-OZAEWZZ3.js +31 -0
- package/dist/chunk-OZAEWZZ3.js.map +1 -0
- package/dist/chunk-PBBG7VFT.js +1896 -0
- package/dist/chunk-PBBG7VFT.js.map +1 -0
- package/dist/{chunk-HXWGG4K7.js → chunk-PJBQKMCD.js} +10 -20
- package/dist/chunk-PJBQKMCD.js.map +1 -0
- package/dist/chunk-Q2IAILVC.js +26 -0
- package/dist/chunk-Q2IAILVC.js.map +1 -0
- package/dist/chunk-Q6CDMOM6.js +57 -0
- package/dist/chunk-Q6CDMOM6.js.map +1 -0
- package/dist/{chunk-ALAMUIGJ.js → chunk-QGRDPSAH.js} +17 -12
- package/dist/chunk-QGRDPSAH.js.map +1 -0
- package/dist/{chunk-7QXJ4KWQ.js → chunk-RLGWMJD3.js} +63 -9
- package/dist/chunk-RLGWMJD3.js.map +1 -0
- package/dist/chunk-RO5IQEDQ.js +30 -0
- package/dist/chunk-RO5IQEDQ.js.map +1 -0
- package/dist/{chunk-ZC4KNEOQ.js → chunk-RQK5UPMP.js} +16 -11
- package/dist/chunk-RQK5UPMP.js.map +1 -0
- package/dist/chunk-RQYEEA2O.js +50 -0
- package/dist/chunk-RQYEEA2O.js.map +1 -0
- package/dist/chunk-SFUCUARB.js +21 -0
- package/dist/chunk-SFUCUARB.js.map +1 -0
- package/dist/{chunk-MVE5VVMQ.js → chunk-TRTUHCS4.js} +5 -8
- package/dist/chunk-TRTUHCS4.js.map +1 -0
- package/dist/chunk-TWGVQLG2.js +24 -0
- package/dist/chunk-TWGVQLG2.js.map +1 -0
- package/dist/chunk-UGK4TAVK.js +32 -0
- package/dist/chunk-UGK4TAVK.js.map +1 -0
- package/dist/{chunk-LPMPTQYP.js → chunk-UT2OPSN4.js} +12 -10
- package/dist/chunk-UT2OPSN4.js.map +1 -0
- package/dist/chunk-VGLHY6BK.js +31 -0
- package/dist/chunk-VGLHY6BK.js.map +1 -0
- package/dist/chunk-W7FLHT65.js +26 -0
- package/dist/chunk-W7FLHT65.js.map +1 -0
- package/dist/chunk-WL7HS7EM.js +50 -0
- package/dist/chunk-WL7HS7EM.js.map +1 -0
- package/dist/chunk-WSGEIVY3.js +1766 -0
- package/dist/chunk-WSGEIVY3.js.map +1 -0
- package/dist/{chunk-H3JR7MN3.js → chunk-XGJ2QERC.js} +17 -10
- package/dist/chunk-XGJ2QERC.js.map +1 -0
- package/dist/chunk-XHCBHYN4.js +54 -0
- package/dist/chunk-XHCBHYN4.js.map +1 -0
- package/dist/chunk-XLQI4IT2.js +54 -0
- package/dist/chunk-XLQI4IT2.js.map +1 -0
- package/dist/{chunk-3PBSL7BS.js → chunk-XRU5WXZX.js} +5 -8
- package/dist/chunk-XRU5WXZX.js.map +1 -0
- package/dist/{chunk-UZZD4MRJ.js → chunk-YAVGCQUP.js} +5 -8
- package/dist/chunk-YAVGCQUP.js.map +1 -0
- package/dist/chunk-YGZMVNN5.js +54 -0
- package/dist/chunk-YGZMVNN5.js.map +1 -0
- package/dist/{chunk-PEZYBKZH.js → chunk-YPT4JBUY.js} +10 -24
- package/dist/chunk-YPT4JBUY.js.map +1 -0
- package/dist/chunk-YUK3X3B4.js +27 -0
- package/dist/chunk-YUK3X3B4.js.map +1 -0
- package/dist/chunk-ZNWVJ6UW.js +54 -0
- package/dist/chunk-ZNWVJ6UW.js.map +1 -0
- package/dist/config-34LHOGLM.js +13 -0
- package/dist/config-3BBWD5AB.js +11 -0
- package/dist/{config-FNR6LJ5H.js → config-3IVQJBNW.js} +4 -2
- package/dist/config-4UDVSUQJ.js +11 -0
- package/dist/config-CMDBAPDH.js +11 -0
- package/dist/config-CVZ2AGCO.js +21 -0
- package/dist/config-D3RLSPNF.js +11 -0
- package/dist/config-DG65OEG3.js +11 -0
- package/dist/{config-HNSDNQZH.js → config-EIHSP5DZ.js} +4 -2
- package/dist/config-EO23EY62.js +15 -0
- package/dist/config-GCQK6NJY.js +11 -0
- package/dist/{config-5ZPGISS6.js → config-GE4W4ZJC.js} +4 -2
- package/dist/config-GHRUKEQ6.js +13 -0
- package/dist/config-GVH27UPE.js +11 -0
- package/dist/config-HKRMKD76.js +15 -0
- package/dist/config-HXVYIXP5.js +11 -0
- package/dist/config-IDZMEW73.js +11 -0
- package/dist/config-IJJXGLBQ.js +11 -0
- package/dist/config-IVY5EQQ2.js +15 -0
- package/dist/config-KJOLGVB2.js +11 -0
- package/dist/{config-S47UDVRZ.js → config-KMVCVBYN.js} +4 -2
- package/dist/{config-UKZ72IDO.js → config-KYTRXAB2.js} +4 -2
- package/dist/{config-MOLWOSRG.js → config-LHFFXVYI.js} +4 -2
- package/dist/config-NV5WXP64.js +11 -0
- package/dist/config-OT2TQQCN.js +11 -0
- package/dist/config-Q45Y46YT.js +15 -0
- package/dist/config-QAA646XB.js +15 -0
- package/dist/config-QNMKWJ4M.js +15 -0
- package/dist/config-QWCY3LBQ.js +11 -0
- package/dist/{config-HIZHA5VD.js → config-VM526IKB.js} +4 -2
- package/dist/config-WDAZFXYD.js +15 -0
- package/dist/config-ZFJYQZCH.js +13 -0
- package/dist/config-ZV6G2ZEC.js +11 -0
- package/dist/databricks_volume-HNQ4DJVJ.js +7 -0
- package/dist/digitalocean-6SPR4S7V.js +10 -0
- package/dist/discord-SAV2RBJV.js +8 -0
- package/dist/{disk-C7TJNU2B.js → disk-POACMF4G.js} +2 -2
- package/dist/dropbox-CQ7MTYX2.js +8 -0
- package/dist/email-KBQ7CXS7.js +8 -0
- package/dist/gcs-SMIE4VMT.js +10 -0
- package/dist/gdocs-X5Y2SIQX.js +8 -0
- package/dist/gdrive-SIQPRIGI.js +8 -0
- package/dist/github-KBHWANKQ.js +8 -0
- package/dist/github-KBHWANKQ.js.map +1 -0
- package/dist/github_ci-HPITNK37.js +8 -0
- package/dist/github_ci-HPITNK37.js.map +1 -0
- package/dist/gmail-DKHAGJNX.js +8 -0
- package/dist/gmail-DKHAGJNX.js.map +1 -0
- package/dist/gsheets-ZSUDIWGK.js +8 -0
- package/dist/gsheets-ZSUDIWGK.js.map +1 -0
- package/dist/gslides-GYXM7IMJ.js +8 -0
- package/dist/gslides-GYXM7IMJ.js.map +1 -0
- package/dist/hf_buckets-RIOMV7WG.js +10 -0
- package/dist/hf_buckets-RIOMV7WG.js.map +1 -0
- package/dist/hf_datasets-QF4BQ3OK.js +10 -0
- package/dist/hf_datasets-QF4BQ3OK.js.map +1 -0
- package/dist/hf_models-62GC2HPZ.js +10 -0
- package/dist/hf_models-62GC2HPZ.js.map +1 -0
- package/dist/hf_spaces-NVSMUNRM.js +10 -0
- package/dist/hf_spaces-NVSMUNRM.js.map +1 -0
- package/dist/index.d.ts +722 -277
- package/dist/index.js +646 -2268
- package/dist/index.js.map +1 -1
- package/dist/langfuse-HUAYVPHF.js +8 -0
- package/dist/langfuse-HUAYVPHF.js.map +1 -0
- package/dist/linear-2MM55KBC.js +8 -0
- package/dist/linear-2MM55KBC.js.map +1 -0
- package/dist/minio-L3XE6PQS.js +10 -0
- package/dist/minio-L3XE6PQS.js.map +1 -0
- package/dist/mongodb-ZOX4FRHJ.js +7 -0
- package/dist/mongodb-ZOX4FRHJ.js.map +1 -0
- package/dist/notion-UK4GTMT4.js +8 -0
- package/dist/notion-UK4GTMT4.js.map +1 -0
- package/dist/oci-NURLWPL2.js +10 -0
- package/dist/oci-NURLWPL2.js.map +1 -0
- package/dist/postgres-JNFMPAO2.js +7 -0
- package/dist/postgres-JNFMPAO2.js.map +1 -0
- package/dist/qingstor-W55D5YFO.js +10 -0
- package/dist/qingstor-W55D5YFO.js.map +1 -0
- package/dist/r2-FSZK7IFI.js +10 -0
- package/dist/r2-FSZK7IFI.js.map +1 -0
- package/dist/redis-S6GIPA4Z.js +8 -0
- package/dist/redis-S6GIPA4Z.js.map +1 -0
- package/dist/s3-GMPUJ65D.js +8 -0
- package/dist/s3-GMPUJ65D.js.map +1 -0
- package/dist/scaleway-5VM55Y6D.js +10 -0
- package/dist/scaleway-5VM55Y6D.js.map +1 -0
- package/dist/seaweedfs-J3EPUEPE.js +10 -0
- package/dist/seaweedfs-J3EPUEPE.js.map +1 -0
- package/dist/slack-FVBXY7KD.js +8 -0
- package/dist/slack-FVBXY7KD.js.map +1 -0
- package/dist/ssh-GCXETJ3Z.js +9 -0
- package/dist/ssh-GCXETJ3Z.js.map +1 -0
- package/dist/supabase-HLWNHBBE.js +10 -0
- package/dist/supabase-HLWNHBBE.js.map +1 -0
- package/dist/tencent-YDO73XBD.js +10 -0
- package/dist/tencent-YDO73XBD.js.map +1 -0
- package/dist/trello-CQ53BQUL.js +8 -0
- package/dist/trello-CQ53BQUL.js.map +1 -0
- package/dist/wasabi-SOZKPMRQ.js +10 -0
- package/dist/wasabi-SOZKPMRQ.js.map +1 -0
- package/package.json +39 -13
- package/dist/box-4P7DCJH7.js +0 -8
- package/dist/chunk-35PVZRWU.js +0 -24
- package/dist/chunk-35PVZRWU.js.map +0 -1
- package/dist/chunk-3PBSL7BS.js.map +0 -1
- package/dist/chunk-3Y625AUP.js +0 -24
- package/dist/chunk-3Y625AUP.js.map +0 -1
- package/dist/chunk-5E6BULAK.js.map +0 -1
- package/dist/chunk-5ITBZN55.js +0 -24
- package/dist/chunk-5ITBZN55.js.map +0 -1
- package/dist/chunk-6M2NL363.js.map +0 -1
- package/dist/chunk-6M3QVVOH.js +0 -32
- package/dist/chunk-6M3QVVOH.js.map +0 -1
- package/dist/chunk-6VKNSO6U.js.map +0 -1
- package/dist/chunk-6Y6GWMFF.js +0 -24
- package/dist/chunk-6Y6GWMFF.js.map +0 -1
- package/dist/chunk-7QXJ4KWQ.js.map +0 -1
- package/dist/chunk-ALAMUIGJ.js.map +0 -1
- package/dist/chunk-DCJQ2PIX.js.map +0 -1
- package/dist/chunk-EKPH4MMD.js +0 -27
- package/dist/chunk-EKPH4MMD.js.map +0 -1
- package/dist/chunk-FZ2GJ4BJ.js +0 -29
- package/dist/chunk-FZ2GJ4BJ.js.map +0 -1
- package/dist/chunk-G7O6DAWU.js.map +0 -1
- package/dist/chunk-GCB4JUF7.js.map +0 -1
- package/dist/chunk-GKQNMLQU.js +0 -7757
- package/dist/chunk-GKQNMLQU.js.map +0 -1
- package/dist/chunk-GO67AOYK.js +0 -24
- package/dist/chunk-GO67AOYK.js.map +0 -1
- package/dist/chunk-GPF66TH2.js +0 -24
- package/dist/chunk-GPF66TH2.js.map +0 -1
- package/dist/chunk-H3JR7MN3.js.map +0 -1
- package/dist/chunk-H74QYTN7.js.map +0 -1
- package/dist/chunk-HEQL3LPK.js.map +0 -1
- package/dist/chunk-HXWGG4K7.js.map +0 -1
- package/dist/chunk-I4RRGZGB.js +0 -24
- package/dist/chunk-I4RRGZGB.js.map +0 -1
- package/dist/chunk-ICSS5ETT.js.map +0 -1
- package/dist/chunk-KINMBZHC.js +0 -18
- package/dist/chunk-KINMBZHC.js.map +0 -1
- package/dist/chunk-LBBM3LKK.js.map +0 -1
- package/dist/chunk-LPMPTQYP.js.map +0 -1
- package/dist/chunk-M42JTWPR.js +0 -2794
- package/dist/chunk-M42JTWPR.js.map +0 -1
- package/dist/chunk-MVE5VVMQ.js.map +0 -1
- package/dist/chunk-MY3NUJJD.js.map +0 -1
- package/dist/chunk-NOZZFJEB.js.map +0 -1
- package/dist/chunk-OYJXYJTE.js.map +0 -1
- package/dist/chunk-PEZYBKZH.js.map +0 -1
- package/dist/chunk-QWWOBAYU.js +0 -26
- package/dist/chunk-QWWOBAYU.js.map +0 -1
- package/dist/chunk-RQYYYBQG.js +0 -24
- package/dist/chunk-RQYYYBQG.js.map +0 -1
- package/dist/chunk-T2WWAEKH.js +0 -7591
- package/dist/chunk-T2WWAEKH.js.map +0 -1
- package/dist/chunk-UWMOTOXA.js.map +0 -1
- package/dist/chunk-UZZD4MRJ.js.map +0 -1
- package/dist/chunk-V5OLWE7F.js.map +0 -1
- package/dist/chunk-VCLMTMSO.js +0 -23
- package/dist/chunk-VCLMTMSO.js.map +0 -1
- package/dist/chunk-WSDQ2MRG.js.map +0 -1
- package/dist/chunk-XDEEOTVK.js.map +0 -1
- package/dist/chunk-XQUQSNCA.js.map +0 -1
- package/dist/chunk-XVYZO2FG.js +0 -14
- package/dist/chunk-XVYZO2FG.js.map +0 -1
- package/dist/chunk-ZC4KNEOQ.js.map +0 -1
- package/dist/config-6HWSKHEU.js +0 -9
- package/dist/config-6TNFPYZF.js +0 -9
- package/dist/config-BHLXQ3OL.js +0 -9
- package/dist/config-E7UOEWEP.js +0 -9
- package/dist/config-IXLFUSMQ.js +0 -9
- package/dist/config-J3TM7NIS.js +0 -9
- package/dist/config-JXLZ4XEW.js +0 -9
- package/dist/config-KQCEMLNZ.js +0 -9
- package/dist/config-R3XJ5OW4.js +0 -9
- package/dist/config-V7XI5UTG.js +0 -9
- package/dist/config-YLIX3ZBT.js +0 -9
- package/dist/config-Z5JGDOKE.js +0 -9
- package/dist/config-ZCZZAH5W.js +0 -9
- package/dist/config-ZZGIWDUC.js +0 -9
- package/dist/discord-2PWP2MGX.js +0 -8
- package/dist/dropbox-L5DPYGKR.js +0 -8
- package/dist/email-HASRFBKC.js +0 -8
- package/dist/gcs-P5QMKTPR.js +0 -10
- package/dist/gdocs-IF2I35HZ.js +0 -8
- package/dist/gdrive-TAETVCKP.js +0 -8
- package/dist/github-5E6GSCNZ.js +0 -8
- package/dist/github_ci-2DSZI3Y7.js +0 -8
- package/dist/gmail-F5VYGKOT.js +0 -8
- package/dist/gsheets-BAO54CQ7.js +0 -8
- package/dist/gslides-A62CEEMR.js +0 -8
- package/dist/langfuse-YKBYRQLU.js +0 -8
- package/dist/linear-WJDQ6JDE.js +0 -8
- package/dist/mongodb-MK4DVSIK.js +0 -7
- package/dist/oci-KZ7XFZ2X.js +0 -10
- package/dist/postgres-M2N2APFZ.js +0 -7
- package/dist/r2-X4DDNSAZ.js +0 -10
- package/dist/redis-NVCXUUIO.js +0 -7
- package/dist/s3-HVAL7ZX3.js +0 -8
- package/dist/slack-GUQMDGLP.js +0 -8
- package/dist/ssh-LY6WYVVD.js +0 -9
- package/dist/supabase-H3ZP4Y3W.js +0 -10
- package/dist/trello-WR6TEDYD.js +0 -8
- /package/dist/{box-4P7DCJH7.js.map → aliyun-TMZRUYCG.js.map} +0 -0
- /package/dist/{config-5ZPGISS6.js.map → backblaze-OHW57DLK.js.map} +0 -0
- /package/dist/{config-6HWSKHEU.js.map → box-UXTCAFOZ.js.map} +0 -0
- /package/dist/{config-6TNFPYZF.js.map → ceph-TNN4I2FT.js.map} +0 -0
- /package/dist/{config-BHLXQ3OL.js.map → config-34LHOGLM.js.map} +0 -0
- /package/dist/{config-E7UOEWEP.js.map → config-3BBWD5AB.js.map} +0 -0
- /package/dist/{config-FNR6LJ5H.js.map → config-3IVQJBNW.js.map} +0 -0
- /package/dist/{config-HIZHA5VD.js.map → config-4UDVSUQJ.js.map} +0 -0
- /package/dist/{config-HNSDNQZH.js.map → config-CMDBAPDH.js.map} +0 -0
- /package/dist/{config-IXLFUSMQ.js.map → config-CVZ2AGCO.js.map} +0 -0
- /package/dist/{config-J3TM7NIS.js.map → config-D3RLSPNF.js.map} +0 -0
- /package/dist/{config-JXLZ4XEW.js.map → config-DG65OEG3.js.map} +0 -0
- /package/dist/{config-KQCEMLNZ.js.map → config-EIHSP5DZ.js.map} +0 -0
- /package/dist/{config-MOLWOSRG.js.map → config-EO23EY62.js.map} +0 -0
- /package/dist/{config-R3XJ5OW4.js.map → config-GCQK6NJY.js.map} +0 -0
- /package/dist/{config-S47UDVRZ.js.map → config-GE4W4ZJC.js.map} +0 -0
- /package/dist/{config-UKZ72IDO.js.map → config-GHRUKEQ6.js.map} +0 -0
- /package/dist/{config-V7XI5UTG.js.map → config-GVH27UPE.js.map} +0 -0
- /package/dist/{config-YLIX3ZBT.js.map → config-HKRMKD76.js.map} +0 -0
- /package/dist/{config-Z5JGDOKE.js.map → config-HXVYIXP5.js.map} +0 -0
- /package/dist/{config-ZCZZAH5W.js.map → config-IDZMEW73.js.map} +0 -0
- /package/dist/{config-ZZGIWDUC.js.map → config-IJJXGLBQ.js.map} +0 -0
- /package/dist/{discord-2PWP2MGX.js.map → config-IVY5EQQ2.js.map} +0 -0
- /package/dist/{disk-C7TJNU2B.js.map → config-KJOLGVB2.js.map} +0 -0
- /package/dist/{dropbox-L5DPYGKR.js.map → config-KMVCVBYN.js.map} +0 -0
- /package/dist/{email-HASRFBKC.js.map → config-KYTRXAB2.js.map} +0 -0
- /package/dist/{gcs-P5QMKTPR.js.map → config-LHFFXVYI.js.map} +0 -0
- /package/dist/{gdocs-IF2I35HZ.js.map → config-NV5WXP64.js.map} +0 -0
- /package/dist/{gdrive-TAETVCKP.js.map → config-OT2TQQCN.js.map} +0 -0
- /package/dist/{github-5E6GSCNZ.js.map → config-Q45Y46YT.js.map} +0 -0
- /package/dist/{github_ci-2DSZI3Y7.js.map → config-QAA646XB.js.map} +0 -0
- /package/dist/{gmail-F5VYGKOT.js.map → config-QNMKWJ4M.js.map} +0 -0
- /package/dist/{gsheets-BAO54CQ7.js.map → config-QWCY3LBQ.js.map} +0 -0
- /package/dist/{gslides-A62CEEMR.js.map → config-VM526IKB.js.map} +0 -0
- /package/dist/{langfuse-YKBYRQLU.js.map → config-WDAZFXYD.js.map} +0 -0
- /package/dist/{linear-WJDQ6JDE.js.map → config-ZFJYQZCH.js.map} +0 -0
- /package/dist/{mongodb-MK4DVSIK.js.map → config-ZV6G2ZEC.js.map} +0 -0
- /package/dist/{oci-KZ7XFZ2X.js.map → databricks_volume-HNQ4DJVJ.js.map} +0 -0
- /package/dist/{postgres-M2N2APFZ.js.map → digitalocean-6SPR4S7V.js.map} +0 -0
- /package/dist/{r2-X4DDNSAZ.js.map → discord-SAV2RBJV.js.map} +0 -0
- /package/dist/{redis-NVCXUUIO.js.map → disk-POACMF4G.js.map} +0 -0
- /package/dist/{s3-HVAL7ZX3.js.map → dropbox-CQ7MTYX2.js.map} +0 -0
- /package/dist/{slack-GUQMDGLP.js.map → email-KBQ7CXS7.js.map} +0 -0
- /package/dist/{ssh-LY6WYVVD.js.map → gcs-SMIE4VMT.js.map} +0 -0
- /package/dist/{supabase-H3ZP4Y3W.js.map → gdocs-X5Y2SIQX.js.map} +0 -0
- /package/dist/{trello-WR6TEDYD.js.map → gdrive-SIQPRIGI.js.map} +0 -0
|
@@ -0,0 +1,2086 @@
|
|
|
1
|
+
import {
|
|
2
|
+
redactSshConfig
|
|
3
|
+
} from "./chunk-UGK4TAVK.js";
|
|
4
|
+
import {
|
|
5
|
+
SCOPE_ERROR
|
|
6
|
+
} from "./chunk-U6QSXTUS.js";
|
|
7
|
+
|
|
8
|
+
// src/resource/ssh/ssh.ts
|
|
9
|
+
import {
|
|
10
|
+
BaseResource,
|
|
11
|
+
PathSpec as PathSpec2,
|
|
12
|
+
ResourceName as ResourceName75
|
|
13
|
+
} from "@struktoai/mirage-core";
|
|
14
|
+
|
|
15
|
+
// src/accessor/ssh.ts
|
|
16
|
+
import { Accessor } from "@struktoai/mirage-core";
|
|
17
|
+
import { homedir } from "os";
|
|
18
|
+
import { readFileSync } from "fs";
|
|
19
|
+
import { resolve } from "path";
|
|
20
|
+
function expandHome(p) {
|
|
21
|
+
if (p === "~") return homedir();
|
|
22
|
+
if (p.startsWith("~/")) return resolve(homedir(), p.slice(2));
|
|
23
|
+
return p;
|
|
24
|
+
}
|
|
25
|
+
var SSHAccessor = class extends Accessor {
|
|
26
|
+
constructor(config) {
|
|
27
|
+
super();
|
|
28
|
+
this.config = config;
|
|
29
|
+
}
|
|
30
|
+
config;
|
|
31
|
+
client = null;
|
|
32
|
+
sftpClient = null;
|
|
33
|
+
connectPromise = null;
|
|
34
|
+
async sftp() {
|
|
35
|
+
if (this.sftpClient !== null) return this.sftpClient;
|
|
36
|
+
if (this.connectPromise !== null) return this.connectPromise;
|
|
37
|
+
this.connectPromise = this.connect();
|
|
38
|
+
try {
|
|
39
|
+
return await this.connectPromise;
|
|
40
|
+
} finally {
|
|
41
|
+
this.connectPromise = null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async connect() {
|
|
45
|
+
let ssh2Mod;
|
|
46
|
+
try {
|
|
47
|
+
ssh2Mod = await import("ssh2");
|
|
48
|
+
} catch (err) {
|
|
49
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
50
|
+
throw new Error(`ssh2 is required for the SSH resource \u2014 install it as a peer dep: ${msg}`);
|
|
51
|
+
}
|
|
52
|
+
const { Client: ClientCtor } = ssh2Mod;
|
|
53
|
+
const c = new ClientCtor();
|
|
54
|
+
const opts = {
|
|
55
|
+
host: this.config.hostname ?? this.config.host,
|
|
56
|
+
port: this.config.port ?? 22,
|
|
57
|
+
readyTimeout: (this.config.timeout ?? 30) * 1e3
|
|
58
|
+
};
|
|
59
|
+
if (this.config.username !== void 0) opts.username = this.config.username;
|
|
60
|
+
if (this.config.password !== void 0) opts.password = this.config.password;
|
|
61
|
+
if (this.config.identityFile !== void 0) {
|
|
62
|
+
opts.privateKey = readFileSync(expandHome(this.config.identityFile));
|
|
63
|
+
if (this.config.passphrase !== void 0) opts.passphrase = this.config.passphrase;
|
|
64
|
+
}
|
|
65
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
66
|
+
c.on("ready", () => {
|
|
67
|
+
c.sftp((err, sftp) => {
|
|
68
|
+
if (err !== void 0) {
|
|
69
|
+
rejectFn(err);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
this.client = c;
|
|
73
|
+
this.sftpClient = sftp;
|
|
74
|
+
resolveFn(sftp);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
c.on("error", rejectFn);
|
|
78
|
+
c.connect(opts);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
close() {
|
|
82
|
+
if (this.client !== null) {
|
|
83
|
+
this.client.end();
|
|
84
|
+
this.client = null;
|
|
85
|
+
this.sftpClient = null;
|
|
86
|
+
}
|
|
87
|
+
return Promise.resolve();
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
// src/commands/builtin/ssh/basename.ts
|
|
92
|
+
import { ResourceName, command, specOf, basenameFn } from "@struktoai/mirage-core";
|
|
93
|
+
var SSH_BASENAME = command({
|
|
94
|
+
name: "basename",
|
|
95
|
+
resource: ResourceName.SSH,
|
|
96
|
+
spec: specOf("basename"),
|
|
97
|
+
fn: basenameFn
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// src/commands/builtin/ssh/cat/cat.ts
|
|
101
|
+
import {
|
|
102
|
+
ResourceName as ResourceName2,
|
|
103
|
+
catGeneric,
|
|
104
|
+
catProvisionGeneric,
|
|
105
|
+
command as command2,
|
|
106
|
+
concatAggregate,
|
|
107
|
+
specOf as specOf2
|
|
108
|
+
} from "@struktoai/mirage-core";
|
|
109
|
+
|
|
110
|
+
// src/core/ssh/glob.ts
|
|
111
|
+
import { PathSpec } from "@struktoai/mirage-core";
|
|
112
|
+
|
|
113
|
+
// src/core/ssh/utils.ts
|
|
114
|
+
import { lstripSlash, rstripSlash } from "@struktoai/mirage-core";
|
|
115
|
+
var S_IFMT = 61440;
|
|
116
|
+
var S_IFDIR = 16384;
|
|
117
|
+
var S_IFREG = 32768;
|
|
118
|
+
function stripPrefix(p) {
|
|
119
|
+
if (p.prefix && p.original.startsWith(p.prefix)) {
|
|
120
|
+
return p.original.slice(p.prefix.length) || "/";
|
|
121
|
+
}
|
|
122
|
+
return p.original;
|
|
123
|
+
}
|
|
124
|
+
function joinRoot(root, rel) {
|
|
125
|
+
const r = rstripSlash(root);
|
|
126
|
+
const stripped = lstripSlash(rel);
|
|
127
|
+
if (stripped === "") return r === "" ? "/" : r;
|
|
128
|
+
if (r === "") return `/${stripped}`;
|
|
129
|
+
return `${r}/${stripped}`;
|
|
130
|
+
}
|
|
131
|
+
function isNoSuchFile(err) {
|
|
132
|
+
if (err === null || err === void 0) return false;
|
|
133
|
+
if (typeof err !== "object") return false;
|
|
134
|
+
const code = err.code;
|
|
135
|
+
return code === 2;
|
|
136
|
+
}
|
|
137
|
+
function isDirectoryAttrs(attrs) {
|
|
138
|
+
if (attrs.mode === void 0) return false;
|
|
139
|
+
return (attrs.mode & S_IFMT) === S_IFDIR;
|
|
140
|
+
}
|
|
141
|
+
function isFileAttrs(attrs) {
|
|
142
|
+
if (attrs.mode === void 0) return false;
|
|
143
|
+
return (attrs.mode & S_IFMT) === S_IFREG;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// src/core/ssh/readdir.ts
|
|
147
|
+
import { enoent, stripSlash } from "@struktoai/mirage-core";
|
|
148
|
+
async function readdir(accessor, p) {
|
|
149
|
+
const sftp = await accessor.sftp();
|
|
150
|
+
const virtual = p.pattern !== null ? p.directory.slice(p.prefix.length) || "/" : stripPrefix(p);
|
|
151
|
+
const remote = joinRoot(accessor.config.root ?? "/", virtual);
|
|
152
|
+
const list = await new Promise((resolveFn, rejectFn) => {
|
|
153
|
+
sftp.readdir(remote, (err, entries) => {
|
|
154
|
+
if (err !== void 0) {
|
|
155
|
+
if (isNoSuchFile(err)) rejectFn(enoent(p));
|
|
156
|
+
else rejectFn(err);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
resolveFn(entries);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
const base = `/${stripSlash(virtual)}`;
|
|
163
|
+
const dirPrefix = base === "/" ? "/" : `${base}/`;
|
|
164
|
+
const mountPrefix = p.prefix;
|
|
165
|
+
const names = [];
|
|
166
|
+
for (const entry of list) {
|
|
167
|
+
if (entry.filename === "." || entry.filename === "..") continue;
|
|
168
|
+
names.push(`${mountPrefix}${dirPrefix}${entry.filename}`);
|
|
169
|
+
}
|
|
170
|
+
names.sort();
|
|
171
|
+
return names;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// src/core/ssh/glob.ts
|
|
175
|
+
import { fnmatch } from "@struktoai/mirage-core";
|
|
176
|
+
import { gnuBasename } from "@struktoai/mirage-core";
|
|
177
|
+
async function resolveGlob(accessor, paths) {
|
|
178
|
+
const result = [];
|
|
179
|
+
for (const p of paths) {
|
|
180
|
+
if (p.resolved) {
|
|
181
|
+
result.push(p);
|
|
182
|
+
} else if (p.pattern !== null && p.pattern !== "") {
|
|
183
|
+
const dirSpec = new PathSpec({
|
|
184
|
+
original: p.directory,
|
|
185
|
+
directory: p.directory,
|
|
186
|
+
resolved: true,
|
|
187
|
+
prefix: p.prefix
|
|
188
|
+
});
|
|
189
|
+
const entries = await readdir(accessor, dirSpec);
|
|
190
|
+
const matched = [];
|
|
191
|
+
for (const e of entries) {
|
|
192
|
+
if (fnmatch(gnuBasename(e), p.pattern)) {
|
|
193
|
+
matched.push(
|
|
194
|
+
new PathSpec({
|
|
195
|
+
original: e,
|
|
196
|
+
directory: p.directory,
|
|
197
|
+
resolved: true,
|
|
198
|
+
prefix: p.prefix
|
|
199
|
+
})
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (matched.length > SCOPE_ERROR) matched.length = SCOPE_ERROR;
|
|
204
|
+
result.push(...matched);
|
|
205
|
+
} else {
|
|
206
|
+
result.push(p);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return result;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// src/core/ssh/stream.ts
|
|
213
|
+
import { enoent as enoent2 } from "@struktoai/mirage-core";
|
|
214
|
+
async function* stream(accessor, p) {
|
|
215
|
+
const sftp = await accessor.sftp();
|
|
216
|
+
const virtual = stripPrefix(p);
|
|
217
|
+
const remote = joinRoot(accessor.config.root ?? "/", virtual);
|
|
218
|
+
const rs = sftp.createReadStream(remote);
|
|
219
|
+
try {
|
|
220
|
+
for await (const chunk of rs) {
|
|
221
|
+
const buf = chunk;
|
|
222
|
+
yield new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
223
|
+
}
|
|
224
|
+
} catch (err) {
|
|
225
|
+
if (isNoSuchFile(err)) throw enoent2(p);
|
|
226
|
+
throw err;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
async function rangeRead(accessor, p, start, end) {
|
|
230
|
+
const sftp = await accessor.sftp();
|
|
231
|
+
const virtual = stripPrefix(p);
|
|
232
|
+
const remote = joinRoot(accessor.config.root ?? "/", virtual);
|
|
233
|
+
const rs = sftp.createReadStream(remote, { start, end: end - 1 });
|
|
234
|
+
const chunks = [];
|
|
235
|
+
let total = 0;
|
|
236
|
+
try {
|
|
237
|
+
for await (const chunk of rs) {
|
|
238
|
+
const buf = chunk;
|
|
239
|
+
const u8 = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
240
|
+
chunks.push(u8);
|
|
241
|
+
total += u8.byteLength;
|
|
242
|
+
}
|
|
243
|
+
} catch (err) {
|
|
244
|
+
if (isNoSuchFile(err)) throw enoent2(p);
|
|
245
|
+
throw err;
|
|
246
|
+
}
|
|
247
|
+
const out = new Uint8Array(total);
|
|
248
|
+
let offset = 0;
|
|
249
|
+
for (const c of chunks) {
|
|
250
|
+
out.set(c, offset);
|
|
251
|
+
offset += c.byteLength;
|
|
252
|
+
}
|
|
253
|
+
return out;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// src/core/ssh/entry.ts
|
|
257
|
+
import { FileStat, FileType, guessType } from "@struktoai/mirage-core";
|
|
258
|
+
function attrsToFileStat(name, attrs) {
|
|
259
|
+
const modified = attrs.mtime !== void 0 ? new Date(attrs.mtime * 1e3).toISOString() : null;
|
|
260
|
+
const extra = {};
|
|
261
|
+
if (attrs.mode !== void 0) extra.mode = attrs.mode;
|
|
262
|
+
if (attrs.uid !== void 0) extra.uid = attrs.uid;
|
|
263
|
+
if (attrs.gid !== void 0) extra.gid = attrs.gid;
|
|
264
|
+
if (isDirectoryAttrs(attrs)) {
|
|
265
|
+
return new FileStat({
|
|
266
|
+
name,
|
|
267
|
+
size: null,
|
|
268
|
+
modified,
|
|
269
|
+
type: FileType.DIRECTORY,
|
|
270
|
+
extra
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
return new FileStat({
|
|
274
|
+
name,
|
|
275
|
+
size: attrs.size ?? null,
|
|
276
|
+
modified,
|
|
277
|
+
fingerprint: null,
|
|
278
|
+
type: guessType(name),
|
|
279
|
+
extra
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// src/core/ssh/stat.ts
|
|
284
|
+
import { enoent as enoent3, rstripSlash as rstripSlash2 } from "@struktoai/mirage-core";
|
|
285
|
+
async function stat(accessor, p) {
|
|
286
|
+
const sftp = await accessor.sftp();
|
|
287
|
+
const virtual = stripPrefix(p);
|
|
288
|
+
const remote = joinRoot(accessor.config.root ?? "/", virtual);
|
|
289
|
+
const attrs = await new Promise((resolveFn, rejectFn) => {
|
|
290
|
+
sftp.lstat(remote, (err, stats) => {
|
|
291
|
+
if (err !== void 0) {
|
|
292
|
+
if (isNoSuchFile(err)) rejectFn(enoent3(p));
|
|
293
|
+
else rejectFn(err);
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
resolveFn(stats);
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
const cleaned = rstripSlash2(virtual);
|
|
300
|
+
const name = cleaned.length === 0 ? "/" : cleaned.split("/").pop() ?? "/";
|
|
301
|
+
return attrsToFileStat(name, attrs);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// src/commands/builtin/ssh/cat/cat.ts
|
|
305
|
+
async function catCommand(accessor, paths, texts, opts) {
|
|
306
|
+
const resolved = paths.length > 0 ? await resolveGlob(accessor, paths) : [];
|
|
307
|
+
return catGeneric(
|
|
308
|
+
resolved,
|
|
309
|
+
texts,
|
|
310
|
+
opts,
|
|
311
|
+
(p) => stat(accessor, p),
|
|
312
|
+
(p) => stream(accessor, p)
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
|
+
var SSH_CAT = command2({
|
|
316
|
+
name: "cat",
|
|
317
|
+
resource: ResourceName2.SSH,
|
|
318
|
+
spec: specOf2("cat"),
|
|
319
|
+
fn: catCommand,
|
|
320
|
+
provision: (accessor, paths) => catProvisionGeneric(paths, (p) => stat(accessor, p)),
|
|
321
|
+
aggregate: concatAggregate
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
// src/commands/builtin/ssh/cp.ts
|
|
325
|
+
import {
|
|
326
|
+
IOResult,
|
|
327
|
+
ResourceName as ResourceName3,
|
|
328
|
+
command as command3,
|
|
329
|
+
cpGeneric,
|
|
330
|
+
specOf as specOf3
|
|
331
|
+
} from "@struktoai/mirage-core";
|
|
332
|
+
|
|
333
|
+
// src/core/ssh/read.ts
|
|
334
|
+
import { enoent as enoent4 } from "@struktoai/mirage-core";
|
|
335
|
+
async function read(accessor, p) {
|
|
336
|
+
const sftp = await accessor.sftp();
|
|
337
|
+
const virtual = stripPrefix(p);
|
|
338
|
+
const remote = joinRoot(accessor.config.root ?? "/", virtual);
|
|
339
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
340
|
+
sftp.readFile(remote, (err, buf) => {
|
|
341
|
+
if (err !== void 0) {
|
|
342
|
+
if (isNoSuchFile(err)) rejectFn(enoent4(p));
|
|
343
|
+
else rejectFn(err);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
resolveFn(new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength));
|
|
347
|
+
});
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// src/core/ssh/write.ts
|
|
352
|
+
async function writeBytes(accessor, p, data) {
|
|
353
|
+
const sftp = await accessor.sftp();
|
|
354
|
+
const virtual = stripPrefix(p);
|
|
355
|
+
const remote = joinRoot(accessor.config.root ?? "/", virtual);
|
|
356
|
+
await new Promise((resolveFn, rejectFn) => {
|
|
357
|
+
sftp.writeFile(remote, Buffer.from(data), (err) => {
|
|
358
|
+
if (err) rejectFn(err);
|
|
359
|
+
else resolveFn();
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// src/core/ssh/copy.ts
|
|
365
|
+
async function copy(accessor, src, dst) {
|
|
366
|
+
const data = await read(accessor, src);
|
|
367
|
+
await writeBytes(accessor, dst, data);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// src/core/ssh/find.ts
|
|
371
|
+
import { norm } from "@struktoai/mirage-core";
|
|
372
|
+
import { buildTree, keep } from "@struktoai/mirage-core";
|
|
373
|
+
function isFileType(t) {
|
|
374
|
+
return t === "f" || t === "file";
|
|
375
|
+
}
|
|
376
|
+
function isDirType(t) {
|
|
377
|
+
return t === "d" || t === "directory";
|
|
378
|
+
}
|
|
379
|
+
function matches(entry, entryPath, isDir, depth, opts, tree) {
|
|
380
|
+
if (opts.maxDepth !== null && opts.maxDepth !== void 0 && depth > opts.maxDepth) return false;
|
|
381
|
+
const basename = entryPath.slice(entryPath.lastIndexOf("/") + 1);
|
|
382
|
+
const isEmpty = isDir ? false : entry.attrs.size === 0;
|
|
383
|
+
if (!keep(
|
|
384
|
+
{ key: entryPath, name: basename, kind: isDir ? "d" : "f", depth, isEmpty },
|
|
385
|
+
tree,
|
|
386
|
+
opts.minDepth
|
|
387
|
+
)) {
|
|
388
|
+
return false;
|
|
389
|
+
}
|
|
390
|
+
if (!isDir) {
|
|
391
|
+
const size = entry.attrs.size;
|
|
392
|
+
if (opts.minSize !== null && opts.minSize !== void 0 && size < opts.minSize) return false;
|
|
393
|
+
if (opts.maxSize !== null && opts.maxSize !== void 0 && size > opts.maxSize) return false;
|
|
394
|
+
}
|
|
395
|
+
if (opts.mtimeMin !== null && opts.mtimeMin !== void 0 || opts.mtimeMax !== null && opts.mtimeMax !== void 0) {
|
|
396
|
+
const mtime = entry.attrs.mtime;
|
|
397
|
+
if (opts.mtimeMin !== null && opts.mtimeMin !== void 0 && mtime < opts.mtimeMin) return false;
|
|
398
|
+
if (opts.mtimeMax !== null && opts.mtimeMax !== void 0 && mtime > opts.mtimeMax) return false;
|
|
399
|
+
}
|
|
400
|
+
return true;
|
|
401
|
+
}
|
|
402
|
+
async function readRemoteDir(accessor, remote) {
|
|
403
|
+
const sftp = await accessor.sftp();
|
|
404
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
405
|
+
sftp.readdir(remote, (err, entries) => {
|
|
406
|
+
if (err !== void 0) {
|
|
407
|
+
const code = err.code;
|
|
408
|
+
if (code === 2) {
|
|
409
|
+
resolveFn(null);
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
rejectFn(err);
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
resolveFn(entries);
|
|
416
|
+
});
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
async function statRemote(accessor, remote) {
|
|
420
|
+
const sftp = await accessor.sftp();
|
|
421
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
422
|
+
sftp.stat(remote, (err, stats) => {
|
|
423
|
+
if (err !== void 0) {
|
|
424
|
+
const code = err.code;
|
|
425
|
+
if (code === 2) {
|
|
426
|
+
resolveFn(null);
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
rejectFn(err);
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
resolveFn({ isDir: stats.isDirectory(), size: stats.size });
|
|
433
|
+
});
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
async function walk(ctx, virtual, depth) {
|
|
437
|
+
const opts = ctx.options;
|
|
438
|
+
if (opts.maxDepth !== null && opts.maxDepth !== void 0 && depth > opts.maxDepth) return;
|
|
439
|
+
const remote = joinRoot(ctx.accessor.config.root ?? "/", virtual);
|
|
440
|
+
const entries = await readRemoteDir(ctx.accessor, remote);
|
|
441
|
+
if (entries === null) return;
|
|
442
|
+
for (const entry of entries) {
|
|
443
|
+
if (entry.filename === "." || entry.filename === "..") continue;
|
|
444
|
+
const childPath = virtual === "/" ? `/${entry.filename}` : `${virtual}/${entry.filename}`;
|
|
445
|
+
const isDir = isDirectoryAttrs(entry.attrs);
|
|
446
|
+
if (matches(entry, childPath, isDir, depth + 1, opts, ctx.tree)) {
|
|
447
|
+
ctx.results.push(childPath);
|
|
448
|
+
}
|
|
449
|
+
if (isDir) {
|
|
450
|
+
await walk(ctx, childPath, depth + 1);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
async function find(accessor, p, options = {}) {
|
|
455
|
+
const virtual = norm(stripPrefix(p));
|
|
456
|
+
const results = [];
|
|
457
|
+
const baseDepth = (virtual.match(/\//g) ?? []).length;
|
|
458
|
+
const typeKind = isFileType(options.type) ? "f" : isDirType(options.type) ? "d" : null;
|
|
459
|
+
const tree = options.tree ?? buildTree({
|
|
460
|
+
name: options.name,
|
|
461
|
+
iname: options.iname,
|
|
462
|
+
pathPattern: options.pathPattern,
|
|
463
|
+
type: typeKind,
|
|
464
|
+
nameExclude: options.nameExclude,
|
|
465
|
+
orNames: options.orNames
|
|
466
|
+
});
|
|
467
|
+
if (virtual !== "/" && (options.maxDepth == null || options.maxDepth >= 0)) {
|
|
468
|
+
const st = await statRemote(accessor, joinRoot(accessor.config.root ?? "/", virtual));
|
|
469
|
+
if (st !== null && keep(
|
|
470
|
+
{
|
|
471
|
+
key: virtual,
|
|
472
|
+
name: virtual.slice(virtual.lastIndexOf("/") + 1),
|
|
473
|
+
kind: st.isDir ? "d" : "f",
|
|
474
|
+
depth: 0,
|
|
475
|
+
isEmpty: st.isDir ? false : st.size === 0
|
|
476
|
+
},
|
|
477
|
+
tree,
|
|
478
|
+
options.minDepth
|
|
479
|
+
)) {
|
|
480
|
+
results.push(virtual);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
await walk({ accessor, options, results, baseDepth, tree }, virtual, 0);
|
|
484
|
+
results.sort();
|
|
485
|
+
return results;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
// src/commands/builtin/ssh/cp.ts
|
|
489
|
+
function cpCommand(accessor, paths, _texts, opts) {
|
|
490
|
+
if (paths.length < 2) {
|
|
491
|
+
return Promise.resolve([
|
|
492
|
+
null,
|
|
493
|
+
new IOResult({ exitCode: 1, stderr: new TextEncoder().encode("cp: missing operand\n") })
|
|
494
|
+
]);
|
|
495
|
+
}
|
|
496
|
+
const recursive = opts.flags.r === true || opts.flags.R === true || opts.flags.a === true;
|
|
497
|
+
return cpGeneric(
|
|
498
|
+
paths,
|
|
499
|
+
(src, target) => copy(accessor, src, target),
|
|
500
|
+
(src, options) => find(accessor, src, options),
|
|
501
|
+
(p) => stat(accessor, p),
|
|
502
|
+
recursive,
|
|
503
|
+
opts.flags.n === true,
|
|
504
|
+
opts.flags.v === true,
|
|
505
|
+
opts.index ?? void 0
|
|
506
|
+
);
|
|
507
|
+
}
|
|
508
|
+
var SSH_CP = command3({
|
|
509
|
+
name: "cp",
|
|
510
|
+
resource: ResourceName3.SSH,
|
|
511
|
+
spec: specOf3("cp"),
|
|
512
|
+
fn: cpCommand,
|
|
513
|
+
write: true
|
|
514
|
+
});
|
|
515
|
+
|
|
516
|
+
// src/commands/builtin/ssh/dirname.ts
|
|
517
|
+
import { ResourceName as ResourceName4, command as command4, specOf as specOf4, dirnameFn } from "@struktoai/mirage-core";
|
|
518
|
+
var SSH_DIRNAME = command4({
|
|
519
|
+
name: "dirname",
|
|
520
|
+
resource: ResourceName4.SSH,
|
|
521
|
+
spec: specOf4("dirname"),
|
|
522
|
+
fn: dirnameFn
|
|
523
|
+
});
|
|
524
|
+
|
|
525
|
+
// src/commands/builtin/ssh/du.ts
|
|
526
|
+
import {
|
|
527
|
+
ResourceName as ResourceName5,
|
|
528
|
+
command as command5,
|
|
529
|
+
duGeneric,
|
|
530
|
+
specOf as specOf5
|
|
531
|
+
} from "@struktoai/mirage-core";
|
|
532
|
+
|
|
533
|
+
// src/core/ssh/du.ts
|
|
534
|
+
import { norm as norm2 } from "@struktoai/mirage-core";
|
|
535
|
+
async function readRemoteDir2(accessor, remote) {
|
|
536
|
+
const sftp = await accessor.sftp();
|
|
537
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
538
|
+
sftp.readdir(remote, (err, entries) => {
|
|
539
|
+
if (err !== void 0) {
|
|
540
|
+
const code = err.code;
|
|
541
|
+
if (code === 2) {
|
|
542
|
+
resolveFn(null);
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
rejectFn(err);
|
|
546
|
+
return;
|
|
547
|
+
}
|
|
548
|
+
resolveFn(entries);
|
|
549
|
+
});
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
async function statRemote2(accessor, remote) {
|
|
553
|
+
const sftp = await accessor.sftp();
|
|
554
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
555
|
+
sftp.lstat(remote, (err, stats) => {
|
|
556
|
+
if (err !== void 0) {
|
|
557
|
+
const code = err.code;
|
|
558
|
+
if (code === 2) {
|
|
559
|
+
resolveFn(null);
|
|
560
|
+
return;
|
|
561
|
+
}
|
|
562
|
+
rejectFn(err);
|
|
563
|
+
return;
|
|
564
|
+
}
|
|
565
|
+
resolveFn({ mode: stats.mode, size: stats.size });
|
|
566
|
+
});
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
async function walkSizes(accessor, virtual) {
|
|
570
|
+
const remote = joinRoot(accessor.config.root ?? "/", virtual);
|
|
571
|
+
const st = await statRemote2(accessor, remote);
|
|
572
|
+
if (st === null) return 0;
|
|
573
|
+
if (isFileAttrs(st)) return st.size;
|
|
574
|
+
if (!isDirectoryAttrs(st)) return 0;
|
|
575
|
+
const entries = await readRemoteDir2(accessor, remote);
|
|
576
|
+
if (entries === null) return 0;
|
|
577
|
+
let total = 0;
|
|
578
|
+
for (const entry of entries) {
|
|
579
|
+
if (entry.filename === "." || entry.filename === "..") continue;
|
|
580
|
+
const child = virtual === "/" ? `/${entry.filename}` : `${virtual}/${entry.filename}`;
|
|
581
|
+
if (isDirectoryAttrs(entry.attrs)) {
|
|
582
|
+
total += await walkSizes(accessor, child);
|
|
583
|
+
} else {
|
|
584
|
+
total += entry.attrs.size;
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
return total;
|
|
588
|
+
}
|
|
589
|
+
async function walkAll(accessor, virtual, entries) {
|
|
590
|
+
const remote = joinRoot(accessor.config.root ?? "/", virtual);
|
|
591
|
+
const st = await statRemote2(accessor, remote);
|
|
592
|
+
if (st === null) return 0;
|
|
593
|
+
if (isFileAttrs(st)) {
|
|
594
|
+
entries.push([virtual, st.size]);
|
|
595
|
+
return st.size;
|
|
596
|
+
}
|
|
597
|
+
if (!isDirectoryAttrs(st)) return 0;
|
|
598
|
+
const list = await readRemoteDir2(accessor, remote);
|
|
599
|
+
if (list === null) return 0;
|
|
600
|
+
let total = 0;
|
|
601
|
+
for (const entry of list) {
|
|
602
|
+
if (entry.filename === "." || entry.filename === "..") continue;
|
|
603
|
+
const child = virtual === "/" ? `/${entry.filename}` : `${virtual}/${entry.filename}`;
|
|
604
|
+
if (isDirectoryAttrs(entry.attrs)) {
|
|
605
|
+
total += await walkAll(accessor, child, entries);
|
|
606
|
+
} else {
|
|
607
|
+
const size = entry.attrs.size;
|
|
608
|
+
entries.push([child, size]);
|
|
609
|
+
total += size;
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
return total;
|
|
613
|
+
}
|
|
614
|
+
async function du(accessor, p) {
|
|
615
|
+
const virtual = stripPrefix(p);
|
|
616
|
+
return walkSizes(accessor, virtual);
|
|
617
|
+
}
|
|
618
|
+
async function duAll(accessor, p) {
|
|
619
|
+
const virtual = norm2(stripPrefix(p));
|
|
620
|
+
const entries = [];
|
|
621
|
+
const total = await walkAll(accessor, virtual, entries);
|
|
622
|
+
entries.sort((a, b) => a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0);
|
|
623
|
+
return [entries, total];
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
// src/commands/builtin/ssh/du.ts
|
|
627
|
+
async function duCommand(accessor, paths, _texts, opts) {
|
|
628
|
+
const resolved = paths.length > 0 ? await resolveGlob(accessor, paths) : [];
|
|
629
|
+
return duGeneric(
|
|
630
|
+
resolved,
|
|
631
|
+
opts,
|
|
632
|
+
(p) => du(accessor, p),
|
|
633
|
+
(p) => duAll(accessor, p)
|
|
634
|
+
);
|
|
635
|
+
}
|
|
636
|
+
var SSH_DU = command5({
|
|
637
|
+
name: "du",
|
|
638
|
+
resource: ResourceName5.SSH,
|
|
639
|
+
spec: specOf5("du"),
|
|
640
|
+
fn: duCommand
|
|
641
|
+
});
|
|
642
|
+
|
|
643
|
+
// src/commands/builtin/ssh/file/file.ts
|
|
644
|
+
import {
|
|
645
|
+
ResourceName as ResourceName6,
|
|
646
|
+
command as command6,
|
|
647
|
+
fileGeneric,
|
|
648
|
+
specOf as specOf6
|
|
649
|
+
} from "@struktoai/mirage-core";
|
|
650
|
+
async function fileCommand(accessor, paths, _texts, opts) {
|
|
651
|
+
const resolved = paths.length > 0 ? await resolveGlob(accessor, paths) : [];
|
|
652
|
+
return fileGeneric(
|
|
653
|
+
resolved,
|
|
654
|
+
opts,
|
|
655
|
+
(p) => stat(accessor, p),
|
|
656
|
+
(p) => read(accessor, p)
|
|
657
|
+
);
|
|
658
|
+
}
|
|
659
|
+
var SSH_FILE = command6({
|
|
660
|
+
name: "file",
|
|
661
|
+
resource: ResourceName6.SSH,
|
|
662
|
+
spec: specOf6("file"),
|
|
663
|
+
fn: fileCommand
|
|
664
|
+
});
|
|
665
|
+
|
|
666
|
+
// src/commands/builtin/ssh/find.ts
|
|
667
|
+
import { ResourceName as ResourceName7, command as command7, findGeneric, specOf as specOf7 } from "@struktoai/mirage-core";
|
|
668
|
+
var SSH_FIND = command7({
|
|
669
|
+
name: "find",
|
|
670
|
+
resource: ResourceName7.SSH,
|
|
671
|
+
spec: specOf7("find"),
|
|
672
|
+
fn: (accessor, paths, texts, opts) => findGeneric(paths, texts, opts, (root, options) => find(accessor, root, options))
|
|
673
|
+
});
|
|
674
|
+
|
|
675
|
+
// src/commands/builtin/ssh/grep/grep.ts
|
|
676
|
+
import {
|
|
677
|
+
ResourceName as ResourceName8,
|
|
678
|
+
command as command8,
|
|
679
|
+
grepGeneric,
|
|
680
|
+
prefixAggregate,
|
|
681
|
+
specOf as specOf8
|
|
682
|
+
} from "@struktoai/mirage-core";
|
|
683
|
+
async function grepFn(accessor, paths, texts, opts) {
|
|
684
|
+
const resolved = paths.length > 0 ? await resolveGlob(accessor, paths) : [];
|
|
685
|
+
const stat2 = (p) => stat(accessor, p);
|
|
686
|
+
const readdir2 = (p) => readdir(accessor, p);
|
|
687
|
+
return grepGeneric("grep", resolved, texts, opts, stat2, readdir2, (p) => stream(accessor, p));
|
|
688
|
+
}
|
|
689
|
+
var SSH_GREP = command8({
|
|
690
|
+
name: "grep",
|
|
691
|
+
resource: ResourceName8.SSH,
|
|
692
|
+
spec: specOf8("grep"),
|
|
693
|
+
fn: grepFn,
|
|
694
|
+
aggregate: prefixAggregate
|
|
695
|
+
});
|
|
696
|
+
|
|
697
|
+
// src/commands/builtin/ssh/head/head.ts
|
|
698
|
+
import {
|
|
699
|
+
ResourceName as ResourceName9,
|
|
700
|
+
command as command9,
|
|
701
|
+
headGeneric,
|
|
702
|
+
headProvisionGeneric,
|
|
703
|
+
headerAggregate,
|
|
704
|
+
specOf as specOf9
|
|
705
|
+
} from "@struktoai/mirage-core";
|
|
706
|
+
var SSH_HEAD = command9({
|
|
707
|
+
name: "head",
|
|
708
|
+
resource: ResourceName9.SSH,
|
|
709
|
+
spec: specOf9("head"),
|
|
710
|
+
fn: (accessor, paths, texts, opts) => headGeneric(
|
|
711
|
+
paths,
|
|
712
|
+
texts,
|
|
713
|
+
opts,
|
|
714
|
+
(p) => stat(accessor, p),
|
|
715
|
+
(p) => stream(accessor, p)
|
|
716
|
+
),
|
|
717
|
+
provision: (accessor, paths, texts, opts) => headProvisionGeneric(paths, texts, opts, (p) => stat(accessor, p)),
|
|
718
|
+
aggregate: headerAggregate
|
|
719
|
+
});
|
|
720
|
+
|
|
721
|
+
// src/commands/builtin/ssh/jq.ts
|
|
722
|
+
import {
|
|
723
|
+
ResourceName as ResourceName10,
|
|
724
|
+
command as command10,
|
|
725
|
+
jqGeneric,
|
|
726
|
+
jqProvisionGeneric,
|
|
727
|
+
specOf as specOf10
|
|
728
|
+
} from "@struktoai/mirage-core";
|
|
729
|
+
async function jqCommand(accessor, paths, texts, opts) {
|
|
730
|
+
const resolved = paths.length > 0 ? await resolveGlob(accessor, paths) : [];
|
|
731
|
+
return jqGeneric(resolved, texts, opts, (p) => stream(accessor, p));
|
|
732
|
+
}
|
|
733
|
+
var SSH_JQ = command10({
|
|
734
|
+
name: "jq",
|
|
735
|
+
resource: ResourceName10.SSH,
|
|
736
|
+
spec: specOf10("jq"),
|
|
737
|
+
fn: jqCommand,
|
|
738
|
+
provision: (accessor, paths, texts) => jqProvisionGeneric(paths, texts, (p) => stat(accessor, p))
|
|
739
|
+
});
|
|
740
|
+
|
|
741
|
+
// src/commands/builtin/ssh/ls/ls.ts
|
|
742
|
+
import { ResourceName as ResourceName11, command as command11, lsGeneric, specOf as specOf11 } from "@struktoai/mirage-core";
|
|
743
|
+
var SSH_LS = command11({
|
|
744
|
+
name: "ls",
|
|
745
|
+
resource: ResourceName11.SSH,
|
|
746
|
+
spec: specOf11("ls"),
|
|
747
|
+
fn: (accessor, paths, _texts, opts) => lsGeneric(
|
|
748
|
+
paths,
|
|
749
|
+
opts,
|
|
750
|
+
(p) => readdir(accessor, p),
|
|
751
|
+
(p) => stat(accessor, p)
|
|
752
|
+
)
|
|
753
|
+
});
|
|
754
|
+
|
|
755
|
+
// src/commands/builtin/ssh/mkdir.ts
|
|
756
|
+
import {
|
|
757
|
+
IOResult as IOResult2,
|
|
758
|
+
ResourceName as ResourceName12,
|
|
759
|
+
command as command12,
|
|
760
|
+
specOf as specOf12
|
|
761
|
+
} from "@struktoai/mirage-core";
|
|
762
|
+
|
|
763
|
+
// src/core/ssh/mkdir.ts
|
|
764
|
+
import { enoent as enoent5, stripSlash as stripSlash2 } from "@struktoai/mirage-core";
|
|
765
|
+
async function statRemote3(sftp, remote) {
|
|
766
|
+
return new Promise((resolveFn) => {
|
|
767
|
+
sftp.lstat(remote, (err, stats) => {
|
|
768
|
+
if (err) resolveFn(null);
|
|
769
|
+
else resolveFn(stats);
|
|
770
|
+
});
|
|
771
|
+
});
|
|
772
|
+
}
|
|
773
|
+
async function mkdirOne(sftp, remote, ignoreExisting) {
|
|
774
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
775
|
+
sftp.mkdir(remote, (err) => {
|
|
776
|
+
if (!err) {
|
|
777
|
+
resolveFn();
|
|
778
|
+
return;
|
|
779
|
+
}
|
|
780
|
+
if (ignoreExisting) {
|
|
781
|
+
resolveFn();
|
|
782
|
+
return;
|
|
783
|
+
}
|
|
784
|
+
rejectFn(err);
|
|
785
|
+
});
|
|
786
|
+
});
|
|
787
|
+
}
|
|
788
|
+
async function mkdir(accessor, p, recursive) {
|
|
789
|
+
const sftp = await accessor.sftp();
|
|
790
|
+
const virtual = stripPrefix(p);
|
|
791
|
+
const root = accessor.config.root ?? "/";
|
|
792
|
+
const remote = joinRoot(root, virtual);
|
|
793
|
+
if (!recursive) {
|
|
794
|
+
try {
|
|
795
|
+
await mkdirOne(sftp, remote, false);
|
|
796
|
+
} catch (err) {
|
|
797
|
+
if (isNoSuchFile(err)) throw enoent5(p);
|
|
798
|
+
throw err;
|
|
799
|
+
}
|
|
800
|
+
return;
|
|
801
|
+
}
|
|
802
|
+
const cleaned = stripSlash2(virtual);
|
|
803
|
+
if (cleaned.length === 0) return;
|
|
804
|
+
const parts = cleaned.split("/");
|
|
805
|
+
let cur = "";
|
|
806
|
+
for (const part of parts) {
|
|
807
|
+
cur = cur === "" ? `/${part}` : `${cur}/${part}`;
|
|
808
|
+
const stepRemote = joinRoot(root, cur);
|
|
809
|
+
const existing = await statRemote3(sftp, stepRemote);
|
|
810
|
+
if (existing?.isDirectory()) continue;
|
|
811
|
+
await mkdirOne(sftp, stepRemote, true);
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
// src/commands/builtin/ssh/mkdir.ts
|
|
816
|
+
async function mkdirCommand(accessor, paths, _texts, opts) {
|
|
817
|
+
const parents = opts.flags.p === true;
|
|
818
|
+
const verbose = opts.flags.v === true;
|
|
819
|
+
if (paths.length === 0) {
|
|
820
|
+
return [
|
|
821
|
+
null,
|
|
822
|
+
new IOResult2({
|
|
823
|
+
exitCode: 1,
|
|
824
|
+
stderr: new TextEncoder().encode("mkdir: missing operand\n")
|
|
825
|
+
})
|
|
826
|
+
];
|
|
827
|
+
}
|
|
828
|
+
const lines = [];
|
|
829
|
+
for (const p of paths) {
|
|
830
|
+
await mkdir(accessor, p, parents);
|
|
831
|
+
if (verbose) lines.push(`mkdir: created directory '${p.original}'`);
|
|
832
|
+
}
|
|
833
|
+
const out = lines.length > 0 ? new TextEncoder().encode(lines.join("\n") + "\n") : null;
|
|
834
|
+
return [out, new IOResult2()];
|
|
835
|
+
}
|
|
836
|
+
var SSH_MKDIR = command12({
|
|
837
|
+
name: "mkdir",
|
|
838
|
+
resource: ResourceName12.SSH,
|
|
839
|
+
spec: specOf12("mkdir"),
|
|
840
|
+
fn: mkdirCommand,
|
|
841
|
+
write: true
|
|
842
|
+
});
|
|
843
|
+
|
|
844
|
+
// src/commands/builtin/ssh/mv.ts
|
|
845
|
+
import {
|
|
846
|
+
IOResult as IOResult3,
|
|
847
|
+
ResourceName as ResourceName13,
|
|
848
|
+
command as command13,
|
|
849
|
+
mvGeneric,
|
|
850
|
+
specOf as specOf13
|
|
851
|
+
} from "@struktoai/mirage-core";
|
|
852
|
+
|
|
853
|
+
// src/core/ssh/rename.ts
|
|
854
|
+
import { enoent as enoent6 } from "@struktoai/mirage-core";
|
|
855
|
+
async function rename(accessor, src, dst) {
|
|
856
|
+
const sftp = await accessor.sftp();
|
|
857
|
+
const root = accessor.config.root ?? "/";
|
|
858
|
+
const srcVirtual = stripPrefix(src);
|
|
859
|
+
const dstVirtual = stripPrefix(dst);
|
|
860
|
+
const remoteSrc = joinRoot(root, srcVirtual);
|
|
861
|
+
const remoteDst = joinRoot(root, dstVirtual);
|
|
862
|
+
await new Promise((resolveFn, rejectFn) => {
|
|
863
|
+
sftp.rename(remoteSrc, remoteDst, (err) => {
|
|
864
|
+
if (!err) {
|
|
865
|
+
resolveFn();
|
|
866
|
+
return;
|
|
867
|
+
}
|
|
868
|
+
if (isNoSuchFile(err)) rejectFn(enoent6(src));
|
|
869
|
+
else rejectFn(err);
|
|
870
|
+
});
|
|
871
|
+
});
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
// src/commands/builtin/ssh/mv.ts
|
|
875
|
+
function mvCommand(accessor, paths, _texts, opts) {
|
|
876
|
+
if (paths.length < 2) {
|
|
877
|
+
return Promise.resolve([
|
|
878
|
+
null,
|
|
879
|
+
new IOResult3({ exitCode: 1, stderr: new TextEncoder().encode("mv: missing operand\n") })
|
|
880
|
+
]);
|
|
881
|
+
}
|
|
882
|
+
return mvGeneric(
|
|
883
|
+
paths,
|
|
884
|
+
(src, target) => rename(accessor, src, target),
|
|
885
|
+
(p) => stat(accessor, p),
|
|
886
|
+
opts.flags.n === true,
|
|
887
|
+
opts.flags.v === true,
|
|
888
|
+
opts.index ?? void 0
|
|
889
|
+
);
|
|
890
|
+
}
|
|
891
|
+
var SSH_MV = command13({
|
|
892
|
+
name: "mv",
|
|
893
|
+
resource: ResourceName13.SSH,
|
|
894
|
+
spec: specOf13("mv"),
|
|
895
|
+
fn: mvCommand,
|
|
896
|
+
write: true
|
|
897
|
+
});
|
|
898
|
+
|
|
899
|
+
// src/commands/builtin/ssh/realpath.ts
|
|
900
|
+
import { ResourceName as ResourceName14, command as command14, realpathGeneric, specOf as specOf14 } from "@struktoai/mirage-core";
|
|
901
|
+
var SSH_REALPATH = command14({
|
|
902
|
+
name: "realpath",
|
|
903
|
+
resource: ResourceName14.SSH,
|
|
904
|
+
spec: specOf14("realpath"),
|
|
905
|
+
fn: (accessor, paths, texts, opts) => realpathGeneric(paths, texts, opts, (p) => stat(accessor, p))
|
|
906
|
+
});
|
|
907
|
+
|
|
908
|
+
// src/commands/builtin/ssh/rg.ts
|
|
909
|
+
import {
|
|
910
|
+
ResourceName as ResourceName15,
|
|
911
|
+
command as command15,
|
|
912
|
+
rgGeneric,
|
|
913
|
+
specOf as specOf15
|
|
914
|
+
} from "@struktoai/mirage-core";
|
|
915
|
+
async function rgCommand(accessor, paths, texts, opts) {
|
|
916
|
+
const resolved = paths.length > 0 ? await resolveGlob(accessor, paths) : [];
|
|
917
|
+
const stat2 = (p) => stat(accessor, p);
|
|
918
|
+
const readdir2 = (p) => readdir(accessor, p);
|
|
919
|
+
return rgGeneric(resolved, texts, opts, stat2, readdir2, (p) => stream(accessor, p));
|
|
920
|
+
}
|
|
921
|
+
var SSH_RG = command15({
|
|
922
|
+
name: "rg",
|
|
923
|
+
resource: ResourceName15.SSH,
|
|
924
|
+
spec: specOf15("rg"),
|
|
925
|
+
fn: rgCommand
|
|
926
|
+
});
|
|
927
|
+
|
|
928
|
+
// src/commands/builtin/ssh/rm.ts
|
|
929
|
+
import {
|
|
930
|
+
FileType as FileType2,
|
|
931
|
+
IOResult as IOResult4,
|
|
932
|
+
ResourceName as ResourceName16,
|
|
933
|
+
command as command16,
|
|
934
|
+
specOf as specOf16,
|
|
935
|
+
formatRecords
|
|
936
|
+
} from "@struktoai/mirage-core";
|
|
937
|
+
|
|
938
|
+
// src/core/ssh/rmdir.ts
|
|
939
|
+
import { enoent as enoent7 } from "@struktoai/mirage-core";
|
|
940
|
+
async function rmdir(accessor, p) {
|
|
941
|
+
const sftp = await accessor.sftp();
|
|
942
|
+
const virtual = stripPrefix(p);
|
|
943
|
+
const remote = joinRoot(accessor.config.root ?? "/", virtual);
|
|
944
|
+
await new Promise((resolveFn, rejectFn) => {
|
|
945
|
+
sftp.rmdir(remote, (err) => {
|
|
946
|
+
if (!err) {
|
|
947
|
+
resolveFn();
|
|
948
|
+
return;
|
|
949
|
+
}
|
|
950
|
+
if (isNoSuchFile(err)) rejectFn(enoent7(p));
|
|
951
|
+
else rejectFn(err);
|
|
952
|
+
});
|
|
953
|
+
});
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
// src/core/ssh/unlink.ts
|
|
957
|
+
import { enoent as enoent8 } from "@struktoai/mirage-core";
|
|
958
|
+
async function unlink(accessor, p) {
|
|
959
|
+
const sftp = await accessor.sftp();
|
|
960
|
+
const virtual = stripPrefix(p);
|
|
961
|
+
const remote = joinRoot(accessor.config.root ?? "/", virtual);
|
|
962
|
+
await new Promise((resolveFn, rejectFn) => {
|
|
963
|
+
sftp.unlink(remote, (err) => {
|
|
964
|
+
if (!err) {
|
|
965
|
+
resolveFn();
|
|
966
|
+
return;
|
|
967
|
+
}
|
|
968
|
+
if (isNoSuchFile(err)) rejectFn(enoent8(p));
|
|
969
|
+
else rejectFn(err);
|
|
970
|
+
});
|
|
971
|
+
});
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
// src/core/ssh/rm.ts
|
|
975
|
+
import { enoent as enoent9 } from "@struktoai/mirage-core";
|
|
976
|
+
async function statRemote4(sftp, remote) {
|
|
977
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
978
|
+
sftp.lstat(remote, (err, stats) => {
|
|
979
|
+
if (err !== void 0) rejectFn(err);
|
|
980
|
+
else resolveFn(stats);
|
|
981
|
+
});
|
|
982
|
+
});
|
|
983
|
+
}
|
|
984
|
+
async function readdirRemote(sftp, remote) {
|
|
985
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
986
|
+
sftp.readdir(remote, (err, list) => {
|
|
987
|
+
if (err !== void 0) rejectFn(err);
|
|
988
|
+
else resolveFn(list);
|
|
989
|
+
});
|
|
990
|
+
});
|
|
991
|
+
}
|
|
992
|
+
async function unlinkRemote(sftp, remote) {
|
|
993
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
994
|
+
sftp.unlink(remote, (err) => {
|
|
995
|
+
if (err) rejectFn(err);
|
|
996
|
+
else resolveFn();
|
|
997
|
+
});
|
|
998
|
+
});
|
|
999
|
+
}
|
|
1000
|
+
async function rmdirRemote(sftp, remote) {
|
|
1001
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
1002
|
+
sftp.rmdir(remote, (err) => {
|
|
1003
|
+
if (err) rejectFn(err);
|
|
1004
|
+
else resolveFn();
|
|
1005
|
+
});
|
|
1006
|
+
});
|
|
1007
|
+
}
|
|
1008
|
+
async function rmRecurse(sftp, remote) {
|
|
1009
|
+
const stats = await statRemote4(sftp, remote);
|
|
1010
|
+
if (isDirectoryAttrs(stats)) {
|
|
1011
|
+
const entries = await readdirRemote(sftp, remote);
|
|
1012
|
+
for (const entry of entries) {
|
|
1013
|
+
if (entry.filename === "." || entry.filename === "..") continue;
|
|
1014
|
+
const child = remote === "/" ? `/${entry.filename}` : `${remote}/${entry.filename}`;
|
|
1015
|
+
await rmRecurse(sftp, child);
|
|
1016
|
+
}
|
|
1017
|
+
await rmdirRemote(sftp, remote);
|
|
1018
|
+
return;
|
|
1019
|
+
}
|
|
1020
|
+
await unlinkRemote(sftp, remote);
|
|
1021
|
+
}
|
|
1022
|
+
async function rmR(accessor, p) {
|
|
1023
|
+
const sftp = await accessor.sftp();
|
|
1024
|
+
const virtual = stripPrefix(p);
|
|
1025
|
+
const remote = joinRoot(accessor.config.root ?? "/", virtual);
|
|
1026
|
+
try {
|
|
1027
|
+
await rmRecurse(sftp, remote);
|
|
1028
|
+
} catch (err) {
|
|
1029
|
+
if (isNoSuchFile(err)) throw enoent9(p);
|
|
1030
|
+
throw err;
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
// src/commands/builtin/ssh/rm.ts
|
|
1035
|
+
async function rmCommand(accessor, paths, _texts, opts) {
|
|
1036
|
+
if (paths.length === 0) {
|
|
1037
|
+
return [
|
|
1038
|
+
null,
|
|
1039
|
+
new IOResult4({
|
|
1040
|
+
exitCode: 1,
|
|
1041
|
+
stderr: new TextEncoder().encode("rm: missing operand\n")
|
|
1042
|
+
})
|
|
1043
|
+
];
|
|
1044
|
+
}
|
|
1045
|
+
const recursive = opts.flags.r === true || opts.flags.R === true;
|
|
1046
|
+
const force = opts.flags.f === true;
|
|
1047
|
+
const verbose = opts.flags.v === true;
|
|
1048
|
+
const lines = [];
|
|
1049
|
+
for (const p of paths) {
|
|
1050
|
+
let isDir = false;
|
|
1051
|
+
try {
|
|
1052
|
+
const st = await stat(accessor, p);
|
|
1053
|
+
isDir = st.type === FileType2.DIRECTORY;
|
|
1054
|
+
} catch {
|
|
1055
|
+
if (force) continue;
|
|
1056
|
+
throw new Error(`rm: cannot remove '${p.original}': No such file or directory`);
|
|
1057
|
+
}
|
|
1058
|
+
if (isDir) {
|
|
1059
|
+
if (recursive) {
|
|
1060
|
+
await rmR(accessor, p);
|
|
1061
|
+
} else {
|
|
1062
|
+
await rmdir(accessor, p);
|
|
1063
|
+
}
|
|
1064
|
+
} else {
|
|
1065
|
+
await unlink(accessor, p);
|
|
1066
|
+
}
|
|
1067
|
+
if (verbose) lines.push(`removed '${p.original}'`);
|
|
1068
|
+
}
|
|
1069
|
+
const out = lines.length > 0 ? formatRecords(lines) : null;
|
|
1070
|
+
return [out, new IOResult4()];
|
|
1071
|
+
}
|
|
1072
|
+
var SSH_RM = command16({
|
|
1073
|
+
name: "rm",
|
|
1074
|
+
resource: ResourceName16.SSH,
|
|
1075
|
+
spec: specOf16("rm"),
|
|
1076
|
+
fn: rmCommand,
|
|
1077
|
+
write: true
|
|
1078
|
+
});
|
|
1079
|
+
|
|
1080
|
+
// src/commands/builtin/ssh/stat/stat.ts
|
|
1081
|
+
import {
|
|
1082
|
+
ResourceName as ResourceName17,
|
|
1083
|
+
command as command17,
|
|
1084
|
+
specOf as specOf17,
|
|
1085
|
+
statGeneric,
|
|
1086
|
+
statProvisionGeneric
|
|
1087
|
+
} from "@struktoai/mirage-core";
|
|
1088
|
+
async function statCommand(accessor, paths, _texts, opts) {
|
|
1089
|
+
const resolved = paths.length > 0 ? await resolveGlob(accessor, paths) : [];
|
|
1090
|
+
return statGeneric(resolved, opts, (p) => stat(accessor, p));
|
|
1091
|
+
}
|
|
1092
|
+
var SSH_STAT = command17({
|
|
1093
|
+
name: "stat",
|
|
1094
|
+
resource: ResourceName17.SSH,
|
|
1095
|
+
spec: specOf17("stat"),
|
|
1096
|
+
fn: statCommand,
|
|
1097
|
+
provision: statProvisionGeneric
|
|
1098
|
+
});
|
|
1099
|
+
|
|
1100
|
+
// src/commands/builtin/ssh/tail/tail.ts
|
|
1101
|
+
import { ResourceName as ResourceName18, command as command18, headerAggregate as headerAggregate2, specOf as specOf18, tailGeneric } from "@struktoai/mirage-core";
|
|
1102
|
+
var SSH_TAIL = command18({
|
|
1103
|
+
name: "tail",
|
|
1104
|
+
resource: ResourceName18.SSH,
|
|
1105
|
+
spec: specOf18("tail"),
|
|
1106
|
+
fn: (accessor, paths, texts, opts) => tailGeneric(paths, texts, opts, (p) => stream(accessor, p)),
|
|
1107
|
+
aggregate: headerAggregate2
|
|
1108
|
+
});
|
|
1109
|
+
|
|
1110
|
+
// src/commands/builtin/ssh/touch.ts
|
|
1111
|
+
import {
|
|
1112
|
+
IOResult as IOResult5,
|
|
1113
|
+
ResourceName as ResourceName19,
|
|
1114
|
+
command as command19,
|
|
1115
|
+
specOf as specOf19
|
|
1116
|
+
} from "@struktoai/mirage-core";
|
|
1117
|
+
|
|
1118
|
+
// src/core/ssh/exists.ts
|
|
1119
|
+
async function exists(accessor, p) {
|
|
1120
|
+
const sftp = await accessor.sftp();
|
|
1121
|
+
const remote = joinRoot(accessor.config.root ?? "/", stripPrefix(p));
|
|
1122
|
+
return new Promise((resolveFn) => {
|
|
1123
|
+
sftp.exists(remote, (yes) => {
|
|
1124
|
+
resolveFn(yes);
|
|
1125
|
+
});
|
|
1126
|
+
});
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
// src/commands/builtin/ssh/touch.ts
|
|
1130
|
+
var ENC = new TextEncoder();
|
|
1131
|
+
async function touchCommand(accessor, paths, texts, opts) {
|
|
1132
|
+
if (paths.length === 0) {
|
|
1133
|
+
return [null, new IOResult5({ exitCode: 1, stderr: ENC.encode("touch: missing operand\n") })];
|
|
1134
|
+
}
|
|
1135
|
+
const createOnly = opts.flags.c === true;
|
|
1136
|
+
for (const p of paths) {
|
|
1137
|
+
if (createOnly) continue;
|
|
1138
|
+
if (!await exists(accessor, p)) {
|
|
1139
|
+
await writeBytes(accessor, p, new Uint8Array(0));
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1142
|
+
return [null, new IOResult5()];
|
|
1143
|
+
}
|
|
1144
|
+
var SSH_TOUCH = command19({
|
|
1145
|
+
name: "touch",
|
|
1146
|
+
resource: ResourceName19.SSH,
|
|
1147
|
+
spec: specOf19("touch"),
|
|
1148
|
+
fn: touchCommand,
|
|
1149
|
+
write: true
|
|
1150
|
+
});
|
|
1151
|
+
|
|
1152
|
+
// src/commands/builtin/ssh/tree.ts
|
|
1153
|
+
import {
|
|
1154
|
+
ResourceName as ResourceName20,
|
|
1155
|
+
command as command20,
|
|
1156
|
+
specOf as specOf20,
|
|
1157
|
+
treeGeneric
|
|
1158
|
+
} from "@struktoai/mirage-core";
|
|
1159
|
+
async function treeCommand(accessor, paths, _texts, opts) {
|
|
1160
|
+
const resolved = await resolveGlob(accessor, paths);
|
|
1161
|
+
return treeGeneric(
|
|
1162
|
+
resolved,
|
|
1163
|
+
opts,
|
|
1164
|
+
(p) => readdir(accessor, p),
|
|
1165
|
+
(p) => stat(accessor, p)
|
|
1166
|
+
);
|
|
1167
|
+
}
|
|
1168
|
+
var SSH_TREE = command20({
|
|
1169
|
+
name: "tree",
|
|
1170
|
+
resource: ResourceName20.SSH,
|
|
1171
|
+
spec: specOf20("tree"),
|
|
1172
|
+
fn: treeCommand
|
|
1173
|
+
});
|
|
1174
|
+
|
|
1175
|
+
// src/commands/builtin/ssh/wc/wc.ts
|
|
1176
|
+
import { ResourceName as ResourceName21, command as command21, specOf as specOf21, wcAggregate, wcGeneric } from "@struktoai/mirage-core";
|
|
1177
|
+
var SSH_WC = command21({
|
|
1178
|
+
name: "wc",
|
|
1179
|
+
resource: ResourceName21.SSH,
|
|
1180
|
+
spec: specOf21("wc"),
|
|
1181
|
+
fn: (accessor, paths, texts, opts) => wcGeneric(paths, texts, opts, (p) => stream(accessor, p)),
|
|
1182
|
+
aggregate: wcAggregate
|
|
1183
|
+
});
|
|
1184
|
+
|
|
1185
|
+
// src/commands/builtin/ssh/awk.ts
|
|
1186
|
+
import { ResourceName as ResourceName22, awkGeneric, command as command22, specOf as specOf22 } from "@struktoai/mirage-core";
|
|
1187
|
+
var SSH_AWK = command22({
|
|
1188
|
+
name: "awk",
|
|
1189
|
+
resource: ResourceName22.SSH,
|
|
1190
|
+
spec: specOf22("awk"),
|
|
1191
|
+
fn: (accessor, paths, texts, opts) => awkGeneric(paths, texts, opts, (p) => stream(accessor, p))
|
|
1192
|
+
});
|
|
1193
|
+
|
|
1194
|
+
// src/commands/builtin/ssh/base64_cmd.ts
|
|
1195
|
+
import { ResourceName as ResourceName23, command as command23, specOf as specOf23, base64Generic } from "@struktoai/mirage-core";
|
|
1196
|
+
var SSH_BASE64 = command23({
|
|
1197
|
+
name: "base64",
|
|
1198
|
+
resource: ResourceName23.SSH,
|
|
1199
|
+
spec: specOf23("base64"),
|
|
1200
|
+
fn: (accessor, paths, _texts, opts) => base64Generic(paths, opts, (p) => stream(accessor, p))
|
|
1201
|
+
});
|
|
1202
|
+
|
|
1203
|
+
// src/commands/builtin/ssh/cmp.ts
|
|
1204
|
+
import { ResourceName as ResourceName24, command as command24, specOf as specOf24, cmpGeneric } from "@struktoai/mirage-core";
|
|
1205
|
+
var SSH_CMP = command24({
|
|
1206
|
+
name: "cmp",
|
|
1207
|
+
resource: ResourceName24.SSH,
|
|
1208
|
+
spec: specOf24("cmp"),
|
|
1209
|
+
fn: (accessor, paths, _texts, opts) => cmpGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1210
|
+
});
|
|
1211
|
+
|
|
1212
|
+
// src/commands/builtin/ssh/column.ts
|
|
1213
|
+
import { ResourceName as ResourceName25, command as command25, specOf as specOf25, columnGeneric } from "@struktoai/mirage-core";
|
|
1214
|
+
var SSH_COLUMN = command25({
|
|
1215
|
+
name: "column",
|
|
1216
|
+
resource: ResourceName25.SSH,
|
|
1217
|
+
spec: specOf25("column"),
|
|
1218
|
+
fn: (accessor, paths, _texts, opts) => columnGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1219
|
+
});
|
|
1220
|
+
|
|
1221
|
+
// src/commands/builtin/ssh/comm.ts
|
|
1222
|
+
import { ResourceName as ResourceName26, command as command26, specOf as specOf26, commGeneric } from "@struktoai/mirage-core";
|
|
1223
|
+
var SSH_COMM = command26({
|
|
1224
|
+
name: "comm",
|
|
1225
|
+
resource: ResourceName26.SSH,
|
|
1226
|
+
spec: specOf26("comm"),
|
|
1227
|
+
fn: (accessor, paths, _texts, opts) => commGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1228
|
+
});
|
|
1229
|
+
|
|
1230
|
+
// src/commands/builtin/ssh/csplit.ts
|
|
1231
|
+
import { ResourceName as ResourceName27, command as command27, specOf as specOf27, csplitGeneric } from "@struktoai/mirage-core";
|
|
1232
|
+
var SSH_CSPLIT = command27({
|
|
1233
|
+
name: "csplit",
|
|
1234
|
+
resource: ResourceName27.SSH,
|
|
1235
|
+
spec: specOf27("csplit"),
|
|
1236
|
+
fn: (accessor, paths, texts, opts) => csplitGeneric(
|
|
1237
|
+
paths,
|
|
1238
|
+
texts,
|
|
1239
|
+
opts,
|
|
1240
|
+
(p) => stream(accessor, p),
|
|
1241
|
+
(p, d) => writeBytes(accessor, p, d)
|
|
1242
|
+
),
|
|
1243
|
+
write: true
|
|
1244
|
+
});
|
|
1245
|
+
|
|
1246
|
+
// src/commands/builtin/ssh/cut.ts
|
|
1247
|
+
import { ResourceName as ResourceName28, command as command28, cutGeneric, specOf as specOf28 } from "@struktoai/mirage-core";
|
|
1248
|
+
var SSH_CUT = command28({
|
|
1249
|
+
name: "cut",
|
|
1250
|
+
resource: ResourceName28.SSH,
|
|
1251
|
+
spec: specOf28("cut"),
|
|
1252
|
+
fn: (accessor, paths, _texts, opts) => cutGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1253
|
+
});
|
|
1254
|
+
|
|
1255
|
+
// src/commands/builtin/ssh/diff.ts
|
|
1256
|
+
import { ResourceName as ResourceName29, command as command29, diffGeneric, specOf as specOf29 } from "@struktoai/mirage-core";
|
|
1257
|
+
var SSH_DIFF = command29({
|
|
1258
|
+
name: "diff",
|
|
1259
|
+
resource: ResourceName29.SSH,
|
|
1260
|
+
spec: specOf29("diff"),
|
|
1261
|
+
fn: (accessor, paths, _texts, opts) => diffGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1262
|
+
});
|
|
1263
|
+
|
|
1264
|
+
// src/commands/builtin/ssh/expand.ts
|
|
1265
|
+
import { ResourceName as ResourceName30, command as command30, specOf as specOf30, expandGeneric } from "@struktoai/mirage-core";
|
|
1266
|
+
var SSH_EXPAND = command30({
|
|
1267
|
+
name: "expand",
|
|
1268
|
+
resource: ResourceName30.SSH,
|
|
1269
|
+
spec: specOf30("expand"),
|
|
1270
|
+
fn: (accessor, paths, _texts, opts) => expandGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1271
|
+
});
|
|
1272
|
+
|
|
1273
|
+
// src/commands/builtin/ssh/fmt.ts
|
|
1274
|
+
import {
|
|
1275
|
+
ResourceName as ResourceName31,
|
|
1276
|
+
command as command31,
|
|
1277
|
+
fmtGeneric,
|
|
1278
|
+
specOf as specOf31
|
|
1279
|
+
} from "@struktoai/mirage-core";
|
|
1280
|
+
async function fmtCommand(accessor, paths, _texts, opts) {
|
|
1281
|
+
return fmtGeneric(paths, opts, (p) => stream(accessor, p));
|
|
1282
|
+
}
|
|
1283
|
+
var SSH_FMT = command31({
|
|
1284
|
+
name: "fmt",
|
|
1285
|
+
resource: ResourceName31.SSH,
|
|
1286
|
+
spec: specOf31("fmt"),
|
|
1287
|
+
fn: fmtCommand
|
|
1288
|
+
});
|
|
1289
|
+
|
|
1290
|
+
// src/commands/builtin/ssh/fold.ts
|
|
1291
|
+
import { ResourceName as ResourceName32, command as command32, specOf as specOf32, foldGeneric } from "@struktoai/mirage-core";
|
|
1292
|
+
var SSH_FOLD = command32({
|
|
1293
|
+
name: "fold",
|
|
1294
|
+
resource: ResourceName32.SSH,
|
|
1295
|
+
spec: specOf32("fold"),
|
|
1296
|
+
fn: (accessor, paths, _texts, opts) => foldGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1297
|
+
});
|
|
1298
|
+
|
|
1299
|
+
// src/commands/builtin/ssh/gunzip.ts
|
|
1300
|
+
import { ResourceName as ResourceName33, command as command33, specOf as specOf33, gunzipGeneric } from "@struktoai/mirage-core";
|
|
1301
|
+
var SSH_GUNZIP = command33({
|
|
1302
|
+
name: "gunzip",
|
|
1303
|
+
resource: ResourceName33.SSH,
|
|
1304
|
+
spec: specOf33("gunzip"),
|
|
1305
|
+
fn: (accessor, paths, _texts, opts) => gunzipGeneric(
|
|
1306
|
+
paths,
|
|
1307
|
+
opts,
|
|
1308
|
+
(p) => stream(accessor, p),
|
|
1309
|
+
(p, d) => writeBytes(accessor, p, d),
|
|
1310
|
+
(p) => unlink(accessor, p)
|
|
1311
|
+
),
|
|
1312
|
+
write: true
|
|
1313
|
+
});
|
|
1314
|
+
|
|
1315
|
+
// src/commands/builtin/ssh/gzip.ts
|
|
1316
|
+
import { ResourceName as ResourceName34, command as command34, specOf as specOf34, gzipGeneric } from "@struktoai/mirage-core";
|
|
1317
|
+
var SSH_GZIP = command34({
|
|
1318
|
+
name: "gzip",
|
|
1319
|
+
resource: ResourceName34.SSH,
|
|
1320
|
+
spec: specOf34("gzip"),
|
|
1321
|
+
fn: (accessor, paths, _texts, opts) => gzipGeneric(
|
|
1322
|
+
paths,
|
|
1323
|
+
opts,
|
|
1324
|
+
(p) => stream(accessor, p),
|
|
1325
|
+
(p, d) => writeBytes(accessor, p, d),
|
|
1326
|
+
(p) => unlink(accessor, p)
|
|
1327
|
+
),
|
|
1328
|
+
write: true
|
|
1329
|
+
});
|
|
1330
|
+
|
|
1331
|
+
// src/commands/builtin/ssh/iconv.ts
|
|
1332
|
+
import { ResourceName as ResourceName35, command as command35, specOf as specOf35, iconvGeneric } from "@struktoai/mirage-core";
|
|
1333
|
+
var SSH_ICONV = command35({
|
|
1334
|
+
name: "iconv",
|
|
1335
|
+
resource: ResourceName35.SSH,
|
|
1336
|
+
spec: specOf35("iconv"),
|
|
1337
|
+
fn: (accessor, paths, _texts, opts) => iconvGeneric(
|
|
1338
|
+
paths,
|
|
1339
|
+
opts,
|
|
1340
|
+
(p) => stream(accessor, p),
|
|
1341
|
+
(p, d) => writeBytes(accessor, p, d)
|
|
1342
|
+
),
|
|
1343
|
+
write: true
|
|
1344
|
+
});
|
|
1345
|
+
|
|
1346
|
+
// src/commands/builtin/ssh/join.ts
|
|
1347
|
+
import { ResourceName as ResourceName36, command as command36, specOf as specOf36, joinGeneric } from "@struktoai/mirage-core";
|
|
1348
|
+
var SSH_JOIN = command36({
|
|
1349
|
+
name: "join",
|
|
1350
|
+
resource: ResourceName36.SSH,
|
|
1351
|
+
spec: specOf36("join"),
|
|
1352
|
+
fn: (accessor, paths, _texts, opts) => joinGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1353
|
+
});
|
|
1354
|
+
|
|
1355
|
+
// src/commands/builtin/ssh/ln.ts
|
|
1356
|
+
import {
|
|
1357
|
+
IOResult as IOResult6,
|
|
1358
|
+
ResourceName as ResourceName37,
|
|
1359
|
+
command as command37,
|
|
1360
|
+
materialize,
|
|
1361
|
+
specOf as specOf37
|
|
1362
|
+
} from "@struktoai/mirage-core";
|
|
1363
|
+
var ENC2 = new TextEncoder();
|
|
1364
|
+
async function lnCommand(accessor, paths, texts, opts) {
|
|
1365
|
+
if (paths.length < 2) {
|
|
1366
|
+
return [
|
|
1367
|
+
null,
|
|
1368
|
+
new IOResult6({ exitCode: 1, stderr: ENC2.encode("ln: usage: ln [-s] [-f] source dest\n") })
|
|
1369
|
+
];
|
|
1370
|
+
}
|
|
1371
|
+
const source = paths[0];
|
|
1372
|
+
const dest = paths[1];
|
|
1373
|
+
if (source === void 0 || dest === void 0) return [null, new IOResult6()];
|
|
1374
|
+
if (opts.flags.n === true && await exists(accessor, dest)) {
|
|
1375
|
+
return [null, new IOResult6()];
|
|
1376
|
+
}
|
|
1377
|
+
const data = await materialize(stream(accessor, source));
|
|
1378
|
+
await writeBytes(accessor, dest, data);
|
|
1379
|
+
const out = opts.flags.v === true ? ENC2.encode(`'${source.original}' -> '${dest.original}'
|
|
1380
|
+
`) : null;
|
|
1381
|
+
return [out, new IOResult6({ writes: { [dest.stripPrefix]: data } })];
|
|
1382
|
+
}
|
|
1383
|
+
var SSH_LN = command37({
|
|
1384
|
+
name: "ln",
|
|
1385
|
+
resource: ResourceName37.SSH,
|
|
1386
|
+
spec: specOf37("ln"),
|
|
1387
|
+
fn: lnCommand,
|
|
1388
|
+
write: true
|
|
1389
|
+
});
|
|
1390
|
+
|
|
1391
|
+
// src/commands/builtin/ssh/look.ts
|
|
1392
|
+
import { ResourceName as ResourceName38, command as command38, specOf as specOf38, lookGeneric } from "@struktoai/mirage-core";
|
|
1393
|
+
var SSH_LOOK = command38({
|
|
1394
|
+
name: "look",
|
|
1395
|
+
resource: ResourceName38.SSH,
|
|
1396
|
+
spec: specOf38("look"),
|
|
1397
|
+
fn: (accessor, paths, texts, opts) => lookGeneric(paths, texts, opts, (p) => stream(accessor, p))
|
|
1398
|
+
});
|
|
1399
|
+
|
|
1400
|
+
// src/commands/builtin/ssh/md5.ts
|
|
1401
|
+
import { ResourceName as ResourceName39, command as command39, specOf as specOf39, md5Generic } from "@struktoai/mirage-core";
|
|
1402
|
+
var SSH_MD5 = command39({
|
|
1403
|
+
name: "md5",
|
|
1404
|
+
resource: ResourceName39.SSH,
|
|
1405
|
+
spec: specOf39("md5"),
|
|
1406
|
+
fn: (accessor, paths, _texts, opts) => md5Generic(paths, opts, (p) => stream(accessor, p))
|
|
1407
|
+
});
|
|
1408
|
+
|
|
1409
|
+
// src/commands/builtin/ssh/mktemp.ts
|
|
1410
|
+
import { ResourceName as ResourceName40, command as command40, mktempGeneric, specOf as specOf40 } from "@struktoai/mirage-core";
|
|
1411
|
+
var SSH_MKTEMP = command40({
|
|
1412
|
+
name: "mktemp",
|
|
1413
|
+
resource: ResourceName40.SSH,
|
|
1414
|
+
spec: specOf40("mktemp"),
|
|
1415
|
+
fn: (accessor, _paths, texts, opts) => mktempGeneric(
|
|
1416
|
+
texts,
|
|
1417
|
+
opts,
|
|
1418
|
+
(p, parents) => mkdir(accessor, p, parents ?? false),
|
|
1419
|
+
(p, d) => writeBytes(accessor, p, d)
|
|
1420
|
+
),
|
|
1421
|
+
write: true
|
|
1422
|
+
});
|
|
1423
|
+
|
|
1424
|
+
// src/commands/builtin/ssh/nl.ts
|
|
1425
|
+
import { ResourceName as ResourceName41, command as command41, specOf as specOf41, nlGeneric } from "@struktoai/mirage-core";
|
|
1426
|
+
var SSH_NL = command41({
|
|
1427
|
+
name: "nl",
|
|
1428
|
+
resource: ResourceName41.SSH,
|
|
1429
|
+
spec: specOf41("nl"),
|
|
1430
|
+
fn: (accessor, paths, _texts, opts) => nlGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1431
|
+
});
|
|
1432
|
+
|
|
1433
|
+
// src/commands/builtin/ssh/paste.ts
|
|
1434
|
+
import { ResourceName as ResourceName42, command as command42, specOf as specOf42, pasteGeneric } from "@struktoai/mirage-core";
|
|
1435
|
+
var SSH_PASTE = command42({
|
|
1436
|
+
name: "paste",
|
|
1437
|
+
resource: ResourceName42.SSH,
|
|
1438
|
+
spec: specOf42("paste"),
|
|
1439
|
+
fn: (accessor, paths, _texts, opts) => pasteGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1440
|
+
});
|
|
1441
|
+
|
|
1442
|
+
// src/commands/builtin/ssh/patch.ts
|
|
1443
|
+
import { ResourceName as ResourceName43, command as command43, specOf as specOf43, patchGeneric } from "@struktoai/mirage-core";
|
|
1444
|
+
var SSH_PATCH = command43({
|
|
1445
|
+
name: "patch",
|
|
1446
|
+
resource: ResourceName43.SSH,
|
|
1447
|
+
spec: specOf43("patch"),
|
|
1448
|
+
fn: (accessor, paths, _texts, opts) => patchGeneric(
|
|
1449
|
+
paths,
|
|
1450
|
+
opts,
|
|
1451
|
+
(p) => stream(accessor, p),
|
|
1452
|
+
(p, d) => writeBytes(accessor, p, d)
|
|
1453
|
+
),
|
|
1454
|
+
write: true
|
|
1455
|
+
});
|
|
1456
|
+
|
|
1457
|
+
// src/commands/builtin/ssh/readlink.ts
|
|
1458
|
+
import {
|
|
1459
|
+
ResourceName as ResourceName44,
|
|
1460
|
+
command as command44,
|
|
1461
|
+
readlinkGeneric,
|
|
1462
|
+
specOf as specOf44
|
|
1463
|
+
} from "@struktoai/mirage-core";
|
|
1464
|
+
var SSH_READLINK = command44({
|
|
1465
|
+
name: "readlink",
|
|
1466
|
+
resource: ResourceName44.SSH,
|
|
1467
|
+
spec: specOf44("readlink"),
|
|
1468
|
+
fn: (_accessor, paths, texts, opts) => readlinkGeneric(paths, texts, opts)
|
|
1469
|
+
});
|
|
1470
|
+
|
|
1471
|
+
// src/commands/builtin/ssh/rev.ts
|
|
1472
|
+
import { ResourceName as ResourceName45, command as command45, specOf as specOf45, revGeneric } from "@struktoai/mirage-core";
|
|
1473
|
+
var SSH_REV = command45({
|
|
1474
|
+
name: "rev",
|
|
1475
|
+
resource: ResourceName45.SSH,
|
|
1476
|
+
spec: specOf45("rev"),
|
|
1477
|
+
fn: (accessor, paths, _texts, opts) => revGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1478
|
+
});
|
|
1479
|
+
|
|
1480
|
+
// src/commands/builtin/ssh/sed.ts
|
|
1481
|
+
import { ResourceName as ResourceName46, command as command46, specOf as specOf46, sedGeneric } from "@struktoai/mirage-core";
|
|
1482
|
+
var SSH_SED = command46({
|
|
1483
|
+
name: "sed",
|
|
1484
|
+
resource: ResourceName46.SSH,
|
|
1485
|
+
spec: specOf46("sed"),
|
|
1486
|
+
fn: (accessor, paths, texts, opts) => sedGeneric(
|
|
1487
|
+
paths,
|
|
1488
|
+
texts,
|
|
1489
|
+
opts,
|
|
1490
|
+
(p) => stream(accessor, p),
|
|
1491
|
+
(p, d) => writeBytes(accessor, p, d)
|
|
1492
|
+
)
|
|
1493
|
+
});
|
|
1494
|
+
|
|
1495
|
+
// src/commands/builtin/ssh/sha256sum.ts
|
|
1496
|
+
import { ResourceName as ResourceName47, command as command47, sha256sumGeneric, specOf as specOf47 } from "@struktoai/mirage-core";
|
|
1497
|
+
var SSH_SHA256SUM = command47({
|
|
1498
|
+
name: "sha256sum",
|
|
1499
|
+
resource: ResourceName47.SSH,
|
|
1500
|
+
spec: specOf47("sha256sum"),
|
|
1501
|
+
fn: (accessor, paths, _texts, opts) => sha256sumGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1502
|
+
});
|
|
1503
|
+
|
|
1504
|
+
// src/commands/builtin/ssh/shuf.ts
|
|
1505
|
+
import { ResourceName as ResourceName48, command as command48, specOf as specOf48, shufGeneric } from "@struktoai/mirage-core";
|
|
1506
|
+
var SSH_SHUF = command48({
|
|
1507
|
+
name: "shuf",
|
|
1508
|
+
resource: ResourceName48.SSH,
|
|
1509
|
+
spec: specOf48("shuf"),
|
|
1510
|
+
fn: (accessor, paths, texts, opts) => shufGeneric(paths, texts, opts, (p) => stream(accessor, p))
|
|
1511
|
+
});
|
|
1512
|
+
|
|
1513
|
+
// src/commands/builtin/ssh/sort.ts
|
|
1514
|
+
import { ResourceName as ResourceName49, command as command49, specOf as specOf49, sortGeneric } from "@struktoai/mirage-core";
|
|
1515
|
+
var SSH_SORT = command49({
|
|
1516
|
+
name: "sort",
|
|
1517
|
+
resource: ResourceName49.SSH,
|
|
1518
|
+
spec: specOf49("sort"),
|
|
1519
|
+
fn: (accessor, paths, _texts, opts) => sortGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1520
|
+
});
|
|
1521
|
+
|
|
1522
|
+
// src/commands/builtin/ssh/split.ts
|
|
1523
|
+
import { ResourceName as ResourceName50, command as command50, specOf as specOf50, splitGeneric } from "@struktoai/mirage-core";
|
|
1524
|
+
var SSH_SPLIT = command50({
|
|
1525
|
+
name: "split",
|
|
1526
|
+
resource: ResourceName50.SSH,
|
|
1527
|
+
spec: specOf50("split"),
|
|
1528
|
+
fn: (accessor, paths, _texts, opts) => splitGeneric(
|
|
1529
|
+
paths,
|
|
1530
|
+
opts,
|
|
1531
|
+
(p) => stream(accessor, p),
|
|
1532
|
+
(p, d) => writeBytes(accessor, p, d)
|
|
1533
|
+
),
|
|
1534
|
+
write: true
|
|
1535
|
+
});
|
|
1536
|
+
|
|
1537
|
+
// src/commands/builtin/ssh/strings.ts
|
|
1538
|
+
import { ResourceName as ResourceName51, command as command51, specOf as specOf51, stringsGeneric } from "@struktoai/mirage-core";
|
|
1539
|
+
var SSH_STRINGS = command51({
|
|
1540
|
+
name: "strings",
|
|
1541
|
+
resource: ResourceName51.SSH,
|
|
1542
|
+
spec: specOf51("strings"),
|
|
1543
|
+
fn: (accessor, paths, _texts, opts) => stringsGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1544
|
+
});
|
|
1545
|
+
|
|
1546
|
+
// src/commands/builtin/ssh/tac.ts
|
|
1547
|
+
import { ResourceName as ResourceName52, command as command52, specOf as specOf52, tacGeneric } from "@struktoai/mirage-core";
|
|
1548
|
+
var SSH_TAC = command52({
|
|
1549
|
+
name: "tac",
|
|
1550
|
+
resource: ResourceName52.SSH,
|
|
1551
|
+
spec: specOf52("tac"),
|
|
1552
|
+
fn: (accessor, paths, _texts, opts) => tacGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1553
|
+
});
|
|
1554
|
+
|
|
1555
|
+
// src/commands/builtin/ssh/tar.ts
|
|
1556
|
+
import { ResourceName as ResourceName53, command as command53, specOf as specOf53, tarGeneric } from "@struktoai/mirage-core";
|
|
1557
|
+
var SSH_TAR = command53({
|
|
1558
|
+
name: "tar",
|
|
1559
|
+
resource: ResourceName53.SSH,
|
|
1560
|
+
spec: specOf53("tar"),
|
|
1561
|
+
fn: (accessor, paths, _texts, opts) => tarGeneric(
|
|
1562
|
+
paths,
|
|
1563
|
+
opts,
|
|
1564
|
+
(p) => stream(accessor, p),
|
|
1565
|
+
(p, data) => writeBytes(accessor, p, data),
|
|
1566
|
+
(p) => mkdir(accessor, p, false)
|
|
1567
|
+
),
|
|
1568
|
+
write: true
|
|
1569
|
+
});
|
|
1570
|
+
|
|
1571
|
+
// src/commands/builtin/ssh/tee.ts
|
|
1572
|
+
import { ResourceName as ResourceName54, command as command54, specOf as specOf54, teeGeneric } from "@struktoai/mirage-core";
|
|
1573
|
+
var SSH_TEE = command54({
|
|
1574
|
+
name: "tee",
|
|
1575
|
+
resource: ResourceName54.SSH,
|
|
1576
|
+
spec: specOf54("tee"),
|
|
1577
|
+
fn: (accessor, paths, texts, opts) => teeGeneric(
|
|
1578
|
+
paths,
|
|
1579
|
+
texts,
|
|
1580
|
+
opts,
|
|
1581
|
+
(p) => stream(accessor, p),
|
|
1582
|
+
(p, d) => writeBytes(accessor, p, d)
|
|
1583
|
+
),
|
|
1584
|
+
write: true
|
|
1585
|
+
});
|
|
1586
|
+
|
|
1587
|
+
// src/commands/builtin/ssh/tr.ts
|
|
1588
|
+
import { ResourceName as ResourceName55, command as command55, specOf as specOf55, trGeneric } from "@struktoai/mirage-core";
|
|
1589
|
+
var SSH_TR = command55({
|
|
1590
|
+
name: "tr",
|
|
1591
|
+
resource: ResourceName55.SSH,
|
|
1592
|
+
spec: specOf55("tr"),
|
|
1593
|
+
fn: (accessor, paths, texts, opts) => trGeneric(paths, texts, opts, (p) => stream(accessor, p))
|
|
1594
|
+
});
|
|
1595
|
+
|
|
1596
|
+
// src/commands/builtin/ssh/tsort.ts
|
|
1597
|
+
import { ResourceName as ResourceName56, command as command56, specOf as specOf56, tsortGeneric } from "@struktoai/mirage-core";
|
|
1598
|
+
var SSH_TSORT = command56({
|
|
1599
|
+
name: "tsort",
|
|
1600
|
+
resource: ResourceName56.SSH,
|
|
1601
|
+
spec: specOf56("tsort"),
|
|
1602
|
+
fn: (accessor, paths, _texts, opts) => tsortGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1603
|
+
});
|
|
1604
|
+
|
|
1605
|
+
// src/commands/builtin/ssh/unexpand.ts
|
|
1606
|
+
import { ResourceName as ResourceName57, command as command57, specOf as specOf57, unexpandGeneric } from "@struktoai/mirage-core";
|
|
1607
|
+
var SSH_UNEXPAND = command57({
|
|
1608
|
+
name: "unexpand",
|
|
1609
|
+
resource: ResourceName57.SSH,
|
|
1610
|
+
spec: specOf57("unexpand"),
|
|
1611
|
+
fn: (accessor, paths, _texts, opts) => unexpandGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1612
|
+
});
|
|
1613
|
+
|
|
1614
|
+
// src/commands/builtin/ssh/uniq.ts
|
|
1615
|
+
import { ResourceName as ResourceName58, command as command58, specOf as specOf58, uniqGeneric } from "@struktoai/mirage-core";
|
|
1616
|
+
var SSH_UNIQ = command58({
|
|
1617
|
+
name: "uniq",
|
|
1618
|
+
resource: ResourceName58.SSH,
|
|
1619
|
+
spec: specOf58("uniq"),
|
|
1620
|
+
fn: (accessor, paths, _texts, opts) => uniqGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1621
|
+
});
|
|
1622
|
+
|
|
1623
|
+
// src/commands/builtin/ssh/unzip.ts
|
|
1624
|
+
import { ResourceName as ResourceName59, command as command59, specOf as specOf59, unzipGeneric } from "@struktoai/mirage-core";
|
|
1625
|
+
var SSH_UNZIP = command59({
|
|
1626
|
+
name: "unzip",
|
|
1627
|
+
resource: ResourceName59.SSH,
|
|
1628
|
+
spec: specOf59("unzip"),
|
|
1629
|
+
fn: (accessor, paths, _texts, opts) => unzipGeneric(
|
|
1630
|
+
paths,
|
|
1631
|
+
opts,
|
|
1632
|
+
(p) => stream(accessor, p),
|
|
1633
|
+
(p, d) => writeBytes(accessor, p, d),
|
|
1634
|
+
(p, parents) => mkdir(accessor, p, parents ?? false)
|
|
1635
|
+
),
|
|
1636
|
+
write: true
|
|
1637
|
+
});
|
|
1638
|
+
|
|
1639
|
+
// src/commands/builtin/ssh/xxd.ts
|
|
1640
|
+
import { ResourceName as ResourceName60, command as command60, specOf as specOf60, xxdGeneric } from "@struktoai/mirage-core";
|
|
1641
|
+
var SSH_XXD = command60({
|
|
1642
|
+
name: "xxd",
|
|
1643
|
+
resource: ResourceName60.SSH,
|
|
1644
|
+
spec: specOf60("xxd"),
|
|
1645
|
+
fn: (accessor, paths, _texts, opts) => xxdGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1646
|
+
});
|
|
1647
|
+
|
|
1648
|
+
// src/commands/builtin/ssh/zcat.ts
|
|
1649
|
+
import { ResourceName as ResourceName61, command as command61, specOf as specOf61, zcatGeneric } from "@struktoai/mirage-core";
|
|
1650
|
+
var SSH_ZCAT = command61({
|
|
1651
|
+
name: "zcat",
|
|
1652
|
+
resource: ResourceName61.SSH,
|
|
1653
|
+
spec: specOf61("zcat"),
|
|
1654
|
+
fn: (accessor, paths, _texts, opts) => zcatGeneric(paths, opts, (p) => stream(accessor, p))
|
|
1655
|
+
});
|
|
1656
|
+
|
|
1657
|
+
// src/commands/builtin/ssh/zgrep.ts
|
|
1658
|
+
import { ResourceName as ResourceName62, command as command62, specOf as specOf62, zgrepGeneric } from "@struktoai/mirage-core";
|
|
1659
|
+
var SSH_ZGREP = command62({
|
|
1660
|
+
name: "zgrep",
|
|
1661
|
+
resource: ResourceName62.SSH,
|
|
1662
|
+
spec: specOf62("zgrep"),
|
|
1663
|
+
fn: (accessor, paths, texts, opts) => zgrepGeneric(paths, texts, opts, (p) => stream(accessor, p))
|
|
1664
|
+
});
|
|
1665
|
+
|
|
1666
|
+
// src/commands/builtin/ssh/zip_cmd.ts
|
|
1667
|
+
import { ResourceName as ResourceName63, command as command63, specOf as specOf63, zipGeneric } from "@struktoai/mirage-core";
|
|
1668
|
+
var SSH_ZIP = command63({
|
|
1669
|
+
name: "zip",
|
|
1670
|
+
resource: ResourceName63.SSH,
|
|
1671
|
+
spec: specOf63("zip"),
|
|
1672
|
+
fn: (accessor, paths, _texts, opts) => zipGeneric(
|
|
1673
|
+
paths,
|
|
1674
|
+
opts,
|
|
1675
|
+
(p) => stream(accessor, p),
|
|
1676
|
+
(p, d) => writeBytes(accessor, p, d)
|
|
1677
|
+
),
|
|
1678
|
+
write: true
|
|
1679
|
+
});
|
|
1680
|
+
|
|
1681
|
+
// src/commands/builtin/ssh/index.ts
|
|
1682
|
+
var SSH_COMMANDS = [
|
|
1683
|
+
...SSH_LS,
|
|
1684
|
+
...SSH_TREE,
|
|
1685
|
+
...SSH_CAT,
|
|
1686
|
+
...SSH_HEAD,
|
|
1687
|
+
...SSH_TAIL,
|
|
1688
|
+
...SSH_WC,
|
|
1689
|
+
...SSH_FIND,
|
|
1690
|
+
...SSH_GREP,
|
|
1691
|
+
...SSH_RG,
|
|
1692
|
+
...SSH_STAT,
|
|
1693
|
+
...SSH_JQ,
|
|
1694
|
+
...SSH_DU,
|
|
1695
|
+
...SSH_FILE,
|
|
1696
|
+
...SSH_BASENAME,
|
|
1697
|
+
...SSH_DIRNAME,
|
|
1698
|
+
...SSH_REALPATH,
|
|
1699
|
+
...SSH_CP,
|
|
1700
|
+
...SSH_MV,
|
|
1701
|
+
...SSH_RM,
|
|
1702
|
+
...SSH_MKDIR,
|
|
1703
|
+
...SSH_TOUCH,
|
|
1704
|
+
...SSH_AWK,
|
|
1705
|
+
...SSH_BASE64,
|
|
1706
|
+
...SSH_CMP,
|
|
1707
|
+
...SSH_COLUMN,
|
|
1708
|
+
...SSH_COMM,
|
|
1709
|
+
...SSH_CSPLIT,
|
|
1710
|
+
...SSH_CUT,
|
|
1711
|
+
...SSH_DIFF,
|
|
1712
|
+
...SSH_EXPAND,
|
|
1713
|
+
...SSH_FMT,
|
|
1714
|
+
...SSH_FOLD,
|
|
1715
|
+
...SSH_GUNZIP,
|
|
1716
|
+
...SSH_GZIP,
|
|
1717
|
+
...SSH_ICONV,
|
|
1718
|
+
...SSH_JOIN,
|
|
1719
|
+
...SSH_LN,
|
|
1720
|
+
...SSH_LOOK,
|
|
1721
|
+
...SSH_MD5,
|
|
1722
|
+
...SSH_MKTEMP,
|
|
1723
|
+
...SSH_NL,
|
|
1724
|
+
...SSH_PASTE,
|
|
1725
|
+
...SSH_PATCH,
|
|
1726
|
+
...SSH_READLINK,
|
|
1727
|
+
...SSH_REV,
|
|
1728
|
+
...SSH_SED,
|
|
1729
|
+
...SSH_SHA256SUM,
|
|
1730
|
+
...SSH_SHUF,
|
|
1731
|
+
...SSH_SORT,
|
|
1732
|
+
...SSH_SPLIT,
|
|
1733
|
+
...SSH_STRINGS,
|
|
1734
|
+
...SSH_TAC,
|
|
1735
|
+
...SSH_TAR,
|
|
1736
|
+
...SSH_TEE,
|
|
1737
|
+
...SSH_TR,
|
|
1738
|
+
...SSH_TSORT,
|
|
1739
|
+
...SSH_UNEXPAND,
|
|
1740
|
+
...SSH_UNIQ,
|
|
1741
|
+
...SSH_UNZIP,
|
|
1742
|
+
...SSH_XXD,
|
|
1743
|
+
...SSH_ZCAT,
|
|
1744
|
+
...SSH_ZGREP,
|
|
1745
|
+
...SSH_ZIP
|
|
1746
|
+
];
|
|
1747
|
+
|
|
1748
|
+
// src/core/ssh/append.ts
|
|
1749
|
+
async function appendBytes(accessor, p, data) {
|
|
1750
|
+
const sftp = await accessor.sftp();
|
|
1751
|
+
const virtual = stripPrefix(p);
|
|
1752
|
+
const remote = joinRoot(accessor.config.root ?? "/", virtual);
|
|
1753
|
+
await new Promise((resolveFn, rejectFn) => {
|
|
1754
|
+
sftp.appendFile(remote, Buffer.from(data), (err) => {
|
|
1755
|
+
if (err) rejectFn(err);
|
|
1756
|
+
else resolveFn();
|
|
1757
|
+
});
|
|
1758
|
+
});
|
|
1759
|
+
}
|
|
1760
|
+
|
|
1761
|
+
// src/core/ssh/create.ts
|
|
1762
|
+
function create(accessor, path) {
|
|
1763
|
+
return writeBytes(accessor, path, new Uint8Array());
|
|
1764
|
+
}
|
|
1765
|
+
|
|
1766
|
+
// src/core/ssh/truncate.ts
|
|
1767
|
+
async function truncate(accessor, p, length) {
|
|
1768
|
+
let data;
|
|
1769
|
+
try {
|
|
1770
|
+
data = await read(accessor, p);
|
|
1771
|
+
} catch (err) {
|
|
1772
|
+
if (err.code === "ENOENT") {
|
|
1773
|
+
data = new Uint8Array(0);
|
|
1774
|
+
} else {
|
|
1775
|
+
throw err;
|
|
1776
|
+
}
|
|
1777
|
+
}
|
|
1778
|
+
const out = new Uint8Array(length);
|
|
1779
|
+
out.set(data.subarray(0, Math.min(data.byteLength, length)));
|
|
1780
|
+
await writeBytes(accessor, p, out);
|
|
1781
|
+
}
|
|
1782
|
+
|
|
1783
|
+
// src/ops/ssh/append.ts
|
|
1784
|
+
import { ResourceName as ResourceName64 } from "@struktoai/mirage-core";
|
|
1785
|
+
var appendOp = {
|
|
1786
|
+
name: "append",
|
|
1787
|
+
resource: ResourceName64.SSH,
|
|
1788
|
+
filetype: null,
|
|
1789
|
+
write: true,
|
|
1790
|
+
fn: (accessor, path, args) => {
|
|
1791
|
+
const data = args[0];
|
|
1792
|
+
if (!(data instanceof Uint8Array)) {
|
|
1793
|
+
throw new TypeError("append op requires a Uint8Array as the first arg");
|
|
1794
|
+
}
|
|
1795
|
+
return appendBytes(accessor, path, data);
|
|
1796
|
+
}
|
|
1797
|
+
};
|
|
1798
|
+
|
|
1799
|
+
// src/ops/ssh/create.ts
|
|
1800
|
+
import { ResourceName as ResourceName65 } from "@struktoai/mirage-core";
|
|
1801
|
+
var createOp = {
|
|
1802
|
+
name: "create",
|
|
1803
|
+
resource: ResourceName65.SSH,
|
|
1804
|
+
filetype: null,
|
|
1805
|
+
write: true,
|
|
1806
|
+
fn: (accessor, path) => {
|
|
1807
|
+
return create(accessor, path);
|
|
1808
|
+
}
|
|
1809
|
+
};
|
|
1810
|
+
|
|
1811
|
+
// src/ops/ssh/mkdir.ts
|
|
1812
|
+
import { ResourceName as ResourceName66 } from "@struktoai/mirage-core";
|
|
1813
|
+
var mkdirOp = {
|
|
1814
|
+
name: "mkdir",
|
|
1815
|
+
resource: ResourceName66.SSH,
|
|
1816
|
+
filetype: null,
|
|
1817
|
+
write: true,
|
|
1818
|
+
fn: (accessor, path) => {
|
|
1819
|
+
return mkdir(accessor, path, true);
|
|
1820
|
+
}
|
|
1821
|
+
};
|
|
1822
|
+
|
|
1823
|
+
// src/ops/ssh/read.ts
|
|
1824
|
+
import { ResourceName as ResourceName67 } from "@struktoai/mirage-core";
|
|
1825
|
+
var readOp = {
|
|
1826
|
+
name: "read",
|
|
1827
|
+
resource: ResourceName67.SSH,
|
|
1828
|
+
filetype: null,
|
|
1829
|
+
write: false,
|
|
1830
|
+
fn: (accessor, path) => {
|
|
1831
|
+
return read(accessor, path);
|
|
1832
|
+
}
|
|
1833
|
+
};
|
|
1834
|
+
|
|
1835
|
+
// src/ops/ssh/readdir.ts
|
|
1836
|
+
import { ResourceName as ResourceName68 } from "@struktoai/mirage-core";
|
|
1837
|
+
var readdirOp = {
|
|
1838
|
+
name: "readdir",
|
|
1839
|
+
resource: ResourceName68.SSH,
|
|
1840
|
+
filetype: null,
|
|
1841
|
+
write: false,
|
|
1842
|
+
fn: (accessor, path) => {
|
|
1843
|
+
return readdir(accessor, path);
|
|
1844
|
+
}
|
|
1845
|
+
};
|
|
1846
|
+
|
|
1847
|
+
// src/ops/ssh/rename.ts
|
|
1848
|
+
import { ResourceName as ResourceName69 } from "@struktoai/mirage-core";
|
|
1849
|
+
var renameOp = {
|
|
1850
|
+
name: "rename",
|
|
1851
|
+
resource: ResourceName69.SSH,
|
|
1852
|
+
filetype: null,
|
|
1853
|
+
write: true,
|
|
1854
|
+
fn: (accessor, path, args) => {
|
|
1855
|
+
const dst = args[0];
|
|
1856
|
+
if (dst === void 0 || dst === null || typeof dst !== "object" || !("original" in dst)) {
|
|
1857
|
+
throw new TypeError("rename op requires a PathSpec destination as the first arg");
|
|
1858
|
+
}
|
|
1859
|
+
return rename(accessor, path, dst);
|
|
1860
|
+
}
|
|
1861
|
+
};
|
|
1862
|
+
|
|
1863
|
+
// src/ops/ssh/rmdir.ts
|
|
1864
|
+
import { ResourceName as ResourceName70 } from "@struktoai/mirage-core";
|
|
1865
|
+
var rmdirOp = {
|
|
1866
|
+
name: "rmdir",
|
|
1867
|
+
resource: ResourceName70.SSH,
|
|
1868
|
+
filetype: null,
|
|
1869
|
+
write: true,
|
|
1870
|
+
fn: (accessor, path) => {
|
|
1871
|
+
return rmdir(accessor, path);
|
|
1872
|
+
}
|
|
1873
|
+
};
|
|
1874
|
+
|
|
1875
|
+
// src/ops/ssh/stat.ts
|
|
1876
|
+
import { ResourceName as ResourceName71 } from "@struktoai/mirage-core";
|
|
1877
|
+
var statOp = {
|
|
1878
|
+
name: "stat",
|
|
1879
|
+
resource: ResourceName71.SSH,
|
|
1880
|
+
filetype: null,
|
|
1881
|
+
write: false,
|
|
1882
|
+
fn: (accessor, path) => {
|
|
1883
|
+
return stat(accessor, path);
|
|
1884
|
+
}
|
|
1885
|
+
};
|
|
1886
|
+
|
|
1887
|
+
// src/ops/ssh/truncate.ts
|
|
1888
|
+
import { ResourceName as ResourceName72 } from "@struktoai/mirage-core";
|
|
1889
|
+
var truncateOp = {
|
|
1890
|
+
name: "truncate",
|
|
1891
|
+
resource: ResourceName72.SSH,
|
|
1892
|
+
filetype: null,
|
|
1893
|
+
write: true,
|
|
1894
|
+
fn: (accessor, path, args) => {
|
|
1895
|
+
const length = args[0];
|
|
1896
|
+
if (typeof length !== "number") {
|
|
1897
|
+
throw new TypeError("truncate op requires a number length as the first arg");
|
|
1898
|
+
}
|
|
1899
|
+
return truncate(accessor, path, length);
|
|
1900
|
+
}
|
|
1901
|
+
};
|
|
1902
|
+
|
|
1903
|
+
// src/ops/ssh/unlink.ts
|
|
1904
|
+
import { ResourceName as ResourceName73 } from "@struktoai/mirage-core";
|
|
1905
|
+
var unlinkOp = {
|
|
1906
|
+
name: "unlink",
|
|
1907
|
+
resource: ResourceName73.SSH,
|
|
1908
|
+
filetype: null,
|
|
1909
|
+
write: true,
|
|
1910
|
+
fn: (accessor, path) => {
|
|
1911
|
+
return unlink(accessor, path);
|
|
1912
|
+
}
|
|
1913
|
+
};
|
|
1914
|
+
|
|
1915
|
+
// src/ops/ssh/write.ts
|
|
1916
|
+
import { extractWriteData } from "@struktoai/mirage-core";
|
|
1917
|
+
import { ResourceName as ResourceName74 } from "@struktoai/mirage-core";
|
|
1918
|
+
var writeOp = {
|
|
1919
|
+
name: "write",
|
|
1920
|
+
resource: ResourceName74.SSH,
|
|
1921
|
+
filetype: null,
|
|
1922
|
+
write: true,
|
|
1923
|
+
fn: (accessor, path, args) => {
|
|
1924
|
+
const data = extractWriteData(args);
|
|
1925
|
+
return writeBytes(accessor, path, data);
|
|
1926
|
+
}
|
|
1927
|
+
};
|
|
1928
|
+
|
|
1929
|
+
// src/ops/ssh/index.ts
|
|
1930
|
+
var SSH_OPS = [
|
|
1931
|
+
appendOp,
|
|
1932
|
+
createOp,
|
|
1933
|
+
mkdirOp,
|
|
1934
|
+
readOp,
|
|
1935
|
+
readdirOp,
|
|
1936
|
+
renameOp,
|
|
1937
|
+
rmdirOp,
|
|
1938
|
+
statOp,
|
|
1939
|
+
truncateOp,
|
|
1940
|
+
unlinkOp,
|
|
1941
|
+
writeOp
|
|
1942
|
+
];
|
|
1943
|
+
|
|
1944
|
+
// src/resource/ssh/prompt.ts
|
|
1945
|
+
var SSH_PROMPT = `{prefix}
|
|
1946
|
+
Remote filesystem via SSH/SFTP.
|
|
1947
|
+
IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.
|
|
1948
|
+
Supports: ls, cat, head, tail, grep, rg, wc, find, tree, stat, mkdir, touch, cp, mv, rm, tee.`;
|
|
1949
|
+
|
|
1950
|
+
// src/resource/ssh/ssh.ts
|
|
1951
|
+
var SSHResource = class extends BaseResource {
|
|
1952
|
+
kind = ResourceName75.SSH;
|
|
1953
|
+
isRemote = true;
|
|
1954
|
+
indexTtl = 60;
|
|
1955
|
+
prompt = SSH_PROMPT;
|
|
1956
|
+
config;
|
|
1957
|
+
accessor;
|
|
1958
|
+
opsMap = {
|
|
1959
|
+
read_bytes: read,
|
|
1960
|
+
write: writeBytes,
|
|
1961
|
+
readdir,
|
|
1962
|
+
stat,
|
|
1963
|
+
unlink,
|
|
1964
|
+
rmdir,
|
|
1965
|
+
copy,
|
|
1966
|
+
rename,
|
|
1967
|
+
mkdir,
|
|
1968
|
+
read_stream: stream,
|
|
1969
|
+
range_read: rangeRead,
|
|
1970
|
+
rm_recursive: rmR,
|
|
1971
|
+
du_total: du,
|
|
1972
|
+
du_all: duAll,
|
|
1973
|
+
create,
|
|
1974
|
+
truncate,
|
|
1975
|
+
exists,
|
|
1976
|
+
find_flat: find,
|
|
1977
|
+
append: appendBytes
|
|
1978
|
+
};
|
|
1979
|
+
constructor(config) {
|
|
1980
|
+
super();
|
|
1981
|
+
this.config = config;
|
|
1982
|
+
this.accessor = new SSHAccessor(config);
|
|
1983
|
+
}
|
|
1984
|
+
open() {
|
|
1985
|
+
return Promise.resolve();
|
|
1986
|
+
}
|
|
1987
|
+
close() {
|
|
1988
|
+
return this.accessor.close();
|
|
1989
|
+
}
|
|
1990
|
+
ops() {
|
|
1991
|
+
return SSH_OPS;
|
|
1992
|
+
}
|
|
1993
|
+
commands() {
|
|
1994
|
+
return SSH_COMMANDS;
|
|
1995
|
+
}
|
|
1996
|
+
streamPath(p) {
|
|
1997
|
+
return stream(this.accessor, p);
|
|
1998
|
+
}
|
|
1999
|
+
readFile(p) {
|
|
2000
|
+
return read(this.accessor, p);
|
|
2001
|
+
}
|
|
2002
|
+
writeFile(p, data) {
|
|
2003
|
+
return writeBytes(this.accessor, p, data);
|
|
2004
|
+
}
|
|
2005
|
+
appendFile(p, data) {
|
|
2006
|
+
return appendBytes(this.accessor, p, data);
|
|
2007
|
+
}
|
|
2008
|
+
readdir(p) {
|
|
2009
|
+
return readdir(this.accessor, p);
|
|
2010
|
+
}
|
|
2011
|
+
stat(p) {
|
|
2012
|
+
return stat(this.accessor, p);
|
|
2013
|
+
}
|
|
2014
|
+
exists(p) {
|
|
2015
|
+
return exists(this.accessor, p);
|
|
2016
|
+
}
|
|
2017
|
+
mkdir(p, options) {
|
|
2018
|
+
return mkdir(this.accessor, p, options?.recursive === true);
|
|
2019
|
+
}
|
|
2020
|
+
rmdir(p) {
|
|
2021
|
+
return rmdir(this.accessor, p);
|
|
2022
|
+
}
|
|
2023
|
+
unlink(p) {
|
|
2024
|
+
return unlink(this.accessor, p);
|
|
2025
|
+
}
|
|
2026
|
+
rename(src, dst) {
|
|
2027
|
+
return rename(this.accessor, src, dst);
|
|
2028
|
+
}
|
|
2029
|
+
truncate(p, length) {
|
|
2030
|
+
return truncate(this.accessor, p, length);
|
|
2031
|
+
}
|
|
2032
|
+
copy(src, dst) {
|
|
2033
|
+
return copy(this.accessor, src, dst);
|
|
2034
|
+
}
|
|
2035
|
+
rmR(p) {
|
|
2036
|
+
return rmR(this.accessor, p);
|
|
2037
|
+
}
|
|
2038
|
+
du(p) {
|
|
2039
|
+
return du(this.accessor, p);
|
|
2040
|
+
}
|
|
2041
|
+
find(p, options = {}) {
|
|
2042
|
+
return find(this.accessor, p, options);
|
|
2043
|
+
}
|
|
2044
|
+
async fingerprint(p) {
|
|
2045
|
+
try {
|
|
2046
|
+
const remote = await stat(this.accessor, p);
|
|
2047
|
+
const mtime = remote.modified ?? "";
|
|
2048
|
+
const size = String(remote.size ?? 0);
|
|
2049
|
+
return `${mtime}:${size}`;
|
|
2050
|
+
} catch (err) {
|
|
2051
|
+
if (err.code === "ENOENT") return null;
|
|
2052
|
+
throw err;
|
|
2053
|
+
}
|
|
2054
|
+
}
|
|
2055
|
+
glob(paths, prefix = "") {
|
|
2056
|
+
const effective = prefix ? paths.map(
|
|
2057
|
+
(p) => p.prefix ? p : new PathSpec2({
|
|
2058
|
+
original: p.original,
|
|
2059
|
+
directory: p.directory,
|
|
2060
|
+
...p.pattern !== null ? { pattern: p.pattern } : {},
|
|
2061
|
+
resolved: p.resolved,
|
|
2062
|
+
prefix
|
|
2063
|
+
})
|
|
2064
|
+
) : paths;
|
|
2065
|
+
return resolveGlob(this.accessor, effective);
|
|
2066
|
+
}
|
|
2067
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
2068
|
+
async getState() {
|
|
2069
|
+
return {
|
|
2070
|
+
type: this.kind,
|
|
2071
|
+
config: redactSshConfig(this.config)
|
|
2072
|
+
};
|
|
2073
|
+
}
|
|
2074
|
+
loadState(_state) {
|
|
2075
|
+
return Promise.resolve();
|
|
2076
|
+
}
|
|
2077
|
+
};
|
|
2078
|
+
|
|
2079
|
+
export {
|
|
2080
|
+
SSHAccessor,
|
|
2081
|
+
SSH_COMMANDS,
|
|
2082
|
+
SSH_OPS,
|
|
2083
|
+
SSH_PROMPT,
|
|
2084
|
+
SSHResource
|
|
2085
|
+
};
|
|
2086
|
+
//# sourceMappingURL=chunk-5HCVKTP3.js.map
|