@farm.js/core 0.1.0-beta.0

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 (549) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +11 -0
  3. package/dist/after.cjs +227 -0
  4. package/dist/after.cjs.map +1 -0
  5. package/dist/after.d.mts +25 -0
  6. package/dist/after.d.ts +25 -0
  7. package/dist/after.mjs +14 -0
  8. package/dist/after.mjs.map +1 -0
  9. package/dist/agent-runtime.cjs +2379 -0
  10. package/dist/agent-runtime.cjs.map +1 -0
  11. package/dist/agent-runtime.d.mts +93 -0
  12. package/dist/agent-runtime.d.ts +93 -0
  13. package/dist/agent-runtime.mjs +479 -0
  14. package/dist/agent-runtime.mjs.map +1 -0
  15. package/dist/api/route-manager.cjs +1196 -0
  16. package/dist/api/route-manager.cjs.map +1 -0
  17. package/dist/api/route-manager.d.mts +64 -0
  18. package/dist/api/route-manager.d.ts +64 -0
  19. package/dist/api/route-manager.mjs +34 -0
  20. package/dist/api/route-manager.mjs.map +1 -0
  21. package/dist/api/runtime.cjs +272 -0
  22. package/dist/api/runtime.cjs.map +1 -0
  23. package/dist/api/runtime.d.mts +16 -0
  24. package/dist/api/runtime.d.ts +16 -0
  25. package/dist/api/runtime.mjs +16 -0
  26. package/dist/api/runtime.mjs.map +1 -0
  27. package/dist/api.cjs +3199 -0
  28. package/dist/api.cjs.map +1 -0
  29. package/dist/api.d.mts +190 -0
  30. package/dist/api.d.ts +190 -0
  31. package/dist/api.mjs +63 -0
  32. package/dist/api.mjs.map +1 -0
  33. package/dist/app-BiX4qb-d.d.mts +265 -0
  34. package/dist/app-CFRNJXP1.d.ts +265 -0
  35. package/dist/app-markdown.cjs +220 -0
  36. package/dist/app-markdown.cjs.map +1 -0
  37. package/dist/app-markdown.d.mts +21 -0
  38. package/dist/app-markdown.d.ts +21 -0
  39. package/dist/app-markdown.mjs +26 -0
  40. package/dist/app-markdown.mjs.map +1 -0
  41. package/dist/cache.cjs +543 -0
  42. package/dist/cache.cjs.map +1 -0
  43. package/dist/cache.d.mts +78 -0
  44. package/dist/cache.d.ts +78 -0
  45. package/dist/cache.mjs +38 -0
  46. package/dist/cache.mjs.map +1 -0
  47. package/dist/chunk-25D7G34K.mjs +142 -0
  48. package/dist/chunk-25D7G34K.mjs.map +1 -0
  49. package/dist/chunk-3QJO55ZF.mjs +3548 -0
  50. package/dist/chunk-3QJO55ZF.mjs.map +1 -0
  51. package/dist/chunk-3XNTL3FQ.mjs +452 -0
  52. package/dist/chunk-3XNTL3FQ.mjs.map +1 -0
  53. package/dist/chunk-44ZCFSKE.mjs +84 -0
  54. package/dist/chunk-44ZCFSKE.mjs.map +1 -0
  55. package/dist/chunk-4PTK6KT4.mjs +364 -0
  56. package/dist/chunk-4PTK6KT4.mjs.map +1 -0
  57. package/dist/chunk-4S3ORGFA.mjs +44 -0
  58. package/dist/chunk-4S3ORGFA.mjs.map +1 -0
  59. package/dist/chunk-5BY76U2M.mjs +1 -0
  60. package/dist/chunk-5BY76U2M.mjs.map +1 -0
  61. package/dist/chunk-5ZGPRGWV.mjs +136 -0
  62. package/dist/chunk-5ZGPRGWV.mjs.map +1 -0
  63. package/dist/chunk-6XDUHOEM.mjs +157 -0
  64. package/dist/chunk-6XDUHOEM.mjs.map +1 -0
  65. package/dist/chunk-74YTBPTY.mjs +450 -0
  66. package/dist/chunk-74YTBPTY.mjs.map +1 -0
  67. package/dist/chunk-7HO6AEOP.mjs +74 -0
  68. package/dist/chunk-7HO6AEOP.mjs.map +1 -0
  69. package/dist/chunk-7MABZJIM.mjs +29 -0
  70. package/dist/chunk-7MABZJIM.mjs.map +1 -0
  71. package/dist/chunk-7ZY5AIJO.mjs +161 -0
  72. package/dist/chunk-7ZY5AIJO.mjs.map +1 -0
  73. package/dist/chunk-AGS7UJ52.mjs +446 -0
  74. package/dist/chunk-AGS7UJ52.mjs.map +1 -0
  75. package/dist/chunk-AZ7YUVNR.mjs +65 -0
  76. package/dist/chunk-AZ7YUVNR.mjs.map +1 -0
  77. package/dist/chunk-B232I2GP.mjs +163 -0
  78. package/dist/chunk-B232I2GP.mjs.map +1 -0
  79. package/dist/chunk-B6N4ZB2H.mjs +718 -0
  80. package/dist/chunk-B6N4ZB2H.mjs.map +1 -0
  81. package/dist/chunk-BHG3LVHH.mjs +176 -0
  82. package/dist/chunk-BHG3LVHH.mjs.map +1 -0
  83. package/dist/chunk-C3DLZMBU.mjs +597 -0
  84. package/dist/chunk-C3DLZMBU.mjs.map +1 -0
  85. package/dist/chunk-CGILA3WO.mjs +14 -0
  86. package/dist/chunk-CGILA3WO.mjs.map +1 -0
  87. package/dist/chunk-CHFHNEMO.mjs +7088 -0
  88. package/dist/chunk-CHFHNEMO.mjs.map +1 -0
  89. package/dist/chunk-E2MPIBRE.mjs +149 -0
  90. package/dist/chunk-E2MPIBRE.mjs.map +1 -0
  91. package/dist/chunk-E6EPN5BT.mjs +203 -0
  92. package/dist/chunk-E6EPN5BT.mjs.map +1 -0
  93. package/dist/chunk-EVGBEZDF.mjs +215 -0
  94. package/dist/chunk-EVGBEZDF.mjs.map +1 -0
  95. package/dist/chunk-FQYDHKKU.mjs +128 -0
  96. package/dist/chunk-FQYDHKKU.mjs.map +1 -0
  97. package/dist/chunk-G3B5BRDY.mjs +5763 -0
  98. package/dist/chunk-G3B5BRDY.mjs.map +1 -0
  99. package/dist/chunk-GN72QAIH.mjs +146 -0
  100. package/dist/chunk-GN72QAIH.mjs.map +1 -0
  101. package/dist/chunk-GS6K5OCM.mjs +407 -0
  102. package/dist/chunk-GS6K5OCM.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-GZP5W4K3.mjs +158 -0
  106. package/dist/chunk-GZP5W4K3.mjs.map +1 -0
  107. package/dist/chunk-H2FA2SBS.mjs +51 -0
  108. package/dist/chunk-H2FA2SBS.mjs.map +1 -0
  109. package/dist/chunk-HXP3ZSPC.mjs +211 -0
  110. package/dist/chunk-HXP3ZSPC.mjs.map +1 -0
  111. package/dist/chunk-ITN462YM.mjs +98 -0
  112. package/dist/chunk-ITN462YM.mjs.map +1 -0
  113. package/dist/chunk-J23HNLFY.mjs +72 -0
  114. package/dist/chunk-J23HNLFY.mjs.map +1 -0
  115. package/dist/chunk-J4FNJ5IU.mjs +179 -0
  116. package/dist/chunk-J4FNJ5IU.mjs.map +1 -0
  117. package/dist/chunk-JK25YEN6.mjs +219 -0
  118. package/dist/chunk-JK25YEN6.mjs.map +1 -0
  119. package/dist/chunk-JLWMCADZ.mjs +204 -0
  120. package/dist/chunk-JLWMCADZ.mjs.map +1 -0
  121. package/dist/chunk-JN3UU635.mjs +622 -0
  122. package/dist/chunk-JN3UU635.mjs.map +1 -0
  123. package/dist/chunk-K4667E2Q.mjs +1916 -0
  124. package/dist/chunk-K4667E2Q.mjs.map +1 -0
  125. package/dist/chunk-LGHEOHBU.mjs +218 -0
  126. package/dist/chunk-LGHEOHBU.mjs.map +1 -0
  127. package/dist/chunk-LLC7BNXW.mjs +275 -0
  128. package/dist/chunk-LLC7BNXW.mjs.map +1 -0
  129. package/dist/chunk-LM2YNO4U.mjs +24 -0
  130. package/dist/chunk-LM2YNO4U.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-O3HADRW6.mjs +639 -0
  134. package/dist/chunk-O3HADRW6.mjs.map +1 -0
  135. package/dist/chunk-OYXO65LI.mjs +119 -0
  136. package/dist/chunk-OYXO65LI.mjs.map +1 -0
  137. package/dist/chunk-P7QDS5AT.mjs +191 -0
  138. package/dist/chunk-P7QDS5AT.mjs.map +1 -0
  139. package/dist/chunk-PRNYWD7K.mjs +599 -0
  140. package/dist/chunk-PRNYWD7K.mjs.map +1 -0
  141. package/dist/chunk-QF4PHCMA.mjs +422 -0
  142. package/dist/chunk-QF4PHCMA.mjs.map +1 -0
  143. package/dist/chunk-QFQRHRZS.mjs +1224 -0
  144. package/dist/chunk-QFQRHRZS.mjs.map +1 -0
  145. package/dist/chunk-QGOHVJ6J.mjs +63 -0
  146. package/dist/chunk-QGOHVJ6J.mjs.map +1 -0
  147. package/dist/chunk-QKVUNGAH.mjs +39 -0
  148. package/dist/chunk-QKVUNGAH.mjs.map +1 -0
  149. package/dist/chunk-QM6VV26B.mjs +149 -0
  150. package/dist/chunk-QM6VV26B.mjs.map +1 -0
  151. package/dist/chunk-RHIFZZUI.mjs +69 -0
  152. package/dist/chunk-RHIFZZUI.mjs.map +1 -0
  153. package/dist/chunk-RKI6TN3A.mjs +49 -0
  154. package/dist/chunk-RKI6TN3A.mjs.map +1 -0
  155. package/dist/chunk-RSKVYESE.mjs +187 -0
  156. package/dist/chunk-RSKVYESE.mjs.map +1 -0
  157. package/dist/chunk-S2XHZS7W.mjs +180 -0
  158. package/dist/chunk-S2XHZS7W.mjs.map +1 -0
  159. package/dist/chunk-SCFX4UTD.mjs +28 -0
  160. package/dist/chunk-SCFX4UTD.mjs.map +1 -0
  161. package/dist/chunk-SL6HTIOK.mjs +66 -0
  162. package/dist/chunk-SL6HTIOK.mjs.map +1 -0
  163. package/dist/chunk-SOU3Q3ZA.mjs +173 -0
  164. package/dist/chunk-SOU3Q3ZA.mjs.map +1 -0
  165. package/dist/chunk-SPBBQLXI.mjs +207 -0
  166. package/dist/chunk-SPBBQLXI.mjs.map +1 -0
  167. package/dist/chunk-SXZTEK3V.mjs +396 -0
  168. package/dist/chunk-SXZTEK3V.mjs.map +1 -0
  169. package/dist/chunk-T4QJQK76.mjs +459 -0
  170. package/dist/chunk-T4QJQK76.mjs.map +1 -0
  171. package/dist/chunk-TRORP7E4.mjs +41 -0
  172. package/dist/chunk-TRORP7E4.mjs.map +1 -0
  173. package/dist/chunk-TU4YJICB.mjs +728 -0
  174. package/dist/chunk-TU4YJICB.mjs.map +1 -0
  175. package/dist/chunk-TXCFGOHW.mjs +42 -0
  176. package/dist/chunk-TXCFGOHW.mjs.map +1 -0
  177. package/dist/chunk-UHE2TTLK.mjs +466 -0
  178. package/dist/chunk-UHE2TTLK.mjs.map +1 -0
  179. package/dist/chunk-UREJA4GZ.mjs +364 -0
  180. package/dist/chunk-UREJA4GZ.mjs.map +1 -0
  181. package/dist/chunk-USWZZUEH.mjs +25 -0
  182. package/dist/chunk-USWZZUEH.mjs.map +1 -0
  183. package/dist/chunk-UVCIEUJC.mjs +16 -0
  184. package/dist/chunk-UVCIEUJC.mjs.map +1 -0
  185. package/dist/chunk-V6WE6JSZ.mjs +352 -0
  186. package/dist/chunk-V6WE6JSZ.mjs.map +1 -0
  187. package/dist/chunk-V7RBCSDJ.mjs +170 -0
  188. package/dist/chunk-V7RBCSDJ.mjs.map +1 -0
  189. package/dist/chunk-VCANOYFI.mjs +588 -0
  190. package/dist/chunk-VCANOYFI.mjs.map +1 -0
  191. package/dist/chunk-WZ5QFROO.mjs +23 -0
  192. package/dist/chunk-WZ5QFROO.mjs.map +1 -0
  193. package/dist/chunk-Y2OJJD7R.mjs +543 -0
  194. package/dist/chunk-Y2OJJD7R.mjs.map +1 -0
  195. package/dist/chunk-Y7A27276.mjs +538 -0
  196. package/dist/chunk-Y7A27276.mjs.map +1 -0
  197. package/dist/chunk-YHU7SS6L.mjs +365 -0
  198. package/dist/chunk-YHU7SS6L.mjs.map +1 -0
  199. package/dist/chunk-ZBE6MLHL.mjs +230 -0
  200. package/dist/chunk-ZBE6MLHL.mjs.map +1 -0
  201. package/dist/chunk-ZJQNATYV.mjs +299 -0
  202. package/dist/chunk-ZJQNATYV.mjs.map +1 -0
  203. package/dist/client-D_yUjVhe.d.mts +402 -0
  204. package/dist/client-Dkc03WP8.d.ts +402 -0
  205. package/dist/client-cache-CIlyBlmx.d.ts +6 -0
  206. package/dist/client-cache-D-EZ7XVW.d.mts +6 -0
  207. package/dist/client-plugins-BZnpeTGA.d.ts +1848 -0
  208. package/dist/client-plugins-g4bzuCmo.d.mts +1848 -0
  209. package/dist/client-plugins.cjs +415 -0
  210. package/dist/client-plugins.cjs.map +1 -0
  211. package/dist/client-plugins.d.mts +21 -0
  212. package/dist/client-plugins.d.ts +21 -0
  213. package/dist/client-plugins.mjs +10 -0
  214. package/dist/client-plugins.mjs.map +1 -0
  215. package/dist/client.cjs +4571 -0
  216. package/dist/client.cjs.map +1 -0
  217. package/dist/client.d.mts +329 -0
  218. package/dist/client.d.ts +329 -0
  219. package/dist/client.mjs +103 -0
  220. package/dist/client.mjs.map +1 -0
  221. package/dist/config.cjs +38 -0
  222. package/dist/config.cjs.map +1 -0
  223. package/dist/config.d.mts +28 -0
  224. package/dist/config.d.ts +28 -0
  225. package/dist/config.mjs +10 -0
  226. package/dist/config.mjs.map +1 -0
  227. package/dist/cron.cjs +406 -0
  228. package/dist/cron.cjs.map +1 -0
  229. package/dist/cron.d.mts +78 -0
  230. package/dist/cron.d.ts +78 -0
  231. package/dist/cron.mjs +30 -0
  232. package/dist/cron.mjs.map +1 -0
  233. package/dist/deferred.cjs +438 -0
  234. package/dist/deferred.cjs.map +1 -0
  235. package/dist/deferred.d.mts +42 -0
  236. package/dist/deferred.d.ts +42 -0
  237. package/dist/deferred.mjs +28 -0
  238. package/dist/deferred.mjs.map +1 -0
  239. package/dist/deployment.cjs +199 -0
  240. package/dist/deployment.cjs.map +1 -0
  241. package/dist/deployment.d.mts +34 -0
  242. package/dist/deployment.d.ts +34 -0
  243. package/dist/deployment.mjs +38 -0
  244. package/dist/deployment.mjs.map +1 -0
  245. package/dist/devtools-AE4RVXCM.mjs +370 -0
  246. package/dist/devtools-AE4RVXCM.mjs.map +1 -0
  247. package/dist/devtools-client-6WPY2AQU.mjs +225 -0
  248. package/dist/devtools-client-6WPY2AQU.mjs.map +1 -0
  249. package/dist/devtools-ui-NJKFORTG.mjs +1349 -0
  250. package/dist/devtools-ui-NJKFORTG.mjs.map +1 -0
  251. package/dist/docs.cjs +5541 -0
  252. package/dist/docs.cjs.map +1 -0
  253. package/dist/docs.d.mts +69 -0
  254. package/dist/docs.d.ts +69 -0
  255. package/dist/docs.mjs +46 -0
  256. package/dist/docs.mjs.map +1 -0
  257. package/dist/env-types.cjs +223 -0
  258. package/dist/env-types.cjs.map +1 -0
  259. package/dist/env-types.d.mts +11 -0
  260. package/dist/env-types.d.ts +11 -0
  261. package/dist/env-types.mjs +9 -0
  262. package/dist/env-types.mjs.map +1 -0
  263. package/dist/env.cjs +215 -0
  264. package/dist/env.cjs.map +1 -0
  265. package/dist/env.d.mts +45 -0
  266. package/dist/env.d.ts +45 -0
  267. package/dist/env.mjs +22 -0
  268. package/dist/env.mjs.map +1 -0
  269. package/dist/environment/vite.cjs +374 -0
  270. package/dist/environment/vite.cjs.map +1 -0
  271. package/dist/environment/vite.d.mts +22 -0
  272. package/dist/environment/vite.d.ts +22 -0
  273. package/dist/environment/vite.mjs +10 -0
  274. package/dist/environment/vite.mjs.map +1 -0
  275. package/dist/environment.cjs +96 -0
  276. package/dist/environment.cjs.map +1 -0
  277. package/dist/environment.d.mts +18 -0
  278. package/dist/environment.d.ts +18 -0
  279. package/dist/environment.mjs +14 -0
  280. package/dist/environment.mjs.map +1 -0
  281. package/dist/headers.cjs +126 -0
  282. package/dist/headers.cjs.map +1 -0
  283. package/dist/headers.d.mts +22 -0
  284. package/dist/headers.d.ts +22 -0
  285. package/dist/headers.mjs +12 -0
  286. package/dist/headers.mjs.map +1 -0
  287. package/dist/i18n/client.cjs +283 -0
  288. package/dist/i18n/client.cjs.map +1 -0
  289. package/dist/i18n/client.d.mts +32 -0
  290. package/dist/i18n/client.d.ts +32 -0
  291. package/dist/i18n/client.mjs +121 -0
  292. package/dist/i18n/client.mjs.map +1 -0
  293. package/dist/i18n/index.cjs +130 -0
  294. package/dist/i18n/index.cjs.map +1 -0
  295. package/dist/i18n/index.d.mts +20 -0
  296. package/dist/i18n/index.d.ts +20 -0
  297. package/dist/i18n/index.mjs +22 -0
  298. package/dist/i18n/index.mjs.map +1 -0
  299. package/dist/i18n/server.cjs +637 -0
  300. package/dist/i18n/server.cjs.map +1 -0
  301. package/dist/i18n/server.d.mts +30 -0
  302. package/dist/i18n/server.d.ts +30 -0
  303. package/dist/i18n/server.mjs +32 -0
  304. package/dist/i18n/server.mjs.map +1 -0
  305. package/dist/image/server.cjs +477 -0
  306. package/dist/image/server.cjs.map +1 -0
  307. package/dist/image/server.d.mts +37 -0
  308. package/dist/image/server.d.ts +37 -0
  309. package/dist/image/server.mjs +16 -0
  310. package/dist/image/server.mjs.map +1 -0
  311. package/dist/image/sharp.cjs +135 -0
  312. package/dist/image/sharp.cjs.map +1 -0
  313. package/dist/image/sharp.d.mts +7 -0
  314. package/dist/image/sharp.d.ts +7 -0
  315. package/dist/image/sharp.mjs +75 -0
  316. package/dist/image/sharp.mjs.map +1 -0
  317. package/dist/image-config-Duob7wER.d.mts +50 -0
  318. package/dist/image-config-Duob7wER.d.ts +50 -0
  319. package/dist/image.cjs +209 -0
  320. package/dist/image.cjs.map +1 -0
  321. package/dist/image.d.mts +39 -0
  322. package/dist/image.d.ts +39 -0
  323. package/dist/image.mjs +165 -0
  324. package/dist/image.mjs.map +1 -0
  325. package/dist/index.cjs +39433 -0
  326. package/dist/index.cjs.map +1 -0
  327. package/dist/index.d.mts +451 -0
  328. package/dist/index.d.ts +451 -0
  329. package/dist/index.mjs +930 -0
  330. package/dist/index.mjs.map +1 -0
  331. package/dist/integration-api-CHT2OKAf.d.mts +93 -0
  332. package/dist/integration-api-CHT2OKAf.d.ts +93 -0
  333. package/dist/integration-orm-GQLGU66X.mjs +13 -0
  334. package/dist/integration-orm-GQLGU66X.mjs.map +1 -0
  335. package/dist/integrations.cjs +2820 -0
  336. package/dist/integrations.cjs.map +1 -0
  337. package/dist/integrations.d.mts +21 -0
  338. package/dist/integrations.d.ts +21 -0
  339. package/dist/integrations.mjs +51 -0
  340. package/dist/integrations.mjs.map +1 -0
  341. package/dist/internal/build-runtime.cjs +31340 -0
  342. package/dist/internal/build-runtime.cjs.map +1 -0
  343. package/dist/internal/build-runtime.d.mts +38 -0
  344. package/dist/internal/build-runtime.d.ts +38 -0
  345. package/dist/internal/build-runtime.mjs +73 -0
  346. package/dist/internal/build-runtime.mjs.map +1 -0
  347. package/dist/internal/client-runtime.cjs +579 -0
  348. package/dist/internal/client-runtime.cjs.map +1 -0
  349. package/dist/internal/client-runtime.d.mts +2 -0
  350. package/dist/internal/client-runtime.d.ts +2 -0
  351. package/dist/internal/client-runtime.mjs +12 -0
  352. package/dist/internal/client-runtime.mjs.map +1 -0
  353. package/dist/internal/config-runtime.cjs +4172 -0
  354. package/dist/internal/config-runtime.cjs.map +1 -0
  355. package/dist/internal/config-runtime.d.mts +38 -0
  356. package/dist/internal/config-runtime.d.ts +38 -0
  357. package/dist/internal/config-runtime.mjs +38 -0
  358. package/dist/internal/config-runtime.mjs.map +1 -0
  359. package/dist/internal/production-node-env.cjs +65 -0
  360. package/dist/internal/production-node-env.cjs.map +1 -0
  361. package/dist/internal/production-node-env.d.mts +12 -0
  362. package/dist/internal/production-node-env.d.ts +12 -0
  363. package/dist/internal/production-node-env.mjs +8 -0
  364. package/dist/internal/production-node-env.mjs.map +1 -0
  365. package/dist/internal/production-runtime.cjs +1896 -0
  366. package/dist/internal/production-runtime.cjs.map +1 -0
  367. package/dist/internal/production-runtime.d.mts +39 -0
  368. package/dist/internal/production-runtime.d.ts +39 -0
  369. package/dist/internal/production-runtime.mjs +79 -0
  370. package/dist/internal/production-runtime.mjs.map +1 -0
  371. package/dist/layers-VWVDTPUZ.mjs +16 -0
  372. package/dist/layers-VWVDTPUZ.mjs.map +1 -0
  373. package/dist/manager-THKFTOFE.mjs +10 -0
  374. package/dist/manager-THKFTOFE.mjs.map +1 -0
  375. package/dist/markdown.cjs +299 -0
  376. package/dist/markdown.cjs.map +1 -0
  377. package/dist/markdown.d.mts +43 -0
  378. package/dist/markdown.d.ts +43 -0
  379. package/dist/markdown.mjs +14 -0
  380. package/dist/markdown.mjs.map +1 -0
  381. package/dist/metadata-C9NZxMDW.d.mts +22 -0
  382. package/dist/metadata-DAXRaOHx.d.ts +22 -0
  383. package/dist/middleware.cjs +2148 -0
  384. package/dist/middleware.cjs.map +1 -0
  385. package/dist/middleware.d.mts +163 -0
  386. package/dist/middleware.d.ts +163 -0
  387. package/dist/middleware.mjs +49 -0
  388. package/dist/middleware.mjs.map +1 -0
  389. package/dist/navigation-errors-Dvwpzaer.d.mts +13 -0
  390. package/dist/navigation-errors-Dvwpzaer.d.ts +13 -0
  391. package/dist/navigation.cjs +1304 -0
  392. package/dist/navigation.cjs.map +1 -0
  393. package/dist/navigation.d.mts +14 -0
  394. package/dist/navigation.d.ts +14 -0
  395. package/dist/navigation.mjs +33 -0
  396. package/dist/navigation.mjs.map +1 -0
  397. package/dist/nitro-KME62MWG.mjs +691 -0
  398. package/dist/nitro-KME62MWG.mjs.map +1 -0
  399. package/dist/observability.cjs +186 -0
  400. package/dist/observability.cjs.map +1 -0
  401. package/dist/observability.d.mts +335 -0
  402. package/dist/observability.d.ts +335 -0
  403. package/dist/observability.mjs +16 -0
  404. package/dist/observability.mjs.map +1 -0
  405. package/dist/params-BALtrRim.d.ts +15 -0
  406. package/dist/params-ry-lxqmy.d.mts +15 -0
  407. package/dist/plugin-BJDf43dc.d.mts +165 -0
  408. package/dist/plugin-BJDf43dc.d.ts +165 -0
  409. package/dist/plugin.cjs +22285 -0
  410. package/dist/plugin.cjs.map +1 -0
  411. package/dist/plugin.d.mts +21 -0
  412. package/dist/plugin.d.ts +21 -0
  413. package/dist/plugin.mjs +60 -0
  414. package/dist/plugin.mjs.map +1 -0
  415. package/dist/production-runtime-C_B79w2P.d.mts +28 -0
  416. package/dist/production-runtime-DDEM1D2q.d.ts +28 -0
  417. package/dist/production-runtime-DRkCHUvJ.d.ts +79 -0
  418. package/dist/production-runtime-flrjp_nC.d.mts +79 -0
  419. package/dist/query/client.cjs +560 -0
  420. package/dist/query/client.cjs.map +1 -0
  421. package/dist/query/client.d.mts +61 -0
  422. package/dist/query/client.d.ts +61 -0
  423. package/dist/query/client.mjs +364 -0
  424. package/dist/query/client.mjs.map +1 -0
  425. package/dist/query/index.cjs +226 -0
  426. package/dist/query/index.cjs.map +1 -0
  427. package/dist/query/index.d.mts +90 -0
  428. package/dist/query/index.d.ts +90 -0
  429. package/dist/query/index.mjs +31 -0
  430. package/dist/query/index.mjs.map +1 -0
  431. package/dist/query/parsers.cjs +178 -0
  432. package/dist/query/parsers.cjs.map +1 -0
  433. package/dist/query/parsers.d.mts +25 -0
  434. package/dist/query/parsers.d.ts +25 -0
  435. package/dist/query/parsers.mjs +24 -0
  436. package/dist/query/parsers.mjs.map +1 -0
  437. package/dist/query/server.cjs +301 -0
  438. package/dist/query/server.cjs.map +1 -0
  439. package/dist/query/server.d.mts +55 -0
  440. package/dist/query/server.d.ts +55 -0
  441. package/dist/query/server.mjs +105 -0
  442. package/dist/query/server.mjs.map +1 -0
  443. package/dist/request-BrFBuc8G.d.mts +6 -0
  444. package/dist/request-BslSZIRz.d.ts +6 -0
  445. package/dist/request.cjs +71 -0
  446. package/dist/request.cjs.map +1 -0
  447. package/dist/request.d.mts +2 -0
  448. package/dist/request.d.ts +2 -0
  449. package/dist/request.mjs +9 -0
  450. package/dist/request.mjs.map +1 -0
  451. package/dist/resolver-C6iecsDV.d.ts +14 -0
  452. package/dist/resolver-DlOPpjkB.d.mts +14 -0
  453. package/dist/route-runtime-DoOHzCAD.d.mts +38 -0
  454. package/dist/route-runtime-DoOHzCAD.d.ts +38 -0
  455. package/dist/router.cjs +254 -0
  456. package/dist/router.cjs.map +1 -0
  457. package/dist/router.d.mts +36 -0
  458. package/dist/router.d.ts +36 -0
  459. package/dist/router.mjs +14 -0
  460. package/dist/router.mjs.map +1 -0
  461. package/dist/routes.cjs +1213 -0
  462. package/dist/routes.cjs.map +1 -0
  463. package/dist/routes.d.mts +224 -0
  464. package/dist/routes.d.ts +224 -0
  465. package/dist/routes.mjs +52 -0
  466. package/dist/routes.mjs.map +1 -0
  467. package/dist/runtime-B6GvwDS1.d.ts +27 -0
  468. package/dist/runtime-DeAAZ6gO.d.mts +27 -0
  469. package/dist/search-client-6OXIBNYQ.mjs +14 -0
  470. package/dist/search-client-6OXIBNYQ.mjs.map +1 -0
  471. package/dist/server-action-security.cjs +492 -0
  472. package/dist/server-action-security.cjs.map +1 -0
  473. package/dist/server-action-security.d.mts +42 -0
  474. package/dist/server-action-security.d.ts +42 -0
  475. package/dist/server-action-security.mjs +29 -0
  476. package/dist/server-action-security.mjs.map +1 -0
  477. package/dist/server-fn-client.cjs +180 -0
  478. package/dist/server-fn-client.cjs.map +1 -0
  479. package/dist/server-fn-client.d.mts +31 -0
  480. package/dist/server-fn-client.d.ts +31 -0
  481. package/dist/server-fn-client.mjs +9 -0
  482. package/dist/server-fn-client.mjs.map +1 -0
  483. package/dist/server-fn.cjs +284 -0
  484. package/dist/server-fn.cjs.map +1 -0
  485. package/dist/server-fn.d.mts +84 -0
  486. package/dist/server-fn.d.ts +84 -0
  487. package/dist/server-fn.mjs +17 -0
  488. package/dist/server-fn.mjs.map +1 -0
  489. package/dist/server-plugins.cjs +235 -0
  490. package/dist/server-plugins.cjs.map +1 -0
  491. package/dist/server-plugins.d.mts +54 -0
  492. package/dist/server-plugins.d.ts +54 -0
  493. package/dist/server-plugins.mjs +18 -0
  494. package/dist/server-plugins.mjs.map +1 -0
  495. package/dist/server-query-client.cjs +792 -0
  496. package/dist/server-query-client.cjs.map +1 -0
  497. package/dist/server-query-client.d.mts +50 -0
  498. package/dist/server-query-client.d.ts +50 -0
  499. package/dist/server-query-client.mjs +23 -0
  500. package/dist/server-query-client.mjs.map +1 -0
  501. package/dist/server-query.cjs +804 -0
  502. package/dist/server-query.cjs.map +1 -0
  503. package/dist/server-query.d.mts +36 -0
  504. package/dist/server-query.d.ts +36 -0
  505. package/dist/server-query.mjs +18 -0
  506. package/dist/server-query.mjs.map +1 -0
  507. package/dist/server.cjs +25739 -0
  508. package/dist/server.cjs.map +1 -0
  509. package/dist/server.d.mts +47 -0
  510. package/dist/server.d.ts +47 -0
  511. package/dist/server.mjs +511 -0
  512. package/dist/server.mjs.map +1 -0
  513. package/dist/storage.cjs +515 -0
  514. package/dist/storage.cjs.map +1 -0
  515. package/dist/storage.d.mts +52 -0
  516. package/dist/storage.d.ts +52 -0
  517. package/dist/storage.mjs +58 -0
  518. package/dist/storage.mjs.map +1 -0
  519. package/dist/testing.cjs +1882 -0
  520. package/dist/testing.cjs.map +1 -0
  521. package/dist/testing.d.mts +100 -0
  522. package/dist/testing.d.ts +100 -0
  523. package/dist/testing.mjs +324 -0
  524. package/dist/testing.mjs.map +1 -0
  525. package/dist/types-BH1lhg5G.d.mts +81 -0
  526. package/dist/types-BH1lhg5G.d.ts +81 -0
  527. package/dist/types-C9N-nk5R.d.mts +53 -0
  528. package/dist/types-C9N-nk5R.d.ts +53 -0
  529. package/dist/types-D1A6-XvH.d.mts +73 -0
  530. package/dist/types-D1A6-XvH.d.ts +73 -0
  531. package/dist/utils-DA1yo54_.d.ts +23 -0
  532. package/dist/utils-DOXXivjL.d.mts +23 -0
  533. package/dist/vite.cjs +22684 -0
  534. package/dist/vite.cjs.map +1 -0
  535. package/dist/vite.d.mts +21 -0
  536. package/dist/vite.d.ts +21 -0
  537. package/dist/vite.mjs +59 -0
  538. package/dist/vite.mjs.map +1 -0
  539. package/dist/workflows.cjs +586 -0
  540. package/dist/workflows.cjs.map +1 -0
  541. package/dist/workflows.d.mts +110 -0
  542. package/dist/workflows.d.ts +110 -0
  543. package/dist/workflows.mjs +32 -0
  544. package/dist/workflows.mjs.map +1 -0
  545. package/package.json +523 -0
  546. package/types/api.d.ts +88 -0
  547. package/types/client.d.ts +1171 -0
  548. package/types/index.d.ts +17 -0
  549. package/types/middleware.d.ts +266 -0
