[{"data":1,"prerenderedAt":3176},["ShallowReactive",2],{"navigation":3,"docs-path-index":230,"-docs-modules-cache-api":302,"-docs-modules-cache-api-surround":3171},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":52},"Docs","i-lucide-book-marked","\u002Fdocs","docs",[10,26,53,191,212],{"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,88,104,112,127,138,153,172,180],{"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},"Devtools","\u002Fdocs\u002Fmodules\u002Fdevtools","docs\u002F3.modules\u002F10.devtools",[82,85],{"title":66,"path":83,"stem":84},"\u002Fdocs\u002Fmodules\u002Fdevtools\u002Foverview","docs\u002F3.modules\u002F10.devtools\u002F0.overview",{"title":33,"path":86,"stem":87},"\u002Fdocs\u002Fmodules\u002Fdevtools\u002Fconfiguration","docs\u002F3.modules\u002F10.devtools\u002F1.configuration",{"title":89,"icon":52,"defaultOpen":52,"path":90,"stem":91,"children":92,"page":52},"Logger","\u002Fdocs\u002Fmodules\u002Flogger","docs\u002F3.modules\u002F2.logger",[93,96,100],{"title":66,"path":94,"stem":95},"\u002Fdocs\u002Fmodules\u002Flogger\u002Foverview","docs\u002F3.modules\u002F2.logger\u002F0.overview",{"title":97,"path":98,"stem":99},"Drains & Adapters","\u002Fdocs\u002Fmodules\u002Flogger\u002Fdrivers","docs\u002F3.modules\u002F2.logger\u002F1.drivers",{"title":101,"path":102,"stem":103},"API","\u002Fdocs\u002Fmodules\u002Flogger\u002Fapi","docs\u002F3.modules\u002F2.logger\u002F2.api",{"title":105,"icon":52,"defaultOpen":52,"path":106,"stem":107,"children":108,"page":52},"Serverless","\u002Fdocs\u002Fmodules\u002Fserverless","docs\u002F3.modules\u002F3.serverless",[109],{"title":66,"path":110,"stem":111},"\u002Fdocs\u002Fmodules\u002Fserverless\u002Foverview","docs\u002F3.modules\u002F3.serverless\u002F0.overview",{"title":113,"icon":52,"defaultOpen":52,"path":114,"stem":115,"children":116,"page":52},"Storage","\u002Fdocs\u002Fmodules\u002Fstorage","docs\u002F3.modules\u002F4.storage",[117,120,124],{"title":66,"path":118,"stem":119},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Foverview","docs\u002F3.modules\u002F4.storage\u002F0.overview",{"title":121,"path":122,"stem":123},"Drivers","\u002Fdocs\u002Fmodules\u002Fstorage\u002Fdrivers","docs\u002F3.modules\u002F4.storage\u002F1.drivers",{"title":101,"path":125,"stem":126},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Fapi","docs\u002F3.modules\u002F4.storage\u002F2.api",{"title":128,"icon":52,"defaultOpen":52,"path":129,"stem":130,"children":131,"page":52},"Web Sockets","\u002Fdocs\u002Fmodules\u002Fweb-sockets","docs\u002F3.modules\u002F5.web-sockets",[132,135],{"title":66,"path":133,"stem":134},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Foverview","docs\u002F3.modules\u002F5.web-sockets\u002F0.overview",{"title":101,"path":136,"stem":137},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Fapi","docs\u002F3.modules\u002F5.web-sockets\u002F1.api",{"title":139,"icon":52,"defaultOpen":52,"path":140,"stem":141,"children":142,"page":52},"Schema","\u002Fdocs\u002Fmodules\u002Fschema","docs\u002F3.modules\u002F6.schema",[143,146,149],{"title":66,"path":144,"stem":145},"\u002Fdocs\u002Fmodules\u002Fschema\u002Foverview","docs\u002F3.modules\u002F6.schema\u002F0.overview",{"title":70,"path":147,"stem":148},"\u002Fdocs\u002Fmodules\u002Fschema\u002Fdecorators","docs\u002F3.modules\u002F6.schema\u002F1.decorators",{"title":150,"path":151,"stem":152},"Scalar","\u002Fdocs\u002Fmodules\u002Fschema\u002Fscalar","docs\u002F3.modules\u002F6.schema\u002F2.scalar",{"title":154,"icon":52,"defaultOpen":52,"path":155,"stem":156,"children":157,"page":52},"Nitro","\u002Fdocs\u002Fmodules\u002Fnitro","docs\u002F3.modules\u002F7.nitro",[158,161,164,168],{"title":66,"path":159,"stem":160},"\u002Fdocs\u002Fmodules\u002Fnitro\u002Foverview","docs\u002F3.modules\u002F7.nitro\u002F0.overview",{"title":113,"path":162,"stem":163},"\u002Fdocs\u002Fmodules\u002Fnitro\u002Fstorage","docs\u002F3.modules\u002F7.nitro\u002F1.storage",{"title":165,"path":166,"stem":167},"File-Based Routes","\u002Fdocs\u002Fmodules\u002Fnitro\u002Ffile-based-routes","docs\u002F3.modules\u002F7.nitro\u002F2.file-based-routes",{"title":169,"path":170,"stem":171},"Middleware","\u002Fdocs\u002Fmodules\u002Fnitro\u002Fmiddleware","docs\u002F3.modules\u002F7.nitro\u002F3.middleware",{"title":173,"icon":52,"defaultOpen":52,"path":174,"stem":175,"children":176,"page":52},"Vite","\u002Fdocs\u002Fmodules\u002Fvite","docs\u002F3.modules\u002F8.vite",[177],{"title":66,"path":178,"stem":179},"\u002Fdocs\u002Fmodules\u002Fvite\u002Foverview","docs\u002F3.modules\u002F8.vite\u002F0.overview",{"title":181,"icon":52,"defaultOpen":52,"path":182,"stem":183,"children":184,"page":52},"Cache","\u002Fdocs\u002Fmodules\u002Fcache","docs\u002F3.modules\u002F9.cache",[185,188],{"title":66,"path":186,"stem":187},"\u002Fdocs\u002Fmodules\u002Fcache\u002Foverview","docs\u002F3.modules\u002F9.cache\u002F0.overview",{"title":101,"path":189,"stem":190},"\u002Fdocs\u002Fmodules\u002Fcache\u002Fapi","docs\u002F3.modules\u002F9.cache\u002F1.api",{"title":192,"icon":193,"path":194,"stem":195,"children":196,"page":52},"Deployment","i-lucide-cloud-upload","\u002Fdocs\u002Fdeployment","docs\u002F4.deployment",[197,200,204,208],{"title":66,"path":198,"stem":199},"\u002Fdocs\u002Fdeployment\u002Foverview","docs\u002F4.deployment\u002F0.overview",{"title":201,"path":202,"stem":203},"Vercel","\u002Fdocs\u002Fdeployment\u002Fvercel","docs\u002F4.deployment\u002F1.vercel",{"title":205,"path":206,"stem":207},"AWS Lambda","\u002Fdocs\u002Fdeployment\u002Faws-lambda","docs\u002F4.deployment\u002F2.aws-lambda",{"title":209,"path":210,"stem":211},"Azure Functions","\u002Fdocs\u002Fdeployment\u002Fazure-functions","docs\u002F4.deployment\u002F3.azure-functions",{"title":213,"icon":214,"path":215,"stem":216,"children":217,"page":52},"Advanced","i-lucide-brain","\u002Fdocs\u002Fadvanced","docs\u002F99.advanced",[218,222,226],{"title":219,"path":220,"stem":221},"Custom Decorator","\u002Fdocs\u002Fadvanced\u002Fcustom-decorator","docs\u002F99.advanced\u002F1.custom-decorator",{"title":223,"path":224,"stem":225},"Plugins","\u002Fdocs\u002Fadvanced\u002Fcustom-plugin","docs\u002F99.advanced\u002F2.custom-plugin",{"title":227,"path":228,"stem":229},"Custom CLI Command","\u002Fdocs\u002Fadvanced\u002Fcustom-cli-command","docs\u002F99.advanced\u002F3.custom-cli-command",[231,233,235,236,237,238,240,241,242,243,244,245,247,249,250,251,252,254,255,256,258,259,260,261,263,264,266,267,268,269,271,272,273,275,276,277,278,280,281,282,283,284,286,287,289,290,291,293,294,295,296,297,299,300,301],{"path":232},"\u002Fdocs\u002F.navigation",{"path":234},"\u002Fdocs\u002Fgetting-started\u002F.navigation",{"path":12},{"path":19},{"path":23},{"path":239},"\u002Fdocs\u002Fcore-features\u002F.navigation",{"path":34},{"path":38},{"path":42},{"path":46},{"path":50},{"path":246},"\u002Fdocs\u002Fmodules\u002F.navigation",{"path":248},"\u002Fdocs\u002Fmodules\u002Fauth\u002F.navigation",{"path":67},{"path":71},{"path":75},{"path":253},"\u002Fdocs\u002Fmodules\u002Fdevtools\u002F.navigation",{"path":83},{"path":86},{"path":257},"\u002Fdocs\u002Fmodules\u002Flogger\u002F.navigation",{"path":94},{"path":98},{"path":102},{"path":262},"\u002Fdocs\u002Fmodules\u002Fserverless\u002F.navigation",{"path":110},{"path":265},"\u002Fdocs\u002Fmodules\u002Fstorage\u002F.navigation",{"path":118},{"path":122},{"path":125},{"path":270},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002F.navigation",{"path":133},{"path":136},{"path":274},"\u002Fdocs\u002Fmodules\u002Fschema\u002F.navigation",{"path":144},{"path":147},{"path":151},{"path":279},"\u002Fdocs\u002Fmodules\u002Fnitro\u002F.navigation",{"path":159},{"path":162},{"path":166},{"path":170},{"path":285},"\u002Fdocs\u002Fmodules\u002Fvite\u002F.navigation",{"path":178},{"path":288},"\u002Fdocs\u002Fmodules\u002Fcache\u002F.navigation",{"path":186},{"path":189},{"path":292},"\u002Fdocs\u002Fdeployment\u002F.navigation",{"path":198},{"path":202},{"path":206},{"path":210},{"path":298},"\u002Fdocs\u002Fadvanced\u002F.navigation",{"path":220},{"path":224},{"path":228},{"id":303,"title":101,"body":304,"description":3165,"extension":3166,"links":3167,"meta":3168,"navigation":56,"path":189,"seo":3169,"stem":190,"__hash__":3170},"docs\u002Fdocs\u002F3.modules\u002F9.cache\u002F1.api.md",{"type":305,"value":306,"toc":3143},"minimark",[307,316,324,327,332,381,387,435,446,451,648,652,655,798,845,849,1007,1013,1017,1027,1030,1367,1371,1378,1381,1404,1408,1535,1541,1544,1648,1663,1676,1680,1843,1853,1868,1990,1994,2054,2058,2066,2364,2369,2375,2429,2578,2582,2589,2681,2685,2696,2699,2805,2812,2816,2885,2928,2931,2939,2961,2970,2974,2983,2986,3064,3123,3139],[308,309,310,311,315],"p",{},"This page provides a complete API reference for all decorators, classes, and types in the ",[312,313,314],"code",{},"@vercube\u002Fcache"," package.",[317,318,320,323],"h2",{"id":319},"cache-decorator",[312,321,322],{},"@Cache()"," (Decorator)",[308,325,326],{},"Replaces the decorated method with a cached version of itself. The cache key is derived from the method's arguments, concurrent calls for the same key are coalesced into a single execution, and entries are dropped automatically when the method body or its options change.",[328,329,331],"h3",{"id":330},"signature","Signature",[333,334,339],"pre",{"className":335,"code":336,"language":337,"meta":338,"style":338},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","function Cache(options?: CacheTypes.DecoratorOptions): Function\n","ts","",[312,340,341],{"__ignoreMap":338},[342,343,346,350,354,358,362,365,369,372,375,378],"span",{"class":344,"line":345},"line",1,[342,347,349],{"class":348},"spNyl","function",[342,351,353],{"class":352},"s2Zo4"," Cache",[342,355,357],{"class":356},"sMK4o","(",[342,359,361],{"class":360},"sHdIc","options",[342,363,364],{"class":356},"?:",[342,366,368],{"class":367},"sBMFI"," CacheTypes",[342,370,371],{"class":356},".",[342,373,374],{"class":367},"DecoratorOptions",[342,376,377],{"class":356},"):",[342,379,380],{"class":367}," Function\n",[308,382,383],{},[384,385,386],"strong",{},"Parameters:",[388,389,390,409],"table",{},[391,392,393],"thead",{},[394,395,396,400,403,406],"tr",{},[397,398,399],"th",{},"Parameter",[397,401,402],{},"Type",[397,404,405],{},"Required",[397,407,408],{},"Description",[410,411,412],"tbody",{},[394,413,414,419,424,427],{},[415,416,417],"td",{},[312,418,361],{},[415,420,421],{},[312,422,423],{},"CacheTypes.DecoratorOptions",[415,425,426],{},"No",[415,428,429,430,371],{},"Cache options for this method. See ",[431,432,434],"a",{"href":433},"#cachetypesoptions-interface","Options",[308,436,437,438,441,442,445],{},"When ",[312,439,440],{},"name"," is not given it defaults to ",[312,443,444],{},"ClassName.methodName",", so two classes declaring the same method name never share entries.",[308,447,448],{},[384,449,450],{},"Example:",[333,452,454],{"className":335,"code":453,"language":337,"meta":338,"style":338},"import { Cache } from '@vercube\u002Fcache';\n\nexport class UsersService {\n  @Cache({ maxAge: 300, swr: true, staleMaxAge: 900, storage: 'cache' })\n  public async getUser(id: string): Promise\u003CUser> {\n    return this.database.findUser(id);\n  }\n}\n",[312,455,456,486,492,507,572,610,636,642],{"__ignoreMap":338},[342,457,458,462,465,468,471,474,477,480,483],{"class":344,"line":345},[342,459,461],{"class":460},"s7zQu","import",[342,463,464],{"class":356}," {",[342,466,353],{"class":467},"sTEyZ",[342,469,470],{"class":356}," }",[342,472,473],{"class":460}," from",[342,475,476],{"class":356}," '",[342,478,314],{"class":479},"sfazB",[342,481,482],{"class":356},"'",[342,484,485],{"class":356},";\n",[342,487,489],{"class":344,"line":488},2,[342,490,491],{"emptyLinePlaceholder":56},"\n",[342,493,495,498,501,504],{"class":344,"line":494},3,[342,496,497],{"class":460},"export",[342,499,500],{"class":348}," class",[342,502,503],{"class":367}," UsersService",[342,505,506],{"class":356}," {\n",[342,508,510,513,515,517,520,524,527,531,534,537,539,543,545,548,550,553,555,558,560,562,565,567,569],{"class":344,"line":509},4,[342,511,512],{"class":356},"  @",[342,514,181],{"class":352},[342,516,357],{"class":467},[342,518,519],{"class":356},"{",[342,521,523],{"class":522},"swJcz"," maxAge",[342,525,526],{"class":356},":",[342,528,530],{"class":529},"sbssI"," 300",[342,532,533],{"class":356},",",[342,535,536],{"class":522}," swr",[342,538,526],{"class":356},[342,540,542],{"class":541},"sfNiH"," true",[342,544,533],{"class":356},[342,546,547],{"class":522}," staleMaxAge",[342,549,526],{"class":356},[342,551,552],{"class":529}," 900",[342,554,533],{"class":356},[342,556,557],{"class":522}," storage",[342,559,526],{"class":356},[342,561,476],{"class":356},[342,563,564],{"class":479},"cache",[342,566,482],{"class":356},[342,568,470],{"class":356},[342,570,571],{"class":467},")\n",[342,573,575,578,581,584,586,589,591,594,596,599,602,605,608],{"class":344,"line":574},5,[342,576,577],{"class":348},"  public",[342,579,580],{"class":348}," async",[342,582,583],{"class":522}," getUser",[342,585,357],{"class":356},[342,587,588],{"class":360},"id",[342,590,526],{"class":356},[342,592,593],{"class":367}," string",[342,595,377],{"class":356},[342,597,598],{"class":367}," Promise",[342,600,601],{"class":356},"\u003C",[342,603,604],{"class":367},"User",[342,606,607],{"class":356},">",[342,609,506],{"class":356},[342,611,613,616,619,622,624,627,629,631,634],{"class":344,"line":612},6,[342,614,615],{"class":460},"    return",[342,617,618],{"class":356}," this.",[342,620,621],{"class":467},"database",[342,623,371],{"class":356},[342,625,626],{"class":352},"findUser",[342,628,357],{"class":522},[342,630,588],{"class":467},[342,632,633],{"class":522},")",[342,635,485],{"class":356},[342,637,639],{"class":344,"line":638},7,[342,640,641],{"class":356},"  }\n",[342,643,645],{"class":344,"line":644},8,[342,646,647],{"class":356},"}\n",[328,649,651],{"id":650},"helpers-on-the-decorated-method","Helpers on the decorated method",[308,653,654],{},"The decorated method exposes three helpers that resolve exactly the keys the cached calls use.",[333,656,658],{"className":335,"code":657,"language":337,"meta":338,"style":338},"type CachedMethod\u003CArgsT extends unknown[], T> = {\n  (...args: ArgsT): Promise\u003CT>;\n  resolveKeys(...args: ArgsT): Promise\u003Cstring[]>;\n  invalidate(...args: ArgsT): Promise\u003Cvoid>;\n  expire(...args: ArgsT): Promise\u003Cvoid>;\n};\n",[312,659,660,694,719,746,770,793],{"__ignoreMap":338},[342,661,662,665,668,670,673,676,679,682,684,687,689,692],{"class":344,"line":345},[342,663,664],{"class":348},"type",[342,666,667],{"class":367}," CachedMethod",[342,669,601],{"class":356},[342,671,672],{"class":367},"ArgsT",[342,674,675],{"class":348}," extends",[342,677,678],{"class":367}," unknown",[342,680,681],{"class":467},"[]",[342,683,533],{"class":356},[342,685,686],{"class":367}," T",[342,688,607],{"class":356},[342,690,691],{"class":356}," =",[342,693,506],{"class":356},[342,695,696,699,702,704,707,709,711,713,716],{"class":344,"line":488},[342,697,698],{"class":356},"  (...",[342,700,701],{"class":360},"args",[342,703,526],{"class":356},[342,705,706],{"class":367}," ArgsT",[342,708,377],{"class":356},[342,710,598],{"class":367},[342,712,601],{"class":356},[342,714,715],{"class":367},"T",[342,717,718],{"class":356},">;\n",[342,720,721,724,727,729,731,733,735,737,739,742,744],{"class":344,"line":494},[342,722,723],{"class":522},"  resolveKeys",[342,725,726],{"class":356},"(...",[342,728,701],{"class":360},[342,730,526],{"class":356},[342,732,706],{"class":367},[342,734,377],{"class":356},[342,736,598],{"class":367},[342,738,601],{"class":356},[342,740,741],{"class":367},"string",[342,743,681],{"class":467},[342,745,718],{"class":356},[342,747,748,751,753,755,757,759,761,763,765,768],{"class":344,"line":509},[342,749,750],{"class":522},"  invalidate",[342,752,726],{"class":356},[342,754,701],{"class":360},[342,756,526],{"class":356},[342,758,706],{"class":367},[342,760,377],{"class":356},[342,762,598],{"class":367},[342,764,601],{"class":356},[342,766,767],{"class":367},"void",[342,769,718],{"class":356},[342,771,772,775,777,779,781,783,785,787,789,791],{"class":344,"line":574},[342,773,774],{"class":522},"  expire",[342,776,726],{"class":356},[342,778,701],{"class":360},[342,780,526],{"class":356},[342,782,706],{"class":367},[342,784,377],{"class":356},[342,786,598],{"class":367},[342,788,601],{"class":356},[342,790,767],{"class":367},[342,792,718],{"class":356},[342,794,795],{"class":344,"line":612},[342,796,797],{"class":356},"};\n",[388,799,800,809],{},[391,801,802],{},[394,803,804,807],{},[397,805,806],{},"Helper",[397,808,408],{},[410,810,811,821,831],{},[394,812,813,818],{},[415,814,815],{},[312,816,817],{},"resolveKeys()",[415,819,820],{},"Returns every storage key (one per storage tier) the given arguments cache under.",[394,822,823,828],{},[415,824,825],{},[312,826,827],{},"invalidate()",[415,829,830],{},"Removes the cached entries for the given arguments. The next call resolves again.",[394,832,833,838],{},[415,834,835],{},[312,836,837],{},"expire()",[415,839,840,841,844],{},"Marks the entries stale without removing them. With ",[312,842,843],{},"swr"," the stale value is still served while the next access refreshes it.",[308,846,847],{},[384,848,450],{},[333,850,852],{"className":335,"code":851,"language":337,"meta":338,"style":338},"import type { CacheTypes } from '@vercube\u002Fcache';\n\nconst getUser = usersService.getUser as CacheTypes.CachedMethod\u003C[string], User>;\n\nawait getUser.resolveKeys('123'); \u002F\u002F ['\u002Fcache:functions:UsersServicegetUser.GuK_juM6...:NYOXd4T2....json']\nawait getUser.invalidate('123');\nawait getUser.expire('123');\n",[312,853,854,877,881,927,931,961,984],{"__ignoreMap":338},[342,855,856,858,861,863,865,867,869,871,873,875],{"class":344,"line":345},[342,857,461],{"class":460},[342,859,860],{"class":460}," type",[342,862,464],{"class":356},[342,864,368],{"class":467},[342,866,470],{"class":356},[342,868,473],{"class":460},[342,870,476],{"class":356},[342,872,314],{"class":479},[342,874,482],{"class":356},[342,876,485],{"class":356},[342,878,879],{"class":344,"line":488},[342,880,491],{"emptyLinePlaceholder":56},[342,882,883,886,889,892,895,897,900,903,905,907,910,912,915,917,920,922,925],{"class":344,"line":494},[342,884,885],{"class":348},"const",[342,887,888],{"class":467}," getUser ",[342,890,891],{"class":356},"=",[342,893,894],{"class":467}," usersService",[342,896,371],{"class":356},[342,898,899],{"class":467},"getUser ",[342,901,902],{"class":460},"as",[342,904,368],{"class":367},[342,906,371],{"class":356},[342,908,909],{"class":367},"CachedMethod",[342,911,601],{"class":356},[342,913,914],{"class":467},"[",[342,916,741],{"class":367},[342,918,919],{"class":467},"]",[342,921,533],{"class":356},[342,923,924],{"class":367}," User",[342,926,718],{"class":356},[342,928,929],{"class":344,"line":509},[342,930,491],{"emptyLinePlaceholder":56},[342,932,933,936,938,940,943,945,947,950,952,954,957],{"class":344,"line":574},[342,934,935],{"class":460},"await",[342,937,583],{"class":467},[342,939,371],{"class":356},[342,941,942],{"class":352},"resolveKeys",[342,944,357],{"class":467},[342,946,482],{"class":356},[342,948,949],{"class":479},"123",[342,951,482],{"class":356},[342,953,633],{"class":467},[342,955,956],{"class":356},";",[342,958,960],{"class":959},"sHwdD"," \u002F\u002F ['\u002Fcache:functions:UsersServicegetUser.GuK_juM6...:NYOXd4T2....json']\n",[342,962,963,965,967,969,972,974,976,978,980,982],{"class":344,"line":612},[342,964,935],{"class":460},[342,966,583],{"class":467},[342,968,371],{"class":356},[342,970,971],{"class":352},"invalidate",[342,973,357],{"class":467},[342,975,482],{"class":356},[342,977,949],{"class":479},[342,979,482],{"class":356},[342,981,633],{"class":467},[342,983,485],{"class":356},[342,985,986,988,990,992,995,997,999,1001,1003,1005],{"class":344,"line":638},[342,987,935],{"class":460},[342,989,583],{"class":467},[342,991,371],{"class":356},[342,993,994],{"class":352},"expire",[342,996,357],{"class":467},[342,998,482],{"class":356},[342,1000,949],{"class":479},[342,1002,482],{"class":356},[342,1004,633],{"class":467},[342,1006,485],{"class":356},[1008,1009,1010],"note",{},[308,1011,1012],{},"The cast is only needed to make the helpers visible to TypeScript - decorators cannot widen a method's declared type. At runtime the helpers are always there.",[317,1014,1016],{"id":1015},"cachemanager-class","CacheManager (Class)",[308,1018,1019,1020,1023,1024,1026],{},"The central service of the module. It wires the caching engine to the storages mounted in ",[312,1021,1022],{},"@vercube\u002Fstorage",", holds the application wide defaults, and exposes the imperative API used both directly and by the ",[312,1025,322],{}," decorator.",[328,1028,331],{"id":1029},"signature-1",[333,1031,1033],{"className":335,"code":1032,"language":337,"meta":338,"style":338},"class CacheManager {\n  public get adapter(): CacheStorageAdapter | null;\n  public get defaults(): CacheTypes.Defaults;\n  public configure(defaults: CacheTypes.Defaults): void;\n  public cached\u003CT, ArgsT>(fn: (...args: ArgsT) => T | Promise\u003CT>, options?: CacheTypes.Options\u003CT, ArgsT>): CacheTypes.CachedFunction\u003CT, ArgsT>;\n  public invalidate\u003CArgsT>(options: CacheTypes.Options\u003Cany, ArgsT>, ...args: ArgsT): Promise\u003Cvoid>;\n  public expire\u003CArgsT>(options: CacheTypes.Options\u003Cany, ArgsT>, ...args: ArgsT): Promise\u003Cvoid>;\n  public resolveKeys\u003CArgsT>(options: CacheTypes.Options\u003Cany, ArgsT>, ...args: ArgsT): Promise\u003Cstring[]>;\n}\n",[312,1034,1035,1045,1069,1089,1116,1205,1258,1309,1362],{"__ignoreMap":338},[342,1036,1037,1040,1043],{"class":344,"line":345},[342,1038,1039],{"class":348},"class",[342,1041,1042],{"class":367}," CacheManager",[342,1044,506],{"class":356},[342,1046,1047,1049,1052,1055,1058,1061,1064,1067],{"class":344,"line":488},[342,1048,577],{"class":348},[342,1050,1051],{"class":348}," get",[342,1053,1054],{"class":522}," adapter",[342,1056,1057],{"class":356},"():",[342,1059,1060],{"class":367}," CacheStorageAdapter",[342,1062,1063],{"class":356}," |",[342,1065,1066],{"class":367}," null",[342,1068,485],{"class":356},[342,1070,1071,1073,1075,1078,1080,1082,1084,1087],{"class":344,"line":494},[342,1072,577],{"class":348},[342,1074,1051],{"class":348},[342,1076,1077],{"class":522}," defaults",[342,1079,1057],{"class":356},[342,1081,368],{"class":367},[342,1083,371],{"class":356},[342,1085,1086],{"class":367},"Defaults",[342,1088,485],{"class":356},[342,1090,1091,1093,1096,1098,1101,1103,1105,1107,1109,1111,1114],{"class":344,"line":509},[342,1092,577],{"class":348},[342,1094,1095],{"class":522}," configure",[342,1097,357],{"class":356},[342,1099,1100],{"class":360},"defaults",[342,1102,526],{"class":356},[342,1104,368],{"class":367},[342,1106,371],{"class":356},[342,1108,1086],{"class":367},[342,1110,377],{"class":356},[342,1112,1113],{"class":367}," void",[342,1115,485],{"class":356},[342,1117,1118,1120,1123,1125,1127,1129,1131,1134,1137,1139,1142,1144,1146,1148,1150,1153,1155,1157,1159,1161,1163,1166,1169,1171,1173,1175,1177,1179,1181,1183,1185,1188,1190,1192,1195,1197,1199,1201,1203],{"class":344,"line":574},[342,1119,577],{"class":348},[342,1121,1122],{"class":522}," cached",[342,1124,601],{"class":356},[342,1126,715],{"class":367},[342,1128,533],{"class":356},[342,1130,706],{"class":367},[342,1132,1133],{"class":356},">(",[342,1135,1136],{"class":352},"fn",[342,1138,526],{"class":356},[342,1140,1141],{"class":356}," (...",[342,1143,701],{"class":360},[342,1145,526],{"class":356},[342,1147,706],{"class":367},[342,1149,633],{"class":356},[342,1151,1152],{"class":348}," =>",[342,1154,686],{"class":367},[342,1156,1063],{"class":356},[342,1158,598],{"class":367},[342,1160,601],{"class":356},[342,1162,715],{"class":367},[342,1164,1165],{"class":356},">,",[342,1167,1168],{"class":360}," options",[342,1170,364],{"class":356},[342,1172,368],{"class":367},[342,1174,371],{"class":356},[342,1176,434],{"class":367},[342,1178,601],{"class":356},[342,1180,715],{"class":367},[342,1182,533],{"class":356},[342,1184,706],{"class":367},[342,1186,1187],{"class":356},">):",[342,1189,368],{"class":367},[342,1191,371],{"class":356},[342,1193,1194],{"class":367},"CachedFunction",[342,1196,601],{"class":356},[342,1198,715],{"class":367},[342,1200,533],{"class":356},[342,1202,706],{"class":367},[342,1204,718],{"class":356},[342,1206,1207,1209,1212,1214,1216,1218,1220,1222,1224,1226,1228,1230,1233,1235,1237,1239,1242,1244,1246,1248,1250,1252,1254,1256],{"class":344,"line":612},[342,1208,577],{"class":348},[342,1210,1211],{"class":522}," invalidate",[342,1213,601],{"class":356},[342,1215,672],{"class":367},[342,1217,1133],{"class":356},[342,1219,361],{"class":360},[342,1221,526],{"class":356},[342,1223,368],{"class":367},[342,1225,371],{"class":356},[342,1227,434],{"class":367},[342,1229,601],{"class":356},[342,1231,1232],{"class":367},"any",[342,1234,533],{"class":356},[342,1236,706],{"class":367},[342,1238,1165],{"class":356},[342,1240,1241],{"class":356}," ...",[342,1243,701],{"class":360},[342,1245,526],{"class":356},[342,1247,706],{"class":367},[342,1249,377],{"class":356},[342,1251,598],{"class":367},[342,1253,601],{"class":356},[342,1255,767],{"class":367},[342,1257,718],{"class":356},[342,1259,1260,1262,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307],{"class":344,"line":638},[342,1261,577],{"class":348},[342,1263,1264],{"class":522}," expire",[342,1266,601],{"class":356},[342,1268,672],{"class":367},[342,1270,1133],{"class":356},[342,1272,361],{"class":360},[342,1274,526],{"class":356},[342,1276,368],{"class":367},[342,1278,371],{"class":356},[342,1280,434],{"class":367},[342,1282,601],{"class":356},[342,1284,1232],{"class":367},[342,1286,533],{"class":356},[342,1288,706],{"class":367},[342,1290,1165],{"class":356},[342,1292,1241],{"class":356},[342,1294,701],{"class":360},[342,1296,526],{"class":356},[342,1298,706],{"class":367},[342,1300,377],{"class":356},[342,1302,598],{"class":367},[342,1304,601],{"class":356},[342,1306,767],{"class":367},[342,1308,718],{"class":356},[342,1310,1311,1313,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358,1360],{"class":344,"line":644},[342,1312,577],{"class":348},[342,1314,1315],{"class":522}," resolveKeys",[342,1317,601],{"class":356},[342,1319,672],{"class":367},[342,1321,1133],{"class":356},[342,1323,361],{"class":360},[342,1325,526],{"class":356},[342,1327,368],{"class":367},[342,1329,371],{"class":356},[342,1331,434],{"class":367},[342,1333,601],{"class":356},[342,1335,1232],{"class":367},[342,1337,533],{"class":356},[342,1339,706],{"class":367},[342,1341,1165],{"class":356},[342,1343,1241],{"class":356},[342,1345,701],{"class":360},[342,1347,526],{"class":356},[342,1349,706],{"class":367},[342,1351,377],{"class":356},[342,1353,598],{"class":367},[342,1355,601],{"class":356},[342,1357,741],{"class":367},[342,1359,681],{"class":467},[342,1361,718],{"class":356},[342,1363,1365],{"class":344,"line":1364},9,[342,1366,647],{"class":356},[328,1368,1370],{"id":1369},"methods","Methods",[1372,1373,1375],"h4",{"id":1374},"configure",[312,1376,1377],{},"configure()",[308,1379,1380],{},"Sets the application wide cache defaults. Options passed per cached function always win. Repeated calls merge into the existing defaults.",[333,1382,1384],{"className":335,"code":1383,"language":337,"meta":338,"style":338},"public configure(defaults: CacheTypes.Defaults): void\n",[312,1385,1386],{"__ignoreMap":338},[342,1387,1388,1391,1393,1396,1398,1401],{"class":344,"line":345},[342,1389,1390],{"class":467},"public ",[342,1392,1374],{"class":352},[342,1394,1395],{"class":467},"(defaults: CacheTypes",[342,1397,371],{"class":356},[342,1399,1400],{"class":467},"Defaults): ",[342,1402,1403],{"class":356},"void\n",[308,1405,1406],{},[384,1407,450],{},[333,1409,1411],{"className":335,"code":1410,"language":337,"meta":338,"style":338},"container.get(CacheManager).configure({\n  storage: 'cache',\n  maxAge: 60,\n  swr: true,\n  staleMaxAge: 600,\n  onError: (error) => logger.error('Cache failure', error),\n});\n",[312,1412,1413,1435,1451,1463,1474,1486,1526],{"__ignoreMap":338},[342,1414,1415,1418,1420,1423,1426,1428,1430,1432],{"class":344,"line":345},[342,1416,1417],{"class":467},"container",[342,1419,371],{"class":356},[342,1421,1422],{"class":352},"get",[342,1424,1425],{"class":467},"(CacheManager)",[342,1427,371],{"class":356},[342,1429,1374],{"class":352},[342,1431,357],{"class":467},[342,1433,1434],{"class":356},"{\n",[342,1436,1437,1440,1442,1444,1446,1448],{"class":344,"line":488},[342,1438,1439],{"class":522},"  storage",[342,1441,526],{"class":356},[342,1443,476],{"class":356},[342,1445,564],{"class":479},[342,1447,482],{"class":356},[342,1449,1450],{"class":356},",\n",[342,1452,1453,1456,1458,1461],{"class":344,"line":494},[342,1454,1455],{"class":522},"  maxAge",[342,1457,526],{"class":356},[342,1459,1460],{"class":529}," 60",[342,1462,1450],{"class":356},[342,1464,1465,1468,1470,1472],{"class":344,"line":509},[342,1466,1467],{"class":522},"  swr",[342,1469,526],{"class":356},[342,1471,542],{"class":541},[342,1473,1450],{"class":356},[342,1475,1476,1479,1481,1484],{"class":344,"line":574},[342,1477,1478],{"class":522},"  staleMaxAge",[342,1480,526],{"class":356},[342,1482,1483],{"class":529}," 600",[342,1485,1450],{"class":356},[342,1487,1488,1491,1493,1496,1499,1501,1503,1506,1508,1510,1512,1514,1517,1519,1521,1524],{"class":344,"line":612},[342,1489,1490],{"class":352},"  onError",[342,1492,526],{"class":356},[342,1494,1495],{"class":356}," (",[342,1497,1498],{"class":360},"error",[342,1500,633],{"class":356},[342,1502,1152],{"class":348},[342,1504,1505],{"class":467}," logger",[342,1507,371],{"class":356},[342,1509,1498],{"class":352},[342,1511,357],{"class":467},[342,1513,482],{"class":356},[342,1515,1516],{"class":479},"Cache failure",[342,1518,482],{"class":356},[342,1520,533],{"class":356},[342,1522,1523],{"class":467}," error)",[342,1525,1450],{"class":356},[342,1527,1528,1531,1533],{"class":344,"line":638},[342,1529,1530],{"class":356},"}",[342,1532,633],{"class":467},[342,1534,485],{"class":356},[1372,1536,1538],{"id":1537},"cached",[312,1539,1540],{},"cached()",[308,1542,1543],{},"Wraps a function with caching. Use it for functions that are not class methods, or when the options are only known at runtime.",[333,1545,1547],{"className":335,"code":1546,"language":337,"meta":338,"style":338},"public cached\u003CT, ArgsT extends unknown[]>(\n  fn: (...args: ArgsT) => T | Promise\u003CT>,\n  options?: CacheTypes.Options\u003CT, ArgsT>,\n): CacheTypes.CachedFunction\u003CT, ArgsT>\n",[312,1548,1549,1570,1602,1625],{"__ignoreMap":338},[342,1550,1551,1553,1555,1557,1559,1561,1563,1565,1567],{"class":344,"line":345},[342,1552,1390],{"class":467},[342,1554,1537],{"class":352},[342,1556,601],{"class":356},[342,1558,715],{"class":367},[342,1560,533],{"class":356},[342,1562,706],{"class":367},[342,1564,675],{"class":348},[342,1566,678],{"class":367},[342,1568,1569],{"class":467},"[]>(\n",[342,1571,1572,1575,1577,1579,1581,1583,1585,1587,1589,1591,1593,1595,1597,1599],{"class":344,"line":488},[342,1573,1574],{"class":352},"  fn",[342,1576,526],{"class":356},[342,1578,1141],{"class":356},[342,1580,701],{"class":360},[342,1582,526],{"class":356},[342,1584,706],{"class":367},[342,1586,633],{"class":356},[342,1588,1152],{"class":348},[342,1590,686],{"class":367},[342,1592,1063],{"class":356},[342,1594,598],{"class":367},[342,1596,601],{"class":356},[342,1598,715],{"class":367},[342,1600,1601],{"class":356},">,\n",[342,1603,1604,1607,1609,1611,1613,1615,1617,1619,1621,1623],{"class":344,"line":494},[342,1605,1606],{"class":360},"  options",[342,1608,364],{"class":356},[342,1610,368],{"class":367},[342,1612,371],{"class":356},[342,1614,434],{"class":367},[342,1616,601],{"class":356},[342,1618,715],{"class":367},[342,1620,533],{"class":356},[342,1622,706],{"class":367},[342,1624,1601],{"class":356},[342,1626,1627,1629,1631,1633,1635,1637,1639,1641,1643,1645],{"class":344,"line":509},[342,1628,633],{"class":467},[342,1630,526],{"class":356},[342,1632,368],{"class":367},[342,1634,371],{"class":356},[342,1636,1194],{"class":367},[342,1638,601],{"class":356},[342,1640,715],{"class":367},[342,1642,533],{"class":356},[342,1644,706],{"class":367},[342,1646,1647],{"class":356},">\n",[308,1649,1650,1653,1654,1656,1657,1659,1660,1662],{},[384,1651,1652],{},"Returns:"," the cached function, carrying the same ",[312,1655,817],{},", ",[312,1658,827],{}," and ",[312,1661,837],{}," helpers as a decorated method.",[308,1664,1665,1668,1669,1672,1673,1675],{},[384,1666,1667],{},"Throws:"," ",[312,1670,1671],{},"CacheError"," when ",[312,1674,1136],{}," is not a function.",[308,1677,1678],{},[384,1679,450],{},[333,1681,1683],{"className":335,"code":1682,"language":337,"meta":338,"style":338},"const getRates = cacheManager.cached(\n  (currency: string) => http.get(`\u002Frates\u002F${currency}`),\n  { name: 'getRates', maxAge: 60, swr: true, staleMaxAge: 300 },\n);\n\nawait getRates('EUR');\nawait getRates.invalidate('EUR');\n",[312,1684,1685,1704,1747,1791,1797,1801,1821],{"__ignoreMap":338},[342,1686,1687,1689,1692,1694,1697,1699,1701],{"class":344,"line":345},[342,1688,885],{"class":348},[342,1690,1691],{"class":467}," getRates ",[342,1693,891],{"class":356},[342,1695,1696],{"class":467}," cacheManager",[342,1698,371],{"class":356},[342,1700,1537],{"class":352},[342,1702,1703],{"class":467},"(\n",[342,1705,1706,1709,1712,1714,1716,1718,1720,1723,1725,1727,1729,1732,1735,1738,1740,1743,1745],{"class":344,"line":488},[342,1707,1708],{"class":356},"  (",[342,1710,1711],{"class":360},"currency",[342,1713,526],{"class":356},[342,1715,593],{"class":367},[342,1717,633],{"class":356},[342,1719,1152],{"class":348},[342,1721,1722],{"class":467}," http",[342,1724,371],{"class":356},[342,1726,1422],{"class":352},[342,1728,357],{"class":467},[342,1730,1731],{"class":356},"`",[342,1733,1734],{"class":479},"\u002Frates\u002F",[342,1736,1737],{"class":356},"${",[342,1739,1711],{"class":467},[342,1741,1742],{"class":356},"}`",[342,1744,633],{"class":467},[342,1746,1450],{"class":356},[342,1748,1749,1752,1755,1757,1759,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788],{"class":344,"line":494},[342,1750,1751],{"class":356},"  {",[342,1753,1754],{"class":522}," name",[342,1756,526],{"class":356},[342,1758,476],{"class":356},[342,1760,1761],{"class":479},"getRates",[342,1763,482],{"class":356},[342,1765,533],{"class":356},[342,1767,523],{"class":522},[342,1769,526],{"class":356},[342,1771,1460],{"class":529},[342,1773,533],{"class":356},[342,1775,536],{"class":522},[342,1777,526],{"class":356},[342,1779,542],{"class":541},[342,1781,533],{"class":356},[342,1783,547],{"class":522},[342,1785,526],{"class":356},[342,1787,530],{"class":529},[342,1789,1790],{"class":356}," },\n",[342,1792,1793,1795],{"class":344,"line":509},[342,1794,633],{"class":467},[342,1796,485],{"class":356},[342,1798,1799],{"class":344,"line":574},[342,1800,491],{"emptyLinePlaceholder":56},[342,1802,1803,1805,1808,1810,1812,1815,1817,1819],{"class":344,"line":612},[342,1804,935],{"class":460},[342,1806,1807],{"class":352}," getRates",[342,1809,357],{"class":467},[342,1811,482],{"class":356},[342,1813,1814],{"class":479},"EUR",[342,1816,482],{"class":356},[342,1818,633],{"class":467},[342,1820,485],{"class":356},[342,1822,1823,1825,1827,1829,1831,1833,1835,1837,1839,1841],{"class":344,"line":638},[342,1824,935],{"class":460},[342,1826,1807],{"class":467},[342,1828,371],{"class":356},[342,1830,971],{"class":352},[342,1832,357],{"class":467},[342,1834,482],{"class":356},[342,1836,1814],{"class":479},[342,1838,482],{"class":356},[342,1840,633],{"class":467},[342,1842,485],{"class":356},[1372,1844,1846,1848,1849,1848,1851],{"id":1845},"invalidate-expire-resolvekeys",[312,1847,827],{}," \u002F ",[312,1850,837],{},[312,1852,817],{},[308,1854,1855,1856,1656,1858,1656,1861,1656,1864,1867],{},"Act on entries without holding a reference to the cached function. Pass the same options (",[312,1857,440],{},[312,1859,1860],{},"group",[312,1862,1863],{},"storage",[312,1865,1866],{},"getKey",") the entry was cached with, so the very same keys are resolved.",[333,1869,1871],{"className":335,"code":1870,"language":337,"meta":338,"style":338},"public invalidate\u003CArgsT>(options: CacheTypes.Options\u003Cany, ArgsT>, ...args: ArgsT): Promise\u003Cvoid>\npublic expire\u003CArgsT>(options: CacheTypes.Options\u003Cany, ArgsT>, ...args: ArgsT): Promise\u003Cvoid>\npublic resolveKeys\u003CArgsT>(options: CacheTypes.Options\u003Cany, ArgsT>, ...args: ArgsT): Promise\u003Cstring[]>\n",[312,1872,1873,1913,1949],{"__ignoreMap":338},[342,1874,1875,1877,1879,1881,1883,1885,1888,1890,1892,1894,1896,1898,1900,1902,1904,1907,1910],{"class":344,"line":345},[342,1876,1390],{"class":467},[342,1878,971],{"class":352},[342,1880,601],{"class":356},[342,1882,672],{"class":367},[342,1884,607],{"class":356},[342,1886,1887],{"class":467},"(options: CacheTypes",[342,1889,371],{"class":356},[342,1891,434],{"class":467},[342,1893,601],{"class":356},[342,1895,1232],{"class":467},[342,1897,533],{"class":356},[342,1899,706],{"class":467},[342,1901,1165],{"class":356},[342,1903,1241],{"class":356},[342,1905,1906],{"class":467},"args: ArgsT): ",[342,1908,1909],{"class":367},"Promise",[342,1911,1912],{"class":356},"\u003Cvoid>\n",[342,1914,1915,1917,1919,1921,1923,1925,1927,1929,1931,1933,1935,1937,1939,1941,1943,1945,1947],{"class":344,"line":488},[342,1916,1390],{"class":467},[342,1918,994],{"class":352},[342,1920,601],{"class":356},[342,1922,672],{"class":367},[342,1924,607],{"class":356},[342,1926,1887],{"class":467},[342,1928,371],{"class":356},[342,1930,434],{"class":467},[342,1932,601],{"class":356},[342,1934,1232],{"class":467},[342,1936,533],{"class":356},[342,1938,706],{"class":467},[342,1940,1165],{"class":356},[342,1942,1241],{"class":356},[342,1944,1906],{"class":467},[342,1946,1909],{"class":367},[342,1948,1912],{"class":356},[342,1950,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1988],{"class":344,"line":494},[342,1952,1390],{"class":467},[342,1954,942],{"class":352},[342,1956,601],{"class":356},[342,1958,672],{"class":367},[342,1960,607],{"class":356},[342,1962,1887],{"class":467},[342,1964,371],{"class":356},[342,1966,434],{"class":467},[342,1968,601],{"class":356},[342,1970,1232],{"class":467},[342,1972,533],{"class":356},[342,1974,706],{"class":467},[342,1976,1165],{"class":356},[342,1978,1241],{"class":356},[342,1980,1906],{"class":467},[342,1982,1909],{"class":367},[342,1984,601],{"class":356},[342,1986,1987],{"class":467},"string[]",[342,1989,1647],{"class":356},[308,1991,1992],{},[384,1993,450],{},[333,1995,1997],{"className":335,"code":1996,"language":337,"meta":338,"style":338},"\u002F\u002F drop what UsersService.getUser cached for user 123, from anywhere in the app\nawait cacheManager.invalidate({ name: 'UsersService.getUser', storage: 'cache' }, '123');\n",[312,1998,1999,2004],{"__ignoreMap":338},[342,2000,2001],{"class":344,"line":345},[342,2002,2003],{"class":959},"\u002F\u002F drop what UsersService.getUser cached for user 123, from anywhere in the app\n",[342,2005,2006,2008,2010,2012,2014,2016,2018,2020,2022,2024,2027,2029,2031,2033,2035,2037,2039,2041,2044,2046,2048,2050,2052],{"class":344,"line":488},[342,2007,935],{"class":460},[342,2009,1696],{"class":467},[342,2011,371],{"class":356},[342,2013,971],{"class":352},[342,2015,357],{"class":467},[342,2017,519],{"class":356},[342,2019,1754],{"class":522},[342,2021,526],{"class":356},[342,2023,476],{"class":356},[342,2025,2026],{"class":479},"UsersService.getUser",[342,2028,482],{"class":356},[342,2030,533],{"class":356},[342,2032,557],{"class":522},[342,2034,526],{"class":356},[342,2036,476],{"class":356},[342,2038,564],{"class":479},[342,2040,482],{"class":356},[342,2042,2043],{"class":356}," },",[342,2045,476],{"class":356},[342,2047,949],{"class":479},[342,2049,482],{"class":356},[342,2051,633],{"class":467},[342,2053,485],{"class":356},[317,2055,2057],{"id":2056},"cachetypesoptions-interface","CacheTypes.Options (Interface)",[308,2059,2060,2061,1659,2063,371],{},"Options accepted by ",[312,2062,322],{},[312,2064,2065],{},"CacheManager.cached()",[388,2067,2068,2082],{},[391,2069,2070],{},[394,2071,2072,2075,2077,2080],{},[397,2073,2074],{},"Option",[397,2076,402],{},[397,2078,2079],{},"Default",[397,2081,408],{},[410,2083,2084,2101,2119,2138,2158,2177,2198,2215,2232,2253,2273,2291,2308,2328,2346],{},[394,2085,2086,2090,2094,2098],{},[415,2087,2088],{},[312,2089,440],{},[415,2091,2092],{},[312,2093,741],{},[415,2095,2096],{},[312,2097,444],{},[415,2099,2100],{},"Name used as part of the cache key.",[394,2102,2103,2107,2111,2116],{},[415,2104,2105],{},[312,2106,1860],{},[415,2108,2109],{},[312,2110,741],{},[415,2112,2113],{},[312,2114,2115],{},"'functions'",[415,2117,2118],{},"Key group prefix, useful for grouping related entries.",[394,2120,2121,2125,2130,2135],{},[415,2122,2123],{},[312,2124,1863],{},[415,2126,2127],{},[312,2128,2129],{},"string | string[]",[415,2131,2132],{},[312,2133,2134],{},"'default'",[415,2136,2137],{},"Mounted storage(s) backing the entries. An array reads in order and writes to all; it must not be empty, and a name must not contain a colon.",[394,2139,2140,2145,2150,2155],{},[415,2141,2142],{},[312,2143,2144],{},"maxAge",[415,2146,2147],{},[312,2148,2149],{},"number",[415,2151,2152],{},[312,2153,2154],{},"1",[415,2156,2157],{},"Seconds an entry stays fresh.",[394,2159,2160,2164,2169,2174],{},[415,2161,2162],{},[312,2163,843],{},[415,2165,2166],{},[312,2167,2168],{},"boolean",[415,2170,2171],{},[312,2172,2173],{},"false",[415,2175,2176],{},"Serve a stale entry while refreshing it in the background.",[394,2178,2179,2184,2188,2191],{},[415,2180,2181],{},[312,2182,2183],{},"staleMaxAge",[415,2185,2186],{},[312,2187,2149],{},[415,2189,2190],{},"-",[415,2192,2193,2194,2197],{},"Seconds a stale entry may still be served while revalidating. ",[312,2195,2196],{},"0"," never serves stale.",[394,2199,2200,2204,2209,2212],{},[415,2201,2202],{},[312,2203,1866],{},[415,2205,2206],{},[312,2207,2208],{},"(...args) => string | Promise\u003Cstring>",[415,2210,2211],{},"hash of the arguments",[415,2213,2214],{},"Derives the key segment from the arguments.",[394,2216,2217,2222,2227,2229],{},[415,2218,2219],{},[312,2220,2221],{},"getMaxAge",[415,2223,2224],{},[312,2225,2226],{},"(entry) => number | { maxAge?, staleMaxAge? }",[415,2228,2190],{},[415,2230,2231],{},"Derives the lifetime from the resolved value.",[394,2233,2234,2239,2244,2247],{},[415,2235,2236],{},[312,2237,2238],{},"validate",[415,2240,2241],{},[312,2242,2243],{},"(entry, ctx) => boolean | Promise\u003Cboolean>",[415,2245,2246],{},"value is defined",[415,2248,2249,2250,2252],{},"Return ",[312,2251,2173],{}," to treat an entry as invalid and re-resolve.",[394,2254,2255,2260,2265,2267],{},[415,2256,2257],{},[312,2258,2259],{},"shouldBypassCache",[415,2261,2262],{},[312,2263,2264],{},"(...args) => boolean | Promise\u003Cboolean>",[415,2266,2190],{},[415,2268,2249,2269,2272],{},[312,2270,2271],{},"true"," to skip the cache entirely for this call.",[394,2274,2275,2280,2284,2286],{},[415,2276,2277],{},[312,2278,2279],{},"shouldInvalidateCache",[415,2281,2282],{},[312,2283,2264],{},[415,2285,2190],{},[415,2287,2249,2288,2290],{},[312,2289,2271],{}," to drop the entry and re-resolve.",[394,2292,2293,2298,2303,2305],{},[415,2294,2295],{},[312,2296,2297],{},"serialize",[415,2299,2300],{},[312,2301,2302],{},"(entry, ctx) => any",[415,2304,2190],{},[415,2306,2307],{},"Convert the resolved value into a storable shape. Runs once per resolution.",[394,2309,2310,2315,2320,2322],{},[415,2311,2312],{},[312,2313,2314],{},"transform",[415,2316,2317],{},[312,2318,2319],{},"(entry, ...args) => any",[415,2321,2190],{},[415,2323,2324,2325,371],{},"Rebuild the usable value when an entry is read back. Also receives ",[312,2326,2327],{},"entry.status",[394,2329,2330,2335,2340,2343],{},[415,2331,2332],{},[312,2333,2334],{},"integrity",[415,2336,2337],{},[312,2338,2339],{},"unknown",[415,2341,2342],{},"hash of the method and its options",[415,2344,2345],{},"Overrides the value that invalidates entries when the code changes.",[394,2347,2348,2353,2358,2361],{},[415,2349,2350],{},[312,2351,2352],{},"onError",[415,2354,2355],{},[312,2356,2357],{},"(error: unknown) => void",[415,2359,2360],{},"logs to console",[415,2362,2363],{},"Called for every cache related error (read, write, background refresh).",[328,2365,2367],{"id":2366},"entrystatus",[312,2368,2327],{},[308,2370,2371,2372,2374],{},"Inside ",[312,2373,2314],{}," the entry carries how the value was served on that call:",[388,2376,2377,2387],{},[391,2378,2379],{},[394,2380,2381,2384],{},[397,2382,2383],{},"Status",[397,2385,2386],{},"Meaning",[410,2388,2389,2399,2409,2419],{},[394,2390,2391,2396],{},[415,2392,2393],{},[312,2394,2395],{},"hit",[415,2397,2398],{},"A fresh cached value was returned without re-resolving.",[394,2400,2401,2406],{},[415,2402,2403],{},[312,2404,2405],{},"stale",[415,2407,2408],{},"A stale value was served while a background refresh runs.",[394,2410,2411,2416],{},[415,2412,2413],{},[312,2414,2415],{},"revalidated",[415,2417,2418],{},"A prior value existed but was expired, so it was re-resolved before returning.",[394,2420,2421,2426],{},[415,2422,2423],{},[312,2424,2425],{},"miss",[415,2427,2428],{},"The value was resolved fresh on this call.",[333,2430,2432],{"className":335,"code":2431,"language":337,"meta":338,"style":338},"@Cache({\n  maxAge: 60,\n  swr: true,\n  staleMaxAge: 300,\n  transform: (entry) => {\n    metrics.increment(`cache.${entry.status}`);\n    return entry.value;\n  },\n})\npublic async getRates(currency: string): Promise\u003CRates> { \u002F* ... *\u002F }\n",[312,2433,2434,2445,2455,2465,2475,2493,2525,2539,2544,2550],{"__ignoreMap":338},[342,2435,2436,2439,2441,2443],{"class":344,"line":345},[342,2437,2438],{"class":356},"@",[342,2440,181],{"class":352},[342,2442,357],{"class":467},[342,2444,1434],{"class":356},[342,2446,2447,2449,2451,2453],{"class":344,"line":488},[342,2448,1455],{"class":522},[342,2450,526],{"class":356},[342,2452,1460],{"class":529},[342,2454,1450],{"class":356},[342,2456,2457,2459,2461,2463],{"class":344,"line":494},[342,2458,1467],{"class":522},[342,2460,526],{"class":356},[342,2462,542],{"class":541},[342,2464,1450],{"class":356},[342,2466,2467,2469,2471,2473],{"class":344,"line":509},[342,2468,1478],{"class":522},[342,2470,526],{"class":356},[342,2472,530],{"class":529},[342,2474,1450],{"class":356},[342,2476,2477,2480,2482,2484,2487,2489,2491],{"class":344,"line":574},[342,2478,2479],{"class":352},"  transform",[342,2481,526],{"class":356},[342,2483,1495],{"class":356},[342,2485,2486],{"class":360},"entry",[342,2488,633],{"class":356},[342,2490,1152],{"class":348},[342,2492,506],{"class":356},[342,2494,2495,2498,2500,2503,2505,2507,2510,2512,2514,2516,2519,2521,2523],{"class":344,"line":612},[342,2496,2497],{"class":467},"    metrics",[342,2499,371],{"class":356},[342,2501,2502],{"class":352},"increment",[342,2504,357],{"class":522},[342,2506,1731],{"class":356},[342,2508,2509],{"class":479},"cache.",[342,2511,1737],{"class":356},[342,2513,2486],{"class":467},[342,2515,371],{"class":356},[342,2517,2518],{"class":467},"status",[342,2520,1742],{"class":356},[342,2522,633],{"class":522},[342,2524,485],{"class":356},[342,2526,2527,2529,2532,2534,2537],{"class":344,"line":638},[342,2528,615],{"class":460},[342,2530,2531],{"class":467}," entry",[342,2533,371],{"class":356},[342,2535,2536],{"class":467},"value",[342,2538,485],{"class":356},[342,2540,2541],{"class":344,"line":644},[342,2542,2543],{"class":356},"  },\n",[342,2545,2546,2548],{"class":344,"line":1364},[342,2547,1530],{"class":356},[342,2549,571],{"class":467},[342,2551,2553,2556,2558,2561,2563,2565,2568,2570,2572,2575],{"class":344,"line":2552},10,[342,2554,2555],{"class":467},"public async ",[342,2557,1761],{"class":352},[342,2559,2560],{"class":467},"(currency: string): ",[342,2562,1909],{"class":367},[342,2564,601],{"class":356},[342,2566,2567],{"class":467},"Rates",[342,2569,607],{"class":356},[342,2571,464],{"class":356},[342,2573,2574],{"class":959}," \u002F* ... *\u002F",[342,2576,2577],{"class":356}," }\n",[317,2579,2581],{"id":2580},"cachetypesdefaults-interface","CacheTypes.Defaults (Interface)",[308,2583,2584,2585,2588],{},"Application wide defaults passed to ",[312,2586,2587],{},"CacheManager.configure()",". Every field is optional and is overridden by per-function options.",[388,2590,2591,2601],{},[391,2592,2593],{},[394,2594,2595,2597,2599],{},[397,2596,2074],{},[397,2598,402],{},[397,2600,408],{},[410,2602,2603,2616,2629,2642,2655,2668],{},[394,2604,2605,2609,2613],{},[415,2606,2607],{},[312,2608,2144],{},[415,2610,2611],{},[312,2612,2149],{},[415,2614,2615],{},"Default freshness window in seconds.",[394,2617,2618,2622,2626],{},[415,2619,2620],{},[312,2621,843],{},[415,2623,2624],{},[312,2625,2168],{},[415,2627,2628],{},"Default stale-while-revalidate behaviour.",[394,2630,2631,2635,2639],{},[415,2632,2633],{},[312,2634,2183],{},[415,2636,2637],{},[312,2638,2149],{},[415,2640,2641],{},"Default stale window in seconds.",[394,2643,2644,2648,2652],{},[415,2645,2646],{},[312,2647,1860],{},[415,2649,2650],{},[312,2651,741],{},[415,2653,2654],{},"Default key group prefix.",[394,2656,2657,2661,2665],{},[415,2658,2659],{},[312,2660,1863],{},[415,2662,2663],{},[312,2664,2129],{},[415,2666,2667],{},"Default storage(s) to keep entries in.",[394,2669,2670,2674,2678],{},[415,2671,2672],{},[312,2673,2352],{},[415,2675,2676],{},[312,2677,2357],{},[415,2679,2680],{},"Default cache error handler.",[317,2682,2684],{"id":2683},"cachestorageadapter-class","CacheStorageAdapter (Class)",[308,2686,2687,2688,2691,2692,2695],{},"Bridges the caching engine onto the Vercube ",[312,2689,2690],{},"StorageManager",". You rarely touch it directly - ",[312,2693,2694],{},"CacheManager"," creates one during initialization and binds every cached function to it - but it defines how cache keys map onto storages.",[328,2697,331],{"id":2698},"signature-2",[333,2700,2702],{"className":335,"code":2701,"language":337,"meta":338,"style":338},"class CacheStorageAdapter {\n  public get\u003CT>(key: string): Promise\u003CT | null>;\n  public set\u003CT>(key: string, value: T, opts?: { ttl?: number }): Promise\u003Cvoid>;\n}\n",[312,2703,2704,2712,2745,2801],{"__ignoreMap":338},[342,2705,2706,2708,2710],{"class":344,"line":345},[342,2707,1039],{"class":348},[342,2709,1060],{"class":367},[342,2711,506],{"class":356},[342,2713,2714,2716,2718,2720,2722,2724,2727,2729,2731,2733,2735,2737,2739,2741,2743],{"class":344,"line":488},[342,2715,577],{"class":348},[342,2717,1051],{"class":522},[342,2719,601],{"class":356},[342,2721,715],{"class":367},[342,2723,1133],{"class":356},[342,2725,2726],{"class":360},"key",[342,2728,526],{"class":356},[342,2730,593],{"class":367},[342,2732,377],{"class":356},[342,2734,598],{"class":367},[342,2736,601],{"class":356},[342,2738,715],{"class":367},[342,2740,1063],{"class":356},[342,2742,1066],{"class":367},[342,2744,718],{"class":356},[342,2746,2747,2749,2752,2754,2756,2758,2760,2762,2764,2766,2769,2771,2773,2775,2778,2780,2782,2785,2787,2790,2793,2795,2797,2799],{"class":344,"line":494},[342,2748,577],{"class":348},[342,2750,2751],{"class":522}," set",[342,2753,601],{"class":356},[342,2755,715],{"class":367},[342,2757,1133],{"class":356},[342,2759,2726],{"class":360},[342,2761,526],{"class":356},[342,2763,593],{"class":367},[342,2765,533],{"class":356},[342,2767,2768],{"class":360}," value",[342,2770,526],{"class":356},[342,2772,686],{"class":367},[342,2774,533],{"class":356},[342,2776,2777],{"class":360}," opts",[342,2779,364],{"class":356},[342,2781,464],{"class":356},[342,2783,2784],{"class":522}," ttl",[342,2786,364],{"class":356},[342,2788,2789],{"class":367}," number",[342,2791,2792],{"class":356}," }):",[342,2794,598],{"class":367},[342,2796,601],{"class":356},[342,2798,767],{"class":367},[342,2800,718],{"class":356},[342,2802,2803],{"class":344,"line":509},[342,2804,647],{"class":356},[308,2806,2807,2808,2811],{},"Writing ",[312,2809,2810],{},"null"," deletes the entry, mirroring how the caching engine signals invalidation.",[328,2813,2815],{"id":2814},"key-helpers","Key helpers",[333,2817,2819],{"className":335,"code":2818,"language":337,"meta":338,"style":338},"const CACHE_BASE_PREFIX = '\u002Fcache';\n\nfunction cacheBaseForStorage(storage?: string): string;\nfunction storageNameFromCacheKey(key: string): string;\n",[312,2820,2821,2839,2843,2864],{"__ignoreMap":338},[342,2822,2823,2825,2828,2830,2832,2835,2837],{"class":344,"line":345},[342,2824,885],{"class":348},[342,2826,2827],{"class":467}," CACHE_BASE_PREFIX ",[342,2829,891],{"class":356},[342,2831,476],{"class":356},[342,2833,2834],{"class":479},"\u002Fcache",[342,2836,482],{"class":356},[342,2838,485],{"class":356},[342,2840,2841],{"class":344,"line":488},[342,2842,491],{"emptyLinePlaceholder":56},[342,2844,2845,2847,2850,2852,2854,2856,2858,2860,2862],{"class":344,"line":494},[342,2846,349],{"class":348},[342,2848,2849],{"class":352}," cacheBaseForStorage",[342,2851,357],{"class":356},[342,2853,1863],{"class":360},[342,2855,364],{"class":356},[342,2857,593],{"class":367},[342,2859,377],{"class":356},[342,2861,593],{"class":367},[342,2863,485],{"class":356},[342,2865,2866,2868,2871,2873,2875,2877,2879,2881,2883],{"class":344,"line":509},[342,2867,349],{"class":348},[342,2869,2870],{"class":352}," storageNameFromCacheKey",[342,2872,357],{"class":356},[342,2874,2726],{"class":360},[342,2876,526],{"class":356},[342,2878,593],{"class":367},[342,2880,377],{"class":356},[342,2882,593],{"class":367},[342,2884,485],{"class":356},[388,2886,2887,2896],{},[391,2888,2889],{},[394,2890,2891,2894],{},[397,2892,2893],{},"Function",[397,2895,408],{},[410,2897,2898,2918],{},[394,2899,2900,2905],{},[415,2901,2902],{},[312,2903,2904],{},"cacheBaseForStorage()",[415,2906,2907,2908,2911,2912,2915,2916,371],{},"Builds the key base for a mounted storage: ",[312,2909,2910],{},"'redis'"," becomes ",[312,2913,2914],{},"\u002Fcache\u002Fredis",", the default storage stays ",[312,2917,2834],{},[394,2919,2920,2925],{},[415,2921,2922],{},[312,2923,2924],{},"storageNameFromCacheKey()",[415,2926,2927],{},"Reads the storage name back out of a full cache key.",[308,2929,2930],{},"A complete key looks like:",[333,2932,2937],{"className":2933,"code":2935,"language":2936},[2934],"language-text","\u002Fcache\u002Fredis:functions:UsersServicegetUser.GuK_juM6...:NYOXd4T2....json\n└─ base ──┘ └─ group ┘ └────── name ───────────────┘ └─ arg hash ─┘\n","text",[312,2938,2935],{"__ignoreMap":338},[308,2940,2941,2942,1659,2944,2946,2947,2950,2951,2953,2954,2957,2958,2960],{},"The ",[312,2943,1860],{},[312,2945,440],{}," segments are sanitized before they reach the key: every character outside ",[312,2948,2949],{},"[A-Za-z0-9_]"," is dropped and a hash of the original is appended when that changes the value, which is why ",[312,2952,2026],{}," reads as ",[312,2955,2956],{},"UsersServicegetUser.GuK_juM6...",". Call ",[312,2959,817],{}," rather than assembling a key by hand.",[1008,2962,2963],{},[308,2964,2965,2966,2969],{},"When a cached function points at a storage that has not been mounted, the adapter mounts a ",[312,2967,2968],{},"MemoryStorage"," under that name on first use and logs a warning. Mounting the name yourself - before or after - is what swaps the backend for a real one.",[317,2971,2973],{"id":2972},"cacheerror-class","CacheError (Class)",[308,2975,2976,2977,2979,2980,2982],{},"Thrown for cache configuration and wiring failures: decorating a non-method, using the cache without a ",[312,2978,2690],{}," bound, passing an empty ",[312,2981,1863],{}," list, or a storage name containing a colon (which would break key routing).",[328,2984,331],{"id":2985},"signature-3",[333,2987,2989],{"className":335,"code":2988,"language":337,"meta":338,"style":338},"class CacheError extends Error {\n  public readonly operation: string;\n  public readonly cause?: Error;\n  public readonly metadata?: Record\u003Cstring, unknown>;\n}\n",[312,2990,2991,3005,3021,3036,3060],{"__ignoreMap":338},[342,2992,2993,2995,2998,3000,3003],{"class":344,"line":345},[342,2994,1039],{"class":348},[342,2996,2997],{"class":367}," CacheError",[342,2999,675],{"class":348},[342,3001,3002],{"class":367}," Error",[342,3004,506],{"class":356},[342,3006,3007,3009,3012,3015,3017,3019],{"class":344,"line":488},[342,3008,577],{"class":348},[342,3010,3011],{"class":348}," readonly",[342,3013,3014],{"class":522}," operation",[342,3016,526],{"class":356},[342,3018,593],{"class":367},[342,3020,485],{"class":356},[342,3022,3023,3025,3027,3030,3032,3034],{"class":344,"line":494},[342,3024,577],{"class":348},[342,3026,3011],{"class":348},[342,3028,3029],{"class":522}," cause",[342,3031,364],{"class":356},[342,3033,3002],{"class":367},[342,3035,485],{"class":356},[342,3037,3038,3040,3042,3045,3047,3050,3052,3054,3056,3058],{"class":344,"line":509},[342,3039,577],{"class":348},[342,3041,3011],{"class":348},[342,3043,3044],{"class":522}," metadata",[342,3046,364],{"class":356},[342,3048,3049],{"class":367}," Record",[342,3051,601],{"class":356},[342,3053,741],{"class":367},[342,3055,533],{"class":356},[342,3057,678],{"class":367},[342,3059,718],{"class":356},[342,3061,3062],{"class":344,"line":574},[342,3063,647],{"class":356},[388,3065,3066,3077],{},[391,3067,3068],{},[394,3069,3070,3073,3075],{},[397,3071,3072],{},"Property",[397,3074,402],{},[397,3076,408],{},[410,3078,3079,3093,3108],{},[394,3080,3081,3086,3090],{},[415,3082,3083],{},[312,3084,3085],{},"operation",[415,3087,3088],{},[312,3089,741],{},[415,3091,3092],{},"The cache operation that failed.",[394,3094,3095,3100,3105],{},[415,3096,3097],{},[312,3098,3099],{},"cause",[415,3101,3102],{},[312,3103,3104],{},"Error",[415,3106,3107],{},"The underlying error, when there is one.",[394,3109,3110,3115,3120],{},[415,3111,3112],{},[312,3113,3114],{},"metadata",[415,3116,3117],{},[312,3118,3119],{},"Record\u003Cstring, unknown>",[415,3121,3122],{},"Non-sensitive context about the failure.",[308,3124,3125,3126,3129,3130,3132,3133,3135,3136,3138],{},"Storage failures that happen while serving a cached call are ",[384,3127,3128],{},"not"," thrown - they are routed to the ",[312,3131,2352],{}," option so a failing cache never takes the request down. Failures during an explicit ",[312,3134,827],{}," or ",[312,3137,837],{}," do propagate, since you asked for that write to happen.",[3140,3141,3142],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .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}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":338,"searchDepth":345,"depth":488,"links":3144},[3145,3150,3154,3157,3158,3162],{"id":319,"depth":488,"text":3146,"children":3147},"@Cache() (Decorator)",[3148,3149],{"id":330,"depth":494,"text":331},{"id":650,"depth":494,"text":651},{"id":1015,"depth":488,"text":1016,"children":3151},[3152,3153],{"id":1029,"depth":494,"text":331},{"id":1369,"depth":494,"text":1370},{"id":2056,"depth":488,"text":2057,"children":3155},[3156],{"id":2366,"depth":494,"text":2327},{"id":2580,"depth":488,"text":2581},{"id":2683,"depth":488,"text":2684,"children":3159},[3160,3161],{"id":2698,"depth":494,"text":331},{"id":2814,"depth":494,"text":2815},{"id":2972,"depth":488,"text":2973,"children":3163},[3164],{"id":2985,"depth":494,"text":331},"Complete API reference for Cache module","md",null,{},{"title":101,"description":3165},"4Lub3Z4apvRapx3hfxCJv9w_yKu6H8DeEzhId0UgzLM",[3172,3174],{"title":66,"path":186,"stem":187,"description":3173,"children":-1},"Decorator driven caching for Vercube applications, backed by the Storage module",{"title":66,"path":198,"stem":199,"description":3175,"children":-1},"How Vercube’s default build relates to production and development, and where to deploy.",1787327651654]