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

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 (441) hide show
  1. package/dist/internal/build-runtime.cjs +1 -1
  2. package/dist/internal/build-runtime.cjs.map +1 -1
  3. package/dist/internal/build-runtime.mjs +5 -5
  4. package/dist/plugin.cjs.map +1 -1
  5. package/dist/plugin.mjs +4 -4
  6. package/dist/server-query-client.cjs +1 -1
  7. package/dist/server-query-client.cjs.map +1 -1
  8. package/dist/server-query-client.mjs +1 -1
  9. package/dist/server.cjs +1 -1
  10. package/dist/server.cjs.map +1 -1
  11. package/dist/server.mjs +4 -4
  12. package/dist/version.cjs +1 -1
  13. package/dist/version.cjs.map +1 -1
  14. package/dist/version.mjs +1 -1
  15. package/dist/vite.cjs +1 -1
  16. package/dist/vite.cjs.map +1 -1
  17. package/dist/vite.mjs +4 -4
  18. package/package.json +1 -1
  19. package/dist/after.cjs +0 -227
  20. package/dist/after.cjs.map +0 -1
  21. package/dist/after.d.mts +0 -25
  22. package/dist/after.d.ts +0 -25
  23. package/dist/after.mjs +0 -14
  24. package/dist/after.mjs.map +0 -1
  25. package/dist/agent-runtime.cjs +0 -2379
  26. package/dist/agent-runtime.cjs.map +0 -1
  27. package/dist/agent-runtime.d.mts +0 -94
  28. package/dist/agent-runtime.d.ts +0 -94
  29. package/dist/agent-runtime.mjs +0 -479
  30. package/dist/agent-runtime.mjs.map +0 -1
  31. package/dist/api/route-manager.d.mts +0 -66
  32. package/dist/api/route-manager.d.ts +0 -66
  33. package/dist/api/runtime.d.mts +0 -3
  34. package/dist/api/runtime.d.ts +0 -3
  35. package/dist/api.cjs +0 -4100
  36. package/dist/api.cjs.map +0 -1
  37. package/dist/api.d.mts +0 -48
  38. package/dist/api.d.ts +0 -48
  39. package/dist/api.mjs +0 -93
  40. package/dist/api.mjs.map +0 -1
  41. package/dist/app-BjN-da13.d.ts +0 -300
  42. package/dist/app-CakAr8Be.d.mts +0 -300
  43. package/dist/app-markdown.cjs +0 -220
  44. package/dist/app-markdown.cjs.map +0 -1
  45. package/dist/app-markdown.d.mts +0 -22
  46. package/dist/app-markdown.d.ts +0 -22
  47. package/dist/app-markdown.mjs +0 -26
  48. package/dist/app-markdown.mjs.map +0 -1
  49. package/dist/cache.cjs +0 -945
  50. package/dist/cache.cjs.map +0 -1
  51. package/dist/cache.d.mts +0 -192
  52. package/dist/cache.d.ts +0 -192
  53. package/dist/cache.mjs +0 -46
  54. package/dist/cache.mjs.map +0 -1
  55. package/dist/chunk-2CUKEMVR.mjs +0 -872
  56. package/dist/chunk-2CUKEMVR.mjs.map +0 -1
  57. package/dist/chunk-2ED5Q2GH.mjs +0 -422
  58. package/dist/chunk-2ED5Q2GH.mjs.map +0 -1
  59. package/dist/chunk-32W4QEJP.mjs +0 -158
  60. package/dist/chunk-32W4QEJP.mjs.map +0 -1
  61. package/dist/chunk-3U3ZUQAQ.mjs +0 -41
  62. package/dist/chunk-3U3ZUQAQ.mjs.map +0 -1
  63. package/dist/chunk-3XNTL3FQ.mjs +0 -452
  64. package/dist/chunk-3XNTL3FQ.mjs.map +0 -1
  65. package/dist/chunk-44ZCFSKE.mjs +0 -84
  66. package/dist/chunk-44ZCFSKE.mjs.map +0 -1
  67. package/dist/chunk-4S3ORGFA.mjs +0 -44
  68. package/dist/chunk-4S3ORGFA.mjs.map +0 -1
  69. package/dist/chunk-5BY76U2M.mjs +0 -1
  70. package/dist/chunk-5BY76U2M.mjs.map +0 -1
  71. package/dist/chunk-5ZGPRGWV.mjs +0 -136
  72. package/dist/chunk-5ZGPRGWV.mjs.map +0 -1
  73. package/dist/chunk-65A7QIKI.mjs +0 -142
  74. package/dist/chunk-65A7QIKI.mjs.map +0 -1
  75. package/dist/chunk-74YTBPTY.mjs +0 -450
  76. package/dist/chunk-74YTBPTY.mjs.map +0 -1
  77. package/dist/chunk-7HO6AEOP.mjs +0 -74
  78. package/dist/chunk-7HO6AEOP.mjs.map +0 -1
  79. package/dist/chunk-7MABZJIM.mjs +0 -29
  80. package/dist/chunk-7MABZJIM.mjs.map +0 -1
  81. package/dist/chunk-7ZY5AIJO.mjs +0 -161
  82. package/dist/chunk-7ZY5AIJO.mjs.map +0 -1
  83. package/dist/chunk-AJWRO5WE.mjs +0 -6241
  84. package/dist/chunk-AJWRO5WE.mjs.map +0 -1
  85. package/dist/chunk-ALCLXXTY.mjs +0 -187
  86. package/dist/chunk-ALCLXXTY.mjs.map +0 -1
  87. package/dist/chunk-AOBXKNS5.mjs +0 -7631
  88. package/dist/chunk-AOBXKNS5.mjs.map +0 -1
  89. package/dist/chunk-AZ7YUVNR.mjs +0 -65
  90. package/dist/chunk-AZ7YUVNR.mjs.map +0 -1
  91. package/dist/chunk-B232I2GP.mjs +0 -163
  92. package/dist/chunk-B232I2GP.mjs.map +0 -1
  93. package/dist/chunk-BHG3LVHH.mjs +0 -176
  94. package/dist/chunk-BHG3LVHH.mjs.map +0 -1
  95. package/dist/chunk-C2ROET2V.mjs +0 -718
  96. package/dist/chunk-C2ROET2V.mjs.map +0 -1
  97. package/dist/chunk-C3DLZMBU.mjs +0 -597
  98. package/dist/chunk-C3DLZMBU.mjs.map +0 -1
  99. package/dist/chunk-CGILA3WO.mjs +0 -14
  100. package/dist/chunk-CGILA3WO.mjs.map +0 -1
  101. package/dist/chunk-E2MPIBRE.mjs +0 -149
  102. package/dist/chunk-E2MPIBRE.mjs.map +0 -1
  103. package/dist/chunk-E6EPN5BT.mjs +0 -203
  104. package/dist/chunk-E6EPN5BT.mjs.map +0 -1
  105. package/dist/chunk-EJ7T4TPB.mjs +0 -622
  106. package/dist/chunk-EJ7T4TPB.mjs.map +0 -1
  107. package/dist/chunk-FQYDHKKU.mjs +0 -128
  108. package/dist/chunk-FQYDHKKU.mjs.map +0 -1
  109. package/dist/chunk-FRPWCMMG.mjs +0 -299
  110. package/dist/chunk-FRPWCMMG.mjs.map +0 -1
  111. package/dist/chunk-GN72QAIH.mjs +0 -146
  112. package/dist/chunk-GN72QAIH.mjs.map +0 -1
  113. package/dist/chunk-GQVGIUSN.mjs +0 -149
  114. package/dist/chunk-GQVGIUSN.mjs.map +0 -1
  115. package/dist/chunk-GS6K5OCM.mjs +0 -407
  116. package/dist/chunk-GS6K5OCM.mjs.map +0 -1
  117. package/dist/chunk-GXASWWJU.mjs +0 -364
  118. package/dist/chunk-GXASWWJU.mjs.map +0 -1
  119. package/dist/chunk-GY2STC2S.mjs +0 -180
  120. package/dist/chunk-GY2STC2S.mjs.map +0 -1
  121. package/dist/chunk-H2FA2SBS.mjs +0 -51
  122. package/dist/chunk-H2FA2SBS.mjs.map +0 -1
  123. package/dist/chunk-HNIQFZKB.mjs +0 -3550
  124. package/dist/chunk-HNIQFZKB.mjs.map +0 -1
  125. package/dist/chunk-ITN462YM.mjs +0 -98
  126. package/dist/chunk-ITN462YM.mjs.map +0 -1
  127. package/dist/chunk-J23HNLFY.mjs +0 -72
  128. package/dist/chunk-J23HNLFY.mjs.map +0 -1
  129. package/dist/chunk-J4FNJ5IU.mjs +0 -179
  130. package/dist/chunk-J4FNJ5IU.mjs.map +0 -1
  131. package/dist/chunk-JDEOUK5V.mjs +0 -427
  132. package/dist/chunk-JDEOUK5V.mjs.map +0 -1
  133. package/dist/chunk-JK25YEN6.mjs +0 -219
  134. package/dist/chunk-JK25YEN6.mjs.map +0 -1
  135. package/dist/chunk-K4667E2Q.mjs +0 -1916
  136. package/dist/chunk-K4667E2Q.mjs.map +0 -1
  137. package/dist/chunk-LGHEOHBU.mjs +0 -218
  138. package/dist/chunk-LGHEOHBU.mjs.map +0 -1
  139. package/dist/chunk-LLC7BNXW.mjs +0 -275
  140. package/dist/chunk-LLC7BNXW.mjs.map +0 -1
  141. package/dist/chunk-LM2YNO4U.mjs +0 -24
  142. package/dist/chunk-LM2YNO4U.mjs.map +0 -1
  143. package/dist/chunk-MIUW47JX.mjs +0 -639
  144. package/dist/chunk-MIUW47JX.mjs.map +0 -1
  145. package/dist/chunk-NM3CRAAL.mjs +0 -467
  146. package/dist/chunk-NM3CRAAL.mjs.map +0 -1
  147. package/dist/chunk-NNLCAVB6.mjs +0 -391
  148. package/dist/chunk-NNLCAVB6.mjs.map +0 -1
  149. package/dist/chunk-P7QDS5AT.mjs +0 -191
  150. package/dist/chunk-P7QDS5AT.mjs.map +0 -1
  151. package/dist/chunk-PFE6GMNE.mjs +0 -603
  152. package/dist/chunk-PFE6GMNE.mjs.map +0 -1
  153. package/dist/chunk-QGOHVJ6J.mjs +0 -63
  154. package/dist/chunk-QGOHVJ6J.mjs.map +0 -1
  155. package/dist/chunk-QGQX7SFC.mjs +0 -180
  156. package/dist/chunk-QGQX7SFC.mjs.map +0 -1
  157. package/dist/chunk-QKVUNGAH.mjs +0 -39
  158. package/dist/chunk-QKVUNGAH.mjs.map +0 -1
  159. package/dist/chunk-QM746KUO.mjs +0 -56
  160. package/dist/chunk-QM746KUO.mjs.map +0 -1
  161. package/dist/chunk-RBRLLZL5.mjs +0 -81
  162. package/dist/chunk-RBRLLZL5.mjs.map +0 -1
  163. package/dist/chunk-RHIFZZUI.mjs +0 -69
  164. package/dist/chunk-RHIFZZUI.mjs.map +0 -1
  165. package/dist/chunk-RSKVYESE.mjs +0 -187
  166. package/dist/chunk-RSKVYESE.mjs.map +0 -1
  167. package/dist/chunk-SADGIRS2.mjs +0 -211
  168. package/dist/chunk-SADGIRS2.mjs.map +0 -1
  169. package/dist/chunk-SCFX4UTD.mjs +0 -28
  170. package/dist/chunk-SCFX4UTD.mjs.map +0 -1
  171. package/dist/chunk-SL6HTIOK.mjs +0 -66
  172. package/dist/chunk-SL6HTIOK.mjs.map +0 -1
  173. package/dist/chunk-SPBBQLXI.mjs +0 -207
  174. package/dist/chunk-SPBBQLXI.mjs.map +0 -1
  175. package/dist/chunk-T4QJQK76.mjs +0 -459
  176. package/dist/chunk-T4QJQK76.mjs.map +0 -1
  177. package/dist/chunk-TQAEEJB4.mjs +0 -157
  178. package/dist/chunk-TQAEEJB4.mjs.map +0 -1
  179. package/dist/chunk-UB5UOSHB.mjs +0 -458
  180. package/dist/chunk-UB5UOSHB.mjs.map +0 -1
  181. package/dist/chunk-USWZZUEH.mjs +0 -25
  182. package/dist/chunk-USWZZUEH.mjs.map +0 -1
  183. package/dist/chunk-UVCIEUJC.mjs +0 -16
  184. package/dist/chunk-UVCIEUJC.mjs.map +0 -1
  185. package/dist/chunk-UXUAWNO5.mjs +0 -396
  186. package/dist/chunk-UXUAWNO5.mjs.map +0 -1
  187. package/dist/chunk-V3XURYJO.mjs +0 -756
  188. package/dist/chunk-V3XURYJO.mjs.map +0 -1
  189. package/dist/chunk-V6WE6JSZ.mjs +0 -352
  190. package/dist/chunk-V6WE6JSZ.mjs.map +0 -1
  191. package/dist/chunk-V7RBCSDJ.mjs +0 -170
  192. package/dist/chunk-V7RBCSDJ.mjs.map +0 -1
  193. package/dist/chunk-VCANOYFI.mjs +0 -588
  194. package/dist/chunk-VCANOYFI.mjs.map +0 -1
  195. package/dist/chunk-VVKWFZAH.mjs +0 -753
  196. package/dist/chunk-VVKWFZAH.mjs.map +0 -1
  197. package/dist/chunk-VY2UYN5R.mjs +0 -224
  198. package/dist/chunk-VY2UYN5R.mjs.map +0 -1
  199. package/dist/chunk-W2CRQFF6.mjs +0 -1352
  200. package/dist/chunk-W2CRQFF6.mjs.map +0 -1
  201. package/dist/chunk-W4UIVMVI.mjs +0 -10
  202. package/dist/chunk-W4UIVMVI.mjs.map +0 -1
  203. package/dist/chunk-WZ5QFROO.mjs +0 -23
  204. package/dist/chunk-WZ5QFROO.mjs.map +0 -1
  205. package/dist/chunk-XIVV5IWN.mjs +0 -541
  206. package/dist/chunk-XIVV5IWN.mjs.map +0 -1
  207. package/dist/chunk-YW7OBE6Q.mjs +0 -119
  208. package/dist/chunk-YW7OBE6Q.mjs.map +0 -1
  209. package/dist/chunk-Z5CQMP54.mjs +0 -365
  210. package/dist/chunk-Z5CQMP54.mjs.map +0 -1
  211. package/dist/chunk-ZBE6MLHL.mjs +0 -230
  212. package/dist/chunk-ZBE6MLHL.mjs.map +0 -1
  213. package/dist/chunk-ZZ57EH5Z.mjs +0 -173
  214. package/dist/chunk-ZZ57EH5Z.mjs.map +0 -1
  215. package/dist/client-BT1mFQas.d.mts +0 -447
  216. package/dist/client-Nn0q4eO4.d.ts +0 -447
  217. package/dist/client-cache-CIlyBlmx.d.ts +0 -6
  218. package/dist/client-cache-D-EZ7XVW.d.mts +0 -6
  219. package/dist/client-plugins-Cw4qUGsw.d.ts +0 -1855
  220. package/dist/client-plugins-DQQ1adXM.d.mts +0 -1855
  221. package/dist/client-plugins.cjs +0 -415
  222. package/dist/client-plugins.cjs.map +0 -1
  223. package/dist/client-plugins.d.mts +0 -22
  224. package/dist/client-plugins.d.ts +0 -22
  225. package/dist/client-plugins.mjs +0 -10
  226. package/dist/client-plugins.mjs.map +0 -1
  227. package/dist/client.cjs +0 -5402
  228. package/dist/client.cjs.map +0 -1
  229. package/dist/client.d.mts +0 -447
  230. package/dist/client.d.ts +0 -447
  231. package/dist/client.mjs +0 -110
  232. package/dist/client.mjs.map +0 -1
  233. package/dist/config.cjs +0 -38
  234. package/dist/config.cjs.map +0 -1
  235. package/dist/config.d.mts +0 -29
  236. package/dist/config.d.ts +0 -29
  237. package/dist/config.mjs +0 -10
  238. package/dist/config.mjs.map +0 -1
  239. package/dist/cron.cjs +0 -406
  240. package/dist/cron.cjs.map +0 -1
  241. package/dist/cron.d.mts +0 -78
  242. package/dist/cron.d.ts +0 -78
  243. package/dist/cron.mjs +0 -30
  244. package/dist/cron.mjs.map +0 -1
  245. package/dist/deferred.cjs +0 -438
  246. package/dist/deferred.cjs.map +0 -1
  247. package/dist/deferred.d.mts +0 -42
  248. package/dist/deferred.d.ts +0 -42
  249. package/dist/deferred.mjs +0 -28
  250. package/dist/deferred.mjs.map +0 -1
  251. package/dist/deployment.cjs +0 -199
  252. package/dist/deployment.cjs.map +0 -1
  253. package/dist/deployment.d.mts +0 -34
  254. package/dist/deployment.d.ts +0 -34
  255. package/dist/deployment.mjs +0 -38
  256. package/dist/deployment.mjs.map +0 -1
  257. package/dist/devtools-LVC3VB5P.mjs +0 -370
  258. package/dist/devtools-LVC3VB5P.mjs.map +0 -1
  259. package/dist/devtools-client-3XRTBND5.mjs +0 -216
  260. package/dist/devtools-client-3XRTBND5.mjs.map +0 -1
  261. package/dist/devtools-ui-NJKFORTG.mjs +0 -1349
  262. package/dist/devtools-ui-NJKFORTG.mjs.map +0 -1
  263. package/dist/docs.cjs +0 -5553
  264. package/dist/docs.cjs.map +0 -1
  265. package/dist/docs.d.mts +0 -69
  266. package/dist/docs.d.ts +0 -69
  267. package/dist/docs.mjs +0 -46
  268. package/dist/docs.mjs.map +0 -1
  269. package/dist/env-types.cjs +0 -223
  270. package/dist/env-types.cjs.map +0 -1
  271. package/dist/env-types.d.mts +0 -11
  272. package/dist/env-types.d.ts +0 -11
  273. package/dist/env-types.mjs +0 -9
  274. package/dist/env-types.mjs.map +0 -1
  275. package/dist/env.cjs +0 -215
  276. package/dist/env.cjs.map +0 -1
  277. package/dist/env.d.mts +0 -45
  278. package/dist/env.d.ts +0 -45
  279. package/dist/env.mjs +0 -22
  280. package/dist/env.mjs.map +0 -1
  281. package/dist/environment/vite.d.mts +0 -22
  282. package/dist/environment/vite.d.ts +0 -22
  283. package/dist/environment.cjs +0 -96
  284. package/dist/environment.cjs.map +0 -1
  285. package/dist/environment.d.mts +0 -18
  286. package/dist/environment.d.ts +0 -18
  287. package/dist/environment.mjs +0 -14
  288. package/dist/environment.mjs.map +0 -1
  289. package/dist/headers.cjs +0 -126
  290. package/dist/headers.cjs.map +0 -1
  291. package/dist/headers.d.mts +0 -22
  292. package/dist/headers.d.ts +0 -22
  293. package/dist/headers.mjs +0 -12
  294. package/dist/headers.mjs.map +0 -1
  295. package/dist/i18n/client.d.mts +0 -32
  296. package/dist/i18n/client.d.ts +0 -32
  297. package/dist/i18n/index.d.mts +0 -20
  298. package/dist/i18n/index.d.ts +0 -20
  299. package/dist/i18n/server.d.mts +0 -30
  300. package/dist/i18n/server.d.ts +0 -30
  301. package/dist/image/server.d.mts +0 -37
  302. package/dist/image/server.d.ts +0 -37
  303. package/dist/image/sharp.d.mts +0 -7
  304. package/dist/image/sharp.d.ts +0 -7
  305. package/dist/image-config-Duob7wER.d.mts +0 -50
  306. package/dist/image-config-Duob7wER.d.ts +0 -50
  307. package/dist/image.cjs +0 -209
  308. package/dist/image.cjs.map +0 -1
  309. package/dist/image.d.mts +0 -39
  310. package/dist/image.d.ts +0 -39
  311. package/dist/image.mjs +0 -165
  312. package/dist/image.mjs.map +0 -1
  313. package/dist/index.cjs +0 -41822
  314. package/dist/index.cjs.map +0 -1
  315. package/dist/index.d.mts +0 -452
  316. package/dist/index.d.ts +0 -452
  317. package/dist/index.mjs +0 -973
  318. package/dist/index.mjs.map +0 -1
  319. package/dist/integration-api-CHT2OKAf.d.mts +0 -93
  320. package/dist/integration-api-CHT2OKAf.d.ts +0 -93
  321. package/dist/integration-orm-GQLGU66X.mjs +0 -13
  322. package/dist/integration-orm-GQLGU66X.mjs.map +0 -1
  323. package/dist/integrations.cjs +0 -2820
  324. package/dist/integrations.cjs.map +0 -1
  325. package/dist/integrations.d.mts +0 -22
  326. package/dist/integrations.d.ts +0 -22
  327. package/dist/integrations.mjs +0 -51
  328. package/dist/integrations.mjs.map +0 -1
  329. package/dist/internal/build-runtime.d.mts +0 -39
  330. package/dist/internal/build-runtime.d.ts +0 -39
  331. package/dist/internal/client-runtime.d.mts +0 -2
  332. package/dist/internal/client-runtime.d.ts +0 -2
  333. package/dist/internal/config-runtime.d.mts +0 -39
  334. package/dist/internal/config-runtime.d.ts +0 -39
  335. package/dist/internal/production-node-env.d.mts +0 -12
  336. package/dist/internal/production-node-env.d.ts +0 -12
  337. package/dist/internal/production-runtime.d.mts +0 -39
  338. package/dist/internal/production-runtime.d.ts +0 -39
  339. package/dist/layers-VWVDTPUZ.mjs +0 -16
  340. package/dist/layers-VWVDTPUZ.mjs.map +0 -1
  341. package/dist/manager-THKFTOFE.mjs +0 -10
  342. package/dist/manager-THKFTOFE.mjs.map +0 -1
  343. package/dist/markdown.cjs +0 -299
  344. package/dist/markdown.cjs.map +0 -1
  345. package/dist/markdown.d.mts +0 -43
  346. package/dist/markdown.d.ts +0 -43
  347. package/dist/markdown.mjs +0 -14
  348. package/dist/markdown.mjs.map +0 -1
  349. package/dist/metadata-BAPg_Nmo.d.ts +0 -22
  350. package/dist/metadata-_6i9oFG3.d.mts +0 -22
  351. package/dist/middleware.cjs +0 -2148
  352. package/dist/middleware.cjs.map +0 -1
  353. package/dist/middleware.d.mts +0 -164
  354. package/dist/middleware.d.ts +0 -164
  355. package/dist/middleware.mjs +0 -49
  356. package/dist/middleware.mjs.map +0 -1
  357. package/dist/navigation-errors-Dvwpzaer.d.mts +0 -13
  358. package/dist/navigation-errors-Dvwpzaer.d.ts +0 -13
  359. package/dist/navigation.cjs +0 -1329
  360. package/dist/navigation.cjs.map +0 -1
  361. package/dist/navigation.d.mts +0 -14
  362. package/dist/navigation.d.ts +0 -14
  363. package/dist/navigation.mjs +0 -33
  364. package/dist/navigation.mjs.map +0 -1
  365. package/dist/nitro-QO5LV6QK.mjs +0 -689
  366. package/dist/nitro-QO5LV6QK.mjs.map +0 -1
  367. package/dist/observability.cjs +0 -186
  368. package/dist/observability.cjs.map +0 -1
  369. package/dist/observability.d.mts +0 -335
  370. package/dist/observability.d.ts +0 -335
  371. package/dist/observability.mjs +0 -16
  372. package/dist/observability.mjs.map +0 -1
  373. package/dist/params-BALtrRim.d.ts +0 -15
  374. package/dist/params-ry-lxqmy.d.mts +0 -15
  375. package/dist/plugin-BJDf43dc.d.mts +0 -165
  376. package/dist/plugin-BJDf43dc.d.ts +0 -165
  377. package/dist/plugin.cjs +0 -23225
  378. package/dist/plugin.d.mts +0 -22
  379. package/dist/plugin.d.ts +0 -22
  380. package/dist/production-runtime-BoJDc5mc.d.ts +0 -79
  381. package/dist/production-runtime-C_B79w2P.d.mts +0 -28
  382. package/dist/production-runtime-DDEM1D2q.d.ts +0 -28
  383. package/dist/production-runtime-DPfgMV9Y.d.mts +0 -79
  384. package/dist/query/client.d.mts +0 -61
  385. package/dist/query/client.d.ts +0 -61
  386. package/dist/query/index.d.mts +0 -90
  387. package/dist/query/index.d.ts +0 -90
  388. package/dist/query/parsers.d.mts +0 -25
  389. package/dist/query/parsers.d.ts +0 -25
  390. package/dist/query/server.d.mts +0 -55
  391. package/dist/query/server.d.ts +0 -55
  392. package/dist/request-BrFBuc8G.d.mts +0 -6
  393. package/dist/request-BslSZIRz.d.ts +0 -6
  394. package/dist/request.d.mts +0 -2
  395. package/dist/request.d.ts +0 -2
  396. package/dist/resolver-C6iecsDV.d.ts +0 -14
  397. package/dist/resolver-DlOPpjkB.d.mts +0 -14
  398. package/dist/route-runtime-DoOHzCAD.d.mts +0 -38
  399. package/dist/route-runtime-DoOHzCAD.d.ts +0 -38
  400. package/dist/router.d.mts +0 -36
  401. package/dist/router.d.ts +0 -36
  402. package/dist/routes.d.mts +0 -224
  403. package/dist/routes.d.ts +0 -224
  404. package/dist/runtime-9nQjVM7X.d.mts +0 -206
  405. package/dist/runtime-B6GvwDS1.d.ts +0 -27
  406. package/dist/runtime-DeAAZ6gO.d.mts +0 -27
  407. package/dist/runtime-DgeS2skB.d.ts +0 -206
  408. package/dist/server-action-security.d.mts +0 -43
  409. package/dist/server-action-security.d.ts +0 -43
  410. package/dist/server-fn-client.d.mts +0 -32
  411. package/dist/server-fn-client.d.ts +0 -32
  412. package/dist/server-fn.d.mts +0 -93
  413. package/dist/server-fn.d.ts +0 -93
  414. package/dist/server-plugins.d.mts +0 -55
  415. package/dist/server-plugins.d.ts +0 -55
  416. package/dist/server-query-client.d.mts +0 -50
  417. package/dist/server-query-client.d.ts +0 -50
  418. package/dist/server-query.d.mts +0 -36
  419. package/dist/server-query.d.ts +0 -36
  420. package/dist/server.d.mts +0 -48
  421. package/dist/server.d.ts +0 -48
  422. package/dist/storage.d.mts +0 -52
  423. package/dist/storage.d.ts +0 -52
  424. package/dist/testing.d.mts +0 -101
  425. package/dist/testing.d.ts +0 -101
  426. package/dist/transport-BmbGTXA5.d.mts +0 -49
  427. package/dist/transport-BmbGTXA5.d.ts +0 -49
  428. package/dist/types-BH1lhg5G.d.mts +0 -81
  429. package/dist/types-BH1lhg5G.d.ts +0 -81
  430. package/dist/types-C9N-nk5R.d.mts +0 -53
  431. package/dist/types-C9N-nk5R.d.ts +0 -53
  432. package/dist/types-D1A6-XvH.d.mts +0 -73
  433. package/dist/types-D1A6-XvH.d.ts +0 -73
  434. package/dist/utils-CHXlMDkg.d.mts +0 -23
  435. package/dist/utils-Drsyz1Vj.d.ts +0 -23
  436. package/dist/version.d.mts +0 -3
  437. package/dist/version.d.ts +0 -3
  438. package/dist/vite.d.mts +0 -22
  439. package/dist/vite.d.ts +0 -22
  440. package/dist/workflows.d.mts +0 -110
  441. package/dist/workflows.d.ts +0 -110
