@farm.js/core 0.1.16 → 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 (390) hide show
  1. package/dist/after.cjs +12 -225
  2. package/dist/agent-runtime.cjs +83 -2800
  3. package/dist/agent-runtime.d.mts +3 -3
  4. package/dist/agent-runtime.d.ts +3 -3
  5. package/dist/api/client.cjs +17 -4026
  6. package/dist/api/client.d.mts +3 -3
  7. package/dist/api/client.d.ts +3 -3
  8. package/dist/api/client.mjs +3 -3
  9. package/dist/api/route-manager.cjs +34 -4317
  10. package/dist/api/route-manager.d.mts +3 -3
  11. package/dist/api/route-manager.d.ts +3 -3
  12. package/dist/api/route-manager.mjs +5 -5
  13. package/dist/api/runtime.cjs +29 -2660
  14. package/dist/api/runtime.d.mts +3 -3
  15. package/dist/api/runtime.d.ts +3 -3
  16. package/dist/api/runtime.mjs +6 -3
  17. package/dist/{api-client-B-n3pm_Q.d.mts → api-client-Cx54IR5g.d.mts} +2 -2
  18. package/dist/{api-client-C0_NZEBl.d.ts → api-client-DykpaKcY.d.ts} +2 -2
  19. package/dist/api.cjs +88 -8361
  20. package/dist/api.d.mts +5 -5
  21. package/dist/api.d.ts +5 -5
  22. package/dist/api.mjs +8 -8
  23. package/dist/{app-AyjEsCBq.d.ts → app-BHY_10Lm.d.ts} +3 -3
  24. package/dist/{app-CYPHeOo_.d.mts → app-BMk0do23.d.mts} +3 -3
  25. package/dist/app-markdown.cjs +39 -280
  26. package/dist/app-markdown.d.mts +4 -4
  27. package/dist/app-markdown.d.ts +4 -4
  28. package/dist/app-markdown.mjs +3 -3
  29. package/dist/cache.cjs +38 -1526
  30. package/dist/cache.d.mts +11 -1
  31. package/dist/cache.d.ts +11 -1
  32. package/dist/cache.mjs +1 -1
  33. package/dist/chunk-22GUSVNJ.cjs +351 -0
  34. package/dist/chunk-2CQ74SP6.cjs +13 -0
  35. package/dist/chunk-2SJ4RQ6P.cjs +57 -0
  36. package/dist/chunk-3376ZTRC.cjs +1 -0
  37. package/dist/{chunk-IL5RWYK7.mjs → chunk-3XG26Z3J.mjs} +1 -1
  38. package/dist/{chunk-7HDZYYS4.mjs → chunk-4OOBRCJX.mjs} +27 -5
  39. package/dist/chunk-4PNUXIVU.cjs +472 -0
  40. package/dist/chunk-4PPEPOZZ.cjs +21 -0
  41. package/dist/chunk-4ZFL5GFN.cjs +520 -0
  42. package/dist/{chunk-B76DT5Y6.mjs → chunk-57J3Y7Y3.mjs} +1 -1
  43. package/dist/chunk-5OVTOKGH.cjs +65 -0
  44. package/dist/chunk-5QIKR7RR.cjs +224 -0
  45. package/dist/{chunk-MOQNHLTS.mjs → chunk-5QOEPUYE.mjs} +5 -2
  46. package/dist/{chunk-HKLRP3BN.mjs → chunk-5SPPCN5J.mjs} +1 -1
  47. package/dist/chunk-5ZSWG4UX.cjs +127 -0
  48. package/dist/chunk-62YJ2IEB.cjs +238 -0
  49. package/dist/chunk-6EODJYCX.cjs +183 -0
  50. package/dist/chunk-6EXBPJ24.cjs +434 -0
  51. package/dist/chunk-6QQDAAAZ.cjs +38 -0
  52. package/dist/chunk-6V4TDWEC.cjs +455 -0
  53. package/dist/{chunk-LUC2FAGW.mjs → chunk-6VQIKZZO.mjs} +1 -1
  54. package/dist/chunk-72ADZ6GQ.cjs +19 -0
  55. package/dist/chunk-75BRBIFP.cjs +172 -0
  56. package/dist/{chunk-7ZWL7XOU.mjs → chunk-76DG3LF3.mjs} +1 -1
  57. package/dist/chunk-7W3CPVXS.cjs +24 -0
  58. package/dist/chunk-A6WIQH5Z.cjs +31 -0
  59. package/dist/{chunk-EWDK36MM.mjs → chunk-A72YEUZ3.mjs} +1 -1
  60. package/dist/chunk-AFOD3LYZ.cjs +377 -0
  61. package/dist/chunk-AMDMVWMI.cjs +39 -0
  62. package/dist/chunk-AORPIPNB.cjs +552 -0
  63. package/dist/chunk-ARJWXNQL.cjs +256 -0
  64. package/dist/{chunk-ZHOIQC6U.mjs → chunk-ATERBVHQ.mjs} +2 -2
  65. package/dist/chunk-AWRISO2H.cjs +2199 -0
  66. package/dist/chunk-AYJR42WX.cjs +711 -0
  67. package/dist/chunk-B4CH33IG.cjs +644 -0
  68. package/dist/chunk-BIDYX3SL.cjs +91 -0
  69. package/dist/chunk-BSTRERPP.cjs +40 -0
  70. package/dist/chunk-BYODCJD6.cjs +663 -0
  71. package/dist/chunk-C3VRMB6H.cjs +85 -0
  72. package/dist/chunk-C5GUTBZK.cjs +173 -0
  73. package/dist/chunk-CIAGU2X4.cjs +337 -0
  74. package/dist/chunk-CMGMGHUZ.cjs +27 -0
  75. package/dist/chunk-CXP5U3RW.cjs +54 -0
  76. package/dist/chunk-D2ULAULS.cjs +166 -0
  77. package/dist/chunk-D7JTOLFK.cjs +285 -0
  78. package/dist/chunk-DVM4FKZL.cjs +169 -0
  79. package/dist/chunk-DYEJQTDN.cjs +49 -0
  80. package/dist/chunk-E2BMSZ2W.cjs +151 -0
  81. package/dist/chunk-E3UK5IIB.cjs +593 -0
  82. package/dist/chunk-EM6SBQKM.cjs +470 -0
  83. package/dist/{chunk-27JNCYEK.mjs → chunk-EN7WTEAY.mjs} +2 -2
  84. package/dist/{chunk-IGO2HEV7.mjs → chunk-F6SJAKFJ.mjs} +62 -28
  85. package/dist/{chunk-GSDIZACQ.mjs → chunk-FG5H2VCJ.mjs} +2 -2
  86. package/dist/chunk-FJSWYIR7.cjs +482 -0
  87. package/dist/chunk-FK6GO24V.cjs +54 -0
  88. package/dist/chunk-FXUUWYAX.cjs +654 -0
  89. package/dist/chunk-G3HRIVEY.cjs +395 -0
  90. package/dist/chunk-G643DQCH.cjs +13 -0
  91. package/dist/chunk-G7HXGLEC.cjs +175 -0
  92. package/dist/chunk-GDSHDTJ4.cjs +152 -0
  93. package/dist/chunk-GNEO2XOF.cjs +2040 -0
  94. package/dist/{chunk-NHHKW2T6.mjs → chunk-GYKJCFTS.mjs} +170 -52
  95. package/dist/chunk-H6G5INWM.cjs +1094 -0
  96. package/dist/chunk-HBTUGXHS.cjs +180 -0
  97. package/dist/chunk-HREOKQWT.cjs +45 -0
  98. package/dist/chunk-I4J452B7.cjs +435 -0
  99. package/dist/chunk-I57LW5VZ.cjs +94 -0
  100. package/dist/chunk-I7PUUDGY.cjs +389 -0
  101. package/dist/chunk-IAMRBF3Z.cjs +86 -0
  102. package/dist/chunk-IKNRN4VS.cjs +14214 -0
  103. package/dist/chunk-IQXFRNY2.cjs +169 -0
  104. package/dist/chunk-IXTFU4PL.cjs +2355 -0
  105. package/dist/chunk-J2OP5GG3.cjs +725 -0
  106. package/dist/chunk-J3LOGE4T.cjs +42 -0
  107. package/dist/chunk-J7FSKED3.cjs +93 -0
  108. package/dist/chunk-JDNHKPTD.cjs +22 -0
  109. package/dist/chunk-JSROZYYO.cjs +164 -0
  110. package/dist/chunk-K6FNHVDR.cjs +696 -0
  111. package/dist/chunk-KGZIORNL.cjs +43 -0
  112. package/dist/{chunk-LZK5CXDW.mjs → chunk-KLSSO6YD.mjs} +2 -2
  113. package/dist/{chunk-TYVVIQ5M.mjs → chunk-KPNVGRBL.mjs} +32 -25
  114. package/dist/chunk-KR6CKSXT.cjs +15 -0
  115. package/dist/chunk-KROWKCUH.cjs +185 -0
  116. package/dist/chunk-KVFPGF2M.cjs +46 -0
  117. package/dist/{chunk-KUO3GBPK.mjs → chunk-L6V3P73N.mjs} +1 -1
  118. package/dist/chunk-LCCBO7PJ.cjs +46 -0
  119. package/dist/chunk-LIUGYUX3.cjs +22 -0
  120. package/dist/chunk-LTNGXMQ6.cjs +55 -0
  121. package/dist/chunk-M2L4MYDQ.cjs +14 -0
  122. package/dist/chunk-MCJLA63J.cjs +1 -0
  123. package/dist/chunk-MKB2EGIR.cjs +148 -0
  124. package/dist/chunk-MQ3H6LT5.cjs +202 -0
  125. package/dist/chunk-MT763TDW.cjs +43 -0
  126. package/dist/chunk-MWSK6C4J.cjs +18 -0
  127. package/dist/chunk-MWWVKDW3.cjs +169 -0
  128. package/dist/{chunk-KTGFMHET.mjs → chunk-N6UROPT7.mjs} +1 -1
  129. package/dist/chunk-NO3WWW3N.cjs +192 -0
  130. package/dist/{chunk-NDD2YVGU.mjs → chunk-NRVGEI5I.mjs} +10 -3
  131. package/dist/chunk-NV3A5DXM.cjs +862 -0
  132. package/dist/chunk-NWOD6NIT.cjs +9 -0
  133. package/dist/chunk-NZKJGRB3.cjs +230 -0
  134. package/dist/chunk-OAVTUMJP.cjs +1496 -0
  135. package/dist/chunk-OHY2ZWUG.cjs +25 -0
  136. package/dist/chunk-OI6CMLWX.cjs +47 -0
  137. package/dist/chunk-OIEOCXKG.cjs +453 -0
  138. package/dist/chunk-OWOUTKIJ.cjs +558 -0
  139. package/dist/chunk-OX6O6WVA.cjs +74 -0
  140. package/dist/chunk-OXSIH4D6.cjs +476 -0
  141. package/dist/chunk-OYEUREB6.cjs +35 -0
  142. package/dist/chunk-PCOTGFSM.cjs +139 -0
  143. package/dist/chunk-PZYCPSCC.cjs +35 -0
  144. package/dist/chunk-QBK2AA4U.cjs +445 -0
  145. package/dist/chunk-QBPXNZGV.cjs +487 -0
  146. package/dist/{chunk-IXTEENRS.mjs → chunk-QGVJVSNX.mjs} +5 -5
  147. package/dist/chunk-QNPEUFHQ.cjs +27 -0
  148. package/dist/chunk-QZRVZSPN.cjs +236 -0
  149. package/dist/chunk-R5A5KNVX.cjs +20 -0
  150. package/dist/chunk-R5JIFR6B.cjs +42 -0
  151. package/dist/chunk-R6AIILII.cjs +193 -0
  152. package/dist/chunk-RG3ZOTG5.cjs +34 -0
  153. package/dist/chunk-ROUTX2E5.cjs +390 -0
  154. package/dist/chunk-RTHIVJ2G.cjs +54 -0
  155. package/dist/chunk-S3A45T7F.cjs +166 -0
  156. package/dist/chunk-S3JO3N4H.cjs +17 -0
  157. package/dist/chunk-SK35NQKK.cjs +27 -0
  158. package/dist/chunk-SU7MH53P.cjs +180 -0
  159. package/dist/chunk-SVRTJOUF.cjs +113 -0
  160. package/dist/chunk-SWN467MP.cjs +18 -0
  161. package/dist/{chunk-6SCB2MXB.mjs → chunk-SXHV42UQ.mjs} +16 -1
  162. package/dist/{chunk-OWTIOHON.mjs → chunk-SYGGPS4A.mjs} +2 -2
  163. package/dist/chunk-SYQ3MOWW.cjs +73 -0
  164. package/dist/chunk-T5CERMEH.cjs +417 -0
  165. package/dist/chunk-TFAXUHWX.cjs +206 -0
  166. package/dist/chunk-TIWHTW3Q.cjs +24 -0
  167. package/dist/chunk-TKJZFIML.cjs +20 -0
  168. package/dist/chunk-TKNSDBBN.cjs +193 -0
  169. package/dist/{chunk-NC333MFA.mjs → chunk-TSWW5BVH.mjs} +7 -4
  170. package/dist/chunk-TWGMSEHX.cjs +525 -0
  171. package/dist/chunk-TYQUSXUG.cjs +1357 -0
  172. package/dist/chunk-U4KT7QP3.cjs +23 -0
  173. package/dist/{chunk-LK6FGAQR.mjs → chunk-UDBJCUPA.mjs} +7 -4
  174. package/dist/chunk-UJ2C4ICS.cjs +277 -0
  175. package/dist/chunk-UN5GHC5V.cjs +10244 -0
  176. package/dist/chunk-UQZ4AYTH.cjs +168 -0
  177. package/dist/chunk-US2QVW3E.cjs +36 -0
  178. package/dist/{chunk-NUD6XBMO.mjs → chunk-UTBVHYS3.mjs} +2 -2
  179. package/dist/{chunk-76MNRHTS.mjs → chunk-UUYF3CHN.mjs} +2 -2
  180. package/dist/chunk-VB6UCX3V.cjs +421 -0
  181. package/dist/chunk-VEKFLAQM.cjs +300 -0
  182. package/dist/chunk-VQDBNVOO.cjs +14 -0
  183. package/dist/chunk-W4E7WMXE.cjs +71 -0
  184. package/dist/{chunk-VVTREAG5.mjs → chunk-WD4YXVLV.mjs} +11 -3
  185. package/dist/{chunk-UQZPTIML.mjs → chunk-WD5PNSOB.mjs} +2 -2
  186. package/dist/chunk-WJ3HK3LJ.cjs +1102 -0
  187. package/dist/chunk-WMAPPDMM.cjs +28 -0
  188. package/dist/chunk-WMOGFOUJ.cjs +223 -0
  189. package/dist/chunk-WPYFSQKK.cjs +37 -0
  190. package/dist/chunk-WZMNW2IW.cjs +1415 -0
  191. package/dist/chunk-XGC343EY.cjs +443 -0
  192. package/dist/{chunk-DPZUDPVJ.mjs → chunk-XP777LRD.mjs} +1 -1
  193. package/dist/chunk-XSKZORAS.cjs +727 -0
  194. package/dist/chunk-XWAWFQFS.cjs +82 -0
  195. package/dist/{chunk-KATQ6I56.mjs → chunk-XWAYMDLB.mjs} +1 -1
  196. package/dist/chunk-Y4YMF2NQ.cjs +460 -0
  197. package/dist/chunk-Y4YWHNKU.cjs +250 -0
  198. package/dist/chunk-Y53ZSFN6.cjs +504 -0
  199. package/dist/chunk-YA6LLTIJ.cjs +411 -0
  200. package/dist/chunk-YFPGHF5F.cjs +202 -0
  201. package/dist/chunk-YJRZR7VU.cjs +28 -0
  202. package/dist/chunk-YTAABQEV.cjs +1 -0
  203. package/dist/chunk-YX3DBN4M.cjs +18 -0
  204. package/dist/chunk-YZTASLPQ.cjs +64 -0
  205. package/dist/chunk-Z5HIWVDP.cjs +2173 -0
  206. package/dist/{chunk-Q3MDL7TM.mjs → chunk-ZCNJKLA2.mjs} +30 -11
  207. package/dist/chunk-ZEG3OPIB.cjs +93 -0
  208. package/dist/chunk-ZMN3H73H.cjs +155 -0
  209. package/dist/client/lifecycle.cjs +6 -35
  210. package/dist/{client-plugins-CqVtZi5X.d.ts → client-plugins-C089bQhN.d.ts} +2 -2
  211. package/dist/{client-plugins-CIPRtSsW.d.mts → client-plugins-JXXmZliS.d.mts} +2 -2
  212. package/dist/client-plugins.cjs +7 -448
  213. package/dist/client-plugins.d.mts +3 -3
  214. package/dist/client-plugins.d.ts +3 -3
  215. package/dist/client.cjs +171 -9774
  216. package/dist/client.d.mts +8 -8
  217. package/dist/client.d.ts +8 -8
  218. package/dist/client.mjs +6 -6
  219. package/dist/config.cjs +8 -36
  220. package/dist/config.d.mts +3 -3
  221. package/dist/config.d.ts +3 -3
  222. package/dist/cron.cjs +24 -491
  223. package/dist/cron.mjs +2 -2
  224. package/dist/deferred.cjs +26 -475
  225. package/dist/deployment.cjs +39 -210
  226. package/dist/devtools-OUIPHVV6.cjs +388 -0
  227. package/dist/{devtools-IU7LKZOH.mjs → devtools-UFVTMQX5.mjs} +7 -7
  228. package/dist/devtools-client-4WAPJY5L.cjs +254 -0
  229. package/dist/devtools-ui-5GBDIGMK.cjs +1296 -0
  230. package/dist/docs.cjs +46 -5649
  231. package/dist/docs.mjs +9 -9
  232. package/dist/{endpoint-kSAxE52R.d.ts → endpoint-1zA994xL.d.ts} +1 -1
  233. package/dist/{endpoint-Bu3XgeMK.d.mts → endpoint-DAc96i93.d.mts} +1 -1
  234. package/dist/env-types.cjs +5 -226
  235. package/dist/env.cjs +23 -306
  236. package/dist/env.d.mts +5 -3
  237. package/dist/env.d.ts +5 -3
  238. package/dist/env.mjs +2 -1
  239. package/dist/environment/vite.cjs +8 -372
  240. package/dist/environment.cjs +12 -94
  241. package/dist/font.cjs +13 -63
  242. package/dist/headers.cjs +7 -123
  243. package/dist/i18n/client.cjs +55 -294
  244. package/dist/i18n/index.cjs +22 -209
  245. package/dist/i18n/server.cjs +22 -745
  246. package/dist/image/server.cjs +13 -729
  247. package/dist/image/sharp.cjs +33 -171
  248. package/dist/image.cjs +41 -85
  249. package/dist/index.cjs +1151 -67862
  250. package/dist/index.d.mts +14 -14
  251. package/dist/index.d.ts +14 -14
  252. package/dist/index.mjs +34 -34
  253. package/dist/instrumentation.cjs +12 -138
  254. package/dist/integration-orm-55F7CII5.cjs +13 -0
  255. package/dist/integrations.cjs +55 -4090
  256. package/dist/integrations.d.mts +3 -3
  257. package/dist/integrations.d.ts +3 -3
  258. package/dist/internal/app-markdown-runtime.cjs +27 -224
  259. package/dist/internal/app-markdown-runtime.d.mts +3 -3
  260. package/dist/internal/app-markdown-runtime.d.ts +3 -3
  261. package/dist/internal/app-markdown-runtime.mjs +2 -2
  262. package/dist/internal/build-runtime.cjs +120 -52038
  263. package/dist/internal/build-runtime.d.mts +5 -5
  264. package/dist/internal/build-runtime.d.ts +5 -5
  265. package/dist/internal/build-runtime.mjs +23 -23
  266. package/dist/internal/cli-runtime.cjs +67 -13765
  267. package/dist/internal/cli-runtime.mjs +13 -13
  268. package/dist/internal/client-error-overlay.cjs +80 -733
  269. package/dist/internal/client-error-overlay.mjs +1 -1
  270. package/dist/internal/client-runtime.cjs +81 -913
  271. package/dist/internal/compression-runtime.cjs +8 -214
  272. package/dist/internal/compression-runtime.d.mts +3 -3
  273. package/dist/internal/compression-runtime.d.ts +3 -3
  274. package/dist/internal/config-runtime.cjs +42 -6535
  275. package/dist/internal/config-runtime.d.mts +4 -4
  276. package/dist/internal/config-runtime.d.ts +4 -4
  277. package/dist/internal/config-runtime.mjs +7 -7
  278. package/dist/internal/docs-precompiled-runtime.cjs +26 -46
  279. package/dist/internal/infra-analytics-runtime.cjs +10 -536
  280. package/dist/internal/isolated-boundary.cjs +14 -414
  281. package/dist/internal/metadata-image-runtime.cjs +7 -285
  282. package/dist/internal/product-telemetry-runtime.cjs +42 -97
  283. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  284. package/dist/internal/production-node-env.cjs +6 -63
  285. package/dist/internal/production-runtime.cjs +418 -7073
  286. package/dist/internal/production-runtime.d.mts +9 -9
  287. package/dist/internal/production-runtime.d.ts +9 -9
  288. package/dist/internal/production-runtime.mjs +6 -6
  289. package/dist/internal/request-cookies.cjs +6 -54
  290. package/dist/json-ld.cjs +24 -50
  291. package/dist/layers-E4WPJNY5.cjs +17 -0
  292. package/dist/manager-G4B2IPYE.cjs +14 -0
  293. package/dist/markdown.cjs +21 -532
  294. package/dist/markdown.mjs +1 -1
  295. package/dist/{metadata-8g__AMPM.d.ts → metadata-BcNJP4fq.d.ts} +1 -1
  296. package/dist/{metadata-OMX6wFNf.d.mts → metadata-C1Z9vLbb.d.mts} +1 -1
  297. package/dist/middleware.cjs +36 -2988
  298. package/dist/middleware.d.mts +5 -5
  299. package/dist/middleware.d.ts +5 -5
  300. package/dist/middleware.mjs +4 -4
  301. package/dist/navigation.cjs +22 -2588
  302. package/dist/nitro-4I2MYLY2.cjs +652 -0
  303. package/dist/{nitro-3N4ZXRYM.mjs → nitro-CVZ36JM5.mjs} +4 -4
  304. package/dist/observability.cjs +22 -614
  305. package/dist/og.cjs +5 -28
  306. package/dist/plugin.cjs +106 -37291
  307. package/dist/plugin.d.mts +3 -3
  308. package/dist/plugin.d.ts +3 -3
  309. package/dist/plugin.mjs +19 -19
  310. package/dist/{production-runtime-W3M0eNDV.d.mts → production-runtime-jcrTlRTb.d.mts} +1 -1
  311. package/dist/{production-runtime-BJh7o6Cr.d.ts → production-runtime-oKmC0WU-.d.ts} +1 -1
  312. package/dist/query/client.cjs +113 -449
  313. package/dist/query/index.cjs +26 -288
  314. package/dist/query/parsers.cjs +23 -247
  315. package/dist/query/server.cjs +36 -298
  316. package/dist/{render-plan-io7pvDNc.d.mts → render-plan-BLIfc4jt.d.mts} +1 -1
  317. package/dist/{render-plan-Be4ZGTJP.d.ts → render-plan-DOB9cV-h.d.ts} +1 -1
  318. package/dist/renderer/react/client.cjs +9 -43
  319. package/dist/renderer/react/server.cjs +40 -103
  320. package/dist/renderer/react/vite.cjs +7 -29
  321. package/dist/renderer-client.cjs +126 -4261
  322. package/dist/renderer-client.d.mts +5 -5
  323. package/dist/renderer-client.d.ts +5 -5
  324. package/dist/renderer-client.mjs +3 -3
  325. package/dist/renderer.cjs +31 -249
  326. package/dist/{request-DZkHYQ89.d.mts → request-Cr53NRHr.d.mts} +1 -1
  327. package/dist/{request-G8JhKr4F.d.ts → request-Dt2gNuQD.d.ts} +1 -1
  328. package/dist/request.cjs +5 -68
  329. package/dist/request.d.mts +4 -4
  330. package/dist/request.d.ts +4 -4
  331. package/dist/{route-C_eLaFTZ.d.mts → route-B0XrsrFk.d.mts} +1 -1
  332. package/dist/{route-BxNJT447.d.ts → route-DOEpbyWZ.d.ts} +1 -1
  333. package/dist/{route-rendering-BcLLPJgN.d.ts → route-rendering-CWYd8Mv1.d.ts} +1 -1
  334. package/dist/{route-rendering-CbAKr1TY.d.mts → route-rendering-CeFBEAoZ.d.mts} +1 -1
  335. package/dist/router.cjs +11 -474
  336. package/dist/routes.cjs +42 -2424
  337. package/dist/routes.d.mts +4 -4
  338. package/dist/routes.d.ts +4 -4
  339. package/dist/routes.mjs +2 -2
  340. package/dist/schema-dev-notice-MXSZMVDG.cjs +56 -0
  341. package/dist/schema.cjs +6 -33
  342. package/dist/search-client-G3RICOFU.cjs +13 -0
  343. package/dist/server-action-security.cjs +25 -541
  344. package/dist/server-fn-client.cjs +6 -337
  345. package/dist/server-fn-client.d.mts +3 -3
  346. package/dist/server-fn-client.d.ts +3 -3
  347. package/dist/server-fn.cjs +32 -1799
  348. package/dist/server-fn.d.mts +1 -1
  349. package/dist/server-fn.d.ts +1 -1
  350. package/dist/server-fn.mjs +2 -2
  351. package/dist/server-plugins.cjs +15 -884
  352. package/dist/server-plugins.d.mts +4 -4
  353. package/dist/server-plugins.d.ts +4 -4
  354. package/dist/server-query-client.cjs +15 -1849
  355. package/dist/server-query-client.d.mts +1 -1
  356. package/dist/server-query-client.d.ts +1 -1
  357. package/dist/server-query-client.mjs +4 -4
  358. package/dist/server-query.cjs +16 -1796
  359. package/dist/server-query.d.mts +1 -1
  360. package/dist/server-query.d.ts +1 -1
  361. package/dist/server-query.mjs +3 -3
  362. package/dist/server.cjs +296 -44522
  363. package/dist/server.d.mts +9 -9
  364. package/dist/server.d.ts +9 -9
  365. package/dist/server.mjs +22 -22
  366. package/dist/{spa-router-BcS_4nqm.d.mts → spa-router-CQWiYGxS.d.mts} +2 -2
  367. package/dist/{spa-router-BzFBUJkn.d.ts → spa-router-Wjiw-8hB.d.ts} +2 -2
  368. package/dist/storage.cjs +57 -576
  369. package/dist/testing.cjs +92 -3148
  370. package/dist/testing.d.mts +3 -3
  371. package/dist/testing.d.ts +3 -3
  372. package/dist/testing.mjs +11 -7
  373. package/dist/theme/client.cjs +13 -108
  374. package/dist/theme/index.cjs +6 -68
  375. package/dist/theme/runtime.cjs +13 -78
  376. package/dist/theme/server.cjs +10 -179
  377. package/dist/{utils-C4yrAhNc.d.ts → utils-B0XJmG_b.d.ts} +1 -1
  378. package/dist/{utils-5kQP1mFR.d.mts → utils-uUxF0K0P.d.mts} +1 -1
  379. package/dist/version.cjs +4 -32
  380. package/dist/version.mjs +1 -1
  381. package/dist/vite.cjs +119 -37622
  382. package/dist/vite.d.mts +3 -3
  383. package/dist/vite.d.ts +3 -3
  384. package/dist/vite.mjs +19 -19
  385. package/dist/workflows.cjs +19 -1040
  386. package/dist/workflows.mjs +2 -2
  387. package/package.json +2 -2
  388. package/dist/{chunk-VO5SCWF5.mjs → chunk-BNGS6KJ6.mjs} +0 -0
  389. package/dist/{chunk-MUUZJLCI.mjs → chunk-EGJDUF4Q.mjs} +3 -3
  390. package/dist/{chunk-4L7SZOHZ.mjs → chunk-YHOCRI4H.mjs} +3 -3
