[{"data":1,"prerenderedAt":2233},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fcore-concepts\u002Fconfiguration":176,"\u002Fdocs\u002Fcore-concepts\u002Fconfiguration-surround":2228},[4,21,86,158],{"title":5,"path":6,"stem":7,"children":8,"status":11,"icon":20},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[9,12,16],{"title":10,"path":6,"stem":7,"status":11},"Introduction",null,{"title":13,"path":14,"stem":15,"status":11},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","1.docs\u002F1.getting-started\u002F2.installation",{"title":17,"path":18,"stem":19,"status":11},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","1.docs\u002F1.getting-started\u002F3.quick-start",false,{"title":22,"path":23,"stem":24,"children":25,"status":11,"icon":20},"Core Concepts","\u002Fdocs\u002Fcore-concepts","1.docs\u002F2.core-concepts\u002F1.index",[26,28,32,36,46,50,54,58,62,66,70,74,78,82],{"title":27,"path":23,"stem":24,"status":11},"Overview",{"title":29,"path":30,"stem":31,"status":11},"Response","\u002Fdocs\u002Fcore-concepts\u002Fresponse","1.docs\u002F2.core-concepts\u002F10.response",{"title":33,"path":34,"stem":35,"status":11},"Testing","\u002Fdocs\u002Fcore-concepts\u002Ftesting","1.docs\u002F2.core-concepts\u002F12.testing",{"title":37,"path":38,"stem":39,"children":40,"status":11,"icon":20,"defaultOpen":20},"Decorators","\u002Fdocs\u002Fcore-concepts\u002Fdecorators","1.docs\u002F2.core-concepts\u002F13.decorators\u002F1.index",[41,42],{"title":27,"path":38,"stem":39,"status":11},{"title":43,"path":44,"stem":45,"status":11},"Custom","\u002Fdocs\u002Fcore-concepts\u002Fdecorators\u002Fcustom","1.docs\u002F2.core-concepts\u002F13.decorators\u002F2.custom",{"title":47,"path":48,"stem":49,"status":11},"Discovery Service","\u002Fdocs\u002Fcore-concepts\u002Fdiscovery","1.docs\u002F2.core-concepts\u002F14.discovery",{"title":51,"path":52,"stem":53,"status":11},"Application Lifecycle","\u002Fdocs\u002Fcore-concepts\u002Fapp-lifecycle","1.docs\u002F2.core-concepts\u002F15.app-lifecycle",{"title":55,"path":56,"stem":57,"status":11},"Controllers","\u002Fdocs\u002Fcore-concepts\u002Fcontrollers","1.docs\u002F2.core-concepts\u002F2.controllers",{"title":59,"path":60,"stem":61,"status":11},"Routing","\u002Fdocs\u002Fcore-concepts\u002Frouting","1.docs\u002F2.core-concepts\u002F3.routing",{"title":63,"path":64,"stem":65,"status":11},"Providers","\u002Fdocs\u002Fcore-concepts\u002Fproviders","1.docs\u002F2.core-concepts\u002F4.providers",{"title":67,"path":68,"stem":69,"status":11},"Modules","\u002Fdocs\u002Fcore-concepts\u002Fmodules","1.docs\u002F2.core-concepts\u002F5.modules",{"title":71,"path":72,"stem":73,"status":11},"Configuration","\u002Fdocs\u002Fcore-concepts\u002Fconfiguration","1.docs\u002F2.core-concepts\u002F6.configuration",{"title":75,"path":76,"stem":77,"status":11},"Middleware","\u002Fdocs\u002Fcore-concepts\u002Fmiddleware","1.docs\u002F2.core-concepts\u002F7.middleware",{"title":79,"path":80,"stem":81,"status":11},"Guards","\u002Fdocs\u002Fcore-concepts\u002Fguards","1.docs\u002F2.core-concepts\u002F8.guards",{"title":83,"path":84,"stem":85,"status":11},"Exceptions","\u002Fdocs\u002Fcore-concepts\u002Fexceptions","1.docs\u002F2.core-concepts\u002F9.exceptions",{"title":87,"path":88,"stem":89,"children":90,"status":11,"icon":20},"Packages","\u002Fdocs\u002Fpackages","1.docs\u002F3.packages\u002F1.index",[91,92,97,108,112,130,134,138,142,146,150,154],{"title":27,"path":88,"stem":89,"status":11},{"title":93,"path":94,"stem":95,"status":96},"CLI","\u002Fdocs\u002Fpackages\u002Fcli","1.docs\u002F3.packages\u002F10.cli","experimental",{"title":98,"path":99,"stem":100,"children":101,"status":11,"icon":20,"defaultOpen":20},"Events","\u002Fdocs\u002Fpackages\u002Fmessaging","1.docs\u002F3.packages\u002F11.messaging\u002F1.index",[102,104],{"title":27,"path":99,"stem":100,"status":103},"beta",{"title":105,"path":106,"stem":107,"status":96},"Redis","\u002Fdocs\u002Fpackages\u002Fmessaging\u002Fredis","1.docs\u002F3.packages\u002F11.messaging\u002F2.redis",{"title":109,"path":110,"stem":111,"status":103},"Serve Static","\u002Fdocs\u002Fpackages\u002Fserve-static","1.docs\u002F3.packages\u002F12.serve-static",{"title":113,"path":114,"stem":115,"children":116,"status":11,"icon":20,"defaultOpen":20},"Auth","\u002Fdocs\u002Fpackages\u002Fauth","1.docs\u002F3.packages\u002F2.auth\u002F1.index",[117,118,122,126],{"title":27,"path":114,"stem":115,"status":103},{"title":119,"path":120,"stem":121,"status":103},"JWT Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Fjwt","1.docs\u002F3.packages\u002F2.auth\u002F2.jwt",{"title":123,"path":124,"stem":125,"status":103},"Local Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Flocal","1.docs\u002F3.packages\u002F2.auth\u002F3.local",{"title":127,"path":128,"stem":129,"status":96},"OAuth2 Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Foauth2","1.docs\u002F3.packages\u002F2.auth\u002F4.oauth2",{"title":131,"path":132,"stem":133,"status":103},"JWT","\u002Fdocs\u002Fpackages\u002Fjwt","1.docs\u002F3.packages\u002F3.jwt",{"title":135,"path":136,"stem":137,"status":103},"Drizzle","\u002Fdocs\u002Fpackages\u002Fdrizzle","1.docs\u002F3.packages\u002F4.drizzle",{"title":139,"path":140,"stem":141,"status":103},"Papr","\u002Fdocs\u002Fpackages\u002Fpapr","1.docs\u002F3.packages\u002F5.papr",{"title":143,"path":144,"stem":145,"status":103},"Mongoose","\u002Fdocs\u002Fpackages\u002Fmongoose","1.docs\u002F3.packages\u002F6.mongoose",{"title":147,"path":148,"stem":149,"status":103},"Swagger","\u002Fdocs\u002Fpackages\u002Fswagger","1.docs\u002F3.packages\u002F7.swagger",{"title":151,"path":152,"stem":153,"status":103},"Node Server","\u002Fdocs\u002Fpackages\u002Fnode-server","1.docs\u002F3.packages\u002F8.node-server",{"title":155,"path":156,"stem":157,"status":103},"uWS Server","\u002Fdocs\u002Fpackages\u002Fuws-server","1.docs\u002F3.packages\u002F9.uws-server",{"title":159,"path":160,"stem":161,"children":162,"status":11,"icon":20},"Roadmap","\u002Fdocs\u002Froadmap","1.docs\u002F4.roadmap\u002F1.index",[163,164,168,172],{"title":27,"path":160,"stem":161,"status":11},{"title":165,"path":166,"stem":167,"status":11},"Short term (0-3 months)","\u002Fdocs\u002Froadmap\u002Fshort-term","1.docs\u002F4.roadmap\u002F2.short-term",{"title":169,"path":170,"stem":171,"status":11},"Mid term (3-9 months)","\u002Fdocs\u002Froadmap\u002Fmid-term","1.docs\u002F4.roadmap\u002F3.mid-term",{"title":173,"path":174,"stem":175,"status":11},"Long term (9-12+ months)","\u002Fdocs\u002Froadmap\u002Flong-term","1.docs\u002F4.roadmap\u002F4.long-term",{"id":177,"title":71,"body":178,"description":2223,"extension":2224,"meta":2225,"navigation":284,"path":72,"seo":2226,"status":11,"stem":73,"__hash__":2227},"docs\u002F1.docs\u002F2.core-concepts\u002F6.configuration.md",{"type":179,"value":180,"toc":2209},"minimark",[181,190,195,519,529,533,540,729,734,793,797,800,1003,1009,1013,1022,1119,1122,1126,1133,1282,1299,1303,1317,1321,1331,1703,1707,1714,1993,1997,2000,2205],[182,183,184,185,189],"p",{},"MiiaJS provides a ",[186,187,188],"code",{},"ConfigModule"," for loading and validating environment variables with any ZodLike schema.",[191,192,194],"h2",{"id":193},"setup","Setup",[196,197,202],"pre",{"className":198,"code":199,"language":200,"meta":201,"style":201},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Module } from '@miiajs\u002Fcore'\nimport { ConfigModule } from '@miiajs\u002Fconfig'\nimport { z } from 'zod'\n\nconst EnvSchema = z.object({\n  PORT: z.string().default('3000'),\n  DATABASE_URL: z.string(),\n  JWT_SECRET: z.string(),\n  DEBUG: z.string().default('false'),\n})\n\n@Module({\n  imports: [\n    ConfigModule.configure({ schema: EnvSchema }),\n  ],\n})\nclass AppModule {}\n","typescript","",[186,203,204,237,258,279,286,314,355,373,391,424,433,438,451,462,491,499,506],{"__ignoreMap":201},[205,206,209,213,217,221,224,227,230,234],"span",{"class":207,"line":208},"line",1,[205,210,212],{"class":211},"s7zQu","import",[205,214,216],{"class":215},"sMK4o"," {",[205,218,220],{"class":219},"sTEyZ"," Module",[205,222,223],{"class":215}," }",[205,225,226],{"class":211}," from",[205,228,229],{"class":215}," '",[205,231,233],{"class":232},"sfazB","@miiajs\u002Fcore",[205,235,236],{"class":215},"'\n",[205,238,240,242,244,247,249,251,253,256],{"class":207,"line":239},2,[205,241,212],{"class":211},[205,243,216],{"class":215},[205,245,246],{"class":219}," ConfigModule",[205,248,223],{"class":215},[205,250,226],{"class":211},[205,252,229],{"class":215},[205,254,255],{"class":232},"@miiajs\u002Fconfig",[205,257,236],{"class":215},[205,259,261,263,265,268,270,272,274,277],{"class":207,"line":260},3,[205,262,212],{"class":211},[205,264,216],{"class":215},[205,266,267],{"class":219}," z",[205,269,223],{"class":215},[205,271,226],{"class":211},[205,273,229],{"class":215},[205,275,276],{"class":232},"zod",[205,278,236],{"class":215},[205,280,282],{"class":207,"line":281},4,[205,283,285],{"emptyLinePlaceholder":284},true,"\n",[205,287,289,293,296,299,301,304,308,311],{"class":207,"line":288},5,[205,290,292],{"class":291},"spNyl","const",[205,294,295],{"class":219}," EnvSchema ",[205,297,298],{"class":215},"=",[205,300,267],{"class":219},[205,302,303],{"class":215},".",[205,305,307],{"class":306},"s2Zo4","object",[205,309,310],{"class":219},"(",[205,312,313],{"class":215},"{\n",[205,315,317,321,324,326,328,331,334,336,339,341,344,347,349,352],{"class":207,"line":316},6,[205,318,320],{"class":319},"swJcz","  PORT",[205,322,323],{"class":215},":",[205,325,267],{"class":219},[205,327,303],{"class":215},[205,329,330],{"class":306},"string",[205,332,333],{"class":219},"()",[205,335,303],{"class":215},[205,337,338],{"class":306},"default",[205,340,310],{"class":219},[205,342,343],{"class":215},"'",[205,345,346],{"class":232},"3000",[205,348,343],{"class":215},[205,350,351],{"class":219},")",[205,353,354],{"class":215},",\n",[205,356,358,361,363,365,367,369,371],{"class":207,"line":357},7,[205,359,360],{"class":319},"  DATABASE_URL",[205,362,323],{"class":215},[205,364,267],{"class":219},[205,366,303],{"class":215},[205,368,330],{"class":306},[205,370,333],{"class":219},[205,372,354],{"class":215},[205,374,376,379,381,383,385,387,389],{"class":207,"line":375},8,[205,377,378],{"class":319},"  JWT_SECRET",[205,380,323],{"class":215},[205,382,267],{"class":219},[205,384,303],{"class":215},[205,386,330],{"class":306},[205,388,333],{"class":219},[205,390,354],{"class":215},[205,392,394,397,399,401,403,405,407,409,411,413,415,418,420,422],{"class":207,"line":393},9,[205,395,396],{"class":319},"  DEBUG",[205,398,323],{"class":215},[205,400,267],{"class":219},[205,402,303],{"class":215},[205,404,330],{"class":306},[205,406,333],{"class":219},[205,408,303],{"class":215},[205,410,338],{"class":306},[205,412,310],{"class":219},[205,414,343],{"class":215},[205,416,417],{"class":232},"false",[205,419,343],{"class":215},[205,421,351],{"class":219},[205,423,354],{"class":215},[205,425,427,430],{"class":207,"line":426},10,[205,428,429],{"class":215},"}",[205,431,432],{"class":219},")\n",[205,434,436],{"class":207,"line":435},11,[205,437,285],{"emptyLinePlaceholder":284},[205,439,441,444,447,449],{"class":207,"line":440},12,[205,442,443],{"class":215},"@",[205,445,446],{"class":306},"Module",[205,448,310],{"class":219},[205,450,313],{"class":215},[205,452,454,457,459],{"class":207,"line":453},13,[205,455,456],{"class":319},"  imports",[205,458,323],{"class":215},[205,460,461],{"class":219}," [\n",[205,463,465,468,470,473,475,478,481,483,485,487,489],{"class":207,"line":464},14,[205,466,467],{"class":219},"    ConfigModule",[205,469,303],{"class":215},[205,471,472],{"class":306},"configure",[205,474,310],{"class":219},[205,476,477],{"class":215},"{",[205,479,480],{"class":319}," schema",[205,482,323],{"class":215},[205,484,295],{"class":219},[205,486,429],{"class":215},[205,488,351],{"class":219},[205,490,354],{"class":215},[205,492,494,497],{"class":207,"line":493},15,[205,495,496],{"class":219},"  ]",[205,498,354],{"class":215},[205,500,502,504],{"class":207,"line":501},16,[205,503,429],{"class":215},[205,505,432],{"class":219},[205,507,509,512,516],{"class":207,"line":508},17,[205,510,511],{"class":291},"class",[205,513,515],{"class":514},"sBMFI"," AppModule",[205,517,518],{"class":215}," {}\n",[182,520,521,524,525,528],{},[186,522,523],{},"ConfigModule.configure()"," validates ",[186,526,527],{},"process.env"," against your schema at startup. If validation fails, the application throws with detailed error messages.",[191,530,532],{"id":531},"using-configservice","Using ConfigService",[182,534,535,536,539],{},"Inject ",[186,537,538],{},"ConfigService"," to access validated values:",[196,541,543],{"className":198,"code":542,"language":200,"meta":201,"style":201},"import { Injectable, inject } from '@miiajs\u002Fcore'\nimport { ConfigService } from '@miiajs\u002Fconfig'\n\n@Injectable()\nclass DatabaseService {\n  private configService = inject(ConfigService)\n\n  connect() {\n    const url = this.configService.getOrThrow('DATABASE_URL')\n    const port = this.configService.get('PORT') ?? '3000'\n    \u002F\u002F ...\n  }\n}\n",[186,544,545,570,589,593,603,613,629,633,642,674,713,719,724],{"__ignoreMap":201},[205,546,547,549,551,554,557,560,562,564,566,568],{"class":207,"line":208},[205,548,212],{"class":211},[205,550,216],{"class":215},[205,552,553],{"class":219}," Injectable",[205,555,556],{"class":215},",",[205,558,559],{"class":219}," inject",[205,561,223],{"class":215},[205,563,226],{"class":211},[205,565,229],{"class":215},[205,567,233],{"class":232},[205,569,236],{"class":215},[205,571,572,574,576,579,581,583,585,587],{"class":207,"line":239},[205,573,212],{"class":211},[205,575,216],{"class":215},[205,577,578],{"class":219}," ConfigService",[205,580,223],{"class":215},[205,582,226],{"class":211},[205,584,229],{"class":215},[205,586,255],{"class":232},[205,588,236],{"class":215},[205,590,591],{"class":207,"line":260},[205,592,285],{"emptyLinePlaceholder":284},[205,594,595,597,600],{"class":207,"line":281},[205,596,443],{"class":215},[205,598,599],{"class":306},"Injectable",[205,601,602],{"class":219},"()\n",[205,604,605,607,610],{"class":207,"line":288},[205,606,511],{"class":291},[205,608,609],{"class":514}," DatabaseService",[205,611,612],{"class":215}," {\n",[205,614,615,618,621,624,626],{"class":207,"line":316},[205,616,617],{"class":291},"  private",[205,619,620],{"class":319}," configService",[205,622,623],{"class":215}," =",[205,625,559],{"class":319},[205,627,628],{"class":219},"(ConfigService)\n",[205,630,631],{"class":207,"line":357},[205,632,285],{"emptyLinePlaceholder":284},[205,634,635,638,640],{"class":207,"line":375},[205,636,637],{"class":319},"  connect",[205,639,333],{"class":215},[205,641,612],{"class":215},[205,643,644,647,650,652,655,658,660,663,665,667,670,672],{"class":207,"line":393},[205,645,646],{"class":291},"    const",[205,648,649],{"class":219}," url",[205,651,623],{"class":215},[205,653,654],{"class":215}," this.",[205,656,657],{"class":219},"configService",[205,659,303],{"class":215},[205,661,662],{"class":306},"getOrThrow",[205,664,310],{"class":319},[205,666,343],{"class":215},[205,668,669],{"class":232},"DATABASE_URL",[205,671,343],{"class":215},[205,673,432],{"class":319},[205,675,676,678,681,683,685,687,689,692,694,696,699,701,704,707,709,711],{"class":207,"line":426},[205,677,646],{"class":291},[205,679,680],{"class":219}," port",[205,682,623],{"class":215},[205,684,654],{"class":215},[205,686,657],{"class":219},[205,688,303],{"class":215},[205,690,691],{"class":306},"get",[205,693,310],{"class":319},[205,695,343],{"class":215},[205,697,698],{"class":232},"PORT",[205,700,343],{"class":215},[205,702,703],{"class":319},") ",[205,705,706],{"class":215},"??",[205,708,229],{"class":215},[205,710,346],{"class":232},[205,712,236],{"class":215},[205,714,715],{"class":207,"line":435},[205,716,718],{"class":717},"sHwdD","    \u002F\u002F ...\n",[205,720,721],{"class":207,"line":440},[205,722,723],{"class":215},"  }\n",[205,725,726],{"class":207,"line":453},[205,727,728],{"class":215},"}\n",[730,731,733],"h3",{"id":732},"api","API",[735,736,737,753],"table",{},[738,739,740],"thead",{},[741,742,743,747,750],"tr",{},[744,745,746],"th",{},"Method",[744,748,749],{},"Returns",[744,751,752],{},"On missing key",[754,755,756,775],"tbody",{},[741,757,758,764,769],{},[759,760,761],"td",{},[186,762,763],{},"get(key)",[759,765,766],{},[186,767,768],{},"T[K] | undefined",[759,770,771,772],{},"Returns ",[186,773,774],{},"undefined",[741,776,777,782,787],{},[759,778,779],{},[186,780,781],{},"getOrThrow(key)",[759,783,784],{},[186,785,786],{},"T[K]",[759,788,789,790],{},"Throws ",[186,791,792],{},"Error",[191,794,796],{"id":795},"factory-configuration","Factory configuration",[182,798,799],{},"Use a factory function to resolve config from DI:",[196,801,803],{"className":198,"code":802,"language":200,"meta":201,"style":201},"import { DrizzleModule } from '@miiajs\u002Fdrizzle'\n\n@Module({\n  imports: [\n    ConfigModule.configure({ schema: EnvSchema }),\n    DrizzleModule.configure((resolve) => {\n      const config = resolve(ConfigService)\n      return {\n        dialect: 'postgres',\n        connection: { url: config.getOrThrow('DATABASE_URL') },\n      }\n    }),\n  ],\n})\nclass AppModule {}\n",[186,804,805,825,829,839,847,871,895,914,921,937,969,974,983,989,995],{"__ignoreMap":201},[205,806,807,809,811,814,816,818,820,823],{"class":207,"line":208},[205,808,212],{"class":211},[205,810,216],{"class":215},[205,812,813],{"class":219}," DrizzleModule",[205,815,223],{"class":215},[205,817,226],{"class":211},[205,819,229],{"class":215},[205,821,822],{"class":232},"@miiajs\u002Fdrizzle",[205,824,236],{"class":215},[205,826,827],{"class":207,"line":239},[205,828,285],{"emptyLinePlaceholder":284},[205,830,831,833,835,837],{"class":207,"line":260},[205,832,443],{"class":215},[205,834,446],{"class":306},[205,836,310],{"class":219},[205,838,313],{"class":215},[205,840,841,843,845],{"class":207,"line":281},[205,842,456],{"class":319},[205,844,323],{"class":215},[205,846,461],{"class":219},[205,848,849,851,853,855,857,859,861,863,865,867,869],{"class":207,"line":288},[205,850,467],{"class":219},[205,852,303],{"class":215},[205,854,472],{"class":306},[205,856,310],{"class":219},[205,858,477],{"class":215},[205,860,480],{"class":319},[205,862,323],{"class":215},[205,864,295],{"class":219},[205,866,429],{"class":215},[205,868,351],{"class":219},[205,870,354],{"class":215},[205,872,873,876,878,880,882,884,888,890,893],{"class":207,"line":316},[205,874,875],{"class":219},"    DrizzleModule",[205,877,303],{"class":215},[205,879,472],{"class":306},[205,881,310],{"class":219},[205,883,310],{"class":215},[205,885,887],{"class":886},"sHdIc","resolve",[205,889,351],{"class":215},[205,891,892],{"class":291}," =>",[205,894,612],{"class":215},[205,896,897,900,903,905,908,910,912],{"class":207,"line":357},[205,898,899],{"class":291},"      const",[205,901,902],{"class":219}," config",[205,904,623],{"class":215},[205,906,907],{"class":306}," resolve",[205,909,310],{"class":319},[205,911,538],{"class":219},[205,913,432],{"class":319},[205,915,916,919],{"class":207,"line":375},[205,917,918],{"class":211},"      return",[205,920,612],{"class":215},[205,922,923,926,928,930,933,935],{"class":207,"line":393},[205,924,925],{"class":319},"        dialect",[205,927,323],{"class":215},[205,929,229],{"class":215},[205,931,932],{"class":232},"postgres",[205,934,343],{"class":215},[205,936,354],{"class":215},[205,938,939,942,944,946,948,950,952,954,956,958,960,962,964,966],{"class":207,"line":426},[205,940,941],{"class":319},"        connection",[205,943,323],{"class":215},[205,945,216],{"class":215},[205,947,649],{"class":319},[205,949,323],{"class":215},[205,951,902],{"class":219},[205,953,303],{"class":215},[205,955,662],{"class":306},[205,957,310],{"class":319},[205,959,343],{"class":215},[205,961,669],{"class":232},[205,963,343],{"class":215},[205,965,703],{"class":319},[205,967,968],{"class":215},"},\n",[205,970,971],{"class":207,"line":435},[205,972,973],{"class":215},"      }\n",[205,975,976,979,981],{"class":207,"line":440},[205,977,978],{"class":215},"    }",[205,980,351],{"class":219},[205,982,354],{"class":215},[205,984,985,987],{"class":207,"line":453},[205,986,496],{"class":219},[205,988,354],{"class":215},[205,990,991,993],{"class":207,"line":464},[205,992,429],{"class":215},[205,994,432],{"class":219},[205,996,997,999,1001],{"class":207,"line":493},[205,998,511],{"class":291},[205,1000,515],{"class":514},[205,1002,518],{"class":215},[182,1004,1005,1006,1008],{},"The ",[186,1007,887],{}," function gives access to the DI container, allowing modules to depend on each other's configuration.",[191,1010,1012],{"id":1011},"custom-env-source","Custom env source",[182,1014,1015,1016,1018,1019,1021],{},"By default, ",[186,1017,188],{}," reads from ",[186,1020,527],{},". You can pass a custom source:",[196,1023,1025],{"className":198,"code":1024,"language":200,"meta":201,"style":201},"ConfigModule.configure({\n  schema: EnvSchema,\n  env: {\n    PORT: '8080',\n    DATABASE_URL: 'postgres:\u002F\u002Flocalhost:5432\u002Ftest',\n    JWT_SECRET: 'test-secret',\n  },\n})\n",[186,1026,1027,1039,1051,1060,1076,1092,1108,1113],{"__ignoreMap":201},[205,1028,1029,1031,1033,1035,1037],{"class":207,"line":208},[205,1030,188],{"class":219},[205,1032,303],{"class":215},[205,1034,472],{"class":306},[205,1036,310],{"class":219},[205,1038,313],{"class":215},[205,1040,1041,1044,1046,1049],{"class":207,"line":239},[205,1042,1043],{"class":319},"  schema",[205,1045,323],{"class":215},[205,1047,1048],{"class":219}," EnvSchema",[205,1050,354],{"class":215},[205,1052,1053,1056,1058],{"class":207,"line":260},[205,1054,1055],{"class":319},"  env",[205,1057,323],{"class":215},[205,1059,612],{"class":215},[205,1061,1062,1065,1067,1069,1072,1074],{"class":207,"line":281},[205,1063,1064],{"class":319},"    PORT",[205,1066,323],{"class":215},[205,1068,229],{"class":215},[205,1070,1071],{"class":232},"8080",[205,1073,343],{"class":215},[205,1075,354],{"class":215},[205,1077,1078,1081,1083,1085,1088,1090],{"class":207,"line":288},[205,1079,1080],{"class":319},"    DATABASE_URL",[205,1082,323],{"class":215},[205,1084,229],{"class":215},[205,1086,1087],{"class":232},"postgres:\u002F\u002Flocalhost:5432\u002Ftest",[205,1089,343],{"class":215},[205,1091,354],{"class":215},[205,1093,1094,1097,1099,1101,1104,1106],{"class":207,"line":316},[205,1095,1096],{"class":319},"    JWT_SECRET",[205,1098,323],{"class":215},[205,1100,229],{"class":215},[205,1102,1103],{"class":232},"test-secret",[205,1105,343],{"class":215},[205,1107,354],{"class":215},[205,1109,1110],{"class":207,"line":357},[205,1111,1112],{"class":215},"  },\n",[205,1114,1115,1117],{"class":207,"line":375},[205,1116,429],{"class":215},[205,1118,432],{"class":219},[182,1120,1121],{},"This is useful for testing or when loading from a custom source.",[191,1123,1125],{"id":1124},"schema-requirements","Schema requirements",[182,1127,1128,1129,1132],{},"The schema must implement a ",[186,1130,1131],{},"safeParse()"," method (ZodLike interface):",[196,1134,1136],{"className":198,"code":1135,"language":200,"meta":201,"style":201},"interface ZodLike\u003CT = any> {\n  safeParse(data: unknown):\n    | { success: true; data: T }\n    | { success: false; error: { issues: { message: string; path?: (string | number)[] }[] } }\n}\n",[186,1137,1138,1162,1180,1209,1278],{"__ignoreMap":201},[205,1139,1140,1143,1146,1149,1152,1154,1157,1160],{"class":207,"line":208},[205,1141,1142],{"class":291},"interface",[205,1144,1145],{"class":514}," ZodLike",[205,1147,1148],{"class":215},"\u003C",[205,1150,1151],{"class":514},"T",[205,1153,623],{"class":215},[205,1155,1156],{"class":514}," any",[205,1158,1159],{"class":215},">",[205,1161,612],{"class":215},[205,1163,1164,1167,1169,1172,1174,1177],{"class":207,"line":239},[205,1165,1166],{"class":319},"  safeParse",[205,1168,310],{"class":215},[205,1170,1171],{"class":886},"data",[205,1173,323],{"class":215},[205,1175,1176],{"class":514}," unknown",[205,1178,1179],{"class":215},"):\n",[205,1181,1182,1185,1187,1190,1192,1195,1198,1201,1203,1206],{"class":207,"line":260},[205,1183,1184],{"class":215},"    |",[205,1186,216],{"class":215},[205,1188,1189],{"class":319}," success",[205,1191,323],{"class":215},[205,1193,1194],{"class":514}," true",[205,1196,1197],{"class":215},";",[205,1199,1200],{"class":319}," data",[205,1202,323],{"class":215},[205,1204,1205],{"class":514}," T",[205,1207,1208],{"class":215}," }\n",[205,1210,1211,1213,1215,1217,1219,1223,1225,1228,1230,1232,1235,1237,1239,1242,1244,1247,1249,1252,1255,1258,1260,1263,1266,1269,1271,1274,1276],{"class":207,"line":281},[205,1212,1184],{"class":215},[205,1214,216],{"class":215},[205,1216,1189],{"class":514},[205,1218,323],{"class":215},[205,1220,1222],{"class":1221},"sfNiH"," false",[205,1224,1197],{"class":215},[205,1226,1227],{"class":514}," error",[205,1229,323],{"class":215},[205,1231,216],{"class":215},[205,1233,1234],{"class":514}," issues",[205,1236,323],{"class":215},[205,1238,216],{"class":215},[205,1240,1241],{"class":514}," message",[205,1243,323],{"class":215},[205,1245,1246],{"class":219}," string",[205,1248,1197],{"class":215},[205,1250,1251],{"class":219}," path",[205,1253,1254],{"class":215},"?:",[205,1256,1257],{"class":319}," (",[205,1259,330],{"class":219},[205,1261,1262],{"class":215}," |",[205,1264,1265],{"class":219}," number",[205,1267,1268],{"class":319},")[] ",[205,1270,429],{"class":215},[205,1272,1273],{"class":319},"[] ",[205,1275,429],{"class":215},[205,1277,1208],{"class":215},[205,1279,1280],{"class":207,"line":288},[205,1281,728],{"class":215},[182,1283,1284,1286,1287,1291,1292,1294,1295,1298],{},[186,1285,255],{}," does ",[1288,1289,1290],"strong",{},"not"," declare ",[186,1293,276],{}," as a peer dependency - bring your own validator. Any library or custom object that exposes a ",[186,1296,1297],{},"safeParse"," method matching the shape above works.",[191,1300,1302],{"id":1301},"using-non-zod-validators","Using non-Zod validators",[182,1304,1305,1312,1313,1316],{},[1306,1307,1311],"a",{"href":1308,"rel":1309},"https:\u002F\u002Fzod.dev",[1310],"nofollow","Zod"," implements ",[186,1314,1315],{},"ZodLike"," natively, but you can plug in any modern validator. The two most common alternatives:",[730,1318,1320],{"id":1319},"valibot","Valibot",[182,1322,1323,1324,1326,1327,1330],{},"Valibot's ",[186,1325,1297],{}," returns ",[186,1328,1329],{},"{ success, output, issues }"," - one tiny adapter:",[196,1332,1334],{"className":198,"code":1333,"language":200,"meta":201,"style":201},"import * as v from 'valibot'\nimport { ConfigModule } from '@miiajs\u002Fconfig'\n\nconst schema = v.object({\n  PORT: v.pipe(v.string(), v.transform(Number), v.number()),\n  DATABASE_URL: v.string(),\n})\n\nConfigModule.configure({\n  schema: {\n    safeParse: (data) => {\n      const r = v.safeParse(schema, data)\n      return r.success\n        ? { success: true, data: r.output }\n        : { success: false, error: { issues: r.issues.map((i) => ({ message: i.message, path: i.path?.map((p) => p.key) })) } }\n    },\n  },\n})\n",[186,1335,1336,1358,1376,1380,1400,1448,1464,1470,1474,1486,1494,1511,1537,1548,1576,1687,1692,1696],{"__ignoreMap":201},[205,1337,1338,1340,1343,1346,1349,1352,1354,1356],{"class":207,"line":208},[205,1339,212],{"class":211},[205,1341,1342],{"class":215}," *",[205,1344,1345],{"class":211}," as",[205,1347,1348],{"class":219}," v ",[205,1350,1351],{"class":211},"from",[205,1353,229],{"class":215},[205,1355,1319],{"class":232},[205,1357,236],{"class":215},[205,1359,1360,1362,1364,1366,1368,1370,1372,1374],{"class":207,"line":239},[205,1361,212],{"class":211},[205,1363,216],{"class":215},[205,1365,246],{"class":219},[205,1367,223],{"class":215},[205,1369,226],{"class":211},[205,1371,229],{"class":215},[205,1373,255],{"class":232},[205,1375,236],{"class":215},[205,1377,1378],{"class":207,"line":260},[205,1379,285],{"emptyLinePlaceholder":284},[205,1381,1382,1384,1387,1389,1392,1394,1396,1398],{"class":207,"line":281},[205,1383,292],{"class":291},[205,1385,1386],{"class":219}," schema ",[205,1388,298],{"class":215},[205,1390,1391],{"class":219}," v",[205,1393,303],{"class":215},[205,1395,307],{"class":306},[205,1397,310],{"class":219},[205,1399,313],{"class":215},[205,1401,1402,1404,1406,1408,1410,1413,1416,1418,1420,1422,1424,1426,1428,1431,1434,1436,1438,1440,1443,1446],{"class":207,"line":288},[205,1403,320],{"class":319},[205,1405,323],{"class":215},[205,1407,1391],{"class":219},[205,1409,303],{"class":215},[205,1411,1412],{"class":306},"pipe",[205,1414,1415],{"class":219},"(v",[205,1417,303],{"class":215},[205,1419,330],{"class":306},[205,1421,333],{"class":219},[205,1423,556],{"class":215},[205,1425,1391],{"class":219},[205,1427,303],{"class":215},[205,1429,1430],{"class":306},"transform",[205,1432,1433],{"class":219},"(Number)",[205,1435,556],{"class":215},[205,1437,1391],{"class":219},[205,1439,303],{"class":215},[205,1441,1442],{"class":306},"number",[205,1444,1445],{"class":219},"())",[205,1447,354],{"class":215},[205,1449,1450,1452,1454,1456,1458,1460,1462],{"class":207,"line":316},[205,1451,360],{"class":319},[205,1453,323],{"class":215},[205,1455,1391],{"class":219},[205,1457,303],{"class":215},[205,1459,330],{"class":306},[205,1461,333],{"class":219},[205,1463,354],{"class":215},[205,1465,1466,1468],{"class":207,"line":357},[205,1467,429],{"class":215},[205,1469,432],{"class":219},[205,1471,1472],{"class":207,"line":375},[205,1473,285],{"emptyLinePlaceholder":284},[205,1475,1476,1478,1480,1482,1484],{"class":207,"line":393},[205,1477,188],{"class":219},[205,1479,303],{"class":215},[205,1481,472],{"class":306},[205,1483,310],{"class":219},[205,1485,313],{"class":215},[205,1487,1488,1490,1492],{"class":207,"line":426},[205,1489,1043],{"class":319},[205,1491,323],{"class":215},[205,1493,612],{"class":215},[205,1495,1496,1499,1501,1503,1505,1507,1509],{"class":207,"line":435},[205,1497,1498],{"class":306},"    safeParse",[205,1500,323],{"class":215},[205,1502,1257],{"class":215},[205,1504,1171],{"class":886},[205,1506,351],{"class":215},[205,1508,892],{"class":291},[205,1510,612],{"class":215},[205,1512,1513,1515,1518,1520,1522,1524,1526,1528,1531,1533,1535],{"class":207,"line":440},[205,1514,899],{"class":291},[205,1516,1517],{"class":219}," r",[205,1519,623],{"class":215},[205,1521,1391],{"class":219},[205,1523,303],{"class":215},[205,1525,1297],{"class":306},[205,1527,310],{"class":319},[205,1529,1530],{"class":219},"schema",[205,1532,556],{"class":215},[205,1534,1200],{"class":219},[205,1536,432],{"class":319},[205,1538,1539,1541,1543,1545],{"class":207,"line":453},[205,1540,918],{"class":211},[205,1542,1517],{"class":219},[205,1544,303],{"class":215},[205,1546,1547],{"class":219},"success\n",[205,1549,1550,1553,1555,1557,1559,1561,1563,1565,1567,1569,1571,1574],{"class":207,"line":464},[205,1551,1552],{"class":215},"        ?",[205,1554,216],{"class":215},[205,1556,1189],{"class":319},[205,1558,323],{"class":215},[205,1560,1194],{"class":1221},[205,1562,556],{"class":215},[205,1564,1200],{"class":319},[205,1566,323],{"class":215},[205,1568,1517],{"class":219},[205,1570,303],{"class":215},[205,1572,1573],{"class":219},"output",[205,1575,1208],{"class":215},[205,1577,1578,1581,1583,1585,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605,1608,1610,1613,1615,1617,1620,1622,1624,1626,1628,1630,1632,1635,1637,1640,1642,1644,1646,1648,1650,1653,1656,1658,1660,1662,1664,1666,1668,1671,1673,1676,1678,1680,1683,1685],{"class":207,"line":493},[205,1579,1580],{"class":215},"        :",[205,1582,216],{"class":215},[205,1584,1189],{"class":319},[205,1586,323],{"class":215},[205,1588,1222],{"class":1221},[205,1590,556],{"class":215},[205,1592,1227],{"class":319},[205,1594,323],{"class":215},[205,1596,216],{"class":215},[205,1598,1234],{"class":319},[205,1600,323],{"class":215},[205,1602,1517],{"class":219},[205,1604,303],{"class":215},[205,1606,1607],{"class":219},"issues",[205,1609,303],{"class":215},[205,1611,1612],{"class":306},"map",[205,1614,310],{"class":319},[205,1616,310],{"class":215},[205,1618,1619],{"class":886},"i",[205,1621,351],{"class":215},[205,1623,892],{"class":291},[205,1625,1257],{"class":319},[205,1627,477],{"class":215},[205,1629,1241],{"class":319},[205,1631,323],{"class":215},[205,1633,1634],{"class":219}," i",[205,1636,303],{"class":215},[205,1638,1639],{"class":219},"message",[205,1641,556],{"class":215},[205,1643,1251],{"class":319},[205,1645,323],{"class":215},[205,1647,1634],{"class":219},[205,1649,303],{"class":215},[205,1651,1652],{"class":219},"path",[205,1654,1655],{"class":215},"?.",[205,1657,1612],{"class":306},[205,1659,310],{"class":319},[205,1661,310],{"class":215},[205,1663,182],{"class":886},[205,1665,351],{"class":215},[205,1667,892],{"class":291},[205,1669,1670],{"class":219}," p",[205,1672,303],{"class":215},[205,1674,1675],{"class":219},"key",[205,1677,703],{"class":319},[205,1679,429],{"class":215},[205,1681,1682],{"class":319},")) ",[205,1684,429],{"class":215},[205,1686,1208],{"class":215},[205,1688,1689],{"class":207,"line":501},[205,1690,1691],{"class":215},"    },\n",[205,1693,1694],{"class":207,"line":508},[205,1695,1112],{"class":215},[205,1697,1699,1701],{"class":207,"line":1698},18,[205,1700,429],{"class":215},[205,1702,432],{"class":219},[730,1704,1706],{"id":1705},"arktype","ArkType",[182,1708,1709,1710,1713],{},"ArkType's ",[186,1711,1712],{},"type(...)"," already returns either the parsed value or an error array - similar shape, similar adapter:",[196,1715,1717],{"className":198,"code":1716,"language":200,"meta":201,"style":201},"import { type } from 'arktype'\nimport { ConfigModule } from '@miiajs\u002Fconfig'\n\nconst schema = type({\n  PORT: 'string.numeric.parse',\n  DATABASE_URL: 'string',\n})\n\nConfigModule.configure({\n  schema: {\n    safeParse: (data) => {\n      const r = schema(data)\n      return r instanceof type.errors\n        ? { success: false, error: { issues: r.map((e) => ({ message: e.message, path: e.path })) } }\n        : { success: true, data: r }\n    },\n  },\n})\n",[186,1718,1719,1738,1756,1760,1774,1789,1803,1809,1813,1825,1833,1849,1865,1881,1957,1979,1983,1987],{"__ignoreMap":201},[205,1720,1721,1723,1725,1728,1730,1732,1734,1736],{"class":207,"line":208},[205,1722,212],{"class":211},[205,1724,216],{"class":215},[205,1726,1727],{"class":219}," type",[205,1729,223],{"class":215},[205,1731,226],{"class":211},[205,1733,229],{"class":215},[205,1735,1705],{"class":232},[205,1737,236],{"class":215},[205,1739,1740,1742,1744,1746,1748,1750,1752,1754],{"class":207,"line":239},[205,1741,212],{"class":211},[205,1743,216],{"class":215},[205,1745,246],{"class":219},[205,1747,223],{"class":215},[205,1749,226],{"class":211},[205,1751,229],{"class":215},[205,1753,255],{"class":232},[205,1755,236],{"class":215},[205,1757,1758],{"class":207,"line":260},[205,1759,285],{"emptyLinePlaceholder":284},[205,1761,1762,1764,1766,1768,1770,1772],{"class":207,"line":281},[205,1763,292],{"class":291},[205,1765,1386],{"class":219},[205,1767,298],{"class":215},[205,1769,1727],{"class":306},[205,1771,310],{"class":219},[205,1773,313],{"class":215},[205,1775,1776,1778,1780,1782,1785,1787],{"class":207,"line":288},[205,1777,320],{"class":319},[205,1779,323],{"class":215},[205,1781,229],{"class":215},[205,1783,1784],{"class":232},"string.numeric.parse",[205,1786,343],{"class":215},[205,1788,354],{"class":215},[205,1790,1791,1793,1795,1797,1799,1801],{"class":207,"line":316},[205,1792,360],{"class":319},[205,1794,323],{"class":215},[205,1796,229],{"class":215},[205,1798,330],{"class":232},[205,1800,343],{"class":215},[205,1802,354],{"class":215},[205,1804,1805,1807],{"class":207,"line":357},[205,1806,429],{"class":215},[205,1808,432],{"class":219},[205,1810,1811],{"class":207,"line":375},[205,1812,285],{"emptyLinePlaceholder":284},[205,1814,1815,1817,1819,1821,1823],{"class":207,"line":393},[205,1816,188],{"class":219},[205,1818,303],{"class":215},[205,1820,472],{"class":306},[205,1822,310],{"class":219},[205,1824,313],{"class":215},[205,1826,1827,1829,1831],{"class":207,"line":426},[205,1828,1043],{"class":319},[205,1830,323],{"class":215},[205,1832,612],{"class":215},[205,1834,1835,1837,1839,1841,1843,1845,1847],{"class":207,"line":435},[205,1836,1498],{"class":306},[205,1838,323],{"class":215},[205,1840,1257],{"class":215},[205,1842,1171],{"class":886},[205,1844,351],{"class":215},[205,1846,892],{"class":291},[205,1848,612],{"class":215},[205,1850,1851,1853,1855,1857,1859,1861,1863],{"class":207,"line":440},[205,1852,899],{"class":291},[205,1854,1517],{"class":219},[205,1856,623],{"class":215},[205,1858,480],{"class":306},[205,1860,310],{"class":319},[205,1862,1171],{"class":219},[205,1864,432],{"class":319},[205,1866,1867,1869,1871,1874,1876,1878],{"class":207,"line":453},[205,1868,918],{"class":211},[205,1870,1517],{"class":219},[205,1872,1873],{"class":215}," instanceof",[205,1875,1727],{"class":514},[205,1877,303],{"class":215},[205,1879,1880],{"class":514},"errors\n",[205,1882,1883,1885,1887,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911,1913,1915,1918,1920,1922,1924,1926,1928,1930,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,1953,1955],{"class":207,"line":464},[205,1884,1552],{"class":215},[205,1886,216],{"class":215},[205,1888,1189],{"class":319},[205,1890,323],{"class":215},[205,1892,1222],{"class":1221},[205,1894,556],{"class":215},[205,1896,1227],{"class":319},[205,1898,323],{"class":215},[205,1900,216],{"class":215},[205,1902,1234],{"class":319},[205,1904,323],{"class":215},[205,1906,1517],{"class":219},[205,1908,303],{"class":215},[205,1910,1612],{"class":306},[205,1912,310],{"class":319},[205,1914,310],{"class":215},[205,1916,1917],{"class":886},"e",[205,1919,351],{"class":215},[205,1921,892],{"class":291},[205,1923,1257],{"class":319},[205,1925,477],{"class":215},[205,1927,1241],{"class":319},[205,1929,323],{"class":215},[205,1931,1932],{"class":219}," e",[205,1934,303],{"class":215},[205,1936,1639],{"class":219},[205,1938,556],{"class":215},[205,1940,1251],{"class":319},[205,1942,323],{"class":215},[205,1944,1932],{"class":219},[205,1946,303],{"class":215},[205,1948,1652],{"class":219},[205,1950,223],{"class":215},[205,1952,1682],{"class":319},[205,1954,429],{"class":215},[205,1956,1208],{"class":215},[205,1958,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977],{"class":207,"line":493},[205,1960,1580],{"class":215},[205,1962,216],{"class":215},[205,1964,1189],{"class":319},[205,1966,323],{"class":215},[205,1968,1194],{"class":1221},[205,1970,556],{"class":215},[205,1972,1200],{"class":319},[205,1974,323],{"class":215},[205,1976,1517],{"class":219},[205,1978,1208],{"class":215},[205,1980,1981],{"class":207,"line":501},[205,1982,1691],{"class":215},[205,1984,1985],{"class":207,"line":508},[205,1986,1112],{"class":215},[205,1988,1989,1991],{"class":207,"line":1698},[205,1990,429],{"class":215},[205,1992,432],{"class":219},[730,1994,1996],{"id":1995},"hand-rolled","Hand-rolled",[182,1998,1999],{},"For simple cases you don't need a library at all:",[196,2001,2003],{"className":198,"code":2002,"language":200,"meta":201,"style":201},"ConfigModule.configure({\n  schema: {\n    safeParse: (data: any) => {\n      if (!data.DATABASE_URL) {\n        return { success: false, error: { issues: [{ message: 'DATABASE_URL is required', path: ['DATABASE_URL'] }] } }\n      }\n      return { success: true, data: { ...data, PORT: Number(data.PORT ?? 3000) } }\n    },\n  },\n})\n",[186,2004,2005,2017,2025,2045,2065,2131,2135,2191,2195,2199],{"__ignoreMap":201},[205,2006,2007,2009,2011,2013,2015],{"class":207,"line":208},[205,2008,188],{"class":219},[205,2010,303],{"class":215},[205,2012,472],{"class":306},[205,2014,310],{"class":219},[205,2016,313],{"class":215},[205,2018,2019,2021,2023],{"class":207,"line":239},[205,2020,1043],{"class":319},[205,2022,323],{"class":215},[205,2024,612],{"class":215},[205,2026,2027,2029,2031,2033,2035,2037,2039,2041,2043],{"class":207,"line":260},[205,2028,1498],{"class":306},[205,2030,323],{"class":215},[205,2032,1257],{"class":215},[205,2034,1171],{"class":886},[205,2036,323],{"class":215},[205,2038,1156],{"class":514},[205,2040,351],{"class":215},[205,2042,892],{"class":291},[205,2044,612],{"class":215},[205,2046,2047,2050,2052,2055,2057,2059,2061,2063],{"class":207,"line":281},[205,2048,2049],{"class":211},"      if",[205,2051,1257],{"class":319},[205,2053,2054],{"class":215},"!",[205,2056,1171],{"class":219},[205,2058,303],{"class":215},[205,2060,669],{"class":219},[205,2062,703],{"class":319},[205,2064,313],{"class":215},[205,2066,2067,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088,2090,2093,2095,2097,2099,2101,2104,2106,2108,2110,2112,2114,2116,2118,2120,2123,2125,2127,2129],{"class":207,"line":288},[205,2068,2069],{"class":211},"        return",[205,2071,216],{"class":215},[205,2073,1189],{"class":319},[205,2075,323],{"class":215},[205,2077,1222],{"class":1221},[205,2079,556],{"class":215},[205,2081,1227],{"class":319},[205,2083,323],{"class":215},[205,2085,216],{"class":215},[205,2087,1234],{"class":319},[205,2089,323],{"class":215},[205,2091,2092],{"class":319}," [",[205,2094,477],{"class":215},[205,2096,1241],{"class":319},[205,2098,323],{"class":215},[205,2100,229],{"class":215},[205,2102,2103],{"class":232},"DATABASE_URL is required",[205,2105,343],{"class":215},[205,2107,556],{"class":215},[205,2109,1251],{"class":319},[205,2111,323],{"class":215},[205,2113,2092],{"class":319},[205,2115,343],{"class":215},[205,2117,669],{"class":232},[205,2119,343],{"class":215},[205,2121,2122],{"class":319},"] ",[205,2124,429],{"class":215},[205,2126,2122],{"class":319},[205,2128,429],{"class":215},[205,2130,1208],{"class":215},[205,2132,2133],{"class":207,"line":316},[205,2134,973],{"class":215},[205,2136,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2158,2160,2162,2165,2167,2170,2172,2174,2176,2178,2181,2185,2187,2189],{"class":207,"line":357},[205,2138,918],{"class":211},[205,2140,216],{"class":215},[205,2142,1189],{"class":319},[205,2144,323],{"class":215},[205,2146,1194],{"class":1221},[205,2148,556],{"class":215},[205,2150,1200],{"class":319},[205,2152,323],{"class":215},[205,2154,216],{"class":215},[205,2156,2157],{"class":215}," ...",[205,2159,1171],{"class":219},[205,2161,556],{"class":215},[205,2163,2164],{"class":319}," PORT",[205,2166,323],{"class":215},[205,2168,2169],{"class":306}," Number",[205,2171,310],{"class":319},[205,2173,1171],{"class":219},[205,2175,303],{"class":215},[205,2177,698],{"class":219},[205,2179,2180],{"class":215}," ??",[205,2182,2184],{"class":2183},"sbssI"," 3000",[205,2186,703],{"class":319},[205,2188,429],{"class":215},[205,2190,1208],{"class":215},[205,2192,2193],{"class":207,"line":375},[205,2194,1691],{"class":215},[205,2196,2197],{"class":207,"line":393},[205,2198,1112],{"class":215},[205,2200,2201,2203],{"class":207,"line":426},[205,2202,429],{"class":215},[205,2204,432],{"class":219},[2206,2207,2208],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":201,"searchDepth":239,"depth":239,"links":2210},[2211,2212,2215,2216,2217,2218],{"id":193,"depth":239,"text":194},{"id":531,"depth":239,"text":532,"children":2213},[2214],{"id":732,"depth":260,"text":733},{"id":795,"depth":239,"text":796},{"id":1011,"depth":239,"text":1012},{"id":1124,"depth":239,"text":1125},{"id":1301,"depth":239,"text":1302,"children":2219},[2220,2221,2222],{"id":1319,"depth":260,"text":1320},{"id":1705,"depth":260,"text":1706},{"id":1995,"depth":260,"text":1996},"Manage environment variables with validated, type-safe configuration.","md",{},{"title":71,"description":2223},"uXLfHFaUITdoM9C2F4IIhwTmWqvX40lWpCFc6JPtmW8",[2229,2231],{"title":67,"path":68,"stem":69,"description":2230,"children":-1},"Organize your application into cohesive, composable blocks.",{"title":75,"path":76,"stem":77,"description":2232,"children":-1},"Transform requests and responses using the Koa-style onion model.",1778575270760]