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