@farm.js/core 0.1.0-beta.96 → 0.1.0-beta.97
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.
- package/dist/after.cjs +1 -1
- package/dist/after.mjs +1 -1
- package/dist/agent-runtime.d.mts +3 -2
- package/dist/agent-runtime.d.ts +3 -2
- package/dist/api/route-manager.cjs +43 -4
- package/dist/api/route-manager.d.mts +4 -3
- package/dist/api/route-manager.d.ts +4 -3
- package/dist/api/route-manager.mjs +6 -6
- package/dist/api/runtime.cjs +43 -4
- package/dist/api/runtime.d.mts +1 -1
- package/dist/api/runtime.d.ts +1 -1
- package/dist/api/runtime.mjs +4 -4
- package/dist/api.cjs +239 -70
- package/dist/api.d.mts +7 -6
- package/dist/api.d.ts +7 -6
- package/dist/api.mjs +17 -11
- package/dist/{app-CIIEvA4r.d.ts → app-CIOx3LvY.d.ts} +4 -4
- package/dist/{app-O4AEC1OH.d.mts → app-DBd6437H.d.mts} +4 -4
- package/dist/app-markdown.d.mts +4 -3
- package/dist/app-markdown.d.ts +4 -3
- package/dist/cache.cjs +42 -4
- package/dist/cache.d.mts +68 -1
- package/dist/cache.d.ts +68 -1
- package/dist/cache.mjs +3 -3
- package/dist/{chunk-AXVJCMVF.mjs → chunk-2HDOV47R.mjs} +3 -3
- package/dist/chunk-2HDOV47R.mjs.map +1 -0
- package/dist/{chunk-RBRLLZL5.mjs → chunk-34IAPZBG.mjs} +16 -3
- package/dist/chunk-34IAPZBG.mjs.map +1 -0
- package/dist/{chunk-VV24CC42.mjs → chunk-35NPLKQJ.mjs} +2 -2
- package/dist/{chunk-MM46HTX6.mjs → chunk-3TWQERDE.mjs} +4 -3
- package/dist/chunk-3TWQERDE.mjs.map +1 -0
- package/dist/{chunk-RWYRFCLG.mjs → chunk-4X57GXQA.mjs} +2 -2
- package/dist/{chunk-3I55IGXU.mjs → chunk-52BR7LTX.mjs} +14 -15
- package/dist/chunk-52BR7LTX.mjs.map +1 -0
- package/dist/{chunk-RAGSHKDC.mjs → chunk-6EJHNHH4.mjs} +38 -3
- package/dist/chunk-6EJHNHH4.mjs.map +1 -0
- package/dist/{chunk-ZFNK77WN.mjs → chunk-6JNGOC37.mjs} +2 -2
- package/dist/{after.cjs.map → chunk-6JNGOC37.mjs.map} +1 -1
- package/dist/{chunk-MOW47IF5.mjs → chunk-6UYVU46O.mjs} +2 -2
- package/dist/{chunk-7MABZJIM.mjs → chunk-7PYVLJ4J.mjs} +1 -1
- package/dist/chunk-7PYVLJ4J.mjs.map +1 -0
- package/dist/{chunk-54XSGLKT.mjs → chunk-D7F7YZ7L.mjs} +93 -67
- package/dist/chunk-D7F7YZ7L.mjs.map +1 -0
- package/dist/{chunk-SCFX4UTD.mjs → chunk-EHTUKVSW.mjs} +1 -1
- package/dist/chunk-EHTUKVSW.mjs.map +1 -0
- package/dist/{chunk-LZTGDH3H.mjs → chunk-EPDIF432.mjs} +424 -10
- package/dist/chunk-EPDIF432.mjs.map +1 -0
- package/dist/{chunk-GZHKWHCH.mjs → chunk-FP5Q67FO.mjs} +167 -96
- package/dist/chunk-FP5Q67FO.mjs.map +1 -0
- package/dist/{chunk-HHZAOTQD.mjs → chunk-GJ7W6LNK.mjs} +7 -6
- package/dist/chunk-GJ7W6LNK.mjs.map +1 -0
- package/dist/{chunk-RLGUZ3HS.mjs → chunk-I3OOUWO5.mjs} +3 -3
- package/dist/{chunk-LKKMI7JG.mjs → chunk-IZBX2TEU.mjs} +153 -68
- package/dist/chunk-IZBX2TEU.mjs.map +1 -0
- package/dist/{chunk-74QPONAN.mjs → chunk-J3MPQ4MQ.mjs} +2 -2
- package/dist/{chunk-74QPONAN.mjs.map → chunk-J3MPQ4MQ.mjs.map} +1 -1
- package/dist/{chunk-ODJGAWDH.mjs → chunk-JV7JUD7Q.mjs} +4 -4
- package/dist/{chunk-Q3OX763A.mjs → chunk-LXDASSTE.mjs} +2 -2
- package/dist/{chunk-ZRBCBOEX.mjs → chunk-N2FY2QZ7.mjs} +28 -3
- package/dist/chunk-N2FY2QZ7.mjs.map +1 -0
- package/dist/{chunk-MRVJCLYQ.mjs → chunk-PSQ7N4XP.mjs} +4 -2
- package/dist/chunk-PSQ7N4XP.mjs.map +1 -0
- package/dist/{chunk-HVG3HLQZ.mjs → chunk-Q7WGOOAI.mjs} +3 -3
- package/dist/{chunk-WTYAPO5I.mjs → chunk-RCNWMEBT.mjs} +3 -2
- package/dist/{chunk-WTYAPO5I.mjs.map → chunk-RCNWMEBT.mjs.map} +1 -1
- package/dist/{chunk-3INDBMUU.mjs → chunk-TGDIACZT.mjs} +2 -2
- package/dist/{chunk-WB75GIX2.mjs → chunk-TQTB33JS.mjs} +14 -3
- package/dist/chunk-TQTB33JS.mjs.map +1 -0
- package/dist/{chunk-WMAYETRD.mjs → chunk-TT3E2JOF.mjs} +3 -3
- package/dist/{chunk-FVAM43KI.mjs → chunk-UMUWR5XA.mjs} +2 -2
- package/dist/{chunk-VOUJW4FL.mjs → chunk-WD2EBM3I.mjs} +70 -15
- package/dist/chunk-WD2EBM3I.mjs.map +1 -0
- package/dist/{chunk-ZPG6SNHH.mjs → chunk-WMJGA32P.mjs} +47 -5
- package/dist/chunk-WMJGA32P.mjs.map +1 -0
- package/dist/{chunk-TKQCJMY7.mjs → chunk-X4SFHKFH.mjs} +7 -4
- package/dist/{chunk-TKQCJMY7.mjs.map → chunk-X4SFHKFH.mjs.map} +1 -1
- package/dist/{chunk-Q7GPJZCO.mjs → chunk-YIBV77KZ.mjs} +26 -7
- package/dist/chunk-YIBV77KZ.mjs.map +1 -0
- package/dist/client/lifecycle.mjs +2 -2
- package/dist/{client-mcMC334J.d.mts → client-DWoLZ3QU.d.mts} +52 -5
- package/dist/{client-d5ONQ-Pd.d.ts → client-DuQuQC1h.d.ts} +52 -5
- package/dist/client-cache-BMxuFqwH.d.ts +18 -0
- package/dist/client-cache-CCK-fCe0.d.mts +18 -0
- package/dist/{client-plugins-BvClItiL.d.mts → client-plugins-B6-07YmP.d.mts} +52 -99
- package/dist/{client-plugins-B9Sq-iMg.d.ts → client-plugins-By6MVUX-.d.ts} +52 -99
- package/dist/client-plugins.cjs +1 -1
- package/dist/client-plugins.d.mts +3 -2
- package/dist/client-plugins.d.ts +3 -2
- package/dist/client-plugins.mjs +2 -2
- package/dist/client.cjs +757 -104
- package/dist/client.d.mts +124 -16
- package/dist/client.d.ts +124 -16
- package/dist/client.mjs +28 -14
- package/dist/config.d.mts +3 -2
- package/dist/config.d.ts +3 -2
- package/dist/{devtools-S52RRRMN.mjs → devtools-XWZX6CCL.mjs} +5 -5
- package/dist/{devtools-client-EOVDBPOI.mjs → devtools-client-Z7QQA3Q2.mjs} +2 -2
- package/dist/{devtools-ui-NJKFORTG.mjs → devtools-ui-2HG5M4EL.mjs} +3 -1
- package/dist/devtools-ui-2HG5M4EL.mjs.map +1 -0
- package/dist/docs.cjs +24 -5
- package/dist/docs.mjs +5 -5
- package/dist/i18n/server.cjs +13 -2
- package/dist/i18n/server.d.mts +2 -2
- package/dist/i18n/server.d.ts +2 -2
- package/dist/i18n/server.mjs +1 -1
- package/dist/index.cjs +1578 -772
- package/dist/index.d.mts +28 -20
- package/dist/index.d.ts +28 -20
- package/dist/index.mjs +53 -33
- package/dist/index.mjs.map +1 -1
- package/dist/integration-api-BT024nuJ.d.mts +97 -0
- package/dist/integration-api-BT024nuJ.d.ts +97 -0
- package/dist/integrations.d.mts +3 -2
- package/dist/integrations.d.ts +3 -2
- package/dist/internal/build-runtime.cjs +710 -532
- package/dist/internal/build-runtime.d.mts +5 -4
- package/dist/internal/build-runtime.d.ts +5 -4
- package/dist/internal/build-runtime.mjs +15 -15
- package/dist/internal/client-runtime.cjs +1 -1
- package/dist/internal/client-runtime.mjs +2 -2
- package/dist/internal/config-runtime.cjs +4 -1
- package/dist/internal/config-runtime.d.mts +4 -3
- package/dist/internal/config-runtime.d.ts +4 -3
- package/dist/internal/config-runtime.mjs +4 -4
- package/dist/internal/product-telemetry-runtime.cjs +1 -1
- package/dist/internal/product-telemetry-runtime.mjs +1 -1
- package/dist/internal/production-runtime.cjs +29 -3
- package/dist/internal/production-runtime.d.mts +8 -7
- package/dist/internal/production-runtime.d.ts +8 -7
- package/dist/internal/production-runtime.mjs +5 -5
- package/dist/{metadata-route-yV4U6X8h.d.ts → metadata-route-8_V3UonT.d.ts} +1 -1
- package/dist/{metadata-route-p4K1l92V.d.mts → metadata-route-CWP_HjGU.d.mts} +1 -1
- package/dist/middleware.cjs +28 -2
- package/dist/middleware.d.mts +5 -4
- package/dist/middleware.d.ts +5 -4
- package/dist/middleware.mjs +4 -4
- package/dist/navigation.cjs +3 -1
- package/dist/navigation.mjs +3 -3
- package/dist/observability.cjs +27 -2
- package/dist/observability.mjs +1 -1
- package/dist/plugin.cjs +474 -334
- package/dist/plugin.d.mts +3 -2
- package/dist/plugin.d.ts +3 -2
- package/dist/plugin.mjs +12 -12
- package/dist/{production-runtime-IkB0Qj4i.d.mts → production-runtime-BGRH1dKG.d.mts} +1 -1
- package/dist/{production-runtime-0JTch4_d.d.ts → production-runtime-CdmzsDax.d.ts} +1 -1
- package/dist/query/client.cjs +11 -3
- package/dist/query/client.mjs +12 -4
- package/dist/query/client.mjs.map +1 -1
- package/dist/{render-plan-Dc8CjNI7.d.ts → render-plan-0GeHiGVZ.d.ts} +1 -1
- package/dist/{render-plan-CU31j-Jk.d.mts → render-plan-DLxJYAA5.d.mts} +1 -1
- package/dist/renderer-client.cjs +140 -26
- package/dist/renderer-client.d.mts +7 -6
- package/dist/renderer-client.d.ts +7 -6
- package/dist/renderer-client.mjs +16 -19
- package/dist/renderer-client.mjs.map +1 -1
- package/dist/{request-BXa1KY8i.d.mts → request-BCNXSXLh.d.mts} +1 -1
- package/dist/{request-CUUBujZt.d.ts → request-BstWbZ6O.d.ts} +1 -1
- package/dist/request.d.mts +4 -3
- package/dist/request.d.ts +4 -3
- package/dist/{route-Y8lfz1wF.d.ts → route-4pd-EVtw.d.ts} +45 -50
- package/dist/{route-Cq3aObmj.d.mts → route-CvEr4Uc9.d.mts} +45 -50
- package/dist/routes.cjs +27 -2
- package/dist/routes.d.mts +3 -2
- package/dist/routes.d.ts +3 -2
- package/dist/routes.mjs +4 -4
- package/dist/{runtime-j1S3sDTh.d.ts → runtime-BgDQzBiu.d.ts} +1 -0
- package/dist/{runtime-DDwvDtS4.d.mts → runtime-CV2UCV-5.d.mts} +1 -0
- package/dist/server-action-security.mjs +2 -2
- package/dist/server-fn-client.cjs +34 -2
- package/dist/server-fn-client.d.mts +6 -0
- package/dist/server-fn-client.d.ts +6 -0
- package/dist/server-fn-client.mjs +1 -1
- package/dist/server-fn.cjs +42 -4
- package/dist/server-fn.mjs +5 -5
- package/dist/server-plugins.d.mts +4 -3
- package/dist/server-plugins.d.ts +4 -3
- package/dist/server-query-client.cjs +146 -27
- package/dist/server-query-client.d.mts +3 -3
- package/dist/server-query-client.d.ts +3 -3
- package/dist/server-query-client.mjs +7 -7
- package/dist/{server-query-runtime-3zAj77yv.d.ts → server-query-runtime-DXRNhX_3.d.ts} +2 -0
- package/dist/{server-query-runtime-B50KAcj5.d.mts → server-query-runtime-aP52iuL5.d.mts} +2 -0
- package/dist/server-query.cjs +44 -5
- package/dist/server-query.d.mts +4 -0
- package/dist/server-query.d.ts +4 -0
- package/dist/server-query.mjs +7 -7
- package/dist/server.cjs +499 -355
- package/dist/server.d.mts +11 -10
- package/dist/server.d.ts +11 -10
- package/dist/server.mjs +16 -16
- package/dist/{spa-router-CyLkwst6.d.mts → spa-router-BeyAVSc6.d.mts} +1 -1
- package/dist/{spa-router-BkqGXaV_.d.ts → spa-router-COgu4txb.d.ts} +1 -1
- package/dist/testing.cjs +27 -2
- package/dist/testing.d.mts +3 -2
- package/dist/testing.d.ts +3 -2
- package/dist/testing.mjs +8 -8
- package/dist/{utils-NKR6SoNv.d.mts → utils-DL2VwDQl.d.mts} +1 -1
- package/dist/{utils-B2OHrb9F.d.ts → utils-DkU2c_1B.d.ts} +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +482 -338
- package/dist/vite.d.mts +3 -2
- package/dist/vite.d.ts +3 -2
- package/dist/vite.mjs +16 -12
- package/package.json +17 -17
- package/types/client.d.ts +87 -1
- package/dist/agent-runtime.cjs.map +0 -1
- package/dist/api/route-manager.cjs.map +0 -1
- package/dist/api/runtime.cjs.map +0 -1
- package/dist/api.cjs.map +0 -1
- package/dist/app-markdown.cjs.map +0 -1
- package/dist/cache.cjs.map +0 -1
- package/dist/chunk-3I55IGXU.mjs.map +0 -1
- package/dist/chunk-54XSGLKT.mjs.map +0 -1
- package/dist/chunk-7MABZJIM.mjs.map +0 -1
- package/dist/chunk-AXVJCMVF.mjs.map +0 -1
- package/dist/chunk-GZHKWHCH.mjs.map +0 -1
- package/dist/chunk-HHZAOTQD.mjs.map +0 -1
- package/dist/chunk-LKKMI7JG.mjs.map +0 -1
- package/dist/chunk-LZTGDH3H.mjs.map +0 -1
- package/dist/chunk-MM46HTX6.mjs.map +0 -1
- package/dist/chunk-MRVJCLYQ.mjs.map +0 -1
- package/dist/chunk-Q7GPJZCO.mjs.map +0 -1
- package/dist/chunk-RAGSHKDC.mjs.map +0 -1
- package/dist/chunk-RBRLLZL5.mjs.map +0 -1
- package/dist/chunk-SCFX4UTD.mjs.map +0 -1
- package/dist/chunk-VOUJW4FL.mjs.map +0 -1
- package/dist/chunk-WB75GIX2.mjs.map +0 -1
- package/dist/chunk-ZFNK77WN.mjs.map +0 -1
- package/dist/chunk-ZPG6SNHH.mjs.map +0 -1
- package/dist/chunk-ZRBCBOEX.mjs.map +0 -1
- package/dist/client/lifecycle.cjs.map +0 -1
- package/dist/client-cache-CopR_MaI.d.mts +0 -6
- package/dist/client-cache-Djy_TlE8.d.ts +0 -6
- package/dist/client-plugins.cjs.map +0 -1
- package/dist/client.cjs.map +0 -1
- package/dist/config.cjs.map +0 -1
- package/dist/cron.cjs.map +0 -1
- package/dist/deferred.cjs.map +0 -1
- package/dist/deployment.cjs.map +0 -1
- package/dist/devtools-ui-NJKFORTG.mjs.map +0 -1
- package/dist/docs.cjs.map +0 -1
- package/dist/env-types.cjs.map +0 -1
- package/dist/env.cjs.map +0 -1
- package/dist/environment/vite.cjs.map +0 -1
- package/dist/environment.cjs.map +0 -1
- package/dist/font.cjs.map +0 -1
- package/dist/headers.cjs.map +0 -1
- package/dist/i18n/client.cjs.map +0 -1
- package/dist/i18n/index.cjs.map +0 -1
- package/dist/i18n/server.cjs.map +0 -1
- package/dist/image/server.cjs.map +0 -1
- package/dist/image/sharp.cjs.map +0 -1
- package/dist/image.cjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/instrumentation.cjs.map +0 -1
- package/dist/integrations.cjs.map +0 -1
- package/dist/internal/build-runtime.cjs.map +0 -1
- package/dist/internal/client-runtime.cjs.map +0 -1
- package/dist/internal/config-runtime.cjs.map +0 -1
- package/dist/internal/isolated-boundary.cjs.map +0 -1
- package/dist/internal/metadata-image-runtime.cjs.map +0 -1
- package/dist/internal/product-telemetry-runtime.cjs.map +0 -1
- package/dist/internal/production-node-env.cjs.map +0 -1
- package/dist/internal/production-runtime.cjs.map +0 -1
- package/dist/markdown.cjs.map +0 -1
- package/dist/middleware.cjs.map +0 -1
- package/dist/navigation.cjs.map +0 -1
- package/dist/observability.cjs.map +0 -1
- package/dist/plugin.cjs.map +0 -1
- package/dist/query/client.cjs.map +0 -1
- package/dist/query/index.cjs.map +0 -1
- package/dist/query/parsers.cjs.map +0 -1
- package/dist/query/server.cjs.map +0 -1
- package/dist/renderer/react/client.cjs.map +0 -1
- package/dist/renderer/react/server.cjs.map +0 -1
- package/dist/renderer/react/vite.cjs.map +0 -1
- package/dist/renderer-client.cjs.map +0 -1
- package/dist/renderer.cjs.map +0 -1
- package/dist/request.cjs.map +0 -1
- package/dist/router.cjs.map +0 -1
- package/dist/routes.cjs.map +0 -1
- package/dist/server-action-security.cjs.map +0 -1
- package/dist/server-fn-client.cjs.map +0 -1
- package/dist/server-fn.cjs.map +0 -1
- package/dist/server-plugins.cjs.map +0 -1
- package/dist/server-query-client.cjs.map +0 -1
- package/dist/server-query.cjs.map +0 -1
- package/dist/server.cjs.map +0 -1
- package/dist/storage.cjs.map +0 -1
- package/dist/testing.cjs.map +0 -1
- package/dist/theme/client.cjs.map +0 -1
- package/dist/theme/index.cjs.map +0 -1
- package/dist/theme/runtime.cjs.map +0 -1
- package/dist/theme/server.cjs.map +0 -1
- package/dist/version.cjs.map +0 -1
- package/dist/vite.cjs.map +0 -1
- package/dist/workflows.cjs.map +0 -1
- /package/dist/{chunk-VV24CC42.mjs.map → chunk-35NPLKQJ.mjs.map} +0 -0
- /package/dist/{chunk-RWYRFCLG.mjs.map → chunk-4X57GXQA.mjs.map} +0 -0
- /package/dist/{chunk-MOW47IF5.mjs.map → chunk-6UYVU46O.mjs.map} +0 -0
- /package/dist/{chunk-RLGUZ3HS.mjs.map → chunk-I3OOUWO5.mjs.map} +0 -0
- /package/dist/{chunk-ODJGAWDH.mjs.map → chunk-JV7JUD7Q.mjs.map} +0 -0
- /package/dist/{chunk-Q3OX763A.mjs.map → chunk-LXDASSTE.mjs.map} +0 -0
- /package/dist/{chunk-HVG3HLQZ.mjs.map → chunk-Q7WGOOAI.mjs.map} +0 -0
- /package/dist/{chunk-3INDBMUU.mjs.map → chunk-TGDIACZT.mjs.map} +0 -0
- /package/dist/{chunk-WMAYETRD.mjs.map → chunk-TT3E2JOF.mjs.map} +0 -0
- /package/dist/{chunk-FVAM43KI.mjs.map → chunk-UMUWR5XA.mjs.map} +0 -0
- /package/dist/{devtools-S52RRRMN.mjs.map → devtools-XWZX6CCL.mjs.map} +0 -0
- /package/dist/{devtools-client-EOVDBPOI.mjs.map → devtools-client-Z7QQA3Q2.mjs.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FARM_DEVTOOLS_LAUNCH_PARAM,
|
|
3
3
|
FARM_DEVTOOLS_PATH
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-7PYVLJ4J.mjs";
|
|
5
5
|
import {
|
|
6
6
|
__name
|
|
7
7
|
} from "./chunk-CGILA3WO.mjs";
|
|
@@ -252,4 +252,4 @@ __name(generateFarmDevtoolsClientRuntime, "generateFarmDevtoolsClientRuntime");
|
|
|
252
252
|
export {
|
|
253
253
|
generateFarmDevtoolsClientRuntime
|
|
254
254
|
};
|
|
255
|
-
//# sourceMappingURL=devtools-client-
|
|
255
|
+
//# sourceMappingURL=devtools-client-Z7QQA3Q2.mjs.map
|
|
@@ -669,6 +669,7 @@ function renderFarmDevtoolsHtml(snapshot) {
|
|
|
669
669
|
.nav-item .icon { width: 13px; height: 13px; }
|
|
670
670
|
.nav-item small { color: #666; font-size: 9px; font-weight: 400; }
|
|
671
671
|
.topbar-meta { display: flex; flex: 0 0 auto; margin-left: auto; border-left: 1px solid var(--line); }
|
|
672
|
+
.deprecation-tag { display: inline-flex; align-items: center; padding: 0 10px; border-right: 1px solid var(--line); color: #d9a626; font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; white-space: nowrap; }
|
|
672
673
|
.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
674
|
.status-dot { width: 5px; height: 5px; background: #fff; box-shadow: 0 0 0 3px rgb(255 255 255 / 0.06); }
|
|
674
675
|
.status-dot-attention { background: #909090; animation: status-pulse 1.8s ease-in-out infinite; }
|
|
@@ -1178,6 +1179,7 @@ function renderFarmDevtoolsHtml(snapshot) {
|
|
|
1178
1179
|
${renderNavigationItem("raw", "Raw")}
|
|
1179
1180
|
</nav>
|
|
1180
1181
|
<div class="topbar-meta">
|
|
1182
|
+
<span class="deprecation-tag" title="The built-in dashboard is deprecated. Install @farm.js/devtools for the maintained workspace.">Deprecated · use @farm.js/devtools</span>
|
|
1181
1183
|
<span class="project-select">${escapeHtml(snapshot.project.name)} ${icon(
|
|
1182
1184
|
"chevron"
|
|
1183
1185
|
)}</span>
|
|
@@ -1346,4 +1348,4 @@ __name(renderFarmDevtoolsHtml, "renderFarmDevtoolsHtml");
|
|
|
1346
1348
|
export {
|
|
1347
1349
|
renderFarmDevtoolsHtml
|
|
1348
1350
|
};
|
|
1349
|
-
//# sourceMappingURL=devtools-ui-
|
|
1351
|
+
//# sourceMappingURL=devtools-ui-2HG5M4EL.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/devtools-ui.ts"],"sourcesContent":["import type { FarmDevtoolsDiagnostic, FarmDevtoolsRuntime, FarmDevtoolsSnapshot } from \"./devtools\";\n\ntype IconName =\n | \"activity\"\n | \"api\"\n | \"app\"\n | \"blocks\"\n | \"book\"\n | \"clock\"\n | \"chevron\"\n | \"close\"\n | \"copy\"\n | \"database\"\n | \"external\"\n | \"layers\"\n | \"overview\"\n | \"refresh\"\n | \"route\"\n | \"runtime\"\n | \"search\"\n | \"shield\"\n | \"terminal\";\n\nconst ICON_PATHS: Record<IconName, string> = {\n activity: '<path d=\"M22 12h-4l-3 9L9 3l-3 9H2\"/>',\n 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\"/>',\n 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\"/>',\n blocks:\n '<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\"/>',\n 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\"/>',\n clock: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 7v5l3 2\"/>',\n chevron: '<path d=\"m9 18 6-6-6-6\"/>',\n close: '<path d=\"M18 6 6 18M6 6l12 12\"/>',\n 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\"/>',\n database:\n '<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\"/>',\n external:\n '<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\"/>',\n layers:\n '<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\"/>',\n overview:\n '<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\"/>',\n refresh:\n '<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\"/>',\n route:\n '<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\"/>',\n runtime:\n '<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\"/>',\n search: '<circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>',\n 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\"/>',\n terminal: '<polyline points=\"4 17 10 11 4 5\"/><line x1=\"12\" x2=\"20\" y1=\"19\" y2=\"19\"/>',\n};\n\nfunction icon(name: IconName, className = \"\"): string {\n 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>`;\n}\n\nfunction escapeHtml(value: unknown): string {\n return String(value ?? \"\")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction escapeAttribute(value: unknown): string {\n return escapeHtml(value).replace(/`/g, \"`\");\n}\n\nfunction renderBadge(value: string, tone = \"neutral\"): string {\n return `<span class=\"badge badge-${tone}\">${escapeHtml(value)}</span>`;\n}\n\nfunction renderRuntime(runtime: FarmDevtoolsRuntime | undefined): string {\n if (!runtime) return '<span class=\"muted\">Inherited</span>';\n const details = [\n runtime.regions?.length ? runtime.regions.join(\", \") : null,\n runtime.maxDuration ? `${runtime.maxDuration}s` : null,\n ].filter(Boolean);\n return `<span class=\"runtime-value\">${renderBadge(runtime.runtime, runtime.runtime)}${\n details.length ? `<small>${escapeHtml(details.join(\" / \"))}</small>` : \"\"\n }</span>`;\n}\n\nfunction renderEmpty(title: string, detail: string): string {\n return `<div class=\"empty-state\">\n ${icon(\"activity\")}\n <strong>${escapeHtml(title)}</strong>\n <span>${escapeHtml(detail)}</span>\n </div>`;\n}\n\nfunction renderFilter(id: string, placeholder: string): string {\n return `<label class=\"filter-control\">\n ${icon(\"search\")}\n <span class=\"sr-only\">${escapeHtml(placeholder)}</span>\n <input type=\"search\" placeholder=\"${escapeAttribute(placeholder)}\" data-filter=\"${escapeAttribute(id)}\" autocomplete=\"off\">\n <kbd>/</kbd>\n </label>`;\n}\n\nfunction renderDiagnostics(diagnostics: FarmDevtoolsDiagnostic[]): string {\n if (diagnostics.length === 0) {\n return `<div class=\"diagnostic diagnostic-ready\">\n <span class=\"diagnostic-mark\">${icon(\"shield\")}</span>\n <div><strong>Framework checks passed</strong><p>Routes and configured systems are internally consistent.</p></div>\n ${renderBadge(\"ready\", \"ready\")}\n </div>`;\n }\n\n return diagnostics\n .map(\n (diagnostic) => `<article class=\"diagnostic diagnostic-${diagnostic.severity}\">\n <span class=\"diagnostic-mark\">${icon(\n diagnostic.severity === \"error\" ? \"activity\" : \"shield\",\n )}</span>\n <div>\n <span class=\"diagnostic-code\">${escapeHtml(diagnostic.code)}</span>\n <strong>${escapeHtml(diagnostic.title)}</strong>\n <p>${escapeHtml(diagnostic.message)}</p>\n ${diagnostic.action ? `<small>${escapeHtml(diagnostic.action)}</small>` : \"\"}\n </div>\n ${renderBadge(diagnostic.severity, diagnostic.severity)}\n </article>`,\n )\n .join(\"\");\n}\n\nfunction renderSystemRows(snapshot: FarmDevtoolsSnapshot): string {\n const rows = [\n [\"Integrations\", snapshot.counts.integrations, \"Configured product adapters\", \"blocks\"],\n [\"Storage\", snapshot.counts.storageMounts, \"Root driver and named mounts\", \"database\"],\n [\"Cron\", snapshot.counts.cronJobs, \"Portable scheduled API routes\", \"clock\"],\n [\"Workflows\", snapshot.counts.workflows, \"Discovered workflow modules\", \"activity\"],\n [\"Docs\", snapshot.docs.enabled ? \"On\" : \"Off\", snapshot.docs.entry || \"No docs route\", \"book\"],\n ] as const;\n\n return rows\n .map(\n ([label, value, detail, rowIcon]) => `<div class=\"system-row\">\n <span class=\"system-icon\">${icon(rowIcon)}</span>\n <div><strong>${escapeHtml(label)}</strong><small>${escapeHtml(detail)}</small></div>\n <span class=\"system-value\">${escapeHtml(value)}</span>\n </div>`,\n )\n .join(\"\");\n}\n\nfunction renderIntegrations(snapshot: FarmDevtoolsSnapshot): string {\n if (snapshot.integrations.length === 0) {\n return renderEmpty(\n \"No integrations configured\",\n \"Register product systems through farm.config.ts when the app needs them.\",\n );\n }\n\n return `<div class=\"table-scroll\"><table>\n <thead><tr><th>Registry key</th><th>Adapter</th><th>Routes</th><th>Runtime surface</th></tr></thead>\n <tbody>${snapshot.integrations\n .map(\n (integration) => `<tr>\n <td><code>${escapeHtml(integration.key)}</code><small class=\"cell-detail\">${escapeHtml(\n integration.category,\n )}</small></td>\n <td>${escapeHtml(integration.type)}</td>\n <td>${\n integration.routes.length\n ? integration.routes\n .map(\n (route) =>\n `<span class=\"route-operation\"><code>${escapeHtml(\n route.path,\n )}</code><small>${escapeHtml(route.methods.join(\", \"))}</small></span>`,\n )\n .join(\"\")\n : '<span class=\"muted\">No HTTP routes</span>'\n }</td>\n <td><span class=\"runtime-facts\">${renderBadge(\n integration.serverRuntime ? \"server\" : \"platform\",\n )}<span>${integration.middlewareCount} middleware</span><span>${\n integration.providerCount\n } providers</span><span>${integration.schemaModelCount} models</span></span></td>\n </tr>`,\n )\n .join(\"\")}</tbody>\n </table></div>`;\n}\n\nfunction renderMiddleware(snapshot: FarmDevtoolsSnapshot): string {\n if (snapshot.middleware.length === 0) {\n return renderEmpty(\"No middleware configured\", \"Requests currently enter routes directly.\");\n }\n return `<div class=\"table-scroll\"><table>\n <thead><tr><th>Path</th><th>Source</th><th>Handlers</th><th>File</th></tr></thead>\n <tbody>${snapshot.middleware\n .map(\n (entry) =>\n `<tr><td><code>${escapeHtml(entry.path)}</code></td><td>${renderBadge(\n entry.source,\n )}</td><td>${entry.handlerCount}</td><td class=\"file-cell\">${escapeHtml(\n entry.filePath,\n )}</td></tr>`,\n )\n .join(\"\")}</tbody>\n </table></div>`;\n}\n\nfunction renderStorage(snapshot: FarmDevtoolsSnapshot): string {\n return `<div class=\"table-scroll\"><table>\n <thead><tr><th>Mount</th><th>Driver</th><th>State</th></tr></thead>\n <tbody>${snapshot.storage\n .map(\n (entry) =>\n `<tr><td><code>${escapeHtml(entry.mount)}</code></td><td>${escapeHtml(\n entry.driver,\n )}</td><td>${renderBadge(entry.default ? \"default\" : \"configured\")}</td></tr>`,\n )\n .join(\"\")}</tbody>\n </table></div>`;\n}\n\nfunction renderCron(snapshot: FarmDevtoolsSnapshot): string {\n if (snapshot.cron.length === 0) {\n return renderEmpty(\n \"No cron routes configured\",\n \"Add named schedules under cron in farm.config.ts.\",\n );\n }\n return `<div class=\"table-scroll\"><table>\n <thead><tr><th>Name</th><th>Schedule (UTC)</th><th>Target</th></tr></thead>\n <tbody>${snapshot.cron\n .map(\n (job) =>\n `<tr><td><code>${escapeHtml(job.name)}</code></td><td>${job.schedule\n .map((schedule) => `<code class=\"schedule\">${escapeHtml(schedule)}</code>`)\n .join(\"\")}</td><td><code>${escapeHtml(job.path)}</code></td></tr>`,\n )\n .join(\"\")}</tbody>\n </table></div>`;\n}\n\nfunction renderWorkflows(snapshot: FarmDevtoolsSnapshot): string {\n if (snapshot.workflows.length === 0) {\n return renderEmpty(\n \"No workflows discovered\",\n \"Workflow directories are enabled but currently empty.\",\n );\n }\n return `<div class=\"table-scroll\"><table>\n <thead><tr><th>Workflow</th><th>Schedule</th><th>Endpoint</th><th>Source</th></tr></thead>\n <tbody>${snapshot.workflows\n .map(\n (workflow) =>\n `<tr><td><code>${escapeHtml(workflow.id)}</code></td><td>${\n workflow.schedule.length\n ? workflow.schedule.map((schedule) => `<code>${escapeHtml(schedule)}</code>`).join(\"\")\n : '<span class=\"muted\">Manual</span>'\n }</td><td><code>${escapeHtml(workflow.routePath)}</code></td><td class=\"file-cell\">${escapeHtml(\n workflow.filePath,\n )}</td></tr>`,\n )\n .join(\"\")}</tbody>\n </table></div>`;\n}\n\nfunction renderFeatureMatrix(snapshot: FarmDevtoolsSnapshot): string {\n const features = [\n [\"OpenAPI\", snapshot.features.openapi],\n [\"Markdown\", snapshot.features.markdown],\n [\"Server components\", snapshot.features.serverComponents],\n [\"Server actions\", snapshot.features.serverActions],\n [\"Optimized boundary\", snapshot.features.optimizedBoundary],\n [\"Observability\", snapshot.features.observability],\n ] as const;\n return `<div class=\"feature-matrix\">${features\n .map(\n ([label, enabled]) =>\n `<div><span>${escapeHtml(label)}</span>${renderBadge(\n enabled ? \"enabled\" : \"disabled\",\n enabled ? \"ready\" : \"neutral\",\n )}</div>`,\n )\n .join(\"\")}</div>`;\n}\n\nfunction renderEnvironment(snapshot: FarmDevtoolsSnapshot): string {\n const renderKeys = (keys: string[]) =>\n keys.length\n ? `<div class=\"key-list\">${keys.map((key) => `<code>${escapeHtml(key)}</code>`).join(\"\")}</div>`\n : '<span class=\"muted\">No validated keys</span>';\n return `<div class=\"environment-grid\">\n <div><span class=\"mini-label\">Server keys</span>${renderKeys(snapshot.environment.server)}</div>\n <div><span class=\"mini-label\">Public keys</span>${renderKeys(snapshot.environment.public)}</div>\n </div>`;\n}\n\nfunction renderLayers(snapshot: FarmDevtoolsSnapshot): string {\n if (snapshot.layers.length === 0) {\n return renderEmpty(\n \"No layers extended\",\n \"This project owns its complete route and config surface.\",\n );\n }\n return `<div class=\"layer-list\">${snapshot.layers\n .map(\n (layer) =>\n `<div><span>${icon(\"layers\")}<strong>${escapeHtml(\n layer.name,\n )}</strong></span><code>${escapeHtml(layer.source)}</code><small>${escapeHtml(\n layer.srcDir,\n )}</small></div>`,\n )\n .join(\"\")}</div>`;\n}\n\ntype InspectorEntry = {\n id: string;\n label: string;\n description: string;\n icon: IconName;\n value?: string | number;\n searchValue?: string;\n detailMeta?: string;\n content: string;\n};\n\nfunction renderPropertyList(entries: Array<[label: string, value: string]>): string {\n return `<dl class=\"property-list\">${entries\n .map(([label, value]) => `<div><dt>${escapeHtml(label)}</dt><dd>${value}</dd></div>`)\n .join(\"\")}</dl>`;\n}\n\nfunction renderDetailIntro(\n label: string,\n title: string,\n description: string,\n detailIcon: IconName,\n): string {\n return `<div class=\"detail-intro\">\n <span class=\"detail-icon\">${icon(detailIcon)}</span>\n <div><span class=\"mini-label\">${escapeHtml(label)}</span><h2>${escapeHtml(\n title,\n )}</h2><p>${escapeHtml(description)}</p></div>\n </div>`;\n}\n\nfunction renderInspector(\n scope: string,\n title: string,\n entries: InspectorEntry[],\n filterPlaceholder?: string,\n): string {\n if (entries.length === 0) {\n return `<div class=\"single-pane\">\n <header class=\"pane-header\"><strong>${escapeHtml(title)}</strong><span>0 items</span></header>\n ${renderEmpty(`No ${title.toLowerCase()} found`, \"Farm has no runtime data for this surface yet.\")}\n </div>`;\n }\n\n return `<div class=\"split-view\" data-inspector=\"${escapeAttribute(scope)}\">\n <section class=\"pane pane-list\">\n <header class=\"pane-header\"><strong>${escapeHtml(title)}</strong><span>${entries.length} ${\n entries.length === 1 ? \"item\" : \"items\"\n }</span></header>\n ${\n filterPlaceholder\n ? `<div class=\"pane-tools\">${renderFilter(scope, filterPlaceholder)}</div>`\n : \"\"\n }\n <div class=\"pane-scroll inspector-list\" data-filter-rows=\"${escapeAttribute(scope)}\">\n ${entries\n .map(\n (\n entry,\n index,\n ) => `<button type=\"button\" class=\"inspector-row\" data-detail-trigger=\"${escapeAttribute(\n scope,\n )}\" data-detail-id=\"${escapeAttribute(entry.id)}\" data-search-value=\"${escapeAttribute(\n entry.searchValue || `${entry.label} ${entry.description}`,\n )}\" aria-selected=\"${index === 0 ? \"true\" : \"false\"}\">\n <span class=\"inspector-row-copy\"><strong>${escapeHtml(\n entry.label,\n )}</strong><small>${escapeHtml(entry.description)}</small></span>\n ${entry.value === undefined ? \"\" : `<span class=\"inspector-row-value\">${escapeHtml(entry.value)}</span>`}\n </button>`,\n )\n .join(\"\")}\n <div class=\"filtered-empty\" data-filter-empty=\"${escapeAttribute(\n scope,\n )}\" hidden>No items match this filter.</div>\n </div>\n </section>\n <section class=\"pane pane-detail\">\n ${entries\n .map(\n (entry, index) => `<article class=\"detail-panel\" data-detail-panel=\"${escapeAttribute(\n scope,\n )}\" data-detail-id=\"${escapeAttribute(entry.id)}\"${index === 0 ? \"\" : \" hidden\"}>\n <header class=\"pane-header\"><strong>${escapeHtml(entry.label)}</strong><span>${escapeHtml(\n entry.detailMeta || entry.description,\n )}</span></header>\n <div class=\"detail-scroll\">${entry.content}</div>\n </article>`,\n )\n .join(\"\")}\n </section>\n </div>`;\n}\n\nfunction renderJson(value: unknown): string {\n return `<pre class=\"json-viewer\"><code>${escapeHtml(JSON.stringify(value, null, 2))}</code></pre>`;\n}\n\nfunction renderOverviewInspector(\n snapshot: FarmDevtoolsSnapshot,\n healthLabel: string,\n generatedTime: string,\n): string {\n const scheduledCount = snapshot.counts.cronJobs + snapshot.counts.workflows;\n return renderInspector(\"overview\", \"Project\", [\n {\n id: \"diagnostics\",\n label: \"Diagnostics\",\n description: \"Actionable framework checks\",\n icon: \"shield\",\n value: snapshot.counts.diagnostics,\n detailMeta: healthLabel,\n content: `${renderDetailIntro(\n \"Project health\",\n healthLabel,\n snapshot.diagnostics.length\n ? \"Farm found configuration details that deserve attention before production.\"\n : \"Routes and configured systems are internally consistent.\",\n \"shield\",\n )}<div class=\"detail-section\">${renderDiagnostics(snapshot.diagnostics)}</div>`,\n },\n {\n id: \"project\",\n label: snapshot.project.name,\n description: snapshot.project.root,\n icon: \"app\",\n value: snapshot.project.srcDir,\n detailMeta: \"Active project\",\n content: `${renderDetailIntro(\n \"Active project\",\n snapshot.project.name,\n \"The application currently resolved by the Farm development server.\",\n \"app\",\n )}${renderPropertyList([\n [\"Root\", `<code>${escapeHtml(snapshot.project.root)}</code>`],\n [\"Source directory\", `<code>${escapeHtml(snapshot.project.srcDir)}</code>`],\n [\"Base path\", `<code>${escapeHtml(snapshot.project.basePath)}</code>`],\n [\"Deployment ID\", `<code>${escapeHtml(snapshot.project.deploymentId)}</code>`],\n [\"Snapshot\", `<span class=\"mono\">${escapeHtml(generatedTime)}</span>`],\n ])}`,\n },\n {\n id: \"routes\",\n label: \"Route surface\",\n description: \"Pages, boundaries, and typed endpoints\",\n icon: \"route\",\n value: snapshot.counts.pages + snapshot.counts.apiRoutes,\n detailMeta: `${snapshot.counts.pages} pages / ${snapshot.counts.apiRoutes} API`,\n content: `${renderDetailIntro(\n \"Application routing\",\n `${snapshot.counts.pages + snapshot.counts.apiRoutes} registered routes`,\n \"Farm resolves page boundaries and server endpoints from the same application tree.\",\n \"route\",\n )}${renderPropertyList([\n [\"Pages\", `<strong>${snapshot.counts.pages}</strong>`],\n [\"Layouts\", `<strong>${snapshot.counts.layouts}</strong>`],\n [\"Loading boundaries\", `<strong>${snapshot.counts.loadingBoundaries}</strong>`],\n [\"Error boundaries\", `<strong>${snapshot.counts.errorBoundaries}</strong>`],\n [\"API routes\", `<strong>${snapshot.counts.apiRoutes}</strong>`],\n ])}`,\n },\n {\n id: \"systems\",\n label: \"Connected systems\",\n description: \"Integrations, storage, and request layers\",\n icon: \"blocks\",\n value: snapshot.counts.integrations,\n detailMeta: \"Configured surfaces\",\n content: `${renderDetailIntro(\n \"System map\",\n \"Application services\",\n \"Product integrations and framework services visible to the running application.\",\n \"blocks\",\n )}<div class=\"detail-section\">${renderSystemRows(snapshot)}</div>`,\n },\n {\n id: \"deployment\",\n label: \"Runtime\",\n description: `${snapshot.deployment.target} / ${snapshot.deployment.preset}`,\n icon: \"runtime\",\n value: scheduledCount,\n detailMeta: \"Deployment controls\",\n content: `${renderDetailIntro(\n \"Deployment runtime\",\n snapshot.deployment.target,\n \"The resolved deployment adapter, output contract, and enabled framework surfaces.\",\n \"runtime\",\n )}${renderPropertyList([\n [\"Target\", `<code>${escapeHtml(snapshot.deployment.target)}</code>`],\n [\"Nitro preset\", `<code>${escapeHtml(snapshot.deployment.preset)}</code>`],\n [\n \"Output\",\n `<code>${escapeHtml(snapshot.deployment.outputDir || \"Framework default\")}</code>`,\n ],\n [\"Scheduled work\", `<strong>${scheduledCount}</strong>`],\n ])}<div class=\"detail-section\">${renderFeatureMatrix(snapshot)}</div>`,\n },\n ]);\n}\n\nfunction renderRoutesInspector(snapshot: FarmDevtoolsSnapshot): string {\n return renderInspector(\n \"routes\",\n \"Routes\",\n snapshot.routes.map((route, index) => ({\n id: `route-${index}`,\n label: route.pattern,\n description: route.filePath,\n icon: \"route\",\n value: route.kind,\n searchValue: `${route.kind} ${route.pattern} ${route.filePath} ${\n route.runtime?.runtime || \"inherited\"\n }`,\n detailMeta: route.kind,\n content: `${renderDetailIntro(\n `${route.kind} route`,\n route.pattern,\n route.filePath,\n \"route\",\n )}${renderPropertyList([\n [\"Kind\", renderBadge(route.kind, route.kind)],\n [\"Pattern\", `<code>${escapeHtml(route.pattern)}</code>`],\n [\"Runtime\", renderRuntime(route.runtime)],\n [\"Source\", `<code>${escapeHtml(route.filePath)}</code>`],\n ])}`,\n })),\n \"Filter routes or files\",\n );\n}\n\nfunction renderApiInspector(snapshot: FarmDevtoolsSnapshot): string {\n return renderInspector(\n \"api\",\n \"API routes\",\n snapshot.apiRoutes.map((route, index) => ({\n id: `api-${index}`,\n label: route.path,\n description: route.filePath,\n icon: \"api\",\n value: route.methods.length,\n searchValue: `${route.path} ${route.methods.join(\" \")} ${route.filePath} ${\n route.runtime.runtime\n }`,\n detailMeta: route.methods.join(\" / \"),\n content: `${renderDetailIntro(\n \"Server endpoint\",\n route.path,\n route.filePath,\n \"api\",\n )}${renderPropertyList([\n [\n \"Methods\",\n `<span class=\"method-list\">${route.methods\n .map((method) => renderBadge(method, \"method\"))\n .join(\"\")}</span>`,\n ],\n [\"Runtime\", renderRuntime(route.runtime)],\n [\"Source\", `<code>${escapeHtml(route.filePath)}</code>`],\n ])}`,\n })),\n \"Filter endpoints or methods\",\n );\n}\n\nfunction renderSystemsInspector(snapshot: FarmDevtoolsSnapshot): string {\n return renderInspector(\"systems\", \"Systems\", [\n {\n id: \"integrations\",\n label: \"Integrations\",\n description: \"Configured product adapters\",\n icon: \"blocks\",\n value: snapshot.integrations.length,\n content: renderIntegrations(snapshot),\n },\n {\n id: \"middleware\",\n label: \"Middleware\",\n description: \"Request layers and source modules\",\n icon: \"shield\",\n value: snapshot.middleware.length,\n content: renderMiddleware(snapshot),\n },\n {\n id: \"storage\",\n label: \"Storage mounts\",\n description: \"Root driver and named namespaces\",\n icon: \"database\",\n value: snapshot.storage.length,\n content: renderStorage(snapshot),\n },\n {\n id: \"docs\",\n label: \"Documentation\",\n description: snapshot.docs.entry || \"No docs route\",\n icon: \"book\",\n value: snapshot.docs.enabled ? \"on\" : \"off\",\n content: `${renderDetailIntro(\n \"Documentation\",\n snapshot.docs.enabled ? \"Docs enabled\" : \"Docs disabled\",\n \"Farm can serve application documentation from the same development runtime.\",\n \"book\",\n )}${renderPropertyList([\n [\"State\", renderBadge(snapshot.docs.enabled ? \"enabled\" : \"disabled\")],\n [\"Entry\", `<code>${escapeHtml(snapshot.docs.entry || \"Not configured\")}</code>`],\n ])}`,\n },\n ]);\n}\n\nfunction renderRuntimeInspector(snapshot: FarmDevtoolsSnapshot): string {\n return renderInspector(\"runtime\", \"Runtime\", [\n {\n id: \"deployment\",\n label: \"Deployment\",\n description: `${snapshot.deployment.target} / ${snapshot.deployment.preset}`,\n icon: \"runtime\",\n content: `${renderDetailIntro(\n \"Deployment target\",\n snapshot.deployment.target,\n \"Resolved platform adapter and build output for this application.\",\n \"runtime\",\n )}${renderPropertyList([\n [\"Target\", `<code>${escapeHtml(snapshot.deployment.target)}</code>`],\n [\"Nitro preset\", `<code>${escapeHtml(snapshot.deployment.preset)}</code>`],\n [\n \"Output directory\",\n `<code>${escapeHtml(snapshot.deployment.outputDir || \"Framework default\")}</code>`,\n ],\n ])}`,\n },\n {\n id: \"cron\",\n label: \"Cron routes\",\n description: \"Portable scheduled API routes\",\n icon: \"clock\",\n value: snapshot.cron.length,\n content: renderCron(snapshot),\n },\n {\n id: \"workflows\",\n label: \"Workflows\",\n description: \"Discovered workflow modules\",\n icon: \"activity\",\n value: snapshot.workflows.length,\n content: renderWorkflows(snapshot),\n },\n {\n id: \"features\",\n label: \"Framework features\",\n description: \"Resolved configuration switches\",\n icon: \"blocks\",\n content: renderFeatureMatrix(snapshot),\n },\n {\n id: \"environment\",\n label: \"Environment\",\n description: \"Validated key names only\",\n icon: \"shield\",\n value: snapshot.environment.server.length + snapshot.environment.public.length,\n content: renderEnvironment(snapshot),\n },\n {\n id: \"layers\",\n label: \"Layers\",\n description: \"Extended source roots\",\n icon: \"layers\",\n value: snapshot.layers.length,\n content: renderLayers(snapshot),\n },\n ]);\n}\n\nfunction renderRawInspector(snapshot: FarmDevtoolsSnapshot): string {\n return renderInspector(\"raw\", \"Raw snapshot\", [\n {\n id: \"snapshot\",\n label: \"Snapshot\",\n description: \"Complete serialized runtime state\",\n icon: \"terminal\",\n content: renderJson(snapshot),\n },\n {\n id: \"routes\",\n label: \"Routes\",\n description: \"Pages and route boundaries\",\n icon: \"route\",\n value: snapshot.routes.length,\n content: renderJson(snapshot.routes),\n },\n {\n id: \"api\",\n label: \"API\",\n description: \"Typed server endpoints\",\n icon: \"api\",\n value: snapshot.apiRoutes.length,\n content: renderJson(snapshot.apiRoutes),\n },\n {\n id: \"systems\",\n label: \"Systems\",\n description: \"Integrations, middleware, and storage\",\n icon: \"blocks\",\n content: renderJson({\n integrations: snapshot.integrations,\n middleware: snapshot.middleware,\n storage: snapshot.storage,\n }),\n },\n {\n id: \"diagnostics\",\n label: \"Diagnostics\",\n description: \"Framework health findings\",\n icon: \"shield\",\n value: snapshot.diagnostics.length,\n content: renderJson(snapshot.diagnostics),\n },\n ]);\n}\n\nfunction renderNavigationItem(view: string, label: string): string {\n return `<button type=\"button\" class=\"nav-item\" data-view-trigger=\"${view}\" aria-selected=\"false\">\n <span>${escapeHtml(label)}</span>\n </button>`;\n}\n\nexport function renderFarmDevtoolsHtml(snapshot: FarmDevtoolsSnapshot): string {\n const healthLabel =\n snapshot.health === \"ready\" ? \"Ready\" : snapshot.health === \"error\" ? \"Error\" : \"Attention\";\n const generatedTime = new Date(snapshot.generatedAt).toLocaleTimeString(\"en-US\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false,\n });\n\n return `<!doctype html>\n<html lang=\"en\" class=\"devtools-frame\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta name=\"color-scheme\" content=\"dark\">\n <title>Farm Devtools - ${escapeHtml(snapshot.project.name)}</title>\n <style>\n :root {\n color-scheme: dark;\n --background: #000;\n --surface: #050505;\n --surface-raised: #090909;\n --foreground: #f5f5f5;\n --muted: #858585;\n --muted-strong: #a8a8a8;\n --line: rgb(255 255 255 / 0.12);\n --line-soft: rgb(255 255 255 / 0.065);\n --line-strong: rgb(255 255 255 / 0.22);\n --font-sans: \"Geist Sans\", Geist, Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n --font-mono: \"Geist Mono\", \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n }\n * { box-sizing: border-box; }\n html { min-width: 320px; min-height: 100%; background: var(--background); }\n 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; }\n button, input { color: inherit; font: inherit; letter-spacing: 0; }\n button, a { -webkit-tap-highlight-color: transparent; }\n button { cursor: pointer; }\n a { color: inherit; }\n [hidden] { display: none !important; }\n 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; }\n .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }\n .icon { width: 16px; height: 16px; flex: 0 0 auto; }\n .stage { display: grid; min-height: 100vh; min-height: 100dvh; place-items: center; padding: 20px; }\n .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); }\n .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); }\n .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; }\n .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; }\n .brand-slash { color: #555; }\n .brand-product { color: var(--muted-strong); }\n .tabbar { display: flex; min-width: 0; flex: 1 1 auto; align-items: stretch; overflow-x: auto; scrollbar-width: none; }\n .tabbar::-webkit-scrollbar { display: none; }\n .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; }\n .nav-item::after { position: absolute; right: 10px; bottom: -1px; left: 10px; height: 1px; background: transparent; content: \"\"; }\n .nav-item:hover, .nav-item:focus-visible { background: rgb(255 255 255 / 0.035); color: var(--foreground); outline: none; }\n .nav-item[aria-selected=\"true\"] { color: #fff; }\n .nav-item[aria-selected=\"true\"]::after { background: #fff; }\n .nav-item .icon { width: 13px; height: 13px; }\n .nav-item small { color: #666; font-size: 9px; font-weight: 400; }\n .topbar-meta { display: flex; flex: 0 0 auto; margin-left: auto; border-left: 1px solid var(--line); }\n .deprecation-tag { display: inline-flex; align-items: center; padding: 0 10px; border-right: 1px solid var(--line); color: #d9a626; font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; white-space: nowrap; }\n .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; }\n .status-dot { width: 5px; height: 5px; background: #fff; box-shadow: 0 0 0 3px rgb(255 255 255 / 0.06); }\n .status-dot-attention { background: #909090; animation: status-pulse 1.8s ease-in-out infinite; }\n .status-dot-error { background: transparent; border: 1px solid #fff; }\n .topbar-actions { display: flex; }\n .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; }\n .action:hover, .action:focus-visible { background: #fff; color: #000; outline: none; }\n .action[data-copied=\"true\"] { background: #fff; color: #000; }\n .workspace { min-height: 0; flex: 1 1 auto; }\n .eyebrow { display: block; color: var(--muted); font-size: 9px; font-weight: 400; text-transform: uppercase; }\n .content { height: 100%; min-width: 0; }\n .view { height: 100%; min-width: 0; overflow: hidden; }\n .split-view { display: grid; height: 100%; min-height: 0; grid-template-columns: clamp(230px, 28%, 300px) minmax(0, 1fr); }\n .pane { min-width: 0; min-height: 0; overflow: hidden; background: var(--background); }\n .pane-list { display: flex; flex-direction: column; border-right: 1px solid var(--line); }\n .pane-detail { position: relative; }\n .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); }\n .pane-header strong { overflow: hidden; font-size: 11px; font-weight: 520; text-overflow: ellipsis; white-space: nowrap; }\n .pane-header span { overflow: hidden; color: var(--muted); font-family: var(--font-mono); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }\n .pane-tools { border-bottom: 1px solid var(--line); }\n .pane-tools .filter-control { width: 100%; min-height: 36px; border: 0; }\n .pane-scroll, .detail-scroll { min-height: 0; overflow: auto; overscroll-behavior: contain; }\n .pane-scroll { flex: 1 1 auto; }\n .inspector-list { scrollbar-width: thin; scrollbar-color: var(--line-strong) transparent; }\n .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; }\n .inspector-row::before { position: absolute; inset: 0 auto 0 0; width: 1px; background: transparent; content: \"\"; }\n .inspector-row:hover, .inspector-row:focus-visible { background: rgb(255 255 255 / 0.035); color: var(--foreground); outline: none; }\n .inspector-row[aria-selected=\"true\"] { background: rgb(255 255 255 / 0.075); color: #fff; }\n .inspector-row[aria-selected=\"true\"]::before { background: #fff; }\n .inspector-row-icon { display: grid; color: var(--muted-strong); place-items: center; }\n .inspector-row-icon .icon { width: 14px; height: 14px; }\n .inspector-row-copy { min-width: 0; }\n .inspector-row-copy strong, .inspector-row-copy small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .inspector-row-copy strong { color: inherit; font-size: 11px; font-weight: 520; }\n .inspector-row-copy small { margin-top: 3px; color: var(--muted); font-family: var(--font-mono); font-size: 9px; }\n .inspector-row-value { color: var(--muted-strong); font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; }\n .detail-panel { display: flex; height: 100%; min-height: 0; flex-direction: column; }\n .detail-scroll { flex: 1 1 auto; }\n .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); }\n .detail-icon { display: grid; width: 32px; height: 32px; border: 1px solid var(--line); color: var(--muted-strong); place-items: center; }\n .detail-icon .icon { width: 15px; height: 15px; }\n .detail-intro .mini-label { margin: 1px 0 8px; }\n .detail-intro h2 { margin: 0; overflow-wrap: anywhere; font-size: 20px; font-weight: 530; line-height: 1.2; }\n .detail-intro p { max-width: 680px; margin: 8px 0 0; color: var(--muted); font-size: 11px; line-height: 1.55; }\n .detail-section { border-top: 1px solid var(--line); }\n .detail-intro + .detail-section { border-top: 0; }\n .property-list { margin: 0; }\n .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); }\n .property-list dt { color: var(--muted); font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; }\n .property-list dd { min-width: 0; margin: 0; overflow-wrap: anywhere; color: var(--muted-strong); font-size: 11px; }\n .property-list dd > code { color: var(--foreground); font-size: 10px; }\n .single-pane { height: 100%; min-height: 0; }\n .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; }\n .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); }\n .diagnostic:last-child { border-bottom: 0; }\n .diagnostic-mark { display: grid; width: 28px; height: 28px; place-items: center; border: 1px solid var(--line); color: var(--muted-strong); }\n .diagnostic-code { display: block; margin-bottom: 5px; color: var(--muted); font-size: 9px; }\n .diagnostic strong { display: block; font-size: 12px; font-weight: 540; }\n .diagnostic p { margin: 5px 0 0; color: var(--muted-strong); font-size: 11px; line-height: 1.5; }\n .diagnostic small { display: block; margin-top: 6px; color: var(--muted); font-size: 10px; line-height: 1.5; }\n .diagnostic-warning { box-shadow: inset 1px 0 var(--line-strong); }\n .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); }\n .system-row:last-child { border-bottom: 0; }\n .system-icon { display: grid; width: 28px; height: 28px; place-items: center; color: var(--muted-strong); }\n .system-row strong, .system-row small { display: block; }\n .system-row strong { font-size: 12px; font-weight: 520; }\n .system-row small { margin-top: 3px; overflow: hidden; color: var(--muted); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }\n .system-value { font-family: var(--font-mono); font-size: 11px; }\n .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); }\n .filter-control:focus-within { border-color: var(--line-strong); color: #fff; }\n .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; }\n .filter-control input::placeholder { color: #666; }\n .filter-control kbd { padding: 1px 5px; border: 1px solid var(--line); color: var(--muted); font-size: 9px; }\n .table-scroll { width: 100%; overflow-x: auto; }\n table { width: 100%; border-collapse: collapse; table-layout: auto; }\n 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; }\n 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; }\n tr:last-child td { border-bottom: 0; }\n tbody tr { transition: background-color 120ms ease-out; }\n tbody tr:hover { background: rgb(255 255 255 / 0.035); }\n td code { color: var(--foreground); font-size: 10px; white-space: nowrap; }\n .file-cell { max-width: 420px; overflow: hidden; font-family: var(--font-mono); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }\n .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; }\n .badge-ready, .badge-page, .badge-node { border-color: var(--line-strong); color: #fff; }\n .badge-warning, .badge-attention, .badge-edge { border-style: dashed; color: #fff; }\n .badge-error { background: #fff; color: #000; }\n .badge-method { min-width: 36px; justify-content: center; border-color: var(--line-soft); color: #d0d0d0; }\n .method-list, .runtime-value, .runtime-facts { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; }\n .runtime-value small, .runtime-facts span { color: var(--muted); font-family: var(--font-mono); font-size: 9px; }\n .cell-detail { display: block; margin-top: 4px; color: var(--muted); font-family: var(--font-mono); font-size: 9px; }\n .route-operation { display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n .route-operation + .route-operation { margin-top: 5px; }\n .route-operation small { color: var(--muted); font-family: var(--font-mono); font-size: 9px; white-space: nowrap; }\n .schedule { display: block; }\n .schedule + .schedule { margin-top: 4px; }\n .muted { color: var(--muted); }\n .empty-state { display: grid; min-height: 156px; place-items: center; align-content: center; gap: 7px; padding: 24px; color: var(--muted); text-align: center; }\n .empty-state strong { color: var(--muted-strong); font-size: 12px; font-weight: 520; }\n .empty-state span { max-width: 420px; font-size: 10px; line-height: 1.5; }\n .filtered-empty { padding: 24px; color: var(--muted); font-family: var(--font-mono); font-size: 10px; text-align: center; }\n .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); }\n .feature-matrix > div:last-child { border-bottom: 0; }\n .feature-matrix span:first-child { font-size: 11px; }\n .environment-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }\n .environment-grid > div { min-height: 128px; padding: 16px; }\n .environment-grid > div + div { border-left: 1px solid var(--line); }\n .mini-label { display: block; margin-bottom: 12px; color: var(--muted); font-size: 9px; text-transform: uppercase; }\n .key-list { display: flex; flex-wrap: wrap; gap: 6px; }\n .key-list code { padding: 4px 6px; border: 1px solid var(--line-soft); color: var(--muted-strong); font-size: 9px; }\n .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); }\n .layer-list > div:last-child { border-bottom: 0; }\n .layer-list span { display: flex; align-items: center; gap: 8px; }\n .layer-list strong { font-size: 11px; font-weight: 520; }\n .layer-list code, .layer-list small { color: var(--muted); font-size: 9px; }\n .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; }\n .statusbar span { display: flex; align-items: center; gap: 7px; }\n @keyframes status-pulse { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }\n @media (max-width: 1100px) {\n .topbar-status { display: none; }\n }\n @media (max-width: 840px) {\n .stage { display: block; padding: 0; }\n .shell { width: 100%; height: 100dvh; min-height: 0; border: 0; }\n .topbar { flex-wrap: wrap; }\n .brand { min-width: auto; height: 40px; border-right: 0; }\n .brand-product, .brand-slash { display: none; }\n .tabbar { order: 3; width: 100%; flex-basis: 100%; border-top: 1px solid var(--line); }\n .topbar-meta { height: 40px; }\n .nav-item { min-height: 39px; }\n .split-view { grid-template-columns: 1fr; grid-template-rows: minmax(150px, 34%) minmax(0, 1fr); }\n .pane-list { border-right: 0; border-bottom: 1px solid var(--line); }\n .filter-control { width: 100%; }\n }\n @media (max-width: 560px) {\n .detail-intro { min-height: 112px; padding: 16px; }\n .detail-intro h2 { font-size: 17px; }\n .property-list > div { grid-template-columns: minmax(98px, 0.38fr) minmax(0, 1fr); gap: 12px; padding-inline: 12px; }\n .environment-grid { grid-template-columns: 1fr; }\n .environment-grid > div + div { border-top: 1px solid var(--line); border-left: 0; }\n .statusbar span:last-child { display: none; }\n }\n @media (prefers-reduced-motion: reduce) {\n html { scroll-behavior: auto; }\n *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; }\n }\n </style>\n <style data-assistant-ui-layout>\n :root {\n --background: #0a0a0a;\n --surface: #0a0a0a;\n --surface-raised: #111111;\n --foreground: #ededed;\n --muted: #929299;\n --muted-strong: #b4b4ba;\n --line: rgb(255 255 255 / 0.11);\n --line-soft: rgb(255 255 255 / 0.075);\n --line-strong: rgb(255 255 255 / 0.16);\n --accent: #1c1c1e;\n }\n html, body { width: 100%; height: 100%; background: #080808; }\n body { position: relative; min-height: 100dvh; overflow: hidden; font-size: 13px; }\n .stage {\n position: fixed;\n inset: 0;\n z-index: 2;\n display: grid;\n min-height: 0;\n padding: 20px;\n place-items: center;\n pointer-events: none;\n }\n .shell {\n width: min(960px, 92vw);\n height: min(560px, 80dvh);\n min-width: 0;\n min-height: 0;\n border: 1px solid var(--line-strong);\n border-radius: 12px;\n background: var(--background);\n box-shadow: 0 24px 80px rgb(0 0 0 / 0.72), 0 4px 18px rgb(0 0 0 / 0.45);\n pointer-events: auto;\n animation: devtools-window-in 180ms cubic-bezier(0.175, 0.885, 0.32, 1.08);\n }\n .topbar {\n min-height: 40px;\n height: 40px;\n align-items: center;\n justify-content: space-between;\n flex-wrap: nowrap;\n border-bottom-color: var(--line);\n background: var(--background);\n }\n .brand { display: none; }\n .tabbar {\n height: 100%;\n flex: 1 1 auto;\n align-items: stretch;\n order: initial;\n width: auto;\n flex-basis: auto;\n padding-inline-start: 8px;\n border-top: 0;\n }\n .nav-item {\n min-height: 39px;\n height: 39px;\n gap: 0;\n padding: 0 12px;\n border-radius: 0;\n color: var(--muted);\n font-family: var(--font-sans);\n font-size: 13px;\n font-weight: 500;\n text-transform: none;\n }\n .nav-item::after {\n right: 8px;\n bottom: -1px;\n left: 8px;\n height: 2px;\n border-radius: 999px;\n }\n .nav-item:hover, .nav-item:focus-visible { background: transparent; color: var(--foreground); }\n .nav-item[aria-selected=\"true\"] { color: var(--foreground); }\n .topbar-meta {\n height: 100%;\n align-items: center;\n gap: 8px;\n margin-left: 0;\n padding: 0 8px 0 4px;\n border-left: 0;\n }\n .project-select {\n display: inline-flex;\n height: 28px;\n min-width: 0;\n align-items: center;\n gap: 5px;\n padding: 0 9px;\n border: 1px solid var(--line);\n border-radius: 8px;\n color: var(--muted-strong);\n font-size: 12px;\n white-space: nowrap;\n }\n .project-select .icon { width: 12px; height: 12px; transform: rotate(90deg); }\n .topbar-status {\n min-width: max-content;\n gap: 6px;\n padding: 0;\n color: var(--muted);\n font-family: var(--font-sans);\n font-size: 11px;\n text-transform: none;\n }\n .status-dot {\n width: 6px;\n height: 6px;\n border: 0;\n border-radius: 999px;\n background: #2dd4bf;\n box-shadow: none;\n }\n .status-dot-attention { background: #f59e0b; animation: none; }\n .status-dot-error { background: #ef4444; }\n .close-action {\n display: inline-flex;\n width: 28px;\n height: 28px;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: 0;\n border-radius: 6px;\n background: transparent;\n color: var(--muted);\n text-decoration: none;\n transition: background-color 120ms ease-out, color 120ms ease-out;\n }\n .close-action:hover, .close-action:focus-visible { background: var(--accent); color: var(--foreground); outline: none; }\n .close-action .icon { width: 14px; height: 14px; }\n .workspace, .content, .view { min-height: 0; }\n .split-view {\n grid-template-columns: clamp(14rem, 28%, 18rem) minmax(0, 1fr);\n grid-template-rows: minmax(0, 1fr);\n }\n .pane { background: var(--background); }\n .pane-list { border-right: 1px solid var(--line); border-bottom: 0; }\n .pane-header {\n min-height: 32px;\n height: 32px;\n max-height: 32px;\n flex: 0 0 32px;\n padding: 0 12px;\n border-bottom-color: var(--line);\n background: var(--background);\n }\n .pane-header strong {\n color: var(--muted);\n font-size: 11px;\n font-weight: 400;\n line-height: 1;\n }\n .pane-header span {\n color: var(--muted);\n font-family: var(--font-sans);\n font-size: 10px;\n line-height: 1;\n }\n .pane-tools { border-bottom-color: var(--line); }\n .pane-tools .filter-control { min-height: 32px; height: 32px; }\n .filter-control {\n min-height: 32px;\n gap: 7px;\n padding: 0 10px;\n border-color: var(--line);\n border-radius: 0;\n background: var(--background);\n }\n .filter-control .icon { width: 13px; height: 13px; }\n .filter-control input { font-family: var(--font-sans); font-size: 11px; }\n .filter-control input::placeholder { color: var(--muted); }\n .filter-control kbd {\n padding: 1px 5px;\n border-color: var(--line);\n border-radius: 4px;\n color: var(--muted);\n font-size: 9px;\n }\n .inspector-row {\n min-height: 44px;\n grid-template-columns: minmax(0, 1fr) auto;\n gap: 8px;\n padding: 6px 11px 6px 12px;\n border: 0;\n border-left: 2px solid transparent;\n border-radius: 0;\n color: var(--muted-strong);\n }\n .inspector-row::before { display: none; }\n .inspector-row:hover, .inspector-row:focus-visible { background: rgb(255 255 255 / 0.035); color: var(--foreground); }\n .inspector-row[aria-selected=\"true\"] {\n border-left-color: var(--foreground);\n background: var(--accent);\n color: var(--foreground);\n }\n .inspector-row-copy strong { font-size: 12px; font-weight: 500; }\n .inspector-row-copy small {\n margin-top: 2px;\n color: var(--muted);\n font-family: var(--font-sans);\n font-size: 10px;\n }\n .inspector-row-value {\n padding: 2px 6px;\n border: 1px solid var(--line);\n border-radius: 999px;\n background: rgb(255 255 255 / 0.035);\n color: var(--muted);\n font-family: var(--font-sans);\n font-size: 9px;\n line-height: 1.2;\n text-transform: none;\n }\n .detail-intro {\n display: block;\n min-height: 0;\n padding: 12px;\n border-bottom-color: var(--line-soft);\n }\n .detail-icon { display: none; }\n .detail-intro .mini-label { margin: 0 0 8px; }\n .detail-intro h2 { font-size: 13px; font-weight: 500; line-height: 1.3; }\n .detail-intro p { margin-top: 6px; font-size: 11px; line-height: 1.5; }\n .detail-section, .detail-intro + .detail-section { border-top-color: var(--line); }\n .property-list > div {\n min-height: 36px;\n grid-template-columns: minmax(96px, 0.28fr) minmax(0, 1fr);\n gap: 14px;\n padding: 7px 12px;\n border-bottom-color: var(--line-soft);\n }\n .property-list dt { font-family: var(--font-sans); font-size: 10px; text-transform: none; }\n .property-list dd { color: var(--foreground); font-size: 11px; }\n .property-list dd > code { font-size: 10px; }\n .json-viewer {\n padding: 12px;\n background: var(--background);\n color: var(--muted-strong);\n font-size: 10px;\n line-height: 1.55;\n }\n .diagnostic {\n min-height: 68px;\n grid-template-columns: 24px minmax(0, 1fr) auto;\n gap: 10px;\n padding: 11px 12px;\n border-bottom-color: var(--line-soft);\n }\n .diagnostic-mark { width: 22px; height: 22px; border: 0; }\n .diagnostic-mark .icon { width: 13px; height: 13px; }\n .diagnostic-code { margin-bottom: 3px; font-size: 9px; }\n .diagnostic strong { font-size: 11px; font-weight: 500; }\n .diagnostic p { margin-top: 3px; font-size: 10px; line-height: 1.45; }\n .diagnostic small { margin-top: 4px; font-size: 9px; }\n .diagnostic-warning { box-shadow: none; }\n .system-row {\n min-height: 48px;\n grid-template-columns: 24px minmax(0, 1fr) auto;\n gap: 8px;\n padding: 8px 12px;\n border-bottom-color: var(--line-soft);\n }\n .system-icon { width: 20px; height: 20px; }\n .system-icon .icon { width: 13px; height: 13px; }\n .system-row strong { font-size: 11px; font-weight: 500; }\n .system-row small { margin-top: 2px; font-size: 10px; }\n .system-value { color: var(--muted); font-size: 10px; }\n table { font-size: 11px; }\n th {\n height: 32px;\n padding: 0 12px;\n background: var(--background);\n font-family: var(--font-sans);\n font-size: 10px;\n font-weight: 400;\n text-transform: none;\n }\n td { min-height: 40px; padding: 9px 12px; font-size: 10px; }\n td code, .file-cell { font-size: 9px; }\n .badge {\n min-height: 18px;\n padding: 1px 6px;\n border-radius: 999px;\n background: rgb(255 255 255 / 0.04);\n font-family: var(--font-sans);\n font-size: 9px;\n text-transform: none;\n }\n .badge-error { background: var(--foreground); color: var(--background); }\n .badge-warning, .badge-attention, .badge-edge { border-style: solid; }\n .empty-state { min-height: 100%; padding: 24px; gap: 6px; }\n .empty-state .icon { display: none; }\n .empty-state strong { font-size: 12px; font-weight: 400; }\n .empty-state span { font-size: 11px; }\n .feature-matrix > div { min-height: 36px; padding: 7px 12px; border-bottom-color: var(--line-soft); }\n .feature-matrix span:first-child { font-size: 11px; }\n .environment-grid > div { min-height: 104px; padding: 12px; }\n .mini-label { margin-bottom: 8px; font-family: var(--font-sans); font-size: 10px; text-transform: none; }\n .key-list code { border-radius: 4px; font-size: 9px; }\n .layer-list > div { min-height: 44px; padding: 8px 12px; border-bottom-color: var(--line-soft); }\n .layer-list strong { font-size: 11px; font-weight: 500; }\n .statusbar { display: none; }\n html.devtools-frame .stage { position: static; width: 100%; height: 100%; min-height: 100%; padding: 0; }\n html.devtools-frame .shell { width: 100%; height: 100%; border-radius: 12px; box-shadow: none; animation: none; }\n @keyframes devtools-window-in {\n from { opacity: 0; transform: scale(0.985) translateY(4px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n }\n @media (max-width: 700px) {\n .stage { display: grid; padding: 0; }\n .shell {\n width: 100%;\n height: 100%;\n min-height: 0;\n border: 1px solid var(--line-strong);\n border-radius: 10px;\n }\n .topbar { flex-wrap: nowrap; }\n .tabbar {\n order: initial;\n width: auto;\n flex-basis: auto;\n border-top: 0;\n padding-inline-start: 4px;\n }\n .topbar-meta { height: 40px; }\n .nav-item { min-height: 39px; height: 39px; padding-inline: 9px; }\n .split-view { grid-template-columns: 1fr; grid-template-rows: minmax(148px, 36%) minmax(0, 1fr); }\n .pane-list { border-right: 0; border-bottom: 1px solid var(--line); }\n }\n @media (max-width: 560px) {\n .project-select { display: none; }\n .topbar-status { display: none; }\n .topbar-meta { gap: 4px; padding-left: 0; }\n .status-label { display: none; }\n .detail-intro { min-height: 0; padding: 12px; }\n .detail-intro h2 { font-size: 13px; }\n .property-list > div { grid-template-columns: minmax(82px, 0.34fr) minmax(0, 1fr); gap: 10px; padding-inline: 10px; }\n }\n @media (prefers-reduced-motion: reduce) {\n .shell { animation: none; }\n }\n </style>\n</head>\n<body>\n <div class=\"stage\">\n <div class=\"shell\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Farm.js DevTools\">\n <header class=\"topbar\">\n <nav class=\"tabbar\" aria-label=\"Devtools views\">\n ${renderNavigationItem(\"overview\", \"Overview\")}\n ${renderNavigationItem(\"routes\", \"Routes\")}\n ${renderNavigationItem(\"api\", \"API\")}\n ${renderNavigationItem(\"systems\", \"Systems\")}\n ${renderNavigationItem(\"runtime\", \"Runtime\")}\n ${renderNavigationItem(\"raw\", \"Raw\")}\n </nav>\n <div class=\"topbar-meta\">\n <span class=\"deprecation-tag\" title=\"The built-in dashboard is deprecated. Install @farm.js/devtools for the maintained workspace.\">Deprecated · use @farm.js/devtools</span>\n <span class=\"project-select\">${escapeHtml(snapshot.project.name)} ${icon(\n \"chevron\",\n )}</span>\n <span class=\"topbar-status\"><span class=\"status-dot\"></span><span class=\"status-label\">1 instance</span></span>\n <button class=\"close-action\" type=\"button\" data-close-devtools aria-label=\"Close DevTools\" title=\"Close DevTools\">${icon(\n \"close\",\n )}</button>\n </div>\n </header>\n <div class=\"workspace\">\n <main class=\"content\">\n <section class=\"view\" data-view-panel=\"overview\">${renderOverviewInspector(\n snapshot,\n healthLabel,\n generatedTime,\n )}</section>\n <section class=\"view\" data-view-panel=\"routes\" hidden>${renderRoutesInspector(\n snapshot,\n )}</section>\n <section class=\"view\" data-view-panel=\"api\" hidden>${renderApiInspector(\n snapshot,\n )}</section>\n <section class=\"view\" data-view-panel=\"systems\" hidden>${renderSystemsInspector(\n snapshot,\n )}</section>\n <section class=\"view\" data-view-panel=\"runtime\" hidden>${renderRuntimeInspector(\n snapshot,\n )}</section>\n <section class=\"view\" data-view-panel=\"raw\" hidden>${renderRawInspector(snapshot)}</section>\n </main>\n </div>\n </div>\n </div>\n <script>\n (() => {\n const embedded = window.parent !== window;\n const closeDevtools = () => {\n if (embedded && window.parent !== window) {\n window.parent.postMessage({ type: \"farm:devtools:close\" }, location.origin);\n return;\n }\n location.assign(\"/\");\n };\n document.querySelector(\"[data-close-devtools]\")?.addEventListener(\"click\", closeDevtools);\n document.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n closeDevtools();\n return;\n }\n if (embedded && window.parent !== window) {\n window.parent.postMessage(\n {\n type: \"farm:devtools:keydown\",\n event: {\n key: event.key,\n code: event.code,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n repeat: event.repeat,\n },\n },\n location.origin,\n );\n }\n });\n\n const validViews = new Set([\"overview\", \"routes\", \"api\", \"systems\", \"runtime\", \"raw\"]);\n const triggers = Array.from(document.querySelectorAll(\"[data-view-trigger]\"));\n const panels = Array.from(document.querySelectorAll(\"[data-view-panel]\"));\n const selectView = (view, updateHash = true) => {\n const nextView = validViews.has(view) ? view : \"overview\";\n triggers.forEach((trigger) => {\n trigger.setAttribute(\"aria-selected\", String(trigger.dataset.viewTrigger === nextView));\n });\n panels.forEach((panel) => {\n panel.hidden = panel.dataset.viewPanel !== nextView;\n });\n if (updateHash) {\n history.replaceState(null, \"\", nextView === \"overview\" ? location.pathname : \"#\" + nextView);\n const activePanel = panels.find((panel) => panel.dataset.viewPanel === nextView);\n if (activePanel) activePanel.scrollTop = 0;\n }\n };\n triggers.forEach((trigger) => trigger.addEventListener(\"click\", () => selectView(trigger.dataset.viewTrigger)));\n window.addEventListener(\"hashchange\", () => selectView(location.hash.slice(1), false));\n selectView(location.hash.slice(1), false);\n\n document.querySelectorAll(\"[data-detail-trigger]\").forEach((trigger) => {\n trigger.addEventListener(\"click\", () => {\n const scope = trigger.dataset.detailTrigger;\n const id = trigger.dataset.detailId;\n document.querySelectorAll('[data-detail-trigger=\"' + scope + '\"]').forEach((row) => {\n row.setAttribute(\"aria-selected\", String(row.dataset.detailId === id));\n });\n document.querySelectorAll('[data-detail-panel=\"' + scope + '\"]').forEach((panel) => {\n panel.hidden = panel.dataset.detailId !== id;\n });\n });\n });\n\n document.querySelectorAll(\"[data-filter]\").forEach((input) => {\n input.addEventListener(\"input\", () => {\n const id = input.dataset.filter;\n const query = input.value.trim().toLowerCase();\n const rows = Array.from(document.querySelectorAll('[data-filter-rows=\"' + id + '\"] [data-search-value]'));\n let visible = 0;\n rows.forEach((row) => {\n const matches = !query || (row.dataset.searchValue || \"\").toLowerCase().includes(query);\n row.hidden = !matches;\n if (matches) visible += 1;\n });\n const selected = rows.find((row) => row.getAttribute(\"aria-selected\") === \"true\");\n if (selected?.hidden) rows.find((row) => !row.hidden)?.click();\n const empty = document.querySelector('[data-filter-empty=\"' + id + '\"]');\n if (empty) empty.hidden = visible !== 0;\n });\n });\n\n document.addEventListener(\"keydown\", (event) => {\n if (event.key !== \"/\" || event.metaKey || event.ctrlKey || event.altKey) return;\n const active = document.activeElement;\n if (active && (active.tagName === \"INPUT\" || active.tagName === \"TEXTAREA\")) return;\n const panel = document.querySelector(\"[data-view-panel]:not([hidden])\");\n const input = panel?.querySelector(\"[data-filter]\");\n if (input) {\n event.preventDefault();\n input.focus();\n }\n });\n\n document.querySelector(\"[data-refresh]\")?.addEventListener(\"click\", () => location.reload());\n document.querySelector(\"[data-copy-snapshot]\")?.addEventListener(\"click\", async (event) => {\n const button = event.currentTarget;\n const label = button.querySelector(\"[data-copy-label]\");\n try {\n const response = await fetch(\"/__farm/devtools.json\", { cache: \"no-store\" });\n const value = JSON.stringify(await response.json(), null, 2);\n if (navigator.clipboard?.writeText) await navigator.clipboard.writeText(value);\n else {\n const textarea = document.createElement(\"textarea\");\n textarea.value = value;\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand(\"copy\");\n textarea.remove();\n }\n button.dataset.copied = \"true\";\n if (label) label.textContent = \"Copied\";\n setTimeout(() => {\n button.dataset.copied = \"false\";\n if (label) label.textContent = \"Copy JSON\";\n }, 1600);\n } catch {\n if (label) label.textContent = \"Copy failed\";\n }\n });\n })();\n </script>\n</body>\n</html>`;\n}\n"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAkiBhD,qBAAqB,YAAY,UAAU,CAAC;AAAA,YAC5C,qBAAqB,UAAU,QAAQ,CAAC;AAAA,YACxC,qBAAqB,OAAO,KAAK,CAAC;AAAA,YAClC,qBAAqB,WAAW,SAAS,CAAC;AAAA,YAC1C,qBAAqB,WAAW,SAAS,CAAC;AAAA,YAC1C,qBAAqB,OAAO,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,yCAIL,WAAW,SAAS,QAAQ,IAAI,CAAC,IAAI;AAAA,IAClE;AAAA,EACF,CAAC;AAAA;AAAA,8HAEmH;AAAA,IAClH;AAAA,EACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,6DAKkD;AAAA,IACjD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,kEACuD;AAAA,IACtD;AAAA,EACF,CAAC;AAAA,+DACoD;AAAA,IACnD;AAAA,EACF,CAAC;AAAA,mEACwD;AAAA,IACvD;AAAA,EACF,CAAC;AAAA,mEACwD;AAAA,IACvD;AAAA,EACF,CAAC;AAAA,+DACoD,mBAAmB,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuI3F;AA9tBgB;","names":[]}
|
package/dist/docs.cjs
CHANGED
|
@@ -2584,11 +2584,30 @@ __name(renderMarkdownHtml, "renderMarkdownHtml");
|
|
|
2584
2584
|
function extractTocItems(body, depth) {
|
|
2585
2585
|
const slug = createSlugger();
|
|
2586
2586
|
const maxLevel = Math.max(2, Math.min(depth, 6));
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2587
|
+
const items = [];
|
|
2588
|
+
let fence = null;
|
|
2589
|
+
for (const line of body.split(/\r?\n/)) {
|
|
2590
|
+
const nextFence = getCodeFence(line);
|
|
2591
|
+
if (fence) {
|
|
2592
|
+
if (nextFence && nextFence.marker === fence.marker && isClosingCodeFence(line, fence)) {
|
|
2593
|
+
fence = null;
|
|
2594
|
+
}
|
|
2595
|
+
continue;
|
|
2596
|
+
}
|
|
2597
|
+
if (nextFence) {
|
|
2598
|
+
fence = nextFence;
|
|
2599
|
+
continue;
|
|
2600
|
+
}
|
|
2601
|
+
const match = line.match(/^(#{2,6})\s+(.+)$/);
|
|
2602
|
+
if (!match) continue;
|
|
2603
|
+
const title = match[2].trim();
|
|
2604
|
+
const id = slug(title);
|
|
2605
|
+
const level = match[1].length;
|
|
2606
|
+
if (level <= maxLevel) {
|
|
2607
|
+
items.push({ id, title, level });
|
|
2608
|
+
}
|
|
2609
|
+
}
|
|
2610
|
+
return items;
|
|
2592
2611
|
}
|
|
2593
2612
|
__name(extractTocItems, "extractTocItems");
|
|
2594
2613
|
function getThemeUI(docs) {
|
package/dist/docs.mjs
CHANGED
|
@@ -11,15 +11,15 @@ import {
|
|
|
11
11
|
isFarmDocsRequest,
|
|
12
12
|
loadFarmDocsPage,
|
|
13
13
|
resolveFarmDocsContentDir
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-YIBV77KZ.mjs";
|
|
15
15
|
import "./chunk-V7RBCSDJ.mjs";
|
|
16
16
|
import "./chunk-GTU5AB4E.mjs";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-X4SFHKFH.mjs";
|
|
18
18
|
import "./chunk-UVCIEUJC.mjs";
|
|
19
19
|
import "./chunk-USLFXFFH.mjs";
|
|
20
20
|
import "./chunk-CG4GPK3Z.mjs";
|
|
21
21
|
import "./chunk-YKAUAZA4.mjs";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-7PYVLJ4J.mjs";
|
|
23
23
|
import "./chunk-7T2QYWDH.mjs";
|
|
24
24
|
import "./chunk-5EZRXIFH.mjs";
|
|
25
25
|
import "./chunk-7ZVN3YZI.mjs";
|
|
@@ -29,7 +29,7 @@ import "./chunk-A5VG2BDG.mjs";
|
|
|
29
29
|
import "./chunk-EUYRVVXL.mjs";
|
|
30
30
|
import "./chunk-2SKCXYLB.mjs";
|
|
31
31
|
import "./chunk-BZAIS65C.mjs";
|
|
32
|
-
import "./chunk-
|
|
32
|
+
import "./chunk-35NPLKQJ.mjs";
|
|
33
33
|
import "./chunk-H53KVQUU.mjs";
|
|
34
34
|
import "./chunk-AAC66ILR.mjs";
|
|
35
35
|
import "./chunk-STV7A2LH.mjs";
|
|
@@ -42,7 +42,7 @@ import "./chunk-ZHQMHJAV.mjs";
|
|
|
42
42
|
import "./chunk-HKXMMPYI.mjs";
|
|
43
43
|
import "./chunk-6YPPIPKR.mjs";
|
|
44
44
|
import "./chunk-3BXGOVKE.mjs";
|
|
45
|
-
import "./chunk-
|
|
45
|
+
import "./chunk-34IAPZBG.mjs";
|
|
46
46
|
import "./chunk-OMQWEX4N.mjs";
|
|
47
47
|
import "./chunk-QALB4BF5.mjs";
|
|
48
48
|
import "./chunk-W4ZNS76E.mjs";
|
package/dist/i18n/server.cjs
CHANGED
|
@@ -538,7 +538,7 @@ var _FarmI18nRuntime = class _FarmI18nRuntime {
|
|
|
538
538
|
return this.resolveMessage(locale, key);
|
|
539
539
|
}
|
|
540
540
|
hasMessage(locale, key) {
|
|
541
|
-
return
|
|
541
|
+
return this.readOwnMessage(locale, key) !== void 0;
|
|
542
542
|
}
|
|
543
543
|
getClientSnapshot(resolution) {
|
|
544
544
|
return {
|
|
@@ -566,8 +566,19 @@ var _FarmI18nRuntime = class _FarmI18nRuntime {
|
|
|
566
566
|
}
|
|
567
567
|
return formatter.format(values);
|
|
568
568
|
}
|
|
569
|
+
// Look up a message by own-property only. A key named after an
|
|
570
|
+
// Object.prototype member (toString, valueOf, constructor, ...) must resolve
|
|
571
|
+
// to a real catalog entry or undefined, never the inherited prototype value
|
|
572
|
+
// (mirrors the own-property handling added to catalog.ts in #454).
|
|
573
|
+
readOwnMessage(locale, key) {
|
|
574
|
+
const direct = this.catalogs[locale];
|
|
575
|
+
if (direct && Object.prototype.hasOwnProperty.call(direct, key)) return direct[key];
|
|
576
|
+
const fallback = this.catalogs[this.config.fallbackLocale];
|
|
577
|
+
if (fallback && Object.prototype.hasOwnProperty.call(fallback, key)) return fallback[key];
|
|
578
|
+
return void 0;
|
|
579
|
+
}
|
|
569
580
|
resolveMessage(locale, key) {
|
|
570
|
-
const message = this.
|
|
581
|
+
const message = this.readOwnMessage(locale, key);
|
|
571
582
|
if (message !== void 0) return message;
|
|
572
583
|
if (this.config.strict) {
|
|
573
584
|
throw new Error(`Missing Farm i18n message "${key}" for locale "${locale}".`);
|
package/dist/i18n/server.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { F as FarmLocaleResolution } from '../resolver-khasx3fU.mjs';
|
|
2
|
-
import { F as FarmI18nRuntime } from '../runtime-
|
|
3
|
-
export { c as createFarmI18nRuntime } from '../runtime-
|
|
2
|
+
import { F as FarmI18nRuntime } from '../runtime-CV2UCV-5.mjs';
|
|
3
|
+
export { c as createFarmI18nRuntime } from '../runtime-CV2UCV-5.mjs';
|
|
4
4
|
import { b as FarmI18nLocale, d as FarmI18nLocaleSource, a as FarmTranslator, F as FarmI18nClientSnapshot } from '../types-CnH8DOqo.mjs';
|
|
5
5
|
export { e as FarmI18nMessageArgs, f as FarmI18nMessageKey } from '../types-CnH8DOqo.mjs';
|
|
6
6
|
|
package/dist/i18n/server.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { F as FarmLocaleResolution } from '../resolver-DadfRL6F.js';
|
|
2
|
-
import { F as FarmI18nRuntime } from '../runtime-
|
|
3
|
-
export { c as createFarmI18nRuntime } from '../runtime-
|
|
2
|
+
import { F as FarmI18nRuntime } from '../runtime-BgDQzBiu.js';
|
|
3
|
+
export { c as createFarmI18nRuntime } from '../runtime-BgDQzBiu.js';
|
|
4
4
|
import { b as FarmI18nLocale, d as FarmI18nLocaleSource, a as FarmTranslator, F as FarmI18nClientSnapshot } from '../types-CnH8DOqo.js';
|
|
5
5
|
export { e as FarmI18nMessageArgs, f as FarmI18nMessageKey } from '../types-CnH8DOqo.js';
|
|
6
6
|
|
package/dist/i18n/server.mjs
CHANGED