@farm.js/core 0.1.0-beta.6 → 0.1.0-beta.8

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 (447) hide show
  1. package/dist/after.cjs +227 -0
  2. package/dist/after.cjs.map +1 -0
  3. package/dist/after.d.mts +25 -0
  4. package/dist/after.d.ts +25 -0
  5. package/dist/after.mjs +14 -0
  6. package/dist/after.mjs.map +1 -0
  7. package/dist/agent-runtime.cjs +2379 -0
  8. package/dist/agent-runtime.cjs.map +1 -0
  9. package/dist/agent-runtime.d.mts +94 -0
  10. package/dist/agent-runtime.d.ts +94 -0
  11. package/dist/agent-runtime.mjs +479 -0
  12. package/dist/agent-runtime.mjs.map +1 -0
  13. package/dist/api/route-manager.d.mts +66 -0
  14. package/dist/api/route-manager.d.ts +66 -0
  15. package/dist/api/runtime.d.mts +3 -0
  16. package/dist/api/runtime.d.ts +3 -0
  17. package/dist/api.cjs +4100 -0
  18. package/dist/api.cjs.map +1 -0
  19. package/dist/api.d.mts +48 -0
  20. package/dist/api.d.ts +48 -0
  21. package/dist/api.mjs +93 -0
  22. package/dist/api.mjs.map +1 -0
  23. package/dist/app-BWtqQu3R.d.mts +302 -0
  24. package/dist/app-markdown.cjs +244 -0
  25. package/dist/app-markdown.cjs.map +1 -0
  26. package/dist/app-markdown.d.mts +22 -0
  27. package/dist/app-markdown.d.ts +22 -0
  28. package/dist/app-markdown.mjs +27 -0
  29. package/dist/app-markdown.mjs.map +1 -0
  30. package/dist/app-xltejvLY.d.ts +302 -0
  31. package/dist/cache.cjs +945 -0
  32. package/dist/cache.cjs.map +1 -0
  33. package/dist/cache.d.mts +192 -0
  34. package/dist/cache.d.ts +192 -0
  35. package/dist/cache.mjs +46 -0
  36. package/dist/cache.mjs.map +1 -0
  37. package/dist/chunk-2ED5Q2GH.mjs +422 -0
  38. package/dist/chunk-2ED5Q2GH.mjs.map +1 -0
  39. package/dist/chunk-32W4QEJP.mjs +158 -0
  40. package/dist/chunk-32W4QEJP.mjs.map +1 -0
  41. package/dist/chunk-3XNTL3FQ.mjs +452 -0
  42. package/dist/chunk-3XNTL3FQ.mjs.map +1 -0
  43. package/dist/chunk-44ZCFSKE.mjs +84 -0
  44. package/dist/chunk-44ZCFSKE.mjs.map +1 -0
  45. package/dist/chunk-4MGVSBRP.mjs +7787 -0
  46. package/dist/chunk-4MGVSBRP.mjs.map +1 -0
  47. package/dist/chunk-4S3ORGFA.mjs +44 -0
  48. package/dist/chunk-4S3ORGFA.mjs.map +1 -0
  49. package/dist/chunk-5BY76U2M.mjs +1 -0
  50. package/dist/chunk-5BY76U2M.mjs.map +1 -0
  51. package/dist/chunk-5ZGPRGWV.mjs +136 -0
  52. package/dist/chunk-5ZGPRGWV.mjs.map +1 -0
  53. package/dist/chunk-65A7QIKI.mjs +142 -0
  54. package/dist/chunk-65A7QIKI.mjs.map +1 -0
  55. package/dist/chunk-74YTBPTY.mjs +450 -0
  56. package/dist/chunk-74YTBPTY.mjs.map +1 -0
  57. package/dist/chunk-7FBJLMQH.mjs +338 -0
  58. package/dist/chunk-7FBJLMQH.mjs.map +1 -0
  59. package/dist/chunk-7HO6AEOP.mjs +74 -0
  60. package/dist/chunk-7HO6AEOP.mjs.map +1 -0
  61. package/dist/chunk-7MABZJIM.mjs +29 -0
  62. package/dist/chunk-7MABZJIM.mjs.map +1 -0
  63. package/dist/chunk-7N62DNSO.mjs +41 -0
  64. package/dist/chunk-7N62DNSO.mjs.map +1 -0
  65. package/dist/chunk-7ZY5AIJO.mjs +161 -0
  66. package/dist/chunk-7ZY5AIJO.mjs.map +1 -0
  67. package/dist/chunk-ALCLXXTY.mjs +187 -0
  68. package/dist/chunk-ALCLXXTY.mjs.map +1 -0
  69. package/dist/chunk-AZ7YUVNR.mjs +65 -0
  70. package/dist/chunk-AZ7YUVNR.mjs.map +1 -0
  71. package/dist/chunk-B232I2GP.mjs +163 -0
  72. package/dist/chunk-B232I2GP.mjs.map +1 -0
  73. package/dist/chunk-B4W3BNTL.mjs +483 -0
  74. package/dist/chunk-B4W3BNTL.mjs.map +1 -0
  75. package/dist/chunk-C2ROET2V.mjs +718 -0
  76. package/dist/chunk-C2ROET2V.mjs.map +1 -0
  77. package/dist/chunk-CGILA3WO.mjs +14 -0
  78. package/dist/chunk-CGILA3WO.mjs.map +1 -0
  79. package/dist/chunk-CGIXMLSY.mjs +184 -0
  80. package/dist/chunk-CGIXMLSY.mjs.map +1 -0
  81. package/dist/chunk-DJSGLHCN.mjs +597 -0
  82. package/dist/chunk-DJSGLHCN.mjs.map +1 -0
  83. package/dist/chunk-E2MPIBRE.mjs +149 -0
  84. package/dist/chunk-E2MPIBRE.mjs.map +1 -0
  85. package/dist/chunk-E6EPN5BT.mjs +203 -0
  86. package/dist/chunk-E6EPN5BT.mjs.map +1 -0
  87. package/dist/chunk-EI43C4RA.mjs +6277 -0
  88. package/dist/chunk-EI43C4RA.mjs.map +1 -0
  89. package/dist/chunk-EJ7T4TPB.mjs +622 -0
  90. package/dist/chunk-EJ7T4TPB.mjs.map +1 -0
  91. package/dist/chunk-FQYDHKKU.mjs +128 -0
  92. package/dist/chunk-FQYDHKKU.mjs.map +1 -0
  93. package/dist/chunk-FRPWCMMG.mjs +299 -0
  94. package/dist/chunk-FRPWCMMG.mjs.map +1 -0
  95. package/dist/chunk-GN72QAIH.mjs +146 -0
  96. package/dist/chunk-GN72QAIH.mjs.map +1 -0
  97. package/dist/chunk-GQVGIUSN.mjs +149 -0
  98. package/dist/chunk-GQVGIUSN.mjs.map +1 -0
  99. package/dist/chunk-GS6K5OCM.mjs +407 -0
  100. package/dist/chunk-GS6K5OCM.mjs.map +1 -0
  101. package/dist/chunk-GXASWWJU.mjs +364 -0
  102. package/dist/chunk-GXASWWJU.mjs.map +1 -0
  103. package/dist/chunk-GY2STC2S.mjs +180 -0
  104. package/dist/chunk-GY2STC2S.mjs.map +1 -0
  105. package/dist/chunk-H2FA2SBS.mjs +51 -0
  106. package/dist/chunk-H2FA2SBS.mjs.map +1 -0
  107. package/dist/chunk-I4CUBGVF.mjs +93 -0
  108. package/dist/chunk-I4CUBGVF.mjs.map +1 -0
  109. package/dist/chunk-ITN462YM.mjs +98 -0
  110. package/dist/chunk-ITN462YM.mjs.map +1 -0
  111. package/dist/chunk-J23HNLFY.mjs +72 -0
  112. package/dist/chunk-J23HNLFY.mjs.map +1 -0
  113. package/dist/chunk-J4FNJ5IU.mjs +179 -0
  114. package/dist/chunk-J4FNJ5IU.mjs.map +1 -0
  115. package/dist/chunk-J5YWQVI5.mjs +211 -0
  116. package/dist/chunk-J5YWQVI5.mjs.map +1 -0
  117. package/dist/chunk-JDEOUK5V.mjs +427 -0
  118. package/dist/chunk-JDEOUK5V.mjs.map +1 -0
  119. package/dist/chunk-JK25YEN6.mjs +219 -0
  120. package/dist/chunk-JK25YEN6.mjs.map +1 -0
  121. package/dist/chunk-K4667E2Q.mjs +1916 -0
  122. package/dist/chunk-K4667E2Q.mjs.map +1 -0
  123. package/dist/chunk-LGHEOHBU.mjs +218 -0
  124. package/dist/chunk-LGHEOHBU.mjs.map +1 -0
  125. package/dist/chunk-LM2YNO4U.mjs +24 -0
  126. package/dist/chunk-LM2YNO4U.mjs.map +1 -0
  127. package/dist/chunk-ME4MO2RJ.mjs +3540 -0
  128. package/dist/chunk-ME4MO2RJ.mjs.map +1 -0
  129. package/dist/chunk-MIUW47JX.mjs +639 -0
  130. package/dist/chunk-MIUW47JX.mjs.map +1 -0
  131. package/dist/chunk-NNLCAVB6.mjs +391 -0
  132. package/dist/chunk-NNLCAVB6.mjs.map +1 -0
  133. package/dist/chunk-P7QDS5AT.mjs +191 -0
  134. package/dist/chunk-P7QDS5AT.mjs.map +1 -0
  135. package/dist/chunk-PFE6GMNE.mjs +603 -0
  136. package/dist/chunk-PFE6GMNE.mjs.map +1 -0
  137. package/dist/chunk-QGOHVJ6J.mjs +63 -0
  138. package/dist/chunk-QGOHVJ6J.mjs.map +1 -0
  139. package/dist/chunk-QKVUNGAH.mjs +39 -0
  140. package/dist/chunk-QKVUNGAH.mjs.map +1 -0
  141. package/dist/chunk-QM746KUO.mjs +56 -0
  142. package/dist/chunk-QM746KUO.mjs.map +1 -0
  143. package/dist/chunk-QTZZ2ISQ.mjs +753 -0
  144. package/dist/chunk-QTZZ2ISQ.mjs.map +1 -0
  145. package/dist/chunk-RBRLLZL5.mjs +81 -0
  146. package/dist/chunk-RBRLLZL5.mjs.map +1 -0
  147. package/dist/chunk-RHIFZZUI.mjs +69 -0
  148. package/dist/chunk-RHIFZZUI.mjs.map +1 -0
  149. package/dist/chunk-RQ633A5I.mjs +187 -0
  150. package/dist/chunk-RQ633A5I.mjs.map +1 -0
  151. package/dist/chunk-SCFX4UTD.mjs +28 -0
  152. package/dist/chunk-SCFX4UTD.mjs.map +1 -0
  153. package/dist/chunk-SL6HTIOK.mjs +66 -0
  154. package/dist/chunk-SL6HTIOK.mjs.map +1 -0
  155. package/dist/chunk-SPBBQLXI.mjs +207 -0
  156. package/dist/chunk-SPBBQLXI.mjs.map +1 -0
  157. package/dist/chunk-SSA7THPX.mjs +10 -0
  158. package/dist/chunk-SSA7THPX.mjs.map +1 -0
  159. package/dist/chunk-T4QJQK76.mjs +459 -0
  160. package/dist/chunk-T4QJQK76.mjs.map +1 -0
  161. package/dist/chunk-TQAEEJB4.mjs +157 -0
  162. package/dist/chunk-TQAEEJB4.mjs.map +1 -0
  163. package/dist/chunk-UB5UOSHB.mjs +458 -0
  164. package/dist/chunk-UB5UOSHB.mjs.map +1 -0
  165. package/dist/chunk-USWZZUEH.mjs +25 -0
  166. package/dist/chunk-USWZZUEH.mjs.map +1 -0
  167. package/dist/chunk-UVCIEUJC.mjs +16 -0
  168. package/dist/chunk-UVCIEUJC.mjs.map +1 -0
  169. package/dist/chunk-UXUAWNO5.mjs +396 -0
  170. package/dist/chunk-UXUAWNO5.mjs.map +1 -0
  171. package/dist/chunk-V3XURYJO.mjs +756 -0
  172. package/dist/chunk-V3XURYJO.mjs.map +1 -0
  173. package/dist/chunk-V6WE6JSZ.mjs +352 -0
  174. package/dist/chunk-V6WE6JSZ.mjs.map +1 -0
  175. package/dist/chunk-V7RBCSDJ.mjs +170 -0
  176. package/dist/chunk-V7RBCSDJ.mjs.map +1 -0
  177. package/dist/chunk-VCANOYFI.mjs +588 -0
  178. package/dist/chunk-VCANOYFI.mjs.map +1 -0
  179. package/dist/chunk-VY2UYN5R.mjs +224 -0
  180. package/dist/chunk-VY2UYN5R.mjs.map +1 -0
  181. package/dist/chunk-W2CRQFF6.mjs +1352 -0
  182. package/dist/chunk-W2CRQFF6.mjs.map +1 -0
  183. package/dist/chunk-WDU6QXNK.mjs +872 -0
  184. package/dist/chunk-WDU6QXNK.mjs.map +1 -0
  185. package/dist/chunk-WZ5QFROO.mjs +23 -0
  186. package/dist/chunk-WZ5QFROO.mjs.map +1 -0
  187. package/dist/chunk-XIVV5IWN.mjs +541 -0
  188. package/dist/chunk-XIVV5IWN.mjs.map +1 -0
  189. package/dist/chunk-YW7OBE6Q.mjs +119 -0
  190. package/dist/chunk-YW7OBE6Q.mjs.map +1 -0
  191. package/dist/chunk-Z5CQMP54.mjs +365 -0
  192. package/dist/chunk-Z5CQMP54.mjs.map +1 -0
  193. package/dist/chunk-ZBE6MLHL.mjs +230 -0
  194. package/dist/chunk-ZBE6MLHL.mjs.map +1 -0
  195. package/dist/chunk-ZVWA4ZQ3.mjs +189 -0
  196. package/dist/chunk-ZVWA4ZQ3.mjs.map +1 -0
  197. package/dist/chunk-ZZ57EH5Z.mjs +173 -0
  198. package/dist/chunk-ZZ57EH5Z.mjs.map +1 -0
  199. package/dist/client-BT1mFQas.d.mts +447 -0
  200. package/dist/client-Nn0q4eO4.d.ts +447 -0
  201. package/dist/client-cache-CIlyBlmx.d.ts +6 -0
  202. package/dist/client-cache-D-EZ7XVW.d.mts +6 -0
  203. package/dist/client-plugins-BI2R6Eae.d.mts +1926 -0
  204. package/dist/client-plugins-DU9oMspX.d.ts +1926 -0
  205. package/dist/client-plugins.cjs +415 -0
  206. package/dist/client-plugins.cjs.map +1 -0
  207. package/dist/client-plugins.d.mts +22 -0
  208. package/dist/client-plugins.d.ts +22 -0
  209. package/dist/client-plugins.mjs +10 -0
  210. package/dist/client-plugins.mjs.map +1 -0
  211. package/dist/client.cjs +5402 -0
  212. package/dist/client.cjs.map +1 -0
  213. package/dist/client.d.mts +447 -0
  214. package/dist/client.d.ts +447 -0
  215. package/dist/client.mjs +110 -0
  216. package/dist/client.mjs.map +1 -0
  217. package/dist/config.cjs +38 -0
  218. package/dist/config.cjs.map +1 -0
  219. package/dist/config.d.mts +29 -0
  220. package/dist/config.d.ts +29 -0
  221. package/dist/config.mjs +10 -0
  222. package/dist/config.mjs.map +1 -0
  223. package/dist/cron.cjs +406 -0
  224. package/dist/cron.cjs.map +1 -0
  225. package/dist/cron.d.mts +78 -0
  226. package/dist/cron.d.ts +78 -0
  227. package/dist/cron.mjs +30 -0
  228. package/dist/cron.mjs.map +1 -0
  229. package/dist/deferred.cjs +438 -0
  230. package/dist/deferred.cjs.map +1 -0
  231. package/dist/deferred.d.mts +42 -0
  232. package/dist/deferred.d.ts +42 -0
  233. package/dist/deferred.mjs +28 -0
  234. package/dist/deferred.mjs.map +1 -0
  235. package/dist/deployment.cjs +199 -0
  236. package/dist/deployment.cjs.map +1 -0
  237. package/dist/deployment.d.mts +34 -0
  238. package/dist/deployment.d.ts +34 -0
  239. package/dist/deployment.mjs +38 -0
  240. package/dist/deployment.mjs.map +1 -0
  241. package/dist/devtools-REQTS3I7.mjs +371 -0
  242. package/dist/devtools-REQTS3I7.mjs.map +1 -0
  243. package/dist/devtools-client-3XRTBND5.mjs +216 -0
  244. package/dist/devtools-client-3XRTBND5.mjs.map +1 -0
  245. package/dist/devtools-ui-NJKFORTG.mjs +1349 -0
  246. package/dist/devtools-ui-NJKFORTG.mjs.map +1 -0
  247. package/dist/docs.cjs +5548 -0
  248. package/dist/docs.cjs.map +1 -0
  249. package/dist/docs.d.mts +69 -0
  250. package/dist/docs.d.ts +69 -0
  251. package/dist/docs.mjs +47 -0
  252. package/dist/docs.mjs.map +1 -0
  253. package/dist/env-types.cjs +232 -0
  254. package/dist/env-types.cjs.map +1 -0
  255. package/dist/env-types.d.mts +12 -0
  256. package/dist/env-types.d.ts +12 -0
  257. package/dist/env-types.mjs +11 -0
  258. package/dist/env-types.mjs.map +1 -0
  259. package/dist/env.cjs +215 -0
  260. package/dist/env.cjs.map +1 -0
  261. package/dist/env.d.mts +45 -0
  262. package/dist/env.d.ts +45 -0
  263. package/dist/env.mjs +22 -0
  264. package/dist/env.mjs.map +1 -0
  265. package/dist/environment/vite.d.mts +22 -0
  266. package/dist/environment/vite.d.ts +22 -0
  267. package/dist/environment.cjs +96 -0
  268. package/dist/environment.cjs.map +1 -0
  269. package/dist/environment.d.mts +18 -0
  270. package/dist/environment.d.ts +18 -0
  271. package/dist/environment.mjs +14 -0
  272. package/dist/environment.mjs.map +1 -0
  273. package/dist/headers.cjs +126 -0
  274. package/dist/headers.cjs.map +1 -0
  275. package/dist/headers.d.mts +22 -0
  276. package/dist/headers.d.ts +22 -0
  277. package/dist/headers.mjs +12 -0
  278. package/dist/headers.mjs.map +1 -0
  279. package/dist/i18n/client.d.mts +32 -0
  280. package/dist/i18n/client.d.ts +32 -0
  281. package/dist/i18n/index.d.mts +20 -0
  282. package/dist/i18n/index.d.ts +20 -0
  283. package/dist/i18n/server.d.mts +30 -0
  284. package/dist/i18n/server.d.ts +30 -0
  285. package/dist/image/server.d.mts +37 -0
  286. package/dist/image/server.d.ts +37 -0
  287. package/dist/image/sharp.d.mts +7 -0
  288. package/dist/image/sharp.d.ts +7 -0
  289. package/dist/image-config-Duob7wER.d.mts +50 -0
  290. package/dist/image-config-Duob7wER.d.ts +50 -0
  291. package/dist/image.cjs +209 -0
  292. package/dist/image.cjs.map +1 -0
  293. package/dist/image.d.mts +39 -0
  294. package/dist/image.d.ts +39 -0
  295. package/dist/image.mjs +165 -0
  296. package/dist/image.mjs.map +1 -0
  297. package/dist/index.cjs +42186 -0
  298. package/dist/index.cjs.map +1 -0
  299. package/dist/index.d.mts +454 -0
  300. package/dist/index.d.ts +454 -0
  301. package/dist/index.mjs +980 -0
  302. package/dist/index.mjs.map +1 -0
  303. package/dist/integration-api-CHT2OKAf.d.mts +93 -0
  304. package/dist/integration-api-CHT2OKAf.d.ts +93 -0
  305. package/dist/integration-orm-GQLGU66X.mjs +13 -0
  306. package/dist/integration-orm-GQLGU66X.mjs.map +1 -0
  307. package/dist/integrations.cjs +2820 -0
  308. package/dist/integrations.cjs.map +1 -0
  309. package/dist/integrations.d.mts +22 -0
  310. package/dist/integrations.d.ts +22 -0
  311. package/dist/integrations.mjs +51 -0
  312. package/dist/integrations.mjs.map +1 -0
  313. package/dist/internal/build-runtime.cjs +643 -322
  314. package/dist/internal/build-runtime.cjs.map +1 -1
  315. package/dist/internal/build-runtime.d.mts +39 -0
  316. package/dist/internal/build-runtime.d.ts +39 -0
  317. package/dist/internal/build-runtime.mjs +11 -10
  318. package/dist/internal/client-runtime.d.mts +2 -0
  319. package/dist/internal/client-runtime.d.ts +2 -0
  320. package/dist/internal/config-runtime.cjs +135 -39
  321. package/dist/internal/config-runtime.cjs.map +1 -1
  322. package/dist/internal/config-runtime.d.mts +39 -0
  323. package/dist/internal/config-runtime.d.ts +39 -0
  324. package/dist/internal/config-runtime.mjs +5 -4
  325. package/dist/internal/production-node-env.d.mts +12 -0
  326. package/dist/internal/production-node-env.d.ts +12 -0
  327. package/dist/internal/production-runtime.d.mts +39 -0
  328. package/dist/internal/production-runtime.d.ts +39 -0
  329. package/dist/layers-VWVDTPUZ.mjs +16 -0
  330. package/dist/layers-VWVDTPUZ.mjs.map +1 -0
  331. package/dist/manager-THKFTOFE.mjs +10 -0
  332. package/dist/manager-THKFTOFE.mjs.map +1 -0
  333. package/dist/markdown.cjs +364 -0
  334. package/dist/markdown.cjs.map +1 -0
  335. package/dist/markdown.d.mts +60 -0
  336. package/dist/markdown.d.ts +60 -0
  337. package/dist/markdown.mjs +18 -0
  338. package/dist/markdown.mjs.map +1 -0
  339. package/dist/metadata-Cm9ujH4I.d.ts +22 -0
  340. package/dist/metadata-DacXbnLA.d.mts +22 -0
  341. package/dist/middleware.cjs +2148 -0
  342. package/dist/middleware.cjs.map +1 -0
  343. package/dist/middleware.d.mts +164 -0
  344. package/dist/middleware.d.ts +164 -0
  345. package/dist/middleware.mjs +49 -0
  346. package/dist/middleware.mjs.map +1 -0
  347. package/dist/navigation-errors-Dvwpzaer.d.mts +13 -0
  348. package/dist/navigation-errors-Dvwpzaer.d.ts +13 -0
  349. package/dist/navigation.cjs +1329 -0
  350. package/dist/navigation.cjs.map +1 -0
  351. package/dist/navigation.d.mts +14 -0
  352. package/dist/navigation.d.ts +14 -0
  353. package/dist/navigation.mjs +33 -0
  354. package/dist/navigation.mjs.map +1 -0
  355. package/dist/nitro-QO5LV6QK.mjs +689 -0
  356. package/dist/nitro-QO5LV6QK.mjs.map +1 -0
  357. package/dist/observability.cjs +186 -0
  358. package/dist/observability.cjs.map +1 -0
  359. package/dist/observability.d.mts +335 -0
  360. package/dist/observability.d.ts +335 -0
  361. package/dist/observability.mjs +16 -0
  362. package/dist/observability.mjs.map +1 -0
  363. package/dist/params-BALtrRim.d.ts +15 -0
  364. package/dist/params-ry-lxqmy.d.mts +15 -0
  365. package/dist/plugin-BJDf43dc.d.mts +165 -0
  366. package/dist/plugin-BJDf43dc.d.ts +165 -0
  367. package/dist/plugin.cjs +23470 -0
  368. package/dist/plugin.cjs.map +1 -1
  369. package/dist/plugin.d.mts +22 -0
  370. package/dist/plugin.d.ts +22 -0
  371. package/dist/plugin.mjs +8 -7
  372. package/dist/production-runtime-4KKq1AVC.d.mts +79 -0
  373. package/dist/production-runtime-C_B79w2P.d.mts +28 -0
  374. package/dist/production-runtime-DDEM1D2q.d.ts +28 -0
  375. package/dist/production-runtime-DRsWDN2x.d.ts +79 -0
  376. package/dist/query/client.d.mts +61 -0
  377. package/dist/query/client.d.ts +61 -0
  378. package/dist/query/index.d.mts +90 -0
  379. package/dist/query/index.d.ts +90 -0
  380. package/dist/query/parsers.d.mts +25 -0
  381. package/dist/query/parsers.d.ts +25 -0
  382. package/dist/query/server.d.mts +55 -0
  383. package/dist/query/server.d.ts +55 -0
  384. package/dist/request-Dsq4kGW0.d.mts +6 -0
  385. package/dist/request-udtobOLv.d.ts +6 -0
  386. package/dist/request.d.mts +2 -0
  387. package/dist/request.d.ts +2 -0
  388. package/dist/resolver-DJqjLMg_.d.mts +14 -0
  389. package/dist/resolver-IH4RmPEl.d.ts +14 -0
  390. package/dist/route-runtime-DoOHzCAD.d.mts +38 -0
  391. package/dist/route-runtime-DoOHzCAD.d.ts +38 -0
  392. package/dist/router.d.mts +36 -0
  393. package/dist/router.d.ts +36 -0
  394. package/dist/routes.d.mts +224 -0
  395. package/dist/routes.d.ts +224 -0
  396. package/dist/runtime-9nQjVM7X.d.mts +206 -0
  397. package/dist/runtime-Cxpq6xZN.d.mts +27 -0
  398. package/dist/runtime-DgeS2skB.d.ts +206 -0
  399. package/dist/runtime-bv63eUiO.d.ts +27 -0
  400. package/dist/server-action-security.d.mts +43 -0
  401. package/dist/server-action-security.d.ts +43 -0
  402. package/dist/server-fn-client.d.mts +32 -0
  403. package/dist/server-fn-client.d.ts +32 -0
  404. package/dist/server-fn.d.mts +93 -0
  405. package/dist/server-fn.d.ts +93 -0
  406. package/dist/server-plugins.d.mts +55 -0
  407. package/dist/server-plugins.d.ts +55 -0
  408. package/dist/server-query-client.d.mts +50 -0
  409. package/dist/server-query-client.d.ts +50 -0
  410. package/dist/server-query.d.mts +36 -0
  411. package/dist/server-query.d.ts +36 -0
  412. package/dist/server.cjs +731 -447
  413. package/dist/server.cjs.map +1 -1
  414. package/dist/server.d.mts +48 -0
  415. package/dist/server.d.ts +48 -0
  416. package/dist/server.mjs +9 -8
  417. package/dist/server.mjs.map +1 -1
  418. package/dist/storage.d.mts +52 -0
  419. package/dist/storage.d.ts +52 -0
  420. package/dist/testing.d.mts +101 -0
  421. package/dist/testing.d.ts +101 -0
  422. package/dist/transport-BmbGTXA5.d.mts +49 -0
  423. package/dist/transport-BmbGTXA5.d.ts +49 -0
  424. package/dist/types-BMxWr97v.d.mts +81 -0
  425. package/dist/types-BMxWr97v.d.ts +81 -0
  426. package/dist/types-C9N-nk5R.d.mts +53 -0
  427. package/dist/types-C9N-nk5R.d.ts +53 -0
  428. package/dist/types-D1A6-XvH.d.mts +73 -0
  429. package/dist/types-D1A6-XvH.d.ts +73 -0
  430. package/dist/utils-B-cUHwoK.d.ts +23 -0
  431. package/dist/utils-Cm41AefV.d.mts +23 -0
  432. package/dist/version.cjs +1 -1
  433. package/dist/version.cjs.map +1 -1
  434. package/dist/version.d.mts +3 -0
  435. package/dist/version.d.ts +3 -0
  436. package/dist/version.mjs +1 -1
  437. package/dist/vite.cjs +682 -437
  438. package/dist/vite.cjs.map +1 -1
  439. package/dist/vite.d.mts +22 -0
  440. package/dist/vite.d.ts +22 -0
  441. package/dist/vite.mjs +6 -5
  442. package/dist/workflows.d.mts +110 -0
  443. package/dist/workflows.d.ts +110 -0
  444. package/package.json +3 -2
  445. package/types/client.d.ts +1 -1
  446. package/types/image.d.ts +4 -0
  447. package/types/images.d.ts +59 -0
