@struktoai/mirage-node 0.0.3-alpha.0 → 0.0.4
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 +1 -1
- package/dist/aliyun-PGI57A43.js +10 -0
- package/dist/backblaze-TSPL6Y56.js +10 -0
- package/dist/box-7XTZYDSO.js +8 -0
- package/dist/cas.lua +15 -0
- package/dist/ceph-C265UI5T.js +10 -0
- package/dist/{chunk-IQVNVTOP.js → chunk-25W4XQJZ.js} +5 -5
- package/dist/{chunk-QGRDPSAH.js → chunk-2ERLWAGG.js} +4 -2
- package/dist/chunk-2ERLWAGG.js.map +1 -0
- package/dist/{chunk-NJMGCT63.js → chunk-2QNPKPZZ.js} +7 -2
- package/dist/chunk-2QNPKPZZ.js.map +1 -0
- package/dist/{chunk-ZNWVJ6UW.js → chunk-3ASOQTZB.js} +7 -2
- package/dist/chunk-3ASOQTZB.js.map +1 -0
- package/dist/{chunk-ERELJ7BS.js → chunk-3JZN3GYO.js} +14 -13
- package/dist/chunk-3JZN3GYO.js.map +1 -0
- package/dist/{chunk-DTAY7LPC.js → chunk-4GYB7DGC.js} +295 -706
- package/dist/chunk-4GYB7DGC.js.map +1 -0
- package/dist/{chunk-G5BZE7UA.js → chunk-4M73WHIE.js} +3 -3
- package/dist/{chunk-Q6CDMOM6.js → chunk-4X6CLF4F.js} +3 -3
- package/dist/{chunk-3IJSIVKT.js → chunk-5I7Q7RHW.js} +3 -3
- package/dist/{chunk-YPT4JBUY.js → chunk-5YRWF5RP.js} +18 -16
- package/dist/chunk-5YRWF5RP.js.map +1 -0
- package/dist/chunk-5ZHNPNDD.js +944 -0
- package/dist/chunk-5ZHNPNDD.js.map +1 -0
- package/dist/{chunk-VGLHY6BK.js → chunk-AULFV3KY.js} +1 -2
- package/dist/chunk-AULFV3KY.js.map +1 -0
- package/dist/{chunk-A4Z6DZ22.js → chunk-BWLUBJQG.js} +20 -16
- package/dist/chunk-BWLUBJQG.js.map +1 -0
- package/dist/{chunk-OYV2DN66.js → chunk-BWWU5T2D.js} +3 -3
- package/dist/chunk-C7TNKIK5.js +39 -0
- package/dist/chunk-C7TNKIK5.js.map +1 -0
- package/dist/{chunk-HEHERHQ5.js → chunk-CB76WPUS.js} +13 -14
- package/dist/chunk-CB76WPUS.js.map +1 -0
- package/dist/chunk-CGGO5NKD.js +1194 -0
- package/dist/chunk-CGGO5NKD.js.map +1 -0
- package/dist/{chunk-B2ZOKNN4.js → chunk-CQCTCW4S.js} +1 -2
- package/dist/chunk-CQCTCW4S.js.map +1 -0
- package/dist/{chunk-AJICZLHT.js → chunk-CXQGMFI7.js} +3 -3
- package/dist/{chunk-LW25LMIH.js → chunk-D3U7VQCG.js} +1 -2
- package/dist/{chunk-LW25LMIH.js.map → chunk-D3U7VQCG.js.map} +1 -1
- package/dist/{chunk-RQYEEA2O.js → chunk-DXU7NZPH.js} +3 -3
- package/dist/{chunk-XGJ2QERC.js → chunk-E3KXVEYI.js} +8 -4
- package/dist/chunk-E3KXVEYI.js.map +1 -0
- package/dist/{chunk-L6JPBJAS.js → chunk-EGZNOUMH.js} +3 -3
- package/dist/{chunk-DNBAMB5J.js → chunk-EVK6HH6Z.js} +1 -2
- package/dist/{chunk-DNBAMB5J.js.map → chunk-EVK6HH6Z.js.map} +1 -1
- package/dist/{chunk-BYTU2YC3.js → chunk-F5NWRF32.js} +3 -3
- package/dist/{chunk-RLGWMJD3.js → chunk-FRGTDZQT.js} +146 -11
- package/dist/chunk-FRGTDZQT.js.map +1 -0
- package/dist/{chunk-DYXEITK3.js → chunk-GF75O2EN.js} +4 -2
- package/dist/chunk-GF75O2EN.js.map +1 -0
- package/dist/{chunk-W7FLHT65.js → chunk-GTAS3QVC.js} +1 -2
- package/dist/{chunk-W7FLHT65.js.map → chunk-GTAS3QVC.js.map} +1 -1
- package/dist/{chunk-RQK5UPMP.js → chunk-H62XQZUM.js} +4 -3
- package/dist/chunk-H62XQZUM.js.map +1 -0
- package/dist/{chunk-UT2OPSN4.js → chunk-HCU3B6FW.js} +1 -2
- package/dist/chunk-HCU3B6FW.js.map +1 -0
- package/dist/chunk-HEDE2377.js +754 -0
- package/dist/chunk-HEDE2377.js.map +1 -0
- package/dist/{chunk-JZQHKDSY.js → chunk-HGIPWY5Y.js} +22 -11
- package/dist/chunk-HGIPWY5Y.js.map +1 -0
- package/dist/{chunk-Q2IAILVC.js → chunk-HSD24IP2.js} +8 -4
- package/dist/chunk-HSD24IP2.js.map +1 -0
- package/dist/{chunk-5YOCVEUB.js → chunk-HWQPEBID.js} +19 -15
- package/dist/chunk-HWQPEBID.js.map +1 -0
- package/dist/{chunk-SFUCUARB.js → chunk-IEHPTILN.js} +4 -4
- package/dist/chunk-IEHPTILN.js.map +1 -0
- package/dist/{chunk-C6NHEDHY.js → chunk-IEVLWEBO.js} +15 -14
- package/dist/chunk-IEVLWEBO.js.map +1 -0
- package/dist/{chunk-YUK3X3B4.js → chunk-IKJQOYI4.js} +1 -2
- package/dist/{chunk-YUK3X3B4.js.map → chunk-IKJQOYI4.js.map} +1 -1
- package/dist/{chunk-MHCMHKM6.js → chunk-IUXXZHY3.js} +17 -23
- package/dist/chunk-IUXXZHY3.js.map +1 -0
- package/dist/{chunk-ABTEGAFB.js → chunk-JBDFYIN2.js} +13 -14
- package/dist/chunk-JBDFYIN2.js.map +1 -0
- package/dist/{chunk-A7X4L4JM.js → chunk-JEBH5APX.js} +15 -15
- package/dist/chunk-JEBH5APX.js.map +1 -0
- package/dist/{chunk-H3BST2LI.js → chunk-JHI2PHHD.js} +1 -2
- package/dist/{chunk-H3BST2LI.js.map → chunk-JHI2PHHD.js.map} +1 -1
- package/dist/{chunk-EGB7V74Z.js → chunk-KAWDDS27.js} +1 -3
- package/dist/chunk-KAWDDS27.js.map +1 -0
- package/dist/{chunk-DP2PP5V2.js → chunk-KGC2OGXI.js} +5 -4
- package/dist/chunk-KGC2OGXI.js.map +1 -0
- package/dist/{chunk-FXFDBF3P.js → chunk-L4GMDSMB.js} +3 -3
- package/dist/{chunk-O7ODGJYL.js → chunk-L7FEZ7LU.js} +3 -3
- package/dist/{chunk-54NTYJEO.js → chunk-LPDLPRPS.js} +1 -3
- package/dist/{chunk-54NTYJEO.js.map → chunk-LPDLPRPS.js.map} +1 -1
- package/dist/{chunk-UGK4TAVK.js → chunk-LPLZLSMK.js} +1 -2
- package/dist/chunk-LPLZLSMK.js.map +1 -0
- package/dist/{chunk-5DLOHQJ2.js → chunk-M6E7VK4D.js} +14 -14
- package/dist/chunk-M6E7VK4D.js.map +1 -0
- package/dist/{chunk-2CC5VW7K.js → chunk-MIQ3ECZM.js} +4 -2
- package/dist/chunk-MIQ3ECZM.js.map +1 -0
- package/dist/chunk-MRXTUFBZ.js +30 -0
- package/dist/chunk-MRXTUFBZ.js.map +1 -0
- package/dist/{chunk-RO5IQEDQ.js → chunk-NJ42VNXG.js} +1 -2
- package/dist/chunk-NJ42VNXG.js.map +1 -0
- package/dist/{chunk-3T3RMDNX.js → chunk-NLXJMXVE.js} +3 -3
- package/dist/{chunk-E2ISWXLB.js → chunk-OQKNDS66.js} +1 -1
- package/dist/{chunk-E2ISWXLB.js.map → chunk-OQKNDS66.js.map} +1 -1
- package/dist/chunk-OSVZKYXS.js +946 -0
- package/dist/chunk-OSVZKYXS.js.map +1 -0
- package/dist/{chunk-LYDMMNL2.js → chunk-RHUEV4I7.js} +12 -13
- package/dist/chunk-RHUEV4I7.js.map +1 -0
- package/dist/{chunk-JALIYI6M.js → chunk-S4KVLPBR.js} +7 -2
- package/dist/chunk-S4KVLPBR.js.map +1 -0
- package/dist/{chunk-XRU5WXZX.js → chunk-SAOQW6ZJ.js} +15 -15
- package/dist/chunk-SAOQW6ZJ.js.map +1 -0
- package/dist/{chunk-CASCUFK2.js → chunk-SI4GMRXD.js} +14 -15
- package/dist/chunk-SI4GMRXD.js.map +1 -0
- package/dist/{chunk-HQ4KWN76.js → chunk-SYMNWNC3.js} +3 -3
- package/dist/{chunk-PJBQKMCD.js → chunk-TUNR4VUM.js} +3 -3
- package/dist/{chunk-XHCBHYN4.js → chunk-UAJYJP5C.js} +7 -2
- package/dist/chunk-UAJYJP5C.js.map +1 -0
- package/dist/{chunk-OPYQ5KIO.js → chunk-UYA3XL3J.js} +4 -2
- package/dist/chunk-UYA3XL3J.js.map +1 -0
- package/dist/{chunk-WL7HS7EM.js → chunk-V7JVMG63.js} +3 -3
- package/dist/{chunk-LAJJPLEV.js → chunk-VBYIDRNU.js} +7 -3
- package/dist/chunk-VBYIDRNU.js.map +1 -0
- package/dist/{chunk-NHS7WLEQ.js → chunk-VHED2STW.js} +11 -8
- package/dist/chunk-VHED2STW.js.map +1 -0
- package/dist/{chunk-JZT4QGIP.js → chunk-VIICUPWQ.js} +1 -2
- package/dist/{chunk-JZT4QGIP.js.map → chunk-VIICUPWQ.js.map} +1 -1
- package/dist/{chunk-TRTUHCS4.js → chunk-VLRSOWHP.js} +17 -15
- package/dist/chunk-VLRSOWHP.js.map +1 -0
- package/dist/chunk-W5ZLIQFR.js +764 -0
- package/dist/chunk-W5ZLIQFR.js.map +1 -0
- package/dist/{chunk-YGZMVNN5.js → chunk-WTSSEUOZ.js} +7 -2
- package/dist/chunk-WTSSEUOZ.js.map +1 -0
- package/dist/{chunk-OHROA3FQ.js → chunk-WWP2STF5.js} +7 -2
- package/dist/chunk-WWP2STF5.js.map +1 -0
- package/dist/{chunk-C6NHFMIP.js → chunk-XADEMW6B.js} +3 -3
- package/dist/{chunk-KTNDT45N.js → chunk-XEMLYWHK.js} +3 -3
- package/dist/{chunk-OZAEWZZ3.js → chunk-XFSEADPC.js} +6 -2
- package/dist/chunk-XFSEADPC.js.map +1 -0
- package/dist/{chunk-TWGVQLG2.js → chunk-XUUSWR4U.js} +1 -2
- package/dist/{chunk-TWGVQLG2.js.map → chunk-XUUSWR4U.js.map} +1 -1
- package/dist/{chunk-XLQI4IT2.js → chunk-YBVMZ7SR.js} +7 -2
- package/dist/chunk-YBVMZ7SR.js.map +1 -0
- package/dist/{chunk-E7RW3SBV.js → chunk-YRJICL2Q.js} +15 -15
- package/dist/chunk-YRJICL2Q.js.map +1 -0
- package/dist/{chunk-B6SXRCBO.js → chunk-ZM44MGC5.js} +3 -3
- package/dist/{chunk-YAVGCQUP.js → chunk-ZMREYTHA.js} +16 -15
- package/dist/chunk-ZMREYTHA.js.map +1 -0
- package/dist/{chunk-H3I2KZIY.js → chunk-ZPB3SLPK.js} +1 -2
- package/dist/{chunk-H3I2KZIY.js.map → chunk-ZPB3SLPK.js.map} +1 -1
- package/dist/chunk-ZPZQXHW2.js +1230 -0
- package/dist/chunk-ZPZQXHW2.js.map +1 -0
- package/dist/{config-34LHOGLM.js → config-2LASFFRD.js} +2 -4
- package/dist/config-3WDIJPTG.js +9 -0
- package/dist/config-4QV4QYI5.js +9 -0
- package/dist/{config-ZFJYQZCH.js → config-54USUVSE.js} +2 -4
- package/dist/config-5ZXN2T2H.js +9 -0
- package/dist/config-A2GQYJDB.js +9 -0
- package/dist/config-BBOLI7VE.js +9 -0
- package/dist/{config-VM526IKB.js → config-BIBFLUIR.js} +2 -4
- package/dist/{config-EO23EY62.js → config-CPYFOUQO.js} +2 -4
- package/dist/{config-3IVQJBNW.js → config-DWSJL3NH.js} +2 -4
- package/dist/config-E22XAGYN.js +9 -0
- package/dist/config-EHE52ZTK.js +9 -0
- package/dist/{config-GE4W4ZJC.js → config-EX3ZJTZI.js} +2 -4
- package/dist/{config-QNMKWJ4M.js → config-FRK7ZL37.js} +2 -4
- package/dist/{config-LHFFXVYI.js → config-HQXNFQZS.js} +2 -4
- package/dist/config-HTXOOAOD.js +9 -0
- package/dist/{config-HKRMKD76.js → config-IPNWAJHH.js} +2 -4
- package/dist/config-J2C53GOT.js +9 -0
- package/dist/config-K63RX6EU.js +9 -0
- package/dist/config-L7SBSH5L.js +9 -0
- package/dist/config-LEALEMKA.js +9 -0
- package/dist/{config-IVY5EQQ2.js → config-M3Z47VYU.js} +2 -4
- package/dist/{config-EIHSP5DZ.js → config-MZM3IPFM.js} +2 -4
- package/dist/{config-GHRUKEQ6.js → config-OJ2BPESH.js} +2 -4
- package/dist/{config-WDAZFXYD.js → config-QO2XUME4.js} +2 -4
- package/dist/config-QWQGOXQ5.js +9 -0
- package/dist/config-RI7IEZUF.js +9 -0
- package/dist/{config-CVZ2AGCO.js → config-SPW6NESU.js} +2 -6
- package/dist/{config-QAA646XB.js → config-T2IUIU5C.js} +2 -4
- package/dist/{config-NV5WXP64.js → config-UU27ALAA.js} +2 -4
- package/dist/config-VKKZGC7V.js +9 -0
- package/dist/config-W7EVPJNK.js +11 -0
- package/dist/config-WKQ3FGTZ.js +9 -0
- package/dist/config-WVILHDFV.js +11 -0
- package/dist/{config-Q45Y46YT.js → config-XU6D5C7E.js} +2 -4
- package/dist/databricks_volume-ETRDJVVQ.js +7 -0
- package/dist/digitalocean-QP72DR4J.js +10 -0
- package/dist/discord-BSN5RB3E.js +8 -0
- package/dist/disk-24NWTN2I.js +7 -0
- package/dist/dropbox-OSTZXSIE.js +8 -0
- package/dist/email-4ZFPSWIN.js +8 -0
- package/dist/gcs-PFWR6MIW.js +10 -0
- package/dist/gdocs-GPAZRQG5.js +8 -0
- package/dist/gdrive-XSX6A7B3.js +8 -0
- package/dist/github-EQ4NXUTA.js +8 -0
- package/dist/github_ci-QL5B2Q2N.js +8 -0
- package/dist/gmail-2TBT4CVH.js +8 -0
- package/dist/gridfs-KZRZ6SIB.js +9 -0
- package/dist/gsheets-N53WEXN2.js +8 -0
- package/dist/gslides-TATSARTH.js +8 -0
- package/dist/hf_buckets-BK7NGJWS.js +10 -0
- package/dist/hf_datasets-UQ5QGM4L.js +10 -0
- package/dist/hf_models-75LFCQCS.js +10 -0
- package/dist/hf_spaces-6T2KB3UC.js +10 -0
- package/dist/index.d.ts +599 -79
- package/dist/index.js +1515 -422
- package/dist/index.js.map +1 -1
- package/dist/langfuse-AMQCQWNE.js +8 -0
- package/dist/linear-V3TXO6CV.js +8 -0
- package/dist/minio-IZRZY4C5.js +10 -0
- package/dist/mongodb-VMKPQCPX.js +7 -0
- package/dist/nextcloud-5RHQCGDO.js +9 -0
- package/dist/notion-6PPNTQFM.js +8 -0
- package/dist/oci-CKYBSFZJ.js +10 -0
- package/dist/postgres-WIQBVL5M.js +7 -0
- package/dist/qingstor-AP4IIPLY.js +10 -0
- package/dist/r2-C4XGEWQY.js +10 -0
- package/dist/redis-6D55Q2WB.js +8 -0
- package/dist/s3-XQBI2CXN.js +8 -0
- package/dist/scaleway-SEZJVURB.js +10 -0
- package/dist/seaweedfs-3XYIAFU2.js +10 -0
- package/dist/slack-ZHXDJQY4.js +8 -0
- package/dist/ssh-X2MO7JOV.js +8 -0
- package/dist/supabase-BBM44UTM.js +10 -0
- package/dist/supabase-BBM44UTM.js.map +1 -0
- package/dist/tencent-X72USLJ7.js +10 -0
- package/dist/tencent-X72USLJ7.js.map +1 -0
- package/dist/trello-EER5NG7L.js +8 -0
- package/dist/trello-EER5NG7L.js.map +1 -0
- package/dist/wasabi-O4MVIUFG.js +10 -0
- package/dist/wasabi-O4MVIUFG.js.map +1 -0
- package/package.json +9 -5
- package/dist/aliyun-TMZRUYCG.js +0 -10
- package/dist/backblaze-OHW57DLK.js +0 -10
- package/dist/box-UXTCAFOZ.js +0 -8
- package/dist/ceph-TNN4I2FT.js +0 -10
- package/dist/chunk-2CC5VW7K.js.map +0 -1
- package/dist/chunk-5DLOHQJ2.js.map +0 -1
- package/dist/chunk-5HCVKTP3.js +0 -2086
- package/dist/chunk-5HCVKTP3.js.map +0 -1
- package/dist/chunk-5YOCVEUB.js.map +0 -1
- package/dist/chunk-A4Z6DZ22.js.map +0 -1
- package/dist/chunk-A7X4L4JM.js.map +0 -1
- package/dist/chunk-ABTEGAFB.js.map +0 -1
- package/dist/chunk-B2ZOKNN4.js.map +0 -1
- package/dist/chunk-C6NHEDHY.js.map +0 -1
- package/dist/chunk-CASCUFK2.js.map +0 -1
- package/dist/chunk-DP2PP5V2.js.map +0 -1
- package/dist/chunk-DTAY7LPC.js.map +0 -1
- package/dist/chunk-DYXEITK3.js.map +0 -1
- package/dist/chunk-E7RW3SBV.js.map +0 -1
- package/dist/chunk-EGB7V74Z.js.map +0 -1
- package/dist/chunk-ERELJ7BS.js.map +0 -1
- package/dist/chunk-HEHERHQ5.js.map +0 -1
- package/dist/chunk-JALIYI6M.js.map +0 -1
- package/dist/chunk-JZQHKDSY.js.map +0 -1
- package/dist/chunk-LAJJPLEV.js.map +0 -1
- package/dist/chunk-LYDMMNL2.js.map +0 -1
- package/dist/chunk-MHCMHKM6.js.map +0 -1
- package/dist/chunk-N72CAZEH.js +0 -1990
- package/dist/chunk-N72CAZEH.js.map +0 -1
- package/dist/chunk-NHS7WLEQ.js.map +0 -1
- package/dist/chunk-NJMGCT63.js.map +0 -1
- package/dist/chunk-OHROA3FQ.js.map +0 -1
- package/dist/chunk-OPYQ5KIO.js.map +0 -1
- package/dist/chunk-OZAEWZZ3.js.map +0 -1
- package/dist/chunk-PBBG7VFT.js +0 -1896
- package/dist/chunk-PBBG7VFT.js.map +0 -1
- package/dist/chunk-Q2IAILVC.js.map +0 -1
- package/dist/chunk-QGRDPSAH.js.map +0 -1
- package/dist/chunk-RLGWMJD3.js.map +0 -1
- package/dist/chunk-RO5IQEDQ.js.map +0 -1
- package/dist/chunk-RQK5UPMP.js.map +0 -1
- package/dist/chunk-SFUCUARB.js.map +0 -1
- package/dist/chunk-TRTUHCS4.js.map +0 -1
- package/dist/chunk-U6QSXTUS.js +0 -7
- package/dist/chunk-U6QSXTUS.js.map +0 -1
- package/dist/chunk-UGK4TAVK.js.map +0 -1
- package/dist/chunk-UT2OPSN4.js.map +0 -1
- package/dist/chunk-VGLHY6BK.js.map +0 -1
- package/dist/chunk-WSGEIVY3.js +0 -1766
- package/dist/chunk-WSGEIVY3.js.map +0 -1
- package/dist/chunk-XGJ2QERC.js.map +0 -1
- package/dist/chunk-XHCBHYN4.js.map +0 -1
- package/dist/chunk-XLQI4IT2.js.map +0 -1
- package/dist/chunk-XRU5WXZX.js.map +0 -1
- package/dist/chunk-YAVGCQUP.js.map +0 -1
- package/dist/chunk-YGZMVNN5.js.map +0 -1
- package/dist/chunk-YPT4JBUY.js.map +0 -1
- package/dist/chunk-ZNWVJ6UW.js.map +0 -1
- package/dist/config-3BBWD5AB.js +0 -11
- package/dist/config-4UDVSUQJ.js +0 -11
- package/dist/config-CMDBAPDH.js +0 -11
- package/dist/config-D3RLSPNF.js +0 -11
- package/dist/config-DG65OEG3.js +0 -11
- package/dist/config-GCQK6NJY.js +0 -11
- package/dist/config-GVH27UPE.js +0 -11
- package/dist/config-HXVYIXP5.js +0 -11
- package/dist/config-IDZMEW73.js +0 -11
- package/dist/config-IJJXGLBQ.js +0 -11
- package/dist/config-KJOLGVB2.js +0 -11
- package/dist/config-KMVCVBYN.js +0 -15
- package/dist/config-KYTRXAB2.js +0 -15
- package/dist/config-OT2TQQCN.js +0 -11
- package/dist/config-QWCY3LBQ.js +0 -11
- package/dist/config-ZV6G2ZEC.js +0 -11
- package/dist/databricks_volume-HNQ4DJVJ.js +0 -7
- package/dist/digitalocean-6SPR4S7V.js +0 -10
- package/dist/discord-SAV2RBJV.js +0 -8
- package/dist/disk-POACMF4G.js +0 -8
- package/dist/dropbox-CQ7MTYX2.js +0 -8
- package/dist/email-KBQ7CXS7.js +0 -8
- package/dist/gcs-SMIE4VMT.js +0 -10
- package/dist/gdocs-X5Y2SIQX.js +0 -8
- package/dist/gdrive-SIQPRIGI.js +0 -8
- package/dist/github-KBHWANKQ.js +0 -8
- package/dist/github_ci-HPITNK37.js +0 -8
- package/dist/gmail-DKHAGJNX.js +0 -8
- package/dist/gsheets-ZSUDIWGK.js +0 -8
- package/dist/gslides-GYXM7IMJ.js +0 -8
- package/dist/hf_buckets-RIOMV7WG.js +0 -10
- package/dist/hf_datasets-QF4BQ3OK.js +0 -10
- package/dist/hf_models-62GC2HPZ.js +0 -10
- package/dist/hf_spaces-NVSMUNRM.js +0 -10
- package/dist/langfuse-HUAYVPHF.js +0 -8
- package/dist/linear-2MM55KBC.js +0 -8
- package/dist/minio-L3XE6PQS.js +0 -10
- package/dist/mongodb-ZOX4FRHJ.js +0 -7
- package/dist/notion-UK4GTMT4.js +0 -8
- package/dist/oci-NURLWPL2.js +0 -10
- package/dist/postgres-JNFMPAO2.js +0 -7
- package/dist/qingstor-W55D5YFO.js +0 -10
- package/dist/r2-FSZK7IFI.js +0 -10
- package/dist/redis-S6GIPA4Z.js +0 -8
- package/dist/s3-GMPUJ65D.js +0 -8
- package/dist/scaleway-5VM55Y6D.js +0 -10
- package/dist/seaweedfs-J3EPUEPE.js +0 -10
- package/dist/slack-FVBXY7KD.js +0 -8
- package/dist/ssh-GCXETJ3Z.js +0 -9
- package/dist/supabase-HLWNHBBE.js +0 -10
- package/dist/tencent-YDO73XBD.js +0 -10
- package/dist/trello-CQ53BQUL.js +0 -8
- package/dist/wasabi-SOZKPMRQ.js +0 -10
- /package/dist/{aliyun-TMZRUYCG.js.map → aliyun-PGI57A43.js.map} +0 -0
- /package/dist/{backblaze-OHW57DLK.js.map → backblaze-TSPL6Y56.js.map} +0 -0
- /package/dist/{box-UXTCAFOZ.js.map → box-7XTZYDSO.js.map} +0 -0
- /package/dist/{ceph-TNN4I2FT.js.map → ceph-C265UI5T.js.map} +0 -0
- /package/dist/{chunk-IQVNVTOP.js.map → chunk-25W4XQJZ.js.map} +0 -0
- /package/dist/{chunk-G5BZE7UA.js.map → chunk-4M73WHIE.js.map} +0 -0
- /package/dist/{chunk-Q6CDMOM6.js.map → chunk-4X6CLF4F.js.map} +0 -0
- /package/dist/{chunk-3IJSIVKT.js.map → chunk-5I7Q7RHW.js.map} +0 -0
- /package/dist/{chunk-OYV2DN66.js.map → chunk-BWWU5T2D.js.map} +0 -0
- /package/dist/{chunk-AJICZLHT.js.map → chunk-CXQGMFI7.js.map} +0 -0
- /package/dist/{chunk-RQYEEA2O.js.map → chunk-DXU7NZPH.js.map} +0 -0
- /package/dist/{chunk-L6JPBJAS.js.map → chunk-EGZNOUMH.js.map} +0 -0
- /package/dist/{chunk-BYTU2YC3.js.map → chunk-F5NWRF32.js.map} +0 -0
- /package/dist/{chunk-FXFDBF3P.js.map → chunk-L4GMDSMB.js.map} +0 -0
- /package/dist/{chunk-O7ODGJYL.js.map → chunk-L7FEZ7LU.js.map} +0 -0
- /package/dist/{chunk-3T3RMDNX.js.map → chunk-NLXJMXVE.js.map} +0 -0
- /package/dist/{chunk-HQ4KWN76.js.map → chunk-SYMNWNC3.js.map} +0 -0
- /package/dist/{chunk-PJBQKMCD.js.map → chunk-TUNR4VUM.js.map} +0 -0
- /package/dist/{chunk-WL7HS7EM.js.map → chunk-V7JVMG63.js.map} +0 -0
- /package/dist/{chunk-C6NHFMIP.js.map → chunk-XADEMW6B.js.map} +0 -0
- /package/dist/{chunk-KTNDT45N.js.map → chunk-XEMLYWHK.js.map} +0 -0
- /package/dist/{chunk-B6SXRCBO.js.map → chunk-ZM44MGC5.js.map} +0 -0
- /package/dist/{config-34LHOGLM.js.map → config-2LASFFRD.js.map} +0 -0
- /package/dist/{config-3BBWD5AB.js.map → config-3WDIJPTG.js.map} +0 -0
- /package/dist/{config-3IVQJBNW.js.map → config-4QV4QYI5.js.map} +0 -0
- /package/dist/{config-4UDVSUQJ.js.map → config-54USUVSE.js.map} +0 -0
- /package/dist/{config-CMDBAPDH.js.map → config-5ZXN2T2H.js.map} +0 -0
- /package/dist/{config-CVZ2AGCO.js.map → config-A2GQYJDB.js.map} +0 -0
- /package/dist/{config-D3RLSPNF.js.map → config-BBOLI7VE.js.map} +0 -0
- /package/dist/{config-DG65OEG3.js.map → config-BIBFLUIR.js.map} +0 -0
- /package/dist/{config-EIHSP5DZ.js.map → config-CPYFOUQO.js.map} +0 -0
- /package/dist/{config-EO23EY62.js.map → config-DWSJL3NH.js.map} +0 -0
- /package/dist/{config-GCQK6NJY.js.map → config-E22XAGYN.js.map} +0 -0
- /package/dist/{config-GE4W4ZJC.js.map → config-EHE52ZTK.js.map} +0 -0
- /package/dist/{config-GHRUKEQ6.js.map → config-EX3ZJTZI.js.map} +0 -0
- /package/dist/{config-GVH27UPE.js.map → config-FRK7ZL37.js.map} +0 -0
- /package/dist/{config-HKRMKD76.js.map → config-HQXNFQZS.js.map} +0 -0
- /package/dist/{config-HXVYIXP5.js.map → config-HTXOOAOD.js.map} +0 -0
- /package/dist/{config-IDZMEW73.js.map → config-IPNWAJHH.js.map} +0 -0
- /package/dist/{config-IJJXGLBQ.js.map → config-J2C53GOT.js.map} +0 -0
- /package/dist/{config-IVY5EQQ2.js.map → config-K63RX6EU.js.map} +0 -0
- /package/dist/{config-KJOLGVB2.js.map → config-L7SBSH5L.js.map} +0 -0
- /package/dist/{config-KMVCVBYN.js.map → config-LEALEMKA.js.map} +0 -0
- /package/dist/{config-KYTRXAB2.js.map → config-M3Z47VYU.js.map} +0 -0
- /package/dist/{config-LHFFXVYI.js.map → config-MZM3IPFM.js.map} +0 -0
- /package/dist/{config-NV5WXP64.js.map → config-OJ2BPESH.js.map} +0 -0
- /package/dist/{config-OT2TQQCN.js.map → config-QO2XUME4.js.map} +0 -0
- /package/dist/{config-Q45Y46YT.js.map → config-QWQGOXQ5.js.map} +0 -0
- /package/dist/{config-QAA646XB.js.map → config-RI7IEZUF.js.map} +0 -0
- /package/dist/{config-QNMKWJ4M.js.map → config-SPW6NESU.js.map} +0 -0
- /package/dist/{config-QWCY3LBQ.js.map → config-T2IUIU5C.js.map} +0 -0
- /package/dist/{config-VM526IKB.js.map → config-UU27ALAA.js.map} +0 -0
- /package/dist/{config-WDAZFXYD.js.map → config-VKKZGC7V.js.map} +0 -0
- /package/dist/{config-ZFJYQZCH.js.map → config-W7EVPJNK.js.map} +0 -0
- /package/dist/{config-ZV6G2ZEC.js.map → config-WKQ3FGTZ.js.map} +0 -0
- /package/dist/{databricks_volume-HNQ4DJVJ.js.map → config-WVILHDFV.js.map} +0 -0
- /package/dist/{digitalocean-6SPR4S7V.js.map → config-XU6D5C7E.js.map} +0 -0
- /package/dist/{discord-SAV2RBJV.js.map → databricks_volume-ETRDJVVQ.js.map} +0 -0
- /package/dist/{disk-POACMF4G.js.map → digitalocean-QP72DR4J.js.map} +0 -0
- /package/dist/{dropbox-CQ7MTYX2.js.map → discord-BSN5RB3E.js.map} +0 -0
- /package/dist/{email-KBQ7CXS7.js.map → disk-24NWTN2I.js.map} +0 -0
- /package/dist/{gcs-SMIE4VMT.js.map → dropbox-OSTZXSIE.js.map} +0 -0
- /package/dist/{gdocs-X5Y2SIQX.js.map → email-4ZFPSWIN.js.map} +0 -0
- /package/dist/{gdrive-SIQPRIGI.js.map → gcs-PFWR6MIW.js.map} +0 -0
- /package/dist/{github-KBHWANKQ.js.map → gdocs-GPAZRQG5.js.map} +0 -0
- /package/dist/{github_ci-HPITNK37.js.map → gdrive-XSX6A7B3.js.map} +0 -0
- /package/dist/{gmail-DKHAGJNX.js.map → github-EQ4NXUTA.js.map} +0 -0
- /package/dist/{gsheets-ZSUDIWGK.js.map → github_ci-QL5B2Q2N.js.map} +0 -0
- /package/dist/{gslides-GYXM7IMJ.js.map → gmail-2TBT4CVH.js.map} +0 -0
- /package/dist/{hf_buckets-RIOMV7WG.js.map → gridfs-KZRZ6SIB.js.map} +0 -0
- /package/dist/{hf_datasets-QF4BQ3OK.js.map → gsheets-N53WEXN2.js.map} +0 -0
- /package/dist/{hf_models-62GC2HPZ.js.map → gslides-TATSARTH.js.map} +0 -0
- /package/dist/{hf_spaces-NVSMUNRM.js.map → hf_buckets-BK7NGJWS.js.map} +0 -0
- /package/dist/{langfuse-HUAYVPHF.js.map → hf_datasets-UQ5QGM4L.js.map} +0 -0
- /package/dist/{linear-2MM55KBC.js.map → hf_models-75LFCQCS.js.map} +0 -0
- /package/dist/{minio-L3XE6PQS.js.map → hf_spaces-6T2KB3UC.js.map} +0 -0
- /package/dist/{mongodb-ZOX4FRHJ.js.map → langfuse-AMQCQWNE.js.map} +0 -0
- /package/dist/{notion-UK4GTMT4.js.map → linear-V3TXO6CV.js.map} +0 -0
- /package/dist/{oci-NURLWPL2.js.map → minio-IZRZY4C5.js.map} +0 -0
- /package/dist/{postgres-JNFMPAO2.js.map → mongodb-VMKPQCPX.js.map} +0 -0
- /package/dist/{qingstor-W55D5YFO.js.map → nextcloud-5RHQCGDO.js.map} +0 -0
- /package/dist/{r2-FSZK7IFI.js.map → notion-6PPNTQFM.js.map} +0 -0
- /package/dist/{redis-S6GIPA4Z.js.map → oci-CKYBSFZJ.js.map} +0 -0
- /package/dist/{s3-GMPUJ65D.js.map → postgres-WIQBVL5M.js.map} +0 -0
- /package/dist/{scaleway-5VM55Y6D.js.map → qingstor-AP4IIPLY.js.map} +0 -0
- /package/dist/{seaweedfs-J3EPUEPE.js.map → r2-C4XGEWQY.js.map} +0 -0
- /package/dist/{slack-FVBXY7KD.js.map → redis-6D55Q2WB.js.map} +0 -0
- /package/dist/{ssh-GCXETJ3Z.js.map → s3-XQBI2CXN.js.map} +0 -0
- /package/dist/{supabase-HLWNHBBE.js.map → scaleway-SEZJVURB.js.map} +0 -0
- /package/dist/{tencent-YDO73XBD.js.map → seaweedfs-3XYIAFU2.js.map} +0 -0
- /package/dist/{trello-CQ53BQUL.js.map → slack-ZHXDJQY4.js.map} +0 -0
- /package/dist/{wasabi-SOZKPMRQ.js.map → ssh-X2MO7JOV.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/gridfs/gridfs.ts","../src/accessor/gridfs.ts","../src/commands/builtin/gridfs/index.ts","../src/core/gridfs/read.ts","../src/core/gridfs/_client.ts","../src/core/gridfs/stat.ts","../src/commands/builtin/gridfs/du.ts","../src/core/gridfs/du.ts","../src/core/gridfs/constants.ts","../src/core/gridfs/copy.ts","../src/core/gridfs/create.ts","../src/core/gridfs/write.ts","../src/core/gridfs/exists.ts","../src/core/gridfs/find.ts","../src/core/gridfs/mkdir.ts","../src/core/gridfs/readdir.ts","../src/core/gridfs/rename.ts","../src/core/gridfs/rm.ts","../src/core/gridfs/rmdir.ts","../src/core/gridfs/stream.ts","../src/core/gridfs/truncate.ts","../src/core/gridfs/unlink.ts","../src/commands/builtin/gridfs/io.ts","../src/commands/builtin/gridfs/mkdir.ts","../src/commands/builtin/gridfs/rm.ts","../src/commands/builtin/gridfs/stat.ts","../src/commands/builtin/gridfs/tee.ts","../src/commands/builtin/gridfs/touch.ts","../src/ops/gridfs/index.ts","../src/resource/gridfs/prompt.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n BaseResource,\n PathSpec,\n ResourceName,\n makeResolveGlob,\n mountKey,\n mountPrefixOf,\n normalizeKeyPrefix,\n type FileStat,\n type FindOptions,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n} from '@struktoai/mirage-core'\nimport { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { GRIDFS_COMMANDS } from '../../commands/builtin/gridfs/index.ts'\nimport { SCOPE_ERROR } from '../../core/gridfs/constants.ts'\nimport { copy as copyCore } from '../../core/gridfs/copy.ts'\nimport { create as createCore } from '../../core/gridfs/create.ts'\nimport { du as duCore, duAll as duAllCore } from '../../core/gridfs/du.ts'\nimport { exists as existsCore } from '../../core/gridfs/exists.ts'\nimport { find as findCore } from '../../core/gridfs/find.ts'\nimport { mkdir as mkdirCore } from '../../core/gridfs/mkdir.ts'\nimport { read as readCore } from '../../core/gridfs/read.ts'\nimport { readdir as readdirCore } from '../../core/gridfs/readdir.ts'\nimport { rename as renameCore } from '../../core/gridfs/rename.ts'\nimport { rmR as rmRCore } from '../../core/gridfs/rm.ts'\nimport { rmdir as rmdirCore } from '../../core/gridfs/rmdir.ts'\nimport { stat as statCore } from '../../core/gridfs/stat.ts'\nimport { rangeRead as rangeReadCore, stream as streamCore } from '../../core/gridfs/stream.ts'\nimport { truncate as truncateCore } from '../../core/gridfs/truncate.ts'\nimport { unlink as unlinkCore } from '../../core/gridfs/unlink.ts'\nimport { write as writeCore } from '../../core/gridfs/write.ts'\nimport { GRIDFS_OPS } from '../../ops/gridfs/index.ts'\nimport { redactConfig, type GridFSConfig, type GridFSConfigRedacted } from './config.ts'\nimport { GRIDFS_PROMPT } from './prompt.ts'\n\nconst globCore = makeResolveGlob(readdirCore, SCOPE_ERROR)\n\nexport interface GridFSResourceState {\n type: string\n config: GridFSConfigRedacted\n}\n\nexport class GridFSResource extends BaseResource implements Resource {\n readonly kind: string = ResourceName.GRIDFS\n readonly cachesReads: boolean = true\n readonly supportsSnapshot: boolean = true\n override readonly indexTtl: number = 600\n readonly prompt: string = GRIDFS_PROMPT\n readonly config: GridFSConfig\n readonly accessor: GridFSAccessor\n readonly opsMap: Record<string, unknown> = {\n read_bytes: readCore,\n write: writeCore,\n readdir: readdirCore,\n stat: statCore,\n unlink: unlinkCore,\n rmdir: rmdirCore,\n copy: copyCore,\n rename: renameCore,\n mkdir: mkdirCore,\n read_stream: streamCore,\n range_read: rangeReadCore,\n rm_recursive: rmRCore,\n du_total: duCore,\n du_all: duAllCore,\n create: createCore,\n truncate: truncateCore,\n exists: existsCore,\n find_flat: findCore,\n }\n\n constructor(config: GridFSConfig) {\n super()\n const normalized = normalizeKeyPrefix(config.keyPrefix)\n const cfg: GridFSConfig = { ...config }\n if (normalized !== undefined) {\n cfg.keyPrefix = normalized\n } else {\n delete cfg.keyPrefix\n }\n this.config = cfg\n this.accessor = new GridFSAccessor(this.config)\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n async close(): Promise<void> {\n await this.accessor.close()\n }\n\n commands(): readonly RegisteredCommand[] {\n return GRIDFS_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GRIDFS_OPS\n }\n\n streamPath(p: PathSpec): AsyncIterable<Uint8Array> {\n return streamCore(this.accessor, p)\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return readCore(this.accessor, p)\n }\n\n writeFile(p: PathSpec, data: Uint8Array): Promise<void> {\n return writeCore(this.accessor, p, data)\n }\n\n async appendFile(p: PathSpec, data: Uint8Array): Promise<void> {\n let existing: Uint8Array\n try {\n existing = await readCore(this.accessor, p)\n } catch (err) {\n if ((err as { code?: string } | null)?.code === 'ENOENT') {\n existing = new Uint8Array()\n } else {\n throw err\n }\n }\n const merged = new Uint8Array(existing.byteLength + data.byteLength)\n merged.set(existing, 0)\n merged.set(data, existing.byteLength)\n await writeCore(this.accessor, p, merged)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return readdirCore(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return statCore(this.accessor, p)\n }\n\n exists(p: PathSpec): Promise<boolean> {\n return existsCore(this.accessor, p)\n }\n\n mkdir(p: PathSpec): Promise<void> {\n return mkdirCore(this.accessor, p)\n }\n\n rmdir(p: PathSpec): Promise<void> {\n return rmdirCore(this.accessor, p)\n }\n\n unlink(p: PathSpec): Promise<void> {\n return unlinkCore(this.accessor, p)\n }\n\n rename(src: PathSpec, dst: PathSpec): Promise<void> {\n return renameCore(this.accessor, src, dst)\n }\n\n truncate(p: PathSpec, length: number): Promise<void> {\n return truncateCore(this.accessor, p, length)\n }\n\n copy(src: PathSpec, dst: PathSpec): Promise<void> {\n return copyCore(this.accessor, src, dst)\n }\n\n rmR(p: PathSpec): Promise<void> {\n return rmRCore(this.accessor, p)\n }\n\n du(p: PathSpec): Promise<number> {\n return duCore(this.accessor, p)\n }\n\n find(p: PathSpec, options: FindOptions = {}): Promise<string[]> {\n return findCore(this.accessor, p, options)\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective = prefix\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath)\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, prefix),\n }),\n )\n : paths\n return globCore(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GridFSResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactConfig(this.config),\n })\n }\n\n loadState(_state: GridFSResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { Db, MongoClient } from 'mongodb'\nimport { Accessor } from '@struktoai/mirage-core'\nimport { loadOptionalPeer } from '../optional_peer.ts'\nimport type { GridFSConfig } from '../resource/gridfs/config.ts'\n\ninterface MongoModule {\n MongoClient: new (uri: string) => MongoClient\n}\n\nexport class GridFSAccessor extends Accessor {\n readonly config: GridFSConfig\n private clientPromise: Promise<MongoClient> | null = null\n\n constructor(config: GridFSConfig) {\n super()\n this.config = config\n }\n\n async client(): Promise<MongoClient> {\n this.clientPromise ??= this._connect()\n return this.clientPromise\n }\n\n async db(): Promise<Db> {\n const client = await this.client()\n return client.db(this.config.database)\n }\n\n private async _connect(): Promise<MongoClient> {\n const mod = await loadOptionalPeer(() => import('mongodb') as unknown as Promise<MongoModule>, {\n feature: 'GridFSResource',\n packageName: 'mongodb',\n })\n const client = new mod.MongoClient(this.config.uri)\n await client.connect()\n return client\n }\n\n async close(): Promise<void> {\n if (this.clientPromise === null) return\n const client = await this.clientPromise\n this.clientPromise = null\n await client.close()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n ResourceName,\n makeFiletypeCommands,\n makeGenericCommands,\n type RegisteredCommand,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { read as gridfsRead } from '../../../core/gridfs/read.ts'\nimport { stat as gridfsStat } from '../../../core/gridfs/stat.ts'\nimport { GRIDFS_DU } from './du.ts'\nimport { GRIDFS_IO } from './io.ts'\nimport { GRIDFS_MKDIR } from './mkdir.ts'\nimport { GRIDFS_RM } from './rm.ts'\nimport { GRIDFS_STAT } from './stat.ts'\nimport { GRIDFS_TEE } from './tee.ts'\nimport { GRIDFS_TOUCH } from './touch.ts'\n\n// gridfs-specific behaviours kept as overrides: no real directories\n// (mkdir -p, rm not-empty), write-tracking (touch/tee), du_multi\n// aggregation, and the index-threaded, missing-operand stat.\nconst GRIDFS_OVERRIDES = new Set(['stat', 'du', 'rm', 'mkdir', 'tee', 'touch'])\n\nexport const GRIDFS_COMMANDS: readonly RegisteredCommand[] = [\n ...makeFiletypeCommands<GridFSAccessor>({\n resource: ResourceName.GRIDFS,\n readBytes: gridfsRead,\n statEntry: gridfsStat,\n }),\n ...makeGenericCommands<GridFSAccessor>(ResourceName.GRIDFS, GRIDFS_IO, {\n overrides: GRIDFS_OVERRIDES,\n }),\n ...GRIDFS_STAT,\n ...GRIDFS_DU,\n ...GRIDFS_RM,\n ...GRIDFS_MKDIR,\n ...GRIDFS_TEE,\n ...GRIDFS_TOUCH,\n]\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { ObjectId } from 'mongodb'\nimport {\n ResourceName,\n enoent,\n record,\n revisionFor,\n type IndexCacheStore,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { bucket, gridfsKey, latestFile, loadGridFSModule, rawPathOf } from './_client.ts'\n\nexport interface GridFSReadOptions {\n offset?: number\n size?: number\n}\n\nexport async function resolveFileId(\n accessor: GridFSAccessor,\n path: PathSpec,\n key: string,\n): Promise<ObjectId> {\n const pinnedRevision = revisionFor(path.virtual)\n if (pinnedRevision !== null) {\n const mod = await loadGridFSModule()\n const objectIdCtor = (mod as unknown as { ObjectId: new (id: string) => ObjectId }).ObjectId\n return new objectIdCtor(pinnedRevision)\n }\n const doc = await latestFile(accessor, key)\n if (doc === null) throw enoent(path)\n return doc._id\n}\n\nexport async function downloadBytes(\n accessor: GridFSAccessor,\n path: PathSpec,\n fileId: ObjectId,\n options: GridFSReadOptions = {},\n): Promise<Uint8Array> {\n const b = await bucket(accessor)\n const streamOptions: { start?: number; end?: number } = {}\n if (options.offset !== undefined && options.offset !== 0) {\n streamOptions.start = options.offset\n }\n if (options.size !== undefined) {\n streamOptions.end = (options.offset ?? 0) + options.size\n }\n const readable = b.openDownloadStream(\n fileId,\n Object.keys(streamOptions).length > 0 ? streamOptions : undefined,\n )\n const chunks: Uint8Array[] = []\n let total = 0\n try {\n for await (const chunk of readable as AsyncIterable<Uint8Array>) {\n chunks.push(chunk)\n total += chunk.byteLength\n }\n } catch (err) {\n if ((err as { code?: string } | null)?.code === 'ENOENT' || isNoFileError(err)) {\n throw enoent(path)\n }\n throw err\n }\n const out = new Uint8Array(total)\n let offset = 0\n for (const c of chunks) {\n out.set(c, offset)\n offset += c.byteLength\n }\n return out\n}\n\nexport function isNoFileError(err: unknown): boolean {\n if (err === null || typeof err !== 'object') return false\n const message = (err as { message?: string }).message ?? ''\n return message.includes('FileNotFound')\n}\n\nexport async function read(\n accessor: GridFSAccessor,\n path: PathSpec,\n _index?: IndexCacheStore,\n options: GridFSReadOptions = {},\n): Promise<Uint8Array> {\n const virtual = path.virtual\n const raw = rawPathOf(path)\n const key = gridfsKey(raw, accessor.config)\n const startMs = performance.now()\n const fileId = await resolveFileId(accessor, path, key)\n const bytes = await downloadBytes(accessor, path, fileId, options)\n const revision = fileId.toString()\n record('read', virtual, ResourceName.GRIDFS, bytes.byteLength, startMs, {\n fingerprint: revision,\n revision,\n })\n return bytes\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { Collection, Db, Document, GridFSBucket, ObjectId } from 'mongodb'\nimport { keyPrefix as kp, mountPrefixOf, type PathSpec } from '@struktoai/mirage-core'\nimport { loadOptionalPeer } from '../../optional_peer.ts'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport type { GridFSConfig } from '../../resource/gridfs/config.ts'\n\nexport interface GridFSFileDoc {\n _id: ObjectId\n filename: string\n length: number\n uploadDate: Date\n}\n\ninterface GridFSModule {\n GridFSBucket: new (\n db: Db,\n options?: { bucketName?: string; chunkSizeBytes?: number },\n ) => GridFSBucket\n ObjectId: new (id?: string) => ObjectId\n}\n\n// Newest revision of a filename wins; _id breaks uploadDate ties because\n// ObjectIds are monotonic within a process.\nconst LATEST_SORT: Record<string, -1> = { uploadDate: -1, _id: -1 }\n\nconst BATCH = 1000\n\nlet cachedModule: Promise<GridFSModule> | null = null\n\nexport async function loadGridFSModule(): Promise<GridFSModule> {\n cachedModule ??= loadOptionalPeer(() => import('mongodb') as unknown as Promise<GridFSModule>, {\n feature: 'GridFSResource',\n packageName: 'mongodb',\n })\n return cachedModule\n}\n\nexport function gridfsKey(path: string, config: GridFSConfig): string {\n return kp.apply(config.keyPrefix ?? '', path)\n}\n\nexport function gridfsPrefix(path: string, config: GridFSConfig): string {\n return kp.applyDir(config.keyPrefix ?? '', path)\n}\n\nexport function stripKeyPrefix(key: string, config: GridFSConfig): string {\n return kp.strip(config.keyPrefix ?? '', key)\n}\n\nexport function rawPathOf(path: PathSpec): string {\n const prefix = mountPrefixOf(path.virtual, path.resourcePath)\n return prefix !== '' && path.virtual.startsWith(prefix)\n ? path.virtual.slice(prefix.length) || '/'\n : path.virtual\n}\n\nfunction bucketName(config: GridFSConfig): string {\n return config.bucket ?? 'fs'\n}\n\nexport async function filesColl(accessor: GridFSAccessor): Promise<Collection> {\n const db = await accessor.db()\n return db.collection(`${bucketName(accessor.config)}.files`)\n}\n\nasync function chunksColl(accessor: GridFSAccessor): Promise<Collection> {\n const db = await accessor.db()\n return db.collection(`${bucketName(accessor.config)}.chunks`)\n}\n\nexport async function bucket(accessor: GridFSAccessor): Promise<GridFSBucket> {\n const mod = await loadGridFSModule()\n const db = await accessor.db()\n const options: { bucketName: string; chunkSizeBytes?: number } = {\n bucketName: bucketName(accessor.config),\n }\n if (accessor.config.chunkSizeBytes !== undefined) {\n options.chunkSizeBytes = accessor.config.chunkSizeBytes\n }\n return new mod.GridFSBucket(db, options)\n}\n\nexport function escapeRegex(raw: string): string {\n let out = ''\n for (const ch of raw) {\n out += '\\\\^$.|?*+()[]{}'.includes(ch) ? `\\\\${ch}` : ch\n }\n return out\n}\n\nexport function prefixQuery(pfx: string): Record<string, unknown> {\n if (pfx === '') return {}\n return { filename: { $regex: `^${escapeRegex(pfx)}` } }\n}\n\nexport async function latestFile(\n accessor: GridFSAccessor,\n key: string,\n): Promise<GridFSFileDoc | null> {\n const files = await filesColl(accessor)\n const doc = await files.findOne({ filename: key }, { sort: LATEST_SORT })\n return doc as GridFSFileDoc | null\n}\n\n/**\n * Yield the newest revision of each filename matching a query, sorted by\n * filename. Mirrors Python's `iter_latest`.\n */\nexport async function* iterLatest(\n accessor: GridFSAccessor,\n query: Record<string, unknown>,\n): AsyncIterable<GridFSFileDoc> {\n const files = await filesColl(accessor)\n const pipeline: Document[] = [\n { $match: query },\n { $sort: { filename: 1, uploadDate: -1, _id: -1 } },\n {\n $group: {\n _id: '$filename',\n fid: { $first: '$_id' },\n length: { $first: '$length' },\n uploadDate: { $first: '$uploadDate' },\n },\n },\n { $sort: { _id: 1 } },\n ]\n for await (const doc of files.aggregate(pipeline)) {\n yield {\n filename: doc._id as string,\n _id: doc.fid as ObjectId,\n length: doc.length as number,\n uploadDate: doc.uploadDate as Date,\n }\n }\n}\n\n/** Delete every revision (file doc + chunks) matching a query. */\nexport async function deleteAll(\n accessor: GridFSAccessor,\n query: Record<string, unknown>,\n): Promise<void> {\n const files = await filesColl(accessor)\n const chunks = await chunksColl(accessor)\n const ids: ObjectId[] = []\n for await (const doc of files.find(query, { projection: { _id: 1 } })) {\n ids.push(doc._id)\n }\n for (let i = 0; i < ids.length; i += BATCH) {\n const batch = ids.slice(i, i + BATCH)\n await chunks.deleteMany({ files_id: { $in: batch } })\n await files.deleteMany({ _id: { $in: batch } })\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FileStat,\n FileType,\n enoent,\n gnuBasename,\n guessType,\n mountPrefixOf,\n rstripSlash,\n stripSlash,\n type IndexCacheStore,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { escapeRegex, filesColl, gridfsKey, latestFile } from './_client.ts'\n\nexport async function stat(\n accessor: GridFSAccessor,\n path: PathSpec,\n index?: IndexCacheStore,\n): Promise<FileStat> {\n const original = path.virtual\n const prefix = mountPrefixOf(path.virtual, path.resourcePath)\n const rawPath =\n prefix !== '' && original.startsWith(prefix) ? original.slice(prefix.length) || '/' : original\n const stripped = stripSlash(rawPath)\n if (stripped === '') {\n return new FileStat({ name: '/', type: FileType.DIRECTORY })\n }\n\n // A trailing slash (\"/gridfs/csv/\") signals the caller treats it as a\n // directory. GridFS allows both a file named \"csv\" AND deeper files\n // under \"csv/\" to coexist — without this hint we'd return the file and\n // `ls /gridfs/csv/` would list the file itself instead of the prefix.\n const hintsDirectory = rawPath.endsWith('/')\n\n // Fast path: check the index cache populated by readdir().\n if (index !== undefined) {\n const virtualKey = prefix !== '' ? `${prefix}/${stripped}` : '/' + stripped\n const lookup = await index.get(virtualKey)\n if (lookup.entry !== undefined && lookup.entry !== null) {\n const entry = lookup.entry\n if (entry.resourceType === 'folder') {\n return new FileStat({ name: entry.name, type: FileType.DIRECTORY })\n }\n return new FileStat({\n name: entry.name,\n size: entry.size ?? null,\n modified: entry.remoteTime !== '' ? entry.remoteTime : null,\n type: guessType(entry.name),\n })\n }\n // Parent was already listed and didn't include this path — it doesn't\n // exist. Avoids speculative lookups for shell-probed paths like .git.\n const parent = virtualKey.replace(/\\/[^/]*$/, '') || '/'\n const parentListing = await index.listDir(parent)\n if (parentListing.entries !== undefined && parentListing.entries !== null) {\n throw enoent(path)\n }\n }\n\n const { config } = accessor\n const key = gridfsKey(rawPath, config)\n // File lookup first — skipped when the path hints a directory so a\n // coexisting file of the same name does not shadow the prefix.\n if (!hintsDirectory) {\n const doc = await latestFile(accessor, key)\n if (doc !== null) {\n const revision = doc._id.toString()\n return new FileStat({\n name: gnuBasename(rawPath),\n size: doc.length,\n modified: doc.uploadDate.toISOString(),\n fingerprint: revision,\n revision,\n type: guessType(rawPath),\n extra: { file_id: revision },\n })\n }\n }\n\n // No file (or it was skipped) — check whether the path is a valid\n // prefix (directory): a \"key/\" marker or any deeper filename proves it.\n const pfx = rstripSlash(key) + '/'\n const files = await filesColl(accessor)\n const probe = await files.findOne(\n { filename: { $regex: `^${escapeRegex(pfx)}` } },\n { projection: { _id: 1 } },\n )\n if (probe !== null) {\n return new FileStat({ name: gnuBasename(rawPath) || '/', type: FileType.DIRECTORY })\n }\n\n throw enoent(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n ResourceName,\n command,\n duGeneric,\n metadataProvision,\n resolveGlobOf,\n specOf,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { du as gridfsDu, duAll as gridfsDuAll } from '../../../core/gridfs/du.ts'\nimport { GRIDFS_IO } from './io.ts'\n\nconst resolveGlob = resolveGlobOf(GRIDFS_IO)\n\nasync function duCommand(\n accessor: GridFSAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const resolved =\n paths.length > 0 ? await resolveGlob(accessor, paths, opts.index ?? undefined) : []\n return duGeneric(\n resolved,\n opts,\n (p) => gridfsDu(accessor, p),\n (p) => gridfsDuAll(accessor, p),\n )\n}\n\nexport const GRIDFS_DU = command({\n name: 'du',\n resource: ResourceName.GRIDFS,\n spec: specOf('du'),\n fn: duCommand,\n provision: metadataProvision,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { rstripSlash, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { escapeRegex, gridfsKey, iterLatest, rawPathOf, stripKeyPrefix } from './_client.ts'\n\nfunction duQuery(stem: string): Record<string, unknown> {\n if (stem === '') return {}\n return {\n $or: [{ filename: stem }, { filename: { $regex: `^${escapeRegex(stem + '/')}` } }],\n }\n}\n\nexport async function du(accessor: GridFSAccessor, path: PathSpec): Promise<number> {\n const raw = rawPathOf(path)\n const stem = rstripSlash(gridfsKey(raw, accessor.config))\n let total = 0\n for await (const doc of iterLatest(accessor, duQuery(stem))) {\n total += doc.length\n }\n return total\n}\n\n/**\n * Return `[path, size]` pairs for every file under the prefix plus the\n * total — mirrors Python's `du_all` used by `du -a`.\n */\nexport async function duAll(\n accessor: GridFSAccessor,\n path: PathSpec,\n): Promise<[[string, number][], number]> {\n const raw = rawPathOf(path)\n const stem = rstripSlash(gridfsKey(raw, accessor.config))\n const entries: [string, number][] = []\n let total = 0\n for await (const doc of iterLatest(accessor, duQuery(stem))) {\n const entry = '/' + stripKeyPrefix(doc.filename, accessor.config)\n entries.push([entry, doc.length])\n total += doc.length\n }\n return [entries, total]\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nexport const SCOPE_ERROR = 5000\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { enoent, invalidateAfterWrite, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { bucket, gridfsKey, latestFile, rawPathOf } from './_client.ts'\n\nexport async function copy(accessor: GridFSAccessor, src: PathSpec, dst: PathSpec): Promise<void> {\n // Copies the latest revision only (mirrors S3 CopyObject), streamed\n // chunk-by-chunk so large files never buffer fully in memory.\n const srcKey = gridfsKey(rawPathOf(src), accessor.config)\n const dstKey = gridfsKey(rawPathOf(dst), accessor.config)\n const doc = await latestFile(accessor, srcKey)\n if (doc === null) throw enoent(src)\n const b = await bucket(accessor)\n const readable = b.openDownloadStream(doc._id)\n const upload = b.openUploadStream(dstKey)\n await new Promise<void>((resolve, reject) => {\n upload.on('error', reject)\n readable.on('error', reject)\n upload.on('finish', () => {\n resolve()\n })\n readable.pipe(upload)\n })\n await invalidateAfterWrite(dst)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { invalidateAfterWrite, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { gridfsKey, rawPathOf } from './_client.ts'\nimport { uploadBytes } from './write.ts'\n\nexport async function create(accessor: GridFSAccessor, path: PathSpec): Promise<void> {\n const raw = rawPathOf(path)\n await uploadBytes(accessor, gridfsKey(raw, accessor.config), new Uint8Array(0))\n await invalidateAfterWrite(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { ResourceName, invalidateAfterWrite, record, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { bucket, gridfsKey, rawPathOf } from './_client.ts'\n\nexport async function uploadBytes(\n accessor: GridFSAccessor,\n key: string,\n data: Uint8Array,\n): Promise<void> {\n const b = await bucket(accessor)\n const upload = b.openUploadStream(key)\n await new Promise<void>((resolve, reject) => {\n upload.on('error', reject)\n upload.on('finish', () => {\n resolve()\n })\n upload.end(data)\n })\n}\n\nexport async function write(\n accessor: GridFSAccessor,\n path: PathSpec,\n data: Uint8Array,\n): Promise<void> {\n // Uploads a new revision; older revisions stay in fs.files, so reads\n // pinned to an old revision _id keep working (GridFS-native versioning).\n const raw = rawPathOf(path)\n const key = gridfsKey(raw, accessor.config)\n const startMs = performance.now()\n await uploadBytes(accessor, key, data)\n record('write', path.virtual, ResourceName.GRIDFS, data.byteLength, startMs)\n await invalidateAfterWrite(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { stat } from './stat.ts'\n\nexport async function exists(accessor: GridFSAccessor, path: PathSpec): Promise<boolean> {\n try {\n await stat(accessor, path)\n return true\n } catch (err) {\n if ((err as { code?: string } | null)?.code === 'ENOENT') return false\n throw err\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n buildTree,\n emitStartPath,\n keep,\n rstripSlash,\n startBasename,\n type FindOptions,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport {\n escapeRegex,\n filesColl,\n gridfsPrefix,\n iterLatest,\n prefixQuery,\n rawPathOf,\n stripKeyPrefix,\n} from './_client.ts'\n\n/**\n * Translate a find -name glob into a regex fragment matching one path\n * segment. Returns null for character classes we do not translate (the\n * caller falls back to the unpushed prefix query; client-side keep()\n * still applies the exact semantics).\n */\nexport function globRegex(pattern: string): string | null {\n if (pattern.includes('[') || pattern.includes(']')) return null\n let out = ''\n for (const ch of pattern) {\n if (ch === '*') out += '[^/]*'\n else if (ch === '?') out += '[^/]'\n else out += escapeRegex(ch)\n }\n return out\n}\n\n/**\n * Build the fs.files query, pushing -name/-iname/-type/-size server-side\n * when the translation is exact. Every condition is a superset of the GNU\n * semantics (directory markers always pass the size condition, unpushable\n * globs fall back to the prefix scan), so the client-side keep() pass\n * stays authoritative.\n */\nexport function buildQuery(\n pfx: string,\n options: FindOptions,\n pushdown: boolean,\n): Record<string, unknown> {\n const conds: Record<string, unknown>[] = []\n const base = prefixQuery(pfx)\n if (Object.keys(base).length > 0) conds.push(base)\n if (pushdown) {\n const escaped = escapeRegex(pfx)\n const globs: [string | null | undefined, string][] = [\n [options.name, ''],\n [options.iname, 'i'],\n ]\n for (const [pat, flags] of globs) {\n if (pat === undefined || pat === null) continue\n const rx = globRegex(pat)\n if (rx === null) continue\n const regex: Record<string, unknown> = { $regex: `^${escaped}(.*/)?${rx}/?$` }\n if (flags !== '') regex.$options = flags\n conds.push({ filename: regex })\n }\n if (options.type === 'f') {\n conds.push({ filename: { $not: { $regex: '/$' } } })\n } else if (options.type === 'd') {\n conds.push({ filename: { $regex: '/$' } })\n }\n if (options.minSize != null || options.maxSize != null) {\n const sizeCond: Record<string, number> = {}\n if (options.minSize != null) sizeCond.$gte = options.minSize\n if (options.maxSize != null) sizeCond.$lte = options.maxSize\n // Directory markers ride through; the client-side dirs-count-as-0\n // rule decides their fate.\n conds.push({ $or: [{ length: sizeCond }, { filename: { $regex: '/$' } }] })\n }\n }\n if (conds.length === 0) return {}\n if (conds.length === 1) return conds[0] ?? {}\n return { $and: conds }\n}\n\nexport async function find(\n accessor: GridFSAccessor,\n path: PathSpec,\n options: FindOptions = {},\n): Promise<string[]> {\n const raw = rawPathOf(path)\n const startName = startBasename(path.virtual)\n const pfx = gridfsPrefix(raw, accessor.config)\n const results: string[] = []\n const seen = { descendant: false, marker: false }\n const empty = options.empty === true\n const pushdown =\n options.tree === undefined &&\n options.nameExclude === undefined &&\n options.orNames === undefined &&\n options.pathPattern === undefined &&\n !empty\n const tree =\n options.tree ??\n buildTree({\n name: options.name,\n iname: options.iname,\n pathPattern: options.pathPattern,\n type: options.type,\n nameExclude: options.nameExclude,\n orNames: options.orNames,\n empty: options.empty,\n })\n const query = buildQuery(pfx, options, pushdown)\n const narrowed = JSON.stringify(query) !== JSON.stringify(prefixQuery(pfx))\n for await (const doc of iterLatest(accessor, query)) {\n const key = doc.filename\n if (key === pfx) {\n seen.marker = true\n continue\n }\n seen.descendant = true\n const relative = key.slice(pfx.length)\n const depth = (relative.match(/\\//g) ?? []).length + 1\n if (options.maxDepth !== null && options.maxDepth !== undefined && depth > options.maxDepth) {\n continue\n }\n const isDir = key.endsWith('/')\n const normKey = isDir ? key.slice(0, -1) : key\n const entryName = normKey.split('/').pop() ?? ''\n const fullPath = rstripSlash('/' + stripKeyPrefix(key, accessor.config)) || '/'\n const size = doc.length\n const isEmpty = !empty ? null : isDir ? false : size === 0\n if (\n !keep(\n { key: fullPath, name: entryName, kind: isDir ? 'd' : 'f', depth, isEmpty },\n tree,\n options.minDepth,\n )\n ) {\n continue\n }\n if (options.minSize != null || options.maxSize != null) {\n // Directories count as size 0 for -size (deliberate GNU divergence).\n const effective = isDir ? 0 : size\n if (options.minSize != null && effective < options.minSize) continue\n if (options.maxSize != null && effective > options.maxSize) continue\n }\n results.push(fullPath)\n }\n if (narrowed && !seen.descendant && !seen.marker) {\n // The narrowed query may have excluded every doc under a prefix that\n // does exist; probe so the start path still emits.\n const files = await filesColl(accessor)\n const probe = await files.findOne(\n pfx === '' ? {} : { filename: { $regex: `^${escapeRegex(pfx)}` } },\n { projection: { _id: 1 } },\n )\n seen.descendant = probe !== null\n }\n const rootKey = rstripSlash('/' + stripKeyPrefix(pfx, accessor.config)) || '/'\n if (seen.descendant || seen.marker) {\n emitStartPath(results, rootKey, startName, {\n kind: 'd',\n isEmpty: empty ? false : null,\n exists: true,\n tree,\n maxDepth: options.maxDepth,\n minDepth: options.minDepth,\n minSize: options.minSize,\n maxSize: options.maxSize,\n })\n }\n return results.sort()\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { invalidateAfterWrite, invalidateAncestors, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { gridfsPrefix, rawPathOf } from './_client.ts'\nimport { uploadBytes } from './write.ts'\n\nexport async function mkdir(\n accessor: GridFSAccessor,\n path: PathSpec,\n parents = false,\n): Promise<void> {\n // GridFS has no real directories; parents are implicit. A zero-byte\n // \"key/\" marker doc makes the empty directory visible.\n const raw = rawPathOf(path)\n const pfx = gridfsPrefix(raw, accessor.config)\n if (pfx === '') return\n await uploadBytes(accessor, pfx, new Uint8Array(0))\n await invalidateAfterWrite(path)\n if (parents) await invalidateAncestors(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IndexEntry,\n ResourceType,\n mountPrefixOf,\n rstripSlash,\n type IndexCacheStore,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { gridfsPrefix, iterLatest, prefixQuery, stripKeyPrefix } from './_client.ts'\nimport { SCOPE_ERROR } from './constants.ts'\n\nexport async function readdir(\n accessor: GridFSAccessor,\n path: PathSpec,\n index?: IndexCacheStore,\n): Promise<string[]> {\n const original = path.virtual\n const prefix = mountPrefixOf(path.virtual, path.resourcePath)\n // When called from resolveGlob with a pattern, use path.directory for the\n // listing; direct callers pass pattern=null so we use path.virtual.\n const virtual = path.pattern !== null ? path.directory : original\n const rawPath =\n prefix !== '' && virtual.startsWith(prefix) ? virtual.slice(prefix.length) || '/' : virtual\n\n const virtualKey = rawPath === '/' ? '/' : rstripSlash(rawPath) || '/'\n const rawFullKey = prefix !== '' ? `${prefix}${virtualKey}` : virtualKey\n const fullVirtualKey = rstripSlash(rawFullKey) || '/'\n if (index !== undefined) {\n const listing = await index.listDir(fullVirtualKey)\n if (listing.entries !== undefined && listing.entries !== null) {\n return listing.entries\n }\n }\n\n const { config } = accessor\n const pfx = gridfsPrefix(rawPath, config)\n const names: string[] = []\n const dirKeys = new Set<string>()\n const sizes = new Map<string, number>()\n const times = new Map<string, string>()\n for await (const doc of iterLatest(accessor, prefixQuery(pfx))) {\n const fname = doc.filename\n if (fname === pfx) continue\n const relative = fname.slice(pfx.length)\n const slash = relative.indexOf('/')\n if (slash === -1) {\n const key = '/' + stripKeyPrefix(fname, config)\n names.push(key)\n sizes.set(key, doc.length)\n times.set(key, doc.uploadDate.toISOString())\n } else {\n // A deeper filename or a \"seg/\" directory marker both imply an\n // immediate child directory (S3 CommonPrefixes equivalent).\n const child = pfx + relative.slice(0, slash)\n const key = '/' + stripKeyPrefix(child, config)\n if (!dirKeys.has(key)) {\n names.push(key)\n dirKeys.add(key)\n }\n }\n }\n names.sort()\n if (names.length > SCOPE_ERROR) {\n console.warn(\n `gridfs readdir: ${fullVirtualKey} returned ${String(names.length)} entries (limit ${String(SCOPE_ERROR)})`,\n )\n }\n const virtualEntries = names.map((e) => (prefix !== '' ? `${prefix}${e}` : e)).sort()\n if (index !== undefined) {\n const indexEntries: [string, IndexEntry][] = names.map((e) => {\n const name = e.split('/').pop() ?? ''\n if (dirKeys.has(e)) {\n // GridFS \"folders\" are synthetic prefixes with no file doc of\n // their own, so there is no uploadDate or length to record.\n return [name, new IndexEntry({ id: e, name, resourceType: ResourceType.FOLDER })]\n }\n return [\n name,\n new IndexEntry({\n id: e,\n name,\n resourceType: ResourceType.FILE,\n size: sizes.get(e) ?? null,\n remoteTime: times.get(e) ?? '',\n }),\n ]\n })\n await index.setDir(fullVirtualKey, indexEntries)\n }\n return virtualEntries\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n enoent,\n invalidateAfterUnlink,\n invalidateAfterWrite,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { deleteAll, filesColl, gridfsKey, latestFile, rawPathOf } from './_client.ts'\n\nexport async function rename(\n accessor: GridFSAccessor,\n src: PathSpec,\n dst: PathSpec,\n): Promise<void> {\n // Server-side: retag every revision's filename instead of copying\n // bytes, so the whole revision history moves with the file.\n const srcKey = gridfsKey(rawPathOf(src), accessor.config)\n const dstKey = gridfsKey(rawPathOf(dst), accessor.config)\n if ((await latestFile(accessor, srcKey)) === null) {\n throw enoent(src)\n }\n await deleteAll(accessor, { filename: dstKey })\n const files = await filesColl(accessor)\n await files.updateMany({ filename: srcKey }, { $set: { filename: dstKey } })\n await invalidateAfterWrite(dst)\n await invalidateAfterUnlink(src)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { invalidateAfterUnlink, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { deleteAll, gridfsPrefix, prefixQuery, rawPathOf } from './_client.ts'\n\nexport async function rmR(accessor: GridFSAccessor, path: PathSpec): Promise<void> {\n // Recursively delete every file (every revision) under the prefix.\n const raw = rawPathOf(path)\n const pfx = gridfsPrefix(raw, accessor.config)\n await deleteAll(accessor, prefixQuery(pfx))\n await invalidateAfterUnlink(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { invalidateAfterUnlink, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { deleteAll, gridfsPrefix, prefixQuery, rawPathOf } from './_client.ts'\n\nexport async function rmdir(accessor: GridFSAccessor, path: PathSpec): Promise<void> {\n const raw = rawPathOf(path)\n const pfx = gridfsPrefix(raw, accessor.config)\n await deleteAll(accessor, prefixQuery(pfx))\n await invalidateAfterUnlink(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { ResourceName, enoent, recordStream, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { bucket, gridfsKey, rawPathOf } from './_client.ts'\nimport { isNoFileError, read, resolveFileId } from './read.ts'\n\nconst DEFAULT_CHUNK_SIZE = 8192\n\nexport async function* stream(accessor: GridFSAccessor, path: PathSpec): AsyncIterable<Uint8Array> {\n const virtual = path.virtual\n const raw = rawPathOf(path)\n const key = gridfsKey(raw, accessor.config)\n const rec = recordStream('read', virtual, ResourceName.GRIDFS)\n const fileId = await resolveFileId(accessor, path, key)\n if (rec !== null) {\n const revision = fileId.toString()\n rec.fingerprint = revision\n rec.revision = revision\n }\n const b = await bucket(accessor)\n const readable = b.openDownloadStream(fileId)\n let pending: Uint8Array = new Uint8Array(0)\n try {\n for await (const chunk of readable as AsyncIterable<Uint8Array>) {\n const merged = new Uint8Array(pending.byteLength + chunk.byteLength)\n merged.set(pending, 0)\n merged.set(chunk, pending.byteLength)\n pending = merged\n while (pending.byteLength >= DEFAULT_CHUNK_SIZE) {\n const piece = pending.slice(0, DEFAULT_CHUNK_SIZE)\n if (rec !== null) rec.bytes += piece.byteLength\n yield piece\n pending = pending.slice(DEFAULT_CHUNK_SIZE)\n }\n }\n } catch (err) {\n if (isNoFileError(err)) throw enoent(path)\n throw err\n }\n if (pending.byteLength > 0) {\n if (rec !== null) rec.bytes += pending.byteLength\n yield pending\n }\n}\n\nexport async function rangeRead(\n accessor: GridFSAccessor,\n path: PathSpec,\n offset: number,\n size: number,\n): Promise<Uint8Array> {\n return read(accessor, path, undefined, { offset, size })\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { invalidateAfterWrite, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { gridfsKey, latestFile, rawPathOf } from './_client.ts'\nimport { downloadBytes } from './read.ts'\nimport { uploadBytes } from './write.ts'\n\nexport async function truncate(\n accessor: GridFSAccessor,\n path: PathSpec,\n length: number,\n): Promise<void> {\n const raw = rawPathOf(path)\n const key = gridfsKey(raw, accessor.config)\n const doc = await latestFile(accessor, key)\n let data = doc === null ? new Uint8Array(0) : await downloadBytes(accessor, path, doc._id)\n if (data.byteLength > length) {\n data = data.slice(0, length)\n } else if (data.byteLength < length) {\n const padded = new Uint8Array(length)\n padded.set(data, 0)\n data = padded\n }\n await uploadBytes(accessor, key, data)\n await invalidateAfterWrite(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { invalidateAfterUnlink, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { deleteAll, gridfsKey, rawPathOf } from './_client.ts'\n\nexport async function unlink(accessor: GridFSAccessor, path: PathSpec): Promise<void> {\n // Removes every revision of the filename (rm semantics; mirrors S3's\n // DeleteObject, which also succeeds silently on a missing key).\n const raw = rawPathOf(path)\n const key = gridfsKey(raw, accessor.config)\n await deleteAll(accessor, { filename: key })\n await invalidateAfterUnlink(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { CommandIO } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { SCOPE_ERROR } from '../../../core/gridfs/constants.ts'\nimport { copy as gridfsCopy } from '../../../core/gridfs/copy.ts'\nimport { create as gridfsCreate } from '../../../core/gridfs/create.ts'\nimport { du as gridfsDu, duAll as gridfsDuAll } from '../../../core/gridfs/du.ts'\nimport { exists as gridfsExists } from '../../../core/gridfs/exists.ts'\nimport { find as gridfsFind } from '../../../core/gridfs/find.ts'\nimport { mkdir as gridfsMkdir } from '../../../core/gridfs/mkdir.ts'\nimport { read as gridfsRead } from '../../../core/gridfs/read.ts'\nimport { readdir as gridfsReaddir } from '../../../core/gridfs/readdir.ts'\nimport { rename as gridfsRename } from '../../../core/gridfs/rename.ts'\nimport { rmR as gridfsRmR } from '../../../core/gridfs/rm.ts'\nimport { rmdir as gridfsRmdir } from '../../../core/gridfs/rmdir.ts'\nimport { stat as gridfsStat } from '../../../core/gridfs/stat.ts'\nimport { stream as gridfsStream } from '../../../core/gridfs/stream.ts'\nimport { truncate as gridfsTruncate } from '../../../core/gridfs/truncate.ts'\nimport { unlink as gridfsUnlink } from '../../../core/gridfs/unlink.ts'\nimport { write as gridfsWrite } from '../../../core/gridfs/write.ts'\n\nexport const GRIDFS_IO: CommandIO<GridFSAccessor> = {\n readdir: gridfsReaddir,\n readBytes: gridfsRead,\n readStream: gridfsStream,\n stat: gridfsStat,\n isMounted: () => true,\n local: false,\n maxGlobMatches: SCOPE_ERROR,\n write: gridfsWrite,\n exists: gridfsExists,\n mkdir: gridfsMkdir,\n unlink: gridfsUnlink,\n rmdir: gridfsRmdir,\n rmR: gridfsRmR,\n rename: gridfsRename,\n copy: gridfsCopy,\n create: gridfsCreate,\n truncate: gridfsTruncate,\n find: gridfsFind,\n duTotal: gridfsDu,\n duAll: gridfsDuAll,\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n resolveGlobOf,\n specOf,\n writeMetadataProvision,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { mkdir as gridfsMkdir } from '../../../core/gridfs/mkdir.ts'\nimport { GRIDFS_IO } from './io.ts'\n\nconst resolveGlob = resolveGlobOf(GRIDFS_IO)\n\nconst ENC = new TextEncoder()\n\nasync function mkdirCommand(\n accessor: GridFSAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length === 0) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('mkdir: missing operand\\n') })]\n }\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const verbose = opts.flags.v === true\n const parents = opts.flags.p === true\n const lines: string[] = []\n const writes: Record<string, Uint8Array> = {}\n for (const path of resolved) {\n await gridfsMkdir(accessor, path, parents)\n writes[path.mountPath] = new Uint8Array()\n if (verbose) lines.push(`mkdir: created directory '${path.virtual}'`)\n }\n const output: ByteSource | null = lines.length > 0 ? ENC.encode(lines.join('\\n') + '\\n') : null\n return [output, new IOResult({ writes })]\n}\n\nexport const GRIDFS_MKDIR = command({\n name: 'mkdir',\n resource: ResourceName.GRIDFS,\n spec: specOf('mkdir'),\n fn: mkdirCommand,\n write: true,\n provision: writeMetadataProvision,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FileType,\n IOResult,\n ResourceName,\n command,\n cpWalk,\n formatRecords,\n removalLines,\n resolveGlobOf,\n specOf,\n writeMetadataProvision,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { readdir as gridfsReaddir } from '../../../core/gridfs/readdir.ts'\nimport { rmR as gridfsRmR } from '../../../core/gridfs/rm.ts'\nimport { rmdir as gridfsRmdir } from '../../../core/gridfs/rmdir.ts'\nimport { stat as gridfsStat } from '../../../core/gridfs/stat.ts'\nimport { unlink as gridfsUnlink } from '../../../core/gridfs/unlink.ts'\nimport { GRIDFS_IO } from './io.ts'\n\nconst resolveGlob = resolveGlobOf(GRIDFS_IO)\n\nconst ENC = new TextEncoder()\n\ninterface RmOpts {\n recursive: boolean\n force: boolean\n removeDir: boolean\n verbose: boolean\n}\n\n// Remove one operand, returning a GNU stderr line on failure (null when\n// removed, or skipped under -f) alongside the verbose lines.\nasync function rmOne(\n accessor: GridFSAccessor,\n path: PathSpec,\n opts: RmOpts,\n index: CommandOpts['index'],\n): Promise<[string | null, string[]]> {\n const label = path.virtual\n let isDir = false\n try {\n const st = await gridfsStat(accessor, path, index ?? undefined)\n isDir = st.type === FileType.DIRECTORY\n } catch {\n if (opts.force) return [null, []]\n return [`rm: cannot remove '${label}': No such file or directory`, []]\n }\n if (isDir) {\n if (opts.recursive) {\n const lines = opts.verbose\n ? removalLines(\n await cpWalk(\n (dir) => gridfsReaddir(accessor, dir, index ?? undefined),\n (spec) => gridfsStat(accessor, spec, index ?? undefined),\n path,\n index ?? undefined,\n ),\n )\n : []\n await gridfsRmR(accessor, path)\n return [null, lines]\n }\n if (opts.removeDir) {\n const children = await gridfsReaddir(accessor, path, index ?? undefined)\n if (children.length > 0) {\n return [`rm: cannot remove '${label}': Directory not empty`, []]\n }\n await gridfsRmdir(accessor, path)\n return [null, opts.verbose ? [`removed directory '${label}'`] : []]\n }\n return [`rm: cannot remove '${label}': Is a directory`, []]\n }\n await gridfsUnlink(accessor, path)\n return [null, opts.verbose ? [`removed '${label}'`] : []]\n}\n\nasync function rmCommand(\n accessor: GridFSAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length === 0) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('rm: missing operand\\n') })]\n }\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const recursive = opts.flags.r === true || opts.flags.R === true\n const force = opts.flags.f === true\n const removeDir = opts.flags.d === true\n const verbose = opts.flags.v === true\n const verboseParts: string[] = []\n const errors: string[] = []\n const writes: Record<string, Uint8Array> = {}\n for (const p of resolved) {\n // GNU rm reports the operand and keeps removing the rest.\n const [error, entryLines] = await rmOne(\n accessor,\n p,\n { recursive, force, removeDir, verbose },\n opts.index,\n )\n if (error !== null) {\n errors.push(error)\n continue\n }\n writes[p.mountPath] = new Uint8Array()\n if (verbose) verboseParts.push(...entryLines)\n }\n const output: ByteSource | null = verbose ? formatRecords(verboseParts) : null\n const stderr = errors.length > 0 ? ENC.encode(errors.join('\\n') + '\\n') : undefined\n return [\n output,\n new IOResult({\n writes,\n exitCode: errors.length > 0 ? 1 : 0,\n ...(stderr !== undefined ? { stderr } : {}),\n }),\n ]\n}\n\nexport const GRIDFS_RM = command({\n name: 'rm',\n resource: ResourceName.GRIDFS,\n spec: specOf('rm'),\n fn: rmCommand,\n write: true,\n provision: writeMetadataProvision,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n ResourceName,\n command,\n metadataProvision,\n resolveGlobOf,\n specOf,\n statGeneric,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { stat as gridfsStat } from '../../../core/gridfs/stat.ts'\nimport { GRIDFS_IO } from './io.ts'\n\nconst resolveGlob = resolveGlobOf(GRIDFS_IO)\n\nasync function statCommand(\n accessor: GridFSAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const resolved =\n paths.length > 0 ? await resolveGlob(accessor, paths, opts.index ?? undefined) : []\n return statGeneric(resolved, opts, (p) => gridfsStat(accessor, p, opts.index ?? undefined))\n}\n\nexport const GRIDFS_STAT = command({\n name: 'stat',\n resource: ResourceName.GRIDFS,\n spec: specOf('stat'),\n fn: statCommand,\n provision: metadataProvision,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n materialize,\n parseTeeFlags,\n readStdinAsync,\n resolveGlobOf,\n specOf,\n writeOutput,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { exists as gridfsExists } from '../../../core/gridfs/exists.ts'\nimport { stream as gridfsStream } from '../../../core/gridfs/stream.ts'\nimport { write as gridfsWrite } from '../../../core/gridfs/write.ts'\nimport { GRIDFS_IO } from './io.ts'\n\nconst resolveGlob = resolveGlobOf(GRIDFS_IO)\n\nconst ENC = new TextEncoder()\n\nasync function teeCommand(\n accessor: GridFSAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length === 0) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('tee: missing operand\\n') })]\n }\n const parsed = parseTeeFlags(opts.flags)\n if (typeof parsed === 'string') {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode(parsed) })]\n }\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const first = resolved[0]\n if (first === undefined) return [null, new IOResult()]\n const stdinData = await readStdinAsync(opts.stdin)\n const raw: Uint8Array = stdinData ?? ENC.encode(texts.join(' '))\n let writeData = raw\n if (parsed.append) {\n let existingFound = false\n try {\n existingFound = await gridfsExists(accessor, first)\n } catch {\n existingFound = false\n }\n if (existingFound) {\n const existing = await materialize(gridfsStream(accessor, first))\n writeData = new Uint8Array(existing.byteLength + raw.byteLength)\n writeData.set(existing, 0)\n writeData.set(raw, existing.byteLength)\n }\n }\n return writeOutput((p, d) => gridfsWrite(accessor, p, d), first, writeData, raw)\n}\n\nexport const GRIDFS_TEE = command({\n name: 'tee',\n resource: ResourceName.GRIDFS,\n spec: specOf('tee'),\n fn: teeCommand,\n write: true,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n resolveGlobOf,\n specOf,\n writeMetadataProvision,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { exists as gridfsExists } from '../../../core/gridfs/exists.ts'\nimport { write as gridfsWrite } from '../../../core/gridfs/write.ts'\nimport { GRIDFS_IO } from './io.ts'\n\nconst resolveGlob = resolveGlobOf(GRIDFS_IO)\n\nconst ENC = new TextEncoder()\n\nasync function touchCommand(\n accessor: GridFSAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length === 0) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('touch: missing operand\\n') })]\n }\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const createOnly = opts.flags.c === true\n const writes: Record<string, Uint8Array> = {}\n for (const p of resolved) {\n if (createOnly) continue\n if (!(await gridfsExists(accessor, p))) {\n await gridfsWrite(accessor, p, new Uint8Array(0))\n writes[p.mountPath] = new Uint8Array()\n }\n }\n return [null, new IOResult({ writes })]\n}\n\nexport const GRIDFS_TOUCH = command({\n name: 'touch',\n resource: ResourceName.GRIDFS,\n spec: specOf('touch'),\n fn: touchCommand,\n write: true,\n provision: writeMetadataProvision,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { ResourceName, makeGenericOps, type RegisteredOp } from '@struktoai/mirage-core'\nimport { GRIDFS_IO } from '../../commands/builtin/gridfs/io.ts'\n\nexport const GRIDFS_OPS: readonly RegisteredOp[] = makeGenericOps(ResourceName.GRIDFS, GRIDFS_IO, {\n filetypeRead: ['.feather', '.hdf5', '.parquet'],\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nexport const GRIDFS_PROMPT = `{prefix}\n Remote MongoDB GridFS bucket. Maps GridFS filenames to virtual paths.\n IMPORTANT: This is a remote mount. Prefer targeted reads (grep, head) over full scans. Avoid cat on large files without piping to head/tail.\n find pushes -name/-type/-size filters into the fs.files query server-side, so find is cheap even on large buckets.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.orc/.feather returns a formatted table.`\n"],"mappings":"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","names":["ResourceName","mountPrefixOf","ResourceName","enoent","mountPrefixOf","mountPrefixOf","enoent","ResourceName","rstripSlash","rstripSlash","enoent","enoent","invalidateAfterWrite","ResourceName","invalidateAfterWrite","record","record","ResourceName","invalidateAfterWrite","invalidateAfterWrite","rstripSlash","rstripSlash","invalidateAfterWrite","invalidateAfterWrite","mountPrefixOf","rstripSlash","mountPrefixOf","rstripSlash","enoent","invalidateAfterWrite","enoent","invalidateAfterWrite","invalidateAfterUnlink","invalidateAfterUnlink","invalidateAfterUnlink","invalidateAfterUnlink","ResourceName","enoent","ResourceName","enoent","invalidateAfterWrite","invalidateAfterWrite","invalidateAfterUnlink","invalidateAfterUnlink","ResourceName","ResourceName","command","resolveGlobOf","specOf","resolveGlob","resolveGlobOf","command","ResourceName","specOf","FileType","IOResult","ResourceName","command","resolveGlobOf","specOf","writeMetadataProvision","resolveGlob","resolveGlobOf","ENC","FileType","IOResult","command","ResourceName","specOf","writeMetadataProvision","ResourceName","command","metadataProvision","resolveGlobOf","specOf","resolveGlob","resolveGlobOf","command","ResourceName","specOf","metadataProvision","IOResult","ResourceName","command","resolveGlobOf","specOf","resolveGlob","resolveGlobOf","ENC","IOResult","command","ResourceName","specOf","IOResult","ResourceName","command","resolveGlobOf","specOf","writeMetadataProvision","resolveGlob","resolveGlobOf","ENC","IOResult","command","ResourceName","specOf","writeMetadataProvision","ResourceName","ResourceName","ResourceName","ResourceName","mountPrefixOf"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/email/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { normalizeFields, redactConfigWithSchema, secretStr, z } from '@struktoai/mirage-core'\n\nfunction asString(v: unknown): string {\n return typeof v === 'string' ? v : ''\n}\n\nexport interface EmailConfig {\n imapHost: string\n imapPort: number\n smtpHost: string\n smtpPort: number\n username: string\n password: string\n useSsl: boolean\n maxMessages: number\n}\n\nexport interface EmailConfigRedacted extends Omit<EmailConfig, 'password'> {\n password: '<REDACTED>'\n}\n\nconst EmailConfigSchema = z.object({\n imapHost: z.string(),\n imapPort: z.number(),\n smtpHost: z.string(),\n smtpPort: z.number(),\n username: z.string(),\n password: secretStr(),\n useSsl: z.boolean(),\n maxMessages: z.number(),\n})\n\nexport function redactEmailConfig(config: EmailConfig): EmailConfigRedacted {\n return redactConfigWithSchema(EmailConfigSchema, config) as unknown as EmailConfigRedacted\n}\n\nexport interface EmailConfigInput {\n imapHost: string\n imapPort?: number\n smtpHost: string\n smtpPort?: number\n username: string\n password: string\n useSsl?: boolean\n maxMessages?: number\n}\n\nexport function buildEmailConfig(input: EmailConfigInput): EmailConfig {\n return {\n imapHost: input.imapHost,\n imapPort: input.imapPort ?? 993,\n smtpHost: input.smtpHost,\n smtpPort: input.smtpPort ?? 587,\n username: input.username,\n password: input.password,\n useSsl: input.useSsl ?? true,\n maxMessages: input.maxMessages ?? 200,\n }\n}\n\nexport function normalizeEmailConfig(input: Record<string, unknown>): EmailConfig {\n const norm = normalizeFields(input, {\n rename: {\n imap_host: 'imapHost',\n imap_port: 'imapPort',\n smtp_host: 'smtpHost',\n smtp_port: 'smtpPort',\n use_ssl: 'useSsl',\n max_messages: 'maxMessages',\n },\n })\n const built: EmailConfigInput = {\n imapHost: asString(norm.imapHost),\n smtpHost: asString(norm.smtpHost),\n username: asString(norm.username),\n password: asString(norm.password),\n }\n if (typeof norm.imapPort === 'number') built.imapPort = norm.imapPort\n if (typeof norm.smtpPort === 'number') built.smtpPort = norm.smtpPort\n if (typeof norm.useSsl === 'boolean') built.useSsl = norm.useSsl\n if (typeof norm.maxMessages === 'number') built.maxMessages = norm.maxMessages\n return buildEmailConfig(built)\n}\n"],"mappings":";AAcA,SAAS,iBAAiB,wBAAwB,WAAW,SAAS;AAEtE,SAAS,SAAS,GAAoB;AACpC,SAAO,OAAO,MAAM,WAAW,IAAI;AACrC;AAiBA,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACjC,UAAU,EAAE,OAAO;AAAA,EACnB,UAAU,EAAE,OAAO;AAAA,EACnB,UAAU,EAAE,OAAO;AAAA,EACnB,UAAU,EAAE,OAAO;AAAA,EACnB,UAAU,EAAE,OAAO;AAAA,EACnB,UAAU,UAAU;AAAA,EACpB,QAAQ,EAAE,QAAQ;AAAA,EAClB,aAAa,EAAE,OAAO;AACxB,CAAC;AAEM,SAAS,kBAAkB,QAA0C;AAC1E,SAAO,uBAAuB,mBAAmB,MAAM;AACzD;AAaO,SAAS,iBAAiB,OAAsC;AACrE,SAAO;AAAA,IACL,UAAU,MAAM;AAAA,IAChB,UAAU,MAAM,YAAY;AAAA,IAC5B,UAAU,MAAM;AAAA,IAChB,UAAU,MAAM,YAAY;AAAA,IAC5B,UAAU,MAAM;AAAA,IAChB,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM,UAAU;AAAA,IACxB,aAAa,MAAM,eAAe;AAAA,EACpC;AACF;AAEO,SAAS,qBAAqB,OAA6C;AAChF,QAAM,OAAO,gBAAgB,OAAO;AAAA,IAClC,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,MACT,cAAc;AAAA,IAChB;AAAA,EACF,CAAC;AACD,QAAM,QAA0B;AAAA,IAC9B,UAAU,SAAS,KAAK,QAAQ;AAAA,IAChC,UAAU,SAAS,KAAK,QAAQ;AAAA,IAChC,UAAU,SAAS,KAAK,QAAQ;AAAA,IAChC,UAAU,SAAS,KAAK,QAAQ;AAAA,EAClC;AACA,MAAI,OAAO,KAAK,aAAa,SAAU,OAAM,WAAW,KAAK;AAC7D,MAAI,OAAO,KAAK,aAAa,SAAU,OAAM,WAAW,KAAK;AAC7D,MAAI,OAAO,KAAK,WAAW,UAAW,OAAM,SAAS,KAAK;AAC1D,MAAI,OAAO,KAAK,gBAAgB,SAAU,OAAM,cAAc,KAAK;AACnE,SAAO,iBAAiB,KAAK;AAC/B;","names":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
digitalOceanToS3Config,
|
|
3
3
|
redactDigitalOceanConfig
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-3ASOQTZB.js";
|
|
5
5
|
import {
|
|
6
6
|
S3Resource
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IUXXZHY3.js";
|
|
8
8
|
|
|
9
9
|
// src/resource/digitalocean/digitalocean.ts
|
|
10
10
|
import {
|
|
@@ -54,4 +54,4 @@ export {
|
|
|
54
54
|
DIGITALOCEAN_PROMPT,
|
|
55
55
|
DigitalOceanResource
|
|
56
56
|
};
|
|
57
|
-
//# sourceMappingURL=chunk-
|
|
57
|
+
//# sourceMappingURL=chunk-CXQGMFI7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/resource/gsheets/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { normalizeFields, redactConfigWithSchema, secretStr, z } from '@struktoai/mirage-core'\n\nexport interface GSheetsConfig {\n clientId: string\n clientSecret: string\n refreshToken: string\n refreshFn?: (refreshToken: string) => Promise<{ accessToken: string; expiresIn: number }>\n}\n\nexport interface GSheetsConfigRedacted {\n clientId: string\n clientSecret: '<REDACTED>'\n refreshToken: '<REDACTED>'\n}\n\
|
|
1
|
+
{"version":3,"sources":["../src/resource/gsheets/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { normalizeFields, redactConfigWithSchema, secretStr, z } from '@struktoai/mirage-core'\n\nexport interface GSheetsConfig {\n clientId: string\n clientSecret: string\n refreshToken: string\n refreshFn?: (refreshToken: string) => Promise<{ accessToken: string; expiresIn: number }>\n}\n\nexport interface GSheetsConfigRedacted {\n clientId: string\n clientSecret: '<REDACTED>'\n refreshToken: '<REDACTED>'\n}\n\nconst GSheetsConfigSchema = z.object({\n clientId: z.string(),\n clientSecret: secretStr(),\n refreshToken: secretStr(),\n})\n\nexport function redactGSheetsConfig(config: GSheetsConfig): GSheetsConfigRedacted {\n return redactConfigWithSchema(GSheetsConfigSchema, config) as unknown as GSheetsConfigRedacted\n}\n\nexport function normalizeGSheetsConfig(input: Record<string, unknown>): GSheetsConfig {\n return normalizeFields(input, {\n rename: {\n client_id: 'clientId',\n client_secret: 'clientSecret',\n refresh_token: 'refreshToken',\n },\n }) as unknown as GSheetsConfig\n}\n"],"mappings":";AAcA,SAAS,iBAAiB,wBAAwB,WAAW,SAAS;AAetE,IAAM,sBAAsB,EAAE,OAAO;AAAA,EACnC,UAAU,EAAE,OAAO;AAAA,EACnB,cAAc,UAAU;AAAA,EACxB,cAAc,UAAU;AAC1B,CAAC;AAEM,SAAS,oBAAoB,QAA8C;AAChF,SAAO,uBAAuB,qBAAqB,MAAM;AAC3D;AAEO,SAAS,uBAAuB,OAA+C;AACpF,SAAO,gBAAgB,OAAO;AAAA,IAC5B,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,eAAe;AAAA,MACf,eAAe;AAAA,IACjB;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
HfDatasetsAccessor,
|
|
3
3
|
HfResource
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-HEDE2377.js";
|
|
5
5
|
import {
|
|
6
6
|
assertHfRepoId,
|
|
7
7
|
redactHfRepoConfig
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-KAWDDS27.js";
|
|
9
9
|
|
|
10
10
|
// src/resource/hf_datasets/hf_datasets.ts
|
|
11
11
|
import { normalizeKeyPrefix, ResourceName } from "@struktoai/mirage-core";
|
|
@@ -47,4 +47,4 @@ export {
|
|
|
47
47
|
HF_DATASETS_PROMPT,
|
|
48
48
|
HfDatasetsResource
|
|
49
49
|
};
|
|
50
|
-
//# sourceMappingURL=chunk-
|
|
50
|
+
//# sourceMappingURL=chunk-DXU7NZPH.js.map
|
|
@@ -7,7 +7,9 @@ var GCSConfigSchema = z.object({
|
|
|
7
7
|
secretAccessKey: secretStr(),
|
|
8
8
|
endpoint: z.string(),
|
|
9
9
|
region: z.string(),
|
|
10
|
-
timeoutMs: z.number().optional()
|
|
10
|
+
timeoutMs: z.number().optional(),
|
|
11
|
+
forcePathStyle: z.boolean().optional(),
|
|
12
|
+
keyPrefix: z.string().optional()
|
|
11
13
|
});
|
|
12
14
|
function gcsToS3Config(config) {
|
|
13
15
|
return {
|
|
@@ -17,7 +19,8 @@ function gcsToS3Config(config) {
|
|
|
17
19
|
accessKeyId: config.accessKeyId,
|
|
18
20
|
secretAccessKey: config.secretAccessKey,
|
|
19
21
|
...config.timeoutMs !== void 0 ? { timeoutMs: config.timeoutMs } : {},
|
|
20
|
-
...config.forcePathStyle !== void 0 ? { forcePathStyle: config.forcePathStyle } : {}
|
|
22
|
+
...config.forcePathStyle !== void 0 ? { forcePathStyle: config.forcePathStyle } : {},
|
|
23
|
+
...config.keyPrefix !== void 0 ? { keyPrefix: config.keyPrefix } : {}
|
|
21
24
|
};
|
|
22
25
|
}
|
|
23
26
|
function redactGcsConfig(config) {
|
|
@@ -33,6 +36,8 @@ function normalizeGcsConfig(input) {
|
|
|
33
36
|
access_key_id: "accessKeyId",
|
|
34
37
|
secret_access_key: "secretAccessKey",
|
|
35
38
|
endpoint_url: "endpoint",
|
|
39
|
+
path_style: "forcePathStyle",
|
|
40
|
+
key_prefix: "keyPrefix",
|
|
36
41
|
timeout: "timeoutMs"
|
|
37
42
|
},
|
|
38
43
|
transform: {
|
|
@@ -44,9 +49,8 @@ function normalizeGcsConfig(input) {
|
|
|
44
49
|
|
|
45
50
|
export {
|
|
46
51
|
GCS_ENDPOINT,
|
|
47
|
-
GCSConfigSchema,
|
|
48
52
|
gcsToS3Config,
|
|
49
53
|
redactGcsConfig,
|
|
50
54
|
normalizeGcsConfig
|
|
51
55
|
};
|
|
52
|
-
//# sourceMappingURL=chunk-
|
|
56
|
+
//# sourceMappingURL=chunk-E3KXVEYI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/gcs/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { normalizeFields, redactConfigWithSchema, secretStr, z } from '@struktoai/mirage-core'\nimport type { S3Config } from '../s3/config.ts'\n\nexport const GCS_ENDPOINT = 'https://storage.googleapis.com'\n\nexport interface GCSConfig {\n bucket: string\n accessKeyId: string\n secretAccessKey: string\n endpoint?: string\n region?: string\n timeoutMs?: number\n forcePathStyle?: boolean\n keyPrefix?: string\n}\n\nexport interface GCSConfigRedacted {\n bucket: string\n accessKeyId: string\n secretAccessKey: string\n endpoint: string\n region: string\n timeoutMs?: number\n forcePathStyle?: boolean\n keyPrefix?: string\n}\n\nconst GCSConfigSchema = z.object({\n bucket: z.string(),\n accessKeyId: secretStr(),\n secretAccessKey: secretStr(),\n endpoint: z.string(),\n region: z.string(),\n timeoutMs: z.number().optional(),\n forcePathStyle: z.boolean().optional(),\n keyPrefix: z.string().optional(),\n})\n\nexport function gcsToS3Config(config: GCSConfig): S3Config {\n return {\n bucket: config.bucket,\n region: config.region ?? 'auto',\n endpoint: config.endpoint ?? GCS_ENDPOINT,\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n ...(config.timeoutMs !== undefined ? { timeoutMs: config.timeoutMs } : {}),\n ...(config.forcePathStyle !== undefined ? { forcePathStyle: config.forcePathStyle } : {}),\n ...(config.keyPrefix !== undefined ? { keyPrefix: config.keyPrefix } : {}),\n }\n}\n\nexport function redactGcsConfig(config: GCSConfig): GCSConfigRedacted {\n return redactConfigWithSchema(GCSConfigSchema, {\n ...config,\n endpoint: config.endpoint ?? GCS_ENDPOINT,\n region: config.region ?? 'auto',\n }) as unknown as GCSConfigRedacted\n}\n\nexport function normalizeGcsConfig(input: Record<string, unknown>): GCSConfig {\n return normalizeFields(input, {\n rename: {\n access_key_id: 'accessKeyId',\n secret_access_key: 'secretAccessKey',\n endpoint_url: 'endpoint',\n path_style: 'forcePathStyle',\n key_prefix: 'keyPrefix',\n timeout: 'timeoutMs',\n },\n transform: {\n timeout: (v: unknown) => (typeof v === 'number' ? v * 1000 : v),\n },\n drop: ['proxy'],\n }) as unknown as GCSConfig\n}\n"],"mappings":";AAcA,SAAS,iBAAiB,wBAAwB,WAAW,SAAS;AAG/D,IAAM,eAAe;AAwB5B,IAAM,kBAAkB,EAAE,OAAO;AAAA,EAC/B,QAAQ,EAAE,OAAO;AAAA,EACjB,aAAa,UAAU;AAAA,EACvB,iBAAiB,UAAU;AAAA,EAC3B,UAAU,EAAE,OAAO;AAAA,EACnB,QAAQ,EAAE,OAAO;AAAA,EACjB,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,gBAAgB,EAAE,QAAQ,EAAE,SAAS;AAAA,EACrC,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAEM,SAAS,cAAc,QAA6B;AACzD,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,QAAQ,OAAO,UAAU;AAAA,IACzB,UAAU,OAAO,YAAY;AAAA,IAC7B,aAAa,OAAO;AAAA,IACpB,iBAAiB,OAAO;AAAA,IACxB,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,IACxE,GAAI,OAAO,mBAAmB,SAAY,EAAE,gBAAgB,OAAO,eAAe,IAAI,CAAC;AAAA,IACvF,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,EAC1E;AACF;AAEO,SAAS,gBAAgB,QAAsC;AACpE,SAAO,uBAAuB,iBAAiB;AAAA,IAC7C,GAAG;AAAA,IACH,UAAU,OAAO,YAAY;AAAA,IAC7B,QAAQ,OAAO,UAAU;AAAA,EAC3B,CAAC;AACH;AAEO,SAAS,mBAAmB,OAA2C;AAC5E,SAAO,gBAAgB,OAAO;AAAA,IAC5B,QAAQ;AAAA,MACN,eAAe;AAAA,MACf,mBAAmB;AAAA,MACnB,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,SAAS;AAAA,IACX;AAAA,IACA,WAAW;AAAA,MACT,SAAS,CAAC,MAAgB,OAAO,MAAM,WAAW,IAAI,MAAO;AAAA,IAC/D;AAAA,IACA,MAAM,CAAC,OAAO;AAAA,EAChB,CAAC;AACH;","names":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
redactTencentConfig,
|
|
3
3
|
tencentToS3Config
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-WTSSEUOZ.js";
|
|
5
5
|
import {
|
|
6
6
|
S3Resource
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IUXXZHY3.js";
|
|
8
8
|
|
|
9
9
|
// src/resource/tencent/tencent.ts
|
|
10
10
|
import {
|
|
@@ -54,4 +54,4 @@ export {
|
|
|
54
54
|
TENCENT_PROMPT,
|
|
55
55
|
TencentResource
|
|
56
56
|
};
|
|
57
|
-
//# sourceMappingURL=chunk-
|
|
57
|
+
//# sourceMappingURL=chunk-EGZNOUMH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/resource/discord/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { normalizeFields, redactConfigWithSchema, secretStr, z } from '@struktoai/mirage-core'\n\nexport interface DiscordConfig {\n token: string\n}\n\nexport interface DiscordConfigRedacted {\n token: '<REDACTED>'\n}\n\
|
|
1
|
+
{"version":3,"sources":["../src/resource/discord/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { normalizeFields, redactConfigWithSchema, secretStr, z } from '@struktoai/mirage-core'\n\nexport interface DiscordConfig {\n token: string\n}\n\nexport interface DiscordConfigRedacted {\n token: '<REDACTED>'\n}\n\nconst DiscordConfigSchema = z.object({\n token: secretStr(),\n})\n\nexport function redactDiscordConfig(config: DiscordConfig): DiscordConfigRedacted {\n return redactConfigWithSchema(DiscordConfigSchema, config) as unknown as DiscordConfigRedacted\n}\n\nexport function normalizeDiscordConfig(input: Record<string, unknown>): DiscordConfig {\n return normalizeFields(input, {}) as unknown as DiscordConfig\n}\n"],"mappings":";AAcA,SAAS,iBAAiB,wBAAwB,WAAW,SAAS;AAUtE,IAAM,sBAAsB,EAAE,OAAO;AAAA,EACnC,OAAO,UAAU;AACnB,CAAC;AAEM,SAAS,oBAAoB,QAA8C;AAChF,SAAO,uBAAuB,qBAAqB,MAAM;AAC3D;AAEO,SAAS,uBAAuB,OAA+C;AACpF,SAAO,gBAAgB,OAAO,CAAC,CAAC;AAClC;","names":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
redactSupabaseConfig,
|
|
3
3
|
supabaseToS3Config
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-2ERLWAGG.js";
|
|
5
5
|
import {
|
|
6
6
|
S3Resource
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IUXXZHY3.js";
|
|
8
8
|
|
|
9
9
|
// src/resource/supabase/supabase.ts
|
|
10
10
|
import {
|
|
@@ -53,4 +53,4 @@ export {
|
|
|
53
53
|
SUPABASE_PROMPT,
|
|
54
54
|
SupabaseResource
|
|
55
55
|
};
|
|
56
|
-
//# sourceMappingURL=chunk-
|
|
56
|
+
//# sourceMappingURL=chunk-F5NWRF32.js.map
|