[{"data":1,"prerenderedAt":409},["ShallowReactive",2],{"navigation":3,"-adapters-bun":83,"-adapters-bun-surround":405},[4,46],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Guide","\u002Fguide","1.guide\u002F1.index",[9,11,16,21,26,31,36,41],{"title":5,"path":6,"stem":7,"icon":10},"ph:book-open-duotone",{"title":12,"path":13,"stem":14,"icon":15},"Hooks","\u002Fguide\u002Fhooks","1.guide\u002F2.hooks","material-symbols-light:data-object",{"title":17,"path":18,"stem":19,"icon":20},"Peer","\u002Fguide\u002Fpeer","1.guide\u002F3.peer","mynaui:api",{"title":22,"path":23,"stem":24,"icon":25},"Message","\u002Fguide\u002Fmessage","1.guide\u002F4.message","solar:letter-line-duotone",{"title":27,"path":28,"stem":29,"icon":30},"Pub \u002F Sub","\u002Fguide\u002Fpubsub","1.guide\u002F5.pubsub","simple-icons:googlepubsub",{"title":32,"path":33,"stem":34,"icon":35},"Sync Backplane","\u002Fguide\u002Fsync","1.guide\u002F6.sync","tabler:refresh",{"title":37,"path":38,"stem":39,"icon":40},"Resolver API","\u002Fguide\u002Fresolver","1.guide\u002F7.resolver","tabler:route",{"title":42,"path":43,"stem":44,"icon":45},"WebSocket Proxy","\u002Fguide\u002Fproxy","1.guide\u002F8.proxy","tabler:arrows-exchange",{"title":47,"path":48,"stem":49,"children":50,"icon":52},"Adapters","\u002Fadapters","2.adapters\u002F1.index",[51,53,58,63,68,73,78],{"title":47,"path":48,"stem":49,"icon":52},"emojione-monotone:electric-plug",{"title":54,"path":55,"stem":56,"icon":57},"Bun","\u002Fadapters\u002Fbun","2.adapters\u002Fbun","simple-icons:bun",{"title":59,"path":60,"stem":61,"icon":62},"Bunny","\u002Fadapters\u002Fbunny","2.adapters\u002Fbunny","mdi:rabbit",{"title":64,"path":65,"stem":66,"icon":67},"Cloudflare","\u002Fadapters\u002Fcloudflare","2.adapters\u002Fcloudflare","devicon-plain:cloudflareworkers",{"title":69,"path":70,"stem":71,"icon":72},"Deno","\u002Fadapters\u002Fdeno","2.adapters\u002Fdeno","teenyicons:deno-solid",{"title":74,"path":75,"stem":76,"icon":77},"Node.js","\u002Fadapters\u002Fnode","2.adapters\u002Fnode","akar-icons:node-fill",{"title":79,"path":80,"stem":81,"icon":82},"SSE","\u002Fadapters\u002Fsse","2.adapters\u002Fsse","clarity:two-way-arrows-line",{"id":84,"title":54,"body":85,"description":399,"extension":400,"meta":401,"navigation":402,"path":55,"seo":403,"stem":56,"__hash__":404},"content\u002F2.adapters\u002Fbun.md",{"type":86,"value":87,"toc":397,"icon":57},"minimark",[88,109,128,371,393],[89,90,91],"tip",{},[92,93,94,95,99,100,103,104,108],"p",{},"\nYou can use ",[96,97,98],"code",{},"serve"," function from ",[96,101,102],{},"crossws\u002Fserver"," to ",[105,106,107],"strong",{},"automatically"," integrate crossws with Bun!",[92,110,111,112,115,116,119,120,127],{},"To manually integrate crossws with your Bun server, you need to handle upgrade with ",[96,113,114],{},"handleUpgrade"," util and also pass the ",[96,117,118],{},"websocket"," object returned from the adapter to server options. crossws leverages native bun ",[121,122,126],"a",{"href":123,"rel":124},"https:\u002F\u002Fbun.sh\u002Fdocs\u002Fapi\u002Fwebsockets",[125],"nofollow","WebSocket API",".",[129,130,135],"pre",{"className":131,"code":132,"language":133,"meta":134,"style":134},"language-ts shiki shiki-themes github-light github-dark github-dark","import crossws from \"crossws\u002Fadapters\u002Fbun\";\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:\u002F\u002Flocalhost:3000\").addEventListener('open', (e) => e.target.send(\"Hello from client!\"));\u003C\u002Fscript>`,\n      { headers: { \"content-type\": \"text\u002Fhtml\" } },\n    );\n  },\n});\n","ts","",[96,136,137,160,167,187,193,199,205,211,216,226,238,244,266,294,308,314,329,337,355,361,366],{"__ignoreMap":134},[138,139,142,146,150,153,157],"span",{"class":140,"line":141},"line",1,[138,143,145],{"class":144},"so5gQ","import",[138,147,149],{"class":148},"slsVL"," crossws ",[138,151,152],{"class":144},"from",[138,154,156],{"class":155},"sfrk1"," \"crossws\u002Fadapters\u002Fbun\"",[138,158,159],{"class":148},";\n",[138,161,163],{"class":140,"line":162},2,[138,164,166],{"emptyLinePlaceholder":165},true,"\n",[138,168,170,173,177,180,184],{"class":140,"line":169},3,[138,171,172],{"class":144},"const",[138,174,176],{"class":175},"suiK_"," ws",[138,178,179],{"class":144}," =",[138,181,183],{"class":182},"shcOC"," crossws",[138,185,186],{"class":148},"({\n",[138,188,190],{"class":140,"line":189},4,[138,191,192],{"class":148},"  hooks: {\n",[138,194,196],{"class":140,"line":195},5,[138,197,198],{"class":148},"    message: console.log,\n",[138,200,202],{"class":140,"line":201},6,[138,203,204],{"class":148},"  },\n",[138,206,208],{"class":140,"line":207},7,[138,209,210],{"class":148},"});\n",[138,212,214],{"class":140,"line":213},8,[138,215,166],{"emptyLinePlaceholder":165},[138,217,219,222,224],{"class":140,"line":218},9,[138,220,221],{"class":148},"Bun.",[138,223,98],{"class":182},[138,225,186],{"class":148},[138,227,229,232,235],{"class":140,"line":228},10,[138,230,231],{"class":148},"  port: ",[138,233,234],{"class":175},"3000",[138,236,237],{"class":148},",\n",[138,239,241],{"class":140,"line":240},11,[138,242,243],{"class":148},"  websocket: ws.websocket,\n",[138,245,247,250,253,257,260,263],{"class":140,"line":246},12,[138,248,249],{"class":182},"  fetch",[138,251,252],{"class":148},"(",[138,254,256],{"class":255},"sQHwn","request",[138,258,259],{"class":148},", ",[138,261,262],{"class":255},"server",[138,264,265],{"class":148},") {\n",[138,267,269,272,275,278,280,283,286,289,292],{"class":140,"line":268},13,[138,270,271],{"class":144},"    if",[138,273,274],{"class":148}," (request.headers.",[138,276,277],{"class":182},"get",[138,279,252],{"class":148},[138,281,282],{"class":155},"\"upgrade\"",[138,284,285],{"class":148},") ",[138,287,288],{"class":144},"===",[138,290,291],{"class":155}," \"websocket\"",[138,293,265],{"class":148},[138,295,297,300,303,305],{"class":140,"line":296},14,[138,298,299],{"class":144},"      return",[138,301,302],{"class":148}," ws.",[138,304,114],{"class":182},[138,306,307],{"class":148},"(request, server);\n",[138,309,311],{"class":140,"line":310},15,[138,312,313],{"class":148},"    }\n",[138,315,317,320,323,326],{"class":140,"line":316},16,[138,318,319],{"class":144},"    return",[138,321,322],{"class":144}," new",[138,324,325],{"class":182}," Response",[138,327,328],{"class":148},"(\n",[138,330,332,335],{"class":140,"line":331},17,[138,333,334],{"class":155},"      `\u003Cscript>new WebSocket(\"ws:\u002F\u002Flocalhost:3000\").addEventListener('open', (e) => e.target.send(\"Hello from client!\"));\u003C\u002Fscript>`",[138,336,237],{"class":148},[138,338,340,343,346,349,352],{"class":140,"line":339},18,[138,341,342],{"class":148},"      { headers: { ",[138,344,345],{"class":155},"\"content-type\"",[138,347,348],{"class":148},": ",[138,350,351],{"class":155},"\"text\u002Fhtml\"",[138,353,354],{"class":148}," } },\n",[138,356,358],{"class":140,"line":357},19,[138,359,360],{"class":148},"    );\n",[138,362,364],{"class":140,"line":363},20,[138,365,204],{"class":148},[138,367,369],{"class":140,"line":368},21,[138,370,210],{"class":148},[372,373,374],"read-more",{},[92,375,376,377,384,385,392],{},"See ",[121,378,381],{"href":379,"rel":380},"https:\u002F\u002Fgithub.com\u002Fh3js\u002Fcrossws\u002Fblob\u002Fmain\u002Ftest\u002Ffixture\u002Fbun.ts",[125],[96,382,383],{},"test\u002Ffixture\u002Fbun.ts"," for demo and ",[121,386,389],{"href":387,"rel":388},"https:\u002F\u002Fgithub.com\u002Fh3js\u002Fcrossws\u002Fblob\u002Fmain\u002Fsrc\u002Fadapters\u002Fbun.ts",[125],[96,390,391],{},"src\u002Fadapters\u002Fbun.ts"," for implementation.",[394,395,396],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}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":134,"searchDepth":162,"depth":162,"links":398},[],"Manually integrate crossws with Bun.","md",{"icon":57},{"icon":57},{"title":54,"description":399},"rjlG8BE8jnXTw8iq2pC90IyoRJ9ZuM2cNWnI5gn-nzY",[406,407],{"title":47,"path":48,"stem":49,"description":134,"icon":52,"children":-1},{"title":59,"path":60,"stem":61,"description":408,"icon":62,"children":-1},"Manually integrate crossws with Bunny.net Edge Scripting.",1782852616978]