[{"data":1,"prerenderedAt":1005},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fcore-concepts\u002Fmodules":176,"\u002Fdocs\u002Fcore-concepts\u002Fmodules-surround":1000},[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":67,"body":178,"description":995,"extension":996,"meta":997,"navigation":238,"path":68,"seo":998,"status":11,"stem":69,"__hash__":999},"docs\u002F1.docs\u002F2.core-concepts\u002F5.modules.md",{"type":179,"value":180,"toc":987},"minimark",[181,185,190,308,312,395,399,402,588,594,602,606,613,756,759,829,850,854,861,922,925,958,962,983],[182,183,184],"p",{},"Modules group related controllers and providers into cohesive units. Every MiiaJS application has at least one root module.",[186,187,189],"h2",{"id":188},"defining-a-module","Defining a module",[191,192,197],"pre",{"className":193,"code":194,"language":195,"meta":196,"style":196},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Module } from '@miiajs\u002Fcore'\n\n@Module({\n  controllers: [UserController],\n  providers: [UserService],\n})\nclass UserModule {}\n","typescript","",[198,199,200,233,240,256,272,285,294],"code",{"__ignoreMap":196},[201,202,205,209,213,217,220,223,226,230],"span",{"class":203,"line":204},"line",1,[201,206,208],{"class":207},"s7zQu","import",[201,210,212],{"class":211},"sMK4o"," {",[201,214,216],{"class":215},"sTEyZ"," Module",[201,218,219],{"class":211}," }",[201,221,222],{"class":207}," from",[201,224,225],{"class":211}," '",[201,227,229],{"class":228},"sfazB","@miiajs\u002Fcore",[201,231,232],{"class":211},"'\n",[201,234,236],{"class":203,"line":235},2,[201,237,239],{"emptyLinePlaceholder":238},true,"\n",[201,241,243,246,250,253],{"class":203,"line":242},3,[201,244,245],{"class":211},"@",[201,247,249],{"class":248},"s2Zo4","Module",[201,251,252],{"class":215},"(",[201,254,255],{"class":211},"{\n",[201,257,259,263,266,269],{"class":203,"line":258},4,[201,260,262],{"class":261},"swJcz","  controllers",[201,264,265],{"class":211},":",[201,267,268],{"class":215}," [UserController]",[201,270,271],{"class":211},",\n",[201,273,275,278,280,283],{"class":203,"line":274},5,[201,276,277],{"class":261},"  providers",[201,279,265],{"class":211},[201,281,282],{"class":215}," [UserService]",[201,284,271],{"class":211},[201,286,288,291],{"class":203,"line":287},6,[201,289,290],{"class":211},"}",[201,292,293],{"class":215},")\n",[201,295,297,301,305],{"class":203,"line":296},7,[201,298,300],{"class":299},"spNyl","class",[201,302,304],{"class":303},"sBMFI"," UserModule",[201,306,307],{"class":211}," {}\n",[186,309,311],{"id":310},"module-options","Module options",[313,314,315,331],"table",{},[316,317,318],"thead",{},[319,320,321,325,328],"tr",{},[322,323,324],"th",{},"Option",[322,326,327],{},"Type",[322,329,330],{},"Description",[332,333,334,350,365,380],"tbody",{},[319,335,336,342,347],{},[337,338,339],"td",{},[198,340,341],{},"controllers",[337,343,344],{},[198,345,346],{},"Constructor[]",[337,348,349],{},"Controllers to register",[319,351,352,357,362],{},[337,353,354],{},[198,355,356],{},"providers",[337,358,359],{},[198,360,361],{},"ProviderDefinition[]",[337,363,364],{},"Services and other providers",[319,366,367,372,377],{},[337,368,369],{},[198,370,371],{},"imports",[337,373,374],{},[198,375,376],{},"(Constructor | ConfiguredModule)[]",[337,378,379],{},"Other modules to import",[319,381,382,387,392],{},[337,383,384],{},[198,385,386],{},"prefix",[337,388,389],{},[198,390,391],{},"string",[337,393,394],{},"Path prefix for all controllers",[186,396,398],{"id":397},"composing-modules","Composing modules",[182,400,401],{},"Import modules to compose your application:",[191,403,405],{"className":193,"code":404,"language":195,"meta":196,"style":196},"@Module({\n  controllers: [UserController],\n  providers: [UserService],\n})\nclass UserModule {}\n\n@Module({\n  controllers: [PostController],\n  providers: [PostService],\n})\nclass PostModule {}\n\n@Module({\n  imports: [UserModule, PostModule],\n  controllers: [HealthController],\n  prefix: '\u002Fapi',\n})\nclass AppModule {}\n",[198,406,407,417,427,437,443,451,455,465,477,489,496,506,511,522,541,553,571,578],{"__ignoreMap":196},[201,408,409,411,413,415],{"class":203,"line":204},[201,410,245],{"class":211},[201,412,249],{"class":248},[201,414,252],{"class":215},[201,416,255],{"class":211},[201,418,419,421,423,425],{"class":203,"line":235},[201,420,262],{"class":261},[201,422,265],{"class":211},[201,424,268],{"class":215},[201,426,271],{"class":211},[201,428,429,431,433,435],{"class":203,"line":242},[201,430,277],{"class":261},[201,432,265],{"class":211},[201,434,282],{"class":215},[201,436,271],{"class":211},[201,438,439,441],{"class":203,"line":258},[201,440,290],{"class":211},[201,442,293],{"class":215},[201,444,445,447,449],{"class":203,"line":274},[201,446,300],{"class":299},[201,448,304],{"class":303},[201,450,307],{"class":211},[201,452,453],{"class":203,"line":287},[201,454,239],{"emptyLinePlaceholder":238},[201,456,457,459,461,463],{"class":203,"line":296},[201,458,245],{"class":211},[201,460,249],{"class":248},[201,462,252],{"class":215},[201,464,255],{"class":211},[201,466,468,470,472,475],{"class":203,"line":467},8,[201,469,262],{"class":261},[201,471,265],{"class":211},[201,473,474],{"class":215}," [PostController]",[201,476,271],{"class":211},[201,478,480,482,484,487],{"class":203,"line":479},9,[201,481,277],{"class":261},[201,483,265],{"class":211},[201,485,486],{"class":215}," [PostService]",[201,488,271],{"class":211},[201,490,492,494],{"class":203,"line":491},10,[201,493,290],{"class":211},[201,495,293],{"class":215},[201,497,499,501,504],{"class":203,"line":498},11,[201,500,300],{"class":299},[201,502,503],{"class":303}," PostModule",[201,505,307],{"class":211},[201,507,509],{"class":203,"line":508},12,[201,510,239],{"emptyLinePlaceholder":238},[201,512,514,516,518,520],{"class":203,"line":513},13,[201,515,245],{"class":211},[201,517,249],{"class":248},[201,519,252],{"class":215},[201,521,255],{"class":211},[201,523,525,528,530,533,536,539],{"class":203,"line":524},14,[201,526,527],{"class":261},"  imports",[201,529,265],{"class":211},[201,531,532],{"class":215}," [UserModule",[201,534,535],{"class":211},",",[201,537,538],{"class":215}," PostModule]",[201,540,271],{"class":211},[201,542,544,546,548,551],{"class":203,"line":543},15,[201,545,262],{"class":261},[201,547,265],{"class":211},[201,549,550],{"class":215}," [HealthController]",[201,552,271],{"class":211},[201,554,556,559,561,563,566,569],{"class":203,"line":555},16,[201,557,558],{"class":261},"  prefix",[201,560,265],{"class":211},[201,562,225],{"class":211},[201,564,565],{"class":228},"\u002Fapi",[201,567,568],{"class":211},"'",[201,570,271],{"class":211},[201,572,574,576],{"class":203,"line":573},17,[201,575,290],{"class":211},[201,577,293],{"class":215},[201,579,581,583,586],{"class":203,"line":580},18,[201,582,300],{"class":299},[201,584,585],{"class":303}," AppModule",[201,587,307],{"class":211},[182,589,590,591,593],{},"The ",[198,592,386],{}," option prepends a path to all routes in the module and its imported modules:",[191,595,600],{"className":596,"code":598,"language":599},[597],"language-text","\u002Fapi\n  \u002Fusers    (from UserModule)\n  \u002Fposts    (from PostModule)\n  \u002Fhealth   (from AppModule)\n","text",[198,601,598],{"__ignoreMap":196},[186,603,605],{"id":604},"dynamic-modules","Dynamic modules",[182,607,608,609,612],{},"Some modules need runtime configuration. Use the ",[198,610,611],{},"ConfiguredModule"," pattern:",[191,614,616],{"className":193,"code":615,"language":195,"meta":196,"style":196},"class DatabaseModule {\n  static configure(url: string): ConfiguredModule {\n    return {\n      module: DatabaseModule,\n      providers: [\n        {\n          token: 'DB_URL',\n          factory: () => url,\n        },\n        DatabaseService,\n      ],\n    }\n  }\n}\n",[198,617,618,628,655,662,673,683,688,704,722,727,734,741,746,751],{"__ignoreMap":196},[201,619,620,622,625],{"class":203,"line":204},[201,621,300],{"class":299},[201,623,624],{"class":303}," DatabaseModule",[201,626,627],{"class":211}," {\n",[201,629,630,633,636,638,642,644,647,650,653],{"class":203,"line":235},[201,631,632],{"class":299},"  static",[201,634,635],{"class":261}," configure",[201,637,252],{"class":211},[201,639,641],{"class":640},"sHdIc","url",[201,643,265],{"class":211},[201,645,646],{"class":303}," string",[201,648,649],{"class":211},"):",[201,651,652],{"class":303}," ConfiguredModule",[201,654,627],{"class":211},[201,656,657,660],{"class":203,"line":242},[201,658,659],{"class":207},"    return",[201,661,627],{"class":211},[201,663,664,667,669,671],{"class":203,"line":258},[201,665,666],{"class":261},"      module",[201,668,265],{"class":211},[201,670,624],{"class":215},[201,672,271],{"class":211},[201,674,675,678,680],{"class":203,"line":274},[201,676,677],{"class":261},"      providers",[201,679,265],{"class":211},[201,681,682],{"class":261}," [\n",[201,684,685],{"class":203,"line":287},[201,686,687],{"class":211},"        {\n",[201,689,690,693,695,697,700,702],{"class":203,"line":296},[201,691,692],{"class":261},"          token",[201,694,265],{"class":211},[201,696,225],{"class":211},[201,698,699],{"class":228},"DB_URL",[201,701,568],{"class":211},[201,703,271],{"class":211},[201,705,706,709,711,714,717,720],{"class":203,"line":467},[201,707,708],{"class":248},"          factory",[201,710,265],{"class":211},[201,712,713],{"class":211}," ()",[201,715,716],{"class":299}," =>",[201,718,719],{"class":215}," url",[201,721,271],{"class":211},[201,723,724],{"class":203,"line":479},[201,725,726],{"class":211},"        },\n",[201,728,729,732],{"class":203,"line":491},[201,730,731],{"class":215},"        DatabaseService",[201,733,271],{"class":211},[201,735,736,739],{"class":203,"line":498},[201,737,738],{"class":261},"      ]",[201,740,271],{"class":211},[201,742,743],{"class":203,"line":508},[201,744,745],{"class":211},"    }\n",[201,747,748],{"class":203,"line":513},[201,749,750],{"class":211},"  }\n",[201,752,753],{"class":203,"line":524},[201,754,755],{"class":211},"}\n",[182,757,758],{},"Use it in imports:",[191,760,762],{"className":193,"code":761,"language":195,"meta":196,"style":196},"@Module({\n  imports: [\n    DatabaseModule.configure(process.env.DATABASE_URL),\n  ],\n})\nclass AppModule {}\n",[198,763,764,774,782,808,815,821],{"__ignoreMap":196},[201,765,766,768,770,772],{"class":203,"line":204},[201,767,245],{"class":211},[201,769,249],{"class":248},[201,771,252],{"class":215},[201,773,255],{"class":211},[201,775,776,778,780],{"class":203,"line":235},[201,777,527],{"class":261},[201,779,265],{"class":211},[201,781,682],{"class":215},[201,783,784,787,790,793,796,798,801,803,806],{"class":203,"line":242},[201,785,786],{"class":215},"    DatabaseModule",[201,788,789],{"class":211},".",[201,791,792],{"class":248},"configure",[201,794,795],{"class":215},"(process",[201,797,789],{"class":211},[201,799,800],{"class":215},"env",[201,802,789],{"class":211},[201,804,805],{"class":215},"DATABASE_URL)",[201,807,271],{"class":211},[201,809,810,813],{"class":203,"line":258},[201,811,812],{"class":215},"  ]",[201,814,271],{"class":211},[201,816,817,819],{"class":203,"line":274},[201,818,290],{"class":211},[201,820,293],{"class":215},[201,822,823,825,827],{"class":203,"line":287},[201,824,300],{"class":299},[201,826,585],{"class":303},[201,828,307],{"class":211},[182,830,831,832,835,836,839,840,843,844,843,847,789],{},"Many MiiaJS packages use this pattern - ",[198,833,834],{},"ConfigModule.configure()"," (from ",[198,837,838],{},"@miiajs\u002Fconfig","), ",[198,841,842],{},"DrizzleModule.configure()",", ",[198,845,846],{},"JwtModule.configure()",[198,848,849],{},"PaprModule.configure()",[186,851,853],{"id":852},"registering-with-the-app","Registering with the app",[182,855,856,857,860],{},"Register your root module with the ",[198,858,859],{},"Miia"," instance:",[191,862,864],{"className":193,"code":863,"language":195,"meta":196,"style":196},"const app = new Miia()\n  .register(AppModule)\n\nawait app.listen(3000)\n",[198,865,866,886,897,901],{"__ignoreMap":196},[201,867,868,871,874,877,880,883],{"class":203,"line":204},[201,869,870],{"class":299},"const",[201,872,873],{"class":215}," app ",[201,875,876],{"class":211},"=",[201,878,879],{"class":211}," new",[201,881,882],{"class":248}," Miia",[201,884,885],{"class":215},"()\n",[201,887,888,891,894],{"class":203,"line":235},[201,889,890],{"class":211},"  .",[201,892,893],{"class":248},"register",[201,895,896],{"class":215},"(AppModule)\n",[201,898,899],{"class":203,"line":242},[201,900,239],{"emptyLinePlaceholder":238},[201,902,903,906,909,911,914,916,920],{"class":203,"line":258},[201,904,905],{"class":207},"await",[201,907,908],{"class":215}," app",[201,910,789],{"class":211},[201,912,913],{"class":248},"listen",[201,915,252],{"class":215},[201,917,919],{"class":918},"sbssI","3000",[201,921,293],{"class":215},[182,923,924],{},"You can register multiple modules:",[191,926,928],{"className":193,"code":927,"language":195,"meta":196,"style":196},"const app = new Miia()\n  .register(AppModule, FeatureModule)\n",[198,929,930,944],{"__ignoreMap":196},[201,931,932,934,936,938,940,942],{"class":203,"line":204},[201,933,870],{"class":299},[201,935,873],{"class":215},[201,937,876],{"class":211},[201,939,879],{"class":211},[201,941,882],{"class":248},[201,943,885],{"class":215},[201,945,946,948,950,953,955],{"class":203,"line":235},[201,947,890],{"class":211},[201,949,893],{"class":248},[201,951,952],{"class":215},"(AppModule",[201,954,535],{"class":211},[201,956,957],{"class":215}," FeatureModule)\n",[186,959,961],{"id":960},"module-loading-order","Module loading order",[963,964,965,977],"ol",{},[966,967,968,972,973,976],"li",{},[969,970,971],"strong",{},"Registration"," - ",[198,974,975],{},"ModuleLoader"," processes all modules recursively, registering providers in the DI container",[966,978,979,982],{},[969,980,981],{},"Route resolution"," - Controllers are instantiated and routes are compiled into the router",[984,985,986],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":196,"searchDepth":235,"depth":235,"links":988},[989,990,991,992,993,994],{"id":188,"depth":235,"text":189},{"id":310,"depth":235,"text":311},{"id":397,"depth":235,"text":398},{"id":604,"depth":235,"text":605},{"id":852,"depth":235,"text":853},{"id":960,"depth":235,"text":961},"Organize your application into cohesive, composable blocks.","md",{},{"title":67,"description":995},"Fz4IFjzDwtxcXkdjLIJ7n90Hsnsi4Pf5VRIUaTU7EQM",[1001,1003],{"title":63,"path":64,"stem":65,"description":1002,"children":-1},"Injectable services, repositories, and the dependency injection system.",{"title":71,"path":72,"stem":73,"description":1004,"children":-1},"Manage environment variables with validated, type-safe configuration.",1778575270760]