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