[{"data":1,"prerenderedAt":4798},["ShallowReactive",2],{"navigation":3,"docs-path-index":152,"-docs-core-features-configuration":198,"-docs-core-features-configuration-surround":4793},[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":33,"body":200,"description":4787,"extension":4788,"links":4789,"meta":4790,"navigation":56,"path":34,"seo":4791,"stem":35,"__hash__":4792},"docs\u002Fdocs\u002F2.core-features\u002F0.configuration.md",{"type":201,"value":202,"toc":4762},"minimark",[203,212,217,223,368,375,383,387,392,395,639,643,646,880,884,887,1220,1224,1270,1274,1360,1364,1371,1609,1621,1625,1628,1632,1736,1740,2046,2050,2310,2314,2328,2332,2336,2393,2396,2536,2540,2638,2642,2690,2694,2700,3067,3070,3074,3529,3533,3536,4541,4545,4551,4557,4615,4620,4625,4747,4752,4758],[204,205,206,207,211],"p",{},"Vercube provides a powerful, type-safe configuration system that lets you customize every aspect of your application. Configuration is defined in a ",[208,209,210],"code",{},"vercube.config.ts"," file at the root of your project, and can be accessed at runtime throughout your application.",[213,214,216],"h2",{"id":215},"creating-configuration","Creating Configuration",[204,218,219,220,222],{},"Create a ",[208,221,210],{}," file in your project root:",[224,225,230],"pre",{"className":226,"code":227,"filename":210,"language":228,"meta":229,"style":229},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineConfig } from '@vercube\u002Fcore';\n\nexport default defineConfig({\n  server: {\n    port: 3000,\n    host: 'localhost'\n  },\n  logLevel: 'info'\n});\n","ts","",[208,231,232,268,274,292,305,320,336,342,357],{"__ignoreMap":229},[233,234,237,241,245,249,252,255,258,262,265],"span",{"class":235,"line":236},"line",1,[233,238,240],{"class":239},"s7zQu","import",[233,242,244],{"class":243},"sMK4o"," {",[233,246,248],{"class":247},"sTEyZ"," defineConfig",[233,250,251],{"class":243}," }",[233,253,254],{"class":239}," from",[233,256,257],{"class":243}," '",[233,259,261],{"class":260},"sfazB","@vercube\u002Fcore",[233,263,264],{"class":243},"'",[233,266,267],{"class":243},";\n",[233,269,271],{"class":235,"line":270},2,[233,272,273],{"emptyLinePlaceholder":56},"\n",[233,275,277,280,283,286,289],{"class":235,"line":276},3,[233,278,279],{"class":239},"export",[233,281,282],{"class":239}," default",[233,284,248],{"class":285},"s2Zo4",[233,287,288],{"class":247},"(",[233,290,291],{"class":243},"{\n",[233,293,295,299,302],{"class":235,"line":294},4,[233,296,298],{"class":297},"swJcz","  server",[233,300,301],{"class":243},":",[233,303,304],{"class":243}," {\n",[233,306,308,311,313,317],{"class":235,"line":307},5,[233,309,310],{"class":297},"    port",[233,312,301],{"class":243},[233,314,316],{"class":315},"sbssI"," 3000",[233,318,319],{"class":243},",\n",[233,321,323,326,328,330,333],{"class":235,"line":322},6,[233,324,325],{"class":297},"    host",[233,327,301],{"class":243},[233,329,257],{"class":243},[233,331,332],{"class":260},"localhost",[233,334,335],{"class":243},"'\n",[233,337,339],{"class":235,"line":338},7,[233,340,341],{"class":243},"  },\n",[233,343,345,348,350,352,355],{"class":235,"line":344},8,[233,346,347],{"class":297},"  logLevel",[233,349,301],{"class":243},[233,351,257],{"class":243},[233,353,354],{"class":260},"info",[233,356,335],{"class":243},[233,358,360,363,366],{"class":235,"line":359},9,[233,361,362],{"class":243},"}",[233,364,365],{"class":247},")",[233,367,267],{"class":243},[204,369,370,371,374],{},"The ",[208,372,373],{},"defineConfig"," function provides TypeScript autocomplete and type checking for all configuration options.",[376,377,378],"tip",{},[204,379,370,380,382],{},[208,381,373],{}," function is a helper that provides type safety and IDE autocomple. It doesn't do anything at runtime - it just returns your configuration object with proper types.",[213,384,386],{"id":385},"configuration-options","Configuration Options",[388,389,391],"h3",{"id":390},"server-configuration","Server Configuration",[204,393,394],{},"Controls how your HTTP server runs:",[224,396,398],{"className":226,"code":397,"filename":210,"language":228,"meta":229,"style":229},"export default defineConfig({\n  server: {\n    \u002F\u002F Network settings\n    host: 'localhost',\n    port: 3000,\n    \n    \u002F\u002F HTTPS configuration\n    https: false,\n    \u002F\u002F Or with certificates:\n    https: {\n      key: '.\u002Fcerts\u002Fkey.pem',\n      cert: '.\u002Fcerts\u002Fcert.pem'\n    },\n    \n    \u002F\u002F Static file serving\n    static: {\n      dirs: ['public'],        \u002F\u002F Directories to serve\n      maxAge: 3600,            \u002F\u002F Cache time in seconds\n      immutable: false,        \u002F\u002F Set immutable cache header\n      etag: true               \u002F\u002F Enable ETags\n    }\n  }\n});\n",[208,399,400,412,420,426,440,450,455,460,473,478,487,504,519,525,530,536,546,573,589,604,618,624,630],{"__ignoreMap":229},[233,401,402,404,406,408,410],{"class":235,"line":236},[233,403,279],{"class":239},[233,405,282],{"class":239},[233,407,248],{"class":285},[233,409,288],{"class":247},[233,411,291],{"class":243},[233,413,414,416,418],{"class":235,"line":270},[233,415,298],{"class":297},[233,417,301],{"class":243},[233,419,304],{"class":243},[233,421,422],{"class":235,"line":276},[233,423,425],{"class":424},"sHwdD","    \u002F\u002F Network settings\n",[233,427,428,430,432,434,436,438],{"class":235,"line":294},[233,429,325],{"class":297},[233,431,301],{"class":243},[233,433,257],{"class":243},[233,435,332],{"class":260},[233,437,264],{"class":243},[233,439,319],{"class":243},[233,441,442,444,446,448],{"class":235,"line":307},[233,443,310],{"class":297},[233,445,301],{"class":243},[233,447,316],{"class":315},[233,449,319],{"class":243},[233,451,452],{"class":235,"line":322},[233,453,454],{"class":247},"    \n",[233,456,457],{"class":235,"line":338},[233,458,459],{"class":424},"    \u002F\u002F HTTPS configuration\n",[233,461,462,465,467,471],{"class":235,"line":344},[233,463,464],{"class":297},"    https",[233,466,301],{"class":243},[233,468,470],{"class":469},"sfNiH"," false",[233,472,319],{"class":243},[233,474,475],{"class":235,"line":359},[233,476,477],{"class":424},"    \u002F\u002F Or with certificates:\n",[233,479,481,483,485],{"class":235,"line":480},10,[233,482,464],{"class":297},[233,484,301],{"class":243},[233,486,304],{"class":243},[233,488,490,493,495,497,500,502],{"class":235,"line":489},11,[233,491,492],{"class":297},"      key",[233,494,301],{"class":243},[233,496,257],{"class":243},[233,498,499],{"class":260},".\u002Fcerts\u002Fkey.pem",[233,501,264],{"class":243},[233,503,319],{"class":243},[233,505,507,510,512,514,517],{"class":235,"line":506},12,[233,508,509],{"class":297},"      cert",[233,511,301],{"class":243},[233,513,257],{"class":243},[233,515,516],{"class":260},".\u002Fcerts\u002Fcert.pem",[233,518,335],{"class":243},[233,520,522],{"class":235,"line":521},13,[233,523,524],{"class":243},"    },\n",[233,526,528],{"class":235,"line":527},14,[233,529,454],{"class":247},[233,531,533],{"class":235,"line":532},15,[233,534,535],{"class":424},"    \u002F\u002F Static file serving\n",[233,537,539,542,544],{"class":235,"line":538},16,[233,540,541],{"class":297},"    static",[233,543,301],{"class":243},[233,545,304],{"class":243},[233,547,549,552,554,557,559,562,564,567,570],{"class":235,"line":548},17,[233,550,551],{"class":297},"      dirs",[233,553,301],{"class":243},[233,555,556],{"class":247}," [",[233,558,264],{"class":243},[233,560,561],{"class":260},"public",[233,563,264],{"class":243},[233,565,566],{"class":247},"]",[233,568,569],{"class":243},",",[233,571,572],{"class":424},"        \u002F\u002F Directories to serve\n",[233,574,576,579,581,584,586],{"class":235,"line":575},18,[233,577,578],{"class":297},"      maxAge",[233,580,301],{"class":243},[233,582,583],{"class":315}," 3600",[233,585,569],{"class":243},[233,587,588],{"class":424},"            \u002F\u002F Cache time in seconds\n",[233,590,592,595,597,599,601],{"class":235,"line":591},19,[233,593,594],{"class":297},"      immutable",[233,596,301],{"class":243},[233,598,470],{"class":469},[233,600,569],{"class":243},[233,602,603],{"class":424},"        \u002F\u002F Set immutable cache header\n",[233,605,607,610,612,615],{"class":235,"line":606},20,[233,608,609],{"class":297},"      etag",[233,611,301],{"class":243},[233,613,614],{"class":469}," true",[233,616,617],{"class":424},"               \u002F\u002F Enable ETags\n",[233,619,621],{"class":235,"line":620},21,[233,622,623],{"class":243},"    }\n",[233,625,627],{"class":235,"line":626},22,[233,628,629],{"class":243},"  }\n",[233,631,633,635,637],{"class":235,"line":632},23,[233,634,362],{"class":243},[233,636,365],{"class":247},[233,638,267],{"class":243},[388,640,642],{"id":641},"runtime-configuration","Runtime Configuration",[204,644,645],{},"Configuration that's accessible at runtime in your application:",[224,647,649],{"className":226,"code":648,"filename":210,"language":228,"meta":229,"style":229},"export default defineConfig({\n  runtime: {\n    \u002F\u002F Built-in session configuration\n    session: {\n      secret: process.env.SESSION_SECRET || 'change-me-in-production',\n      name: 'vercube_session',\n      duration: 60 * 60 * 24 * 7  \u002F\u002F 7 days in seconds\n    },\n    \n    \u002F\u002F Your custom runtime config (more on this below)\n    database: {\n      host: 'localhost',\n      port: 5432,\n      name: 'myapp'\n    },\n    api: {\n      baseUrl: 'https:\u002F\u002Fapi.example.com',\n      timeout: 5000\n    }\n  }\n});\n",[208,650,651,663,672,677,686,719,735,763,767,771,776,785,800,812,825,829,838,854,864,868,872],{"__ignoreMap":229},[233,652,653,655,657,659,661],{"class":235,"line":236},[233,654,279],{"class":239},[233,656,282],{"class":239},[233,658,248],{"class":285},[233,660,288],{"class":247},[233,662,291],{"class":243},[233,664,665,668,670],{"class":235,"line":270},[233,666,667],{"class":297},"  runtime",[233,669,301],{"class":243},[233,671,304],{"class":243},[233,673,674],{"class":235,"line":276},[233,675,676],{"class":424},"    \u002F\u002F Built-in session configuration\n",[233,678,679,682,684],{"class":235,"line":294},[233,680,681],{"class":297},"    session",[233,683,301],{"class":243},[233,685,304],{"class":243},[233,687,688,691,693,696,699,702,704,707,710,712,715,717],{"class":235,"line":307},[233,689,690],{"class":297},"      secret",[233,692,301],{"class":243},[233,694,695],{"class":247}," process",[233,697,698],{"class":243},".",[233,700,701],{"class":247},"env",[233,703,698],{"class":243},[233,705,706],{"class":247},"SESSION_SECRET ",[233,708,709],{"class":243},"||",[233,711,257],{"class":243},[233,713,714],{"class":260},"change-me-in-production",[233,716,264],{"class":243},[233,718,319],{"class":243},[233,720,721,724,726,728,731,733],{"class":235,"line":322},[233,722,723],{"class":297},"      name",[233,725,301],{"class":243},[233,727,257],{"class":243},[233,729,730],{"class":260},"vercube_session",[233,732,264],{"class":243},[233,734,319],{"class":243},[233,736,737,740,742,745,748,750,752,755,757,760],{"class":235,"line":338},[233,738,739],{"class":297},"      duration",[233,741,301],{"class":243},[233,743,744],{"class":315}," 60",[233,746,747],{"class":243}," *",[233,749,744],{"class":315},[233,751,747],{"class":243},[233,753,754],{"class":315}," 24",[233,756,747],{"class":243},[233,758,759],{"class":315}," 7",[233,761,762],{"class":424},"  \u002F\u002F 7 days in seconds\n",[233,764,765],{"class":235,"line":344},[233,766,524],{"class":243},[233,768,769],{"class":235,"line":359},[233,770,454],{"class":247},[233,772,773],{"class":235,"line":480},[233,774,775],{"class":424},"    \u002F\u002F Your custom runtime config (more on this below)\n",[233,777,778,781,783],{"class":235,"line":489},[233,779,780],{"class":297},"    database",[233,782,301],{"class":243},[233,784,304],{"class":243},[233,786,787,790,792,794,796,798],{"class":235,"line":506},[233,788,789],{"class":297},"      host",[233,791,301],{"class":243},[233,793,257],{"class":243},[233,795,332],{"class":260},[233,797,264],{"class":243},[233,799,319],{"class":243},[233,801,802,805,807,810],{"class":235,"line":521},[233,803,804],{"class":297},"      port",[233,806,301],{"class":243},[233,808,809],{"class":315}," 5432",[233,811,319],{"class":243},[233,813,814,816,818,820,823],{"class":235,"line":527},[233,815,723],{"class":297},[233,817,301],{"class":243},[233,819,257],{"class":243},[233,821,822],{"class":260},"myapp",[233,824,335],{"class":243},[233,826,827],{"class":235,"line":532},[233,828,524],{"class":243},[233,830,831,834,836],{"class":235,"line":538},[233,832,833],{"class":297},"    api",[233,835,301],{"class":243},[233,837,304],{"class":243},[233,839,840,843,845,847,850,852],{"class":235,"line":548},[233,841,842],{"class":297},"      baseUrl",[233,844,301],{"class":243},[233,846,257],{"class":243},[233,848,849],{"class":260},"https:\u002F\u002Fapi.example.com",[233,851,264],{"class":243},[233,853,319],{"class":243},[233,855,856,859,861],{"class":235,"line":575},[233,857,858],{"class":297},"      timeout",[233,860,301],{"class":243},[233,862,863],{"class":315}," 5000\n",[233,865,866],{"class":235,"line":591},[233,867,623],{"class":243},[233,869,870],{"class":235,"line":606},[233,871,629],{"class":243},[233,873,874,876,878],{"class":235,"line":620},[233,875,362],{"class":243},[233,877,365],{"class":247},[233,879,267],{"class":243},[388,881,883],{"id":882},"build-configuration","Build Configuration",[204,885,886],{},"Configuration for the Vercube CLI build process:",[224,888,890],{"className":226,"code":889,"filename":210,"language":228,"meta":229,"style":229},"export default defineConfig({\n  build: {\n    \u002F\u002F Project root directory\n    root: process.cwd(),\n    \n    \u002F\u002F Entry point(s)\n    entry: 'src\u002Findex.ts',\n    \u002F\u002F Or multiple entries:\n    entry: ['src\u002Findex.ts', 'src\u002Fworker.ts'],\n    \n    \u002F\u002F Build output\n    output: {\n      dir: 'dist',           \u002F\u002F Output directory\n      publicDir: 'public'    \u002F\u002F Public assets directory\n    },\n    \n    \u002F\u002F TypeScript configuration\n    tsconfig: '.\u002Ftsconfig.json',\n    dts: true,  \u002F\u002F Generate .d.ts files\n    \n    \u002F\u002F Build-time defines (injected into code)\n    define: {\n      'process.env.API_URL': JSON.stringify('https:\u002F\u002Fapi.example.com')\n    },\n    \n    \u002F\u002F Bundler to use\n    bundler: 'rolldown',\n    \n    \u002F\u002F Custom bundler plugins\n    plugins: [\n      \u002F\u002F Your rolldown plugins here\n    ]\n  }\n});\n",[208,891,892,904,913,918,937,941,946,962,967,994,998,1003,1012,1031,1047,1051,1055,1060,1076,1090,1094,1099,1108,1139,1144,1149,1155,1172,1177,1183,1194,1200,1206,1211],{"__ignoreMap":229},[233,893,894,896,898,900,902],{"class":235,"line":236},[233,895,279],{"class":239},[233,897,282],{"class":239},[233,899,248],{"class":285},[233,901,288],{"class":247},[233,903,291],{"class":243},[233,905,906,909,911],{"class":235,"line":270},[233,907,908],{"class":297},"  build",[233,910,301],{"class":243},[233,912,304],{"class":243},[233,914,915],{"class":235,"line":276},[233,916,917],{"class":424},"    \u002F\u002F Project root directory\n",[233,919,920,923,925,927,929,932,935],{"class":235,"line":294},[233,921,922],{"class":297},"    root",[233,924,301],{"class":243},[233,926,695],{"class":247},[233,928,698],{"class":243},[233,930,931],{"class":285},"cwd",[233,933,934],{"class":247},"()",[233,936,319],{"class":243},[233,938,939],{"class":235,"line":307},[233,940,454],{"class":247},[233,942,943],{"class":235,"line":322},[233,944,945],{"class":424},"    \u002F\u002F Entry point(s)\n",[233,947,948,951,953,955,958,960],{"class":235,"line":338},[233,949,950],{"class":297},"    entry",[233,952,301],{"class":243},[233,954,257],{"class":243},[233,956,957],{"class":260},"src\u002Findex.ts",[233,959,264],{"class":243},[233,961,319],{"class":243},[233,963,964],{"class":235,"line":344},[233,965,966],{"class":424},"    \u002F\u002F Or multiple entries:\n",[233,968,969,971,973,975,977,979,981,983,985,988,990,992],{"class":235,"line":359},[233,970,950],{"class":297},[233,972,301],{"class":243},[233,974,556],{"class":247},[233,976,264],{"class":243},[233,978,957],{"class":260},[233,980,264],{"class":243},[233,982,569],{"class":243},[233,984,257],{"class":243},[233,986,987],{"class":260},"src\u002Fworker.ts",[233,989,264],{"class":243},[233,991,566],{"class":247},[233,993,319],{"class":243},[233,995,996],{"class":235,"line":480},[233,997,454],{"class":247},[233,999,1000],{"class":235,"line":489},[233,1001,1002],{"class":424},"    \u002F\u002F Build output\n",[233,1004,1005,1008,1010],{"class":235,"line":506},[233,1006,1007],{"class":297},"    output",[233,1009,301],{"class":243},[233,1011,304],{"class":243},[233,1013,1014,1017,1019,1021,1024,1026,1028],{"class":235,"line":521},[233,1015,1016],{"class":297},"      dir",[233,1018,301],{"class":243},[233,1020,257],{"class":243},[233,1022,1023],{"class":260},"dist",[233,1025,264],{"class":243},[233,1027,569],{"class":243},[233,1029,1030],{"class":424},"           \u002F\u002F Output directory\n",[233,1032,1033,1036,1038,1040,1042,1044],{"class":235,"line":527},[233,1034,1035],{"class":297},"      publicDir",[233,1037,301],{"class":243},[233,1039,257],{"class":243},[233,1041,561],{"class":260},[233,1043,264],{"class":243},[233,1045,1046],{"class":424},"    \u002F\u002F Public assets directory\n",[233,1048,1049],{"class":235,"line":532},[233,1050,524],{"class":243},[233,1052,1053],{"class":235,"line":538},[233,1054,454],{"class":247},[233,1056,1057],{"class":235,"line":548},[233,1058,1059],{"class":424},"    \u002F\u002F TypeScript configuration\n",[233,1061,1062,1065,1067,1069,1072,1074],{"class":235,"line":575},[233,1063,1064],{"class":297},"    tsconfig",[233,1066,301],{"class":243},[233,1068,257],{"class":243},[233,1070,1071],{"class":260},".\u002Ftsconfig.json",[233,1073,264],{"class":243},[233,1075,319],{"class":243},[233,1077,1078,1081,1083,1085,1087],{"class":235,"line":591},[233,1079,1080],{"class":297},"    dts",[233,1082,301],{"class":243},[233,1084,614],{"class":469},[233,1086,569],{"class":243},[233,1088,1089],{"class":424},"  \u002F\u002F Generate .d.ts files\n",[233,1091,1092],{"class":235,"line":606},[233,1093,454],{"class":247},[233,1095,1096],{"class":235,"line":620},[233,1097,1098],{"class":424},"    \u002F\u002F Build-time defines (injected into code)\n",[233,1100,1101,1104,1106],{"class":235,"line":626},[233,1102,1103],{"class":297},"    define",[233,1105,301],{"class":243},[233,1107,304],{"class":243},[233,1109,1110,1113,1116,1118,1120,1123,1125,1128,1130,1132,1134,1136],{"class":235,"line":632},[233,1111,1112],{"class":243},"      '",[233,1114,1115],{"class":297},"process.env.API_URL",[233,1117,264],{"class":243},[233,1119,301],{"class":243},[233,1121,1122],{"class":247}," JSON",[233,1124,698],{"class":243},[233,1126,1127],{"class":285},"stringify",[233,1129,288],{"class":247},[233,1131,264],{"class":243},[233,1133,849],{"class":260},[233,1135,264],{"class":243},[233,1137,1138],{"class":247},")\n",[233,1140,1142],{"class":235,"line":1141},24,[233,1143,524],{"class":243},[233,1145,1147],{"class":235,"line":1146},25,[233,1148,454],{"class":247},[233,1150,1152],{"class":235,"line":1151},26,[233,1153,1154],{"class":424},"    \u002F\u002F Bundler to use\n",[233,1156,1158,1161,1163,1165,1168,1170],{"class":235,"line":1157},27,[233,1159,1160],{"class":297},"    bundler",[233,1162,301],{"class":243},[233,1164,257],{"class":243},[233,1166,1167],{"class":260},"rolldown",[233,1169,264],{"class":243},[233,1171,319],{"class":243},[233,1173,1175],{"class":235,"line":1174},28,[233,1176,454],{"class":247},[233,1178,1180],{"class":235,"line":1179},29,[233,1181,1182],{"class":424},"    \u002F\u002F Custom bundler plugins\n",[233,1184,1186,1189,1191],{"class":235,"line":1185},30,[233,1187,1188],{"class":297},"    plugins",[233,1190,301],{"class":243},[233,1192,1193],{"class":247}," [\n",[233,1195,1197],{"class":235,"line":1196},31,[233,1198,1199],{"class":424},"      \u002F\u002F Your rolldown plugins here\n",[233,1201,1203],{"class":235,"line":1202},32,[233,1204,1205],{"class":247},"    ]\n",[233,1207,1209],{"class":235,"line":1208},33,[233,1210,629],{"class":243},[233,1212,1214,1216,1218],{"class":235,"line":1213},34,[233,1215,362],{"class":243},[233,1217,365],{"class":247},[233,1219,267],{"class":243},[388,1221,1223],{"id":1222},"logging-configuration","Logging Configuration",[224,1225,1227],{"className":226,"code":1226,"filename":210,"language":228,"meta":229,"style":229},"export default defineConfig({\n  \u002F\u002F Log level for the application\n  logLevel: 'debug'  \u002F\u002F 'debug' | 'info' | 'warn' | 'error' | 'silent'\n});\n",[208,1228,1229,1241,1246,1262],{"__ignoreMap":229},[233,1230,1231,1233,1235,1237,1239],{"class":235,"line":236},[233,1232,279],{"class":239},[233,1234,282],{"class":239},[233,1236,248],{"class":285},[233,1238,288],{"class":247},[233,1240,291],{"class":243},[233,1242,1243],{"class":235,"line":270},[233,1244,1245],{"class":424},"  \u002F\u002F Log level for the application\n",[233,1247,1248,1250,1252,1254,1257,1259],{"class":235,"line":276},[233,1249,347],{"class":297},[233,1251,301],{"class":243},[233,1253,257],{"class":243},[233,1255,1256],{"class":260},"debug",[233,1258,264],{"class":243},[233,1260,1261],{"class":424},"  \u002F\u002F 'debug' | 'info' | 'warn' | 'error' | 'silent'\n",[233,1263,1264,1266,1268],{"class":235,"line":294},[233,1265,362],{"class":243},[233,1267,365],{"class":247},[233,1269,267],{"class":243},[388,1271,1273],{"id":1272},"environment-flags","Environment Flags",[224,1275,1277],{"className":226,"code":1276,"filename":210,"language":228,"meta":229,"style":229},"export default defineConfig({\n  \u002F\u002F Automatically set based on NODE_ENV, but you can override\n  production: process.env.NODE_ENV === 'production',\n  dev: process.env.NODE_ENV !== 'production'\n});\n",[208,1278,1279,1291,1296,1326,1352],{"__ignoreMap":229},[233,1280,1281,1283,1285,1287,1289],{"class":235,"line":236},[233,1282,279],{"class":239},[233,1284,282],{"class":239},[233,1286,248],{"class":285},[233,1288,288],{"class":247},[233,1290,291],{"class":243},[233,1292,1293],{"class":235,"line":270},[233,1294,1295],{"class":424},"  \u002F\u002F Automatically set based on NODE_ENV, but you can override\n",[233,1297,1298,1301,1303,1305,1307,1309,1311,1314,1317,1319,1322,1324],{"class":235,"line":276},[233,1299,1300],{"class":297},"  production",[233,1302,301],{"class":243},[233,1304,695],{"class":247},[233,1306,698],{"class":243},[233,1308,701],{"class":247},[233,1310,698],{"class":243},[233,1312,1313],{"class":247},"NODE_ENV ",[233,1315,1316],{"class":243},"===",[233,1318,257],{"class":243},[233,1320,1321],{"class":260},"production",[233,1323,264],{"class":243},[233,1325,319],{"class":243},[233,1327,1328,1331,1333,1335,1337,1339,1341,1343,1346,1348,1350],{"class":235,"line":294},[233,1329,1330],{"class":297},"  dev",[233,1332,301],{"class":243},[233,1334,695],{"class":247},[233,1336,698],{"class":243},[233,1338,701],{"class":247},[233,1340,698],{"class":243},[233,1342,1313],{"class":247},[233,1344,1345],{"class":243},"!==",[233,1347,257],{"class":243},[233,1349,1321],{"class":260},[233,1351,335],{"class":243},[233,1353,1354,1356,1358],{"class":235,"line":307},[233,1355,362],{"class":243},[233,1357,365],{"class":247},[233,1359,267],{"class":243},[213,1361,1363],{"id":1362},"accessing-configuration-at-runtime","Accessing Configuration at Runtime",[204,1365,1366,1367,1370],{},"Use the ",[208,1368,1369],{},"RuntimeConfig"," class to access your configuration in controllers, services, and other parts of your application:",[224,1372,1375],{"className":226,"code":1373,"filename":1374,"language":228,"meta":229,"style":229},"import { Controller, Get, Inject } from '@vercube\u002Fcore';\nimport { RuntimeConfig } from '@vercube\u002Fcore';\n\n@Controller('\u002Fusers')\nexport class UserController {\n  \n  @Inject(RuntimeConfig)\n  private config!: RuntimeConfig;\n  \n  @Get('\u002Fsession-info')\n  getSessionInfo() {\n    \u002F\u002F Access built-in runtime config\n    return {\n      sessionName: this.config.runtimeConfig?.session?.name,\n      sessionDuration: this.config.runtimeConfig?.session?.duration\n    };\n  }\n}\n","UserController.ts",[208,1376,1377,1408,1429,1433,1452,1466,1471,1482,1497,1501,1519,1528,1533,1540,1571,1595,1600,1604],{"__ignoreMap":229},[233,1378,1379,1381,1383,1386,1388,1391,1393,1396,1398,1400,1402,1404,1406],{"class":235,"line":236},[233,1380,240],{"class":239},[233,1382,244],{"class":243},[233,1384,1385],{"class":247}," Controller",[233,1387,569],{"class":243},[233,1389,1390],{"class":247}," Get",[233,1392,569],{"class":243},[233,1394,1395],{"class":247}," Inject",[233,1397,251],{"class":243},[233,1399,254],{"class":239},[233,1401,257],{"class":243},[233,1403,261],{"class":260},[233,1405,264],{"class":243},[233,1407,267],{"class":243},[233,1409,1410,1412,1414,1417,1419,1421,1423,1425,1427],{"class":235,"line":270},[233,1411,240],{"class":239},[233,1413,244],{"class":243},[233,1415,1416],{"class":247}," RuntimeConfig",[233,1418,251],{"class":243},[233,1420,254],{"class":239},[233,1422,257],{"class":243},[233,1424,261],{"class":260},[233,1426,264],{"class":243},[233,1428,267],{"class":243},[233,1430,1431],{"class":235,"line":276},[233,1432,273],{"emptyLinePlaceholder":56},[233,1434,1435,1438,1441,1443,1445,1448,1450],{"class":235,"line":294},[233,1436,1437],{"class":243},"@",[233,1439,1440],{"class":285},"Controller",[233,1442,288],{"class":247},[233,1444,264],{"class":243},[233,1446,1447],{"class":260},"\u002Fusers",[233,1449,264],{"class":243},[233,1451,1138],{"class":247},[233,1453,1454,1456,1460,1464],{"class":235,"line":307},[233,1455,279],{"class":239},[233,1457,1459],{"class":1458},"spNyl"," class",[233,1461,1463],{"class":1462},"sBMFI"," UserController",[233,1465,304],{"class":243},[233,1467,1468],{"class":235,"line":322},[233,1469,1470],{"class":247},"  \n",[233,1472,1473,1476,1479],{"class":235,"line":338},[233,1474,1475],{"class":243},"  @",[233,1477,1478],{"class":285},"Inject",[233,1480,1481],{"class":247},"(RuntimeConfig)\n",[233,1483,1484,1487,1490,1493,1495],{"class":235,"line":344},[233,1485,1486],{"class":1458},"  private",[233,1488,1489],{"class":297}," config",[233,1491,1492],{"class":243},"!:",[233,1494,1416],{"class":1462},[233,1496,267],{"class":243},[233,1498,1499],{"class":235,"line":359},[233,1500,1470],{"class":247},[233,1502,1503,1505,1508,1510,1512,1515,1517],{"class":235,"line":480},[233,1504,1475],{"class":243},[233,1506,1507],{"class":285},"Get",[233,1509,288],{"class":247},[233,1511,264],{"class":243},[233,1513,1514],{"class":260},"\u002Fsession-info",[233,1516,264],{"class":243},[233,1518,1138],{"class":247},[233,1520,1521,1524,1526],{"class":235,"line":489},[233,1522,1523],{"class":297},"  getSessionInfo",[233,1525,934],{"class":243},[233,1527,304],{"class":243},[233,1529,1530],{"class":235,"line":506},[233,1531,1532],{"class":424},"    \u002F\u002F Access built-in runtime config\n",[233,1534,1535,1538],{"class":235,"line":521},[233,1536,1537],{"class":239},"    return",[233,1539,304],{"class":243},[233,1541,1542,1545,1547,1550,1553,1555,1558,1561,1564,1566,1569],{"class":235,"line":527},[233,1543,1544],{"class":297},"      sessionName",[233,1546,301],{"class":243},[233,1548,1549],{"class":243}," this.",[233,1551,1552],{"class":247},"config",[233,1554,698],{"class":243},[233,1556,1557],{"class":247},"runtimeConfig",[233,1559,1560],{"class":243},"?.",[233,1562,1563],{"class":247},"session",[233,1565,1560],{"class":243},[233,1567,1568],{"class":247},"name",[233,1570,319],{"class":243},[233,1572,1573,1576,1578,1580,1582,1584,1586,1588,1590,1592],{"class":235,"line":532},[233,1574,1575],{"class":297},"      sessionDuration",[233,1577,301],{"class":243},[233,1579,1549],{"class":243},[233,1581,1552],{"class":247},[233,1583,698],{"class":243},[233,1585,1557],{"class":247},[233,1587,1560],{"class":243},[233,1589,1563],{"class":247},[233,1591,1560],{"class":243},[233,1593,1594],{"class":247},"duration\n",[233,1596,1597],{"class":235,"line":538},[233,1598,1599],{"class":243},"    };\n",[233,1601,1602],{"class":235,"line":548},[233,1603,629],{"class":243},[233,1605,1606],{"class":235,"line":575},[233,1607,1608],{"class":243},"}\n",[1610,1611,1612],"warning",{},[204,1613,1614,1617,1618,1620],{},[208,1615,1616],{},"RuntimeConfig.runtimeConfig"," is always optional (undefined until the app initializes), so always use optional chaining (",[208,1619,1560],{},") when accessing it.",[213,1622,1624],{"id":1623},"custom-runtime-configuration","Custom Runtime Configuration",[204,1626,1627],{},"You can add your own runtime configuration with full type safety:",[388,1629,1631],{"id":1630},"step-1-define-your-config-type","Step 1: Define Your Config Type",[224,1633,1636],{"className":226,"code":1634,"filename":1635,"language":228,"meta":229,"style":229},"export interface AppConfig {\n  database: {\n    host: string;\n    port: number;\n    name: string;\n  };\n  api: {\n    baseUrl: string;\n    timeout: number;\n  };\n}\n","src\u002Ftypes\u002FAppConfig.ts",[208,1637,1638,1650,1659,1670,1681,1692,1697,1706,1717,1728,1732],{"__ignoreMap":229},[233,1639,1640,1642,1645,1648],{"class":235,"line":236},[233,1641,279],{"class":239},[233,1643,1644],{"class":1458}," interface",[233,1646,1647],{"class":1462}," AppConfig",[233,1649,304],{"class":243},[233,1651,1652,1655,1657],{"class":235,"line":270},[233,1653,1654],{"class":297},"  database",[233,1656,301],{"class":243},[233,1658,304],{"class":243},[233,1660,1661,1663,1665,1668],{"class":235,"line":276},[233,1662,325],{"class":297},[233,1664,301],{"class":243},[233,1666,1667],{"class":1462}," string",[233,1669,267],{"class":243},[233,1671,1672,1674,1676,1679],{"class":235,"line":294},[233,1673,310],{"class":297},[233,1675,301],{"class":243},[233,1677,1678],{"class":1462}," number",[233,1680,267],{"class":243},[233,1682,1683,1686,1688,1690],{"class":235,"line":307},[233,1684,1685],{"class":297},"    name",[233,1687,301],{"class":243},[233,1689,1667],{"class":1462},[233,1691,267],{"class":243},[233,1693,1694],{"class":235,"line":322},[233,1695,1696],{"class":243},"  };\n",[233,1698,1699,1702,1704],{"class":235,"line":338},[233,1700,1701],{"class":297},"  api",[233,1703,301],{"class":243},[233,1705,304],{"class":243},[233,1707,1708,1711,1713,1715],{"class":235,"line":344},[233,1709,1710],{"class":297},"    baseUrl",[233,1712,301],{"class":243},[233,1714,1667],{"class":1462},[233,1716,267],{"class":243},[233,1718,1719,1722,1724,1726],{"class":235,"line":359},[233,1720,1721],{"class":297},"    timeout",[233,1723,301],{"class":243},[233,1725,1678],{"class":1462},[233,1727,267],{"class":243},[233,1729,1730],{"class":235,"line":480},[233,1731,1696],{"class":243},[233,1733,1734],{"class":235,"line":489},[233,1735,1608],{"class":243},[388,1737,1739],{"id":1738},"step-2-use-type-parameter-in-defineconfig","Step 2: Use Type Parameter in defineConfig",[224,1741,1743],{"className":226,"code":1742,"filename":210,"language":228,"meta":229,"style":229},"import { defineConfig } from '@vercube\u002Fcore';\nimport type { AppConfig } from '.\u002Fsrc\u002Ftypes\u002FAppConfig';\n\nexport default defineConfig\u003CAppConfig>({\n  runtime: {\n    \u002F\u002F Built-in session config still works\n    session: {\n      secret: process.env.SESSION_SECRET!,\n      duration: 60 * 60 * 24 * 7\n    },\n    \n    \u002F\u002F Your custom configuration with full autocomplete\n    database: {\n      host: process.env.DB_HOST || 'localhost',\n      port: parseInt(process.env.DB_PORT || '5432'),\n      name: process.env.DB_NAME || 'myapp'\n    },\n    api: {\n      baseUrl: process.env.API_URL || 'https:\u002F\u002Fapi.example.com',\n      timeout: 5000\n    }\n  }\n});\n",[208,1744,1745,1765,1789,1793,1814,1822,1827,1835,1855,1876,1880,1884,1889,1897,1924,1958,1983,1987,1995,2022,2030,2034,2038],{"__ignoreMap":229},[233,1746,1747,1749,1751,1753,1755,1757,1759,1761,1763],{"class":235,"line":236},[233,1748,240],{"class":239},[233,1750,244],{"class":243},[233,1752,248],{"class":247},[233,1754,251],{"class":243},[233,1756,254],{"class":239},[233,1758,257],{"class":243},[233,1760,261],{"class":260},[233,1762,264],{"class":243},[233,1764,267],{"class":243},[233,1766,1767,1769,1772,1774,1776,1778,1780,1782,1785,1787],{"class":235,"line":270},[233,1768,240],{"class":239},[233,1770,1771],{"class":239}," type",[233,1773,244],{"class":243},[233,1775,1647],{"class":247},[233,1777,251],{"class":243},[233,1779,254],{"class":239},[233,1781,257],{"class":243},[233,1783,1784],{"class":260},".\u002Fsrc\u002Ftypes\u002FAppConfig",[233,1786,264],{"class":243},[233,1788,267],{"class":243},[233,1790,1791],{"class":235,"line":276},[233,1792,273],{"emptyLinePlaceholder":56},[233,1794,1795,1797,1799,1801,1804,1807,1810,1812],{"class":235,"line":294},[233,1796,279],{"class":239},[233,1798,282],{"class":239},[233,1800,248],{"class":285},[233,1802,1803],{"class":243},"\u003C",[233,1805,1806],{"class":1462},"AppConfig",[233,1808,1809],{"class":243},">",[233,1811,288],{"class":247},[233,1813,291],{"class":243},[233,1815,1816,1818,1820],{"class":235,"line":307},[233,1817,667],{"class":297},[233,1819,301],{"class":243},[233,1821,304],{"class":243},[233,1823,1824],{"class":235,"line":322},[233,1825,1826],{"class":424},"    \u002F\u002F Built-in session config still works\n",[233,1828,1829,1831,1833],{"class":235,"line":338},[233,1830,681],{"class":297},[233,1832,301],{"class":243},[233,1834,304],{"class":243},[233,1836,1837,1839,1841,1843,1845,1847,1849,1852],{"class":235,"line":344},[233,1838,690],{"class":297},[233,1840,301],{"class":243},[233,1842,695],{"class":247},[233,1844,698],{"class":243},[233,1846,701],{"class":247},[233,1848,698],{"class":243},[233,1850,1851],{"class":247},"SESSION_SECRET",[233,1853,1854],{"class":243},"!,\n",[233,1856,1857,1859,1861,1863,1865,1867,1869,1871,1873],{"class":235,"line":359},[233,1858,739],{"class":297},[233,1860,301],{"class":243},[233,1862,744],{"class":315},[233,1864,747],{"class":243},[233,1866,744],{"class":315},[233,1868,747],{"class":243},[233,1870,754],{"class":315},[233,1872,747],{"class":243},[233,1874,1875],{"class":315}," 7\n",[233,1877,1878],{"class":235,"line":480},[233,1879,524],{"class":243},[233,1881,1882],{"class":235,"line":489},[233,1883,454],{"class":247},[233,1885,1886],{"class":235,"line":506},[233,1887,1888],{"class":424},"    \u002F\u002F Your custom configuration with full autocomplete\n",[233,1890,1891,1893,1895],{"class":235,"line":521},[233,1892,780],{"class":297},[233,1894,301],{"class":243},[233,1896,304],{"class":243},[233,1898,1899,1901,1903,1905,1907,1909,1911,1914,1916,1918,1920,1922],{"class":235,"line":527},[233,1900,789],{"class":297},[233,1902,301],{"class":243},[233,1904,695],{"class":247},[233,1906,698],{"class":243},[233,1908,701],{"class":247},[233,1910,698],{"class":243},[233,1912,1913],{"class":247},"DB_HOST ",[233,1915,709],{"class":243},[233,1917,257],{"class":243},[233,1919,332],{"class":260},[233,1921,264],{"class":243},[233,1923,319],{"class":243},[233,1925,1926,1928,1930,1933,1936,1938,1940,1942,1945,1947,1949,1952,1954,1956],{"class":235,"line":532},[233,1927,804],{"class":297},[233,1929,301],{"class":243},[233,1931,1932],{"class":285}," parseInt",[233,1934,1935],{"class":247},"(process",[233,1937,698],{"class":243},[233,1939,701],{"class":247},[233,1941,698],{"class":243},[233,1943,1944],{"class":247},"DB_PORT ",[233,1946,709],{"class":243},[233,1948,257],{"class":243},[233,1950,1951],{"class":260},"5432",[233,1953,264],{"class":243},[233,1955,365],{"class":247},[233,1957,319],{"class":243},[233,1959,1960,1962,1964,1966,1968,1970,1972,1975,1977,1979,1981],{"class":235,"line":538},[233,1961,723],{"class":297},[233,1963,301],{"class":243},[233,1965,695],{"class":247},[233,1967,698],{"class":243},[233,1969,701],{"class":247},[233,1971,698],{"class":243},[233,1973,1974],{"class":247},"DB_NAME ",[233,1976,709],{"class":243},[233,1978,257],{"class":243},[233,1980,822],{"class":260},[233,1982,335],{"class":243},[233,1984,1985],{"class":235,"line":548},[233,1986,524],{"class":243},[233,1988,1989,1991,1993],{"class":235,"line":575},[233,1990,833],{"class":297},[233,1992,301],{"class":243},[233,1994,304],{"class":243},[233,1996,1997,1999,2001,2003,2005,2007,2009,2012,2014,2016,2018,2020],{"class":235,"line":591},[233,1998,842],{"class":297},[233,2000,301],{"class":243},[233,2002,695],{"class":247},[233,2004,698],{"class":243},[233,2006,701],{"class":247},[233,2008,698],{"class":243},[233,2010,2011],{"class":247},"API_URL ",[233,2013,709],{"class":243},[233,2015,257],{"class":243},[233,2017,849],{"class":260},[233,2019,264],{"class":243},[233,2021,319],{"class":243},[233,2023,2024,2026,2028],{"class":235,"line":606},[233,2025,858],{"class":297},[233,2027,301],{"class":243},[233,2029,863],{"class":315},[233,2031,2032],{"class":235,"line":620},[233,2033,623],{"class":243},[233,2035,2036],{"class":235,"line":626},[233,2037,629],{"class":243},[233,2039,2040,2042,2044],{"class":235,"line":632},[233,2041,362],{"class":243},[233,2043,365],{"class":247},[233,2045,267],{"class":243},[388,2047,2049],{"id":2048},"step-3-access-your-config-with-type-safety","Step 3: Access Your Config with Type Safety",[224,2051,2054],{"className":226,"code":2052,"filename":2053,"language":228,"meta":229,"style":229},"import { RuntimeConfig } from '@vercube\u002Fcore';\nimport type { AppConfig } from '..\u002Ftypes\u002FAppConfig';\n\nexport class DatabaseService {\n  @Inject(RuntimeConfig)\n  private config!: RuntimeConfig\u003CAppConfig>;\n  \n  async connect() {\n    const dbConfig = this.config.runtimeConfig?.database;\n    \n    if (!dbConfig) {\n      throw new Error('Database configuration not found');\n    }\n    \n    \u002F\u002F Full autocomplete for your config!\n    console.log(`Connecting to ${dbConfig.host}:${dbConfig.port}\u002F${dbConfig.name}`);\n  }\n}\n","DatabaseService.ts",[208,2055,2056,2076,2099,2103,2114,2122,2139,2143,2155,2181,2185,2204,2228,2232,2236,2241,2302,2306],{"__ignoreMap":229},[233,2057,2058,2060,2062,2064,2066,2068,2070,2072,2074],{"class":235,"line":236},[233,2059,240],{"class":239},[233,2061,244],{"class":243},[233,2063,1416],{"class":247},[233,2065,251],{"class":243},[233,2067,254],{"class":239},[233,2069,257],{"class":243},[233,2071,261],{"class":260},[233,2073,264],{"class":243},[233,2075,267],{"class":243},[233,2077,2078,2080,2082,2084,2086,2088,2090,2092,2095,2097],{"class":235,"line":270},[233,2079,240],{"class":239},[233,2081,1771],{"class":239},[233,2083,244],{"class":243},[233,2085,1647],{"class":247},[233,2087,251],{"class":243},[233,2089,254],{"class":239},[233,2091,257],{"class":243},[233,2093,2094],{"class":260},"..\u002Ftypes\u002FAppConfig",[233,2096,264],{"class":243},[233,2098,267],{"class":243},[233,2100,2101],{"class":235,"line":276},[233,2102,273],{"emptyLinePlaceholder":56},[233,2104,2105,2107,2109,2112],{"class":235,"line":294},[233,2106,279],{"class":239},[233,2108,1459],{"class":1458},[233,2110,2111],{"class":1462}," DatabaseService",[233,2113,304],{"class":243},[233,2115,2116,2118,2120],{"class":235,"line":307},[233,2117,1475],{"class":243},[233,2119,1478],{"class":285},[233,2121,1481],{"class":247},[233,2123,2124,2126,2128,2130,2132,2134,2136],{"class":235,"line":322},[233,2125,1486],{"class":1458},[233,2127,1489],{"class":297},[233,2129,1492],{"class":243},[233,2131,1416],{"class":1462},[233,2133,1803],{"class":243},[233,2135,1806],{"class":1462},[233,2137,2138],{"class":243},">;\n",[233,2140,2141],{"class":235,"line":338},[233,2142,1470],{"class":247},[233,2144,2145,2148,2151,2153],{"class":235,"line":344},[233,2146,2147],{"class":1458},"  async",[233,2149,2150],{"class":297}," connect",[233,2152,934],{"class":243},[233,2154,304],{"class":243},[233,2156,2157,2160,2163,2166,2168,2170,2172,2174,2176,2179],{"class":235,"line":359},[233,2158,2159],{"class":1458},"    const",[233,2161,2162],{"class":247}," dbConfig",[233,2164,2165],{"class":243}," =",[233,2167,1549],{"class":243},[233,2169,1552],{"class":247},[233,2171,698],{"class":243},[233,2173,1557],{"class":247},[233,2175,1560],{"class":243},[233,2177,2178],{"class":247},"database",[233,2180,267],{"class":243},[233,2182,2183],{"class":235,"line":480},[233,2184,454],{"class":297},[233,2186,2187,2190,2193,2196,2199,2202],{"class":235,"line":489},[233,2188,2189],{"class":239},"    if",[233,2191,2192],{"class":297}," (",[233,2194,2195],{"class":243},"!",[233,2197,2198],{"class":247},"dbConfig",[233,2200,2201],{"class":297},") ",[233,2203,291],{"class":243},[233,2205,2206,2209,2212,2215,2217,2219,2222,2224,2226],{"class":235,"line":506},[233,2207,2208],{"class":239},"      throw",[233,2210,2211],{"class":243}," new",[233,2213,2214],{"class":285}," Error",[233,2216,288],{"class":297},[233,2218,264],{"class":243},[233,2220,2221],{"class":260},"Database configuration not found",[233,2223,264],{"class":243},[233,2225,365],{"class":297},[233,2227,267],{"class":243},[233,2229,2230],{"class":235,"line":521},[233,2231,623],{"class":243},[233,2233,2234],{"class":235,"line":527},[233,2235,454],{"class":297},[233,2237,2238],{"class":235,"line":532},[233,2239,2240],{"class":424},"    \u002F\u002F Full autocomplete for your config!\n",[233,2242,2243,2246,2248,2251,2253,2256,2259,2262,2264,2266,2269,2271,2273,2275,2277,2279,2282,2284,2287,2289,2291,2293,2295,2298,2300],{"class":235,"line":538},[233,2244,2245],{"class":247},"    console",[233,2247,698],{"class":243},[233,2249,2250],{"class":285},"log",[233,2252,288],{"class":297},[233,2254,2255],{"class":243},"`",[233,2257,2258],{"class":260},"Connecting to ",[233,2260,2261],{"class":243},"${",[233,2263,2198],{"class":247},[233,2265,698],{"class":243},[233,2267,2268],{"class":247},"host",[233,2270,362],{"class":243},[233,2272,301],{"class":260},[233,2274,2261],{"class":243},[233,2276,2198],{"class":247},[233,2278,698],{"class":243},[233,2280,2281],{"class":247},"port",[233,2283,362],{"class":243},[233,2285,2286],{"class":260},"\u002F",[233,2288,2261],{"class":243},[233,2290,2198],{"class":247},[233,2292,698],{"class":243},[233,2294,1568],{"class":247},[233,2296,2297],{"class":243},"}`",[233,2299,365],{"class":297},[233,2301,267],{"class":243},[233,2303,2304],{"class":235,"line":548},[233,2305,629],{"class":243},[233,2307,2308],{"class":235,"line":575},[233,2309,1608],{"class":243},[213,2311,2313],{"id":2312},"environment-variables","Environment Variables",[204,2315,2316,2317,2320,2321,698],{},"Vercube automatically loads environment variables from ",[208,2318,2319],{},".env"," files using ",[2322,2323,2327],"a",{"href":2324,"rel":2325},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fc12",[2326],"nofollow","c12",[388,2329,2331],{"id":2330},"basic-usage","Basic Usage",[204,2333,219,2334,222],{},[208,2335,2319],{},[224,2337,2341],{"className":2338,"code":2339,"filename":2319,"language":2340,"meta":229,"style":229},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","NODE_ENV=development\nSESSION_SECRET=my-secret-key\nDB_HOST=localhost\nDB_PORT=5432\nAPI_URL=https:\u002F\u002Fapi.example.com\n","bash",[208,2342,2343,2354,2363,2373,2383],{"__ignoreMap":229},[233,2344,2345,2348,2351],{"class":235,"line":236},[233,2346,2347],{"class":247},"NODE_ENV",[233,2349,2350],{"class":243},"=",[233,2352,2353],{"class":260},"development\n",[233,2355,2356,2358,2360],{"class":235,"line":270},[233,2357,1851],{"class":247},[233,2359,2350],{"class":243},[233,2361,2362],{"class":260},"my-secret-key\n",[233,2364,2365,2368,2370],{"class":235,"line":276},[233,2366,2367],{"class":247},"DB_HOST",[233,2369,2350],{"class":243},[233,2371,2372],{"class":260},"localhost\n",[233,2374,2375,2378,2380],{"class":235,"line":294},[233,2376,2377],{"class":247},"DB_PORT",[233,2379,2350],{"class":243},[233,2381,2382],{"class":260},"5432\n",[233,2384,2385,2388,2390],{"class":235,"line":307},[233,2386,2387],{"class":247},"API_URL",[233,2389,2350],{"class":243},[233,2391,2392],{"class":260},"https:\u002F\u002Fapi.example.com\n",[204,2394,2395],{},"Access in your config:",[224,2397,2399],{"className":226,"code":2398,"filename":210,"language":228,"meta":229,"style":229},"export default defineConfig({\n  runtime: {\n    session: {\n      secret: process.env.SESSION_SECRET || 'fallback-secret'\n    },\n    database: {\n      host: process.env.DB_HOST || 'localhost',\n      port: parseInt(process.env.DB_PORT || '5432')\n    }\n  }\n});\n",[208,2400,2401,2413,2421,2429,2454,2458,2466,2492,2520,2524,2528],{"__ignoreMap":229},[233,2402,2403,2405,2407,2409,2411],{"class":235,"line":236},[233,2404,279],{"class":239},[233,2406,282],{"class":239},[233,2408,248],{"class":285},[233,2410,288],{"class":247},[233,2412,291],{"class":243},[233,2414,2415,2417,2419],{"class":235,"line":270},[233,2416,667],{"class":297},[233,2418,301],{"class":243},[233,2420,304],{"class":243},[233,2422,2423,2425,2427],{"class":235,"line":276},[233,2424,681],{"class":297},[233,2426,301],{"class":243},[233,2428,304],{"class":243},[233,2430,2431,2433,2435,2437,2439,2441,2443,2445,2447,2449,2452],{"class":235,"line":294},[233,2432,690],{"class":297},[233,2434,301],{"class":243},[233,2436,695],{"class":247},[233,2438,698],{"class":243},[233,2440,701],{"class":247},[233,2442,698],{"class":243},[233,2444,706],{"class":247},[233,2446,709],{"class":243},[233,2448,257],{"class":243},[233,2450,2451],{"class":260},"fallback-secret",[233,2453,335],{"class":243},[233,2455,2456],{"class":235,"line":307},[233,2457,524],{"class":243},[233,2459,2460,2462,2464],{"class":235,"line":322},[233,2461,780],{"class":297},[233,2463,301],{"class":243},[233,2465,304],{"class":243},[233,2467,2468,2470,2472,2474,2476,2478,2480,2482,2484,2486,2488,2490],{"class":235,"line":338},[233,2469,789],{"class":297},[233,2471,301],{"class":243},[233,2473,695],{"class":247},[233,2475,698],{"class":243},[233,2477,701],{"class":247},[233,2479,698],{"class":243},[233,2481,1913],{"class":247},[233,2483,709],{"class":243},[233,2485,257],{"class":243},[233,2487,332],{"class":260},[233,2489,264],{"class":243},[233,2491,319],{"class":243},[233,2493,2494,2496,2498,2500,2502,2504,2506,2508,2510,2512,2514,2516,2518],{"class":235,"line":344},[233,2495,804],{"class":297},[233,2497,301],{"class":243},[233,2499,1932],{"class":285},[233,2501,1935],{"class":247},[233,2503,698],{"class":243},[233,2505,701],{"class":247},[233,2507,698],{"class":243},[233,2509,1944],{"class":247},[233,2511,709],{"class":243},[233,2513,257],{"class":243},[233,2515,1951],{"class":260},[233,2517,264],{"class":243},[233,2519,1138],{"class":247},[233,2521,2522],{"class":235,"line":359},[233,2523,623],{"class":243},[233,2525,2526],{"class":235,"line":480},[233,2527,629],{"class":243},[233,2529,2530,2532,2534],{"class":235,"line":489},[233,2531,362],{"class":243},[233,2533,365],{"class":247},[233,2535,267],{"class":243},[388,2537,2539],{"id":2538},"customizing-env-loading","Customizing .env Loading",[224,2541,2543],{"className":226,"code":2542,"filename":210,"language":228,"meta":229,"style":229},"export default defineConfig({\n  c12: {\n    dotenv: {\n      \u002F\u002F Custom .env file path\n      fileName: '.env.local',\n      \n      \u002F\u002F Load from specific directory\n      cwd: process.cwd()\n    }\n  }\n});\n",[208,2544,2545,2557,2566,2575,2580,2596,2601,2606,2622,2626,2630],{"__ignoreMap":229},[233,2546,2547,2549,2551,2553,2555],{"class":235,"line":236},[233,2548,279],{"class":239},[233,2550,282],{"class":239},[233,2552,248],{"class":285},[233,2554,288],{"class":247},[233,2556,291],{"class":243},[233,2558,2559,2562,2564],{"class":235,"line":270},[233,2560,2561],{"class":297},"  c12",[233,2563,301],{"class":243},[233,2565,304],{"class":243},[233,2567,2568,2571,2573],{"class":235,"line":276},[233,2569,2570],{"class":297},"    dotenv",[233,2572,301],{"class":243},[233,2574,304],{"class":243},[233,2576,2577],{"class":235,"line":294},[233,2578,2579],{"class":424},"      \u002F\u002F Custom .env file path\n",[233,2581,2582,2585,2587,2589,2592,2594],{"class":235,"line":307},[233,2583,2584],{"class":297},"      fileName",[233,2586,301],{"class":243},[233,2588,257],{"class":243},[233,2590,2591],{"class":260},".env.local",[233,2593,264],{"class":243},[233,2595,319],{"class":243},[233,2597,2598],{"class":235,"line":322},[233,2599,2600],{"class":247},"      \n",[233,2602,2603],{"class":235,"line":338},[233,2604,2605],{"class":424},"      \u002F\u002F Load from specific directory\n",[233,2607,2608,2611,2613,2615,2617,2619],{"class":235,"line":344},[233,2609,2610],{"class":297},"      cwd",[233,2612,301],{"class":243},[233,2614,695],{"class":247},[233,2616,698],{"class":243},[233,2618,931],{"class":285},[233,2620,2621],{"class":247},"()\n",[233,2623,2624],{"class":235,"line":359},[233,2625,623],{"class":243},[233,2627,2628],{"class":235,"line":480},[233,2629,629],{"class":243},[233,2631,2632,2634,2636],{"class":235,"line":489},[233,2633,362],{"class":243},[233,2635,365],{"class":247},[233,2637,267],{"class":243},[388,2639,2641],{"id":2640},"disabling-env-loading","Disabling .env Loading",[224,2643,2645],{"className":226,"code":2644,"filename":210,"language":228,"meta":229,"style":229},"export default defineConfig({\n  c12: {\n    dotenv: false  \u002F\u002F Disable automatic .env loading\n  }\n});\n",[208,2646,2647,2659,2667,2678,2682],{"__ignoreMap":229},[233,2648,2649,2651,2653,2655,2657],{"class":235,"line":236},[233,2650,279],{"class":239},[233,2652,282],{"class":239},[233,2654,248],{"class":285},[233,2656,288],{"class":247},[233,2658,291],{"class":243},[233,2660,2661,2663,2665],{"class":235,"line":270},[233,2662,2561],{"class":297},[233,2664,301],{"class":243},[233,2666,304],{"class":243},[233,2668,2669,2671,2673,2675],{"class":235,"line":276},[233,2670,2570],{"class":297},[233,2672,301],{"class":243},[233,2674,470],{"class":469},[233,2676,2677],{"class":424},"  \u002F\u002F Disable automatic .env loading\n",[233,2679,2680],{"class":235,"line":294},[233,2681,629],{"class":243},[233,2683,2684,2686,2688],{"class":235,"line":307},[233,2685,362],{"class":243},[233,2687,365],{"class":247},[233,2689,267],{"class":243},[213,2691,2693],{"id":2692},"default-configuration","Default Configuration",[204,2695,2696,2697,2699],{},"If you don't provide a ",[208,2698,210],{}," file, Vercube uses these defaults:",[224,2701,2703],{"className":226,"code":2702,"language":228,"meta":229,"style":229},"{\n  logLevel: 'debug',\n  production: process.env.NODE_ENV === 'production',\n  dev: process.env.NODE_ENV !== 'production',\n  \n  build: {\n    root: process.cwd(),\n    entry: 'src\u002Findex.ts',\n    output: {\n      dir: 'dist',\n      publicDir: 'public'\n    },\n    bundler: 'rolldown'\n  },\n  \n  server: {\n    runtime: 'node',\n    host: 'localhost',\n    port: 3000,\n    https: false,\n    static: {\n      dirs: ['public']\n    }\n  },\n  \n  runtime: {\n    session: {\n      secret: '\u003Crandomly-generated>',\n      name: 'vercube_session',\n      duration: 60 * 60 * 24 * 7  \u002F\u002F 7 days\n    }\n  },\n  \n  experimental: {}\n}\n",[208,2704,2705,2709,2723,2750,2777,2781,2789,2805,2819,2827,2841,2853,2857,2869,2873,2877,2885,2901,2915,2925,2935,2943,2960,2964,2968,2972,2980,2988,3003,3017,3040,3044,3048,3052,3062],{"__ignoreMap":229},[233,2706,2707],{"class":235,"line":236},[233,2708,291],{"class":243},[233,2710,2711,2713,2715,2717,2719,2721],{"class":235,"line":270},[233,2712,347],{"class":1462},[233,2714,301],{"class":243},[233,2716,257],{"class":243},[233,2718,1256],{"class":260},[233,2720,264],{"class":243},[233,2722,319],{"class":243},[233,2724,2725,2727,2729,2731,2733,2735,2737,2739,2742,2744,2746,2748],{"class":235,"line":276},[233,2726,1300],{"class":1462},[233,2728,301],{"class":243},[233,2730,695],{"class":247},[233,2732,698],{"class":243},[233,2734,701],{"class":247},[233,2736,698],{"class":243},[233,2738,2347],{"class":247},[233,2740,2741],{"class":243}," ===",[233,2743,257],{"class":243},[233,2745,1321],{"class":260},[233,2747,264],{"class":243},[233,2749,319],{"class":243},[233,2751,2752,2754,2756,2758,2760,2762,2764,2766,2769,2771,2773,2775],{"class":235,"line":294},[233,2753,1330],{"class":1462},[233,2755,301],{"class":243},[233,2757,695],{"class":247},[233,2759,698],{"class":243},[233,2761,701],{"class":247},[233,2763,698],{"class":243},[233,2765,2347],{"class":247},[233,2767,2768],{"class":243}," !==",[233,2770,257],{"class":243},[233,2772,1321],{"class":260},[233,2774,264],{"class":243},[233,2776,319],{"class":243},[233,2778,2779],{"class":235,"line":307},[233,2780,1470],{"class":297},[233,2782,2783,2785,2787],{"class":235,"line":322},[233,2784,908],{"class":1462},[233,2786,301],{"class":243},[233,2788,304],{"class":243},[233,2790,2791,2793,2795,2797,2799,2801,2803],{"class":235,"line":338},[233,2792,922],{"class":1462},[233,2794,301],{"class":243},[233,2796,695],{"class":247},[233,2798,698],{"class":243},[233,2800,931],{"class":285},[233,2802,934],{"class":297},[233,2804,319],{"class":243},[233,2806,2807,2809,2811,2813,2815,2817],{"class":235,"line":344},[233,2808,950],{"class":1462},[233,2810,301],{"class":243},[233,2812,257],{"class":243},[233,2814,957],{"class":260},[233,2816,264],{"class":243},[233,2818,319],{"class":243},[233,2820,2821,2823,2825],{"class":235,"line":359},[233,2822,1007],{"class":1462},[233,2824,301],{"class":243},[233,2826,304],{"class":243},[233,2828,2829,2831,2833,2835,2837,2839],{"class":235,"line":480},[233,2830,1016],{"class":1462},[233,2832,301],{"class":243},[233,2834,257],{"class":243},[233,2836,1023],{"class":260},[233,2838,264],{"class":243},[233,2840,319],{"class":243},[233,2842,2843,2845,2847,2849,2851],{"class":235,"line":489},[233,2844,1035],{"class":1462},[233,2846,301],{"class":243},[233,2848,257],{"class":243},[233,2850,561],{"class":260},[233,2852,335],{"class":243},[233,2854,2855],{"class":235,"line":506},[233,2856,524],{"class":243},[233,2858,2859,2861,2863,2865,2867],{"class":235,"line":521},[233,2860,1160],{"class":1462},[233,2862,301],{"class":243},[233,2864,257],{"class":243},[233,2866,1167],{"class":260},[233,2868,335],{"class":243},[233,2870,2871],{"class":235,"line":527},[233,2872,341],{"class":243},[233,2874,2875],{"class":235,"line":532},[233,2876,1470],{"class":297},[233,2878,2879,2881,2883],{"class":235,"line":538},[233,2880,298],{"class":1462},[233,2882,301],{"class":243},[233,2884,304],{"class":243},[233,2886,2887,2890,2892,2894,2897,2899],{"class":235,"line":548},[233,2888,2889],{"class":1462},"    runtime",[233,2891,301],{"class":243},[233,2893,257],{"class":243},[233,2895,2896],{"class":260},"node",[233,2898,264],{"class":243},[233,2900,319],{"class":243},[233,2902,2903,2905,2907,2909,2911,2913],{"class":235,"line":575},[233,2904,325],{"class":1462},[233,2906,301],{"class":243},[233,2908,257],{"class":243},[233,2910,332],{"class":260},[233,2912,264],{"class":243},[233,2914,319],{"class":243},[233,2916,2917,2919,2921,2923],{"class":235,"line":591},[233,2918,310],{"class":1462},[233,2920,301],{"class":243},[233,2922,316],{"class":315},[233,2924,319],{"class":243},[233,2926,2927,2929,2931,2933],{"class":235,"line":606},[233,2928,464],{"class":1462},[233,2930,301],{"class":243},[233,2932,470],{"class":469},[233,2934,319],{"class":243},[233,2936,2937,2939,2941],{"class":235,"line":620},[233,2938,541],{"class":1462},[233,2940,301],{"class":243},[233,2942,304],{"class":243},[233,2944,2945,2947,2949,2951,2953,2955,2957],{"class":235,"line":626},[233,2946,551],{"class":1462},[233,2948,301],{"class":243},[233,2950,556],{"class":297},[233,2952,264],{"class":243},[233,2954,561],{"class":260},[233,2956,264],{"class":243},[233,2958,2959],{"class":297},"]\n",[233,2961,2962],{"class":235,"line":632},[233,2963,623],{"class":243},[233,2965,2966],{"class":235,"line":1141},[233,2967,341],{"class":243},[233,2969,2970],{"class":235,"line":1146},[233,2971,1470],{"class":297},[233,2973,2974,2976,2978],{"class":235,"line":1151},[233,2975,667],{"class":1462},[233,2977,301],{"class":243},[233,2979,304],{"class":243},[233,2981,2982,2984,2986],{"class":235,"line":1157},[233,2983,681],{"class":1462},[233,2985,301],{"class":243},[233,2987,304],{"class":243},[233,2989,2990,2992,2994,2996,2999,3001],{"class":235,"line":1174},[233,2991,690],{"class":1462},[233,2993,301],{"class":243},[233,2995,257],{"class":243},[233,2997,2998],{"class":260},"\u003Crandomly-generated>",[233,3000,264],{"class":243},[233,3002,319],{"class":243},[233,3004,3005,3007,3009,3011,3013,3015],{"class":235,"line":1179},[233,3006,723],{"class":1462},[233,3008,301],{"class":243},[233,3010,257],{"class":243},[233,3012,730],{"class":260},[233,3014,264],{"class":243},[233,3016,319],{"class":243},[233,3018,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037],{"class":235,"line":1185},[233,3020,739],{"class":1462},[233,3022,301],{"class":243},[233,3024,744],{"class":315},[233,3026,747],{"class":243},[233,3028,744],{"class":315},[233,3030,747],{"class":243},[233,3032,754],{"class":315},[233,3034,747],{"class":243},[233,3036,759],{"class":315},[233,3038,3039],{"class":424},"  \u002F\u002F 7 days\n",[233,3041,3042],{"class":235,"line":1196},[233,3043,623],{"class":243},[233,3045,3046],{"class":235,"line":1202},[233,3047,341],{"class":243},[233,3049,3050],{"class":235,"line":1208},[233,3051,1470],{"class":297},[233,3053,3054,3057,3059],{"class":235,"line":1213},[233,3055,3056],{"class":1462},"  experimental",[233,3058,301],{"class":243},[233,3060,3061],{"class":243}," {}\n",[233,3063,3065],{"class":235,"line":3064},35,[233,3066,1608],{"class":243},[204,3068,3069],{},"You only need to override the values you want to change.",[213,3071,3073],{"id":3072},"configuration-by-environment","Configuration by Environment",[3075,3076,3077,3161,3338],"code-group",{},[224,3078,3081],{"className":226,"code":3079,"filename":3080,"language":228,"meta":229,"style":229},"export default defineConfig({\n  logLevel: 'debug',\n  dev: true,\n  server: {\n    port: 3000,\n    host: 'localhost'\n  }\n});\n","Development",[208,3082,3083,3095,3109,3119,3127,3137,3149,3153],{"__ignoreMap":229},[233,3084,3085,3087,3089,3091,3093],{"class":235,"line":236},[233,3086,279],{"class":239},[233,3088,282],{"class":239},[233,3090,248],{"class":285},[233,3092,288],{"class":247},[233,3094,291],{"class":243},[233,3096,3097,3099,3101,3103,3105,3107],{"class":235,"line":270},[233,3098,347],{"class":297},[233,3100,301],{"class":243},[233,3102,257],{"class":243},[233,3104,1256],{"class":260},[233,3106,264],{"class":243},[233,3108,319],{"class":243},[233,3110,3111,3113,3115,3117],{"class":235,"line":276},[233,3112,1330],{"class":297},[233,3114,301],{"class":243},[233,3116,614],{"class":469},[233,3118,319],{"class":243},[233,3120,3121,3123,3125],{"class":235,"line":294},[233,3122,298],{"class":297},[233,3124,301],{"class":243},[233,3126,304],{"class":243},[233,3128,3129,3131,3133,3135],{"class":235,"line":307},[233,3130,310],{"class":297},[233,3132,301],{"class":243},[233,3134,316],{"class":315},[233,3136,319],{"class":243},[233,3138,3139,3141,3143,3145,3147],{"class":235,"line":322},[233,3140,325],{"class":297},[233,3142,301],{"class":243},[233,3144,257],{"class":243},[233,3146,332],{"class":260},[233,3148,335],{"class":243},[233,3150,3151],{"class":235,"line":338},[233,3152,629],{"class":243},[233,3154,3155,3157,3159],{"class":235,"line":344},[233,3156,362],{"class":243},[233,3158,365],{"class":247},[233,3160,267],{"class":243},[224,3162,3165],{"className":226,"code":3163,"filename":3164,"language":228,"meta":229,"style":229},"export default defineConfig({\n  logLevel: 'warn',\n  production: true,\n  server: {\n    port: parseInt(process.env.PORT || '8080'),\n    host: '0.0.0.0'  \u002F\u002F Listen on all interfaces\n  },\n  runtime: {\n    session: {\n      secret: process.env.SESSION_SECRET!,\n      duration: 60 * 60 * 24 * 30  \u002F\u002F 30 days\n    }\n  }\n});\n","Production",[208,3166,3167,3179,3194,3204,3212,3244,3260,3264,3272,3280,3298,3322,3326,3330],{"__ignoreMap":229},[233,3168,3169,3171,3173,3175,3177],{"class":235,"line":236},[233,3170,279],{"class":239},[233,3172,282],{"class":239},[233,3174,248],{"class":285},[233,3176,288],{"class":247},[233,3178,291],{"class":243},[233,3180,3181,3183,3185,3187,3190,3192],{"class":235,"line":270},[233,3182,347],{"class":297},[233,3184,301],{"class":243},[233,3186,257],{"class":243},[233,3188,3189],{"class":260},"warn",[233,3191,264],{"class":243},[233,3193,319],{"class":243},[233,3195,3196,3198,3200,3202],{"class":235,"line":276},[233,3197,1300],{"class":297},[233,3199,301],{"class":243},[233,3201,614],{"class":469},[233,3203,319],{"class":243},[233,3205,3206,3208,3210],{"class":235,"line":294},[233,3207,298],{"class":297},[233,3209,301],{"class":243},[233,3211,304],{"class":243},[233,3213,3214,3216,3218,3220,3222,3224,3226,3228,3231,3233,3235,3238,3240,3242],{"class":235,"line":307},[233,3215,310],{"class":297},[233,3217,301],{"class":243},[233,3219,1932],{"class":285},[233,3221,1935],{"class":247},[233,3223,698],{"class":243},[233,3225,701],{"class":247},[233,3227,698],{"class":243},[233,3229,3230],{"class":247},"PORT ",[233,3232,709],{"class":243},[233,3234,257],{"class":243},[233,3236,3237],{"class":260},"8080",[233,3239,264],{"class":243},[233,3241,365],{"class":247},[233,3243,319],{"class":243},[233,3245,3246,3248,3250,3252,3255,3257],{"class":235,"line":322},[233,3247,325],{"class":297},[233,3249,301],{"class":243},[233,3251,257],{"class":243},[233,3253,3254],{"class":260},"0.0.0.0",[233,3256,264],{"class":243},[233,3258,3259],{"class":424},"  \u002F\u002F Listen on all interfaces\n",[233,3261,3262],{"class":235,"line":338},[233,3263,341],{"class":243},[233,3265,3266,3268,3270],{"class":235,"line":344},[233,3267,667],{"class":297},[233,3269,301],{"class":243},[233,3271,304],{"class":243},[233,3273,3274,3276,3278],{"class":235,"line":359},[233,3275,681],{"class":297},[233,3277,301],{"class":243},[233,3279,304],{"class":243},[233,3281,3282,3284,3286,3288,3290,3292,3294,3296],{"class":235,"line":480},[233,3283,690],{"class":297},[233,3285,301],{"class":243},[233,3287,695],{"class":247},[233,3289,698],{"class":243},[233,3291,701],{"class":247},[233,3293,698],{"class":243},[233,3295,1851],{"class":247},[233,3297,1854],{"class":243},[233,3299,3300,3302,3304,3306,3308,3310,3312,3314,3316,3319],{"class":235,"line":489},[233,3301,739],{"class":297},[233,3303,301],{"class":243},[233,3305,744],{"class":315},[233,3307,747],{"class":243},[233,3309,744],{"class":315},[233,3311,747],{"class":243},[233,3313,754],{"class":315},[233,3315,747],{"class":243},[233,3317,3318],{"class":315}," 30",[233,3320,3321],{"class":424},"  \u002F\u002F 30 days\n",[233,3323,3324],{"class":235,"line":506},[233,3325,623],{"class":243},[233,3327,3328],{"class":235,"line":521},[233,3329,629],{"class":243},[233,3331,3332,3334,3336],{"class":235,"line":527},[233,3333,362],{"class":243},[233,3335,365],{"class":247},[233,3337,267],{"class":243},[224,3339,3342],{"className":226,"code":3340,"filename":3341,"language":228,"meta":229,"style":229},"const isDev = process.env.NODE_ENV !== 'production';\n\nexport default defineConfig({\n  logLevel: isDev ? 'debug' : 'warn',\n  production: !isDev,\n  dev: isDev,\n  \n  server: {\n    port: isDev ? 3000 : parseInt(process.env.PORT || '8080'),\n    host: isDev ? 'localhost' : '0.0.0.0'\n  }\n});\n","Dynamic Based on NODE_ENV",[208,3343,3344,3374,3378,3390,3418,3432,3443,3447,3455,3493,3517,3521],{"__ignoreMap":229},[233,3345,3346,3349,3352,3354,3356,3358,3360,3362,3364,3366,3368,3370,3372],{"class":235,"line":236},[233,3347,3348],{"class":1458},"const",[233,3350,3351],{"class":247}," isDev ",[233,3353,2350],{"class":243},[233,3355,695],{"class":247},[233,3357,698],{"class":243},[233,3359,701],{"class":247},[233,3361,698],{"class":243},[233,3363,1313],{"class":247},[233,3365,1345],{"class":243},[233,3367,257],{"class":243},[233,3369,1321],{"class":260},[233,3371,264],{"class":243},[233,3373,267],{"class":243},[233,3375,3376],{"class":235,"line":270},[233,3377,273],{"emptyLinePlaceholder":56},[233,3379,3380,3382,3384,3386,3388],{"class":235,"line":276},[233,3381,279],{"class":239},[233,3383,282],{"class":239},[233,3385,248],{"class":285},[233,3387,288],{"class":247},[233,3389,291],{"class":243},[233,3391,3392,3394,3396,3398,3401,3403,3405,3407,3410,3412,3414,3416],{"class":235,"line":294},[233,3393,347],{"class":297},[233,3395,301],{"class":243},[233,3397,3351],{"class":247},[233,3399,3400],{"class":243},"?",[233,3402,257],{"class":243},[233,3404,1256],{"class":260},[233,3406,264],{"class":243},[233,3408,3409],{"class":243}," :",[233,3411,257],{"class":243},[233,3413,3189],{"class":260},[233,3415,264],{"class":243},[233,3417,319],{"class":243},[233,3419,3420,3422,3424,3427,3430],{"class":235,"line":307},[233,3421,1300],{"class":297},[233,3423,301],{"class":243},[233,3425,3426],{"class":243}," !",[233,3428,3429],{"class":247},"isDev",[233,3431,319],{"class":243},[233,3433,3434,3436,3438,3441],{"class":235,"line":322},[233,3435,1330],{"class":297},[233,3437,301],{"class":243},[233,3439,3440],{"class":247}," isDev",[233,3442,319],{"class":243},[233,3444,3445],{"class":235,"line":338},[233,3446,1470],{"class":247},[233,3448,3449,3451,3453],{"class":235,"line":344},[233,3450,298],{"class":297},[233,3452,301],{"class":243},[233,3454,304],{"class":243},[233,3456,3457,3459,3461,3463,3465,3467,3469,3471,3473,3475,3477,3479,3481,3483,3485,3487,3489,3491],{"class":235,"line":359},[233,3458,310],{"class":297},[233,3460,301],{"class":243},[233,3462,3351],{"class":247},[233,3464,3400],{"class":243},[233,3466,316],{"class":315},[233,3468,3409],{"class":243},[233,3470,1932],{"class":285},[233,3472,1935],{"class":247},[233,3474,698],{"class":243},[233,3476,701],{"class":247},[233,3478,698],{"class":243},[233,3480,3230],{"class":247},[233,3482,709],{"class":243},[233,3484,257],{"class":243},[233,3486,3237],{"class":260},[233,3488,264],{"class":243},[233,3490,365],{"class":247},[233,3492,319],{"class":243},[233,3494,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513,3515],{"class":235,"line":480},[233,3496,325],{"class":297},[233,3498,301],{"class":243},[233,3500,3351],{"class":247},[233,3502,3400],{"class":243},[233,3504,257],{"class":243},[233,3506,332],{"class":260},[233,3508,264],{"class":243},[233,3510,3409],{"class":243},[233,3512,257],{"class":243},[233,3514,3254],{"class":260},[233,3516,335],{"class":243},[233,3518,3519],{"class":235,"line":489},[233,3520,629],{"class":243},[233,3522,3523,3525,3527],{"class":235,"line":506},[233,3524,362],{"class":243},[233,3526,365],{"class":247},[233,3528,267],{"class":243},[213,3530,3532],{"id":3531},"complete-example","Complete Example",[204,3534,3535],{},"Here's a real-world configuration example:",[224,3537,3539],{"className":226,"code":3538,"filename":210,"language":228,"meta":229,"style":229},"import { defineConfig } from '@vercube\u002Fcore';\nimport type { AppConfig } from '.\u002Fsrc\u002Ftypes\u002FAppConfig';\n\nconst isDev = process.env.NODE_ENV !== 'production';\n\nexport default defineConfig\u003CAppConfig>({\n  \u002F\u002F Environment\n  production: !isDev,\n  dev: isDev,\n  logLevel: isDev ? 'debug' : 'info',\n  \n  \u002F\u002F Server\n  server: {\n    runtime: 'node',\n    host: isDev ? 'localhost' : '0.0.0.0',\n    port: parseInt(process.env.PORT || '3000'),\n    \n    https: isDev ? false : {\n      key: '.\u002Fcerts\u002Fprivkey.pem',\n      cert: '.\u002Fcerts\u002Ffullchain.pem'\n    },\n    \n    static: {\n      dirs: ['public', 'uploads'],\n      maxAge: isDev ? 0 : 86400,  \u002F\u002F No cache in dev, 1 day in prod\n      immutable: !isDev,\n      etag: true\n    }\n  },\n  \n  \u002F\u002F Runtime configuration\n  runtime: {\n    session: {\n      secret: process.env.SESSION_SECRET || 'dev-secret',\n      name: 'app_session',\n      duration: 60 * 60 * 24 * (isDev ? 7 : 30)  \u002F\u002F 7 days dev, 30 days prod\n    },\n    \n    \u002F\u002F Custom app config\n    database: {\n      host: process.env.DB_HOST || 'localhost',\n      port: parseInt(process.env.DB_PORT || '5432'),\n      name: process.env.DB_NAME || 'myapp',\n      ssl: !isDev\n    },\n    \n    redis: {\n      host: process.env.REDIS_HOST || 'localhost',\n      port: parseInt(process.env.REDIS_PORT || '6379')\n    },\n    \n    api: {\n      baseUrl: process.env.API_URL || 'https:\u002F\u002Fapi.example.com',\n      timeout: 5000,\n      retries: 3\n    },\n    \n    features: {\n      enableWebSockets: true,\n      enableFileUploads: true,\n      maxUploadSize: 10 * 1024 * 1024  \u002F\u002F 10MB\n    }\n  },\n  \n  \u002F\u002F Build config (for vercube CLI)\n  build: {\n    root: process.cwd(),\n    entry: 'src\u002Findex.ts',\n    output: {\n      dir: 'dist',\n      publicDir: 'public'\n    },\n    dts: true,\n    define: {\n      'process.env.BUILD_TIME': JSON.stringify(new Date().toISOString())\n    }\n  }\n});\n",[208,3540,3541,3561,3583,3587,3615,3619,3637,3642,3654,3664,3690,3694,3699,3707,3721,3747,3778,3782,3798,3813,3826,3830,3834,3842,3869,3892,3904,3913,3917,3921,3925,3930,3938,3946,3973,3988,4024,4029,4034,4040,4049,4076,4107,4134,4147,4152,4157,4167,4195,4226,4231,4236,4245,4272,4284,4295,4300,4305,4315,4327,4339,4362,4367,4372,4377,4383,4392,4409,4424,4433,4448,4461,4466,4477,4486,4522,4527,4532],{"__ignoreMap":229},[233,3542,3543,3545,3547,3549,3551,3553,3555,3557,3559],{"class":235,"line":236},[233,3544,240],{"class":239},[233,3546,244],{"class":243},[233,3548,248],{"class":247},[233,3550,251],{"class":243},[233,3552,254],{"class":239},[233,3554,257],{"class":243},[233,3556,261],{"class":260},[233,3558,264],{"class":243},[233,3560,267],{"class":243},[233,3562,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581],{"class":235,"line":270},[233,3564,240],{"class":239},[233,3566,1771],{"class":239},[233,3568,244],{"class":243},[233,3570,1647],{"class":247},[233,3572,251],{"class":243},[233,3574,254],{"class":239},[233,3576,257],{"class":243},[233,3578,1784],{"class":260},[233,3580,264],{"class":243},[233,3582,267],{"class":243},[233,3584,3585],{"class":235,"line":276},[233,3586,273],{"emptyLinePlaceholder":56},[233,3588,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613],{"class":235,"line":294},[233,3590,3348],{"class":1458},[233,3592,3351],{"class":247},[233,3594,2350],{"class":243},[233,3596,695],{"class":247},[233,3598,698],{"class":243},[233,3600,701],{"class":247},[233,3602,698],{"class":243},[233,3604,1313],{"class":247},[233,3606,1345],{"class":243},[233,3608,257],{"class":243},[233,3610,1321],{"class":260},[233,3612,264],{"class":243},[233,3614,267],{"class":243},[233,3616,3617],{"class":235,"line":307},[233,3618,273],{"emptyLinePlaceholder":56},[233,3620,3621,3623,3625,3627,3629,3631,3633,3635],{"class":235,"line":322},[233,3622,279],{"class":239},[233,3624,282],{"class":239},[233,3626,248],{"class":285},[233,3628,1803],{"class":243},[233,3630,1806],{"class":1462},[233,3632,1809],{"class":243},[233,3634,288],{"class":247},[233,3636,291],{"class":243},[233,3638,3639],{"class":235,"line":338},[233,3640,3641],{"class":424},"  \u002F\u002F Environment\n",[233,3643,3644,3646,3648,3650,3652],{"class":235,"line":344},[233,3645,1300],{"class":297},[233,3647,301],{"class":243},[233,3649,3426],{"class":243},[233,3651,3429],{"class":247},[233,3653,319],{"class":243},[233,3655,3656,3658,3660,3662],{"class":235,"line":359},[233,3657,1330],{"class":297},[233,3659,301],{"class":243},[233,3661,3440],{"class":247},[233,3663,319],{"class":243},[233,3665,3666,3668,3670,3672,3674,3676,3678,3680,3682,3684,3686,3688],{"class":235,"line":480},[233,3667,347],{"class":297},[233,3669,301],{"class":243},[233,3671,3351],{"class":247},[233,3673,3400],{"class":243},[233,3675,257],{"class":243},[233,3677,1256],{"class":260},[233,3679,264],{"class":243},[233,3681,3409],{"class":243},[233,3683,257],{"class":243},[233,3685,354],{"class":260},[233,3687,264],{"class":243},[233,3689,319],{"class":243},[233,3691,3692],{"class":235,"line":489},[233,3693,1470],{"class":247},[233,3695,3696],{"class":235,"line":506},[233,3697,3698],{"class":424},"  \u002F\u002F Server\n",[233,3700,3701,3703,3705],{"class":235,"line":521},[233,3702,298],{"class":297},[233,3704,301],{"class":243},[233,3706,304],{"class":243},[233,3708,3709,3711,3713,3715,3717,3719],{"class":235,"line":527},[233,3710,2889],{"class":297},[233,3712,301],{"class":243},[233,3714,257],{"class":243},[233,3716,2896],{"class":260},[233,3718,264],{"class":243},[233,3720,319],{"class":243},[233,3722,3723,3725,3727,3729,3731,3733,3735,3737,3739,3741,3743,3745],{"class":235,"line":532},[233,3724,325],{"class":297},[233,3726,301],{"class":243},[233,3728,3351],{"class":247},[233,3730,3400],{"class":243},[233,3732,257],{"class":243},[233,3734,332],{"class":260},[233,3736,264],{"class":243},[233,3738,3409],{"class":243},[233,3740,257],{"class":243},[233,3742,3254],{"class":260},[233,3744,264],{"class":243},[233,3746,319],{"class":243},[233,3748,3749,3751,3753,3755,3757,3759,3761,3763,3765,3767,3769,3772,3774,3776],{"class":235,"line":538},[233,3750,310],{"class":297},[233,3752,301],{"class":243},[233,3754,1932],{"class":285},[233,3756,1935],{"class":247},[233,3758,698],{"class":243},[233,3760,701],{"class":247},[233,3762,698],{"class":243},[233,3764,3230],{"class":247},[233,3766,709],{"class":243},[233,3768,257],{"class":243},[233,3770,3771],{"class":260},"3000",[233,3773,264],{"class":243},[233,3775,365],{"class":247},[233,3777,319],{"class":243},[233,3779,3780],{"class":235,"line":548},[233,3781,454],{"class":247},[233,3783,3784,3786,3788,3790,3792,3794,3796],{"class":235,"line":575},[233,3785,464],{"class":297},[233,3787,301],{"class":243},[233,3789,3351],{"class":247},[233,3791,3400],{"class":243},[233,3793,470],{"class":469},[233,3795,3409],{"class":243},[233,3797,304],{"class":243},[233,3799,3800,3802,3804,3806,3809,3811],{"class":235,"line":591},[233,3801,492],{"class":297},[233,3803,301],{"class":243},[233,3805,257],{"class":243},[233,3807,3808],{"class":260},".\u002Fcerts\u002Fprivkey.pem",[233,3810,264],{"class":243},[233,3812,319],{"class":243},[233,3814,3815,3817,3819,3821,3824],{"class":235,"line":606},[233,3816,509],{"class":297},[233,3818,301],{"class":243},[233,3820,257],{"class":243},[233,3822,3823],{"class":260},".\u002Fcerts\u002Ffullchain.pem",[233,3825,335],{"class":243},[233,3827,3828],{"class":235,"line":620},[233,3829,524],{"class":243},[233,3831,3832],{"class":235,"line":626},[233,3833,454],{"class":247},[233,3835,3836,3838,3840],{"class":235,"line":632},[233,3837,541],{"class":297},[233,3839,301],{"class":243},[233,3841,304],{"class":243},[233,3843,3844,3846,3848,3850,3852,3854,3856,3858,3860,3863,3865,3867],{"class":235,"line":1141},[233,3845,551],{"class":297},[233,3847,301],{"class":243},[233,3849,556],{"class":247},[233,3851,264],{"class":243},[233,3853,561],{"class":260},[233,3855,264],{"class":243},[233,3857,569],{"class":243},[233,3859,257],{"class":243},[233,3861,3862],{"class":260},"uploads",[233,3864,264],{"class":243},[233,3866,566],{"class":247},[233,3868,319],{"class":243},[233,3870,3871,3873,3875,3877,3879,3882,3884,3887,3889],{"class":235,"line":1146},[233,3872,578],{"class":297},[233,3874,301],{"class":243},[233,3876,3351],{"class":247},[233,3878,3400],{"class":243},[233,3880,3881],{"class":315}," 0",[233,3883,3409],{"class":243},[233,3885,3886],{"class":315}," 86400",[233,3888,569],{"class":243},[233,3890,3891],{"class":424},"  \u002F\u002F No cache in dev, 1 day in prod\n",[233,3893,3894,3896,3898,3900,3902],{"class":235,"line":1151},[233,3895,594],{"class":297},[233,3897,301],{"class":243},[233,3899,3426],{"class":243},[233,3901,3429],{"class":247},[233,3903,319],{"class":243},[233,3905,3906,3908,3910],{"class":235,"line":1157},[233,3907,609],{"class":297},[233,3909,301],{"class":243},[233,3911,3912],{"class":469}," true\n",[233,3914,3915],{"class":235,"line":1174},[233,3916,623],{"class":243},[233,3918,3919],{"class":235,"line":1179},[233,3920,341],{"class":243},[233,3922,3923],{"class":235,"line":1185},[233,3924,1470],{"class":247},[233,3926,3927],{"class":235,"line":1196},[233,3928,3929],{"class":424},"  \u002F\u002F Runtime configuration\n",[233,3931,3932,3934,3936],{"class":235,"line":1202},[233,3933,667],{"class":297},[233,3935,301],{"class":243},[233,3937,304],{"class":243},[233,3939,3940,3942,3944],{"class":235,"line":1208},[233,3941,681],{"class":297},[233,3943,301],{"class":243},[233,3945,304],{"class":243},[233,3947,3948,3950,3952,3954,3956,3958,3960,3962,3964,3966,3969,3971],{"class":235,"line":1213},[233,3949,690],{"class":297},[233,3951,301],{"class":243},[233,3953,695],{"class":247},[233,3955,698],{"class":243},[233,3957,701],{"class":247},[233,3959,698],{"class":243},[233,3961,706],{"class":247},[233,3963,709],{"class":243},[233,3965,257],{"class":243},[233,3967,3968],{"class":260},"dev-secret",[233,3970,264],{"class":243},[233,3972,319],{"class":243},[233,3974,3975,3977,3979,3981,3984,3986],{"class":235,"line":3064},[233,3976,723],{"class":297},[233,3978,301],{"class":243},[233,3980,257],{"class":243},[233,3982,3983],{"class":260},"app_session",[233,3985,264],{"class":243},[233,3987,319],{"class":243},[233,3989,3991,3993,3995,3997,3999,4001,4003,4005,4007,4010,4012,4014,4016,4018,4021],{"class":235,"line":3990},36,[233,3992,739],{"class":297},[233,3994,301],{"class":243},[233,3996,744],{"class":315},[233,3998,747],{"class":243},[233,4000,744],{"class":315},[233,4002,747],{"class":243},[233,4004,754],{"class":315},[233,4006,747],{"class":243},[233,4008,4009],{"class":247}," (isDev ",[233,4011,3400],{"class":243},[233,4013,759],{"class":315},[233,4015,3409],{"class":243},[233,4017,3318],{"class":315},[233,4019,4020],{"class":247},")  ",[233,4022,4023],{"class":424},"\u002F\u002F 7 days dev, 30 days prod\n",[233,4025,4027],{"class":235,"line":4026},37,[233,4028,524],{"class":243},[233,4030,4032],{"class":235,"line":4031},38,[233,4033,454],{"class":247},[233,4035,4037],{"class":235,"line":4036},39,[233,4038,4039],{"class":424},"    \u002F\u002F Custom app config\n",[233,4041,4043,4045,4047],{"class":235,"line":4042},40,[233,4044,780],{"class":297},[233,4046,301],{"class":243},[233,4048,304],{"class":243},[233,4050,4052,4054,4056,4058,4060,4062,4064,4066,4068,4070,4072,4074],{"class":235,"line":4051},41,[233,4053,789],{"class":297},[233,4055,301],{"class":243},[233,4057,695],{"class":247},[233,4059,698],{"class":243},[233,4061,701],{"class":247},[233,4063,698],{"class":243},[233,4065,1913],{"class":247},[233,4067,709],{"class":243},[233,4069,257],{"class":243},[233,4071,332],{"class":260},[233,4073,264],{"class":243},[233,4075,319],{"class":243},[233,4077,4079,4081,4083,4085,4087,4089,4091,4093,4095,4097,4099,4101,4103,4105],{"class":235,"line":4078},42,[233,4080,804],{"class":297},[233,4082,301],{"class":243},[233,4084,1932],{"class":285},[233,4086,1935],{"class":247},[233,4088,698],{"class":243},[233,4090,701],{"class":247},[233,4092,698],{"class":243},[233,4094,1944],{"class":247},[233,4096,709],{"class":243},[233,4098,257],{"class":243},[233,4100,1951],{"class":260},[233,4102,264],{"class":243},[233,4104,365],{"class":247},[233,4106,319],{"class":243},[233,4108,4110,4112,4114,4116,4118,4120,4122,4124,4126,4128,4130,4132],{"class":235,"line":4109},43,[233,4111,723],{"class":297},[233,4113,301],{"class":243},[233,4115,695],{"class":247},[233,4117,698],{"class":243},[233,4119,701],{"class":247},[233,4121,698],{"class":243},[233,4123,1974],{"class":247},[233,4125,709],{"class":243},[233,4127,257],{"class":243},[233,4129,822],{"class":260},[233,4131,264],{"class":243},[233,4133,319],{"class":243},[233,4135,4137,4140,4142,4144],{"class":235,"line":4136},44,[233,4138,4139],{"class":297},"      ssl",[233,4141,301],{"class":243},[233,4143,3426],{"class":243},[233,4145,4146],{"class":247},"isDev\n",[233,4148,4150],{"class":235,"line":4149},45,[233,4151,524],{"class":243},[233,4153,4155],{"class":235,"line":4154},46,[233,4156,454],{"class":247},[233,4158,4160,4163,4165],{"class":235,"line":4159},47,[233,4161,4162],{"class":297},"    redis",[233,4164,301],{"class":243},[233,4166,304],{"class":243},[233,4168,4170,4172,4174,4176,4178,4180,4182,4185,4187,4189,4191,4193],{"class":235,"line":4169},48,[233,4171,789],{"class":297},[233,4173,301],{"class":243},[233,4175,695],{"class":247},[233,4177,698],{"class":243},[233,4179,701],{"class":247},[233,4181,698],{"class":243},[233,4183,4184],{"class":247},"REDIS_HOST ",[233,4186,709],{"class":243},[233,4188,257],{"class":243},[233,4190,332],{"class":260},[233,4192,264],{"class":243},[233,4194,319],{"class":243},[233,4196,4198,4200,4202,4204,4206,4208,4210,4212,4215,4217,4219,4222,4224],{"class":235,"line":4197},49,[233,4199,804],{"class":297},[233,4201,301],{"class":243},[233,4203,1932],{"class":285},[233,4205,1935],{"class":247},[233,4207,698],{"class":243},[233,4209,701],{"class":247},[233,4211,698],{"class":243},[233,4213,4214],{"class":247},"REDIS_PORT ",[233,4216,709],{"class":243},[233,4218,257],{"class":243},[233,4220,4221],{"class":260},"6379",[233,4223,264],{"class":243},[233,4225,1138],{"class":247},[233,4227,4229],{"class":235,"line":4228},50,[233,4230,524],{"class":243},[233,4232,4234],{"class":235,"line":4233},51,[233,4235,454],{"class":247},[233,4237,4239,4241,4243],{"class":235,"line":4238},52,[233,4240,833],{"class":297},[233,4242,301],{"class":243},[233,4244,304],{"class":243},[233,4246,4248,4250,4252,4254,4256,4258,4260,4262,4264,4266,4268,4270],{"class":235,"line":4247},53,[233,4249,842],{"class":297},[233,4251,301],{"class":243},[233,4253,695],{"class":247},[233,4255,698],{"class":243},[233,4257,701],{"class":247},[233,4259,698],{"class":243},[233,4261,2011],{"class":247},[233,4263,709],{"class":243},[233,4265,257],{"class":243},[233,4267,849],{"class":260},[233,4269,264],{"class":243},[233,4271,319],{"class":243},[233,4273,4275,4277,4279,4282],{"class":235,"line":4274},54,[233,4276,858],{"class":297},[233,4278,301],{"class":243},[233,4280,4281],{"class":315}," 5000",[233,4283,319],{"class":243},[233,4285,4287,4290,4292],{"class":235,"line":4286},55,[233,4288,4289],{"class":297},"      retries",[233,4291,301],{"class":243},[233,4293,4294],{"class":315}," 3\n",[233,4296,4298],{"class":235,"line":4297},56,[233,4299,524],{"class":243},[233,4301,4303],{"class":235,"line":4302},57,[233,4304,454],{"class":247},[233,4306,4308,4311,4313],{"class":235,"line":4307},58,[233,4309,4310],{"class":297},"    features",[233,4312,301],{"class":243},[233,4314,304],{"class":243},[233,4316,4318,4321,4323,4325],{"class":235,"line":4317},59,[233,4319,4320],{"class":297},"      enableWebSockets",[233,4322,301],{"class":243},[233,4324,614],{"class":469},[233,4326,319],{"class":243},[233,4328,4330,4333,4335,4337],{"class":235,"line":4329},60,[233,4331,4332],{"class":297},"      enableFileUploads",[233,4334,301],{"class":243},[233,4336,614],{"class":469},[233,4338,319],{"class":243},[233,4340,4342,4345,4347,4350,4352,4355,4357,4359],{"class":235,"line":4341},61,[233,4343,4344],{"class":297},"      maxUploadSize",[233,4346,301],{"class":243},[233,4348,4349],{"class":315}," 10",[233,4351,747],{"class":243},[233,4353,4354],{"class":315}," 1024",[233,4356,747],{"class":243},[233,4358,4354],{"class":315},[233,4360,4361],{"class":424},"  \u002F\u002F 10MB\n",[233,4363,4365],{"class":235,"line":4364},62,[233,4366,623],{"class":243},[233,4368,4370],{"class":235,"line":4369},63,[233,4371,341],{"class":243},[233,4373,4375],{"class":235,"line":4374},64,[233,4376,1470],{"class":247},[233,4378,4380],{"class":235,"line":4379},65,[233,4381,4382],{"class":424},"  \u002F\u002F Build config (for vercube CLI)\n",[233,4384,4386,4388,4390],{"class":235,"line":4385},66,[233,4387,908],{"class":297},[233,4389,301],{"class":243},[233,4391,304],{"class":243},[233,4393,4395,4397,4399,4401,4403,4405,4407],{"class":235,"line":4394},67,[233,4396,922],{"class":297},[233,4398,301],{"class":243},[233,4400,695],{"class":247},[233,4402,698],{"class":243},[233,4404,931],{"class":285},[233,4406,934],{"class":247},[233,4408,319],{"class":243},[233,4410,4412,4414,4416,4418,4420,4422],{"class":235,"line":4411},68,[233,4413,950],{"class":297},[233,4415,301],{"class":243},[233,4417,257],{"class":243},[233,4419,957],{"class":260},[233,4421,264],{"class":243},[233,4423,319],{"class":243},[233,4425,4427,4429,4431],{"class":235,"line":4426},69,[233,4428,1007],{"class":297},[233,4430,301],{"class":243},[233,4432,304],{"class":243},[233,4434,4436,4438,4440,4442,4444,4446],{"class":235,"line":4435},70,[233,4437,1016],{"class":297},[233,4439,301],{"class":243},[233,4441,257],{"class":243},[233,4443,1023],{"class":260},[233,4445,264],{"class":243},[233,4447,319],{"class":243},[233,4449,4451,4453,4455,4457,4459],{"class":235,"line":4450},71,[233,4452,1035],{"class":297},[233,4454,301],{"class":243},[233,4456,257],{"class":243},[233,4458,561],{"class":260},[233,4460,335],{"class":243},[233,4462,4464],{"class":235,"line":4463},72,[233,4465,524],{"class":243},[233,4467,4469,4471,4473,4475],{"class":235,"line":4468},73,[233,4470,1080],{"class":297},[233,4472,301],{"class":243},[233,4474,614],{"class":469},[233,4476,319],{"class":243},[233,4478,4480,4482,4484],{"class":235,"line":4479},74,[233,4481,1103],{"class":297},[233,4483,301],{"class":243},[233,4485,304],{"class":243},[233,4487,4489,4491,4494,4496,4498,4500,4502,4504,4506,4509,4512,4514,4516,4519],{"class":235,"line":4488},75,[233,4490,1112],{"class":243},[233,4492,4493],{"class":297},"process.env.BUILD_TIME",[233,4495,264],{"class":243},[233,4497,301],{"class":243},[233,4499,1122],{"class":247},[233,4501,698],{"class":243},[233,4503,1127],{"class":285},[233,4505,288],{"class":247},[233,4507,4508],{"class":243},"new",[233,4510,4511],{"class":285}," Date",[233,4513,934],{"class":247},[233,4515,698],{"class":243},[233,4517,4518],{"class":285},"toISOString",[233,4520,4521],{"class":247},"())\n",[233,4523,4525],{"class":235,"line":4524},76,[233,4526,623],{"class":243},[233,4528,4530],{"class":235,"line":4529},77,[233,4531,629],{"class":243},[233,4533,4535,4537,4539],{"class":235,"line":4534},78,[233,4536,362],{"class":243},[233,4538,365],{"class":247},[233,4540,267],{"class":243},[213,4542,4544],{"id":4543},"troubleshooting","Troubleshooting",[204,4546,4547],{},[4548,4549,4550],"strong",{},"Config is undefined at runtime",[204,4552,4553,4554,4556],{},"Make sure you're injecting ",[208,4555,1369],{},", not trying to import the config file directly:",[224,4558,4560],{"className":226,"code":4559,"language":228,"meta":229,"style":229},"\u002F\u002F ❌ Wrong - config file can't be imported\nimport config from '.\u002Fvercube.config';\n\n\u002F\u002F ✅ Correct - inject RuntimeConfig\n@Inject(RuntimeConfig)\nprivate config!: RuntimeConfig;\n",[208,4561,4562,4567,4586,4590,4595,4603],{"__ignoreMap":229},[233,4563,4564],{"class":235,"line":236},[233,4565,4566],{"class":424},"\u002F\u002F ❌ Wrong - config file can't be imported\n",[233,4568,4569,4571,4574,4577,4579,4582,4584],{"class":235,"line":270},[233,4570,240],{"class":239},[233,4572,4573],{"class":247}," config ",[233,4575,4576],{"class":239},"from",[233,4578,257],{"class":243},[233,4580,4581],{"class":260},".\u002Fvercube.config",[233,4583,264],{"class":243},[233,4585,267],{"class":243},[233,4587,4588],{"class":235,"line":276},[233,4589,273],{"emptyLinePlaceholder":56},[233,4591,4592],{"class":235,"line":294},[233,4593,4594],{"class":424},"\u002F\u002F ✅ Correct - inject RuntimeConfig\n",[233,4596,4597,4599,4601],{"class":235,"line":307},[233,4598,1437],{"class":243},[233,4600,1478],{"class":285},[233,4602,1481],{"class":247},[233,4604,4605,4608,4610,4613],{"class":235,"line":322},[233,4606,4607],{"class":247},"private config",[233,4609,2195],{"class":243},[233,4611,4612],{"class":247},": RuntimeConfig",[233,4614,267],{"class":243},[204,4616,4617],{},[4548,4618,4619],{},"TypeScript errors with custom config",[204,4621,4622,4623,301],{},"Make sure you're passing your type to ",[208,4624,373],{},[224,4626,4628],{"className":226,"code":4627,"language":228,"meta":229,"style":229},"\u002F\u002F ❌ Missing type parameter\nexport default defineConfig({\n  runtime: {\n    myCustomConfig: { ... }  \u002F\u002F TypeScript error!\n  }\n});\n\n\u002F\u002F ✅ With type parameter\nexport default defineConfig\u003CMyConfig>({\n  runtime: {\n    myCustomConfig: { ... }  \u002F\u002F Works!\n  }\n});\n",[208,4629,4630,4635,4647,4655,4672,4676,4684,4688,4693,4712,4720,4735,4739],{"__ignoreMap":229},[233,4631,4632],{"class":235,"line":236},[233,4633,4634],{"class":424},"\u002F\u002F ❌ Missing type parameter\n",[233,4636,4637,4639,4641,4643,4645],{"class":235,"line":270},[233,4638,279],{"class":239},[233,4640,282],{"class":239},[233,4642,248],{"class":285},[233,4644,288],{"class":247},[233,4646,291],{"class":243},[233,4648,4649,4651,4653],{"class":235,"line":276},[233,4650,667],{"class":297},[233,4652,301],{"class":243},[233,4654,304],{"class":243},[233,4656,4657,4660,4662,4664,4667,4669],{"class":235,"line":294},[233,4658,4659],{"class":297},"    myCustomConfig",[233,4661,301],{"class":243},[233,4663,244],{"class":243},[233,4665,4666],{"class":243}," ...",[233,4668,251],{"class":243},[233,4670,4671],{"class":424},"  \u002F\u002F TypeScript error!\n",[233,4673,4674],{"class":235,"line":307},[233,4675,629],{"class":243},[233,4677,4678,4680,4682],{"class":235,"line":322},[233,4679,362],{"class":243},[233,4681,365],{"class":247},[233,4683,267],{"class":243},[233,4685,4686],{"class":235,"line":338},[233,4687,273],{"emptyLinePlaceholder":56},[233,4689,4690],{"class":235,"line":344},[233,4691,4692],{"class":424},"\u002F\u002F ✅ With type parameter\n",[233,4694,4695,4697,4699,4701,4703,4706,4708,4710],{"class":235,"line":359},[233,4696,279],{"class":239},[233,4698,282],{"class":239},[233,4700,248],{"class":285},[233,4702,1803],{"class":243},[233,4704,4705],{"class":1462},"MyConfig",[233,4707,1809],{"class":243},[233,4709,288],{"class":247},[233,4711,291],{"class":243},[233,4713,4714,4716,4718],{"class":235,"line":480},[233,4715,667],{"class":297},[233,4717,301],{"class":243},[233,4719,304],{"class":243},[233,4721,4722,4724,4726,4728,4730,4732],{"class":235,"line":489},[233,4723,4659],{"class":297},[233,4725,301],{"class":243},[233,4727,244],{"class":243},[233,4729,4666],{"class":243},[233,4731,251],{"class":243},[233,4733,4734],{"class":424},"  \u002F\u002F Works!\n",[233,4736,4737],{"class":235,"line":506},[233,4738,629],{"class":243},[233,4740,4741,4743,4745],{"class":235,"line":521},[233,4742,362],{"class":243},[233,4744,365],{"class":247},[233,4746,267],{"class":243},[204,4748,4749],{},[4548,4750,4751],{},"Environment variables not loading",[204,4753,4754,4755,4757],{},"Check that your ",[208,4756,2319],{}," file is in the project root and that dotenv loading is enabled (it is by default).",[4759,4760,4761],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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}",{"title":229,"searchDepth":236,"depth":270,"links":4763},[4764,4765,4772,4773,4778,4783,4784,4785,4786],{"id":215,"depth":270,"text":216},{"id":385,"depth":270,"text":386,"children":4766},[4767,4768,4769,4770,4771],{"id":390,"depth":276,"text":391},{"id":641,"depth":276,"text":642},{"id":882,"depth":276,"text":883},{"id":1222,"depth":276,"text":1223},{"id":1272,"depth":276,"text":1273},{"id":1362,"depth":270,"text":1363},{"id":1623,"depth":270,"text":1624,"children":4774},[4775,4776,4777],{"id":1630,"depth":276,"text":1631},{"id":1738,"depth":276,"text":1739},{"id":2048,"depth":276,"text":2049},{"id":2312,"depth":270,"text":2313,"children":4779},[4780,4781,4782],{"id":2330,"depth":276,"text":2331},{"id":2538,"depth":276,"text":2539},{"id":2640,"depth":276,"text":2641},{"id":2692,"depth":270,"text":2693},{"id":3072,"depth":270,"text":3073},{"id":3531,"depth":270,"text":3532},{"id":4543,"depth":270,"text":4544},"Configure your Vercube application","md",null,{},{"title":33,"description":4787},"0jlMNyNGAGMXTcqVCUXRpuqrR0jrTVbuVWgcqO3QHv8",[4794,4796],{"title":22,"path":23,"stem":24,"description":4795,"children":-1},"Explore example Vercube applications to learn common patterns and best practices.",{"title":37,"path":38,"stem":39,"description":4797,"children":-1},"Understanding and using the Dependency Injection container in Vercube",1775552780365]