@@ -1,1349 +0,0 @@
1
- import {
2
- __name
3
- } from "./chunk-CGILA3WO.mjs";
4
-
5
- // src/devtools-ui.ts
6
- var ICON_PATHS = {
7
- activity: '<path d="M22 12h-4l-3 9L9 3l-3 9H2"/>',
8
- api: '<path d="M8 3H7a2 2 0 0 0-2 2v4a2 2 0 0 1-2 2 2 2 0 0 1 2 2v4a2 2 0 0 0 2 2h1"/><path d="M16 3h1a2 2 0 0 1 2 2v4a2 2 0 0 0 2 2 2 2 0 0 0-2 2v4a2 2 0 0 1-2 2h-1"/>',
9
- app: '<path d="M15 3h6v6"/><path d="M10 14 21 3"/><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/>',
10
- blocks: '<rect width="7" height="7" x="3" y="3"/><rect width="7" height="7" x="14" y="3"/><rect width="7" height="7" x="14" y="14"/><rect width="7" height="7" x="3" y="14"/>',
11
- book: '<path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/>',
12
- clock: '<circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/>',
13
- chevron: '<path d="m9 18 6-6-6-6"/>',
14
- close: '<path d="M18 6 6 18M6 6l12 12"/>',
15
- copy: '<rect width="14" height="14" x="8" y="8"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/>',
16
- database: '<ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M3 5v14c0 1.7 4 3 9 3s9-1.3 9-3V5"/><path d="M3 12c0 1.7 4 3 9 3s9-1.3 9-3"/>',
17
- external: '<path d="M15 3h6v6"/><path d="M10 14 21 3"/><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/>',
18
- layers: '<path d="m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"/><path d="m22 12.5-9.17 4.17a2 2 0 0 1-1.66 0L2 12.5"/><path d="m22 17.5-9.17 4.17a2 2 0 0 1-1.66 0L2 17.5"/>',
19
- overview: '<rect width="7" height="9" x="3" y="3"/><rect width="7" height="5" x="14" y="3"/><rect width="7" height="9" x="14" y="12"/><rect width="7" height="5" x="3" y="16"/>',
20
- refresh: '<path d="M20 11a8.1 8.1 0 0 0-15.5-2M4 4v5h5"/><path d="M4 13a8.1 8.1 0 0 0 15.5 2M20 20v-5h-5"/>',
21
- route: '<circle cx="6" cy="19" r="3"/><path d="M9 19h5.5a3.5 3.5 0 0 0 0-7h-5a3.5 3.5 0 0 1 0-7H18"/><circle cx="18" cy="5" r="3"/>',
22
- runtime: '<rect width="20" height="14" x="2" y="3"/><line x1="8" x2="16" y1="21" y2="21"/><line x1="12" x2="12" y1="17" y2="21"/>',
23
- search: '<circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/>',
24
- shield: '<path d="M20 13c0 5-3.5 7.5-8 9-4.5-1.5-8-4-8-9V5l8-3 8 3z"/><path d="m9 12 2 2 4-4"/>',
25
- terminal: '<polyline points="4 17 10 11 4 5"/><line x1="12" x2="20" y1="19" y2="19"/>'
26
- };
27
- function icon(name, className = "") {
28
- return `<svg class="icon ${className}" data-lucide="${name}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${ICON_PATHS[name]}</svg>`;
29
- }
30
- __name(icon, "icon");
31
- function escapeHtml(value) {
32
- return String(value ?? "").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
33
- }
34
- __name(escapeHtml, "escapeHtml");
35
- function escapeAttribute(value) {
36
- return escapeHtml(value).replace(/`/g, "&#96;");
37
- }
38
- __name(escapeAttribute, "escapeAttribute");
39
- function renderBadge(value, tone = "neutral") {
40
- return `<span class="badge badge-${tone}">${escapeHtml(value)}</span>`;
41
- }
42
- __name(renderBadge, "renderBadge");
43
- function renderRuntime(runtime) {
44
- if (!runtime) return '<span class="muted">Inherited</span>';
45
- const details = [
46
- runtime.regions?.length ? runtime.regions.join(", ") : null,
47
- runtime.maxDuration ? `${runtime.maxDuration}s` : null
48
- ].filter(Boolean);
49
- return `<span class="runtime-value">${renderBadge(runtime.runtime, runtime.runtime)}${details.length ? `<small>${escapeHtml(details.join(" / "))}</small>` : ""}</span>`;
50
- }
51
- __name(renderRuntime, "renderRuntime");
52
- function renderEmpty(title, detail) {
53
- return `<div class="empty-state">
54
- ${icon("activity")}
55
- <strong>${escapeHtml(title)}</strong>
56
- <span>${escapeHtml(detail)}</span>
57
- </div>`;
58
- }
59
- __name(renderEmpty, "renderEmpty");
60
- function renderFilter(id, placeholder) {
61
- return `<label class="filter-control">
62
- ${icon("search")}
63
- <span class="sr-only">${escapeHtml(placeholder)}</span>
64
- <input type="search" placeholder="${escapeAttribute(placeholder)}" data-filter="${escapeAttribute(id)}" autocomplete="off">
65
- <kbd>/</kbd>
66
- </label>`;
67
- }
68
- __name(renderFilter, "renderFilter");
69
- function renderDiagnostics(diagnostics) {
70
- if (diagnostics.length === 0) {
71
- return `<div class="diagnostic diagnostic-ready">
72
- <span class="diagnostic-mark">${icon("shield")}</span>
73
- <div><strong>Framework checks passed</strong><p>Routes and configured systems are internally consistent.</p></div>
74
- ${renderBadge("ready", "ready")}
75
- </div>`;
76
- }
77
- return diagnostics.map(
78
- (diagnostic) => `<article class="diagnostic diagnostic-${diagnostic.severity}">
79
- <span class="diagnostic-mark">${icon(
80
- diagnostic.severity === "error" ? "activity" : "shield"
81
- )}</span>
82
- <div>
83
- <span class="diagnostic-code">${escapeHtml(diagnostic.code)}</span>
84
- <strong>${escapeHtml(diagnostic.title)}</strong>
85
- <p>${escapeHtml(diagnostic.message)}</p>
86
- ${diagnostic.action ? `<small>${escapeHtml(diagnostic.action)}</small>` : ""}
87
- </div>
88
- ${renderBadge(diagnostic.severity, diagnostic.severity)}
89
- </article>`
90
- ).join("");
91
- }
92
- __name(renderDiagnostics, "renderDiagnostics");
93
- function renderSystemRows(snapshot) {
94
- const rows = [
95
- ["Integrations", snapshot.counts.integrations, "Configured product adapters", "blocks"],
96
- ["Storage", snapshot.counts.storageMounts, "Root driver and named mounts", "database"],
97
- ["Cron", snapshot.counts.cronJobs, "Portable scheduled API routes", "clock"],
98
- ["Workflows", snapshot.counts.workflows, "Discovered workflow modules", "activity"],
99
- ["Docs", snapshot.docs.enabled ? "On" : "Off", snapshot.docs.entry || "No docs route", "book"]
100
- ];
101
- return rows.map(
102
- ([label, value, detail, rowIcon]) => `<div class="system-row">
103
- <span class="system-icon">${icon(rowIcon)}</span>
104
- <div><strong>${escapeHtml(label)}</strong><small>${escapeHtml(detail)}</small></div>
105
- <span class="system-value">${escapeHtml(value)}</span>
106
- </div>`
107
- ).join("");
108
- }
109
- __name(renderSystemRows, "renderSystemRows");
110
- function renderIntegrations(snapshot) {
111
- if (snapshot.integrations.length === 0) {
112
- return renderEmpty(
113
- "No integrations configured",
114
- "Register product systems through farm.config.ts when the app needs them."
115
- );
116
- }
117
- return `<div class="table-scroll"><table>
118
- <thead><tr><th>Registry key</th><th>Adapter</th><th>Routes</th><th>Runtime surface</th></tr></thead>
119
- <tbody>${snapshot.integrations.map(
120
- (integration) => `<tr>
121
- <td><code>${escapeHtml(integration.key)}</code><small class="cell-detail">${escapeHtml(
122
- integration.category
123
- )}</small></td>
124
- <td>${escapeHtml(integration.type)}</td>
125
- <td>${integration.routes.length ? integration.routes.map(
126
- (route) => `<span class="route-operation"><code>${escapeHtml(
127
- route.path
128
- )}</code><small>${escapeHtml(route.methods.join(", "))}</small></span>`
129
- ).join("") : '<span class="muted">No HTTP routes</span>'}</td>
130
- <td><span class="runtime-facts">${renderBadge(
131
- integration.serverRuntime ? "server" : "platform"
132
- )}<span>${integration.middlewareCount} middleware</span><span>${integration.providerCount} providers</span><span>${integration.schemaModelCount} models</span></span></td>
133
- </tr>`
134
- ).join("")}</tbody>
135
- </table></div>`;
136
- }
137
- __name(renderIntegrations, "renderIntegrations");
138
- function renderMiddleware(snapshot) {
139
- if (snapshot.middleware.length === 0) {
140
- return renderEmpty("No middleware configured", "Requests currently enter routes directly.");
141
- }
142
- return `<div class="table-scroll"><table>
143
- <thead><tr><th>Path</th><th>Source</th><th>Handlers</th><th>File</th></tr></thead>
144
- <tbody>${snapshot.middleware.map(
145
- (entry) => `<tr><td><code>${escapeHtml(entry.path)}</code></td><td>${renderBadge(
146
- entry.source
147
- )}</td><td>${entry.handlerCount}</td><td class="file-cell">${escapeHtml(
148
- entry.filePath
149
- )}</td></tr>`
150
- ).join("")}</tbody>
151
- </table></div>`;
152
- }
153
- __name(renderMiddleware, "renderMiddleware");
154
- function renderStorage(snapshot) {
155
- return `<div class="table-scroll"><table>
156
- <thead><tr><th>Mount</th><th>Driver</th><th>State</th></tr></thead>
157
- <tbody>${snapshot.storage.map(
158
- (entry) => `<tr><td><code>${escapeHtml(entry.mount)}</code></td><td>${escapeHtml(
159
- entry.driver
160
- )}</td><td>${renderBadge(entry.default ? "default" : "configured")}</td></tr>`
161
- ).join("")}</tbody>
162
- </table></div>`;
163
- }
164
- __name(renderStorage, "renderStorage");
165
- function renderCron(snapshot) {
166
- if (snapshot.cron.length === 0) {
167
- return renderEmpty(
168
- "No cron routes configured",
169
- "Add named schedules under cron in farm.config.ts."
170
- );
171
- }
172
- return `<div class="table-scroll"><table>
173
- <thead><tr><th>Name</th><th>Schedule (UTC)</th><th>Target</th></tr></thead>
174
- <tbody>${snapshot.cron.map(
175
- (job) => `<tr><td><code>${escapeHtml(job.name)}</code></td><td>${job.schedule.map((schedule) => `<code class="schedule">${escapeHtml(schedule)}</code>`).join("")}</td><td><code>${escapeHtml(job.path)}</code></td></tr>`
176
- ).join("")}</tbody>
177
- </table></div>`;
178
- }
179
- __name(renderCron, "renderCron");
180
- function renderWorkflows(snapshot) {
181
- if (snapshot.workflows.length === 0) {
182
- return renderEmpty(
183
- "No workflows discovered",
184
- "Workflow directories are enabled but currently empty."
185
- );
186
- }
187
- return `<div class="table-scroll"><table>
188
- <thead><tr><th>Workflow</th><th>Schedule</th><th>Endpoint</th><th>Source</th></tr></thead>
189
- <tbody>${snapshot.workflows.map(
190
- (workflow) => `<tr><td><code>${escapeHtml(workflow.id)}</code></td><td>${workflow.schedule.length ? workflow.schedule.map((schedule) => `<code>${escapeHtml(schedule)}</code>`).join("") : '<span class="muted">Manual</span>'}</td><td><code>${escapeHtml(workflow.routePath)}</code></td><td class="file-cell">${escapeHtml(
191
- workflow.filePath
192
- )}</td></tr>`
193
- ).join("")}</tbody>
194
- </table></div>`;
195
- }
196
- __name(renderWorkflows, "renderWorkflows");
197
- function renderFeatureMatrix(snapshot) {
198
- const features = [
199
- ["OpenAPI", snapshot.features.openapi],
200
- ["Markdown", snapshot.features.markdown],
201
- ["Server components", snapshot.features.serverComponents],
202
- ["Server actions", snapshot.features.serverActions],
203
- ["Optimized boundary", snapshot.features.optimizedBoundary],
204
- ["Observability", snapshot.features.observability]
205
- ];
206
- return `<div class="feature-matrix">${features.map(
207
- ([label, enabled]) => `<div><span>${escapeHtml(label)}</span>${renderBadge(
208
- enabled ? "enabled" : "disabled",
209
- enabled ? "ready" : "neutral"
210
- )}</div>`
211
- ).join("")}</div>`;
212
- }
213
- __name(renderFeatureMatrix, "renderFeatureMatrix");
214
- function renderEnvironment(snapshot) {
215
- const renderKeys = /* @__PURE__ */ __name((keys) => keys.length ? `<div class="key-list">${keys.map((key) => `<code>${escapeHtml(key)}</code>`).join("")}</div>` : '<span class="muted">No validated keys</span>', "renderKeys");
216
- return `<div class="environment-grid">
217
- <div><span class="mini-label">Server keys</span>${renderKeys(snapshot.environment.server)}</div>
218
- <div><span class="mini-label">Public keys</span>${renderKeys(snapshot.environment.public)}</div>
219
- </div>`;
220
- }
221
- __name(renderEnvironment, "renderEnvironment");
222
- function renderLayers(snapshot) {
223
- if (snapshot.layers.length === 0) {
224
- return renderEmpty(
225
- "No layers extended",
226
- "This project owns its complete route and config surface."
227
- );
228
- }
229
- return `<div class="layer-list">${snapshot.layers.map(
230
- (layer) => `<div><span>${icon("layers")}<strong>${escapeHtml(
231
- layer.name
232
- )}</strong></span><code>${escapeHtml(layer.source)}</code><small>${escapeHtml(
233
- layer.srcDir
234
- )}</small></div>`
235
- ).join("")}</div>`;
236
- }
237
- __name(renderLayers, "renderLayers");
238
- function renderPropertyList(entries) {
239
- return `<dl class="property-list">${entries.map(([label, value]) => `<div><dt>${escapeHtml(label)}</dt><dd>${value}</dd></div>`).join("")}</dl>`;
240
- }
241
- __name(renderPropertyList, "renderPropertyList");
242
- function renderDetailIntro(label, title, description, detailIcon) {
243
- return `<div class="detail-intro">
244
- <span class="detail-icon">${icon(detailIcon)}</span>
245
- <div><span class="mini-label">${escapeHtml(label)}</span><h2>${escapeHtml(
246
- title
247
- )}</h2><p>${escapeHtml(description)}</p></div>
248
- </div>`;
249
- }
250
- __name(renderDetailIntro, "renderDetailIntro");
251
- function renderInspector(scope, title, entries, filterPlaceholder) {
252
- if (entries.length === 0) {
253
- return `<div class="single-pane">
254
- <header class="pane-header"><strong>${escapeHtml(title)}</strong><span>0 items</span></header>
255
- ${renderEmpty(`No ${title.toLowerCase()} found`, "Farm has no runtime data for this surface yet.")}
256
- </div>`;
257
- }
258
- return `<div class="split-view" data-inspector="${escapeAttribute(scope)}">
259
- <section class="pane pane-list">
260
- <header class="pane-header"><strong>${escapeHtml(title)}</strong><span>${entries.length} ${entries.length === 1 ? "item" : "items"}</span></header>
261
- ${filterPlaceholder ? `<div class="pane-tools">${renderFilter(scope, filterPlaceholder)}</div>` : ""}
262
- <div class="pane-scroll inspector-list" data-filter-rows="${escapeAttribute(scope)}">
263
- ${entries.map(
264
- (entry, index) => `<button type="button" class="inspector-row" data-detail-trigger="${escapeAttribute(
265
- scope
266
- )}" data-detail-id="${escapeAttribute(entry.id)}" data-search-value="${escapeAttribute(
267
- entry.searchValue || `${entry.label} ${entry.description}`
268
- )}" aria-selected="${index === 0 ? "true" : "false"}">
269
- <span class="inspector-row-copy"><strong>${escapeHtml(
270
- entry.label
271
- )}</strong><small>${escapeHtml(entry.description)}</small></span>
272
- ${entry.value === void 0 ? "" : `<span class="inspector-row-value">${escapeHtml(entry.value)}</span>`}
273
- </button>`
274
- ).join("")}
275
- <div class="filtered-empty" data-filter-empty="${escapeAttribute(
276
- scope
277
- )}" hidden>No items match this filter.</div>
278
- </div>
279
- </section>
280
- <section class="pane pane-detail">
281
- ${entries.map(
282
- (entry, index) => `<article class="detail-panel" data-detail-panel="${escapeAttribute(
283
- scope
284
- )}" data-detail-id="${escapeAttribute(entry.id)}"${index === 0 ? "" : " hidden"}>
285
- <header class="pane-header"><strong>${escapeHtml(entry.label)}</strong><span>${escapeHtml(
286
- entry.detailMeta || entry.description
287
- )}</span></header>
288
- <div class="detail-scroll">${entry.content}</div>
289
- </article>`
290
- ).join("")}
291
- </section>
292
- </div>`;
293
- }
294
- __name(renderInspector, "renderInspector");
295
- function renderJson(value) {
296
- return `<pre class="json-viewer"><code>${escapeHtml(JSON.stringify(value, null, 2))}</code></pre>`;
297
- }
298
- __name(renderJson, "renderJson");
299
- function renderOverviewInspector(snapshot, healthLabel, generatedTime) {
300
- const scheduledCount = snapshot.counts.cronJobs + snapshot.counts.workflows;
301
- return renderInspector("overview", "Project", [
302
- {
303
- id: "diagnostics",
304
- label: "Diagnostics",
305
- description: "Actionable framework checks",
306
- icon: "shield",
307
- value: snapshot.counts.diagnostics,
308
- detailMeta: healthLabel,
309
- content: `${renderDetailIntro(
310
- "Project health",
311
- healthLabel,
312
- snapshot.diagnostics.length ? "Farm found configuration details that deserve attention before production." : "Routes and configured systems are internally consistent.",
313
- "shield"
314
- )}<div class="detail-section">${renderDiagnostics(snapshot.diagnostics)}</div>`
315
- },
316
- {
317
- id: "project",
318
- label: snapshot.project.name,
319
- description: snapshot.project.root,
320
- icon: "app",
321
- value: snapshot.project.srcDir,
322
- detailMeta: "Active project",
323
- content: `${renderDetailIntro(
324
- "Active project",
325
- snapshot.project.name,
326
- "The application currently resolved by the Farm development server.",
327
- "app"
328
- )}${renderPropertyList([
329
- ["Root", `<code>${escapeHtml(snapshot.project.root)}</code>`],
330
- ["Source directory", `<code>${escapeHtml(snapshot.project.srcDir)}</code>`],
331
- ["Base path", `<code>${escapeHtml(snapshot.project.basePath)}</code>`],
332
- ["Deployment ID", `<code>${escapeHtml(snapshot.project.deploymentId)}</code>`],
333
- ["Snapshot", `<span class="mono">${escapeHtml(generatedTime)}</span>`]
334
- ])}`
335
- },
336
- {
337
- id: "routes",
338
- label: "Route surface",
339
- description: "Pages, boundaries, and typed endpoints",
340
- icon: "route",
341
- value: snapshot.counts.pages + snapshot.counts.apiRoutes,
342
- detailMeta: `${snapshot.counts.pages} pages / ${snapshot.counts.apiRoutes} API`,
343
- content: `${renderDetailIntro(
344
- "Application routing",
345
- `${snapshot.counts.pages + snapshot.counts.apiRoutes} registered routes`,
346
- "Farm resolves page boundaries and server endpoints from the same application tree.",
347
- "route"
348
- )}${renderPropertyList([
349
- ["Pages", `<strong>${snapshot.counts.pages}</strong>`],
350
- ["Layouts", `<strong>${snapshot.counts.layouts}</strong>`],
351
- ["Loading boundaries", `<strong>${snapshot.counts.loadingBoundaries}</strong>`],
352
- ["Error boundaries", `<strong>${snapshot.counts.errorBoundaries}</strong>`],
353
- ["API routes", `<strong>${snapshot.counts.apiRoutes}</strong>`]
354
- ])}`
355
- },
356
- {
357
- id: "systems",
358
- label: "Connected systems",
359
- description: "Integrations, storage, and request layers",
360
- icon: "blocks",
361
- value: snapshot.counts.integrations,
362
- detailMeta: "Configured surfaces",
363
- content: `${renderDetailIntro(
364
- "System map",
365
- "Application services",
366
- "Product integrations and framework services visible to the running application.",
367
- "blocks"
368
- )}<div class="detail-section">${renderSystemRows(snapshot)}</div>`
369
- },
370
- {
371
- id: "deployment",
372
- label: "Runtime",
373
- description: `${snapshot.deployment.target} / ${snapshot.deployment.preset}`,
374
- icon: "runtime",
375
- value: scheduledCount,
376
- detailMeta: "Deployment controls",
377
- content: `${renderDetailIntro(
378
- "Deployment runtime",
379
- snapshot.deployment.target,
380
- "The resolved deployment adapter, output contract, and enabled framework surfaces.",
381
- "runtime"
382
- )}${renderPropertyList([
383
- ["Target", `<code>${escapeHtml(snapshot.deployment.target)}</code>`],
384
- ["Nitro preset", `<code>${escapeHtml(snapshot.deployment.preset)}</code>`],
385
- [
386
- "Output",
387
- `<code>${escapeHtml(snapshot.deployment.outputDir || "Framework default")}</code>`
388
- ],
389
- ["Scheduled work", `<strong>${scheduledCount}</strong>`]
390
- ])}<div class="detail-section">${renderFeatureMatrix(snapshot)}</div>`
391
- }
392
- ]);
393
- }
394
- __name(renderOverviewInspector, "renderOverviewInspector");
395
- function renderRoutesInspector(snapshot) {
396
- return renderInspector(
397
- "routes",
398
- "Routes",
399
- snapshot.routes.map((route, index) => ({
400
- id: `route-${index}`,
401
- label: route.pattern,
402
- description: route.filePath,
403
- icon: "route",
404
- value: route.kind,
405
- searchValue: `${route.kind} ${route.pattern} ${route.filePath} ${route.runtime?.runtime || "inherited"}`,
406
- detailMeta: route.kind,
407
- content: `${renderDetailIntro(
408
- `${route.kind} route`,
409
- route.pattern,
410
- route.filePath,
411
- "route"
412
- )}${renderPropertyList([
413
- ["Kind", renderBadge(route.kind, route.kind)],
414
- ["Pattern", `<code>${escapeHtml(route.pattern)}</code>`],
415
- ["Runtime", renderRuntime(route.runtime)],
416
- ["Source", `<code>${escapeHtml(route.filePath)}</code>`]
417
- ])}`
418
- })),
419
- "Filter routes or files"
420
- );
421
- }
422
- __name(renderRoutesInspector, "renderRoutesInspector");
423
- function renderApiInspector(snapshot) {
424
- return renderInspector(
425
- "api",
426
- "API routes",
427
- snapshot.apiRoutes.map((route, index) => ({
428
- id: `api-${index}`,
429
- label: route.path,
430
- description: route.filePath,
431
- icon: "api",
432
- value: route.methods.length,
433
- searchValue: `${route.path} ${route.methods.join(" ")} ${route.filePath} ${route.runtime.runtime}`,
434
- detailMeta: route.methods.join(" / "),
435
- content: `${renderDetailIntro(
436
- "Server endpoint",
437
- route.path,
438
- route.filePath,
439
- "api"
440
- )}${renderPropertyList([
441
- [
442
- "Methods",
443
- `<span class="method-list">${route.methods.map((method) => renderBadge(method, "method")).join("")}</span>`
444
- ],
445
- ["Runtime", renderRuntime(route.runtime)],
446
- ["Source", `<code>${escapeHtml(route.filePath)}</code>`]
447
- ])}`
448
- })),
449
- "Filter endpoints or methods"
450
- );
451
- }
452
- __name(renderApiInspector, "renderApiInspector");
453
- function renderSystemsInspector(snapshot) {
454
- return renderInspector("systems", "Systems", [
455
- {
456
- id: "integrations",
457
- label: "Integrations",
458
- description: "Configured product adapters",
459
- icon: "blocks",
460
- value: snapshot.integrations.length,
461
- content: renderIntegrations(snapshot)
462
- },
463
- {
464
- id: "middleware",
465
- label: "Middleware",
466
- description: "Request layers and source modules",
467
- icon: "shield",
468
- value: snapshot.middleware.length,
469
- content: renderMiddleware(snapshot)
470
- },
471
- {
472
- id: "storage",
473
- label: "Storage mounts",
474
- description: "Root driver and named namespaces",
475
- icon: "database",
476
- value: snapshot.storage.length,
477
- content: renderStorage(snapshot)
478
- },
479
- {
480
- id: "docs",
481
- label: "Documentation",
482
- description: snapshot.docs.entry || "No docs route",
483
- icon: "book",
484
- value: snapshot.docs.enabled ? "on" : "off",
485
- content: `${renderDetailIntro(
486
- "Documentation",
487
- snapshot.docs.enabled ? "Docs enabled" : "Docs disabled",
488
- "Farm can serve application documentation from the same development runtime.",
489
- "book"
490
- )}${renderPropertyList([
491
- ["State", renderBadge(snapshot.docs.enabled ? "enabled" : "disabled")],
492
- ["Entry", `<code>${escapeHtml(snapshot.docs.entry || "Not configured")}</code>`]
493
- ])}`
494
- }
495
- ]);
496
- }
497
- __name(renderSystemsInspector, "renderSystemsInspector");
498
- function renderRuntimeInspector(snapshot) {
499
- return renderInspector("runtime", "Runtime", [
500
- {
501
- id: "deployment",
502
- label: "Deployment",
503
- description: `${snapshot.deployment.target} / ${snapshot.deployment.preset}`,
504
- icon: "runtime",
505
- content: `${renderDetailIntro(
506
- "Deployment target",
507
- snapshot.deployment.target,
508
- "Resolved platform adapter and build output for this application.",
509
- "runtime"
510
- )}${renderPropertyList([
511
- ["Target", `<code>${escapeHtml(snapshot.deployment.target)}</code>`],
512
- ["Nitro preset", `<code>${escapeHtml(snapshot.deployment.preset)}</code>`],
513
- [
514
- "Output directory",
515
- `<code>${escapeHtml(snapshot.deployment.outputDir || "Framework default")}</code>`
516
- ]
517
- ])}`
518
- },
519
- {
520
- id: "cron",
521
- label: "Cron routes",
522
- description: "Portable scheduled API routes",
523
- icon: "clock",
524
- value: snapshot.cron.length,
525
- content: renderCron(snapshot)
526
- },
527
- {
528
- id: "workflows",
529
- label: "Workflows",
530
- description: "Discovered workflow modules",
531
- icon: "activity",
532
- value: snapshot.workflows.length,
533
- content: renderWorkflows(snapshot)
534
- },
535
- {
536
- id: "features",
537
- label: "Framework features",
538
- description: "Resolved configuration switches",
539
- icon: "blocks",
540
- content: renderFeatureMatrix(snapshot)
541
- },
542
- {
543
- id: "environment",
544
- label: "Environment",
545
- description: "Validated key names only",
546
- icon: "shield",
547
- value: snapshot.environment.server.length + snapshot.environment.public.length,
548
- content: renderEnvironment(snapshot)
549
- },
550
- {
551
- id: "layers",
552
- label: "Layers",
553
- description: "Extended source roots",
554
- icon: "layers",
555
- value: snapshot.layers.length,
556
- content: renderLayers(snapshot)
557
- }
558
- ]);
559
- }
560
- __name(renderRuntimeInspector, "renderRuntimeInspector");
561
- function renderRawInspector(snapshot) {
562
- return renderInspector("raw", "Raw snapshot", [
563
- {
564
- id: "snapshot",
565
- label: "Snapshot",
566
- description: "Complete serialized runtime state",
567
- icon: "terminal",
568
- content: renderJson(snapshot)
569
- },
570
- {
571
- id: "routes",
572
- label: "Routes",
573
- description: "Pages and route boundaries",
574
- icon: "route",
575
- value: snapshot.routes.length,
576
- content: renderJson(snapshot.routes)
577
- },
578
- {
579
- id: "api",
580
- label: "API",
581
- description: "Typed server endpoints",
582
- icon: "api",
583
- value: snapshot.apiRoutes.length,
584
- content: renderJson(snapshot.apiRoutes)
585
- },
586
- {
587
- id: "systems",
588
- label: "Systems",
589
- description: "Integrations, middleware, and storage",
590
- icon: "blocks",
591
- content: renderJson({
592
- integrations: snapshot.integrations,
593
- middleware: snapshot.middleware,
594
- storage: snapshot.storage
595
- })
596
- },
597
- {
598
- id: "diagnostics",
599
- label: "Diagnostics",
600
- description: "Framework health findings",
601
- icon: "shield",
602
- value: snapshot.diagnostics.length,
603
- content: renderJson(snapshot.diagnostics)
604
- }
605
- ]);
606
- }
607
- __name(renderRawInspector, "renderRawInspector");
608
- function renderNavigationItem(view, label) {
609
- return `<button type="button" class="nav-item" data-view-trigger="${view}" aria-selected="false">
610
- <span>${escapeHtml(label)}</span>
611
- </button>`;
612
- }
613
- __name(renderNavigationItem, "renderNavigationItem");
614
- function renderFarmDevtoolsHtml(snapshot) {
615
- const healthLabel = snapshot.health === "ready" ? "Ready" : snapshot.health === "error" ? "Error" : "Attention";
616
- const generatedTime = new Date(snapshot.generatedAt).toLocaleTimeString("en-US", {
617
- hour: "2-digit",
618
- minute: "2-digit",
619
- second: "2-digit",
620
- hour12: false
621
- });
622
- return `<!doctype html>
623
- <html lang="en" class="devtools-frame">
624
- <head>
625
- <meta charset="utf-8">
626
- <meta name="viewport" content="width=device-width, initial-scale=1">
627
- <meta name="color-scheme" content="dark">
628
- <title>Farm Devtools - ${escapeHtml(snapshot.project.name)}</title>
629
- <style>
630
- :root {
631
- color-scheme: dark;
632
- --background: #000;
633
- --surface: #050505;
634
- --surface-raised: #090909;
635
- --foreground: #f5f5f5;
636
- --muted: #858585;
637
- --muted-strong: #a8a8a8;
638
- --line: rgb(255 255 255 / 0.12);
639
- --line-soft: rgb(255 255 255 / 0.065);
640
- --line-strong: rgb(255 255 255 / 0.22);
641
- --font-sans: "Geist Sans", Geist, Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
642
- --font-mono: "Geist Mono", "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
643
- }
644
- * { box-sizing: border-box; }
645
- html { min-width: 320px; min-height: 100%; background: var(--background); }
646
- body { min-height: 100vh; min-height: 100dvh; margin: 0; overflow: hidden; background: #030303; color: var(--foreground); font-family: var(--font-sans); font-size: 14px; letter-spacing: 0; text-rendering: optimizeLegibility; }
647
- button, input { color: inherit; font: inherit; letter-spacing: 0; }
648
- button, a { -webkit-tap-highlight-color: transparent; }
649
- button { cursor: pointer; }
650
- a { color: inherit; }
651
- [hidden] { display: none !important; }
652
- code, kbd, .badge, .mono, .mini-label, .metric-label, .metric-detail, .section-index, .diagnostic-code, th, .statusbar, .eyebrow { font-family: var(--font-mono); letter-spacing: 0; }
653
- .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
654
- .icon { width: 16px; height: 16px; flex: 0 0 auto; }
655
- .stage { display: grid; min-height: 100vh; min-height: 100dvh; place-items: center; padding: 20px; }
656
- .shell { display: flex; width: min(1280px, 100%); height: min(780px, calc(100dvh - 40px)); min-height: 560px; min-width: 0; flex-direction: column; overflow: hidden; border: 1px solid var(--line-strong); background: var(--background); box-shadow: 0 24px 80px rgb(0 0 0 / 0.72); }
657
- .topbar { z-index: 30; display: flex; min-height: 42px; flex: 0 0 auto; align-items: stretch; border-bottom: 1px solid var(--line); background: var(--background); }
658
- .brand { display: flex; min-width: 170px; align-items: center; gap: 8px; padding: 0 12px; border-right: 1px solid var(--line); text-decoration: none; font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; white-space: nowrap; }
659
- .brand-mark { display: grid; width: 18px; height: 18px; place-items: center; border: 1px solid var(--line-strong); color: #fff; font-family: var(--font-sans); font-size: 9px; font-weight: 650; }
660
- .brand-slash { color: #555; }
661
- .brand-product { color: var(--muted-strong); }
662
- .tabbar { display: flex; min-width: 0; flex: 1 1 auto; align-items: stretch; overflow-x: auto; scrollbar-width: none; }
663
- .tabbar::-webkit-scrollbar { display: none; }
664
- .nav-item { position: relative; display: flex; min-width: max-content; min-height: 41px; align-items: center; gap: 7px; padding: 0 11px; border: 0; background: transparent; color: var(--muted); font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; transition: background-color 140ms ease-out, color 140ms ease-out; }
665
- .nav-item::after { position: absolute; right: 10px; bottom: -1px; left: 10px; height: 1px; background: transparent; content: ""; }
666
- .nav-item:hover, .nav-item:focus-visible { background: rgb(255 255 255 / 0.035); color: var(--foreground); outline: none; }
667
- .nav-item[aria-selected="true"] { color: #fff; }
668
- .nav-item[aria-selected="true"]::after { background: #fff; }
669
- .nav-item .icon { width: 13px; height: 13px; }
670
- .nav-item small { color: #666; font-size: 9px; font-weight: 400; }
671
- .topbar-meta { display: flex; flex: 0 0 auto; margin-left: auto; border-left: 1px solid var(--line); }
672
- .topbar-status { display: flex; min-width: max-content; align-items: center; gap: 7px; padding: 0 11px; color: var(--muted-strong); font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; }
673
- .status-dot { width: 5px; height: 5px; background: #fff; box-shadow: 0 0 0 3px rgb(255 255 255 / 0.06); }
674
- .status-dot-attention { background: #909090; animation: status-pulse 1.8s ease-in-out infinite; }
675
- .status-dot-error { background: transparent; border: 1px solid #fff; }
676
- .topbar-actions { display: flex; }
677
- .action { display: inline-flex; width: 40px; min-height: 41px; align-items: center; justify-content: center; padding: 0; border: 0; border-left: 1px solid var(--line); background: transparent; color: var(--muted-strong); text-decoration: none; transition: background-color 140ms ease-out, color 140ms ease-out; }
678
- .action:hover, .action:focus-visible { background: #fff; color: #000; outline: none; }
679
- .action[data-copied="true"] { background: #fff; color: #000; }
680
- .workspace { min-height: 0; flex: 1 1 auto; }
681
- .eyebrow { display: block; color: var(--muted); font-size: 9px; font-weight: 400; text-transform: uppercase; }
682
- .content { height: 100%; min-width: 0; }
683
- .view { height: 100%; min-width: 0; overflow: hidden; }
684
- .split-view { display: grid; height: 100%; min-height: 0; grid-template-columns: clamp(230px, 28%, 300px) minmax(0, 1fr); }
685
- .pane { min-width: 0; min-height: 0; overflow: hidden; background: var(--background); }
686
- .pane-list { display: flex; flex-direction: column; border-right: 1px solid var(--line); }
687
- .pane-detail { position: relative; }
688
- .pane-header { display: flex; min-height: 38px; align-items: center; justify-content: space-between; gap: 12px; padding: 0 12px; border-bottom: 1px solid var(--line); background: var(--surface); }
689
- .pane-header strong { overflow: hidden; font-size: 11px; font-weight: 520; text-overflow: ellipsis; white-space: nowrap; }
690
- .pane-header span { overflow: hidden; color: var(--muted); font-family: var(--font-mono); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
691
- .pane-tools { border-bottom: 1px solid var(--line); }
692
- .pane-tools .filter-control { width: 100%; min-height: 36px; border: 0; }
693
- .pane-scroll, .detail-scroll { min-height: 0; overflow: auto; overscroll-behavior: contain; }
694
- .pane-scroll { flex: 1 1 auto; }
695
- .inspector-list { scrollbar-width: thin; scrollbar-color: var(--line-strong) transparent; }
696
- .inspector-row { position: relative; display: grid; width: 100%; min-height: 54px; grid-template-columns: 24px minmax(0, 1fr) auto; align-items: center; gap: 9px; padding: 8px 11px; border: 0; border-bottom: 1px solid var(--line-soft); background: transparent; color: var(--muted); text-align: left; transition: background-color 120ms ease-out, color 120ms ease-out; }
697
- .inspector-row::before { position: absolute; inset: 0 auto 0 0; width: 1px; background: transparent; content: ""; }
698
- .inspector-row:hover, .inspector-row:focus-visible { background: rgb(255 255 255 / 0.035); color: var(--foreground); outline: none; }
699
- .inspector-row[aria-selected="true"] { background: rgb(255 255 255 / 0.075); color: #fff; }
700
- .inspector-row[aria-selected="true"]::before { background: #fff; }
701
- .inspector-row-icon { display: grid; color: var(--muted-strong); place-items: center; }
702
- .inspector-row-icon .icon { width: 14px; height: 14px; }
703
- .inspector-row-copy { min-width: 0; }
704
- .inspector-row-copy strong, .inspector-row-copy small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
705
- .inspector-row-copy strong { color: inherit; font-size: 11px; font-weight: 520; }
706
- .inspector-row-copy small { margin-top: 3px; color: var(--muted); font-family: var(--font-mono); font-size: 9px; }
707
- .inspector-row-value { color: var(--muted-strong); font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; }
708
- .detail-panel { display: flex; height: 100%; min-height: 0; flex-direction: column; }
709
- .detail-scroll { flex: 1 1 auto; }
710
- .detail-intro { display: grid; min-height: 132px; grid-template-columns: 34px minmax(0, 1fr); align-items: start; gap: 14px; padding: 22px; border-bottom: 1px solid var(--line); }
711
- .detail-icon { display: grid; width: 32px; height: 32px; border: 1px solid var(--line); color: var(--muted-strong); place-items: center; }
712
- .detail-icon .icon { width: 15px; height: 15px; }
713
- .detail-intro .mini-label { margin: 1px 0 8px; }
714
- .detail-intro h2 { margin: 0; overflow-wrap: anywhere; font-size: 20px; font-weight: 530; line-height: 1.2; }
715
- .detail-intro p { max-width: 680px; margin: 8px 0 0; color: var(--muted); font-size: 11px; line-height: 1.55; }
716
- .detail-section { border-top: 1px solid var(--line); }
717
- .detail-intro + .detail-section { border-top: 0; }
718
- .property-list { margin: 0; }
719
- .property-list > div { display: grid; min-height: 48px; grid-template-columns: minmax(120px, 0.32fr) minmax(0, 1fr); align-items: center; gap: 18px; padding: 9px 16px; border-bottom: 1px solid var(--line-soft); }
720
- .property-list dt { color: var(--muted); font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; }
721
- .property-list dd { min-width: 0; margin: 0; overflow-wrap: anywhere; color: var(--muted-strong); font-size: 11px; }
722
- .property-list dd > code { color: var(--foreground); font-size: 10px; }
723
- .single-pane { height: 100%; min-height: 0; }
724
- .json-viewer { min-height: 100%; margin: 0; padding: 16px; overflow: auto; background: #000; color: var(--muted-strong); font-family: var(--font-mono); font-size: 10px; line-height: 1.65; tab-size: 2; white-space: pre-wrap; word-break: break-word; }
725
- .diagnostic { display: grid; grid-template-columns: 32px minmax(0, 1fr) auto; align-items: start; gap: 12px; min-height: 88px; padding: 16px 18px; border-bottom: 1px solid var(--line-soft); }
726
- .diagnostic:last-child { border-bottom: 0; }
727
- .diagnostic-mark { display: grid; width: 28px; height: 28px; place-items: center; border: 1px solid var(--line); color: var(--muted-strong); }
728
- .diagnostic-code { display: block; margin-bottom: 5px; color: var(--muted); font-size: 9px; }
729
- .diagnostic strong { display: block; font-size: 12px; font-weight: 540; }
730
- .diagnostic p { margin: 5px 0 0; color: var(--muted-strong); font-size: 11px; line-height: 1.5; }
731
- .diagnostic small { display: block; margin-top: 6px; color: var(--muted); font-size: 10px; line-height: 1.5; }
732
- .diagnostic-warning { box-shadow: inset 1px 0 var(--line-strong); }
733
- .system-row { display: grid; grid-template-columns: 32px minmax(0, 1fr) auto; min-height: 64px; align-items: center; gap: 10px; padding: 11px 16px; border-bottom: 1px solid var(--line-soft); }
734
- .system-row:last-child { border-bottom: 0; }
735
- .system-icon { display: grid; width: 28px; height: 28px; place-items: center; color: var(--muted-strong); }
736
- .system-row strong, .system-row small { display: block; }
737
- .system-row strong { font-size: 12px; font-weight: 520; }
738
- .system-row small { margin-top: 3px; overflow: hidden; color: var(--muted); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
739
- .system-value { font-family: var(--font-mono); font-size: 11px; }
740
- .filter-control { display: flex; width: min(280px, 34vw); min-height: 34px; align-items: center; gap: 8px; padding: 0 9px; border: 1px solid var(--line); background: #000; color: var(--muted); }
741
- .filter-control:focus-within { border-color: var(--line-strong); color: #fff; }
742
- .filter-control input { min-width: 0; flex: 1; border: 0; outline: 0; background: transparent; color: var(--foreground); font-family: var(--font-mono); font-size: 10px; }
743
- .filter-control input::placeholder { color: #666; }
744
- .filter-control kbd { padding: 1px 5px; border: 1px solid var(--line); color: var(--muted); font-size: 9px; }
745
- .table-scroll { width: 100%; overflow-x: auto; }
746
- table { width: 100%; border-collapse: collapse; table-layout: auto; }
747
- th { height: 36px; padding: 0 16px; border-bottom: 1px solid var(--line); background: #030303; color: var(--muted); font-size: 9px; font-weight: 400; text-align: left; text-transform: uppercase; white-space: nowrap; }
748
- td { min-height: 48px; padding: 12px 16px; border-bottom: 1px solid var(--line-soft); color: var(--muted-strong); font-size: 11px; line-height: 1.55; vertical-align: top; }
749
- tr:last-child td { border-bottom: 0; }
750
- tbody tr { transition: background-color 120ms ease-out; }
751
- tbody tr:hover { background: rgb(255 255 255 / 0.035); }
752
- td code { color: var(--foreground); font-size: 10px; white-space: nowrap; }
753
- .file-cell { max-width: 420px; overflow: hidden; font-family: var(--font-mono); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
754
- .badge { display: inline-flex; min-height: 20px; align-items: center; padding: 1px 6px; border: 1px solid var(--line); color: var(--muted-strong); font-size: 9px; font-weight: 400; text-transform: uppercase; white-space: nowrap; }
755
- .badge-ready, .badge-page, .badge-node { border-color: var(--line-strong); color: #fff; }
756
- .badge-warning, .badge-attention, .badge-edge { border-style: dashed; color: #fff; }
757
- .badge-error { background: #fff; color: #000; }
758
- .badge-method { min-width: 36px; justify-content: center; border-color: var(--line-soft); color: #d0d0d0; }
759
- .method-list, .runtime-value, .runtime-facts { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; }
760
- .runtime-value small, .runtime-facts span { color: var(--muted); font-family: var(--font-mono); font-size: 9px; }
761
- .cell-detail { display: block; margin-top: 4px; color: var(--muted); font-family: var(--font-mono); font-size: 9px; }
762
- .route-operation { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
763
- .route-operation + .route-operation { margin-top: 5px; }
764
- .route-operation small { color: var(--muted); font-family: var(--font-mono); font-size: 9px; white-space: nowrap; }
765
- .schedule { display: block; }
766
- .schedule + .schedule { margin-top: 4px; }
767
- .muted { color: var(--muted); }
768
- .empty-state { display: grid; min-height: 156px; place-items: center; align-content: center; gap: 7px; padding: 24px; color: var(--muted); text-align: center; }
769
- .empty-state strong { color: var(--muted-strong); font-size: 12px; font-weight: 520; }
770
- .empty-state span { max-width: 420px; font-size: 10px; line-height: 1.5; }
771
- .filtered-empty { padding: 24px; color: var(--muted); font-family: var(--font-mono); font-size: 10px; text-align: center; }
772
- .feature-matrix > div { display: flex; min-height: 45px; align-items: center; justify-content: space-between; gap: 16px; padding: 9px 16px; border-bottom: 1px solid var(--line-soft); }
773
- .feature-matrix > div:last-child { border-bottom: 0; }
774
- .feature-matrix span:first-child { font-size: 11px; }
775
- .environment-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
776
- .environment-grid > div { min-height: 128px; padding: 16px; }
777
- .environment-grid > div + div { border-left: 1px solid var(--line); }
778
- .mini-label { display: block; margin-bottom: 12px; color: var(--muted); font-size: 9px; text-transform: uppercase; }
779
- .key-list { display: flex; flex-wrap: wrap; gap: 6px; }
780
- .key-list code { padding: 4px 6px; border: 1px solid var(--line-soft); color: var(--muted-strong); font-size: 9px; }
781
- .layer-list > div { display: grid; grid-template-columns: minmax(120px, 0.7fr) minmax(0, 1fr) auto; min-height: 52px; align-items: center; gap: 14px; padding: 10px 16px; border-bottom: 1px solid var(--line-soft); }
782
- .layer-list > div:last-child { border-bottom: 0; }
783
- .layer-list span { display: flex; align-items: center; gap: 8px; }
784
- .layer-list strong { font-size: 11px; font-weight: 520; }
785
- .layer-list code, .layer-list small { color: var(--muted); font-size: 9px; }
786
- .statusbar { display: flex; min-height: 29px; flex: 0 0 auto; align-items: center; justify-content: space-between; gap: 16px; padding: 0 10px; border-top: 1px solid var(--line); background: var(--surface); color: var(--muted); font-size: 9px; text-transform: uppercase; }
787
- .statusbar span { display: flex; align-items: center; gap: 7px; }
788
- @keyframes status-pulse { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }
789
- @media (max-width: 1100px) {
790
- .topbar-status { display: none; }
791
- }
792
- @media (max-width: 840px) {
793
- .stage { display: block; padding: 0; }
794
- .shell { width: 100%; height: 100dvh; min-height: 0; border: 0; }
795
- .topbar { flex-wrap: wrap; }
796
- .brand { min-width: auto; height: 40px; border-right: 0; }
797
- .brand-product, .brand-slash { display: none; }
798
- .tabbar { order: 3; width: 100%; flex-basis: 100%; border-top: 1px solid var(--line); }
799
- .topbar-meta { height: 40px; }
800
- .nav-item { min-height: 39px; }
801
- .split-view { grid-template-columns: 1fr; grid-template-rows: minmax(150px, 34%) minmax(0, 1fr); }
802
- .pane-list { border-right: 0; border-bottom: 1px solid var(--line); }
803
- .filter-control { width: 100%; }
804
- }
805
- @media (max-width: 560px) {
806
- .detail-intro { min-height: 112px; padding: 16px; }
807
- .detail-intro h2 { font-size: 17px; }
808
- .property-list > div { grid-template-columns: minmax(98px, 0.38fr) minmax(0, 1fr); gap: 12px; padding-inline: 12px; }
809
- .environment-grid { grid-template-columns: 1fr; }
810
- .environment-grid > div + div { border-top: 1px solid var(--line); border-left: 0; }
811
- .statusbar span:last-child { display: none; }
812
- }
813
- @media (prefers-reduced-motion: reduce) {
814
- html { scroll-behavior: auto; }
815
- *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; }
816
- }
817
- </style>
818
- <style data-assistant-ui-layout>
819
- :root {
820
- --background: #0a0a0a;
821
- --surface: #0a0a0a;
822
- --surface-raised: #111111;
823
- --foreground: #ededed;
824
- --muted: #929299;
825
- --muted-strong: #b4b4ba;
826
- --line: rgb(255 255 255 / 0.11);
827
- --line-soft: rgb(255 255 255 / 0.075);
828
- --line-strong: rgb(255 255 255 / 0.16);
829
- --accent: #1c1c1e;
830
- }
831
- html, body { width: 100%; height: 100%; background: #080808; }
832
- body { position: relative; min-height: 100dvh; overflow: hidden; font-size: 13px; }
833
- .stage {
834
- position: fixed;
835
- inset: 0;
836
- z-index: 2;
837
- display: grid;
838
- min-height: 0;
839
- padding: 20px;
840
- place-items: center;
841
- pointer-events: none;
842
- }
843
- .shell {
844
- width: min(960px, 92vw);
845
- height: min(560px, 80dvh);
846
- min-width: 0;
847
- min-height: 0;
848
- border: 1px solid var(--line-strong);
849
- border-radius: 12px;
850
- background: var(--background);
851
- box-shadow: 0 24px 80px rgb(0 0 0 / 0.72), 0 4px 18px rgb(0 0 0 / 0.45);
852
- pointer-events: auto;
853
- animation: devtools-window-in 180ms cubic-bezier(0.175, 0.885, 0.32, 1.08);
854
- }
855
- .topbar {
856
- min-height: 40px;
857
- height: 40px;
858
- align-items: center;
859
- justify-content: space-between;
860
- flex-wrap: nowrap;
861
- border-bottom-color: var(--line);
862
- background: var(--background);
863
- }
864
- .brand { display: none; }
865
- .tabbar {
866
- height: 100%;
867
- flex: 1 1 auto;
868
- align-items: stretch;
869
- order: initial;
870
- width: auto;
871
- flex-basis: auto;
872
- padding-inline-start: 8px;
873
- border-top: 0;
874
- }
875
- .nav-item {
876
- min-height: 39px;
877
- height: 39px;
878
- gap: 0;
879
- padding: 0 12px;
880
- border-radius: 0;
881
- color: var(--muted);
882
- font-family: var(--font-sans);
883
- font-size: 13px;
884
- font-weight: 500;
885
- text-transform: none;
886
- }
887
- .nav-item::after {
888
- right: 8px;
889
- bottom: -1px;
890
- left: 8px;
891
- height: 2px;
892
- border-radius: 999px;
893
- }
894
- .nav-item:hover, .nav-item:focus-visible { background: transparent; color: var(--foreground); }
895
- .nav-item[aria-selected="true"] { color: var(--foreground); }
896
- .topbar-meta {
897
- height: 100%;
898
- align-items: center;
899
- gap: 8px;
900
- margin-left: 0;
901
- padding: 0 8px 0 4px;
902
- border-left: 0;
903
- }
904
- .project-select {
905
- display: inline-flex;
906
- height: 28px;
907
- min-width: 0;
908
- align-items: center;
909
- gap: 5px;
910
- padding: 0 9px;
911
- border: 1px solid var(--line);
912
- border-radius: 8px;
913
- color: var(--muted-strong);
914
- font-size: 12px;
915
- white-space: nowrap;
916
- }
917
- .project-select .icon { width: 12px; height: 12px; transform: rotate(90deg); }
918
- .topbar-status {
919
- min-width: max-content;
920
- gap: 6px;
921
- padding: 0;
922
- color: var(--muted);
923
- font-family: var(--font-sans);
924
- font-size: 11px;
925
- text-transform: none;
926
- }
927
- .status-dot {
928
- width: 6px;
929
- height: 6px;
930
- border: 0;
931
- border-radius: 999px;
932
- background: #2dd4bf;
933
- box-shadow: none;
934
- }
935
- .status-dot-attention { background: #f59e0b; animation: none; }
936
- .status-dot-error { background: #ef4444; }
937
- .close-action {
938
- display: inline-flex;
939
- width: 28px;
940
- height: 28px;
941
- flex: 0 0 auto;
942
- align-items: center;
943
- justify-content: center;
944
- padding: 0;
945
- border: 0;
946
- border-radius: 6px;
947
- background: transparent;
948
- color: var(--muted);
949
- text-decoration: none;
950
- transition: background-color 120ms ease-out, color 120ms ease-out;
951
- }
952
- .close-action:hover, .close-action:focus-visible { background: var(--accent); color: var(--foreground); outline: none; }
953
- .close-action .icon { width: 14px; height: 14px; }
954
- .workspace, .content, .view { min-height: 0; }
955
- .split-view {
956
- grid-template-columns: clamp(14rem, 28%, 18rem) minmax(0, 1fr);
957
- grid-template-rows: minmax(0, 1fr);
958
- }
959
- .pane { background: var(--background); }
960
- .pane-list { border-right: 1px solid var(--line); border-bottom: 0; }
961
- .pane-header {
962
- min-height: 32px;
963
- height: 32px;
964
- max-height: 32px;
965
- flex: 0 0 32px;
966
- padding: 0 12px;
967
- border-bottom-color: var(--line);
968
- background: var(--background);
969
- }
970
- .pane-header strong {
971
- color: var(--muted);
972
- font-size: 11px;
973
- font-weight: 400;
974
- line-height: 1;
975
- }
976
- .pane-header span {
977
- color: var(--muted);
978
- font-family: var(--font-sans);
979
- font-size: 10px;
980
- line-height: 1;
981
- }
982
- .pane-tools { border-bottom-color: var(--line); }
983
- .pane-tools .filter-control { min-height: 32px; height: 32px; }
984
- .filter-control {
985
- min-height: 32px;
986
- gap: 7px;
987
- padding: 0 10px;
988
- border-color: var(--line);
989
- border-radius: 0;
990
- background: var(--background);
991
- }
992
- .filter-control .icon { width: 13px; height: 13px; }
993
- .filter-control input { font-family: var(--font-sans); font-size: 11px; }
994
- .filter-control input::placeholder { color: var(--muted); }
995
- .filter-control kbd {
996
- padding: 1px 5px;
997
- border-color: var(--line);
998
- border-radius: 4px;
999
- color: var(--muted);
1000
- font-size: 9px;
1001
- }
1002
- .inspector-row {
1003
- min-height: 44px;
1004
- grid-template-columns: minmax(0, 1fr) auto;
1005
- gap: 8px;
1006
- padding: 6px 11px 6px 12px;
1007
- border: 0;
1008
- border-left: 2px solid transparent;
1009
- border-radius: 0;
1010
- color: var(--muted-strong);
1011
- }
1012
- .inspector-row::before { display: none; }
1013
- .inspector-row:hover, .inspector-row:focus-visible { background: rgb(255 255 255 / 0.035); color: var(--foreground); }
1014
- .inspector-row[aria-selected="true"] {
1015
- border-left-color: var(--foreground);
1016
- background: var(--accent);
1017
- color: var(--foreground);
1018
- }
1019
- .inspector-row-copy strong { font-size: 12px; font-weight: 500; }
1020
- .inspector-row-copy small {
1021
- margin-top: 2px;
1022
- color: var(--muted);
1023
- font-family: var(--font-sans);
1024
- font-size: 10px;
1025
- }
1026
- .inspector-row-value {
1027
- padding: 2px 6px;
1028
- border: 1px solid var(--line);
1029
- border-radius: 999px;
1030
- background: rgb(255 255 255 / 0.035);
1031
- color: var(--muted);
1032
- font-family: var(--font-sans);
1033
- font-size: 9px;
1034
- line-height: 1.2;
1035
- text-transform: none;
1036
- }
1037
- .detail-intro {
1038
- display: block;
1039
- min-height: 0;
1040
- padding: 12px;
1041
- border-bottom-color: var(--line-soft);
1042
- }
1043
- .detail-icon { display: none; }
1044
- .detail-intro .mini-label { margin: 0 0 8px; }
1045
- .detail-intro h2 { font-size: 13px; font-weight: 500; line-height: 1.3; }
1046
- .detail-intro p { margin-top: 6px; font-size: 11px; line-height: 1.5; }
1047
- .detail-section, .detail-intro + .detail-section { border-top-color: var(--line); }
1048
- .property-list > div {
1049
- min-height: 36px;
1050
- grid-template-columns: minmax(96px, 0.28fr) minmax(0, 1fr);
1051
- gap: 14px;
1052
- padding: 7px 12px;
1053
- border-bottom-color: var(--line-soft);
1054
- }
1055
- .property-list dt { font-family: var(--font-sans); font-size: 10px; text-transform: none; }
1056
- .property-list dd { color: var(--foreground); font-size: 11px; }
1057
- .property-list dd > code { font-size: 10px; }
1058
- .json-viewer {
1059
- padding: 12px;
1060
- background: var(--background);
1061
- color: var(--muted-strong);
1062
- font-size: 10px;
1063
- line-height: 1.55;
1064
- }
1065
- .diagnostic {
1066
- min-height: 68px;
1067
- grid-template-columns: 24px minmax(0, 1fr) auto;
1068
- gap: 10px;
1069
- padding: 11px 12px;
1070
- border-bottom-color: var(--line-soft);
1071
- }
1072
- .diagnostic-mark { width: 22px; height: 22px; border: 0; }
1073
- .diagnostic-mark .icon { width: 13px; height: 13px; }
1074
- .diagnostic-code { margin-bottom: 3px; font-size: 9px; }
1075
- .diagnostic strong { font-size: 11px; font-weight: 500; }
1076
- .diagnostic p { margin-top: 3px; font-size: 10px; line-height: 1.45; }
1077
- .diagnostic small { margin-top: 4px; font-size: 9px; }
1078
- .diagnostic-warning { box-shadow: none; }
1079
- .system-row {
1080
- min-height: 48px;
1081
- grid-template-columns: 24px minmax(0, 1fr) auto;
1082
- gap: 8px;
1083
- padding: 8px 12px;
1084
- border-bottom-color: var(--line-soft);
1085
- }
1086
- .system-icon { width: 20px; height: 20px; }
1087
- .system-icon .icon { width: 13px; height: 13px; }
1088
- .system-row strong { font-size: 11px; font-weight: 500; }
1089
- .system-row small { margin-top: 2px; font-size: 10px; }
1090
- .system-value { color: var(--muted); font-size: 10px; }
1091
- table { font-size: 11px; }
1092
- th {
1093
- height: 32px;
1094
- padding: 0 12px;
1095
- background: var(--background);
1096
- font-family: var(--font-sans);
1097
- font-size: 10px;
1098
- font-weight: 400;
1099
- text-transform: none;
1100
- }
1101
- td { min-height: 40px; padding: 9px 12px; font-size: 10px; }
1102
- td code, .file-cell { font-size: 9px; }
1103
- .badge {
1104
- min-height: 18px;
1105
- padding: 1px 6px;
1106
- border-radius: 999px;
1107
- background: rgb(255 255 255 / 0.04);
1108
- font-family: var(--font-sans);
1109
- font-size: 9px;
1110
- text-transform: none;
1111
- }
1112
- .badge-error { background: var(--foreground); color: var(--background); }
1113
- .badge-warning, .badge-attention, .badge-edge { border-style: solid; }
1114
- .empty-state { min-height: 100%; padding: 24px; gap: 6px; }
1115
- .empty-state .icon { display: none; }
1116
- .empty-state strong { font-size: 12px; font-weight: 400; }
1117
- .empty-state span { font-size: 11px; }
1118
- .feature-matrix > div { min-height: 36px; padding: 7px 12px; border-bottom-color: var(--line-soft); }
1119
- .feature-matrix span:first-child { font-size: 11px; }
1120
- .environment-grid > div { min-height: 104px; padding: 12px; }
1121
- .mini-label { margin-bottom: 8px; font-family: var(--font-sans); font-size: 10px; text-transform: none; }
1122
- .key-list code { border-radius: 4px; font-size: 9px; }
1123
- .layer-list > div { min-height: 44px; padding: 8px 12px; border-bottom-color: var(--line-soft); }
1124
- .layer-list strong { font-size: 11px; font-weight: 500; }
1125
- .statusbar { display: none; }
1126
- html.devtools-frame .stage { position: static; width: 100%; height: 100%; min-height: 100%; padding: 0; }
1127
- html.devtools-frame .shell { width: 100%; height: 100%; border-radius: 12px; box-shadow: none; animation: none; }
1128
- @keyframes devtools-window-in {
1129
- from { opacity: 0; transform: scale(0.985) translateY(4px); }
1130
- to { opacity: 1; transform: scale(1) translateY(0); }
1131
- }
1132
- @media (max-width: 700px) {
1133
- .stage { display: grid; padding: 0; }
1134
- .shell {
1135
- width: 100%;
1136
- height: 100%;
1137
- min-height: 0;
1138
- border: 1px solid var(--line-strong);
1139
- border-radius: 10px;
1140
- }
1141
- .topbar { flex-wrap: nowrap; }
1142
- .tabbar {
1143
- order: initial;
1144
- width: auto;
1145
- flex-basis: auto;
1146
- border-top: 0;
1147
- padding-inline-start: 4px;
1148
- }
1149
- .topbar-meta { height: 40px; }
1150
- .nav-item { min-height: 39px; height: 39px; padding-inline: 9px; }
1151
- .split-view { grid-template-columns: 1fr; grid-template-rows: minmax(148px, 36%) minmax(0, 1fr); }
1152
- .pane-list { border-right: 0; border-bottom: 1px solid var(--line); }
1153
- }
1154
- @media (max-width: 560px) {
1155
- .project-select { display: none; }
1156
- .topbar-status { display: none; }
1157
- .topbar-meta { gap: 4px; padding-left: 0; }
1158
- .status-label { display: none; }
1159
- .detail-intro { min-height: 0; padding: 12px; }
1160
- .detail-intro h2 { font-size: 13px; }
1161
- .property-list > div { grid-template-columns: minmax(82px, 0.34fr) minmax(0, 1fr); gap: 10px; padding-inline: 10px; }
1162
- }
1163
- @media (prefers-reduced-motion: reduce) {
1164
- .shell { animation: none; }
1165
- }
1166
- </style>
1167
- </head>
1168
- <body>
1169
- <div class="stage">
1170
- <div class="shell" role="dialog" aria-modal="true" aria-label="Farm.js DevTools">
1171
- <header class="topbar">
1172
- <nav class="tabbar" aria-label="Devtools views">
1173
- ${renderNavigationItem("overview", "Overview")}
1174
- ${renderNavigationItem("routes", "Routes")}
1175
- ${renderNavigationItem("api", "API")}
1176
- ${renderNavigationItem("systems", "Systems")}
1177
- ${renderNavigationItem("runtime", "Runtime")}
1178
- ${renderNavigationItem("raw", "Raw")}
1179
- </nav>
1180
- <div class="topbar-meta">
1181
- <span class="project-select">${escapeHtml(snapshot.project.name)} ${icon(
1182
- "chevron"
1183
- )}</span>
1184
- <span class="topbar-status"><span class="status-dot"></span><span class="status-label">1 instance</span></span>
1185
- <button class="close-action" type="button" data-close-devtools aria-label="Close DevTools" title="Close DevTools">${icon(
1186
- "close"
1187
- )}</button>
1188
- </div>
1189
- </header>
1190
- <div class="workspace">
1191
- <main class="content">
1192
- <section class="view" data-view-panel="overview">${renderOverviewInspector(
1193
- snapshot,
1194
- healthLabel,
1195
- generatedTime
1196
- )}</section>
1197
- <section class="view" data-view-panel="routes" hidden>${renderRoutesInspector(
1198
- snapshot
1199
- )}</section>
1200
- <section class="view" data-view-panel="api" hidden>${renderApiInspector(
1201
- snapshot
1202
- )}</section>
1203
- <section class="view" data-view-panel="systems" hidden>${renderSystemsInspector(
1204
- snapshot
1205
- )}</section>
1206
- <section class="view" data-view-panel="runtime" hidden>${renderRuntimeInspector(
1207
- snapshot
1208
- )}</section>
1209
- <section class="view" data-view-panel="raw" hidden>${renderRawInspector(snapshot)}</section>
1210
- </main>
1211
- </div>
1212
- </div>
1213
- </div>
1214
- <script>
1215
- (() => {
1216
- const embedded = window.parent !== window;
1217
- const closeDevtools = () => {
1218
- if (embedded && window.parent !== window) {
1219
- window.parent.postMessage({ type: "farm:devtools:close" }, location.origin);
1220
- return;
1221
- }
1222
- location.assign("/");
1223
- };
1224
- document.querySelector("[data-close-devtools]")?.addEventListener("click", closeDevtools);
1225
- document.addEventListener("keydown", (event) => {
1226
- if (event.key === "Escape") {
1227
- event.preventDefault();
1228
- closeDevtools();
1229
- return;
1230
- }
1231
- if (embedded && window.parent !== window) {
1232
- window.parent.postMessage(
1233
- {
1234
- type: "farm:devtools:keydown",
1235
- event: {
1236
- key: event.key,
1237
- code: event.code,
1238
- altKey: event.altKey,
1239
- ctrlKey: event.ctrlKey,
1240
- metaKey: event.metaKey,
1241
- shiftKey: event.shiftKey,
1242
- repeat: event.repeat,
1243
- },
1244
- },
1245
- location.origin,
1246
- );
1247
- }
1248
- });
1249
-
1250
- const validViews = new Set(["overview", "routes", "api", "systems", "runtime", "raw"]);
1251
- const triggers = Array.from(document.querySelectorAll("[data-view-trigger]"));
1252
- const panels = Array.from(document.querySelectorAll("[data-view-panel]"));
1253
- const selectView = (view, updateHash = true) => {
1254
- const nextView = validViews.has(view) ? view : "overview";
1255
- triggers.forEach((trigger) => {
1256
- trigger.setAttribute("aria-selected", String(trigger.dataset.viewTrigger === nextView));
1257
- });
1258
- panels.forEach((panel) => {
1259
- panel.hidden = panel.dataset.viewPanel !== nextView;
1260
- });
1261
- if (updateHash) {
1262
- history.replaceState(null, "", nextView === "overview" ? location.pathname : "#" + nextView);
1263
- const activePanel = panels.find((panel) => panel.dataset.viewPanel === nextView);
1264
- if (activePanel) activePanel.scrollTop = 0;
1265
- }
1266
- };
1267
- triggers.forEach((trigger) => trigger.addEventListener("click", () => selectView(trigger.dataset.viewTrigger)));
1268
- window.addEventListener("hashchange", () => selectView(location.hash.slice(1), false));
1269
- selectView(location.hash.slice(1), false);
1270
-
1271
- document.querySelectorAll("[data-detail-trigger]").forEach((trigger) => {
1272
- trigger.addEventListener("click", () => {
1273
- const scope = trigger.dataset.detailTrigger;
1274
- const id = trigger.dataset.detailId;
1275
- document.querySelectorAll('[data-detail-trigger="' + scope + '"]').forEach((row) => {
1276
- row.setAttribute("aria-selected", String(row.dataset.detailId === id));
1277
- });
1278
- document.querySelectorAll('[data-detail-panel="' + scope + '"]').forEach((panel) => {
1279
- panel.hidden = panel.dataset.detailId !== id;
1280
- });
1281
- });
1282
- });
1283
-
1284
- document.querySelectorAll("[data-filter]").forEach((input) => {
1285
- input.addEventListener("input", () => {
1286
- const id = input.dataset.filter;
1287
- const query = input.value.trim().toLowerCase();
1288
- const rows = Array.from(document.querySelectorAll('[data-filter-rows="' + id + '"] [data-search-value]'));
1289
- let visible = 0;
1290
- rows.forEach((row) => {
1291
- const matches = !query || (row.dataset.searchValue || "").toLowerCase().includes(query);
1292
- row.hidden = !matches;
1293
- if (matches) visible += 1;
1294
- });
1295
- const selected = rows.find((row) => row.getAttribute("aria-selected") === "true");
1296
- if (selected?.hidden) rows.find((row) => !row.hidden)?.click();
1297
- const empty = document.querySelector('[data-filter-empty="' + id + '"]');
1298
- if (empty) empty.hidden = visible !== 0;
1299
- });
1300
- });
1301
-
1302
- document.addEventListener("keydown", (event) => {
1303
- if (event.key !== "/" || event.metaKey || event.ctrlKey || event.altKey) return;
1304
- const active = document.activeElement;
1305
- if (active && (active.tagName === "INPUT" || active.tagName === "TEXTAREA")) return;
1306
- const panel = document.querySelector("[data-view-panel]:not([hidden])");
1307
- const input = panel?.querySelector("[data-filter]");
1308
- if (input) {
1309
- event.preventDefault();
1310
- input.focus();
1311
- }
1312
- });
1313
-
1314
- document.querySelector("[data-refresh]")?.addEventListener("click", () => location.reload());
1315
- document.querySelector("[data-copy-snapshot]")?.addEventListener("click", async (event) => {
1316
- const button = event.currentTarget;
1317
- const label = button.querySelector("[data-copy-label]");
1318
- try {
1319
- const response = await fetch("/__farm/devtools.json", { cache: "no-store" });
1320
- const value = JSON.stringify(await response.json(), null, 2);
1321
- if (navigator.clipboard?.writeText) await navigator.clipboard.writeText(value);
1322
- else {
1323
- const textarea = document.createElement("textarea");
1324
- textarea.value = value;
1325
- document.body.appendChild(textarea);
1326
- textarea.select();
1327
- document.execCommand("copy");
1328
- textarea.remove();
1329
- }
1330
- button.dataset.copied = "true";
1331
- if (label) label.textContent = "Copied";
1332
- setTimeout(() => {
1333
- button.dataset.copied = "false";
1334
- if (label) label.textContent = "Copy JSON";
1335
- }, 1600);
1336
- } catch {
1337
- if (label) label.textContent = "Copy failed";
1338
- }
1339
- });
1340
- })();
1341
- </script>
1342
- </body>
1343
- </html>`;
1344
- }
1345
- __name(renderFarmDevtoolsHtml, "renderFarmDevtoolsHtml");
1346
- export {
1347
- renderFarmDevtoolsHtml
1348
- };
1349
- //# sourceMappingURL=devtools-ui-NJKFORTG.mjs.map