@struktoai/mirage-node 0.0.3 → 0.0.5-alpha.1
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 +2 -1
- package/dist/aliyun-S62BR3TB.js +11 -0
- package/dist/append.lua +17 -0
- package/dist/backblaze-4EKSW63F.js +11 -0
- package/dist/box-ZPLZAGMK.js +8 -0
- package/dist/cas.lua +15 -0
- package/dist/ceph-ALKLD3MO.js +11 -0
- package/dist/{chunk-QCZ2XUKH.js → chunk-2A4YGVBM.js} +16 -23
- package/dist/chunk-2A4YGVBM.js.map +1 -0
- package/dist/chunk-2HCYLVGY.js +28 -0
- package/dist/chunk-2HCYLVGY.js.map +1 -0
- package/dist/chunk-2VPZAH5Q.js +20 -0
- package/dist/chunk-2VPZAH5Q.js.map +1 -0
- package/dist/{chunk-UT2OPSN4.js → chunk-3JZQ6VSZ.js} +5 -5
- package/dist/chunk-3JZQ6VSZ.js.map +1 -0
- package/dist/chunk-4IF4TGAI.js +11 -0
- package/dist/chunk-4IF4TGAI.js.map +1 -0
- package/dist/{chunk-47AVIIOT.js → chunk-5H6KNEPP.js} +4 -5
- package/dist/{chunk-47AVIIOT.js.map → chunk-5H6KNEPP.js.map} +1 -1
- package/dist/{chunk-I5THIMPP.js → chunk-5K2MWDCE.js} +6 -7
- package/dist/{chunk-I5THIMPP.js.map → chunk-5K2MWDCE.js.map} +1 -1
- package/dist/{chunk-3WIO7NBR.js → chunk-6SVXWRKX.js} +4 -5
- package/dist/{chunk-3WIO7NBR.js.map → chunk-6SVXWRKX.js.map} +1 -1
- package/dist/{chunk-RQK5UPMP.js → chunk-6VOIUGAD.js} +25 -12
- package/dist/chunk-6VOIUGAD.js.map +1 -0
- package/dist/{chunk-NOHWIBRX.js → chunk-7JYHFXXC.js} +15 -20
- package/dist/chunk-7JYHFXXC.js.map +1 -0
- package/dist/chunk-7VQQFWV6.js +20 -0
- package/dist/chunk-7VQQFWV6.js.map +1 -0
- package/dist/chunk-7ZP6TPHX.js +87 -0
- package/dist/chunk-7ZP6TPHX.js.map +1 -0
- package/dist/{chunk-SWCDFEUK.js → chunk-ADEXNSYU.js} +20 -22
- package/dist/chunk-ADEXNSYU.js.map +1 -0
- package/dist/chunk-AQSYAXL4.js +16 -0
- package/dist/chunk-AQSYAXL4.js.map +1 -0
- package/dist/{chunk-RO5IQEDQ.js → chunk-ATLXMNKD.js} +8 -4
- package/dist/chunk-ATLXMNKD.js.map +1 -0
- package/dist/{chunk-MPCCRRE6.js → chunk-BYCUGFRF.js} +16 -16
- package/dist/chunk-BYCUGFRF.js.map +1 -0
- package/dist/{chunk-HJJMP6IX.js → chunk-BZTVYOES.js} +3 -3
- package/dist/{chunk-B2ZOKNN4.js → chunk-CRC4YWXB.js} +27 -9
- package/dist/chunk-CRC4YWXB.js.map +1 -0
- package/dist/chunk-CTGXJHO5.js +39 -0
- package/dist/chunk-CTGXJHO5.js.map +1 -0
- package/dist/{chunk-Q2IAILVC.js → chunk-DCDBIXVZ.js} +14 -5
- package/dist/chunk-DCDBIXVZ.js.map +1 -0
- package/dist/chunk-DDAFNROK.js +750 -0
- package/dist/chunk-DDAFNROK.js.map +1 -0
- package/dist/chunk-DQIEWEAW.js +85 -0
- package/dist/chunk-DQIEWEAW.js.map +1 -0
- package/dist/{chunk-QGRDPSAH.js → chunk-EBI4IHDC.js} +23 -12
- package/dist/chunk-EBI4IHDC.js.map +1 -0
- package/dist/{chunk-JAGJTM3Q.js → chunk-EIUTZ6N7.js} +19 -34
- package/dist/chunk-EIUTZ6N7.js.map +1 -0
- package/dist/{chunk-TA3WMOMU.js → chunk-EJZG5VUF.js} +38 -32
- package/dist/chunk-EJZG5VUF.js.map +1 -0
- package/dist/{chunk-X5HF2OFP.js → chunk-ENW5BVYN.js} +3 -3
- package/dist/{chunk-HGCRXJGP.js → chunk-ETIAW4YD.js} +3 -3
- package/dist/chunk-EUPXAYPB.js +20 -0
- package/dist/chunk-EUPXAYPB.js.map +1 -0
- package/dist/{chunk-YAHRT6MB.js → chunk-FA6YNU75.js} +4 -5
- package/dist/{chunk-YAHRT6MB.js.map → chunk-FA6YNU75.js.map} +1 -1
- package/dist/{chunk-TWGVQLG2.js → chunk-FFH6R5VQ.js} +7 -3
- package/dist/chunk-FFH6R5VQ.js.map +1 -0
- package/dist/{chunk-JCC4CU2I.js → chunk-GE6H2COM.js} +15 -23
- package/dist/chunk-GE6H2COM.js.map +1 -0
- package/dist/{chunk-DM4GSE26.js → chunk-GMMQ3ZK4.js} +3 -3
- package/dist/{chunk-ZEGAMJO2.js → chunk-GSGE3M5P.js} +15 -23
- package/dist/chunk-GSGE3M5P.js.map +1 -0
- package/dist/{chunk-GCFYZSVR.js → chunk-H64SB6VO.js} +32 -13
- package/dist/chunk-H64SB6VO.js.map +1 -0
- package/dist/{chunk-N5FSLVKO.js → chunk-HCRYAFBI.js} +3 -3
- package/dist/{chunk-IDYHQQOH.js → chunk-HOPUP6LA.js} +358 -471
- package/dist/chunk-HOPUP6LA.js.map +1 -0
- package/dist/chunk-HS24BL6W.js +160 -0
- package/dist/chunk-HS24BL6W.js.map +1 -0
- package/dist/chunk-HVYVG5KQ.js +16 -0
- package/dist/chunk-HVYVG5KQ.js.map +1 -0
- package/dist/{chunk-FQ33BYFR.js → chunk-I7CPLZNW.js} +4 -5
- package/dist/{chunk-FQ33BYFR.js.map → chunk-I7CPLZNW.js.map} +1 -1
- package/dist/{chunk-VGLHY6BK.js → chunk-IFUCGI4I.js} +7 -3
- package/dist/chunk-IFUCGI4I.js.map +1 -0
- package/dist/{chunk-RNQN2FOU.js → chunk-IFYXSSKR.js} +24 -13
- package/dist/chunk-IFYXSSKR.js.map +1 -0
- package/dist/chunk-IXA4DQE4.js +20 -0
- package/dist/chunk-IXA4DQE4.js.map +1 -0
- package/dist/chunk-IZMKMD3O.js +11 -0
- package/dist/chunk-IZMKMD3O.js.map +1 -0
- package/dist/{chunk-7CW3BMPH.js → chunk-JJERW2BI.js} +4 -5
- package/dist/{chunk-7CW3BMPH.js.map → chunk-JJERW2BI.js.map} +1 -1
- package/dist/{chunk-EM4J5EQS.js → chunk-JQR4HVUX.js} +13 -16
- package/dist/chunk-JQR4HVUX.js.map +1 -0
- package/dist/{chunk-VWKUT4CW.js → chunk-JXOMDLFS.js} +21 -26
- package/dist/chunk-JXOMDLFS.js.map +1 -0
- package/dist/chunk-KIX6N7NT.js +1001 -0
- package/dist/chunk-KIX6N7NT.js.map +1 -0
- package/dist/{chunk-OZAEWZZ3.js → chunk-L42UTDFK.js} +12 -3
- package/dist/chunk-L42UTDFK.js.map +1 -0
- 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-M2UF2JHJ.js +11 -0
- package/dist/chunk-M2UF2JHJ.js.map +1 -0
- package/dist/{chunk-UGK4TAVK.js → chunk-MONC734W.js} +7 -3
- package/dist/chunk-MONC734W.js.map +1 -0
- package/dist/{chunk-IK2L4EN3.js → chunk-N72RLCMU.js} +4 -5
- package/dist/{chunk-IK2L4EN3.js.map → chunk-N72RLCMU.js.map} +1 -1
- package/dist/{chunk-H3I2KZIY.js → chunk-ND4IWJ4V.js} +7 -3
- package/dist/chunk-ND4IWJ4V.js.map +1 -0
- package/dist/chunk-NZ3EKGW4.js +1312 -0
- package/dist/chunk-NZ3EKGW4.js.map +1 -0
- package/dist/{chunk-XGJ2QERC.js → chunk-OAE57MNL.js} +27 -11
- package/dist/chunk-OAE57MNL.js.map +1 -0
- package/dist/{chunk-EZQ5HBAC.js → chunk-OHKGIQB4.js} +12 -16
- package/dist/chunk-OHKGIQB4.js.map +1 -0
- 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-UINQOUZR.js → chunk-OXEQSPND.js} +3 -3
- package/dist/{chunk-A7IVFIOP.js → chunk-PKNE5J2B.js} +15 -23
- package/dist/chunk-PKNE5J2B.js.map +1 -0
- package/dist/chunk-PSXXEGYQ.js +16 -0
- package/dist/chunk-PSXXEGYQ.js.map +1 -0
- package/dist/{chunk-EGB7V74Z.js → chunk-QAOVABCR.js} +7 -4
- package/dist/chunk-QAOVABCR.js.map +1 -0
- package/dist/{chunk-X3G37FXT.js → chunk-QQ7FP4GD.js} +4 -5
- package/dist/{chunk-X3G37FXT.js.map → chunk-QQ7FP4GD.js.map} +1 -1
- package/dist/{chunk-WAR4Q2NM.js → chunk-QYLVMC6B.js} +13 -15
- package/dist/chunk-QYLVMC6B.js.map +1 -0
- package/dist/{chunk-KPULTUOK.js → chunk-RX3XR65X.js} +4 -5
- package/dist/{chunk-KPULTUOK.js.map → chunk-RX3XR65X.js.map} +1 -1
- package/dist/chunk-RYQJJB4C.js +30 -0
- package/dist/chunk-RYQJJB4C.js.map +1 -0
- package/dist/{chunk-QQBJC2FQ.js → chunk-TUF7TCN7.js} +4 -5
- package/dist/{chunk-QQBJC2FQ.js.map → chunk-TUF7TCN7.js.map} +1 -1
- package/dist/{chunk-AUHSTJJ3.js → chunk-TUX36JY5.js} +4 -5
- package/dist/{chunk-AUHSTJJ3.js.map → chunk-TUX36JY5.js.map} +1 -1
- package/dist/chunk-TWRQCQWU.js +1153 -0
- package/dist/chunk-TWRQCQWU.js.map +1 -0
- package/dist/chunk-U6DFQRG3.js +20 -0
- package/dist/chunk-U6DFQRG3.js.map +1 -0
- package/dist/chunk-VI5YTKNY.js +20 -0
- package/dist/chunk-VI5YTKNY.js.map +1 -0
- package/dist/chunk-WG5YS6TC.js +872 -0
- package/dist/chunk-WG5YS6TC.js.map +1 -0
- package/dist/{chunk-ZGSER5TG.js → chunk-WMJJ4WGF.js} +4 -5
- package/dist/{chunk-ZGSER5TG.js.map → chunk-WMJJ4WGF.js.map} +1 -1
- package/dist/{chunk-LV2G7VHL.js → chunk-WY4FNH42.js} +21 -18
- package/dist/chunk-WY4FNH42.js.map +1 -0
- package/dist/{chunk-LAJJPLEV.js → chunk-XIG5BWWH.js} +25 -12
- package/dist/chunk-XIG5BWWH.js.map +1 -0
- package/dist/chunk-XJBC3OYX.js +11 -0
- package/dist/chunk-XJBC3OYX.js.map +1 -0
- package/dist/{chunk-G2WCEUQL.js → chunk-XPRDXWK7.js} +21 -20
- package/dist/chunk-XPRDXWK7.js.map +1 -0
- package/dist/chunk-YKRQSZS7.js +96 -0
- package/dist/chunk-YKRQSZS7.js.map +1 -0
- package/dist/{chunk-M5FVUIYP.js → chunk-YMBL3VJB.js} +21 -19
- package/dist/chunk-YMBL3VJB.js.map +1 -0
- package/dist/chunk-YUJBXFYK.js +1205 -0
- package/dist/chunk-YUJBXFYK.js.map +1 -0
- package/dist/{chunk-JALIYI6M.js → chunk-YZ4ZJNOL.js} +28 -11
- package/dist/chunk-YZ4ZJNOL.js.map +1 -0
- package/dist/chunk-ZTHVEXIV.js +11 -0
- package/dist/chunk-ZTHVEXIV.js.map +1 -0
- package/dist/{chunk-GS5AUKUO.js → chunk-ZVSYUCYS.js} +11 -7
- package/dist/chunk-ZVSYUCYS.js.map +1 -0
- package/dist/{config-QAA646XB.js → config-2YBCHU2W.js} +2 -4
- package/dist/{config-IVY5EQQ2.js → config-3YRGRW72.js} +3 -4
- package/dist/config-4GSOMUMF.js +9 -0
- package/dist/config-5YBUWFUP.js +9 -0
- package/dist/{config-34LHOGLM.js → config-5ZRKJTKG.js} +3 -4
- package/dist/config-A25LTL5W.js +11 -0
- package/dist/config-CLU7JABG.js +9 -0
- package/dist/config-D2RF7L3N.js +9 -0
- package/dist/{config-LHFFXVYI.js → config-E55TKM6K.js} +2 -4
- package/dist/config-ELDOFRJW.js +9 -0
- package/dist/{config-GE4W4ZJC.js → config-FPC3RBFD.js} +2 -4
- package/dist/config-FPM3LAW7.js +9 -0
- package/dist/{config-HKRMKD76.js → config-G3F54CS4.js} +3 -4
- package/dist/config-G43HRUI3.js +9 -0
- package/dist/{config-WDAZFXYD.js → config-GG3WO5PB.js} +3 -4
- package/dist/config-JUYBWAZE.js +9 -0
- package/dist/{config-CVZ2AGCO.js → config-LJ5T6TVA.js} +2 -6
- package/dist/config-MDSAE4O3.js +11 -0
- package/dist/{config-EIHSP5DZ.js → config-NRIOKK5T.js} +2 -4
- package/dist/config-OYK2BSJK.js +9 -0
- package/dist/config-PB3KA2CE.js +9 -0
- package/dist/{config-ZFJYQZCH.js → config-QY4IL3PH.js} +3 -4
- package/dist/config-R4LAOEDS.js +9 -0
- package/dist/{config-QNMKWJ4M.js → config-RIAAD6RW.js} +3 -4
- package/dist/config-SYNEQAUB.js +9 -0
- package/dist/{config-Q45Y46YT.js → config-TJKGYA2B.js} +3 -4
- package/dist/{config-NV5WXP64.js → config-UU27ALAA.js} +2 -4
- package/dist/{config-3IVQJBNW.js → config-UURRGA7U.js} +2 -2
- package/dist/{config-VM526IKB.js → config-VPLHQXVE.js} +2 -4
- package/dist/config-WRACCRPN.js +9 -0
- package/dist/{config-GHRUKEQ6.js → config-WVHKXEVE.js} +3 -4
- package/dist/{config-EO23EY62.js → config-XU7R36IE.js} +3 -4
- package/dist/config-Y2KOUYSS.js +9 -0
- package/dist/databricks_volume-CNCPTZHS.js +7 -0
- package/dist/digitalocean-DJZOUB6Q.js +11 -0
- package/dist/discord-ETB2CADR.js +7 -0
- package/dist/disk-WEHSTK3F.js +7 -0
- package/dist/dropbox-XN6PGLNE.js +8 -0
- package/dist/email-OV7XCP3T.js +8 -0
- package/dist/gcal-P56MRCGU.js +8 -0
- package/dist/gcs-HFBIAE2C.js +10 -0
- package/dist/gdocs-LQ3UXP3J.js +8 -0
- package/dist/gdrive-N6UBYLON.js +8 -0
- package/dist/github-BPZREGPI.js +8 -0
- package/dist/github_ci-7A4LUIZ7.js +8 -0
- package/dist/gmail-YED2MF6H.js +8 -0
- package/dist/gridfs-CPLQ4G62.js +9 -0
- package/dist/gsheets-4BNIJPQ6.js +8 -0
- package/dist/gslides-GDBYLO5A.js +8 -0
- package/dist/hf_buckets-FTJITQ3P.js +10 -0
- package/dist/hf_datasets-6GXVKQD7.js +10 -0
- package/dist/hf_models-PJPGZAC5.js +10 -0
- package/dist/hf_spaces-LFNFOLBF.js +10 -0
- package/dist/index.d.ts +1311 -569
- package/dist/index.js +3359 -964
- package/dist/index.js.map +1 -1
- package/dist/jaeger-GCA6MJ6E.js +8 -0
- package/dist/lancedb-TJ5YSJY5.js +7 -0
- package/dist/langfuse-RUMTUMXS.js +8 -0
- package/dist/linear-BCE4KEAC.js +7 -0
- package/dist/minio-5SO6KBTK.js +11 -0
- package/dist/mongodb-L5CMN2EE.js +7 -0
- package/dist/nextcloud-4O2LZVW2.js +9 -0
- package/dist/notion-RVKEAQ2M.js +7 -0
- package/dist/oci-OQXOIC62.js +10 -0
- package/dist/postgres-AV45GNRS.js +7 -0
- package/dist/qingstor-W277YA4K.js +11 -0
- package/dist/r2-FUA4IORE.js +10 -0
- package/dist/redis-LPS357NF.js +8 -0
- package/dist/s3-FPNWWIVM.js +8 -0
- package/dist/scaleway-BP3732U7.js +11 -0
- package/dist/seaweedfs-MC6HIEP4.js +11 -0
- package/dist/slack-JFGW7VLN.js +7 -0
- package/dist/ssh-UYPG42LM.js +8 -0
- package/dist/ssh-UYPG42LM.js.map +1 -0
- package/dist/supabase-A3KUFMDC.js +10 -0
- package/dist/supabase-A3KUFMDC.js.map +1 -0
- package/dist/tencent-5464UQ2X.js +11 -0
- package/dist/tencent-5464UQ2X.js.map +1 -0
- package/dist/trello-O2KB3FUO.js +8 -0
- package/dist/trello-O2KB3FUO.js.map +1 -0
- package/dist/wasabi-2IKBIWNO.js +10 -0
- package/dist/wasabi-2IKBIWNO.js.map +1 -0
- package/package.json +17 -3
- package/dist/aliyun-JMJ3PFYY.js +0 -10
- package/dist/backblaze-TDFD23QO.js +0 -10
- package/dist/box-GQ2U2R6R.js +0 -8
- package/dist/ceph-S2VOYO6G.js +0 -10
- package/dist/chunk-2CC5VW7K.js +0 -52
- package/dist/chunk-2CC5VW7K.js.map +0 -1
- package/dist/chunk-A7IVFIOP.js.map +0 -1
- package/dist/chunk-B2ZOKNN4.js.map +0 -1
- package/dist/chunk-DNBAMB5J.js +0 -18
- package/dist/chunk-DNBAMB5J.js.map +0 -1
- package/dist/chunk-DP2PP5V2.js +0 -26
- package/dist/chunk-DP2PP5V2.js.map +0 -1
- package/dist/chunk-DYXEITK3.js +0 -52
- package/dist/chunk-DYXEITK3.js.map +0 -1
- package/dist/chunk-EGB7V74Z.js.map +0 -1
- package/dist/chunk-EM4J5EQS.js.map +0 -1
- package/dist/chunk-EZQ5HBAC.js.map +0 -1
- package/dist/chunk-G2WCEUQL.js.map +0 -1
- package/dist/chunk-GCFYZSVR.js.map +0 -1
- package/dist/chunk-GS5AUKUO.js.map +0 -1
- package/dist/chunk-H3BST2LI.js +0 -26
- package/dist/chunk-H3BST2LI.js.map +0 -1
- package/dist/chunk-H3I2KZIY.js.map +0 -1
- package/dist/chunk-IDYHQQOH.js.map +0 -1
- package/dist/chunk-JAGJTM3Q.js.map +0 -1
- package/dist/chunk-JALIYI6M.js.map +0 -1
- package/dist/chunk-JCC4CU2I.js.map +0 -1
- package/dist/chunk-JZT4QGIP.js +0 -24
- package/dist/chunk-JZT4QGIP.js.map +0 -1
- package/dist/chunk-LAJJPLEV.js.map +0 -1
- package/dist/chunk-LV2G7VHL.js.map +0 -1
- package/dist/chunk-LW25LMIH.js +0 -26
- package/dist/chunk-LW25LMIH.js.map +0 -1
- package/dist/chunk-M5FVUIYP.js.map +0 -1
- package/dist/chunk-MPCCRRE6.js.map +0 -1
- package/dist/chunk-NJMGCT63.js +0 -54
- package/dist/chunk-NJMGCT63.js.map +0 -1
- package/dist/chunk-NOHWIBRX.js.map +0 -1
- package/dist/chunk-OHROA3FQ.js +0 -54
- package/dist/chunk-OHROA3FQ.js.map +0 -1
- package/dist/chunk-OPYQ5KIO.js +0 -52
- package/dist/chunk-OPYQ5KIO.js.map +0 -1
- package/dist/chunk-OZAEWZZ3.js.map +0 -1
- package/dist/chunk-Q2IAILVC.js.map +0 -1
- package/dist/chunk-QCZ2XUKH.js.map +0 -1
- package/dist/chunk-QGRDPSAH.js.map +0 -1
- package/dist/chunk-RNQN2FOU.js.map +0 -1
- package/dist/chunk-RO5IQEDQ.js.map +0 -1
- package/dist/chunk-RQK5UPMP.js.map +0 -1
- package/dist/chunk-S5OVP467.js +0 -1795
- package/dist/chunk-S5OVP467.js.map +0 -1
- package/dist/chunk-SFUCUARB.js +0 -21
- package/dist/chunk-SFUCUARB.js.map +0 -1
- package/dist/chunk-SWCDFEUK.js.map +0 -1
- package/dist/chunk-TA3WMOMU.js.map +0 -1
- package/dist/chunk-TURD42QO.js +0 -1782
- package/dist/chunk-TURD42QO.js.map +0 -1
- package/dist/chunk-TWGVQLG2.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-VWKUT4CW.js.map +0 -1
- package/dist/chunk-W7FLHT65.js +0 -26
- package/dist/chunk-W7FLHT65.js.map +0 -1
- package/dist/chunk-WAR4Q2NM.js.map +0 -1
- package/dist/chunk-WHFUWWI6.js +0 -2097
- package/dist/chunk-WHFUWWI6.js.map +0 -1
- package/dist/chunk-XGJ2QERC.js.map +0 -1
- package/dist/chunk-XHCBHYN4.js +0 -54
- package/dist/chunk-XHCBHYN4.js.map +0 -1
- package/dist/chunk-XLQI4IT2.js +0 -54
- package/dist/chunk-XLQI4IT2.js.map +0 -1
- package/dist/chunk-XWVDS66D.js +0 -963
- package/dist/chunk-XWVDS66D.js.map +0 -1
- package/dist/chunk-YGZMVNN5.js +0 -54
- package/dist/chunk-YGZMVNN5.js.map +0 -1
- package/dist/chunk-YUK3X3B4.js +0 -27
- package/dist/chunk-YUK3X3B4.js.map +0 -1
- package/dist/chunk-ZEGAMJO2.js.map +0 -1
- package/dist/chunk-ZNWVJ6UW.js +0 -54
- 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-7XOUYSTY.js +0 -7
- package/dist/digitalocean-3CQ4CPPZ.js +0 -10
- package/dist/discord-BG7OSRJG.js +0 -8
- package/dist/disk-XVLBCVKE.js +0 -8
- package/dist/dropbox-74GYLV3R.js +0 -8
- package/dist/email-5IZ7OBQ4.js +0 -8
- package/dist/gcs-EMEYU2XT.js +0 -10
- package/dist/gdocs-R67TDPON.js +0 -8
- package/dist/gdrive-PRN2ALRK.js +0 -8
- package/dist/github-DV7E6OFV.js +0 -8
- package/dist/github_ci-Q554V5PA.js +0 -8
- package/dist/gmail-OLN2LT4O.js +0 -8
- package/dist/gsheets-H4RYMQJ5.js +0 -8
- package/dist/gslides-YLCHKJOM.js +0 -8
- package/dist/hf_buckets-DTKXKKFF.js +0 -10
- package/dist/hf_datasets-55C4APKR.js +0 -10
- package/dist/hf_models-RO5JR36V.js +0 -10
- package/dist/hf_spaces-ZVZ3EDRX.js +0 -10
- package/dist/langfuse-ACASJZ7O.js +0 -8
- package/dist/linear-IC37LZV7.js +0 -8
- package/dist/minio-HZ576XFQ.js +0 -10
- package/dist/mongodb-JVR62OIO.js +0 -7
- package/dist/notion-HKRPQMJS.js +0 -8
- package/dist/oci-ZLVECXTW.js +0 -10
- package/dist/postgres-P36Z2YN4.js +0 -7
- package/dist/qingstor-YLP6K3L4.js +0 -10
- package/dist/r2-RPK25ANI.js +0 -10
- package/dist/redis-V5ULXULL.js +0 -8
- package/dist/s3-4OIOCAAT.js +0 -8
- package/dist/scaleway-CCWCLUHB.js +0 -10
- package/dist/seaweedfs-QSWKF2FN.js +0 -10
- package/dist/slack-YPS7PII3.js +0 -8
- package/dist/ssh-YFP3SMTJ.js +0 -9
- package/dist/supabase-6CFTOKGZ.js +0 -10
- package/dist/tencent-IWZZOSQ4.js +0 -10
- package/dist/trello-XYKWZD6P.js +0 -8
- package/dist/wasabi-6Z4DC5S5.js +0 -10
- /package/dist/{aliyun-JMJ3PFYY.js.map → aliyun-S62BR3TB.js.map} +0 -0
- /package/dist/{backblaze-TDFD23QO.js.map → backblaze-4EKSW63F.js.map} +0 -0
- /package/dist/{box-GQ2U2R6R.js.map → box-ZPLZAGMK.js.map} +0 -0
- /package/dist/{ceph-S2VOYO6G.js.map → ceph-ALKLD3MO.js.map} +0 -0
- /package/dist/{chunk-HJJMP6IX.js.map → chunk-BZTVYOES.js.map} +0 -0
- /package/dist/{chunk-X5HF2OFP.js.map → chunk-ENW5BVYN.js.map} +0 -0
- /package/dist/{chunk-HGCRXJGP.js.map → chunk-ETIAW4YD.js.map} +0 -0
- /package/dist/{chunk-DM4GSE26.js.map → chunk-GMMQ3ZK4.js.map} +0 -0
- /package/dist/{chunk-N5FSLVKO.js.map → chunk-HCRYAFBI.js.map} +0 -0
- /package/dist/{chunk-UINQOUZR.js.map → chunk-OXEQSPND.js.map} +0 -0
- /package/dist/{config-34LHOGLM.js.map → config-2YBCHU2W.js.map} +0 -0
- /package/dist/{config-3BBWD5AB.js.map → config-3YRGRW72.js.map} +0 -0
- /package/dist/{config-3IVQJBNW.js.map → config-4GSOMUMF.js.map} +0 -0
- /package/dist/{config-4UDVSUQJ.js.map → config-5YBUWFUP.js.map} +0 -0
- /package/dist/{config-CMDBAPDH.js.map → config-5ZRKJTKG.js.map} +0 -0
- /package/dist/{config-CVZ2AGCO.js.map → config-A25LTL5W.js.map} +0 -0
- /package/dist/{config-D3RLSPNF.js.map → config-CLU7JABG.js.map} +0 -0
- /package/dist/{config-DG65OEG3.js.map → config-D2RF7L3N.js.map} +0 -0
- /package/dist/{config-EIHSP5DZ.js.map → config-E55TKM6K.js.map} +0 -0
- /package/dist/{config-EO23EY62.js.map → config-ELDOFRJW.js.map} +0 -0
- /package/dist/{config-GCQK6NJY.js.map → config-FPC3RBFD.js.map} +0 -0
- /package/dist/{config-GE4W4ZJC.js.map → config-FPM3LAW7.js.map} +0 -0
- /package/dist/{config-GHRUKEQ6.js.map → config-G3F54CS4.js.map} +0 -0
- /package/dist/{config-GVH27UPE.js.map → config-G43HRUI3.js.map} +0 -0
- /package/dist/{config-HKRMKD76.js.map → config-GG3WO5PB.js.map} +0 -0
- /package/dist/{config-HXVYIXP5.js.map → config-JUYBWAZE.js.map} +0 -0
- /package/dist/{config-IDZMEW73.js.map → config-LJ5T6TVA.js.map} +0 -0
- /package/dist/{config-IJJXGLBQ.js.map → config-MDSAE4O3.js.map} +0 -0
- /package/dist/{config-IVY5EQQ2.js.map → config-NRIOKK5T.js.map} +0 -0
- /package/dist/{config-KJOLGVB2.js.map → config-OYK2BSJK.js.map} +0 -0
- /package/dist/{config-KMVCVBYN.js.map → config-PB3KA2CE.js.map} +0 -0
- /package/dist/{config-KYTRXAB2.js.map → config-QY4IL3PH.js.map} +0 -0
- /package/dist/{config-LHFFXVYI.js.map → config-R4LAOEDS.js.map} +0 -0
- /package/dist/{config-NV5WXP64.js.map → config-RIAAD6RW.js.map} +0 -0
- /package/dist/{config-OT2TQQCN.js.map → config-SYNEQAUB.js.map} +0 -0
- /package/dist/{config-Q45Y46YT.js.map → config-TJKGYA2B.js.map} +0 -0
- /package/dist/{config-QAA646XB.js.map → config-UU27ALAA.js.map} +0 -0
- /package/dist/{config-QNMKWJ4M.js.map → config-UURRGA7U.js.map} +0 -0
- /package/dist/{config-QWCY3LBQ.js.map → config-VPLHQXVE.js.map} +0 -0
- /package/dist/{config-VM526IKB.js.map → config-WRACCRPN.js.map} +0 -0
- /package/dist/{config-WDAZFXYD.js.map → config-WVHKXEVE.js.map} +0 -0
- /package/dist/{config-ZFJYQZCH.js.map → config-XU7R36IE.js.map} +0 -0
- /package/dist/{config-ZV6G2ZEC.js.map → config-Y2KOUYSS.js.map} +0 -0
- /package/dist/{databricks_volume-7XOUYSTY.js.map → databricks_volume-CNCPTZHS.js.map} +0 -0
- /package/dist/{digitalocean-3CQ4CPPZ.js.map → digitalocean-DJZOUB6Q.js.map} +0 -0
- /package/dist/{discord-BG7OSRJG.js.map → discord-ETB2CADR.js.map} +0 -0
- /package/dist/{disk-XVLBCVKE.js.map → disk-WEHSTK3F.js.map} +0 -0
- /package/dist/{dropbox-74GYLV3R.js.map → dropbox-XN6PGLNE.js.map} +0 -0
- /package/dist/{email-5IZ7OBQ4.js.map → email-OV7XCP3T.js.map} +0 -0
- /package/dist/{gcs-EMEYU2XT.js.map → gcal-P56MRCGU.js.map} +0 -0
- /package/dist/{gdocs-R67TDPON.js.map → gcs-HFBIAE2C.js.map} +0 -0
- /package/dist/{gdrive-PRN2ALRK.js.map → gdocs-LQ3UXP3J.js.map} +0 -0
- /package/dist/{github-DV7E6OFV.js.map → gdrive-N6UBYLON.js.map} +0 -0
- /package/dist/{github_ci-Q554V5PA.js.map → github-BPZREGPI.js.map} +0 -0
- /package/dist/{gmail-OLN2LT4O.js.map → github_ci-7A4LUIZ7.js.map} +0 -0
- /package/dist/{gsheets-H4RYMQJ5.js.map → gmail-YED2MF6H.js.map} +0 -0
- /package/dist/{gslides-YLCHKJOM.js.map → gridfs-CPLQ4G62.js.map} +0 -0
- /package/dist/{hf_buckets-DTKXKKFF.js.map → gsheets-4BNIJPQ6.js.map} +0 -0
- /package/dist/{hf_datasets-55C4APKR.js.map → gslides-GDBYLO5A.js.map} +0 -0
- /package/dist/{hf_models-RO5JR36V.js.map → hf_buckets-FTJITQ3P.js.map} +0 -0
- /package/dist/{hf_spaces-ZVZ3EDRX.js.map → hf_datasets-6GXVKQD7.js.map} +0 -0
- /package/dist/{langfuse-ACASJZ7O.js.map → hf_models-PJPGZAC5.js.map} +0 -0
- /package/dist/{linear-IC37LZV7.js.map → hf_spaces-LFNFOLBF.js.map} +0 -0
- /package/dist/{minio-HZ576XFQ.js.map → jaeger-GCA6MJ6E.js.map} +0 -0
- /package/dist/{mongodb-JVR62OIO.js.map → lancedb-TJ5YSJY5.js.map} +0 -0
- /package/dist/{notion-HKRPQMJS.js.map → langfuse-RUMTUMXS.js.map} +0 -0
- /package/dist/{oci-ZLVECXTW.js.map → linear-BCE4KEAC.js.map} +0 -0
- /package/dist/{postgres-P36Z2YN4.js.map → minio-5SO6KBTK.js.map} +0 -0
- /package/dist/{qingstor-YLP6K3L4.js.map → mongodb-L5CMN2EE.js.map} +0 -0
- /package/dist/{r2-RPK25ANI.js.map → nextcloud-4O2LZVW2.js.map} +0 -0
- /package/dist/{redis-V5ULXULL.js.map → notion-RVKEAQ2M.js.map} +0 -0
- /package/dist/{s3-4OIOCAAT.js.map → oci-OQXOIC62.js.map} +0 -0
- /package/dist/{scaleway-CCWCLUHB.js.map → postgres-AV45GNRS.js.map} +0 -0
- /package/dist/{seaweedfs-QSWKF2FN.js.map → qingstor-W277YA4K.js.map} +0 -0
- /package/dist/{slack-YPS7PII3.js.map → r2-FUA4IORE.js.map} +0 -0
- /package/dist/{ssh-YFP3SMTJ.js.map → redis-LPS357NF.js.map} +0 -0
- /package/dist/{supabase-6CFTOKGZ.js.map → s3-FPNWWIVM.js.map} +0 -0
- /package/dist/{tencent-IWZZOSQ4.js.map → scaleway-BP3732U7.js.map} +0 -0
- /package/dist/{trello-XYKWZD6P.js.map → seaweedfs-MC6HIEP4.js.map} +0 -0
- /package/dist/{wasabi-6Z4DC5S5.js.map → slack-JFGW7VLN.js.map} +0 -0
|
@@ -0,0 +1,872 @@
|
|
|
1
|
+
// src/resource/disk/disk.ts
|
|
2
|
+
import {
|
|
3
|
+
chmod as chmod2,
|
|
4
|
+
mkdir as mkdir2,
|
|
5
|
+
readdir as readdir4,
|
|
6
|
+
readFile as readFile3,
|
|
7
|
+
stat as fsStat4,
|
|
8
|
+
statfs as fsStatfs,
|
|
9
|
+
writeFile as writeFile3
|
|
10
|
+
} from "fs/promises";
|
|
11
|
+
import path5 from "path";
|
|
12
|
+
import {
|
|
13
|
+
BaseResource,
|
|
14
|
+
CapacityState,
|
|
15
|
+
PathSpec,
|
|
16
|
+
ResourceName as ResourceName8,
|
|
17
|
+
makeResolveGlob,
|
|
18
|
+
mountKey,
|
|
19
|
+
mountPrefixOf as mountPrefixOf2
|
|
20
|
+
} from "@struktoai/mirage-core";
|
|
21
|
+
|
|
22
|
+
// src/commands/builtin/disk/index.ts
|
|
23
|
+
import { ResourceName as ResourceName6, makeGenericCommands } from "@struktoai/mirage-core";
|
|
24
|
+
|
|
25
|
+
// src/core/disk/append.ts
|
|
26
|
+
import { appendFile } from "fs/promises";
|
|
27
|
+
import { ResourceName, invalidateAfterWrite, record } from "@struktoai/mirage-core";
|
|
28
|
+
|
|
29
|
+
// src/core/disk/errors.ts
|
|
30
|
+
function diskError(err, spec) {
|
|
31
|
+
const code = err.code;
|
|
32
|
+
if (typeof code !== "string") return err;
|
|
33
|
+
const out = new Error(spec.virtual);
|
|
34
|
+
out.code = code;
|
|
35
|
+
out.virtualPath = spec.virtual;
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// src/core/disk/utils.ts
|
|
40
|
+
import path from "path";
|
|
41
|
+
import { lstripSlash } from "@struktoai/mirage-core";
|
|
42
|
+
import { norm, parent, gnuBasename } from "@struktoai/mirage-core";
|
|
43
|
+
function resolveSafe(root, virtual) {
|
|
44
|
+
const relative = lstripSlash(virtual);
|
|
45
|
+
const resolved = path.resolve(root, relative);
|
|
46
|
+
const rootResolved = path.resolve(root);
|
|
47
|
+
if (resolved !== rootResolved && !resolved.startsWith(rootResolved + path.sep)) {
|
|
48
|
+
throw new Error(`path escapes root: ${virtual}`);
|
|
49
|
+
}
|
|
50
|
+
return resolved;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// src/core/disk/append.ts
|
|
54
|
+
async function appendBytes(accessor, p, data) {
|
|
55
|
+
const start = performance.now();
|
|
56
|
+
const virtual = p.mountPath;
|
|
57
|
+
const full = resolveSafe(accessor.root, virtual);
|
|
58
|
+
try {
|
|
59
|
+
await appendFile(full, data);
|
|
60
|
+
} catch (err) {
|
|
61
|
+
throw diskError(err, p);
|
|
62
|
+
}
|
|
63
|
+
record("append", virtual, ResourceName.DISK, data.byteLength, start);
|
|
64
|
+
await invalidateAfterWrite(p);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// src/core/disk/constants.ts
|
|
68
|
+
var SCOPE_ERROR = 5e4;
|
|
69
|
+
|
|
70
|
+
// src/core/disk/copy.ts
|
|
71
|
+
import { copyFile, stat } from "fs/promises";
|
|
72
|
+
import { invalidateAfterWrite as invalidateAfterWrite2 } from "@struktoai/mirage-core";
|
|
73
|
+
async function copy(accessor, src, dst) {
|
|
74
|
+
const s = resolveSafe(accessor.root, src.mountPath);
|
|
75
|
+
const d = resolveSafe(accessor.root, dst.mountPath);
|
|
76
|
+
try {
|
|
77
|
+
await copyFile(s, d);
|
|
78
|
+
} catch (err) {
|
|
79
|
+
let blame = dst;
|
|
80
|
+
if (err.code === "ENOENT") {
|
|
81
|
+
const srcMissing = await stat(s).then(
|
|
82
|
+
() => false,
|
|
83
|
+
() => true
|
|
84
|
+
);
|
|
85
|
+
if (srcMissing) blame = src;
|
|
86
|
+
}
|
|
87
|
+
throw diskError(err, blame);
|
|
88
|
+
}
|
|
89
|
+
await invalidateAfterWrite2(dst);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// src/core/disk/write.ts
|
|
93
|
+
import { writeFile } from "fs/promises";
|
|
94
|
+
import { ResourceName as ResourceName2, invalidateAfterWrite as invalidateAfterWrite3, record as record2 } from "@struktoai/mirage-core";
|
|
95
|
+
async function writeBytes(accessor, p, data) {
|
|
96
|
+
const start = performance.now();
|
|
97
|
+
const virtual = p.mountPath;
|
|
98
|
+
const full = resolveSafe(accessor.root, virtual);
|
|
99
|
+
try {
|
|
100
|
+
await writeFile(full, data);
|
|
101
|
+
} catch (err) {
|
|
102
|
+
throw diskError(err, p);
|
|
103
|
+
}
|
|
104
|
+
record2("write", virtual, ResourceName2.DISK, data.byteLength, start);
|
|
105
|
+
await invalidateAfterWrite3(p);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// src/core/disk/create.ts
|
|
109
|
+
function create(accessor, path6) {
|
|
110
|
+
return writeBytes(accessor, path6, new Uint8Array());
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// src/core/disk/du/walk.ts
|
|
114
|
+
import { readdir, stat as stat2 } from "fs/promises";
|
|
115
|
+
import path2 from "path";
|
|
116
|
+
async function walkSizes(full) {
|
|
117
|
+
let total = 0;
|
|
118
|
+
let st;
|
|
119
|
+
try {
|
|
120
|
+
st = await stat2(full);
|
|
121
|
+
} catch {
|
|
122
|
+
return 0;
|
|
123
|
+
}
|
|
124
|
+
if (st.isFile()) return st.size;
|
|
125
|
+
if (!st.isDirectory()) return 0;
|
|
126
|
+
const entries2 = await readdir(full, { withFileTypes: true });
|
|
127
|
+
for (const e of entries2) {
|
|
128
|
+
const child = path2.join(full, e.name);
|
|
129
|
+
if (e.isDirectory()) total += await walkSizes(child);
|
|
130
|
+
else if (e.isFile()) {
|
|
131
|
+
try {
|
|
132
|
+
const cst = await stat2(child);
|
|
133
|
+
total += cst.size;
|
|
134
|
+
} catch {
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return total;
|
|
139
|
+
}
|
|
140
|
+
async function walkAll(accessor, full, entries2) {
|
|
141
|
+
let total = 0;
|
|
142
|
+
let st;
|
|
143
|
+
try {
|
|
144
|
+
st = await stat2(full);
|
|
145
|
+
} catch {
|
|
146
|
+
return 0;
|
|
147
|
+
}
|
|
148
|
+
if (st.isFile()) {
|
|
149
|
+
const rel = "/" + path2.relative(accessor.root, full).split(path2.sep).join("/");
|
|
150
|
+
entries2.push([rel, st.size]);
|
|
151
|
+
return st.size;
|
|
152
|
+
}
|
|
153
|
+
if (!st.isDirectory()) return 0;
|
|
154
|
+
const children = await readdir(full, { withFileTypes: true });
|
|
155
|
+
for (const e of children) {
|
|
156
|
+
const child = path2.join(full, e.name);
|
|
157
|
+
if (e.isDirectory()) {
|
|
158
|
+
total += await walkAll(accessor, child, entries2);
|
|
159
|
+
} else if (e.isFile()) {
|
|
160
|
+
try {
|
|
161
|
+
const cst = await stat2(child);
|
|
162
|
+
const rel = "/" + path2.relative(accessor.root, child).split(path2.sep).join("/");
|
|
163
|
+
entries2.push([rel, cst.size]);
|
|
164
|
+
total += cst.size;
|
|
165
|
+
} catch {
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return total;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// src/core/disk/du/entries.ts
|
|
173
|
+
import { compareCodePoints } from "@struktoai/mirage-core";
|
|
174
|
+
async function entries(accessor, p) {
|
|
175
|
+
const virtual = norm(p.mountPath);
|
|
176
|
+
const full = resolveSafe(accessor.root, virtual);
|
|
177
|
+
const entries2 = [];
|
|
178
|
+
const total = await walkAll(accessor, full, entries2);
|
|
179
|
+
entries2.sort((a, b) => compareCodePoints(a[0], b[0]));
|
|
180
|
+
return [entries2, total];
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// src/core/disk/du/size.ts
|
|
184
|
+
async function size(accessor, p) {
|
|
185
|
+
const virtual = p.mountPath;
|
|
186
|
+
const full = resolveSafe(accessor.root, virtual);
|
|
187
|
+
return walkSizes(full);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// src/core/disk/exists.ts
|
|
191
|
+
import { access } from "fs/promises";
|
|
192
|
+
async function exists(accessor, path6) {
|
|
193
|
+
const full = resolveSafe(accessor.root, path6.mountPath);
|
|
194
|
+
try {
|
|
195
|
+
await access(full);
|
|
196
|
+
return true;
|
|
197
|
+
} catch {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// src/core/disk/find.ts
|
|
203
|
+
import { readdir as readdir2, stat as stat3 } from "fs/promises";
|
|
204
|
+
import path3 from "path";
|
|
205
|
+
import {
|
|
206
|
+
buildTree,
|
|
207
|
+
emitStartPath,
|
|
208
|
+
keep,
|
|
209
|
+
startBasename,
|
|
210
|
+
compareCodePoints as compareCodePoints2
|
|
211
|
+
} from "@struktoai/mirage-core";
|
|
212
|
+
async function walk(ctx, full, current, depth) {
|
|
213
|
+
const opts = ctx.options;
|
|
214
|
+
if (opts.maxDepth !== null && opts.maxDepth !== void 0 && depth > opts.maxDepth) return;
|
|
215
|
+
let entries2;
|
|
216
|
+
try {
|
|
217
|
+
entries2 = await readdir2(full, { withFileTypes: true });
|
|
218
|
+
} catch {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
for (const e of entries2) {
|
|
222
|
+
const kind = e.isDirectory() ? "d" : "f";
|
|
223
|
+
const entryPath = current === "/" ? `/${e.name}` : `${current}/${e.name}`;
|
|
224
|
+
const entryName = e.name;
|
|
225
|
+
const entrySlashCount = (entryPath.match(/\//g) ?? []).length;
|
|
226
|
+
const entryDepth = entrySlashCount - ctx.baseDepth;
|
|
227
|
+
let accept = true;
|
|
228
|
+
if (opts.maxDepth !== null && opts.maxDepth !== void 0 && entryDepth > opts.maxDepth) {
|
|
229
|
+
accept = false;
|
|
230
|
+
}
|
|
231
|
+
let isEmpty = null;
|
|
232
|
+
if (accept && opts.empty === true) {
|
|
233
|
+
try {
|
|
234
|
+
isEmpty = kind === "f" ? (await stat3(path3.join(full, e.name))).size === 0 : (await readdir2(path3.join(full, e.name))).length === 0;
|
|
235
|
+
} catch {
|
|
236
|
+
isEmpty = null;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (accept && !keep(
|
|
240
|
+
{ key: entryPath, name: entryName, kind, depth: entryDepth, isEmpty },
|
|
241
|
+
ctx.tree,
|
|
242
|
+
opts.minDepth
|
|
243
|
+
)) {
|
|
244
|
+
accept = false;
|
|
245
|
+
}
|
|
246
|
+
if (accept && kind !== "f" && (opts.minSize != null || opts.maxSize != null)) {
|
|
247
|
+
if (opts.minSize != null && opts.minSize > 0) accept = false;
|
|
248
|
+
if (opts.maxSize != null && opts.maxSize < 0) accept = false;
|
|
249
|
+
}
|
|
250
|
+
if (accept && kind === "f" && (opts.minSize !== null || opts.maxSize !== null || opts.mtimeMin !== null || opts.mtimeMax !== null)) {
|
|
251
|
+
try {
|
|
252
|
+
const st = await stat3(path3.join(full, e.name));
|
|
253
|
+
if (opts.minSize !== null && opts.minSize !== void 0 && st.size < opts.minSize)
|
|
254
|
+
accept = false;
|
|
255
|
+
if (opts.maxSize !== null && opts.maxSize !== void 0 && st.size > opts.maxSize)
|
|
256
|
+
accept = false;
|
|
257
|
+
if (accept && (opts.mtimeMin !== void 0 || opts.mtimeMax !== void 0)) {
|
|
258
|
+
const mtime = st.mtime.getTime() / 1e3;
|
|
259
|
+
if (opts.mtimeMin !== null && opts.mtimeMin !== void 0 && mtime < opts.mtimeMin)
|
|
260
|
+
accept = false;
|
|
261
|
+
if (opts.mtimeMax !== null && opts.mtimeMax !== void 0 && mtime > opts.mtimeMax)
|
|
262
|
+
accept = false;
|
|
263
|
+
}
|
|
264
|
+
} catch {
|
|
265
|
+
accept = false;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
if (accept) ctx.results.push(entryPath);
|
|
269
|
+
if (kind === "d") {
|
|
270
|
+
await walk(ctx, path3.join(full, e.name), entryPath, depth + 1);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
async function find(accessor, p, options = {}) {
|
|
275
|
+
const virtual = norm(p.mountPath);
|
|
276
|
+
const startName = startBasename(p.virtual);
|
|
277
|
+
const full = resolveSafe(accessor.root, virtual);
|
|
278
|
+
const baseDepth = virtual === "/" ? 0 : (virtual.match(/\//g) ?? []).length;
|
|
279
|
+
const results = [];
|
|
280
|
+
const tree = options.tree ?? buildTree({
|
|
281
|
+
name: options.name,
|
|
282
|
+
iname: options.iname,
|
|
283
|
+
pathPattern: options.pathPattern,
|
|
284
|
+
type: options.type,
|
|
285
|
+
nameExclude: options.nameExclude,
|
|
286
|
+
orNames: options.orNames,
|
|
287
|
+
empty: options.empty
|
|
288
|
+
});
|
|
289
|
+
if (options.maxDepth == null || options.maxDepth >= 0) {
|
|
290
|
+
let isDir = false;
|
|
291
|
+
try {
|
|
292
|
+
isDir = (await stat3(full)).isDirectory();
|
|
293
|
+
} catch {
|
|
294
|
+
isDir = false;
|
|
295
|
+
}
|
|
296
|
+
let rootEmpty = null;
|
|
297
|
+
if (isDir && options.empty === true) {
|
|
298
|
+
try {
|
|
299
|
+
rootEmpty = (await readdir2(full)).length === 0;
|
|
300
|
+
} catch {
|
|
301
|
+
rootEmpty = null;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
emitStartPath(results, virtual, startName, {
|
|
305
|
+
kind: "d",
|
|
306
|
+
isEmpty: rootEmpty,
|
|
307
|
+
exists: isDir,
|
|
308
|
+
tree,
|
|
309
|
+
maxDepth: options.maxDepth,
|
|
310
|
+
minDepth: options.minDepth,
|
|
311
|
+
minSize: options.minSize,
|
|
312
|
+
maxSize: options.maxSize
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
await walk({ accessor, base: virtual, baseDepth, options, tree, results }, full, virtual, 0);
|
|
316
|
+
results.sort(compareCodePoints2);
|
|
317
|
+
return results;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// src/core/disk/mkdir.ts
|
|
321
|
+
import { mkdir as fsMkdir } from "fs/promises";
|
|
322
|
+
import {
|
|
323
|
+
invalidateAfterWrite as invalidateAfterWrite4,
|
|
324
|
+
invalidateAncestors,
|
|
325
|
+
norm as norm2
|
|
326
|
+
} from "@struktoai/mirage-core";
|
|
327
|
+
|
|
328
|
+
// src/core/disk/dest.ts
|
|
329
|
+
import { stat as fsStat } from "fs/promises";
|
|
330
|
+
import {
|
|
331
|
+
ancestors,
|
|
332
|
+
enotdir,
|
|
333
|
+
mountedPath
|
|
334
|
+
} from "@struktoai/mirage-core";
|
|
335
|
+
async function mkdirComponentError(root, spec, key) {
|
|
336
|
+
for (const component of ancestors(key)) {
|
|
337
|
+
try {
|
|
338
|
+
const st = await fsStat(resolveSafe(root, component));
|
|
339
|
+
if (!st.isDirectory()) return enotdir(mountedPath(spec, component));
|
|
340
|
+
} catch {
|
|
341
|
+
return null;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return null;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// src/core/disk/mkdir.ts
|
|
348
|
+
async function mkdir(accessor, path6, parents = false) {
|
|
349
|
+
const root = accessor.root;
|
|
350
|
+
const full = resolveSafe(root, path6.mountPath);
|
|
351
|
+
if (parents) {
|
|
352
|
+
try {
|
|
353
|
+
await fsMkdir(full, { recursive: true });
|
|
354
|
+
} catch (err) {
|
|
355
|
+
const named = err.code === "ENOTDIR" ? await mkdirComponentError(root, path6, norm2(path6.mountPath)) : null;
|
|
356
|
+
throw named ?? diskError(err, path6);
|
|
357
|
+
}
|
|
358
|
+
await invalidateAfterWrite4(path6);
|
|
359
|
+
await invalidateAncestors(path6);
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
try {
|
|
363
|
+
await fsMkdir(full);
|
|
364
|
+
} catch (err) {
|
|
365
|
+
throw diskError(err, path6);
|
|
366
|
+
}
|
|
367
|
+
await invalidateAfterWrite4(path6);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// src/core/disk/read.ts
|
|
371
|
+
import { open, readFile } from "fs/promises";
|
|
372
|
+
import { enoent, record as record3, ResourceName as ResourceName3 } from "@struktoai/mirage-core";
|
|
373
|
+
var CHUNK = 1 << 20;
|
|
374
|
+
async function read(accessor, path6) {
|
|
375
|
+
const start = performance.now();
|
|
376
|
+
const virtual = path6.mountPath;
|
|
377
|
+
const full = resolveSafe(accessor.root, virtual);
|
|
378
|
+
let data;
|
|
379
|
+
try {
|
|
380
|
+
data = await readFile(full);
|
|
381
|
+
} catch (err) {
|
|
382
|
+
if (err.code === "ENOENT") {
|
|
383
|
+
throw enoent(path6);
|
|
384
|
+
}
|
|
385
|
+
throw err;
|
|
386
|
+
}
|
|
387
|
+
record3("read", virtual, ResourceName3.DISK, data.byteLength, start);
|
|
388
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
389
|
+
}
|
|
390
|
+
async function readRange(accessor, path6, _index, offset, size2) {
|
|
391
|
+
const start = performance.now();
|
|
392
|
+
const virtual = path6.mountPath;
|
|
393
|
+
const full = resolveSafe(accessor.root, virtual);
|
|
394
|
+
let handle;
|
|
395
|
+
try {
|
|
396
|
+
handle = await open(full, "r");
|
|
397
|
+
} catch (err) {
|
|
398
|
+
if (err.code === "ENOENT") {
|
|
399
|
+
throw enoent(path6);
|
|
400
|
+
}
|
|
401
|
+
throw err;
|
|
402
|
+
}
|
|
403
|
+
try {
|
|
404
|
+
if (size2 !== null) {
|
|
405
|
+
const buf = Buffer.allocUnsafe(size2);
|
|
406
|
+
const { bytesRead } = await handle.read(buf, 0, size2, offset);
|
|
407
|
+
const out = new Uint8Array(buf.buffer, buf.byteOffset, bytesRead);
|
|
408
|
+
record3("read", virtual, ResourceName3.DISK, bytesRead, start);
|
|
409
|
+
return out;
|
|
410
|
+
}
|
|
411
|
+
const parts = [];
|
|
412
|
+
let total = 0;
|
|
413
|
+
let at = offset;
|
|
414
|
+
for (; ; ) {
|
|
415
|
+
const buf = Buffer.allocUnsafe(CHUNK);
|
|
416
|
+
const { bytesRead } = await handle.read(buf, 0, CHUNK, at);
|
|
417
|
+
if (bytesRead === 0) break;
|
|
418
|
+
parts.push(buf.subarray(0, bytesRead));
|
|
419
|
+
total += bytesRead;
|
|
420
|
+
at += bytesRead;
|
|
421
|
+
}
|
|
422
|
+
const joined = Buffer.concat(parts, total);
|
|
423
|
+
record3("read", virtual, ResourceName3.DISK, total, start);
|
|
424
|
+
return new Uint8Array(joined.buffer, joined.byteOffset, joined.byteLength);
|
|
425
|
+
} finally {
|
|
426
|
+
await handle.close();
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
// src/core/disk/readdir.ts
|
|
431
|
+
import { readdir as fsReaddir } from "fs/promises";
|
|
432
|
+
import {
|
|
433
|
+
IndexEntry,
|
|
434
|
+
ResourceType,
|
|
435
|
+
enoent as enoent2,
|
|
436
|
+
enotdir as enotdir2,
|
|
437
|
+
mountPrefixOf,
|
|
438
|
+
rstripSlash,
|
|
439
|
+
compareCodePoints as compareCodePoints3
|
|
440
|
+
} from "@struktoai/mirage-core";
|
|
441
|
+
async function readdir3(accessor, path6, index) {
|
|
442
|
+
const virtual = path6.pattern !== null ? path6.directory : path6.mountPath;
|
|
443
|
+
const mountPrefix = mountPrefixOf(path6.virtual, path6.resourcePath);
|
|
444
|
+
const virtualKey = rstripSlash(mountPrefix + virtual) || "/";
|
|
445
|
+
if (index !== void 0) {
|
|
446
|
+
const cached = await index.listDir(virtualKey);
|
|
447
|
+
if (cached.entries !== void 0 && cached.entries !== null) {
|
|
448
|
+
return cached.entries;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
const full = resolveSafe(accessor.root, virtual);
|
|
452
|
+
let entries2;
|
|
453
|
+
try {
|
|
454
|
+
entries2 = await fsReaddir(full);
|
|
455
|
+
} catch (err) {
|
|
456
|
+
const code = err.code;
|
|
457
|
+
if (code === "ENOTDIR") throw enotdir2(path6);
|
|
458
|
+
if (code === "ENOENT") throw enoent2(path6);
|
|
459
|
+
throw err;
|
|
460
|
+
}
|
|
461
|
+
const base = norm(virtual);
|
|
462
|
+
const dirPrefix = base === "/" ? "/" : `${base}/`;
|
|
463
|
+
const sorted = [...entries2].sort(compareCodePoints3);
|
|
464
|
+
const virtualEntries = sorted.map((e) => `${mountPrefix}${dirPrefix}${e}`);
|
|
465
|
+
if (index !== void 0) {
|
|
466
|
+
const indexEntries = sorted.map((name) => [
|
|
467
|
+
name,
|
|
468
|
+
new IndexEntry({
|
|
469
|
+
id: `${dirPrefix}${name}`,
|
|
470
|
+
name,
|
|
471
|
+
resourceType: ResourceType.FILE
|
|
472
|
+
})
|
|
473
|
+
]);
|
|
474
|
+
await index.setDir(virtualKey, indexEntries);
|
|
475
|
+
}
|
|
476
|
+
return virtualEntries;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// src/core/disk/rename.ts
|
|
480
|
+
import { rename as fsRename } from "fs/promises";
|
|
481
|
+
import {
|
|
482
|
+
enoent as enoent3,
|
|
483
|
+
invalidateAfterUnlink,
|
|
484
|
+
invalidateAfterWrite as invalidateAfterWrite5
|
|
485
|
+
} from "@struktoai/mirage-core";
|
|
486
|
+
async function rename(accessor, src, dst) {
|
|
487
|
+
const s = resolveSafe(accessor.root, src.mountPath);
|
|
488
|
+
const d = resolveSafe(accessor.root, dst.mountPath);
|
|
489
|
+
try {
|
|
490
|
+
await fsRename(s, d);
|
|
491
|
+
} catch (err) {
|
|
492
|
+
if (err.code === "ENOENT") {
|
|
493
|
+
throw enoent3(src);
|
|
494
|
+
}
|
|
495
|
+
throw err;
|
|
496
|
+
}
|
|
497
|
+
await invalidateAfterUnlink(src);
|
|
498
|
+
await invalidateAfterWrite5(dst);
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
// src/core/disk/rm.ts
|
|
502
|
+
import { rm } from "fs/promises";
|
|
503
|
+
import { invalidateAfterUnlink as invalidateAfterUnlink2 } from "@struktoai/mirage-core";
|
|
504
|
+
async function rmR(accessor, path6) {
|
|
505
|
+
const full = resolveSafe(accessor.root, path6.mountPath);
|
|
506
|
+
await rm(full, { recursive: true, force: true });
|
|
507
|
+
await invalidateAfterUnlink2(path6);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
// src/core/disk/rmdir.ts
|
|
511
|
+
import { rmdir as fsRmdir } from "fs/promises";
|
|
512
|
+
import { invalidateAfterUnlink as invalidateAfterUnlink3 } from "@struktoai/mirage-core";
|
|
513
|
+
async function rmdir(accessor, path6) {
|
|
514
|
+
const full = resolveSafe(accessor.root, path6.mountPath);
|
|
515
|
+
try {
|
|
516
|
+
await fsRmdir(full);
|
|
517
|
+
} catch (err) {
|
|
518
|
+
if (err.code === "ENOENT") return;
|
|
519
|
+
throw err;
|
|
520
|
+
}
|
|
521
|
+
await invalidateAfterUnlink3(path6);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
// src/core/disk/set_attrs.ts
|
|
525
|
+
import { chmod, stat as fsStat2, utimes } from "fs/promises";
|
|
526
|
+
import { enoent as enoent4 } from "@struktoai/mirage-core";
|
|
527
|
+
async function setAttrs(accessor, path6, fields) {
|
|
528
|
+
const full = resolveSafe(accessor.root, path6.mountPath);
|
|
529
|
+
let st;
|
|
530
|
+
try {
|
|
531
|
+
st = await fsStat2(full);
|
|
532
|
+
} catch (err) {
|
|
533
|
+
if (err.code === "ENOENT") throw enoent4(path6);
|
|
534
|
+
throw err;
|
|
535
|
+
}
|
|
536
|
+
const residual = {};
|
|
537
|
+
if (fields.mode !== void 0) {
|
|
538
|
+
const keep2 = st.isDirectory() ? 448 : 384;
|
|
539
|
+
await chmod(full, fields.mode | keep2);
|
|
540
|
+
if ((fields.mode | keep2) !== fields.mode) residual.mode = fields.mode;
|
|
541
|
+
}
|
|
542
|
+
if (fields.uid !== void 0) residual.uid = fields.uid;
|
|
543
|
+
if (fields.gid !== void 0) residual.gid = fields.gid;
|
|
544
|
+
if (fields.atime !== void 0 || fields.mtime !== void 0) {
|
|
545
|
+
const newAtime = fields.atime !== void 0 ? new Date(fields.atime) : st.atime;
|
|
546
|
+
const newMtime = fields.mtime !== void 0 ? new Date(fields.mtime) : st.mtime;
|
|
547
|
+
await utimes(full, newAtime, newMtime);
|
|
548
|
+
}
|
|
549
|
+
return residual;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
// src/core/disk/stat.ts
|
|
553
|
+
import { stat as fsStat3 } from "fs/promises";
|
|
554
|
+
import path4 from "path";
|
|
555
|
+
import { FileStat, FileType, guessType } from "@struktoai/mirage-core";
|
|
556
|
+
async function stat4(accessor, p) {
|
|
557
|
+
const virtual = p.mountPath;
|
|
558
|
+
const full = resolveSafe(accessor.root, virtual);
|
|
559
|
+
let st;
|
|
560
|
+
try {
|
|
561
|
+
st = await fsStat3(full);
|
|
562
|
+
} catch (err) {
|
|
563
|
+
throw diskError(err, p);
|
|
564
|
+
}
|
|
565
|
+
const modified = st.mtime.toISOString();
|
|
566
|
+
const name = path4.basename(full);
|
|
567
|
+
if (st.isDirectory()) {
|
|
568
|
+
return new FileStat({
|
|
569
|
+
name,
|
|
570
|
+
size: null,
|
|
571
|
+
modified,
|
|
572
|
+
type: FileType.DIRECTORY,
|
|
573
|
+
mode: st.mode & 4095,
|
|
574
|
+
atime: st.atime.toISOString()
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
return new FileStat({
|
|
578
|
+
name,
|
|
579
|
+
size: st.size,
|
|
580
|
+
modified,
|
|
581
|
+
fingerprint: modified,
|
|
582
|
+
type: guessType(name),
|
|
583
|
+
mode: st.mode & 4095,
|
|
584
|
+
atime: st.atime.toISOString()
|
|
585
|
+
});
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
// src/core/disk/stream.ts
|
|
589
|
+
import { createReadStream } from "fs";
|
|
590
|
+
import { enoent as enoent5, recordStream, ResourceName as ResourceName4 } from "@struktoai/mirage-core";
|
|
591
|
+
async function* stream(accessor, path6) {
|
|
592
|
+
const virtual = path6.mountPath;
|
|
593
|
+
const full = resolveSafe(accessor.root, virtual);
|
|
594
|
+
const rec = recordStream("read", virtual, ResourceName4.DISK);
|
|
595
|
+
const rs = createReadStream(full, { highWaterMark: 65536 });
|
|
596
|
+
try {
|
|
597
|
+
for await (const chunk of rs) {
|
|
598
|
+
const buf = chunk;
|
|
599
|
+
const u8 = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
600
|
+
if (rec !== null) rec.bytes += u8.byteLength;
|
|
601
|
+
yield u8;
|
|
602
|
+
}
|
|
603
|
+
} catch (err) {
|
|
604
|
+
if (err.code === "ENOENT") {
|
|
605
|
+
throw enoent5(path6);
|
|
606
|
+
}
|
|
607
|
+
throw err;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
// src/core/disk/truncate.ts
|
|
612
|
+
import { readFile as readFile2, writeFile as writeFile2 } from "fs/promises";
|
|
613
|
+
import { ResourceName as ResourceName5, invalidateAfterWrite as invalidateAfterWrite6, record as record4 } from "@struktoai/mirage-core";
|
|
614
|
+
async function truncate(accessor, path6, length) {
|
|
615
|
+
const start = performance.now();
|
|
616
|
+
const full = resolveSafe(accessor.root, path6.mountPath);
|
|
617
|
+
let data;
|
|
618
|
+
try {
|
|
619
|
+
data = await readFile2(full);
|
|
620
|
+
} catch (err) {
|
|
621
|
+
if (err.code === "ENOENT") {
|
|
622
|
+
data = Buffer.alloc(0);
|
|
623
|
+
} else {
|
|
624
|
+
throw err;
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
const out = new Uint8Array(length);
|
|
628
|
+
out.set(data.subarray(0, Math.min(data.byteLength, length)));
|
|
629
|
+
await writeFile2(full, out);
|
|
630
|
+
record4("truncate", path6.mountPath, ResourceName5.DISK, 0, start);
|
|
631
|
+
await invalidateAfterWrite6(path6);
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
// src/core/disk/unlink.ts
|
|
635
|
+
import { unlink as fsUnlink } from "fs/promises";
|
|
636
|
+
import { invalidateAfterUnlink as invalidateAfterUnlink4 } from "@struktoai/mirage-core";
|
|
637
|
+
async function unlink(accessor, path6) {
|
|
638
|
+
const full = resolveSafe(accessor.root, path6.mountPath);
|
|
639
|
+
try {
|
|
640
|
+
await fsUnlink(full);
|
|
641
|
+
} catch (err) {
|
|
642
|
+
if (err.code === "ENOENT") return;
|
|
643
|
+
throw err;
|
|
644
|
+
}
|
|
645
|
+
await invalidateAfterUnlink4(path6);
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
// src/commands/builtin/disk/io.ts
|
|
649
|
+
var DISK_IO = {
|
|
650
|
+
readdir: readdir3,
|
|
651
|
+
readBytes: read,
|
|
652
|
+
readRange,
|
|
653
|
+
readStream: stream,
|
|
654
|
+
stat: stat4,
|
|
655
|
+
isMounted: (a) => a.root !== "",
|
|
656
|
+
local: true,
|
|
657
|
+
maxGlobMatches: SCOPE_ERROR,
|
|
658
|
+
write: writeBytes,
|
|
659
|
+
exists,
|
|
660
|
+
mkdir,
|
|
661
|
+
unlink,
|
|
662
|
+
rmdir,
|
|
663
|
+
rmR,
|
|
664
|
+
rename,
|
|
665
|
+
copy,
|
|
666
|
+
create,
|
|
667
|
+
truncate,
|
|
668
|
+
append: appendBytes,
|
|
669
|
+
setAttrs,
|
|
670
|
+
find,
|
|
671
|
+
du: { size, entries }
|
|
672
|
+
};
|
|
673
|
+
|
|
674
|
+
// src/commands/builtin/disk/index.ts
|
|
675
|
+
var DISK_COMMANDS = [
|
|
676
|
+
...makeGenericCommands(ResourceName6.DISK, DISK_IO)
|
|
677
|
+
];
|
|
678
|
+
|
|
679
|
+
// src/accessor/disk.ts
|
|
680
|
+
import { Accessor } from "@struktoai/mirage-core";
|
|
681
|
+
var DiskAccessor = class extends Accessor {
|
|
682
|
+
root;
|
|
683
|
+
constructor(root) {
|
|
684
|
+
super();
|
|
685
|
+
this.root = root;
|
|
686
|
+
}
|
|
687
|
+
};
|
|
688
|
+
|
|
689
|
+
// src/ops/disk/index.ts
|
|
690
|
+
import { ResourceName as ResourceName7, makeGenericOps } from "@struktoai/mirage-core";
|
|
691
|
+
var DISK_OPS = makeGenericOps(ResourceName7.DISK, DISK_IO, {
|
|
692
|
+
mkdirParents: true
|
|
693
|
+
});
|
|
694
|
+
|
|
695
|
+
// src/resource/disk/prompt.ts
|
|
696
|
+
var DISK_PROMPT = `{prefix}
|
|
697
|
+
Local disk filesystem. Mirrors the configured root directory.
|
|
698
|
+
Standard commands: ls, cat, head, tail, grep, wc, find, tree, mkdir, touch, cp, mv, rm, tee.`;
|
|
699
|
+
|
|
700
|
+
// src/resource/disk/disk.ts
|
|
701
|
+
var globCore = makeResolveGlob(readdir3, SCOPE_ERROR);
|
|
702
|
+
async function walkFiles(root, current, out) {
|
|
703
|
+
const entries2 = await readdir4(current, { withFileTypes: true });
|
|
704
|
+
for (const e of entries2) {
|
|
705
|
+
const child = path5.join(current, e.name);
|
|
706
|
+
if (e.isDirectory()) {
|
|
707
|
+
await walkFiles(root, child, out);
|
|
708
|
+
} else if (e.isFile()) {
|
|
709
|
+
out.push(child);
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
var DiskResource = class extends BaseResource {
|
|
714
|
+
kind = ResourceName8.DISK;
|
|
715
|
+
cachesReads = false;
|
|
716
|
+
// byte store: stat() sizes every file from metadata
|
|
717
|
+
sizesAlwaysKnown = true;
|
|
718
|
+
indexTtl = 60;
|
|
719
|
+
prompt = DISK_PROMPT;
|
|
720
|
+
root;
|
|
721
|
+
accessor;
|
|
722
|
+
opsMap = {
|
|
723
|
+
read_bytes: read,
|
|
724
|
+
write: writeBytes,
|
|
725
|
+
readdir: readdir3,
|
|
726
|
+
stat: stat4,
|
|
727
|
+
unlink,
|
|
728
|
+
rmdir,
|
|
729
|
+
copy,
|
|
730
|
+
rename,
|
|
731
|
+
mkdir,
|
|
732
|
+
read_stream: stream,
|
|
733
|
+
rm_recursive: rmR,
|
|
734
|
+
du_size: size,
|
|
735
|
+
du_entries: entries,
|
|
736
|
+
create,
|
|
737
|
+
truncate,
|
|
738
|
+
exists,
|
|
739
|
+
find_flat: find,
|
|
740
|
+
append: appendBytes
|
|
741
|
+
};
|
|
742
|
+
constructor(options) {
|
|
743
|
+
super();
|
|
744
|
+
this.root = path5.resolve(options.root);
|
|
745
|
+
this.accessor = new DiskAccessor(this.root);
|
|
746
|
+
}
|
|
747
|
+
// The resolved root is the storage: two DiskResources built on the same
|
|
748
|
+
// directory are one store, however they were spelled.
|
|
749
|
+
storageId() {
|
|
750
|
+
return `${this.kind}:${this.root}`;
|
|
751
|
+
}
|
|
752
|
+
async open() {
|
|
753
|
+
await mkdir2(this.root, { recursive: true });
|
|
754
|
+
}
|
|
755
|
+
// A real filesystem reports real numbers (QUOTA). GNU df: used counts
|
|
756
|
+
// reserved blocks (blocks - bfree), available excludes them (bavail).
|
|
757
|
+
async statfs() {
|
|
758
|
+
const st = await fsStatfs(this.root);
|
|
759
|
+
const bsize = st.bsize;
|
|
760
|
+
return {
|
|
761
|
+
state: CapacityState.QUOTA,
|
|
762
|
+
total: st.blocks * bsize,
|
|
763
|
+
used: (st.blocks - st.bfree) * bsize,
|
|
764
|
+
available: st.bavail * bsize,
|
|
765
|
+
inodes: st.files,
|
|
766
|
+
inodesUsed: st.files - st.ffree,
|
|
767
|
+
inodesFree: st.ffree
|
|
768
|
+
};
|
|
769
|
+
}
|
|
770
|
+
ops() {
|
|
771
|
+
return DISK_OPS;
|
|
772
|
+
}
|
|
773
|
+
commands() {
|
|
774
|
+
return DISK_COMMANDS;
|
|
775
|
+
}
|
|
776
|
+
streamPath(p) {
|
|
777
|
+
return stream(this.accessor, p);
|
|
778
|
+
}
|
|
779
|
+
readFile(p) {
|
|
780
|
+
return read(this.accessor, p);
|
|
781
|
+
}
|
|
782
|
+
writeFile(p, data) {
|
|
783
|
+
return writeBytes(this.accessor, p, data);
|
|
784
|
+
}
|
|
785
|
+
appendFile(p, data) {
|
|
786
|
+
return appendBytes(this.accessor, p, data);
|
|
787
|
+
}
|
|
788
|
+
readdir(p) {
|
|
789
|
+
return readdir3(this.accessor, p, this.index);
|
|
790
|
+
}
|
|
791
|
+
stat(p) {
|
|
792
|
+
return stat4(this.accessor, p);
|
|
793
|
+
}
|
|
794
|
+
exists(p) {
|
|
795
|
+
return exists(this.accessor, p);
|
|
796
|
+
}
|
|
797
|
+
mkdir(p, options) {
|
|
798
|
+
return mkdir(this.accessor, p, options?.recursive === true);
|
|
799
|
+
}
|
|
800
|
+
rmdir(p) {
|
|
801
|
+
return rmdir(this.accessor, p);
|
|
802
|
+
}
|
|
803
|
+
unlink(p) {
|
|
804
|
+
return unlink(this.accessor, p);
|
|
805
|
+
}
|
|
806
|
+
rename(src, dst) {
|
|
807
|
+
return rename(this.accessor, src, dst);
|
|
808
|
+
}
|
|
809
|
+
truncate(p, length) {
|
|
810
|
+
return truncate(this.accessor, p, length);
|
|
811
|
+
}
|
|
812
|
+
copy(src, dst) {
|
|
813
|
+
return copy(this.accessor, src, dst);
|
|
814
|
+
}
|
|
815
|
+
rmR(p) {
|
|
816
|
+
return rmR(this.accessor, p);
|
|
817
|
+
}
|
|
818
|
+
du(p) {
|
|
819
|
+
return size(this.accessor, p);
|
|
820
|
+
}
|
|
821
|
+
find(p, options = {}) {
|
|
822
|
+
return find(this.accessor, p, options);
|
|
823
|
+
}
|
|
824
|
+
glob(paths, prefix = "") {
|
|
825
|
+
const effective = prefix ? paths.map(
|
|
826
|
+
(p) => mountPrefixOf2(p.virtual, p.resourcePath) ? p : new PathSpec({
|
|
827
|
+
virtual: p.virtual,
|
|
828
|
+
directory: p.directory,
|
|
829
|
+
...p.pattern !== null ? { pattern: p.pattern } : {},
|
|
830
|
+
resolved: p.resolved,
|
|
831
|
+
resourcePath: mountKey(p.virtual, prefix)
|
|
832
|
+
})
|
|
833
|
+
) : paths;
|
|
834
|
+
return globCore(this.accessor, effective, this.index);
|
|
835
|
+
}
|
|
836
|
+
async getState() {
|
|
837
|
+
await mkdir2(this.root, { recursive: true });
|
|
838
|
+
const files = {};
|
|
839
|
+
const modes = {};
|
|
840
|
+
const fileList = [];
|
|
841
|
+
await walkFiles(this.root, this.root, fileList);
|
|
842
|
+
for (const full of fileList) {
|
|
843
|
+
const rel = path5.relative(this.root, full).split(path5.sep).join("/");
|
|
844
|
+
const data = await readFile3(full);
|
|
845
|
+
files[rel] = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
846
|
+
modes[rel] = (await fsStat4(full)).mode & 4095;
|
|
847
|
+
}
|
|
848
|
+
return {
|
|
849
|
+
type: this.kind,
|
|
850
|
+
files,
|
|
851
|
+
modes
|
|
852
|
+
};
|
|
853
|
+
}
|
|
854
|
+
async loadState(state) {
|
|
855
|
+
await mkdir2(this.root, { recursive: true });
|
|
856
|
+
for (const [rel, data] of Object.entries(state.files)) {
|
|
857
|
+
const full = path5.join(this.root, rel);
|
|
858
|
+
await mkdir2(path5.dirname(full), { recursive: true });
|
|
859
|
+
await writeFile3(full, data);
|
|
860
|
+
const mode = state.modes?.[rel];
|
|
861
|
+
if (mode !== void 0) await chmod2(full, mode);
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
};
|
|
865
|
+
|
|
866
|
+
export {
|
|
867
|
+
DISK_COMMANDS,
|
|
868
|
+
DISK_OPS,
|
|
869
|
+
DISK_PROMPT,
|
|
870
|
+
DiskResource
|
|
871
|
+
};
|
|
872
|
+
//# sourceMappingURL=chunk-WG5YS6TC.js.map
|