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

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 (254) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-runtime.d.mts +2 -1
  3. package/dist/agent-runtime.d.ts +2 -1
  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 +4 -2
  7. package/dist/api/route-manager.d.ts +4 -2
  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 +5 -147
  17. package/dist/api.d.ts +5 -147
  18. package/dist/api.mjs +51 -21
  19. package/dist/{app-CFRNJXP1.d.ts → app-BjN-da13.d.ts} +38 -3
  20. package/dist/{app-BiX4qb-d.d.mts → app-CakAr8Be.d.mts} +38 -3
  21. package/dist/app-markdown.cjs +1 -1
  22. package/dist/app-markdown.cjs.map +1 -1
  23. package/dist/app-markdown.d.mts +2 -1
  24. package/dist/app-markdown.d.ts +2 -1
  25. package/dist/app-markdown.mjs +1 -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-Y7A27276.mjs → chunk-2CUKEMVR.mjs} +349 -15
  32. package/dist/chunk-2CUKEMVR.mjs.map +1 -0
  33. package/dist/{chunk-QF4PHCMA.mjs → chunk-2ED5Q2GH.mjs} +3 -3
  34. package/dist/chunk-2ED5Q2GH.mjs.map +1 -0
  35. package/dist/{chunk-GZP5W4K3.mjs → chunk-32W4QEJP.mjs} +1 -1
  36. package/dist/chunk-32W4QEJP.mjs.map +1 -0
  37. package/dist/{chunk-TRORP7E4.mjs → chunk-3U3ZUQAQ.mjs} +2 -2
  38. package/dist/{chunk-25D7G34K.mjs → chunk-65A7QIKI.mjs} +5 -5
  39. package/dist/{chunk-25D7G34K.mjs.map → chunk-65A7QIKI.mjs.map} +1 -1
  40. package/dist/{chunk-G3B5BRDY.mjs → chunk-AJWRO5WE.mjs} +539 -61
  41. package/dist/chunk-AJWRO5WE.mjs.map +1 -0
  42. package/dist/chunk-ALCLXXTY.mjs +187 -0
  43. package/dist/chunk-ALCLXXTY.mjs.map +1 -0
  44. package/dist/{chunk-CHFHNEMO.mjs → chunk-AOBXKNS5.mjs} +627 -84
  45. package/dist/chunk-AOBXKNS5.mjs.map +1 -0
  46. package/dist/{chunk-B6N4ZB2H.mjs → chunk-C2ROET2V.mjs} +3 -3
  47. package/dist/{chunk-JN3UU635.mjs → chunk-EJ7T4TPB.mjs} +2 -2
  48. package/dist/chunk-EJ7T4TPB.mjs.map +1 -0
  49. package/dist/{chunk-ZJQNATYV.mjs → chunk-FRPWCMMG.mjs} +3 -3
  50. package/dist/chunk-FRPWCMMG.mjs.map +1 -0
  51. package/dist/{chunk-QM6VV26B.mjs → chunk-GQVGIUSN.mjs} +3 -3
  52. package/dist/{chunk-QM6VV26B.mjs.map → chunk-GQVGIUSN.mjs.map} +1 -1
  53. package/dist/{chunk-UREJA4GZ.mjs → chunk-GXASWWJU.mjs} +1 -1
  54. package/dist/{chunk-UREJA4GZ.mjs.map → chunk-GXASWWJU.mjs.map} +1 -1
  55. package/dist/{chunk-3QJO55ZF.mjs → chunk-HNIQFZKB.mjs} +5 -3
  56. package/dist/{chunk-3QJO55ZF.mjs.map → chunk-HNIQFZKB.mjs.map} +1 -1
  57. package/dist/{chunk-PRNYWD7K.mjs → chunk-JDEOUK5V.mjs} +67 -239
  58. package/dist/chunk-JDEOUK5V.mjs.map +1 -0
  59. package/dist/{chunk-O3HADRW6.mjs → chunk-MIUW47JX.mjs} +2 -2
  60. package/dist/{chunk-O3HADRW6.mjs.map → chunk-MIUW47JX.mjs.map} +1 -1
  61. package/dist/{chunk-UHE2TTLK.mjs → chunk-NM3CRAAL.mjs} +9 -8
  62. package/dist/chunk-NM3CRAAL.mjs.map +1 -0
  63. package/dist/chunk-PFE6GMNE.mjs +603 -0
  64. package/dist/chunk-PFE6GMNE.mjs.map +1 -0
  65. package/dist/{chunk-S2XHZS7W.mjs → chunk-QGQX7SFC.mjs} +2 -2
  66. package/dist/chunk-QGQX7SFC.mjs.map +1 -0
  67. package/dist/{chunk-RKI6TN3A.mjs → chunk-QM746KUO.mjs} +9 -2
  68. package/dist/chunk-QM746KUO.mjs.map +1 -0
  69. package/dist/chunk-RBRLLZL5.mjs +81 -0
  70. package/dist/chunk-RBRLLZL5.mjs.map +1 -0
  71. package/dist/{chunk-HXP3ZSPC.mjs → chunk-SADGIRS2.mjs} +3 -3
  72. package/dist/{chunk-6XDUHOEM.mjs → chunk-TQAEEJB4.mjs} +3 -3
  73. package/dist/{chunk-AGS7UJ52.mjs → chunk-UB5UOSHB.mjs} +24 -12
  74. package/dist/chunk-UB5UOSHB.mjs.map +1 -0
  75. package/dist/{chunk-SXZTEK3V.mjs → chunk-UXUAWNO5.mjs} +2 -2
  76. package/dist/chunk-V3XURYJO.mjs +756 -0
  77. package/dist/chunk-V3XURYJO.mjs.map +1 -0
  78. package/dist/{chunk-TU4YJICB.mjs → chunk-VVKWFZAH.mjs} +41 -16
  79. package/dist/chunk-VVKWFZAH.mjs.map +1 -0
  80. package/dist/{chunk-JLWMCADZ.mjs → chunk-VY2UYN5R.mjs} +24 -4
  81. package/dist/chunk-VY2UYN5R.mjs.map +1 -0
  82. package/dist/{chunk-QFQRHRZS.mjs → chunk-W2CRQFF6.mjs} +151 -23
  83. package/dist/chunk-W2CRQFF6.mjs.map +1 -0
  84. package/dist/chunk-W4UIVMVI.mjs +10 -0
  85. package/dist/chunk-W4UIVMVI.mjs.map +1 -0
  86. package/dist/{chunk-Y2OJJD7R.mjs → chunk-XIVV5IWN.mjs} +7 -9
  87. package/dist/chunk-XIVV5IWN.mjs.map +1 -0
  88. package/dist/{chunk-OYXO65LI.mjs → chunk-YW7OBE6Q.mjs} +4 -4
  89. package/dist/chunk-YW7OBE6Q.mjs.map +1 -0
  90. package/dist/{chunk-YHU7SS6L.mjs → chunk-Z5CQMP54.mjs} +11 -11
  91. package/dist/{chunk-SOU3Q3ZA.mjs → chunk-ZZ57EH5Z.mjs} +1 -1
  92. package/dist/chunk-ZZ57EH5Z.mjs.map +1 -0
  93. package/dist/{client-D_yUjVhe.d.mts → client-BT1mFQas.d.mts} +55 -10
  94. package/dist/{client-Dkc03WP8.d.ts → client-Nn0q4eO4.d.ts} +55 -10
  95. package/dist/{client-plugins-BZnpeTGA.d.ts → client-plugins-Cw4qUGsw.d.ts} +7 -0
  96. package/dist/{client-plugins-g4bzuCmo.d.mts → client-plugins-DQQ1adXM.d.mts} +7 -0
  97. package/dist/client-plugins.d.mts +2 -1
  98. package/dist/client-plugins.d.ts +2 -1
  99. package/dist/client.cjs +922 -91
  100. package/dist/client.cjs.map +1 -1
  101. package/dist/client.d.mts +121 -3
  102. package/dist/client.d.ts +121 -3
  103. package/dist/client.mjs +23 -16
  104. package/dist/config.d.mts +2 -1
  105. package/dist/config.d.ts +2 -1
  106. package/dist/cron.cjs.map +1 -1
  107. package/dist/cron.mjs +1 -1
  108. package/dist/{devtools-AE4RVXCM.mjs → devtools-LVC3VB5P.mjs} +10 -10
  109. package/dist/{devtools-client-6WPY2AQU.mjs → devtools-client-3XRTBND5.mjs} +2 -11
  110. package/dist/devtools-client-3XRTBND5.mjs.map +1 -0
  111. package/dist/docs.cjs +14 -2
  112. package/dist/docs.cjs.map +1 -1
  113. package/dist/docs.mjs +10 -10
  114. package/dist/i18n/server.cjs +2 -2
  115. package/dist/i18n/server.cjs.map +1 -1
  116. package/dist/i18n/server.mjs +1 -1
  117. package/dist/index.cjs +2852 -463
  118. package/dist/index.cjs.map +1 -1
  119. package/dist/index.d.mts +13 -12
  120. package/dist/index.d.ts +13 -12
  121. package/dist/index.mjs +152 -109
  122. package/dist/index.mjs.map +1 -1
  123. package/dist/integrations.d.mts +2 -1
  124. package/dist/integrations.d.ts +2 -1
  125. package/dist/internal/build-runtime.cjs +1616 -149
  126. package/dist/internal/build-runtime.cjs.map +1 -1
  127. package/dist/internal/build-runtime.d.mts +4 -3
  128. package/dist/internal/build-runtime.d.ts +4 -3
  129. package/dist/internal/build-runtime.mjs +27 -25
  130. package/dist/internal/client-runtime.cjs.map +1 -1
  131. package/dist/internal/client-runtime.mjs +1 -1
  132. package/dist/internal/config-runtime.cjs +13 -2
  133. package/dist/internal/config-runtime.cjs.map +1 -1
  134. package/dist/internal/config-runtime.d.mts +3 -2
  135. package/dist/internal/config-runtime.d.ts +3 -2
  136. package/dist/internal/config-runtime.mjs +9 -9
  137. package/dist/internal/production-runtime.cjs +285 -9
  138. package/dist/internal/production-runtime.cjs.map +1 -1
  139. package/dist/internal/production-runtime.d.mts +4 -4
  140. package/dist/internal/production-runtime.d.ts +4 -4
  141. package/dist/internal/production-runtime.mjs +10 -8
  142. package/dist/{metadata-DAXRaOHx.d.ts → metadata-BAPg_Nmo.d.ts} +1 -1
  143. package/dist/{metadata-C9NZxMDW.d.mts → metadata-_6i9oFG3.d.mts} +1 -1
  144. package/dist/middleware.cjs +2 -2
  145. package/dist/middleware.cjs.map +1 -1
  146. package/dist/middleware.d.mts +4 -3
  147. package/dist/middleware.d.ts +4 -3
  148. package/dist/middleware.mjs +3 -3
  149. package/dist/navigation.cjs +40 -15
  150. package/dist/navigation.cjs.map +1 -1
  151. package/dist/navigation.mjs +3 -3
  152. package/dist/{nitro-KME62MWG.mjs → nitro-QO5LV6QK.mjs} +11 -13
  153. package/dist/{nitro-KME62MWG.mjs.map → nitro-QO5LV6QK.mjs.map} +1 -1
  154. package/dist/plugin.cjs +1032 -92
  155. package/dist/plugin.cjs.map +1 -1
  156. package/dist/plugin.d.mts +2 -1
  157. package/dist/plugin.d.ts +2 -1
  158. package/dist/plugin.mjs +23 -21
  159. package/dist/{production-runtime-DRkCHUvJ.d.ts → production-runtime-BoJDc5mc.d.ts} +1 -1
  160. package/dist/{production-runtime-flrjp_nC.d.mts → production-runtime-DPfgMV9Y.d.mts} +1 -1
  161. package/dist/routes.cjs +276 -6
  162. package/dist/routes.cjs.map +1 -1
  163. package/dist/routes.d.mts +1 -1
  164. package/dist/routes.d.ts +1 -1
  165. package/dist/routes.mjs +4 -4
  166. package/dist/runtime-9nQjVM7X.d.mts +206 -0
  167. package/dist/runtime-DgeS2skB.d.ts +206 -0
  168. package/dist/server-action-security.cjs +28 -10
  169. package/dist/server-action-security.cjs.map +1 -1
  170. package/dist/server-action-security.d.mts +2 -1
  171. package/dist/server-action-security.d.ts +2 -1
  172. package/dist/server-action-security.mjs +2 -2
  173. package/dist/server-fn-client.cjs.map +1 -1
  174. package/dist/server-fn-client.d.mts +1 -0
  175. package/dist/server-fn-client.d.ts +1 -0
  176. package/dist/server-fn-client.mjs +1 -1
  177. package/dist/server-fn.cjs +785 -3
  178. package/dist/server-fn.cjs.map +1 -1
  179. package/dist/server-fn.d.mts +10 -1
  180. package/dist/server-fn.d.ts +10 -1
  181. package/dist/server-fn.mjs +6 -3
  182. package/dist/server-plugins.d.mts +3 -2
  183. package/dist/server-plugins.d.ts +3 -2
  184. package/dist/server-query-client.cjs +278 -7
  185. package/dist/server-query-client.cjs.map +1 -1
  186. package/dist/server-query-client.mjs +4 -4
  187. package/dist/server-query.cjs +381 -10
  188. package/dist/server-query.cjs.map +1 -1
  189. package/dist/server-query.mjs +5 -5
  190. package/dist/server.cjs +1233 -118
  191. package/dist/server.cjs.map +1 -1
  192. package/dist/server.d.mts +8 -7
  193. package/dist/server.d.ts +8 -7
  194. package/dist/server.mjs +53 -33
  195. package/dist/server.mjs.map +1 -1
  196. package/dist/testing.cjs +436 -25
  197. package/dist/testing.cjs.map +1 -1
  198. package/dist/testing.d.mts +4 -3
  199. package/dist/testing.d.ts +4 -3
  200. package/dist/testing.mjs +19 -18
  201. package/dist/testing.mjs.map +1 -1
  202. package/dist/transport-BmbGTXA5.d.mts +49 -0
  203. package/dist/transport-BmbGTXA5.d.ts +49 -0
  204. package/dist/{utils-DOXXivjL.d.mts → utils-CHXlMDkg.d.mts} +1 -1
  205. package/dist/{utils-DA1yo54_.d.ts → utils-Drsyz1Vj.d.ts} +1 -1
  206. package/dist/version.cjs +36 -0
  207. package/dist/version.cjs.map +1 -0
  208. package/dist/version.d.mts +3 -0
  209. package/dist/version.d.ts +3 -0
  210. package/dist/version.mjs +8 -0
  211. package/dist/version.mjs.map +1 -0
  212. package/dist/vite.cjs +1039 -93
  213. package/dist/vite.cjs.map +1 -1
  214. package/dist/vite.d.mts +2 -1
  215. package/dist/vite.d.ts +2 -1
  216. package/dist/vite.mjs +23 -21
  217. package/dist/workflows.cjs +6 -8
  218. package/dist/workflows.cjs.map +1 -1
  219. package/dist/workflows.mjs +1 -1
  220. package/package.json +12 -5
  221. package/types/api.d.ts +44 -0
  222. package/types/client.d.ts +220 -16
  223. package/dist/chunk-4PTK6KT4.mjs +0 -364
  224. package/dist/chunk-4PTK6KT4.mjs.map +0 -1
  225. package/dist/chunk-AGS7UJ52.mjs.map +0 -1
  226. package/dist/chunk-CHFHNEMO.mjs.map +0 -1
  227. package/dist/chunk-EVGBEZDF.mjs +0 -215
  228. package/dist/chunk-EVGBEZDF.mjs.map +0 -1
  229. package/dist/chunk-G3B5BRDY.mjs.map +0 -1
  230. package/dist/chunk-GZP5W4K3.mjs.map +0 -1
  231. package/dist/chunk-JLWMCADZ.mjs.map +0 -1
  232. package/dist/chunk-JN3UU635.mjs.map +0 -1
  233. package/dist/chunk-OYXO65LI.mjs.map +0 -1
  234. package/dist/chunk-PRNYWD7K.mjs.map +0 -1
  235. package/dist/chunk-QF4PHCMA.mjs.map +0 -1
  236. package/dist/chunk-QFQRHRZS.mjs.map +0 -1
  237. package/dist/chunk-RKI6TN3A.mjs.map +0 -1
  238. package/dist/chunk-S2XHZS7W.mjs.map +0 -1
  239. package/dist/chunk-SOU3Q3ZA.mjs.map +0 -1
  240. package/dist/chunk-TU4YJICB.mjs.map +0 -1
  241. package/dist/chunk-TXCFGOHW.mjs +0 -42
  242. package/dist/chunk-TXCFGOHW.mjs.map +0 -1
  243. package/dist/chunk-UHE2TTLK.mjs.map +0 -1
  244. package/dist/chunk-Y2OJJD7R.mjs.map +0 -1
  245. package/dist/chunk-Y7A27276.mjs.map +0 -1
  246. package/dist/chunk-ZJQNATYV.mjs.map +0 -1
  247. package/dist/devtools-client-6WPY2AQU.mjs.map +0 -1
  248. /package/dist/{chunk-TRORP7E4.mjs.map → chunk-3U3ZUQAQ.mjs.map} +0 -0
  249. /package/dist/{chunk-B6N4ZB2H.mjs.map → chunk-C2ROET2V.mjs.map} +0 -0
  250. /package/dist/{chunk-HXP3ZSPC.mjs.map → chunk-SADGIRS2.mjs.map} +0 -0
  251. /package/dist/{chunk-6XDUHOEM.mjs.map → chunk-TQAEEJB4.mjs.map} +0 -0
  252. /package/dist/{chunk-SXZTEK3V.mjs.map → chunk-UXUAWNO5.mjs.map} +0 -0
  253. /package/dist/{chunk-YHU7SS6L.mjs.map → chunk-Z5CQMP54.mjs.map} +0 -0
  254. /package/dist/{devtools-AE4RVXCM.mjs.map → devtools-LVC3VB5P.mjs.map} +0 -0
