[{"data":1,"prerenderedAt":740},["ShallowReactive",2],{"navigation":3,"/adapters/bun":56,"/adapters/bun-surround":736},[4,30],{"title":5,"_path":6,"children":7,"icon":9},"Getting Started","/guide",[8,10,14,18,22,26],{"title":5,"_path":6,"icon":9},"ph:book-open-duotone",{"title":11,"_path":12,"icon":13},"Hooks","/guide/hooks","material-symbols-light:data-object",{"title":15,"_path":16,"icon":17},"Peer","/guide/peer","mynaui:api",{"title":19,"_path":20,"icon":21},"Message","/guide/message","solar:letter-line-duotone",{"title":23,"_path":24,"icon":25},"Pub / Sub","/guide/pubsub","simple-icons:googlepubsub",{"title":27,"_path":28,"icon":29},"Resolver API","/guide/resolver","tabler:route",{"title":31,"_path":32,"children":33,"icon":35},"Adapters","/adapters",[34,36,40,44,48,52],{"title":31,"_path":32,"icon":35},"emojione-monotone:electric-plug",{"title":37,"_path":38,"icon":39},"Bun","/adapters/bun","simple-icons:bun",{"title":41,"_path":42,"icon":43},"Cloudflare","/adapters/cloudflare","devicon-plain:cloudflareworkers",{"title":45,"_path":46,"icon":47},"Deno","/adapters/deno","teenyicons:deno-solid",{"title":49,"_path":50,"icon":51},"Node.js","/adapters/node","akar-icons:node-fill",{"title":53,"_path":54,"icon":55},"SSE","/adapters/sse","clarity:two-way-arrows-line",{"_path":38,"_dir":57,"_draft":58,"_partial":58,"_locale":59,"title":37,"description":60,"icon":39,"body":61,"_type":730,"_id":731,"_source":732,"_file":733,"_stem":734,"_extension":735},"adapters",false,"","Integrate crossws with Bun.",{"type":62,"children":63,"toc":728},"root",[64,100,687,722],{"type":65,"tag":66,"props":67,"children":68},"element","p",{},[69,72,79,81,87,89,98],{"type":70,"value":71},"text","To integrate crossws with your Bun server, you need to handle upgrade with ",{"type":65,"tag":73,"props":74,"children":76},"code",{"className":75},[],[77],{"type":70,"value":78},"handleUpgrade",{"type":70,"value":80}," util and also pass the ",{"type":65,"tag":73,"props":82,"children":84},{"className":83},[],[85],{"type":70,"value":86},"websocket",{"type":70,"value":88}," object returned from the adapter to server options. crossws leverages native bun ",{"type":65,"tag":90,"props":91,"children":95},"a",{"href":92,"rel":93},"https://bun.sh/docs/api/websockets",[94],"nofollow",[96],{"type":70,"value":97},"WebSocket API",{"type":70,"value":99},".",{"type":65,"tag":101,"props":102,"children":106},"pre",{"className":103,"code":104,"language":105,"meta":59,"style":59},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import crossws from \"crossws/adapters/bun\";\n\nconst ws = crossws({\n  hooks: {\n    message: console.log,\n  },\n});\n\nBun.serve({\n  port: 3000,\n  websocket: ws.websocket,\n  fetch(request, server) {\n    if (request.headers.get(\"upgrade\") === \"websocket\") {\n      return ws.handleUpgrade(request, server);\n    }\n    return new Response(\n      `\u003Cscript>new WebSocket(\"ws://localhost:3000\").addEventListener('open', (e) => e.target.send(\"Hello from client!\"));\u003C/script>`,\n      { headers: { \"content-type\": \"text/html\" } },\n    );\n  },\n});\n","ts",[107],{"type":65,"tag":73,"props":108,"children":109},{"__ignoreMap":59},[110,155,165,201,221,253,262,280,288,313,336,366,403,486,531,540,564,587,650,663,671],{"type":65,"tag":111,"props":112,"children":115},"span",{"class":113,"line":114},"line",1,[116,122,128,133,139,145,150],{"type":65,"tag":111,"props":117,"children":119},{"style":118},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[120],{"type":70,"value":121},"import",{"type":65,"tag":111,"props":123,"children":125},{"style":124},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[126],{"type":70,"value":127}," crossws ",{"type":65,"tag":111,"props":129,"children":130},{"style":118},[131],{"type":70,"value":132},"from",{"type":65,"tag":111,"props":134,"children":136},{"style":135},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[137],{"type":70,"value":138}," \"",{"type":65,"tag":111,"props":140,"children":142},{"style":141},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[143],{"type":70,"value":144},"crossws/adapters/bun",{"type":65,"tag":111,"props":146,"children":147},{"style":135},[148],{"type":70,"value":149},"\"",{"type":65,"tag":111,"props":151,"children":152},{"style":135},[153],{"type":70,"value":154},";\n",{"type":65,"tag":111,"props":156,"children":158},{"class":113,"line":157},2,[159],{"type":65,"tag":111,"props":160,"children":162},{"emptyLinePlaceholder":161},true,[163],{"type":70,"value":164},"\n",{"type":65,"tag":111,"props":166,"children":168},{"class":113,"line":167},3,[169,175,180,185,191,196],{"type":65,"tag":111,"props":170,"children":172},{"style":171},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[173],{"type":70,"value":174},"const",{"type":65,"tag":111,"props":176,"children":177},{"style":124},[178],{"type":70,"value":179}," ws ",{"type":65,"tag":111,"props":181,"children":182},{"style":135},[183],{"type":70,"value":184},"=",{"type":65,"tag":111,"props":186,"children":188},{"style":187},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[189],{"type":70,"value":190}," crossws",{"type":65,"tag":111,"props":192,"children":193},{"style":124},[194],{"type":70,"value":195},"(",{"type":65,"tag":111,"props":197,"children":198},{"style":135},[199],{"type":70,"value":200},"{\n",{"type":65,"tag":111,"props":202,"children":204},{"class":113,"line":203},4,[205,211,216],{"type":65,"tag":111,"props":206,"children":208},{"style":207},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[209],{"type":70,"value":210},"  hooks",{"type":65,"tag":111,"props":212,"children":213},{"style":135},[214],{"type":70,"value":215},":",{"type":65,"tag":111,"props":217,"children":218},{"style":135},[219],{"type":70,"value":220}," {\n",{"type":65,"tag":111,"props":222,"children":224},{"class":113,"line":223},5,[225,230,234,239,243,248],{"type":65,"tag":111,"props":226,"children":227},{"style":207},[228],{"type":70,"value":229},"    message",{"type":65,"tag":111,"props":231,"children":232},{"style":135},[233],{"type":70,"value":215},{"type":65,"tag":111,"props":235,"children":236},{"style":124},[237],{"type":70,"value":238}," console",{"type":65,"tag":111,"props":240,"children":241},{"style":135},[242],{"type":70,"value":99},{"type":65,"tag":111,"props":244,"children":245},{"style":124},[246],{"type":70,"value":247},"log",{"type":65,"tag":111,"props":249,"children":250},{"style":135},[251],{"type":70,"value":252},",\n",{"type":65,"tag":111,"props":254,"children":256},{"class":113,"line":255},6,[257],{"type":65,"tag":111,"props":258,"children":259},{"style":135},[260],{"type":70,"value":261},"  },\n",{"type":65,"tag":111,"props":263,"children":265},{"class":113,"line":264},7,[266,271,276],{"type":65,"tag":111,"props":267,"children":268},{"style":135},[269],{"type":70,"value":270},"}",{"type":65,"tag":111,"props":272,"children":273},{"style":124},[274],{"type":70,"value":275},")",{"type":65,"tag":111,"props":277,"children":278},{"style":135},[279],{"type":70,"value":154},{"type":65,"tag":111,"props":281,"children":283},{"class":113,"line":282},8,[284],{"type":65,"tag":111,"props":285,"children":286},{"emptyLinePlaceholder":161},[287],{"type":70,"value":164},{"type":65,"tag":111,"props":289,"children":291},{"class":113,"line":290},9,[292,296,300,305,309],{"type":65,"tag":111,"props":293,"children":294},{"style":124},[295],{"type":70,"value":37},{"type":65,"tag":111,"props":297,"children":298},{"style":135},[299],{"type":70,"value":99},{"type":65,"tag":111,"props":301,"children":302},{"style":187},[303],{"type":70,"value":304},"serve",{"type":65,"tag":111,"props":306,"children":307},{"style":124},[308],{"type":70,"value":195},{"type":65,"tag":111,"props":310,"children":311},{"style":135},[312],{"type":70,"value":200},{"type":65,"tag":111,"props":314,"children":316},{"class":113,"line":315},10,[317,322,326,332],{"type":65,"tag":111,"props":318,"children":319},{"style":207},[320],{"type":70,"value":321},"  port",{"type":65,"tag":111,"props":323,"children":324},{"style":135},[325],{"type":70,"value":215},{"type":65,"tag":111,"props":327,"children":329},{"style":328},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[330],{"type":70,"value":331}," 3000",{"type":65,"tag":111,"props":333,"children":334},{"style":135},[335],{"type":70,"value":252},{"type":65,"tag":111,"props":337,"children":339},{"class":113,"line":338},11,[340,345,349,354,358,362],{"type":65,"tag":111,"props":341,"children":342},{"style":207},[343],{"type":70,"value":344},"  websocket",{"type":65,"tag":111,"props":346,"children":347},{"style":135},[348],{"type":70,"value":215},{"type":65,"tag":111,"props":350,"children":351},{"style":124},[352],{"type":70,"value":353}," ws",{"type":65,"tag":111,"props":355,"children":356},{"style":135},[357],{"type":70,"value":99},{"type":65,"tag":111,"props":359,"children":360},{"style":124},[361],{"type":70,"value":86},{"type":65,"tag":111,"props":363,"children":364},{"style":135},[365],{"type":70,"value":252},{"type":65,"tag":111,"props":367,"children":369},{"class":113,"line":368},12,[370,375,379,385,390,395,399],{"type":65,"tag":111,"props":371,"children":372},{"style":207},[373],{"type":70,"value":374},"  fetch",{"type":65,"tag":111,"props":376,"children":377},{"style":135},[378],{"type":70,"value":195},{"type":65,"tag":111,"props":380,"children":382},{"style":381},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[383],{"type":70,"value":384},"request",{"type":65,"tag":111,"props":386,"children":387},{"style":135},[388],{"type":70,"value":389},",",{"type":65,"tag":111,"props":391,"children":392},{"style":381},[393],{"type":70,"value":394}," server",{"type":65,"tag":111,"props":396,"children":397},{"style":135},[398],{"type":70,"value":275},{"type":65,"tag":111,"props":400,"children":401},{"style":135},[402],{"type":70,"value":220},{"type":65,"tag":111,"props":404,"children":406},{"class":113,"line":405},13,[407,412,417,421,425,430,434,439,443,447,452,456,461,466,470,474,478,482],{"type":65,"tag":111,"props":408,"children":409},{"style":118},[410],{"type":70,"value":411},"    if",{"type":65,"tag":111,"props":413,"children":414},{"style":207},[415],{"type":70,"value":416}," (",{"type":65,"tag":111,"props":418,"children":419},{"style":124},[420],{"type":70,"value":384},{"type":65,"tag":111,"props":422,"children":423},{"style":135},[424],{"type":70,"value":99},{"type":65,"tag":111,"props":426,"children":427},{"style":124},[428],{"type":70,"value":429},"headers",{"type":65,"tag":111,"props":431,"children":432},{"style":135},[433],{"type":70,"value":99},{"type":65,"tag":111,"props":435,"children":436},{"style":187},[437],{"type":70,"value":438},"get",{"type":65,"tag":111,"props":440,"children":441},{"style":207},[442],{"type":70,"value":195},{"type":65,"tag":111,"props":444,"children":445},{"style":135},[446],{"type":70,"value":149},{"type":65,"tag":111,"props":448,"children":449},{"style":141},[450],{"type":70,"value":451},"upgrade",{"type":65,"tag":111,"props":453,"children":454},{"style":135},[455],{"type":70,"value":149},{"type":65,"tag":111,"props":457,"children":458},{"style":207},[459],{"type":70,"value":460},") ",{"type":65,"tag":111,"props":462,"children":463},{"style":135},[464],{"type":70,"value":465},"===",{"type":65,"tag":111,"props":467,"children":468},{"style":135},[469],{"type":70,"value":138},{"type":65,"tag":111,"props":471,"children":472},{"style":141},[473],{"type":70,"value":86},{"type":65,"tag":111,"props":475,"children":476},{"style":135},[477],{"type":70,"value":149},{"type":65,"tag":111,"props":479,"children":480},{"style":207},[481],{"type":70,"value":460},{"type":65,"tag":111,"props":483,"children":484},{"style":135},[485],{"type":70,"value":200},{"type":65,"tag":111,"props":487,"children":489},{"class":113,"line":488},14,[490,495,499,503,507,511,515,519,523,527],{"type":65,"tag":111,"props":491,"children":492},{"style":118},[493],{"type":70,"value":494},"      return",{"type":65,"tag":111,"props":496,"children":497},{"style":124},[498],{"type":70,"value":353},{"type":65,"tag":111,"props":500,"children":501},{"style":135},[502],{"type":70,"value":99},{"type":65,"tag":111,"props":504,"children":505},{"style":187},[506],{"type":70,"value":78},{"type":65,"tag":111,"props":508,"children":509},{"style":207},[510],{"type":70,"value":195},{"type":65,"tag":111,"props":512,"children":513},{"style":124},[514],{"type":70,"value":384},{"type":65,"tag":111,"props":516,"children":517},{"style":135},[518],{"type":70,"value":389},{"type":65,"tag":111,"props":520,"children":521},{"style":124},[522],{"type":70,"value":394},{"type":65,"tag":111,"props":524,"children":525},{"style":207},[526],{"type":70,"value":275},{"type":65,"tag":111,"props":528,"children":529},{"style":135},[530],{"type":70,"value":154},{"type":65,"tag":111,"props":532,"children":534},{"class":113,"line":533},15,[535],{"type":65,"tag":111,"props":536,"children":537},{"style":135},[538],{"type":70,"value":539},"    }\n",{"type":65,"tag":111,"props":541,"children":543},{"class":113,"line":542},16,[544,549,554,559],{"type":65,"tag":111,"props":545,"children":546},{"style":118},[547],{"type":70,"value":548},"    return",{"type":65,"tag":111,"props":550,"children":551},{"style":135},[552],{"type":70,"value":553}," new",{"type":65,"tag":111,"props":555,"children":556},{"style":187},[557],{"type":70,"value":558}," Response",{"type":65,"tag":111,"props":560,"children":561},{"style":207},[562],{"type":70,"value":563},"(\n",{"type":65,"tag":111,"props":565,"children":567},{"class":113,"line":566},17,[568,573,578,583],{"type":65,"tag":111,"props":569,"children":570},{"style":135},[571],{"type":70,"value":572},"      `",{"type":65,"tag":111,"props":574,"children":575},{"style":141},[576],{"type":70,"value":577},"\u003Cscript>new WebSocket(\"ws://localhost:3000\").addEventListener('open', (e) => e.target.send(\"Hello from client!\"));\u003C/script>",{"type":65,"tag":111,"props":579,"children":580},{"style":135},[581],{"type":70,"value":582},"`",{"type":65,"tag":111,"props":584,"children":585},{"style":135},[586],{"type":70,"value":252},{"type":65,"tag":111,"props":588,"children":590},{"class":113,"line":589},18,[591,596,601,605,610,614,619,623,627,631,636,640,645],{"type":65,"tag":111,"props":592,"children":593},{"style":135},[594],{"type":70,"value":595},"      {",{"type":65,"tag":111,"props":597,"children":598},{"style":207},[599],{"type":70,"value":600}," headers",{"type":65,"tag":111,"props":602,"children":603},{"style":135},[604],{"type":70,"value":215},{"type":65,"tag":111,"props":606,"children":607},{"style":135},[608],{"type":70,"value":609}," {",{"type":65,"tag":111,"props":611,"children":612},{"style":135},[613],{"type":70,"value":138},{"type":65,"tag":111,"props":615,"children":616},{"style":207},[617],{"type":70,"value":618},"content-type",{"type":65,"tag":111,"props":620,"children":621},{"style":135},[622],{"type":70,"value":149},{"type":65,"tag":111,"props":624,"children":625},{"style":135},[626],{"type":70,"value":215},{"type":65,"tag":111,"props":628,"children":629},{"style":135},[630],{"type":70,"value":138},{"type":65,"tag":111,"props":632,"children":633},{"style":141},[634],{"type":70,"value":635},"text/html",{"type":65,"tag":111,"props":637,"children":638},{"style":135},[639],{"type":70,"value":149},{"type":65,"tag":111,"props":641,"children":642},{"style":135},[643],{"type":70,"value":644}," }",{"type":65,"tag":111,"props":646,"children":647},{"style":135},[648],{"type":70,"value":649}," },\n",{"type":65,"tag":111,"props":651,"children":653},{"class":113,"line":652},19,[654,659],{"type":65,"tag":111,"props":655,"children":656},{"style":207},[657],{"type":70,"value":658},"    )",{"type":65,"tag":111,"props":660,"children":661},{"style":135},[662],{"type":70,"value":154},{"type":65,"tag":111,"props":664,"children":666},{"class":113,"line":665},20,[667],{"type":65,"tag":111,"props":668,"children":669},{"style":135},[670],{"type":70,"value":261},{"type":65,"tag":111,"props":672,"children":674},{"class":113,"line":673},21,[675,679,683],{"type":65,"tag":111,"props":676,"children":677},{"style":135},[678],{"type":70,"value":270},{"type":65,"tag":111,"props":680,"children":681},{"style":124},[682],{"type":70,"value":275},{"type":65,"tag":111,"props":684,"children":685},{"style":135},[686],{"type":70,"value":154},{"type":65,"tag":688,"props":689,"children":690},"read-more",{},[691],{"type":65,"tag":66,"props":692,"children":693},{},[694,696,707,709,720],{"type":70,"value":695},"See ",{"type":65,"tag":90,"props":697,"children":700},{"href":698,"rel":699},"https://github.com/h3js/crossws/blob/main/test/fixture/bun.ts",[94],[701],{"type":65,"tag":73,"props":702,"children":704},{"className":703},[],[705],{"type":70,"value":706},"test/fixture/bun.ts",{"type":70,"value":708}," for demo and ",{"type":65,"tag":90,"props":710,"children":713},{"href":711,"rel":712},"https://github.com/h3js/crossws/blob/main/src/adapters/bun.ts",[94],[714],{"type":65,"tag":73,"props":715,"children":717},{"className":716},[],[718],{"type":70,"value":719},"src/adapters/bun.ts",{"type":70,"value":721}," for implementation.",{"type":65,"tag":723,"props":724,"children":725},"style",{},[726],{"type":70,"value":727},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":59,"searchDepth":157,"depth":157,"links":729},[],"markdown","content:2.adapters:bun.md","content","2.adapters/bun.md","2.adapters/bun","md",[737,738],{"_path":32,"title":31,"description":59},{"_path":42,"title":41,"description":739},"Integrate crossws with Cloudflare Workers.",1747776031383]