@farm.js/core 0.1.0-beta.1 → 0.1.0-beta.11

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 (310) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-runtime.d.mts +3 -2
  3. package/dist/agent-runtime.d.ts +3 -2
  4. package/dist/api/route-manager.cjs +410 -15
  5. package/dist/api/route-manager.cjs.map +1 -1
  6. package/dist/api/route-manager.d.mts +7 -5
  7. package/dist/api/route-manager.d.ts +7 -5
  8. package/dist/api/route-manager.mjs +9 -8
  9. package/dist/api/runtime.cjs +748 -9
  10. package/dist/api/runtime.cjs.map +1 -1
  11. package/dist/api/runtime.d.mts +3 -16
  12. package/dist/api/runtime.d.ts +3 -16
  13. package/dist/api/runtime.mjs +8 -1
  14. package/dist/api.cjs +1243 -342
  15. package/dist/api.cjs.map +1 -1
  16. package/dist/api.d.mts +8 -150
  17. package/dist/api.d.ts +8 -150
  18. package/dist/api.mjs +51 -21
  19. package/dist/{app-BiX4qb-d.d.mts → app-BNE2FoZ4.d.mts} +42 -5
  20. package/dist/{app-CFRNJXP1.d.ts → app-DRGUmJ3s.d.ts} +42 -5
  21. package/dist/app-markdown.cjs +32 -8
  22. package/dist/app-markdown.cjs.map +1 -1
  23. package/dist/app-markdown.d.mts +3 -2
  24. package/dist/app-markdown.d.ts +3 -2
  25. package/dist/app-markdown.mjs +2 -1
  26. package/dist/cache.cjs +414 -12
  27. package/dist/cache.cjs.map +1 -1
  28. package/dist/cache.d.mts +120 -6
  29. package/dist/cache.d.ts +120 -6
  30. package/dist/cache.mjs +11 -3
  31. package/dist/{chunk-QF4PHCMA.mjs → chunk-2ED5Q2GH.mjs} +3 -3
  32. package/dist/chunk-2ED5Q2GH.mjs.map +1 -0
  33. package/dist/{chunk-GZP5W4K3.mjs → chunk-32W4QEJP.mjs} +1 -1
  34. package/dist/chunk-32W4QEJP.mjs.map +1 -0
  35. package/dist/{chunk-G3B5BRDY.mjs → chunk-4677KXB7.mjs} +646 -86
  36. package/dist/chunk-4677KXB7.mjs.map +1 -0
  37. package/dist/{chunk-3QJO55ZF.mjs → chunk-4LND3PXF.mjs} +30 -38
  38. package/dist/chunk-4LND3PXF.mjs.map +1 -0
  39. package/dist/chunk-5EVQFRL2.mjs +10 -0
  40. package/dist/chunk-5EVQFRL2.mjs.map +1 -0
  41. package/dist/{chunk-25D7G34K.mjs → chunk-65A7QIKI.mjs} +5 -5
  42. package/dist/{chunk-25D7G34K.mjs.map → chunk-65A7QIKI.mjs.map} +1 -1
  43. package/dist/{chunk-CHFHNEMO.mjs → chunk-77BOAQHI.mjs} +1972 -188
  44. package/dist/chunk-77BOAQHI.mjs.map +1 -0
  45. package/dist/{chunk-LLC7BNXW.mjs → chunk-7FBJLMQH.mjs} +73 -10
  46. package/dist/chunk-7FBJLMQH.mjs.map +1 -0
  47. package/dist/{chunk-TRORP7E4.mjs → chunk-7N62DNSO.mjs} +2 -2
  48. package/dist/chunk-ALCLXXTY.mjs +187 -0
  49. package/dist/chunk-ALCLXXTY.mjs.map +1 -0
  50. package/dist/chunk-AW6I64AP.mjs +25 -0
  51. package/dist/chunk-AW6I64AP.mjs.map +1 -0
  52. package/dist/{chunk-B6N4ZB2H.mjs → chunk-C2ROET2V.mjs} +3 -3
  53. package/dist/{chunk-BHG3LVHH.mjs → chunk-CGIXMLSY.mjs} +15 -7
  54. package/dist/chunk-CGIXMLSY.mjs.map +1 -0
  55. package/dist/{chunk-C3DLZMBU.mjs → chunk-DJSGLHCN.mjs} +2 -2
  56. package/dist/{chunk-JN3UU635.mjs → chunk-EJ7T4TPB.mjs} +2 -2
  57. package/dist/chunk-EJ7T4TPB.mjs.map +1 -0
  58. package/dist/{chunk-ZJQNATYV.mjs → chunk-FRPWCMMG.mjs} +3 -3
  59. package/dist/chunk-FRPWCMMG.mjs.map +1 -0
  60. package/dist/{chunk-QM6VV26B.mjs → chunk-GQVGIUSN.mjs} +3 -3
  61. package/dist/{chunk-QM6VV26B.mjs.map → chunk-GQVGIUSN.mjs.map} +1 -1
  62. package/dist/{chunk-UREJA4GZ.mjs → chunk-GXASWWJU.mjs} +1 -1
  63. package/dist/{chunk-UREJA4GZ.mjs.map → chunk-GXASWWJU.mjs.map} +1 -1
  64. package/dist/chunk-I4CUBGVF.mjs +93 -0
  65. package/dist/chunk-I4CUBGVF.mjs.map +1 -0
  66. package/dist/{chunk-HXP3ZSPC.mjs → chunk-J5YWQVI5.mjs} +4 -4
  67. package/dist/chunk-J5YWQVI5.mjs.map +1 -0
  68. package/dist/{chunk-PRNYWD7K.mjs → chunk-JDEOUK5V.mjs} +67 -239
  69. package/dist/chunk-JDEOUK5V.mjs.map +1 -0
  70. package/dist/{chunk-UHE2TTLK.mjs → chunk-K5ZTUF22.mjs} +34 -17
  71. package/dist/chunk-K5ZTUF22.mjs.map +1 -0
  72. package/dist/{chunk-O3HADRW6.mjs → chunk-MIUW47JX.mjs} +2 -2
  73. package/dist/{chunk-O3HADRW6.mjs.map → chunk-MIUW47JX.mjs.map} +1 -1
  74. package/dist/chunk-PFE6GMNE.mjs +603 -0
  75. package/dist/chunk-PFE6GMNE.mjs.map +1 -0
  76. package/dist/{chunk-RKI6TN3A.mjs → chunk-QM746KUO.mjs} +9 -2
  77. package/dist/chunk-QM746KUO.mjs.map +1 -0
  78. package/dist/{chunk-TU4YJICB.mjs → chunk-QTZZ2ISQ.mjs} +41 -16
  79. package/dist/chunk-QTZZ2ISQ.mjs.map +1 -0
  80. package/dist/chunk-RBRLLZL5.mjs +81 -0
  81. package/dist/chunk-RBRLLZL5.mjs.map +1 -0
  82. package/dist/{chunk-RSKVYESE.mjs → chunk-RQ633A5I.mjs} +1 -1
  83. package/dist/chunk-RQ633A5I.mjs.map +1 -0
  84. package/dist/{chunk-6XDUHOEM.mjs → chunk-TQAEEJB4.mjs} +3 -3
  85. package/dist/{chunk-AGS7UJ52.mjs → chunk-UB5UOSHB.mjs} +24 -12
  86. package/dist/chunk-UB5UOSHB.mjs.map +1 -0
  87. package/dist/{chunk-SXZTEK3V.mjs → chunk-UXUAWNO5.mjs} +2 -2
  88. package/dist/chunk-V3XURYJO.mjs +756 -0
  89. package/dist/chunk-V3XURYJO.mjs.map +1 -0
  90. package/dist/{chunk-JLWMCADZ.mjs → chunk-VY2UYN5R.mjs} +24 -4
  91. package/dist/chunk-VY2UYN5R.mjs.map +1 -0
  92. package/dist/{chunk-QFQRHRZS.mjs → chunk-W2CRQFF6.mjs} +151 -23
  93. package/dist/chunk-W2CRQFF6.mjs.map +1 -0
  94. package/dist/{chunk-Y7A27276.mjs → chunk-WDU6QXNK.mjs} +349 -15
  95. package/dist/chunk-WDU6QXNK.mjs.map +1 -0
  96. package/dist/{chunk-Y2OJJD7R.mjs → chunk-XIVV5IWN.mjs} +7 -9
  97. package/dist/chunk-XIVV5IWN.mjs.map +1 -0
  98. package/dist/{chunk-OYXO65LI.mjs → chunk-YW7OBE6Q.mjs} +4 -4
  99. package/dist/chunk-YW7OBE6Q.mjs.map +1 -0
  100. package/dist/{chunk-YHU7SS6L.mjs → chunk-Z5CQMP54.mjs} +11 -11
  101. package/dist/{chunk-S2XHZS7W.mjs → chunk-ZVWA4ZQ3.mjs} +18 -9
  102. package/dist/chunk-ZVWA4ZQ3.mjs.map +1 -0
  103. package/dist/{chunk-SOU3Q3ZA.mjs → chunk-ZZ57EH5Z.mjs} +1 -1
  104. package/dist/chunk-ZZ57EH5Z.mjs.map +1 -0
  105. package/dist/{client-D_yUjVhe.d.mts → client-BT1mFQas.d.mts} +55 -10
  106. package/dist/{client-Dkc03WP8.d.ts → client-Nn0q4eO4.d.ts} +55 -10
  107. package/dist/{client-plugins-BZnpeTGA.d.ts → client-plugins-Bc5jHcNr.d.ts} +85 -6
  108. package/dist/{client-plugins-g4bzuCmo.d.mts → client-plugins-jsk-ZLzJ.d.mts} +85 -6
  109. package/dist/client-plugins.d.mts +3 -2
  110. package/dist/client-plugins.d.ts +3 -2
  111. package/dist/client.cjs +922 -91
  112. package/dist/client.cjs.map +1 -1
  113. package/dist/client.d.mts +124 -6
  114. package/dist/client.d.ts +124 -6
  115. package/dist/client.mjs +23 -16
  116. package/dist/config.d.mts +3 -2
  117. package/dist/config.d.ts +3 -2
  118. package/dist/cron.cjs.map +1 -1
  119. package/dist/cron.mjs +1 -1
  120. package/dist/{devtools-AE4RVXCM.mjs → devtools-A22KUJZT.mjs} +13 -12
  121. package/dist/{devtools-AE4RVXCM.mjs.map → devtools-A22KUJZT.mjs.map} +1 -1
  122. package/dist/{devtools-client-6WPY2AQU.mjs → devtools-client-3XRTBND5.mjs} +2 -11
  123. package/dist/devtools-client-3XRTBND5.mjs.map +1 -0
  124. package/dist/docs.cjs +65 -58
  125. package/dist/docs.cjs.map +1 -1
  126. package/dist/docs.mjs +13 -12
  127. package/dist/env-types.cjs +14 -5
  128. package/dist/env-types.cjs.map +1 -1
  129. package/dist/env-types.d.mts +2 -1
  130. package/dist/env-types.d.ts +2 -1
  131. package/dist/env-types.mjs +3 -1
  132. package/dist/env.cjs.map +1 -1
  133. package/dist/env.d.mts +1 -1
  134. package/dist/env.d.ts +1 -1
  135. package/dist/env.mjs +1 -1
  136. package/dist/font.cjs +47 -0
  137. package/dist/font.cjs.map +1 -0
  138. package/dist/font.d.mts +70 -0
  139. package/dist/font.d.ts +70 -0
  140. package/dist/font.mjs +10 -0
  141. package/dist/font.mjs.map +1 -0
  142. package/dist/i18n/client.d.mts +2 -2
  143. package/dist/i18n/client.d.ts +2 -2
  144. package/dist/i18n/index.d.mts +3 -3
  145. package/dist/i18n/index.d.ts +3 -3
  146. package/dist/i18n/server.cjs +2 -2
  147. package/dist/i18n/server.cjs.map +1 -1
  148. package/dist/i18n/server.d.mts +5 -5
  149. package/dist/i18n/server.d.ts +5 -5
  150. package/dist/i18n/server.mjs +1 -1
  151. package/dist/index.cjs +5016 -1108
  152. package/dist/index.cjs.map +1 -1
  153. package/dist/index.d.mts +23 -19
  154. package/dist/index.d.ts +23 -19
  155. package/dist/index.mjs +177 -121
  156. package/dist/index.mjs.map +1 -1
  157. package/dist/integrations.d.mts +3 -2
  158. package/dist/integrations.d.ts +3 -2
  159. package/dist/internal/build-runtime.cjs +3504 -581
  160. package/dist/internal/build-runtime.cjs.map +1 -1
  161. package/dist/internal/build-runtime.d.mts +5 -4
  162. package/dist/internal/build-runtime.d.ts +5 -4
  163. package/dist/internal/build-runtime.mjs +32 -29
  164. package/dist/internal/client-runtime.cjs.map +1 -1
  165. package/dist/internal/client-runtime.mjs +1 -1
  166. package/dist/internal/config-runtime.cjs +148 -41
  167. package/dist/internal/config-runtime.cjs.map +1 -1
  168. package/dist/internal/config-runtime.d.mts +4 -3
  169. package/dist/internal/config-runtime.d.ts +4 -3
  170. package/dist/internal/config-runtime.mjs +12 -11
  171. package/dist/internal/production-runtime.cjs +300 -9
  172. package/dist/internal/production-runtime.cjs.map +1 -1
  173. package/dist/internal/production-runtime.d.mts +10 -8
  174. package/dist/internal/production-runtime.d.ts +10 -8
  175. package/dist/internal/production-runtime.mjs +27 -9
  176. package/dist/internal/production-runtime.mjs.map +1 -1
  177. package/dist/markdown.cjs +73 -8
  178. package/dist/markdown.cjs.map +1 -1
  179. package/dist/markdown.d.mts +19 -2
  180. package/dist/markdown.d.ts +19 -2
  181. package/dist/markdown.mjs +5 -1
  182. package/dist/{metadata-C9NZxMDW.d.mts → metadata-7ffpT3jr.d.mts} +1 -1
  183. package/dist/{metadata-DAXRaOHx.d.ts → metadata-JHn-8eht.d.ts} +1 -1
  184. package/dist/middleware.cjs +2 -2
  185. package/dist/middleware.cjs.map +1 -1
  186. package/dist/middleware.d.mts +5 -4
  187. package/dist/middleware.d.ts +5 -4
  188. package/dist/middleware.mjs +3 -3
  189. package/dist/navigation.cjs +40 -15
  190. package/dist/navigation.cjs.map +1 -1
  191. package/dist/navigation.mjs +3 -3
  192. package/dist/{nitro-KME62MWG.mjs → nitro-QO5LV6QK.mjs} +11 -13
  193. package/dist/{nitro-KME62MWG.mjs.map → nitro-QO5LV6QK.mjs.map} +1 -1
  194. package/dist/plugin.cjs +2854 -590
  195. package/dist/plugin.cjs.map +1 -1
  196. package/dist/plugin.d.mts +3 -2
  197. package/dist/plugin.d.ts +3 -2
  198. package/dist/plugin.mjs +28 -25
  199. package/dist/{production-runtime-DRkCHUvJ.d.ts → production-runtime-9KG7GuvW.d.ts} +2 -2
  200. package/dist/{production-runtime-flrjp_nC.d.mts → production-runtime-B-fweKts.d.mts} +2 -2
  201. package/dist/{request-BrFBuc8G.d.mts → request-Dsq4kGW0.d.mts} +1 -1
  202. package/dist/{request-BslSZIRz.d.ts → request-udtobOLv.d.ts} +1 -1
  203. package/dist/request.d.mts +2 -2
  204. package/dist/request.d.ts +2 -2
  205. package/dist/{resolver-DlOPpjkB.d.mts → resolver-DJqjLMg_.d.mts} +1 -1
  206. package/dist/{resolver-C6iecsDV.d.ts → resolver-IH4RmPEl.d.ts} +1 -1
  207. package/dist/routes.cjs +276 -6
  208. package/dist/routes.cjs.map +1 -1
  209. package/dist/routes.d.mts +2 -2
  210. package/dist/routes.d.ts +2 -2
  211. package/dist/routes.mjs +4 -4
  212. package/dist/runtime-9nQjVM7X.d.mts +206 -0
  213. package/dist/{runtime-DeAAZ6gO.d.mts → runtime-Cxpq6xZN.d.mts} +2 -2
  214. package/dist/runtime-DgeS2skB.d.ts +206 -0
  215. package/dist/{runtime-B6GvwDS1.d.ts → runtime-bv63eUiO.d.ts} +2 -2
  216. package/dist/server-action-security.cjs +28 -10
  217. package/dist/server-action-security.cjs.map +1 -1
  218. package/dist/server-action-security.d.mts +2 -1
  219. package/dist/server-action-security.d.ts +2 -1
  220. package/dist/server-action-security.mjs +2 -2
  221. package/dist/server-fn-client.cjs.map +1 -1
  222. package/dist/server-fn-client.d.mts +1 -0
  223. package/dist/server-fn-client.d.ts +1 -0
  224. package/dist/server-fn-client.mjs +1 -1
  225. package/dist/server-fn.cjs +785 -3
  226. package/dist/server-fn.cjs.map +1 -1
  227. package/dist/server-fn.d.mts +10 -1
  228. package/dist/server-fn.d.ts +10 -1
  229. package/dist/server-fn.mjs +6 -3
  230. package/dist/server-plugins.d.mts +4 -3
  231. package/dist/server-plugins.d.ts +4 -3
  232. package/dist/server-query-client.cjs +279 -8
  233. package/dist/server-query-client.cjs.map +1 -1
  234. package/dist/server-query-client.mjs +4 -4
  235. package/dist/server-query.cjs +381 -10
  236. package/dist/server-query.cjs.map +1 -1
  237. package/dist/server-query.mjs +5 -5
  238. package/dist/server.cjs +3319 -841
  239. package/dist/server.cjs.map +1 -1
  240. package/dist/server.d.mts +12 -11
  241. package/dist/server.d.ts +12 -11
  242. package/dist/server.mjs +57 -36
  243. package/dist/server.mjs.map +1 -1
  244. package/dist/testing.cjs +436 -25
  245. package/dist/testing.cjs.map +1 -1
  246. package/dist/testing.d.mts +5 -4
  247. package/dist/testing.d.ts +5 -4
  248. package/dist/testing.mjs +19 -18
  249. package/dist/testing.mjs.map +1 -1
  250. package/dist/transport-BmbGTXA5.d.mts +49 -0
  251. package/dist/transport-BmbGTXA5.d.ts +49 -0
  252. package/dist/{types-BH1lhg5G.d.ts → types-BMxWr97v.d.mts} +2 -2
  253. package/dist/{types-BH1lhg5G.d.mts → types-BMxWr97v.d.ts} +2 -2
  254. package/dist/{utils-DA1yo54_.d.ts → utils-CA0z0c-2.d.ts} +1 -1
  255. package/dist/{utils-DOXXivjL.d.mts → utils-mYVkSOt2.d.mts} +1 -1
  256. package/dist/version.cjs +36 -0
  257. package/dist/version.cjs.map +1 -0
  258. package/dist/version.d.mts +3 -0
  259. package/dist/version.d.ts +3 -0
  260. package/dist/version.mjs +8 -0
  261. package/dist/version.mjs.map +1 -0
  262. package/dist/vite.cjs +2938 -668
  263. package/dist/vite.cjs.map +1 -1
  264. package/dist/vite.d.mts +3 -2
  265. package/dist/vite.d.ts +3 -2
  266. package/dist/vite.mjs +26 -23
  267. package/dist/workflows.cjs +6 -8
  268. package/dist/workflows.cjs.map +1 -1
  269. package/dist/workflows.mjs +1 -1
  270. package/package.json +22 -6
  271. package/types/api.d.ts +44 -0
  272. package/types/client.d.ts +221 -17
  273. package/types/image.d.ts +4 -0
  274. package/types/images.d.ts +59 -0
  275. package/dist/chunk-3QJO55ZF.mjs.map +0 -1
  276. package/dist/chunk-4PTK6KT4.mjs +0 -364
  277. package/dist/chunk-4PTK6KT4.mjs.map +0 -1
  278. package/dist/chunk-AGS7UJ52.mjs.map +0 -1
  279. package/dist/chunk-BHG3LVHH.mjs.map +0 -1
  280. package/dist/chunk-CHFHNEMO.mjs.map +0 -1
  281. package/dist/chunk-EVGBEZDF.mjs +0 -215
  282. package/dist/chunk-EVGBEZDF.mjs.map +0 -1
  283. package/dist/chunk-G3B5BRDY.mjs.map +0 -1
  284. package/dist/chunk-GZP5W4K3.mjs.map +0 -1
  285. package/dist/chunk-HXP3ZSPC.mjs.map +0 -1
  286. package/dist/chunk-JLWMCADZ.mjs.map +0 -1
  287. package/dist/chunk-JN3UU635.mjs.map +0 -1
  288. package/dist/chunk-LLC7BNXW.mjs.map +0 -1
  289. package/dist/chunk-OYXO65LI.mjs.map +0 -1
  290. package/dist/chunk-PRNYWD7K.mjs.map +0 -1
  291. package/dist/chunk-QF4PHCMA.mjs.map +0 -1
  292. package/dist/chunk-QFQRHRZS.mjs.map +0 -1
  293. package/dist/chunk-RKI6TN3A.mjs.map +0 -1
  294. package/dist/chunk-RSKVYESE.mjs.map +0 -1
  295. package/dist/chunk-S2XHZS7W.mjs.map +0 -1
  296. package/dist/chunk-SOU3Q3ZA.mjs.map +0 -1
  297. package/dist/chunk-TU4YJICB.mjs.map +0 -1
  298. package/dist/chunk-TXCFGOHW.mjs +0 -42
  299. package/dist/chunk-TXCFGOHW.mjs.map +0 -1
  300. package/dist/chunk-UHE2TTLK.mjs.map +0 -1
  301. package/dist/chunk-Y2OJJD7R.mjs.map +0 -1
  302. package/dist/chunk-Y7A27276.mjs.map +0 -1
  303. package/dist/chunk-ZJQNATYV.mjs.map +0 -1
  304. package/dist/devtools-client-6WPY2AQU.mjs.map +0 -1
  305. /package/dist/{chunk-TRORP7E4.mjs.map → chunk-7N62DNSO.mjs.map} +0 -0
  306. /package/dist/{chunk-B6N4ZB2H.mjs.map → chunk-C2ROET2V.mjs.map} +0 -0
  307. /package/dist/{chunk-C3DLZMBU.mjs.map → chunk-DJSGLHCN.mjs.map} +0 -0
  308. /package/dist/{chunk-6XDUHOEM.mjs.map → chunk-TQAEEJB4.mjs.map} +0 -0
  309. /package/dist/{chunk-SXZTEK3V.mjs.map → chunk-UXUAWNO5.mjs.map} +0 -0
  310. /package/dist/{chunk-YHU7SS6L.mjs.map → chunk-Z5CQMP54.mjs.map} +0 -0
