{"version":3,"file":"Scripts.cjs","names":[],"sources":["../../src/Scripts.tsx"],"sourcesContent":["import { useStore } from '@tanstack/react-store'\nimport { 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\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 getAssetScripts = (matches: Array<any>) => {\n    const assetScripts: Array<RouterManagedTag> = []\n    const manifest = router.ssr?.manifest\n\n    if (!manifest) {\n      return []\n    }\n\n    matches\n      .map((match) => router.looseRoutesById[match.routeId]!)\n      .forEach((route) =>\n        manifest.routes[route.id]?.assets\n          ?.filter((d) => d.tag === 'script')\n          .forEach((asset) => {\n            assetScripts.push({\n              tag: 'script',\n              attrs: { ...asset.attrs, nonce },\n              children: asset.children,\n            } as any)\n          }),\n      )\n\n    return assetScripts\n  }\n\n  const getScripts = (matches: Array<any>): Array<RouterManagedTag> =>\n    (\n      matches\n        .map((match) => match.scripts!)\n        .flat(1)\n        .filter(Boolean) as Array<RouterManagedTag>\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    )\n\n  if (isServer ?? router.isServer) {\n    const assetScripts = getAssetScripts(\n      router.stores.activeMatchesSnapshot.state,\n    )\n    const scripts = getScripts(router.stores.activeMatchesSnapshot.state)\n    return renderScripts(router, scripts, assetScripts)\n  }\n\n  // eslint-disable-next-line react-hooks/rules-of-hooks -- condition is static\n  const assetScripts = useStore(\n    router.stores.activeMatchesSnapshot,\n    getAssetScripts,\n    deepEqual,\n  )\n  // eslint-disable-next-line react-hooks/rules-of-hooks -- condition is static\n  const scripts = useStore(\n    router.stores.activeMatchesSnapshot,\n    getScripts,\n    deepEqual,\n  )\n\n  return renderScripts(router, scripts, assetScripts)\n}\n\nfunction renderScripts(\n  router: ReturnType<typeof useRouter>,\n  scripts: Array<RouterManagedTag>,\n  assetScripts: Array<RouterManagedTag>,\n) {\n  let serverBufferedScript: RouterManagedTag | undefined = undefined\n\n  if (router.serverSsr) {\n    serverBufferedScript = router.serverSsr.takeBufferedScripts()\n  }\n\n  const allScripts = [...scripts, ...assetScripts] as Array<RouterManagedTag>\n\n  if (serverBufferedScript) {\n    allScripts.unshift(serverBufferedScript)\n  }\n\n  return (\n    <>\n      {allScripts.map((asset, i) => (\n        <Asset {...asset} key={`tsr-scripts-${asset.tag}-${i}`} />\n      ))}\n    </>\n  )\n}\n"],"mappings":";;;;;;;;;;;;;AAWA,IAAa,gBAAgB;CAC3B,MAAM,SAAS,kBAAA,WAAW;CAC1B,MAAM,QAAQ,OAAO,QAAQ,KAAK;CAElC,MAAM,mBAAmB,YAAwB;EAC/C,MAAM,eAAwC,EAAE;EAChD,MAAM,WAAW,OAAO,KAAK;AAE7B,MAAI,CAAC,SACH,QAAO,EAAE;AAGX,UACG,KAAK,UAAU,OAAO,gBAAgB,MAAM,SAAU,CACtD,SAAS,UACR,SAAS,OAAO,MAAM,KAAK,QACvB,QAAQ,MAAM,EAAE,QAAQ,SAAS,CAClC,SAAS,UAAU;AAClB,gBAAa,KAAK;IAChB,KAAK;IACL,OAAO;KAAE,GAAG,MAAM;KAAO;KAAO;IAChC,UAAU,MAAM;IACjB,CAAQ;IACT,CACL;AAEH,SAAO;;CAGT,MAAM,cAAc,YAEhB,QACG,KAAK,UAAU,MAAM,QAAS,CAC9B,KAAK,EAAE,CACP,OAAO,QAAQ,CAClB,KACC,EAAE,UAAU,GAAG,cACb;EACC,KAAK;EACL,OAAO;GACL,GAAG;GACH,0BAA0B;GAC1B;GACD;EACD;EACD,EACJ;AAEH,KAAI,+BAAA,YAAY,OAAO,UAAU;EAC/B,MAAM,eAAe,gBACnB,OAAO,OAAO,sBAAsB,MACrC;AAED,SAAO,cAAc,QADL,WAAW,OAAO,OAAO,sBAAsB,MAAM,EAC/B,aAAa;;CAIrD,MAAM,gBAAA,GAAA,sBAAA,UACJ,OAAO,OAAO,uBACd,iBACA,sBAAA,UACD;AAQD,QAAO,cAAc,SAAA,GAAA,sBAAA,UALnB,OAAO,OAAO,uBACd,YACA,sBAAA,UACD,EAEqC,aAAa;;AAGrD,SAAS,cACP,QACA,SACA,cACA;CACA,IAAI,uBAAqD,KAAA;AAEzD,KAAI,OAAO,UACT,wBAAuB,OAAO,UAAU,qBAAqB;CAG/D,MAAM,aAAa,CAAC,GAAG,SAAS,GAAG,aAAa;AAEhD,KAAI,qBACF,YAAW,QAAQ,qBAAqB;AAG1C,QACE,iBAAA,GAAA,kBAAA,KAAA,kBAAA,UAAA,EAAA,UACG,WAAW,KAAK,OAAO,MACtB,iBAAA,GAAA,MAAA,eAAC,cAAA,OAAD;EAAO,GAAI;EAAO,KAAK,eAAe,MAAM,IAAI,GAAG;EAAO,CAAA,CAC1D,EACD,CAAA"}