@farm.js/core 0.1.17 → 0.1.19

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 (269) hide show
  1. package/dist/after.cjs +12 -225
  2. package/dist/agent-runtime.cjs +83 -2800
  3. package/dist/api/client.cjs +17 -4060
  4. package/dist/api/route-manager.cjs +34 -4354
  5. package/dist/api/runtime.cjs +29 -2696
  6. package/dist/api.cjs +88 -8434
  7. package/dist/app-markdown.cjs +39 -280
  8. package/dist/app-markdown.mjs +3 -3
  9. package/dist/cache.cjs +38 -1560
  10. package/dist/chunk-22GUSVNJ.cjs +351 -0
  11. package/dist/{chunk-EN7WTEAY.mjs → chunk-2ANEVVF7.mjs} +1 -1
  12. package/dist/chunk-2CQ74SP6.cjs +13 -0
  13. package/dist/{chunk-YD4J4XCI.mjs → chunk-2GNATDDE.mjs} +1 -1
  14. package/dist/chunk-2SJ4RQ6P.cjs +57 -0
  15. package/dist/chunk-3376ZTRC.cjs +1 -0
  16. package/dist/chunk-4PNUXIVU.cjs +472 -0
  17. package/dist/chunk-4PPEPOZZ.cjs +21 -0
  18. package/dist/chunk-4ZFL5GFN.cjs +520 -0
  19. package/dist/chunk-5OVTOKGH.cjs +65 -0
  20. package/dist/chunk-5QIKR7RR.cjs +224 -0
  21. package/dist/chunk-5ZSWG4UX.cjs +127 -0
  22. package/dist/chunk-62YJ2IEB.cjs +238 -0
  23. package/dist/chunk-6EODJYCX.cjs +183 -0
  24. package/dist/chunk-6EXBPJ24.cjs +434 -0
  25. package/dist/chunk-6QQDAAAZ.cjs +38 -0
  26. package/dist/chunk-6V4TDWEC.cjs +455 -0
  27. package/dist/chunk-72ADZ6GQ.cjs +19 -0
  28. package/dist/chunk-75BRBIFP.cjs +172 -0
  29. package/dist/{chunk-ZCNJKLA2.mjs → chunk-7BC6GAL7.mjs} +1 -1
  30. package/dist/chunk-7W3CPVXS.cjs +24 -0
  31. package/dist/chunk-A6WIQH5Z.cjs +31 -0
  32. package/dist/chunk-A777V5WU.cjs +725 -0
  33. package/dist/chunk-AFOD3LYZ.cjs +377 -0
  34. package/dist/chunk-AH7HOAQ3.cjs +151 -0
  35. package/dist/chunk-AMDMVWMI.cjs +39 -0
  36. package/dist/chunk-AORPIPNB.cjs +552 -0
  37. package/dist/chunk-ARJWXNQL.cjs +256 -0
  38. package/dist/chunk-AYJR42WX.cjs +711 -0
  39. package/dist/chunk-BBVSJVBZ.cjs +600 -0
  40. package/dist/chunk-BIDYX3SL.cjs +91 -0
  41. package/dist/chunk-BYODCJD6.cjs +663 -0
  42. package/dist/chunk-C3VRMB6H.cjs +85 -0
  43. package/dist/chunk-C5GUTBZK.cjs +173 -0
  44. package/dist/chunk-CIAGU2X4.cjs +337 -0
  45. package/dist/chunk-CMGMGHUZ.cjs +27 -0
  46. package/dist/chunk-CXP5U3RW.cjs +54 -0
  47. package/dist/chunk-D2ULAULS.cjs +166 -0
  48. package/dist/chunk-D7JTOLFK.cjs +285 -0
  49. package/dist/chunk-DVM4FKZL.cjs +169 -0
  50. package/dist/chunk-DYEJQTDN.cjs +49 -0
  51. package/dist/chunk-E2ROOWQC.cjs +2225 -0
  52. package/dist/chunk-E3UK5IIB.cjs +593 -0
  53. package/dist/chunk-EM6SBQKM.cjs +470 -0
  54. package/dist/chunk-FJSWYIR7.cjs +482 -0
  55. package/dist/chunk-FK6GO24V.cjs +54 -0
  56. package/dist/{chunk-MVIWBEJF.mjs → chunk-FVZGEVTO.mjs} +7 -7
  57. package/dist/chunk-FXUUWYAX.cjs +654 -0
  58. package/dist/chunk-G3HRIVEY.cjs +395 -0
  59. package/dist/chunk-G643DQCH.cjs +13 -0
  60. package/dist/chunk-G7HXGLEC.cjs +175 -0
  61. package/dist/chunk-GDSHDTJ4.cjs +152 -0
  62. package/dist/chunk-GPVTX3HT.cjs +1415 -0
  63. package/dist/chunk-H6G5INWM.cjs +1094 -0
  64. package/dist/{chunk-DHDVMXYK.mjs → chunk-HALDNTIV.mjs} +30 -4
  65. package/dist/chunk-HBTUGXHS.cjs +180 -0
  66. package/dist/chunk-HREOKQWT.cjs +45 -0
  67. package/dist/{chunk-5QOEPUYE.mjs → chunk-HSDL2AUR.mjs} +1 -1
  68. package/dist/chunk-I4J452B7.cjs +435 -0
  69. package/dist/chunk-I57LW5VZ.cjs +94 -0
  70. package/dist/chunk-I5YBCWQ6.cjs +40 -0
  71. package/dist/chunk-I7PUUDGY.cjs +389 -0
  72. package/dist/chunk-IAMRBF3Z.cjs +86 -0
  73. package/dist/chunk-IQXFRNY2.cjs +169 -0
  74. package/dist/chunk-ISTFC3MZ.cjs +1357 -0
  75. package/dist/chunk-IXTFU4PL.cjs +2355 -0
  76. package/dist/chunk-J3LOGE4T.cjs +42 -0
  77. package/dist/chunk-J7FSKED3.cjs +93 -0
  78. package/dist/chunk-JDNHKPTD.cjs +22 -0
  79. package/dist/chunk-JSROZYYO.cjs +164 -0
  80. package/dist/chunk-K6FNHVDR.cjs +696 -0
  81. package/dist/chunk-KGZIORNL.cjs +43 -0
  82. package/dist/chunk-KR6CKSXT.cjs +15 -0
  83. package/dist/chunk-KROWKCUH.cjs +185 -0
  84. package/dist/chunk-KVFPGF2M.cjs +46 -0
  85. package/dist/{chunk-TNBAYAWO.mjs → chunk-L4DVIHOC.mjs} +1 -1
  86. package/dist/chunk-LCCBO7PJ.cjs +46 -0
  87. package/dist/chunk-LIUGYUX3.cjs +22 -0
  88. package/dist/chunk-LTNGXMQ6.cjs +55 -0
  89. package/dist/chunk-M2L4MYDQ.cjs +14 -0
  90. package/dist/chunk-MCJLA63J.cjs +1 -0
  91. package/dist/chunk-MKB2EGIR.cjs +148 -0
  92. package/dist/chunk-MQ3H6LT5.cjs +202 -0
  93. package/dist/chunk-MT763TDW.cjs +43 -0
  94. package/dist/{chunk-XWAYMDLB.mjs → chunk-MVUREHPN.mjs} +1 -1
  95. package/dist/chunk-MWSK6C4J.cjs +18 -0
  96. package/dist/chunk-MWWVKDW3.cjs +169 -0
  97. package/dist/{chunk-6VQIKZZO.mjs → chunk-N255VYFP.mjs} +1 -1
  98. package/dist/chunk-NBAHDVOJ.cjs +2040 -0
  99. package/dist/chunk-NO3WWW3N.cjs +192 -0
  100. package/dist/chunk-NSFC3LHB.cjs +10244 -0
  101. package/dist/chunk-NZKJGRB3.cjs +230 -0
  102. package/dist/chunk-OAVTUMJP.cjs +1496 -0
  103. package/dist/{chunk-SXHV42UQ.mjs → chunk-OFEY6KHO.mjs} +88 -13
  104. package/dist/chunk-OHY2ZWUG.cjs +25 -0
  105. package/dist/chunk-OI6CMLWX.cjs +47 -0
  106. package/dist/chunk-OWOUTKIJ.cjs +558 -0
  107. package/dist/chunk-OX6O6WVA.cjs +74 -0
  108. package/dist/chunk-OXSIH4D6.cjs +476 -0
  109. package/dist/chunk-OYDRPBBV.cjs +453 -0
  110. package/dist/chunk-OYEUREB6.cjs +35 -0
  111. package/dist/chunk-PCOTGFSM.cjs +139 -0
  112. package/dist/{chunk-76DG3LF3.mjs → chunk-PGQBL5DN.mjs} +1 -1
  113. package/dist/chunk-PZYCPSCC.cjs +35 -0
  114. package/dist/chunk-QBK2AA4U.cjs +445 -0
  115. package/dist/{chunk-UTBVHYS3.mjs → chunk-QBPKKQTD.mjs} +2 -2
  116. package/dist/chunk-QBPXNZGV.cjs +487 -0
  117. package/dist/chunk-QNPEUFHQ.cjs +27 -0
  118. package/dist/chunk-QZRVZSPN.cjs +236 -0
  119. package/dist/chunk-R5A5KNVX.cjs +20 -0
  120. package/dist/chunk-R5JIFR6B.cjs +42 -0
  121. package/dist/chunk-R6AIILII.cjs +193 -0
  122. package/dist/chunk-RFYO7QUD.cjs +9 -0
  123. package/dist/chunk-RG3ZOTG5.cjs +34 -0
  124. package/dist/chunk-ROUTX2E5.cjs +390 -0
  125. package/dist/chunk-RTHIVJ2G.cjs +54 -0
  126. package/dist/chunk-S27FMYAM.cjs +644 -0
  127. package/dist/chunk-S3A45T7F.cjs +166 -0
  128. package/dist/chunk-S3JO3N4H.cjs +17 -0
  129. package/dist/chunk-SK35NQKK.cjs +27 -0
  130. package/dist/chunk-SU7MH53P.cjs +180 -0
  131. package/dist/chunk-SVRTJOUF.cjs +113 -0
  132. package/dist/chunk-SWN467MP.cjs +18 -0
  133. package/dist/chunk-SYQ3MOWW.cjs +73 -0
  134. package/dist/chunk-T5CERMEH.cjs +417 -0
  135. package/dist/chunk-TFAXUHWX.cjs +206 -0
  136. package/dist/chunk-TIWHTW3Q.cjs +24 -0
  137. package/dist/chunk-TKJZFIML.cjs +20 -0
  138. package/dist/chunk-TKNSDBBN.cjs +193 -0
  139. package/dist/chunk-U4KT7QP3.cjs +23 -0
  140. package/dist/chunk-U5BMPGS3.cjs +862 -0
  141. package/dist/chunk-UJ2C4ICS.cjs +277 -0
  142. package/dist/chunk-UQZ4AYTH.cjs +168 -0
  143. package/dist/chunk-US2QVW3E.cjs +36 -0
  144. package/dist/{chunk-QGVJVSNX.mjs → chunk-V4AICMQA.mjs} +2 -2
  145. package/dist/chunk-VB6UCX3V.cjs +421 -0
  146. package/dist/chunk-VEKFLAQM.cjs +300 -0
  147. package/dist/chunk-VQDBNVOO.cjs +14 -0
  148. package/dist/chunk-W4E7WMXE.cjs +71 -0
  149. package/dist/chunk-WJ3HK3LJ.cjs +1102 -0
  150. package/dist/chunk-WMAPPDMM.cjs +28 -0
  151. package/dist/chunk-WMOGFOUJ.cjs +223 -0
  152. package/dist/chunk-WPYFSQKK.cjs +37 -0
  153. package/dist/{chunk-56DAX2BE.mjs → chunk-WZXN4R5Y.mjs} +24 -13
  154. package/dist/chunk-XDGMADQM.cjs +14225 -0
  155. package/dist/chunk-XGC343EY.cjs +443 -0
  156. package/dist/chunk-XSKZORAS.cjs +727 -0
  157. package/dist/chunk-XWAWFQFS.cjs +82 -0
  158. package/dist/chunk-Y4YMF2NQ.cjs +460 -0
  159. package/dist/chunk-Y4YWHNKU.cjs +250 -0
  160. package/dist/chunk-Y53ZSFN6.cjs +504 -0
  161. package/dist/chunk-YA6LLTIJ.cjs +411 -0
  162. package/dist/chunk-YFPGHF5F.cjs +202 -0
  163. package/dist/chunk-YJRZR7VU.cjs +28 -0
  164. package/dist/chunk-YTAABQEV.cjs +1 -0
  165. package/dist/chunk-YX3DBN4M.cjs +18 -0
  166. package/dist/chunk-YZTASLPQ.cjs +64 -0
  167. package/dist/chunk-Z5HIWVDP.cjs +2173 -0
  168. package/dist/chunk-ZEG3OPIB.cjs +93 -0
  169. package/dist/chunk-ZMN3H73H.cjs +155 -0
  170. package/dist/client/lifecycle.cjs +6 -35
  171. package/dist/client-plugins.cjs +7 -448
  172. package/dist/client.cjs +171 -9808
  173. package/dist/config.cjs +8 -36
  174. package/dist/cron.cjs +24 -491
  175. package/dist/deferred.cjs +26 -475
  176. package/dist/deployment.cjs +39 -210
  177. package/dist/devtools-5KGPDVKL.cjs +388 -0
  178. package/dist/{devtools-UFVTMQX5.mjs → devtools-FY5R7TQ4.mjs} +3 -3
  179. package/dist/devtools-client-4WAPJY5L.cjs +254 -0
  180. package/dist/devtools-ui-5GBDIGMK.cjs +1296 -0
  181. package/dist/docs.cjs +46 -5657
  182. package/dist/docs.mjs +5 -5
  183. package/dist/env-types.cjs +5 -226
  184. package/dist/env.cjs +21 -338
  185. package/dist/environment/vite.cjs +8 -372
  186. package/dist/environment.cjs +12 -94
  187. package/dist/font.cjs +13 -63
  188. package/dist/headers.cjs +7 -123
  189. package/dist/i18n/client.cjs +55 -294
  190. package/dist/i18n/index.cjs +22 -209
  191. package/dist/i18n/server.cjs +22 -745
  192. package/dist/image/server.cjs +13 -729
  193. package/dist/image/sharp.cjs +33 -171
  194. package/dist/image.cjs +41 -85
  195. package/dist/index.cjs +1151 -68080
  196. package/dist/index.mjs +14 -14
  197. package/dist/instrumentation.cjs +12 -138
  198. package/dist/integration-orm-55F7CII5.cjs +13 -0
  199. package/dist/integrations.cjs +55 -4090
  200. package/dist/internal/app-markdown-runtime.cjs +27 -224
  201. package/dist/internal/app-markdown-runtime.mjs +2 -2
  202. package/dist/internal/build-runtime.cjs +120 -52259
  203. package/dist/internal/build-runtime.mjs +13 -13
  204. package/dist/internal/cli-runtime.cjs +67 -13811
  205. package/dist/internal/cli-runtime.mjs +7 -7
  206. package/dist/internal/client-error-overlay.cjs +80 -733
  207. package/dist/internal/client-error-overlay.mjs +1 -1
  208. package/dist/internal/client-runtime.cjs +81 -913
  209. package/dist/internal/compression-runtime.cjs +8 -214
  210. package/dist/internal/config-runtime.cjs +42 -6547
  211. package/dist/internal/config-runtime.mjs +3 -3
  212. package/dist/internal/docs-precompiled-runtime.cjs +26 -46
  213. package/dist/internal/infra-analytics-runtime.cjs +10 -536
  214. package/dist/internal/isolated-boundary.cjs +14 -414
  215. package/dist/internal/metadata-image-runtime.cjs +7 -285
  216. package/dist/internal/product-telemetry-runtime.cjs +42 -97
  217. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  218. package/dist/internal/production-node-env.cjs +6 -63
  219. package/dist/internal/production-runtime.cjs +418 -7133
  220. package/dist/internal/production-runtime.mjs +3 -3
  221. package/dist/internal/request-cookies.cjs +6 -54
  222. package/dist/json-ld.cjs +24 -50
  223. package/dist/layers-E4WPJNY5.cjs +17 -0
  224. package/dist/manager-G4B2IPYE.cjs +14 -0
  225. package/dist/markdown.cjs +21 -547
  226. package/dist/markdown.mjs +1 -1
  227. package/dist/middleware.cjs +36 -2995
  228. package/dist/navigation.cjs +22 -2588
  229. package/dist/nitro-4I2MYLY2.cjs +652 -0
  230. package/dist/observability.cjs +22 -614
  231. package/dist/og.cjs +5 -28
  232. package/dist/plugin.cjs +106 -37442
  233. package/dist/plugin.mjs +9 -9
  234. package/dist/query/client.cjs +113 -449
  235. package/dist/query/index.cjs +26 -288
  236. package/dist/query/parsers.cjs +23 -247
  237. package/dist/query/server.cjs +36 -298
  238. package/dist/renderer/react/client.cjs +9 -43
  239. package/dist/renderer/react/server.cjs +40 -103
  240. package/dist/renderer/react/vite.cjs +7 -29
  241. package/dist/renderer-client.cjs +126 -4295
  242. package/dist/renderer.cjs +31 -249
  243. package/dist/request.cjs +5 -68
  244. package/dist/router.cjs +11 -474
  245. package/dist/routes.cjs +42 -2461
  246. package/dist/{schema-dev-notice-2IE2F2XI.mjs → schema-dev-notice-O67CPXJ6.mjs} +1 -1
  247. package/dist/schema-dev-notice-Y7MQEFGN.cjs +56 -0
  248. package/dist/schema.cjs +6 -33
  249. package/dist/search-client-G3RICOFU.cjs +13 -0
  250. package/dist/server-action-security.cjs +25 -541
  251. package/dist/server-fn-client.cjs +6 -337
  252. package/dist/server-fn.cjs +32 -1841
  253. package/dist/server-plugins.cjs +15 -884
  254. package/dist/server-query-client.cjs +15 -1883
  255. package/dist/server-query.cjs +16 -1838
  256. package/dist/server.cjs +296 -44681
  257. package/dist/server.mjs +11 -11
  258. package/dist/storage.cjs +57 -576
  259. package/dist/testing.cjs +89 -3186
  260. package/dist/theme/client.cjs +13 -108
  261. package/dist/theme/index.cjs +6 -68
  262. package/dist/theme/runtime.cjs +13 -78
  263. package/dist/theme/server.cjs +10 -179
  264. package/dist/version.cjs +4 -32
  265. package/dist/version.mjs +1 -1
  266. package/dist/vite.cjs +119 -37773
  267. package/dist/vite.mjs +9 -9
  268. package/dist/workflows.cjs +19 -1040
  269. package/package.json +1 -1
