[{"data":1,"prerenderedAt":1455},["ShallowReactive",2],{"navigation":3,"docs-path-index":152,"-docs-advanced-custom-plugin":198,"-docs-advanced-custom-plugin-surround":1452},[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":149,"body":200,"description":1446,"extension":1447,"links":1448,"meta":1449,"navigation":56,"path":150,"seo":1450,"stem":151,"__hash__":1451},"docs\u002Fdocs\u002F99.advanced\u002F2.custom-plugin.md",{"type":201,"value":202,"toc":1433},"minimark",[203,216,221,231,393,397,403,543,548,586,590,597,600,643,653,657,660,847,852,962,975,979,982,1223,1226,1232,1235,1312,1317,1338,1343,1346,1382,1387,1429],[204,205,206,207,211,212,215],"p",{},"Plugins in Vercube provide a way to extend the framework's functionality by registering services, controllers, and other components. Every plugin extends the ",[208,209,210],"code",{},"BasePlugin"," class and implements the ",[208,213,214],{},"use()"," method.",[217,218,220],"h2",{"id":219},"how-plugins-work","How Plugins Work",[204,222,223,224,227,228,230],{},"Plugins are added to your application during the setup phase using ",[208,225,226],{},"app.addPlugin()",". When a plugin is added, Vercube calls its ",[208,229,214],{}," method with the application instance, allowing the plugin to register its services and configure the application.",[232,233,238],"pre",{"className":234,"code":235,"language":236,"meta":237,"style":237},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createApp } from '@vercube\u002Fcore';\nimport { MyPlugin } from '.\u002Fplugins\u002FMyPlugin';\n\nconst app = createApp({\n  setup: async (app) => {\n    app.addPlugin(MyPlugin);\n  }\n});\n","ts","",[208,239,240,276,299,305,327,355,377,383],{"__ignoreMap":237},[241,242,245,249,253,257,260,263,266,270,273],"span",{"class":243,"line":244},"line",1,[241,246,248],{"class":247},"s7zQu","import",[241,250,252],{"class":251},"sMK4o"," {",[241,254,256],{"class":255},"sTEyZ"," createApp",[241,258,259],{"class":251}," }",[241,261,262],{"class":247}," from",[241,264,265],{"class":251}," '",[241,267,269],{"class":268},"sfazB","@vercube\u002Fcore",[241,271,272],{"class":251},"'",[241,274,275],{"class":251},";\n",[241,277,279,281,283,286,288,290,292,295,297],{"class":243,"line":278},2,[241,280,248],{"class":247},[241,282,252],{"class":251},[241,284,285],{"class":255}," MyPlugin",[241,287,259],{"class":251},[241,289,262],{"class":247},[241,291,265],{"class":251},[241,293,294],{"class":268},".\u002Fplugins\u002FMyPlugin",[241,296,272],{"class":251},[241,298,275],{"class":251},[241,300,302],{"class":243,"line":301},3,[241,303,304],{"emptyLinePlaceholder":56},"\n",[241,306,308,312,315,318,321,324],{"class":243,"line":307},4,[241,309,311],{"class":310},"spNyl","const",[241,313,314],{"class":255}," app ",[241,316,317],{"class":251},"=",[241,319,256],{"class":320},"s2Zo4",[241,322,323],{"class":255},"(",[241,325,326],{"class":251},"{\n",[241,328,330,333,336,339,342,346,349,352],{"class":243,"line":329},5,[241,331,332],{"class":320},"  setup",[241,334,335],{"class":251},":",[241,337,338],{"class":310}," async",[241,340,341],{"class":251}," (",[241,343,345],{"class":344},"sHdIc","app",[241,347,348],{"class":251},")",[241,350,351],{"class":310}," =>",[241,353,354],{"class":251}," {\n",[241,356,358,361,364,367,370,373,375],{"class":243,"line":357},6,[241,359,360],{"class":255},"    app",[241,362,363],{"class":251},".",[241,365,366],{"class":320},"addPlugin",[241,368,323],{"class":369},"swJcz",[241,371,372],{"class":255},"MyPlugin",[241,374,348],{"class":369},[241,376,275],{"class":251},[241,378,380],{"class":243,"line":379},7,[241,381,382],{"class":251},"  }\n",[241,384,386,389,391],{"class":243,"line":385},8,[241,387,388],{"class":251},"}",[241,390,348],{"class":255},[241,392,275],{"class":251},[217,394,396],{"id":395},"baseplugin-class","BasePlugin Class",[204,398,399,400,402],{},"The ",[208,401,210],{}," class is the foundation for all plugins.",[232,404,406],{"className":234,"code":405,"language":236,"meta":237,"style":237},"export class BasePlugin\u003CT = unknown> {\n  \u002F**\n   * The name of the plugin.\n   *\u002F\n  public name: string;\n\n  \u002F**\n   * Uses the plugin with the given app.\n   *\u002F\n  public use(app: App, options?: T): void | Promise\u003Cvoid> {}\n}\n",[208,407,408,437,443,448,453,468,472,476,481,486,537],{"__ignoreMap":237},[241,409,410,413,416,420,423,426,429,432,435],{"class":243,"line":244},[241,411,412],{"class":247},"export",[241,414,415],{"class":310}," class",[241,417,419],{"class":418},"sBMFI"," BasePlugin",[241,421,422],{"class":251},"\u003C",[241,424,425],{"class":418},"T",[241,427,428],{"class":251}," =",[241,430,431],{"class":418}," unknown",[241,433,434],{"class":251},">",[241,436,354],{"class":251},[241,438,439],{"class":243,"line":278},[241,440,442],{"class":441},"sHwdD","  \u002F**\n",[241,444,445],{"class":243,"line":301},[241,446,447],{"class":441},"   * The name of the plugin.\n",[241,449,450],{"class":243,"line":307},[241,451,452],{"class":441},"   *\u002F\n",[241,454,455,458,461,463,466],{"class":243,"line":329},[241,456,457],{"class":310},"  public",[241,459,460],{"class":369}," name",[241,462,335],{"class":251},[241,464,465],{"class":418}," string",[241,467,275],{"class":251},[241,469,470],{"class":243,"line":357},[241,471,304],{"emptyLinePlaceholder":56},[241,473,474],{"class":243,"line":379},[241,475,442],{"class":441},[241,477,478],{"class":243,"line":385},[241,479,480],{"class":441},"   * Uses the plugin with the given app.\n",[241,482,484],{"class":243,"line":483},9,[241,485,452],{"class":441},[241,487,489,491,494,496,498,500,503,506,509,512,515,518,521,524,527,529,532,534],{"class":243,"line":488},10,[241,490,457],{"class":310},[241,492,493],{"class":369}," use",[241,495,323],{"class":251},[241,497,345],{"class":344},[241,499,335],{"class":251},[241,501,502],{"class":418}," App",[241,504,505],{"class":251},",",[241,507,508],{"class":344}," options",[241,510,511],{"class":251},"?:",[241,513,514],{"class":418}," T",[241,516,517],{"class":251},"):",[241,519,520],{"class":418}," void",[241,522,523],{"class":251}," |",[241,525,526],{"class":418}," Promise",[241,528,422],{"class":251},[241,530,531],{"class":418},"void",[241,533,434],{"class":251},[241,535,536],{"class":251}," {}\n",[241,538,540],{"class":243,"line":539},11,[241,541,542],{"class":251},"}\n",[544,545,547],"h3",{"id":546},"properties","Properties",[549,550,551,567],"table",{},[552,553,554],"thead",{},[555,556,557,561,564],"tr",{},[558,559,560],"th",{},"Property",[558,562,563],{},"Type",[558,565,566],{},"Description",[568,569,570],"tbody",{},[555,571,572,578,583],{},[573,574,575],"td",{},[208,576,577],{},"name",[573,579,580],{},[208,581,582],{},"string",[573,584,585],{},"The unique name of the plugin",[544,587,589],{"id":588},"methods","Methods",[591,592,594],"h4",{"id":593},"useapp-options",[208,595,596],{},"use(app, options?)",[204,598,599],{},"Called when the plugin is added to the application. Use this method to register services, controllers, and configure the app.",[549,601,602,613],{},[552,603,604],{},[555,605,606,609,611],{},[558,607,608],{},"Parameter",[558,610,563],{},[558,612,566],{},[568,614,615,629],{},[555,616,617,621,626],{},[573,618,619],{},[208,620,345],{},[573,622,623],{},[208,624,625],{},"App",[573,627,628],{},"The application instance",[555,630,631,636,640],{},[573,632,633],{},[208,634,635],{},"options",[573,637,638],{},[208,639,425],{},[573,641,642],{},"Optional configuration options",[204,644,645,649,650],{},[646,647,648],"strong",{},"Returns:"," ",[208,651,652],{},"void | Promise\u003Cvoid>",[217,654,656],{"id":655},"creating-a-custom-plugin","Creating a Custom Plugin",[204,658,659],{},"Here's an example plugin that registers services and a controller with configuration options:",[232,661,663],{"className":234,"code":662,"language":236,"meta":237,"style":237},"import { BasePlugin } from '@vercube\u002Fcore';\nimport type { App } from '@vercube\u002Fcore';\n\nexport class MetricsPlugin extends BasePlugin {\n  public override name: string = 'MetricsPlugin';\n\n  public override use(app: App): void {\n    \u002F\u002F Bind services\n    app.container.bind(MetricsService);\n\n    \u002F\u002F Bind controller for API endpoints\n    app.container.bind(MetricsController);\n  }\n}\n",[208,664,665,685,708,712,728,752,756,778,783,806,810,815,837,842],{"__ignoreMap":237},[241,666,667,669,671,673,675,677,679,681,683],{"class":243,"line":244},[241,668,248],{"class":247},[241,670,252],{"class":251},[241,672,419],{"class":255},[241,674,259],{"class":251},[241,676,262],{"class":247},[241,678,265],{"class":251},[241,680,269],{"class":268},[241,682,272],{"class":251},[241,684,275],{"class":251},[241,686,687,689,692,694,696,698,700,702,704,706],{"class":243,"line":278},[241,688,248],{"class":247},[241,690,691],{"class":247}," type",[241,693,252],{"class":251},[241,695,502],{"class":255},[241,697,259],{"class":251},[241,699,262],{"class":247},[241,701,265],{"class":251},[241,703,269],{"class":268},[241,705,272],{"class":251},[241,707,275],{"class":251},[241,709,710],{"class":243,"line":301},[241,711,304],{"emptyLinePlaceholder":56},[241,713,714,716,718,721,724,726],{"class":243,"line":307},[241,715,412],{"class":247},[241,717,415],{"class":310},[241,719,720],{"class":418}," MetricsPlugin",[241,722,723],{"class":310}," extends",[241,725,419],{"class":418},[241,727,354],{"class":251},[241,729,730,732,735,737,739,741,743,745,748,750],{"class":243,"line":329},[241,731,457],{"class":310},[241,733,734],{"class":310}," override",[241,736,460],{"class":369},[241,738,335],{"class":251},[241,740,465],{"class":418},[241,742,428],{"class":251},[241,744,265],{"class":251},[241,746,747],{"class":268},"MetricsPlugin",[241,749,272],{"class":251},[241,751,275],{"class":251},[241,753,754],{"class":243,"line":357},[241,755,304],{"emptyLinePlaceholder":56},[241,757,758,760,762,764,766,768,770,772,774,776],{"class":243,"line":379},[241,759,457],{"class":310},[241,761,734],{"class":310},[241,763,493],{"class":369},[241,765,323],{"class":251},[241,767,345],{"class":344},[241,769,335],{"class":251},[241,771,502],{"class":418},[241,773,517],{"class":251},[241,775,520],{"class":418},[241,777,354],{"class":251},[241,779,780],{"class":243,"line":385},[241,781,782],{"class":441},"    \u002F\u002F Bind services\n",[241,784,785,787,789,792,794,797,799,802,804],{"class":243,"line":483},[241,786,360],{"class":255},[241,788,363],{"class":251},[241,790,791],{"class":255},"container",[241,793,363],{"class":251},[241,795,796],{"class":320},"bind",[241,798,323],{"class":369},[241,800,801],{"class":255},"MetricsService",[241,803,348],{"class":369},[241,805,275],{"class":251},[241,807,808],{"class":243,"line":488},[241,809,304],{"emptyLinePlaceholder":56},[241,811,812],{"class":243,"line":539},[241,813,814],{"class":441},"    \u002F\u002F Bind controller for API endpoints\n",[241,816,818,820,822,824,826,828,830,833,835],{"class":243,"line":817},12,[241,819,360],{"class":255},[241,821,363],{"class":251},[241,823,791],{"class":255},[241,825,363],{"class":251},[241,827,796],{"class":320},[241,829,323],{"class":369},[241,831,832],{"class":255},"MetricsController",[241,834,348],{"class":369},[241,836,275],{"class":251},[241,838,840],{"class":243,"line":839},13,[241,841,382],{"class":251},[241,843,845],{"class":243,"line":844},14,[241,846,542],{"class":251},[204,848,849],{},[646,850,851],{},"Usage:",[232,853,855],{"className":234,"code":854,"language":236,"meta":237,"style":237},"import { createApp } from '@vercube\u002Fcore';\nimport { MetricsPlugin } from '.\u002Fplugins\u002FMetricsPlugin';\n\nconst app = createApp({\n  setup: async (app) => {\n    app.addPlugin(MetricsPlugin);\n  }\n});\n",[208,856,857,877,898,902,916,934,950,954],{"__ignoreMap":237},[241,858,859,861,863,865,867,869,871,873,875],{"class":243,"line":244},[241,860,248],{"class":247},[241,862,252],{"class":251},[241,864,256],{"class":255},[241,866,259],{"class":251},[241,868,262],{"class":247},[241,870,265],{"class":251},[241,872,269],{"class":268},[241,874,272],{"class":251},[241,876,275],{"class":251},[241,878,879,881,883,885,887,889,891,894,896],{"class":243,"line":278},[241,880,248],{"class":247},[241,882,252],{"class":251},[241,884,720],{"class":255},[241,886,259],{"class":251},[241,888,262],{"class":247},[241,890,265],{"class":251},[241,892,893],{"class":268},".\u002Fplugins\u002FMetricsPlugin",[241,895,272],{"class":251},[241,897,275],{"class":251},[241,899,900],{"class":243,"line":301},[241,901,304],{"emptyLinePlaceholder":56},[241,903,904,906,908,910,912,914],{"class":243,"line":307},[241,905,311],{"class":310},[241,907,314],{"class":255},[241,909,317],{"class":251},[241,911,256],{"class":320},[241,913,323],{"class":255},[241,915,326],{"class":251},[241,917,918,920,922,924,926,928,930,932],{"class":243,"line":329},[241,919,332],{"class":320},[241,921,335],{"class":251},[241,923,338],{"class":310},[241,925,341],{"class":251},[241,927,345],{"class":344},[241,929,348],{"class":251},[241,931,351],{"class":310},[241,933,354],{"class":251},[241,935,936,938,940,942,944,946,948],{"class":243,"line":357},[241,937,360],{"class":255},[241,939,363],{"class":251},[241,941,366],{"class":320},[241,943,323],{"class":369},[241,945,747],{"class":255},[241,947,348],{"class":369},[241,949,275],{"class":251},[241,951,952],{"class":243,"line":379},[241,953,382],{"class":251},[241,955,956,958,960],{"class":243,"line":385},[241,957,388],{"class":251},[241,959,348],{"class":255},[241,961,275],{"class":251},[963,964,965],"tip",{},[204,966,967,968,970,971,974],{},"Plugins can also be async - just make the ",[208,969,214],{}," method return a ",[208,972,973],{},"Promise\u003Cvoid>"," for async initialization.",[217,976,978],{"id":977},"adding-plugins","Adding Plugins",[204,980,981],{},"Plugins are added in the application setup:",[232,983,985],{"className":234,"code":984,"language":236,"meta":237,"style":237},"import { createApp } from '@vercube\u002Fcore';\nimport { SchemaPlugin } from '@vercube\u002Fschema';\nimport { WebsocketPlugin } from '@vercube\u002Fws';\nimport { MCPPlugin } from '@vercube\u002Fmcp';\n\nconst app = createApp({\n  setup: async (app) => {\n    \u002F\u002F Add plugins without options\n    app.addPlugin(SchemaPlugin);\n    app.addPlugin(WebsocketPlugin);\n    app.addPlugin(MCPPlugin);\n\n    \u002F\u002F Add plugin with options\n    app.addPlugin(CachePlugin, { driver: 'redis' });\n  }\n});\n",[208,986,987,1007,1029,1051,1073,1077,1091,1109,1114,1131,1148,1165,1169,1174,1209,1214],{"__ignoreMap":237},[241,988,989,991,993,995,997,999,1001,1003,1005],{"class":243,"line":244},[241,990,248],{"class":247},[241,992,252],{"class":251},[241,994,256],{"class":255},[241,996,259],{"class":251},[241,998,262],{"class":247},[241,1000,265],{"class":251},[241,1002,269],{"class":268},[241,1004,272],{"class":251},[241,1006,275],{"class":251},[241,1008,1009,1011,1013,1016,1018,1020,1022,1025,1027],{"class":243,"line":278},[241,1010,248],{"class":247},[241,1012,252],{"class":251},[241,1014,1015],{"class":255}," SchemaPlugin",[241,1017,259],{"class":251},[241,1019,262],{"class":247},[241,1021,265],{"class":251},[241,1023,1024],{"class":268},"@vercube\u002Fschema",[241,1026,272],{"class":251},[241,1028,275],{"class":251},[241,1030,1031,1033,1035,1038,1040,1042,1044,1047,1049],{"class":243,"line":301},[241,1032,248],{"class":247},[241,1034,252],{"class":251},[241,1036,1037],{"class":255}," WebsocketPlugin",[241,1039,259],{"class":251},[241,1041,262],{"class":247},[241,1043,265],{"class":251},[241,1045,1046],{"class":268},"@vercube\u002Fws",[241,1048,272],{"class":251},[241,1050,275],{"class":251},[241,1052,1053,1055,1057,1060,1062,1064,1066,1069,1071],{"class":243,"line":307},[241,1054,248],{"class":247},[241,1056,252],{"class":251},[241,1058,1059],{"class":255}," MCPPlugin",[241,1061,259],{"class":251},[241,1063,262],{"class":247},[241,1065,265],{"class":251},[241,1067,1068],{"class":268},"@vercube\u002Fmcp",[241,1070,272],{"class":251},[241,1072,275],{"class":251},[241,1074,1075],{"class":243,"line":329},[241,1076,304],{"emptyLinePlaceholder":56},[241,1078,1079,1081,1083,1085,1087,1089],{"class":243,"line":357},[241,1080,311],{"class":310},[241,1082,314],{"class":255},[241,1084,317],{"class":251},[241,1086,256],{"class":320},[241,1088,323],{"class":255},[241,1090,326],{"class":251},[241,1092,1093,1095,1097,1099,1101,1103,1105,1107],{"class":243,"line":379},[241,1094,332],{"class":320},[241,1096,335],{"class":251},[241,1098,338],{"class":310},[241,1100,341],{"class":251},[241,1102,345],{"class":344},[241,1104,348],{"class":251},[241,1106,351],{"class":310},[241,1108,354],{"class":251},[241,1110,1111],{"class":243,"line":385},[241,1112,1113],{"class":441},"    \u002F\u002F Add plugins without options\n",[241,1115,1116,1118,1120,1122,1124,1127,1129],{"class":243,"line":483},[241,1117,360],{"class":255},[241,1119,363],{"class":251},[241,1121,366],{"class":320},[241,1123,323],{"class":369},[241,1125,1126],{"class":255},"SchemaPlugin",[241,1128,348],{"class":369},[241,1130,275],{"class":251},[241,1132,1133,1135,1137,1139,1141,1144,1146],{"class":243,"line":488},[241,1134,360],{"class":255},[241,1136,363],{"class":251},[241,1138,366],{"class":320},[241,1140,323],{"class":369},[241,1142,1143],{"class":255},"WebsocketPlugin",[241,1145,348],{"class":369},[241,1147,275],{"class":251},[241,1149,1150,1152,1154,1156,1158,1161,1163],{"class":243,"line":539},[241,1151,360],{"class":255},[241,1153,363],{"class":251},[241,1155,366],{"class":320},[241,1157,323],{"class":369},[241,1159,1160],{"class":255},"MCPPlugin",[241,1162,348],{"class":369},[241,1164,275],{"class":251},[241,1166,1167],{"class":243,"line":817},[241,1168,304],{"emptyLinePlaceholder":56},[241,1170,1171],{"class":243,"line":839},[241,1172,1173],{"class":441},"    \u002F\u002F Add plugin with options\n",[241,1175,1176,1178,1180,1182,1184,1187,1189,1191,1194,1196,1198,1201,1203,1205,1207],{"class":243,"line":844},[241,1177,360],{"class":255},[241,1179,363],{"class":251},[241,1181,366],{"class":320},[241,1183,323],{"class":369},[241,1185,1186],{"class":255},"CachePlugin",[241,1188,505],{"class":251},[241,1190,252],{"class":251},[241,1192,1193],{"class":369}," driver",[241,1195,335],{"class":251},[241,1197,265],{"class":251},[241,1199,1200],{"class":268},"redis",[241,1202,272],{"class":251},[241,1204,259],{"class":251},[241,1206,348],{"class":369},[241,1208,275],{"class":251},[241,1210,1212],{"class":243,"line":1211},15,[241,1213,382],{"class":251},[241,1215,1217,1219,1221],{"class":243,"line":1216},16,[241,1218,388],{"class":251},[241,1220,348],{"class":255},[241,1222,275],{"class":251},[217,1224,74],{"id":1225},"api-reference",[544,1227,1229],{"id":1228},"baseplugint",[208,1230,1231],{},"BasePlugin\u003CT>",[204,1233,1234],{},"Abstract base class for all plugins.",[232,1236,1238],{"className":234,"code":1237,"language":236,"meta":237,"style":237},"class BasePlugin\u003CT = unknown> {\n  public name: string;\n  public use(app: App, options?: T): void | Promise\u003Cvoid>;\n}\n",[208,1239,1240,1259,1271,1308],{"__ignoreMap":237},[241,1241,1242,1245,1247,1249,1251,1253,1255,1257],{"class":243,"line":244},[241,1243,1244],{"class":310},"class",[241,1246,419],{"class":418},[241,1248,422],{"class":251},[241,1250,425],{"class":418},[241,1252,428],{"class":251},[241,1254,431],{"class":418},[241,1256,434],{"class":251},[241,1258,354],{"class":251},[241,1260,1261,1263,1265,1267,1269],{"class":243,"line":278},[241,1262,457],{"class":310},[241,1264,460],{"class":369},[241,1266,335],{"class":251},[241,1268,465],{"class":418},[241,1270,275],{"class":251},[241,1272,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305],{"class":243,"line":301},[241,1274,457],{"class":310},[241,1276,493],{"class":369},[241,1278,323],{"class":251},[241,1280,345],{"class":344},[241,1282,335],{"class":251},[241,1284,502],{"class":418},[241,1286,505],{"class":251},[241,1288,508],{"class":344},[241,1290,511],{"class":251},[241,1292,514],{"class":418},[241,1294,517],{"class":251},[241,1296,520],{"class":418},[241,1298,523],{"class":251},[241,1300,526],{"class":418},[241,1302,422],{"class":251},[241,1304,531],{"class":418},[241,1306,1307],{"class":251},">;\n",[241,1309,1310],{"class":243,"line":307},[241,1311,542],{"class":251},[204,1313,1314],{},[646,1315,1316],{},"Type Parameters:",[549,1318,1319,1327],{},[552,1320,1321],{},[555,1322,1323,1325],{},[558,1324,608],{},[558,1326,566],{},[568,1328,1329],{},[555,1330,1331,1335],{},[573,1332,1333],{},[208,1334,425],{},[573,1336,1337],{},"Type of the options object",[544,1339,1341],{"id":1340},"appaddplugin",[208,1342,226],{},[204,1344,1345],{},"Method to add a plugin to the application.",[232,1347,1349],{"className":234,"code":1348,"language":236,"meta":237,"style":237},"app.addPlugin(PluginClass);\napp.addPlugin(PluginClass, options);\n",[208,1350,1351,1364],{"__ignoreMap":237},[241,1352,1353,1355,1357,1359,1362],{"class":243,"line":244},[241,1354,345],{"class":255},[241,1356,363],{"class":251},[241,1358,366],{"class":320},[241,1360,1361],{"class":255},"(PluginClass)",[241,1363,275],{"class":251},[241,1365,1366,1368,1370,1372,1375,1377,1380],{"class":243,"line":278},[241,1367,345],{"class":255},[241,1369,363],{"class":251},[241,1371,366],{"class":320},[241,1373,1374],{"class":255},"(PluginClass",[241,1376,505],{"class":251},[241,1378,1379],{"class":255}," options)",[241,1381,275],{"class":251},[204,1383,1384],{},[646,1385,1386],{},"Parameters:",[549,1388,1389,1399],{},[552,1390,1391],{},[555,1392,1393,1395,1397],{},[558,1394,608],{},[558,1396,563],{},[558,1398,566],{},[568,1400,1401,1416],{},[555,1402,1403,1408,1413],{},[573,1404,1405],{},[208,1406,1407],{},"PluginClass",[573,1409,1410],{},[208,1411,1412],{},"typeof BasePlugin",[573,1414,1415],{},"The plugin class to add",[555,1417,1418,1422,1426],{},[573,1419,1420],{},[208,1421,635],{},[573,1423,1424],{},[208,1425,425],{},[573,1427,1428],{},"Optional configuration for the plugin",[1430,1431,1432],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}",{"title":237,"searchDepth":244,"depth":278,"links":1434},[1435,1436,1440,1441,1442],{"id":219,"depth":278,"text":220},{"id":395,"depth":278,"text":396,"children":1437},[1438,1439],{"id":546,"depth":301,"text":547},{"id":588,"depth":301,"text":589},{"id":655,"depth":278,"text":656},{"id":977,"depth":278,"text":978},{"id":1225,"depth":278,"text":74,"children":1443},[1444,1445],{"id":1228,"depth":301,"text":1231},{"id":1340,"depth":301,"text":226},"Learn how to create and use custom plugins in Vercube to extend functionality and add new features","md",null,{},{"title":149,"description":1446},"bK8Mxa3v9DLXfxmf8mqJ4envxwC0X8SouMR-WQ7PQeQ",[1453,1448],{"title":145,"path":146,"stem":147,"description":1454,"children":-1},"Learn how to create and use custom decorators in Vercube to extend functionality and create reusable patterns",1775552782593]