@farm.js/core 0.1.17 → 0.1.18

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 (249) 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/cache.cjs +38 -1560
  9. package/dist/chunk-22GUSVNJ.cjs +351 -0
  10. package/dist/chunk-2CQ74SP6.cjs +13 -0
  11. package/dist/chunk-2SJ4RQ6P.cjs +57 -0
  12. package/dist/chunk-3376ZTRC.cjs +1 -0
  13. package/dist/{chunk-YD4J4XCI.mjs → chunk-3XG26Z3J.mjs} +1 -1
  14. package/dist/chunk-4PNUXIVU.cjs +472 -0
  15. package/dist/chunk-4PPEPOZZ.cjs +21 -0
  16. package/dist/chunk-4ZFL5GFN.cjs +520 -0
  17. package/dist/chunk-5OVTOKGH.cjs +65 -0
  18. package/dist/chunk-5QIKR7RR.cjs +224 -0
  19. package/dist/chunk-5ZSWG4UX.cjs +127 -0
  20. package/dist/chunk-62YJ2IEB.cjs +238 -0
  21. package/dist/chunk-6EODJYCX.cjs +183 -0
  22. package/dist/chunk-6EXBPJ24.cjs +434 -0
  23. package/dist/chunk-6QQDAAAZ.cjs +38 -0
  24. package/dist/chunk-6V4TDWEC.cjs +455 -0
  25. package/dist/chunk-72ADZ6GQ.cjs +19 -0
  26. package/dist/chunk-75BRBIFP.cjs +172 -0
  27. package/dist/chunk-7W3CPVXS.cjs +24 -0
  28. package/dist/chunk-A6WIQH5Z.cjs +31 -0
  29. package/dist/chunk-AFOD3LYZ.cjs +377 -0
  30. package/dist/chunk-AMDMVWMI.cjs +39 -0
  31. package/dist/chunk-AORPIPNB.cjs +552 -0
  32. package/dist/chunk-ARJWXNQL.cjs +256 -0
  33. package/dist/chunk-AWRISO2H.cjs +2199 -0
  34. package/dist/chunk-AYJR42WX.cjs +711 -0
  35. package/dist/chunk-B4CH33IG.cjs +644 -0
  36. package/dist/chunk-BIDYX3SL.cjs +91 -0
  37. package/dist/chunk-BSTRERPP.cjs +40 -0
  38. package/dist/chunk-BYODCJD6.cjs +663 -0
  39. package/dist/chunk-C3VRMB6H.cjs +85 -0
  40. package/dist/chunk-C5GUTBZK.cjs +173 -0
  41. package/dist/chunk-CIAGU2X4.cjs +337 -0
  42. package/dist/chunk-CMGMGHUZ.cjs +27 -0
  43. package/dist/chunk-CXP5U3RW.cjs +54 -0
  44. package/dist/chunk-D2ULAULS.cjs +166 -0
  45. package/dist/chunk-D7JTOLFK.cjs +285 -0
  46. package/dist/chunk-DVM4FKZL.cjs +169 -0
  47. package/dist/chunk-DYEJQTDN.cjs +49 -0
  48. package/dist/chunk-E2BMSZ2W.cjs +151 -0
  49. package/dist/chunk-E3UK5IIB.cjs +593 -0
  50. package/dist/chunk-EM6SBQKM.cjs +470 -0
  51. package/dist/chunk-FJSWYIR7.cjs +482 -0
  52. package/dist/chunk-FK6GO24V.cjs +54 -0
  53. package/dist/chunk-FXUUWYAX.cjs +654 -0
  54. package/dist/chunk-G3HRIVEY.cjs +395 -0
  55. package/dist/chunk-G643DQCH.cjs +13 -0
  56. package/dist/chunk-G7HXGLEC.cjs +175 -0
  57. package/dist/chunk-GDSHDTJ4.cjs +152 -0
  58. package/dist/chunk-GNEO2XOF.cjs +2040 -0
  59. package/dist/{chunk-56DAX2BE.mjs → chunk-GYKJCFTS.mjs} +1 -1
  60. package/dist/chunk-H6G5INWM.cjs +1094 -0
  61. package/dist/chunk-HBTUGXHS.cjs +180 -0
  62. package/dist/chunk-HREOKQWT.cjs +45 -0
  63. package/dist/chunk-I4J452B7.cjs +435 -0
  64. package/dist/chunk-I57LW5VZ.cjs +94 -0
  65. package/dist/chunk-I7PUUDGY.cjs +389 -0
  66. package/dist/chunk-IAMRBF3Z.cjs +86 -0
  67. package/dist/chunk-IKNRN4VS.cjs +14214 -0
  68. package/dist/chunk-IQXFRNY2.cjs +169 -0
  69. package/dist/chunk-IXTFU4PL.cjs +2355 -0
  70. package/dist/chunk-J2OP5GG3.cjs +725 -0
  71. package/dist/chunk-J3LOGE4T.cjs +42 -0
  72. package/dist/chunk-J7FSKED3.cjs +93 -0
  73. package/dist/chunk-JDNHKPTD.cjs +22 -0
  74. package/dist/chunk-JSROZYYO.cjs +164 -0
  75. package/dist/chunk-K6FNHVDR.cjs +696 -0
  76. package/dist/chunk-KGZIORNL.cjs +43 -0
  77. package/dist/{chunk-MVIWBEJF.mjs → chunk-KPNVGRBL.mjs} +1 -1
  78. package/dist/chunk-KR6CKSXT.cjs +15 -0
  79. package/dist/chunk-KROWKCUH.cjs +185 -0
  80. package/dist/chunk-KVFPGF2M.cjs +46 -0
  81. package/dist/chunk-LCCBO7PJ.cjs +46 -0
  82. package/dist/chunk-LIUGYUX3.cjs +22 -0
  83. package/dist/chunk-LTNGXMQ6.cjs +55 -0
  84. package/dist/chunk-M2L4MYDQ.cjs +14 -0
  85. package/dist/chunk-MCJLA63J.cjs +1 -0
  86. package/dist/chunk-MKB2EGIR.cjs +148 -0
  87. package/dist/chunk-MQ3H6LT5.cjs +202 -0
  88. package/dist/chunk-MT763TDW.cjs +43 -0
  89. package/dist/chunk-MWSK6C4J.cjs +18 -0
  90. package/dist/chunk-MWWVKDW3.cjs +169 -0
  91. package/dist/chunk-NO3WWW3N.cjs +192 -0
  92. package/dist/chunk-NV3A5DXM.cjs +862 -0
  93. package/dist/chunk-NWOD6NIT.cjs +9 -0
  94. package/dist/chunk-NZKJGRB3.cjs +230 -0
  95. package/dist/chunk-OAVTUMJP.cjs +1496 -0
  96. package/dist/chunk-OHY2ZWUG.cjs +25 -0
  97. package/dist/chunk-OI6CMLWX.cjs +47 -0
  98. package/dist/chunk-OIEOCXKG.cjs +453 -0
  99. package/dist/chunk-OWOUTKIJ.cjs +558 -0
  100. package/dist/chunk-OX6O6WVA.cjs +74 -0
  101. package/dist/chunk-OXSIH4D6.cjs +476 -0
  102. package/dist/chunk-OYEUREB6.cjs +35 -0
  103. package/dist/chunk-PCOTGFSM.cjs +139 -0
  104. package/dist/chunk-PZYCPSCC.cjs +35 -0
  105. package/dist/chunk-QBK2AA4U.cjs +445 -0
  106. package/dist/chunk-QBPXNZGV.cjs +487 -0
  107. package/dist/chunk-QNPEUFHQ.cjs +27 -0
  108. package/dist/chunk-QZRVZSPN.cjs +236 -0
  109. package/dist/chunk-R5A5KNVX.cjs +20 -0
  110. package/dist/chunk-R5JIFR6B.cjs +42 -0
  111. package/dist/chunk-R6AIILII.cjs +193 -0
  112. package/dist/chunk-RG3ZOTG5.cjs +34 -0
  113. package/dist/chunk-ROUTX2E5.cjs +390 -0
  114. package/dist/chunk-RTHIVJ2G.cjs +54 -0
  115. package/dist/chunk-S3A45T7F.cjs +166 -0
  116. package/dist/chunk-S3JO3N4H.cjs +17 -0
  117. package/dist/chunk-SK35NQKK.cjs +27 -0
  118. package/dist/chunk-SU7MH53P.cjs +180 -0
  119. package/dist/chunk-SVRTJOUF.cjs +113 -0
  120. package/dist/chunk-SWN467MP.cjs +18 -0
  121. package/dist/chunk-SYQ3MOWW.cjs +73 -0
  122. package/dist/chunk-T5CERMEH.cjs +417 -0
  123. package/dist/chunk-TFAXUHWX.cjs +206 -0
  124. package/dist/chunk-TIWHTW3Q.cjs +24 -0
  125. package/dist/chunk-TKJZFIML.cjs +20 -0
  126. package/dist/chunk-TKNSDBBN.cjs +193 -0
  127. package/dist/chunk-TWGMSEHX.cjs +525 -0
  128. package/dist/chunk-TYQUSXUG.cjs +1357 -0
  129. package/dist/chunk-U4KT7QP3.cjs +23 -0
  130. package/dist/chunk-UJ2C4ICS.cjs +277 -0
  131. package/dist/chunk-UN5GHC5V.cjs +10244 -0
  132. package/dist/chunk-UQZ4AYTH.cjs +168 -0
  133. package/dist/chunk-US2QVW3E.cjs +36 -0
  134. package/dist/chunk-VB6UCX3V.cjs +421 -0
  135. package/dist/chunk-VEKFLAQM.cjs +300 -0
  136. package/dist/chunk-VQDBNVOO.cjs +14 -0
  137. package/dist/chunk-W4E7WMXE.cjs +71 -0
  138. package/dist/chunk-WJ3HK3LJ.cjs +1102 -0
  139. package/dist/chunk-WMAPPDMM.cjs +28 -0
  140. package/dist/chunk-WMOGFOUJ.cjs +223 -0
  141. package/dist/chunk-WPYFSQKK.cjs +37 -0
  142. package/dist/chunk-WZMNW2IW.cjs +1415 -0
  143. package/dist/chunk-XGC343EY.cjs +443 -0
  144. package/dist/chunk-XSKZORAS.cjs +727 -0
  145. package/dist/chunk-XWAWFQFS.cjs +82 -0
  146. package/dist/chunk-Y4YMF2NQ.cjs +460 -0
  147. package/dist/chunk-Y4YWHNKU.cjs +250 -0
  148. package/dist/chunk-Y53ZSFN6.cjs +504 -0
  149. package/dist/chunk-YA6LLTIJ.cjs +411 -0
  150. package/dist/chunk-YFPGHF5F.cjs +202 -0
  151. package/dist/chunk-YJRZR7VU.cjs +28 -0
  152. package/dist/chunk-YTAABQEV.cjs +1 -0
  153. package/dist/chunk-YX3DBN4M.cjs +18 -0
  154. package/dist/chunk-YZTASLPQ.cjs +64 -0
  155. package/dist/chunk-Z5HIWVDP.cjs +2173 -0
  156. package/dist/chunk-ZEG3OPIB.cjs +93 -0
  157. package/dist/chunk-ZMN3H73H.cjs +155 -0
  158. package/dist/client/lifecycle.cjs +6 -35
  159. package/dist/client-plugins.cjs +7 -448
  160. package/dist/client.cjs +171 -9808
  161. package/dist/config.cjs +8 -36
  162. package/dist/cron.cjs +24 -491
  163. package/dist/deferred.cjs +26 -475
  164. package/dist/deployment.cjs +39 -210
  165. package/dist/devtools-OUIPHVV6.cjs +388 -0
  166. package/dist/devtools-client-4WAPJY5L.cjs +254 -0
  167. package/dist/devtools-ui-5GBDIGMK.cjs +1296 -0
  168. package/dist/docs.cjs +46 -5657
  169. package/dist/env-types.cjs +5 -226
  170. package/dist/env.cjs +21 -338
  171. package/dist/environment/vite.cjs +8 -372
  172. package/dist/environment.cjs +12 -94
  173. package/dist/font.cjs +13 -63
  174. package/dist/headers.cjs +7 -123
  175. package/dist/i18n/client.cjs +55 -294
  176. package/dist/i18n/index.cjs +22 -209
  177. package/dist/i18n/server.cjs +22 -745
  178. package/dist/image/server.cjs +13 -729
  179. package/dist/image/sharp.cjs +33 -171
  180. package/dist/image.cjs +41 -85
  181. package/dist/index.cjs +1151 -68080
  182. package/dist/index.mjs +3 -3
  183. package/dist/instrumentation.cjs +12 -138
  184. package/dist/integration-orm-55F7CII5.cjs +13 -0
  185. package/dist/integrations.cjs +55 -4090
  186. package/dist/internal/app-markdown-runtime.cjs +27 -224
  187. package/dist/internal/build-runtime.cjs +120 -52259
  188. package/dist/internal/build-runtime.mjs +3 -3
  189. package/dist/internal/cli-runtime.cjs +67 -13811
  190. package/dist/internal/client-error-overlay.cjs +80 -733
  191. package/dist/internal/client-error-overlay.mjs +1 -1
  192. package/dist/internal/client-runtime.cjs +81 -913
  193. package/dist/internal/compression-runtime.cjs +8 -214
  194. package/dist/internal/config-runtime.cjs +42 -6547
  195. package/dist/internal/docs-precompiled-runtime.cjs +26 -46
  196. package/dist/internal/infra-analytics-runtime.cjs +10 -536
  197. package/dist/internal/isolated-boundary.cjs +14 -414
  198. package/dist/internal/metadata-image-runtime.cjs +7 -285
  199. package/dist/internal/product-telemetry-runtime.cjs +42 -97
  200. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  201. package/dist/internal/production-node-env.cjs +6 -63
  202. package/dist/internal/production-runtime.cjs +418 -7133
  203. package/dist/internal/request-cookies.cjs +6 -54
  204. package/dist/json-ld.cjs +24 -50
  205. package/dist/layers-E4WPJNY5.cjs +17 -0
  206. package/dist/manager-G4B2IPYE.cjs +14 -0
  207. package/dist/markdown.cjs +21 -547
  208. package/dist/middleware.cjs +36 -2995
  209. package/dist/navigation.cjs +22 -2588
  210. package/dist/nitro-4I2MYLY2.cjs +652 -0
  211. package/dist/observability.cjs +22 -614
  212. package/dist/og.cjs +5 -28
  213. package/dist/plugin.cjs +106 -37442
  214. package/dist/plugin.mjs +2 -2
  215. package/dist/query/client.cjs +113 -449
  216. package/dist/query/index.cjs +26 -288
  217. package/dist/query/parsers.cjs +23 -247
  218. package/dist/query/server.cjs +36 -298
  219. package/dist/renderer/react/client.cjs +9 -43
  220. package/dist/renderer/react/server.cjs +40 -103
  221. package/dist/renderer/react/vite.cjs +7 -29
  222. package/dist/renderer-client.cjs +126 -4295
  223. package/dist/renderer.cjs +31 -249
  224. package/dist/request.cjs +5 -68
  225. package/dist/router.cjs +11 -474
  226. package/dist/routes.cjs +42 -2461
  227. package/dist/schema-dev-notice-MXSZMVDG.cjs +56 -0
  228. package/dist/schema.cjs +6 -33
  229. package/dist/search-client-G3RICOFU.cjs +13 -0
  230. package/dist/server-action-security.cjs +25 -541
  231. package/dist/server-fn-client.cjs +6 -337
  232. package/dist/server-fn.cjs +32 -1841
  233. package/dist/server-plugins.cjs +15 -884
  234. package/dist/server-query-client.cjs +15 -1883
  235. package/dist/server-query.cjs +16 -1838
  236. package/dist/server.cjs +296 -44681
  237. package/dist/server.mjs +2 -2
  238. package/dist/storage.cjs +57 -576
  239. package/dist/testing.cjs +89 -3186
  240. package/dist/theme/client.cjs +13 -108
  241. package/dist/theme/index.cjs +6 -68
  242. package/dist/theme/runtime.cjs +13 -78
  243. package/dist/theme/server.cjs +10 -179
  244. package/dist/version.cjs +4 -32
  245. package/dist/version.mjs +1 -1
  246. package/dist/vite.cjs +119 -37773
  247. package/dist/vite.mjs +2 -2
  248. package/dist/workflows.cjs +19 -1040
  249. 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;