{"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\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 getAssetScripts = (matches: Array<any>) => {\n    const assetScripts: Array<ScriptRenderAsset> = []\n    const manifest = router.ssr?.manifest\n\n    if (!manifest) {\n      return []\n    }\n\n    for (const match of matches) {\n      const scripts = manifest.routes[match.routeId]?.scripts\n\n      if (!scripts) {\n        continue\n      }\n\n      for (const asset of scripts) {\n        assetScripts.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 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 activeMatches = router.stores.matches.get()\n    const assetScripts = getAssetScripts(activeMatches)\n    const scripts = getScripts(activeMatches)\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.matches,\n    getAssetScripts,\n    deepEqual,\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, assetScripts)\n}\n\nfunction renderScripts(\n  router: ReturnType<typeof useRouter>,\n  scripts: Array<RouterManagedTag>,\n  assetScripts: Array<ScriptRenderAsset>,\n) {\n  const allScripts = [...scripts, ...assetScripts] as Array<ScriptRenderAsset>\n\n  if ((isServer ?? router.isServer) && router.serverSsr) {\n    const serverBufferedScript = router.serverSsr.takeBufferedScripts()\n    if (serverBufferedScript) {\n      allScripts.unshift(serverBufferedScript)\n    }\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":";;;;;;;;;;;;;AAeA,IAAa,gBAAgB;CAC3B,MAAM,SAAS,kBAAA,WAAW;CAC1B,MAAM,QAAQ,OAAO,QAAQ,KAAK;CAElC,MAAM,mBAAmB,YAAwB;EAC/C,MAAM,eAAyC,EAAE;EACjD,MAAM,WAAW,OAAO,KAAK;AAE7B,MAAI,CAAC,SACH,QAAO,EAAE;AAGX,OAAK,MAAM,SAAS,SAAS;GAC3B,MAAM,UAAU,SAAS,OAAO,MAAM,UAAU;AAEhD,OAAI,CAAC,QACH;AAGF,QAAK,MAAM,SAAS,QAClB,cAAa,KAAK;IAChB,KAAK;IACL,OAAO;KAAE,GAAG,MAAM;KAAO;KAAO;IAChC,UAAU,MAAM;IAChB,GAAI,OAAO,MAAM,OAAO,QAAQ,WAC5B,EAAE,oBAAoB,MAAM,GAC5B,EAAE;IACP,CAAC;;AAIN,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,gBAAgB,OAAO,OAAO,QAAQ,KAAK;EACjD,MAAM,eAAe,gBAAgB,cAAc;AAEnD,SAAO,cAAc,QADL,WAAW,cAAc,EACH,aAAa;;CAIrD,MAAM,gBAAA,GAAA,sBAAA,UACJ,OAAO,OAAO,SACd,iBACA,sBAAA,UACD;AAID,QAAO,cAAc,SAAA,GAAA,sBAAA,UAFI,OAAO,OAAO,SAAS,YAAY,sBAAA,UAAU,EAEhC,aAAa;;AAGrD,SAAS,cACP,QACA,SACA,cACA;CACA,MAAM,aAAa,CAAC,GAAG,SAAS,GAAG,aAAa;AAEhD,MAAK,+BAAA,YAAY,OAAO,aAAa,OAAO,WAAW;EACrD,MAAM,uBAAuB,OAAO,UAAU,qBAAqB;AACnE,MAAI,qBACF,YAAW,QAAQ,qBAAqB;;AAI5C,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"}