[{"data":1,"prerenderedAt":2859},["ShallowReactive",2],{"navigation":3,"docs-path-index":208,"-docs-advanced-custom-cli-command":272,"-docs-advanced-custom-cli-command-surround":2856},[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":205,"body":274,"description":2850,"extension":2851,"links":2852,"meta":2853,"navigation":56,"path":206,"seo":2854,"stem":207,"__hash__":2855},"docs\u002Fdocs\u002F99.advanced\u002F3.custom-cli-command.md",{"type":275,"value":276,"toc":2837},"minimark",[277,300,305,351,650,755,776,779,787,875,879,889,1107,1110,1113,1127,1214,1217,1228,1243,1313,1497,1500,1510,1524,1630,1635,1759,1762,2099,2102,2114,2430,2440,2495,2498,2548,2552,2602,2606,2630,2769,2783,2787,2798,2833],[278,279,280,281,288,289,294,295,299],"p",{},"Vercube CLI is built on top of ",[282,283,287],"a",{"href":284,"rel":285},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fcitty",[286],"nofollow","citty"," but exposes a class-based decorator layer that lets you define commands as TypeScript classes. Custom commands are loaded at runtime via ",[282,290,293],{"href":291,"rel":292},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fjiti",[286],"jiti"," - ",[296,297,298],"strong",{},"no build step required",".",[301,302,304],"h2",{"id":303},"how-custom-commands-work","How Custom Commands Work",[306,307,308,320,331,341],"ol",{},[309,310,311,312,316,317,299],"li",{},"Define a class extending ",[313,314,315],"code",{},"BaseCommand"," and decorate it with ",[313,318,319],{},"@Command",[309,321,322,323,326,327,330],{},"Annotate properties with ",[313,324,325],{},"@Arg"," (positional) or ",[313,328,329],{},"@Flag"," (named option).",[309,332,333,334,337,338,299],{},"Register the class in ",[313,335,336],{},"vercube.config.ts"," under ",[313,339,340],{},"cli.commands",[309,342,343,344,347,348,299],{},"Run ",[313,345,346],{},"vercube \u003Cname>"," - the CLI loads your config, resolves the class, injects dependencies, injects parsed args, and calls ",[313,349,350],{},"run()",[352,353,358],"pre",{"className":354,"code":355,"language":356,"meta":357,"style":357},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F src\u002FCommands\u002FDeploy.ts\nimport { BaseCommand, Command, Flag } from '@vercube\u002Fcli\u002Ftoolkit';\n\n@Command({ name: 'deploy', description: 'Deploy to production' })\nexport class DeployCommand extends BaseCommand {\n  @Flag({ name: 'env', description: 'Target environment', default: 'staging' })\n  public env: string;\n\n  public override async run(): Promise\u003Cvoid> {\n    console.log(`Deploying to ${this.env}...`);\n  }\n}\n","ts","",[313,359,360,369,414,420,469,491,546,562,567,598,638,644],{"__ignoreMap":357},[361,362,365],"span",{"class":363,"line":364},"line",1,[361,366,368],{"class":367},"sHwdD","\u002F\u002F src\u002FCommands\u002FDeploy.ts\n",[361,370,372,376,380,384,387,390,392,395,398,401,404,408,411],{"class":363,"line":371},2,[361,373,375],{"class":374},"s7zQu","import",[361,377,379],{"class":378},"sMK4o"," {",[361,381,383],{"class":382},"sTEyZ"," BaseCommand",[361,385,386],{"class":378},",",[361,388,389],{"class":382}," Command",[361,391,386],{"class":378},[361,393,394],{"class":382}," Flag",[361,396,397],{"class":378}," }",[361,399,400],{"class":374}," from",[361,402,403],{"class":378}," '",[361,405,407],{"class":406},"sfazB","@vercube\u002Fcli\u002Ftoolkit",[361,409,410],{"class":378},"'",[361,412,413],{"class":378},";\n",[361,415,417],{"class":363,"line":416},3,[361,418,419],{"emptyLinePlaceholder":56},"\n",[361,421,423,426,430,433,436,440,443,445,448,450,452,455,457,459,462,464,466],{"class":363,"line":422},4,[361,424,425],{"class":378},"@",[361,427,429],{"class":428},"s2Zo4","Command",[361,431,432],{"class":382},"(",[361,434,435],{"class":378},"{",[361,437,439],{"class":438},"swJcz"," name",[361,441,442],{"class":378},":",[361,444,403],{"class":378},[361,446,447],{"class":406},"deploy",[361,449,410],{"class":378},[361,451,386],{"class":378},[361,453,454],{"class":438}," description",[361,456,442],{"class":378},[361,458,403],{"class":378},[361,460,461],{"class":406},"Deploy to production",[361,463,410],{"class":378},[361,465,397],{"class":378},[361,467,468],{"class":382},")\n",[361,470,472,475,479,483,486,488],{"class":363,"line":471},5,[361,473,474],{"class":374},"export",[361,476,478],{"class":477},"spNyl"," class",[361,480,482],{"class":481},"sBMFI"," DeployCommand",[361,484,485],{"class":477}," extends",[361,487,383],{"class":481},[361,489,490],{"class":378}," {\n",[361,492,494,497,500,502,504,506,508,510,513,515,517,519,521,523,526,528,530,533,535,537,540,542,544],{"class":363,"line":493},6,[361,495,496],{"class":378},"  @",[361,498,499],{"class":428},"Flag",[361,501,432],{"class":382},[361,503,435],{"class":378},[361,505,439],{"class":438},[361,507,442],{"class":378},[361,509,403],{"class":378},[361,511,512],{"class":406},"env",[361,514,410],{"class":378},[361,516,386],{"class":378},[361,518,454],{"class":438},[361,520,442],{"class":378},[361,522,403],{"class":378},[361,524,525],{"class":406},"Target environment",[361,527,410],{"class":378},[361,529,386],{"class":378},[361,531,532],{"class":438}," default",[361,534,442],{"class":378},[361,536,403],{"class":378},[361,538,539],{"class":406},"staging",[361,541,410],{"class":378},[361,543,397],{"class":378},[361,545,468],{"class":382},[361,547,549,552,555,557,560],{"class":363,"line":548},7,[361,550,551],{"class":477},"  public",[361,553,554],{"class":438}," env",[361,556,442],{"class":378},[361,558,559],{"class":481}," string",[361,561,413],{"class":378},[361,563,565],{"class":363,"line":564},8,[361,566,419],{"emptyLinePlaceholder":56},[361,568,570,572,575,578,581,584,587,590,593,596],{"class":363,"line":569},9,[361,571,551],{"class":477},[361,573,574],{"class":477}," override",[361,576,577],{"class":477}," async",[361,579,580],{"class":438}," run",[361,582,583],{"class":378},"():",[361,585,586],{"class":481}," Promise",[361,588,589],{"class":378},"\u003C",[361,591,592],{"class":481},"void",[361,594,595],{"class":378},">",[361,597,490],{"class":378},[361,599,601,604,606,609,611,614,617,620,623,625,628,631,633,636],{"class":363,"line":600},10,[361,602,603],{"class":382},"    console",[361,605,299],{"class":378},[361,607,608],{"class":428},"log",[361,610,432],{"class":438},[361,612,613],{"class":378},"`",[361,615,616],{"class":406},"Deploying to ",[361,618,619],{"class":378},"${",[361,621,622],{"class":378},"this.",[361,624,512],{"class":382},[361,626,627],{"class":378},"}",[361,629,630],{"class":406},"...",[361,632,613],{"class":378},[361,634,635],{"class":438},")",[361,637,413],{"class":378},[361,639,641],{"class":363,"line":640},11,[361,642,643],{"class":378},"  }\n",[361,645,647],{"class":363,"line":646},12,[361,648,649],{"class":378},"}\n",[352,651,653],{"className":354,"code":652,"language":356,"meta":357,"style":357},"\u002F\u002F vercube.config.ts\nimport { defineConfig } from '@vercube\u002Fcore';\nimport { DeployCommand } from '.\u002Fsrc\u002FCommands\u002FDeploy';\n\nexport default defineConfig({\n  cli: {\n    commands: [DeployCommand],\n  },\n});\n",[313,654,655,660,682,703,707,720,729,742,747],{"__ignoreMap":357},[361,656,657],{"class":363,"line":364},[361,658,659],{"class":367},"\u002F\u002F vercube.config.ts\n",[361,661,662,664,666,669,671,673,675,678,680],{"class":363,"line":371},[361,663,375],{"class":374},[361,665,379],{"class":378},[361,667,668],{"class":382}," defineConfig",[361,670,397],{"class":378},[361,672,400],{"class":374},[361,674,403],{"class":378},[361,676,677],{"class":406},"@vercube\u002Fcore",[361,679,410],{"class":378},[361,681,413],{"class":378},[361,683,684,686,688,690,692,694,696,699,701],{"class":363,"line":416},[361,685,375],{"class":374},[361,687,379],{"class":378},[361,689,482],{"class":382},[361,691,397],{"class":378},[361,693,400],{"class":374},[361,695,403],{"class":378},[361,697,698],{"class":406},".\u002Fsrc\u002FCommands\u002FDeploy",[361,700,410],{"class":378},[361,702,413],{"class":378},[361,704,705],{"class":363,"line":422},[361,706,419],{"emptyLinePlaceholder":56},[361,708,709,711,713,715,717],{"class":363,"line":471},[361,710,474],{"class":374},[361,712,532],{"class":374},[361,714,668],{"class":428},[361,716,432],{"class":382},[361,718,719],{"class":378},"{\n",[361,721,722,725,727],{"class":363,"line":493},[361,723,724],{"class":438},"  cli",[361,726,442],{"class":378},[361,728,490],{"class":378},[361,730,731,734,736,739],{"class":363,"line":548},[361,732,733],{"class":438},"    commands",[361,735,442],{"class":378},[361,737,738],{"class":382}," [DeployCommand]",[361,740,741],{"class":378},",\n",[361,743,744],{"class":363,"line":564},[361,745,746],{"class":378},"  },\n",[361,748,749,751,753],{"class":363,"line":569},[361,750,627],{"class":378},[361,752,635],{"class":382},[361,754,413],{"class":378},[352,756,760],{"className":757,"code":758,"language":759,"meta":357,"style":357},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","vercube deploy --env production\n","sh",[313,761,762],{"__ignoreMap":357},[361,763,764,767,770,773],{"class":363,"line":364},[361,765,766],{"class":481},"vercube",[361,768,769],{"class":406}," deploy",[361,771,772],{"class":406}," --env",[361,774,775],{"class":406}," production\n",[301,777,315],{"id":778},"basecommand",[278,780,781,782,784,785,299],{},"Every command must extend ",[313,783,315],{}," and implement ",[313,786,350],{},[352,788,790],{"className":354,"code":789,"language":356,"meta":357,"style":357},"import { BaseCommand } from '@vercube\u002Fcli\u002Ftoolkit';\n\nexport abstract class BaseCommand {\n  protected container: Container; \u002F\u002F CLI DI container - prefer @Inject instead\n\n  public abstract run(): Promise\u003Cvoid>;\n}\n",[313,791,792,812,816,829,848,852,871],{"__ignoreMap":357},[361,793,794,796,798,800,802,804,806,808,810],{"class":363,"line":364},[361,795,375],{"class":374},[361,797,379],{"class":378},[361,799,383],{"class":382},[361,801,397],{"class":378},[361,803,400],{"class":374},[361,805,403],{"class":378},[361,807,407],{"class":406},[361,809,410],{"class":378},[361,811,413],{"class":378},[361,813,814],{"class":363,"line":371},[361,815,419],{"emptyLinePlaceholder":56},[361,817,818,820,823,825,827],{"class":363,"line":416},[361,819,474],{"class":374},[361,821,822],{"class":477}," abstract",[361,824,478],{"class":477},[361,826,383],{"class":481},[361,828,490],{"class":378},[361,830,831,834,837,839,842,845],{"class":363,"line":422},[361,832,833],{"class":477},"  protected",[361,835,836],{"class":438}," container",[361,838,442],{"class":378},[361,840,841],{"class":481}," Container",[361,843,844],{"class":378},";",[361,846,847],{"class":367}," \u002F\u002F CLI DI container - prefer @Inject instead\n",[361,849,850],{"class":363,"line":471},[361,851,419],{"emptyLinePlaceholder":56},[361,853,854,856,858,860,862,864,866,868],{"class":363,"line":493},[361,855,551],{"class":477},[361,857,822],{"class":477},[361,859,580],{"class":438},[361,861,583],{"class":378},[361,863,586],{"class":481},[361,865,589],{"class":378},[361,867,592],{"class":481},[361,869,870],{"class":378},">;\n",[361,872,873],{"class":363,"line":548},[361,874,649],{"class":378},[876,877,37],"h3",{"id":878},"dependency-injection",[278,880,881,882,885,886,888],{},"Commands are resolved through the CLI DI container, so any property decorated with ",[313,883,884],{},"@Inject"," is automatically wired before ",[313,887,350],{}," is called.",[352,890,892],{"className":354,"code":891,"language":356,"meta":357,"style":357},"import { Inject } from '@vercube\u002Fdi';\nimport { Logger } from '@vercube\u002Flogger';\nimport { BaseCommand, Command } from '@vercube\u002Fcli\u002Ftoolkit';\n\n@Command({ name: 'status', description: 'Show application status' })\nexport class StatusCommand extends BaseCommand {\n  @Inject(Logger)\n  private readonly gLogger: Logger;\n\n  public override async run(): Promise\u003Cvoid> {\n    this.gLogger.info('Application is running.');\n  }\n}\n",[313,893,894,916,938,962,966,1004,1019,1029,1046,1050,1072,1098,1102],{"__ignoreMap":357},[361,895,896,898,900,903,905,907,909,912,914],{"class":363,"line":364},[361,897,375],{"class":374},[361,899,379],{"class":378},[361,901,902],{"class":382}," Inject",[361,904,397],{"class":378},[361,906,400],{"class":374},[361,908,403],{"class":378},[361,910,911],{"class":406},"@vercube\u002Fdi",[361,913,410],{"class":378},[361,915,413],{"class":378},[361,917,918,920,922,925,927,929,931,934,936],{"class":363,"line":371},[361,919,375],{"class":374},[361,921,379],{"class":378},[361,923,924],{"class":382}," Logger",[361,926,397],{"class":378},[361,928,400],{"class":374},[361,930,403],{"class":378},[361,932,933],{"class":406},"@vercube\u002Flogger",[361,935,410],{"class":378},[361,937,413],{"class":378},[361,939,940,942,944,946,948,950,952,954,956,958,960],{"class":363,"line":416},[361,941,375],{"class":374},[361,943,379],{"class":378},[361,945,383],{"class":382},[361,947,386],{"class":378},[361,949,389],{"class":382},[361,951,397],{"class":378},[361,953,400],{"class":374},[361,955,403],{"class":378},[361,957,407],{"class":406},[361,959,410],{"class":378},[361,961,413],{"class":378},[361,963,964],{"class":363,"line":422},[361,965,419],{"emptyLinePlaceholder":56},[361,967,968,970,972,974,976,978,980,982,985,987,989,991,993,995,998,1000,1002],{"class":363,"line":471},[361,969,425],{"class":378},[361,971,429],{"class":428},[361,973,432],{"class":382},[361,975,435],{"class":378},[361,977,439],{"class":438},[361,979,442],{"class":378},[361,981,403],{"class":378},[361,983,984],{"class":406},"status",[361,986,410],{"class":378},[361,988,386],{"class":378},[361,990,454],{"class":438},[361,992,442],{"class":378},[361,994,403],{"class":378},[361,996,997],{"class":406},"Show application status",[361,999,410],{"class":378},[361,1001,397],{"class":378},[361,1003,468],{"class":382},[361,1005,1006,1008,1010,1013,1015,1017],{"class":363,"line":493},[361,1007,474],{"class":374},[361,1009,478],{"class":477},[361,1011,1012],{"class":481}," StatusCommand",[361,1014,485],{"class":477},[361,1016,383],{"class":481},[361,1018,490],{"class":378},[361,1020,1021,1023,1026],{"class":363,"line":548},[361,1022,496],{"class":378},[361,1024,1025],{"class":428},"Inject",[361,1027,1028],{"class":382},"(Logger)\n",[361,1030,1031,1034,1037,1040,1042,1044],{"class":363,"line":564},[361,1032,1033],{"class":477},"  private",[361,1035,1036],{"class":477}," readonly",[361,1038,1039],{"class":438}," gLogger",[361,1041,442],{"class":378},[361,1043,924],{"class":481},[361,1045,413],{"class":378},[361,1047,1048],{"class":363,"line":569},[361,1049,419],{"emptyLinePlaceholder":56},[361,1051,1052,1054,1056,1058,1060,1062,1064,1066,1068,1070],{"class":363,"line":600},[361,1053,551],{"class":477},[361,1055,574],{"class":477},[361,1057,577],{"class":477},[361,1059,580],{"class":438},[361,1061,583],{"class":378},[361,1063,586],{"class":481},[361,1065,589],{"class":378},[361,1067,592],{"class":481},[361,1069,595],{"class":378},[361,1071,490],{"class":378},[361,1073,1074,1077,1080,1082,1085,1087,1089,1092,1094,1096],{"class":363,"line":640},[361,1075,1076],{"class":378},"    this.",[361,1078,1079],{"class":382},"gLogger",[361,1081,299],{"class":378},[361,1083,1084],{"class":428},"info",[361,1086,432],{"class":438},[361,1088,410],{"class":378},[361,1090,1091],{"class":406},"Application is running.",[361,1093,410],{"class":378},[361,1095,635],{"class":438},[361,1097,413],{"class":378},[361,1099,1100],{"class":363,"line":646},[361,1101,643],{"class":378},[361,1103,1105],{"class":363,"line":1104},13,[361,1106,649],{"class":378},[301,1108,319],{"id":1109},"command",[278,1111,1112],{},"Class decorator that registers command metadata.",[352,1114,1116],{"className":354,"code":1115,"language":356,"meta":357,"style":357},"@Command(meta: CommandMeta)\n",[313,1117,1118],{"__ignoreMap":357},[361,1119,1120,1122,1124],{"class":363,"line":364},[361,1121,425],{"class":378},[361,1123,429],{"class":428},[361,1125,1126],{"class":382},"(meta: CommandMeta)\n",[1128,1129,1130,1149],"table",{},[1131,1132,1133],"thead",{},[1134,1135,1136,1140,1143,1146],"tr",{},[1137,1138,1139],"th",{},"Field",[1137,1141,1142],{},"Type",[1137,1144,1145],{},"Required",[1137,1147,1148],{},"Description",[1150,1151,1152,1173,1192],"tbody",{},[1134,1153,1154,1160,1165,1168],{},[1155,1156,1157],"td",{},[313,1158,1159],{},"name",[1155,1161,1162],{},[313,1163,1164],{},"string",[1155,1166,1167],{},"✅",[1155,1169,1170,1171,635],{},"Command name used on the CLI (",[313,1172,346],{},[1134,1174,1175,1180,1184,1186],{},[1155,1176,1177],{},[313,1178,1179],{},"description",[1155,1181,1182],{},[313,1183,1164],{},[1155,1185,1167],{},[1155,1187,1188,1189],{},"Short description shown in ",[313,1190,1191],{},"--help",[1134,1193,1194,1199,1204,1207],{},[1155,1195,1196],{},[313,1197,1198],{},"subCommands",[1155,1200,1201],{},[313,1202,1203],{},"(new () => BaseCommand)[]",[1155,1205,1206],{},"-",[1155,1208,1209,1210,635],{},"Child command classes (see ",[282,1211,1213],{"href":1212},"#subcommands","Subcommands",[301,1215,325],{"id":1216},"arg",[278,1218,1219,1220,1223,1224,1227],{},"Property decorator for ",[296,1221,1222],{},"positional"," arguments (order-sensitive, no ",[313,1225,1226],{},"--"," prefix).",[352,1229,1231],{"className":354,"code":1230,"language":356,"meta":357,"style":357},"@Arg(options: ArgOptions)\n",[313,1232,1233],{"__ignoreMap":357},[361,1234,1235,1237,1240],{"class":363,"line":364},[361,1236,425],{"class":378},[361,1238,1239],{"class":428},"Arg",[361,1241,1242],{"class":382},"(options: ArgOptions)\n",[1128,1244,1245,1257],{},[1131,1246,1247],{},[1134,1248,1249,1251,1253,1255],{},[1137,1250,1139],{},[1137,1252,1142],{},[1137,1254,1145],{},[1137,1256,1148],{},[1150,1258,1259,1277,1293],{},[1134,1260,1261,1265,1269,1271],{},[1155,1262,1263],{},[313,1264,1159],{},[1155,1266,1267],{},[313,1268,1164],{},[1155,1270,1167],{},[1155,1272,1273,1274,635],{},"Argument name shown in usage (",[313,1275,1276],{},"vercube cmd \u003Cname>",[1134,1278,1279,1283,1287,1289],{},[1155,1280,1281],{},[313,1282,1179],{},[1155,1284,1285],{},[313,1286,1164],{},[1155,1288,1206],{},[1155,1290,1188,1291],{},[313,1292,1191],{},[1134,1294,1295,1300,1305,1307],{},[1155,1296,1297],{},[313,1298,1299],{},"required",[1155,1301,1302],{},[313,1303,1304],{},"boolean",[1155,1306,1206],{},[1155,1308,1309,1310,635],{},"Whether the argument is required (default: ",[313,1311,1312],{},"false",[352,1314,1316],{"className":354,"code":1315,"language":356,"meta":357,"style":357},"@Command({ name: 'greet', description: 'Print a greeting' })\nexport class GreetCommand extends BaseCommand {\n  @Arg({ name: 'name', description: 'Name to greet', required: true })\n  public name: string;\n\n  public override async run(): Promise\u003Cvoid> {\n    console.log(`Hello, ${this.name}!`);\n  }\n}\n",[313,1317,1318,1356,1371,1419,1431,1435,1457,1489,1493],{"__ignoreMap":357},[361,1319,1320,1322,1324,1326,1328,1330,1332,1334,1337,1339,1341,1343,1345,1347,1350,1352,1354],{"class":363,"line":364},[361,1321,425],{"class":378},[361,1323,429],{"class":428},[361,1325,432],{"class":382},[361,1327,435],{"class":378},[361,1329,439],{"class":438},[361,1331,442],{"class":378},[361,1333,403],{"class":378},[361,1335,1336],{"class":406},"greet",[361,1338,410],{"class":378},[361,1340,386],{"class":378},[361,1342,454],{"class":438},[361,1344,442],{"class":378},[361,1346,403],{"class":378},[361,1348,1349],{"class":406},"Print a greeting",[361,1351,410],{"class":378},[361,1353,397],{"class":378},[361,1355,468],{"class":382},[361,1357,1358,1360,1362,1365,1367,1369],{"class":363,"line":371},[361,1359,474],{"class":374},[361,1361,478],{"class":477},[361,1363,1364],{"class":481}," GreetCommand",[361,1366,485],{"class":477},[361,1368,383],{"class":481},[361,1370,490],{"class":378},[361,1372,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399,1402,1404,1406,1409,1411,1415,1417],{"class":363,"line":416},[361,1374,496],{"class":378},[361,1376,1239],{"class":428},[361,1378,432],{"class":382},[361,1380,435],{"class":378},[361,1382,439],{"class":438},[361,1384,442],{"class":378},[361,1386,403],{"class":378},[361,1388,1159],{"class":406},[361,1390,410],{"class":378},[361,1392,386],{"class":378},[361,1394,454],{"class":438},[361,1396,442],{"class":378},[361,1398,403],{"class":378},[361,1400,1401],{"class":406},"Name to greet",[361,1403,410],{"class":378},[361,1405,386],{"class":378},[361,1407,1408],{"class":438}," required",[361,1410,442],{"class":378},[361,1412,1414],{"class":1413},"sfNiH"," true",[361,1416,397],{"class":378},[361,1418,468],{"class":382},[361,1420,1421,1423,1425,1427,1429],{"class":363,"line":422},[361,1422,551],{"class":477},[361,1424,439],{"class":438},[361,1426,442],{"class":378},[361,1428,559],{"class":481},[361,1430,413],{"class":378},[361,1432,1433],{"class":363,"line":471},[361,1434,419],{"emptyLinePlaceholder":56},[361,1436,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455],{"class":363,"line":493},[361,1438,551],{"class":477},[361,1440,574],{"class":477},[361,1442,577],{"class":477},[361,1444,580],{"class":438},[361,1446,583],{"class":378},[361,1448,586],{"class":481},[361,1450,589],{"class":378},[361,1452,592],{"class":481},[361,1454,595],{"class":378},[361,1456,490],{"class":378},[361,1458,1459,1461,1463,1465,1467,1469,1472,1474,1476,1478,1480,1483,1485,1487],{"class":363,"line":548},[361,1460,603],{"class":382},[361,1462,299],{"class":378},[361,1464,608],{"class":428},[361,1466,432],{"class":438},[361,1468,613],{"class":378},[361,1470,1471],{"class":406},"Hello, ",[361,1473,619],{"class":378},[361,1475,622],{"class":378},[361,1477,1159],{"class":382},[361,1479,627],{"class":378},[361,1481,1482],{"class":406},"!",[361,1484,613],{"class":378},[361,1486,635],{"class":438},[361,1488,413],{"class":378},[361,1490,1491],{"class":363,"line":564},[361,1492,643],{"class":378},[361,1494,1495],{"class":363,"line":569},[361,1496,649],{"class":378},[301,1498,329],{"id":1499},"flag",[278,1501,1219,1502,1505,1506,1509],{},[296,1503,1504],{},"named options"," (",[313,1507,1508],{},"--flag-name value",").",[352,1511,1513],{"className":354,"code":1512,"language":356,"meta":357,"style":357},"@Flag(options: FlagOptions)\n",[313,1514,1515],{"__ignoreMap":357},[361,1516,1517,1519,1521],{"class":363,"line":364},[361,1518,425],{"class":378},[361,1520,499],{"class":428},[361,1522,1523],{"class":382},"(options: FlagOptions)\n",[1128,1525,1526,1538],{},[1131,1527,1528],{},[1134,1529,1530,1532,1534,1536],{},[1137,1531,1139],{},[1137,1533,1142],{},[1137,1535,1145],{},[1137,1537,1148],{},[1150,1539,1540,1558,1574,1594,1611],{},[1134,1541,1542,1546,1550,1552],{},[1155,1543,1544],{},[313,1545,1159],{},[1155,1547,1548],{},[313,1549,1164],{},[1155,1551,1167],{},[1155,1553,1554,1555,635],{},"Flag name used on the CLI (",[313,1556,1557],{},"--name",[1134,1559,1560,1564,1568,1570],{},[1155,1561,1562],{},[313,1563,1179],{},[1155,1565,1566],{},[313,1567,1164],{},[1155,1569,1206],{},[1155,1571,1188,1572],{},[313,1573,1191],{},[1134,1575,1576,1581,1586,1588],{},[1155,1577,1578],{},[313,1579,1580],{},"default",[1155,1582,1583],{},[313,1584,1585],{},"unknown",[1155,1587,1206],{},[1155,1589,1590,1591],{},"Default value - also used to infer ",[313,1592,1593],{},"type",[1134,1595,1596,1600,1604,1606],{},[1155,1597,1598],{},[313,1599,1299],{},[1155,1601,1602],{},[313,1603,1304],{},[1155,1605,1206],{},[1155,1607,1608,1609,635],{},"Whether the flag is required (default: ",[313,1610,1312],{},[1134,1612,1613,1617,1622,1624],{},[1155,1614,1615],{},[313,1616,1593],{},[1155,1618,1619],{},[313,1620,1621],{},"'string' | 'boolean' | 'number'",[1155,1623,1206],{},[1155,1625,1626,1627,1629],{},"Explicit citty value type (inferred from ",[313,1628,1580],{}," when omitted)",[278,1631,1632,1633,442],{},"The value type is automatically inferred from ",[313,1634,1580],{},[352,1636,1638],{"className":354,"code":1637,"language":356,"meta":357,"style":357},"@Flag({ name: 'limit', default: 10 })    \u002F\u002F → type: 'number'\n@Flag({ name: 'json',  default: false }) \u002F\u002F → type: 'boolean'\n@Flag({ name: 'env',   default: 'dev' }) \u002F\u002F → type: 'string'\n",[313,1639,1640,1679,1718],{"__ignoreMap":357},[361,1641,1642,1644,1646,1648,1650,1652,1654,1656,1659,1661,1663,1665,1667,1671,1673,1676],{"class":363,"line":364},[361,1643,425],{"class":378},[361,1645,499],{"class":428},[361,1647,432],{"class":382},[361,1649,435],{"class":378},[361,1651,439],{"class":438},[361,1653,442],{"class":378},[361,1655,403],{"class":378},[361,1657,1658],{"class":406},"limit",[361,1660,410],{"class":378},[361,1662,386],{"class":378},[361,1664,532],{"class":438},[361,1666,442],{"class":378},[361,1668,1670],{"class":1669},"sbssI"," 10",[361,1672,397],{"class":378},[361,1674,1675],{"class":382},")    ",[361,1677,1678],{"class":367},"\u002F\u002F → type: 'number'\n",[361,1680,1681,1683,1685,1687,1689,1691,1693,1695,1698,1700,1702,1705,1707,1710,1712,1715],{"class":363,"line":371},[361,1682,425],{"class":378},[361,1684,499],{"class":428},[361,1686,432],{"class":382},[361,1688,435],{"class":378},[361,1690,439],{"class":438},[361,1692,442],{"class":378},[361,1694,403],{"class":378},[361,1696,1697],{"class":406},"json",[361,1699,410],{"class":378},[361,1701,386],{"class":378},[361,1703,1704],{"class":438},"  default",[361,1706,442],{"class":378},[361,1708,1709],{"class":1413}," false",[361,1711,397],{"class":378},[361,1713,1714],{"class":382},") ",[361,1716,1717],{"class":367},"\u002F\u002F → type: 'boolean'\n",[361,1719,1720,1722,1724,1726,1728,1730,1732,1734,1736,1738,1740,1743,1745,1747,1750,1752,1754,1756],{"class":363,"line":416},[361,1721,425],{"class":378},[361,1723,499],{"class":428},[361,1725,432],{"class":382},[361,1727,435],{"class":378},[361,1729,439],{"class":438},[361,1731,442],{"class":378},[361,1733,403],{"class":378},[361,1735,512],{"class":406},[361,1737,410],{"class":378},[361,1739,386],{"class":378},[361,1741,1742],{"class":438},"   default",[361,1744,442],{"class":378},[361,1746,403],{"class":378},[361,1748,1749],{"class":406},"dev",[361,1751,410],{"class":378},[361,1753,397],{"class":378},[361,1755,1714],{"class":382},[361,1757,1758],{"class":367},"\u002F\u002F → type: 'string'\n",[278,1760,1761],{},"Full example with multiple flags:",[352,1763,1765],{"className":354,"code":1764,"language":356,"meta":357,"style":357},"@Command({ name: 'export', description: 'Export data' })\nexport class ExportCommand extends BaseCommand {\n  @Flag({ name: 'format', description: 'Output format', default: 'json' })\n  public format: string;\n\n  @Flag({ name: 'limit', description: 'Max records', default: 100 })\n  public limit: number;\n\n  @Flag({ name: 'pretty', description: 'Pretty-print output', default: false })\n  public pretty: boolean;\n\n  public override async run(): Promise\u003Cvoid> {\n    console.log(`Exporting ${this.limit} records as ${this.format} (pretty: ${this.pretty})`);\n  }\n}\n",[313,1766,1767,1804,1819,1869,1882,1886,1932,1946,1950,1996,2010,2014,2036,2089,2094],{"__ignoreMap":357},[361,1768,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1798,1800,1802],{"class":363,"line":364},[361,1770,425],{"class":378},[361,1772,429],{"class":428},[361,1774,432],{"class":382},[361,1776,435],{"class":378},[361,1778,439],{"class":438},[361,1780,442],{"class":378},[361,1782,403],{"class":378},[361,1784,474],{"class":406},[361,1786,410],{"class":378},[361,1788,386],{"class":378},[361,1790,454],{"class":438},[361,1792,442],{"class":378},[361,1794,403],{"class":378},[361,1796,1797],{"class":406},"Export data",[361,1799,410],{"class":378},[361,1801,397],{"class":378},[361,1803,468],{"class":382},[361,1805,1806,1808,1810,1813,1815,1817],{"class":363,"line":371},[361,1807,474],{"class":374},[361,1809,478],{"class":477},[361,1811,1812],{"class":481}," ExportCommand",[361,1814,485],{"class":477},[361,1816,383],{"class":481},[361,1818,490],{"class":378},[361,1820,1821,1823,1825,1827,1829,1831,1833,1835,1838,1840,1842,1844,1846,1848,1851,1853,1855,1857,1859,1861,1863,1865,1867],{"class":363,"line":416},[361,1822,496],{"class":378},[361,1824,499],{"class":428},[361,1826,432],{"class":382},[361,1828,435],{"class":378},[361,1830,439],{"class":438},[361,1832,442],{"class":378},[361,1834,403],{"class":378},[361,1836,1837],{"class":406},"format",[361,1839,410],{"class":378},[361,1841,386],{"class":378},[361,1843,454],{"class":438},[361,1845,442],{"class":378},[361,1847,403],{"class":378},[361,1849,1850],{"class":406},"Output format",[361,1852,410],{"class":378},[361,1854,386],{"class":378},[361,1856,532],{"class":438},[361,1858,442],{"class":378},[361,1860,403],{"class":378},[361,1862,1697],{"class":406},[361,1864,410],{"class":378},[361,1866,397],{"class":378},[361,1868,468],{"class":382},[361,1870,1871,1873,1876,1878,1880],{"class":363,"line":422},[361,1872,551],{"class":477},[361,1874,1875],{"class":438}," format",[361,1877,442],{"class":378},[361,1879,559],{"class":481},[361,1881,413],{"class":378},[361,1883,1884],{"class":363,"line":471},[361,1885,419],{"emptyLinePlaceholder":56},[361,1887,1888,1890,1892,1894,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1917,1919,1921,1923,1925,1928,1930],{"class":363,"line":493},[361,1889,496],{"class":378},[361,1891,499],{"class":428},[361,1893,432],{"class":382},[361,1895,435],{"class":378},[361,1897,439],{"class":438},[361,1899,442],{"class":378},[361,1901,403],{"class":378},[361,1903,1658],{"class":406},[361,1905,410],{"class":378},[361,1907,386],{"class":378},[361,1909,454],{"class":438},[361,1911,442],{"class":378},[361,1913,403],{"class":378},[361,1915,1916],{"class":406},"Max records",[361,1918,410],{"class":378},[361,1920,386],{"class":378},[361,1922,532],{"class":438},[361,1924,442],{"class":378},[361,1926,1927],{"class":1669}," 100",[361,1929,397],{"class":378},[361,1931,468],{"class":382},[361,1933,1934,1936,1939,1941,1944],{"class":363,"line":548},[361,1935,551],{"class":477},[361,1937,1938],{"class":438}," limit",[361,1940,442],{"class":378},[361,1942,1943],{"class":481}," number",[361,1945,413],{"class":378},[361,1947,1948],{"class":363,"line":564},[361,1949,419],{"emptyLinePlaceholder":56},[361,1951,1952,1954,1956,1958,1960,1962,1964,1966,1969,1971,1973,1975,1977,1979,1982,1984,1986,1988,1990,1992,1994],{"class":363,"line":569},[361,1953,496],{"class":378},[361,1955,499],{"class":428},[361,1957,432],{"class":382},[361,1959,435],{"class":378},[361,1961,439],{"class":438},[361,1963,442],{"class":378},[361,1965,403],{"class":378},[361,1967,1968],{"class":406},"pretty",[361,1970,410],{"class":378},[361,1972,386],{"class":378},[361,1974,454],{"class":438},[361,1976,442],{"class":378},[361,1978,403],{"class":378},[361,1980,1981],{"class":406},"Pretty-print output",[361,1983,410],{"class":378},[361,1985,386],{"class":378},[361,1987,532],{"class":438},[361,1989,442],{"class":378},[361,1991,1709],{"class":1413},[361,1993,397],{"class":378},[361,1995,468],{"class":382},[361,1997,1998,2000,2003,2005,2008],{"class":363,"line":600},[361,1999,551],{"class":477},[361,2001,2002],{"class":438}," pretty",[361,2004,442],{"class":378},[361,2006,2007],{"class":481}," boolean",[361,2009,413],{"class":378},[361,2011,2012],{"class":363,"line":640},[361,2013,419],{"emptyLinePlaceholder":56},[361,2015,2016,2018,2020,2022,2024,2026,2028,2030,2032,2034],{"class":363,"line":646},[361,2017,551],{"class":477},[361,2019,574],{"class":477},[361,2021,577],{"class":477},[361,2023,580],{"class":438},[361,2025,583],{"class":378},[361,2027,586],{"class":481},[361,2029,589],{"class":378},[361,2031,592],{"class":481},[361,2033,595],{"class":378},[361,2035,490],{"class":378},[361,2037,2038,2040,2042,2044,2046,2048,2051,2053,2055,2057,2059,2062,2064,2066,2068,2070,2073,2075,2077,2079,2081,2083,2085,2087],{"class":363,"line":1104},[361,2039,603],{"class":382},[361,2041,299],{"class":378},[361,2043,608],{"class":428},[361,2045,432],{"class":438},[361,2047,613],{"class":378},[361,2049,2050],{"class":406},"Exporting ",[361,2052,619],{"class":378},[361,2054,622],{"class":378},[361,2056,1658],{"class":382},[361,2058,627],{"class":378},[361,2060,2061],{"class":406}," records as ",[361,2063,619],{"class":378},[361,2065,622],{"class":378},[361,2067,1837],{"class":382},[361,2069,627],{"class":378},[361,2071,2072],{"class":406}," (pretty: ",[361,2074,619],{"class":378},[361,2076,622],{"class":378},[361,2078,1968],{"class":382},[361,2080,627],{"class":378},[361,2082,635],{"class":406},[361,2084,613],{"class":378},[361,2086,635],{"class":438},[361,2088,413],{"class":378},[361,2090,2092],{"class":363,"line":2091},14,[361,2093,643],{"class":378},[361,2095,2097],{"class":363,"line":2096},15,[361,2098,649],{"class":378},[301,2100,1213],{"id":2101},"subcommands",[278,2103,2104,2105,2107,2108,2110,2111,2113],{},"Commands can be nested by passing ",[313,2106,1198],{}," to ",[313,2109,319],{},". Each subcommand is an independent ",[313,2112,315],{}," class.",[352,2115,2117],{"className":354,"code":2116,"language":356,"meta":357,"style":357},"\u002F\u002F src\u002FCommands\u002FDbMigrate.ts\n@Command({ name: 'migrate', description: 'Run pending migrations' })\nexport class DbMigrateCommand extends BaseCommand {\n  @Flag({ name: 'dry-run', description: 'Preview without applying', default: false })\n  public dryRun: boolean;\n\n  public override async run(): Promise\u003Cvoid> {\n    console.log(this.dryRun ? 'Dry run - no changes applied.' : 'Migrations applied.');\n  }\n}\n\n\u002F\u002F src\u002FCommands\u002FDb.ts\n@Command({\n  name: 'db',\n  description: 'Database utilities',\n  subCommands: [DbMigrateCommand, DbSeedCommand],\n})\nexport class DbCommand extends BaseCommand {\n  public override async run(): Promise\u003Cvoid> {}\n}\n",[313,2118,2119,2124,2162,2177,2223,2236,2240,2262,2301,2305,2309,2313,2318,2328,2344,2360,2378,2385,2401,2425],{"__ignoreMap":357},[361,2120,2121],{"class":363,"line":364},[361,2122,2123],{"class":367},"\u002F\u002F src\u002FCommands\u002FDbMigrate.ts\n",[361,2125,2126,2128,2130,2132,2134,2136,2138,2140,2143,2145,2147,2149,2151,2153,2156,2158,2160],{"class":363,"line":371},[361,2127,425],{"class":378},[361,2129,429],{"class":428},[361,2131,432],{"class":382},[361,2133,435],{"class":378},[361,2135,439],{"class":438},[361,2137,442],{"class":378},[361,2139,403],{"class":378},[361,2141,2142],{"class":406},"migrate",[361,2144,410],{"class":378},[361,2146,386],{"class":378},[361,2148,454],{"class":438},[361,2150,442],{"class":378},[361,2152,403],{"class":378},[361,2154,2155],{"class":406},"Run pending migrations",[361,2157,410],{"class":378},[361,2159,397],{"class":378},[361,2161,468],{"class":382},[361,2163,2164,2166,2168,2171,2173,2175],{"class":363,"line":416},[361,2165,474],{"class":374},[361,2167,478],{"class":477},[361,2169,2170],{"class":481}," DbMigrateCommand",[361,2172,485],{"class":477},[361,2174,383],{"class":481},[361,2176,490],{"class":378},[361,2178,2179,2181,2183,2185,2187,2189,2191,2193,2196,2198,2200,2202,2204,2206,2209,2211,2213,2215,2217,2219,2221],{"class":363,"line":422},[361,2180,496],{"class":378},[361,2182,499],{"class":428},[361,2184,432],{"class":382},[361,2186,435],{"class":378},[361,2188,439],{"class":438},[361,2190,442],{"class":378},[361,2192,403],{"class":378},[361,2194,2195],{"class":406},"dry-run",[361,2197,410],{"class":378},[361,2199,386],{"class":378},[361,2201,454],{"class":438},[361,2203,442],{"class":378},[361,2205,403],{"class":378},[361,2207,2208],{"class":406},"Preview without applying",[361,2210,410],{"class":378},[361,2212,386],{"class":378},[361,2214,532],{"class":438},[361,2216,442],{"class":378},[361,2218,1709],{"class":1413},[361,2220,397],{"class":378},[361,2222,468],{"class":382},[361,2224,2225,2227,2230,2232,2234],{"class":363,"line":471},[361,2226,551],{"class":477},[361,2228,2229],{"class":438}," dryRun",[361,2231,442],{"class":378},[361,2233,2007],{"class":481},[361,2235,413],{"class":378},[361,2237,2238],{"class":363,"line":493},[361,2239,419],{"emptyLinePlaceholder":56},[361,2241,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260],{"class":363,"line":548},[361,2243,551],{"class":477},[361,2245,574],{"class":477},[361,2247,577],{"class":477},[361,2249,580],{"class":438},[361,2251,583],{"class":378},[361,2253,586],{"class":481},[361,2255,589],{"class":378},[361,2257,592],{"class":481},[361,2259,595],{"class":378},[361,2261,490],{"class":378},[361,2263,2264,2266,2268,2270,2272,2274,2277,2280,2282,2285,2287,2290,2292,2295,2297,2299],{"class":363,"line":564},[361,2265,603],{"class":382},[361,2267,299],{"class":378},[361,2269,608],{"class":428},[361,2271,432],{"class":438},[361,2273,622],{"class":378},[361,2275,2276],{"class":382},"dryRun",[361,2278,2279],{"class":378}," ?",[361,2281,403],{"class":378},[361,2283,2284],{"class":406},"Dry run - no changes applied.",[361,2286,410],{"class":378},[361,2288,2289],{"class":378}," :",[361,2291,403],{"class":378},[361,2293,2294],{"class":406},"Migrations applied.",[361,2296,410],{"class":378},[361,2298,635],{"class":438},[361,2300,413],{"class":378},[361,2302,2303],{"class":363,"line":569},[361,2304,643],{"class":378},[361,2306,2307],{"class":363,"line":600},[361,2308,649],{"class":378},[361,2310,2311],{"class":363,"line":640},[361,2312,419],{"emptyLinePlaceholder":56},[361,2314,2315],{"class":363,"line":646},[361,2316,2317],{"class":367},"\u002F\u002F src\u002FCommands\u002FDb.ts\n",[361,2319,2320,2322,2324,2326],{"class":363,"line":1104},[361,2321,425],{"class":378},[361,2323,429],{"class":428},[361,2325,432],{"class":382},[361,2327,719],{"class":378},[361,2329,2330,2333,2335,2337,2340,2342],{"class":363,"line":2091},[361,2331,2332],{"class":438},"  name",[361,2334,442],{"class":378},[361,2336,403],{"class":378},[361,2338,2339],{"class":406},"db",[361,2341,410],{"class":378},[361,2343,741],{"class":378},[361,2345,2346,2349,2351,2353,2356,2358],{"class":363,"line":2096},[361,2347,2348],{"class":438},"  description",[361,2350,442],{"class":378},[361,2352,403],{"class":378},[361,2354,2355],{"class":406},"Database utilities",[361,2357,410],{"class":378},[361,2359,741],{"class":378},[361,2361,2363,2366,2368,2371,2373,2376],{"class":363,"line":2362},16,[361,2364,2365],{"class":438},"  subCommands",[361,2367,442],{"class":378},[361,2369,2370],{"class":382}," [DbMigrateCommand",[361,2372,386],{"class":378},[361,2374,2375],{"class":382}," DbSeedCommand]",[361,2377,741],{"class":378},[361,2379,2381,2383],{"class":363,"line":2380},17,[361,2382,627],{"class":378},[361,2384,468],{"class":382},[361,2386,2388,2390,2392,2395,2397,2399],{"class":363,"line":2387},18,[361,2389,474],{"class":374},[361,2391,478],{"class":477},[361,2393,2394],{"class":481}," DbCommand",[361,2396,485],{"class":477},[361,2398,383],{"class":481},[361,2400,490],{"class":378},[361,2402,2404,2406,2408,2410,2412,2414,2416,2418,2420,2422],{"class":363,"line":2403},19,[361,2405,551],{"class":477},[361,2407,574],{"class":477},[361,2409,577],{"class":477},[361,2411,580],{"class":438},[361,2413,583],{"class":378},[361,2415,586],{"class":481},[361,2417,589],{"class":378},[361,2419,592],{"class":481},[361,2421,595],{"class":378},[361,2423,2424],{"class":378}," {}\n",[361,2426,2428],{"class":363,"line":2427},20,[361,2429,649],{"class":378},[278,2431,2432,2433,2436,2437,2439],{},"Register only the ",[296,2434,2435],{},"top-level"," parent in ",[313,2438,340],{}," - subcommands are discovered automatically:",[352,2441,2443],{"className":354,"code":2442,"language":356,"meta":357,"style":357},"\u002F\u002F vercube.config.ts\nexport default defineConfig({\n  cli: {\n    commands: [DbCommand], \u002F\u002F DbMigrateCommand and DbSeedCommand are picked up automatically\n  },\n});\n",[313,2444,2445,2449,2461,2469,2483,2487],{"__ignoreMap":357},[361,2446,2447],{"class":363,"line":364},[361,2448,659],{"class":367},[361,2450,2451,2453,2455,2457,2459],{"class":363,"line":371},[361,2452,474],{"class":374},[361,2454,532],{"class":374},[361,2456,668],{"class":428},[361,2458,432],{"class":382},[361,2460,719],{"class":378},[361,2462,2463,2465,2467],{"class":363,"line":416},[361,2464,724],{"class":438},[361,2466,442],{"class":378},[361,2468,490],{"class":378},[361,2470,2471,2473,2475,2478,2480],{"class":363,"line":422},[361,2472,733],{"class":438},[361,2474,442],{"class":378},[361,2476,2477],{"class":382}," [DbCommand]",[361,2479,386],{"class":378},[361,2481,2482],{"class":367}," \u002F\u002F DbMigrateCommand and DbSeedCommand are picked up automatically\n",[361,2484,2485],{"class":363,"line":471},[361,2486,746],{"class":378},[361,2488,2489,2491,2493],{"class":363,"line":493},[361,2490,627],{"class":378},[361,2492,635],{"class":382},[361,2494,413],{"class":378},[278,2496,2497],{},"Usage:",[352,2499,2501],{"className":757,"code":2500,"language":759,"meta":357,"style":357},"vercube db --help\nvercube db migrate\nvercube db migrate --dry-run\nvercube db seed --env test\n",[313,2502,2503,2513,2522,2534],{"__ignoreMap":357},[361,2504,2505,2507,2510],{"class":363,"line":364},[361,2506,766],{"class":481},[361,2508,2509],{"class":406}," db",[361,2511,2512],{"class":406}," --help\n",[361,2514,2515,2517,2519],{"class":363,"line":371},[361,2516,766],{"class":481},[361,2518,2509],{"class":406},[361,2520,2521],{"class":406}," migrate\n",[361,2523,2524,2526,2528,2531],{"class":363,"line":416},[361,2525,766],{"class":481},[361,2527,2509],{"class":406},[361,2529,2530],{"class":406}," migrate",[361,2532,2533],{"class":406}," --dry-run\n",[361,2535,2536,2538,2540,2543,2545],{"class":363,"line":422},[361,2537,766],{"class":481},[361,2539,2509],{"class":406},[361,2541,2542],{"class":406}," seed",[361,2544,772],{"class":406},[361,2546,2547],{"class":406}," test\n",[301,2549,2551],{"id":2550},"registration-via-plugins","Registration via plugins",[278,2553,2554,2555,2560,2561,2566,2567,2572,2573,2578,2579,2584,2585,2588,2589,2594,2595,2599,2600,299],{},"Plugins can call ",[296,2556,2557],{},[313,2558,2559],{},"ctx.register(MyCommand)"," from ",[296,2562,2563],{},[313,2564,2565],{},"setupCLI"," (on a ",[296,2568,2569],{},[313,2570,2571],{},"BasePlugin"," subclass) or from the ",[296,2574,2575],{},[313,2576,2577],{},"cli"," hook on an object \u002F ",[296,2580,2581],{},[313,2582,2583],{},"defineVercubePlugin"," (syntax sugar for the same shape). The CLI uses the same ",[313,2586,2587],{},"loadVercubeConfig"," pipeline as the runtime, so commands registered from ",[296,2590,2591],{},[313,2592,2593],{},"plugins"," appear next to those listed under ",[296,2596,2597],{},[313,2598,340],{},". See ",[282,2601,201],{"href":202},[301,2603,2605],{"id":2604},"registration","Registration",[278,2607,2608,2609,337,2611,2615,2616,2620,2621,2625,2626,2629],{},"Register commands in ",[313,2610,336],{},[296,2612,2613],{},[313,2614,340],{},", or from a plugin’s ",[296,2617,2618],{},[313,2619,2565],{}," \u002F ",[296,2622,2623],{},[313,2624,2577],{}," hook. The CLI loads this file using ",[282,2627,293],{"href":291,"rel":2628},[286]," at startup - TypeScript is transpiled on-the-fly, so no separate build step is needed for your command files.",[352,2631,2633],{"className":354,"code":2632,"language":356,"meta":357,"style":357},"\u002F\u002F vercube.config.ts\nimport { defineConfig } from '@vercube\u002Fcore';\nimport { DeployCommand } from '.\u002Fsrc\u002FCommands\u002FDeploy';\nimport { DbCommand } from '.\u002Fsrc\u002FCommands\u002FDb';\n\nexport default defineConfig({\n  cli: {\n    commands: [\n      DeployCommand,\n      DbCommand,      \u002F\u002F registers DbCommand + all its subCommands\n    ],\n  },\n});\n",[313,2634,2635,2639,2659,2679,2700,2704,2716,2724,2733,2740,2750,2757,2761],{"__ignoreMap":357},[361,2636,2637],{"class":363,"line":364},[361,2638,659],{"class":367},[361,2640,2641,2643,2645,2647,2649,2651,2653,2655,2657],{"class":363,"line":371},[361,2642,375],{"class":374},[361,2644,379],{"class":378},[361,2646,668],{"class":382},[361,2648,397],{"class":378},[361,2650,400],{"class":374},[361,2652,403],{"class":378},[361,2654,677],{"class":406},[361,2656,410],{"class":378},[361,2658,413],{"class":378},[361,2660,2661,2663,2665,2667,2669,2671,2673,2675,2677],{"class":363,"line":416},[361,2662,375],{"class":374},[361,2664,379],{"class":378},[361,2666,482],{"class":382},[361,2668,397],{"class":378},[361,2670,400],{"class":374},[361,2672,403],{"class":378},[361,2674,698],{"class":406},[361,2676,410],{"class":378},[361,2678,413],{"class":378},[361,2680,2681,2683,2685,2687,2689,2691,2693,2696,2698],{"class":363,"line":422},[361,2682,375],{"class":374},[361,2684,379],{"class":378},[361,2686,2394],{"class":382},[361,2688,397],{"class":378},[361,2690,400],{"class":374},[361,2692,403],{"class":378},[361,2694,2695],{"class":406},".\u002Fsrc\u002FCommands\u002FDb",[361,2697,410],{"class":378},[361,2699,413],{"class":378},[361,2701,2702],{"class":363,"line":471},[361,2703,419],{"emptyLinePlaceholder":56},[361,2705,2706,2708,2710,2712,2714],{"class":363,"line":493},[361,2707,474],{"class":374},[361,2709,532],{"class":374},[361,2711,668],{"class":428},[361,2713,432],{"class":382},[361,2715,719],{"class":378},[361,2717,2718,2720,2722],{"class":363,"line":548},[361,2719,724],{"class":438},[361,2721,442],{"class":378},[361,2723,490],{"class":378},[361,2725,2726,2728,2730],{"class":363,"line":564},[361,2727,733],{"class":438},[361,2729,442],{"class":378},[361,2731,2732],{"class":382}," [\n",[361,2734,2735,2738],{"class":363,"line":569},[361,2736,2737],{"class":382},"      DeployCommand",[361,2739,741],{"class":378},[361,2741,2742,2745,2747],{"class":363,"line":600},[361,2743,2744],{"class":382},"      DbCommand",[361,2746,386],{"class":378},[361,2748,2749],{"class":367},"      \u002F\u002F registers DbCommand + all its subCommands\n",[361,2751,2752,2755],{"class":363,"line":640},[361,2753,2754],{"class":382},"    ]",[361,2756,741],{"class":378},[361,2758,2759],{"class":363,"line":646},[361,2760,746],{"class":378},[361,2762,2763,2765,2767],{"class":363,"line":1104},[361,2764,627],{"class":378},[361,2766,635],{"class":382},[361,2768,413],{"class":378},[2770,2771,2773],"callout",{"icon":2772},"i-lucide-info",[278,2774,2775,2776,2778,2779,2782],{},"Only register ",[296,2777,2435],{}," commands. Subcommands declared in ",[313,2780,2781],{},"subCommands: [...]"," are discovered and registered automatically by the CLI.",[301,2784,2786],{"id":2785},"full-example","Full Example",[278,2788,2789,2790,2797],{},"A working example is available in the repository under ",[282,2791,2794],{"href":2792,"rel":2793},"https:\u002F\u002Fgithub.com\u002Fvercube\u002Fvercube\u002Ftree\u002Fmain\u002Fexamples\u002Fcli-commands",[286],[313,2795,2796],{},"examples\u002Fcli-commands",". It demonstrates:",[2799,2800,2801,2815,2828],"ul",{},[309,2802,2803,2804,2806,2807,2809,2810,2812,2813],{},"A simple ",[313,2805,1336],{}," command with ",[313,2808,325],{},", ",[313,2811,329],{},", and ",[313,2814,884],{},[309,2816,2817,2818,2820,2821,2823,2824,2827],{},"A ",[313,2819,2339],{}," parent command with ",[313,2822,2142],{}," and ",[313,2825,2826],{},"seed"," subcommands",[309,2829,2830,2831],{},"Registering everything in ",[313,2832,336],{},[2834,2835,2836],"style",{},"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 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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .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 .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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":357,"searchDepth":364,"depth":371,"links":2838},[2839,2840,2843,2844,2845,2846,2847,2848,2849],{"id":303,"depth":371,"text":304},{"id":778,"depth":371,"text":315,"children":2841},[2842],{"id":878,"depth":416,"text":37},{"id":1109,"depth":371,"text":319},{"id":1216,"depth":371,"text":325},{"id":1499,"depth":371,"text":329},{"id":2101,"depth":371,"text":1213},{"id":2550,"depth":371,"text":2551},{"id":2604,"depth":371,"text":2605},{"id":2785,"depth":371,"text":2786},"Learn how to create custom CLI commands in Vercube using class-based decorators, register them in vercube.config.ts, and inject services via the DI container","md",null,{},{"title":205,"description":2850},"PBoZdrYXTP0N8_R3bZEC0JQTDyIQU27KbDn3qleZBDc",[2857,2852],{"title":201,"path":202,"stem":203,"description":2858,"children":-1},"Extend Vercube with config, runtime, CLI, and dev-only hooks - Vite-style plugins in vercube.config.ts",1782807885241]