[{"data":1,"prerenderedAt":1302},["ShallowReactive",2],{"navigation":3,"-guide-advanced-websocket":179,"-guide-advanced-websocket-surround":1298},[4,86,128,156,163],{"title":5,"path":6,"stem":7,"children":8,"icon":85},"Guide","/guide","1.guide/0.index",[9,12,48,64],{"title":10,"path":6,"stem":7,"icon":11},"Getting Started","pixel:play",{"title":5,"icon":13,"path":14,"stem":15,"children":16,"page":47},"ph:book-open-duotone","/guide/basics","1.guide/1.basics",[17,22,27,32,37,42],{"title":18,"path":19,"stem":20,"icon":21},"Request Lifecycle","/guide/basics/lifecycle","1.guide/1.basics/1.lifecycle","icon-park-outline:handle-round",{"title":23,"path":24,"stem":25,"icon":26},"Routing","/guide/basics/routing","1.guide/1.basics/2.routing","solar:routing-bold",{"title":28,"path":29,"stem":30,"icon":31},"Middleware","/guide/basics/middleware","1.guide/1.basics/3.middleware","mdi:middleware-outline",{"title":33,"path":34,"stem":35,"icon":36},"Event Handlers","/guide/basics/handler","1.guide/1.basics/4.handler","mdi:function",{"title":38,"path":39,"stem":40,"icon":41},"Sending Response","/guide/basics/response","1.guide/1.basics/5.response","tabler:json",{"title":43,"path":44,"stem":45,"icon":46},"Error Handling","/guide/basics/error","1.guide/1.basics/6.error","tabler:error-404",false,{"title":49,"icon":50,"path":51,"stem":52,"children":53,"page":47},"API","material-symbols-light:api-rounded","/guide/api","1.guide/900.api",[54,59],{"title":55,"path":56,"stem":57,"icon":58},"H3","/guide/api/h3","1.guide/900.api/1.h3","material-symbols:bolt-rounded",{"title":60,"path":61,"stem":62,"icon":63},"H3Event","/guide/api/h3event","1.guide/900.api/2.h3event","material-symbols:data-object-rounded",{"title":65,"icon":66,"path":67,"stem":68,"children":69,"page":47},"Advanced","hugeicons:more-01","/guide/advanced","1.guide/901.advanced",[70,75,80],{"title":71,"path":72,"stem":73,"icon":74},"Plugins","/guide/advanced/plugins","1.guide/901.advanced/1.plugins","clarity:plugin-line",{"title":76,"path":77,"stem":78,"icon":79},"WebSockets","/guide/advanced/websocket","1.guide/901.advanced/2.websocket","hugeicons:live-streaming-02",{"title":81,"path":82,"stem":83,"icon":84},"Nightly Builds","/guide/advanced/nightly","1.guide/901.advanced/9.nightly","game-icons:barn-owl","i-ph:book-open-duotone",{"title":87,"path":88,"stem":89,"children":90,"icon":92},"H3 Utils","/utils","2.utils/0.index",[91,93,98,103,108,113,118,123],{"title":87,"path":88,"stem":89,"icon":92},"ph:function-bold",{"title":94,"path":95,"stem":96,"icon":97},"Request","/utils/request","2.utils/1.request","material-symbols-light:input",{"title":99,"path":100,"stem":101,"icon":102},"Response","/utils/response","2.utils/2.response","material-symbols-light:output",{"title":104,"path":105,"stem":106,"icon":107},"Cookie","/utils/cookie","2.utils/3.cookie","material-symbols:cookie-outline",{"title":109,"path":110,"stem":111,"icon":112},"Security","/utils/security","2.utils/4.security","wpf:key-security",{"title":114,"path":115,"stem":116,"icon":117},"Proxy","/utils/proxy","2.utils/5.proxy","arcticons:super-proxy",{"title":119,"path":120,"stem":121,"icon":122},"More utils","/utils/more","2.utils/9.more","mingcute:plus-line",{"title":124,"path":125,"stem":126,"icon":127},"Community","/utils/community","2.utils/99.community","lets-icons:external",{"title":129,"path":130,"stem":131,"children":132,"icon":134},"Examples","/examples","4.examples/0.index",[133,135,140,144,148,152],{"title":129,"path":130,"stem":131,"icon":134},"ph:code",{"title":136,"path":137,"stem":138,"icon":139},"Cookies","/examples/handle-cookie","4.examples/handle-cookie","ph:arrow-right",{"title":141,"path":142,"stem":143,"icon":139},"Sessions","/examples/handle-session","4.examples/handle-session",{"title":145,"path":146,"stem":147,"icon":139},"Static Assets","/examples/serve-static-assets","4.examples/serve-static-assets",{"title":149,"path":150,"stem":151,"icon":139},"Stream Response","/examples/stream-response","4.examples/stream-response",{"title":153,"path":154,"stem":155,"icon":139},"Validate Data","/examples/validate-data","4.examples/validate-data",{"title":157,"path":158,"stem":159,"children":160,"icon":162},"Migration guide for v1 to v2","/migration","5.migration/0.index",[161],{"title":157,"path":158,"stem":159,"icon":162},"icons8:up-round",{"title":164,"path":165,"stem":166,"children":167,"page":-1},"Blog","/blog","99.blog",[168,171,175],{"title":164,"path":165,"stem":169,"icon":170},"99.blog/index","i-lucide-file-text",{"title":172,"path":173,"stem":174,"icon":170},"H3 1.8 - Towards the Edge of the Web","/blog/v1.8","99.blog/1.v1.8",{"title":176,"path":177,"stem":178,"icon":170},"H3 v2 beta","/blog/v2-beta","99.blog/2.v2-beta",{"id":180,"title":76,"body":181,"description":1292,"extension":1293,"meta":1294,"navigation":1295,"path":77,"seo":1296,"stem":78,"__hash__":1297},"content/1.guide/901.advanced/2.websocket.md",{"type":182,"value":183,"toc":1286,"icon":79},"minimark",[184,196,202,207,215,226,409,415,1035,1039,1047,1054,1059,1282],[185,186,187,188,195],"p",{},"You can add cross platform WebSocket support to H3 servers using ",[189,190,194],"a",{"href":191,"rel":192},"https://crossws.h3.dev/",[193],"nofollow","🔌 CrossWS",".",[197,198,199],"important",{},[185,200,201],{},"\nBuilt-in support of WebSockets in h3 version is WIP.",[203,204,206],"h2",{"id":205},"usage","Usage",[185,208,209,210,214],{},"WebSocket handlers can be defined using the ",[211,212,213],"code",{},"defineWebSocketHandler()"," utility and registered to any route like event handlers.",[185,216,217,218,221,222,225],{},"You need to register CrossWS as a server plugin in the ",[211,219,220],{},"serve"," function and provide a ",[211,223,224],{},"resolve"," function to resolve the correct hooks from the route.",[227,228,233],"pre",{"className":229,"code":230,"language":231,"meta":232,"style":232},"language-js shiki shiki-themes github-light github-dark github-dark","import { H3, serve, defineWebSocketHandler } from \"h3\";\n\nimport { plugin as ws } from \"crossws/server\";\n\nconst app = new H3();\n\napp.get(\"/_ws\", defineWebSocketHandler({ message: console.log }));\n\nserve(app, {\n  plugins: [ws({ resolve: async (req) => (await app.fetch(req)).crossws })],\n});\n","js","",[211,234,235,258,265,286,291,314,319,343,348,356,403],{"__ignoreMap":232},[236,237,240,244,248,251,255],"span",{"class":238,"line":239},"line",1,[236,241,243],{"class":242},"so5gQ","import",[236,245,247],{"class":246},"slsVL"," { H3, serve, defineWebSocketHandler } ",[236,249,250],{"class":242},"from",[236,252,254],{"class":253},"sfrk1"," \"h3\"",[236,256,257],{"class":246},";\n",[236,259,261],{"class":238,"line":260},2,[236,262,264],{"emptyLinePlaceholder":263},true,"\n",[236,266,268,270,273,276,279,281,284],{"class":238,"line":267},3,[236,269,243],{"class":242},[236,271,272],{"class":246}," { plugin ",[236,274,275],{"class":242},"as",[236,277,278],{"class":246}," ws } ",[236,280,250],{"class":242},[236,282,283],{"class":253}," \"crossws/server\"",[236,285,257],{"class":246},[236,287,289],{"class":238,"line":288},4,[236,290,264],{"emptyLinePlaceholder":263},[236,292,294,297,301,304,307,311],{"class":238,"line":293},5,[236,295,296],{"class":242},"const",[236,298,300],{"class":299},"suiK_"," app",[236,302,303],{"class":242}," =",[236,305,306],{"class":242}," new",[236,308,310],{"class":309},"shcOC"," H3",[236,312,313],{"class":246},"();\n",[236,315,317],{"class":238,"line":316},6,[236,318,264],{"emptyLinePlaceholder":263},[236,320,322,325,328,331,334,337,340],{"class":238,"line":321},7,[236,323,324],{"class":246},"app.",[236,326,327],{"class":309},"get",[236,329,330],{"class":246},"(",[236,332,333],{"class":253},"\"/_ws\"",[236,335,336],{"class":246},", ",[236,338,339],{"class":309},"defineWebSocketHandler",[236,341,342],{"class":246},"({ message: console.log }));\n",[236,344,346],{"class":238,"line":345},8,[236,347,264],{"emptyLinePlaceholder":263},[236,349,351,353],{"class":238,"line":350},9,[236,352,220],{"class":309},[236,354,355],{"class":246},"(app, {\n",[236,357,359,362,365,368,370,373,376,379,383,386,389,391,394,397,400],{"class":238,"line":358},10,[236,360,361],{"class":246},"  plugins: [",[236,363,364],{"class":309},"ws",[236,366,367],{"class":246},"({ ",[236,369,224],{"class":309},[236,371,372],{"class":246},": ",[236,374,375],{"class":242},"async",[236,377,378],{"class":246}," (",[236,380,382],{"class":381},"sQHwn","req",[236,384,385],{"class":246},") ",[236,387,388],{"class":242},"=>",[236,390,378],{"class":246},[236,392,393],{"class":242},"await",[236,395,396],{"class":246}," app.",[236,398,399],{"class":309},"fetch",[236,401,402],{"class":246},"(req)).crossws })],\n",[236,404,406],{"class":238,"line":405},11,[236,407,408],{"class":246},"});\n",[185,410,411],{},[412,413,414],"strong",{},"Full example:",[227,416,419],{"className":229,"code":417,"filename":418,"language":231,"meta":232,"style":232},"import { H3, serve, defineWebSocketHandler } from \"h3\";\nimport { plugin as ws } from \"crossws/server\";\n\nexport const app = new H3();\n\nconst demoURL =\n  \"https://raw.githubusercontent.com/h3js/crossws/refs/heads/main/playground/public/index.html\";\n\napp.get(\"/\", () =>\n  fetch(demoURL).then(\n    (res) =>\n      new Response(res.body, { headers: { \"Content-Type\": \"text/html\" } }),\n  ),\n);\n\napp.get(\n  \"/_ws\",\n  defineWebSocketHandler({\n    // upgrade(req) {},\n    open(peer) {\n      console.log(\"[open]\", peer);\n\n      // Send welcome to the new client\n      peer.send(\"Welcome to the server!\");\n\n      // Join new client to the \"chat\" channel\n      peer.subscribe(\"chat\");\n\n      // Notify every other connected client\n      peer.publish(\"chat\", `[system] ${peer} joined!`);\n    },\n\n    message(peer, message) {\n      console.log(\"[message]\", peer);\n\n      if (message.text() === \"ping\") {\n        // Reply to the client with a ping response\n        peer.send(\"pong\");\n        return;\n      }\n\n      // The server re-broadcasts incoming messages to everyone\n      peer.publish(\"chat\", `[${peer}] ${message}`);\n\n      // Echo the message back to the sender\n      peer.send(message);\n    },\n\n    close(peer) {\n      console.log(\"[close]\", peer);\n      peer.publish(\"chat\", `[system] ${peer} has left the chat!`);\n      peer.unsubscribe(\"chat\");\n    },\n  }),\n);\n\nserve(app, {\n  plugins: [ws({ resolve: async (req) => (await app.fetch(req)).crossws })],\n});\n","websocket.mjs",[211,420,421,433,449,453,471,475,485,492,496,513,527,539,562,568,574,579,588,597,606,613,627,644,649,655,671,676,682,697,702,708,732,738,743,760,774,779,802,808,823,831,837,842,848,876,881,887,897,902,907,919,933,955,969,974,980,985,990,997,1030],{"__ignoreMap":232},[236,422,423,425,427,429,431],{"class":238,"line":239},[236,424,243],{"class":242},[236,426,247],{"class":246},[236,428,250],{"class":242},[236,430,254],{"class":253},[236,432,257],{"class":246},[236,434,435,437,439,441,443,445,447],{"class":238,"line":260},[236,436,243],{"class":242},[236,438,272],{"class":246},[236,440,275],{"class":242},[236,442,278],{"class":246},[236,444,250],{"class":242},[236,446,283],{"class":253},[236,448,257],{"class":246},[236,450,451],{"class":238,"line":267},[236,452,264],{"emptyLinePlaceholder":263},[236,454,455,458,461,463,465,467,469],{"class":238,"line":288},[236,456,457],{"class":242},"export",[236,459,460],{"class":242}," const",[236,462,300],{"class":299},[236,464,303],{"class":242},[236,466,306],{"class":242},[236,468,310],{"class":309},[236,470,313],{"class":246},[236,472,473],{"class":238,"line":293},[236,474,264],{"emptyLinePlaceholder":263},[236,476,477,479,482],{"class":238,"line":316},[236,478,296],{"class":242},[236,480,481],{"class":299}," demoURL",[236,483,484],{"class":242}," =\n",[236,486,487,490],{"class":238,"line":321},[236,488,489],{"class":253},"  \"https://raw.githubusercontent.com/h3js/crossws/refs/heads/main/playground/public/index.html\"",[236,491,257],{"class":246},[236,493,494],{"class":238,"line":345},[236,495,264],{"emptyLinePlaceholder":263},[236,497,498,500,502,504,507,510],{"class":238,"line":350},[236,499,324],{"class":246},[236,501,327],{"class":309},[236,503,330],{"class":246},[236,505,506],{"class":253},"\"/\"",[236,508,509],{"class":246},", () ",[236,511,512],{"class":242},"=>\n",[236,514,515,518,521,524],{"class":238,"line":358},[236,516,517],{"class":309},"  fetch",[236,519,520],{"class":246},"(demoURL).",[236,522,523],{"class":309},"then",[236,525,526],{"class":246},"(\n",[236,528,529,532,535,537],{"class":238,"line":405},[236,530,531],{"class":246},"    (",[236,533,534],{"class":381},"res",[236,536,385],{"class":246},[236,538,512],{"class":242},[236,540,542,545,548,551,554,556,559],{"class":238,"line":541},12,[236,543,544],{"class":242},"      new",[236,546,547],{"class":309}," Response",[236,549,550],{"class":246},"(res.body, { headers: { ",[236,552,553],{"class":253},"\"Content-Type\"",[236,555,372],{"class":246},[236,557,558],{"class":253},"\"text/html\"",[236,560,561],{"class":246}," } }),\n",[236,563,565],{"class":238,"line":564},13,[236,566,567],{"class":246},"  ),\n",[236,569,571],{"class":238,"line":570},14,[236,572,573],{"class":246},");\n",[236,575,577],{"class":238,"line":576},15,[236,578,264],{"emptyLinePlaceholder":263},[236,580,582,584,586],{"class":238,"line":581},16,[236,583,324],{"class":246},[236,585,327],{"class":309},[236,587,526],{"class":246},[236,589,591,594],{"class":238,"line":590},17,[236,592,593],{"class":253},"  \"/_ws\"",[236,595,596],{"class":246},",\n",[236,598,600,603],{"class":238,"line":599},18,[236,601,602],{"class":309},"  defineWebSocketHandler",[236,604,605],{"class":246},"({\n",[236,607,609],{"class":238,"line":608},19,[236,610,612],{"class":611},"sCsY4","    // upgrade(req) {},\n",[236,614,616,619,621,624],{"class":238,"line":615},20,[236,617,618],{"class":309},"    open",[236,620,330],{"class":246},[236,622,623],{"class":381},"peer",[236,625,626],{"class":246},") {\n",[236,628,630,633,636,638,641],{"class":238,"line":629},21,[236,631,632],{"class":246},"      console.",[236,634,635],{"class":309},"log",[236,637,330],{"class":246},[236,639,640],{"class":253},"\"[open]\"",[236,642,643],{"class":246},", peer);\n",[236,645,647],{"class":238,"line":646},22,[236,648,264],{"emptyLinePlaceholder":263},[236,650,652],{"class":238,"line":651},23,[236,653,654],{"class":611},"      // Send welcome to the new client\n",[236,656,658,661,664,666,669],{"class":238,"line":657},24,[236,659,660],{"class":246},"      peer.",[236,662,663],{"class":309},"send",[236,665,330],{"class":246},[236,667,668],{"class":253},"\"Welcome to the server!\"",[236,670,573],{"class":246},[236,672,674],{"class":238,"line":673},25,[236,675,264],{"emptyLinePlaceholder":263},[236,677,679],{"class":238,"line":678},26,[236,680,681],{"class":611},"      // Join new client to the \"chat\" channel\n",[236,683,685,687,690,692,695],{"class":238,"line":684},27,[236,686,660],{"class":246},[236,688,689],{"class":309},"subscribe",[236,691,330],{"class":246},[236,693,694],{"class":253},"\"chat\"",[236,696,573],{"class":246},[236,698,700],{"class":238,"line":699},28,[236,701,264],{"emptyLinePlaceholder":263},[236,703,705],{"class":238,"line":704},29,[236,706,707],{"class":611},"      // Notify every other connected client\n",[236,709,711,713,716,718,720,722,725,727,730],{"class":238,"line":710},30,[236,712,660],{"class":246},[236,714,715],{"class":309},"publish",[236,717,330],{"class":246},[236,719,694],{"class":253},[236,721,336],{"class":246},[236,723,724],{"class":253},"`[system] ${",[236,726,623],{"class":246},[236,728,729],{"class":253},"} joined!`",[236,731,573],{"class":246},[236,733,735],{"class":238,"line":734},31,[236,736,737],{"class":246},"    },\n",[236,739,741],{"class":238,"line":740},32,[236,742,264],{"emptyLinePlaceholder":263},[236,744,746,749,751,753,755,758],{"class":238,"line":745},33,[236,747,748],{"class":309},"    message",[236,750,330],{"class":246},[236,752,623],{"class":381},[236,754,336],{"class":246},[236,756,757],{"class":381},"message",[236,759,626],{"class":246},[236,761,763,765,767,769,772],{"class":238,"line":762},34,[236,764,632],{"class":246},[236,766,635],{"class":309},[236,768,330],{"class":246},[236,770,771],{"class":253},"\"[message]\"",[236,773,643],{"class":246},[236,775,777],{"class":238,"line":776},35,[236,778,264],{"emptyLinePlaceholder":263},[236,780,782,785,788,791,794,797,800],{"class":238,"line":781},36,[236,783,784],{"class":242},"      if",[236,786,787],{"class":246}," (message.",[236,789,790],{"class":309},"text",[236,792,793],{"class":246},"() ",[236,795,796],{"class":242},"===",[236,798,799],{"class":253}," \"ping\"",[236,801,626],{"class":246},[236,803,805],{"class":238,"line":804},37,[236,806,807],{"class":611},"        // Reply to the client with a ping response\n",[236,809,811,814,816,818,821],{"class":238,"line":810},38,[236,812,813],{"class":246},"        peer.",[236,815,663],{"class":309},[236,817,330],{"class":246},[236,819,820],{"class":253},"\"pong\"",[236,822,573],{"class":246},[236,824,826,829],{"class":238,"line":825},39,[236,827,828],{"class":242},"        return",[236,830,257],{"class":246},[236,832,834],{"class":238,"line":833},40,[236,835,836],{"class":246},"      }\n",[236,838,840],{"class":238,"line":839},41,[236,841,264],{"emptyLinePlaceholder":263},[236,843,845],{"class":238,"line":844},42,[236,846,847],{"class":611},"      // The server re-broadcasts incoming messages to everyone\n",[236,849,851,853,855,857,859,861,864,866,869,871,874],{"class":238,"line":850},43,[236,852,660],{"class":246},[236,854,715],{"class":309},[236,856,330],{"class":246},[236,858,694],{"class":253},[236,860,336],{"class":246},[236,862,863],{"class":253},"`[${",[236,865,623],{"class":246},[236,867,868],{"class":253},"}] ${",[236,870,757],{"class":246},[236,872,873],{"class":253},"}`",[236,875,573],{"class":246},[236,877,879],{"class":238,"line":878},44,[236,880,264],{"emptyLinePlaceholder":263},[236,882,884],{"class":238,"line":883},45,[236,885,886],{"class":611},"      // Echo the message back to the sender\n",[236,888,890,892,894],{"class":238,"line":889},46,[236,891,660],{"class":246},[236,893,663],{"class":309},[236,895,896],{"class":246},"(message);\n",[236,898,900],{"class":238,"line":899},47,[236,901,737],{"class":246},[236,903,905],{"class":238,"line":904},48,[236,906,264],{"emptyLinePlaceholder":263},[236,908,910,913,915,917],{"class":238,"line":909},49,[236,911,912],{"class":309},"    close",[236,914,330],{"class":246},[236,916,623],{"class":381},[236,918,626],{"class":246},[236,920,922,924,926,928,931],{"class":238,"line":921},50,[236,923,632],{"class":246},[236,925,635],{"class":309},[236,927,330],{"class":246},[236,929,930],{"class":253},"\"[close]\"",[236,932,643],{"class":246},[236,934,936,938,940,942,944,946,948,950,953],{"class":238,"line":935},51,[236,937,660],{"class":246},[236,939,715],{"class":309},[236,941,330],{"class":246},[236,943,694],{"class":253},[236,945,336],{"class":246},[236,947,724],{"class":253},[236,949,623],{"class":246},[236,951,952],{"class":253},"} has left the chat!`",[236,954,573],{"class":246},[236,956,958,960,963,965,967],{"class":238,"line":957},52,[236,959,660],{"class":246},[236,961,962],{"class":309},"unsubscribe",[236,964,330],{"class":246},[236,966,694],{"class":253},[236,968,573],{"class":246},[236,970,972],{"class":238,"line":971},53,[236,973,737],{"class":246},[236,975,977],{"class":238,"line":976},54,[236,978,979],{"class":246},"  }),\n",[236,981,983],{"class":238,"line":982},55,[236,984,573],{"class":246},[236,986,988],{"class":238,"line":987},56,[236,989,264],{"emptyLinePlaceholder":263},[236,991,993,995],{"class":238,"line":992},57,[236,994,220],{"class":309},[236,996,355],{"class":246},[236,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020,1022,1024,1026,1028],{"class":238,"line":999},58,[236,1001,361],{"class":246},[236,1003,364],{"class":309},[236,1005,367],{"class":246},[236,1007,224],{"class":309},[236,1009,372],{"class":246},[236,1011,375],{"class":242},[236,1013,378],{"class":246},[236,1015,382],{"class":381},[236,1017,385],{"class":246},[236,1019,388],{"class":242},[236,1021,378],{"class":246},[236,1023,393],{"class":242},[236,1025,396],{"class":246},[236,1027,399],{"class":309},[236,1029,402],{"class":246},[236,1031,1033],{"class":238,"line":1032},59,[236,1034,408],{"class":246},[203,1036,1038],{"id":1037},"server-sent-events-sse","Server-Sent Events (SSE)",[185,1040,1041,1042,195],{},"As an alternative to WebSockets, you can use ",[189,1043,1046],{"href":1044,"rel":1045},"https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events",[193],"Server-sent events",[185,1048,1049,1050,1053],{},"H3 has a built-in API to create server-sent events using ",[211,1051,1052],{},"createEventStream(event)"," utility.",[1055,1056,1058],"h3",{"id":1057},"example","Example",[227,1060,1063],{"className":229,"code":1061,"filename":1062,"language":231,"meta":232,"style":232},"import { H3, serve, createEventStream } from \"h3\";\n\nexport const app = new H3();\n\napp.get(\"/\", (event) => {\n  const eventStream = createEventStream(event);\n\n  // Send a message every second\n  const interval = setInterval(async () => {\n    await eventStream.push(\"Hello world\");\n  }, 1000);\n\n  // cleanup the interval when the connection is terminated or the writer is closed\n  eventStream.onClosed(() => {\n    console.log(\"Connection closed\");\n    clearInterval(interval);\n  });\n\n  return eventStream.send();\n});\n\nserve(app);\n","server-sent-events.mjs",[211,1064,1065,1078,1082,1098,1102,1125,1141,1145,1150,1173,1191,1201,1205,1210,1225,1239,1247,1252,1256,1267,1271,1275],{"__ignoreMap":232},[236,1066,1067,1069,1072,1074,1076],{"class":238,"line":239},[236,1068,243],{"class":242},[236,1070,1071],{"class":246}," { H3, serve, createEventStream } ",[236,1073,250],{"class":242},[236,1075,254],{"class":253},[236,1077,257],{"class":246},[236,1079,1080],{"class":238,"line":260},[236,1081,264],{"emptyLinePlaceholder":263},[236,1083,1084,1086,1088,1090,1092,1094,1096],{"class":238,"line":267},[236,1085,457],{"class":242},[236,1087,460],{"class":242},[236,1089,300],{"class":299},[236,1091,303],{"class":242},[236,1093,306],{"class":242},[236,1095,310],{"class":309},[236,1097,313],{"class":246},[236,1099,1100],{"class":238,"line":288},[236,1101,264],{"emptyLinePlaceholder":263},[236,1103,1104,1106,1108,1110,1112,1115,1118,1120,1122],{"class":238,"line":293},[236,1105,324],{"class":246},[236,1107,327],{"class":309},[236,1109,330],{"class":246},[236,1111,506],{"class":253},[236,1113,1114],{"class":246},", (",[236,1116,1117],{"class":381},"event",[236,1119,385],{"class":246},[236,1121,388],{"class":242},[236,1123,1124],{"class":246}," {\n",[236,1126,1127,1130,1133,1135,1138],{"class":238,"line":316},[236,1128,1129],{"class":242},"  const",[236,1131,1132],{"class":299}," eventStream",[236,1134,303],{"class":242},[236,1136,1137],{"class":309}," createEventStream",[236,1139,1140],{"class":246},"(event);\n",[236,1142,1143],{"class":238,"line":321},[236,1144,264],{"emptyLinePlaceholder":263},[236,1146,1147],{"class":238,"line":345},[236,1148,1149],{"class":611},"  // Send a message every second\n",[236,1151,1152,1154,1157,1159,1162,1164,1166,1169,1171],{"class":238,"line":350},[236,1153,1129],{"class":242},[236,1155,1156],{"class":299}," interval",[236,1158,303],{"class":242},[236,1160,1161],{"class":309}," setInterval",[236,1163,330],{"class":246},[236,1165,375],{"class":242},[236,1167,1168],{"class":246}," () ",[236,1170,388],{"class":242},[236,1172,1124],{"class":246},[236,1174,1175,1178,1181,1184,1186,1189],{"class":238,"line":358},[236,1176,1177],{"class":242},"    await",[236,1179,1180],{"class":246}," eventStream.",[236,1182,1183],{"class":309},"push",[236,1185,330],{"class":246},[236,1187,1188],{"class":253},"\"Hello world\"",[236,1190,573],{"class":246},[236,1192,1193,1196,1199],{"class":238,"line":405},[236,1194,1195],{"class":246},"  }, ",[236,1197,1198],{"class":299},"1000",[236,1200,573],{"class":246},[236,1202,1203],{"class":238,"line":541},[236,1204,264],{"emptyLinePlaceholder":263},[236,1206,1207],{"class":238,"line":564},[236,1208,1209],{"class":611},"  // cleanup the interval when the connection is terminated or the writer is closed\n",[236,1211,1212,1215,1218,1221,1223],{"class":238,"line":570},[236,1213,1214],{"class":246},"  eventStream.",[236,1216,1217],{"class":309},"onClosed",[236,1219,1220],{"class":246},"(() ",[236,1222,388],{"class":242},[236,1224,1124],{"class":246},[236,1226,1227,1230,1232,1234,1237],{"class":238,"line":576},[236,1228,1229],{"class":246},"    console.",[236,1231,635],{"class":309},[236,1233,330],{"class":246},[236,1235,1236],{"class":253},"\"Connection closed\"",[236,1238,573],{"class":246},[236,1240,1241,1244],{"class":238,"line":581},[236,1242,1243],{"class":309},"    clearInterval",[236,1245,1246],{"class":246},"(interval);\n",[236,1248,1249],{"class":238,"line":590},[236,1250,1251],{"class":246},"  });\n",[236,1253,1254],{"class":238,"line":599},[236,1255,264],{"emptyLinePlaceholder":263},[236,1257,1258,1261,1263,1265],{"class":238,"line":608},[236,1259,1260],{"class":242},"  return",[236,1262,1180],{"class":246},[236,1264,663],{"class":309},[236,1266,313],{"class":246},[236,1268,1269],{"class":238,"line":615},[236,1270,408],{"class":246},[236,1272,1273],{"class":238,"line":629},[236,1274,264],{"emptyLinePlaceholder":263},[236,1276,1277,1279],{"class":238,"line":646},[236,1278,220],{"class":309},[236,1280,1281],{"class":246},"(app);\n",[1283,1284,1285],"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);}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":232,"searchDepth":260,"depth":260,"links":1287},[1288,1289],{"id":205,"depth":260,"text":206},{"id":1037,"depth":260,"text":1038,"children":1290},[1291],{"id":1057,"depth":267,"text":1058},"H3 has built-in utilities for cross platform WebSocket and Server-Sent Events.","md",{"automd":263,"icon":79},{"icon":79},{"title":76,"description":1292},"HmYyg7-y14XVB3Jfr5jn84k1z_0xbBOSanj3Pg08-_U",[1299,1301],{"title":71,"path":72,"stem":73,"description":1300,"icon":74,"children":-1},"H3 plugins allow you to extend an H3 app instance with reusable logic.",{"title":81,"path":82,"stem":83,"description":232,"icon":84,"children":-1},1751015548903]