@@ -0,0 +1,85 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+
4
+
5
+ var _chunkY4YWHNKUcjs = require('./chunk-Y4YWHNKU.cjs');
6
+
7
+
8
+ var _chunkI7PUUDGYcjs = require('./chunk-I7PUUDGY.cjs');
9
+
10
+
11
+ var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
12
+
13
+ // src/server-query-client.ts
14
+ var _react = require('react');
15
+ function useServerQuery(query, input, options = {}) {
16
+ const cache = _chunkI7PUUDGYcjs.getFarmClientDataCache.call(void 0, );
17
+ const key = _chunkY4YWHNKUcjs.createServerQueryCallKey.call(void 0, query, input);
18
+ const inputRef = _react.useRef.call(void 0, input);
19
+ const optionsRef = _react.useRef.call(void 0, options);
20
+ const mountedKeyRef = _react.useRef.call(void 0, void 0);
21
+ const pendingInvalidationRef = _react.useRef.call(void 0, false);
22
+ inputRef.current = input;
23
+ optionsRef.current = options;
24
+ const subscribe = _react.useCallback.call(void 0,
25
+ (listener) => cache.subscribe(key, (event) => {
26
+ if (event === "invalidate") pendingInvalidationRef.current = true;
27
+ else if (_optionalChain([cache, 'access', _ => _.get, 'call', _2 => _2(key), 'optionalAccess', _3 => _3.fetching])) {
28
+ pendingInvalidationRef.current = false;
29
+ }
30
+ listener();
31
+ }),
32
+ [cache, key]
33
+ );
34
+ const getSnapshot = _react.useCallback.call(void 0, () => cache.get(key), [cache, key]);
35
+ const entry = _react.useSyncExternalStore.call(void 0, subscribe, getSnapshot, () => void 0);
36
+ const run = _react.useCallback.call(void 0,
37
+ (force = false) => {
38
+ pendingInvalidationRef.current = false;
39
+ return _chunkY4YWHNKUcjs.fetchServerQuery.call(void 0, query, inputRef.current, {
40
+ ...optionsRef.current,
41
+ force
42
+ });
43
+ },
44
+ [query]
45
+ );
46
+ _react.useEffect.call(void 0, () => {
47
+ if (options.enabled === false) {
48
+ mountedKeyRef.current = void 0;
49
+ return;
50
+ }
51
+ const firstReadForKey = mountedKeyRef.current !== key;
52
+ if (firstReadForKey) mountedKeyRef.current = key;
53
+ if (firstReadForKey && (!entry || cache.isStale(key)) || pendingInvalidationRef.current && _optionalChain([entry, 'optionalAccess', _4 => _4.invalidatedAt]) !== void 0 && !entry.fetching) {
54
+ void run().catch(() => void 0);
55
+ }
56
+ }, [cache, entry, key, options.enabled, run]);
57
+ _react.useEffect.call(void 0, () => {
58
+ if (options.enabled === false) return;
59
+ return _chunkY4YWHNKUcjs.attachRevalidationListeners.call(void 0,
60
+ () => {
61
+ if (cache.isStale(key)) void run().catch(() => void 0);
62
+ },
63
+ {
64
+ refetchOnWindowFocus: options.refetchOnWindowFocus,
65
+ refetchOnReconnect: options.refetchOnReconnect
66
+ }
67
+ );
68
+ }, [cache, key, options.enabled, options.refetchOnReconnect, options.refetchOnWindowFocus, run]);
69
+ const status = _nullishCoalesce(_optionalChain([entry, 'optionalAccess', _5 => _5.status]), () => ( (entry ? "success" : "idle")));
70
+ const fetching = _nullishCoalesce(_optionalChain([entry, 'optionalAccess', _6 => _6.fetching]), () => ( false));
71
+ return {
72
+ data: _optionalChain([entry, 'optionalAccess', _7 => _7.data]),
73
+ error: _nullishCoalesce(_optionalChain([entry, 'optionalAccess', _8 => _8.error]), () => ( null)),
74
+ status,
75
+ pending: status === "pending" && (_nullishCoalesce(_optionalChain([entry, 'optionalAccess', _9 => _9.updatedAt]), () => ( 0))) === 0,
76
+ fetching,
77
+ stale: cache.isStale(key),
78
+ refetch: /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, () => run(true), "refetch")
79
+ };
80
+ }
81
+ _chunkS3JO3N4Hcjs.__name.call(void 0, useServerQuery, "useServerQuery");
82
+
83
+
84
+
85
+ exports.useServerQuery = useServerQuery;
@@ -0,0 +1,173 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+ var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
4
+
5
+ // src/deployment.ts
6
+ var FARM_DEPLOYMENT_ID_HEADER = "x-farm-deployment-id";
7
+ var FARM_DEPLOYMENT_MISMATCH_HEADER = "x-farm-deployment-mismatch";
8
+ var FARM_DEPLOYMENT_COOKIE = "__farm_deployment";
9
+ var FARM_DEPLOYMENT_MISMATCH_CODE = "FARM_DEPLOYMENT_MISMATCH";
10
+ var FARM_DEPLOYMENT_MISMATCH_STATUS = 409;
11
+ function getFarmPresetRuntime(preset) {
12
+ if (preset === "cloudflare" || preset === "cloudflare-pages" || preset === "cloudflare-module" || preset === "netlify-edge" || preset === "vercel-edge" || preset === "deno") {
13
+ return "edge";
14
+ }
15
+ if (preset === "node-server" || preset === "vercel" || preset === "netlify" || preset === "aws-lambda" || preset === "azure" || preset === "firebase" || preset === "bun" || preset === "self-host" || preset === "farm") {
16
+ return "node";
17
+ }
18
+ return "unknown";
19
+ }
20
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getFarmPresetRuntime, "getFarmPresetRuntime");
21
+ var _FarmDeploymentMismatchError = class _FarmDeploymentMismatchError extends Error {
22
+ constructor(clientDeploymentId, serverDeploymentId) {
23
+ super("The application was updated while this page was open. Refresh before trying again.");
24
+ this.clientDeploymentId = clientDeploymentId;
25
+ this.serverDeploymentId = serverDeploymentId;
26
+ this.name = "FarmDeploymentMismatchError";
27
+ this.code = FARM_DEPLOYMENT_MISMATCH_CODE;
28
+ this.retryable = false;
29
+ }
30
+ };
31
+ _chunkS3JO3N4Hcjs.__name.call(void 0, _FarmDeploymentMismatchError, "FarmDeploymentMismatchError");
32
+ var FarmDeploymentMismatchError = _FarmDeploymentMismatchError;
33
+ function normalizeFarmDeploymentId(value) {
34
+ if (typeof value !== "string" || value.trim() === "") {
35
+ throw new TypeError("Farm deploymentId must be a non-empty string");
36
+ }
37
+ const normalized = value.trim();
38
+ if (normalized.length > 200 || /[\u0000-\u001f\u007f]/.test(normalized)) {
39
+ throw new TypeError("Farm deploymentId must be at most 200 characters without control bytes");
40
+ }
41
+ return normalized;
42
+ }
43
+ _chunkS3JO3N4Hcjs.__name.call(void 0, normalizeFarmDeploymentId, "normalizeFarmDeploymentId");
44
+ function createFarmDeploymentRequestHeaders(deploymentId, init) {
45
+ const headers = new Headers(init);
46
+ if (deploymentId) {
47
+ headers.set(FARM_DEPLOYMENT_ID_HEADER, deploymentId);
48
+ }
49
+ return headers;
50
+ }
51
+ _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmDeploymentRequestHeaders, "createFarmDeploymentRequestHeaders");
52
+ function getFarmRequestDeploymentId(request) {
53
+ const headerValue = _optionalChain([request, 'access', _ => _.headers, 'access', _2 => _2.get, 'call', _3 => _3(FARM_DEPLOYMENT_ID_HEADER), 'optionalAccess', _4 => _4.trim, 'call', _5 => _5()]);
54
+ if (headerValue) return headerValue;
55
+ if (isSafeRequestMethod(request.method)) return void 0;
56
+ return readCookie(request.headers.get("cookie"), FARM_DEPLOYMENT_COOKIE);
57
+ }
58
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getFarmRequestDeploymentId, "getFarmRequestDeploymentId");
59
+ function getFarmDeploymentMismatch(request, serverDeploymentId) {
60
+ if (!serverDeploymentId) return null;
61
+ const clientDeploymentId = getFarmRequestDeploymentId(request);
62
+ if (!clientDeploymentId || clientDeploymentId === serverDeploymentId) return null;
63
+ return { clientDeploymentId, serverDeploymentId };
64
+ }
65
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getFarmDeploymentMismatch, "getFarmDeploymentMismatch");
66
+ function createFarmDeploymentMismatchResponse(mismatch) {
67
+ return new Response(
68
+ JSON.stringify({
69
+ error: FARM_DEPLOYMENT_MISMATCH_CODE,
70
+ message: "The application deployment changed. Refresh before retrying this request."
71
+ }),
72
+ {
73
+ status: FARM_DEPLOYMENT_MISMATCH_STATUS,
74
+ headers: {
75
+ "Cache-Control": "no-store",
76
+ "Content-Type": "application/json; charset=utf-8",
77
+ [FARM_DEPLOYMENT_ID_HEADER]: mismatch.serverDeploymentId,
78
+ [FARM_DEPLOYMENT_MISMATCH_HEADER]: "1"
79
+ }
80
+ }
81
+ );
82
+ }
83
+ _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmDeploymentMismatchResponse, "createFarmDeploymentMismatchResponse");
84
+ function withFarmDeploymentResponse(response, deploymentId, options = {}) {
85
+ if (!deploymentId) return response;
86
+ const headers = new Headers(response.headers);
87
+ headers.set(FARM_DEPLOYMENT_ID_HEADER, deploymentId);
88
+ if (options.setCookie) {
89
+ headers.append(
90
+ "Set-Cookie",
91
+ createFarmDeploymentCookie(
92
+ deploymentId,
93
+ _nullishCoalesce(options.cookiePath, () => ( "/")),
94
+ _nullishCoalesce(options.secureCookie, () => ( false))
95
+ )
96
+ );
97
+ }
98
+ return new Response(response.body, {
99
+ status: response.status,
100
+ statusText: response.statusText,
101
+ headers
102
+ });
103
+ }
104
+ _chunkS3JO3N4Hcjs.__name.call(void 0, withFarmDeploymentResponse, "withFarmDeploymentResponse");
105
+ function getFarmResponseDeploymentId(response) {
106
+ return _optionalChain([response, 'access', _6 => _6.headers, 'access', _7 => _7.get, 'call', _8 => _8(FARM_DEPLOYMENT_ID_HEADER), 'optionalAccess', _9 => _9.trim, 'call', _10 => _10()]) || void 0;
107
+ }
108
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getFarmResponseDeploymentId, "getFarmResponseDeploymentId");
109
+ function isFarmDeploymentMismatchResponse(response, clientDeploymentId) {
110
+ const serverDeploymentId = getFarmResponseDeploymentId(response);
111
+ if (clientDeploymentId && serverDeploymentId && clientDeploymentId !== serverDeploymentId) {
112
+ return true;
113
+ }
114
+ return response.status === FARM_DEPLOYMENT_MISMATCH_STATUS && response.headers.get(FARM_DEPLOYMENT_MISMATCH_HEADER) === "1";
115
+ }
116
+ _chunkS3JO3N4Hcjs.__name.call(void 0, isFarmDeploymentMismatchResponse, "isFarmDeploymentMismatchResponse");
117
+ function createFarmDeploymentMismatchError(response, clientDeploymentId) {
118
+ return new FarmDeploymentMismatchError(
119
+ clientDeploymentId,
120
+ getFarmResponseDeploymentId(response) || "unknown"
121
+ );
122
+ }
123
+ _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmDeploymentMismatchError, "createFarmDeploymentMismatchError");
124
+ function createFarmDeploymentCookie(deploymentId, path = "/", secure = false) {
125
+ const normalizedPath = path.startsWith("/") ? path : `/${path}`;
126
+ return [
127
+ `${FARM_DEPLOYMENT_COOKIE}=${encodeURIComponent(deploymentId)}`,
128
+ `Path=${normalizedPath}`,
129
+ "HttpOnly",
130
+ "SameSite=Lax",
131
+ secure ? "Secure" : ""
132
+ ].filter(Boolean).join("; ");
133
+ }
134
+ _chunkS3JO3N4Hcjs.__name.call(void 0, createFarmDeploymentCookie, "createFarmDeploymentCookie");
135
+ function readCookie(cookieHeader, name) {
136
+ if (!cookieHeader) return void 0;
137
+ for (const part of cookieHeader.split(";")) {
138
+ const separator = part.indexOf("=");
139
+ if (separator === -1 || part.slice(0, separator).trim() !== name) continue;
140
+ const value = part.slice(separator + 1).trim();
141
+ try {
142
+ return decodeURIComponent(value);
143
+ } catch (e) {
144
+ return value;
145
+ }
146
+ }
147
+ return void 0;
148
+ }
149
+ _chunkS3JO3N4Hcjs.__name.call(void 0, readCookie, "readCookie");
150
+ function isSafeRequestMethod(method) {
151
+ return ["GET", "HEAD", "OPTIONS", "QUERY"].includes(method.toUpperCase());
152
+ }
153
+ _chunkS3JO3N4Hcjs.__name.call(void 0, isSafeRequestMethod, "isSafeRequestMethod");
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+ exports.FARM_DEPLOYMENT_ID_HEADER = FARM_DEPLOYMENT_ID_HEADER; exports.FARM_DEPLOYMENT_MISMATCH_HEADER = FARM_DEPLOYMENT_MISMATCH_HEADER; exports.FARM_DEPLOYMENT_COOKIE = FARM_DEPLOYMENT_COOKIE; exports.FARM_DEPLOYMENT_MISMATCH_CODE = FARM_DEPLOYMENT_MISMATCH_CODE; exports.FARM_DEPLOYMENT_MISMATCH_STATUS = FARM_DEPLOYMENT_MISMATCH_STATUS; exports.getFarmPresetRuntime = getFarmPresetRuntime; exports.FarmDeploymentMismatchError = FarmDeploymentMismatchError; exports.normalizeFarmDeploymentId = normalizeFarmDeploymentId; exports.createFarmDeploymentRequestHeaders = createFarmDeploymentRequestHeaders; exports.getFarmRequestDeploymentId = getFarmRequestDeploymentId; exports.getFarmDeploymentMismatch = getFarmDeploymentMismatch; exports.createFarmDeploymentMismatchResponse = createFarmDeploymentMismatchResponse; exports.withFarmDeploymentResponse = withFarmDeploymentResponse; exports.getFarmResponseDeploymentId = getFarmResponseDeploymentId; exports.isFarmDeploymentMismatchResponse = isFarmDeploymentMismatchResponse; exports.createFarmDeploymentMismatchError = createFarmDeploymentMismatchError; exports.createFarmDeploymentCookie = createFarmDeploymentCookie;
@@ -0,0 +1,337 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+ var _chunkTIWHTW3Qcjs = require('./chunk-TIWHTW3Q.cjs');
4
+
5
+
6
+ var _chunk2CQ74SP6cjs = require('./chunk-2CQ74SP6.cjs');
7
+
8
+
9
+ var _chunkWMAPPDMMcjs = require('./chunk-WMAPPDMM.cjs');
10
+
11
+
12
+
13
+ var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
14
+
15
+ // src/type-generator.ts
16
+ var _fs = require('fs');
17
+ var _module = require('module');
18
+ var _path = require('path');
19
+ var _esmodulelexer = require('es-module-lexer');
20
+ var moduleLexerInitialized = false;
21
+ var JSX_ROUTE_LOADERS = { ".jsx": "jsx", ".tsx": "tsx" };
22
+ var esbuildTransformSync;
23
+ function transformJSXRoute(content, loader, filePath) {
24
+ _nullishCoalesce(esbuildTransformSync, () => ( (esbuildTransformSync = _module.createRequire.call(void 0, typeof __filename === "string" ? __filename : _chunkS3JO3N4Hcjs.define_import_meta_default.url)(
25
+ "esbuild"
26
+ ).transformSync)));
27
+ return esbuildTransformSync(content, { loader, sourcefile: filePath }).code;
28
+ }
29
+ _chunkS3JO3N4Hcjs.__name.call(void 0, transformJSXRoute, "transformJSXRoute");
30
+ var API_CLIENT_METHOD_SEGMENTS = /* @__PURE__ */ new Set([
31
+ "get",
32
+ "head",
33
+ "query",
34
+ "post",
35
+ "put",
36
+ "delete",
37
+ "patch",
38
+ "options"
39
+ ]);
40
+ var _APITypeGenerator = class _APITypeGenerator {
41
+ constructor(appDir) {
42
+ this.appDirs = Array.isArray(appDir) ? [...appDir] : [appDir];
43
+ }
44
+ /**
45
+ * Scan all API route files and extract route information
46
+ */
47
+ scanAPIRoutes() {
48
+ const methodSources = /* @__PURE__ */ new Map();
49
+ for (const appDir of this.appDirs) {
50
+ const apiDir = _path.join.call(void 0, appDir, "api");
51
+ if (!_fs.existsSync.call(void 0, apiDir)) continue;
52
+ const discovered = [];
53
+ this.scanDirectory(apiDir, appDir, discovered);
54
+ for (const route of discovered) {
55
+ const routeMethods = _nullishCoalesce(methodSources.get(route.path), () => ( /* @__PURE__ */ new Map()));
56
+ for (const method of route.methods) {
57
+ routeMethods.set(method, route);
58
+ }
59
+ methodSources.set(route.path, routeMethods);
60
+ }
61
+ }
62
+ const routes = [];
63
+ for (const [routePath, methods] of methodSources) {
64
+ const routesByFile = /* @__PURE__ */ new Map();
65
+ for (const [method, route] of methods) {
66
+ const existing = routesByFile.get(route.filePath);
67
+ if (existing) {
68
+ existing.methods.push(method);
69
+ } else {
70
+ routesByFile.set(route.filePath, {
71
+ ...route,
72
+ path: routePath,
73
+ methods: [method]
74
+ });
75
+ }
76
+ }
77
+ routes.push(...routesByFile.values());
78
+ }
79
+ return routes.sort(
80
+ (left, right) => left.path.localeCompare(right.path) || left.filePath.localeCompare(right.filePath)
81
+ );
82
+ }
83
+ scanDirectory(dir, appDir, routes, basePath = "") {
84
+ const items = _fs.readdirSync.call(void 0, dir, { withFileTypes: true });
85
+ for (const item of items) {
86
+ const fullPath = _path.join.call(void 0, dir, item.name);
87
+ if (item.isDirectory()) {
88
+ const newBasePath = basePath ? `${basePath}/${item.name}` : item.name;
89
+ this.scanDirectory(fullPath, appDir, routes, newBasePath);
90
+ } else if (_chunk2CQ74SP6cjs.isFarmAPIRouteFileName.call(void 0, item.name)) {
91
+ const routeInfo = this.extractRouteInfo(fullPath, appDir, basePath);
92
+ if (routeInfo) {
93
+ routes.push(routeInfo);
94
+ }
95
+ }
96
+ }
97
+ }
98
+ extractRouteInfo(filePath, appDir, basePath) {
99
+ try {
100
+ const content = _fs.readFileSync.call(void 0, filePath, "utf-8");
101
+ const methods = this.extractExportedMethods(content, filePath);
102
+ if (methods.length === 0) {
103
+ return null;
104
+ }
105
+ const relativePath = _path.relative.call(void 0, appDir, filePath);
106
+ const apiPath = basePath ? `/api/${basePath}` : "/api";
107
+ return {
108
+ path: apiPath,
109
+ methods,
110
+ filePath,
111
+ relativePath
112
+ };
113
+ } catch (error) {
114
+ console.warn(`Failed to read route file ${filePath}:`, error);
115
+ return null;
116
+ }
117
+ }
118
+ extractExportedMethods(content, filePath) {
119
+ if (!moduleLexerInitialized) {
120
+ _esmodulelexer.initSync.call(void 0, );
121
+ moduleLexerInitialized = true;
122
+ }
123
+ const httpMethods = ["GET", "HEAD", "QUERY", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"];
124
+ const loader = JSX_ROUTE_LOADERS[_path.extname.call(void 0, filePath)];
125
+ const source = loader ? transformJSXRoute(content, loader, filePath) : content;
126
+ const [, exports] = _esmodulelexer.parse.call(void 0, source);
127
+ const valueExports = new Set(
128
+ exports.filter((specifier) => !this.isTypeOnlyExportSpecifier(source, specifier.s)).map((specifier) => specifier.n)
129
+ );
130
+ return httpMethods.filter((method) => valueExports.has(method));
131
+ }
132
+ isTypeOnlyExportSpecifier(content, exportNameStart) {
133
+ let cursor = exportNameStart - 1;
134
+ while (cursor >= 0) {
135
+ while (cursor >= 0 && /\s/.test(content[cursor])) cursor--;
136
+ if (content.slice(cursor - 1, cursor + 1) === "*/") {
137
+ const commentStart = content.lastIndexOf("/*", cursor - 1);
138
+ if (commentStart >= 0) {
139
+ cursor = commentStart - 1;
140
+ continue;
141
+ }
142
+ }
143
+ const lineStart = content.lastIndexOf("\n", cursor) + 1;
144
+ const lineCommentStart = content.indexOf("//", lineStart);
145
+ if (lineCommentStart >= 0 && lineCommentStart <= cursor) {
146
+ cursor = lineCommentStart - 1;
147
+ continue;
148
+ }
149
+ break;
150
+ }
151
+ const tokenEnd = cursor + 1;
152
+ while (cursor >= 0 && /[A-Za-z0-9_$]/.test(content[cursor])) cursor--;
153
+ return content.slice(cursor + 1, tokenEnd) === "type";
154
+ }
155
+ /**
156
+ * Generate TypeScript code for the API router
157
+ */
158
+ generateAPIRouter(routes, options = {}) {
159
+ const imports = [];
160
+ const pluginTypes = [];
161
+ if (_optionalChain([options, 'access', _ => _.pluginConfigs, 'optionalAccess', _2 => _2.length])) {
162
+ imports.push('import type { PluginAPIRouter } from "@farm.js/core/api";');
163
+ options.pluginConfigs.forEach((filePath, index) => {
164
+ const importPath = this.getRouteImportPath({ filePath }, options.outFile);
165
+ imports.push(`import type FarmPluginConfig${index} from ${JSON.stringify(importPath)};`);
166
+ pluginTypes.push(`PluginAPIRouter<typeof FarmPluginConfig${index}>`);
167
+ });
168
+ }
169
+ const routeGroups = /* @__PURE__ */ new Map();
170
+ for (const route of routes) {
171
+ const key = route.path;
172
+ if (!routeGroups.has(key)) {
173
+ routeGroups.set(key, []);
174
+ }
175
+ routeGroups.get(key).push(route);
176
+ }
177
+ const routeMethodsByPath = /* @__PURE__ */ new Map();
178
+ for (const [routePath, routeList] of routeGroups) {
179
+ const cleanPath = routePath === "/api" ? "" : routePath.replace(/^\/api\//, "");
180
+ routeMethodsByPath.set(
181
+ cleanPath,
182
+ new Set(routeList.flatMap((route) => route.methods.map((method) => method.toLowerCase())))
183
+ );
184
+ }
185
+ for (const route of _nullishCoalesce(options.pluginRoutes, () => ( []))) {
186
+ const cleanPath = route.path === "/api" ? "" : route.path.replace(/^\/api\//, "");
187
+ const methods = _nullishCoalesce(routeMethodsByPath.get(cleanPath), () => ( /* @__PURE__ */ new Set()));
188
+ methods.add(route.method.toLowerCase());
189
+ routeMethodsByPath.set(cleanPath, methods);
190
+ }
191
+ const createRouteTreeNode = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, () => /* @__PURE__ */ Object.create(null), "createRouteTreeNode");
192
+ const nestedStructure = createRouteTreeNode();
193
+ const usedRouteNames = /* @__PURE__ */ new Map();
194
+ for (const [path, routeList] of routeGroups) {
195
+ const routeName = this.uniqueRouteName(path, usedRouteNames);
196
+ const cleanPath = path === "/api" ? "" : path.replace(/^\/api\//, "");
197
+ const parts = cleanPath ? cleanPath.split("/") : [];
198
+ const methodSources = /* @__PURE__ */ new Map();
199
+ for (const route of routeList) {
200
+ for (const method of route.methods) methodSources.set(method, route);
201
+ }
202
+ const allMethods = [...methodSources.keys()];
203
+ for (const method of allMethods) {
204
+ const importPath = this.getRouteImportPath(methodSources.get(method), options.outFile);
205
+ const importName = `${method}_${routeName}`;
206
+ imports.push(
207
+ `import type { ${method} as ${importName} } from ${JSON.stringify(importPath)};`
208
+ );
209
+ }
210
+ if (parts.length === 0) {
211
+ for (const method of allMethods) {
212
+ const importName = `${method}_${routeName}`;
213
+ const methodName = method.toLowerCase();
214
+ nestedStructure[methodName] = `typeof ${importName}`;
215
+ }
216
+ } else {
217
+ const hasMethodCollision = parts.some((part, index) => {
218
+ if (part === "$params" || index === 0 && part === "integrations") return true;
219
+ if (!API_CLIENT_METHOD_SEGMENTS.has(part)) return false;
220
+ const parentPath = parts.slice(0, index).join("/");
221
+ return _optionalChain([routeMethodsByPath, 'access', _3 => _3.get, 'call', _4 => _4(parentPath), 'optionalAccess', _5 => _5.has, 'call', _6 => _6(part)]) === true;
222
+ });
223
+ const typePath = hasMethodCollision ? [`/${cleanPath}`] : parts;
224
+ let current = nestedStructure;
225
+ for (let i = 0; i < typePath.length; i++) {
226
+ const part = typePath[i];
227
+ if (i === typePath.length - 1) {
228
+ current[part] = createRouteTreeNode();
229
+ for (const method of allMethods) {
230
+ const importName = `${method}_${routeName}`;
231
+ const methodName = method.toLowerCase();
232
+ current[part][methodName] = `typeof ${importName}`;
233
+ }
234
+ } else {
235
+ if (!Object.prototype.hasOwnProperty.call(current, part)) {
236
+ current[part] = createRouteTreeNode();
237
+ }
238
+ current = current[part];
239
+ }
240
+ }
241
+ }
242
+ }
243
+ const typeExports = this.structureToTypeString(nestedStructure, 1);
244
+ const manifest = /* @__PURE__ */ new Map();
245
+ const shapes = /* @__PURE__ */ new Map();
246
+ for (const route of routes) {
247
+ _chunkWMAPPDMMcjs.registerAPIRouteShape.call(void 0, shapes, route.path, route.filePath, "app");
248
+ const methods = _nullishCoalesce(manifest.get(route.path), () => ( /* @__PURE__ */ new Set()));
249
+ for (const method of route.methods) methods.add(method);
250
+ manifest.set(route.path, methods);
251
+ }
252
+ for (const route of _nullishCoalesce(options.pluginRoutes, () => ( []))) {
253
+ _chunkWMAPPDMMcjs.registerAPIRouteShape.call(void 0, shapes, route.path, `plugin:${route.path}`, "app");
254
+ const methods = _nullishCoalesce(manifest.get(route.path), () => ( /* @__PURE__ */ new Set()));
255
+ if (methods.has(route.method))
256
+ throw new Error(`Duplicate API route for ${route.method} ${route.path}`);
257
+ methods.add(route.method);
258
+ manifest.set(route.path, methods);
259
+ }
260
+ const routeManifest = [...manifest].sort(([a], [b]) => a.localeCompare(b)).map(([path, methods]) => ({ path, methods: [...methods].sort() }));
261
+ const manifestSource = routeManifest.length ? `[
262
+ ${routeManifest.map(
263
+ ({ path, methods }) => ` {
264
+ path: ${JSON.stringify(path)},
265
+ methods: [${methods.map((method) => JSON.stringify(method)).join(", ")}],
266
+ },`
267
+ ).join("\n")}
268
+ ]` : "[]";
269
+ return `/**
270
+ * Auto-generated API router types
271
+ * This file is automatically generated - do not edit manually
272
+ *
273
+ * Server modules are imported only as types. Runtime data contains paths and methods only.
274
+ */
275
+
276
+ ${imports.join("\n")}
277
+
278
+ // Type-only representation of your API routes
279
+ export type APIRouter = ${pluginTypes.length ? `${pluginTypes.join(" & ")} & ` : ""}{
280
+ ${typeExports}
281
+ };
282
+
283
+ // Pass this schema-free manifest to createApiClients({ routes: apiRoutes }).
284
+ export const apiRoutes = ${manifestSource} as const;
285
+ `;
286
+ }
287
+ getRouteImportPath(route, outFile) {
288
+ if (!outFile) {
289
+ return `../app/${route.relativePath.replace(/\\/g, "/").replace(/\.(ts|tsx|js|jsx)$/, "")}`;
290
+ }
291
+ const relativeImport = _path.relative.call(void 0, _path.dirname.call(void 0, outFile), route.filePath).replace(/\\/g, "/").replace(/\.(ts|tsx|js|jsx)$/, "");
292
+ return relativeImport.startsWith(".") ? relativeImport : `./${relativeImport}`;
293
+ }
294
+ pathToRouteName(path) {
295
+ return (path === "/api" ? "root" : path.replace(/^\/api\//, "")).replace(/\//g, "_").replace(/[^a-zA-Z0-9_]/g, "_");
296
+ }
297
+ uniqueRouteName(path, usedNames) {
298
+ const base = this.pathToRouteName(path);
299
+ const seen = usedNames.get(base);
300
+ usedNames.set(base, (_nullishCoalesce(seen, () => ( 0))) + 1);
301
+ return seen ? `${base}_${seen + 1}` : base;
302
+ }
303
+ structureToTypeString(obj, indent) {
304
+ const spaces = " ".repeat(indent);
305
+ const lines = [];
306
+ for (const [key, value] of Object.entries(obj)) {
307
+ const propertyKey = this.toTypePropertyKey(key);
308
+ if (typeof value === "string") {
309
+ lines.push(`${spaces}${propertyKey}: ${value};`);
310
+ } else if (typeof value === "object") {
311
+ lines.push(`${spaces}${propertyKey}: {`);
312
+ lines.push(this.structureToTypeString(value, indent + 1));
313
+ lines.push(`${spaces}};`);
314
+ }
315
+ }
316
+ return lines.join("\n");
317
+ }
318
+ toTypePropertyKey(key) {
319
+ return /^[$A-Z_][0-9A-Z_$]*$/i.test(key) ? key : JSON.stringify(key);
320
+ }
321
+ /**
322
+ * Generate the API index file
323
+ */
324
+ generateAPIIndex(outputPath) {
325
+ const routes = this.scanAPIRoutes();
326
+ const content = this.generateAPIRouter(routes, { outFile: outputPath });
327
+ _fs.mkdirSync.call(void 0, _path.dirname.call(void 0, outputPath), { recursive: true });
328
+ _chunkTIWHTW3Qcjs.writeFileIfChanged.call(void 0, outputPath, content);
329
+ console.log(`\u2705 Generated API types for ${routes.length} routes`);
330
+ }
331
+ };
332
+ _chunkS3JO3N4Hcjs.__name.call(void 0, _APITypeGenerator, "APITypeGenerator");
333
+ var APITypeGenerator = _APITypeGenerator;
334
+
335
+
336
+
337
+ exports.APITypeGenerator = APITypeGenerator;
@@ -0,0 +1,27 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+ var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
4
+
5
+ // src/utils/runtime-env.ts
6
+ function getFarmRuntimeBindings() {
7
+ const runtimeBindings = globalThis.__env__;
8
+ return runtimeBindings && typeof runtimeBindings === "object" ? runtimeBindings : void 0;
9
+ }
10
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getFarmRuntimeBindings, "getFarmRuntimeBindings");
11
+ function readFarmEnvironmentValue(name) {
12
+ const runtimeValue = _optionalChain([getFarmRuntimeBindings, 'call', _ => _(), 'optionalAccess', _2 => _2[name]]);
13
+ if (typeof runtimeValue === "string") return runtimeValue;
14
+ return typeof process !== "undefined" ? _optionalChain([process, 'access', _3 => _3.env, 'optionalAccess', _4 => _4[name]]) : void 0;
15
+ }
16
+ _chunkS3JO3N4Hcjs.__name.call(void 0, readFarmEnvironmentValue, "readFarmEnvironmentValue");
17
+ function isFarmDeployedRuntime() {
18
+ if (getFarmRuntimeBindings()) return true;
19
+ return readFarmEnvironmentValue("NODE_ENV") === "production";
20
+ }
21
+ _chunkS3JO3N4Hcjs.__name.call(void 0, isFarmDeployedRuntime, "isFarmDeployedRuntime");
22
+
23
+
24
+
25
+
26
+
27
+ exports.getFarmRuntimeBindings = getFarmRuntimeBindings; exports.readFarmEnvironmentValue = readFarmEnvironmentValue; exports.isFarmDeployedRuntime = isFarmDeployedRuntime;