@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,100 @@
1
+ import { ReactElement } from 'react';
2
+ import './types-BH1lhg5G.js';
3
+ import { APIRouteParams } from './api/runtime.js';
4
+ import { ProgrammaticPageRoute, InferProgrammaticRouteData, ProgrammaticRouteComponentProps, ProgrammaticApiRoute } from './routes.js';
5
+ import { FarmRouterQueryValue, FarmRouterPathParams } from './router.js';
6
+ import { ServerFn } from './server-fn.js';
7
+ import { g as FarmContextFactory, M as MiddlewareProps, P as PluginContextProps, p as RouteModule } from './client-plugins-BZnpeTGA.js';
8
+ import './route-runtime-DoOHzCAD.js';
9
+ import './cache.js';
10
+ import './plugin-BJDf43dc.js';
11
+ import 'http';
12
+ import './types-D1A6-XvH.js';
13
+ import 'db0';
14
+ import 'unstorage';
15
+ import './integration-api-CHT2OKAf.js';
16
+ import '@farming-labs/orm';
17
+ import './types-C9N-nk5R.js';
18
+ import '@farming-labs/docs';
19
+ import './markdown.js';
20
+ import './observability.js';
21
+ import 'vite';
22
+ import './workflows.js';
23
+ import './cron.js';
24
+ import './env.js';
25
+ import './server-action-security.js';
26
+ import './image-config-Duob7wER.js';
27
+
28
+ type FarmTestQuery = URLSearchParams | Record<string, FarmRouterQueryValue>;
29
+ type FarmTestPathParams = FarmRouterPathParams;
30
+ type FarmTestFormValues = Record<string, FormDataEntryValue | readonly FormDataEntryValue[]>;
31
+ interface FarmTestRequestOptions extends Omit<RequestInit, "body" | "headers"> {
32
+ origin?: string;
33
+ headers?: HeadersInit;
34
+ query?: FarmTestQuery;
35
+ cookies?: Record<string, string>;
36
+ json?: unknown;
37
+ form?: FormData | FarmTestFormValues;
38
+ body?: BodyInit | null;
39
+ }
40
+ interface FarmTestHarnessOptions<TContext = unknown> {
41
+ origin?: string;
42
+ headers?: HeadersInit;
43
+ cookies?: Record<string, string>;
44
+ context?: FarmContextFactory<TContext>;
45
+ }
46
+ type AnyProgrammaticPageRoute = ProgrammaticPageRoute<any, any, any, any>;
47
+ type InferFarmTestRouteParams<TRoute> = TRoute extends ProgrammaticPageRoute<infer TParams, any, any, any> ? TParams : never;
48
+ type InferFarmTestRouteSearch<TRoute> = TRoute extends ProgrammaticPageRoute<any, infer TSearch, any, any> ? TSearch : never;
49
+ type InferFarmTestRouteData<TRoute> = TRoute extends ProgrammaticPageRoute<any, any, infer TDataHooks, any> ? InferProgrammaticRouteData<TDataHooks> : never;
50
+ type FarmTestRouteProps<TRoute extends AnyProgrammaticPageRoute> = ProgrammaticRouteComponentProps<InferFarmTestRouteParams<TRoute>, InferFarmTestRouteSearch<TRoute>, InferFarmTestRouteData<TRoute>>;
51
+ type FarmTestRouteParamsInput<TRoute> = InferFarmTestRouteParams<TRoute> extends Record<string, unknown> ? Partial<InferFarmTestRouteParams<TRoute>> : FarmTestPathParams;
52
+ type FarmTestRouteSearchInput<TRoute> = InferFarmTestRouteSearch<TRoute> extends Record<string, unknown> ? Partial<InferFarmTestRouteSearch<TRoute>> | URLSearchParams : FarmTestQuery;
53
+ interface FarmTestRouteOptions<TRoute extends AnyProgrammaticPageRoute, TContext = unknown> extends Pick<FarmTestRequestOptions, "origin" | "headers" | "cookies" | "signal"> {
54
+ path?: string | URL;
55
+ params?: FarmTestRouteParamsInput<TRoute>;
56
+ search?: FarmTestRouteSearchInput<TRoute>;
57
+ context?: TContext;
58
+ middleware?: MiddlewareProps;
59
+ pluginContext?: PluginContextProps;
60
+ }
61
+ interface FarmTestRouteResult<TRoute extends AnyProgrammaticPageRoute> {
62
+ route: TRoute;
63
+ module: RouteModule;
64
+ request: Request;
65
+ props: FarmTestRouteProps<TRoute>;
66
+ element: ReactElement;
67
+ canonicalPath?: string;
68
+ }
69
+ interface FarmTestApiOptions extends FarmTestRequestOptions {
70
+ path?: string | URL;
71
+ params?: FarmTestPathParams;
72
+ throwOnError?: boolean;
73
+ }
74
+ interface FarmTestEndpointOptions extends FarmTestRequestOptions {
75
+ path?: string | URL;
76
+ params?: APIRouteParams;
77
+ throwOnError?: boolean;
78
+ }
79
+ interface FarmTestServerFnOptions extends Pick<FarmTestRequestOptions, "origin" | "headers" | "cookies" | "signal"> {
80
+ path?: string | URL;
81
+ request?: Request;
82
+ }
83
+ type FarmTestServerFnArguments<TInput> = [unknown] extends [TInput] ? [input?: TInput | FormData, options?: FarmTestServerFnOptions] : [input: TInput | FormData, options?: FarmTestServerFnOptions];
84
+ interface FarmTestHarness<TContext = unknown> {
85
+ request(path?: string | URL, options?: FarmTestRequestOptions): Request;
86
+ route<TRoute extends AnyProgrammaticPageRoute>(route: TRoute, options?: FarmTestRouteOptions<TRoute, TContext>): Promise<FarmTestRouteResult<TRoute>>;
87
+ api(route: ProgrammaticApiRoute, options?: FarmTestApiOptions): Promise<Response>;
88
+ endpoint(endpoint: unknown, options?: FarmTestEndpointOptions): Promise<Response>;
89
+ serverFn<TInput, TResult>(serverFn: ServerFn<TInput, TResult>, ...args: FarmTestServerFnArguments<TInput>): Promise<TResult>;
90
+ clearCache(): void;
91
+ }
92
+ /** Create a deterministic Web Request without depending on a test runner. */
93
+ declare function createTestRequest(path?: string | URL, options?: FarmTestRequestOptions): Request;
94
+ /**
95
+ * Create test helpers that exercise Farm's real route, API, and server-function runtimes.
96
+ * The harness has no dependency on Vitest, Jest, or a DOM environment.
97
+ */
98
+ declare function createFarmTestHarness<TContext = unknown>(options?: FarmTestHarnessOptions<TContext>): FarmTestHarness<TContext>;
99
+
100
+ export { type FarmTestApiOptions, type FarmTestEndpointOptions, type FarmTestFormValues, type FarmTestHarness, type FarmTestHarnessOptions, type FarmTestPathParams, type FarmTestQuery, type FarmTestRequestOptions, type FarmTestRouteOptions, type FarmTestRouteProps, type FarmTestRouteResult, type FarmTestServerFnArguments, type FarmTestServerFnOptions, type InferFarmTestRouteData, type InferFarmTestRouteParams, type InferFarmTestRouteSearch, createFarmTestHarness, createTestRequest };
@@ -0,0 +1,324 @@
1
+ import {
2
+ runWithServerActionRequest
3
+ } from "./chunk-AGS7UJ52.mjs";
4
+ import "./chunk-YHU7SS6L.mjs";
5
+ import "./chunk-QF4PHCMA.mjs";
6
+ import "./chunk-GN72QAIH.mjs";
7
+ import "./chunk-FQYDHKKU.mjs";
8
+ import "./chunk-J4FNJ5IU.mjs";
9
+ import {
10
+ invokeAPIRouteEndpoint,
11
+ matchAPIRoute
12
+ } from "./chunk-EVGBEZDF.mjs";
13
+ import "./chunk-RHIFZZUI.mjs";
14
+ import "./chunk-LM2YNO4U.mjs";
15
+ import {
16
+ createRouteModuleFromProgrammaticPage
17
+ } from "./chunk-B6N4ZB2H.mjs";
18
+ import {
19
+ resolveFarmRouteContext,
20
+ withFarmRouteContext
21
+ } from "./chunk-QKVUNGAH.mjs";
22
+ import "./chunk-QM6VV26B.mjs";
23
+ import "./chunk-44ZCFSKE.mjs";
24
+ import {
25
+ buildFarmRoutePath,
26
+ matchFarmRoute
27
+ } from "./chunk-ZBE6MLHL.mjs";
28
+ import {
29
+ getFarmDataCache
30
+ } from "./chunk-4PTK6KT4.mjs";
31
+ import "./chunk-TXCFGOHW.mjs";
32
+ import "./chunk-WZ5QFROO.mjs";
33
+ import "./chunk-7ZY5AIJO.mjs";
34
+ import {
35
+ __name
36
+ } from "./chunk-CGILA3WO.mjs";
37
+
38
+ // src/testing.ts
39
+ import { createElement } from "react";
40
+ function createTestRequest(path = "/", options = {}) {
41
+ const url = resolveTestURL(path, options.origin);
42
+ applyQuery(url.searchParams, options.query);
43
+ const headers = new Headers(options.headers);
44
+ applyCookies(headers, options.cookies);
45
+ const { body, hasBody } = resolveRequestBody(options, headers);
46
+ const method = (options.method ?? (hasBody ? "POST" : "GET")).toUpperCase();
47
+ if ((method === "GET" || method === "HEAD") && body != null) {
48
+ throw new TypeError(`Farm test requests cannot send a body with ${method}`);
49
+ }
50
+ const {
51
+ origin: _origin,
52
+ query: _query,
53
+ cookies: _cookies,
54
+ json: _json,
55
+ form: _form,
56
+ body: _body,
57
+ headers: _headers,
58
+ ...requestInit
59
+ } = options;
60
+ return new Request(url, {
61
+ ...requestInit,
62
+ method,
63
+ headers,
64
+ body
65
+ });
66
+ }
67
+ __name(createTestRequest, "createTestRequest");
68
+ function createFarmTestHarness(options = {}) {
69
+ const origin = normalizeOrigin(options.origin);
70
+ const request = /* @__PURE__ */ __name((path = "/", requestOptions = {}) => createTestRequest(path, mergeRequestDefaults(options, origin, requestOptions)), "request");
71
+ return {
72
+ request,
73
+ async route(route, routeOptions = {}) {
74
+ const requestPath = routeOptions.path ?? buildFarmRoutePath(route.path, routeOptions.params ?? {});
75
+ const routeRequest = request(requestPath, {
76
+ origin: routeOptions.origin,
77
+ headers: routeOptions.headers,
78
+ cookies: routeOptions.cookies,
79
+ signal: routeOptions.signal,
80
+ query: routeOptions.search
81
+ });
82
+ const url = new URL(routeRequest.url);
83
+ const params = resolvePageParams(route.path, url.pathname, routeOptions.params);
84
+ const search = readSearchParams(url.searchParams);
85
+ const routeContext = Object.prototype.hasOwnProperty.call(routeOptions, "context") ? routeOptions.context : await resolveFarmRouteContext(
86
+ { context: options.context },
87
+ {
88
+ request: routeRequest,
89
+ params,
90
+ search,
91
+ path: url.pathname
92
+ }
93
+ );
94
+ const rawProps = withFarmRouteContext(
95
+ {
96
+ params,
97
+ searchParams: Promise.resolve(search),
98
+ path: url.pathname,
99
+ middleware: routeOptions.middleware,
100
+ context: routeOptions.pluginContext
101
+ },
102
+ routeContext
103
+ );
104
+ const routeModule = createRouteModuleFromProgrammaticPage(route);
105
+ const resolveProps = routeModule.__farmResolveRouteProps;
106
+ const resolvedProps = resolveProps ? await resolveProps(rawProps) : { ...rawProps, search, searchParams: Promise.resolve(search) };
107
+ const canonicalPath = readCanonicalPath(resolvedProps);
108
+ const componentProps = stripInternalRouteProps(resolvedProps);
109
+ return {
110
+ route,
111
+ module: routeModule,
112
+ request: routeRequest,
113
+ props: componentProps,
114
+ element: createElement(route.component, componentProps),
115
+ canonicalPath
116
+ };
117
+ },
118
+ async api(route, apiOptions = {}) {
119
+ const requestPath = apiOptions.path ?? buildFarmRoutePath(route.path, apiOptions.params ?? {});
120
+ const method = apiOptions.method ?? getDefaultApiMethod(route);
121
+ const apiRequest = request(requestPath, omitApiControlOptions({ ...apiOptions, method }));
122
+ const match = matchAPIRoute(/* @__PURE__ */ new Map([[route.path, route]]), new URL(apiRequest.url).pathname);
123
+ if (!match) {
124
+ return jsonErrorResponse("Not Found", 404);
125
+ }
126
+ const endpoint = match.route.methods[apiRequest.method];
127
+ if (!endpoint) {
128
+ return jsonErrorResponse("Method Not Allowed", 405);
129
+ }
130
+ return invokeTestEndpoint(endpoint, apiRequest, match.params, apiOptions.throwOnError);
131
+ },
132
+ async endpoint(endpoint, endpointOptions = {}) {
133
+ const endpointRecord = endpoint;
134
+ const endpointPath = endpointOptions.path ?? endpointRecord.__path ?? "/__farm/test/endpoint";
135
+ const endpointRequest = request(endpointPath, {
136
+ ...omitEndpointControlOptions(endpointOptions),
137
+ method: endpointOptions.method ?? endpointRecord.__method ?? "GET"
138
+ });
139
+ return invokeTestEndpoint(
140
+ endpoint,
141
+ endpointRequest,
142
+ endpointOptions.params,
143
+ endpointOptions.throwOnError
144
+ );
145
+ },
146
+ async serverFn(serverFn, ...args) {
147
+ const [input, serverFnOptions = {}] = args;
148
+ const actionRequest = serverFnOptions.request ?? request(serverFnOptions.path ?? "/__farm/test/server-fn", {
149
+ origin: serverFnOptions.origin,
150
+ headers: serverFnOptions.headers,
151
+ cookies: serverFnOptions.cookies,
152
+ signal: serverFnOptions.signal,
153
+ method: "POST"
154
+ });
155
+ return await runWithServerActionRequest(actionRequest, () => serverFn(input));
156
+ },
157
+ clearCache() {
158
+ getFarmDataCache().clear();
159
+ }
160
+ };
161
+ }
162
+ __name(createFarmTestHarness, "createFarmTestHarness");
163
+ function resolveTestURL(path, origin) {
164
+ const url = path instanceof URL ? new URL(path) : new URL(path, `${normalizeOrigin(origin)}/`);
165
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
166
+ throw new TypeError(`Farm test requests require an HTTP(S) URL, received ${url.protocol}`);
167
+ }
168
+ return url;
169
+ }
170
+ __name(resolveTestURL, "resolveTestURL");
171
+ function normalizeOrigin(origin = "http://farm.test") {
172
+ let url;
173
+ try {
174
+ url = new URL(origin);
175
+ } catch {
176
+ throw new TypeError(`Invalid Farm test origin: ${JSON.stringify(origin)}`);
177
+ }
178
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
179
+ throw new TypeError(`Farm test origins must use HTTP(S), received ${url.protocol}`);
180
+ }
181
+ return url.origin;
182
+ }
183
+ __name(normalizeOrigin, "normalizeOrigin");
184
+ function mergeRequestDefaults(harnessOptions, origin, requestOptions) {
185
+ const headers = new Headers(harnessOptions.headers);
186
+ new Headers(requestOptions.headers).forEach((value, key) => headers.set(key, value));
187
+ return {
188
+ ...requestOptions,
189
+ origin: requestOptions.origin ?? origin,
190
+ headers,
191
+ cookies: {
192
+ ...harnessOptions.cookies,
193
+ ...requestOptions.cookies
194
+ }
195
+ };
196
+ }
197
+ __name(mergeRequestDefaults, "mergeRequestDefaults");
198
+ function applyQuery(searchParams, query) {
199
+ if (!query) return;
200
+ if (query instanceof URLSearchParams) {
201
+ for (const key of new Set(query.keys())) {
202
+ searchParams.delete(key);
203
+ for (const value of query.getAll(key)) searchParams.append(key, value);
204
+ }
205
+ return;
206
+ }
207
+ for (const [key, rawValue] of Object.entries(query)) {
208
+ searchParams.delete(key);
209
+ const values = Array.isArray(rawValue) ? rawValue : [rawValue];
210
+ for (const value of values) {
211
+ if (value == null) continue;
212
+ if (typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean") {
213
+ throw new TypeError(`Invalid query value for ${JSON.stringify(key)}`);
214
+ }
215
+ searchParams.append(key, String(value));
216
+ }
217
+ }
218
+ }
219
+ __name(applyQuery, "applyQuery");
220
+ function applyCookies(headers, cookies) {
221
+ if (!cookies || Object.keys(cookies).length === 0) return;
222
+ const value = Object.entries(cookies).map(([name, cookieValue]) => `${encodeURIComponent(name)}=${encodeURIComponent(cookieValue)}`).join("; ");
223
+ const current = headers.get("cookie");
224
+ headers.set("cookie", current ? `${current}; ${value}` : value);
225
+ }
226
+ __name(applyCookies, "applyCookies");
227
+ function resolveRequestBody(options, headers) {
228
+ const sources = [
229
+ options.json !== void 0,
230
+ options.form !== void 0,
231
+ options.body !== void 0
232
+ ];
233
+ if (sources.filter(Boolean).length > 1) {
234
+ throw new TypeError("Farm test requests accept only one of json, form, or body");
235
+ }
236
+ if (options.json !== void 0) {
237
+ if (!headers.has("content-type")) headers.set("content-type", "application/json");
238
+ return { body: JSON.stringify(options.json), hasBody: true };
239
+ }
240
+ if (options.form !== void 0) {
241
+ const formData = options.form instanceof FormData ? options.form : createFormData(options.form);
242
+ return { body: formData, hasBody: true };
243
+ }
244
+ return {
245
+ body: options.body ?? null,
246
+ hasBody: options.body !== void 0
247
+ };
248
+ }
249
+ __name(resolveRequestBody, "resolveRequestBody");
250
+ function createFormData(values) {
251
+ const formData = new FormData();
252
+ for (const [key, rawValue] of Object.entries(values)) {
253
+ const entries = Array.isArray(rawValue) ? rawValue : [rawValue];
254
+ for (const value of entries) formData.append(key, value);
255
+ }
256
+ return formData;
257
+ }
258
+ __name(createFormData, "createFormData");
259
+ function resolvePageParams(pattern, pathname, explicitParams) {
260
+ const matchedParams = matchFarmRoute(pattern, pathname);
261
+ if (!matchedParams) {
262
+ throw new Error(
263
+ `Path ${JSON.stringify(pathname)} does not match route ${JSON.stringify(pattern)}`
264
+ );
265
+ }
266
+ if (!explicitParams) return matchedParams;
267
+ return Object.fromEntries(
268
+ Object.entries(explicitParams).map(([key, value]) => [
269
+ key,
270
+ Array.isArray(value) ? value.map(String).join("/") : String(value)
271
+ ])
272
+ );
273
+ }
274
+ __name(resolvePageParams, "resolvePageParams");
275
+ function readSearchParams(searchParams) {
276
+ const search = {};
277
+ searchParams.forEach((value, key) => {
278
+ search[key] = value;
279
+ });
280
+ return search;
281
+ }
282
+ __name(readSearchParams, "readSearchParams");
283
+ function readCanonicalPath(props) {
284
+ return typeof props.__farmCanonicalPath === "string" ? props.__farmCanonicalPath : void 0;
285
+ }
286
+ __name(readCanonicalPath, "readCanonicalPath");
287
+ function stripInternalRouteProps(props) {
288
+ const { __farmRoutePropsResolved, __farmCanonicalPath, ...componentProps } = props;
289
+ return componentProps;
290
+ }
291
+ __name(stripInternalRouteProps, "stripInternalRouteProps");
292
+ function getDefaultApiMethod(route) {
293
+ if (route.methods.GET) return "GET";
294
+ return Object.keys(route.methods)[0] ?? "GET";
295
+ }
296
+ __name(getDefaultApiMethod, "getDefaultApiMethod");
297
+ function omitApiControlOptions(options) {
298
+ const { path: _path, params: _params, throwOnError: _throwOnError, ...requestOptions } = options;
299
+ return requestOptions;
300
+ }
301
+ __name(omitApiControlOptions, "omitApiControlOptions");
302
+ function omitEndpointControlOptions(options) {
303
+ const { path: _path, params: _params, throwOnError: _throwOnError, ...requestOptions } = options;
304
+ return requestOptions;
305
+ }
306
+ __name(omitEndpointControlOptions, "omitEndpointControlOptions");
307
+ async function invokeTestEndpoint(endpoint, request, params = {}, throwOnError = false) {
308
+ try {
309
+ return await invokeAPIRouteEndpoint(endpoint, request, params);
310
+ } catch (error) {
311
+ if (throwOnError) throw error;
312
+ return jsonErrorResponse(error instanceof Error ? error.message : "Internal Server Error", 500);
313
+ }
314
+ }
315
+ __name(invokeTestEndpoint, "invokeTestEndpoint");
316
+ function jsonErrorResponse(error, status) {
317
+ return Response.json({ error }, { status });
318
+ }
319
+ __name(jsonErrorResponse, "jsonErrorResponse");
320
+ export {
321
+ createFarmTestHarness,
322
+ createTestRequest
323
+ };
324
+ //# sourceMappingURL=testing.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/testing.ts"],"sourcesContent":["import { createElement, type ReactElement } from \"react\";\nimport { invokeAPIRouteEndpoint, matchAPIRoute, type APIRouteParams } from \"./api/route-manager\";\nimport { getFarmDataCache } from \"./cache\";\nimport { resolveFarmRouteContext, withFarmRouteContext } from \"./route-context\";\nimport {\n createRouteModuleFromProgrammaticPage,\n type InferProgrammaticRouteData,\n type ProgrammaticApiRoute,\n type ProgrammaticPageRoute,\n type ProgrammaticRouteComponentProps,\n type ProgrammaticRouteMethod,\n} from \"./routes\";\nimport {\n buildFarmRoutePath,\n matchFarmRoute,\n type FarmRouterPathParams,\n type FarmRouterQueryValue,\n} from \"./router\";\nimport { runWithServerActionRequest } from \"./server-action-security\";\nimport type { ServerFn } from \"./server-fn\";\nimport type { FarmContextFactory, MiddlewareProps, PluginContextProps, RouteModule } from \"./types\";\n\nexport type FarmTestQuery = URLSearchParams | Record<string, FarmRouterQueryValue>;\nexport type FarmTestPathParams = FarmRouterPathParams;\nexport type FarmTestFormValues = Record<string, FormDataEntryValue | readonly FormDataEntryValue[]>;\n\nexport interface FarmTestRequestOptions extends Omit<RequestInit, \"body\" | \"headers\"> {\n origin?: string;\n headers?: HeadersInit;\n query?: FarmTestQuery;\n cookies?: Record<string, string>;\n json?: unknown;\n form?: FormData | FarmTestFormValues;\n body?: BodyInit | null;\n}\n\nexport interface FarmTestHarnessOptions<TContext = unknown> {\n origin?: string;\n headers?: HeadersInit;\n cookies?: Record<string, string>;\n context?: FarmContextFactory<TContext>;\n}\n\ntype AnyProgrammaticPageRoute = ProgrammaticPageRoute<any, any, any, any>;\n\nexport type InferFarmTestRouteParams<TRoute> =\n TRoute extends ProgrammaticPageRoute<infer TParams, any, any, any> ? TParams : never;\n\nexport type InferFarmTestRouteSearch<TRoute> =\n TRoute extends ProgrammaticPageRoute<any, infer TSearch, any, any> ? TSearch : never;\n\nexport type InferFarmTestRouteData<TRoute> =\n TRoute extends ProgrammaticPageRoute<any, any, infer TDataHooks, any>\n ? InferProgrammaticRouteData<TDataHooks>\n : never;\n\nexport type FarmTestRouteProps<TRoute extends AnyProgrammaticPageRoute> =\n ProgrammaticRouteComponentProps<\n InferFarmTestRouteParams<TRoute>,\n InferFarmTestRouteSearch<TRoute>,\n InferFarmTestRouteData<TRoute>\n >;\n\ntype FarmTestRouteParamsInput<TRoute> =\n InferFarmTestRouteParams<TRoute> extends Record<string, unknown>\n ? Partial<InferFarmTestRouteParams<TRoute>>\n : FarmTestPathParams;\n\ntype FarmTestRouteSearchInput<TRoute> =\n InferFarmTestRouteSearch<TRoute> extends Record<string, unknown>\n ? Partial<InferFarmTestRouteSearch<TRoute>> | URLSearchParams\n : FarmTestQuery;\n\nexport interface FarmTestRouteOptions<\n TRoute extends AnyProgrammaticPageRoute,\n TContext = unknown,\n> extends Pick<FarmTestRequestOptions, \"origin\" | \"headers\" | \"cookies\" | \"signal\"> {\n path?: string | URL;\n params?: FarmTestRouteParamsInput<TRoute>;\n search?: FarmTestRouteSearchInput<TRoute>;\n context?: TContext;\n middleware?: MiddlewareProps;\n pluginContext?: PluginContextProps;\n}\n\nexport interface FarmTestRouteResult<TRoute extends AnyProgrammaticPageRoute> {\n route: TRoute;\n module: RouteModule;\n request: Request;\n props: FarmTestRouteProps<TRoute>;\n element: ReactElement;\n canonicalPath?: string;\n}\n\nexport interface FarmTestApiOptions extends FarmTestRequestOptions {\n path?: string | URL;\n params?: FarmTestPathParams;\n throwOnError?: boolean;\n}\n\nexport interface FarmTestEndpointOptions extends FarmTestRequestOptions {\n path?: string | URL;\n params?: APIRouteParams;\n throwOnError?: boolean;\n}\n\nexport interface FarmTestServerFnOptions extends Pick<\n FarmTestRequestOptions,\n \"origin\" | \"headers\" | \"cookies\" | \"signal\"\n> {\n path?: string | URL;\n request?: Request;\n}\n\nexport type FarmTestServerFnArguments<TInput> = [unknown] extends [TInput]\n ? [input?: TInput | FormData, options?: FarmTestServerFnOptions]\n : [input: TInput | FormData, options?: FarmTestServerFnOptions];\n\nexport interface FarmTestHarness<TContext = unknown> {\n request(path?: string | URL, options?: FarmTestRequestOptions): Request;\n route<TRoute extends AnyProgrammaticPageRoute>(\n route: TRoute,\n options?: FarmTestRouteOptions<TRoute, TContext>,\n ): Promise<FarmTestRouteResult<TRoute>>;\n api(route: ProgrammaticApiRoute, options?: FarmTestApiOptions): Promise<Response>;\n endpoint(endpoint: unknown, options?: FarmTestEndpointOptions): Promise<Response>;\n serverFn<TInput, TResult>(\n serverFn: ServerFn<TInput, TResult>,\n ...args: FarmTestServerFnArguments<TInput>\n ): Promise<TResult>;\n clearCache(): void;\n}\n\n/** Create a deterministic Web Request without depending on a test runner. */\nexport function createTestRequest(\n path: string | URL = \"/\",\n options: FarmTestRequestOptions = {},\n): Request {\n const url = resolveTestURL(path, options.origin);\n applyQuery(url.searchParams, options.query);\n\n const headers = new Headers(options.headers);\n applyCookies(headers, options.cookies);\n const { body, hasBody } = resolveRequestBody(options, headers);\n const method = (options.method ?? (hasBody ? \"POST\" : \"GET\")).toUpperCase();\n\n if ((method === \"GET\" || method === \"HEAD\") && body != null) {\n throw new TypeError(`Farm test requests cannot send a body with ${method}`);\n }\n\n const {\n origin: _origin,\n query: _query,\n cookies: _cookies,\n json: _json,\n form: _form,\n body: _body,\n headers: _headers,\n ...requestInit\n } = options;\n\n return new Request(url, {\n ...requestInit,\n method,\n headers,\n body,\n });\n}\n\n/**\n * Create test helpers that exercise Farm's real route, API, and server-function runtimes.\n * The harness has no dependency on Vitest, Jest, or a DOM environment.\n */\nexport function createFarmTestHarness<TContext = unknown>(\n options: FarmTestHarnessOptions<TContext> = {},\n): FarmTestHarness<TContext> {\n const origin = normalizeOrigin(options.origin);\n\n const request = (path: string | URL = \"/\", requestOptions: FarmTestRequestOptions = {}) =>\n createTestRequest(path, mergeRequestDefaults(options, origin, requestOptions));\n\n return {\n request,\n\n async route<TRoute extends AnyProgrammaticPageRoute>(\n route: TRoute,\n routeOptions: FarmTestRouteOptions<TRoute, TContext> = {},\n ): Promise<FarmTestRouteResult<TRoute>> {\n const requestPath =\n routeOptions.path ??\n buildFarmRoutePath(route.path, (routeOptions.params ?? {}) as FarmRouterPathParams);\n const routeRequest = request(requestPath, {\n origin: routeOptions.origin,\n headers: routeOptions.headers,\n cookies: routeOptions.cookies,\n signal: routeOptions.signal,\n query: routeOptions.search as FarmTestQuery | undefined,\n });\n const url = new URL(routeRequest.url);\n const params = resolvePageParams(route.path, url.pathname, routeOptions.params);\n const search = readSearchParams(url.searchParams);\n const routeContext = Object.prototype.hasOwnProperty.call(routeOptions, \"context\")\n ? routeOptions.context\n : await resolveFarmRouteContext(\n { context: options.context },\n {\n request: routeRequest,\n params,\n search,\n path: url.pathname,\n },\n );\n const rawProps = withFarmRouteContext(\n {\n params,\n searchParams: Promise.resolve(search),\n path: url.pathname,\n middleware: routeOptions.middleware,\n context: routeOptions.pluginContext,\n },\n routeContext,\n );\n const routeModule = createRouteModuleFromProgrammaticPage(route);\n const resolveProps = (\n routeModule as RouteModule & {\n __farmResolveRouteProps?: (props: typeof rawProps) => Promise<Record<string, unknown>>;\n }\n ).__farmResolveRouteProps;\n const resolvedProps = resolveProps\n ? await resolveProps(rawProps)\n : { ...rawProps, search, searchParams: Promise.resolve(search) };\n const canonicalPath = readCanonicalPath(resolvedProps);\n const componentProps = stripInternalRouteProps(resolvedProps) as FarmTestRouteProps<TRoute>;\n\n return {\n route,\n module: routeModule,\n request: routeRequest,\n props: componentProps,\n element: createElement(route.component, componentProps),\n canonicalPath,\n };\n },\n\n async api(route, apiOptions = {}) {\n const requestPath =\n apiOptions.path ?? buildFarmRoutePath(route.path, apiOptions.params ?? {});\n const method = apiOptions.method ?? getDefaultApiMethod(route);\n const apiRequest = request(requestPath, omitApiControlOptions({ ...apiOptions, method }));\n const match = matchAPIRoute(new Map([[route.path, route]]), new URL(apiRequest.url).pathname);\n\n if (!match) {\n return jsonErrorResponse(\"Not Found\", 404);\n }\n\n const endpoint = match.route.methods[apiRequest.method as ProgrammaticRouteMethod];\n if (!endpoint) {\n return jsonErrorResponse(\"Method Not Allowed\", 405);\n }\n\n return invokeTestEndpoint(endpoint, apiRequest, match.params, apiOptions.throwOnError);\n },\n\n async endpoint(endpoint, endpointOptions = {}) {\n const endpointRecord = endpoint as { __method?: string; __path?: string };\n const endpointPath = endpointOptions.path ?? endpointRecord.__path ?? \"/__farm/test/endpoint\";\n const endpointRequest = request(endpointPath, {\n ...omitEndpointControlOptions(endpointOptions),\n method: endpointOptions.method ?? endpointRecord.__method ?? \"GET\",\n });\n\n return invokeTestEndpoint(\n endpoint,\n endpointRequest,\n endpointOptions.params,\n endpointOptions.throwOnError,\n );\n },\n\n async serverFn<TInput, TResult>(\n serverFn: ServerFn<TInput, TResult>,\n ...args: FarmTestServerFnArguments<TInput>\n ): Promise<TResult> {\n const [input, serverFnOptions = {}] = args;\n const actionRequest =\n serverFnOptions.request ??\n request(serverFnOptions.path ?? \"/__farm/test/server-fn\", {\n origin: serverFnOptions.origin,\n headers: serverFnOptions.headers,\n cookies: serverFnOptions.cookies,\n signal: serverFnOptions.signal,\n method: \"POST\",\n });\n\n return await runWithServerActionRequest(actionRequest, () => serverFn(input as TInput));\n },\n\n clearCache() {\n getFarmDataCache().clear();\n },\n };\n}\n\nfunction resolveTestURL(path: string | URL, origin: string | undefined): URL {\n const url = path instanceof URL ? new URL(path) : new URL(path, `${normalizeOrigin(origin)}/`);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new TypeError(`Farm test requests require an HTTP(S) URL, received ${url.protocol}`);\n }\n return url;\n}\n\nfunction normalizeOrigin(origin = \"http://farm.test\"): string {\n let url: URL;\n try {\n url = new URL(origin);\n } catch {\n throw new TypeError(`Invalid Farm test origin: ${JSON.stringify(origin)}`);\n }\n\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new TypeError(`Farm test origins must use HTTP(S), received ${url.protocol}`);\n }\n\n return url.origin;\n}\n\nfunction mergeRequestDefaults<TContext>(\n harnessOptions: FarmTestHarnessOptions<TContext>,\n origin: string,\n requestOptions: FarmTestRequestOptions,\n): FarmTestRequestOptions {\n const headers = new Headers(harnessOptions.headers);\n new Headers(requestOptions.headers).forEach((value, key) => headers.set(key, value));\n\n return {\n ...requestOptions,\n origin: requestOptions.origin ?? origin,\n headers,\n cookies: {\n ...harnessOptions.cookies,\n ...requestOptions.cookies,\n },\n };\n}\n\nfunction applyQuery(searchParams: URLSearchParams, query: FarmTestQuery | undefined): void {\n if (!query) return;\n\n if (query instanceof URLSearchParams) {\n for (const key of new Set(query.keys())) {\n searchParams.delete(key);\n for (const value of query.getAll(key)) searchParams.append(key, value);\n }\n return;\n }\n\n for (const [key, rawValue] of Object.entries(query)) {\n searchParams.delete(key);\n const values = Array.isArray(rawValue) ? rawValue : [rawValue];\n for (const value of values) {\n if (value == null) continue;\n if (typeof value !== \"string\" && typeof value !== \"number\" && typeof value !== \"boolean\") {\n throw new TypeError(`Invalid query value for ${JSON.stringify(key)}`);\n }\n searchParams.append(key, String(value));\n }\n }\n}\n\nfunction applyCookies(headers: Headers, cookies: Record<string, string> | undefined): void {\n if (!cookies || Object.keys(cookies).length === 0) return;\n\n const value = Object.entries(cookies)\n .map(([name, cookieValue]) => `${encodeURIComponent(name)}=${encodeURIComponent(cookieValue)}`)\n .join(\"; \");\n const current = headers.get(\"cookie\");\n headers.set(\"cookie\", current ? `${current}; ${value}` : value);\n}\n\nfunction resolveRequestBody(\n options: FarmTestRequestOptions,\n headers: Headers,\n): { body: BodyInit | null; hasBody: boolean } {\n const sources = [\n options.json !== undefined,\n options.form !== undefined,\n options.body !== undefined,\n ];\n if (sources.filter(Boolean).length > 1) {\n throw new TypeError(\"Farm test requests accept only one of json, form, or body\");\n }\n\n if (options.json !== undefined) {\n if (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\");\n return { body: JSON.stringify(options.json), hasBody: true };\n }\n\n if (options.form !== undefined) {\n const formData = options.form instanceof FormData ? options.form : createFormData(options.form);\n return { body: formData, hasBody: true };\n }\n\n return {\n body: options.body ?? null,\n hasBody: options.body !== undefined,\n };\n}\n\nfunction createFormData(values: FarmTestFormValues): FormData {\n const formData = new FormData();\n for (const [key, rawValue] of Object.entries(values)) {\n const entries = Array.isArray(rawValue) ? rawValue : [rawValue];\n for (const value of entries) formData.append(key, value);\n }\n return formData;\n}\n\nfunction resolvePageParams(\n pattern: string,\n pathname: string,\n explicitParams: Record<string, unknown> | undefined,\n): Record<string, string> {\n const matchedParams = matchFarmRoute(pattern, pathname);\n if (!matchedParams) {\n throw new Error(\n `Path ${JSON.stringify(pathname)} does not match route ${JSON.stringify(pattern)}`,\n );\n }\n\n if (!explicitParams) return matchedParams;\n\n return Object.fromEntries(\n Object.entries(explicitParams).map(([key, value]) => [\n key,\n Array.isArray(value) ? value.map(String).join(\"/\") : String(value),\n ]),\n );\n}\n\nfunction readSearchParams(searchParams: URLSearchParams): Record<string, string> {\n const search: Record<string, string> = {};\n searchParams.forEach((value, key) => {\n search[key] = value;\n });\n return search;\n}\n\nfunction readCanonicalPath(props: Record<string, unknown>): string | undefined {\n return typeof props.__farmCanonicalPath === \"string\" ? props.__farmCanonicalPath : undefined;\n}\n\nfunction stripInternalRouteProps(props: Record<string, unknown>): Record<string, unknown> {\n const { __farmRoutePropsResolved, __farmCanonicalPath, ...componentProps } = props;\n return componentProps;\n}\n\nfunction getDefaultApiMethod(route: ProgrammaticApiRoute): ProgrammaticRouteMethod {\n if (route.methods.GET) return \"GET\";\n return (Object.keys(route.methods)[0] as ProgrammaticRouteMethod | undefined) ?? \"GET\";\n}\n\nfunction omitApiControlOptions(options: FarmTestApiOptions): FarmTestRequestOptions {\n const { path: _path, params: _params, throwOnError: _throwOnError, ...requestOptions } = options;\n return requestOptions;\n}\n\nfunction omitEndpointControlOptions(options: FarmTestEndpointOptions): FarmTestRequestOptions {\n const { path: _path, params: _params, throwOnError: _throwOnError, ...requestOptions } = options;\n return requestOptions;\n}\n\nasync function invokeTestEndpoint(\n endpoint: unknown,\n request: Request,\n params: APIRouteParams = {},\n throwOnError = false,\n): Promise<Response> {\n try {\n return await invokeAPIRouteEndpoint(endpoint, request, params);\n } catch (error) {\n if (throwOnError) throw error;\n return jsonErrorResponse(error instanceof Error ? error.message : \"Internal Server Error\", 500);\n }\n}\n\nfunction jsonErrorResponse(error: string, status: number): Response {\n return Response.json({ error }, { status });\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,81 @@
1
+ type FarmI18nRouting = "prefix-always" | "prefix-except-default" | "none";
2
+ type FarmI18nDetectionSignal = "url" | "cookie" | "accept-language";
3
+ type FarmI18nLocaleSource = FarmI18nDetectionSignal | "default" | "explicit";
4
+ type FarmI18nDirection = "ltr" | "rtl";
5
+ interface FarmI18nCookieConfig {
6
+ name?: string;
7
+ maxAge?: number;
8
+ path?: string;
9
+ sameSite?: "lax" | "strict" | "none";
10
+ secure?: boolean;
11
+ }
12
+ interface FarmI18nUserConfig {
13
+ locales: readonly string[];
14
+ defaultLocale: string;
15
+ /** Directory containing `<locale>.json`, or a path containing `{locale}`. */
16
+ messages?: string;
17
+ routing?: FarmI18nRouting;
18
+ detection?: false | readonly FarmI18nDetectionSignal[];
19
+ fallbackLocale?: string;
20
+ strict?: boolean;
21
+ cookie?: FarmI18nCookieConfig;
22
+ direction?: Partial<Record<string, FarmI18nDirection>>;
23
+ /** @deprecated Use `detection: false` to disable automatic detection. */
24
+ localeDetection?: boolean;
25
+ }
26
+ interface ResolvedFarmI18nCookieConfig {
27
+ name: string;
28
+ maxAge: number;
29
+ path: string;
30
+ sameSite: "lax" | "strict" | "none";
31
+ secure: boolean;
32
+ }
33
+ interface ResolvedFarmI18nConfig {
34
+ enabled: boolean;
35
+ locales: readonly string[];
36
+ defaultLocale: string;
37
+ messages: string;
38
+ routing: FarmI18nRouting;
39
+ detection: readonly FarmI18nDetectionSignal[];
40
+ fallbackLocale: string;
41
+ strict: boolean;
42
+ cookie: ResolvedFarmI18nCookieConfig;
43
+ direction: Readonly<Record<string, FarmI18nDirection>>;
44
+ }
45
+ type FarmI18nCatalog = Record<string, string>;
46
+ type FarmI18nCatalogs = Record<string, FarmI18nCatalog>;
47
+ interface FarmI18nClientSnapshot {
48
+ locale: string;
49
+ source: FarmI18nLocaleSource;
50
+ locales: readonly string[];
51
+ defaultLocale: string;
52
+ routing: FarmI18nRouting;
53
+ cookie: ResolvedFarmI18nCookieConfig;
54
+ direction: FarmI18nDirection;
55
+ messages: FarmI18nCatalog;
56
+ }
57
+ /** Generated `farm-i18n.d.ts` files augment this interface. */
58
+ interface FarmI18nMessageRegistry {
59
+ }
60
+ /** Generated `farm-i18n.d.ts` files augment this interface. */
61
+ interface FarmI18nLocaleRegistry {
62
+ }
63
+ type RegisteredMessageKey = Extract<keyof FarmI18nMessageRegistry, string>;
64
+ type RegisteredLocale = Extract<keyof FarmI18nLocaleRegistry, string>;
65
+ type FarmI18nMessageKey = [RegisteredMessageKey] extends [never] ? string : RegisteredMessageKey;
66
+ type FarmI18nLocale = [RegisteredLocale] extends [never] ? string : RegisteredLocale;
67
+ type FarmI18nMessageValues<TKey extends FarmI18nMessageKey> = TKey extends RegisteredMessageKey ? FarmI18nMessageRegistry[TKey] : Record<string, unknown>;
68
+ type FarmI18nMessageArgs<TKey extends FarmI18nMessageKey> = TKey extends RegisteredMessageKey ? keyof FarmI18nMessageRegistry[TKey] extends never ? [values?: FarmI18nMessageRegistry[TKey]] : [values: FarmI18nMessageRegistry[TKey]] : [values?: Record<string, unknown>];
69
+ interface FarmTranslator {
70
+ <TKey extends FarmI18nMessageKey>(key: TKey, ...args: FarmI18nMessageArgs<TKey>): string;
71
+ rich<TKey extends FarmI18nMessageKey>(key: TKey, ...args: FarmI18nMessageArgs<TKey>): unknown;
72
+ raw<TKey extends FarmI18nMessageKey>(key: TKey): string;
73
+ has(key: string): boolean;
74
+ }
75
+ declare global {
76
+ interface Window {
77
+ __FARM_I18N__?: FarmI18nClientSnapshot;
78
+ }
79
+ }
80
+
81
+ export type { FarmI18nCatalogs as F, ResolvedFarmI18nConfig as R, FarmI18nClientSnapshot as a, FarmI18nLocaleSource as b, FarmI18nLocale as c, FarmTranslator as d, FarmI18nMessageArgs as e, FarmI18nMessageKey as f, FarmI18nCookieConfig as g, FarmI18nDetectionSignal as h, FarmI18nDirection as i, FarmI18nRouting as j, FarmI18nUserConfig as k, FarmI18nCatalog as l, FarmI18nLocaleRegistry as m, FarmI18nMessageRegistry as n, FarmI18nMessageValues as o };
@@ -0,0 +1,81 @@
1
+ type FarmI18nRouting = "prefix-always" | "prefix-except-default" | "none";
2
+ type FarmI18nDetectionSignal = "url" | "cookie" | "accept-language";
3
+ type FarmI18nLocaleSource = FarmI18nDetectionSignal | "default" | "explicit";
4
+ type FarmI18nDirection = "ltr" | "rtl";
5
+ interface FarmI18nCookieConfig {
6
+ name?: string;
7
+ maxAge?: number;
8
+ path?: string;
9
+ sameSite?: "lax" | "strict" | "none";
10
+ secure?: boolean;
11
+ }
12
+ interface FarmI18nUserConfig {
13
+ locales: readonly string[];
14
+ defaultLocale: string;
15
+ /** Directory containing `<locale>.json`, or a path containing `{locale}`. */
16
+ messages?: string;
17
+ routing?: FarmI18nRouting;
18
+ detection?: false | readonly FarmI18nDetectionSignal[];
19
+ fallbackLocale?: string;
20
+ strict?: boolean;
21
+ cookie?: FarmI18nCookieConfig;
22
+ direction?: Partial<Record<string, FarmI18nDirection>>;
23
+ /** @deprecated Use `detection: false` to disable automatic detection. */
24
+ localeDetection?: boolean;
25
+ }
26
+ interface ResolvedFarmI18nCookieConfig {
27
+ name: string;
28
+ maxAge: number;
29
+ path: string;
30
+ sameSite: "lax" | "strict" | "none";
31
+ secure: boolean;
32
+ }
33
+ interface ResolvedFarmI18nConfig {
34
+ enabled: boolean;
35
+ locales: readonly string[];
36
+ defaultLocale: string;
37
+ messages: string;
38
+ routing: FarmI18nRouting;
39
+ detection: readonly FarmI18nDetectionSignal[];
40
+ fallbackLocale: string;
41
+ strict: boolean;
42
+ cookie: ResolvedFarmI18nCookieConfig;
43
+ direction: Readonly<Record<string, FarmI18nDirection>>;
44
+ }
45
+ type FarmI18nCatalog = Record<string, string>;
46
+ type FarmI18nCatalogs = Record<string, FarmI18nCatalog>;
47
+ interface FarmI18nClientSnapshot {
48
+ locale: string;
49
+ source: FarmI18nLocaleSource;
50
+ locales: readonly string[];
51
+ defaultLocale: string;
52
+ routing: FarmI18nRouting;
53
+ cookie: ResolvedFarmI18nCookieConfig;
54
+ direction: FarmI18nDirection;
55
+ messages: FarmI18nCatalog;
56
+ }
57
+ /** Generated `farm-i18n.d.ts` files augment this interface. */
58
+ interface FarmI18nMessageRegistry {
59
+ }
60
+ /** Generated `farm-i18n.d.ts` files augment this interface. */
61
+ interface FarmI18nLocaleRegistry {
62
+ }
63
+ type RegisteredMessageKey = Extract<keyof FarmI18nMessageRegistry, string>;
64
+ type RegisteredLocale = Extract<keyof FarmI18nLocaleRegistry, string>;
65
+ type FarmI18nMessageKey = [RegisteredMessageKey] extends [never] ? string : RegisteredMessageKey;
66
+ type FarmI18nLocale = [RegisteredLocale] extends [never] ? string : RegisteredLocale;
67
+ type FarmI18nMessageValues<TKey extends FarmI18nMessageKey> = TKey extends RegisteredMessageKey ? FarmI18nMessageRegistry[TKey] : Record<string, unknown>;
68
+ type FarmI18nMessageArgs<TKey extends FarmI18nMessageKey> = TKey extends RegisteredMessageKey ? keyof FarmI18nMessageRegistry[TKey] extends never ? [values?: FarmI18nMessageRegistry[TKey]] : [values: FarmI18nMessageRegistry[TKey]] : [values?: Record<string, unknown>];
69
+ interface FarmTranslator {
70
+ <TKey extends FarmI18nMessageKey>(key: TKey, ...args: FarmI18nMessageArgs<TKey>): string;
71
+ rich<TKey extends FarmI18nMessageKey>(key: TKey, ...args: FarmI18nMessageArgs<TKey>): unknown;
72
+ raw<TKey extends FarmI18nMessageKey>(key: TKey): string;
73
+ has(key: string): boolean;
74
+ }
75
+ declare global {
76
+ interface Window {
77
+ __FARM_I18N__?: FarmI18nClientSnapshot;
78
+ }
79
+ }
80
+
81
+ export type { FarmI18nCatalogs as F, ResolvedFarmI18nConfig as R, FarmI18nClientSnapshot as a, FarmI18nLocaleSource as b, FarmI18nLocale as c, FarmTranslator as d, FarmI18nMessageArgs as e, FarmI18nMessageKey as f, FarmI18nCookieConfig as g, FarmI18nDetectionSignal as h, FarmI18nDirection as i, FarmI18nRouting as j, FarmI18nUserConfig as k, FarmI18nCatalog as l, FarmI18nLocaleRegistry as m, FarmI18nMessageRegistry as n, FarmI18nMessageValues as o };