[{"data":1,"prerenderedAt":393},["ShallowReactive",2],{"navigation_docs":3,"landing":36},[4,8,12,16,20,24,28,32],{"title":5,"path":6,"stem":7},"Getting started","\u002Fgetting-started","1.getting-started",{"title":9,"path":10,"stem":11},"Core concepts","\u002Fcore-concepts","2.core-concepts",{"title":13,"path":14,"stem":15},"Cross-cutting concerns","\u002Fcross-cutting","3.cross-cutting",{"title":17,"path":18,"stem":19},"Tenancy & RLS","\u002Ftenancy-and-rls","4.tenancy-and-rls",{"title":21,"path":22,"stem":23},"How the codegen works","\u002Fhow-the-codegen-works","5.how-the-codegen-works",{"title":25,"path":26,"stem":27},"vs. NestJS","\u002Fvs-nestjs","6.vs-nestjs",{"title":29,"path":30,"stem":31},"Before \u002F after","\u002Fbefore-after","7.before-after",{"title":33,"path":34,"stem":35},"Modules","\u002Fmodules","8.modules",{"id":37,"title":38,"body":39,"description":38,"extension":385,"meta":386,"navigation":189,"path":387,"seo":388,"stem":391,"__hash__":392},"landing\u002Findex.md","",{"type":40,"value":41,"toc":383},"minimark",[42,82,354,379],[43,44,46,65,68,71],"u-page-hero",{":ui":45},"{\"container\":\"py-12 sm:py-16 lg:py-20 gap-y-10\"}",[47,48,49,61],"template",{"v-slot:headline":38},[50,51],"u-color-mode-image",{"alt":52,"className":53,"dark":59,"light":60},"Nuxt Roost",[54,55,56,57,58],"mx-auto","mb-4","h-44","w-auto","sm:h-64","\u002Ficon-themed-dark.svg","\u002Ficon-themed.svg",[62,63,64],"p",{},"A Nuxt module · no reflect-metadata",[47,66,67],{"v-slot:title":38},"NestJS ergonomics for Nuxt & Nitro",[47,69,70],{"v-slot:description":38},"A Nuxt module that gives you NestJS-looking decorated controller classes. A build-time codegen reads them as an AST and emits the Nitro route files + the awilix DI manifest — so at runtime there's nothing to reflect on.",[47,72,73,78],{"v-slot:links":38},[74,75,77],"u-button",{"size":76,"to":6},"xl","Get started",[74,79,81],{"size":76,"to":30,"variant":80},"subtle","See before \u002F after",[83,84,87],"u-page-section",{"title":85,"description":86},"One feature, fully wired","That's the whole feature — roost generates the route delegates and the DI container. You never hand-write either.",[88,89,93],"pre",{"className":90,"code":91,"language":92,"meta":38,"style":38},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","@Controller('projects')\n@UseGuards(MemberGuard)\nexport class ProjectsController {\n  constructor(private readonly projects: ProjectsService) {}\n\n  @Get(':id')\n  get(@Param() id: string) {\n    return this.projects.get(id) \u002F\u002F params injected as arguments, Nest-style\n  }\n\n  @Post()\n  create(@Body(createProjectSchema) dto: CreateProjectDto) {\n    return this.projects.create(dto.name) \u002F\u002F @Body(schema) injects the validated body\n  }\n}\n","ts",[94,95,96,125,136,154,184,191,211,239,267,273,278,289,315,343,348],"code",{"__ignoreMap":38},[97,98,101,105,109,113,116,120,122],"span",{"class":99,"line":100},"line",1,[97,102,104],{"class":103},"sMK4o","@",[97,106,108],{"class":107},"s2Zo4","Controller",[97,110,112],{"class":111},"sTEyZ","(",[97,114,115],{"class":103},"'",[97,117,119],{"class":118},"sfazB","projects",[97,121,115],{"class":103},[97,123,124],{"class":111},")\n",[97,126,128,130,133],{"class":99,"line":127},2,[97,129,104],{"class":103},[97,131,132],{"class":107},"UseGuards",[97,134,135],{"class":111},"(MemberGuard)\n",[97,137,139,143,147,151],{"class":99,"line":138},3,[97,140,142],{"class":141},"s7zQu","export",[97,144,146],{"class":145},"spNyl"," class",[97,148,150],{"class":149},"sBMFI"," ProjectsController",[97,152,153],{"class":103}," {\n",[97,155,157,160,162,165,168,172,175,178,181],{"class":99,"line":156},4,[97,158,159],{"class":145},"  constructor",[97,161,112],{"class":103},[97,163,164],{"class":145},"private",[97,166,167],{"class":145}," readonly",[97,169,171],{"class":170},"sHdIc"," projects",[97,173,174],{"class":103},":",[97,176,177],{"class":149}," ProjectsService",[97,179,180],{"class":103},")",[97,182,183],{"class":103}," {}\n",[97,185,187],{"class":99,"line":186},5,[97,188,190],{"emptyLinePlaceholder":189},true,"\n",[97,192,194,197,200,202,204,207,209],{"class":99,"line":193},6,[97,195,196],{"class":103},"  @",[97,198,199],{"class":107},"Get",[97,201,112],{"class":111},[97,203,115],{"class":103},[97,205,206],{"class":118},":id",[97,208,115],{"class":103},[97,210,124],{"class":111},[97,212,214,218,221,224,227,230,232,235,237],{"class":99,"line":213},7,[97,215,217],{"class":216},"swJcz","  get",[97,219,220],{"class":103},"(@",[97,222,223],{"class":107},"Param",[97,225,226],{"class":111},"() ",[97,228,229],{"class":170},"id",[97,231,174],{"class":103},[97,233,234],{"class":149}," string",[97,236,180],{"class":103},[97,238,153],{"class":103},[97,240,242,245,248,250,253,256,258,260,263],{"class":99,"line":241},8,[97,243,244],{"class":141},"    return",[97,246,247],{"class":103}," this.",[97,249,119],{"class":111},[97,251,252],{"class":103},".",[97,254,255],{"class":107},"get",[97,257,112],{"class":216},[97,259,229],{"class":111},[97,261,262],{"class":216},") ",[97,264,266],{"class":265},"sHwdD","\u002F\u002F params injected as arguments, Nest-style\n",[97,268,270],{"class":99,"line":269},9,[97,271,272],{"class":103},"  }\n",[97,274,276],{"class":99,"line":275},10,[97,277,190],{"emptyLinePlaceholder":189},[97,279,281,283,286],{"class":99,"line":280},11,[97,282,196],{"class":103},[97,284,285],{"class":107},"Post",[97,287,288],{"class":111},"()\n",[97,290,292,295,297,300,303,306,308,311,313],{"class":99,"line":291},12,[97,293,294],{"class":216},"  create",[97,296,220],{"class":103},[97,298,299],{"class":107},"Body",[97,301,302],{"class":111},"(createProjectSchema) ",[97,304,305],{"class":170},"dto",[97,307,174],{"class":103},[97,309,310],{"class":149}," CreateProjectDto",[97,312,180],{"class":103},[97,314,153],{"class":103},[97,316,318,320,322,324,326,329,331,333,335,338,340],{"class":99,"line":317},13,[97,319,244],{"class":141},[97,321,247],{"class":103},[97,323,119],{"class":111},[97,325,252],{"class":103},[97,327,328],{"class":107},"create",[97,330,112],{"class":216},[97,332,305],{"class":111},[97,334,252],{"class":103},[97,336,337],{"class":111},"name",[97,339,262],{"class":216},[97,341,342],{"class":265},"\u002F\u002F @Body(schema) injects the validated body\n",[97,344,346],{"class":99,"line":345},14,[97,347,272],{"class":103},[97,349,351],{"class":99,"line":350},15,[97,352,353],{"class":103},"}\n",[83,355,357],{"title":356},"Explore the docs",[358,359,360,364,367,370,373,376],"u-page-grid",{},[361,362,363],"u-page-card",{"title":5,"to":6},"Install and write your first controller.",[361,365,366],{"title":9,"to":10},"Decorators as build-time annotations, awilix DI, the two generated artifacts.",[361,368,369],{"title":13,"to":14},"Guards, interceptors, and filters — all DI'd providers.",[361,371,372],{"title":29,"to":30},"The same feature hand-wired in plain Nitro vs. with roost.",[361,374,375],{"title":17,"to":18},"Tenant isolation by construction — no tenantId threading.",[361,377,378],{"title":25,"to":26},"What's the same, what's deliberately different.",[380,381,382],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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":38,"searchDepth":127,"depth":127,"links":384},[],"md",{},"\u002F",{"title":389,"description":390},"nuxt-roost — NestJS-flavored decorators for Nitro & Nuxt","NestJS-flavored decorators + dependency injection for Nitro & Nuxt, with no reflect-metadata.","index","-JhwaFo9ts9phslc8s2JUVWRjlkmHfjUfp4TlKOMJnc",1780506501382]