@@ -0,0 +1,1102 @@
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
+ var _chunk5OVTOKGHcjs = require('./chunk-5OVTOKGH.cjs');
5
+
6
+
7
+ var _chunkR5A5KNVXcjs = require('./chunk-R5A5KNVX.cjs');
8
+
9
+
10
+
11
+ var _chunkSWN467MPcjs = require('./chunk-SWN467MP.cjs');
12
+
13
+
14
+ var _chunkJ7FSKED3cjs = require('./chunk-J7FSKED3.cjs');
15
+
16
+
17
+
18
+
19
+ var _chunkOXSIH4D6cjs = require('./chunk-OXSIH4D6.cjs');
20
+
21
+
22
+
23
+
24
+ var _chunkC5GUTBZKcjs = require('./chunk-C5GUTBZK.cjs');
25
+
26
+
27
+ var _chunkQBK2AA4Ucjs = require('./chunk-QBK2AA4U.cjs');
28
+
29
+
30
+ var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
31
+
32
+ // src/client/metadata-reconciler.ts
33
+ var MANAGED_ATTRIBUTE = _chunkOXSIH4D6cjs.FARM_METADATA_ATTRIBUTE;
34
+ var OWNED_SELECTORS = [
35
+ 'meta[name="description"]',
36
+ 'meta[name="keywords"]',
37
+ 'meta[name="author"]',
38
+ 'meta[name="google-site-verification"]',
39
+ 'meta[name="msvalidate.01"]',
40
+ 'meta[name="yandex-verification"]',
41
+ 'meta[name="creator"]',
42
+ 'meta[name="publisher"]',
43
+ 'meta[name="robots"]',
44
+ 'meta[name="googlebot"]',
45
+ 'link[rel="author"]',
46
+ 'link[rel="canonical"]',
47
+ 'link[rel="alternate"]',
48
+ 'meta[property^="og:"]',
49
+ 'meta[property^="article:"]',
50
+ 'meta[name^="twitter:"]',
51
+ // Meta tags named by the app carry the marker, since no fixed name matches them.
52
+ `meta[${MANAGED_ATTRIBUTE}]`
53
+ ].join(", ");
54
+ var ICON_SELECTORS = [
55
+ 'link[rel="icon"]',
56
+ 'link[rel="shortcut icon"]',
57
+ 'link[rel="apple-touch-icon"]'
58
+ ].join(", ");
59
+ var MANIFEST_SELECTOR = 'link[rel="manifest"]';
60
+ var PAGE_JSON_LD_SELECTOR = `script[type="application/ld+json"][${MANAGED_ATTRIBUTE}]`;
61
+ function removeAll(selector) {
62
+ for (const element of Array.from(document.head.querySelectorAll(selector))) {
63
+ element.remove();
64
+ }
65
+ }
66
+ _chunkS3JO3N4Hcjs.__name.call(void 0, removeAll, "removeAll");
67
+ function applyFarmMetadataToDocument(metadata, pathname) {
68
+ document.title = _chunkOXSIH4D6cjs.resolveMetadataTitle.call(void 0, _optionalChain([metadata, 'optionalAccess', _ => _.title])) || "Farm.js App";
69
+ const rendered = _chunkOXSIH4D6cjs.renderMetadataHead.call(void 0, metadata, { pathname });
70
+ const template = document.createElement("template");
71
+ template.innerHTML = rendered.tags;
72
+ removeAll(OWNED_SELECTORS);
73
+ removeAll(PAGE_JSON_LD_SELECTOR);
74
+ if (_optionalChain([metadata, 'optionalAccess', _2 => _2.icons])) removeAll(ICON_SELECTORS);
75
+ if (_optionalChain([metadata, 'optionalAccess', _3 => _3.manifest])) removeAll(MANIFEST_SELECTOR);
76
+ for (const element of Array.from(template.content.children)) {
77
+ element.setAttribute(MANAGED_ATTRIBUTE, "");
78
+ document.head.appendChild(element);
79
+ }
80
+ }
81
+ _chunkS3JO3N4Hcjs.__name.call(void 0, applyFarmMetadataToDocument, "applyFarmMetadataToDocument");
82
+
83
+ // src/client/spa-router.ts
84
+ var MAX_CONCURRENT_VIEWPORT_PREFETCHES = 4;
85
+ var FARM_PAGE_STATE_KEY = "__farmPageState";
86
+ var FARM_INTERCEPT_FROM_KEY = "__farmInterceptFrom";
87
+ var FARM_HISTORY_INDEX_KEY = "__farmHistoryIndex";
88
+ function readHistoryIndex(state) {
89
+ if (!state || typeof state !== "object") return null;
90
+ const value = state[FARM_HISTORY_INDEX_KEY];
91
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
92
+ }
93
+ _chunkS3JO3N4Hcjs.__name.call(void 0, readHistoryIndex, "readHistoryIndex");
94
+ var IDLE_NAVIGATION_STATE = {
95
+ state: "idle",
96
+ pending: false,
97
+ from: null,
98
+ to: null,
99
+ action: null,
100
+ startedAt: null
101
+ };
102
+ function getActiveLayoutChainHeader() {
103
+ if (typeof document === "undefined") return void 0;
104
+ const patterns = Array.from(
105
+ document.querySelectorAll('[data-farm-layout-boundary="true"]')
106
+ ).map((element) => element.dataset.farmLayoutPattern).filter((pattern) => Boolean(pattern));
107
+ return patterns.length > 0 ? JSON.stringify(patterns) : void 0;
108
+ }
109
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getActiveLayoutChainHeader, "getActiveLayoutChainHeader");
110
+ var routerInstance = null;
111
+ var _SPARouter = class _SPARouter {
112
+ constructor(options = {}) {
113
+ this.cache = /* @__PURE__ */ new Map();
114
+ this.prefetchingUrls = /* @__PURE__ */ new Set();
115
+ this.pendingPrefetches = /* @__PURE__ */ new Map();
116
+ this.cacheGeneration = 0;
117
+ this.observedPrefetchLinks = /* @__PURE__ */ new Map();
118
+ this.prefetchTimers = /* @__PURE__ */ new Map();
119
+ this.viewportPrefetchQueue = [];
120
+ this.viewportPrefetchTasksByHref = /* @__PURE__ */ new Map();
121
+ this.viewportPrefetchTasksByElement = /* @__PURE__ */ new Map();
122
+ this.activeViewportPrefetches = 0;
123
+ this.destroyed = false;
124
+ this.blockers = /* @__PURE__ */ new Set();
125
+ this.unloadBlockers = /* @__PURE__ */ new Map();
126
+ this.navigationListeners = /* @__PURE__ */ new Set();
127
+ this.navigationState = IDLE_NAVIGATION_STATE;
128
+ this.currentHistoryPath = null;
129
+ this.currentHistoryHash = "";
130
+ this.currentHistoryIndex = null;
131
+ this.suppressNextPopState = false;
132
+ this.navigationSequence = 0;
133
+ this.scrollElements = /* @__PURE__ */ new Map();
134
+ this.onPopState = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (event) => {
135
+ void this.handlePopState(event);
136
+ }, "onPopState");
137
+ this.onBeforeUnload = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (event) => {
138
+ if (this.shouldBlockUnload()) {
139
+ event.preventDefault();
140
+ event.returnValue = "";
141
+ }
142
+ this.saveScrollPosition(window.location.pathname + window.location.search);
143
+ }, "onBeforeUnload");
144
+ this.options = {
145
+ prefetchTimeout: _nullishCoalesce(options.prefetchTimeout, () => ( 100)),
146
+ cacheMaxAge: _nullishCoalesce(options.cacheMaxAge, () => ( 3e4)),
147
+ // 30 seconds
148
+ scrollRestoration: _nullishCoalesce(options.scrollRestoration, () => ( true)),
149
+ shouldUseDocumentNavigation: _nullishCoalesce(options.shouldUseDocumentNavigation, () => ( (() => false))),
150
+ deploymentId: _nullishCoalesce(options.deploymentId, () => ( readBrowserDeploymentId()))
151
+ };
152
+ if (typeof window !== "undefined") {
153
+ window.addEventListener("popstate", this.onPopState);
154
+ window.addEventListener("beforeunload", this.onBeforeUnload);
155
+ this.currentHistoryPath = window.location.pathname + window.location.search;
156
+ this.currentHistoryHash = window.location.hash;
157
+ this.currentInterceptFrom = _optionalChain([window, 'access', _4 => _4.history, 'access', _5 => _5.state, 'optionalAccess', _6 => _6[FARM_INTERCEPT_FROM_KEY]]);
158
+ const existingIndex = readHistoryIndex(window.history.state);
159
+ if (existingIndex == null) {
160
+ try {
161
+ window.history.replaceState(
162
+ {
163
+ ..._nullishCoalesce(window.history.state, () => ( {})),
164
+ [FARM_HISTORY_INDEX_KEY]: 0
165
+ },
166
+ "",
167
+ window.location.href
168
+ );
169
+ this.currentHistoryIndex = 0;
170
+ } catch (e) {
171
+ this.currentHistoryIndex = null;
172
+ }
173
+ } else {
174
+ this.currentHistoryIndex = existingIndex;
175
+ }
176
+ }
177
+ }
178
+ /** Remove global listeners. Intended for tests and teardown. */
179
+ destroy() {
180
+ if (typeof window === "undefined") return;
181
+ this.destroyed = true;
182
+ this.cancelActiveNavigation();
183
+ this.clearCache();
184
+ _optionalChain([this, 'access', _7 => _7.prefetchObserver, 'optionalAccess', _8 => _8.disconnect, 'call', _9 => _9()]);
185
+ this.prefetchObserver = void 0;
186
+ for (const timer of this.prefetchTimers.values()) clearTimeout(timer);
187
+ this.observedPrefetchLinks.clear();
188
+ this.prefetchTimers.clear();
189
+ for (const task of this.viewportPrefetchQueue) task.cancelled = true;
190
+ this.viewportPrefetchQueue.length = 0;
191
+ this.viewportPrefetchTasksByHref.clear();
192
+ this.viewportPrefetchTasksByElement.clear();
193
+ window.removeEventListener("popstate", this.onPopState);
194
+ window.removeEventListener("beforeunload", this.onBeforeUnload);
195
+ }
196
+ /**
197
+ * Set the navigation handler that updates React
198
+ */
199
+ setNavigationHandler(handler) {
200
+ this.onNavigate = handler;
201
+ }
202
+ /**
203
+ * Connect Farm's browser plugin lifecycle to SPA navigation.
204
+ */
205
+ setClientPluginManager(manager) {
206
+ this.clientPlugins = manager;
207
+ }
208
+ /**
209
+ * Navigate to a new URL
210
+ */
211
+ async navigate(href, options = {}) {
212
+ const {
213
+ replace = false,
214
+ scroll = true,
215
+ state,
216
+ viewTransition = false,
217
+ refresh = false
218
+ } = options;
219
+ const url = _chunkSWN467MPcjs.resolveFarmNavigationURL.call(void 0, href, window.location.href);
220
+ const pathname = url.pathname;
221
+ const search = url.search;
222
+ const fullPath = pathname + search;
223
+ if (_chunkSWN467MPcjs.isFarmExternalNavigationURL.call(void 0, url, window.location.origin) || _chunk5OVTOKGHcjs.isFarmLocaleChangeHref.call(void 0, url.toString()) || this.options.shouldUseDocumentNavigation(pathname)) {
224
+ this.cancelActiveNavigation();
225
+ if (replace) window.location.replace(url.toString());
226
+ else window.location.assign(url.toString());
227
+ return;
228
+ }
229
+ if (!refresh && pathname === window.location.pathname && search === window.location.search) {
230
+ this.cancelActiveNavigation();
231
+ if (url.hash === window.location.hash) return;
232
+ this.writePageState(
233
+ replace ? "replace" : "push",
234
+ state === void 0 ? readPageState() : state,
235
+ url.toString()
236
+ );
237
+ if (scroll) {
238
+ if (url.hash) {
239
+ _optionalChain([_chunkR5A5KNVXcjs.getHashTargetElement.call(void 0, url.hash), 'optionalAccess', _10 => _10.scrollIntoView, 'call', _11 => _11()]);
240
+ } else {
241
+ window.scrollTo(0, 0);
242
+ }
243
+ }
244
+ return;
245
+ }
246
+ const from = window.location.pathname + window.location.search;
247
+ if (await this.shouldBlockNavigation({
248
+ from,
249
+ to: fullPath,
250
+ action: replace ? "replace" : "push"
251
+ })) {
252
+ return;
253
+ }
254
+ if (this.options.scrollRestoration) {
255
+ this.saveScrollPosition(window.location.pathname + window.location.search);
256
+ }
257
+ const navigation = this.startNavigation({
258
+ from,
259
+ to: createNavigationLocation(url),
260
+ action: replace ? "replace" : "push"
261
+ });
262
+ let clientNavigation;
263
+ try {
264
+ clientNavigation = await _optionalChain([this, 'access', _12 => _12.clientPlugins, 'optionalAccess', _13 => _13.beginNavigation, 'call', _14 => _14({
265
+ from,
266
+ to: url,
267
+ action: replace ? "replace" : "push"
268
+ })]);
269
+ if (!this.isCurrentNavigation(navigation, clientNavigation)) return;
270
+ const pageData = await this.fetchPageData(
271
+ fullPath,
272
+ true,
273
+ from,
274
+ refresh,
275
+ navigation.controller.signal
276
+ );
277
+ if (!this.isCurrentNavigation(navigation, clientNavigation)) return;
278
+ if (clientNavigation) {
279
+ await _optionalChain([this, 'access', _15 => _15.clientPlugins, 'optionalAccess', _16 => _16.markNavigationLoaded, 'call', _17 => _17(clientNavigation, pageData)]);
280
+ }
281
+ if (!this.isCurrentNavigation(navigation, clientNavigation)) return;
282
+ await this.runViewTransition(
283
+ viewTransition,
284
+ () => this.isCurrentNavigation(navigation, clientNavigation) ? this.commitNavigation({
285
+ fullPath,
286
+ pageData,
287
+ pathname,
288
+ replace,
289
+ scroll,
290
+ state,
291
+ url
292
+ }) : Promise.resolve()
293
+ );
294
+ if (!this.isCurrentNavigation(navigation, clientNavigation)) return;
295
+ if (clientNavigation) {
296
+ await _optionalChain([this, 'access', _18 => _18.clientPlugins, 'optionalAccess', _19 => _19.resolveNavigation, 'call', _20 => _20(clientNavigation)]);
297
+ void _optionalChain([this, 'access', _21 => _21.clientPlugins, 'optionalAccess', _22 => _22.scheduleNavigationRendered, 'call', _23 => _23(clientNavigation)]);
298
+ }
299
+ this.finishNavigation(navigation);
300
+ } catch (error) {
301
+ if (!this.isCurrentNavigation(navigation, clientNavigation)) return;
302
+ if (clientNavigation) {
303
+ await _optionalChain([this, 'access', _24 => _24.clientPlugins, 'optionalAccess', _25 => _25.failNavigation, 'call', _26 => _26(clientNavigation, error)]);
304
+ }
305
+ this.finishNavigation(navigation);
306
+ console.error("[Farm.js] Navigation error:", error);
307
+ window.location.href = href;
308
+ }
309
+ }
310
+ /**
311
+ * Re-render the active route from the server while preserving the document,
312
+ * shared layouts, client runtime, and browser history entry.
313
+ */
314
+ refresh(options = {}) {
315
+ return this.navigate(window.location.href, {
316
+ ...options,
317
+ replace: true,
318
+ refresh: true,
319
+ scroll: _nullishCoalesce(options.scroll, () => ( false))
320
+ });
321
+ }
322
+ /**
323
+ * Prefetch a URL
324
+ */
325
+ async prefetch(href) {
326
+ if (this.destroyed) return;
327
+ if (_chunk5OVTOKGHcjs.isFarmLocaleChangeHref.call(void 0, href)) return;
328
+ const url = _chunkSWN467MPcjs.resolveFarmNavigationURL.call(void 0, href, window.location.href);
329
+ if (_chunkSWN467MPcjs.isFarmExternalNavigationURL.call(void 0, url, window.location.origin)) return;
330
+ if (this.options.shouldUseDocumentNavigation(url.pathname)) return;
331
+ const fullPath = url.pathname + url.search;
332
+ const interceptFrom = window.location.pathname + window.location.search;
333
+ if (this.prefetchingUrls.has(fullPath)) return;
334
+ if (this.isCached(fullPath, interceptFrom)) return;
335
+ this.prefetchingUrls.add(fullPath);
336
+ try {
337
+ await this.fetchPageData(fullPath, false, interceptFrom);
338
+ } catch (error) {
339
+ console.warn("[Farm.js] Prefetch failed:", href, error);
340
+ } finally {
341
+ this.prefetchingUrls.delete(fullPath);
342
+ }
343
+ }
344
+ /**
345
+ * Observe an element for viewport intersection (prefetch when visible)
346
+ */
347
+ observeForPrefetch(element) {
348
+ if (this.destroyed || typeof IntersectionObserver === "undefined") return;
349
+ const href = element.getAttribute("href");
350
+ if (!href || this.isExternalUrl(href)) return;
351
+ this.unobserveForPrefetch(element);
352
+ const observer = this.getPrefetchObserver();
353
+ this.observedPrefetchLinks.set(element, href);
354
+ observer.observe(element);
355
+ }
356
+ /**
357
+ * Stop observing an element
358
+ */
359
+ unobserveForPrefetch(element) {
360
+ if (this.observedPrefetchLinks.delete(element)) {
361
+ _optionalChain([this, 'access', _27 => _27.prefetchObserver, 'optionalAccess', _28 => _28.unobserve, 'call', _29 => _29(element)]);
362
+ }
363
+ const timer = this.prefetchTimers.get(element);
364
+ if (timer !== void 0) {
365
+ clearTimeout(timer);
366
+ this.prefetchTimers.delete(element);
367
+ }
368
+ this.cancelQueuedViewportPrefetch(element);
369
+ }
370
+ getPrefetchObserver() {
371
+ _nullishCoalesce(this.prefetchObserver, () => ( (this.prefetchObserver = new IntersectionObserver(
372
+ (entries) => {
373
+ for (const entry of entries) {
374
+ if (!entry.isIntersecting) continue;
375
+ const element = entry.target;
376
+ const href = this.observedPrefetchLinks.get(element);
377
+ if (!href) continue;
378
+ _optionalChain([this, 'access', _30 => _30.prefetchObserver, 'optionalAccess', _31 => _31.unobserve, 'call', _32 => _32(element)]);
379
+ this.observedPrefetchLinks.delete(element);
380
+ const timer = setTimeout(() => {
381
+ if (this.prefetchTimers.get(element) !== timer) return;
382
+ this.prefetchTimers.delete(element);
383
+ this.enqueueViewportPrefetch(element, href);
384
+ }, this.options.prefetchTimeout);
385
+ this.prefetchTimers.set(element, timer);
386
+ }
387
+ },
388
+ { rootMargin: "200px" }
389
+ ))));
390
+ return this.prefetchObserver;
391
+ }
392
+ enqueueViewportPrefetch(element, href) {
393
+ if (this.destroyed) return;
394
+ let task = this.viewportPrefetchTasksByHref.get(href);
395
+ if (!task) {
396
+ task = { href, elements: /* @__PURE__ */ new Set(), cancelled: false, started: false };
397
+ this.viewportPrefetchTasksByHref.set(href, task);
398
+ this.viewportPrefetchQueue.push(task);
399
+ }
400
+ task.elements.add(element);
401
+ this.viewportPrefetchTasksByElement.set(element, task);
402
+ this.drainViewportPrefetchQueue();
403
+ }
404
+ cancelQueuedViewportPrefetch(element) {
405
+ const task = this.viewportPrefetchTasksByElement.get(element);
406
+ if (!task) return;
407
+ this.viewportPrefetchTasksByElement.delete(element);
408
+ task.elements.delete(element);
409
+ if (task.elements.size > 0) return;
410
+ if (task.started) return;
411
+ task.cancelled = true;
412
+ if (this.viewportPrefetchTasksByHref.get(task.href) === task) {
413
+ this.viewportPrefetchTasksByHref.delete(task.href);
414
+ }
415
+ }
416
+ drainViewportPrefetchQueue() {
417
+ while (!this.destroyed && this.activeViewportPrefetches < MAX_CONCURRENT_VIEWPORT_PREFETCHES && this.viewportPrefetchQueue.length > 0) {
418
+ const task = this.viewportPrefetchQueue.shift();
419
+ if (task.cancelled || task.elements.size === 0) {
420
+ if (this.viewportPrefetchTasksByHref.get(task.href) === task) {
421
+ this.viewportPrefetchTasksByHref.delete(task.href);
422
+ }
423
+ continue;
424
+ }
425
+ task.started = true;
426
+ this.activeViewportPrefetches += 1;
427
+ let prefetchResult;
428
+ try {
429
+ prefetchResult = this.prefetch(task.href);
430
+ } catch (e2) {
431
+ prefetchResult = void 0;
432
+ }
433
+ void Promise.resolve(prefetchResult).catch(() => void 0).finally(() => {
434
+ if (this.viewportPrefetchTasksByHref.get(task.href) === task) {
435
+ this.viewportPrefetchTasksByHref.delete(task.href);
436
+ }
437
+ for (const element of task.elements) {
438
+ if (this.viewportPrefetchTasksByElement.get(element) === task) {
439
+ this.viewportPrefetchTasksByElement.delete(element);
440
+ }
441
+ }
442
+ this.activeViewportPrefetches -= 1;
443
+ this.drainViewportPrefetchQueue();
444
+ });
445
+ }
446
+ }
447
+ addBlocker(blocker, shouldBlockUnload) {
448
+ this.blockers.add(blocker);
449
+ this.unloadBlockers.set(
450
+ blocker,
451
+ _nullishCoalesce(shouldBlockUnload, () => ( (() => this.evaluateBlockerForUnload(blocker))))
452
+ );
453
+ return () => {
454
+ this.blockers.delete(blocker);
455
+ this.unloadBlockers.delete(blocker);
456
+ };
457
+ }
458
+ getNavigationState() {
459
+ return this.navigationState;
460
+ }
461
+ subscribeNavigation(listener) {
462
+ this.navigationListeners.add(listener);
463
+ listener(this.navigationState);
464
+ return () => {
465
+ this.navigationListeners.delete(listener);
466
+ };
467
+ }
468
+ registerScrollElement(key, element) {
469
+ this.scrollElements.set(key, element);
470
+ this.restoreScrollElement(window.location.pathname + window.location.search, key, element);
471
+ return () => {
472
+ if (this.scrollElements.get(key) === element) {
473
+ this.scrollElements.delete(key);
474
+ }
475
+ };
476
+ }
477
+ pushState(state, href) {
478
+ this.writePageState("push", state, href);
479
+ }
480
+ replaceState(state, href) {
481
+ this.writePageState("replace", state, href);
482
+ }
483
+ /** @internal Keep shallow URL-search writes inside the router's history bookkeeping. */
484
+ writeURLSearch(action, href) {
485
+ this.writePageState(action, readPageState(), href, false);
486
+ }
487
+ async commitNavigation(options) {
488
+ const historyUrl = _chunkSWN467MPcjs.resolveFarmNavigationURL.call(void 0,
489
+ options.pageData.canonicalPath || options.fullPath,
490
+ window.location.href
491
+ );
492
+ historyUrl.hash = options.url.hash;
493
+ const historyPath = historyUrl.pathname + historyUrl.search + historyUrl.hash;
494
+ const historyState = createHistoryState(
495
+ historyPath,
496
+ options.state,
497
+ options.replace ? window.history.state : void 0,
498
+ _nullishCoalesce(_optionalChain([options, 'access', _33 => _33.pageData, 'access', _34 => _34.interception, 'optionalAccess', _35 => _35.from]), () => ( null))
499
+ );
500
+ const nextHistoryIndex = this.currentHistoryIndex == null ? null : options.replace ? this.currentHistoryIndex : this.currentHistoryIndex + 1;
501
+ if (nextHistoryIndex != null) {
502
+ historyState[FARM_HISTORY_INDEX_KEY] = nextHistoryIndex;
503
+ }
504
+ if (options.replace) {
505
+ window.history.replaceState(historyState, "", historyPath);
506
+ } else {
507
+ window.history.pushState(historyState, "", historyPath);
508
+ }
509
+ this.currentHistoryIndex = nextHistoryIndex;
510
+ const resolvedHistoryUrl = _chunkSWN467MPcjs.resolveFarmNavigationURL.call(void 0, historyPath, window.location.href);
511
+ this.currentHistoryPath = resolvedHistoryUrl.pathname + resolvedHistoryUrl.search;
512
+ this.currentHistoryHash = resolvedHistoryUrl.hash;
513
+ this.currentInterceptFrom = historyState[FARM_INTERCEPT_FROM_KEY];
514
+ notifyRouterHistoryChange();
515
+ this.updateDocumentMetadata(options.pageData.metadata);
516
+ _chunk5OVTOKGHcjs._hydrateFarmI18n.call(void 0, options.pageData.i18n);
517
+ if (this.onNavigate) {
518
+ await this.onNavigate(options.pageData);
519
+ }
520
+ if (options.scroll) {
521
+ if (options.url.hash) {
522
+ const element = _chunkR5A5KNVXcjs.getHashTargetElement.call(void 0, options.url.hash);
523
+ if (element) {
524
+ element.scrollIntoView();
525
+ }
526
+ } else {
527
+ window.scrollTo(0, 0);
528
+ }
529
+ } else if (this.options.scrollRestoration) {
530
+ const restorePath = _nullishCoalesce(this.currentHistoryPath, () => ( options.fullPath));
531
+ this.restoreWindowScroll(restorePath);
532
+ this.restoreScrollElements(restorePath);
533
+ }
534
+ }
535
+ async runViewTransition(mode, callback) {
536
+ if (!mode || typeof document === "undefined") {
537
+ await callback();
538
+ return;
539
+ }
540
+ const startViewTransition = document.startViewTransition;
541
+ if (typeof startViewTransition !== "function") {
542
+ await callback();
543
+ return;
544
+ }
545
+ const transition = startViewTransition.call(document, () => callback());
546
+ const updateDone = _optionalChain([transition, 'optionalAccess', _36 => _36.updateCallbackDone]) || _optionalChain([transition, 'optionalAccess', _37 => _37.ready]);
547
+ if (updateDone && typeof updateDone.then === "function") {
548
+ await updateDone;
549
+ }
550
+ _optionalChain([transition, 'optionalAccess', _38 => _38.finished, 'optionalAccess', _39 => _39.catch, 'optionalCall', _40 => _40(() => void 0)]);
551
+ }
552
+ /**
553
+ * Fetch page data from cache or server
554
+ */
555
+ async fetchPageData(path, recover = true, interceptFrom, fresh = false, signal) {
556
+ const cacheKey = getPageDataCacheKey(path, interceptFrom);
557
+ const cached = fresh ? void 0 : this.cache.get(cacheKey);
558
+ if (cached && Date.now() - cached.timestamp < this.options.cacheMaxAge) {
559
+ return cached.data;
560
+ }
561
+ const activeLayoutChain = getActiveLayoutChainHeader();
562
+ const prefetchKey = JSON.stringify([path, interceptFrom, activeLayoutChain]);
563
+ let generation = this.cacheGeneration;
564
+ const pending = this.pendingPrefetches.get(prefetchKey);
565
+ if (pending && recover) {
566
+ if (fresh) {
567
+ pending.cacheable = false;
568
+ pending.resolve(void 0);
569
+ this.pendingPrefetches.delete(prefetchKey);
570
+ } else {
571
+ const cancellation = _chunkJ7FSKED3cjs.createClientCancellation.call(void 0, signal);
572
+ try {
573
+ const data = await cancellation.run(() => pending.data);
574
+ cancellation.check();
575
+ if (data && pending.cacheable && generation === this.cacheGeneration) return data;
576
+ } finally {
577
+ cancellation.dispose();
578
+ }
579
+ }
580
+ }
581
+ generation = this.cacheGeneration;
582
+ let prefetch2;
583
+ if (!recover) {
584
+ let resolve;
585
+ const data = new Promise((done) => {
586
+ resolve = done;
587
+ });
588
+ prefetch2 = { data, resolve, cacheable: true };
589
+ this.pendingPrefetches.set(prefetchKey, prefetch2);
590
+ }
591
+ const cacheData = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, (data) => {
592
+ if (!this.destroyed && generation === this.cacheGeneration && _optionalChain([prefetch2, 'optionalAccess', _41 => _41.cacheable]) !== false) {
593
+ this.cachePageData(cacheKey, data);
594
+ }
595
+ }, "cacheData");
596
+ try {
597
+ return await this.requestPageData(
598
+ path,
599
+ recover,
600
+ interceptFrom,
601
+ activeLayoutChain,
602
+ signal,
603
+ cacheData,
604
+ _optionalChain([prefetch2, 'optionalAccess', _42 => _42.resolve])
605
+ );
606
+ } finally {
607
+ _optionalChain([prefetch2, 'optionalAccess', _43 => _43.resolve, 'call', _44 => _44(void 0)]);
608
+ if (prefetch2 && this.pendingPrefetches.get(prefetchKey) === prefetch2) {
609
+ this.pendingPrefetches.delete(prefetchKey);
610
+ }
611
+ }
612
+ }
613
+ async requestPageData(path, recover, interceptFrom, activeLayoutChain, signal, cacheData, resolvePrefetch) {
614
+ const response = await fetch(`/__farm/page-data?path=${encodeURIComponent(path)}`, {
615
+ signal,
616
+ headers: _chunkC5GUTBZKcjs.createFarmDeploymentRequestHeaders.call(void 0, this.options.deploymentId, {
617
+ Accept: "application/x-farm-deferred+json, application/json",
618
+ "X-Farm-SPA": "1",
619
+ ...activeLayoutChain ? { "X-Farm-Layout-Chain": activeLayoutChain } : {},
620
+ ...interceptFrom ? { "X-Farm-Intercept-From": interceptFrom } : {}
621
+ })
622
+ });
623
+ if (_chunkC5GUTBZKcjs.isFarmDeploymentMismatchResponse.call(void 0, response, this.options.deploymentId)) {
624
+ const error = _chunkC5GUTBZKcjs.createFarmDeploymentMismatchError.call(void 0,
625
+ response,
626
+ this.options.deploymentId || "unknown"
627
+ );
628
+ dispatchDeploymentMismatch(error);
629
+ if (recover) {
630
+ window.location.assign(path);
631
+ }
632
+ throw error;
633
+ }
634
+ if (!response.ok) {
635
+ throw new Error(`Failed to fetch page data: ${response.status}`);
636
+ }
637
+ const isDeferredResponse = (response.headers.get("Content-Type") || "").toLowerCase().startsWith("application/x-farm-deferred+json");
638
+ if (!isDeferredResponse) {
639
+ const data2 = await _chunkQBK2AA4Ucjs.readDeferredDataResponse.call(void 0, response);
640
+ cacheData(data2);
641
+ _optionalChain([resolvePrefetch, 'optionalCall', _45 => _45(data2)]);
642
+ return data2;
643
+ }
644
+ _optionalChain([resolvePrefetch, 'optionalCall', _46 => _46(void 0)]);
645
+ let data;
646
+ let streamCompleted = false;
647
+ const markStreamComplete = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, () => {
648
+ streamCompleted = true;
649
+ if (data) cacheData(data);
650
+ }, "markStreamComplete");
651
+ data = await _chunkQBK2AA4Ucjs.readDeferredDataResponse.call(void 0, response, {
652
+ onComplete: markStreamComplete
653
+ });
654
+ if (streamCompleted) cacheData(data);
655
+ return data;
656
+ }
657
+ cachePageData(cacheKey, data) {
658
+ const now = Date.now();
659
+ for (const [key, entry] of this.cache) {
660
+ if (now - entry.timestamp >= this.options.cacheMaxAge) this.cache.delete(key);
661
+ }
662
+ this.cache.set(cacheKey, { data, timestamp: now });
663
+ }
664
+ /**
665
+ * Put the browser URL back on the rendered page after a blocked pop. When
666
+ * both entries carry a Farm history index the traversal is reversed
667
+ * exactly; otherwise the current path is pushed again, which restores the
668
+ * address bar at the cost of one extra history entry.
669
+ */
670
+ revertBlockedPopState(event, from) {
671
+ const eventIndex = readHistoryIndex(event.state);
672
+ if (eventIndex != null && this.currentHistoryIndex != null) {
673
+ const delta = eventIndex - this.currentHistoryIndex;
674
+ if (delta !== 0) {
675
+ this.suppressNextPopState = true;
676
+ window.history.go(-delta);
677
+ return;
678
+ }
679
+ }
680
+ try {
681
+ const restoredState = {
682
+ path: from
683
+ };
684
+ if (this.currentHistoryIndex != null && eventIndex != null) {
685
+ restoredState[FARM_HISTORY_INDEX_KEY] = eventIndex + 1;
686
+ this.currentHistoryIndex = eventIndex + 1;
687
+ }
688
+ window.history.pushState(restoredState, "", from);
689
+ } catch (e3) {
690
+ }
691
+ }
692
+ /**
693
+ * Handle browser back/forward navigation
694
+ */
695
+ async handlePopState(event) {
696
+ if (document.documentElement.dataset.farmDocsRuntime === "true") return;
697
+ if (this.suppressNextPopState) {
698
+ this.suppressNextPopState = false;
699
+ return;
700
+ }
701
+ const path = window.location.pathname + window.location.search;
702
+ const from = _nullishCoalesce(this.currentHistoryPath, () => ( path));
703
+ if (path === from && window.location.hash !== this.currentHistoryHash && _optionalChain([event, 'access', _47 => _47.state, 'optionalAccess', _48 => _48[FARM_INTERCEPT_FROM_KEY]]) === this.currentInterceptFrom) {
704
+ this.cancelActiveNavigation();
705
+ this.currentHistoryHash = window.location.hash;
706
+ this.currentHistoryIndex = readHistoryIndex(event.state);
707
+ return;
708
+ }
709
+ if (await this.shouldBlockNavigation({
710
+ from,
711
+ to: path,
712
+ action: "pop"
713
+ })) {
714
+ this.revertBlockedPopState(event, from);
715
+ return;
716
+ }
717
+ this.currentHistoryPath = path;
718
+ this.currentHistoryHash = window.location.hash;
719
+ this.currentInterceptFrom = _optionalChain([event, 'access', _49 => _49.state, 'optionalAccess', _50 => _50[FARM_INTERCEPT_FROM_KEY]]);
720
+ this.currentHistoryIndex = readHistoryIndex(event.state);
721
+ const navigation = this.startNavigation({
722
+ from,
723
+ to: createNavigationLocation(new URL(window.location.href)),
724
+ action: "pop"
725
+ });
726
+ let clientNavigation;
727
+ try {
728
+ clientNavigation = await _optionalChain([this, 'access', _51 => _51.clientPlugins, 'optionalAccess', _52 => _52.beginNavigation, 'call', _53 => _53({
729
+ from: null,
730
+ to: window.location.href,
731
+ action: "pop"
732
+ })]);
733
+ if (!this.isCurrentNavigation(navigation, clientNavigation)) return;
734
+ const interceptFrom = typeof _optionalChain([event, 'access', _54 => _54.state, 'optionalAccess', _55 => _55[FARM_INTERCEPT_FROM_KEY]]) === "string" ? event.state[FARM_INTERCEPT_FROM_KEY] : void 0;
735
+ const pageData = await this.fetchPageData(
736
+ path,
737
+ true,
738
+ interceptFrom,
739
+ false,
740
+ navigation.controller.signal
741
+ );
742
+ if (!this.isCurrentNavigation(navigation, clientNavigation)) return;
743
+ if (clientNavigation) {
744
+ await _optionalChain([this, 'access', _56 => _56.clientPlugins, 'optionalAccess', _57 => _57.markNavigationLoaded, 'call', _58 => _58(clientNavigation, pageData)]);
745
+ }
746
+ if (!this.isCurrentNavigation(navigation, clientNavigation)) return;
747
+ this.updateDocumentMetadata(pageData.metadata);
748
+ _chunk5OVTOKGHcjs._hydrateFarmI18n.call(void 0, pageData.i18n);
749
+ if (this.onNavigate) {
750
+ await this.onNavigate(pageData);
751
+ }
752
+ const destinationPath = window.location.pathname + window.location.search;
753
+ if (window.location.hash) {
754
+ const target = _chunkR5A5KNVXcjs.getHashTargetElement.call(void 0, window.location.hash);
755
+ if (target) {
756
+ target.scrollIntoView();
757
+ } else if (this.options.scrollRestoration) {
758
+ this.restoreWindowScroll(destinationPath);
759
+ }
760
+ } else if (this.options.scrollRestoration) {
761
+ this.restoreWindowScroll(destinationPath);
762
+ }
763
+ if (this.options.scrollRestoration) {
764
+ this.restoreScrollElements(destinationPath);
765
+ }
766
+ if (clientNavigation) {
767
+ await _optionalChain([this, 'access', _59 => _59.clientPlugins, 'optionalAccess', _60 => _60.resolveNavigation, 'call', _61 => _61(clientNavigation)]);
768
+ void _optionalChain([this, 'access', _62 => _62.clientPlugins, 'optionalAccess', _63 => _63.scheduleNavigationRendered, 'call', _64 => _64(clientNavigation)]);
769
+ }
770
+ this.finishNavigation(navigation);
771
+ } catch (error) {
772
+ if (!this.isCurrentNavigation(navigation, clientNavigation)) return;
773
+ if (clientNavigation) {
774
+ await _optionalChain([this, 'access', _65 => _65.clientPlugins, 'optionalAccess', _66 => _66.failNavigation, 'call', _67 => _67(clientNavigation, error)]);
775
+ }
776
+ this.finishNavigation(navigation);
777
+ console.error("[Farm.js] Popstate navigation error:", error);
778
+ window.location.reload();
779
+ }
780
+ }
781
+ /**
782
+ * Check if URL is cached
783
+ */
784
+ isCached(path, interceptFrom) {
785
+ const cached = this.cache.get(getPageDataCacheKey(path, interceptFrom));
786
+ return cached !== void 0 && Date.now() - cached.timestamp < this.options.cacheMaxAge;
787
+ }
788
+ /**
789
+ * Check if URL is external
790
+ */
791
+ isExternalUrl(href) {
792
+ return href.startsWith("http://") || href.startsWith("https://") || href.startsWith("//");
793
+ }
794
+ async shouldBlockNavigation(context) {
795
+ for (const blocker of this.blockers) {
796
+ if (await blocker(context)) {
797
+ return true;
798
+ }
799
+ }
800
+ return false;
801
+ }
802
+ evaluateBlockerForUnload(blocker) {
803
+ const path = window.location.pathname + window.location.search;
804
+ const result = blocker({ from: path, to: path, action: "replace" });
805
+ if (result && typeof result !== "boolean") {
806
+ void result.catch(() => void 0);
807
+ return true;
808
+ }
809
+ return result === true;
810
+ }
811
+ shouldBlockUnload() {
812
+ for (const blocker of this.blockers) {
813
+ try {
814
+ if (_optionalChain([this, 'access', _68 => _68.unloadBlockers, 'access', _69 => _69.get, 'call', _70 => _70(blocker), 'optionalCall', _71 => _71()])) return true;
815
+ } catch (e4) {
816
+ return true;
817
+ }
818
+ }
819
+ return false;
820
+ }
821
+ updateDocumentMetadata(metadata) {
822
+ applyFarmMetadataToDocument(metadata, window.location.pathname);
823
+ }
824
+ startNavigation(options) {
825
+ _optionalChain([this, 'access', _72 => _72.activeNavigation, 'optionalAccess', _73 => _73.controller, 'access', _74 => _74.abort, 'call', _75 => _75("superseded")]);
826
+ const navigation = {
827
+ id: ++this.navigationSequence,
828
+ controller: new AbortController()
829
+ };
830
+ this.activeNavigation = navigation;
831
+ this.setNavigationState({
832
+ state: "loading",
833
+ pending: true,
834
+ from: options.from,
835
+ to: options.to,
836
+ action: options.action,
837
+ startedAt: Date.now()
838
+ });
839
+ return navigation;
840
+ }
841
+ isCurrentNavigation(navigation, clientNavigation) {
842
+ return _optionalChain([this, 'access', _76 => _76.activeNavigation, 'optionalAccess', _77 => _77.id]) === navigation.id && !navigation.controller.signal.aborted && !_optionalChain([clientNavigation, 'optionalAccess', _78 => _78.signal, 'access', _79 => _79.aborted]);
843
+ }
844
+ finishNavigation(navigation) {
845
+ if (_optionalChain([this, 'access', _80 => _80.activeNavigation, 'optionalAccess', _81 => _81.id]) !== navigation.id) return;
846
+ this.activeNavigation = void 0;
847
+ this.setNavigationState(IDLE_NAVIGATION_STATE);
848
+ }
849
+ cancelActiveNavigation() {
850
+ if (!this.activeNavigation) return;
851
+ this.activeNavigation.controller.abort("superseded");
852
+ this.activeNavigation = void 0;
853
+ this.setNavigationState(IDLE_NAVIGATION_STATE);
854
+ }
855
+ setNavigationState(state) {
856
+ this.navigationState = state;
857
+ for (const listener of this.navigationListeners) {
858
+ listener(state);
859
+ }
860
+ }
861
+ writePageState(action, state, href, notify = true) {
862
+ if (typeof window === "undefined") return;
863
+ const url = href ? _chunkSWN467MPcjs.resolveFarmNavigationURL.call(void 0, href, window.location.href).toString() : window.location.href;
864
+ const parsedUrl = new URL(url);
865
+ const nextPath = parsedUrl.pathname + parsedUrl.search;
866
+ const historyPath = nextPath + parsedUrl.hash;
867
+ const nextState = createHistoryState(historyPath, state, window.history.state);
868
+ if (action === "replace") {
869
+ window.history.replaceState(nextState, "", url);
870
+ } else {
871
+ if (this.currentHistoryIndex != null) {
872
+ nextState[FARM_HISTORY_INDEX_KEY] = this.currentHistoryIndex + 1;
873
+ }
874
+ window.history.pushState(nextState, "", url);
875
+ this.currentHistoryIndex = this.currentHistoryIndex == null ? null : this.currentHistoryIndex + 1;
876
+ }
877
+ this.currentHistoryPath = nextPath;
878
+ this.currentHistoryHash = parsedUrl.hash;
879
+ this.currentInterceptFrom = nextState[FARM_INTERCEPT_FROM_KEY];
880
+ if (notify) notifyHistoryChange("page-state");
881
+ }
882
+ /**
883
+ * Save scroll position for a path
884
+ */
885
+ saveScrollPosition(path) {
886
+ try {
887
+ sessionStorage.setItem(
888
+ `farm-scroll-${path}`,
889
+ JSON.stringify({ x: window.scrollX, y: window.scrollY })
890
+ );
891
+ for (const [key, element] of this.scrollElements) {
892
+ sessionStorage.setItem(
893
+ getScrollElementStorageKey(path, key),
894
+ JSON.stringify({ x: element.scrollLeft, y: element.scrollTop })
895
+ );
896
+ }
897
+ } catch (e5) {
898
+ }
899
+ }
900
+ /**
901
+ * Restore the saved window scroll position for a path.
902
+ */
903
+ restoreWindowScroll(path) {
904
+ try {
905
+ const saved = sessionStorage.getItem(`farm-scroll-${path}`);
906
+ if (saved) {
907
+ const { x, y } = JSON.parse(saved);
908
+ setTimeout(() => window.scrollTo(x, y), 0);
909
+ }
910
+ } catch (e6) {
911
+ }
912
+ }
913
+ /**
914
+ * Restore saved scroll positions for every registered scroll element. Keys
915
+ * are hash-stripped (see getScrollElementStorageKey), so this runs regardless
916
+ * of whether the destination URL carries a fragment.
917
+ */
918
+ restoreScrollElements(path) {
919
+ try {
920
+ for (const [key, element] of this.scrollElements) {
921
+ this.restoreScrollElement(path, key, element);
922
+ }
923
+ } catch (e7) {
924
+ }
925
+ }
926
+ restoreScrollElement(path, key, element) {
927
+ try {
928
+ const saved = sessionStorage.getItem(getScrollElementStorageKey(path, key));
929
+ if (!saved) return;
930
+ const { x, y } = JSON.parse(saved);
931
+ setTimeout(() => {
932
+ element.scrollLeft = x;
933
+ element.scrollTop = y;
934
+ }, 0);
935
+ } catch (e8) {
936
+ }
937
+ }
938
+ /**
939
+ * Clear the page cache
940
+ */
941
+ clearCache() {
942
+ this.cacheGeneration += 1;
943
+ this.cache.clear();
944
+ for (const pending of this.pendingPrefetches.values()) {
945
+ pending.cacheable = false;
946
+ pending.resolve(void 0);
947
+ }
948
+ this.pendingPrefetches.clear();
949
+ }
950
+ };
951
+ _chunkS3JO3N4Hcjs.__name.call(void 0, _SPARouter, "SPARouter");
952
+ var SPARouter = _SPARouter;
953
+ function readBrowserDeploymentId() {
954
+ if (typeof window === "undefined") return void 0;
955
+ const runtimeId = window.__FARM_DEPLOYMENT_ID__;
956
+ if (typeof runtimeId === "string" && runtimeId) return runtimeId;
957
+ return _optionalChain([document, 'access', _82 => _82.querySelector, 'call', _83 => _83('meta[name="farm-deployment-id"]'), 'optionalAccess', _84 => _84.content]);
958
+ }
959
+ _chunkS3JO3N4Hcjs.__name.call(void 0, readBrowserDeploymentId, "readBrowserDeploymentId");
960
+ function dispatchDeploymentMismatch(error) {
961
+ if (typeof window === "undefined" || typeof CustomEvent === "undefined") return;
962
+ window.dispatchEvent(new CustomEvent("farm:deployment-mismatch", { detail: error }));
963
+ }
964
+ _chunkS3JO3N4Hcjs.__name.call(void 0, dispatchDeploymentMismatch, "dispatchDeploymentMismatch");
965
+ function getInstalledFarmSPARouter() {
966
+ if (typeof window === "undefined") return void 0;
967
+ return window.__FARM_SPA_ROUTER__;
968
+ }
969
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getInstalledFarmSPARouter, "getInstalledFarmSPARouter");
970
+ function getRouter() {
971
+ if (typeof window === "undefined") {
972
+ return new SPARouter();
973
+ }
974
+ const installedRouter = getInstalledFarmSPARouter();
975
+ if (installedRouter) {
976
+ routerInstance = installedRouter;
977
+ return installedRouter;
978
+ }
979
+ if (!routerInstance) {
980
+ routerInstance = new SPARouter();
981
+ }
982
+ return routerInstance;
983
+ }
984
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getRouter, "getRouter");
985
+ function navigateTo(href, options) {
986
+ return getRouter().navigate(href, options);
987
+ }
988
+ _chunkS3JO3N4Hcjs.__name.call(void 0, navigateTo, "navigateTo");
989
+ function prefetch(href) {
990
+ return getRouter().prefetch(href);
991
+ }
992
+ _chunkS3JO3N4Hcjs.__name.call(void 0, prefetch, "prefetch");
993
+ function pushState(state, href) {
994
+ getRouter().pushState(state, href);
995
+ }
996
+ _chunkS3JO3N4Hcjs.__name.call(void 0, pushState, "pushState");
997
+ function replaceState(state, href) {
998
+ getRouter().replaceState(state, href);
999
+ }
1000
+ _chunkS3JO3N4Hcjs.__name.call(void 0, replaceState, "replaceState");
1001
+ function readPageState() {
1002
+ if (typeof window === "undefined") return null;
1003
+ const state = window.history.state;
1004
+ if (!state || typeof state !== "object") return null;
1005
+ return _nullishCoalesce(state[FARM_PAGE_STATE_KEY], () => ( null));
1006
+ }
1007
+ _chunkS3JO3N4Hcjs.__name.call(void 0, readPageState, "readPageState");
1008
+ function createHistoryState(path, pageState, currentState, interceptFrom) {
1009
+ const base = currentState && typeof currentState === "object" ? { ...currentState } : {};
1010
+ const nextState = {
1011
+ ...base,
1012
+ path,
1013
+ [FARM_PAGE_STATE_KEY]: pageState
1014
+ };
1015
+ if (interceptFrom === null) {
1016
+ delete nextState[FARM_INTERCEPT_FROM_KEY];
1017
+ } else if (interceptFrom) {
1018
+ nextState[FARM_INTERCEPT_FROM_KEY] = interceptFrom;
1019
+ }
1020
+ return nextState;
1021
+ }
1022
+ _chunkS3JO3N4Hcjs.__name.call(void 0, createHistoryState, "createHistoryState");
1023
+ function getPageDataCacheKey(path, interceptFrom) {
1024
+ return interceptFrom ? `${path}
1025
+ intercept:${interceptFrom}` : path;
1026
+ }
1027
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getPageDataCacheKey, "getPageDataCacheKey");
1028
+ function createNavigationLocation(url) {
1029
+ return {
1030
+ href: url.href,
1031
+ pathname: url.pathname,
1032
+ search: url.search,
1033
+ hash: url.hash
1034
+ };
1035
+ }
1036
+ _chunkS3JO3N4Hcjs.__name.call(void 0, createNavigationLocation, "createNavigationLocation");
1037
+ function getScrollElementStorageKey(path, key) {
1038
+ return `farm-scroll-${path}:${key}`;
1039
+ }
1040
+ _chunkS3JO3N4Hcjs.__name.call(void 0, getScrollElementStorageKey, "getScrollElementStorageKey");
1041
+
1042
+ // src/client/history-sync.ts
1043
+ var FARM_HISTORY_CHANGE_EVENT = "farm:historychange";
1044
+ function writeFarmURLSearchHistory(action, href) {
1045
+ const router = getInstalledFarmSPARouter();
1046
+ if (!router) return false;
1047
+ const writeURLSearch = router.writeURLSearch;
1048
+ if (typeof writeURLSearch !== "function") return false;
1049
+ if (window.history.state !== null && typeof window.history.state !== "object") return false;
1050
+ writeURLSearch.call(router, action, href);
1051
+ return true;
1052
+ }
1053
+ _chunkS3JO3N4Hcjs.__name.call(void 0, writeFarmURLSearchHistory, "writeFarmURLSearchHistory");
1054
+ function dispatchHistoryChange(kind) {
1055
+ window.dispatchEvent(
1056
+ new CustomEvent(FARM_HISTORY_CHANGE_EVENT, {
1057
+ detail: { kind }
1058
+ })
1059
+ );
1060
+ }
1061
+ _chunkS3JO3N4Hcjs.__name.call(void 0, dispatchHistoryChange, "dispatchHistoryChange");
1062
+ function notifyHistoryChange(kind) {
1063
+ if (typeof window === "undefined") return;
1064
+ setTimeout(() => {
1065
+ if (kind === "url-search" && !getInstalledFarmSPARouter()) {
1066
+ window.dispatchEvent(new PopStateEvent("popstate"));
1067
+ return;
1068
+ }
1069
+ dispatchHistoryChange(kind);
1070
+ }, 0);
1071
+ }
1072
+ _chunkS3JO3N4Hcjs.__name.call(void 0, notifyHistoryChange, "notifyHistoryChange");
1073
+ function notifyRouterHistoryChange() {
1074
+ if (typeof window === "undefined") return;
1075
+ setTimeout(() => dispatchHistoryChange("url-search"), 0);
1076
+ }
1077
+ _chunkS3JO3N4Hcjs.__name.call(void 0, notifyRouterHistoryChange, "notifyRouterHistoryChange");
1078
+ function subscribeHistoryChange(listener) {
1079
+ if (typeof window === "undefined") return () => {
1080
+ };
1081
+ window.addEventListener("popstate", listener);
1082
+ window.addEventListener(FARM_HISTORY_CHANGE_EVENT, listener);
1083
+ return () => {
1084
+ window.removeEventListener("popstate", listener);
1085
+ window.removeEventListener(FARM_HISTORY_CHANGE_EVENT, listener);
1086
+ };
1087
+ }
1088
+ _chunkS3JO3N4Hcjs.__name.call(void 0, subscribeHistoryChange, "subscribeHistoryChange");
1089
+
1090
+
1091
+
1092
+
1093
+
1094
+
1095
+
1096
+
1097
+
1098
+
1099
+
1100
+
1101
+
1102
+ exports.writeFarmURLSearchHistory = writeFarmURLSearchHistory; exports.notifyHistoryChange = notifyHistoryChange; exports.subscribeHistoryChange = subscribeHistoryChange; exports.SPARouter = SPARouter; exports.getInstalledFarmSPARouter = getInstalledFarmSPARouter; exports.getRouter = getRouter; exports.navigateTo = navigateTo; exports.prefetch = prefetch; exports.pushState = pushState; exports.replaceState = replaceState; exports.readPageState = readPageState;