@struktoai/mirage-node 0.0.3 → 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.
Files changed (430) hide show
  1. package/dist/aliyun-PGI57A43.js +10 -0
  2. package/dist/backblaze-TSPL6Y56.js +10 -0
  3. package/dist/box-7XTZYDSO.js +8 -0
  4. package/dist/cas.lua +15 -0
  5. package/dist/ceph-C265UI5T.js +10 -0
  6. package/dist/{chunk-I5THIMPP.js → chunk-25W4XQJZ.js} +5 -5
  7. package/dist/{chunk-QGRDPSAH.js → chunk-2ERLWAGG.js} +4 -2
  8. package/dist/chunk-2ERLWAGG.js.map +1 -0
  9. package/dist/{chunk-NJMGCT63.js → chunk-2QNPKPZZ.js} +7 -2
  10. package/dist/chunk-2QNPKPZZ.js.map +1 -0
  11. package/dist/{chunk-ZNWVJ6UW.js → chunk-3ASOQTZB.js} +7 -2
  12. package/dist/chunk-3ASOQTZB.js.map +1 -0
  13. package/dist/{chunk-WAR4Q2NM.js → chunk-3JZN3GYO.js} +13 -12
  14. package/dist/chunk-3JZN3GYO.js.map +1 -0
  15. package/dist/{chunk-S5OVP467.js → chunk-4GYB7DGC.js} +294 -705
  16. package/dist/chunk-4GYB7DGC.js.map +1 -0
  17. package/dist/{chunk-HJJMP6IX.js → chunk-4M73WHIE.js} +3 -3
  18. package/dist/{chunk-7CW3BMPH.js → chunk-4X6CLF4F.js} +3 -3
  19. package/dist/{chunk-QQBJC2FQ.js → chunk-5I7Q7RHW.js} +3 -3
  20. package/dist/{chunk-LV2G7VHL.js → chunk-5YRWF5RP.js} +17 -15
  21. package/dist/chunk-5YRWF5RP.js.map +1 -0
  22. package/dist/chunk-5ZHNPNDD.js +944 -0
  23. package/dist/chunk-5ZHNPNDD.js.map +1 -0
  24. package/dist/{chunk-VGLHY6BK.js → chunk-AULFV3KY.js} +1 -2
  25. package/dist/chunk-AULFV3KY.js.map +1 -0
  26. package/dist/{chunk-VWKUT4CW.js → chunk-BWLUBJQG.js} +19 -15
  27. package/dist/chunk-BWLUBJQG.js.map +1 -0
  28. package/dist/{chunk-X5HF2OFP.js → chunk-BWWU5T2D.js} +3 -3
  29. package/dist/chunk-C7TNKIK5.js +39 -0
  30. package/dist/chunk-C7TNKIK5.js.map +1 -0
  31. package/dist/{chunk-MPCCRRE6.js → chunk-CB76WPUS.js} +12 -13
  32. package/dist/chunk-CB76WPUS.js.map +1 -0
  33. package/dist/chunk-CGGO5NKD.js +1194 -0
  34. package/dist/chunk-CGGO5NKD.js.map +1 -0
  35. package/dist/{chunk-B2ZOKNN4.js → chunk-CQCTCW4S.js} +1 -2
  36. package/dist/chunk-CQCTCW4S.js.map +1 -0
  37. package/dist/{chunk-KPULTUOK.js → chunk-CXQGMFI7.js} +3 -3
  38. package/dist/{chunk-LW25LMIH.js → chunk-D3U7VQCG.js} +1 -2
  39. package/dist/{chunk-LW25LMIH.js.map → chunk-D3U7VQCG.js.map} +1 -1
  40. package/dist/{chunk-N5FSLVKO.js → chunk-DXU7NZPH.js} +3 -3
  41. package/dist/{chunk-XGJ2QERC.js → chunk-E3KXVEYI.js} +8 -4
  42. package/dist/chunk-E3KXVEYI.js.map +1 -0
  43. package/dist/{chunk-YAHRT6MB.js → chunk-EGZNOUMH.js} +3 -3
  44. package/dist/{chunk-DNBAMB5J.js → chunk-EVK6HH6Z.js} +1 -2
  45. package/dist/{chunk-DNBAMB5J.js.map → chunk-EVK6HH6Z.js.map} +1 -1
  46. package/dist/{chunk-HGCRXJGP.js → chunk-F5NWRF32.js} +3 -3
  47. package/dist/{chunk-GCFYZSVR.js → chunk-FRGTDZQT.js} +15 -10
  48. package/dist/chunk-FRGTDZQT.js.map +1 -0
  49. package/dist/{chunk-DYXEITK3.js → chunk-GF75O2EN.js} +4 -2
  50. package/dist/chunk-GF75O2EN.js.map +1 -0
  51. package/dist/{chunk-W7FLHT65.js → chunk-GTAS3QVC.js} +1 -2
  52. package/dist/{chunk-W7FLHT65.js.map → chunk-GTAS3QVC.js.map} +1 -1
  53. package/dist/{chunk-RQK5UPMP.js → chunk-H62XQZUM.js} +4 -3
  54. package/dist/chunk-H62XQZUM.js.map +1 -0
  55. package/dist/{chunk-UT2OPSN4.js → chunk-HCU3B6FW.js} +1 -2
  56. package/dist/chunk-HCU3B6FW.js.map +1 -0
  57. package/dist/chunk-HEDE2377.js +754 -0
  58. package/dist/chunk-HEDE2377.js.map +1 -0
  59. package/dist/{chunk-RNQN2FOU.js → chunk-HGIPWY5Y.js} +21 -10
  60. package/dist/chunk-HGIPWY5Y.js.map +1 -0
  61. package/dist/{chunk-Q2IAILVC.js → chunk-HSD24IP2.js} +8 -4
  62. package/dist/chunk-HSD24IP2.js.map +1 -0
  63. package/dist/{chunk-SWCDFEUK.js → chunk-HWQPEBID.js} +18 -14
  64. package/dist/chunk-HWQPEBID.js.map +1 -0
  65. package/dist/{chunk-SFUCUARB.js → chunk-IEHPTILN.js} +4 -4
  66. package/dist/chunk-IEHPTILN.js.map +1 -0
  67. package/dist/{chunk-M5FVUIYP.js → chunk-IEVLWEBO.js} +14 -13
  68. package/dist/chunk-IEVLWEBO.js.map +1 -0
  69. package/dist/{chunk-YUK3X3B4.js → chunk-IKJQOYI4.js} +1 -2
  70. package/dist/{chunk-YUK3X3B4.js.map → chunk-IKJQOYI4.js.map} +1 -1
  71. package/dist/{chunk-TA3WMOMU.js → chunk-IUXXZHY3.js} +16 -22
  72. package/dist/chunk-IUXXZHY3.js.map +1 -0
  73. package/dist/{chunk-EZQ5HBAC.js → chunk-JBDFYIN2.js} +12 -13
  74. package/dist/chunk-JBDFYIN2.js.map +1 -0
  75. package/dist/{chunk-JCC4CU2I.js → chunk-JEBH5APX.js} +14 -14
  76. package/dist/chunk-JEBH5APX.js.map +1 -0
  77. package/dist/{chunk-H3BST2LI.js → chunk-JHI2PHHD.js} +1 -2
  78. package/dist/{chunk-H3BST2LI.js.map → chunk-JHI2PHHD.js.map} +1 -1
  79. package/dist/{chunk-EGB7V74Z.js → chunk-KAWDDS27.js} +1 -3
  80. package/dist/chunk-KAWDDS27.js.map +1 -0
  81. package/dist/{chunk-DP2PP5V2.js → chunk-KGC2OGXI.js} +5 -4
  82. package/dist/chunk-KGC2OGXI.js.map +1 -0
  83. package/dist/{chunk-3WIO7NBR.js → chunk-L4GMDSMB.js} +3 -3
  84. package/dist/{chunk-47AVIIOT.js → chunk-L7FEZ7LU.js} +3 -3
  85. package/dist/{chunk-54NTYJEO.js → chunk-LPDLPRPS.js} +1 -3
  86. package/dist/{chunk-54NTYJEO.js.map → chunk-LPDLPRPS.js.map} +1 -1
  87. package/dist/{chunk-UGK4TAVK.js → chunk-LPLZLSMK.js} +1 -2
  88. package/dist/chunk-LPLZLSMK.js.map +1 -0
  89. package/dist/{chunk-EM4J5EQS.js → chunk-M6E7VK4D.js} +13 -13
  90. package/dist/chunk-M6E7VK4D.js.map +1 -0
  91. package/dist/{chunk-2CC5VW7K.js → chunk-MIQ3ECZM.js} +4 -2
  92. package/dist/chunk-MIQ3ECZM.js.map +1 -0
  93. package/dist/chunk-MRXTUFBZ.js +30 -0
  94. package/dist/chunk-MRXTUFBZ.js.map +1 -0
  95. package/dist/{chunk-RO5IQEDQ.js → chunk-NJ42VNXG.js} +1 -2
  96. package/dist/chunk-NJ42VNXG.js.map +1 -0
  97. package/dist/{chunk-AUHSTJJ3.js → chunk-NLXJMXVE.js} +3 -3
  98. package/dist/{chunk-E2ISWXLB.js → chunk-OQKNDS66.js} +1 -1
  99. package/dist/{chunk-E2ISWXLB.js.map → chunk-OQKNDS66.js.map} +1 -1
  100. package/dist/{chunk-IDYHQQOH.js → chunk-OSVZKYXS.js} +229 -378
  101. package/dist/chunk-OSVZKYXS.js.map +1 -0
  102. package/dist/{chunk-JAGJTM3Q.js → chunk-RHUEV4I7.js} +11 -12
  103. package/dist/chunk-RHUEV4I7.js.map +1 -0
  104. package/dist/{chunk-JALIYI6M.js → chunk-S4KVLPBR.js} +7 -2
  105. package/dist/chunk-S4KVLPBR.js.map +1 -0
  106. package/dist/{chunk-ZEGAMJO2.js → chunk-SAOQW6ZJ.js} +14 -14
  107. package/dist/chunk-SAOQW6ZJ.js.map +1 -0
  108. package/dist/{chunk-NOHWIBRX.js → chunk-SI4GMRXD.js} +13 -14
  109. package/dist/chunk-SI4GMRXD.js.map +1 -0
  110. package/dist/{chunk-X3G37FXT.js → chunk-SYMNWNC3.js} +3 -3
  111. package/dist/{chunk-DM4GSE26.js → chunk-TUNR4VUM.js} +3 -3
  112. package/dist/{chunk-XHCBHYN4.js → chunk-UAJYJP5C.js} +7 -2
  113. package/dist/chunk-UAJYJP5C.js.map +1 -0
  114. package/dist/{chunk-OPYQ5KIO.js → chunk-UYA3XL3J.js} +4 -2
  115. package/dist/chunk-UYA3XL3J.js.map +1 -0
  116. package/dist/{chunk-UINQOUZR.js → chunk-V7JVMG63.js} +3 -3
  117. package/dist/{chunk-LAJJPLEV.js → chunk-VBYIDRNU.js} +7 -3
  118. package/dist/chunk-VBYIDRNU.js.map +1 -0
  119. package/dist/{chunk-GS5AUKUO.js → chunk-VHED2STW.js} +10 -7
  120. package/dist/chunk-VHED2STW.js.map +1 -0
  121. package/dist/{chunk-JZT4QGIP.js → chunk-VIICUPWQ.js} +1 -2
  122. package/dist/{chunk-JZT4QGIP.js.map → chunk-VIICUPWQ.js.map} +1 -1
  123. package/dist/{chunk-QCZ2XUKH.js → chunk-VLRSOWHP.js} +16 -14
  124. package/dist/chunk-VLRSOWHP.js.map +1 -0
  125. package/dist/{chunk-XWVDS66D.js → chunk-W5ZLIQFR.js} +182 -381
  126. package/dist/chunk-W5ZLIQFR.js.map +1 -0
  127. package/dist/{chunk-YGZMVNN5.js → chunk-WTSSEUOZ.js} +7 -2
  128. package/dist/chunk-WTSSEUOZ.js.map +1 -0
  129. package/dist/{chunk-OHROA3FQ.js → chunk-WWP2STF5.js} +7 -2
  130. package/dist/chunk-WWP2STF5.js.map +1 -0
  131. package/dist/{chunk-IK2L4EN3.js → chunk-XADEMW6B.js} +3 -3
  132. package/dist/{chunk-FQ33BYFR.js → chunk-XEMLYWHK.js} +3 -3
  133. package/dist/{chunk-OZAEWZZ3.js → chunk-XFSEADPC.js} +6 -2
  134. package/dist/chunk-XFSEADPC.js.map +1 -0
  135. package/dist/{chunk-TWGVQLG2.js → chunk-XUUSWR4U.js} +1 -2
  136. package/dist/{chunk-TWGVQLG2.js.map → chunk-XUUSWR4U.js.map} +1 -1
  137. package/dist/{chunk-XLQI4IT2.js → chunk-YBVMZ7SR.js} +7 -2
  138. package/dist/chunk-YBVMZ7SR.js.map +1 -0
  139. package/dist/{chunk-A7IVFIOP.js → chunk-YRJICL2Q.js} +14 -14
  140. package/dist/chunk-YRJICL2Q.js.map +1 -0
  141. package/dist/{chunk-ZGSER5TG.js → chunk-ZM44MGC5.js} +3 -3
  142. package/dist/{chunk-G2WCEUQL.js → chunk-ZMREYTHA.js} +15 -14
  143. package/dist/chunk-ZMREYTHA.js.map +1 -0
  144. package/dist/{chunk-H3I2KZIY.js → chunk-ZPB3SLPK.js} +1 -2
  145. package/dist/{chunk-H3I2KZIY.js.map → chunk-ZPB3SLPK.js.map} +1 -1
  146. package/dist/chunk-ZPZQXHW2.js +1230 -0
  147. package/dist/chunk-ZPZQXHW2.js.map +1 -0
  148. package/dist/{config-34LHOGLM.js → config-2LASFFRD.js} +2 -4
  149. package/dist/config-3WDIJPTG.js +9 -0
  150. package/dist/config-4QV4QYI5.js +9 -0
  151. package/dist/{config-ZFJYQZCH.js → config-54USUVSE.js} +2 -4
  152. package/dist/config-5ZXN2T2H.js +9 -0
  153. package/dist/config-A2GQYJDB.js +9 -0
  154. package/dist/config-BBOLI7VE.js +9 -0
  155. package/dist/{config-VM526IKB.js → config-BIBFLUIR.js} +2 -4
  156. package/dist/{config-EO23EY62.js → config-CPYFOUQO.js} +2 -4
  157. package/dist/{config-3IVQJBNW.js → config-DWSJL3NH.js} +2 -4
  158. package/dist/config-E22XAGYN.js +9 -0
  159. package/dist/config-EHE52ZTK.js +9 -0
  160. package/dist/{config-GE4W4ZJC.js → config-EX3ZJTZI.js} +2 -4
  161. package/dist/{config-QNMKWJ4M.js → config-FRK7ZL37.js} +2 -4
  162. package/dist/{config-LHFFXVYI.js → config-HQXNFQZS.js} +2 -4
  163. package/dist/config-HTXOOAOD.js +9 -0
  164. package/dist/{config-HKRMKD76.js → config-IPNWAJHH.js} +2 -4
  165. package/dist/config-J2C53GOT.js +9 -0
  166. package/dist/config-K63RX6EU.js +9 -0
  167. package/dist/config-L7SBSH5L.js +9 -0
  168. package/dist/config-LEALEMKA.js +9 -0
  169. package/dist/{config-IVY5EQQ2.js → config-M3Z47VYU.js} +2 -4
  170. package/dist/{config-EIHSP5DZ.js → config-MZM3IPFM.js} +2 -4
  171. package/dist/{config-GHRUKEQ6.js → config-OJ2BPESH.js} +2 -4
  172. package/dist/{config-WDAZFXYD.js → config-QO2XUME4.js} +2 -4
  173. package/dist/config-QWQGOXQ5.js +9 -0
  174. package/dist/config-RI7IEZUF.js +9 -0
  175. package/dist/{config-CVZ2AGCO.js → config-SPW6NESU.js} +2 -6
  176. package/dist/{config-QAA646XB.js → config-T2IUIU5C.js} +2 -4
  177. package/dist/{config-NV5WXP64.js → config-UU27ALAA.js} +2 -4
  178. package/dist/config-VKKZGC7V.js +9 -0
  179. package/dist/config-W7EVPJNK.js +11 -0
  180. package/dist/config-WKQ3FGTZ.js +9 -0
  181. package/dist/config-WVILHDFV.js +11 -0
  182. package/dist/{config-Q45Y46YT.js → config-XU6D5C7E.js} +2 -4
  183. package/dist/databricks_volume-ETRDJVVQ.js +7 -0
  184. package/dist/digitalocean-QP72DR4J.js +10 -0
  185. package/dist/discord-BSN5RB3E.js +8 -0
  186. package/dist/disk-24NWTN2I.js +7 -0
  187. package/dist/dropbox-OSTZXSIE.js +8 -0
  188. package/dist/email-4ZFPSWIN.js +8 -0
  189. package/dist/gcs-PFWR6MIW.js +10 -0
  190. package/dist/gdocs-GPAZRQG5.js +8 -0
  191. package/dist/gdrive-XSX6A7B3.js +8 -0
  192. package/dist/github-EQ4NXUTA.js +8 -0
  193. package/dist/github_ci-QL5B2Q2N.js +8 -0
  194. package/dist/gmail-2TBT4CVH.js +8 -0
  195. package/dist/gridfs-KZRZ6SIB.js +9 -0
  196. package/dist/gsheets-N53WEXN2.js +8 -0
  197. package/dist/gslides-TATSARTH.js +8 -0
  198. package/dist/hf_buckets-BK7NGJWS.js +10 -0
  199. package/dist/hf_datasets-UQ5QGM4L.js +10 -0
  200. package/dist/hf_models-75LFCQCS.js +10 -0
  201. package/dist/hf_spaces-6T2KB3UC.js +10 -0
  202. package/dist/index.d.ts +494 -40
  203. package/dist/index.js +1193 -388
  204. package/dist/index.js.map +1 -1
  205. package/dist/langfuse-AMQCQWNE.js +8 -0
  206. package/dist/linear-V3TXO6CV.js +8 -0
  207. package/dist/minio-IZRZY4C5.js +10 -0
  208. package/dist/mongodb-VMKPQCPX.js +7 -0
  209. package/dist/nextcloud-5RHQCGDO.js +9 -0
  210. package/dist/notion-6PPNTQFM.js +8 -0
  211. package/dist/oci-CKYBSFZJ.js +10 -0
  212. package/dist/postgres-WIQBVL5M.js +7 -0
  213. package/dist/qingstor-AP4IIPLY.js +10 -0
  214. package/dist/r2-C4XGEWQY.js +10 -0
  215. package/dist/redis-6D55Q2WB.js +8 -0
  216. package/dist/s3-XQBI2CXN.js +8 -0
  217. package/dist/scaleway-SEZJVURB.js +10 -0
  218. package/dist/seaweedfs-3XYIAFU2.js +10 -0
  219. package/dist/slack-ZHXDJQY4.js +8 -0
  220. package/dist/ssh-X2MO7JOV.js +8 -0
  221. package/dist/supabase-BBM44UTM.js +10 -0
  222. package/dist/supabase-BBM44UTM.js.map +1 -0
  223. package/dist/tencent-X72USLJ7.js +10 -0
  224. package/dist/tencent-X72USLJ7.js.map +1 -0
  225. package/dist/trello-EER5NG7L.js +8 -0
  226. package/dist/trello-EER5NG7L.js.map +1 -0
  227. package/dist/wasabi-O4MVIUFG.js +10 -0
  228. package/dist/wasabi-O4MVIUFG.js.map +1 -0
  229. package/package.json +4 -2
  230. package/dist/aliyun-JMJ3PFYY.js +0 -10
  231. package/dist/backblaze-TDFD23QO.js +0 -10
  232. package/dist/box-GQ2U2R6R.js +0 -8
  233. package/dist/ceph-S2VOYO6G.js +0 -10
  234. package/dist/chunk-2CC5VW7K.js.map +0 -1
  235. package/dist/chunk-A7IVFIOP.js.map +0 -1
  236. package/dist/chunk-B2ZOKNN4.js.map +0 -1
  237. package/dist/chunk-DP2PP5V2.js.map +0 -1
  238. package/dist/chunk-DYXEITK3.js.map +0 -1
  239. package/dist/chunk-EGB7V74Z.js.map +0 -1
  240. package/dist/chunk-EM4J5EQS.js.map +0 -1
  241. package/dist/chunk-EZQ5HBAC.js.map +0 -1
  242. package/dist/chunk-G2WCEUQL.js.map +0 -1
  243. package/dist/chunk-GCFYZSVR.js.map +0 -1
  244. package/dist/chunk-GS5AUKUO.js.map +0 -1
  245. package/dist/chunk-IDYHQQOH.js.map +0 -1
  246. package/dist/chunk-JAGJTM3Q.js.map +0 -1
  247. package/dist/chunk-JALIYI6M.js.map +0 -1
  248. package/dist/chunk-JCC4CU2I.js.map +0 -1
  249. package/dist/chunk-LAJJPLEV.js.map +0 -1
  250. package/dist/chunk-LV2G7VHL.js.map +0 -1
  251. package/dist/chunk-M5FVUIYP.js.map +0 -1
  252. package/dist/chunk-MPCCRRE6.js.map +0 -1
  253. package/dist/chunk-NJMGCT63.js.map +0 -1
  254. package/dist/chunk-NOHWIBRX.js.map +0 -1
  255. package/dist/chunk-OHROA3FQ.js.map +0 -1
  256. package/dist/chunk-OPYQ5KIO.js.map +0 -1
  257. package/dist/chunk-OZAEWZZ3.js.map +0 -1
  258. package/dist/chunk-Q2IAILVC.js.map +0 -1
  259. package/dist/chunk-QCZ2XUKH.js.map +0 -1
  260. package/dist/chunk-QGRDPSAH.js.map +0 -1
  261. package/dist/chunk-RNQN2FOU.js.map +0 -1
  262. package/dist/chunk-RO5IQEDQ.js.map +0 -1
  263. package/dist/chunk-RQK5UPMP.js.map +0 -1
  264. package/dist/chunk-S5OVP467.js.map +0 -1
  265. package/dist/chunk-SFUCUARB.js.map +0 -1
  266. package/dist/chunk-SWCDFEUK.js.map +0 -1
  267. package/dist/chunk-TA3WMOMU.js.map +0 -1
  268. package/dist/chunk-TURD42QO.js +0 -1782
  269. package/dist/chunk-TURD42QO.js.map +0 -1
  270. package/dist/chunk-U6QSXTUS.js +0 -7
  271. package/dist/chunk-U6QSXTUS.js.map +0 -1
  272. package/dist/chunk-UGK4TAVK.js.map +0 -1
  273. package/dist/chunk-UT2OPSN4.js.map +0 -1
  274. package/dist/chunk-VGLHY6BK.js.map +0 -1
  275. package/dist/chunk-VWKUT4CW.js.map +0 -1
  276. package/dist/chunk-WAR4Q2NM.js.map +0 -1
  277. package/dist/chunk-WHFUWWI6.js +0 -2097
  278. package/dist/chunk-WHFUWWI6.js.map +0 -1
  279. package/dist/chunk-XGJ2QERC.js.map +0 -1
  280. package/dist/chunk-XHCBHYN4.js.map +0 -1
  281. package/dist/chunk-XLQI4IT2.js.map +0 -1
  282. package/dist/chunk-XWVDS66D.js.map +0 -1
  283. package/dist/chunk-YGZMVNN5.js.map +0 -1
  284. package/dist/chunk-ZEGAMJO2.js.map +0 -1
  285. package/dist/chunk-ZNWVJ6UW.js.map +0 -1
  286. package/dist/config-3BBWD5AB.js +0 -11
  287. package/dist/config-4UDVSUQJ.js +0 -11
  288. package/dist/config-CMDBAPDH.js +0 -11
  289. package/dist/config-D3RLSPNF.js +0 -11
  290. package/dist/config-DG65OEG3.js +0 -11
  291. package/dist/config-GCQK6NJY.js +0 -11
  292. package/dist/config-GVH27UPE.js +0 -11
  293. package/dist/config-HXVYIXP5.js +0 -11
  294. package/dist/config-IDZMEW73.js +0 -11
  295. package/dist/config-IJJXGLBQ.js +0 -11
  296. package/dist/config-KJOLGVB2.js +0 -11
  297. package/dist/config-KMVCVBYN.js +0 -15
  298. package/dist/config-KYTRXAB2.js +0 -15
  299. package/dist/config-OT2TQQCN.js +0 -11
  300. package/dist/config-QWCY3LBQ.js +0 -11
  301. package/dist/config-ZV6G2ZEC.js +0 -11
  302. package/dist/databricks_volume-7XOUYSTY.js +0 -7
  303. package/dist/digitalocean-3CQ4CPPZ.js +0 -10
  304. package/dist/discord-BG7OSRJG.js +0 -8
  305. package/dist/disk-XVLBCVKE.js +0 -8
  306. package/dist/dropbox-74GYLV3R.js +0 -8
  307. package/dist/email-5IZ7OBQ4.js +0 -8
  308. package/dist/gcs-EMEYU2XT.js +0 -10
  309. package/dist/gdocs-R67TDPON.js +0 -8
  310. package/dist/gdrive-PRN2ALRK.js +0 -8
  311. package/dist/github-DV7E6OFV.js +0 -8
  312. package/dist/github_ci-Q554V5PA.js +0 -8
  313. package/dist/gmail-OLN2LT4O.js +0 -8
  314. package/dist/gsheets-H4RYMQJ5.js +0 -8
  315. package/dist/gslides-YLCHKJOM.js +0 -8
  316. package/dist/hf_buckets-DTKXKKFF.js +0 -10
  317. package/dist/hf_datasets-55C4APKR.js +0 -10
  318. package/dist/hf_models-RO5JR36V.js +0 -10
  319. package/dist/hf_spaces-ZVZ3EDRX.js +0 -10
  320. package/dist/langfuse-ACASJZ7O.js +0 -8
  321. package/dist/linear-IC37LZV7.js +0 -8
  322. package/dist/minio-HZ576XFQ.js +0 -10
  323. package/dist/mongodb-JVR62OIO.js +0 -7
  324. package/dist/notion-HKRPQMJS.js +0 -8
  325. package/dist/oci-ZLVECXTW.js +0 -10
  326. package/dist/postgres-P36Z2YN4.js +0 -7
  327. package/dist/qingstor-YLP6K3L4.js +0 -10
  328. package/dist/r2-RPK25ANI.js +0 -10
  329. package/dist/redis-V5ULXULL.js +0 -8
  330. package/dist/s3-4OIOCAAT.js +0 -8
  331. package/dist/scaleway-CCWCLUHB.js +0 -10
  332. package/dist/seaweedfs-QSWKF2FN.js +0 -10
  333. package/dist/slack-YPS7PII3.js +0 -8
  334. package/dist/ssh-YFP3SMTJ.js +0 -9
  335. package/dist/supabase-6CFTOKGZ.js +0 -10
  336. package/dist/tencent-IWZZOSQ4.js +0 -10
  337. package/dist/trello-XYKWZD6P.js +0 -8
  338. package/dist/wasabi-6Z4DC5S5.js +0 -10
  339. /package/dist/{aliyun-JMJ3PFYY.js.map → aliyun-PGI57A43.js.map} +0 -0
  340. /package/dist/{backblaze-TDFD23QO.js.map → backblaze-TSPL6Y56.js.map} +0 -0
  341. /package/dist/{box-GQ2U2R6R.js.map → box-7XTZYDSO.js.map} +0 -0
  342. /package/dist/{ceph-S2VOYO6G.js.map → ceph-C265UI5T.js.map} +0 -0
  343. /package/dist/{chunk-I5THIMPP.js.map → chunk-25W4XQJZ.js.map} +0 -0
  344. /package/dist/{chunk-HJJMP6IX.js.map → chunk-4M73WHIE.js.map} +0 -0
  345. /package/dist/{chunk-7CW3BMPH.js.map → chunk-4X6CLF4F.js.map} +0 -0
  346. /package/dist/{chunk-QQBJC2FQ.js.map → chunk-5I7Q7RHW.js.map} +0 -0
  347. /package/dist/{chunk-X5HF2OFP.js.map → chunk-BWWU5T2D.js.map} +0 -0
  348. /package/dist/{chunk-KPULTUOK.js.map → chunk-CXQGMFI7.js.map} +0 -0
  349. /package/dist/{chunk-N5FSLVKO.js.map → chunk-DXU7NZPH.js.map} +0 -0
  350. /package/dist/{chunk-YAHRT6MB.js.map → chunk-EGZNOUMH.js.map} +0 -0
  351. /package/dist/{chunk-HGCRXJGP.js.map → chunk-F5NWRF32.js.map} +0 -0
  352. /package/dist/{chunk-3WIO7NBR.js.map → chunk-L4GMDSMB.js.map} +0 -0
  353. /package/dist/{chunk-47AVIIOT.js.map → chunk-L7FEZ7LU.js.map} +0 -0
  354. /package/dist/{chunk-AUHSTJJ3.js.map → chunk-NLXJMXVE.js.map} +0 -0
  355. /package/dist/{chunk-X3G37FXT.js.map → chunk-SYMNWNC3.js.map} +0 -0
  356. /package/dist/{chunk-DM4GSE26.js.map → chunk-TUNR4VUM.js.map} +0 -0
  357. /package/dist/{chunk-UINQOUZR.js.map → chunk-V7JVMG63.js.map} +0 -0
  358. /package/dist/{chunk-IK2L4EN3.js.map → chunk-XADEMW6B.js.map} +0 -0
  359. /package/dist/{chunk-FQ33BYFR.js.map → chunk-XEMLYWHK.js.map} +0 -0
  360. /package/dist/{chunk-ZGSER5TG.js.map → chunk-ZM44MGC5.js.map} +0 -0
  361. /package/dist/{config-34LHOGLM.js.map → config-2LASFFRD.js.map} +0 -0
  362. /package/dist/{config-3BBWD5AB.js.map → config-3WDIJPTG.js.map} +0 -0
  363. /package/dist/{config-3IVQJBNW.js.map → config-4QV4QYI5.js.map} +0 -0
  364. /package/dist/{config-4UDVSUQJ.js.map → config-54USUVSE.js.map} +0 -0
  365. /package/dist/{config-CMDBAPDH.js.map → config-5ZXN2T2H.js.map} +0 -0
  366. /package/dist/{config-CVZ2AGCO.js.map → config-A2GQYJDB.js.map} +0 -0
  367. /package/dist/{config-D3RLSPNF.js.map → config-BBOLI7VE.js.map} +0 -0
  368. /package/dist/{config-DG65OEG3.js.map → config-BIBFLUIR.js.map} +0 -0
  369. /package/dist/{config-EIHSP5DZ.js.map → config-CPYFOUQO.js.map} +0 -0
  370. /package/dist/{config-EO23EY62.js.map → config-DWSJL3NH.js.map} +0 -0
  371. /package/dist/{config-GCQK6NJY.js.map → config-E22XAGYN.js.map} +0 -0
  372. /package/dist/{config-GE4W4ZJC.js.map → config-EHE52ZTK.js.map} +0 -0
  373. /package/dist/{config-GHRUKEQ6.js.map → config-EX3ZJTZI.js.map} +0 -0
  374. /package/dist/{config-GVH27UPE.js.map → config-FRK7ZL37.js.map} +0 -0
  375. /package/dist/{config-HKRMKD76.js.map → config-HQXNFQZS.js.map} +0 -0
  376. /package/dist/{config-HXVYIXP5.js.map → config-HTXOOAOD.js.map} +0 -0
  377. /package/dist/{config-IDZMEW73.js.map → config-IPNWAJHH.js.map} +0 -0
  378. /package/dist/{config-IJJXGLBQ.js.map → config-J2C53GOT.js.map} +0 -0
  379. /package/dist/{config-IVY5EQQ2.js.map → config-K63RX6EU.js.map} +0 -0
  380. /package/dist/{config-KJOLGVB2.js.map → config-L7SBSH5L.js.map} +0 -0
  381. /package/dist/{config-KMVCVBYN.js.map → config-LEALEMKA.js.map} +0 -0
  382. /package/dist/{config-KYTRXAB2.js.map → config-M3Z47VYU.js.map} +0 -0
  383. /package/dist/{config-LHFFXVYI.js.map → config-MZM3IPFM.js.map} +0 -0
  384. /package/dist/{config-NV5WXP64.js.map → config-OJ2BPESH.js.map} +0 -0
  385. /package/dist/{config-OT2TQQCN.js.map → config-QO2XUME4.js.map} +0 -0
  386. /package/dist/{config-Q45Y46YT.js.map → config-QWQGOXQ5.js.map} +0 -0
  387. /package/dist/{config-QAA646XB.js.map → config-RI7IEZUF.js.map} +0 -0
  388. /package/dist/{config-QNMKWJ4M.js.map → config-SPW6NESU.js.map} +0 -0
  389. /package/dist/{config-QWCY3LBQ.js.map → config-T2IUIU5C.js.map} +0 -0
  390. /package/dist/{config-VM526IKB.js.map → config-UU27ALAA.js.map} +0 -0
  391. /package/dist/{config-WDAZFXYD.js.map → config-VKKZGC7V.js.map} +0 -0
  392. /package/dist/{config-ZFJYQZCH.js.map → config-W7EVPJNK.js.map} +0 -0
  393. /package/dist/{config-ZV6G2ZEC.js.map → config-WKQ3FGTZ.js.map} +0 -0
  394. /package/dist/{databricks_volume-7XOUYSTY.js.map → config-WVILHDFV.js.map} +0 -0
  395. /package/dist/{digitalocean-3CQ4CPPZ.js.map → config-XU6D5C7E.js.map} +0 -0
  396. /package/dist/{discord-BG7OSRJG.js.map → databricks_volume-ETRDJVVQ.js.map} +0 -0
  397. /package/dist/{disk-XVLBCVKE.js.map → digitalocean-QP72DR4J.js.map} +0 -0
  398. /package/dist/{dropbox-74GYLV3R.js.map → discord-BSN5RB3E.js.map} +0 -0
  399. /package/dist/{email-5IZ7OBQ4.js.map → disk-24NWTN2I.js.map} +0 -0
  400. /package/dist/{gcs-EMEYU2XT.js.map → dropbox-OSTZXSIE.js.map} +0 -0
  401. /package/dist/{gdocs-R67TDPON.js.map → email-4ZFPSWIN.js.map} +0 -0
  402. /package/dist/{gdrive-PRN2ALRK.js.map → gcs-PFWR6MIW.js.map} +0 -0
  403. /package/dist/{github-DV7E6OFV.js.map → gdocs-GPAZRQG5.js.map} +0 -0
  404. /package/dist/{github_ci-Q554V5PA.js.map → gdrive-XSX6A7B3.js.map} +0 -0
  405. /package/dist/{gmail-OLN2LT4O.js.map → github-EQ4NXUTA.js.map} +0 -0
  406. /package/dist/{gsheets-H4RYMQJ5.js.map → github_ci-QL5B2Q2N.js.map} +0 -0
  407. /package/dist/{gslides-YLCHKJOM.js.map → gmail-2TBT4CVH.js.map} +0 -0
  408. /package/dist/{hf_buckets-DTKXKKFF.js.map → gridfs-KZRZ6SIB.js.map} +0 -0
  409. /package/dist/{hf_datasets-55C4APKR.js.map → gsheets-N53WEXN2.js.map} +0 -0
  410. /package/dist/{hf_models-RO5JR36V.js.map → gslides-TATSARTH.js.map} +0 -0
  411. /package/dist/{hf_spaces-ZVZ3EDRX.js.map → hf_buckets-BK7NGJWS.js.map} +0 -0
  412. /package/dist/{langfuse-ACASJZ7O.js.map → hf_datasets-UQ5QGM4L.js.map} +0 -0
  413. /package/dist/{linear-IC37LZV7.js.map → hf_models-75LFCQCS.js.map} +0 -0
  414. /package/dist/{minio-HZ576XFQ.js.map → hf_spaces-6T2KB3UC.js.map} +0 -0
  415. /package/dist/{mongodb-JVR62OIO.js.map → langfuse-AMQCQWNE.js.map} +0 -0
  416. /package/dist/{notion-HKRPQMJS.js.map → linear-V3TXO6CV.js.map} +0 -0
  417. /package/dist/{oci-ZLVECXTW.js.map → minio-IZRZY4C5.js.map} +0 -0
  418. /package/dist/{postgres-P36Z2YN4.js.map → mongodb-VMKPQCPX.js.map} +0 -0
  419. /package/dist/{qingstor-YLP6K3L4.js.map → nextcloud-5RHQCGDO.js.map} +0 -0
  420. /package/dist/{r2-RPK25ANI.js.map → notion-6PPNTQFM.js.map} +0 -0
  421. /package/dist/{redis-V5ULXULL.js.map → oci-CKYBSFZJ.js.map} +0 -0
  422. /package/dist/{s3-4OIOCAAT.js.map → postgres-WIQBVL5M.js.map} +0 -0
  423. /package/dist/{scaleway-CCWCLUHB.js.map → qingstor-AP4IIPLY.js.map} +0 -0
  424. /package/dist/{seaweedfs-QSWKF2FN.js.map → r2-C4XGEWQY.js.map} +0 -0
  425. /package/dist/{slack-YPS7PII3.js.map → redis-6D55Q2WB.js.map} +0 -0
  426. /package/dist/{ssh-YFP3SMTJ.js.map → s3-XQBI2CXN.js.map} +0 -0
  427. /package/dist/{supabase-6CFTOKGZ.js.map → scaleway-SEZJVURB.js.map} +0 -0
  428. /package/dist/{tencent-IWZZOSQ4.js.map → seaweedfs-3XYIAFU2.js.map} +0 -0
  429. /package/dist/{trello-XYKWZD6P.js.map → slack-ZHXDJQY4.js.map} +0 -0
  430. /package/dist/{wasabi-6Z4DC5S5.js.map → ssh-X2MO7JOV.js.map} +0 -0
