[{"data":1,"prerenderedAt":1825},["ShallowReactive",2],{"navigation":3,"docs-path-index":152,"-docs-advanced-custom-decorator":198,"-docs-advanced-custom-decorator-surround":1820},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":52},"Docs","i-lucide-book-marked","\u002Fdocs","docs",[10,26,53,138],{"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,109,123,134],{"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},"Drivers","\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,101,105],{"title":66,"path":99,"stem":100},"\u002Fdocs\u002Fmodules\u002Fserverless\u002Foverview","docs\u002F3.modules\u002F3.serverless\u002F0.overview",{"title":102,"path":103,"stem":104},"AWS Lambda","\u002Fdocs\u002Fmodules\u002Fserverless\u002Faws-lambda","docs\u002F3.modules\u002F3.serverless\u002F1.aws-lambda",{"title":106,"path":107,"stem":108},"Azure Functions","\u002Fdocs\u002Fmodules\u002Fserverless\u002Fazure-functions","docs\u002F3.modules\u002F3.serverless\u002F2.azure-functions",{"title":110,"icon":52,"defaultOpen":52,"path":111,"stem":112,"children":113,"page":52},"Storage","\u002Fdocs\u002Fmodules\u002Fstorage","docs\u002F3.modules\u002F4.storage",[114,117,120],{"title":66,"path":115,"stem":116},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Foverview","docs\u002F3.modules\u002F4.storage\u002F0.overview",{"title":86,"path":118,"stem":119},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Fdrivers","docs\u002F3.modules\u002F4.storage\u002F1.drivers",{"title":90,"path":121,"stem":122},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Fapi","docs\u002F3.modules\u002F4.storage\u002F2.api",{"title":124,"icon":52,"defaultOpen":52,"path":125,"stem":126,"children":127,"page":52},"Web Sockets","\u002Fdocs\u002Fmodules\u002Fweb-sockets","docs\u002F3.modules\u002F5.web-sockets",[128,131],{"title":66,"path":129,"stem":130},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Foverview","docs\u002F3.modules\u002F5.web-sockets\u002F0.overview",{"title":90,"path":132,"stem":133},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Fapi","docs\u002F3.modules\u002F5.web-sockets\u002F1.api",{"title":135,"path":136,"stem":137},"MCP","\u002Fdocs\u002Fmodules\u002Fmcp","docs\u002F3.modules\u002F6.mcp",{"title":139,"icon":140,"defaultOpen":52,"path":141,"stem":142,"children":143,"page":52},"Advanced","i-lucide-brain","\u002Fdocs\u002Fadvanced","docs\u002F99.advanced",[144,148],{"title":145,"path":146,"stem":147},"Custom Decorator","\u002Fdocs\u002Fadvanced\u002Fcustom-decorator","docs\u002F99.advanced\u002F1.custom-decorator",{"title":149,"path":150,"stem":151},"Custom Plugin","\u002Fdocs\u002Fadvanced\u002Fcustom-plugin","docs\u002F99.advanced\u002F2.custom-plugin",[153,155,157,158,159,160,162,163,164,165,166,167,169,171,172,173,174,176,177,178,179,181,182,183,184,186,187,188,189,191,192,193,194,196,197],{"path":154},"\u002Fdocs\u002F.navigation",{"path":156},"\u002Fdocs\u002Fgetting-started\u002F.navigation",{"path":12},{"path":19},{"path":23},{"path":161},"\u002Fdocs\u002Fcore-features\u002F.navigation",{"path":34},{"path":38},{"path":42},{"path":46},{"path":50},{"path":168},"\u002Fdocs\u002Fmodules\u002F.navigation",{"path":170},"\u002Fdocs\u002Fmodules\u002Fauth\u002F.navigation",{"path":67},{"path":71},{"path":75},{"path":175},"\u002Fdocs\u002Fmodules\u002Flogger\u002F.navigation",{"path":83},{"path":87},{"path":91},{"path":180},"\u002Fdocs\u002Fmodules\u002Fserverless\u002F.navigation",{"path":99},{"path":103},{"path":107},{"path":185},"\u002Fdocs\u002Fmodules\u002Fstorage\u002F.navigation",{"path":115},{"path":118},{"path":121},{"path":190},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002F.navigation",{"path":129},{"path":132},{"path":136},{"path":195},"\u002Fdocs\u002Fadvanced\u002F.navigation",{"path":146},{"path":150},{"id":199,"title":145,"body":200,"description":1814,"extension":1815,"links":1816,"meta":1817,"navigation":56,"path":146,"seo":1818,"stem":147,"__hash__":1819},"docs\u002Fdocs\u002F99.advanced\u002F1.custom-decorator.md",{"type":201,"value":202,"toc":1800},"minimark",[203,212,217,227,490,494,500,505,617,621,628,631,694,700,703,742,746,750,753,1256,1262,1482,1485,1490,1496,1551,1556,1599,1605,1611,1614,1761,1766,1796],[204,205,206,207,211],"p",{},"Vercube provides a powerful decorator system that allows you to create custom decorators for your application. Custom decorators extend the ",[208,209,210],"code",{},"BaseDecorator"," class and can be used to add metadata, modify behavior, or inject dependencies into your classes and methods.",[213,214,216],"h2",{"id":215},"how-decorators-work","How Decorators Work",[204,218,219,220,223,224,226],{},"Decorators in Vercube are created using the ",[208,221,222],{},"createDecorator()"," factory function. Each decorator is a class that extends ",[208,225,210],{}," and is instantiated by the IOC container, which means you can use dependency injection inside your decorators.",[228,229,234],"pre",{"className":230,"code":231,"language":232,"meta":233,"style":233},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { BaseDecorator, createDecorator, Inject } from '@vercube\u002Fdi';\n\nclass MyDecorator extends BaseDecorator\u003CMyOptions> {\n  @Inject(SomeService)\n  private someService!: SomeService;\n  \n  public override created(): void {\n    \u002F\u002F Called when decorator is initialized\n  }\n  \n  public override destroyed(): void {\n    \u002F\u002F Called when decorator is cleaned up\n  }\n}\n\nexport function MyDecorator(options?: MyOptions): Function {\n  return createDecorator(MyDecorator, options);\n}\n","ts","",[208,235,236,283,289,317,330,348,354,374,381,387,392,408,414,419,425,430,462,485],{"__ignoreMap":233},[237,238,241,245,249,253,256,259,261,264,267,270,273,277,280],"span",{"class":239,"line":240},"line",1,[237,242,244],{"class":243},"s7zQu","import",[237,246,248],{"class":247},"sMK4o"," {",[237,250,252],{"class":251},"sTEyZ"," BaseDecorator",[237,254,255],{"class":247},",",[237,257,258],{"class":251}," createDecorator",[237,260,255],{"class":247},[237,262,263],{"class":251}," Inject",[237,265,266],{"class":247}," }",[237,268,269],{"class":243}," from",[237,271,272],{"class":247}," '",[237,274,276],{"class":275},"sfazB","@vercube\u002Fdi",[237,278,279],{"class":247},"'",[237,281,282],{"class":247},";\n",[237,284,286],{"class":239,"line":285},2,[237,287,288],{"emptyLinePlaceholder":56},"\n",[237,290,292,296,300,303,305,308,311,314],{"class":239,"line":291},3,[237,293,295],{"class":294},"spNyl","class",[237,297,299],{"class":298},"sBMFI"," MyDecorator",[237,301,302],{"class":294}," extends",[237,304,252],{"class":298},[237,306,307],{"class":247},"\u003C",[237,309,310],{"class":298},"MyOptions",[237,312,313],{"class":247},">",[237,315,316],{"class":247}," {\n",[237,318,320,323,327],{"class":239,"line":319},4,[237,321,322],{"class":247},"  @",[237,324,326],{"class":325},"s2Zo4","Inject",[237,328,329],{"class":251},"(SomeService)\n",[237,331,333,336,340,343,346],{"class":239,"line":332},5,[237,334,335],{"class":294},"  private",[237,337,339],{"class":338},"swJcz"," someService",[237,341,342],{"class":247},"!:",[237,344,345],{"class":298}," SomeService",[237,347,282],{"class":247},[237,349,351],{"class":239,"line":350},6,[237,352,353],{"class":251},"  \n",[237,355,357,360,363,366,369,372],{"class":239,"line":356},7,[237,358,359],{"class":294},"  public",[237,361,362],{"class":294}," override",[237,364,365],{"class":338}," created",[237,367,368],{"class":247},"():",[237,370,371],{"class":298}," void",[237,373,316],{"class":247},[237,375,377],{"class":239,"line":376},8,[237,378,380],{"class":379},"sHwdD","    \u002F\u002F Called when decorator is initialized\n",[237,382,384],{"class":239,"line":383},9,[237,385,386],{"class":247},"  }\n",[237,388,390],{"class":239,"line":389},10,[237,391,353],{"class":251},[237,393,395,397,399,402,404,406],{"class":239,"line":394},11,[237,396,359],{"class":294},[237,398,362],{"class":294},[237,400,401],{"class":338}," destroyed",[237,403,368],{"class":247},[237,405,371],{"class":298},[237,407,316],{"class":247},[237,409,411],{"class":239,"line":410},12,[237,412,413],{"class":379},"    \u002F\u002F Called when decorator is cleaned up\n",[237,415,417],{"class":239,"line":416},13,[237,418,386],{"class":247},[237,420,422],{"class":239,"line":421},14,[237,423,424],{"class":247},"}\n",[237,426,428],{"class":239,"line":427},15,[237,429,288],{"emptyLinePlaceholder":56},[237,431,433,436,439,441,444,448,451,454,457,460],{"class":239,"line":432},16,[237,434,435],{"class":243},"export",[237,437,438],{"class":294}," function",[237,440,299],{"class":325},[237,442,443],{"class":247},"(",[237,445,447],{"class":446},"sHdIc","options",[237,449,450],{"class":247},"?:",[237,452,453],{"class":298}," MyOptions",[237,455,456],{"class":247},"):",[237,458,459],{"class":298}," Function",[237,461,316],{"class":247},[237,463,465,468,470,472,475,477,480,483],{"class":239,"line":464},17,[237,466,467],{"class":243},"  return",[237,469,258],{"class":325},[237,471,443],{"class":338},[237,473,474],{"class":251},"MyDecorator",[237,476,255],{"class":247},[237,478,479],{"class":251}," options",[237,481,482],{"class":338},")",[237,484,282],{"class":247},[237,486,488],{"class":239,"line":487},18,[237,489,424],{"class":247},[213,491,493],{"id":492},"basedecorator-class","BaseDecorator Class",[204,495,496,497,499],{},"The ",[208,498,210],{}," class is the foundation for all custom decorators. It provides access to the decorated element and lifecycle hooks.",[501,502,504],"h3",{"id":503},"properties","Properties",[506,507,508,524],"table",{},[509,510,511],"thead",{},[512,513,514,518,521],"tr",{},[515,516,517],"th",{},"Property",[515,519,520],{},"Type",[515,522,523],{},"Description",[525,526,527,542,557,572,587,602],"tbody",{},[512,528,529,534,539],{},[530,531,532],"td",{},[208,533,447],{},[530,535,536],{},[208,537,538],{},"T",[530,540,541],{},"Options object passed to the decorator",[512,543,544,549,554],{},[530,545,546],{},[208,547,548],{},"instance",[530,550,551],{},[208,552,553],{},"any",[530,555,556],{},"The class instance that is decorated",[512,558,559,564,569],{},[530,560,561],{},[208,562,563],{},"prototype",[530,565,566],{},[208,567,568],{},"P",[530,570,571],{},"The class prototype that is decorated",[512,573,574,579,584],{},[530,575,576],{},[208,577,578],{},"propertyName",[530,580,581],{},[208,582,583],{},"string",[530,585,586],{},"Name of the decorated property or method",[512,588,589,594,599],{},[530,590,591],{},[208,592,593],{},"descriptor",[530,595,596],{},[208,597,598],{},"PropertyDescriptor",[530,600,601],{},"Property descriptor of the decorated element",[512,603,604,609,614],{},[530,605,606],{},[208,607,608],{},"propertyIndex",[530,610,611],{},[208,612,613],{},"number",[530,615,616],{},"Parameter index (for parameter decorators)",[501,618,620],{"id":619},"lifecycle-methods","Lifecycle Methods",[622,623,625],"h4",{"id":624},"created",[208,626,627],{},"created()",[204,629,630],{},"Called when the decorator is created and ready to be used. Use this to set up event listeners, register hooks, or perform initialization logic.",[228,632,634],{"className":230,"code":633,"language":232,"meta":233,"style":233},"public override created(): void {\n  \u002F\u002F Initialize your decorator\n  console.log(`Decorator applied to ${this.propertyName}`);\n}\n",[208,635,636,651,656,690],{"__ignoreMap":233},[237,637,638,641,643,646,649],{"class":239,"line":240},[237,639,640],{"class":251},"public override ",[237,642,624],{"class":325},[237,644,645],{"class":251},"(): ",[237,647,648],{"class":247},"void",[237,650,316],{"class":247},[237,652,653],{"class":239,"line":285},[237,654,655],{"class":379},"  \u002F\u002F Initialize your decorator\n",[237,657,658,661,664,667,669,672,675,678,681,683,686,688],{"class":239,"line":291},[237,659,660],{"class":251},"  console",[237,662,663],{"class":247},".",[237,665,666],{"class":325},"log",[237,668,443],{"class":338},[237,670,671],{"class":247},"`",[237,673,674],{"class":275},"Decorator applied to ",[237,676,677],{"class":247},"${",[237,679,680],{"class":247},"this.",[237,682,578],{"class":251},[237,684,685],{"class":247},"}`",[237,687,482],{"class":338},[237,689,282],{"class":247},[237,691,692],{"class":239,"line":319},[237,693,424],{"class":247},[622,695,697],{"id":696},"destroyed",[208,698,699],{},"destroyed()",[204,701,702],{},"Called when the decorator is destroyed. Use this for cleanup tasks like unregistering listeners or clearing timers. This is called at the end of SSR requests or when a component is destroyed.",[228,704,706],{"className":230,"code":705,"language":232,"meta":233,"style":233},"public override destroyed(): void {\n  \u002F\u002F Cleanup resources\n  this.unsubscribe();\n}\n",[208,707,708,720,725,738],{"__ignoreMap":233},[237,709,710,712,714,716,718],{"class":239,"line":240},[237,711,640],{"class":251},[237,713,696],{"class":325},[237,715,645],{"class":251},[237,717,648],{"class":247},[237,719,316],{"class":247},[237,721,722],{"class":239,"line":285},[237,723,724],{"class":379},"  \u002F\u002F Cleanup resources\n",[237,726,727,730,733,736],{"class":239,"line":291},[237,728,729],{"class":247},"  this.",[237,731,732],{"class":325},"unsubscribe",[237,734,735],{"class":338},"()",[237,737,282],{"class":247},[237,739,740],{"class":239,"line":319},[237,741,424],{"class":247},[213,743,745],{"id":744},"creating-a-custom-decorator","Creating a Custom Decorator",[501,747,749],{"id":748},"basic-example","Basic Example",[204,751,752],{},"Here's a simple decorator that logs method calls:",[228,754,756],{"className":230,"code":755,"language":232,"meta":233,"style":233},"import { BaseDecorator, createDecorator } from '@vercube\u002Fdi';\n\ninterface LogDecoratorOptions {\n  level?: 'debug' | 'info' | 'warn';\n  prefix?: string;\n}\n\nclass LogMethodDecorator extends BaseDecorator\u003CLogDecoratorOptions> {\n  private originalMethod!: Function;\n  \n  public override created(): void {\n    \u002F\u002F Store the original method\n    this.originalMethod = this.descriptor.value;\n    \n    \u002F\u002F Replace with wrapped version\n    const options = this.options;\n    const methodName = this.propertyName;\n    \n    this.descriptor.value = function(...args: any[]) {\n      const prefix = options?.prefix || '';\n      console.log(`${prefix}[${methodName}] called with:`, args);\n      \n      const result = this.originalMethod.apply(this, args);\n      \n      console.log(`${prefix}[${methodName}] returned:`, result);\n      return result;\n    };\n  }\n}\n\n\u002F**\n * Logs method calls with arguments and return values\n *\u002F\nexport function LogMethod(options?: LogDecoratorOptions): Function {\n  return createDecorator(LogMethodDecorator, options);\n}\n",[208,757,758,782,786,796,831,843,847,851,871,884,888,902,907,930,935,940,955,970,974,1008,1035,1079,1085,1115,1120,1158,1168,1174,1179,1184,1189,1195,1201,1207,1231,1251],{"__ignoreMap":233},[237,759,760,762,764,766,768,770,772,774,776,778,780],{"class":239,"line":240},[237,761,244],{"class":243},[237,763,248],{"class":247},[237,765,252],{"class":251},[237,767,255],{"class":247},[237,769,258],{"class":251},[237,771,266],{"class":247},[237,773,269],{"class":243},[237,775,272],{"class":247},[237,777,276],{"class":275},[237,779,279],{"class":247},[237,781,282],{"class":247},[237,783,784],{"class":239,"line":285},[237,785,288],{"emptyLinePlaceholder":56},[237,787,788,791,794],{"class":239,"line":291},[237,789,790],{"class":294},"interface",[237,792,793],{"class":298}," LogDecoratorOptions",[237,795,316],{"class":247},[237,797,798,801,803,805,808,810,813,815,818,820,822,824,827,829],{"class":239,"line":319},[237,799,800],{"class":338},"  level",[237,802,450],{"class":247},[237,804,272],{"class":247},[237,806,807],{"class":275},"debug",[237,809,279],{"class":247},[237,811,812],{"class":247}," |",[237,814,272],{"class":247},[237,816,817],{"class":275},"info",[237,819,279],{"class":247},[237,821,812],{"class":247},[237,823,272],{"class":247},[237,825,826],{"class":275},"warn",[237,828,279],{"class":247},[237,830,282],{"class":247},[237,832,833,836,838,841],{"class":239,"line":332},[237,834,835],{"class":338},"  prefix",[237,837,450],{"class":247},[237,839,840],{"class":298}," string",[237,842,282],{"class":247},[237,844,845],{"class":239,"line":350},[237,846,424],{"class":247},[237,848,849],{"class":239,"line":356},[237,850,288],{"emptyLinePlaceholder":56},[237,852,853,855,858,860,862,864,867,869],{"class":239,"line":376},[237,854,295],{"class":294},[237,856,857],{"class":298}," LogMethodDecorator",[237,859,302],{"class":294},[237,861,252],{"class":298},[237,863,307],{"class":247},[237,865,866],{"class":298},"LogDecoratorOptions",[237,868,313],{"class":247},[237,870,316],{"class":247},[237,872,873,875,878,880,882],{"class":239,"line":383},[237,874,335],{"class":294},[237,876,877],{"class":338}," originalMethod",[237,879,342],{"class":247},[237,881,459],{"class":298},[237,883,282],{"class":247},[237,885,886],{"class":239,"line":389},[237,887,353],{"class":251},[237,889,890,892,894,896,898,900],{"class":239,"line":394},[237,891,359],{"class":294},[237,893,362],{"class":294},[237,895,365],{"class":338},[237,897,368],{"class":247},[237,899,371],{"class":298},[237,901,316],{"class":247},[237,903,904],{"class":239,"line":410},[237,905,906],{"class":379},"    \u002F\u002F Store the original method\n",[237,908,909,912,915,918,921,923,925,928],{"class":239,"line":416},[237,910,911],{"class":247},"    this.",[237,913,914],{"class":251},"originalMethod",[237,916,917],{"class":247}," =",[237,919,920],{"class":247}," this.",[237,922,593],{"class":251},[237,924,663],{"class":247},[237,926,927],{"class":251},"value",[237,929,282],{"class":247},[237,931,932],{"class":239,"line":421},[237,933,934],{"class":338},"    \n",[237,936,937],{"class":239,"line":427},[237,938,939],{"class":379},"    \u002F\u002F Replace with wrapped version\n",[237,941,942,945,947,949,951,953],{"class":239,"line":432},[237,943,944],{"class":294},"    const",[237,946,479],{"class":251},[237,948,917],{"class":247},[237,950,920],{"class":247},[237,952,447],{"class":251},[237,954,282],{"class":247},[237,956,957,959,962,964,966,968],{"class":239,"line":464},[237,958,944],{"class":294},[237,960,961],{"class":251}," methodName",[237,963,917],{"class":247},[237,965,920],{"class":247},[237,967,578],{"class":251},[237,969,282],{"class":247},[237,971,972],{"class":239,"line":487},[237,973,934],{"class":338},[237,975,977,979,981,983,985,987,989,992,995,998,1001,1004,1006],{"class":239,"line":976},19,[237,978,911],{"class":247},[237,980,593],{"class":251},[237,982,663],{"class":247},[237,984,927],{"class":325},[237,986,917],{"class":247},[237,988,438],{"class":294},[237,990,991],{"class":247},"(...",[237,993,994],{"class":446},"args",[237,996,997],{"class":247},":",[237,999,1000],{"class":298}," any",[237,1002,1003],{"class":338},"[]",[237,1005,482],{"class":247},[237,1007,316],{"class":247},[237,1009,1011,1014,1017,1019,1021,1024,1027,1030,1033],{"class":239,"line":1010},20,[237,1012,1013],{"class":294},"      const",[237,1015,1016],{"class":251}," prefix",[237,1018,917],{"class":247},[237,1020,479],{"class":251},[237,1022,1023],{"class":247},"?.",[237,1025,1026],{"class":251},"prefix",[237,1028,1029],{"class":247}," ||",[237,1031,1032],{"class":247}," ''",[237,1034,282],{"class":247},[237,1036,1038,1041,1043,1045,1047,1050,1052,1055,1058,1060,1063,1065,1068,1070,1072,1075,1077],{"class":239,"line":1037},21,[237,1039,1040],{"class":251},"      console",[237,1042,663],{"class":247},[237,1044,666],{"class":325},[237,1046,443],{"class":338},[237,1048,1049],{"class":247},"`${",[237,1051,1026],{"class":251},[237,1053,1054],{"class":247},"}",[237,1056,1057],{"class":275},"[",[237,1059,677],{"class":247},[237,1061,1062],{"class":251},"methodName",[237,1064,1054],{"class":247},[237,1066,1067],{"class":275},"] called with:",[237,1069,671],{"class":247},[237,1071,255],{"class":247},[237,1073,1074],{"class":251}," args",[237,1076,482],{"class":338},[237,1078,282],{"class":247},[237,1080,1082],{"class":239,"line":1081},22,[237,1083,1084],{"class":338},"      \n",[237,1086,1088,1090,1093,1095,1097,1099,1101,1104,1106,1109,1111,1113],{"class":239,"line":1087},23,[237,1089,1013],{"class":294},[237,1091,1092],{"class":251}," result",[237,1094,917],{"class":247},[237,1096,920],{"class":247},[237,1098,914],{"class":251},[237,1100,663],{"class":247},[237,1102,1103],{"class":325},"apply",[237,1105,443],{"class":338},[237,1107,1108],{"class":247},"this,",[237,1110,1074],{"class":251},[237,1112,482],{"class":338},[237,1114,282],{"class":247},[237,1116,1118],{"class":239,"line":1117},24,[237,1119,1084],{"class":338},[237,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139,1141,1143,1145,1148,1150,1152,1154,1156],{"class":239,"line":1122},25,[237,1124,1040],{"class":251},[237,1126,663],{"class":247},[237,1128,666],{"class":325},[237,1130,443],{"class":338},[237,1132,1049],{"class":247},[237,1134,1026],{"class":251},[237,1136,1054],{"class":247},[237,1138,1057],{"class":275},[237,1140,677],{"class":247},[237,1142,1062],{"class":251},[237,1144,1054],{"class":247},[237,1146,1147],{"class":275},"] returned:",[237,1149,671],{"class":247},[237,1151,255],{"class":247},[237,1153,1092],{"class":251},[237,1155,482],{"class":338},[237,1157,282],{"class":247},[237,1159,1161,1164,1166],{"class":239,"line":1160},26,[237,1162,1163],{"class":243},"      return",[237,1165,1092],{"class":251},[237,1167,282],{"class":247},[237,1169,1171],{"class":239,"line":1170},27,[237,1172,1173],{"class":247},"    };\n",[237,1175,1177],{"class":239,"line":1176},28,[237,1178,386],{"class":247},[237,1180,1182],{"class":239,"line":1181},29,[237,1183,424],{"class":247},[237,1185,1187],{"class":239,"line":1186},30,[237,1188,288],{"emptyLinePlaceholder":56},[237,1190,1192],{"class":239,"line":1191},31,[237,1193,1194],{"class":379},"\u002F**\n",[237,1196,1198],{"class":239,"line":1197},32,[237,1199,1200],{"class":379}," * Logs method calls with arguments and return values\n",[237,1202,1204],{"class":239,"line":1203},33,[237,1205,1206],{"class":379}," *\u002F\n",[237,1208,1210,1212,1214,1217,1219,1221,1223,1225,1227,1229],{"class":239,"line":1209},34,[237,1211,435],{"class":243},[237,1213,438],{"class":294},[237,1215,1216],{"class":325}," LogMethod",[237,1218,443],{"class":247},[237,1220,447],{"class":446},[237,1222,450],{"class":247},[237,1224,793],{"class":298},[237,1226,456],{"class":247},[237,1228,459],{"class":298},[237,1230,316],{"class":247},[237,1232,1234,1236,1238,1240,1243,1245,1247,1249],{"class":239,"line":1233},35,[237,1235,467],{"class":243},[237,1237,258],{"class":325},[237,1239,443],{"class":338},[237,1241,1242],{"class":251},"LogMethodDecorator",[237,1244,255],{"class":247},[237,1246,479],{"class":251},[237,1248,482],{"class":338},[237,1250,282],{"class":247},[237,1252,1254],{"class":239,"line":1253},36,[237,1255,424],{"class":247},[204,1257,1258],{},[1259,1260,1261],"strong",{},"Usage:",[228,1263,1265],{"className":230,"code":1264,"language":232,"meta":233,"style":233},"import { Controller, Get } from '@vercube\u002Fcore';\nimport { LogMethod } from '.\u002Fdecorators\u002FLogMethod';\n\n@Controller('\u002Fusers')\nexport class UserController {\n  \n  @LogMethod({ prefix: '[UserController] ' })\n  @Get('\u002F:id')\n  async getUser(req: Request, params: { id: string }) {\n    return { id: params.id, name: 'John' };\n  }\n}\n",[208,1266,1267,1294,1315,1319,1339,1351,1355,1382,1400,1439,1474,1478],{"__ignoreMap":233},[237,1268,1269,1271,1273,1276,1278,1281,1283,1285,1287,1290,1292],{"class":239,"line":240},[237,1270,244],{"class":243},[237,1272,248],{"class":247},[237,1274,1275],{"class":251}," Controller",[237,1277,255],{"class":247},[237,1279,1280],{"class":251}," Get",[237,1282,266],{"class":247},[237,1284,269],{"class":243},[237,1286,272],{"class":247},[237,1288,1289],{"class":275},"@vercube\u002Fcore",[237,1291,279],{"class":247},[237,1293,282],{"class":247},[237,1295,1296,1298,1300,1302,1304,1306,1308,1311,1313],{"class":239,"line":285},[237,1297,244],{"class":243},[237,1299,248],{"class":247},[237,1301,1216],{"class":251},[237,1303,266],{"class":247},[237,1305,269],{"class":243},[237,1307,272],{"class":247},[237,1309,1310],{"class":275},".\u002Fdecorators\u002FLogMethod",[237,1312,279],{"class":247},[237,1314,282],{"class":247},[237,1316,1317],{"class":239,"line":291},[237,1318,288],{"emptyLinePlaceholder":56},[237,1320,1321,1324,1327,1329,1331,1334,1336],{"class":239,"line":319},[237,1322,1323],{"class":247},"@",[237,1325,1326],{"class":325},"Controller",[237,1328,443],{"class":251},[237,1330,279],{"class":247},[237,1332,1333],{"class":275},"\u002Fusers",[237,1335,279],{"class":247},[237,1337,1338],{"class":251},")\n",[237,1340,1341,1343,1346,1349],{"class":239,"line":332},[237,1342,435],{"class":243},[237,1344,1345],{"class":294}," class",[237,1347,1348],{"class":298}," UserController",[237,1350,316],{"class":247},[237,1352,1353],{"class":239,"line":350},[237,1354,353],{"class":251},[237,1356,1357,1359,1362,1364,1367,1369,1371,1373,1376,1378,1380],{"class":239,"line":356},[237,1358,322],{"class":247},[237,1360,1361],{"class":325},"LogMethod",[237,1363,443],{"class":251},[237,1365,1366],{"class":247},"{",[237,1368,1016],{"class":338},[237,1370,997],{"class":247},[237,1372,272],{"class":247},[237,1374,1375],{"class":275},"[UserController] ",[237,1377,279],{"class":247},[237,1379,266],{"class":247},[237,1381,1338],{"class":251},[237,1383,1384,1386,1389,1391,1393,1396,1398],{"class":239,"line":376},[237,1385,322],{"class":247},[237,1387,1388],{"class":325},"Get",[237,1390,443],{"class":251},[237,1392,279],{"class":247},[237,1394,1395],{"class":275},"\u002F:id",[237,1397,279],{"class":247},[237,1399,1338],{"class":251},[237,1401,1402,1405,1408,1410,1413,1415,1418,1420,1423,1425,1427,1430,1432,1434,1437],{"class":239,"line":383},[237,1403,1404],{"class":294},"  async",[237,1406,1407],{"class":338}," getUser",[237,1409,443],{"class":247},[237,1411,1412],{"class":446},"req",[237,1414,997],{"class":247},[237,1416,1417],{"class":298}," Request",[237,1419,255],{"class":247},[237,1421,1422],{"class":446}," params",[237,1424,997],{"class":247},[237,1426,248],{"class":247},[237,1428,1429],{"class":338}," id",[237,1431,997],{"class":247},[237,1433,840],{"class":298},[237,1435,1436],{"class":247}," })",[237,1438,316],{"class":247},[237,1440,1441,1444,1446,1448,1450,1452,1454,1457,1459,1462,1464,1466,1469,1471],{"class":239,"line":389},[237,1442,1443],{"class":243},"    return",[237,1445,248],{"class":247},[237,1447,1429],{"class":338},[237,1449,997],{"class":247},[237,1451,1422],{"class":251},[237,1453,663],{"class":247},[237,1455,1456],{"class":251},"id",[237,1458,255],{"class":247},[237,1460,1461],{"class":338}," name",[237,1463,997],{"class":247},[237,1465,272],{"class":247},[237,1467,1468],{"class":275},"John",[237,1470,279],{"class":247},[237,1472,1473],{"class":247}," };\n",[237,1475,1476],{"class":239,"line":394},[237,1477,386],{"class":247},[237,1479,1480],{"class":239,"line":410},[237,1481,424],{"class":247},[213,1483,74],{"id":1484},"api-reference",[501,1486,1488],{"id":1487},"createdecorator",[208,1489,222],{},[204,1491,1492,1493,1495],{},"Factory function to create a decorator from a ",[208,1494,210],{}," class.",[228,1497,1499],{"className":230,"code":1498,"language":232,"meta":233,"style":233},"function createDecorator\u003CT>(\n  DecoratorClass: typeof BaseDecorator\u003CT>,\n  options?: T\n): Function\n",[208,1500,1501,1515,1534,1544],{"__ignoreMap":233},[237,1502,1503,1506,1508,1510,1512],{"class":239,"line":240},[237,1504,1505],{"class":294},"function",[237,1507,258],{"class":325},[237,1509,307],{"class":247},[237,1511,538],{"class":298},[237,1513,1514],{"class":247},">(\n",[237,1516,1517,1520,1522,1525,1527,1529,1531],{"class":239,"line":285},[237,1518,1519],{"class":446},"  DecoratorClass",[237,1521,997],{"class":247},[237,1523,1524],{"class":247}," typeof",[237,1526,252],{"class":251},[237,1528,307],{"class":247},[237,1530,538],{"class":298},[237,1532,1533],{"class":247},">,\n",[237,1535,1536,1539,1541],{"class":239,"line":291},[237,1537,1538],{"class":446},"  options",[237,1540,450],{"class":247},[237,1542,1543],{"class":298}," T\n",[237,1545,1546,1548],{"class":239,"line":319},[237,1547,456],{"class":247},[237,1549,1550],{"class":298}," Function\n",[204,1552,1553],{},[1259,1554,1555],{},"Parameters:",[506,1557,1558,1569],{},[509,1559,1560],{},[512,1561,1562,1565,1567],{},[515,1563,1564],{},"Parameter",[515,1566,520],{},[515,1568,523],{},[525,1570,1571,1586],{},[512,1572,1573,1578,1583],{},[530,1574,1575],{},[208,1576,1577],{},"DecoratorClass",[530,1579,1580],{},[208,1581,1582],{},"typeof BaseDecorator\u003CT>",[530,1584,1585],{},"The decorator class to instantiate",[512,1587,1588,1592,1596],{},[530,1589,1590],{},[208,1591,447],{},[530,1593,1594],{},[208,1595,538],{},[530,1597,1598],{},"Options to pass to the decorator",[204,1600,1601,1604],{},[1259,1602,1603],{},"Returns:"," A decorator function that can be applied to classes, methods, or parameters.",[501,1606,1608],{"id":1607},"basedecoratort-p",[208,1609,1610],{},"BaseDecorator\u003CT, P>",[204,1612,1613],{},"Abstract base class for all decorators.",[228,1615,1617],{"className":230,"code":1616,"language":232,"meta":233,"style":233},"abstract class BaseDecorator\u003CT = any, P = any> {\n  public options: T;\n  public instance: any;\n  public prototype: P;\n  public propertyName: string;\n  public descriptor: PropertyDescriptor;\n  public propertyIndex: number;\n  \n  public created(): void;\n  public destroyed(): void;\n}\n",[208,1618,1619,1649,1662,1675,1688,1701,1715,1729,1733,1745,1757],{"__ignoreMap":233},[237,1620,1621,1624,1626,1628,1630,1632,1634,1636,1638,1641,1643,1645,1647],{"class":239,"line":240},[237,1622,1623],{"class":294},"abstract",[237,1625,1345],{"class":294},[237,1627,252],{"class":298},[237,1629,307],{"class":247},[237,1631,538],{"class":298},[237,1633,917],{"class":247},[237,1635,1000],{"class":298},[237,1637,255],{"class":247},[237,1639,1640],{"class":298}," P",[237,1642,917],{"class":247},[237,1644,1000],{"class":298},[237,1646,313],{"class":247},[237,1648,316],{"class":247},[237,1650,1651,1653,1655,1657,1660],{"class":239,"line":285},[237,1652,359],{"class":294},[237,1654,479],{"class":338},[237,1656,997],{"class":247},[237,1658,1659],{"class":298}," T",[237,1661,282],{"class":247},[237,1663,1664,1666,1669,1671,1673],{"class":239,"line":291},[237,1665,359],{"class":294},[237,1667,1668],{"class":338}," instance",[237,1670,997],{"class":247},[237,1672,1000],{"class":298},[237,1674,282],{"class":247},[237,1676,1677,1679,1682,1684,1686],{"class":239,"line":319},[237,1678,359],{"class":294},[237,1680,1681],{"class":338}," prototype",[237,1683,997],{"class":247},[237,1685,1640],{"class":298},[237,1687,282],{"class":247},[237,1689,1690,1692,1695,1697,1699],{"class":239,"line":332},[237,1691,359],{"class":294},[237,1693,1694],{"class":338}," propertyName",[237,1696,997],{"class":247},[237,1698,840],{"class":298},[237,1700,282],{"class":247},[237,1702,1703,1705,1708,1710,1713],{"class":239,"line":350},[237,1704,359],{"class":294},[237,1706,1707],{"class":338}," descriptor",[237,1709,997],{"class":247},[237,1711,1712],{"class":298}," PropertyDescriptor",[237,1714,282],{"class":247},[237,1716,1717,1719,1722,1724,1727],{"class":239,"line":356},[237,1718,359],{"class":294},[237,1720,1721],{"class":338}," propertyIndex",[237,1723,997],{"class":247},[237,1725,1726],{"class":298}," number",[237,1728,282],{"class":247},[237,1730,1731],{"class":239,"line":376},[237,1732,353],{"class":251},[237,1734,1735,1737,1739,1741,1743],{"class":239,"line":383},[237,1736,359],{"class":294},[237,1738,365],{"class":338},[237,1740,368],{"class":247},[237,1742,371],{"class":298},[237,1744,282],{"class":247},[237,1746,1747,1749,1751,1753,1755],{"class":239,"line":389},[237,1748,359],{"class":294},[237,1750,401],{"class":338},[237,1752,368],{"class":247},[237,1754,371],{"class":298},[237,1756,282],{"class":247},[237,1758,1759],{"class":239,"line":394},[237,1760,424],{"class":247},[204,1762,1763],{},[1259,1764,1765],{},"Type Parameters:",[506,1767,1768,1776],{},[509,1769,1770],{},[512,1771,1772,1774],{},[515,1773,1564],{},[515,1775,523],{},[525,1777,1778,1787],{},[512,1779,1780,1784],{},[530,1781,1782],{},[208,1783,538],{},[530,1785,1786],{},"Type of the options object",[512,1788,1789,1793],{},[530,1790,1791],{},[208,1792,568],{},[530,1794,1795],{},"Type of the prototype (for advanced use cases)",[1797,1798,1799],"style",{},"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 .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 .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 .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 .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 .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":233,"searchDepth":240,"depth":285,"links":1801},[1802,1803,1807,1810],{"id":215,"depth":285,"text":216},{"id":492,"depth":285,"text":493,"children":1804},[1805,1806],{"id":503,"depth":291,"text":504},{"id":619,"depth":291,"text":620},{"id":744,"depth":285,"text":745,"children":1808},[1809],{"id":748,"depth":291,"text":749},{"id":1484,"depth":285,"text":74,"children":1811},[1812,1813],{"id":1487,"depth":291,"text":222},{"id":1607,"depth":291,"text":1610},"Learn how to create and use custom decorators in Vercube to extend functionality and create reusable patterns","md",null,{},{"title":145,"description":1814},"9bxFNZ1eUln1EFvsyZs0MXD8iKOSkEYgE5Kypnt40Ic",[1821,1823],{"title":135,"path":136,"stem":137,"description":1822,"children":-1},"Expose AI tools with Model Context Protocol",{"title":149,"path":150,"stem":151,"description":1824,"children":-1},"Learn how to create and use custom plugins in Vercube to extend functionality and add new features",1775552782009]