@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.
Files changed (465) hide show
  1. package/README.md +2 -1
  2. package/dist/aliyun-S62BR3TB.js +11 -0
  3. package/dist/append.lua +17 -0
  4. package/dist/backblaze-4EKSW63F.js +11 -0
  5. package/dist/box-ZPLZAGMK.js +8 -0
  6. package/dist/cas.lua +15 -0
  7. package/dist/ceph-ALKLD3MO.js +11 -0
  8. package/dist/{chunk-QCZ2XUKH.js → chunk-2A4YGVBM.js} +16 -23
  9. package/dist/chunk-2A4YGVBM.js.map +1 -0
  10. package/dist/chunk-2HCYLVGY.js +28 -0
  11. package/dist/chunk-2HCYLVGY.js.map +1 -0
  12. package/dist/chunk-2VPZAH5Q.js +20 -0
  13. package/dist/chunk-2VPZAH5Q.js.map +1 -0
  14. package/dist/{chunk-UT2OPSN4.js → chunk-3JZQ6VSZ.js} +5 -5
  15. package/dist/chunk-3JZQ6VSZ.js.map +1 -0
  16. package/dist/chunk-4IF4TGAI.js +11 -0
  17. package/dist/chunk-4IF4TGAI.js.map +1 -0
  18. package/dist/{chunk-47AVIIOT.js → chunk-5H6KNEPP.js} +4 -5
  19. package/dist/{chunk-47AVIIOT.js.map → chunk-5H6KNEPP.js.map} +1 -1
  20. package/dist/{chunk-I5THIMPP.js → chunk-5K2MWDCE.js} +6 -7
  21. package/dist/{chunk-I5THIMPP.js.map → chunk-5K2MWDCE.js.map} +1 -1
  22. package/dist/{chunk-3WIO7NBR.js → chunk-6SVXWRKX.js} +4 -5
  23. package/dist/{chunk-3WIO7NBR.js.map → chunk-6SVXWRKX.js.map} +1 -1
  24. package/dist/{chunk-RQK5UPMP.js → chunk-6VOIUGAD.js} +25 -12
  25. package/dist/chunk-6VOIUGAD.js.map +1 -0
  26. package/dist/{chunk-NOHWIBRX.js → chunk-7JYHFXXC.js} +15 -20
  27. package/dist/chunk-7JYHFXXC.js.map +1 -0
  28. package/dist/chunk-7VQQFWV6.js +20 -0
  29. package/dist/chunk-7VQQFWV6.js.map +1 -0
  30. package/dist/chunk-7ZP6TPHX.js +87 -0
  31. package/dist/chunk-7ZP6TPHX.js.map +1 -0
  32. package/dist/{chunk-SWCDFEUK.js → chunk-ADEXNSYU.js} +20 -22
  33. package/dist/chunk-ADEXNSYU.js.map +1 -0
  34. package/dist/chunk-AQSYAXL4.js +16 -0
  35. package/dist/chunk-AQSYAXL4.js.map +1 -0
  36. package/dist/{chunk-RO5IQEDQ.js → chunk-ATLXMNKD.js} +8 -4
  37. package/dist/chunk-ATLXMNKD.js.map +1 -0
  38. package/dist/{chunk-MPCCRRE6.js → chunk-BYCUGFRF.js} +16 -16
  39. package/dist/chunk-BYCUGFRF.js.map +1 -0
  40. package/dist/{chunk-HJJMP6IX.js → chunk-BZTVYOES.js} +3 -3
  41. package/dist/{chunk-B2ZOKNN4.js → chunk-CRC4YWXB.js} +27 -9
  42. package/dist/chunk-CRC4YWXB.js.map +1 -0
  43. package/dist/chunk-CTGXJHO5.js +39 -0
  44. package/dist/chunk-CTGXJHO5.js.map +1 -0
  45. package/dist/{chunk-Q2IAILVC.js → chunk-DCDBIXVZ.js} +14 -5
  46. package/dist/chunk-DCDBIXVZ.js.map +1 -0
  47. package/dist/chunk-DDAFNROK.js +750 -0
  48. package/dist/chunk-DDAFNROK.js.map +1 -0
  49. package/dist/chunk-DQIEWEAW.js +85 -0
  50. package/dist/chunk-DQIEWEAW.js.map +1 -0
  51. package/dist/{chunk-QGRDPSAH.js → chunk-EBI4IHDC.js} +23 -12
  52. package/dist/chunk-EBI4IHDC.js.map +1 -0
  53. package/dist/{chunk-JAGJTM3Q.js → chunk-EIUTZ6N7.js} +19 -34
  54. package/dist/chunk-EIUTZ6N7.js.map +1 -0
  55. package/dist/{chunk-TA3WMOMU.js → chunk-EJZG5VUF.js} +38 -32
  56. package/dist/chunk-EJZG5VUF.js.map +1 -0
  57. package/dist/{chunk-X5HF2OFP.js → chunk-ENW5BVYN.js} +3 -3
  58. package/dist/{chunk-HGCRXJGP.js → chunk-ETIAW4YD.js} +3 -3
  59. package/dist/chunk-EUPXAYPB.js +20 -0
  60. package/dist/chunk-EUPXAYPB.js.map +1 -0
  61. package/dist/{chunk-YAHRT6MB.js → chunk-FA6YNU75.js} +4 -5
  62. package/dist/{chunk-YAHRT6MB.js.map → chunk-FA6YNU75.js.map} +1 -1
  63. package/dist/{chunk-TWGVQLG2.js → chunk-FFH6R5VQ.js} +7 -3
  64. package/dist/chunk-FFH6R5VQ.js.map +1 -0
  65. package/dist/{chunk-JCC4CU2I.js → chunk-GE6H2COM.js} +15 -23
  66. package/dist/chunk-GE6H2COM.js.map +1 -0
  67. package/dist/{chunk-DM4GSE26.js → chunk-GMMQ3ZK4.js} +3 -3
  68. package/dist/{chunk-ZEGAMJO2.js → chunk-GSGE3M5P.js} +15 -23
  69. package/dist/chunk-GSGE3M5P.js.map +1 -0
  70. package/dist/{chunk-GCFYZSVR.js → chunk-H64SB6VO.js} +32 -13
  71. package/dist/chunk-H64SB6VO.js.map +1 -0
  72. package/dist/{chunk-N5FSLVKO.js → chunk-HCRYAFBI.js} +3 -3
  73. package/dist/{chunk-IDYHQQOH.js → chunk-HOPUP6LA.js} +358 -471
  74. package/dist/chunk-HOPUP6LA.js.map +1 -0
  75. package/dist/chunk-HS24BL6W.js +160 -0
  76. package/dist/chunk-HS24BL6W.js.map +1 -0
  77. package/dist/chunk-HVYVG5KQ.js +16 -0
  78. package/dist/chunk-HVYVG5KQ.js.map +1 -0
  79. package/dist/{chunk-FQ33BYFR.js → chunk-I7CPLZNW.js} +4 -5
  80. package/dist/{chunk-FQ33BYFR.js.map → chunk-I7CPLZNW.js.map} +1 -1
  81. package/dist/{chunk-VGLHY6BK.js → chunk-IFUCGI4I.js} +7 -3
  82. package/dist/chunk-IFUCGI4I.js.map +1 -0
  83. package/dist/{chunk-RNQN2FOU.js → chunk-IFYXSSKR.js} +24 -13
  84. package/dist/chunk-IFYXSSKR.js.map +1 -0
  85. package/dist/chunk-IXA4DQE4.js +20 -0
  86. package/dist/chunk-IXA4DQE4.js.map +1 -0
  87. package/dist/chunk-IZMKMD3O.js +11 -0
  88. package/dist/chunk-IZMKMD3O.js.map +1 -0
  89. package/dist/{chunk-7CW3BMPH.js → chunk-JJERW2BI.js} +4 -5
  90. package/dist/{chunk-7CW3BMPH.js.map → chunk-JJERW2BI.js.map} +1 -1
  91. package/dist/{chunk-EM4J5EQS.js → chunk-JQR4HVUX.js} +13 -16
  92. package/dist/chunk-JQR4HVUX.js.map +1 -0
  93. package/dist/{chunk-VWKUT4CW.js → chunk-JXOMDLFS.js} +21 -26
  94. package/dist/chunk-JXOMDLFS.js.map +1 -0
  95. package/dist/chunk-KIX6N7NT.js +1001 -0
  96. package/dist/chunk-KIX6N7NT.js.map +1 -0
  97. package/dist/{chunk-OZAEWZZ3.js → chunk-L42UTDFK.js} +12 -3
  98. package/dist/chunk-L42UTDFK.js.map +1 -0
  99. package/dist/{chunk-54NTYJEO.js → chunk-LPDLPRPS.js} +1 -3
  100. package/dist/{chunk-54NTYJEO.js.map → chunk-LPDLPRPS.js.map} +1 -1
  101. package/dist/chunk-M2UF2JHJ.js +11 -0
  102. package/dist/chunk-M2UF2JHJ.js.map +1 -0
  103. package/dist/{chunk-UGK4TAVK.js → chunk-MONC734W.js} +7 -3
  104. package/dist/chunk-MONC734W.js.map +1 -0
  105. package/dist/{chunk-IK2L4EN3.js → chunk-N72RLCMU.js} +4 -5
  106. package/dist/{chunk-IK2L4EN3.js.map → chunk-N72RLCMU.js.map} +1 -1
  107. package/dist/{chunk-H3I2KZIY.js → chunk-ND4IWJ4V.js} +7 -3
  108. package/dist/chunk-ND4IWJ4V.js.map +1 -0
  109. package/dist/chunk-NZ3EKGW4.js +1312 -0
  110. package/dist/chunk-NZ3EKGW4.js.map +1 -0
  111. package/dist/{chunk-XGJ2QERC.js → chunk-OAE57MNL.js} +27 -11
  112. package/dist/chunk-OAE57MNL.js.map +1 -0
  113. package/dist/{chunk-EZQ5HBAC.js → chunk-OHKGIQB4.js} +12 -16
  114. package/dist/chunk-OHKGIQB4.js.map +1 -0
  115. package/dist/{chunk-E2ISWXLB.js → chunk-OQKNDS66.js} +1 -1
  116. package/dist/{chunk-E2ISWXLB.js.map → chunk-OQKNDS66.js.map} +1 -1
  117. package/dist/{chunk-UINQOUZR.js → chunk-OXEQSPND.js} +3 -3
  118. package/dist/{chunk-A7IVFIOP.js → chunk-PKNE5J2B.js} +15 -23
  119. package/dist/chunk-PKNE5J2B.js.map +1 -0
  120. package/dist/chunk-PSXXEGYQ.js +16 -0
  121. package/dist/chunk-PSXXEGYQ.js.map +1 -0
  122. package/dist/{chunk-EGB7V74Z.js → chunk-QAOVABCR.js} +7 -4
  123. package/dist/chunk-QAOVABCR.js.map +1 -0
  124. package/dist/{chunk-X3G37FXT.js → chunk-QQ7FP4GD.js} +4 -5
  125. package/dist/{chunk-X3G37FXT.js.map → chunk-QQ7FP4GD.js.map} +1 -1
  126. package/dist/{chunk-WAR4Q2NM.js → chunk-QYLVMC6B.js} +13 -15
  127. package/dist/chunk-QYLVMC6B.js.map +1 -0
  128. package/dist/{chunk-KPULTUOK.js → chunk-RX3XR65X.js} +4 -5
  129. package/dist/{chunk-KPULTUOK.js.map → chunk-RX3XR65X.js.map} +1 -1
  130. package/dist/chunk-RYQJJB4C.js +30 -0
  131. package/dist/chunk-RYQJJB4C.js.map +1 -0
  132. package/dist/{chunk-QQBJC2FQ.js → chunk-TUF7TCN7.js} +4 -5
  133. package/dist/{chunk-QQBJC2FQ.js.map → chunk-TUF7TCN7.js.map} +1 -1
  134. package/dist/{chunk-AUHSTJJ3.js → chunk-TUX36JY5.js} +4 -5
  135. package/dist/{chunk-AUHSTJJ3.js.map → chunk-TUX36JY5.js.map} +1 -1
  136. package/dist/chunk-TWRQCQWU.js +1153 -0
  137. package/dist/chunk-TWRQCQWU.js.map +1 -0
  138. package/dist/chunk-U6DFQRG3.js +20 -0
  139. package/dist/chunk-U6DFQRG3.js.map +1 -0
  140. package/dist/chunk-VI5YTKNY.js +20 -0
  141. package/dist/chunk-VI5YTKNY.js.map +1 -0
  142. package/dist/chunk-WG5YS6TC.js +872 -0
  143. package/dist/chunk-WG5YS6TC.js.map +1 -0
  144. package/dist/{chunk-ZGSER5TG.js → chunk-WMJJ4WGF.js} +4 -5
  145. package/dist/{chunk-ZGSER5TG.js.map → chunk-WMJJ4WGF.js.map} +1 -1
  146. package/dist/{chunk-LV2G7VHL.js → chunk-WY4FNH42.js} +21 -18
  147. package/dist/chunk-WY4FNH42.js.map +1 -0
  148. package/dist/{chunk-LAJJPLEV.js → chunk-XIG5BWWH.js} +25 -12
  149. package/dist/chunk-XIG5BWWH.js.map +1 -0
  150. package/dist/chunk-XJBC3OYX.js +11 -0
  151. package/dist/chunk-XJBC3OYX.js.map +1 -0
  152. package/dist/{chunk-G2WCEUQL.js → chunk-XPRDXWK7.js} +21 -20
  153. package/dist/chunk-XPRDXWK7.js.map +1 -0
  154. package/dist/chunk-YKRQSZS7.js +96 -0
  155. package/dist/chunk-YKRQSZS7.js.map +1 -0
  156. package/dist/{chunk-M5FVUIYP.js → chunk-YMBL3VJB.js} +21 -19
  157. package/dist/chunk-YMBL3VJB.js.map +1 -0
  158. package/dist/chunk-YUJBXFYK.js +1205 -0
  159. package/dist/chunk-YUJBXFYK.js.map +1 -0
  160. package/dist/{chunk-JALIYI6M.js → chunk-YZ4ZJNOL.js} +28 -11
  161. package/dist/chunk-YZ4ZJNOL.js.map +1 -0
  162. package/dist/chunk-ZTHVEXIV.js +11 -0
  163. package/dist/chunk-ZTHVEXIV.js.map +1 -0
  164. package/dist/{chunk-GS5AUKUO.js → chunk-ZVSYUCYS.js} +11 -7
  165. package/dist/chunk-ZVSYUCYS.js.map +1 -0
  166. package/dist/{config-QAA646XB.js → config-2YBCHU2W.js} +2 -4
  167. package/dist/{config-IVY5EQQ2.js → config-3YRGRW72.js} +3 -4
  168. package/dist/config-4GSOMUMF.js +9 -0
  169. package/dist/config-5YBUWFUP.js +9 -0
  170. package/dist/{config-34LHOGLM.js → config-5ZRKJTKG.js} +3 -4
  171. package/dist/config-A25LTL5W.js +11 -0
  172. package/dist/config-CLU7JABG.js +9 -0
  173. package/dist/config-D2RF7L3N.js +9 -0
  174. package/dist/{config-LHFFXVYI.js → config-E55TKM6K.js} +2 -4
  175. package/dist/config-ELDOFRJW.js +9 -0
  176. package/dist/{config-GE4W4ZJC.js → config-FPC3RBFD.js} +2 -4
  177. package/dist/config-FPM3LAW7.js +9 -0
  178. package/dist/{config-HKRMKD76.js → config-G3F54CS4.js} +3 -4
  179. package/dist/config-G43HRUI3.js +9 -0
  180. package/dist/{config-WDAZFXYD.js → config-GG3WO5PB.js} +3 -4
  181. package/dist/config-JUYBWAZE.js +9 -0
  182. package/dist/{config-CVZ2AGCO.js → config-LJ5T6TVA.js} +2 -6
  183. package/dist/config-MDSAE4O3.js +11 -0
  184. package/dist/{config-EIHSP5DZ.js → config-NRIOKK5T.js} +2 -4
  185. package/dist/config-OYK2BSJK.js +9 -0
  186. package/dist/config-PB3KA2CE.js +9 -0
  187. package/dist/{config-ZFJYQZCH.js → config-QY4IL3PH.js} +3 -4
  188. package/dist/config-R4LAOEDS.js +9 -0
  189. package/dist/{config-QNMKWJ4M.js → config-RIAAD6RW.js} +3 -4
  190. package/dist/config-SYNEQAUB.js +9 -0
  191. package/dist/{config-Q45Y46YT.js → config-TJKGYA2B.js} +3 -4
  192. package/dist/{config-NV5WXP64.js → config-UU27ALAA.js} +2 -4
  193. package/dist/{config-3IVQJBNW.js → config-UURRGA7U.js} +2 -2
  194. package/dist/{config-VM526IKB.js → config-VPLHQXVE.js} +2 -4
  195. package/dist/config-WRACCRPN.js +9 -0
  196. package/dist/{config-GHRUKEQ6.js → config-WVHKXEVE.js} +3 -4
  197. package/dist/{config-EO23EY62.js → config-XU7R36IE.js} +3 -4
  198. package/dist/config-Y2KOUYSS.js +9 -0
  199. package/dist/databricks_volume-CNCPTZHS.js +7 -0
  200. package/dist/digitalocean-DJZOUB6Q.js +11 -0
  201. package/dist/discord-ETB2CADR.js +7 -0
  202. package/dist/disk-WEHSTK3F.js +7 -0
  203. package/dist/dropbox-XN6PGLNE.js +8 -0
  204. package/dist/email-OV7XCP3T.js +8 -0
  205. package/dist/gcal-P56MRCGU.js +8 -0
  206. package/dist/gcs-HFBIAE2C.js +10 -0
  207. package/dist/gdocs-LQ3UXP3J.js +8 -0
  208. package/dist/gdrive-N6UBYLON.js +8 -0
  209. package/dist/github-BPZREGPI.js +8 -0
  210. package/dist/github_ci-7A4LUIZ7.js +8 -0
  211. package/dist/gmail-YED2MF6H.js +8 -0
  212. package/dist/gridfs-CPLQ4G62.js +9 -0
  213. package/dist/gsheets-4BNIJPQ6.js +8 -0
  214. package/dist/gslides-GDBYLO5A.js +8 -0
  215. package/dist/hf_buckets-FTJITQ3P.js +10 -0
  216. package/dist/hf_datasets-6GXVKQD7.js +10 -0
  217. package/dist/hf_models-PJPGZAC5.js +10 -0
  218. package/dist/hf_spaces-LFNFOLBF.js +10 -0
  219. package/dist/index.d.ts +1311 -569
  220. package/dist/index.js +3359 -964
  221. package/dist/index.js.map +1 -1
  222. package/dist/jaeger-GCA6MJ6E.js +8 -0
  223. package/dist/lancedb-TJ5YSJY5.js +7 -0
  224. package/dist/langfuse-RUMTUMXS.js +8 -0
  225. package/dist/linear-BCE4KEAC.js +7 -0
  226. package/dist/minio-5SO6KBTK.js +11 -0
  227. package/dist/mongodb-L5CMN2EE.js +7 -0
  228. package/dist/nextcloud-4O2LZVW2.js +9 -0
  229. package/dist/notion-RVKEAQ2M.js +7 -0
  230. package/dist/oci-OQXOIC62.js +10 -0
  231. package/dist/postgres-AV45GNRS.js +7 -0
  232. package/dist/qingstor-W277YA4K.js +11 -0
  233. package/dist/r2-FUA4IORE.js +10 -0
  234. package/dist/redis-LPS357NF.js +8 -0
  235. package/dist/s3-FPNWWIVM.js +8 -0
  236. package/dist/scaleway-BP3732U7.js +11 -0
  237. package/dist/seaweedfs-MC6HIEP4.js +11 -0
  238. package/dist/slack-JFGW7VLN.js +7 -0
  239. package/dist/ssh-UYPG42LM.js +8 -0
  240. package/dist/ssh-UYPG42LM.js.map +1 -0
  241. package/dist/supabase-A3KUFMDC.js +10 -0
  242. package/dist/supabase-A3KUFMDC.js.map +1 -0
  243. package/dist/tencent-5464UQ2X.js +11 -0
  244. package/dist/tencent-5464UQ2X.js.map +1 -0
  245. package/dist/trello-O2KB3FUO.js +8 -0
  246. package/dist/trello-O2KB3FUO.js.map +1 -0
  247. package/dist/wasabi-2IKBIWNO.js +10 -0
  248. package/dist/wasabi-2IKBIWNO.js.map +1 -0
  249. package/package.json +17 -3
  250. package/dist/aliyun-JMJ3PFYY.js +0 -10
  251. package/dist/backblaze-TDFD23QO.js +0 -10
  252. package/dist/box-GQ2U2R6R.js +0 -8
  253. package/dist/ceph-S2VOYO6G.js +0 -10
  254. package/dist/chunk-2CC5VW7K.js +0 -52
  255. package/dist/chunk-2CC5VW7K.js.map +0 -1
  256. package/dist/chunk-A7IVFIOP.js.map +0 -1
  257. package/dist/chunk-B2ZOKNN4.js.map +0 -1
  258. package/dist/chunk-DNBAMB5J.js +0 -18
  259. package/dist/chunk-DNBAMB5J.js.map +0 -1
  260. package/dist/chunk-DP2PP5V2.js +0 -26
  261. package/dist/chunk-DP2PP5V2.js.map +0 -1
  262. package/dist/chunk-DYXEITK3.js +0 -52
  263. package/dist/chunk-DYXEITK3.js.map +0 -1
  264. package/dist/chunk-EGB7V74Z.js.map +0 -1
  265. package/dist/chunk-EM4J5EQS.js.map +0 -1
  266. package/dist/chunk-EZQ5HBAC.js.map +0 -1
  267. package/dist/chunk-G2WCEUQL.js.map +0 -1
  268. package/dist/chunk-GCFYZSVR.js.map +0 -1
  269. package/dist/chunk-GS5AUKUO.js.map +0 -1
  270. package/dist/chunk-H3BST2LI.js +0 -26
  271. package/dist/chunk-H3BST2LI.js.map +0 -1
  272. package/dist/chunk-H3I2KZIY.js.map +0 -1
  273. package/dist/chunk-IDYHQQOH.js.map +0 -1
  274. package/dist/chunk-JAGJTM3Q.js.map +0 -1
  275. package/dist/chunk-JALIYI6M.js.map +0 -1
  276. package/dist/chunk-JCC4CU2I.js.map +0 -1
  277. package/dist/chunk-JZT4QGIP.js +0 -24
  278. package/dist/chunk-JZT4QGIP.js.map +0 -1
  279. package/dist/chunk-LAJJPLEV.js.map +0 -1
  280. package/dist/chunk-LV2G7VHL.js.map +0 -1
  281. package/dist/chunk-LW25LMIH.js +0 -26
  282. package/dist/chunk-LW25LMIH.js.map +0 -1
  283. package/dist/chunk-M5FVUIYP.js.map +0 -1
  284. package/dist/chunk-MPCCRRE6.js.map +0 -1
  285. package/dist/chunk-NJMGCT63.js +0 -54
  286. package/dist/chunk-NJMGCT63.js.map +0 -1
  287. package/dist/chunk-NOHWIBRX.js.map +0 -1
  288. package/dist/chunk-OHROA3FQ.js +0 -54
  289. package/dist/chunk-OHROA3FQ.js.map +0 -1
  290. package/dist/chunk-OPYQ5KIO.js +0 -52
  291. package/dist/chunk-OPYQ5KIO.js.map +0 -1
  292. package/dist/chunk-OZAEWZZ3.js.map +0 -1
  293. package/dist/chunk-Q2IAILVC.js.map +0 -1
  294. package/dist/chunk-QCZ2XUKH.js.map +0 -1
  295. package/dist/chunk-QGRDPSAH.js.map +0 -1
  296. package/dist/chunk-RNQN2FOU.js.map +0 -1
  297. package/dist/chunk-RO5IQEDQ.js.map +0 -1
  298. package/dist/chunk-RQK5UPMP.js.map +0 -1
  299. package/dist/chunk-S5OVP467.js +0 -1795
  300. package/dist/chunk-S5OVP467.js.map +0 -1
  301. package/dist/chunk-SFUCUARB.js +0 -21
  302. package/dist/chunk-SFUCUARB.js.map +0 -1
  303. package/dist/chunk-SWCDFEUK.js.map +0 -1
  304. package/dist/chunk-TA3WMOMU.js.map +0 -1
  305. package/dist/chunk-TURD42QO.js +0 -1782
  306. package/dist/chunk-TURD42QO.js.map +0 -1
  307. package/dist/chunk-TWGVQLG2.js.map +0 -1
  308. package/dist/chunk-U6QSXTUS.js +0 -7
  309. package/dist/chunk-U6QSXTUS.js.map +0 -1
  310. package/dist/chunk-UGK4TAVK.js.map +0 -1
  311. package/dist/chunk-UT2OPSN4.js.map +0 -1
  312. package/dist/chunk-VGLHY6BK.js.map +0 -1
  313. package/dist/chunk-VWKUT4CW.js.map +0 -1
  314. package/dist/chunk-W7FLHT65.js +0 -26
  315. package/dist/chunk-W7FLHT65.js.map +0 -1
  316. package/dist/chunk-WAR4Q2NM.js.map +0 -1
  317. package/dist/chunk-WHFUWWI6.js +0 -2097
  318. package/dist/chunk-WHFUWWI6.js.map +0 -1
  319. package/dist/chunk-XGJ2QERC.js.map +0 -1
  320. package/dist/chunk-XHCBHYN4.js +0 -54
  321. package/dist/chunk-XHCBHYN4.js.map +0 -1
  322. package/dist/chunk-XLQI4IT2.js +0 -54
  323. package/dist/chunk-XLQI4IT2.js.map +0 -1
  324. package/dist/chunk-XWVDS66D.js +0 -963
  325. package/dist/chunk-XWVDS66D.js.map +0 -1
  326. package/dist/chunk-YGZMVNN5.js +0 -54
  327. package/dist/chunk-YGZMVNN5.js.map +0 -1
  328. package/dist/chunk-YUK3X3B4.js +0 -27
  329. package/dist/chunk-YUK3X3B4.js.map +0 -1
  330. package/dist/chunk-ZEGAMJO2.js.map +0 -1
  331. package/dist/chunk-ZNWVJ6UW.js +0 -54
  332. package/dist/chunk-ZNWVJ6UW.js.map +0 -1
  333. package/dist/config-3BBWD5AB.js +0 -11
  334. package/dist/config-4UDVSUQJ.js +0 -11
  335. package/dist/config-CMDBAPDH.js +0 -11
  336. package/dist/config-D3RLSPNF.js +0 -11
  337. package/dist/config-DG65OEG3.js +0 -11
  338. package/dist/config-GCQK6NJY.js +0 -11
  339. package/dist/config-GVH27UPE.js +0 -11
  340. package/dist/config-HXVYIXP5.js +0 -11
  341. package/dist/config-IDZMEW73.js +0 -11
  342. package/dist/config-IJJXGLBQ.js +0 -11
  343. package/dist/config-KJOLGVB2.js +0 -11
  344. package/dist/config-KMVCVBYN.js +0 -15
  345. package/dist/config-KYTRXAB2.js +0 -15
  346. package/dist/config-OT2TQQCN.js +0 -11
  347. package/dist/config-QWCY3LBQ.js +0 -11
  348. package/dist/config-ZV6G2ZEC.js +0 -11
  349. package/dist/databricks_volume-7XOUYSTY.js +0 -7
  350. package/dist/digitalocean-3CQ4CPPZ.js +0 -10
  351. package/dist/discord-BG7OSRJG.js +0 -8
  352. package/dist/disk-XVLBCVKE.js +0 -8
  353. package/dist/dropbox-74GYLV3R.js +0 -8
  354. package/dist/email-5IZ7OBQ4.js +0 -8
  355. package/dist/gcs-EMEYU2XT.js +0 -10
  356. package/dist/gdocs-R67TDPON.js +0 -8
  357. package/dist/gdrive-PRN2ALRK.js +0 -8
  358. package/dist/github-DV7E6OFV.js +0 -8
  359. package/dist/github_ci-Q554V5PA.js +0 -8
  360. package/dist/gmail-OLN2LT4O.js +0 -8
  361. package/dist/gsheets-H4RYMQJ5.js +0 -8
  362. package/dist/gslides-YLCHKJOM.js +0 -8
  363. package/dist/hf_buckets-DTKXKKFF.js +0 -10
  364. package/dist/hf_datasets-55C4APKR.js +0 -10
  365. package/dist/hf_models-RO5JR36V.js +0 -10
  366. package/dist/hf_spaces-ZVZ3EDRX.js +0 -10
  367. package/dist/langfuse-ACASJZ7O.js +0 -8
  368. package/dist/linear-IC37LZV7.js +0 -8
  369. package/dist/minio-HZ576XFQ.js +0 -10
  370. package/dist/mongodb-JVR62OIO.js +0 -7
  371. package/dist/notion-HKRPQMJS.js +0 -8
  372. package/dist/oci-ZLVECXTW.js +0 -10
  373. package/dist/postgres-P36Z2YN4.js +0 -7
  374. package/dist/qingstor-YLP6K3L4.js +0 -10
  375. package/dist/r2-RPK25ANI.js +0 -10
  376. package/dist/redis-V5ULXULL.js +0 -8
  377. package/dist/s3-4OIOCAAT.js +0 -8
  378. package/dist/scaleway-CCWCLUHB.js +0 -10
  379. package/dist/seaweedfs-QSWKF2FN.js +0 -10
  380. package/dist/slack-YPS7PII3.js +0 -8
  381. package/dist/ssh-YFP3SMTJ.js +0 -9
  382. package/dist/supabase-6CFTOKGZ.js +0 -10
  383. package/dist/tencent-IWZZOSQ4.js +0 -10
  384. package/dist/trello-XYKWZD6P.js +0 -8
  385. package/dist/wasabi-6Z4DC5S5.js +0 -10
  386. /package/dist/{aliyun-JMJ3PFYY.js.map → aliyun-S62BR3TB.js.map} +0 -0
  387. /package/dist/{backblaze-TDFD23QO.js.map → backblaze-4EKSW63F.js.map} +0 -0
  388. /package/dist/{box-GQ2U2R6R.js.map → box-ZPLZAGMK.js.map} +0 -0
  389. /package/dist/{ceph-S2VOYO6G.js.map → ceph-ALKLD3MO.js.map} +0 -0
  390. /package/dist/{chunk-HJJMP6IX.js.map → chunk-BZTVYOES.js.map} +0 -0
  391. /package/dist/{chunk-X5HF2OFP.js.map → chunk-ENW5BVYN.js.map} +0 -0
  392. /package/dist/{chunk-HGCRXJGP.js.map → chunk-ETIAW4YD.js.map} +0 -0
  393. /package/dist/{chunk-DM4GSE26.js.map → chunk-GMMQ3ZK4.js.map} +0 -0
  394. /package/dist/{chunk-N5FSLVKO.js.map → chunk-HCRYAFBI.js.map} +0 -0
  395. /package/dist/{chunk-UINQOUZR.js.map → chunk-OXEQSPND.js.map} +0 -0
  396. /package/dist/{config-34LHOGLM.js.map → config-2YBCHU2W.js.map} +0 -0
  397. /package/dist/{config-3BBWD5AB.js.map → config-3YRGRW72.js.map} +0 -0
  398. /package/dist/{config-3IVQJBNW.js.map → config-4GSOMUMF.js.map} +0 -0
  399. /package/dist/{config-4UDVSUQJ.js.map → config-5YBUWFUP.js.map} +0 -0
  400. /package/dist/{config-CMDBAPDH.js.map → config-5ZRKJTKG.js.map} +0 -0
  401. /package/dist/{config-CVZ2AGCO.js.map → config-A25LTL5W.js.map} +0 -0
  402. /package/dist/{config-D3RLSPNF.js.map → config-CLU7JABG.js.map} +0 -0
  403. /package/dist/{config-DG65OEG3.js.map → config-D2RF7L3N.js.map} +0 -0
  404. /package/dist/{config-EIHSP5DZ.js.map → config-E55TKM6K.js.map} +0 -0
  405. /package/dist/{config-EO23EY62.js.map → config-ELDOFRJW.js.map} +0 -0
  406. /package/dist/{config-GCQK6NJY.js.map → config-FPC3RBFD.js.map} +0 -0
  407. /package/dist/{config-GE4W4ZJC.js.map → config-FPM3LAW7.js.map} +0 -0
  408. /package/dist/{config-GHRUKEQ6.js.map → config-G3F54CS4.js.map} +0 -0
  409. /package/dist/{config-GVH27UPE.js.map → config-G43HRUI3.js.map} +0 -0
  410. /package/dist/{config-HKRMKD76.js.map → config-GG3WO5PB.js.map} +0 -0
  411. /package/dist/{config-HXVYIXP5.js.map → config-JUYBWAZE.js.map} +0 -0
  412. /package/dist/{config-IDZMEW73.js.map → config-LJ5T6TVA.js.map} +0 -0
  413. /package/dist/{config-IJJXGLBQ.js.map → config-MDSAE4O3.js.map} +0 -0
  414. /package/dist/{config-IVY5EQQ2.js.map → config-NRIOKK5T.js.map} +0 -0
  415. /package/dist/{config-KJOLGVB2.js.map → config-OYK2BSJK.js.map} +0 -0
  416. /package/dist/{config-KMVCVBYN.js.map → config-PB3KA2CE.js.map} +0 -0
  417. /package/dist/{config-KYTRXAB2.js.map → config-QY4IL3PH.js.map} +0 -0
  418. /package/dist/{config-LHFFXVYI.js.map → config-R4LAOEDS.js.map} +0 -0
  419. /package/dist/{config-NV5WXP64.js.map → config-RIAAD6RW.js.map} +0 -0
  420. /package/dist/{config-OT2TQQCN.js.map → config-SYNEQAUB.js.map} +0 -0
  421. /package/dist/{config-Q45Y46YT.js.map → config-TJKGYA2B.js.map} +0 -0
  422. /package/dist/{config-QAA646XB.js.map → config-UU27ALAA.js.map} +0 -0
  423. /package/dist/{config-QNMKWJ4M.js.map → config-UURRGA7U.js.map} +0 -0
  424. /package/dist/{config-QWCY3LBQ.js.map → config-VPLHQXVE.js.map} +0 -0
  425. /package/dist/{config-VM526IKB.js.map → config-WRACCRPN.js.map} +0 -0
  426. /package/dist/{config-WDAZFXYD.js.map → config-WVHKXEVE.js.map} +0 -0
  427. /package/dist/{config-ZFJYQZCH.js.map → config-XU7R36IE.js.map} +0 -0
  428. /package/dist/{config-ZV6G2ZEC.js.map → config-Y2KOUYSS.js.map} +0 -0
  429. /package/dist/{databricks_volume-7XOUYSTY.js.map → databricks_volume-CNCPTZHS.js.map} +0 -0
  430. /package/dist/{digitalocean-3CQ4CPPZ.js.map → digitalocean-DJZOUB6Q.js.map} +0 -0
  431. /package/dist/{discord-BG7OSRJG.js.map → discord-ETB2CADR.js.map} +0 -0
  432. /package/dist/{disk-XVLBCVKE.js.map → disk-WEHSTK3F.js.map} +0 -0
  433. /package/dist/{dropbox-74GYLV3R.js.map → dropbox-XN6PGLNE.js.map} +0 -0
  434. /package/dist/{email-5IZ7OBQ4.js.map → email-OV7XCP3T.js.map} +0 -0
  435. /package/dist/{gcs-EMEYU2XT.js.map → gcal-P56MRCGU.js.map} +0 -0
  436. /package/dist/{gdocs-R67TDPON.js.map → gcs-HFBIAE2C.js.map} +0 -0
  437. /package/dist/{gdrive-PRN2ALRK.js.map → gdocs-LQ3UXP3J.js.map} +0 -0
  438. /package/dist/{github-DV7E6OFV.js.map → gdrive-N6UBYLON.js.map} +0 -0
  439. /package/dist/{github_ci-Q554V5PA.js.map → github-BPZREGPI.js.map} +0 -0
  440. /package/dist/{gmail-OLN2LT4O.js.map → github_ci-7A4LUIZ7.js.map} +0 -0
  441. /package/dist/{gsheets-H4RYMQJ5.js.map → gmail-YED2MF6H.js.map} +0 -0
  442. /package/dist/{gslides-YLCHKJOM.js.map → gridfs-CPLQ4G62.js.map} +0 -0
  443. /package/dist/{hf_buckets-DTKXKKFF.js.map → gsheets-4BNIJPQ6.js.map} +0 -0
  444. /package/dist/{hf_datasets-55C4APKR.js.map → gslides-GDBYLO5A.js.map} +0 -0
  445. /package/dist/{hf_models-RO5JR36V.js.map → hf_buckets-FTJITQ3P.js.map} +0 -0
  446. /package/dist/{hf_spaces-ZVZ3EDRX.js.map → hf_datasets-6GXVKQD7.js.map} +0 -0
  447. /package/dist/{langfuse-ACASJZ7O.js.map → hf_models-PJPGZAC5.js.map} +0 -0
  448. /package/dist/{linear-IC37LZV7.js.map → hf_spaces-LFNFOLBF.js.map} +0 -0
  449. /package/dist/{minio-HZ576XFQ.js.map → jaeger-GCA6MJ6E.js.map} +0 -0
  450. /package/dist/{mongodb-JVR62OIO.js.map → lancedb-TJ5YSJY5.js.map} +0 -0
  451. /package/dist/{notion-HKRPQMJS.js.map → langfuse-RUMTUMXS.js.map} +0 -0
  452. /package/dist/{oci-ZLVECXTW.js.map → linear-BCE4KEAC.js.map} +0 -0
  453. /package/dist/{postgres-P36Z2YN4.js.map → minio-5SO6KBTK.js.map} +0 -0
  454. /package/dist/{qingstor-YLP6K3L4.js.map → mongodb-L5CMN2EE.js.map} +0 -0
  455. /package/dist/{r2-RPK25ANI.js.map → nextcloud-4O2LZVW2.js.map} +0 -0
  456. /package/dist/{redis-V5ULXULL.js.map → notion-RVKEAQ2M.js.map} +0 -0
  457. /package/dist/{s3-4OIOCAAT.js.map → oci-OQXOIC62.js.map} +0 -0
  458. /package/dist/{scaleway-CCWCLUHB.js.map → postgres-AV45GNRS.js.map} +0 -0
  459. /package/dist/{seaweedfs-QSWKF2FN.js.map → qingstor-W277YA4K.js.map} +0 -0
  460. /package/dist/{slack-YPS7PII3.js.map → r2-FUA4IORE.js.map} +0 -0
  461. /package/dist/{ssh-YFP3SMTJ.js.map → redis-LPS357NF.js.map} +0 -0
  462. /package/dist/{supabase-6CFTOKGZ.js.map → s3-FPNWWIVM.js.map} +0 -0
  463. /package/dist/{tencent-IWZZOSQ4.js.map → scaleway-BP3732U7.js.map} +0 -0
  464. /package/dist/{trello-XYKWZD6P.js.map → seaweedfs-MC6HIEP4.js.map} +0 -0
  465. /package/dist/{wasabi-6Z4DC5S5.js.map → slack-JFGW7VLN.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/gridfs/gridfs.ts","../src/accessor/gridfs.ts","../src/commands/builtin/gridfs/index.ts","../src/commands/builtin/gridfs/io.ts","../src/core/gridfs/constants.ts","../src/core/gridfs/copy.ts","../src/core/gridfs/_client.ts","../src/core/gridfs/create.ts","../src/core/gridfs/write.ts","../src/core/gridfs/du/entries.ts","../src/core/gridfs/du/walk.ts","../src/core/gridfs/du/size.ts","../src/core/gridfs/stat.ts","../src/core/gridfs/exists.ts","../src/core/gridfs/find.ts","../src/core/gridfs/mkdir.ts","../src/core/gridfs/read.ts","../src/core/gridfs/readdir.ts","../src/core/gridfs/rename.ts","../src/core/gridfs/rm.ts","../src/core/gridfs/rmdir.ts","../src/core/gridfs/stream.ts","../src/core/gridfs/truncate.ts","../src/core/gridfs/unlink.ts","../src/commands/builtin/gridfs/mkdir.ts","../src/commands/builtin/gridfs/rm.ts","../src/commands/builtin/gridfs/stat.ts","../src/commands/builtin/gridfs/tee.ts","../src/commands/builtin/gridfs/touch.ts","../src/ops/gridfs/index.ts","../src/resource/gridfs/prompt.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n BaseResource,\n PathSpec,\n ResourceName,\n makeResolveGlob,\n mountKey,\n mountPrefixOf,\n normalizeKeyPrefix,\n type FileStat,\n type FindOptions,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n} from '@struktoai/mirage-core'\nimport { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { GRIDFS_COMMANDS } from '../../commands/builtin/gridfs/index.ts'\nimport { SCOPE_ERROR } from '../../core/gridfs/constants.ts'\nimport { copy as copyCore } from '../../core/gridfs/copy.ts'\nimport { create as createCore } from '../../core/gridfs/create.ts'\nimport { size as duSizeCore, entries as duEntriesCore } from '../../core/gridfs/du/index.ts'\nimport { exists as existsCore } from '../../core/gridfs/exists.ts'\nimport { find as findCore } from '../../core/gridfs/find.ts'\nimport { mkdir as mkdirCore } from '../../core/gridfs/mkdir.ts'\nimport { read as readCore } from '../../core/gridfs/read.ts'\nimport { readdir as readdirCore } from '../../core/gridfs/readdir.ts'\nimport { rename as renameCore } from '../../core/gridfs/rename.ts'\nimport { rmR as rmRCore } from '../../core/gridfs/rm.ts'\nimport { rmdir as rmdirCore } from '../../core/gridfs/rmdir.ts'\nimport { stat as statCore } from '../../core/gridfs/stat.ts'\nimport { rangeRead as rangeReadCore, stream as streamCore } from '../../core/gridfs/stream.ts'\nimport { truncate as truncateCore } from '../../core/gridfs/truncate.ts'\nimport { unlink as unlinkCore } from '../../core/gridfs/unlink.ts'\nimport { write as writeCore } from '../../core/gridfs/write.ts'\nimport { GRIDFS_OPS } from '../../ops/gridfs/index.ts'\nimport { redactConfig, type GridFSConfig, type GridFSConfigRedacted } from './config.ts'\nimport { GRIDFS_PROMPT } from './prompt.ts'\n\nconst globCore = makeResolveGlob(readdirCore, SCOPE_ERROR)\n\nexport interface GridFSResourceState {\n type: string\n config: GridFSConfigRedacted\n}\n\nexport class GridFSResource extends BaseResource implements Resource {\n readonly kind: string = ResourceName.GRIDFS\n readonly cachesReads: boolean = true\n readonly supportsSnapshot: boolean = true\n // byte store: stat() sizes every file from metadata\n readonly sizesAlwaysKnown: boolean = true\n override readonly indexTtl: number = 600\n readonly prompt: string = GRIDFS_PROMPT\n readonly config: GridFSConfig\n readonly accessor: GridFSAccessor\n readonly opsMap: Record<string, unknown> = {\n read_bytes: readCore,\n write: writeCore,\n readdir: readdirCore,\n stat: statCore,\n unlink: unlinkCore,\n rmdir: rmdirCore,\n copy: copyCore,\n rename: renameCore,\n mkdir: mkdirCore,\n read_stream: streamCore,\n range_read: rangeReadCore,\n rm_recursive: rmRCore,\n du_size: duSizeCore,\n du_entries: duEntriesCore,\n create: createCore,\n truncate: truncateCore,\n exists: existsCore,\n find_flat: findCore,\n }\n\n constructor(config: GridFSConfig) {\n super()\n const normalized = normalizeKeyPrefix(config.keyPrefix)\n const cfg: GridFSConfig = { ...config }\n if (normalized !== undefined) {\n cfg.keyPrefix = normalized\n } else {\n delete cfg.keyPrefix\n }\n this.config = cfg\n this.accessor = new GridFSAccessor(this.config)\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n override async close(): Promise<void> {\n await this.accessor.close()\n await super.close()\n }\n\n commands(): readonly RegisteredCommand[] {\n return GRIDFS_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GRIDFS_OPS\n }\n\n streamPath(p: PathSpec): AsyncIterable<Uint8Array> {\n return streamCore(this.accessor, p)\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return readCore(this.accessor, p)\n }\n\n writeFile(p: PathSpec, data: Uint8Array): Promise<void> {\n return writeCore(this.accessor, p, data)\n }\n\n async appendFile(p: PathSpec, data: Uint8Array): Promise<void> {\n let existing: Uint8Array\n try {\n existing = await readCore(this.accessor, p)\n } catch (err) {\n if ((err as { code?: string } | null)?.code === 'ENOENT') {\n existing = new Uint8Array()\n } else {\n throw err\n }\n }\n const merged = new Uint8Array(existing.byteLength + data.byteLength)\n merged.set(existing, 0)\n merged.set(data, existing.byteLength)\n await writeCore(this.accessor, p, merged)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return readdirCore(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return statCore(this.accessor, p)\n }\n\n exists(p: PathSpec): Promise<boolean> {\n return existsCore(this.accessor, p)\n }\n\n mkdir(p: PathSpec): Promise<void> {\n return mkdirCore(this.accessor, p)\n }\n\n rmdir(p: PathSpec): Promise<void> {\n return rmdirCore(this.accessor, p)\n }\n\n unlink(p: PathSpec): Promise<void> {\n return unlinkCore(this.accessor, p)\n }\n\n rename(src: PathSpec, dst: PathSpec): Promise<void> {\n return renameCore(this.accessor, src, dst)\n }\n\n truncate(p: PathSpec, length: number): Promise<void> {\n return truncateCore(this.accessor, p, length)\n }\n\n copy(src: PathSpec, dst: PathSpec): Promise<void> {\n return copyCore(this.accessor, src, dst)\n }\n\n rmR(p: PathSpec): Promise<void> {\n return rmRCore(this.accessor, p)\n }\n\n du(p: PathSpec): Promise<number> {\n return duSizeCore(this.accessor, p)\n }\n\n find(p: PathSpec, options: FindOptions = {}): Promise<string[]> {\n return findCore(this.accessor, p, options)\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective = prefix\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath)\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, prefix),\n }),\n )\n : paths\n return globCore(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GridFSResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactConfig(this.config),\n })\n }\n\n loadState(_state: GridFSResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { Db, MongoClient } from 'mongodb'\nimport { Accessor } from '@struktoai/mirage-core'\nimport { loadOptionalPeer } from '../optional_peer.ts'\nimport type { GridFSConfig } from '../resource/gridfs/config.ts'\n\ninterface MongoModule {\n MongoClient: new (uri: string) => MongoClient\n}\n\nexport class GridFSAccessor extends Accessor {\n readonly config: GridFSConfig\n private clientPromise: Promise<MongoClient> | null = null\n\n constructor(config: GridFSConfig) {\n super()\n this.config = config\n }\n\n async client(): Promise<MongoClient> {\n this.clientPromise ??= this._connect()\n return this.clientPromise\n }\n\n async db(): Promise<Db> {\n const client = await this.client()\n return client.db(this.config.database)\n }\n\n private async _connect(): Promise<MongoClient> {\n const mod = await loadOptionalPeer(() => import('mongodb') as unknown as Promise<MongoModule>, {\n feature: 'GridFSResource',\n packageName: 'mongodb',\n })\n const client = new mod.MongoClient(this.config.uri)\n await client.connect()\n return client\n }\n\n async close(): Promise<void> {\n if (this.clientPromise === null) return\n const client = await this.clientPromise\n this.clientPromise = null\n await client.close()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n ResourceName,\n makeGenericCommands,\n resolveGlobOf,\n withDefaultProvisions,\n type RegisteredCommand,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { GRIDFS_IO } from './io.ts'\nimport { GRIDFS_MKDIR } from './mkdir.ts'\nimport { GRIDFS_RM } from './rm.ts'\nimport { GRIDFS_STAT } from './stat.ts'\nimport { GRIDFS_TEE } from './tee.ts'\nimport { GRIDFS_TOUCH } from './touch.ts'\n\n// gridfs-specific behaviours kept as overrides: no real directories\n// (mkdir -p, rm not-empty), write-tracking (touch/tee), du_multi\n// aggregation, and the index-threaded, missing-operand stat.\nconst GRIDFS_OVERRIDES = new Set(['stat', 'rm', 'mkdir', 'tee', 'touch'])\n\nexport const GRIDFS_COMMANDS: readonly RegisteredCommand[] = [\n ...makeGenericCommands<GridFSAccessor>(ResourceName.GRIDFS, GRIDFS_IO, {\n overrides: GRIDFS_OVERRIDES,\n }),\n ...withDefaultProvisions(\n [...GRIDFS_STAT, ...GRIDFS_RM, ...GRIDFS_MKDIR, ...GRIDFS_TEE, ...GRIDFS_TOUCH],\n GRIDFS_IO.stat,\n resolveGlobOf(GRIDFS_IO),\n GRIDFS_IO.readdir,\n ),\n]\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { type CommandIO, rangeOf } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { SCOPE_ERROR } from '../../../core/gridfs/constants.ts'\nimport { copy as gridfsCopy } from '../../../core/gridfs/copy.ts'\nimport { create as gridfsCreate } from '../../../core/gridfs/create.ts'\nimport { size as gridfsDu, entries as gridfsDuAll } from '../../../core/gridfs/du/index.ts'\nimport { exists as gridfsExists } from '../../../core/gridfs/exists.ts'\nimport { find as gridfsFind } from '../../../core/gridfs/find.ts'\nimport { mkdir as gridfsMkdir } from '../../../core/gridfs/mkdir.ts'\nimport { read as gridfsRead } from '../../../core/gridfs/read.ts'\nimport { readdir as gridfsReaddir } from '../../../core/gridfs/readdir.ts'\nimport { rename as gridfsRename } from '../../../core/gridfs/rename.ts'\nimport { rmR as gridfsRmR } from '../../../core/gridfs/rm.ts'\nimport { rmdir as gridfsRmdir } from '../../../core/gridfs/rmdir.ts'\nimport { stat as gridfsStat } from '../../../core/gridfs/stat.ts'\nimport { stream as gridfsStream } from '../../../core/gridfs/stream.ts'\nimport { truncate as gridfsTruncate } from '../../../core/gridfs/truncate.ts'\nimport { unlink as gridfsUnlink } from '../../../core/gridfs/unlink.ts'\nimport { write as gridfsWrite } from '../../../core/gridfs/write.ts'\n\nexport const GRIDFS_IO: CommandIO<GridFSAccessor> = {\n readdir: gridfsReaddir,\n readBytes: gridfsRead,\n readRange: rangeOf(gridfsRead),\n readStream: gridfsStream,\n stat: gridfsStat,\n isMounted: () => true,\n local: false,\n maxGlobMatches: SCOPE_ERROR,\n write: gridfsWrite,\n exists: gridfsExists,\n mkdir: gridfsMkdir,\n unlink: gridfsUnlink,\n rmdir: gridfsRmdir,\n rmR: gridfsRmR,\n rename: gridfsRename,\n copy: gridfsCopy,\n create: gridfsCreate,\n truncate: gridfsTruncate,\n find: gridfsFind,\n du: { size: gridfsDu, entries: gridfsDuAll },\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nexport const SCOPE_ERROR = 5000\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { enoent, invalidateAfterWrite, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { bucket, gridfsKey, latestFile, rawPathOf } from './_client.ts'\n\nexport async function copy(accessor: GridFSAccessor, src: PathSpec, dst: PathSpec): Promise<void> {\n // Copies the latest revision only (mirrors S3 CopyObject), streamed\n // chunk-by-chunk so large files never buffer fully in memory.\n const srcKey = gridfsKey(rawPathOf(src), accessor.config)\n const dstKey = gridfsKey(rawPathOf(dst), accessor.config)\n const doc = await latestFile(accessor, srcKey)\n if (doc === null) throw enoent(src)\n const b = await bucket(accessor)\n const readable = b.openDownloadStream(doc._id)\n const upload = b.openUploadStream(dstKey)\n await new Promise<void>((resolve, reject) => {\n upload.on('error', reject)\n readable.on('error', reject)\n upload.on('finish', () => {\n resolve()\n })\n readable.pipe(upload)\n })\n await invalidateAfterWrite(dst)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { Collection, Db, Document, GridFSBucket, ObjectId } from 'mongodb'\nimport { keyPrefix as kp, mountPrefixOf, type PathSpec } from '@struktoai/mirage-core'\nimport { loadOptionalPeer } from '../../optional_peer.ts'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport type { GridFSConfig } from '../../resource/gridfs/config.ts'\n\nexport interface GridFSFileDoc {\n _id: ObjectId\n filename: string\n length: number\n uploadDate: Date\n}\n\ninterface GridFSModule {\n GridFSBucket: new (\n db: Db,\n options?: { bucketName?: string; chunkSizeBytes?: number },\n ) => GridFSBucket\n ObjectId: new (id?: string) => ObjectId\n}\n\n// Newest revision of a filename wins; _id breaks uploadDate ties because\n// ObjectIds are monotonic within a process.\nconst LATEST_SORT: Record<string, -1> = { uploadDate: -1, _id: -1 }\n\nconst BATCH = 1000\n\nlet cachedModule: Promise<GridFSModule> | null = null\n\nexport async function loadGridFSModule(): Promise<GridFSModule> {\n cachedModule ??= loadOptionalPeer(() => import('mongodb') as unknown as Promise<GridFSModule>, {\n feature: 'GridFSResource',\n packageName: 'mongodb',\n })\n return cachedModule\n}\n\nexport function gridfsKey(path: string, config: GridFSConfig): string {\n return kp.apply(config.keyPrefix ?? '', path)\n}\n\nexport function gridfsPrefix(path: string, config: GridFSConfig): string {\n return kp.applyDir(config.keyPrefix ?? '', path)\n}\n\nexport function stripKeyPrefix(key: string, config: GridFSConfig): string {\n return kp.strip(config.keyPrefix ?? '', key)\n}\n\nexport function rawPathOf(path: PathSpec): string {\n const prefix = mountPrefixOf(path.virtual, path.resourcePath)\n return prefix !== '' && path.virtual.startsWith(prefix)\n ? path.virtual.slice(prefix.length) || '/'\n : path.virtual\n}\n\nfunction bucketName(config: GridFSConfig): string {\n return config.bucket ?? 'fs'\n}\n\nexport async function filesColl(accessor: GridFSAccessor): Promise<Collection> {\n const db = await accessor.db()\n return db.collection(`${bucketName(accessor.config)}.files`)\n}\n\nasync function chunksColl(accessor: GridFSAccessor): Promise<Collection> {\n const db = await accessor.db()\n return db.collection(`${bucketName(accessor.config)}.chunks`)\n}\n\nexport async function bucket(accessor: GridFSAccessor): Promise<GridFSBucket> {\n const mod = await loadGridFSModule()\n const db = await accessor.db()\n const options: { bucketName: string; chunkSizeBytes?: number } = {\n bucketName: bucketName(accessor.config),\n }\n if (accessor.config.chunkSizeBytes !== undefined) {\n options.chunkSizeBytes = accessor.config.chunkSizeBytes\n }\n return new mod.GridFSBucket(db, options)\n}\n\nexport function escapeRegex(raw: string): string {\n let out = ''\n for (const ch of raw) {\n out += '\\\\^$.|?*+()[]{}'.includes(ch) ? `\\\\${ch}` : ch\n }\n return out\n}\n\nexport function prefixQuery(pfx: string): Record<string, unknown> {\n if (pfx === '') return {}\n return { filename: { $regex: `^${escapeRegex(pfx)}` } }\n}\n\nexport async function latestFile(\n accessor: GridFSAccessor,\n key: string,\n): Promise<GridFSFileDoc | null> {\n const files = await filesColl(accessor)\n const doc = await files.findOne({ filename: key }, { sort: LATEST_SORT })\n return doc as GridFSFileDoc | null\n}\n\n/**\n * Yield the newest revision of each filename matching a query, sorted by\n * filename. Mirrors Python's `iter_latest`.\n */\nexport async function* iterLatest(\n accessor: GridFSAccessor,\n query: Record<string, unknown>,\n): AsyncIterable<GridFSFileDoc> {\n const files = await filesColl(accessor)\n const pipeline: Document[] = [\n { $match: query },\n { $sort: { filename: 1, uploadDate: -1, _id: -1 } },\n {\n $group: {\n _id: '$filename',\n fid: { $first: '$_id' },\n length: { $first: '$length' },\n uploadDate: { $first: '$uploadDate' },\n },\n },\n { $sort: { _id: 1 } },\n ]\n for await (const doc of files.aggregate(pipeline)) {\n yield {\n filename: doc._id as string,\n _id: doc.fid as ObjectId,\n length: doc.length as number,\n uploadDate: doc.uploadDate as Date,\n }\n }\n}\n\n/** Delete every revision (file doc + chunks) matching a query. */\nexport async function deleteAll(\n accessor: GridFSAccessor,\n query: Record<string, unknown>,\n): Promise<void> {\n const files = await filesColl(accessor)\n const chunks = await chunksColl(accessor)\n const ids: ObjectId[] = []\n for await (const doc of files.find(query, { projection: { _id: 1 } })) {\n ids.push(doc._id)\n }\n for (let i = 0; i < ids.length; i += BATCH) {\n const batch = ids.slice(i, i + BATCH)\n await chunks.deleteMany({ files_id: { $in: batch } })\n await files.deleteMany({ _id: { $in: batch } })\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { ResourceName, invalidateAfterWrite, record, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { gridfsKey, rawPathOf } from './_client.ts'\nimport { uploadBytes } from './write.ts'\n\nexport async function create(accessor: GridFSAccessor, path: PathSpec): Promise<void> {\n const raw = rawPathOf(path)\n const startMs = performance.now()\n await uploadBytes(accessor, gridfsKey(raw, accessor.config), new Uint8Array(0))\n record('create', path.virtual, ResourceName.GRIDFS, 0, startMs)\n await invalidateAfterWrite(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n ResourceName,\n invalidateAfterWrite,\n invalidateAncestors,\n record,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { bucket, gridfsKey, rawPathOf } from './_client.ts'\n\nexport async function uploadBytes(\n accessor: GridFSAccessor,\n key: string,\n data: Uint8Array,\n): Promise<void> {\n const b = await bucket(accessor)\n const upload = b.openUploadStream(key)\n await new Promise<void>((resolve, reject) => {\n upload.on('error', reject)\n upload.on('finish', () => {\n resolve()\n })\n upload.end(data)\n })\n}\n\nexport async function write(\n accessor: GridFSAccessor,\n path: PathSpec,\n data: Uint8Array,\n): Promise<void> {\n // Uploads a new revision; older revisions stay in fs.files, so reads\n // pinned to an old revision _id keep working (GridFS-native versioning).\n const raw = rawPathOf(path)\n const key = gridfsKey(raw, accessor.config)\n const startMs = performance.now()\n await uploadBytes(accessor, key, data)\n record('write', path.virtual, ResourceName.GRIDFS, data.byteLength, startMs)\n await invalidateAfterWrite(path)\n // An upload materializes every missing level of the key at once, so the\n // listings above the immediate parent gained entries too.\n await invalidateAncestors(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { rstripSlash, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { gridfsKey, iterLatest, rawPathOf, stripKeyPrefix } from '../_client.ts'\nimport { duQuery } from './walk.ts'\n\n/**\n * Return `[path, size]` pairs for every file under the prefix plus the\n * total. Mirrors Python's `du.entries`.\n */\nexport async function entries(\n accessor: GridFSAccessor,\n path: PathSpec,\n): Promise<[[string, number][], number]> {\n const raw = rawPathOf(path)\n const stem = rstripSlash(gridfsKey(raw, accessor.config))\n const entries: [string, number][] = []\n let total = 0\n for await (const doc of iterLatest(accessor, duQuery(stem))) {\n const entry = '/' + stripKeyPrefix(doc.filename, accessor.config)\n entries.push([entry, doc.length])\n total += doc.length\n }\n return [entries, total]\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { escapeRegex } from '../_client.ts'\n\nexport function duQuery(stem: string): Record<string, unknown> {\n if (stem === '') return {}\n return {\n $or: [{ filename: stem }, { filename: { $regex: `^${escapeRegex(stem + '/')}` } }],\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { rstripSlash, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { gridfsKey, iterLatest, rawPathOf } from '../_client.ts'\nimport { duQuery } from './walk.ts'\n\nexport async function size(accessor: GridFSAccessor, path: PathSpec): Promise<number> {\n const raw = rawPathOf(path)\n const stem = rstripSlash(gridfsKey(raw, accessor.config))\n let total = 0\n for await (const doc of iterLatest(accessor, duQuery(stem))) {\n total += doc.length\n }\n return total\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FileStat,\n FileType,\n enoent,\n gnuBasename,\n guessType,\n mountPrefixOf,\n rstripSlash,\n stripSlash,\n type IndexCacheStore,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { escapeRegex, filesColl, gridfsKey, latestFile } from './_client.ts'\n\nexport async function stat(\n accessor: GridFSAccessor,\n path: PathSpec,\n index?: IndexCacheStore,\n): Promise<FileStat> {\n const original = path.virtual\n const prefix = mountPrefixOf(path.virtual, path.resourcePath)\n const rawPath =\n prefix !== '' && original.startsWith(prefix) ? original.slice(prefix.length) || '/' : original\n const stripped = stripSlash(rawPath)\n if (stripped === '') {\n return new FileStat({ name: '/', type: FileType.DIRECTORY })\n }\n\n // A trailing slash (\"/gridfs/csv/\") signals the caller treats it as a\n // directory. GridFS allows both a file named \"csv\" AND deeper files\n // under \"csv/\" to coexist — without this hint we'd return the file and\n // `ls /gridfs/csv/` would list the file itself instead of the prefix.\n const hintsDirectory = rawPath.endsWith('/')\n\n // Fast path: check the index cache populated by readdir().\n if (index !== undefined) {\n const virtualKey = prefix !== '' ? `${prefix}/${stripped}` : '/' + stripped\n const lookup = await index.get(virtualKey)\n if (lookup.entry !== undefined && lookup.entry !== null) {\n const entry = lookup.entry\n if (entry.resourceType === 'folder') {\n return new FileStat({ name: entry.name, type: FileType.DIRECTORY })\n }\n return new FileStat({\n name: entry.name,\n size: entry.size ?? null,\n modified: entry.remoteTime !== '' ? entry.remoteTime : null,\n type: guessType(entry.name),\n })\n }\n // Parent was already listed and didn't include this path — it doesn't\n // exist. Avoids speculative lookups for shell-probed paths like .git.\n const parent = virtualKey.replace(/\\/[^/]*$/, '') || '/'\n const parentListing = await index.listDir(parent)\n if (parentListing.entries !== undefined && parentListing.entries !== null) {\n throw enoent(path)\n }\n }\n\n const { config } = accessor\n const key = gridfsKey(rawPath, config)\n // File lookup first — skipped when the path hints a directory so a\n // coexisting file of the same name does not shadow the prefix.\n if (!hintsDirectory) {\n const doc = await latestFile(accessor, key)\n if (doc !== null) {\n const revision = doc._id.toString()\n return new FileStat({\n name: gnuBasename(rawPath),\n size: doc.length,\n modified: doc.uploadDate.toISOString(),\n fingerprint: revision,\n revision,\n type: guessType(rawPath),\n extra: { file_id: revision },\n })\n }\n }\n\n // No file (or it was skipped) — check whether the path is a valid\n // prefix (directory): a \"key/\" marker or any deeper filename proves it.\n const pfx = rstripSlash(key) + '/'\n const files = await filesColl(accessor)\n const probe = await files.findOne(\n { filename: { $regex: `^${escapeRegex(pfx)}` } },\n { projection: { _id: 1 } },\n )\n if (probe !== null) {\n return new FileStat({ name: gnuBasename(rawPath) || '/', type: FileType.DIRECTORY })\n }\n\n throw enoent(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { stat } from './stat.ts'\n\nexport async function exists(accessor: GridFSAccessor, path: PathSpec): Promise<boolean> {\n try {\n await stat(accessor, path)\n return true\n } catch (err) {\n if ((err as { code?: string } | null)?.code === 'ENOENT') return false\n throw err\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n buildTree,\n emitStartPath,\n keep,\n rstripSlash,\n startBasename,\n type FindOptions,\n type PathSpec,\n compareCodePoints,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport {\n escapeRegex,\n filesColl,\n gridfsPrefix,\n iterLatest,\n prefixQuery,\n rawPathOf,\n stripKeyPrefix,\n} from './_client.ts'\n\n/**\n * Translate a find -name glob into a regex fragment matching one path\n * segment. Returns null for character classes we do not translate (the\n * caller falls back to the unpushed prefix query; client-side keep()\n * still applies the exact semantics).\n */\nexport function globRegex(pattern: string): string | null {\n if (pattern.includes('[') || pattern.includes(']')) return null\n let out = ''\n for (const ch of pattern) {\n if (ch === '*') out += '[^/]*'\n else if (ch === '?') out += '[^/]'\n else out += escapeRegex(ch)\n }\n return out\n}\n\n/**\n * Build the fs.files query, pushing -name/-iname/-type/-size server-side\n * when the translation is exact. Every condition is a superset of the GNU\n * semantics (directory markers always pass the size condition, unpushable\n * globs fall back to the prefix scan), so the client-side keep() pass\n * stays authoritative.\n */\nexport function buildQuery(\n pfx: string,\n options: FindOptions,\n pushdown: boolean,\n): Record<string, unknown> {\n const conds: Record<string, unknown>[] = []\n const base = prefixQuery(pfx)\n if (Object.keys(base).length > 0) conds.push(base)\n if (pushdown) {\n const escaped = escapeRegex(pfx)\n const globs: [string | null | undefined, string][] = [\n [options.name, ''],\n [options.iname, 'i'],\n ]\n for (const [pat, flags] of globs) {\n if (pat === undefined || pat === null) continue\n const rx = globRegex(pat)\n if (rx === null) continue\n const regex: Record<string, unknown> = { $regex: `^${escaped}(.*/)?${rx}/?$` }\n if (flags !== '') regex.$options = flags\n conds.push({ filename: regex })\n }\n if (options.type === 'f') {\n conds.push({ filename: { $not: { $regex: '/$' } } })\n } else if (options.type === 'd') {\n conds.push({ filename: { $regex: '/$' } })\n }\n if (options.minSize != null || options.maxSize != null) {\n const sizeCond: Record<string, number> = {}\n if (options.minSize != null) sizeCond.$gte = options.minSize\n if (options.maxSize != null) sizeCond.$lte = options.maxSize\n // Directory markers ride through; the client-side dirs-count-as-0\n // rule decides their fate.\n conds.push({ $or: [{ length: sizeCond }, { filename: { $regex: '/$' } }] })\n }\n }\n if (conds.length === 0) return {}\n if (conds.length === 1) return conds[0] ?? {}\n return { $and: conds }\n}\n\nexport async function find(\n accessor: GridFSAccessor,\n path: PathSpec,\n options: FindOptions = {},\n): Promise<string[]> {\n const raw = rawPathOf(path)\n const startName = startBasename(path.virtual)\n const pfx = gridfsPrefix(raw, accessor.config)\n const rootKey = rstripSlash('/' + stripKeyPrefix(pfx, accessor.config)) || '/'\n const baseDepth = rootKey === '/' ? 0 : (rootKey.match(/\\//g) ?? []).length\n const results: string[] = []\n const seenDirs = new Set<string>()\n const seen = { descendant: false, marker: false }\n const empty = options.empty === true\n // Narrowing beyond the prefix is only sound when directories cannot\n // appear in the output (-type f): implicit directories are synthesized\n // client-side from file paths, so any server-side file exclusion would\n // also drop the evidence for a matching parent directory.\n const pushdown =\n options.tree === undefined &&\n options.nameExclude === undefined &&\n options.orNames === undefined &&\n options.pathPattern === undefined &&\n !empty &&\n options.type === 'f'\n const tree =\n options.tree ??\n buildTree({\n name: options.name,\n iname: options.iname,\n pathPattern: options.pathPattern,\n type: options.type,\n nameExclude: options.nameExclude,\n orNames: options.orNames,\n empty: options.empty,\n })\n const query = buildQuery(pfx, options, pushdown)\n const narrowed = JSON.stringify(query) !== JSON.stringify(prefixQuery(pfx))\n for await (const doc of iterLatest(accessor, query)) {\n const key = doc.filename\n if (key === pfx) {\n seen.marker = true\n continue\n }\n seen.descendant = true\n const isDir = key.endsWith('/')\n const fullPath = rstripSlash('/' + stripKeyPrefix(key, accessor.config)) || '/'\n const size = doc.length\n if (isDir) {\n if (seenDirs.has(fullPath)) continue\n seenDirs.add(fullPath)\n }\n const entries: [string, 'f' | 'd'][] = [[fullPath, isDir ? 'd' : 'f']]\n // Implicit directories exist only as filename prefixes; synthesize the\n // parent chain so find agrees with readdir on externally-populated\n // buckets.\n let parent = fullPath.slice(0, fullPath.lastIndexOf('/')) || '/'\n while (parent !== rootKey && parent !== '/') {\n if (!seenDirs.has(parent)) {\n seenDirs.add(parent)\n entries.push([parent, 'd'])\n }\n parent = parent.slice(0, parent.lastIndexOf('/')) || '/'\n }\n for (const [ep, kind] of entries) {\n const entryName = ep.split('/').pop() ?? ''\n const depth = (ep.match(/\\//g) ?? []).length - baseDepth\n if (options.maxDepth !== null && options.maxDepth !== undefined && depth > options.maxDepth) {\n continue\n }\n const isEmpty = !empty ? null : kind === 'd' ? false : size === 0\n if (!keep({ key: ep, name: entryName, kind, depth, isEmpty }, tree, options.minDepth)) {\n continue\n }\n if (options.minSize != null || options.maxSize != null) {\n // Directories count as size 0 for -size (deliberate GNU divergence).\n const effective = kind === 'd' ? 0 : size\n if (options.minSize != null && effective < options.minSize) continue\n if (options.maxSize != null && effective > options.maxSize) continue\n }\n results.push(ep)\n }\n }\n if (narrowed && !seen.descendant && !seen.marker) {\n // The narrowed query may have excluded every doc under a prefix that\n // does exist; probe so the start path still emits.\n const files = await filesColl(accessor)\n const probe = await files.findOne(\n pfx === '' ? {} : { filename: { $regex: `^${escapeRegex(pfx)}` } },\n { projection: { _id: 1 } },\n )\n seen.descendant = probe !== null\n }\n if (seen.descendant || seen.marker) {\n emitStartPath(results, rootKey, startName, {\n kind: 'd',\n isEmpty: empty ? !seen.descendant : null,\n exists: true,\n tree,\n maxDepth: options.maxDepth,\n minDepth: options.minDepth,\n minSize: options.minSize,\n maxSize: options.maxSize,\n })\n }\n // A file key and a synthesized directory can name the same path (`data/a`\n // alongside `data/a/b.txt`), which these stores allow and a filesystem does\n // not; find prints such a path once.\n return [...new Set(results)].sort(compareCodePoints)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { invalidateAfterWrite, invalidateAncestors, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { gridfsPrefix, rawPathOf } from './_client.ts'\nimport { uploadBytes } from './write.ts'\n\nexport async function mkdir(\n accessor: GridFSAccessor,\n path: PathSpec,\n parents = false,\n): Promise<void> {\n // GridFS has no real directories; parents are implicit. A zero-byte\n // \"key/\" marker doc makes the empty directory visible.\n const raw = rawPathOf(path)\n const pfx = gridfsPrefix(raw, accessor.config)\n if (pfx === '') return\n await uploadBytes(accessor, pfx, new Uint8Array(0))\n await invalidateAfterWrite(path)\n if (parents) await invalidateAncestors(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { ObjectId } from 'mongodb'\nimport {\n ResourceName,\n enoent,\n record,\n revisionFor,\n type IndexCacheStore,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { bucket, gridfsKey, latestFile, loadGridFSModule, rawPathOf } from './_client.ts'\n\nexport interface GridFSReadOptions {\n offset?: number\n size?: number\n}\n\nexport async function resolveFileId(\n accessor: GridFSAccessor,\n path: PathSpec,\n key: string,\n): Promise<ObjectId> {\n const pinnedRevision = revisionFor(path.virtual)\n if (pinnedRevision !== null) {\n const mod = await loadGridFSModule()\n const objectIdCtor = (mod as unknown as { ObjectId: new (id: string) => ObjectId }).ObjectId\n return new objectIdCtor(pinnedRevision)\n }\n const doc = await latestFile(accessor, key)\n if (doc === null) throw enoent(path)\n return doc._id\n}\n\nexport async function downloadBytes(\n accessor: GridFSAccessor,\n path: PathSpec,\n fileId: ObjectId,\n options: GridFSReadOptions = {},\n): Promise<Uint8Array> {\n const b = await bucket(accessor)\n const streamOptions: { start?: number; end?: number } = {}\n if (options.offset !== undefined && options.offset !== 0) {\n streamOptions.start = options.offset\n }\n if (options.size !== undefined) {\n streamOptions.end = (options.offset ?? 0) + options.size\n }\n const readable = b.openDownloadStream(\n fileId,\n Object.keys(streamOptions).length > 0 ? streamOptions : undefined,\n )\n const chunks: Uint8Array[] = []\n let total = 0\n try {\n for await (const chunk of readable as AsyncIterable<Uint8Array>) {\n chunks.push(chunk)\n total += chunk.byteLength\n }\n } catch (err) {\n if ((err as { code?: string } | null)?.code === 'ENOENT' || isNoFileError(err)) {\n throw enoent(path)\n }\n throw err\n }\n const out = new Uint8Array(total)\n let offset = 0\n for (const c of chunks) {\n out.set(c, offset)\n offset += c.byteLength\n }\n return out\n}\n\nexport function isNoFileError(err: unknown): boolean {\n if (err === null || typeof err !== 'object') return false\n const message = (err as { message?: string }).message ?? ''\n return message.includes('FileNotFound')\n}\n\nexport async function read(\n accessor: GridFSAccessor,\n path: PathSpec,\n _index?: IndexCacheStore,\n options: GridFSReadOptions = {},\n): Promise<Uint8Array> {\n const virtual = path.virtual\n const raw = rawPathOf(path)\n const key = gridfsKey(raw, accessor.config)\n const startMs = performance.now()\n const fileId = await resolveFileId(accessor, path, key)\n const bytes = await downloadBytes(accessor, path, fileId, options)\n const revision = fileId.toString()\n record('read', virtual, ResourceName.GRIDFS, bytes.byteLength, startMs, {\n fingerprint: revision,\n revision,\n })\n return bytes\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IndexEntry,\n ResourceType,\n mountPrefixOf,\n rstripSlash,\n type IndexCacheStore,\n type PathSpec,\n compareCodePoints,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { gridfsPrefix, iterLatest, prefixQuery, stripKeyPrefix } from './_client.ts'\nimport { SCOPE_ERROR } from './constants.ts'\n\nexport async function readdir(\n accessor: GridFSAccessor,\n path: PathSpec,\n index?: IndexCacheStore,\n): Promise<string[]> {\n const original = path.virtual\n const prefix = mountPrefixOf(path.virtual, path.resourcePath)\n // When called from resolveGlob with a pattern, use path.directory for the\n // listing; direct callers pass pattern=null so we use path.virtual.\n const virtual = path.pattern !== null ? path.directory : original\n const rawPath =\n prefix !== '' && virtual.startsWith(prefix) ? virtual.slice(prefix.length) || '/' : virtual\n\n const virtualKey = rawPath === '/' ? '/' : rstripSlash(rawPath) || '/'\n const rawFullKey = prefix !== '' ? `${prefix}${virtualKey}` : virtualKey\n const fullVirtualKey = rstripSlash(rawFullKey) || '/'\n if (index !== undefined) {\n const listing = await index.listDir(fullVirtualKey)\n if (listing.entries !== undefined && listing.entries !== null) {\n return listing.entries\n }\n }\n\n const { config } = accessor\n const pfx = gridfsPrefix(rawPath, config)\n const names: string[] = []\n const dirKeys = new Set<string>()\n const sizes = new Map<string, number>()\n const times = new Map<string, string>()\n for await (const doc of iterLatest(accessor, prefixQuery(pfx))) {\n const fname = doc.filename\n if (fname === pfx) continue\n const relative = fname.slice(pfx.length)\n const slash = relative.indexOf('/')\n if (slash === -1) {\n const key = '/' + stripKeyPrefix(fname, config)\n names.push(key)\n sizes.set(key, doc.length)\n times.set(key, doc.uploadDate.toISOString())\n } else {\n // A deeper filename or a \"seg/\" directory marker both imply an\n // immediate child directory (S3 CommonPrefixes equivalent).\n const child = pfx + relative.slice(0, slash)\n const key = '/' + stripKeyPrefix(child, config)\n if (!dirKeys.has(key)) {\n names.push(key)\n dirKeys.add(key)\n }\n }\n }\n names.sort(compareCodePoints)\n if (names.length > SCOPE_ERROR) {\n console.warn(\n `gridfs readdir: ${fullVirtualKey} returned ${String(names.length)} entries (limit ${String(SCOPE_ERROR)})`,\n )\n }\n const virtualEntries = names\n .map((e) => (prefix !== '' ? `${prefix}${e}` : e))\n .sort(compareCodePoints)\n if (index !== undefined) {\n const indexEntries: [string, IndexEntry][] = names.map((e) => {\n const name = e.split('/').pop() ?? ''\n if (dirKeys.has(e)) {\n // GridFS \"folders\" are synthetic prefixes with no file doc of\n // their own, so there is no uploadDate or length to record.\n return [name, new IndexEntry({ id: e, name, resourceType: ResourceType.FOLDER })]\n }\n return [\n name,\n new IndexEntry({\n id: e,\n name,\n resourceType: ResourceType.FILE,\n size: sizes.get(e) ?? null,\n remoteTime: times.get(e) ?? '',\n }),\n ]\n })\n await index.setDir(fullVirtualKey, indexEntries)\n }\n return virtualEntries\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n enoent,\n invalidateAfterUnlink,\n invalidateAfterWrite,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { deleteAll, filesColl, gridfsKey, latestFile, rawPathOf } from './_client.ts'\n\nexport async function rename(\n accessor: GridFSAccessor,\n src: PathSpec,\n dst: PathSpec,\n): Promise<void> {\n // Server-side: retag every revision's filename instead of copying\n // bytes, so the whole revision history moves with the file.\n const srcKey = gridfsKey(rawPathOf(src), accessor.config)\n const dstKey = gridfsKey(rawPathOf(dst), accessor.config)\n if ((await latestFile(accessor, srcKey)) === null) {\n throw enoent(src)\n }\n await deleteAll(accessor, { filename: dstKey })\n const files = await filesColl(accessor)\n await files.updateMany({ filename: srcKey }, { $set: { filename: dstKey } })\n await invalidateAfterWrite(dst)\n await invalidateAfterUnlink(src)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { invalidateAfterUnlink, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { deleteAll, gridfsPrefix, prefixQuery, rawPathOf } from './_client.ts'\n\nexport async function rmR(accessor: GridFSAccessor, path: PathSpec): Promise<void> {\n // Recursively delete every file (every revision) under the prefix.\n const raw = rawPathOf(path)\n const pfx = gridfsPrefix(raw, accessor.config)\n await deleteAll(accessor, prefixQuery(pfx))\n await invalidateAfterUnlink(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { invalidateAfterUnlink, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { deleteAll, gridfsPrefix, prefixQuery, rawPathOf } from './_client.ts'\n\nexport async function rmdir(accessor: GridFSAccessor, path: PathSpec): Promise<void> {\n const raw = rawPathOf(path)\n const pfx = gridfsPrefix(raw, accessor.config)\n await deleteAll(accessor, prefixQuery(pfx))\n await invalidateAfterUnlink(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { ResourceName, enoent, recordStream, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { bucket, gridfsKey, rawPathOf } from './_client.ts'\nimport { isNoFileError, read, resolveFileId } from './read.ts'\n\nconst DEFAULT_CHUNK_SIZE = 8192\n\nexport async function* stream(accessor: GridFSAccessor, path: PathSpec): AsyncIterable<Uint8Array> {\n const virtual = path.virtual\n const raw = rawPathOf(path)\n const key = gridfsKey(raw, accessor.config)\n const rec = recordStream('read', virtual, ResourceName.GRIDFS)\n const fileId = await resolveFileId(accessor, path, key)\n if (rec !== null) {\n const revision = fileId.toString()\n rec.fingerprint = revision\n rec.revision = revision\n }\n const b = await bucket(accessor)\n const readable = b.openDownloadStream(fileId)\n let pending: Uint8Array = new Uint8Array(0)\n try {\n for await (const chunk of readable as AsyncIterable<Uint8Array>) {\n const merged = new Uint8Array(pending.byteLength + chunk.byteLength)\n merged.set(pending, 0)\n merged.set(chunk, pending.byteLength)\n pending = merged\n while (pending.byteLength >= DEFAULT_CHUNK_SIZE) {\n const piece = pending.slice(0, DEFAULT_CHUNK_SIZE)\n if (rec !== null) rec.bytes += piece.byteLength\n yield piece\n pending = pending.slice(DEFAULT_CHUNK_SIZE)\n }\n }\n } catch (err) {\n if (isNoFileError(err)) throw enoent(path)\n throw err\n }\n if (pending.byteLength > 0) {\n if (rec !== null) rec.bytes += pending.byteLength\n yield pending\n }\n}\n\n/**\n * The resource-level `range_read(path, start, end)`, end exclusive.\n *\n * Every other backend's `rangeRead` and all of python's spell the window this\n * way; gridfs read its fourth argument as a length, so `range_read(p, 10, 20)`\n * returned twenty bytes from offset ten where python returned ten.\n *\n * @param accessor the GridFS accessor\n * @param path the file path\n * @param start first byte to read\n * @param end one past the last byte to read\n */\nexport async function rangeRead(\n accessor: GridFSAccessor,\n path: PathSpec,\n start: number,\n end: number,\n): Promise<Uint8Array> {\n return read(accessor, path, undefined, { offset: start, size: end - start })\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { ResourceName, invalidateAfterWrite, record, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { gridfsKey, latestFile, rawPathOf } from './_client.ts'\nimport { downloadBytes } from './read.ts'\nimport { uploadBytes } from './write.ts'\n\nexport async function truncate(\n accessor: GridFSAccessor,\n path: PathSpec,\n length: number,\n): Promise<void> {\n const raw = rawPathOf(path)\n const key = gridfsKey(raw, accessor.config)\n const startMs = performance.now()\n const doc = await latestFile(accessor, key)\n let data = doc === null ? new Uint8Array(0) : await downloadBytes(accessor, path, doc._id)\n if (data.byteLength > length) {\n data = data.slice(0, length)\n } else if (data.byteLength < length) {\n const padded = new Uint8Array(length)\n padded.set(data, 0)\n data = padded\n }\n await uploadBytes(accessor, key, data)\n record('truncate', path.virtual, ResourceName.GRIDFS, 0, startMs)\n await invalidateAfterWrite(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { invalidateAfterUnlink, type PathSpec } from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../accessor/gridfs.ts'\nimport { deleteAll, gridfsKey, rawPathOf } from './_client.ts'\n\nexport async function unlink(accessor: GridFSAccessor, path: PathSpec): Promise<void> {\n // Removes every revision of the filename (rm semantics; mirrors S3's\n // DeleteObject, which also succeeds silently on a missing key).\n const raw = rawPathOf(path)\n const key = gridfsKey(raw, accessor.config)\n await deleteAll(accessor, { filename: key })\n await invalidateAfterUnlink(path)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FlagView,\n IOResult,\n ResourceName,\n command,\n resolveGlobOf,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { mkdir as gridfsMkdir } from '../../../core/gridfs/mkdir.ts'\nimport { GRIDFS_IO } from './io.ts'\nimport { mkdirLinkRefusal } from '@struktoai/mirage-core'\n\nconst resolveGlob = resolveGlobOf(GRIDFS_IO)\n\nconst ENC = new TextEncoder()\n\nasync function mkdirCommand(\n accessor: GridFSAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length === 0) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('mkdir: missing operand\\n') })]\n }\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const fl = new FlagView(opts.flags, specOf('mkdir'))\n const verbose = fl.asBool('verbose')\n const parents = fl.asBool('parents')\n const lines: string[] = []\n const writes: Record<string, Uint8Array> = {}\n const errors: string[] = []\n const links = opts.ns?.links ?? null\n for (const path of resolved) {\n // A symlink occupying the name is EEXIST; the shared helper keeps\n // this identical to the generic builder's answer.\n const collision = await mkdirLinkRefusal(path, links, { parents })\n if (collision.taken) {\n if (collision.message !== null) errors.push(collision.message)\n continue\n }\n await gridfsMkdir(accessor, path, parents)\n writes[path.mountPath] = new Uint8Array()\n if (verbose) lines.push(`mkdir: created directory '${path.virtual}'`)\n }\n const output: ByteSource | null = lines.length > 0 ? ENC.encode(lines.join('\\n') + '\\n') : null\n const stderr = errors.length > 0 ? ENC.encode(errors.join('\\n') + '\\n') : undefined\n return [\n output,\n new IOResult({\n writes,\n exitCode: errors.length > 0 ? 1 : 0,\n ...(stderr !== undefined ? { stderr } : {}),\n }),\n ]\n}\n\nexport const GRIDFS_MKDIR = command({\n name: 'mkdir',\n resource: ResourceName.GRIDFS,\n spec: specOf('mkdir'),\n fn: mkdirCommand,\n write: true,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FileType,\n FlagView,\n IOResult,\n ResourceName,\n command,\n cpWalk,\n formatRecords,\n removalLines,\n resolveGlobOf,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { readdir as gridfsReaddir } from '../../../core/gridfs/readdir.ts'\nimport { rmR as gridfsRmR } from '../../../core/gridfs/rm.ts'\nimport { rmdir as gridfsRmdir } from '../../../core/gridfs/rmdir.ts'\nimport { stat as gridfsStat } from '../../../core/gridfs/stat.ts'\nimport { unlink as gridfsUnlink } from '../../../core/gridfs/unlink.ts'\nimport { GRIDFS_IO } from './io.ts'\nimport { isSlashedLink, rmLinkRefusal } from '@struktoai/mirage-core'\n\nconst resolveGlob = resolveGlobOf(GRIDFS_IO)\n\nconst ENC = new TextEncoder()\n\ninterface RmOpts {\n recursive: boolean\n force: boolean\n removeDir: boolean\n verbose: boolean\n}\n\n// Remove one operand, returning a GNU stderr line on failure (null when\n// removed, or skipped under -f) alongside the verbose lines.\nasync function rmOne(\n accessor: GridFSAccessor,\n path: PathSpec,\n opts: RmOpts,\n index: CommandOpts['index'],\n): Promise<[string | null, string[]]> {\n const label = path.virtual\n let isDir = false\n try {\n const st = await gridfsStat(accessor, path, index ?? undefined)\n isDir = st.type === FileType.DIRECTORY\n } catch {\n if (opts.force) return [null, []]\n return [`rm: cannot remove '${label}': No such file or directory`, []]\n }\n if (isDir) {\n if (opts.recursive) {\n const lines = opts.verbose\n ? removalLines(\n await cpWalk(\n (dir) => gridfsReaddir(accessor, dir, index ?? undefined),\n (spec) => gridfsStat(accessor, spec, index ?? undefined),\n path,\n index ?? undefined,\n ),\n )\n : []\n await gridfsRmR(accessor, path)\n return [null, lines]\n }\n if (opts.removeDir) {\n const children = await gridfsReaddir(accessor, path, index ?? undefined)\n if (children.length > 0) {\n return [`rm: cannot remove '${label}': Directory not empty`, []]\n }\n await gridfsRmdir(accessor, path)\n return [null, opts.verbose ? [`removed directory '${label}'`] : []]\n }\n return [`rm: cannot remove '${label}': Is a directory`, []]\n }\n await gridfsUnlink(accessor, path)\n return [null, opts.verbose ? [`removed '${label}'`] : []]\n}\n\nasync function rmCommand(\n accessor: GridFSAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length === 0) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('rm: missing operand\\n') })]\n }\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const fl = new FlagView(opts.flags, specOf('rm'))\n const recursive = fl.asBool('r') || fl.asBool('R')\n const force = fl.asBool('f')\n const removeDir = fl.asBool('d')\n const verbose = fl.asBool('v')\n const verboseParts: string[] = []\n const errors: string[] = []\n const writes: Record<string, Uint8Array> = {}\n const links = opts.ns?.links ?? null\n for (const p of resolved) {\n // A link typed with a trailing slash is refused, never followed: the\n // shared helper keeps this identical to the generic builder.\n if (isSlashedLink(p, links)) {\n const refusal = await rmLinkRefusal(p, links, { recursive, force })\n if (refusal !== null) errors.push(refusal)\n continue\n }\n // GNU rm reports the operand and keeps removing the rest.\n const [error, entryLines] = await rmOne(\n accessor,\n p,\n { recursive, force, removeDir, verbose },\n opts.index,\n )\n if (error !== null) {\n errors.push(error)\n continue\n }\n writes[p.mountPath] = new Uint8Array()\n if (verbose) verboseParts.push(...entryLines)\n }\n const output: ByteSource | null = verbose ? formatRecords(verboseParts) : null\n const stderr = errors.length > 0 ? ENC.encode(errors.join('\\n') + '\\n') : undefined\n return [\n output,\n new IOResult({\n writes,\n exitCode: errors.length > 0 ? 1 : 0,\n ...(stderr !== undefined ? { stderr } : {}),\n }),\n ]\n}\n\nexport const GRIDFS_RM = command({\n name: 'rm',\n resource: ResourceName.GRIDFS,\n spec: specOf('rm'),\n fn: rmCommand,\n write: true,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n ResourceName,\n command,\n overlaidStat,\n resolveGlobOf,\n specOf,\n statGeneric,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { stat as gridfsStat } from '../../../core/gridfs/stat.ts'\nimport { GRIDFS_IO } from './io.ts'\n\nconst resolveGlob = resolveGlobOf(GRIDFS_IO)\n\nasync function statCommand(\n accessor: GridFSAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const resolved =\n paths.length > 0 ? await resolveGlob(accessor, paths, opts.index ?? undefined) : []\n return statGeneric(\n resolved,\n opts,\n overlaidStat((p) => gridfsStat(accessor, p, opts.index ?? undefined), opts.ns?.statOverlay),\n )\n}\n\nexport const GRIDFS_STAT = command({\n name: 'stat',\n resource: ResourceName.GRIDFS,\n spec: specOf('stat'),\n fn: statCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n resolveGlobOf,\n specOf,\n teeGeneric,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { stream as gridfsStream } from '../../../core/gridfs/stream.ts'\nimport { write as gridfsWrite } from '../../../core/gridfs/write.ts'\nimport { GRIDFS_IO } from './io.ts'\n\nconst resolveGlob = resolveGlobOf(GRIDFS_IO)\n\nconst ENC = new TextEncoder()\n\nasync function teeCommand(\n accessor: GridFSAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length === 0) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('tee: missing operand\\n') })]\n }\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n // Wiring only: every flag semantic, the write to each operand and the append\n // fallback live in the generic. This file used to restate them, wrote only\n // resolved[0], and carried an exists() pre-check to work around the\n // generic's broken not-found test.\n return teeGeneric(\n resolved,\n texts,\n opts,\n (p) => gridfsStream(accessor, p),\n (p, d) => gridfsWrite(accessor, p, d),\n )\n}\n\nexport const GRIDFS_TEE = command({\n name: 'tee',\n resource: ResourceName.GRIDFS,\n spec: specOf('tee'),\n fn: teeCommand,\n write: true,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FlagView,\n IOResult,\n ResourceName,\n command,\n resolveGlobOf,\n specOf,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { GridFSAccessor } from '../../../accessor/gridfs.ts'\nimport { exists as gridfsExists } from '../../../core/gridfs/exists.ts'\nimport { write as gridfsWrite } from '../../../core/gridfs/write.ts'\nimport { GRIDFS_IO } from './io.ts'\n\nconst resolveGlob = resolveGlobOf(GRIDFS_IO)\n\nconst ENC = new TextEncoder()\n\nasync function touchCommand(\n accessor: GridFSAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length === 0) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('touch: missing operand\\n') })]\n }\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const fl = new FlagView(opts.flags, specOf('touch'))\n const createOnly = fl.asBool('c')\n const writes: Record<string, Uint8Array> = {}\n for (const p of resolved) {\n if (createOnly) continue\n if (!(await gridfsExists(accessor, p))) {\n await gridfsWrite(accessor, p, new Uint8Array(0))\n writes[p.mountPath] = new Uint8Array()\n }\n }\n return [null, new IOResult({ writes })]\n}\n\nexport const GRIDFS_TOUCH = command({\n name: 'touch',\n resource: ResourceName.GRIDFS,\n spec: specOf('touch'),\n fn: touchCommand,\n write: true,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { ResourceName, makeGenericOps, type RegisteredOp } from '@struktoai/mirage-core'\nimport { GRIDFS_IO } from '../../commands/builtin/gridfs/io.ts'\n\nexport const GRIDFS_OPS: readonly RegisteredOp[] = makeGenericOps(\n ResourceName.GRIDFS,\n GRIDFS_IO,\n {},\n)\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nexport const GRIDFS_PROMPT = `{prefix}\n Remote MongoDB GridFS bucket. Maps GridFS filenames to virtual paths.\n IMPORTANT: This is a remote mount. Prefer targeted reads (grep, head) over full scans. Avoid cat on large files without piping to head/tail.\n find pushes -name/-type/-size filters into the fs.files query server-side, so find is cheap even on large buckets.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.`\n"],"mappings":"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","names":["ResourceName","mountPrefixOf","ResourceName","resolveGlobOf","ResourceName","invalidateAfterWrite","record","invalidateAfterWrite","invalidateAfterWrite","record","ResourceName","invalidateAfterWrite","entries","rstripSlash","rstripSlash","enoent","mountPrefixOf","rstripSlash","mountPrefixOf","enoent","rstripSlash","rstripSlash","rstripSlash","size","entries","invalidateAfterWrite","invalidateAncestors","invalidateAfterWrite","invalidateAncestors","ResourceName","enoent","record","enoent","record","ResourceName","mountPrefixOf","rstripSlash","compareCodePoints","mountPrefixOf","rstripSlash","compareCodePoints","enoent","invalidateAfterWrite","enoent","invalidateAfterWrite","invalidateAfterUnlink","invalidateAfterUnlink","invalidateAfterUnlink","invalidateAfterUnlink","ResourceName","enoent","ResourceName","enoent","ResourceName","invalidateAfterWrite","record","record","ResourceName","invalidateAfterWrite","invalidateAfterUnlink","invalidateAfterUnlink","ResourceName","ResourceName","FileType","FlagView","IOResult","ResourceName","command","resolveGlobOf","specOf","resolveGlob","resolveGlobOf","ENC","FileType","IOResult","FlagView","specOf","command","ResourceName","ResourceName","command","resolveGlobOf","specOf","resolveGlob","resolveGlobOf","command","ResourceName","specOf","IOResult","ResourceName","command","resolveGlobOf","specOf","resolveGlob","resolveGlobOf","ENC","IOResult","command","ResourceName","specOf","FlagView","IOResult","ResourceName","command","resolveGlobOf","specOf","resolveGlob","resolveGlobOf","ENC","IOResult","FlagView","specOf","command","ResourceName","ResourceName","resolveGlobOf","ResourceName","ResourceName","ResourceName","mountPrefixOf"]}
@@ -1,12 +1,22 @@
1
1
  // src/resource/wasabi/config.ts
2
- import { normalizeFields, redactConfigWithSchema, secretStr, z } from "@struktoai/mirage-core";
2
+ import {
3
+ normalizeFields,
4
+ redactConfigWithSchema,
5
+ secretStr,
6
+ z
7
+ } from "@struktoai/mirage-core";
3
8
  var WasabiConfigSchema = z.object({
4
9
  bucket: z.string(),
5
- accessKeyId: secretStr(),
6
- secretAccessKey: secretStr(),
10
+ accessKeyId: secretStr().optional(),
11
+ secretAccessKey: secretStr().optional(),
12
+ sessionToken: secretStr().optional(),
13
+ profile: z.string().optional(),
7
14
  region: z.string(),
8
15
  endpoint: z.string(),
9
- timeoutMs: z.number().optional()
16
+ forcePathStyle: z.boolean().optional(),
17
+ keyPrefix: z.string().optional(),
18
+ timeoutMs: z.number().optional(),
19
+ proxy: secretStr().optional()
10
20
  });
11
21
  function resolvedWasabiEndpoint(config) {
12
22
  if (config.endpoint !== void 0 && config.endpoint !== "") return config.endpoint;
@@ -18,9 +28,14 @@ function wasabiToS3Config(config) {
18
28
  bucket: config.bucket,
19
29
  region: config.region ?? "us-east-1",
20
30
  endpoint: resolvedWasabiEndpoint(config),
21
- accessKeyId: config.accessKeyId,
22
- secretAccessKey: config.secretAccessKey,
23
- ...config.timeoutMs !== void 0 ? { timeoutMs: config.timeoutMs } : {}
31
+ ...config.accessKeyId !== void 0 ? { accessKeyId: config.accessKeyId } : {},
32
+ ...config.secretAccessKey !== void 0 ? { secretAccessKey: config.secretAccessKey } : {},
33
+ ...config.sessionToken !== void 0 ? { sessionToken: config.sessionToken } : {},
34
+ ...config.profile !== void 0 ? { profile: config.profile } : {},
35
+ ...config.forcePathStyle !== void 0 ? { forcePathStyle: config.forcePathStyle } : {},
36
+ ...config.keyPrefix !== void 0 ? { keyPrefix: config.keyPrefix } : {},
37
+ ...config.timeoutMs !== void 0 ? { timeoutMs: config.timeoutMs } : {},
38
+ ...config.proxy !== void 0 ? { proxy: config.proxy } : {}
24
39
  };
25
40
  }
26
41
  function redactWasabiConfig(config) {
@@ -35,21 +50,23 @@ function normalizeWasabiConfig(input) {
35
50
  rename: {
36
51
  access_key_id: "accessKeyId",
37
52
  secret_access_key: "secretAccessKey",
53
+ session_token: "sessionToken",
54
+ aws_profile: "profile",
38
55
  endpoint_url: "endpoint",
56
+ path_style: "forcePathStyle",
57
+ key_prefix: "keyPrefix",
39
58
  timeout: "timeoutMs"
40
59
  },
41
60
  transform: {
42
61
  timeout: (v) => typeof v === "number" ? v * 1e3 : v
43
- },
44
- drop: ["proxy"]
62
+ }
45
63
  });
46
64
  }
