[{"data":1,"prerenderedAt":340},["ShallowReactive",2],{"navigation":3,"-guide-resolver":72,"-guide-resolver-surround":337},[4,36],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Getting Started","/guide","1.guide/1.index",[9,11,16,21,26,31],{"title":5,"path":6,"stem":7,"icon":10},"ph:book-open-duotone",{"title":12,"path":13,"stem":14,"icon":15},"Hooks","/guide/hooks","1.guide/2.hooks","material-symbols-light:data-object",{"title":17,"path":18,"stem":19,"icon":20},"Peer","/guide/peer","1.guide/3.peer","mynaui:api",{"title":22,"path":23,"stem":24,"icon":25},"Message","/guide/message","1.guide/4.message","solar:letter-line-duotone",{"title":27,"path":28,"stem":29,"icon":30},"Pub / Sub","/guide/pubsub","1.guide/5.pubsub","simple-icons:googlepubsub",{"title":32,"path":33,"stem":34,"icon":35},"Resolver API","/guide/resolver","1.guide/6.resolver","tabler:route",{"title":37,"path":38,"stem":39,"children":40,"icon":42},"Adapters","/adapters","2.adapters/1.index",[41,43,48,52,57,62,67],{"title":37,"path":38,"stem":39,"icon":42},"emojione-monotone:electric-plug",{"title":44,"path":45,"stem":46,"icon":47},"Bun","/adapters/bun","2.adapters/bun","simple-icons:bun",{"title":49,"path":50,"stem":51},"Bunny","/adapters/bunny","2.adapters/bunny",{"title":53,"path":54,"stem":55,"icon":56},"Cloudflare","/adapters/cloudflare","2.adapters/cloudflare","devicon-plain:cloudflareworkers",{"title":58,"path":59,"stem":60,"icon":61},"Deno","/adapters/deno","2.adapters/deno","teenyicons:deno-solid",{"title":63,"path":64,"stem":65,"icon":66},"Node.js","/adapters/node","2.adapters/node","akar-icons:node-fill",{"title":68,"path":69,"stem":70,"icon":71},"SSE","/adapters/sse","2.adapters/sse","clarity:two-way-arrows-line",{"id":73,"title":32,"body":74,"description":93,"extension":332,"meta":333,"navigation":334,"path":33,"seo":335,"stem":34,"__hash__":336},"content/1.guide/6.resolver.md",{"type":75,"value":76,"toc":330,"icon":35},"minimark",[77,81,87,238,241,326],[78,79,80],"p",{},"When integrating WebSockets with larger projects, it is often needed to dynamically route an incoming event to websocket hooks. crossws provides a very simple mechanism to do this using resolver API.",[82,83,84],"tip",{},[78,85,86],{},"\nResolver supports async results. This allows implementing lazy loading.",[88,89,94],"pre",{"className":90,"code":91,"language":92,"meta":93,"style":93},"language-js shiki shiki-themes github-light github-dark github-dark","// https://crossws.h3.dev/adapters\nimport crossws from \"crossws/adapters/\u003Cadapter>\";\n\nimport { defineHooks } from \"crossws\";\n\nconst websocket = crossws({\n  async resolve(req) {\n    // TODO: Resolve hooks based on req.url, req.headers\n    // You can return undefined in case there is no match\n    return {\n      /* resolved hooks */\n    };\n  },\n});\n","js","",[95,96,97,106,127,134,149,154,174,193,199,205,214,220,226,232],"code",{"__ignoreMap":93},[98,99,102],"span",{"class":100,"line":101},"line",1,[98,103,105],{"class":104},"sCsY4","// https://crossws.h3.dev/adapters\n",[98,107,109,113,117,120,124],{"class":100,"line":108},2,[98,110,112],{"class":111},"so5gQ","import",[98,114,116],{"class":115},"slsVL"," crossws ",[98,118,119],{"class":111},"from",[98,121,123],{"class":122},"sfrk1"," \"crossws/adapters/\u003Cadapter>\"",[98,125,126],{"class":115},";\n",[98,128,130],{"class":100,"line":129},3,[98,131,133],{"emptyLinePlaceholder":132},true,"\n",[98,135,137,139,142,144,147],{"class":100,"line":136},4,[98,138,112],{"class":111},[98,140,141],{"class":115}," { defineHooks } ",[98,143,119],{"class":111},[98,145,146],{"class":122}," \"crossws\"",[98,148,126],{"class":115},[98,150,152],{"class":100,"line":151},5,[98,153,133],{"emptyLinePlaceholder":132},[98,155,157,160,164,167,171],{"class":100,"line":156},6,[98,158,159],{"class":111},"const",[98,161,163],{"class":162},"suiK_"," websocket",[98,165,166],{"class":111}," =",[98,168,170],{"class":169},"shcOC"," crossws",[98,172,173],{"class":115},"({\n",[98,175,177,180,183,186,190],{"class":100,"line":176},7,[98,178,179],{"class":111},"  async",[98,181,182],{"class":169}," resolve",[98,184,185],{"class":115},"(",[98,187,189],{"class":188},"sQHwn","req",[98,191,192],{"class":115},") {\n",[98,194,196],{"class":100,"line":195},8,[98,197,198],{"class":104},"    // TODO: Resolve hooks based on req.url, req.headers\n",[98,200,202],{"class":100,"line":201},9,[98,203,204],{"class":104},"    // You can return undefined in case there is no match\n",[98,206,208,211],{"class":100,"line":207},10,[98,209,210],{"class":111},"    return",[98,212,213],{"class":115}," {\n",[98,215,217],{"class":100,"line":216},11,[98,218,219],{"class":104},"      /* resolved hooks */\n",[98,221,223],{"class":100,"line":222},12,[98,224,225],{"class":115},"    };\n",[98,227,229],{"class":100,"line":228},13,[98,230,231],{"class":115},"  },\n",[98,233,235],{"class":100,"line":234},14,[98,236,237],{"class":115},"});\n",[78,239,240],{},"If you need to change resolve function (for cases like handling HMR):",[88,242,246],{"className":243,"code":244,"language":245,"meta":93,"style":93},"language-ts shiki shiki-themes github-light github-dark github-dark","let resolveWebSocketHooks = (req) => /* ... */\n\nconst websocket = crossws({\n  async resolve(req) {\n    return resolveWebSocketHooks(req)\n  },\n});\n\n// Update reference to `resolveWebSocketHooks` later.\n","ts",[95,247,248,272,276,288,300,309,313,317,321],{"__ignoreMap":93},[98,249,250,253,256,258,261,263,266,269],{"class":100,"line":101},[98,251,252],{"class":111},"let",[98,254,255],{"class":169}," resolveWebSocketHooks",[98,257,166],{"class":111},[98,259,260],{"class":115}," (",[98,262,189],{"class":188},[98,264,265],{"class":115},") ",[98,267,268],{"class":111},"=>",[98,270,271],{"class":104}," /* ... */\n",[98,273,274],{"class":100,"line":108},[98,275,133],{"emptyLinePlaceholder":132},[98,277,278,280,282,284,286],{"class":100,"line":129},[98,279,159],{"class":111},[98,281,163],{"class":162},[98,283,166],{"class":111},[98,285,170],{"class":169},[98,287,173],{"class":115},[98,289,290,292,294,296,298],{"class":100,"line":136},[98,291,179],{"class":111},[98,293,182],{"class":169},[98,295,185],{"class":115},[98,297,189],{"class":188},[98,299,192],{"class":115},[98,301,302,304,306],{"class":100,"line":151},[98,303,210],{"class":111},[98,305,255],{"class":169},[98,307,308],{"class":115},"(req)\n",[98,310,311],{"class":100,"line":156},[98,312,231],{"class":115},[98,314,315],{"class":100,"line":176},[98,316,237],{"class":115},[98,318,319],{"class":100,"line":195},[98,320,133],{"emptyLinePlaceholder":132},[98,322,323],{"class":100,"line":201},[98,324,325],{"class":104},"// Update reference to `resolveWebSocketHooks` later.\n",[327,328,329],"style",{},"html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}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":93,"searchDepth":108,"depth":108,"links":331},[],"md",{"icon":35},{"icon":35},{"title":32,"description":93},"eNC9lXqfFeCPNXLWRAif5tzuziKptMdWfRgokRZm8Zk",[338,339],{"title":27,"path":28,"stem":29,"description":93,"icon":30,"children":-1},{"title":37,"path":38,"stem":39,"description":93,"icon":42,"children":-1},1771506027190]