Files
jp 0917366cdf Separate JSON API backend (vm_api.py) + React+TanStack frontend scaffold
- vm_api.py: pure FastAPI JSON API on :8098 with CORS
- vm-api.service: systemd unit for API (replaces inline HTML vm_web.py for frontend)
- vm_web.py: kept intact as fallback; Apache now proxies /api/ -> :8098
- frontend/: Vite + React + TanStack Query scaffold
- Apache vhost updated: DocumentRoot -> frontend/dist, /api/ proxy, SPA fallback
- All original HTML pages still functional via :8099 during transition
2026-08-13 17:42:33 +01:00

1 line
3.8 KiB
Plaintext

{"version":3,"file":"Scripts.cjs","names":[],"sources":["../../src/Scripts.tsx"],"sourcesContent":["import { useStore } from '@tanstack/react-store'\nimport { _getAssetMatches, deepEqual } from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Asset } from './Asset'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\ntype ScriptRenderAsset = RouterManagedTag & {\n preventScriptHoist?: boolean\n}\n\n/**\n * Render body script tags collected from route matches and SSR manifests.\n * Should be placed near the end of the document body.\n */\nexport const Scripts = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n\n const getScripts = (matches: Array<any>) => {\n matches = _getAssetMatches(matches)\n const scripts = matches\n .flatMap((match) => match.scripts ?? [])\n .filter(Boolean)\n .map(\n ({ children, ...script }) =>\n ({\n tag: 'script',\n attrs: {\n ...script,\n suppressHydrationWarning: true,\n nonce,\n },\n children,\n }) satisfies RouterManagedTag,\n ) as Array<ScriptRenderAsset>\n const manifest = router.ssr?.manifest\n\n if (!manifest) {\n return scripts\n }\n\n for (const match of matches) {\n const manifestScripts = manifest.routes[match.routeId]?.scripts\n\n if (!manifestScripts) {\n continue\n }\n\n for (const asset of manifestScripts) {\n scripts.push({\n tag: 'script',\n attrs: { ...asset.attrs, nonce },\n children: asset.children,\n ...(typeof asset.attrs?.src === 'string'\n ? { preventScriptHoist: true }\n : {}),\n })\n }\n }\n\n return scripts\n }\n\n if (isServer ?? router.isServer) {\n const activeMatches = router.stores.matches.get()\n const scripts = getScripts(activeMatches)\n return renderScripts(router, scripts)\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks -- condition is static\n const scripts = useStore(router.stores.matches, getScripts, deepEqual)\n\n return renderScripts(router, scripts)\n}\n\nfunction renderScripts(\n router: ReturnType<typeof useRouter>,\n scripts: Array<ScriptRenderAsset>,\n) {\n if ((isServer ?? router.isServer) && router.serverSsr) {\n const serverBufferedScript = router.serverSsr.takeBufferedScripts()\n if (serverBufferedScript) {\n scripts.unshift(serverBufferedScript)\n }\n }\n\n return (\n <>\n {scripts.map((asset, i) => (\n <Asset {...asset} key={`tsr-scripts-${asset.tag}-${i}`} />\n ))}\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAeA,IAAa,gBAAgB;CAC3B,MAAM,SAAS,kBAAA,UAAU;CACzB,MAAM,QAAQ,OAAO,QAAQ,KAAK;CAElC,MAAM,cAAc,YAAwB;EAC1C,WAAA,GAAA,sBAAA,kBAA2B,OAAO;EAClC,MAAM,UAAU,QACb,SAAS,UAAU,MAAM,WAAW,CAAC,CAAC,EACtC,OAAO,OAAO,EACd,KACE,EAAE,UAAU,GAAG,cACb;GACC,KAAK;GACL,OAAO;IACL,GAAG;IACH,0BAA0B;IAC1B;GACF;GACA;EACF,EACJ;EACF,MAAM,WAAW,OAAO,KAAK;EAE7B,IAAI,CAAC,UACH,OAAO;EAGT,KAAK,MAAM,SAAS,SAAS;GAC3B,MAAM,kBAAkB,SAAS,OAAO,MAAM,UAAU;GAExD,IAAI,CAAC,iBACH;GAGF,KAAK,MAAM,SAAS,iBAClB,QAAQ,KAAK;IACX,KAAK;IACL,OAAO;KAAE,GAAG,MAAM;KAAO;IAAM;IAC/B,UAAU,MAAM;IAChB,GAAI,OAAO,MAAM,OAAO,QAAQ,WAC5B,EAAE,oBAAoB,KAAK,IAC3B,CAAC;GACP,CAAC;EAEL;EAEA,OAAO;CACT;CAEA,IAAI,+BAAA,YAAY,OAAO,UAGrB,OAAO,cAAc,QADL,WADM,OAAO,OAAO,QAAQ,IACjB,CACE,CAAO;CAMtC,OAAO,cAAc,SAAA,GAAA,sBAAA,UAFI,OAAO,OAAO,SAAS,YAAY,sBAAA,SAE/B,CAAO;AACtC;AAEA,SAAS,cACP,QACA,SACA;CACA,KAAK,+BAAA,YAAY,OAAO,aAAa,OAAO,WAAW;EACrD,MAAM,uBAAuB,OAAO,UAAU,oBAAoB;EAClE,IAAI,sBACF,QAAQ,QAAQ,oBAAoB;CAExC;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,kBAAA,UAAA,EAAA,UACG,QAAQ,KAAK,OAAO,MACnB,iBAAA,GAAA,MAAA,eAAC,cAAA,OAAD;EAAO,GAAI;EAAO,KAAK,eAAe,MAAM,IAAI,GAAG;CAAM,CAAA,CAC1D,EACD,CAAA;AAEN"}