package/dist/routes.mjs CHANGED
@@ -19,12 +19,12 @@ import {
19
19
  redirect,
20
20
  routesBuilder,
21
21
  scanProgrammaticPagePaths
22
- } from "./chunk-B6N4ZB2H.mjs";
22
+ } from "./chunk-C2ROET2V.mjs";
23
23
  import "./chunk-QKVUNGAH.mjs";
24
- import "./chunk-QM6VV26B.mjs";
25
- import "./chunk-4PTK6KT4.mjs";
26
- import "./chunk-TXCFGOHW.mjs";
24
+ import "./chunk-GQVGIUSN.mjs";
25
+ import "./chunk-V3XURYJO.mjs";
27
26
  import "./chunk-WZ5QFROO.mjs";
27
+ import "./chunk-RBRLLZL5.mjs";
28
28
  import "./chunk-7ZY5AIJO.mjs";
29
29
  import "./chunk-CGILA3WO.mjs";
30
30
  export {
@@ -0,0 +1,206 @@
1
+ import { FarmCacheInvalidationTarget } from './cache.mjs';
2
+ import { M as MultipartSchema, T as TypedFormData } from './transport-BmbGTXA5.mjs';
3
+
4
+ type AnySchema = {
5
+ _output?: any;
6
+ _input?: any;
7
+ parse?: (data: unknown) => any;
8
+ };
9
+ type MaybePromise<T> = T | Promise<T>;
10
+ type Simplify<T> = {
11
+ [TKey in keyof T]: T[TKey];
12
+ } & {};
13
+ type UnionToIntersection<T> = (T extends unknown ? (value: T) => void : never) extends (value: infer TIntersection) => void ? TIntersection : never;
14
+ type InferOutput<T> = T extends {
15
+ _output: infer O;
16
+ } ? O : T extends {
17
+ parse: (data: unknown) => infer R;
18
+ } ? R : unknown;
19
+ type InferBodyInput<T> = T extends MultipartSchema<AnySchema> ? TypedFormData<InferOutput<T>> : InferOutput<T>;
20
+ type InferHeadersOutput<T> = [T] extends [never] ? Record<string, string> : T extends AnySchema ? InferOutput<T> : Record<string, string>;
21
+ type EndpointErrorDefinition<TSchema extends AnySchema = AnySchema, TStatus extends number = number> = {
22
+ status: TStatus;
23
+ schema: TSchema;
24
+ /** Public message safe to expose to API callers. */
25
+ message?: string;
26
+ };
27
+ type EndpointErrorDefinitions = Record<string, EndpointErrorDefinition<AnySchema, number>>;
28
+ type EndpointErrorContracts<TErrors extends EndpointErrorDefinitions> = {
29
+ [TCode in keyof TErrors]: {
30
+ data: InferOutput<TErrors[TCode]["schema"]>;
31
+ status: TErrors[TCode]["status"];
32
+ };
33
+ };
34
+ type EndpointFail<TErrors extends EndpointErrorDefinitions> = <TCode extends keyof TErrors & string>(code: TCode, data: InferOutput<TErrors[TCode]["schema"]>) => never;
35
+ declare class EndpointFailure<TCode extends string = string, TData = unknown> extends Error {
36
+ readonly code: TCode;
37
+ readonly data: TData;
38
+ readonly status: number;
39
+ constructor(code: TCode, data: TData, options: {
40
+ status: number;
41
+ message: string;
42
+ });
43
+ }
44
+ declare function isEndpointFailure(value: unknown): value is EndpointFailure<string, unknown>;
45
+ type EndpointParamValue = string | string[];
46
+ type EndpointParams = Record<string, EndpointParamValue>;
47
+ type EndpointMiddlewareContext<TContext extends object = {}, TBody = unknown, TQuery = unknown, THeaders = Record<string, string>> = {
48
+ body: TBody;
49
+ query: TQuery;
50
+ headers: THeaders;
51
+ request: Request;
52
+ /** Context accumulated from middleware that ran earlier in the chain. */
53
+ context: Readonly<TContext>;
54
+ params: EndpointParams;
55
+ };
56
+ type EndpointMiddlewareResult<TProvidedContext extends object = object> = TProvidedContext | true | false | Response;
57
+ /** A plain async function. No wrapper or `next()` callback is required. */
58
+ type EndpointMiddleware<TProvidedContext extends object = object, TContext extends object = {}, TBody = unknown, TQuery = unknown, THeaders = Record<string, string>> = (ctx: EndpointMiddlewareContext<TContext, TBody, TQuery, THeaders>) => MaybePromise<EndpointMiddlewareResult<TProvidedContext>>;
59
+ type AnyEndpointMiddleware = (ctx: EndpointMiddlewareContext<any, any, any, any>) => unknown;
60
+ type EndpointInvalidationTarget = FarmCacheInvalidationTarget;
61
+ type EndpointInvalidationContext<TContext extends object = {}, TBody = unknown, TQuery = unknown, THeaders = Record<string, string>> = EndpointMiddlewareContext<TContext, TBody, TQuery, THeaders> & {
62
+ /** The raw value returned by the endpoint handler. */
63
+ result: unknown;
64
+ };
65
+ type EndpointInvalidations<TContext extends object = {}, TBody = unknown, TQuery = unknown, THeaders = Record<string, string>> = readonly EndpointInvalidationTarget[] | ((context: EndpointInvalidationContext<TContext, TBody, TQuery, THeaders>) => readonly EndpointInvalidationTarget[] | Promise<readonly EndpointInvalidationTarget[]>);
66
+ type ValidateEndpointMiddlewares<TMiddlewares extends readonly AnyEndpointMiddleware[]> = {
67
+ readonly [TIndex in keyof TMiddlewares]: TMiddlewares[TIndex] extends AnyEndpointMiddleware ? [Awaited<ReturnType<TMiddlewares[TIndex]>>] extends [EndpointMiddlewareResult<object>] ? TMiddlewares[TIndex] : never : never;
68
+ };
69
+ type ContextFromMiddlewareResult<TResult> = Exclude<TResult, Response | boolean> extends infer TContext ? [TContext] extends [never] ? {} : TContext extends object ? TContext : {} : {};
70
+ type ContextFromMiddleware<TMiddleware> = TMiddleware extends (...args: any[]) => infer TResult ? ContextFromMiddlewareResult<Awaited<TResult>> : {};
71
+ type InferEndpointMiddlewareContext<TMiddlewares extends readonly ((...args: any[]) => any)[], TContext extends object = {}> = TMiddlewares extends readonly [infer TMiddleware, ...infer TRest] ? TMiddleware extends (...args: any[]) => any ? TRest extends readonly ((...args: any[]) => any)[] ? InferEndpointMiddlewareContext<TRest, Simplify<TContext & ContextFromMiddleware<TMiddleware>>> : Simplify<TContext> : Simplify<TContext> : number extends TMiddlewares["length"] ? Simplify<TContext & UnionToIntersection<ContextFromMiddleware<TMiddlewares[number]>>> : Simplify<TContext>;
72
+ type EndpointOptions<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TMiddlewares extends readonly AnyEndpointMiddleware[] = readonly [], TErrors extends EndpointErrorDefinitions = {}> = {
73
+ method?: "GET" | "HEAD" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS";
74
+ body?: TBody;
75
+ query?: TQuery;
76
+ headers?: THeaders;
77
+ middleware?: TMiddlewares;
78
+ /**
79
+ * Cache keys, tags, and route paths made stale after a successful handler result.
80
+ * The resolver receives validated input and middleware context.
81
+ */
82
+ invalidates?: EndpointInvalidations<InferEndpointMiddlewareContext<TMiddlewares>, InferOutput<TBody>, InferOutput<TQuery>, InferHeadersOutput<THeaders>>;
83
+ errors?: TErrors;
84
+ /** @deprecated Use plain functions in `middleware` for Farm endpoint middleware. */
85
+ use?: any[];
86
+ };
87
+ type EndpointHandler<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any, TContext extends object = {}, TErrors extends EndpointErrorDefinitions = {}> = (ctx: {
88
+ body: InferOutput<TBody>;
89
+ query: InferOutput<TQuery>;
90
+ headers: InferHeadersOutput<THeaders>;
91
+ request: Request;
92
+ context: Readonly<TContext>;
93
+ params: EndpointParams;
94
+ fail: EndpointFail<TErrors>;
95
+ }) => Promise<TResponse> | TResponse;
96
+ type TypedEndpoint<TBody = never, TQuery = never, TResponse = any, THeaders = Record<string, string>, TErrors = never, TBodyInput = TBody> = {
97
+ __types: {
98
+ body: TBody;
99
+ inputBody: TBodyInput;
100
+ query: TQuery;
101
+ headers: THeaders;
102
+ response: TResponse;
103
+ errors: TErrors;
104
+ };
105
+ __path?: string;
106
+ __method?: string;
107
+ } & ((options?: {
108
+ body?: TBody;
109
+ query?: TQuery;
110
+ }) => Promise<TResponse>);
111
+ type CreatedEndpoint<TBody extends AnySchema, TQuery extends AnySchema, THeaders extends AnySchema, TResponse, TErrors extends EndpointErrorDefinitions = {}> = TypedEndpoint<InferOutput<TBody>, InferOutput<TQuery>, Awaited<TResponse>, InferHeadersOutput<THeaders>, EndpointErrorContracts<TErrors>, InferBodyInput<TBody>>;
112
+ type AnyEndpointOptions = EndpointOptions<AnySchema, AnySchema, AnySchema, readonly AnyEndpointMiddleware[], EndpointErrorDefinitions>;
113
+ type EndpointBodyFromOptions<TOptions> = TOptions extends {
114
+ body: infer TBody extends AnySchema;
115
+ } ? TBody : never;
116
+ type EndpointQueryFromOptions<TOptions> = TOptions extends {
117
+ query: infer TQuery extends AnySchema;
118
+ } ? TQuery : never;
119
+ type EndpointHeadersFromOptions<TOptions> = TOptions extends {
120
+ headers: infer THeaders extends AnySchema;
121
+ } ? THeaders : never;
122
+ type EndpointMiddlewaresFromOptions<TOptions> = TOptions extends {
123
+ middleware: infer TMiddlewares extends readonly AnyEndpointMiddleware[];
124
+ } ? TMiddlewares : readonly [];
125
+ type EndpointErrorsFromOptions<TOptions> = TOptions extends {
126
+ errors: infer TErrors extends EndpointErrorDefinitions;
127
+ } ? TErrors : {};
128
+ type MethodlessEndpointOptions = Omit<AnyEndpointOptions, "method">;
129
+ type EndpointHandlerFromOptions<TOptions, TResponse> = EndpointHandler<EndpointBodyFromOptions<TOptions>, EndpointQueryFromOptions<TOptions>, EndpointHeadersFromOptions<TOptions>, TResponse, InferEndpointMiddlewareContext<EndpointMiddlewaresFromOptions<TOptions>>, EndpointErrorsFromOptions<TOptions>>;
130
+ type ValidatedEndpointHandlerFromOptions<TOptions, TResponse> = EndpointHandlerFromOptions<TOptions, TResponse> & (EndpointMiddlewaresFromOptions<TOptions> extends ValidateEndpointMiddlewares<EndpointMiddlewaresFromOptions<TOptions>> ? unknown : never);
131
+ type CreatedEndpointFromOptions<TOptions, TResponse> = CreatedEndpoint<EndpointBodyFromOptions<TOptions>, EndpointQueryFromOptions<TOptions>, EndpointHeadersFromOptions<TOptions>, TResponse, EndpointErrorsFromOptions<TOptions>>;
132
+ /**
133
+ * Create a Farm.js API endpoint
134
+ *
135
+ * Supports two patterns:
136
+ * 1. File-based routing (path auto-inferred from file location):
137
+ * `export const POST = createEndpoint({ method: 'POST', body: schema }, handler)`
138
+ * `createEndpoint({ method: 'GET', query: z.object({...}) }, handler)`
139
+ *
140
+ * 2. Explicit path (for routes.ts at project root):
141
+ * `createEndpoint('/api/hello', { method: 'GET', query: z.object({...}) }, handler)`
142
+ */
143
+ declare function createEndpoint<const TOptions extends AnyEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
144
+ declare function createEndpoint<const TOptions extends AnyEndpointOptions, TResponse = any>(path: string, options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
145
+ declare function createEndpoint<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: EndpointOptions<TBody, TQuery, THeaders, readonly []>, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
146
+ declare function createEndpoint<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(path: string, options: EndpointOptions<TBody, TQuery, THeaders, readonly []>, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
147
+ /**
148
+ * Convenience method for GET requests
149
+ */
150
+ declare function GET<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
151
+ declare function GET<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
152
+ declare function GET<TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<never, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<never, TQuery, THeaders, TResponse>): CreatedEndpoint<never, TQuery, THeaders, TResponse>;
153
+ /**
154
+ * Convenience method for HEAD requests
155
+ */
156
+ declare function HEAD<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
157
+ declare function HEAD<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
158
+ declare function HEAD<TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<never, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<never, TQuery, THeaders, TResponse>): CreatedEndpoint<never, TQuery, THeaders, TResponse>;
159
+ /**
160
+ * Convenience method for POST requests
161
+ */
162
+ declare function POST<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
163
+ declare function POST<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
164
+ declare function POST<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
165
+ /**
166
+ * Convenience method for PUT requests
167
+ */
168
+ declare function PUT<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
169
+ declare function PUT<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
170
+ declare function PUT<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
171
+ /**
172
+ * Convenience method for DELETE requests
173
+ */
174
+ declare function DELETE<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
175
+ declare function DELETE<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
176
+ declare function DELETE<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
177
+ /**
178
+ * Convenience method for PATCH requests
179
+ */
180
+ declare function PATCH<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
181
+ declare function PATCH<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
182
+ declare function PATCH<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
183
+ /**
184
+ * Convenience method for OPTIONS requests
185
+ */
186
+ declare function OPTIONS<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
187
+ declare function OPTIONS<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
188
+ declare function OPTIONS<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
189
+
190
+ type APIRouteParamValue = string | string[];
191
+ type APIRouteParams = Record<string, APIRouteParamValue>;
192
+ interface APIRouteMatch<T extends {
193
+ path: string;
194
+ }> {
195
+ route: T;
196
+ params: APIRouteParams;
197
+ }
198
+ declare function matchAPIRoute<T extends {
199
+ path: string;
200
+ }>(routes: Map<string, T>, pathname: string): APIRouteMatch<T> | null;
201
+ declare function invokeAPIRouteEndpoint(endpoint: any, request: Request, params?: APIRouteParams): Promise<Response>;
202
+ declare function normalizeRouteResponse(result: unknown): Response;
203
+ declare function isWebResponse(value: unknown): value is Response;
204
+ declare function createEndpointFailureResponse(failure: EndpointFailure<string, unknown>): Response;
205
+
206
+ export { type APIRouteMatch as A, DELETE as D, type EndpointErrorDefinition as E, GET as G, HEAD as H, type InferEndpointMiddlewareContext as I, OPTIONS as O, POST as P, type TypedEndpoint as T, isWebResponse as a, type APIRouteParams as b, type APIRouteParamValue as c, type EndpointErrorDefinitions as d, type EndpointErrorContracts as e, type EndpointFail as f, EndpointFailure as g, isEndpointFailure as h, invokeAPIRouteEndpoint as i, type EndpointParamValue as j, type EndpointParams as k, type EndpointMiddlewareContext as l, matchAPIRoute as m, normalizeRouteResponse as n, type EndpointMiddlewareResult as o, type EndpointMiddleware as p, type AnyEndpointMiddleware as q, type EndpointInvalidationTarget as r, type EndpointInvalidationContext as s, type EndpointInvalidations as t, type EndpointOptions as u, type EndpointHandler as v, createEndpoint as w, PUT as x, PATCH as y, createEndpointFailureResponse as z };
@@ -0,0 +1,206 @@
1
+ import { FarmCacheInvalidationTarget } from './cache.js';
2
+ import { M as MultipartSchema, T as TypedFormData } from './transport-BmbGTXA5.js';
3
+
4
+ type AnySchema = {
5
+ _output?: any;
6
+ _input?: any;
7
+ parse?: (data: unknown) => any;
8
+ };
9
+ type MaybePromise<T> = T | Promise<T>;
10
+ type Simplify<T> = {
11
+ [TKey in keyof T]: T[TKey];
12
+ } & {};
13
+ type UnionToIntersection<T> = (T extends unknown ? (value: T) => void : never) extends (value: infer TIntersection) => void ? TIntersection : never;
14
+ type InferOutput<T> = T extends {
15
+ _output: infer O;
16
+ } ? O : T extends {
17
+ parse: (data: unknown) => infer R;
18
+ } ? R : unknown;
19
+ type InferBodyInput<T> = T extends MultipartSchema<AnySchema> ? TypedFormData<InferOutput<T>> : InferOutput<T>;
20
+ type InferHeadersOutput<T> = [T] extends [never] ? Record<string, string> : T extends AnySchema ? InferOutput<T> : Record<string, string>;
21
+ type EndpointErrorDefinition<TSchema extends AnySchema = AnySchema, TStatus extends number = number> = {
22
+ status: TStatus;
23
+ schema: TSchema;
24
+ /** Public message safe to expose to API callers. */
25
+ message?: string;
26
+ };
27
+ type EndpointErrorDefinitions = Record<string, EndpointErrorDefinition<AnySchema, number>>;
28
+ type EndpointErrorContracts<TErrors extends EndpointErrorDefinitions> = {
29
+ [TCode in keyof TErrors]: {
30
+ data: InferOutput<TErrors[TCode]["schema"]>;
31
+ status: TErrors[TCode]["status"];
32
+ };
33
+ };
34
+ type EndpointFail<TErrors extends EndpointErrorDefinitions> = <TCode extends keyof TErrors & string>(code: TCode, data: InferOutput<TErrors[TCode]["schema"]>) => never;
35
+ declare class EndpointFailure<TCode extends string = string, TData = unknown> extends Error {
36
+ readonly code: TCode;
37
+ readonly data: TData;
38
+ readonly status: number;
39
+ constructor(code: TCode, data: TData, options: {
40
+ status: number;
41
+ message: string;
42
+ });
43
+ }
44
+ declare function isEndpointFailure(value: unknown): value is EndpointFailure<string, unknown>;
45
+ type EndpointParamValue = string | string[];
46
+ type EndpointParams = Record<string, EndpointParamValue>;
47
+ type EndpointMiddlewareContext<TContext extends object = {}, TBody = unknown, TQuery = unknown, THeaders = Record<string, string>> = {
48
+ body: TBody;
49
+ query: TQuery;
50
+ headers: THeaders;
51
+ request: Request;
52
+ /** Context accumulated from middleware that ran earlier in the chain. */
53
+ context: Readonly<TContext>;
54
+ params: EndpointParams;
55
+ };
56
+ type EndpointMiddlewareResult<TProvidedContext extends object = object> = TProvidedContext | true | false | Response;
57
+ /** A plain async function. No wrapper or `next()` callback is required. */
58
+ type EndpointMiddleware<TProvidedContext extends object = object, TContext extends object = {}, TBody = unknown, TQuery = unknown, THeaders = Record<string, string>> = (ctx: EndpointMiddlewareContext<TContext, TBody, TQuery, THeaders>) => MaybePromise<EndpointMiddlewareResult<TProvidedContext>>;
59
+ type AnyEndpointMiddleware = (ctx: EndpointMiddlewareContext<any, any, any, any>) => unknown;
60
+ type EndpointInvalidationTarget = FarmCacheInvalidationTarget;
61
+ type EndpointInvalidationContext<TContext extends object = {}, TBody = unknown, TQuery = unknown, THeaders = Record<string, string>> = EndpointMiddlewareContext<TContext, TBody, TQuery, THeaders> & {
62
+ /** The raw value returned by the endpoint handler. */
63
+ result: unknown;
64
+ };
65
+ type EndpointInvalidations<TContext extends object = {}, TBody = unknown, TQuery = unknown, THeaders = Record<string, string>> = readonly EndpointInvalidationTarget[] | ((context: EndpointInvalidationContext<TContext, TBody, TQuery, THeaders>) => readonly EndpointInvalidationTarget[] | Promise<readonly EndpointInvalidationTarget[]>);
66
+ type ValidateEndpointMiddlewares<TMiddlewares extends readonly AnyEndpointMiddleware[]> = {
67
+ readonly [TIndex in keyof TMiddlewares]: TMiddlewares[TIndex] extends AnyEndpointMiddleware ? [Awaited<ReturnType<TMiddlewares[TIndex]>>] extends [EndpointMiddlewareResult<object>] ? TMiddlewares[TIndex] : never : never;
68
+ };
69
+ type ContextFromMiddlewareResult<TResult> = Exclude<TResult, Response | boolean> extends infer TContext ? [TContext] extends [never] ? {} : TContext extends object ? TContext : {} : {};
70
+ type ContextFromMiddleware<TMiddleware> = TMiddleware extends (...args: any[]) => infer TResult ? ContextFromMiddlewareResult<Awaited<TResult>> : {};
71
+ type InferEndpointMiddlewareContext<TMiddlewares extends readonly ((...args: any[]) => any)[], TContext extends object = {}> = TMiddlewares extends readonly [infer TMiddleware, ...infer TRest] ? TMiddleware extends (...args: any[]) => any ? TRest extends readonly ((...args: any[]) => any)[] ? InferEndpointMiddlewareContext<TRest, Simplify<TContext & ContextFromMiddleware<TMiddleware>>> : Simplify<TContext> : Simplify<TContext> : number extends TMiddlewares["length"] ? Simplify<TContext & UnionToIntersection<ContextFromMiddleware<TMiddlewares[number]>>> : Simplify<TContext>;
72
+ type EndpointOptions<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TMiddlewares extends readonly AnyEndpointMiddleware[] = readonly [], TErrors extends EndpointErrorDefinitions = {}> = {
73
+ method?: "GET" | "HEAD" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS";
74
+ body?: TBody;
75
+ query?: TQuery;
76
+ headers?: THeaders;
77
+ middleware?: TMiddlewares;
78
+ /**
79
+ * Cache keys, tags, and route paths made stale after a successful handler result.
80
+ * The resolver receives validated input and middleware context.
81
+ */
82
+ invalidates?: EndpointInvalidations<InferEndpointMiddlewareContext<TMiddlewares>, InferOutput<TBody>, InferOutput<TQuery>, InferHeadersOutput<THeaders>>;
83
+ errors?: TErrors;
84
+ /** @deprecated Use plain functions in `middleware` for Farm endpoint middleware. */
85
+ use?: any[];
86
+ };
87
+ type EndpointHandler<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any, TContext extends object = {}, TErrors extends EndpointErrorDefinitions = {}> = (ctx: {
88
+ body: InferOutput<TBody>;
89
+ query: InferOutput<TQuery>;
90
+ headers: InferHeadersOutput<THeaders>;
91
+ request: Request;
92
+ context: Readonly<TContext>;
93
+ params: EndpointParams;
94
+ fail: EndpointFail<TErrors>;
95
+ }) => Promise<TResponse> | TResponse;
96
+ type TypedEndpoint<TBody = never, TQuery = never, TResponse = any, THeaders = Record<string, string>, TErrors = never, TBodyInput = TBody> = {
97
+ __types: {
98
+ body: TBody;
99
+ inputBody: TBodyInput;
100
+ query: TQuery;
101
+ headers: THeaders;
102
+ response: TResponse;
103
+ errors: TErrors;
104
+ };
105
+ __path?: string;
106
+ __method?: string;
107
+ } & ((options?: {
108
+ body?: TBody;
109
+ query?: TQuery;
110
+ }) => Promise<TResponse>);
111
+ type CreatedEndpoint<TBody extends AnySchema, TQuery extends AnySchema, THeaders extends AnySchema, TResponse, TErrors extends EndpointErrorDefinitions = {}> = TypedEndpoint<InferOutput<TBody>, InferOutput<TQuery>, Awaited<TResponse>, InferHeadersOutput<THeaders>, EndpointErrorContracts<TErrors>, InferBodyInput<TBody>>;
112
+ type AnyEndpointOptions = EndpointOptions<AnySchema, AnySchema, AnySchema, readonly AnyEndpointMiddleware[], EndpointErrorDefinitions>;
113
+ type EndpointBodyFromOptions<TOptions> = TOptions extends {
114
+ body: infer TBody extends AnySchema;
115
+ } ? TBody : never;
116
+ type EndpointQueryFromOptions<TOptions> = TOptions extends {
117
+ query: infer TQuery extends AnySchema;
118
+ } ? TQuery : never;
119
+ type EndpointHeadersFromOptions<TOptions> = TOptions extends {
120
+ headers: infer THeaders extends AnySchema;
121
+ } ? THeaders : never;
122
+ type EndpointMiddlewaresFromOptions<TOptions> = TOptions extends {
123
+ middleware: infer TMiddlewares extends readonly AnyEndpointMiddleware[];
124
+ } ? TMiddlewares : readonly [];
125
+ type EndpointErrorsFromOptions<TOptions> = TOptions extends {
126
+ errors: infer TErrors extends EndpointErrorDefinitions;
127
+ } ? TErrors : {};
128
+ type MethodlessEndpointOptions = Omit<AnyEndpointOptions, "method">;
129
+ type EndpointHandlerFromOptions<TOptions, TResponse> = EndpointHandler<EndpointBodyFromOptions<TOptions>, EndpointQueryFromOptions<TOptions>, EndpointHeadersFromOptions<TOptions>, TResponse, InferEndpointMiddlewareContext<EndpointMiddlewaresFromOptions<TOptions>>, EndpointErrorsFromOptions<TOptions>>;
130
+ type ValidatedEndpointHandlerFromOptions<TOptions, TResponse> = EndpointHandlerFromOptions<TOptions, TResponse> & (EndpointMiddlewaresFromOptions<TOptions> extends ValidateEndpointMiddlewares<EndpointMiddlewaresFromOptions<TOptions>> ? unknown : never);
131
+ type CreatedEndpointFromOptions<TOptions, TResponse> = CreatedEndpoint<EndpointBodyFromOptions<TOptions>, EndpointQueryFromOptions<TOptions>, EndpointHeadersFromOptions<TOptions>, TResponse, EndpointErrorsFromOptions<TOptions>>;
132
+ /**
133
+ * Create a Farm.js API endpoint
134
+ *
135
+ * Supports two patterns:
136
+ * 1. File-based routing (path auto-inferred from file location):
137
+ * `export const POST = createEndpoint({ method: 'POST', body: schema }, handler)`
138
+ * `createEndpoint({ method: 'GET', query: z.object({...}) }, handler)`
139
+ *
140
+ * 2. Explicit path (for routes.ts at project root):
141
+ * `createEndpoint('/api/hello', { method: 'GET', query: z.object({...}) }, handler)`
142
+ */
143
+ declare function createEndpoint<const TOptions extends AnyEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
144
+ declare function createEndpoint<const TOptions extends AnyEndpointOptions, TResponse = any>(path: string, options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
145
+ declare function createEndpoint<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: EndpointOptions<TBody, TQuery, THeaders, readonly []>, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
146
+ declare function createEndpoint<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(path: string, options: EndpointOptions<TBody, TQuery, THeaders, readonly []>, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
147
+ /**
148
+ * Convenience method for GET requests
149
+ */
150
+ declare function GET<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
151
+ declare function GET<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
152
+ declare function GET<TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<never, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<never, TQuery, THeaders, TResponse>): CreatedEndpoint<never, TQuery, THeaders, TResponse>;
153
+ /**
154
+ * Convenience method for HEAD requests
155
+ */
156
+ declare function HEAD<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
157
+ declare function HEAD<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
158
+ declare function HEAD<TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<never, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<never, TQuery, THeaders, TResponse>): CreatedEndpoint<never, TQuery, THeaders, TResponse>;
159
+ /**
160
+ * Convenience method for POST requests
161
+ */
162
+ declare function POST<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
163
+ declare function POST<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
164
+ declare function POST<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
165
+ /**
166
+ * Convenience method for PUT requests
167
+ */
168
+ declare function PUT<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
169
+ declare function PUT<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
170
+ declare function PUT<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
171
+ /**
172
+ * Convenience method for DELETE requests
173
+ */
174
+ declare function DELETE<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
175
+ declare function DELETE<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
176
+ declare function DELETE<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
177
+ /**
178
+ * Convenience method for PATCH requests
179
+ */
180
+ declare function PATCH<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
181
+ declare function PATCH<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
182
+ declare function PATCH<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
183
+ /**
184
+ * Convenience method for OPTIONS requests
185
+ */
186
+ declare function OPTIONS<T = any>(handler: EndpointHandler<never, never, never, T>): CreatedEndpoint<never, never, never, T>;
187
+ declare function OPTIONS<const TOptions extends MethodlessEndpointOptions, TResponse = any>(options: TOptions, handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>): CreatedEndpointFromOptions<TOptions, TResponse>;
188
+ declare function OPTIONS<TBody extends AnySchema = never, TQuery extends AnySchema = never, THeaders extends AnySchema = never, TResponse = any>(options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, "method">, handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;
189
+
190
+ type APIRouteParamValue = string | string[];
191
+ type APIRouteParams = Record<string, APIRouteParamValue>;
192
+ interface APIRouteMatch<T extends {
193
+ path: string;
194
+ }> {
195
+ route: T;
196
+ params: APIRouteParams;
197
+ }
198
+ declare function matchAPIRoute<T extends {
199
+ path: string;
200
+ }>(routes: Map<string, T>, pathname: string): APIRouteMatch<T> | null;
201
+ declare function invokeAPIRouteEndpoint(endpoint: any, request: Request, params?: APIRouteParams): Promise<Response>;
202
+ declare function normalizeRouteResponse(result: unknown): Response;
203
+ declare function isWebResponse(value: unknown): value is Response;
204
+ declare function createEndpointFailureResponse(failure: EndpointFailure<string, unknown>): Response;
205
+
206
+ export { type APIRouteMatch as A, DELETE as D, type EndpointErrorDefinition as E, GET as G, HEAD as H, type InferEndpointMiddlewareContext as I, OPTIONS as O, POST as P, type TypedEndpoint as T, isWebResponse as a, type APIRouteParams as b, type APIRouteParamValue as c, type EndpointErrorDefinitions as d, type EndpointErrorContracts as e, type EndpointFail as f, EndpointFailure as g, isEndpointFailure as h, invokeAPIRouteEndpoint as i, type EndpointParamValue as j, type EndpointParams as k, type EndpointMiddlewareContext as l, matchAPIRoute as m, normalizeRouteResponse as n, type EndpointMiddlewareResult as o, type EndpointMiddleware as p, type AnyEndpointMiddleware as q, type EndpointInvalidationTarget as r, type EndpointInvalidationContext as s, type EndpointInvalidations as t, type EndpointOptions as u, type EndpointHandler as v, createEndpoint as w, PUT as x, PATCH as y, createEndpointFailureResponse as z };
@@ -41,7 +41,8 @@ var FARM_CACHE_INVALIDATION_STATE = /* @__PURE__ */ Symbol.for("farm.cacheInvali
41
41
  var globalState = globalThis;
42
42
  function getFarmCacheInvalidationState() {
43
43
  return globalState[FARM_CACHE_INVALIDATION_STATE] ?? (globalState[FARM_CACHE_INVALIDATION_STATE] = {
44
- listeners: /* @__PURE__ */ new Set()
44
+ listeners: /* @__PURE__ */ new Set(),
45
+ taskListeners: /* @__PURE__ */ new Set()
45
46
  });
46
47
  }
47
48
  __name(getFarmCacheInvalidationState, "getFarmCacheInvalidationState");
@@ -51,6 +52,12 @@ function subscribeFarmCacheInvalidation(listener) {
51
52
  return () => state.listeners.delete(listener);
52
53
  }
53
54
  __name(subscribeFarmCacheInvalidation, "subscribeFarmCacheInvalidation");
55
+ function subscribeFarmCacheTask(listener) {
56
+ const state = getFarmCacheInvalidationState();
57
+ state.taskListeners.add(listener);
58
+ return () => state.taskListeners.delete(listener);
59
+ }
60
+ __name(subscribeFarmCacheTask, "subscribeFarmCacheTask");
54
61
 
55
62
  // src/server-action-security.ts
56
63
  var DEFAULT_SERVER_ACTION_BODY_SIZE_LIMIT = 1e6;
@@ -172,16 +179,24 @@ function sanitizeServerActionError(_error) {
172
179
  };
173
180
  }
174
181
  __name(sanitizeServerActionError, "sanitizeServerActionError");
175
- function runWithServerActionRequest(request, callback) {
182
+ async function runWithServerActionRequest(request, callback) {
176
183
  throwIfAborted(request.signal);
177
- return getServerActionStorage().run(
178
- {
179
- request,
180
- signal: request.signal,
181
- invalidations: /* @__PURE__ */ new Set()
182
- },
183
- callback
184
- );
184
+ const context = {
185
+ request,
186
+ signal: request.signal,
187
+ invalidations: /* @__PURE__ */ new Set(),
188
+ cacheTasks: /* @__PURE__ */ new Set()
189
+ };
190
+ return getServerActionStorage().run(context, async () => {
191
+ try {
192
+ const result = await callback();
193
+ await Promise.all(context.cacheTasks);
194
+ return result;
195
+ } catch (error) {
196
+ await Promise.allSettled(context.cacheTasks);
197
+ throw error;
198
+ }
199
+ });
185
200
  }
186
201
  __name(runWithServerActionRequest, "runWithServerActionRequest");
187
202
  function getServerActionExecutionContext() {
@@ -199,6 +214,9 @@ __name(getServerActionInvalidations, "getServerActionInvalidations");
199
214
  subscribeFarmCacheInvalidation((key) => {
200
215
  getServerActionExecutionContext()?.invalidations.add(key);
201
216
  });
217
+ subscribeFarmCacheTask((task) => {
218
+ getServerActionExecutionContext()?.cacheTasks.add(task);
219
+ });
202
220
  function getServerActionStorage() {
203
221
  const globalState2 = globalThis;
204
222
  if (!globalState2[SERVER_ACTION_STORAGE_KEY]) {