@@ -0,0 +1,1194 @@
1
+ import {
2
+ loadOptionalPeer
3
+ } from "./chunk-OQKNDS66.js";
4
+ import {
5
+ redactConfig
6
+ } from "./chunk-C7TNKIK5.js";
7
+
8
+ // src/resource/gridfs/gridfs.ts
9
+ import {
10
+ BaseResource,
11
+ PathSpec,
12
+ ResourceName as ResourceName12,
13
+ makeResolveGlob,
14
+ mountKey,
15
+ mountPrefixOf as mountPrefixOf4,
16
+ normalizeKeyPrefix
17
+ } from "@struktoai/mirage-core";
18
+
19
+ // src/accessor/gridfs.ts
20
+ import { Accessor } from "@struktoai/mirage-core";
21
+ var GridFSAccessor = class extends Accessor {
22
+ config;
23
+ clientPromise = null;
24
+ constructor(config) {
25
+ super();
26
+ this.config = config;
27
+ }
28
+ async client() {
29
+ this.clientPromise ??= this._connect();
30
+ return this.clientPromise;
31
+ }
32
+ async db() {
33
+ const client = await this.client();
34
+ return client.db(this.config.database);
35
+ }
36
+ async _connect() {
37
+ const mod = await loadOptionalPeer(() => import("mongodb"), {
38
+ feature: "GridFSResource",
39
+ packageName: "mongodb"
40
+ });
41
+ const client = new mod.MongoClient(this.config.uri);
42
+ await client.connect();
43
+ return client;
44
+ }
45
+ async close() {
46
+ if (this.clientPromise === null) return;
47
+ const client = await this.clientPromise;
48
+ this.clientPromise = null;
49
+ await client.close();
50
+ }
51
+ };
52
+
53
+ // src/commands/builtin/gridfs/index.ts
54
+ import {
55
+ ResourceName as ResourceName10,
56
+ makeFiletypeCommands,
57
+ makeGenericCommands
58
+ } from "@struktoai/mirage-core";
59
+
60
+ // src/core/gridfs/read.ts
61
+ import {
62
+ ResourceName,
63
+ enoent,
64
+ record,
65
+ revisionFor
66
+ } from "@struktoai/mirage-core";
67
+
68
+ // src/core/gridfs/_client.ts
69
+ import { keyPrefix as kp, mountPrefixOf } from "@struktoai/mirage-core";
70
+ var LATEST_SORT = { uploadDate: -1, _id: -1 };
71
+ var BATCH = 1e3;
72
+ var cachedModule = null;
73
+ async function loadGridFSModule() {
74
+ cachedModule ??= loadOptionalPeer(() => import("mongodb"), {
75
+ feature: "GridFSResource",
76
+ packageName: "mongodb"
77
+ });
78
+ return cachedModule;
79
+ }
80
+ function gridfsKey(path, config) {
81
+ return kp.apply(config.keyPrefix ?? "", path);
82
+ }
83
+ function gridfsPrefix(path, config) {
84
+ return kp.applyDir(config.keyPrefix ?? "", path);
85
+ }
86
+ function stripKeyPrefix(key, config) {
87
+ return kp.strip(config.keyPrefix ?? "", key);
88
+ }
89
+ function rawPathOf(path) {
90
+ const prefix = mountPrefixOf(path.virtual, path.resourcePath);
91
+ return prefix !== "" && path.virtual.startsWith(prefix) ? path.virtual.slice(prefix.length) || "/" : path.virtual;
92
+ }
93
+ function bucketName(config) {
94
+ return config.bucket ?? "fs";
95
+ }
96
+ async function filesColl(accessor) {
97
+ const db = await accessor.db();
98
+ return db.collection(`${bucketName(accessor.config)}.files`);
99
+ }
100
+ async function chunksColl(accessor) {
101
+ const db = await accessor.db();
102
+ return db.collection(`${bucketName(accessor.config)}.chunks`);
103
+ }
104
+ async function bucket(accessor) {
105
+ const mod = await loadGridFSModule();
106
+ const db = await accessor.db();
107
+ const options = {
108
+ bucketName: bucketName(accessor.config)
109
+ };
110
+ if (accessor.config.chunkSizeBytes !== void 0) {
111
+ options.chunkSizeBytes = accessor.config.chunkSizeBytes;
112
+ }
113
+ return new mod.GridFSBucket(db, options);
114
+ }
115
+ function escapeRegex(raw) {
116
+ let out = "";
117
+ for (const ch of raw) {
118
+ out += "\\^$.|?*+()[]{}".includes(ch) ? `\\${ch}` : ch;
119
+ }
120
+ return out;
121
+ }
122
+ function prefixQuery(pfx) {
123
+ if (pfx === "") return {};
124
+ return { filename: { $regex: `^${escapeRegex(pfx)}` } };
125
+ }
126
+ async function latestFile(accessor, key) {
127
+ const files = await filesColl(accessor);
128
+ const doc = await files.findOne({ filename: key }, { sort: LATEST_SORT });
129
+ return doc;
130
+ }
131
+ async function* iterLatest(accessor, query) {
132
+ const files = await filesColl(accessor);
133
+ const pipeline = [
134
+ { $match: query },
135
+ { $sort: { filename: 1, uploadDate: -1, _id: -1 } },
136
+ {
137
+ $group: {
138
+ _id: "$filename",
139
+ fid: { $first: "$_id" },
140
+ length: { $first: "$length" },
141
+ uploadDate: { $first: "$uploadDate" }
142
+ }
143
+ },
144
+ { $sort: { _id: 1 } }
145
+ ];
146
+ for await (const doc of files.aggregate(pipeline)) {
147
+ yield {
148
+ filename: doc._id,
149
+ _id: doc.fid,
150
+ length: doc.length,
151
+ uploadDate: doc.uploadDate
152
+ };
153
+ }
154
+ }
155
+ async function deleteAll(accessor, query) {
156
+ const files = await filesColl(accessor);
157
+ const chunks = await chunksColl(accessor);
158
+ const ids = [];
159
+ for await (const doc of files.find(query, { projection: { _id: 1 } })) {
160
+ ids.push(doc._id);
161
+ }
162
+ for (let i = 0; i < ids.length; i += BATCH) {
163
+ const batch = ids.slice(i, i + BATCH);
164
+ await chunks.deleteMany({ files_id: { $in: batch } });
165
+ await files.deleteMany({ _id: { $in: batch } });
166
+ }
167
+ }
168
+
169
+ // src/core/gridfs/read.ts
170
+ async function resolveFileId(accessor, path, key) {
171
+ const pinnedRevision = revisionFor(path.virtual);
172
+ if (pinnedRevision !== null) {
173
+ const mod = await loadGridFSModule();
174
+ const objectIdCtor = mod.ObjectId;
175
+ return new objectIdCtor(pinnedRevision);
176
+ }
177
+ const doc = await latestFile(accessor, key);
178
+ if (doc === null) throw enoent(path);
179
+ return doc._id;
180
+ }
181
+ async function downloadBytes(accessor, path, fileId, options = {}) {
182
+ const b = await bucket(accessor);
183
+ const streamOptions = {};
184
+ if (options.offset !== void 0 && options.offset !== 0) {
185
+ streamOptions.start = options.offset;
186
+ }
187
+ if (options.size !== void 0) {
188
+ streamOptions.end = (options.offset ?? 0) + options.size;
189
+ }
190
+ const readable = b.openDownloadStream(
191
+ fileId,
192
+ Object.keys(streamOptions).length > 0 ? streamOptions : void 0
193
+ );
194
+ const chunks = [];
195
+ let total = 0;
196
+ try {
197
+ for await (const chunk of readable) {
198
+ chunks.push(chunk);
199
+ total += chunk.byteLength;
200
+ }
201
+ } catch (err) {
202
+ if (err?.code === "ENOENT" || isNoFileError(err)) {
203
+ throw enoent(path);
204
+ }
205
+ throw err;
206
+ }
207
+ const out = new Uint8Array(total);
208
+ let offset = 0;
209
+ for (const c of chunks) {
210
+ out.set(c, offset);
211
+ offset += c.byteLength;
212
+ }
213
+ return out;
214
+ }
215
+ function isNoFileError(err) {
216
+ if (err === null || typeof err !== "object") return false;
217
+ const message = err.message ?? "";
218
+ return message.includes("FileNotFound");
219
+ }
220
+ async function read(accessor, path, _index, options = {}) {
221
+ const virtual = path.virtual;
222
+ const raw = rawPathOf(path);
223
+ const key = gridfsKey(raw, accessor.config);
224
+ const startMs = performance.now();
225
+ const fileId = await resolveFileId(accessor, path, key);
226
+ const bytes = await downloadBytes(accessor, path, fileId, options);
227
+ const revision = fileId.toString();
228
+ record("read", virtual, ResourceName.GRIDFS, bytes.byteLength, startMs, {
229
+ fingerprint: revision,
230
+ revision
231
+ });
232
+ return bytes;
233
+ }
234
+
235
+ // src/core/gridfs/stat.ts
236
+ import {
237
+ FileStat,
238
+ FileType,
239
+ enoent as enoent2,
240
+ gnuBasename,
241
+ guessType,
242
+ mountPrefixOf as mountPrefixOf2,
243
+ rstripSlash,
244
+ stripSlash
245
+ } from "@struktoai/mirage-core";
246
+ async function stat(accessor, path, index) {
247
+ const original = path.virtual;
248
+ const prefix = mountPrefixOf2(path.virtual, path.resourcePath);
249
+ const rawPath = prefix !== "" && original.startsWith(prefix) ? original.slice(prefix.length) || "/" : original;
250
+ const stripped = stripSlash(rawPath);
251
+ if (stripped === "") {
252
+ return new FileStat({ name: "/", type: FileType.DIRECTORY });
253
+ }
254
+ const hintsDirectory = rawPath.endsWith("/");
255
+ if (index !== void 0) {
256
+ const virtualKey = prefix !== "" ? `${prefix}/${stripped}` : "/" + stripped;
257
+ const lookup = await index.get(virtualKey);
258
+ if (lookup.entry !== void 0 && lookup.entry !== null) {
259
+ const entry = lookup.entry;
260
+ if (entry.resourceType === "folder") {
261
+ return new FileStat({ name: entry.name, type: FileType.DIRECTORY });
262
+ }
263
+ return new FileStat({
264
+ name: entry.name,
265
+ size: entry.size ?? null,
266
+ modified: entry.remoteTime !== "" ? entry.remoteTime : null,
267
+ type: guessType(entry.name)
268
+ });
269
+ }
270
+ const parent = virtualKey.replace(/\/[^/]*$/, "") || "/";
271
+ const parentListing = await index.listDir(parent);
272
+ if (parentListing.entries !== void 0 && parentListing.entries !== null) {
273
+ throw enoent2(path);
274
+ }
275
+ }
276
+ const { config } = accessor;
277
+ const key = gridfsKey(rawPath, config);
278
+ if (!hintsDirectory) {
279
+ const doc = await latestFile(accessor, key);
280
+ if (doc !== null) {
281
+ const revision = doc._id.toString();
282
+ return new FileStat({
283
+ name: gnuBasename(rawPath),
284
+ size: doc.length,
285
+ modified: doc.uploadDate.toISOString(),
286
+ fingerprint: revision,
287
+ revision,
288
+ type: guessType(rawPath),
289
+ extra: { file_id: revision }
290
+ });
291
+ }
292
+ }
293
+ const pfx = rstripSlash(key) + "/";
294
+ const files = await filesColl(accessor);
295
+ const probe = await files.findOne(
296
+ { filename: { $regex: `^${escapeRegex(pfx)}` } },
297
+ { projection: { _id: 1 } }
298
+ );
299
+ if (probe !== null) {
300
+ return new FileStat({ name: gnuBasename(rawPath) || "/", type: FileType.DIRECTORY });
301
+ }
302
+ throw enoent2(path);
303
+ }
304
+
305
+ // src/commands/builtin/gridfs/du.ts
306
+ import {
307
+ ResourceName as ResourceName4,
308
+ command,
309
+ duGeneric,
310
+ metadataProvision,
311
+ resolveGlobOf,
312
+ specOf
313
+ } from "@struktoai/mirage-core";
314
+
315
+ // src/core/gridfs/du.ts
316
+ import { rstripSlash as rstripSlash2 } from "@struktoai/mirage-core";
317
+ function duQuery(stem) {
318
+ if (stem === "") return {};
319
+ return {
320
+ $or: [{ filename: stem }, { filename: { $regex: `^${escapeRegex(stem + "/")}` } }]
321
+ };
322
+ }
323
+ async function du(accessor, path) {
324
+ const raw = rawPathOf(path);
325
+ const stem = rstripSlash2(gridfsKey(raw, accessor.config));
326
+ let total = 0;
327
+ for await (const doc of iterLatest(accessor, duQuery(stem))) {
328
+ total += doc.length;
329
+ }
330
+ return total;
331
+ }
332
+ async function duAll(accessor, path) {
333
+ const raw = rawPathOf(path);
334
+ const stem = rstripSlash2(gridfsKey(raw, accessor.config));
335
+ const entries = [];
336
+ let total = 0;
337
+ for await (const doc of iterLatest(accessor, duQuery(stem))) {
338
+ const entry = "/" + stripKeyPrefix(doc.filename, accessor.config);
339
+ entries.push([entry, doc.length]);
340
+ total += doc.length;
341
+ }
342
+ return [entries, total];
343
+ }
344
+
345
+ // src/core/gridfs/constants.ts
346
+ var SCOPE_ERROR = 5e3;
347
+
348
+ // src/core/gridfs/copy.ts
349
+ import { enoent as enoent3, invalidateAfterWrite } from "@struktoai/mirage-core";
350
+ async function copy(accessor, src, dst) {
351
+ const srcKey = gridfsKey(rawPathOf(src), accessor.config);
352
+ const dstKey = gridfsKey(rawPathOf(dst), accessor.config);
353
+ const doc = await latestFile(accessor, srcKey);
354
+ if (doc === null) throw enoent3(src);
355
+ const b = await bucket(accessor);
356
+ const readable = b.openDownloadStream(doc._id);
357
+ const upload = b.openUploadStream(dstKey);
358
+ await new Promise((resolve, reject) => {
359
+ upload.on("error", reject);
360
+ readable.on("error", reject);
361
+ upload.on("finish", () => {
362
+ resolve();
363
+ });
364
+ readable.pipe(upload);
365
+ });
366
+ await invalidateAfterWrite(dst);
367
+ }
368
+
369
+ // src/core/gridfs/create.ts
370
+ import { invalidateAfterWrite as invalidateAfterWrite3 } from "@struktoai/mirage-core";
371
+
372
+ // src/core/gridfs/write.ts
373
+ import { ResourceName as ResourceName2, invalidateAfterWrite as invalidateAfterWrite2, record as record2 } from "@struktoai/mirage-core";
374
+ async function uploadBytes(accessor, key, data) {
375
+ const b = await bucket(accessor);
376
+ const upload = b.openUploadStream(key);
377
+ await new Promise((resolve, reject) => {
378
+ upload.on("error", reject);
379
+ upload.on("finish", () => {
380
+ resolve();
381
+ });
382
+ upload.end(data);
383
+ });
384
+ }
385
+ async function write(accessor, path, data) {
386
+ const raw = rawPathOf(path);
387
+ const key = gridfsKey(raw, accessor.config);
388
+ const startMs = performance.now();
389
+ await uploadBytes(accessor, key, data);
390
+ record2("write", path.virtual, ResourceName2.GRIDFS, data.byteLength, startMs);
391
+ await invalidateAfterWrite2(path);
392
+ }
393
+
394
+ // src/core/gridfs/create.ts
395
+ async function create(accessor, path) {
396
+ const raw = rawPathOf(path);
397
+ await uploadBytes(accessor, gridfsKey(raw, accessor.config), new Uint8Array(0));
398
+ await invalidateAfterWrite3(path);
399
+ }
400
+
401
+ // src/core/gridfs/exists.ts
402
+ async function exists(accessor, path) {
403
+ try {
404
+ await stat(accessor, path);
405
+ return true;
406
+ } catch (err) {
407
+ if (err?.code === "ENOENT") return false;
408
+ throw err;
409
+ }
410
+ }
411
+
412
+ // src/core/gridfs/find.ts
413
+ import {
414
+ buildTree,
415
+ emitStartPath,
416
+ keep,
417
+ rstripSlash as rstripSlash3,
418
+ startBasename
419
+ } from "@struktoai/mirage-core";
420
+ function globRegex(pattern) {
421
+ if (pattern.includes("[") || pattern.includes("]")) return null;
422
+ let out = "";
423
+ for (const ch of pattern) {
424
+ if (ch === "*") out += "[^/]*";
425
+ else if (ch === "?") out += "[^/]";
426
+ else out += escapeRegex(ch);
427
+ }
428
+ return out;
429
+ }
430
+ function buildQuery(pfx, options, pushdown) {
431
+ const conds = [];
432
+ const base = prefixQuery(pfx);
433
+ if (Object.keys(base).length > 0) conds.push(base);
434
+ if (pushdown) {
435
+ const escaped = escapeRegex(pfx);
436
+ const globs = [
437
+ [options.name, ""],
438
+ [options.iname, "i"]
439
+ ];
440
+ for (const [pat, flags] of globs) {
441
+ if (pat === void 0 || pat === null) continue;
442
+ const rx = globRegex(pat);
443
+ if (rx === null) continue;
444
+ const regex = { $regex: `^${escaped}(.*/)?${rx}/?$` };
445
+ if (flags !== "") regex.$options = flags;
446
+ conds.push({ filename: regex });
447
+ }
448
+ if (options.type === "f") {
449
+ conds.push({ filename: { $not: { $regex: "/$" } } });
450
+ } else if (options.type === "d") {
451
+ conds.push({ filename: { $regex: "/$" } });
452
+ }
453
+ if (options.minSize != null || options.maxSize != null) {
454
+ const sizeCond = {};
455
+ if (options.minSize != null) sizeCond.$gte = options.minSize;
456
+ if (options.maxSize != null) sizeCond.$lte = options.maxSize;
457
+ conds.push({ $or: [{ length: sizeCond }, { filename: { $regex: "/$" } }] });
458
+ }
459
+ }
460
+ if (conds.length === 0) return {};
461
+ if (conds.length === 1) return conds[0] ?? {};
462
+ return { $and: conds };
463
+ }
464
+ async function find(accessor, path, options = {}) {
465
+ const raw = rawPathOf(path);
466
+ const startName = startBasename(path.virtual);
467
+ const pfx = gridfsPrefix(raw, accessor.config);
468
+ const results = [];
469
+ const seen = { descendant: false, marker: false };
470
+ const empty = options.empty === true;
471
+ const pushdown = options.tree === void 0 && options.nameExclude === void 0 && options.orNames === void 0 && options.pathPattern === void 0 && !empty;
472
+ const tree = options.tree ?? buildTree({
473
+ name: options.name,
474
+ iname: options.iname,
475
+ pathPattern: options.pathPattern,
476
+ type: options.type,
477
+ nameExclude: options.nameExclude,
478
+ orNames: options.orNames,
479
+ empty: options.empty
480
+ });
481
+ const query = buildQuery(pfx, options, pushdown);
482
+ const narrowed = JSON.stringify(query) !== JSON.stringify(prefixQuery(pfx));
483
+ for await (const doc of iterLatest(accessor, query)) {
484
+ const key = doc.filename;
485
+ if (key === pfx) {
486
+ seen.marker = true;
487
+ continue;
488
+ }
489
+ seen.descendant = true;
490
+ const relative = key.slice(pfx.length);
491
+ const depth = (relative.match(/\//g) ?? []).length + 1;
492
+ if (options.maxDepth !== null && options.maxDepth !== void 0 && depth > options.maxDepth) {
493
+ continue;
494
+ }
495
+ const isDir = key.endsWith("/");
496
+ const normKey = isDir ? key.slice(0, -1) : key;
497
+ const entryName = normKey.split("/").pop() ?? "";
498
+ const fullPath = rstripSlash3("/" + stripKeyPrefix(key, accessor.config)) || "/";
499
+ const size = doc.length;
500
+ const isEmpty = !empty ? null : isDir ? false : size === 0;
501
+ if (!keep(
502
+ { key: fullPath, name: entryName, kind: isDir ? "d" : "f", depth, isEmpty },
503
+ tree,
504
+ options.minDepth
505
+ )) {
506
+ continue;
507
+ }
508
+ if (options.minSize != null || options.maxSize != null) {
509
+ const effective = isDir ? 0 : size;
510
+ if (options.minSize != null && effective < options.minSize) continue;
511
+ if (options.maxSize != null && effective > options.maxSize) continue;
512
+ }
513
+ results.push(fullPath);
514
+ }
515
+ if (narrowed && !seen.descendant && !seen.marker) {
516
+ const files = await filesColl(accessor);
517
+ const probe = await files.findOne(
518
+ pfx === "" ? {} : { filename: { $regex: `^${escapeRegex(pfx)}` } },
519
+ { projection: { _id: 1 } }
520
+ );
521
+ seen.descendant = probe !== null;
522
+ }
523
+ const rootKey = rstripSlash3("/" + stripKeyPrefix(pfx, accessor.config)) || "/";
524
+ if (seen.descendant || seen.marker) {
525
+ emitStartPath(results, rootKey, startName, {
526
+ kind: "d",
527
+ isEmpty: empty ? false : null,
528
+ exists: true,
529
+ tree,
530
+ maxDepth: options.maxDepth,
531
+ minDepth: options.minDepth,
532
+ minSize: options.minSize,
533
+ maxSize: options.maxSize
534
+ });
535
+ }
536
+ return results.sort();
537
+ }
538
+
539
+ // src/core/gridfs/mkdir.ts
540
+ import { invalidateAfterWrite as invalidateAfterWrite4, invalidateAncestors } from "@struktoai/mirage-core";
541
+ async function mkdir(accessor, path, parents = false) {
542
+ const raw = rawPathOf(path);
543
+ const pfx = gridfsPrefix(raw, accessor.config);
544
+ if (pfx === "") return;
545
+ await uploadBytes(accessor, pfx, new Uint8Array(0));
546
+ await invalidateAfterWrite4(path);
547
+ if (parents) await invalidateAncestors(path);
548
+ }
549
+
550
+ // src/core/gridfs/readdir.ts
551
+ import {
552
+ IndexEntry,
553
+ ResourceType,
554
+ mountPrefixOf as mountPrefixOf3,
555
+ rstripSlash as rstripSlash4
556
+ } from "@struktoai/mirage-core";
557
+ async function readdir(accessor, path, index) {
558
+ const original = path.virtual;
559
+ const prefix = mountPrefixOf3(path.virtual, path.resourcePath);
560
+ const virtual = path.pattern !== null ? path.directory : original;
561
+ const rawPath = prefix !== "" && virtual.startsWith(prefix) ? virtual.slice(prefix.length) || "/" : virtual;
562
+ const virtualKey = rawPath === "/" ? "/" : rstripSlash4(rawPath) || "/";
563
+ const rawFullKey = prefix !== "" ? `${prefix}${virtualKey}` : virtualKey;
564
+ const fullVirtualKey = rstripSlash4(rawFullKey) || "/";
565
+ if (index !== void 0) {
566
+ const listing = await index.listDir(fullVirtualKey);
567
+ if (listing.entries !== void 0 && listing.entries !== null) {
568
+ return listing.entries;
569
+ }
570
+ }
571
+ const { config } = accessor;
572
+ const pfx = gridfsPrefix(rawPath, config);
573
+ const names = [];
574
+ const dirKeys = /* @__PURE__ */ new Set();
575
+ const sizes = /* @__PURE__ */ new Map();
576
+ const times = /* @__PURE__ */ new Map();
577
+ for await (const doc of iterLatest(accessor, prefixQuery(pfx))) {
578
+ const fname = doc.filename;
579
+ if (fname === pfx) continue;
580
+ const relative = fname.slice(pfx.length);
581
+ const slash = relative.indexOf("/");
582
+ if (slash === -1) {
583
+ const key = "/" + stripKeyPrefix(fname, config);
584
+ names.push(key);
585
+ sizes.set(key, doc.length);
586
+ times.set(key, doc.uploadDate.toISOString());
587
+ } else {
588
+ const child = pfx + relative.slice(0, slash);
589
+ const key = "/" + stripKeyPrefix(child, config);
590
+ if (!dirKeys.has(key)) {
591
+ names.push(key);
592
+ dirKeys.add(key);
593
+ }
594
+ }
595
+ }
596
+ names.sort();
597
+ if (names.length > SCOPE_ERROR) {
598
+ console.warn(
599
+ `gridfs readdir: ${fullVirtualKey} returned ${String(names.length)} entries (limit ${String(SCOPE_ERROR)})`
600
+ );
601
+ }
602
+ const virtualEntries = names.map((e) => prefix !== "" ? `${prefix}${e}` : e).sort();
603
+ if (index !== void 0) {
604
+ const indexEntries = names.map((e) => {
605
+ const name = e.split("/").pop() ?? "";
606
+ if (dirKeys.has(e)) {
607
+ return [name, new IndexEntry({ id: e, name, resourceType: ResourceType.FOLDER })];
608
+ }
609
+ return [
610
+ name,
611
+ new IndexEntry({
612
+ id: e,
613
+ name,
614
+ resourceType: ResourceType.FILE,
615
+ size: sizes.get(e) ?? null,
616
+ remoteTime: times.get(e) ?? ""
617
+ })
618
+ ];
619
+ });
620
+ await index.setDir(fullVirtualKey, indexEntries);
621
+ }
622
+ return virtualEntries;
623
+ }
624
+
625
+ // src/core/gridfs/rename.ts
626
+ import {
627
+ enoent as enoent4,
628
+ invalidateAfterUnlink,
629
+ invalidateAfterWrite as invalidateAfterWrite5
630
+ } from "@struktoai/mirage-core";
631
+ async function rename(accessor, src, dst) {
632
+ const srcKey = gridfsKey(rawPathOf(src), accessor.config);
633
+ const dstKey = gridfsKey(rawPathOf(dst), accessor.config);
634
+ if (await latestFile(accessor, srcKey) === null) {
635
+ throw enoent4(src);
636
+ }
637
+ await deleteAll(accessor, { filename: dstKey });
638
+ const files = await filesColl(accessor);
639
+ await files.updateMany({ filename: srcKey }, { $set: { filename: dstKey } });
640
+ await invalidateAfterWrite5(dst);
641
+ await invalidateAfterUnlink(src);
642
+ }
643
+
644
+ // src/core/gridfs/rm.ts
645
+ import { invalidateAfterUnlink as invalidateAfterUnlink2 } from "@struktoai/mirage-core";
646
+ async function rmR(accessor, path) {
647
+ const raw = rawPathOf(path);
648
+ const pfx = gridfsPrefix(raw, accessor.config);
649
+ await deleteAll(accessor, prefixQuery(pfx));
650
+ await invalidateAfterUnlink2(path);
651
+ }
652
+
653
+ // src/core/gridfs/rmdir.ts
654
+ import { invalidateAfterUnlink as invalidateAfterUnlink3 } from "@struktoai/mirage-core";
655
+ async function rmdir(accessor, path) {
656
+ const raw = rawPathOf(path);
657
+ const pfx = gridfsPrefix(raw, accessor.config);
658
+ await deleteAll(accessor, prefixQuery(pfx));
659
+ await invalidateAfterUnlink3(path);
660
+ }
661
+
662
+ // src/core/gridfs/stream.ts
663
+ import { ResourceName as ResourceName3, enoent as enoent5, recordStream } from "@struktoai/mirage-core";
664
+ var DEFAULT_CHUNK_SIZE = 8192;
665
+ async function* stream(accessor, path) {
666
+ const virtual = path.virtual;
667
+ const raw = rawPathOf(path);
668
+ const key = gridfsKey(raw, accessor.config);
669
+ const rec = recordStream("read", virtual, ResourceName3.GRIDFS);
670
+ const fileId = await resolveFileId(accessor, path, key);
671
+ if (rec !== null) {
672
+ const revision = fileId.toString();
673
+ rec.fingerprint = revision;
674
+ rec.revision = revision;
675
+ }
676
+ const b = await bucket(accessor);
677
+ const readable = b.openDownloadStream(fileId);
678
+ let pending = new Uint8Array(0);
679
+ try {
680
+ for await (const chunk of readable) {
681
+ const merged = new Uint8Array(pending.byteLength + chunk.byteLength);
682
+ merged.set(pending, 0);
683
+ merged.set(chunk, pending.byteLength);
684
+ pending = merged;
685
+ while (pending.byteLength >= DEFAULT_CHUNK_SIZE) {
686
+ const piece = pending.slice(0, DEFAULT_CHUNK_SIZE);
687
+ if (rec !== null) rec.bytes += piece.byteLength;
688
+ yield piece;
689
+ pending = pending.slice(DEFAULT_CHUNK_SIZE);
690
+ }
691
+ }
692
+ } catch (err) {
693
+ if (isNoFileError(err)) throw enoent5(path);
694
+ throw err;
695
+ }
696
+ if (pending.byteLength > 0) {
697
+ if (rec !== null) rec.bytes += pending.byteLength;
698
+ yield pending;
699
+ }
700
+ }
701
+ async function rangeRead(accessor, path, offset, size) {
702
+ return read(accessor, path, void 0, { offset, size });
703
+ }
704
+
705
+ // src/core/gridfs/truncate.ts
706
+ import { invalidateAfterWrite as invalidateAfterWrite6 } from "@struktoai/mirage-core";
707
+ async function truncate(accessor, path, length) {
708
+ const raw = rawPathOf(path);
709
+ const key = gridfsKey(raw, accessor.config);
710
+ const doc = await latestFile(accessor, key);
711
+ let data = doc === null ? new Uint8Array(0) : await downloadBytes(accessor, path, doc._id);
712
+ if (data.byteLength > length) {
713
+ data = data.slice(0, length);
714
+ } else if (data.byteLength < length) {
715
+ const padded = new Uint8Array(length);
716
+ padded.set(data, 0);
717
+ data = padded;
718
+ }
719
+ await uploadBytes(accessor, key, data);
720
+ await invalidateAfterWrite6(path);
721
+ }
722
+
723
+ // src/core/gridfs/unlink.ts
724
+ import { invalidateAfterUnlink as invalidateAfterUnlink4 } from "@struktoai/mirage-core";
725
+ async function unlink(accessor, path) {
726
+ const raw = rawPathOf(path);
727
+ const key = gridfsKey(raw, accessor.config);
728
+ await deleteAll(accessor, { filename: key });
729
+ await invalidateAfterUnlink4(path);
730
+ }
731
+
732
+ // src/commands/builtin/gridfs/io.ts
733
+ var GRIDFS_IO = {
734
+ readdir,
735
+ readBytes: read,
736
+ readStream: stream,
737
+ stat,
738
+ isMounted: () => true,
739
+ local: false,
740
+ maxGlobMatches: SCOPE_ERROR,
741
+ write,
742
+ exists,
743
+ mkdir,
744
+ unlink,
745
+ rmdir,
746
+ rmR,
747
+ rename,
748
+ copy,
749
+ create,
750
+ truncate,
751
+ find,
752
+ duTotal: du,
753
+ duAll
754
+ };
755
+
756
+ // src/commands/builtin/gridfs/du.ts
757
+ var resolveGlob = resolveGlobOf(GRIDFS_IO);
758
+ async function duCommand(accessor, paths, _texts, opts) {
759
+ const resolved = paths.length > 0 ? await resolveGlob(accessor, paths, opts.index ?? void 0) : [];
760
+ return duGeneric(
761
+ resolved,
762
+ opts,
763
+ (p) => du(accessor, p),
764
+ (p) => duAll(accessor, p)
765
+ );
766
+ }
767
+ var GRIDFS_DU = command({
768
+ name: "du",
769
+ resource: ResourceName4.GRIDFS,
770
+ spec: specOf("du"),
771
+ fn: duCommand,
772
+ provision: metadataProvision
773
+ });
774
+
775
+ // src/commands/builtin/gridfs/mkdir.ts
776
+ import {
777
+ IOResult,
778
+ ResourceName as ResourceName5,
779
+ command as command2,
780
+ resolveGlobOf as resolveGlobOf2,
781
+ specOf as specOf2,
782
+ writeMetadataProvision
783
+ } from "@struktoai/mirage-core";
784
+ var resolveGlob2 = resolveGlobOf2(GRIDFS_IO);
785
+ var ENC = new TextEncoder();
786
+ async function mkdirCommand(accessor, paths, _texts, opts) {
787
+ if (paths.length === 0) {
788
+ return [null, new IOResult({ exitCode: 1, stderr: ENC.encode("mkdir: missing operand\n") })];
789
+ }
790
+ const resolved = await resolveGlob2(accessor, paths, opts.index ?? void 0);
791
+ const verbose = opts.flags.v === true;
792
+ const parents = opts.flags.p === true;
793
+ const lines = [];
794
+ const writes = {};
795
+ for (const path of resolved) {
796
+ await mkdir(accessor, path, parents);
797
+ writes[path.mountPath] = new Uint8Array();
798
+ if (verbose) lines.push(`mkdir: created directory '${path.virtual}'`);
799
+ }
800
+ const output = lines.length > 0 ? ENC.encode(lines.join("\n") + "\n") : null;
801
+ return [output, new IOResult({ writes })];
802
+ }
803
+ var GRIDFS_MKDIR = command2({
804
+ name: "mkdir",
805
+ resource: ResourceName5.GRIDFS,
806
+ spec: specOf2("mkdir"),
807
+ fn: mkdirCommand,
808
+ write: true,
809
+ provision: writeMetadataProvision
810
+ });
811
+
812
+ // src/commands/builtin/gridfs/rm.ts
813
+ import {
814
+ FileType as FileType2,
815
+ IOResult as IOResult2,
816
+ ResourceName as ResourceName6,
817
+ command as command3,
818
+ cpWalk,
819
+ formatRecords,
820
+ removalLines,
821
+ resolveGlobOf as resolveGlobOf3,
822
+ specOf as specOf3,
823
+ writeMetadataProvision as writeMetadataProvision2
824
+ } from "@struktoai/mirage-core";
825
+ var resolveGlob3 = resolveGlobOf3(GRIDFS_IO);
826
+ var ENC2 = new TextEncoder();
827
+ async function rmOne(accessor, path, opts, index) {
828
+ const label = path.virtual;
829
+ let isDir = false;
830
+ try {
831
+ const st = await stat(accessor, path, index ?? void 0);
832
+ isDir = st.type === FileType2.DIRECTORY;
833
+ } catch {
834
+ if (opts.force) return [null, []];
835
+ return [`rm: cannot remove '${label}': No such file or directory`, []];
836
+ }
837
+ if (isDir) {
838
+ if (opts.recursive) {
839
+ const lines = opts.verbose ? removalLines(
840
+ await cpWalk(
841
+ (dir) => readdir(accessor, dir, index ?? void 0),
842
+ (spec) => stat(accessor, spec, index ?? void 0),
843
+ path,
844
+ index ?? void 0
845
+ )
846
+ ) : [];
847
+ await rmR(accessor, path);
848
+ return [null, lines];
849
+ }
850
+ if (opts.removeDir) {
851
+ const children = await readdir(accessor, path, index ?? void 0);
852
+ if (children.length > 0) {
853
+ return [`rm: cannot remove '${label}': Directory not empty`, []];
854
+ }
855
+ await rmdir(accessor, path);
856
+ return [null, opts.verbose ? [`removed directory '${label}'`] : []];
857
+ }
858
+ return [`rm: cannot remove '${label}': Is a directory`, []];
859
+ }
860
+ await unlink(accessor, path);
861
+ return [null, opts.verbose ? [`removed '${label}'`] : []];
862
+ }
863
+ async function rmCommand(accessor, paths, _texts, opts) {
864
+ if (paths.length === 0) {
865
+ return [null, new IOResult2({ exitCode: 1, stderr: ENC2.encode("rm: missing operand\n") })];
866
+ }
867
+ const resolved = await resolveGlob3(accessor, paths, opts.index ?? void 0);
868
+ const recursive = opts.flags.r === true || opts.flags.R === true;
869
+ const force = opts.flags.f === true;
870
+ const removeDir = opts.flags.d === true;
871
+ const verbose = opts.flags.v === true;
872
+ const verboseParts = [];
873
+ const errors = [];
874
+ const writes = {};
875
+ for (const p of resolved) {
876
+ const [error, entryLines] = await rmOne(
877
+ accessor,
878
+ p,
879
+ { recursive, force, removeDir, verbose },
880
+ opts.index
881
+ );
882
+ if (error !== null) {
883
+ errors.push(error);
884
+ continue;
885
+ }
886
+ writes[p.mountPath] = new Uint8Array();
887
+ if (verbose) verboseParts.push(...entryLines);
888
+ }
889
+ const output = verbose ? formatRecords(verboseParts) : null;
890
+ const stderr = errors.length > 0 ? ENC2.encode(errors.join("\n") + "\n") : void 0;
891
+ return [
892
+ output,
893
+ new IOResult2({
894
+ writes,
895
+ exitCode: errors.length > 0 ? 1 : 0,
896
+ ...stderr !== void 0 ? { stderr } : {}
897
+ })
898
+ ];
899
+ }
900
+ var GRIDFS_RM = command3({
901
+ name: "rm",
902
+ resource: ResourceName6.GRIDFS,
903
+ spec: specOf3("rm"),
904
+ fn: rmCommand,
905
+ write: true,
906
+ provision: writeMetadataProvision2
907
+ });
908
+
909
+ // src/commands/builtin/gridfs/stat.ts
910
+ import {
911
+ ResourceName as ResourceName7,
912
+ command as command4,
913
+ metadataProvision as metadataProvision2,
914
+ resolveGlobOf as resolveGlobOf4,
915
+ specOf as specOf4,
916
+ statGeneric
917
+ } from "@struktoai/mirage-core";
918
+ var resolveGlob4 = resolveGlobOf4(GRIDFS_IO);
919
+ async function statCommand(accessor, paths, _texts, opts) {
920
+ const resolved = paths.length > 0 ? await resolveGlob4(accessor, paths, opts.index ?? void 0) : [];
921
+ return statGeneric(resolved, opts, (p) => stat(accessor, p, opts.index ?? void 0));
922
+ }
923
+ var GRIDFS_STAT = command4({
924
+ name: "stat",
925
+ resource: ResourceName7.GRIDFS,
926
+ spec: specOf4("stat"),
927
+ fn: statCommand,
928
+ provision: metadataProvision2
929
+ });
930
+
931
+ // src/commands/builtin/gridfs/tee.ts
932
+ import {
933
+ IOResult as IOResult3,
934
+ ResourceName as ResourceName8,
935
+ command as command5,
936
+ materialize,
937
+ parseTeeFlags,
938
+ readStdinAsync,
939
+ resolveGlobOf as resolveGlobOf5,
940
+ specOf as specOf5,
941
+ writeOutput
942
+ } from "@struktoai/mirage-core";
943
+ var resolveGlob5 = resolveGlobOf5(GRIDFS_IO);
944
+ var ENC3 = new TextEncoder();
945
+ async function teeCommand(accessor, paths, texts, opts) {
946
+ if (paths.length === 0) {
947
+ return [null, new IOResult3({ exitCode: 1, stderr: ENC3.encode("tee: missing operand\n") })];
948
+ }
949
+ const parsed = parseTeeFlags(opts.flags);
950
+ if (typeof parsed === "string") {
951
+ return [null, new IOResult3({ exitCode: 1, stderr: ENC3.encode(parsed) })];
952
+ }
953
+ const resolved = await resolveGlob5(accessor, paths, opts.index ?? void 0);
954
+ const first = resolved[0];
955
+ if (first === void 0) return [null, new IOResult3()];
956
+ const stdinData = await readStdinAsync(opts.stdin);
957
+ const raw = stdinData ?? ENC3.encode(texts.join(" "));
958
+ let writeData = raw;
959
+ if (parsed.append) {
960
+ let existingFound = false;
961
+ try {
962
+ existingFound = await exists(accessor, first);
963
+ } catch {
964
+ existingFound = false;
965
+ }
966
+ if (existingFound) {
967
+ const existing = await materialize(stream(accessor, first));
968
+ writeData = new Uint8Array(existing.byteLength + raw.byteLength);
969
+ writeData.set(existing, 0);
970
+ writeData.set(raw, existing.byteLength);
971
+ }
972
+ }
973
+ return writeOutput((p, d) => write(accessor, p, d), first, writeData, raw);
974
+ }
975
+ var GRIDFS_TEE = command5({
976
+ name: "tee",
977
+ resource: ResourceName8.GRIDFS,
978
+ spec: specOf5("tee"),
979
+ fn: teeCommand,
980
+ write: true
981
+ });
982
+
983
+ // src/commands/builtin/gridfs/touch.ts
984
+ import {
985
+ IOResult as IOResult4,
986
+ ResourceName as ResourceName9,
987
+ command as command6,
988
+ resolveGlobOf as resolveGlobOf6,
989
+ specOf as specOf6,
990
+ writeMetadataProvision as writeMetadataProvision3
991
+ } from "@struktoai/mirage-core";
992
+ var resolveGlob6 = resolveGlobOf6(GRIDFS_IO);
993
+ var ENC4 = new TextEncoder();
994
+ async function touchCommand(accessor, paths, _texts, opts) {
995
+ if (paths.length === 0) {
996
+ return [null, new IOResult4({ exitCode: 1, stderr: ENC4.encode("touch: missing operand\n") })];
997
+ }
998
+ const resolved = await resolveGlob6(accessor, paths, opts.index ?? void 0);
999
+ const createOnly = opts.flags.c === true;
1000
+ const writes = {};
1001
+ for (const p of resolved) {
1002
+ if (createOnly) continue;
1003
+ if (!await exists(accessor, p)) {
1004
+ await write(accessor, p, new Uint8Array(0));
1005
+ writes[p.mountPath] = new Uint8Array();
1006
+ }
1007
+ }
1008
+ return [null, new IOResult4({ writes })];
1009
+ }
1010
+ var GRIDFS_TOUCH = command6({
1011
+ name: "touch",
1012
+ resource: ResourceName9.GRIDFS,
1013
+ spec: specOf6("touch"),
1014
+ fn: touchCommand,
1015
+ write: true,
1016
+ provision: writeMetadataProvision3
1017
+ });
1018
+
1019
+ // src/commands/builtin/gridfs/index.ts
1020
+ var GRIDFS_OVERRIDES = /* @__PURE__ */ new Set(["stat", "du", "rm", "mkdir", "tee", "touch"]);
1021
+ var GRIDFS_COMMANDS = [
1022
+ ...makeFiletypeCommands({
1023
+ resource: ResourceName10.GRIDFS,
1024
+ readBytes: read,
1025
+ statEntry: stat
1026
+ }),
1027
+ ...makeGenericCommands(ResourceName10.GRIDFS, GRIDFS_IO, {
1028
+ overrides: GRIDFS_OVERRIDES
1029
+ }),
1030
+ ...GRIDFS_STAT,
1031
+ ...GRIDFS_DU,
1032
+ ...GRIDFS_RM,
1033
+ ...GRIDFS_MKDIR,
1034
+ ...GRIDFS_TEE,
1035
+ ...GRIDFS_TOUCH
1036
+ ];
1037
+
1038
+ // src/ops/gridfs/index.ts
1039
+ import { ResourceName as ResourceName11, makeGenericOps } from "@struktoai/mirage-core";
1040
+ var GRIDFS_OPS = makeGenericOps(ResourceName11.GRIDFS, GRIDFS_IO, {
1041
+ filetypeRead: [".feather", ".hdf5", ".parquet"]
1042
+ });
1043
+
1044
+ // src/resource/gridfs/prompt.ts
1045
+ var GRIDFS_PROMPT = `{prefix}
1046
+ Remote MongoDB GridFS bucket. Maps GridFS filenames to virtual paths.
1047
+ IMPORTANT: This is a remote mount. Prefer targeted reads (grep, head) over full scans. Avoid cat on large files without piping to head/tail.
1048
+ find pushes -name/-type/-size filters into the fs.files query server-side, so find is cheap even on large buckets.
1049
+ Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.
1050
+ cat on .parquet/.orc/.feather returns a formatted table.`;
1051
+
1052
+ // src/resource/gridfs/gridfs.ts
1053
+ var globCore = makeResolveGlob(readdir, SCOPE_ERROR);
1054
+ var GridFSResource = class extends BaseResource {
1055
+ kind = ResourceName12.GRIDFS;
1056
+ cachesReads = true;
1057
+ supportsSnapshot = true;
1058
+ indexTtl = 600;
1059
+ prompt = GRIDFS_PROMPT;
1060
+ config;
1061
+ accessor;
1062
+ opsMap = {
1063
+ read_bytes: read,
1064
+ write,
1065
+ readdir,
1066
+ stat,
1067
+ unlink,
1068
+ rmdir,
1069
+ copy,
1070
+ rename,
1071
+ mkdir,
1072
+ read_stream: stream,
1073
+ range_read: rangeRead,
1074
+ rm_recursive: rmR,
1075
+ du_total: du,
1076
+ du_all: duAll,
1077
+ create,
1078
+ truncate,
1079
+ exists,
1080
+ find_flat: find
1081
+ };
1082
+ constructor(config) {
1083
+ super();
1084
+ const normalized = normalizeKeyPrefix(config.keyPrefix);
1085
+ const cfg = { ...config };
1086
+ if (normalized !== void 0) {
1087
+ cfg.keyPrefix = normalized;
1088
+ } else {
1089
+ delete cfg.keyPrefix;
1090
+ }
1091
+ this.config = cfg;
1092
+ this.accessor = new GridFSAccessor(this.config);
1093
+ }
1094
+ open() {
1095
+ return Promise.resolve();
1096
+ }
1097
+ async close() {
1098
+ await this.accessor.close();
1099
+ }
1100
+ commands() {
1101
+ return GRIDFS_COMMANDS;
1102
+ }
1103
+ ops() {
1104
+ return GRIDFS_OPS;
1105
+ }
1106
+ streamPath(p) {
1107
+ return stream(this.accessor, p);
1108
+ }
1109
+ readFile(p) {
1110
+ return read(this.accessor, p);
1111
+ }
1112
+ writeFile(p, data) {
1113
+ return write(this.accessor, p, data);
1114
+ }
1115
+ async appendFile(p, data) {
1116
+ let existing;
1117
+ try {
1118
+ existing = await read(this.accessor, p);
1119
+ } catch (err) {
1120
+ if (err?.code === "ENOENT") {
1121
+ existing = new Uint8Array();
1122
+ } else {
1123
+ throw err;
1124
+ }
1125
+ }
1126
+ const merged = new Uint8Array(existing.byteLength + data.byteLength);
1127
+ merged.set(existing, 0);
1128
+ merged.set(data, existing.byteLength);
1129
+ await write(this.accessor, p, merged);
1130
+ }
1131
+ readdir(p) {
1132
+ return readdir(this.accessor, p, this.index);
1133
+ }
1134
+ stat(p) {
1135
+ return stat(this.accessor, p);
1136
+ }
1137
+ exists(p) {
1138
+ return exists(this.accessor, p);
1139
+ }
1140
+ mkdir(p) {
1141
+ return mkdir(this.accessor, p);
1142
+ }
1143
+ rmdir(p) {
1144
+ return rmdir(this.accessor, p);
1145
+ }
1146
+ unlink(p) {
1147
+ return unlink(this.accessor, p);
1148
+ }
1149
+ rename(src, dst) {
1150
+ return rename(this.accessor, src, dst);
1151
+ }
1152
+ truncate(p, length) {
1153
+ return truncate(this.accessor, p, length);
1154
+ }
1155
+ copy(src, dst) {
1156
+ return copy(this.accessor, src, dst);
1157
+ }
1158
+ rmR(p) {
1159
+ return rmR(this.accessor, p);
1160
+ }
1161
+ du(p) {
1162
+ return du(this.accessor, p);
1163
+ }
1164
+ find(p, options = {}) {
1165
+ return find(this.accessor, p, options);
1166
+ }
1167
+ glob(paths, prefix = "") {
1168
+ const effective = prefix ? paths.map(
1169
+ (p) => mountPrefixOf4(p.virtual, p.resourcePath) ? p : new PathSpec({
1170
+ virtual: p.virtual,
1171
+ directory: p.directory,
1172
+ ...p.pattern !== null ? { pattern: p.pattern } : {},
1173
+ resolved: p.resolved,
1174
+ resourcePath: mountKey(p.virtual, prefix)
1175
+ })
1176
+ ) : paths;
1177
+ return globCore(this.accessor, effective, this.index);
1178
+ }
1179
+ getState() {
1180
+ return Promise.resolve({
1181
+ type: this.kind,
1182
+ config: redactConfig(this.config)
1183
+ });
1184
+ }
1185
+ loadState(_state) {
1186
+ return Promise.resolve();
1187
+ }
1188
+ };
1189
+
1190
+ export {
1191
+ GridFSAccessor,
1192
+ GridFSResource
1193
+ };
1194
+ //# sourceMappingURL=chunk-CGGO5NKD.js.map