@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 @@
1
+ {"version":3,"sources":["../src/middleware/context.ts","../src/middleware/manager.ts"],"sourcesContent":["/**\n * Middleware Context Implementation\n */\n\nimport type { IncomingMessage, ServerResponse } from \"http\";\nimport type { ViteDevServer } from \"vite\";\nimport type { MiddlewareContext, CookieJar, CookieOptions } from \"./types\";\n\n/**\n * Parse cookies from Cookie header\n */\nfunction parseCookies(cookieHeader?: string): Record<string, string> {\n if (!cookieHeader) return {};\n\n return cookieHeader.split(\";\").reduce(\n (cookies, cookie) => {\n const [name, ...rest] = cookie.split(\"=\");\n const value = rest.join(\"=\").trim();\n if (name && value) {\n cookies[name.trim()] = decodeURIComponent(value);\n }\n return cookies;\n },\n {} as Record<string, string>,\n );\n}\n\n/**\n * Serialize a cookie\n */\nfunction serializeCookie(name: string, value: string, options: CookieOptions = {}): string {\n let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n\n if (options.maxAge) {\n cookie += `; Max-Age=${options.maxAge}`;\n }\n\n if (options.expires) {\n cookie += `; Expires=${options.expires.toUTCString()}`;\n }\n\n if (options.path) {\n cookie += `; Path=${options.path}`;\n } else {\n cookie += \"; Path=/\";\n }\n\n if (options.domain) {\n cookie += `; Domain=${options.domain}`;\n }\n\n if (options.secure) {\n cookie += \"; Secure\";\n }\n\n if (options.httpOnly) {\n cookie += \"; HttpOnly\";\n }\n\n if (options.sameSite) {\n cookie += `; SameSite=${options.sameSite.charAt(0).toUpperCase() + options.sameSite.slice(1)}`;\n }\n\n return cookie;\n}\n\n/**\n * Cookie Jar implementation\n */\nclass CookieJarImpl implements CookieJar {\n private cookies: Record<string, string>;\n private setCookies: string[] = [];\n\n constructor(\n private req: IncomingMessage,\n private res: ServerResponse,\n ) {\n this.cookies = parseCookies(req.headers.cookie);\n }\n\n get(name: string): string | undefined {\n return this.cookies[name];\n }\n\n set(name: string, value: string, options: CookieOptions = {}): void {\n this.cookies[name] = value;\n const cookieString = serializeCookie(name, value, options);\n this.setCookies.push(cookieString);\n\n // Update Set-Cookie header\n this.res.setHeader(\"Set-Cookie\", this.setCookies);\n }\n\n delete(name: string): void {\n delete this.cookies[name];\n const cookieString = serializeCookie(name, \"\", {\n maxAge: 0,\n expires: new Date(0),\n });\n this.setCookies.push(cookieString);\n this.res.setHeader(\"Set-Cookie\", this.setCookies);\n }\n\n getAll(): Record<string, string> {\n return { ...this.cookies };\n }\n}\n\n/**\n * Create a middleware context from request/response\n */\nexport function createContext(\n req: IncomingMessage,\n res: ServerResponse,\n viteServer?: ViteDevServer,\n parent?: MiddlewareContext[\"parent\"],\n): MiddlewareContext {\n const url = new URL(req.url || \"/\", `http://${req.headers.host || \"localhost\"}`);\n const headers = new Map<string, string>();\n const data = parent?.data ? new Map(parent.data) : new Map<string, any>();\n const locals = parent?.locals ? new Map(parent.locals) : new Map<string, any>();\n const cookies = new CookieJarImpl(req, res);\n\n // Copy existing headers\n Object.entries(req.headers).forEach(([key, value]) => {\n if (typeof value === \"string\") {\n headers.set(key, value);\n } else if (Array.isArray(value)) {\n headers.set(key, value.join(\", \"));\n }\n });\n\n if (parent?.headers) {\n for (const [key, value] of Object.entries(parent.headers)) {\n headers.set(key, value);\n }\n }\n\n let handled = false;\n\n const ctx: MiddlewareContext = {\n request: req,\n response: res,\n url,\n pathname: url.pathname,\n searchParams: url.searchParams,\n method: req.method || \"GET\",\n params: {},\n route: url.pathname,\n parent,\n vite: {\n isDev: process.env.NODE_ENV !== \"production\",\n hmr: !!viteServer?.hot,\n server: viteServer,\n },\n data,\n locals,\n headers,\n cookies,\n _handled: false,\n\n redirect(redirectUrl: string, status = 307): void {\n if (handled) {\n console.warn(\"Response already sent, cannot redirect\");\n return;\n }\n\n ctx._redirectUrl = redirectUrl;\n ctx._handled = true;\n handled = true;\n\n res.writeHead(status, {\n Location: redirectUrl,\n \"Content-Type\": \"text/plain\",\n });\n res.end(`Redirecting to ${redirectUrl}`);\n },\n\n rewrite(rewriteUrl: string): void {\n ctx._rewriteUrl = rewriteUrl;\n // Update the URL for downstream middleware\n const newUrl = new URL(rewriteUrl, `http://${req.headers.host || \"localhost\"}`);\n ctx.url = newUrl;\n ctx.pathname = newUrl.pathname;\n ctx.searchParams = newUrl.searchParams;\n // Update the original request URL\n req.url = rewriteUrl;\n },\n\n json(jsonData: any, status = 200): void {\n if (handled) {\n console.warn(\"Response already sent, cannot send JSON\");\n return;\n }\n\n ctx._handled = true;\n handled = true;\n\n res.writeHead(status, {\n \"Content-Type\": \"application/json\",\n });\n res.end(JSON.stringify(jsonData));\n },\n\n text(content: string, status = 200): void {\n if (handled) {\n console.warn(\"Response already sent, cannot send text\");\n return;\n }\n\n ctx._handled = true;\n handled = true;\n\n res.writeHead(status, {\n \"Content-Type\": \"text/plain\",\n });\n res.end(content);\n },\n\n html(content: string, status = 200): void {\n if (handled) {\n console.warn(\"Response already sent, cannot send HTML\");\n return;\n }\n\n ctx._handled = true;\n handled = true;\n\n res.writeHead(status, {\n \"Content-Type\": \"text/html\",\n });\n res.end(content);\n },\n };\n\n return ctx;\n}\n","/**\n * Middleware Manager\n *\n * Discovers and executes middleware files in the file system\n */\n\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ViteDevServer } from \"vite\";\nimport type { IncomingMessage, ServerResponse } from \"http\";\nimport type {\n FarmMiddlewareConfig,\n MiddlewareFunction,\n MiddlewareMatcher,\n MiddlewareConfig,\n MiddlewareContext,\n MiddlewareResult,\n} from \"./types\";\nimport { createContext } from \"./context\";\nimport { normalizeMiddlewareModule } from \"./module\";\nimport { logger } from \"../utils\";\nimport { sendWebResponse } from \"../server/response\";\nimport { emitFarmEvent } from \"../observability\";\nimport { stripFarmLocaleFromPathname } from \"../i18n/routing\";\nimport type { ResolvedFarmI18nConfig } from \"../i18n/types\";\n\nexport interface DiscoveredMiddleware {\n path: string;\n filePath: string;\n handlers: MiddlewareFunction[];\n config?: MiddlewareConfig;\n source?: \"config\" | \"file\";\n}\n\nfunction isMiddlewareResponse(value: unknown): value is Response {\n return value instanceof Response;\n}\n\n/**\n * Middleware Manager - discovers and executes middleware\n */\nexport class MiddlewareManager {\n private middleware: DiscoveredMiddleware[] = [];\n private configMiddleware: DiscoveredMiddleware[] = [];\n private globalConfig?: MiddlewareConfig;\n private viteServer?: ViteDevServer;\n private appDirs: string[];\n private i18n?: ResolvedFarmI18nConfig;\n\n constructor(\n appDir: string | readonly string[],\n viteServer?: ViteDevServer,\n config?: FarmMiddlewareConfig,\n i18n?: ResolvedFarmI18nConfig,\n ) {\n this.appDirs = Array.isArray(appDir) ? [...appDir] : [appDir as string];\n this.viteServer = viteServer;\n this.i18n = i18n;\n this.configure(config);\n }\n\n configure(config?: FarmMiddlewareConfig): void {\n this.configMiddleware = [];\n this.globalConfig = undefined;\n\n if (!config) return;\n\n const entries = Array.isArray(config) ? config : [config];\n\n for (const [index, entry] of entries.entries()) {\n const handlers = this.getConfigHandlers(entry);\n const middlewareConfig = this.toMiddlewareConfig(entry);\n\n if (handlers.length === 0) {\n this.globalConfig = middlewareConfig;\n continue;\n }\n\n this.configMiddleware.push({\n path: \"/\",\n filePath: `farm.config.ts#middleware-${index}`,\n handlers,\n config: middlewareConfig,\n source: \"config\",\n });\n }\n }\n\n /**\n * Discover all middleware.ts files\n */\n async discover(): Promise<void> {\n const middlewareByPath = new Map<string, DiscoveredMiddleware>();\n for (const appDir of this.appDirs) {\n const discovered: DiscoveredMiddleware[] = [];\n await this.discoverInDirectory(appDir, \"/\", discovered);\n for (const middleware of discovered) {\n middlewareByPath.set(middleware.path, middleware);\n }\n }\n this.middleware = Array.from(middlewareByPath.values());\n\n // Sort by path depth (root first, then nested)\n this.middleware.sort((a, b) => {\n const depthA = a.path.split(\"/\").length;\n const depthB = b.path.split(\"/\").length;\n return depthA - depthB;\n });\n\n if (process.env.FARM_VERBOSE && this.middleware.length > 0) {\n logger.success(`Discovered ${this.middleware.length} middleware files`);\n for (const mw of this.middleware) {\n logger.info(` ${mw.path} (${mw.handlers.length} handlers)`);\n }\n }\n }\n\n /**\n * Recursively discover middleware files\n */\n private async discoverInDirectory(\n dir: string,\n routePath: string,\n discovered: DiscoveredMiddleware[],\n ): Promise<void> {\n if (!fs.existsSync(dir)) {\n return;\n }\n\n // Check for middleware.ts in current directory\n const middlewareFile = this.findMiddlewareFile(dir);\n if (middlewareFile) {\n const middleware = await this.loadMiddleware(middlewareFile, routePath);\n if (middleware) {\n discovered.push(middleware);\n }\n }\n\n // Recursively check subdirectories\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory() && !entry.name.startsWith(\".\") && !entry.name.startsWith(\"_\")) {\n const subPath = path.join(dir, entry.name);\n const subRoutePath = path.posix.join(routePath, entry.name);\n await this.discoverInDirectory(subPath, subRoutePath, discovered);\n }\n }\n }\n\n /**\n * Find middleware file in directory\n */\n private findMiddlewareFile(dir: string): string | null {\n const extensions = [\".ts\", \".tsx\", \".js\", \".jsx\"];\n for (const ext of extensions) {\n const filePath = path.join(dir, `middleware${ext}`);\n if (fs.existsSync(filePath)) {\n return filePath;\n }\n }\n return null;\n }\n\n /**\n * Load a middleware file\n */\n private async loadMiddleware(\n filePath: string,\n routePath: string,\n ): Promise<DiscoveredMiddleware | null> {\n try {\n // Load the module\n let module: any;\n if (this.viteServer) {\n module = await this.viteServer.ssrLoadModule(filePath);\n } else {\n const fileUrl = `file://${filePath}`;\n module = await import(/* @vite-ignore */ fileUrl);\n }\n\n const normalized = normalizeMiddlewareModule(module, routePath);\n if (!normalized) {\n logger.warn(\n `Middleware file ${filePath} must export a default handler or a named middleware handler`,\n );\n return null;\n }\n\n return {\n path: routePath,\n filePath,\n handlers: normalized.handlers,\n config: normalized.config,\n source: \"file\",\n };\n } catch (error) {\n logger.error(`Failed to load middleware ${filePath}: ${error}`);\n return null;\n }\n }\n\n /**\n * Execute middleware for a request\n */\n async execute(req: IncomingMessage, res: ServerResponse): Promise<boolean> {\n const url = new URL(req.url || \"/\", `http://${req.headers.host || \"localhost\"}`);\n const pathname = url.pathname;\n const routePathname = this.i18n?.enabled\n ? stripFarmLocaleFromPathname(pathname, this.i18n)\n : pathname;\n const method = req.method || \"GET\";\n const startTime = Date.now();\n\n let parentData: MiddlewareContext[\"parent\"] | undefined;\n let ctx = createContext(req, res, this.viteServer);\n\n if (this.globalConfig) {\n const globalMatch = this.matchesConfig(routePathname, this.globalConfig, ctx);\n if (!globalMatch.matched) {\n return false;\n }\n if (globalMatch.params) {\n ctx.params = { ...ctx.params, ...globalMatch.params };\n }\n }\n\n // Find applicable middleware (config entries first, then cascading files)\n const applicable: Array<{\n mw: DiscoveredMiddleware;\n routeMatch: { matched: boolean; params?: Record<string, string> };\n }> = [\n ...this.configMiddleware.map((mw) => ({ mw, routeMatch: { matched: true } })),\n ...this.middleware\n .map((mw) => ({ mw, routeMatch: this.matchRoutePath(routePathname, mw.path) }))\n .filter((entry) => entry.routeMatch.matched),\n ];\n\n if (applicable.length === 0) {\n return false; // No middleware to run\n }\n try {\n const pc = require(\"picocolors\");\n const middlewarePaths = applicable.map(({ mw }) => mw.path).join(\", \");\n const log = [\n pc.dim(\"[\") + pc.bold(pc.blue(\"FARM\")) + pc.dim(\"]\"),\n pc.dim(\"[\") + pc.bold(pc.magenta(\"MIDDLEWARE\")) + pc.dim(\"]\"),\n pc.dim(\"[\") + pc.bold(pc.white(method.padEnd(3))) + pc.dim(\"]\"),\n pc.gray(\"Executing middleware: \"),\n pc.gray(pathname),\n pc.dim(` (${(Date.now() - startTime).toFixed(2)}ms)`),\n ].join(\" \");\n console.log(log);\n } catch {\n console.log(\n `[FARM] [MIDDLEWARE] [${method}] Executing ${pathname} (${applicable.length} middleware)`,\n );\n }\n\n // Execute middleware in cascade order\n for (const entry of applicable) {\n // Check matcher configuration\n const { mw, routeMatch } = entry;\n const configMatch = mw.config\n ? this.matchesConfig(routePathname, mw.config, ctx)\n : { matched: true };\n if (!configMatch.matched) {\n continue;\n }\n if (routeMatch.params) {\n ctx.params = { ...ctx.params, ...routeMatch.params };\n }\n if (configMatch.params) {\n ctx.params = { ...ctx.params, ...configMatch.params };\n }\n\n // Create new context with parent data\n if (parentData) {\n ctx = createContext(req, res, this.viteServer, parentData);\n if (routeMatch.params) {\n ctx.params = { ...ctx.params, ...routeMatch.params };\n }\n if (configMatch.params) {\n ctx.params = { ...ctx.params, ...configMatch.params };\n }\n }\n\n const middlewareStartTime = Date.now();\n const middlewareEvent = {\n route: mw.path,\n pathname,\n name: mw.filePath,\n };\n emitFarmEvent({ type: \"middleware.start\", ...middlewareEvent });\n\n try {\n // Execute all handlers in this middleware\n let handlerIndex = 0;\n let returnedResponse: Response | undefined;\n const executeNext = async (): Promise<MiddlewareResult> => {\n if (handlerIndex < mw.handlers.length) {\n const handler = mw.handlers[handlerIndex++];\n const result = await handler(ctx, executeNext);\n if (isMiddlewareResponse(result)) {\n returnedResponse = result;\n return result;\n }\n }\n return returnedResponse;\n };\n\n const result = await executeNext();\n const response = isMiddlewareResponse(result) ? result : returnedResponse;\n if (response) {\n if (!res.headersSent && !res.writableEnded) {\n for (const [key, value] of ctx.headers) {\n try {\n res.setHeader(key, value);\n } catch (error) {}\n }\n }\n emitFarmEvent({\n type: \"middleware.shortCircuit\",\n ...middlewareEvent,\n status: response.status,\n });\n await sendWebResponse(res, response);\n return true;\n }\n\n // Check if response has been sent or handled by middleware helpers.\n if (ctx._handled || res.headersSent || res.writableEnded) {\n emitFarmEvent({\n type: \"middleware.shortCircuit\",\n ...middlewareEvent,\n status: res.statusCode,\n });\n return true;\n }\n\n emitFarmEvent({\n type: \"middleware.complete\",\n ...middlewareEvent,\n durationMs: Date.now() - middlewareStartTime,\n });\n } catch (error) {\n emitFarmEvent({\n type: \"middleware.error\",\n ...middlewareEvent,\n error,\n });\n throw error;\n }\n\n parentData = {\n data: new Map(ctx.data),\n locals: new Map(ctx.locals),\n headers: Object.fromEntries(ctx.headers),\n };\n }\n\n if (!res.headersSent && !res.writableEnded) {\n for (const [key, value] of ctx.headers) {\n try {\n res.setHeader(key, value);\n } catch (error) {}\n }\n }\n\n (req as any).__FARM_MIDDLEWARE_DATA__ = new Map(ctx.data);\n (req as any).__FARM_MIDDLEWARE_CONTEXT__ = new Map(ctx.locals);\n\n return false; // Continue to page rendering\n }\n\n /**\n * Check if pathname matches middleware config\n */\n private matchesConfig(\n pathname: string,\n config: MiddlewareConfig,\n ctx: MiddlewareContext,\n ): { matched: boolean; params?: Record<string, string> } {\n // Check exclusions\n if (config.exclude) {\n for (const pattern of config.exclude) {\n if (this.matchPattern(pattern, pathname).matched) {\n return { matched: false };\n }\n }\n }\n\n // Check matchers\n if (config.matcher) {\n for (const matcher of this.toMatcherList(config.matcher)) {\n if (typeof matcher === \"string\" || matcher instanceof RegExp) {\n const result = this.matchPattern(matcher, pathname);\n if (result.matched) {\n return result;\n }\n } else if (typeof matcher === \"function\") {\n return { matched: matcher(ctx) };\n }\n }\n return { matched: false };\n }\n\n return { matched: true };\n }\n\n /**\n * Match a pattern against pathname\n */\n private matchPattern(\n pattern: string | RegExp,\n pathname: string,\n ): { matched: boolean; params?: Record<string, string> } {\n if (pattern instanceof RegExp) {\n pattern.lastIndex = 0;\n const match = pattern.exec(pathname);\n return {\n matched: !!match,\n params: match?.groups ? { ...match.groups } : undefined,\n };\n }\n\n if (pattern === \"*\" || pattern === \"/(.*)\") {\n return { matched: true };\n }\n\n if (pattern.endsWith(\"(.*)\")) {\n const prefix = pattern.slice(0, -4);\n return { matched: pathname === prefix || pathname.startsWith(`${prefix}/`) };\n }\n\n const { regex, params } = this.compilePathPattern(pattern);\n const match = regex.exec(pathname);\n if (!match) {\n return { matched: false };\n }\n\n const values: Record<string, string> = {};\n params.forEach((param, index) => {\n values[param] = decodeURIComponent(match[index + 1] || \"\");\n });\n\n return {\n matched: true,\n params: Object.keys(values).length > 0 ? values : undefined,\n };\n }\n\n /**\n * Reload middleware (for HMR)\n */\n async reload(): Promise<void> {\n await this.discover();\n }\n\n getMiddlewares(): DiscoveredMiddleware[] {\n return [...this.configMiddleware, ...this.middleware];\n }\n\n hasMiddleware(): boolean {\n return this.configMiddleware.length > 0 || this.middleware.length > 0;\n }\n\n private matchRoutePath(\n pathname: string,\n middlewarePath: string,\n ): { matched: boolean; params?: Record<string, string> } {\n if (middlewarePath === \"/\") return { matched: true };\n\n const exactMatch = this.matchPattern(middlewarePath, pathname);\n if (exactMatch.matched) {\n return exactMatch;\n }\n\n const nestedMatch = this.matchPattern(`${middlewarePath}/:__farmRest*`, pathname);\n if (!nestedMatch.matched) {\n return { matched: false };\n }\n\n const params = { ...nestedMatch.params };\n delete params.__farmRest;\n return {\n matched: true,\n params: Object.keys(params).length > 0 ? params : undefined,\n };\n }\n\n private toMatcherList(matcher: MiddlewareConfig[\"matcher\"]): MiddlewareMatcher[] {\n if (!matcher) return [];\n return Array.isArray(matcher) ? matcher : [matcher];\n }\n\n private getConfigHandlers(\n entry:\n | MiddlewareConfig\n | (MiddlewareConfig & {\n handler?: MiddlewareFunction;\n handlers?: MiddlewareFunction[];\n }),\n ): MiddlewareFunction[] {\n const handlers: MiddlewareFunction[] = [];\n if (\"handler\" in entry && typeof entry.handler === \"function\") {\n handlers.push(entry.handler);\n }\n if (\"handlers\" in entry && Array.isArray(entry.handlers)) {\n handlers.push(...entry.handlers.filter((handler) => typeof handler === \"function\"));\n }\n return handlers;\n }\n\n private toMiddlewareConfig(\n entry: MiddlewareConfig & {\n handler?: MiddlewareFunction;\n handlers?: MiddlewareFunction[];\n },\n ): MiddlewareConfig {\n const { matcher, exclude, runtime } = entry;\n return { matcher, exclude, runtime };\n }\n\n private compilePathPattern(pattern: string): { regex: RegExp; params: string[] } {\n const params: string[] = [];\n const segments = pattern.split(\"/\").filter(Boolean);\n\n if (segments.length === 0) {\n return { regex: /^\\/$/, params };\n }\n\n const parts = segments.map((segment) => {\n if (segment === \"**\") {\n return \"(?:/.*)?\";\n }\n\n if (segment === \"*\") {\n return \"/[^/]+\";\n }\n\n if (segment.startsWith(\":\")) {\n const { name, modifier } = this.parseColonParam(segment);\n params.push(name);\n\n if (modifier === \"*\") {\n return \"(?:/(.*))?\";\n }\n if (modifier === \"+\") {\n return \"/(.+)\";\n }\n return \"/([^/]+)\";\n }\n\n if (segment.startsWith(\"[...\") && segment.endsWith(\"]\")) {\n params.push(segment.slice(4, -1));\n return \"(?:/(.*))?\";\n }\n\n if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\n params.push(segment.slice(1, -1));\n return \"/([^/]+)\";\n }\n\n return `/${this.escapeRegex(segment).replace(/\\\\\\*/g, \"[^/]*\")}`;\n });\n\n return {\n regex: new RegExp(`^${parts.join(\"\")}$`),\n params,\n };\n }\n\n private parseColonParam(segment: string): { name: string; modifier?: string } {\n const raw = segment.slice(1);\n const last = raw[raw.length - 1];\n const modifier = last === \"*\" || last === \"+\" || last === \"?\" ? last : undefined;\n return {\n name: modifier ? raw.slice(0, -1) : raw,\n modifier,\n };\n }\n\n private escapeRegex(value: string): string {\n return value.replace(/[|\\\\{}()[\\]^$+?.]/g, \"\\\\$&\");\n }\n}\n"],"mappings":"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","names":["result","match"]}
@@ -0,0 +1,391 @@
1
+ import {
2
+ __name
3
+ } from "./chunk-CGILA3WO.mjs";
4
+
5
+ // src/client/plugin.ts
6
+ var PERFORMANCE_ENTRY_TYPES = [
7
+ "navigation",
8
+ "paint",
9
+ "largest-contentful-paint",
10
+ "layout-shift",
11
+ "event"
12
+ ];
13
+ var _FarmClientPluginManager = class _FarmClientPluginManager {
14
+ constructor(registrations, options) {
15
+ this.instances = [];
16
+ this.performanceObservers = [];
17
+ this.navigationSequence = 0;
18
+ this.starting = false;
19
+ this.started = false;
20
+ this.closed = false;
21
+ this.reportedErrors = /* @__PURE__ */ new WeakSet();
22
+ this.handleWindowError = /* @__PURE__ */ __name((event) => {
23
+ const error = event.error ?? new Error(event.message || "Unknown browser error");
24
+ void this.reportError(error, "window");
25
+ }, "handleWindowError");
26
+ this.handleUnhandledRejection = /* @__PURE__ */ __name((event) => {
27
+ void this.reportError(event.reason, "unhandled-rejection");
28
+ }, "handleUnhandledRejection");
29
+ this.handlePageHide = /* @__PURE__ */ __name(() => {
30
+ void this.close("pagehide");
31
+ }, "handlePageHide");
32
+ this.registrations = sortRegistrations(registrations);
33
+ this.options = {
34
+ ...options,
35
+ isDev: options.isDev ?? false,
36
+ isProd: options.isProd ?? !options.isDev,
37
+ window: options.window ?? (typeof window !== "undefined" ? window : void 0)
38
+ };
39
+ }
40
+ start() {
41
+ if (this.startPromise) return this.startPromise;
42
+ this.startPromise = Promise.resolve().then(() => this.startInternal());
43
+ return this.startPromise;
44
+ }
45
+ async beginHydration(input) {
46
+ await this.start();
47
+ const session = {
48
+ ...input,
49
+ location: this.getLocation(),
50
+ startedAt: now()
51
+ };
52
+ await this.runHook(
53
+ "hydration.before",
54
+ (instance) => instance.plugin.hydration?.before?.({
55
+ ...this.createStateEvent(instance),
56
+ ...session
57
+ })
58
+ );
59
+ return session;
60
+ }
61
+ async completeHydration(session, options = {}) {
62
+ await this.runHook(
63
+ "hydration.after",
64
+ (instance) => instance.plugin.hydration?.after?.({
65
+ ...this.createStateEvent(instance),
66
+ ...session,
67
+ durationMs: now() - session.startedAt,
68
+ recovered: options.recovered ?? false
69
+ })
70
+ );
71
+ }
72
+ async failHydration(session, error) {
73
+ await this.reportError(error, "hydration", void 0, session.location);
74
+ }
75
+ async beginNavigation(input) {
76
+ await this.start();
77
+ this.currentNavigation?.controller.abort("superseded");
78
+ const controller = new AbortController();
79
+ const session = {
80
+ id: `navigation:${++this.navigationSequence}`,
81
+ from: input.from === null ? null : toClientLocation(input.from ?? this.getLocation().href, this.getBaseUrl()),
82
+ to: toClientLocation(input.to, this.getBaseUrl()),
83
+ action: input.action,
84
+ signal: controller.signal,
85
+ startedAt: now(),
86
+ route: input.route
87
+ };
88
+ this.currentNavigation = { controller, session };
89
+ await this.runHook(
90
+ "navigation.before",
91
+ (instance) => instance.plugin.navigation?.before?.({
92
+ ...this.createStateEvent(instance),
93
+ ...session
94
+ })
95
+ );
96
+ return session;
97
+ }
98
+ async markNavigationLoaded(session, data) {
99
+ if (session.signal.aborted) return;
100
+ await this.runHook(
101
+ "navigation.loaded",
102
+ (instance) => instance.plugin.navigation?.loaded?.({
103
+ ...this.createStateEvent(instance),
104
+ ...session,
105
+ data,
106
+ durationMs: now() - session.startedAt
107
+ })
108
+ );
109
+ }
110
+ async resolveNavigation(session) {
111
+ if (session.signal.aborted) return;
112
+ await this.runHook(
113
+ "navigation.resolved",
114
+ (instance) => instance.plugin.navigation?.resolved?.({
115
+ ...this.createStateEvent(instance),
116
+ ...session,
117
+ durationMs: now() - session.startedAt
118
+ })
119
+ );
120
+ }
121
+ scheduleNavigationRendered(session) {
122
+ if (session.signal.aborted) return Promise.resolve();
123
+ const clientWindow = this.options.window;
124
+ const schedule = clientWindow?.requestAnimationFrame ? (callback) => clientWindow.requestAnimationFrame(() => clientWindow.requestAnimationFrame(callback)) : (callback) => setTimeout(callback, 0);
125
+ return new Promise((resolve) => {
126
+ schedule(() => {
127
+ if (session.signal.aborted || this.closed) {
128
+ resolve();
129
+ return;
130
+ }
131
+ void this.runHook(
132
+ "navigation.rendered",
133
+ (instance) => instance.plugin.navigation?.rendered?.({
134
+ ...this.createStateEvent(instance),
135
+ ...session,
136
+ durationMs: now() - session.startedAt
137
+ })
138
+ ).finally(() => {
139
+ if (this.currentNavigation?.session === session) {
140
+ this.currentNavigation = void 0;
141
+ }
142
+ resolve();
143
+ });
144
+ });
145
+ });
146
+ }
147
+ async failNavigation(session, error) {
148
+ if (!session.signal.aborted) {
149
+ await this.runHook(
150
+ "navigation.error",
151
+ (instance) => instance.plugin.navigation?.error?.({
152
+ ...this.createStateEvent(instance),
153
+ ...session,
154
+ durationMs: now() - session.startedAt,
155
+ error
156
+ })
157
+ );
158
+ await this.reportError(error, "navigation", session, session.to);
159
+ }
160
+ if (this.currentNavigation?.session === session) {
161
+ this.currentNavigation = void 0;
162
+ }
163
+ }
164
+ async reportError(error, phase, navigation, location = this.getLocation()) {
165
+ if (this.closed) return;
166
+ if (isObject(error)) {
167
+ if (this.reportedErrors.has(error)) return;
168
+ this.reportedErrors.add(error);
169
+ }
170
+ if (!this.started && !this.starting) await this.start();
171
+ await this.runErrorHooks({ error, phase, navigation, location });
172
+ }
173
+ close(reason = "manual") {
174
+ if (this.closePromise) return this.closePromise;
175
+ this.closePromise = this.closeInternal(reason);
176
+ return this.closePromise;
177
+ }
178
+ getPlugins() {
179
+ return this.instances.map(({ registration }) => ({
180
+ name: registration.name,
181
+ version: registration.version
182
+ }));
183
+ }
184
+ async startInternal() {
185
+ if (this.started || this.closed) return;
186
+ this.starting = true;
187
+ try {
188
+ for (const registration of this.registrations) {
189
+ try {
190
+ const definition = registration.definition;
191
+ if (!definition || typeof definition !== "object") {
192
+ throw new TypeError(
193
+ `Client plugin "${registration.name}" does not define a lifecycle object`
194
+ );
195
+ }
196
+ const instance = {
197
+ registration,
198
+ plugin: definition,
199
+ state: void 0
200
+ };
201
+ instance.state = await definition.setup?.(this.createSetupEvent(instance));
202
+ this.instances.push(instance);
203
+ } catch (error) {
204
+ this.logHookError(registration.name, "setup", error);
205
+ await this.runErrorHooks({
206
+ error,
207
+ phase: "setup",
208
+ location: this.getLocation()
209
+ });
210
+ }
211
+ }
212
+ this.started = true;
213
+ this.installBrowserListeners();
214
+ this.installPerformanceObservers();
215
+ } finally {
216
+ this.starting = false;
217
+ }
218
+ }
219
+ installBrowserListeners() {
220
+ const clientWindow = this.options.window;
221
+ if (!clientWindow) return;
222
+ if (this.instances.some(({ plugin }) => plugin.error)) {
223
+ clientWindow.addEventListener("error", this.handleWindowError);
224
+ clientWindow.addEventListener("unhandledrejection", this.handleUnhandledRejection);
225
+ }
226
+ clientWindow.addEventListener("pagehide", this.handlePageHide, {
227
+ once: true
228
+ });
229
+ }
230
+ installPerformanceObservers() {
231
+ if (!this.instances.some(({ plugin }) => plugin.performance)) return;
232
+ const Observer = typeof PerformanceObserver !== "undefined" ? PerformanceObserver : void 0;
233
+ if (!Observer) return;
234
+ const supported = new Set(Observer.supportedEntryTypes || []);
235
+ for (const type of PERFORMANCE_ENTRY_TYPES) {
236
+ if (!supported.has(type)) continue;
237
+ try {
238
+ const observer = new Observer((list) => {
239
+ for (const entry of list.getEntries()) {
240
+ void this.runHook(
241
+ "performance",
242
+ (instance) => instance.plugin.performance?.({
243
+ ...this.createStateEvent(instance),
244
+ entry,
245
+ location: this.getLocation()
246
+ })
247
+ );
248
+ }
249
+ });
250
+ observer.observe({ type, buffered: true });
251
+ this.performanceObservers.push(observer);
252
+ } catch (error) {
253
+ void this.reportError(error, "performance");
254
+ }
255
+ }
256
+ }
257
+ async closeInternal(reason) {
258
+ if (this.closed) return;
259
+ if (this.startPromise) await this.startPromise;
260
+ this.closed = true;
261
+ this.currentNavigation?.controller.abort(reason);
262
+ this.currentNavigation = void 0;
263
+ const clientWindow = this.options.window;
264
+ clientWindow?.removeEventListener("error", this.handleWindowError);
265
+ clientWindow?.removeEventListener("unhandledrejection", this.handleUnhandledRejection);
266
+ clientWindow?.removeEventListener("pagehide", this.handlePageHide);
267
+ for (const observer of this.performanceObservers) observer.disconnect();
268
+ this.performanceObservers.length = 0;
269
+ for (const instance of [...this.instances].reverse()) {
270
+ try {
271
+ await instance.plugin.close?.({
272
+ ...this.createStateEvent(instance),
273
+ reason
274
+ });
275
+ } catch (error) {
276
+ this.logHookError(instance.registration.name, "close", error);
277
+ }
278
+ }
279
+ }
280
+ async runHook(hook, invoke) {
281
+ for (const instance of this.instances) {
282
+ try {
283
+ await invoke(instance);
284
+ } catch (error) {
285
+ this.logHookError(instance.registration.name, hook, error);
286
+ await this.runErrorHooks(
287
+ {
288
+ error,
289
+ phase: `plugin:${hook}`,
290
+ location: this.getLocation()
291
+ },
292
+ instance
293
+ );
294
+ }
295
+ }
296
+ }
297
+ async runErrorHooks(event, excluded) {
298
+ for (const instance of this.instances) {
299
+ if (instance === excluded || !instance.plugin.error) continue;
300
+ try {
301
+ await instance.plugin.error({
302
+ ...this.createStateEvent(instance),
303
+ ...event
304
+ });
305
+ } catch (error) {
306
+ this.logHookError(instance.registration.name, "error", error);
307
+ }
308
+ }
309
+ }
310
+ createSetupEvent(instance) {
311
+ return {
312
+ plugin: {
313
+ name: instance.registration.name,
314
+ version: instance.registration.version
315
+ },
316
+ public: readonlyPublicData(instance.registration.public),
317
+ router: this.options.router,
318
+ isDev: Boolean(this.options.isDev),
319
+ isProd: Boolean(this.options.isProd),
320
+ deploymentId: this.options.deploymentId
321
+ };
322
+ }
323
+ createStateEvent(instance) {
324
+ return {
325
+ ...this.createSetupEvent(instance),
326
+ state: instance.state
327
+ };
328
+ }
329
+ getLocation() {
330
+ const href = this.options.window?.location.href ?? "http://localhost/";
331
+ return toClientLocation(href, href);
332
+ }
333
+ getBaseUrl() {
334
+ return this.options.window?.location.href ?? "http://localhost/";
335
+ }
336
+ logHookError(name, hook, error) {
337
+ console.error(`[Farm.js] Client plugin "${name}" failed in ${hook}:`, error);
338
+ }
339
+ };
340
+ __name(_FarmClientPluginManager, "FarmClientPluginManager");
341
+ var FarmClientPluginManager = _FarmClientPluginManager;
342
+ function createClientPluginManager(registrations, options) {
343
+ return new FarmClientPluginManager(registrations, options);
344
+ }
345
+ __name(createClientPluginManager, "createClientPluginManager");
346
+ function sortRegistrations(registrations) {
347
+ const rank = /* @__PURE__ */ __name((enforce) => enforce === "pre" ? 0 : enforce === "post" ? 2 : 1, "rank");
348
+ return registrations.map((registration, index) => ({ registration, index })).sort(
349
+ (left, right) => rank(left.registration.enforce) - rank(right.registration.enforce) || left.index - right.index
350
+ ).map(({ registration }) => registration);
351
+ }
352
+ __name(sortRegistrations, "sortRegistrations");
353
+ function toClientLocation(input, base) {
354
+ if (typeof input === "object" && "href" in input && "pathname" in input) {
355
+ return {
356
+ href: input.href,
357
+ pathname: input.pathname,
358
+ search: input.search,
359
+ hash: input.hash
360
+ };
361
+ }
362
+ const url = new URL(input, base);
363
+ return {
364
+ href: url.href,
365
+ pathname: url.pathname,
366
+ search: url.search,
367
+ hash: url.hash
368
+ };
369
+ }
370
+ __name(toClientLocation, "toClientLocation");
371
+ function readonlyPublicData(value) {
372
+ if (value && typeof value === "object") {
373
+ return Object.freeze(value);
374
+ }
375
+ return value;
376
+ }
377
+ __name(readonlyPublicData, "readonlyPublicData");
378
+ function now() {
379
+ return typeof performance !== "undefined" ? performance.now() : Date.now();
380
+ }
381
+ __name(now, "now");
382
+ function isObject(value) {
383
+ return typeof value === "object" && value !== null || typeof value === "function";
384
+ }
385
+ __name(isObject, "isObject");
386
+
387
+ export {
388
+ FarmClientPluginManager,
389
+ createClientPluginManager
390
+ };
391
+ //# sourceMappingURL=chunk-NNLCAVB6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client/plugin.ts"],"sourcesContent":["\"use client\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type FarmClientPluginEnforce = \"pre\" | \"post\";\nexport type FarmClientNavigationAction = \"push\" | \"replace\" | \"pop\";\nexport type FarmClientHydrationMode = \"hydrate\" | \"render\";\n\nexport interface FarmClientLocation {\n href: string;\n pathname: string;\n search: string;\n hash: string;\n}\n\nexport interface FarmClientPluginRouter {\n navigate(href: string, options?: Record<string, unknown>): MaybePromise<void>;\n prefetch?(href: string): MaybePromise<void>;\n getNavigationState?(): unknown;\n}\n\nexport interface FarmClientPluginMetadata {\n name: string;\n version?: string;\n}\n\nexport interface FarmClientPluginSetupEvent<TPublic = undefined> {\n plugin: FarmClientPluginMetadata;\n public: Readonly<TPublic>;\n router: FarmClientPluginRouter;\n isDev: boolean;\n isProd: boolean;\n deploymentId?: string;\n}\n\nexport interface FarmClientPluginStateEvent<\n TState = unknown,\n TPublic = undefined,\n> extends FarmClientPluginSetupEvent<TPublic> {\n state: TState;\n}\n\nexport interface FarmClientHydrationSession {\n container: Element;\n location: FarmClientLocation;\n mode: FarmClientHydrationMode;\n startedAt: number;\n}\n\nexport interface FarmClientHydrationEvent<TState = unknown, TPublic = undefined>\n extends FarmClientPluginStateEvent<TState, TPublic>, FarmClientHydrationSession {}\n\nexport interface FarmClientHydrationCompleteEvent<\n TState = unknown,\n TPublic = undefined,\n> extends FarmClientHydrationEvent<TState, TPublic> {\n durationMs: number;\n recovered: boolean;\n}\n\nexport interface FarmClientNavigationSession {\n id: string;\n from: FarmClientLocation | null;\n to: FarmClientLocation;\n action: FarmClientNavigationAction;\n signal: AbortSignal;\n startedAt: number;\n route?: {\n pattern?: string | null;\n params?: Record<string, string>;\n };\n}\n\nexport interface FarmClientNavigationEvent<TState = unknown, TPublic = undefined>\n extends FarmClientPluginStateEvent<TState, TPublic>, FarmClientNavigationSession {}\n\nexport interface FarmClientNavigationLoadedEvent<\n TState = unknown,\n TPublic = undefined,\n> extends FarmClientNavigationEvent<TState, TPublic> {\n durationMs: number;\n data?: unknown;\n}\n\nexport interface FarmClientNavigationResolvedEvent<\n TState = unknown,\n TPublic = undefined,\n> extends FarmClientNavigationEvent<TState, TPublic> {\n durationMs: number;\n}\n\nexport interface FarmClientNavigationErrorEvent<\n TState = unknown,\n TPublic = undefined,\n> extends FarmClientNavigationResolvedEvent<TState, TPublic> {\n error: unknown;\n}\n\nexport type FarmClientPluginErrorPhase =\n | \"setup\"\n | \"hydration\"\n | \"navigation\"\n | \"window\"\n | \"unhandled-rejection\"\n | \"performance\"\n | `plugin:${string}`\n | (string & {});\n\nexport interface FarmClientPluginErrorEvent<\n TState = unknown,\n TPublic = undefined,\n> extends FarmClientPluginStateEvent<TState, TPublic> {\n error: unknown;\n phase: FarmClientPluginErrorPhase;\n location: FarmClientLocation;\n navigation?: FarmClientNavigationSession;\n}\n\nexport interface FarmClientPerformanceEvent<\n TState = unknown,\n TPublic = undefined,\n> extends FarmClientPluginStateEvent<TState, TPublic> {\n entry: PerformanceEntry;\n location: FarmClientLocation;\n}\n\nexport interface FarmClientPluginCloseEvent<\n TState = unknown,\n TPublic = undefined,\n> extends FarmClientPluginStateEvent<TState, TPublic> {\n reason: \"pagehide\" | \"hmr\" | \"manual\" | (string & {});\n}\n\nexport interface FarmClientPlugin<TState = unknown, TPublic = undefined> {\n setup?(event: FarmClientPluginSetupEvent<TPublic>): MaybePromise<TState>;\n hydration?: {\n before?(event: FarmClientHydrationEvent<TState, TPublic>): MaybePromise<void>;\n after?(event: FarmClientHydrationCompleteEvent<TState, TPublic>): MaybePromise<void>;\n };\n navigation?: {\n before?(event: FarmClientNavigationEvent<TState, TPublic>): MaybePromise<void>;\n loaded?(event: FarmClientNavigationLoadedEvent<TState, TPublic>): MaybePromise<void>;\n resolved?(event: FarmClientNavigationResolvedEvent<TState, TPublic>): MaybePromise<void>;\n rendered?(event: FarmClientNavigationResolvedEvent<TState, TPublic>): MaybePromise<void>;\n error?(event: FarmClientNavigationErrorEvent<TState, TPublic>): MaybePromise<void>;\n };\n error?(event: FarmClientPluginErrorEvent<TState, TPublic>): MaybePromise<void>;\n performance?(event: FarmClientPerformanceEvent<TState, TPublic>): MaybePromise<void>;\n close?(event: FarmClientPluginCloseEvent<TState, TPublic>): MaybePromise<void>;\n}\n\nexport interface FarmClientPluginRegistration<TPublic = undefined> {\n name: string;\n version?: string;\n enforce?: FarmClientPluginEnforce;\n definition: FarmClientPlugin<any, TPublic>;\n public?: TPublic;\n}\n\nexport interface FarmClientPluginManagerOptions {\n router: FarmClientPluginRouter;\n isDev?: boolean;\n isProd?: boolean;\n deploymentId?: string;\n window?: Window;\n}\n\ninterface FarmClientPluginInstance {\n registration: FarmClientPluginRegistration<any>;\n plugin: FarmClientPlugin<any, any>;\n state: unknown;\n}\n\nconst PERFORMANCE_ENTRY_TYPES = [\n \"navigation\",\n \"paint\",\n \"largest-contentful-paint\",\n \"layout-shift\",\n \"event\",\n];\n\nexport class FarmClientPluginManager {\n private readonly registrations: FarmClientPluginRegistration[];\n private readonly options: FarmClientPluginManagerOptions;\n private readonly instances: FarmClientPluginInstance[] = [];\n private readonly performanceObservers: PerformanceObserver[] = [];\n private startPromise?: Promise<void>;\n private closePromise?: Promise<void>;\n private currentNavigation?: {\n controller: AbortController;\n session: FarmClientNavigationSession;\n };\n private navigationSequence = 0;\n private starting = false;\n private started = false;\n private closed = false;\n private readonly reportedErrors = new WeakSet<object>();\n\n private readonly handleWindowError = (event: ErrorEvent) => {\n const error = event.error ?? new Error(event.message || \"Unknown browser error\");\n void this.reportError(error, \"window\");\n };\n\n private readonly handleUnhandledRejection = (event: PromiseRejectionEvent) => {\n void this.reportError(event.reason, \"unhandled-rejection\");\n };\n\n private readonly handlePageHide = () => {\n void this.close(\"pagehide\");\n };\n\n constructor(\n registrations: readonly FarmClientPluginRegistration[],\n options: FarmClientPluginManagerOptions,\n ) {\n this.registrations = sortRegistrations(registrations);\n this.options = {\n ...options,\n isDev: options.isDev ?? false,\n isProd: options.isProd ?? !options.isDev,\n window: options.window ?? (typeof window !== \"undefined\" ? window : undefined),\n };\n }\n\n start(): Promise<void> {\n if (this.startPromise) return this.startPromise;\n\n this.startPromise = Promise.resolve().then(() => this.startInternal());\n return this.startPromise;\n }\n\n async beginHydration(input: {\n container: Element;\n mode: FarmClientHydrationMode;\n }): Promise<FarmClientHydrationSession> {\n await this.start();\n const session: FarmClientHydrationSession = {\n ...input,\n location: this.getLocation(),\n startedAt: now(),\n };\n\n await this.runHook(\"hydration.before\", (instance) =>\n instance.plugin.hydration?.before?.({\n ...this.createStateEvent(instance),\n ...session,\n }),\n );\n\n return session;\n }\n\n async completeHydration(\n session: FarmClientHydrationSession,\n options: { recovered?: boolean } = {},\n ): Promise<void> {\n await this.runHook(\"hydration.after\", (instance) =>\n instance.plugin.hydration?.after?.({\n ...this.createStateEvent(instance),\n ...session,\n durationMs: now() - session.startedAt,\n recovered: options.recovered ?? false,\n }),\n );\n }\n\n async failHydration(session: FarmClientHydrationSession, error: unknown): Promise<void> {\n await this.reportError(error, \"hydration\", undefined, session.location);\n }\n\n async beginNavigation(input: {\n from?: string | URL | FarmClientLocation | null;\n to: string | URL | FarmClientLocation;\n action: FarmClientNavigationAction;\n route?: FarmClientNavigationSession[\"route\"];\n }): Promise<FarmClientNavigationSession> {\n await this.start();\n this.currentNavigation?.controller.abort(\"superseded\");\n\n const controller = new AbortController();\n const session: FarmClientNavigationSession = {\n id: `navigation:${++this.navigationSequence}`,\n from:\n input.from === null\n ? null\n : toClientLocation(input.from ?? this.getLocation().href, this.getBaseUrl()),\n to: toClientLocation(input.to, this.getBaseUrl()),\n action: input.action,\n signal: controller.signal,\n startedAt: now(),\n route: input.route,\n };\n\n this.currentNavigation = { controller, session };\n await this.runHook(\"navigation.before\", (instance) =>\n instance.plugin.navigation?.before?.({\n ...this.createStateEvent(instance),\n ...session,\n }),\n );\n\n return session;\n }\n\n async markNavigationLoaded(session: FarmClientNavigationSession, data?: unknown): Promise<void> {\n if (session.signal.aborted) return;\n await this.runHook(\"navigation.loaded\", (instance) =>\n instance.plugin.navigation?.loaded?.({\n ...this.createStateEvent(instance),\n ...session,\n data,\n durationMs: now() - session.startedAt,\n }),\n );\n }\n\n async resolveNavigation(session: FarmClientNavigationSession): Promise<void> {\n if (session.signal.aborted) return;\n await this.runHook(\"navigation.resolved\", (instance) =>\n instance.plugin.navigation?.resolved?.({\n ...this.createStateEvent(instance),\n ...session,\n durationMs: now() - session.startedAt,\n }),\n );\n }\n\n scheduleNavigationRendered(session: FarmClientNavigationSession): Promise<void> {\n if (session.signal.aborted) return Promise.resolve();\n const clientWindow = this.options.window;\n const schedule = clientWindow?.requestAnimationFrame\n ? (callback: () => void) =>\n clientWindow.requestAnimationFrame(() => clientWindow.requestAnimationFrame(callback))\n : (callback: () => void) => setTimeout(callback, 0);\n\n return new Promise((resolve) => {\n schedule(() => {\n if (session.signal.aborted || this.closed) {\n resolve();\n return;\n }\n void this.runHook(\"navigation.rendered\", (instance) =>\n instance.plugin.navigation?.rendered?.({\n ...this.createStateEvent(instance),\n ...session,\n durationMs: now() - session.startedAt,\n }),\n ).finally(() => {\n if (this.currentNavigation?.session === session) {\n this.currentNavigation = undefined;\n }\n resolve();\n });\n });\n });\n }\n\n async failNavigation(session: FarmClientNavigationSession, error: unknown): Promise<void> {\n if (!session.signal.aborted) {\n await this.runHook(\"navigation.error\", (instance) =>\n instance.plugin.navigation?.error?.({\n ...this.createStateEvent(instance),\n ...session,\n durationMs: now() - session.startedAt,\n error,\n }),\n );\n await this.reportError(error, \"navigation\", session, session.to);\n }\n\n if (this.currentNavigation?.session === session) {\n this.currentNavigation = undefined;\n }\n }\n\n async reportError(\n error: unknown,\n phase: FarmClientPluginErrorPhase,\n navigation?: FarmClientNavigationSession,\n location = this.getLocation(),\n ): Promise<void> {\n if (this.closed) return;\n if (isObject(error)) {\n if (this.reportedErrors.has(error)) return;\n this.reportedErrors.add(error);\n }\n\n if (!this.started && !this.starting) await this.start();\n await this.runErrorHooks({ error, phase, navigation, location });\n }\n\n close(reason: FarmClientPluginCloseEvent[\"reason\"] = \"manual\"): Promise<void> {\n if (this.closePromise) return this.closePromise;\n this.closePromise = this.closeInternal(reason);\n return this.closePromise;\n }\n\n getPlugins(): readonly FarmClientPluginMetadata[] {\n return this.instances.map(({ registration }) => ({\n name: registration.name,\n version: registration.version,\n }));\n }\n\n private async startInternal(): Promise<void> {\n if (this.started || this.closed) return;\n this.starting = true;\n\n try {\n for (const registration of this.registrations) {\n try {\n const definition = registration.definition;\n if (!definition || typeof definition !== \"object\") {\n throw new TypeError(\n `Client plugin \"${registration.name}\" does not define a lifecycle object`,\n );\n }\n\n const instance: FarmClientPluginInstance = {\n registration,\n plugin: definition,\n state: undefined,\n };\n instance.state = await definition.setup?.(this.createSetupEvent(instance));\n this.instances.push(instance);\n } catch (error) {\n this.logHookError(registration.name, \"setup\", error);\n await this.runErrorHooks({\n error,\n phase: \"setup\",\n location: this.getLocation(),\n });\n }\n }\n\n this.started = true;\n this.installBrowserListeners();\n this.installPerformanceObservers();\n } finally {\n this.starting = false;\n }\n }\n\n private installBrowserListeners(): void {\n const clientWindow = this.options.window;\n if (!clientWindow) return;\n\n if (this.instances.some(({ plugin }) => plugin.error)) {\n clientWindow.addEventListener(\"error\", this.handleWindowError);\n clientWindow.addEventListener(\"unhandledrejection\", this.handleUnhandledRejection);\n }\n clientWindow.addEventListener(\"pagehide\", this.handlePageHide, {\n once: true,\n });\n }\n\n private installPerformanceObservers(): void {\n if (!this.instances.some(({ plugin }) => plugin.performance)) return;\n const Observer = typeof PerformanceObserver !== \"undefined\" ? PerformanceObserver : undefined;\n if (!Observer) return;\n\n const supported = new Set(Observer.supportedEntryTypes || []);\n for (const type of PERFORMANCE_ENTRY_TYPES) {\n if (!supported.has(type)) continue;\n try {\n const observer = new Observer((list: PerformanceObserverEntryList) => {\n for (const entry of list.getEntries()) {\n void this.runHook(\"performance\", (instance) =>\n instance.plugin.performance?.({\n ...this.createStateEvent(instance),\n entry,\n location: this.getLocation(),\n }),\n );\n }\n });\n observer.observe({ type, buffered: true });\n this.performanceObservers.push(observer);\n } catch (error) {\n void this.reportError(error, \"performance\");\n }\n }\n }\n\n private async closeInternal(reason: FarmClientPluginCloseEvent[\"reason\"]): Promise<void> {\n if (this.closed) return;\n if (this.startPromise) await this.startPromise;\n this.closed = true;\n this.currentNavigation?.controller.abort(reason);\n this.currentNavigation = undefined;\n\n const clientWindow = this.options.window;\n clientWindow?.removeEventListener(\"error\", this.handleWindowError);\n clientWindow?.removeEventListener(\"unhandledrejection\", this.handleUnhandledRejection);\n clientWindow?.removeEventListener(\"pagehide\", this.handlePageHide);\n for (const observer of this.performanceObservers) observer.disconnect();\n this.performanceObservers.length = 0;\n\n for (const instance of [...this.instances].reverse()) {\n try {\n await instance.plugin.close?.({\n ...this.createStateEvent(instance),\n reason,\n });\n } catch (error) {\n this.logHookError(instance.registration.name, \"close\", error);\n }\n }\n }\n\n private async runHook(\n hook: string,\n invoke: (instance: FarmClientPluginInstance) => MaybePromise<void> | undefined,\n ): Promise<void> {\n for (const instance of this.instances) {\n try {\n await invoke(instance);\n } catch (error) {\n this.logHookError(instance.registration.name, hook, error);\n await this.runErrorHooks(\n {\n error,\n phase: `plugin:${hook}`,\n location: this.getLocation(),\n },\n instance,\n );\n }\n }\n }\n\n private async runErrorHooks(\n event: Pick<FarmClientPluginErrorEvent, \"error\" | \"phase\" | \"location\" | \"navigation\">,\n excluded?: FarmClientPluginInstance,\n ): Promise<void> {\n for (const instance of this.instances) {\n if (instance === excluded || !instance.plugin.error) continue;\n try {\n await instance.plugin.error({\n ...this.createStateEvent(instance),\n ...event,\n });\n } catch (error) {\n this.logHookError(instance.registration.name, \"error\", error);\n }\n }\n }\n\n private createSetupEvent(\n instance: Pick<FarmClientPluginInstance, \"registration\">,\n ): FarmClientPluginSetupEvent<any> {\n return {\n plugin: {\n name: instance.registration.name,\n version: instance.registration.version,\n },\n public: readonlyPublicData(instance.registration.public),\n router: this.options.router,\n isDev: Boolean(this.options.isDev),\n isProd: Boolean(this.options.isProd),\n deploymentId: this.options.deploymentId,\n };\n }\n\n private createStateEvent(\n instance: FarmClientPluginInstance,\n ): FarmClientPluginStateEvent<any, any> {\n return {\n ...this.createSetupEvent(instance),\n state: instance.state,\n };\n }\n\n private getLocation(): FarmClientLocation {\n const href = this.options.window?.location.href ?? \"http://localhost/\";\n return toClientLocation(href, href);\n }\n\n private getBaseUrl(): string {\n return this.options.window?.location.href ?? \"http://localhost/\";\n }\n\n private logHookError(name: string, hook: string, error: unknown): void {\n console.error(`[Farm.js] Client plugin \"${name}\" failed in ${hook}:`, error);\n }\n}\n\nexport function createClientPluginManager(\n registrations: readonly FarmClientPluginRegistration[],\n options: FarmClientPluginManagerOptions,\n): FarmClientPluginManager {\n return new FarmClientPluginManager(registrations, options);\n}\n\nfunction sortRegistrations(\n registrations: readonly FarmClientPluginRegistration[],\n): FarmClientPluginRegistration[] {\n const rank = (enforce?: FarmClientPluginEnforce) =>\n enforce === \"pre\" ? 0 : enforce === \"post\" ? 2 : 1;\n return registrations\n .map((registration, index) => ({ registration, index }))\n .sort(\n (left, right) =>\n rank(left.registration.enforce) - rank(right.registration.enforce) ||\n left.index - right.index,\n )\n .map(({ registration }) => registration);\n}\n\nfunction toClientLocation(\n input: string | URL | FarmClientLocation,\n base: string,\n): FarmClientLocation {\n if (typeof input === \"object\" && \"href\" in input && \"pathname\" in input) {\n return {\n href: input.href,\n pathname: input.pathname,\n search: input.search,\n hash: input.hash,\n };\n }\n\n const url = new URL(input, base);\n return {\n href: url.href,\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n}\n\nfunction readonlyPublicData<T>(value: T | undefined): Readonly<T> {\n if (value && typeof value === \"object\") {\n return Object.freeze(value);\n }\n return value as Readonly<T>;\n}\n\nfunction now(): number {\n return typeof performance !== \"undefined\" ? performance.now() : Date.now();\n}\n\nfunction isObject(value: unknown): value is object {\n return (typeof value === \"object\" && value !== null) || typeof value === \"function\";\n}\n"],"mappings":"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","names":[]}