47
65
 
48
66
  export {
49
- WasabiConfigSchema,
50
67
  resolvedWasabiEndpoint,
51
68
  wasabiToS3Config,
52
69
  redactWasabiConfig,
53
70
  normalizeWasabiConfig
54
71
  };
55
- //# sourceMappingURL=chunk-JALIYI6M.js.map
72
+ //# sourceMappingURL=chunk-YZ4ZJNOL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/wasabi/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n normalizeFields,\n redactConfigWithSchema,\n type ConfigOf,\n type RedactedConfig,\n secretStr,\n z,\n} from '@struktoai/mirage-core'\nimport type { S3Config } from '../s3/config.ts'\n\nexport interface WasabiConfig {\n bucket: string\n accessKeyId?: string\n secretAccessKey?: string\n sessionToken?: string\n profile?: string\n region?: string\n endpoint?: string\n forcePathStyle?: boolean\n keyPrefix?: string\n timeoutMs?: number\n proxy?: string\n}\n\nconst WasabiConfigSchema = z.object({\n bucket: z.string(),\n accessKeyId: secretStr().optional(),\n secretAccessKey: secretStr().optional(),\n sessionToken: secretStr().optional(),\n profile: z.string().optional(),\n region: z.string(),\n endpoint: z.string(),\n forcePathStyle: z.boolean().optional(),\n keyPrefix: z.string().optional(),\n timeoutMs: z.number().optional(),\n proxy: secretStr().optional(),\n})\n\n// Only the redacted twin derives: the schema is the resolved shape, with\n// the region and endpoint the redactor fills in.\nexport type WasabiConfigRedacted = RedactedConfig<\n ConfigOf<typeof WasabiConfigSchema>,\n 'accessKeyId' | 'secretAccessKey' | 'sessionToken' | 'proxy'\n>\n\nexport function resolvedWasabiEndpoint(config: WasabiConfig): string {\n if (config.endpoint !== undefined && config.endpoint !== '') return config.endpoint\n const region = config.region ?? 'us-east-1'\n return region === 'us-east-1' ? 'https://s3.wasabisys.com' : `https://s3.${region}.wasabisys.com`\n}\n\nexport function wasabiToS3Config(config: WasabiConfig): S3Config {\n return {\n bucket: config.bucket,\n region: config.region ?? 'us-east-1',\n endpoint: resolvedWasabiEndpoint(config),\n ...(config.accessKeyId !== undefined ? { accessKeyId: config.accessKeyId } : {}),\n ...(config.secretAccessKey !== undefined ? { secretAccessKey: config.secretAccessKey } : {}),\n ...(config.sessionToken !== undefined ? { sessionToken: config.sessionToken } : {}),\n ...(config.profile !== undefined ? { profile: config.profile } : {}),\n ...(config.forcePathStyle !== undefined ? { forcePathStyle: config.forcePathStyle } : {}),\n ...(config.keyPrefix !== undefined ? { keyPrefix: config.keyPrefix } : {}),\n ...(config.timeoutMs !== undefined ? { timeoutMs: config.timeoutMs } : {}),\n ...(config.proxy !== undefined ? { proxy: config.proxy } : {}),\n }\n}\n\nexport function redactWasabiConfig(config: WasabiConfig): WasabiConfigRedacted {\n return redactConfigWithSchema(WasabiConfigSchema, {\n ...config,\n region: config.region ?? 'us-east-1',\n endpoint: resolvedWasabiEndpoint(config),\n }) as unknown as WasabiConfigRedacted\n}\n\nexport function normalizeWasabiConfig(input: Record<string, unknown>): WasabiConfig {\n return normalizeFields(input, {\n rename: {\n access_key_id: 'accessKeyId',\n secret_access_key: 'secretAccessKey',\n session_token: 'sessionToken',\n aws_profile: 'profile',\n endpoint_url: 'endpoint',\n path_style: 'forcePathStyle',\n key_prefix: 'keyPrefix',\n timeout: 'timeoutMs',\n },\n transform: {\n timeout: (v: unknown) => (typeof v === 'number' ? v * 1000 : v),\n },\n }) as unknown as WasabiConfig\n}\n"],"mappings":";AAcA;AAAA,EACE;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,OACK;AAiBP,IAAM,qBAAqB,EAAE,OAAO;AAAA,EAClC,QAAQ,EAAE,OAAO;AAAA,EACjB,aAAa,UAAU,EAAE,SAAS;AAAA,EAClC,iBAAiB,UAAU,EAAE,SAAS;AAAA,EACtC,cAAc,UAAU,EAAE,SAAS;AAAA,EACnC,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,QAAQ,EAAE,OAAO;AAAA,EACjB,UAAU,EAAE,OAAO;AAAA,EACnB,gBAAgB,EAAE,QAAQ,EAAE,SAAS;AAAA,EACrC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,OAAO,UAAU,EAAE,SAAS;AAC9B,CAAC;AASM,SAAS,uBAAuB,QAA8B;AACnE,MAAI,OAAO,aAAa,UAAa,OAAO,aAAa,GAAI,QAAO,OAAO;AAC3E,QAAM,SAAS,OAAO,UAAU;AAChC,SAAO,WAAW,cAAc,6BAA6B,cAAc,MAAM;AACnF;AAEO,SAAS,iBAAiB,QAAgC;AAC/D,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,QAAQ,OAAO,UAAU;AAAA,IACzB,UAAU,uBAAuB,MAAM;AAAA,IACvC,GAAI,OAAO,gBAAgB,SAAY,EAAE,aAAa,OAAO,YAAY,IAAI,CAAC;AAAA,IAC9E,GAAI,OAAO,oBAAoB,SAAY,EAAE,iBAAiB,OAAO,gBAAgB,IAAI,CAAC;AAAA,IAC1F,GAAI,OAAO,iBAAiB,SAAY,EAAE,cAAc,OAAO,aAAa,IAAI,CAAC;AAAA,IACjF,GAAI,OAAO,YAAY,SAAY,EAAE,SAAS,OAAO,QAAQ,IAAI,CAAC;AAAA,IAClE,GAAI,OAAO,mBAAmB,SAAY,EAAE,gBAAgB,OAAO,eAAe,IAAI,CAAC;AAAA,IACvF,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,IACxE,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,IACxE,GAAI,OAAO,UAAU,SAAY,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;AAAA,EAC9D;AACF;AAEO,SAAS,mBAAmB,QAA4C;AAC7E,SAAO,uBAAuB,oBAAoB;AAAA,IAChD,GAAG;AAAA,IACH,QAAQ,OAAO,UAAU;AAAA,IACzB,UAAU,uBAAuB,MAAM;AAAA,EACzC,CAAC;AACH;AAEO,SAAS,sBAAsB,OAA8C;AAClF,SAAO,gBAAgB,OAAO;AAAA,IAC5B,QAAQ;AAAA,MACN,eAAe;AAAA,MACf,mBAAmB;AAAA,MACnB,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,SAAS;AAAA,IACX;AAAA,IACA,WAAW;AAAA,MACT,SAAS,CAAC,MAAgB,OAAO,MAAM,WAAW,IAAI,MAAO;AAAA,IAC/D;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -0,0 +1,11 @@
1
+ // src/resource/gcal/config.ts
2
+ import {
3
+ normalizeGoogleConfig,
4
+ redactGoogleConfig
5
+ } from "@struktoai/mirage-core";
6
+
7
+ export {
8
+ normalizeGoogleConfig,
9
+ redactGoogleConfig
10
+ };
11
+ //# sourceMappingURL=chunk-ZTHVEXIV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/gcal/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nexport {\n normalizeGoogleConfig as normalizeGCalConfig,\n redactGoogleConfig as redactGCalConfig,\n type GoogleConfig as GCalConfig,\n type GoogleConfigRedacted as GCalConfigRedacted,\n} from '@struktoai/mirage-core'\n"],"mappings":";AAcA;AAAA,EAC2B;AAAA,EACH;AAAA,OAGjB;","names":[]}
@@ -1,17 +1,19 @@
1
1
  // src/resource/postgres/postgres.ts