package/types/client.d.ts CHANGED
@@ -3,16 +3,20 @@
3
3
  *
4
4
  * Provides stable exports for Link, useRouter, and API client so TypeScript
5
5
  * and IDEs resolve them even when the build output omits them. The generated
6
- * farm-routes.d.ts in your app augments LinkDefaultRoute for typed href.
6
+ * farm.d.ts in your app augments LinkDefaultRoute for typed href.
7
7
  */
8
8
 
9
9
  import type {
10
10
  AnchorHTMLAttributes,
11
+ ComponentType,
12
+ FormEvent,
13
+ FormHTMLAttributes,
11
14
  ReactElement,
12
15
  ReactNode,
13
16
  RefObject,
14
17
  RefAttributes,
15
18
  } from "react";
19
+ import type { DefinedCacheKey, InferCacheKeyData, RouteDataCacheKey } from "@farm.js/core/cache";
16
20
 
17
21
  declare module "@farm.js/core/client" {
18
22
  export interface MiddlewareProps {
@@ -378,6 +382,36 @@ declare module "@farm.js/core/client" {
378
382
  key: CacheKey<TData>;
379
383
  };
380
384
 
385
+ export interface FarmAPIStream<TItem> extends AsyncIterable<TItem> {
386
+ readonly response: Response;
387
+ cancel(reason?: unknown): Promise<void>;
388
+ }
389
+
390
+ export class APIClientError<
391
+ TCode extends string = string,
392
+ TData = unknown,
393
+ TStatus extends number = number,
394
+ > extends Error {
395
+ readonly code: TCode;
396
+ readonly data: TData;
397
+ readonly status: TStatus;
398
+ readonly response?: Response;
399
+
400
+ constructor(
401
+ code: TCode,
402
+ data: TData,
403
+ options: {
404
+ status: TStatus;
405
+ message: string;
406
+ response?: Response;
407
+ },
408
+ );
409
+ }
410
+
411
+ export type APIClientSystemError =
412
+ | APIClientError<"http_error", unknown, number>
413
+ | APIClientError<"network_error", unknown, 0>;
414
+
381
415
  export type RequestEvent = {
382
416
  requestId: string;
383
417
  method: StatusEvent["method"];
@@ -406,7 +440,7 @@ declare module "@farm.js/core/client" {
406
440
  export type CachePolicy = "cache-first" | "network-only" | "stale-while-revalidate";
407
441
 
408
442
  export type CacheOptions = {
409
- key?: string;
443
+ key?: RouteDataCacheKey;
410
444
  policy?: CachePolicy;
411
445
  staleTime?: number;
412
446
  gcTime?: number;
@@ -419,9 +453,9 @@ declare module "@farm.js/core/client" {
419
453
  };
420
454
 
421
455
  export type InvalidateTarget =
422
- | string
456
+ | RouteDataCacheKey
423
457
  | {
424
- key: string;
458
+ key: RouteDataCacheKey;
425
459
  }
426
460
  | {
427
461
  path: string;
@@ -439,7 +473,7 @@ declare module "@farm.js/core/client" {
439
473
 
440
474
  export type OptimisticUpdate =
441
475
  | [CallableRouteRef<any>, unknown, (prev: any) => any]
442
- | [CacheKey<any> | string, (prev: any) => any];
476
+ | [CacheKey<any> | DefinedCacheKey<any> | string, (prev: any) => any];
443
477
 
444
478
  export type OptimisticOptions<TUpdates extends readonly unknown[] = readonly OptimisticUpdate[]> =
445
479
  {
@@ -452,7 +486,7 @@ declare module "@farm.js/core/client" {
452
486
  TError = unknown,
453
487
  TUpdates extends readonly unknown[] = readonly OptimisticUpdate[],
454
488
  > = {
455
- key?: CacheKey<TData> | string;
489
+ key?: CacheKey<TData> | RouteDataCacheKey;
456
490
  cache?: CacheOptions;
457
491
  retry?: RetryOptions;
458
492
  invalidate?: InvalidateOptions;
@@ -496,11 +530,13 @@ declare module "@farm.js/core/client" {
496
530
  ]
497
531
  : never
498
532
  : TUpdate extends readonly [infer TKey, (prev: any) => any]
499
- ? TKey extends CacheKey<infer TData>
500
- ? [TKey, (prev: TData | undefined) => TData]
501
- : TKey extends string
502
- ? [TKey, (prev: unknown) => unknown]
503
- : never
533
+ ? TKey extends DefinedCacheKey<any, RouteDataCacheKey>
534
+ ? [TKey, (prev: InferCacheKeyData<TKey> | undefined) => InferCacheKeyData<TKey>]
535
+ : TKey extends CacheKey<infer TData>
536
+ ? [TKey, (prev: TData | undefined) => TData]
537
+ : TKey extends string
538
+ ? [TKey, (prev: unknown) => unknown]
539
+ : never
504
540
  : never;
505
541
 
506
542
  type NormalizeOptimisticUpdates<TUpdates extends readonly unknown[]> = {
@@ -514,8 +550,10 @@ declare module "@farm.js/core/client" {
514
550
  type TypedEndpointLike = {
515
551
  __types: {
516
552
  body: any;
553
+ inputBody?: any;
517
554
  query: any;
518
555
  response: any;
556
+ errors?: any;
519
557
  };
520
558
  };
521
559
 
@@ -554,13 +592,26 @@ declare module "@farm.js/core/client" {
554
592
  type HasRequiredKeys<T> = RequiredKeys<T> extends never ? false : true;
555
593
 
556
594
  // Type utilities to extract endpoint input/output types
595
+ type InferEndpointBody<T> = T extends {
596
+ __types: {
597
+ inputBody: infer TInputBody;
598
+ };
599
+ }
600
+ ? TInputBody
601
+ : T extends {
602
+ __types: {
603
+ body: infer TBody;
604
+ };
605
+ }
606
+ ? TBody
607
+ : never;
608
+
557
609
  type InferEndpointInput<T> = T extends {
558
610
  __types: {
559
- body: infer TBody;
560
611
  query: infer TQuery;
561
612
  };
562
613
  }
563
- ? SimplifyEndpointInput<BodyInputProp<TBody> & QueryInputProp<TQuery>>
614
+ ? SimplifyEndpointInput<BodyInputProp<InferEndpointBody<T>> & QueryInputProp<TQuery>>
564
615
  : {};
565
616
 
566
617
  type InferEndpointOutput<T> = T extends {
@@ -568,24 +619,177 @@ declare module "@farm.js/core/client" {
568
619
  response: infer R;
569
620
  };
570
621
  }
571
- ? R
622
+ ? R extends { readonly __farmStreamItem: infer TItem }
623
+ ? FarmAPIStream<TItem>
624
+ : R
572
625
  : any;
573
626
 
627
+ type InferEndpointError<T> = T extends {
628
+ __types: {
629
+ errors: infer TErrors;
630
+ };
631
+ }
632
+ ? keyof TErrors extends never
633
+ ? Error
634
+ :
635
+ | {
636
+ [TCode in keyof TErrors]: TErrors[TCode] extends {
637
+ data: infer TData;
638
+ status: infer TStatus extends number;
639
+ }
640
+ ? APIClientError<TCode & string, TData, TStatus>
641
+ : never;
642
+ }[keyof TErrors]
643
+ | APIClientSystemError
644
+ : Error;
645
+
574
646
  type EndpointMethod<T = any> = (<
575
647
  TUpdates extends readonly unknown[] = readonly OptimisticUpdate[],
576
648
  >(
577
649
  ...args: HasRequiredKeys<InferEndpointInput<T>> extends true
578
650
  ? [
579
651
  options: InferEndpointInput<T>,
580
- clientOptions?: ClientOptions<InferEndpointOutput<T>, Error, TUpdates>,
652
+ clientOptions?: ClientOptions<InferEndpointOutput<T>, InferEndpointError<T>, TUpdates>,
581
653
  ]
582
654
  : [
583
655
  options?: InferEndpointInput<T>,
584
- clientOptions?: ClientOptions<InferEndpointOutput<T>, Error, TUpdates>,
656
+ clientOptions?: ClientOptions<InferEndpointOutput<T>, InferEndpointError<T>, TUpdates>,
585
657
  ]
586
- ) => Promise<APIResult<InferEndpointOutput<T>, Error>>) &
658
+ ) => Promise<APIResult<InferEndpointOutput<T>, InferEndpointError<T>>>) &
587
659
  RouteRef<InferEndpointOutput<T>, InferEndpointInput<T>>;
588
660
 
661
+ export type MutationStatus = "idle" | "pending" | "success" | "error";
662
+
663
+ export type AnyMutationTarget = (...args: any[]) => Promise<any>;
664
+
665
+ export type InferMutationVariables<TTarget extends AnyMutationTarget> =
666
+ Parameters<TTarget> extends [] ? undefined : Parameters<TTarget>[0];
667
+
668
+ export type InferMutationData<TTarget extends AnyMutationTarget> = TTarget extends {
669
+ readonly __farmRouteData: infer TData;
670
+ }
671
+ ? TData
672
+ : Awaited<ReturnType<TTarget>>;
673
+
674
+ export type InferMutationError<TTarget extends AnyMutationTarget> = TTarget extends (
675
+ ...args: any[]
676
+ ) => Promise<APIResult<any, infer TError>>
677
+ ? TError
678
+ : Error;
679
+
680
+ export type MutationOptimisticContext<TVariables, TData> = {
681
+ variables: TVariables | undefined;
682
+ current: TData | null;
683
+ };
684
+
685
+ export type UseMutationOptions<TVariables, TData, TError = Error> = {
686
+ initialData?: TData | null;
687
+ resetOnMutate?: boolean;
688
+ optimistic?: (
689
+ context: MutationOptimisticContext<TVariables, TData>,
690
+ ) => TData | null | undefined;
691
+ rollbackOnError?: boolean;
692
+ request?: ClientOptions<TData, TError>;
693
+ onSuccess?: (data: TData, variables: TVariables | undefined) => void;
694
+ onError?: (error: TError, variables: TVariables | undefined) => void;
695
+ onSettled?: (
696
+ data: TData | null,
697
+ error: TError | null,
698
+ variables: TVariables | undefined,
699
+ ) => void;
700
+ };
701
+
702
+ export type MutationAsync<TTarget extends AnyMutationTarget, TData = InferMutationData<TTarget>> =
703
+ [] extends Parameters<TTarget>
704
+ ? (variables?: InferMutationVariables<TTarget>) => Promise<TData>
705
+ : (variables: InferMutationVariables<TTarget>) => Promise<TData>;
706
+
707
+ export type MutationTrigger<TTarget extends AnyMutationTarget> =
708
+ [] extends Parameters<TTarget>
709
+ ? (variables?: InferMutationVariables<TTarget>) => void
710
+ : (variables: InferMutationVariables<TTarget>) => void;
711
+
712
+ export type UseMutationReturn<
713
+ TTarget extends AnyMutationTarget,
714
+ TData = InferMutationData<TTarget>,
715
+ TError = InferMutationError<TTarget>,
716
+ > = {
717
+ pending: boolean;
718
+ status: MutationStatus;
719
+ data: TData | null;
720
+ error: TError | null;
721
+ variables: InferMutationVariables<TTarget> | undefined;
722
+ mutate: MutationTrigger<TTarget>;
723
+ mutateAsync: MutationAsync<TTarget, TData>;
724
+ reset: () => void;
725
+ };
726
+
727
+ export function useMutation<TTarget extends AnyMutationTarget>(
728
+ target: TTarget,
729
+ options?: UseMutationOptions<
730
+ InferMutationVariables<TTarget>,
731
+ InferMutationData<TTarget>,
732
+ InferMutationError<TTarget>
733
+ >,
734
+ ): UseMutationReturn<TTarget>;
735
+
736
+ export type FetcherState = "idle" | "submitting";
737
+
738
+ export type FetcherFormDataContext = {
739
+ form: HTMLFormElement | null;
740
+ submitter: HTMLElement | null;
741
+ };
742
+
743
+ export type UseFetcherOptions<TTarget extends AnyMutationTarget> = UseMutationOptions<
744
+ InferMutationVariables<TTarget>,
745
+ InferMutationData<TTarget>,
746
+ InferMutationError<TTarget>
747
+ > & {
748
+ mapFormData?: (
749
+ formData: FormData,
750
+ context: FetcherFormDataContext,
751
+ ) => InferMutationVariables<TTarget>;
752
+ };
753
+
754
+ export type FetcherFormProps = Omit<
755
+ FormHTMLAttributes<HTMLFormElement>,
756
+ "action" | "onSubmit"
757
+ > & {
758
+ action?: string | ((formData: FormData) => void | Promise<void>);
759
+ onSubmit?: (event: FormEvent<HTMLFormElement>) => void;
760
+ };
761
+
762
+ type FetcherInput<TTarget extends AnyMutationTarget> = InferMutationVariables<TTarget> | FormData;
763
+
764
+ export type FetcherSubmitAsync<TTarget extends AnyMutationTarget> =
765
+ [] extends Parameters<TTarget>
766
+ ? (input?: FetcherInput<TTarget>) => Promise<InferMutationData<TTarget>>
767
+ : (input: FetcherInput<TTarget>) => Promise<InferMutationData<TTarget>>;
768
+
769
+ export type FetcherSubmit<TTarget extends AnyMutationTarget> =
770
+ [] extends Parameters<TTarget>
771
+ ? (input?: FetcherInput<TTarget>) => void
772
+ : (input: FetcherInput<TTarget>) => void;
773
+
774
+ export type UseFetcherReturn<TTarget extends AnyMutationTarget> = {
775
+ state: FetcherState;
776
+ status: MutationStatus;
777
+ pending: boolean;
778
+ data: InferMutationData<TTarget> | null;
779
+ error: InferMutationError<TTarget> | null;
780
+ variables: InferMutationVariables<TTarget> | undefined;
781
+ formData: FormData | null;
782
+ submit: FetcherSubmit<TTarget>;
783
+ submitAsync: FetcherSubmitAsync<TTarget>;
784
+ Form: ComponentType<FetcherFormProps>;
785
+ reset: () => void;
786
+ };
787
+
788
+ export function useFetcher<TTarget extends AnyMutationTarget>(
789
+ target: TTarget,
790
+ options?: UseFetcherOptions<TTarget>,
791
+ ): UseFetcherReturn<TTarget>;
792
+
589
793
  type RouterToClient<T> = {
590
794
  [K in keyof T]: T[K] extends TypedEndpointLike
591
795
  ? EndpointMethod<T[K]>
@@ -0,0 +1,4 @@
1
+ /// <reference path="./images.d.ts" />
2
+
3
+ export * from "../dist/image";
4
+ export { default } from "../dist/image";
@@ -0,0 +1,59 @@
1
+ /** Static image imports available to every Farm application. */
2
+ declare module "*.avif" {
3
+ const image: import("@farm.js/core/image").StaticImageData;
4
+ export const src: string;
5
+ export const width: number;
6
+ export const height: number;
7
+ export const blurDataURL: string | undefined;
8
+ export default image;
9
+ }
10
+
11
+ declare module "*.gif" {
12
+ const image: import("@farm.js/core/image").StaticImageData;
13
+ export const src: string;
14
+ export const width: number;
15
+ export const height: number;
16
+ export const blurDataURL: string | undefined;
17
+ export default image;
18
+ }
19
+
20
+ declare module "*.jpeg" {
21
+ const image: import("@farm.js/core/image").StaticImageData;
22
+ export const src: string;
23
+ export const width: number;
24
+ export const height: number;
25
+ export const blurDataURL: string | undefined;
26
+ export default image;
27
+ }
28
+
29
+ declare module "*.jpg" {
30
+ const image: import("@farm.js/core/image").StaticImageData;
31
+ export const src: string;
32
+ export const width: number;
33
+ export const height: number;
34
+ export const blurDataURL: string | undefined;
35
+ export default image;
36
+ }
37
+
38
+ declare module "*.png" {
39
+ const image: import("@farm.js/core/image").StaticImageData;
40
+ export const src: string;
41
+ export const width: number;
42
+ export const height: number;
43
+ export const blurDataURL: string | undefined;
44
+ export default image;
45
+ }
46
+
47
+ declare module "*.webp" {
48
+ const image: import("@farm.js/core/image").StaticImageData;
49
+ export const src: string;
50
+ export const width: number;
51
+ export const height: number;
52
+ export const blurDataURL: string | undefined;
53
+ export default image;
54
+ }
55
+
56
+ declare module "*?url" {
57
+ const src: string;
58
+ export default src;
59
+ }