@@ -0,0 +1,396 @@
1
+ import {
2
+ MiddlewareManager
3
+ } from "./chunk-MIUW47JX.mjs";
4
+ import {
5
+ getStorage
6
+ } from "./chunk-T4QJQK76.mjs";
7
+ import {
8
+ __name
9
+ } from "./chunk-CGILA3WO.mjs";
10
+
11
+ // src/middleware/chain.ts
12
+ function getRateLimitStorage() {
13
+ return getStorage("ratelimit");
14
+ }
15
+ __name(getRateLimitStorage, "getRateLimitStorage");
16
+ var defaultRateLimitStorage = {
17
+ async get(key) {
18
+ const storage = getRateLimitStorage();
19
+ const value = await storage.getItem(key);
20
+ return value ?? null;
21
+ },
22
+ async set(key, value, ttl) {
23
+ const storage = getRateLimitStorage();
24
+ await storage.setItem(key, value, ttl ? { ttl } : void 0);
25
+ },
26
+ async delete(key) {
27
+ const storage = getRateLimitStorage();
28
+ await storage.removeItem(key);
29
+ },
30
+ async ttl(key) {
31
+ const storage = getRateLimitStorage();
32
+ const record = await storage.getItem(key);
33
+ if (!record || !record.resetAt) {
34
+ return null;
35
+ }
36
+ const remainingMs = record.resetAt - Date.now();
37
+ return remainingMs > 0 ? Math.ceil(remainingMs / 1e3) : null;
38
+ }
39
+ };
40
+ function parseTimeWindow(window) {
41
+ const match = window.match(/^(\d+)(ms|s|m|h|d)$/);
42
+ if (!match) throw new Error(`Invalid time window: ${window}`);
43
+ const [, amount, unit] = match;
44
+ const value = Number.parseInt(amount, 10);
45
+ const multipliers = {
46
+ ms: 1,
47
+ s: 1e3,
48
+ m: 60 * 1e3,
49
+ h: 60 * 60 * 1e3,
50
+ d: 24 * 60 * 60 * 1e3
51
+ };
52
+ return value * multipliers[unit];
53
+ }
54
+ __name(parseTimeWindow, "parseTimeWindow");
55
+ function createRateLimitMiddleware(config) {
56
+ const windowMs = parseTimeWindow(config.window);
57
+ const storage = config.storage || defaultRateLimitStorage;
58
+ return async (ctx, next) => {
59
+ const key = config.keyGenerator ? config.keyGenerator(ctx) : `${ctx.request.socket.remoteAddress}:${ctx.pathname}`;
60
+ const now = Date.now();
61
+ const ttlSeconds = Math.ceil(windowMs / 1e3);
62
+ const record = await storage.get(key);
63
+ if (record && now > record.resetAt) {
64
+ await storage.delete(key);
65
+ }
66
+ const current = await storage.get(key);
67
+ if (!current) {
68
+ await storage.set(
69
+ key,
70
+ {
71
+ count: 1,
72
+ resetAt: now + windowMs
73
+ },
74
+ ttlSeconds
75
+ );
76
+ return next();
77
+ }
78
+ if (current.count >= config.requests) {
79
+ if (config.onLimit) {
80
+ const result = await config.onLimit(ctx);
81
+ if (result) return;
82
+ }
83
+ ctx.json(
84
+ {
85
+ error: "Rate limit exceeded",
86
+ retryAfter: Math.ceil((current.resetAt - now) / 1e3)
87
+ },
88
+ 429
89
+ );
90
+ return;
91
+ }
92
+ current.count++;
93
+ await storage.set(key, current, ttlSeconds);
94
+ return next();
95
+ };
96
+ }
97
+ __name(createRateLimitMiddleware, "createRateLimitMiddleware");
98
+ function matchPattern(pattern, pathname) {
99
+ if (pattern instanceof RegExp) {
100
+ return pattern.test(pathname);
101
+ }
102
+ const regexPattern = pattern.replace(/\*\*/g, "__DOUBLE_STAR__").replace(/\*/g, "[^/]+").replace(/__DOUBLE_STAR__/g, ".*").replace(/\//g, "\\/");
103
+ const regex = new RegExp(`^${regexPattern}$`);
104
+ return regex.test(pathname);
105
+ }
106
+ __name(matchPattern, "matchPattern");
107
+ var _MiddlewareChainImpl = class _MiddlewareChainImpl {
108
+ constructor(basePath = "/") {
109
+ this.handlers = [];
110
+ this.basePath = basePath === "/" ? "/" : basePath.endsWith("/") ? basePath.slice(0, -1) : basePath;
111
+ }
112
+ /**
113
+ * Set the base path for this middleware chain (called by manager when loading)
114
+ */
115
+ setBasePath(path2) {
116
+ this.basePath = path2 === "/" ? "/" : path2.endsWith("/") ? path2.slice(0, -1) : path2;
117
+ }
118
+ use(fn) {
119
+ this.handlers.push(fn);
120
+ return this;
121
+ }
122
+ /**
123
+ * Normalize a path pattern - auto-scope to middleware route
124
+ * If middleware is in /contact, then "/api" becomes "/contact/api"
125
+ */
126
+ normalizePattern(pattern) {
127
+ if (this.basePath === "/") {
128
+ return pattern.startsWith("/") ? pattern : `/${pattern}`;
129
+ }
130
+ const cleanPattern = pattern.startsWith("/") ? pattern.slice(1) : pattern;
131
+ return `${this.basePath}/${cleanPattern}`;
132
+ }
133
+ /**
134
+ * Conditionally run middleware based on a condition.
135
+ * Only supports boolean values or functions that evaluate to boolean.
136
+ * Route-based string matching has been removed - use function conditions instead.
137
+ *
138
+ * @example
139
+ * .when(true, (ctx, next) => { ... }) // Always run
140
+ * .when((ctx) => ctx.data.get('flag'), (ctx, next) => { ... }) // Conditional
141
+ * .when((ctx) => ctx.pathname === '/contact', (ctx, next) => { ... }) // Path-based condition
142
+ */
143
+ when(condition, fn) {
144
+ const conditionalMiddleware = /* @__PURE__ */ __name(async (ctx, next) => {
145
+ const shouldRun = typeof condition === "function" ? condition(ctx) : condition;
146
+ if (!shouldRun) {
147
+ return next();
148
+ }
149
+ if (typeof fn === "function" && fn.length === 2) {
150
+ return fn(ctx, next);
151
+ } else {
152
+ const subChain = middleware(this.basePath);
153
+ fn(subChain);
154
+ const { handlers } = subChain.build();
155
+ let index = 0;
156
+ let returnedResponse;
157
+ const executeNext = /* @__PURE__ */ __name(async () => {
158
+ if (index < handlers.length) {
159
+ const handler = handlers[index++];
160
+ const result = await handler(ctx, executeNext);
161
+ if (result instanceof Response) {
162
+ returnedResponse = result;
163
+ return result;
164
+ }
165
+ } else {
166
+ const result = await next();
167
+ if (result instanceof Response) {
168
+ returnedResponse = result;
169
+ return result;
170
+ }
171
+ }
172
+ return returnedResponse;
173
+ }, "executeNext");
174
+ return executeNext();
175
+ }
176
+ }, "conditionalMiddleware");
177
+ this.handlers.push(conditionalMiddleware);
178
+ return this;
179
+ }
180
+ rateLimit(config) {
181
+ this.handlers.push(createRateLimitMiddleware(config));
182
+ return this;
183
+ }
184
+ redirect(source, destination, permanent = false) {
185
+ const redirectMiddleware = /* @__PURE__ */ __name(async (ctx, next) => {
186
+ const normalizedSource = this.normalizePattern(source);
187
+ if (matchPattern(normalizedSource, ctx.pathname)) {
188
+ ctx.redirect(destination, permanent ? 308 : 307);
189
+ return;
190
+ }
191
+ return next();
192
+ }, "redirectMiddleware");
193
+ this.handlers.push(redirectMiddleware);
194
+ return this;
195
+ }
196
+ /**
197
+ * Rewrite the current middleware route to a new destination.
198
+ * Since each middleware file is route-specific, the source is automatically
199
+ * the middleware's route, so you only need to specify the destination.
200
+ *
201
+ * @param destination - The destination path to rewrite to
202
+ * @param condition - Optional boolean or function that evaluates to boolean.
203
+ * If provided and evaluates to false, rewrite is skipped.
204
+ * If not provided, rewrite always happens.
205
+ *
206
+ * @example
207
+ * // In /contact/middleware.ts
208
+ * .rewrite('/about') // Always rewrites /contact to /about
209
+ * .rewrite('/about', true) // Always rewrites
210
+ * .rewrite('/about', false) // Never rewrites
211
+ * .rewrite('/about', (ctx) => ctx.data.get('shouldRewrite')) // Conditional rewrite
212
+ */
213
+ rewrite(destination, condition) {
214
+ const rewriteMiddleware = /* @__PURE__ */ __name(async (ctx, next) => {
215
+ if (condition !== void 0) {
216
+ const shouldRewrite = typeof condition === "function" ? condition(ctx) : condition;
217
+ if (!shouldRewrite) {
218
+ return next();
219
+ }
220
+ }
221
+ if (this.basePath !== "/") {
222
+ if (ctx.pathname === this.basePath) {
223
+ ctx.rewrite(destination);
224
+ } else if (ctx.pathname.startsWith(this.basePath + "/")) {
225
+ const subPath = ctx.pathname.slice(this.basePath.length);
226
+ const newPath = destination + subPath;
227
+ ctx.rewrite(newPath);
228
+ }
229
+ } else {
230
+ ctx.rewrite(destination);
231
+ }
232
+ return next();
233
+ }, "rewriteMiddleware");
234
+ this.handlers.push(rewriteMiddleware);
235
+ return this;
236
+ }
237
+ build() {
238
+ return {
239
+ handlers: this.handlers,
240
+ config: this.config
241
+ };
242
+ }
243
+ };
244
+ __name(_MiddlewareChainImpl, "MiddlewareChainImpl");
245
+ var MiddlewareChainImpl = _MiddlewareChainImpl;
246
+ async function getRateLimitStatus(key, limit, storage = defaultRateLimitStorage) {
247
+ const record = await storage.get(key);
248
+ if (!record) {
249
+ return {
250
+ requests: 0,
251
+ limit,
252
+ remaining: limit,
253
+ resetIn: null,
254
+ resetAt: null,
255
+ isLimited: false
256
+ };
257
+ }
258
+ const now = Date.now();
259
+ if (record.resetAt && now > record.resetAt) {
260
+ return {
261
+ requests: 0,
262
+ limit,
263
+ remaining: limit,
264
+ resetIn: null,
265
+ resetAt: null,
266
+ isLimited: false
267
+ };
268
+ }
269
+ const requests = record.count || 0;
270
+ const remaining = Math.max(0, limit - requests);
271
+ const isLimited = requests >= limit;
272
+ let resetIn = null;
273
+ let resetAt = null;
274
+ if (record.resetAt) {
275
+ const remainingMs = record.resetAt - now;
276
+ resetIn = remainingMs > 0 ? Math.ceil(remainingMs / 1e3) : null;
277
+ resetAt = new Date(record.resetAt);
278
+ } else if (storage.ttl) {
279
+ resetIn = await storage.ttl(key);
280
+ resetAt = resetIn ? new Date(now + resetIn * 1e3) : null;
281
+ }
282
+ return {
283
+ requests,
284
+ limit,
285
+ remaining,
286
+ resetIn,
287
+ resetAt,
288
+ isLimited
289
+ };
290
+ }
291
+ __name(getRateLimitStatus, "getRateLimitStatus");
292
+ function middleware(basePath = "/") {
293
+ return new MiddlewareChainImpl(basePath);
294
+ }
295
+ __name(middleware, "middleware");
296
+
297
+ // src/middleware/helpers.ts
298
+ function unwrapMiddleware(middleware2, defaults) {
299
+ if (!middleware2) {
300
+ return defaults || {};
301
+ }
302
+ const result = { ...defaults };
303
+ for (const [key, value] of middleware2.data) {
304
+ result[key] = value;
305
+ }
306
+ return result;
307
+ }
308
+ __name(unwrapMiddleware, "unwrapMiddleware");
309
+ function getFromMiddleware(middleware2, key, defaultValue) {
310
+ if (!middleware2) {
311
+ return defaultValue;
312
+ }
313
+ const value = middleware2.data.get(key);
314
+ return value !== void 0 ? value : defaultValue;
315
+ }
316
+ __name(getFromMiddleware, "getFromMiddleware");
317
+ function hasMiddlewareData(middleware2) {
318
+ if (!middleware2) return false;
319
+ return middleware2.data.size > 0;
320
+ }
321
+ __name(hasMiddlewareData, "hasMiddlewareData");
322
+
323
+ // src/middleware/vite-plugin.ts
324
+ import fs from "fs";
325
+ import path from "path";
326
+ function getMiddlewareAppDirectory(root, srcDir) {
327
+ const sourceDirectory = path.join(root, srcDir);
328
+ const appDirectory = path.join(sourceDirectory, "app");
329
+ return fs.existsSync(appDirectory) ? appDirectory : sourceDirectory;
330
+ }
331
+ __name(getMiddlewareAppDirectory, "getMiddlewareAppDirectory");
332
+ function farmMiddlewarePlugin(options = {}) {
333
+ const srcDir = options.srcDir ?? "src";
334
+ let manager = null;
335
+ let discoveryComplete = false;
336
+ let discoveryPromise = null;
337
+ const discover = /* @__PURE__ */ __name(async (server) => {
338
+ manager = new MiddlewareManager(getMiddlewareAppDirectory(server.config.root, srcDir), server);
339
+ await manager.discover();
340
+ discoveryComplete = true;
341
+ }, "discover");
342
+ return {
343
+ name: "@farm.js/core:middleware",
344
+ enforce: "pre",
345
+ configureServer(server) {
346
+ discoveryPromise = discover(server).catch((error) => {
347
+ discoveryComplete = true;
348
+ console.error("[FARM] Middleware discovery error:", error);
349
+ });
350
+ const execute = /* @__PURE__ */ __name(async (req, res, _pathname, sharedData) => {
351
+ if (discoveryPromise && !discoveryComplete) {
352
+ await discoveryPromise;
353
+ }
354
+ if (!manager) {
355
+ return false;
356
+ }
357
+ const handled = await manager.execute(req, res);
358
+ const middlewareData = req.__FARM_MIDDLEWARE_DATA__;
359
+ if (sharedData && middlewareData instanceof Map) {
360
+ for (const [key, value] of middlewareData) {
361
+ sharedData.set(key, value);
362
+ }
363
+ }
364
+ return handled;
365
+ }, "execute");
366
+ server.__farmMiddleware__ = {
367
+ execute,
368
+ getMiddlewares: /* @__PURE__ */ __name(() => manager?.getMiddlewares() ?? [], "getMiddlewares"),
369
+ isReady: /* @__PURE__ */ __name(() => discoveryComplete, "isReady"),
370
+ waitForDiscovery: /* @__PURE__ */ __name(() => discoveryPromise, "waitForDiscovery")
371
+ };
372
+ },
373
+ async handleHotUpdate({ file, server, modules }) {
374
+ if (!/^middleware\.[tj]sx?$/.test(path.basename(file))) {
375
+ return;
376
+ }
377
+ for (const module of modules) {
378
+ server.moduleGraph.invalidateModule(module);
379
+ }
380
+ await manager?.reload();
381
+ server.ws.send({ type: "full-reload", path: "*" });
382
+ return [];
383
+ }
384
+ };
385
+ }
386
+ __name(farmMiddlewarePlugin, "farmMiddlewarePlugin");
387
+
388
+ export {
389
+ getRateLimitStatus,
390
+ middleware,
391
+ unwrapMiddleware,
392
+ getFromMiddleware,
393
+ hasMiddlewareData,
394
+ farmMiddlewarePlugin
395
+ };
396
+ //# sourceMappingURL=chunk-UXUAWNO5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/middleware/chain.ts","../src/middleware/helpers.ts","../src/middleware/vite-plugin.ts"],"sourcesContent":["/**\n * Middleware Chain Builder\n */\n\nimport type {\n MiddlewareChain,\n MiddlewareFunction,\n MiddlewareContext,\n MiddlewareConfig,\n RateLimitConfig,\n RateLimitStorage,\n RateLimitStatus,\n MiddlewareResult,\n} from \"./types\";\nimport { getStorage } from \"../storage\";\nimport type { Storage } from \"unstorage\";\n\ninterface RateLimitRecord {\n count: number;\n resetAt: number;\n}\n\nfunction getRateLimitStorage(): Storage {\n return getStorage(\"ratelimit\");\n}\n\nconst defaultRateLimitStorage: RateLimitStorage = {\n async get(key: string) {\n const storage = getRateLimitStorage();\n const value = await storage.getItem<RateLimitRecord>(key);\n return value ?? null;\n },\n async set(key: string, value: any, ttl?: number) {\n const storage = getRateLimitStorage();\n await storage.setItem(key, value, ttl ? { ttl } : undefined);\n },\n async delete(key: string) {\n const storage = getRateLimitStorage();\n await storage.removeItem(key);\n },\n async ttl(key: string) {\n const storage = getRateLimitStorage();\n const record = await storage.getItem<RateLimitRecord>(key);\n if (!record || !record.resetAt) {\n return null;\n }\n const remainingMs = record.resetAt - Date.now();\n return remainingMs > 0 ? Math.ceil(remainingMs / 1000) : null;\n },\n};\n\nfunction parseTimeWindow(window: string): number {\n const match = window.match(/^(\\d+)(ms|s|m|h|d)$/);\n if (!match) throw new Error(`Invalid time window: ${window}`);\n\n const [, amount, unit] = match;\n const value = Number.parseInt(amount, 10);\n\n const multipliers: Record<string, number> = {\n ms: 1,\n s: 1000,\n m: 60 * 1000,\n h: 60 * 60 * 1000,\n d: 24 * 60 * 60 * 1000,\n };\n\n return value * multipliers[unit];\n}\n\nfunction createRateLimitMiddleware(config: RateLimitConfig): MiddlewareFunction {\n const windowMs = parseTimeWindow(config.window);\n const storage = config.storage || defaultRateLimitStorage;\n\n return async (ctx: MiddlewareContext, next) => {\n const key = config.keyGenerator\n ? config.keyGenerator(ctx)\n : `${ctx.request.socket.remoteAddress}:${ctx.pathname}`;\n\n const now = Date.now();\n const ttlSeconds = Math.ceil(windowMs / 1000);\n const record = await storage.get(key);\n\n if (record && now > record.resetAt) {\n await storage.delete(key);\n }\n\n const current = await storage.get(key);\n\n if (!current) {\n await storage.set(\n key,\n {\n count: 1,\n resetAt: now + windowMs,\n },\n ttlSeconds,\n );\n return next();\n }\n\n if (current.count >= config.requests) {\n if (config.onLimit) {\n const result = await config.onLimit(ctx);\n if (result) return;\n }\n\n ctx.json(\n {\n error: \"Rate limit exceeded\",\n retryAfter: Math.ceil((current.resetAt - now) / 1000),\n },\n 429,\n );\n return;\n }\n\n current.count++;\n await storage.set(key, current, ttlSeconds);\n return next();\n };\n}\n\nfunction matchPattern(pattern: string | RegExp, pathname: string): boolean {\n if (pattern instanceof RegExp) {\n return pattern.test(pathname);\n }\n\n const regexPattern = pattern\n .replace(/\\*\\*/g, \"__DOUBLE_STAR__\")\n .replace(/\\*/g, \"[^/]+\")\n .replace(/__DOUBLE_STAR__/g, \".*\")\n .replace(/\\//g, \"\\\\/\");\n\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(pathname);\n}\n\nclass MiddlewareChainImpl implements MiddlewareChain {\n private handlers: MiddlewareFunction[] = [];\n public config?: MiddlewareConfig;\n private basePath: string;\n\n constructor(basePath = \"/\") {\n this.basePath =\n basePath === \"/\" ? \"/\" : basePath.endsWith(\"/\") ? basePath.slice(0, -1) : basePath;\n }\n\n /**\n * Set the base path for this middleware chain (called by manager when loading)\n */\n setBasePath(path: string): void {\n this.basePath = path === \"/\" ? \"/\" : path.endsWith(\"/\") ? path.slice(0, -1) : path;\n }\n\n use(fn: MiddlewareFunction): MiddlewareChain {\n this.handlers.push(fn);\n return this;\n }\n\n /**\n * Normalize a path pattern - auto-scope to middleware route\n * If middleware is in /contact, then \"/api\" becomes \"/contact/api\"\n */\n private normalizePattern(pattern: string): string {\n // If we're at root middleware, use pattern as-is\n if (this.basePath === \"/\") {\n // Ensure it starts with /\n return pattern.startsWith(\"/\") ? pattern : `/${pattern}`;\n }\n\n // For route-specific middleware, always scope the pattern\n // Remove leading / from pattern if present, then join with basePath\n const cleanPattern = pattern.startsWith(\"/\") ? pattern.slice(1) : pattern;\n return `${this.basePath}/${cleanPattern}`;\n }\n\n /**\n * Conditionally run middleware based on a condition.\n * Only supports boolean values or functions that evaluate to boolean.\n * Route-based string matching has been removed - use function conditions instead.\n *\n * @example\n * .when(true, (ctx, next) => { ... }) // Always run\n * .when((ctx) => ctx.data.get('flag'), (ctx, next) => { ... }) // Conditional\n * .when((ctx) => ctx.pathname === '/contact', (ctx, next) => { ... }) // Path-based condition\n */\n when(\n condition: boolean | ((ctx: MiddlewareContext) => boolean),\n fn: MiddlewareFunction | ((chain: MiddlewareChain) => void),\n ): MiddlewareChain {\n const conditionalMiddleware: MiddlewareFunction = async (ctx, next) => {\n // Evaluate condition - boolean or function\n const shouldRun = typeof condition === \"function\" ? condition(ctx) : condition;\n\n if (!shouldRun) {\n return next();\n }\n\n if (typeof fn === \"function\" && fn.length === 2) {\n return (fn as MiddlewareFunction)(ctx, next);\n } else {\n const subChain = middleware(this.basePath);\n (fn as (chain: MiddlewareChain) => void)(subChain);\n const { handlers } = subChain.build();\n\n let index = 0;\n let returnedResponse: Response | undefined;\n const executeNext = async (): Promise<MiddlewareResult> => {\n if (index < handlers.length) {\n const handler = handlers[index++];\n const result = await handler(ctx, executeNext);\n if (result instanceof Response) {\n returnedResponse = result;\n return result;\n }\n } else {\n const result = await next();\n if (result instanceof Response) {\n returnedResponse = result;\n return result;\n }\n }\n return returnedResponse;\n };\n\n return executeNext();\n }\n };\n this.handlers.push(conditionalMiddleware);\n return this;\n }\n\n rateLimit(config: RateLimitConfig): MiddlewareChain {\n this.handlers.push(createRateLimitMiddleware(config));\n return this;\n }\n\n redirect(source: string, destination: string, permanent = false): MiddlewareChain {\n const redirectMiddleware: MiddlewareFunction = async (ctx, next) => {\n // Auto-scope source pattern to the middleware route\n const normalizedSource = this.normalizePattern(source);\n if (matchPattern(normalizedSource, ctx.pathname)) {\n ctx.redirect(destination, permanent ? 308 : 307);\n return;\n }\n return next();\n };\n\n this.handlers.push(redirectMiddleware);\n return this;\n }\n\n /**\n * Rewrite the current middleware route to a new destination.\n * Since each middleware file is route-specific, the source is automatically\n * the middleware's route, so you only need to specify the destination.\n *\n * @param destination - The destination path to rewrite to\n * @param condition - Optional boolean or function that evaluates to boolean.\n * If provided and evaluates to false, rewrite is skipped.\n * If not provided, rewrite always happens.\n *\n * @example\n * // In /contact/middleware.ts\n * .rewrite('/about') // Always rewrites /contact to /about\n * .rewrite('/about', true) // Always rewrites\n * .rewrite('/about', false) // Never rewrites\n * .rewrite('/about', (ctx) => ctx.data.get('shouldRewrite')) // Conditional rewrite\n */\n rewrite(\n destination: string,\n condition?: boolean | ((ctx: MiddlewareContext) => boolean),\n ): MiddlewareChain {\n const rewriteMiddleware: MiddlewareFunction = async (ctx, next) => {\n // Check condition if provided\n if (condition !== undefined) {\n const shouldRewrite = typeof condition === \"function\" ? condition(ctx) : condition;\n if (!shouldRewrite) {\n return next();\n }\n }\n\n // If this middleware is route-specific (not root)\n if (this.basePath !== \"/\") {\n // Rewrite when the pathname exactly matches this middleware's route\n // This rewrites the entire route (e.g., /contact -> /about)\n if (ctx.pathname === this.basePath) {\n ctx.rewrite(destination);\n }\n // Also handle sub-routes: rewrite /contact/something to /destination/something\n else if (ctx.pathname.startsWith(this.basePath + \"/\")) {\n const subPath = ctx.pathname.slice(this.basePath.length);\n const newPath = destination + subPath;\n ctx.rewrite(newPath);\n }\n } else {\n // For root middleware, this is less common\n // Only rewrite if pathname matches exactly (edge case)\n ctx.rewrite(destination);\n }\n return next();\n };\n\n this.handlers.push(rewriteMiddleware);\n return this;\n }\n\n build() {\n return {\n handlers: this.handlers,\n config: this.config,\n };\n }\n}\n\n/**\n * Get rate limit status for a key\n * @example\n * const status = await getRateLimitStatus('user:123', 100, storage);\n */\nexport async function getRateLimitStatus(\n key: string,\n limit: number,\n storage: RateLimitStorage = defaultRateLimitStorage,\n): Promise<RateLimitStatus> {\n const record = await storage.get(key);\n\n if (!record) {\n return {\n requests: 0,\n limit,\n remaining: limit,\n resetIn: null,\n resetAt: null,\n isLimited: false,\n };\n }\n\n const now = Date.now();\n\n if (record.resetAt && now > record.resetAt) {\n return {\n requests: 0,\n limit,\n remaining: limit,\n resetIn: null,\n resetAt: null,\n isLimited: false,\n };\n }\n\n const requests = record.count || 0;\n const remaining = Math.max(0, limit - requests);\n const isLimited = requests >= limit;\n\n let resetIn: number | null = null;\n let resetAt: Date | null = null;\n\n if (record.resetAt) {\n const remainingMs = record.resetAt - now;\n resetIn = remainingMs > 0 ? Math.ceil(remainingMs / 1000) : null;\n resetAt = new Date(record.resetAt);\n } else if (storage.ttl) {\n resetIn = await storage.ttl(key);\n resetAt = resetIn ? new Date(now + resetIn * 1000) : null;\n }\n\n return {\n requests,\n limit,\n remaining,\n resetIn,\n resetAt,\n isLimited,\n };\n}\n\nexport function middleware(basePath = \"/\"): MiddlewareChain {\n return new MiddlewareChainImpl(basePath);\n}\n","/**\n * Middleware helper utilities for pages\n */\n\nimport type { MiddlewareProps } from \"../types\";\n\n/**\n * Unwrap middleware data from PageProps\n *\n * @example\n * ```tsx\n * export default async function Page(props: PageProps) {\n * const { user, stats } = await unwrapMiddleware(props.middleware, {\n * user: null,\n * stats: { views: 0, clicks: 0 }\n * });\n *\n * return <div>Welcome {user?.name}</div>;\n * }\n * ```\n */\nexport function unwrapMiddleware<T extends Record<string, any>>(\n middleware: MiddlewareProps | undefined,\n defaults?: Partial<T>,\n): Partial<T> {\n if (!middleware) {\n return (defaults || {}) as Partial<T>;\n }\n\n const result: any = { ...defaults };\n\n for (const [key, value] of middleware.data) {\n result[key] = value;\n }\n\n return result as Partial<T>;\n}\n\n/**\n * Get a single value from middleware with a default\n *\n * @example\n * ```tsx\n * export default async function Page(props: PageProps) {\n * const user = await getMiddlewareValue(props.middleware, 'user', null);\n * return <div>Welcome {user?.name || 'Guest'}</div>;\n * }\n * ```\n */\nexport function getFromMiddleware<T = any>(\n middleware: MiddlewareProps | undefined,\n key: string,\n defaultValue?: T,\n): T | undefined {\n if (!middleware) {\n return defaultValue;\n }\n\n const value = middleware.data.get(key);\n return value !== undefined ? value : defaultValue;\n}\n\n/**\n * Check if middleware data exists\n */\nexport function hasMiddlewareData(middleware: MiddlewareProps | undefined): boolean {\n if (!middleware) return false;\n return middleware.data.size > 0;\n}\n","/**\n * Standalone Vite middleware support used by Farm's RSC and API plugins.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type { Plugin, ViteDevServer } from \"vite\";\nimport { MiddlewareManager } from \"./manager\";\n\nexport interface FarmMiddlewarePluginOptions {\n /** Source directory (default: `src`). */\n srcDir?: string;\n /** Enable debug logging. */\n debug?: boolean;\n}\n\nfunction getMiddlewareAppDirectory(root: string, srcDir: string): string {\n const sourceDirectory = path.join(root, srcDir);\n const appDirectory = path.join(sourceDirectory, \"app\");\n return fs.existsSync(appDirectory) ? appDirectory : sourceDirectory;\n}\n\nexport function farmMiddlewarePlugin(options: FarmMiddlewarePluginOptions = {}): Plugin {\n const srcDir = options.srcDir ?? \"src\";\n let manager: MiddlewareManager | null = null;\n let discoveryComplete = false;\n let discoveryPromise: Promise<void> | null = null;\n\n const discover = async (server: ViteDevServer): Promise<void> => {\n manager = new MiddlewareManager(getMiddlewareAppDirectory(server.config.root, srcDir), server);\n await manager.discover();\n discoveryComplete = true;\n };\n\n return {\n name: \"@farm.js/core:middleware\",\n enforce: \"pre\",\n\n configureServer(server) {\n discoveryPromise = discover(server).catch((error) => {\n discoveryComplete = true;\n console.error(\"[FARM] Middleware discovery error:\", error);\n });\n\n const execute = async (\n req: IncomingMessage,\n res: ServerResponse,\n _pathname?: string,\n sharedData?: Map<string, any>,\n ): Promise<boolean> => {\n if (discoveryPromise && !discoveryComplete) {\n await discoveryPromise;\n }\n\n if (!manager) {\n return false;\n }\n\n const handled = await manager.execute(req, res);\n const middlewareData = (req as any).__FARM_MIDDLEWARE_DATA__;\n if (sharedData && middlewareData instanceof Map) {\n for (const [key, value] of middlewareData) {\n sharedData.set(key, value);\n }\n }\n return handled;\n };\n\n (server as any).__farmMiddleware__ = {\n execute,\n getMiddlewares: () => manager?.getMiddlewares() ?? [],\n isReady: () => discoveryComplete,\n waitForDiscovery: () => discoveryPromise,\n };\n },\n\n async handleHotUpdate({ file, server, modules }) {\n if (!/^middleware\\.[tj]sx?$/.test(path.basename(file))) {\n return;\n }\n\n for (const module of modules) {\n server.moduleGraph.invalidateModule(module);\n }\n\n await manager?.reload();\n server.ws.send({ type: \"full-reload\", path: \"*\" });\n return [];\n },\n };\n}\n"],"mappings":"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","names":["path","middleware"]}