{"version":3,"file":"defaultStreamHandler.cjs","sources":["../../src/defaultStreamHandler.tsx"],"sourcesContent":["import { PassThrough } from 'node:stream'\nimport { isbot } from 'isbot'\nimport ReactDOMServer from 'react-dom/server'\n\nimport { StartServer } from './StartServer'\n\nimport {\n  transformPipeableStreamWithRouter,\n  transformReadableStreamWithRouter,\n} from './transformStreamWithRouter'\n\nimport { defineHandlerCallback } from './handlerCallback'\nimport type { ReadableStream } from 'node:stream/web'\n\nexport const defaultStreamHandler = defineHandlerCallback(\n  async ({ request, router, responseHeaders }) => {\n    if (typeof ReactDOMServer.renderToReadableStream === 'function') {\n      const stream = await ReactDOMServer.renderToReadableStream(\n        <StartServer router={router} />,\n        {\n          signal: request.signal,\n        },\n      )\n\n      if (isbot(request.headers.get('User-Agent'))) {\n        await stream.allReady\n      }\n\n      const responseStream = transformReadableStreamWithRouter(\n        router,\n        stream as unknown as ReadableStream,\n      )\n      return new Response(responseStream as any, {\n        status: router.state.statusCode,\n        headers: responseHeaders,\n      })\n    }\n\n    if (typeof ReactDOMServer.renderToPipeableStream === 'function') {\n      const reactAppPassthrough = new PassThrough()\n\n      try {\n        const pipeable = ReactDOMServer.renderToPipeableStream(\n          <StartServer router={router} />,\n          {\n            ...(isbot(request.headers.get('User-Agent'))\n              ? {\n                  onAllReady() {\n                    pipeable.pipe(reactAppPassthrough)\n                  },\n                }\n              : {\n                  onShellReady() {\n                    pipeable.pipe(reactAppPassthrough)\n                  },\n                }),\n            onError: (error, info) => {\n              console.error('Error in renderToPipeableStream:', error, info)\n            },\n          },\n        )\n      } catch (e) {\n        console.error('Error in renderToPipeableStream:', e)\n      }\n\n      const responseStream = transformPipeableStreamWithRouter(\n        router,\n        reactAppPassthrough,\n      )\n      return new Response(responseStream as any, {\n        status: router.state.statusCode,\n        headers: responseHeaders,\n      })\n    }\n\n    throw new Error(\n      'No renderToReadableStream or renderToPipeableStream found in react-dom/server. Ensure you are using a version of react-dom that supports streaming.',\n    )\n  },\n)\n"],"names":["defineHandlerCallback","jsx","StartServer","isbot","transformReadableStreamWithRouter","PassThrough","transformPipeableStreamWithRouter"],"mappings":";;;;;;;;;AAcO,MAAM,uBAAuBA,gBAAA;AAAA,EAClC,OAAO,EAAE,SAAS,QAAQ,sBAAsB;AAC1C,QAAA,OAAO,eAAe,2BAA2B,YAAY;AACzD,YAAA,SAAS,MAAM,eAAe;AAAA,QAClCC,+BAACC,YAAAA,eAAY,QAAgB;AAAA,QAC7B;AAAA,UACE,QAAQ,QAAQ;AAAA,QAAA;AAAA,MAEpB;AAEA,UAAIC,MAAAA,MAAM,QAAQ,QAAQ,IAAI,YAAY,CAAC,GAAG;AAC5C,cAAM,OAAO;AAAA,MAAA;AAGf,YAAM,iBAAiBC,0BAAA;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AACO,aAAA,IAAI,SAAS,gBAAuB;AAAA,QACzC,QAAQ,OAAO,MAAM;AAAA,QACrB,SAAS;AAAA,MAAA,CACV;AAAA,IAAA;AAGC,QAAA,OAAO,eAAe,2BAA2B,YAAY;AACzD,YAAA,sBAAsB,IAAIC,wBAAY;AAExC,UAAA;AACF,cAAM,WAAW,eAAe;AAAA,UAC9BJ,+BAACC,YAAAA,eAAY,QAAgB;AAAA,UAC7B;AAAA,YACE,GAAIC,MAAAA,MAAM,QAAQ,QAAQ,IAAI,YAAY,CAAC,IACvC;AAAA,cACE,aAAa;AACX,yBAAS,KAAK,mBAAmB;AAAA,cAAA;AAAA,YACnC,IAEF;AAAA,cACE,eAAe;AACb,yBAAS,KAAK,mBAAmB;AAAA,cAAA;AAAA,YAErC;AAAA,YACJ,SAAS,CAAC,OAAO,SAAS;AAChB,sBAAA,MAAM,oCAAoC,OAAO,IAAI;AAAA,YAAA;AAAA,UAC/D;AAAA,QAEJ;AAAA,eACO,GAAG;AACF,gBAAA,MAAM,oCAAoC,CAAC;AAAA,MAAA;AAGrD,YAAM,iBAAiBG,0BAAA;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AACO,aAAA,IAAI,SAAS,gBAAuB;AAAA,QACzC,QAAQ,OAAO,MAAM;AAAA,QACrB,SAAS;AAAA,MAAA,CACV;AAAA,IAAA;AAGH,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EAAA;AAEJ;;"}