[{"data":1,"prerenderedAt":2065},["ShallowReactive",2],{"navigation":3,"docs-path-index":208,"-docs-modules-vite-overview":272,"-docs-modules-vite-overview-surround":2060},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":52},"Docs","i-lucide-book-marked","\u002Fdocs","docs",[10,26,53,169,190],{"title":11,"path":12,"stem":13,"children":14,"icon":25},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[15,17,21],{"title":16,"path":12,"stem":13},"Introduction",{"title":18,"path":19,"stem":20},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",{"title":22,"path":23,"stem":24},"Examples","\u002Fdocs\u002Fgetting-started\u002Fexamples","docs\u002F1.getting-started\u002F3.examples","i-lucide-rocket",{"title":27,"icon":28,"path":29,"stem":30,"children":31,"page":52},"Core features","i-lucide-square-function","\u002Fdocs\u002Fcore-features","docs\u002F2.core-features",[32,36,40,44,48],{"title":33,"path":34,"stem":35},"Configuration","\u002Fdocs\u002Fcore-features\u002Fconfiguration","docs\u002F2.core-features\u002F0.configuration",{"title":37,"path":38,"stem":39},"Dependency Injection","\u002Fdocs\u002Fcore-features\u002Fcontainer","docs\u002F2.core-features\u002F1.container",{"title":41,"path":42,"stem":43},"Controllers","\u002Fdocs\u002Fcore-features\u002Fcontrollers","docs\u002F2.core-features\u002F2.controllers",{"title":45,"path":46,"stem":47},"Middlewares","\u002Fdocs\u002Fcore-features\u002Fmiddlewares","docs\u002F2.core-features\u002F3.middlewares",{"title":49,"path":50,"stem":51},"Validation","\u002Fdocs\u002Fcore-features\u002Fvalidation","docs\u002F2.core-features\u002F4.validation",false,{"title":54,"icon":55,"defaultOpen":56,"path":57,"stem":58,"children":59,"page":52},"Modules","i-lucide-boxes",true,"\u002Fdocs\u002Fmodules","docs\u002F3.modules",[60,77,93,101,116,127,142,161],{"title":61,"icon":52,"defaultOpen":52,"path":62,"stem":63,"children":64,"page":52},"Auth","\u002Fdocs\u002Fmodules\u002Fauth","docs\u002F3.modules\u002F1.auth",[65,69,73],{"title":66,"path":67,"stem":68},"Overview","\u002Fdocs\u002Fmodules\u002Fauth\u002Foverview","docs\u002F3.modules\u002F1.auth\u002F0.overview",{"title":70,"path":71,"stem":72},"Decorators","\u002Fdocs\u002Fmodules\u002Fauth\u002Fdecorators","docs\u002F3.modules\u002F1.auth\u002F1.decorators",{"title":74,"path":75,"stem":76},"API Reference","\u002Fdocs\u002Fmodules\u002Fauth\u002Fapi","docs\u002F3.modules\u002F1.auth\u002F2.api",{"title":78,"icon":52,"defaultOpen":52,"path":79,"stem":80,"children":81,"page":52},"Logger","\u002Fdocs\u002Fmodules\u002Flogger","docs\u002F3.modules\u002F2.logger",[82,85,89],{"title":66,"path":83,"stem":84},"\u002Fdocs\u002Fmodules\u002Flogger\u002Foverview","docs\u002F3.modules\u002F2.logger\u002F0.overview",{"title":86,"path":87,"stem":88},"Drains & Adapters","\u002Fdocs\u002Fmodules\u002Flogger\u002Fdrivers","docs\u002F3.modules\u002F2.logger\u002F1.drivers",{"title":90,"path":91,"stem":92},"API","\u002Fdocs\u002Fmodules\u002Flogger\u002Fapi","docs\u002F3.modules\u002F2.logger\u002F2.api",{"title":94,"icon":52,"defaultOpen":52,"path":95,"stem":96,"children":97,"page":52},"Serverless","\u002Fdocs\u002Fmodules\u002Fserverless","docs\u002F3.modules\u002F3.serverless",[98],{"title":66,"path":99,"stem":100},"\u002Fdocs\u002Fmodules\u002Fserverless\u002Foverview","docs\u002F3.modules\u002F3.serverless\u002F0.overview",{"title":102,"icon":52,"defaultOpen":52,"path":103,"stem":104,"children":105,"page":52},"Storage","\u002Fdocs\u002Fmodules\u002Fstorage","docs\u002F3.modules\u002F4.storage",[106,109,113],{"title":66,"path":107,"stem":108},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Foverview","docs\u002F3.modules\u002F4.storage\u002F0.overview",{"title":110,"path":111,"stem":112},"Drivers","\u002Fdocs\u002Fmodules\u002Fstorage\u002Fdrivers","docs\u002F3.modules\u002F4.storage\u002F1.drivers",{"title":90,"path":114,"stem":115},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Fapi","docs\u002F3.modules\u002F4.storage\u002F2.api",{"title":117,"icon":52,"defaultOpen":52,"path":118,"stem":119,"children":120,"page":52},"Web Sockets","\u002Fdocs\u002Fmodules\u002Fweb-sockets","docs\u002F3.modules\u002F5.web-sockets",[121,124],{"title":66,"path":122,"stem":123},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Foverview","docs\u002F3.modules\u002F5.web-sockets\u002F0.overview",{"title":90,"path":125,"stem":126},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Fapi","docs\u002F3.modules\u002F5.web-sockets\u002F1.api",{"title":128,"icon":52,"defaultOpen":52,"path":129,"stem":130,"children":131,"page":52},"Schema","\u002Fdocs\u002Fmodules\u002Fschema","docs\u002F3.modules\u002F6.schema",[132,135,138],{"title":66,"path":133,"stem":134},"\u002Fdocs\u002Fmodules\u002Fschema\u002Foverview","docs\u002F3.modules\u002F6.schema\u002F0.overview",{"title":70,"path":136,"stem":137},"\u002Fdocs\u002Fmodules\u002Fschema\u002Fdecorators","docs\u002F3.modules\u002F6.schema\u002F1.decorators",{"title":139,"path":140,"stem":141},"Scalar","\u002Fdocs\u002Fmodules\u002Fschema\u002Fscalar","docs\u002F3.modules\u002F6.schema\u002F2.scalar",{"title":143,"icon":52,"defaultOpen":52,"path":144,"stem":145,"children":146,"page":52},"Nitro","\u002Fdocs\u002Fmodules\u002Fnitro","docs\u002F3.modules\u002F7.nitro",[147,150,153,157],{"title":66,"path":148,"stem":149},"\u002Fdocs\u002Fmodules\u002Fnitro\u002Foverview","docs\u002F3.modules\u002F7.nitro\u002F0.overview",{"title":102,"path":151,"stem":152},"\u002Fdocs\u002Fmodules\u002Fnitro\u002Fstorage","docs\u002F3.modules\u002F7.nitro\u002F1.storage",{"title":154,"path":155,"stem":156},"File-Based Routes","\u002Fdocs\u002Fmodules\u002Fnitro\u002Ffile-based-routes","docs\u002F3.modules\u002F7.nitro\u002F2.file-based-routes",{"title":158,"path":159,"stem":160},"Middleware","\u002Fdocs\u002Fmodules\u002Fnitro\u002Fmiddleware","docs\u002F3.modules\u002F7.nitro\u002F3.middleware",{"title":162,"icon":52,"defaultOpen":52,"path":163,"stem":164,"children":165,"page":52},"Vite","\u002Fdocs\u002Fmodules\u002Fvite","docs\u002F3.modules\u002F8.vite",[166],{"title":66,"path":167,"stem":168},"\u002Fdocs\u002Fmodules\u002Fvite\u002Foverview","docs\u002F3.modules\u002F8.vite\u002F0.overview",{"title":170,"icon":171,"path":172,"stem":173,"children":174,"page":52},"Deployment","i-lucide-cloud-upload","\u002Fdocs\u002Fdeployment","docs\u002F4.deployment",[175,178,182,186],{"title":66,"path":176,"stem":177},"\u002Fdocs\u002Fdeployment\u002Foverview","docs\u002F4.deployment\u002F0.overview",{"title":179,"path":180,"stem":181},"Vercel","\u002Fdocs\u002Fdeployment\u002Fvercel","docs\u002F4.deployment\u002F1.vercel",{"title":183,"path":184,"stem":185},"AWS Lambda","\u002Fdocs\u002Fdeployment\u002Faws-lambda","docs\u002F4.deployment\u002F2.aws-lambda",{"title":187,"path":188,"stem":189},"Azure Functions","\u002Fdocs\u002Fdeployment\u002Fazure-functions","docs\u002F4.deployment\u002F3.azure-functions",{"title":191,"icon":192,"path":193,"stem":194,"children":195,"page":52},"Advanced","i-lucide-brain","\u002Fdocs\u002Fadvanced","docs\u002F99.advanced",[196,200,204],{"title":197,"path":198,"stem":199},"Custom Decorator","\u002Fdocs\u002Fadvanced\u002Fcustom-decorator","docs\u002F99.advanced\u002F1.custom-decorator",{"title":201,"path":202,"stem":203},"Plugins","\u002Fdocs\u002Fadvanced\u002Fcustom-plugin","docs\u002F99.advanced\u002F2.custom-plugin",{"title":205,"path":206,"stem":207},"Custom CLI Command","\u002Fdocs\u002Fadvanced\u002Fcustom-cli-command","docs\u002F99.advanced\u002F3.custom-cli-command",[209,211,213,214,215,216,218,219,220,221,222,223,225,227,228,229,230,232,233,234,235,237,238,240,241,242,243,245,246,247,249,250,251,252,254,255,256,257,258,260,261,263,264,265,266,267,269,270,271],{"path":210},"\u002Fdocs\u002F.navigation",{"path":212},"\u002Fdocs\u002Fgetting-started\u002F.navigation",{"path":12},{"path":19},{"path":23},{"path":217},"\u002Fdocs\u002Fcore-features\u002F.navigation",{"path":34},{"path":38},{"path":42},{"path":46},{"path":50},{"path":224},"\u002Fdocs\u002Fmodules\u002F.navigation",{"path":226},"\u002Fdocs\u002Fmodules\u002Fauth\u002F.navigation",{"path":67},{"path":71},{"path":75},{"path":231},"\u002Fdocs\u002Fmodules\u002Flogger\u002F.navigation",{"path":83},{"path":87},{"path":91},{"path":236},"\u002Fdocs\u002Fmodules\u002Fserverless\u002F.navigation",{"path":99},{"path":239},"\u002Fdocs\u002Fmodules\u002Fstorage\u002F.navigation",{"path":107},{"path":111},{"path":114},{"path":244},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002F.navigation",{"path":122},{"path":125},{"path":248},"\u002Fdocs\u002Fmodules\u002Fschema\u002F.navigation",{"path":133},{"path":136},{"path":140},{"path":253},"\u002Fdocs\u002Fmodules\u002Fnitro\u002F.navigation",{"path":148},{"path":151},{"path":155},{"path":159},{"path":259},"\u002Fdocs\u002Fmodules\u002Fvite\u002F.navigation",{"path":167},{"path":262},"\u002Fdocs\u002Fdeployment\u002F.navigation",{"path":176},{"path":180},{"path":184},{"path":188},{"path":268},"\u002Fdocs\u002Fadvanced\u002F.navigation",{"path":198},{"path":202},{"path":206},{"id":273,"title":66,"body":274,"description":2054,"extension":2055,"links":2056,"meta":2057,"navigation":56,"path":167,"seo":2058,"stem":168,"__hash__":2059},"docs\u002Fdocs\u002F3.modules\u002F8.vite\u002F0.overview.md",{"type":275,"value":276,"toc":2044},"minimark",[277,290,310,334,341,345,426,440,514,528,532,1176,1180,1204,1223,1230,1233,1239,1397,1418,1422,1445,1462,1470,1491,1495,1620,1623,1638,1666,1914,1918,1936,2034,2040],[278,279,282],"callout",{"icon":280,"type":281},"i-lucide-triangle-alert","warning",[283,284,285,289],"p",{},[286,287,288],"strong",{},"Experimental."," The Vite integration is in an early stage. APIs may change between releases.",[283,291,292,296,297,303,304,309],{},[293,294,295],"code",{},"@vercube\u002Fvite"," runs a Vercube server as a ",[298,299,162],"a",{"href":300,"rel":301},"https:\u002F\u002Fvite.dev",[302],"nofollow"," plugin, built on Vite's ",[298,305,308],{"href":306,"rel":307},"https:\u002F\u002Fvite.dev\u002Fguide\u002Fapi-environment.html",[302],"Environment API",". You write decorator based controllers as usual and get Vite's dev server, fast server side HMR, and a single build command. Discovery is zero config: controllers and services are found by scanning your source.",[283,311,312,313,317,318,321,322,325,326,329,330,333],{},"It is a standalone alternative to the ",[298,314,316],{"href":315},"\u002Fmodules\u002Fnitro\u002Foverview","Nitro integration"," and does not touch the ",[293,319,320],{},"vercube dev"," \u002F ",[293,323,324],{},"vercube build"," CLI. You drive it with ",[293,327,328],{},"vite"," and ",[293,331,332],{},"vite build",".",[283,335,336,337,333],{},"A common setup is a frontend (Vue, React, plain JS) served by Vite next to a Vercube API on the same server. Vercube handles only the routes you define, everything else stays with Vite. See ",[298,338,340],{"href":339},"#using-with-a-frontend","Using with a frontend",[342,343,18],"h2",{"id":344},"installation",[346,347,348,383,405],"code-group",{},[349,350,356],"pre",{"className":351,"code":352,"filename":353,"language":354,"meta":355,"style":355},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","$ pnpm add -D @vercube\u002Fvite vite\n","pnpm","bash","",[293,357,358],{"__ignoreMap":355},[359,360,363,367,371,374,377,380],"span",{"class":361,"line":362},"line",1,[359,364,366],{"class":365},"sBMFI","$",[359,368,370],{"class":369},"sfazB"," pnpm",[359,372,373],{"class":369}," add",[359,375,376],{"class":369}," -D",[359,378,379],{"class":369}," @vercube\u002Fvite",[359,381,382],{"class":369}," vite\n",[349,384,387],{"className":351,"code":385,"filename":386,"language":354,"meta":355,"style":355},"$ npm install -D @vercube\u002Fvite vite\n","npm",[293,388,389],{"__ignoreMap":355},[359,390,391,393,396,399,401,403],{"class":361,"line":362},[359,392,366],{"class":365},[359,394,395],{"class":369}," npm",[359,397,398],{"class":369}," install",[359,400,376],{"class":369},[359,402,379],{"class":369},[359,404,382],{"class":369},[349,406,409],{"className":351,"code":407,"filename":408,"language":354,"meta":355,"style":355},"$ bun add -D @vercube\u002Fvite vite\n","bun",[293,410,411],{"__ignoreMap":355},[359,412,413,415,418,420,422,424],{"class":361,"line":362},[359,414,366],{"class":365},[359,416,417],{"class":369}," bun",[359,419,373],{"class":369},[359,421,376],{"class":369},[359,423,379],{"class":369},[359,425,382],{"class":369},[283,427,428,429,432,433,436,437,333],{},"Requirements: ",[286,430,431],{},"Vite 8",", and ",[293,434,435],{},"experimentalDecorators"," enabled in ",[293,438,439],{},"tsconfig.json",[349,441,445],{"className":442,"code":443,"filename":439,"language":444,"meta":355,"style":355},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"compilerOptions\": {\n    \"experimentalDecorators\": true,\n    \"emitDecoratorMetadata\": false\n  }\n}\n","json",[293,446,447,453,472,487,502,508],{"__ignoreMap":355},[359,448,449],{"class":361,"line":362},[359,450,452],{"class":451},"sMK4o","{\n",[359,454,456,459,463,466,469],{"class":361,"line":455},2,[359,457,458],{"class":451},"  \"",[359,460,462],{"class":461},"spNyl","compilerOptions",[359,464,465],{"class":451},"\"",[359,467,468],{"class":451},":",[359,470,471],{"class":451}," {\n",[359,473,475,478,480,482,484],{"class":361,"line":474},3,[359,476,477],{"class":451},"    \"",[359,479,435],{"class":365},[359,481,465],{"class":451},[359,483,468],{"class":451},[359,485,486],{"class":451}," true,\n",[359,488,490,492,495,497,499],{"class":361,"line":489},4,[359,491,477],{"class":451},[359,493,494],{"class":365},"emitDecoratorMetadata",[359,496,465],{"class":451},[359,498,468],{"class":451},[359,500,501],{"class":451}," false\n",[359,503,505],{"class":361,"line":504},5,[359,506,507],{"class":451},"  }\n",[359,509,511],{"class":361,"line":510},6,[359,512,513],{"class":451},"}\n",[278,515,518],{"icon":516,"type":517},"i-lucide-info","info",[283,519,520,521,523,524,527],{},"Vercube's DI does not rely on ",[293,522,494],{}," (it uses explicit ",[293,525,526],{},"@Inject(Token)","), so you can leave it off.",[342,529,531],{"id":530},"quick-start","Quick start",[533,534,535,540,672,676,687,986,990,999,1157,1161,1173],"steps",{},[536,537,539],"h3",{"id":538},"add-the-plugin","Add the plugin",[349,541,546],{"className":542,"code":543,"filename":544,"language":545,"meta":355,"style":355},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { vercube } from '@vercube\u002Fvite';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n  plugins: [vercube()],\n  server: { port: 3000 },\n});\n","vite.config.ts","ts",[293,547,548,578,599,604,620,640,661],{"__ignoreMap":355},[359,549,550,554,557,561,564,567,570,572,575],{"class":361,"line":362},[359,551,553],{"class":552},"s7zQu","import",[359,555,556],{"class":451}," {",[359,558,560],{"class":559},"sTEyZ"," vercube",[359,562,563],{"class":451}," }",[359,565,566],{"class":552}," from",[359,568,569],{"class":451}," '",[359,571,295],{"class":369},[359,573,574],{"class":451},"'",[359,576,577],{"class":451},";\n",[359,579,580,582,584,587,589,591,593,595,597],{"class":361,"line":455},[359,581,553],{"class":552},[359,583,556],{"class":451},[359,585,586],{"class":559}," defineConfig",[359,588,563],{"class":451},[359,590,566],{"class":552},[359,592,569],{"class":451},[359,594,328],{"class":369},[359,596,574],{"class":451},[359,598,577],{"class":451},[359,600,601],{"class":361,"line":474},[359,602,603],{"emptyLinePlaceholder":56},"\n",[359,605,606,609,612,615,618],{"class":361,"line":489},[359,607,608],{"class":552},"export",[359,610,611],{"class":552}," default",[359,613,586],{"class":614},"s2Zo4",[359,616,617],{"class":559},"(",[359,619,452],{"class":451},[359,621,622,626,628,631,634,637],{"class":361,"line":504},[359,623,625],{"class":624},"swJcz","  plugins",[359,627,468],{"class":451},[359,629,630],{"class":559}," [",[359,632,633],{"class":614},"vercube",[359,635,636],{"class":559},"()]",[359,638,639],{"class":451},",\n",[359,641,642,645,647,649,652,654,658],{"class":361,"line":510},[359,643,644],{"class":624},"  server",[359,646,468],{"class":451},[359,648,556],{"class":451},[359,650,651],{"class":624}," port",[359,653,468],{"class":451},[359,655,657],{"class":656},"sbssI"," 3000",[359,659,660],{"class":451}," },\n",[359,662,664,667,670],{"class":361,"line":663},7,[359,665,666],{"class":451},"}",[359,668,669],{"class":559},")",[359,671,577],{"class":451},[536,673,675],{"id":674},"write-a-controller","Write a controller",[283,677,678,679,682,683,686],{},"Place a ",[293,680,681],{},"@Controller"," anywhere under ",[293,684,685],{},"src\u002F",". It is discovered automatically, with no manual registration.",[349,688,691],{"className":542,"code":689,"filename":690,"language":545,"meta":355,"style":355},"import { Controller, Get, Param } from '@vercube\u002Fcore';\nimport { Inject } from '@vercube\u002Fdi';\nimport { UserService } from '..\u002FServices\u002FUserService';\n\n@Controller('\u002Fapi\u002Fusers')\nexport default class UserController {\n  @Inject(UserService)\n  private userService: UserService;\n\n  @Get('\u002F')\n  list() {\n    return this.userService.findAll();\n  }\n\n  @Get('\u002F:id')\n  get(@Param('id') id: string) {\n    return this.userService.findById(id);\n  }\n}\n","src\u002FControllers\u002FUserController.ts",[293,692,693,726,748,770,774,794,808,819,834,839,858,869,890,895,900,918,954,976,981],{"__ignoreMap":355},[359,694,695,697,699,702,705,708,710,713,715,717,719,722,724],{"class":361,"line":362},[359,696,553],{"class":552},[359,698,556],{"class":451},[359,700,701],{"class":559}," Controller",[359,703,704],{"class":451},",",[359,706,707],{"class":559}," Get",[359,709,704],{"class":451},[359,711,712],{"class":559}," Param",[359,714,563],{"class":451},[359,716,566],{"class":552},[359,718,569],{"class":451},[359,720,721],{"class":369},"@vercube\u002Fcore",[359,723,574],{"class":451},[359,725,577],{"class":451},[359,727,728,730,732,735,737,739,741,744,746],{"class":361,"line":455},[359,729,553],{"class":552},[359,731,556],{"class":451},[359,733,734],{"class":559}," Inject",[359,736,563],{"class":451},[359,738,566],{"class":552},[359,740,569],{"class":451},[359,742,743],{"class":369},"@vercube\u002Fdi",[359,745,574],{"class":451},[359,747,577],{"class":451},[359,749,750,752,754,757,759,761,763,766,768],{"class":361,"line":474},[359,751,553],{"class":552},[359,753,556],{"class":451},[359,755,756],{"class":559}," UserService",[359,758,563],{"class":451},[359,760,566],{"class":552},[359,762,569],{"class":451},[359,764,765],{"class":369},"..\u002FServices\u002FUserService",[359,767,574],{"class":451},[359,769,577],{"class":451},[359,771,772],{"class":361,"line":489},[359,773,603],{"emptyLinePlaceholder":56},[359,775,776,779,782,784,786,789,791],{"class":361,"line":504},[359,777,778],{"class":451},"@",[359,780,781],{"class":614},"Controller",[359,783,617],{"class":559},[359,785,574],{"class":451},[359,787,788],{"class":369},"\u002Fapi\u002Fusers",[359,790,574],{"class":451},[359,792,793],{"class":559},")\n",[359,795,796,798,800,803,806],{"class":361,"line":510},[359,797,608],{"class":552},[359,799,611],{"class":552},[359,801,802],{"class":461}," class",[359,804,805],{"class":365}," UserController",[359,807,471],{"class":451},[359,809,810,813,816],{"class":361,"line":663},[359,811,812],{"class":451},"  @",[359,814,815],{"class":614},"Inject",[359,817,818],{"class":559},"(UserService)\n",[359,820,822,825,828,830,832],{"class":361,"line":821},8,[359,823,824],{"class":461},"  private",[359,826,827],{"class":624}," userService",[359,829,468],{"class":451},[359,831,756],{"class":365},[359,833,577],{"class":451},[359,835,837],{"class":361,"line":836},9,[359,838,603],{"emptyLinePlaceholder":56},[359,840,842,844,847,849,851,854,856],{"class":361,"line":841},10,[359,843,812],{"class":451},[359,845,846],{"class":614},"Get",[359,848,617],{"class":559},[359,850,574],{"class":451},[359,852,853],{"class":369},"\u002F",[359,855,574],{"class":451},[359,857,793],{"class":559},[359,859,861,864,867],{"class":361,"line":860},11,[359,862,863],{"class":624},"  list",[359,865,866],{"class":451},"()",[359,868,471],{"class":451},[359,870,872,875,878,881,883,886,888],{"class":361,"line":871},12,[359,873,874],{"class":552},"    return",[359,876,877],{"class":451}," this.",[359,879,880],{"class":559},"userService",[359,882,333],{"class":451},[359,884,885],{"class":614},"findAll",[359,887,866],{"class":624},[359,889,577],{"class":451},[359,891,893],{"class":361,"line":892},13,[359,894,507],{"class":451},[359,896,898],{"class":361,"line":897},14,[359,899,603],{"emptyLinePlaceholder":56},[359,901,903,905,907,909,911,914,916],{"class":361,"line":902},15,[359,904,812],{"class":451},[359,906,846],{"class":614},[359,908,617],{"class":559},[359,910,574],{"class":451},[359,912,913],{"class":369},"\u002F:id",[359,915,574],{"class":451},[359,917,793],{"class":559},[359,919,921,924,927,930,932,934,937,939,942,945,947,950,952],{"class":361,"line":920},16,[359,922,923],{"class":624},"  get",[359,925,926],{"class":451},"(@",[359,928,929],{"class":614},"Param",[359,931,617],{"class":559},[359,933,574],{"class":451},[359,935,936],{"class":369},"id",[359,938,574],{"class":451},[359,940,941],{"class":559},") ",[359,943,936],{"class":944},"sHdIc",[359,946,468],{"class":451},[359,948,949],{"class":365}," string",[359,951,669],{"class":451},[359,953,471],{"class":451},[359,955,957,959,961,963,965,968,970,972,974],{"class":361,"line":956},17,[359,958,874],{"class":552},[359,960,877],{"class":451},[359,962,880],{"class":559},[359,964,333],{"class":451},[359,966,967],{"class":614},"findById",[359,969,617],{"class":624},[359,971,936],{"class":559},[359,973,669],{"class":624},[359,975,577],{"class":451},[359,977,979],{"class":361,"line":978},18,[359,980,507],{"class":451},[359,982,984],{"class":361,"line":983},19,[359,985,513],{"class":451},[536,987,989],{"id":988},"write-a-service","Write a service",[278,991,992],{"icon":516,"type":517},[283,993,994,995,998],{},"Auto-discovery uses ",[293,996,997],{},"@Injectable()"," as an opt-in signal. Decorate every service you want registered automatically.",[349,1000,1003],{"className":542,"code":1001,"filename":1002,"language":545,"meta":355,"style":355},"import { Injectable } from '@vercube\u002Fdi';\n\n@Injectable()\nexport class UserService {\n  findAll() {\n    return [{ id: '1', name: 'Alice' }];\n  }\n\n  findById(id: string) {\n    return { id, name: 'Alice' };\n  }\n}\n","src\u002FServices\u002FUserService.ts",[293,1004,1005,1026,1030,1040,1050,1059,1101,1105,1109,1126,1149,1153],{"__ignoreMap":355},[359,1006,1007,1009,1011,1014,1016,1018,1020,1022,1024],{"class":361,"line":362},[359,1008,553],{"class":552},[359,1010,556],{"class":451},[359,1012,1013],{"class":559}," Injectable",[359,1015,563],{"class":451},[359,1017,566],{"class":552},[359,1019,569],{"class":451},[359,1021,743],{"class":369},[359,1023,574],{"class":451},[359,1025,577],{"class":451},[359,1027,1028],{"class":361,"line":455},[359,1029,603],{"emptyLinePlaceholder":56},[359,1031,1032,1034,1037],{"class":361,"line":474},[359,1033,778],{"class":451},[359,1035,1036],{"class":614},"Injectable",[359,1038,1039],{"class":559},"()\n",[359,1041,1042,1044,1046,1048],{"class":361,"line":489},[359,1043,608],{"class":552},[359,1045,802],{"class":461},[359,1047,756],{"class":365},[359,1049,471],{"class":451},[359,1051,1052,1055,1057],{"class":361,"line":504},[359,1053,1054],{"class":624},"  findAll",[359,1056,866],{"class":451},[359,1058,471],{"class":451},[359,1060,1061,1063,1065,1068,1071,1073,1075,1078,1080,1082,1085,1087,1089,1092,1094,1096,1099],{"class":361,"line":510},[359,1062,874],{"class":552},[359,1064,630],{"class":624},[359,1066,1067],{"class":451},"{",[359,1069,1070],{"class":624}," id",[359,1072,468],{"class":451},[359,1074,569],{"class":451},[359,1076,1077],{"class":369},"1",[359,1079,574],{"class":451},[359,1081,704],{"class":451},[359,1083,1084],{"class":624}," name",[359,1086,468],{"class":451},[359,1088,569],{"class":451},[359,1090,1091],{"class":369},"Alice",[359,1093,574],{"class":451},[359,1095,563],{"class":451},[359,1097,1098],{"class":624},"]",[359,1100,577],{"class":451},[359,1102,1103],{"class":361,"line":663},[359,1104,507],{"class":451},[359,1106,1107],{"class":361,"line":821},[359,1108,603],{"emptyLinePlaceholder":56},[359,1110,1111,1114,1116,1118,1120,1122,1124],{"class":361,"line":836},[359,1112,1113],{"class":624},"  findById",[359,1115,617],{"class":451},[359,1117,936],{"class":944},[359,1119,468],{"class":451},[359,1121,949],{"class":365},[359,1123,669],{"class":451},[359,1125,471],{"class":451},[359,1127,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146],{"class":361,"line":841},[359,1129,874],{"class":552},[359,1131,556],{"class":451},[359,1133,1070],{"class":559},[359,1135,704],{"class":451},[359,1137,1084],{"class":624},[359,1139,468],{"class":451},[359,1141,569],{"class":451},[359,1143,1091],{"class":369},[359,1145,574],{"class":451},[359,1147,1148],{"class":451}," };\n",[359,1150,1151],{"class":361,"line":860},[359,1152,507],{"class":451},[359,1154,1155],{"class":361,"line":871},[359,1156,513],{"class":451},[536,1158,1160],{"id":1159},"run","Run",[349,1162,1164],{"className":351,"code":1163,"language":354,"meta":355,"style":355},"npx vite\n",[293,1165,1166],{"__ignoreMap":355},[359,1167,1168,1171],{"class":361,"line":362},[359,1169,1170],{"class":365},"npx",[359,1172,382],{"class":369},[283,1174,1175],{},"Add or edit a controller while the server runs and the change is picked up live, no restart needed.",[342,1177,1179],{"id":1178},"how-it-works","How it works",[283,1181,1182,1183,1185,1186,1193,1194,329,1196,1199,1200,1203],{},"The plugin defines a dedicated Vite environment named ",[293,1184,633],{},". At startup it scans your source (",[298,1187,1190],{"href":1188,"rel":1189},"https:\u002F\u002Fgithub.com\u002Fvercube\u002Fvercube\u002Ftree\u002Fmain\u002Fpackages\u002Fscan",[302],[293,1191,1192],{},"@vercube\u002Fscan",") for ",[293,1195,681],{},[293,1197,1198],{},"@Injectable"," classes and generates a server entry that creates the app, binds the discovered classes, flushes the container (which registers routes through decorator initialization), and exports a ",[293,1201,1202],{},"fetch"," handler.",[283,1205,1206,1207,1214,1215,1222],{},"In dev that entry runs inside an isolated ",[298,1208,1211],{"href":1209,"rel":1210},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fenv-runner",[302],[293,1212,1213],{},"env-runner"," worker through Vite's ",[298,1216,1219],{"href":1217,"rel":1218},"https:\u002F\u002Fvite.dev\u002Fguide\u002Fapi-environment-runtimes.html#modulerunner",[302],[293,1220,1221],{},"ModuleRunner",". Vercube claims only the routes you define: a request matching a discovered route is forwarded into the worker, everything else falls through to Vite. Editing or adding a controller reloads the worker.",[283,1224,1225,1226,1229],{},"The generated entry lives at ",[293,1227,1228],{},"node_modules\u002F.vercube\u002Fserver-entry.mjs",", so it stays out of source control.",[342,1231,340],{"id":1232},"using-with-a-frontend",[283,1234,1235,1236,333],{},"Because Vercube claims only its own routes, the plugin sits next to a frontend that Vite serves on the same server. Add your framework's plugin alongside ",[293,1237,1238],{},"vercube()",[349,1240,1242],{"className":542,"code":1241,"filename":544,"language":545,"meta":355,"style":355},"import { vercube } from '@vercube\u002Fvite';\nimport vue from '@vitejs\u002Fplugin-vue';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n  plugins: [\n    vue(),\n    vercube({ scanDirs: ['src\u002Fserver'], setupFile: '.\u002Fsrc\u002Fserver\u002FBoot\u002FSetup.ts' }),\n  ],\n});\n",[293,1243,1244,1264,1283,1303,1307,1319,1328,1337,1382,1389],{"__ignoreMap":355},[359,1245,1246,1248,1250,1252,1254,1256,1258,1260,1262],{"class":361,"line":362},[359,1247,553],{"class":552},[359,1249,556],{"class":451},[359,1251,560],{"class":559},[359,1253,563],{"class":451},[359,1255,566],{"class":552},[359,1257,569],{"class":451},[359,1259,295],{"class":369},[359,1261,574],{"class":451},[359,1263,577],{"class":451},[359,1265,1266,1268,1271,1274,1276,1279,1281],{"class":361,"line":455},[359,1267,553],{"class":552},[359,1269,1270],{"class":559}," vue ",[359,1272,1273],{"class":552},"from",[359,1275,569],{"class":451},[359,1277,1278],{"class":369},"@vitejs\u002Fplugin-vue",[359,1280,574],{"class":451},[359,1282,577],{"class":451},[359,1284,1285,1287,1289,1291,1293,1295,1297,1299,1301],{"class":361,"line":474},[359,1286,553],{"class":552},[359,1288,556],{"class":451},[359,1290,586],{"class":559},[359,1292,563],{"class":451},[359,1294,566],{"class":552},[359,1296,569],{"class":451},[359,1298,328],{"class":369},[359,1300,574],{"class":451},[359,1302,577],{"class":451},[359,1304,1305],{"class":361,"line":489},[359,1306,603],{"emptyLinePlaceholder":56},[359,1308,1309,1311,1313,1315,1317],{"class":361,"line":504},[359,1310,608],{"class":552},[359,1312,611],{"class":552},[359,1314,586],{"class":614},[359,1316,617],{"class":559},[359,1318,452],{"class":451},[359,1320,1321,1323,1325],{"class":361,"line":510},[359,1322,625],{"class":624},[359,1324,468],{"class":451},[359,1326,1327],{"class":559}," [\n",[359,1329,1330,1333,1335],{"class":361,"line":663},[359,1331,1332],{"class":614},"    vue",[359,1334,866],{"class":559},[359,1336,639],{"class":451},[359,1338,1339,1342,1344,1346,1349,1351,1353,1355,1358,1360,1362,1364,1367,1369,1371,1374,1376,1378,1380],{"class":361,"line":821},[359,1340,1341],{"class":614},"    vercube",[359,1343,617],{"class":559},[359,1345,1067],{"class":451},[359,1347,1348],{"class":624}," scanDirs",[359,1350,468],{"class":451},[359,1352,630],{"class":559},[359,1354,574],{"class":451},[359,1356,1357],{"class":369},"src\u002Fserver",[359,1359,574],{"class":451},[359,1361,1098],{"class":559},[359,1363,704],{"class":451},[359,1365,1366],{"class":624}," setupFile",[359,1368,468],{"class":451},[359,1370,569],{"class":451},[359,1372,1373],{"class":369},".\u002Fsrc\u002Fserver\u002FBoot\u002FSetup.ts",[359,1375,574],{"class":451},[359,1377,563],{"class":451},[359,1379,669],{"class":559},[359,1381,639],{"class":451},[359,1383,1384,1387],{"class":361,"line":836},[359,1385,1386],{"class":559},"  ]",[359,1388,639],{"class":451},[359,1390,1391,1393,1395],{"class":361,"line":841},[359,1392,666],{"class":451},[359,1394,669],{"class":559},[359,1396,577],{"class":451},[283,1398,1399,1400,1403,1404,1406,1407,1410,1411,333],{},"Vite serves ",[293,1401,1402],{},"index.html",", your components and HMR. Requests to your ",[293,1405,681],{}," routes (for example ",[293,1408,1409],{},"\u002Fapi\u002F*",") go to Vercube. A full Vite + Vue example lives in ",[298,1412,1415],{"href":1413,"rel":1414},"https:\u002F\u002Fgithub.com\u002Fvercube\u002Fvercube\u002Ftree\u002Fmain\u002Fexamples\u002Fvite",[302],[293,1416,1417],{},"examples\u002Fvite",[342,1419,1421],{"id":1420},"build-and-run","Build and run",[349,1423,1425],{"className":351,"code":1424,"language":354,"meta":355,"style":355},"npx vite build\nnode dist\u002Findex.mjs\n",[293,1426,1427,1437],{"__ignoreMap":355},[359,1428,1429,1431,1434],{"class":361,"line":362},[359,1430,1170],{"class":365},[359,1432,1433],{"class":369}," vite",[359,1435,1436],{"class":369}," build\n",[359,1438,1439,1442],{"class":361,"line":455},[359,1440,1441],{"class":365},"node",[359,1443,1444],{"class":369}," dist\u002Findex.mjs\n",[283,1446,1447,1449,1450,1453,1454,1457,1458,1461],{},[293,1448,332],{}," builds the frontend (when there is one) into ",[293,1451,1452],{},"dist\u002Fpublic",", then bundles the server into ",[293,1455,1456],{},"dist\u002Findex.mjs",". Dependencies are kept external, so the bundle stays small and imports them from ",[293,1459,1460],{},"node_modules"," at runtime.",[349,1463,1468],{"className":1464,"code":1466,"language":1467},[1465],"language-text","dist\u002F\n  index.mjs           # the Vercube server\n  public\u002F             # the frontend, only if the project has one\n    index.html\n    assets\u002F…\n","text",[293,1469,1466],{"__ignoreMap":355},[283,1471,1472,1475,1476,1478,1479,1481,1482,1484,1485,1487,1488,1490],{},[293,1473,1474],{},"node dist\u002Findex.mjs"," serves your API routes and the static frontend from ",[293,1477,1452],{}," (with ",[293,1480,1402],{}," for ",[293,1483,853],{},") from a single process, the same way the dev server does. The entry also exports ",[293,1486,1202],{},", so you can mount it in any Web ",[293,1489,1202],{}," environment (edge runtimes, serverless adapters, tests) instead of starting the listener.",[342,1492,1494],{"id":1493},"options","Options",[1496,1497,1498,1517],"table",{},[1499,1500,1501],"thead",{},[1502,1503,1504,1508,1511,1514],"tr",{},[1505,1506,1507],"th",{},"Option",[1505,1509,1510],{},"Type",[1505,1512,1513],{},"Default",[1505,1515,1516],{},"Description",[1518,1519,1520,1548,1572,1598],"tbody",{},[1502,1521,1522,1528,1533,1539],{},[1523,1524,1525],"td",{},[293,1526,1527],{},"rootDir",[1523,1529,1530],{},[293,1531,1532],{},"string",[1523,1534,1535,1536],{},"Vite ",[293,1537,1538],{},"root",[1523,1540,1541,1542,329,1545,333],{},"Project root used to resolve ",[293,1543,1544],{},"scanDirs",[293,1546,1547],{},"setupFile",[1502,1549,1550,1554,1559,1564],{},[1523,1551,1552],{},[293,1553,1544],{},[1523,1555,1556],{},[293,1557,1558],{},"string[]",[1523,1560,1561],{},[293,1562,1563],{},"['src']",[1523,1565,1566,1567,329,1569,1571],{},"Directories scanned recursively for ",[293,1568,681],{},[293,1570,1198],{}," classes.",[1502,1573,1574,1578,1582,1587],{},[1523,1575,1576],{},[293,1577,1547],{},[1523,1579,1580],{},[293,1581,1532],{},[1523,1583,1584],{},[293,1585,1586],{},"undefined",[1523,1588,1589,1590,1593,1594,333],{},"Module whose default export ",[293,1591,1592],{},"(app: App) => void | Promise\u003Cvoid>"," runs before the app initializes. See ",[298,1595,1597],{"href":1596},"#setup-file","Setup file",[1502,1599,1600,1605,1609,1614],{},[1523,1601,1602],{},[293,1603,1604],{},"runner",[1523,1606,1607],{},[293,1608,1532],{},[1523,1610,1611],{},[293,1612,1613],{},"'node-worker'",[1523,1615,1616,1617,1619],{},"The ",[293,1618,1213],{}," runner used to execute server code in dev.",[342,1621,1597],{"id":1622},"setup-file",[283,1624,1625,1626,329,1628,1630,1631,1633,1634,1637],{},"Auto-discovery binds ",[293,1627,681],{},[293,1629,1198],{}," classes. Anything it cannot infer, such as registering plugins, mounting storage, or binding an interface token to an implementation, goes in a ",[293,1632,1547],{},". It runs as ",[293,1635,1636],{},"createApp","'s setup hook, before the app initializes, which is early enough to register plugins.",[349,1639,1641],{"className":542,"code":1640,"filename":544,"language":545,"meta":355,"style":355},"vercube({ setupFile: '.\u002Fsrc\u002FBoot\u002FSetup.ts' })\n",[293,1642,1643],{"__ignoreMap":355},[359,1644,1645,1647,1649,1651,1653,1655,1657,1660,1662,1664],{"class":361,"line":362},[359,1646,633],{"class":614},[359,1648,617],{"class":559},[359,1650,1067],{"class":451},[359,1652,1366],{"class":624},[359,1654,468],{"class":451},[359,1656,569],{"class":451},[359,1658,1659],{"class":369},".\u002Fsrc\u002FBoot\u002FSetup.ts",[359,1661,574],{"class":451},[359,1663,563],{"class":451},[359,1665,793],{"class":559},[349,1667,1670],{"className":542,"code":1668,"filename":1669,"language":545,"meta":355,"style":355},"import type { App } from '@vercube\u002Fcore';\nimport { AuthProvider } from '@vercube\u002Fauth';\nimport { StorageManager } from '@vercube\u002Fstorage';\nimport { MemoryStorage } from '@vercube\u002Fstorage\u002Fdrivers\u002FMemoryStorage';\nimport { BasicAuthenticationProvider } from '..\u002FServices\u002FBasicAuthenticationProvider';\n\nexport default async function setup(app: App) {\n  app.container.bind(AuthProvider, BasicAuthenticationProvider);\n\n  app.container.bind(StorageManager);\n  app.container.get(StorageManager).mount({ storage: MemoryStorage });\n}\n","src\u002FBoot\u002FSetup.ts",[293,1671,1672,1696,1718,1740,1762,1784,1788,1816,1844,1848,1869,1910],{"__ignoreMap":355},[359,1673,1674,1676,1679,1681,1684,1686,1688,1690,1692,1694],{"class":361,"line":362},[359,1675,553],{"class":552},[359,1677,1678],{"class":552}," type",[359,1680,556],{"class":451},[359,1682,1683],{"class":559}," App",[359,1685,563],{"class":451},[359,1687,566],{"class":552},[359,1689,569],{"class":451},[359,1691,721],{"class":369},[359,1693,574],{"class":451},[359,1695,577],{"class":451},[359,1697,1698,1700,1702,1705,1707,1709,1711,1714,1716],{"class":361,"line":455},[359,1699,553],{"class":552},[359,1701,556],{"class":451},[359,1703,1704],{"class":559}," AuthProvider",[359,1706,563],{"class":451},[359,1708,566],{"class":552},[359,1710,569],{"class":451},[359,1712,1713],{"class":369},"@vercube\u002Fauth",[359,1715,574],{"class":451},[359,1717,577],{"class":451},[359,1719,1720,1722,1724,1727,1729,1731,1733,1736,1738],{"class":361,"line":474},[359,1721,553],{"class":552},[359,1723,556],{"class":451},[359,1725,1726],{"class":559}," StorageManager",[359,1728,563],{"class":451},[359,1730,566],{"class":552},[359,1732,569],{"class":451},[359,1734,1735],{"class":369},"@vercube\u002Fstorage",[359,1737,574],{"class":451},[359,1739,577],{"class":451},[359,1741,1742,1744,1746,1749,1751,1753,1755,1758,1760],{"class":361,"line":489},[359,1743,553],{"class":552},[359,1745,556],{"class":451},[359,1747,1748],{"class":559}," MemoryStorage",[359,1750,563],{"class":451},[359,1752,566],{"class":552},[359,1754,569],{"class":451},[359,1756,1757],{"class":369},"@vercube\u002Fstorage\u002Fdrivers\u002FMemoryStorage",[359,1759,574],{"class":451},[359,1761,577],{"class":451},[359,1763,1764,1766,1768,1771,1773,1775,1777,1780,1782],{"class":361,"line":504},[359,1765,553],{"class":552},[359,1767,556],{"class":451},[359,1769,1770],{"class":559}," BasicAuthenticationProvider",[359,1772,563],{"class":451},[359,1774,566],{"class":552},[359,1776,569],{"class":451},[359,1778,1779],{"class":369},"..\u002FServices\u002FBasicAuthenticationProvider",[359,1781,574],{"class":451},[359,1783,577],{"class":451},[359,1785,1786],{"class":361,"line":510},[359,1787,603],{"emptyLinePlaceholder":56},[359,1789,1790,1792,1794,1797,1800,1803,1805,1808,1810,1812,1814],{"class":361,"line":663},[359,1791,608],{"class":552},[359,1793,611],{"class":552},[359,1795,1796],{"class":461}," async",[359,1798,1799],{"class":461}," function",[359,1801,1802],{"class":614}," setup",[359,1804,617],{"class":451},[359,1806,1807],{"class":944},"app",[359,1809,468],{"class":451},[359,1811,1683],{"class":365},[359,1813,669],{"class":451},[359,1815,471],{"class":451},[359,1817,1818,1821,1823,1826,1828,1831,1833,1836,1838,1840,1842],{"class":361,"line":821},[359,1819,1820],{"class":559},"  app",[359,1822,333],{"class":451},[359,1824,1825],{"class":559},"container",[359,1827,333],{"class":451},[359,1829,1830],{"class":614},"bind",[359,1832,617],{"class":624},[359,1834,1835],{"class":559},"AuthProvider",[359,1837,704],{"class":451},[359,1839,1770],{"class":559},[359,1841,669],{"class":624},[359,1843,577],{"class":451},[359,1845,1846],{"class":361,"line":836},[359,1847,603],{"emptyLinePlaceholder":56},[359,1849,1850,1852,1854,1856,1858,1860,1862,1865,1867],{"class":361,"line":841},[359,1851,1820],{"class":559},[359,1853,333],{"class":451},[359,1855,1825],{"class":559},[359,1857,333],{"class":451},[359,1859,1830],{"class":614},[359,1861,617],{"class":624},[359,1863,1864],{"class":559},"StorageManager",[359,1866,669],{"class":624},[359,1868,577],{"class":451},[359,1870,1871,1873,1875,1877,1879,1882,1884,1886,1888,1890,1893,1895,1897,1900,1902,1904,1906,1908],{"class":361,"line":860},[359,1872,1820],{"class":559},[359,1874,333],{"class":451},[359,1876,1825],{"class":559},[359,1878,333],{"class":451},[359,1880,1881],{"class":614},"get",[359,1883,617],{"class":624},[359,1885,1864],{"class":559},[359,1887,669],{"class":624},[359,1889,333],{"class":451},[359,1891,1892],{"class":614},"mount",[359,1894,617],{"class":624},[359,1896,1067],{"class":451},[359,1898,1899],{"class":624}," storage",[359,1901,468],{"class":451},[359,1903,1748],{"class":559},[359,1905,563],{"class":451},[359,1907,669],{"class":624},[359,1909,577],{"class":451},[359,1911,1912],{"class":361,"line":871},[359,1913,513],{"class":451},[342,1915,1917],{"id":1916},"websockets","WebSockets",[283,1919,1616,1920,1925,1926,1928,1929,1931,1932,1935],{},[298,1921,1922],{"href":122},[293,1923,1924],{},"@vercube\u002Fws"," plugin works in both dev and production. Register it from your ",[293,1927,1547],{}," and define WebSocket controllers (",[293,1930,681],{}," + ",[293,1933,1934],{},"@Namespace",") as usual. They are auto-discovered alongside HTTP controllers.",[349,1937,1939],{"className":542,"code":1938,"filename":1669,"language":545,"meta":355,"style":355},"import { WebsocketPlugin } from '@vercube\u002Fws';\nimport type { App } from '@vercube\u002Fcore';\n\nexport default async function setup(app: App) {\n  app.addPlugin(WebsocketPlugin);\n}\n",[293,1940,1941,1962,1984,1988,2012,2030],{"__ignoreMap":355},[359,1942,1943,1945,1947,1950,1952,1954,1956,1958,1960],{"class":361,"line":362},[359,1944,553],{"class":552},[359,1946,556],{"class":451},[359,1948,1949],{"class":559}," WebsocketPlugin",[359,1951,563],{"class":451},[359,1953,566],{"class":552},[359,1955,569],{"class":451},[359,1957,1924],{"class":369},[359,1959,574],{"class":451},[359,1961,577],{"class":451},[359,1963,1964,1966,1968,1970,1972,1974,1976,1978,1980,1982],{"class":361,"line":455},[359,1965,553],{"class":552},[359,1967,1678],{"class":552},[359,1969,556],{"class":451},[359,1971,1683],{"class":559},[359,1973,563],{"class":451},[359,1975,566],{"class":552},[359,1977,569],{"class":451},[359,1979,721],{"class":369},[359,1981,574],{"class":451},[359,1983,577],{"class":451},[359,1985,1986],{"class":361,"line":474},[359,1987,603],{"emptyLinePlaceholder":56},[359,1989,1990,1992,1994,1996,1998,2000,2002,2004,2006,2008,2010],{"class":361,"line":489},[359,1991,608],{"class":552},[359,1993,611],{"class":552},[359,1995,1796],{"class":461},[359,1997,1799],{"class":461},[359,1999,1802],{"class":614},[359,2001,617],{"class":451},[359,2003,1807],{"class":944},[359,2005,468],{"class":451},[359,2007,1683],{"class":365},[359,2009,669],{"class":451},[359,2011,471],{"class":451},[359,2013,2014,2016,2018,2021,2023,2026,2028],{"class":361,"line":504},[359,2015,1820],{"class":559},[359,2017,333],{"class":451},[359,2019,2020],{"class":614},"addPlugin",[359,2022,617],{"class":624},[359,2024,2025],{"class":559},"WebsocketPlugin",[359,2027,669],{"class":624},[359,2029,577],{"class":451},[359,2031,2032],{"class":361,"line":510},[359,2033,513],{"class":451},[283,2035,2036,2037,333],{},"The dev server forwards upgrade handshakes into the worker. The production server handles them natively through ",[293,2038,2039],{},"srvx",[2041,2042,2043],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":355,"searchDepth":362,"depth":455,"links":2045},[2046,2047,2048,2049,2050,2051,2052,2053],{"id":344,"depth":455,"text":18},{"id":530,"depth":455,"text":531},{"id":1178,"depth":455,"text":1179},{"id":1232,"depth":455,"text":340},{"id":1420,"depth":455,"text":1421},{"id":1493,"depth":455,"text":1494},{"id":1622,"depth":455,"text":1597},{"id":1916,"depth":455,"text":1917},"Run Vercube as a Vite plugin using the Environment API","md",null,{},{"title":66,"description":2054},"hOo4L99EtXTSQ8JAU_jNDdTLjriiZqGovsfPJiKblBU",[2061,2063],{"title":158,"path":159,"stem":160,"description":2062,"children":-1},"Using Vercube BaseMiddleware inside a Nitro application",{"title":66,"path":176,"stem":177,"description":2064,"children":-1},"How Vercube’s default build relates to production and development, and where to deploy.",1782807887345]