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