[{"data":1,"prerenderedAt":3511},["ShallowReactive",2],{"navigation":3,"examples-nav":393,"-examples-websocket":494,"-examples-websocket-surround":3508},[4,88,217,223,378,390],{"title":5,"path":6,"stem":7,"children":8,"icon":87},"","/docs","1.docs/1.index",[9,12,17,22,27,32,37,42,47,52,57,62,67,72,77,82],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-compass",{"title":13,"path":14,"stem":15,"icon":16},"Quick Start","/docs/quick-start","1.docs/2.quick-start","i-lucide-zap",{"title":18,"path":19,"stem":20,"icon":21},"Renderer","/docs/renderer","1.docs/4.renderer","ri:layout-masonry-line",{"title":23,"path":24,"stem":25,"icon":26},"Routing","/docs/routing","1.docs/5.routing","ri:direction-line",{"title":28,"path":29,"stem":30,"icon":31},"Assets","/docs/assets","1.docs/50.assets","ri:image-2-line",{"title":33,"path":34,"stem":35,"icon":36},"Configuration","/docs/configuration","1.docs/50.configuration","ri:settings-3-line",{"title":38,"path":39,"stem":40,"icon":41},"Database","/docs/database","1.docs/50.database","ri:database-2-line",{"title":43,"path":44,"stem":45,"icon":46},"Lifecycle","/docs/lifecycle","1.docs/50.lifecycle","i-lucide-layers",{"title":48,"path":49,"stem":50,"icon":51},"Plugins","/docs/plugins","1.docs/50.plugins","ri:plug-line",{"title":53,"path":54,"stem":55,"icon":56},"Tasks","/docs/tasks","1.docs/50.tasks","codicon:run-all",{"title":58,"path":59,"stem":60,"icon":61},"WebSocket","/docs/websocket","1.docs/50.websocket","ri:broadcast-fill",{"title":63,"path":64,"stem":65,"icon":66},"Server Entry","/docs/server-entry","1.docs/6.server-entry","ri:server-line",{"title":68,"path":69,"stem":70,"icon":71},"Cache","/docs/cache","1.docs/7.cache","ri:speed-line",{"title":73,"path":74,"stem":75,"icon":76},"KV Storage","/docs/storage","1.docs/8.storage","carbon:datastore",{"title":78,"path":79,"stem":80,"icon":81},"Migration Guide","/docs/migration","1.docs/99.migration","ri:arrow-right-up-line",{"title":83,"path":84,"stem":85,"icon":86},"Nightly Channel","/docs/nightly","1.docs/99.nightly","ri:moon-fill","i-lucide-book-open",{"title":89,"path":90,"stem":91,"children":92,"icon":94},"Deploy","/deploy","2.deploy/0.index",[93,95,116],{"title":89,"path":90,"stem":91,"icon":94},"ri:upload-cloud-2-line",{"title":96,"path":97,"stem":98,"children":99,"page":115},"Runtimes","/deploy/runtimes","2.deploy/10.runtimes",[100,105,110],{"title":101,"path":102,"stem":103,"icon":104},"Node.js","/deploy/runtimes/node","2.deploy/10.runtimes/1.node","akar-icons:node-fill",{"title":106,"path":107,"stem":108,"icon":109},"Bun","/deploy/runtimes/bun","2.deploy/10.runtimes/bun","simple-icons:bun",{"title":111,"path":112,"stem":113,"icon":114},"Deno","/deploy/runtimes/deno","2.deploy/10.runtimes/deno","simple-icons:deno",false,{"title":117,"path":118,"stem":119,"children":120,"page":115},"Providers","/deploy/providers","2.deploy/20.providers",[121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,205,209,213],{"title":122,"path":123,"stem":124},"Alwaysdata","/deploy/providers/alwaysdata","2.deploy/20.providers/alwaysdata",{"title":126,"path":127,"stem":128},"AWS Lambda","/deploy/providers/aws","2.deploy/20.providers/aws",{"title":130,"path":131,"stem":132},"AWS Amplify","/deploy/providers/aws-amplify","2.deploy/20.providers/aws-amplify",{"title":134,"path":135,"stem":136},"Azure","/deploy/providers/azure","2.deploy/20.providers/azure",{"title":138,"path":139,"stem":140},"Cleavr","/deploy/providers/cleavr","2.deploy/20.providers/cleavr",{"title":142,"path":143,"stem":144},"Cloudflare","/deploy/providers/cloudflare","2.deploy/20.providers/cloudflare",{"title":146,"path":147,"stem":148},"Deno Deploy","/deploy/providers/deno-deploy","2.deploy/20.providers/deno-deploy",{"title":150,"path":151,"stem":152},"DigitalOcean","/deploy/providers/digitalocean","2.deploy/20.providers/digitalocean",{"title":154,"path":155,"stem":156},"Firebase","/deploy/providers/firebase","2.deploy/20.providers/firebase",{"title":158,"path":159,"stem":160},"Flightcontrol","/deploy/providers/flightcontrol","2.deploy/20.providers/flightcontrol",{"title":162,"path":163,"stem":164},"Genezio","/deploy/providers/genezio","2.deploy/20.providers/genezio",{"title":166,"path":167,"stem":168},"GitHub Pages","/deploy/providers/github-pages","2.deploy/20.providers/github-pages",{"title":170,"path":171,"stem":172},"GitLab Pages","/deploy/providers/gitlab-pages","2.deploy/20.providers/gitlab-pages",{"title":174,"path":175,"stem":176},"Heroku","/deploy/providers/heroku","2.deploy/20.providers/heroku",{"title":178,"path":179,"stem":180},"IIS","/deploy/providers/iis","2.deploy/20.providers/iis",{"title":182,"path":183,"stem":184},"Koyeb","/deploy/providers/koyeb","2.deploy/20.providers/koyeb",{"title":186,"path":187,"stem":188},"Netlify","/deploy/providers/netlify","2.deploy/20.providers/netlify",{"title":190,"path":191,"stem":192},"Platform.sh","/deploy/providers/platform-sh","2.deploy/20.providers/platform-sh",{"title":194,"path":195,"stem":196},"Render.com","/deploy/providers/render","2.deploy/20.providers/render",{"title":198,"path":199,"stem":200},"StormKit","/deploy/providers/stormkit","2.deploy/20.providers/stormkit",{"title":202,"path":203,"stem":204},"Vercel","/deploy/providers/vercel","2.deploy/20.providers/vercel",{"title":206,"path":207,"stem":208},"Zeabur","/deploy/providers/zeabur","2.deploy/20.providers/zeabur",{"title":210,"path":211,"stem":212},"Zephyr Cloud","/deploy/providers/zephyr","2.deploy/20.providers/zephyr",{"title":214,"path":215,"stem":216},"Zerops","/deploy/providers/zerops","2.deploy/20.providers/zerops",{"title":218,"path":219,"stem":220,"children":221,"icon":36},"Config","/config","3.config/0.index",[222],{"title":218,"path":219,"stem":220,"icon":36},{"title":224,"path":225,"stem":226,"children":227,"icon":229},"Examples","/examples","4.examples/0.index",[228,230,235,240,245,250,254,259,264,269,274,279,284,288,293,297,301,306,311,316,321,326,331,336,341,346,350,355,360,364,369,374],{"title":224,"path":225,"stem":226,"icon":229},"i-lucide-folder-code",{"title":231,"path":232,"stem":233,"icon":234},"API Routes","/examples/api-routes","4.examples/api-routes","i-lucide-route",{"title":236,"path":237,"stem":238,"icon":239},"Auto Imports","/examples/auto-imports","4.examples/auto-imports","i-lucide-import",{"title":241,"path":242,"stem":243,"icon":244},"Cached Handler","/examples/cached-handler","4.examples/cached-handler","i-lucide-clock",{"title":246,"path":247,"stem":248,"icon":249},"Custom Error Handler","/examples/custom-error-handler","4.examples/custom-error-handler","i-lucide-alert-circle",{"title":38,"path":251,"stem":252,"icon":253},"/examples/database","4.examples/database","i-lucide-database",{"title":255,"path":256,"stem":257,"icon":258},"Elysia","/examples/elysia","4.examples/elysia","i-skill-icons-elysia-dark",{"title":260,"path":261,"stem":262,"icon":263},"Express","/examples/express","4.examples/express","i-simple-icons-express",{"title":265,"path":266,"stem":267,"icon":268},"Fastify","/examples/fastify","4.examples/fastify","i-simple-icons-fastify",{"title":270,"path":271,"stem":272,"icon":273},"Hello World","/examples/hello-world","4.examples/hello-world","i-lucide-sparkles",{"title":275,"path":276,"stem":277,"icon":278},"Hono","/examples/hono","4.examples/hono","i-logos-hono",{"title":280,"path":281,"stem":282,"icon":283},"Import Alias","/examples/import-alias","4.examples/import-alias","i-lucide-at-sign",{"title":285,"path":286,"stem":287,"icon":46},"Middleware","/examples/middleware","4.examples/middleware",{"title":289,"path":290,"stem":291,"icon":292},"Mono JSX","/examples/mono-jsx","4.examples/mono-jsx","i-lucide-brackets",{"title":294,"path":295,"stem":296,"icon":292},"Nano JSX","/examples/nano-jsx","4.examples/nano-jsx",{"title":48,"path":298,"stem":299,"icon":300},"/examples/plugins","4.examples/plugins","i-lucide-plug",{"title":302,"path":303,"stem":304,"icon":305},"Custom Renderer","/examples/renderer","4.examples/renderer","i-lucide-code",{"title":307,"path":308,"stem":309,"icon":310},"Runtime Config","/examples/runtime-config","4.examples/runtime-config","i-lucide-settings",{"title":312,"path":313,"stem":314,"icon":315},"Server Fetch","/examples/server-fetch","4.examples/server-fetch","i-lucide-arrow-right-left",{"title":317,"path":318,"stem":319,"icon":320},"Shiki","/examples/shiki","4.examples/shiki","i-lucide-highlighter",{"title":322,"path":323,"stem":324,"icon":325},"Virtual Routes","/examples/virtual-routes","4.examples/virtual-routes","i-lucide-box",{"title":327,"path":328,"stem":329,"icon":330},"Vite Nitro Plugin","/examples/vite-nitro-plugin","4.examples/vite-nitro-plugin","i-logos-vitejs",{"title":332,"path":333,"stem":334,"icon":335},"Vite RSC","/examples/vite-rsc","4.examples/vite-rsc","i-logos-react",{"title":337,"path":338,"stem":339,"icon":340},"Vite SSR HTML","/examples/vite-ssr-html","4.examples/vite-ssr-html","i-logos-html-5",{"title":342,"path":343,"stem":344,"icon":345},"SSR with Preact","/examples/vite-ssr-preact","4.examples/vite-ssr-preact","i-logos-preact",{"title":347,"path":348,"stem":349,"icon":335},"SSR with React","/examples/vite-ssr-react","4.examples/vite-ssr-react",{"title":351,"path":352,"stem":353,"icon":354},"SSR with SolidJS","/examples/vite-ssr-solid","4.examples/vite-ssr-solid","i-logos-solidjs-icon",{"title":356,"path":357,"stem":358,"icon":359},"SSR with TanStack Router","/examples/vite-ssr-tsr-react","4.examples/vite-ssr-tsr-react","i-simple-icons-tanstack",{"title":361,"path":362,"stem":363,"icon":359},"SSR with TanStack Start","/examples/vite-ssr-tss-react","4.examples/vite-ssr-tss-react",{"title":365,"path":366,"stem":367,"icon":368},"SSR with Vue Router","/examples/vite-ssr-vue-router","4.examples/vite-ssr-vue-router","i-logos-vue",{"title":370,"path":371,"stem":372,"icon":373},"Vite + tRPC","/examples/vite-trpc","4.examples/vite-trpc","i-simple-icons-trpc",{"title":58,"path":375,"stem":376,"icon":377},"/examples/websocket","4.examples/websocket","i-lucide-radio",{"title":379,"path":380,"stem":381,"children":382},"Blog","/blog","9.blog",[383,386],{"title":379,"path":380,"stem":384,"icon":385},"9.blog/index","i-lucide-file-text",{"title":387,"path":388,"stem":389,"icon":385},"Nitro v3 Beta is here!","/blog/v3-beta","9.blog/1.v3-beta",{"title":5,"path":391,"stem":392},"/","index",[394,399,403,406,409,412,416,419,422,425,428,431,434,438,441,444,447,450,453,457,460,464,467,470,473,476,479,482,485,488,491],{"title":231,"description":395,"meta":396,"path":232},"File-based API routing with HTTP method support and dynamic parameters.",{"automd":397,"category":398,"icon":234},true,"features",{"title":236,"description":400,"meta":401,"path":237},"Automatic imports for utilities and composables.",{"automd":397,"category":402,"icon":239},"config",{"title":241,"description":404,"meta":405,"path":242},"Cache route responses with configurable bypass logic.",{"automd":397,"category":398,"icon":244},{"title":246,"description":407,"meta":408,"path":247},"Customize error responses with a global error handler.",{"automd":397,"category":398,"icon":249},{"title":38,"description":410,"meta":411,"path":251},"Built-in database support with SQL template literals.",{"automd":397,"category":398,"icon":253},{"title":255,"description":413,"meta":414,"path":256},"Integrate Elysia with Nitro using the server entry.",{"automd":397,"category":415,"icon":258},"backend frameworks",{"title":260,"description":417,"meta":418,"path":261},"Integrate Express with Nitro using the server entry.",{"automd":397,"category":415,"icon":263},{"title":265,"description":420,"meta":421,"path":266},"Integrate Fastify with Nitro using the server entry.",{"automd":397,"category":415,"icon":268},{"title":270,"description":423,"meta":424,"path":271},"Minimal Nitro server using the web standard fetch handler.",{"automd":397,"category":398,"icon":273},{"title":275,"description":426,"meta":427,"path":276},"Integrate Hono with Nitro using the server entry.",{"automd":397,"category":415,"icon":278},{"title":280,"description":429,"meta":430,"path":281},"Custom import aliases for cleaner module paths.",{"automd":397,"category":402,"icon":283},{"title":285,"description":432,"meta":433,"path":286},"Request middleware for authentication, logging, and request modification.",{"automd":397,"category":398,"icon":46},{"title":289,"description":435,"meta":436,"path":290},"Server-side JSX rendering in Nitro with mono-jsx.",{"automd":397,"category":437,"icon":292},"server side rendering",{"title":294,"description":439,"meta":440,"path":295},"Server-side JSX rendering in Nitro with nano-jsx.",{"automd":397,"category":437,"icon":292},{"title":48,"description":442,"meta":443,"path":298},"Extend Nitro with custom plugins for hooks and lifecycle events.",{"automd":397,"category":398,"icon":300},{"title":302,"description":445,"meta":446,"path":303},"Build a custom HTML renderer in Nitro with server-side data fetching.",{"automd":397,"category":437,"icon":305},{"title":307,"description":448,"meta":449,"path":308},"Environment-aware configuration with runtime access.",{"automd":397,"category":402,"icon":310},{"title":312,"description":451,"meta":452,"path":313},"Internal server-to-server requests without network overhead.",{"automd":397,"category":398,"icon":315},{"title":317,"description":454,"meta":455,"path":318},"Server-side syntax highlighting in Nitro with Shiki.",{"automd":397,"category":456,"icon":320},"integrations",{"title":322,"description":458,"meta":459,"path":323},"Define routes programmatically using Nitro's virtual module system.",{"automd":397,"category":398,"icon":325},{"title":327,"description":461,"meta":462,"path":328},"Use Nitro as a Vite plugin for programmatic configuration.",{"automd":397,"category":463,"icon":330},"vite",{"title":332,"description":465,"meta":466,"path":333},"React Server Components with Vite and Nitro.",{"automd":397,"category":463,"icon":335},{"title":337,"description":468,"meta":469,"path":338},"Server-side rendering with vanilla HTML, Vite, and Nitro.",{"automd":397,"category":437,"icon":340},{"title":342,"description":471,"meta":472,"path":343},"Server-side rendering with Preact in Nitro using Vite.",{"automd":397,"category":437,"icon":345},{"title":347,"description":474,"meta":475,"path":348},"Server-side rendering with React in Nitro using Vite.",{"automd":397,"category":437,"icon":335},{"title":351,"description":477,"meta":478,"path":352},"Server-side rendering with SolidJS in Nitro using Vite.",{"automd":397,"category":437,"icon":354},{"title":356,"description":480,"meta":481,"path":357},"Client-side routing with TanStack Router in Nitro using Vite.",{"automd":397,"category":437,"icon":359},{"title":361,"description":483,"meta":484,"path":362},"Full-stack React with TanStack Start in Nitro using Vite.",{"automd":397,"category":437,"icon":359},{"title":365,"description":486,"meta":487,"path":366},"Server-side rendering with Vue Router in Nitro using Vite.",{"automd":397,"category":437,"icon":368},{"title":370,"description":489,"meta":490,"path":371},"End-to-end typesafe APIs with tRPC in Nitro using Vite.",{"automd":397,"category":463,"icon":373},{"title":58,"description":492,"meta":493,"path":375},"Real-time bidirectional communication with WebSocket support.",{"automd":397,"category":398,"icon":377},{"id":495,"title":58,"body":496,"description":492,"extension":3503,"meta":3504,"navigation":3505,"path":375,"seo":3506,"stem":376,"__hash__":3507},"content/4.examples/websocket.md",{"type":497,"value":498,"toc":3499,"icon":377},"minimark",[499,3196,3199,3204,3210,3468,3475,3479,3496],[500,501,504,2663,2737,2823,2847,2901],"code-tree",{":expand-all":502,"default-value":503},"true","routes/_ws.ts",[505,506,511],"pre",{"className":507,"code":508,"filename":509,"language":510,"meta":5,"style":5},"language-html shiki shiki-themes github-light github-dark github-dark","\u003Chtml lang=\"en\" data-theme=\"dark\">\n  \u003Chead>\n    \u003Ctitle>CrossWS Test Page\u003C/title>\n    \u003Cscript src=\"https://cdn.tailwindcss.com\">\u003C/script>\n    \u003Cstyle>\n      body {\n        background-color: #1a1a1a;\n      }\n    \u003C/style>\n    \u003Cscript type=\"module\">\n      import { createApp, reactive, nextTick } from \"https://esm.sh/petite-vue@0.4.1\";\n\n      let ws;\n\n      const store = reactive({\n        message: \"\",\n        messages: [],\n      });\n\n      const scroll = () => {\n        nextTick(() => {\n          const el = document.querySelector(\"#messages\");\n          el.scrollTop = el.scrollHeight;\n          el.scrollTo({\n            top: el.scrollHeight,\n            behavior: \"smooth\",\n          });\n        });\n      };\n\n      const format = async () => {\n        for (const message of store.messages) {\n          if (!message._fmt && message.text.startsWith(\"{\")) {\n            message._fmt = true;\n            const { codeToHtml } = await import(\"https://esm.sh/shiki@1.0.0\");\n            const str = JSON.stringify(JSON.parse(message.text), null, 2);\n            message.formattedText = await codeToHtml(str, {\n              lang: \"json\",\n              theme: \"dark-plus\",\n            });\n          }\n        }\n      };\n\n      const log = (user, ...args) => {\n        console.log(\"[ws]\", user, ...args);\n        store.messages.push({\n          text: args.join(\" \"),\n          formattedText: \"\",\n          user: user,\n          date: new Date().toLocaleString(),\n        });\n        scroll();\n        format();\n      };\n\n      const connect = async () => {\n        const isSecure = location.protocol === \"https:\";\n        const url = (isSecure ? \"wss://\" : \"ws://\") + location.host + \"/_ws\";\n        if (ws) {\n          log(\"ws\", \"Closing previous connection before reconnecting...\");\n          ws.close();\n          clear();\n        }\n\n        log(\"ws\", \"Connecting to\", url, \"...\");\n        ws = new WebSocket(url);\n\n        ws.addEventListener(\"message\", async (event) => {\n          let data = typeof event.data === \"string\" ? event.data : await event.data.text();\n          const { user = \"system\", message = \"\" } = data.startsWith(\"{\")\n            ? JSON.parse(data)\n            : { message: data };\n          log(user, typeof message === \"string\" ? message : JSON.stringify(message));\n        });\n\n        await new Promise((resolve) => ws.addEventListener(\"open\", resolve));\n        log(\"ws\", \"Connected!\");\n      };\n\n      const clear = () => {\n        store.messages.splice(0, store.messages.length);\n        log(\"system\", \"previous messages cleared\");\n      };\n\n      const send = () => {\n        console.log(\"sending message...\");\n        if (store.message) {\n          ws.send(store.message);\n        }\n        store.message = \"\";\n      };\n\n      const ping = () => {\n        log(\"ws\", \"Sending ping\");\n        ws.send(\"ping\");\n      };\n\n      createApp({\n        store,\n        send,\n        ping,\n        clear,\n        connect,\n        rand: Math.random(),\n      }).mount();\n\n      await connect();\n    \u003C/script>\n  \u003C/head>\n  \u003Cbody class=\"h-screen flex flex-col justify-between\">\n    \u003Cmain v-scope=\"{}\">\n      \u003C!-- Messages -->\n      \u003Cdiv id=\"messages\" class=\"flex-grow flex flex-col justify-end px-4 py-8\">\n        \u003Cdiv class=\"flex items-center mb-4\" v-for=\"message in store.messages\">\n          \u003Cdiv class=\"flex flex-col\">\n            \u003Cp class=\"text-gray-500 mb-1 text-xs ml-10\">{{ message.user }}\u003C/p>\n            \u003Cdiv class=\"flex items-center\">\n              \u003Cimg\n                :src=\"'https://www.gravatar.com/avatar/' + encodeURIComponent(message.user + rand) + '?s=512&d=monsterid'\"\n                alt=\"Avatar\"\n                class=\"w-8 h-8 rounded-full\"\n              />\n              \u003Cdiv class=\"ml-2 bg-gray-800 rounded-lg p-2\">\n                \u003Cp\n                  v-if=\"message.formattedText\"\n                  class=\"overflow-x-scroll\"\n                  v-html=\"message.formattedText\"\n                >\u003C/p>\n                \u003Cp v-else class=\"text-white\">{{ message.text }}\u003C/p>\n              \u003C/div>\n            \u003C/div>\n            \u003Cp class=\"text-gray-500 mt-1 text-xs ml-10\">{{ message.date }}\u003C/p>\n          \u003C/div>\n        \u003C/div>\n      \u003C/div>\n\n      \u003C!-- Chatbox -->\n      \u003Cdiv class=\"bg-gray-800 px-4 py-2 flex items-center justify-between fixed bottom-0 w-full\">\n        \u003Cdiv class=\"w-full min-w-6\">\n          \u003Cinput\n            type=\"text\"\n            placeholder=\"Type your message...\"\n            class=\"w-full rounded-l-lg px-4 py-2 bg-gray-700 text-white focus:outline-none focus:ring focus:border-blue-300\"\n            @keydown.enter=\"send\"\n            v-model=\"store.message\"\n          />\n        \u003C/div>\n        \u003Cdiv class=\"flex\">\n          \u003Cbutton class=\"bg-blue-500 hover:bg-blue-600 text-white py-2 px-4\" @click=\"send\">\n            Send\n          \u003C/button>\n          \u003Cbutton class=\"bg-blue-500 hover:bg-blue-600 text-white py-2 px-4\" @click=\"ping\">\n            Ping\n          \u003C/button>\n          \u003Cbutton class=\"bg-blue-500 hover:bg-blue-600 text-white py-2 px-4\" @click=\"connect\">\n            Reconnect\n          \u003C/button>\n          \u003Cbutton\n            class=\"bg-blue-500 hover:bg-blue-600 text-white py-2 px-4 rounded-r-lg\"\n            @click=\"clear\"\n          >\n            Clear\n          \u003C/button>\n        \u003C/div>\n      \u003C/div>\n    \u003C/main>\n  \u003C/body>\n\u003C/html>\n`\n","index.html","html",[512,513,514,548,559,575,598,608,617,633,639,649,666,684,690,699,704,722,734,740,746,751,769,782,808,819,830,836,847,853,859,865,870,889,910,941,954,984,1027,1043,1054,1065,1071,1077,1083,1088,1093,1124,1146,1157,1174,1184,1190,1211,1216,1225,1233,1238,1243,1261,1283,1323,1332,1350,1361,1369,1374,1379,1402,1419,1424,1454,1494,1534,1549,1558,1591,1596,1601,1635,1651,1656,1661,1677,1698,1715,1720,1725,1741,1755,1763,1774,1779,1791,1796,1801,1817,1833,1847,1852,1857,1865,1871,1877,1883,1889,1895,1906,1917,1922,1932,1941,1951,1969,1987,1994,2020,2045,2062,2085,2101,2110,2121,2132,2143,2149,2165,2174,2185,2196,2206,2216,2240,2250,2260,2281,2291,2301,2311,2316,2322,2338,2354,2362,2373,2384,2395,2406,2417,2423,2432,2448,2473,2479,2488,2509,2515,2524,2546,2552,2561,2569,2579,2590,2596,2602,2611,2620,2629,2638,2647,2657],"code",{"__ignoreMap":5},[515,516,519,523,526,530,533,537,540,542,545],"span",{"class":517,"line":518},"line",1,[515,520,522],{"class":521},"slsVL","\u003C",[515,524,510],{"class":525},"sByVh",[515,527,529],{"class":528},"shcOC"," lang",[515,531,532],{"class":521},"=",[515,534,536],{"class":535},"sfrk1","\"en\"",[515,538,539],{"class":528}," data-theme",[515,541,532],{"class":521},[515,543,544],{"class":535},"\"dark\"",[515,546,547],{"class":521},">\n",[515,549,551,554,557],{"class":517,"line":550},2,[515,552,553],{"class":521},"  \u003C",[515,555,556],{"class":525},"head",[515,558,547],{"class":521},[515,560,562,565,568,571,573],{"class":517,"line":561},3,[515,563,564],{"class":521},"    \u003C",[515,566,567],{"class":525},"title",[515,569,570],{"class":521},">CrossWS Test Page\u003C/",[515,572,567],{"class":525},[515,574,547],{"class":521},[515,576,578,580,583,586,588,591,594,596],{"class":517,"line":577},4,[515,579,564],{"class":521},[515,581,582],{"class":525},"script",[515,584,585],{"class":528}," src",[515,587,532],{"class":521},[515,589,590],{"class":535},"\"https://cdn.tailwindcss.com\"",[515,592,593],{"class":521},">\u003C/",[515,595,582],{"class":525},[515,597,547],{"class":521},[515,599,601,603,606],{"class":517,"line":600},5,[515,602,564],{"class":521},[515,604,605],{"class":525},"style",[515,607,547],{"class":521},[515,609,611,614],{"class":517,"line":610},6,[515,612,613],{"class":525},"      body",[515,615,616],{"class":521}," {\n",[515,618,620,624,627,630],{"class":517,"line":619},7,[515,621,623],{"class":622},"suiK_","        background-color",[515,625,626],{"class":521},": ",[515,628,629],{"class":622},"#1a1a1a",[515,631,632],{"class":521},";\n",[515,634,636],{"class":517,"line":635},8,[515,637,638],{"class":521},"      }\n",[515,640,642,645,647],{"class":517,"line":641},9,[515,643,644],{"class":521},"    \u003C/",[515,646,605],{"class":525},[515,648,547],{"class":521},[515,650,652,654,656,659,661,664],{"class":517,"line":651},10,[515,653,564],{"class":521},[515,655,582],{"class":525},[515,657,658],{"class":528}," type",[515,660,532],{"class":521},[515,662,663],{"class":535},"\"module\"",[515,665,547],{"class":521},[515,667,669,673,676,679,682],{"class":517,"line":668},11,[515,670,672],{"class":671},"so5gQ","      import",[515,674,675],{"class":521}," { createApp, reactive, nextTick } ",[515,677,678],{"class":671},"from",[515,680,681],{"class":535}," \"https://esm.sh/petite-vue@0.4.1\"",[515,683,632],{"class":521},[515,685,687],{"class":517,"line":686},12,[515,688,689],{"emptyLinePlaceholder":397},"\n",[515,691,693,696],{"class":517,"line":692},13,[515,694,695],{"class":671},"      let",[515,697,698],{"class":521}," ws;\n",[515,700,702],{"class":517,"line":701},14,[515,703,689],{"emptyLinePlaceholder":397},[515,705,707,710,713,716,719],{"class":517,"line":706},15,[515,708,709],{"class":671},"      const",[515,711,712],{"class":622}," store",[515,714,715],{"class":671}," =",[515,717,718],{"class":528}," reactive",[515,720,721],{"class":521},"({\n",[515,723,725,728,731],{"class":517,"line":724},16,[515,726,727],{"class":521},"        message: ",[515,729,730],{"class":535},"\"\"",[515,732,733],{"class":521},",\n",[515,735,737],{"class":517,"line":736},17,[515,738,739],{"class":521},"        messages: [],\n",[515,741,743],{"class":517,"line":742},18,[515,744,745],{"class":521},"      });\n",[515,747,749],{"class":517,"line":748},19,[515,750,689],{"emptyLinePlaceholder":397},[515,752,754,756,759,761,764,767],{"class":517,"line":753},20,[515,755,709],{"class":671},[515,757,758],{"class":528}," scroll",[515,760,715],{"class":671},[515,762,763],{"class":521}," () ",[515,765,766],{"class":671},"=>",[515,768,616],{"class":521},[515,770,772,775,778,780],{"class":517,"line":771},21,[515,773,774],{"class":528},"        nextTick",[515,776,777],{"class":521},"(() ",[515,779,766],{"class":671},[515,781,616],{"class":521},[515,783,785,788,791,793,796,799,802,805],{"class":517,"line":784},22,[515,786,787],{"class":671},"          const",[515,789,790],{"class":622}," el",[515,792,715],{"class":671},[515,794,795],{"class":521}," document.",[515,797,798],{"class":528},"querySelector",[515,800,801],{"class":521},"(",[515,803,804],{"class":535},"\"#messages\"",[515,806,807],{"class":521},");\n",[515,809,811,814,816],{"class":517,"line":810},23,[515,812,813],{"class":521},"          el.scrollTop ",[515,815,532],{"class":671},[515,817,818],{"class":521}," el.scrollHeight;\n",[515,820,822,825,828],{"class":517,"line":821},24,[515,823,824],{"class":521},"          el.",[515,826,827],{"class":528},"scrollTo",[515,829,721],{"class":521},[515,831,833],{"class":517,"line":832},25,[515,834,835],{"class":521},"            top: el.scrollHeight,\n",[515,837,839,842,845],{"class":517,"line":838},26,[515,840,841],{"class":521},"            behavior: ",[515,843,844],{"class":535},"\"smooth\"",[515,846,733],{"class":521},[515,848,850],{"class":517,"line":849},27,[515,851,852],{"class":521},"          });\n",[515,854,856],{"class":517,"line":855},28,[515,857,858],{"class":521},"        });\n",[515,860,862],{"class":517,"line":861},29,[515,863,864],{"class":521},"      };\n",[515,866,868],{"class":517,"line":867},30,[515,869,689],{"emptyLinePlaceholder":397},[515,871,873,875,878,880,883,885,887],{"class":517,"line":872},31,[515,874,709],{"class":671},[515,876,877],{"class":528}," format",[515,879,715],{"class":671},[515,881,882],{"class":671}," async",[515,884,763],{"class":521},[515,886,766],{"class":671},[515,888,616],{"class":521},[515,890,892,895,898,901,904,907],{"class":517,"line":891},32,[515,893,894],{"class":671},"        for",[515,896,897],{"class":521}," (",[515,899,900],{"class":671},"const",[515,902,903],{"class":622}," message",[515,905,906],{"class":671}," of",[515,908,909],{"class":521}," store.messages) {\n",[515,911,913,916,918,921,924,927,930,933,935,938],{"class":517,"line":912},33,[515,914,915],{"class":671},"          if",[515,917,897],{"class":521},[515,919,920],{"class":671},"!",[515,922,923],{"class":521},"message._fmt ",[515,925,926],{"class":671},"&&",[515,928,929],{"class":521}," message.text.",[515,931,932],{"class":528},"startsWith",[515,934,801],{"class":521},[515,936,937],{"class":535},"\"{\"",[515,939,940],{"class":521},")) {\n",[515,942,944,947,949,952],{"class":517,"line":943},34,[515,945,946],{"class":521},"            message._fmt ",[515,948,532],{"class":671},[515,950,951],{"class":622}," true",[515,953,632],{"class":521},[515,955,957,960,963,966,969,971,974,977,979,982],{"class":517,"line":956},35,[515,958,959],{"class":671},"            const",[515,961,962],{"class":521}," { ",[515,964,965],{"class":622},"codeToHtml",[515,967,968],{"class":521}," } ",[515,970,532],{"class":671},[515,972,973],{"class":671}," await",[515,975,976],{"class":671}," import",[515,978,801],{"class":521},[515,980,981],{"class":535},"\"https://esm.sh/shiki@1.0.0\"",[515,983,807],{"class":521},[515,985,987,989,992,994,997,1000,1003,1005,1008,1010,1013,1016,1019,1022,1025],{"class":517,"line":986},36,[515,988,959],{"class":671},[515,990,991],{"class":622}," str",[515,993,715],{"class":671},[515,995,996],{"class":622}," JSON",[515,998,999],{"class":521},".",[515,1001,1002],{"class":528},"stringify",[515,1004,801],{"class":521},[515,1006,1007],{"class":622},"JSON",[515,1009,999],{"class":521},[515,1011,1012],{"class":528},"parse",[515,1014,1015],{"class":521},"(message.text), ",[515,1017,1018],{"class":622},"null",[515,1020,1021],{"class":521},", ",[515,1023,1024],{"class":622},"2",[515,1026,807],{"class":521},[515,1028,1030,1033,1035,1037,1040],{"class":517,"line":1029},37,[515,1031,1032],{"class":521},"            message.formattedText ",[515,1034,532],{"class":671},[515,1036,973],{"class":671},[515,1038,1039],{"class":528}," codeToHtml",[515,1041,1042],{"class":521},"(str, {\n",[515,1044,1046,1049,1052],{"class":517,"line":1045},38,[515,1047,1048],{"class":521},"              lang: ",[515,1050,1051],{"class":535},"\"json\"",[515,1053,733],{"class":521},[515,1055,1057,1060,1063],{"class":517,"line":1056},39,[515,1058,1059],{"class":521},"              theme: ",[515,1061,1062],{"class":535},"\"dark-plus\"",[515,1064,733],{"class":521},[515,1066,1068],{"class":517,"line":1067},40,[515,1069,1070],{"class":521},"            });\n",[515,1072,1074],{"class":517,"line":1073},41,[515,1075,1076],{"class":521},"          }\n",[515,1078,1080],{"class":517,"line":1079},42,[515,1081,1082],{"class":521},"        }\n",[515,1084,1086],{"class":517,"line":1085},43,[515,1087,864],{"class":521},[515,1089,1091],{"class":517,"line":1090},44,[515,1092,689],{"emptyLinePlaceholder":397},[515,1094,1096,1098,1101,1103,1105,1109,1111,1114,1117,1120,1122],{"class":517,"line":1095},45,[515,1097,709],{"class":671},[515,1099,1100],{"class":528}," log",[515,1102,715],{"class":671},[515,1104,897],{"class":521},[515,1106,1108],{"class":1107},"sQHwn","user",[515,1110,1021],{"class":521},[515,1112,1113],{"class":671},"...",[515,1115,1116],{"class":1107},"args",[515,1118,1119],{"class":521},") ",[515,1121,766],{"class":671},[515,1123,616],{"class":521},[515,1125,1127,1130,1133,1135,1138,1141,1143],{"class":517,"line":1126},46,[515,1128,1129],{"class":521},"        console.",[515,1131,1132],{"class":528},"log",[515,1134,801],{"class":521},[515,1136,1137],{"class":535},"\"[ws]\"",[515,1139,1140],{"class":521},", user, ",[515,1142,1113],{"class":671},[515,1144,1145],{"class":521},"args);\n",[515,1147,1149,1152,1155],{"class":517,"line":1148},47,[515,1150,1151],{"class":521},"        store.messages.",[515,1153,1154],{"class":528},"push",[515,1156,721],{"class":521},[515,1158,1160,1163,1166,1168,1171],{"class":517,"line":1159},48,[515,1161,1162],{"class":521},"          text: args.",[515,1164,1165],{"class":528},"join",[515,1167,801],{"class":521},[515,1169,1170],{"class":535},"\" \"",[515,1172,1173],{"class":521},"),\n",[515,1175,1177,1180,1182],{"class":517,"line":1176},49,[515,1178,1179],{"class":521},"          formattedText: ",[515,1181,730],{"class":535},[515,1183,733],{"class":521},[515,1185,1187],{"class":517,"line":1186},50,[515,1188,1189],{"class":521},"          user: user,\n",[515,1191,1193,1196,1199,1202,1205,1208],{"class":517,"line":1192},51,[515,1194,1195],{"class":521},"          date: ",[515,1197,1198],{"class":671},"new",[515,1200,1201],{"class":528}," Date",[515,1203,1204],{"class":521},"().",[515,1206,1207],{"class":528},"toLocaleString",[515,1209,1210],{"class":521},"(),\n",[515,1212,1214],{"class":517,"line":1213},52,[515,1215,858],{"class":521},[515,1217,1219,1222],{"class":517,"line":1218},53,[515,1220,1221],{"class":528},"        scroll",[515,1223,1224],{"class":521},"();\n",[515,1226,1228,1231],{"class":517,"line":1227},54,[515,1229,1230],{"class":528},"        format",[515,1232,1224],{"class":521},[515,1234,1236],{"class":517,"line":1235},55,[515,1237,864],{"class":521},[515,1239,1241],{"class":517,"line":1240},56,[515,1242,689],{"emptyLinePlaceholder":397},[515,1244,1246,1248,1251,1253,1255,1257,1259],{"class":517,"line":1245},57,[515,1247,709],{"class":671},[515,1249,1250],{"class":528}," connect",[515,1252,715],{"class":671},[515,1254,882],{"class":671},[515,1256,763],{"class":521},[515,1258,766],{"class":671},[515,1260,616],{"class":521},[515,1262,1264,1267,1270,1272,1275,1278,1281],{"class":517,"line":1263},58,[515,1265,1266],{"class":671},"        const",[515,1268,1269],{"class":622}," isSecure",[515,1271,715],{"class":671},[515,1273,1274],{"class":521}," location.protocol ",[515,1276,1277],{"class":671},"===",[515,1279,1280],{"class":535}," \"https:\"",[515,1282,632],{"class":521},[515,1284,1286,1288,1291,1293,1296,1299,1302,1305,1308,1310,1313,1316,1318,1321],{"class":517,"line":1285},59,[515,1287,1266],{"class":671},[515,1289,1290],{"class":622}," url",[515,1292,715],{"class":671},[515,1294,1295],{"class":521}," (isSecure ",[515,1297,1298],{"class":671},"?",[515,1300,1301],{"class":535}," \"wss://\"",[515,1303,1304],{"class":671}," :",[515,1306,1307],{"class":535}," \"ws://\"",[515,1309,1119],{"class":521},[515,1311,1312],{"class":671},"+",[515,1314,1315],{"class":521}," location.host ",[515,1317,1312],{"class":671},[515,1319,1320],{"class":535}," \"/_ws\"",[515,1322,632],{"class":521},[515,1324,1326,1329],{"class":517,"line":1325},60,[515,1327,1328],{"class":671},"        if",[515,1330,1331],{"class":521}," (ws) {\n",[515,1333,1335,1338,1340,1343,1345,1348],{"class":517,"line":1334},61,[515,1336,1337],{"class":528},"          log",[515,1339,801],{"class":521},[515,1341,1342],{"class":535},"\"ws\"",[515,1344,1021],{"class":521},[515,1346,1347],{"class":535},"\"Closing previous connection before reconnecting...\"",[515,1349,807],{"class":521},[515,1351,1353,1356,1359],{"class":517,"line":1352},62,[515,1354,1355],{"class":521},"          ws.",[515,1357,1358],{"class":528},"close",[515,1360,1224],{"class":521},[515,1362,1364,1367],{"class":517,"line":1363},63,[515,1365,1366],{"class":528},"          clear",[515,1368,1224],{"class":521},[515,1370,1372],{"class":517,"line":1371},64,[515,1373,1082],{"class":521},[515,1375,1377],{"class":517,"line":1376},65,[515,1378,689],{"emptyLinePlaceholder":397},[515,1380,1382,1385,1387,1389,1391,1394,1397,1400],{"class":517,"line":1381},66,[515,1383,1384],{"class":528},"        log",[515,1386,801],{"class":521},[515,1388,1342],{"class":535},[515,1390,1021],{"class":521},[515,1392,1393],{"class":535},"\"Connecting to\"",[515,1395,1396],{"class":521},", url, ",[515,1398,1399],{"class":535},"\"...\"",[515,1401,807],{"class":521},[515,1403,1405,1408,1410,1413,1416],{"class":517,"line":1404},67,[515,1406,1407],{"class":521},"        ws ",[515,1409,532],{"class":671},[515,1411,1412],{"class":671}," new",[515,1414,1415],{"class":528}," WebSocket",[515,1417,1418],{"class":521},"(url);\n",[515,1420,1422],{"class":517,"line":1421},68,[515,1423,689],{"emptyLinePlaceholder":397},[515,1425,1427,1430,1433,1435,1438,1440,1443,1445,1448,1450,1452],{"class":517,"line":1426},69,[515,1428,1429],{"class":521},"        ws.",[515,1431,1432],{"class":528},"addEventListener",[515,1434,801],{"class":521},[515,1436,1437],{"class":535},"\"message\"",[515,1439,1021],{"class":521},[515,1441,1442],{"class":671},"async",[515,1444,897],{"class":521},[515,1446,1447],{"class":1107},"event",[515,1449,1119],{"class":521},[515,1451,766],{"class":671},[515,1453,616],{"class":521},[515,1455,1457,1460,1463,1465,1468,1471,1473,1476,1479,1481,1484,1486,1489,1492],{"class":517,"line":1456},70,[515,1458,1459],{"class":671},"          let",[515,1461,1462],{"class":521}," data ",[515,1464,532],{"class":671},[515,1466,1467],{"class":671}," typeof",[515,1469,1470],{"class":521}," event.data ",[515,1472,1277],{"class":671},[515,1474,1475],{"class":535}," \"string\"",[515,1477,1478],{"class":671}," ?",[515,1480,1470],{"class":521},[515,1482,1483],{"class":671},":",[515,1485,973],{"class":671},[515,1487,1488],{"class":521}," event.data.",[515,1490,1491],{"class":528},"text",[515,1493,1224],{"class":521},[515,1495,1497,1499,1501,1503,1505,1508,1510,1513,1515,1518,1520,1522,1525,1527,1529,1531],{"class":517,"line":1496},71,[515,1498,787],{"class":671},[515,1500,962],{"class":521},[515,1502,1108],{"class":622},[515,1504,715],{"class":671},[515,1506,1507],{"class":535}," \"system\"",[515,1509,1021],{"class":521},[515,1511,1512],{"class":622},"message",[515,1514,715],{"class":671},[515,1516,1517],{"class":535}," \"\"",[515,1519,968],{"class":521},[515,1521,532],{"class":671},[515,1523,1524],{"class":521}," data.",[515,1526,932],{"class":528},[515,1528,801],{"class":521},[515,1530,937],{"class":535},[515,1532,1533],{"class":521},")\n",[515,1535,1537,1540,1542,1544,1546],{"class":517,"line":1536},72,[515,1538,1539],{"class":671},"            ?",[515,1541,996],{"class":622},[515,1543,999],{"class":521},[515,1545,1012],{"class":528},[515,1547,1548],{"class":521},"(data)\n",[515,1550,1552,1555],{"class":517,"line":1551},73,[515,1553,1554],{"class":671},"            :",[515,1556,1557],{"class":521}," { message: data };\n",[515,1559,1561,1563,1566,1569,1572,1574,1576,1578,1580,1582,1584,1586,1588],{"class":517,"line":1560},74,[515,1562,1337],{"class":528},[515,1564,1565],{"class":521},"(user, ",[515,1567,1568],{"class":671},"typeof",[515,1570,1571],{"class":521}," message ",[515,1573,1277],{"class":671},[515,1575,1475],{"class":535},[515,1577,1478],{"class":671},[515,1579,1571],{"class":521},[515,1581,1483],{"class":671},[515,1583,996],{"class":622},[515,1585,999],{"class":521},[515,1587,1002],{"class":528},[515,1589,1590],{"class":521},"(message));\n",[515,1592,1594],{"class":517,"line":1593},75,[515,1595,858],{"class":521},[515,1597,1599],{"class":517,"line":1598},76,[515,1600,689],{"emptyLinePlaceholder":397},[515,1602,1604,1607,1609,1612,1615,1618,1620,1622,1625,1627,1629,1632],{"class":517,"line":1603},77,[515,1605,1606],{"class":671},"        await",[515,1608,1412],{"class":671},[515,1610,1611],{"class":622}," Promise",[515,1613,1614],{"class":521},"((",[515,1616,1617],{"class":1107},"resolve",[515,1619,1119],{"class":521},[515,1621,766],{"class":671},[515,1623,1624],{"class":521}," ws.",[515,1626,1432],{"class":528},[515,1628,801],{"class":521},[515,1630,1631],{"class":535},"\"open\"",[515,1633,1634],{"class":521},", resolve));\n",[515,1636,1638,1640,1642,1644,1646,1649],{"class":517,"line":1637},78,[515,1639,1384],{"class":528},[515,1641,801],{"class":521},[515,1643,1342],{"class":535},[515,1645,1021],{"class":521},[515,1647,1648],{"class":535},"\"Connected!\"",[515,1650,807],{"class":521},[515,1652,1654],{"class":517,"line":1653},79,[515,1655,864],{"class":521},[515,1657,1659],{"class":517,"line":1658},80,[515,1660,689],{"emptyLinePlaceholder":397},[515,1662,1664,1666,1669,1671,1673,1675],{"class":517,"line":1663},81,[515,1665,709],{"class":671},[515,1667,1668],{"class":528}," clear",[515,1670,715],{"class":671},[515,1672,763],{"class":521},[515,1674,766],{"class":671},[515,1676,616],{"class":521},[515,1678,1680,1682,1685,1687,1690,1693,1696],{"class":517,"line":1679},82,[515,1681,1151],{"class":521},[515,1683,1684],{"class":528},"splice",[515,1686,801],{"class":521},[515,1688,1689],{"class":622},"0",[515,1691,1692],{"class":521},", store.messages.",[515,1694,1695],{"class":622},"length",[515,1697,807],{"class":521},[515,1699,1701,1703,1705,1708,1710,1713],{"class":517,"line":1700},83,[515,1702,1384],{"class":528},[515,1704,801],{"class":521},[515,1706,1707],{"class":535},"\"system\"",[515,1709,1021],{"class":521},[515,1711,1712],{"class":535},"\"previous messages cleared\"",[515,1714,807],{"class":521},[515,1716,1718],{"class":517,"line":1717},84,[515,1719,864],{"class":521},[515,1721,1723],{"class":517,"line":1722},85,[515,1724,689],{"emptyLinePlaceholder":397},[515,1726,1728,1730,1733,1735,1737,1739],{"class":517,"line":1727},86,[515,1729,709],{"class":671},[515,1731,1732],{"class":528}," send",[515,1734,715],{"class":671},[515,1736,763],{"class":521},[515,1738,766],{"class":671},[515,1740,616],{"class":521},[515,1742,1744,1746,1748,1750,1753],{"class":517,"line":1743},87,[515,1745,1129],{"class":521},[515,1747,1132],{"class":528},[515,1749,801],{"class":521},[515,1751,1752],{"class":535},"\"sending message...\"",[515,1754,807],{"class":521},[515,1756,1758,1760],{"class":517,"line":1757},88,[515,1759,1328],{"class":671},[515,1761,1762],{"class":521}," (store.message) {\n",[515,1764,1766,1768,1771],{"class":517,"line":1765},89,[515,1767,1355],{"class":521},[515,1769,1770],{"class":528},"send",[515,1772,1773],{"class":521},"(store.message);\n",[515,1775,1777],{"class":517,"line":1776},90,[515,1778,1082],{"class":521},[515,1780,1782,1785,1787,1789],{"class":517,"line":1781},91,[515,1783,1784],{"class":521},"        store.message ",[515,1786,532],{"class":671},[515,1788,1517],{"class":535},[515,1790,632],{"class":521},[515,1792,1794],{"class":517,"line":1793},92,[515,1795,864],{"class":521},[515,1797,1799],{"class":517,"line":1798},93,[515,1800,689],{"emptyLinePlaceholder":397},[515,1802,1804,1806,1809,1811,1813,1815],{"class":517,"line":1803},94,[515,1805,709],{"class":671},[515,1807,1808],{"class":528}," ping",[515,1810,715],{"class":671},[515,1812,763],{"class":521},[515,1814,766],{"class":671},[515,1816,616],{"class":521},[515,1818,1820,1822,1824,1826,1828,1831],{"class":517,"line":1819},95,[515,1821,1384],{"class":528},[515,1823,801],{"class":521},[515,1825,1342],{"class":535},[515,1827,1021],{"class":521},[515,1829,1830],{"class":535},"\"Sending ping\"",[515,1832,807],{"class":521},[515,1834,1836,1838,1840,1842,1845],{"class":517,"line":1835},96,[515,1837,1429],{"class":521},[515,1839,1770],{"class":528},[515,1841,801],{"class":521},[515,1843,1844],{"class":535},"\"ping\"",[515,1846,807],{"class":521},[515,1848,1850],{"class":517,"line":1849},97,[515,1851,864],{"class":521},[515,1853,1855],{"class":517,"line":1854},98,[515,1856,689],{"emptyLinePlaceholder":397},[515,1858,1860,1863],{"class":517,"line":1859},99,[515,1861,1862],{"class":528},"      createApp",[515,1864,721],{"class":521},[515,1866,1868],{"class":517,"line":1867},100,[515,1869,1870],{"class":521},"        store,\n",[515,1872,1874],{"class":517,"line":1873},101,[515,1875,1876],{"class":521},"        send,\n",[515,1878,1880],{"class":517,"line":1879},102,[515,1881,1882],{"class":521},"        ping,\n",[515,1884,1886],{"class":517,"line":1885},103,[515,1887,1888],{"class":521},"        clear,\n",[515,1890,1892],{"class":517,"line":1891},104,[515,1893,1894],{"class":521},"        connect,\n",[515,1896,1898,1901,1904],{"class":517,"line":1897},105,[515,1899,1900],{"class":521},"        rand: Math.",[515,1902,1903],{"class":528},"random",[515,1905,1210],{"class":521},[515,1907,1909,1912,1915],{"class":517,"line":1908},106,[515,1910,1911],{"class":521},"      }).",[515,1913,1914],{"class":528},"mount",[515,1916,1224],{"class":521},[515,1918,1920],{"class":517,"line":1919},107,[515,1921,689],{"emptyLinePlaceholder":397},[515,1923,1925,1928,1930],{"class":517,"line":1924},108,[515,1926,1927],{"class":671},"      await",[515,1929,1250],{"class":528},[515,1931,1224],{"class":521},[515,1933,1935,1937,1939],{"class":517,"line":1934},109,[515,1936,644],{"class":521},[515,1938,582],{"class":525},[515,1940,547],{"class":521},[515,1942,1944,1947,1949],{"class":517,"line":1943},110,[515,1945,1946],{"class":521},"  \u003C/",[515,1948,556],{"class":525},[515,1950,547],{"class":521},[515,1952,1954,1956,1959,1962,1964,1967],{"class":517,"line":1953},111,[515,1955,553],{"class":521},[515,1957,1958],{"class":525},"body",[515,1960,1961],{"class":528}," class",[515,1963,532],{"class":521},[515,1965,1966],{"class":535},"\"h-screen flex flex-col justify-between\"",[515,1968,547],{"class":521},[515,1970,1972,1974,1977,1980,1982,1985],{"class":517,"line":1971},112,[515,1973,564],{"class":521},[515,1975,1976],{"class":525},"main",[515,1978,1979],{"class":528}," v-scope",[515,1981,532],{"class":521},[515,1983,1984],{"class":535},"\"{}\"",[515,1986,547],{"class":521},[515,1988,1990],{"class":517,"line":1989},113,[515,1991,1993],{"class":1992},"sCsY4","      \u003C!-- Messages -->\n",[515,1995,1997,2000,2003,2006,2008,2011,2013,2015,2018],{"class":517,"line":1996},114,[515,1998,1999],{"class":521},"      \u003C",[515,2001,2002],{"class":525},"div",[515,2004,2005],{"class":528}," id",[515,2007,532],{"class":521},[515,2009,2010],{"class":535},"\"messages\"",[515,2012,1961],{"class":528},[515,2014,532],{"class":521},[515,2016,2017],{"class":535},"\"flex-grow flex flex-col justify-end px-4 py-8\"",[515,2019,547],{"class":521},[515,2021,2023,2026,2028,2030,2032,2035,2038,2040,2043],{"class":517,"line":2022},115,[515,2024,2025],{"class":521},"        \u003C",[515,2027,2002],{"class":525},[515,2029,1961],{"class":528},[515,2031,532],{"class":521},[515,2033,2034],{"class":535},"\"flex items-center mb-4\"",[515,2036,2037],{"class":528}," v-for",[515,2039,532],{"class":521},[515,2041,2042],{"class":535},"\"message in store.messages\"",[515,2044,547],{"class":521},[515,2046,2048,2051,2053,2055,2057,2060],{"class":517,"line":2047},116,[515,2049,2050],{"class":521},"          \u003C",[515,2052,2002],{"class":525},[515,2054,1961],{"class":528},[515,2056,532],{"class":521},[515,2058,2059],{"class":535},"\"flex flex-col\"",[515,2061,547],{"class":521},[515,2063,2065,2068,2071,2073,2075,2078,2081,2083],{"class":517,"line":2064},117,[515,2066,2067],{"class":521},"            \u003C",[515,2069,2070],{"class":525},"p",[515,2072,1961],{"class":528},[515,2074,532],{"class":521},[515,2076,2077],{"class":535},"\"text-gray-500 mb-1 text-xs ml-10\"",[515,2079,2080],{"class":521},">{{ message.user }}\u003C/",[515,2082,2070],{"class":525},[515,2084,547],{"class":521},[515,2086,2088,2090,2092,2094,2096,2099],{"class":517,"line":2087},118,[515,2089,2067],{"class":521},[515,2091,2002],{"class":525},[515,2093,1961],{"class":528},[515,2095,532],{"class":521},[515,2097,2098],{"class":535},"\"flex items-center\"",[515,2100,547],{"class":521},[515,2102,2104,2107],{"class":517,"line":2103},119,[515,2105,2106],{"class":521},"              \u003C",[515,2108,2109],{"class":525},"img\n",[515,2111,2113,2116,2118],{"class":517,"line":2112},120,[515,2114,2115],{"class":528},"                :src",[515,2117,532],{"class":521},[515,2119,2120],{"class":535},"\"'https://www.gravatar.com/avatar/' + encodeURIComponent(message.user + rand) + '?s=512&d=monsterid'\"\n",[515,2122,2124,2127,2129],{"class":517,"line":2123},121,[515,2125,2126],{"class":528},"                alt",[515,2128,532],{"class":521},[515,2130,2131],{"class":535},"\"Avatar\"\n",[515,2133,2135,2138,2140],{"class":517,"line":2134},122,[515,2136,2137],{"class":528},"                class",[515,2139,532],{"class":521},[515,2141,2142],{"class":535},"\"w-8 h-8 rounded-full\"\n",[515,2144,2146],{"class":517,"line":2145},123,[515,2147,2148],{"class":521},"              />\n",[515,2150,2152,2154,2156,2158,2160,2163],{"class":517,"line":2151},124,[515,2153,2106],{"class":521},[515,2155,2002],{"class":525},[515,2157,1961],{"class":528},[515,2159,532],{"class":521},[515,2161,2162],{"class":535},"\"ml-2 bg-gray-800 rounded-lg p-2\"",[515,2164,547],{"class":521},[515,2166,2168,2171],{"class":517,"line":2167},125,[515,2169,2170],{"class":521},"                \u003C",[515,2172,2173],{"class":525},"p\n",[515,2175,2177,2180,2182],{"class":517,"line":2176},126,[515,2178,2179],{"class":528},"                  v-if",[515,2181,532],{"class":521},[515,2183,2184],{"class":535},"\"message.formattedText\"\n",[515,2186,2188,2191,2193],{"class":517,"line":2187},127,[515,2189,2190],{"class":528},"                  class",[515,2192,532],{"class":521},[515,2194,2195],{"class":535},"\"overflow-x-scroll\"\n",[515,2197,2199,2202,2204],{"class":517,"line":2198},128,[515,2200,2201],{"class":528},"                  v-html",[515,2203,532],{"class":521},[515,2205,2184],{"class":535},[515,2207,2209,2212,2214],{"class":517,"line":2208},129,[515,2210,2211],{"class":521},"                >\u003C/",[515,2213,2070],{"class":525},[515,2215,547],{"class":521},[515,2217,2219,2221,2223,2226,2228,2230,2233,2236,2238],{"class":517,"line":2218},130,[515,2220,2170],{"class":521},[515,2222,2070],{"class":525},[515,2224,2225],{"class":528}," v-else",[515,2227,1961],{"class":528},[515,2229,532],{"class":521},[515,2231,2232],{"class":535},"\"text-white\"",[515,2234,2235],{"class":521},">{{ message.text }}\u003C/",[515,2237,2070],{"class":525},[515,2239,547],{"class":521},[515,2241,2243,2246,2248],{"class":517,"line":2242},131,[515,2244,2245],{"class":521},"              \u003C/",[515,2247,2002],{"class":525},[515,2249,547],{"class":521},[515,2251,2253,2256,2258],{"class":517,"line":2252},132,[515,2254,2255],{"class":521},"            \u003C/",[515,2257,2002],{"class":525},[515,2259,547],{"class":521},[515,2261,2263,2265,2267,2269,2271,2274,2277,2279],{"class":517,"line":2262},133,[515,2264,2067],{"class":521},[515,2266,2070],{"class":525},[515,2268,1961],{"class":528},[515,2270,532],{"class":521},[515,2272,2273],{"class":535},"\"text-gray-500 mt-1 text-xs ml-10\"",[515,2275,2276],{"class":521},">{{ message.date }}\u003C/",[515,2278,2070],{"class":525},[515,2280,547],{"class":521},[515,2282,2284,2287,2289],{"class":517,"line":2283},134,[515,2285,2286],{"class":521},"          \u003C/",[515,2288,2002],{"class":525},[515,2290,547],{"class":521},[515,2292,2294,2297,2299],{"class":517,"line":2293},135,[515,2295,2296],{"class":521},"        \u003C/",[515,2298,2002],{"class":525},[515,2300,547],{"class":521},[515,2302,2304,2307,2309],{"class":517,"line":2303},136,[515,2305,2306],{"class":521},"      \u003C/",[515,2308,2002],{"class":525},[515,2310,547],{"class":521},[515,2312,2314],{"class":517,"line":2313},137,[515,2315,689],{"emptyLinePlaceholder":397},[515,2317,2319],{"class":517,"line":2318},138,[515,2320,2321],{"class":1992},"      \u003C!-- Chatbox -->\n",[515,2323,2325,2327,2329,2331,2333,2336],{"class":517,"line":2324},139,[515,2326,1999],{"class":521},[515,2328,2002],{"class":525},[515,2330,1961],{"class":528},[515,2332,532],{"class":521},[515,2334,2335],{"class":535},"\"bg-gray-800 px-4 py-2 flex items-center justify-between fixed bottom-0 w-full\"",[515,2337,547],{"class":521},[515,2339,2341,2343,2345,2347,2349,2352],{"class":517,"line":2340},140,[515,2342,2025],{"class":521},[515,2344,2002],{"class":525},[515,2346,1961],{"class":528},[515,2348,532],{"class":521},[515,2350,2351],{"class":535},"\"w-full min-w-6\"",[515,2353,547],{"class":521},[515,2355,2357,2359],{"class":517,"line":2356},141,[515,2358,2050],{"class":521},[515,2360,2361],{"class":525},"input\n",[515,2363,2365,2368,2370],{"class":517,"line":2364},142,[515,2366,2367],{"class":528},"            type",[515,2369,532],{"class":521},[515,2371,2372],{"class":535},"\"text\"\n",[515,2374,2376,2379,2381],{"class":517,"line":2375},143,[515,2377,2378],{"class":528},"            placeholder",[515,2380,532],{"class":521},[515,2382,2383],{"class":535},"\"Type your message...\"\n",[515,2385,2387,2390,2392],{"class":517,"line":2386},144,[515,2388,2389],{"class":528},"            class",[515,2391,532],{"class":521},[515,2393,2394],{"class":535},"\"w-full rounded-l-lg px-4 py-2 bg-gray-700 text-white focus:outline-none focus:ring focus:border-blue-300\"\n",[515,2396,2398,2401,2403],{"class":517,"line":2397},145,[515,2399,2400],{"class":528},"            @keydown.enter",[515,2402,532],{"class":521},[515,2404,2405],{"class":535},"\"send\"\n",[515,2407,2409,2412,2414],{"class":517,"line":2408},146,[515,2410,2411],{"class":528},"            v-model",[515,2413,532],{"class":521},[515,2415,2416],{"class":535},"\"store.message\"\n",[515,2418,2420],{"class":517,"line":2419},147,[515,2421,2422],{"class":521},"          />\n",[515,2424,2426,2428,2430],{"class":517,"line":2425},148,[515,2427,2296],{"class":521},[515,2429,2002],{"class":525},[515,2431,547],{"class":521},[515,2433,2435,2437,2439,2441,2443,2446],{"class":517,"line":2434},149,[515,2436,2025],{"class":521},[515,2438,2002],{"class":525},[515,2440,1961],{"class":528},[515,2442,532],{"class":521},[515,2444,2445],{"class":535},"\"flex\"",[515,2447,547],{"class":521},[515,2449,2451,2453,2456,2458,2460,2463,2466,2468,2471],{"class":517,"line":2450},150,[515,2452,2050],{"class":521},[515,2454,2455],{"class":525},"button",[515,2457,1961],{"class":528},[515,2459,532],{"class":521},[515,2461,2462],{"class":535},"\"bg-blue-500 hover:bg-blue-600 text-white py-2 px-4\"",[515,2464,2465],{"class":528}," @click",[515,2467,532],{"class":521},[515,2469,2470],{"class":535},"\"send\"",[515,2472,547],{"class":521},[515,2474,2476],{"class":517,"line":2475},151,[515,2477,2478],{"class":521},"            Send\n",[515,2480,2482,2484,2486],{"class":517,"line":2481},152,[515,2483,2286],{"class":521},[515,2485,2455],{"class":525},[515,2487,547],{"class":521},[515,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507],{"class":517,"line":2490},153,[515,2492,2050],{"class":521},[515,2494,2455],{"class":525},[515,2496,1961],{"class":528},[515,2498,532],{"class":521},[515,2500,2462],{"class":535},[515,2502,2465],{"class":528},[515,2504,532],{"class":521},[515,2506,1844],{"class":535},[515,2508,547],{"class":521},[515,2510,2512],{"class":517,"line":2511},154,[515,2513,2514],{"class":521},"            Ping\n",[515,2516,2518,2520,2522],{"class":517,"line":2517},155,[515,2519,2286],{"class":521},[515,2521,2455],{"class":525},[515,2523,547],{"class":521},[515,2525,2527,2529,2531,2533,2535,2537,2539,2541,2544],{"class":517,"line":2526},156,[515,2528,2050],{"class":521},[515,2530,2455],{"class":525},[515,2532,1961],{"class":528},[515,2534,532],{"class":521},[515,2536,2462],{"class":535},[515,2538,2465],{"class":528},[515,2540,532],{"class":521},[515,2542,2543],{"class":535},"\"connect\"",[515,2545,547],{"class":521},[515,2547,2549],{"class":517,"line":2548},157,[515,2550,2551],{"class":521},"            Reconnect\n",[515,2553,2555,2557,2559],{"class":517,"line":2554},158,[515,2556,2286],{"class":521},[515,2558,2455],{"class":525},[515,2560,547],{"class":521},[515,2562,2564,2566],{"class":517,"line":2563},159,[515,2565,2050],{"class":521},[515,2567,2568],{"class":525},"button\n",[515,2570,2572,2574,2576],{"class":517,"line":2571},160,[515,2573,2389],{"class":528},[515,2575,532],{"class":521},[515,2577,2578],{"class":535},"\"bg-blue-500 hover:bg-blue-600 text-white py-2 px-4 rounded-r-lg\"\n",[515,2580,2582,2585,2587],{"class":517,"line":2581},161,[515,2583,2584],{"class":528},"            @click",[515,2586,532],{"class":521},[515,2588,2589],{"class":535},"\"clear\"\n",[515,2591,2593],{"class":517,"line":2592},162,[515,2594,2595],{"class":521},"          >\n",[515,2597,2599],{"class":517,"line":2598},163,[515,2600,2601],{"class":521},"            Clear\n",[515,2603,2605,2607,2609],{"class":517,"line":2604},164,[515,2606,2286],{"class":521},[515,2608,2455],{"class":525},[515,2610,547],{"class":521},[515,2612,2614,2616,2618],{"class":517,"line":2613},165,[515,2615,2296],{"class":521},[515,2617,2002],{"class":525},[515,2619,547],{"class":521},[515,2621,2623,2625,2627],{"class":517,"line":2622},166,[515,2624,2306],{"class":521},[515,2626,2002],{"class":525},[515,2628,547],{"class":521},[515,2630,2632,2634,2636],{"class":517,"line":2631},167,[515,2633,644],{"class":521},[515,2635,1976],{"class":525},[515,2637,547],{"class":521},[515,2639,2641,2643,2645],{"class":517,"line":2640},168,[515,2642,1946],{"class":521},[515,2644,1958],{"class":525},[515,2646,547],{"class":521},[515,2648,2650,2653,2655],{"class":517,"line":2649},169,[515,2651,2652],{"class":521},"\u003C/",[515,2654,510],{"class":525},[515,2656,547],{"class":521},[515,2658,2660],{"class":517,"line":2659},170,[515,2661,2662],{"class":521},"`\n",[505,2664,2669],{"className":2665,"code":2666,"filename":2667,"language":2668,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  serverDir: \"./\",\n  renderer: { static: true },\n  features: { websocket: true },\n});\n","nitro.config.ts","ts",[512,2670,2671,2686,2690,2703,2713,2723,2732],{"__ignoreMap":5},[515,2672,2673,2676,2679,2681,2684],{"class":517,"line":518},[515,2674,2675],{"class":671},"import",[515,2677,2678],{"class":521}," { defineConfig } ",[515,2680,678],{"class":671},[515,2682,2683],{"class":535}," \"nitro\"",[515,2685,632],{"class":521},[515,2687,2688],{"class":517,"line":550},[515,2689,689],{"emptyLinePlaceholder":397},[515,2691,2692,2695,2698,2701],{"class":517,"line":561},[515,2693,2694],{"class":671},"export",[515,2696,2697],{"class":671}," default",[515,2699,2700],{"class":528}," defineConfig",[515,2702,721],{"class":521},[515,2704,2705,2708,2711],{"class":517,"line":577},[515,2706,2707],{"class":521},"  serverDir: ",[515,2709,2710],{"class":535},"\"./\"",[515,2712,733],{"class":521},[515,2714,2715,2718,2720],{"class":517,"line":600},[515,2716,2717],{"class":521},"  renderer: { static: ",[515,2719,502],{"class":622},[515,2721,2722],{"class":521}," },\n",[515,2724,2725,2728,2730],{"class":517,"line":610},[515,2726,2727],{"class":521},"  features: { websocket: ",[515,2729,502],{"class":622},[515,2731,2722],{"class":521},[515,2733,2734],{"class":517,"line":619},[515,2735,2736],{"class":521},"});\n",[505,2738,2743],{"className":2739,"code":2740,"filename":2741,"language":2742,"meta":5,"style":5},"language-json shiki shiki-themes github-light github-dark github-dark","{\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"nitro dev\",\n    \"build\": \"nitro build\"\n  },\n  \"devDependencies\": {\n    \"nitro\": \"latest\"\n  }\n}\n","package.json","json",[512,2744,2745,2750,2761,2769,2781,2791,2796,2803,2813,2818],{"__ignoreMap":5},[515,2746,2747],{"class":517,"line":518},[515,2748,2749],{"class":521},"{\n",[515,2751,2752,2755,2757,2759],{"class":517,"line":550},[515,2753,2754],{"class":622},"  \"type\"",[515,2756,626],{"class":521},[515,2758,663],{"class":535},[515,2760,733],{"class":521},[515,2762,2763,2766],{"class":517,"line":561},[515,2764,2765],{"class":622},"  \"scripts\"",[515,2767,2768],{"class":521},": {\n",[515,2770,2771,2774,2776,2779],{"class":517,"line":577},[515,2772,2773],{"class":622},"    \"dev\"",[515,2775,626],{"class":521},[515,2777,2778],{"class":535},"\"nitro dev\"",[515,2780,733],{"class":521},[515,2782,2783,2786,2788],{"class":517,"line":600},[515,2784,2785],{"class":622},"    \"build\"",[515,2787,626],{"class":521},[515,2789,2790],{"class":535},"\"nitro build\"\n",[515,2792,2793],{"class":517,"line":610},[515,2794,2795],{"class":521},"  },\n",[515,2797,2798,2801],{"class":517,"line":619},[515,2799,2800],{"class":622},"  \"devDependencies\"",[515,2802,2768],{"class":521},[515,2804,2805,2808,2810],{"class":517,"line":635},[515,2806,2807],{"class":622},"    \"nitro\"",[515,2809,626],{"class":521},[515,2811,2812],{"class":535},"\"latest\"\n",[515,2814,2815],{"class":517,"line":641},[515,2816,2817],{"class":521},"  }\n",[515,2819,2820],{"class":517,"line":651},[515,2821,2822],{"class":521},"}\n",[505,2824,2827],{"className":2739,"code":2825,"filename":2826,"language":2742,"meta":5,"style":5},"{\n  \"extends\": \"nitro/tsconfig\"\n}\n","tsconfig.json",[512,2828,2829,2833,2843],{"__ignoreMap":5},[515,2830,2831],{"class":517,"line":518},[515,2832,2749],{"class":521},[515,2834,2835,2838,2840],{"class":517,"line":550},[515,2836,2837],{"class":622},"  \"extends\"",[515,2839,626],{"class":521},[515,2841,2842],{"class":535},"\"nitro/tsconfig\"\n",[515,2844,2845],{"class":517,"line":561},[515,2846,2822],{"class":521},[505,2848,2851],{"className":2665,"code":2849,"filename":2850,"language":2668,"meta":5,"style":5},"import { defineConfig } from \"vite\";\nimport { nitro } from \"nitro/vite\";\n\nexport default defineConfig({ plugins: [nitro()] });\n","vite.config.ts",[512,2852,2853,2866,2880,2884],{"__ignoreMap":5},[515,2854,2855,2857,2859,2861,2864],{"class":517,"line":518},[515,2856,2675],{"class":671},[515,2858,2678],{"class":521},[515,2860,678],{"class":671},[515,2862,2863],{"class":535}," \"vite\"",[515,2865,632],{"class":521},[515,2867,2868,2870,2873,2875,2878],{"class":517,"line":550},[515,2869,2675],{"class":671},[515,2871,2872],{"class":521}," { nitro } ",[515,2874,678],{"class":671},[515,2876,2877],{"class":535}," \"nitro/vite\"",[515,2879,632],{"class":521},[515,2881,2882],{"class":517,"line":561},[515,2883,689],{"emptyLinePlaceholder":397},[515,2885,2886,2888,2890,2892,2895,2898],{"class":517,"line":577},[515,2887,2694],{"class":671},[515,2889,2697],{"class":671},[515,2891,2700],{"class":528},[515,2893,2894],{"class":521},"({ plugins: [",[515,2896,2897],{"class":528},"nitro",[515,2899,2900],{"class":521},"()] });\n",[505,2902,2904],{"className":2665,"code":2903,"filename":503,"language":2668,"meta":5,"style":5},"import { defineWebSocketHandler } from \"nitro\";\n\nexport default defineWebSocketHandler({\n  open(peer) {\n    peer.send({ user: \"server\", message: `Welcome ${peer}!` });\n    peer.publish(\"chat\", { user: \"server\", message: `${peer} joined!` });\n    peer.subscribe(\"chat\");\n  },\n  message(peer, message) {\n    if (message.text().includes(\"ping\")) {\n      peer.send({ user: \"server\", message: \"pong\" });\n    } else {\n      const msg = {\n        user: peer.toString(),\n        message: message.toString(),\n      };\n      peer.send(msg); // echo\n      peer.publish(\"chat\", msg);\n    }\n  },\n  close(peer) {\n    peer.publish(\"chat\", { user: \"server\", message: `${peer} left!` });\n  },\n});\n",[512,2905,2906,2919,2923,2934,2947,2974,3003,3016,3020,3035,3056,3074,3084,3095,3105,3114,3118,3130,3143,3148,3152,3163,3188,3192],{"__ignoreMap":5},[515,2907,2908,2910,2913,2915,2917],{"class":517,"line":518},[515,2909,2675],{"class":671},[515,2911,2912],{"class":521}," { defineWebSocketHandler } ",[515,2914,678],{"class":671},[515,2916,2683],{"class":535},[515,2918,632],{"class":521},[515,2920,2921],{"class":517,"line":550},[515,2922,689],{"emptyLinePlaceholder":397},[515,2924,2925,2927,2929,2932],{"class":517,"line":561},[515,2926,2694],{"class":671},[515,2928,2697],{"class":671},[515,2930,2931],{"class":528}," defineWebSocketHandler",[515,2933,721],{"class":521},[515,2935,2936,2939,2941,2944],{"class":517,"line":577},[515,2937,2938],{"class":528},"  open",[515,2940,801],{"class":521},[515,2942,2943],{"class":1107},"peer",[515,2945,2946],{"class":521},") {\n",[515,2948,2949,2952,2954,2957,2960,2963,2966,2968,2971],{"class":517,"line":600},[515,2950,2951],{"class":521},"    peer.",[515,2953,1770],{"class":528},[515,2955,2956],{"class":521},"({ user: ",[515,2958,2959],{"class":535},"\"server\"",[515,2961,2962],{"class":521},", message: ",[515,2964,2965],{"class":535},"`Welcome ${",[515,2967,2943],{"class":521},[515,2969,2970],{"class":535},"}!`",[515,2972,2973],{"class":521}," });\n",[515,2975,2976,2978,2981,2983,2986,2989,2991,2993,2996,2998,3001],{"class":517,"line":610},[515,2977,2951],{"class":521},[515,2979,2980],{"class":528},"publish",[515,2982,801],{"class":521},[515,2984,2985],{"class":535},"\"chat\"",[515,2987,2988],{"class":521},", { user: ",[515,2990,2959],{"class":535},[515,2992,2962],{"class":521},[515,2994,2995],{"class":535},"`${",[515,2997,2943],{"class":521},[515,2999,3000],{"class":535},"} joined!`",[515,3002,2973],{"class":521},[515,3004,3005,3007,3010,3012,3014],{"class":517,"line":619},[515,3006,2951],{"class":521},[515,3008,3009],{"class":528},"subscribe",[515,3011,801],{"class":521},[515,3013,2985],{"class":535},[515,3015,807],{"class":521},[515,3017,3018],{"class":517,"line":635},[515,3019,2795],{"class":521},[515,3021,3022,3025,3027,3029,3031,3033],{"class":517,"line":641},[515,3023,3024],{"class":528},"  message",[515,3026,801],{"class":521},[515,3028,2943],{"class":1107},[515,3030,1021],{"class":521},[515,3032,1512],{"class":1107},[515,3034,2946],{"class":521},[515,3036,3037,3040,3043,3045,3047,3050,3052,3054],{"class":517,"line":651},[515,3038,3039],{"class":671},"    if",[515,3041,3042],{"class":521}," (message.",[515,3044,1491],{"class":528},[515,3046,1204],{"class":521},[515,3048,3049],{"class":528},"includes",[515,3051,801],{"class":521},[515,3053,1844],{"class":535},[515,3055,940],{"class":521},[515,3057,3058,3061,3063,3065,3067,3069,3072],{"class":517,"line":668},[515,3059,3060],{"class":521},"      peer.",[515,3062,1770],{"class":528},[515,3064,2956],{"class":521},[515,3066,2959],{"class":535},[515,3068,2962],{"class":521},[515,3070,3071],{"class":535},"\"pong\"",[515,3073,2973],{"class":521},[515,3075,3076,3079,3082],{"class":517,"line":686},[515,3077,3078],{"class":521},"    } ",[515,3080,3081],{"class":671},"else",[515,3083,616],{"class":521},[515,3085,3086,3088,3091,3093],{"class":517,"line":692},[515,3087,709],{"class":671},[515,3089,3090],{"class":622}," msg",[515,3092,715],{"class":671},[515,3094,616],{"class":521},[515,3096,3097,3100,3103],{"class":517,"line":701},[515,3098,3099],{"class":521},"        user: peer.",[515,3101,3102],{"class":528},"toString",[515,3104,1210],{"class":521},[515,3106,3107,3110,3112],{"class":517,"line":706},[515,3108,3109],{"class":521},"        message: message.",[515,3111,3102],{"class":528},[515,3113,1210],{"class":521},[515,3115,3116],{"class":517,"line":724},[515,3117,864],{"class":521},[515,3119,3120,3122,3124,3127],{"class":517,"line":736},[515,3121,3060],{"class":521},[515,3123,1770],{"class":528},[515,3125,3126],{"class":521},"(msg); ",[515,3128,3129],{"class":1992},"// echo\n",[515,3131,3132,3134,3136,3138,3140],{"class":517,"line":742},[515,3133,3060],{"class":521},[515,3135,2980],{"class":528},[515,3137,801],{"class":521},[515,3139,2985],{"class":535},[515,3141,3142],{"class":521},", msg);\n",[515,3144,3145],{"class":517,"line":748},[515,3146,3147],{"class":521},"    }\n",[515,3149,3150],{"class":517,"line":753},[515,3151,2795],{"class":521},[515,3153,3154,3157,3159,3161],{"class":517,"line":771},[515,3155,3156],{"class":528},"  close",[515,3158,801],{"class":521},[515,3160,2943],{"class":1107},[515,3162,2946],{"class":521},[515,3164,3165,3167,3169,3171,3173,3175,3177,3179,3181,3183,3186],{"class":517,"line":784},[515,3166,2951],{"class":521},[515,3168,2980],{"class":528},[515,3170,801],{"class":521},[515,3172,2985],{"class":535},[515,3174,2988],{"class":521},[515,3176,2959],{"class":535},[515,3178,2962],{"class":521},[515,3180,2995],{"class":535},[515,3182,2943],{"class":521},[515,3184,3185],{"class":535},"} left!`",[515,3187,2973],{"class":521},[515,3189,3190],{"class":517,"line":810},[515,3191,2795],{"class":521},[515,3193,3194],{"class":517,"line":821},[515,3195,2736],{"class":521},[2070,3197,3198],{},"This example implements a simple chat room using WebSockets. Clients connect, send messages, and receive messages from other users in real-time. The server broadcasts messages to all connected clients using pub/sub channels.",[3200,3201,3203],"h2",{"id":3202},"websocket-handler","WebSocket Handler",[2070,3205,3206,3207,999],{},"Create a WebSocket route using ",[512,3208,3209],{},"defineWebSocketHandler",[505,3211,3212],{"className":2665,"code":2903,"filename":503,"language":2668,"meta":5,"style":5},[512,3213,3214,3226,3230,3240,3250,3270,3294,3306,3310,3324,3342,3358,3366,3376,3384,3392,3396,3406,3418,3422,3426,3436,3460,3464],{"__ignoreMap":5},[515,3215,3216,3218,3220,3222,3224],{"class":517,"line":518},[515,3217,2675],{"class":671},[515,3219,2912],{"class":521},[515,3221,678],{"class":671},[515,3223,2683],{"class":535},[515,3225,632],{"class":521},[515,3227,3228],{"class":517,"line":550},[515,3229,689],{"emptyLinePlaceholder":397},[515,3231,3232,3234,3236,3238],{"class":517,"line":561},[515,3233,2694],{"class":671},[515,3235,2697],{"class":671},[515,3237,2931],{"class":528},[515,3239,721],{"class":521},[515,3241,3242,3244,3246,3248],{"class":517,"line":577},[515,3243,2938],{"class":528},[515,3245,801],{"class":521},[515,3247,2943],{"class":1107},[515,3249,2946],{"class":521},[515,3251,3252,3254,3256,3258,3260,3262,3264,3266,3268],{"class":517,"line":600},[515,3253,2951],{"class":521},[515,3255,1770],{"class":528},[515,3257,2956],{"class":521},[515,3259,2959],{"class":535},[515,3261,2962],{"class":521},[515,3263,2965],{"class":535},[515,3265,2943],{"class":521},[515,3267,2970],{"class":535},[515,3269,2973],{"class":521},[515,3271,3272,3274,3276,3278,3280,3282,3284,3286,3288,3290,3292],{"class":517,"line":610},[515,3273,2951],{"class":521},[515,3275,2980],{"class":528},[515,3277,801],{"class":521},[515,3279,2985],{"class":535},[515,3281,2988],{"class":521},[515,3283,2959],{"class":535},[515,3285,2962],{"class":521},[515,3287,2995],{"class":535},[515,3289,2943],{"class":521},[515,3291,3000],{"class":535},[515,3293,2973],{"class":521},[515,3295,3296,3298,3300,3302,3304],{"class":517,"line":619},[515,3297,2951],{"class":521},[515,3299,3009],{"class":528},[515,3301,801],{"class":521},[515,3303,2985],{"class":535},[515,3305,807],{"class":521},[515,3307,3308],{"class":517,"line":635},[515,3309,2795],{"class":521},[515,3311,3312,3314,3316,3318,3320,3322],{"class":517,"line":641},[515,3313,3024],{"class":528},[515,3315,801],{"class":521},[515,3317,2943],{"class":1107},[515,3319,1021],{"class":521},[515,3321,1512],{"class":1107},[515,3323,2946],{"class":521},[515,3325,3326,3328,3330,3332,3334,3336,3338,3340],{"class":517,"line":651},[515,3327,3039],{"class":671},[515,3329,3042],{"class":521},[515,3331,1491],{"class":528},[515,3333,1204],{"class":521},[515,3335,3049],{"class":528},[515,3337,801],{"class":521},[515,3339,1844],{"class":535},[515,3341,940],{"class":521},[515,3343,3344,3346,3348,3350,3352,3354,3356],{"class":517,"line":668},[515,3345,3060],{"class":521},[515,3347,1770],{"class":528},[515,3349,2956],{"class":521},[515,3351,2959],{"class":535},[515,3353,2962],{"class":521},[515,3355,3071],{"class":535},[515,3357,2973],{"class":521},[515,3359,3360,3362,3364],{"class":517,"line":686},[515,3361,3078],{"class":521},[515,3363,3081],{"class":671},[515,3365,616],{"class":521},[515,3367,3368,3370,3372,3374],{"class":517,"line":692},[515,3369,709],{"class":671},[515,3371,3090],{"class":622},[515,3373,715],{"class":671},[515,3375,616],{"class":521},[515,3377,3378,3380,3382],{"class":517,"line":701},[515,3379,3099],{"class":521},[515,3381,3102],{"class":528},[515,3383,1210],{"class":521},[515,3385,3386,3388,3390],{"class":517,"line":706},[515,3387,3109],{"class":521},[515,3389,3102],{"class":528},[515,3391,1210],{"class":521},[515,3393,3394],{"class":517,"line":724},[515,3395,864],{"class":521},[515,3397,3398,3400,3402,3404],{"class":517,"line":736},[515,3399,3060],{"class":521},[515,3401,1770],{"class":528},[515,3403,3126],{"class":521},[515,3405,3129],{"class":1992},[515,3407,3408,3410,3412,3414,3416],{"class":517,"line":742},[515,3409,3060],{"class":521},[515,3411,2980],{"class":528},[515,3413,801],{"class":521},[515,3415,2985],{"class":535},[515,3417,3142],{"class":521},[515,3419,3420],{"class":517,"line":748},[515,3421,3147],{"class":521},[515,3423,3424],{"class":517,"line":753},[515,3425,2795],{"class":521},[515,3427,3428,3430,3432,3434],{"class":517,"line":771},[515,3429,3156],{"class":528},[515,3431,801],{"class":521},[515,3433,2943],{"class":1107},[515,3435,2946],{"class":521},[515,3437,3438,3440,3442,3444,3446,3448,3450,3452,3454,3456,3458],{"class":517,"line":784},[515,3439,2951],{"class":521},[515,3441,2980],{"class":528},[515,3443,801],{"class":521},[515,3445,2985],{"class":535},[515,3447,2988],{"class":521},[515,3449,2959],{"class":535},[515,3451,2962],{"class":521},[515,3453,2995],{"class":535},[515,3455,2943],{"class":521},[515,3457,3185],{"class":535},[515,3459,2973],{"class":521},[515,3461,3462],{"class":517,"line":810},[515,3463,2795],{"class":521},[515,3465,3466],{"class":517,"line":821},[515,3467,2736],{"class":521},[2070,3469,3470,3471,3474],{},"Different hooks are exposed by ",[512,3472,3473],{},"defineWebSocketHandler()"," to integrate with different parts of the websocket lifecycle.",[3200,3476,3478],{"id":3477},"learn-more","Learn More",[3480,3481,3482,3488],"ul",{},[3483,3484,3485],"li",{},[3486,3487,23],"a",{"href":24},[3483,3489,3490],{},[3486,3491,3495],{"href":3492,"rel":3493},"https://crossws.h3.dev/guide/hooks",[3494],"nofollow","crossws Documentation",[605,3497,3498],{},"html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sByVh, html code.shiki .sByVh{--shiki-light:#22863A;--shiki-default:#85E89D;--shiki-dark:#85E89D}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}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 .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}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":5,"searchDepth":550,"depth":550,"links":3500},[3501,3502],{"id":3202,"depth":550,"text":3203},{"id":3477,"depth":550,"text":3478},"md",{"automd":397,"category":398,"icon":377},{"icon":377},{"title":58,"description":492},"ciDTLwcYCyvj-IgbIzzCnI-F2RbLfW_YvBzuRvmTrVU",[3509,3510],{"title":370,"path":371,"stem":372,"description":489,"icon":373,"children":-1},{"title":379,"path":380,"stem":384,"description":5,"icon":385,"children":-1},1775753659467]