{"version":3,"file":"renderRouterToStream.cjs","names":["Solid","isbot","createSsrStreamResponse","getSsrStatus","transformReadableStreamWithRouter","waitForRequest","getSolidRenderOptions","JSXElement","AnyRouter","renderRouterToStream","request","router","responseHeaders","children","Request","Headers","signal","aborted","serverSsr","cleanup","reason","docType","ssr","stream","renderToStream","_$memo","readable","writable","TransformStream","Uint8Array","rendererAbort","headers","get","AbortController","undefined","responseStream","rendererSafePoint","onAbort","abort","Promise","resolve","pipeTo","catch","error","console","Response","status"],"sources":["../../../src/ssr/renderRouterToStream.tsx"],"sourcesContent":["import * as Solid from 'solid-js/web'\nimport { isbot } from 'isbot'\nimport {\n  createSsrStreamResponse,\n  getSsrStatus,\n  transformReadableStreamWithRouter,\n  waitForRequest,\n} from '@tanstack/router-core/ssr/server'\nimport { getSolidRenderOptions } from './renderOptions'\nimport type { JSXElement } from 'solid-js'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport const renderRouterToStream = async ({\n  request,\n  router,\n  responseHeaders,\n  children,\n}: {\n  request: Request\n  router: AnyRouter\n  responseHeaders: Headers\n  children: () => JSXElement\n}) => {\n  const signal = request.signal\n  if (signal.aborted) {\n    router.serverSsr?.cleanup()\n    throw signal.reason\n  }\n\n  try {\n    const docType = Solid.ssr('<!DOCTYPE html>')\n    const stream = Solid.renderToStream(\n      () => (\n        <>\n          {docType}\n          {children()}\n        </>\n      ),\n      getSolidRenderOptions(router),\n    )\n\n    // Cancelling the transform's reader errors this writable, which makes\n    // Solid's later writes reject and be ignored. Solid exposes no disposal\n    // handle for unresolved renderer work; see router-core's STREAMING.md.\n    const { readable, writable } = new TransformStream<Uint8Array, Uint8Array>()\n    const rendererAbort = isbot(request.headers.get('User-Agent'))\n      ? new AbortController()\n      : undefined\n    const responseStream = transformReadableStreamWithRouter(router, readable, {\n      rendererSafePoint: 'record-end',\n      signal,\n      onAbort: rendererAbort\n        ? (reason) => rendererAbort.abort(reason)\n        : undefined,\n    })\n\n    if (rendererAbort) {\n      await waitForRequest(stream as unknown, rendererAbort.signal)\n    }\n\n    // The server export returns Promise<void>. Solid's client declaration\n    // returns void, and this file is also checked under that export condition.\n    void Promise.resolve(stream.pipeTo(writable)).catch((error: unknown) => {\n      console.error('Error in Solid render stream:', error)\n      void writable.abort(error).catch(() => {})\n    })\n\n    return createSsrStreamResponse(\n      router,\n      new Response(responseStream, {\n        status: getSsrStatus(router),\n        headers: responseHeaders,\n      }),\n    )\n  } catch (error) {\n    router.serverSsr?.cleanup()\n    throw error\n  }\n}\n"],"mappings":";;;;;;;AAYA,IAAaS,uBAAuB,OAAO,EACzCC,SACAC,QACAC,iBACAC,eAMI;CACJ,MAAMG,SAASN,QAAQM;CACvB,IAAIA,OAAOC,SAAS;EAClBN,OAAOO,WAAWC,QAAQ;EAC1B,MAAMH,OAAOI;CACf;CAEA,IAAI;EACF,MAAMC,UAAUrB,aAAMsB,IAAI,iBAAiB;EAC3C,MAAMC,SAASvB,aAAMwB,qBACnB,CAEKH,UAAAA,GAAAA,aAAAA,MACAR,QAAQ,CAAA,GAGbP,sBAAAA,sBAAsBK,MAAM,CAC9B;EAKA,MAAM,EAAEe,UAAUC,aAAa,IAAIC,gBAAwC;EAC3E,MAAME,iBAAAA,GAAAA,MAAAA,OAAsBpB,QAAQqB,QAAQC,IAAI,YAAY,CAAC,IACzD,IAAIC,gBAAgB,IACpBC,KAAAA;EACJ,MAAMC,kBAAAA,GAAAA,iCAAAA,mCAAmDxB,QAAQe,UAAU;GACzEU,mBAAmB;GACnBpB;GACAqB,SAASP,iBACJV,WAAWU,cAAcQ,MAAMlB,MAAM,IACtCc,KAAAA;EACN,CAAC;EAED,IAAIJ,eACF,OAAA,GAAA,iCAAA,gBAAqBP,QAAmBO,cAAcd,MAAM;EAK9D,QAAawB,QAAQjB,OAAOkB,OAAOd,QAAQ,CAAC,EAAEe,OAAOC,UAAmB;GACtEC,QAAQD,MAAM,iCAAiCA,KAAK;GACpD,SAAcL,MAAMK,KAAK,EAAED,YAAY,CAAC,CAAC;EAC3C,CAAC;EAED,QAAA,GAAA,iCAAA,yBACE/B,QACA,IAAIkC,SAASV,gBAAgB;GAC3BW,SAAAA,GAAAA,iCAAAA,cAAqBnC,MAAM;GAC3BoB,SAASnB;EACX,CAAC,CACH;CACF,SAAS+B,OAAO;EACdhC,OAAOO,WAAWC,QAAQ;EAC1B,MAAMwB;CACR;AACF"}