2
2
  import {
3
3
  BaseResource,
4
- PathSpec,
5
4
  POSTGRES_COMMANDS,
6
5
  POSTGRES_OPS,
7
6
  POSTGRES_PROMPT,
7
+ PathSpec,
8
8
  PostgresAccessor,
9
+ ResourceName,
10
+ mountKey,
11
+ mountPrefixOf,
9
12
  postgresRead,
10
13
  postgresReaddir,
11
14
  postgresStat,
12
- ResourceName,
13
15
  resolvePostgresConfig,
14
- resolvePostgresGlob
16
+ makeResolveGlob
15
17
  } from "@struktoai/mirage-core";
16
18
 
17
19
  // src/resource/postgres/store.ts
@@ -58,6 +60,7 @@ var PostgresStore = class {
58
60
  };
59
61
 
60
62
  // src/resource/postgres/postgres.ts
63
+ var resolvePostgresGlob = makeResolveGlob(postgresReaddir);
61
64
  var PostgresResource = class extends BaseResource {
62
65
  kind = ResourceName.POSTGRES;
63
66
  cachesReads = false;
@@ -79,6 +82,7 @@ var PostgresResource = class extends BaseResource {
79
82
  }
80
83
  async close() {
81
84
  await this.store.close();
85
+ await super.close();
82
86
  }
83
87
  ops() {
84
88
  return POSTGRES_OPS;
@@ -97,12 +101,12 @@ var PostgresResource = class extends BaseResource {
97
101
  }
98
102
  glob(paths, prefix = "") {
99
103
  const effective = prefix !== "" ? paths.map(
100
- (p) => p.prefix !== "" ? p : new PathSpec({
101
- original: p.original,
104
+ (p) => mountPrefixOf(p.virtual, p.resourcePath) !== "" ? p : new PathSpec({
105
+ virtual: p.virtual,
102
106
  directory: p.directory,
103
107
  ...p.pattern !== null ? { pattern: p.pattern } : {},
104
108
  resolved: p.resolved,
105
- prefix
109
+ resourcePath: mountKey(p.virtual, prefix)
106
110
  })
107
111
  ) : paths;
108
112
  return resolvePostgresGlob(this.accessor, effective, this.index);
@@ -113,4 +117,4 @@ export {
113
117
  PostgresStore,
114
118
  PostgresResource
115
119
  };
116
- //# sourceMappingURL=chunk-GS5AUKUO.js.map
120
+ //# sourceMappingURL=chunk-ZVSYUCYS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/postgres/postgres.ts","../src/resource/postgres/store.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n BaseResource,\n POSTGRES_COMMANDS,\n POSTGRES_OPS,\n POSTGRES_PROMPT,\n PathSpec,\n PostgresAccessor,\n ResourceName,\n mountKey,\n mountPrefixOf,\n postgresRead,\n postgresReaddir,\n postgresStat,\n resolvePostgresConfig,\n makeResolveGlob,\n type FileStat,\n type PostgresConfig,\n type PostgresConfigResolved,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n} from '@struktoai/mirage-core'\nimport { PostgresStore } from './store.ts'\n\nconst resolvePostgresGlob = makeResolveGlob(postgresReaddir)\n\nexport interface PostgresResourceOptions {\n config: PostgresConfig\n prefix?: string\n}\n\nexport class PostgresResource extends BaseResource implements Resource {\n readonly kind: string = ResourceName.POSTGRES\n readonly cachesReads: boolean = false\n override readonly indexTtl: number = 0\n readonly prompt: string\n readonly config: PostgresConfigResolved\n readonly store: PostgresStore\n readonly accessor: PostgresAccessor\n\n constructor(options: PostgresResourceOptions | PostgresConfig) {\n super()\n const { config, prefix } =\n 'config' in options ? options : { config: options, prefix: undefined }\n this.config = resolvePostgresConfig(config)\n this.store = new PostgresStore(this.config)\n this.accessor = new PostgresAccessor(this.store, this.config)\n this.prompt = POSTGRES_PROMPT.replace('{prefix}', prefix ?? '')\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n override async close(): Promise<void> {\n await this.store.close()\n await super.close()\n }\n\n ops(): readonly RegisteredOp[] {\n return POSTGRES_OPS\n }\n\n commands(): readonly RegisteredCommand[] {\n return POSTGRES_COMMANDS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return postgresRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return postgresReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return postgresStat(this.accessor, p, this.index)\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath) !== ''\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, prefix),\n }),\n )\n : paths\n return resolvePostgresGlob(this.accessor, effective, this.index)\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { loadOptionalPeer, type PgDriver, type PgQueryResult } from '@struktoai/mirage-core'\nimport type { PostgresConfigResolved } from '@struktoai/mirage-core'\n\ninterface PgPoolLike {\n query: (\n sql: string,\n params?: readonly unknown[],\n ) => Promise<{ rows: unknown[]; rowCount: number | null }>\n end: () => Promise<void>\n}\n\ninterface PgModule {\n Pool: new (options: Record<string, unknown>) => PgPoolLike\n}\n\nexport class PostgresStore implements PgDriver {\n readonly config: PostgresConfigResolved\n private poolPromise: Promise<PgPoolLike> | null = null\n\n constructor(config: PostgresConfigResolved) {\n this.config = config\n }\n\n async query<R = Record<string, unknown>>(\n sql: string,\n params?: readonly unknown[],\n ): Promise<PgQueryResult<R>> {\n const pool = await this._pool()\n const result = await pool.query(sql, params)\n return { rows: result.rows as R[], rowCount: result.rowCount ?? 0 }\n }\n\n async databaseName(): Promise<string> {\n const result = await this.query<{ db: string }>('SELECT current_database() AS db')\n return result.rows[0]?.db ?? ''\n }\n\n async close(): Promise<void> {\n if (this.poolPromise === null) return\n const pool = await this.poolPromise\n this.poolPromise = null\n await pool.end()\n }\n\n private async _pool(): Promise<PgPoolLike> {\n this.poolPromise ??= this._connect()\n return this.poolPromise\n }\n\n protected async _connect(): Promise<PgPoolLike> {\n const mod = await loadOptionalPeer(\n () => import('pg') as unknown as Promise<{ default?: PgModule } & Partial<PgModule>>,\n { feature: 'PostgresResource', packageName: 'pg' },\n )\n const Pool = mod.default?.Pool ?? mod.Pool\n if (Pool === undefined) {\n throw new Error('postgres: pg package missing Pool export')\n }\n return new Pool({\n connectionString: this.config.dsn,\n options: '-c default_transaction_read_only=on',\n })\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,15 +1,13 @@
1
1
  import {
2
- WasabiConfigSchema,
3
2
  normalizeWasabiConfig,
4
3
  redactWasabiConfig,
5
4
  resolvedWasabiEndpoint,
6
5
  wasabiToS3Config
7
- } from "./chunk-JALIYI6M.js";
6
+ } from "./chunk-YZ4ZJNOL.js";
8
7
  export {
9
- WasabiConfigSchema,
10
8
  normalizeWasabiConfig,
11
9
  redactWasabiConfig,
12
10
  resolvedWasabiEndpoint,
13
11
  wasabiToS3Config
14
12
  };
15
- //# sourceMappingURL=config-QAA646XB.js.map
13
+ //# sourceMappingURL=config-2YBCHU2W.js.map
@@ -1,15 +1,14 @@
1
1
  import {
2
- QingStorConfigSchema,
3
2
  normalizeQingStorConfig,
4
3
  qingStorToS3Config,
5
4
  redactQingStorConfig,
6
5
  resolvedQingStorEndpoint
7
- } from "./chunk-OHROA3FQ.js";
6
+ } from "./chunk-IXA4DQE4.js";
7
+ import "./chunk-7ZP6TPHX.js";
8
8
  export {
9
- QingStorConfigSchema,
10
9
  normalizeQingStorConfig,
11
10
  qingStorToS3Config,
12
11
  redactQingStorConfig,
13
12
  resolvedQingStorEndpoint
14
13
  };
15
- //# sourceMappingURL=config-IVY5EQQ2.js.map
14
+ //# sourceMappingURL=config-3YRGRW72.js.map
@@ -0,0 +1,9 @@
1
+ import {
2
+ normalizeGoogleConfig,
3
+ redactGoogleConfig
4
+ } from "./chunk-ZTHVEXIV.js";
5
+ export {
6
+ normalizeGoogleConfig as normalizeGCalConfig,
7
+ redactGoogleConfig as redactGCalConfig
8
+ };
9
+ //# sourceMappingURL=config-4GSOMUMF.js.map
@@ -0,0 +1,9 @@
1
+ import {
2
+ normalizeGoogleConfig,
3
+ redactGoogleConfig
4
+ } from "./chunk-M2UF2JHJ.js";
5
+ export {
6
+ normalizeGoogleConfig as normalizeGSheetsConfig,
7
+ redactGoogleConfig as redactGSheetsConfig
8
+ };
9
+ //# sourceMappingURL=config-5YBUWFUP.js.map
@@ -1,13 +1,12 @@
1
1
  import {
2
- MinIOConfigSchema,
3
2
  minioToS3Config,
4
3
  normalizeMinIOConfig,
5
4
  redactMinIOConfig
6
- } from "./chunk-DYXEITK3.js";
5
+ } from "./chunk-HVYVG5KQ.js";
6
+ import "./chunk-7ZP6TPHX.js";
7
7
  export {
8
- MinIOConfigSchema,
9
8
  minioToS3Config,
10
9
  normalizeMinIOConfig,
11
10
  redactMinIOConfig
12
11
  };
13
- //# sourceMappingURL=config-34LHOGLM.js.map
12
+ //# sourceMappingURL=config-5ZRKJTKG.js.map
@@ -0,0 +1,11 @@
1
+ import {
2
+ normalizeOciConfig,
3
+ ociToS3Config,
4
+ redactOciConfig
5
+ } from "./chunk-6VOIUGAD.js";
6
+ export {
7
+ normalizeOciConfig,
8
+ ociToS3Config,
9
+ redactOciConfig
10
+ };
11
+ //# sourceMappingURL=config-A25LTL5W.js.map
@@ -0,0 +1,9 @@
1
+ import {
2
+ normalizeGitHubConfig,
3
+ redactGitHubConfig
4
+ } from "./chunk-FFH6R5VQ.js";
5
+ export {
6
+ normalizeGitHubConfig,
7
+ redactGitHubConfig
8
+ };
9
+ //# sourceMappingURL=config-CLU7JABG.js.map
@@ -0,0 +1,9 @@
1
+ import {
2
+ normalizeNextcloudConfig,
3
+ redactNextcloudConfig
4
+ } from "./chunk-RYQJJB4C.js";
5
+ export {
6
+ normalizeNextcloudConfig,
7
+ redactNextcloudConfig
8
+ };
9
+ //# sourceMappingURL=config-D2RF7L3N.js.map
@@ -1,11 +1,9 @@
1
1
  import {
2
- LangfuseConfigSchema,
3
2
  normalizeLangfuseConfig,
4
3
  redactLangfuseConfig
5
- } from "./chunk-VGLHY6BK.js";
4
+ } from "./chunk-IFUCGI4I.js";
6
5
  export {
7
- LangfuseConfigSchema,
8
6
  normalizeLangfuseConfig,
9
7
  redactLangfuseConfig
10
8
  };
11
- //# sourceMappingURL=config-LHFFXVYI.js.map
9
+ //# sourceMappingURL=config-E55TKM6K.js.map
@@ -0,0 +1,9 @@
1
+ import {
2
+ normalizeGoogleConfig,
3
+ redactGoogleConfig
4
+ } from "./chunk-4IF4TGAI.js";
5
+ export {
6
+ normalizeGoogleConfig as normalizeGSlidesConfig,
7
+ redactGoogleConfig as redactGSlidesConfig
8
+ };
9
+ //# sourceMappingURL=config-ELDOFRJW.js.map