[{"data":1,"prerenderedAt":6305},["ShallowReactive",2],{"navigation":3,"docs-path-index":152,"-docs-modules-storage-overview":198,"-docs-modules-storage-overview-surround":6300},[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":66,"body":200,"description":6294,"extension":6295,"links":6296,"meta":6297,"navigation":56,"path":115,"seo":6298,"stem":116,"__hash__":6299},"docs\u002Fdocs\u002F3.modules\u002F4.storage\u002F0.overview.md",{"type":201,"value":202,"toc":6268},"minimark",[203,207,211,279,283,1913,1917,1920,1923,2235,2239,2242,2303,2307,2310,2459,2463,2470,2473,2477,2480,2668,2672,2675,2897,2901,2904,3183,3187,3191,3194,3506,3509,3640,3644,3884,3888,3892,3895,4406,4410,4413,4683,4687,5259,5263,5563,5567,6264],[204,205,206],"p",{},"The Storage module provides a powerful, flexible storage system for Vercube applications. Built around a provider-based architecture, it allows you to store and retrieve data across multiple storage backends through a unified interface. Whether you need in-memory caching, file system storage, or cloud-based solutions, the Storage module handles it seamlessly.",[208,209,18],"h2",{"id":210},"installation",[212,213,214,244,262],"code-group",{},[215,216,222],"pre",{"className":217,"code":218,"filename":219,"language":220,"meta":221,"style":221},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","$ pnpm add @vercube\u002Fstorage\n","pnpm","bash","",[223,224,225],"code",{"__ignoreMap":221},[226,227,230,234,238,241],"span",{"class":228,"line":229},"line",1,[226,231,233],{"class":232},"sBMFI","$",[226,235,237],{"class":236},"sfazB"," pnpm",[226,239,240],{"class":236}," add",[226,242,243],{"class":236}," @vercube\u002Fstorage\n",[215,245,248],{"className":217,"code":246,"filename":247,"language":220,"meta":221,"style":221},"$ npm install @vercube\u002Fstorage\n","npm",[223,249,250],{"__ignoreMap":221},[226,251,252,254,257,260],{"class":228,"line":229},[226,253,233],{"class":232},[226,255,256],{"class":236}," npm",[226,258,259],{"class":236}," install",[226,261,243],{"class":236},[215,263,266],{"className":217,"code":264,"filename":265,"language":220,"meta":221,"style":221},"$ bun install @vercube\u002Fstorage\n","bun",[223,267,268],{"__ignoreMap":221},[226,269,270,272,275,277],{"class":228,"line":229},[226,271,233],{"class":232},[226,273,274],{"class":236}," bun",[226,276,259],{"class":236},[226,278,243],{"class":236},[208,280,282],{"id":281},"quick-start","Quick Start",[284,285,286,291,294,563,567,570,1128,1132,1135],"steps",{},[287,288,290],"h3",{"id":289},"register-storagemanager-in-container","Register StorageManager in Container",[204,292,293],{},"Set up the StorageManager in your DI container. This is typically done once during application bootstrap.",[215,295,300],{"className":296,"code":297,"filename":298,"language":299,"meta":221,"style":221},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Container } from '@vercube\u002Fdi';\nimport { StorageManager } from '@vercube\u002Fstorage';\nimport { MemoryStorage } from '@vercube\u002Fstorage\u002Fdrivers\u002FMemoryStorage';\n\nexport function setupContainer(container: Container): void {\n  \u002F\u002F Bind StorageManager to the container\n  container.bind(StorageManager);\n  \n  \u002F\u002F Get the storage manager instance\n  const storageManager = container.get(StorageManager);\n  \n  \u002F\u002F Mount a memory storage instance\n  storageManager.mount({\n    name: 'cache',\n    storage: MemoryStorage\n  });\n}\n","src\u002Fcontainer.ts","ts",[223,301,302,334,357,380,386,421,428,451,457,463,491,496,502,518,536,547,557],{"__ignoreMap":221},[226,303,304,308,312,316,319,322,325,328,331],{"class":228,"line":229},[226,305,307],{"class":306},"s7zQu","import",[226,309,311],{"class":310},"sMK4o"," {",[226,313,315],{"class":314},"sTEyZ"," Container",[226,317,318],{"class":310}," }",[226,320,321],{"class":306}," from",[226,323,324],{"class":310}," '",[226,326,327],{"class":236},"@vercube\u002Fdi",[226,329,330],{"class":310},"'",[226,332,333],{"class":310},";\n",[226,335,337,339,341,344,346,348,350,353,355],{"class":228,"line":336},2,[226,338,307],{"class":306},[226,340,311],{"class":310},[226,342,343],{"class":314}," StorageManager",[226,345,318],{"class":310},[226,347,321],{"class":306},[226,349,324],{"class":310},[226,351,352],{"class":236},"@vercube\u002Fstorage",[226,354,330],{"class":310},[226,356,333],{"class":310},[226,358,360,362,364,367,369,371,373,376,378],{"class":228,"line":359},3,[226,361,307],{"class":306},[226,363,311],{"class":310},[226,365,366],{"class":314}," MemoryStorage",[226,368,318],{"class":310},[226,370,321],{"class":306},[226,372,324],{"class":310},[226,374,375],{"class":236},"@vercube\u002Fstorage\u002Fdrivers\u002FMemoryStorage",[226,377,330],{"class":310},[226,379,333],{"class":310},[226,381,383],{"class":228,"line":382},4,[226,384,385],{"emptyLinePlaceholder":56},"\n",[226,387,389,392,396,400,403,407,410,412,415,418],{"class":228,"line":388},5,[226,390,391],{"class":306},"export",[226,393,395],{"class":394},"spNyl"," function",[226,397,399],{"class":398},"s2Zo4"," setupContainer",[226,401,402],{"class":310},"(",[226,404,406],{"class":405},"sHdIc","container",[226,408,409],{"class":310},":",[226,411,315],{"class":232},[226,413,414],{"class":310},"):",[226,416,417],{"class":232}," void",[226,419,420],{"class":310}," {\n",[226,422,424],{"class":228,"line":423},6,[226,425,427],{"class":426},"sHwdD","  \u002F\u002F Bind StorageManager to the container\n",[226,429,431,434,437,440,443,446,449],{"class":228,"line":430},7,[226,432,433],{"class":314},"  container",[226,435,436],{"class":310},".",[226,438,439],{"class":398},"bind",[226,441,402],{"class":442},"swJcz",[226,444,445],{"class":314},"StorageManager",[226,447,448],{"class":442},")",[226,450,333],{"class":310},[226,452,454],{"class":228,"line":453},8,[226,455,456],{"class":442},"  \n",[226,458,460],{"class":228,"line":459},9,[226,461,462],{"class":426},"  \u002F\u002F Get the storage manager instance\n",[226,464,466,469,472,475,478,480,483,485,487,489],{"class":228,"line":465},10,[226,467,468],{"class":394},"  const",[226,470,471],{"class":314}," storageManager",[226,473,474],{"class":310}," =",[226,476,477],{"class":314}," container",[226,479,436],{"class":310},[226,481,482],{"class":398},"get",[226,484,402],{"class":442},[226,486,445],{"class":314},[226,488,448],{"class":442},[226,490,333],{"class":310},[226,492,494],{"class":228,"line":493},11,[226,495,456],{"class":442},[226,497,499],{"class":228,"line":498},12,[226,500,501],{"class":426},"  \u002F\u002F Mount a memory storage instance\n",[226,503,505,508,510,513,515],{"class":228,"line":504},13,[226,506,507],{"class":314},"  storageManager",[226,509,436],{"class":310},[226,511,512],{"class":398},"mount",[226,514,402],{"class":442},[226,516,517],{"class":310},"{\n",[226,519,521,524,526,528,531,533],{"class":228,"line":520},14,[226,522,523],{"class":442},"    name",[226,525,409],{"class":310},[226,527,324],{"class":310},[226,529,530],{"class":236},"cache",[226,532,330],{"class":310},[226,534,535],{"class":310},",\n",[226,537,539,542,544],{"class":228,"line":538},15,[226,540,541],{"class":442},"    storage",[226,543,409],{"class":310},[226,545,546],{"class":314}," MemoryStorage\n",[226,548,550,553,555],{"class":228,"line":549},16,[226,551,552],{"class":310},"  }",[226,554,448],{"class":442},[226,556,333],{"class":310},[226,558,560],{"class":228,"line":559},17,[226,561,562],{"class":310},"}\n",[287,564,566],{"id":565},"use-storage-in-services","Use Storage in Services",[204,568,569],{},"Use dependency injection to access storage in your services. Store and retrieve data for caching, session management, or any other purpose.",[215,571,574],{"className":296,"code":572,"filename":573,"language":299,"meta":221,"style":221},"import { Inject } from '@vercube\u002Fdi';\nimport { StorageManager } from '@vercube\u002Fstorage';\n\nexport class UserService {\n  @Inject(StorageManager)\n  private storageManager!: StorageManager;\n  \n  async getUserProfile(userId: string) {\n    const cacheKey = `user:${userId}`;\n    \n    \u002F\u002F Try to get from cache first\n    const cached = await this.storageManager.getItem\u003CUserProfile>({\n      storage: 'cache',\n      key: cacheKey\n    });\n    if (cached) {\n      return cached;\n    }\n    \n    \u002F\u002F Fetch from database\n    const user = await this.database.findUser(userId);\n    \n    \u002F\u002F Cache for future requests\n    await this.storageManager.setItem({\n      storage: 'cache',\n      key: cacheKey,\n      value: user\n    });\n    \n    return user;\n  }\n  \n  async updateUserProfile(userId: string, data: UpdateUserDto) {\n    \u002F\u002F Update in database\n    const user = await this.database.updateUser(userId, data);\n    \n    \u002F\u002F Invalidate cache\n    await this.storageManager.deleteItem({\n      storage: 'cache',\n      key: `user:${userId}`\n    });\n    \n    return user;\n  }\n}\n","src\u002Fservices\u002FUserService.ts",[223,575,576,597,617,621,633,644,658,662,684,710,715,720,756,771,781,790,806,815,821,826,832,862,867,873,892,907,918,929,938,943,953,959,964,995,1001,1033,1038,1044,1062,1077,1095,1104,1109,1118,1123],{"__ignoreMap":221},[226,577,578,580,582,585,587,589,591,593,595],{"class":228,"line":229},[226,579,307],{"class":306},[226,581,311],{"class":310},[226,583,584],{"class":314}," Inject",[226,586,318],{"class":310},[226,588,321],{"class":306},[226,590,324],{"class":310},[226,592,327],{"class":236},[226,594,330],{"class":310},[226,596,333],{"class":310},[226,598,599,601,603,605,607,609,611,613,615],{"class":228,"line":336},[226,600,307],{"class":306},[226,602,311],{"class":310},[226,604,343],{"class":314},[226,606,318],{"class":310},[226,608,321],{"class":306},[226,610,324],{"class":310},[226,612,352],{"class":236},[226,614,330],{"class":310},[226,616,333],{"class":310},[226,618,619],{"class":228,"line":359},[226,620,385],{"emptyLinePlaceholder":56},[226,622,623,625,628,631],{"class":228,"line":382},[226,624,391],{"class":306},[226,626,627],{"class":394}," class",[226,629,630],{"class":232}," UserService",[226,632,420],{"class":310},[226,634,635,638,641],{"class":228,"line":388},[226,636,637],{"class":310},"  @",[226,639,640],{"class":398},"Inject",[226,642,643],{"class":314},"(StorageManager)\n",[226,645,646,649,651,654,656],{"class":228,"line":423},[226,647,648],{"class":394},"  private",[226,650,471],{"class":442},[226,652,653],{"class":310},"!:",[226,655,343],{"class":232},[226,657,333],{"class":310},[226,659,660],{"class":228,"line":430},[226,661,456],{"class":314},[226,663,664,667,670,672,675,677,680,682],{"class":228,"line":453},[226,665,666],{"class":394},"  async",[226,668,669],{"class":442}," getUserProfile",[226,671,402],{"class":310},[226,673,674],{"class":405},"userId",[226,676,409],{"class":310},[226,678,679],{"class":232}," string",[226,681,448],{"class":310},[226,683,420],{"class":310},[226,685,686,689,692,694,697,700,703,705,708],{"class":228,"line":459},[226,687,688],{"class":394},"    const",[226,690,691],{"class":314}," cacheKey",[226,693,474],{"class":310},[226,695,696],{"class":310}," `",[226,698,699],{"class":236},"user:",[226,701,702],{"class":310},"${",[226,704,674],{"class":314},[226,706,707],{"class":310},"}`",[226,709,333],{"class":310},[226,711,712],{"class":228,"line":465},[226,713,714],{"class":442},"    \n",[226,716,717],{"class":228,"line":493},[226,718,719],{"class":426},"    \u002F\u002F Try to get from cache first\n",[226,721,722,724,727,729,732,735,738,740,743,746,749,752,754],{"class":228,"line":498},[226,723,688],{"class":394},[226,725,726],{"class":314}," cached",[226,728,474],{"class":310},[226,730,731],{"class":306}," await",[226,733,734],{"class":310}," this.",[226,736,737],{"class":314},"storageManager",[226,739,436],{"class":310},[226,741,742],{"class":398},"getItem",[226,744,745],{"class":310},"\u003C",[226,747,748],{"class":232},"UserProfile",[226,750,751],{"class":310},">",[226,753,402],{"class":442},[226,755,517],{"class":310},[226,757,758,761,763,765,767,769],{"class":228,"line":504},[226,759,760],{"class":442},"      storage",[226,762,409],{"class":310},[226,764,324],{"class":310},[226,766,530],{"class":236},[226,768,330],{"class":310},[226,770,535],{"class":310},[226,772,773,776,778],{"class":228,"line":520},[226,774,775],{"class":442},"      key",[226,777,409],{"class":310},[226,779,780],{"class":314}," cacheKey\n",[226,782,783,786,788],{"class":228,"line":538},[226,784,785],{"class":310},"    }",[226,787,448],{"class":442},[226,789,333],{"class":310},[226,791,792,795,798,801,804],{"class":228,"line":549},[226,793,794],{"class":306},"    if",[226,796,797],{"class":442}," (",[226,799,800],{"class":314},"cached",[226,802,803],{"class":442},") ",[226,805,517],{"class":310},[226,807,808,811,813],{"class":228,"line":559},[226,809,810],{"class":306},"      return",[226,812,726],{"class":314},[226,814,333],{"class":310},[226,816,818],{"class":228,"line":817},18,[226,819,820],{"class":310},"    }\n",[226,822,824],{"class":228,"line":823},19,[226,825,714],{"class":442},[226,827,829],{"class":228,"line":828},20,[226,830,831],{"class":426},"    \u002F\u002F Fetch from database\n",[226,833,835,837,840,842,844,846,849,851,854,856,858,860],{"class":228,"line":834},21,[226,836,688],{"class":394},[226,838,839],{"class":314}," user",[226,841,474],{"class":310},[226,843,731],{"class":306},[226,845,734],{"class":310},[226,847,848],{"class":314},"database",[226,850,436],{"class":310},[226,852,853],{"class":398},"findUser",[226,855,402],{"class":442},[226,857,674],{"class":314},[226,859,448],{"class":442},[226,861,333],{"class":310},[226,863,865],{"class":228,"line":864},22,[226,866,714],{"class":442},[226,868,870],{"class":228,"line":869},23,[226,871,872],{"class":426},"    \u002F\u002F Cache for future requests\n",[226,874,876,879,881,883,885,888,890],{"class":228,"line":875},24,[226,877,878],{"class":306},"    await",[226,880,734],{"class":310},[226,882,737],{"class":314},[226,884,436],{"class":310},[226,886,887],{"class":398},"setItem",[226,889,402],{"class":442},[226,891,517],{"class":310},[226,893,895,897,899,901,903,905],{"class":228,"line":894},25,[226,896,760],{"class":442},[226,898,409],{"class":310},[226,900,324],{"class":310},[226,902,530],{"class":236},[226,904,330],{"class":310},[226,906,535],{"class":310},[226,908,910,912,914,916],{"class":228,"line":909},26,[226,911,775],{"class":442},[226,913,409],{"class":310},[226,915,691],{"class":314},[226,917,535],{"class":310},[226,919,921,924,926],{"class":228,"line":920},27,[226,922,923],{"class":442},"      value",[226,925,409],{"class":310},[226,927,928],{"class":314}," user\n",[226,930,932,934,936],{"class":228,"line":931},28,[226,933,785],{"class":310},[226,935,448],{"class":442},[226,937,333],{"class":310},[226,939,941],{"class":228,"line":940},29,[226,942,714],{"class":442},[226,944,946,949,951],{"class":228,"line":945},30,[226,947,948],{"class":306},"    return",[226,950,839],{"class":314},[226,952,333],{"class":310},[226,954,956],{"class":228,"line":955},31,[226,957,958],{"class":310},"  }\n",[226,960,962],{"class":228,"line":961},32,[226,963,456],{"class":314},[226,965,967,969,972,974,976,978,980,983,986,988,991,993],{"class":228,"line":966},33,[226,968,666],{"class":394},[226,970,971],{"class":442}," updateUserProfile",[226,973,402],{"class":310},[226,975,674],{"class":405},[226,977,409],{"class":310},[226,979,679],{"class":232},[226,981,982],{"class":310},",",[226,984,985],{"class":405}," data",[226,987,409],{"class":310},[226,989,990],{"class":232}," UpdateUserDto",[226,992,448],{"class":310},[226,994,420],{"class":310},[226,996,998],{"class":228,"line":997},34,[226,999,1000],{"class":426},"    \u002F\u002F Update in database\n",[226,1002,1004,1006,1008,1010,1012,1014,1016,1018,1021,1023,1025,1027,1029,1031],{"class":228,"line":1003},35,[226,1005,688],{"class":394},[226,1007,839],{"class":314},[226,1009,474],{"class":310},[226,1011,731],{"class":306},[226,1013,734],{"class":310},[226,1015,848],{"class":314},[226,1017,436],{"class":310},[226,1019,1020],{"class":398},"updateUser",[226,1022,402],{"class":442},[226,1024,674],{"class":314},[226,1026,982],{"class":310},[226,1028,985],{"class":314},[226,1030,448],{"class":442},[226,1032,333],{"class":310},[226,1034,1036],{"class":228,"line":1035},36,[226,1037,714],{"class":442},[226,1039,1041],{"class":228,"line":1040},37,[226,1042,1043],{"class":426},"    \u002F\u002F Invalidate cache\n",[226,1045,1047,1049,1051,1053,1055,1058,1060],{"class":228,"line":1046},38,[226,1048,878],{"class":306},[226,1050,734],{"class":310},[226,1052,737],{"class":314},[226,1054,436],{"class":310},[226,1056,1057],{"class":398},"deleteItem",[226,1059,402],{"class":442},[226,1061,517],{"class":310},[226,1063,1065,1067,1069,1071,1073,1075],{"class":228,"line":1064},39,[226,1066,760],{"class":442},[226,1068,409],{"class":310},[226,1070,324],{"class":310},[226,1072,530],{"class":236},[226,1074,330],{"class":310},[226,1076,535],{"class":310},[226,1078,1080,1082,1084,1086,1088,1090,1092],{"class":228,"line":1079},40,[226,1081,775],{"class":442},[226,1083,409],{"class":310},[226,1085,696],{"class":310},[226,1087,699],{"class":236},[226,1089,702],{"class":310},[226,1091,674],{"class":314},[226,1093,1094],{"class":310},"}`\n",[226,1096,1098,1100,1102],{"class":228,"line":1097},41,[226,1099,785],{"class":310},[226,1101,448],{"class":442},[226,1103,333],{"class":310},[226,1105,1107],{"class":228,"line":1106},42,[226,1108,714],{"class":442},[226,1110,1112,1114,1116],{"class":228,"line":1111},43,[226,1113,948],{"class":306},[226,1115,839],{"class":314},[226,1117,333],{"class":310},[226,1119,1121],{"class":228,"line":1120},44,[226,1122,958],{"class":310},[226,1124,1126],{"class":228,"line":1125},45,[226,1127,562],{"class":310},[287,1129,1131],{"id":1130},"use-storage-in-controllers","Use Storage in Controllers",[204,1133,1134],{},"Inject the StorageManager into controllers for request-level caching or rate limiting.",[215,1136,1139],{"className":296,"code":1137,"filename":1138,"language":299,"meta":221,"style":221},"import { Controller, Get, Post } from '@vercube\u002Fcore';\nimport { Inject } from '@vercube\u002Fdi';\nimport { StorageManager } from '@vercube\u002Fstorage';\n\n@Controller('\u002Fproducts')\nexport class ProductController {\n  @Inject(StorageManager)\n  private storageManager!: StorageManager;\n  \n  @Inject(ProductService)\n  private productService!: ProductService;\n  \n  @Get('\u002F')\n  async getProducts() {\n    const cacheKey = 'products:all';\n    \n    \u002F\u002F Check cache\n    const cached = await this.storageManager.getItem\u003CProduct[]>({\n      storage: 'cache',\n      key: cacheKey\n    });\n    if (cached) {\n      return Response.json(cached);\n    }\n    \n    \u002F\u002F Fetch and cache\n    const products = await this.productService.findAll();\n    await this.storageManager.setItem({\n      storage: 'cache',\n      key: cacheKey,\n      value: products\n    });\n    \n    return Response.json(products);\n  }\n  \n  @Get('\u002F:id')\n  async getProduct(req: Request, params: { id: string }) {\n    const cacheKey = `products:${params.id}`;\n    \n    const cached = await this.storageManager.getItem\u003CProduct>({\n      storage: 'cache',\n      key: cacheKey\n    });\n    if (cached) {\n      return Response.json(cached);\n    }\n    \n    const product = await this.productService.findById(params.id);\n    if (product) {\n      await this.storageManager.setItem({\n        storage: 'cache',\n        key: cacheKey,\n        value: product\n      });\n    }\n    \n    return Response.json(product);\n  }\n}\n","src\u002Fcontrollers\u002FProductController.ts",[223,1140,1141,1173,1193,1213,1217,1237,1248,1256,1268,1272,1281,1295,1299,1317,1329,1346,1350,1355,1387,1401,1409,1417,1429,1449,1453,1457,1462,1487,1503,1517,1527,1536,1544,1548,1567,1571,1575,1592,1630,1657,1661,1689,1703,1711,1719,1731,1750,1755,1760,1793,1807,1825,1841,1853,1864,1874,1879,1884,1903,1908],{"__ignoreMap":221},[226,1142,1143,1145,1147,1150,1152,1155,1157,1160,1162,1164,1166,1169,1171],{"class":228,"line":229},[226,1144,307],{"class":306},[226,1146,311],{"class":310},[226,1148,1149],{"class":314}," Controller",[226,1151,982],{"class":310},[226,1153,1154],{"class":314}," Get",[226,1156,982],{"class":310},[226,1158,1159],{"class":314}," Post",[226,1161,318],{"class":310},[226,1163,321],{"class":306},[226,1165,324],{"class":310},[226,1167,1168],{"class":236},"@vercube\u002Fcore",[226,1170,330],{"class":310},[226,1172,333],{"class":310},[226,1174,1175,1177,1179,1181,1183,1185,1187,1189,1191],{"class":228,"line":336},[226,1176,307],{"class":306},[226,1178,311],{"class":310},[226,1180,584],{"class":314},[226,1182,318],{"class":310},[226,1184,321],{"class":306},[226,1186,324],{"class":310},[226,1188,327],{"class":236},[226,1190,330],{"class":310},[226,1192,333],{"class":310},[226,1194,1195,1197,1199,1201,1203,1205,1207,1209,1211],{"class":228,"line":359},[226,1196,307],{"class":306},[226,1198,311],{"class":310},[226,1200,343],{"class":314},[226,1202,318],{"class":310},[226,1204,321],{"class":306},[226,1206,324],{"class":310},[226,1208,352],{"class":236},[226,1210,330],{"class":310},[226,1212,333],{"class":310},[226,1214,1215],{"class":228,"line":382},[226,1216,385],{"emptyLinePlaceholder":56},[226,1218,1219,1222,1225,1227,1229,1232,1234],{"class":228,"line":388},[226,1220,1221],{"class":310},"@",[226,1223,1224],{"class":398},"Controller",[226,1226,402],{"class":314},[226,1228,330],{"class":310},[226,1230,1231],{"class":236},"\u002Fproducts",[226,1233,330],{"class":310},[226,1235,1236],{"class":314},")\n",[226,1238,1239,1241,1243,1246],{"class":228,"line":423},[226,1240,391],{"class":306},[226,1242,627],{"class":394},[226,1244,1245],{"class":232}," ProductController",[226,1247,420],{"class":310},[226,1249,1250,1252,1254],{"class":228,"line":430},[226,1251,637],{"class":310},[226,1253,640],{"class":398},[226,1255,643],{"class":314},[226,1257,1258,1260,1262,1264,1266],{"class":228,"line":453},[226,1259,648],{"class":394},[226,1261,471],{"class":442},[226,1263,653],{"class":310},[226,1265,343],{"class":232},[226,1267,333],{"class":310},[226,1269,1270],{"class":228,"line":459},[226,1271,456],{"class":314},[226,1273,1274,1276,1278],{"class":228,"line":465},[226,1275,637],{"class":310},[226,1277,640],{"class":398},[226,1279,1280],{"class":314},"(ProductService)\n",[226,1282,1283,1285,1288,1290,1293],{"class":228,"line":493},[226,1284,648],{"class":394},[226,1286,1287],{"class":442}," productService",[226,1289,653],{"class":310},[226,1291,1292],{"class":232}," ProductService",[226,1294,333],{"class":310},[226,1296,1297],{"class":228,"line":498},[226,1298,456],{"class":314},[226,1300,1301,1303,1306,1308,1310,1313,1315],{"class":228,"line":504},[226,1302,637],{"class":310},[226,1304,1305],{"class":398},"Get",[226,1307,402],{"class":314},[226,1309,330],{"class":310},[226,1311,1312],{"class":236},"\u002F",[226,1314,330],{"class":310},[226,1316,1236],{"class":314},[226,1318,1319,1321,1324,1327],{"class":228,"line":520},[226,1320,666],{"class":394},[226,1322,1323],{"class":442}," getProducts",[226,1325,1326],{"class":310},"()",[226,1328,420],{"class":310},[226,1330,1331,1333,1335,1337,1339,1342,1344],{"class":228,"line":538},[226,1332,688],{"class":394},[226,1334,691],{"class":314},[226,1336,474],{"class":310},[226,1338,324],{"class":310},[226,1340,1341],{"class":236},"products:all",[226,1343,330],{"class":310},[226,1345,333],{"class":310},[226,1347,1348],{"class":228,"line":549},[226,1349,714],{"class":442},[226,1351,1352],{"class":228,"line":559},[226,1353,1354],{"class":426},"    \u002F\u002F Check cache\n",[226,1356,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1378,1381,1383,1385],{"class":228,"line":817},[226,1358,688],{"class":394},[226,1360,726],{"class":314},[226,1362,474],{"class":310},[226,1364,731],{"class":306},[226,1366,734],{"class":310},[226,1368,737],{"class":314},[226,1370,436],{"class":310},[226,1372,742],{"class":398},[226,1374,745],{"class":310},[226,1376,1377],{"class":232},"Product",[226,1379,1380],{"class":442},"[]",[226,1382,751],{"class":310},[226,1384,402],{"class":442},[226,1386,517],{"class":310},[226,1388,1389,1391,1393,1395,1397,1399],{"class":228,"line":823},[226,1390,760],{"class":442},[226,1392,409],{"class":310},[226,1394,324],{"class":310},[226,1396,530],{"class":236},[226,1398,330],{"class":310},[226,1400,535],{"class":310},[226,1402,1403,1405,1407],{"class":228,"line":828},[226,1404,775],{"class":442},[226,1406,409],{"class":310},[226,1408,780],{"class":314},[226,1410,1411,1413,1415],{"class":228,"line":834},[226,1412,785],{"class":310},[226,1414,448],{"class":442},[226,1416,333],{"class":310},[226,1418,1419,1421,1423,1425,1427],{"class":228,"line":864},[226,1420,794],{"class":306},[226,1422,797],{"class":442},[226,1424,800],{"class":314},[226,1426,803],{"class":442},[226,1428,517],{"class":310},[226,1430,1431,1433,1436,1438,1441,1443,1445,1447],{"class":228,"line":869},[226,1432,810],{"class":306},[226,1434,1435],{"class":314}," Response",[226,1437,436],{"class":310},[226,1439,1440],{"class":398},"json",[226,1442,402],{"class":442},[226,1444,800],{"class":314},[226,1446,448],{"class":442},[226,1448,333],{"class":310},[226,1450,1451],{"class":228,"line":875},[226,1452,820],{"class":310},[226,1454,1455],{"class":228,"line":894},[226,1456,714],{"class":442},[226,1458,1459],{"class":228,"line":909},[226,1460,1461],{"class":426},"    \u002F\u002F Fetch and cache\n",[226,1463,1464,1466,1469,1471,1473,1475,1478,1480,1483,1485],{"class":228,"line":920},[226,1465,688],{"class":394},[226,1467,1468],{"class":314}," products",[226,1470,474],{"class":310},[226,1472,731],{"class":306},[226,1474,734],{"class":310},[226,1476,1477],{"class":314},"productService",[226,1479,436],{"class":310},[226,1481,1482],{"class":398},"findAll",[226,1484,1326],{"class":442},[226,1486,333],{"class":310},[226,1488,1489,1491,1493,1495,1497,1499,1501],{"class":228,"line":931},[226,1490,878],{"class":306},[226,1492,734],{"class":310},[226,1494,737],{"class":314},[226,1496,436],{"class":310},[226,1498,887],{"class":398},[226,1500,402],{"class":442},[226,1502,517],{"class":310},[226,1504,1505,1507,1509,1511,1513,1515],{"class":228,"line":940},[226,1506,760],{"class":442},[226,1508,409],{"class":310},[226,1510,324],{"class":310},[226,1512,530],{"class":236},[226,1514,330],{"class":310},[226,1516,535],{"class":310},[226,1518,1519,1521,1523,1525],{"class":228,"line":945},[226,1520,775],{"class":442},[226,1522,409],{"class":310},[226,1524,691],{"class":314},[226,1526,535],{"class":310},[226,1528,1529,1531,1533],{"class":228,"line":955},[226,1530,923],{"class":442},[226,1532,409],{"class":310},[226,1534,1535],{"class":314}," products\n",[226,1537,1538,1540,1542],{"class":228,"line":961},[226,1539,785],{"class":310},[226,1541,448],{"class":442},[226,1543,333],{"class":310},[226,1545,1546],{"class":228,"line":966},[226,1547,714],{"class":442},[226,1549,1550,1552,1554,1556,1558,1560,1563,1565],{"class":228,"line":997},[226,1551,948],{"class":306},[226,1553,1435],{"class":314},[226,1555,436],{"class":310},[226,1557,1440],{"class":398},[226,1559,402],{"class":442},[226,1561,1562],{"class":314},"products",[226,1564,448],{"class":442},[226,1566,333],{"class":310},[226,1568,1569],{"class":228,"line":1003},[226,1570,958],{"class":310},[226,1572,1573],{"class":228,"line":1035},[226,1574,456],{"class":314},[226,1576,1577,1579,1581,1583,1585,1588,1590],{"class":228,"line":1040},[226,1578,637],{"class":310},[226,1580,1305],{"class":398},[226,1582,402],{"class":314},[226,1584,330],{"class":310},[226,1586,1587],{"class":236},"\u002F:id",[226,1589,330],{"class":310},[226,1591,1236],{"class":314},[226,1593,1594,1596,1599,1601,1604,1606,1609,1611,1614,1616,1618,1621,1623,1625,1628],{"class":228,"line":1046},[226,1595,666],{"class":394},[226,1597,1598],{"class":442}," getProduct",[226,1600,402],{"class":310},[226,1602,1603],{"class":405},"req",[226,1605,409],{"class":310},[226,1607,1608],{"class":232}," Request",[226,1610,982],{"class":310},[226,1612,1613],{"class":405}," params",[226,1615,409],{"class":310},[226,1617,311],{"class":310},[226,1619,1620],{"class":442}," id",[226,1622,409],{"class":310},[226,1624,679],{"class":232},[226,1626,1627],{"class":310}," })",[226,1629,420],{"class":310},[226,1631,1632,1634,1636,1638,1640,1643,1645,1648,1650,1653,1655],{"class":228,"line":1064},[226,1633,688],{"class":394},[226,1635,691],{"class":314},[226,1637,474],{"class":310},[226,1639,696],{"class":310},[226,1641,1642],{"class":236},"products:",[226,1644,702],{"class":310},[226,1646,1647],{"class":314},"params",[226,1649,436],{"class":310},[226,1651,1652],{"class":314},"id",[226,1654,707],{"class":310},[226,1656,333],{"class":310},[226,1658,1659],{"class":228,"line":1079},[226,1660,714],{"class":442},[226,1662,1663,1665,1667,1669,1671,1673,1675,1677,1679,1681,1683,1685,1687],{"class":228,"line":1097},[226,1664,688],{"class":394},[226,1666,726],{"class":314},[226,1668,474],{"class":310},[226,1670,731],{"class":306},[226,1672,734],{"class":310},[226,1674,737],{"class":314},[226,1676,436],{"class":310},[226,1678,742],{"class":398},[226,1680,745],{"class":310},[226,1682,1377],{"class":232},[226,1684,751],{"class":310},[226,1686,402],{"class":442},[226,1688,517],{"class":310},[226,1690,1691,1693,1695,1697,1699,1701],{"class":228,"line":1106},[226,1692,760],{"class":442},[226,1694,409],{"class":310},[226,1696,324],{"class":310},[226,1698,530],{"class":236},[226,1700,330],{"class":310},[226,1702,535],{"class":310},[226,1704,1705,1707,1709],{"class":228,"line":1111},[226,1706,775],{"class":442},[226,1708,409],{"class":310},[226,1710,780],{"class":314},[226,1712,1713,1715,1717],{"class":228,"line":1120},[226,1714,785],{"class":310},[226,1716,448],{"class":442},[226,1718,333],{"class":310},[226,1720,1721,1723,1725,1727,1729],{"class":228,"line":1125},[226,1722,794],{"class":306},[226,1724,797],{"class":442},[226,1726,800],{"class":314},[226,1728,803],{"class":442},[226,1730,517],{"class":310},[226,1732,1734,1736,1738,1740,1742,1744,1746,1748],{"class":228,"line":1733},46,[226,1735,810],{"class":306},[226,1737,1435],{"class":314},[226,1739,436],{"class":310},[226,1741,1440],{"class":398},[226,1743,402],{"class":442},[226,1745,800],{"class":314},[226,1747,448],{"class":442},[226,1749,333],{"class":310},[226,1751,1753],{"class":228,"line":1752},47,[226,1754,820],{"class":310},[226,1756,1758],{"class":228,"line":1757},48,[226,1759,714],{"class":442},[226,1761,1763,1765,1768,1770,1772,1774,1776,1778,1781,1783,1785,1787,1789,1791],{"class":228,"line":1762},49,[226,1764,688],{"class":394},[226,1766,1767],{"class":314}," product",[226,1769,474],{"class":310},[226,1771,731],{"class":306},[226,1773,734],{"class":310},[226,1775,1477],{"class":314},[226,1777,436],{"class":310},[226,1779,1780],{"class":398},"findById",[226,1782,402],{"class":442},[226,1784,1647],{"class":314},[226,1786,436],{"class":310},[226,1788,1652],{"class":314},[226,1790,448],{"class":442},[226,1792,333],{"class":310},[226,1794,1796,1798,1800,1803,1805],{"class":228,"line":1795},50,[226,1797,794],{"class":306},[226,1799,797],{"class":442},[226,1801,1802],{"class":314},"product",[226,1804,803],{"class":442},[226,1806,517],{"class":310},[226,1808,1810,1813,1815,1817,1819,1821,1823],{"class":228,"line":1809},51,[226,1811,1812],{"class":306},"      await",[226,1814,734],{"class":310},[226,1816,737],{"class":314},[226,1818,436],{"class":310},[226,1820,887],{"class":398},[226,1822,402],{"class":442},[226,1824,517],{"class":310},[226,1826,1828,1831,1833,1835,1837,1839],{"class":228,"line":1827},52,[226,1829,1830],{"class":442},"        storage",[226,1832,409],{"class":310},[226,1834,324],{"class":310},[226,1836,530],{"class":236},[226,1838,330],{"class":310},[226,1840,535],{"class":310},[226,1842,1844,1847,1849,1851],{"class":228,"line":1843},53,[226,1845,1846],{"class":442},"        key",[226,1848,409],{"class":310},[226,1850,691],{"class":314},[226,1852,535],{"class":310},[226,1854,1856,1859,1861],{"class":228,"line":1855},54,[226,1857,1858],{"class":442},"        value",[226,1860,409],{"class":310},[226,1862,1863],{"class":314}," product\n",[226,1865,1867,1870,1872],{"class":228,"line":1866},55,[226,1868,1869],{"class":310},"      }",[226,1871,448],{"class":442},[226,1873,333],{"class":310},[226,1875,1877],{"class":228,"line":1876},56,[226,1878,820],{"class":310},[226,1880,1882],{"class":228,"line":1881},57,[226,1883,714],{"class":442},[226,1885,1887,1889,1891,1893,1895,1897,1899,1901],{"class":228,"line":1886},58,[226,1888,948],{"class":306},[226,1890,1435],{"class":314},[226,1892,436],{"class":310},[226,1894,1440],{"class":398},[226,1896,402],{"class":442},[226,1898,1802],{"class":314},[226,1900,448],{"class":442},[226,1902,333],{"class":310},[226,1904,1906],{"class":228,"line":1905},59,[226,1907,958],{"class":310},[226,1909,1911],{"class":228,"line":1910},60,[226,1912,562],{"class":310},[208,1914,1916],{"id":1915},"core-concepts","Core Concepts",[287,1918,445],{"id":1919},"storagemanager",[204,1921,1922],{},"The StorageManager is the central service for managing storage instances. It handles mounting and accessing storage backends. Think of it as a registry for all your storage providers.",[215,1924,1926],{"className":296,"code":1925,"language":299,"meta":221,"style":221},"import { StorageManager } from '@vercube\u002Fstorage';\nimport { MemoryStorage } from '@vercube\u002Fstorage\u002Fdrivers\u002FMemoryStorage';\n\nconst storageManager = container.get(StorageManager);\n\n\u002F\u002F Mount storage backends\nstorageManager.mount({ name: 'cache', storage: MemoryStorage });\nstorageManager.mount({ name: 'sessions', storage: MemoryStorage });\n\n\u002F\u002F Use storage operations directly through StorageManager\nawait storageManager.setItem({ storage: 'cache', key: 'foo', value: 'bar' });\nconst value = await storageManager.getItem({ storage: 'cache', key: 'foo' });\n\n\u002F\u002F Or get a storage instance directly\nconst cache = storageManager.getStorage('cache');\n",[223,1927,1928,1948,1968,1972,1994,1998,2003,2044,2081,2085,2090,2149,2198,2202,2207],{"__ignoreMap":221},[226,1929,1930,1932,1934,1936,1938,1940,1942,1944,1946],{"class":228,"line":229},[226,1931,307],{"class":306},[226,1933,311],{"class":310},[226,1935,343],{"class":314},[226,1937,318],{"class":310},[226,1939,321],{"class":306},[226,1941,324],{"class":310},[226,1943,352],{"class":236},[226,1945,330],{"class":310},[226,1947,333],{"class":310},[226,1949,1950,1952,1954,1956,1958,1960,1962,1964,1966],{"class":228,"line":336},[226,1951,307],{"class":306},[226,1953,311],{"class":310},[226,1955,366],{"class":314},[226,1957,318],{"class":310},[226,1959,321],{"class":306},[226,1961,324],{"class":310},[226,1963,375],{"class":236},[226,1965,330],{"class":310},[226,1967,333],{"class":310},[226,1969,1970],{"class":228,"line":359},[226,1971,385],{"emptyLinePlaceholder":56},[226,1973,1974,1977,1980,1983,1985,1987,1989,1992],{"class":228,"line":382},[226,1975,1976],{"class":394},"const",[226,1978,1979],{"class":314}," storageManager ",[226,1981,1982],{"class":310},"=",[226,1984,477],{"class":314},[226,1986,436],{"class":310},[226,1988,482],{"class":398},[226,1990,1991],{"class":314},"(StorageManager)",[226,1993,333],{"class":310},[226,1995,1996],{"class":228,"line":388},[226,1997,385],{"emptyLinePlaceholder":56},[226,1999,2000],{"class":228,"line":423},[226,2001,2002],{"class":426},"\u002F\u002F Mount storage backends\n",[226,2004,2005,2007,2009,2011,2013,2016,2019,2021,2023,2025,2027,2029,2032,2034,2037,2040,2042],{"class":228,"line":430},[226,2006,737],{"class":314},[226,2008,436],{"class":310},[226,2010,512],{"class":398},[226,2012,402],{"class":314},[226,2014,2015],{"class":310},"{",[226,2017,2018],{"class":442}," name",[226,2020,409],{"class":310},[226,2022,324],{"class":310},[226,2024,530],{"class":236},[226,2026,330],{"class":310},[226,2028,982],{"class":310},[226,2030,2031],{"class":442}," storage",[226,2033,409],{"class":310},[226,2035,2036],{"class":314}," MemoryStorage ",[226,2038,2039],{"class":310},"}",[226,2041,448],{"class":314},[226,2043,333],{"class":310},[226,2045,2046,2048,2050,2052,2054,2056,2058,2060,2062,2065,2067,2069,2071,2073,2075,2077,2079],{"class":228,"line":453},[226,2047,737],{"class":314},[226,2049,436],{"class":310},[226,2051,512],{"class":398},[226,2053,402],{"class":314},[226,2055,2015],{"class":310},[226,2057,2018],{"class":442},[226,2059,409],{"class":310},[226,2061,324],{"class":310},[226,2063,2064],{"class":236},"sessions",[226,2066,330],{"class":310},[226,2068,982],{"class":310},[226,2070,2031],{"class":442},[226,2072,409],{"class":310},[226,2074,2036],{"class":314},[226,2076,2039],{"class":310},[226,2078,448],{"class":314},[226,2080,333],{"class":310},[226,2082,2083],{"class":228,"line":459},[226,2084,385],{"emptyLinePlaceholder":56},[226,2086,2087],{"class":228,"line":465},[226,2088,2089],{"class":426},"\u002F\u002F Use storage operations directly through StorageManager\n",[226,2091,2092,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2120,2122,2124,2127,2129,2131,2134,2136,2138,2141,2143,2145,2147],{"class":228,"line":493},[226,2093,2094],{"class":306},"await",[226,2096,471],{"class":314},[226,2098,436],{"class":310},[226,2100,887],{"class":398},[226,2102,402],{"class":314},[226,2104,2015],{"class":310},[226,2106,2031],{"class":442},[226,2108,409],{"class":310},[226,2110,324],{"class":310},[226,2112,530],{"class":236},[226,2114,330],{"class":310},[226,2116,982],{"class":310},[226,2118,2119],{"class":442}," key",[226,2121,409],{"class":310},[226,2123,324],{"class":310},[226,2125,2126],{"class":236},"foo",[226,2128,330],{"class":310},[226,2130,982],{"class":310},[226,2132,2133],{"class":442}," value",[226,2135,409],{"class":310},[226,2137,324],{"class":310},[226,2139,2140],{"class":236},"bar",[226,2142,330],{"class":310},[226,2144,318],{"class":310},[226,2146,448],{"class":314},[226,2148,333],{"class":310},[226,2150,2151,2153,2156,2158,2160,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182,2184,2186,2188,2190,2192,2194,2196],{"class":228,"line":498},[226,2152,1976],{"class":394},[226,2154,2155],{"class":314}," value ",[226,2157,1982],{"class":310},[226,2159,731],{"class":306},[226,2161,471],{"class":314},[226,2163,436],{"class":310},[226,2165,742],{"class":398},[226,2167,402],{"class":314},[226,2169,2015],{"class":310},[226,2171,2031],{"class":442},[226,2173,409],{"class":310},[226,2175,324],{"class":310},[226,2177,530],{"class":236},[226,2179,330],{"class":310},[226,2181,982],{"class":310},[226,2183,2119],{"class":442},[226,2185,409],{"class":310},[226,2187,324],{"class":310},[226,2189,2126],{"class":236},[226,2191,330],{"class":310},[226,2193,318],{"class":310},[226,2195,448],{"class":314},[226,2197,333],{"class":310},[226,2199,2200],{"class":228,"line":504},[226,2201,385],{"emptyLinePlaceholder":56},[226,2203,2204],{"class":228,"line":520},[226,2205,2206],{"class":426},"\u002F\u002F Or get a storage instance directly\n",[226,2208,2209,2211,2214,2216,2218,2220,2223,2225,2227,2229,2231,2233],{"class":228,"line":538},[226,2210,1976],{"class":394},[226,2212,2213],{"class":314}," cache ",[226,2215,1982],{"class":310},[226,2217,471],{"class":314},[226,2219,436],{"class":310},[226,2221,2222],{"class":398},"getStorage",[226,2224,402],{"class":314},[226,2226,330],{"class":310},[226,2228,530],{"class":236},[226,2230,330],{"class":310},[226,2232,448],{"class":314},[226,2234,333],{"class":310},[287,2236,2238],{"id":2237},"storage-interface","Storage Interface",[204,2240,2241],{},"The Storage abstract class defines the interface for all storage implementations. Each storage backend must implement these core methods:",[2243,2244,2245,2255,2263,2271,2279,2287,2295],"ul",{},[2246,2247,2248,2254],"li",{},[2249,2250,2251],"strong",{},[223,2252,2253],{},"getItem()"," - Retrieve a value by key",[2246,2256,2257,2262],{},[2249,2258,2259],{},[223,2260,2261],{},"setItem()"," - Store a value with a key",[2246,2264,2265,2270],{},[2249,2266,2267],{},[223,2268,2269],{},"hasItem()"," - Check if a key exists",[2246,2272,2273,2278],{},[2249,2274,2275],{},[223,2276,2277],{},"deleteItem()"," - Delete a value by key",[2246,2280,2281,2286],{},[2249,2282,2283],{},[223,2284,2285],{},"getKeys()"," - List all keys",[2246,2288,2289,2294],{},[2249,2290,2291],{},[223,2292,2293],{},"clear()"," - Remove all items",[2246,2296,2297,2302],{},[2249,2298,2299],{},[223,2300,2301],{},"size()"," - Get the number of stored items",[287,2304,2306],{"id":2305},"type-safety","Type Safety",[204,2308,2309],{},"Vercube Storage is fully type-safe. You can specify the expected type when retrieving data:",[215,2311,2313],{"className":296,"code":2312,"language":299,"meta":221,"style":221},"interface UserProfile {\n  id: string;\n  name: string;\n  email: string;\n}\n\n\u002F\u002F Type-safe retrieval\nconst user = await storage.getItem\u003CUserProfile>('user:123');\n\u002F\u002F user is UserProfile | null\n\n\u002F\u002F Works with arrays too\nconst users = await storage.getItem\u003CUserProfile[]>('users:all');\n",[223,2314,2315,2325,2336,2347,2358,2362,2366,2371,2407,2412,2416,2421],{"__ignoreMap":221},[226,2316,2317,2320,2323],{"class":228,"line":229},[226,2318,2319],{"class":394},"interface",[226,2321,2322],{"class":232}," UserProfile",[226,2324,420],{"class":310},[226,2326,2327,2330,2332,2334],{"class":228,"line":336},[226,2328,2329],{"class":442},"  id",[226,2331,409],{"class":310},[226,2333,679],{"class":232},[226,2335,333],{"class":310},[226,2337,2338,2341,2343,2345],{"class":228,"line":359},[226,2339,2340],{"class":442},"  name",[226,2342,409],{"class":310},[226,2344,679],{"class":232},[226,2346,333],{"class":310},[226,2348,2349,2352,2354,2356],{"class":228,"line":382},[226,2350,2351],{"class":442},"  email",[226,2353,409],{"class":310},[226,2355,679],{"class":232},[226,2357,333],{"class":310},[226,2359,2360],{"class":228,"line":388},[226,2361,562],{"class":310},[226,2363,2364],{"class":228,"line":423},[226,2365,385],{"emptyLinePlaceholder":56},[226,2367,2368],{"class":228,"line":430},[226,2369,2370],{"class":426},"\u002F\u002F Type-safe retrieval\n",[226,2372,2373,2375,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396,2398,2401,2403,2405],{"class":228,"line":453},[226,2374,1976],{"class":394},[226,2376,2377],{"class":314}," user ",[226,2379,1982],{"class":310},[226,2381,731],{"class":306},[226,2383,2031],{"class":314},[226,2385,436],{"class":310},[226,2387,742],{"class":398},[226,2389,745],{"class":310},[226,2391,748],{"class":232},[226,2393,751],{"class":310},[226,2395,402],{"class":314},[226,2397,330],{"class":310},[226,2399,2400],{"class":236},"user:123",[226,2402,330],{"class":310},[226,2404,448],{"class":314},[226,2406,333],{"class":310},[226,2408,2409],{"class":228,"line":459},[226,2410,2411],{"class":426},"\u002F\u002F user is UserProfile | null\n",[226,2413,2414],{"class":228,"line":465},[226,2415,385],{"emptyLinePlaceholder":56},[226,2417,2418],{"class":228,"line":493},[226,2419,2420],{"class":426},"\u002F\u002F Works with arrays too\n",[226,2422,2423,2425,2428,2430,2432,2434,2436,2438,2440,2442,2444,2446,2448,2450,2453,2455,2457],{"class":228,"line":498},[226,2424,1976],{"class":394},[226,2426,2427],{"class":314}," users ",[226,2429,1982],{"class":310},[226,2431,731],{"class":306},[226,2433,2031],{"class":314},[226,2435,436],{"class":310},[226,2437,742],{"class":398},[226,2439,745],{"class":310},[226,2441,748],{"class":232},[226,2443,1380],{"class":314},[226,2445,751],{"class":310},[226,2447,402],{"class":314},[226,2449,330],{"class":310},[226,2451,2452],{"class":236},"users:all",[226,2454,330],{"class":310},[226,2456,448],{"class":314},[226,2458,333],{"class":310},[287,2460,2462],{"id":2461},"ioc-container-integration","IOC Container Integration",[204,2464,2465,2466,2469],{},"The Storage module integrates seamlessly with Vercube's dependency injection system. You register the StorageManager in the IOC container and inject it wherever needed using the ",[223,2467,2468],{},"@Inject"," decorator.",[208,2471,33],{"id":2472},"configuration",[287,2474,2476],{"id":2475},"basic-configuration","Basic Configuration",[204,2478,2479],{},"Configure storage when setting up your application:",[215,2481,2483],{"className":296,"code":2482,"language":299,"meta":221,"style":221},"import { Container } from '@vercube\u002Fdi';\nimport { StorageManager } from '@vercube\u002Fstorage';\nimport { MemoryStorage } from '@vercube\u002Fstorage\u002Fdrivers\u002FMemoryStorage';\n\nexport function setupContainer(container: Container): void {\n  container.bind(StorageManager);\n  \n  const storageManager = container.get(StorageManager);\n  \n  \u002F\u002F Mount with basic configuration\n  storageManager.mount({\n    name: 'cache',\n    storage: MemoryStorage\n  });\n}\n",[223,2484,2485,2505,2525,2545,2549,2571,2587,2591,2613,2617,2622,2634,2648,2656,2664],{"__ignoreMap":221},[226,2486,2487,2489,2491,2493,2495,2497,2499,2501,2503],{"class":228,"line":229},[226,2488,307],{"class":306},[226,2490,311],{"class":310},[226,2492,315],{"class":314},[226,2494,318],{"class":310},[226,2496,321],{"class":306},[226,2498,324],{"class":310},[226,2500,327],{"class":236},[226,2502,330],{"class":310},[226,2504,333],{"class":310},[226,2506,2507,2509,2511,2513,2515,2517,2519,2521,2523],{"class":228,"line":336},[226,2508,307],{"class":306},[226,2510,311],{"class":310},[226,2512,343],{"class":314},[226,2514,318],{"class":310},[226,2516,321],{"class":306},[226,2518,324],{"class":310},[226,2520,352],{"class":236},[226,2522,330],{"class":310},[226,2524,333],{"class":310},[226,2526,2527,2529,2531,2533,2535,2537,2539,2541,2543],{"class":228,"line":359},[226,2528,307],{"class":306},[226,2530,311],{"class":310},[226,2532,366],{"class":314},[226,2534,318],{"class":310},[226,2536,321],{"class":306},[226,2538,324],{"class":310},[226,2540,375],{"class":236},[226,2542,330],{"class":310},[226,2544,333],{"class":310},[226,2546,2547],{"class":228,"line":382},[226,2548,385],{"emptyLinePlaceholder":56},[226,2550,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569],{"class":228,"line":388},[226,2552,391],{"class":306},[226,2554,395],{"class":394},[226,2556,399],{"class":398},[226,2558,402],{"class":310},[226,2560,406],{"class":405},[226,2562,409],{"class":310},[226,2564,315],{"class":232},[226,2566,414],{"class":310},[226,2568,417],{"class":232},[226,2570,420],{"class":310},[226,2572,2573,2575,2577,2579,2581,2583,2585],{"class":228,"line":423},[226,2574,433],{"class":314},[226,2576,436],{"class":310},[226,2578,439],{"class":398},[226,2580,402],{"class":442},[226,2582,445],{"class":314},[226,2584,448],{"class":442},[226,2586,333],{"class":310},[226,2588,2589],{"class":228,"line":430},[226,2590,456],{"class":442},[226,2592,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611],{"class":228,"line":453},[226,2594,468],{"class":394},[226,2596,471],{"class":314},[226,2598,474],{"class":310},[226,2600,477],{"class":314},[226,2602,436],{"class":310},[226,2604,482],{"class":398},[226,2606,402],{"class":442},[226,2608,445],{"class":314},[226,2610,448],{"class":442},[226,2612,333],{"class":310},[226,2614,2615],{"class":228,"line":459},[226,2616,456],{"class":442},[226,2618,2619],{"class":228,"line":465},[226,2620,2621],{"class":426},"  \u002F\u002F Mount with basic configuration\n",[226,2623,2624,2626,2628,2630,2632],{"class":228,"line":493},[226,2625,507],{"class":314},[226,2627,436],{"class":310},[226,2629,512],{"class":398},[226,2631,402],{"class":442},[226,2633,517],{"class":310},[226,2635,2636,2638,2640,2642,2644,2646],{"class":228,"line":498},[226,2637,523],{"class":442},[226,2639,409],{"class":310},[226,2641,324],{"class":310},[226,2643,530],{"class":236},[226,2645,330],{"class":310},[226,2647,535],{"class":310},[226,2649,2650,2652,2654],{"class":228,"line":504},[226,2651,541],{"class":442},[226,2653,409],{"class":310},[226,2655,546],{"class":314},[226,2657,2658,2660,2662],{"class":228,"line":520},[226,2659,552],{"class":310},[226,2661,448],{"class":442},[226,2663,333],{"class":310},[226,2665,2666],{"class":228,"line":538},[226,2667,562],{"class":310},[287,2669,2671],{"id":2670},"multiple-storage-backends","Multiple Storage Backends",[204,2673,2674],{},"You can mount multiple storage backends for different use cases:",[215,2676,2678],{"className":296,"code":2677,"language":299,"meta":221,"style":221},"import { StorageManager } from '@vercube\u002Fstorage';\nimport { MemoryStorage } from '@vercube\u002Fstorage\u002Fdrivers\u002FMemoryStorage';\n\nconst storageManager = container.get(StorageManager);\n\n\u002F\u002F Fast in-memory cache for frequently accessed data\nstorageManager.mount({\n  name: 'cache',\n  storage: MemoryStorage\n});\n\n\u002F\u002F Separate storage for user sessions\nstorageManager.mount({\n  name: 'sessions',\n  storage: MemoryStorage\n});\n\n\u002F\u002F Storage for temporary data\nstorageManager.mount({\n  name: 'temp',\n  storage: MemoryStorage\n});\n",[223,2679,2680,2700,2720,2724,2742,2746,2751,2763,2777,2786,2794,2798,2803,2815,2829,2837,2845,2849,2854,2866,2881,2889],{"__ignoreMap":221},[226,2681,2682,2684,2686,2688,2690,2692,2694,2696,2698],{"class":228,"line":229},[226,2683,307],{"class":306},[226,2685,311],{"class":310},[226,2687,343],{"class":314},[226,2689,318],{"class":310},[226,2691,321],{"class":306},[226,2693,324],{"class":310},[226,2695,352],{"class":236},[226,2697,330],{"class":310},[226,2699,333],{"class":310},[226,2701,2702,2704,2706,2708,2710,2712,2714,2716,2718],{"class":228,"line":336},[226,2703,307],{"class":306},[226,2705,311],{"class":310},[226,2707,366],{"class":314},[226,2709,318],{"class":310},[226,2711,321],{"class":306},[226,2713,324],{"class":310},[226,2715,375],{"class":236},[226,2717,330],{"class":310},[226,2719,333],{"class":310},[226,2721,2722],{"class":228,"line":359},[226,2723,385],{"emptyLinePlaceholder":56},[226,2725,2726,2728,2730,2732,2734,2736,2738,2740],{"class":228,"line":382},[226,2727,1976],{"class":394},[226,2729,1979],{"class":314},[226,2731,1982],{"class":310},[226,2733,477],{"class":314},[226,2735,436],{"class":310},[226,2737,482],{"class":398},[226,2739,1991],{"class":314},[226,2741,333],{"class":310},[226,2743,2744],{"class":228,"line":388},[226,2745,385],{"emptyLinePlaceholder":56},[226,2747,2748],{"class":228,"line":423},[226,2749,2750],{"class":426},"\u002F\u002F Fast in-memory cache for frequently accessed data\n",[226,2752,2753,2755,2757,2759,2761],{"class":228,"line":430},[226,2754,737],{"class":314},[226,2756,436],{"class":310},[226,2758,512],{"class":398},[226,2760,402],{"class":314},[226,2762,517],{"class":310},[226,2764,2765,2767,2769,2771,2773,2775],{"class":228,"line":453},[226,2766,2340],{"class":442},[226,2768,409],{"class":310},[226,2770,324],{"class":310},[226,2772,530],{"class":236},[226,2774,330],{"class":310},[226,2776,535],{"class":310},[226,2778,2779,2782,2784],{"class":228,"line":459},[226,2780,2781],{"class":442},"  storage",[226,2783,409],{"class":310},[226,2785,546],{"class":314},[226,2787,2788,2790,2792],{"class":228,"line":465},[226,2789,2039],{"class":310},[226,2791,448],{"class":314},[226,2793,333],{"class":310},[226,2795,2796],{"class":228,"line":493},[226,2797,385],{"emptyLinePlaceholder":56},[226,2799,2800],{"class":228,"line":498},[226,2801,2802],{"class":426},"\u002F\u002F Separate storage for user sessions\n",[226,2804,2805,2807,2809,2811,2813],{"class":228,"line":504},[226,2806,737],{"class":314},[226,2808,436],{"class":310},[226,2810,512],{"class":398},[226,2812,402],{"class":314},[226,2814,517],{"class":310},[226,2816,2817,2819,2821,2823,2825,2827],{"class":228,"line":520},[226,2818,2340],{"class":442},[226,2820,409],{"class":310},[226,2822,324],{"class":310},[226,2824,2064],{"class":236},[226,2826,330],{"class":310},[226,2828,535],{"class":310},[226,2830,2831,2833,2835],{"class":228,"line":538},[226,2832,2781],{"class":442},[226,2834,409],{"class":310},[226,2836,546],{"class":314},[226,2838,2839,2841,2843],{"class":228,"line":549},[226,2840,2039],{"class":310},[226,2842,448],{"class":314},[226,2844,333],{"class":310},[226,2846,2847],{"class":228,"line":559},[226,2848,385],{"emptyLinePlaceholder":56},[226,2850,2851],{"class":228,"line":817},[226,2852,2853],{"class":426},"\u002F\u002F Storage for temporary data\n",[226,2855,2856,2858,2860,2862,2864],{"class":228,"line":823},[226,2857,737],{"class":314},[226,2859,436],{"class":310},[226,2861,512],{"class":398},[226,2863,402],{"class":314},[226,2865,517],{"class":310},[226,2867,2868,2870,2872,2874,2877,2879],{"class":228,"line":828},[226,2869,2340],{"class":442},[226,2871,409],{"class":310},[226,2873,324],{"class":310},[226,2875,2876],{"class":236},"temp",[226,2878,330],{"class":310},[226,2880,535],{"class":310},[226,2882,2883,2885,2887],{"class":228,"line":834},[226,2884,2781],{"class":442},[226,2886,409],{"class":310},[226,2888,546],{"class":314},[226,2890,2891,2893,2895],{"class":228,"line":864},[226,2892,2039],{"class":310},[226,2894,448],{"class":314},[226,2896,333],{"class":310},[287,2898,2900],{"id":2899},"environment-specific-configuration","Environment-Specific Configuration",[204,2902,2903],{},"Configure different storage backends for different environments:",[215,2905,2907],{"className":296,"code":2906,"language":299,"meta":221,"style":221},"import { StorageManager } from '@vercube\u002Fstorage';\nimport { MemoryStorage } from '@vercube\u002Fstorage\u002Fdrivers\u002FMemoryStorage';\n\nconst isDevelopment = process.env.NODE_ENV === 'development';\nconst isProduction = process.env.NODE_ENV === 'production';\n\nconst storageManager = container.get(StorageManager);\n\nif (isDevelopment) {\n  \u002F\u002F Use memory storage in development\n  storageManager.mount({\n    name: 'cache',\n    storage: MemoryStorage\n  });\n} else {\n  \u002F\u002F Use persistent storage in production\n  storageManager.mount({\n    name: 'cache',\n    storage: MemoryStorage, \u002F\u002F Replace with your production storage\n    initOptions: {\n      \u002F\u002F Production-specific options\n    }\n  });\n}\n",[223,2908,2909,2929,2949,2953,2987,3017,3021,3039,3043,3053,3058,3070,3084,3092,3100,3109,3114,3126,3140,3153,3162,3167,3171,3179],{"__ignoreMap":221},[226,2910,2911,2913,2915,2917,2919,2921,2923,2925,2927],{"class":228,"line":229},[226,2912,307],{"class":306},[226,2914,311],{"class":310},[226,2916,343],{"class":314},[226,2918,318],{"class":310},[226,2920,321],{"class":306},[226,2922,324],{"class":310},[226,2924,352],{"class":236},[226,2926,330],{"class":310},[226,2928,333],{"class":310},[226,2930,2931,2933,2935,2937,2939,2941,2943,2945,2947],{"class":228,"line":336},[226,2932,307],{"class":306},[226,2934,311],{"class":310},[226,2936,366],{"class":314},[226,2938,318],{"class":310},[226,2940,321],{"class":306},[226,2942,324],{"class":310},[226,2944,375],{"class":236},[226,2946,330],{"class":310},[226,2948,333],{"class":310},[226,2950,2951],{"class":228,"line":359},[226,2952,385],{"emptyLinePlaceholder":56},[226,2954,2955,2957,2960,2962,2965,2967,2970,2972,2975,2978,2980,2983,2985],{"class":228,"line":382},[226,2956,1976],{"class":394},[226,2958,2959],{"class":314}," isDevelopment ",[226,2961,1982],{"class":310},[226,2963,2964],{"class":314}," process",[226,2966,436],{"class":310},[226,2968,2969],{"class":314},"env",[226,2971,436],{"class":310},[226,2973,2974],{"class":314},"NODE_ENV ",[226,2976,2977],{"class":310},"===",[226,2979,324],{"class":310},[226,2981,2982],{"class":236},"development",[226,2984,330],{"class":310},[226,2986,333],{"class":310},[226,2988,2989,2991,2994,2996,2998,3000,3002,3004,3006,3008,3010,3013,3015],{"class":228,"line":388},[226,2990,1976],{"class":394},[226,2992,2993],{"class":314}," isProduction ",[226,2995,1982],{"class":310},[226,2997,2964],{"class":314},[226,2999,436],{"class":310},[226,3001,2969],{"class":314},[226,3003,436],{"class":310},[226,3005,2974],{"class":314},[226,3007,2977],{"class":310},[226,3009,324],{"class":310},[226,3011,3012],{"class":236},"production",[226,3014,330],{"class":310},[226,3016,333],{"class":310},[226,3018,3019],{"class":228,"line":423},[226,3020,385],{"emptyLinePlaceholder":56},[226,3022,3023,3025,3027,3029,3031,3033,3035,3037],{"class":228,"line":430},[226,3024,1976],{"class":394},[226,3026,1979],{"class":314},[226,3028,1982],{"class":310},[226,3030,477],{"class":314},[226,3032,436],{"class":310},[226,3034,482],{"class":398},[226,3036,1991],{"class":314},[226,3038,333],{"class":310},[226,3040,3041],{"class":228,"line":453},[226,3042,385],{"emptyLinePlaceholder":56},[226,3044,3045,3048,3051],{"class":228,"line":459},[226,3046,3047],{"class":306},"if",[226,3049,3050],{"class":314}," (isDevelopment) ",[226,3052,517],{"class":310},[226,3054,3055],{"class":228,"line":465},[226,3056,3057],{"class":426},"  \u002F\u002F Use memory storage in development\n",[226,3059,3060,3062,3064,3066,3068],{"class":228,"line":493},[226,3061,507],{"class":314},[226,3063,436],{"class":310},[226,3065,512],{"class":398},[226,3067,402],{"class":442},[226,3069,517],{"class":310},[226,3071,3072,3074,3076,3078,3080,3082],{"class":228,"line":498},[226,3073,523],{"class":442},[226,3075,409],{"class":310},[226,3077,324],{"class":310},[226,3079,530],{"class":236},[226,3081,330],{"class":310},[226,3083,535],{"class":310},[226,3085,3086,3088,3090],{"class":228,"line":504},[226,3087,541],{"class":442},[226,3089,409],{"class":310},[226,3091,546],{"class":314},[226,3093,3094,3096,3098],{"class":228,"line":520},[226,3095,552],{"class":310},[226,3097,448],{"class":442},[226,3099,333],{"class":310},[226,3101,3102,3104,3107],{"class":228,"line":538},[226,3103,2039],{"class":310},[226,3105,3106],{"class":306}," else",[226,3108,420],{"class":310},[226,3110,3111],{"class":228,"line":549},[226,3112,3113],{"class":426},"  \u002F\u002F Use persistent storage in production\n",[226,3115,3116,3118,3120,3122,3124],{"class":228,"line":559},[226,3117,507],{"class":314},[226,3119,436],{"class":310},[226,3121,512],{"class":398},[226,3123,402],{"class":442},[226,3125,517],{"class":310},[226,3127,3128,3130,3132,3134,3136,3138],{"class":228,"line":817},[226,3129,523],{"class":442},[226,3131,409],{"class":310},[226,3133,324],{"class":310},[226,3135,530],{"class":236},[226,3137,330],{"class":310},[226,3139,535],{"class":310},[226,3141,3142,3144,3146,3148,3150],{"class":228,"line":823},[226,3143,541],{"class":442},[226,3145,409],{"class":310},[226,3147,366],{"class":314},[226,3149,982],{"class":310},[226,3151,3152],{"class":426}," \u002F\u002F Replace with your production storage\n",[226,3154,3155,3158,3160],{"class":228,"line":828},[226,3156,3157],{"class":442},"    initOptions",[226,3159,409],{"class":310},[226,3161,420],{"class":310},[226,3163,3164],{"class":228,"line":834},[226,3165,3166],{"class":426},"      \u002F\u002F Production-specific options\n",[226,3168,3169],{"class":228,"line":864},[226,3170,820],{"class":310},[226,3172,3173,3175,3177],{"class":228,"line":869},[226,3174,552],{"class":310},[226,3176,448],{"class":442},[226,3178,333],{"class":310},[226,3180,3181],{"class":228,"line":875},[226,3182,562],{"class":310},[208,3184,3186],{"id":3185},"storage-operations","Storage Operations",[287,3188,3190],{"id":3189},"basic-crud-operations","Basic CRUD Operations",[204,3192,3193],{},"You can use StorageManager methods directly with object parameters:",[215,3195,3197],{"className":296,"code":3196,"language":299,"meta":221,"style":221},"\u002F\u002F Create\u002FUpdate - setItem\nawait storageManager.setItem({\n  storage: 'cache',\n  key: 'user:123',\n  value: {\n    id: '123',\n    name: 'John Doe',\n    email: 'john@example.com'\n  }\n});\n\n\u002F\u002F Read - getItem\nconst user = await storageManager.getItem\u003CUser>({\n  storage: 'cache',\n  key: 'user:123'\n});\n\n\u002F\u002F Check existence - hasItem\nconst exists = await storageManager.hasItem({\n  storage: 'cache',\n  key: 'user:123'\n});\n\n\u002F\u002F Delete - deleteItem\nawait storageManager.deleteItem({\n  storage: 'cache',\n  key: 'user:123'\n});\n",[223,3198,3199,3204,3218,3232,3247,3256,3272,3287,3302,3306,3314,3318,3323,3350,3364,3376,3384,3388,3393,3415,3429,3441,3449,3453,3458,3472,3486,3498],{"__ignoreMap":221},[226,3200,3201],{"class":228,"line":229},[226,3202,3203],{"class":426},"\u002F\u002F Create\u002FUpdate - setItem\n",[226,3205,3206,3208,3210,3212,3214,3216],{"class":228,"line":336},[226,3207,2094],{"class":306},[226,3209,471],{"class":314},[226,3211,436],{"class":310},[226,3213,887],{"class":398},[226,3215,402],{"class":314},[226,3217,517],{"class":310},[226,3219,3220,3222,3224,3226,3228,3230],{"class":228,"line":359},[226,3221,2781],{"class":442},[226,3223,409],{"class":310},[226,3225,324],{"class":310},[226,3227,530],{"class":236},[226,3229,330],{"class":310},[226,3231,535],{"class":310},[226,3233,3234,3237,3239,3241,3243,3245],{"class":228,"line":382},[226,3235,3236],{"class":442},"  key",[226,3238,409],{"class":310},[226,3240,324],{"class":310},[226,3242,2400],{"class":236},[226,3244,330],{"class":310},[226,3246,535],{"class":310},[226,3248,3249,3252,3254],{"class":228,"line":388},[226,3250,3251],{"class":442},"  value",[226,3253,409],{"class":310},[226,3255,420],{"class":310},[226,3257,3258,3261,3263,3265,3268,3270],{"class":228,"line":423},[226,3259,3260],{"class":442},"    id",[226,3262,409],{"class":310},[226,3264,324],{"class":310},[226,3266,3267],{"class":236},"123",[226,3269,330],{"class":310},[226,3271,535],{"class":310},[226,3273,3274,3276,3278,3280,3283,3285],{"class":228,"line":430},[226,3275,523],{"class":442},[226,3277,409],{"class":310},[226,3279,324],{"class":310},[226,3281,3282],{"class":236},"John Doe",[226,3284,330],{"class":310},[226,3286,535],{"class":310},[226,3288,3289,3292,3294,3296,3299],{"class":228,"line":453},[226,3290,3291],{"class":442},"    email",[226,3293,409],{"class":310},[226,3295,324],{"class":310},[226,3297,3298],{"class":236},"john@example.com",[226,3300,3301],{"class":310},"'\n",[226,3303,3304],{"class":228,"line":459},[226,3305,958],{"class":310},[226,3307,3308,3310,3312],{"class":228,"line":465},[226,3309,2039],{"class":310},[226,3311,448],{"class":314},[226,3313,333],{"class":310},[226,3315,3316],{"class":228,"line":493},[226,3317,385],{"emptyLinePlaceholder":56},[226,3319,3320],{"class":228,"line":498},[226,3321,3322],{"class":426},"\u002F\u002F Read - getItem\n",[226,3324,3325,3327,3329,3331,3333,3335,3337,3339,3341,3344,3346,3348],{"class":228,"line":504},[226,3326,1976],{"class":394},[226,3328,2377],{"class":314},[226,3330,1982],{"class":310},[226,3332,731],{"class":306},[226,3334,471],{"class":314},[226,3336,436],{"class":310},[226,3338,742],{"class":398},[226,3340,745],{"class":310},[226,3342,3343],{"class":232},"User",[226,3345,751],{"class":310},[226,3347,402],{"class":314},[226,3349,517],{"class":310},[226,3351,3352,3354,3356,3358,3360,3362],{"class":228,"line":520},[226,3353,2781],{"class":442},[226,3355,409],{"class":310},[226,3357,324],{"class":310},[226,3359,530],{"class":236},[226,3361,330],{"class":310},[226,3363,535],{"class":310},[226,3365,3366,3368,3370,3372,3374],{"class":228,"line":538},[226,3367,3236],{"class":442},[226,3369,409],{"class":310},[226,3371,324],{"class":310},[226,3373,2400],{"class":236},[226,3375,3301],{"class":310},[226,3377,3378,3380,3382],{"class":228,"line":549},[226,3379,2039],{"class":310},[226,3381,448],{"class":314},[226,3383,333],{"class":310},[226,3385,3386],{"class":228,"line":559},[226,3387,385],{"emptyLinePlaceholder":56},[226,3389,3390],{"class":228,"line":817},[226,3391,3392],{"class":426},"\u002F\u002F Check existence - hasItem\n",[226,3394,3395,3397,3400,3402,3404,3406,3408,3411,3413],{"class":228,"line":823},[226,3396,1976],{"class":394},[226,3398,3399],{"class":314}," exists ",[226,3401,1982],{"class":310},[226,3403,731],{"class":306},[226,3405,471],{"class":314},[226,3407,436],{"class":310},[226,3409,3410],{"class":398},"hasItem",[226,3412,402],{"class":314},[226,3414,517],{"class":310},[226,3416,3417,3419,3421,3423,3425,3427],{"class":228,"line":828},[226,3418,2781],{"class":442},[226,3420,409],{"class":310},[226,3422,324],{"class":310},[226,3424,530],{"class":236},[226,3426,330],{"class":310},[226,3428,535],{"class":310},[226,3430,3431,3433,3435,3437,3439],{"class":228,"line":834},[226,3432,3236],{"class":442},[226,3434,409],{"class":310},[226,3436,324],{"class":310},[226,3438,2400],{"class":236},[226,3440,3301],{"class":310},[226,3442,3443,3445,3447],{"class":228,"line":864},[226,3444,2039],{"class":310},[226,3446,448],{"class":314},[226,3448,333],{"class":310},[226,3450,3451],{"class":228,"line":869},[226,3452,385],{"emptyLinePlaceholder":56},[226,3454,3455],{"class":228,"line":875},[226,3456,3457],{"class":426},"\u002F\u002F Delete - deleteItem\n",[226,3459,3460,3462,3464,3466,3468,3470],{"class":228,"line":894},[226,3461,2094],{"class":306},[226,3463,471],{"class":314},[226,3465,436],{"class":310},[226,3467,1057],{"class":398},[226,3469,402],{"class":314},[226,3471,517],{"class":310},[226,3473,3474,3476,3478,3480,3482,3484],{"class":228,"line":909},[226,3475,2781],{"class":442},[226,3477,409],{"class":310},[226,3479,324],{"class":310},[226,3481,530],{"class":236},[226,3483,330],{"class":310},[226,3485,535],{"class":310},[226,3487,3488,3490,3492,3494,3496],{"class":228,"line":920},[226,3489,3236],{"class":442},[226,3491,409],{"class":310},[226,3493,324],{"class":310},[226,3495,2400],{"class":236},[226,3497,3301],{"class":310},[226,3499,3500,3502,3504],{"class":228,"line":931},[226,3501,2039],{"class":310},[226,3503,448],{"class":314},[226,3505,333],{"class":310},[204,3507,3508],{},"Or get a storage instance and use it directly:",[215,3510,3512],{"className":296,"code":3511,"language":299,"meta":221,"style":221},"const storage = storageManager.getStorage('cache');\n\nawait storage.setItem('user:123', { name: 'John' });\nconst user = await storage.getItem\u003CUser>('user:123');\nawait storage.deleteItem('user:123');\n",[223,3513,3514,3541,3545,3584,3618],{"__ignoreMap":221},[226,3515,3516,3518,3521,3523,3525,3527,3529,3531,3533,3535,3537,3539],{"class":228,"line":229},[226,3517,1976],{"class":394},[226,3519,3520],{"class":314}," storage ",[226,3522,1982],{"class":310},[226,3524,471],{"class":314},[226,3526,436],{"class":310},[226,3528,2222],{"class":398},[226,3530,402],{"class":314},[226,3532,330],{"class":310},[226,3534,530],{"class":236},[226,3536,330],{"class":310},[226,3538,448],{"class":314},[226,3540,333],{"class":310},[226,3542,3543],{"class":228,"line":336},[226,3544,385],{"emptyLinePlaceholder":56},[226,3546,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573,3576,3578,3580,3582],{"class":228,"line":359},[226,3548,2094],{"class":306},[226,3550,2031],{"class":314},[226,3552,436],{"class":310},[226,3554,887],{"class":398},[226,3556,402],{"class":314},[226,3558,330],{"class":310},[226,3560,2400],{"class":236},[226,3562,330],{"class":310},[226,3564,982],{"class":310},[226,3566,311],{"class":310},[226,3568,2018],{"class":442},[226,3570,409],{"class":310},[226,3572,324],{"class":310},[226,3574,3575],{"class":236},"John",[226,3577,330],{"class":310},[226,3579,318],{"class":310},[226,3581,448],{"class":314},[226,3583,333],{"class":310},[226,3585,3586,3588,3590,3592,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614,3616],{"class":228,"line":382},[226,3587,1976],{"class":394},[226,3589,2377],{"class":314},[226,3591,1982],{"class":310},[226,3593,731],{"class":306},[226,3595,2031],{"class":314},[226,3597,436],{"class":310},[226,3599,742],{"class":398},[226,3601,745],{"class":310},[226,3603,3343],{"class":232},[226,3605,751],{"class":310},[226,3607,402],{"class":314},[226,3609,330],{"class":310},[226,3611,2400],{"class":236},[226,3613,330],{"class":310},[226,3615,448],{"class":314},[226,3617,333],{"class":310},[226,3619,3620,3622,3624,3626,3628,3630,3632,3634,3636,3638],{"class":228,"line":388},[226,3621,2094],{"class":306},[226,3623,2031],{"class":314},[226,3625,436],{"class":310},[226,3627,1057],{"class":398},[226,3629,402],{"class":314},[226,3631,330],{"class":310},[226,3633,2400],{"class":236},[226,3635,330],{"class":310},[226,3637,448],{"class":314},[226,3639,333],{"class":310},[287,3641,3643],{"id":3642},"working-with-keys","Working with Keys",[215,3645,3647],{"className":296,"code":3646,"language":299,"meta":221,"style":221},"\u002F\u002F Get all keys from storage\nconst allKeys = await storageManager.getKeys({ storage: 'cache' });\nconsole.log(allKeys); \u002F\u002F ['user:1', 'user:2', 'product:1', ...]\n\n\u002F\u002F Filter keys by prefix manually\nconst userKeys = allKeys.filter(key => key.startsWith('user:'));\nconsole.log(userKeys); \u002F\u002F ['user:1', 'user:2', ...]\n\n\u002F\u002F Get storage size\nconst count = await storageManager.size({ storage: 'cache' });\nconsole.log(count); \u002F\u002F 5\n\n\u002F\u002F Clear all items\nawait storageManager.clear({ storage: 'cache' });\n",[223,3648,3649,3654,3692,3711,3715,3720,3765,3781,3785,3790,3828,3844,3848,3853],{"__ignoreMap":221},[226,3650,3651],{"class":228,"line":229},[226,3652,3653],{"class":426},"\u002F\u002F Get all keys from storage\n",[226,3655,3656,3658,3661,3663,3665,3667,3669,3672,3674,3676,3678,3680,3682,3684,3686,3688,3690],{"class":228,"line":336},[226,3657,1976],{"class":394},[226,3659,3660],{"class":314}," allKeys ",[226,3662,1982],{"class":310},[226,3664,731],{"class":306},[226,3666,471],{"class":314},[226,3668,436],{"class":310},[226,3670,3671],{"class":398},"getKeys",[226,3673,402],{"class":314},[226,3675,2015],{"class":310},[226,3677,2031],{"class":442},[226,3679,409],{"class":310},[226,3681,324],{"class":310},[226,3683,530],{"class":236},[226,3685,330],{"class":310},[226,3687,318],{"class":310},[226,3689,448],{"class":314},[226,3691,333],{"class":310},[226,3693,3694,3697,3699,3702,3705,3708],{"class":228,"line":359},[226,3695,3696],{"class":314},"console",[226,3698,436],{"class":310},[226,3700,3701],{"class":398},"log",[226,3703,3704],{"class":314},"(allKeys)",[226,3706,3707],{"class":310},";",[226,3709,3710],{"class":426}," \u002F\u002F ['user:1', 'user:2', 'product:1', ...]\n",[226,3712,3713],{"class":228,"line":382},[226,3714,385],{"emptyLinePlaceholder":56},[226,3716,3717],{"class":228,"line":388},[226,3718,3719],{"class":426},"\u002F\u002F Filter keys by prefix manually\n",[226,3721,3722,3724,3727,3729,3732,3734,3737,3739,3742,3745,3747,3749,3752,3754,3756,3758,3760,3763],{"class":228,"line":423},[226,3723,1976],{"class":394},[226,3725,3726],{"class":314}," userKeys ",[226,3728,1982],{"class":310},[226,3730,3731],{"class":314}," allKeys",[226,3733,436],{"class":310},[226,3735,3736],{"class":398},"filter",[226,3738,402],{"class":314},[226,3740,3741],{"class":405},"key",[226,3743,3744],{"class":394}," =>",[226,3746,2119],{"class":314},[226,3748,436],{"class":310},[226,3750,3751],{"class":398},"startsWith",[226,3753,402],{"class":314},[226,3755,330],{"class":310},[226,3757,699],{"class":236},[226,3759,330],{"class":310},[226,3761,3762],{"class":314},"))",[226,3764,333],{"class":310},[226,3766,3767,3769,3771,3773,3776,3778],{"class":228,"line":430},[226,3768,3696],{"class":314},[226,3770,436],{"class":310},[226,3772,3701],{"class":398},[226,3774,3775],{"class":314},"(userKeys)",[226,3777,3707],{"class":310},[226,3779,3780],{"class":426}," \u002F\u002F ['user:1', 'user:2', ...]\n",[226,3782,3783],{"class":228,"line":453},[226,3784,385],{"emptyLinePlaceholder":56},[226,3786,3787],{"class":228,"line":459},[226,3788,3789],{"class":426},"\u002F\u002F Get storage size\n",[226,3791,3792,3794,3797,3799,3801,3803,3805,3808,3810,3812,3814,3816,3818,3820,3822,3824,3826],{"class":228,"line":465},[226,3793,1976],{"class":394},[226,3795,3796],{"class":314}," count ",[226,3798,1982],{"class":310},[226,3800,731],{"class":306},[226,3802,471],{"class":314},[226,3804,436],{"class":310},[226,3806,3807],{"class":398},"size",[226,3809,402],{"class":314},[226,3811,2015],{"class":310},[226,3813,2031],{"class":442},[226,3815,409],{"class":310},[226,3817,324],{"class":310},[226,3819,530],{"class":236},[226,3821,330],{"class":310},[226,3823,318],{"class":310},[226,3825,448],{"class":314},[226,3827,333],{"class":310},[226,3829,3830,3832,3834,3836,3839,3841],{"class":228,"line":493},[226,3831,3696],{"class":314},[226,3833,436],{"class":310},[226,3835,3701],{"class":398},[226,3837,3838],{"class":314},"(count)",[226,3840,3707],{"class":310},[226,3842,3843],{"class":426}," \u002F\u002F 5\n",[226,3845,3846],{"class":228,"line":498},[226,3847,385],{"emptyLinePlaceholder":56},[226,3849,3850],{"class":228,"line":504},[226,3851,3852],{"class":426},"\u002F\u002F Clear all items\n",[226,3854,3855,3857,3859,3861,3864,3866,3868,3870,3872,3874,3876,3878,3880,3882],{"class":228,"line":520},[226,3856,2094],{"class":306},[226,3858,471],{"class":314},[226,3860,436],{"class":310},[226,3862,3863],{"class":398},"clear",[226,3865,402],{"class":314},[226,3867,2015],{"class":310},[226,3869,2031],{"class":442},[226,3871,409],{"class":310},[226,3873,324],{"class":310},[226,3875,530],{"class":236},[226,3877,330],{"class":310},[226,3879,318],{"class":310},[226,3881,448],{"class":314},[226,3883,333],{"class":310},[208,3885,3887],{"id":3886},"advanced-patterns","Advanced Patterns",[287,3889,3891],{"id":3890},"cache-aside-pattern","Cache-Aside Pattern",[204,3893,3894],{},"Implement cache-aside (lazy-loading) pattern for database queries:",[215,3896,3898],{"className":296,"code":3897,"language":299,"meta":221,"style":221},"export class ProductRepository {\n  @Inject(StorageManager)\n  private storageManager!: StorageManager;\n  \n  @Inject(Database)\n  private database!: Database;\n  \n  async findById(id: string): Promise\u003CProduct | null> {\n    const cacheKey = `product:${id}`;\n    \n    \u002F\u002F 1. Check cache first\n    const cached = await this.storageManager.getItem\u003CProduct>({\n      storage: 'cache',\n      key: cacheKey\n    });\n    if (cached) {\n      return cached;\n    }\n    \n    \u002F\u002F 2. Cache miss - fetch from database\n    const product = await this.database.products.findById(id);\n    \n    \u002F\u002F 3. Store in cache for next time\n    if (product) {\n      await this.storageManager.setItem({\n        storage: 'cache',\n        key: cacheKey,\n        value: product\n      });\n    }\n    \n    return product;\n  }\n  \n  async update(id: string, data: UpdateProductDto): Promise\u003CProduct> {\n    \u002F\u002F Update database\n    const product = await this.database.products.update(id, data);\n    \n    \u002F\u002F Invalidate cache\n    await this.storageManager.deleteItem({\n      storage: 'cache',\n      key: `product:${id}`\n    });\n    \n    return product;\n  }\n}\n",[223,3899,3900,3911,3919,3931,3935,3944,3958,3962,3996,4017,4021,4026,4054,4068,4076,4084,4096,4104,4108,4112,4117,4147,4151,4156,4168,4184,4198,4208,4216,4224,4228,4232,4240,4244,4248,4284,4289,4324,4328,4332,4348,4362,4378,4386,4390,4398,4402],{"__ignoreMap":221},[226,3901,3902,3904,3906,3909],{"class":228,"line":229},[226,3903,391],{"class":306},[226,3905,627],{"class":394},[226,3907,3908],{"class":232}," ProductRepository",[226,3910,420],{"class":310},[226,3912,3913,3915,3917],{"class":228,"line":336},[226,3914,637],{"class":310},[226,3916,640],{"class":398},[226,3918,643],{"class":314},[226,3920,3921,3923,3925,3927,3929],{"class":228,"line":359},[226,3922,648],{"class":394},[226,3924,471],{"class":442},[226,3926,653],{"class":310},[226,3928,343],{"class":232},[226,3930,333],{"class":310},[226,3932,3933],{"class":228,"line":382},[226,3934,456],{"class":314},[226,3936,3937,3939,3941],{"class":228,"line":388},[226,3938,637],{"class":310},[226,3940,640],{"class":398},[226,3942,3943],{"class":314},"(Database)\n",[226,3945,3946,3948,3951,3953,3956],{"class":228,"line":423},[226,3947,648],{"class":394},[226,3949,3950],{"class":442}," database",[226,3952,653],{"class":310},[226,3954,3955],{"class":232}," Database",[226,3957,333],{"class":310},[226,3959,3960],{"class":228,"line":430},[226,3961,456],{"class":314},[226,3963,3964,3966,3969,3971,3973,3975,3977,3979,3982,3984,3986,3989,3992,3994],{"class":228,"line":453},[226,3965,666],{"class":394},[226,3967,3968],{"class":442}," findById",[226,3970,402],{"class":310},[226,3972,1652],{"class":405},[226,3974,409],{"class":310},[226,3976,679],{"class":232},[226,3978,414],{"class":310},[226,3980,3981],{"class":232}," Promise",[226,3983,745],{"class":310},[226,3985,1377],{"class":232},[226,3987,3988],{"class":310}," |",[226,3990,3991],{"class":232}," null",[226,3993,751],{"class":310},[226,3995,420],{"class":310},[226,3997,3998,4000,4002,4004,4006,4009,4011,4013,4015],{"class":228,"line":459},[226,3999,688],{"class":394},[226,4001,691],{"class":314},[226,4003,474],{"class":310},[226,4005,696],{"class":310},[226,4007,4008],{"class":236},"product:",[226,4010,702],{"class":310},[226,4012,1652],{"class":314},[226,4014,707],{"class":310},[226,4016,333],{"class":310},[226,4018,4019],{"class":228,"line":465},[226,4020,714],{"class":442},[226,4022,4023],{"class":228,"line":493},[226,4024,4025],{"class":426},"    \u002F\u002F 1. Check cache first\n",[226,4027,4028,4030,4032,4034,4036,4038,4040,4042,4044,4046,4048,4050,4052],{"class":228,"line":498},[226,4029,688],{"class":394},[226,4031,726],{"class":314},[226,4033,474],{"class":310},[226,4035,731],{"class":306},[226,4037,734],{"class":310},[226,4039,737],{"class":314},[226,4041,436],{"class":310},[226,4043,742],{"class":398},[226,4045,745],{"class":310},[226,4047,1377],{"class":232},[226,4049,751],{"class":310},[226,4051,402],{"class":442},[226,4053,517],{"class":310},[226,4055,4056,4058,4060,4062,4064,4066],{"class":228,"line":504},[226,4057,760],{"class":442},[226,4059,409],{"class":310},[226,4061,324],{"class":310},[226,4063,530],{"class":236},[226,4065,330],{"class":310},[226,4067,535],{"class":310},[226,4069,4070,4072,4074],{"class":228,"line":520},[226,4071,775],{"class":442},[226,4073,409],{"class":310},[226,4075,780],{"class":314},[226,4077,4078,4080,4082],{"class":228,"line":538},[226,4079,785],{"class":310},[226,4081,448],{"class":442},[226,4083,333],{"class":310},[226,4085,4086,4088,4090,4092,4094],{"class":228,"line":549},[226,4087,794],{"class":306},[226,4089,797],{"class":442},[226,4091,800],{"class":314},[226,4093,803],{"class":442},[226,4095,517],{"class":310},[226,4097,4098,4100,4102],{"class":228,"line":559},[226,4099,810],{"class":306},[226,4101,726],{"class":314},[226,4103,333],{"class":310},[226,4105,4106],{"class":228,"line":817},[226,4107,820],{"class":310},[226,4109,4110],{"class":228,"line":823},[226,4111,714],{"class":442},[226,4113,4114],{"class":228,"line":828},[226,4115,4116],{"class":426},"    \u002F\u002F 2. Cache miss - fetch from database\n",[226,4118,4119,4121,4123,4125,4127,4129,4131,4133,4135,4137,4139,4141,4143,4145],{"class":228,"line":834},[226,4120,688],{"class":394},[226,4122,1767],{"class":314},[226,4124,474],{"class":310},[226,4126,731],{"class":306},[226,4128,734],{"class":310},[226,4130,848],{"class":314},[226,4132,436],{"class":310},[226,4134,1562],{"class":314},[226,4136,436],{"class":310},[226,4138,1780],{"class":398},[226,4140,402],{"class":442},[226,4142,1652],{"class":314},[226,4144,448],{"class":442},[226,4146,333],{"class":310},[226,4148,4149],{"class":228,"line":864},[226,4150,714],{"class":442},[226,4152,4153],{"class":228,"line":869},[226,4154,4155],{"class":426},"    \u002F\u002F 3. Store in cache for next time\n",[226,4157,4158,4160,4162,4164,4166],{"class":228,"line":875},[226,4159,794],{"class":306},[226,4161,797],{"class":442},[226,4163,1802],{"class":314},[226,4165,803],{"class":442},[226,4167,517],{"class":310},[226,4169,4170,4172,4174,4176,4178,4180,4182],{"class":228,"line":894},[226,4171,1812],{"class":306},[226,4173,734],{"class":310},[226,4175,737],{"class":314},[226,4177,436],{"class":310},[226,4179,887],{"class":398},[226,4181,402],{"class":442},[226,4183,517],{"class":310},[226,4185,4186,4188,4190,4192,4194,4196],{"class":228,"line":909},[226,4187,1830],{"class":442},[226,4189,409],{"class":310},[226,4191,324],{"class":310},[226,4193,530],{"class":236},[226,4195,330],{"class":310},[226,4197,535],{"class":310},[226,4199,4200,4202,4204,4206],{"class":228,"line":920},[226,4201,1846],{"class":442},[226,4203,409],{"class":310},[226,4205,691],{"class":314},[226,4207,535],{"class":310},[226,4209,4210,4212,4214],{"class":228,"line":931},[226,4211,1858],{"class":442},[226,4213,409],{"class":310},[226,4215,1863],{"class":314},[226,4217,4218,4220,4222],{"class":228,"line":940},[226,4219,1869],{"class":310},[226,4221,448],{"class":442},[226,4223,333],{"class":310},[226,4225,4226],{"class":228,"line":945},[226,4227,820],{"class":310},[226,4229,4230],{"class":228,"line":955},[226,4231,714],{"class":442},[226,4233,4234,4236,4238],{"class":228,"line":961},[226,4235,948],{"class":306},[226,4237,1767],{"class":314},[226,4239,333],{"class":310},[226,4241,4242],{"class":228,"line":966},[226,4243,958],{"class":310},[226,4245,4246],{"class":228,"line":997},[226,4247,456],{"class":314},[226,4249,4250,4252,4255,4257,4259,4261,4263,4265,4267,4269,4272,4274,4276,4278,4280,4282],{"class":228,"line":1003},[226,4251,666],{"class":394},[226,4253,4254],{"class":442}," update",[226,4256,402],{"class":310},[226,4258,1652],{"class":405},[226,4260,409],{"class":310},[226,4262,679],{"class":232},[226,4264,982],{"class":310},[226,4266,985],{"class":405},[226,4268,409],{"class":310},[226,4270,4271],{"class":232}," UpdateProductDto",[226,4273,414],{"class":310},[226,4275,3981],{"class":232},[226,4277,745],{"class":310},[226,4279,1377],{"class":232},[226,4281,751],{"class":310},[226,4283,420],{"class":310},[226,4285,4286],{"class":228,"line":1035},[226,4287,4288],{"class":426},"    \u002F\u002F Update database\n",[226,4290,4291,4293,4295,4297,4299,4301,4303,4305,4307,4309,4312,4314,4316,4318,4320,4322],{"class":228,"line":1040},[226,4292,688],{"class":394},[226,4294,1767],{"class":314},[226,4296,474],{"class":310},[226,4298,731],{"class":306},[226,4300,734],{"class":310},[226,4302,848],{"class":314},[226,4304,436],{"class":310},[226,4306,1562],{"class":314},[226,4308,436],{"class":310},[226,4310,4311],{"class":398},"update",[226,4313,402],{"class":442},[226,4315,1652],{"class":314},[226,4317,982],{"class":310},[226,4319,985],{"class":314},[226,4321,448],{"class":442},[226,4323,333],{"class":310},[226,4325,4326],{"class":228,"line":1046},[226,4327,714],{"class":442},[226,4329,4330],{"class":228,"line":1064},[226,4331,1043],{"class":426},[226,4333,4334,4336,4338,4340,4342,4344,4346],{"class":228,"line":1079},[226,4335,878],{"class":306},[226,4337,734],{"class":310},[226,4339,737],{"class":314},[226,4341,436],{"class":310},[226,4343,1057],{"class":398},[226,4345,402],{"class":442},[226,4347,517],{"class":310},[226,4349,4350,4352,4354,4356,4358,4360],{"class":228,"line":1097},[226,4351,760],{"class":442},[226,4353,409],{"class":310},[226,4355,324],{"class":310},[226,4357,530],{"class":236},[226,4359,330],{"class":310},[226,4361,535],{"class":310},[226,4363,4364,4366,4368,4370,4372,4374,4376],{"class":228,"line":1106},[226,4365,775],{"class":442},[226,4367,409],{"class":310},[226,4369,696],{"class":310},[226,4371,4008],{"class":236},[226,4373,702],{"class":310},[226,4375,1652],{"class":314},[226,4377,1094],{"class":310},[226,4379,4380,4382,4384],{"class":228,"line":1111},[226,4381,785],{"class":310},[226,4383,448],{"class":442},[226,4385,333],{"class":310},[226,4387,4388],{"class":228,"line":1120},[226,4389,714],{"class":442},[226,4391,4392,4394,4396],{"class":228,"line":1125},[226,4393,948],{"class":306},[226,4395,1767],{"class":314},[226,4397,333],{"class":310},[226,4399,4400],{"class":228,"line":1733},[226,4401,958],{"class":310},[226,4403,4404],{"class":228,"line":1752},[226,4405,562],{"class":310},[287,4407,4409],{"id":4408},"cache-warming","Cache Warming",[204,4411,4412],{},"Pre-populate cache with frequently accessed data:",[215,4414,4416],{"className":296,"code":4415,"language":299,"meta":221,"style":221},"export class CacheWarmingService {\n  @Inject(StorageManager)\n  private storageManager!: StorageManager;\n  \n  @Inject(ProductService)\n  private productService!: ProductService;\n  \n  async warmProductCache(): Promise\u003Cvoid> {\n    \u002F\u002F Fetch popular products\n    const popularProducts = await this.productService.findPopular(100);\n    \n    \u002F\u002F Cache each product\n    for (const product of popularProducts) {\n      await this.storageManager.setItem({\n        storage: 'cache',\n        key: `product:${product.id}`,\n        value: product\n      });\n    }\n    \n    console.log(`Warmed cache with ${popularProducts.length} products`);\n  }\n}\n",[223,4417,4418,4429,4437,4449,4453,4461,4473,4477,4498,4503,4533,4537,4542,4562,4578,4592,4614,4622,4630,4634,4638,4675,4679],{"__ignoreMap":221},[226,4419,4420,4422,4424,4427],{"class":228,"line":229},[226,4421,391],{"class":306},[226,4423,627],{"class":394},[226,4425,4426],{"class":232}," CacheWarmingService",[226,4428,420],{"class":310},[226,4430,4431,4433,4435],{"class":228,"line":336},[226,4432,637],{"class":310},[226,4434,640],{"class":398},[226,4436,643],{"class":314},[226,4438,4439,4441,4443,4445,4447],{"class":228,"line":359},[226,4440,648],{"class":394},[226,4442,471],{"class":442},[226,4444,653],{"class":310},[226,4446,343],{"class":232},[226,4448,333],{"class":310},[226,4450,4451],{"class":228,"line":382},[226,4452,456],{"class":314},[226,4454,4455,4457,4459],{"class":228,"line":388},[226,4456,637],{"class":310},[226,4458,640],{"class":398},[226,4460,1280],{"class":314},[226,4462,4463,4465,4467,4469,4471],{"class":228,"line":423},[226,4464,648],{"class":394},[226,4466,1287],{"class":442},[226,4468,653],{"class":310},[226,4470,1292],{"class":232},[226,4472,333],{"class":310},[226,4474,4475],{"class":228,"line":430},[226,4476,456],{"class":314},[226,4478,4479,4481,4484,4487,4489,4491,4494,4496],{"class":228,"line":453},[226,4480,666],{"class":394},[226,4482,4483],{"class":442}," warmProductCache",[226,4485,4486],{"class":310},"():",[226,4488,3981],{"class":232},[226,4490,745],{"class":310},[226,4492,4493],{"class":232},"void",[226,4495,751],{"class":310},[226,4497,420],{"class":310},[226,4499,4500],{"class":228,"line":459},[226,4501,4502],{"class":426},"    \u002F\u002F Fetch popular products\n",[226,4504,4505,4507,4510,4512,4514,4516,4518,4520,4523,4525,4529,4531],{"class":228,"line":465},[226,4506,688],{"class":394},[226,4508,4509],{"class":314}," popularProducts",[226,4511,474],{"class":310},[226,4513,731],{"class":306},[226,4515,734],{"class":310},[226,4517,1477],{"class":314},[226,4519,436],{"class":310},[226,4521,4522],{"class":398},"findPopular",[226,4524,402],{"class":442},[226,4526,4528],{"class":4527},"sbssI","100",[226,4530,448],{"class":442},[226,4532,333],{"class":310},[226,4534,4535],{"class":228,"line":493},[226,4536,714],{"class":442},[226,4538,4539],{"class":228,"line":498},[226,4540,4541],{"class":426},"    \u002F\u002F Cache each product\n",[226,4543,4544,4547,4549,4551,4553,4556,4558,4560],{"class":228,"line":504},[226,4545,4546],{"class":306},"    for",[226,4548,797],{"class":442},[226,4550,1976],{"class":394},[226,4552,1767],{"class":314},[226,4554,4555],{"class":310}," of",[226,4557,4509],{"class":314},[226,4559,803],{"class":442},[226,4561,517],{"class":310},[226,4563,4564,4566,4568,4570,4572,4574,4576],{"class":228,"line":520},[226,4565,1812],{"class":306},[226,4567,734],{"class":310},[226,4569,737],{"class":314},[226,4571,436],{"class":310},[226,4573,887],{"class":398},[226,4575,402],{"class":442},[226,4577,517],{"class":310},[226,4579,4580,4582,4584,4586,4588,4590],{"class":228,"line":538},[226,4581,1830],{"class":442},[226,4583,409],{"class":310},[226,4585,324],{"class":310},[226,4587,530],{"class":236},[226,4589,330],{"class":310},[226,4591,535],{"class":310},[226,4593,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612],{"class":228,"line":549},[226,4595,1846],{"class":442},[226,4597,409],{"class":310},[226,4599,696],{"class":310},[226,4601,4008],{"class":236},[226,4603,702],{"class":310},[226,4605,1802],{"class":314},[226,4607,436],{"class":310},[226,4609,1652],{"class":314},[226,4611,707],{"class":310},[226,4613,535],{"class":310},[226,4615,4616,4618,4620],{"class":228,"line":559},[226,4617,1858],{"class":442},[226,4619,409],{"class":310},[226,4621,1863],{"class":314},[226,4623,4624,4626,4628],{"class":228,"line":817},[226,4625,1869],{"class":310},[226,4627,448],{"class":442},[226,4629,333],{"class":310},[226,4631,4632],{"class":228,"line":823},[226,4633,820],{"class":310},[226,4635,4636],{"class":228,"line":828},[226,4637,714],{"class":442},[226,4639,4640,4643,4645,4647,4649,4652,4655,4657,4660,4662,4665,4667,4669,4671,4673],{"class":228,"line":834},[226,4641,4642],{"class":314},"    console",[226,4644,436],{"class":310},[226,4646,3701],{"class":398},[226,4648,402],{"class":442},[226,4650,4651],{"class":310},"`",[226,4653,4654],{"class":236},"Warmed cache with ",[226,4656,702],{"class":310},[226,4658,4659],{"class":314},"popularProducts",[226,4661,436],{"class":310},[226,4663,4664],{"class":314},"length",[226,4666,2039],{"class":310},[226,4668,1468],{"class":236},[226,4670,4651],{"class":310},[226,4672,448],{"class":442},[226,4674,333],{"class":310},[226,4676,4677],{"class":228,"line":864},[226,4678,958],{"class":310},[226,4680,4681],{"class":228,"line":869},[226,4682,562],{"class":310},[287,4684,4686],{"id":4685},"cache-invalidation-patterns","Cache Invalidation Patterns",[215,4688,4690],{"className":296,"code":4689,"language":299,"meta":221,"style":221},"export class CacheInvalidationService {\n  @Inject(StorageManager)\n  private storageManager!: StorageManager;\n  \n  \u002F\u002F Invalidate single item\n  async invalidateProduct(id: string): Promise\u003Cvoid> {\n    await this.storageManager.deleteItem({\n      storage: 'cache',\n      key: `product:${id}`\n    });\n  }\n  \n  \u002F\u002F Invalidate by pattern (all products)\n  async invalidateAllProducts(): Promise\u003Cvoid> {\n    const allKeys = await this.storageManager.getKeys({ storage: 'cache' });\n    const productKeys = allKeys.filter(key => key.startsWith('product:'));\n    \n    for (const key of productKeys) {\n      await this.storageManager.deleteItem({ storage: 'cache', key });\n    }\n  }\n  \n  \u002F\u002F Invalidate related items\n  async invalidateCategory(categoryId: string): Promise\u003Cvoid> {\n    \u002F\u002F Remove category\n    await this.storageManager.deleteItem({\n      storage: 'cache',\n      key: `category:${categoryId}`\n    });\n    \n    \u002F\u002F Remove all products in category\n    const allKeys = await this.storageManager.getKeys({ storage: 'cache' });\n    const productKeys = allKeys.filter(key => \n      key.startsWith(`category:${categoryId}:products`)\n    );\n    \n    for (const key of productKeys) {\n      await this.storageManager.deleteItem({ storage: 'cache', key });\n    }\n  }\n}\n",[223,4691,4692,4703,4711,4723,4727,4732,4759,4775,4789,4805,4813,4817,4821,4826,4845,4883,4922,4926,4944,4980,4984,4988,4992,4997,5025,5030,5046,5060,5077,5085,5089,5094,5132,5155,5182,5189,5193,5211,5247,5251,5255],{"__ignoreMap":221},[226,4693,4694,4696,4698,4701],{"class":228,"line":229},[226,4695,391],{"class":306},[226,4697,627],{"class":394},[226,4699,4700],{"class":232}," CacheInvalidationService",[226,4702,420],{"class":310},[226,4704,4705,4707,4709],{"class":228,"line":336},[226,4706,637],{"class":310},[226,4708,640],{"class":398},[226,4710,643],{"class":314},[226,4712,4713,4715,4717,4719,4721],{"class":228,"line":359},[226,4714,648],{"class":394},[226,4716,471],{"class":442},[226,4718,653],{"class":310},[226,4720,343],{"class":232},[226,4722,333],{"class":310},[226,4724,4725],{"class":228,"line":382},[226,4726,456],{"class":314},[226,4728,4729],{"class":228,"line":388},[226,4730,4731],{"class":426},"  \u002F\u002F Invalidate single item\n",[226,4733,4734,4736,4739,4741,4743,4745,4747,4749,4751,4753,4755,4757],{"class":228,"line":423},[226,4735,666],{"class":394},[226,4737,4738],{"class":442}," invalidateProduct",[226,4740,402],{"class":310},[226,4742,1652],{"class":405},[226,4744,409],{"class":310},[226,4746,679],{"class":232},[226,4748,414],{"class":310},[226,4750,3981],{"class":232},[226,4752,745],{"class":310},[226,4754,4493],{"class":232},[226,4756,751],{"class":310},[226,4758,420],{"class":310},[226,4760,4761,4763,4765,4767,4769,4771,4773],{"class":228,"line":430},[226,4762,878],{"class":306},[226,4764,734],{"class":310},[226,4766,737],{"class":314},[226,4768,436],{"class":310},[226,4770,1057],{"class":398},[226,4772,402],{"class":442},[226,4774,517],{"class":310},[226,4776,4777,4779,4781,4783,4785,4787],{"class":228,"line":453},[226,4778,760],{"class":442},[226,4780,409],{"class":310},[226,4782,324],{"class":310},[226,4784,530],{"class":236},[226,4786,330],{"class":310},[226,4788,535],{"class":310},[226,4790,4791,4793,4795,4797,4799,4801,4803],{"class":228,"line":459},[226,4792,775],{"class":442},[226,4794,409],{"class":310},[226,4796,696],{"class":310},[226,4798,4008],{"class":236},[226,4800,702],{"class":310},[226,4802,1652],{"class":314},[226,4804,1094],{"class":310},[226,4806,4807,4809,4811],{"class":228,"line":465},[226,4808,785],{"class":310},[226,4810,448],{"class":442},[226,4812,333],{"class":310},[226,4814,4815],{"class":228,"line":493},[226,4816,958],{"class":310},[226,4818,4819],{"class":228,"line":498},[226,4820,456],{"class":314},[226,4822,4823],{"class":228,"line":504},[226,4824,4825],{"class":426},"  \u002F\u002F Invalidate by pattern (all products)\n",[226,4827,4828,4830,4833,4835,4837,4839,4841,4843],{"class":228,"line":520},[226,4829,666],{"class":394},[226,4831,4832],{"class":442}," invalidateAllProducts",[226,4834,4486],{"class":310},[226,4836,3981],{"class":232},[226,4838,745],{"class":310},[226,4840,4493],{"class":232},[226,4842,751],{"class":310},[226,4844,420],{"class":310},[226,4846,4847,4849,4851,4853,4855,4857,4859,4861,4863,4865,4867,4869,4871,4873,4875,4877,4879,4881],{"class":228,"line":538},[226,4848,688],{"class":394},[226,4850,3731],{"class":314},[226,4852,474],{"class":310},[226,4854,731],{"class":306},[226,4856,734],{"class":310},[226,4858,737],{"class":314},[226,4860,436],{"class":310},[226,4862,3671],{"class":398},[226,4864,402],{"class":442},[226,4866,2015],{"class":310},[226,4868,2031],{"class":442},[226,4870,409],{"class":310},[226,4872,324],{"class":310},[226,4874,530],{"class":236},[226,4876,330],{"class":310},[226,4878,318],{"class":310},[226,4880,448],{"class":442},[226,4882,333],{"class":310},[226,4884,4885,4887,4890,4892,4894,4896,4898,4900,4902,4904,4906,4908,4910,4912,4914,4916,4918,4920],{"class":228,"line":549},[226,4886,688],{"class":394},[226,4888,4889],{"class":314}," productKeys",[226,4891,474],{"class":310},[226,4893,3731],{"class":314},[226,4895,436],{"class":310},[226,4897,3736],{"class":398},[226,4899,402],{"class":442},[226,4901,3741],{"class":405},[226,4903,3744],{"class":394},[226,4905,2119],{"class":314},[226,4907,436],{"class":310},[226,4909,3751],{"class":398},[226,4911,402],{"class":442},[226,4913,330],{"class":310},[226,4915,4008],{"class":236},[226,4917,330],{"class":310},[226,4919,3762],{"class":442},[226,4921,333],{"class":310},[226,4923,4924],{"class":228,"line":559},[226,4925,714],{"class":442},[226,4927,4928,4930,4932,4934,4936,4938,4940,4942],{"class":228,"line":817},[226,4929,4546],{"class":306},[226,4931,797],{"class":442},[226,4933,1976],{"class":394},[226,4935,2119],{"class":314},[226,4937,4555],{"class":310},[226,4939,4889],{"class":314},[226,4941,803],{"class":442},[226,4943,517],{"class":310},[226,4945,4946,4948,4950,4952,4954,4956,4958,4960,4962,4964,4966,4968,4970,4972,4974,4976,4978],{"class":228,"line":823},[226,4947,1812],{"class":306},[226,4949,734],{"class":310},[226,4951,737],{"class":314},[226,4953,436],{"class":310},[226,4955,1057],{"class":398},[226,4957,402],{"class":442},[226,4959,2015],{"class":310},[226,4961,2031],{"class":442},[226,4963,409],{"class":310},[226,4965,324],{"class":310},[226,4967,530],{"class":236},[226,4969,330],{"class":310},[226,4971,982],{"class":310},[226,4973,2119],{"class":314},[226,4975,318],{"class":310},[226,4977,448],{"class":442},[226,4979,333],{"class":310},[226,4981,4982],{"class":228,"line":828},[226,4983,820],{"class":310},[226,4985,4986],{"class":228,"line":834},[226,4987,958],{"class":310},[226,4989,4990],{"class":228,"line":864},[226,4991,456],{"class":314},[226,4993,4994],{"class":228,"line":869},[226,4995,4996],{"class":426},"  \u002F\u002F Invalidate related items\n",[226,4998,4999,5001,5004,5006,5009,5011,5013,5015,5017,5019,5021,5023],{"class":228,"line":875},[226,5000,666],{"class":394},[226,5002,5003],{"class":442}," invalidateCategory",[226,5005,402],{"class":310},[226,5007,5008],{"class":405},"categoryId",[226,5010,409],{"class":310},[226,5012,679],{"class":232},[226,5014,414],{"class":310},[226,5016,3981],{"class":232},[226,5018,745],{"class":310},[226,5020,4493],{"class":232},[226,5022,751],{"class":310},[226,5024,420],{"class":310},[226,5026,5027],{"class":228,"line":894},[226,5028,5029],{"class":426},"    \u002F\u002F Remove category\n",[226,5031,5032,5034,5036,5038,5040,5042,5044],{"class":228,"line":909},[226,5033,878],{"class":306},[226,5035,734],{"class":310},[226,5037,737],{"class":314},[226,5039,436],{"class":310},[226,5041,1057],{"class":398},[226,5043,402],{"class":442},[226,5045,517],{"class":310},[226,5047,5048,5050,5052,5054,5056,5058],{"class":228,"line":920},[226,5049,760],{"class":442},[226,5051,409],{"class":310},[226,5053,324],{"class":310},[226,5055,530],{"class":236},[226,5057,330],{"class":310},[226,5059,535],{"class":310},[226,5061,5062,5064,5066,5068,5071,5073,5075],{"class":228,"line":931},[226,5063,775],{"class":442},[226,5065,409],{"class":310},[226,5067,696],{"class":310},[226,5069,5070],{"class":236},"category:",[226,5072,702],{"class":310},[226,5074,5008],{"class":314},[226,5076,1094],{"class":310},[226,5078,5079,5081,5083],{"class":228,"line":940},[226,5080,785],{"class":310},[226,5082,448],{"class":442},[226,5084,333],{"class":310},[226,5086,5087],{"class":228,"line":945},[226,5088,714],{"class":442},[226,5090,5091],{"class":228,"line":955},[226,5092,5093],{"class":426},"    \u002F\u002F Remove all products in category\n",[226,5095,5096,5098,5100,5102,5104,5106,5108,5110,5112,5114,5116,5118,5120,5122,5124,5126,5128,5130],{"class":228,"line":961},[226,5097,688],{"class":394},[226,5099,3731],{"class":314},[226,5101,474],{"class":310},[226,5103,731],{"class":306},[226,5105,734],{"class":310},[226,5107,737],{"class":314},[226,5109,436],{"class":310},[226,5111,3671],{"class":398},[226,5113,402],{"class":442},[226,5115,2015],{"class":310},[226,5117,2031],{"class":442},[226,5119,409],{"class":310},[226,5121,324],{"class":310},[226,5123,530],{"class":236},[226,5125,330],{"class":310},[226,5127,318],{"class":310},[226,5129,448],{"class":442},[226,5131,333],{"class":310},[226,5133,5134,5136,5138,5140,5142,5144,5146,5148,5150,5152],{"class":228,"line":966},[226,5135,688],{"class":394},[226,5137,4889],{"class":314},[226,5139,474],{"class":310},[226,5141,3731],{"class":314},[226,5143,436],{"class":310},[226,5145,3736],{"class":398},[226,5147,402],{"class":442},[226,5149,3741],{"class":405},[226,5151,3744],{"class":394},[226,5153,5154],{"class":442}," \n",[226,5156,5157,5159,5161,5163,5165,5167,5169,5171,5173,5175,5178,5180],{"class":228,"line":997},[226,5158,775],{"class":314},[226,5160,436],{"class":310},[226,5162,3751],{"class":398},[226,5164,402],{"class":442},[226,5166,4651],{"class":310},[226,5168,5070],{"class":236},[226,5170,702],{"class":310},[226,5172,5008],{"class":314},[226,5174,2039],{"class":310},[226,5176,5177],{"class":236},":products",[226,5179,4651],{"class":310},[226,5181,1236],{"class":442},[226,5183,5184,5187],{"class":228,"line":1003},[226,5185,5186],{"class":442},"    )",[226,5188,333],{"class":310},[226,5190,5191],{"class":228,"line":1035},[226,5192,714],{"class":442},[226,5194,5195,5197,5199,5201,5203,5205,5207,5209],{"class":228,"line":1040},[226,5196,4546],{"class":306},[226,5198,797],{"class":442},[226,5200,1976],{"class":394},[226,5202,2119],{"class":314},[226,5204,4555],{"class":310},[226,5206,4889],{"class":314},[226,5208,803],{"class":442},[226,5210,517],{"class":310},[226,5212,5213,5215,5217,5219,5221,5223,5225,5227,5229,5231,5233,5235,5237,5239,5241,5243,5245],{"class":228,"line":1046},[226,5214,1812],{"class":306},[226,5216,734],{"class":310},[226,5218,737],{"class":314},[226,5220,436],{"class":310},[226,5222,1057],{"class":398},[226,5224,402],{"class":442},[226,5226,2015],{"class":310},[226,5228,2031],{"class":442},[226,5230,409],{"class":310},[226,5232,324],{"class":310},[226,5234,530],{"class":236},[226,5236,330],{"class":310},[226,5238,982],{"class":310},[226,5240,2119],{"class":314},[226,5242,318],{"class":310},[226,5244,448],{"class":442},[226,5246,333],{"class":310},[226,5248,5249],{"class":228,"line":1064},[226,5250,820],{"class":310},[226,5252,5253],{"class":228,"line":1079},[226,5254,958],{"class":310},[226,5256,5257],{"class":228,"line":1097},[226,5258,562],{"class":310},[287,5260,5262],{"id":5261},"rate-limiting-with-storage","Rate Limiting with Storage",[215,5264,5266],{"className":296,"code":5265,"language":299,"meta":221,"style":221},"export class RateLimiter {\n  @Inject(StorageManager)\n  private storageManager!: StorageManager;\n  \n  private readonly maxRequests = 100;\n  \n  async isRateLimited(clientId: string): Promise\u003Cboolean> {\n    const key = `ratelimit:${clientId}`;\n    \n    const current = await this.storageManager.getItem\u003Cnumber>({\n      storage: 'cache',\n      key\n    }) || 0;\n    \n    if (current >= this.maxRequests) {\n      return true;\n    }\n    \n    await this.storageManager.setItem({\n      storage: 'cache',\n      key,\n      value: current + 1\n    });\n    \n    return false;\n  }\n}\n",[223,5267,5268,5279,5287,5299,5303,5320,5324,5353,5374,5378,5408,5422,5427,5441,5445,5466,5476,5480,5484,5500,5514,5520,5534,5542,5546,5555,5559],{"__ignoreMap":221},[226,5269,5270,5272,5274,5277],{"class":228,"line":229},[226,5271,391],{"class":306},[226,5273,627],{"class":394},[226,5275,5276],{"class":232}," RateLimiter",[226,5278,420],{"class":310},[226,5280,5281,5283,5285],{"class":228,"line":336},[226,5282,637],{"class":310},[226,5284,640],{"class":398},[226,5286,643],{"class":314},[226,5288,5289,5291,5293,5295,5297],{"class":228,"line":359},[226,5290,648],{"class":394},[226,5292,471],{"class":442},[226,5294,653],{"class":310},[226,5296,343],{"class":232},[226,5298,333],{"class":310},[226,5300,5301],{"class":228,"line":382},[226,5302,456],{"class":314},[226,5304,5305,5307,5310,5313,5315,5318],{"class":228,"line":388},[226,5306,648],{"class":394},[226,5308,5309],{"class":394}," readonly",[226,5311,5312],{"class":442}," maxRequests",[226,5314,474],{"class":310},[226,5316,5317],{"class":4527}," 100",[226,5319,333],{"class":310},[226,5321,5322],{"class":228,"line":423},[226,5323,456],{"class":314},[226,5325,5326,5328,5331,5333,5336,5338,5340,5342,5344,5346,5349,5351],{"class":228,"line":430},[226,5327,666],{"class":394},[226,5329,5330],{"class":442}," isRateLimited",[226,5332,402],{"class":310},[226,5334,5335],{"class":405},"clientId",[226,5337,409],{"class":310},[226,5339,679],{"class":232},[226,5341,414],{"class":310},[226,5343,3981],{"class":232},[226,5345,745],{"class":310},[226,5347,5348],{"class":232},"boolean",[226,5350,751],{"class":310},[226,5352,420],{"class":310},[226,5354,5355,5357,5359,5361,5363,5366,5368,5370,5372],{"class":228,"line":453},[226,5356,688],{"class":394},[226,5358,2119],{"class":314},[226,5360,474],{"class":310},[226,5362,696],{"class":310},[226,5364,5365],{"class":236},"ratelimit:",[226,5367,702],{"class":310},[226,5369,5335],{"class":314},[226,5371,707],{"class":310},[226,5373,333],{"class":310},[226,5375,5376],{"class":228,"line":459},[226,5377,714],{"class":442},[226,5379,5380,5382,5385,5387,5389,5391,5393,5395,5397,5399,5402,5404,5406],{"class":228,"line":465},[226,5381,688],{"class":394},[226,5383,5384],{"class":314}," current",[226,5386,474],{"class":310},[226,5388,731],{"class":306},[226,5390,734],{"class":310},[226,5392,737],{"class":314},[226,5394,436],{"class":310},[226,5396,742],{"class":398},[226,5398,745],{"class":310},[226,5400,5401],{"class":232},"number",[226,5403,751],{"class":310},[226,5405,402],{"class":442},[226,5407,517],{"class":310},[226,5409,5410,5412,5414,5416,5418,5420],{"class":228,"line":493},[226,5411,760],{"class":442},[226,5413,409],{"class":310},[226,5415,324],{"class":310},[226,5417,530],{"class":236},[226,5419,330],{"class":310},[226,5421,535],{"class":310},[226,5423,5424],{"class":228,"line":498},[226,5425,5426],{"class":314},"      key\n",[226,5428,5429,5431,5433,5436,5439],{"class":228,"line":504},[226,5430,785],{"class":310},[226,5432,803],{"class":442},[226,5434,5435],{"class":310},"||",[226,5437,5438],{"class":4527}," 0",[226,5440,333],{"class":310},[226,5442,5443],{"class":228,"line":520},[226,5444,714],{"class":442},[226,5446,5447,5449,5451,5454,5457,5459,5462,5464],{"class":228,"line":538},[226,5448,794],{"class":306},[226,5450,797],{"class":442},[226,5452,5453],{"class":314},"current",[226,5455,5456],{"class":310}," >=",[226,5458,734],{"class":310},[226,5460,5461],{"class":314},"maxRequests",[226,5463,803],{"class":442},[226,5465,517],{"class":310},[226,5467,5468,5470,5474],{"class":228,"line":549},[226,5469,810],{"class":306},[226,5471,5473],{"class":5472},"sfNiH"," true",[226,5475,333],{"class":310},[226,5477,5478],{"class":228,"line":559},[226,5479,820],{"class":310},[226,5481,5482],{"class":228,"line":817},[226,5483,714],{"class":442},[226,5485,5486,5488,5490,5492,5494,5496,5498],{"class":228,"line":823},[226,5487,878],{"class":306},[226,5489,734],{"class":310},[226,5491,737],{"class":314},[226,5493,436],{"class":310},[226,5495,887],{"class":398},[226,5497,402],{"class":442},[226,5499,517],{"class":310},[226,5501,5502,5504,5506,5508,5510,5512],{"class":228,"line":828},[226,5503,760],{"class":442},[226,5505,409],{"class":310},[226,5507,324],{"class":310},[226,5509,530],{"class":236},[226,5511,330],{"class":310},[226,5513,535],{"class":310},[226,5515,5516,5518],{"class":228,"line":834},[226,5517,775],{"class":314},[226,5519,535],{"class":310},[226,5521,5522,5524,5526,5528,5531],{"class":228,"line":864},[226,5523,923],{"class":442},[226,5525,409],{"class":310},[226,5527,5384],{"class":314},[226,5529,5530],{"class":310}," +",[226,5532,5533],{"class":4527}," 1\n",[226,5535,5536,5538,5540],{"class":228,"line":869},[226,5537,785],{"class":310},[226,5539,448],{"class":442},[226,5541,333],{"class":310},[226,5543,5544],{"class":228,"line":875},[226,5545,714],{"class":442},[226,5547,5548,5550,5553],{"class":228,"line":894},[226,5549,948],{"class":306},[226,5551,5552],{"class":5472}," false",[226,5554,333],{"class":310},[226,5556,5557],{"class":228,"line":909},[226,5558,958],{"class":310},[226,5560,5561],{"class":228,"line":920},[226,5562,562],{"class":310},[287,5564,5566],{"id":5565},"session-management","Session Management",[215,5568,5570],{"className":296,"code":5569,"language":299,"meta":221,"style":221},"interface Session {\n  userId: string;\n  createdAt: number;\n  data: Record\u003Cstring, unknown>;\n}\n\nexport class SessionService {\n  @Inject(StorageManager)\n  private storageManager!: StorageManager;\n  \n  async createSession(userId: string): Promise\u003Cstring> {\n    const sessionId = crypto.randomUUID();\n    \n    const session: Session = {\n      userId,\n      createdAt: Date.now(),\n      data: {}\n    };\n    \n    await this.storageManager.setItem({\n      storage: 'sessions',\n      key: `session:${sessionId}`,\n      value: session\n    });\n    \n    return sessionId;\n  }\n  \n  async getSession(sessionId: string): Promise\u003CSession | null> {\n    return this.storageManager.getItem\u003CSession>({\n      storage: 'sessions',\n      key: `session:${sessionId}`\n    });\n  }\n  \n  async destroySession(sessionId: string): Promise\u003Cvoid> {\n    await this.storageManager.deleteItem({\n      storage: 'sessions',\n      key: `session:${sessionId}`\n    });\n  }\n  \n  async updateSessionData(\n    sessionId: string, \n    data: Record\u003Cstring, unknown>\n  ): Promise\u003Cvoid> {\n    const session = await this.getSession(sessionId);\n    \n    if (session) {\n      session.data = { ...session.data, ...data };\n      await this.storageManager.setItem({\n        storage: 'sessions',\n        key: `session:${sessionId}`,\n        value: session\n      });\n    }\n  }\n}\n",[223,5571,5572,5581,5592,5604,5627,5631,5635,5646,5654,5666,5670,5697,5718,5722,5737,5744,5763,5773,5778,5782,5798,5812,5832,5841,5849,5853,5861,5865,5869,5901,5923,5937,5953,5961,5965,5969,5996,6012,6026,6042,6050,6054,6058,6068,6081,6101,6116,6139,6143,6156,6188,6204,6218,6236,6244,6252,6256,6260],{"__ignoreMap":221},[226,5573,5574,5576,5579],{"class":228,"line":229},[226,5575,2319],{"class":394},[226,5577,5578],{"class":232}," Session",[226,5580,420],{"class":310},[226,5582,5583,5586,5588,5590],{"class":228,"line":336},[226,5584,5585],{"class":442},"  userId",[226,5587,409],{"class":310},[226,5589,679],{"class":232},[226,5591,333],{"class":310},[226,5593,5594,5597,5599,5602],{"class":228,"line":359},[226,5595,5596],{"class":442},"  createdAt",[226,5598,409],{"class":310},[226,5600,5601],{"class":232}," number",[226,5603,333],{"class":310},[226,5605,5606,5609,5611,5614,5616,5619,5621,5624],{"class":228,"line":382},[226,5607,5608],{"class":442},"  data",[226,5610,409],{"class":310},[226,5612,5613],{"class":232}," Record",[226,5615,745],{"class":310},[226,5617,5618],{"class":232},"string",[226,5620,982],{"class":310},[226,5622,5623],{"class":232}," unknown",[226,5625,5626],{"class":310},">;\n",[226,5628,5629],{"class":228,"line":388},[226,5630,562],{"class":310},[226,5632,5633],{"class":228,"line":423},[226,5634,385],{"emptyLinePlaceholder":56},[226,5636,5637,5639,5641,5644],{"class":228,"line":430},[226,5638,391],{"class":306},[226,5640,627],{"class":394},[226,5642,5643],{"class":232}," SessionService",[226,5645,420],{"class":310},[226,5647,5648,5650,5652],{"class":228,"line":453},[226,5649,637],{"class":310},[226,5651,640],{"class":398},[226,5653,643],{"class":314},[226,5655,5656,5658,5660,5662,5664],{"class":228,"line":459},[226,5657,648],{"class":394},[226,5659,471],{"class":442},[226,5661,653],{"class":310},[226,5663,343],{"class":232},[226,5665,333],{"class":310},[226,5667,5668],{"class":228,"line":465},[226,5669,456],{"class":314},[226,5671,5672,5674,5677,5679,5681,5683,5685,5687,5689,5691,5693,5695],{"class":228,"line":493},[226,5673,666],{"class":394},[226,5675,5676],{"class":442}," createSession",[226,5678,402],{"class":310},[226,5680,674],{"class":405},[226,5682,409],{"class":310},[226,5684,679],{"class":232},[226,5686,414],{"class":310},[226,5688,3981],{"class":232},[226,5690,745],{"class":310},[226,5692,5618],{"class":232},[226,5694,751],{"class":310},[226,5696,420],{"class":310},[226,5698,5699,5701,5704,5706,5709,5711,5714,5716],{"class":228,"line":498},[226,5700,688],{"class":394},[226,5702,5703],{"class":314}," sessionId",[226,5705,474],{"class":310},[226,5707,5708],{"class":314}," crypto",[226,5710,436],{"class":310},[226,5712,5713],{"class":398},"randomUUID",[226,5715,1326],{"class":442},[226,5717,333],{"class":310},[226,5719,5720],{"class":228,"line":504},[226,5721,714],{"class":442},[226,5723,5724,5726,5729,5731,5733,5735],{"class":228,"line":520},[226,5725,688],{"class":394},[226,5727,5728],{"class":314}," session",[226,5730,409],{"class":310},[226,5732,5578],{"class":232},[226,5734,474],{"class":310},[226,5736,420],{"class":310},[226,5738,5739,5742],{"class":228,"line":538},[226,5740,5741],{"class":314},"      userId",[226,5743,535],{"class":310},[226,5745,5746,5749,5751,5754,5756,5759,5761],{"class":228,"line":549},[226,5747,5748],{"class":442},"      createdAt",[226,5750,409],{"class":310},[226,5752,5753],{"class":314}," Date",[226,5755,436],{"class":310},[226,5757,5758],{"class":398},"now",[226,5760,1326],{"class":442},[226,5762,535],{"class":310},[226,5764,5765,5768,5770],{"class":228,"line":559},[226,5766,5767],{"class":442},"      data",[226,5769,409],{"class":310},[226,5771,5772],{"class":310}," {}\n",[226,5774,5775],{"class":228,"line":817},[226,5776,5777],{"class":310},"    };\n",[226,5779,5780],{"class":228,"line":823},[226,5781,714],{"class":442},[226,5783,5784,5786,5788,5790,5792,5794,5796],{"class":228,"line":828},[226,5785,878],{"class":306},[226,5787,734],{"class":310},[226,5789,737],{"class":314},[226,5791,436],{"class":310},[226,5793,887],{"class":398},[226,5795,402],{"class":442},[226,5797,517],{"class":310},[226,5799,5800,5802,5804,5806,5808,5810],{"class":228,"line":834},[226,5801,760],{"class":442},[226,5803,409],{"class":310},[226,5805,324],{"class":310},[226,5807,2064],{"class":236},[226,5809,330],{"class":310},[226,5811,535],{"class":310},[226,5813,5814,5816,5818,5820,5823,5825,5828,5830],{"class":228,"line":864},[226,5815,775],{"class":442},[226,5817,409],{"class":310},[226,5819,696],{"class":310},[226,5821,5822],{"class":236},"session:",[226,5824,702],{"class":310},[226,5826,5827],{"class":314},"sessionId",[226,5829,707],{"class":310},[226,5831,535],{"class":310},[226,5833,5834,5836,5838],{"class":228,"line":869},[226,5835,923],{"class":442},[226,5837,409],{"class":310},[226,5839,5840],{"class":314}," session\n",[226,5842,5843,5845,5847],{"class":228,"line":875},[226,5844,785],{"class":310},[226,5846,448],{"class":442},[226,5848,333],{"class":310},[226,5850,5851],{"class":228,"line":894},[226,5852,714],{"class":442},[226,5854,5855,5857,5859],{"class":228,"line":909},[226,5856,948],{"class":306},[226,5858,5703],{"class":314},[226,5860,333],{"class":310},[226,5862,5863],{"class":228,"line":920},[226,5864,958],{"class":310},[226,5866,5867],{"class":228,"line":931},[226,5868,456],{"class":314},[226,5870,5871,5873,5876,5878,5880,5882,5884,5886,5888,5890,5893,5895,5897,5899],{"class":228,"line":940},[226,5872,666],{"class":394},[226,5874,5875],{"class":442}," getSession",[226,5877,402],{"class":310},[226,5879,5827],{"class":405},[226,5881,409],{"class":310},[226,5883,679],{"class":232},[226,5885,414],{"class":310},[226,5887,3981],{"class":232},[226,5889,745],{"class":310},[226,5891,5892],{"class":232},"Session",[226,5894,3988],{"class":310},[226,5896,3991],{"class":232},[226,5898,751],{"class":310},[226,5900,420],{"class":310},[226,5902,5903,5905,5907,5909,5911,5913,5915,5917,5919,5921],{"class":228,"line":945},[226,5904,948],{"class":306},[226,5906,734],{"class":310},[226,5908,737],{"class":314},[226,5910,436],{"class":310},[226,5912,742],{"class":398},[226,5914,745],{"class":310},[226,5916,5892],{"class":232},[226,5918,751],{"class":310},[226,5920,402],{"class":442},[226,5922,517],{"class":310},[226,5924,5925,5927,5929,5931,5933,5935],{"class":228,"line":955},[226,5926,760],{"class":442},[226,5928,409],{"class":310},[226,5930,324],{"class":310},[226,5932,2064],{"class":236},[226,5934,330],{"class":310},[226,5936,535],{"class":310},[226,5938,5939,5941,5943,5945,5947,5949,5951],{"class":228,"line":961},[226,5940,775],{"class":442},[226,5942,409],{"class":310},[226,5944,696],{"class":310},[226,5946,5822],{"class":236},[226,5948,702],{"class":310},[226,5950,5827],{"class":314},[226,5952,1094],{"class":310},[226,5954,5955,5957,5959],{"class":228,"line":966},[226,5956,785],{"class":310},[226,5958,448],{"class":442},[226,5960,333],{"class":310},[226,5962,5963],{"class":228,"line":997},[226,5964,958],{"class":310},[226,5966,5967],{"class":228,"line":1003},[226,5968,456],{"class":314},[226,5970,5971,5973,5976,5978,5980,5982,5984,5986,5988,5990,5992,5994],{"class":228,"line":1035},[226,5972,666],{"class":394},[226,5974,5975],{"class":442}," destroySession",[226,5977,402],{"class":310},[226,5979,5827],{"class":405},[226,5981,409],{"class":310},[226,5983,679],{"class":232},[226,5985,414],{"class":310},[226,5987,3981],{"class":232},[226,5989,745],{"class":310},[226,5991,4493],{"class":232},[226,5993,751],{"class":310},[226,5995,420],{"class":310},[226,5997,5998,6000,6002,6004,6006,6008,6010],{"class":228,"line":1040},[226,5999,878],{"class":306},[226,6001,734],{"class":310},[226,6003,737],{"class":314},[226,6005,436],{"class":310},[226,6007,1057],{"class":398},[226,6009,402],{"class":442},[226,6011,517],{"class":310},[226,6013,6014,6016,6018,6020,6022,6024],{"class":228,"line":1046},[226,6015,760],{"class":442},[226,6017,409],{"class":310},[226,6019,324],{"class":310},[226,6021,2064],{"class":236},[226,6023,330],{"class":310},[226,6025,535],{"class":310},[226,6027,6028,6030,6032,6034,6036,6038,6040],{"class":228,"line":1064},[226,6029,775],{"class":442},[226,6031,409],{"class":310},[226,6033,696],{"class":310},[226,6035,5822],{"class":236},[226,6037,702],{"class":310},[226,6039,5827],{"class":314},[226,6041,1094],{"class":310},[226,6043,6044,6046,6048],{"class":228,"line":1079},[226,6045,785],{"class":310},[226,6047,448],{"class":442},[226,6049,333],{"class":310},[226,6051,6052],{"class":228,"line":1097},[226,6053,958],{"class":310},[226,6055,6056],{"class":228,"line":1106},[226,6057,456],{"class":314},[226,6059,6060,6062,6065],{"class":228,"line":1111},[226,6061,666],{"class":394},[226,6063,6064],{"class":442}," updateSessionData",[226,6066,6067],{"class":310},"(\n",[226,6069,6070,6073,6075,6077,6079],{"class":228,"line":1120},[226,6071,6072],{"class":405},"    sessionId",[226,6074,409],{"class":310},[226,6076,679],{"class":232},[226,6078,982],{"class":310},[226,6080,5154],{"class":314},[226,6082,6083,6086,6088,6090,6092,6094,6096,6098],{"class":228,"line":1125},[226,6084,6085],{"class":405},"    data",[226,6087,409],{"class":310},[226,6089,5613],{"class":232},[226,6091,745],{"class":310},[226,6093,5618],{"class":232},[226,6095,982],{"class":310},[226,6097,5623],{"class":232},[226,6099,6100],{"class":310},">\n",[226,6102,6103,6106,6108,6110,6112,6114],{"class":228,"line":1733},[226,6104,6105],{"class":310},"  ):",[226,6107,3981],{"class":232},[226,6109,745],{"class":310},[226,6111,4493],{"class":232},[226,6113,751],{"class":310},[226,6115,420],{"class":310},[226,6117,6118,6120,6122,6124,6126,6128,6131,6133,6135,6137],{"class":228,"line":1752},[226,6119,688],{"class":394},[226,6121,5728],{"class":314},[226,6123,474],{"class":310},[226,6125,731],{"class":306},[226,6127,734],{"class":310},[226,6129,6130],{"class":398},"getSession",[226,6132,402],{"class":442},[226,6134,5827],{"class":314},[226,6136,448],{"class":442},[226,6138,333],{"class":310},[226,6140,6141],{"class":228,"line":1757},[226,6142,714],{"class":442},[226,6144,6145,6147,6149,6152,6154],{"class":228,"line":1762},[226,6146,794],{"class":306},[226,6148,797],{"class":442},[226,6150,6151],{"class":314},"session",[226,6153,803],{"class":442},[226,6155,517],{"class":310},[226,6157,6158,6161,6163,6166,6168,6170,6173,6175,6177,6179,6181,6183,6185],{"class":228,"line":1795},[226,6159,6160],{"class":314},"      session",[226,6162,436],{"class":310},[226,6164,6165],{"class":314},"data",[226,6167,474],{"class":310},[226,6169,311],{"class":310},[226,6171,6172],{"class":310}," ...",[226,6174,6151],{"class":314},[226,6176,436],{"class":310},[226,6178,6165],{"class":314},[226,6180,982],{"class":310},[226,6182,6172],{"class":310},[226,6184,6165],{"class":314},[226,6186,6187],{"class":310}," };\n",[226,6189,6190,6192,6194,6196,6198,6200,6202],{"class":228,"line":1809},[226,6191,1812],{"class":306},[226,6193,734],{"class":310},[226,6195,737],{"class":314},[226,6197,436],{"class":310},[226,6199,887],{"class":398},[226,6201,402],{"class":442},[226,6203,517],{"class":310},[226,6205,6206,6208,6210,6212,6214,6216],{"class":228,"line":1827},[226,6207,1830],{"class":442},[226,6209,409],{"class":310},[226,6211,324],{"class":310},[226,6213,2064],{"class":236},[226,6215,330],{"class":310},[226,6217,535],{"class":310},[226,6219,6220,6222,6224,6226,6228,6230,6232,6234],{"class":228,"line":1843},[226,6221,1846],{"class":442},[226,6223,409],{"class":310},[226,6225,696],{"class":310},[226,6227,5822],{"class":236},[226,6229,702],{"class":310},[226,6231,5827],{"class":314},[226,6233,707],{"class":310},[226,6235,535],{"class":310},[226,6237,6238,6240,6242],{"class":228,"line":1855},[226,6239,1858],{"class":442},[226,6241,409],{"class":310},[226,6243,5840],{"class":314},[226,6245,6246,6248,6250],{"class":228,"line":1866},[226,6247,1869],{"class":310},[226,6249,448],{"class":442},[226,6251,333],{"class":310},[226,6253,6254],{"class":228,"line":1876},[226,6255,820],{"class":310},[226,6257,6258],{"class":228,"line":1881},[226,6259,958],{"class":310},[226,6261,6262],{"class":228,"line":1886},[226,6263,562],{"class":310},[6265,6266,6267],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .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 .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 pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":221,"searchDepth":229,"depth":336,"links":6269},[6270,6271,6272,6278,6283,6287],{"id":210,"depth":336,"text":18},{"id":281,"depth":336,"text":282},{"id":1915,"depth":336,"text":1916,"children":6273},[6274,6275,6276,6277],{"id":1919,"depth":359,"text":445},{"id":2237,"depth":359,"text":2238},{"id":2305,"depth":359,"text":2306},{"id":2461,"depth":359,"text":2462},{"id":2472,"depth":336,"text":33,"children":6279},[6280,6281,6282],{"id":2475,"depth":359,"text":2476},{"id":2670,"depth":359,"text":2671},{"id":2899,"depth":359,"text":2900},{"id":3185,"depth":336,"text":3186,"children":6284},[6285,6286],{"id":3189,"depth":359,"text":3190},{"id":3642,"depth":359,"text":3643},{"id":3886,"depth":336,"text":3887,"children":6288},[6289,6290,6291,6292,6293],{"id":3890,"depth":359,"text":3891},{"id":4408,"depth":359,"text":4409},{"id":4685,"depth":359,"text":4686},{"id":5261,"depth":359,"text":5262},{"id":5565,"depth":359,"text":5566},"Flexible and extensible storage system for Vercube applications","md",null,{},{"title":66,"description":6294},"8hQf-YlqUkB73n7WMK7iGtG_QtOfNUSzA4hKQ_Jsc9A",[6301,6303],{"title":106,"path":107,"stem":108,"description":6302,"children":-1},"Deploy your Vercube application to Azure Functions with HTTP triggers",{"title":86,"path":118,"stem":119,"description":6304,"children":-1},"Built-in storage providers and guide to creating custom drivers",1775552783666]