{"version":3,"file":"renderRSC.cjs","sources":["../../src/renderRSC.tsx"],"sourcesContent":["// TODO: RSCs\n// // @ts-expect-error\n// import * as reactDom from '@vinxi/react-server-dom/client'\nimport { isValidElement } from 'react'\nimport invariant from 'tiny-invariant'\nimport type React from 'react'\n\nexport function renderRsc(input: any): React.JSX.Element {\n  if (isValidElement(input)) {\n    return input\n  }\n\n  if (typeof input === 'object' && !input.state) {\n    input.state = {\n      status: 'pending',\n      promise: Promise.resolve()\n        .then(() => {\n          let element\n\n          // We're in node\n          // TODO: RSCs\n          // if (reactDom.createFromNodeStream) {\n          //   const stream = await import('node:stream')\n\n          //   let body: any = input\n\n          //   // Unwrap the response\n          //   if (input instanceof Response) {\n          //     body = input.body\n          //   }\n\n          //   // Convert ReadableStream to NodeJS stream.Readable\n          //   if (body instanceof ReadableStream) {\n          //     body = stream.Readable.fromWeb(body as any)\n          //   }\n\n          //   if (stream.Readable.isReadable(body)) {\n          //     // body = copyStreamToRaw(body)\n          //   } else if (input.text) {\n          //     // create a readable stream by awaiting the text method\n          //     body = new stream.Readable({\n          //       async read() {\n          //         input.text().then((value: any) => {\n          //           this.push(value)\n          //           this.push(null)\n          //         })\n          //       },\n          //     })\n          //   } else {\n          //     console.error('input', input)\n          //     throw new Error('Unexpected rsc input type 👆')\n          //   }\n\n          //   element = await reactDom.createFromNodeStream(body)\n          // } else {\n          //   // We're in the browser\n          //   if (input.body instanceof ReadableStream) {\n          //     input = input.body\n          //   }\n\n          //   if (input instanceof ReadableStream) {\n          //     element = await reactDom.createFromReadableStream(input)\n          //   }\n\n          //   if (input instanceof Response) {\n          //     // copy to the response body to cache the raw data\n          //     element = await reactDom.createFromFetch(input)\n          //   }\n          // }\n\n          // return element\n\n          invariant(false, 'renderRSC() is coming soon!')\n        })\n        .then((element) => {\n          input.state.value = element\n          input.state.status = 'success'\n        })\n        .catch((err) => {\n          input.state.status = 'error'\n          input.state.error = err\n        }),\n    }\n  }\n\n  if (input.state.status === 'pending') {\n    throw input.state.promise\n  }\n\n  return input.state.value\n}\n"],"names":["isValidElement"],"mappings":";;;;AAOO,SAAS,UAAU,OAA+B;AACnD,MAAAA,MAAAA,eAAe,KAAK,GAAG;AAClB,WAAA;AAAA,EAAA;AAGT,MAAI,OAAO,UAAU,YAAY,CAAC,MAAM,OAAO;AAC7C,UAAM,QAAQ;AAAA,MACZ,QAAQ;AAAA,MACR,SAAS,QAAQ,QAAQ,EACtB,KAAK,MAAM;AAwDV,kBAAU,OAAO,6BAA6B;AAAA,MAAA,CAC/C,EACA,KAAK,CAAC,YAAY;AACjB,cAAM,MAAM,QAAQ;AACpB,cAAM,MAAM,SAAS;AAAA,MAAA,CACtB,EACA,MAAM,CAAC,QAAQ;AACd,cAAM,MAAM,SAAS;AACrB,cAAM,MAAM,QAAQ;AAAA,MACrB,CAAA;AAAA,IACL;AAAA,EAAA;AAGE,MAAA,MAAM,MAAM,WAAW,WAAW;AACpC,UAAM,MAAM,MAAM;AAAA,EAAA;AAGpB,SAAO,MAAM,MAAM;AACrB;;"}