@@ -0,0 +1,365 @@
1
+ import {
2
+ _runWithFarmI18nRequest
3
+ } from "./chunk-QF4PHCMA.mjs";
4
+ import {
5
+ logger
6
+ } from "./chunk-J4FNJ5IU.mjs";
7
+ import {
8
+ invokeAPIRouteEndpoint,
9
+ matchAPIRoute
10
+ } from "./chunk-EVGBEZDF.mjs";
11
+ import {
12
+ PROGRAMMATIC_ROUTE_FILE_NAMES,
13
+ createProgrammaticRouteModuleId,
14
+ getProgrammaticRouteManifest,
15
+ scanProgrammaticPagePaths
16
+ } from "./chunk-B6N4ZB2H.mjs";
17
+ import {
18
+ getFarmRouteRuntimeConfig,
19
+ normalizeFarmRouteRuntimeConfig
20
+ } from "./chunk-QM6VV26B.mjs";
21
+ import {
22
+ __name
23
+ } from "./chunk-CGILA3WO.mjs";
24
+
25
+ // src/api/route-manager.ts
26
+ import * as fs from "fs";
27
+ import * as path from "path";
28
+
29
+ // src/routes.server.ts
30
+ import { existsSync, readFileSync } from "fs";
31
+ import { join } from "path";
32
+ async function loadProgrammaticRouteManifests(options) {
33
+ const manifests = [];
34
+ for (const filePath of findProgrammaticRouteFiles(options.root, options.srcDir)) {
35
+ const mod = await options.loadModule(filePath);
36
+ const manifest = getProgrammaticRouteManifest(mod);
37
+ if (manifest) {
38
+ manifests.push({ filePath, manifest });
39
+ }
40
+ }
41
+ return manifests;
42
+ }
43
+ __name(loadProgrammaticRouteManifests, "loadProgrammaticRouteManifests");
44
+ function findProgrammaticRouteFiles(root, srcDir = "src") {
45
+ return findProgrammaticRouteFilesInDir(join(root, srcDir));
46
+ }
47
+ __name(findProgrammaticRouteFiles, "findProgrammaticRouteFiles");
48
+ function findProgrammaticRouteFilesInDir(srcRoot) {
49
+ const files = [];
50
+ for (const fileName of PROGRAMMATIC_ROUTE_FILE_NAMES) {
51
+ const filePath = join(srcRoot, fileName);
52
+ if (existsSync(filePath)) {
53
+ files.push(filePath);
54
+ }
55
+ }
56
+ return files;
57
+ }
58
+ __name(findProgrammaticRouteFilesInDir, "findProgrammaticRouteFilesInDir");
59
+ async function discoverProgrammaticRoutePaths(root, srcDir = "src") {
60
+ const paths = /* @__PURE__ */ new Set();
61
+ const files = /* @__PURE__ */ new Set([
62
+ ...findProgrammaticRouteFiles(root, srcDir),
63
+ ...await findProgrammaticRouteSourceFiles(join(root, srcDir))
64
+ ]);
65
+ for (const filePath of files) {
66
+ const source = readFileSync(filePath, "utf8");
67
+ for (const routePath of scanProgrammaticPagePaths(source)) {
68
+ paths.add(routePath);
69
+ }
70
+ }
71
+ return Array.from(paths).sort();
72
+ }
73
+ __name(discoverProgrammaticRoutePaths, "discoverProgrammaticRoutePaths");
74
+ async function findProgrammaticRouteSourceFiles(srcRoot) {
75
+ if (!existsSync(srcRoot)) {
76
+ return [];
77
+ }
78
+ try {
79
+ const glob = await import("fast-glob");
80
+ return await glob.default("**/*.{ts,tsx,js,jsx}", {
81
+ cwd: srcRoot,
82
+ absolute: true,
83
+ ignore: [
84
+ "**/*.d.ts",
85
+ "**/node_modules/**",
86
+ "**/.*/**",
87
+ "farm-routes.d.ts",
88
+ "farm-env.d.ts",
89
+ "lib/api.generated.ts"
90
+ ]
91
+ });
92
+ } catch {
93
+ return [];
94
+ }
95
+ }
96
+ __name(findProgrammaticRouteSourceFiles, "findProgrammaticRouteSourceFiles");
97
+
98
+ // src/api/route-manager.ts
99
+ var API_ROUTE_METHODS = [
100
+ "GET",
101
+ "HEAD",
102
+ "POST",
103
+ "PUT",
104
+ "DELETE",
105
+ "PATCH",
106
+ "OPTIONS"
107
+ ];
108
+ var _APIRouteManager = class _APIRouteManager {
109
+ constructor(appDir, viteServer, options = {}) {
110
+ this.routes = /* @__PURE__ */ new Map();
111
+ this.appDirs = Array.isArray(appDir) ? [...appDir] : [appDir];
112
+ this.viteServer = viteServer;
113
+ this.throwOnLoadError = options.throwOnLoadError === true;
114
+ this.i18n = options.i18n;
115
+ }
116
+ /**
117
+ * Discover route.ts files in /app/api and explicit endpoints in root routes.ts
118
+ */
119
+ async discoverRoutes() {
120
+ this.routes.clear();
121
+ for (const appDir of this.appDirs) {
122
+ const apiDir = path.join(appDir, "api");
123
+ let routeFiles = [];
124
+ if (fs.existsSync(apiDir)) {
125
+ routeFiles = this.findRouteFiles(apiDir);
126
+ }
127
+ for (const filePath of routeFiles) {
128
+ await this.loadRoute(filePath, appDir);
129
+ }
130
+ await this.loadRootRoutes(appDir);
131
+ await this.loadProgrammaticApiRoutes(appDir);
132
+ }
133
+ if (process.env.FARM_VERBOSE) {
134
+ logger.success(`Discovered ${this.routes.size} API routes`);
135
+ for (const [routePath, route] of this.routes) {
136
+ logger.info(` ${route.methods.join(", ")} ${routePath}`);
137
+ }
138
+ }
139
+ }
140
+ /**
141
+ * Recursively find all route.ts files
142
+ */
143
+ findRouteFiles(dir) {
144
+ const files = [];
145
+ if (!fs.existsSync(dir)) {
146
+ return files;
147
+ }
148
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
149
+ for (const entry of entries) {
150
+ const fullPath = path.join(dir, entry.name);
151
+ if (entry.isDirectory()) {
152
+ files.push(...this.findRouteFiles(fullPath));
153
+ } else if (entry.name === "route.ts" || entry.name === "route.tsx" || entry.name === "route.js") {
154
+ files.push(fullPath);
155
+ }
156
+ }
157
+ return files;
158
+ }
159
+ /**
160
+ * Load a route.ts file and extract HTTP method exports
161
+ */
162
+ async loadRoute(filePath, appDir) {
163
+ try {
164
+ const apiDir = path.join(appDir, "api");
165
+ const relativePath = path.relative(apiDir, path.dirname(filePath));
166
+ const routePath = "/api/" + (relativePath === "." ? "" : relativePath.replace(/\\/g, "/"));
167
+ const routeModule = await this.loadModule(filePath);
168
+ const endpoints = {};
169
+ const availableMethods = [];
170
+ for (const method of API_ROUTE_METHODS) {
171
+ if (routeModule[method]) {
172
+ endpoints[method] = routeModule[method];
173
+ availableMethods.push(method);
174
+ }
175
+ }
176
+ if (availableMethods.length > 0) {
177
+ const runtimeConfig = normalizeFarmRouteRuntimeConfig(
178
+ getFarmRouteRuntimeConfig(routeModule),
179
+ `API route "${routePath}"`
180
+ );
181
+ this.routes.set(routePath, {
182
+ path: routePath,
183
+ filePath,
184
+ methods: availableMethods,
185
+ endpoints,
186
+ ...runtimeConfig
187
+ });
188
+ }
189
+ } catch (error) {
190
+ this.handleLoadError(`Error loading route ${filePath}`, error);
191
+ }
192
+ }
193
+ /**
194
+ * Load explicit-path endpoints from src/routes.ts-style files.
195
+ */
196
+ async loadRootRoutes(appDir) {
197
+ const routesFile = this.findRootRoutesFile(appDir);
198
+ if (!routesFile) {
199
+ return;
200
+ }
201
+ try {
202
+ const routesModule = await this.loadModule(routesFile);
203
+ for (const exportValue of Object.values(routesModule)) {
204
+ const endpoint = exportValue;
205
+ if (!endpoint?.__path) {
206
+ continue;
207
+ }
208
+ const method = String(endpoint.__method || "GET").toUpperCase();
209
+ this.addEndpoint(endpoint.__path, routesFile, method, endpoint);
210
+ }
211
+ } catch (error) {
212
+ this.handleLoadError(`Error loading root API routes ${routesFile}`, error);
213
+ }
214
+ }
215
+ async loadProgrammaticApiRoutes(appDir) {
216
+ const candidateRoots = [path.dirname(appDir), appDir];
217
+ const routeFiles = Array.from(
218
+ new Set(candidateRoots.flatMap((srcRoot) => findProgrammaticRouteFilesInDir(srcRoot)))
219
+ );
220
+ for (const routeFile of routeFiles) {
221
+ try {
222
+ const routesModule = await this.loadModule(routeFile);
223
+ const manifest = getProgrammaticRouteManifest(routesModule);
224
+ if (!manifest) continue;
225
+ for (const definition of manifest.routes) {
226
+ if (definition.kind !== "api") continue;
227
+ this.addProgrammaticApiRoute(routeFile, definition);
228
+ }
229
+ } catch (error) {
230
+ this.handleLoadError(`Error loading programmatic API routes ${routeFile}`, error);
231
+ }
232
+ }
233
+ }
234
+ handleLoadError(message, error) {
235
+ logger.error(`${message}: ${error}`);
236
+ if (this.throwOnLoadError) {
237
+ throw error;
238
+ }
239
+ }
240
+ findRootRoutesFile(appDir) {
241
+ const routeNames = ["routes.ts", "routes.tsx", "routes.js"];
242
+ const candidateDirs = [path.dirname(appDir), appDir];
243
+ const seen = /* @__PURE__ */ new Set();
244
+ for (const dir of candidateDirs) {
245
+ for (const routeName of routeNames) {
246
+ const routesFile = path.join(dir, routeName);
247
+ if (seen.has(routesFile)) {
248
+ continue;
249
+ }
250
+ seen.add(routesFile);
251
+ if (fs.existsSync(routesFile)) {
252
+ return routesFile;
253
+ }
254
+ }
255
+ }
256
+ return null;
257
+ }
258
+ async loadModule(filePath) {
259
+ if (this.viteServer) {
260
+ return await this.viteServer.ssrLoadModule(filePath);
261
+ }
262
+ const fileUrl = `file://${filePath}`;
263
+ return await import(
264
+ /* @vite-ignore */
265
+ fileUrl
266
+ );
267
+ }
268
+ addEndpoint(routePath, filePath, method, endpoint, runtimeConfig = {}) {
269
+ const normalizedMethod = method.toUpperCase();
270
+ const existingRoute = this.routes.get(routePath);
271
+ if (existingRoute) {
272
+ if (!existingRoute.methods.includes(normalizedMethod)) {
273
+ existingRoute.methods.push(normalizedMethod);
274
+ }
275
+ existingRoute.endpoints[normalizedMethod] = endpoint;
276
+ Object.assign(existingRoute, runtimeConfig);
277
+ return;
278
+ }
279
+ this.routes.set(routePath, {
280
+ path: routePath,
281
+ filePath,
282
+ methods: [normalizedMethod],
283
+ endpoints: { [normalizedMethod]: endpoint },
284
+ ...runtimeConfig
285
+ });
286
+ }
287
+ addProgrammaticApiRoute(filePath, route) {
288
+ const modulePath = createProgrammaticRouteModuleId(filePath, "api", route.path);
289
+ const runtimeConfig = normalizeFarmRouteRuntimeConfig(route, `API route "${route.path}"`);
290
+ for (const [method, endpoint] of Object.entries(route.methods)) {
291
+ if (endpoint) {
292
+ this.addEndpoint(route.path, modulePath, method, endpoint, runtimeConfig);
293
+ }
294
+ }
295
+ }
296
+ /**
297
+ * Get the handler that directly invokes endpoint handlers
298
+ */
299
+ getHandler() {
300
+ if (this.routes.size === 0) {
301
+ return null;
302
+ }
303
+ return async (request) => {
304
+ const url = new URL(request.url);
305
+ const pathname = url.pathname;
306
+ const method = request.method.toUpperCase();
307
+ const match = matchAPIRoute(this.routes, pathname);
308
+ if (!match) {
309
+ return new Response(JSON.stringify({ error: "Not Found" }), {
310
+ status: 404,
311
+ headers: { "Content-Type": "application/json" }
312
+ });
313
+ }
314
+ const { route, params } = match;
315
+ const endpoint = route.endpoints[method];
316
+ if (!endpoint) {
317
+ return new Response(JSON.stringify({ error: "Method Not Allowed" }), {
318
+ status: 405,
319
+ headers: { "Content-Type": "application/json" }
320
+ });
321
+ }
322
+ const invoke = /* @__PURE__ */ __name(async () => {
323
+ try {
324
+ return await invokeAPIRouteEndpoint(endpoint, request, params);
325
+ } catch (error) {
326
+ console.error(`[API Error] ${pathname}:`, error);
327
+ return new Response(JSON.stringify({ error: "Internal Server Error" }), {
328
+ status: 500,
329
+ headers: { "Content-Type": "application/json" }
330
+ });
331
+ }
332
+ }, "invoke");
333
+ return this.i18n?.config.enabled ? _runWithFarmI18nRequest(this.i18n, request, invoke, {
334
+ redirect: false
335
+ }) : invoke();
336
+ };
337
+ }
338
+ /**
339
+ * Check if a path is an API route
340
+ */
341
+ isAPIRoute(pathname) {
342
+ return Boolean(this.matchRoute(pathname));
343
+ }
344
+ matchRoute(pathname) {
345
+ return matchAPIRoute(this.routes, pathname);
346
+ }
347
+ /**
348
+ * Get all routes for client type generation
349
+ */
350
+ getRoutes() {
351
+ return this.routes;
352
+ }
353
+ };
354
+ __name(_APIRouteManager, "APIRouteManager");
355
+ var APIRouteManager = _APIRouteManager;
356
+
357
+ export {
358
+ loadProgrammaticRouteManifests,
359
+ findProgrammaticRouteFiles,
360
+ findProgrammaticRouteFilesInDir,
361
+ discoverProgrammaticRoutePaths,
362
+ API_ROUTE_METHODS,
363
+ APIRouteManager
364
+ };
365
+ //# sourceMappingURL=chunk-YHU7SS6L.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/route-manager.ts","../src/routes.server.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ViteDevServer } from \"vite\";\nimport { logger } from \"../utils\";\nimport {\n createProgrammaticRouteModuleId,\n getProgrammaticRouteManifest,\n type ProgrammaticApiRoute,\n} from \"../routes\";\nimport { findProgrammaticRouteFilesInDir } from \"../routes.server\";\nimport {\n getFarmRouteRuntimeConfig,\n normalizeFarmRouteRuntimeConfig,\n type FarmRouteRuntimeConfig,\n} from \"../route-runtime\";\nimport { _runWithFarmI18nRequest, type FarmI18nRuntime } from \"../i18n/server\";\nimport { invokeAPIRouteEndpoint, matchAPIRoute, type APIRouteMatch } from \"./runtime\";\n\nexport interface APIRoute extends FarmRouteRuntimeConfig {\n path: string;\n filePath: string;\n methods: string[];\n endpoints: Record<string, any>;\n}\n\nexport interface APIRouteManagerOptions {\n throwOnLoadError?: boolean;\n i18n?: FarmI18nRuntime;\n}\n\nexport const API_ROUTE_METHODS = [\n \"GET\",\n \"HEAD\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"PATCH\",\n \"OPTIONS\",\n] as const;\n\nexport class APIRouteManager {\n private routes: Map<string, APIRoute> = new Map();\n private viteServer?: ViteDevServer;\n private appDirs: string[];\n private throwOnLoadError: boolean;\n private i18n?: FarmI18nRuntime;\n\n constructor(\n appDir: string | readonly string[],\n viteServer?: ViteDevServer,\n options: APIRouteManagerOptions = {},\n ) {\n this.appDirs = Array.isArray(appDir) ? [...appDir] : [appDir as string];\n this.viteServer = viteServer;\n this.throwOnLoadError = options.throwOnLoadError === true;\n this.i18n = options.i18n;\n }\n\n /**\n * Discover route.ts files in /app/api and explicit endpoints in root routes.ts\n */\n async discoverRoutes(): Promise<void> {\n this.routes.clear();\n\n for (const appDir of this.appDirs) {\n const apiDir = path.join(appDir, \"api\");\n let routeFiles: string[] = [];\n\n if (fs.existsSync(apiDir)) {\n routeFiles = this.findRouteFiles(apiDir);\n }\n\n for (const filePath of routeFiles) {\n await this.loadRoute(filePath, appDir);\n }\n\n await this.loadRootRoutes(appDir);\n await this.loadProgrammaticApiRoutes(appDir);\n }\n\n if (process.env.FARM_VERBOSE) {\n logger.success(`Discovered ${this.routes.size} API routes`);\n for (const [routePath, route] of this.routes) {\n logger.info(` ${route.methods.join(\", \")} ${routePath}`);\n }\n }\n }\n\n /**\n * Recursively find all route.ts files\n */\n private findRouteFiles(dir: string): string[] {\n const files: string[] = [];\n\n if (!fs.existsSync(dir)) {\n return files;\n }\n\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isDirectory()) {\n files.push(...this.findRouteFiles(fullPath));\n } else if (\n entry.name === \"route.ts\" ||\n entry.name === \"route.tsx\" ||\n entry.name === \"route.js\"\n ) {\n files.push(fullPath);\n }\n }\n\n return files;\n }\n\n /**\n * Load a route.ts file and extract HTTP method exports\n */\n private async loadRoute(filePath: string, appDir: string): Promise<void> {\n try {\n // Convert file path to API route path\n // /app/api/auth/login/route.ts -> /api/auth/login\n const apiDir = path.join(appDir, \"api\");\n const relativePath = path.relative(apiDir, path.dirname(filePath));\n const routePath = \"/api/\" + (relativePath === \".\" ? \"\" : relativePath.replace(/\\\\/g, \"/\"));\n\n const routeModule = await this.loadModule(filePath);\n\n const endpoints: Record<string, any> = {};\n const availableMethods: string[] = [];\n\n for (const method of API_ROUTE_METHODS) {\n if (routeModule[method]) {\n endpoints[method] = routeModule[method];\n availableMethods.push(method);\n }\n }\n\n if (availableMethods.length > 0) {\n const runtimeConfig = normalizeFarmRouteRuntimeConfig(\n getFarmRouteRuntimeConfig(routeModule),\n `API route \"${routePath}\"`,\n );\n this.routes.set(routePath, {\n path: routePath,\n filePath,\n methods: availableMethods,\n endpoints,\n ...runtimeConfig,\n });\n }\n } catch (error) {\n this.handleLoadError(`Error loading route ${filePath}`, error);\n }\n }\n\n /**\n * Load explicit-path endpoints from src/routes.ts-style files.\n */\n private async loadRootRoutes(appDir: string): Promise<void> {\n const routesFile = this.findRootRoutesFile(appDir);\n if (!routesFile) {\n return;\n }\n\n try {\n const routesModule = await this.loadModule(routesFile);\n\n for (const exportValue of Object.values(routesModule)) {\n const endpoint = exportValue as any;\n if (!endpoint?.__path) {\n continue;\n }\n\n const method = String(endpoint.__method || \"GET\").toUpperCase();\n this.addEndpoint(endpoint.__path, routesFile, method, endpoint);\n }\n } catch (error) {\n this.handleLoadError(`Error loading root API routes ${routesFile}`, error);\n }\n }\n\n private async loadProgrammaticApiRoutes(appDir: string): Promise<void> {\n const candidateRoots = [path.dirname(appDir), appDir];\n const routeFiles = Array.from(\n new Set(candidateRoots.flatMap((srcRoot) => findProgrammaticRouteFilesInDir(srcRoot))),\n );\n\n for (const routeFile of routeFiles) {\n try {\n const routesModule = await this.loadModule(routeFile);\n const manifest = getProgrammaticRouteManifest(routesModule);\n if (!manifest) continue;\n\n for (const definition of manifest.routes) {\n if (definition.kind !== \"api\") continue;\n this.addProgrammaticApiRoute(routeFile, definition);\n }\n } catch (error) {\n this.handleLoadError(`Error loading programmatic API routes ${routeFile}`, error);\n }\n }\n }\n\n private handleLoadError(message: string, error: unknown): void {\n logger.error(`${message}: ${error}`);\n if (this.throwOnLoadError) {\n throw error;\n }\n }\n\n private findRootRoutesFile(appDir: string): string | null {\n const routeNames = [\"routes.ts\", \"routes.tsx\", \"routes.js\"];\n const candidateDirs = [path.dirname(appDir), appDir];\n const seen = new Set<string>();\n\n for (const dir of candidateDirs) {\n for (const routeName of routeNames) {\n const routesFile = path.join(dir, routeName);\n if (seen.has(routesFile)) {\n continue;\n }\n seen.add(routesFile);\n\n if (fs.existsSync(routesFile)) {\n return routesFile;\n }\n }\n }\n\n return null;\n }\n\n private async loadModule(filePath: string): Promise<Record<string, unknown>> {\n if (this.viteServer) {\n return await this.viteServer.ssrLoadModule(filePath);\n }\n\n const fileUrl = `file://${filePath}`;\n return await import(/* @vite-ignore */ fileUrl);\n }\n\n private addEndpoint(\n routePath: string,\n filePath: string,\n method: string,\n endpoint: any,\n runtimeConfig: FarmRouteRuntimeConfig = {},\n ): void {\n const normalizedMethod = method.toUpperCase();\n const existingRoute = this.routes.get(routePath);\n\n if (existingRoute) {\n if (!existingRoute.methods.includes(normalizedMethod)) {\n existingRoute.methods.push(normalizedMethod);\n }\n existingRoute.endpoints[normalizedMethod] = endpoint;\n Object.assign(existingRoute, runtimeConfig);\n return;\n }\n\n this.routes.set(routePath, {\n path: routePath,\n filePath,\n methods: [normalizedMethod],\n endpoints: { [normalizedMethod]: endpoint },\n ...runtimeConfig,\n });\n }\n\n private addProgrammaticApiRoute(filePath: string, route: ProgrammaticApiRoute): void {\n const modulePath = createProgrammaticRouteModuleId(filePath, \"api\", route.path);\n const runtimeConfig = normalizeFarmRouteRuntimeConfig(route, `API route \"${route.path}\"`);\n for (const [method, endpoint] of Object.entries(route.methods)) {\n if (endpoint) {\n this.addEndpoint(route.path, modulePath, method, endpoint, runtimeConfig);\n }\n }\n }\n\n /**\n * Get the handler that directly invokes endpoint handlers\n */\n getHandler(): ((req: Request) => Promise<Response>) | null {\n if (this.routes.size === 0) {\n return null;\n }\n\n return async (request: Request): Promise<Response> => {\n const url = new URL(request.url);\n const pathname = url.pathname;\n const method = request.method.toUpperCase();\n\n // Find matching route\n const match = matchAPIRoute(this.routes, pathname);\n if (!match) {\n return new Response(JSON.stringify({ error: \"Not Found\" }), {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n // Check if method is supported\n const { route, params } = match;\n const endpoint = route.endpoints[method];\n if (!endpoint) {\n return new Response(JSON.stringify({ error: \"Method Not Allowed\" }), {\n status: 405,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n const invoke = async () => {\n try {\n return await invokeAPIRouteEndpoint(endpoint, request, params);\n } catch (error: any) {\n console.error(`[API Error] ${pathname}:`, error);\n return new Response(JSON.stringify({ error: \"Internal Server Error\" }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n };\n\n return this.i18n?.config.enabled\n ? _runWithFarmI18nRequest(this.i18n, request, invoke, {\n redirect: false,\n })\n : invoke();\n };\n }\n\n /**\n * Check if a path is an API route\n */\n isAPIRoute(pathname: string): boolean {\n return Boolean(this.matchRoute(pathname));\n }\n\n matchRoute(pathname: string): APIRouteMatch<APIRoute> | null {\n return matchAPIRoute(this.routes, pathname);\n }\n\n /**\n * Get all routes for client type generation\n */\n getRoutes(): Map<string, APIRoute> {\n return this.routes;\n }\n}\n\nexport {\n invokeAPIRouteEndpoint,\n isWebResponse,\n matchAPIRoute,\n normalizeRouteResponse,\n} from \"./runtime\";\nexport type { APIRouteMatch, APIRouteParams, APIRouteParamValue } from \"./runtime\";\n","import { existsSync, readFileSync } from \"fs\";\nimport { join } from \"path\";\nimport {\n PROGRAMMATIC_ROUTE_FILE_NAMES,\n getProgrammaticRouteManifest,\n scanProgrammaticPagePaths,\n type ProgrammaticRouteManifest,\n} from \"./routes\";\n\nexport interface LoadedProgrammaticRouteManifest {\n filePath: string;\n manifest: ProgrammaticRouteManifest;\n}\n\nexport async function loadProgrammaticRouteManifests(options: {\n root: string;\n srcDir?: string;\n loadModule: (filePath: string) => Promise<Record<string, any>>;\n}): Promise<LoadedProgrammaticRouteManifest[]> {\n const manifests: LoadedProgrammaticRouteManifest[] = [];\n\n for (const filePath of findProgrammaticRouteFiles(options.root, options.srcDir)) {\n const mod = await options.loadModule(filePath);\n const manifest = getProgrammaticRouteManifest(mod);\n if (manifest) {\n manifests.push({ filePath, manifest });\n }\n }\n\n return manifests;\n}\n\nexport function findProgrammaticRouteFiles(root: string, srcDir = \"src\"): string[] {\n return findProgrammaticRouteFilesInDir(join(root, srcDir));\n}\n\nexport function findProgrammaticRouteFilesInDir(srcRoot: string): string[] {\n const files: string[] = [];\n\n for (const fileName of PROGRAMMATIC_ROUTE_FILE_NAMES) {\n const filePath = join(srcRoot, fileName);\n if (existsSync(filePath)) {\n files.push(filePath);\n }\n }\n\n return files;\n}\n\nexport async function discoverProgrammaticRoutePaths(\n root: string,\n srcDir = \"src\",\n): Promise<string[]> {\n const paths = new Set<string>();\n const files = new Set([\n ...findProgrammaticRouteFiles(root, srcDir),\n ...(await findProgrammaticRouteSourceFiles(join(root, srcDir))),\n ]);\n\n for (const filePath of files) {\n const source = readFileSync(filePath, \"utf8\");\n for (const routePath of scanProgrammaticPagePaths(source)) {\n paths.add(routePath);\n }\n }\n\n return Array.from(paths).sort();\n}\n\nasync function findProgrammaticRouteSourceFiles(srcRoot: string): Promise<string[]> {\n if (!existsSync(srcRoot)) {\n return [];\n }\n\n try {\n const glob = await import(\"fast-glob\");\n return await glob.default(\"**/*.{ts,tsx,js,jsx}\", {\n cwd: srcRoot,\n absolute: true,\n ignore: [\n \"**/*.d.ts\",\n \"**/node_modules/**\",\n \"**/.*/**\",\n \"farm-routes.d.ts\",\n \"farm-env.d.ts\",\n \"lib/api.generated.ts\",\n ],\n });\n } catch {\n return [];\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,230 @@
1
+ import {
2
+ __name
3
+ } from "./chunk-CGILA3WO.mjs";
4
+
5
+ // src/router.ts
6
+ function createFarmRouter(routes) {
7
+ const normalizedRoutes = routes.map(normalizeRouteInput).sort(compareRoutes);
8
+ return {
9
+ routes: normalizedRoutes.map((entry) => entry.route),
10
+ match(pathname) {
11
+ const normalizedPathname = normalizePathname(pathname);
12
+ for (const entry of normalizedRoutes) {
13
+ const params = matchSegments(entry.segments, normalizedPathname);
14
+ if (params) {
15
+ return {
16
+ route: entry.route,
17
+ pathname: normalizedPathname,
18
+ params
19
+ };
20
+ }
21
+ }
22
+ return null;
23
+ },
24
+ build: buildFarmRoutePath,
25
+ isActive: isFarmRouteActive
26
+ };
27
+ }
28
+ __name(createFarmRouter, "createFarmRouter");
29
+ function matchFarmRoute(pattern, pathname) {
30
+ return matchSegments(parseRoutePattern(pattern), normalizePathname(pathname));
31
+ }
32
+ __name(matchFarmRoute, "matchFarmRoute");
33
+ function buildFarmRoutePath(pattern, params = {}, options = {}) {
34
+ const parts = [];
35
+ for (const segment of parseRoutePattern(pattern)) {
36
+ if (segment.type === "static") {
37
+ parts.push(encodePathSegment(segment.value));
38
+ continue;
39
+ }
40
+ const value = params[segment.name];
41
+ const values = Array.isArray(value) ? value : value == null ? [] : [value];
42
+ if (values.length === 0) {
43
+ if (segment.optional) continue;
44
+ throw new Error(`Missing route param "${segment.name}" for ${pattern}.`);
45
+ }
46
+ if (!segment.catchAll && values.length > 1) {
47
+ throw new Error(`Route param "${segment.name}" for ${pattern} expects a single value.`);
48
+ }
49
+ parts.push(...values.map((item) => encodePathSegment(String(item))));
50
+ }
51
+ let pathname = parts.length ? `/${parts.join("/")}` : "/";
52
+ if (options.trailingSlash && pathname !== "/") {
53
+ pathname = `${pathname}/`;
54
+ }
55
+ return appendQueryAndHash(pathname, options);
56
+ }
57
+ __name(buildFarmRoutePath, "buildFarmRoutePath");
58
+ function isFarmRouteActive(pattern, pathname, options = {}) {
59
+ const normalizedPathname = normalizePathname(pathname);
60
+ if (matchFarmRoute(pattern, normalizedPathname)) return true;
61
+ if (options.exact !== false) return false;
62
+ const normalizedPattern = normalizePathname(pattern);
63
+ if (normalizedPattern === "/") return normalizedPathname === "/";
64
+ return normalizedPathname.startsWith(`${normalizedPattern}/`);
65
+ }
66
+ __name(isFarmRouteActive, "isFarmRouteActive");
67
+ function normalizeRouteInput(input, index) {
68
+ const route = typeof input === "string" ? { path: input } : input;
69
+ const path = normalizePathname(route.path);
70
+ const segments = parseRoutePattern(path);
71
+ return {
72
+ route: {
73
+ ...route,
74
+ path
75
+ },
76
+ segments,
77
+ score: scoreSegments(segments),
78
+ index
79
+ };
80
+ }
81
+ __name(normalizeRouteInput, "normalizeRouteInput");
82
+ function parseRoutePattern(pattern) {
83
+ return splitPathname(pattern).filter((part) => !isRouteGroup(part)).map((part) => {
84
+ const optionalCatchAll = part.match(/^\[\[\.\.\.([A-Za-z0-9_$-]+)\]\]$/);
85
+ if (optionalCatchAll) {
86
+ return {
87
+ type: "dynamic",
88
+ name: optionalCatchAll[1],
89
+ catchAll: true,
90
+ optional: true
91
+ };
92
+ }
93
+ const catchAll = part.match(/^\[\.\.\.([A-Za-z0-9_$-]+)\]$/);
94
+ if (catchAll) {
95
+ return {
96
+ type: "dynamic",
97
+ name: catchAll[1],
98
+ catchAll: true,
99
+ optional: false
100
+ };
101
+ }
102
+ const dynamic = part.match(/^\[([A-Za-z0-9_$-]+)\]$/) || part.match(/^:([A-Za-z0-9_$-]+)$/);
103
+ if (dynamic) {
104
+ return {
105
+ type: "dynamic",
106
+ name: dynamic[1],
107
+ catchAll: false,
108
+ optional: false
109
+ };
110
+ }
111
+ const star = part.match(/^\*([A-Za-z0-9_$-]+)(\?)?$/);
112
+ if (star) {
113
+ return {
114
+ type: "dynamic",
115
+ name: star[1],
116
+ catchAll: true,
117
+ optional: !!star[2]
118
+ };
119
+ }
120
+ return {
121
+ type: "static",
122
+ value: decodePathSegment(part)
123
+ };
124
+ });
125
+ }
126
+ __name(parseRoutePattern, "parseRoutePattern");
127
+ function matchSegments(segments, pathname) {
128
+ const parts = splitPathname(pathname);
129
+ const params = {};
130
+ if (segments.length === 0) {
131
+ return parts.length === 0 ? params : null;
132
+ }
133
+ let pathIndex = 0;
134
+ for (const segment of segments) {
135
+ if (segment.type === "static") {
136
+ if (decodePathSegment(parts[pathIndex] || "") !== segment.value) return null;
137
+ pathIndex++;
138
+ continue;
139
+ }
140
+ if (segment.catchAll) {
141
+ const remaining = parts.slice(pathIndex).map(decodePathSegment);
142
+ if (remaining.length === 0 && !segment.optional) return null;
143
+ params[segment.name] = remaining.join("/");
144
+ pathIndex = parts.length;
145
+ continue;
146
+ }
147
+ const value = parts[pathIndex];
148
+ if (!value) return null;
149
+ params[segment.name] = decodePathSegment(value);
150
+ pathIndex++;
151
+ }
152
+ return pathIndex === parts.length ? params : null;
153
+ }
154
+ __name(matchSegments, "matchSegments");
155
+ function compareRoutes(left, right) {
156
+ if (right.score !== left.score) return right.score - left.score;
157
+ return left.index - right.index;
158
+ }
159
+ __name(compareRoutes, "compareRoutes");
160
+ function scoreSegments(segments) {
161
+ return segments.reduce((score, segment) => {
162
+ if (segment.type === "static") return score + 100;
163
+ if (!segment.catchAll) return score + 50;
164
+ return score + (segment.optional ? 5 : 10);
165
+ }, segments.length);
166
+ }
167
+ __name(scoreSegments, "scoreSegments");
168
+ function normalizePathname(value) {
169
+ const raw = value || "/";
170
+ let pathname = raw;
171
+ try {
172
+ pathname = new URL(raw, "http://farm.local").pathname;
173
+ } catch {
174
+ pathname = raw.split(/[?#]/, 1)[0] || "/";
175
+ }
176
+ pathname = pathname.replace(/\\/g, "/").replace(/\/+/g, "/");
177
+ if (!pathname.startsWith("/")) pathname = `/${pathname}`;
178
+ if (pathname.length > 1) pathname = pathname.replace(/\/+$/, "");
179
+ return pathname || "/";
180
+ }
181
+ __name(normalizePathname, "normalizePathname");
182
+ function splitPathname(pathname) {
183
+ return normalizePathname(pathname).split("/").filter(Boolean);
184
+ }
185
+ __name(splitPathname, "splitPathname");
186
+ function isRouteGroup(part) {
187
+ return part.startsWith("(") && part.endsWith(")");
188
+ }
189
+ __name(isRouteGroup, "isRouteGroup");
190
+ function decodePathSegment(value) {
191
+ try {
192
+ return decodeURIComponent(value);
193
+ } catch {
194
+ return value;
195
+ }
196
+ }
197
+ __name(decodePathSegment, "decodePathSegment");
198
+ function encodePathSegment(value) {
199
+ return encodeURIComponent(value);
200
+ }
201
+ __name(encodePathSegment, "encodePathSegment");
202
+ function appendQueryAndHash(pathname, options) {
203
+ const search = createSearchParams(options.query);
204
+ const hash = options.hash ? `#${options.hash.replace(/^#/, "")}` : "";
205
+ const query = search.toString();
206
+ return `${pathname}${query ? `?${query}` : ""}${hash}`;
207
+ }
208
+ __name(appendQueryAndHash, "appendQueryAndHash");
209
+ function createSearchParams(query) {
210
+ if (query instanceof URLSearchParams) return query;
211
+ const search = new URLSearchParams();
212
+ if (!query) return search;
213
+ for (const [key, value] of Object.entries(query)) {
214
+ const values = Array.isArray(value) ? value : [value];
215
+ for (const item of values) {
216
+ if (item == null) continue;
217
+ search.append(key, String(item));
218
+ }
219
+ }
220
+ return search;
221
+ }
222
+ __name(createSearchParams, "createSearchParams");
223
+
224
+ export {
225
+ createFarmRouter,
226
+ matchFarmRoute,
227
+ buildFarmRoutePath,
228
+ isFarmRouteActive
229
+ };
230
+ //# sourceMappingURL=chunk-ZBE6MLHL.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/router.ts"],"sourcesContent":["export type FarmRouterPrimitiveParam = string | number | boolean;\nexport type FarmRouterPathParam =\n | FarmRouterPrimitiveParam\n | readonly FarmRouterPrimitiveParam[]\n | null\n | undefined;\nexport type FarmRouterPathParams = Record<string, FarmRouterPathParam>;\nexport type FarmRouterParams = Record<string, string>;\n\nexport interface FarmRouterRoute<TMeta = unknown> {\n path: string;\n name?: string;\n meta?: TMeta;\n}\n\nexport type FarmRouterRouteInput<TMeta = unknown> = string | FarmRouterRoute<TMeta>;\n\nexport interface FarmRouterMatch<TMeta = unknown> {\n route: FarmRouterRoute<TMeta>;\n pathname: string;\n params: FarmRouterParams;\n}\n\nexport type FarmRouterQueryValue =\n | FarmRouterPrimitiveParam\n | readonly FarmRouterPrimitiveParam[]\n | null\n | undefined;\n\nexport interface FarmRouterBuildOptions {\n query?: URLSearchParams | Record<string, FarmRouterQueryValue>;\n hash?: string;\n trailingSlash?: boolean;\n}\n\nexport interface FarmRouterActiveOptions {\n exact?: boolean;\n}\n\nexport interface FarmRouter<TMeta = unknown> {\n routes: FarmRouterRoute<TMeta>[];\n match(pathname: string): FarmRouterMatch<TMeta> | null;\n build(pattern: string, params?: FarmRouterPathParams, options?: FarmRouterBuildOptions): string;\n isActive(pattern: string, pathname: string, options?: FarmRouterActiveOptions): boolean;\n}\n\ntype RouterSegment =\n | {\n type: \"static\";\n value: string;\n }\n | {\n type: \"dynamic\";\n name: string;\n catchAll: boolean;\n optional: boolean;\n };\n\ninterface NormalizedRouterRoute<TMeta> {\n route: FarmRouterRoute<TMeta>;\n segments: RouterSegment[];\n score: number;\n index: number;\n}\n\nexport function createFarmRouter<TMeta = unknown>(\n routes: FarmRouterRouteInput<TMeta>[],\n): FarmRouter<TMeta> {\n const normalizedRoutes = routes.map(normalizeRouteInput).sort(compareRoutes);\n\n return {\n routes: normalizedRoutes.map((entry) => entry.route),\n match(pathname) {\n const normalizedPathname = normalizePathname(pathname);\n\n for (const entry of normalizedRoutes) {\n const params = matchSegments(entry.segments, normalizedPathname);\n if (params) {\n return {\n route: entry.route,\n pathname: normalizedPathname,\n params,\n };\n }\n }\n\n return null;\n },\n build: buildFarmRoutePath,\n isActive: isFarmRouteActive,\n };\n}\n\nexport function matchFarmRoute(pattern: string, pathname: string): FarmRouterParams | null {\n return matchSegments(parseRoutePattern(pattern), normalizePathname(pathname));\n}\n\nexport function buildFarmRoutePath(\n pattern: string,\n params: FarmRouterPathParams = {},\n options: FarmRouterBuildOptions = {},\n): string {\n const parts: string[] = [];\n\n for (const segment of parseRoutePattern(pattern)) {\n if (segment.type === \"static\") {\n parts.push(encodePathSegment(segment.value));\n continue;\n }\n\n const value = params[segment.name];\n const values = Array.isArray(value) ? value : value == null ? [] : [value];\n\n if (values.length === 0) {\n if (segment.optional) continue;\n throw new Error(`Missing route param \"${segment.name}\" for ${pattern}.`);\n }\n\n if (!segment.catchAll && values.length > 1) {\n throw new Error(`Route param \"${segment.name}\" for ${pattern} expects a single value.`);\n }\n\n parts.push(...values.map((item) => encodePathSegment(String(item))));\n }\n\n let pathname = parts.length ? `/${parts.join(\"/\")}` : \"/\";\n\n if (options.trailingSlash && pathname !== \"/\") {\n pathname = `${pathname}/`;\n }\n\n return appendQueryAndHash(pathname, options);\n}\n\nexport function isFarmRouteActive(\n pattern: string,\n pathname: string,\n options: FarmRouterActiveOptions = {},\n): boolean {\n const normalizedPathname = normalizePathname(pathname);\n if (matchFarmRoute(pattern, normalizedPathname)) return true;\n if (options.exact !== false) return false;\n\n const normalizedPattern = normalizePathname(pattern);\n if (normalizedPattern === \"/\") return normalizedPathname === \"/\";\n return normalizedPathname.startsWith(`${normalizedPattern}/`);\n}\n\nfunction normalizeRouteInput<TMeta>(\n input: FarmRouterRouteInput<TMeta>,\n index: number,\n): NormalizedRouterRoute<TMeta> {\n const route = typeof input === \"string\" ? { path: input } : input;\n const path = normalizePathname(route.path);\n const segments = parseRoutePattern(path);\n\n return {\n route: {\n ...route,\n path,\n },\n segments,\n score: scoreSegments(segments),\n index,\n };\n}\n\nfunction parseRoutePattern(pattern: string): RouterSegment[] {\n return splitPathname(pattern)\n .filter((part) => !isRouteGroup(part))\n .map((part) => {\n const optionalCatchAll = part.match(/^\\[\\[\\.\\.\\.([A-Za-z0-9_$-]+)\\]\\]$/);\n if (optionalCatchAll) {\n return {\n type: \"dynamic\",\n name: optionalCatchAll[1],\n catchAll: true,\n optional: true,\n };\n }\n\n const catchAll = part.match(/^\\[\\.\\.\\.([A-Za-z0-9_$-]+)\\]$/);\n if (catchAll) {\n return {\n type: \"dynamic\",\n name: catchAll[1],\n catchAll: true,\n optional: false,\n };\n }\n\n const dynamic = part.match(/^\\[([A-Za-z0-9_$-]+)\\]$/) || part.match(/^:([A-Za-z0-9_$-]+)$/);\n if (dynamic) {\n return {\n type: \"dynamic\",\n name: dynamic[1],\n catchAll: false,\n optional: false,\n };\n }\n\n const star = part.match(/^\\*([A-Za-z0-9_$-]+)(\\?)?$/);\n if (star) {\n return {\n type: \"dynamic\",\n name: star[1],\n catchAll: true,\n optional: !!star[2],\n };\n }\n\n return {\n type: \"static\",\n value: decodePathSegment(part),\n };\n });\n}\n\nfunction matchSegments(segments: RouterSegment[], pathname: string): FarmRouterParams | null {\n const parts = splitPathname(pathname);\n const params: FarmRouterParams = {};\n\n if (segments.length === 0) {\n return parts.length === 0 ? params : null;\n }\n\n let pathIndex = 0;\n\n for (const segment of segments) {\n if (segment.type === \"static\") {\n if (decodePathSegment(parts[pathIndex] || \"\") !== segment.value) return null;\n pathIndex++;\n continue;\n }\n\n if (segment.catchAll) {\n const remaining = parts.slice(pathIndex).map(decodePathSegment);\n if (remaining.length === 0 && !segment.optional) return null;\n params[segment.name] = remaining.join(\"/\");\n pathIndex = parts.length;\n continue;\n }\n\n const value = parts[pathIndex];\n if (!value) return null;\n params[segment.name] = decodePathSegment(value);\n pathIndex++;\n }\n\n return pathIndex === parts.length ? params : null;\n}\n\nfunction compareRoutes<TMeta>(\n left: NormalizedRouterRoute<TMeta>,\n right: NormalizedRouterRoute<TMeta>,\n) {\n if (right.score !== left.score) return right.score - left.score;\n return left.index - right.index;\n}\n\nfunction scoreSegments(segments: RouterSegment[]) {\n return segments.reduce((score, segment) => {\n if (segment.type === \"static\") return score + 100;\n if (!segment.catchAll) return score + 50;\n return score + (segment.optional ? 5 : 10);\n }, segments.length);\n}\n\nfunction normalizePathname(value: string) {\n const raw = value || \"/\";\n let pathname = raw;\n\n try {\n pathname = new URL(raw, \"http://farm.local\").pathname;\n } catch {\n pathname = raw.split(/[?#]/, 1)[0] || \"/\";\n }\n\n pathname = pathname.replace(/\\\\/g, \"/\").replace(/\\/+/g, \"/\");\n if (!pathname.startsWith(\"/\")) pathname = `/${pathname}`;\n if (pathname.length > 1) pathname = pathname.replace(/\\/+$/, \"\");\n return pathname || \"/\";\n}\n\nfunction splitPathname(pathname: string) {\n return normalizePathname(pathname).split(\"/\").filter(Boolean);\n}\n\nfunction isRouteGroup(part: string) {\n return part.startsWith(\"(\") && part.endsWith(\")\");\n}\n\nfunction decodePathSegment(value: string) {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\nfunction encodePathSegment(value: string) {\n return encodeURIComponent(value);\n}\n\nfunction appendQueryAndHash(pathname: string, options: FarmRouterBuildOptions) {\n const search = createSearchParams(options.query);\n const hash = options.hash ? `#${options.hash.replace(/^#/, \"\")}` : \"\";\n const query = search.toString();\n return `${pathname}${query ? `?${query}` : \"\"}${hash}`;\n}\n\nfunction createSearchParams(query: FarmRouterBuildOptions[\"query\"]) {\n if (query instanceof URLSearchParams) return query;\n\n const search = new URLSearchParams();\n if (!query) return search;\n\n for (const [key, value] of Object.entries(query)) {\n const values = Array.isArray(value) ? value : [value];\n for (const item of values) {\n if (item == null) continue;\n search.append(key, String(item));\n }\n }\n\n return search;\n}\n"],"mappings":"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","names":[]}